[
  {
    "path": ".circleci/config.yml",
    "content": "version: 2\njobs:\n  build:\n    docker:\n      - image: mcr.microsoft.com/dotnet/core/sdk:2.2\n    steps:\n      - checkout\n      - run:\n          name: Restore\n          command: dotnet restore\n          working_directory: src\n      - run:\n          name: Build\n          command: dotnet build\n          working_directory: src\n      - run:\n          name: Run App\n          command: dotnet run\n          working_directory: src  "
  },
  {
    "path": ".gitignore",
    "content": "\n#Ignore thumbnails created by Windows\nThumbs.db\n#Ignore files built by Visual Studio\n*.obj\n*.exe\n*.pdb\n*.user\n*.aps\n*.pch\n*.vspscc\n*_i.c\n*_p.c\n*.ncb\n*.suo\n*.tlb\n*.tlh\n*.bak\n*.cache\n*.ilk\n*.log\n[Bb]in\n[Dd]ebug*/\n*.lib\n*.sbr\nobj/\n[Rr]elease*/\n_ReSharper*/\n[Tt]est[Rr]esult*\n.vs/\n#Nuget packages folder\npackages/\n"
  },
  {
    "path": "README.md",
    "content": "# POS - DDD, Reactive Microservices, CQRS Event Sourcing Powered by DERMAYON LIBRARY\nSample Application DDD Reactive Microservices with CQRS & Event Sourcing with [DERMAYON LIBRARY](https://github.com/NHadi/Dermayon). \n\n# Architectures\n![Image of Architecture](https://github.com/NHadi/Pos/blob/master/images/architecture.png)\n\n# Features\n1. Microservices \n2. CQRS (Command Query Responsibility Segregation)\n3. Event Sourcing\n4. Generic Repository \n5. UnitOfWork\n6. Domain Driven Design\n7. Api Gateway [Ocelot](https://ocelot.readthedocs.io/en/latest/introduction/gettingstarted.html)\n8. Multiple Databases type [MongoDb, SqlServer, etc]\n9. Message Broker [Kafka]\n\n# Information\n![Image of DDD](https://github.com/NHadi/Pos/blob/master/images/ddd.png)\n\n1. Domain Layer : Main of Application like Event, Repository, etc\n2. Infrastructure Layer : Databases, Files, etc\n3. Application Layer : WebApi, etc\n\n# Main Architecture\n![Image of mainarchitecture](https://github.com/NHadi/Pos/blob/master/images/mainarchitecture.png)\n\nMicroservices - also known as the microservice architecture - is an architectural style that structures an application as a collection of services that are\n\n1. Highly maintainable and testable\n2. Loosely coupled\n3. Independently deployable\n4. Organized around business capabilities\n5. Owned by a small team\n\nThe microservice architecture enables the rapid, frequent and reliable delivery of large, complex applications. It also enables an organization to evolve its technology stack. [reference](https://microservices.io/)\n\n\n# API Gateway\n![Image of gateway](https://github.com/NHadi/Pos/blob/master/images/gateway.jpg)\n\nThe API Gateway encapsulates the internal system architecture and provides an API that is tailored to each client. It might have other responsibilities such as authentication, monitoring, load balancing, caching,\n\n# CQRS Event Sourcing\n![Image of cqrss](https://github.com/NHadi/Pos/blob/master/images/cqrss.png)\n\nCQRS stands for Command Query Responsibility Segregation. It's a pattern that I first heard described by Greg Young. At its heart is the notion that you can use a different model to update information than the model you use to read information. For some situations, this separation can be valuable, but beware that for most systems CQRS adds risky complexity.\n\nBenefits when to use CQRS Event Sourcing\n![Image of cqrsmaterialized](https://github.com/NHadi/Pos/blob/master/images/cqrsmaterialized.png)\n\nimagine if the system is too complex and more than 1K user hit in server, how many related tables? and how long does it take to get data? with cqrs & event sourcing we can implement materialized views, or in other words denormalized tables into one data or flat\n\n# Reactive Services, Reactive Manifesto, and Microservices \n![Image of reactive](https://github.com/NHadi/Pos/blob/master/images/reactive.png)\n\nThe Reactive Manifesto outlines qualities of Reactive Systems based on four principles: Responsive, Resilient, Elastic and Message Driven. \n\n1. Responsiveness means the service should respond in a timely manner.\n2. Resilience goes in line with responsiveness, the system should respond even in the face of failure.\n3. Elasticity works with resilience. The ability to spin up new services and for downstream and upstream services and clients to find the new instances is vital to both the resilience of the system as well as the elasticity of the system.  \n4. Message Driven: Reactive Systems rely on asynchronous message passing. This established boundaries between services (in-proc and out of proc) which allows for loose coupling (publish/subscribe or async streams or async calls), isolation (one failure does not ripple through to upstream services and clients), and improved responsive error handling.\n\n## Get started\n\n**Clone the repository**\n\n**Run and Build the app**\n\n```sh\ncd Pos \ndocker-compose up\n```\nwait for completed\n![Image of step1](https://github.com/NHadi/Pos/blob/master/images/step1.png)\n\n**List Url:Port the app**\n```sh\ndocker container ls\n```\n\n![Image of step2](https://github.com/NHadi/Pos/blob/master/images/step2.png)\n\nFor sample we can navigate to PRODUCT SERVICES ::localhost:32771/swagger\n\n![Image of step3](https://github.com/NHadi/Pos/blob/master/images/step3.png)\n\n# Running in GATEWAY\n\nNavigate to postgateway for sample ::localhost:32768/[SERVICES]/[Action]\n\n![Image of step4](https://github.com/NHadi/Pos/blob/master/images/step4.png)\n\nSample Running in Gateway\nhttp://localhost:[PosGatewayPort]/api-product/productCategory/7a3fff4b-54ca-4c21-bf04-c11aea9b7673\n![Image of step5](https://github.com/NHadi/Pos/blob/master/images/step5.png)\n\n# List of Gateway Services\n\n1. Product Services = localhost[::]/api-product/[action]\n2. Customer Services = localhost[::]/api-customer/[action]\n3. Order Services = localhost[::]/api-order/[action]\n4. Report Services = localhost[::]/api-report/[action]\n\n# Check Healty All Services\n![Image of step6](https://github.com/NHadi/Pos/blob/master/images/step6.png)\n\n\nKeep Updates, I'will update for new best practices of technology & software design, architectural\n\n# Thanks\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "src/.dockerignore",
    "content": "**/.classpath\n**/.dockerignore\n**/.env\n**/.git\n**/.gitignore\n**/.project\n**/.settings\n**/.toolstarget\n**/.vs\n**/.vscode\n**/*.*proj.user\n**/*.dbmdl\n**/*.jfm\n**/azds.yaml\n**/bin\n**/charts\n**/docker-compose*\n**/Dockerfile*\n**/node_modules\n**/npm-debug.log\n**/obj\n**/secrets.dev.yaml\n**/values.dev.yaml\nLICENSE\nREADME.md"
  },
  {
    "path": "src/Pos.Customer.Domain/CustomerAggregate/ICustomerRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Customer.Domain.CustomerAggregate\n{\n    public interface ICustomerRepository : IEfRepository<MstCustomer>\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.Domain/CustomerAggregate/MstCustomer.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Pos.Customer.Domain.CustomerAggregate\n{\n    public partial class MstCustomer : EntityBase\n    {\n        public string Name { get; set; }\n        public string Phone { get; set; }\n        public string Address { get; set; }\n    }\n}"
  },
  {
    "path": "src/Pos.Customer.Domain/Pos.Customer.Domain.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Events\\**\" />\n    <EmbeddedResource Remove=\"Events\\**\" />\n    <None Remove=\"Events\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Dermayon.Library\" Version=\"2.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Event.Contracts\\Pos.Event.Contracts.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Customer.Infrastructure/EventSources/POSCustomerEventContext.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Customer.Infrastructure.EventSources\n{\n    public class POSCustomerEventContext : MongoContext\n    {\n        public POSCustomerEventContext(POSCustomerEventContextSetting setting) : base(setting)\n        {\n                \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.Infrastructure/EventSources/POSCustomerEventContextSetting.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Customer.Infrastructure.EventSources\n{\n    public class POSCustomerEventContextSetting : MongoDbSettings\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.Infrastructure/POSCustomerContext.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Pos.Customer.Domain.CustomerAggregate;\n\nnamespace Pos.Customer.Infrastructure\n{\n    public partial class POSCustomerContext : DbContext\n    {\n        public POSCustomerContext()\n        {\n        }\n\n        public POSCustomerContext(DbContextOptions<POSCustomerContext> options)\n            : base(options)\n        {\n            this.Database.EnsureCreated();\n        }\n\n        public virtual DbSet<MstCustomer> Customer { get; set; }\n\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n        {\n            if (!optionsBuilder.IsConfigured)\n            {\n            }\n        }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"2.2.0-rtm-35687\");\n\n            modelBuilder.Entity<MstCustomer>(entity =>\n            {\n                entity.Property(e => e.Id).HasDefaultValueSql(\"NEWID()\");\n\n                entity.Property(e => e.Address).HasMaxLength(255);\n\n                entity.Property(e => e.Name)\n                    .IsRequired()\n                    .HasMaxLength(50);\n\n                entity.Property(e => e.Phone).HasMaxLength(50);\n            });\n\n            OnModelCreatingPartial(modelBuilder);\n        }\n\n        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);\n    }\n}"
  },
  {
    "path": "src/Pos.Customer.Infrastructure/Pos.Customer.Infrastructure.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"DataContextFactory.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Customer.Domain\\Pos.Customer.Domain.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Customer.Infrastructure/Repositories/CustomeRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Customer.Infrastructure.Repositories\n{\n    public class CustomeRepository : EfRepository<MstCustomer>, ICustomerRepository\n    {\n        private readonly POSCustomerContext _context;\n        public CustomeRepository(POSCustomerContext context) : base(context)\n        {\n            _context = context;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/CreateCustomerCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class CreateCustomerCommand : ICommand\n    {\n        public string Name { get; set; }\n        public string Phone { get; set; }\n        public string Address { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/CreateCustomerCommandHandler.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.Infrastructure.EventSources;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class CreateCustomerCommandHandler : ICommandHandler<CreateCustomerCommand>\n    {\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSCustomerEventContext, CustomerCreatedEvent> _eventSources;\n\n        public CreateCustomerCommandHandler(IKakfaProducer kakfaProducer, IEventRepository<POSCustomerEventContext, CustomerCreatedEvent> eventSources)\n        {\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(CreateCustomerCommand command, CancellationToken cancellationToken)\n        {\n            var customerCreatedEvent = new CustomerCreatedEvent\n            {\n                Address = command.Address,\n                Name = command.Name,\n                Phone = command.Phone,\n                CreatedAt = DateTime.Now\n            };\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(customerCreatedEvent, cancellationToken);\n            \n            await _kafkaProducer.Send(customerCreatedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/DeleteCustomerCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class DeleteCustomerCommand : ICommand\n    {\n        public Guid CustomerId { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/DeleteCustomerCommandHandler.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.Infrastructure.EventSources;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class DeleteCustomerCommandHandler : ICommandHandler<DeleteCustomerCommand>\n    {\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSCustomerEventContext, CustomerDeletedEvent> _eventSources;\n        public DeleteCustomerCommandHandler(IKakfaProducer kakfaProducer, \n            IEventRepository<POSCustomerEventContext, CustomerDeletedEvent> eventSources\n            )\n        {\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(DeleteCustomerCommand command, CancellationToken cancellationToken)\n        {\n            var DeletedEvent = new CustomerDeletedEvent\n            {\n                CustomerId = command.CustomerId,                \n                CreatedAt = DateTime.Now\n            };\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(DeletedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(DeletedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/UpdateCustomerCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class UpdateCustomerCommand : ICommand\n    {\n        public Guid CustomerId { get; set; }\n        public string Name { get; set; }\n        public string Phone { get; set; }\n        public string Address { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Commands/UpdateCustomerCommandHandler.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.Infrastructure.EventSources;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class UpdateCustomerCommandHandler : ICommandHandler<UpdateCustomerCommand>\n    {\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSCustomerEventContext, CustomerUpdatedEvent> _eventSources;\n\n        public UpdateCustomerCommandHandler(IKakfaProducer kakfaProducer, IEventRepository<POSCustomerEventContext, CustomerUpdatedEvent> eventSources)\n        {\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(UpdateCustomerCommand command, CancellationToken cancellationToken)\n        {\n            var updatedEvent = new CustomerUpdatedEvent\n            {\n                CustomerId = command.CustomerId,\n                Address = command.Address,\n                Name = command.Name,\n                Phone = command.Phone,\n                CreatedAt = DateTime.Now\n            };\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(updatedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(updatedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/EventHandlers/CustomerCreateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.Infrastructure;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.EventHandlers\n{\n    public class CustomerCreateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSCustomerContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly ICustomerRepository _customerRepository;\n\n        public CustomerCreateEventHandler(IUnitOfWork<POSCustomerContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer, \n            ICustomerRepository customerRepository)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _customerRepository = customerRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume CustomerCreatedEvent\");\n\n                var dataConsomed = jObject.ToObject<CustomerCreatedEvent>();\n                var data = _mapper.Map<MstCustomer>(dataConsomed);\n\n                log.Info(\"Insert Customer\");\n\n                //Consume data to Read Db\n                _customerRepository.Insert(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Inserting data customer\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/EventHandlers/CustomerDeleteEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.Infrastructure;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.EventHandlers\n{\n    public class CustomerDeleteEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSCustomerContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly ICustomerRepository _customerRepository;\n        private readonly ICustomerQueries _customerQueries;\n\n        public CustomerDeleteEventHandler(IUnitOfWork<POSCustomerContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer,\n            ICustomerRepository customerRepository,\n            ICustomerQueries customerQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _customerQueries = customerQueries;\n            _customerRepository = customerRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume CustomerDeletedEvent\");\n\n                var dataConsomed = jObject.ToObject<CustomerDeletedEvent>();\n\n                var data = await _customerQueries.GetCustomer(dataConsomed.CustomerId);\n\n                log.Info(\"Delete Customer\");\n\n                //Consume data to Read Db\n                _customerRepository.Delete(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Deleteing data customer\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/EventHandlers/CustomerUpdateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.Infrastructure;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.EventHandlers\n{\n    public class CustomerUpdateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSCustomerContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly ICustomerRepository _customerRepository;\n        private readonly ICustomerQueries _customerQueries;\n\n        public CustomerUpdateEventHandler(IUnitOfWork<POSCustomerContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer, \n            ICustomerRepository customerRepository,\n            ICustomerQueries customerQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _customerRepository = customerRepository;\n            _customerQueries = customerQueries;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume CustomerUpdatedEvent\");\n\n                var dataConsomed = jObject.ToObject<CustomerUpdatedEvent>();\n\n                var data = await _customerQueries.GetCustomer(dataConsomed.CustomerId);\n                if (data != null)\n                {\n                    data = _mapper.Map<MstCustomer>(dataConsomed);\n\n                    log.Info(\"Update Customer\");\n                    //Consume data to Read Db\n                    _customerRepository.Update(data);\n                    await _uow.CommitAsync();\n                }\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Updating data customer\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Queries/CustomerQueries.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.Data.DapperRepositories;\nusing Pos.Customer.Domain.CustomerAggregate;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public class CustomerQueries : ICustomerQueries\n    {\n        private readonly IDbConectionFactory _dbConectionFactory;        \n\n        public CustomerQueries(IDbConectionFactory dbConectionFactory)\n        {\n            _dbConectionFactory = dbConectionFactory;            \n        }\n\n\n        public async Task<MstCustomer> GetCustomer(Guid id)\n        {\n            try\n            {\n                var qry = \"SELECT * FROM Customer where Id = @p_id\";\n\n                var data = await new DapperRepository<MstCustomer>(_dbConectionFactory.GetDbConnection(\"CUSTOMER_READ_CONNECTION\"))\n                    .QueryAsync(qry, new { p_id = id });\n\n                return data.SingleOrDefault();\n            }\n            catch (Exception ex)\n            {\n                throw ex;\n            }\n        }\n\n        public async Task<IEnumerable<MstCustomer>> GetCustomer(string name)\n        {\n            try\n            {\n                var qry = \"SELECT * FROM Customer where name = @p_name\";\n\n                var data = await new DapperRepository<MstCustomer>(_dbConectionFactory.GetDbConnection(\"CUSTOMER_READ_CONNECTION\"))\n                    .QueryAsync(qry, new { p_name = name });\n\n                return data;\n            }\n            catch (Exception ex)\n            {\n                throw ex;\n            }\n        }\n\n        public async Task<IEnumerable<MstCustomer>> GetCustomers()\n        {\n            try\n            {\n                var qry = \"SELECT * FROM Customer\";\n\n                var data = await new DapperRepository<MstCustomer>(_dbConectionFactory.GetDbConnection(\"CUSTOMER_READ_CONNECTION\"))\n                    .QueryAsync(qry);\n\n                return data;\n\n            }\n            catch (Exception ex)\n            {\n\n                throw ex;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Application/Queries/ICustomerQueries.cs",
    "content": "﻿using Pos.Customer.Domain.CustomerAggregate;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public interface ICustomerQueries\n    {\n        Task<MstCustomer> GetCustomer(Guid id);\n        Task<IEnumerable<MstCustomer>> GetCustomers();\n        Task<IEnumerable<MstCustomer>> GetCustomer(string name);\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/ApplicationBootsraper.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.Infrastructure;\nusing Pos.Customer.Infrastructure.EventSources;\nusing Pos.Customer.Infrastructure.Repositories;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Customer.WebApi.Application.EventHandlers;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Customer.WebApi.Mapping;\nusing Pos.Event.Contracts;\n\nnamespace Pos.Customer.WebApi\n{\n    public static class ApplicationBootsraper\n    {\n        public static IServiceCollection InitBootsraper(this IServiceCollection services, IConfiguration Configuration)\n        {\n            //Init DermayonBootsraper\n            services.InitDermayonBootsraper()\n                   // Set Kafka Configuration\n                   .InitKafka()\n                       .Configure<KafkaEventConsumerConfiguration>(Configuration.GetSection(\"KafkaConsumer\"))\n                       .Configure<KafkaEventProducerConfiguration>(Configuration.GetSection(\"KafkaProducer\"))\n                        .RegisterKafkaConsumer<CustomerCreatedEvent, CustomerCreateEventHandler>()\n                        .RegisterKafkaConsumer<CustomerUpdatedEvent, CustomerUpdateEventHandler>()\n                        .RegisterKafkaConsumer<CustomerDeletedEvent, CustomerDeleteEventHandler>()                        \n                   .RegisterMongo()\n                   // Implement CQRS Event Sourcing => UserContextEvents [Commands]\n                   .RegisterEventSources()\n                       .RegisterMongoContext<POSCustomerEventContext, POSCustomerEventContextSetting>\n                            (Configuration.GetSection(\"ConnectionStrings:CUSTOMER_COMMAND_CONNECTION\")\n                           .Get<POSCustomerEventContextSetting>())\n                  // Implement CQRS Event Sourcing => UserContext [Query] &                    \n                  .RegisterEf()\n                    .AddDbContext<POSCustomerContext>(options =>\n                        options.UseSqlServer(Configuration.GetConnectionString(\"CUSTOMER_READ_CONNECTION\")))\n                .AddOpenApiDocument();                       \n\n            return services;\n        }\n\n        public static IServiceCollection InitMapperProfile(this IServiceCollection services)\n        {\n            var mapperConfig = new MapperConfiguration(cfg =>\n            {\n                cfg.AddProfile(new CommandToEventMapperProfile());\n                cfg.AddProfile(new DomainToCommandMapperProfile());\n                cfg.AddProfile(new EventoDomainMapperProfile());                \n            });            \n            services.AddSingleton(provider => mapperConfig.CreateMapper());\n\n            return services;\n        }\n\n        public static IServiceCollection InitAppServices(this IServiceCollection services)\n        {\n            #region Command\n            services.AddScoped<ICustomerRepository, CustomeRepository>();\n            #endregion\n            #region Queries\n            services.AddScoped<ICustomerQueries, CustomerQueries>();\n            #endregion\n            return services;\n        }\n\n        public static IServiceCollection InitEventHandlers(this IServiceCollection services)\n        {\n            services.AddTransient<ICommandHandler<CreateCustomerCommand>, CreateCustomerCommandHandler>();\n            services.AddTransient<CustomerCreateEventHandler>();\n\n            services.AddTransient<ICommandHandler<UpdateCustomerCommand>, UpdateCustomerCommandHandler>();\n            services.AddTransient<CustomerUpdateEventHandler>();\n\n            services.AddTransient<ICommandHandler<DeleteCustomerCommand>, DeleteCustomerCommandHandler>();\n            services.AddTransient<CustomerDeleteEventHandler>();\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Controllers/CustomerController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing AutoMapper;\nusing Dermayon.Common.Api;\nusing Dermayon.Common.Domain;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Customer.WebApi.Application.Queries;\n\nnamespace Pos.Customer.WebApi.Controllers\n{\n    [Produces(\"application/json\")]\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class CustomerController : ControllerBase\n    {\n        private readonly IMapper _mapper;\n        private readonly ICommandHandler<CreateCustomerCommand> _createCustomerCommand;\n        private readonly ICommandHandler<UpdateCustomerCommand> _updateCustomerCommand;\n        private readonly ICommandHandler<DeleteCustomerCommand> _deleteCustomerCommand;\n        private readonly ICustomerQueries _customerQueries;\n        private readonly ILogger<CustomerController> _logger;\n\n        public CustomerController(IMapper mapper, \n            ICommandHandler<CreateCustomerCommand> createCustomerCommand,\n            ICommandHandler<UpdateCustomerCommand> updateCustomerCommand,\n            ICommandHandler<DeleteCustomerCommand> deleteCustomerCommand,\n            ICustomerQueries customerQueries,\n            ILogger<CustomerController> logger)\n        {\n            _mapper = mapper;\n            _createCustomerCommand = createCustomerCommand;\n            _updateCustomerCommand = updateCustomerCommand;\n            _deleteCustomerCommand = deleteCustomerCommand;\n            _customerQueries = customerQueries;\n            _logger = logger;\n        }\n\n        // GET api/customer\n        [HttpGet]\n        public async Task<IActionResult> Get()\n        {\n            try\n            {\n                var data = await _customerQueries.GetCustomers();\n\n                return Ok(new ApiOkResponse(data, data.Count()));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, \"Error on Get Customers\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // GET api/customer/5\n        [HttpGet(\"{id}\")]\n        public async Task<IActionResult> Get(Guid id)\n        {\n            try\n            {\n                var data = await _customerQueries.GetCustomer(id);\n\n                return Ok(new ApiOkResponse(data, data != null ? 1 : 0));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Get Customer [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // POST api/customer\n        [HttpPost]\n        public async Task<IActionResult> Post([FromBody] CreateCustomerCommand request)\n        {\n            try\n            {                \n                await _createCustomerCommand.Handle(request, CancellationToken.None);                \n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Customer [Name, Phone, Address ({request.Name},{request.Phone},{request.Address})]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // PUT api/customer\n        [HttpPut]\n        public async Task<IActionResult> Put([FromBody] UpdateCustomerCommand request)\n        {\n            try\n            {\n                await _updateCustomerCommand.Handle(request, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Customer [Name, Phone, Address ({request.Name},{request.Phone},{request.Address})]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // DELETE api/customer/idCustomer\n        [HttpDelete(\"{id}\")]\n        public async Task<IActionResult> Delete(Guid id)\n        {\n            try\n            {\n                var deleteCustomerCommand = new DeleteCustomerCommand { CustomerId = id };\n                await _deleteCustomerCommand.Handle(deleteCustomerCommand, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Delete Customer [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.Customer.WebApi.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ValuesController : ControllerBase\n    {\n        // GET api/values\n        [HttpGet]\n        public ActionResult<IEnumerable<string>> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public ActionResult<string> Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        [HttpPost]\n        public void Post([FromBody] string value)\n        {\n        }\n\n        // PUT api/values/5\n        [HttpPut(\"{id}\")]\n        public void Put(int id, [FromBody] string value)\n        {\n        }\n\n        // DELETE api/values/5\n        [HttpDelete(\"{id}\")]\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Customer.WebApi/Pos.Customer.WebApi.csproj\", \"Pos.Customer.WebApi/\"]\nCOPY [\"Pos.Customer.Infrastructure/Pos.Customer.Infrastructure.csproj\", \"Pos.Customer.Infrastructure/\"]\nCOPY [\"Pos.Customer.Domain/Pos.Customer.Domain.csproj\", \"Pos.Customer.Domain/\"]\nCOPY [\"Pos.Event.Contracts/Pos.Event.Contracts.csproj\", \"Pos.Event.Contracts/\"]\nRUN dotnet restore \"Pos.Customer.WebApi/Pos.Customer.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Customer.WebApi\"\nRUN dotnet build \"Pos.Customer.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Customer.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Customer.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Customer.WebApi/Dockerfile.original",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Customer.WebApi/Pos.Customer.WebApi.csproj\", \"Pos.Customer.WebApi/\"]\nRUN dotnet restore \"Pos.Customer.WebApi/Pos.Customer.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Customer.WebApi\"\nRUN dotnet build \"Pos.Customer.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Customer.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Customer.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Customer.WebApi/Mapping/CommandToEventMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\n\nnamespace Pos.Customer.WebApi.Mapping\n{\n    public class CommandToEventMapperProfile : Profile\n    {\n        public CommandToEventMapperProfile()\n        {\n            CreateMap<CreateCustomerCommand, CustomerCreatedEvent>();\n            CreateMap<UpdateCustomerCommand, CustomerUpdatedEvent>();\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Mapping/DomainToCommandMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.WebApi.Application.Commands;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Mapping\n{\n    public class DomainToCommandMapperProfile : Profile\n    {\n        public DomainToCommandMapperProfile()\n        {\n\n            CreateMap<MstCustomer, DeleteCustomerCommand>()\n                .ForMember(dest => dest.CustomerId, opt => opt.MapFrom(src => src.Id));\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Mapping/EventoDomainMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Event.Contracts;\nusing System;\n\nnamespace Pos.Customer.WebApi.Mapping\n{\n    public class EventoDomainMapperProfile : Profile\n    {\n        public EventoDomainMapperProfile()\n        {\n            CreateMap<CustomerCreatedEvent, MstCustomer>()\n                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()));\n\n            CreateMap<CustomerUpdatedEvent, MstCustomer>()\n                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.CustomerId));                        \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Pos.Customer.WebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AutoMapper\" Version=\"9.0.0\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"13.1.3\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Customer.Domain\\Pos.Customer.Domain.csproj\" />\n    <ProjectReference Include=\"..\\Pos.Customer.Infrastructure\\Pos.Customer.Infrastructure.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Customer.WebApi\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61924\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Customer.WebApi\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 61925\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Customer.WebApi/SeedingData/DbSeeder.cs",
    "content": "﻿using Microsoft.Extensions.DependencyInjection;\nusing Pos.Customer.Domain.CustomerAggregate;\nusing Pos.Customer.Infrastructure;\nusing System;\nusing System.IO;\nusing System.Linq;\n\nnamespace Pos.Customer.WebApi.SeedingData\n{\n    public static class DbSeeder\n    {\n        public static void Up(IServiceProvider serviceProvider)\n        {          \n            using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())\n            {\n                var context = serviceScope.ServiceProvider.GetService<POSCustomerContext>();\n\n                if (!context.Customer.Any())\n                {\n                    for (int i = 0; i < 100; i++)\n                    {\n                        context.Customer.Add(new MstCustomer { Address = Path.GetRandomFileName().Replace(\".\", \"\"), Name = Path.GetRandomFileName().Replace(\".\", \"\"), Phone = Path.GetRandomFileName().Replace(\".\", \"\"), CreatedBy =\"System\" });                        \n                    }\n                    context.SaveChanges();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/Startup.cs",
    "content": "﻿using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.Customer.WebApi.SeedingData;\n\nnamespace Pos.Customer.WebApi\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.InitBootsraper(Configuration)\n                .InitAppServices()\n                .InitEventHandlers()\n                .InitMapperProfile();\n            \n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.UseOpenApi();\n            app.UseSwaggerUi3();\n\n            app.UseMvc();\n\n            //Seeder\n            DbSeeder.Up(app.ApplicationServices);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/appsettings.Development.json",
    "content": "{\n  \"ConnectionStrings\": {\n    \"CUSTOMER_COMMAND_CONNECTION\": {\n      \"ServerConnection\": \"mongodb://root:password@mongodb:27017/admin\",\n      \"Database\": \"customerevents\"\n    },\n    \"CUSTOMER_READ_CONNECTION\": \"server=sql.data;Initial Catalog=POSCustomerProd;User ID=sa;Password=Pass@word\"\n  },  \n  \"KafkaConsumer\": {\n    \"Server\": \"kafkaserver\",\n    \"GroupId\": \"customer-service\",\n    \"TimeOut\": \"00:00:01\",\n    \"Topics\": [\n      \"PosServices\"\n    ]\n  },\n  \"KafkaProducer\": {\n    \"Server\": \"kafkaserver\",\n    \"MaxRetries\": 2,\n    \"MessageTimeout\": \"00:00:15\"\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Customer.WebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/AppGlobalTopic.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    public class AppGlobalTopic\n    {\n        public static string PosTopic = \"PosServices\";\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/Pos.Event.Contracts.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Folder Include=\"report\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Dermayon.Common\" Version=\"2.0.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Event.Contracts/customer/CustomerCreatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"CustomerCreated\")]\n    public class CustomerCreatedEvent : IEvent\n    {\n        public string Name { get; set; }\n        public string Phone { get; set; }\n        public string Address { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/customer/CustomerDeletedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"CustomerDeleted\")]\n    public class CustomerDeletedEvent : IEvent\n    {\n        public Guid CustomerId { get; set; }        \n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/customer/CustomerUpdatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"CustomerUpdated\")]\n    public class CustomerUpdatedEvent : IEvent\n    {\n        public Guid CustomerId { get; set; }\n        public string Name { get; set; }\n        public string Phone { get; set; }\n        public string Address { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/order/OrderCancelledEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts.order\n{\n    [Event(\"OrderCancelled\")]\n    public class OrderCancelledEvent : IEvent\n    {\n        public Guid OrderId { get; set; }\n        public OrderCreatedEvent Data { get; set; }\n    } \n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/order/OrderCreatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"OrderCreated\")]\n    public class OrderCreatedEvent : IEvent\n    {\n        public OrderCreatedEvent()\n        {\n            OrderDetail = new List<OrderDetailDto>();\n        }\n\n        public Guid OrderId { get; set; }\n        public Guid CustomerId { get; set; }\n        public string Customer { get; set; }\n        public DateTime? OrderDate { get; set; }\n        public string OrderNumber { get; set; }\n        public decimal? Amount { get; set; }\n        public string Status { get; set; }\n        public string ShipName { get; set; }\n        public string ShipAddress { get; set; }\n        public string ShipCity { get; set; }\n        public string ShipPostalCode { get; set; }\n        public string ShipCountry { get; set; }\n        public IEnumerable<OrderDetailDto> OrderDetail { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/order/OrderDetailCreatedEvent.cs",
    "content": "﻿using System;\n\nnamespace Pos.Event.Contracts\n{\n\n    public class OrderDetailDto\n    {\n        public Guid ProductId { get; set; }        \n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n\n        public decimal? GetSubtotal()\n        {\n            return UnitPrice * Quantity;\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.Event.Contracts/order/OrderShippedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"OrderShipped\")]\n    public class OrderShippedEvent : IEvent\n    {\n        public Guid OrderId { get; set; }\n        public OrderCreatedEvent Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/order/OrderValidatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"OrderValidatedEvent\")]\n    public class OrderValidatedEvent : IEvent\n    {\n        public OrderValidatedEvent()\n        {\n            Data = new OrderCreatedEvent();\n        }\n        public string Action { get; set; }\n        public Guid OrderId { get; set; }\n        public bool IsValid { get; set; }\n        public List<string> Messages { get; set; }\n        public OrderCreatedEvent Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductCategoryCreatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductCategoryCreated\")]\n    public class ProductCategoryCreatedEvent : IEvent\n    {\n        public string Name { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductCategoryDeletedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductCategoryDeleted\")]\n    public class ProductCategoryDeletedEvent : IEvent\n    {\n        public Guid ProductCategoryId { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductCategoryUpdatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductCategoryUpdated\")]\n    public class ProductCategoryUpdatedEvent : IEvent\n    {\n        public Guid Id { get; set; }\n        public string Name { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductCreatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductCreated\")]\n    public class ProductCreatedEvent : IEvent\n    {\n        public Guid Category { get; set; }\n        public string PartNumber { get; set; }\n        public string Name { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductDeletedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductDeleted\")]\n    public class ProductDeletedEvent : IEvent\n    {\n        public Guid ProductId { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Event.Contracts/product/ProductUpdatedEvent.cs",
    "content": "﻿using Dermayon.Common.Events;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Event.Contracts\n{\n    [Event(\"ProductUpdated\")]\n    public class ProductUpdatedEvent : IEvent\n    {\n        public Guid Id { get; set; }\n        public Guid Category { get; set; }\n        public string PartNumber { get; set; }\n        public string Name { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.Gateway.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ValuesController : ControllerBase\n    {\n        // GET api/values\n        [HttpGet]\n        public ActionResult<IEnumerable<string>> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public ActionResult<string> Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        [HttpPost]\n        public void Post([FromBody] string value)\n        {\n        }\n\n        // PUT api/values/5\n        [HttpPut(\"{id}\")]\n        public void Put(int id, [FromBody] string value)\n        {\n        }\n\n        // DELETE api/values/5\n        [HttpDelete(\"{id}\")]\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Gateway/Pos.Gateway.csproj\", \"Pos.Gateway/\"]\nRUN dotnet restore \"Pos.Gateway/Pos.Gateway.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Gateway\"\nRUN dotnet build \"Pos.Gateway.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Gateway.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Gateway.dll\"]"
  },
  {
    "path": "src/Pos.Gateway/Pos.Gateway.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n    <PackageReference Include=\"Ocelot\" Version=\"13.5.2\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Gateway/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Gateway\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61984\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Gateway\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 61985\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Gateway/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing Microsoft.IdentityModel.Tokens;\nusing Ocelot.DependencyInjection;\nusing Ocelot.Middleware;\n\nnamespace Pos.Gateway\n{\n    public class Startup\n    {\n        public Startup(IHostingEnvironment env)\n        {\n            var builder = new ConfigurationBuilder();\n            builder.SetBasePath(env.ContentRootPath)\n                   .AddJsonFile(\"configuration.json\", optional: false, reloadOnChange: true)\n                   .AddEnvironmentVariables();\n\n            Configuration = builder.Build();\n        }\n\n        //public Startup(IConfiguration configuration)\n        //{\n        //    Configuration = configuration;\n        //}\n\n\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddOcelot(Configuration);\n\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n\n            var key = Encoding.ASCII.GetBytes(\"E546C8DF278CD5931069B522E695D4F2\");\n\n            services.AddAuthentication(x =>\n            {\n                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;\n                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;\n            })\n            .AddJwtBearer(x =>\n            {\n                x.RequireHttpsMetadata = false;\n                x.SaveToken = true;\n                x.TokenValidationParameters = new TokenValidationParameters\n                {\n                    ValidateIssuerSigningKey = true,\n                    IssuerSigningKey = new SymmetricSecurityKey(key),\n                    ValidateIssuer = false,\n                    ValidateAudience = false\n                };\n            });\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            app.UseAuthentication();\n            app.UseOcelot().Wait();\n            app.UseMvc();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Gateway/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.Gateway/configuration.json",
    "content": "{\n  \"ReRoutes\": [\n    {\n      \"DownstreamPathTemplate\": \"/api/{everything}\",\n      \"DownstreamScheme\": \"http\",\n      \"DownstreamHostAndPorts\": [\n        {\n          \"Host\": \"pos.report.webapi\",\n          \"Port\": 80\n        }\n      ],\n      \"UpstreamPathTemplate\": \"/api-report/{everything}\",\n      \"UpstreamHttpMethod\": [ \"Get\", \"Post\", \"Put\", \"Delete\" ],\n      \"AuthenticationOptions\": {\n        //\"AuthenticationProviderKey\": \"Bearer\",\n        \"AllowedScopes\": []\n      },\n      \"RateLimitOptions\": {\n        \"ClientWhitelist\": [],\n        \"EnableRateLimiting\": true,\n        \"Period\": \"1s\",\n        \"PeriodTimespan\": 1,\n        \"Limit\": 1\n      },\n      \"QoSOptions\": {\n        \"ExceptionsAllowedBeforeBreaking\": 2,\n        \"DurationOfBreak\": 5000,\n        \"TimeoutValue\": 3000\n      }\n    },\n    {\n      \"DownstreamPathTemplate\": \"/api/{everything}\",\n      \"DownstreamScheme\": \"http\",\n      \"DownstreamHostAndPorts\": [\n        {\n          \"Host\": \"pos.product.webapi\",\n          \"Port\": 80\n        }\n      ],\n      \"UpstreamPathTemplate\": \"/api-product/{everything}\",\n      \"UpstreamHttpMethod\": [ \"Get\", \"Post\", \"Put\", \"Delete\" ],\n      \"AuthenticationOptions\": {\n        //\"AuthenticationProviderKey\": \"Bearer\",\n        \"AllowedScopes\": []\n      },\n      \"RateLimitOptions\": {\n        \"ClientWhitelist\": [],\n        \"EnableRateLimiting\": true,\n        \"Period\": \"1s\",\n        \"PeriodTimespan\": 1,\n        \"Limit\": 1\n      },\n      \"QoSOptions\": {\n        \"ExceptionsAllowedBeforeBreaking\": 2,\n        \"DurationOfBreak\": 5000,\n        \"TimeoutValue\": 3000\n      }\n    },\n    {\n      \"DownstreamPathTemplate\": \"/api/{everything}\",\n      \"DownstreamScheme\": \"http\",\n      \"DownstreamHostAndPorts\": [\n        {\n          \"Host\": \"pos.order.webapi\",\n          \"Port\": 80\n        }\n      ],\n      \"UpstreamPathTemplate\": \"/api-order/{everything}\",\n      \"UpstreamHttpMethod\": [ \"Get\", \"Post\", \"Put\", \"Delete\" ],\n      \"AuthenticationOptions\": {\n        //\"AuthenticationProviderKey\": \"Bearer\",\n        \"AllowedScopes\": []\n      },\n      \"RateLimitOptions\": {\n        \"ClientWhitelist\": [],\n        \"EnableRateLimiting\": true,\n        \"Period\": \"1s\",\n        \"PeriodTimespan\": 1,\n        \"Limit\": 1\n      },\n      \"QoSOptions\": {\n        \"ExceptionsAllowedBeforeBreaking\": 2,\n        \"DurationOfBreak\": 5000,\n        \"TimeoutValue\": 3000\n      }\n    },\n    {\n      \"DownstreamPathTemplate\": \"/api/{everything}\",\n      \"DownstreamScheme\": \"http\",\n      \"DownstreamHostAndPorts\": [\n        {\n          \"Host\": \"pos.customer.webapi\",\n          \"Port\": 80\n        }\n      ],\n      \"UpstreamPathTemplate\": \"/api-customer/{everything}\",\n      \"UpstreamHttpMethod\": [ \"Get\", \"Post\", \"Put\", \"Delete\" ],\n      \"AuthenticationOptions\": {\n        //\"AuthenticationProviderKey\": \"Bearer\",\n        \"AllowedScopes\": []\n      },\n      \"RateLimitOptions\": {\n        \"ClientWhitelist\": [],\n        \"EnableRateLimiting\": true,\n        \"Period\": \"1s\",\n        \"PeriodTimespan\": 1,\n        \"Limit\": 1\n      },\n      \"QoSOptions\": {\n        \"ExceptionsAllowedBeforeBreaking\": 2,\n        \"DurationOfBreak\": 5000,\n        \"TimeoutValue\": 3000\n      }\n    },\n    {\n      \"DownstreamPathTemplate\": \"/api/{everything}\",\n      \"DownstreamScheme\": \"http\",\n      \"DownstreamHostAndPorts\": [\n        {\n          \"Host\": \"pos.gateway.securities\",\n          \"Port\": 80\n        }\n      ],\n      \"UpstreamPathTemplate\": \"/api-authentication/{everything}\",\n      \"UpstreamHttpMethod\": [ \"Get\", \"Post\", \"Put\", \"Delete\" ],\n    }\n  ],\n  \"GlobalConfiguration\": {\n    \"RequestIdKey\": \"OcRequestId\",\n    \"AdministrationPath\": \"/administration\"\n  }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Application/AuthService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IdentityModel.Tokens.Jwt;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.IdentityModel.Tokens;\nusing Pos.Gateway.Securities.Models;\n\nnamespace Pos.Gateway.Securities.Application\n{\n    public class AuthService : IAuthService\n    {\n        public Models.SecurityToken Authenticate(string keyAuth)\n        {\n            if (string.IsNullOrEmpty(keyAuth))\n                return null;\n\n            // authentication successful so generate jwt token\n            var tokenHandler = new JwtSecurityTokenHandler();\n            var key = Encoding.ASCII.GetBytes(\"E546C8DF278CD5931069B522E695D4F2\");\n            var tokenDescriptor = new SecurityTokenDescriptor\n            {                \n                Expires = DateTime.UtcNow.AddDays(7),\n                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)\n            };\n            var token = tokenHandler.CreateToken(tokenDescriptor);\n            var jwtSecurityToken = tokenHandler.WriteToken(token);\n\n            return new Models.SecurityToken() { auth_token = jwtSecurityToken };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Application/IAuthService.cs",
    "content": "﻿using Pos.Gateway.Securities.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Gateway.Securities.Application\n{\n    public interface IAuthService\n    {\n        SecurityToken Authenticate(string key);\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Controllers/AuthController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing Pos.Gateway.Securities.Application;\nusing Pos.Gateway.Securities.Models;\n\nnamespace Pos.Gateway.Securities.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class AuthController : ControllerBase\n    {\n        private readonly IAuthService _authService;\n        public AuthController(IAuthService authService)\n        {\n            _authService = authService;\n        }\n\n        [AllowAnonymous]\n        [HttpPost(\"authenticate\")]\n        public IActionResult Authenticate([FromBody] Authentication authentication)\n        {\n            var token = _authService.Authenticate(authentication.Key);\n\n            if (token == null)\n                return BadRequest(new { message = \"Username or password is incorrect\" });\n\n            return Ok(token);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Gateway.Securities/Pos.Gateway.Securities.csproj\", \"Pos.Gateway.Securities/\"]\nRUN dotnet restore \"Pos.Gateway.Securities/Pos.Gateway.Securities.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Gateway.Securities\"\nRUN dotnet build \"Pos.Gateway.Securities.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Gateway.Securities.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Gateway.Securities.dll\"]"
  },
  {
    "path": "src/Pos.Gateway.Securities/Models/Authentication.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Gateway.Securities.Models\n{\n    public class Authentication\n    {\n        public string Key { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Models/SecurityToken.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Gateway.Securities.Models\n{\n    public class SecurityToken\n    {\n        public string auth_token { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Pos.Gateway.Securities.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Gateway.Securities\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:63186\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Gateway.Securities\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 63187\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Gateway.Securities/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing Pos.Gateway.Securities.Application;\n\nnamespace Pos.Gateway.Securities\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddScoped<IAuthService, AuthService>();\n\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.UseMvc();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Gateway.Securities/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.Order.Domain/OrderAggregate/Contract/IOrderRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.Domain.OrderAggregate.Contract\n{\n    public interface IOrderRepository : IEfRepository<MstOrder>\n    {\n        Task ShippedOrder(Guid orderId);\n        Task CanceledOrder(Guid orderId);\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.Domain/OrderAggregate/MstOrder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Pos.Order.Domain\n{\n    public partial class MstOrder\n    {\n        public MstOrder()\n        {\n            OrderDetail = new HashSet<OrderDetail>();\n        }\n\n        public Guid Id { get; set; }\n        public Guid? CustomerId { get; set; }\n        public DateTime? OrderDate { get; set; }\n        public string OrderNumber { get; set; }\n        public decimal? Amount { get; set; }\n        public string Status { get; set; }\n        public string ShipName { get; set; }\n        public string ShipAddress { get; set; }\n        public string ShipCity { get; set; }\n        public string ShipPostalCode { get; set; }\n        public string ShipCountry { get; set; }\n\n        public virtual ICollection<OrderDetail> OrderDetail { get; set; }\n\n        public decimal? GetTotal()\n        => OrderDetail.Sum(x => x.GetSubtotal());\n\n        public void AddLineItem(Guid product, int quantity = 1)\n        {\n            OrderDetail lineItem = GetLineItem(product);\n            if (lineItem == null)\n            {\n                lineItem = new OrderDetail { ProductId = product, Quantity = quantity };\n                OrderDetail.Add(lineItem);\n            }\n            lineItem.Quantity += quantity;\n        }\n\n        public OrderDetail GetLineItem(Guid product)\n        {\n            foreach (var sli in OrderDetail)\n                if (sli.ProductId.Equals(product))\n                    return sli;\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.Order.Domain/OrderAggregate/OrderDetail.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Pos.Order.Domain\n{\n    public partial class OrderDetail\n    {        \n        public Guid Id { get; set; }\n        public Guid OrderId { get; set; }\n        public Guid ProductId { get; set; }        \n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n        public virtual MstOrder Order { get; set; }\n\n        public decimal? GetSubtotal()\n        {\n            return UnitPrice * Quantity;\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.Order.Domain/Pos.Order.Domain.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Dermayon.Library\" Version=\"2.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Event.Contracts\\Pos.Event.Contracts.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Order.Infrastructure/EventSources/POSOrderEventContext.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Order.Infrastructure.EventSources\n{\n    public class POSOrderEventContext : MongoContext\n    {\n        public POSOrderEventContext(POSOrderEventContextSetting setting) : base(setting)\n        {\n                \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.Infrastructure/EventSources/POSOrderEventContextSetting.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Order.Infrastructure.EventSources\n{\n    public class POSOrderEventContextSetting : MongoDbSettings\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.Infrastructure/POSOrderContext.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Pos.Order.Domain;\n\nnamespace Pos.Order.Infrastructure\n{\n    public partial class POSOrderContext : DbContext\n    {\n        public POSOrderContext()\n        {\n        }\n\n        public POSOrderContext(DbContextOptions<POSOrderContext> options)\n            : base(options)\n        {\n            this.Database.EnsureCreated();\n        }\n\n        public virtual DbSet<MstOrder> Order { get; set; }\n        public virtual DbSet<OrderDetail> OrderDetail { get; set; }\n\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n        {\n            if (!optionsBuilder.IsConfigured)\n            {\n            }\n        }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"2.2.0-rtm-35687\");\n\n            modelBuilder.Entity<MstOrder>(entity =>\n            {\n                entity.Property(e => e.Id).HasDefaultValueSql(\"NEWID()\");\n\n                entity.Property(e => e.Amount).HasColumnType(\"decimal(18, 0)\");\n\n                entity.Property(e => e.OrderDate).HasColumnType(\"datetime\");\n\n                entity.Property(e => e.OrderNumber)\n                    .IsRequired()\n                    .HasMaxLength(50);\n\n                entity.Property(e => e.ShipAddress)\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                entity.Property(e => e.ShipCity).HasMaxLength(50);\n\n                entity.Property(e => e.ShipCountry).HasMaxLength(50);\n\n                entity.Property(e => e.ShipName).HasMaxLength(50);\n\n                entity.Property(e => e.ShipPostalCode).HasMaxLength(50);\n\n                entity.Property(e => e.Status).HasMaxLength(50);\n            });\n\n            modelBuilder.Entity<OrderDetail>(entity =>\n            {\n                entity.Property(e => e.Id).HasDefaultValueSql(\"NEWID()\");\n\n                entity.Property(e => e.UnitPrice).HasColumnType(\"decimal(18, 0)\");\n              \n            });\n\n            OnModelCreatingPartial(modelBuilder);\n        }\n\n        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);\n    }\n}"
  },
  {
    "path": "src/Pos.Order.Infrastructure/Pos.Order.Infrastructure.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Order.Domain\\Pos.Order.Domain.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Order.Infrastructure/Repositories/OrderRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories;\nusing Pos.Order.Domain;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.Infrastructure.Repositories\n{\n    public class OrderRepository : EfRepository<MstOrder>, IOrderRepository\n    {\n        private readonly POSOrderContext _context;        \n        public OrderRepository(POSOrderContext context) : base(context)\n        {\n            _context = context;\n        }\n\n        public async Task CanceledOrder(Guid orderId)\n        {\n            var result = await GetAsync(x => x.Id == orderId);\n\n            var data = result.SingleOrDefault();\n            if (data != null)\n            {\n                data.Status = \"Canceled\";\n                Update(data);\n            }            \n        }\n\n        public async Task ShippedOrder(Guid orderId)\n        {\n            var result = await GetAsync(x => x.Id == orderId);\n\n            var data = result.SingleOrDefault();\n            if (data != null)\n            {\n                data.Status = \"Shipped\";\n                Update(data);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.Infrastructure/efpt.config.json",
    "content": "﻿{\"ContextClassName\":\"Entvision_OrderContext\",\"DefaultDacpacSchema\":null,\"IdReplace\":false,\"IncludeConnectionString\":false,\"OutputPath\":null,\"ProjectRootNamespace\":\"Pos.Order.Infrastructure\",\"SelectedToBeGenerated\":0,\"Tables\":[{\"HasPrimaryKey\":true,\"Name\":\"dbo.Order\"},{\"HasPrimaryKey\":true,\"Name\":\"dbo.OrderDetail\"}],\"UseDatabaseNames\":false,\"UseFluentApiOnly\":true,\"UseHandleBars\":false,\"UseInflector\":false}"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/Commands/CreateOrderCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Pos.Event.Contracts;\nusing Pos.Order.Infrastructure;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.Commands\n{\n    public class CreateOrderCommand : ICommand\n    {\n        public CreateOrderCommand()\n        {\n            OrderDetail = new List<OrderDetailDto>();\n        }\n        public Guid OrderId { get; set; }\n        public Guid? CustomerId { get; set; }\n        public DateTime? OrderDate { get; set; }\n        public string OrderNumber { get; set; }\n        public decimal? Amount { get; set; }\n        public string Status { get; set; }\n        public string ShipName { get; set; }\n        public string ShipAddress { get; set; }\n        public string ShipCity { get; set; }\n        public string ShipPostalCode { get; set; }\n        public string ShipCountry { get; set; }\n        public List<OrderDetailDto> OrderDetail { get; set; }     \n        \n        public void AddProduct(Guid product, int? quantity, decimal? unitPrice = null)\n        {\n            OrderDetail.Add(new OrderDetailDto { ProductId = product, Quantity = quantity, UnitPrice = unitPrice });\n        }\n    }  \n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/Commands/CreateOrderCommandHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Event.Contracts;\nusing Pos.Order.Domain;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing Pos.Order.Infrastructure;\nusing Pos.Order.Infrastructure.EventSources;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System;\nusing System.IO;\n\nnamespace Pos.Order.WebApi.Application.Commands\n{\n    public class CreateOrderCommandHandler : ICommandHandler<CreateOrderCommand>\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSOrderEventContext, OrderCreatedEvent> _eventSources;\n        private readonly IUnitOfWork<POSOrderContext> _uow;\n        private readonly IOrderRepository _orderRepository;\n\n        public CreateOrderCommandHandler(IMapper mapper,\n            IKakfaProducer kakfaProducer, \n            IEventRepository<POSOrderEventContext, OrderCreatedEvent> eventSources,\n            IUnitOfWork<POSOrderContext> uow,\n            IOrderRepository orderRepository\n            )\n        {\n            _mapper = mapper;\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n            _uow = uow;\n            _orderRepository = orderRepository;\n        }\n\n        public async Task Handle(CreateOrderCommand command, CancellationToken cancellationToken)\n        {\n            var @event = _mapper.Map<OrderCreatedEvent>(command);\n           \n            // Insert event to Command Db\n            await _eventSources.InserEvent(@event, cancellationToken);          \n            await _kafkaProducer.Send(@event, AppGlobalTopic.PosTopic);\n\n            //implement choreography saga needed\n            var data = _mapper.Map<MstOrder>(@event);\n            _orderRepository.Insert(data);\n            await _uow.CommitAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/DTO/CreateOrderDetailRequest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.DTO\n{\n    public class CreateOrderDetailRequest\n    {\n        public Guid ProductId { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/DTO/CreateOrderHeaderRequest.cs",
    "content": "﻿using Pos.Event.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.DTO\n{\n    public class CreateOrderHeaderRequest\n    {\n        public Guid? CustomerId { get; set; }             \n        public string ShipName { get; set; }\n        public string ShipAddress { get; set; }\n        public string ShipCity { get; set; }\n        public string ShipPostalCode { get; set; }\n        public string ShipCountry { get; set; }\n\n        public List<OrderDetailDto> OrderDetail { get; set; }\n\n        public decimal? GetTotal()\n          => OrderDetail.Sum(x => x.GetSubtotal());\n    }\n\n\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/DTO/DetailOrderLineItemResponse.cs",
    "content": "﻿using System;\n\nnamespace Pos.Order.WebApi.Application.DTO\n{\n    public class DetailOrderLineItemResponse\n    {\n        public Guid ProductId { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n    }\n}"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/DTO/DetailOrderResponse.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.DTO\n{\n    public class DetailOrderResponse\n    {\n        public Guid? CustomerId { get; set; }\n        public DateTime? OrderDate { get; set; }\n        public string OrderNumber { get; set; }\n        public decimal? Amount { get; set; }\n        public string Status { get; set; }\n        public string ShipName { get; set; }\n        public string ShipAddress { get; set; }\n        public string ShipCity { get; set; }\n        public string ShipPostalCode { get; set; }\n        public string ShipCountry { get; set; }\n        public List<DetailOrderLineItemResponse> OrderDetail { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/EventHandlers/OrderCanceledEventHandler.cs",
    "content": "﻿using Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Event.Contracts.order;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing Pos.Order.Infrastructure;\nusing Pos.Order.Infrastructure.EventSources;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.EventHandlers\n{\n    public class OrderCanceledEventHandler : IServiceEventHandler\n    {\n        private readonly IKakfaProducer _producer;\n        private readonly IUnitOfWork<POSOrderContext> _uow;\n        private readonly IOrderRepository _orderRepository;\n        public OrderCanceledEventHandler(IKakfaProducer producer,\n            IOrderRepository orderRepository,\n            IUnitOfWork<POSOrderContext> uow\n            )\n        {\n            _producer = producer;\n            _orderRepository = orderRepository;\n            _uow = uow;\n        }\n\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume Event\");\n\n                var dataConsomed = jObject.ToObject<OrderCancelledEvent>();\n\n                //Consume data to Read Db\n                await _orderRepository.CanceledOrder(dataConsomed.OrderId);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n\n                throw ex;\n            }           \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/EventHandlers/OrderShippedEventHandler.cs",
    "content": "﻿using Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Event.Contracts.order;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing Pos.Order.Infrastructure;\nusing Pos.Order.Infrastructure.EventSources;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.EventHandlers\n{\n    public class OrderShippedEventHandler : IServiceEventHandler\n    {\n        private readonly IKakfaProducer _producer;\n        private readonly IUnitOfWork<POSOrderContext> _uow;\n        private readonly IOrderRepository _orderRepository;\n        public OrderShippedEventHandler(IKakfaProducer producer,\n            IOrderRepository orderRepository,\n            IUnitOfWork<POSOrderContext> uow\n            )\n        {\n            _producer = producer;\n            _orderRepository = orderRepository;\n            _uow = uow;\n        }\n\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume Event\");\n\n                var dataConsomed = jObject.ToObject<OrderShippedEvent>();\n\n                //Consume data to Read Db\n                await _orderRepository.ShippedOrder(dataConsomed.OrderId);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n\n                throw ex;\n            }           \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/EventHandlers/OrderValidatedEventHandler.cs",
    "content": "﻿using Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Event.Contracts.order;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing Pos.Order.Infrastructure;\nusing Pos.Order.Infrastructure.EventSources;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Application.EventHandlers\n{\n    public class OrderValidatedEventHandler : IServiceEventHandler\n    {\n        private readonly IKakfaProducer _producer;\n        private readonly IEventRepository<POSOrderEventContext, OrderShippedEvent> _shipedEventSources;\n        private readonly IEventRepository<POSOrderEventContext, OrderCancelledEvent> _cancelledEventSources;\n        public OrderValidatedEventHandler(IKakfaProducer producer,\n            IEventRepository<POSOrderEventContext, OrderShippedEvent> shipedEventSources,\n            IEventRepository<POSOrderEventContext, OrderCancelledEvent> cancelledEventSources)\n        {\n            _producer = producer;\n            _shipedEventSources = shipedEventSources;\n            _cancelledEventSources = cancelledEventSources;            \n        }\n\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            var orderValidated = jObject.ToObject<OrderValidatedEvent>();\n            if (orderValidated.IsValid)\n            {\n                var orderShippedEvent = new OrderShippedEvent{ Data = orderValidated.Data, OrderId = orderValidated.OrderId};\n                await _shipedEventSources.InserEvent(orderShippedEvent, cancellationToken);\n\n                await _producer.Send(orderShippedEvent, AppGlobalTopic.PosTopic);\n            }\n            else\n            {\n                var orderCanceledEvent = new OrderCancelledEvent { Data = orderValidated.Data, OrderId = orderValidated.OrderId };\n                await _cancelledEventSources.InserEvent(orderCanceledEvent, cancellationToken);\n\n                await _producer.Send(orderCanceledEvent, AppGlobalTopic.PosTopic);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/Queries/IOrderQueries.cs",
    "content": "﻿using Pos.Order.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public interface IOrderQueries\n    {\n        Task<IEnumerable<MstOrder>> GetOrders();\n        Task<MstOrder> GetOrder(Guid id);\n        Task<IEnumerable<MstOrder>> GetOrderByNumber(string orderNumber);        \n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Application/Queries/OrderQueries.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.Data.DapperRepositories;\nusing Microsoft.EntityFrameworkCore;\nusing Pos.Order.Domain;\nusing Pos.Order.Domain.OrderAggregate.Contract;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public class OrderQueries : IOrderQueries\n    {\n        private readonly IDbConectionFactory _dbConectionFactory;\n        private readonly IOrderRepository _orderRepository;\n\n        public OrderQueries(IDbConectionFactory dbConectionFactory,\n            IOrderRepository orderRepository)\n        {\n            _dbConectionFactory = dbConectionFactory;\n            _orderRepository = orderRepository;\n        }\n\n\n        public async Task<MstOrder> GetOrder(Guid id)\n        {\n            var data = await _orderRepository.GetIncludeAsync(x => x.Id == id, includes: src => src.Include(x => x.OrderDetail));\n\n            return data.SingleOrDefault();\n        }\n\n        public async Task<IEnumerable<MstOrder>> GetOrderByNumber(string orderNumber)\n        {\n            var data = await _orderRepository.GetIncludeAsync(x => x.OrderNumber == orderNumber, includes: src => src.Include(x => x.OrderDetail));\n\n            return data.ToList();\n        }\n\n        public async Task<IEnumerable<MstOrder>> GetOrders()\n        {\n            var data = await _orderRepository.GetIncludeAsync(x => x.Status != null, includes: src => src.Include(x => x.OrderDetail));\n\n            return data.ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/ApplicationBootsraper.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.Order.Infrastructure;\nusing Pos.Order.Infrastructure.Repositories;\nusing Pos.Order.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\nusing Pos.Order.Domain.OrderAggregate.Contract;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Order.WebApi.Mapping;\nusing Pos.Order.WebApi.Application.EventHandlers;\nusing Pos.Order.Infrastructure.EventSources;\nusing Pos.Event.Contracts.order;\n\nnamespace Pos.Order.WebApi\n{\n    public static class ApplicationBootsraper\n    {\n        public static IServiceCollection InitBootsraper(this IServiceCollection services, IConfiguration Configuration)\n        {\n            //Init DermayonBootsraper\n            services.InitDermayonBootsraper()\n                   // Set Kafka Configuration\n                   .InitKafka()\n                       .Configure<KafkaEventConsumerConfiguration>(Configuration.GetSection(\"KafkaConsumer\"))\n                       .Configure<KafkaEventProducerConfiguration>(Configuration.GetSection(\"KafkaProducer\"))\n                        .RegisterKafkaConsumer<OrderShippedEvent, OrderShippedEventHandler>()\n                        .RegisterKafkaConsumer<OrderCancelledEvent, OrderCanceledEventHandler>()\n                        .RegisterKafkaConsumer<OrderValidatedEvent, OrderValidatedEventHandler>()\n                   .RegisterMongo()\n                   // Implement CQRS Event Sourcing => UserContextEvents [Commands]\n                   .RegisterEventSources()\n                       .RegisterMongoContext<POSOrderEventContext, POSOrderEventContextSetting>\n                            (Configuration.GetSection(\"ConnectionStrings:ORDER_COMMAND_CONNECTION\")\n                           .Get<POSOrderEventContextSetting>())\n                  // Implement CQRS Event Sourcing => UserContext [Query] &                    \n                  .RegisterEf()\n                    .AddDbContext<POSOrderContext>(options =>\n                        options.UseSqlServer(Configuration.GetConnectionString(\"ORDER_READ_CONNECTION\")))\n                .AddOpenApiDocument();                       \n\n            return services;\n        }\n\n        public static IServiceCollection InitMapperProfile(this IServiceCollection services)\n        {\n            var mapperConfig = new MapperConfiguration(cfg =>\n            {\n                cfg.AddProfile(new CommandToEventMapperProfile());\n                cfg.AddProfile(new DomainToCommandMapperProfile());\n                cfg.AddProfile(new EventoDomainMapperProfile());\n                cfg.AddProfile(new DtotoAllMapperProfile());\n                cfg.AddProfile(new AllToDtoMapperProfile());\n            });            \n            services.AddSingleton(provider => mapperConfig.CreateMapper());\n\n            return services;\n        }\n\n        public static IServiceCollection InitAppServices(this IServiceCollection services)\n        {\n            #region Command\n            services.AddScoped<IOrderRepository, OrderRepository>();\n            #endregion\n            #region Queries\n            services.AddScoped<IOrderQueries, OrderQueries>();\n            #endregion\n            return services;\n        }\n\n        public static IServiceCollection InitEventHandlers(this IServiceCollection services)\n        {\n            services.AddTransient<ICommandHandler<CreateOrderCommand>, CreateOrderCommandHandler>();\n            services.AddTransient<OrderShippedEventHandler>();\n            services.AddTransient<OrderCanceledEventHandler>();\n            services.AddTransient<OrderValidatedEventHandler>();\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Controllers/OrderController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing AutoMapper;\nusing Dermayon.Common.Api;\nusing Dermayon.Common.Domain;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Order.WebApi.Application.Commands;\nusing Pos.Order.WebApi.Application.DTO;\n\nnamespace Pos.Order.WebApi.Controllers\n{\n\n    [Produces(\"application/json\")]\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class OrderController : ControllerBase\n    {\n        private readonly IMapper _mapper;\n        private readonly ICommandHandler<CreateOrderCommand> _createOrderCommand;        \n        private readonly IOrderQueries _orderQueries;\n        private readonly ILogger<OrderController> _logger;\n\n        public OrderController(IMapper mapper, \n            ICommandHandler<CreateOrderCommand> createOrderCommand,\n            IOrderQueries orderQueries,\n            ILogger<OrderController> logger\n            )\n        {\n            _mapper = mapper;\n            _createOrderCommand = createOrderCommand;\n            _orderQueries = orderQueries;\n            _logger = logger;\n        }\n\n        // GET api/order\n        [HttpGet]\n        public async Task<IActionResult> Get()\n        {\n            try\n            {\n                var data = await _orderQueries.GetOrders();\n                var response = _mapper.Map<List<DetailOrderResponse>>(data);\n\n                return Ok(new ApiOkResponse(response, response.Count()));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, \"Error on Get Orders\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // GET api/order/id\n        [HttpGet(\"id\")]\n        public async Task<IActionResult> Get(Guid id)\n        {\n            try\n            {\n                var data = await _orderQueries.GetOrder(id);\n                var response = _mapper.Map<DetailOrderResponse>(data);\n\n                return Ok(new ApiOkResponse(response, response != null ? 1 : 0));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, \"Error on Get Order\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // POST api/customer\n        [HttpPost]\n        public async Task<IActionResult> Post([FromBody] CreateOrderHeaderRequest request)\n        {\n            try\n            {\n                var orderCommand = new CreateOrderCommand();\n                orderCommand = _mapper.Map<CreateOrderCommand>(request);                                \n                orderCommand.Amount = request.GetTotal();\n\n                await _createOrderCommand.Handle(orderCommand, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Order\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.Order.WebApi.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ValuesController : ControllerBase\n    {\n        // GET api/values\n        [HttpGet]\n        public ActionResult<IEnumerable<string>> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public ActionResult<string> Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        [HttpPost]\n        public void Post([FromBody] string value)\n        {\n        }\n\n        // PUT api/values/5\n        [HttpPut(\"{id}\")]\n        public void Put(int id, [FromBody] string value)\n        {\n        }\n\n        // DELETE api/values/5\n        [HttpDelete(\"{id}\")]\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Order.WebApi/Pos.Order.WebApi.csproj\", \"Pos.Order.WebApi/\"]\nCOPY [\"Pos.Order.Infrastructure/Pos.Order.Infrastructure.csproj\", \"Pos.Order.Infrastructure/\"]\nCOPY [\"Pos.Order.Domain/Pos.Order.Domain.csproj\", \"Pos.Order.Domain/\"]\nCOPY [\"Pos.Event.Contracts/Pos.Event.Contracts.csproj\", \"Pos.Event.Contracts/\"]\nRUN dotnet restore \"Pos.Order.WebApi/Pos.Order.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Order.WebApi\"\nRUN dotnet build \"Pos.Order.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Order.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Order.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Order.WebApi/Dockerfile.original",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Order.WebApi/Pos.Order.WebApi.csproj\", \"Pos.Order.WebApi/\"]\nRUN dotnet restore \"Pos.Order.WebApi/Pos.Order.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Order.WebApi\"\nRUN dotnet build \"Pos.Order.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Order.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Order.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Order.WebApi/Mapping/AllToDtoMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Order.Domain;\nusing Pos.Order.WebApi.Application.DTO;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Mapping\n{\n    public class AllToDtoMapperProfile : Profile\n    {\n        public AllToDtoMapperProfile()\n        {\n            CreateMap<MstOrder, DetailOrderResponse>();\n            CreateMap<OrderDetail, DetailOrderLineItemResponse>();\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Mapping/CommandToEventMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Order.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\n\nnamespace Pos.Order.WebApi.Mapping\n{\n    public class CommandToEventMapperProfile : Profile\n    {\n        public CommandToEventMapperProfile()\n        {\n            CreateMap<CreateOrderCommand, OrderCreatedEvent>();            \n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Mapping/DomainToCommandMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Order.Domain;\nusing Pos.Order.Domain.OrderAggregate;\nusing Pos.Order.WebApi.Application.Commands;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Order.WebApi.Mapping\n{\n    public class DomainToCommandMapperProfile : Profile\n    {\n        public DomainToCommandMapperProfile()\n        {\n            CreateMap<MstOrder, CreateOrderCommand>();            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Mapping/DtotoAllMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Order.Domain.OrderAggregate;\nusing Pos.Event.Contracts;\nusing System;\nusing Pos.Order.Domain;\nusing Pos.Order.WebApi.Application.Commands;\nusing Pos.Order.WebApi.Application.DTO;\nusing System.IO;\n\nnamespace Pos.Order.WebApi.Mapping\n{\n    public class DtotoAllMapperProfile : Profile\n    {\n        public DtotoAllMapperProfile()\n        {\n            CreateMap<OrderDetailDto, OrderDetail>();\n            CreateMap<CreateOrderHeaderRequest, CreateOrderCommand>()\n                .ForMember(dest => dest.OrderId, opt => opt.MapFrom(src => Guid.NewGuid()))\n                .ForMember(dest => dest.OrderNumber, opt => opt.MapFrom(src => Path.GetRandomFileName().Replace(\".\", \"\")))\n                .ForMember(dest => dest.Status, opt => opt.MapFrom(src => \"Pending\"))\n                .ForMember(dest => dest.OrderDate, opt => opt.MapFrom(src => DateTime.Now));\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Mapping/EventoDomainMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Order.Domain.OrderAggregate;\nusing Pos.Event.Contracts;\nusing System;\nusing Pos.Order.Domain;\n\nnamespace Pos.Order.WebApi.Mapping\n{\n    public class EventoDomainMapperProfile : Profile\n    {\n        public EventoDomainMapperProfile()\n        {\n            CreateMap<OrderCreatedEvent, MstOrder>()\n                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.OrderId));\n                            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Pos.Order.WebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AutoMapper\" Version=\"9.0.0\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"13.1.3\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Order.Domain\\Pos.Order.Domain.csproj\" />\n    <ProjectReference Include=\"..\\Pos.Order.Infrastructure\\Pos.Order.Infrastructure.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Order.WebApi\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61830\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Order.WebApi\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 61831\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Order.WebApi/SeedingData/DbSeeder.cs",
    "content": "﻿using Microsoft.Extensions.DependencyInjection;\nusing Pos.Order.Domain;\nusing Pos.Order.Infrastructure;\nusing System;\nusing System.IO;\nusing System.Linq;\n\nnamespace Pos.Order.WebApi.SeedingData\n{\n    public static class DbSeeder\n    {\n        public static void Up(IServiceProvider serviceProvider)\n        {          \n            using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())\n            {\n                var context = serviceScope.ServiceProvider.GetService<POSOrderContext>();\n\n                if (!context.Order.Any())\n                {\n                    for (int i = 0; i < 100; i++)\n                    {\n                      \n                        context.Order.Add(new MstOrder { OrderDate = DateTime.Now, OrderNumber = $\"O-{i}\", \n                            ShipAddress= Path.GetRandomFileName().Replace(\".\", \"\"),\n                            ShipCity = Path.GetRandomFileName().Replace(\".\", \"\"),\n                            ShipCountry = Path.GetRandomFileName().Replace(\".\", \"\"),\n                            ShipName = Path.GetRandomFileName().Replace(\".\", \"\"),\n                            ShipPostalCode = Path.GetRandomFileName().Replace(\".\", \"\"),\n                            Status = i % 2 == 1 ? \"Delivered\" : \"Canceled\",\n                            Amount = i * 40,\n                        });                        \n                    }\n                    context.SaveChanges();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing Pos.Order.WebApi.SeedingData;\n\nnamespace Pos.Order.WebApi\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.InitBootsraper(Configuration)\n                .InitAppServices()\n                .InitEventHandlers()\n                .InitMapperProfile();\n\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.UseOpenApi();\n            app.UseSwaggerUi3();\n\n\n            app.UseMvc();\n\n            //Seeder\n            DbSeeder.Up(app.ApplicationServices);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/appsettings.Development.json",
    "content": "{\n  \"ConnectionStrings\": {\n    \"ORDER_COMMAND_CONNECTION\": {\n      \"ServerConnection\": \"mongodb://root:password@mongodb:27017/admin\",\n      \"Database\": \"orderevents\"\n    },\n    \"ORDER_READ_CONNECTION\": \"server=sql.data;Initial Catalog=POSOrder;User ID=sa;Password=Pass@word\"\n  },\n  \"KafkaConsumer\": {\n    \"Server\": \"kafkaserver\",\n    \"GroupId\": \"order-service\",\n    \"TimeOut\": \"00:00:01\",\n    \"Topics\": [\n      \"PosServices\"\n    ]\n  },\n  \"KafkaProducer\": {\n    \"Server\": \"kafkaserver\",\n    \"MaxRetries\": 2,\n    \"MessageTimeout\": \"00:00:15\"\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Order.WebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.Product.Domain/Pos.Product.Domain.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Events\\**\" />\n    <EmbeddedResource Remove=\"Events\\**\" />\n    <None Remove=\"Events\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AutoMapper\" Version=\"9.0.0\" />\n    <PackageReference Include=\"Dermayon.Library\" Version=\"2.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Event.Contracts\\Pos.Event.Contracts.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Product.Domain/ProductAggregate/Contracts/IProductCategoryRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Domain.ProductAggregate.Contracts\n{\n    public interface IProductCategoryRepository : IEfRepository<ProductCategory>\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.Domain/ProductAggregate/Contracts/IProductRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Domain.ProductAggregate.Contracts\n{\n    public interface IProductRepository : IEfRepository<MstProduct>\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.Domain/ProductAggregate/MstProduct.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Pos.Product.Domain.ProductAggregate\n{\n    public partial class MstProduct\n    {\n        public Guid Id { get; set; }\n        public Guid Category { get; set; }\n        public string PartNumber { get; set; }\n        public string Name { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n\n        public virtual ProductCategory CategoryNavigation { get; set; }\n    }\n}"
  },
  {
    "path": "src/Pos.Product.Domain/ProductAggregate/ProductCategory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Pos.Product.Domain.ProductAggregate\n{\n    public partial class ProductCategory\n    {\n        public ProductCategory()\n        {\n            Product = new HashSet<MstProduct>();\n        }\n\n        public Guid Id { get; set; }\n        public string Name { get; set; }\n\n        public virtual ICollection<MstProduct> Product { get; set; }\n    }\n}"
  },
  {
    "path": "src/Pos.Product.Infrastructure/EventSources/POSProductEventContext.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Infrastructure.EventSources\n{\n    public class POSProductEventContext : MongoContext\n    {\n        public POSProductEventContext(POSProductEventContextSetting setting): base(setting)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.Infrastructure/EventSources/POSProductEventContextSetting.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.MongoRepositories;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Infrastructure.EventSources\n{\n    public class POSProductEventContextSetting : MongoDbSettings\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.Infrastructure/POSProductContext.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Pos.Product.Domain.ProductAggregate;\n\nnamespace Pos.Product.Infrastructure\n{\n    public partial class POSProductContext : DbContext\n    {\n        public POSProductContext()\n        {\n        }\n\n        public POSProductContext(DbContextOptions<POSProductContext> options)\n            : base(options)\n        {\n            this.Database.EnsureCreated();\n        }\n\n        public virtual DbSet<MstProduct> Product { get; set; }\n        public virtual DbSet<ProductCategory> ProductCategory { get; set; }\n\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n        {\n            if (!optionsBuilder.IsConfigured)\n            {\n            }\n        }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"2.2.0-rtm-35687\");\n\n            modelBuilder.Entity<MstProduct>(entity =>\n            {\n                entity.Property(e => e.Id).HasDefaultValueSql(\"NEWID()\");\n\n                entity.Property(e => e.Name)\n                    .IsRequired()\n                    .HasMaxLength(50);\n\n                entity.Property(e => e.PartNumber)\n                    .IsRequired()\n                    .HasMaxLength(50);\n\n                entity.Property(e => e.UnitPrice).HasColumnType(\"decimal(18, 0)\");\n\n                entity.HasOne(d => d.CategoryNavigation)\n                    .WithMany(p => p.Product)\n                    .HasForeignKey(d => d.Category)\n                    .OnDelete(DeleteBehavior.ClientSetNull)\n                    .HasConstraintName(\"FK_Product_ProductCategory\");\n            });\n\n            modelBuilder.Entity<ProductCategory>(entity =>\n            {\n                entity.Property(e => e.Id).HasDefaultValueSql(\"NEWID()\");\n\n                entity.Property(e => e.Name).HasMaxLength(50);\n            });\n\n\n            OnModelCreatingPartial(modelBuilder);\n        }\n\n        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);\n        \n    }\n}"
  },
  {
    "path": "src/Pos.Product.Infrastructure/Pos.Product.Infrastructure.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Product.Domain\\Pos.Product.Domain.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Product.Infrastructure/Repositories/ProductCategoryRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Infrastructure.Repositories\n{\n    public class ProductCategoryRepository : EfRepository<ProductCategory>, IProductCategoryRepository\n    {\n        private readonly POSProductContext _context;\n        public ProductCategoryRepository(POSProductContext context) : base(context)\n        {\n            _context = context;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.Infrastructure/Repositories/ProductRepository.cs",
    "content": "﻿using Dermayon.Infrastructure.Data.EFRepositories;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Pos.Product.Infrastructure.Repositories\n{\n    public class ProductRepository : EfRepository<MstProduct>, IProductRepository\n    {\n        private readonly POSProductContext _context;\n        public ProductRepository(POSProductContext context) : base(context)\n        {\n            _context = context;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/CreateProductCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class CreateProductCommand : ICommand\n    {\n        public Guid Category { get; set; }\n        public string PartNumber { get; set; }\n        public string Name { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/CreateProductCommandHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class CreateProductCommandHandler : ICommandHandler<CreateProductCommand>\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductCreatedEvent> _eventSources;\n\n        public CreateProductCommandHandler(\n            IMapper mapper,\n            IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductCreatedEvent> eventSources)\n        {\n            _mapper = mapper;\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(CreateProductCommand command, CancellationToken cancellationToken)\n        {\n            var createdEvent = _mapper.Map<ProductCreatedEvent>(command);\n            createdEvent.CreatedAt = DateTime.Now;\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(createdEvent, cancellationToken);\n            \n            await _kafkaProducer.Send(createdEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/DeleteProductCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class DeleteProductCommand : ICommand\n    {\n        public Guid ProductId{ get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/DeleteProductCommandHandler.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class DeleteProductCommandHandler : ICommandHandler<DeleteProductCommand>\n    {\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductDeletedEvent> _eventSources;\n        public DeleteProductCommandHandler(IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductDeletedEvent> eventSources\n            )\n        {\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(DeleteProductCommand command, CancellationToken cancellationToken)\n        {\n            var DeletedEvent = new ProductDeletedEvent\n            {\n                ProductId = command.ProductId,                \n                CreatedAt = DateTime.Now\n            };\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(DeletedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(DeletedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/CreateProductCategoryCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands.ProductCategories\n{\n    public class CreateProductCategoryCommand : ICommand\n    {\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/CreateProductCategoryCommandHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands.ProductCategories\n{\n    public class CreateProductCategoryCommandHandler : ICommandHandler<CreateProductCategoryCommand>\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductCategoryCreatedEvent> _eventSources;\n\n        public CreateProductCategoryCommandHandler(\n            IMapper mapper,\n            IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductCategoryCreatedEvent> eventSources)\n        {\n            _mapper = mapper;\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(CreateProductCategoryCommand command, CancellationToken cancellationToken)\n        {\n            var createdEvent = _mapper.Map<ProductCategoryCreatedEvent>(command);\n            createdEvent.CreatedAt = DateTime.Now;\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(createdEvent, cancellationToken);\n            \n            await _kafkaProducer.Send(createdEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/DeleteProductCategoryCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class DeleteProductCategoryCommand : ICommand\n    {\n        public Guid PoductCategoryId { get; set; }        \n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/DeleteProductCategoryCommandHandler.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class DeleteProductCategoryCommandHandler : ICommandHandler<DeleteProductCategoryCommand>\n    {\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductCategoryDeletedEvent> _eventSources;\n        public DeleteProductCategoryCommandHandler(IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductCategoryDeletedEvent> eventSources\n            )\n        {\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(DeleteProductCategoryCommand command, CancellationToken cancellationToken)\n        {\n            var DeletedEvent = new ProductCategoryDeletedEvent\n            {\n                ProductCategoryId = command.PoductCategoryId,                \n                CreatedAt = DateTime.Now\n            };\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(DeletedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(DeletedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/UpdateProductCategoryCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Commands\n{\n    public class UpdateProductCategoryCommand : ICommand\n    {\n        public Guid Id { get; set; }\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/ProductCategories/UpdateProductCategoryCommandHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class UpdateProductCategoryCommandHandler : ICommandHandler<UpdateProductCategoryCommand>\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductCategoryUpdatedEvent> _eventSources;\n\n        public UpdateProductCategoryCommandHandler(\n            IMapper mapper,\n            IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductCategoryUpdatedEvent> eventSources)\n        {\n            _mapper = mapper;\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(UpdateProductCategoryCommand command, CancellationToken cancellationToken)\n        {\n            var updatedEvent = _mapper.Map<ProductCategoryUpdatedEvent>(command);\n            updatedEvent.CreatedAt = DateTime.Now;\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(updatedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(updatedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/UpdateProductCommand.cs",
    "content": "﻿using Dermayon.Common.Domain;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class UpdateProductCommand : ICommand\n    {\n        public Guid Id { get; set; }\n        public Guid Category { get; set; }\n        public string PartNumber { get; set; }\n        public string Name { get; set; }\n        public int? Quantity { get; set; }\n        public decimal? UnitPrice { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Commands/UpdateProductCommandHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Pos.Event.Contracts;\nusing Pos.Product.Infrastructure.EventSources;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Commands\n{\n    public class UpdateProductCommandHandler : ICommandHandler<UpdateProductCommand>\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _kafkaProducer;\n        private readonly IEventRepository<POSProductEventContext, ProductUpdatedEvent> _eventSources;\n\n        public UpdateProductCommandHandler(\n            IMapper mapper,\n            IKakfaProducer kakfaProducer, \n            IEventRepository<POSProductEventContext, ProductUpdatedEvent> eventSources)\n        {\n            _mapper = mapper;\n            _kafkaProducer = kakfaProducer;\n            _eventSources = eventSources;\n        }\n\n        public async Task Handle(UpdateProductCommand command, CancellationToken cancellationToken)\n        {\n            var updatedEvent = _mapper.Map<ProductUpdatedEvent>(command);\n            updatedEvent.CreatedAt = DateTime.Now;\n\n            // Insert event to Command Db\n            await _eventSources.InserEvent(updatedEvent, cancellationToken);\n\n            await _kafkaProducer.Send(updatedEvent, AppGlobalTopic.PosTopic);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductCategories/ProductCategoryCreateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.EventHandlers\n{\n    public class ProductCategoryCreateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductCategoryRepository _productCategoryRepository;\n\n        public ProductCategoryCreateEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer,\n            IProductCategoryRepository productCategoryRepository)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _productCategoryRepository = productCategoryRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume ProductCategoryCreatedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductCategoryCreatedEvent>();\n                var data = _mapper.Map<ProductCategory>(dataConsomed);\n\n                log.Info(\"Insert ProductCategory\");\n\n                //Consume data to Read Db\n                _productCategoryRepository.Insert(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Inserting data ProductCategory\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductCategories/ProductCategoryDeleteEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing Pos.Product.WebApi.Application.Queries;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.EventHandlers\n{\n    public class ProductCategoryDeleteEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductCategoryRepository _productCategoryRepository;\n        private readonly IProductCategoryQueries _productCategoryQueries;\n\n        public ProductCategoryDeleteEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer,\n            IProductCategoryRepository productCategoryRepository,\n            IProductCategoryQueries productCategoryQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _productCategoryQueries = productCategoryQueries;\n            _productCategoryRepository = productCategoryRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume DeletedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductCategoryDeletedEvent>();\n\n                var data = await _productCategoryQueries.GetData(dataConsomed.ProductCategoryId);\n\n                log.Info(\"Delete Customer\");\n\n                //Consume data to Read Db\n                _productCategoryRepository.Delete(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Deleteing data customer\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductCategories/ProductCategoryUpdateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing Pos.Product.WebApi.Application.Queries;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.EventHandlers\n{\n    public class ProductCategoryUpdateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductCategoryRepository _productCategoryRepository;\n        private readonly IProductCategoryQueries _productCategoryQueries;\n\n        public ProductCategoryUpdateEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer,\n            IProductCategoryRepository productCategoryRepository,\n            IProductCategoryQueries productCategoryQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _productCategoryRepository = productCategoryRepository;\n            _productCategoryQueries = productCategoryQueries;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume ProductCategoryUpdatedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductCategoryUpdatedEvent>();\n\n                var data = await _productCategoryQueries.GetData(dataConsomed.Id);\n                if (data != null)\n                {\n                    data = _mapper.Map<ProductCategory>(dataConsomed);\n\n                    log.Info(\"Update ProductCategory\");\n                    //Consume data to Read Db\n                    _productCategoryRepository.Update(data);\n                    await _uow.CommitAsync();\n                }\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Updating data ProductCategory\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductCreateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.EventHandlers\n{\n    public class ProductCreateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductRepository _ProductRepository;\n\n        public ProductCreateEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer, \n            IProductRepository ProductRepository)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _ProductRepository = ProductRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume ProductCreatedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductCreatedEvent>();\n                var data = _mapper.Map<MstProduct>(dataConsomed);\n\n                log.Info(\"Insert Product\");\n\n                //Consume data to Read Db\n                _ProductRepository.Insert(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Inserting data Product\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductDeleteEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.EventHandlers\n{\n    public class ProductDeleteEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductRepository _ProductRepository;\n        private readonly IProductQueries _ProductQueries;\n\n        public ProductDeleteEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer,\n            IProductRepository ProductRepository,\n            IProductQueries ProductQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _ProductQueries = ProductQueries;\n            _ProductRepository = ProductRepository;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume ProductDeletedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductDeletedEvent>();\n\n                var data = await _ProductQueries.GetProduct(dataConsomed.ProductId);\n\n                log.Info(\"Delete Product\");\n\n                //Consume data to Read Db\n                _ProductRepository.Delete(data);\n                await _uow.CommitAsync();\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Deleteing data Product\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/ProductUpdateEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.Data.EFRepositories.Contracts;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Product.Infrastructure;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.EventHandlers\n{\n    public class ProductUpdateEventHandler : IServiceEventHandler\n    {\n        private readonly IUnitOfWork<POSProductContext> _uow;\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductRepository _ProductRepository;\n        private readonly IProductQueries _ProductQueries;\n\n        public ProductUpdateEventHandler(IUnitOfWork<POSProductContext> uow,\n            IMapper mapper,\n            IKakfaProducer producer, \n            IProductRepository ProductRepository,\n            IProductQueries ProductQueries)\n        {\n            _uow = uow;\n            _mapper = mapper;\n            _producer = producer;\n            _ProductRepository = ProductRepository;\n            _ProductQueries = ProductQueries;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                log.Info(\"Consume ProductUpdatedEvent\");\n\n                var dataConsomed = jObject.ToObject<ProductUpdatedEvent>();\n\n                var data = await _ProductQueries.GetProduct(dataConsomed.Id);\n                if (data != null)\n                {\n                    data = _mapper.Map<MstProduct>(dataConsomed);\n\n                    log.Info(\"Update Product\");\n                    //Consume data to Read Db\n                    _ProductRepository.Update(data);\n                    await _uow.CommitAsync();\n                }\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Updating data Product\", ex);\n                throw ex;\n            }            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/EventHandlers/SagaPattern/OrderCreatedEventHandler.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.CrossCutting;\nusing Dermayon.Common.Infrastructure.EventMessaging;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka.Contracts;\nusing Newtonsoft.Json.Linq;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.EventHandlers.SagaPattern\n{\n    public class OrderCreatedEventHandler : IServiceEventHandler\n    {\n        private readonly IMapper _mapper;\n        private readonly IKakfaProducer _producer;\n        private readonly IProductQueries _productQueries;        \n\n        public OrderCreatedEventHandler(\n            IMapper mapper,\n            IKakfaProducer producer,\n            IProductQueries productQueries)\n        {\n            _mapper = mapper;\n            _producer = producer;\n            _productQueries = productQueries;\n        }\n        public async Task Handle(JObject jObject, ILog log, CancellationToken cancellationToken)\n        {\n            try\n            {\n                bool orderIsValid = true;\n                string message = null;\n\n                log.Info(\"Consume OrderCreatedEvent\");\n\n                var dataConsomed = jObject.ToObject<OrderCreatedEvent>();\n\n                var allProduct = dataConsomed.OrderDetail\n                    .Select(x => x.ProductId)\n                    .ToList();\n\n                //Consume data and validate the data\n                allProduct.ForEach(async item =>\n                {\n                    var dataIsExist = await _productQueries.GetProduct(item);\n                    if (dataIsExist == null)\n                        orderIsValid = false;                    \n                });\n                \n                if (orderIsValid == false)\n                {\n                    message = \"Product not found\";\n                }\n\n                var @event = new OrderValidatedEvent { Action = \"Product\", Data = dataConsomed, OrderId = dataConsomed.OrderId, IsValid = orderIsValid, Messages = new List<string> { message } };\n                await _producer.Send(@event, AppGlobalTopic.PosTopic);\n            }\n            catch (Exception ex)\n            {\n                log.Error(\"Error Validating order by product\", ex);\n                throw ex;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Queries/IProductCategoryQueries.cs",
    "content": "﻿using Pos.Product.Domain.ProductAggregate;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Application.Queries\n{\n    public interface IProductCategoryQueries\n    {\n        Task<ProductCategory> GetData(Guid id);\n        Task<IEnumerable<ProductCategory>> GetDatas();\n        Task<IEnumerable<ProductCategory>> GetData(string name);\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Queries/IProductQueries.cs",
    "content": "﻿using Pos.Product.Domain.ProductAggregate;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public interface IProductQueries\n    {\n        Task<MstProduct> GetProduct(Guid id);\n        Task<IEnumerable<MstProduct>> GetProductByCategory(Guid category);\n        Task<IEnumerable<MstProduct>> GetProducts();\n        Task<IEnumerable<MstProduct>> GetProduct(string name);\n        Task<IEnumerable<MstProduct>> GetProductByPartNumber(string partNumber);\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Queries/ProductCategoryQueries.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.Data.DapperRepositories;\nusing Pos.Product.Domain.ProductAggregate;\n\nnamespace Pos.Product.WebApi.Application.Queries\n{\n    public class ProductCategoryQueries : IProductCategoryQueries\n    {\n        private readonly IDbConectionFactory _dbConectionFactory;\n\n        public ProductCategoryQueries(IDbConectionFactory dbConectionFactory)\n        {\n            _dbConectionFactory = dbConectionFactory;\n        }\n        public async Task<ProductCategory> GetData(Guid id)\n        {\n            var qry = \"SELECT * FROM ProductCategory where id = @p1\";\n\n            var data = await new DapperRepository<ProductCategory>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = id });\n\n            return data.SingleOrDefault();\n        }\n\n        public async Task<IEnumerable<ProductCategory>> GetData(string name)\n        {\n            var qry = \"SELECT * FROM ProductCategory where Name like @p1\";\n\n            var data = await new DapperRepository<ProductCategory>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = $\"%{name}%\" });\n\n            return data;\n        }\n\n        public async Task<IEnumerable<ProductCategory>> GetDatas()\n        {\n            var qry = \"SELECT * FROM ProductCategory\";\n\n            var data = await new DapperRepository<ProductCategory>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry);\n\n            return data;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Application/Queries/ProductQueries.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Dermayon.Common.Infrastructure.Data.Contracts;\nusing Dermayon.Infrastructure.Data.DapperRepositories;\nusing Pos.Product.Domain.ProductAggregate;\n\nnamespace Pos.Customer.WebApi.Application.Queries\n{\n    public class ProductQueries : IProductQueries\n    {\n        private readonly IDbConectionFactory _dbConectionFactory;\n\n        public ProductQueries(IDbConectionFactory dbConectionFactory)\n        {\n            _dbConectionFactory = dbConectionFactory;\n        }\n\n        public async Task<MstProduct> GetProduct(Guid id)\n        {\n            var qry = \"SELECT * FROM Product where id = @p1\";\n\n            var data = await new DapperRepository<MstProduct>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = id });\n\n            return data.SingleOrDefault();\n        }\n\n        public async Task<IEnumerable<MstProduct>> GetProduct(string name)\n        {\n            var qry = \"SELECT * FROM Product where Name like @p1\";\n\n            var data = await new DapperRepository<MstProduct>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = $\"%{name}%\" });\n\n            return data;\n        }\n\n        public async Task<IEnumerable<MstProduct>> GetProductByCategory(Guid category)\n        {\n            var qry = \"SELECT * FROM Product where Category = @p1\";\n\n            var data = await new DapperRepository<MstProduct>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = category });\n\n            return data;\n        }\n\n        public async Task<IEnumerable<MstProduct>> GetProductByPartNumber(string partNumber)\n        {\n            var qry = \"SELECT * FROM Product where PartNumber like @p1\";\n\n            var data = await new DapperRepository<MstProduct>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry, new { p1 = $\"%{partNumber}%\" });\n\n            return data;\n        }\n\n        public async Task<IEnumerable<MstProduct>> GetProducts()\n        {\n            var qry = \"SELECT * FROM Product\";\n\n            var data = await new DapperRepository<MstProduct>(_dbConectionFactory.GetDbConnection(\"PRODUCT_READ_CONNECTION\"))\n                .QueryAsync(qry);\n\n            return data;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/ApplicationBootsraper.cs",
    "content": "﻿using AutoMapper;\nusing Dermayon.Common.Domain;\nusing Dermayon.Infrastructure.EvenMessaging.Kafka;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.Product.Infrastructure;\nusing Pos.Product.Infrastructure.EventSources;\nusing Pos.Product.Infrastructure.Repositories;\nusing Pos.Product.WebApi.Application.Commands;\nusing Pos.Product.WebApi.Application.EventHandlers;\nusing Pos.Product.WebApi.Application.Queries;\nusing Pos.Product.WebApi.Mapping;\nusing Pos.Customer.WebApi.Application.EventHandlers;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Product.WebApi.Application.Commands.ProductCategories;\nusing Pos.Product.Domain.ProductAggregate.Contracts;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Event.Contracts;\nusing Pos.Product.WebApi.Application.EventHandlers.SagaPattern;\n\nnamespace Pos.Product.WebApi\n{\n    public static class ApplicationBootsraper\n    {\n        public static IServiceCollection InitBootsraper(this IServiceCollection services, IConfiguration Configuration)\n        {\n            //Init DermayonBootsraper\n            services.InitDermayonBootsraper()\n                   // Set Kafka Configuration\n                   .InitKafka()\n                       .Configure<KafkaEventConsumerConfiguration>(Configuration.GetSection(\"KafkaConsumer\"))\n                       .Configure<KafkaEventProducerConfiguration>(Configuration.GetSection(\"KafkaProducer\"))\n                        // Product Event\n                        .RegisterKafkaConsumer<ProductCreatedEvent, ProductCreateEventHandler>()\n                        .RegisterKafkaConsumer<ProductUpdatedEvent, ProductUpdateEventHandler>()\n                        .RegisterKafkaConsumer<ProductDeletedEvent, ProductDeleteEventHandler>()\n                        // ProductCategory Event\n                        .RegisterKafkaConsumer<ProductCategoryCreatedEvent, ProductCategoryCreateEventHandler>()\n                        .RegisterKafkaConsumer<ProductCategoryUpdatedEvent, ProductCategoryUpdateEventHandler>()\n                        .RegisterKafkaConsumer<ProductCategoryDeletedEvent, ProductCategoryDeleteEventHandler>()\n                        //implement choreography saga \n                        .RegisterKafkaConsumer<OrderCreatedEvent, OrderCreatedEventHandler>()\n                   .RegisterMongo()\n                   // Implement CQRS Event Sourcing =>  [Commands]\n                   .RegisterEventSources()\n                       .RegisterMongoContext<POSProductEventContext, POSProductEventContextSetting>\n                            (Configuration.GetSection(\"ConnectionStrings:PRODUCT_COMMAND_CONNECTION\")\n                           .Get<POSProductEventContextSetting>())\n                  // Implement CQRS Event Sourcing => UserContext [Query] &                    \n                  .RegisterEf()\n                    .AddDbContext<POSProductContext>(options =>\n                        options.UseSqlServer(Configuration.GetConnectionString(\"PRODUCT_READ_CONNECTION\")))\n                .AddOpenApiDocument();                       \n\n            return services;\n        }\n\n        public static IServiceCollection InitMapperProfile(this IServiceCollection services)\n        {\n            var mapperConfig = new MapperConfiguration(cfg =>\n            {\n                cfg.AddProfile(new CommandToEventMapperProfile());\n                cfg.AddProfile(new DomainToCommandMapperProfile());\n                cfg.AddProfile(new EventToDomainMapperProfile());\n                \n            });            \n            services.AddSingleton(provider => mapperConfig.CreateMapper());\n\n            return services;\n        }\n\n        public static IServiceCollection InitAppServices(this IServiceCollection services)\n        {\n            #region Command\n            services.AddScoped<IProductRepository, ProductRepository>();\n            services.AddScoped<IProductCategoryRepository, ProductCategoryRepository>();\n            #endregion            \n            #region Queries\n            services.AddScoped<IProductQueries, ProductQueries>();\n            services.AddScoped<IProductCategoryQueries, ProductCategoryQueries>();\n            #endregion\n            return services;\n        }\n\n        public static IServiceCollection InitEventHandlers(this IServiceCollection services)\n        {\n            #region Product Commands\n            services.AddTransient<ICommandHandler<CreateProductCommand>, CreateProductCommandHandler>();\n            services.AddTransient<ProductCreateEventHandler>();\n\n            services.AddTransient<ICommandHandler<UpdateProductCommand>, UpdateProductCommandHandler>();\n            services.AddTransient<ProductUpdateEventHandler>();\n\n            services.AddTransient<ICommandHandler<DeleteProductCommand>, DeleteProductCommandHandler>();\n            services.AddTransient<ProductDeleteEventHandler>();            \n            #endregion\n\n            #region Product Category Commands\n            services.AddTransient<ICommandHandler<CreateProductCategoryCommand>, CreateProductCategoryCommandHandler>();\n            services.AddTransient<ProductCategoryCreateEventHandler>();\n\n            services.AddTransient<ICommandHandler<UpdateProductCategoryCommand>, UpdateProductCategoryCommandHandler>();\n            services.AddTransient<ProductCategoryUpdateEventHandler>();\n\n            services.AddTransient<ICommandHandler<DeleteProductCategoryCommand>, DeleteProductCategoryCommandHandler>();\n            services.AddTransient<ProductCategoryDeleteEventHandler>();\n            #endregion\n\n            #region saga pattern\n            //implement choreography saga \n            services.AddTransient<OrderCreatedEventHandler>();\n            #endregion\n\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Controllers/ProductCategoryController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing AutoMapper;\nusing Dermayon.Common.Api;\nusing Dermayon.Common.Domain;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Product.WebApi.Application.Commands.ProductCategories;\nusing Pos.Product.WebApi.Application.Queries;\n\nnamespace Pos.Product.WebApi.Controllers\n{\n    [Produces(\"application/json\")]\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ProductCategoryController : ControllerBase\n    {\n        private readonly IMapper _mapper;\n        private readonly ICommandHandler<CreateProductCategoryCommand> _createProductCategoryCommand;\n        private readonly ICommandHandler<UpdateProductCategoryCommand> _updateProductCategoryCommand;\n        private readonly ICommandHandler<DeleteProductCategoryCommand> _deleteProductCategoryCommand;\n        private readonly IProductCategoryQueries _productCategoryQueries;\n        private readonly ILogger<ProductCategoryController> _logger;\n\n        public ProductCategoryController(IMapper mapper,\n            ICommandHandler<CreateProductCategoryCommand> createProductCategoryCommand,\n            ICommandHandler<UpdateProductCategoryCommand> updateProductCategoryCommand,\n            ICommandHandler<DeleteProductCategoryCommand> deleteProductCategoryCommand,\n            IProductCategoryQueries productCategoryQueries,\n            ILogger<ProductCategoryController> logger)\n        {\n            _mapper = mapper;\n            _createProductCategoryCommand = createProductCategoryCommand;\n            _updateProductCategoryCommand = updateProductCategoryCommand;\n            _deleteProductCategoryCommand = deleteProductCategoryCommand;\n            _productCategoryQueries = productCategoryQueries;\n            _logger = logger;\n        }\n        // GET api/values\n        [HttpGet]\n        public async Task<IActionResult> Get()\n        {\n            try\n            {\n                var data = await _productCategoryQueries.GetDatas();\n\n                return Ok(new ApiOkResponse(data, data.Count()));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, \"Error on Get Customers\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public async Task<IActionResult> Get(Guid id)\n        {\n            try\n            {\n                var data = await _productCategoryQueries.GetData(id);\n\n                return Ok(new ApiOkResponse(data, data != null ? 1 : 0));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Get Customer [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // POST api/customer\n        [HttpPost]\n        public async Task<IActionResult> Post([FromBody] CreateProductCategoryCommand request)\n        {\n            try\n            {\n                await _createProductCategoryCommand.Handle(request, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Product Cattegory\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // PUT api/customer\n        [HttpPut]\n        public async Task<IActionResult> Put([FromBody] UpdateProductCategoryCommand request)\n        {\n            try\n            {\n                await _updateProductCategoryCommand.Handle(request, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert ProductCategory\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // DELETE api/customer/idCustomer\n        [HttpDelete(\"{id}\")]\n        public async Task<IActionResult> Delete(Guid id)\n        {\n            try\n            {\n                var deleteProductCategoryCommand = new DeleteProductCategoryCommand {  PoductCategoryId = id };\n                await _deleteProductCategoryCommand.Handle(deleteProductCategoryCommand, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Delete Product Category [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Controllers/ProductController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing AutoMapper;\nusing Dermayon.Common.Api;\nusing Dermayon.Common.Domain;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Customer.WebApi.Application.Queries;\nusing Pos.Product.WebApi.Application.Commands;\n\nnamespace Pos.Product.WebApi.Controllers\n{\n    [Produces(\"application/json\")]\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ProductController : ControllerBase\n    {\n        private readonly IMapper _mapper;\n        private readonly ICommandHandler<CreateProductCommand> _createProductCommand;\n        private readonly ICommandHandler<UpdateProductCommand> _updateProductCommand;\n        private readonly ICommandHandler<DeleteProductCommand> _deleteProductCommand;\n        private readonly IProductQueries _productQueries;\n        private readonly ILogger<ProductController> _logger;\n\n        public ProductController(IMapper mapper,\n            ICommandHandler<CreateProductCommand> createProductCommand,\n            ICommandHandler<UpdateProductCommand> updateProductCommand,\n            ICommandHandler<DeleteProductCommand> deleteProductCommand,\n            IProductQueries productCategoryQueries,\n            ILogger<ProductController> logger)\n        {\n            _mapper = mapper;\n            _createProductCommand = createProductCommand;\n            _updateProductCommand = updateProductCommand;\n            _deleteProductCommand = deleteProductCommand;\n            _productQueries = productCategoryQueries;\n            _logger = logger;\n        }\n        // GET api/values\n        [HttpGet]\n        public async Task<IActionResult> Get()\n        {\n            try\n            {\n                var data = await _productQueries.GetProducts();\n\n                return Ok(new ApiOkResponse(data, data.Count()));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, \"Error on Get Customers\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public async Task<IActionResult> Get(Guid id)\n        {\n            try\n            {\n                var data = await _productQueries.GetProduct(id);\n\n                return Ok(new ApiOkResponse(data, data != null ? 1 : 0));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Get Customer [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // POST api/product\n        [HttpPost]\n        public async Task<IActionResult> Post([FromBody] CreateProductCommand request)\n        {\n            try\n            {\n                await _createProductCommand.Handle(request, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Product Cattegory\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // PUT api/product\n        [HttpPut]\n        public async Task<IActionResult> Put([FromBody] UpdateProductCommand request)\n        {\n            try\n            {\n                await _updateProductCommand.Handle(request, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Insert Product\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n\n        // DELETE api/product/idCustomer\n        [HttpDelete(\"{id}\")]\n        public async Task<IActionResult> Delete(Guid id)\n        {\n            try\n            {\n                var deleteProductCommand = new DeleteProductCommand { ProductId = id };\n                await _deleteProductCommand.Handle(deleteProductCommand, CancellationToken.None);\n                return Ok(new ApiResponse(200));\n            }\n            catch (Exception ex)\n            {\n                _logger.LogCritical(ex, $\"Error on Delete Product Category [{id}]\");\n                return BadRequest(new ApiBadRequestResponse(500, \"Something Wrong\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.Product.WebApi.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ValuesController : ControllerBase\n    {\n        // GET api/values\n        [HttpGet]\n        public ActionResult<IEnumerable<string>> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public ActionResult<string> Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        [HttpPost]\n        public void Post([FromBody] string value)\n        {\n        }\n\n        // PUT api/values/5\n        [HttpPut(\"{id}\")]\n        public void Put(int id, [FromBody] string value)\n        {\n        }\n\n        // DELETE api/values/5\n        [HttpDelete(\"{id}\")]\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Product.WebApi/Pos.Product.WebApi.csproj\", \"Pos.Product.WebApi/\"]\nCOPY [\"Pos.Product.Domain/Pos.Product.Domain.csproj\", \"Pos.Product.Domain/\"]\nCOPY [\"Pos.Event.Contracts/Pos.Event.Contracts.csproj\", \"Pos.Event.Contracts/\"]\nCOPY [\"Pos.Product.Infrastructure/Pos.Product.Infrastructure.csproj\", \"Pos.Product.Infrastructure/\"]\nRUN dotnet restore \"Pos.Product.WebApi/Pos.Product.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Product.WebApi\"\nRUN dotnet build \"Pos.Product.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Product.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Product.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Product.WebApi/Mapping/CommandToEventMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Event.Contracts;\nusing Pos.Product.WebApi.Application.Commands;\nusing Pos.Product.WebApi.Application.Commands.ProductCategories;\n\nnamespace Pos.Product.WebApi.Mapping\n{\n    public class CommandToEventMapperProfile : Profile\n    {\n        public CommandToEventMapperProfile()\n        {\n            CreateMap<CreateProductCommand, ProductCreatedEvent>();\n            CreateMap<UpdateProductCommand, ProductUpdatedEvent>();                \n            CreateMap<DeleteProductCommand, ProductDeletedEvent>();\n\n            CreateMap<CreateProductCategoryCommand, ProductCategoryCreatedEvent>();\n            CreateMap<UpdateProductCategoryCommand, ProductCategoryUpdatedEvent>();\n            CreateMap<DeleteProductCategoryCommand, ProductCategoryDeletedEvent>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Mapping/DomainToCommandMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Customer.WebApi.Application.Commands;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.WebApi.Application.Commands;\nusing Pos.Product.WebApi.Application.Commands.ProductCategories;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.Mapping\n{\n    public class DomainToCommandMapperProfile : Profile\n    {\n        public DomainToCommandMapperProfile()\n        {            \n            CreateMap<MstProduct, CreateProductCommand>();\n            CreateMap<MstProduct, UpdateProductCommand>();\n            CreateMap<MstProduct, DeleteProductCommand>()\n                .ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.Id));\n\n            CreateMap<ProductCategory, CreateProductCategoryCommand>();\n            CreateMap<ProductCategory, UpdateProductCategoryCommand>();\n            CreateMap<ProductCategory, DeleteProductCategoryCommand>()\n                .ForMember(dest => dest.PoductCategoryId, opt => opt.MapFrom(src => src.Id));\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Mapping/EventToDomainMapperProfile.cs",
    "content": "﻿using AutoMapper;\nusing Pos.Event.Contracts;\nusing Pos.Product.Domain.ProductAggregate;\nusing System;\n\nnamespace Pos.Product.WebApi.Mapping\n{\n    public class EventToDomainMapperProfile : Profile\n    {\n        public EventToDomainMapperProfile()\n        {\n            CreateMap<ProductCreatedEvent, MstProduct>()\n                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()));\n            CreateMap<ProductUpdatedEvent, MstProduct>();                            \n\n            CreateMap<ProductCategoryCreatedEvent, ProductCategory>()\n                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()));\n            CreateMap<ProductCategoryUpdatedEvent, ProductCategory>();            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Pos.Product.WebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"13.1.3\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Product.Domain\\Pos.Product.Domain.csproj\" />\n    <ProjectReference Include=\"..\\Pos.Product.Infrastructure\\Pos.Product.Infrastructure.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Product.WebApi\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61913\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Product.WebApi\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 61914\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Product.WebApi/SeedingData/DbSeeder.cs",
    "content": "﻿using Microsoft.Extensions.DependencyInjection;\nusing Newtonsoft.Json;\nusing Pos.Product.Domain.ProductAggregate;\nusing Pos.Product.Infrastructure;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.Product.WebApi.SeedingData\n{\n    public static class DbSeeder\n    {\n        public static void Up(IServiceProvider serviceProvider)\n        {          \n            using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())\n            {\n                var context = serviceScope.ServiceProvider.GetService<POSProductContext>();\n\n                if (!context.ProductCategory.Any())\n                {\n                    context.ProductCategory.Add(new ProductCategory { Id = new Guid(\"009341c9-01e7-4f25-aa14-eb31dd8367ee\"), Name = \"Gold\" });\n                    context.ProductCategory.Add(new ProductCategory { Id = new Guid(\"57f826db-87de-4194-b30e-ca648b8733c2\"), Name = \"Silver\" });\n                    context.ProductCategory.Add(new ProductCategory { Id = new Guid(\"b8dbdbf9-1bb9-4505-8e58-a5b3482a759b\"), Name = \"Platinum\" });\n                    context.ProductCategory.Add(new ProductCategory { Id = new Guid(\"67063dc4-5d2f-42a4-b0c4-8ee406e9f9f3\"), Name = \"Bronze\" });\n                    context.SaveChanges();\n                }\n\n                if (!context.Product.Any())\n                {\n                    for (int i = 0; i < 100; i++)\n                    {\n                        context.Product.Add(new MstProduct { Category = new Guid(\"009341c9-01e7-4f25-aa14-eb31dd8367ee\"), Name = $\"Oil Gold A-{i}\", PartNumber = $\"G-0{i}\", Quantity = i * 3, UnitPrice = i * 100});\n                        context.Product.Add(new MstProduct { Category = new Guid(\"57f826db-87de-4194-b30e-ca648b8733c2\"), Name = $\"Oil Silver A-{i}\", PartNumber = $\"S-0{i}\", Quantity = i * 3, UnitPrice = i * 100 });\n                        context.Product.Add(new MstProduct { Category = new Guid(\"b8dbdbf9-1bb9-4505-8e58-a5b3482a759b\"), Name = $\"Oil Platinum A-{i}\", PartNumber = $\"S-0{i}\", Quantity = i * 3, UnitPrice = i * 100 });\n                    }\n                    context.SaveChanges();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/Startup.cs",
    "content": "﻿using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.Product.WebApi.SeedingData;\n\nnamespace Pos.Product.WebApi\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.InitBootsraper(Configuration)\n                .InitAppServices()\n                .InitEventHandlers()\n                .InitMapperProfile();\n\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.UseOpenApi();\n            app.UseSwaggerUi3();\n\n            app.UseMvc();\n\n            //Seeder\n            DbSeeder.Up(app.ApplicationServices);\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/appsettings.Development.json",
    "content": "{\n  \"ConnectionStrings\": {\n    \"PRODUCT_COMMAND_CONNECTION\": {\n      \"ServerConnection\": \"mongodb://root:password@mongodb:27017/admin\",\n      \"Database\": \"productevents\"\n    },\n    \"PRODUCT_READ_CONNECTION\": \"server=sql.data;Initial Catalog=POS_Product;User ID=sa;Password=Pass@word\"\n  },\n  \"KafkaConsumer\": {\n    \"Server\": \"kafkaserver\",\n    \"GroupId\": \"product-service\",\n    \"TimeOut\": \"00:00:01\",\n    \"Topics\": [\n      \"PosServices\"\n    ]\n  },\n  \"KafkaProducer\": {\n    \"Server\": \"kafkaserver\",\n    \"MaxRetries\": 2,\n    \"MessageTimeout\": \"00:00:15\"\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Product.WebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.Report.Domain/Class1.cs",
    "content": "﻿using System;\n\nnamespace Pos.Report.Domain\n{\n    public class Class1\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Report.Domain/Pos.Report.Domain.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Report.Infrastructure/Class1.cs",
    "content": "﻿using System;\n\nnamespace Pos.Report.Infrastructure\n{\n    public class Class1\n    {\n    }\n}\n"
  },
  {
    "path": "src/Pos.Report.Infrastructure/Pos.Report.Infrastructure.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Report.WebApi/Controllers/ValuesController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.Report.WebApi.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ValuesController : ControllerBase\n    {\n        // GET api/values\n        [HttpGet]\n        public ActionResult<IEnumerable<string>> Get()\n        {\n            return new string[] { \"value1\", \"value2\" };\n        }\n\n        // GET api/values/5\n        [HttpGet(\"{id}\")]\n        public ActionResult<string> Get(int id)\n        {\n            return \"value\";\n        }\n\n        // POST api/values\n        [HttpPost]\n        public void Post([FromBody] string value)\n        {\n        }\n\n        // PUT api/values/5\n        [HttpPut(\"{id}\")]\n        public void Put(int id, [FromBody] string value)\n        {\n        }\n\n        // DELETE api/values/5\n        [HttpDelete(\"{id}\")]\n        public void Delete(int id)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Report.WebApi/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Report.WebApi/Pos.Report.WebApi.csproj\", \"Pos.Report.WebApi/\"]\nCOPY [\"Pos.Report.Infrastructure/Pos.Report.Infrastructure.csproj\", \"Pos.Report.Infrastructure/\"]\nCOPY [\"Pos.Report.Domain/Pos.Report.Domain.csproj\", \"Pos.Report.Domain/\"]\nCOPY [\"Pos.Event.Contracts/Pos.Event.Contracts.csproj\", \"Pos.Event.Contracts/\"]\nRUN dotnet restore \"Pos.Report.WebApi/Pos.Report.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Report.WebApi\"\nRUN dotnet build \"Pos.Report.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Report.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Report.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Report.WebApi/Dockerfile.original",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.Report.WebApi/Pos.Report.WebApi.csproj\", \"Pos.Report.WebApi/\"]\nRUN dotnet restore \"Pos.Report.WebApi/Pos.Report.WebApi.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.Report.WebApi\"\nRUN dotnet build \"Pos.Report.WebApi.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.Report.WebApi.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.Report.WebApi.dll\"]"
  },
  {
    "path": "src/Pos.Report.WebApi/Pos.Report.WebApi.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Pos.Event.Contracts\\Pos.Event.Contracts.csproj\" />\n    <ProjectReference Include=\"..\\Pos.Report.Domain\\Pos.Report.Domain.csproj\" />\n    <ProjectReference Include=\"..\\Pos.Report.Infrastructure\\Pos.Report.Infrastructure.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.Report.WebApi/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.Report.WebApi\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.Report.WebApi/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61952\",\n      \"sslPort\": 0\n    }\n  },\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.Report.WebApi\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"api/values\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}/api/values\",\n      \"environmentVariables\": {},\n      \"httpPort\": 61953\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.Report.WebApi/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\n\nnamespace Pos.Report.WebApi\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.UseMvc();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.Report.WebApi/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.Report.WebApi/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ApplicationBootsraper.cs",
    "content": "﻿using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Pos.WebApplication.HealthChecks;\nusing Pos.WebApplication.Utilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication\n{\n    public static class ApplicationBootsraper\n    {\n        public static IServiceCollection InitBootsraper(this IServiceCollection services, IConfiguration configuration)\n        {\n            services.AddTransient<IHttpCheck, HttpCheck>();\n            return services;\n        }\n\n        public static IServiceCollection SetHealtCheck(this IServiceCollection services, IConfiguration configuration)\n        {\n            services.AddHealthChecks()\n               .AddCheck<OrderServicesHc>(\"Order HTTP Check\")\n               .AddCheck<ProductServicesHc>(\"Product HTTP Check\")\n               .AddCheck<CustomerServicesHc>(\"Customer HTTP Check\")\n               .AddCheck<ReportServicesHc>(\"Report HTTP Check\")\n            ;\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Controllers/CustomerController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.WebApplication.Areas.Masters.Controllers\n{\n    [Area(\"Master\")]\n    public class CustomerController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Controllers/ProductCategoryController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.WebApplication.Areas.Masters.Controllers\n{\n    [Area(\"Master\")]\n    public class ProductCategoryController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Controllers/ProductController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.WebApplication.Areas.Masters.Controllers\n{\n    [Area(\"Master\")]\n    public class ProductController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Views/Customer/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Customer\";\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section Styles{\n    <!--Morris Chart CSS -->\n    <link rel=\"stylesheet\" href=\"~/theme2-assets/plugins/morris/morris.css\">\n    <link href=\"~/theme2-assets/plugins/bootstrap-table/css/bootstrap-table.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>\n                <li class=\"breadcrumb-item\"><a href=\"#\">Master</a></li>\n                <li class=\"breadcrumb-item active\">Customer</li>\n            </ol>\n            <h4 class=\"page-title\">Customer</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n\n<!--Basic Toolbar-->\n<!--===================================================-->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">            \n            <button class=\"btn btn-warning waves-effect waves-light\"> <i class=\"fa fa-plus-circle\"></i> <span>Insert</span> </button>\n            <div class=\"fileupload btn btn-purple waves-effect waves-light\">\n                <span><i class=\"ion-upload m-r-5\"></i>Import</span>\n                <input type=\"file\" class=\"upload\">\n            </div>\n            <button class=\"btn btn-dark waves-effect waves-light\"> <i class=\"fa fa-file-o\"></i> <span>Export</span> </button>\n        </div>\n    </div>\n</div>\n<div class=\"row\">   \n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <h4 class=\"m-t-0 header-title\"><b>Basic Toolbar</b></h4>\n            <p class=\"text-muted font-13\">\n                Example of Basic Toolbar (Your text goes here).\n            </p>\n\n            <table data-toggle=\"table\"\n                   data-search=\"true\"\n                   data-show-refresh=\"true\"\n                   data-show-toggle=\"true\"\n                   data-show-columns=\"true\"\n                   data-sort-name=\"id\"\n                   data-page-list=\"[5, 10, 20]\"\n                   data-page-size=\"5\"\n                   data-pagination=\"true\" data-show-pagination-switch=\"true\" class=\"table-bordered \">\n                <thead>\n                    <tr>\n                        <th data-field=\"id\" data-sortable=\"true\" data-formatter=\"invoiceFormatter\">Order ID</th>\n                        <th data-field=\"name\" data-sortable=\"true\">Name</th>\n                        <th data-field=\"date\" data-sortable=\"true\" data-formatter=\"dateFormatter\">Order Date</th>\n                        <th data-field=\"amount\" data-align=\"center\" data-sortable=\"true\" data-sorter=\"priceSorter\">Price</th>\n                        <th data-field=\"status\" data-align=\"center\" data-sortable=\"true\" data-formatter=\"statusFormatter\">Status</th>\n\n                    </tr>\n                </thead>\n\n\n                <tbody>\n                    <tr>\n                        <td>UB-1609</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1610</td>\n                        <td>Woldt</td>\n                        <td>24 Jun 2015</td>\n                        <td>$ 15.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1611</td>\n                        <td>Leonardo</td>\n                        <td>25 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1612</td>\n                        <td>Halladay</td>\n                        <td>27 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1613</td>\n                        <td>Badgett</td>\n                        <td>28 Jun 2015</td>\n                        <td>$ 95.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1614</td>\n                        <td>Boudreaux</td>\n                        <td>29 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1615</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1616</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1617</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1618</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1619</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1620</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1621</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1622</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1623</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1624</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n\n\n@section Scripts{\n    <!-- Bootsrap table js -->\n    <script src=\"~/theme2-assets/plugins/bootstrap-table/js/bootstrap-table.js\"></script>\n    <script src=\"~/theme2-assets/pages/jquery.bs-table.js\"></script>\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Views/Product/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Product\";\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section Styles{        \n    <link href=\"~/theme2-assets/plugins/bootstrap-table/css/bootstrap-table.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>\n                <li class=\"breadcrumb-item\"><a href=\"#\">Master</a></li>\n                <li class=\"breadcrumb-item active\">Product</li>\n            </ol>\n            <h4 class=\"page-title\">Product</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n\n<!--Basic Toolbar-->\n<!--===================================================-->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <button class=\"btn btn-warning waves-effect waves-light\"> <i class=\"fa fa-plus-circle\"></i> <span>Insert</span> </button>\n            <div class=\"fileupload btn btn-purple waves-effect waves-light\">\n                <span><i class=\"ion-upload m-r-5\"></i>Import</span>\n                <input type=\"file\" class=\"upload\">\n            </div>\n            <button class=\"btn btn-dark waves-effect waves-light\"> <i class=\"fa fa-file-o\"></i> <span>Export</span> </button>\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <h4 class=\"m-t-0 header-title\"><b>Basic Toolbar</b></h4>\n            <p class=\"text-muted font-13\">\n                Example of Basic Toolbar (Your text goes here).\n            </p>\n\n            <table data-toggle=\"table\"\n                   data-search=\"true\"\n                   data-show-refresh=\"true\"\n                   data-show-toggle=\"true\"\n                   data-show-columns=\"true\"\n                   data-sort-name=\"id\"\n                   data-page-list=\"[5, 10, 20]\"\n                   data-page-size=\"5\"\n                   data-pagination=\"true\" data-show-pagination-switch=\"true\" class=\"table-bordered \">\n                <thead>\n                    <tr>\n                        <th data-field=\"id\" data-sortable=\"true\" data-formatter=\"invoiceFormatter\">Order ID</th>\n                        <th data-field=\"name\" data-sortable=\"true\">Name</th>\n                        <th data-field=\"date\" data-sortable=\"true\" data-formatter=\"dateFormatter\">Order Date</th>\n                        <th data-field=\"amount\" data-align=\"center\" data-sortable=\"true\" data-sorter=\"priceSorter\">Price</th>\n                        <th data-field=\"status\" data-align=\"center\" data-sortable=\"true\" data-formatter=\"statusFormatter\">Status</th>\n\n                    </tr>\n                </thead>\n\n\n                <tbody>\n                    <tr>\n                        <td>UB-1609</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1610</td>\n                        <td>Woldt</td>\n                        <td>24 Jun 2015</td>\n                        <td>$ 15.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1611</td>\n                        <td>Leonardo</td>\n                        <td>25 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1612</td>\n                        <td>Halladay</td>\n                        <td>27 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1613</td>\n                        <td>Badgett</td>\n                        <td>28 Jun 2015</td>\n                        <td>$ 95.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1614</td>\n                        <td>Boudreaux</td>\n                        <td>29 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1615</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1616</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1617</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1618</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1619</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1620</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1621</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1622</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1623</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1624</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n\n@section Scripts{\n    <!-- Bootsrap table js -->\n    <script src=\"~/theme2-assets/plugins/bootstrap-table/js/bootstrap-table.js\"></script>\n    <script src=\"~/theme2-assets/pages/jquery.bs-table.js\"></script>\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Master/Views/ProductCategory/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Customer\";\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section Styles{\n    <!--Morris Chart CSS -->\n    <link rel=\"stylesheet\" href=\"~/theme2-assets/plugins/morris/morris.css\">\n    <link href=\"~/theme2-assets/plugins/bootstrap-table/css/bootstrap-table.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>\n                <li class=\"breadcrumb-item\"><a href=\"#\">Master</a></li>\n                <li class=\"breadcrumb-item active\">Product Category</li>\n            </ol>\n            <h4 class=\"page-title\">Product Category</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n\n<!--Basic Toolbar-->\n<!--===================================================-->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <button class=\"btn btn-warning waves-effect waves-light\"> <i class=\"fa fa-plus-circle\"></i> <span>Insert</span> </button>\n            <div class=\"fileupload btn btn-purple waves-effect waves-light\">\n                <span><i class=\"ion-upload m-r-5\"></i>Import</span>\n                <input type=\"file\" class=\"upload\">\n            </div>\n            <button class=\"btn btn-dark waves-effect waves-light\"> <i class=\"fa fa-file-o\"></i> <span>Export</span> </button>\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <h4 class=\"m-t-0 header-title\"><b>Basic Toolbar</b></h4>\n            <p class=\"text-muted font-13\">\n                Example of Basic Toolbar (Your text goes here).\n            </p>\n\n            <table data-toggle=\"table\"\n                   data-search=\"true\"\n                   data-show-refresh=\"true\"\n                   data-show-toggle=\"true\"\n                   data-show-columns=\"true\"\n                   data-sort-name=\"id\"\n                   data-page-list=\"[5, 10, 20]\"\n                   data-page-size=\"5\"\n                   data-pagination=\"true\" data-show-pagination-switch=\"true\" class=\"table-bordered \">\n                <thead>\n                    <tr>\n                        <th data-field=\"id\" data-sortable=\"true\" data-formatter=\"invoiceFormatter\">Order ID</th>\n                        <th data-field=\"name\" data-sortable=\"true\">Name</th>\n                        <th data-field=\"date\" data-sortable=\"true\" data-formatter=\"dateFormatter\">Order Date</th>\n                        <th data-field=\"amount\" data-align=\"center\" data-sortable=\"true\" data-sorter=\"priceSorter\">Price</th>\n                        <th data-field=\"status\" data-align=\"center\" data-sortable=\"true\" data-formatter=\"statusFormatter\">Status</th>\n\n                    </tr>\n                </thead>\n\n\n                <tbody>\n                    <tr>\n                        <td>UB-1609</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1610</td>\n                        <td>Woldt</td>\n                        <td>24 Jun 2015</td>\n                        <td>$ 15.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1611</td>\n                        <td>Leonardo</td>\n                        <td>25 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1612</td>\n                        <td>Halladay</td>\n                        <td>27 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1613</td>\n                        <td>Badgett</td>\n                        <td>28 Jun 2015</td>\n                        <td>$ 95.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1614</td>\n                        <td>Boudreaux</td>\n                        <td>29 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1615</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1616</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1617</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1618</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1619</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1620</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1621</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Unpaid</td>\n                    </tr>\n                    <tr>\n                        <td>UB-1622</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Paid</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1623</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Shipped</td>\n                    </tr>\n\n                    <tr>\n                        <td>UB-1624</td>\n                        <td>Boudreaux</td>\n                        <td>22 Jun 2015</td>\n                        <td>$ 35.00</td>\n                        <td>Refunded</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n\n@section Scripts{\n    <!-- Bootsrap table js -->\n    <script src=\"~/theme2-assets/plugins/bootstrap-table/js/bootstrap-table.js\"></script>\n    <script src=\"~/theme2-assets/pages/jquery.bs-table.js\"></script>\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Order/Controllers/ItemController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.WebApplication.Areas.Masters.Controllers\n{\n    [Area(\"Order\")]\n    public class ItemController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Order/Views/Item/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Customer\";\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section Styles{\n    <!--Morris Chart CSS -->\n    <link rel=\"stylesheet\" href=\"~/theme2-assets/plugins/morris/morris.css\">\n    <link href=\"~/theme2-assets/plugins/bootstrap-table/css/bootstrap-table.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>\n                <li class=\"breadcrumb-item\"><a href=\"#\">Order</a></li>\n                <li class=\"breadcrumb-item active\">Item</li>\n            </ol>\n            <h4 class=\"page-title\">Item</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n\n<!--Basic Toolbar-->\n<!--===================================================-->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"card-box\">\n            <button class=\"btn btn-warning waves-effect waves-light\"> <i class=\"fa fa-plus-circle\"></i> <span>Insert</span> </button>\n            <div class=\"fileupload btn btn-purple waves-effect waves-light\">\n                <span><i class=\"ion-upload m-r-5\"></i>Import</span>\n                <input type=\"file\" class=\"upload\">\n            </div>\n            <button class=\"btn btn-dark waves-effect waves-light\"> <i class=\"fa fa-file-o\"></i> <span>Export</span> </button>\n        </div>\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"col-lg-12\">\n        <div class=\"card-box\">\n            <div class=\"row m-t-10 m-b-10\">\n                <div class=\"col-sm-6 col-lg-8\">\n                    <form role=\"form\">\n                        <div class=\"form-group contact-search m-b-30\">\n                            <input type=\"text\" id=\"search\" class=\"form-control\" placeholder=\"Search...\">\n                            <button type=\"submit\" class=\"btn btn-white\"><i class=\"fa fa-search\"></i></button>\n                        </div> <!-- form-group -->\n                    </form>\n                </div>\n\n                <div class=\"col-sm-6 col-lg-4\">\n                    <div class=\"h5 m-0\">\n                        <span class=\"font-16\">Sort By:</span>\n                        <div class=\"btn-group vertical-middle\" data-toggle=\"buttons\">\n                            <label class=\"btn btn-white btn-md waves-effect active mb-0\">\n                                <input type=\"radio\" autocomplete=\"off\" checked=\"\"> Status\n                            </label>\n                            <label class=\"btn btn-white btn-md waves-effect mb-0\">\n                                <input type=\"radio\" autocomplete=\"off\"> Type\n                            </label>\n                            <label class=\"btn btn-white btn-md waves-effect mb-0\">\n                                <input type=\"radio\" autocomplete=\"off\"> Name\n                            </label>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"table-responsive\">\n                <table class=\"table table-actions-bar\">\n                    <thead>\n                        <tr>\n                            <th>Product</th>\n                            <th>Order Date</th>\n                            <th>Order Number</th>\n                            <th>Seller</th>\n                            <th>Status</th>\n                            <th>Amount</th>\n                            <th style=\"min-width: 80px;\">Action</th>\n                        </tr>\n                    </thead>\n\n                    <tbody>\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/iphone.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160924</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/samsung.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160923</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Samsung Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-warning\">Shipped</span>\n                            </td>\n                            <td>$2,562</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/lumia.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160922</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Sony Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-primary\">Proceed</span>\n                            </td>\n                            <td>$6,458</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/imac.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160921</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-danger\">Cancel</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/macbook.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160920</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$7,521</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/iphone.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160924</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/samsung.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160923</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Samsung Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-warning\">Shipped</span>\n                            </td>\n                            <td>$2,562</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/lumia.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160922</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Sony Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-primary\">Proceed</span>\n                            </td>\n                            <td>$6,458</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/imac.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160921</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-danger\">Cancel</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/macbook.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160920</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$7,521</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/iphone.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160924</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/samsung.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160923</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Samsung Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-warning\">Shipped</span>\n                            </td>\n                            <td>$2,562</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/lumia.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>08/10/2015</td>\n                            <td><a href=\"#\">UB#160922</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Sony Company</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-primary\">Proceed</span>\n                            </td>\n                            <td>$6,458</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/imac.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160921</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-danger\">Cancel</span>\n                            </td>\n                            <td>$1,256</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                        <tr>\n                            <td><img src=\"~/theme2-assets/images/products/macbook.jpg\" class=\"thumb-sm\" alt=\"\"> </td>\n                            <td>07/10/2015</td>\n                            <td><a href=\"#\">UB#160920</a></td>\n                            <td>\n                                <a href=\"\" class=\"text-dark\"><b>Apple Inc.</b></a>\n                            </td>\n                            <td>\n                                <span class=\"label label-success\">Deliverd</span>\n                            </td>\n                            <td>$7,521</td>\n                            <td>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                            </td>\n                        </tr>\n\n                    </tbody>\n                </table>\n            </div>\n        </div>\n\n    </div> <!-- end col -->\n\n</div>\n\n@section Scripts{\n    <!-- Bootsrap table js -->\n    <script src=\"~/theme2-assets/plugins/bootstrap-table/js/bootstrap-table.js\"></script>\n    <script src=\"~/theme2-assets/pages/jquery.bs-table.js\"></script>\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Reports/Controllers/TransactionController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Pos.WebApplication.Areas.Masters.Controllers\n{\n    [Area(\"Reports\")]\n    public class TransactionController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Areas/Reports/Views/Transaction/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Customer\";\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n\n@section Styles{\n    <!--Morris Chart CSS -->\n    <link rel=\"stylesheet\" href=\"~/theme2-assets/plugins/morris/morris.css\">\n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>\n                <li class=\"breadcrumb-item\"><a href=\"#\">Reports</a></li>\n                <li class=\"breadcrumb-item active\">Transaction</li>\n            </ol>\n            <h4 class=\"page-title\">Transaction</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-lg-12 col-xl-3\">\n        <div class=\"card-box widget-box-1 bg-white\">\n            <i class=\"fa fa-info-circle text-muted pull-right inform\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"\" data-original-title=\"Last 24 Hours\"></i>\n            <h4 class=\"text-dark font-18\">Income status</h4>\n            <h2 class=\"text-primary text-center\">$<span data-plugin=\"counterup\">5623</span></h2>\n            <p class=\"text-muted\">Total income: $22506 <span class=\"pull-right\"><i class=\"fa fa-caret-up text-primary m-r-5\"></i>10.25%</span></p>\n        </div>\n    </div>\n\n    <div class=\"col-lg-12 col-xl-3\">\n        <div class=\"card-box widget-box-1 bg-white\">\n            <i class=\"fa fa-info-circle text-muted pull-right inform\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"\" data-original-title=\"Last 24 Hours\"></i>\n            <h4 class=\"text-dark font-18\">Sales status</h4>\n            <h2 class=\"text-pink text-center\"><span data-plugin=\"counterup\">185</span></h2>\n            <p class=\"text-muted\">Total sales: 2398 <span class=\"pull-right\"><i class=\"fa fa-caret-down text-danger m-r-5\"></i>7.85%</span></p>\n        </div>\n    </div>\n\n    <div class=\"col-lg-12 col-xl-3\">\n        <div class=\"card-box widget-box-1 bg-white\">\n            <i class=\"fa fa-info-circle text-muted pull-right inform\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"\" data-original-title=\"Last 24 Hours\"></i>\n            <h4 class=\"text-dark font-18\">Income status</h4>\n            <h2 class=\"text-success text-center\">$<span data-plugin=\"counterup\">9562</span></h2>\n            <p class=\"text-muted\">Total income: $22506 <span class=\"pull-right\"><i class=\"fa fa-caret-up text-primary m-r-5\"></i>10.25%</span></p>\n        </div>\n    </div>\n\n    <div class=\"col-lg-12 col-xl-3\">\n        <div class=\"card-box widget-box-1 bg-white\">\n            <i class=\"fa fa-info-circle text-muted pull-right inform\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"\" data-original-title=\"Last 24 Hours\"></i>\n            <h4 class=\"text-dark font-18\">Sales status</h4>\n            <h2 class=\"text-warning text-center\"><span data-plugin=\"counterup\">874</span></h2>\n            <p class=\"text-muted\">Total sales: 2398 <span class=\"pull-right\"><i class=\"fa fa-caret-down text-danger m-r-5\"></i>7.85%</span></p>\n        </div>\n    </div>\n\n</div>\n\n<!-- BAR Chart -->\n<div class=\"row\">\n    <div class=\"col-lg-12 col-xl-6\">\n        <div class=\"portlet\">\n            <!-- /primary heading -->\n            <div class=\"portlet-heading\">\n                <h3 class=\"portlet-title text-dark\"> Total Revenue </h3>\n                <div class=\"portlet-widgets\">\n                    <a href=\"javascript:;\" data-toggle=\"reload\"><i class=\"ion-refresh\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a data-toggle=\"collapse\" data-parent=\"#accordion1\" href=\"#bg-default1\"><i class=\"ion-minus-round\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a href=\"#\" data-toggle=\"remove\"><i class=\"ion-close-round\"></i></a>\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div id=\"bg-default1\" class=\"panel-collapse collapse show\">\n                <div class=\"portlet-body\">\n                    <div class=\"text-center\">\n                        <ul class=\"list-inline chart-detail-list\">\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #3ac9d6;\"></i>Series A</h5>\n                            </li>\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #f9c851;\"></i>Series B</h5>\n                            </li>\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #ebeff2;\"></i>Series C</h5>\n                            </li>\n                        </ul>\n                    </div>\n                    <div id=\"morris-bar-example\" style=\"height: 300px;\"></div>\n                </div>\n            </div>\n        </div>\n        <!-- /Portlet -->\n    </div>\n    <!-- col -->\n    <div class=\"col-lg-12 col-xl-6\">\n        <div class=\"portlet\">\n            <!-- /primary heading -->\n            <div class=\"portlet-heading\">\n                <h3 class=\"portlet-title text-dark\"> Sales Analytics </h3>\n                <div class=\"portlet-widgets\">\n                    <a href=\"javascript:;\" data-toggle=\"reload\"><i class=\"ion-refresh\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a data-toggle=\"collapse\" data-parent=\"#accordion1\" href=\"#bg-default\"><i class=\"ion-minus-round\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a href=\"#\" data-toggle=\"remove\"><i class=\"ion-close-round\"></i></a>\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div id=\"bg-default\" class=\"panel-collapse collapse show\">\n                <div class=\"portlet-body\">\n                    <div class=\"text-center\">\n                        <ul class=\"list-inline chart-detail-list\">\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #4793f5;\"></i>Mobiles</h5>\n                            </li>\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #ff3f4e;\"></i>Tablets</h5>\n                            </li>\n                            <li class=\"list-inline-item\">\n                                <h5><i class=\"fa fa-circle m-r-5\" style=\"color: #bbbbbb;\"></i>Desktops</h5>\n                            </li>\n                        </ul>\n                    </div>\n                    <div id=\"morris-area-example\" style=\"height: 300px;\"></div>\n                </div>\n            </div>\n        </div>\n        <!-- /Portlet -->\n    </div>\n    <!-- col -->\n</div>\n<!-- End row-->\n\n\n<div class=\"row\">\n\n    <div class=\"col-12\">\n\n        <div class=\"portlet\">\n            <!-- /primary heading -->\n            <div class=\"portlet-heading\">\n                <h3 class=\"portlet-title text-dark text-uppercase\">\n                    Projects\n                </h3>\n                <div class=\"portlet-widgets\">\n                    <a href=\"javascript:;\" data-toggle=\"reload\"><i class=\"ion-refresh\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a data-toggle=\"collapse\" data-parent=\"#accordion1\" href=\"#portlet2\"><i class=\"ion-minus-round\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a href=\"#\" data-toggle=\"remove\"><i class=\"ion-close-round\"></i></a>\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div id=\"portlet2\" class=\"panel-collapse collapse show\">\n                <div class=\"portlet-body\">\n                    <div class=\"table-responsive\">\n                        <table class=\"table table-hover mails m-0 table table-actions-bar\">\n                            <thead>\n                                <tr>\n                                    <th>User</th>\n                                    <th>Name</th>\n                                    <th>Email</th>\n                                    <th>Products</th>\n                                    <th>Start Date</th>\n                                    <th style=\"min-width: 90px;\">Action</th>\n                                </tr>\n                            </thead>\n\n                            <tbody>\n                                <tr class=\"active\">\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-2.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Gorrod Kazu\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">GorrodKazu@dayrep.com</a>\n                                    </td>\n\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>356</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        01/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n                                <tr>\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-1.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Ellal Kiosan\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">EllalKiosan@jourrapide.com</a>\n                                    </td>\n\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>568</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        01/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n                                <tr>\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-3.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Mork'Ra Khard\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">MorkRaKhard@teleworm.us</a>\n                                    </td>\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>201</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        12/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n                                <tr>\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-4.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Kathrin Propst\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">KathrinPropst@teleworm.us</a>\n                                    </td>\n\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>56</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        14/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n                                <tr>\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-5.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Swen Kunze\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">SwenKunze@rhyta.com</a>\n                                    </td>\n\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>356</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        20/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n                                <tr>\n                                    <td>\n                                        <img src=\"~/theme2-assets/images/users/avatar-6.jpg\" alt=\"contact-img\" title=\"contact-img\" class=\"rounded-circle thumb-sm\" />\n                                    </td>\n\n                                    <td>\n                                        Sabine Kuester\n                                    </td>\n\n                                    <td>\n                                        <a href=\"#\">SabineKuester@jourrapide.com</a>\n                                    </td>\n\n                                    <td>\n                                        <b><a href=\"\" class=\"text-dark\"><b>956</b></a> </b>\n                                    </td>\n\n                                    <td>\n                                        24/11/2003\n                                    </td>\n                                    <td>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-edit\"></i></a>\n                                        <a href=\"#\" class=\"table-action-btn\"><i class=\"md md-close\"></i></a>\n                                    </td>\n                                </tr>\n\n\n                            </tbody>\n                        </table>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div> <!-- end col -->\n\n</div>\n\n@section Scripts{\n    <!-- Counterup  -->\n    <script src=\"~/theme2-assets/plugins/waypoints/lib/jquery.waypoints.min.js\"></script>\n    <script src=\"~/theme2-assets/plugins/counterup/jquery.counterup.min.js\"></script>\n\n    <script src=\"~/theme2-assets/plugins/morris/morris.min.js\"></script>\n    <script src=\"~/theme2-assets/plugins/raphael/raphael-min.js\"></script>\n\n    <script src=\"~/theme2-assets/pages/jquery.dashboard_4.js\"></script>\n}"
  },
  {
    "path": "src/Pos.WebApplication/Controllers/AuthController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing Pos.WebApplication.Models;\n\nnamespace Pos.WebApplication.Controllers\n{\n    public class AuthController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n\n        public IActionResult Privacy()\n        {\n            return View();\n        }\n\n        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\n        public IActionResult Error()\n        {\n            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing Pos.WebApplication.Models;\n\nnamespace Pos.WebApplication.Controllers\n{\n    public class HomeController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n\n        public IActionResult Privacy()\n        {\n            return View();\n        }\n\n        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\n        public IActionResult Error()\n        {\n            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Dockerfile",
    "content": "FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base\nWORKDIR /app\nEXPOSE 80\n\nFROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build\nWORKDIR /src\nCOPY [\"Pos.WebApplication/Pos.WebApplication.csproj\", \"Pos.WebApplication/\"]\nRUN dotnet restore \"Pos.WebApplication/Pos.WebApplication.csproj\"\nCOPY . .\nWORKDIR \"/src/Pos.WebApplication\"\nRUN dotnet build \"Pos.WebApplication.csproj\" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish \"Pos.WebApplication.csproj\" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"dotnet\", \"Pos.WebApplication.dll\"]"
  },
  {
    "path": "src/Pos.WebApplication/HealthChecks/CustomerServicesHc.cs",
    "content": "﻿using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\nusing Microsoft.IdentityModel.Protocols;\nusing Pos.WebApplication.Utilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.HealthChecks\n{\n    public class CustomerServicesHc : IHealthCheck\n    {\n        private readonly IConfiguration _configuration;\n        private readonly IHttpCheck _httpCheck;\n        public CustomerServicesHc(IHttpCheck httpCheck, IConfiguration configuration)\n        {\n            _httpCheck = httpCheck;\n            _configuration = configuration;\n        }\n\n        public async Task<HealthCheckResult> CheckHealthAsync(\n            HealthCheckContext context,\n            CancellationToken cancellationToken = new CancellationToken())\n            => await _httpCheck.CheckHealthAsync(_configuration[\"api:customer\"] + \"values/\");\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/HealthChecks/OrderServicesHc .cs",
    "content": "﻿using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\nusing Pos.WebApplication.Utilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.HealthChecks\n{\n    public class OrderServicesHc : IHealthCheck\n    {\n        private readonly IConfiguration _configuration;\n        private readonly IHttpCheck _httpCheck;\n        public OrderServicesHc(IHttpCheck httpCheck, IConfiguration configuration)\n        {\n            _httpCheck = httpCheck;\n            _configuration = configuration;\n        }\n\n        public async Task<HealthCheckResult> CheckHealthAsync(\n            HealthCheckContext context,\n            CancellationToken cancellationToken = new CancellationToken())\n            => await _httpCheck.CheckHealthAsync(_configuration[\"api:order\"] + \"values/\");\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/HealthChecks/ProductServicesHc.cs",
    "content": "﻿using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\nusing Microsoft.IdentityModel.Protocols;\nusing Pos.WebApplication.Utilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.HealthChecks\n{\n    public class ProductServicesHc : IHealthCheck\n    {\n        private readonly IConfiguration _configuration;\n        private readonly IHttpCheck _httpCheck;\n        public ProductServicesHc(IHttpCheck httpCheck, IConfiguration configuration)\n        {\n            _httpCheck = httpCheck;\n            _configuration = configuration;\n        }\n\n        public async Task<HealthCheckResult> CheckHealthAsync(\n            HealthCheckContext context,\n            CancellationToken cancellationToken = new CancellationToken())\n            => await _httpCheck.CheckHealthAsync(_configuration[\"api:product\"] + \"values/\");\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/HealthChecks/ReportServicesHc.cs",
    "content": "﻿using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\nusing Microsoft.IdentityModel.Protocols;\nusing Pos.WebApplication.Utilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.HealthChecks\n{\n    public class ReportServicesHc : IHealthCheck\n    {\n        private readonly IConfiguration _configuration;\n        private readonly IHttpCheck _httpCheck;\n        public ReportServicesHc(IHttpCheck httpCheck, IConfiguration configuration)\n        {\n            _httpCheck = httpCheck;\n            _configuration = configuration;\n        }\n\n        public async Task<HealthCheckResult> CheckHealthAsync(\n            HealthCheckContext context,\n            CancellationToken cancellationToken = new CancellationToken())\n            => await _httpCheck.CheckHealthAsync(_configuration[\"api:report\"] + \"values/\");\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Models/ErrorViewModel.cs",
    "content": "using System;\n\nnamespace Pos.WebApplication.Models\n{\n    public class ErrorViewModel\n    {\n        public string RequestId { get; set; }\n\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Models/MenuItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.Models\n{\n    public class MenuItem\n    {\n        public Guid Id { get; set; }\n        public Guid? Parent { get; set; }\n        public string Title { get; set; }\n        public string Icon { get; set; }\n        public string Url { get; set; }\n        public int Position { get; set; }\n        public bool OpenInNewWindow { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Pos.WebApplication.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.2</TargetFramework>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerComposeProjectPath>..\\docker-compose.dcproj</DockerComposeProjectPath>\n  </PropertyGroup>\n\n\n  <ItemGroup>\n    <PackageReference Include=\"AspNetCore.HealthChecks.SqlServer\" Version=\"2.2.1\" />\n    <PackageReference Include=\"AspNetCore.HealthChecks.UI\" Version=\"2.2.34\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.App\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Razor.Design\" Version=\"2.2.0\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.9.5\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Web.CodeGeneration.Design\" Version=\"2.2.4\" />\n  </ItemGroup>\n\n\n  <ItemGroup>\n    <Folder Include=\"Views\\Shared\\Components\\Header\\\" />\n    <Folder Include=\"Views\\Shared\\Components\\Menu\\\" />\n    <Folder Include=\"Views\\Shared\\Components\\RightSidebar\\\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Pos.WebApplication/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\n\nnamespace Pos.WebApplication\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateWebHostBuilder(args).Build().Run();\n        }\n\n        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>\n            WebHost.CreateDefaultBuilder(args)\n                .UseStartup<Startup>();\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:62039\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Pos.WebApplication\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"http://localhost:5000\"\n    },\n    \"Docker\": {\n      \"commandName\": \"Docker\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"{Scheme}://{ServiceHost}:{ServicePort}\",\n      \"environmentVariables\": {},\n      \"httpPort\": 62040\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/Startup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing HealthChecks.UI.Client;\nusing HealthChecks.UI.Configuration;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Diagnostics.HealthChecks;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Pos.WebApplication\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.Configure<CookiePolicyOptions>(options =>\n            {\n                // This lambda determines whether user consent for non-essential cookies is needed for a given request.\n                options.CheckConsentNeeded = context => true;\n                options.MinimumSameSitePolicy = SameSiteMode.None;\n            });\n\n            services.InitBootsraper(Configuration)\n                .SetHealtCheck(Configuration);\n\n            services.AddHealthChecksUI();\n\n            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/Home/Error\");\n            }\n\n            app.UseStaticFiles();\n            app.UseCookiePolicy();\n\n            app.UseMvc(routes =>\n            {\n                routes.MapRoute(                    \n                    name: \"areas\",\n                    template: \"{area:exists}/{controller=Home}/{action=Index}\");\n\n                routes.MapRoute(\n                    name: \"default\",\n                    template: \"{controller=Auth}/{action=Index}/{id?}\");\n            });\n           \n\n            // HealthCheck middleware\n            app.UseHealthChecks(\"/hc\", new HealthCheckOptions()\n            {\n                Predicate = _ => true,\n                ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse\n            });\n            app.UseHealthChecksUI(delegate (Options options)\n            {\n                options.UIPath = \"/hc-ui\";\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Utilities/HttpCheck.cs",
    "content": "﻿using Microsoft.Extensions.Diagnostics.HealthChecks;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.Utilities\n{\n    public class HttpCheck : IHttpCheck\n    {\n        public async Task<HealthCheckResult> CheckHealthAsync(string url)\n        {\n            using (HttpClient client = new HttpClient())\n            {\n                try\n                {\n                    var response = await client.GetAsync(url);\n\n                    if (!response.IsSuccessStatusCode)\n                        throw new Exception(\"Url not responding with 200 OK\");\n                }\n                catch (Exception)\n                {\n                    return await Task.FromResult(HealthCheckResult.Unhealthy(\"Fail\"));\n                }\n            }\n            return await Task.FromResult(HealthCheckResult.Healthy(\"Connected\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Utilities/IHttpCheck.cs",
    "content": "﻿using Microsoft.Extensions.Diagnostics.HealthChecks;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.Utilities\n{\n    public interface IHttpCheck\n    {\n        Task<HealthCheckResult> CheckHealthAsync(string url);\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/FooterViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class FooterViewComponent : ViewComponent\n    {\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/HeaderViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class HeaderViewComponent : ViewComponent\n    {\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/MenuViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Pos.WebApplication.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class MenuViewComponent : ViewComponent\n    {\n        private readonly List<MenuItem> _menus;\n\n        public MenuViewComponent()\n        {\n\n            _menus = new List<MenuItem>\n            {\n                new MenuItem { Id = Guid.NewGuid(), Position = 1, Title = \"Dashboard\", Url = \"/Home\", Icon = \"md md-dashboard\" },\n                new MenuItem { Id = Guid.NewGuid(), Position = 2, Title = \"Master\", Url = \"/Master\", Icon = \"md md-group\" },\n                new MenuItem { Id = Guid.NewGuid(), Position = 3, Title = \"Order\", Url = \"/Order/Item\", Icon = \"md md-shopping-cart\" },\n                new MenuItem { Id = Guid.NewGuid(), Position = 4, Title = \"Report\", Url = \"/Reports/Transaction\", Icon = \"md md-today\" },                \n            };\n\n            _menus.Add(new MenuItem { Id = Guid.NewGuid(), Position = 1, Title = \"Product\", Url = \"/Master/Product\", Icon = \"md md-account-child\", Parent = _menus.Where(x => x.Title.Contains(\"Master\")).SingleOrDefault().Id });\n            _menus.Add(new MenuItem { Id = Guid.NewGuid(), Position = 2, Title = \"Product Category\", Url = \"/Master/ProductCategory\", Icon = \"md md-account-child\", Parent = _menus.Where(x => x.Title.Contains(\"Master\")).SingleOrDefault().Id });\n            _menus.Add(new MenuItem { Id = Guid.NewGuid(), Position = 3, Title = \"Customer\", Url = \"/Master/Customer\", Icon = \"md md-account-child\", Parent = _menus.Where(x => x.Title.Contains(\"Master\")).SingleOrDefault().Id });\n\n\n\n\n        }\n\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\", _menus));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/RightSidebarViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class RightSidebarViewComponent : ViewComponent\n    {\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/ThemeScriptsViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class ThemeScriptsViewComponent : ViewComponent\n    {\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/ViewComponents/TopBarViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Pos.WebApplication.ViewComponents\n{\n    public class TopBarViewComponent : ViewComponent\n    {\n        public async Task<IViewComponentResult> InvokeAsync()\n        {\n            return await Task.FromResult((IViewComponentResult)View(\"Default\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/Auth/Index.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Login\";\n    Layout = \"~/Views/Shared/_LayoutAuth.cshtml\";\n}\n\n<div class=\"card-box\">\n    <div class=\"panel-heading\">\n        <h4 class=\"text-center\"> Sign In to <strong>POS</strong></h4>\n    </div>\n\n    <div class=\"p-20\">\n        <form class=\"form-horizontal m-t-20\" action=\"/Home\">\n\n            <div class=\"form-group-custom\">\n                <input type=\"text\" id=\"user-name\" required=\"required\" />\n                <label class=\"control-label\" for=\"user-name\">Username</label><i class=\"bar\"></i>\n            </div>\n\n            <div class=\"form-group-custom\">\n                <input type=\"password\" id=\"user-password\" required=\"required\" />\n                <label class=\"control-label\" for=\"user-password\">Password</label><i class=\"bar\"></i>\n            </div>\n\n            <div class=\"form-group \">\n                <div class=\"col-12\">\n                    <div class=\"checkbox checkbox-primary\">\n                        <input id=\"checkbox-signup\" type=\"checkbox\">\n                        <label for=\"checkbox-signup\"> Remember me </label>\n                    </div>\n\n                </div>\n            </div>\n\n            <div class=\"form-group text-center m-t-20\">\n                <div class=\"col-12\">\n                    <button class=\"btn btn-purple btn-block text-uppercase waves-effect waves-light\" type=\"submit\">\n                        Log In\n                    </button>\n                </div>\n            </div>\n\n            <div class=\"form-group m-t-20 m-b-0\">\n                <div class=\"col-12\">\n                    <a href=\"page-recoverpw.html\" class=\"text-dark\"><i class=\"fa fa-lock m-r-5\"></i> Forgot your password?</a>\n                </div>\n            </div>\n\n            <div class=\"form-group m-t-40 m-b-0\">\n                <div class=\"col-12 text-center\">\n                    <h5 class=\"font-18\"><b>Sign in with</b></h5>\n                </div>\n            </div>\n\n            <div class=\"form-group m-b-0 text-center\">\n                <div class=\"col-12\">\n                    <button type=\"button\" class=\"btn btn-sm btn-facebook waves-effect waves-light m-t-20\">\n                        <i class=\"fa fa-facebook m-r-5\"></i> Facebook\n                    </button>\n\n                    <button type=\"button\" class=\"btn btn-sm btn-twitter waves-effect waves-light m-t-20\">\n                        <i class=\"fa fa-twitter m-r-5\"></i> Twitter\n                    </button>\n\n                    <button type=\"button\" class=\"btn btn-sm btn-googleplus waves-effect waves-light m-t-20\">\n                        <i class=\"fa fa-google-plus m-r-5\"></i> Google+\n                    </button>\n                </div>\n            </div>\n        </form>\n\n    </div>\n</div>\n<div class=\"row\">\n    <div class=\"col-12 text-center\">\n        <p class=\"text-white\">\n            Don't have an account? <a href=\"page-register.html\" class=\"text-white m-l-5\"><b>Sign Up</b></a>\n        </p>\n    </div>\n</div>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Home/Index.cshtml",
    "content": "﻿@section Styles{\n    \n}\n\n\n<!-- Page-Title -->\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"page-header-box\">\n            <ol class=\"breadcrumb pull-right mb-0\">\n                <li class=\"breadcrumb-item\"><a href=\"#\">Pos</a></li>                \n                <li class=\"breadcrumb-item active\">Dashboard</li>\n            </ol>\n            <h4 class=\"page-title\">Dashboard</h4>\n            <div class=\"clearfix\"></div>\n        </div>\n\n    </div>\n</div>\n\n\n<div class=\"row\">\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <div class=\"bar-widget\">\n                <div class=\"table-box\">\n                    <div class=\"table-detail\">\n                        <div class=\"iconbox bg-info\">\n                            <i class=\"icon-layers\"></i>\n                        </div>\n                    </div>\n\n                    <div class=\"table-detail\">\n                        <h4 class=\"m-t-0 m-b-5\"><b>12560</b></h4>\n                        <p class=\"text-muted m-b-0 m-t-0\">Total Revenue</p>\n                    </div>\n                    <div class=\"table-detail text-right\">\n                        <span data-plugin=\"peity-bar\" data-colors=\"#34d3eb,#ebeff2\" data-width=\"120\" data-height=\"45\">5,3,9,6,5,9,7,3,5,2,9,7,2,1</span>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <div class=\"bar-widget\">\n                <div class=\"table-box\">\n                    <div class=\"table-detail\">\n                        <div class=\"iconbox bg-custom\">\n                            <i class=\"icon-layers\"></i>\n                        </div>\n                    </div>\n\n                    <div class=\"table-detail\">\n                        <h4 class=\"m-t-0 m-b-5\"><b>356</b></h4>\n                        <p class=\"text-muted m-b-0 m-t-0\">Ave. weekly Sales</p>\n                    </div>\n                    <div class=\"table-detail text-right\">\n                        <span data-plugin=\"peity-pie\" data-colors=\"#5fbeaa,#ebeff2\" data-width=\"50\" data-height=\"45\">1/5</span>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <div class=\"bar-widget\">\n                <div class=\"table-box\">\n                    <div class=\"table-detail\">\n                        <div class=\"iconbox bg-danger\">\n                            <i class=\"icon-layers\"></i>\n                        </div>\n                    </div>\n\n                    <div class=\"table-detail\">\n                        <h4 class=\"m-t-0 m-b-5\"><b>96562</b></h4>\n                        <p class=\"text-muted m-b-0 m-t-0\">Visiters</p>\n                    </div>\n                    <div class=\"table-detail text-right\">\n                        <span data-plugin=\"peity-donut\" data-colors=\"#f05050,#ebeff2\" data-width=\"50\" data-height=\"45\">1/5</span>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n\n\n<div class=\"row\">\n\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <h4 class=\"text-dark header-title m-t-0 m-b-30\">Daily Sales</h4>\n\n            <div class=\"widget-chart text-center\">\n                <div id=\"sparkline3\"></div>\n                <ul class=\"list-inline m-t-15\">\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Target</h5>\n                        <h4 class=\"m-b-0\">$1000</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last week</h5>\n                        <h4 class=\"m-b-0\">$523</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last Month</h5>\n                        <h4 class=\"m-b-0\">$965</h4>\n                    </li>\n                </ul>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <h4 class=\"text-dark  header-title m-t-0 m-b-30\">Monthly Sales</h4>\n\n            <div class=\"widget-chart text-center\">\n                <div id=\"sparkline1\"></div>\n                <ul class=\"list-inline m-t-15\">\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Target</h5>\n                        <h4 class=\"m-b-0\">$1000</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last week</h5>\n                        <h4 class=\"m-b-0\">$523</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last Month</h5>\n                        <h4 class=\"m-b-0\">$965</h4>\n                    </li>\n                </ul>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"col-lg-12 col-xl-4\">\n        <div class=\"card-box\">\n            <h4 class=\"text-dark  header-title m-t-0 m-b-30\">Weekly Sales</h4>\n\n            <div class=\"widget-chart text-center\">\n                <div id=\"sparkline2\"></div>\n                <ul class=\"list-inline m-t-15\">\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Target</h5>\n                        <h4 class=\"m-b-0\">$1000</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last week</h5>\n                        <h4 class=\"m-b-0\">$523</h4>\n                    </li>\n                    <li>\n                        <h5 class=\"text-muted m-t-20\">Last Month</h5>\n                        <h4 class=\"m-b-0\">$965</h4>\n                    </li>\n                </ul>\n            </div>\n        </div>\n\n    </div>\n\n</div>\n\n<!-- end row -->\n\n<div class=\"row\">\n\n    <div class=\"col-12\">\n\n        <div class=\"portlet\">\n            <!-- /primary heading -->\n            <div class=\"portlet-heading\">\n                <h3 class=\"portlet-title text-dark text-uppercase\">\n                    Projects\n                </h3>\n                <div class=\"portlet-widgets\">\n                    <a href=\"javascript:;\" data-toggle=\"reload\"><i class=\"ion-refresh\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a data-toggle=\"collapse\" data-parent=\"#accordion1\" href=\"#portlet2\"><i class=\"ion-minus-round\"></i></a>\n                    <span class=\"divider\"></span>\n                    <a href=\"#\" data-toggle=\"remove\"><i class=\"ion-close-round\"></i></a>\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div id=\"portlet2\" class=\"panel-collapse collapse show\">\n                <div class=\"portlet-body\">\n                    <div class=\"table-responsive\">\n                        <table class=\"table\">\n                            <thead>\n                                <tr>\n                                    <th>#</th>\n                                    <th>Project Name</th>\n                                    <th>Start Date</th>\n                                    <th>Due Date</th>\n                                    <th>Status</th>\n                                    <th>Assign</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                <tr>\n                                    <td>1</td>\n                                    <td>Ubold Admin v1</td>\n                                    <td>01/01/2015</td>\n                                    <td>26/04/2015</td>\n                                    <td><span class=\"label label-info\">Released</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n                                <tr>\n                                    <td>2</td>\n                                    <td>Ubold Frontend v1</td>\n                                    <td>01/01/2015</td>\n                                    <td>26/04/2015</td>\n                                    <td><span class=\"label label-success\">Released</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n                                <tr>\n                                    <td>3</td>\n                                    <td>Ubold Admin v1.1</td>\n                                    <td>01/05/2015</td>\n                                    <td>10/05/2015</td>\n                                    <td><span class=\"label label-pink\">Pending</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n                                <tr>\n                                    <td>4</td>\n                                    <td>Ubold Frontend v1.1</td>\n                                    <td>01/01/2015</td>\n                                    <td>31/05/2015</td>\n                                    <td><span class=\"label label-purple\">Work in Progress</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n                                <tr>\n                                    <td>5</td>\n                                    <td>Ubold Admin v1.3</td>\n                                    <td>01/01/2015</td>\n                                    <td>31/05/2015</td>\n                                    <td><span class=\"label label-warning\">Coming soon</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n\n                                <tr>\n                                    <td>6</td>\n                                    <td>Ubold Admin v1.3</td>\n                                    <td>01/01/2015</td>\n                                    <td>31/05/2015</td>\n                                    <td><span class=\"label label-primary\">Coming soon</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n\n                                <tr>\n                                    <td>7</td>\n                                    <td>Ubold Admin v1.3</td>\n                                    <td>01/01/2015</td>\n                                    <td>31/05/2015</td>\n                                    <td><span class=\"label label-info\">Cool</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n\n                                <tr>\n                                    <td>8</td>\n                                    <td>Ubold Admin v1.3</td>\n                                    <td>01/01/2015</td>\n                                    <td>31/05/2015</td>\n                                    <td><span class=\"label label-warning\">Coming soon</span></td>\n                                    <td>Coderthemes</td>\n                                </tr>\n\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div> <!-- end col -->\n\n</div>\n\n<!-- end row -->\n\n@section Scripts{   \n}"
  },
  {
    "path": "src/Pos.WebApplication/Views/Home/Privacy.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Privacy Policy\";\n}\n<h1>@ViewData[\"Title\"]</h1>\n\n<p>Use this page to detail your site's privacy policy.</p>\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/Footer/Default.cshtml",
    "content": "﻿<footer class=\"footer text-right\">\n    &copy; 2019. All rights reserved.\n</footer>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/Header/Default.cshtml",
    "content": "﻿<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"description\" content=\"A fully featured admin theme which can be used to build CRM, CMS, etc.\">\n<meta name=\"author\" content=\"Coderthemes\">\n\n<link rel=\"shortcut icon\" href=\"~/theme2-assets/images/favicon.ico\">\n\n<title>POS</title>\n\n<link rel=\"stylesheet\" href=\"~/theme2-assets/plugins/morris/morris.css\">\n<link href=\"~/theme2-assets/plugins/bootstrap-sweetalert/sweet-alert.css\" rel=\"stylesheet\" type=\"text/css\">\n\n\n<link href=\"~/theme2-assets/css/bootstrap.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n<link href=\"~/theme2-assets/css/icons.css\" rel=\"stylesheet\" type=\"text/css\" />\n<link href=\"~/theme2-assets/css/style.css\" rel=\"stylesheet\" type=\"text/css\" />\n\n<script src=\"~/theme2-assets/js/modernizr.min.js\"></script>   "
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/Menu/Default.cshtml",
    "content": "﻿@model IEnumerable<Pos.WebApplication.Models.MenuItem>\n\n<div class=\"left side-menu\">\n    <div class=\"sidebar-inner slimscrollleft\">\n        <!--- Divider -->\n        <div id=\"sidebar-menu\">\n            <ul>\n                <li class=\"text-muted menu-title\">Navigation</li>\n                @foreach (var menuItem in Model.Where(x => !x.Parent.HasValue).OrderBy(x => x.Position))\n                {\n                    var url = menuItem.Url;\n\n                    var hasParent = Model.Where(x => x.Parent == menuItem.Id);\n\n                    if (hasParent.Any())\n                    {\n                        <li class=\"has_sub\">\n                            <a href=\"javascript:void(0);\" class=\"waves-effect\"><i class=\"@menuItem.Icon\"></i> <span> @menuItem.Title </span> <span class=\"menu-arrow\"></span></a>\n                            <ul class=\"list-unstyled\">\n                                @foreach (var subMenu in hasParent.OrderBy(x => x.Position))\n                                {\n                                    <li><a href=\"@subMenu.Url\">@subMenu.Title</a></li>\n                                }\n\n                            </ul>\n                        </li>\n                    }\n                    else\n                    {\n\n                        <li>\n                            <a href=\"@url\" class=\"waves-effect\"><i class=\"@menuItem.Icon\"></i> <span> @menuItem.Title </span></a>\n                        </li>\n                    }\n                }\n            </ul>\n            <div class=\"clearfix\"></div>\n        </div>\n        <div class=\"clearfix\"></div>\n    </div>\n</div>\n\n\n<!-- Left Sidebar End -->"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/RightSidebar/Default.cshtml",
    "content": "﻿<div class=\"side-bar right-bar nicescroll\">\n    <h4 class=\"text-center\">Chat</h4>\n    <div class=\"contact-list nicescroll\">\n        <ul class=\"list-group contacts-list\">\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-1.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Chadengle</span>\n                    <i class=\"fa fa-circle online\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-2.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Tomaslau</span>\n                    <i class=\"fa fa-circle online\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-3.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Stillnotdavid</span>\n                    <i class=\"fa fa-circle online\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-4.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Kurafire</span>\n                    <i class=\"fa fa-circle online\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-5.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Shahedk</span>\n                    <i class=\"fa fa-circle away\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-6.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Adhamdannaway</span>\n                    <i class=\"fa fa-circle away\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-7.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Ok</span>\n                    <i class=\"fa fa-circle away\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-8.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Arashasghari</span>\n                    <i class=\"fa fa-circle offline\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-9.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Joshaustin</span>\n                    <i class=\"fa fa-circle offline\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n            <li class=\"list-group-item\">\n                <a href=\"#\">\n                    <div class=\"avatar\">\n                        <img src=\"~/theme2-assets/images/users/avatar-10.jpg\" alt=\"\">\n                    </div>\n                    <span class=\"name\">Sortino</span>\n                    <i class=\"fa fa-circle offline\"></i>\n                </a>\n                <span class=\"clearfix\"></span>\n            </li>\n        </ul>\n    </div>\n</div>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/ThemeScripts/Default.cshtml",
    "content": "﻿<script>\n    var resizefunc = [];\n</script>\n\n<!-- jQuery  -->\n<script src=\"~/theme2-assets/js/jquery.min.js\"></script>\n<script src=\"~/theme2-assets/js/tether.min.js\"></script><!-- Tether for Bootstrap -->\n<script src=\"~/theme2-assets/js/bootstrap.min.js\"></script>\n<script src=\"~/theme2-assets/js/detect.js\"></script>\n<script src=\"~/theme2-assets/js/fastclick.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.slimscroll.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.blockUI.js\"></script>\n<script src=\"~/theme2-assets/js/waves.js\"></script>\n<script src=\"~/theme2-assets/js/wow.min.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.nicescroll.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.scrollTo.min.js\"></script>\n\n<!-- jQuery  -->\n<script src=\"~/theme2-assets/plugins/moment/moment.js\"></script>\n<script src=\"~/theme2-assets/plugins/raphael/raphael-min.js\"></script>\n<script src=\"~/theme2-assets/plugins/bootstrap-sweetalert/sweet-alert.min.js\"></script>\n<script src=\"~/theme2-assets/plugins/peity/jquery.peity.min.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.core.js\"></script>\n<script src=\"~/theme2-assets/js/jquery.app.js\"></script>\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Components/TopBar/Default.cshtml",
    "content": "﻿<div class=\"topbar\">\n\n    <!-- LOGO -->\n    <div class=\"topbar-left\">\n        <div class=\"text-center\">\n            <a href=\"/Home\" class=\"logo\"><i class=\"icon-magnet icon-c-logo\"></i><span>POS</span></a>\n            <!-- Image Logo here -->\n            <!--<a href=\"index.html\" class=\"logo\">-->\n            <!--<i class=\"icon-c-logo\"> <img src=\"~/theme2-assets/images/logo_sm.png\" height=\"42\"/> </i>-->\n            <!--<span><img src=\"~/theme2-assets/images/logo_light.png\" height=\"20\"/></span>-->\n            <!--</a>-->\n        </div>\n    </div>\n\n    <!-- Button mobile view to collapse sidebar menu -->\n    <nav class=\"navbar-custom\">\n\n        <ul class=\"list-inline float-right mb-0\">\n            <li class=\"list-inline-item dropdown notification-list\">\n                <a class=\"nav-link dropdown-toggle arrow-none waves-light waves-effect\" data-toggle=\"dropdown\" href=\"#\" role=\"button\"\n                   aria-haspopup=\"false\" aria-expanded=\"false\">\n                    <i class=\"dripicons-bell noti-icon\"></i>\n                    <span class=\"badge badge-pink noti-icon-badge\">4</span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right dropdown-arrow dropdown-lg\" aria-labelledby=\"Preview\">\n                    <!-- item-->\n                    <div class=\"dropdown-item noti-title\">\n                        <h5><span class=\"badge badge-danger float-right\">5</span>Notification</h5>\n                    </div>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <div class=\"notify-icon bg-success\"><i class=\"icon-bubble\"></i></div>\n                        <p class=\"notify-details\">Robert S. Taylor commented on Admin<small class=\"text-muted\">1 min ago</small></p>\n                    </a>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <div class=\"notify-icon bg-info\"><i class=\"icon-user\"></i></div>\n                        <p class=\"notify-details\">New user registered.<small class=\"text-muted\">1 min ago</small></p>\n                    </a>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <div class=\"notify-icon bg-danger\"><i class=\"icon-like\"></i></div>\n                        <p class=\"notify-details\">Carlos Crouch liked <b>Admin</b><small class=\"text-muted\">1 min ago</small></p>\n                    </a>\n\n                    <!-- All-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item notify-all\">\n                        View All\n                    </a>\n\n                </div>\n            </li>\n\n            <li class=\"list-inline-item notification-list hidden-xs-down\">\n                <a class=\"nav-link waves-light waves-effect\" href=\"#\" id=\"btn-fullscreen\">\n                    <i class=\"dripicons-expand noti-icon\"></i>\n                </a>\n            </li>\n\n            <li class=\"list-inline-item notification-list\">\n                <a class=\"nav-link right-bar-toggle waves-light waves-effect\" href=\"#\">\n                    <i class=\"dripicons-message noti-icon\"></i>\n                </a>\n            </li>\n\n            <li class=\"list-inline-item dropdown notification-list\">\n                <a class=\"nav-link dropdown-toggle waves-effect waves-light nav-user\" data-toggle=\"dropdown\" href=\"#\" role=\"button\"\n                   aria-haspopup=\"false\" aria-expanded=\"false\">\n                    <img src=\"~/theme2-assets/images/users/avatar-1.jpg\" alt=\"user\" class=\"rounded-circle\">\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right profile-dropdown \" aria-labelledby=\"Preview\">\n                    <!-- item-->\n                    <div class=\"dropdown-item noti-title\">\n                        <h5 class=\"text-overflow\"><small>Welcome ! John</small> </h5>\n                    </div>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <i class=\"zmdi zmdi-account-circle\"></i> <span>Profile</span>\n                    </a>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <i class=\"zmdi zmdi-settings\"></i> <span>Settings</span>\n                    </a>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <i class=\"zmdi zmdi-lock-open\"></i> <span>Lock Screen</span>\n                    </a>\n\n                    <!-- item-->\n                    <a href=\"javascript:void(0);\" class=\"dropdown-item notify-item\">\n                        <i class=\"zmdi zmdi-power\"></i> <span>Logout</span>\n                    </a>\n\n                </div>\n            </li>\n\n        </ul>\n\n        <ul class=\"list-inline menu-left mb-0\">\n            <li class=\"float-left\">\n                <button class=\"button-menu-mobile open-left waves-light waves-effect\">\n                    <i class=\"dripicons-menu\"></i>\n                </button>\n            </li>\n            <li class=\"hide-phone app-search\">\n                <form role=\"search\" class=\"\">\n                    <input type=\"text\" placeholder=\"Search...\" class=\"form-control\">\n                    <a href=\"\"><i class=\"fa fa-search\"></i></a>\n                </form>\n            </li>\n        </ul>\n\n    </nav>\n\n</div>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/Error.cshtml",
    "content": "﻿@model ErrorViewModel\n@{\n    ViewData[\"Title\"] = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n@if (Model.ShowRequestId)\n{\n    <p>\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\n    </p>\n}\n\n<h3>Development Mode</h3>\n<p>\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\n</p>\n<p>\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\n    It can result in displaying sensitive information from exceptions to end users.\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\n    and restarting the app.\n</p>\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/_CookieConsentPartial.cshtml",
    "content": "﻿@using Microsoft.AspNetCore.Http.Features\n\n@{\n    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();\n    var showBanner = !consentFeature?.CanTrack ?? false;\n    var cookieString = consentFeature?.CreateConsentCookie();\n}\n\n@if (showBanner)\n{\n    <div id=\"cookieConsent\" class=\"alert alert-info alert-dismissible fade show\" role=\"alert\">\n        Use this space to summarize your privacy and cookie use policy. <a asp-area=\"\" asp-controller=\"Home\" asp-action=\"Privacy\">Learn More</a>.\n        <button type=\"button\" class=\"accept-policy close\" data-dismiss=\"alert\" aria-label=\"Close\" data-cookie-string=\"@cookieString\">\n            <span aria-hidden=\"true\">Accept</span>\n        </button>\n    </div>\n    <script>\n        (function () {\n            var button = document.querySelector(\"#cookieConsent button[data-cookie-string]\");\n            button.addEventListener(\"click\", function (event) {\n                document.cookie = button.dataset.cookieString;\n            }, false);\n        })();\n    </script>\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n\n<head>\n    @(await Component.InvokeAsync(\"Header\"))\n    @RenderSection(\"Styles\", required: false)\n</head>\n\n<body class=\"fixed-left\">\n    <!-- Loader -->\n    <div id=\"preloader\">\n        <div id=\"status\">\n            <div class=\"spinner\">\n                <div class=\"spinner-wrapper\">\n                    <div class=\"rotator\">\n                        <div class=\"inner-spin\"></div>\n                        <div class=\"inner-spin\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Begin page -->\n    <div id=\"wrapper\">\n        <!-- Top Bar Start -->\n        @(await Component.InvokeAsync(\"TopBar\"))\n        <!-- Top Bar End -->\n        <!-- ========== Left Sidebar Start ========== -->\n        @(await Component.InvokeAsync(\"Menu\"))\n        <!-- Left Sidebar End -->\n        <!-- ============================================================== -->\n        <!-- Start right Content here -->\n        <!-- ============================================================== -->\n        <div class=\"content-page\">\n            <!-- Start content -->\n            <div class=\"content\">\n                <div class=\"container\">\n                    @RenderBody()\n                </div> <!-- container -->\n            </div> <!-- content -->\n        </div>\n        <!-- end right Content here -->\n\n        @(await Component.InvokeAsync(\"Footer\"))\n        @(await Component.InvokeAsync(\"RightSidebar\"))\n    </div>\n    <!-- END wrapper -->\n    @(await Component.InvokeAsync(\"ThemeScripts\"))\n    @RenderSection(\"Scripts\", required: false)\n</body>\n</html>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/_LayoutAuth.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n@(await Component.InvokeAsync(\"Header\"))\n<body>\n\n    <div class=\"account-pages\"></div>\n    <div class=\"clearfix\"></div>\n\n    <div class=\"wrapper-page\">\n        @RenderBody()\n    </div>\n    @(await Component.InvokeAsync(\"ThemeScripts\"))\n    @RenderSection(\"Scripts\", required: false)\n</body>\n</html>"
  },
  {
    "path": "src/Pos.WebApplication/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "<environment include=\"Development\">\n    <script src=\"~/lib/jquery-validation/dist/jquery.validate.js\"></script>\n    <script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js\"></script>\n</environment>\n<environment exclude=\"Development\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation/dist/jquery.validate.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator\"\n            crossorigin=\"anonymous\"\n            integrity=\"sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=\">\n    </script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive\"\n            crossorigin=\"anonymous\"\n            integrity=\"sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=\">\n    </script>\n</environment>\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/_ViewImports.cshtml",
    "content": "﻿@using Pos.WebApplication\n@using Pos.WebApplication.Models\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n"
  },
  {
    "path": "src/Pos.WebApplication/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/appsettings.Development.json",
    "content": "{\n  \"api\": {\n    \"product\": \"http://pos.gateway/api-product/\",\n    \"customer\": \"http://pos.gateway/api-customer/\",\n    \"order\": \"http://pos.gateway/api-order/\",\n    \"report\": \"http://pos.gateway/api-report/\"\n  },\n  \"HealthChecksUI\": {\n    \"HealthChecks\": [\n      {\n        \"Name\": \"Health Check Service :: POS\",\n        \"Uri\": \"http://pos.webapplication/hc\"\n      }\n    ],\n    \"EvaluationTimeOnSeconds\": 5,\n    \"MinimumSecondsBetweenFailureNotifications\": 60\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/css/site.css",
    "content": "﻿/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\nfor details on configuring this project to bundle and minify static web assets. */\n\na.navbar-brand {\n  white-space: normal;\n  text-align: center;\n  word-break: break-all;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  font-size: 14px;\n}\n@media (min-width: 768px) {\n  html {\n    font-size: 16px;\n  }\n}\n\n.border-top {\n  border-top: 1px solid #e5e5e5;\n}\n.border-bottom {\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.box-shadow {\n  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);\n}\n\nbutton.accept-policy {\n  font-size: 1rem;\n  line-height: inherit;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  position: relative;\n  min-height: 100%;\n}\n\nbody {\n  /* Margin bottom by footer height */\n  margin-bottom: 60px;\n}\n.footer {\n  position: absolute;\n  bottom: 0;\n  width: 100%;\n  white-space: nowrap;\n  /* Set the fixed height of the footer here */\n  height: 60px;\n  line-height: 60px; /* Vertically center the text there */\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/js/site.js",
    "content": "﻿// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\n// for details on configuring this project to bundle and minify static web assets.\n\n// Write your JavaScript code.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011-2018 Twitter, Inc.\nCopyright (c) 2011-2018 The Bootstrap Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n  box-sizing: border-box;\n  -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #fff;\n  --gray: #6c757d;\n  --gray-dark: #343a40;\n  --primary: #007bff;\n  --secondary: #6c757d;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n  padding: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #6c757d;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #6c757d;\n}\n\ncode {\n  font-size: 87.5%;\n  color: #e83e8c;\n  word-break: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 87.5%;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  font-size: 87.5%;\n  color: #212529;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n  border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  color: #212529;\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n  border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n  border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n  border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n  border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n  border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n  border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n  border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n  border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #454d55;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.table-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-sm > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-md > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-lg > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-xl > .table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.form-control-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n  height: auto;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n  color: #6c757d;\n}\n\n.form-check-label {\n  margin-bottom: 0;\n}\n\n.form-check-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n  position: static;\n  margin-top: 0;\n  margin-right: 0.3125rem;\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28a745;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n  border-color: #28a745;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  border-color: #34ce57;\n  background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  border-color: #e4606d;\n  background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n  flex-flow: row wrap;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    -ms-flex-align: center;\n    align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group,\n  .form-inline .custom-select {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: auto;\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n  }\n  .form-inline .custom-control-label {\n    margin-bottom: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  color: #212529;\n  text-align: center;\n  vertical-align: middle;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0062cc;\n  border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5a6268;\n  border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #545b62;\n  border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #117a8b;\n  border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #d39e00;\n  border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #212529;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1d2124;\n  border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n  color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #007bff;\n  text-decoration: none;\n}\n\n.btn-link:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n  text-decoration: underline;\n  box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n  display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n  right: auto;\n  bottom: auto;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1.5rem;\n  color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n  margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n  z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n  z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n  z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n  margin-left: -1px;\n}\n\n.input-group-prepend {\n  margin-right: -1px;\n}\n\n.input-group-append {\n  margin-left: -1px;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n  height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n  height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n  padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n  color: #fff;\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n  color: #fff;\n  background-color: #b3d7ff;\n  border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n  color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n  background-color: #e9ecef;\n}\n\n.custom-control-label {\n  position: relative;\n  margin-bottom: 0;\n  vertical-align: top;\n}\n\n.custom-control-label::before {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  content: \"\";\n  background-color: #fff;\n  border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  content: \"\";\n  background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n  padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n  left: -2.25rem;\n  width: 1.75rem;\n  pointer-events: all;\n  border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n  top: calc(0.25rem + 2px);\n  left: calc(-2.25rem + 2px);\n  width: calc(1rem - 4px);\n  height: calc(1rem - 4px);\n  background-color: #adb5bd;\n  border-radius: 0.5rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-switch .custom-control-label::after {\n    transition: none;\n  }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n  background-color: #fff;\n  -webkit-transform: translateX(0.75rem);\n  transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n  height: auto;\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #6c757d;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  display: none;\n}\n\n.custom-select-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.custom-select-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n  border-color: #80bdff;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n  background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n  content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n  content: attr(data-browse);\n}\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 3;\n  display: block;\n  height: calc(1.5em + 0.75rem);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  content: \"Browse\";\n  background-color: #e9ecef;\n  border-left: inherit;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n  width: 100%;\n  height: calc(1rem + 0.4rem);\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-range:focus {\n  outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n  border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-moz-range-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: 0;\n  margin-right: 0.2rem;\n  margin-left: 0.2rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-ms-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-ms-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: transparent;\n  border-color: transparent;\n  border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n  margin-right: 15px;\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-control-label::before,\n  .custom-file-label,\n  .custom-select {\n    transition: none;\n  }\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n  text-decoration: none;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-group > .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n    -moz-column-count: 3;\n    column-count: 3;\n    -webkit-column-gap: 1.25rem;\n    -moz-column-gap: 1.25rem;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.accordion > .card {\n  overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n  border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n  border-bottom: 0;\n  border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n  margin-bottom: -1px;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #0056b3;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 2;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 1;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .badge {\n    transition: none;\n  }\n}\n\na.badge:hover, a.badge:focus {\n  text-decoration: none;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #fff;\n  background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n  color: #fff;\n  background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n  color: #fff;\n  background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n  color: #fff;\n  background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n  color: #fff;\n  background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n  color: #fff;\n  background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n  color: #fff;\n  background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n  color: #212529;\n  background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n  color: #212529;\n  background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n  color: #fff;\n  background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n  color: #fff;\n  background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n  color: #212529;\n  background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n  color: #fff;\n  background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004085;\n  background-color: #cce5ff;\n  border-color: #b8daff;\n}\n\n.alert-primary hr {\n  border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n  color: #002752;\n}\n\n.alert-secondary {\n  color: #383d41;\n  background-color: #e2e3e5;\n  border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n  border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n  color: #202326;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #007bff;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n  animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.media {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n}\n\n.media-body {\n  -ms-flex: 1;\n  flex: 1;\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n  margin-right: -1px;\n  margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n  margin-right: 0;\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-md .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n  margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom: 0;\n}\n\n.list-group-item-primary {\n  color: #004085;\n  background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #004085;\n  background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #004085;\n  border-color: #004085;\n}\n\n.list-group-item-secondary {\n  color: #383d41;\n  background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #383d41;\n  background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #383d41;\n  border-color: #383d41;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #818182;\n  background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5;\n}\n\n.close:hover {\n  color: #000;\n  text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n  opacity: .75;\n}\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\na.close.disabled {\n  pointer-events: none;\n}\n\n.toast {\n  max-width: 350px;\n  overflow: hidden;\n  font-size: 0.875rem;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n  -webkit-backdrop-filter: blur(10px);\n  backdrop-filter: blur(10px);\n  opacity: 0;\n  border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n  opacity: 1;\n}\n\n.toast.show {\n  display: block;\n  opacity: 1;\n}\n\n.toast.hide {\n  display: none;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.25rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n  padding: 0.75rem;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal-dialog-scrollable {\n  display: -ms-flexbox;\n  display: flex;\n  max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: calc(100vh - 1rem);\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n  display: block;\n  height: calc(100vh - 1rem);\n  content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n  max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n  content: none;\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n  padding: 1rem 1rem;\n  margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 1rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n  margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n  margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    max-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-scrollable .modal-content {\n    max-height: calc(100vh - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered::before {\n    height: calc(100vh - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  top: 0;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  right: 0;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  bottom: 0;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  left: 0;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n  margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n  bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n  left: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n  top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n  right: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n  z-index: 0;\n  opacity: 0;\n  transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-left,\n  .carousel-fade .active.carousel-item-right {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 15;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: .5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators li {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: spinner-border .75s linear infinite;\n  animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: spinner-grow .75s linear infinite;\n  animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #0062cc !important;\n}\n\n.bg-secondary {\n  background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #545b62 !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #fff !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #007bff !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.rounded-sm {\n  border-radius: 0.2rem !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  pointer-events: auto;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n  font-weight: lighter !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n  font-weight: bolder !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n  color: #0056b3 !important;\n}\n\n.text-secondary {\n  color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #494f54 !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n  color: #19692c !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n  color: #0f6674 !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n  color: #ba8b00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n  color: #a71d2a !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n  color: #cbd3da !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n  color: #121416 !important;\n}\n\n.text-body {\n  color: #212529 !important;\n}\n\n.text-muted {\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-break {\n  word-break: break-word !important;\n  overflow-wrap: break-word !important;\n}\n\n.text-reset {\n  color: inherit !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a:not(.btn) {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #adb5bd;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  @page {\n    size: a3;\n  }\n  body {\n    min-width: 992px !important;\n  }\n  .container {\n    min-width: 992px !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #dee2e6 !important;\n  }\n  .table-dark {\n    color: inherit;\n  }\n  .table-dark th,\n  .table-dark td,\n  .table-dark thead th,\n  .table-dark tbody + tbody {\n    border-color: #dee2e6;\n  }\n  .table .thead-dark th {\n    color: inherit;\n    border-color: #dee2e6;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery));\n}(this, function (exports, $) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.14.7\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */\n  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  var timeoutDuration = 0;\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      timeoutDuration = 1;\n      break;\n    }\n  }\n\n  function microtaskDebounce(fn) {\n    var called = false;\n    return function () {\n      if (called) {\n        return;\n      }\n      called = true;\n      window.Promise.resolve().then(function () {\n        called = false;\n        fn();\n      });\n    };\n  }\n\n  function taskDebounce(fn) {\n    var scheduled = false;\n    return function () {\n      if (!scheduled) {\n        scheduled = true;\n        setTimeout(function () {\n          scheduled = false;\n          fn();\n        }, timeoutDuration);\n      }\n    };\n  }\n\n  var supportsMicroTasks = isBrowser && window.Promise;\n\n  /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */\n  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n  /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */\n  function isFunction(functionToCheck) {\n    var getType = {};\n    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n  }\n\n  /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */\n  function getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n      return [];\n    }\n    // NOTE: 1 DOM access here\n    var window = element.ownerDocument.defaultView;\n    var css = window.getComputedStyle(element, null);\n    return property ? css[property] : css;\n  }\n\n  /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */\n  function getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n      return element;\n    }\n    return element.parentNode || element.host;\n  }\n\n  /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */\n  function getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n      return document.body;\n    }\n\n    switch (element.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return element.ownerDocument.body;\n      case '#document':\n        return element.body;\n    }\n\n    // Firefox want us to check `-x` and `-y` variations as well\n\n    var _getStyleComputedProp = getStyleComputedProperty(element),\n        overflow = _getStyleComputedProp.overflow,\n        overflowX = _getStyleComputedProp.overflowX,\n        overflowY = _getStyleComputedProp.overflowY;\n\n    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n      return element;\n    }\n\n    return getScrollParent(getParentNode(element));\n  }\n\n  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n  /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */\n  function isIE(version) {\n    if (version === 11) {\n      return isIE11;\n    }\n    if (version === 10) {\n      return isIE10;\n    }\n    return isIE11 || isIE10;\n  }\n\n  /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */\n  function getOffsetParent(element) {\n    if (!element) {\n      return document.documentElement;\n    }\n\n    var noOffsetParent = isIE(10) ? document.body : null;\n\n    // NOTE: 1 DOM access here\n    var offsetParent = element.offsetParent || null;\n    // Skip hidden elements which don't have an offsetParent\n    while (offsetParent === noOffsetParent && element.nextElementSibling) {\n      offsetParent = (element = element.nextElementSibling).offsetParent;\n    }\n\n    var nodeName = offsetParent && offsetParent.nodeName;\n\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n      return element ? element.ownerDocument.documentElement : document.documentElement;\n    }\n\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    // no offsetParent is present, I hate this job...\n    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n      return getOffsetParent(offsetParent);\n    }\n\n    return offsetParent;\n  }\n\n  function isOffsetContainer(element) {\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY') {\n      return false;\n    }\n    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n  }\n\n  /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */\n  function getRoot(node) {\n    if (node.parentNode !== null) {\n      return getRoot(node.parentNode);\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */\n  function findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n      return document.documentElement;\n    }\n\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    var start = order ? element1 : element2;\n    var end = order ? element2 : element1;\n\n    // Get common ancestor container\n    var range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    var commonAncestorContainer = range.commonAncestorContainer;\n\n    // Both nodes are inside #document\n\n    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n      if (isOffsetContainer(commonAncestorContainer)) {\n        return commonAncestorContainer;\n      }\n\n      return getOffsetParent(commonAncestorContainer);\n    }\n\n    // one of the nodes is inside shadowDOM, find which one\n    var element1root = getRoot(element1);\n    if (element1root.host) {\n      return findCommonOffsetParent(element1root.host, element2);\n    } else {\n      return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n  }\n\n  /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */\n  function getScroll(element) {\n    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      var html = element.ownerDocument.documentElement;\n      var scrollingElement = element.ownerDocument.scrollingElement || html;\n      return scrollingElement[upperSide];\n    }\n\n    return element[upperSide];\n  }\n\n  /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */\n  function includeScroll(rect, element) {\n    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var scrollTop = getScroll(element, 'top');\n    var scrollLeft = getScroll(element, 'left');\n    var modifier = subtract ? -1 : 1;\n    rect.top += scrollTop * modifier;\n    rect.bottom += scrollTop * modifier;\n    rect.left += scrollLeft * modifier;\n    rect.right += scrollLeft * modifier;\n    return rect;\n  }\n\n  /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */\n\n  function getBordersSize(styles, axis) {\n    var sideA = axis === 'x' ? 'Left' : 'Top';\n    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n  }\n\n  function getSize(axis, body, html, computedStyle) {\n    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n  }\n\n  function getWindowSizes(document) {\n    var body = document.body;\n    var html = document.documentElement;\n    var computedStyle = isIE(10) && getComputedStyle(html);\n\n    return {\n      height: getSize('Height', body, html, computedStyle),\n      width: getSize('Width', body, html, computedStyle)\n    };\n  }\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */\n  function getClientRect(offsets) {\n    return _extends({}, offsets, {\n      right: offsets.left + offsets.width,\n      bottom: offsets.top + offsets.height\n    });\n  }\n\n  /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */\n  function getBoundingClientRect(element) {\n    var rect = {};\n\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    try {\n      if (isIE(10)) {\n        rect = element.getBoundingClientRect();\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        rect.top += scrollTop;\n        rect.left += scrollLeft;\n        rect.bottom += scrollTop;\n        rect.right += scrollLeft;\n      } else {\n        rect = element.getBoundingClientRect();\n      }\n    } catch (e) {}\n\n    var result = {\n      left: rect.left,\n      top: rect.top,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n\n    // subtract scrollbar size from sizes\n    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n    var width = sizes.width || element.clientWidth || result.right - result.left;\n    var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n    var horizScrollbar = element.offsetWidth - width;\n    var vertScrollbar = element.offsetHeight - height;\n\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n      var styles = getStyleComputedProperty(element);\n      horizScrollbar -= getBordersSize(styles, 'x');\n      vertScrollbar -= getBordersSize(styles, 'y');\n\n      result.width -= horizScrollbar;\n      result.height -= vertScrollbar;\n    }\n\n    return getClientRect(result);\n  }\n\n  function getOffsetRectRelativeToArbitraryNode(children, parent) {\n    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var isIE10 = isIE(10);\n    var isHTML = parent.nodeName === 'HTML';\n    var childrenRect = getBoundingClientRect(children);\n    var parentRect = getBoundingClientRect(parent);\n    var scrollParent = getScrollParent(children);\n\n    var styles = getStyleComputedProperty(parent);\n    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n      parentRect.top = Math.max(parentRect.top, 0);\n      parentRect.left = Math.max(parentRect.left, 0);\n    }\n    var offsets = getClientRect({\n      top: childrenRect.top - parentRect.top - borderTopWidth,\n      left: childrenRect.left - parentRect.left - borderLeftWidth,\n      width: childrenRect.width,\n      height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (!isIE10 && isHTML) {\n      var marginTop = parseFloat(styles.marginTop, 10);\n      var marginLeft = parseFloat(styles.marginLeft, 10);\n\n      offsets.top -= borderTopWidth - marginTop;\n      offsets.bottom -= borderTopWidth - marginTop;\n      offsets.left -= borderLeftWidth - marginLeft;\n      offsets.right -= borderLeftWidth - marginLeft;\n\n      // Attach marginTop and marginLeft because in some circumstances we may need them\n      offsets.marginTop = marginTop;\n      offsets.marginLeft = marginLeft;\n    }\n\n    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n      offsets = includeScroll(offsets, parent);\n    }\n\n    return offsets;\n  }\n\n  function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var html = element.ownerDocument.documentElement;\n    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    var width = Math.max(html.clientWidth, window.innerWidth || 0);\n    var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n    var scrollTop = !excludeScroll ? getScroll(html) : 0;\n    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n    var offset = {\n      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n      width: width,\n      height: height\n    };\n\n    return getClientRect(offset);\n  }\n\n  /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */\n  function isFixed(element) {\n    var nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n      return true;\n    }\n    var parentNode = getParentNode(element);\n    if (!parentNode) {\n      return false;\n    }\n    return isFixed(parentNode);\n  }\n\n  /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */\n\n  function getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement || isIE()) {\n      return document.documentElement;\n    }\n    var el = element.parentElement;\n    while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n      el = el.parentElement;\n    }\n    return el || document.documentElement;\n  }\n\n  /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */\n  function getBoundaries(popper, reference, padding, boundariesElement) {\n    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    // NOTE: 1 DOM access here\n\n    var boundaries = { top: 0, left: 0 };\n    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    } else {\n      // Handle other cases based on DOM element used as boundaries\n      var boundariesNode = void 0;\n      if (boundariesElement === 'scrollParent') {\n        boundariesNode = getScrollParent(getParentNode(reference));\n        if (boundariesNode.nodeName === 'BODY') {\n          boundariesNode = popper.ownerDocument.documentElement;\n        }\n      } else if (boundariesElement === 'window') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      } else {\n        boundariesNode = boundariesElement;\n      }\n\n      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n      // In case of HTML, we need a different computation\n      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n        var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n            height = _getWindowSizes.height,\n            width = _getWindowSizes.width;\n\n        boundaries.top += offsets.top - offsets.marginTop;\n        boundaries.bottom = height + offsets.top;\n        boundaries.left += offsets.left - offsets.marginLeft;\n        boundaries.right = width + offsets.left;\n      } else {\n        // for all the other DOM elements, this one is good\n        boundaries = offsets;\n      }\n    }\n\n    // Add paddings\n    padding = padding || 0;\n    var isPaddingNumber = typeof padding === 'number';\n    boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n    boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n    return boundaries;\n  }\n\n  function getArea(_ref) {\n    var width = _ref.width,\n        height = _ref.height;\n\n    return width * height;\n  }\n\n  /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n    if (placement.indexOf('auto') === -1) {\n      return placement;\n    }\n\n    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n    var rects = {\n      top: {\n        width: boundaries.width,\n        height: refRect.top - boundaries.top\n      },\n      right: {\n        width: boundaries.right - refRect.right,\n        height: boundaries.height\n      },\n      bottom: {\n        width: boundaries.width,\n        height: boundaries.bottom - refRect.bottom\n      },\n      left: {\n        width: refRect.left - boundaries.left,\n        height: boundaries.height\n      }\n    };\n\n    var sortedAreas = Object.keys(rects).map(function (key) {\n      return _extends({\n        key: key\n      }, rects[key], {\n        area: getArea(rects[key])\n      });\n    }).sort(function (a, b) {\n      return b.area - a.area;\n    });\n\n    var filteredAreas = sortedAreas.filter(function (_ref2) {\n      var width = _ref2.width,\n          height = _ref2.height;\n      return width >= popper.clientWidth && height >= popper.clientHeight;\n    });\n\n    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n    var variation = placement.split('-')[1];\n\n    return computedPlacement + (variation ? '-' + variation : '');\n  }\n\n  /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */\n  function getReferenceOffsets(state, popper, reference) {\n    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n  }\n\n  /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */\n  function getOuterSizes(element) {\n    var window = element.ownerDocument.defaultView;\n    var styles = window.getComputedStyle(element);\n    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n    var result = {\n      width: element.offsetWidth + y,\n      height: element.offsetHeight + x\n    };\n    return result;\n  }\n\n  /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */\n  function getOppositePlacement(placement) {\n    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */\n  function getPopperOffsets(popper, referenceOffsets, placement) {\n    placement = placement.split('-')[0];\n\n    // Get popper node sizes\n    var popperRect = getOuterSizes(popper);\n\n    // Add position, width and height to our offsets object\n    var popperOffsets = {\n      width: popperRect.width,\n      height: popperRect.height\n    };\n\n    // depending by the popper placement we have to compute its offsets slightly differently\n    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    var mainSide = isHoriz ? 'top' : 'left';\n    var secondarySide = isHoriz ? 'left' : 'top';\n    var measurement = isHoriz ? 'height' : 'width';\n    var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n    if (placement === secondarySide) {\n      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n    } else {\n      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n    }\n\n    return popperOffsets;\n  }\n\n  /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function find(arr, check) {\n    // use native find if supported\n    if (Array.prototype.find) {\n      return arr.find(check);\n    }\n\n    // use `filter` to obtain the same behavior of `find`\n    return arr.filter(check)[0];\n  }\n\n  /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function findIndex(arr, prop, value) {\n    // use native findIndex if supported\n    if (Array.prototype.findIndex) {\n      return arr.findIndex(function (cur) {\n        return cur[prop] === value;\n      });\n    }\n\n    // use `find` + `indexOf` if `findIndex` isn't supported\n    var match = find(arr, function (obj) {\n      return obj[prop] === value;\n    });\n    return arr.indexOf(match);\n  }\n\n  /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */\n  function runModifiers(modifiers, data, ends) {\n    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n    modifiersToRun.forEach(function (modifier) {\n      if (modifier['function']) {\n        // eslint-disable-line dot-notation\n        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n      }\n      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n      if (modifier.enabled && isFunction(fn)) {\n        // Add properties to offsets to make them a complete clientRect object\n        // we do this before each modifier to make sure the previous one doesn't\n        // mess with these values\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        data.offsets.reference = getClientRect(data.offsets.reference);\n\n        data = fn(data, modifier);\n      }\n    });\n\n    return data;\n  }\n\n  /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */\n  function update() {\n    // if popper is destroyed, don't perform any further update\n    if (this.state.isDestroyed) {\n      return;\n    }\n\n    var data = {\n      instance: this,\n      styles: {},\n      arrowStyles: {},\n      attributes: {},\n      flipped: false,\n      offsets: {}\n    };\n\n    // compute reference element offsets\n    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n    // store the computed placement inside `originalPlacement`\n    data.originalPlacement = data.placement;\n\n    data.positionFixed = this.options.positionFixed;\n\n    // compute the popper offsets\n    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n    // run the modifiers\n    data = runModifiers(this.modifiers, data);\n\n    // the first `update` will call `onCreate` callback\n    // the other ones will call `onUpdate` callback\n    if (!this.state.isCreated) {\n      this.state.isCreated = true;\n      this.options.onCreate(data);\n    } else {\n      this.options.onUpdate(data);\n    }\n  }\n\n  /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */\n  function isModifierEnabled(modifiers, modifierName) {\n    return modifiers.some(function (_ref) {\n      var name = _ref.name,\n          enabled = _ref.enabled;\n      return enabled && name === modifierName;\n    });\n  }\n\n  /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */\n  function getSupportedPropertyName(property) {\n    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var toCheck = prefix ? '' + prefix + upperProp : property;\n      if (typeof document.body.style[toCheck] !== 'undefined') {\n        return toCheck;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */\n  function destroy() {\n    this.state.isDestroyed = true;\n\n    // touch DOM only if `applyStyle` modifier is enabled\n    if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n      this.popper.removeAttribute('x-placement');\n      this.popper.style.position = '';\n      this.popper.style.top = '';\n      this.popper.style.left = '';\n      this.popper.style.right = '';\n      this.popper.style.bottom = '';\n      this.popper.style.willChange = '';\n      this.popper.style[getSupportedPropertyName('transform')] = '';\n    }\n\n    this.disableEventListeners();\n\n    // remove the popper if user explicity asked for the deletion on destroy\n    // do not use `remove` because IE11 doesn't support it\n    if (this.options.removeOnDestroy) {\n      this.popper.parentNode.removeChild(this.popper);\n    }\n    return this;\n  }\n\n  /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */\n  function getWindow(element) {\n    var ownerDocument = element.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView : window;\n  }\n\n  function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n    var isBody = scrollParent.nodeName === 'BODY';\n    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n    target.addEventListener(event, callback, { passive: true });\n\n    if (!isBody) {\n      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n    }\n    scrollParents.push(target);\n  }\n\n  /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function setupEventListeners(reference, options, state, updateBound) {\n    // Resize event listener on window\n    state.updateBound = updateBound;\n    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n    // Scroll event listener on scroll parents\n    var scrollElement = getScrollParent(reference);\n    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n    state.scrollElement = scrollElement;\n    state.eventsEnabled = true;\n\n    return state;\n  }\n\n  /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */\n  function enableEventListeners() {\n    if (!this.state.eventsEnabled) {\n      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n  }\n\n  /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function removeEventListeners(reference, state) {\n    // Remove resize event listener on window\n    getWindow(reference).removeEventListener('resize', state.updateBound);\n\n    // Remove scroll event listener on scroll parents\n    state.scrollParents.forEach(function (target) {\n      target.removeEventListener('scroll', state.updateBound);\n    });\n\n    // Reset state\n    state.updateBound = null;\n    state.scrollParents = [];\n    state.scrollElement = null;\n    state.eventsEnabled = false;\n    return state;\n  }\n\n  /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */\n  function disableEventListeners() {\n    if (this.state.eventsEnabled) {\n      cancelAnimationFrame(this.scheduleUpdate);\n      this.state = removeEventListeners(this.reference, this.state);\n    }\n  }\n\n  /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */\n  function isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setStyles(element, styles) {\n    Object.keys(styles).forEach(function (prop) {\n      var unit = '';\n      // add unit if the value is numeric and is one of the following\n      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n        unit = 'px';\n      }\n      element.style[prop] = styles[prop] + unit;\n    });\n  }\n\n  /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setAttributes(element, attributes) {\n    Object.keys(attributes).forEach(function (prop) {\n      var value = attributes[prop];\n      if (value !== false) {\n        element.setAttribute(prop, attributes[prop]);\n      } else {\n        element.removeAttribute(prop);\n      }\n    });\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */\n  function applyStyle(data) {\n    // any property present in `data.styles` will be applied to the popper,\n    // in this way we can make the 3rd party modifiers add custom styles to it\n    // Be aware, modifiers could override the properties defined in the previous\n    // lines of this modifier!\n    setStyles(data.instance.popper, data.styles);\n\n    // any property present in `data.attributes` will be applied to the popper,\n    // they will be set as HTML attributes of the element\n    setAttributes(data.instance.popper, data.attributes);\n\n    // if arrowElement is defined and arrowStyles has some properties\n    if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n      setStyles(data.arrowElement, data.arrowStyles);\n    }\n\n    return data;\n  }\n\n  /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */\n  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n    // compute reference element offsets\n    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n    popper.setAttribute('x-placement', placement);\n\n    // Apply `position` to popper before anything else because\n    // without the position applied we can't guarantee correct computations\n    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n    return options;\n  }\n\n  /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */\n  function getRoundedOffsets(data, shouldRound) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n    var round = Math.round,\n        floor = Math.floor;\n\n    var noRound = function noRound(v) {\n      return v;\n    };\n\n    var referenceWidth = round(reference.width);\n    var popperWidth = round(popper.width);\n\n    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n    var isVariation = data.placement.indexOf('-') !== -1;\n    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n    var verticalToInteger = !shouldRound ? noRound : round;\n\n    return {\n      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n      top: verticalToInteger(popper.top),\n      bottom: verticalToInteger(popper.bottom),\n      right: horizontalToInteger(popper.right)\n    };\n  }\n\n  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeStyle(data, options) {\n    var x = options.x,\n        y = options.y;\n    var popper = data.offsets.popper;\n\n    // Remove this legacy support in Popper.js v2\n\n    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'applyStyle';\n    }).gpuAcceleration;\n    if (legacyGpuAccelerationOption !== undefined) {\n      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n    }\n    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n    var offsetParent = getOffsetParent(data.instance.popper);\n    var offsetParentRect = getBoundingClientRect(offsetParent);\n\n    // Styles\n    var styles = {\n      position: popper.position\n    };\n\n    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n    var sideA = x === 'bottom' ? 'top' : 'bottom';\n    var sideB = y === 'right' ? 'left' : 'right';\n\n    // if gpuAcceleration is set to `true` and transform is supported,\n    //  we use `translate3d` to apply the position to the popper we\n    // automatically use the supported prefixed version if needed\n    var prefixedProperty = getSupportedPropertyName('transform');\n\n    // now, let's make a step back and look at this code closely (wtf?)\n    // If the content of the popper grows once it's been positioned, it\n    // may happen that the popper gets misplaced because of the new content\n    // overflowing its reference element\n    // To avoid this problem, we provide two options (x and y), which allow\n    // the consumer to define the offset origin.\n    // If we position a popper on top of a reference element, we can set\n    // `x` to `top` to make the popper grow towards its top instead of\n    // its bottom.\n    var left = void 0,\n        top = void 0;\n    if (sideA === 'bottom') {\n      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n      // and not the bottom of the html element\n      if (offsetParent.nodeName === 'HTML') {\n        top = -offsetParent.clientHeight + offsets.bottom;\n      } else {\n        top = -offsetParentRect.height + offsets.bottom;\n      }\n    } else {\n      top = offsets.top;\n    }\n    if (sideB === 'right') {\n      if (offsetParent.nodeName === 'HTML') {\n        left = -offsetParent.clientWidth + offsets.right;\n      } else {\n        left = -offsetParentRect.width + offsets.right;\n      }\n    } else {\n      left = offsets.left;\n    }\n    if (gpuAcceleration && prefixedProperty) {\n      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n      styles[sideA] = 0;\n      styles[sideB] = 0;\n      styles.willChange = 'transform';\n    } else {\n      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n      var invertTop = sideA === 'bottom' ? -1 : 1;\n      var invertLeft = sideB === 'right' ? -1 : 1;\n      styles[sideA] = top * invertTop;\n      styles[sideB] = left * invertLeft;\n      styles.willChange = sideA + ', ' + sideB;\n    }\n\n    // Attributes\n    var attributes = {\n      'x-placement': data.placement\n    };\n\n    // Update `data` attributes, styles and arrowStyles\n    data.attributes = _extends({}, attributes, data.attributes);\n    data.styles = _extends({}, styles, data.styles);\n    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n    return data;\n  }\n\n  /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */\n  function isModifierRequired(modifiers, requestingName, requestedName) {\n    var requesting = find(modifiers, function (_ref) {\n      var name = _ref.name;\n      return name === requestingName;\n    });\n\n    var isRequired = !!requesting && modifiers.some(function (modifier) {\n      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n    });\n\n    if (!isRequired) {\n      var _requesting = '`' + requestingName + '`';\n      var requested = '`' + requestedName + '`';\n      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n    }\n    return isRequired;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function arrow(data, options) {\n    var _data$offsets$arrow;\n\n    // arrow depends on keepTogether in order to work\n    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n      return data;\n    }\n\n    var arrowElement = options.element;\n\n    // if arrowElement is a string, suppose it's a CSS selector\n    if (typeof arrowElement === 'string') {\n      arrowElement = data.instance.popper.querySelector(arrowElement);\n\n      // if arrowElement is not found, don't run the modifier\n      if (!arrowElement) {\n        return data;\n      }\n    } else {\n      // if the arrowElement isn't a query selector we must check that the\n      // provided DOM node is child of its popper node\n      if (!data.instance.popper.contains(arrowElement)) {\n        console.warn('WARNING: `arrow.element` must be child of its popper element!');\n        return data;\n      }\n    }\n\n    var placement = data.placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n    var len = isVertical ? 'height' : 'width';\n    var sideCapitalized = isVertical ? 'Top' : 'Left';\n    var side = sideCapitalized.toLowerCase();\n    var altSide = isVertical ? 'left' : 'top';\n    var opSide = isVertical ? 'bottom' : 'right';\n    var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n    //\n    // extends keepTogether behavior making sure the popper and its\n    // reference have enough pixels in conjunction\n    //\n\n    // top/left side\n    if (reference[opSide] - arrowElementSize < popper[side]) {\n      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n    }\n    // bottom/right side\n    if (reference[side] + arrowElementSize > popper[opSide]) {\n      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n    }\n    data.offsets.popper = getClientRect(data.offsets.popper);\n\n    // compute center of the popper\n    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n    // Compute the sideValue using the updated popper offsets\n    // take popper margin in account because we don't have this info available\n    var css = getStyleComputedProperty(data.instance.popper);\n    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n    // prevent arrowElement from being placed not contiguously to its popper\n    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n    data.arrowElement = arrowElement;\n    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n    return data;\n  }\n\n  /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */\n  function getOppositeVariation(variation) {\n    if (variation === 'end') {\n      return 'start';\n    } else if (variation === 'start') {\n      return 'end';\n    }\n    return variation;\n  }\n\n  /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */\n  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n  // Get rid of `auto` `auto-start` and `auto-end`\n  var validPlacements = placements.slice(3);\n\n  /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */\n  function clockwise(placement) {\n    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var index = validPlacements.indexOf(placement);\n    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n    return counter ? arr.reverse() : arr;\n  }\n\n  var BEHAVIORS = {\n    FLIP: 'flip',\n    CLOCKWISE: 'clockwise',\n    COUNTERCLOCKWISE: 'counterclockwise'\n  };\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function flip(data, options) {\n    // if `inner` modifier is enabled, we can't use the `flip` modifier\n    if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n      return data;\n    }\n\n    if (data.flipped && data.placement === data.originalPlacement) {\n      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n      return data;\n    }\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n    var placement = data.placement.split('-')[0];\n    var placementOpposite = getOppositePlacement(placement);\n    var variation = data.placement.split('-')[1] || '';\n\n    var flipOrder = [];\n\n    switch (options.behavior) {\n      case BEHAVIORS.FLIP:\n        flipOrder = [placement, placementOpposite];\n        break;\n      case BEHAVIORS.CLOCKWISE:\n        flipOrder = clockwise(placement);\n        break;\n      case BEHAVIORS.COUNTERCLOCKWISE:\n        flipOrder = clockwise(placement, true);\n        break;\n      default:\n        flipOrder = options.behavior;\n    }\n\n    flipOrder.forEach(function (step, index) {\n      if (placement !== step || flipOrder.length === index + 1) {\n        return data;\n      }\n\n      placement = data.placement.split('-')[0];\n      placementOpposite = getOppositePlacement(placement);\n\n      var popperOffsets = data.offsets.popper;\n      var refOffsets = data.offsets.reference;\n\n      // using floor because the reference offsets may contain decimals we are not going to consider here\n      var floor = Math.floor;\n      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n      // flip the variation if required\n      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n      if (overlapsRef || overflowsBoundaries || flippedVariation) {\n        // this boolean to detect any flip loop\n        data.flipped = true;\n\n        if (overlapsRef || overflowsBoundaries) {\n          placement = flipOrder[index + 1];\n        }\n\n        if (flippedVariation) {\n          variation = getOppositeVariation(variation);\n        }\n\n        data.placement = placement + (variation ? '-' + variation : '');\n\n        // this object contains `position`, we want to preserve it along with\n        // any additional property we may add in the future\n        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n        data = runModifiers(data.instance.modifiers, data, 'flip');\n      }\n    });\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function keepTogether(data) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var placement = data.placement.split('-')[0];\n    var floor = Math.floor;\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var side = isVertical ? 'right' : 'bottom';\n    var opSide = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    if (popper[side] < floor(reference[opSide])) {\n      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n    }\n    if (popper[opSide] > floor(reference[side])) {\n      data.offsets.popper[opSide] = floor(reference[side]);\n    }\n\n    return data;\n  }\n\n  /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */\n  function toValue(str, measurement, popperOffsets, referenceOffsets) {\n    // separate value from unit\n    var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n    var value = +split[1];\n    var unit = split[2];\n\n    // If it's not a number it's an operator, I guess\n    if (!value) {\n      return str;\n    }\n\n    if (unit.indexOf('%') === 0) {\n      var element = void 0;\n      switch (unit) {\n        case '%p':\n          element = popperOffsets;\n          break;\n        case '%':\n        case '%r':\n        default:\n          element = referenceOffsets;\n      }\n\n      var rect = getClientRect(element);\n      return rect[measurement] / 100 * value;\n    } else if (unit === 'vh' || unit === 'vw') {\n      // if is a vh or vw, we calculate the size based on the viewport\n      var size = void 0;\n      if (unit === 'vh') {\n        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n      } else {\n        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      }\n      return size / 100 * value;\n    } else {\n      // if is an explicit pixel unit, we get rid of the unit and keep the value\n      // if is an implicit unit, it's px, and we return just the value\n      return value;\n    }\n  }\n\n  /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */\n  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n    var offsets = [0, 0];\n\n    // Use height if placement is left or right and index is 0 otherwise use width\n    // in this way the first offset will use an axis and the second one\n    // will use the other one\n    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n    // Split the offset string to obtain a list of values and operands\n    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n    var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n      return frag.trim();\n    });\n\n    // Detect if the offset string contains a pair of values or a single one\n    // they could be separated by comma or space\n    var divider = fragments.indexOf(find(fragments, function (frag) {\n      return frag.search(/,|\\s/) !== -1;\n    }));\n\n    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    }\n\n    // If divider is found, we divide the list of values and operands to divide\n    // them by ofset X and Y.\n    var splitRegex = /\\s*,\\s*|\\s+/;\n    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n    // Convert the values with units to absolute pixels to allow our computations\n    ops = ops.map(function (op, index) {\n      // Most of the units rely on the orientation of the popper\n      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n      var mergeWithPrevious = false;\n      return op\n      // This aggregates any `+` or `-` sign that aren't considered operators\n      // e.g.: 10 + +5 => [10, +, +5]\n      .reduce(function (a, b) {\n        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n          a[a.length - 1] = b;\n          mergeWithPrevious = true;\n          return a;\n        } else if (mergeWithPrevious) {\n          a[a.length - 1] += b;\n          mergeWithPrevious = false;\n          return a;\n        } else {\n          return a.concat(b);\n        }\n      }, [])\n      // Here we convert the string values into number values (in px)\n      .map(function (str) {\n        return toValue(str, measurement, popperOffsets, referenceOffsets);\n      });\n    });\n\n    // Loop trough the offsets arrays and execute the operations\n    ops.forEach(function (op, index) {\n      op.forEach(function (frag, index2) {\n        if (isNumeric(frag)) {\n          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n        }\n      });\n    });\n    return offsets;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */\n  function offset(data, _ref) {\n    var offset = _ref.offset;\n    var placement = data.placement,\n        _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var basePlacement = placement.split('-')[0];\n\n    var offsets = void 0;\n    if (isNumeric(+offset)) {\n      offsets = [+offset, 0];\n    } else {\n      offsets = parseOffset(offset, popper, reference, basePlacement);\n    }\n\n    if (basePlacement === 'left') {\n      popper.top += offsets[0];\n      popper.left -= offsets[1];\n    } else if (basePlacement === 'right') {\n      popper.top += offsets[0];\n      popper.left += offsets[1];\n    } else if (basePlacement === 'top') {\n      popper.left += offsets[0];\n      popper.top -= offsets[1];\n    } else if (basePlacement === 'bottom') {\n      popper.left += offsets[0];\n      popper.top += offsets[1];\n    }\n\n    data.popper = popper;\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function preventOverflow(data, options) {\n    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n    // If offsetParent is the reference element, we really want to\n    // go one step up and use the next offsetParent as reference to\n    // avoid to make this modifier completely useless and look like broken\n    if (data.instance.reference === boundariesElement) {\n      boundariesElement = getOffsetParent(boundariesElement);\n    }\n\n    // NOTE: DOM access here\n    // resets the popper's position so that the document size can be calculated excluding\n    // the size of the popper element itself\n    var transformProp = getSupportedPropertyName('transform');\n    var popperStyles = data.instance.popper.style; // assignment to help minification\n    var top = popperStyles.top,\n        left = popperStyles.left,\n        transform = popperStyles[transformProp];\n\n    popperStyles.top = '';\n    popperStyles.left = '';\n    popperStyles[transformProp] = '';\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    popperStyles.top = top;\n    popperStyles.left = left;\n    popperStyles[transformProp] = transform;\n\n    options.boundaries = boundaries;\n\n    var order = options.priority;\n    var popper = data.offsets.popper;\n\n    var check = {\n      primary: function primary(placement) {\n        var value = popper[placement];\n        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n          value = Math.max(popper[placement], boundaries[placement]);\n        }\n        return defineProperty({}, placement, value);\n      },\n      secondary: function secondary(placement) {\n        var mainSide = placement === 'right' ? 'left' : 'top';\n        var value = popper[mainSide];\n        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n        }\n        return defineProperty({}, mainSide, value);\n      }\n    };\n\n    order.forEach(function (placement) {\n      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n      popper = _extends({}, popper, check[side](placement));\n    });\n\n    data.offsets.popper = popper;\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function shift(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var shiftvariation = placement.split('-')[1];\n\n    // if shift shiftvariation is specified, run the modifier\n    if (shiftvariation) {\n      var _data$offsets = data.offsets,\n          reference = _data$offsets.reference,\n          popper = _data$offsets.popper;\n\n      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n      var side = isVertical ? 'left' : 'top';\n      var measurement = isVertical ? 'width' : 'height';\n\n      var shiftOffsets = {\n        start: defineProperty({}, side, reference[side]),\n        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n      };\n\n      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function hide(data) {\n    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n      return data;\n    }\n\n    var refRect = data.offsets.reference;\n    var bound = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'preventOverflow';\n    }).boundaries;\n\n    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === true) {\n        return data;\n      }\n\n      data.hide = true;\n      data.attributes['x-out-of-boundaries'] = '';\n    } else {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === false) {\n        return data;\n      }\n\n      data.hide = false;\n      data.attributes['x-out-of-boundaries'] = false;\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function inner(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n    data.placement = getOppositePlacement(placement);\n    data.offsets.popper = getClientRect(popper);\n\n    return data;\n  }\n\n  /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */\n\n  /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */\n  var modifiers = {\n    /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */\n    shift: {\n      /** @prop {number} order=100 - Index used to define the order of execution */\n      order: 100,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: shift\n    },\n\n    /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    offset: {\n      /** @prop {number} order=200 - Index used to define the order of execution */\n      order: 200,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: offset,\n      /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */\n      offset: 0\n    },\n\n    /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    preventOverflow: {\n      /** @prop {number} order=300 - Index used to define the order of execution */\n      order: 300,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: preventOverflow,\n      /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */\n      priority: ['left', 'right', 'top', 'bottom'],\n      /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */\n      boundariesElement: 'scrollParent'\n    },\n\n    /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    keepTogether: {\n      /** @prop {number} order=400 - Index used to define the order of execution */\n      order: 400,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: keepTogether\n    },\n\n    /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */\n    arrow: {\n      /** @prop {number} order=500 - Index used to define the order of execution */\n      order: 500,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: arrow,\n      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n      element: '[x-arrow]'\n    },\n\n    /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */\n    flip: {\n      /** @prop {number} order=600 - Index used to define the order of execution */\n      order: 600,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: flip,\n      /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */\n      behavior: 'flip',\n      /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */\n      boundariesElement: 'viewport'\n    },\n\n    /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    inner: {\n      /** @prop {number} order=700 - Index used to define the order of execution */\n      order: 700,\n      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n      enabled: false,\n      /** @prop {ModifierFn} */\n      fn: inner\n    },\n\n    /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */\n    hide: {\n      /** @prop {number} order=800 - Index used to define the order of execution */\n      order: 800,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: hide\n    },\n\n    /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    computeStyle: {\n      /** @prop {number} order=850 - Index used to define the order of execution */\n      order: 850,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: computeStyle,\n      /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: true,\n      /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */\n      x: 'bottom',\n      /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */\n      y: 'right'\n    },\n\n    /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    applyStyle: {\n      /** @prop {number} order=900 - Index used to define the order of execution */\n      order: 900,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: applyStyle,\n      /** @prop {Function} */\n      onLoad: applyStyleOnLoad,\n      /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: undefined\n    }\n  };\n\n  /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */\n\n  /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */\n  var Defaults = {\n    /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */\n    placement: 'bottom',\n\n    /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */\n    positionFixed: false,\n\n    /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */\n    eventsEnabled: true,\n\n    /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */\n    removeOnDestroy: false,\n\n    /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */\n    onCreate: function onCreate() {},\n\n    /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */\n    onUpdate: function onUpdate() {},\n\n    /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */\n    modifiers: modifiers\n  };\n\n  /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */\n\n  /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */\n\n  // Utils\n  // Methods\n  var Popper = function () {\n    /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n     * @param {HTMLElement} popper - The HTML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */\n    function Popper(reference, popper) {\n      var _this = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      classCallCheck(this, Popper);\n\n      this.scheduleUpdate = function () {\n        return requestAnimationFrame(_this.update);\n      };\n\n      // make update() debounced, so that it only runs at most once-per-tick\n      this.update = debounce(this.update.bind(this));\n\n      // with {} we create a new object with the options inside it\n      this.options = _extends({}, Popper.Defaults, options);\n\n      // init state\n      this.state = {\n        isDestroyed: false,\n        isCreated: false,\n        scrollParents: []\n      };\n\n      // get reference and popper elements (allow jQuery wrappers)\n      this.reference = reference && reference.jquery ? reference[0] : reference;\n      this.popper = popper && popper.jquery ? popper[0] : popper;\n\n      // Deep merge modifiers options\n      this.options.modifiers = {};\n      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n      });\n\n      // Refactoring modifiers' list (Object => Array)\n      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n        return _extends({\n          name: name\n        }, _this.options.modifiers[name]);\n      })\n      // sort the modifiers by order\n      .sort(function (a, b) {\n        return a.order - b.order;\n      });\n\n      // modifiers have the ability to execute arbitrary code when Popper.js get inited\n      // such code is executed in the same order of its modifier\n      // they could add new properties to their options configuration\n      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n      this.modifiers.forEach(function (modifierOptions) {\n        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n        }\n      });\n\n      // fire the first update to position the popper in the right place\n      this.update();\n\n      var eventsEnabled = this.options.eventsEnabled;\n      if (eventsEnabled) {\n        // setup event listeners, they will take care of update the position in specific situations\n        this.enableEventListeners();\n      }\n\n      this.state.eventsEnabled = eventsEnabled;\n    }\n\n    // We can't use class properties because they don't get listed in the\n    // class prototype and break stuff like Sinon stubs\n\n\n    createClass(Popper, [{\n      key: 'update',\n      value: function update$$1() {\n        return update.call(this);\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy$$1() {\n        return destroy.call(this);\n      }\n    }, {\n      key: 'enableEventListeners',\n      value: function enableEventListeners$$1() {\n        return enableEventListeners.call(this);\n      }\n    }, {\n      key: 'disableEventListeners',\n      value: function disableEventListeners$$1() {\n        return disableEventListeners.call(this);\n      }\n\n      /**\n       * Schedules an update. It will run on the next UI update available.\n       * @method scheduleUpdate\n       * @memberof Popper\n       */\n\n\n      /**\n       * Collection of utilities useful when writing custom modifiers.\n       * Starting from version 1.7, this method is available only if you\n       * include `popper-utils.js` before `popper.js`.\n       *\n       * **DEPRECATION**: This way to access PopperUtils is deprecated\n       * and will be removed in v2! Use the PopperUtils module directly instead.\n       * Due to the high instability of the methods contained in Utils, we can't\n       * guarantee them to follow semver. Use them at your own risk!\n       * @static\n       * @private\n       * @type {Object}\n       * @deprecated since version 1.8\n       * @member Utils\n       * @memberof Popper\n       */\n\n    }]);\n    return Popper;\n  }();\n\n  /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */\n\n\n  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n  Popper.placements = placements;\n  Popper.Defaults = Defaults;\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery/LICENSE.txt",
    "content": "Copyright JS Foundation and other contributors, https://js.foundation/\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/jquery/jquery\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nAll files located in the node_modules and external directories are\nexternally maintained libraries used by this software which have their\nown licenses; we recommend you read them, as their terms may differ from\nthe terms above.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery/dist/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery-validation/LICENSE.md",
    "content": "The MIT License (MIT)\n=====================\n\nCopyright Jörn Zaefferer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( /&nbsp;|&#160;/gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\t\toptionalValue = this.optional( element ),\n\t\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam\n\t\t\t\t.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" )\n\t\t\t\t.replace( /,/g, \"|\" )\n\t\t\t\t.replace( /\\/\\*/g, \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n *   a. shall not start with '0' or '1'\n *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n *\n * Spanish CIF structure:\n *\n * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]\n *\n * Where:\n *\n * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]\n * P: 2 characters. Province.\n * N: 5 characters. Secuencial Number within the province.\n * C: 1 character. Control Digit: [0-9A-J].\n *\n * [ T ]: Kind of Organizations. Possible values:\n *\n *   A. Corporations\n *   B. LLCs\n *   C. General partnerships\n *   D. Companies limited partnerships\n *   E. Communities of goods\n *   F. Cooperative Societies\n *   G. Associations\n *   H. Communities of homeowners in horizontal property regime\n *   J. Civil Societies\n *   K. Old format\n *   L. Old format\n *   M. Old format\n *   N. Nonresident entities\n *   P. Local authorities\n *   Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n *   R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n *   S. Organs of State Administration and regions\n *   V. Agrarian Transformation\n *   W. Permanent establishments of non-resident in Spain\n *\n * [ C ]: Control Digit. It can be a number or a letter depending on T value:\n * [ T ]  -->  [ C ]\n * ------    ----------\n *   A         Number\n *   B         Number\n *   E         Number\n *   H         Number\n *   K         Letter\n *   P         Letter\n *   Q         Letter\n *   S         Letter\n *\n */\n$.validator.addMethod( \"cifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi );\n\tvar letter  = value.substring( 0, 1 ), // [ T ]\n\t\tnumber  = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\n\t\tcontrol = value.substring( 8, 9 ), // [ C ]\n\t\tall_sum = 0,\n\t\teven_sum = 0,\n\t\todd_sum = 0,\n\t\ti, n,\n\t\tcontrol_digit,\n\t\tcontrol_letter;\n\n\tfunction isOdd( n ) {\n\t\treturn n % 2 === 0;\n\t}\n\n\t// Quick format test\n\tif ( value.length !== 9 || !cifRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < number.length; i++ ) {\n\t\tn = parseInt( number[ i ], 10 );\n\n\t\t// Odd positions\n\t\tif ( isOdd( i ) ) {\n\n\t\t\t// Odd positions are multiplied first.\n\t\t\tn *= 2;\n\n\t\t\t// If the multiplication is bigger than 10 we need to adjust\n\t\t\todd_sum += n < 10 ? n : n - 9;\n\n\t\t// Even positions\n\t\t// Just sum them\n\t\t} else {\n\t\t\teven_sum += n;\n\t\t}\n\t}\n\n\tall_sum = even_sum + odd_sum;\n\tcontrol_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();\n\tcontrol_digit = parseInt( control_digit, 10 ) > 9 ? \"0\" : control_digit;\n\tcontrol_letter = \"JABCDEFGHI\".substr( control_digit, 1 ).toString();\n\n\t// Control must be a digit\n\tif ( letter.match( /[ABEH]/ ) ) {\n\t\treturn control === control_digit;\n\n\t// Control must be a letter\n\t} else if ( letter.match( /[KPQS]/ ) ) {\n\t\treturn control === control_letter;\n\t}\n\n\t// Can be either\n\treturn control === control_digit || control === control_letter;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value ) {\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number\" );\n\n// https://jqueryvalidation.org/creditcard-method/\n// based on https://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// https://developer.ean.com/general_info/Valid_Credit_Card_Types\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n *  currency: [\"£\", false] - Use false for soft currency validation\n *  currency: [\"$\", false]\n *  currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n *  <input class=\"currencyInput\" name=\"currencyInput\">\n *\n * Soft symbol checking\n *  currencyInput: {\n *     currency: [\"$\", false]\n *  }\n *\n * Strict symbol checking (default)\n *  currencyInput: {\n *     currency: \"$\"\n *     //OR\n *     currency: [\"$\", true]\n *  }\n *\n * Multiple Symbols\n *  currencyInput: {\n *     currency: \"$,£,¢\"\n *  }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n    var isParamString = typeof param === \"string\",\n        symbol = isParamString ? param : param[ 0 ],\n        soft = isParamString ? true : param[ 1 ],\n        regex;\n\n    symbol = symbol.replace( /,/g, \"\" );\n    symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n    regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n    regex = new RegExp( regex );\n    return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check for IBAN code length.\n\t// It contains:\n\t// country code ISO 3166-1 - two letters,\n\t// two check digits,\n\t// Basic Bank Account Number (BBAN) - up to 30 chars\n\tvar minimalIBANlength = 5;\n\tif ( iban.length < minimalIBANlength ) {\n\t\treturn false;\n\t}\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please\" );\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number\" );\n\n$.validator.addMethod( \"netmask\", function( value, element ) {\n    return this.optional( element ) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test( value );\n}, \"Please enter a valid netmask.\" );\n\n/*\n * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish\n * authorities to any foreigner.\n *\n * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal\n * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to\n * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.\n */\n$.validator.addMethod( \"nieES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );\n\tvar validChars = \"TRWAGMYFPDXBNJZSQVHLCKET\",\n\t\tletter = value.substr( value.length - 1 ).toUpperCase(),\n\t\tnumber;\n\n\tvalue = value.toString().toUpperCase();\n\n\t// Quick format test\n\tif ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\t// X means same number\n\t// Y means number + 10000000\n\t// Z means number + 20000000\n\tvalue = value.replace( /^[X]/, \"0\" )\n\t\t.replace( /^[Y]/, \"1\" )\n\t\t.replace( /^[Z]/, \"2\" );\n\n\tnumber = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );\n\n\treturn validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 1 ) % 23 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\n/*\n * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies\n */\n$.validator.addMethod( \"nipPL\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.replace( /[^0-9]/g, \"\" );\n\n\tif ( value.length !== 10 ) {\n\t\treturn false;\n\t}\n\n\tvar arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];\n\tvar intSum = 0;\n\tfor ( var i = 0; i < 9; i++ ) {\n\t\tintSum += arrSteps[ i ] * value[ i ];\n\t}\n\tvar int2 = intSum % 11;\n\tvar intControlNr = ( int2 === 10 ) ? 0 : int2;\n\n\treturn ( intControlNr === parseInt( value[ 9 ], 10 ) );\n}, \"Please specify a valid NIP number.\" );\n\n$.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}$/ );\n}, \"Please specify a valid phone number\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\t<input class=\"productinfo\" name=\"color\">\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n *  This is the default - case insensitive, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false,\n *     includeTerritories: false,\n *     includeMilitary: false\n *  }\n *\n *  Only allow capital letters, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false\n *  }\n *\n *  Case insensitive, include territories but not military zones\n *  stateInput: {\n *     includeTerritories: true\n *  }\n *\n *  Only allow capital letters, include territories and military zones\n *  stateInput: {\n *     caseSensitive: true,\n *     includeTerritories: true,\n *     includeMilitary: true\n *  }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n\tif ( v.length !== 17 ) {\n\t\treturn false;\n\t}\n\n\tvar LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n\t\tVL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n\t\tFL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n\t\trs = 0,\n\t\ti, n, d, f, cd, cdv;\n\n\tfor ( i = 0; i < 17; i++ ) {\n\t\tf = FL[ i ];\n\t\td = v.slice( i, i + 1 );\n\t\tif ( i === 8 ) {\n\t\t\tcdv = d;\n\t\t}\n\t\tif ( !isNaN( d ) ) {\n\t\t\td *= f;\n\t\t} else {\n\t\t\tfor ( n = 0; n < LL.length; n++ ) {\n\t\t\t\tif ( d.toUpperCase() === LL[ n ] ) {\n\t\t\t\t\td = VL[ n ];\n\t\t\t\t\td *= f;\n\t\t\t\t\tif ( isNaN( cdv ) && n === 8 ) {\n\t\t\t\t\t\tcdv = LL[ n ];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trs += d;\n\t}\n\tcd = rs % 11;\n\tif ( cd === 10 ) {\n\t\tcd = \"X\";\n\t}\n\tif ( cd === cdv ) {\n\t\treturn true;\n\t}\n\treturn false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx\" );\nreturn $;\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t//   - A user defined a `submitHandler`\n\t\t\t\t\t//   - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t//     was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!$.trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\tif ( typeof val !== \"string\" ) {\n\t\t\t\t\tthrow new TypeError( \"The normalizer should return a string value.\" );\n\t\t\t\t}\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t//     method: \"method name\",\n\t\t//     parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt",
    "content": "Copyright (c) .NET Foundation. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthese files except in compliance with the License. You may obtain a copy of the\nLicense at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js",
    "content": "// Unobtrusive validation support library for jQuery and jQuery Validate\n// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// @version v3.2.11\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // CommonJS-like environments that support module.exports     \n        module.exports = factory(require('jquery-validation'));\n    } else {\n        // Browser global\n        jQuery.validator.unobtrusive = factory(jQuery);\n    }\n}(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\");\n\n        if (container) {\n            var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this),\n            key = '__jquery_unobtrusive_validation_form_reset';\n        if ($form.data(key)) {\n            return;\n        }\n        // Set a flag that indicates we're currently resetting the form.\n        $form.data(key, true);\n        try {\n            $form.data(\"validator\").resetForm();\n        } finally {\n            $form.removeData(key);\n        }\n\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n            .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            };\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                    .addBack()\n                    .filter(\"form\")\n                    .add($selector.find(\"form\"))\n                    .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\n                // For checkboxes and radio buttons, only pick up values from checked fields.\n                if (field.is(\":checkbox\")) {\n                    return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\n                }\n                else if (field.is(\":radio\")) {\n                    return field.filter(\":checked\").val() || '';\n                }\n                return field.val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n    adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\n        setValidationValues(options, \"extension\", options.params.extensions);\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n\n    return $jQval.unobtrusive;\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/css/icons.css",
    "content": "@charset \"UTF-8\";\n/*\nTemplate Name: UBold Dashboard\nAuthor: CoderThemes\nEmail: coderthemes@gmail.com\nFile: Icons\n*/\n/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");\n  src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -15%; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-fw {\n  width: 1.28571em;\n  text-align: center; }\n\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14286em;\n  list-style-type: none; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  position: absolute;\n  left: -2.14286em;\n  width: 2.14286em;\n  top: 0.14286em;\n  text-align: center; }\n  .fa-li.fa-lg {\n    left: -1.85714em; }\n\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eee;\n  border-radius: .1em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left {\n  margin-right: .3em; }\n.fa.fa-pull-right {\n  margin-left: .3em; }\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right; }\n\n.pull-left {\n  float: left; }\n\n.fa.pull-left {\n  margin-right: .3em; }\n.fa.pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none; }\n\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle; }\n\n.fa-stack-1x, .fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\"; }\n\n.fa-music:before {\n  content: \"\"; }\n\n.fa-search:before {\n  content: \"\"; }\n\n.fa-envelope-o:before {\n  content: \"\"; }\n\n.fa-heart:before {\n  content: \"\"; }\n\n.fa-star:before {\n  content: \"\"; }\n\n.fa-star-o:before {\n  content: \"\"; }\n\n.fa-user:before {\n  content: \"\"; }\n\n.fa-film:before {\n  content: \"\"; }\n\n.fa-th-large:before {\n  content: \"\"; }\n\n.fa-th:before {\n  content: \"\"; }\n\n.fa-th-list:before {\n  content: \"\"; }\n\n.fa-check:before {\n  content: \"\"; }\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\"; }\n\n.fa-search-plus:before {\n  content: \"\"; }\n\n.fa-search-minus:before {\n  content: \"\"; }\n\n.fa-power-off:before {\n  content: \"\"; }\n\n.fa-signal:before {\n  content: \"\"; }\n\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\"; }\n\n.fa-trash-o:before {\n  content: \"\"; }\n\n.fa-home:before {\n  content: \"\"; }\n\n.fa-file-o:before {\n  content: \"\"; }\n\n.fa-clock-o:before {\n  content: \"\"; }\n\n.fa-road:before {\n  content: \"\"; }\n\n.fa-download:before {\n  content: \"\"; }\n\n.fa-arrow-circle-o-down:before {\n  content: \"\"; }\n\n.fa-arrow-circle-o-up:before {\n  content: \"\"; }\n\n.fa-inbox:before {\n  content: \"\"; }\n\n.fa-play-circle-o:before {\n  content: \"\"; }\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\"; }\n\n.fa-refresh:before {\n  content: \"\"; }\n\n.fa-list-alt:before {\n  content: \"\"; }\n\n.fa-lock:before {\n  content: \"\"; }\n\n.fa-flag:before {\n  content: \"\"; }\n\n.fa-headphones:before {\n  content: \"\"; }\n\n.fa-volume-off:before {\n  content: \"\"; }\n\n.fa-volume-down:before {\n  content: \"\"; }\n\n.fa-volume-up:before {\n  content: \"\"; }\n\n.fa-qrcode:before {\n  content: \"\"; }\n\n.fa-barcode:before {\n  content: \"\"; }\n\n.fa-tag:before {\n  content: \"\"; }\n\n.fa-tags:before {\n  content: \"\"; }\n\n.fa-book:before {\n  content: \"\"; }\n\n.fa-bookmark:before {\n  content: \"\"; }\n\n.fa-print:before {\n  content: \"\"; }\n\n.fa-camera:before {\n  content: \"\"; }\n\n.fa-font:before {\n  content: \"\"; }\n\n.fa-bold:before {\n  content: \"\"; }\n\n.fa-italic:before {\n  content: \"\"; }\n\n.fa-text-height:before {\n  content: \"\"; }\n\n.fa-text-width:before {\n  content: \"\"; }\n\n.fa-align-left:before {\n  content: \"\"; }\n\n.fa-align-center:before {\n  content: \"\"; }\n\n.fa-align-right:before {\n  content: \"\"; }\n\n.fa-align-justify:before {\n  content: \"\"; }\n\n.fa-list:before {\n  content: \"\"; }\n\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\"; }\n\n.fa-indent:before {\n  content: \"\"; }\n\n.fa-video-camera:before {\n  content: \"\"; }\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\"; }\n\n.fa-pencil:before {\n  content: \"\"; }\n\n.fa-map-marker:before {\n  content: \"\"; }\n\n.fa-adjust:before {\n  content: \"\"; }\n\n.fa-tint:before {\n  content: \"\"; }\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\"; }\n\n.fa-share-square-o:before {\n  content: \"\"; }\n\n.fa-check-square-o:before {\n  content: \"\"; }\n\n.fa-arrows:before {\n  content: \"\"; }\n\n.fa-step-backward:before {\n  content: \"\"; }\n\n.fa-fast-backward:before {\n  content: \"\"; }\n\n.fa-backward:before {\n  content: \"\"; }\n\n.fa-play:before {\n  content: \"\"; }\n\n.fa-pause:before {\n  content: \"\"; }\n\n.fa-stop:before {\n  content: \"\"; }\n\n.fa-forward:before {\n  content: \"\"; }\n\n.fa-fast-forward:before {\n  content: \"\"; }\n\n.fa-step-forward:before {\n  content: \"\"; }\n\n.fa-eject:before {\n  content: \"\"; }\n\n.fa-chevron-left:before {\n  content: \"\"; }\n\n.fa-chevron-right:before {\n  content: \"\"; }\n\n.fa-plus-circle:before {\n  content: \"\"; }\n\n.fa-minus-circle:before {\n  content: \"\"; }\n\n.fa-times-circle:before {\n  content: \"\"; }\n\n.fa-check-circle:before {\n  content: \"\"; }\n\n.fa-question-circle:before {\n  content: \"\"; }\n\n.fa-info-circle:before {\n  content: \"\"; }\n\n.fa-crosshairs:before {\n  content: \"\"; }\n\n.fa-times-circle-o:before {\n  content: \"\"; }\n\n.fa-check-circle-o:before {\n  content: \"\"; }\n\n.fa-ban:before {\n  content: \"\"; }\n\n.fa-arrow-left:before {\n  content: \"\"; }\n\n.fa-arrow-right:before {\n  content: \"\"; }\n\n.fa-arrow-up:before {\n  content: \"\"; }\n\n.fa-arrow-down:before {\n  content: \"\"; }\n\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\"; }\n\n.fa-expand:before {\n  content: \"\"; }\n\n.fa-compress:before {\n  content: \"\"; }\n\n.fa-plus:before {\n  content: \"\"; }\n\n.fa-minus:before {\n  content: \"\"; }\n\n.fa-asterisk:before {\n  content: \"\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\"; }\n\n.fa-gift:before {\n  content: \"\"; }\n\n.fa-leaf:before {\n  content: \"\"; }\n\n.fa-fire:before {\n  content: \"\"; }\n\n.fa-eye:before {\n  content: \"\"; }\n\n.fa-eye-slash:before {\n  content: \"\"; }\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\"; }\n\n.fa-plane:before {\n  content: \"\"; }\n\n.fa-calendar:before {\n  content: \"\"; }\n\n.fa-random:before {\n  content: \"\"; }\n\n.fa-comment:before {\n  content: \"\"; }\n\n.fa-magnet:before {\n  content: \"\"; }\n\n.fa-chevron-up:before {\n  content: \"\"; }\n\n.fa-chevron-down:before {\n  content: \"\"; }\n\n.fa-retweet:before {\n  content: \"\"; }\n\n.fa-shopping-cart:before {\n  content: \"\"; }\n\n.fa-folder:before {\n  content: \"\"; }\n\n.fa-folder-open:before {\n  content: \"\"; }\n\n.fa-arrows-v:before {\n  content: \"\"; }\n\n.fa-arrows-h:before {\n  content: \"\"; }\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\"; }\n\n.fa-twitter-square:before {\n  content: \"\"; }\n\n.fa-facebook-square:before {\n  content: \"\"; }\n\n.fa-camera-retro:before {\n  content: \"\"; }\n\n.fa-key:before {\n  content: \"\"; }\n\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\"; }\n\n.fa-comments:before {\n  content: \"\"; }\n\n.fa-thumbs-o-up:before {\n  content: \"\"; }\n\n.fa-thumbs-o-down:before {\n  content: \"\"; }\n\n.fa-star-half:before {\n  content: \"\"; }\n\n.fa-heart-o:before {\n  content: \"\"; }\n\n.fa-sign-out:before {\n  content: \"\"; }\n\n.fa-linkedin-square:before {\n  content: \"\"; }\n\n.fa-thumb-tack:before {\n  content: \"\"; }\n\n.fa-external-link:before {\n  content: \"\"; }\n\n.fa-sign-in:before {\n  content: \"\"; }\n\n.fa-trophy:before {\n  content: \"\"; }\n\n.fa-github-square:before {\n  content: \"\"; }\n\n.fa-upload:before {\n  content: \"\"; }\n\n.fa-lemon-o:before {\n  content: \"\"; }\n\n.fa-phone:before {\n  content: \"\"; }\n\n.fa-square-o:before {\n  content: \"\"; }\n\n.fa-bookmark-o:before {\n  content: \"\"; }\n\n.fa-phone-square:before {\n  content: \"\"; }\n\n.fa-twitter:before {\n  content: \"\"; }\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\"; }\n\n.fa-github:before {\n  content: \"\"; }\n\n.fa-unlock:before {\n  content: \"\"; }\n\n.fa-credit-card:before {\n  content: \"\"; }\n\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\"; }\n\n.fa-hdd-o:before {\n  content: \"\"; }\n\n.fa-bullhorn:before {\n  content: \"\"; }\n\n.fa-bell:before {\n  content: \"\"; }\n\n.fa-certificate:before {\n  content: \"\"; }\n\n.fa-hand-o-right:before {\n  content: \"\"; }\n\n.fa-hand-o-left:before {\n  content: \"\"; }\n\n.fa-hand-o-up:before {\n  content: \"\"; }\n\n.fa-hand-o-down:before {\n  content: \"\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\"; }\n\n.fa-globe:before {\n  content: \"\"; }\n\n.fa-wrench:before {\n  content: \"\"; }\n\n.fa-tasks:before {\n  content: \"\"; }\n\n.fa-filter:before {\n  content: \"\"; }\n\n.fa-briefcase:before {\n  content: \"\"; }\n\n.fa-arrows-alt:before {\n  content: \"\"; }\n\n.fa-group:before,\n.fa-users:before {\n  content: \"\"; }\n\n.fa-chain:before,\n.fa-link:before {\n  content: \"\"; }\n\n.fa-cloud:before {\n  content: \"\"; }\n\n.fa-flask:before {\n  content: \"\"; }\n\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\"; }\n\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\"; }\n\n.fa-paperclip:before {\n  content: \"\"; }\n\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\"; }\n\n.fa-square:before {\n  content: \"\"; }\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\"; }\n\n.fa-list-ul:before {\n  content: \"\"; }\n\n.fa-list-ol:before {\n  content: \"\"; }\n\n.fa-strikethrough:before {\n  content: \"\"; }\n\n.fa-underline:before {\n  content: \"\"; }\n\n.fa-table:before {\n  content: \"\"; }\n\n.fa-magic:before {\n  content: \"\"; }\n\n.fa-truck:before {\n  content: \"\"; }\n\n.fa-pinterest:before {\n  content: \"\"; }\n\n.fa-pinterest-square:before {\n  content: \"\"; }\n\n.fa-google-plus-square:before {\n  content: \"\"; }\n\n.fa-google-plus:before {\n  content: \"\"; }\n\n.fa-money:before {\n  content: \"\"; }\n\n.fa-caret-down:before {\n  content: \"\"; }\n\n.fa-caret-up:before {\n  content: \"\"; }\n\n.fa-caret-left:before {\n  content: \"\"; }\n\n.fa-caret-right:before {\n  content: \"\"; }\n\n.fa-columns:before {\n  content: \"\"; }\n\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\"; }\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\"; }\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\"; }\n\n.fa-envelope:before {\n  content: \"\"; }\n\n.fa-linkedin:before {\n  content: \"\"; }\n\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\"; }\n\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\"; }\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\"; }\n\n.fa-comment-o:before {\n  content: \"\"; }\n\n.fa-comments-o:before {\n  content: \"\"; }\n\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\"; }\n\n.fa-sitemap:before {\n  content: \"\"; }\n\n.fa-umbrella:before {\n  content: \"\"; }\n\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\"; }\n\n.fa-lightbulb-o:before {\n  content: \"\"; }\n\n.fa-exchange:before {\n  content: \"\"; }\n\n.fa-cloud-download:before {\n  content: \"\"; }\n\n.fa-cloud-upload:before {\n  content: \"\"; }\n\n.fa-user-md:before {\n  content: \"\"; }\n\n.fa-stethoscope:before {\n  content: \"\"; }\n\n.fa-suitcase:before {\n  content: \"\"; }\n\n.fa-bell-o:before {\n  content: \"\"; }\n\n.fa-coffee:before {\n  content: \"\"; }\n\n.fa-cutlery:before {\n  content: \"\"; }\n\n.fa-file-text-o:before {\n  content: \"\"; }\n\n.fa-building-o:before {\n  content: \"\"; }\n\n.fa-hospital-o:before {\n  content: \"\"; }\n\n.fa-ambulance:before {\n  content: \"\"; }\n\n.fa-medkit:before {\n  content: \"\"; }\n\n.fa-fighter-jet:before {\n  content: \"\"; }\n\n.fa-beer:before {\n  content: \"\"; }\n\n.fa-h-square:before {\n  content: \"\"; }\n\n.fa-plus-square:before {\n  content: \"\"; }\n\n.fa-angle-double-left:before {\n  content: \"\"; }\n\n.fa-angle-double-right:before {\n  content: \"\"; }\n\n.fa-angle-double-up:before {\n  content: \"\"; }\n\n.fa-angle-double-down:before {\n  content: \"\"; }\n\n.fa-angle-left:before {\n  content: \"\"; }\n\n.fa-angle-right:before {\n  content: \"\"; }\n\n.fa-angle-up:before {\n  content: \"\"; }\n\n.fa-angle-down:before {\n  content: \"\"; }\n\n.fa-desktop:before {\n  content: \"\"; }\n\n.fa-laptop:before {\n  content: \"\"; }\n\n.fa-tablet:before {\n  content: \"\"; }\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\"; }\n\n.fa-circle-o:before {\n  content: \"\"; }\n\n.fa-quote-left:before {\n  content: \"\"; }\n\n.fa-quote-right:before {\n  content: \"\"; }\n\n.fa-spinner:before {\n  content: \"\"; }\n\n.fa-circle:before {\n  content: \"\"; }\n\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\"; }\n\n.fa-github-alt:before {\n  content: \"\"; }\n\n.fa-folder-o:before {\n  content: \"\"; }\n\n.fa-folder-open-o:before {\n  content: \"\"; }\n\n.fa-smile-o:before {\n  content: \"\"; }\n\n.fa-frown-o:before {\n  content: \"\"; }\n\n.fa-meh-o:before {\n  content: \"\"; }\n\n.fa-gamepad:before {\n  content: \"\"; }\n\n.fa-keyboard-o:before {\n  content: \"\"; }\n\n.fa-flag-o:before {\n  content: \"\"; }\n\n.fa-flag-checkered:before {\n  content: \"\"; }\n\n.fa-terminal:before {\n  content: \"\"; }\n\n.fa-code:before {\n  content: \"\"; }\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\"; }\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\"; }\n\n.fa-location-arrow:before {\n  content: \"\"; }\n\n.fa-crop:before {\n  content: \"\"; }\n\n.fa-code-fork:before {\n  content: \"\"; }\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\"; }\n\n.fa-question:before {\n  content: \"\"; }\n\n.fa-info:before {\n  content: \"\"; }\n\n.fa-exclamation:before {\n  content: \"\"; }\n\n.fa-superscript:before {\n  content: \"\"; }\n\n.fa-subscript:before {\n  content: \"\"; }\n\n.fa-eraser:before {\n  content: \"\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\"; }\n\n.fa-microphone:before {\n  content: \"\"; }\n\n.fa-microphone-slash:before {\n  content: \"\"; }\n\n.fa-shield:before {\n  content: \"\"; }\n\n.fa-calendar-o:before {\n  content: \"\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\"; }\n\n.fa-rocket:before {\n  content: \"\"; }\n\n.fa-maxcdn:before {\n  content: \"\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\"; }\n\n.fa-html5:before {\n  content: \"\"; }\n\n.fa-css3:before {\n  content: \"\"; }\n\n.fa-anchor:before {\n  content: \"\"; }\n\n.fa-unlock-alt:before {\n  content: \"\"; }\n\n.fa-bullseye:before {\n  content: \"\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\"; }\n\n.fa-rss-square:before {\n  content: \"\"; }\n\n.fa-play-circle:before {\n  content: \"\"; }\n\n.fa-ticket:before {\n  content: \"\"; }\n\n.fa-minus-square:before {\n  content: \"\"; }\n\n.fa-minus-square-o:before {\n  content: \"\"; }\n\n.fa-level-up:before {\n  content: \"\"; }\n\n.fa-level-down:before {\n  content: \"\"; }\n\n.fa-check-square:before {\n  content: \"\"; }\n\n.fa-pencil-square:before {\n  content: \"\"; }\n\n.fa-external-link-square:before {\n  content: \"\"; }\n\n.fa-share-square:before {\n  content: \"\"; }\n\n.fa-compass:before {\n  content: \"\"; }\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\"; }\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\"; }\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\"; }\n\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\"; }\n\n.fa-gbp:before {\n  content: \"\"; }\n\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\"; }\n\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\"; }\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\"; }\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\"; }\n\n.fa-won:before,\n.fa-krw:before {\n  content: \"\"; }\n\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\"; }\n\n.fa-file:before {\n  content: \"\"; }\n\n.fa-file-text:before {\n  content: \"\"; }\n\n.fa-sort-alpha-asc:before {\n  content: \"\"; }\n\n.fa-sort-alpha-desc:before {\n  content: \"\"; }\n\n.fa-sort-amount-asc:before {\n  content: \"\"; }\n\n.fa-sort-amount-desc:before {\n  content: \"\"; }\n\n.fa-sort-numeric-asc:before {\n  content: \"\"; }\n\n.fa-sort-numeric-desc:before {\n  content: \"\"; }\n\n.fa-thumbs-up:before {\n  content: \"\"; }\n\n.fa-thumbs-down:before {\n  content: \"\"; }\n\n.fa-youtube-square:before {\n  content: \"\"; }\n\n.fa-youtube:before {\n  content: \"\"; }\n\n.fa-xing:before {\n  content: \"\"; }\n\n.fa-xing-square:before {\n  content: \"\"; }\n\n.fa-youtube-play:before {\n  content: \"\"; }\n\n.fa-dropbox:before {\n  content: \"\"; }\n\n.fa-stack-overflow:before {\n  content: \"\"; }\n\n.fa-instagram:before {\n  content: \"\"; }\n\n.fa-flickr:before {\n  content: \"\"; }\n\n.fa-adn:before {\n  content: \"\"; }\n\n.fa-bitbucket:before {\n  content: \"\"; }\n\n.fa-bitbucket-square:before {\n  content: \"\"; }\n\n.fa-tumblr:before {\n  content: \"\"; }\n\n.fa-tumblr-square:before {\n  content: \"\"; }\n\n.fa-long-arrow-down:before {\n  content: \"\"; }\n\n.fa-long-arrow-up:before {\n  content: \"\"; }\n\n.fa-long-arrow-left:before {\n  content: \"\"; }\n\n.fa-long-arrow-right:before {\n  content: \"\"; }\n\n.fa-apple:before {\n  content: \"\"; }\n\n.fa-windows:before {\n  content: \"\"; }\n\n.fa-android:before {\n  content: \"\"; }\n\n.fa-linux:before {\n  content: \"\"; }\n\n.fa-dribbble:before {\n  content: \"\"; }\n\n.fa-skype:before {\n  content: \"\"; }\n\n.fa-foursquare:before {\n  content: \"\"; }\n\n.fa-trello:before {\n  content: \"\"; }\n\n.fa-female:before {\n  content: \"\"; }\n\n.fa-male:before {\n  content: \"\"; }\n\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\"; }\n\n.fa-sun-o:before {\n  content: \"\"; }\n\n.fa-moon-o:before {\n  content: \"\"; }\n\n.fa-archive:before {\n  content: \"\"; }\n\n.fa-bug:before {\n  content: \"\"; }\n\n.fa-vk:before {\n  content: \"\"; }\n\n.fa-weibo:before {\n  content: \"\"; }\n\n.fa-renren:before {\n  content: \"\"; }\n\n.fa-pagelines:before {\n  content: \"\"; }\n\n.fa-stack-exchange:before {\n  content: \"\"; }\n\n.fa-arrow-circle-o-right:before {\n  content: \"\"; }\n\n.fa-arrow-circle-o-left:before {\n  content: \"\"; }\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\"; }\n\n.fa-dot-circle-o:before {\n  content: \"\"; }\n\n.fa-wheelchair:before {\n  content: \"\"; }\n\n.fa-vimeo-square:before {\n  content: \"\"; }\n\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\"; }\n\n.fa-plus-square-o:before {\n  content: \"\"; }\n\n.fa-space-shuttle:before {\n  content: \"\"; }\n\n.fa-slack:before {\n  content: \"\"; }\n\n.fa-envelope-square:before {\n  content: \"\"; }\n\n.fa-wordpress:before {\n  content: \"\"; }\n\n.fa-openid:before {\n  content: \"\"; }\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\"; }\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\"; }\n\n.fa-yahoo:before {\n  content: \"\"; }\n\n.fa-google:before {\n  content: \"\"; }\n\n.fa-reddit:before {\n  content: \"\"; }\n\n.fa-reddit-square:before {\n  content: \"\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\"; }\n\n.fa-stumbleupon:before {\n  content: \"\"; }\n\n.fa-delicious:before {\n  content: \"\"; }\n\n.fa-digg:before {\n  content: \"\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\"; }\n\n.fa-drupal:before {\n  content: \"\"; }\n\n.fa-joomla:before {\n  content: \"\"; }\n\n.fa-language:before {\n  content: \"\"; }\n\n.fa-fax:before {\n  content: \"\"; }\n\n.fa-building:before {\n  content: \"\"; }\n\n.fa-child:before {\n  content: \"\"; }\n\n.fa-paw:before {\n  content: \"\"; }\n\n.fa-spoon:before {\n  content: \"\"; }\n\n.fa-cube:before {\n  content: \"\"; }\n\n.fa-cubes:before {\n  content: \"\"; }\n\n.fa-behance:before {\n  content: \"\"; }\n\n.fa-behance-square:before {\n  content: \"\"; }\n\n.fa-steam:before {\n  content: \"\"; }\n\n.fa-steam-square:before {\n  content: \"\"; }\n\n.fa-recycle:before {\n  content: \"\"; }\n\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\"; }\n\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\"; }\n\n.fa-tree:before {\n  content: \"\"; }\n\n.fa-spotify:before {\n  content: \"\"; }\n\n.fa-deviantart:before {\n  content: \"\"; }\n\n.fa-soundcloud:before {\n  content: \"\"; }\n\n.fa-database:before {\n  content: \"\"; }\n\n.fa-file-pdf-o:before {\n  content: \"\"; }\n\n.fa-file-word-o:before {\n  content: \"\"; }\n\n.fa-file-excel-o:before {\n  content: \"\"; }\n\n.fa-file-powerpoint-o:before {\n  content: \"\"; }\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\"; }\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\"; }\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\"; }\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\"; }\n\n.fa-file-code-o:before {\n  content: \"\"; }\n\n.fa-vine:before {\n  content: \"\"; }\n\n.fa-codepen:before {\n  content: \"\"; }\n\n.fa-jsfiddle:before {\n  content: \"\"; }\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\"; }\n\n.fa-circle-o-notch:before {\n  content: \"\"; }\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\"; }\n\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\"; }\n\n.fa-git-square:before {\n  content: \"\"; }\n\n.fa-git:before {\n  content: \"\"; }\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\"; }\n\n.fa-qq:before {\n  content: \"\"; }\n\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\"; }\n\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\"; }\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\"; }\n\n.fa-history:before {\n  content: \"\"; }\n\n.fa-circle-thin:before {\n  content: \"\"; }\n\n.fa-header:before {\n  content: \"\"; }\n\n.fa-paragraph:before {\n  content: \"\"; }\n\n.fa-sliders:before {\n  content: \"\"; }\n\n.fa-share-alt:before {\n  content: \"\"; }\n\n.fa-share-alt-square:before {\n  content: \"\"; }\n\n.fa-bomb:before {\n  content: \"\"; }\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\"; }\n\n.fa-tty:before {\n  content: \"\"; }\n\n.fa-binoculars:before {\n  content: \"\"; }\n\n.fa-plug:before {\n  content: \"\"; }\n\n.fa-slideshare:before {\n  content: \"\"; }\n\n.fa-twitch:before {\n  content: \"\"; }\n\n.fa-yelp:before {\n  content: \"\"; }\n\n.fa-newspaper-o:before {\n  content: \"\"; }\n\n.fa-wifi:before {\n  content: \"\"; }\n\n.fa-calculator:before {\n  content: \"\"; }\n\n.fa-paypal:before {\n  content: \"\"; }\n\n.fa-google-wallet:before {\n  content: \"\"; }\n\n.fa-cc-visa:before {\n  content: \"\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\"; }\n\n.fa-cc-discover:before {\n  content: \"\"; }\n\n.fa-cc-amex:before {\n  content: \"\"; }\n\n.fa-cc-paypal:before {\n  content: \"\"; }\n\n.fa-cc-stripe:before {\n  content: \"\"; }\n\n.fa-bell-slash:before {\n  content: \"\"; }\n\n.fa-bell-slash-o:before {\n  content: \"\"; }\n\n.fa-trash:before {\n  content: \"\"; }\n\n.fa-copyright:before {\n  content: \"\"; }\n\n.fa-at:before {\n  content: \"\"; }\n\n.fa-eyedropper:before {\n  content: \"\"; }\n\n.fa-paint-brush:before {\n  content: \"\"; }\n\n.fa-birthday-cake:before {\n  content: \"\"; }\n\n.fa-area-chart:before {\n  content: \"\"; }\n\n.fa-pie-chart:before {\n  content: \"\"; }\n\n.fa-line-chart:before {\n  content: \"\"; }\n\n.fa-lastfm:before {\n  content: \"\"; }\n\n.fa-lastfm-square:before {\n  content: \"\"; }\n\n.fa-toggle-off:before {\n  content: \"\"; }\n\n.fa-toggle-on:before {\n  content: \"\"; }\n\n.fa-bicycle:before {\n  content: \"\"; }\n\n.fa-bus:before {\n  content: \"\"; }\n\n.fa-ioxhost:before {\n  content: \"\"; }\n\n.fa-angellist:before {\n  content: \"\"; }\n\n.fa-cc:before {\n  content: \"\"; }\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\"; }\n\n.fa-meanpath:before {\n  content: \"\"; }\n\n.fa-buysellads:before {\n  content: \"\"; }\n\n.fa-connectdevelop:before {\n  content: \"\"; }\n\n.fa-dashcube:before {\n  content: \"\"; }\n\n.fa-forumbee:before {\n  content: \"\"; }\n\n.fa-leanpub:before {\n  content: \"\"; }\n\n.fa-sellsy:before {\n  content: \"\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\"; }\n\n.fa-simplybuilt:before {\n  content: \"\"; }\n\n.fa-skyatlas:before {\n  content: \"\"; }\n\n.fa-cart-plus:before {\n  content: \"\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\"; }\n\n.fa-diamond:before {\n  content: \"\"; }\n\n.fa-ship:before {\n  content: \"\"; }\n\n.fa-user-secret:before {\n  content: \"\"; }\n\n.fa-motorcycle:before {\n  content: \"\"; }\n\n.fa-street-view:before {\n  content: \"\"; }\n\n.fa-heartbeat:before {\n  content: \"\"; }\n\n.fa-venus:before {\n  content: \"\"; }\n\n.fa-mars:before {\n  content: \"\"; }\n\n.fa-mercury:before {\n  content: \"\"; }\n\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\"; }\n\n.fa-transgender-alt:before {\n  content: \"\"; }\n\n.fa-venus-double:before {\n  content: \"\"; }\n\n.fa-mars-double:before {\n  content: \"\"; }\n\n.fa-venus-mars:before {\n  content: \"\"; }\n\n.fa-mars-stroke:before {\n  content: \"\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\"; }\n\n.fa-neuter:before {\n  content: \"\"; }\n\n.fa-genderless:before {\n  content: \"\"; }\n\n.fa-facebook-official:before {\n  content: \"\"; }\n\n.fa-pinterest-p:before {\n  content: \"\"; }\n\n.fa-whatsapp:before {\n  content: \"\"; }\n\n.fa-server:before {\n  content: \"\"; }\n\n.fa-user-plus:before {\n  content: \"\"; }\n\n.fa-user-times:before {\n  content: \"\"; }\n\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\"; }\n\n.fa-viacoin:before {\n  content: \"\"; }\n\n.fa-train:before {\n  content: \"\"; }\n\n.fa-subway:before {\n  content: \"\"; }\n\n.fa-medium:before {\n  content: \"\"; }\n\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\"; }\n\n.fa-optin-monster:before {\n  content: \"\"; }\n\n.fa-opencart:before {\n  content: \"\"; }\n\n.fa-expeditedssl:before {\n  content: \"\"; }\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\"; }\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\"; }\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\"; }\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\"; }\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\"; }\n\n.fa-i-cursor:before {\n  content: \"\"; }\n\n.fa-object-group:before {\n  content: \"\"; }\n\n.fa-object-ungroup:before {\n  content: \"\"; }\n\n.fa-sticky-note:before {\n  content: \"\"; }\n\n.fa-sticky-note-o:before {\n  content: \"\"; }\n\n.fa-cc-jcb:before {\n  content: \"\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\"; }\n\n.fa-clone:before {\n  content: \"\"; }\n\n.fa-balance-scale:before {\n  content: \"\"; }\n\n.fa-hourglass-o:before {\n  content: \"\"; }\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\"; }\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\"; }\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\"; }\n\n.fa-hourglass:before {\n  content: \"\"; }\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\"; }\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\"; }\n\n.fa-hand-scissors-o:before {\n  content: \"\"; }\n\n.fa-hand-lizard-o:before {\n  content: \"\"; }\n\n.fa-hand-spock-o:before {\n  content: \"\"; }\n\n.fa-hand-pointer-o:before {\n  content: \"\"; }\n\n.fa-hand-peace-o:before {\n  content: \"\"; }\n\n.fa-trademark:before {\n  content: \"\"; }\n\n.fa-registered:before {\n  content: \"\"; }\n\n.fa-creative-commons:before {\n  content: \"\"; }\n\n.fa-gg:before {\n  content: \"\"; }\n\n.fa-gg-circle:before {\n  content: \"\"; }\n\n.fa-tripadvisor:before {\n  content: \"\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\"; }\n\n.fa-get-pocket:before {\n  content: \"\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\"; }\n\n.fa-safari:before {\n  content: \"\"; }\n\n.fa-chrome:before {\n  content: \"\"; }\n\n.fa-firefox:before {\n  content: \"\"; }\n\n.fa-opera:before {\n  content: \"\"; }\n\n.fa-internet-explorer:before {\n  content: \"\"; }\n\n.fa-tv:before,\n.fa-television:before {\n  content: \"\"; }\n\n.fa-contao:before {\n  content: \"\"; }\n\n.fa-500px:before {\n  content: \"\"; }\n\n.fa-amazon:before {\n  content: \"\"; }\n\n.fa-calendar-plus-o:before {\n  content: \"\"; }\n\n.fa-calendar-minus-o:before {\n  content: \"\"; }\n\n.fa-calendar-times-o:before {\n  content: \"\"; }\n\n.fa-calendar-check-o:before {\n  content: \"\"; }\n\n.fa-industry:before {\n  content: \"\"; }\n\n.fa-map-pin:before {\n  content: \"\"; }\n\n.fa-map-signs:before {\n  content: \"\"; }\n\n.fa-map-o:before {\n  content: \"\"; }\n\n.fa-map:before {\n  content: \"\"; }\n\n.fa-commenting:before {\n  content: \"\"; }\n\n.fa-commenting-o:before {\n  content: \"\"; }\n\n.fa-houzz:before {\n  content: \"\"; }\n\n.fa-vimeo:before {\n  content: \"\"; }\n\n.fa-black-tie:before {\n  content: \"\"; }\n\n.fa-fonticons:before {\n  content: \"\"; }\n\n.fa-reddit-alien:before {\n  content: \"\"; }\n\n.fa-edge:before {\n  content: \"\"; }\n\n.fa-credit-card-alt:before {\n  content: \"\"; }\n\n.fa-codiepie:before {\n  content: \"\"; }\n\n.fa-modx:before {\n  content: \"\"; }\n\n.fa-fort-awesome:before {\n  content: \"\"; }\n\n.fa-usb:before {\n  content: \"\"; }\n\n.fa-product-hunt:before {\n  content: \"\"; }\n\n.fa-mixcloud:before {\n  content: \"\"; }\n\n.fa-scribd:before {\n  content: \"\"; }\n\n.fa-pause-circle:before {\n  content: \"\"; }\n\n.fa-pause-circle-o:before {\n  content: \"\"; }\n\n.fa-stop-circle:before {\n  content: \"\"; }\n\n.fa-stop-circle-o:before {\n  content: \"\"; }\n\n.fa-shopping-bag:before {\n  content: \"\"; }\n\n.fa-shopping-basket:before {\n  content: \"\"; }\n\n.fa-hashtag:before {\n  content: \"\"; }\n\n.fa-bluetooth:before {\n  content: \"\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\"; }\n\n.fa-percent:before {\n  content: \"\"; }\n\n.fa-gitlab:before {\n  content: \"\"; }\n\n.fa-wpbeginner:before {\n  content: \"\"; }\n\n.fa-wpforms:before {\n  content: \"\"; }\n\n.fa-envira:before {\n  content: \"\"; }\n\n.fa-universal-access:before {\n  content: \"\"; }\n\n.fa-wheelchair-alt:before {\n  content: \"\"; }\n\n.fa-question-circle-o:before {\n  content: \"\"; }\n\n.fa-blind:before {\n  content: \"\"; }\n\n.fa-audio-description:before {\n  content: \"\"; }\n\n.fa-volume-control-phone:before {\n  content: \"\"; }\n\n.fa-braille:before {\n  content: \"\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\"; }\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\"; }\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\"; }\n\n.fa-glide:before {\n  content: \"\"; }\n\n.fa-glide-g:before {\n  content: \"\"; }\n\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\"; }\n\n.fa-low-vision:before {\n  content: \"\"; }\n\n.fa-viadeo:before {\n  content: \"\"; }\n\n.fa-viadeo-square:before {\n  content: \"\"; }\n\n.fa-snapchat:before {\n  content: \"\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\"; }\n\n.fa-snapchat-square:before {\n  content: \"\"; }\n\n.fa-pied-piper:before {\n  content: \"\"; }\n\n.fa-first-order:before {\n  content: \"\"; }\n\n.fa-yoast:before {\n  content: \"\"; }\n\n.fa-themeisle:before {\n  content: \"\"; }\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\"; }\n\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\"; }\n\n.fa-handshake-o:before {\n  content: \"\"; }\n\n.fa-envelope-open:before {\n  content: \"\"; }\n\n.fa-envelope-open-o:before {\n  content: \"\"; }\n\n.fa-linode:before {\n  content: \"\"; }\n\n.fa-address-book:before {\n  content: \"\"; }\n\n.fa-address-book-o:before {\n  content: \"\"; }\n\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\"; }\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\"; }\n\n.fa-user-circle:before {\n  content: \"\"; }\n\n.fa-user-circle-o:before {\n  content: \"\"; }\n\n.fa-user-o:before {\n  content: \"\"; }\n\n.fa-id-badge:before {\n  content: \"\"; }\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\"; }\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\"; }\n\n.fa-quora:before {\n  content: \"\"; }\n\n.fa-free-code-camp:before {\n  content: \"\"; }\n\n.fa-telegram:before {\n  content: \"\"; }\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\"; }\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\"; }\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\"; }\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\"; }\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\"; }\n\n.fa-shower:before {\n  content: \"\"; }\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\"; }\n\n.fa-podcast:before {\n  content: \"\"; }\n\n.fa-window-maximize:before {\n  content: \"\"; }\n\n.fa-window-minimize:before {\n  content: \"\"; }\n\n.fa-window-restore:before {\n  content: \"\"; }\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\"; }\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\"; }\n\n.fa-bandcamp:before {\n  content: \"\"; }\n\n.fa-grav:before {\n  content: \"\"; }\n\n.fa-etsy:before {\n  content: \"\"; }\n\n.fa-imdb:before {\n  content: \"\"; }\n\n.fa-ravelry:before {\n  content: \"\"; }\n\n.fa-eercast:before {\n  content: \"\"; }\n\n.fa-microchip:before {\n  content: \"\"; }\n\n.fa-snowflake-o:before {\n  content: \"\"; }\n\n.fa-superpowers:before {\n  content: \"\"; }\n\n.fa-wpexplorer:before {\n  content: \"\"; }\n\n.fa-meetup:before {\n  content: \"\"; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto; }\n\n@font-face {\n  font-family: 'themify';\n  src: url(\"../fonts/themify.eot?-fvbane\");\n  src: url(\"../fonts/themify.eot?#iefix-fvbane\") format(\"embedded-opentype\"), url(\"../fonts/themify.woff?-fvbane\") format(\"woff\"), url(\"../fonts/themify.ttf?-fvbane\") format(\"truetype\"), url(\"../fonts/themify.svg?-fvbane#themify\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n[class^=\"ti-\"], [class*=\" ti-\"] {\n  font-family: 'themify';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ti-wand:before {\n  content: \"\\e600\"; }\n\n.ti-volume:before {\n  content: \"\\e601\"; }\n\n.ti-user:before {\n  content: \"\\e602\"; }\n\n.ti-unlock:before {\n  content: \"\\e603\"; }\n\n.ti-unlink:before {\n  content: \"\\e604\"; }\n\n.ti-trash:before {\n  content: \"\\e605\"; }\n\n.ti-thought:before {\n  content: \"\\e606\"; }\n\n.ti-target:before {\n  content: \"\\e607\"; }\n\n.ti-tag:before {\n  content: \"\\e608\"; }\n\n.ti-tablet:before {\n  content: \"\\e609\"; }\n\n.ti-star:before {\n  content: \"\\e60a\"; }\n\n.ti-spray:before {\n  content: \"\\e60b\"; }\n\n.ti-signal:before {\n  content: \"\\e60c\"; }\n\n.ti-shopping-cart:before {\n  content: \"\\e60d\"; }\n\n.ti-shopping-cart-full:before {\n  content: \"\\e60e\"; }\n\n.ti-settings:before {\n  content: \"\\e60f\"; }\n\n.ti-search:before {\n  content: \"\\e610\"; }\n\n.ti-zoom-in:before {\n  content: \"\\e611\"; }\n\n.ti-zoom-out:before {\n  content: \"\\e612\"; }\n\n.ti-cut:before {\n  content: \"\\e613\"; }\n\n.ti-ruler:before {\n  content: \"\\e614\"; }\n\n.ti-ruler-pencil:before {\n  content: \"\\e615\"; }\n\n.ti-ruler-alt:before {\n  content: \"\\e616\"; }\n\n.ti-bookmark:before {\n  content: \"\\e617\"; }\n\n.ti-bookmark-alt:before {\n  content: \"\\e618\"; }\n\n.ti-reload:before {\n  content: \"\\e619\"; }\n\n.ti-plus:before {\n  content: \"\\e61a\"; }\n\n.ti-pin:before {\n  content: \"\\e61b\"; }\n\n.ti-pencil:before {\n  content: \"\\e61c\"; }\n\n.ti-pencil-alt:before {\n  content: \"\\e61d\"; }\n\n.ti-paint-roller:before {\n  content: \"\\e61e\"; }\n\n.ti-paint-bucket:before {\n  content: \"\\e61f\"; }\n\n.ti-na:before {\n  content: \"\\e620\"; }\n\n.ti-mobile:before {\n  content: \"\\e621\"; }\n\n.ti-minus:before {\n  content: \"\\e622\"; }\n\n.ti-medall:before {\n  content: \"\\e623\"; }\n\n.ti-medall-alt:before {\n  content: \"\\e624\"; }\n\n.ti-marker:before {\n  content: \"\\e625\"; }\n\n.ti-marker-alt:before {\n  content: \"\\e626\"; }\n\n.ti-arrow-up:before {\n  content: \"\\e627\"; }\n\n.ti-arrow-right:before {\n  content: \"\\e628\"; }\n\n.ti-arrow-left:before {\n  content: \"\\e629\"; }\n\n.ti-arrow-down:before {\n  content: \"\\e62a\"; }\n\n.ti-lock:before {\n  content: \"\\e62b\"; }\n\n.ti-location-arrow:before {\n  content: \"\\e62c\"; }\n\n.ti-link:before {\n  content: \"\\e62d\"; }\n\n.ti-layout:before {\n  content: \"\\e62e\"; }\n\n.ti-layers:before {\n  content: \"\\e62f\"; }\n\n.ti-layers-alt:before {\n  content: \"\\e630\"; }\n\n.ti-key:before {\n  content: \"\\e631\"; }\n\n.ti-import:before {\n  content: \"\\e632\"; }\n\n.ti-image:before {\n  content: \"\\e633\"; }\n\n.ti-heart:before {\n  content: \"\\e634\"; }\n\n.ti-heart-broken:before {\n  content: \"\\e635\"; }\n\n.ti-hand-stop:before {\n  content: \"\\e636\"; }\n\n.ti-hand-open:before {\n  content: \"\\e637\"; }\n\n.ti-hand-drag:before {\n  content: \"\\e638\"; }\n\n.ti-folder:before {\n  content: \"\\e639\"; }\n\n.ti-flag:before {\n  content: \"\\e63a\"; }\n\n.ti-flag-alt:before {\n  content: \"\\e63b\"; }\n\n.ti-flag-alt-2:before {\n  content: \"\\e63c\"; }\n\n.ti-eye:before {\n  content: \"\\e63d\"; }\n\n.ti-export:before {\n  content: \"\\e63e\"; }\n\n.ti-exchange-vertical:before {\n  content: \"\\e63f\"; }\n\n.ti-desktop:before {\n  content: \"\\e640\"; }\n\n.ti-cup:before {\n  content: \"\\e641\"; }\n\n.ti-crown:before {\n  content: \"\\e642\"; }\n\n.ti-comments:before {\n  content: \"\\e643\"; }\n\n.ti-comment:before {\n  content: \"\\e644\"; }\n\n.ti-comment-alt:before {\n  content: \"\\e645\"; }\n\n.ti-close:before {\n  content: \"\\e646\"; }\n\n.ti-clip:before {\n  content: \"\\e647\"; }\n\n.ti-angle-up:before {\n  content: \"\\e648\"; }\n\n.ti-angle-right:before {\n  content: \"\\e649\"; }\n\n.ti-angle-left:before {\n  content: \"\\e64a\"; }\n\n.ti-angle-down:before {\n  content: \"\\e64b\"; }\n\n.ti-check:before {\n  content: \"\\e64c\"; }\n\n.ti-check-box:before {\n  content: \"\\e64d\"; }\n\n.ti-camera:before {\n  content: \"\\e64e\"; }\n\n.ti-announcement:before {\n  content: \"\\e64f\"; }\n\n.ti-brush:before {\n  content: \"\\e650\"; }\n\n.ti-briefcase:before {\n  content: \"\\e651\"; }\n\n.ti-bolt:before {\n  content: \"\\e652\"; }\n\n.ti-bolt-alt:before {\n  content: \"\\e653\"; }\n\n.ti-blackboard:before {\n  content: \"\\e654\"; }\n\n.ti-bag:before {\n  content: \"\\e655\"; }\n\n.ti-move:before {\n  content: \"\\e656\"; }\n\n.ti-arrows-vertical:before {\n  content: \"\\e657\"; }\n\n.ti-arrows-horizontal:before {\n  content: \"\\e658\"; }\n\n.ti-fullscreen:before {\n  content: \"\\e659\"; }\n\n.ti-arrow-top-right:before {\n  content: \"\\e65a\"; }\n\n.ti-arrow-top-left:before {\n  content: \"\\e65b\"; }\n\n.ti-arrow-circle-up:before {\n  content: \"\\e65c\"; }\n\n.ti-arrow-circle-right:before {\n  content: \"\\e65d\"; }\n\n.ti-arrow-circle-left:before {\n  content: \"\\e65e\"; }\n\n.ti-arrow-circle-down:before {\n  content: \"\\e65f\"; }\n\n.ti-angle-double-up:before {\n  content: \"\\e660\"; }\n\n.ti-angle-double-right:before {\n  content: \"\\e661\"; }\n\n.ti-angle-double-left:before {\n  content: \"\\e662\"; }\n\n.ti-angle-double-down:before {\n  content: \"\\e663\"; }\n\n.ti-zip:before {\n  content: \"\\e664\"; }\n\n.ti-world:before {\n  content: \"\\e665\"; }\n\n.ti-wheelchair:before {\n  content: \"\\e666\"; }\n\n.ti-view-list:before {\n  content: \"\\e667\"; }\n\n.ti-view-list-alt:before {\n  content: \"\\e668\"; }\n\n.ti-view-grid:before {\n  content: \"\\e669\"; }\n\n.ti-uppercase:before {\n  content: \"\\e66a\"; }\n\n.ti-upload:before {\n  content: \"\\e66b\"; }\n\n.ti-underline:before {\n  content: \"\\e66c\"; }\n\n.ti-truck:before {\n  content: \"\\e66d\"; }\n\n.ti-timer:before {\n  content: \"\\e66e\"; }\n\n.ti-ticket:before {\n  content: \"\\e66f\"; }\n\n.ti-thumb-up:before {\n  content: \"\\e670\"; }\n\n.ti-thumb-down:before {\n  content: \"\\e671\"; }\n\n.ti-text:before {\n  content: \"\\e672\"; }\n\n.ti-stats-up:before {\n  content: \"\\e673\"; }\n\n.ti-stats-down:before {\n  content: \"\\e674\"; }\n\n.ti-split-v:before {\n  content: \"\\e675\"; }\n\n.ti-split-h:before {\n  content: \"\\e676\"; }\n\n.ti-smallcap:before {\n  content: \"\\e677\"; }\n\n.ti-shine:before {\n  content: \"\\e678\"; }\n\n.ti-shift-right:before {\n  content: \"\\e679\"; }\n\n.ti-shift-left:before {\n  content: \"\\e67a\"; }\n\n.ti-shield:before {\n  content: \"\\e67b\"; }\n\n.ti-notepad:before {\n  content: \"\\e67c\"; }\n\n.ti-server:before {\n  content: \"\\e67d\"; }\n\n.ti-quote-right:before {\n  content: \"\\e67e\"; }\n\n.ti-quote-left:before {\n  content: \"\\e67f\"; }\n\n.ti-pulse:before {\n  content: \"\\e680\"; }\n\n.ti-printer:before {\n  content: \"\\e681\"; }\n\n.ti-power-off:before {\n  content: \"\\e682\"; }\n\n.ti-plug:before {\n  content: \"\\e683\"; }\n\n.ti-pie-chart:before {\n  content: \"\\e684\"; }\n\n.ti-paragraph:before {\n  content: \"\\e685\"; }\n\n.ti-panel:before {\n  content: \"\\e686\"; }\n\n.ti-package:before {\n  content: \"\\e687\"; }\n\n.ti-music:before {\n  content: \"\\e688\"; }\n\n.ti-music-alt:before {\n  content: \"\\e689\"; }\n\n.ti-mouse:before {\n  content: \"\\e68a\"; }\n\n.ti-mouse-alt:before {\n  content: \"\\e68b\"; }\n\n.ti-money:before {\n  content: \"\\e68c\"; }\n\n.ti-microphone:before {\n  content: \"\\e68d\"; }\n\n.ti-menu:before {\n  content: \"\\e68e\"; }\n\n.ti-menu-alt:before {\n  content: \"\\e68f\"; }\n\n.ti-map:before {\n  content: \"\\e690\"; }\n\n.ti-map-alt:before {\n  content: \"\\e691\"; }\n\n.ti-loop:before {\n  content: \"\\e692\"; }\n\n.ti-location-pin:before {\n  content: \"\\e693\"; }\n\n.ti-list:before {\n  content: \"\\e694\"; }\n\n.ti-light-bulb:before {\n  content: \"\\e695\"; }\n\n.ti-Italic:before {\n  content: \"\\e696\"; }\n\n.ti-info:before {\n  content: \"\\e697\"; }\n\n.ti-infinite:before {\n  content: \"\\e698\"; }\n\n.ti-id-badge:before {\n  content: \"\\e699\"; }\n\n.ti-hummer:before {\n  content: \"\\e69a\"; }\n\n.ti-home:before {\n  content: \"\\e69b\"; }\n\n.ti-help:before {\n  content: \"\\e69c\"; }\n\n.ti-headphone:before {\n  content: \"\\e69d\"; }\n\n.ti-harddrives:before {\n  content: \"\\e69e\"; }\n\n.ti-harddrive:before {\n  content: \"\\e69f\"; }\n\n.ti-gift:before {\n  content: \"\\e6a0\"; }\n\n.ti-game:before {\n  content: \"\\e6a1\"; }\n\n.ti-filter:before {\n  content: \"\\e6a2\"; }\n\n.ti-files:before {\n  content: \"\\e6a3\"; }\n\n.ti-file:before {\n  content: \"\\e6a4\"; }\n\n.ti-eraser:before {\n  content: \"\\e6a5\"; }\n\n.ti-envelope:before {\n  content: \"\\e6a6\"; }\n\n.ti-download:before {\n  content: \"\\e6a7\"; }\n\n.ti-direction:before {\n  content: \"\\e6a8\"; }\n\n.ti-direction-alt:before {\n  content: \"\\e6a9\"; }\n\n.ti-dashboard:before {\n  content: \"\\e6aa\"; }\n\n.ti-control-stop:before {\n  content: \"\\e6ab\"; }\n\n.ti-control-shuffle:before {\n  content: \"\\e6ac\"; }\n\n.ti-control-play:before {\n  content: \"\\e6ad\"; }\n\n.ti-control-pause:before {\n  content: \"\\e6ae\"; }\n\n.ti-control-forward:before {\n  content: \"\\e6af\"; }\n\n.ti-control-backward:before {\n  content: \"\\e6b0\"; }\n\n.ti-cloud:before {\n  content: \"\\e6b1\"; }\n\n.ti-cloud-up:before {\n  content: \"\\e6b2\"; }\n\n.ti-cloud-down:before {\n  content: \"\\e6b3\"; }\n\n.ti-clipboard:before {\n  content: \"\\e6b4\"; }\n\n.ti-car:before {\n  content: \"\\e6b5\"; }\n\n.ti-calendar:before {\n  content: \"\\e6b6\"; }\n\n.ti-book:before {\n  content: \"\\e6b7\"; }\n\n.ti-bell:before {\n  content: \"\\e6b8\"; }\n\n.ti-basketball:before {\n  content: \"\\e6b9\"; }\n\n.ti-bar-chart:before {\n  content: \"\\e6ba\"; }\n\n.ti-bar-chart-alt:before {\n  content: \"\\e6bb\"; }\n\n.ti-back-right:before {\n  content: \"\\e6bc\"; }\n\n.ti-back-left:before {\n  content: \"\\e6bd\"; }\n\n.ti-arrows-corner:before {\n  content: \"\\e6be\"; }\n\n.ti-archive:before {\n  content: \"\\e6bf\"; }\n\n.ti-anchor:before {\n  content: \"\\e6c0\"; }\n\n.ti-align-right:before {\n  content: \"\\e6c1\"; }\n\n.ti-align-left:before {\n  content: \"\\e6c2\"; }\n\n.ti-align-justify:before {\n  content: \"\\e6c3\"; }\n\n.ti-align-center:before {\n  content: \"\\e6c4\"; }\n\n.ti-alert:before {\n  content: \"\\e6c5\"; }\n\n.ti-alarm-clock:before {\n  content: \"\\e6c6\"; }\n\n.ti-agenda:before {\n  content: \"\\e6c7\"; }\n\n.ti-write:before {\n  content: \"\\e6c8\"; }\n\n.ti-window:before {\n  content: \"\\e6c9\"; }\n\n.ti-widgetized:before {\n  content: \"\\e6ca\"; }\n\n.ti-widget:before {\n  content: \"\\e6cb\"; }\n\n.ti-widget-alt:before {\n  content: \"\\e6cc\"; }\n\n.ti-wallet:before {\n  content: \"\\e6cd\"; }\n\n.ti-video-clapper:before {\n  content: \"\\e6ce\"; }\n\n.ti-video-camera:before {\n  content: \"\\e6cf\"; }\n\n.ti-vector:before {\n  content: \"\\e6d0\"; }\n\n.ti-themify-logo:before {\n  content: \"\\e6d1\"; }\n\n.ti-themify-favicon:before {\n  content: \"\\e6d2\"; }\n\n.ti-themify-favicon-alt:before {\n  content: \"\\e6d3\"; }\n\n.ti-support:before {\n  content: \"\\e6d4\"; }\n\n.ti-stamp:before {\n  content: \"\\e6d5\"; }\n\n.ti-split-v-alt:before {\n  content: \"\\e6d6\"; }\n\n.ti-slice:before {\n  content: \"\\e6d7\"; }\n\n.ti-shortcode:before {\n  content: \"\\e6d8\"; }\n\n.ti-shift-right-alt:before {\n  content: \"\\e6d9\"; }\n\n.ti-shift-left-alt:before {\n  content: \"\\e6da\"; }\n\n.ti-ruler-alt-2:before {\n  content: \"\\e6db\"; }\n\n.ti-receipt:before {\n  content: \"\\e6dc\"; }\n\n.ti-pin2:before {\n  content: \"\\e6dd\"; }\n\n.ti-pin-alt:before {\n  content: \"\\e6de\"; }\n\n.ti-pencil-alt2:before {\n  content: \"\\e6df\"; }\n\n.ti-palette:before {\n  content: \"\\e6e0\"; }\n\n.ti-more:before {\n  content: \"\\e6e1\"; }\n\n.ti-more-alt:before {\n  content: \"\\e6e2\"; }\n\n.ti-microphone-alt:before {\n  content: \"\\e6e3\"; }\n\n.ti-magnet:before {\n  content: \"\\e6e4\"; }\n\n.ti-line-double:before {\n  content: \"\\e6e5\"; }\n\n.ti-line-dotted:before {\n  content: \"\\e6e6\"; }\n\n.ti-line-dashed:before {\n  content: \"\\e6e7\"; }\n\n.ti-layout-width-full:before {\n  content: \"\\e6e8\"; }\n\n.ti-layout-width-default:before {\n  content: \"\\e6e9\"; }\n\n.ti-layout-width-default-alt:before {\n  content: \"\\e6ea\"; }\n\n.ti-layout-tab:before {\n  content: \"\\e6eb\"; }\n\n.ti-layout-tab-window:before {\n  content: \"\\e6ec\"; }\n\n.ti-layout-tab-v:before {\n  content: \"\\e6ed\"; }\n\n.ti-layout-tab-min:before {\n  content: \"\\e6ee\"; }\n\n.ti-layout-slider:before {\n  content: \"\\e6ef\"; }\n\n.ti-layout-slider-alt:before {\n  content: \"\\e6f0\"; }\n\n.ti-layout-sidebar-right:before {\n  content: \"\\e6f1\"; }\n\n.ti-layout-sidebar-none:before {\n  content: \"\\e6f2\"; }\n\n.ti-layout-sidebar-left:before {\n  content: \"\\e6f3\"; }\n\n.ti-layout-placeholder:before {\n  content: \"\\e6f4\"; }\n\n.ti-layout-menu:before {\n  content: \"\\e6f5\"; }\n\n.ti-layout-menu-v:before {\n  content: \"\\e6f6\"; }\n\n.ti-layout-menu-separated:before {\n  content: \"\\e6f7\"; }\n\n.ti-layout-menu-full:before {\n  content: \"\\e6f8\"; }\n\n.ti-layout-media-right-alt:before {\n  content: \"\\e6f9\"; }\n\n.ti-layout-media-right:before {\n  content: \"\\e6fa\"; }\n\n.ti-layout-media-overlay:before {\n  content: \"\\e6fb\"; }\n\n.ti-layout-media-overlay-alt:before {\n  content: \"\\e6fc\"; }\n\n.ti-layout-media-overlay-alt-2:before {\n  content: \"\\e6fd\"; }\n\n.ti-layout-media-left-alt:before {\n  content: \"\\e6fe\"; }\n\n.ti-layout-media-left:before {\n  content: \"\\e6ff\"; }\n\n.ti-layout-media-center-alt:before {\n  content: \"\\e700\"; }\n\n.ti-layout-media-center:before {\n  content: \"\\e701\"; }\n\n.ti-layout-list-thumb:before {\n  content: \"\\e702\"; }\n\n.ti-layout-list-thumb-alt:before {\n  content: \"\\e703\"; }\n\n.ti-layout-list-post:before {\n  content: \"\\e704\"; }\n\n.ti-layout-list-large-image:before {\n  content: \"\\e705\"; }\n\n.ti-layout-line-solid:before {\n  content: \"\\e706\"; }\n\n.ti-layout-grid4:before {\n  content: \"\\e707\"; }\n\n.ti-layout-grid3:before {\n  content: \"\\e708\"; }\n\n.ti-layout-grid2:before {\n  content: \"\\e709\"; }\n\n.ti-layout-grid2-thumb:before {\n  content: \"\\e70a\"; }\n\n.ti-layout-cta-right:before {\n  content: \"\\e70b\"; }\n\n.ti-layout-cta-left:before {\n  content: \"\\e70c\"; }\n\n.ti-layout-cta-center:before {\n  content: \"\\e70d\"; }\n\n.ti-layout-cta-btn-right:before {\n  content: \"\\e70e\"; }\n\n.ti-layout-cta-btn-left:before {\n  content: \"\\e70f\"; }\n\n.ti-layout-column4:before {\n  content: \"\\e710\"; }\n\n.ti-layout-column3:before {\n  content: \"\\e711\"; }\n\n.ti-layout-column2:before {\n  content: \"\\e712\"; }\n\n.ti-layout-accordion-separated:before {\n  content: \"\\e713\"; }\n\n.ti-layout-accordion-merged:before {\n  content: \"\\e714\"; }\n\n.ti-layout-accordion-list:before {\n  content: \"\\e715\"; }\n\n.ti-ink-pen:before {\n  content: \"\\e716\"; }\n\n.ti-info-alt:before {\n  content: \"\\e717\"; }\n\n.ti-help-alt:before {\n  content: \"\\e718\"; }\n\n.ti-headphone-alt:before {\n  content: \"\\e719\"; }\n\n.ti-hand-point-up:before {\n  content: \"\\e71a\"; }\n\n.ti-hand-point-right:before {\n  content: \"\\e71b\"; }\n\n.ti-hand-point-left:before {\n  content: \"\\e71c\"; }\n\n.ti-hand-point-down:before {\n  content: \"\\e71d\"; }\n\n.ti-gallery:before {\n  content: \"\\e71e\"; }\n\n.ti-face-smile:before {\n  content: \"\\e71f\"; }\n\n.ti-face-sad:before {\n  content: \"\\e720\"; }\n\n.ti-credit-card:before {\n  content: \"\\e721\"; }\n\n.ti-control-skip-forward:before {\n  content: \"\\e722\"; }\n\n.ti-control-skip-backward:before {\n  content: \"\\e723\"; }\n\n.ti-control-record:before {\n  content: \"\\e724\"; }\n\n.ti-control-eject:before {\n  content: \"\\e725\"; }\n\n.ti-comments-smiley:before {\n  content: \"\\e726\"; }\n\n.ti-brush-alt:before {\n  content: \"\\e727\"; }\n\n.ti-youtube:before {\n  content: \"\\e728\"; }\n\n.ti-vimeo:before {\n  content: \"\\e729\"; }\n\n.ti-twitter:before {\n  content: \"\\e72a\"; }\n\n.ti-time:before {\n  content: \"\\e72b\"; }\n\n.ti-tumblr:before {\n  content: \"\\e72c\"; }\n\n.ti-skype:before {\n  content: \"\\e72d\"; }\n\n.ti-share:before {\n  content: \"\\e72e\"; }\n\n.ti-share-alt:before {\n  content: \"\\e72f\"; }\n\n.ti-rocket:before {\n  content: \"\\e730\"; }\n\n.ti-pinterest:before {\n  content: \"\\e731\"; }\n\n.ti-new-window:before {\n  content: \"\\e732\"; }\n\n.ti-microsoft:before {\n  content: \"\\e733\"; }\n\n.ti-list-ol:before {\n  content: \"\\e734\"; }\n\n.ti-linkedin:before {\n  content: \"\\e735\"; }\n\n.ti-layout-sidebar-2:before {\n  content: \"\\e736\"; }\n\n.ti-layout-grid4-alt:before {\n  content: \"\\e737\"; }\n\n.ti-layout-grid3-alt:before {\n  content: \"\\e738\"; }\n\n.ti-layout-grid2-alt:before {\n  content: \"\\e739\"; }\n\n.ti-layout-column4-alt:before {\n  content: \"\\e73a\"; }\n\n.ti-layout-column3-alt:before {\n  content: \"\\e73b\"; }\n\n.ti-layout-column2-alt:before {\n  content: \"\\e73c\"; }\n\n.ti-instagram:before {\n  content: \"\\e73d\"; }\n\n.ti-google:before {\n  content: \"\\e73e\"; }\n\n.ti-github:before {\n  content: \"\\e73f\"; }\n\n.ti-flickr:before {\n  content: \"\\e740\"; }\n\n.ti-facebook:before {\n  content: \"\\e741\"; }\n\n.ti-dropbox:before {\n  content: \"\\e742\"; }\n\n.ti-dribbble:before {\n  content: \"\\e743\"; }\n\n.ti-apple:before {\n  content: \"\\e744\"; }\n\n.ti-android:before {\n  content: \"\\e745\"; }\n\n.ti-save:before {\n  content: \"\\e746\"; }\n\n.ti-save-alt:before {\n  content: \"\\e747\"; }\n\n.ti-yahoo:before {\n  content: \"\\e748\"; }\n\n.ti-wordpress:before {\n  content: \"\\e749\"; }\n\n.ti-vimeo-alt:before {\n  content: \"\\e74a\"; }\n\n.ti-twitter-alt:before {\n  content: \"\\e74b\"; }\n\n.ti-tumblr-alt:before {\n  content: \"\\e74c\"; }\n\n.ti-trello:before {\n  content: \"\\e74d\"; }\n\n.ti-stack-overflow:before {\n  content: \"\\e74e\"; }\n\n.ti-soundcloud:before {\n  content: \"\\e74f\"; }\n\n.ti-sharethis:before {\n  content: \"\\e750\"; }\n\n.ti-sharethis-alt:before {\n  content: \"\\e751\"; }\n\n.ti-reddit:before {\n  content: \"\\e752\"; }\n\n.ti-pinterest-alt:before {\n  content: \"\\e753\"; }\n\n.ti-microsoft-alt:before {\n  content: \"\\e754\"; }\n\n.ti-linux:before {\n  content: \"\\e755\"; }\n\n.ti-jsfiddle:before {\n  content: \"\\e756\"; }\n\n.ti-joomla:before {\n  content: \"\\e757\"; }\n\n.ti-html5:before {\n  content: \"\\e758\"; }\n\n.ti-flickr-alt:before {\n  content: \"\\e759\"; }\n\n.ti-email:before {\n  content: \"\\e75a\"; }\n\n.ti-drupal:before {\n  content: \"\\e75b\"; }\n\n.ti-dropbox-alt:before {\n  content: \"\\e75c\"; }\n\n.ti-css3:before {\n  content: \"\\e75d\"; }\n\n.ti-rss:before {\n  content: \"\\e75e\"; }\n\n.ti-rss-alt:before {\n  content: \"\\e75f\"; }\n\n/*!\n *  Material Design Iconic Font 1.0.1 by Sergey Kupletsky (@zavoloklom) - http://zavoloklom.github.io/material-design-iconic-font/\n *  License - https://github.com/zavoloklom/material-design-iconic-font/blob/gh-pages/License.md (Attribution-ShareAlike 4.0 International license)\n */\n@font-face {\n  font-family: 'Material Design Iconic Font';\n  src: url(\"../fonts/Material-Design-Iconic-Font.eot?v=1.0.1\");\n  src: url(\"../fonts/Material-Design-Iconic-Font.eot?#iefix&v=1.0.1\") format(\"embedded-opentype\"), url(\"../fonts/Material-Design-Iconic-Font.woff?v=1.0.1\") format(\"woff\"), url(\"../fonts/Material-Design-Iconic-Font.ttf?v=1.0.1\") format(\"truetype\"), url(\"../fonts/Material-Design-Iconic-Font.svg?v=1.0.1#Material-Design-Iconic-Font\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n[class^=\"md-\"],\n[class*=\" md-\"] {\n  display: inline-block;\n  font: normal normal normal 14px/1 'Material Design Iconic Font';\n  font-size: inherit;\n  speak: none;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.md {\n  line-height: inherit;\n  vertical-align: bottom; }\n\n.md-lg {\n  font-size: 1.5em;\n  line-height: .5em;\n  vertical-align: -35%; }\n\n.md-2x {\n  font-size: 2em; }\n\n.md-3x {\n  font-size: 3em; }\n\n.md-4x {\n  font-size: 4em; }\n\n.md-5x {\n  font-size: 5em; }\n\n.md-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: .1em; }\n\n.md-border-circle {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: 50%; }\n\n[class^=\"md-\"].pull-left,\n[class*=\" md-\"].pull-left {\n  float: left;\n  margin-right: .3em; }\n\n[class^=\"md-\"].pull-right,\n[class*=\" md-\"].pull-right {\n  float: right;\n  margin-left: .3em; }\n\n.md-spin {\n  -webkit-animation: md-spin 1.5s infinite linear;\n  animation: md-spin 1.5s infinite linear; }\n\n.md-spin-reverse {\n  -webkit-animation: md-spin-reverse 1.5s infinite linear;\n  animation: md-spin-reverse 1.5s infinite linear; }\n\n@-webkit-keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n@keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n@-webkit-keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg); } }\n@keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg); } }\n.md-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.md-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.md-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.md-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.md-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n:root .md-rotate-90,\n:root .md-rotate-180,\n:root .md-rotate-270,\n:root .md-flip-horizontal,\n:root .md-flip-vertical {\n  filter: none; }\n\n/* Material Design Iconic Font uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n/* If you do not want use all icons you can disable icon set here */\n.md-3d-rotation:before {\n  content: \"\\f000\"; }\n\n.md-accessibility:before {\n  content: \"\\f001\"; }\n\n.md-account-balance:before {\n  content: \"\\f002\"; }\n\n.md-account-balance-wallet:before {\n  content: \"\\f003\"; }\n\n.md-account-box:before {\n  content: \"\\f004\"; }\n\n.md-account-child:before {\n  content: \"\\f005\"; }\n\n.md-account-circle:before {\n  content: \"\\f006\"; }\n\n.md-add-shopping-cart:before {\n  content: \"\\f007\"; }\n\n.md-alarm:before {\n  content: \"\\f008\"; }\n\n.md-alarm-add:before {\n  content: \"\\f009\"; }\n\n.md-alarm-off:before {\n  content: \"\\f00a\"; }\n\n.md-alarm-on:before {\n  content: \"\\f00b\"; }\n\n.md-android:before {\n  content: \"\\f00c\"; }\n\n.md-announcement:before {\n  content: \"\\f00d\"; }\n\n.md-aspect-ratio:before {\n  content: \"\\f00e\"; }\n\n.md-assessment:before {\n  content: \"\\f00f\"; }\n\n.md-assignment:before {\n  content: \"\\f010\"; }\n\n.md-assignment-ind:before {\n  content: \"\\f011\"; }\n\n.md-assignment-late:before {\n  content: \"\\f012\"; }\n\n.md-assignment-return:before {\n  content: \"\\f013\"; }\n\n.md-assignment-returned:before {\n  content: \"\\f014\"; }\n\n.md-assignment-turned-in:before {\n  content: \"\\f015\"; }\n\n.md-autorenew:before {\n  content: \"\\f016\"; }\n\n.md-backup:before {\n  content: \"\\f017\"; }\n\n.md-book:before {\n  content: \"\\f018\"; }\n\n.md-bookmark:before {\n  content: \"\\f019\"; }\n\n.md-bookmark-outline:before {\n  content: \"\\f01a\"; }\n\n.md-bug-report:before {\n  content: \"\\f01b\"; }\n\n.md-cached:before {\n  content: \"\\f01c\"; }\n\n.md-class:before {\n  content: \"\\f01d\"; }\n\n.md-credit-card:before {\n  content: \"\\f01e\"; }\n\n.md-dashboard:before {\n  content: \"\\f01f\"; }\n\n.md-delete:before {\n  content: \"\\f020\"; }\n\n.md-description:before {\n  content: \"\\f021\"; }\n\n.md-dns:before {\n  content: \"\\f022\"; }\n\n.md-done:before {\n  content: \"\\f023\"; }\n\n.md-done-all:before {\n  content: \"\\f024\"; }\n\n.md-event:before {\n  content: \"\\f025\"; }\n\n.md-exit-to-app:before {\n  content: \"\\f026\"; }\n\n.md-explore:before {\n  content: \"\\f027\"; }\n\n.md-extension:before {\n  content: \"\\f028\"; }\n\n.md-face-unlock:before {\n  content: \"\\f029\"; }\n\n.md-favorite:before {\n  content: \"\\f02a\"; }\n\n.md-favorite-outline:before {\n  content: \"\\f02b\"; }\n\n.md-find-in-page:before {\n  content: \"\\f02c\"; }\n\n.md-find-replace:before {\n  content: \"\\f02d\"; }\n\n.md-flip-to-back:before {\n  content: \"\\f02e\"; }\n\n.md-flip-to-front:before {\n  content: \"\\f02f\"; }\n\n.md-get-app:before {\n  content: \"\\f030\"; }\n\n.md-grade:before {\n  content: \"\\f031\"; }\n\n.md-group-work:before {\n  content: \"\\f032\"; }\n\n.md-help:before {\n  content: \"\\f033\"; }\n\n.md-highlight-remove:before {\n  content: \"\\f034\"; }\n\n.md-history:before {\n  content: \"\\f035\"; }\n\n.md-home:before {\n  content: \"\\f036\"; }\n\n.md-https:before {\n  content: \"\\f037\"; }\n\n.md-info:before {\n  content: \"\\f038\"; }\n\n.md-info-outline:before {\n  content: \"\\f039\"; }\n\n.md-input:before {\n  content: \"\\f03a\"; }\n\n.md-invert-colors:before {\n  content: \"\\f03b\"; }\n\n.md-label:before {\n  content: \"\\f03c\"; }\n\n.md-label-outline:before {\n  content: \"\\f03d\"; }\n\n.md-language:before {\n  content: \"\\f03e\"; }\n\n.md-launch:before {\n  content: \"\\f03f\"; }\n\n.md-list:before {\n  content: \"\\f040\"; }\n\n.md-lock:before {\n  content: \"\\f041\"; }\n\n.md-lock-open:before {\n  content: \"\\f042\"; }\n\n.md-lock-outline:before {\n  content: \"\\f043\"; }\n\n.md-loyalty:before {\n  content: \"\\f044\"; }\n\n.md-markunread-mailbox:before {\n  content: \"\\f045\"; }\n\n.md-note-add:before {\n  content: \"\\f046\"; }\n\n.md-open-in-browser:before {\n  content: \"\\f047\"; }\n\n.md-open-in-new:before {\n  content: \"\\f048\"; }\n\n.md-open-with:before {\n  content: \"\\f049\"; }\n\n.md-pageview:before {\n  content: \"\\f04a\"; }\n\n.md-payment:before {\n  content: \"\\f04b\"; }\n\n.md-perm-camera-mic:before {\n  content: \"\\f04c\"; }\n\n.md-perm-contact-cal:before {\n  content: \"\\f04d\"; }\n\n.md-perm-data-setting:before {\n  content: \"\\f04e\"; }\n\n.md-perm-device-info:before {\n  content: \"\\f04f\"; }\n\n.md-perm-identity:before {\n  content: \"\\f050\"; }\n\n.md-perm-media:before {\n  content: \"\\f051\"; }\n\n.md-perm-phone-msg:before {\n  content: \"\\f052\"; }\n\n.md-perm-scan-wifi:before {\n  content: \"\\f053\"; }\n\n.md-picture-in-picture:before {\n  content: \"\\f054\"; }\n\n.md-polymer:before {\n  content: \"\\f055\"; }\n\n.md-print:before {\n  content: \"\\f056\"; }\n\n.md-query-builder:before {\n  content: \"\\f057\"; }\n\n.md-question-answer:before {\n  content: \"\\f058\"; }\n\n.md-receipt:before {\n  content: \"\\f059\"; }\n\n.md-redeem:before {\n  content: \"\\f05a\"; }\n\n.md-report-problem:before {\n  content: \"\\f05b\"; }\n\n.md-restore:before {\n  content: \"\\f05c\"; }\n\n.md-room:before {\n  content: \"\\f05d\"; }\n\n.md-schedule:before {\n  content: \"\\f05e\"; }\n\n.md-search:before {\n  content: \"\\f05f\"; }\n\n.md-settings:before {\n  content: \"\\f060\"; }\n\n.md-settings-applications:before {\n  content: \"\\f061\"; }\n\n.md-settings-backup-restore:before {\n  content: \"\\f062\"; }\n\n.md-settings-bluetooth:before {\n  content: \"\\f063\"; }\n\n.md-settings-cell:before {\n  content: \"\\f064\"; }\n\n.md-settings-display:before {\n  content: \"\\f065\"; }\n\n.md-settings-ethernet:before {\n  content: \"\\f066\"; }\n\n.md-settings-input-antenna:before {\n  content: \"\\f067\"; }\n\n.md-settings-input-component:before {\n  content: \"\\f068\"; }\n\n.md-settings-input-composite:before {\n  content: \"\\f069\"; }\n\n.md-settings-input-hdmi:before {\n  content: \"\\f06a\"; }\n\n.md-settings-input-svideo:before {\n  content: \"\\f06b\"; }\n\n.md-settings-overscan:before {\n  content: \"\\f06c\"; }\n\n.md-settings-phone:before {\n  content: \"\\f06d\"; }\n\n.md-settings-power:before {\n  content: \"\\f06e\"; }\n\n.md-settings-remote:before {\n  content: \"\\f06f\"; }\n\n.md-settings-voice:before {\n  content: \"\\f070\"; }\n\n.md-shop:before {\n  content: \"\\f071\"; }\n\n.md-shopping-basket:before {\n  content: \"\\f072\"; }\n\n.md-shopping-cart:before {\n  content: \"\\f073\"; }\n\n.md-shop-two:before {\n  content: \"\\f074\"; }\n\n.md-speaker-notes:before {\n  content: \"\\f075\"; }\n\n.md-spellcheck:before {\n  content: \"\\f076\"; }\n\n.md-star-rate:before {\n  content: \"\\f077\"; }\n\n.md-stars:before {\n  content: \"\\f078\"; }\n\n.md-store:before {\n  content: \"\\f079\"; }\n\n.md-subject:before {\n  content: \"\\f07a\"; }\n\n.md-swap-horiz:before {\n  content: \"\\f07b\"; }\n\n.md-swap-vert:before {\n  content: \"\\f07c\"; }\n\n.md-swap-vert-circle:before {\n  content: \"\\f07d\"; }\n\n.md-system-update-tv:before {\n  content: \"\\f07e\"; }\n\n.md-tab:before {\n  content: \"\\f07f\"; }\n\n.md-tab-unselected:before {\n  content: \"\\f080\"; }\n\n.md-theaters:before {\n  content: \"\\f081\"; }\n\n.md-thumb-down:before {\n  content: \"\\f082\"; }\n\n.md-thumbs-up-down:before {\n  content: \"\\f083\"; }\n\n.md-thumb-up:before {\n  content: \"\\f084\"; }\n\n.md-toc:before {\n  content: \"\\f085\"; }\n\n.md-today:before {\n  content: \"\\f086\"; }\n\n.md-track-changes:before {\n  content: \"\\f087\"; }\n\n.md-translate:before {\n  content: \"\\f088\"; }\n\n.md-trending-down:before {\n  content: \"\\f089\"; }\n\n.md-trending-neutral:before {\n  content: \"\\f08a\"; }\n\n.md-trending-up:before {\n  content: \"\\f08b\"; }\n\n.md-turned-in:before {\n  content: \"\\f08c\"; }\n\n.md-turned-in-not:before {\n  content: \"\\f08d\"; }\n\n.md-verified-user:before {\n  content: \"\\f08e\"; }\n\n.md-view-agenda:before {\n  content: \"\\f08f\"; }\n\n.md-view-array:before {\n  content: \"\\f090\"; }\n\n.md-view-carousel:before {\n  content: \"\\f091\"; }\n\n.md-view-column:before {\n  content: \"\\f092\"; }\n\n.md-view-day:before {\n  content: \"\\f093\"; }\n\n.md-view-headline:before {\n  content: \"\\f094\"; }\n\n.md-view-list:before {\n  content: \"\\f095\"; }\n\n.md-view-module:before {\n  content: \"\\f096\"; }\n\n.md-view-quilt:before {\n  content: \"\\f097\"; }\n\n.md-view-stream:before {\n  content: \"\\f098\"; }\n\n.md-view-week:before {\n  content: \"\\f099\"; }\n\n.md-visibility:before {\n  content: \"\\f09a\"; }\n\n.md-visibility-off:before {\n  content: \"\\f09b\"; }\n\n.md-wallet-giftcard:before {\n  content: \"\\f09c\"; }\n\n.md-wallet-membership:before {\n  content: \"\\f09d\"; }\n\n.md-wallet-travel:before {\n  content: \"\\f09e\"; }\n\n.md-work:before {\n  content: \"\\f09f\"; }\n\n.md-error:before {\n  content: \"\\f0a0\"; }\n\n.md-warning:before {\n  content: \"\\f0a1\"; }\n\n.md-album:before {\n  content: \"\\f0a2\"; }\n\n.md-av-timer:before {\n  content: \"\\f0a3\"; }\n\n.md-closed-caption:before {\n  content: \"\\f0a4\"; }\n\n.md-equalizer:before {\n  content: \"\\f0a5\"; }\n\n.md-explicit:before {\n  content: \"\\f0a6\"; }\n\n.md-fast-forward:before {\n  content: \"\\f0a7\"; }\n\n.md-fast-rewind:before {\n  content: \"\\f0a8\"; }\n\n.md-games:before {\n  content: \"\\f0a9\"; }\n\n.md-hearing:before {\n  content: \"\\f0aa\"; }\n\n.md-high-quality:before {\n  content: \"\\f0ab\"; }\n\n.md-loop:before {\n  content: \"\\f0ac\"; }\n\n.md-mic:before {\n  content: \"\\f0ad\"; }\n\n.md-mic-none:before {\n  content: \"\\f0ae\"; }\n\n.md-mic-off:before {\n  content: \"\\f0af\"; }\n\n.md-movie:before {\n  content: \"\\f0b0\"; }\n\n.md-my-library-add:before {\n  content: \"\\f0b1\"; }\n\n.md-my-library-books:before {\n  content: \"\\f0b2\"; }\n\n.md-my-library-music:before {\n  content: \"\\f0b3\"; }\n\n.md-new-releases:before {\n  content: \"\\f0b4\"; }\n\n.md-not-interested:before {\n  content: \"\\f0b5\"; }\n\n.md-pause:before {\n  content: \"\\f0b6\"; }\n\n.md-pause-circle-fill:before {\n  content: \"\\f0b7\"; }\n\n.md-pause-circle-outline:before {\n  content: \"\\f0b8\"; }\n\n.md-play-arrow:before {\n  content: \"\\f0b9\"; }\n\n.md-play-circle-fill:before {\n  content: \"\\f0ba\"; }\n\n.md-play-circle-outline:before {\n  content: \"\\f0bb\"; }\n\n.md-playlist-add:before {\n  content: \"\\f0bc\"; }\n\n.md-play-shopping-bag:before {\n  content: \"\\f0bd\"; }\n\n.md-queue:before {\n  content: \"\\f0be\"; }\n\n.md-queue-music:before {\n  content: \"\\f0bf\"; }\n\n.md-radio:before {\n  content: \"\\f0c0\"; }\n\n.md-recent-actors:before {\n  content: \"\\f0c1\"; }\n\n.md-repeat:before {\n  content: \"\\f0c2\"; }\n\n.md-repeat-one:before {\n  content: \"\\f0c3\"; }\n\n.md-replay:before {\n  content: \"\\f0c4\"; }\n\n.md-shuffle:before {\n  content: \"\\f0c5\"; }\n\n.md-skip-next:before {\n  content: \"\\f0c6\"; }\n\n.md-skip-previous:before {\n  content: \"\\f0c7\"; }\n\n.md-snooze:before {\n  content: \"\\f0c8\"; }\n\n.md-stop:before {\n  content: \"\\f0c9\"; }\n\n.md-subtitles:before {\n  content: \"\\f0ca\"; }\n\n.md-surround-sound:before {\n  content: \"\\f0cb\"; }\n\n.md-videocam:before {\n  content: \"\\f0cc\"; }\n\n.md-videocam-off:before {\n  content: \"\\f0cd\"; }\n\n.md-video-collection:before {\n  content: \"\\f0ce\"; }\n\n.md-volume-down:before {\n  content: \"\\f0cf\"; }\n\n.md-volume-mute:before {\n  content: \"\\f0d0\"; }\n\n.md-volume-off:before {\n  content: \"\\f0d1\"; }\n\n.md-volume-up:before {\n  content: \"\\f0d2\"; }\n\n.md-web:before {\n  content: \"\\f0d3\"; }\n\n.md-business:before {\n  content: \"\\f0d4\"; }\n\n.md-call:before {\n  content: \"\\f0d5\"; }\n\n.md-call-end:before {\n  content: \"\\f0d6\"; }\n\n.md-call-made:before {\n  content: \"\\f0d7\"; }\n\n.md-call-merge:before {\n  content: \"\\f0d8\"; }\n\n.md-call-missed:before {\n  content: \"\\f0d9\"; }\n\n.md-call-received:before {\n  content: \"\\f0da\"; }\n\n.md-call-split:before {\n  content: \"\\f0db\"; }\n\n.md-chat:before {\n  content: \"\\f0dc\"; }\n\n.md-clear-all:before {\n  content: \"\\f0dd\"; }\n\n.md-comment:before {\n  content: \"\\f0de\"; }\n\n.md-contacts:before {\n  content: \"\\f0df\"; }\n\n.md-dialer-sip:before {\n  content: \"\\f0e0\"; }\n\n.md-dialpad:before {\n  content: \"\\f0e1\"; }\n\n.md-dnd-on:before {\n  content: \"\\f0e2\"; }\n\n.md-email:before {\n  content: \"\\f0e3\"; }\n\n.md-forum:before {\n  content: \"\\f0e4\"; }\n\n.md-import-export:before {\n  content: \"\\f0e5\"; }\n\n.md-invert-colors-off:before {\n  content: \"\\f0e6\"; }\n\n.md-invert-colors-on:before {\n  content: \"\\f0e7\"; }\n\n.md-live-help:before {\n  content: \"\\f0e8\"; }\n\n.md-location-off:before {\n  content: \"\\f0e9\"; }\n\n.md-location-on:before {\n  content: \"\\f0ea\"; }\n\n.md-message:before {\n  content: \"\\f0eb\"; }\n\n.md-messenger:before {\n  content: \"\\f0ec\"; }\n\n.md-no-sim:before {\n  content: \"\\f0ed\"; }\n\n.md-phone:before {\n  content: \"\\f0ee\"; }\n\n.md-portable-wifi-off:before {\n  content: \"\\f0ef\"; }\n\n.md-quick-contacts-dialer:before {\n  content: \"\\f0f0\"; }\n\n.md-quick-contacts-mail:before {\n  content: \"\\f0f1\"; }\n\n.md-ring-volume:before {\n  content: \"\\f0f2\"; }\n\n.md-stay-current-landscape:before {\n  content: \"\\f0f3\"; }\n\n.md-stay-current-portrait:before {\n  content: \"\\f0f4\"; }\n\n.md-stay-primary-landscape:before {\n  content: \"\\f0f5\"; }\n\n.md-stay-primary-portrait:before {\n  content: \"\\f0f6\"; }\n\n.md-swap-calls:before {\n  content: \"\\f0f7\"; }\n\n.md-textsms:before {\n  content: \"\\f0f8\"; }\n\n.md-voicemail:before {\n  content: \"\\f0f9\"; }\n\n.md-vpn-key:before {\n  content: \"\\f0fa\"; }\n\n.md-add:before {\n  content: \"\\f0fb\"; }\n\n.md-add-box:before {\n  content: \"\\f0fc\"; }\n\n.md-add-circle:before {\n  content: \"\\f0fd\"; }\n\n.md-add-circle-outline:before {\n  content: \"\\f0fe\"; }\n\n.md-archive:before {\n  content: \"\\f0ff\"; }\n\n.md-backspace:before {\n  content: \"\\f100\"; }\n\n.md-block:before {\n  content: \"\\f101\"; }\n\n.md-clear:before {\n  content: \"\\f102\"; }\n\n.md-content-copy:before {\n  content: \"\\f103\"; }\n\n.md-content-cut:before {\n  content: \"\\f104\"; }\n\n.md-content-paste:before {\n  content: \"\\f105\"; }\n\n.md-create:before {\n  content: \"\\f106\"; }\n\n.md-drafts:before {\n  content: \"\\f107\"; }\n\n.md-filter-list:before {\n  content: \"\\f108\"; }\n\n.md-flag:before {\n  content: \"\\f109\"; }\n\n.md-forward:before {\n  content: \"\\f10a\"; }\n\n.md-gesture:before {\n  content: \"\\f10b\"; }\n\n.md-inbox:before {\n  content: \"\\f10c\"; }\n\n.md-link:before {\n  content: \"\\f10d\"; }\n\n.md-mail:before {\n  content: \"\\f10e\"; }\n\n.md-markunread:before {\n  content: \"\\f10f\"; }\n\n.md-redo:before {\n  content: \"\\f110\"; }\n\n.md-remove:before {\n  content: \"\\f111\"; }\n\n.md-remove-circle:before {\n  content: \"\\f112\"; }\n\n.md-remove-circle-outline:before {\n  content: \"\\f113\"; }\n\n.md-reply:before {\n  content: \"\\f114\"; }\n\n.md-reply-all:before {\n  content: \"\\f115\"; }\n\n.md-report:before {\n  content: \"\\f116\"; }\n\n.md-save:before {\n  content: \"\\f117\"; }\n\n.md-select-all:before {\n  content: \"\\f118\"; }\n\n.md-send:before {\n  content: \"\\f119\"; }\n\n.md-sort:before {\n  content: \"\\f11a\"; }\n\n.md-text-format:before {\n  content: \"\\f11b\"; }\n\n.md-undo:before {\n  content: \"\\f11c\"; }\n\n.md-access-alarm:before {\n  content: \"\\f11d\"; }\n\n.md-access-alarms:before {\n  content: \"\\f11e\"; }\n\n.md-access-time:before {\n  content: \"\\f11f\"; }\n\n.md-add-alarm:before {\n  content: \"\\f120\"; }\n\n.md-airplanemode-off:before {\n  content: \"\\f121\"; }\n\n.md-airplanemode-on:before {\n  content: \"\\f122\"; }\n\n.md-battery-20:before {\n  content: \"\\f123\"; }\n\n.md-battery-30:before {\n  content: \"\\f124\"; }\n\n.md-battery-50:before {\n  content: \"\\f125\"; }\n\n.md-battery-60:before {\n  content: \"\\f126\"; }\n\n.md-battery-80:before {\n  content: \"\\f127\"; }\n\n.md-battery-90:before {\n  content: \"\\f128\"; }\n\n.md-battery-alert:before {\n  content: \"\\f129\"; }\n\n.md-battery-charging-20:before {\n  content: \"\\f12a\"; }\n\n.md-battery-charging-30:before {\n  content: \"\\f12b\"; }\n\n.md-battery-charging-50:before {\n  content: \"\\f12c\"; }\n\n.md-battery-charging-60:before {\n  content: \"\\f12d\"; }\n\n.md-battery-charging-80:before {\n  content: \"\\f12e\"; }\n\n.md-battery-charging-90:before {\n  content: \"\\f12f\"; }\n\n.md-battery-charging-full:before {\n  content: \"\\f130\"; }\n\n.md-battery-full:before {\n  content: \"\\f131\"; }\n\n.md-battery-std:before {\n  content: \"\\f132\"; }\n\n.md-battery-unknown:before {\n  content: \"\\f133\"; }\n\n.md-bluetooth:before {\n  content: \"\\f134\"; }\n\n.md-bluetooth-connected:before {\n  content: \"\\f135\"; }\n\n.md-bluetooth-disabled:before {\n  content: \"\\f136\"; }\n\n.md-bluetooth-searching:before {\n  content: \"\\f137\"; }\n\n.md-brightness-auto:before {\n  content: \"\\f138\"; }\n\n.md-brightness-high:before {\n  content: \"\\f139\"; }\n\n.md-brightness-low:before {\n  content: \"\\f13a\"; }\n\n.md-brightness-medium:before {\n  content: \"\\f13b\"; }\n\n.md-data-usage:before {\n  content: \"\\f13c\"; }\n\n.md-developer-mode:before {\n  content: \"\\f13d\"; }\n\n.md-devices:before {\n  content: \"\\f13e\"; }\n\n.md-dvr:before {\n  content: \"\\f13f\"; }\n\n.md-gps-fixed:before {\n  content: \"\\f140\"; }\n\n.md-gps-not-fixed:before {\n  content: \"\\f141\"; }\n\n.md-gps-off:before {\n  content: \"\\f142\"; }\n\n.md-location-disabled:before {\n  content: \"\\f143\"; }\n\n.md-location-searching:before {\n  content: \"\\f144\"; }\n\n.md-multitrack-audio:before {\n  content: \"\\f145\"; }\n\n.md-network-cell:before {\n  content: \"\\f146\"; }\n\n.md-network-wifi:before {\n  content: \"\\f147\"; }\n\n.md-nfc:before {\n  content: \"\\f148\"; }\n\n.md-now-wallpaper:before {\n  content: \"\\f149\"; }\n\n.md-now-widgets:before {\n  content: \"\\f14a\"; }\n\n.md-screen-lock-landscape:before {\n  content: \"\\f14b\"; }\n\n.md-screen-lock-portrait:before {\n  content: \"\\f14c\"; }\n\n.md-screen-lock-rotation:before {\n  content: \"\\f14d\"; }\n\n.md-screen-rotation:before {\n  content: \"\\f14e\"; }\n\n.md-sd-storage:before {\n  content: \"\\f14f\"; }\n\n.md-settings-system-daydream:before {\n  content: \"\\f150\"; }\n\n.md-signal-cellular-0-bar:before {\n  content: \"\\f151\"; }\n\n.md-signal-cellular-1-bar:before {\n  content: \"\\f152\"; }\n\n.md-signal-cellular-2-bar:before {\n  content: \"\\f153\"; }\n\n.md-signal-cellular-3-bar:before {\n  content: \"\\f154\"; }\n\n.md-signal-cellular-4-bar:before {\n  content: \"\\f155\"; }\n\n.md-signal-cellular-connected-no-internet-0-bar:before {\n  content: \"\\f156\"; }\n\n.md-signal-cellular-connected-no-internet-1-bar:before {\n  content: \"\\f157\"; }\n\n.md-signal-cellular-connected-no-internet-2-bar:before {\n  content: \"\\f158\"; }\n\n.md-signal-cellular-connected-no-internet-3-bar:before {\n  content: \"\\f159\"; }\n\n.md-signal-cellular-connected-no-internet-4-bar:before {\n  content: \"\\f15a\"; }\n\n.md-signal-cellular-no-sim:before {\n  content: \"\\f15b\"; }\n\n.md-signal-cellular-null:before {\n  content: \"\\f15c\"; }\n\n.md-signal-cellular-off:before {\n  content: \"\\f15d\"; }\n\n.md-signal-wifi-0-bar:before {\n  content: \"\\f15e\"; }\n\n.md-signal-wifi-1-bar:before {\n  content: \"\\f15f\"; }\n\n.md-signal-wifi-2-bar:before {\n  content: \"\\f160\"; }\n\n.md-signal-wifi-3-bar:before {\n  content: \"\\f161\"; }\n\n.md-signal-wifi-4-bar:before {\n  content: \"\\f162\"; }\n\n.md-signal-wifi-off:before {\n  content: \"\\f163\"; }\n\n.md-storage:before {\n  content: \"\\f164\"; }\n\n.md-usb:before {\n  content: \"\\f165\"; }\n\n.md-wifi-lock:before {\n  content: \"\\f166\"; }\n\n.md-wifi-tethering:before {\n  content: \"\\f167\"; }\n\n.md-attach-file:before {\n  content: \"\\f168\"; }\n\n.md-attach-money:before {\n  content: \"\\f169\"; }\n\n.md-border-all:before {\n  content: \"\\f16a\"; }\n\n.md-border-bottom:before {\n  content: \"\\f16b\"; }\n\n.md-border-clear:before {\n  content: \"\\f16c\"; }\n\n.md-border-color:before {\n  content: \"\\f16d\"; }\n\n.md-border-horizontal:before {\n  content: \"\\f16e\"; }\n\n.md-border-inner:before {\n  content: \"\\f16f\"; }\n\n.md-border-left:before {\n  content: \"\\f170\"; }\n\n.md-border-outer:before {\n  content: \"\\f171\"; }\n\n.md-border-right:before {\n  content: \"\\f172\"; }\n\n.md-border-style:before {\n  content: \"\\f173\"; }\n\n.md-border-top:before {\n  content: \"\\f174\"; }\n\n.md-border-vertical:before {\n  content: \"\\f175\"; }\n\n.md-format-align-center:before {\n  content: \"\\f176\"; }\n\n.md-format-align-justify:before {\n  content: \"\\f177\"; }\n\n.md-format-align-left:before {\n  content: \"\\f178\"; }\n\n.md-format-align-right:before {\n  content: \"\\f179\"; }\n\n.md-format-bold:before {\n  content: \"\\f17a\"; }\n\n.md-format-clear:before {\n  content: \"\\f17b\"; }\n\n.md-format-color-fill:before {\n  content: \"\\f17c\"; }\n\n.md-format-color-reset:before {\n  content: \"\\f17d\"; }\n\n.md-format-color-text:before {\n  content: \"\\f17e\"; }\n\n.md-format-indent-decrease:before {\n  content: \"\\f17f\"; }\n\n.md-format-indent-increase:before {\n  content: \"\\f180\"; }\n\n.md-format-italic:before {\n  content: \"\\f181\"; }\n\n.md-format-line-spacing:before {\n  content: \"\\f182\"; }\n\n.md-format-list-bulleted:before {\n  content: \"\\f183\"; }\n\n.md-format-list-numbered:before {\n  content: \"\\f184\"; }\n\n.md-format-paint:before {\n  content: \"\\f185\"; }\n\n.md-format-quote:before {\n  content: \"\\f186\"; }\n\n.md-format-size:before {\n  content: \"\\f187\"; }\n\n.md-format-strikethrough:before {\n  content: \"\\f188\"; }\n\n.md-format-textdirection-l-to-r:before {\n  content: \"\\f189\"; }\n\n.md-format-textdirection-r-to-l:before {\n  content: \"\\f18a\"; }\n\n.md-format-underline:before {\n  content: \"\\f18b\"; }\n\n.md-functions:before {\n  content: \"\\f18c\"; }\n\n.md-insert-chart:before {\n  content: \"\\f18d\"; }\n\n.md-insert-comment:before {\n  content: \"\\f18e\"; }\n\n.md-insert-drive-file:before {\n  content: \"\\f18f\"; }\n\n.md-insert-emoticon:before {\n  content: \"\\f190\"; }\n\n.md-insert-invitation:before {\n  content: \"\\f191\"; }\n\n.md-insert-link:before {\n  content: \"\\f192\"; }\n\n.md-insert-photo:before {\n  content: \"\\f193\"; }\n\n.md-merge-type:before {\n  content: \"\\f194\"; }\n\n.md-mode-comment:before {\n  content: \"\\f195\"; }\n\n.md-mode-edit:before {\n  content: \"\\f196\"; }\n\n.md-publish:before {\n  content: \"\\f197\"; }\n\n.md-vertical-align-bottom:before {\n  content: \"\\f198\"; }\n\n.md-vertical-align-center:before {\n  content: \"\\f199\"; }\n\n.md-vertical-align-top:before {\n  content: \"\\f19a\"; }\n\n.md-wrap-text:before {\n  content: \"\\f19b\"; }\n\n.md-attachment:before {\n  content: \"\\f19c\"; }\n\n.md-cloud:before {\n  content: \"\\f19d\"; }\n\n.md-cloud-circle:before {\n  content: \"\\f19e\"; }\n\n.md-cloud-done:before {\n  content: \"\\f19f\"; }\n\n.md-cloud-download:before {\n  content: \"\\f1a0\"; }\n\n.md-cloud-off:before {\n  content: \"\\f1a1\"; }\n\n.md-cloud-queue:before {\n  content: \"\\f1a2\"; }\n\n.md-cloud-upload:before {\n  content: \"\\f1a3\"; }\n\n.md-file-download:before {\n  content: \"\\f1a4\"; }\n\n.md-file-upload:before {\n  content: \"\\f1a5\"; }\n\n.md-folder:before {\n  content: \"\\f1a6\"; }\n\n.md-folder-open:before {\n  content: \"\\f1a7\"; }\n\n.md-folder-shared:before {\n  content: \"\\f1a8\"; }\n\n.md-cast:before {\n  content: \"\\f1a9\"; }\n\n.md-cast-connected:before {\n  content: \"\\f1aa\"; }\n\n.md-computer:before {\n  content: \"\\f1ab\"; }\n\n.md-desktop-mac:before {\n  content: \"\\f1ac\"; }\n\n.md-desktop-windows:before {\n  content: \"\\f1ad\"; }\n\n.md-dock:before {\n  content: \"\\f1ae\"; }\n\n.md-gamepad:before {\n  content: \"\\f1af\"; }\n\n.md-headset:before {\n  content: \"\\f1b0\"; }\n\n.md-headset-mic:before {\n  content: \"\\f1b1\"; }\n\n.md-keyboard:before {\n  content: \"\\f1b2\"; }\n\n.md-keyboard-alt:before {\n  content: \"\\f1b3\"; }\n\n.md-keyboard-arrow-down:before {\n  content: \"\\f1b4\"; }\n\n.md-keyboard-arrow-left:before {\n  content: \"\\f1b5\"; }\n\n.md-keyboard-arrow-right:before {\n  content: \"\\f1b6\"; }\n\n.md-keyboard-arrow-up:before {\n  content: \"\\f1b7\"; }\n\n.md-keyboard-backspace:before {\n  content: \"\\f1b8\"; }\n\n.md-keyboard-capslock:before {\n  content: \"\\f1b9\"; }\n\n.md-keyboard-control:before {\n  content: \"\\f1ba\"; }\n\n.md-keyboard-hide:before {\n  content: \"\\f1bb\"; }\n\n.md-keyboard-return:before {\n  content: \"\\f1bc\"; }\n\n.md-keyboard-tab:before {\n  content: \"\\f1bd\"; }\n\n.md-keyboard-voice:before {\n  content: \"\\f1be\"; }\n\n.md-laptop:before {\n  content: \"\\f1bf\"; }\n\n.md-laptop-chromebook:before {\n  content: \"\\f1c0\"; }\n\n.md-laptop-mac:before {\n  content: \"\\f1c1\"; }\n\n.md-laptop-windows:before {\n  content: \"\\f1c2\"; }\n\n.md-memory:before {\n  content: \"\\f1c3\"; }\n\n.md-mouse:before {\n  content: \"\\f1c4\"; }\n\n.md-phone-android:before {\n  content: \"\\f1c5\"; }\n\n.md-phone-iphone:before {\n  content: \"\\f1c6\"; }\n\n.md-phonelink:before {\n  content: \"\\f1c7\"; }\n\n.md-phonelink-off:before {\n  content: \"\\f1c8\"; }\n\n.md-security:before {\n  content: \"\\f1c9\"; }\n\n.md-sim-card:before {\n  content: \"\\f1ca\"; }\n\n.md-smartphone:before {\n  content: \"\\f1cb\"; }\n\n.md-speaker:before {\n  content: \"\\f1cc\"; }\n\n.md-tablet:before {\n  content: \"\\f1cd\"; }\n\n.md-tablet-android:before {\n  content: \"\\f1ce\"; }\n\n.md-tablet-mac:before {\n  content: \"\\f1cf\"; }\n\n.md-tv:before {\n  content: \"\\f1d0\"; }\n\n.md-watch:before {\n  content: \"\\f1d1\"; }\n\n.md-add-to-photos:before {\n  content: \"\\f1d2\"; }\n\n.md-adjust:before {\n  content: \"\\f1d3\"; }\n\n.md-assistant-photo:before {\n  content: \"\\f1d4\"; }\n\n.md-audiotrack:before {\n  content: \"\\f1d5\"; }\n\n.md-blur-circular:before {\n  content: \"\\f1d6\"; }\n\n.md-blur-linear:before {\n  content: \"\\f1d7\"; }\n\n.md-blur-off:before {\n  content: \"\\f1d8\"; }\n\n.md-blur-on:before {\n  content: \"\\f1d9\"; }\n\n.md-brightness-1:before {\n  content: \"\\f1da\"; }\n\n.md-brightness-2:before {\n  content: \"\\f1db\"; }\n\n.md-brightness-3:before {\n  content: \"\\f1dc\"; }\n\n.md-brightness-4:before {\n  content: \"\\f1dd\"; }\n\n.md-brightness-5:before {\n  content: \"\\f1de\"; }\n\n.md-brightness-6:before {\n  content: \"\\f1df\"; }\n\n.md-brightness-7:before {\n  content: \"\\f1e0\"; }\n\n.md-brush:before {\n  content: \"\\f1e1\"; }\n\n.md-camera:before {\n  content: \"\\f1e2\"; }\n\n.md-camera-alt:before {\n  content: \"\\f1e3\"; }\n\n.md-camera-front:before {\n  content: \"\\f1e4\"; }\n\n.md-camera-rear:before {\n  content: \"\\f1e5\"; }\n\n.md-camera-roll:before {\n  content: \"\\f1e6\"; }\n\n.md-center-focus-strong:before {\n  content: \"\\f1e7\"; }\n\n.md-center-focus-weak:before {\n  content: \"\\f1e8\"; }\n\n.md-collections:before {\n  content: \"\\f1e9\"; }\n\n.md-colorize:before {\n  content: \"\\f1ea\"; }\n\n.md-color-lens:before {\n  content: \"\\f1eb\"; }\n\n.md-compare:before {\n  content: \"\\f1ec\"; }\n\n.md-control-point:before {\n  content: \"\\f1ed\"; }\n\n.md-control-point-duplicate:before {\n  content: \"\\f1ee\"; }\n\n.md-crop:before {\n  content: \"\\f1ef\"; }\n\n.md-crop-3-2:before {\n  content: \"\\f1f0\"; }\n\n.md-crop-5-4:before {\n  content: \"\\f1f1\"; }\n\n.md-crop-7-5:before {\n  content: \"\\f1f2\"; }\n\n.md-crop-16-9:before {\n  content: \"\\f1f3\"; }\n\n.md-crop-din:before {\n  content: \"\\f1f4\"; }\n\n.md-crop-free:before {\n  content: \"\\f1f5\"; }\n\n.md-crop-landscape:before {\n  content: \"\\f1f6\"; }\n\n.md-crop-original:before {\n  content: \"\\f1f7\"; }\n\n.md-crop-portrait:before {\n  content: \"\\f1f8\"; }\n\n.md-crop-square:before {\n  content: \"\\f1f9\"; }\n\n.md-dehaze:before {\n  content: \"\\f1fa\"; }\n\n.md-details:before {\n  content: \"\\f1fb\"; }\n\n.md-edit:before {\n  content: \"\\f1fc\"; }\n\n.md-exposure:before {\n  content: \"\\f1fd\"; }\n\n.md-exposure-minus-1:before {\n  content: \"\\f1fe\"; }\n\n.md-exposure-minus-2:before {\n  content: \"\\f1ff\"; }\n\n.md-exposure-zero:before {\n  content: \"\\f200\"; }\n\n.md-exposure-plus-1:before {\n  content: \"\\f201\"; }\n\n.md-exposure-plus-2:before {\n  content: \"\\f202\"; }\n\n.md-filter:before {\n  content: \"\\f203\"; }\n\n.md-filter-1:before {\n  content: \"\\f204\"; }\n\n.md-filter-2:before {\n  content: \"\\f205\"; }\n\n.md-filter-3:before {\n  content: \"\\f206\"; }\n\n.md-filter-4:before {\n  content: \"\\f207\"; }\n\n.md-filter-5:before {\n  content: \"\\f208\"; }\n\n.md-filter-6:before {\n  content: \"\\f209\"; }\n\n.md-filter-7:before {\n  content: \"\\f20a\"; }\n\n.md-filter-8:before {\n  content: \"\\f20b\"; }\n\n.md-filter-9:before {\n  content: \"\\f20c\"; }\n\n.md-filter-9-plus:before {\n  content: \"\\f20d\"; }\n\n.md-filter-b-and-w:before {\n  content: \"\\f20e\"; }\n\n.md-filter-center-focus:before {\n  content: \"\\f20f\"; }\n\n.md-filter-drama:before {\n  content: \"\\f210\"; }\n\n.md-filter-frames:before {\n  content: \"\\f211\"; }\n\n.md-filter-hdr:before {\n  content: \"\\f212\"; }\n\n.md-filter-none:before {\n  content: \"\\f213\"; }\n\n.md-filter-tilt-shift:before {\n  content: \"\\f214\"; }\n\n.md-filter-vintage:before {\n  content: \"\\f215\"; }\n\n.md-flare:before {\n  content: \"\\f216\"; }\n\n.md-flash-auto:before {\n  content: \"\\f217\"; }\n\n.md-flash-off:before {\n  content: \"\\f218\"; }\n\n.md-flash-on:before {\n  content: \"\\f219\"; }\n\n.md-flip:before {\n  content: \"\\f21a\"; }\n\n.md-gradient:before {\n  content: \"\\f21b\"; }\n\n.md-grain:before {\n  content: \"\\f21c\"; }\n\n.md-grid-off:before {\n  content: \"\\f21d\"; }\n\n.md-grid-on:before {\n  content: \"\\f21e\"; }\n\n.md-hdr-off:before {\n  content: \"\\f21f\"; }\n\n.md-hdr-on:before {\n  content: \"\\f220\"; }\n\n.md-hdr-strong:before {\n  content: \"\\f221\"; }\n\n.md-hdr-weak:before {\n  content: \"\\f222\"; }\n\n.md-healing:before {\n  content: \"\\f223\"; }\n\n.md-image:before {\n  content: \"\\f224\"; }\n\n.md-image-aspect-ratio:before {\n  content: \"\\f225\"; }\n\n.md-iso:before {\n  content: \"\\f226\"; }\n\n.md-landscape:before {\n  content: \"\\f227\"; }\n\n.md-leak-add:before {\n  content: \"\\f228\"; }\n\n.md-leak-remove:before {\n  content: \"\\f229\"; }\n\n.md-lens:before {\n  content: \"\\f22a\"; }\n\n.md-looks:before {\n  content: \"\\f22b\"; }\n\n.md-looks-1:before {\n  content: \"\\f22c\"; }\n\n.md-looks-2:before {\n  content: \"\\f22d\"; }\n\n.md-looks-3:before {\n  content: \"\\f22e\"; }\n\n.md-looks-4:before {\n  content: \"\\f22f\"; }\n\n.md-looks-5:before {\n  content: \"\\f230\"; }\n\n.md-looks-6:before {\n  content: \"\\f231\"; }\n\n.md-loupe:before {\n  content: \"\\f232\"; }\n\n.md-movie-creation:before {\n  content: \"\\f233\"; }\n\n.md-nature:before {\n  content: \"\\f234\"; }\n\n.md-nature-people:before {\n  content: \"\\f235\"; }\n\n.md-navigate-before:before {\n  content: \"\\f236\"; }\n\n.md-navigate-next:before {\n  content: \"\\f237\"; }\n\n.md-palette:before {\n  content: \"\\f238\"; }\n\n.md-panorama:before {\n  content: \"\\f239\"; }\n\n.md-panorama-fisheye:before {\n  content: \"\\f23a\"; }\n\n.md-panorama-horizontal:before {\n  content: \"\\f23b\"; }\n\n.md-panorama-vertical:before {\n  content: \"\\f23c\"; }\n\n.md-panorama-wide-angle:before {\n  content: \"\\f23d\"; }\n\n.md-photo:before {\n  content: \"\\f23e\"; }\n\n.md-photo-album:before {\n  content: \"\\f23f\"; }\n\n.md-photo-camera:before {\n  content: \"\\f240\"; }\n\n.md-photo-library:before {\n  content: \"\\f241\"; }\n\n.md-portrait:before {\n  content: \"\\f242\"; }\n\n.md-remove-red-eye:before {\n  content: \"\\f243\"; }\n\n.md-rotate-left:before {\n  content: \"\\f244\"; }\n\n.md-rotate-right:before {\n  content: \"\\f245\"; }\n\n.md-slideshow:before {\n  content: \"\\f246\"; }\n\n.md-straighten:before {\n  content: \"\\f247\"; }\n\n.md-style:before {\n  content: \"\\f248\"; }\n\n.md-switch-camera:before {\n  content: \"\\f249\"; }\n\n.md-switch-video:before {\n  content: \"\\f24a\"; }\n\n.md-tag-faces:before {\n  content: \"\\f24b\"; }\n\n.md-texture:before {\n  content: \"\\f24c\"; }\n\n.md-timelapse:before {\n  content: \"\\f24d\"; }\n\n.md-timer:before {\n  content: \"\\f24e\"; }\n\n.md-timer-3:before {\n  content: \"\\f24f\"; }\n\n.md-timer-10:before {\n  content: \"\\f250\"; }\n\n.md-timer-auto:before {\n  content: \"\\f251\"; }\n\n.md-timer-off:before {\n  content: \"\\f252\"; }\n\n.md-tonality:before {\n  content: \"\\f253\"; }\n\n.md-transform:before {\n  content: \"\\f254\"; }\n\n.md-tune:before {\n  content: \"\\f255\"; }\n\n.md-wb-auto:before {\n  content: \"\\f256\"; }\n\n.md-wb-cloudy:before {\n  content: \"\\f257\"; }\n\n.md-wb-incandescent:before {\n  content: \"\\f258\"; }\n\n.md-wb-irradescent:before {\n  content: \"\\f259\"; }\n\n.md-wb-sunny:before {\n  content: \"\\f25a\"; }\n\n.md-beenhere:before {\n  content: \"\\f25b\"; }\n\n.md-directions:before {\n  content: \"\\f25c\"; }\n\n.md-directions-bike:before {\n  content: \"\\f25d\"; }\n\n.md-directions-bus:before {\n  content: \"\\f25e\"; }\n\n.md-directions-car:before {\n  content: \"\\f25f\"; }\n\n.md-directions-ferry:before {\n  content: \"\\f260\"; }\n\n.md-directions-subway:before {\n  content: \"\\f261\"; }\n\n.md-directions-train:before {\n  content: \"\\f262\"; }\n\n.md-directions-transit:before {\n  content: \"\\f263\"; }\n\n.md-directions-walk:before {\n  content: \"\\f264\"; }\n\n.md-flight:before {\n  content: \"\\f265\"; }\n\n.md-hotel:before {\n  content: \"\\f266\"; }\n\n.md-layers:before {\n  content: \"\\f267\"; }\n\n.md-layers-clear:before {\n  content: \"\\f268\"; }\n\n.md-local-airport:before {\n  content: \"\\f269\"; }\n\n.md-local-atm:before {\n  content: \"\\f26a\"; }\n\n.md-local-attraction:before {\n  content: \"\\f26b\"; }\n\n.md-local-bar:before {\n  content: \"\\f26c\"; }\n\n.md-local-cafe:before {\n  content: \"\\f26d\"; }\n\n.md-local-car-wash:before {\n  content: \"\\f26e\"; }\n\n.md-local-convenience-store:before {\n  content: \"\\f26f\"; }\n\n.md-local-drink:before {\n  content: \"\\f270\"; }\n\n.md-local-florist:before {\n  content: \"\\f271\"; }\n\n.md-local-gas-station:before {\n  content: \"\\f272\"; }\n\n.md-local-grocery-store:before {\n  content: \"\\f273\"; }\n\n.md-local-hospital:before {\n  content: \"\\f274\"; }\n\n.md-local-hotel:before {\n  content: \"\\f275\"; }\n\n.md-local-laundry-service:before {\n  content: \"\\f276\"; }\n\n.md-local-library:before {\n  content: \"\\f277\"; }\n\n.md-local-mall:before {\n  content: \"\\f278\"; }\n\n.md-local-movies:before {\n  content: \"\\f279\"; }\n\n.md-local-offer:before {\n  content: \"\\f27a\"; }\n\n.md-local-parking:before {\n  content: \"\\f27b\"; }\n\n.md-local-pharmacy:before {\n  content: \"\\f27c\"; }\n\n.md-local-phone:before {\n  content: \"\\f27d\"; }\n\n.md-local-pizza:before {\n  content: \"\\f27e\"; }\n\n.md-local-play:before {\n  content: \"\\f27f\"; }\n\n.md-local-post-office:before {\n  content: \"\\f280\"; }\n\n.md-local-print-shop:before {\n  content: \"\\f281\"; }\n\n.md-local-restaurant:before {\n  content: \"\\f282\"; }\n\n.md-local-see:before {\n  content: \"\\f283\"; }\n\n.md-local-shipping:before {\n  content: \"\\f284\"; }\n\n.md-local-taxi:before {\n  content: \"\\f285\"; }\n\n.md-location-history:before {\n  content: \"\\f286\"; }\n\n.md-map:before {\n  content: \"\\f287\"; }\n\n.md-my-location:before {\n  content: \"\\f288\"; }\n\n.md-navigation:before {\n  content: \"\\f289\"; }\n\n.md-pin-drop:before {\n  content: \"\\f28a\"; }\n\n.md-place:before {\n  content: \"\\f28b\"; }\n\n.md-rate-review:before {\n  content: \"\\f28c\"; }\n\n.md-restaurant-menu:before {\n  content: \"\\f28d\"; }\n\n.md-satellite:before {\n  content: \"\\f28e\"; }\n\n.md-store-mall-directory:before {\n  content: \"\\f28f\"; }\n\n.md-terrain:before {\n  content: \"\\f290\"; }\n\n.md-traffic:before {\n  content: \"\\f291\"; }\n\n.md-apps:before {\n  content: \"\\f292\"; }\n\n.md-cancel:before {\n  content: \"\\f293\"; }\n\n.md-arrow-drop-down-circle:before {\n  content: \"\\f294\"; }\n\n.md-arrow-drop-down:before {\n  content: \"\\f295\"; }\n\n.md-arrow-drop-up:before {\n  content: \"\\f296\"; }\n\n.md-arrow-back:before {\n  content: \"\\f297\"; }\n\n.md-arrow-forward:before {\n  content: \"\\f298\"; }\n\n.md-check:before {\n  content: \"\\f299\"; }\n\n.md-close:before {\n  content: \"\\f29a\"; }\n\n.md-chevron-left:before {\n  content: \"\\f29b\"; }\n\n.md-chevron-right:before {\n  content: \"\\f29c\"; }\n\n.md-expand-less:before {\n  content: \"\\f29d\"; }\n\n.md-expand-more:before {\n  content: \"\\f29e\"; }\n\n.md-fullscreen:before {\n  content: \"\\f29f\"; }\n\n.md-fullscreen-exit:before {\n  content: \"\\f2a0\"; }\n\n.md-menu:before {\n  content: \"\\f2a1\"; }\n\n.md-more-horiz:before {\n  content: \"\\f2a2\"; }\n\n.md-more-vert:before {\n  content: \"\\f2a3\"; }\n\n.md-refresh:before {\n  content: \"\\f2a4\"; }\n\n.md-unfold-less:before {\n  content: \"\\f2a5\"; }\n\n.md-unfold-more:before {\n  content: \"\\f2a6\"; }\n\n.md-adb:before {\n  content: \"\\f2a7\"; }\n\n.md-bluetooth-audio:before {\n  content: \"\\f2a8\"; }\n\n.md-disc-full:before {\n  content: \"\\f2a9\"; }\n\n.md-dnd-forwardslash:before {\n  content: \"\\f2aa\"; }\n\n.md-do-not-disturb:before {\n  content: \"\\f2ab\"; }\n\n.md-drive-eta:before {\n  content: \"\\f2ac\"; }\n\n.md-event-available:before {\n  content: \"\\f2ad\"; }\n\n.md-event-busy:before {\n  content: \"\\f2ae\"; }\n\n.md-event-note:before {\n  content: \"\\f2af\"; }\n\n.md-folder-special:before {\n  content: \"\\f2b0\"; }\n\n.md-mms:before {\n  content: \"\\f2b1\"; }\n\n.md-more:before {\n  content: \"\\f2b2\"; }\n\n.md-network-locked:before {\n  content: \"\\f2b3\"; }\n\n.md-phone-bluetooth-speaker:before {\n  content: \"\\f2b4\"; }\n\n.md-phone-forwarded:before {\n  content: \"\\f2b5\"; }\n\n.md-phone-in-talk:before {\n  content: \"\\f2b6\"; }\n\n.md-phone-locked:before {\n  content: \"\\f2b7\"; }\n\n.md-phone-missed:before {\n  content: \"\\f2b8\"; }\n\n.md-phone-paused:before {\n  content: \"\\f2b9\"; }\n\n.md-play-download:before {\n  content: \"\\f2ba\"; }\n\n.md-play-install:before {\n  content: \"\\f2bb\"; }\n\n.md-sd-card:before {\n  content: \"\\f2bc\"; }\n\n.md-sim-card-alert:before {\n  content: \"\\f2bd\"; }\n\n.md-sms:before {\n  content: \"\\f2be\"; }\n\n.md-sms-failed:before {\n  content: \"\\f2bf\"; }\n\n.md-sync:before {\n  content: \"\\f2c0\"; }\n\n.md-sync-disabled:before {\n  content: \"\\f2c1\"; }\n\n.md-sync-problem:before {\n  content: \"\\f2c2\"; }\n\n.md-system-update:before {\n  content: \"\\f2c3\"; }\n\n.md-tap-and-play:before {\n  content: \"\\f2c4\"; }\n\n.md-time-to-leave:before {\n  content: \"\\f2c5\"; }\n\n.md-vibration:before {\n  content: \"\\f2c6\"; }\n\n.md-voice-chat:before {\n  content: \"\\f2c7\"; }\n\n.md-vpn-lock:before {\n  content: \"\\f2c8\"; }\n\n.md-cake:before {\n  content: \"\\f2c9\"; }\n\n.md-domain:before {\n  content: \"\\f2ca\"; }\n\n.md-location-city:before {\n  content: \"\\f2cb\"; }\n\n.md-mood:before {\n  content: \"\\f2cc\"; }\n\n.md-notifications-none:before {\n  content: \"\\f2cd\"; }\n\n.md-notifications:before {\n  content: \"\\f2ce\"; }\n\n.md-notifications-off:before {\n  content: \"\\f2cf\"; }\n\n.md-notifications-on:before {\n  content: \"\\f2d0\"; }\n\n.md-notifications-paused:before {\n  content: \"\\f2d1\"; }\n\n.md-pages:before {\n  content: \"\\f2d2\"; }\n\n.md-party-mode:before {\n  content: \"\\f2d3\"; }\n\n.md-group:before {\n  content: \"\\f2d4\"; }\n\n.md-group-add:before {\n  content: \"\\f2d5\"; }\n\n.md-people:before {\n  content: \"\\f2d6\"; }\n\n.md-people-outline:before {\n  content: \"\\f2d7\"; }\n\n.md-person:before {\n  content: \"\\f2d8\"; }\n\n.md-person-add:before {\n  content: \"\\f2d9\"; }\n\n.md-person-outline:before {\n  content: \"\\f2da\"; }\n\n.md-plus-one:before {\n  content: \"\\f2db\"; }\n\n.md-poll:before {\n  content: \"\\f2dc\"; }\n\n.md-public:before {\n  content: \"\\f2dd\"; }\n\n.md-school:before {\n  content: \"\\f2de\"; }\n\n.md-share:before {\n  content: \"\\f2df\"; }\n\n.md-whatshot:before {\n  content: \"\\f2e0\"; }\n\n.md-check-box:before {\n  content: \"\\f2e1\"; }\n\n.md-check-box-outline-blank:before {\n  content: \"\\f2e2\"; }\n\n.md-radio-button-off:before {\n  content: \"\\f2e3\"; }\n\n.md-radio-button-on:before {\n  content: \"\\f2e4\"; }\n\n.md-star:before {\n  content: \"\\f2e5\"; }\n\n.md-star-half:before {\n  content: \"\\f2e6\"; }\n\n.md-star-outline:before {\n  content: \"\\f2e7\"; }\n\n@font-face {\n  font-family: \"simple-line-icons\";\n  src: url(\"../fonts/Simple-Line-Icons.eot?-i3a2kk\");\n  src: url(\"../fonts/Simple-Line-Icons.eot?#iefix-i3a2kk\") format(\"embedded-opentype\"), url(\"../fonts/Simple-Line-Icons.ttf?-i3a2kk\") format(\"truetype\"), url(\"../fonts/Simple-Line-Icons.woff2?-i3a2kk\") format(\"woff2\"), url(\"../fonts/Simple-Line-Icons.woff?-i3a2kk\") format(\"woff\"), url(\"../fonts/Simple-Line-Icons.svg?-i3a2kk#simple-line-icons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.icon-user, .icon-people, .icon-user-female, .icon-user-follow, .icon-user-following, .icon-user-unfollow, .icon-login, .icon-logout, .icon-emotsmile, .icon-phone, .icon-call-end, .icon-call-in, .icon-call-out, .icon-map, .icon-location-pin, .icon-direction, .icon-directions, .icon-compass, .icon-layers, .icon-menu, .icon-list, .icon-options-vertical, .icon-options, .icon-arrow-down, .icon-arrow-left, .icon-arrow-right, .icon-arrow-up, .icon-arrow-up-circle, .icon-arrow-left-circle, .icon-arrow-right-circle, .icon-arrow-down-circle, .icon-check, .icon-clock, .icon-plus, .icon-close, .icon-trophy, .icon-screen-smartphone, .icon-screen-desktop, .icon-plane, .icon-notebook, .icon-mustache, .icon-mouse, .icon-magnet, .icon-energy, .icon-disc, .icon-cursor, .icon-cursor-move, .icon-crop, .icon-chemistry, .icon-speedometer, .icon-shield, .icon-screen-tablet, .icon-magic-wand, .icon-hourglass, .icon-graduation, .icon-ghost, .icon-game-controller, .icon-fire, .icon-eyeglass, .icon-envelope-open, .icon-envelope-letter, .icon-bell, .icon-badge, .icon-anchor, .icon-wallet, .icon-vector, .icon-speech, .icon-puzzle, .icon-printer, .icon-present, .icon-playlist, .icon-pin, .icon-picture, .icon-handbag, .icon-globe-alt, .icon-globe, .icon-folder-alt, .icon-folder, .icon-film, .icon-feed, .icon-drop, .icon-drawar, .icon-docs, .icon-doc, .icon-diamond, .icon-cup, .icon-calculator, .icon-bubbles, .icon-briefcase, .icon-book-open, .icon-basket-loaded, .icon-basket, .icon-bag, .icon-action-undo, .icon-action-redo, .icon-wrench, .icon-umbrella, .icon-trash, .icon-tag, .icon-support, .icon-frame, .icon-size-fullscreen, .icon-size-actual, .icon-shuffle, .icon-share-alt, .icon-share, .icon-rocket, .icon-question, .icon-pie-chart, .icon-pencil, .icon-note, .icon-loop, .icon-home, .icon-grid, .icon-graph, .icon-microphone, .icon-music-tone-alt, .icon-music-tone, .icon-earphones-alt, .icon-earphones, .icon-equalizer, .icon-like, .icon-dislike, .icon-control-start, .icon-control-rewind, .icon-control-play, .icon-control-pause, .icon-control-forward, .icon-control-end, .icon-volume-1, .icon-volume-2, .icon-volume-off, .icon-calender, .icon-bulb, .icon-chart, .icon-ban, .icon-bubble, .icon-camrecorder, .icon-camera, .icon-cloud-download, .icon-cloud-upload, .icon-envelope, .icon-eye, .icon-flag, .icon-heart, .icon-info, .icon-key, .icon-link, .icon-lock, .icon-lock-open, .icon-magnifier, .icon-magnifier-add, .icon-magnifier-remove, .icon-paper-clip, .icon-paper-plane, .icon-power, .icon-refresh, .icon-reload, .icon-settings, .icon-star, .icon-symble-female, .icon-symbol-male, .icon-target, .icon-credit-card, .icon-paypal, .icon-social-tumblr, .icon-social-twitter, .icon-social-facebook, .icon-social-instagram, .icon-social-linkedin, .icon-social-pintarest, .icon-social-github, .icon-social-gplus, .icon-social-reddit, .icon-social-skype, .icon-social-dribbble, .icon-social-behance, .icon-social-foursqare, .icon-social-soundcloud, .icon-social-spotify, .icon-social-stumbleupon, .icon-social-youtube, .icon-social-dropbox {\n  font-family: \"simple-line-icons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.icon-user:before {\n  content: \"\\e005\"; }\n\n.icon-people:before {\n  content: \"\\e001\"; }\n\n.icon-user-female:before {\n  content: \"\\e000\"; }\n\n.icon-user-follow:before {\n  content: \"\\e002\"; }\n\n.icon-user-following:before {\n  content: \"\\e003\"; }\n\n.icon-user-unfollow:before {\n  content: \"\\e004\"; }\n\n.icon-login:before {\n  content: \"\\e066\"; }\n\n.icon-logout:before {\n  content: \"\\e065\"; }\n\n.icon-emotsmile:before {\n  content: \"\\e021\"; }\n\n.icon-phone:before {\n  content: \"\\e600\"; }\n\n.icon-call-end:before {\n  content: \"\\e048\"; }\n\n.icon-call-in:before {\n  content: \"\\e047\"; }\n\n.icon-call-out:before {\n  content: \"\\e046\"; }\n\n.icon-map:before {\n  content: \"\\e033\"; }\n\n.icon-location-pin:before {\n  content: \"\\e096\"; }\n\n.icon-direction:before {\n  content: \"\\e042\"; }\n\n.icon-directions:before {\n  content: \"\\e041\"; }\n\n.icon-compass:before {\n  content: \"\\e045\"; }\n\n.icon-layers:before {\n  content: \"\\e034\"; }\n\n.icon-menu:before {\n  content: \"\\e601\"; }\n\n.icon-list:before {\n  content: \"\\e067\"; }\n\n.icon-options-vertical:before {\n  content: \"\\e602\"; }\n\n.icon-options:before {\n  content: \"\\e603\"; }\n\n.icon-arrow-down:before {\n  content: \"\\e604\"; }\n\n.icon-arrow-left:before {\n  content: \"\\e605\"; }\n\n.icon-arrow-right:before {\n  content: \"\\e606\"; }\n\n.icon-arrow-up:before {\n  content: \"\\e607\"; }\n\n.icon-arrow-up-circle:before {\n  content: \"\\e078\"; }\n\n.icon-arrow-left-circle:before {\n  content: \"\\e07a\"; }\n\n.icon-arrow-right-circle:before {\n  content: \"\\e079\"; }\n\n.icon-arrow-down-circle:before {\n  content: \"\\e07b\"; }\n\n.icon-check:before {\n  content: \"\\e080\"; }\n\n.icon-clock:before {\n  content: \"\\e081\"; }\n\n.icon-plus:before {\n  content: \"\\e095\"; }\n\n.icon-close:before {\n  content: \"\\e082\"; }\n\n.icon-trophy:before {\n  content: \"\\e006\"; }\n\n.icon-screen-smartphone:before {\n  content: \"\\e010\"; }\n\n.icon-screen-desktop:before {\n  content: \"\\e011\"; }\n\n.icon-plane:before {\n  content: \"\\e012\"; }\n\n.icon-notebook:before {\n  content: \"\\e013\"; }\n\n.icon-mustache:before {\n  content: \"\\e014\"; }\n\n.icon-mouse:before {\n  content: \"\\e015\"; }\n\n.icon-magnet:before {\n  content: \"\\e016\"; }\n\n.icon-energy:before {\n  content: \"\\e020\"; }\n\n.icon-disc:before {\n  content: \"\\e022\"; }\n\n.icon-cursor:before {\n  content: \"\\e06e\"; }\n\n.icon-cursor-move:before {\n  content: \"\\e023\"; }\n\n.icon-crop:before {\n  content: \"\\e024\"; }\n\n.icon-chemistry:before {\n  content: \"\\e026\"; }\n\n.icon-speedometer:before {\n  content: \"\\e007\"; }\n\n.icon-shield:before {\n  content: \"\\e00e\"; }\n\n.icon-screen-tablet:before {\n  content: \"\\e00f\"; }\n\n.icon-magic-wand:before {\n  content: \"\\e017\"; }\n\n.icon-hourglass:before {\n  content: \"\\e018\"; }\n\n.icon-graduation:before {\n  content: \"\\e019\"; }\n\n.icon-ghost:before {\n  content: \"\\e01a\"; }\n\n.icon-game-controller:before {\n  content: \"\\e01b\"; }\n\n.icon-fire:before {\n  content: \"\\e01c\"; }\n\n.icon-eyeglass:before {\n  content: \"\\e01d\"; }\n\n.icon-envelope-open:before {\n  content: \"\\e01e\"; }\n\n.icon-envelope-letter:before {\n  content: \"\\e01f\"; }\n\n.icon-bell:before {\n  content: \"\\e027\"; }\n\n.icon-badge:before {\n  content: \"\\e028\"; }\n\n.icon-anchor:before {\n  content: \"\\e029\"; }\n\n.icon-wallet:before {\n  content: \"\\e02a\"; }\n\n.icon-vector:before {\n  content: \"\\e02b\"; }\n\n.icon-speech:before {\n  content: \"\\e02c\"; }\n\n.icon-puzzle:before {\n  content: \"\\e02d\"; }\n\n.icon-printer:before {\n  content: \"\\e02e\"; }\n\n.icon-present:before {\n  content: \"\\e02f\"; }\n\n.icon-playlist:before {\n  content: \"\\e030\"; }\n\n.icon-pin:before {\n  content: \"\\e031\"; }\n\n.icon-picture:before {\n  content: \"\\e032\"; }\n\n.icon-handbag:before {\n  content: \"\\e035\"; }\n\n.icon-globe-alt:before {\n  content: \"\\e036\"; }\n\n.icon-globe:before {\n  content: \"\\e037\"; }\n\n.icon-folder-alt:before {\n  content: \"\\e039\"; }\n\n.icon-folder:before {\n  content: \"\\e089\"; }\n\n.icon-film:before {\n  content: \"\\e03a\"; }\n\n.icon-feed:before {\n  content: \"\\e03b\"; }\n\n.icon-drop:before {\n  content: \"\\e03e\"; }\n\n.icon-drawar:before {\n  content: \"\\e03f\"; }\n\n.icon-docs:before {\n  content: \"\\e040\"; }\n\n.icon-doc:before {\n  content: \"\\e085\"; }\n\n.icon-diamond:before {\n  content: \"\\e043\"; }\n\n.icon-cup:before {\n  content: \"\\e044\"; }\n\n.icon-calculator:before {\n  content: \"\\e049\"; }\n\n.icon-bubbles:before {\n  content: \"\\e04a\"; }\n\n.icon-briefcase:before {\n  content: \"\\e04b\"; }\n\n.icon-book-open:before {\n  content: \"\\e04c\"; }\n\n.icon-basket-loaded:before {\n  content: \"\\e04d\"; }\n\n.icon-basket:before {\n  content: \"\\e04e\"; }\n\n.icon-bag:before {\n  content: \"\\e04f\"; }\n\n.icon-action-undo:before {\n  content: \"\\e050\"; }\n\n.icon-action-redo:before {\n  content: \"\\e051\"; }\n\n.icon-wrench:before {\n  content: \"\\e052\"; }\n\n.icon-umbrella:before {\n  content: \"\\e053\"; }\n\n.icon-trash:before {\n  content: \"\\e054\"; }\n\n.icon-tag:before {\n  content: \"\\e055\"; }\n\n.icon-support:before {\n  content: \"\\e056\"; }\n\n.icon-frame:before {\n  content: \"\\e038\"; }\n\n.icon-size-fullscreen:before {\n  content: \"\\e057\"; }\n\n.icon-size-actual:before {\n  content: \"\\e058\"; }\n\n.icon-shuffle:before {\n  content: \"\\e059\"; }\n\n.icon-share-alt:before {\n  content: \"\\e05a\"; }\n\n.icon-share:before {\n  content: \"\\e05b\"; }\n\n.icon-rocket:before {\n  content: \"\\e05c\"; }\n\n.icon-question:before {\n  content: \"\\e05d\"; }\n\n.icon-pie-chart:before {\n  content: \"\\e05e\"; }\n\n.icon-pencil:before {\n  content: \"\\e05f\"; }\n\n.icon-note:before {\n  content: \"\\e060\"; }\n\n.icon-loop:before {\n  content: \"\\e064\"; }\n\n.icon-home:before {\n  content: \"\\e069\"; }\n\n.icon-grid:before {\n  content: \"\\e06a\"; }\n\n.icon-graph:before {\n  content: \"\\e06b\"; }\n\n.icon-microphone:before {\n  content: \"\\e063\"; }\n\n.icon-music-tone-alt:before {\n  content: \"\\e061\"; }\n\n.icon-music-tone:before {\n  content: \"\\e062\"; }\n\n.icon-earphones-alt:before {\n  content: \"\\e03c\"; }\n\n.icon-earphones:before {\n  content: \"\\e03d\"; }\n\n.icon-equalizer:before {\n  content: \"\\e06c\"; }\n\n.icon-like:before {\n  content: \"\\e068\"; }\n\n.icon-dislike:before {\n  content: \"\\e06d\"; }\n\n.icon-control-start:before {\n  content: \"\\e06f\"; }\n\n.icon-control-rewind:before {\n  content: \"\\e070\"; }\n\n.icon-control-play:before {\n  content: \"\\e071\"; }\n\n.icon-control-pause:before {\n  content: \"\\e072\"; }\n\n.icon-control-forward:before {\n  content: \"\\e073\"; }\n\n.icon-control-end:before {\n  content: \"\\e074\"; }\n\n.icon-volume-1:before {\n  content: \"\\e09f\"; }\n\n.icon-volume-2:before {\n  content: \"\\e0a0\"; }\n\n.icon-volume-off:before {\n  content: \"\\e0a1\"; }\n\n.icon-calender:before {\n  content: \"\\e075\"; }\n\n.icon-bulb:before {\n  content: \"\\e076\"; }\n\n.icon-chart:before {\n  content: \"\\e077\"; }\n\n.icon-ban:before {\n  content: \"\\e07c\"; }\n\n.icon-bubble:before {\n  content: \"\\e07d\"; }\n\n.icon-camrecorder:before {\n  content: \"\\e07e\"; }\n\n.icon-camera:before {\n  content: \"\\e07f\"; }\n\n.icon-cloud-download:before {\n  content: \"\\e083\"; }\n\n.icon-cloud-upload:before {\n  content: \"\\e084\"; }\n\n.icon-envelope:before {\n  content: \"\\e086\"; }\n\n.icon-eye:before {\n  content: \"\\e087\"; }\n\n.icon-flag:before {\n  content: \"\\e088\"; }\n\n.icon-heart:before {\n  content: \"\\e08a\"; }\n\n.icon-info:before {\n  content: \"\\e08b\"; }\n\n.icon-key:before {\n  content: \"\\e08c\"; }\n\n.icon-link:before {\n  content: \"\\e08d\"; }\n\n.icon-lock:before {\n  content: \"\\e08e\"; }\n\n.icon-lock-open:before {\n  content: \"\\e08f\"; }\n\n.icon-magnifier:before {\n  content: \"\\e090\"; }\n\n.icon-magnifier-add:before {\n  content: \"\\e091\"; }\n\n.icon-magnifier-remove:before {\n  content: \"\\e092\"; }\n\n.icon-paper-clip:before {\n  content: \"\\e093\"; }\n\n.icon-paper-plane:before {\n  content: \"\\e094\"; }\n\n.icon-power:before {\n  content: \"\\e097\"; }\n\n.icon-refresh:before {\n  content: \"\\e098\"; }\n\n.icon-reload:before {\n  content: \"\\e099\"; }\n\n.icon-settings:before {\n  content: \"\\e09a\"; }\n\n.icon-star:before {\n  content: \"\\e09b\"; }\n\n.icon-symble-female:before {\n  content: \"\\e09c\"; }\n\n.icon-symbol-male:before {\n  content: \"\\e09d\"; }\n\n.icon-target:before {\n  content: \"\\e09e\"; }\n\n.icon-credit-card:before {\n  content: \"\\e025\"; }\n\n.icon-paypal:before {\n  content: \"\\e608\"; }\n\n.icon-social-tumblr:before {\n  content: \"\\e00a\"; }\n\n.icon-social-twitter:before {\n  content: \"\\e009\"; }\n\n.icon-social-facebook:before {\n  content: \"\\e00b\"; }\n\n.icon-social-instagram:before {\n  content: \"\\e609\"; }\n\n.icon-social-linkedin:before {\n  content: \"\\e60a\"; }\n\n.icon-social-pintarest:before {\n  content: \"\\e60b\"; }\n\n.icon-social-github:before {\n  content: \"\\e60c\"; }\n\n.icon-social-gplus:before {\n  content: \"\\e60d\"; }\n\n.icon-social-reddit:before {\n  content: \"\\e60e\"; }\n\n.icon-social-skype:before {\n  content: \"\\e60f\"; }\n\n.icon-social-dribbble:before {\n  content: \"\\e00d\"; }\n\n.icon-social-behance:before {\n  content: \"\\e610\"; }\n\n.icon-social-foursqare:before {\n  content: \"\\e611\"; }\n\n.icon-social-soundcloud:before {\n  content: \"\\e612\"; }\n\n.icon-social-spotify:before {\n  content: \"\\e613\"; }\n\n.icon-social-stumbleupon:before {\n  content: \"\\e614\"; }\n\n.icon-social-youtube:before {\n  content: \"\\e008\"; }\n\n.icon-social-dropbox:before {\n  content: \"\\e00c\"; }\n\n/*!\n  Ionicons, v1.5.0\n  Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/driftyco/ionicons\n*/\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=1.5.0\");\n  src: url(\"../fonts/ionicons.eot?v=1.5.0#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=1.5.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=1.5.0\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=1.5.0#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.ion, .ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading, .ionicons,\n.ion-alert,\n.ion-alert-circled,\n.ion-android-add,\n.ion-android-add-contact,\n.ion-android-alarm,\n.ion-android-archive,\n.ion-android-arrow-back,\n.ion-android-arrow-down-left,\n.ion-android-arrow-down-right,\n.ion-android-arrow-forward,\n.ion-android-arrow-up-left,\n.ion-android-arrow-up-right,\n.ion-android-battery,\n.ion-android-book,\n.ion-android-calendar,\n.ion-android-call,\n.ion-android-camera,\n.ion-android-chat,\n.ion-android-checkmark,\n.ion-android-clock,\n.ion-android-close,\n.ion-android-contact,\n.ion-android-contacts,\n.ion-android-data,\n.ion-android-developer,\n.ion-android-display,\n.ion-android-download,\n.ion-android-drawer,\n.ion-android-dropdown,\n.ion-android-earth,\n.ion-android-folder,\n.ion-android-forums,\n.ion-android-friends,\n.ion-android-hand,\n.ion-android-image,\n.ion-android-inbox,\n.ion-android-information,\n.ion-android-keypad,\n.ion-android-lightbulb,\n.ion-android-locate,\n.ion-android-location,\n.ion-android-mail,\n.ion-android-microphone,\n.ion-android-mixer,\n.ion-android-more,\n.ion-android-note,\n.ion-android-playstore,\n.ion-android-printer,\n.ion-android-promotion,\n.ion-android-reminder,\n.ion-android-remove,\n.ion-android-search,\n.ion-android-send,\n.ion-android-settings,\n.ion-android-share,\n.ion-android-social,\n.ion-android-social-user,\n.ion-android-sort,\n.ion-android-stair-drawer,\n.ion-android-star,\n.ion-android-stopwatch,\n.ion-android-storage,\n.ion-android-system-back,\n.ion-android-system-home,\n.ion-android-system-windows,\n.ion-android-timer,\n.ion-android-trash,\n.ion-android-user-menu,\n.ion-android-volume,\n.ion-android-wifi,\n.ion-aperture,\n.ion-archive,\n.ion-arrow-down-a,\n.ion-arrow-down-b,\n.ion-arrow-down-c,\n.ion-arrow-expand,\n.ion-arrow-graph-down-left,\n.ion-arrow-graph-down-right,\n.ion-arrow-graph-up-left,\n.ion-arrow-graph-up-right,\n.ion-arrow-left-a,\n.ion-arrow-left-b,\n.ion-arrow-left-c,\n.ion-arrow-move,\n.ion-arrow-resize,\n.ion-arrow-return-left,\n.ion-arrow-return-right,\n.ion-arrow-right-a,\n.ion-arrow-right-b,\n.ion-arrow-right-c,\n.ion-arrow-shrink,\n.ion-arrow-swap,\n.ion-arrow-up-a,\n.ion-arrow-up-b,\n.ion-arrow-up-c,\n.ion-asterisk,\n.ion-at,\n.ion-bag,\n.ion-battery-charging,\n.ion-battery-empty,\n.ion-battery-full,\n.ion-battery-half,\n.ion-battery-low,\n.ion-beaker,\n.ion-beer,\n.ion-bluetooth,\n.ion-bonfire,\n.ion-bookmark,\n.ion-briefcase,\n.ion-bug,\n.ion-calculator,\n.ion-calendar,\n.ion-camera,\n.ion-card,\n.ion-cash,\n.ion-chatbox,\n.ion-chatbox-working,\n.ion-chatboxes,\n.ion-chatbubble,\n.ion-chatbubble-working,\n.ion-chatbubbles,\n.ion-checkmark,\n.ion-checkmark-circled,\n.ion-checkmark-round,\n.ion-chevron-down,\n.ion-chevron-left,\n.ion-chevron-right,\n.ion-chevron-up,\n.ion-clipboard,\n.ion-clock,\n.ion-close,\n.ion-close-circled,\n.ion-close-round,\n.ion-closed-captioning,\n.ion-cloud,\n.ion-code,\n.ion-code-download,\n.ion-code-working,\n.ion-coffee,\n.ion-compass,\n.ion-compose,\n.ion-connection-bars,\n.ion-contrast,\n.ion-cube,\n.ion-disc,\n.ion-document,\n.ion-document-text,\n.ion-drag,\n.ion-earth,\n.ion-edit,\n.ion-egg,\n.ion-eject,\n.ion-email,\n.ion-eye,\n.ion-eye-disabled,\n.ion-female,\n.ion-filing,\n.ion-film-marker,\n.ion-fireball,\n.ion-flag,\n.ion-flame,\n.ion-flash,\n.ion-flash-off,\n.ion-flask,\n.ion-folder,\n.ion-fork,\n.ion-fork-repo,\n.ion-forward,\n.ion-funnel,\n.ion-game-controller-a,\n.ion-game-controller-b,\n.ion-gear-a,\n.ion-gear-b,\n.ion-grid,\n.ion-hammer,\n.ion-happy,\n.ion-headphone,\n.ion-heart,\n.ion-heart-broken,\n.ion-help,\n.ion-help-buoy,\n.ion-help-circled,\n.ion-home,\n.ion-icecream,\n.ion-icon-social-google-plus,\n.ion-icon-social-google-plus-outline,\n.ion-image,\n.ion-images,\n.ion-information,\n.ion-information-circled,\n.ion-ionic,\n.ion-ios7-alarm,\n.ion-ios7-alarm-outline,\n.ion-ios7-albums,\n.ion-ios7-albums-outline,\n.ion-ios7-americanfootball,\n.ion-ios7-americanfootball-outline,\n.ion-ios7-analytics,\n.ion-ios7-analytics-outline,\n.ion-ios7-arrow-back,\n.ion-ios7-arrow-down,\n.ion-ios7-arrow-forward,\n.ion-ios7-arrow-left,\n.ion-ios7-arrow-right,\n.ion-ios7-arrow-thin-down,\n.ion-ios7-arrow-thin-left,\n.ion-ios7-arrow-thin-right,\n.ion-ios7-arrow-thin-up,\n.ion-ios7-arrow-up,\n.ion-ios7-at,\n.ion-ios7-at-outline,\n.ion-ios7-barcode,\n.ion-ios7-barcode-outline,\n.ion-ios7-baseball,\n.ion-ios7-baseball-outline,\n.ion-ios7-basketball,\n.ion-ios7-basketball-outline,\n.ion-ios7-bell,\n.ion-ios7-bell-outline,\n.ion-ios7-bolt,\n.ion-ios7-bolt-outline,\n.ion-ios7-bookmarks,\n.ion-ios7-bookmarks-outline,\n.ion-ios7-box,\n.ion-ios7-box-outline,\n.ion-ios7-briefcase,\n.ion-ios7-briefcase-outline,\n.ion-ios7-browsers,\n.ion-ios7-browsers-outline,\n.ion-ios7-calculator,\n.ion-ios7-calculator-outline,\n.ion-ios7-calendar,\n.ion-ios7-calendar-outline,\n.ion-ios7-camera,\n.ion-ios7-camera-outline,\n.ion-ios7-cart,\n.ion-ios7-cart-outline,\n.ion-ios7-chatboxes,\n.ion-ios7-chatboxes-outline,\n.ion-ios7-chatbubble,\n.ion-ios7-chatbubble-outline,\n.ion-ios7-checkmark,\n.ion-ios7-checkmark-empty,\n.ion-ios7-checkmark-outline,\n.ion-ios7-circle-filled,\n.ion-ios7-circle-outline,\n.ion-ios7-clock,\n.ion-ios7-clock-outline,\n.ion-ios7-close,\n.ion-ios7-close-empty,\n.ion-ios7-close-outline,\n.ion-ios7-cloud,\n.ion-ios7-cloud-download,\n.ion-ios7-cloud-download-outline,\n.ion-ios7-cloud-outline,\n.ion-ios7-cloud-upload,\n.ion-ios7-cloud-upload-outline,\n.ion-ios7-cloudy,\n.ion-ios7-cloudy-night,\n.ion-ios7-cloudy-night-outline,\n.ion-ios7-cloudy-outline,\n.ion-ios7-cog,\n.ion-ios7-cog-outline,\n.ion-ios7-compose,\n.ion-ios7-compose-outline,\n.ion-ios7-contact,\n.ion-ios7-contact-outline,\n.ion-ios7-copy,\n.ion-ios7-copy-outline,\n.ion-ios7-download,\n.ion-ios7-download-outline,\n.ion-ios7-drag,\n.ion-ios7-email,\n.ion-ios7-email-outline,\n.ion-ios7-expand,\n.ion-ios7-eye,\n.ion-ios7-eye-outline,\n.ion-ios7-fastforward,\n.ion-ios7-fastforward-outline,\n.ion-ios7-filing,\n.ion-ios7-filing-outline,\n.ion-ios7-film,\n.ion-ios7-film-outline,\n.ion-ios7-flag,\n.ion-ios7-flag-outline,\n.ion-ios7-folder,\n.ion-ios7-folder-outline,\n.ion-ios7-football,\n.ion-ios7-football-outline,\n.ion-ios7-gear,\n.ion-ios7-gear-outline,\n.ion-ios7-glasses,\n.ion-ios7-glasses-outline,\n.ion-ios7-heart,\n.ion-ios7-heart-outline,\n.ion-ios7-help,\n.ion-ios7-help-empty,\n.ion-ios7-help-outline,\n.ion-ios7-home,\n.ion-ios7-home-outline,\n.ion-ios7-infinite,\n.ion-ios7-infinite-outline,\n.ion-ios7-information,\n.ion-ios7-information-empty,\n.ion-ios7-information-outline,\n.ion-ios7-ionic-outline,\n.ion-ios7-keypad,\n.ion-ios7-keypad-outline,\n.ion-ios7-lightbulb,\n.ion-ios7-lightbulb-outline,\n.ion-ios7-location,\n.ion-ios7-location-outline,\n.ion-ios7-locked,\n.ion-ios7-locked-outline,\n.ion-ios7-loop,\n.ion-ios7-loop-strong,\n.ion-ios7-medkit,\n.ion-ios7-medkit-outline,\n.ion-ios7-mic,\n.ion-ios7-mic-off,\n.ion-ios7-mic-outline,\n.ion-ios7-minus,\n.ion-ios7-minus-empty,\n.ion-ios7-minus-outline,\n.ion-ios7-monitor,\n.ion-ios7-monitor-outline,\n.ion-ios7-moon,\n.ion-ios7-moon-outline,\n.ion-ios7-more,\n.ion-ios7-more-outline,\n.ion-ios7-musical-note,\n.ion-ios7-musical-notes,\n.ion-ios7-navigate,\n.ion-ios7-navigate-outline,\n.ion-ios7-paper,\n.ion-ios7-paper-outline,\n.ion-ios7-paperplane,\n.ion-ios7-paperplane-outline,\n.ion-ios7-partlysunny,\n.ion-ios7-partlysunny-outline,\n.ion-ios7-pause,\n.ion-ios7-pause-outline,\n.ion-ios7-paw,\n.ion-ios7-paw-outline,\n.ion-ios7-people,\n.ion-ios7-people-outline,\n.ion-ios7-person,\n.ion-ios7-person-outline,\n.ion-ios7-personadd,\n.ion-ios7-personadd-outline,\n.ion-ios7-photos,\n.ion-ios7-photos-outline,\n.ion-ios7-pie,\n.ion-ios7-pie-outline,\n.ion-ios7-play,\n.ion-ios7-play-outline,\n.ion-ios7-plus,\n.ion-ios7-plus-empty,\n.ion-ios7-plus-outline,\n.ion-ios7-pricetag,\n.ion-ios7-pricetag-outline,\n.ion-ios7-pricetags,\n.ion-ios7-pricetags-outline,\n.ion-ios7-printer,\n.ion-ios7-printer-outline,\n.ion-ios7-pulse,\n.ion-ios7-pulse-strong,\n.ion-ios7-rainy,\n.ion-ios7-rainy-outline,\n.ion-ios7-recording,\n.ion-ios7-recording-outline,\n.ion-ios7-redo,\n.ion-ios7-redo-outline,\n.ion-ios7-refresh,\n.ion-ios7-refresh-empty,\n.ion-ios7-refresh-outline,\n.ion-ios7-reload,\n.ion-ios7-reverse-camera,\n.ion-ios7-reverse-camera-outline,\n.ion-ios7-rewind,\n.ion-ios7-rewind-outline,\n.ion-ios7-search,\n.ion-ios7-search-strong,\n.ion-ios7-settings,\n.ion-ios7-settings-strong,\n.ion-ios7-shrink,\n.ion-ios7-skipbackward,\n.ion-ios7-skipbackward-outline,\n.ion-ios7-skipforward,\n.ion-ios7-skipforward-outline,\n.ion-ios7-snowy,\n.ion-ios7-speedometer,\n.ion-ios7-speedometer-outline,\n.ion-ios7-star,\n.ion-ios7-star-half,\n.ion-ios7-star-outline,\n.ion-ios7-stopwatch,\n.ion-ios7-stopwatch-outline,\n.ion-ios7-sunny,\n.ion-ios7-sunny-outline,\n.ion-ios7-telephone,\n.ion-ios7-telephone-outline,\n.ion-ios7-tennisball,\n.ion-ios7-tennisball-outline,\n.ion-ios7-thunderstorm,\n.ion-ios7-thunderstorm-outline,\n.ion-ios7-time,\n.ion-ios7-time-outline,\n.ion-ios7-timer,\n.ion-ios7-timer-outline,\n.ion-ios7-toggle,\n.ion-ios7-toggle-outline,\n.ion-ios7-trash,\n.ion-ios7-trash-outline,\n.ion-ios7-undo,\n.ion-ios7-undo-outline,\n.ion-ios7-unlocked,\n.ion-ios7-unlocked-outline,\n.ion-ios7-upload,\n.ion-ios7-upload-outline,\n.ion-ios7-videocam,\n.ion-ios7-videocam-outline,\n.ion-ios7-volume-high,\n.ion-ios7-volume-low,\n.ion-ios7-wineglass,\n.ion-ios7-wineglass-outline,\n.ion-ios7-world,\n.ion-ios7-world-outline,\n.ion-ipad,\n.ion-iphone,\n.ion-ipod,\n.ion-jet,\n.ion-key,\n.ion-knife,\n.ion-laptop,\n.ion-leaf,\n.ion-levels,\n.ion-lightbulb,\n.ion-link,\n.ion-load-a,\n.ion-load-b,\n.ion-load-c,\n.ion-load-d,\n.ion-location,\n.ion-locked,\n.ion-log-in,\n.ion-log-out,\n.ion-loop,\n.ion-magnet,\n.ion-male,\n.ion-man,\n.ion-map,\n.ion-medkit,\n.ion-merge,\n.ion-mic-a,\n.ion-mic-b,\n.ion-mic-c,\n.ion-minus,\n.ion-minus-circled,\n.ion-minus-round,\n.ion-model-s,\n.ion-monitor,\n.ion-more,\n.ion-mouse,\n.ion-music-note,\n.ion-navicon,\n.ion-navicon-round,\n.ion-navigate,\n.ion-network,\n.ion-no-smoking,\n.ion-nuclear,\n.ion-outlet,\n.ion-paper-airplane,\n.ion-paperclip,\n.ion-pause,\n.ion-person,\n.ion-person-add,\n.ion-person-stalker,\n.ion-pie-graph,\n.ion-pin,\n.ion-pinpoint,\n.ion-pizza,\n.ion-plane,\n.ion-planet,\n.ion-play,\n.ion-playstation,\n.ion-plus,\n.ion-plus-circled,\n.ion-plus-round,\n.ion-podium,\n.ion-pound,\n.ion-power,\n.ion-pricetag,\n.ion-pricetags,\n.ion-printer,\n.ion-pull-request,\n.ion-qr-scanner,\n.ion-quote,\n.ion-radio-waves,\n.ion-record,\n.ion-refresh,\n.ion-reply,\n.ion-reply-all,\n.ion-ribbon-a,\n.ion-ribbon-b,\n.ion-sad,\n.ion-scissors,\n.ion-search,\n.ion-settings,\n.ion-share,\n.ion-shuffle,\n.ion-skip-backward,\n.ion-skip-forward,\n.ion-social-android,\n.ion-social-android-outline,\n.ion-social-apple,\n.ion-social-apple-outline,\n.ion-social-bitcoin,\n.ion-social-bitcoin-outline,\n.ion-social-buffer,\n.ion-social-buffer-outline,\n.ion-social-designernews,\n.ion-social-designernews-outline,\n.ion-social-dribbble,\n.ion-social-dribbble-outline,\n.ion-social-dropbox,\n.ion-social-dropbox-outline,\n.ion-social-facebook,\n.ion-social-facebook-outline,\n.ion-social-foursquare,\n.ion-social-foursquare-outline,\n.ion-social-freebsd-devil,\n.ion-social-github,\n.ion-social-github-outline,\n.ion-social-google,\n.ion-social-google-outline,\n.ion-social-googleplus,\n.ion-social-googleplus-outline,\n.ion-social-hackernews,\n.ion-social-hackernews-outline,\n.ion-social-instagram,\n.ion-social-instagram-outline,\n.ion-social-linkedin,\n.ion-social-linkedin-outline,\n.ion-social-pinterest,\n.ion-social-pinterest-outline,\n.ion-social-reddit,\n.ion-social-reddit-outline,\n.ion-social-rss,\n.ion-social-rss-outline,\n.ion-social-skype,\n.ion-social-skype-outline,\n.ion-social-tumblr,\n.ion-social-tumblr-outline,\n.ion-social-tux,\n.ion-social-twitter,\n.ion-social-twitter-outline,\n.ion-social-usd,\n.ion-social-usd-outline,\n.ion-social-vimeo,\n.ion-social-vimeo-outline,\n.ion-social-windows,\n.ion-social-windows-outline,\n.ion-social-wordpress,\n.ion-social-wordpress-outline,\n.ion-social-yahoo,\n.ion-social-yahoo-outline,\n.ion-social-youtube,\n.ion-social-youtube-outline,\n.ion-speakerphone,\n.ion-speedometer,\n.ion-spoon,\n.ion-star,\n.ion-stats-bars,\n.ion-steam,\n.ion-stop,\n.ion-thermometer,\n.ion-thumbsdown,\n.ion-thumbsup,\n.ion-toggle,\n.ion-toggle-filled,\n.ion-trash-a,\n.ion-trash-b,\n.ion-trophy,\n.ion-umbrella,\n.ion-university,\n.ion-unlocked,\n.ion-upload,\n.ion-usb,\n.ion-videocamera,\n.ion-volume-high,\n.ion-volume-low,\n.ion-volume-medium,\n.ion-volume-mute,\n.ion-wand,\n.ion-waterdrop,\n.ion-wifi,\n.ion-wineglass,\n.ion-woman,\n.ion-wrench,\n.ion-xbox {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ion-spin, .ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear; }\n\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg); }\n  100% {\n    -moz-transform: rotate(359deg); } }\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg); } }\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg); }\n  100% {\n    -o-transform: rotate(359deg); } }\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg); }\n  100% {\n    -ms-transform: rotate(359deg); } }\n@keyframes spin {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(359deg); } }\n.ion-loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start); }\n\n.ion-alert:before {\n  content: \"\"; }\n\n.ion-alert-circled:before {\n  content: \"\"; }\n\n.ion-android-add:before {\n  content: \"\"; }\n\n.ion-android-add-contact:before {\n  content: \"\"; }\n\n.ion-android-alarm:before {\n  content: \"\"; }\n\n.ion-android-archive:before {\n  content: \"\"; }\n\n.ion-android-arrow-back:before {\n  content: \"\"; }\n\n.ion-android-arrow-down-left:before {\n  content: \"\"; }\n\n.ion-android-arrow-down-right:before {\n  content: \"\"; }\n\n.ion-android-arrow-forward:before {\n  content: \"\"; }\n\n.ion-android-arrow-up-left:before {\n  content: \"\"; }\n\n.ion-android-arrow-up-right:before {\n  content: \"\"; }\n\n.ion-android-battery:before {\n  content: \"\"; }\n\n.ion-android-book:before {\n  content: \"\"; }\n\n.ion-android-calendar:before {\n  content: \"\"; }\n\n.ion-android-call:before {\n  content: \"\"; }\n\n.ion-android-camera:before {\n  content: \"\"; }\n\n.ion-android-chat:before {\n  content: \"\"; }\n\n.ion-android-checkmark:before {\n  content: \"\"; }\n\n.ion-android-clock:before {\n  content: \"\"; }\n\n.ion-android-close:before {\n  content: \"\"; }\n\n.ion-android-contact:before {\n  content: \"\"; }\n\n.ion-android-contacts:before {\n  content: \"\"; }\n\n.ion-android-data:before {\n  content: \"\"; }\n\n.ion-android-developer:before {\n  content: \"\"; }\n\n.ion-android-display:before {\n  content: \"\"; }\n\n.ion-android-download:before {\n  content: \"\"; }\n\n.ion-android-drawer:before {\n  content: \"\"; }\n\n.ion-android-dropdown:before {\n  content: \"\"; }\n\n.ion-android-earth:before {\n  content: \"\"; }\n\n.ion-android-folder:before {\n  content: \"\"; }\n\n.ion-android-forums:before {\n  content: \"\"; }\n\n.ion-android-friends:before {\n  content: \"\"; }\n\n.ion-android-hand:before {\n  content: \"\"; }\n\n.ion-android-image:before {\n  content: \"\"; }\n\n.ion-android-inbox:before {\n  content: \"\"; }\n\n.ion-android-information:before {\n  content: \"\"; }\n\n.ion-android-keypad:before {\n  content: \"\"; }\n\n.ion-android-lightbulb:before {\n  content: \"\"; }\n\n.ion-android-locate:before {\n  content: \"\"; }\n\n.ion-android-location:before {\n  content: \"\"; }\n\n.ion-android-mail:before {\n  content: \"\"; }\n\n.ion-android-microphone:before {\n  content: \"\"; }\n\n.ion-android-mixer:before {\n  content: \"\"; }\n\n.ion-android-more:before {\n  content: \"\"; }\n\n.ion-android-note:before {\n  content: \"\"; }\n\n.ion-android-playstore:before {\n  content: \"\"; }\n\n.ion-android-printer:before {\n  content: \"\"; }\n\n.ion-android-promotion:before {\n  content: \"\"; }\n\n.ion-android-reminder:before {\n  content: \"\"; }\n\n.ion-android-remove:before {\n  content: \"\"; }\n\n.ion-android-search:before {\n  content: \"\"; }\n\n.ion-android-send:before {\n  content: \"\"; }\n\n.ion-android-settings:before {\n  content: \"\"; }\n\n.ion-android-share:before {\n  content: \"\"; }\n\n.ion-android-social:before {\n  content: \"\"; }\n\n.ion-android-social-user:before {\n  content: \"\"; }\n\n.ion-android-sort:before {\n  content: \"\"; }\n\n.ion-android-stair-drawer:before {\n  content: \"\"; }\n\n.ion-android-star:before {\n  content: \"\"; }\n\n.ion-android-stopwatch:before {\n  content: \"\"; }\n\n.ion-android-storage:before {\n  content: \"\"; }\n\n.ion-android-system-back:before {\n  content: \"\"; }\n\n.ion-android-system-home:before {\n  content: \"\"; }\n\n.ion-android-system-windows:before {\n  content: \"\"; }\n\n.ion-android-timer:before {\n  content: \"\"; }\n\n.ion-android-trash:before {\n  content: \"\"; }\n\n.ion-android-user-menu:before {\n  content: \"\"; }\n\n.ion-android-volume:before {\n  content: \"\"; }\n\n.ion-android-wifi:before {\n  content: \"\"; }\n\n.ion-aperture:before {\n  content: \"\"; }\n\n.ion-archive:before {\n  content: \"\"; }\n\n.ion-arrow-down-a:before {\n  content: \"\"; }\n\n.ion-arrow-down-b:before {\n  content: \"\"; }\n\n.ion-arrow-down-c:before {\n  content: \"\"; }\n\n.ion-arrow-expand:before {\n  content: \"\"; }\n\n.ion-arrow-graph-down-left:before {\n  content: \"\"; }\n\n.ion-arrow-graph-down-right:before {\n  content: \"\"; }\n\n.ion-arrow-graph-up-left:before {\n  content: \"\"; }\n\n.ion-arrow-graph-up-right:before {\n  content: \"\"; }\n\n.ion-arrow-left-a:before {\n  content: \"\"; }\n\n.ion-arrow-left-b:before {\n  content: \"\"; }\n\n.ion-arrow-left-c:before {\n  content: \"\"; }\n\n.ion-arrow-move:before {\n  content: \"\"; }\n\n.ion-arrow-resize:before {\n  content: \"\"; }\n\n.ion-arrow-return-left:before {\n  content: \"\"; }\n\n.ion-arrow-return-right:before {\n  content: \"\"; }\n\n.ion-arrow-right-a:before {\n  content: \"\"; }\n\n.ion-arrow-right-b:before {\n  content: \"\"; }\n\n.ion-arrow-right-c:before {\n  content: \"\"; }\n\n.ion-arrow-shrink:before {\n  content: \"\"; }\n\n.ion-arrow-swap:before {\n  content: \"\"; }\n\n.ion-arrow-up-a:before {\n  content: \"\"; }\n\n.ion-arrow-up-b:before {\n  content: \"\"; }\n\n.ion-arrow-up-c:before {\n  content: \"\"; }\n\n.ion-asterisk:before {\n  content: \"\"; }\n\n.ion-at:before {\n  content: \"\"; }\n\n.ion-bag:before {\n  content: \"\"; }\n\n.ion-battery-charging:before {\n  content: \"\"; }\n\n.ion-battery-empty:before {\n  content: \"\"; }\n\n.ion-battery-full:before {\n  content: \"\"; }\n\n.ion-battery-half:before {\n  content: \"\"; }\n\n.ion-battery-low:before {\n  content: \"\"; }\n\n.ion-beaker:before {\n  content: \"\"; }\n\n.ion-beer:before {\n  content: \"\"; }\n\n.ion-bluetooth:before {\n  content: \"\"; }\n\n.ion-bonfire:before {\n  content: \"\"; }\n\n.ion-bookmark:before {\n  content: \"\"; }\n\n.ion-briefcase:before {\n  content: \"\"; }\n\n.ion-bug:before {\n  content: \"\"; }\n\n.ion-calculator:before {\n  content: \"\"; }\n\n.ion-calendar:before {\n  content: \"\"; }\n\n.ion-camera:before {\n  content: \"\"; }\n\n.ion-card:before {\n  content: \"\"; }\n\n.ion-cash:before {\n  content: \"\"; }\n\n.ion-chatbox:before {\n  content: \"\"; }\n\n.ion-chatbox-working:before {\n  content: \"\"; }\n\n.ion-chatboxes:before {\n  content: \"\"; }\n\n.ion-chatbubble:before {\n  content: \"\"; }\n\n.ion-chatbubble-working:before {\n  content: \"\"; }\n\n.ion-chatbubbles:before {\n  content: \"\"; }\n\n.ion-checkmark:before {\n  content: \"\"; }\n\n.ion-checkmark-circled:before {\n  content: \"\"; }\n\n.ion-checkmark-round:before {\n  content: \"\"; }\n\n.ion-chevron-down:before {\n  content: \"\"; }\n\n.ion-chevron-left:before {\n  content: \"\"; }\n\n.ion-chevron-right:before {\n  content: \"\"; }\n\n.ion-chevron-up:before {\n  content: \"\"; }\n\n.ion-clipboard:before {\n  content: \"\"; }\n\n.ion-clock:before {\n  content: \"\"; }\n\n.ion-close:before {\n  content: \"\"; }\n\n.ion-close-circled:before {\n  content: \"\"; }\n\n.ion-close-round:before {\n  content: \"\"; }\n\n.ion-closed-captioning:before {\n  content: \"\"; }\n\n.ion-cloud:before {\n  content: \"\"; }\n\n.ion-code:before {\n  content: \"\"; }\n\n.ion-code-download:before {\n  content: \"\"; }\n\n.ion-code-working:before {\n  content: \"\"; }\n\n.ion-coffee:before {\n  content: \"\"; }\n\n.ion-compass:before {\n  content: \"\"; }\n\n.ion-compose:before {\n  content: \"\"; }\n\n.ion-connection-bars:before {\n  content: \"\"; }\n\n.ion-contrast:before {\n  content: \"\"; }\n\n.ion-cube:before {\n  content: \"\"; }\n\n.ion-disc:before {\n  content: \"\"; }\n\n.ion-document:before {\n  content: \"\"; }\n\n.ion-document-text:before {\n  content: \"\"; }\n\n.ion-drag:before {\n  content: \"\"; }\n\n.ion-earth:before {\n  content: \"\"; }\n\n.ion-edit:before {\n  content: \"\"; }\n\n.ion-egg:before {\n  content: \"\"; }\n\n.ion-eject:before {\n  content: \"\"; }\n\n.ion-email:before {\n  content: \"\"; }\n\n.ion-eye:before {\n  content: \"\"; }\n\n.ion-eye-disabled:before {\n  content: \"\"; }\n\n.ion-female:before {\n  content: \"\"; }\n\n.ion-filing:before {\n  content: \"\"; }\n\n.ion-film-marker:before {\n  content: \"\"; }\n\n.ion-fireball:before {\n  content: \"\"; }\n\n.ion-flag:before {\n  content: \"\"; }\n\n.ion-flame:before {\n  content: \"\"; }\n\n.ion-flash:before {\n  content: \"\"; }\n\n.ion-flash-off:before {\n  content: \"\"; }\n\n.ion-flask:before {\n  content: \"\"; }\n\n.ion-folder:before {\n  content: \"\"; }\n\n.ion-fork:before {\n  content: \"\"; }\n\n.ion-fork-repo:before {\n  content: \"\"; }\n\n.ion-forward:before {\n  content: \"\"; }\n\n.ion-funnel:before {\n  content: \"\"; }\n\n.ion-game-controller-a:before {\n  content: \"\"; }\n\n.ion-game-controller-b:before {\n  content: \"\"; }\n\n.ion-gear-a:before {\n  content: \"\"; }\n\n.ion-gear-b:before {\n  content: \"\"; }\n\n.ion-grid:before {\n  content: \"\"; }\n\n.ion-hammer:before {\n  content: \"\"; }\n\n.ion-happy:before {\n  content: \"\"; }\n\n.ion-headphone:before {\n  content: \"\"; }\n\n.ion-heart:before {\n  content: \"\"; }\n\n.ion-heart-broken:before {\n  content: \"\"; }\n\n.ion-help:before {\n  content: \"\"; }\n\n.ion-help-buoy:before {\n  content: \"\"; }\n\n.ion-help-circled:before {\n  content: \"\"; }\n\n.ion-home:before {\n  content: \"\"; }\n\n.ion-icecream:before {\n  content: \"\"; }\n\n.ion-icon-social-google-plus:before {\n  content: \"\"; }\n\n.ion-icon-social-google-plus-outline:before {\n  content: \"\"; }\n\n.ion-image:before {\n  content: \"\"; }\n\n.ion-images:before {\n  content: \"\"; }\n\n.ion-information:before {\n  content: \"\"; }\n\n.ion-information-circled:before {\n  content: \"\"; }\n\n.ion-ionic:before {\n  content: \"\"; }\n\n.ion-ios7-alarm:before {\n  content: \"\"; }\n\n.ion-ios7-alarm-outline:before {\n  content: \"\"; }\n\n.ion-ios7-albums:before {\n  content: \"\"; }\n\n.ion-ios7-albums-outline:before {\n  content: \"\"; }\n\n.ion-ios7-americanfootball:before {\n  content: \"\"; }\n\n.ion-ios7-americanfootball-outline:before {\n  content: \"\"; }\n\n.ion-ios7-analytics:before {\n  content: \"\"; }\n\n.ion-ios7-analytics-outline:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-back:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-down:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-forward:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-left:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-right:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-thin-down:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-thin-left:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-thin-right:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-thin-up:before {\n  content: \"\"; }\n\n.ion-ios7-arrow-up:before {\n  content: \"\"; }\n\n.ion-ios7-at:before {\n  content: \"\"; }\n\n.ion-ios7-at-outline:before {\n  content: \"\"; }\n\n.ion-ios7-barcode:before {\n  content: \"\"; }\n\n.ion-ios7-barcode-outline:before {\n  content: \"\"; }\n\n.ion-ios7-baseball:before {\n  content: \"\"; }\n\n.ion-ios7-baseball-outline:before {\n  content: \"\"; }\n\n.ion-ios7-basketball:before {\n  content: \"\"; }\n\n.ion-ios7-basketball-outline:before {\n  content: \"\"; }\n\n.ion-ios7-bell:before {\n  content: \"\"; }\n\n.ion-ios7-bell-outline:before {\n  content: \"\"; }\n\n.ion-ios7-bolt:before {\n  content: \"\"; }\n\n.ion-ios7-bolt-outline:before {\n  content: \"\"; }\n\n.ion-ios7-bookmarks:before {\n  content: \"\"; }\n\n.ion-ios7-bookmarks-outline:before {\n  content: \"\"; }\n\n.ion-ios7-box:before {\n  content: \"\"; }\n\n.ion-ios7-box-outline:before {\n  content: \"\"; }\n\n.ion-ios7-briefcase:before {\n  content: \"\"; }\n\n.ion-ios7-briefcase-outline:before {\n  content: \"\"; }\n\n.ion-ios7-browsers:before {\n  content: \"\"; }\n\n.ion-ios7-browsers-outline:before {\n  content: \"\"; }\n\n.ion-ios7-calculator:before {\n  content: \"\"; }\n\n.ion-ios7-calculator-outline:before {\n  content: \"\"; }\n\n.ion-ios7-calendar:before {\n  content: \"\"; }\n\n.ion-ios7-calendar-outline:before {\n  content: \"\"; }\n\n.ion-ios7-camera:before {\n  content: \"\"; }\n\n.ion-ios7-camera-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cart:before {\n  content: \"\"; }\n\n.ion-ios7-cart-outline:before {\n  content: \"\"; }\n\n.ion-ios7-chatboxes:before {\n  content: \"\"; }\n\n.ion-ios7-chatboxes-outline:before {\n  content: \"\"; }\n\n.ion-ios7-chatbubble:before {\n  content: \"\"; }\n\n.ion-ios7-chatbubble-outline:before {\n  content: \"\"; }\n\n.ion-ios7-checkmark:before {\n  content: \"\"; }\n\n.ion-ios7-checkmark-empty:before {\n  content: \"\"; }\n\n.ion-ios7-checkmark-outline:before {\n  content: \"\"; }\n\n.ion-ios7-circle-filled:before {\n  content: \"\"; }\n\n.ion-ios7-circle-outline:before {\n  content: \"\"; }\n\n.ion-ios7-clock:before {\n  content: \"\"; }\n\n.ion-ios7-clock-outline:before {\n  content: \"\"; }\n\n.ion-ios7-close:before {\n  content: \"\"; }\n\n.ion-ios7-close-empty:before {\n  content: \"\"; }\n\n.ion-ios7-close-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cloud:before {\n  content: \"\"; }\n\n.ion-ios7-cloud-download:before {\n  content: \"\"; }\n\n.ion-ios7-cloud-download-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cloud-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cloud-upload:before {\n  content: \"\"; }\n\n.ion-ios7-cloud-upload-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cloudy:before {\n  content: \"\"; }\n\n.ion-ios7-cloudy-night:before {\n  content: \"\"; }\n\n.ion-ios7-cloudy-night-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cloudy-outline:before {\n  content: \"\"; }\n\n.ion-ios7-cog:before {\n  content: \"\"; }\n\n.ion-ios7-cog-outline:before {\n  content: \"\"; }\n\n.ion-ios7-compose:before {\n  content: \"\"; }\n\n.ion-ios7-compose-outline:before {\n  content: \"\"; }\n\n.ion-ios7-contact:before {\n  content: \"\"; }\n\n.ion-ios7-contact-outline:before {\n  content: \"\"; }\n\n.ion-ios7-copy:before {\n  content: \"\"; }\n\n.ion-ios7-copy-outline:before {\n  content: \"\"; }\n\n.ion-ios7-download:before {\n  content: \"\"; }\n\n.ion-ios7-download-outline:before {\n  content: \"\"; }\n\n.ion-ios7-drag:before {\n  content: \"\"; }\n\n.ion-ios7-email:before {\n  content: \"\"; }\n\n.ion-ios7-email-outline:before {\n  content: \"\"; }\n\n.ion-ios7-expand:before {\n  content: \"\"; }\n\n.ion-ios7-eye:before {\n  content: \"\"; }\n\n.ion-ios7-eye-outline:before {\n  content: \"\"; }\n\n.ion-ios7-fastforward:before {\n  content: \"\"; }\n\n.ion-ios7-fastforward-outline:before {\n  content: \"\"; }\n\n.ion-ios7-filing:before {\n  content: \"\"; }\n\n.ion-ios7-filing-outline:before {\n  content: \"\"; }\n\n.ion-ios7-film:before {\n  content: \"\"; }\n\n.ion-ios7-film-outline:before {\n  content: \"\"; }\n\n.ion-ios7-flag:before {\n  content: \"\"; }\n\n.ion-ios7-flag-outline:before {\n  content: \"\"; }\n\n.ion-ios7-folder:before {\n  content: \"\"; }\n\n.ion-ios7-folder-outline:before {\n  content: \"\"; }\n\n.ion-ios7-football:before {\n  content: \"\"; }\n\n.ion-ios7-football-outline:before {\n  content: \"\"; }\n\n.ion-ios7-gear:before {\n  content: \"\"; }\n\n.ion-ios7-gear-outline:before {\n  content: \"\"; }\n\n.ion-ios7-glasses:before {\n  content: \"\"; }\n\n.ion-ios7-glasses-outline:before {\n  content: \"\"; }\n\n.ion-ios7-heart:before {\n  content: \"\"; }\n\n.ion-ios7-heart-outline:before {\n  content: \"\"; }\n\n.ion-ios7-help:before {\n  content: \"\"; }\n\n.ion-ios7-help-empty:before {\n  content: \"\"; }\n\n.ion-ios7-help-outline:before {\n  content: \"\"; }\n\n.ion-ios7-home:before {\n  content: \"\"; }\n\n.ion-ios7-home-outline:before {\n  content: \"\"; }\n\n.ion-ios7-infinite:before {\n  content: \"\"; }\n\n.ion-ios7-infinite-outline:before {\n  content: \"\"; }\n\n.ion-ios7-information:before {\n  content: \"\"; }\n\n.ion-ios7-information-empty:before {\n  content: \"\"; }\n\n.ion-ios7-information-outline:before {\n  content: \"\"; }\n\n.ion-ios7-ionic-outline:before {\n  content: \"\"; }\n\n.ion-ios7-keypad:before {\n  content: \"\"; }\n\n.ion-ios7-keypad-outline:before {\n  content: \"\"; }\n\n.ion-ios7-lightbulb:before {\n  content: \"\"; }\n\n.ion-ios7-lightbulb-outline:before {\n  content: \"\"; }\n\n.ion-ios7-location:before {\n  content: \"\"; }\n\n.ion-ios7-location-outline:before {\n  content: \"\"; }\n\n.ion-ios7-locked:before {\n  content: \"\"; }\n\n.ion-ios7-locked-outline:before {\n  content: \"\"; }\n\n.ion-ios7-loop:before {\n  content: \"\"; }\n\n.ion-ios7-loop-strong:before {\n  content: \"\"; }\n\n.ion-ios7-medkit:before {\n  content: \"\"; }\n\n.ion-ios7-medkit-outline:before {\n  content: \"\"; }\n\n.ion-ios7-mic:before {\n  content: \"\"; }\n\n.ion-ios7-mic-off:before {\n  content: \"\"; }\n\n.ion-ios7-mic-outline:before {\n  content: \"\"; }\n\n.ion-ios7-minus:before {\n  content: \"\"; }\n\n.ion-ios7-minus-empty:before {\n  content: \"\"; }\n\n.ion-ios7-minus-outline:before {\n  content: \"\"; }\n\n.ion-ios7-monitor:before {\n  content: \"\"; }\n\n.ion-ios7-monitor-outline:before {\n  content: \"\"; }\n\n.ion-ios7-moon:before {\n  content: \"\"; }\n\n.ion-ios7-moon-outline:before {\n  content: \"\"; }\n\n.ion-ios7-more:before {\n  content: \"\"; }\n\n.ion-ios7-more-outline:before {\n  content: \"\"; }\n\n.ion-ios7-musical-note:before {\n  content: \"\"; }\n\n.ion-ios7-musical-notes:before {\n  content: \"\"; }\n\n.ion-ios7-navigate:before {\n  content: \"\"; }\n\n.ion-ios7-navigate-outline:before {\n  content: \"\"; }\n\n.ion-ios7-paper:before {\n  content: \"\"; }\n\n.ion-ios7-paper-outline:before {\n  content: \"\"; }\n\n.ion-ios7-paperplane:before {\n  content: \"\"; }\n\n.ion-ios7-paperplane-outline:before {\n  content: \"\"; }\n\n.ion-ios7-partlysunny:before {\n  content: \"\"; }\n\n.ion-ios7-partlysunny-outline:before {\n  content: \"\"; }\n\n.ion-ios7-pause:before {\n  content: \"\"; }\n\n.ion-ios7-pause-outline:before {\n  content: \"\"; }\n\n.ion-ios7-paw:before {\n  content: \"\"; }\n\n.ion-ios7-paw-outline:before {\n  content: \"\"; }\n\n.ion-ios7-people:before {\n  content: \"\"; }\n\n.ion-ios7-people-outline:before {\n  content: \"\"; }\n\n.ion-ios7-person:before {\n  content: \"\"; }\n\n.ion-ios7-person-outline:before {\n  content: \"\"; }\n\n.ion-ios7-personadd:before {\n  content: \"\"; }\n\n.ion-ios7-personadd-outline:before {\n  content: \"\"; }\n\n.ion-ios7-photos:before {\n  content: \"\"; }\n\n.ion-ios7-photos-outline:before {\n  content: \"\"; }\n\n.ion-ios7-pie:before {\n  content: \"\"; }\n\n.ion-ios7-pie-outline:before {\n  content: \"\"; }\n\n.ion-ios7-play:before {\n  content: \"\"; }\n\n.ion-ios7-play-outline:before {\n  content: \"\"; }\n\n.ion-ios7-plus:before {\n  content: \"\"; }\n\n.ion-ios7-plus-empty:before {\n  content: \"\"; }\n\n.ion-ios7-plus-outline:before {\n  content: \"\"; }\n\n.ion-ios7-pricetag:before {\n  content: \"\"; }\n\n.ion-ios7-pricetag-outline:before {\n  content: \"\"; }\n\n.ion-ios7-pricetags:before {\n  content: \"\"; }\n\n.ion-ios7-pricetags-outline:before {\n  content: \"\"; }\n\n.ion-ios7-printer:before {\n  content: \"\"; }\n\n.ion-ios7-printer-outline:before {\n  content: \"\"; }\n\n.ion-ios7-pulse:before {\n  content: \"\"; }\n\n.ion-ios7-pulse-strong:before {\n  content: \"\"; }\n\n.ion-ios7-rainy:before {\n  content: \"\"; }\n\n.ion-ios7-rainy-outline:before {\n  content: \"\"; }\n\n.ion-ios7-recording:before {\n  content: \"\"; }\n\n.ion-ios7-recording-outline:before {\n  content: \"\"; }\n\n.ion-ios7-redo:before {\n  content: \"\"; }\n\n.ion-ios7-redo-outline:before {\n  content: \"\"; }\n\n.ion-ios7-refresh:before {\n  content: \"\"; }\n\n.ion-ios7-refresh-empty:before {\n  content: \"\"; }\n\n.ion-ios7-refresh-outline:before {\n  content: \"\"; }\n\n.ion-ios7-reload:before, .ion-ios7-reloading:before {\n  content: \"\"; }\n\n.ion-ios7-reverse-camera:before {\n  content: \"\"; }\n\n.ion-ios7-reverse-camera-outline:before {\n  content: \"\"; }\n\n.ion-ios7-rewind:before {\n  content: \"\"; }\n\n.ion-ios7-rewind-outline:before {\n  content: \"\"; }\n\n.ion-ios7-search:before {\n  content: \"\"; }\n\n.ion-ios7-search-strong:before {\n  content: \"\"; }\n\n.ion-ios7-settings:before {\n  content: \"\"; }\n\n.ion-ios7-settings-strong:before {\n  content: \"\"; }\n\n.ion-ios7-shrink:before {\n  content: \"\"; }\n\n.ion-ios7-skipbackward:before {\n  content: \"\"; }\n\n.ion-ios7-skipbackward-outline:before {\n  content: \"\"; }\n\n.ion-ios7-skipforward:before {\n  content: \"\"; }\n\n.ion-ios7-skipforward-outline:before {\n  content: \"\"; }\n\n.ion-ios7-snowy:before {\n  content: \"\"; }\n\n.ion-ios7-speedometer:before {\n  content: \"\"; }\n\n.ion-ios7-speedometer-outline:before {\n  content: \"\"; }\n\n.ion-ios7-star:before {\n  content: \"\"; }\n\n.ion-ios7-star-half:before {\n  content: \"\"; }\n\n.ion-ios7-star-outline:before {\n  content: \"\"; }\n\n.ion-ios7-stopwatch:before {\n  content: \"\"; }\n\n.ion-ios7-stopwatch-outline:before {\n  content: \"\"; }\n\n.ion-ios7-sunny:before {\n  content: \"\"; }\n\n.ion-ios7-sunny-outline:before {\n  content: \"\"; }\n\n.ion-ios7-telephone:before {\n  content: \"\"; }\n\n.ion-ios7-telephone-outline:before {\n  content: \"\"; }\n\n.ion-ios7-tennisball:before {\n  content: \"\"; }\n\n.ion-ios7-tennisball-outline:before {\n  content: \"\"; }\n\n.ion-ios7-thunderstorm:before {\n  content: \"\"; }\n\n.ion-ios7-thunderstorm-outline:before {\n  content: \"\"; }\n\n.ion-ios7-time:before {\n  content: \"\"; }\n\n.ion-ios7-time-outline:before {\n  content: \"\"; }\n\n.ion-ios7-timer:before {\n  content: \"\"; }\n\n.ion-ios7-timer-outline:before {\n  content: \"\"; }\n\n.ion-ios7-toggle:before {\n  content: \"\"; }\n\n.ion-ios7-toggle-outline:before {\n  content: \"\"; }\n\n.ion-ios7-trash:before {\n  content: \"\"; }\n\n.ion-ios7-trash-outline:before {\n  content: \"\"; }\n\n.ion-ios7-undo:before {\n  content: \"\"; }\n\n.ion-ios7-undo-outline:before {\n  content: \"\"; }\n\n.ion-ios7-unlocked:before {\n  content: \"\"; }\n\n.ion-ios7-unlocked-outline:before {\n  content: \"\"; }\n\n.ion-ios7-upload:before {\n  content: \"\"; }\n\n.ion-ios7-upload-outline:before {\n  content: \"\"; }\n\n.ion-ios7-videocam:before {\n  content: \"\"; }\n\n.ion-ios7-videocam-outline:before {\n  content: \"\"; }\n\n.ion-ios7-volume-high:before {\n  content: \"\"; }\n\n.ion-ios7-volume-low:before {\n  content: \"\"; }\n\n.ion-ios7-wineglass:before {\n  content: \"\"; }\n\n.ion-ios7-wineglass-outline:before {\n  content: \"\"; }\n\n.ion-ios7-world:before {\n  content: \"\"; }\n\n.ion-ios7-world-outline:before {\n  content: \"\"; }\n\n.ion-ipad:before {\n  content: \"\"; }\n\n.ion-iphone:before {\n  content: \"\"; }\n\n.ion-ipod:before {\n  content: \"\"; }\n\n.ion-jet:before {\n  content: \"\"; }\n\n.ion-key:before {\n  content: \"\"; }\n\n.ion-knife:before {\n  content: \"\"; }\n\n.ion-laptop:before {\n  content: \"\"; }\n\n.ion-leaf:before {\n  content: \"\"; }\n\n.ion-levels:before {\n  content: \"\"; }\n\n.ion-lightbulb:before {\n  content: \"\"; }\n\n.ion-link:before {\n  content: \"\"; }\n\n.ion-load-a:before, .ion-loading-a:before {\n  content: \"\"; }\n\n.ion-load-b:before, .ion-loading-b:before {\n  content: \"\"; }\n\n.ion-load-c:before, .ion-loading-c:before {\n  content: \"\"; }\n\n.ion-load-d:before, .ion-loading-d:before {\n  content: \"\"; }\n\n.ion-location:before {\n  content: \"\"; }\n\n.ion-locked:before {\n  content: \"\"; }\n\n.ion-log-in:before {\n  content: \"\"; }\n\n.ion-log-out:before {\n  content: \"\"; }\n\n.ion-loop:before, .ion-looping:before {\n  content: \"\"; }\n\n.ion-magnet:before {\n  content: \"\"; }\n\n.ion-male:before {\n  content: \"\"; }\n\n.ion-man:before {\n  content: \"\"; }\n\n.ion-map:before {\n  content: \"\"; }\n\n.ion-medkit:before {\n  content: \"\"; }\n\n.ion-merge:before {\n  content: \"\"; }\n\n.ion-mic-a:before {\n  content: \"\"; }\n\n.ion-mic-b:before {\n  content: \"\"; }\n\n.ion-mic-c:before {\n  content: \"\"; }\n\n.ion-minus:before {\n  content: \"\"; }\n\n.ion-minus-circled:before {\n  content: \"\"; }\n\n.ion-minus-round:before {\n  content: \"\"; }\n\n.ion-model-s:before {\n  content: \"\"; }\n\n.ion-monitor:before {\n  content: \"\"; }\n\n.ion-more:before {\n  content: \"\"; }\n\n.ion-mouse:before {\n  content: \"\"; }\n\n.ion-music-note:before {\n  content: \"\"; }\n\n.ion-navicon:before {\n  content: \"\"; }\n\n.ion-navicon-round:before {\n  content: \"\"; }\n\n.ion-navigate:before {\n  content: \"\"; }\n\n.ion-network:before {\n  content: \"\"; }\n\n.ion-no-smoking:before {\n  content: \"\"; }\n\n.ion-nuclear:before {\n  content: \"\"; }\n\n.ion-outlet:before {\n  content: \"\"; }\n\n.ion-paper-airplane:before {\n  content: \"\"; }\n\n.ion-paperclip:before {\n  content: \"\"; }\n\n.ion-pause:before {\n  content: \"\"; }\n\n.ion-person:before {\n  content: \"\"; }\n\n.ion-person-add:before {\n  content: \"\"; }\n\n.ion-person-stalker:before {\n  content: \"\"; }\n\n.ion-pie-graph:before {\n  content: \"\"; }\n\n.ion-pin:before {\n  content: \"\"; }\n\n.ion-pinpoint:before {\n  content: \"\"; }\n\n.ion-pizza:before {\n  content: \"\"; }\n\n.ion-plane:before {\n  content: \"\"; }\n\n.ion-planet:before {\n  content: \"\"; }\n\n.ion-play:before {\n  content: \"\"; }\n\n.ion-playstation:before {\n  content: \"\"; }\n\n.ion-plus:before {\n  content: \"\"; }\n\n.ion-plus-circled:before {\n  content: \"\"; }\n\n.ion-plus-round:before {\n  content: \"\"; }\n\n.ion-podium:before {\n  content: \"\"; }\n\n.ion-pound:before {\n  content: \"\"; }\n\n.ion-power:before {\n  content: \"\"; }\n\n.ion-pricetag:before {\n  content: \"\"; }\n\n.ion-pricetags:before {\n  content: \"\"; }\n\n.ion-printer:before {\n  content: \"\"; }\n\n.ion-pull-request:before {\n  content: \"\"; }\n\n.ion-qr-scanner:before {\n  content: \"\"; }\n\n.ion-quote:before {\n  content: \"\"; }\n\n.ion-radio-waves:before {\n  content: \"\"; }\n\n.ion-record:before {\n  content: \"\"; }\n\n.ion-refresh:before, .ion-refreshing:before {\n  content: \"\"; }\n\n.ion-reply:before {\n  content: \"\"; }\n\n.ion-reply-all:before {\n  content: \"\"; }\n\n.ion-ribbon-a:before {\n  content: \"\"; }\n\n.ion-ribbon-b:before {\n  content: \"\"; }\n\n.ion-sad:before {\n  content: \"\"; }\n\n.ion-scissors:before {\n  content: \"\"; }\n\n.ion-search:before {\n  content: \"\"; }\n\n.ion-settings:before {\n  content: \"\"; }\n\n.ion-share:before {\n  content: \"\"; }\n\n.ion-shuffle:before {\n  content: \"\"; }\n\n.ion-skip-backward:before {\n  content: \"\"; }\n\n.ion-skip-forward:before {\n  content: \"\"; }\n\n.ion-social-android:before {\n  content: \"\"; }\n\n.ion-social-android-outline:before {\n  content: \"\"; }\n\n.ion-social-apple:before {\n  content: \"\"; }\n\n.ion-social-apple-outline:before {\n  content: \"\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\"; }\n\n.ion-social-bitcoin-outline:before {\n  content: \"\"; }\n\n.ion-social-buffer:before {\n  content: \"\"; }\n\n.ion-social-buffer-outline:before {\n  content: \"\"; }\n\n.ion-social-designernews:before {\n  content: \"\"; }\n\n.ion-social-designernews-outline:before {\n  content: \"\"; }\n\n.ion-social-dribbble:before {\n  content: \"\"; }\n\n.ion-social-dribbble-outline:before {\n  content: \"\"; }\n\n.ion-social-dropbox:before {\n  content: \"\"; }\n\n.ion-social-dropbox-outline:before {\n  content: \"\"; }\n\n.ion-social-facebook:before {\n  content: \"\"; }\n\n.ion-social-facebook-outline:before {\n  content: \"\"; }\n\n.ion-social-foursquare:before {\n  content: \"\"; }\n\n.ion-social-foursquare-outline:before {\n  content: \"\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\"; }\n\n.ion-social-github:before {\n  content: \"\"; }\n\n.ion-social-github-outline:before {\n  content: \"\"; }\n\n.ion-social-google:before {\n  content: \"\"; }\n\n.ion-social-google-outline:before {\n  content: \"\"; }\n\n.ion-social-googleplus:before {\n  content: \"\"; }\n\n.ion-social-googleplus-outline:before {\n  content: \"\"; }\n\n.ion-social-hackernews:before {\n  content: \"\"; }\n\n.ion-social-hackernews-outline:before {\n  content: \"\"; }\n\n.ion-social-instagram:before {\n  content: \"\"; }\n\n.ion-social-instagram-outline:before {\n  content: \"\"; }\n\n.ion-social-linkedin:before {\n  content: \"\"; }\n\n.ion-social-linkedin-outline:before {\n  content: \"\"; }\n\n.ion-social-pinterest:before {\n  content: \"\"; }\n\n.ion-social-pinterest-outline:before {\n  content: \"\"; }\n\n.ion-social-reddit:before {\n  content: \"\"; }\n\n.ion-social-reddit-outline:before {\n  content: \"\"; }\n\n.ion-social-rss:before {\n  content: \"\"; }\n\n.ion-social-rss-outline:before {\n  content: \"\"; }\n\n.ion-social-skype:before {\n  content: \"\"; }\n\n.ion-social-skype-outline:before {\n  content: \"\"; }\n\n.ion-social-tumblr:before {\n  content: \"\"; }\n\n.ion-social-tumblr-outline:before {\n  content: \"\"; }\n\n.ion-social-tux:before {\n  content: \"\"; }\n\n.ion-social-twitter:before {\n  content: \"\"; }\n\n.ion-social-twitter-outline:before {\n  content: \"\"; }\n\n.ion-social-usd:before {\n  content: \"\"; }\n\n.ion-social-usd-outline:before {\n  content: \"\"; }\n\n.ion-social-vimeo:before {\n  content: \"\"; }\n\n.ion-social-vimeo-outline:before {\n  content: \"\"; }\n\n.ion-social-windows:before {\n  content: \"\"; }\n\n.ion-social-windows-outline:before {\n  content: \"\"; }\n\n.ion-social-wordpress:before {\n  content: \"\"; }\n\n.ion-social-wordpress-outline:before {\n  content: \"\"; }\n\n.ion-social-yahoo:before {\n  content: \"\"; }\n\n.ion-social-yahoo-outline:before {\n  content: \"\"; }\n\n.ion-social-youtube:before {\n  content: \"\"; }\n\n.ion-social-youtube-outline:before {\n  content: \"\"; }\n\n.ion-speakerphone:before {\n  content: \"\"; }\n\n.ion-speedometer:before {\n  content: \"\"; }\n\n.ion-spoon:before {\n  content: \"\"; }\n\n.ion-star:before {\n  content: \"\"; }\n\n.ion-stats-bars:before {\n  content: \"\"; }\n\n.ion-steam:before {\n  content: \"\"; }\n\n.ion-stop:before {\n  content: \"\"; }\n\n.ion-thermometer:before {\n  content: \"\"; }\n\n.ion-thumbsdown:before {\n  content: \"\"; }\n\n.ion-thumbsup:before {\n  content: \"\"; }\n\n.ion-toggle:before {\n  content: \"\"; }\n\n.ion-toggle-filled:before {\n  content: \"\"; }\n\n.ion-trash-a:before {\n  content: \"\"; }\n\n.ion-trash-b:before {\n  content: \"\"; }\n\n.ion-trophy:before {\n  content: \"\"; }\n\n.ion-umbrella:before {\n  content: \"\"; }\n\n.ion-university:before {\n  content: \"\"; }\n\n.ion-unlocked:before {\n  content: \"\"; }\n\n.ion-upload:before {\n  content: \"\"; }\n\n.ion-usb:before {\n  content: \"\"; }\n\n.ion-videocamera:before {\n  content: \"\"; }\n\n.ion-volume-high:before {\n  content: \"\"; }\n\n.ion-volume-low:before {\n  content: \"\"; }\n\n.ion-volume-medium:before {\n  content: \"\"; }\n\n.ion-volume-mute:before {\n  content: \"\"; }\n\n.ion-wand:before {\n  content: \"\"; }\n\n.ion-waterdrop:before {\n  content: \"\"; }\n\n.ion-wifi:before {\n  content: \"\"; }\n\n.ion-wineglass:before {\n  content: \"\"; }\n\n.ion-woman:before {\n  content: \"\"; }\n\n.ion-wrench:before {\n  content: \"\"; }\n\n.ion-xbox:before {\n  content: \"\"; }\n\n/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, SCSS and LESS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n@font-face {\n  font-family: \"weathericons\";\n  src: url(\"../fonts/weathericons-regular-webfont.eot\");\n  src: url(\"../fonts/weathericons-regular-webfont.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/weathericons-regular-webfont.woff2\") format(\"woff2\"), url(\"../fonts/weathericons-regular-webfont.woff\") format(\"woff\"), url(\"../fonts/weathericons-regular-webfont.ttf\") format(\"truetype\"), url(\"../fonts/weathericons-regular-webfont.svg#weather_iconsregular\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.wi {\n  display: inline-block;\n  font-family: \"weathericons\";\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.wi-fw {\n  width: 1.4em;\n  text-align: center; }\n\n.wi-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.wi-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.wi-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.wi-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n.wi-day-sunny:before {\n  content: \"\"; }\n\n.wi-day-cloudy:before {\n  content: \"\"; }\n\n.wi-day-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-day-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-day-fog:before {\n  content: \"\"; }\n\n.wi-day-hail:before {\n  content: \"\"; }\n\n.wi-day-haze:before {\n  content: \"\"; }\n\n.wi-day-lightning:before {\n  content: \"\"; }\n\n.wi-day-rain:before {\n  content: \"\"; }\n\n.wi-day-rain-mix:before {\n  content: \"\"; }\n\n.wi-day-rain-wind:before {\n  content: \"\"; }\n\n.wi-day-showers:before {\n  content: \"\"; }\n\n.wi-day-sleet:before {\n  content: \"\"; }\n\n.wi-day-sleet-storm:before {\n  content: \"\"; }\n\n.wi-day-snow:before {\n  content: \"\"; }\n\n.wi-day-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-day-snow-wind:before {\n  content: \"\"; }\n\n.wi-day-sprinkle:before {\n  content: \"\"; }\n\n.wi-day-storm-showers:before {\n  content: \"\"; }\n\n.wi-day-sunny-overcast:before {\n  content: \"\"; }\n\n.wi-day-thunderstorm:before {\n  content: \"\"; }\n\n.wi-day-windy:before {\n  content: \"\"; }\n\n.wi-solar-eclipse:before {\n  content: \"\"; }\n\n.wi-hot:before {\n  content: \"\"; }\n\n.wi-day-cloudy-high:before {\n  content: \"\"; }\n\n.wi-day-light-wind:before {\n  content: \"\"; }\n\n.wi-night-clear:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-night-alt-hail:before {\n  content: \"\"; }\n\n.wi-night-alt-lightning:before {\n  content: \"\"; }\n\n.wi-night-alt-rain:before {\n  content: \"\"; }\n\n.wi-night-alt-rain-mix:before {\n  content: \"\"; }\n\n.wi-night-alt-rain-wind:before {\n  content: \"\"; }\n\n.wi-night-alt-showers:before {\n  content: \"\"; }\n\n.wi-night-alt-sleet:before {\n  content: \"\"; }\n\n.wi-night-alt-sleet-storm:before {\n  content: \"\"; }\n\n.wi-night-alt-snow:before {\n  content: \"\"; }\n\n.wi-night-alt-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-alt-snow-wind:before {\n  content: \"\"; }\n\n.wi-night-alt-sprinkle:before {\n  content: \"\"; }\n\n.wi-night-alt-storm-showers:before {\n  content: \"\"; }\n\n.wi-night-alt-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-cloudy:before {\n  content: \"\"; }\n\n.wi-night-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-night-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-night-fog:before {\n  content: \"\"; }\n\n.wi-night-hail:before {\n  content: \"\"; }\n\n.wi-night-lightning:before {\n  content: \"\"; }\n\n.wi-night-partly-cloudy:before {\n  content: \"\"; }\n\n.wi-night-rain:before {\n  content: \"\"; }\n\n.wi-night-rain-mix:before {\n  content: \"\"; }\n\n.wi-night-rain-wind:before {\n  content: \"\"; }\n\n.wi-night-showers:before {\n  content: \"\"; }\n\n.wi-night-sleet:before {\n  content: \"\"; }\n\n.wi-night-sleet-storm:before {\n  content: \"\"; }\n\n.wi-night-snow:before {\n  content: \"\"; }\n\n.wi-night-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-snow-wind:before {\n  content: \"\"; }\n\n.wi-night-sprinkle:before {\n  content: \"\"; }\n\n.wi-night-storm-showers:before {\n  content: \"\"; }\n\n.wi-night-thunderstorm:before {\n  content: \"\"; }\n\n.wi-lunar-eclipse:before {\n  content: \"\"; }\n\n.wi-stars:before {\n  content: \"\"; }\n\n.wi-storm-showers:before {\n  content: \"\"; }\n\n.wi-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-high:before {\n  content: \"\"; }\n\n.wi-night-cloudy-high:before {\n  content: \"\"; }\n\n.wi-night-alt-partly-cloudy:before {\n  content: \"\"; }\n\n.wi-cloud:before {\n  content: \"\"; }\n\n.wi-cloudy:before {\n  content: \"\"; }\n\n.wi-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-fog:before {\n  content: \"\"; }\n\n.wi-hail:before {\n  content: \"\"; }\n\n.wi-rain:before {\n  content: \"\"; }\n\n.wi-rain-mix:before {\n  content: \"\"; }\n\n.wi-rain-wind:before {\n  content: \"\"; }\n\n.wi-showers:before {\n  content: \"\"; }\n\n.wi-sleet:before {\n  content: \"\"; }\n\n.wi-snow:before {\n  content: \"\"; }\n\n.wi-sprinkle:before {\n  content: \"\"; }\n\n.wi-storm-showers:before {\n  content: \"\"; }\n\n.wi-thunderstorm:before {\n  content: \"\"; }\n\n.wi-snow-wind:before {\n  content: \"\"; }\n\n.wi-snow:before {\n  content: \"\"; }\n\n.wi-smog:before {\n  content: \"\"; }\n\n.wi-smoke:before {\n  content: \"\"; }\n\n.wi-lightning:before {\n  content: \"\"; }\n\n.wi-raindrops:before {\n  content: \"\"; }\n\n.wi-raindrop:before {\n  content: \"\"; }\n\n.wi-dust:before {\n  content: \"\"; }\n\n.wi-snowflake-cold:before {\n  content: \"\"; }\n\n.wi-windy:before {\n  content: \"\"; }\n\n.wi-strong-wind:before {\n  content: \"\"; }\n\n.wi-sandstorm:before {\n  content: \"\"; }\n\n.wi-earthquake:before {\n  content: \"\"; }\n\n.wi-fire:before {\n  content: \"\"; }\n\n.wi-flood:before {\n  content: \"\"; }\n\n.wi-meteor:before {\n  content: \"\"; }\n\n.wi-tsunami:before {\n  content: \"\"; }\n\n.wi-volcano:before {\n  content: \"\"; }\n\n.wi-hurricane:before {\n  content: \"\"; }\n\n.wi-tornado:before {\n  content: \"\"; }\n\n.wi-small-craft-advisory:before {\n  content: \"\"; }\n\n.wi-gale-warning:before {\n  content: \"\"; }\n\n.wi-storm-warning:before {\n  content: \"\"; }\n\n.wi-hurricane-warning:before {\n  content: \"\"; }\n\n.wi-wind-direction:before {\n  content: \"\"; }\n\n.wi-alien:before {\n  content: \"\"; }\n\n.wi-celsius:before {\n  content: \"\"; }\n\n.wi-fahrenheit:before {\n  content: \"\"; }\n\n.wi-degrees:before {\n  content: \"\"; }\n\n.wi-thermometer:before {\n  content: \"\"; }\n\n.wi-thermometer-exterior:before {\n  content: \"\"; }\n\n.wi-thermometer-internal:before {\n  content: \"\"; }\n\n.wi-cloud-down:before {\n  content: \"\"; }\n\n.wi-cloud-up:before {\n  content: \"\"; }\n\n.wi-cloud-refresh:before {\n  content: \"\"; }\n\n.wi-horizon:before {\n  content: \"\"; }\n\n.wi-horizon-alt:before {\n  content: \"\"; }\n\n.wi-sunrise:before {\n  content: \"\"; }\n\n.wi-sunset:before {\n  content: \"\"; }\n\n.wi-moonrise:before {\n  content: \"\"; }\n\n.wi-moonset:before {\n  content: \"\"; }\n\n.wi-refresh:before {\n  content: \"\"; }\n\n.wi-refresh-alt:before {\n  content: \"\"; }\n\n.wi-umbrella:before {\n  content: \"\"; }\n\n.wi-barometer:before {\n  content: \"\"; }\n\n.wi-humidity:before {\n  content: \"\"; }\n\n.wi-na:before {\n  content: \"\"; }\n\n.wi-train:before {\n  content: \"\"; }\n\n.wi-moon-new:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-1:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-2:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-3:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-4:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-5:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-6:before {\n  content: \"\"; }\n\n.wi-moon-first-quarter:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-full:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-third-quarter:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-1:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-2:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-3:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-4:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-5:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-new:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-first-quarter:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-full:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-third-quarter:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-6:before {\n  content: \"\"; }\n\n.wi-moon-0:before {\n  content: \"\"; }\n\n.wi-moon-1:before {\n  content: \"\"; }\n\n.wi-moon-2:before {\n  content: \"\"; }\n\n.wi-moon-3:before {\n  content: \"\"; }\n\n.wi-moon-4:before {\n  content: \"\"; }\n\n.wi-moon-5:before {\n  content: \"\"; }\n\n.wi-moon-6:before {\n  content: \"\"; }\n\n.wi-moon-7:before {\n  content: \"\"; }\n\n.wi-moon-8:before {\n  content: \"\"; }\n\n.wi-moon-9:before {\n  content: \"\"; }\n\n.wi-moon-10:before {\n  content: \"\"; }\n\n.wi-moon-11:before {\n  content: \"\"; }\n\n.wi-moon-12:before {\n  content: \"\"; }\n\n.wi-moon-13:before {\n  content: \"\"; }\n\n.wi-moon-14:before {\n  content: \"\"; }\n\n.wi-moon-15:before {\n  content: \"\"; }\n\n.wi-moon-16:before {\n  content: \"\"; }\n\n.wi-moon-17:before {\n  content: \"\"; }\n\n.wi-moon-18:before {\n  content: \"\"; }\n\n.wi-moon-19:before {\n  content: \"\"; }\n\n.wi-moon-20:before {\n  content: \"\"; }\n\n.wi-moon-21:before {\n  content: \"\"; }\n\n.wi-moon-22:before {\n  content: \"\"; }\n\n.wi-moon-23:before {\n  content: \"\"; }\n\n.wi-moon-24:before {\n  content: \"\"; }\n\n.wi-moon-25:before {\n  content: \"\"; }\n\n.wi-moon-26:before {\n  content: \"\"; }\n\n.wi-moon-27:before {\n  content: \"\"; }\n\n.wi-time-1:before {\n  content: \"\"; }\n\n.wi-time-2:before {\n  content: \"\"; }\n\n.wi-time-3:before {\n  content: \"\"; }\n\n.wi-time-4:before {\n  content: \"\"; }\n\n.wi-time-5:before {\n  content: \"\"; }\n\n.wi-time-6:before {\n  content: \"\"; }\n\n.wi-time-7:before {\n  content: \"\"; }\n\n.wi-time-8:before {\n  content: \"\"; }\n\n.wi-time-9:before {\n  content: \"\"; }\n\n.wi-time-10:before {\n  content: \"\"; }\n\n.wi-time-11:before {\n  content: \"\"; }\n\n.wi-time-12:before {\n  content: \"\"; }\n\n.wi-direction-up:before {\n  content: \"\"; }\n\n.wi-direction-up-right:before {\n  content: \"\"; }\n\n.wi-direction-right:before {\n  content: \"\"; }\n\n.wi-direction-down-right:before {\n  content: \"\"; }\n\n.wi-direction-down:before {\n  content: \"\"; }\n\n.wi-direction-down-left:before {\n  content: \"\"; }\n\n.wi-direction-left:before {\n  content: \"\"; }\n\n.wi-direction-up-left:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-0:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-1:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-2:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-3:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-4:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-5:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-6:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-7:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-8:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-9:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-10:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-11:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-12:before {\n  content: \"\"; }\n\n.wi-yahoo-0:before {\n  content: \"\"; }\n\n.wi-yahoo-1:before {\n  content: \"\"; }\n\n.wi-yahoo-2:before {\n  content: \"\"; }\n\n.wi-yahoo-3:before {\n  content: \"\"; }\n\n.wi-yahoo-4:before {\n  content: \"\"; }\n\n.wi-yahoo-5:before {\n  content: \"\"; }\n\n.wi-yahoo-6:before {\n  content: \"\"; }\n\n.wi-yahoo-7:before {\n  content: \"\"; }\n\n.wi-yahoo-8:before {\n  content: \"\"; }\n\n.wi-yahoo-9:before {\n  content: \"\"; }\n\n.wi-yahoo-10:before {\n  content: \"\"; }\n\n.wi-yahoo-11:before {\n  content: \"\"; }\n\n.wi-yahoo-12:before {\n  content: \"\"; }\n\n.wi-yahoo-13:before {\n  content: \"\"; }\n\n.wi-yahoo-14:before {\n  content: \"\"; }\n\n.wi-yahoo-15:before {\n  content: \"\"; }\n\n.wi-yahoo-16:before {\n  content: \"\"; }\n\n.wi-yahoo-17:before {\n  content: \"\"; }\n\n.wi-yahoo-18:before {\n  content: \"\"; }\n\n.wi-yahoo-19:before {\n  content: \"\"; }\n\n.wi-yahoo-20:before {\n  content: \"\"; }\n\n.wi-yahoo-21:before {\n  content: \"\"; }\n\n.wi-yahoo-22:before {\n  content: \"\"; }\n\n.wi-yahoo-23:before {\n  content: \"\"; }\n\n.wi-yahoo-24:before {\n  content: \"\"; }\n\n.wi-yahoo-25:before {\n  content: \"\"; }\n\n.wi-yahoo-26:before {\n  content: \"\"; }\n\n.wi-yahoo-27:before {\n  content: \"\"; }\n\n.wi-yahoo-28:before {\n  content: \"\"; }\n\n.wi-yahoo-29:before {\n  content: \"\"; }\n\n.wi-yahoo-30:before {\n  content: \"\"; }\n\n.wi-yahoo-31:before {\n  content: \"\"; }\n\n.wi-yahoo-32:before {\n  content: \"\"; }\n\n.wi-yahoo-33:before {\n  content: \"\"; }\n\n.wi-yahoo-34:before {\n  content: \"\"; }\n\n.wi-yahoo-35:before {\n  content: \"\"; }\n\n.wi-yahoo-36:before {\n  content: \"\"; }\n\n.wi-yahoo-37:before {\n  content: \"\"; }\n\n.wi-yahoo-38:before {\n  content: \"\"; }\n\n.wi-yahoo-39:before {\n  content: \"\"; }\n\n.wi-yahoo-40:before {\n  content: \"\"; }\n\n.wi-yahoo-41:before {\n  content: \"\"; }\n\n.wi-yahoo-42:before {\n  content: \"\"; }\n\n.wi-yahoo-43:before {\n  content: \"\"; }\n\n.wi-yahoo-44:before {\n  content: \"\"; }\n\n.wi-yahoo-45:before {\n  content: \"\"; }\n\n.wi-yahoo-46:before {\n  content: \"\"; }\n\n.wi-yahoo-47:before {\n  content: \"\"; }\n\n.wi-yahoo-3200:before {\n  content: \"\"; }\n\n.wi-forecast-io-clear-day:before {\n  content: \"\"; }\n\n.wi-forecast-io-clear-night:before {\n  content: \"\"; }\n\n.wi-forecast-io-rain:before {\n  content: \"\"; }\n\n.wi-forecast-io-snow:before {\n  content: \"\"; }\n\n.wi-forecast-io-sleet:before {\n  content: \"\"; }\n\n.wi-forecast-io-wind:before {\n  content: \"\"; }\n\n.wi-forecast-io-fog:before {\n  content: \"\"; }\n\n.wi-forecast-io-cloudy:before {\n  content: \"\"; }\n\n.wi-forecast-io-partly-cloudy-day:before {\n  content: \"\"; }\n\n.wi-forecast-io-partly-cloudy-night:before {\n  content: \"\"; }\n\n.wi-forecast-io-hail:before {\n  content: \"\"; }\n\n.wi-forecast-io-thunderstorm:before {\n  content: \"\"; }\n\n.wi-forecast-io-tornado:before {\n  content: \"\"; }\n\n.wi-wmo4680-0:before,\n.wi-wmo4680-00:before {\n  content: \"\"; }\n\n.wi-wmo4680-1:before,\n.wi-wmo4680-01:before {\n  content: \"\"; }\n\n.wi-wmo4680-2:before,\n.wi-wmo4680-02:before {\n  content: \"\"; }\n\n.wi-wmo4680-3:before,\n.wi-wmo4680-03:before {\n  content: \"\"; }\n\n.wi-wmo4680-4:before,\n.wi-wmo4680-04:before {\n  content: \"\"; }\n\n.wi-wmo4680-5:before,\n.wi-wmo4680-05:before {\n  content: \"\"; }\n\n.wi-wmo4680-10:before {\n  content: \"\"; }\n\n.wi-wmo4680-11:before {\n  content: \"\"; }\n\n.wi-wmo4680-12:before {\n  content: \"\"; }\n\n.wi-wmo4680-18:before {\n  content: \"\"; }\n\n.wi-wmo4680-20:before {\n  content: \"\"; }\n\n.wi-wmo4680-21:before {\n  content: \"\"; }\n\n.wi-wmo4680-22:before {\n  content: \"\"; }\n\n.wi-wmo4680-23:before {\n  content: \"\"; }\n\n.wi-wmo4680-24:before {\n  content: \"\"; }\n\n.wi-wmo4680-25:before {\n  content: \"\"; }\n\n.wi-wmo4680-26:before {\n  content: \"\"; }\n\n.wi-wmo4680-27:before {\n  content: \"\"; }\n\n.wi-wmo4680-28:before {\n  content: \"\"; }\n\n.wi-wmo4680-29:before {\n  content: \"\"; }\n\n.wi-wmo4680-30:before {\n  content: \"\"; }\n\n.wi-wmo4680-31:before {\n  content: \"\"; }\n\n.wi-wmo4680-32:before {\n  content: \"\"; }\n\n.wi-wmo4680-33:before {\n  content: \"\"; }\n\n.wi-wmo4680-34:before {\n  content: \"\"; }\n\n.wi-wmo4680-35:before {\n  content: \"\"; }\n\n.wi-wmo4680-40:before {\n  content: \"\"; }\n\n.wi-wmo4680-41:before {\n  content: \"\"; }\n\n.wi-wmo4680-42:before {\n  content: \"\"; }\n\n.wi-wmo4680-43:before {\n  content: \"\"; }\n\n.wi-wmo4680-44:before {\n  content: \"\"; }\n\n.wi-wmo4680-45:before {\n  content: \"\"; }\n\n.wi-wmo4680-46:before {\n  content: \"\"; }\n\n.wi-wmo4680-47:before {\n  content: \"\"; }\n\n.wi-wmo4680-48:before {\n  content: \"\"; }\n\n.wi-wmo4680-50:before {\n  content: \"\"; }\n\n.wi-wmo4680-51:before {\n  content: \"\"; }\n\n.wi-wmo4680-52:before {\n  content: \"\"; }\n\n.wi-wmo4680-53:before {\n  content: \"\"; }\n\n.wi-wmo4680-54:before {\n  content: \"\"; }\n\n.wi-wmo4680-55:before {\n  content: \"\"; }\n\n.wi-wmo4680-56:before {\n  content: \"\"; }\n\n.wi-wmo4680-57:before {\n  content: \"\"; }\n\n.wi-wmo4680-58:before {\n  content: \"\"; }\n\n.wi-wmo4680-60:before {\n  content: \"\"; }\n\n.wi-wmo4680-61:before {\n  content: \"\"; }\n\n.wi-wmo4680-62:before {\n  content: \"\"; }\n\n.wi-wmo4680-63:before {\n  content: \"\"; }\n\n.wi-wmo4680-64:before {\n  content: \"\"; }\n\n.wi-wmo4680-65:before {\n  content: \"\"; }\n\n.wi-wmo4680-66:before {\n  content: \"\"; }\n\n.wi-wmo4680-67:before {\n  content: \"\"; }\n\n.wi-wmo4680-68:before {\n  content: \"\"; }\n\n.wi-wmo4680-70:before {\n  content: \"\"; }\n\n.wi-wmo4680-71:before {\n  content: \"\"; }\n\n.wi-wmo4680-72:before {\n  content: \"\"; }\n\n.wi-wmo4680-73:before {\n  content: \"\"; }\n\n.wi-wmo4680-74:before {\n  content: \"\"; }\n\n.wi-wmo4680-75:before {\n  content: \"\"; }\n\n.wi-wmo4680-76:before {\n  content: \"\"; }\n\n.wi-wmo4680-77:before {\n  content: \"\"; }\n\n.wi-wmo4680-78:before {\n  content: \"\"; }\n\n.wi-wmo4680-80:before {\n  content: \"\"; }\n\n.wi-wmo4680-81:before {\n  content: \"\"; }\n\n.wi-wmo4680-82:before {\n  content: \"\"; }\n\n.wi-wmo4680-83:before {\n  content: \"\"; }\n\n.wi-wmo4680-84:before {\n  content: \"\"; }\n\n.wi-wmo4680-85:before {\n  content: \"\"; }\n\n.wi-wmo4680-86:before {\n  content: \"\"; }\n\n.wi-wmo4680-87:before {\n  content: \"\"; }\n\n.wi-wmo4680-89:before {\n  content: \"\"; }\n\n.wi-wmo4680-90:before {\n  content: \"\"; }\n\n.wi-wmo4680-91:before {\n  content: \"\"; }\n\n.wi-wmo4680-92:before {\n  content: \"\"; }\n\n.wi-wmo4680-93:before {\n  content: \"\"; }\n\n.wi-wmo4680-94:before {\n  content: \"\"; }\n\n.wi-wmo4680-95:before {\n  content: \"\"; }\n\n.wi-wmo4680-96:before {\n  content: \"\"; }\n\n.wi-wmo4680-99:before {\n  content: \"\"; }\n\n.wi-owm-200:before {\n  content: \"\"; }\n\n.wi-owm-201:before {\n  content: \"\"; }\n\n.wi-owm-202:before {\n  content: \"\"; }\n\n.wi-owm-210:before {\n  content: \"\"; }\n\n.wi-owm-211:before {\n  content: \"\"; }\n\n.wi-owm-212:before {\n  content: \"\"; }\n\n.wi-owm-221:before {\n  content: \"\"; }\n\n.wi-owm-230:before {\n  content: \"\"; }\n\n.wi-owm-231:before {\n  content: \"\"; }\n\n.wi-owm-232:before {\n  content: \"\"; }\n\n.wi-owm-300:before {\n  content: \"\"; }\n\n.wi-owm-301:before {\n  content: \"\"; }\n\n.wi-owm-302:before {\n  content: \"\"; }\n\n.wi-owm-310:before {\n  content: \"\"; }\n\n.wi-owm-311:before {\n  content: \"\"; }\n\n.wi-owm-312:before {\n  content: \"\"; }\n\n.wi-owm-313:before {\n  content: \"\"; }\n\n.wi-owm-314:before {\n  content: \"\"; }\n\n.wi-owm-321:before {\n  content: \"\"; }\n\n.wi-owm-500:before {\n  content: \"\"; }\n\n.wi-owm-501:before {\n  content: \"\"; }\n\n.wi-owm-502:before {\n  content: \"\"; }\n\n.wi-owm-503:before {\n  content: \"\"; }\n\n.wi-owm-504:before {\n  content: \"\"; }\n\n.wi-owm-511:before {\n  content: \"\"; }\n\n.wi-owm-520:before {\n  content: \"\"; }\n\n.wi-owm-521:before {\n  content: \"\"; }\n\n.wi-owm-522:before {\n  content: \"\"; }\n\n.wi-owm-531:before {\n  content: \"\"; }\n\n.wi-owm-600:before {\n  content: \"\"; }\n\n.wi-owm-601:before {\n  content: \"\"; }\n\n.wi-owm-602:before {\n  content: \"\"; }\n\n.wi-owm-611:before {\n  content: \"\"; }\n\n.wi-owm-612:before {\n  content: \"\"; }\n\n.wi-owm-615:before {\n  content: \"\"; }\n\n.wi-owm-616:before {\n  content: \"\"; }\n\n.wi-owm-620:before {\n  content: \"\"; }\n\n.wi-owm-621:before {\n  content: \"\"; }\n\n.wi-owm-622:before {\n  content: \"\"; }\n\n.wi-owm-701:before {\n  content: \"\"; }\n\n.wi-owm-711:before {\n  content: \"\"; }\n\n.wi-owm-721:before {\n  content: \"\"; }\n\n.wi-owm-731:before {\n  content: \"\"; }\n\n.wi-owm-741:before {\n  content: \"\"; }\n\n.wi-owm-761:before {\n  content: \"\"; }\n\n.wi-owm-762:before {\n  content: \"\"; }\n\n.wi-owm-771:before {\n  content: \"\"; }\n\n.wi-owm-781:before {\n  content: \"\"; }\n\n.wi-owm-800:before {\n  content: \"\"; }\n\n.wi-owm-801:before {\n  content: \"\"; }\n\n.wi-owm-802:before {\n  content: \"\"; }\n\n.wi-owm-803:before {\n  content: \"\"; }\n\n.wi-owm-803:before {\n  content: \"\"; }\n\n.wi-owm-804:before {\n  content: \"\"; }\n\n.wi-owm-900:before {\n  content: \"\"; }\n\n.wi-owm-901:before {\n  content: \"\"; }\n\n.wi-owm-902:before {\n  content: \"\"; }\n\n.wi-owm-903:before {\n  content: \"\"; }\n\n.wi-owm-904:before {\n  content: \"\"; }\n\n.wi-owm-905:before {\n  content: \"\"; }\n\n.wi-owm-906:before {\n  content: \"\"; }\n\n.wi-owm-957:before {\n  content: \"\"; }\n\n.wi-owm-day-200:before {\n  content: \"\"; }\n\n.wi-owm-day-201:before {\n  content: \"\"; }\n\n.wi-owm-day-202:before {\n  content: \"\"; }\n\n.wi-owm-day-210:before {\n  content: \"\"; }\n\n.wi-owm-day-211:before {\n  content: \"\"; }\n\n.wi-owm-day-212:before {\n  content: \"\"; }\n\n.wi-owm-day-221:before {\n  content: \"\"; }\n\n.wi-owm-day-230:before {\n  content: \"\"; }\n\n.wi-owm-day-231:before {\n  content: \"\"; }\n\n.wi-owm-day-232:before {\n  content: \"\"; }\n\n.wi-owm-day-300:before {\n  content: \"\"; }\n\n.wi-owm-day-301:before {\n  content: \"\"; }\n\n.wi-owm-day-302:before {\n  content: \"\"; }\n\n.wi-owm-day-310:before {\n  content: \"\"; }\n\n.wi-owm-day-311:before {\n  content: \"\"; }\n\n.wi-owm-day-312:before {\n  content: \"\"; }\n\n.wi-owm-day-313:before {\n  content: \"\"; }\n\n.wi-owm-day-314:before {\n  content: \"\"; }\n\n.wi-owm-day-321:before {\n  content: \"\"; }\n\n.wi-owm-day-500:before {\n  content: \"\"; }\n\n.wi-owm-day-501:before {\n  content: \"\"; }\n\n.wi-owm-day-502:before {\n  content: \"\"; }\n\n.wi-owm-day-503:before {\n  content: \"\"; }\n\n.wi-owm-day-504:before {\n  content: \"\"; }\n\n.wi-owm-day-511:before {\n  content: \"\"; }\n\n.wi-owm-day-520:before {\n  content: \"\"; }\n\n.wi-owm-day-521:before {\n  content: \"\"; }\n\n.wi-owm-day-522:before {\n  content: \"\"; }\n\n.wi-owm-day-531:before {\n  content: \"\"; }\n\n.wi-owm-day-600:before {\n  content: \"\"; }\n\n.wi-owm-day-601:before {\n  content: \"\"; }\n\n.wi-owm-day-602:before {\n  content: \"\"; }\n\n.wi-owm-day-611:before {\n  content: \"\"; }\n\n.wi-owm-day-612:before {\n  content: \"\"; }\n\n.wi-owm-day-615:before {\n  content: \"\"; }\n\n.wi-owm-day-616:before {\n  content: \"\"; }\n\n.wi-owm-day-620:before {\n  content: \"\"; }\n\n.wi-owm-day-621:before {\n  content: \"\"; }\n\n.wi-owm-day-622:before {\n  content: \"\"; }\n\n.wi-owm-day-701:before {\n  content: \"\"; }\n\n.wi-owm-day-711:before {\n  content: \"\"; }\n\n.wi-owm-day-721:before {\n  content: \"\"; }\n\n.wi-owm-day-731:before {\n  content: \"\"; }\n\n.wi-owm-day-741:before {\n  content: \"\"; }\n\n.wi-owm-day-761:before {\n  content: \"\"; }\n\n.wi-owm-day-762:before {\n  content: \"\"; }\n\n.wi-owm-day-781:before {\n  content: \"\"; }\n\n.wi-owm-day-800:before {\n  content: \"\"; }\n\n.wi-owm-day-801:before {\n  content: \"\"; }\n\n.wi-owm-day-802:before {\n  content: \"\"; }\n\n.wi-owm-day-803:before {\n  content: \"\"; }\n\n.wi-owm-day-804:before {\n  content: \"\"; }\n\n.wi-owm-day-900:before {\n  content: \"\"; }\n\n.wi-owm-day-902:before {\n  content: \"\"; }\n\n.wi-owm-day-903:before {\n  content: \"\"; }\n\n.wi-owm-day-904:before {\n  content: \"\"; }\n\n.wi-owm-day-906:before {\n  content: \"\"; }\n\n.wi-owm-day-957:before {\n  content: \"\"; }\n\n.wi-owm-night-200:before {\n  content: \"\"; }\n\n.wi-owm-night-201:before {\n  content: \"\"; }\n\n.wi-owm-night-202:before {\n  content: \"\"; }\n\n.wi-owm-night-210:before {\n  content: \"\"; }\n\n.wi-owm-night-211:before {\n  content: \"\"; }\n\n.wi-owm-night-212:before {\n  content: \"\"; }\n\n.wi-owm-night-221:before {\n  content: \"\"; }\n\n.wi-owm-night-230:before {\n  content: \"\"; }\n\n.wi-owm-night-231:before {\n  content: \"\"; }\n\n.wi-owm-night-232:before {\n  content: \"\"; }\n\n.wi-owm-night-300:before {\n  content: \"\"; }\n\n.wi-owm-night-301:before {\n  content: \"\"; }\n\n.wi-owm-night-302:before {\n  content: \"\"; }\n\n.wi-owm-night-310:before {\n  content: \"\"; }\n\n.wi-owm-night-311:before {\n  content: \"\"; }\n\n.wi-owm-night-312:before {\n  content: \"\"; }\n\n.wi-owm-night-313:before {\n  content: \"\"; }\n\n.wi-owm-night-314:before {\n  content: \"\"; }\n\n.wi-owm-night-321:before {\n  content: \"\"; }\n\n.wi-owm-night-500:before {\n  content: \"\"; }\n\n.wi-owm-night-501:before {\n  content: \"\"; }\n\n.wi-owm-night-502:before {\n  content: \"\"; }\n\n.wi-owm-night-503:before {\n  content: \"\"; }\n\n.wi-owm-night-504:before {\n  content: \"\"; }\n\n.wi-owm-night-511:before {\n  content: \"\"; }\n\n.wi-owm-night-520:before {\n  content: \"\"; }\n\n.wi-owm-night-521:before {\n  content: \"\"; }\n\n.wi-owm-night-522:before {\n  content: \"\"; }\n\n.wi-owm-night-531:before {\n  content: \"\"; }\n\n.wi-owm-night-600:before {\n  content: \"\"; }\n\n.wi-owm-night-601:before {\n  content: \"\"; }\n\n.wi-owm-night-602:before {\n  content: \"\"; }\n\n.wi-owm-night-611:before {\n  content: \"\"; }\n\n.wi-owm-night-612:before {\n  content: \"\"; }\n\n.wi-owm-night-615:before {\n  content: \"\"; }\n\n.wi-owm-night-616:before {\n  content: \"\"; }\n\n.wi-owm-night-620:before {\n  content: \"\"; }\n\n.wi-owm-night-621:before {\n  content: \"\"; }\n\n.wi-owm-night-622:before {\n  content: \"\"; }\n\n.wi-owm-night-701:before {\n  content: \"\"; }\n\n.wi-owm-night-711:before {\n  content: \"\"; }\n\n.wi-owm-night-721:before {\n  content: \"\"; }\n\n.wi-owm-night-731:before {\n  content: \"\"; }\n\n.wi-owm-night-741:before {\n  content: \"\"; }\n\n.wi-owm-night-761:before {\n  content: \"\"; }\n\n.wi-owm-night-762:before {\n  content: \"\"; }\n\n.wi-owm-night-781:before {\n  content: \"\"; }\n\n.wi-owm-night-800:before {\n  content: \"\"; }\n\n.wi-owm-night-801:before {\n  content: \"\"; }\n\n.wi-owm-night-802:before {\n  content: \"\"; }\n\n.wi-owm-night-803:before {\n  content: \"\"; }\n\n.wi-owm-night-804:before {\n  content: \"\"; }\n\n.wi-owm-night-900:before {\n  content: \"\"; }\n\n.wi-owm-night-902:before {\n  content: \"\"; }\n\n.wi-owm-night-903:before {\n  content: \"\"; }\n\n.wi-owm-night-904:before {\n  content: \"\"; }\n\n.wi-owm-night-906:before {\n  content: \"\"; }\n\n.wi-owm-night-957:before {\n  content: \"\"; }\n\n/* @FONT-FACE loads font into browser */\n@font-face {\n  font-family: 'typicons';\n  font-weight: normal;\n  font-style: normal;\n  src: url(\"../fonts/typicons.eot\");\n  src: url(\"../fonts/typicons.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/typicons.woff\") format(\"woff\"), url(\"../fonts/typicons.ttf\") format(\"truetype\"), url(\"../fonts/typicons.svg#typicons\") format(\"svg\"); }\n/* :before psuedo-selector inserts and styles icon */\n.typcn:before {\n  font-family: 'typicons';\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  height: 1em;\n  font-size: 1em;\n  text-align: center;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility; }\n\n/* Code for individual icons */\n.typcn-adjust-brightness:before {\n  content: '\\e000';\n  /* 'εÇÇ' */ }\n\n.typcn-adjust-contrast:before {\n  content: '\\e001';\n  /* 'εÇü' */ }\n\n.typcn-anchor-outline:before {\n  content: '\\e002';\n  /* 'εÇé' */ }\n\n.typcn-anchor:before {\n  content: '\\e003';\n  /* 'εÇâ' */ }\n\n.typcn-archive:before {\n  content: '\\e004';\n  /* 'εÇä' */ }\n\n.typcn-arrow-back-outline:before {\n  content: '\\e005';\n  /* 'εÇà' */ }\n\n.typcn-arrow-back:before {\n  content: '\\e006';\n  /* 'εÇå' */ }\n\n.typcn-arrow-down-outline:before {\n  content: '\\e007';\n  /* 'εÇç' */ }\n\n.typcn-arrow-down-thick:before {\n  content: '\\e008';\n  /* 'εÇê' */ }\n\n.typcn-arrow-down:before {\n  content: '\\e009';\n  /* 'εÇë' */ }\n\n.typcn-arrow-forward-outline:before {\n  content: '\\e00a';\n  /* 'εÇè' */ }\n\n.typcn-arrow-forward:before {\n  content: '\\e00b';\n  /* 'εÇï' */ }\n\n.typcn-arrow-left-outline:before {\n  content: '\\e00c';\n  /* 'εÇî' */ }\n\n.typcn-arrow-left-thick:before {\n  content: '\\e00d';\n  /* 'εÇì' */ }\n\n.typcn-arrow-left:before {\n  content: '\\e00e';\n  /* 'εÇÄ' */ }\n\n.typcn-arrow-loop-outline:before {\n  content: '\\e00f';\n  /* 'εÇÅ' */ }\n\n.typcn-arrow-loop:before {\n  content: '\\e010';\n  /* 'εÇÉ' */ }\n\n.typcn-arrow-maximise-outline:before {\n  content: '\\e011';\n  /* 'εÇæ' */ }\n\n.typcn-arrow-maximise:before {\n  content: '\\e012';\n  /* 'εÇÆ' */ }\n\n.typcn-arrow-minimise-outline:before {\n  content: '\\e013';\n  /* 'εÇô' */ }\n\n.typcn-arrow-minimise:before {\n  content: '\\e014';\n  /* 'εÇö' */ }\n\n.typcn-arrow-move-outline:before {\n  content: '\\e015';\n  /* 'εÇò' */ }\n\n.typcn-arrow-move:before {\n  content: '\\e016';\n  /* 'εÇû' */ }\n\n.typcn-arrow-repeat-outline:before {\n  content: '\\e017';\n  /* 'εÇù' */ }\n\n.typcn-arrow-repeat:before {\n  content: '\\e018';\n  /* 'εÇÿ' */ }\n\n.typcn-arrow-right-outline:before {\n  content: '\\e019';\n  /* 'εÇÖ' */ }\n\n.typcn-arrow-right-thick:before {\n  content: '\\e01a';\n  /* 'εÇÜ' */ }\n\n.typcn-arrow-right:before {\n  content: '\\e01b';\n  /* 'εÇ¢' */ }\n\n.typcn-arrow-shuffle:before {\n  content: '\\e01c';\n  /* 'εÇ£' */ }\n\n.typcn-arrow-sorted-down:before {\n  content: '\\e01d';\n  /* 'εÇ¥' */ }\n\n.typcn-arrow-sorted-up:before {\n  content: '\\e01e';\n  /* 'εÇ₧' */ }\n\n.typcn-arrow-sync-outline:before {\n  content: '\\e01f';\n  /* 'εÇƒ' */ }\n\n.typcn-arrow-sync:before {\n  content: '\\e020';\n  /* 'εÇá' */ }\n\n.typcn-arrow-unsorted:before {\n  content: '\\e021';\n  /* 'εÇí' */ }\n\n.typcn-arrow-up-outline:before {\n  content: '\\e022';\n  /* 'εÇó' */ }\n\n.typcn-arrow-up-thick:before {\n  content: '\\e023';\n  /* 'εÇú' */ }\n\n.typcn-arrow-up:before {\n  content: '\\e024';\n  /* 'εÇñ' */ }\n\n.typcn-at:before {\n  content: '\\e025';\n  /* 'εÇÑ' */ }\n\n.typcn-attachment-outline:before {\n  content: '\\e026';\n  /* 'εÇª' */ }\n\n.typcn-attachment:before {\n  content: '\\e027';\n  /* 'εÇº' */ }\n\n.typcn-backspace-outline:before {\n  content: '\\e028';\n  /* 'εÇ¿' */ }\n\n.typcn-backspace:before {\n  content: '\\e029';\n  /* 'εÇ⌐' */ }\n\n.typcn-battery-charge:before {\n  content: '\\e02a';\n  /* 'εÇ¬' */ }\n\n.typcn-battery-full:before {\n  content: '\\e02b';\n  /* 'εÇ½' */ }\n\n.typcn-battery-high:before {\n  content: '\\e02c';\n  /* 'εÇ¼' */ }\n\n.typcn-battery-low:before {\n  content: '\\e02d';\n  /* 'εÇ¡' */ }\n\n.typcn-battery-mid:before {\n  content: '\\e02e';\n  /* 'εÇ«' */ }\n\n.typcn-beaker:before {\n  content: '\\e02f';\n  /* 'εÇ»' */ }\n\n.typcn-beer:before {\n  content: '\\e030';\n  /* 'εÇ░' */ }\n\n.typcn-bell:before {\n  content: '\\e031';\n  /* 'εÇ▒' */ }\n\n.typcn-book:before {\n  content: '\\e032';\n  /* 'εÇ▓' */ }\n\n.typcn-bookmark:before {\n  content: '\\e033';\n  /* 'εÇ│' */ }\n\n.typcn-briefcase:before {\n  content: '\\e034';\n  /* 'εÇ┤' */ }\n\n.typcn-brush:before {\n  content: '\\e035';\n  /* 'εÇ╡' */ }\n\n.typcn-business-card:before {\n  content: '\\e036';\n  /* 'εÇ╢' */ }\n\n.typcn-calculator:before {\n  content: '\\e037';\n  /* 'εÇ╖' */ }\n\n.typcn-calendar-outline:before {\n  content: '\\e038';\n  /* 'εÇ╕' */ }\n\n.typcn-calendar:before {\n  content: '\\e039';\n  /* 'εÇ╣' */ }\n\n.typcn-camera-outline:before {\n  content: '\\e03a';\n  /* 'εÇ║' */ }\n\n.typcn-camera:before {\n  content: '\\e03b';\n  /* 'εÇ╗' */ }\n\n.typcn-cancel-outline:before {\n  content: '\\e03c';\n  /* 'εÇ╝' */ }\n\n.typcn-cancel:before {\n  content: '\\e03d';\n  /* 'εÇ╜' */ }\n\n.typcn-chart-area-outline:before {\n  content: '\\e03e';\n  /* 'εÇ╛' */ }\n\n.typcn-chart-area:before {\n  content: '\\e03f';\n  /* 'εÇ┐' */ }\n\n.typcn-chart-bar-outline:before {\n  content: '\\e040';\n  /* 'εüÇ' */ }\n\n.typcn-chart-bar:before {\n  content: '\\e041';\n  /* 'εüü' */ }\n\n.typcn-chart-line-outline:before {\n  content: '\\e042';\n  /* 'εüé' */ }\n\n.typcn-chart-line:before {\n  content: '\\e043';\n  /* 'εüâ' */ }\n\n.typcn-chart-pie-outline:before {\n  content: '\\e044';\n  /* 'εüä' */ }\n\n.typcn-chart-pie:before {\n  content: '\\e045';\n  /* 'εüà' */ }\n\n.typcn-chevron-left-outline:before {\n  content: '\\e046';\n  /* 'εüå' */ }\n\n.typcn-chevron-left:before {\n  content: '\\e047';\n  /* 'εüç' */ }\n\n.typcn-chevron-right-outline:before {\n  content: '\\e048';\n  /* 'εüê' */ }\n\n.typcn-chevron-right:before {\n  content: '\\e049';\n  /* 'εüë' */ }\n\n.typcn-clipboard:before {\n  content: '\\e04a';\n  /* 'εüè' */ }\n\n.typcn-cloud-storage:before {\n  content: '\\e04b';\n  /* 'εüï' */ }\n\n.typcn-cloud-storage-outline:before {\n  content: '\\e054';\n  /* 'εüö' */ }\n\n.typcn-code-outline:before {\n  content: '\\e04c';\n  /* 'εüî' */ }\n\n.typcn-code:before {\n  content: '\\e04d';\n  /* 'εüì' */ }\n\n.typcn-coffee:before {\n  content: '\\e04e';\n  /* 'εüÄ' */ }\n\n.typcn-cog-outline:before {\n  content: '\\e04f';\n  /* 'εüÅ' */ }\n\n.typcn-cog:before {\n  content: '\\e050';\n  /* 'εüÉ' */ }\n\n.typcn-compass:before {\n  content: '\\e051';\n  /* 'εüæ' */ }\n\n.typcn-contacts:before {\n  content: '\\e052';\n  /* 'εüÆ' */ }\n\n.typcn-credit-card:before {\n  content: '\\e053';\n  /* 'εüô' */ }\n\n.typcn-css3:before {\n  content: '\\e055';\n  /* 'εüò' */ }\n\n.typcn-database:before {\n  content: '\\e056';\n  /* 'εüû' */ }\n\n.typcn-delete-outline:before {\n  content: '\\e057';\n  /* 'εüù' */ }\n\n.typcn-delete:before {\n  content: '\\e058';\n  /* 'εüÿ' */ }\n\n.typcn-device-desktop:before {\n  content: '\\e059';\n  /* 'εüÖ' */ }\n\n.typcn-device-laptop:before {\n  content: '\\e05a';\n  /* 'εüÜ' */ }\n\n.typcn-device-phone:before {\n  content: '\\e05b';\n  /* 'εü¢' */ }\n\n.typcn-device-tablet:before {\n  content: '\\e05c';\n  /* 'εü£' */ }\n\n.typcn-directions:before {\n  content: '\\e05d';\n  /* 'εü¥' */ }\n\n.typcn-divide-outline:before {\n  content: '\\e05e';\n  /* 'εü₧' */ }\n\n.typcn-divide:before {\n  content: '\\e05f';\n  /* 'εüƒ' */ }\n\n.typcn-document-add:before {\n  content: '\\e060';\n  /* 'εüá' */ }\n\n.typcn-document-delete:before {\n  content: '\\e061';\n  /* 'εüí' */ }\n\n.typcn-document-text:before {\n  content: '\\e062';\n  /* 'εüó' */ }\n\n.typcn-document:before {\n  content: '\\e063';\n  /* 'εüú' */ }\n\n.typcn-download-outline:before {\n  content: '\\e064';\n  /* 'εüñ' */ }\n\n.typcn-download:before {\n  content: '\\e065';\n  /* 'εüÑ' */ }\n\n.typcn-dropbox:before {\n  content: '\\e066';\n  /* 'εüª' */ }\n\n.typcn-edit:before {\n  content: '\\e067';\n  /* 'εüº' */ }\n\n.typcn-eject-outline:before {\n  content: '\\e068';\n  /* 'εü¿' */ }\n\n.typcn-eject:before {\n  content: '\\e069';\n  /* 'εü⌐' */ }\n\n.typcn-equals-outline:before {\n  content: '\\e06a';\n  /* 'εü¬' */ }\n\n.typcn-equals:before {\n  content: '\\e06b';\n  /* 'εü½' */ }\n\n.typcn-export-outline:before {\n  content: '\\e06c';\n  /* 'εü¼' */ }\n\n.typcn-export:before {\n  content: '\\e06d';\n  /* 'εü¡' */ }\n\n.typcn-eye-outline:before {\n  content: '\\e06e';\n  /* 'εü«' */ }\n\n.typcn-eye:before {\n  content: '\\e06f';\n  /* 'εü»' */ }\n\n.typcn-feather:before {\n  content: '\\e070';\n  /* 'εü░' */ }\n\n.typcn-film:before {\n  content: '\\e071';\n  /* 'εü▒' */ }\n\n.typcn-filter:before {\n  content: '\\e072';\n  /* 'εü▓' */ }\n\n.typcn-flag-outline:before {\n  content: '\\e073';\n  /* 'εü│' */ }\n\n.typcn-flag:before {\n  content: '\\e074';\n  /* 'εü┤' */ }\n\n.typcn-flash-outline:before {\n  content: '\\e075';\n  /* 'εü╡' */ }\n\n.typcn-flash:before {\n  content: '\\e076';\n  /* 'εü╢' */ }\n\n.typcn-flow-children:before {\n  content: '\\e077';\n  /* 'εü╖' */ }\n\n.typcn-flow-merge:before {\n  content: '\\e078';\n  /* 'εü╕' */ }\n\n.typcn-flow-parallel:before {\n  content: '\\e079';\n  /* 'εü╣' */ }\n\n.typcn-flow-switch:before {\n  content: '\\e07a';\n  /* 'εü║' */ }\n\n.typcn-folder-add:before {\n  content: '\\e07b';\n  /* 'εü╗' */ }\n\n.typcn-folder-delete:before {\n  content: '\\e07c';\n  /* 'εü╝' */ }\n\n.typcn-folder-open:before {\n  content: '\\e07d';\n  /* 'εü╜' */ }\n\n.typcn-folder:before {\n  content: '\\e07e';\n  /* 'εü╛' */ }\n\n.typcn-gift:before {\n  content: '\\e07f';\n  /* 'εü┐' */ }\n\n.typcn-globe-outline:before {\n  content: '\\e080';\n  /* 'εéÇ' */ }\n\n.typcn-globe:before {\n  content: '\\e081';\n  /* 'εéü' */ }\n\n.typcn-group-outline:before {\n  content: '\\e082';\n  /* 'εéé' */ }\n\n.typcn-group:before {\n  content: '\\e083';\n  /* 'εéâ' */ }\n\n.typcn-headphones:before {\n  content: '\\e084';\n  /* 'εéä' */ }\n\n.typcn-heart-full-outline:before {\n  content: '\\e085';\n  /* 'εéà' */ }\n\n.typcn-heart-half-outline:before {\n  content: '\\e086';\n  /* 'εéå' */ }\n\n.typcn-heart-outline:before {\n  content: '\\e087';\n  /* 'εéç' */ }\n\n.typcn-heart:before {\n  content: '\\e088';\n  /* 'εéê' */ }\n\n.typcn-home-outline:before {\n  content: '\\e089';\n  /* 'εéë' */ }\n\n.typcn-home:before {\n  content: '\\e08a';\n  /* 'εéè' */ }\n\n.typcn-html5:before {\n  content: '\\e08b';\n  /* 'εéï' */ }\n\n.typcn-image-outline:before {\n  content: '\\e08c';\n  /* 'εéî' */ }\n\n.typcn-image:before {\n  content: '\\e08d';\n  /* 'εéì' */ }\n\n.typcn-infinity-outline:before {\n  content: '\\e08e';\n  /* 'εéÄ' */ }\n\n.typcn-infinity:before {\n  content: '\\e08f';\n  /* 'εéÅ' */ }\n\n.typcn-info-large-outline:before {\n  content: '\\e090';\n  /* 'εéÉ' */ }\n\n.typcn-info-large:before {\n  content: '\\e091';\n  /* 'εéæ' */ }\n\n.typcn-info-outline:before {\n  content: '\\e092';\n  /* 'εéÆ' */ }\n\n.typcn-info:before {\n  content: '\\e093';\n  /* 'εéô' */ }\n\n.typcn-input-checked-outline:before {\n  content: '\\e094';\n  /* 'εéö' */ }\n\n.typcn-input-checked:before {\n  content: '\\e095';\n  /* 'εéò' */ }\n\n.typcn-key-outline:before {\n  content: '\\e096';\n  /* 'εéû' */ }\n\n.typcn-key:before {\n  content: '\\e097';\n  /* 'εéù' */ }\n\n.typcn-keyboard:before {\n  content: '\\e098';\n  /* 'εéÿ' */ }\n\n.typcn-leaf:before {\n  content: '\\e099';\n  /* 'εéÖ' */ }\n\n.typcn-lightbulb:before {\n  content: '\\e09a';\n  /* 'εéÜ' */ }\n\n.typcn-link-outline:before {\n  content: '\\e09b';\n  /* 'εé¢' */ }\n\n.typcn-link:before {\n  content: '\\e09c';\n  /* 'εé£' */ }\n\n.typcn-location-arrow-outline:before {\n  content: '\\e09d';\n  /* 'εé¥' */ }\n\n.typcn-location-arrow:before {\n  content: '\\e09e';\n  /* 'εé₧' */ }\n\n.typcn-location-outline:before {\n  content: '\\e09f';\n  /* 'εéƒ' */ }\n\n.typcn-location:before {\n  content: '\\e0a0';\n  /* 'εéá' */ }\n\n.typcn-lock-closed-outline:before {\n  content: '\\e0a1';\n  /* 'εéí' */ }\n\n.typcn-lock-closed:before {\n  content: '\\e0a2';\n  /* 'εéó' */ }\n\n.typcn-lock-open-outline:before {\n  content: '\\e0a3';\n  /* 'εéú' */ }\n\n.typcn-lock-open:before {\n  content: '\\e0a4';\n  /* 'εéñ' */ }\n\n.typcn-mail:before {\n  content: '\\e0a5';\n  /* 'εéÑ' */ }\n\n.typcn-map:before {\n  content: '\\e0a6';\n  /* 'εéª' */ }\n\n.typcn-media-eject-outline:before {\n  content: '\\e0a7';\n  /* 'εéº' */ }\n\n.typcn-media-eject:before {\n  content: '\\e0a8';\n  /* 'εé¿' */ }\n\n.typcn-media-fast-forward-outline:before {\n  content: '\\e0a9';\n  /* 'εé⌐' */ }\n\n.typcn-media-fast-forward:before {\n  content: '\\e0aa';\n  /* 'εé¬' */ }\n\n.typcn-media-pause-outline:before {\n  content: '\\e0ab';\n  /* 'εé½' */ }\n\n.typcn-media-pause:before {\n  content: '\\e0ac';\n  /* 'εé¼' */ }\n\n.typcn-media-play-outline:before {\n  content: '\\e0ad';\n  /* 'εé¡' */ }\n\n.typcn-media-play-reverse-outline:before {\n  content: '\\e0ae';\n  /* 'εé«' */ }\n\n.typcn-media-play-reverse:before {\n  content: '\\e0af';\n  /* 'εé»' */ }\n\n.typcn-media-play:before {\n  content: '\\e0b0';\n  /* 'εé░' */ }\n\n.typcn-media-record-outline:before {\n  content: '\\e0b1';\n  /* 'εé▒' */ }\n\n.typcn-media-record:before {\n  content: '\\e0b2';\n  /* 'εé▓' */ }\n\n.typcn-media-rewind-outline:before {\n  content: '\\e0b3';\n  /* 'εé│' */ }\n\n.typcn-media-rewind:before {\n  content: '\\e0b4';\n  /* 'εé┤' */ }\n\n.typcn-media-stop-outline:before {\n  content: '\\e0b5';\n  /* 'εé╡' */ }\n\n.typcn-media-stop:before {\n  content: '\\e0b6';\n  /* 'εé╢' */ }\n\n.typcn-message-typing:before {\n  content: '\\e0b7';\n  /* 'εé╖' */ }\n\n.typcn-message:before {\n  content: '\\e0b8';\n  /* 'εé╕' */ }\n\n.typcn-messages:before {\n  content: '\\e0b9';\n  /* 'εé╣' */ }\n\n.typcn-microphone-outline:before {\n  content: '\\e0ba';\n  /* 'εé║' */ }\n\n.typcn-microphone:before {\n  content: '\\e0bb';\n  /* 'εé╗' */ }\n\n.typcn-minus-outline:before {\n  content: '\\e0bc';\n  /* 'εé╝' */ }\n\n.typcn-minus:before {\n  content: '\\e0bd';\n  /* 'εé╜' */ }\n\n.typcn-mortar-board:before {\n  content: '\\e0be';\n  /* 'εé╛' */ }\n\n.typcn-news:before {\n  content: '\\e0bf';\n  /* 'εé┐' */ }\n\n.typcn-notes-outline:before {\n  content: '\\e0c0';\n  /* 'εâÇ' */ }\n\n.typcn-notes:before {\n  content: '\\e0c1';\n  /* 'εâü' */ }\n\n.typcn-pen:before {\n  content: '\\e0c2';\n  /* 'εâé' */ }\n\n.typcn-pencil:before {\n  content: '\\e0c3';\n  /* 'εââ' */ }\n\n.typcn-phone-outline:before {\n  content: '\\e0c4';\n  /* 'εâä' */ }\n\n.typcn-phone:before {\n  content: '\\e0c5';\n  /* 'εâà' */ }\n\n.typcn-pi-outline:before {\n  content: '\\e0c6';\n  /* 'εâå' */ }\n\n.typcn-pi:before {\n  content: '\\e0c7';\n  /* 'εâç' */ }\n\n.typcn-pin-outline:before {\n  content: '\\e0c8';\n  /* 'εâê' */ }\n\n.typcn-pin:before {\n  content: '\\e0c9';\n  /* 'εâë' */ }\n\n.typcn-pipette:before {\n  content: '\\e0ca';\n  /* 'εâè' */ }\n\n.typcn-plane-outline:before {\n  content: '\\e0cb';\n  /* 'εâï' */ }\n\n.typcn-plane:before {\n  content: '\\e0cc';\n  /* 'εâî' */ }\n\n.typcn-plug:before {\n  content: '\\e0cd';\n  /* 'εâì' */ }\n\n.typcn-plus-outline:before {\n  content: '\\e0ce';\n  /* 'εâÄ' */ }\n\n.typcn-plus:before {\n  content: '\\e0cf';\n  /* 'εâÅ' */ }\n\n.typcn-point-of-interest-outline:before {\n  content: '\\e0d0';\n  /* 'εâÉ' */ }\n\n.typcn-point-of-interest:before {\n  content: '\\e0d1';\n  /* 'εâæ' */ }\n\n.typcn-power-outline:before {\n  content: '\\e0d2';\n  /* 'εâÆ' */ }\n\n.typcn-power:before {\n  content: '\\e0d3';\n  /* 'εâô' */ }\n\n.typcn-printer:before {\n  content: '\\e0d4';\n  /* 'εâö' */ }\n\n.typcn-puzzle-outline:before {\n  content: '\\e0d5';\n  /* 'εâò' */ }\n\n.typcn-puzzle:before {\n  content: '\\e0d6';\n  /* 'εâû' */ }\n\n.typcn-radar-outline:before {\n  content: '\\e0d7';\n  /* 'εâù' */ }\n\n.typcn-radar:before {\n  content: '\\e0d8';\n  /* 'εâÿ' */ }\n\n.typcn-refresh-outline:before {\n  content: '\\e0d9';\n  /* 'εâÖ' */ }\n\n.typcn-refresh:before {\n  content: '\\e0da';\n  /* 'εâÜ' */ }\n\n.typcn-rss-outline:before {\n  content: '\\e0db';\n  /* 'εâ¢' */ }\n\n.typcn-rss:before {\n  content: '\\e0dc';\n  /* 'εâ£' */ }\n\n.typcn-scissors-outline:before {\n  content: '\\e0dd';\n  /* 'εâ¥' */ }\n\n.typcn-scissors:before {\n  content: '\\e0de';\n  /* 'εâ₧' */ }\n\n.typcn-shopping-bag:before {\n  content: '\\e0df';\n  /* 'εâƒ' */ }\n\n.typcn-shopping-cart:before {\n  content: '\\e0e0';\n  /* 'εâá' */ }\n\n.typcn-social-at-circular:before {\n  content: '\\e0e1';\n  /* 'εâí' */ }\n\n.typcn-social-dribbble-circular:before {\n  content: '\\e0e2';\n  /* 'εâó' */ }\n\n.typcn-social-dribbble:before {\n  content: '\\e0e3';\n  /* 'εâú' */ }\n\n.typcn-social-facebook-circular:before {\n  content: '\\e0e4';\n  /* 'εâñ' */ }\n\n.typcn-social-facebook:before {\n  content: '\\e0e5';\n  /* 'εâÑ' */ }\n\n.typcn-social-flickr-circular:before {\n  content: '\\e0e6';\n  /* 'εâª' */ }\n\n.typcn-social-flickr:before {\n  content: '\\e0e7';\n  /* 'εâº' */ }\n\n.typcn-social-github-circular:before {\n  content: '\\e0e8';\n  /* 'εâ¿' */ }\n\n.typcn-social-github:before {\n  content: '\\e0e9';\n  /* 'εâ⌐' */ }\n\n.typcn-social-google-plus-circular:before {\n  content: '\\e0ea';\n  /* 'εâ¬' */ }\n\n.typcn-social-google-plus:before {\n  content: '\\e0eb';\n  /* 'εâ½' */ }\n\n.typcn-social-instagram-circular:before {\n  content: '\\e0ec';\n  /* 'εâ¼' */ }\n\n.typcn-social-instagram:before {\n  content: '\\e0ed';\n  /* 'εâ¡' */ }\n\n.typcn-social-last-fm-circular:before {\n  content: '\\e0ee';\n  /* 'εâ«' */ }\n\n.typcn-social-last-fm:before {\n  content: '\\e0ef';\n  /* 'εâ»' */ }\n\n.typcn-social-linkedin-circular:before {\n  content: '\\e0f0';\n  /* 'εâ░' */ }\n\n.typcn-social-linkedin:before {\n  content: '\\e0f1';\n  /* 'εâ▒' */ }\n\n.typcn-social-pinterest-circular:before {\n  content: '\\e0f2';\n  /* 'εâ▓' */ }\n\n.typcn-social-pinterest:before {\n  content: '\\e0f3';\n  /* 'εâ│' */ }\n\n.typcn-social-skype-outline:before {\n  content: '\\e0f4';\n  /* 'εâ┤' */ }\n\n.typcn-social-skype:before {\n  content: '\\e0f5';\n  /* 'εâ╡' */ }\n\n.typcn-social-tumbler-circular:before {\n  content: '\\e0f6';\n  /* 'εâ╢' */ }\n\n.typcn-social-tumbler:before {\n  content: '\\e0f7';\n  /* 'εâ╖' */ }\n\n.typcn-social-twitter-circular:before {\n  content: '\\e0f8';\n  /* 'εâ╕' */ }\n\n.typcn-social-twitter:before {\n  content: '\\e0f9';\n  /* 'εâ╣' */ }\n\n.typcn-social-vimeo-circular:before {\n  content: '\\e0fa';\n  /* 'εâ║' */ }\n\n.typcn-social-vimeo:before {\n  content: '\\e0fb';\n  /* 'εâ╗' */ }\n\n.typcn-social-youtube-circular:before {\n  content: '\\e0fc';\n  /* 'εâ╝' */ }\n\n.typcn-social-youtube:before {\n  content: '\\e0fd';\n  /* 'εâ╜' */ }\n\n.typcn-sort-alphabetically-outline:before {\n  content: '\\e0fe';\n  /* 'εâ╛' */ }\n\n.typcn-sort-alphabetically:before {\n  content: '\\e0ff';\n  /* 'εâ┐' */ }\n\n.typcn-sort-numerically-outline:before {\n  content: '\\e100';\n  /* 'εäÇ' */ }\n\n.typcn-sort-numerically:before {\n  content: '\\e101';\n  /* 'εäü' */ }\n\n.typcn-spanner-outline:before {\n  content: '\\e102';\n  /* 'εäé' */ }\n\n.typcn-spanner:before {\n  content: '\\e103';\n  /* 'εäâ' */ }\n\n.typcn-spiral:before {\n  content: '\\e104';\n  /* 'εää' */ }\n\n.typcn-star-full-outline:before {\n  content: '\\e105';\n  /* 'εäà' */ }\n\n.typcn-star-half-outline:before {\n  content: '\\e106';\n  /* 'εäå' */ }\n\n.typcn-star-half:before {\n  content: '\\e107';\n  /* 'εäç' */ }\n\n.typcn-star-outline:before {\n  content: '\\e108';\n  /* 'εäê' */ }\n\n.typcn-star:before {\n  content: '\\e109';\n  /* 'εäë' */ }\n\n.typcn-starburst-outline:before {\n  content: '\\e10a';\n  /* 'εäè' */ }\n\n.typcn-starburst:before {\n  content: '\\e10b';\n  /* 'εäï' */ }\n\n.typcn-stopwatch:before {\n  content: '\\e10c';\n  /* 'εäî' */ }\n\n.typcn-support:before {\n  content: '\\e10d';\n  /* 'εäì' */ }\n\n.typcn-tabs-outline:before {\n  content: '\\e10e';\n  /* 'εäÄ' */ }\n\n.typcn-tag:before {\n  content: '\\e10f';\n  /* 'εäÅ' */ }\n\n.typcn-tags:before {\n  content: '\\e110';\n  /* 'εäÉ' */ }\n\n.typcn-th-large-outline:before {\n  content: '\\e111';\n  /* 'εäæ' */ }\n\n.typcn-th-large:before {\n  content: '\\e112';\n  /* 'εäÆ' */ }\n\n.typcn-th-list-outline:before {\n  content: '\\e113';\n  /* 'εäô' */ }\n\n.typcn-th-list:before {\n  content: '\\e114';\n  /* 'εäö' */ }\n\n.typcn-th-menu-outline:before {\n  content: '\\e115';\n  /* 'εäò' */ }\n\n.typcn-th-menu:before {\n  content: '\\e116';\n  /* 'εäû' */ }\n\n.typcn-th-small-outline:before {\n  content: '\\e117';\n  /* 'εäù' */ }\n\n.typcn-th-small:before {\n  content: '\\e118';\n  /* 'εäÿ' */ }\n\n.typcn-thermometer:before {\n  content: '\\e119';\n  /* 'εäÖ' */ }\n\n.typcn-thumbs-down:before {\n  content: '\\e11a';\n  /* 'εäÜ' */ }\n\n.typcn-thumbs-ok:before {\n  content: '\\e11b';\n  /* 'εä¢' */ }\n\n.typcn-thumbs-up:before {\n  content: '\\e11c';\n  /* 'εä£' */ }\n\n.typcn-tick-outline:before {\n  content: '\\e11d';\n  /* 'εä¥' */ }\n\n.typcn-tick:before {\n  content: '\\e11e';\n  /* 'εä₧' */ }\n\n.typcn-ticket:before {\n  content: '\\e11f';\n  /* 'εäƒ' */ }\n\n.typcn-time:before {\n  content: '\\e120';\n  /* 'εäá' */ }\n\n.typcn-times-outline:before {\n  content: '\\e121';\n  /* 'εäí' */ }\n\n.typcn-times:before {\n  content: '\\e122';\n  /* 'εäó' */ }\n\n.typcn-trash:before {\n  content: '\\e123';\n  /* 'εäú' */ }\n\n.typcn-tree:before {\n  content: '\\e124';\n  /* 'εäñ' */ }\n\n.typcn-upload-outline:before {\n  content: '\\e125';\n  /* 'εäÑ' */ }\n\n.typcn-upload:before {\n  content: '\\e126';\n  /* 'εäª' */ }\n\n.typcn-user-add-outline:before {\n  content: '\\e127';\n  /* 'εäº' */ }\n\n.typcn-user-add:before {\n  content: '\\e128';\n  /* 'εä¿' */ }\n\n.typcn-user-delete-outline:before {\n  content: '\\e129';\n  /* 'εä⌐' */ }\n\n.typcn-user-delete:before {\n  content: '\\e12a';\n  /* 'εä¬' */ }\n\n.typcn-user-outline:before {\n  content: '\\e12b';\n  /* 'εä½' */ }\n\n.typcn-user:before {\n  content: '\\e12c';\n  /* 'εä¼' */ }\n\n.typcn-vendor-android:before {\n  content: '\\e12d';\n  /* 'εä¡' */ }\n\n.typcn-vendor-apple:before {\n  content: '\\e12e';\n  /* 'εä«' */ }\n\n.typcn-vendor-microsoft:before {\n  content: '\\e12f';\n  /* 'εä»' */ }\n\n.typcn-video-outline:before {\n  content: '\\e130';\n  /* 'εä░' */ }\n\n.typcn-video:before {\n  content: '\\e131';\n  /* 'εä▒' */ }\n\n.typcn-volume-down:before {\n  content: '\\e132';\n  /* 'εä▓' */ }\n\n.typcn-volume-mute:before {\n  content: '\\e133';\n  /* 'εä│' */ }\n\n.typcn-volume-up:before {\n  content: '\\e134';\n  /* 'εä┤' */ }\n\n.typcn-volume:before {\n  content: '\\e135';\n  /* 'εä╡' */ }\n\n.typcn-warning-outline:before {\n  content: '\\e136';\n  /* 'εä╢' */ }\n\n.typcn-warning:before {\n  content: '\\e137';\n  /* 'εä╖' */ }\n\n.typcn-watch:before {\n  content: '\\e138';\n  /* 'εä╕' */ }\n\n.typcn-waves-outline:before {\n  content: '\\e139';\n  /* 'εä╣' */ }\n\n.typcn-waves:before {\n  content: '\\e13a';\n  /* 'εä║' */ }\n\n.typcn-weather-cloudy:before {\n  content: '\\e13b';\n  /* 'εä╗' */ }\n\n.typcn-weather-downpour:before {\n  content: '\\e13c';\n  /* 'εä╝' */ }\n\n.typcn-weather-night:before {\n  content: '\\e13d';\n  /* 'εä╜' */ }\n\n.typcn-weather-partly-sunny:before {\n  content: '\\e13e';\n  /* 'εä╛' */ }\n\n.typcn-weather-shower:before {\n  content: '\\e13f';\n  /* 'εä┐' */ }\n\n.typcn-weather-snow:before {\n  content: '\\e140';\n  /* 'εàÇ' */ }\n\n.typcn-weather-stormy:before {\n  content: '\\e141';\n  /* 'εàü' */ }\n\n.typcn-weather-sunny:before {\n  content: '\\e142';\n  /* 'εàé' */ }\n\n.typcn-weather-windy-cloudy:before {\n  content: '\\e143';\n  /* 'εàâ' */ }\n\n.typcn-weather-windy:before {\n  content: '\\e144';\n  /* 'εàä' */ }\n\n.typcn-wi-fi-outline:before {\n  content: '\\e145';\n  /* 'εàà' */ }\n\n.typcn-wi-fi:before {\n  content: '\\e146';\n  /* 'εàå' */ }\n\n.typcn-wine:before {\n  content: '\\e147';\n  /* 'εàç' */ }\n\n.typcn-world-outline:before {\n  content: '\\e148';\n  /* 'εàê' */ }\n\n.typcn-world:before {\n  content: '\\e149';\n  /* 'εàë' */ }\n\n.typcn-zoom-in-outline:before {\n  content: '\\e14a';\n  /* 'εàè' */ }\n\n.typcn-zoom-in:before {\n  content: '\\e14b';\n  /* 'εàï' */ }\n\n.typcn-zoom-out-outline:before {\n  content: '\\e14c';\n  /* 'εàî' */ }\n\n.typcn-zoom-out:before {\n  content: '\\e14d';\n  /* 'εàì' */ }\n\n.typcn-zoom-outline:before {\n  content: '\\e14e';\n  /* 'εàÄ' */ }\n\n.typcn-zoom:before {\n  content: '\\e14f';\n  /* 'εàÅ' */ }\n\n@font-face {\n  font-family: \"dripicons-v2\";\n  src: url(\"../fonts/dripicons-v2.eot\");\n  src: url(\"../fonts/dripicons-v2.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/dripicons-v2.woff\") format(\"woff\"), url(\"../fonts/dripicons-v2.ttf\") format(\"truetype\"), url(\"../fonts/dripicons-v2.svg#dripicons-v2\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n[data-icon]:before {\n  font-family: \"dripicons-v2\" !important;\n  content: attr(data-icon);\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n[class^=\"dripicons-\"]:before,\n[class*=\" dripicons-\"]:before {\n  font-family: \"dripicons-v2\" !important;\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.dripicons-alarm:before {\n  content: \"\\61\"; }\n\n.dripicons-align-center:before {\n  content: \"\\62\"; }\n\n.dripicons-align-justify:before {\n  content: \"\\63\"; }\n\n.dripicons-align-left:before {\n  content: \"\\64\"; }\n\n.dripicons-align-right:before {\n  content: \"\\65\"; }\n\n.dripicons-anchor:before {\n  content: \"\\66\"; }\n\n.dripicons-archive:before {\n  content: \"\\67\"; }\n\n.dripicons-arrow-down:before {\n  content: \"\\68\"; }\n\n.dripicons-arrow-left:before {\n  content: \"\\69\"; }\n\n.dripicons-arrow-right:before {\n  content: \"\\6a\"; }\n\n.dripicons-arrow-thin-down:before {\n  content: \"\\6b\"; }\n\n.dripicons-arrow-thin-left:before {\n  content: \"\\6c\"; }\n\n.dripicons-arrow-thin-right:before {\n  content: \"\\6d\"; }\n\n.dripicons-arrow-thin-up:before {\n  content: \"\\6e\"; }\n\n.dripicons-arrow-up:before {\n  content: \"\\6f\"; }\n\n.dripicons-article:before {\n  content: \"\\70\"; }\n\n.dripicons-backspace:before {\n  content: \"\\71\"; }\n\n.dripicons-basket:before {\n  content: \"\\72\"; }\n\n.dripicons-basketball:before {\n  content: \"\\73\"; }\n\n.dripicons-battery-empty:before {\n  content: \"\\74\"; }\n\n.dripicons-battery-full:before {\n  content: \"\\75\"; }\n\n.dripicons-battery-low:before {\n  content: \"\\76\"; }\n\n.dripicons-battery-medium:before {\n  content: \"\\77\"; }\n\n.dripicons-bell:before {\n  content: \"\\78\"; }\n\n.dripicons-blog:before {\n  content: \"\\79\"; }\n\n.dripicons-bluetooth:before {\n  content: \"\\7a\"; }\n\n.dripicons-bold:before {\n  content: \"\\41\"; }\n\n.dripicons-bookmark:before {\n  content: \"\\42\"; }\n\n.dripicons-bookmarks:before {\n  content: \"\\43\"; }\n\n.dripicons-box:before {\n  content: \"\\44\"; }\n\n.dripicons-briefcase:before {\n  content: \"\\45\"; }\n\n.dripicons-brightness-low:before {\n  content: \"\\46\"; }\n\n.dripicons-brightness-max:before {\n  content: \"\\47\"; }\n\n.dripicons-brightness-medium:before {\n  content: \"\\48\"; }\n\n.dripicons-broadcast:before {\n  content: \"\\49\"; }\n\n.dripicons-browser:before {\n  content: \"\\4a\"; }\n\n.dripicons-browser-upload:before {\n  content: \"\\4b\"; }\n\n.dripicons-brush:before {\n  content: \"\\4c\"; }\n\n.dripicons-calendar:before {\n  content: \"\\4d\"; }\n\n.dripicons-camcorder:before {\n  content: \"\\4e\"; }\n\n.dripicons-camera:before {\n  content: \"\\4f\"; }\n\n.dripicons-card:before {\n  content: \"\\50\"; }\n\n.dripicons-cart:before {\n  content: \"\\51\"; }\n\n.dripicons-checklist:before {\n  content: \"\\52\"; }\n\n.dripicons-checkmark:before {\n  content: \"\\53\"; }\n\n.dripicons-chevron-down:before {\n  content: \"\\54\"; }\n\n.dripicons-chevron-left:before {\n  content: \"\\55\"; }\n\n.dripicons-chevron-right:before {\n  content: \"\\56\"; }\n\n.dripicons-chevron-up:before {\n  content: \"\\57\"; }\n\n.dripicons-clipboard:before {\n  content: \"\\58\"; }\n\n.dripicons-clock:before {\n  content: \"\\59\"; }\n\n.dripicons-clockwise:before {\n  content: \"\\5a\"; }\n\n.dripicons-cloud:before {\n  content: \"\\30\"; }\n\n.dripicons-cloud-download:before {\n  content: \"\\31\"; }\n\n.dripicons-cloud-upload:before {\n  content: \"\\32\"; }\n\n.dripicons-code:before {\n  content: \"\\33\"; }\n\n.dripicons-contract:before {\n  content: \"\\34\"; }\n\n.dripicons-contract-2:before {\n  content: \"\\35\"; }\n\n.dripicons-conversation:before {\n  content: \"\\36\"; }\n\n.dripicons-copy:before {\n  content: \"\\37\"; }\n\n.dripicons-crop:before {\n  content: \"\\38\"; }\n\n.dripicons-cross:before {\n  content: \"\\39\"; }\n\n.dripicons-crosshair:before {\n  content: \"\\21\"; }\n\n.dripicons-cutlery:before {\n  content: \"\\22\"; }\n\n.dripicons-device-desktop:before {\n  content: \"\\23\"; }\n\n.dripicons-device-mobile:before {\n  content: \"\\24\"; }\n\n.dripicons-device-tablet:before {\n  content: \"\\25\"; }\n\n.dripicons-direction:before {\n  content: \"\\26\"; }\n\n.dripicons-disc:before {\n  content: \"\\27\"; }\n\n.dripicons-document:before {\n  content: \"\\28\"; }\n\n.dripicons-document-delete:before {\n  content: \"\\29\"; }\n\n.dripicons-document-edit:before {\n  content: \"\\2a\"; }\n\n.dripicons-document-new:before {\n  content: \"\\2b\"; }\n\n.dripicons-document-remove:before {\n  content: \"\\2c\"; }\n\n.dripicons-dot:before {\n  content: \"\\2d\"; }\n\n.dripicons-dots-2:before {\n  content: \"\\2e\"; }\n\n.dripicons-dots-3:before {\n  content: \"\\2f\"; }\n\n.dripicons-download:before {\n  content: \"\\3a\"; }\n\n.dripicons-duplicate:before {\n  content: \"\\3b\"; }\n\n.dripicons-enter:before {\n  content: \"\\3c\"; }\n\n.dripicons-exit:before {\n  content: \"\\3d\"; }\n\n.dripicons-expand:before {\n  content: \"\\3e\"; }\n\n.dripicons-expand-2:before {\n  content: \"\\3f\"; }\n\n.dripicons-experiment:before {\n  content: \"\\40\"; }\n\n.dripicons-export:before {\n  content: \"\\5b\"; }\n\n.dripicons-feed:before {\n  content: \"\\5d\"; }\n\n.dripicons-flag:before {\n  content: \"\\5e\"; }\n\n.dripicons-flashlight:before {\n  content: \"\\5f\"; }\n\n.dripicons-folder:before {\n  content: \"\\60\"; }\n\n.dripicons-folder-open:before {\n  content: \"\\7b\"; }\n\n.dripicons-forward:before {\n  content: \"\\7c\"; }\n\n.dripicons-gaming:before {\n  content: \"\\7d\"; }\n\n.dripicons-gear:before {\n  content: \"\\7e\"; }\n\n.dripicons-graduation:before {\n  content: \"\\5c\"; }\n\n.dripicons-graph-bar:before {\n  content: \"\\e000\"; }\n\n.dripicons-graph-line:before {\n  content: \"\\e001\"; }\n\n.dripicons-graph-pie:before {\n  content: \"\\e002\"; }\n\n.dripicons-headset:before {\n  content: \"\\e003\"; }\n\n.dripicons-heart:before {\n  content: \"\\e004\"; }\n\n.dripicons-help:before {\n  content: \"\\e005\"; }\n\n.dripicons-home:before {\n  content: \"\\e006\"; }\n\n.dripicons-hourglass:before {\n  content: \"\\e007\"; }\n\n.dripicons-inbox:before {\n  content: \"\\e008\"; }\n\n.dripicons-information:before {\n  content: \"\\e009\"; }\n\n.dripicons-italic:before {\n  content: \"\\e00a\"; }\n\n.dripicons-jewel:before {\n  content: \"\\e00b\"; }\n\n.dripicons-lifting:before {\n  content: \"\\e00c\"; }\n\n.dripicons-lightbulb:before {\n  content: \"\\e00d\"; }\n\n.dripicons-link:before {\n  content: \"\\e00e\"; }\n\n.dripicons-link-broken:before {\n  content: \"\\e00f\"; }\n\n.dripicons-list:before {\n  content: \"\\e010\"; }\n\n.dripicons-loading:before {\n  content: \"\\e011\"; }\n\n.dripicons-location:before {\n  content: \"\\e012\"; }\n\n.dripicons-lock:before {\n  content: \"\\e013\"; }\n\n.dripicons-lock-open:before {\n  content: \"\\e014\"; }\n\n.dripicons-mail:before {\n  content: \"\\e015\"; }\n\n.dripicons-map:before {\n  content: \"\\e016\"; }\n\n.dripicons-media-loop:before {\n  content: \"\\e017\"; }\n\n.dripicons-media-next:before {\n  content: \"\\e018\"; }\n\n.dripicons-media-pause:before {\n  content: \"\\e019\"; }\n\n.dripicons-media-play:before {\n  content: \"\\e01a\"; }\n\n.dripicons-media-previous:before {\n  content: \"\\e01b\"; }\n\n.dripicons-media-record:before {\n  content: \"\\e01c\"; }\n\n.dripicons-media-shuffle:before {\n  content: \"\\e01d\"; }\n\n.dripicons-media-stop:before {\n  content: \"\\e01e\"; }\n\n.dripicons-medical:before {\n  content: \"\\e01f\"; }\n\n.dripicons-menu:before {\n  content: \"\\e020\"; }\n\n.dripicons-message:before {\n  content: \"\\e021\"; }\n\n.dripicons-meter:before {\n  content: \"\\e022\"; }\n\n.dripicons-microphone:before {\n  content: \"\\e023\"; }\n\n.dripicons-minus:before {\n  content: \"\\e024\"; }\n\n.dripicons-monitor:before {\n  content: \"\\e025\"; }\n\n.dripicons-move:before {\n  content: \"\\e026\"; }\n\n.dripicons-music:before {\n  content: \"\\e027\"; }\n\n.dripicons-network-1:before {\n  content: \"\\e028\"; }\n\n.dripicons-network-2:before {\n  content: \"\\e029\"; }\n\n.dripicons-network-3:before {\n  content: \"\\e02a\"; }\n\n.dripicons-network-4:before {\n  content: \"\\e02b\"; }\n\n.dripicons-network-5:before {\n  content: \"\\e02c\"; }\n\n.dripicons-pamphlet:before {\n  content: \"\\e02d\"; }\n\n.dripicons-paperclip:before {\n  content: \"\\e02e\"; }\n\n.dripicons-pencil:before {\n  content: \"\\e02f\"; }\n\n.dripicons-phone:before {\n  content: \"\\e030\"; }\n\n.dripicons-photo:before {\n  content: \"\\e031\"; }\n\n.dripicons-photo-group:before {\n  content: \"\\e032\"; }\n\n.dripicons-pill:before {\n  content: \"\\e033\"; }\n\n.dripicons-pin:before {\n  content: \"\\e034\"; }\n\n.dripicons-plus:before {\n  content: \"\\e035\"; }\n\n.dripicons-power:before {\n  content: \"\\e036\"; }\n\n.dripicons-preview:before {\n  content: \"\\e037\"; }\n\n.dripicons-print:before {\n  content: \"\\e038\"; }\n\n.dripicons-pulse:before {\n  content: \"\\e039\"; }\n\n.dripicons-question:before {\n  content: \"\\e03a\"; }\n\n.dripicons-reply:before {\n  content: \"\\e03b\"; }\n\n.dripicons-reply-all:before {\n  content: \"\\e03c\"; }\n\n.dripicons-return:before {\n  content: \"\\e03d\"; }\n\n.dripicons-retweet:before {\n  content: \"\\e03e\"; }\n\n.dripicons-rocket:before {\n  content: \"\\e03f\"; }\n\n.dripicons-scale:before {\n  content: \"\\e040\"; }\n\n.dripicons-search:before {\n  content: \"\\e041\"; }\n\n.dripicons-shopping-bag:before {\n  content: \"\\e042\"; }\n\n.dripicons-skip:before {\n  content: \"\\e043\"; }\n\n.dripicons-stack:before {\n  content: \"\\e044\"; }\n\n.dripicons-star:before {\n  content: \"\\e045\"; }\n\n.dripicons-stopwatch:before {\n  content: \"\\e046\"; }\n\n.dripicons-store:before {\n  content: \"\\e047\"; }\n\n.dripicons-suitcase:before {\n  content: \"\\e048\"; }\n\n.dripicons-swap:before {\n  content: \"\\e049\"; }\n\n.dripicons-tag:before {\n  content: \"\\e04a\"; }\n\n.dripicons-tag-delete:before {\n  content: \"\\e04b\"; }\n\n.dripicons-tags:before {\n  content: \"\\e04c\"; }\n\n.dripicons-thumbs-down:before {\n  content: \"\\e04d\"; }\n\n.dripicons-thumbs-up:before {\n  content: \"\\e04e\"; }\n\n.dripicons-ticket:before {\n  content: \"\\e04f\"; }\n\n.dripicons-time-reverse:before {\n  content: \"\\e050\"; }\n\n.dripicons-to-do:before {\n  content: \"\\e051\"; }\n\n.dripicons-toggles:before {\n  content: \"\\e052\"; }\n\n.dripicons-trash:before {\n  content: \"\\e053\"; }\n\n.dripicons-trophy:before {\n  content: \"\\e054\"; }\n\n.dripicons-upload:before {\n  content: \"\\e055\"; }\n\n.dripicons-user:before {\n  content: \"\\e056\"; }\n\n.dripicons-user-group:before {\n  content: \"\\e057\"; }\n\n.dripicons-user-id:before {\n  content: \"\\e058\"; }\n\n.dripicons-vibrate:before {\n  content: \"\\e059\"; }\n\n.dripicons-view-apps:before {\n  content: \"\\e05a\"; }\n\n.dripicons-view-list:before {\n  content: \"\\e05b\"; }\n\n.dripicons-view-list-large:before {\n  content: \"\\e05c\"; }\n\n.dripicons-view-thumb:before {\n  content: \"\\e05d\"; }\n\n.dripicons-volume-full:before {\n  content: \"\\e05e\"; }\n\n.dripicons-volume-low:before {\n  content: \"\\e05f\"; }\n\n.dripicons-volume-medium:before {\n  content: \"\\e060\"; }\n\n.dripicons-volume-off:before {\n  content: \"\\e061\"; }\n\n.dripicons-wallet:before {\n  content: \"\\e062\"; }\n\n.dripicons-warning:before {\n  content: \"\\e063\"; }\n\n.dripicons-web:before {\n  content: \"\\e064\"; }\n\n.dripicons-weight:before {\n  content: \"\\e065\"; }\n\n.dripicons-wifi:before {\n  content: \"\\e066\"; }\n\n.dripicons-wrong:before {\n  content: \"\\e067\"; }\n\n.dripicons-zoom-in:before {\n  content: \"\\e068\"; }\n\n.dripicons-zoom-out:before {\n  content: \"\\e069\"; }\n\n/*# sourceMappingURL=icons.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/css/style.css",
    "content": "/*\nTemplate Name: UBold Dashboard\nAuthor: Coderthemes\nEmail: coderthemes@gmail.com\nFile: Main Css\n*/\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:400,500,700\");\n/* =============\n   Common\n============= */\nbody {\n  background: #f5f5f5;\n  margin: 0;\n  overflow-x: hidden;\n  font-family: \"Roboto\", sans-serif;\n  font-size: 14px; }\n\nhtml {\n  position: relative;\n  min-height: 100%;\n  background: #f5f5f5; }\n\nh1, h2, h3, h4, h5, h6 {\n  color: #36404a;\n  margin: 10px 0;\n  font-weight: normal; }\n\nh1 {\n  line-height: 43px; }\n\nh2 {\n  line-height: 35px; }\n\nh3 {\n  line-height: 30px; }\n  h3 small {\n    color: #444444; }\n\nh4 {\n  line-height: 22px; }\n  h4 small {\n    color: #444444; }\n\nh5 {\n  font-size: 15px; }\n  h5 small {\n    color: #444444; }\n\np {\n  line-height: 1.6;\n  margin-bottom: 10px; }\n\n* {\n  outline: none !important; }\n\nb {\n  font-weight: 500; }\n\na:hover {\n  outline: 0;\n  text-decoration: none; }\na:active {\n  outline: 0;\n  text-decoration: none; }\na:focus {\n  outline: 0;\n  text-decoration: none; }\n\n/* Footer */\n.footer {\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  bottom: 0;\n  color: #58666e;\n  text-align: left !important;\n  padding: 20px 30px;\n  position: absolute;\n  right: 0;\n  left: 240px;\n  font-size: 13px; }\n\n#wrapper {\n  height: 100%;\n  overflow: hidden;\n  width: 100%; }\n\n.page {\n  bottom: 0;\n  left: 0;\n  right: 0;\n  top: 0; }\n\n/* Page titles */\n.page-title {\n  font-size: 20px;\n  font-weight: 400;\n  margin-bottom: 12px;\n  margin-top: 7px; }\n\n.page-title + .breadcrumb {\n  font-size: 0.9rem; }\n\n.page-title-alt {\n  margin-bottom: 23px;\n  margin-top: 10px; }\n\n.page-header {\n  border-bottom: 1px solid #DBDDDE; }\n\n.header-title {\n  font-size: 16px;\n  font-weight: 400;\n  letter-spacing: 0.02em;\n  line-height: 16px;\n  margin-bottom: 8px; }\n\n.social-links li a {\n  -webkit-border-radius: 50%;\n  background: #EFF0F4;\n  border-radius: 50%;\n  color: #7A7676;\n  display: inline-block;\n  height: 30px;\n  line-height: 30px;\n  text-align: center;\n  width: 30px; }\n\n/* === LOADER === */\n#preloader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: #f3f3f3;\n  z-index: 9999999; }\n\n#status {\n  width: 56px;\n  height: 56px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin: -23px 0 0 -23px; }\n\n.spinner-wrapper {\n  position: relative;\n  width: 4em;\n  height: 4em;\n  border-radius: 100%; }\n\n.spinner-wrapper::after {\n  content: \"\";\n  background: #f3f3f3;\n  border-radius: 50%;\n  width: 3em;\n  height: 3em;\n  position: absolute;\n  top: 0.5em;\n  left: 0.5em; }\n\n.rotator {\n  position: relative;\n  width: 4em;\n  border-radius: 4em;\n  overflow: hidden;\n  -webkit-animation: rotate 2000ms infinite linear;\n  animation: rotate 2000ms infinite linear; }\n\n.rotator:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: #f5707a;\n  border: 3px solid #f3f3f3;\n  border-radius: 100%; }\n\n.inner-spin {\n  background: #f3f3f3;\n  height: 4em;\n  width: 2em; }\n\n.inner-spin {\n  -webkit-animation: rotate-left 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  animation: rotate-left 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  border-radius: 2em 0 0 2em;\n  -webkit-transform-origin: 2em 2em;\n  transform-origin: 2em 2em; }\n\n.inner-spin:last-child {\n  -webkit-animation: rotate-right 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  animation: rotate-right 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  margin-top: -4em;\n  border-radius: 0 2em 2em 0;\n  float: right;\n  -webkit-transform-origin: 0 50%;\n  transform-origin: 0 50%; }\n\n@-webkit-keyframes rotate-left {\n  60%,\n  75%,\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n@keyframes rotate-left {\n  60%,\n  75%,\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n@-webkit-keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n@-webkit-keyframes rotate-right {\n  0%,\n  25%,\n  45% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n@keyframes rotate-right {\n  0%,\n  25%,\n  45% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n/* =============\n   Helper clasess\n============= */\n.p-0 {\n  padding: 0 !important; }\n\n.p-20 {\n  padding: 20px !important; }\n\n.p-30 {\n  padding: 30px !important; }\n\n.p-l-0 {\n  padding-left: 0 !important; }\n\n.p-r-0 {\n  padding-right: 0 !important; }\n\n.p-t-0 {\n  padding-top: 0 !important; }\n\n.p-t-10 {\n  padding-top: 10px !important; }\n\n.p-b-0 {\n  padding-bottom: 0 !important; }\n\n.p-b-10 {\n  padding-bottom: 10px !important; }\n\n.p-l-r-10 {\n  padding-left: 10px;\n  padding-right: 10px; }\n\n.m-0 {\n  margin: 0 !important; }\n\n.m-r-5 {\n  margin-right: 5px !important; }\n\n.m-r-10 {\n  margin-right: 10px !important; }\n\n.m-r-15 {\n  margin-right: 15px !important; }\n\n.m-l-5 {\n  margin-left: 5px !important; }\n\n.m-l-10 {\n  margin-left: 10px !important; }\n\n.m-l-15 {\n  margin-left: 15px !important; }\n\n.m-t-5 {\n  margin-top: 5px !important; }\n\n.m-t-0 {\n  margin-top: 0 !important; }\n\n.m-t-10 {\n  margin-top: 10px !important; }\n\n.m-t-15 {\n  margin-top: 15px !important; }\n\n.m-t-20 {\n  margin-top: 20px !important; }\n\n.m-t-30 {\n  margin-top: 30px !important; }\n\n.m-t-40 {\n  margin-top: 40px !important; }\n\n.m-b-0 {\n  margin-bottom: 0 !important; }\n\n.m-b-5 {\n  margin-bottom: 5px !important; }\n\n.m-b-10 {\n  margin-bottom: 10px !important; }\n\n.m-b-15 {\n  margin-bottom: 15px !important; }\n\n.m-b-20 {\n  margin-bottom: 20px !important; }\n\n.m-b-30 {\n  margin-bottom: 30px !important; }\n\n.w-xs {\n  min-width: 80px; }\n\n.w-sm {\n  min-width: 95px; }\n\n.w-md {\n  min-width: 110px; }\n\n.w-lg {\n  min-width: 140px; }\n\n.m-h-40 {\n  min-height: 40px; }\n\n.m-h-50 {\n  min-height: 50px; }\n\n.l-h-34 {\n  line-height: 34px; }\n\n.font-normal {\n  font-weight: normal; }\n\n.font-light {\n  font-weight: 300; }\n\n.font-13 {\n  font-size: 13px !important; }\n\n.font-16 {\n  font-size: 16px !important; }\n\n.font-18 {\n  font-size: 18px !important; }\n\n.wrapper-md {\n  padding: 20px; }\n\n.pull-in {\n  margin-left: -15px;\n  margin-right: -15px; }\n\n.pull-in-card {\n  margin-left: -20px !important;\n  margin-right: -20px !important; }\n\n.b-0 {\n  border: none !important; }\n\n.vertical-middle {\n  vertical-align: middle; }\n\n.b-r-0 {\n  border-radius: 0 !important; }\n\n.bx-shadow {\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }\n\n.mx-box {\n  max-height: 380px;\n  min-height: 380px; }\n\n.thumb-sm {\n  height: 32px;\n  width: 32px; }\n\n.thumb-md {\n  height: 48px;\n  width: 48px; }\n\n.thumb-lg {\n  height: 88px;\n  width: 88px; }\n\n/* =============\n   Extras\n============= */\n/* Table type box */\n.table-box {\n  display: table;\n  height: 100%;\n  width: 100%; }\n  .table-box .table-detail {\n    display: table-cell;\n    vertical-align: middle; }\n\n/* Card Box */\n.card-box {\n  padding: 20px;\n  -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-bottom: 30px;\n  background-clip: padding-box;\n  background-color: #ffffff; }\n\n/* Grid page */\n.grid-structure .grid-container {\n  background-color: #f4f8fb;\n  margin-bottom: 10px;\n  padding: 10px 20px; }\n\n/* Demo only */\n.icon-list-demo div {\n  cursor: pointer;\n  line-height: 45px;\n  white-space: nowrap;\n  color: #75798B; }\n  .icon-list-demo div:hover {\n    color: #ffffff; }\n  .icon-list-demo div p {\n    margin-bottom: 0;\n    line-height: inherit; }\n.icon-list-demo i {\n  -webkit-transition: all 0.2s;\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  text-align: center;\n  transition: all 0.2s;\n  vertical-align: middle;\n  width: 40px; }\n.icon-list-demo .col-md-4 {\n  border-radius: 3px; }\n  .icon-list-demo .col-md-4:hover {\n    background-color: #62a3ff; }\n    .icon-list-demo .col-md-4:hover i {\n      -o-transform: scale(2);\n      -webkit-transform: scale(2);\n      -moz-transform: scale(2);\n      transform: scale(2); }\n\n.button-list {\n  margin-left: -8px;\n  margin-bottom: -12px; }\n  .button-list .btn {\n    margin-bottom: 12px;\n    margin-left: 8px; }\n\n/* Switchery demo */\n.switchery-demo .switchery {\n  margin-bottom: 10px; }\n\n/* =============\n   Bootstrap-custom\n============= */\n.container {\n  width: auto; }\n\n.container-alt {\n  margin-left: auto;\n  margin-right: auto; }\n\n.breadcrumb {\n  background-color: transparent;\n  margin-bottom: 15px;\n  padding-top: 10px;\n  padding-left: 0; }\n  .breadcrumb a {\n    color: #98a6ad; }\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"\\f105\" !important;\n  font-family: FontAwesome !important; }\n\n/* Dropdown */\n.dropdown-menu {\n  padding: 4px 0;\n  display: block;\n  visibility: hidden;\n  opacity: 0;\n  font-size: 14px;\n  transition: all 300ms ease;\n  -moz-transition: all 300ms ease;\n  -webkit-transition: all 300ms ease;\n  -o-transition: all 300ms ease;\n  margin-top: 20px !important;\n  border: none;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); }\n\n.show > .dropdown-menu {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important; }\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #36404a;\n  text-decoration: none;\n  background-color: #eeeeee; }\n\n.dropdown-item {\n  padding: 6px 1.5rem; }\n\n.dropdown-lg {\n  width: 260px; }\n\n.arrow-none:after {\n  border: none;\n  margin: 0;\n  display: none; }\n\n/* Close Icon */\n.close {\n  opacity: .6; }\n\n/* Background colors */\n.bg-custom {\n  background-color: #62a3ff !important; }\n\n.bg-primary {\n  background-color: #4285f4 !important; }\n\n.bg-success {\n  background-color: #2bbbad !important; }\n\n.bg-info {\n  background-color: #33b5e5 !important; }\n\n.bg-warning {\n  background-color: #ff8800 !important; }\n\n.bg-danger {\n  background-color: #ef4554 !important; }\n\n.bg-muted {\n  background-color: #f4f8fb !important; }\n\n.bg-inverse {\n  background-color: #4c5667 !important; }\n\n.bg-purple {\n  background-color: #7266ba !important; }\n\n.bg-pink {\n  background-color: #fb6d9d !important; }\n\n.bg-white {\n  background-color: #ffffff !important; }\n\n.bg-lightdark {\n  background-color: #f4f8fb !important; }\n\n/* Text colors */\n.text-custom {\n  color: #62a3ff !important; }\n\n.text-white {\n  color: #ffffff !important; }\n\n.text-danger {\n  color: #ef4554 !important; }\n\n.text-muted {\n  color: #98a6ad !important; }\n\n.text-primary {\n  color: #4285f4 !important; }\n\n.text-warning {\n  color: #ff8800 !important; }\n\n.text-success {\n  color: #2bbbad !important; }\n\n.text-info {\n  color: #33b5e5 !important; }\n\n.text-inverse {\n  color: #4c5667 !important; }\n\n.text-pink {\n  color: #fb6d9d !important; }\n\n.text-purple {\n  color: #7266ba !important; }\n\n.text-dark {\n  color: #797979 !important; }\n\n/* Labels */\n.label {\n  display: inline;\n  padding: 0.3em .6em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em; }\n\n.label:empty {\n  display: none; }\n\n.label-white {\n  background-color: rgba(255, 255, 255, 0.7);\n  color: #36404a !important; }\n\n.label-default {\n  background-color: #62a3ff; }\n\n.label-primary {\n  background-color: #4285f4; }\n\n.label-success {\n  background-color: #2bbbad; }\n\n.label-info {\n  background-color: #33b5e5; }\n\n.label-warning {\n  background-color: #ff8800; }\n\n.label-danger {\n  background-color: #ef4554; }\n\n.label-purple {\n  background-color: #7266ba; }\n\n.label-pink {\n  background-color: #fb6d9d; }\n\n.label-inverse {\n  background-color: #4c5667; }\n\n.label-muted {\n  background-color: #98a6ad; }\n\n/* Badge */\n.badge {\n  text-transform: uppercase;\n  padding: 5px 5px 3px 5px;\n  margin-top: 1px;\n  display: inline-block;\n  min-width: 10px;\n  font-weight: 700;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  border-radius: 10px;\n  background-color: #62a3ff; }\n\n.badge-xs {\n  font-size: 9px; }\n\n.badge-xs, .badge-sm {\n  -webkit-transform: translate(0, -2px);\n  -ms-transform: translate(0, -2px);\n  -o-transform: translate(0, -2px);\n  transform: translate(0, -2px); }\n\n.badge-white {\n  background-color: rgba(255, 255, 255, 0.7);\n  color: #36404a !important; }\n\n.badge-primary {\n  background-color: #4285f4; }\n\n.badge-success {\n  background-color: #2bbbad; }\n\n.badge-info {\n  background-color: #33b5e5; }\n\n.badge-warning {\n  background-color: #ff8800; }\n\n.badge-danger {\n  background-color: #ef4554; }\n\n.badge-purple {\n  background-color: #7266ba; }\n\n.badge-pink {\n  background-color: #fb6d9d; }\n\n.badge-inverse {\n  background-color: #4c5667; }\n\n/* List group */\n.list-group-item {\n  border: 1px solid #ebeff2; }\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n  background-color: #62a3ff;\n  border-color: #62a3ff; }\n\n/* Dropcap */\n.dropcap {\n  font-size: 3.1em; }\n\n.dropcap, .dropcap-circle, .dropcap-square {\n  display: block;\n  float: left;\n  font-weight: 400;\n  line-height: 36px;\n  margin-right: 6px;\n  text-shadow: none; }\n\n/* Tooltips */\n.tooltip-inner {\n  border-radius: 1px;\n  padding: 6px 10px; }\n\n.jqstooltip {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  width: auto !important;\n  height: auto !important; }\n\n/* Popover */\n.popover {\n  font-family: inherit;\n  border-radius: 3px; }\n  .popover .popover-title {\n    background-color: transparent;\n    color: #62a3ff;\n    font-weight: 600;\n    margin: 0; }\n\n/* Code */\ncode {\n  color: #4285f4;\n  background-color: #f4f8fb;\n  border-radius: 4px; }\n\n/* Pre */\npre {\n  background-color: #f4f8fb;\n  border: 1px solid #D4D8DA; }\n\n/* Media */\n.media {\n  margin-bottom: 20px; }\n  .media .media-heading {\n    font-weight: 600;\n    font-size: 16px; }\n\n.media:last-of-type {\n  margin-bottom: 0; }\n\n.badge, .btn, .label, .nav-user img, .contacts-list .avatar img, .morris-hover.morris-default-style,\n.conversation-list .chat-avatar img, .alert {\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }\n\n/* Pagination/ Pager */\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px; }\n\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px; }\n\n.pagination > li > a,\n.pagination > li > span {\n  color: #36404a; }\n\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #eeeeee; }\n\n.pagination-split li {\n  margin-left: 5px;\n  display: inline-block;\n  float: left; }\n\n.pagination-split li:first-child {\n  margin-left: 0; }\n\n.pagination-split li a {\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px; }\n\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus,\n.page-item.active .page-link {\n  background-color: #62a3ff;\n  border-color: #62a3ff; }\n\n.pager li > a, .pager li > span {\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  color: #36404a; }\n\n/* Form components */\n.form-group-custom {\n  position: relative;\n  margin-bottom: 30px; }\n\n.form-group-custom textarea {\n  resize: none; }\n\n.form-group-custom select {\n  width: 100%;\n  padding: 7px 12px 7px 0;\n  background: none;\n  border: none;\n  line-height: 1.6;\n  box-shadow: none; }\n\n.form-group-custom .control-label {\n  position: absolute;\n  top: 0.25rem;\n  pointer-events: none;\n  padding-left: 0.125rem;\n  z-index: 1;\n  color: #98a6ad;\n  font-weight: normal;\n  -webkit-transition: all 0.28s ease;\n  transition: all 0.28s ease; }\n\n.form-group-custom .bar {\n  position: relative;\n  border-bottom: 0.0625rem solid #999;\n  display: block; }\n\n.form-group-custom .bar::before {\n  content: '';\n  height: 0.125rem;\n  width: 0;\n  left: 50%;\n  bottom: -0.0625rem;\n  position: absolute;\n  background: #62a3ff;\n  -webkit-transition: left 0.28s ease, width 0.28s ease;\n  transition: left 0.28s ease, width 0.28s ease;\n  z-index: 2; }\n\n.form-group-custom input,\n.form-group-custom textarea {\n  display: block;\n  background: none;\n  padding: 7px 12px;\n  border: none;\n  width: 100%;\n  color: transparent;\n  -webkit-transition: all 0.28s ease;\n  transition: all 0.28s ease;\n  box-shadow: none; }\n\n.form-group-custom input[type=\"file\"] {\n  line-height: 1; }\n\n.form-group-custom input[type=\"file\"] ~ .bar {\n  display: none; }\n\n.form-group-custom select,\n.form-group-custom input:focus,\n.form-group-custom input:valid,\n.form-group-custom input.form-file,\n.form-group-custom input.has-value,\n.form-group-custom textarea:focus,\n.form-group-custom textarea:valid,\n.form-group-custom textarea.form-file,\n.form-group-custom textarea.has-value {\n  color: #333; }\n\n.form-group-custom select ~ .control-label,\n.form-group-custom input:focus ~ .control-label,\n.form-group-custom input:valid ~ .control-label,\n.form-group-custom input.form-file ~ .control-label,\n.form-group-custom input.has-value ~ .control-label,\n.form-group-custom textarea:focus ~ .control-label,\n.form-group-custom textarea:valid ~ .control-label,\n.form-group-custom textarea.form-file ~ .control-label,\n.form-group-custom textarea.has-value ~ .control-label {\n  font-size: 0.8rem;\n  color: gray;\n  top: -1rem;\n  left: 0; }\n\n.form-group-custom select:focus,\n.form-group-custom input:focus,\n.form-group-custom textarea:focus {\n  outline: none; }\n\n.form-group-custom select:focus ~ .control-label,\n.form-group-custom input:focus ~ .control-label,\n.form-group-custom textarea:focus ~ .control-label {\n  color: #62a3ff; }\n\n.form-group-custom select:focus ~ .bar::before,\n.form-group-custom input:focus ~ .bar::before,\n.form-group-custom textarea:focus ~ .bar::before {\n  width: 100%;\n  left: 0; }\n\n.form-control {\n  font-family: inherit;\n  background-color: #ffffff;\n  border: 1px solid #E3E3E3;\n  border-radius: 4px;\n  color: #565656;\n  padding: 7px 12px;\n  height: 38px;\n  max-width: 100%;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: all 300ms linear;\n  -moz-transition: all 300ms linear;\n  -o-transition: all 300ms linear;\n  -ms-transition: all 300ms linear;\n  transition: all 300ms linear; }\n  .form-control:focus {\n    background-color: #ffffff;\n    border: 1px solid #AAAAAA;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n    outline: 0 !important;\n    color: #333333; }\n\ntextarea.form-control {\n  min-height: 90px; }\n\nselect[multiple] {\n  height: auto; }\n\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.form-horizontal .form-group {\n  margin-left: -10px;\n  margin-right: -10px; }\n\n.form-control-feedback {\n  line-height: 38px !important; }\n\n.input-group-btn .btn {\n  padding: 8px 12px; }\n.input-group-btn .btn-sm {\n  padding: 5px 10px; }\n.input-group-btn .btn-lg {\n  padding: 10px 17px; }\n\n.has-success .form-control {\n  border-color: #2bbbad;\n  box-shadow: none !important; }\n\n.has-warning .form-control {\n  border-color: #ff8800;\n  box-shadow: none !important; }\n\n.has-error .form-control {\n  border-color: #ef4554;\n  box-shadow: none !important; }\n\n.input-group-addon {\n  border-radius: 2px;\n  border: 1px solid #eeeeee; }\n\n/* Tabs-Accordions */\n.tabs {\n  background-color: #ffffff;\n  margin: 0 auto;\n  padding: 0;\n  position: relative;\n  white-space: nowrap;\n  width: 100%; }\n  .tabs li.tab {\n    background-color: #ffffff;\n    display: block;\n    float: left;\n    margin: 0;\n    text-align: center; }\n    .tabs li.tab a {\n      -moz-transition: color 0.28s ease;\n      -ms-transition: color 0.28s ease;\n      -o-transition: color 0.28s ease;\n      -webkit-transition: color 0.28s ease;\n      color: #ee6e73;\n      display: block;\n      height: 100%;\n      text-decoration: none;\n      transition: color 0.28s ease;\n      width: 100%; }\n    .tabs li.tab a.active {\n      color: #62a3ff !important; }\n  .tabs .indicator {\n    background-color: #62a3ff;\n    bottom: 0;\n    height: 2px;\n    position: absolute;\n    will-change: left, right; }\n\n.tabs-top .indicator {\n  top: 0; }\n\n.nav-pills li a {\n  line-height: 36px !important; }\n.nav-pills li.active a {\n  background-color: #62a3ff !important; }\n  .nav-pills li.active a:hover {\n    background-color: #62a3ff !important; }\n  .nav-pills li.active a:focus {\n    background-color: #62a3ff !important; }\n\n.nav.nav-tabs + .tab-content {\n  background: #ffffff;\n  margin-bottom: 30px;\n  padding: 30px; }\n\n.tabs-vertical-env {\n  margin-bottom: 30px; }\n  .tabs-vertical-env .tab-content {\n    background: #ffffff;\n    display: table-cell;\n    margin-bottom: 30px;\n    padding: 30px;\n    vertical-align: top; }\n  .tabs-vertical-env .nav.tabs-vertical {\n    display: table-cell;\n    min-width: 120px;\n    vertical-align: top;\n    width: 150px; }\n    .tabs-vertical-env .nav.tabs-vertical li > a {\n      color: #333333;\n      text-align: center;\n      white-space: nowrap; }\n    .tabs-vertical-env .nav.tabs-vertical li > a.active {\n      background-color: #ffffff;\n      border: 0; }\n\n.nav.nav-tabs > li.active > a {\n  background-color: #ffffff;\n  border: 0; }\n\n.nav-pills > .active > a > .badge {\n  color: #62a3ff; }\n\n.nav.nav-tabs > li > a, .nav.tabs-vertical > li > a {\n  background-color: transparent;\n  border-radius: 0;\n  border: none;\n  color: #505461 !important;\n  cursor: pointer;\n  line-height: 50px;\n  padding-left: 20px;\n  padding-right: 20px;\n  letter-spacing: 0.03em;\n  font-weight: 500; }\n  .nav.nav-tabs > li > a:hover, .nav.tabs-vertical > li > a:hover {\n    color: #62a3ff !important; }\n\n.tab-content {\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  color: #777777; }\n\n.nav.nav-tabs > li:last-of-type a {\n  margin-right: 0; }\n\n.nav.nav-tabs {\n  border-bottom: 0;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.navtab-bg {\n  background-color: #ededed; }\n\n.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus,\n.tabs-vertical-env .nav.tabs-vertical li.active > a {\n  border: none; }\n\n.nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover, .tabs-vertical > li > a.active,\n.tabs-vertical > li > a.active:focus, .tabs-vertical > li > a.active:hover {\n  color: #62a3ff !important; }\n\n.tabs-vertical-env .tab-content {\n  margin-bottom: 0; }\n\n/* Alert */\n.alert .btn {\n  margin-top: 10px; }\n\n.alert-success {\n  background-color: #2bbbad;\n  border-color: #2bbbad;\n  color: #ffffff; }\n  .alert-success .alert-link {\n    color: #ffffff; }\n\n.alert-info {\n  background-color: #33b5e5;\n  border-color: #33b5e5;\n  color: #ffffff; }\n  .alert-info .alert-link {\n    color: #ffffff; }\n\n.alert-warning {\n  background-color: #ff8800;\n  border-color: #ff8800;\n  color: #ffffff; }\n  .alert-warning .alert-link {\n    color: #ffffff; }\n\n.alert-danger {\n  background-color: #ef4554;\n  border-color: #ef4554;\n  color: #ffffff; }\n  .alert-danger .alert-link {\n    color: #ffffff; }\n\n.notifyjs-metro-base {\n  box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15) !important; }\n\n/* Modals */\n.modal .modal-dialog .modal-content {\n  -moz-box-shadow: none;\n  border-color: transparent;\n  border-radius: 2px;\n  padding: 25px;\n  -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); }\n  .modal .modal-dialog .modal-content .modal-header {\n    border-bottom-width: 2px;\n    margin: 0;\n    padding: 0;\n    padding-bottom: 15px; }\n  .modal .modal-dialog .modal-content .modal-body {\n    padding: 20px 0; }\n  .modal .modal-dialog .modal-content .modal-footer {\n    padding: 0;\n    padding-top: 15px; }\n\n.modal-full {\n  width: 98%;\n  max-width: 100%; }\n\n.modal-content .nav.nav-tabs + .tab-content {\n  margin-bottom: 0; }\n\n/* Custom-modal */\n.modal-demo {\n  background-color: #ffffff;\n  width: 600px;\n  border-radius: 2px;\n  display: none;\n  -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); }\n  .modal-demo .close {\n    position: absolute;\n    top: 15px;\n    right: 25px;\n    color: #eeeeee; }\n\n.custom-modal-title {\n  padding: 15px 25px 15px 25px;\n  line-height: 22px;\n  font-size: 18px;\n  background-color: #36404a;\n  color: #ffffff;\n  text-align: left;\n  margin: 0; }\n\n.custom-modal-text {\n  padding: 20px; }\n\n.custombox-modal-flash .close, .custombox-modal-rotatedown .close {\n  top: 20px;\n  z-index: 9999; }\n\n/* =============\n   Carousel\n============= */\n.carousel-control {\n  width: 10%; }\n  .carousel-control span {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n    font-size: 30px; }\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block; }\n\n/* Owl */\n.slider-bg {\n  background-size: cover !important;\n  padding: 5.5% 4.5%; }\n\n/*===================================\n   Topbar,Left-sidebar,Right-sidebar\n  ===================================*/\n.topbar {\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 999;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }\n  .topbar .topbar-left {\n    float: left;\n    position: relative;\n    width: 240px;\n    z-index: 1;\n    background-color: #566676; }\n  .topbar .topbar-left-sm {\n    width: 180px; }\n  .topbar .topbar-left-sm + .navbar-custom {\n    margin-left: 180px; }\n\n.logo {\n  color: #ffffff !important;\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: .05em;\n  line-height: 70px;\n  text-transform: uppercase; }\n  .logo h1 {\n    height: 50px;\n    margin: 0 auto;\n    text-align: center; }\n  .logo .icon-c-logo {\n    display: none; }\n\n.navbar-custom {\n  background-color: #566676;\n  border-radius: 0;\n  margin-bottom: 0;\n  padding: 0 10px 0 0;\n  margin-left: 240px;\n  min-height: 70px; }\n  .navbar-custom .nav-link {\n    padding: 0;\n    line-height: 67px;\n    color: rgba(255, 255, 255, 0.6); }\n  .navbar-custom .dropdown-toggle:after {\n    content: initial; }\n  .navbar-custom .menu-left {\n    overflow: hidden; }\n\n.nav > li > a {\n  color: #ffffff !important;\n  line-height: 60px;\n  padding: 0 15px;\n  position: relative; }\n  .nav > li > a i {\n    font-size: 16px; }\n\n.profile img {\n  border: 2px solid #edf0f0;\n  height: 36px;\n  width: 36px; }\n\n/* Notification */\n.notification-list {\n  margin-left: 0 !important; }\n  .notification-list .noti-title {\n    margin-bottom: 0;\n    width: auto;\n    padding: 12px 20px; }\n    .notification-list .noti-title h5 {\n      margin: 0; }\n    .notification-list .noti-title .label {\n      float: right; }\n  .notification-list .noti-icon {\n    font-size: 18px;\n    padding: 0 12px;\n    vertical-align: middle;\n    color: rgba(255, 255, 255, 0.8); }\n  .notification-list .noti-icon-badge {\n    display: inline-block;\n    position: absolute;\n    top: 14px;\n    right: 8px; }\n  .notification-list .notify-item {\n    padding: 10px 20px; }\n    .notification-list .notify-item .notify-icon {\n      float: left;\n      height: 36px;\n      width: 36px;\n      line-height: 36px;\n      text-align: center;\n      margin-right: 10px;\n      border-radius: 50%;\n      color: #ffffff; }\n      .notification-list .notify-item .notify-icon img {\n        margin-top: 4px; }\n    .notification-list .notify-item .notify-details {\n      margin-bottom: 0;\n      overflow: hidden;\n      margin-left: 45px;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n      .notification-list .notify-item .notify-details b {\n        font-weight: 500; }\n      .notification-list .notify-item .notify-details small {\n        display: block; }\n      .notification-list .notify-item .notify-details span {\n        display: block;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        font-size: 13px; }\n  .notification-list .notify-all {\n    border-radius: 0 0 0.25rem 0.25rem;\n    margin: 0 0 -5px 0;\n    background-color: #eeeeee; }\n  .notification-list .profile-dropdown .notify-item {\n    padding: 4px 20px; }\n\n.profile-dropdown {\n  width: 170px; }\n  .profile-dropdown i {\n    font-size: 17px;\n    vertical-align: middle;\n    margin-right: 5px; }\n  .profile-dropdown span {\n    vertical-align: middle; }\n\n.nav-user {\n  padding: 0 12px !important; }\n  .nav-user img {\n    height: 36px;\n    width: 36px; }\n\n.navbar-nav {\n  margin: 0; }\n\n.side-menu {\n  bottom: 0;\n  top: 0;\n  width: 240px;\n  z-index: 2; }\n\n.side-menu.left {\n  background: #ffffff;\n  -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.15);\n  box-shadow: 1px 0 2px rgba(0, 0, 0, 0.15);\n  position: absolute;\n  top: 70px; }\n\nbody.fixed-left .side-menu.left {\n  bottom: 50px;\n  height: 100%;\n  margin-bottom: -70px;\n  margin-top: 0;\n  padding-bottom: 70px;\n  position: fixed; }\n\n.content-page {\n  margin-left: 240px;\n  overflow: hidden; }\n\n.content-page > .content {\n  margin-bottom: 60px;\n  margin-top: 70px;\n  padding: 20px 10px 0 10px; }\n\n.button-menu-mobile {\n  border: none;\n  color: #ffffff;\n  display: inline-block;\n  height: 70px;\n  width: 60px;\n  margin-right: 15px;\n  background-color: rgba(255, 255, 255, 0.1);\n  font-size: 16px; }\n\n.sidebar-inner {\n  height: 100%; }\n\n#sidebar-menu, #sidebar-menu ul, #sidebar-menu li, #sidebar-menu a {\n  border: 0;\n  font-weight: normal;\n  line-height: 1;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  text-decoration: none; }\n\n#sidebar-menu {\n  padding-bottom: 30px;\n  padding-top: 30px;\n  width: 100%; }\n  #sidebar-menu .nav > li > a .badge {\n    position: absolute;\n    right: 10px;\n    top: 12px; }\n  #sidebar-menu a {\n    line-height: 1.3; }\n  #sidebar-menu ul ul {\n    display: none;\n    background-color: #f7f7f7; }\n    #sidebar-menu ul ul li {\n      border-top: 0; }\n    #sidebar-menu ul ul li.active a {\n      color: #36404a; }\n    #sidebar-menu ul ul a {\n      color: #6c8094;\n      display: block;\n      padding: 10px 20px 10px 62px; }\n      #sidebar-menu ul ul a:hover {\n        color: #36404a; }\n      #sidebar-menu ul ul a i {\n        margin-right: 5px; }\n    #sidebar-menu ul ul ul a {\n      padding-left: 80px; }\n  #sidebar-menu .label {\n    margin-top: 2px; }\n  #sidebar-menu .subdrop {\n    background: #f2f2f2 !important; }\n\n#sidebar-menu > ul > li > a {\n  color: #566676;\n  display: block;\n  padding: 15px 20px;\n  font-size: 15px; }\n  #sidebar-menu > ul > li > a:hover {\n    color: #36404a;\n    text-decoration: none; }\n\n#sidebar-menu > ul > li > a > span {\n  vertical-align: middle; }\n\n#sidebar-menu ul li .menu-arrow {\n  -webkit-transition: -webkit-transform .15s;\n  -o-transition: -o-transform .15s;\n  transition: transform .15s;\n  position: absolute;\n  right: 20px;\n  display: inline-block;\n  font-family: 'Material Design Iconic Font';\n  text-rendering: auto;\n  line-height: 18px;\n  font-size: 16px;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  color: #98a6ad; }\n  #sidebar-menu ul li .menu-arrow:before {\n    content: \"\\f0fb\"; }\n#sidebar-menu ul li a.subdrop .menu-arrow:before {\n  content: \"\\f111\"; }\n#sidebar-menu ul li a i {\n  display: inline-block;\n  font-size: 16px;\n  line-height: 17px;\n  margin-left: 3px;\n  margin-right: 15px;\n  text-align: center;\n  vertical-align: middle;\n  width: 20px; }\n#sidebar-menu ul li a i.md {\n  font-size: 18px; }\n\n#sidebar-menu > ul > li > a > i.i-right {\n  float: right;\n  margin: 3px 0 0 0; }\n\n#sidebar-menu > ul > li > a.active {\n  background: #f2f2f2 !important; }\n\n.menu-title {\n  padding: 12px 20px !important;\n  letter-spacing: .035em;\n  pointer-events: none;\n  cursor: default;\n  font-size: 13px; }\n\n/* Small Menu */\n.side-menu-sm {\n  width: 180px;\n  text-align: center; }\n  .side-menu-sm #sidebar-menu > ul > li > a > i {\n    display: block;\n    font-size: 18px;\n    line-height: 24px;\n    width: 100%;\n    margin: 0; }\n  .side-menu-sm #sidebar-menu ul ul a {\n    padding: 10px 20px 10px 20px; }\n  .side-menu-sm .badge, .side-menu-sm .menu-arrow {\n    display: none !important; }\n\n.side-menu-sm + .content-page .footer {\n  left: 180px; }\n\n#wrapper.enlarged .side-menu-sm {\n  text-align: left; }\n\n#wrapper.enlarged .side-menu-sm #sidebar-menu ul li a i {\n  display: inline-block;\n  font-size: 18px;\n  line-height: 17px;\n  margin-left: 3px;\n  margin-right: 15px;\n  vertical-align: middle;\n  width: 20px; }\n\n.side-menu-sm + .content-page {\n  margin-left: 180px; }\n\n/* Header */\n.page-header-box {\n  background: #ffffff;\n  border-bottom: 1px solid #dee2e8;\n  margin: -20px -25px 30px -25px;\n  padding: 5px 20px 0 20px; }\n\n#wrapper.enlarged .navbar-custom {\n  margin-left: 70px; }\n#wrapper.enlarged .menu-title, #wrapper.enlarged .menu-arrow {\n  display: none !important; }\n#wrapper.enlarged #sidebar-menu ul ul {\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);\n  z-index: 9999;\n  background-color: #ffffff; }\n#wrapper.enlarged .left.side-menu {\n  width: 70px;\n  z-index: 5; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu > ul > li > a {\n    padding: 15px 20px;\n    min-height: 52px; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu > ul > li > a:hover {\n      background: #f7f7f7 !important; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu > ul > li > a:active {\n      background: #f7f7f7 !important; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu > ul > li > a:focus {\n      background: #f7f7f7 !important; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu > ul > li > a i {\n      margin-right: 20px !important;\n      font-size: 20px; }\n  #wrapper.enlarged .left.side-menu .label {\n    position: absolute;\n    top: 5px;\n    left: 35px;\n    text-indent: 0;\n    display: block !important;\n    padding: .2em .6em .3em !important; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul > li {\n    position: relative;\n    white-space: nowrap; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu ul > li:hover > a {\n      position: relative;\n      width: 260px;\n      background: #f7f7f7;\n      color: #36404a;\n      border-color: #36404a; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu ul > li:hover > ul {\n      display: block;\n      left: 70px;\n      position: absolute;\n      width: 190px; }\n      #wrapper.enlarged .left.side-menu #sidebar-menu ul > li:hover > ul a {\n        background: #ffffff;\n        box-shadow: none;\n        padding-left: 15px;\n        position: relative;\n        width: 186px;\n        z-index: 6; }\n        #wrapper.enlarged .left.side-menu #sidebar-menu ul > li:hover > ul a:hover {\n          color: #36404a; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu ul > li:hover a span {\n      display: inline; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu li .show-menu + ul {\n    display: block;\n    left: 70px;\n    position: absolute;\n    width: 190px; }\n    #wrapper.enlarged .left.side-menu #sidebar-menu li .show-menu + ul a {\n      background: #ffffff;\n      box-shadow: none;\n      padding-left: 15px;\n      position: relative;\n      width: 186px;\n      z-index: 6; }\n      #wrapper.enlarged .left.side-menu #sidebar-menu li .show-menu + ul a:hover {\n        color: #62a3ff; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu a.subdrop {\n    color: #62a3ff !important; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul > li > ul {\n    display: none; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul ul li:hover > ul {\n    display: block;\n    left: 190px;\n    margin-top: -36px;\n    position: absolute;\n    width: 190px; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul ul li > a span.pull-right {\n    -ms-transform: rotate(270deg);\n    -webkit-transform: rotate(270deg);\n    position: absolute;\n    right: 20px;\n    top: 12px;\n    transform: rotate(270deg); }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul ul li.active a {\n    color: #36404a; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul > li > a span {\n    display: none;\n    padding-left: 10px; }\n  #wrapper.enlarged .left.side-menu #sidebar-menu ul > li > a span.badge {\n    padding-left: 5px; }\n  #wrapper.enlarged .left.side-menu .user-details {\n    display: none; }\n#wrapper.enlarged .content-page {\n  margin-left: 70px; }\n#wrapper.enlarged .footer {\n  left: 70px; }\n#wrapper.enlarged .topbar .topbar-left {\n  width: 70px !important; }\n  #wrapper.enlarged .topbar .topbar-left .logo span {\n    display: none;\n    opacity: 0; }\n  #wrapper.enlarged .topbar .topbar-left .logo .icon-c-logo {\n    display: block;\n    line-height: 70px; }\n#wrapper.enlarged #sidebar-menu > ul > li:hover > a.open :after {\n  display: none; }\n#wrapper.enlarged #sidebar-menu > ul > li:hover > a.active :after {\n  display: none; }\n#wrapper.enlarged .tips-box {\n  display: none; }\n\n.tips-box .portlet {\n  -webkit-box-shadow: 0 0 7px 1px rgba(0, 0, 0, 0.05);\n  -moz-box-shadow: 0 0 7px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 0 7px 1px rgba(0, 0, 0, 0.05); }\n\n.user-details {\n  padding: 20px;\n  padding-bottom: 0;\n  position: relative; }\n  .user-details img {\n    position: relative;\n    z-index: 9999; }\n  .user-details .user-info {\n    color: #444444;\n    margin-left: 60px;\n    position: relative;\n    z-index: 99999; }\n    .user-details .user-info a.dropdown-toggle {\n      color: #797979;\n      display: block;\n      font-size: 16px;\n      font-weight: 600;\n      padding-top: 5px; }\n\n#wrapper.right-bar-enabled .right-bar {\n  right: 0; }\n#wrapper.right-bar-enabled .left-layout {\n  left: 0; }\n\n/* Right sidebar */\n.side-bar.right-bar {\n  float: right !important;\n  right: -266px;\n  top: 70px;\n  font-size: 0.9rem; }\n\n.side-bar {\n  -moz-transition: all 200ms ease-out;\n  -webkit-transition: all 200ms ease-out;\n  background-color: #ffffff;\n  box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);\n  display: block;\n  float: left;\n  height: 100%;\n  overflow-y: auto;\n  position: fixed;\n  transition: all 200ms ease-out;\n  width: 240px; }\n\n.right-bar {\n  background: #ffffff !important;\n  z-index: 99 !important; }\n  .right-bar h4 {\n    border-bottom: 1px solid #eeeeee;\n    padding-bottom: 10px;\n    font-size: 1.2rem; }\n\n.contact-list {\n  max-height: 600px; }\n  .contact-list .list-group-item {\n    border: none; }\n    .contact-list .list-group-item:hover {\n      background: #f7f7f7; }\n    .contact-list .list-group-item a {\n      display: block;\n      width: 100%; }\n  .contact-list i.offline {\n    color: #ef4554 !important; }\n  .contact-list i.away {\n    color: #ff8800; }\n\n.contacts-list .avatar {\n  display: inline-block;\n  float: left;\n  margin-right: 5px;\n  width: 30px; }\n  .contacts-list .avatar img {\n    border-radius: 50%;\n    width: 100%; }\n.contacts-list .list-group-item span.name {\n  color: #707780;\n  display: inline-block;\n  float: left;\n  overflow: hidden;\n  padding-left: 5px;\n  padding-top: 3px;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 130px; }\n.contacts-list i {\n  color: #7a8c9a;\n  float: right;\n  font-size: 9px;\n  line-height: 30px; }\n.contacts-list i.online {\n  color: #2bbbad; }\n.contacts-list i.offline {\n  color: #ef4554 !important; }\n.contacts-list i.away {\n  color: #ff8800; }\n\n/* Seach */\n.app-search {\n  position: relative;\n  padding-top: 15px; }\n  .app-search a {\n    position: absolute;\n    top: 18px;\n    left: 52%;\n    height: 40px;\n    line-height: 38px;\n    width: 40px;\n    text-align: center;\n    color: rgba(255, 255, 255, 0.5);\n    display: none; }\n    .app-search a:hover {\n      color: #ffffff; }\n  .app-search .form-control,\n  .app-search .form-control:focus {\n    border: none;\n    font-size: 13px;\n    height: 40px;\n    color: #ffffff;\n    padding-left: 20px;\n    padding-right: 20px;\n    background: rgba(255, 255, 255, 0.05);\n    box-shadow: none;\n    border-radius: 3px;\n    width: 50%; }\n\n.app-search input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5); }\n.app-search input:-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5); }\n.app-search input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5); }\n.app-search input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5); }\n\n/* =============\n   Animation\n============= */\n/* Bounce 1 */\n@-webkit-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.5); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale(1.2); }\n  100% {\n    -webkit-transform: scale(1); } }\n@-moz-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -moz-transform: scale(0.5); }\n  60% {\n    opacity: 1;\n    -moz-transform: scale(1.2); }\n  100% {\n    -moz-transform: scale(1); } }\n@-o-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -o-transform: scale(0.5); }\n  60% {\n    opacity: 1;\n    -o-transform: scale(1.2); }\n  100% {\n    -o-transform: scale(1); } }\n/* Bounce 2 */\n@-webkit-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(20px); }\n  100% {\n    -webkit-transform: translateX(0); } }\n@-moz-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(-100px); }\n  60% {\n    opacity: 1;\n    -moz-transform: translateX(20px); }\n  100% {\n    -moz-transform: translateX(0); } }\n@-o-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -o-transform: translateX(-100px); }\n  60% {\n    opacity: 1;\n    -o-transform: translateX(20px); }\n  100% {\n    opacity: 1;\n    -o-transform: translateX(0); } }\n/* Dropdown */\n@-webkit-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0); }\n  100% {\n    -webkit-transform: scale(1); } }\n@-moz-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -moz-transform: scale(0); }\n  100% {\n    -moz-transform: scale(1); } }\n@-o-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -o-transform: scale(0); }\n  100% {\n    -o-transform: scale(1); } }\n/* Progressbar Animated */\n@-webkit-keyframes animationProgress {\n  from {\n    width: 0; } }\n@keyframes animationProgress {\n  from {\n    width: 0; } }\n/* Portlets loader */\n@-webkit-keyframes loaderAnimate {\n  0% {\n    -webkit-transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(220deg); } }\n@-moz-keyframes loaderAnimate {\n  0% {\n    -moz-transform: rotate(0deg); }\n  100% {\n    -moz-transform: rotate(220deg); } }\n@-o-keyframes loaderAnimate {\n  0% {\n    -o-transform: rotate(0deg); }\n  100% {\n    -o-transform: rotate(220deg); } }\n@keyframes loaderAnimate {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(220deg); } }\n@-webkit-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(-140deg); }\n  50% {\n    box-shadow: inset #555 0 0 0 2px; }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(140deg); } }\n@-moz-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -moz-transform: rotate(-140deg); }\n  50% {\n    box-shadow: inset #555 0 0 0 2px; }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -moz-transform: rotate(140deg); } }\n@-o-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -o-transform: rotate(-140deg); }\n  50% {\n    box-shadow: inset #555 0 0 0 2px; }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -o-transform: rotate(140deg); } }\n@keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(-140deg);\n    -moz-transform: rotate(-140deg);\n    -ms-transform: rotate(-140deg);\n    transform: rotate(-140deg); }\n  50% {\n    box-shadow: inset #555 0 0 0 2px; }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(140deg);\n    -moz-transform: rotate(140deg);\n    -ms-transform: rotate(140deg);\n    transform: rotate(140deg); } }\n@keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #999 0 0 0 17px;\n    transform: rotate(-140deg); }\n  50% {\n    box-shadow: inset #999 0 0 0 2px; }\n  100% {\n    box-shadow: inset #999 0 0 0 17px;\n    transform: rotate(140deg); } }\n/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n.waves-effect {\n  position: relative;\n  cursor: pointer;\n  display: inline-block;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: transparent;\n  vertical-align: middle;\n  z-index: 1;\n  will-change: opacity, transform;\n  -webkit-transition: all 0.3s ease-out;\n  -moz-transition: all 0.3s ease-out;\n  -o-transition: all 0.3s ease-out;\n  -ms-transition: all 0.3s ease-out;\n  transition: all 0.3s ease-out; }\n\n.waves-effect .waves-ripple {\n  position: absolute;\n  border-radius: 50%;\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  opacity: 0;\n  background: rgba(0, 0, 0, 0.2);\n  -webkit-transition: all 0.7s ease-out;\n  -moz-transition: all 0.7s ease-out;\n  -o-transition: all 0.7s ease-out;\n  -ms-transition: all 0.7s ease-out;\n  transition: all 0.7s ease-out;\n  -webkit-transition-property: -webkit-transform, opacity;\n  -moz-transition-property: -moz-transform, opacity;\n  -o-transition-property: -o-transform, opacity;\n  transition-property: transform, opacity;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  pointer-events: none; }\n\n.waves-effect.waves-light .waves-ripple {\n  background-color: rgba(255, 255, 255, 0.45); }\n\n.waves-effect.waves-red .waves-ripple {\n  background-color: rgba(244, 67, 54, 0.7); }\n\n.waves-effect.waves-yellow .waves-ripple {\n  background-color: rgba(255, 235, 59, 0.7); }\n\n.waves-effect.waves-orange .waves-ripple {\n  background-color: rgba(255, 152, 0, 0.7); }\n\n.waves-effect.waves-purple .waves-ripple {\n  background-color: rgba(156, 39, 176, 0.7); }\n\n.waves-effect.waves-green .waves-ripple {\n  background-color: rgba(76, 175, 80, 0.7); }\n\n.waves-effect.waves-teal .waves-ripple {\n  background-color: rgba(0, 150, 136, 0.7); }\n\n.waves-notransition {\n  -webkit-transition: none !important;\n  -moz-transition: none !important;\n  -o-transition: none !important;\n  -ms-transition: none !important;\n  transition: none !important; }\n\n.waves-circle {\n  -webkit-transform: translateZ(0);\n  -moz-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  -o-transform: translateZ(0);\n  transform: translateZ(0);\n  text-align: center;\n  width: 2.5em;\n  height: 2.5em;\n  line-height: 2.5em;\n  border-radius: 50%;\n  -webkit-mask-image: none; }\n\n.waves-input-wrapper {\n  border-radius: 0.2em;\n  vertical-align: bottom; }\n  .waves-input-wrapper .waves-button-input {\n    position: relative;\n    top: 0;\n    left: 0;\n    z-index: 1; }\n\n.waves-block {\n  display: block; }\n\n/* =============\n   Print css\n============= */\n@media print {\n  .logo, .breadcrumb, .page-title, .footer, .topbar, .btn-group.pull-right.m-t-15 {\n    display: none;\n    margin: 0px;\n    padding: 0px; }\n\n  .left, .right-bar {\n    display: none; }\n\n  .content, .card-box {\n    margin: 0px !important; }\n\n  .content-page {\n    margin-left: 0px;\n    margin-top: 0px; } }\n/* =============\n   Buttons\n============= */\n.btn {\n  border-radius: 2px;\n  outline: none !important;\n  font-family: \"Roboto\", sans-serif;\n  font-size: 15px; }\n  .btn:hover {\n    -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n    box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); }\n\n.btn-md {\n  padding: 8px 16px; }\n\n.btn-primary, .btn-success, .btn-default, .btn-info, .btn-warning, .btn-danger, .btn-inverse, .btn-purple, .btn-pink {\n  color: #ffffff !important; }\n\n.btn-default, .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open > .dropdown-toggle.btn-default {\n  background-color: #62a3ff !important;\n  border: 1px solid #62a3ff !important; }\n\n.btn-white, .btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .btn-white.focus, .btn-white:active, .btn-white:focus, .btn-white:hover, .open > .dropdown-toggle.btn-white {\n  border: 1px solid #eaeaea !important;\n  background-color: #ffffff;\n  color: #4c5667 !important; }\n  .btn-white:hover, .btn-white:hover:hover, .btn-white:focus:hover, .btn-white:active:hover, .btn-white.active:hover, .btn-white.focus:hover, .btn-white:active:hover, .btn-white:focus:hover, .btn-white:hover:hover, .open > .dropdown-toggle.btn-white:hover {\n    background-color: #f9f9f9; }\n  .btn-white:focus, .btn-white:hover:focus, .btn-white:focus:focus, .btn-white:active:focus, .btn-white.active:focus, .btn-white.focus:focus, .btn-white:active:focus, .btn-white:focus:focus, .btn-white:hover:focus, .open > .dropdown-toggle.btn-white:focus {\n    background-color: #f9f9f9; }\n  .btn-white:active, .btn-white:hover:active, .btn-white:focus:active, .btn-white:active:active, .btn-white.active:active, .btn-white.focus:active, .btn-white:active:active, .btn-white:focus:active, .btn-white:hover:active, .open > .dropdown-toggle.btn-white:active {\n    background-color: #f9f9f9; }\n\n.btn-primary, .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .btn-primary.focus, .btn-primary:active, .btn-primary:focus, .btn-primary:hover, .open > .dropdown-toggle.btn-primary {\n  background-color: #4285f4 !important;\n  border: 1px solid #4285f4 !important; }\n\n.btn-success, .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .btn-success.focus, .btn-success:active, .btn-success:focus, .btn-success:hover, .open > .dropdown-toggle.btn-success {\n  background-color: #2bbbad !important;\n  border: 1px solid #2bbbad !important; }\n\n.btn-info, .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .btn-info.focus, .btn-info:active, .btn-info:focus, .btn-info:hover, .open > .dropdown-toggle.btn-info {\n  background-color: #33b5e5 !important;\n  border: 1px solid #33b5e5 !important; }\n\n.btn-warning, .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .btn-warning.focus, .btn-warning:active, .btn-warning:focus, .btn-warning:hover, .open > .dropdown-toggle.btn-warning {\n  background-color: #ff8800 !important;\n  border: 1px solid #ff8800 !important; }\n\n.btn-danger, .btn-danger:active, .btn-danger:focus, .btn-danger:hover, .btn-danger.active, .btn-danger.focus, .btn-danger:active, .btn-danger:focus, .btn-danger:hover, .open > .dropdown-toggle.btn-danger {\n  background-color: #ef4554 !important;\n  border: 1px solid #ef4554 !important; }\n\n.btn-inverse, .btn-inverse:hover, .btn-inverse:focus, .btn-inverse:active, .btn-inverse.active, .btn-inverse.focus, .btn-inverse:active, .btn-inverse:focus, .btn-inverse:hover, .open > .dropdown-toggle.btn-inverse {\n  background-color: #4c5667 !important;\n  border: 1px solid #4c5667 !important;\n  color: #ffffff; }\n\n.btn-inverse.focus, .btn-inverse:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba(76, 86, 103, 0.5);\n  box-shadow: 0 0 0 2px rgba(76, 86, 103, 0.5); }\n\n.btn-purple, .btn-purple:hover, .btn-purple:focus, .btn-purple:active {\n  background-color: #7266ba !important;\n  border: 1px solid #7266ba !important;\n  color: #ffffff; }\n\n.btn-purple.focus, .btn-purple:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba(114, 102, 186, 0.5);\n  box-shadow: 0 0 0 2px rgba(114, 102, 186, 0.5); }\n\n.btn-pink, .btn-pink:hover, .btn-pink:focus, .btn-pink:active {\n  background-color: #fb6d9d !important;\n  border: 1px solid #fb6d9d !important;\n  color: #ffffff; }\n\n.btn-pink.focus, .btn-pink:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba(251, 109, 157, 0.5);\n  box-shadow: 0 0 0 2px rgba(251, 109, 157, 0.5); }\n\n.open > .dropdown-toggle.btn-primary.btn-custom,\n.open > .dropdown-toggle.btn-success.btn-custom,\n.open > .dropdown-toggle.btn-info.btn-custom,\n.open > .dropdown-toggle.btn-warning.btn-custom,\n.open > .dropdown-toggle.btn-danger.btn-custom,\n.open > .dropdown-toggle.btn-default.btn-custom {\n  border-width: 2px !important;\n  color: #ffffff !important; }\n\n.open > .dropdown-toggle.btn-white.btn-custom {\n  border-width: 2px !important; }\n\n.btn-custom.btn-default {\n  color: #62a3ff !important; }\n\n.btn-custom.btn-primary {\n  color: #4285f4 !important; }\n\n.btn-custom.btn-success {\n  color: #2bbbad !important; }\n\n.btn-custom.btn-info {\n  color: #33b5e5 !important; }\n\n.btn-custom.btn-warning {\n  color: #ff8800 !important; }\n\n.btn-custom.btn-danger {\n  color: #ef4554 !important; }\n\n.btn-custom.btn-inverse {\n  color: #4c5667 !important; }\n\n.btn-custom.btn-purple {\n  color: #7266ba !important; }\n\n.btn-custom.btn-white {\n  color: #4c5667 !important; }\n  .btn-custom.btn-white:hover, .btn-custom.btn-white:focus, .btn-custom.btn-white:active {\n    color: #4c5667 !important;\n    background-color: #f4f8fb !important; }\n\n.btn-custom.btn-pink {\n  color: #fb6d9d !important; }\n\n.btn-rounded {\n  border-radius: 2em !important;\n  padding: 6px 20px; }\n  .btn-rounded .btn-label {\n    padding: 7px 15px 7px 20px;\n    margin-left: -20px; }\n  .btn-rounded .btn-label-right {\n    margin-right: -20px;\n    margin-left: 12px; }\n\n.btn-custom {\n  -moz-border-radius: 2px;\n  -moz-transition: all 400ms ease-in-out;\n  -o-transition: all 400ms ease-in-out;\n  -webkit-border-radius: 2px;\n  -webkit-transition: all 400ms ease-in-out;\n  background-color: transparent !important;\n  border-radius: 3px;\n  transition: all 400ms ease-in-out;\n  background-clip: inherit; }\n  .btn-custom:hover {\n    color: #ffffff !important; }\n  .btn-custom:focus {\n    color: #ffffff !important; }\n\n.btn-label {\n  background: rgba(0, 0, 0, 0.05);\n  display: inline-block;\n  padding: 7px 15px;\n  border-radius: 3px 0 0 3px;\n  margin: -7px -13px;\n  margin-right: 12px; }\n\n.btn-label-right {\n  margin-left: 12px;\n  margin-right: -13px;\n  border-radius: 0px 3px 3px 0px; }\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: none; }\n\n/* File Upload */\n.fileupload {\n  overflow: hidden;\n  position: relative; }\n  .fileupload input.upload {\n    cursor: pointer;\n    filter: alpha(opacity=0);\n    font-size: 20px;\n    margin: 0;\n    opacity: 0;\n    padding: 0;\n    position: absolute;\n    right: 0;\n    top: 0; }\n\n/* Social Buttons */\n.btn-facebook {\n  color: #ffffff !important;\n  background-color: #3b5998 !important; }\n\n.btn-twitter {\n  color: #ffffff !important;\n  background-color: #00aced !important; }\n\n.btn-linkedin {\n  color: #ffffff !important;\n  background-color: #007bb6 !important; }\n\n.btn-dribbble {\n  color: #ffffff !important;\n  background-color: #ea4c89 !important; }\n\n.btn-googleplus {\n  color: #ffffff !important;\n  background-color: #dd4b39 !important; }\n\n.btn-instagram {\n  color: #ffffff !important;\n  background-color: #517fa4 !important; }\n\n.btn-pinterest {\n  color: #ffffff !important;\n  background-color: #cb2027 !important; }\n\n.btn-dropbox {\n  color: #ffffff !important;\n  background-color: #007ee5 !important; }\n\n.btn-flickr {\n  color: #ffffff !important;\n  background-color: #ff0084 !important; }\n\n.btn-tumblr {\n  color: #ffffff !important;\n  background-color: #32506d !important; }\n\n.btn-skype {\n  color: #ffffff !important;\n  background-color: #00aff0 !important; }\n\n.btn-youtube {\n  color: #ffffff !important;\n  background-color: #bb0000 !important; }\n\n.btn-github {\n  color: #ffffff !important;\n  background-color: #171515 !important; }\n\n/* =============\n   Checkbox and Radios\n============= */\n/* Checkbox */\ninput[type=\"checkbox\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: relative;\n  border: none;\n  margin-bottom: -4px;\n  -webkit-appearance: none;\n  appearance: none;\n  cursor: pointer; }\n\ninput[type=\"checkbox\"]:focus,\n.checkbox input[type=\"checkbox\"]:focus,\n.checkbox-inline input[type=\"checkbox\"]:focus {\n  outline: none; }\n\ninput[type=\"checkbox\"]:after,\n.checkbox input[type=\"checkbox\"]:after,\n.checkbox-inline input[type=\"checkbox\"]:after {\n  content: \"\";\n  display: block;\n  width: 18px;\n  height: 18px;\n  margin-top: -2px;\n  margin-right: 5px;\n  border: 2px solid #566676;\n  border-radius: 2px;\n  -webkit-transition: 240ms;\n  -o-transition: 240ms;\n  transition: 240ms; }\n\ninput[type=\"checkbox\"]:checked:before,\n.checkbox input[type=\"checkbox\"]:checked:before,\n.checkbox-inline input[type=\"checkbox\"]:checked:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 6px;\n  display: table;\n  width: 6px;\n  height: 12px;\n  border: 2px solid #ffffff;\n  border-top-width: 0;\n  border-left-width: 0;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\ninput[type=\"checkbox\"]:checked:after,\n.checkbox input[type=\"checkbox\"]:checked:after,\n.checkbox-inline input[type=\"checkbox\"]:checked:after {\n  background-color: #62a3ff;\n  border-color: #62a3ff; }\n\ninput[type=\"checkbox\"]:disabled {\n  opacity: 0.5; }\n\ninput[type=\"checkbox\"]:disabled:after,\n.checkbox input[type=\"checkbox\"]:disabled:after,\n.checkbox-inline input[type=\"checkbox\"]:disabled:after {\n  border-color: #36404a; }\n\ninput[type=\"checkbox\"]:disabled:checked:after,\n.checkbox input[type=\"checkbox\"]:disabled:checked:after,\n.checkbox-inline input[type=\"checkbox\"]:disabled:checked:after {\n  background-color: #36404a;\n  border-color: transparent; }\n\n.checkbox.checkbox-circle input[type=\"checkbox\"]:after, .checkbox-inline.checkbox-circle input[type=\"checkbox\"]:after {\n  border-radius: 50%; }\n\n.checkbox.checkbox-circle input[type=\"checkbox\"]:checked:before, .checkbox-inline.checkbox-circle input[type=\"checkbox\"]:checked:before {\n  top: 2px;\n  left: 7px;\n  width: 4px;\n  height: 8px; }\n\n.checkbox.checkbox-custom input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-custom input[type=\"checkbox\"]:checked:after {\n  background-color: #ffffff;\n  border-color: #36404a; }\n\n.checkbox.checkbox-custom input[type=\"checkbox\"]:checked:before,\n.checkbox-inline.checkbox-custom input[type=\"checkbox\"]:checked:before {\n  border-color: #36404a; }\n\n.checkbox.checkbox-primary input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-primary input[type=\"checkbox\"]:checked:after {\n  background-color: #4285f4;\n  border-color: #4285f4; }\n\n.checkbox.checkbox-success input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-success input[type=\"checkbox\"]:checked:after {\n  background-color: #2bbbad;\n  border-color: #2bbbad; }\n\n.checkbox.checkbox-info input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-info input[type=\"checkbox\"]:checked:after {\n  background-color: #33b5e5;\n  border-color: #33b5e5; }\n\n.checkbox.checkbox-warning input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-warning input[type=\"checkbox\"]:checked:after {\n  background-color: #ff8800;\n  border-color: #ff8800; }\n\n.checkbox.checkbox-danger input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-danger input[type=\"checkbox\"]:checked:after {\n  background-color: #ef4554;\n  border-color: #ef4554; }\n\n.checkbox.checkbox-purple input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-purple input[type=\"checkbox\"]:checked:after {\n  background-color: #7266ba;\n  border-color: #7266ba; }\n\n.checkbox.checkbox-pink input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-pink input[type=\"checkbox\"]:checked:after {\n  background-color: #fb6d9d;\n  border-color: #fb6d9d; }\n\n.checkbox.checkbox-inverse input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-inverse input[type=\"checkbox\"]:checked:after {\n  background-color: #36404a;\n  border-color: #36404a; }\n\n/* Radio */\n.radio label,\n.radio-inline label,\n.checkbox label,\n.checkbox-inline label {\n  padding-left: 0; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"radio\"],\n.checkbox-inline input[type=\"radio\"],\n.radio input[type=\"checkbox\"],\n.radio-inline input[type=\"checkbox\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  margin-left: 0; }\n\ninput[type=\"radio\"],\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"] {\n  position: relative;\n  margin-top: 6px;\n  margin-right: 4px;\n  vertical-align: top;\n  border: none;\n  background-color: transparent;\n  -webkit-appearance: none;\n  appearance: none;\n  cursor: pointer; }\n\ninput[type=\"radio\"]:focus,\n.radio input[type=\"radio\"]:focus,\n.radio-inline input[type=\"radio\"]:focus {\n  outline: none; }\n\ninput[type=\"radio\"]:before,\n.radio input[type=\"radio\"]:before,\n.radio-inline input[type=\"radio\"]:before,\ninput[type=\"radio\"]:after,\n.radio input[type=\"radio\"]:after,\n.radio-inline input[type=\"radio\"]:after {\n  content: \"\";\n  display: block;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  -webkit-transition: 240ms;\n  -o-transition: 240ms;\n  transition: 240ms; }\n\ninput[type=\"radio\"]:before,\n.radio input[type=\"radio\"]:before,\n.radio-inline input[type=\"radio\"]:before {\n  position: absolute;\n  left: 0;\n  top: -3px;\n  background-color: #36404a;\n  -webkit-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0); }\n\ninput[type=\"radio\"]:after,\n.radio input[type=\"radio\"]:after,\n.radio-inline input[type=\"radio\"]:after {\n  position: relative;\n  top: -3px;\n  border: 2px solid #566676; }\n\ninput[type=\"radio\"]:checked:before,\n.radio input[type=\"radio\"]:checked:before,\n.radio-inline input[type=\"radio\"]:checked:before {\n  -webkit-transform: scale(0.5);\n  -ms-transform: scale(0.5);\n  -o-transform: scale(0.5);\n  transform: scale(0.5); }\n\ninput[type=\"radio\"]:disabled:checked:before,\n.radio input[type=\"radio\"]:disabled:checked:before,\n.radio-inline input[type=\"radio\"]:disabled:checked:before {\n  background-color: #566676; }\n\ninput[type=\"radio\"]:checked:after,\n.radio input[type=\"radio\"]:checked:after,\n.radio-inline input[type=\"radio\"]:checked:after {\n  border-color: #36404a; }\n\ninput[type=\"radio\"]:disabled:after,\n.radio input[type=\"radio\"]:disabled:after,\n.radio-inline input[type=\"radio\"]:disabled:after,\ninput[type=\"radio\"]:disabled:checked:after,\n.radio input[type=\"radio\"]:disabled:checked:after,\n.radio-inline input[type=\"radio\"]:disabled:checked:after {\n  border-color: #566676; }\n\n.radio.radio-custom input[type=\"radio\"]:checked:after,\n.radio-inline.radio-custom input[type=\"radio\"]:checked:after {\n  border-color: #62a3ff; }\n\n.radio.radio-custom input[type=\"radio\"]:before,\n.radio-inline.radio-custom input[type=\"radio\"]:before {\n  background-color: #62a3ff; }\n\n.radio.radio-primary input[type=\"radio\"]:checked:after,\n.radio-inline.radio-primary input[type=\"radio\"]:checked:after {\n  border-color: #4285f4; }\n\n.radio.radio-primary input[type=\"radio\"]:before,\n.radio-inline.radio-primary input[type=\"radio\"]:before {\n  background-color: #4285f4; }\n\n.radio.radio-success input[type=\"radio\"]:checked:after,\n.radio-inline.radio-success input[type=\"radio\"]:checked:after {\n  border-color: #2bbbad; }\n\n.radio.radio-success input[type=\"radio\"]:before,\n.radio-inline.radio-success input[type=\"radio\"]:before {\n  background-color: #2bbbad; }\n\n.radio.radio-info input[type=\"radio\"]:checked:after,\n.radio-inline.radio-info input[type=\"radio\"]:checked:after {\n  border-color: #33b5e5; }\n\n.radio.radio-info input[type=\"radio\"]:before,\n.radio-inline.radio-info input[type=\"radio\"]:before {\n  background-color: #33b5e5; }\n\n.radio.radio-warning input[type=\"radio\"]:checked:after,\n.radio-inline.radio-warning input[type=\"radio\"]:checked:after {\n  border-color: #ff8800; }\n\n.radio.radio-warning input[type=\"radio\"]:before,\n.radio-inline.radio-warning input[type=\"radio\"]:before {\n  background-color: #ff8800; }\n\n.radio.radio-danger input[type=\"radio\"]:checked:after,\n.radio-inline.radio-danger input[type=\"radio\"]:checked:after {\n  border-color: #ef4554; }\n\n.radio.radio-danger input[type=\"radio\"]:before,\n.radio-inline.radio-danger input[type=\"radio\"]:before {\n  background-color: #ef4554; }\n\n.radio.radio-purple input[type=\"radio\"]:checked:after,\n.radio-inline.radio-purple input[type=\"radio\"]:checked:after {\n  border-color: #7266ba; }\n\n.radio.radio-purple input[type=\"radio\"]:before,\n.radio-inline.radio-purple input[type=\"radio\"]:before {\n  background-color: #7266ba; }\n\n.radio.radio-pink input[type=\"radio\"]:checked:after,\n.radio-inline.radio-pink input[type=\"radio\"]:checked:after {\n  border-color: #fb6d9d; }\n\n.radio.radio-pink input[type=\"radio\"]:before,\n.radio-inline.radio-pink input[type=\"radio\"]:before {\n  background-color: #fb6d9d; }\n\n/* =============\n   Portlets\n============= */\n.portlet {\n  background: #ffffff;\n  border-radius: 3px;\n  margin-bottom: 30px;\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  background-clip: padding-box; }\n  .portlet .portlet-heading {\n    border-radius: 3px 3px 0 0;\n    color: #ffffff;\n    padding: 12px 20px; }\n    .portlet .portlet-heading .portlet-title {\n      color: #ffffff;\n      float: left;\n      font-size: 15px;\n      font-weight: 600;\n      margin-bottom: 0;\n      margin-top: 0;\n      text-transform: uppercase;\n      letter-spacing: 0.03em; }\n    .portlet .portlet-heading .portlet-widgets {\n      display: inline-block;\n      float: right;\n      font-size: 15px;\n      line-height: 30px;\n      padding-left: 15px;\n      position: relative;\n      text-align: right; }\n      .portlet .portlet-heading .portlet-widgets .divider {\n        margin: 0 5px; }\n      .portlet .portlet-heading .portlet-widgets .collapsed .ion-minus-round:before {\n        content: \"\\f217\" !important; }\n    .portlet .portlet-heading a {\n      color: #999999; }\n  .portlet .portlet-body {\n    -moz-border-radius-bottomleft: 5px;\n    -moz-border-radius-bottomright: 5px;\n    -webkit-border-bottom-left-radius: 5px;\n    -webkit-border-bottom-right-radius: 5px;\n    background: #ffffff;\n    border-bottom-left-radius: 5px;\n    border-bottom-right-radius: 5px;\n    padding: 15px; }\n\n.portlet-default .portlet-title {\n  color: #797979 !important; }\n\n.portlet .portlet-heading.bg-custom a, .portlet .portlet-heading.bg-purple a, .portlet .portlet-heading.bg-info a, .portlet .portlet-heading.bg-success a, .portlet .portlet-heading.bg-primary a, .portlet .portlet-heading.bg-danger a, .portlet .portlet-heading.bg-warning a, .portlet .portlet-heading.bg-inverse a, .portlet .portlet-heading.bg-pink a {\n  color: #ffffff; }\n\n.panel-disabled {\n  background: rgba(243, 242, 241, 0.5);\n  bottom: 15px;\n  left: 0;\n  position: absolute;\n  right: -5px;\n  top: 0; }\n\n.loader-1 {\n  -moz-animation: loaderAnimate 1000ms linear infinite;\n  -o-animation: loaderAnimate 1000ms linear infinite;\n  -webkit-animation: loaderAnimate 1000ms linear infinite;\n  animation: loaderAnimate 1000ms linear infinite;\n  clip: rect(0, 30px, 30px, 15px);\n  height: 30px;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  position: absolute;\n  top: 50%;\n  width: 30px; }\n  .loader-1:after {\n    -moz-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    -o-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    -webkit-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    animation: loaderAnimate2 1000ms ease-in-out infinite;\n    border-radius: 50%;\n    clip: rect(0, 30px, 30px, 15px);\n    content: '';\n    height: 30px;\n    position: absolute;\n    width: 30px; }\n\n/* =============\n   Progressbars\n============= */\n.progress {\n  -webkit-box-shadow: none !important;\n  background-color: #e6e6e6;\n  box-shadow: none !important;\n  height: 10px;\n  margin-bottom: 18px;\n  overflow: hidden; }\n\n.progress-bar {\n  box-shadow: none;\n  font-size: 8px;\n  font-weight: 600;\n  line-height: 12px; }\n\n.progress.progress-sm {\n  height: 5px !important; }\n  .progress.progress-sm .progress-bar {\n    font-size: 8px;\n    line-height: 5px; }\n\n.progress.progress-md {\n  height: 15px !important; }\n  .progress.progress-md .progress-bar {\n    font-size: 10.8px;\n    line-height: 14.4px; }\n\n.progress.progress-lg {\n  height: 1rem !important; }\n  .progress.progress-lg .progress-bar {\n    font-size: 12px;\n    line-height: 20px; }\n\n.progress-bar-primary {\n  background-color: #4285f4; }\n\n.progress-bar-success {\n  background-color: #2bbbad; }\n\n.progress-bar-info {\n  background-color: #33b5e5; }\n\n.progress-bar-warning {\n  background-color: #ff8800; }\n\n.progress-bar-danger {\n  background-color: #ef4554; }\n\n.progress-bar-inverse {\n  background-color: #4c5667; }\n\n.progress-bar-purple {\n  background-color: #7266ba; }\n\n.progress-bar-pink {\n  background-color: #fb6d9d; }\n\n.progress-bar-custom {\n  background-color: #62a3ff; }\n\n.progress-animated {\n  -webkit-animation-duration: 5s;\n  -webkit-animation-name: animationProgress;\n  -webkit-transition: 5s all;\n  animation-duration: 5s;\n  animation-name: animationProgress;\n  transition: 5s all; }\n\n/* Progressbar Vertical */\n.progress-vertical {\n  min-height: 250px;\n  height: 250px;\n  width: 10px;\n  position: relative;\n  display: inline-block;\n  margin-bottom: 0;\n  margin-right: 20px; }\n  .progress-vertical .progress-bar {\n    width: 100%; }\n\n.progress-vertical-bottom {\n  min-height: 250px;\n  height: 250px;\n  position: relative;\n  width: 10px;\n  display: inline-block;\n  margin-bottom: 0;\n  margin-right: 20px; }\n  .progress-vertical-bottom .progress-bar {\n    width: 100%;\n    position: absolute;\n    bottom: 0; }\n\n.progress-vertical.progress-sm, .progress-vertical-bottom.progress-sm {\n  width: 5px !important; }\n  .progress-vertical.progress-sm .progress-bar, .progress-vertical-bottom.progress-sm .progress-bar {\n    font-size: 8px;\n    line-height: 5px; }\n\n.progress-vertical.progress-md, .progress-vertical-bottom.progress-md {\n  width: 15px !important; }\n  .progress-vertical.progress-md .progress-bar, .progress-vertical-bottom.progress-md .progress-bar {\n    font-size: 10.8px;\n    line-height: 14.4px; }\n\n.progress-vertical.progress-lg, .progress-vertical-bottom.progress-lg {\n  width: 20px !important; }\n  .progress-vertical.progress-lg .progress-bar, .progress-vertical-bottom.progress-lg .progress-bar {\n    font-size: 12px;\n    line-height: 20px; }\n\n/* =============\n   Tables\n============= */\n.table {\n  margin-bottom: 10px; }\n\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ebeff2;\n  font-weight: 500; }\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto; }\n\ntable.focus-on tbody tr.focused th {\n  background-color: #62a3ff;\n  color: #ffffff; }\ntable.focus-on tbody tr.focused td {\n  background-color: #62a3ff;\n  color: #ffffff; }\n\n.fixed-table-container tbody .selected td {\n  background-color: #f7f7f7; }\n\n.modal-block {\n  background: transparent;\n  margin: 40px auto;\n  max-width: 600px;\n  padding: 0;\n  position: relative;\n  text-align: left; }\n\n/* Data table */\n#datatable-editable .actions a {\n  padding: 5px; }\n#datatable-editable .form-control {\n  background-color: #ffffff;\n  width: 100%; }\n#datatable-editable .fa-trash-o {\n  color: #ef4554; }\n#datatable-editable .fa-times {\n  color: #ef4554; }\n#datatable-editable .fa-pencil {\n  color: #29b6f6; }\n#datatable-editable .fa-save {\n  color: #33b86c; }\n\n#datatable td {\n  font-weight: normal; }\n\ndiv.dataTables_paginate ul.pagination {\n  margin-top: 30px; }\n\ndiv.dataTables_info {\n  padding-top: 38px; }\n\n.dt-buttons {\n  float: left; }\n\n.dt-button-collection.dropdown-menu {\n  visibility: inherit;\n  opacity: 1;\n  display: none;\n  margin: 0 !important; }\n\ndiv#datatable-buttons_info {\n  float: left; }\n\n#datatable-editable .form-control {\n  background-color: #ffffff;\n  width: auto;\n  height: 20px; }\n\n/* Footable */\n.footable-odd {\n  background-color: #ffffff; }\n\n.footable-detail-show {\n  background-color: #f2f2f2; }\n\n.footable-row-detail {\n  background-color: #F0F4F7; }\n\n.footable-pagination li {\n  margin-left: 5px;\n  display: inline-block;\n  float: left; }\n  .footable-pagination li a {\n    position: relative;\n    display: block;\n    padding: .5rem .75rem;\n    margin-left: -1px;\n    line-height: 1.25;\n    color: #36404a;\n    background-color: #ffffff;\n    border: 1px solid #eeeeee; }\n.footable-pagination li.active a {\n  color: #ffffff; }\n\n/* Bootstrap Table */\n.fixed-table-pagination .pagination-detail, .fixed-table-pagination div.pagination {\n  margin-top: 20px; }\n\n.fixed-table-container {\n  border: 1px solid #f2f2f2 !important; }\n\n.bootstrap-table .table > thead > tr > th {\n  border-bottom: 2px solid #f2f2f2;\n  background: #f2f2f2; }\n\n.fixed-table-container thead th .th-inner {\n  padding: 9px 12px; }\n\n.bootstrap-table .table, .bootstrap-table .table > tbody > tr > td, .bootstrap-table .table > tbody > tr > th, .bootstrap-table .table > tfoot > tr > td, .bootstrap-table .table > tfoot > tr > th, .bootstrap-table .table > thead > tr > td {\n  padding: 8px 12px !important; }\n\n.fixed-table-pagination .pagination a {\n  display: block;\n  border-radius: 3px; }\n.fixed-table-pagination .page-number.active a {\n  color: #ffffff; }\n.fixed-table-pagination .page-list .dropdown-menu a {\n  color: #36404a;\n  display: block; }\n\n/* Tablesaw */\n.tablesaw thead {\n  background: #f2f2f2;\n  background-image: none;\n  border: none; }\n\n.tablesaw thead th {\n  text-shadow: none;\n  letter-spacing: 0.06em; }\n\n.tablesaw thead tr:first-child th {\n  padding-top: 1.1em;\n  padding-bottom: 0.9em; }\n\n.tablesaw thead tr:first-child th {\n  font-weight: 600;\n  font-family: inherit;\n  border: none; }\n\n.tablesaw td, .tablesaw tbody th {\n  font-size: inherit;\n  line-height: inherit;\n  padding: 10px !important; }\n\n.tablesaw-stack tbody tr, .tablesaw tbody tr {\n  border-bottom: none; }\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after, .tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  font-family: FontAwesome;\n  font-size: 10px; }\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after {\n  content: \"\\f176\"; }\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  content: \"\\f175\"; }\n\n.tablesaw-bar .btn-select.btn-small:after, .tablesaw-bar .btn-select.btn-micro:after {\n  font-size: 8px;\n  padding-right: 10px; }\n\n.tablesaw-swipe .tablesaw-cell-persist {\n  box-shadow: none; }\n\n.tablesaw-enhanced .tablesaw-bar .btn {\n  text-shadow: none;\n  background-image: none; }\n\n.tablesaw-enhanced .tablesaw-bar .btn.btn-select:hover {\n  background: #ffffff; }\n\n.tablesaw-enhanced .tablesaw-bar .btn:hover, .tablesaw-enhanced .tablesaw-bar .btn:focus, .tablesaw-enhanced .tablesaw-bar .btn:active {\n  color: #62a3ff !important;\n  background-color: #ebeff2;\n  outline: none !important;\n  box-shadow: none !important;\n  background-image: none; }\n\n.tablesaw-columntoggle-popup .btn-group {\n  display: block; }\n\n/* Fixed table */\n.sticky-table-header {\n  top: 70px !important; }\n\n.table-wrapper .btn-toolbar {\n  display: block; }\n.table-wrapper .dropdown-menu {\n  left: auto;\n  right: 0; }\n\n/* Key Table */\ntable.dataTable th.focus, table.dataTable td.focus {\n  outline: 3px solid #62a3ff !important;\n  outline-offset: -1px; }\n\n/* ColVid Tables */\ndiv.ColVis {\n  float: none;\n  margin-right: 30px; }\n\nbutton.ColVis_Button, .ColVis_Button:hover {\n  float: none;\n  border-radius: 3px;\n  outline: none !important;\n  background: none;\n  box-shadow: none;\n  color: #ffffff !important;\n  background-color: #62a3ff !important;\n  border: 1px solid #62a3ff !important; }\n\n.dataTables_length {\n  float: left; }\n\ndiv.ColVis_collectionBackground {\n  background-color: transparent; }\n\nul.ColVis_collection {\n  padding: 10px 0 0 0;\n  background-color: #ffffff;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n  border: none; }\n  ul.ColVis_collection li {\n    background: transparent !important;\n    padding: 3px 10px !important;\n    border: none !important;\n    box-shadow: none !important; }\n\n#datatable-colvid_info {\n  float: left; }\n\n/* JsGrid table */\n.jsgrid-cell {\n  padding: .8em; }\n\n.jsgrid-selected-row > .jsgrid-cell {\n  background: #f2f2f2;\n  border-color: #ededed; }\n  .jsgrid-selected-row > .jsgrid-cell .jsgrid-button {\n    background-color: rgba(54, 64, 74, 0.1); }\n\n.jsgrid-edit-row > .jsgrid-cell, .jsgrid-insert-row > .jsgrid-cell {\n  background: #f2f2f2; }\n  .jsgrid-edit-row > .jsgrid-cell .jsgrid-button, .jsgrid-insert-row > .jsgrid-cell .jsgrid-button {\n    background-color: rgba(54, 64, 74, 0.1); }\n\n.jsgrid input, .jsgrid select, .jsgrid textarea {\n  border: 1px solid #e1e1e1;\n  padding: .4em .6em; }\n\n.jsgrid-pager-container {\n  margin-top: 10px; }\n\n.jsgrid-pager-page {\n  padding: 0;\n  margin: 0 2px; }\n\n.jsgrid-pager-page a, .jsgrid-pager-current-page {\n  background-color: #eee;\n  border-radius: 50%;\n  height: 24px;\n  width: 24px;\n  display: inline-block;\n  text-align: center;\n  line-height: 24px;\n  color: #797979; }\n\n.jsgrid-pager-page.jsgrid-pager-current-page {\n  background-color: #62a3ff;\n  color: #ffffff; }\n\n.jsgrid-pager-nav-button a {\n  color: #797979;\n  font-weight: 500; }\n  .jsgrid-pager-nav-button a:hover {\n    color: #62a3ff; }\n\n.jsgrid .jsgrid-button {\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  background-image: url(\"../images/download.png\");\n  background-color: #eee; }\n  .jsgrid .jsgrid-button:hover {\n    opacity: 0.9;\n    background-color: rgba(54, 64, 74, 0.2); }\n\n.jsgrid-search-mode-button {\n  background-position: 0 -295px; }\n\n.jsgrid-insert-button {\n  background-position: 0 -160px; }\n\n.jsgrid-header-sort:before {\n  position: absolute; }\n\n.jsgrid-header-cell {\n  text-align: center !important; }\n\n/* =============\n   Widgets\n============= */\n/* Widget-box styles */\n.widget-box-1 i.inform {\n  font-size: 20px;\n  cursor: pointer; }\n.widget-box-1 h4 {\n  margin-bottom: 5px;\n  margin-top: 0;\n  font-size: 16px; }\n.widget-box-1 h2 {\n  margin: 20px; }\n.widget-box-1 p {\n  margin-bottom: 0; }\n\n.widget-s-1 {\n  border-radius: 6px; }\n\n/* Widget (background-icon) */\n.widget-bg-color-icon .bg-icon {\n  height: 80px;\n  width: 80px;\n  text-align: center;\n  border-radius: 50%; }\n  .widget-bg-color-icon .bg-icon i {\n    font-size: 32px;\n    line-height: 80px; }\n\n.mini-stat-icon {\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  border-radius: 100%;\n  background-color: rgba(255, 255, 255, 0.2);\n  display: inline-block;\n  float: left;\n  font-size: 30px;\n  height: 60px;\n  line-height: 60px;\n  margin-right: 10px;\n  text-align: center;\n  width: 60px; }\n\n.mini-stat-info {\n  padding-top: 2px;\n  color: #eeeeee; }\n  .mini-stat-info span {\n    color: #ffffff;\n    display: block;\n    font-size: 24px; }\n  .mini-stat-info span.name {\n    color: #ffffff;\n    display: block;\n    font-size: 18px;\n    margin-top: 5px; }\n\n.widget-inline {\n  padding: 20px 0 !important; }\n  .widget-inline .col-lg-3 {\n    padding: 0; }\n  .widget-inline .widget-inline-box {\n    border-right: 1px solid #e3e8f1;\n    padding: 20px; }\n    .widget-inline .widget-inline-box i {\n      font-size: 32px; }\n\n/* Inbox-widget */\n.inbox-widget .inbox-item {\n  border-bottom: 1px solid #f1f1f1;\n  overflow: hidden;\n  padding: 10px 0;\n  position: relative; }\n  .inbox-widget .inbox-item .inbox-item-img {\n    display: block;\n    float: left;\n    margin-right: 15px;\n    width: 40px; }\n  .inbox-widget .inbox-item img {\n    width: 40px; }\n  .inbox-widget .inbox-item .inbox-item-author {\n    color: #333333;\n    display: block;\n    margin: 0; }\n  .inbox-widget .inbox-item .inbox-item-text {\n    color: #a0a0a0;\n    display: block;\n    font-size: 12px;\n    margin: 0; }\n  .inbox-widget .inbox-item .inbox-item-date {\n    color: #a9a9a9;\n    font-size: 11px;\n    position: absolute;\n    right: 7px;\n    top: 2px; }\n\n/* Chat widget */\n.conversation-list {\n  list-style: none;\n  height: 332px;\n  padding: 0 20px; }\n  .conversation-list li {\n    margin-bottom: 24px; }\n  .conversation-list .chat-avatar {\n    display: inline-block;\n    float: left;\n    text-align: center;\n    width: 42px; }\n    .conversation-list .chat-avatar img {\n      border-radius: 100%;\n      width: 100%; }\n    .conversation-list .chat-avatar i {\n      font-size: 12px;\n      font-style: normal; }\n  .conversation-list .ctext-wrap {\n    -moz-border-radius: 3px;\n    -webkit-border-radius: 3px;\n    background: #f4f8fb;\n    border-radius: 3px;\n    display: inline-block;\n    padding: 12px;\n    position: relative;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }\n    .conversation-list .ctext-wrap i {\n      display: block;\n      font-size: 12px;\n      font-style: normal;\n      font-weight: bold;\n      position: relative; }\n    .conversation-list .ctext-wrap p {\n      margin: 0;\n      padding-top: 3px; }\n    .conversation-list .ctext-wrap:after {\n      right: 100%;\n      top: 0;\n      border: solid transparent;\n      content: \" \";\n      height: 0;\n      width: 0;\n      position: absolute;\n      pointer-events: none;\n      border-top-color: #f4f8fb;\n      border-width: 8px;\n      margin-left: -1px;\n      border-right-color: #f4f8fb; }\n  .conversation-list .conversation-text {\n    display: inline-block;\n    float: left;\n    font-size: 12px;\n    margin-left: 12px;\n    width: 70%; }\n  .conversation-list .odd .chat-avatar {\n    float: right !important; }\n  .conversation-list .odd .conversation-text {\n    float: right !important;\n    margin-right: 12px;\n    text-align: right;\n    width: 70% !important; }\n  .conversation-list .odd .ctext-wrap {\n    background-color: #62a3ff;\n    color: #ffffff; }\n    .conversation-list .odd .ctext-wrap:after {\n      border-color: rgba(238, 238, 242, 0) !important;\n      border-left-color: #62a3ff !important;\n      border-top-color: #62a3ff !important;\n      left: 100% !important;\n      margin-right: -1px; }\n\n.chat-send {\n  padding-left: 0;\n  padding-right: 30px; }\n  .chat-send button {\n    width: 100%; }\n\n.chat-inputbar {\n  padding-left: 30px; }\n\n/* Todos widget */\n#todo-message {\n  font-size: 16px; }\n\n.todo-list li {\n  border-radius: 0;\n  border: 0;\n  margin: 0;\n  padding: 10px 0;\n  color: #98a6ad;\n  display: block; }\n  .todo-list li:last-of-type {\n    border-bottom: none; }\n\n.todo-send {\n  padding-left: 0; }\n\n/* Chat app */\n.chat-app-list {\n  padding: 0 20px; }\n  .chat-app-list .list-group-item {\n    background: transparent; }\n\n.chat-ready .conversation-list {\n  max-height: 800px; }\n.chat-ready .spinner {\n  width: 70px;\n  text-align: center; }\n.chat-ready .spinner > div {\n  width: 10px;\n  height: 10px;\n  background-color: #E3E3E3;\n  border-radius: 100%;\n  display: inline-block;\n  -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;\n  animation: sk-bouncedelay 1.4s infinite ease-in-out both; }\n.chat-ready .spinner .bounce1 {\n  -webkit-animation-delay: -0.32s;\n  animation-delay: -0.32s; }\n.chat-ready .spinner .bounce2 {\n  -webkit-animation-delay: -0.16s;\n  animation-delay: -0.16s; }\n@-webkit-keyframes sk-bouncedelay {\n  0%, 80%, 100% {\n    -webkit-transform: scale(0); }\n  40% {\n    -webkit-transform: scale(1); } }\n@keyframes sk-bouncedelay {\n  0%, 80%, 100% {\n    -webkit-transform: scale(0);\n    transform: scale(0); }\n  40% {\n    -webkit-transform: scale(1);\n    transform: scale(1); } }\n/* Widget-chart */\n.widget-chart ul li {\n  width: 31.5%;\n  display: inline-block;\n  padding: 0; }\n\n.widget-panel {\n  padding: 30px 20px 30px 30px;\n  border-radius: 4px;\n  position: relative;\n  margin-bottom: 30px;\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1); }\n  .widget-panel i {\n    font-size: 60px;\n    padding: 30px;\n    background: rgba(255, 255, 255, 0.2);\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    top: 0;\n    line-height: 60px; }\n\n.widget-style-2 i {\n  background: rgba(244, 248, 251, 0.6) !important;\n  font-size: 48px;\n  padding: 30px 40px; }\n\n/* Google maps widget*/\n.gmap iframe {\n  width: 100%;\n  margin: 0 !important;\n  padding: 0 !important; }\n\n.gmap-info:before {\n  color: #333333;\n  content: \"\\f041\";\n  font-family: \"FontAwesome\";\n  font-size: 35px;\n  left: 10px;\n  position: absolute;\n  top: 8px; }\n\n.gmap-info {\n  float: left;\n  padding: 0 20px 0 50px;\n  position: relative; }\n\n.gmap-buttons {\n  float: right;\n  margin-top: 28px; }\n\n.gmap-buttons .btn {\n  margin-left: 3px; }\n\n/* Google maps ends */\n/* Table with Action */\n.table-actions-bar tr td {\n  vertical-align: middle !important; }\n.table-actions-bar .table-action-btn {\n  color: #98a6ad;\n  display: inline-block;\n  width: 28px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 24px;\n  font-size: 20px; }\n  .table-actions-bar .table-action-btn:hover {\n    color: #2bbbad;\n    border-color: #2bbbad; }\n\n/* Transaction */\n.transaction-list li {\n  padding: 7px 0;\n  border-bottom: 1px solid #ebeff2;\n  clear: both;\n  position: relative; }\n.transaction-list i {\n  width: 20px;\n  position: absolute;\n  top: 10px;\n  font-size: 12px; }\n.transaction-list .tran-text {\n  padding-left: 25px;\n  white-space: nowrap;\n  display: inline-block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  width: 115px; }\n.transaction-list .tran-price {\n  margin-left: 30px; }\n\n/* Friend list */\n.friend-list a {\n  margin: 5px;\n  display: inline-block; }\n.friend-list .extra-number {\n  height: 48px;\n  width: 48px;\n  display: block;\n  line-height: 48px;\n  color: #98a6ad;\n  font-weight: 700;\n  background-color: #ebeff2;\n  border-radius: 50%;\n  border: 1px solid #98a6ad; }\n\n/* Profile widget */\n.profile-widget .bg-profile {\n  height: 125px; }\n.profile-widget .img-thumbnail {\n  margin-top: -42px;\n  border: none; }\n.profile-widget .widget-list {\n  padding: 10px;\n  margin-top: 20px;\n  margin-left: 0;\n  padding-bottom: 30px; }\n  .profile-widget .widget-list span {\n    display: block;\n    font-weight: bold;\n    font-size: 18px; }\n\n/*  Bar widget */\n.bar-widget .iconbox {\n  display: inline-block;\n  height: 50px;\n  width: 50px;\n  margin-right: 20px;\n  border-radius: 50%;\n  color: #ffffff;\n  text-align: center; }\n  .bar-widget .iconbox i {\n    line-height: 50px;\n    font-size: 20px; }\n\n/* Social type widgets */\n.widget-profile-one .card-box {\n  border-radius: 0; }\n  .widget-profile-one .card-box:first-of-type {\n    border-top-left-radius: 4px !important;\n    border-top-right-radius: 4px !important; }\n  .widget-profile-one .card-box:last-of-type {\n    border-bottom-left-radius: 4px !important;\n    border-bottom-right-radius: 4px !important; }\n\n.social-feed-box h3 {\n  font-size: 18px;\n  font-style: italic; }\n\n.widget-box-two {\n  border-bottom-left-radius: 3px !important;\n  border-bottom-right-radius: 3px !important; }\n\n.social-feed-slider {\n  padding-bottom: 50px; }\n  .social-feed-slider .carousel-indicators {\n    bottom: 0; }\n\n.pro-widget-img {\n  border-radius: 4px !important;\n  padding: 70px 0;\n  background-size: cover;\n  background: url(\"../images/big/bg.jpg\") center right no-repeat; }\n\n/* Blog styles */\n.blog-box-one {\n  margin-bottom: 20px; }\n\n.blog-box-one .cover-wrapper {\n  overflow: hidden;\n  width: 100%;\n  position: relative;\n  z-index: 1;\n  border-top-left-radius: 4px !important;\n  border-top-right-radius: 4px !important; }\n\n.blog-box-one .cover-wrapper img {\n  transition: all .3s ease;\n  -webkit-transition: all .3s ease;\n  -moz-transition: all .3s ease;\n  border-top-left-radius: 4px !important;\n  border-top-right-radius: 4px !important; }\n\n.blog-box-one .cover-wrapper:hover img {\n  -ms-transform: scale(1.1, 1.1);\n  -webkit-transform: scale(1.1, 1.1);\n  transform: scale(1.1, 1.1); }\n\n.blog-box-one .post-info {\n  background-color: #ffffff;\n  -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  padding: 20px;\n  border-bottom-left-radius: 4px !important;\n  border-bottom-right-radius: 4px !important; }\n\n.blog-box-one .post-info .date {\n  float: left;\n  border-bottom: 3px solid #71b6f9; }\n\n.post-info .date .day {\n  font-size: 22px;\n  color: #333;\n  font-weight: 600;\n  line-height: 22px; }\n\n.post-info .date .month {\n  text-transform: uppercase;\n  text-align: center;\n  width: 100%;\n  display: inline-block; }\n\n.blog-box-one .meta {\n  padding-left: 0; }\n\n.blog-box-one .post-info .meta-container {\n  padding-left: 55px; }\n\n.blog-box-one .post-info p {\n  margin-top: 15px; }\n\n.blog-widget-action a {\n  color: #98a6ad;\n  display: inline-block;\n  margin-right: 10px; }\n\n/* =============\n   Form Advanced\n============= */\n.error {\n  color: #ef4554;\n  font-size: 12px;\n  font-weight: 500; }\n\n/* Form validation */\n.parsley-error {\n  border-color: #ef4554 !important; }\n\n.parsley-errors-list {\n  display: none;\n  margin: 0;\n  padding: 0; }\n\n.parsley-errors-list.filled {\n  display: block; }\n\n.parsley-errors-list > li {\n  font-size: 12px;\n  list-style: none;\n  color: #f6504d; }\n\n/* Datepicker */\n.datepicker {\n  padding: 8px; }\n  .datepicker th {\n    font-size: 14px !important; }\n\n.datepicker-dropdown.dropdown-menu {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important; }\n\n.daterangepicker.show-calendar, .bootstrap-timepicker-widget.open {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important; }\n\n.datepicker table tr td.today, .datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled, .datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.selected, .datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.disabled, .datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td span.active, .datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled, .datepicker table tr td span.active.disabled:hover {\n  background-image: none; }\n\n.datepicker table tr td span.active:hover, .datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover, .datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:active, .datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active, .datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active, .datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active, .datepicker table tr td span.active.disabled:hover.active,\n.datepicker table tr td span.active.disabled, .datepicker table tr td span.active:hover.disabled,\n.datepicker table tr td span.active.disabled.disabled, .datepicker table tr td span.active.disabled:hover.disabled,\n.datepicker table tr td span.active[disabled], .datepicker table tr td span.active:hover[disabled],\n.datepicker table tr td span.active.disabled[disabled], .datepicker table tr td span.active.disabled:hover[disabled] {\n  background-color: #62a3ff; }\n\n.datepicker table tr td.active, .datepicker table tr td.active:hover, .datepicker table tr td.active.disabled,\n.datepicker table tr td.active.disabled:hover {\n  background-color: #62a3ff !important;\n  background-image: none;\n  box-shadow: none;\n  text-shadow: none; }\n\n.datepicker thead tr:first-child th:hover, .datepicker tfoot tr th:hover {\n  background-color: #fafafa; }\n\n.datepicker-inline {\n  border: 2px solid #eeeeee; }\n\n.daterangepicker td.active, .daterangepicker td.active:hover {\n  background-color: #4285f4;\n  border-color: #4285f4; }\n\n.daterangepicker .input-mini.active {\n  border: 1px solid #AAAAAA; }\n\n.daterangepicker .ranges li {\n  border-radius: 2px;\n  color: #36404a;\n  font-weight: 600;\n  font-size: 12px; }\n\n.daterangepicker select.hourselect, .daterangepicker select.minuteselect,\n.daterangepicker select.secondselect, .daterangepicker select.ampmselect {\n  border: 1px solid #e3e3e3;\n  padding: 2px;\n  width: 60px; }\n\n.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {\n  background-color: #4285f4;\n  border: 1px solid #4285f4;\n  color: #ffffff; }\n\n.search-input {\n  margin-bottom: 10px; }\n\n.ms-selectable {\n  box-shadow: none;\n  outline: none !important; }\n\n.ms-container .ms-list.ms-focus {\n  box-shadow: none; }\n.ms-container .ms-selectable li.ms-hover {\n  background-color: #4285f4; }\n.ms-container .ms-selection li.ms-hover {\n  background-color: #4285f4; }\n\n/* Summernote editor */\n.note-btn-group .dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap; }\n  .note-btn-group .dropdown-menu > li > a:hover {\n    color: #62a3ff; }\n\n.note-image-popover, .note-air-popover, .note-link-popover {\n  display: none; }\n  .note-image-popover .dropdown-toggle::after, .note-air-popover .dropdown-toggle::after, .note-link-popover .dropdown-toggle::after {\n    margin-left: 0; }\n\n.note-icon-caret {\n  display: none; }\n\n.note-popover .popover-content .note-color .dropdown-toggle,\n.note-editor .panel-heading.note-toolbar .note-color .dropdown-toggle {\n  width: 20px;\n  padding-left: 1px; }\n\n.note-editor {\n  border: 1px solid #eeeeee !important;\n  position: relative; }\n  .note-editor .note-toolbar {\n    background-color: #ebebeb;\n    border-bottom: 1px solid #e0e0e0;\n    margin: 0; }\n  .note-editor .note-statusbar {\n    background-color: #ffffff; }\n    .note-editor .note-statusbar .note-resizebar {\n      border-top: none;\n      height: 15px;\n      padding-top: 3px; }\n\n.note-popover .popover .popover-content {\n  padding: 5px 0 10px 5px; }\n\n.note-toolbar {\n  padding: 5px 0 10px 5px; }\n\n.code-edit-wrap {\n  padding: 0 !important; }\n\n.cm-s-ambiance .CodeMirror-linenumber {\n  color: #bcbcbc; }\n.cm-s-ambiance .CodeMirror-gutters {\n  background-color: #4c5667 !important;\n  box-shadow: none; }\n\n.cm-s-ambiance.CodeMirror {\n  background-color: #4c5667 !important;\n  box-shadow: none; }\n\n/* Timepicker */\n.bootstrap-timepicker-widget table td a:hover {\n  background-color: transparent;\n  border-color: transparent;\n  border-radius: 4px;\n  color: #4285f4;\n  text-decoration: none; }\n\n.editor-horizontal .popover-content {\n  padding: 9px 30px; }\n\n/* Bootstrap select */\n.bootstrap-select.show > .dropdown-menu > .dropdown-menu {\n  display: block; }\n\n.bootstrap-select > .dropdown-menu > .dropdown-menu li.hidden {\n  display: none; }\n\n.bootstrap-select > .dropdown-menu > .dropdown-menu li a {\n  display: block;\n  width: 100%;\n  padding: 3px 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #36404a;\n  text-align: inherit;\n  white-space: nowrap;\n  background: 0 0;\n  border: 0; }\n\n.bootstrap-select .check-mark::after {\n  content: \"\\f299\";\n  font-family: \"Material Design Iconic Font\"; }\n\n.bootstrap-select button {\n  overflow: hidden;\n  text-overflow: ellipsis; }\n\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\n  margin-top: 0; }\n\n.bootstrap-select.show .dropdown-menu.open .dropdown-menu.inner {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important; }\n\n/* Dropzone */\n.dropzone {\n  min-height: 230px;\n  border: 2px dashed rgba(54, 64, 74, 0.3);\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  background: white;\n  border-radius: 6px; }\n  .dropzone .dz-message {\n    font-size: 30px; }\n\n/* X-Editable */\n.editable-click, a.editable-click, a.editable-click:hover {\n  border: none; }\n\n/* AUTOCOMPLETE */\n.autocomplete-suggestions {\n  border: 1px solid #f9f9f9;\n  background: #ffffff;\n  cursor: default;\n  overflow: auto;\n  -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15);\n  -moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15);\n  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15); }\n\n.autocomplete-suggestion {\n  padding: 2px 5px;\n  white-space: nowrap;\n  overflow: hidden; }\n\n.autocomplete-no-suggestion {\n  padding: 2px 5px; }\n\n.autocomplete-selected {\n  background: rgba(152, 166, 173, 0.3);\n  cursor: pointer; }\n\n.autocomplete-suggestions strong {\n  font-weight: bold;\n  color: #36404a; }\n\n.autocomplete-group {\n  padding: 2px 5px; }\n\n.autocomplete-group strong {\n  font-weight: bold;\n  font-size: 16px;\n  color: #36404a;\n  display: block; }\n\n/* Image crop */\n.img-container,\n.img-preview {\n  background-color: #f7f7f7;\n  overflow: hidden;\n  width: 100%;\n  text-align: center; }\n\n.img-container {\n  min-height: 200px;\n  max-height: 466px;\n  margin-bottom: 20px; }\n\n@media (min-width: 768px) {\n  .img-container {\n    min-height: 466px; } }\n.img-container > img {\n  max-width: 100%; }\n\n.docs-preview {\n  margin-right: -15px;\n  margin-bottom: 10px; }\n\n.img-preview {\n  float: left;\n  margin-right: 10px;\n  margin-bottom: 10px; }\n\n.img-preview > img {\n  max-width: 100%; }\n\n#showDataURL img {\n  width: 100%; }\n\n/* Bootstrap tagsinput */\n.bootstrap-tagsinput {\n  box-shadow: none;\n  padding: 3px 7px 6px;\n  border: 1px solid #e3e3e3; }\n  .bootstrap-tagsinput .label-info {\n    background-color: #62a3ff !important;\n    display: inline-block;\n    padding: 5px; }\n\n/* Multiple */\n.ms-container {\n  background: transparent url(\"../images/multiple-arrow.png\") no-repeat 50% 50%; }\n  .ms-container .ms-list {\n    box-shadow: none;\n    border: 1px solid #e3e3e3; }\n  .ms-container .ms-list.ms-focus {\n    box-shadow: none;\n    border: 1px solid #aaaaaa; }\n  .ms-container .ms-selectable li.ms-elem-selectable {\n    border: none;\n    padding: 5px 10px; }\n  .ms-container .ms-selection li.ms-elem-selection {\n    border: none;\n    padding: 5px 10px; }\n\n/* Select 2 */\n.select2-container .select2-selection--single {\n  border: 1px solid #E3E3E3 !important;\n  height: 38px !important; }\n  .select2-container .select2-selection--single .select2-selection__rendered {\n    line-height: 36px !important;\n    padding-left: 12px !important; }\n  .select2-container .select2-selection--single .select2-selection__arrow {\n    height: 34px;\n    width: 34px;\n    right: 3px; }\n    .select2-container .select2-selection--single .select2-selection__arrow b {\n      border-color: #999 transparent transparent transparent;\n      border-width: 6px 6px 0 6px; }\n\n.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #999 transparent !important;\n  border-width: 0 6px 6px 6px !important; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #62a3ff; }\n\n.select2-results__option {\n  padding: 6px 12px; }\n\n.select2-dropdown {\n  border: 1px solid #e3e3e3 !important;\n  padding-top: 5px;\n  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15); }\n\n.select2-search input {\n  border: 1px solid #e3e3e3 !important; }\n\n.select2-container .select2-selection--multiple {\n  min-height: 38px !important;\n  border: 1px solid #e3e3e3 !important; }\n  .select2-container .select2-selection--multiple .select2-selection__rendered {\n    padding: 2px 10px; }\n  .select2-container .select2-selection--multiple .select2-search__field {\n    margin-top: 7px;\n    border: 0 !important; }\n  .select2-container .select2-selection--multiple .select2-selection__choice {\n    background-color: #f5f5f5;\n    border: 1px solid #e3e3e3;\n    border-radius: 1px;\n    padding: 0 7px; }\n\n/* Bootstrap-select */\n.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) {\n  width: 100% !important; }\n\n.bootstrap-select .dropdown-toggle:focus {\n  outline: none !important; }\n.bootstrap-select .glyphicon {\n  padding-right: 6px; }\n\n/* Bootstrap filestyle */\n.icon-span-filestyle {\n  padding-right: 5px; }\n\n/* Bootstrap-touchSpin */\n.bootstrap-touchspin .input-group-btn-vertical .btn {\n  padding: 9px 12px; }\n.bootstrap-touchspin .input-group-btn-vertical i {\n  top: 4px;\n  left: 8px; }\n\n/* == Bootstrap Switch == */\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\n  background: #4285f4; }\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\n  background: #33b5e5; }\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\n  background: #2bbbad; }\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\n  background: #ff8800; }\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\n  background: #ef4554; }\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\n  background: #eeeeee; }\n\n.bootstrap-switch.bootstrap-switch-focused {\n  border-color: #98a6ad;\n  box-shadow: none; }\n\n/* == Form Uploads == */\n.jFiler-input-dragDrop {\n  width: 100%;\n  background-color: #fafafa; }\n\n.jFiler-theme-default .jFiler-input {\n  width: 100%; }\n\n.jFiler-theme-default .jFiler-input-button {\n  background-color: #62a3ff;\n  background-image: none !important;\n  color: #ffffff;\n  border: 1px solid #62a3ff !important; }\n\n/* == Colorpicker == */\n.colorpicker-visible {\n  visibility: visible;\n  opacity: 1;\n  display: block !important;\n  margin-top: 0 !important; }\n\n/* Wizard */\n.wizard > .content {\n  background: #ffffff;\n  min-height: 240px;\n  padding: 20px; }\n\n.wizard > .content > .body {\n  padding: 0;\n  position: relative; }\n  .wizard > .content > .body input {\n    border: 1px solid #E3E3E3; }\n  .wizard > .content > .body ul > li {\n    display: block;\n    line-height: 30px; }\n  .wizard > .content > .body label.error {\n    color: #ef4554;\n    margin-left: 0; }\n  .wizard > .content > .body label {\n    display: inline-block;\n    margin-top: 10px; }\n\n.wizard > .steps .number {\n  border-radius: 50%;\n  background-color: rgba(255, 255, 255, 0.3);\n  display: inline-block;\n  line-height: 30px;\n  margin-right: 10px;\n  width: 30px;\n  text-align: center; }\n.wizard > .steps .disabled a {\n  background: #ffffff;\n  color: #333333;\n  cursor: default;\n  border: 1px solid #eaeaea; }\n  .wizard > .steps .disabled a:hover {\n    background: #f9f9f9;\n    color: #333333;\n    cursor: default;\n    border: 1px solid #eaeaea; }\n  .wizard > .steps .disabled a:active {\n    background: #f9f9f9;\n    color: #333333;\n    cursor: default;\n    border: 1px solid #eaeaea; }\n.wizard > .steps .current a {\n  background: #62a3ff; }\n  .wizard > .steps .current a:hover {\n    background: #62a3ff; }\n    .wizard > .steps .current a:hover .number {\n      color: #ffffff; }\n  .wizard > .steps .current a:active {\n    background: #62a3ff; }\n    .wizard > .steps .current a:active .number {\n      color: #ffffff; }\n  .wizard > .steps .current a .number {\n    color: #ffffff; }\n.wizard > .steps .done a {\n  background: #7a8c9a; }\n  .wizard > .steps .done a:hover {\n    background: #7a8c9a; }\n  .wizard > .steps .done a:active {\n    background: #7a8c9a; }\n\n.wizard > .steps a, .wizard > .steps a:hover, .wizard > .steps a:active, .wizard > .content {\n  border-radius: 2px; }\n\n.wizard > .actions a {\n  background: #62a3ff;\n  border-radius: 2px;\n  color: #ffffff; }\n  .wizard > .actions a:hover {\n    background: #62a3ff;\n    border-radius: 2px;\n    color: #ffffff; }\n  .wizard > .actions a:active {\n    background: #62a3ff;\n    border-radius: 2px;\n    color: #ffffff; }\n.wizard > .actions .disabled a {\n  background: #ffffff;\n  color: #333333;\n  cursor: default;\n  border: 1px solid #eaeaea; }\n  .wizard > .actions .disabled a:hover {\n    background: #f9f9f9;\n    color: #333333;\n    cursor: default;\n    border: 1px solid #eaeaea; }\n  .wizard > .actions .disabled a:active {\n    background: #f9f9f9;\n    color: #333333;\n    cursor: default;\n    border: 1px solid #eaeaea; }\n\n/* =============\n   Calendar\n============= */\n.calendar {\n  float: left;\n  margin-bottom: 0; }\n\n.fc-view {\n  margin-top: 30px; }\n\n.none-border .modal-footer {\n  border-top: none; }\n\n.fc-toolbar {\n  margin-bottom: 5px;\n  margin-top: 15px; }\n  .fc-toolbar h2 {\n    font-size: 18px;\n    font-weight: 600;\n    line-height: 30px;\n    text-transform: uppercase; }\n\n.fc-day {\n  background: #ffffff; }\n\n.fc-toolbar .fc-state-active, .fc-toolbar .ui-state-active,\n.fc-toolbar button:focus, .fc-toolbar button:hover,\n.fc-toolbar .ui-state-hover {\n  z-index: 0; }\n\n.fc-widget-header {\n  border: 1px solid #ebeff2; }\n\n.fc-widget-content {\n  border: 1px solid #ebeff2; }\n\n.fc th.fc-widget-header {\n  background: #ebeff2;\n  font-size: 14px;\n  line-height: 20px;\n  padding: 10px 0;\n  text-transform: uppercase; }\n\n.fc-button {\n  background: #ffffff;\n  border: 1px solid #ebeff2;\n  color: #555555;\n  text-transform: capitalize; }\n\n.fc-text-arrow {\n  font-family: inherit;\n  font-size: 16px; }\n\n.fc-state-hover {\n  background: #F5F5F5; }\n\n.fc-state-highlight {\n  background: #f0f0f0; }\n\n.fc-cell-overlay {\n  background: #f0f0f0; }\n\n.fc-unthemed .fc-today {\n  background: #ffffff; }\n\n.fc-event {\n  border-radius: 2px;\n  border: none;\n  cursor: move;\n  font-size: 13px;\n  margin: 5px 7px;\n  padding: 5px 5px;\n  text-align: center; }\n\n.external-event {\n  color: #ffffff;\n  cursor: move;\n  margin: 10px 0;\n  padding: 6px 10px;\n  font-size: 14px; }\n\n.fc-basic-view td.fc-week-number span {\n  padding-right: 5px; }\n.fc-basic-view td.fc-day-number {\n  padding-right: 5px; }\n.fc-basic-view .fc-content {\n  color: #ffffff; }\n\n/* Wysiwig */\n.mce-content-body p {\n  color: #36404a;\n  font-size: 14px;\n  font-weight: 300; }\n\n.mce-popover .mce-arrow:after {\n  border-bottom-color: red; }\n\n.mce-popover .mce-colorbutton-grid {\n  margin: 0;\n  border: 1px solid #98a6ad !important;\n  padding: 4px; }\n\n.mce-reset .mce-window-head {\n  border-bottom: 1px solid #d7dce5; }\n\n.mce-reset .mce-window-head .mce-title {\n  color: #707780;\n  font-size: 16px;\n  font-weight: 400; }\n\n.mce-reset .mce-textbox {\n  border-radius: 0;\n  box-shadow: none;\n  outline: 0;\n  border-color: #d7dce5;\n  height: 30px;\n  font-weight: 300;\n  line-height: 30px;\n  color: #aaaaaa;\n  font-size: 14px; }\n\n.mce-reset .mce-textbox:focus {\n  box-shadow: none;\n  border-color: #62a3ff; }\n\n.mce-reset .mce-checkbox .mce-ico {\n  background-image: none;\n  background-color: #ffffff;\n  border-radius: 0;\n  border: 1px solid #d7dce5; }\n\n.mce-reset .mce-checkbox .mce-label {\n  color: #707780;\n  font-size: 12px;\n  font-weight: 400; }\n\n.mce-container {\n  border-radius: 0 !important;\n  border-width: 0 !important; }\n\n.mce-container .mce-menubar {\n  background-color: #f2f2f2 !important;\n  border: 1px solid #f2f2f2 !important;\n  padding: 2px; }\n\n.mce-container .mce-menubar .mce-btn button span {\n  color: #36404a;\n  font-size: 14px;\n  font-weight: 400;\n  text-transform: capitalize; }\n\n.mce-container .mce-menubar .mce-btn button .mce-caret {\n  border-top-color: #36404a; }\n\n.mce-container .mce-menubar .mce-btn button:hover {\n  background-color: #f2f2f2; }\n\n.mce-container .mce-menubar .mce-btn.mce-active button {\n  background-color: #f2f2f2; }\n\n.mce-container .mce-btn {\n  background-color: #d7dce5;\n  background-image: none;\n  outline: 0;\n  border: 0;\n  border-radius: 0; }\n\n.mce-container .mce-btn button {\n  color: #ffffff;\n  font-size: 14px;\n  font-weight: 400;\n  text-shadow: none; }\n\n.mce-container .mce-btn:hover {\n  background-color: #f2f2f2;\n  background-image: none; }\n\n.mce-container .mce-primary {\n  background-color: #62a3ff;\n  background-image: none;\n  outline: 0;\n  border: 0;\n  border-radius: 0; }\n\n.mce-container .mce-primary button {\n  color: #ffffff;\n  font-size: 14px;\n  font-weight: 400;\n  text-shadow: none; }\n\n.mce-container .mce-primary:hover {\n  background-color: #0c7cd5;\n  background-image: none; }\n\n.mce-container .mce-toolbar-grp {\n  background-color: #f2f2f2 !important;\n  border: 1px solid #f2f2f2 !important;\n  border-top-width: 0 !important;\n  padding: 6px; }\n\n.mce-container .mce-edit-area {\n  border: 2px solid #f2f2f2 !important; }\n\n.mce-container .mce-statusbar {\n  background-color: #f2f2f2 !important;\n  border: 1px solid #f2f2f2 !important; }\n\n.mce-container .mce-statusbar .mce-path .mce-path-item {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 400; }\n\n.mce-container .mce-widget {\n  color: #9398a0;\n  font-size: 14px;\n  font-weight: 400;\n  border-left: 1px solid transparent; }\n\n.mce-container .mce-btn-group {\n  border: 1px solid #e9ecf2 !important; }\n\n.mce-container .mce-btn-group .mce-btn {\n  box-shadow: none;\n  background-image: none;\n  background-color: #ffffff;\n  border-width: 0;\n  border-radius: 0 !important; }\n\n.mce-container .mce-btn-group .mce-btn:hover,\n.mce-container .mce-btn-group .mce-btn:focus {\n  box-shadow: none;\n  background-image: none;\n  background-color: #ffffff; }\n\n.mce-container .mce-btn-group .mce-btn button span {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 300; }\n\n.mce-container .mce-btn-group .mce-btn button .mce-caret {\n  color: #707780;\n  font-size: 14px; }\n\n.mce-container .mce-ico {\n  color: #707780;\n  font-size: 14px; }\n\n.mce-container .mce-panel {\n  background-image: none; }\n\n.mce-container.mce-menu {\n  border: 1px solid #d7dce5 !important; }\n\n.mce-container.mce-menu .mce-menu-item {\n  background-image: none; }\n\n.mce-container.mce-menu .mce-menu-item .mce-ico {\n  color: #62a3ff;\n  font-size: 14px; }\n\n.mce-container.mce-menu .mce-menu-item .mce-text {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 400;\n  text-transform: capitalize; }\n\n.mce-container.mce-menu .mce-menu-item .mce-menu-shortcut {\n  color: #aaaaaa;\n  font-size: 12px;\n  font-weight: 300;\n  text-transform: capitalize; }\n\n.mce-container.mce-menu .mce-menu-item:hover,\n.mce-container.mce-menu .mce-menu-item:focus,\n.mce-container.mce-menu .mce-menu-item.mce-selected {\n  background-color: #62a3ff; }\n\n.mce-container.mce-menu .mce-menu-item:hover .mce-ico,\n.mce-container.mce-menu .mce-menu-item:focus .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-ico,\n.mce-container.mce-menu .mce-menu-item:hover .mce-text,\n.mce-container.mce-menu .mce-menu-item:focus .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-text,\n.mce-container.mce-menu .mce-menu-item:hover .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item:focus .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-menu-shortcut {\n  color: #ffffff; }\n\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-menu-shortcut {\n  color: #aaaaaa; }\n\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected {\n  background-color: #d7dce5; }\n\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-menu-shortcut {\n  color: #ffffff; }\n\n.mce-container.mce-menu .mce-menu-item-sep {\n  background-color: #d7dce5; }\n\n.mce-container.mce-menu .mce-menu-item-sep:hover {\n  background-color: #d7dce5; }\n\n.mce-menubtn button {\n  color: #36404a !important; }\n\n.mce-menu-item-normal.mce-active {\n  background-color: #62a3ff !important; }\n  .mce-menu-item-normal.mce-active .mce-text {\n    color: #ffffff !important; }\n\n/* =============\n   Notification\n============= */\n.notifyjs-metro-base {\n  position: relative;\n  min-height: 52px;\n  min-width: 250px;\n  color: #444;\n  border-radius: 3px;\n  -webkit-border-radius: 3px;\n  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-animation: dropdownOpen 0.3s ease-out;\n  -o-animation: dropdownOpen 0.3s ease-out;\n  animation: dropdownOpen 0.3s ease-out; }\n\n.notifyjs-metro-base .image {\n  display: table;\n  position: absolute;\n  height: auto;\n  width: auto;\n  left: 25px;\n  top: 50%;\n  font-size: 24px;\n  -moz-transform: translate(-50%, -50%);\n  -ms-transform: translate(-50%, -50%);\n  -o-transform: translate(-50%, -50%);\n  -webkit-transform: translate(-50%, -50%);\n  transform: translate(-50%, -50%); }\n\n.notifyjs-metro-base .text-wrapper {\n  display: inline-block;\n  vertical-align: top;\n  text-align: left;\n  margin: 10px 10px 10px 52px;\n  clear: both; }\n\n.notifyjs-metro-base .title {\n  font-size: 15px;\n  line-height: 20px;\n  margin-bottom: 5px;\n  font-weight: bold; }\n\n.notifyjs-metro-base .text {\n  font-size: 12px;\n  font-weight: normal;\n  max-width: 360px;\n  vertical-align: middle; }\n\n.notifyjs-metro-cool {\n  color: #fafafa !important;\n  background-color: #4A525F;\n  border: 1px solid #4A525F; }\n\n/* =============\n   Bootstrap Range slider\n============= */\n.slider .slider-horizontal {\n  margin: 10px 0; }\n.slider .slider-vertical {\n  margin: 0 10px; }\n\n.slider-handle.round {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border: 1px solid #EFF2F7;\n  background: #fff;\n  cursor: pointer; }\n\n.slider-default .slider-selection {\n  background-image: none;\n  background-color: #909aa0; }\n\n.slider-primary .slider-selection {\n  background-image: none;\n  background-color: #4285f4; }\n\n.slider-success .slider-selection {\n  background-image: none;\n  background-color: #2bbbad; }\n\n.slider-info .slider-selection {\n  background-image: none;\n  background-color: #33b5e5; }\n\n.slider-warning .slider-selection {\n  background-image: none;\n  background-color: #ff8800; }\n\n.slider-danger .slider-selection {\n  background-image: none;\n  background-color: #ef4554; }\n\n.slider-custom .slider-selection {\n  background-image: none;\n  background-color: #62a3ff; }\n\n.slider-pink .slider-selection {\n  background-image: none;\n  background-color: #fb6d9d; }\n\n.slider-purple .slider-selection {\n  background-image: none;\n  background-color: #7266ba; }\n\n.slider-inverse .slider-selection {\n  background-image: none;\n  background-color: #4c5667; }\n\n/* =========== */\n/* Sweet Alert */\n/* =========== */\n.sweet-alert {\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n  border-radius: 3px; }\n  .sweet-alert p {\n    font-size: 14px;\n    line-height: 22px; }\n  .sweet-alert .icon.success .placeholder {\n    border: 4px solid rgba(43, 187, 173, 0.3); }\n  .sweet-alert .icon.success .line {\n    background-color: #2bbbad; }\n  .sweet-alert .icon.warning {\n    border-color: #ff8800; }\n  .sweet-alert .icon.info {\n    border-color: #33b5e5; }\n  .sweet-alert .btn-warning:focus, .sweet-alert .btn-info:focus, .sweet-alert .btn-success:focus, .sweet-alert .btn-danger:focus, .sweet-alert .btn-default:focus {\n    box-shadow: none; }\n  .sweet-alert .btn-lg {\n    font-size: 15px !important; }\n\n/* =========== */\n/* Sweet Alert 2*/\n/* =========== */\n.swal2-modal {\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n  border-radius: 3px; }\n  .swal2-modal .swal2-title {\n    font-size: 28px; }\n  .swal2-modal .swal2-content {\n    font-size: 16px; }\n  .swal2-modal .swal2-spacer {\n    margin: 10px 0; }\n  .swal2-modal .swal2-file, .swal2-modal .swal2-input, .swal2-modal .swal2-textarea {\n    border: 2px solid #98a6ad;\n    font-size: 16px;\n    box-shadow: none !important; }\n\n.swal2-icon.swal2-question {\n  color: #62a3ff;\n  border-color: #62a3ff; }\n\n.swal2-icon.swal2-success {\n  border-color: #2bbbad; }\n  .swal2-icon.swal2-success .line {\n    background-color: #2bbbad; }\n  .swal2-icon.swal2-success .placeholder {\n    border-color: #2bbbad; }\n\n.swal2-icon.swal2-warning {\n  color: #ff8800;\n  border-color: #ff8800; }\n\n.swal2-icon.swal2-error {\n  border-color: #ef4554; }\n  .swal2-icon.swal2-error .line {\n    background-color: #ef4554; }\n\n.swal2-modal .swal2-file:focus, .swal2-modal .swal2-input:focus, .swal2-modal .swal2-textarea:focus {\n  outline: 0;\n  border: 2px solid #62a3ff; }\n\n/* =============\n   Charts\n============= */\n/* Morris chart */\n.morris-hover.morris-default-style {\n  border-radius: 5px;\n  padding: 10px 12px;\n  background: #ffffff;\n  border: none; }\n  .morris-hover.morris-default-style .morris-hover-point {\n    color: #36404a !important; }\n\n.chart-detail-list li {\n  margin: 0 10px; }\n  .chart-detail-list li h5 {\n    font-size: 15px; }\n\n.pieLabel div {\n  font-size: 14px !important; }\n\n.jqstooltip {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box; }\n\n.chart {\n  position: relative;\n  display: inline-block;\n  width: 110px;\n  height: 110px;\n  margin-top: 20px;\n  margin-bottom: 20px;\n  text-align: center; }\n  .chart canvas {\n    position: absolute;\n    top: 0;\n    left: 0; }\n\n.chart.chart-widget-pie {\n  margin-top: 5px;\n  margin-bottom: 5px; }\n\n.percent {\n  display: inline-block;\n  line-height: 110px;\n  z-index: 2;\n  font-weight: 600;\n  font-size: 18px;\n  color: #36404a; }\n  .percent:after {\n    content: '%';\n    margin-left: 0.1em;\n    font-size: .8em; }\n\n#flotTip {\n  padding: 8px 12px;\n  background-color: #36404a;\n  z-index: 100;\n  color: #ffffff;\n  opacity: 0.9;\n  font-size: 13px;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px; }\n\n.legend tr {\n  height: 20px; }\n\n.legendLabel {\n  padding-left: 5px !important;\n  line-height: 10px;\n  padding-right: 10px; }\n\n/* Sparkline chart */\n.jqstooltip {\n  background-color: #36404a !important;\n  padding: 5px 10px !important;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-color: #36404a !important; }\n\n.jqsfield {\n  font-size: 12px !important;\n  line-height: 18px !important; }\n\n/* C3 chart */\n.c3-tooltip td > span {\n  background: #36404a; }\n\n.c3-tooltip td {\n  border-left: none; }\n\n.c3-tooltip {\n  box-shadow: 0 0 8px 0 #777;\n  opacity: 1; }\n\n.c3-chart-arcs-title {\n  font-size: 18px;\n  font-weight: 600; }\n\n.c3-tooltip tr {\n  border: none !important; }\n\n.c3-tooltip th {\n  background-color: #36404a; }\n\n/* Chartist chart */\n.ct-golden-section:before {\n  float: none; }\n\n.ct-chart {\n  height: 300px; }\n  .ct-chart .ct-label {\n    fill: #a3afb7;\n    color: #a3afb7;\n    font-size: 12px;\n    line-height: 1; }\n\n.ct-chart.simple-pie-chart-chartist .ct-label {\n  color: #ffffff;\n  fill: #ffffff;\n  font-size: 16px; }\n\n.ct-chart .ct-series.ct-series-a .ct-bar, .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point, .ct-chart .ct-series.ct-series-a .ct-slice-donut {\n  stroke: #4285f4; }\n\n.ct-chart .ct-series.ct-series-b .ct-bar, .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point, .ct-chart .ct-series.ct-series-b .ct-slice-donut {\n  stroke: #fb6d9d; }\n\n.ct-chart .ct-series.ct-series-c .ct-bar, .ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point, .ct-chart .ct-series.ct-series-c .ct-slice-donut {\n  stroke: #33b5e5; }\n\n.ct-chart .ct-series.ct-series-d .ct-bar, .ct-chart .ct-series.ct-series-d .ct-line, .ct-chart .ct-series.ct-series-d .ct-point, .ct-chart .ct-series.ct-series-d .ct-slice-donut {\n  stroke: #62a3ff; }\n\n.ct-chart .ct-series.ct-series-e .ct-bar, .ct-chart .ct-series.ct-series-e .ct-line, .ct-chart .ct-series.ct-series-e .ct-point, .ct-chart .ct-series.ct-series-e .ct-slice-donut {\n  stroke: #36404a; }\n\n.ct-chart .ct-series.ct-series-f .ct-bar, .ct-chart .ct-series.ct-series-f .ct-line, .ct-chart .ct-series.ct-series-f .ct-point, .ct-chart .ct-series.ct-series-f .ct-slice-donut {\n  stroke: #7266ba; }\n\n.ct-chart .ct-series.ct-series-g .ct-bar, .ct-chart .ct-series.ct-series-g .ct-line, .ct-chart .ct-series.ct-series-g .ct-point, .ct-chart .ct-series.ct-series-g .ct-slice-donut {\n  stroke: #2bbbad; }\n\n.ct-series-a .ct-area, .ct-series-a .ct-slice-pie {\n  fill: #4285f4; }\n\n.ct-series-b .ct-area, .ct-series-b .ct-slice-pie {\n  fill: #fb6d9d; }\n\n.ct-series-c .ct-area, .ct-series-c .ct-slice-pie {\n  fill: #33b5e5; }\n\n.ct-series-d .ct-area, .ct-series-d .ct-slice-pie {\n  fill: #62a3ff; }\n\n.chartist-tooltip {\n  position: absolute;\n  display: inline-block;\n  opacity: 0;\n  min-width: 10px;\n  padding: 2px 10px;\n  border-radius: 3px;\n  background: #36404a;\n  color: #ffffff;\n  text-align: center;\n  pointer-events: none;\n  z-index: 1;\n  -webkit-transition: opacity .2s linear;\n  -moz-transition: opacity .2s linear;\n  -o-transition: opacity .2s linear;\n  transition: opacity .2s linear; }\n\n.chartist-tooltip.tooltip-show {\n  opacity: 1; }\n\n/* Circliful charts */\n.circliful-chart {\n  margin: 0 auto; }\n\n.circle-text, .circle-info, .circle-text-half, .circle-info-half {\n  font-size: 12px;\n  font-weight: 600; }\n\n/* Ricksaw Charts */\n#legend {\n  background: white;\n  position: absolute;\n  top: 0;\n  right: 15px; }\n\n#legend .line {\n  color: #333; }\n\n.rickshaw_graph svg {\n  max-width: 100%; }\n\n.rickshaw_legend .label {\n  font-family: inherit;\n  letter-spacing: 0.01em;\n  font-weight: 500;\n  box-shadow: none; }\n\n/* =============\n   Count Down\n============= */\n.home-wrapper {\n  margin: 10% 0; }\n\n.home-text {\n  font-weight: 500; }\n\n.u-countdown {\n  margin-top: 40px;\n  text-align: center;\n  color: #ffffff; }\n  .u-countdown div {\n    display: inline-block; }\n    .u-countdown div span {\n      display: block;\n      width: 150px; }\n      .u-countdown div span:first-child {\n        font-size: 3em;\n        font-weight: 500;\n        height: 48px;\n        line-height: 48px; }\n      .u-countdown div span:last-child {\n        font-size: 0.9em;\n        height: 25px;\n        line-height: 25px; }\n\n.u-countdown > * {\n  text-align: center; }\n\n.cd-text {\n  font-size: 15px;\n  line-height: 24px;\n  font-style: italic; }\n\n/* =============\n   Timeline\n============= */\n.cd-container {\n  width: 90%;\n  max-width: 1170px;\n  margin: 0 auto; }\n\n.cd-container::after {\n  content: '';\n  display: table;\n  clear: both; }\n\n#cd-timeline {\n  margin-bottom: 2em;\n  margin-top: 2em;\n  padding: 2em 0;\n  position: relative; }\n  #cd-timeline::before {\n    background: #ffffff;\n    content: '';\n    height: 100%;\n    left: 18px;\n    position: absolute;\n    top: 0;\n    width: 4px; }\n\n@media only screen and (min-width: 1170px) {\n  #cd-timeline {\n    margin-bottom: 3em;\n    margin-top: 3em; }\n    #cd-timeline::before {\n      left: 50%;\n      margin-left: -2px; } }\n.cd-timeline-block {\n  margin: 2em 0;\n  position: relative; }\n  .cd-timeline-block:after {\n    clear: both;\n    content: \"\";\n    display: table; }\n\n.cd-timeline-block:first-child {\n  margin-top: 0; }\n\n.cd-timeline-block:last-child {\n  margin-bottom: 0; }\n\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-block {\n    margin: 4em 0; }\n\n  .cd-timeline-block:first-child {\n    margin-top: 0; }\n\n  .cd-timeline-block:last-child {\n    margin-bottom: 0; } }\n.cd-timeline-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 40px;\n  height: 40px;\n  border-radius: 50%;\n  box-shadow: 0 0 0 4px white, inset 0 2px 0 rgba(0, 0, 0, 0.08), 0 3px 0 4px rgba(0, 0, 0, 0.05);\n  text-align: center;\n  line-height: 40px;\n  font-size: 20px;\n  color: #fff; }\n\n.cd-timeline-img.cd-success {\n  background: #2bbbad; }\n\n.cd-timeline-img.cd-info {\n  background: #33b5e5; }\n\n.cd-timeline-img.cd-pink {\n  background: #fb6d9d; }\n\n.cd-timeline-img.cd-danger {\n  background: #ef4554; }\n\n.cd-timeline-img.cd-primary {\n  background: #4285f4; }\n\n.cd-timeline-img.cd-warning {\n  background: #ff8800; }\n\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-img {\n    width: 60px;\n    height: 60px;\n    line-height: 60px;\n    left: 50%;\n    margin-left: -30px;\n    -webkit-transform: translateZ(0);\n    -webkit-backface-visibility: hidden; }\n\n  .cssanimations .cd-timeline-img.is-hidden {\n    visibility: hidden; }\n\n  .cssanimations .cd-timeline-img.bounce-in {\n    visibility: visible;\n    -webkit-animation: cd-bounce-1 0.6s;\n    -moz-animation: cd-bounce-1 0.6s;\n    animation: cd-bounce-1 0.6s; } }\n.cd-timeline-content {\n  -moz-box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  -webkit-box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  background: white;\n  border-radius: 0;\n  box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  margin-left: 60px;\n  padding: 1em;\n  position: relative; }\n  .cd-timeline-content img {\n    display: block;\n    width: 100%; }\n  .cd-timeline-content:after {\n    clear: both;\n    content: \"\";\n    display: table; }\n  .cd-timeline-content h2 {\n    margin-top: 0; }\n  .cd-timeline-content p {\n    color: #666666;\n    font-size: 14px;\n    margin: 10px 0 10px 0; }\n  .cd-timeline-content .cd-read-more {\n    background: #acb7c0;\n    border-radius: 0.25em;\n    color: white;\n    display: inline-block;\n    float: right;\n    font-size: 14px;\n    padding: .8em 1em; }\n  .cd-timeline-content .cd-date {\n    display: inline-block;\n    font-size: 14px; }\n  .cd-timeline-content h3 {\n    font-size: 21px;\n    margin: 0; }\n\n.no-touch .cd-timeline-content .cd-read-more:hover {\n  background-color: #bac4cb; }\n\n.cd-timeline-content .cd-date {\n  float: left;\n  padding: .8em 0;\n  opacity: .7; }\n\n.cd-timeline-content::before {\n  content: '';\n  position: absolute;\n  top: 16px;\n  right: 100%;\n  height: 0;\n  width: 0;\n  border: 7px solid transparent;\n  border-right: 7px solid white; }\n\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-content {\n    margin-left: 0;\n    padding: 1.6em;\n    width: 45%; }\n\n  .cd-timeline-content::before {\n    top: 24px;\n    left: 100%;\n    border-color: transparent;\n    border-left-color: white; }\n\n  .cd-timeline-content .cd-read-more {\n    float: left; }\n\n  .cd-timeline-content .cd-date {\n    position: absolute;\n    width: 100%;\n    left: 122%;\n    top: 6px; }\n\n  .cd-timeline-block:nth-child(even) .cd-timeline-content {\n    float: right; }\n\n  .cd-timeline-block:nth-child(even) .cd-timeline-content::before {\n    top: 24px;\n    left: auto;\n    right: 100%;\n    border-color: transparent;\n    border-right-color: white; }\n\n  .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more {\n    float: right; }\n\n  .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-date {\n    left: auto;\n    right: 122%;\n    text-align: right; }\n\n  .cssanimations .cd-timeline-content.is-hidden {\n    visibility: hidden; }\n\n  .cssanimations .cd-timeline-content.bounce-in {\n    visibility: visible;\n    -webkit-animation: cd-bounce-2 0.6s;\n    -moz-animation: cd-bounce-2 0.6s;\n    animation: cd-bounce-2 0.6s; } }\n@media only screen and (min-width: 1170px) {\n  .cssanimations .cd-timeline-block:nth-child(even) .cd-timeline-content.bounce-in {\n    -webkit-animation: cd-bounce-2-inverse 0.6s;\n    -moz-animation: cd-bounce-2-inverse 0.6s;\n    animation: cd-bounce-2-inverse 0.6s; } }\n/* Time line 2 */\n.timeline-2 {\n  border-left: 2px solid #98a6ad;\n  position: relative; }\n  .timeline-2 .time-item:after {\n    background-color: #ffffff;\n    border-color: #98a6ad;\n    border-radius: 10px;\n    border-style: solid;\n    border-width: 2px;\n    bottom: 0;\n    content: '';\n    height: 14px;\n    left: 0;\n    margin-left: -8px;\n    position: absolute;\n    top: 5px;\n    width: 14px; }\n\n.time-item {\n  border-color: #dee5e7;\n  padding-bottom: 1px;\n  position: relative; }\n  .time-item:before {\n    content: \" \";\n    display: table; }\n  .time-item:after {\n    background-color: #ffffff;\n    border-color: #98a6ad;\n    border-radius: 10px;\n    border-style: solid;\n    border-width: 2px;\n    bottom: 0;\n    content: '';\n    height: 14px;\n    left: 0;\n    margin-left: -8px;\n    position: absolute;\n    top: 5px;\n    width: 14px; }\n\n.time-item-item:after {\n  content: \" \";\n  display: table; }\n\n.item-info {\n  margin-bottom: 15px;\n  margin-left: 15px; }\n  .item-info p {\n    margin-bottom: 10px !important; }\n\n/* =============\n   Email\n============= */\n.mails a {\n  color: #797979; }\n.mails td {\n  vertical-align: middle !important;\n  position: relative; }\n  .mails td:last-of-type {\n    width: 100px;\n    padding-right: 20px; }\n.mails tr:hover .text-white {\n  display: none; }\n.mails .mail-select {\n  padding: 12px 20px;\n  min-width: 134px; }\n.mails .checkbox {\n  display: inline-block; }\n\n.mail-list .list-group-item {\n  background-color: transparent;\n  color: #36404a;\n  font-size: 0.95rem; }\n  .mail-list .list-group-item:hover {\n    background-color: #f4f8fb; }\n  .mail-list .list-group-item:focus {\n    background-color: #f4f8fb; }\n.mail-list .list-group-item.active {\n  color: #ef4554; }\n\n.unread a {\n  font-weight: 500;\n  color: #444444; }\n\n/* =============\n   Gallery\n============= */\n.port {\n  padding-bottom: 20px; }\n\n.portfolioFilter a {\n  color: #36404a;\n  border-radius: 3px;\n  padding: 5px 10px;\n  display: inline-block;\n  margin-bottom: 5px; }\n  .portfolioFilter a:hover {\n    background-color: #4285f4;\n    color: #ffffff; }\n.portfolioFilter a.current {\n  background-color: #4285f4;\n  color: #ffffff; }\n\n.gallery-second a {\n  box-shadow: none !important;\n  font-weight: 500; }\n  .gallery-second a:hover {\n    background-color: transparent;\n    color: #4285f4; }\n\n.thumb {\n  background-color: #ffffff;\n  border-radius: 3px;\n  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n  margin-top: 30px;\n  padding: 10px;\n  width: 100%; }\n\n.thumb-img {\n  border-radius: 2px;\n  overflow: hidden;\n  width: 100%; }\n\n.gal-detail h4 {\n  margin-top: 16px; }\n\n/* Gallery Second */\n.portfolio-masonry-box {\n  overflow: hidden;\n  position: relative;\n  padding: 0;\n  margin-top: 30px; }\n  .portfolio-masonry-box .portfolio-masonry-img {\n    position: relative;\n    overflow: hidden; }\n    .portfolio-masonry-box .portfolio-masonry-img:after {\n      content: \" \";\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0;\n      background: rgba(250, 250, 250, 0);\n      -webkit-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n      -moz-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n      -o-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n      transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1); }\n  .portfolio-masonry-box .portfolio-masonry-img > img {\n    -webkit-transition: all 0.3s cubic-bezier(0.3, 0.1, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0.3, 0.1, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0.3, 0.1, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0.3, 0.1, 0.58, 1);\n    border-radius: 0; }\n  .portfolio-masonry-box .portfolio-masonry-detail {\n    opacity: 0;\n    width: 100%;\n    padding: 20px 20px 0 20px;\n    box-sizing: border-box;\n    position: absolute;\n    left: 0;\n    text-align: center;\n    overflow: hidden;\n    -webkit-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n    -moz-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n    -o-transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1);\n    transition: all 0.27s cubic-bezier(0.3, 0.1, 0.58, 1); }\n    .portfolio-masonry-box .portfolio-masonry-detail h4 {\n      margin-bottom: 3px;\n      color: #ffffff !important;\n      font-weight: bold; }\n    .portfolio-masonry-box .portfolio-masonry-detail p {\n      color: #ffffff !important;\n      text-transform: uppercase;\n      font-size: 12px; }\n\n.portfolio-masonry-box:hover .portfolio-masonry-detail {\n  -webkit-transform: translateY(-100%);\n  -moz-transform: translateY(-100%);\n  transform: translateY(-100%);\n  z-index: 3;\n  opacity: 1; }\n.portfolio-masonry-box:hover .portfolio-masonry-img:after {\n  background: rgba(54, 64, 74, 0.7); }\n.portfolio-masonry-box:hover .portfolio-masonry-img > img {\n  -webkit-transform: scale(1.05);\n  -moz-transform: scale(1.05);\n  -o-transform: scale(1.05);\n  -ms-transform: scale(1.05);\n  transform: scale(1.05); }\n\n/* =============\n   Maintenance\n============= */\n.icon-main {\n  font-size: 88px;\n  margin-bottom: 50px; }\n\n.maintenance-page {\n  margin: 10% 0; }\n\n/* =============\n   Maps\n============= */\n.gmaps, .gmaps-panaroma {\n  height: 300px;\n  background: #eeeeee;\n  border-radius: 3px; }\n\n.gmaps-overlay {\n  display: block;\n  text-align: center;\n  color: #ffffff;\n  font-size: 16px;\n  line-height: 40px;\n  background: #4285f4;\n  border-radius: 4px;\n  padding: 10px 20px; }\n\n.gmaps-overlay_arrow {\n  left: 50%;\n  margin-left: -16px;\n  width: 0;\n  height: 0;\n  position: absolute; }\n\n.gmaps-overlay_arrow.above {\n  bottom: -15px;\n  border-left: 16px solid transparent;\n  border-right: 16px solid transparent;\n  border-top: 16px solid #4285f4; }\n\n.gmaps-overlay_arrow.below {\n  top: -15px;\n  border-left: 16px solid transparent;\n  border-right: 16px solid transparent;\n  border-bottom: 16px solid #4285f4; }\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n  width: 10px;\n  height: 10px;\n  line-height: 10px; }\n\n.jvectormap-zoomout {\n  top: 40px; }\n\n/* =============\n   Nestable\n============= */\n.custom-dd .dd-list .dd-item .dd-handle {\n  background: #f2f2f2;\n  border: none;\n  padding: 10px 16px;\n  height: auto;\n  font-weight: 500;\n  border-radius: 3px; }\n  .custom-dd .dd-list .dd-item .dd-handle:hover {\n    color: #62a3ff; }\n.custom-dd .dd-list .dd-item button {\n  height: auto;\n  font-size: 17px;\n  margin: 8px auto;\n  color: #555555;\n  width: 30px; }\n\n.custom-dd-empty .dd-list .dd3-handle {\n  border: none;\n  background: #f2f2f2;\n  height: 36px;\n  width: 36px; }\n  .custom-dd-empty .dd-list .dd3-handle:before {\n    color: inherit;\n    top: 7px; }\n  .custom-dd-empty .dd-list .dd3-handle:hover {\n    color: #62a3ff; }\n.custom-dd-empty .dd-list .dd3-content {\n  height: auto;\n  border: none;\n  padding: 10px 16px 10px 46px;\n  background: #f2f2f2;\n  font-weight: 500; }\n  .custom-dd-empty .dd-list .dd3-content:hover {\n    color: #62a3ff; }\n.custom-dd-empty .dd-list button {\n  width: 26px;\n  height: 26px;\n  font-size: 16px;\n  font-weight: 500; }\n\n/* =============\n   Pricing\n============= */\n.pricing-plan {\n  padding-bottom: 50px; }\n\n.price_card {\n  -moz-border-radius: 5px;\n  -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n  -webkit-border-radius: 5px;\n  background: #fafafa;\n  border-radius: 5px;\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n  margin-bottom: 30px;\n  padding-bottom: 20px;\n  position: relative;\n  -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); }\n  .price_card .name {\n    display: block;\n    font-size: 16px;\n    font-weight: 700;\n    padding: 0 0 30px;\n    text-align: center;\n    width: 100%; }\n  .price_card button {\n    margin-top: 20px; }\n\n.pricing-header {\n  -moz-border-radius-topleft: 5px;\n  -moz-border-radius-topright: 5px;\n  -webkit-border-top-left-radius: 5px;\n  -webkit-border-top-right-radius: 5px;\n  border-top-left-radius: 5px;\n  border-top-right-radius: 5px;\n  color: white; }\n\n.price {\n  display: block;\n  font-size: 48px;\n  font-weight: 300;\n  padding: 30px 0 10px;\n  text-align: center;\n  width: 100%; }\n\n.price-features {\n  color: #8a8a8a;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  text-align: center; }\n  .price-features li {\n    margin: 0 35px;\n    padding: 20px 15px; }\n\n.pricing-item {\n  margin: 0 0 30px;\n  position: relative;\n  text-align: center; }\n\n.pricing-item-inner {\n  -moz-transition: all 0.27s cubic-bezier(0, 0, 0.58, 1);\n  -ms-transition: all 0.27s cubic-bezier(0, 0, 0.58, 1);\n  -o-transition: all 0.27s cubic-bezier(0, 0, 0.58, 1);\n  -webkit-transition: all 0.27s cubic-bezier(0, 0, 0.58, 1);\n  border-radius: 7px;\n  border: 2px solid rgba(151, 160, 175, 0.2);\n  transition: all 0.27s cubic-bezier(0, 0, 0.58, 1);\n  vertical-align: middle; }\n\n.pricing-wrap {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden;\n  padding: 30px 20px;\n  position: relative;\n  text-align: center; }\n\n.pricing-icon {\n  font-size: 32px;\n  padding-bottom: 5px;\n  padding-top: 10px;\n  position: relative;\n  z-index: 1; }\n\n.pricing-title {\n  font-size: 16px;\n  font-weight: 700;\n  margin-bottom: 40px;\n  position: relative;\n  text-transform: uppercase;\n  z-index: 1; }\n\n.pr-list {\n  color: #97a0af;\n  font-size: 12px;\n  font-weight: 400;\n  margin: 0 -20px 30px;\n  padding: 0;\n  text-transform: uppercase; }\n  .pr-list li {\n    list-style: none;\n    padding: 12px 20px; }\n\n.pricing-num {\n  font-size: 40px;\n  font-weight: 700;\n  line-height: 1; }\n  .pricing-num sup {\n    font-size: 18px;\n    font-weight: 400;\n    left: -3px;\n    margin-left: -7px;\n    position: relative;\n    top: -20px; }\n\n.pr-per {\n  color: #97a0af;\n  font-size: 12px; }\n\n.pr-button {\n  margin-top: 30px; }\n\n/* =============\n   Profile\n============= */\n.profile-detail {\n  text-align: center;\n  padding: 30px 20px; }\n  .profile-detail img {\n    height: 120px;\n    width: 120px; }\n  .profile-detail .status-list li {\n    padding: 0 20px; }\n\n.profile-tabs li a {\n  color: #36404a !important; }\n.profile-tabs li.active a {\n  color: #ffffff !important; }\n\n.profile-pills li a {\n  color: rgba(54, 64, 74, 0.5) !important;\n  padding: 0 10px;\n  line-height: 30px !important; }\n  .profile-pills li a i {\n    font-size: 14px; }\n\n.comment {\n  padding-top: 12px; }\n  .comment .comment-avatar {\n    position: relative;\n    -webkit-border-radius: 3px;\n    -webkit-background-clip: padding-box;\n    -moz-border-radius: 3px;\n    -moz-background-clip: padding;\n    border-radius: 3px;\n    background-clip: padding-box;\n    display: block;\n    float: left;\n    height: 32px;\n    width: 32px; }\n  .comment .comment-body {\n    float: none;\n    margin-left: 40px;\n    position: relative;\n    margin-bottom: 20px; }\n  .comment .comment-text {\n    border: 1px solid #f2f2f2;\n    border-radius: 2px;\n    padding: 7px 12px 8px;\n    background-color: #fafafa; }\n  .comment .comment-header {\n    font-size: 12px;\n    padding-bottom: 2px; }\n    .comment .comment-header a {\n      color: #36404a;\n      font-weight: bold; }\n    .comment .comment-header span {\n      color: #98a6ad;\n      display: inline-block;\n      font-size: 11px;\n      margin-left: 5px; }\n  .comment .comment-footer {\n    display: block;\n    font-size: 12px;\n    padding: 4px 12px 0; }\n    .comment .comment-footer i {\n      font-size: 13px;\n      margin-right: 7px; }\n  .comment .comment-footer, .comment .comment-footer a {\n    color: rgba(54, 64, 74, 0.5); }\n    .comment .comment-footer:hover, .comment .comment-footer a:hover {\n      color: #62a3ff; }\n\n.comment > .comment {\n  margin-left: 32px !important; }\n\n/* =============\n  sitemap\n============= */\n.sitemap-wrapper a {\n  color: #555555; }\n  .sitemap-wrapper a:hover {\n    color: #62a3ff; }\n.sitemap-wrapper h5 {\n  font-weight: 600;\n  font-size: 16px;\n  line-height: 32px; }\n  .sitemap-wrapper h5 i {\n    padding-right: 10px; }\n.sitemap-wrapper ul {\n  padding-left: 30px; }\n  .sitemap-wrapper ul li a {\n    font-size: 15px;\n    line-height: 30px; }\n\n/* =============\n  FAQ\n============= */\n.faq-box {\n  padding: 24px 0;\n  border-bottom: 1px solid #f2f2f2; }\n  .faq-box .question {\n    font-size: 16px;\n    margin-top: 0; }\n  .faq-box .answer {\n    color: #98a6ad;\n    margin-bottom: 0; }\n\n/* =============\n  Search result\n============= */\n.search-result-box .tab-content {\n  padding: 30px 30px 10px 30px;\n  box-shadow: none; }\n.search-result-box .search-item {\n  padding-bottom: 20px;\n  border-bottom: 1px solid #ebeff2;\n  margin-bottom: 30px; }\n\n/* =============\n  Contact\n============= */\n.contact-search .btn-white {\n  position: absolute;\n  top: 1px;\n  right: 16px;\n  background-color: transparent !important;\n  border: none !important;\n  font-size: 16px;\n  box-shadow: none !important;\n  outline: none !important;\n  color: #98a6ad; }\n\n.contact-card {\n  position: relative; }\n  .contact-card:hover .contact-action {\n    display: block; }\n  .contact-card img {\n    width: 80px;\n    height: 80px; }\n  .contact-card .member-info {\n    padding-left: 100px;\n    padding-bottom: 20px; }\n    .contact-card .member-info h4, .contact-card .member-info p {\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      width: 100%;\n      white-space: nowrap; }\n  .contact-card .contact-action {\n    position: absolute;\n    right: 0;\n    top: 0;\n    display: none; }\n\n/* =============\n  Opportunities\n============= */\n.opport-box .checkbx-detail {\n  width: 30px; }\n.opport-box .lable-detail {\n  text-align: center;\n  width: 20%; }\n.opport-box .member-info {\n  padding-right: 10px; }\n  .opport-box .member-info h4 {\n    font-size: 16px;\n    display: block;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis; }\n  .opport-box .member-info p {\n    font-size: 13px;\n    display: block;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis; }\n\n/* =============\n  Product\n============= */\n.product-list-box {\n  position: relative; }\n  .product-list-box img {\n    height: auto;\n    margin: 0 auto;\n    display: block; }\n  .product-list-box .product-action {\n    position: absolute;\n    right: 20px;\n    top: 20px;\n    display: none; }\n  .product-list-box .price-tag {\n    float: right;\n    height: 64px;\n    width: 64px;\n    text-align: center;\n    line-height: 64px;\n    background-color: rgba(152, 166, 173, 0.2);\n    border: 1px solid #98a6ad;\n    border-radius: 50%;\n    margin-top: 20px;\n    font-size: 18px;\n    font-weight: 600;\n    margin-right: 10px; }\n  .product-list-box .detail {\n    padding: 20px;\n    margin: 0px -10px -10px;\n    overflow: hidden; }\n    .product-list-box .detail h4 a {\n      white-space: nowrap;\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      font-weight: 600; }\n  .product-list-box:hover .product-action {\n    display: block; }\n\n.rating ul {\n  margin-left: 0; }\n  .rating ul li {\n    padding: 0; }\n    .rating ul li a {\n      color: #ff8800;\n      font-size: 15px;\n      margin-bottom: 0; }\n\n.product-search {\n  border-radius: 30px;\n  padding: 7px 22px;\n  background-color: transparent !important;\n  border: 2px solid #98a6ad !important; }\n\n.product-detail-box .sp-wrap {\n  max-width: 100%; }\n\n/* =============\n   Accounts pages\n============= */\n.account-pages {\n  background: url(\"../images/bg.png\");\n  position: absolute;\n  background-size: cover;\n  height: 100%;\n  width: 100%;\n  top: 0; }\n\n.wrapper-page {\n  margin: 5% auto;\n  position: relative;\n  width: 420px; }\n  .wrapper-page .card-box {\n    border: 1px solid rgba(54, 64, 74, 0.1); }\n\n.panel-pages {\n  border-radius: 6px; }\n  .panel-pages .panel-body {\n    padding: 30px; }\n  .panel-pages .panel-heading {\n    -moz-border-radius: 6px 6px 0 0;\n    -webkit-border-radius: 6px 6px 0 0;\n    border-radius: 6px 6px 0 0;\n    padding: 40px 20px;\n    position: relative; }\n    .panel-pages .panel-heading h3 {\n      position: relative;\n      z-index: 999; }\n\n.user-thumb {\n  position: relative;\n  z-index: 999; }\n  .user-thumb img {\n    height: 88px;\n    margin: 0 auto;\n    width: 88px; }\n\n.ex-page-content .text-error {\n  color: #252932;\n  font-size: 98px;\n  font-weight: 700;\n  line-height: 150px; }\n  .ex-page-content .text-error i {\n    font-size: 78px;\n    padding: 0 10px; }\n\n/* signup-signin-page */\n.signup-signin-page {\n  width: auto; }\n\n/* =============\n   Tree view page\n============= */\n.jstree-default .jstree-clicked {\n  background: rgba(98, 163, 255, 0.4);\n  box-shadow: none; }\n.jstree-default .jstree-hovered {\n  background: rgba(98, 163, 255, 0.2);\n  box-shadow: none; }\n.jstree-default .jstree-wholerow-clicked {\n  background: rgba(98, 163, 255, 0.4); }\n.jstree-default .jstree-wholerow-hovered {\n  background: rgba(98, 163, 255, 0.2); }\n.jstree-default .zmdi {\n  font-size: 16px; }\n\n/* =============\n   Tour page\n============= */\ndiv.hopscotch-bubble {\n  border: 3px solid #36404a;\n  border-radius: 5px;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }\n  div.hopscotch-bubble .hopscotch-next {\n    background-color: #36404a !important;\n    background-image: none !important;\n    border-color: #36404a !important;\n    text-shadow: none !important;\n    margin: 0 0 0 5px !important; }\n  div.hopscotch-bubble .hopscotch-prev {\n    background-color: #36404a !important;\n    background-image: none !important;\n    border-color: #36404a !important;\n    text-shadow: none !important;\n    color: #ffffff !important; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-number {\n  background: #36404a;\n  padding: 0;\n  border-radius: 50%; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow-border {\n  border-right: 19px solid #36404a; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow {\n  border-left: 19px solid #36404a;\n  left: -2px; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow {\n  border: none; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow-border {\n  border-left: 0 solid #36404a; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow {\n  border-bottom: 19px solid #36404a;\n  top: 0; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow-border {\n  border-bottom: 0 solid rgba(0, 0, 0, 0.5); }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow {\n  border-top: 19px solid #36404a;\n  top: -2px; }\n\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow-border {\n  border-top: 0 solid rgba(0, 0, 0, 0.5); }\n\n/* =============\n  Task board\n============= */\n.taskList li {\n  background-color: #fafafa;\n  border: 1px solid rgba(152, 166, 173, 0.2);\n  border-left-width: 3px;\n  border-radius: 3px;\n  padding: 10px;\n  margin-bottom: 15px; }\n.taskList .task-success {\n  border-left-color: #2bbbad; }\n.taskList .task-info {\n  border-left-color: #33b5e5; }\n.taskList .task-warning {\n  border-left-color: #ff8800; }\n.taskList .task-danger {\n  border-left-color: #ef4554; }\n.taskList a {\n  font-size: 13px; }\n.taskList .checkbox {\n  margin-left: 20px; }\n\n.task-placeholder {\n  border: 1px dashed rgba(152, 166, 173, 0.5) !important;\n  background-color: rgba(152, 166, 173, 0.2) !important;\n  padding: 20px; }\n\n@media only screen and (max-width: 6000px) and (min-width: 700px) {\n  .wrapper.right-bar-enabled .right-bar {\n    right: 0;\n    z-index: 99; } }\n@media (min-width: 768px) and (max-width: 1024px) {\n  .email-msg {\n    display: none; } }\n@media (min-width: 768px) and (max-width: 991px) {\n  body {\n    overflow-x: hidden; } }\n@media (max-width: 767px) {\n  body {\n    overflow-x: hidden; }\n\n  .app-search {\n    display: none; }\n\n  .left.side-menu, .sidebar-inner.slimscrollleft {\n    overflow: auto !important; }\n\n  .enlarged .left.side-menu {\n    margin-left: -75px; }\n\n  .content-page {\n    margin-left: 0px !important; }\n\n  .footer {\n    left: 0px !important; }\n\n  .mobile-sidebar {\n    left: 0px; }\n\n  .mobile-content {\n    left: 250px;\n    right: -250px; }\n\n  .wrapper-page {\n    width: 90%; }\n\n  .wizard > .steps > ul > li {\n    width: 100%; }\n\n  .wizard > .content {\n    padding: 0px !important; }\n\n  .wizard > .content > .body {\n    float: none;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    padding: 0%; }\n\n  .wizard.vertical > .steps {\n    display: inline;\n    float: none;\n    width: 100%; }\n\n  .wizard.vertical > .content {\n    display: inline;\n    float: none;\n    margin: 0%;\n    width: 100%; }\n\n  .navbar-nav .open .dropdown-menu {\n    background-color: #ffffff;\n    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n    left: auto;\n    position: absolute;\n    right: 0; }\n\n  .todo-send {\n    margin-top: 10px;\n    padding-left: 15px; }\n\n  .chat-inputbar {\n    padding-left: 15px; }\n\n  .chat-send {\n    margin-top: 10px;\n    padding-left: 15px;\n    padding-right: 15px; }\n\n  .dataTables_wrapper .col-xs-6 {\n    width: 100%;\n    text-align: left; }\n\n  .product-search {\n    margin-bottom: 30px; }\n\n  .top-menu-item-xs {\n    display: inline-flex !important; }\n\n  .dropdown-menu-lg {\n    width: 240px !important; }\n\n  .page-header-box .breadcrumb {\n    display: none; } }\n@media (max-width: 480px) {\n  .navbar-custom {\n    margin-left: 70px !important; }\n\n  .side-menu {\n    z-index: 10 !important; }\n\n  .button-menu-mobile {\n    display: block; }\n\n  .search-bar {\n    display: none !important; }\n\n  .ms-container {\n    width: 100%; } }\n@media (max-width: 420px) {\n  .hide-phone {\n    display: none !important; } }\n/* Container-alt */\n@media (min-width: 768px) {\n  .container-alt {\n    width: 750px; } }\n@media (min-width: 992px) {\n  .container-alt {\n    width: 970px; } }\n@media (min-width: 1200px) {\n  .container-alt {\n    width: 1170px; } }\n@media (max-width: 419px) {\n  .topbar-left {\n    width: 70px !important; }\n\n  .logo .icon-c-logo {\n    display: inline-block !important;\n    line-height: 58px !important; }\n  .logo span {\n    display: none !important; }\n\n  .content-page {\n    margin-left: 70px; }\n\n  .forced .side-menu.left {\n    box-shadow: 0 12px 12px rgba(0, 0, 0, 0.1); }\n\n  .enlarged .side-menu.left {\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) !important; }\n\n  .conversation-list .conversation-text, .conversation-list .odd .conversation-text {\n    width: 100% !important; } }\n\n/*# sourceMappingURL=style.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/fonts/typicons.less",
    "content": "@charset 'UTF-8';\n \n/* @FONT-FACE loads font into browser */\n@font-face {\n  font-family: 'typicons';\n  font-weight: normal;\n  font-style: normal;\n  src: url('../fonts/typicons.eot');\n  src: url('../fonts/typicons.eot?#iefix') format('embedded-opentype'),\n       url('../fonts/typicons.woff') format('woff'),\n       url('../fonts/typicons.ttf') format('truetype'),\n       url('../fonts/typicons.svg#typicons') format('svg');\n}\n \n/* :before psuedo-selector inserts and styles icon */\n.typcn:before {\n  font-family: 'typicons';\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  height: 1em;\n  font-size: 1em;\n  text-align: center;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n}\n \n/* Code for individual icons */ \n.typcn-adjust-brightness:before { \n  content: '\\e000'; /* '' */\n} \n.typcn-adjust-contrast:before { \n  content: '\\e001'; /* '' */\n} \n.typcn-anchor-outline:before { \n  content: '\\e002'; /* '' */\n} \n.typcn-anchor:before { \n  content: '\\e003'; /* '' */\n} \n.typcn-archive:before { \n  content: '\\e004'; /* '' */\n} \n.typcn-arrow-back-outline:before { \n  content: '\\e005'; /* '' */\n} \n.typcn-arrow-back:before { \n  content: '\\e006'; /* '' */\n} \n.typcn-arrow-down-outline:before { \n  content: '\\e007'; /* '' */\n} \n.typcn-arrow-down-thick:before { \n  content: '\\e008'; /* '' */\n} \n.typcn-arrow-down:before { \n  content: '\\e009'; /* '' */\n} \n.typcn-arrow-forward-outline:before { \n  content: '\\e00a'; /* '' */\n} \n.typcn-arrow-forward:before { \n  content: '\\e00b'; /* '' */\n} \n.typcn-arrow-left-outline:before { \n  content: '\\e00c'; /* '' */\n} \n.typcn-arrow-left-thick:before { \n  content: '\\e00d'; /* '' */\n} \n.typcn-arrow-left:before { \n  content: '\\e00e'; /* '' */\n} \n.typcn-arrow-loop-outline:before { \n  content: '\\e00f'; /* '' */\n} \n.typcn-arrow-loop:before { \n  content: '\\e010'; /* '' */\n} \n.typcn-arrow-maximise-outline:before { \n  content: '\\e011'; /* '' */\n} \n.typcn-arrow-maximise:before { \n  content: '\\e012'; /* '' */\n} \n.typcn-arrow-minimise-outline:before { \n  content: '\\e013'; /* '' */\n} \n.typcn-arrow-minimise:before { \n  content: '\\e014'; /* '' */\n} \n.typcn-arrow-move-outline:before { \n  content: '\\e015'; /* '' */\n} \n.typcn-arrow-move:before { \n  content: '\\e016'; /* '' */\n} \n.typcn-arrow-repeat-outline:before { \n  content: '\\e017'; /* '' */\n} \n.typcn-arrow-repeat:before { \n  content: '\\e018'; /* '' */\n} \n.typcn-arrow-right-outline:before { \n  content: '\\e019'; /* '' */\n} \n.typcn-arrow-right-thick:before { \n  content: '\\e01a'; /* '' */\n} \n.typcn-arrow-right:before { \n  content: '\\e01b'; /* '' */\n} \n.typcn-arrow-shuffle:before { \n  content: '\\e01c'; /* '' */\n} \n.typcn-arrow-sorted-down:before { \n  content: '\\e01d'; /* '' */\n} \n.typcn-arrow-sorted-up:before { \n  content: '\\e01e'; /* '' */\n} \n.typcn-arrow-sync-outline:before { \n  content: '\\e01f'; /* '' */\n} \n.typcn-arrow-sync:before { \n  content: '\\e020'; /* '' */\n} \n.typcn-arrow-unsorted:before { \n  content: '\\e021'; /* '' */\n} \n.typcn-arrow-up-outline:before { \n  content: '\\e022'; /* '' */\n} \n.typcn-arrow-up-thick:before { \n  content: '\\e023'; /* '' */\n} \n.typcn-arrow-up:before { \n  content: '\\e024'; /* '' */\n} \n.typcn-at:before { \n  content: '\\e025'; /* '' */\n} \n.typcn-attachment-outline:before { \n  content: '\\e026'; /* '' */\n} \n.typcn-attachment:before { \n  content: '\\e027'; /* '' */\n} \n.typcn-backspace-outline:before { \n  content: '\\e028'; /* '' */\n} \n.typcn-backspace:before { \n  content: '\\e029'; /* '' */\n} \n.typcn-battery-charge:before { \n  content: '\\e02a'; /* '' */\n} \n.typcn-battery-full:before { \n  content: '\\e02b'; /* '' */\n} \n.typcn-battery-high:before { \n  content: '\\e02c'; /* '' */\n} \n.typcn-battery-low:before { \n  content: '\\e02d'; /* '' */\n} \n.typcn-battery-mid:before { \n  content: '\\e02e'; /* '' */\n} \n.typcn-beaker:before { \n  content: '\\e02f'; /* '' */\n} \n.typcn-beer:before { \n  content: '\\e030'; /* '' */\n} \n.typcn-bell:before { \n  content: '\\e031'; /* '' */\n} \n.typcn-book:before { \n  content: '\\e032'; /* '' */\n} \n.typcn-bookmark:before { \n  content: '\\e033'; /* '' */\n} \n.typcn-briefcase:before { \n  content: '\\e034'; /* '' */\n} \n.typcn-brush:before { \n  content: '\\e035'; /* '' */\n} \n.typcn-business-card:before { \n  content: '\\e036'; /* '' */\n} \n.typcn-calculator:before { \n  content: '\\e037'; /* '' */\n} \n.typcn-calendar-outline:before { \n  content: '\\e038'; /* '' */\n} \n.typcn-calendar:before { \n  content: '\\e039'; /* '' */\n} \n.typcn-camera-outline:before { \n  content: '\\e03a'; /* '' */\n} \n.typcn-camera:before { \n  content: '\\e03b'; /* '' */\n} \n.typcn-cancel-outline:before { \n  content: '\\e03c'; /* '' */\n} \n.typcn-cancel:before { \n  content: '\\e03d'; /* '' */\n} \n.typcn-chart-area-outline:before { \n  content: '\\e03e'; /* '' */\n} \n.typcn-chart-area:before { \n  content: '\\e03f'; /* '' */\n} \n.typcn-chart-bar-outline:before { \n  content: '\\e040'; /* '' */\n} \n.typcn-chart-bar:before { \n  content: '\\e041'; /* '' */\n} \n.typcn-chart-line-outline:before { \n  content: '\\e042'; /* '' */\n} \n.typcn-chart-line:before { \n  content: '\\e043'; /* '' */\n} \n.typcn-chart-pie-outline:before { \n  content: '\\e044'; /* '' */\n} \n.typcn-chart-pie:before { \n  content: '\\e045'; /* '' */\n} \n.typcn-chevron-left-outline:before { \n  content: '\\e046'; /* '' */\n} \n.typcn-chevron-left:before { \n  content: '\\e047'; /* '' */\n} \n.typcn-chevron-right-outline:before { \n  content: '\\e048'; /* '' */\n} \n.typcn-chevron-right:before { \n  content: '\\e049'; /* '' */\n} \n.typcn-clipboard:before { \n  content: '\\e04a'; /* '' */\n} \n.typcn-cloud-storage:before { \n  content: '\\e04b'; /* '' */\n} \n.typcn-cloud-storage-outline:before { \n  content: '\\e054'; /* '' */\n} \n.typcn-code-outline:before { \n  content: '\\e04c'; /* '' */\n} \n.typcn-code:before { \n  content: '\\e04d'; /* '' */\n} \n.typcn-coffee:before { \n  content: '\\e04e'; /* '' */\n} \n.typcn-cog-outline:before { \n  content: '\\e04f'; /* '' */\n} \n.typcn-cog:before { \n  content: '\\e050'; /* '' */\n} \n.typcn-compass:before { \n  content: '\\e051'; /* '' */\n} \n.typcn-contacts:before { \n  content: '\\e052'; /* '' */\n} \n.typcn-credit-card:before { \n  content: '\\e053'; /* '' */\n} \n.typcn-css3:before { \n  content: '\\e055'; /* '' */\n} \n.typcn-database:before { \n  content: '\\e056'; /* '' */\n} \n.typcn-delete-outline:before { \n  content: '\\e057'; /* '' */\n} \n.typcn-delete:before { \n  content: '\\e058'; /* '' */\n} \n.typcn-device-desktop:before { \n  content: '\\e059'; /* '' */\n} \n.typcn-device-laptop:before { \n  content: '\\e05a'; /* '' */\n} \n.typcn-device-phone:before { \n  content: '\\e05b'; /* '' */\n} \n.typcn-device-tablet:before { \n  content: '\\e05c'; /* '' */\n} \n.typcn-directions:before { \n  content: '\\e05d'; /* '' */\n} \n.typcn-divide-outline:before { \n  content: '\\e05e'; /* '' */\n} \n.typcn-divide:before { \n  content: '\\e05f'; /* '' */\n} \n.typcn-document-add:before { \n  content: '\\e060'; /* '' */\n} \n.typcn-document-delete:before { \n  content: '\\e061'; /* '' */\n} \n.typcn-document-text:before { \n  content: '\\e062'; /* '' */\n} \n.typcn-document:before { \n  content: '\\e063'; /* '' */\n} \n.typcn-download-outline:before { \n  content: '\\e064'; /* '' */\n} \n.typcn-download:before { \n  content: '\\e065'; /* '' */\n} \n.typcn-dropbox:before { \n  content: '\\e066'; /* '' */\n} \n.typcn-edit:before { \n  content: '\\e067'; /* '' */\n} \n.typcn-eject-outline:before { \n  content: '\\e068'; /* '' */\n} \n.typcn-eject:before { \n  content: '\\e069'; /* '' */\n} \n.typcn-equals-outline:before { \n  content: '\\e06a'; /* '' */\n} \n.typcn-equals:before { \n  content: '\\e06b'; /* '' */\n} \n.typcn-export-outline:before { \n  content: '\\e06c'; /* '' */\n} \n.typcn-export:before { \n  content: '\\e06d'; /* '' */\n} \n.typcn-eye-outline:before { \n  content: '\\e06e'; /* '' */\n} \n.typcn-eye:before { \n  content: '\\e06f'; /* '' */\n} \n.typcn-feather:before { \n  content: '\\e070'; /* '' */\n} \n.typcn-film:before { \n  content: '\\e071'; /* '' */\n} \n.typcn-filter:before { \n  content: '\\e072'; /* '' */\n} \n.typcn-flag-outline:before { \n  content: '\\e073'; /* '' */\n} \n.typcn-flag:before { \n  content: '\\e074'; /* '' */\n} \n.typcn-flash-outline:before { \n  content: '\\e075'; /* '' */\n} \n.typcn-flash:before { \n  content: '\\e076'; /* '' */\n} \n.typcn-flow-children:before { \n  content: '\\e077'; /* '' */\n} \n.typcn-flow-merge:before { \n  content: '\\e078'; /* '' */\n} \n.typcn-flow-parallel:before { \n  content: '\\e079'; /* '' */\n} \n.typcn-flow-switch:before { \n  content: '\\e07a'; /* '' */\n} \n.typcn-folder-add:before { \n  content: '\\e07b'; /* '' */\n} \n.typcn-folder-delete:before { \n  content: '\\e07c'; /* '' */\n} \n.typcn-folder-open:before { \n  content: '\\e07d'; /* '' */\n} \n.typcn-folder:before { \n  content: '\\e07e'; /* '' */\n} \n.typcn-gift:before { \n  content: '\\e07f'; /* '' */\n} \n.typcn-globe-outline:before { \n  content: '\\e080'; /* '' */\n} \n.typcn-globe:before { \n  content: '\\e081'; /* '' */\n} \n.typcn-group-outline:before { \n  content: '\\e082'; /* '' */\n} \n.typcn-group:before { \n  content: '\\e083'; /* '' */\n} \n.typcn-headphones:before { \n  content: '\\e084'; /* '' */\n} \n.typcn-heart-full-outline:before { \n  content: '\\e085'; /* '' */\n} \n.typcn-heart-half-outline:before { \n  content: '\\e086'; /* '' */\n} \n.typcn-heart-outline:before { \n  content: '\\e087'; /* '' */\n} \n.typcn-heart:before { \n  content: '\\e088'; /* '' */\n} \n.typcn-home-outline:before { \n  content: '\\e089'; /* '' */\n} \n.typcn-home:before { \n  content: '\\e08a'; /* '' */\n} \n.typcn-html5:before { \n  content: '\\e08b'; /* '' */\n} \n.typcn-image-outline:before { \n  content: '\\e08c'; /* '' */\n} \n.typcn-image:before { \n  content: '\\e08d'; /* '' */\n} \n.typcn-infinity-outline:before { \n  content: '\\e08e'; /* '' */\n} \n.typcn-infinity:before { \n  content: '\\e08f'; /* '' */\n} \n.typcn-info-large-outline:before { \n  content: '\\e090'; /* '' */\n} \n.typcn-info-large:before { \n  content: '\\e091'; /* '' */\n} \n.typcn-info-outline:before { \n  content: '\\e092'; /* '' */\n} \n.typcn-info:before { \n  content: '\\e093'; /* '' */\n} \n.typcn-input-checked-outline:before { \n  content: '\\e094'; /* '' */\n} \n.typcn-input-checked:before { \n  content: '\\e095'; /* '' */\n} \n.typcn-key-outline:before { \n  content: '\\e096'; /* '' */\n} \n.typcn-key:before { \n  content: '\\e097'; /* '' */\n} \n.typcn-keyboard:before { \n  content: '\\e098'; /* '' */\n} \n.typcn-leaf:before { \n  content: '\\e099'; /* '' */\n} \n.typcn-lightbulb:before { \n  content: '\\e09a'; /* '' */\n} \n.typcn-link-outline:before { \n  content: '\\e09b'; /* '' */\n} \n.typcn-link:before { \n  content: '\\e09c'; /* '' */\n} \n.typcn-location-arrow-outline:before { \n  content: '\\e09d'; /* '' */\n} \n.typcn-location-arrow:before { \n  content: '\\e09e'; /* '' */\n} \n.typcn-location-outline:before { \n  content: '\\e09f'; /* '' */\n} \n.typcn-location:before { \n  content: '\\e0a0'; /* '' */\n} \n.typcn-lock-closed-outline:before { \n  content: '\\e0a1'; /* '' */\n} \n.typcn-lock-closed:before { \n  content: '\\e0a2'; /* '' */\n} \n.typcn-lock-open-outline:before { \n  content: '\\e0a3'; /* '' */\n} \n.typcn-lock-open:before { \n  content: '\\e0a4'; /* '' */\n} \n.typcn-mail:before { \n  content: '\\e0a5'; /* '' */\n} \n.typcn-map:before { \n  content: '\\e0a6'; /* '' */\n} \n.typcn-media-eject-outline:before { \n  content: '\\e0a7'; /* '' */\n} \n.typcn-media-eject:before { \n  content: '\\e0a8'; /* '' */\n} \n.typcn-media-fast-forward-outline:before { \n  content: '\\e0a9'; /* '' */\n} \n.typcn-media-fast-forward:before { \n  content: '\\e0aa'; /* '' */\n} \n.typcn-media-pause-outline:before { \n  content: '\\e0ab'; /* '' */\n} \n.typcn-media-pause:before { \n  content: '\\e0ac'; /* '' */\n} \n.typcn-media-play-outline:before { \n  content: '\\e0ad'; /* '' */\n} \n.typcn-media-play-reverse-outline:before { \n  content: '\\e0ae'; /* '' */\n} \n.typcn-media-play-reverse:before { \n  content: '\\e0af'; /* '' */\n} \n.typcn-media-play:before { \n  content: '\\e0b0'; /* '' */\n} \n.typcn-media-record-outline:before { \n  content: '\\e0b1'; /* '' */\n} \n.typcn-media-record:before { \n  content: '\\e0b2'; /* '' */\n} \n.typcn-media-rewind-outline:before { \n  content: '\\e0b3'; /* '' */\n} \n.typcn-media-rewind:before { \n  content: '\\e0b4'; /* '' */\n} \n.typcn-media-stop-outline:before { \n  content: '\\e0b5'; /* '' */\n} \n.typcn-media-stop:before { \n  content: '\\e0b6'; /* '' */\n} \n.typcn-message-typing:before { \n  content: '\\e0b7'; /* '' */\n} \n.typcn-message:before { \n  content: '\\e0b8'; /* '' */\n} \n.typcn-messages:before { \n  content: '\\e0b9'; /* '' */\n} \n.typcn-microphone-outline:before { \n  content: '\\e0ba'; /* '' */\n} \n.typcn-microphone:before { \n  content: '\\e0bb'; /* '' */\n} \n.typcn-minus-outline:before { \n  content: '\\e0bc'; /* '' */\n} \n.typcn-minus:before { \n  content: '\\e0bd'; /* '' */\n} \n.typcn-mortar-board:before { \n  content: '\\e0be'; /* '' */\n} \n.typcn-news:before { \n  content: '\\e0bf'; /* '' */\n} \n.typcn-notes-outline:before { \n  content: '\\e0c0'; /* '' */\n} \n.typcn-notes:before { \n  content: '\\e0c1'; /* '' */\n} \n.typcn-pen:before { \n  content: '\\e0c2'; /* '' */\n} \n.typcn-pencil:before { \n  content: '\\e0c3'; /* '' */\n} \n.typcn-phone-outline:before { \n  content: '\\e0c4'; /* '' */\n} \n.typcn-phone:before { \n  content: '\\e0c5'; /* '' */\n} \n.typcn-pi-outline:before { \n  content: '\\e0c6'; /* '' */\n} \n.typcn-pi:before { \n  content: '\\e0c7'; /* '' */\n} \n.typcn-pin-outline:before { \n  content: '\\e0c8'; /* '' */\n} \n.typcn-pin:before { \n  content: '\\e0c9'; /* '' */\n} \n.typcn-pipette:before { \n  content: '\\e0ca'; /* '' */\n} \n.typcn-plane-outline:before { \n  content: '\\e0cb'; /* '' */\n} \n.typcn-plane:before { \n  content: '\\e0cc'; /* '' */\n} \n.typcn-plug:before { \n  content: '\\e0cd'; /* '' */\n} \n.typcn-plus-outline:before { \n  content: '\\e0ce'; /* '' */\n} \n.typcn-plus:before { \n  content: '\\e0cf'; /* '' */\n} \n.typcn-point-of-interest-outline:before { \n  content: '\\e0d0'; /* '' */\n} \n.typcn-point-of-interest:before { \n  content: '\\e0d1'; /* '' */\n} \n.typcn-power-outline:before { \n  content: '\\e0d2'; /* '' */\n} \n.typcn-power:before { \n  content: '\\e0d3'; /* '' */\n} \n.typcn-printer:before { \n  content: '\\e0d4'; /* '' */\n} \n.typcn-puzzle-outline:before { \n  content: '\\e0d5'; /* '' */\n} \n.typcn-puzzle:before { \n  content: '\\e0d6'; /* '' */\n} \n.typcn-radar-outline:before { \n  content: '\\e0d7'; /* '' */\n} \n.typcn-radar:before { \n  content: '\\e0d8'; /* '' */\n} \n.typcn-refresh-outline:before { \n  content: '\\e0d9'; /* '' */\n} \n.typcn-refresh:before { \n  content: '\\e0da'; /* '' */\n} \n.typcn-rss-outline:before { \n  content: '\\e0db'; /* '' */\n} \n.typcn-rss:before { \n  content: '\\e0dc'; /* '' */\n} \n.typcn-scissors-outline:before { \n  content: '\\e0dd'; /* '' */\n} \n.typcn-scissors:before { \n  content: '\\e0de'; /* '' */\n} \n.typcn-shopping-bag:before { \n  content: '\\e0df'; /* '' */\n} \n.typcn-shopping-cart:before { \n  content: '\\e0e0'; /* '' */\n} \n.typcn-social-at-circular:before { \n  content: '\\e0e1'; /* '' */\n} \n.typcn-social-dribbble-circular:before { \n  content: '\\e0e2'; /* '' */\n} \n.typcn-social-dribbble:before { \n  content: '\\e0e3'; /* '' */\n} \n.typcn-social-facebook-circular:before { \n  content: '\\e0e4'; /* '' */\n} \n.typcn-social-facebook:before { \n  content: '\\e0e5'; /* '' */\n} \n.typcn-social-flickr-circular:before { \n  content: '\\e0e6'; /* '' */\n} \n.typcn-social-flickr:before { \n  content: '\\e0e7'; /* '' */\n} \n.typcn-social-github-circular:before { \n  content: '\\e0e8'; /* '' */\n} \n.typcn-social-github:before { \n  content: '\\e0e9'; /* '' */\n} \n.typcn-social-google-plus-circular:before { \n  content: '\\e0ea'; /* '' */\n} \n.typcn-social-google-plus:before { \n  content: '\\e0eb'; /* '' */\n} \n.typcn-social-instagram-circular:before { \n  content: '\\e0ec'; /* '' */\n} \n.typcn-social-instagram:before { \n  content: '\\e0ed'; /* '' */\n} \n.typcn-social-last-fm-circular:before { \n  content: '\\e0ee'; /* '' */\n} \n.typcn-social-last-fm:before { \n  content: '\\e0ef'; /* '' */\n} \n.typcn-social-linkedin-circular:before { \n  content: '\\e0f0'; /* '' */\n} \n.typcn-social-linkedin:before { \n  content: '\\e0f1'; /* '' */\n} \n.typcn-social-pinterest-circular:before { \n  content: '\\e0f2'; /* '' */\n} \n.typcn-social-pinterest:before { \n  content: '\\e0f3'; /* '' */\n} \n.typcn-social-skype-outline:before { \n  content: '\\e0f4'; /* '' */\n} \n.typcn-social-skype:before { \n  content: '\\e0f5'; /* '' */\n} \n.typcn-social-tumbler-circular:before { \n  content: '\\e0f6'; /* '' */\n} \n.typcn-social-tumbler:before { \n  content: '\\e0f7'; /* '' */\n} \n.typcn-social-twitter-circular:before { \n  content: '\\e0f8'; /* '' */\n} \n.typcn-social-twitter:before { \n  content: '\\e0f9'; /* '' */\n} \n.typcn-social-vimeo-circular:before { \n  content: '\\e0fa'; /* '' */\n} \n.typcn-social-vimeo:before { \n  content: '\\e0fb'; /* '' */\n} \n.typcn-social-youtube-circular:before { \n  content: '\\e0fc'; /* '' */\n} \n.typcn-social-youtube:before { \n  content: '\\e0fd'; /* '' */\n} \n.typcn-sort-alphabetically-outline:before { \n  content: '\\e0fe'; /* '' */\n} \n.typcn-sort-alphabetically:before { \n  content: '\\e0ff'; /* '' */\n} \n.typcn-sort-numerically-outline:before { \n  content: '\\e100'; /* '' */\n} \n.typcn-sort-numerically:before { \n  content: '\\e101'; /* '' */\n} \n.typcn-spanner-outline:before { \n  content: '\\e102'; /* '' */\n} \n.typcn-spanner:before { \n  content: '\\e103'; /* '' */\n} \n.typcn-spiral:before { \n  content: '\\e104'; /* '' */\n} \n.typcn-star-full-outline:before { \n  content: '\\e105'; /* '' */\n} \n.typcn-star-half-outline:before { \n  content: '\\e106'; /* '' */\n} \n.typcn-star-half:before { \n  content: '\\e107'; /* '' */\n} \n.typcn-star-outline:before { \n  content: '\\e108'; /* '' */\n} \n.typcn-star:before { \n  content: '\\e109'; /* '' */\n} \n.typcn-starburst-outline:before { \n  content: '\\e10a'; /* '' */\n} \n.typcn-starburst:before { \n  content: '\\e10b'; /* '' */\n} \n.typcn-stopwatch:before { \n  content: '\\e10c'; /* '' */\n} \n.typcn-support:before { \n  content: '\\e10d'; /* '' */\n} \n.typcn-tabs-outline:before { \n  content: '\\e10e'; /* '' */\n} \n.typcn-tag:before { \n  content: '\\e10f'; /* '' */\n} \n.typcn-tags:before { \n  content: '\\e110'; /* '' */\n} \n.typcn-th-large-outline:before { \n  content: '\\e111'; /* '' */\n} \n.typcn-th-large:before { \n  content: '\\e112'; /* '' */\n} \n.typcn-th-list-outline:before { \n  content: '\\e113'; /* '' */\n} \n.typcn-th-list:before { \n  content: '\\e114'; /* '' */\n} \n.typcn-th-menu-outline:before { \n  content: '\\e115'; /* '' */\n} \n.typcn-th-menu:before { \n  content: '\\e116'; /* '' */\n} \n.typcn-th-small-outline:before { \n  content: '\\e117'; /* '' */\n} \n.typcn-th-small:before { \n  content: '\\e118'; /* '' */\n} \n.typcn-thermometer:before { \n  content: '\\e119'; /* '' */\n} \n.typcn-thumbs-down:before { \n  content: '\\e11a'; /* '' */\n} \n.typcn-thumbs-ok:before { \n  content: '\\e11b'; /* '' */\n} \n.typcn-thumbs-up:before { \n  content: '\\e11c'; /* '' */\n} \n.typcn-tick-outline:before { \n  content: '\\e11d'; /* '' */\n} \n.typcn-tick:before { \n  content: '\\e11e'; /* '' */\n} \n.typcn-ticket:before { \n  content: '\\e11f'; /* '' */\n} \n.typcn-time:before { \n  content: '\\e120'; /* '' */\n} \n.typcn-times-outline:before { \n  content: '\\e121'; /* '' */\n} \n.typcn-times:before { \n  content: '\\e122'; /* '' */\n} \n.typcn-trash:before { \n  content: '\\e123'; /* '' */\n} \n.typcn-tree:before { \n  content: '\\e124'; /* '' */\n} \n.typcn-upload-outline:before { \n  content: '\\e125'; /* '' */\n} \n.typcn-upload:before { \n  content: '\\e126'; /* '' */\n} \n.typcn-user-add-outline:before { \n  content: '\\e127'; /* '' */\n} \n.typcn-user-add:before { \n  content: '\\e128'; /* '' */\n} \n.typcn-user-delete-outline:before { \n  content: '\\e129'; /* '' */\n} \n.typcn-user-delete:before { \n  content: '\\e12a'; /* '' */\n} \n.typcn-user-outline:before { \n  content: '\\e12b'; /* '' */\n} \n.typcn-user:before { \n  content: '\\e12c'; /* '' */\n} \n.typcn-vendor-android:before { \n  content: '\\e12d'; /* '' */\n} \n.typcn-vendor-apple:before { \n  content: '\\e12e'; /* '' */\n} \n.typcn-vendor-microsoft:before { \n  content: '\\e12f'; /* '' */\n} \n.typcn-video-outline:before { \n  content: '\\e130'; /* '' */\n} \n.typcn-video:before { \n  content: '\\e131'; /* '' */\n} \n.typcn-volume-down:before { \n  content: '\\e132'; /* '' */\n} \n.typcn-volume-mute:before { \n  content: '\\e133'; /* '' */\n} \n.typcn-volume-up:before { \n  content: '\\e134'; /* '' */\n} \n.typcn-volume:before { \n  content: '\\e135'; /* '' */\n} \n.typcn-warning-outline:before { \n  content: '\\e136'; /* '' */\n} \n.typcn-warning:before { \n  content: '\\e137'; /* '' */\n} \n.typcn-watch:before { \n  content: '\\e138'; /* '' */\n} \n.typcn-waves-outline:before { \n  content: '\\e139'; /* '' */\n} \n.typcn-waves:before { \n  content: '\\e13a'; /* '' */\n} \n.typcn-weather-cloudy:before { \n  content: '\\e13b'; /* '' */\n} \n.typcn-weather-downpour:before { \n  content: '\\e13c'; /* '' */\n} \n.typcn-weather-night:before { \n  content: '\\e13d'; /* '' */\n} \n.typcn-weather-partly-sunny:before { \n  content: '\\e13e'; /* '' */\n} \n.typcn-weather-shower:before { \n  content: '\\e13f'; /* '' */\n} \n.typcn-weather-snow:before { \n  content: '\\e140'; /* '' */\n} \n.typcn-weather-stormy:before { \n  content: '\\e141'; /* '' */\n} \n.typcn-weather-sunny:before { \n  content: '\\e142'; /* '' */\n} \n.typcn-weather-windy-cloudy:before { \n  content: '\\e143'; /* '' */\n} \n.typcn-weather-windy:before { \n  content: '\\e144'; /* '' */\n} \n.typcn-wi-fi-outline:before { \n  content: '\\e145'; /* '' */\n} \n.typcn-wi-fi:before { \n  content: '\\e146'; /* '' */\n} \n.typcn-wine:before { \n  content: '\\e147'; /* '' */\n} \n.typcn-world-outline:before { \n  content: '\\e148'; /* '' */\n} \n.typcn-world:before { \n  content: '\\e149'; /* '' */\n} \n.typcn-zoom-in-outline:before { \n  content: '\\e14a'; /* '' */\n} \n.typcn-zoom-in:before { \n  content: '\\e14b'; /* '' */\n} \n.typcn-zoom-out-outline:before { \n  content: '\\e14c'; /* '' */\n} \n.typcn-zoom-out:before { \n  content: '\\e14d'; /* '' */\n} \n.typcn-zoom-outline:before { \n  content: '\\e14e'; /* '' */\n} \n.typcn-zoom:before { \n  content: '\\e14f'; /* '' */\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/detect.js",
    "content": "/**\n * jQuery.browser.mobile (http://detectmobilebrowser.com/)\n *\n * jQuery.browser.mobile will be true if the browser is a mobile device\n *\n **/\n(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/fastclick.js",
    "content": ";(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(function() {\n\t\t\treturn FastClick;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/jquery.app.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Module/App: Main Js\n*/\n\n\n!function($) {\n    \"use strict\";\n\n    var Sidemenu = function() {\n        this.$body = $(\"body\"),\n        this.$openLeftBtn = $(\".open-left\"),\n        this.$menuItem = $(\"#sidebar-menu a\")\n    };\n    Sidemenu.prototype.openLeftBar = function() {\n      $(\"#wrapper\").toggleClass(\"enlarged\");\n      $(\"#wrapper\").addClass(\"forced\");\n\n      if($(\"#wrapper\").hasClass(\"enlarged\") && $(\"body\").hasClass(\"fixed-left\")) {\n        $(\"body\").removeClass(\"fixed-left\").addClass(\"fixed-left-void\");\n      } else if(!$(\"#wrapper\").hasClass(\"enlarged\") && $(\"body\").hasClass(\"fixed-left-void\")) {\n        $(\"body\").removeClass(\"fixed-left-void\").addClass(\"fixed-left\");\n      }\n      \n      if($(\"#wrapper\").hasClass(\"enlarged\")) {\n        $(\".left ul\").removeAttr(\"style\");\n      } else {\n        $(\".subdrop\").siblings(\"ul:first\").show();\n      }\n      \n      toggle_slimscroll(\".slimscrollleft\");\n      $(\"body\").trigger(\"resize\");\n    },\n    //menu item click\n    Sidemenu.prototype.menuItemClick = function(e) {\n       if(!$(\"#wrapper\").hasClass(\"enlarged\")){\n        if($(this).parent().hasClass(\"has_sub\")) {\n\n        }   \n        if(!$(this).hasClass(\"subdrop\")) {\n          // hide any open menus and remove all other classes\n          $(\"ul\",$(this).parents(\"ul:first\")).slideUp(350);\n          $(\"a\",$(this).parents(\"ul:first\")).removeClass(\"subdrop\");\n          $(\"#sidebar-menu .pull-right i\").removeClass(\"md-remove\").addClass(\"md-add\");\n          \n          // open our new menu and add the open class\n          $(this).next(\"ul\").slideDown(350);\n          $(this).addClass(\"subdrop\");\n          $(\".pull-right i\",$(this).parents(\".has_sub:last\")).removeClass(\"md-add\").addClass(\"md-remove\");\n          $(\".pull-right i\",$(this).siblings(\"ul\")).removeClass(\"md-remove\").addClass(\"md-add\");\n        }else if($(this).hasClass(\"subdrop\")) {\n          $(this).removeClass(\"subdrop\");\n          $(this).next(\"ul\").slideUp(350);\n          $(\".pull-right i\",$(this).parent()).removeClass(\"md-remove\").addClass(\"md-add\");\n        }\n      } \n    },\n\n    //init sidemenu\n    Sidemenu.prototype.init = function() {\n      var $this  = this;\n\n      var ua = navigator.userAgent,\n        event = (ua.match(/iP/i)) ? \"touchstart\" : \"click\";\n      \n      //bind on click\n      this.$openLeftBtn.on(event, function(e) {\n        e.stopPropagation();\n        $this.openLeftBar();\n      });\n\n      // LEFT SIDE MAIN NAVIGATION\n      $this.$menuItem.on(event, $this.menuItemClick);\n\n      // NAVIGATION HIGHLIGHT & OPEN PARENT\n      $(\"#sidebar-menu ul li.has_sub a.active\").parents(\"li:last\").children(\"a:first\").addClass(\"active\").trigger(\"click\");\n    },\n\n    //init Sidemenu\n    $.Sidemenu = new Sidemenu, $.Sidemenu.Constructor = Sidemenu\n    \n}(window.jQuery),\n\n\nfunction($) {\n    \"use strict\";\n\n    var FullScreen = function() {\n        this.$body = $(\"body\"),\n        this.$fullscreenBtn = $(\"#btn-fullscreen\")\n    };\n\n    //turn on full screen\n    // Thanks to http://davidwalsh.name/fullscreen\n    FullScreen.prototype.launchFullscreen  = function(element) {\n      if(element.requestFullscreen) {\n        element.requestFullscreen();\n      } else if(element.mozRequestFullScreen) {\n        element.mozRequestFullScreen();\n      } else if(element.webkitRequestFullscreen) {\n        element.webkitRequestFullscreen();\n      } else if(element.msRequestFullscreen) {\n        element.msRequestFullscreen();\n      }\n    },\n    FullScreen.prototype.exitFullscreen = function() {\n      if(document.exitFullscreen) {\n        document.exitFullscreen();\n      } else if(document.mozCancelFullScreen) {\n        document.mozCancelFullScreen();\n      } else if(document.webkitExitFullscreen) {\n        document.webkitExitFullscreen();\n      }\n    },\n    //toggle screen\n    FullScreen.prototype.toggle_fullscreen  = function() {\n      var $this = this;\n      var fullscreenEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled;\n      if(fullscreenEnabled) {\n        if(!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {\n          $this.launchFullscreen(document.documentElement);\n        } else{\n          $this.exitFullscreen();\n        }\n      }\n    },\n    //init sidemenu\n    FullScreen.prototype.init = function() {\n      var $this  = this;\n      //bind\n      $this.$fullscreenBtn.on('click', function() {\n        $this.toggle_fullscreen();\n      });\n    },\n     //init FullScreen\n    $.FullScreen = new FullScreen, $.FullScreen.Constructor = FullScreen\n    \n}(window.jQuery),\n\n\n\n//main app module\n function($) {\n    \"use strict\";\n    \n    var App = function() {\n        this.VERSION = \"1.6.0\",\n        this.AUTHOR = \"Coderthemes\", \n        this.SUPPORT = \"coderthemes@gmail.com\", \n        this.pageScrollElement = \"html, body\", \n        this.$body = $(\"body\")\n    };\n    \n     //on doc load\n    App.prototype.onDocReady = function(e) {\n      FastClick.attach(document.body);\n      resizefunc.push(\"initscrolls\");\n      resizefunc.push(\"changeptype\");\n\n      $('.animate-number').each(function(){\n        $(this).animateNumbers($(this).attr(\"data-value\"), true, parseInt($(this).attr(\"data-duration\"))); \n      });\n    \n      //RUN RESIZE ITEMS\n      $(window).resize(debounce(resizeitems,100));\n      $(\"body\").trigger(\"resize\");\n\n      // right side-bar toggle\n      $('.right-bar-toggle').on('click', function(e){\n\n          $('#wrapper').toggleClass('right-bar-enabled');\n      }); \n\n      \n    },\n    //initilizing \n    App.prototype.init = function() {\n        var $this = this;\n        //document load initialization\n        $(document).ready($this.onDocReady);\n        //init side bar - left\n        $.Sidemenu.init();\n        //init fullscreen\n        $.FullScreen.init();\n    },\n\n    $.App = new App, $.App.Constructor = App\n\n}(window.jQuery),\n\n//initializing main application module\nfunction($) {\n    \"use strict\";\n    $.App.init();\n}(window.jQuery);\n\n\n\n/* ------------ some utility functions ----------------------- */\n//this full screen\nvar toggle_fullscreen = function () {\n\n}\n\nfunction executeFunctionByName(functionName, context /*, args */) {\n  var args = [].slice.call(arguments).splice(2);\n  var namespaces = functionName.split(\".\");\n  var func = namespaces.pop();\n  for(var i = 0; i < namespaces.length; i++) {\n    context = context[namespaces[i]];\n  }\n  return context[func].apply(this, args);\n}\nvar w,h,dw,dh;\nvar changeptype = function(){\n    w = $(window).width();\n    h = $(window).height();\n    dw = $(document).width();\n    dh = $(document).height();\n\n    if(jQuery.browser.mobile === true){\n        $(\"body\").addClass(\"mobile\").removeClass(\"fixed-left\");\n    }\n\n    if(!$(\"#wrapper\").hasClass(\"forced\")){\n      if(w > 990){\n        $(\"body\").removeClass(\"smallscreen\").addClass(\"widescreen\");\n          $(\"#wrapper\").removeClass(\"enlarged\");\n      }else{\n        $(\"body\").removeClass(\"widescreen\").addClass(\"smallscreen\");\n        $(\"#wrapper\").addClass(\"enlarged\");\n        $(\".left ul\").removeAttr(\"style\");\n      }\n      if($(\"#wrapper\").hasClass(\"enlarged\") && $(\"body\").hasClass(\"fixed-left\")){\n        $(\"body\").removeClass(\"fixed-left\").addClass(\"fixed-left-void\");\n      }else if(!$(\"#wrapper\").hasClass(\"enlarged\") && $(\"body\").hasClass(\"fixed-left-void\")){\n        $(\"body\").removeClass(\"fixed-left-void\").addClass(\"fixed-left\");\n      }\n\n  }\n  toggle_slimscroll(\".slimscrollleft\");\n}\n\n\nvar debounce = function(func, wait, immediate) {\n  var timeout, result;\n  return function() {\n    var context = this, args = arguments;\n    var later = function() {\n      timeout = null;\n      if (!immediate) result = func.apply(context, args);\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) result = func.apply(context, args);\n    return result;\n  };\n}\n\nfunction resizeitems(){\n  if($.isArray(resizefunc)){  \n    for (i = 0; i < resizefunc.length; i++) {\n        window[resizefunc[i]]();\n    }\n  }\n}\n\nfunction initscrolls(){\n    if(jQuery.browser.mobile !== true){\n      //SLIM SCROLL\n      $('.slimscroller').slimscroll({\n        height: 'auto',\n        size: \"5px\"\n      });\n\n      $('.slimscrollleft').slimScroll({\n          height: 'auto',\n          position: 'right',\n          size: \"7px\",\n          color: '#bbbbbb',\n          wheelStep: 5\n      });\n  }\n}\nfunction toggle_slimscroll(item){\n    if($(\"#wrapper\").hasClass(\"enlarged\")){\n      $(item).css(\"overflow\",\"inherit\").parent().css(\"overflow\",\"inherit\");\n      $(item). siblings(\".slimScrollBar\").css(\"visibility\",\"hidden\");\n    }else{\n      $(item).css(\"overflow\",\"hidden\").parent().css(\"overflow\",\"hidden\");\n      $(item). siblings(\".slimScrollBar\").css(\"visibility\",\"visible\");\n    }\n}\n\nvar wow = new WOW(\n  {\n    boxClass: 'wow', // animated element css class (default is wow)\n    animateClass: 'animated', // animation css class (default is animated)\n    offset: 50, // distance to the element when triggering the animation (default is 0)\n    mobile: false        // trigger animations on mobile devices (true is default)\n  }\n);\nwow.init();\n\n// === following js will activate the menu in left side bar based on url ====\n$(document).ready(function() {\n    $(\"#sidebar-menu a\").each(function() {\n        if (this.href == window.location.href) {\n            $(this).addClass(\"active\");\n            $(this).parent().addClass(\"active\"); // add active to li of the current link\n            $(this).parent().parent().prev().addClass(\"active\"); // add active class to an anchor\n            $(this).parent().parent().prev().click(); // click the item to make it drop\n        }\n    });\n});\n\n// Loader\n$('#status').fadeOut();\n$('#preloader').delay(350).fadeOut('slow');\n$('body').delay(350).css({\n    'overflow': 'visible'\n});\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/jquery.blockUI.js",
    "content": "/*!\n * jQuery blockUI plugin\n * Version 2.70.0-2014.11.23\n * Requires jQuery v1.7 or later\n *\n * Examples at: http://malsup.com/jquery/block/\n * Copyright (c) 2007-2013 M. Alsup\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\n */\n\n;(function() {\n/*jshint eqeqeq:false curly:false latedef:false */\n\"use strict\";\n\n\tfunction setup($) {\n\t\t$.fn._fadeIn = $.fn.fadeIn;\n\n\t\tvar noOp = $.noop || function() {};\n\n\t\t// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\n\t\t// confusing userAgent strings on Vista)\n\t\tvar msie = /MSIE/.test(navigator.userAgent);\n\t\tvar ie6  = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);\n\t\tvar mode = document.documentMode || 0;\n\t\tvar setExpr = $.isFunction( document.createElement('div').style.setExpression );\n\n\t\t// global $ methods for blocking/unblocking the entire page\n\t\t$.blockUI   = function(opts) { install(window, opts); };\n\t\t$.unblockUI = function(opts) { remove(window, opts); };\n\n\t\t// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)\n\t\t$.growlUI = function(title, message, timeout, onClose) {\n\t\t\tvar $m = $('<div class=\"growlUI\"></div>');\n\t\t\tif (title) $m.append('<h1>'+title+'</h1>');\n\t\t\tif (message) $m.append('<h2>'+message+'</h2>');\n\t\t\tif (timeout === undefined) timeout = 3000;\n\n\t\t\t// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\n\t\t\tvar callBlock = function(opts) {\n\t\t\t\topts = opts || {};\n\n\t\t\t\t$.blockUI({\n\t\t\t\t\tmessage: $m,\n\t\t\t\t\tfadeIn : typeof opts.fadeIn  !== 'undefined' ? opts.fadeIn  : 700,\n\t\t\t\t\tfadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\n\t\t\t\t\ttimeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\n\t\t\t\t\tcenterY: false,\n\t\t\t\t\tshowOverlay: false,\n\t\t\t\t\tonUnblock: onClose,\n\t\t\t\t\tcss: $.blockUI.defaults.growlCSS\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tcallBlock();\n\t\t\tvar nonmousedOpacity = $m.css('opacity');\n\t\t\t$m.mouseover(function() {\n\t\t\t\tcallBlock({\n\t\t\t\t\tfadeIn: 0,\n\t\t\t\t\ttimeout: 30000\n\t\t\t\t});\n\n\t\t\t\tvar displayBlock = $('.blockMsg');\n\t\t\t\tdisplayBlock.stop(); // cancel fadeout if it has started\n\t\t\t\tdisplayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\n\t\t\t}).mouseout(function() {\n\t\t\t\t$('.blockMsg').fadeOut(1000);\n\t\t\t});\n\t\t\t// End konapun additions\n\t\t};\n\n\t\t// plugin method for blocking element content\n\t\t$.fn.block = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.blockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tvar fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tthis.each(function() {\n\t\t\t\tvar $el = $(this);\n\t\t\t\tif (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\n\t\t\t\t\treturn;\n\t\t\t\t$el.unblock({ fadeOut: 0 });\n\t\t\t});\n\n\t\t\treturn this.each(function() {\n\t\t\t\tif ($.css(this,'position') == 'static') {\n\t\t\t\t\tthis.style.position = 'relative';\n\t\t\t\t\t$(this).data('blockUI.static', true);\n\t\t\t\t}\n\t\t\t\tthis.style.zoom = 1; // force 'hasLayout' in ie\n\t\t\t\tinstall(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t// plugin method for unblocking element content\n\t\t$.fn.unblock = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.unblockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.each(function() {\n\t\t\t\tremove(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!\n\n\t\t// override these in your code to change the default behavior and style\n\t\t$.blockUI.defaults = {\n\t\t\t// message displayed when blocking (use null for no message)\n\t\t\tmessage:  '<h1>Please wait...</h1>',\n\n\t\t\ttitle: null,\t\t// title string; only used when theme == true\n\t\t\tdraggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\n\n\t\t\ttheme: false, // set to true to use with jQuery UI themes\n\n\t\t\t// styles for the message when blocking; if you wish to disable\n\t\t\t// these and use an external stylesheet then do this in your code:\n\t\t\t// $.blockUI.defaults.css = {};\n\t\t\tcss: {\n\t\t\t\tpadding:\t0,\n\t\t\t\tmargin:\t\t0,\n\t\t\t\twidth:\t\t'30%',\n\t\t\t\ttop:\t\t'40%',\n\t\t\t\tleft:\t\t'35%',\n\t\t\t\ttextAlign:\t'center',\n\t\t\t\tcolor:\t\t'#000',\n\t\t\t\tborder:\t\t'3px solid #aaa',\n\t\t\t\tbackgroundColor:'#fff',\n\t\t\t\tcursor:\t\t'wait'\n\t\t\t},\n\n\t\t\t// minimal style set used when themes are used\n\t\t\tthemedCSS: {\n\t\t\t\twidth:\t'30%',\n\t\t\t\ttop:\t'40%',\n\t\t\t\tleft:\t'35%'\n\t\t\t},\n\n\t\t\t// styles for the overlay\n\t\t\toverlayCSS:  {\n\t\t\t\tbackgroundColor:\t'#000',\n\t\t\t\topacity:\t\t\t0.6,\n\t\t\t\tcursor:\t\t\t\t'wait'\n\t\t\t},\n\n\t\t\t// style to replace wait cursor before unblocking to correct issue\n\t\t\t// of lingering wait cursor\n\t\t\tcursorReset: 'default',\n\n\t\t\t// styles applied when using $.growlUI\n\t\t\tgrowlCSS: {\n\t\t\t\twidth:\t\t'350px',\n\t\t\t\ttop:\t\t'10px',\n\t\t\t\tleft:\t\t'',\n\t\t\t\tright:\t\t'10px',\n\t\t\t\tborder:\t\t'none',\n\t\t\t\tpadding:\t'5px',\n\t\t\t\topacity:\t0.6,\n\t\t\t\tcursor:\t\t'default',\n\t\t\t\tcolor:\t\t'#fff',\n\t\t\t\tbackgroundColor: '#000',\n\t\t\t\t'-webkit-border-radius':'10px',\n\t\t\t\t'-moz-border-radius':\t'10px',\n\t\t\t\t'border-radius':\t\t'10px'\n\t\t\t},\n\n\t\t\t// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\n\t\t\t// (hat tip to Jorge H. N. de Vasconcelos)\n\t\t\t/*jshint scripturl:true */\n\t\t\tiframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\n\n\t\t\t// force usage of iframe in non-IE browsers (handy for blocking applets)\n\t\t\tforceIframe: false,\n\n\t\t\t// z-index for the blocking overlay\n\t\t\tbaseZ: 1000,\n\n\t\t\t// set these to true to have the message automatically centered\n\t\t\tcenterX: true, // <-- only effects element blocking (page block controlled via css above)\n\t\t\tcenterY: true,\n\n\t\t\t// allow body element to be stetched in ie6; this makes blocking look better\n\t\t\t// on \"short\" pages.  disable if you wish to prevent changes to the body height\n\t\t\tallowBodyStretch: true,\n\n\t\t\t// enable if you want key and mouse events to be disabled for content that is blocked\n\t\t\tbindEvents: true,\n\n\t\t\t// be default blockUI will supress tab navigation from leaving blocking content\n\t\t\t// (if bindEvents is true)\n\t\t\tconstrainTabKey: true,\n\n\t\t\t// fadeIn time in millis; set to 0 to disable fadeIn on block\n\t\t\tfadeIn:  200,\n\n\t\t\t// fadeOut time in millis; set to 0 to disable fadeOut on unblock\n\t\t\tfadeOut:  400,\n\n\t\t\t// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\n\t\t\ttimeout: 0,\n\n\t\t\t// disable if you don't want to show the overlay\n\t\t\tshowOverlay: true,\n\n\t\t\t// if true, focus will be placed in the first available input field when\n\t\t\t// page blocking\n\t\t\tfocusInput: true,\n\n            // elements that can receive focus\n            focusableElements: ':input:enabled:visible',\n\n\t\t\t// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\n\t\t\t// no longer needed in 2012\n\t\t\t// applyPlatformOpacityRules: true,\n\n\t\t\t// callback method invoked when fadeIn has completed and blocking message is visible\n\t\t\tonBlock: null,\n\n\t\t\t// callback method invoked when unblocking has completed; the callback is\n\t\t\t// passed the element that has been unblocked (which is the window object for page\n\t\t\t// blocks) and the options that were passed to the unblock call:\n\t\t\t//\tonUnblock(element, options)\n\t\t\tonUnblock: null,\n\n\t\t\t// callback method invoked when the overlay area is clicked.\n\t\t\t// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\n\t\t\tonOverlayClick: null,\n\n\t\t\t// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\n\t\t\tquirksmodeOffsetHack: 4,\n\n\t\t\t// class name of the message block\n\t\t\tblockMsgClass: 'blockMsg',\n\n\t\t\t// if it is already blocked, then ignore it (don't unblock and reblock)\n\t\t\tignoreIfBlocked: false\n\t\t};\n\n\t\t// private data and functions follow...\n\n\t\tvar pageBlock = null;\n\t\tvar pageBlockEls = [];\n\n\t\tfunction install(el, opts) {\n\t\t\tvar css, themedCSS;\n\t\t\tvar full = (el == window);\n\t\t\tvar msg = (opts && opts.message !== undefined ? opts.message : undefined);\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\n\t\t\tif (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\n\t\t\t\treturn;\n\n\t\t\topts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\n\t\t\tcss = $.extend({}, $.blockUI.defaults.css, opts.css || {});\n\t\t\tif (opts.onOverlayClick)\n\t\t\t\topts.overlayCSS.cursor = 'pointer';\n\n\t\t\tthemedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\n\t\t\tmsg = msg === undefined ? opts.message : msg;\n\n\t\t\t// remove the current block (if there is one)\n\t\t\tif (full && pageBlock)\n\t\t\t\tremove(window, {fadeOut:0});\n\n\t\t\t// if an existing element is being used as the blocking content then we capture\n\t\t\t// its current place in the DOM (and current display style) so we can restore\n\t\t\t// it when we unblock\n\t\t\tif (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\n\t\t\t\tvar node = msg.jquery ? msg[0] : msg;\n\t\t\t\tvar data = {};\n\t\t\t\t$(el).data('blockUI.history', data);\n\t\t\t\tdata.el = node;\n\t\t\t\tdata.parent = node.parentNode;\n\t\t\t\tdata.display = node.style.display;\n\t\t\t\tdata.position = node.style.position;\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.removeChild(node);\n\t\t\t}\n\n\t\t\t$(el).data('blockUI.onUnblock', opts.onUnblock);\n\t\t\tvar z = opts.baseZ;\n\n\t\t\t// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\n\t\t\t// layer1 is the iframe layer which is used to supress bleed through of underlying content\n\t\t\t// layer2 is the overlay layer which has opacity and a wait cursor (by default)\n\t\t\t// layer3 is the message content that is displayed while blocking\n\t\t\tvar lyr1, lyr2, lyr3, s;\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1 = $('<iframe class=\"blockUI\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0\" src=\"'+opts.iframeSrc+'\"></iframe>');\n\t\t\telse\n\t\t\t\tlyr1 = $('<div class=\"blockUI\" style=\"display:none\"></div>');\n\n\t\t\tif (opts.theme)\n\t\t\t\tlyr2 = $('<div class=\"blockUI blockOverlay ui-widget-overlay\" style=\"z-index:'+ (z++) +';display:none\"></div>');\n\t\t\telse\n\t\t\t\tlyr2 = $('<div class=\"blockUI blockOverlay\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0\"></div>');\n\n\t\t\tif (opts.theme && full) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:fixed\">';\n\t\t\t\tif ( opts.title ) {\n\t\t\t\t\ts += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\n\t\t\t\t}\n\t\t\t\ts += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\n\t\t\t\ts += '</div>';\n\t\t\t}\n\t\t\telse if (opts.theme) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:absolute\">';\n\t\t\t\tif ( opts.title ) {\n\t\t\t\t\ts += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || '&nbsp;')+'</div>';\n\t\t\t\t}\n\t\t\t\ts += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\n\t\t\t\ts += '</div>';\n\t\t\t}\n\t\t\telse if (full) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage\" style=\"z-index:'+(z+10)+';display:none;position:fixed\"></div>';\n\t\t\t}\n\t\t\telse {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement\" style=\"z-index:'+(z+10)+';display:none;position:absolute\"></div>';\n\t\t\t}\n\t\t\tlyr3 = $(s);\n\n\t\t\t// if we have a message, style it\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme) {\n\t\t\t\t\tlyr3.css(themedCSS);\n\t\t\t\t\tlyr3.addClass('ui-widget-content');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tlyr3.css(css);\n\t\t\t}\n\n\t\t\t// style the overlay\n\t\t\tif (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\n\t\t\t\tlyr2.css(opts.overlayCSS);\n\t\t\tlyr2.css('position', full ? 'fixed' : 'absolute');\n\n\t\t\t// make iframe layer transparent in IE\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1.css('opacity',0.0);\n\n\t\t\t//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\n\t\t\tvar layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\n\t\t\t$.each(layers, function() {\n\t\t\t\tthis.appendTo($par);\n\t\t\t});\n\n\t\t\tif (opts.theme && opts.draggable && $.fn.draggable) {\n\t\t\t\tlyr3.draggable({\n\t\t\t\t\thandle: '.ui-dialog-titlebar',\n\t\t\t\t\tcancel: 'li'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\n\t\t\tvar expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\n\t\t\tif (ie6 || expr) {\n\t\t\t\t// give body 100% height\n\t\t\t\tif (full && opts.allowBodyStretch && $.support.boxModel)\n\t\t\t\t\t$('html,body').css('height','100%');\n\n\t\t\t\t// fix ie6 issue when blocked element has a border width\n\t\t\t\tif ((ie6 || !$.support.boxModel) && !full) {\n\t\t\t\t\tvar t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\n\t\t\t\t\tvar fixT = t ? '(0 - '+t+')' : 0;\n\t\t\t\t\tvar fixL = l ? '(0 - '+l+')' : 0;\n\t\t\t\t}\n\n\t\t\t\t// simulate fixed position\n\t\t\t\t$.each(layers, function(i,o) {\n\t\t\t\t\tvar s = o[0].style;\n\t\t\t\t\ts.position = 'absolute';\n\t\t\t\t\tif (i < 2) {\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('height','this.parentNode.offsetHeight + \"px\"');\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('width','this.parentNode.offsetWidth + \"px\"');\n\t\t\t\t\t\tif (fixL) s.setExpression('left', fixL);\n\t\t\t\t\t\tif (fixT) s.setExpression('top', fixT);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opts.centerY) {\n\t\t\t\t\t\tif (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\n\t\t\t\t\t\ts.marginTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!opts.centerY && full) {\n\t\t\t\t\t\tvar top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\n\t\t\t\t\t\tvar expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\n\t\t\t\t\t\ts.setExpression('top',expression);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// show the message\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme)\n\t\t\t\t\tlyr3.find('.ui-widget-content').append(msg);\n\t\t\t\telse\n\t\t\t\t\tlyr3.append(msg);\n\t\t\t\tif (msg.jquery || msg.nodeType)\n\t\t\t\t\t$(msg).show();\n\t\t\t}\n\n\t\t\tif ((msie || opts.forceIframe) && opts.showOverlay)\n\t\t\t\tlyr1.show(); // opacity is zero\n\t\t\tif (opts.fadeIn) {\n\t\t\t\tvar cb = opts.onBlock ? opts.onBlock : noOp;\n\t\t\t\tvar cb1 = (opts.showOverlay && !msg) ? cb : noOp;\n\t\t\t\tvar cb2 = msg ? cb : noOp;\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2._fadeIn(opts.fadeIn, cb1);\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3._fadeIn(opts.fadeIn, cb2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2.show();\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3.show();\n\t\t\t\tif (opts.onBlock)\n\t\t\t\t\topts.onBlock.bind(lyr3)();\n\t\t\t}\n\n\t\t\t// bind key and mouse events\n\t\t\tbind(1, el, opts);\n\n\t\t\tif (full) {\n\t\t\t\tpageBlock = lyr3[0];\n\t\t\t\tpageBlockEls = $(opts.focusableElements,pageBlock);\n\t\t\t\tif (opts.focusInput)\n\t\t\t\t\tsetTimeout(focus, 20);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcenter(lyr3[0], opts.centerX, opts.centerY);\n\n\t\t\tif (opts.timeout) {\n\t\t\t\t// auto-unblock\n\t\t\t\tvar to = setTimeout(function() {\n\t\t\t\t\tif (full)\n\t\t\t\t\t\t$.unblockUI(opts);\n\t\t\t\t\telse\n\t\t\t\t\t\t$(el).unblock(opts);\n\t\t\t\t}, opts.timeout);\n\t\t\t\t$(el).data('blockUI.timeout', to);\n\t\t\t}\n\t\t}\n\n\t\t// remove the block\n\t\tfunction remove(el, opts) {\n\t\t\tvar count;\n\t\t\tvar full = (el == window);\n\t\t\tvar $el = $(el);\n\t\t\tvar data = $el.data('blockUI.history');\n\t\t\tvar to = $el.data('blockUI.timeout');\n\t\t\tif (to) {\n\t\t\t\tclearTimeout(to);\n\t\t\t\t$el.removeData('blockUI.timeout');\n\t\t\t}\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tbind(0, el, opts); // unbind events\n\n\t\t\tif (opts.onUnblock === null) {\n\t\t\t\topts.onUnblock = $el.data('blockUI.onUnblock');\n\t\t\t\t$el.removeData('blockUI.onUnblock');\n\t\t\t}\n\n\t\t\tvar els;\n\t\t\tif (full) // crazy selector to handle odd field errors in ie6/7\n\t\t\t\tels = $('body').children().filter('.blockUI').add('body > .blockUI');\n\t\t\telse\n\t\t\t\tels = $el.find('>.blockUI');\n\n\t\t\t// fix cursor issue\n\t\t\tif ( opts.cursorReset ) {\n\t\t\t\tif ( els.length > 1 )\n\t\t\t\t\tels[1].style.cursor = opts.cursorReset;\n\t\t\t\tif ( els.length > 2 )\n\t\t\t\t\tels[2].style.cursor = opts.cursorReset;\n\t\t\t}\n\n\t\t\tif (full)\n\t\t\t\tpageBlock = pageBlockEls = null;\n\n\t\t\tif (opts.fadeOut) {\n\t\t\t\tcount = els.length;\n\t\t\t\tels.stop().fadeOut(opts.fadeOut, function() {\n\t\t\t\t\tif ( --count === 0)\n\t\t\t\t\t\treset(els,data,opts,el);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\treset(els, data, opts, el);\n\t\t}\n\n\t\t// move blocking element back into the DOM where it started\n\t\tfunction reset(els,data,opts,el) {\n\t\t\tvar $el = $(el);\n\t\t\tif ( $el.data('blockUI.isBlocked') )\n\t\t\t\treturn;\n\n\t\t\tels.each(function(i,o) {\n\t\t\t\t// remove via DOM calls so we don't lose event handlers\n\t\t\t\tif (this.parentNode)\n\t\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t});\n\n\t\t\tif (data && data.el) {\n\t\t\t\tdata.el.style.display = data.display;\n\t\t\t\tdata.el.style.position = data.position;\n\t\t\t\tdata.el.style.cursor = 'default'; // #59\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.appendChild(data.el);\n\t\t\t\t$el.removeData('blockUI.history');\n\t\t\t}\n\n\t\t\tif ($el.data('blockUI.static')) {\n\t\t\t\t$el.css('position', 'static'); // #22\n\t\t\t}\n\n\t\t\tif (typeof opts.onUnblock == 'function')\n\t\t\t\topts.onUnblock(el,opts);\n\n\t\t\t// fix issue in Safari 6 where block artifacts remain until reflow\n\t\t\tvar body = $(document.body), w = body.width(), cssW = body[0].style.width;\n\t\t\tbody.width(w-1).width(w);\n\t\t\tbody[0].style.width = cssW;\n\t\t}\n\n\t\t// bind/unbind the handler\n\t\tfunction bind(b, el, opts) {\n\t\t\tvar full = el == window, $el = $(el);\n\n\t\t\t// don't bother unbinding if there is nothing to unbind\n\t\t\tif (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\n\t\t\t\treturn;\n\n\t\t\t$el.data('blockUI.isBlocked', b);\n\n\t\t\t// don't bind events when overlay is not in use or if bindEvents is false\n\t\t\tif (!full || !opts.bindEvents || (b && !opts.showOverlay))\n\t\t\t\treturn;\n\n\t\t\t// bind anchors and inputs for mouse and key events\n\t\t\tvar events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\n\t\t\tif (b)\n\t\t\t\t$(document).bind(events, opts, handler);\n\t\t\telse\n\t\t\t\t$(document).unbind(events, handler);\n\n\t\t// former impl...\n\t\t//\t\tvar $e = $('a,:input');\n\t\t//\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\n\t\t}\n\n\t\t// event handler to suppress keyboard/mouse events when blocking\n\t\tfunction handler(e) {\n\t\t\t// allow tab navigation (conditionally)\n\t\t\tif (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\n\t\t\t\tif (pageBlock && e.data.constrainTabKey) {\n\t\t\t\t\tvar els = pageBlockEls;\n\t\t\t\t\tvar fwd = !e.shiftKey && e.target === els[els.length-1];\n\t\t\t\t\tvar back = e.shiftKey && e.target === els[0];\n\t\t\t\t\tif (fwd || back) {\n\t\t\t\t\t\tsetTimeout(function(){focus(back);},10);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar opts = e.data;\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.hasClass('blockOverlay') && opts.onOverlayClick)\n\t\t\t\topts.onOverlayClick(e);\n\n\t\t\t// allow events within the message content\n\t\t\tif (target.parents('div.' + opts.blockMsgClass).length > 0)\n\t\t\t\treturn true;\n\n\t\t\t// allow events for content that is not being blocked\n\t\t\treturn target.parents().children().filter('div.blockUI').length === 0;\n\t\t}\n\n\t\tfunction focus(back) {\n\t\t\tif (!pageBlockEls)\n\t\t\t\treturn;\n\t\t\tvar e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\n\t\t\tif (e)\n\t\t\t\te.focus();\n\t\t}\n\n\t\tfunction center(el, x, y) {\n\t\t\tvar p = el.parentNode, s = el.style;\n\t\t\tvar l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\n\t\t\tvar t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\n\t\t\tif (x) s.left = l > 0 ? (l+'px') : '0';\n\t\t\tif (y) s.top  = t > 0 ? (t+'px') : '0';\n\t\t}\n\n\t\tfunction sz(el, p) {\n\t\t\treturn parseInt($.css(el,p),10)||0;\n\t\t}\n\n\t}\n\n\n\t/*global define:true */\n\tif (typeof define === 'function' && define.amd && define.amd.jQuery) {\n\t\tdefine(['jquery'], setup);\n\t} else {\n\t\tsetup(jQuery);\n\t}\n\n})();\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/jquery.core.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * Module/App: Core file\n */\n\n\n//portlets\n!function($) {\n    \"use strict\";\n\n    /**\n    Portlet Widget\n    */\n    var Portlet = function() {\n        this.$body = $(\"body\"),\n        this.$portletIdentifier = \".portlet\",\n        this.$portletCloser = '.portlet a[data-toggle=\"remove\"]',\n        this.$portletRefresher = '.portlet a[data-toggle=\"reload\"]'\n    };\n\n    //on init\n    Portlet.prototype.init = function() {\n        // Panel closest\n        var $this = this;\n        $(document).on(\"click\",this.$portletCloser, function (ev) {\n            ev.preventDefault();\n            var $portlet = $(this).closest($this.$portletIdentifier);\n                var $portlet_parent = $portlet.parent();\n            $portlet.remove();\n            if ($portlet_parent.children().length == 0) {\n                $portlet_parent.remove();\n            }\n        });\n\n        // Panel Reload\n        $(document).on(\"click\",this.$portletRefresher, function (ev) {\n            ev.preventDefault();\n            var $portlet = $(this).closest($this.$portletIdentifier);\n            // This is just a simulation, nothing is going to be reloaded\n            $portlet.append('<div class=\"panel-disabled\"><div class=\"loader-1\"></div></div>');\n            var $pd = $portlet.find('.panel-disabled');\n            setTimeout(function () {\n                $pd.fadeOut('fast', function () {\n                    $pd.remove();\n                });\n            }, 500 + 300 * (Math.random() * 5));\n        });\n    },\n    //\n    $.Portlet = new Portlet, $.Portlet.Constructor = Portlet\n\n}(window.jQuery),\n\n/**\n * Notifications\n */\nfunction($) {\n    \"use strict\";\n\n    var Notification = function() {};\n\n    //simple notificaiton\n    Notification.prototype.notify = function(style,position, title, text) {\n        var icon = 'fa fa-adjust';\n        if(style == \"error\"){\n            icon = \"fa fa-exclamation\";\n        }else if(style == \"warning\"){\n            icon = \"fa fa-warning\";\n        }else if(style == \"success\"){\n            icon = \"fa fa-check\";\n        }else if(style == \"custom\"){\n            icon = \"md md-album\";\n        }else if(style == \"info\"){\n            icon = \"fa fa-question\";\n        }else{\n            icon = \"fa fa-adjust\";\n        }\n        $.notify({\n            title: title,\n            text: text,\n            image: \"<i class='\"+icon+\"'></i>\"\n        }, {\n            style: 'metro',\n            className: style,\n            globalPosition:position,\n            showAnimation: \"show\",\n            showDuration: 0,\n            hideDuration: 0,\n            autoHide: true,\n            clickToHide: true\n        });\n    },\n\n    //auto hide notification\n    Notification.prototype.autoHideNotify = function (style,position, title, text) {\n        var icon = \"fa fa-adjust\";\n        if(style == \"error\"){\n            icon = \"fa fa-exclamation\";\n        }else if(style == \"warning\"){\n            icon = \"fa fa-warning\";\n        }else if(style == \"success\"){\n            icon = \"fa fa-check\";\n        }else if(style == \"custom\"){\n            icon = \"md md-album\";\n        }else if(style == \"info\"){\n            icon = \"fa fa-question\";\n        }else{\n            icon = \"fa fa-adjust\";\n        }\n        $.notify({\n            title: title,\n            text: text,\n            image: \"<i class='\"+icon+\"'></i>\"\n        }, {\n            style: 'metro',\n            className: style,\n            globalPosition:position,\n            showAnimation: \"show\",\n            showDuration: 0,\n            hideDuration: 0,\n            autoHideDelay: 5000,\n            autoHide: true,\n            clickToHide: true\n        });\n    },\n    //confirmation notification\n    Notification.prototype.confirm = function(style,position, title) {\n        var icon = \"fa fa-adjust\";\n        if(style == \"error\"){\n            icon = \"fa fa-exclamation\";\n        }else if(style == \"warning\"){\n            icon = \"fa fa-warning\";\n        }else if(style == \"success\"){\n            icon = \"fa fa-check\";\n        }else if(style == \"custom\"){\n            icon = \"md md-album\";\n        }else if(style == \"info\"){\n            icon = \"fa fa-question\";\n        }else{\n            icon = \"fa fa-adjust\";\n        }\n        $.notify({\n            title: title,\n            text: 'Are you sure you want to do nothing?<div class=\"clearfix\"></div><br><a class=\"btn btn-sm btn-white yes\">Yes</a> <a class=\"btn btn-sm btn-danger no\">No</a>',\n            image: \"<i class='\"+icon+\"'></i>\"\n        }, {\n            style: 'metro',\n            className: style,\n            globalPosition:position,\n            showAnimation: \"show\",\n            showDuration: 0,\n            hideDuration: 0,\n            autoHide: false,\n            clickToHide: false\n        });\n        //listen for click events from this style\n        $(document).on('click', '.notifyjs-metro-base .no', function() {\n          //programmatically trigger propogating hide event\n          $(this).trigger('notify-hide');\n        });\n        $(document).on('click', '.notifyjs-metro-base .yes', function() {\n          //show button text\n          alert($(this).text() + \" clicked!\");\n          //hide notification\n          $(this).trigger('notify-hide');\n        });\n    },\n    //init - examples\n    Notification.prototype.init = function() {\n\n    },\n    //init\n    $.Notification = new Notification, $.Notification.Constructor = Notification\n}(window.jQuery),\n\n/**\n * Components\n */\nfunction($) {\n    \"use strict\";\n\n    var Components = function() {};\n\n    //initializing tooltip\n    Components.prototype.initTooltipPlugin = function() {\n        $.fn.tooltip && $('[data-toggle=\"tooltip\"]').tooltip()\n    },\n\n    //initializing popover\n    Components.prototype.initPopoverPlugin = function() {\n        $.fn.popover && $('[data-toggle=\"popover\"]').popover()\n    },\n\n    //initializing custom modal\n    Components.prototype.initCustomModalPlugin = function() {\n        $('[data-plugin=\"custommodal\"]').on('click', function(e) {\n        \tCustombox.open({\n                target: $(this).attr(\"href\"),\n                effect: $(this).attr(\"data-animation\"),\n                overlaySpeed: $(this).attr(\"data-overlaySpeed\"),\n                overlayColor: $(this).attr(\"data-overlayColor\")\n            });\n        \te.preventDefault();\n        });\n    },\n\n    //initializing nicescroll\n    Components.prototype.initNiceScrollPlugin = function() {\n        //You can change the color of scroll bar here\n        $.fn.niceScroll &&  $(\".nicescroll\").niceScroll({ cursorcolor: '#98a6ad',cursorwidth:'6px', cursorborderradius: '5px'});\n    },\n\n    //initializing Slimscroll\n    Components.prototype.initSlimScrollPlugin = function() {\n        //You can change the color of scroll bar here\n        $.fn.niceScroll &&  $(\".slimscroll-noti\").slimScroll({ position: 'right',size: \"5px\", color: '#98a6ad',height: '230px',wheelStep: 10});\n    },\n\n    //range slider\n    Components.prototype.initRangeSlider = function() {\n        $.fn.slider && $('[data-plugin=\"range-slider\"]').slider({});\n    },\n\n    /* -------------\n     * Form related controls\n     */\n    //switch\n    Components.prototype.initSwitchery = function() {\n        $('[data-plugin=\"switchery\"]').each(function (idx, obj) {\n            new Switchery($(this)[0], $(this).data());\n        });\n    },\n    //multiselect\n    Components.prototype.initMultiSelect = function() {\n        if($('[data-plugin=\"multiselect\"]').length > 0)\n            $('[data-plugin=\"multiselect\"]').multiSelect($(this).data());\n    },\n\n     /* -------------\n     * small charts related widgets\n     */\n     //peity charts\n     Components.prototype.initPeityCharts = function() {\n        $('[data-plugin=\"peity-pie\"]').each(function(idx, obj) {\n            var colors = $(this).attr('data-colors')?$(this).attr('data-colors').split(\",\"):[];\n            var width = $(this).attr('data-width')?$(this).attr('data-width'):20; //default is 20\n            var height = $(this).attr('data-height')?$(this).attr('data-height'):20; //default is 20\n            $(this).peity(\"pie\", {\n                fill: colors,\n                width: width,\n                height: height\n            });\n        });\n        //donut\n         $('[data-plugin=\"peity-donut\"]').each(function(idx, obj) {\n            var colors = $(this).attr('data-colors')?$(this).attr('data-colors').split(\",\"):[];\n            var width = $(this).attr('data-width')?$(this).attr('data-width'):20; //default is 20\n            var height = $(this).attr('data-height')?$(this).attr('data-height'):20; //default is 20\n            $(this).peity(\"donut\", {\n                fill: colors,\n                width: width,\n                height: height\n            });\n        });\n\n         $('[data-plugin=\"peity-donut-alt\"]').each(function(idx, obj) {\n            $(this).peity(\"donut\");\n        });\n\n         // line\n         $('[data-plugin=\"peity-line\"]').each(function(idx, obj) {\n            $(this).peity(\"line\", $(this).data());\n         });\n\n         // bar\n         $('[data-plugin=\"peity-bar\"]').each(function(idx, obj) {\n            var colors = $(this).attr('data-colors')?$(this).attr('data-colors').split(\",\"):[];\n            var width = $(this).attr('data-width')?$(this).attr('data-width'):20; //default is 20\n            var height = $(this).attr('data-height')?$(this).attr('data-height'):20; //default is 20\n            $(this).peity(\"bar\", {\n                fill: colors,\n                width: width,\n                height: height\n            });\n         });\n     },\n\n    Components.prototype.initCounterUp = function() {\n        var delay = $(this).attr('data-delay')?$(this).attr('data-delay'):100; //default is 100\n        var time = $(this).attr('data-time')?$(this).attr('data-time'):1200; //default is 1200\n         $('[data-plugin=\"counterup\"]').each(function(idx, obj) {\n            $(this).counterUp({\n                delay: 100,\n                time: 1200\n            });\n         });\n     },\n\n\n\n    //initilizing\n    Components.prototype.init = function() {\n        var $this = this;\n        this.initTooltipPlugin(),\n        this.initPopoverPlugin(),\n        this.initNiceScrollPlugin(),\n        this.initSlimScrollPlugin(),\n        this.initCustomModalPlugin(),\n        this.initRangeSlider(),\n        this.initSwitchery(),\n        this.initMultiSelect(),\n        this.initPeityCharts(),\n        this.initCounterUp(),\n        //creating portles\n        $.Portlet.init();\n    },\n\n    $.Components = new Components, $.Components.Constructor = Components\n\n}(window.jQuery),\n    //initializing main application module\nfunction($) {\n    \"use strict\";\n    $.Components.init();\n}(window.jQuery);\n\n\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/jquery.nicescroll.js",
    "content": "/* jquery.nicescroll 3.5.0 InuYaksa*2013 MIT http://areaaperta.com/nicescroll */(function(e){var z=!1,E=!1,L=5E3,M=2E3,y=0,N=function(){var e=document.getElementsByTagName(\"script\"),e=e[e.length-1].src.split(\"?\")[0];return 0<e.split(\"/\").length?e.split(\"/\").slice(0,-1).join(\"/\")+\"/\":\"\"}(),H=[\"ms\",\"moz\",\"webkit\",\"o\"],v=window.requestAnimationFrame||!1,w=window.cancelAnimationFrame||!1;if(!v)for(var O in H){var F=H[O];v||(v=window[F+\"RequestAnimationFrame\"]);w||(w=window[F+\"CancelAnimationFrame\"]||window[F+\"CancelRequestAnimationFrame\"])}var A=window.MutationObserver||window.WebKitMutationObserver||\n    !1,I={zindex:\"auto\",cursoropacitymin:0,cursoropacitymax:1,cursorcolor:\"#424242\",cursorwidth:\"5px\",cursorborder:\"1px solid #fff\",cursorborderradius:\"5px\",scrollspeed:60,mousescrollstep:24,touchbehavior:!1,hwacceleration:!0,usetransition:!0,boxzoom:!1,dblclickzoom:!0,gesturezoom:!0,grabcursorenabled:!0,autohidemode:!0,background:\"\",iframeautoresize:!0,cursorminheight:32,preservenativescrolling:!0,railoffset:!1,bouncescroll:!0,spacebarenabled:!0,railpadding:{top:0,right:0,left:0,bottom:0},disableoutline:!0,\n    horizrailenabled:!0,railalign:\"right\",railvalign:\"bottom\",enabletranslate3d:!0,enablemousewheel:!0,enablekeyboard:!0,smoothscroll:!0,sensitiverail:!0,enablemouselockapi:!0,cursorfixedheight:!1,directionlockdeadzone:6,hidecursordelay:400,nativeparentscrolling:!0,enablescrollonselection:!0,overflowx:!0,overflowy:!0,cursordragspeed:0.3,rtlmode:!1,cursordragontouch:!1,oneaxismousemode:\"auto\"},G=!1,P=function(){if(G)return G;var e=document.createElement(\"DIV\"),c={haspointerlock:\"pointerLockElement\"in document||\n    \"mozPointerLockElement\"in document||\"webkitPointerLockElement\"in document};c.isopera=\"opera\"in window;c.isopera12=c.isopera&&\"getUserMedia\"in navigator;c.isoperamini=\"[object OperaMini]\"===Object.prototype.toString.call(window.operamini);c.isie=\"all\"in document&&\"attachEvent\"in e&&!c.isopera;c.isieold=c.isie&&!(\"msInterpolationMode\"in e.style);c.isie7=c.isie&&!c.isieold&&(!(\"documentMode\"in document)||7==document.documentMode);c.isie8=c.isie&&\"documentMode\"in document&&8==document.documentMode;c.isie9=\n    c.isie&&\"performance\"in window&&9<=document.documentMode;c.isie10=c.isie&&\"performance\"in window&&10<=document.documentMode;c.isie9mobile=/iemobile.9/i.test(navigator.userAgent);c.isie9mobile&&(c.isie9=!1);c.isie7mobile=!c.isie9mobile&&c.isie7&&/iemobile/i.test(navigator.userAgent);c.ismozilla=\"MozAppearance\"in e.style;c.iswebkit=\"WebkitAppearance\"in e.style;c.ischrome=\"chrome\"in window;c.ischrome22=c.ischrome&&c.haspointerlock;c.ischrome26=c.ischrome&&\"transition\"in e.style;c.cantouch=\"ontouchstart\"in\n    document.documentElement||\"ontouchstart\"in window;c.hasmstouch=window.navigator.msPointerEnabled||!1;c.ismac=/^mac$/i.test(navigator.platform);c.isios=c.cantouch&&/iphone|ipad|ipod/i.test(navigator.platform);c.isios4=c.isios&&!(\"seal\"in Object);c.isandroid=/android/i.test(navigator.userAgent);c.trstyle=!1;c.hastransform=!1;c.hastranslate3d=!1;c.transitionstyle=!1;c.hastransition=!1;c.transitionend=!1;for(var k=[\"transform\",\"msTransform\",\"webkitTransform\",\"MozTransform\",\"OTransform\"],l=0;l<k.length;l++)if(\"undefined\"!=\n    typeof e.style[k[l]]){c.trstyle=k[l];break}c.hastransform=!1!=c.trstyle;c.hastransform&&(e.style[c.trstyle]=\"translate3d(1px,2px,3px)\",c.hastranslate3d=/translate3d/.test(e.style[c.trstyle]));c.transitionstyle=!1;c.prefixstyle=\"\";c.transitionend=!1;for(var k=\"transition webkitTransition MozTransition OTransition OTransition msTransition KhtmlTransition\".split(\" \"),q=\" -webkit- -moz- -o- -o -ms- -khtml-\".split(\" \"),t=\"transitionend webkitTransitionEnd transitionend otransitionend oTransitionEnd msTransitionEnd KhtmlTransitionEnd\".split(\" \"),\n                                                                                                                                                                                                                                                                     l=0;l<k.length;l++)if(k[l]in e.style){c.transitionstyle=k[l];c.prefixstyle=q[l];c.transitionend=t[l];break}c.ischrome26&&(c.prefixstyle=q[1]);c.hastransition=c.transitionstyle;a:{k=[\"-moz-grab\",\"-webkit-grab\",\"grab\"];if(c.ischrome&&!c.ischrome22||c.isie)k=[];for(l=0;l<k.length;l++)if(q=k[l],e.style.cursor=q,e.style.cursor==q){k=q;break a}k=\"url(http://www.google.com/intl/en_ALL/mapfiles/openhand.cur),n-resize\"}c.cursorgrabvalue=k;c.hasmousecapture=\"setCapture\"in e;c.hasMutationObserver=!1!==A;return G=\n    c},Q=function(h,c){function k(){var d=b.win;if(\"zIndex\"in d)return d.zIndex();for(;0<d.length&&9!=d[0].nodeType;){var c=d.css(\"zIndex\");if(!isNaN(c)&&0!=c)return parseInt(c);d=d.parent()}return!1}function l(d,c,f){c=d.css(c);d=parseFloat(c);return isNaN(d)?(d=u[c]||0,f=3==d?f?b.win.outerHeight()-b.win.innerHeight():b.win.outerWidth()-b.win.innerWidth():1,b.isie8&&d&&(d+=1),f?d:0):d}function q(d,c,f,g){b._bind(d,c,function(b){b=b?b:window.event;var g={original:b,target:b.target||b.srcElement,type:\"wheel\",\n    deltaMode:\"MozMousePixelScroll\"==b.type?0:1,deltaX:0,deltaZ:0,preventDefault:function(){b.preventDefault?b.preventDefault():b.returnValue=!1;return!1},stopImmediatePropagation:function(){b.stopImmediatePropagation?b.stopImmediatePropagation():b.cancelBubble=!0}};\"mousewheel\"==c?(g.deltaY=-0.025*b.wheelDelta,b.wheelDeltaX&&(g.deltaX=-0.025*b.wheelDeltaX)):g.deltaY=b.detail;return f.call(d,g)},g)}function t(d,c,f){var g,e;0==d.deltaMode?(g=-Math.floor(d.deltaX*(b.opt.mousescrollstep/54)),e=-Math.floor(d.deltaY*\n    (b.opt.mousescrollstep/54))):1==d.deltaMode&&(g=-Math.floor(d.deltaX*b.opt.mousescrollstep),e=-Math.floor(d.deltaY*b.opt.mousescrollstep));c&&(b.opt.oneaxismousemode&&0==g&&e)&&(g=e,e=0);g&&(b.scrollmom&&b.scrollmom.stop(),b.lastdeltax+=g,b.debounced(\"mousewheelx\",function(){var d=b.lastdeltax;b.lastdeltax=0;b.rail.drag||b.doScrollLeftBy(d)},120));if(e){if(b.opt.nativeparentscrolling&&f&&!b.ispage&&!b.zoomactive)if(0>e){if(b.getScrollTop()>=b.page.maxh)return!0}else if(0>=b.getScrollTop())return!0;\n    b.scrollmom&&b.scrollmom.stop();b.lastdeltay+=e;b.debounced(\"mousewheely\",function(){var d=b.lastdeltay;b.lastdeltay=0;b.rail.drag||b.doScrollBy(d)},120)}d.stopImmediatePropagation();return d.preventDefault()}var b=this;this.version=\"3.5.0\";this.name=\"nicescroll\";this.me=c;this.opt={doc:e(\"body\"),win:!1};e.extend(this.opt,I);this.opt.snapbackspeed=80;if(h)for(var p in b.opt)\"undefined\"!=typeof h[p]&&(b.opt[p]=h[p]);this.iddoc=(this.doc=b.opt.doc)&&this.doc[0]?this.doc[0].id||\"\":\"\";this.ispage=/BODY|HTML/.test(b.opt.win?\n    b.opt.win[0].nodeName:this.doc[0].nodeName);this.haswrapper=!1!==b.opt.win;this.win=b.opt.win||(this.ispage?e(window):this.doc);this.docscroll=this.ispage&&!this.haswrapper?e(window):this.win;this.body=e(\"body\");this.iframe=this.isfixed=this.viewport=!1;this.isiframe=\"IFRAME\"==this.doc[0].nodeName&&\"IFRAME\"==this.win[0].nodeName;this.istextarea=\"TEXTAREA\"==this.win[0].nodeName;this.forcescreen=!1;this.canshowonmouseevent=\"scroll\"!=b.opt.autohidemode;this.page=this.view=this.onzoomout=this.onzoomin=\n    this.onscrollcancel=this.onscrollend=this.onscrollstart=this.onclick=this.ongesturezoom=this.onkeypress=this.onmousewheel=this.onmousemove=this.onmouseup=this.onmousedown=!1;this.scroll={x:0,y:0};this.scrollratio={x:0,y:0};this.cursorheight=20;this.scrollvaluemax=0;this.observerremover=this.observer=this.scrollmom=this.scrollrunning=this.checkrtlmode=!1;do this.id=\"ascrail\"+M++;while(document.getElementById(this.id));this.hasmousefocus=this.hasfocus=this.zoomactive=this.zoom=this.selectiondrag=this.cursorfreezed=\n    this.cursor=this.rail=!1;this.visibility=!0;this.hidden=this.locked=!1;this.cursoractive=!0;this.overflowx=b.opt.overflowx;this.overflowy=b.opt.overflowy;this.nativescrollingarea=!1;this.checkarea=0;this.events=[];this.saved={};this.delaylist={};this.synclist={};this.lastdeltay=this.lastdeltax=0;this.detected=P();var g=e.extend({},this.detected);this.ishwscroll=(this.canhwscroll=g.hastransform&&b.opt.hwacceleration)&&b.haswrapper;this.istouchcapable=!1;g.cantouch&&(g.ischrome&&!g.isios&&!g.isandroid)&&\n(this.istouchcapable=!0,g.cantouch=!1);g.cantouch&&(g.ismozilla&&!g.isios&&!g.isandroid)&&(this.istouchcapable=!0,g.cantouch=!1);b.opt.enablemouselockapi||(g.hasmousecapture=!1,g.haspointerlock=!1);this.delayed=function(d,c,f,g){var e=b.delaylist[d],k=(new Date).getTime();if(!g&&e&&e.tt)return!1;e&&e.tt&&clearTimeout(e.tt);if(e&&e.last+f>k&&!e.tt)b.delaylist[d]={last:k+f,tt:setTimeout(function(){b.delaylist[d].tt=0;c.call()},f)};else if(!e||!e.tt)b.delaylist[d]={last:k,tt:0},setTimeout(function(){c.call()},\n    0)};this.debounced=function(d,c,f){var g=b.delaylist[d];(new Date).getTime();b.delaylist[d]=c;g||setTimeout(function(){var c=b.delaylist[d];b.delaylist[d]=!1;c.call()},f)};this.synched=function(d,c){b.synclist[d]=c;(function(){b.onsync||(v(function(){b.onsync=!1;for(d in b.synclist){var c=b.synclist[d];c&&c.call(b);b.synclist[d]=!1}}),b.onsync=!0)})();return d};this.unsynched=function(d){b.synclist[d]&&(b.synclist[d]=!1)};this.css=function(d,c){for(var f in c)b.saved.css.push([d,f,d.css(f)]),d.css(f,\n    c[f])};this.scrollTop=function(d){return\"undefined\"==typeof d?b.getScrollTop():b.setScrollTop(d)};this.scrollLeft=function(d){return\"undefined\"==typeof d?b.getScrollLeft():b.setScrollLeft(d)};BezierClass=function(b,c,f,g,e,k,l){this.st=b;this.ed=c;this.spd=f;this.p1=g||0;this.p2=e||1;this.p3=k||0;this.p4=l||1;this.ts=(new Date).getTime();this.df=this.ed-this.st};BezierClass.prototype={B2:function(b){return 3*b*b*(1-b)},B3:function(b){return 3*b*(1-b)*(1-b)},B4:function(b){return(1-b)*(1-b)*(1-b)},\n    getNow:function(){var b=1-((new Date).getTime()-this.ts)/this.spd,c=this.B2(b)+this.B3(b)+this.B4(b);return 0>b?this.ed:this.st+Math.round(this.df*c)},update:function(b,c){this.st=this.getNow();this.ed=b;this.spd=c;this.ts=(new Date).getTime();this.df=this.ed-this.st;return this}};if(this.ishwscroll){this.doc.translate={x:0,y:0,tx:\"0px\",ty:\"0px\"};g.hastranslate3d&&g.isios&&this.doc.css(\"-webkit-backface-visibility\",\"hidden\");var s=function(){var d=b.doc.css(g.trstyle);return d&&\"matrix\"==d.substr(0,\n    6)?d.replace(/^.*\\((.*)\\)$/g,\"$1\").replace(/px/g,\"\").split(/, +/):!1};this.getScrollTop=function(d){if(!d){if(d=s())return 16==d.length?-d[13]:-d[5];if(b.timerscroll&&b.timerscroll.bz)return b.timerscroll.bz.getNow()}return b.doc.translate.y};this.getScrollLeft=function(d){if(!d){if(d=s())return 16==d.length?-d[12]:-d[4];if(b.timerscroll&&b.timerscroll.bh)return b.timerscroll.bh.getNow()}return b.doc.translate.x};this.notifyScrollEvent=document.createEvent?function(b){var c=document.createEvent(\"UIEvents\");\n    c.initUIEvent(\"scroll\",!1,!0,window,1);b.dispatchEvent(c)}:document.fireEvent?function(b){var c=document.createEventObject();b.fireEvent(\"onscroll\");c.cancelBubble=!0}:function(b,c){};g.hastranslate3d&&b.opt.enabletranslate3d?(this.setScrollTop=function(d,c){b.doc.translate.y=d;b.doc.translate.ty=-1*d+\"px\";b.doc.css(g.trstyle,\"translate3d(\"+b.doc.translate.tx+\",\"+b.doc.translate.ty+\",0px)\");c||b.notifyScrollEvent(b.win[0])},this.setScrollLeft=function(d,c){b.doc.translate.x=d;b.doc.translate.tx=-1*\n    d+\"px\";b.doc.css(g.trstyle,\"translate3d(\"+b.doc.translate.tx+\",\"+b.doc.translate.ty+\",0px)\");c||b.notifyScrollEvent(b.win[0])}):(this.setScrollTop=function(d,c){b.doc.translate.y=d;b.doc.translate.ty=-1*d+\"px\";b.doc.css(g.trstyle,\"translate(\"+b.doc.translate.tx+\",\"+b.doc.translate.ty+\")\");c||b.notifyScrollEvent(b.win[0])},this.setScrollLeft=function(d,c){b.doc.translate.x=d;b.doc.translate.tx=-1*d+\"px\";b.doc.css(g.trstyle,\"translate(\"+b.doc.translate.tx+\",\"+b.doc.translate.ty+\")\");c||b.notifyScrollEvent(b.win[0])})}else this.getScrollTop=\n    function(){return b.docscroll.scrollTop()},this.setScrollTop=function(d){return b.docscroll.scrollTop(d)},this.getScrollLeft=function(){return b.docscroll.scrollLeft()},this.setScrollLeft=function(d){return b.docscroll.scrollLeft(d)};this.getTarget=function(b){return!b?!1:b.target?b.target:b.srcElement?b.srcElement:!1};this.hasParent=function(b,c){if(!b)return!1;for(var f=b.target||b.srcElement||b||!1;f&&f.id!=c;)f=f.parentNode||!1;return!1!==f};var u={thin:1,medium:3,thick:5};this.getOffset=function(){if(b.isfixed)return{top:parseFloat(b.win.css(\"top\")),\n    left:parseFloat(b.win.css(\"left\"))};if(!b.viewport)return b.win.offset();var d=b.win.offset(),c=b.viewport.offset();return{top:d.top-c.top+b.viewport.scrollTop(),left:d.left-c.left+b.viewport.scrollLeft()}};this.updateScrollBar=function(d){if(b.ishwscroll)b.rail.css({height:b.win.innerHeight()}),b.railh&&b.railh.css({width:b.win.innerWidth()});else{var c=b.getOffset(),f=c.top,g=c.left,f=f+l(b.win,\"border-top-width\",!0);b.win.outerWidth();b.win.innerWidth();var g=g+(b.rail.align?b.win.outerWidth()-\n    l(b.win,\"border-right-width\")-b.rail.width:l(b.win,\"border-left-width\")),e=b.opt.railoffset;e&&(e.top&&(f+=e.top),b.rail.align&&e.left&&(g+=e.left));b.locked||b.rail.css({top:f,left:g,height:d?d.h:b.win.innerHeight()});b.zoom&&b.zoom.css({top:f+1,left:1==b.rail.align?g-20:g+b.rail.width+4});b.railh&&!b.locked&&(f=c.top,g=c.left,d=b.railh.align?f+l(b.win,\"border-top-width\",!0)+b.win.innerHeight()-b.railh.height:f+l(b.win,\"border-top-width\",!0),g+=l(b.win,\"border-left-width\"),b.railh.css({top:d,left:g,\n    width:b.railh.width}))}};this.doRailClick=function(d,c,f){var g;b.locked||(b.cancelEvent(d),c?(c=f?b.doScrollLeft:b.doScrollTop,g=f?(d.pageX-b.railh.offset().left-b.cursorwidth/2)*b.scrollratio.x:(d.pageY-b.rail.offset().top-b.cursorheight/2)*b.scrollratio.y,c(g)):(c=f?b.doScrollLeftBy:b.doScrollBy,g=f?b.scroll.x:b.scroll.y,d=f?d.pageX-b.railh.offset().left:d.pageY-b.rail.offset().top,f=f?b.view.w:b.view.h,g>=d?c(f):c(-f)))};b.hasanimationframe=v;b.hascancelanimationframe=w;b.hasanimationframe?b.hascancelanimationframe||\n    (w=function(){b.cancelAnimationFrame=!0}):(v=function(b){return setTimeout(b,15-Math.floor(+new Date/1E3)%16)},w=clearInterval);this.init=function(){b.saved.css=[];if(g.isie7mobile||g.isoperamini)return!0;g.hasmstouch&&b.css(b.ispage?e(\"html\"):b.win,{\"-ms-touch-action\":\"none\"});b.zindex=\"auto\";b.zindex=!b.ispage&&\"auto\"==b.opt.zindex?k()||\"auto\":b.opt.zindex;!b.ispage&&\"auto\"!=b.zindex&&b.zindex>y&&(y=b.zindex);b.isie&&(0==b.zindex&&\"auto\"==b.opt.zindex)&&(b.zindex=\"auto\");if(!b.ispage||!g.cantouch&&\n    !g.isieold&&!g.isie9mobile){var d=b.docscroll;b.ispage&&(d=b.haswrapper?b.win:b.doc);g.isie9mobile||b.css(d,{\"overflow-y\":\"hidden\"});b.ispage&&g.isie7&&(\"BODY\"==b.doc[0].nodeName?b.css(e(\"html\"),{\"overflow-y\":\"hidden\"}):\"HTML\"==b.doc[0].nodeName&&b.css(e(\"body\"),{\"overflow-y\":\"hidden\"}));g.isios&&(!b.ispage&&!b.haswrapper)&&b.css(e(\"body\"),{\"-webkit-overflow-scrolling\":\"touch\"});var c=e(document.createElement(\"div\"));c.css({position:\"relative\",top:0,\"float\":\"right\",width:b.opt.cursorwidth,height:\"0px\",\n    \"background-color\":b.opt.cursorcolor,border:b.opt.cursorborder,\"background-clip\":\"padding-box\",\"-webkit-border-radius\":b.opt.cursorborderradius,\"-moz-border-radius\":b.opt.cursorborderradius,\"border-radius\":b.opt.cursorborderradius});c.hborder=parseFloat(c.outerHeight()-c.innerHeight());b.cursor=c;var f=e(document.createElement(\"div\"));f.attr(\"id\",b.id);f.addClass(\"nicescroll-rails\");var l,h,x=[\"left\",\"right\"],q;for(q in x)h=x[q],(l=b.opt.railpadding[h])?f.css(\"padding-\"+h,l+\"px\"):b.opt.railpadding[h]=\n    0;f.append(c);f.width=Math.max(parseFloat(b.opt.cursorwidth),c.outerWidth())+b.opt.railpadding.left+b.opt.railpadding.right;f.css({width:f.width+\"px\",zIndex:b.zindex,background:b.opt.background,cursor:\"default\"});f.visibility=!0;f.scrollable=!0;f.align=\"left\"==b.opt.railalign?0:1;b.rail=f;c=b.rail.drag=!1;b.opt.boxzoom&&(!b.ispage&&!g.isieold)&&(c=document.createElement(\"div\"),b.bind(c,\"click\",b.doZoom),b.zoom=e(c),b.zoom.css({cursor:\"pointer\",\"z-index\":b.zindex,backgroundImage:\"url(\"+N+\"zoomico.png)\",\n    height:18,width:18,backgroundPosition:\"0px 0px\"}),b.opt.dblclickzoom&&b.bind(b.win,\"dblclick\",b.doZoom),g.cantouch&&b.opt.gesturezoom&&(b.ongesturezoom=function(d){1.5<d.scale&&b.doZoomIn(d);0.8>d.scale&&b.doZoomOut(d);return b.cancelEvent(d)},b.bind(b.win,\"gestureend\",b.ongesturezoom)));b.railh=!1;if(b.opt.horizrailenabled){b.css(d,{\"overflow-x\":\"hidden\"});c=e(document.createElement(\"div\"));c.css({position:\"relative\",top:0,height:b.opt.cursorwidth,width:\"0px\",\"background-color\":b.opt.cursorcolor,\n    border:b.opt.cursorborder,\"background-clip\":\"padding-box\",\"-webkit-border-radius\":b.opt.cursorborderradius,\"-moz-border-radius\":b.opt.cursorborderradius,\"border-radius\":b.opt.cursorborderradius});c.wborder=parseFloat(c.outerWidth()-c.innerWidth());b.cursorh=c;var m=e(document.createElement(\"div\"));m.attr(\"id\",b.id+\"-hr\");m.addClass(\"nicescroll-rails\");m.height=Math.max(parseFloat(b.opt.cursorwidth),c.outerHeight());m.css({height:m.height+\"px\",zIndex:b.zindex,background:b.opt.background});m.append(c);\n    m.visibility=!0;m.scrollable=!0;m.align=\"top\"==b.opt.railvalign?0:1;b.railh=m;b.railh.drag=!1}b.ispage?(f.css({position:\"fixed\",top:\"0px\",height:\"100%\"}),f.align?f.css({right:\"0px\"}):f.css({left:\"0px\"}),b.body.append(f),b.railh&&(m.css({position:\"fixed\",left:\"0px\",width:\"100%\"}),m.align?m.css({bottom:\"0px\"}):m.css({top:\"0px\"}),b.body.append(m))):(b.ishwscroll?(\"static\"==b.win.css(\"position\")&&b.css(b.win,{position:\"relative\"}),d=\"HTML\"==b.win[0].nodeName?b.body:b.win,b.zoom&&(b.zoom.css({position:\"absolute\",\n    top:1,right:0,\"margin-right\":f.width+4}),d.append(b.zoom)),f.css({position:\"absolute\",top:0}),f.align?f.css({right:0}):f.css({left:0}),d.append(f),m&&(m.css({position:\"absolute\",left:0,bottom:0}),m.align?m.css({bottom:0}):m.css({top:0}),d.append(m))):(b.isfixed=\"fixed\"==b.win.css(\"position\"),d=b.isfixed?\"fixed\":\"absolute\",b.isfixed||(b.viewport=b.getViewport(b.win[0])),b.viewport&&(b.body=b.viewport,!1==/fixed|relative|absolute/.test(b.viewport.css(\"position\"))&&b.css(b.viewport,{position:\"relative\"})),\n    f.css({position:d}),b.zoom&&b.zoom.css({position:d}),b.updateScrollBar(),b.body.append(f),b.zoom&&b.body.append(b.zoom),b.railh&&(m.css({position:d}),b.body.append(m))),g.isios&&b.css(b.win,{\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\",\"-webkit-touch-callout\":\"none\"}),g.isie&&b.opt.disableoutline&&b.win.attr(\"hideFocus\",\"true\"),g.iswebkit&&b.opt.disableoutline&&b.win.css({outline:\"none\"}));!1===b.opt.autohidemode?(b.autohidedom=!1,b.rail.css({opacity:b.opt.cursoropacitymax}),b.railh&&b.railh.css({opacity:b.opt.cursoropacitymax})):\n    !0===b.opt.autohidemode||\"leave\"===b.opt.autohidemode?(b.autohidedom=e().add(b.rail),g.isie8&&(b.autohidedom=b.autohidedom.add(b.cursor)),b.railh&&(b.autohidedom=b.autohidedom.add(b.railh)),b.railh&&g.isie8&&(b.autohidedom=b.autohidedom.add(b.cursorh))):\"scroll\"==b.opt.autohidemode?(b.autohidedom=e().add(b.rail),b.railh&&(b.autohidedom=b.autohidedom.add(b.railh))):\"cursor\"==b.opt.autohidemode?(b.autohidedom=e().add(b.cursor),b.railh&&(b.autohidedom=b.autohidedom.add(b.cursorh))):\"hidden\"==b.opt.autohidemode&&\n        (b.autohidedom=!1,b.hide(),b.locked=!1);if(g.isie9mobile)b.scrollmom=new J(b),b.onmangotouch=function(d){d=b.getScrollTop();var c=b.getScrollLeft();if(d==b.scrollmom.lastscrolly&&c==b.scrollmom.lastscrollx)return!0;var f=d-b.mangotouch.sy,g=c-b.mangotouch.sx;if(0!=Math.round(Math.sqrt(Math.pow(g,2)+Math.pow(f,2)))){var n=0>f?-1:1,e=0>g?-1:1,k=+new Date;b.mangotouch.lazy&&clearTimeout(b.mangotouch.lazy);80<k-b.mangotouch.tm||b.mangotouch.dry!=n||b.mangotouch.drx!=e?(b.scrollmom.stop(),b.scrollmom.reset(c,\n    d),b.mangotouch.sy=d,b.mangotouch.ly=d,b.mangotouch.sx=c,b.mangotouch.lx=c,b.mangotouch.dry=n,b.mangotouch.drx=e,b.mangotouch.tm=k):(b.scrollmom.stop(),b.scrollmom.update(b.mangotouch.sx-g,b.mangotouch.sy-f),b.mangotouch.tm=k,f=Math.max(Math.abs(b.mangotouch.ly-d),Math.abs(b.mangotouch.lx-c)),b.mangotouch.ly=d,b.mangotouch.lx=c,2<f&&(b.mangotouch.lazy=setTimeout(function(){b.mangotouch.lazy=!1;b.mangotouch.dry=0;b.mangotouch.drx=0;b.mangotouch.tm=0;b.scrollmom.doMomentum(30)},100)))}},f=b.getScrollTop(),\n    m=b.getScrollLeft(),b.mangotouch={sy:f,ly:f,dry:0,sx:m,lx:m,drx:0,lazy:!1,tm:0},b.bind(b.docscroll,\"scroll\",b.onmangotouch);else{if(g.cantouch||b.istouchcapable||b.opt.touchbehavior||g.hasmstouch){b.scrollmom=new J(b);b.ontouchstart=function(d){if(d.pointerType&&2!=d.pointerType)return!1;if(!b.locked){if(g.hasmstouch)for(var c=d.target?d.target:!1;c;){var f=e(c).getNiceScroll();if(0<f.length&&f[0].me==b.me)break;if(0<f.length)return!1;if(\"DIV\"==c.nodeName&&c.id==b.id)break;c=c.parentNode?c.parentNode:\n    !1}b.cancelScroll();if((c=b.getTarget(d))&&/INPUT/i.test(c.nodeName)&&/range/i.test(c.type))return b.stopPropagation(d);!(\"clientX\"in d)&&\"changedTouches\"in d&&(d.clientX=d.changedTouches[0].clientX,d.clientY=d.changedTouches[0].clientY);b.forcescreen&&(f=d,d={original:d.original?d.original:d},d.clientX=f.screenX,d.clientY=f.screenY);b.rail.drag={x:d.clientX,y:d.clientY,sx:b.scroll.x,sy:b.scroll.y,st:b.getScrollTop(),sl:b.getScrollLeft(),pt:2,dl:!1};if(b.ispage||!b.opt.directionlockdeadzone)b.rail.drag.dl=\n    \"f\";else{var f=e(window).width(),n=e(window).height(),k=Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),l=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),n=Math.max(0,l-n),f=Math.max(0,k-f);b.rail.drag.ck=!b.rail.scrollable&&b.railh.scrollable?0<n?\"v\":!1:b.rail.scrollable&&!b.railh.scrollable?0<f?\"h\":!1:!1;b.rail.drag.ck||(b.rail.drag.dl=\"f\")}b.opt.touchbehavior&&(b.isiframe&&g.isie)&&(f=b.win.position(),b.rail.drag.x+=f.left,b.rail.drag.y+=f.top);\n    b.hasmoving=!1;b.lastmouseup=!1;b.scrollmom.reset(d.clientX,d.clientY);if(!g.cantouch&&!this.istouchcapable&&!g.hasmstouch){if(!c||!/INPUT|SELECT|TEXTAREA/i.test(c.nodeName))return!b.ispage&&g.hasmousecapture&&c.setCapture(),b.opt.touchbehavior?b.cancelEvent(d):b.stopPropagation(d);/SUBMIT|CANCEL|BUTTON/i.test(e(c).attr(\"type\"))&&(pc={tg:c,click:!1},b.preventclick=pc)}}};b.ontouchend=function(d){if(d.pointerType&&2!=d.pointerType)return!1;if(b.rail.drag&&2==b.rail.drag.pt&&(b.scrollmom.doMomentum(),\n    b.rail.drag=!1,b.hasmoving&&(b.hasmoving=!1,b.lastmouseup=!0,b.hideCursor(),g.hasmousecapture&&document.releaseCapture(),!g.cantouch)))return b.cancelEvent(d)};var t=b.opt.touchbehavior&&b.isiframe&&!g.hasmousecapture;b.ontouchmove=function(d,c){if(d.pointerType&&2!=d.pointerType)return!1;if(b.rail.drag&&2==b.rail.drag.pt){if(g.cantouch&&\"undefined\"==typeof d.original)return!0;b.hasmoving=!0;b.preventclick&&!b.preventclick.click&&(b.preventclick.click=b.preventclick.tg.onclick||!1,b.preventclick.tg.onclick=\n    b.onpreventclick);d=e.extend({original:d},d);\"changedTouches\"in d&&(d.clientX=d.changedTouches[0].clientX,d.clientY=d.changedTouches[0].clientY);if(b.forcescreen){var f=d;d={original:d.original?d.original:d};d.clientX=f.screenX;d.clientY=f.screenY}f=ofy=0;if(t&&!c){var n=b.win.position(),f=-n.left;ofy=-n.top}var k=d.clientY+ofy,n=k-b.rail.drag.y,l=d.clientX+f,h=l-b.rail.drag.x,r=b.rail.drag.st-n;b.ishwscroll&&b.opt.bouncescroll?0>r?r=Math.round(r/2):r>b.page.maxh&&(r=b.page.maxh+Math.round((r-b.page.maxh)/\n    2)):(0>r&&(k=r=0),r>b.page.maxh&&(r=b.page.maxh,k=0));if(b.railh&&b.railh.scrollable){var m=b.rail.drag.sl-h;b.ishwscroll&&b.opt.bouncescroll?0>m?m=Math.round(m/2):m>b.page.maxw&&(m=b.page.maxw+Math.round((m-b.page.maxw)/2)):(0>m&&(l=m=0),m>b.page.maxw&&(m=b.page.maxw,l=0))}f=!1;if(b.rail.drag.dl)f=!0,\"v\"==b.rail.drag.dl?m=b.rail.drag.sl:\"h\"==b.rail.drag.dl&&(r=b.rail.drag.st);else{var n=Math.abs(n),h=Math.abs(h),x=b.opt.directionlockdeadzone;if(\"v\"==b.rail.drag.ck){if(n>x&&h<=0.3*n)return b.rail.drag=\n    !1,!0;h>x&&(b.rail.drag.dl=\"f\",e(\"body\").scrollTop(e(\"body\").scrollTop()))}else if(\"h\"==b.rail.drag.ck){if(h>x&&n<=0.3*h)return b.rail.drag=!1,!0;n>x&&(b.rail.drag.dl=\"f\",e(\"body\").scrollLeft(e(\"body\").scrollLeft()))}}b.synched(\"touchmove\",function(){b.rail.drag&&2==b.rail.drag.pt&&(b.prepareTransition&&b.prepareTransition(0),b.rail.scrollable&&b.setScrollTop(r),b.scrollmom.update(l,k),b.railh&&b.railh.scrollable?(b.setScrollLeft(m),b.showCursor(r,m)):b.showCursor(r),g.isie10&&document.selection.clear())});\n    g.ischrome&&b.istouchcapable&&(f=!1);if(f)return b.cancelEvent(d)}}}b.onmousedown=function(d,c){if(!(b.rail.drag&&1!=b.rail.drag.pt)){if(b.locked)return b.cancelEvent(d);b.cancelScroll();b.rail.drag={x:d.clientX,y:d.clientY,sx:b.scroll.x,sy:b.scroll.y,pt:1,hr:!!c};var f=b.getTarget(d);!b.ispage&&g.hasmousecapture&&f.setCapture();b.isiframe&&!g.hasmousecapture&&(b.saved.csspointerevents=b.doc.css(\"pointer-events\"),b.css(b.doc,{\"pointer-events\":\"none\"}));return b.cancelEvent(d)}};b.onmouseup=function(d){if(b.rail.drag&&\n    (g.hasmousecapture&&document.releaseCapture(),b.isiframe&&!g.hasmousecapture&&b.doc.css(\"pointer-events\",b.saved.csspointerevents),1==b.rail.drag.pt))return b.rail.drag=!1,b.cancelEvent(d)};b.onmousemove=function(d){if(b.rail.drag&&1==b.rail.drag.pt){if(g.ischrome&&0==d.which)return b.onmouseup(d);b.cursorfreezed=!0;if(b.rail.drag.hr){b.scroll.x=b.rail.drag.sx+(d.clientX-b.rail.drag.x);0>b.scroll.x&&(b.scroll.x=0);var c=b.scrollvaluemaxw;b.scroll.x>c&&(b.scroll.x=c)}else b.scroll.y=b.rail.drag.sy+\n    (d.clientY-b.rail.drag.y),0>b.scroll.y&&(b.scroll.y=0),c=b.scrollvaluemax,b.scroll.y>c&&(b.scroll.y=c);b.synched(\"mousemove\",function(){b.rail.drag&&1==b.rail.drag.pt&&(b.showCursor(),b.rail.drag.hr?b.doScrollLeft(Math.round(b.scroll.x*b.scrollratio.x),b.opt.cursordragspeed):b.doScrollTop(Math.round(b.scroll.y*b.scrollratio.y),b.opt.cursordragspeed))});return b.cancelEvent(d)}};if(g.cantouch||b.opt.touchbehavior)b.onpreventclick=function(d){if(b.preventclick)return b.preventclick.tg.onclick=b.preventclick.click,\n    b.preventclick=!1,b.cancelEvent(d)},b.bind(b.win,\"mousedown\",b.ontouchstart),b.onclick=g.isios?!1:function(d){return b.lastmouseup?(b.lastmouseup=!1,b.cancelEvent(d)):!0},b.opt.grabcursorenabled&&g.cursorgrabvalue&&(b.css(b.ispage?b.doc:b.win,{cursor:g.cursorgrabvalue}),b.css(b.rail,{cursor:g.cursorgrabvalue}));else{var p=function(d){if(b.selectiondrag){if(d){var c=b.win.outerHeight();d=d.pageY-b.selectiondrag.top;0<d&&d<c&&(d=0);d>=c&&(d-=c);b.selectiondrag.df=d}0!=b.selectiondrag.df&&(b.doScrollBy(2*\n    -Math.floor(b.selectiondrag.df/6)),b.debounced(\"doselectionscroll\",function(){p()},50))}};b.hasTextSelected=\"getSelection\"in document?function(){return 0<document.getSelection().rangeCount}:\"selection\"in document?function(){return\"None\"!=document.selection.type}:function(){return!1};b.onselectionstart=function(d){b.ispage||(b.selectiondrag=b.win.offset())};b.onselectionend=function(d){b.selectiondrag=!1};b.onselectiondrag=function(d){b.selectiondrag&&b.hasTextSelected()&&b.debounced(\"selectionscroll\",\n    function(){p(d)},250)}}g.hasmstouch&&(b.css(b.rail,{\"-ms-touch-action\":\"none\"}),b.css(b.cursor,{\"-ms-touch-action\":\"none\"}),b.bind(b.win,\"MSPointerDown\",b.ontouchstart),b.bind(document,\"MSPointerUp\",b.ontouchend),b.bind(document,\"MSPointerMove\",b.ontouchmove),b.bind(b.cursor,\"MSGestureHold\",function(b){b.preventDefault()}),b.bind(b.cursor,\"contextmenu\",function(b){b.preventDefault()}));this.istouchcapable&&(b.bind(b.win,\"touchstart\",b.ontouchstart),b.bind(document,\"touchend\",b.ontouchend),b.bind(document,\n    \"touchcancel\",b.ontouchend),b.bind(document,\"touchmove\",b.ontouchmove));b.bind(b.cursor,\"mousedown\",b.onmousedown);b.bind(b.cursor,\"mouseup\",b.onmouseup);b.railh&&(b.bind(b.cursorh,\"mousedown\",function(d){b.onmousedown(d,!0)}),b.bind(b.cursorh,\"mouseup\",function(d){if(!(b.rail.drag&&2==b.rail.drag.pt))return b.rail.drag=!1,b.hasmoving=!1,b.hideCursor(),g.hasmousecapture&&document.releaseCapture(),b.cancelEvent(d)}));if(b.opt.cursordragontouch||!g.cantouch&&!b.opt.touchbehavior)b.rail.css({cursor:\"default\"}),\n    b.railh&&b.railh.css({cursor:\"default\"}),b.jqbind(b.rail,\"mouseenter\",function(){b.canshowonmouseevent&&b.showCursor();b.rail.active=!0}),b.jqbind(b.rail,\"mouseleave\",function(){b.rail.active=!1;b.rail.drag||b.hideCursor()}),b.opt.sensitiverail&&(b.bind(b.rail,\"click\",function(d){b.doRailClick(d,!1,!1)}),b.bind(b.rail,\"dblclick\",function(d){b.doRailClick(d,!0,!1)}),b.bind(b.cursor,\"click\",function(d){b.cancelEvent(d)}),b.bind(b.cursor,\"dblclick\",function(d){b.cancelEvent(d)})),b.railh&&(b.jqbind(b.railh,\n    \"mouseenter\",function(){b.canshowonmouseevent&&b.showCursor();b.rail.active=!0}),b.jqbind(b.railh,\"mouseleave\",function(){b.rail.active=!1;b.rail.drag||b.hideCursor()}),b.opt.sensitiverail&&(b.bind(b.railh,\"click\",function(d){b.doRailClick(d,!1,!0)}),b.bind(b.railh,\"dblclick\",function(d){b.doRailClick(d,!0,!0)}),b.bind(b.cursorh,\"click\",function(d){b.cancelEvent(d)}),b.bind(b.cursorh,\"dblclick\",function(d){b.cancelEvent(d)})));!g.cantouch&&!b.opt.touchbehavior?(b.bind(g.hasmousecapture?b.win:document,\n    \"mouseup\",b.onmouseup),b.bind(document,\"mousemove\",b.onmousemove),b.onclick&&b.bind(document,\"click\",b.onclick),!b.ispage&&b.opt.enablescrollonselection&&(b.bind(b.win[0],\"mousedown\",b.onselectionstart),b.bind(document,\"mouseup\",b.onselectionend),b.bind(b.cursor,\"mouseup\",b.onselectionend),b.cursorh&&b.bind(b.cursorh,\"mouseup\",b.onselectionend),b.bind(document,\"mousemove\",b.onselectiondrag)),b.zoom&&(b.jqbind(b.zoom,\"mouseenter\",function(){b.canshowonmouseevent&&b.showCursor();b.rail.active=!0}),\n    b.jqbind(b.zoom,\"mouseleave\",function(){b.rail.active=!1;b.rail.drag||b.hideCursor()}))):(b.bind(g.hasmousecapture?b.win:document,\"mouseup\",b.ontouchend),b.bind(document,\"mousemove\",b.ontouchmove),b.onclick&&b.bind(document,\"click\",b.onclick),b.opt.cursordragontouch&&(b.bind(b.cursor,\"mousedown\",b.onmousedown),b.bind(b.cursor,\"mousemove\",b.onmousemove),b.cursorh&&b.bind(b.cursorh,\"mousedown\",function(d){b.onmousedown(d,!0)}),b.cursorh&&b.bind(b.cursorh,\"mousemove\",b.onmousemove)));b.opt.enablemousewheel&&\n(b.isiframe||b.bind(g.isie&&b.ispage?document:b.win,\"mousewheel\",b.onmousewheel),b.bind(b.rail,\"mousewheel\",b.onmousewheel),b.railh&&b.bind(b.railh,\"mousewheel\",b.onmousewheelhr));!b.ispage&&(!g.cantouch&&!/HTML|BODY/.test(b.win[0].nodeName))&&(b.win.attr(\"tabindex\")||b.win.attr({tabindex:L++}),b.jqbind(b.win,\"focus\",function(d){z=b.getTarget(d).id||!0;b.hasfocus=!0;b.canshowonmouseevent&&b.noticeCursor()}),b.jqbind(b.win,\"blur\",function(d){z=!1;b.hasfocus=!1}),b.jqbind(b.win,\"mouseenter\",function(d){E=\n    b.getTarget(d).id||!0;b.hasmousefocus=!0;b.canshowonmouseevent&&b.noticeCursor()}),b.jqbind(b.win,\"mouseleave\",function(){E=!1;b.hasmousefocus=!1;b.rail.drag||b.hideCursor()}))}b.onkeypress=function(d){if(b.locked&&0==b.page.maxh)return!0;d=d?d:window.e;var c=b.getTarget(d);if(c&&/INPUT|TEXTAREA|SELECT|OPTION/.test(c.nodeName)&&(!c.getAttribute(\"type\")&&!c.type||!/submit|button|cancel/i.tp))return!0;if(b.hasfocus||b.hasmousefocus&&!z||b.ispage&&!z&&!E){c=d.keyCode;if(b.locked&&27!=c)return b.cancelEvent(d);\n    var f=d.ctrlKey||!1,n=d.shiftKey||!1,g=!1;switch(c){case 38:case 63233:b.doScrollBy(72);g=!0;break;case 40:case 63235:b.doScrollBy(-72);g=!0;break;case 37:case 63232:b.railh&&(f?b.doScrollLeft(0):b.doScrollLeftBy(72),g=!0);break;case 39:case 63234:b.railh&&(f?b.doScrollLeft(b.page.maxw):b.doScrollLeftBy(-72),g=!0);break;case 33:case 63276:b.doScrollBy(b.view.h);g=!0;break;case 34:case 63277:b.doScrollBy(-b.view.h);g=!0;break;case 36:case 63273:b.railh&&f?b.doScrollPos(0,0):b.doScrollTo(0);g=!0;break;\n        case 35:case 63275:b.railh&&f?b.doScrollPos(b.page.maxw,b.page.maxh):b.doScrollTo(b.page.maxh);g=!0;break;case 32:b.opt.spacebarenabled&&(n?b.doScrollBy(b.view.h):b.doScrollBy(-b.view.h),g=!0);break;case 27:b.zoomactive&&(b.doZoom(),g=!0)}if(g)return b.cancelEvent(d)}};b.opt.enablekeyboard&&b.bind(document,g.isopera&&!g.isopera12?\"keypress\":\"keydown\",b.onkeypress);b.bind(window,\"resize\",b.lazyResize);b.bind(window,\"orientationchange\",b.lazyResize);b.bind(window,\"load\",b.lazyResize);if(g.ischrome&&\n    !b.ispage&&!b.haswrapper){var s=b.win.attr(\"style\"),f=parseFloat(b.win.css(\"width\"))+1;b.win.css(\"width\",f);b.synched(\"chromefix\",function(){b.win.attr(\"style\",s)})}b.onAttributeChange=function(d){b.lazyResize(250)};!b.ispage&&!b.haswrapper&&(!1!==A?(b.observer=new A(function(d){d.forEach(b.onAttributeChange)}),b.observer.observe(b.win[0],{childList:!0,characterData:!1,attributes:!0,subtree:!1}),b.observerremover=new A(function(d){d.forEach(function(d){if(0<d.removedNodes.length)for(var c in d.removedNodes)if(d.removedNodes[c]==\n    b.win[0])return b.remove()})}),b.observerremover.observe(b.win[0].parentNode,{childList:!0,characterData:!1,attributes:!1,subtree:!1})):(b.bind(b.win,g.isie&&!g.isie9?\"propertychange\":\"DOMAttrModified\",b.onAttributeChange),g.isie9&&b.win[0].attachEvent(\"onpropertychange\",b.onAttributeChange),b.bind(b.win,\"DOMNodeRemoved\",function(d){d.target==b.win[0]&&b.remove()})));!b.ispage&&b.opt.boxzoom&&b.bind(window,\"resize\",b.resizeZoom);b.istextarea&&b.bind(b.win,\"mouseup\",b.lazyResize);b.checkrtlmode=!0;\n    b.lazyResize(30)}if(\"IFRAME\"==this.doc[0].nodeName){var K=function(d){b.iframexd=!1;try{var c=\"contentDocument\"in this?this.contentDocument:this.contentWindow.document}catch(f){b.iframexd=!0,c=!1}if(b.iframexd)return\"console\"in window&&console.log(\"NiceScroll error: policy restriced iframe\"),!0;b.forcescreen=!0;b.isiframe&&(b.iframe={doc:e(c),html:b.doc.contents().find(\"html\")[0],body:b.doc.contents().find(\"body\")[0]},b.getContentSize=function(){return{w:Math.max(b.iframe.html.scrollWidth,b.iframe.body.scrollWidth),\n    h:Math.max(b.iframe.html.scrollHeight,b.iframe.body.scrollHeight)}},b.docscroll=e(b.iframe.body));!g.isios&&(b.opt.iframeautoresize&&!b.isiframe)&&(b.win.scrollTop(0),b.doc.height(\"\"),d=Math.max(c.getElementsByTagName(\"html\")[0].scrollHeight,c.body.scrollHeight),b.doc.height(d));b.lazyResize(30);g.isie7&&b.css(e(b.iframe.html),{\"overflow-y\":\"hidden\"});b.css(e(b.iframe.body),{\"overflow-y\":\"hidden\"});g.isios&&b.haswrapper&&b.css(e(c.body),{\"-webkit-transform\":\"translate3d(0,0,0)\"});\"contentWindow\"in\n    this?b.bind(this.contentWindow,\"scroll\",b.onscroll):b.bind(c,\"scroll\",b.onscroll);b.opt.enablemousewheel&&b.bind(c,\"mousewheel\",b.onmousewheel);b.opt.enablekeyboard&&b.bind(c,g.isopera?\"keypress\":\"keydown\",b.onkeypress);if(g.cantouch||b.opt.touchbehavior)b.bind(c,\"mousedown\",b.ontouchstart),b.bind(c,\"mousemove\",function(d){b.ontouchmove(d,!0)}),b.opt.grabcursorenabled&&g.cursorgrabvalue&&b.css(e(c.body),{cursor:g.cursorgrabvalue});b.bind(c,\"mouseup\",b.ontouchend);b.zoom&&(b.opt.dblclickzoom&&b.bind(c,\n    \"dblclick\",b.doZoom),b.ongesturezoom&&b.bind(c,\"gestureend\",b.ongesturezoom))};this.doc[0].readyState&&\"complete\"==this.doc[0].readyState&&setTimeout(function(){K.call(b.doc[0],!1)},500);b.bind(this.doc,\"load\",K)}};this.showCursor=function(d,c){b.cursortimeout&&(clearTimeout(b.cursortimeout),b.cursortimeout=0);if(b.rail){b.autohidedom&&(b.autohidedom.stop().css({opacity:b.opt.cursoropacitymax}),b.cursoractive=!0);if(!b.rail.drag||1!=b.rail.drag.pt)\"undefined\"!=typeof d&&!1!==d&&(b.scroll.y=Math.round(1*\n    d/b.scrollratio.y)),\"undefined\"!=typeof c&&(b.scroll.x=Math.round(1*c/b.scrollratio.x));b.cursor.css({height:b.cursorheight,top:b.scroll.y});b.cursorh&&(!b.rail.align&&b.rail.visibility?b.cursorh.css({width:b.cursorwidth,left:b.scroll.x+b.rail.width}):b.cursorh.css({width:b.cursorwidth,left:b.scroll.x}),b.cursoractive=!0);b.zoom&&b.zoom.stop().css({opacity:b.opt.cursoropacitymax})}};this.hideCursor=function(d){!b.cursortimeout&&(b.rail&&b.autohidedom&&!(b.hasmousefocus&&\"leave\"==b.opt.autohidemode))&&\n(b.cursortimeout=setTimeout(function(){if(!b.rail.active||!b.showonmouseevent)b.autohidedom.stop().animate({opacity:b.opt.cursoropacitymin}),b.zoom&&b.zoom.stop().animate({opacity:b.opt.cursoropacitymin}),b.cursoractive=!1;b.cursortimeout=0},d||b.opt.hidecursordelay))};this.noticeCursor=function(d,c,f){b.showCursor(c,f);b.rail.active||b.hideCursor(d)};this.getContentSize=b.ispage?function(){return{w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),h:Math.max(document.body.scrollHeight,\n    document.documentElement.scrollHeight)}}:b.haswrapper?function(){return{w:b.doc.outerWidth()+parseInt(b.win.css(\"paddingLeft\"))+parseInt(b.win.css(\"paddingRight\")),h:b.doc.outerHeight()+parseInt(b.win.css(\"paddingTop\"))+parseInt(b.win.css(\"paddingBottom\"))}}:function(){return{w:b.docscroll[0].scrollWidth,h:b.docscroll[0].scrollHeight}};this.onResize=function(d,c){if(!b.win)return!1;if(!b.haswrapper&&!b.ispage){if(\"none\"==b.win.css(\"display\"))return b.visibility&&b.hideRail().hideRailHr(),!1;!b.hidden&&\n    !b.visibility&&b.showRail().showRailHr()}var f=b.page.maxh,g=b.page.maxw,e=b.view.w;b.view={w:b.ispage?b.win.width():parseInt(b.win[0].clientWidth),h:b.ispage?b.win.height():parseInt(b.win[0].clientHeight)};b.page=c?c:b.getContentSize();b.page.maxh=Math.max(0,b.page.h-b.view.h);b.page.maxw=Math.max(0,b.page.w-b.view.w);if(b.page.maxh==f&&b.page.maxw==g&&b.view.w==e){if(b.ispage)return b;f=b.win.offset();if(b.lastposition&&(g=b.lastposition,g.top==f.top&&g.left==f.left))return b;b.lastposition=f}0==\n    b.page.maxh?(b.hideRail(),b.scrollvaluemax=0,b.scroll.y=0,b.scrollratio.y=0,b.cursorheight=0,b.setScrollTop(0),b.rail.scrollable=!1):b.rail.scrollable=!0;0==b.page.maxw?(b.hideRailHr(),b.scrollvaluemaxw=0,b.scroll.x=0,b.scrollratio.x=0,b.cursorwidth=0,b.setScrollLeft(0),b.railh.scrollable=!1):b.railh.scrollable=!0;b.locked=0==b.page.maxh&&0==b.page.maxw;if(b.locked)return b.ispage||b.updateScrollBar(b.view),!1;!b.hidden&&!b.visibility?b.showRail().showRailHr():!b.hidden&&!b.railh.visibility&&b.showRailHr();\n    b.istextarea&&(b.win.css(\"resize\")&&\"none\"!=b.win.css(\"resize\"))&&(b.view.h-=20);b.cursorheight=Math.min(b.view.h,Math.round(b.view.h*(b.view.h/b.page.h)));b.cursorheight=b.opt.cursorfixedheight?b.opt.cursorfixedheight:Math.max(b.opt.cursorminheight,b.cursorheight);b.cursorwidth=Math.min(b.view.w,Math.round(b.view.w*(b.view.w/b.page.w)));b.cursorwidth=b.opt.cursorfixedheight?b.opt.cursorfixedheight:Math.max(b.opt.cursorminheight,b.cursorwidth);b.scrollvaluemax=b.view.h-b.cursorheight-b.cursor.hborder;\n    b.railh&&(b.railh.width=0<b.page.maxh?b.view.w-b.rail.width:b.view.w,b.scrollvaluemaxw=b.railh.width-b.cursorwidth-b.cursorh.wborder);b.checkrtlmode&&b.railh&&(b.checkrtlmode=!1,b.opt.rtlmode&&0==b.scroll.x&&b.setScrollLeft(b.page.maxw));b.ispage||b.updateScrollBar(b.view);b.scrollratio={x:b.page.maxw/b.scrollvaluemaxw,y:b.page.maxh/b.scrollvaluemax};b.getScrollTop()>b.page.maxh?b.doScrollTop(b.page.maxh):(b.scroll.y=Math.round(b.getScrollTop()*(1/b.scrollratio.y)),b.scroll.x=Math.round(b.getScrollLeft()*\n        (1/b.scrollratio.x)),b.cursoractive&&b.noticeCursor());b.scroll.y&&0==b.getScrollTop()&&b.doScrollTo(Math.floor(b.scroll.y*b.scrollratio.y));return b};this.resize=b.onResize;this.lazyResize=function(d){d=isNaN(d)?30:d;b.delayed(\"resize\",b.resize,d);return b};this._bind=function(d,c,f,g){b.events.push({e:d,n:c,f:f,b:g,q:!1});d.addEventListener?d.addEventListener(c,f,g||!1):d.attachEvent?d.attachEvent(\"on\"+c,f):d[\"on\"+c]=f};this.jqbind=function(d,c,f){b.events.push({e:d,n:c,f:f,q:!0});e(d).bind(c,f)};\n    this.bind=function(d,c,f,e){var k=\"jquery\"in d?d[0]:d;\"mousewheel\"==c?\"onwheel\"in b.win?b._bind(k,\"wheel\",f,e||!1):(d=\"undefined\"!=typeof document.onmousewheel?\"mousewheel\":\"DOMMouseScroll\",q(k,d,f,e||!1),\"DOMMouseScroll\"==d&&q(k,\"MozMousePixelScroll\",f,e||!1)):k.addEventListener?(g.cantouch&&/mouseup|mousedown|mousemove/.test(c)&&b._bind(k,\"mousedown\"==c?\"touchstart\":\"mouseup\"==c?\"touchend\":\"touchmove\",function(b){if(b.touches){if(2>b.touches.length){var d=b.touches.length?b.touches[0]:b;d.original=\n        b;f.call(this,d)}}else b.changedTouches&&(d=b.changedTouches[0],d.original=b,f.call(this,d))},e||!1),b._bind(k,c,f,e||!1),g.cantouch&&\"mouseup\"==c&&b._bind(k,\"touchcancel\",f,e||!1)):b._bind(k,c,function(d){if((d=d||window.event||!1)&&d.srcElement)d.target=d.srcElement;\"pageY\"in d||(d.pageX=d.clientX+document.documentElement.scrollLeft,d.pageY=d.clientY+document.documentElement.scrollTop);return!1===f.call(k,d)||!1===e?b.cancelEvent(d):!0})};this._unbind=function(b,c,f,g){b.removeEventListener?b.removeEventListener(c,\n        f,g):b.detachEvent?b.detachEvent(\"on\"+c,f):b[\"on\"+c]=!1};this.unbindAll=function(){for(var d=0;d<b.events.length;d++){var c=b.events[d];c.q?c.e.unbind(c.n,c.f):b._unbind(c.e,c.n,c.f,c.b)}};this.cancelEvent=function(b){b=b.original?b.original:b?b:window.event||!1;if(!b)return!1;b.preventDefault&&b.preventDefault();b.stopPropagation&&b.stopPropagation();b.preventManipulation&&b.preventManipulation();b.cancelBubble=!0;b.cancel=!0;return b.returnValue=!1};this.stopPropagation=function(b){b=b.original?\n        b.original:b?b:window.event||!1;if(!b)return!1;if(b.stopPropagation)return b.stopPropagation();b.cancelBubble&&(b.cancelBubble=!0);return!1};this.showRail=function(){if(0!=b.page.maxh&&(b.ispage||\"none\"!=b.win.css(\"display\")))b.visibility=!0,b.rail.visibility=!0,b.rail.css(\"display\",\"block\");return b};this.showRailHr=function(){if(!b.railh)return b;if(0!=b.page.maxw&&(b.ispage||\"none\"!=b.win.css(\"display\")))b.railh.visibility=!0,b.railh.css(\"display\",\"block\");return b};this.hideRail=function(){b.visibility=\n        !1;b.rail.visibility=!1;b.rail.css(\"display\",\"none\");return b};this.hideRailHr=function(){if(!b.railh)return b;b.railh.visibility=!1;b.railh.css(\"display\",\"none\");return b};this.show=function(){b.hidden=!1;b.locked=!1;return b.showRail().showRailHr()};this.hide=function(){b.hidden=!0;b.locked=!0;return b.hideRail().hideRailHr()};this.toggle=function(){return b.hidden?b.show():b.hide()};this.remove=function(){b.stop();b.cursortimeout&&clearTimeout(b.cursortimeout);b.doZoomOut();b.unbindAll();g.isie9&&\n    b.win[0].detachEvent(\"onpropertychange\",b.onAttributeChange);!1!==b.observer&&b.observer.disconnect();!1!==b.observerremover&&b.observerremover.disconnect();b.events=null;b.cursor&&b.cursor.remove();b.cursorh&&b.cursorh.remove();b.rail&&b.rail.remove();b.railh&&b.railh.remove();b.zoom&&b.zoom.remove();for(var d=0;d<b.saved.css.length;d++){var c=b.saved.css[d];c[0].css(c[1],\"undefined\"==typeof c[2]?\"\":c[2])}b.saved=!1;b.me.data(\"__nicescroll\",\"\");var f=e.nicescroll;f.each(function(d){if(this&&this.id===\n        b.id){delete f[d];for(var c=++d;c<f.length;c++,d++)f[d]=f[c];f.length--;f.length&&delete f[f.length]}});for(var k in b)b[k]=null,delete b[k];b=null};this.scrollstart=function(d){this.onscrollstart=d;return b};this.scrollend=function(d){this.onscrollend=d;return b};this.scrollcancel=function(d){this.onscrollcancel=d;return b};this.zoomin=function(d){this.onzoomin=d;return b};this.zoomout=function(d){this.onzoomout=d;return b};this.isScrollable=function(b){b=b.target?b.target:b;if(\"OPTION\"==b.nodeName)return!0;\n        for(;b&&1==b.nodeType&&!/BODY|HTML/.test(b.nodeName);){var c=e(b),c=c.css(\"overflowY\")||c.css(\"overflowX\")||c.css(\"overflow\")||\"\";if(/scroll|auto/.test(c))return b.clientHeight!=b.scrollHeight;b=b.parentNode?b.parentNode:!1}return!1};this.getViewport=function(b){for(b=b&&b.parentNode?b.parentNode:!1;b&&1==b.nodeType&&!/BODY|HTML/.test(b.nodeName);){var c=e(b);if(/fixed|absolute/.test(c.css(\"position\")))return c;var f=c.css(\"overflowY\")||c.css(\"overflowX\")||c.css(\"overflow\")||\"\";if(/scroll|auto/.test(f)&&\n        b.clientHeight!=b.scrollHeight||0<c.getNiceScroll().length)return c;b=b.parentNode?b.parentNode:!1}return!1};this.onmousewheel=function(d){if(b.locked)return b.debounced(\"checkunlock\",b.resize,250),!0;if(b.rail.drag)return b.cancelEvent(d);\"auto\"==b.opt.oneaxismousemode&&0!=d.deltaX&&(b.opt.oneaxismousemode=!1);if(b.opt.oneaxismousemode&&0==d.deltaX&&!b.rail.scrollable)return b.railh&&b.railh.scrollable?b.onmousewheelhr(d):!0;var c=+new Date,f=!1;b.opt.preservenativescrolling&&b.checkarea+600<c&&\n    (b.nativescrollingarea=b.isScrollable(d),f=!0);b.checkarea=c;if(b.nativescrollingarea)return!0;if(d=t(d,!1,f))b.checkarea=0;return d};this.onmousewheelhr=function(d){if(b.locked||!b.railh.scrollable)return!0;if(b.rail.drag)return b.cancelEvent(d);var c=+new Date,f=!1;b.opt.preservenativescrolling&&b.checkarea+600<c&&(b.nativescrollingarea=b.isScrollable(d),f=!0);b.checkarea=c;return b.nativescrollingarea?!0:b.locked?b.cancelEvent(d):t(d,!0,f)};this.stop=function(){b.cancelScroll();b.scrollmon&&b.scrollmon.stop();\n        b.cursorfreezed=!1;b.scroll.y=Math.round(b.getScrollTop()*(1/b.scrollratio.y));b.noticeCursor();return b};this.getTransitionSpeed=function(d){var c=Math.round(10*b.opt.scrollspeed);d=Math.min(c,Math.round(d/20*b.opt.scrollspeed));return 20<d?d:0};b.opt.smoothscroll?b.ishwscroll&&g.hastransition&&b.opt.usetransition?(this.prepareTransition=function(d,c){var f=c?20<d?d:0:b.getTransitionSpeed(d),e=f?g.prefixstyle+\"transform \"+f+\"ms ease-out\":\"\";if(!b.lasttransitionstyle||b.lasttransitionstyle!=e)b.lasttransitionstyle=\n        e,b.doc.css(g.transitionstyle,e);return f},this.doScrollLeft=function(c,g){var f=b.scrollrunning?b.newscrolly:b.getScrollTop();b.doScrollPos(c,f,g)},this.doScrollTop=function(c,g){var f=b.scrollrunning?b.newscrollx:b.getScrollLeft();b.doScrollPos(f,c,g)},this.doScrollPos=function(c,e,f){var k=b.getScrollTop(),l=b.getScrollLeft();(0>(b.newscrolly-k)*(e-k)||0>(b.newscrollx-l)*(c-l))&&b.cancelScroll();!1==b.opt.bouncescroll&&(0>e?e=0:e>b.page.maxh&&(e=b.page.maxh),0>c?c=0:c>b.page.maxw&&(c=b.page.maxw));\n        if(b.scrollrunning&&c==b.newscrollx&&e==b.newscrolly)return!1;b.newscrolly=e;b.newscrollx=c;b.newscrollspeed=f||!1;if(b.timer)return!1;b.timer=setTimeout(function(){var f=b.getScrollTop(),k=b.getScrollLeft(),l,h;l=c-k;h=e-f;l=Math.round(Math.sqrt(Math.pow(l,2)+Math.pow(h,2)));l=b.newscrollspeed&&1<b.newscrollspeed?b.newscrollspeed:b.getTransitionSpeed(l);b.newscrollspeed&&1>=b.newscrollspeed&&(l*=b.newscrollspeed);b.prepareTransition(l,!0);b.timerscroll&&b.timerscroll.tm&&clearInterval(b.timerscroll.tm);\n            0<l&&(!b.scrollrunning&&b.onscrollstart&&b.onscrollstart.call(b,{type:\"scrollstart\",current:{x:k,y:f},request:{x:c,y:e},end:{x:b.newscrollx,y:b.newscrolly},speed:l}),g.transitionend?b.scrollendtrapped||(b.scrollendtrapped=!0,b.bind(b.doc,g.transitionend,b.onScrollEnd,!1)):(b.scrollendtrapped&&clearTimeout(b.scrollendtrapped),b.scrollendtrapped=setTimeout(b.onScrollEnd,l)),b.timerscroll={bz:new BezierClass(f,b.newscrolly,l,0,0,0.58,1),bh:new BezierClass(k,b.newscrollx,l,0,0,0.58,1)},b.cursorfreezed||\n                (b.timerscroll.tm=setInterval(function(){b.showCursor(b.getScrollTop(),b.getScrollLeft())},60)));b.synched(\"doScroll-set\",function(){b.timer=0;b.scrollendtrapped&&(b.scrollrunning=!0);b.setScrollTop(b.newscrolly);b.setScrollLeft(b.newscrollx);if(!b.scrollendtrapped)b.onScrollEnd()})},50)},this.cancelScroll=function(){if(!b.scrollendtrapped)return!0;var c=b.getScrollTop(),e=b.getScrollLeft();b.scrollrunning=!1;g.transitionend||clearTimeout(g.transitionend);b.scrollendtrapped=!1;b._unbind(b.doc,g.transitionend,\n        b.onScrollEnd);b.prepareTransition(0);b.setScrollTop(c);b.railh&&b.setScrollLeft(e);b.timerscroll&&b.timerscroll.tm&&clearInterval(b.timerscroll.tm);b.timerscroll=!1;b.cursorfreezed=!1;b.showCursor(c,e);return b},this.onScrollEnd=function(){b.scrollendtrapped&&b._unbind(b.doc,g.transitionend,b.onScrollEnd);b.scrollendtrapped=!1;b.prepareTransition(0);b.timerscroll&&b.timerscroll.tm&&clearInterval(b.timerscroll.tm);b.timerscroll=!1;var c=b.getScrollTop(),e=b.getScrollLeft();b.setScrollTop(c);b.railh&&\n    b.setScrollLeft(e);b.noticeCursor(!1,c,e);b.cursorfreezed=!1;0>c?c=0:c>b.page.maxh&&(c=b.page.maxh);0>e?e=0:e>b.page.maxw&&(e=b.page.maxw);if(c!=b.newscrolly||e!=b.newscrollx)return b.doScrollPos(e,c,b.opt.snapbackspeed);b.onscrollend&&b.scrollrunning&&b.onscrollend.call(b,{type:\"scrollend\",current:{x:e,y:c},end:{x:b.newscrollx,y:b.newscrolly}});b.scrollrunning=!1}):(this.doScrollLeft=function(c,g){var f=b.scrollrunning?b.newscrolly:b.getScrollTop();b.doScrollPos(c,f,g)},this.doScrollTop=function(c,\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          g){var f=b.scrollrunning?b.newscrollx:b.getScrollLeft();b.doScrollPos(f,c,g)},this.doScrollPos=function(c,g,f){function e(){if(b.cancelAnimationFrame)return!0;b.scrollrunning=!0;if(p=1-p)return b.timer=v(e)||1;var c=0,d=sy=b.getScrollTop();if(b.dst.ay){var d=b.bzscroll?b.dst.py+b.bzscroll.getNow()*b.dst.ay:b.newscrolly,f=d-sy;if(0>f&&d<b.newscrolly||0<f&&d>b.newscrolly)d=b.newscrolly;b.setScrollTop(d);d==b.newscrolly&&(c=1)}else c=1;var g=sx=b.getScrollLeft();if(b.dst.ax){g=b.bzscroll?b.dst.px+b.bzscroll.getNow()*\n        b.dst.ax:b.newscrollx;f=g-sx;if(0>f&&g<b.newscrollx||0<f&&g>b.newscrollx)g=b.newscrollx;b.setScrollLeft(g);g==b.newscrollx&&(c+=1)}else c+=1;2==c?(b.timer=0,b.cursorfreezed=!1,b.bzscroll=!1,b.scrollrunning=!1,0>d?d=0:d>b.page.maxh&&(d=b.page.maxh),0>g?g=0:g>b.page.maxw&&(g=b.page.maxw),g!=b.newscrollx||d!=b.newscrolly?b.doScrollPos(g,d):b.onscrollend&&b.onscrollend.call(b,{type:\"scrollend\",current:{x:sx,y:sy},end:{x:b.newscrollx,y:b.newscrolly}})):b.timer=v(e)||1}g=\"undefined\"==typeof g||!1===g?b.getScrollTop(!0):\n        g;if(b.timer&&b.newscrolly==g&&b.newscrollx==c)return!0;b.timer&&w(b.timer);b.timer=0;var k=b.getScrollTop(),l=b.getScrollLeft();(0>(b.newscrolly-k)*(g-k)||0>(b.newscrollx-l)*(c-l))&&b.cancelScroll();b.newscrolly=g;b.newscrollx=c;if(!b.bouncescroll||!b.rail.visibility)0>b.newscrolly?b.newscrolly=0:b.newscrolly>b.page.maxh&&(b.newscrolly=b.page.maxh);if(!b.bouncescroll||!b.railh.visibility)0>b.newscrollx?b.newscrollx=0:b.newscrollx>b.page.maxw&&(b.newscrollx=b.page.maxw);b.dst={};b.dst.x=c-l;b.dst.y=\n        g-k;b.dst.px=l;b.dst.py=k;var h=Math.round(Math.sqrt(Math.pow(b.dst.x,2)+Math.pow(b.dst.y,2)));b.dst.ax=b.dst.x/h;b.dst.ay=b.dst.y/h;var m=0,q=h;0==b.dst.x?(m=k,q=g,b.dst.ay=1,b.dst.py=0):0==b.dst.y&&(m=l,q=c,b.dst.ax=1,b.dst.px=0);h=b.getTransitionSpeed(h);f&&1>=f&&(h*=f);b.bzscroll=0<h?b.bzscroll?b.bzscroll.update(q,h):new BezierClass(m,q,h,0,1,0,1):!1;if(!b.timer){(k==b.page.maxh&&g>=b.page.maxh||l==b.page.maxw&&c>=b.page.maxw)&&b.checkContentSize();var p=1;b.cancelAnimationFrame=!1;b.timer=1;\n        b.onscrollstart&&!b.scrollrunning&&b.onscrollstart.call(b,{type:\"scrollstart\",current:{x:l,y:k},request:{x:c,y:g},end:{x:b.newscrollx,y:b.newscrolly},speed:h});e();(k==b.page.maxh&&g>=k||l==b.page.maxw&&c>=l)&&b.checkContentSize();b.noticeCursor()}},this.cancelScroll=function(){b.timer&&w(b.timer);b.timer=0;b.bzscroll=!1;b.scrollrunning=!1;return b}):(this.doScrollLeft=function(c,g){var f=b.getScrollTop();b.doScrollPos(c,f,g)},this.doScrollTop=function(c,g){var f=b.getScrollLeft();b.doScrollPos(f,\n        c,g)},this.doScrollPos=function(c,g,f){var e=c>b.page.maxw?b.page.maxw:c;0>e&&(e=0);var k=g>b.page.maxh?b.page.maxh:g;0>k&&(k=0);b.synched(\"scroll\",function(){b.setScrollTop(k);b.setScrollLeft(e)})},this.cancelScroll=function(){});this.doScrollBy=function(c,g){var f=0,f=g?Math.floor((b.scroll.y-c)*b.scrollratio.y):(b.timer?b.newscrolly:b.getScrollTop(!0))-c;if(b.bouncescroll){var e=Math.round(b.view.h/2);f<-e?f=-e:f>b.page.maxh+e&&(f=b.page.maxh+e)}b.cursorfreezed=!1;py=b.getScrollTop(!0);if(0>f&&\n        0>=py)return b.noticeCursor();if(f>b.page.maxh&&py>=b.page.maxh)return b.checkContentSize(),b.noticeCursor();b.doScrollTop(f)};this.doScrollLeftBy=function(c,g){var f=0,f=g?Math.floor((b.scroll.x-c)*b.scrollratio.x):(b.timer?b.newscrollx:b.getScrollLeft(!0))-c;if(b.bouncescroll){var e=Math.round(b.view.w/2);f<-e?f=-e:f>b.page.maxw+e&&(f=b.page.maxw+e)}b.cursorfreezed=!1;px=b.getScrollLeft(!0);if(0>f&&0>=px||f>b.page.maxw&&px>=b.page.maxw)return b.noticeCursor();b.doScrollLeft(f)};this.doScrollTo=\n        function(c,g){g&&Math.round(c*b.scrollratio.y);b.cursorfreezed=!1;b.doScrollTop(c)};this.checkContentSize=function(){var c=b.getContentSize();(c.h!=b.page.h||c.w!=b.page.w)&&b.resize(!1,c)};b.onscroll=function(c){b.rail.drag||b.cursorfreezed||b.synched(\"scroll\",function(){b.scroll.y=Math.round(b.getScrollTop()*(1/b.scrollratio.y));b.railh&&(b.scroll.x=Math.round(b.getScrollLeft()*(1/b.scrollratio.x)));b.noticeCursor()})};b.bind(b.docscroll,\"scroll\",b.onscroll);this.doZoomIn=function(c){if(!b.zoomactive){b.zoomactive=\n        !0;b.zoomrestore={style:{}};var k=\"position top left zIndex backgroundColor marginTop marginBottom marginLeft marginRight\".split(\" \"),f=b.win[0].style,l;for(l in k){var h=k[l];b.zoomrestore.style[h]=\"undefined\"!=typeof f[h]?f[h]:\"\"}b.zoomrestore.style.width=b.win.css(\"width\");b.zoomrestore.style.height=b.win.css(\"height\");b.zoomrestore.padding={w:b.win.outerWidth()-b.win.width(),h:b.win.outerHeight()-b.win.height()};g.isios4&&(b.zoomrestore.scrollTop=e(window).scrollTop(),e(window).scrollTop(0));\n        b.win.css({position:g.isios4?\"absolute\":\"fixed\",top:0,left:0,\"z-index\":y+100,margin:\"0px\"});k=b.win.css(\"backgroundColor\");(\"\"==k||/transparent|rgba\\(0, 0, 0, 0\\)|rgba\\(0,0,0,0\\)/.test(k))&&b.win.css(\"backgroundColor\",\"#fff\");b.rail.css({\"z-index\":y+101});b.zoom.css({\"z-index\":y+102});b.zoom.css(\"backgroundPosition\",\"0px -18px\");b.resizeZoom();b.onzoomin&&b.onzoomin.call(b);return b.cancelEvent(c)}};this.doZoomOut=function(c){if(b.zoomactive)return b.zoomactive=!1,b.win.css(\"margin\",\"\"),b.win.css(b.zoomrestore.style),\n        g.isios4&&e(window).scrollTop(b.zoomrestore.scrollTop),b.rail.css({\"z-index\":b.zindex}),b.zoom.css({\"z-index\":b.zindex}),b.zoomrestore=!1,b.zoom.css(\"backgroundPosition\",\"0px 0px\"),b.onResize(),b.onzoomout&&b.onzoomout.call(b),b.cancelEvent(c)};this.doZoom=function(c){return b.zoomactive?b.doZoomOut(c):b.doZoomIn(c)};this.resizeZoom=function(){if(b.zoomactive){var c=b.getScrollTop();b.win.css({width:e(window).width()-b.zoomrestore.padding.w+\"px\",height:e(window).height()-b.zoomrestore.padding.h+\"px\"});\n        b.onResize();b.setScrollTop(Math.min(b.page.maxh,c))}};this.init();e.nicescroll.push(this)},J=function(e){var c=this;this.nc=e;this.steptime=this.lasttime=this.speedy=this.speedx=this.lasty=this.lastx=0;this.snapy=this.snapx=!1;this.demuly=this.demulx=0;this.lastscrolly=this.lastscrollx=-1;this.timer=this.chky=this.chkx=0;this.time=function(){return+new Date};this.reset=function(e,l){c.stop();var h=c.time();c.steptime=0;c.lasttime=h;c.speedx=0;c.speedy=0;c.lastx=e;c.lasty=l;c.lastscrollx=-1;c.lastscrolly=\n    -1};this.update=function(e,l){var h=c.time();c.steptime=h-c.lasttime;c.lasttime=h;var h=l-c.lasty,t=e-c.lastx,b=c.nc.getScrollTop(),p=c.nc.getScrollLeft(),b=b+h,p=p+t;c.snapx=0>p||p>c.nc.page.maxw;c.snapy=0>b||b>c.nc.page.maxh;c.speedx=t;c.speedy=h;c.lastx=e;c.lasty=l};this.stop=function(){c.nc.unsynched(\"domomentum2d\");c.timer&&clearTimeout(c.timer);c.timer=0;c.lastscrollx=-1;c.lastscrolly=-1};this.doSnapy=function(e,l){var h=!1;0>l?(l=0,h=!0):l>c.nc.page.maxh&&(l=c.nc.page.maxh,h=!0);0>e?(e=0,h=\n    !0):e>c.nc.page.maxw&&(e=c.nc.page.maxw,h=!0);h&&c.nc.doScrollPos(e,l,c.nc.opt.snapbackspeed)};this.doMomentum=function(e){var l=c.time(),h=e?l+e:c.lasttime;e=c.nc.getScrollLeft();var t=c.nc.getScrollTop(),b=c.nc.page.maxh,p=c.nc.page.maxw;c.speedx=0<p?Math.min(60,c.speedx):0;c.speedy=0<b?Math.min(60,c.speedy):0;h=h&&60>=l-h;if(0>t||t>b||0>e||e>p)h=!1;e=c.speedx&&h?c.speedx:!1;if(c.speedy&&h&&c.speedy||e){var g=Math.max(16,c.steptime);50<g&&(e=g/50,c.speedx*=e,c.speedy*=e,g=50);c.demulxy=0;c.lastscrollx=\n    c.nc.getScrollLeft();c.chkx=c.lastscrollx;c.lastscrolly=c.nc.getScrollTop();c.chky=c.lastscrolly;var s=c.lastscrollx,u=c.lastscrolly,d=function(){var e=600<c.time()-l?0.04:0.02;if(c.speedx&&(s=Math.floor(c.lastscrollx-c.speedx*(1-c.demulxy)),c.lastscrollx=s,0>s||s>p))e=0.1;if(c.speedy&&(u=Math.floor(c.lastscrolly-c.speedy*(1-c.demulxy)),c.lastscrolly=u,0>u||u>b))e=0.1;c.demulxy=Math.min(1,c.demulxy+e);c.nc.synched(\"domomentum2d\",function(){c.speedx&&(c.nc.getScrollLeft()!=c.chkx&&c.stop(),c.chkx=\n    s,c.nc.setScrollLeft(s));c.speedy&&(c.nc.getScrollTop()!=c.chky&&c.stop(),c.chky=u,c.nc.setScrollTop(u));c.timer||(c.nc.hideCursor(),c.doSnapy(s,u))});1>c.demulxy?c.timer=setTimeout(d,g):(c.stop(),c.nc.hideCursor(),c.doSnapy(s,u))};d()}else c.doSnapy(c.nc.getScrollLeft(),c.nc.getScrollTop())}},B=e.fn.scrollTop;e.cssHooks.pageYOffset={get:function(h,c,k){return(c=e.data(h,\"__nicescroll\")||!1)&&c.ishwscroll?c.getScrollTop():B.call(h)},set:function(h,c){var k=e.data(h,\"__nicescroll\")||!1;k&&k.ishwscroll?\n    k.setScrollTop(parseInt(c)):B.call(h,c);return this}};e.fn.scrollTop=function(h){if(\"undefined\"==typeof h){var c=this[0]?e.data(this[0],\"__nicescroll\")||!1:!1;return c&&c.ishwscroll?c.getScrollTop():B.call(this)}return this.each(function(){var c=e.data(this,\"__nicescroll\")||!1;c&&c.ishwscroll?c.setScrollTop(parseInt(h)):B.call(e(this),h)})};var C=e.fn.scrollLeft;e.cssHooks.pageXOffset={get:function(h,c,k){return(c=e.data(h,\"__nicescroll\")||!1)&&c.ishwscroll?c.getScrollLeft():C.call(h)},set:function(h,\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            c){var k=e.data(h,\"__nicescroll\")||!1;k&&k.ishwscroll?k.setScrollLeft(parseInt(c)):C.call(h,c);return this}};e.fn.scrollLeft=function(h){if(\"undefined\"==typeof h){var c=this[0]?e.data(this[0],\"__nicescroll\")||!1:!1;return c&&c.ishwscroll?c.getScrollLeft():C.call(this)}return this.each(function(){var c=e.data(this,\"__nicescroll\")||!1;c&&c.ishwscroll?c.setScrollLeft(parseInt(h)):C.call(e(this),h)})};var D=function(h){var c=this;this.length=0;this.name=\"nicescrollarray\";this.each=function(e){for(var h=\n    0,k=0;h<c.length;h++)e.call(c[h],k++);return c};this.push=function(e){c[c.length]=e;c.length++};this.eq=function(e){return c[e]};if(h)for(a=0;a<h.length;a++){var k=e.data(h[a],\"__nicescroll\")||!1;k&&(this[this.length]=k,this.length++)}return this};(function(e,c,k){for(var l=0;l<c.length;l++)k(e,c[l])})(D.prototype,\"show hide toggle onResize resize remove stop doScrollPos\".split(\" \"),function(e,c){e[c]=function(){var e=arguments;return this.each(function(){this[c].apply(this,e)})}});e.fn.getNiceScroll=\n    function(h){return\"undefined\"==typeof h?new D(this):this[h]&&e.data(this[h],\"__nicescroll\")||!1};e.extend(e.expr[\":\"],{nicescroll:function(h){return e.data(h,\"__nicescroll\")?!0:!1}});e.fn.niceScroll=function(h,c){\"undefined\"==typeof c&&(\"object\"==typeof h&&!(\"jquery\"in h))&&(c=h,h=!1);var k=new D;\"undefined\"==typeof c&&(c={});h&&(c.doc=e(h),c.win=e(this));var l=!(\"doc\"in c);!l&&!(\"win\"in c)&&(c.win=e(this));this.each(function(){var h=e(this).data(\"__nicescroll\")||!1;h||(c.doc=l?e(this):c.doc,h=new Q(c,\n    e(this)),e(this).data(\"__nicescroll\",h));k.push(h)});return 1==k.length?k[0]:k};window.NiceScroll={getjQuery:function(){return e}};e.nicescroll||(e.nicescroll=new D,e.nicescroll.options=I)})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/jquery.slimscroll.js",
    "content": "/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function($) {\n\n  $.fn.extend({\n    slimScroll: function(options) {\n\n      var defaults = {\n\n        // width in pixels of the visible scroll area\n        width : 'auto',\n\n        // height in pixels of the visible scroll area\n        height : '250px',\n\n        // width in pixels of the scrollbar and rail\n        size : '7px',\n\n        // scrollbar color, accepts any hex/color value\n        color: '#000',\n\n        // scrollbar position - left/right\n        position : 'right',\n\n        // distance in pixels between the side edge and the scrollbar\n        distance : '1px',\n\n        // default scroll position on load - top / bottom / $('selector')\n        start : 'top',\n\n        // sets scrollbar opacity\n        opacity : .4,\n\n        // enables always-on mode for the scrollbar\n        alwaysVisible : false,\n\n        // check if we should hide the scrollbar when user is hovering over\n        disableFadeOut : false,\n\n        // sets visibility of the rail\n        railVisible : false,\n\n        // sets rail color\n        railColor : '#333',\n\n        // sets rail opacity\n        railOpacity : .2,\n\n        // whether  we should use jQuery UI Draggable to enable bar dragging\n        railDraggable : true,\n\n        // defautlt CSS class of the slimscroll rail\n        railClass : 'slimScrollRail',\n\n        // defautlt CSS class of the slimscroll bar\n        barClass : 'slimScrollBar',\n\n        // defautlt CSS class of the slimscroll wrapper\n        wrapperClass : 'slimScrollDiv',\n\n        // check if mousewheel should scroll the window if we reach top/bottom\n        allowPageScroll : false,\n\n        // scroll amount applied to each mouse wheel step\n        wheelStep : 20,\n\n        // scroll amount applied when user is using gestures\n        touchScrollStep : 200,\n\n        // sets border radius\n        borderRadius: '7px',\n\n        // sets border radius of the rail\n        railBorderRadius : '7px'\n      };\n\n      var o = $.extend(defaults, options);\n\n      // do it for every element that matches selector\n      this.each(function(){\n\n      var isOverPanel, isOverBar, isDragg, queueHide, touchDif,\n        barHeight, percentScroll, lastScroll,\n        divS = '<div></div>',\n        minBarHeight = 30,\n        releaseScroll = false;\n\n        // used in event handlers and for better minification\n        var me = $(this);\n\n        // ensure we are not binding it again\n        if (me.parent().hasClass(o.wrapperClass))\n        {\n            // start from last bar position\n            var offset = me.scrollTop();\n\n            // find bar and rail\n            bar = me.siblings('.' + o.barClass);\n            rail = me.siblings('.' + o.railClass);\n\n            getBarHeight();\n\n            // check if we should scroll existing instance\n            if ($.isPlainObject(options))\n            {\n              // Pass height: auto to an existing slimscroll object to force a resize after contents have changed\n              if ( 'height' in options && options.height == 'auto' ) {\n                me.parent().css('height', 'auto');\n                me.css('height', 'auto');\n                var height = me.parent().parent().height();\n                me.parent().css('height', height);\n                me.css('height', height);\n              } else if ('height' in options) {\n                var h = options.height;\n                me.parent().css('height', h);\n                me.css('height', h);\n              }\n\n              if ('scrollTo' in options)\n              {\n                // jump to a static point\n                offset = parseInt(o.scrollTo);\n              }\n              else if ('scrollBy' in options)\n              {\n                // jump by value pixels\n                offset += parseInt(o.scrollBy);\n              }\n              else if ('destroy' in options)\n              {\n                // remove slimscroll elements\n                bar.remove();\n                rail.remove();\n                me.unwrap();\n                return;\n              }\n\n              // scroll content by the given offset\n              scrollContent(offset, false, true);\n            }\n\n            return;\n        }\n        else if ($.isPlainObject(options))\n        {\n            if ('destroy' in options)\n            {\n            \treturn;\n            }\n        }\n\n        // optionally set height to the parent's height\n        o.height = (o.height == 'auto') ? me.parent().height() : o.height;\n\n        // wrap content\n        var wrapper = $(divS)\n          .addClass(o.wrapperClass)\n          .css({\n            position: 'relative',\n            overflow: 'hidden',\n            width: o.width,\n            height: o.height\n          });\n\n        // update style for the div\n        me.css({\n          overflow: 'hidden',\n          width: o.width,\n          height: o.height\n        });\n\n        // create scrollbar rail\n        var rail = $(divS)\n          .addClass(o.railClass)\n          .css({\n            width: o.size,\n            height: '100%',\n            position: 'absolute',\n            top: 0,\n            display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',\n            'border-radius': o.railBorderRadius,\n            background: o.railColor,\n            opacity: o.railOpacity,\n            zIndex: 90\n          });\n\n        // create scrollbar\n        var bar = $(divS)\n          .addClass(o.barClass)\n          .css({\n            background: o.color,\n            width: o.size,\n            position: 'absolute',\n            top: 0,\n            opacity: o.opacity,\n            display: o.alwaysVisible ? 'block' : 'none',\n            'border-radius' : o.borderRadius,\n            BorderRadius: o.borderRadius,\n            MozBorderRadius: o.borderRadius,\n            WebkitBorderRadius: o.borderRadius,\n            zIndex: 99\n          });\n\n        // set position\n        var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance };\n        rail.css(posCss);\n        bar.css(posCss);\n\n        // wrap it\n        me.wrap(wrapper);\n\n        // append to parent div\n        me.parent().append(bar);\n        me.parent().append(rail);\n\n        // make it draggable and no longer dependent on the jqueryUI\n        if (o.railDraggable){\n          bar.bind(\"mousedown\", function(e) {\n            var $doc = $(document);\n            isDragg = true;\n            t = parseFloat(bar.css('top'));\n            pageY = e.pageY;\n\n            $doc.bind(\"mousemove.slimscroll\", function(e){\n              currTop = t + e.pageY - pageY;\n              bar.css('top', currTop);\n              scrollContent(0, bar.position().top, false);// scroll content\n            });\n\n            $doc.bind(\"mouseup.slimscroll\", function(e) {\n              isDragg = false;hideBar();\n              $doc.unbind('.slimscroll');\n            });\n            return false;\n          }).bind(\"selectstart.slimscroll\", function(e){\n            e.stopPropagation();\n            e.preventDefault();\n            return false;\n          });\n        }\n\n        // on rail over\n        rail.hover(function(){\n          showBar();\n        }, function(){\n          hideBar();\n        });\n\n        // on bar over\n        bar.hover(function(){\n          isOverBar = true;\n        }, function(){\n          isOverBar = false;\n        });\n\n        // show on parent mouseover\n        me.hover(function(){\n          isOverPanel = true;\n          showBar();\n          hideBar();\n        }, function(){\n          isOverPanel = false;\n          hideBar();\n        });\n\n        // support for mobile\n        me.bind('touchstart', function(e,b){\n          if (e.originalEvent.touches.length)\n          {\n            // record where touch started\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        me.bind('touchmove', function(e){\n          // prevent scrolling the page if necessary\n          if(!releaseScroll)\n          {\n  \t\t      e.originalEvent.preventDefault();\n\t\t      }\n          if (e.originalEvent.touches.length)\n          {\n            // see how far user swiped\n            var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;\n            // scroll content\n            scrollContent(diff, true);\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        // set up initial height\n        getBarHeight();\n\n        // check start position\n        if (o.start === 'bottom')\n        {\n          // scroll content to bottom\n          bar.css({ top: me.outerHeight() - bar.outerHeight() });\n          scrollContent(0, true);\n        }\n        else if (o.start !== 'top')\n        {\n          // assume jQuery selector\n          scrollContent($(o.start).position().top, null, true);\n\n          // make sure bar stays hidden\n          if (!o.alwaysVisible) { bar.hide(); }\n        }\n\n        // attach scroll events\n        attachWheel(this);\n\n        function _onWheel(e)\n        {\n          // use mouse wheel only when mouse is over\n          if (!isOverPanel) { return; }\n\n          var e = e || window.event;\n\n          var delta = 0;\n          if (e.wheelDelta) { delta = -e.wheelDelta/120; }\n          if (e.detail) { delta = e.detail / 3; }\n\n          var target = e.target || e.srcTarget || e.srcElement;\n          if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {\n            // scroll content\n            scrollContent(delta, true);\n          }\n\n          // stop window scroll\n          if (e.preventDefault && !releaseScroll) { e.preventDefault(); }\n          if (!releaseScroll) { e.returnValue = false; }\n        }\n\n        function scrollContent(y, isWheel, isJump)\n        {\n          releaseScroll = false;\n          var delta = y;\n          var maxTop = me.outerHeight() - bar.outerHeight();\n\n          if (isWheel)\n          {\n            // move bar with mouse wheel\n            delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();\n\n            // move bar, make sure it doesn't go out\n            delta = Math.min(Math.max(delta, 0), maxTop);\n\n            // if scrolling down, make sure a fractional change to the\n            // scroll position isn't rounded away when the scrollbar's CSS is set\n            // this flooring of delta would happened automatically when\n            // bar.css is set below, but we floor here for clarity\n            delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);\n\n            // scroll the scrollbar\n            bar.css({ top: delta + 'px' });\n          }\n\n          // calculate actual scroll amount\n          percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight());\n          delta = percentScroll * (me[0].scrollHeight - me.outerHeight());\n\n          if (isJump)\n          {\n            delta = y;\n            var offsetTop = delta / me[0].scrollHeight * me.outerHeight();\n            offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);\n            bar.css({ top: offsetTop + 'px' });\n          }\n\n          // scroll content\n          me.scrollTop(delta);\n\n          // fire scrolling event\n          me.trigger('slimscrolling', ~~delta);\n\n          // ensure bar is visible\n          showBar();\n\n          // trigger hide when scroll is stopped\n          hideBar();\n        }\n\n        function attachWheel(target)\n        {\n          if (window.addEventListener)\n          {\n            target.addEventListener('DOMMouseScroll', _onWheel, false );\n            target.addEventListener('mousewheel', _onWheel, false );\n          }\n          else\n          {\n            document.attachEvent(\"onmousewheel\", _onWheel)\n          }\n        }\n\n        function getBarHeight()\n        {\n          // calculate scrollbar height and make sure it is not too small\n          barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);\n          bar.css({ height: barHeight + 'px' });\n\n          // hide scrollbar if content is not long enough\n          var display = barHeight == me.outerHeight() ? 'none' : 'block';\n          bar.css({ display: display });\n        }\n\n        function showBar()\n        {\n          // recalculate bar height\n          getBarHeight();\n          clearTimeout(queueHide);\n\n          // when bar reached top or bottom\n          if (percentScroll == ~~percentScroll)\n          {\n            //release wheel\n            releaseScroll = o.allowPageScroll;\n\n            // publish approporiate event\n            if (lastScroll != percentScroll)\n            {\n                var msg = (~~percentScroll == 0) ? 'top' : 'bottom';\n                me.trigger('slimscroll', msg);\n            }\n          }\n          else\n          {\n            releaseScroll = false;\n          }\n          lastScroll = percentScroll;\n\n          // show only when required\n          if(barHeight >= me.outerHeight()) {\n            //allow window scroll\n            releaseScroll = true;\n            return;\n          }\n          bar.stop(true,true).fadeIn('fast');\n          if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }\n        }\n\n        function hideBar()\n        {\n          // only hide when options allow it\n          if (!o.alwaysVisible)\n          {\n            queueHide = setTimeout(function(){\n              if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)\n              {\n                bar.fadeOut('slow');\n                rail.fadeOut('slow');\n              }\n            }, 1000);\n          }\n        }\n\n      });\n\n      // maintain chainability\n      return this;\n    }\n  });\n\n  $.fn.extend({\n    slimscroll: $.fn.slimScroll\n  });\n\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/js/waves.js",
    "content": "\n\n;(function(window) {\n    'use strict';\n\n    var Waves = Waves || {};\n    var $$ = document.querySelectorAll.bind(document);\n\n    // Find exact position of element\n    function isWindow(obj) {\n        return obj !== null && obj === obj.window;\n    }\n\n    function getWindow(elem) {\n        return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;\n    }\n\n    function offset(elem) {\n        var docElem, win,\n            box = {top: 0, left: 0},\n            doc = elem && elem.ownerDocument;\n\n        docElem = doc.documentElement;\n\n        if (typeof elem.getBoundingClientRect !== typeof undefined) {\n            box = elem.getBoundingClientRect();\n        }\n        win = getWindow(doc);\n        return {\n            top: box.top + win.pageYOffset - docElem.clientTop,\n            left: box.left + win.pageXOffset - docElem.clientLeft\n        };\n    }\n\n    function convertStyle(obj) {\n        var style = '';\n\n        for (var a in obj) {\n            if (obj.hasOwnProperty(a)) {\n                style += (a + ':' + obj[a] + ';');\n            }\n        }\n\n        return style;\n    }\n\n    var Effect = {\n\n        // Effect delay\n        duration: 750,\n\n        show: function(e, element) {\n\n            // Disable right click\n            if (e.button === 2) {\n                return false;\n            }\n\n            var el = element || this;\n\n            // Create ripple\n            var ripple = document.createElement('div');\n            ripple.className = 'waves-ripple';\n            el.appendChild(ripple);\n\n            // Get click coordinate and element witdh\n            var pos         = offset(el);\n            var relativeY   = (e.pageY - pos.top);\n            var relativeX   = (e.pageX - pos.left);\n            var scale       = 'scale('+((el.clientWidth / 100) * 10)+')';\n\n            // Support for touch devices\n            if ('touches' in e) {\n              relativeY   = (e.touches[0].pageY - pos.top);\n              relativeX   = (e.touches[0].pageX - pos.left);\n            }\n\n            // Attach data to element\n            ripple.setAttribute('data-hold', Date.now());\n            ripple.setAttribute('data-scale', scale);\n            ripple.setAttribute('data-x', relativeX);\n            ripple.setAttribute('data-y', relativeY);\n\n            // Set ripple position\n            var rippleStyle = {\n                'top': relativeY+'px',\n                'left': relativeX+'px'\n            };\n\n            ripple.className = ripple.className + ' waves-notransition';\n            ripple.setAttribute('style', convertStyle(rippleStyle));\n            ripple.className = ripple.className.replace('waves-notransition', '');\n\n            // Scale the ripple\n            rippleStyle['-webkit-transform'] = scale;\n            rippleStyle['-moz-transform'] = scale;\n            rippleStyle['-ms-transform'] = scale;\n            rippleStyle['-o-transform'] = scale;\n            rippleStyle.transform = scale;\n            rippleStyle.opacity   = '1';\n\n            rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';\n            rippleStyle['-moz-transition-duration']    = Effect.duration + 'ms';\n            rippleStyle['-o-transition-duration']      = Effect.duration + 'ms';\n            rippleStyle['transition-duration']         = Effect.duration + 'ms';\n\n            rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';\n            rippleStyle['-moz-transition-timing-function']    = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';\n            rippleStyle['-o-transition-timing-function']      = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';\n            rippleStyle['transition-timing-function']         = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';\n\n            ripple.setAttribute('style', convertStyle(rippleStyle));\n        },\n\n        hide: function(e) {\n            TouchHandler.touchup(e);\n\n            var el = this;\n            var width = el.clientWidth * 1.4;\n\n            // Get first ripple\n            var ripple = null;\n            var ripples = el.getElementsByClassName('waves-ripple');\n            if (ripples.length > 0) {\n                ripple = ripples[ripples.length - 1];\n            } else {\n                return false;\n            }\n\n            var relativeX   = ripple.getAttribute('data-x');\n            var relativeY   = ripple.getAttribute('data-y');\n            var scale       = ripple.getAttribute('data-scale');\n\n            // Get delay beetween mousedown and mouse leave\n            var diff = Date.now() - Number(ripple.getAttribute('data-hold'));\n            var delay = 350 - diff;\n\n            if (delay < 0) {\n                delay = 0;\n            }\n\n            // Fade out ripple after delay\n            setTimeout(function() {\n                var style = {\n                    'top': relativeY+'px',\n                    'left': relativeX+'px',\n                    'opacity': '0',\n\n                    // Duration\n                    '-webkit-transition-duration': Effect.duration + 'ms',\n                    '-moz-transition-duration': Effect.duration + 'ms',\n                    '-o-transition-duration': Effect.duration + 'ms',\n                    'transition-duration': Effect.duration + 'ms',\n                    '-webkit-transform': scale,\n                    '-moz-transform': scale,\n                    '-ms-transform': scale,\n                    '-o-transform': scale,\n                    'transform': scale,\n                };\n\n                ripple.setAttribute('style', convertStyle(style));\n\n                setTimeout(function() {\n                    try {\n                        el.removeChild(ripple);\n                    } catch(e) {\n                        return false;\n                    }\n                }, Effect.duration);\n            }, delay);\n        },\n\n        // Little hack to make <input> can perform waves effect\n        wrapInput: function(elements) {\n            for (var a = 0; a < elements.length; a++) {\n                var el = elements[a];\n\n                if (el.tagName.toLowerCase() === 'input') {\n                    var parent = el.parentNode;\n\n                    // If input already have parent just pass through\n                    if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {\n                        continue;\n                    }\n\n                    // Put element class and style to the specified parent\n                    var wrapper = document.createElement('i');\n                    wrapper.className = el.className + ' waves-input-wrapper';\n\n                    var elementStyle = el.getAttribute('style');\n\n                    if (!elementStyle) {\n                        elementStyle = '';\n                    }\n\n                    wrapper.setAttribute('style', elementStyle);\n\n                    el.className = 'waves-button-input';\n                    el.removeAttribute('style');\n\n                    // Put element as child\n                    parent.replaceChild(wrapper, el);\n                    wrapper.appendChild(el);\n                }\n            }\n        }\n    };\n\n\n    /**\n     * Disable mousedown event for 500ms during and after touch\n     */\n    var TouchHandler = {\n        /* uses an integer rather than bool so there's no issues with\n         * needing to clear timeouts if another touch event occurred\n         * within the 500ms. Cannot mouseup between touchstart and\n         * touchend, nor in the 500ms after touchend. */\n        touches: 0,\n        allowEvent: function(e) {\n            var allow = true;\n\n            if (e.type === 'touchstart') {\n                TouchHandler.touches += 1; //push\n            } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n                setTimeout(function() {\n                    if (TouchHandler.touches > 0) {\n                        TouchHandler.touches -= 1; //pop after 500ms\n                    }\n                }, 500);\n            } else if (e.type === 'mousedown' && TouchHandler.touches > 0) {\n                allow = false;\n            }\n\n            return allow;\n        },\n        touchup: function(e) {\n            TouchHandler.allowEvent(e);\n        }\n    };\n\n\n    /**\n     * Delegated click handler for .waves-effect element.\n     * returns null when .waves-effect element not in \"click tree\"\n     */\n    function getWavesEffectElement(e) {\n        if (TouchHandler.allowEvent(e) === false) {\n            return null;\n        }\n\n        var element = null;\n        var target = e.target || e.srcElement;\n\n        while (target.parentElement !== null) {\n            if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {\n                element = target;\n                break;\n            } else if (target.classList.contains('waves-effect')) {\n                element = target;\n                break;\n            }\n            target = target.parentElement;\n        }\n\n        return element;\n    }\n\n    /**\n     * Bubble the click and show effect if .waves-effect elem was found\n     */\n    function showEffect(e) {\n        var element = getWavesEffectElement(e);\n\n        if (element !== null) {\n            Effect.show(e, element);\n\n            if ('ontouchstart' in window) {\n                element.addEventListener('touchend', Effect.hide, false);\n                element.addEventListener('touchcancel', Effect.hide, false);\n            }\n\n            element.addEventListener('mouseup', Effect.hide, false);\n            element.addEventListener('mouseleave', Effect.hide, false);\n        }\n    }\n\n    Waves.displayEffect = function(options) {\n        options = options || {};\n\n        if ('duration' in options) {\n            Effect.duration = options.duration;\n        }\n\n        //Wrap input inside <i> tag\n        Effect.wrapInput($$('.waves-effect'));\n\n        if ('ontouchstart' in window) {\n            document.body.addEventListener('touchstart', showEffect, false);\n        }\n\n        document.body.addEventListener('mousedown', showEffect, false);\n    };\n\n    /**\n     * Attach Waves to an input element (or any element which doesn't\n     * bubble mouseup/mousedown events).\n     *   Intended to be used with dynamically loaded forms/inputs, or\n     * where the user doesn't want a delegated click handler.\n     */\n    Waves.attach = function(element) {\n        //FUTURE: automatically add waves classes and allow users\n        // to specify them with an options param? Eg. light/classic/button\n        if (element.tagName.toLowerCase() === 'input') {\n            Effect.wrapInput([element]);\n            element = element.parentElement;\n        }\n\n        if ('ontouchstart' in window) {\n            element.addEventListener('touchstart', showEffect, false);\n        }\n\n        element.addEventListener('mousedown', showEffect, false);\n    };\n\n    window.Waves = Waves;\n\n    document.addEventListener('DOMContentLoaded', function() {\n        Waves.displayEffect();\n    }, false);\n\n})(window);\n\n/*\nTabs\n*/\n/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */\n/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */\n!function(e){function t(e){var t=e.length,r=$.type(e);return\"function\"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===r||0===t||\"number\"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?a[o.call(e)]||\"object\":typeof e},$.isArray=Array.isArray||function(e){return\"array\"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||\"object\"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,\"constructor\")&&!n.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for(\"boolean\"==typeof i&&(u=i,i=arguments[s]||{},s++),\"object\"!=typeof i&&\"function\"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,\"string\"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||\"fx\")+\"queue\";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||\"fx\";var a=$.queue(r,t),n=a.shift();\"inprogress\"===n&&(n=a.shift()),n&&(\"fx\"===t&&a.unshift(\"inprogress\"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error(\"Not a DOM node.\")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&\"html\"===!e.nodeType.toLowerCase&&\"static\"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando=\"velocity\"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i=\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),s=0;s<i.length;s++)a[\"[object \"+i[s]+\"]\"]=i[s].toLowerCase();$.fn.init.prototype=$.fn,e.Velocity={Utilities:$}}}(window),function(e){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):e()}(function(){return function(e,t,r,a){function n(e){for(var t=-1,r=e?e.length:0,a=[];++t<r;){var n=e[t];n&&a.push(n)}return a}function o(e){return g.isWrapped(e)?e=[].slice.call(e):g.isNode(e)&&(e=[e]),e}function i(e){var t=$.data(e,\"velocity\");return null===t?a:t}function s(e){return function(t){return Math.round(t*e)*(1/e)}}function l(e,r,a,n){function o(e,t){return 1-3*t+3*e}function i(e,t){return 3*t-6*e}function s(e){return 3*e}function l(e,t,r){return((o(t,r)*e+i(t,r))*e+s(t))*e}function u(e,t,r){return 3*o(t,r)*e*e+2*i(t,r)*e+s(t)}function c(t,r){for(var n=0;m>n;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s<v);return i}function d(t){for(var r=0,n=1,o=b-1;n!=o&&w[n]<=t;++n)r+=x;--n;var i=(t-w[n])/(w[n+1]-w[n]),s=r+i*x,l=u(s,e,a);return l>=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S=\"Float32Array\"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if(\"number\"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T=\"generateBezier(\"+[e,r,a,n]+\")\";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&\"none\"!==u.display){if(\"flex\"===u.display){var C=[\"-webkit-box\",\"-moz-box\",\"-ms-flexbox\",\"-webkit-flex\"];$.each(C,function(e,t){x.setPropertyValue(w,\"display\",t)})}x.setPropertyValue(w,\"display\",u.display)}u.visibility!==a&&\"hidden\"!==u.visibility&&x.setPropertyValue(w,\"visibility\",u.visibility);for(var T in S)if(\"element\"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,\"tween\"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?\"\":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j](\"extract\",null,N[1]):N[1]),\"transform\"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d=\"(0px, 0px, 0px)\",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&\"none\"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&\"hidden\"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||(\"none\"===o.display&&x.setPropertyValue(p,\"display\",o.display),\"hidden\"===o.visibility&&x.setPropertyValue(p,\"visibility\",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp(\"^\\\\(\"+r+\"[^.]\").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,\"velocity-animating\")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&\"%\"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,\"reverse\",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement(\"div\");if(t.innerHTML=\"<!--[if IE \"+e+\"]><span></span><![endif]-->\",t.getElementsByTagName(\"span\").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return\"string\"==typeof e},isArray:Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},isFunction:function(e){return\"[object Function]\"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return\"object\"==typeof e&&/^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||\"object\"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error(\"Velocity: IE8 and below require jQuery to be loaded before Velocity.\");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h=\"swing\",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement(\"div\"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:\"\",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,\"velocity\",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft=\"pageXOffset\",v.State.scrollPropertyTop=\"pageYOffset\"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft=\"scrollLeft\",v.State.scrollPropertyTop=\"scrollTop\");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([[\"ease\",[.25,.1,.25,1]],[\"ease-in\",[.42,0,1,1]],[\"ease-out\",[0,0,.58,1]],[\"ease-in-out\",[.42,0,.58,1]],[\"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]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\\((.*)\\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\\(.+\\))|(([A-z0-9#-.]+?)(?=\\s|$))/gi},Lists:{colors:[\"fill\",\"stroke\",\"stopColor\",\"color\",\"backgroundColor\",\"borderColor\",\"borderTopColor\",\"borderRightColor\",\"borderBottomColor\",\"borderLeftColor\",\"outlineColor\"],transformsBase:[\"translateX\",\"translateY\",\"scale\",\"scaleX\",\"scaleY\",\"skewX\",\"skewY\",\"rotateZ\"],transforms3D:[\"transformPerspective\",\"translateZ\",\"scaleZ\",\"rotateX\",\"rotateY\"]},Hooks:{templates:{textShadow:[\"Color X Y Blur\",\"black 0px 0px 0px\"],boxShadow:[\"Color X Y Blur Spread\",\"black 0px 0px 0px 0px\"],clip:[\"Top Right Bottom Left\",\"0px 0px 0px 0px\"],backgroundPosition:[\"X Y\",\"0% 0%\"],transformOrigin:[\"X Y Z\",\"50% 50% 0px\"],perspectiveOrigin:[\"X Y\",\"50% 50%\"]},registered:{},register:function(){for(var e=0;e<x.Lists.colors.length;e++){var t=\"color\"===x.Lists.colors[e]?\"0 0 0 1\":\"255 255 255 1\";x.Hooks.templates[x.Lists.colors[e]]=[\"Red Green Blue Alpha\",t]}var r,a,n;if(f)for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(\" \");var o=a[1].match(x.RegEx.valueSplit);\"Color\"===n[0]&&(n.push(n.shift()),o.push(o.shift()),x.Hooks.templates[r]=[n.join(\" \"),o.join(\" \")])}for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(\" \");for(var e in n){var i=r+n[e],s=e;x.Hooks.registered[i]=[r,s]}}},getRoot:function(e){var t=x.Hooks.registered[e];return t?t[0]:e},cleanRootPropertyValue:function(e,t){return x.RegEx.valueUnwrap.test(t)&&(t=t.match(x.RegEx.valueUnwrap)[1]),x.Values.isCSSNullValue(t)&&(t=x.Hooks.templates[e][1]),t},extractValue:function(e,t){var r=x.Hooks.registered[e];if(r){var a=r[0],n=r[1];return t=x.Hooks.cleanRootPropertyValue(a,t),t.toString().match(x.RegEx.valueSplit)[n]}return t},injectValue:function(e,t,r){var a=x.Hooks.registered[e];if(a){var n=a[0],o=a[1],i,s;return r=x.Hooks.cleanRootPropertyValue(n,r),i=r.toString().match(x.RegEx.valueSplit),i[o]=t,s=i.join(\" \")}return r}},Normalizations:{registered:{clip:function(e,t,r){switch(e){case\"name\":return\"clip\";case\"extract\":var a;return x.RegEx.wrappedValueAlreadyExtracted.test(r)?a=r:(a=r.toString().match(x.RegEx.valueUnwrap),a=a?a[1].replace(/,(\\s+)?/g,\" \"):r),a;case\"inject\":return\"rect(\"+r+\")\"}},blur:function(e,t,r){switch(e){case\"name\":return v.State.isFirefox?\"filter\":\"-webkit-filter\";case\"extract\":var a=parseFloat(r);if(!a&&0!==a){var n=r.toString().match(/blur\\(([0-9]+[A-z]+)\\)/i);a=n?n[1]:0}return a;case\"inject\":return parseFloat(r)?\"blur(\"+r+\")\":\"none\"}},opacity:function(e,t,r){if(8>=f)switch(e){case\"name\":return\"filter\";case\"extract\":var a=r.toString().match(/alpha\\(opacity=(.*)\\)/i);return r=a?a[1]/100:1;case\"inject\":return t.style.zoom=1,parseFloat(r)>=1?\"\":\"alpha(opacity=\"+parseInt(100*parseFloat(r),10)+\")\"}else switch(e){case\"name\":return\"opacity\";case\"extract\":return r;case\"inject\":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;e<x.Lists.transformsBase.length;e++)!function(){var t=x.Lists.transformsBase[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case\"name\":return\"transform\";case\"extract\":return i(r)===a||i(r).transformCache[t]===a?/^scale/i.test(t)?1:0:i(r).transformCache[t].replace(/[()]/g,\"\");case\"inject\":var o=!1;switch(t.substr(0,t.length-1)){case\"translate\":o=!/(%|px|em|rem|vw|vh|\\d)$/i.test(n);break;case\"scal\":case\"scale\":v.State.isAndroid&&i(r).transformCache[t]===a&&1>n&&(n=1),o=!/(\\d)$/i.test(n);break;case\"skew\":o=!/(deg|\\d)$/i.test(n);break;case\"rotate\":o=!/(deg|\\d)$/i.test(n)}return o||(i(r).transformCache[t]=\"(\"+n+\")\"),i(r).transformCache[t]}}}();for(var e=0;e<x.Lists.colors.length;e++)!function(){var t=x.Lists.colors[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case\"name\":return t;case\"extract\":var o;if(x.RegEx.wrappedValueAlreadyExtracted.test(n))o=n;else{var i,s={black:\"rgb(0, 0, 0)\",blue:\"rgb(0, 0, 255)\",gray:\"rgb(128, 128, 128)\",green:\"rgb(0, 128, 0)\",red:\"rgb(255, 0, 0)\",white:\"rgb(255, 255, 255)\"};/^[A-z]+$/i.test(n)?i=s[n]!==a?s[n]:s.black:x.RegEx.isHex.test(n)?i=\"rgb(\"+x.Values.hexToRgb(n).join(\" \")+\")\":/^rgba?\\(/i.test(n)||(i=s.black),o=(i||n).toString().match(x.RegEx.valueUnwrap)[1].replace(/,(\\s+)?/g,\" \")}return 8>=f||3!==o.split(\" \").length||(o+=\" 1\"),o;case\"inject\":return 8>=f?4===n.split(\" \").length&&(n=n.split(/\\s+/).slice(0,3).join(\" \")):3===n.split(\" \").length&&(n+=\" 1\"),(8>=f?\"rgb\":\"rgba\")+\"(\"+n.replace(/\\s+/g,\",\").replace(/\\.(\\d)+(?=,)/g,\"\")+\")\"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t=\"width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2\";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+=\"|transform\"),new RegExp(\"^(\"+t+\")$\",\"i\").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=[\"\",\"Webkit\",\"Moz\",\"ms\",\"O\"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,r=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\\(0, ?0, ?0, ?0\\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?\"deg\":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?\"\":\"px\"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?\"inline\":/^(li)$/i.test(t)?\"list-item\":/^(tr)$/i.test(t)?\"table-row\":/^(table)$/i.test(t)?\"table\":/^(tbody)$/i.test(t)?\"table-row-group\":\"block\"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?\" \":\"\")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp(\"(^|\\\\s)\"+t.split(\" \").join(\"|\")+\"(\\\\s|$)\",\"gi\"),\" \")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,\"display\",\"none\")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,\"display\")&&(u=!0,x.setPropertyValue(e,\"display\",x.Values.getDisplayType(e))),!o){if(\"height\"===r&&\"border-box\"!==x.getPropertyValue(e,\"boxSizing\").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,\"borderTopWidth\"))||0)-(parseFloat(x.getPropertyValue(e,\"borderBottomWidth\"))||0)-(parseFloat(x.getPropertyValue(e,\"paddingTop\"))||0)-(parseFloat(x.getPropertyValue(e,\"paddingBottom\"))||0);return n(),c}if(\"width\"===r&&\"border-box\"!==x.getPropertyValue(e,\"boxSizing\").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,\"borderLeftWidth\"))||0)-(parseFloat(x.getPropertyValue(e,\"borderRightWidth\"))||0)-(parseFloat(x.getPropertyValue(e,\"paddingLeft\"))||0)-(parseFloat(x.getPropertyValue(e,\"paddingRight\"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),\"borderColor\"===r&&(r=\"borderTopColor\"),l=9===f&&\"filter\"===r?d.getPropertyValue(r):d[r],(\"\"===l||null===l)&&(l=e.style[r]),n()}if(\"auto\"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,\"position\");(\"fixed\"===g||\"absolute\"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+\"px\")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c](\"extract\",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r](\"name\",e),\"transform\"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r](\"extract\",e,d)}if(!/^[\\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log(\"Get \"+r+\": \"+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if(\"scroll\"===r)o.container?o.container[\"scroll\"+o.direction]=a:\"Left\"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&\"transform\"===x.Normalizations.registered[r](\"name\",e))x.Normalizations.registered[r](\"inject\",e,a),s=\"transform\",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r](\"inject\",e,a),r=x.Normalizations.registered[r](\"name\",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log(\"Browser does not support [\"+a+\"] for [\"+s+\"]\")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log(\"Set \"+r+\" (\"+s+\"): \"+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r=\"\";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t(\"translateX\"),t(\"translateY\")],skewX:[t(\"skewX\")],skewY:[t(\"skewY\")],scale:1!==t(\"scale\")?[t(\"scale\"),t(\"scale\")]:[t(\"scaleX\"),t(\"scaleY\")],rotate:[t(\"rotateZ\"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e=\"translate\":/^scale/i.test(e)?e=\"scale\":/^rotate/i.test(e)&&(e=\"rotate\"),a[e]&&(r+=e+\"(\"+a[e].join(\" \")+\") \",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],\"transformPerspective\"===t?(o=n,!0):(9===f&&\"rotateZ\"===t&&(t=\"rotate\"),void(r+=t+n+\" \"))}),o&&(r=\"perspective\"+o+\" \"+r)}x.setPropertyValue(e,\"transform\",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);\"transform\"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||\"0\").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,\"\"}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,\"position\"),fontSize:x.getPropertyValue(n,\"fontSize\")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"):r.createElement(\"div\");v.init(u),e.myParent.appendChild(u),$.each([\"overflow\",\"overflowX\",\"overflowY\"],function(e,t){v.CSS.setPropertyValue(u,t,\"hidden\")}),v.CSS.setPropertyValue(u,\"position\",e.position),v.CSS.setPropertyValue(u,\"fontSize\",e.fontSize),v.CSS.setPropertyValue(u,\"boxSizing\",\"content-box\"),$.each([\"minWidth\",\"maxWidth\",\"width\",\"minHeight\",\"maxHeight\",\"height\"],function(e,t){v.CSS.setPropertyValue(u,t,s+\"%\")}),v.CSS.setPropertyValue(u,\"paddingLeft\",s+\"em\"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,\"width\",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,\"height\",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,\"paddingLeft\"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,\"fontSize\"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log(\"Unit ratios: \"+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if(\"scroll\"===k){var S=/^x$/i.test(o.axis)?\"Left\":\"Top\",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container[\"scroll\"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State[\"scrollProperty\"+S]],A=v.State.scrollAnchor[v.State[\"scrollProperty\"+(\"Left\"===S?\"Top\":\"Left\")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:\"\",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log(\"tweensContainer (scroll): \",s.scroll,n)}else if(\"reverse\"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);\"none\"===i(n).opts.display&&(i(n).opts.display=\"auto\"),\"hidden\"===i(n).opts.visibility&&(i(n).opts.visibility=\"visible\"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if(\"element\"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log(\"reverse tweensContainer (\"+j+\"): \"+JSON.stringify(E[j]),n)}s=E}else if(\"start\"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp(\"^\"+x.Lists.colors.join(\"$|^\")+\"$\").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=[\"Red\",\"Green\",\"Blue\"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;c<s.length;c++){var f=[l[c]];o&&f.push(o),u!==a&&f.push(u[c]),h[e+s[c]]=f}delete h[e]}}});for(var R in h){var O=p(h[R]),z=O[0],q=O[1],M=O[2];R=x.Names.camelCase(R);var I=x.Hooks.getRoot(R),B=!1;if(i(n).isSVG||\"tween\"===I||x.Names.prefixCheck(I)[1]!==!1||x.Normalizations.registered[I]!==a){(o.display!==a&&null!==o.display&&\"none\"!==o.display||o.visibility!==a&&\"hidden\"!==o.visibility)&&/opacity|filter/.test(R)&&!M&&0!==z&&(M=0),o._cacheValues&&E&&E[R]?(M===a&&(M=E[R].endValue+E[R].unitType),B=i(n).rootPropertyValueCache[I]):x.Hooks.registered[R]?M===a?(B=x.getPropertyValue(n,I),M=x.getPropertyValue(n,R,B)):B=x.Hooks.templates[I][1]:M===a&&(M=x.getPropertyValue(n,R));var W,G,D,X=!1;if(W=f(R,M),M=W[0],D=W[1],W=f(R,z),z=W[0].replace(/^([+-\\/*])=/,function(e,t){return X=t,\"\"}),G=W[1],M=parseFloat(M)||0,z=parseFloat(z)||0,\"%\"===G&&(/^(fontSize|lineHeight)$/.test(R)?(z/=100,G=\"em\"):/^scale/.test(R)?(z/=100,G=\"\"):/(Red|Green|Blue)$/i.test(R)&&(z=z/100*255,G=\"\")),/[\\/*]/.test(X))G=D;else if(D!==G&&0!==M)if(0===z)G=D;else{l=l||d();var Y=/margin|padding|left|right|width|text|word|letter/i.test(R)||/X$/.test(R)||\"x\"===R?\"x\":\"y\";switch(D){case\"%\":M*=\"x\"===Y?l.percentToPxWidth:l.percentToPxHeight;break;case\"px\":break;default:M*=l[D+\"ToPx\"]}switch(G){case\"%\":M*=1/(\"x\"===Y?l.percentToPxWidth:l.percentToPxHeight);break;case\"px\":break;default:M*=1/l[G+\"ToPx\"]}}switch(X){case\"+\":z=M+z;break;case\"-\":z=M-z;break;case\"*\":z=M*z;break;case\"/\":z=M/z}s[R]={rootPropertyValue:B,startValue:M,currentValue:M,endValue:z,unitType:G,easing:q},v.debug&&console.log(\"tweensContainer (\"+R+\"): \"+JSON.stringify(s[R]),n)}else v.debug&&console.log(\"Skipping [\"+I+\"] due to a lack of browser support.\")}s.element=n}s.element&&(x.Values.addClass(n,\"velocity-animating\"),L.push(s),\"\"===o.queue&&(i(n).tweensContainer=s,i(n).opts=o),i(n).isAnimating=!0,w===P-1?(v.State.calls.push([L,m,o,null,T.resolver]),v.State.isTicking===!1&&(v.State.isTicking=!0,c())):w++)}var n=this,o=$.extend({},v.defaults,b),s={},l;switch(i(n)===a&&v.init(n),parseFloat(o.delay)&&o.queue!==!1&&$.queue(n,o.queue,function(e){v.velocityQueueEntryFlag=!0,i(n).delayTimer={setTimeout:setTimeout(e,parseFloat(o.delay)),next:e}}),o.duration.toString().toLowerCase()){case\"fast\":o.duration=200;break;case\"normal\":o.duration=y;break;case\"slow\":o.duration=600;break;default:o.duration=parseFloat(o.duration)||1}v.mock!==!1&&(v.mock===!0?o.duration=o.delay=1:(o.duration*=parseFloat(v.mock)||1,o.delay*=parseFloat(v.mock)||1)),o.easing=u(o.easing,o.duration),o.begin&&!g.isFunction(o.begin)&&(o.begin=null),o.progress&&!g.isFunction(o.progress)&&(o.progress=null),o.complete&&!g.isFunction(o.complete)&&(o.complete=null),o.display!==a&&null!==o.display&&(o.display=o.display.toString().toLowerCase(),\"auto\"===o.display&&(o.display=v.CSS.Values.getDisplayType(n))),o.visibility!==a&&null!==o.visibility&&(o.visibility=o.visibility.toString().toLowerCase()),o.mobileHA=o.mobileHA&&v.State.isMobile&&!v.State.isGingerbread,o.queue===!1?o.delay?setTimeout(e,o.delay):e():$.queue(n,o.queue,function(t,r){return r===!0?(T.promise&&T.resolver(m),!0):(v.velocityQueueEntryFlag=!0,void e(t))}),\"\"!==o.queue&&\"fx\"!==o.queue||\"inprogress\"===$.queue(n)[0]||$.dequeue(n)}var s=arguments[0]&&(arguments[0].p||$.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||g.isString(arguments[0].properties)),l,f,d,m,h,b;if(g.isWrapped(this)?(l=!1,d=0,m=this,f=this):(l=!0,d=1,m=s?arguments[0].elements||arguments[0].e:arguments[0]),m=o(m)){s?(h=arguments[0].properties||arguments[0].p,b=arguments[0].options||arguments[0].o):(h=arguments[d],b=arguments[d+1]);var P=m.length,w=0;if(!/^(stop|finish)$/i.test(h)&&!$.isPlainObject(b)){var V=d+1;b={};for(var C=V;C<arguments.length;C++)g.isArray(arguments[C])||!/^(fast|normal|slow)$/i.test(arguments[C])&&!/^\\d/.test(arguments[C])?g.isString(arguments[C])||g.isArray(arguments[C])?b.easing=arguments[C]:g.isFunction(arguments[C])&&(b.complete=arguments[C]):b.duration=arguments[C]}var T={promise:null,resolver:null,rejecter:null};l&&v.Promise&&(T.promise=new v.Promise(function(e,t){T.resolver=e,T.rejecter=t}));var k;switch(h){case\"scroll\":k=\"scroll\";break;case\"reverse\":k=\"reverse\";break;case\"finish\":case\"stop\":$.each(m,function(e,t){i(t)&&i(t).delayTimer&&(clearTimeout(i(t).delayTimer.setTimeout),i(t).delayTimer.next&&i(t).delayTimer.next(),delete i(t).delayTimer)});var A=[];return $.each(v.State.calls,function(e,t){t&&$.each(t[1],function(r,n){var o=b===a?\"\":b;return o===!0||t[2].queue===o||b===a&&t[2].queue===!1?void $.each(m,function(r,a){a===n&&((b===!0||g.isString(b))&&($.each($.queue(a,g.isString(b)?b:\"\"),function(e,t){g.isFunction(t)&&t(null,!0)}),$.queue(a,g.isString(b)?b:\"\",[])),\"stop\"===h?(i(a)&&i(a).tweensContainer&&o!==!1&&$.each(i(a).tweensContainer,function(e,t){t.endValue=t.currentValue\n}),A.push(e)):\"finish\"===h&&(t[2].duration=1))}):!0})}),\"stop\"===h&&($.each(A,function(e,t){p(t,!0)}),T.promise&&T.resolver(m)),e();default:if(!$.isPlainObject(h)||g.isEmptyObject(h)){if(g.isString(h)&&v.Redirects[h]){var F=$.extend({},b),E=F.duration,j=F.delay||0;return F.backwards===!0&&(m=$.extend(!0,[],m).reverse()),$.each(m,function(e,t){parseFloat(F.stagger)?F.delay=j+parseFloat(F.stagger)*e:g.isFunction(F.stagger)&&(F.delay=j+F.stagger.call(t,e,P)),F.drag&&(F.duration=parseFloat(E)||(/^(callout|transition)/.test(h)?1e3:y),F.duration=Math.max(F.duration*(F.backwards?1-e/P:(e+1)/P),.75*F.duration,200)),v.Redirects[h].call(t,t,F||{},e,P,m,T.promise?T:a)}),e()}var H=\"Velocity: First argument (\"+h+\") was not a property map, a known action, or a registered redirect. Aborting.\";return T.promise?T.rejecter(new Error(H)):console.log(H),e()}k=\"start\"}var N={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},L=[];$.each(m,function(e,t){g.isNode(t)&&n.call(t)});var F=$.extend({},v.defaults,b),R;if(F.loop=parseInt(F.loop),R=2*F.loop-1,F.loop)for(var O=0;R>O;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,\"reverse\",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener(\"visibilitychange\",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each([\"Down\",\"Up\"],function(e,t){v.Redirects[\"slide\"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:\"\",marginTop:\"\",marginBottom:\"\",paddingTop:\"\",paddingBottom:\"\"},f={};l.display===a&&(l.display=\"Down\"===t?\"inline\"===v.CSS.Values.getDisplayType(e)?\"inline-block\":\"block\":\"none\"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]=\"Down\"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow=\"hidden\"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each([\"In\",\"Out\"],function(e,t){v.Redirects[\"fade\"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:\"In\"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display=\"In\"===t?\"auto\":\"none\"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});;!function(a,b,c,d){\"use strict\";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function n(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function o(a,b){return n(a,b,!0)}function p(a,b,c){var e,d=b.prototype;e=a.prototype=Object.create(d),e.constructor=a,e._super=d,c&&n(e,c)}function q(a,b){return function(){return a.apply(b,arguments)}}function r(a,b){return typeof a==g?a.apply(b?b[0]||d:d,b):a}function s(a,b){return a===d?b:a}function t(a,b,c){m(x(b),function(b){a.addEventListener(b,c,!1)})}function u(a,b,c){m(x(b),function(b){a.removeEventListener(b,c,!1)})}function v(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function w(a,b){return a.indexOf(b)>-1}function x(a){return a.trim().split(/\\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function z(a){return Array.prototype.slice.call(a,0)}function A(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];y(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h<e.length;){if(c=e[h],f=c?c+g:b,f in a)return f;h++}return d}function D(){return C++}function E(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function ab(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){r(a.options.enable,[a])&&c.handler(b)},this.init()}function bb(a){var b,c=a.options.inputClass;return b=c?c:H?wb:I?Eb:G?Gb:rb,new b(a,cb)}function cb(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&O&&0===d-e,g=b&(Q|R)&&0===d-e;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,db(a,c),a.emit(\"hammer.input\",c),a.recognize(c),a.session.prevInput=c}function db(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=gb(b)),e>1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:h(a.pointers[c].clientX),clientY:h(a.pointers[c].clientY)},c++;return{timeStamp:j(),pointers:b,center:hb(b),deltaX:a.deltaX,deltaY:a.deltaY}}function hb(a){var b=a.length;if(1===b)return{x:h(a[0].clientX),y:h(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),\"identifier\",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Q|R)&&delete d[g[e].identifier],e++;return h.length?[A(f.concat(h),\"identifier\",!0),h]:void 0}function Gb(){ab.apply(this,arguments);var a=q(this.handler,this);this.touch=new Eb(this.manager,a),this.mouse=new rb(this.manager,a)}function Pb(a,b){this.manager=a,this.set(b)}function Qb(a){if(w(a,Mb))return Mb;var b=w(a,Nb),c=w(a,Ob);return b&&c?Nb+\" \"+Ob:b||c?b?Nb:Ob:w(a,Lb)?Lb:Kb}function Yb(a){this.id=D(),this.manager=null,this.options=o(a||{},this.defaults),this.options.enable=s(this.options.enable,!0),this.state=Rb,this.simultaneous={},this.requireFail=[]}function Zb(a){return a&Wb?\"cancel\":a&Ub?\"end\":a&Tb?\"move\":a&Sb?\"start\":\"\"}function $b(a){return a==W?\"down\":a==V?\"up\":a==T?\"left\":a==U?\"right\":\"\"}function _b(a,b){var c=b.manager;return c?c.get(a):a}function ac(){Yb.apply(this,arguments)}function bc(){ac.apply(this,arguments),this.pX=null,this.pY=null}function cc(){ac.apply(this,arguments)}function dc(){Yb.apply(this,arguments),this._timer=null,this._input=null}function ec(){ac.apply(this,arguments)}function fc(){ac.apply(this,arguments)}function gc(){Yb.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function hc(a,b){return b=b||{},b.recognizers=s(b.recognizers,hc.defaults.preset),new kc(a,b)}function kc(a,b){b=b||{},this.options=o(b,hc.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=bb(this),this.touchAction=new Pb(this,this.options.touchAction),lc(this,!0),m(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function lc(a,b){var c=a.element;m(a.options.cssProps,function(a,d){c.style[B(c.style,d)]=b?a:\"\"})}function mc(a,c){var d=b.createEvent(\"Event\");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var e=[\"\",\"webkit\",\"moz\",\"MS\",\"ms\",\"o\"],f=b.createElement(\"div\"),g=\"function\",h=Math.round,i=Math.abs,j=Date.now,C=1,F=/mobile|tablet|ip(ad|hone|od)|android/i,G=\"ontouchstart\"in a,H=B(a,\"PointerEvent\")!==d,I=G&&F.test(navigator.userAgent),J=\"touch\",K=\"pen\",L=\"mouse\",M=\"kinect\",N=25,O=1,P=2,Q=4,R=8,S=1,T=2,U=4,V=8,W=16,X=T|U,Y=V|W,Z=X|Y,$=[\"x\",\"y\"],_=[\"clientX\",\"clientY\"];ab.prototype={handler:function(){},init:function(){this.evEl&&t(this.element,this.evEl,this.domHandler),this.evTarget&&t(this.target,this.evTarget,this.domHandler),this.evWin&&t(E(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&u(this.element,this.evEl,this.domHandler),this.evTarget&&u(this.target,this.evTarget,this.domHandler),this.evWin&&u(E(this.element),this.evWin,this.domHandler)}};var ob={mousedown:O,mousemove:P,mouseup:Q},pb=\"mousedown\",qb=\"mousemove mouseup\";p(rb,ab,{handler:function(a){var b=ob[a.type];b&O&&0===a.button&&(this.pressed=!0),b&P&&1!==a.which&&(b=Q),this.pressed&&this.allow&&(b&Q&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:L,srcEvent:a}))}});var sb={pointerdown:O,pointermove:P,pointerup:Q,pointercancel:R,pointerout:R},tb={2:J,3:K,4:L,5:M},ub=\"pointerdown\",vb=\"pointermove pointerup pointercancel\";a.MSPointerEvent&&(ub=\"MSPointerDown\",vb=\"MSPointerMove MSPointerUp MSPointerCancel\"),p(wb,ab,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace(\"ms\",\"\"),e=sb[d],f=tb[a.pointerType]||a.pointerType,g=f==J,h=y(b,a.pointerId,\"pointerId\");e&O&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb=\"touchstart\",zb=\"touchstart touchmove touchend touchcancel\";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db=\"touchstart touchmove touchend touchcancel\";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,\"touchAction\"),Ib=Hb!==d,Jb=\"compute\",Kb=\"auto\",Lb=\"manipulation\",Mb=\"none\",Nb=\"pan-x\",Ob=\"pan-y\";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(\" \"))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,\"recognizeWith\",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,\"dropRecognizeWith\",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,\"requireFailure\",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,\"dropRequireFailure\",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):\"\"),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(Xb|Rb)))return!1;a++}return!0},recognize:function(a){var b=n({},a);return r(this.options.enable,[this,b])?(this.state&(Vb|Wb|Xb)&&(this.state=Rb),this.state=this.process(b),this.state&(Sb|Tb|Ub|Wb)&&this.tryEmit(b),void 0):(this.reset(),this.state=Xb,void 0)},process:function(){},getTouchAction:function(){},reset:function(){}},p(ac,Yb,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(Sb|Tb),e=this.attrTest(a);return d&&(c&R||!e)?b|Wb:d||e?c&Q?b|Ub:b&Sb?b|Tb:Sb:Xb}}),p(bc,ac,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:Z},getTouchAction:function(){var a=this.options.direction,b=[];return a&X&&b.push(Ob),a&Y&&b.push(Nb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&X?(e=0===f?S:0>f?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?\"in\":\"out\";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:\"press\",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,e=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+\"up\",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:\"swipe\",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,e=a.deltaTime<b.time;if(this.reset(),a.eventType&O&&0===this.count)return this.failTimeout();if(d&&e&&c){if(a.eventType!=Q)return this.failTimeout();var f=this.pTime?a.timeStamp-this.pTime<b.interval:!0,g=!this.pCenter||kb(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,g&&f?this.count+=1:this.count=1,this._input=a;var h=this.count%b.taps;if(0===h)return this.hasRequireFailures()?(this._timer=k(function(){this.state=Vb,this.tryEmit()},b.interval,this),Sb):Vb}return Xb},failTimeout:function(){return this._timer=k(function(){this.state=Xb},this.options.interval,this),Xb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==Vb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),hc.VERSION=\"2.0.4\",hc.defaults={domEvents:!1,touchAction:Jb,enable:!0,inputTarget:null,inputClass:null,preset:[[ec,{enable:!1}],[cc,{enable:!1},[\"rotate\"]],[fc,{direction:X}],[bc,{direction:X},[\"swipe\"]],[gc],[gc,{event:\"doubletap\",taps:2},[\"tap\"]],[dc]],cssProps:{userSelect:\"default\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}};var ic=1,jc=2;kc.prototype={set:function(a){return n(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?jc:ic},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&Vb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===jc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(Sb|Tb|Ub)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof Yb)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(l(a,\"add\",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(l(a,\"remove\",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(y(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return m(x(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return m(x(a),function(a){b?c[a].splice(y(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&mc(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&lc(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},n(hc,{INPUT_START:O,INPUT_MOVE:P,INPUT_END:Q,INPUT_CANCEL:R,STATE_POSSIBLE:Rb,STATE_BEGAN:Sb,STATE_CHANGED:Tb,STATE_ENDED:Ub,STATE_RECOGNIZED:Vb,STATE_CANCELLED:Wb,STATE_FAILED:Xb,DIRECTION_NONE:S,DIRECTION_LEFT:T,DIRECTION_RIGHT:U,DIRECTION_UP:V,DIRECTION_DOWN:W,DIRECTION_HORIZONTAL:X,DIRECTION_VERTICAL:Y,DIRECTION_ALL:Z,Manager:kc,Input:ab,TouchAction:Pb,TouchInput:Eb,MouseInput:rb,PointerEventInput:wb,TouchMouseInput:Gb,SingleTouchInput:Ab,Recognizer:Yb,AttrRecognizer:ac,Tap:gc,Pan:bc,Swipe:fc,Pinch:cc,Rotate:ec,Press:dc,on:t,off:u,each:m,merge:o,extend:n,inherit:p,bindFn:q,prefixed:B}),typeof define==g&&define.amd?define(function(){return hc}):\"undefined\"!=typeof module&&module.exports?module.exports=hc:a[c]=hc}(window,document,\"Hammer\");;(function(factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery', 'hammerjs'], factory);\n    } else if (typeof exports === 'object') {\n        factory(require('jquery'), require('hammerjs'));\n    } else {\n        factory(jQuery, Hammer);\n    }\n}(function($, Hammer) {\n    function hammerify(el, options) {\n        var $el = $(el);\n        if(!$el.data(\"hammer\")) {\n            $el.data(\"hammer\", new Hammer($el[0], options));\n        }\n    }\n\n    $.fn.hammer = function(options) {\n        return this.each(function() {\n            hammerify(this, options);\n        });\n    };\n\n    // extend the emit method to also trigger jQuery events\n    Hammer.Manager.prototype.emit = (function(originalEmit) {\n        return function(type, data) {\n            originalEmit.call(this, type, data);\n            $(this.element).trigger({\n                type: type,\n                gesture: data\n            });\n        };\n    })(Hammer.Manager.prototype.emit);\n}));\n\n  var methods = {\n    init : function() {\n      return this.each(function() {\n\n      // For each set of tabs, we want to keep track of\n      // which tab is active and its associated content\n      var $this = $(this),\n          window_width = $(window).width();\n\n      $this.width('100%');\n      // Set Tab Width for each tab\n      var $num_tabs = $(this).children('li').length;\n      $this.children('li').each(function() {\n        $(this).width((100/$num_tabs)+'%');\n      });\n      var $active, $content, $links = $this.find('li.tab a'),\n          $tabs_width = $this.width(),\n          $tab_width = $this.find('li').first().outerWidth(),\n          $index = 0;\n\n      // If the location.hash matches one of the links, use that as the active tab.\n      $active = $($links.filter('[href=\"'+location.hash+'\"]'));\n\n      // If no match is found, use the first link or any with class 'active' as the initial active tab.\n      if ($active.length === 0) {\n          $active = $(this).find('li.tab a.active').first();\n      }\n      if ($active.length === 0) {\n        $active = $(this).find('li.tab a').first();\n      }\n\n      $active.addClass('active');\n      $index = $links.index($active);\n      if ($index < 0) {\n        $index = 0;\n      }\n\n      $content = $($active[0].hash);\n\n      // append indicator then set indicator width to tab width\n      $this.append('<div class=\"indicator\"></div>');\n      var $indicator = $this.find('.indicator');\n      if ($this.is(\":visible\")) {\n        $indicator.css({\"right\": $tabs_width - (($index + 1) * $tab_width)});\n        $indicator.css({\"left\": $index * $tab_width});\n      }\n      $(window).resize(function () {\n        $tabs_width = $this.width();\n        $tab_width = $this.find('li').first().outerWidth();\n        if ($index < 0) {\n          $index = 0;\n        }\n        if ($tab_width !== 0 && $tabs_width !== 0) {\n          $indicator.css({\"right\": $tabs_width - (($index + 1) * $tab_width)});\n          $indicator.css({\"left\": $index * $tab_width});\n        }\n      });\n\n      // Hide the remaining content\n      $links.not($active).each(function () {\n        $(this.hash).hide();\n      });\n\n\n      // Bind the click event handler\n      $this.on('click', 'a', function(e){\n        $tabs_width = $this.width();\n        $tab_width = $this.find('li').first().outerWidth();\n\n        // Make the old tab inactive.\n        $active.removeClass('active');\n        $content.hide();\n\n        // Update the variables with the new link and content\n        $active = $(this);\n        $content = $(this.hash);\n        $links = $this.find('li.tab a');\n\n        // Make the tab active.\n        $active.addClass('active');\n        var $prev_index = $index;\n        $index = $links.index($(this));\n        if ($index < 0) {\n          $index = 0;\n        }\n        // Change url to current tab\n        // window.location.hash = $active.attr('href');\n\n        $content.show();\n\n        // Update indicator\n        if (($index - $prev_index) >= 0) {\n          $indicator.velocity({\"right\": $tabs_width - (($index + 1) * $tab_width)}, { duration: 300, queue: false, easing: 'easeOutQuad'});\n          $indicator.velocity({\"left\": $index * $tab_width}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});\n\n        }\n        else {\n          $indicator.velocity({\"left\": $index * $tab_width}, { duration: 300, queue: false, easing: 'easeOutQuad'});\n          $indicator.velocity({\"right\": $tabs_width - (($index + 1) * $tab_width)}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});\n        }\n\n        // Prevent the anchor's default click action\n        e.preventDefault();\n      });\n    });\n\n    },\n    select_tab : function( id ) {\n      this.find('a[href=\"#' + id + '\"]').trigger('click');\n    }\n  };\n\n  $.fn.tabs = function(methodOrOptions) {\n    if ( methods[methodOrOptions] ) {\n      return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n    } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n      // Default to \"init\"\n      return methods.init.apply( this, arguments );\n    } else {\n      $.error( 'Method ' +  methodOrOptions + ' does not exist on jQuery.tooltip' );\n    }\n  };\n\n  $(document).ready(function(){\n    $('ul.tabs').tabs();\n  });\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/autocomplete.js",
    "content": "﻿/*jslint  browser: true, white: true, plusplus: true */\n/*global $, countries */\n\n$(function () {\n    'use strict';\n\n    var countriesArray = $.map(countries, function (value, key) { return { value: value, data: key }; });\n\n    // Setup jQuery ajax mock:\n    $.mockjax({\n        url: '*',\n        responseTime: 2000,\n        response: function (settings) {\n            var query = settings.data.query,\n                queryLowerCase = query.toLowerCase(),\n                re = new RegExp('\\\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi'),\n                suggestions = $.grep(countriesArray, function (country) {\n                     // return country.value.toLowerCase().indexOf(queryLowerCase) === 0;\n                    return re.test(country.value);\n                }),\n                response = {\n                    query: query,\n                    suggestions: suggestions\n                };\n\n            this.responseText = JSON.stringify(response);\n        }\n    });\n\n    // Initialize ajax autocomplete:\n    $('#autocomplete-ajax').autocomplete({\n        // serviceUrl: '/autosuggest/service/url',\n        lookup: countriesArray,\n        lookupFilter: function(suggestion, originalQuery, queryLowerCase) {\n            var re = new RegExp('\\\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi');\n            return re.test(suggestion.value);\n        },\n        onSelect: function(suggestion) {\n            $('#selction-ajax').html('You selected: ' + suggestion.value + ', ' + suggestion.data);\n        },\n        onHint: function (hint) {\n            $('#autocomplete-ajax-x').val(hint);\n        },\n        onInvalidateSelection: function() {\n            $('#selction-ajax').html('You selected: none');\n        }\n    });\n\n    var nhlTeams = ['Anaheim Ducks', 'Atlanta Thrashers', 'Boston Bruins', 'Buffalo Sabres', 'Calgary Flames', 'Carolina Hurricanes', 'Chicago Blackhawks', 'Colorado Avalanche', 'Columbus Blue Jackets', 'Dallas Stars', 'Detroit Red Wings', 'Edmonton OIlers', 'Florida Panthers', 'Los Angeles Kings', 'Minnesota Wild', 'Montreal Canadiens', 'Nashville Predators', 'New Jersey Devils', 'New Rork Islanders', 'New York Rangers', 'Ottawa Senators', 'Philadelphia Flyers', 'Phoenix Coyotes', 'Pittsburgh Penguins', 'Saint Louis Blues', 'San Jose Sharks', 'Tampa Bay Lightning', 'Toronto Maple Leafs', 'Vancouver Canucks', 'Washington Capitals'];\n    var nbaTeams = ['Atlanta Hawks', 'Boston Celtics', 'Charlotte Bobcats', 'Chicago Bulls', 'Cleveland Cavaliers', 'Dallas Mavericks', 'Denver Nuggets', 'Detroit Pistons', 'Golden State Warriors', 'Houston Rockets', 'Indiana Pacers', 'LA Clippers', 'LA Lakers', 'Memphis Grizzlies', 'Miami Heat', 'Milwaukee Bucks', 'Minnesota Timberwolves', 'New Jersey Nets', 'New Orleans Hornets', 'New York Knicks', 'Oklahoma City Thunder', 'Orlando Magic', 'Philadelphia Sixers', 'Phoenix Suns', 'Portland Trail Blazers', 'Sacramento Kings', 'San Antonio Spurs', 'Toronto Raptors', 'Utah Jazz', 'Washington Wizards'];\n    var nhl = $.map(nhlTeams, function (team) { return { value: team, data: { category: 'NHL' }}; });\n    var nba = $.map(nbaTeams, function (team) { return { value: team, data: { category: 'NBA' } }; });\n    var teams = nhl.concat(nba);\n\n    // Initialize autocomplete with local lookup:\n    $('#autocomplete').devbridgeAutocomplete({\n        lookup: teams,\n        minChars: 1,\n        onSelect: function (suggestion) {\n            $('#selection').html('You selected: ' + suggestion.value + ', ' + suggestion.data.category);\n        },\n        showNoSuggestionNotice: true,\n        noSuggestionNotice: 'Sorry, no matching results',\n        groupBy: 'category'\n    });\n    \n    // Initialize autocomplete with custom appendTo:\n    $('#autocomplete-custom-append').autocomplete({\n        lookup: countriesArray,\n        appendTo: '#suggestions-container'\n    });\n\n    // Initialize autocomplete with custom appendTo:\n    $('#autocomplete-dynamic').autocomplete({\n        lookup: countriesArray\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/datatables.editable.init.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Editable\n* \n*/\n\n(function( $ ) {\n\n\t'use strict';\n\n\tvar EditableTable = {\n\n\t\toptions: {\n\t\t\taddButton: '#addToTable',\n\t\t\ttable: '#datatable-editable',\n\t\t\tdialog: {\n\t\t\t\twrapper: '#dialog',\n\t\t\t\tcancelButton: '#dialogCancel',\n\t\t\t\tconfirmButton: '#dialogConfirm',\n\t\t\t}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis\n\t\t\t\t.setVars()\n\t\t\t\t.build()\n\t\t\t\t.events();\n\t\t},\n\n\t\tsetVars: function() {\n\t\t\tthis.$table\t\t\t\t= $( this.options.table );\n\t\t\tthis.$addButton\t\t\t= $( this.options.addButton );\n\n\t\t\t// dialog\n\t\t\tthis.dialog\t\t\t\t= {};\n\t\t\tthis.dialog.$wrapper\t= $( this.options.dialog.wrapper );\n\t\t\tthis.dialog.$cancel\t\t= $( this.options.dialog.cancelButton );\n\t\t\tthis.dialog.$confirm\t= $( this.options.dialog.confirmButton );\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild: function() {\n\t\t\tthis.datatable = this.$table.DataTable({\n\t\t\t\taoColumns: [\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t{ \"bSortable\": false }\n\t\t\t\t]\n\t\t\t});\n\n\t\t\twindow.dt = this.datatable;\n\n\t\t\treturn this;\n\t\t},\n\n\t\tevents: function() {\n\t\t\tvar _self = this;\n\n\t\t\tthis.$table\n\t\t\t\t.on('click', 'a.save-row', function( e ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t_self.rowSave( $(this).closest( 'tr' ) );\n\t\t\t\t})\n\t\t\t\t.on('click', 'a.cancel-row', function( e ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t_self.rowCancel( $(this).closest( 'tr' ) );\n\t\t\t\t})\n\t\t\t\t.on('click', 'a.edit-row', function( e ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t_self.rowEdit( $(this).closest( 'tr' ) );\n\t\t\t\t})\n\t\t\t\t.on( 'click', 'a.remove-row', function( e ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tvar $row = $(this).closest( 'tr' );\n\n\t\t\t\t\t$.magnificPopup.open({\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tsrc: _self.options.dialog.wrapper,\n\t\t\t\t\t\t\ttype: 'inline'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpreloader: false,\n\t\t\t\t\t\tmodal: true,\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\tchange: function() {\n\t\t\t\t\t\t\t\t_self.dialog.$confirm.on( 'click', function( e ) {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\t\t\t_self.rowRemove( $row );\n\t\t\t\t\t\t\t\t\t$.magnificPopup.close();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tclose: function() {\n\t\t\t\t\t\t\t\t_self.dialog.$confirm.off( 'click' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tthis.$addButton.on( 'click', function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t_self.rowAdd();\n\t\t\t});\n\n\t\t\tthis.dialog.$cancel.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$.magnificPopup.close();\n\t\t\t});\n\n\t\t\treturn this;\n\t\t},\n\n\t\t// ==========================================================================================\n\t\t// ROW FUNCTIONS\n\t\t// ==========================================================================================\n\t\trowAdd: function() {\n\t\t\tthis.$addButton.attr({ 'disabled': 'disabled' });\n\n\t\t\tvar actions,\n\t\t\t\tdata,\n\t\t\t\t$row;\n\n\t\t\tactions = [\n\t\t\t\t'<a href=\"#\" class=\"hidden on-editing save-row\"><i class=\"fa fa-save\"></i></a>',\n\t\t\t\t'<a href=\"#\" class=\"hidden on-editing cancel-row\"><i class=\"fa fa-times\"></i></a>',\n\t\t\t\t'<a href=\"#\" class=\"on-default edit-row\"><i class=\"fa fa-pencil\"></i></a>',\n\t\t\t\t'<a href=\"#\" class=\"on-default remove-row\"><i class=\"fa fa-trash-o\"></i></a>'\n\t\t\t].join(' ');\n\n\t\t\tdata = this.datatable.row.add([ '', '', '', actions ]);\n\t\t\t$row = this.datatable.row( data[0] ).nodes().to$();\n\n\t\t\t$row\n\t\t\t\t.addClass( 'adding' )\n\t\t\t\t.find( 'td:last' )\n\t\t\t\t.addClass( 'actions' );\n\n\t\t\tthis.rowEdit( $row );\n\n\t\t\tthis.datatable.order([0,'asc']).draw(); // always show fields\n\t\t},\n\n\t\trowCancel: function( $row ) {\n\t\t\tvar _self = this,\n\t\t\t\t$actions,\n\t\t\t\ti,\n\t\t\t\tdata;\n\n\t\t\tif ( $row.hasClass('adding') ) {\n\t\t\t\tthis.rowRemove( $row );\n\t\t\t} else {\n\n\t\t\t\tdata = this.datatable.row( $row.get(0) ).data();\n\t\t\t\tthis.datatable.row( $row.get(0) ).data( data );\n\n\t\t\t\t$actions = $row.find('td.actions');\n\t\t\t\tif ( $actions.get(0) ) {\n\t\t\t\t\tthis.rowSetActionsDefault( $row );\n\t\t\t\t}\n\n\t\t\t\tthis.datatable.draw();\n\t\t\t}\n\t\t},\n\n\t\trowEdit: function( $row ) {\n\t\t\tvar _self = this,\n\t\t\t\tdata;\n\n\t\t\tdata = this.datatable.row( $row.get(0) ).data();\n\n\t\t\t$row.children( 'td' ).each(function( i ) {\n\t\t\t\tvar $this = $( this );\n\n\t\t\t\tif ( $this.hasClass('actions') ) {\n\t\t\t\t\t_self.rowSetActionsEditing( $row );\n\t\t\t\t} else {\n\t\t\t\t\t$this.html( '<input type=\"text\" class=\"form-control input-block\" value=\"' + data[i] + '\"/>' );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\trowSave: function( $row ) {\n\t\t\tvar _self     = this,\n\t\t\t\t$actions,\n\t\t\t\tvalues    = [];\n\n\t\t\tif ( $row.hasClass( 'adding' ) ) {\n\t\t\t\tthis.$addButton.removeAttr( 'disabled' );\n\t\t\t\t$row.removeClass( 'adding' );\n\t\t\t}\n\n\t\t\tvalues = $row.find('td').map(function() {\n\t\t\t\tvar $this = $(this);\n\n\t\t\t\tif ( $this.hasClass('actions') ) {\n\t\t\t\t\t_self.rowSetActionsDefault( $row );\n\t\t\t\t\treturn _self.datatable.cell( this ).data();\n\t\t\t\t} else {\n\t\t\t\t\treturn $.trim( $this.find('input').val() );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.datatable.row( $row.get(0) ).data( values );\n\n\t\t\t$actions = $row.find('td.actions');\n\t\t\tif ( $actions.get(0) ) {\n\t\t\t\tthis.rowSetActionsDefault( $row );\n\t\t\t}\n\n\t\t\tthis.datatable.draw();\n\t\t},\n\n\t\trowRemove: function( $row ) {\n\t\t\tif ( $row.hasClass('adding') ) {\n\t\t\t\tthis.$addButton.removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t\tthis.datatable.row( $row.get(0) ).remove().draw();\n\t\t},\n\n\t\trowSetActionsEditing: function( $row ) {\n\t\t\t$row.find( '.on-editing' ).removeClass( 'hidden' );\n\t\t\t$row.find( '.on-default' ).addClass( 'hidden' );\n\t\t},\n\n\t\trowSetActionsDefault: function( $row ) {\n\t\t\t$row.find( '.on-editing' ).addClass( 'hidden' );\n\t\t\t$row.find( '.on-default' ).removeClass( 'hidden' );\n\t\t}\n\n\t};\n\n\t$(function() {\n\t\tEditableTable.initialize();\n\t});\n\n}).apply( this, [ jQuery ]);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/datatables.init.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * Component: Datatable\n * \n */\nvar handleDataTableButtons = function() {\n        \"use strict\";\n        0 !== $(\"#datatable-buttons\").length && $(\"#datatable-buttons\").DataTable({\n            dom: \"Bfrtip\",\n            buttons: [{\n                extend: \"copy\",\n                className: \"btn-sm\"\n            }, {\n                extend: \"csv\",\n                className: \"btn-sm\"\n            }, {\n                extend: \"excel\",\n                className: \"btn-sm\"\n            }, {\n                extend: \"pdf\",\n                className: \"btn-sm\"\n            }, {\n                extend: \"print\",\n                className: \"btn-sm\"\n            }],\n            responsive: !0\n        })\n    },\n    TableManageButtons = function() {\n        \"use strict\";\n        return {\n            init: function() {\n                handleDataTableButtons()\n            }\n        }\n    }();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/easy-pie-chart.init.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Easy pie chart\n*/\n\n!function($) {\n    \"use strict\";\n\n    var EasyPieChart = function() {};\n\n    EasyPieChart.prototype.init = function() {\n    \t//initializing various types of easy pie charts\n    \t$('.easy-pie-chart-1').easyPieChart({\n\t\t\teasing: 'easeOutBounce',\n\t\t\tbarColor : '#5d9cec',\n\t\t\tlineWidth: 10,\n\t\t\tanimate: 1000,\n            scaleColor: false,\n            lineCap: 'square',\n            trackColor: '#e5e5e5',\n\t\t\tonStep: function(from, to, percent) {\n\t\t\t\t$(this.el).find('.percent').text(Math.round(percent));\n\t\t\t}\n\t\t});\n\t\t$('.easy-pie-chart-2').easyPieChart({\n\t\t\teasing: 'easeOutBounce',\n\t\t\tbarColor : '#fb6d9d',\n\t\t\tlineWidth: 10,\n\t\t\ttrackColor : false,\n\t\t\tlineCap : 'butt',\n\t\t\tonStep: function(from, to, percent) {\n\t\t\t\t$(this.el).find('.percent').text(Math.round(percent));\n\t\t\t}\n\t\t});\n\t\t$('.easy-pie-chart-3').easyPieChart({\n\t\t\teasing: 'easeOutBounce',\n\t\t\tbarColor : '#34d3eb',\n\t\t\tlineWidth: 10,\n\t\t\tlineCap : 'square',\n\t\t\tscaleColor: \"transparent\",\n\t\t\tonStep: function(from, to, percent) {\n\t\t\t\t$(this.el).find('.percent').text(Math.round(percent));\n\t\t\t}\n\t\t});\n\t\t$('.easy-pie-chart-4').easyPieChart({\n\t\t\teasing: 'easeOutBounce',\n\t\t\tbarColor : '#5fbeaa',\n\t\t\tlineWidth: 10,\n\t\t\tonStep: function(from, to, percent) {\n\t\t\t\t$(this.el).find('.percent').text(Math.round(percent));\n\t\t\t}\n\t\t});\n    },\n    //init\n    $.EasyPieChart = new EasyPieChart, $.EasyPieChart.Constructor = EasyPieChart\n}(window.jQuery),\n\n//initializing\nfunction($) {\n    \"use strict\";\n    $.EasyPieChart.init()\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/form-validation-init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Form Validator\n*/\n\n!function($) {\n    \"use strict\";\n\n    var FormValidator = function() {\n        this.$commentForm = $(\"#commentForm\"), //this could be any form, for example we are specifying the comment form\n        this.$signupForm = $(\"#signupForm\");\n    };\n\n    //init\n    FormValidator.prototype.init = function() {\n        //validator plugin\n        $.validator.setDefaults({\n            submitHandler: function() { alert(\"submitted!\"); }\n        });\n\n        // validate the comment form when it is submitted\n        this.$commentForm.validate();\n\n        // validate signup form on keyup and submit\n        this.$signupForm.validate({\n            rules: {\n                firstname: \"required\",\n                lastname: \"required\",\n                username: {\n                    required: true,\n                    minlength: 2\n                },\n                password: {\n                    required: true,\n                    minlength: 5\n                },\n                confirm_password: {\n                    required: true,\n                    minlength: 5,\n                    equalTo: \"#password\"\n                },\n                email: {\n                    required: true,\n                    email: true\n                },\n                topic: {\n                    required: \"#newsletter:checked\",\n                    minlength: 2\n                },\n                agree: \"required\"\n            },\n            messages: {\n                firstname: \"Please enter your firstname\",\n                lastname: \"Please enter your lastname\",\n                username: {\n                    required: \"Please enter a username\",\n                    minlength: \"Your username must consist of at least 2 characters\"\n                },\n                password: {\n                    required: \"Please provide a password\",\n                    minlength: \"Your password must be at least 5 characters long\"\n                },\n                confirm_password: {\n                    required: \"Please provide a password\",\n                    minlength: \"Your password must be at least 5 characters long\",\n                    equalTo: \"Please enter the same password as above\"\n                },\n                email: \"Please enter a valid email address\",\n                agree: \"Please accept our policy\"\n            }\n        });\n\n        // propose username by combining first- and lastname\n        $(\"#username\").focus(function() {\n            var firstname = $(\"#firstname\").val();\n            var lastname = $(\"#lastname\").val();\n            if(firstname && lastname && !this.value) {\n                this.value = firstname + \".\" + lastname;\n            }\n        });\n\n        //code to hide topic selection, disable for demo\n        var newsletter = $(\"#newsletter\");\n        // newsletter topics are optional, hide at first\n        var inital = newsletter.is(\":checked\");\n        var topics = $(\"#newsletter_topics\")[inital ? \"removeClass\" : \"addClass\"](\"gray\");\n        var topicInputs = topics.find(\"input\").attr(\"disabled\", !inital);\n        // show when newsletter is checked\n        newsletter.click(function() {\n            topics[this.checked ? \"removeClass\" : \"addClass\"](\"gray\");\n            topicInputs.attr(\"disabled\", !this.checked);\n        });\n\n    },\n    //init\n    $.FormValidator = new FormValidator, $.FormValidator.Constructor = FormValidator\n}(window.jQuery),\n\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.FormValidator.init()\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.bs-table.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * bootstrap tables\n */\n\n\n\n$(document).ready(function () {\n\n\n    // BOOTSTRAP TABLE - CUSTOM TOOLBAR\n    // =================================================================\n    // Require Bootstrap Table\n    // http://bootstrap-table.wenzhixin.net.cn/\n    // =================================================================\n    var $table = $('#demo-custom-toolbar'), $remove = $('#demo-delete-row');\n\n\n    $table.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table', function () {\n        $remove.prop('disabled', !$table.bootstrapTable('getSelections').length);\n    });\n\n    $remove.click(function () {\n        var ids = $.map($table.bootstrapTable('getSelections'), function (row) {\n            return row.id\n        });\n        $table.bootstrapTable('remove', {\n            field: 'id',\n            values: ids\n        });\n        $remove.prop('disabled', true);\n    });\n\n\n});\n\n\n// Sample format for Invoice Column.\n// =================================================================\nfunction invoiceFormatter(value, row) {\n    return '<a href=\"#\" class=\"btn-link\" > Order #' + value + '</a>';\n}\n\n// Sample Format for User Name Column.\n// =================================================================\nfunction nameFormatter(value, row) {\n    return '<a href=\"#\" class=\"btn-link\" > ' + value + '</a>';\n}\n\n// Sample Format for Order Date Column.\n// =================================================================\nfunction dateFormatter(value, row) {\n    var icon = row.id % 2 === 0 ? 'fa-star' : 'fa-user';\n    return '<span class=\"text-muted\"> ' + value + '</span>';\n}\n\n\n// Sample Format for Order Status Column.\n// =================================================================\nfunction statusFormatter(value, row) {\n    var labelColor;\n    if (value == \"Paid\") {\n        labelColor = \"success\";\n    } else if (value == \"Unpaid\") {\n        labelColor = \"warning\";\n    } else if (value == \"Shipped\") {\n        labelColor = \"info\";\n    } else if (value == \"Refunded\") {\n        labelColor = \"danger\";\n    }\n    var icon = row.id % 2 === 0 ? 'fa-star' : 'fa-user';\n    return '<div class=\"label label-table label-' + labelColor + '\"> ' + value + '</div>';\n}\n\n\n// Sort Price Column\n// =================================================================\nfunction priceSorter(a, b) {\n    a = +a.substring(1); // remove $\n    b = +b.substring(1);\n    if (a > b) return 1;\n    if (a < b) return -1;\n    return 0;\n}\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.c3-chart.init.js",
    "content": "/**\n* Theme: Ubold Dashboard\n* Author: Coderthemes\n* Chart c3 page\n*/\n\n!function($) {\n    \"use strict\";\n\n    var ChartC3 = function() {};\n\n    ChartC3.prototype.init = function () {\n        //generating chart \n        c3.generate({\n            bindto: '#chart',\n            data: {\n                columns: [\n                    ['data1', 30, 20, 50, 40, 60, 50],\n                    ['data2', 200, 130, 90, 240, 130, 220],\n                    ['data3', 300, 200, 160, 400, 250, 250]\n                ],\n                type: 'bar',\n                colors: {\n                    data1: '#dcdcdc',\n                    data2: '#5d9cec',\n                    data3: '#5fbeaa'\n                }\n                \n            }\n        });\n\n        //combined chart\n        c3.generate({\n            bindto: '#combine-chart',\n            data: {\n                columns: [\n                    ['data1', 30, 20, 50, 40, 60, 50],\n                    ['data2', 200, 130, 90, 240, 130, 220],\n                    ['data3', 300, 200, 160, 400, 250, 250],\n                    ['data4', 200, 130, 90, 240, 130, 220],\n                    ['data5', 130, 120, 150, 140, 160, 150]\n                ],\n                types: {\n                    data1: 'bar',\n                    data2: 'bar',\n                    data3: 'spline',\n                    data4: 'line',\n                    data5: 'bar'\n                },\n                colors: {\n                    data1: '#dcdcdc',\n                    data2: '#5d9cec',\n                    data3: '#36404a',\n                    data4: '#fb6d9d',\n                    data5: '#5fbeaa'\n                },\n                groups: [\n                    ['data1','data2']\n                ]\n            },\n            axis: {\n                x: {\n                    type: 'categorized'\n                }\n            }\n        });\n        \n        //roated chart\n        c3.generate({\n            bindto: '#roated-chart',\n            data: {\n                columns: [\n                ['data1', 30, 200, 100, 400, 150, 250],\n                ['data2', 50, 20, 10, 40, 15, 25]\n                ],\n                types: {\n                data1: 'bar'\n                },\n                colors: {\n\t                data1: '#5fbeaa',\n\t                data2: '#5d9cec'\n\t            },\n            },\n            axis: {\n                rotated: true,\n                x: {\n                type: 'categorized'\n                }\n            }\n        });\n\n        //stacked chart\n        c3.generate({\n            bindto: '#chart-stacked',\n            data: {\n                columns: [\n                    ['data1', 30, 20, 50, 40, 60, 50],\n                    ['data2', 200, 130, 90, 240, 130, 220]\n                ],\n                types: {\n                    data1: 'area-spline',\n                    data2: 'area-spline'\n                    // 'line', 'spline', 'step', 'area', 'area-step' are also available to stack\n                },\n                colors: {\n                    data1: '#5fbeaa',\n                    data2: '#5d9cec',\n                }\n            }\n        });\n        \n        //Donut Chart\n        c3.generate({\n             bindto: '#donut-chart',\n            data: {\n                columns: [\n                    ['data1', 46],\n                    ['data2', 24],\n                    ['data3', 30]\n                ],\n                type : 'donut'\n            },\n            donut: {\n                title: \"Dogs love:\",\n                width: 15,\n\t\t\t\tlabel: { \n\t\t\t\t\tshow:false\n\t\t\t\t}\n            },\n            color: {\n            \tpattern: [\"#f4f8fb\", \"#5d9cec\", \"#5fbeaa\"]\n            }\n        });\n        \n        //Pie Chart\n        c3.generate({\n             bindto: '#pie-chart',\n            data: {\n                columns: [\n                    ['Lulu', 46],\n                    ['Olaf', 24],\n                    ['Item 3', 30]\n                ],\n                type : 'pie'\n            },\n            color: {\n            \tpattern: [\"#f4f8fb\", \"#5d9cec\", \"#5fbeaa\"]\n            },\n            pie: {\n\t\t        label: {\n\t\t          show: false\n\t\t        }\n\t\t    }\n        });\n        \n        //Line regions\n        c3.generate({\n             bindto: '#line-regions',\n            data: {\n                columns: [\n\t\t            ['data1', 30, 200, 100, 400, 150, 250],\n\t\t            ['data2', 50, 20, 10, 40, 15, 25]\n\t\t        ],\n\t\t        regions: {\n\t\t            'data1': [{'start':1, 'end':2, 'style':'dashed'},{'start':3}], // currently 'dashed' style only\n\t\t            'data2': [{'end':3}]\n\t\t        },\n\t\t        colors: {\n\t                data1: '#5d9cec',\n\t                data2: '#fb6d9d'\n\t            },\n            },\n            \n        });\n        \n        \n        //Scatter Plot\n        c3.generate({\n             bindto: '#scatter-plot',\n             data: {\n\t\t        xs: {\n\t\t            setosa: 'setosa_x',\n\t\t            versicolor: 'versicolor_x',\n\t\t        },\n\t\t        // iris data from R\n\t\t        columns: [\n\t\t            [\"setosa_x\", 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3.0, 3.0, 4.0, 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.0, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3.0, 3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3.0, 3.8, 3.2, 3.7, 3.3],\n\t\t            [\"versicolor_x\", 3.2, 3.2, 3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2.0, 3.0, 2.2, 2.9, 2.9, 3.1, 3.0, 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3.0, 2.8, 3.0, 2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3.0, 3.4, 3.1, 2.3, 3.0, 2.5, 2.6, 3.0, 2.6, 2.3, 2.7, 3.0, 2.9, 2.9, 2.5, 2.8],\n\t\t            [\"setosa\", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2],\n\t\t            [\"versicolor\", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3],\n\t\t        ],\n\t\t        \n\t\t        type: 'scatter'\n\t\t    },\n\t\t    color: {\n            \tpattern: [\"#5d9cec\", \"#5fbeaa\", \"#5d9cec\", \"#5fbeaa\"]\n            },\n\t\t    axis: {\n\t\t        x: {\n\t\t            label: 'Sepal.Width',\n\t\t            tick: {\n\t\t                fit: false\n\t\t            }\n\t\t            \n\t\t        },\n\t\t        y: {\n\t\t            label: 'Petal.Width'\n\t\t        }\n\t\t    }\n            \n        });\n\n    },\n    $.ChartC3 = new ChartC3, $.ChartC3.Constructor = ChartC3\n\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.ChartC3.init()\n}(window.jQuery);\n\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.chartist.init.js",
    "content": "/**\n* Theme: Ubold Dashboard\n* Author: Coderthemes\n* Chartist chart\n*/\n\n//smil-animations Chart\n\n\n  var chart = new Chartist.Line('#smil-animations', {\n  labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  series: [\n    [12, 9, 7, 8, 5, 4, 6, 2, 3, 3, 4, 6],\n    [4,  5, 3, 7, 3, 5, 5, 3, 4, 4, 5, 5],\n    [5,  3, 4, 5, 6, 3, 3, 4, 5, 6, 3, 4],\n    [3,  4, 5, 6, 7, 6, 4, 5, 6, 7, 6, 3]\n  ]\n}, {\n  low: 0,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n// Let's put a sequence number aside so we can use it in the event callbacks\nvar seq = 0,\n  delays = 80,\n  durations = 500;\n\n// Once the chart is fully created we reset the sequence\nchart.on('created', function() {\n  seq = 0;\n});\n\n// On each drawn element by Chartist we use the Chartist.Svg API to trigger SMIL animations\nchart.on('draw', function(data) {\n  seq++;\n\n  if(data.type === 'line') {\n    // If the drawn element is a line we do a simple opacity fade in. This could also be achieved using CSS3 animations.\n    data.element.animate({\n      opacity: {\n        // The delay when we like to start the animation\n        begin: seq * delays + 1000,\n        // Duration of the animation\n        dur: durations,\n        // The value where the animation should start\n        from: 0,\n        // The value where it should end\n        to: 1\n      }\n    });\n  } else if(data.type === 'label' && data.axis === 'x') {\n    data.element.animate({\n      y: {\n        begin: seq * delays,\n        dur: durations,\n        from: data.y + 100,\n        to: data.y,\n        // We can specify an easing function from Chartist.Svg.Easing\n        easing: 'easeOutQuart'\n      }\n    });\n  } else if(data.type === 'label' && data.axis === 'y') {\n    data.element.animate({\n      x: {\n        begin: seq * delays,\n        dur: durations,\n        from: data.x - 100,\n        to: data.x,\n        easing: 'easeOutQuart'\n      }\n    });\n  } else if(data.type === 'point') {\n    data.element.animate({\n      x1: {\n        begin: seq * delays,\n        dur: durations,\n        from: data.x - 10,\n        to: data.x,\n        easing: 'easeOutQuart'\n      },\n      x2: {\n        begin: seq * delays,\n        dur: durations,\n        from: data.x - 10,\n        to: data.x,\n        easing: 'easeOutQuart'\n      },\n      opacity: {\n        begin: seq * delays,\n        dur: durations,\n        from: 0,\n        to: 1,\n        easing: 'easeOutQuart'\n      }\n    });\n  } else if(data.type === 'grid') {\n    // Using data.axis we get x or y which we can use to construct our animation definition objects\n    var pos1Animation = {\n      begin: seq * delays,\n      dur: durations,\n      from: data[data.axis.units.pos + '1'] - 30,\n      to: data[data.axis.units.pos + '1'],\n      easing: 'easeOutQuart'\n    };\n\n    var pos2Animation = {\n      begin: seq * delays,\n      dur: durations,\n      from: data[data.axis.units.pos + '2'] - 100,\n      to: data[data.axis.units.pos + '2'],\n      easing: 'easeOutQuart'\n    };\n\n    var animations = {};\n    animations[data.axis.units.pos + '1'] = pos1Animation;\n    animations[data.axis.units.pos + '2'] = pos2Animation;\n    animations['opacity'] = {\n      begin: seq * delays,\n      dur: durations,\n      from: 0,\n      to: 1,\n      easing: 'easeOutQuart'\n    };\n\n    data.element.animate(animations);\n  }\n});\n\n// For the sake of the example we update the chart every time it's created with a delay of 10 seconds\nchart.on('created', function() {\n  if(window.__exampleAnimateTimeout) {\n    clearTimeout(window.__exampleAnimateTimeout);\n    window.__exampleAnimateTimeout = null;\n  }\n  window.__exampleAnimateTimeout = setTimeout(chart.update.bind(chart), 12000);\n});\n\n\n\n//Simple line chart\nnew Chartist.Line('#simple-line-chart', {\n  labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],\n  series: [\n    [12, 9, 7, 8, 5],\n    [2, 1, 3.5, 7, 3],\n    [1, 3, 4, 5, 6]\n  ]\n}, {\n  fullWidth: true,\n  chartPadding: {\n    right: 40\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n//Line Scatter Diagram\nvar times = function(n) {\n  return Array.apply(null, new Array(n));\n};\n\nvar data = times(52).map(Math.random).reduce(function(data, rnd, index) {\n  data.labels.push(index + 1);\n  data.series.forEach(function(series) {\n    series.push(Math.random() * 100)\n  });\n\n  return data;\n}, {\n  labels: [],\n  series: times(4).map(function() { return new Array() })\n});\n\nvar options = {\n  showLine: false,\n  axisX: {\n    labelInterpolationFnc: function(value, index) {\n      return index % 13 === 0 ? 'W' + value : null;\n    }\n  }\n};\n\nvar responsiveOptions = [\n  ['screen and (min-width: 640px)', {\n    axisX: {\n      labelInterpolationFnc: function(value, index) {\n        return index % 4 === 0 ? 'W' + value : null;\n      }\n    }\n  }]\n];\n\nnew Chartist.Line('#scatter-diagram', data, options, responsiveOptions);\n\n\n\n\n\n//Line chart with tooltips\n\n//Line chart with tooltips\n\nnew Chartist.Line('#line-chart-tooltips', {\n  labels: ['1', '2', '3', '4', '5', '6'],\n  series: [\n    {\n      name: 'Fibonacci sequence',\n      data: [1, 2, 3, 5, 8, 13]\n    },\n    {\n      name: 'Golden section',\n      data: [1, 1.618, 2.618, 4.236, 6.854, 11.09]\n    }\n  ]\n},\n    {\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n}\n);\n\nvar $chart = $('#line-chart-tooltips');\n\nvar $toolTip = $chart\n  .append('<div class=\"tooltip\"></div>')\n  .find('.tooltip')\n  .hide();\n\n$chart.on('mouseenter', '.ct-point', function() {\n  var $point = $(this),\n    value = $point.attr('ct:value'),\n    seriesName = $point.parent().attr('ct:series-name');\n  $toolTip.html(seriesName + '<br>' + value).show();\n});\n\n$chart.on('mouseleave', '.ct-point', function() {\n  $toolTip.hide();\n});\n\n$chart.on('mousemove', function(event) {\n  $toolTip.css({\n    left: (event.offsetX || event.originalEvent.layerX) - $toolTip.width() / 2 - 10,\n    top: (event.offsetY || event.originalEvent.layerY) - $toolTip.height() - 40\n  });\n});\n\n\n\n\n//Line chart with area\n\nnew Chartist.Line('#chart-with-area', {\n  labels: [1, 2, 3, 4, 5, 6, 7, 8],\n  series: [\n    [5, 9, 7, 8, 5, 3, 5, 4]\n  ]\n}, {\n  low: 0,\n  showArea: true,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n//Bi-polar Line chart with area only\n\nnew Chartist.Line('#bi-polar-line', {\n  labels: [1, 2, 3, 4, 5, 6, 7, 8],\n  series: [\n    [1, 2, 3, 1, -2, 0, 1, 0],\n    [-2, -1, -2, -1, -2.5, -1, -2, -1],\n    [0, 0, 0, 1, 2, 2.5, 2, 1],\n    [2.5, 2, 1, 0.5, 1, 0.5, -1, -2.5]\n  ]\n}, {\n  high: 3,\n  low: -3,\n  showArea: true,\n  showLine: false,\n  showPoint: false,\n  fullWidth: true,\n  axisX: {\n    showLabel: false,\n    showGrid: false\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n\n//SVG Path animation\n\nvar chart = new Chartist.Line('#svg-animation', {\n  labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  series: [\n    [1, 5, 2, 5, 4, 3],\n    [2, 3, 4, 8, 1, 2],\n    [5, 4, 3, 2, 1, 0.5]\n  ]\n}, {\n  low: 0,\n  showArea: true,\n  showPoint: false,\n  fullWidth: true\n});\n\nchart.on('draw', function(data) {\n  if(data.type === 'line' || data.type === 'area') {\n    data.element.animate({\n      d: {\n        begin: 2000 * data.index,\n        dur: 2000,\n        from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),\n        to: data.path.clone().stringify(),\n        easing: Chartist.Svg.Easing.easeOutQuint\n      }\n    });\n  }\n});\n\n\n\n\n\n//Line Interpolation / Smoothing\n\nvar chart = new Chartist.Line('#line-smoothing', {\n  labels: [1, 2, 3, 4, 5],\n  series: [\n    [1, 5, 10, 0, 1],\n    [10, 15, 0, 1, 2]\n  ]\n}, {\n  // Remove this configuration to see that chart rendered with cardinal spline interpolation\n  // Sometimes, on large jumps in data values, it's better to use simple smoothing.\n  lineSmooth: Chartist.Interpolation.simple({\n    divisor: 2\n  }),\n  fullWidth: true,\n  chartPadding: {\n    right: 20\n  },\n  low: 0,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n\n//Bi-polar bar chart\n\nvar data = {\n  labels: ['W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8', 'W9', 'W10'],\n  series: [\n    [1, 2, 4, 8, 6, -2, -1, -4, -6, -2]\n  ]\n};\n\nvar options = {\n  high: 10,\n  low: -10,\n  axisX: {\n    labelInterpolationFnc: function(value, index) {\n      return index % 2 === 0 ? value : null;\n    }\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n};\n\nnew Chartist.Bar('#bi-polar-bar', data, options);\n\n\n\n\n//Overlapping bars on mobile\n\nvar data = {\n  labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  series: [\n    [5, 4, 3, 7, 5, 10, 3, 4, 8, 10, 6, 8],\n    [3, 2, 9, 5, 4, 6, 4, 6, 7, 8, 7, 4]\n  ]\n};\n\nvar options = {\n  seriesBarDistance: 10\n};\n\nvar responsiveOptions = [\n  ['screen and (max-width: 640px)', {\n    seriesBarDistance: 5,\n    axisX: {\n      labelInterpolationFnc: function (value) {\n        return value[0];\n      }\n    }\n  }]\n];\n\nnew Chartist.Bar('#overlapping-bars', data, options, responsiveOptions);\n\n\n\n\n\n//Multi-line labels\n\nnew Chartist.Bar('#multi-line-chart', {\n  labels: ['First quarter of the year', 'Second quarter of the year', 'Third quarter of the year', 'Fourth quarter of the year'],\n  series: [\n    [60000, 40000, 80000, 70000],\n    [40000, 30000, 70000, 65000],\n    [8000, 3000, 10000, 6000]\n  ]\n}, {\n  seriesBarDistance: 10,\n  axisX: {\n    offset: 60\n  },\n  axisY: {\n    offset: 80,\n    labelInterpolationFnc: function(value) {\n      return value + ' CHF'\n    },\n    scaleMinSpace: 15\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n//Stacked bar chart\n\nnew Chartist.Bar('#stacked-bar-chart', {\n  labels: ['Q1', 'Q2', 'Q3', 'Q4'],\n  series: [\n    [800000, 1200000, 1400000, 1300000],\n    [200000, 400000, 500000, 300000],\n    [160000, 290000, 410000, 600000]\n  ]\n}, {\n  stackBars: true,\n  axisY: {\n    labelInterpolationFnc: function(value) {\n      return (value / 1000) + 'k';\n    }\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n}).on('draw', function(data) {\n  if(data.type === 'bar') {\n    data.element.attr({\n      style: 'stroke-width: 30px'\n    });\n  }\n});\n\n\n\n\n\n\n//Horizontal bar chart\n\nnew Chartist.Bar('#horizontal-bar-chart', {\n  labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\n  series: [\n    [5, 4, 3, 7, 5, 10, 3],\n    [3, 2, 9, 5, 4, 6, 4]\n  ]\n}, {\n  seriesBarDistance: 10,\n  reverseData: true,\n  horizontalBars: true,\n  axisY: {\n    offset: 70\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n\n// Extreme responsive configuration\n\nnew Chartist.Bar('#extreme-chart', {\n  labels: ['Quarter 1', 'Quarter 2', 'Quarter 3', 'Quarter 4'],\n  series: [\n    [5, 4, 3, 7],\n    [3, 2, 9, 5],\n    [1, 5, 8, 4],\n    [2, 3, 4, 6],\n    [4, 1, 2, 1]\n  ]\n}, {\n  // Default mobile configuration\n  stackBars: true,\n  axisX: {\n    labelInterpolationFnc: function(value) {\n      return value.split(/\\s+/).map(function(word) {\n        return word[0];\n      }).join('');\n    }\n  },\n  axisY: {\n    offset: 20\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n}, [\n  // Options override for media > 400px\n  ['screen and (min-width: 400px)', {\n    reverseData: true,\n    horizontalBars: true,\n    axisX: {\n      labelInterpolationFnc: Chartist.noop\n    },\n    axisY: {\n      offset: 60\n    }\n  }],\n  // Options override for media > 800px\n  ['screen and (min-width: 800px)', {\n    stackBars: false,\n    seriesBarDistance: 10\n  }],\n  // Options override for media > 1000px\n  ['screen and (min-width: 1000px)', {\n    reverseData: false,\n    horizontalBars: false,\n    seriesBarDistance: 15\n  }]\n]);\n\n\n\n\n//Distributed series\n\nnew Chartist.Bar('#distributed-series', {\n  labels: ['XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'],\n  series: [20, 60, 120, 200, 180, 20, 10]\n}, {\n  distributeSeries: true,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n//Label placement\n\nnew Chartist.Bar('#label-placement-chart', {\n  labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n  series: [\n    [5, 4, 3, 7, 5, 10, 3],\n    [3, 2, 9, 5, 4, 6, 4]\n  ]\n}, {\n  axisX: {\n    // On the x-axis start means top and end means bottom\n    position: 'start'\n  },\n  axisY: {\n    // On the y-axis start means left and end means right\n    position: 'end'\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n//Animating a Donut with Svg.animate\n\nvar chart = new Chartist.Pie('#animating-donut', {\n  series: [10, 20, 50, 20, 5, 50, 15],\n  labels: [1, 2, 3, 4, 5, 6, 7]\n}, {\n  donut: true,\n  showLabel: false,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\nchart.on('draw', function(data) {\n  if(data.type === 'slice') {\n    // Get the total path length in order to use for dash array animation\n    var pathLength = data.element._node.getTotalLength();\n\n    // Set a dasharray that matches the path length as prerequisite to animate dashoffset\n    data.element.attr({\n      'stroke-dasharray': pathLength + 'px ' + pathLength + 'px'\n    });\n\n    // Create animation definition while also assigning an ID to the animation for later sync usage\n    var animationDefinition = {\n      'stroke-dashoffset': {\n        id: 'anim' + data.index,\n        dur: 1000,\n        from: -pathLength + 'px',\n        to:  '0px',\n        easing: Chartist.Svg.Easing.easeOutQuint,\n        // We need to use `fill: 'freeze'` otherwise our animation will fall back to initial (not visible)\n        fill: 'freeze'\n      }\n    };\n\n    // If this was not the first slice, we need to time the animation so that it uses the end sync event of the previous animation\n    if(data.index !== 0) {\n      animationDefinition['stroke-dashoffset'].begin = 'anim' + (data.index - 1) + '.end';\n    }\n\n    // We need to set an initial value before the animation starts as we are not in guided mode which would do that for us\n    data.element.attr({\n      'stroke-dashoffset': -pathLength + 'px'\n    });\n\n    // We can't use guided mode as the animations need to rely on setting begin manually\n    // See http://gionkunz.github.io/chartist-js/api-documentation.html#chartistsvg-function-animate\n    data.element.animate(animationDefinition, false);\n  }\n});\n\n// For the sake of the example we update the chart every time it's created with a delay of 8 seconds\nchart.on('created', function() {\n  if(window.__anim21278907124) {\n    clearTimeout(window.__anim21278907124);\n    window.__anim21278907124 = null;\n  }\n  window.__anim21278907124 = setTimeout(chart.update.bind(chart), 10000);\n});\n\n\n\n\n//Simple pie chart\n\nvar data = {\n  series: [5, 3, 4]\n};\n\nvar sum = function(a, b) { return a + b };\n\nnew Chartist.Pie('#simple-pie', data, {\n  labelInterpolationFnc: function(value) {\n    return Math.round(value / data.series.reduce(sum) * 100) + '%';\n  }\n});\n\n\n\n\n//Pie chart with custom labels\n\nvar data = {\n  labels: ['Bananas', 'Apples', 'Grapes'],\n  series: [20, 15, 40]\n};\n\nvar options = {\n  labelInterpolationFnc: function(value) {\n    return value[0]\n  }\n};\n\nvar responsiveOptions = [\n  ['screen and (min-width: 640px)', {\n    chartPadding: 30,\n    labelOffset: 100,\n    labelDirection: 'explode',\n    labelInterpolationFnc: function(value) {\n      return value;\n    }\n  }],\n  ['screen and (min-width: 1024px)', {\n    labelOffset: 80,\n    chartPadding: 20\n  }]\n];\n\nnew Chartist.Pie('#pie-chart', data, options, responsiveOptions);\n\n\n\n//Gauge chart\n\nnew Chartist.Pie('#gauge-chart', {\n  series: [20, 10, 30, 40]\n}, {\n  donut: true,\n  donutWidth: 60,\n  startAngle: 270,\n  total: 200,\n  showLabel: false,\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n\n\n\n\n// Different configuration for different series\n\nvar chart = new Chartist.Line('#different-series', {\n  labels: ['1', '2', '3', '4', '5', '6', '7', '8'],\n  // Naming the series with the series object array notation\n  series: [{\n    name: 'series-1',\n    data: [5, 2, -4, 2, 0, -2, 5, -3]\n  }, {\n    name: 'series-2',\n    data: [4, 3, 5, 3, 1, 3, 6, 4]\n  }, {\n    name: 'series-3',\n    data: [2, 4, 3, 1, 4, 5, 3, 2]\n  }]\n}, {\n  fullWidth: true,\n  // Within the series options you can use the series names\n  // to specify configuration that will only be used for the\n  // specific series.\n  series: {\n    'series-1': {\n      lineSmooth: Chartist.Interpolation.step()\n    },\n    'series-2': {\n      lineSmooth: Chartist.Interpolation.simple(),\n      showArea: true\n    },\n    'series-3': {\n      showPoint: false\n    }\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n}, [\n  // You can even use responsive configuration overrides to\n  // customize your series configuration even further!\n  ['screen and (max-width: 320px)', {\n    series: {\n      'series-1': {\n        lineSmooth: Chartist.Interpolation.none()\n      },\n      'series-2': {\n        lineSmooth: Chartist.Interpolation.none(),\n        showArea: false\n      },\n      'series-3': {\n        lineSmooth: Chartist.Interpolation.none(),\n        showPoint: true\n      }\n    }\n  }]\n]);\n\n\n\n\n//SVG Animations chart\n\nvar chart = new Chartist.Line('#svg-dot-animation', {\n  labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],\n  series: [\n    [12, 4, 2, 8, 5, 4, 6, 2, 3, 3, 4, 6],\n    [4, 8, 9, 3, 7, 2, 10, 5, 8, 1, 7, 10]\n  ]\n}, {\n  low: 0,\n  showLine: false,\n  axisX: {\n    showLabel: false,\n    offset: 0\n  },\n  axisY: {\n    showLabel: false,\n    offset: 0\n  },\n  plugins: [\n    Chartist.plugins.tooltip()\n  ]\n});\n\n// Let's put a sequence number aside so we can use it in the event callbacks\nvar seq = 0;\n\n// Once the chart is fully created we reset the sequence\nchart.on('created', function() {\n  seq = 0;\n});\n\n// On each drawn element by Chartist we use the Chartist.Svg API to trigger SMIL animations\nchart.on('draw', function(data) {\n  if(data.type === 'point') {\n    // If the drawn element is a line we do a simple opacity fade in. This could also be achieved using CSS3 animations.\n    data.element.animate({\n      opacity: {\n        // The delay when we like to start the animation\n        begin: seq++ * 80,\n        // Duration of the animation\n        dur: 500,\n        // The value where the animation should start\n        from: 0,\n        // The value where it should end\n        to: 1\n      },\n      x1: {\n        begin: seq++ * 80,\n        dur: 500,\n        from: data.x - 100,\n        to: data.x,\n        // You can specify an easing function name or use easing functions from Chartist.Svg.Easing directly\n        easing: Chartist.Svg.Easing.easeOutQuart\n      }\n    });\n  }\n});\n\n// For the sake of the example we update the chart every time it's created with a delay of 8 seconds\nchart.on('created', function() {\n  if(window.__anim0987432598723) {\n    clearTimeout(window.__anim0987432598723);\n    window.__anim0987432598723 = null;\n  }\n  window.__anim0987432598723 = setTimeout(chart.update.bind(chart), 8000);\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.chartjs.init.js",
    "content": "/**\nTemplate Name: Ubold Dashboard\nAuthor: CoderThemes\nEmail: coderthemes@gmail.com\nFile: Chartjs\n*/\n\n\n!function($) {\n    \"use strict\";\n\n    var ChartJs = function() {};\n\n    ChartJs.prototype.respChart = function(selector,type,data, options) {\n        // get selector by context\n        var ctx = selector.get(0).getContext(\"2d\");\n        // pointing parent container to make chart js inherit its width\n        var container = $(selector).parent();\n\n        // enable resizing matter\n        $(window).resize( generateChart );\n\n        // this function produce the responsive Chart JS\n        function generateChart(){\n            // make chart width fit with its container\n            var ww = selector.attr('width', $(container).width() );\n            switch(type){\n                case 'Line':\n                    new Chart(ctx, {type: 'line', data: data, options: options});\n                    break;\n                case 'Doughnut':\n                    new Chart(ctx, {type: 'doughnut', data: data, options: options});\n                    break;\n                case 'Pie':\n                    new Chart(ctx, {type: 'pie', data: data, options: options});\n                    break;\n                case 'Bar':\n                    new Chart(ctx, {type: 'bar', data: data, options: options});\n                    break;\n                case 'Radar':\n                    new Chart(ctx, {type: 'radar', data: data, options: options});\n                    break;\n                case 'PolarArea':\n                    new Chart(ctx, {data: data, type: 'polarArea', options: options});\n                    break;\n            }\n            // Initiate new chart or Redraw\n\n        };\n        // run function - render chart at first load\n        generateChart();\n    },\n    //init\n    ChartJs.prototype.init = function() {\n        //creating lineChart\n        var lineChart = {\n            labels: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\"],\n            datasets: [\n                {\n                    label: \"Sales Analytics\",\n                    fill: false,\n                    lineTension: 0.1,\n                    backgroundColor: \"#5d9cec\",\n                    borderColor: \"#5d9cec\",\n                    borderCapStyle: 'butt',\n                    borderDash: [],\n                    borderDashOffset: 0.0,\n                    borderJoinStyle: 'miter',\n                    pointBorderColor: \"#5d9cec\",\n                    pointBackgroundColor: \"#fff\",\n                    pointBorderWidth: 1,\n                    pointHoverRadius: 5,\n                    pointHoverBackgroundColor: \"#5d9cec\",\n                    pointHoverBorderColor: \"#eef0f2\",\n                    pointHoverBorderWidth: 2,\n                    pointRadius: 1,\n                    pointHitRadius: 10,\n                    data: [65, 59, 80, 81, 56, 55, 40, 35, 30]\n                }\n            ]\n        };\n\n        var lineOpts = {\n            scales: {\n                yAxes: [{\n                    ticks: {\n                        max: 100,\n                        min: 20,\n                        stepSize: 10\n                    }\n                }]\n            }\n        };\n\n        this.respChart($(\"#lineChart\"),'Line',lineChart, lineOpts);\n\n        //donut chart\n        var donutChart = {\n            labels: [\n                \"Desktops\",\n                \"Tablets\",\n                \"Mobiles\"\n            ],\n            datasets: [\n                {\n                    data: [300, 50, 100],\n                    backgroundColor: [\n                        \"#5d9cec\",\n                        \"#5fbeaa\",\n                        \"#ebeff2\"\n                    ],\n                    hoverBackgroundColor: [\n                        \"#5d9cec\",\n                        \"#5fbeaa\",\n                        \"#ebeff2\"\n                    ],\n                    hoverBorderColor: \"#fff\"\n                }]\n        };\n        this.respChart($(\"#doughnut\"),'Doughnut',donutChart);\n\n\n        //Pie chart\n        var pieChart = {\n            labels: [\n                \"Desktops\",\n                \"Tablets\",\n                \"Mobiles\"\n            ],\n            datasets: [\n                {\n                    data: [300, 50, 100],\n                    backgroundColor: [\n                        \"#5d9cec\",\n                        \"#5fbeaa\",\n                        \"#ebeff2\"\n                    ],\n                    hoverBackgroundColor: [\n                        \"#5d9cec\",\n                        \"#5fbeaa\",\n                        \"#ebeff2\"\n                    ],\n                    hoverBorderColor: \"#fff\"\n                }]\n        };\n        this.respChart($(\"#pie\"),'Pie',pieChart);\n\n\n        //barchart\n        var barChart = {\n            labels: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\"],\n            datasets: [\n                {\n                    label: \"Sales Analytics\",\n                    backgroundColor: \"rgba(95, 190, 170, 0.3)\",\n                    borderColor: \"#5fbeaa\",\n                    borderWidth: 1,\n                    hoverBackgroundColor: \"rgba(95, 190, 170, 0.6)\",\n                    hoverBorderColor: \"#5fbeaa\",\n                    data: [65, 59, 80, 81, 56, 55, 40,20]\n                }\n            ]\n        };\n        this.respChart($(\"#bar\"),'Bar',barChart);\n\n\n        //radar chart\n        var radarChart = {\n            labels: [\"Eating\", \"Drinking\", \"Sleeping\", \"Designing\", \"Coding\", \"Cycling\", \"Running\"],\n            datasets: [\n                {\n                    label: \"Desktops\",\n                    backgroundColor: \"rgba(179,181,198,0.2)\",\n                    borderColor: \"rgba(179,181,198,1)\",\n                    pointBackgroundColor: \"rgba(179,181,198,1)\",\n                    pointBorderColor: \"#fff\",\n                    pointHoverBackgroundColor: \"#fff\",\n                    pointHoverBorderColor: \"rgba(179,181,198,1)\",\n                    data: [65, 59, 90, 81, 56, 55, 40]\n                },\n                {\n                    label: \"Tablets\",\n                    backgroundColor: \"rgba(255,99,132,0.2)\",\n                    borderColor: \"rgba(255,99,132,1)\",\n                    pointBackgroundColor: \"rgba(255,99,132,1)\",\n                    pointBorderColor: \"#fff\",\n                    pointHoverBackgroundColor: \"#fff\",\n                    pointHoverBorderColor: \"rgba(255,99,132,1)\",\n                    data: [28, 48, 40, 19, 96, 27, 100]\n                }\n            ]\n        };\n        this.respChart($(\"#radar\"),'Radar',radarChart);\n\n        //Polar area chart\n        var polarChart = {\n            datasets: [{\n                data: [\n                    11,\n                    16,\n                    7,\n                    18\n                ],\n                backgroundColor: [\n                    \"#5fbeaa\",\n                    \"#1a2942\",\n                    \"#5d9cec\",\n                    \"#ebeff2\"\n                ],\n                label: 'My dataset', // for legend\n                hoverBorderColor: \"#fff\"\n            }],\n            labels: [\n                \"Series 1\",\n                \"Series 2\",\n                \"Series 3\",\n                \"Series 4\"\n            ]\n        };\n        this.respChart($(\"#polarArea\"),'PolarArea',polarChart);\n    },\n    $.ChartJs = new ChartJs, $.ChartJs.Constructor = ChartJs\n\n}(window.jQuery),\n\n//initializing\nfunction($) {\n    \"use strict\";\n    $.ChartJs.init()\n}(window.jQuery);\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.charts-sparkline.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Sparkline Chart\n* \n*/\n$( document ).ready(function() {\n    \n    var DrawSparkline = function() {\n        $('#sparkline1').sparkline([0, 23, 43, 35, 44, 45, 56, 37, 40], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 50,\n            lineColor: '#5fbeaa',\n            fillColor: 'rgba(95, 190, 170, 0.3)',\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline1').sparkline([25, 23, 26, 24, 25, 32, 30, 24, 19], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 40,\n            lineColor: '#5d9cec',\n            fillColor: 'rgba(93, 156, 236, 0.3)',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline2').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'bar',\n            height: '165',\n            barWidth: '10',\n            barSpacing: '3',\n            barColor: '#fb6d9d'\n        });\n        \n        $('#sparkline3').sparkline([20, 40, 30, 10], {\n            type: 'pie',\n            width: '165',\n            height: '165',\n            sliceColors: ['#dcdcdc', '#5d9cec', '#36404a', '#5fbeaa']\n        });\n    \n        $('#sparkline4').sparkline([0, 23, 43, 35, 44, 45, 56, 37, 40], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 50,\n            lineColor: '#fb6d9d',\n            fillColor: 'transparent',\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline4').sparkline([25, 23, 26, 24, 25, 32, 30, 24, 19], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 40,\n            lineColor: '#5d9cec',\n            fillColor: 'transparent',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,1)',\n            highlightSpotColor: 'rgba(0,0,0,1)'\n        });\n    \n        $('#sparkline6').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'bar',\n            height: '165',\n            barWidth: '10',\n            barSpacing: '3',\n            barColor: '#5fbeaa'\n        });\n    \n        $('#sparkline6').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            lineColor: '#fb6d9d',\n            fillColor: 'transparent',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n        \n        \n    },\n        DrawMouseSpeed = function () {\n            var mrefreshinterval = 500; // update display every 500ms\n            var lastmousex=-1; \n            var lastmousey=-1;\n            var lastmousetime;\n            var mousetravel = 0;\n            var mpoints = [];\n            var mpoints_max = 30;\n            $('html').mousemove(function(e) {\n                var mousex = e.pageX;\n                var mousey = e.pageY;\n                if (lastmousex > -1) {\n                    mousetravel += Math.max( Math.abs(mousex-lastmousex), Math.abs(mousey-lastmousey) );\n                }\n                lastmousex = mousex;\n                lastmousey = mousey;\n            });\n            var mdraw = function() {\n                var md = new Date();\n                var timenow = md.getTime();\n                if (lastmousetime && lastmousetime!=timenow) {\n                    var pps = Math.round(mousetravel / (timenow - lastmousetime) * 1000);\n                    mpoints.push(pps);\n                    if (mpoints.length > mpoints_max)\n                        mpoints.splice(0,1);\n                    mousetravel = 0;\n                    $('#sparkline5').sparkline(mpoints, {\n                        tooltipSuffix: ' pixels per second',\n                        type: 'line',\n                        width: '100%',\n                        height: '165',\n                        chartRangeMax: 50,\n                        lineColor: '#1e88e5',\n                        fillColor: 'rgba(30, 136, 229, 0.3)',\n                        highlightLineColor: 'rgba(24,147,126,.1)',\n                        highlightSpotColor: 'rgba(24,147,126,.2)',\n                    });\n                }\n                lastmousetime = timenow;\n                setTimeout(mdraw, mrefreshinterval);\n            }\n            // We could use setInterval instead, but I prefer to do it this way\n            setTimeout(mdraw, mrefreshinterval); \n        };\n    \n    DrawSparkline();\n    DrawMouseSpeed();\n    \n    var resizeChart;\n\n    $(window).resize(function(e) {\n        clearTimeout(resizeChart);\n        resizeChart = setTimeout(function() {\n            DrawSparkline();\n            DrawMouseSpeed();\n        }, 300);\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.chat.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Chat application \n*/\n\n!function($) {\n    \"use strict\";\n\n    var ChatApp = function() {\n        this.$body = $(\"body\"),\n        this.$chatInput = $('.chat-input'),\n        this.$chatList = $('.conversation-list'),\n        this.$chatSendBtn = $('.chat-send .btn')\n    };\n\n    //saves chat entry - You should send ajax call to server in order to save chat enrty\n    ChatApp.prototype.save = function() {\n        var chatText = this.$chatInput.val();\n        var chatTime = moment().format(\"h:mm\");\n        if (chatText == \"\") {\n            sweetAlert(\"Oops...\", \"You forgot to enter your chat message\", \"error\");\n            this.$chatInput.focus();\n        } else {\n            $('<li class=\"clearfix\"><div class=\"chat-avatar\"><img src=\"assets/images/users/avatar-3.jpg\" alt=\"male\"><i>' + chatTime + '</i></div><div class=\"conversation-text\"><div class=\"ctext-wrap\"><i>John Deo</i><p>' + chatText + '</p></div></div></li>').appendTo('.conversation-list');\n            this.$chatInput.val('');\n            this.$chatInput.focus();\n            this.$chatList.scrollTo('100%', '100%', {\n                easing: 'swing'\n            });\n        }\n    },\n    ChatApp.prototype.init = function () {\n        var $this = this;\n        //binding keypress event on chat input box - on enter we are adding the chat into chat list - \n        $this.$chatInput.keypress(function (ev) {\n            var p = ev.which;\n            if (p == 13) {\n                $this.save();\n                return false;\n            }\n        });\n\n\n        //binding send button click\n        $this.$chatSendBtn.click(function (ev) {\n           $this.save();\n           return false;\n        });\n    },\n    //init ChatApp\n    $.ChatApp = new ChatApp, $.ChatApp.Constructor = ChatApp\n    \n}(window.jQuery),\n\n//initializing main application module\nfunction($) {\n    \"use strict\";\n    $.ChatApp.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.codemirror.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Code Editors page\n*/\n\n!function($) {\n    \"use strict\";\n\n    var CodeEditor = function() {};\n\n    CodeEditor.prototype.getSelectedRange = function(editor) {\n        return { from: editor.getCursor(true), to: editor.getCursor(false) };\n    },\n    CodeEditor.prototype.autoFormatSelection = function(editor) {\n        var range = this.getSelectedRange(editor);\n        editor.autoFormatRange(range.from, range.to);\n    },\n    CodeEditor.prototype.commentSelection = function(isComment, editor) {\n        var range = this.getSelectedRange(editor);\n        editor.commentRange(isComment, range.from, range.to);\n    },\n    CodeEditor.prototype.init = function() {\n        var $this = this;\n        //init plugin\n        CodeMirror.fromTextArea(document.getElementById(\"code\"), {\n            mode: {name: \"xml\", alignCDATA: true},\n            lineNumbers: true\n        });\n        //example 2\n        CodeMirror.fromTextArea(document.getElementById(\"code2\"), {\n            mode: {name: \"javascript\"},\n            lineNumbers: true,\n            theme: 'ambiance'\n        });\n\n        //example 3\n        var editor = CodeMirror.fromTextArea(document.getElementById(\"code3\"), {\n            mode: {name: \"javascript\"},\n            lineNumbers: true,\n        });\n        CodeMirror.commands[\"selectAll\"](editor);\n\n        //binding controlls\n        $('.autoformat').click(function(){\n            $this.autoFormatSelection(editor);\n        });\n        \n        $('.commentbtn').click(function(){\n            $this.commentSelection(true, editor);\n        });\n        \n        $('.uncomment').click(function(){\n            $this.commentSelection(false, editor);\n        });\n    },\n    //init\n    $.CodeEditor = new CodeEditor, $.CodeEditor.Constructor = CodeEditor\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.CodeEditor.init()\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Morris Chart\n*/\n\n!function($) {\n    \"use strict\";\n\n    var Dashboard1 = function() {\n    \tthis.$realData = []\n    };\n    \n    //creates Stacked chart\n    Dashboard1.prototype.createStackedChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            stacked: true,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n\n    //creates area chart with dotted\n    Dashboard1.prototype.createAreaChartDotted = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 0,\n            lineWidth: 0,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            pointFillColors: Pfillcolor,\n            pointStrokeColors: Pstockcolor,\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n\n   },\n    \n    \n    Dashboard1.prototype.init = function() {\n\n        //creating Stacked chart\n        var $stckedData  = [\n            { y: '2005', a: 45, b: 180, c: 100 },\n            { y: '2006', a: 75,  b: 65, c: 80 },\n            { y: '2007', a: 100, b: 90, c: 56 },\n            { y: '2008', a: 75,  b: 65, c: 89 },\n            { y: '2009', a: 100, b: 90, c: 120 },\n            { y: '2010', a: 75,  b: 65, c: 110 },\n            { y: '2011', a: 50,  b: 40, c: 85 },\n            { y: '2012', a: 75,  b: 65, c: 52 },\n            { y: '2013', a: 50,  b: 40, c: 77 },\n            { y: '2014', a: 75,  b: 65, c: 90 },\n            { y: '2015', a: 100, b: 90, c: 130 }\n        ];\n        this.createStackedChart('morris-bar-stacked', $stckedData, 'y', ['a', 'b', 'c'], ['Desktops', 'Tablets', 'Mobiles'], ['#5fbeaa', '#5d9cec', '#ebeff2']);\n\n        //creating area chart\n        var $areaDotData = [\n                { y: '2009', a: 10, b: 20, c:30 },\n                { y: '2010', a: 75,  b: 65, c:30 },\n                { y: '2011', a: 50,  b: 40, c:30 },\n                { y: '2012', a: 75,  b: 65, c:30 },\n                { y: '2013', a: 50,  b: 40, c:30 },\n                { y: '2014', a: 75,  b: 65, c:30 },\n                { y: '2015', a: 90, b: 60, c:30 }\n            ];\n        this.createAreaChartDotted('morris-area-with-dotted', 0, 0, $areaDotData, 'y', ['a', 'b', 'c'], ['Desktops ', 'Tablets ', 'Mobiles '],['#ffffff'],['#999999'], ['#566676', '#5fbeaa', '#5d9cec']);\n\n    },\n    //init\n    $.Dashboard1 = new Dashboard1, $.Dashboard1.Constructor = Dashboard1\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.Dashboard1.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard_2.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Dashboard 2\n*/\n\n!function($) {\n    \"use strict\";\n\n    var Dashboard2 = function() {\n    \tthis.$realData = []\n    };\n\n    //creates area chart with dotted\n    Dashboard2.prototype.createAreaChartDotted = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 0,\n            lineWidth: 0,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            pointFillColors: Pfillcolor,\n            pointStrokeColors: Pstockcolor,\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n\n   },\n    Dashboard2.prototype.init = function() {\n\n        //creating area chart\n        var $areaDotData = [\n                { y: '2009', a: 10, b: 20, c:30 },\n                { y: '2010', a: 75,  b: 65, c:30 },\n                { y: '2011', a: 50,  b: 40, c:30 },\n                { y: '2012', a: 75,  b: 65, c:30 },\n                { y: '2013', a: 50,  b: 40, c:30 },\n                { y: '2014', a: 75,  b: 65, c:30 },\n                { y: '2015', a: 90, b: 60, c:30 }\n            ];\n        this.createAreaChartDotted('morris-area-with-dotted', 0, 0, $areaDotData, 'y', ['a', 'b', 'c'], ['Desktops ', 'Tablets ', 'Mobiles '],['#ffffff'],['#999999'], ['#36404a', '#5d9cec','#bbbbbb']);\n\n    },\n    //init\n    $.Dashboard2 = new Dashboard2, $.Dashboard2.Constructor = Dashboard2\n}(window.jQuery),\n\n//initializing\nfunction($) {\n    \"use strict\";\n    $.Dashboard2.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard_3.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Widget\n* \n*/\n$( document ).ready(function() {\n    \n    var DrawSparkline = function() {\n        $('#sparkline1').sparkline([0, 23, 43, 35, 44, 45, 56, 37, 40], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 50,\n            lineColor: '#fb6d9d',\n            fillColor: 'transparent',\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n\n        $('#sparkline1').sparkline([25, 23, 26, 24, 25, 32, 30, 24, 19], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 40,\n            lineColor: '#5d9cec',\n            fillColor: 'transparent',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,1)',\n            highlightSpotColor: 'rgba(0,0,0,1)'\n        });\n    \n        $('#sparkline2').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'bar',\n            height: '165',\n            barWidth: '10',\n            barSpacing: '3',\n            barColor: '#fb6d9d'\n        });\n        \n        $('#sparkline3').sparkline([20, 40, 30, 10], {\n            type: 'pie',\n            width: '165',\n            height: '165',\n            sliceColors: ['#dcdcdc', '#5d9cec', '#36404a', '#5fbeaa']\n        });\n    \n\n        \n        \n    };\n\n    \n    DrawSparkline();\n    \n    var resizeChart;\n\n    $(window).resize(function(e) {\n        clearTimeout(resizeChart);\n        resizeChart = setTimeout(function() {\n            DrawSparkline();\n        }, 300);\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard_4.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Dashboard 4\n* \n*/\n\n!function($) {\n    \"use strict\";\n\n    var Dashboard4 = function() {};\n\n\n    //creates area chart\n    Dashboard4.prototype.createAreaChart = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 0,\n            lineWidth: 0,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n    },\n\n    //creates Bar chart\n    Dashboard4.prototype.createBarChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n\n    Dashboard4.prototype.init = function() {\n\n        //creating area chart\n        var $areaData = [\n                { y: '2009', a: 10, b: 20, c:30 },\n                { y: '2010', a: 75, b: 65, c:30 },\n                { y: '2011', a: 50, b: 40, c:30 },\n                { y: '2012', a: 75, b: 65, c:30 },\n                { y: '2013', a: 50, b: 40, c:30 },\n                { y: '2014', a: 75, b: 65, c:30 },\n                { y: '2015', a: 90, b: 60, c:30 }\n            ];\n        this.createAreaChart('morris-area-example', 0, 0, $areaData, 'y', ['a', 'b','c'], ['Mobiles', 'Tablets','Desktops'], ['#4793f5', '#ff3f4e', '#bbbbbb']);\n\n        //creating bar chart\n        var $barData  = [\n            { y: '2009', a: 100, b: 90 , c: 40 },\n            { y: '2010', a: 75,  b: 65 , c: 20 },\n            { y: '2011', a: 50,  b: 40 , c: 50 },\n            { y: '2012', a: 75,  b: 65 , c: 95 },\n            { y: '2013', a: 50,  b: 40 , c: 22 },\n            { y: '2014', a: 75,  b: 65 , c: 56 },\n            { y: '2015', a: 100, b: 90 , c: 60 }\n        ];\n        this.createBarChart('morris-bar-example', $barData, 'y', ['a', 'b', 'c'], ['Series A', 'Series B', 'Series C'], ['#3ac9d6', '#f9c851', '#ebeff2']);\n\n    },\n    //init\n    $.Dashboard4 = new Dashboard4, $.Dashboard4.Constructor = Dashboard4\n}(window.jQuery),\n\n//initializing\nfunction($) {\n    \"use strict\";\n    $.Dashboard4.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard_crm.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Morris Chart\n*/\n\n!function($) {\n    \"use strict\";\n\n    var DashboardCRM = function() {\n    \tthis.$realData = []\n    };\n    \n     //creates line chart\n    DashboardCRM.prototype.createLineChart = function(element, data, xkey, ykeys, labels, opacity, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Line({\n          element: element,\n          data: data,\n          xkey: xkey,\n          ykeys: ykeys,\n          labels: labels,\n          fillOpacity: opacity,\n          pointFillColors: Pfillcolor,\n          pointStrokeColors: Pstockcolor,\n          behaveLikeLine: true,\n          gridLineColor: '#eef0f2',\n          hideHover: 'auto',\n          resize: true, //defaulted to true\n          lineColors: lineColors\n        });\n    },\n    \n    //creates Bar chart\n    DashboardCRM.prototype.createBarChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n    \n    //creates Donut chart\n    DashboardCRM.prototype.createDonutChart = function(element, data, colors) {\n        Morris.Donut({\n            element: element,\n            data: data,\n            resize: true, //defaulted to true\n            colors: colors\n        });\n    },\n    \n    DashboardCRM.prototype.init = function() {\n\n        //create line chart\n        var $data  = [\n            {y: '2007', a: 0, b: 0, c:0},\n            {y: '2008', a: 150, b: 45, c:15},\n            {y: '2009', a: 60, b: 150, c:195},\n            {y: '2010', a: 180, b: 36, c:21},\n            {y: '2011', a: 90, b: 60, c:360},\n            {y: '2012', a: 75, b: 240, c:120},\n            {y: '2013', a: 30, b: 30, c:30}\n          ];\n        this.createLineChart('morris-line-chart', $data, 'y', ['a', 'b', 'c'], ['Deal-Won ', 'Deal-Lost', 'Deal-Pending'],['0.1'],['#ffffff'],['#999999'], ['#2bbbad','#ef4554','#ff8800']);\n        \n        //creating bar chart\n        var $barData  = [\n            { y: '2009', a: 100, b: 90 },\n            { y: '2010', a: 75,  b: 65 },\n            { y: '2011', a: 50,  b: 40 },\n            { y: '2012', a: 75,  b: 65 },\n            { y: '2013', a: 50,  b: 40 },\n            { y: '2014', a: 75,  b: 65 },\n            { y: '2015', a: 100, b: 90}\n        ];\n        this.createBarChart('morris-bar-chart', $barData, 'y', ['a', 'b'], ['Won Deals ', 'Lost Deals '], ['#2bbbad', '#4285f4']);\n        \n        //creating donut chart\n        var $donutData = [\n                {label: \"Group 1\", value: 12},\n                {label: \"Group 2\", value: 30},\n                {label: \"Group 3\", value: 20}\n            ];\n        this.createDonutChart('morris-donut-example', $donutData, ['#ebeff2', '#2bbbad', '#4285f4']);\n\n    },\n    //init\n    $.DashboardCRM = new DashboardCRM, $.DashboardCRM.Constructor = DashboardCRM\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.DashboardCRM.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.dashboard_ecommerce.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Dashboard 2\n*/\n\n!function($) {\n    \"use strict\";\n\n    var Dashboard2 = function() {\n    \tthis.$realData = []\n    };\n    \n     //creates area chart with dotted\n    Dashboard2.prototype.createAreaChartDotted = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 0,\n            lineWidth: 0,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            pointFillColors: Pfillcolor,\n            pointStrokeColors: Pstockcolor,\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n\n   },\n    Dashboard2.prototype.init = function() {\n\n         //creating area chart\n        var $areaDotData = [\n                { y: '2009', a: 10, b: 20, c:30 },\n                { y: '2010', a: 75,  b: 65, c:30 },\n                { y: '2011', a: 50,  b: 40, c:30 },\n                { y: '2012', a: 75,  b: 65, c:30 },\n                { y: '2013', a: 50,  b: 40, c:30 },\n                { y: '2014', a: 75,  b: 65, c:30 },\n                { y: '2015', a: 90, b: 60, c:30 }\n            ];\n        this.createAreaChartDotted('morris-area-with-dotted', 0, 0, $areaDotData, 'y', ['a', 'b', 'c'], ['Desktops ', 'Tablets ', 'Mobiles '],['#ffffff'],['#999999'], ['#36404a', '#5d9cec','#bbbbbb']);\n\n    },\n    //init\n    $.Dashboard2 = new Dashboard2, $.Dashboard2.Constructor = Dashboard2\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.Dashboard2.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.filer.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n * Email: coderthemes@gmail.com\n* File Uploads\n*/\n\n$(document).ready(function(){\n\n    //Example 2\n    $('#filer_input2').filer({\n        limit: 3,\n        maxSize: 3,\n        extensions: ['jpg', 'jpeg', 'png', 'gif', 'psd'],\n        changeInput: true,\n        showThumbs: true,\n        addMore: true\n    });\n\n\t//Example 1\n    $(\"#filer_input1\").filer({\n        limit: null,\n        maxSize: null,\n        extensions: null,\n        changeInput: '<div class=\"jFiler-input-dragDrop\"><div class=\"jFiler-input-inner\"><div class=\"jFiler-input-icon\"><i class=\"icon-jfi-cloud-up-o\"></i></div><div class=\"jFiler-input-text\"><h3>Drag & Drop files here</h3> <span style=\"display:inline-block; margin: 15px 0\">or</span></div><a class=\"jFiler-input-choose-btn btn btn-default waves-effect waves-light\">Browse Files</a></div></div>',\n        showThumbs: true,\n        theme: \"dragdropbox\",\n        templates: {\n            box: '<ul class=\"jFiler-items-list jFiler-items-grid\"></ul>',\n            item: '<li class=\"jFiler-item\">\\\n                        <div class=\"jFiler-item-container\">\\\n                            <div class=\"jFiler-item-inner\">\\\n                                <div class=\"jFiler-item-thumb\">\\\n                                    <div class=\"jFiler-item-status\"></div>\\\n                                    <div class=\"jFiler-item-info\">\\\n                                        <span class=\"jFiler-item-title\"><b title=\"{{fi-name}}\">{{fi-name | limitTo: 25}}</b></span>\\\n                                        <span class=\"jFiler-item-others\">{{fi-size2}}</span>\\\n                                    </div>\\\n                                    {{fi-image}}\\\n                                </div>\\\n                                <div class=\"jFiler-item-assets jFiler-row\">\\\n                                    <ul class=\"list-inline pull-left\">\\\n                                        <li>{{fi-progressBar}}</li>\\\n                                    </ul>\\\n                                    <ul class=\"list-inline pull-right\">\\\n                                        <li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li>\\\n                                    </ul>\\\n                                </div>\\\n                            </div>\\\n                        </div>\\\n                    </li>',\n            itemAppend: '<li class=\"jFiler-item\">\\\n                            <div class=\"jFiler-item-container\">\\\n                                <div class=\"jFiler-item-inner\">\\\n                                    <div class=\"jFiler-item-thumb\">\\\n                                        <div class=\"jFiler-item-status\"></div>\\\n                                        <div class=\"jFiler-item-info\">\\\n                                            <span class=\"jFiler-item-title\"><b title=\"{{fi-name}}\">{{fi-name | limitTo: 25}}</b></span>\\\n                                            <span class=\"jFiler-item-others\">{{fi-size2}}</span>\\\n                                        </div>\\\n                                        {{fi-image}}\\\n                                    </div>\\\n                                    <div class=\"jFiler-item-assets jFiler-row\">\\\n                                        <ul class=\"list-inline pull-left\">\\\n                                            <li><span class=\"jFiler-item-others\">{{fi-icon}}</span></li>\\\n                                        </ul>\\\n                                        <ul class=\"list-inline pull-right\">\\\n                                            <li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li>\\\n                                        </ul>\\\n                                    </div>\\\n                                </div>\\\n                            </div>\\\n                        </li>',\n            progressBar: '<div class=\"bar\"></div>',\n            itemAppendToEnd: false,\n            removeConfirmation: true,\n            _selectors: {\n                list: '.jFiler-items-list',\n                item: '.jFiler-item',\n                progressBar: '.bar',\n                remove: '.jFiler-item-trash-action'\n            }\n        },\n        dragDrop: {\n            dragEnter: null,\n            dragLeave: null,\n            drop: null,\n        },\n        uploadFile: {\n            url: \"assets/plugins/jquery.filer/php/upload.php\",\n            data: null,\n            type: 'POST',\n            enctype: 'multipart/form-data',\n            beforeSend: function(){},\n            success: function(data, el){\n                var parent = el.find(\".jFiler-jProgressBar\").parent();\n                el.find(\".jFiler-jProgressBar\").fadeOut(\"slow\", function(){\n                    $(\"<div class=\\\"jFiler-item-others text-success\\\"><i class=\\\"icon-jfi-check-circle\\\"></i> Success</div>\").hide().appendTo(parent).fadeIn(\"slow\");\n                });\n            },\n            error: function(el){\n                var parent = el.find(\".jFiler-jProgressBar\").parent();\n                el.find(\".jFiler-jProgressBar\").fadeOut(\"slow\", function(){\n                    $(\"<div class=\\\"jFiler-item-others text-error\\\"><i class=\\\"icon-jfi-minus-circle\\\"></i> Error</div>\").hide().appendTo(parent).fadeIn(\"slow\");\n                });\n            },\n            statusCode: null,\n            onProgress: null,\n            onComplete: null\n        },\n\t\tfiles: [\n\t\t\t{\n\t\t\t\tname: \"1.jpg\",\n\t\t\t\tsize: 145,\n\t\t\t\ttype: \"image/jpg\",\n\t\t\t\tfile: \"assets/images/small/img1.jpg\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"2.jpg\",\n\t\t\t\tsize: 145,\n\t\t\t\ttype: \"image/jpg\",\n\t\t\t\tfile: \"assets/images/small/img2.jpg\"\n\t\t\t}\n\t\t],\n        addMore: false,\n        clipBoardPaste: true,\n        excludeName: null,\n        beforeRender: null,\n        afterRender: null,\n        beforeShow: null,\n        beforeSelect: null,\n        onSelect: null,\n        afterShow: null,\n        onRemove: function(itemEl, file, id, listEl, boxEl, newInputEl, inputEl){\n            var file = file.name;\n            $.post('../plugins/jquery.filer/php/remove_file.php', {file: file});\n        },\n        onEmpty: null,\n        options: null,\n        captions: {\n            button: \"Choose Files\",\n            feedback: \"Choose files To Upload\",\n            feedback2: \"files were chosen\",\n            drop: \"Drop file here to Upload\",\n            removeConfirmation: \"Are you sure you want to remove this file?\",\n            errors: {\n                filesLimit: \"Only {{fi-limit}} files are allowed to be uploaded.\",\n                filesType: \"Only Images are allowed to be uploaded.\",\n                filesSize: \"{{fi-name}} is too large! Please upload file up to {{fi-maxSize}} MB.\",\n                filesSizeAll: \"Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB.\"\n            }\n        }\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.flot.init.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * Module/App: Flot-Chart\n */\n\n! function($) {\n\t\"use strict\";\n\n\tvar FlotChart = function() {\n\t\tthis.$body = $(\"body\")\n\t\tthis.$realData = []\n\t};\n\n\t//creates plot graph\n\tFlotChart.prototype.createPlotGraph = function(selector, data1, data2, labels, colors, borderColor, bgColor) {\n\t\t//shows tooltip\n\t\tfunction showTooltip(x, y, contents) {\n\t\t\t$('<div id=\"tooltip\" class=\"tooltipflot\">' + contents + '</div>').css({\n\t\t\t\tposition : 'absolute',\n\t\t\t\ttop : y + 5,\n\t\t\t\tleft : x + 5\n\t\t\t}).appendTo(\"body\").fadeIn(200);\n\t\t}\n\n\n\t\t$.plot($(selector), [{\n\t\t\tdata : data1,\n\t\t\tlabel : labels[0],\n\t\t\tcolor : colors[0]\n\t\t}, {\n\t\t\tdata : data2,\n\t\t\tlabel : labels[1],\n\t\t\tcolor : colors[1]\n\t\t}], {\n\t\t\tseries : {\n\t\t\t\tlines : {\n\t\t\t\t\tshow : true,\n\t\t\t\t\tfill : true,\n\t\t\t\t\tlineWidth : 1,\n\t\t\t\t\tfillColor : {\n\t\t\t\t\t\tcolors : [{\n\t\t\t\t\t\t\topacity : 0.5\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\topacity : 0.5\n\t\t\t\t\t\t}]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpoints : {\n\t\t\t\t\tshow : true\n\t\t\t\t},\n\t\t\t\tshadowSize : 0\n\t\t\t},\n\n\t\t\tgrid : {\n\t\t\t\thoverable : true,\n\t\t\t\tclickable : true,\n\t\t\t\tborderColor : borderColor,\n\t\t\t\ttickColor : \"#f9f9f9\",\n\t\t\t\tborderWidth : 1,\n\t\t\t\tlabelMargin : 10,\n\t\t\t\tbackgroundColor : bgColor\n\t\t\t},\n\t\t\tlegend : {\n\t\t\t\tposition : \"ne\",\n\t\t\t\tmargin : [0, -24],\n\t\t\t\tnoColumns : 0,\n\t\t\t\tlabelBoxBorderColor : null,\n\t\t\t\tlabelFormatter : function(label, series) {\n\t\t\t\t\t// just add some space to labes\n\t\t\t\t\treturn '' + label + '&nbsp;&nbsp;';\n\t\t\t\t},\n\t\t\t\twidth : 30,\n\t\t\t\theight : 2\n\t\t\t},\n\t\t\tyaxis : {\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis : {\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t},\n\t\t\ttooltip : true,\n\t\t\ttooltipOpts : {\n\t\t\t\tcontent : '%s: Value of %x is %y',\n\t\t\t\tshifts : {\n\t\t\t\t\tx : -60,\n\t\t\t\t\ty : 25\n\t\t\t\t},\n\t\t\t\tdefaultTheme : false\n\t\t\t}\n\t\t});\n\t},\n\t//end plot graph\n\n\t//creates Pie Chart\n\tFlotChart.prototype.createPieGraph = function(selector, labels, datas, colors) {\n\t\tvar data = [{\n\t\t\tlabel : labels[0],\n\t\t\tdata : datas[0]\n\t\t}, {\n\t\t\tlabel : labels[1],\n\t\t\tdata : datas[1]\n\t\t}, {\n\t\t\tlabel : labels[2],\n\t\t\tdata : datas[2]\n\t\t}];\n\t\tvar options = {\n\t\t\tseries : {\n\t\t\t\tpie : {\n\t\t\t\t\tshow : true\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend : {\n\t\t\t\tshow : false\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\thoverable : true,\n\t\t\t\tclickable : true\n\t\t\t},\n\t\t\tcolors : colors,\n\t\t\ttooltip : true,\n\t\t\ttooltipOpts : {\n\t\t\t\tcontent : \"%s, %p.0%\"\n\t\t\t}\n\t\t};\n\n\t\t$.plot($(selector), data, options);\n\t},\n\n\t//returns some random data\n\tFlotChart.prototype.randomData = function() {\n\t\tvar totalPoints = 300;\n\t\tif (this.$realData.length > 0)\n\t\t\tthis.$realData = this.$realData.slice(1);\n\n\t\t// Do a random walk\n\t\twhile (this.$realData.length < totalPoints) {\n\n\t\t\tvar prev = this.$realData.length > 0 ? this.$realData[this.$realData.length - 1] : 50,\n\t\t\t    y = prev + Math.random() * 10 - 5;\n\n\t\t\tif (y < 0) {\n\t\t\t\ty = 0;\n\t\t\t} else if (y > 100) {\n\t\t\t\ty = 100;\n\t\t\t}\n\n\t\t\tthis.$realData.push(y);\n\t\t}\n\n\t\t// Zip the generated y values with the x values\n\t\tvar res = [];\n\t\tfor (var i = 0; i < this.$realData.length; ++i) {\n\t\t\tres.push([i, this.$realData[i]])\n\t\t}\n\n\t\treturn res;\n\t}, FlotChart.prototype.createRealTimeGraph = function(selector, data, colors) {\n\t\tvar plot = $.plot(selector, [data], {\n\t\t\tcolors : colors,\n\t\t\tseries : {\n\t\t\t\tgrow : {\n\t\t\t\t\tactive : false\n\t\t\t\t}, //disable auto grow\n\t\t\t\tshadowSize : 0, // drawing is faster without shadows\n\t\t\t\tlines : {\n\t\t\t\t\tshow : true,\n\t\t\t\t\tfill : true,\n\t\t\t\t\tlineWidth : 2,\n\t\t\t\t\tsteps : false\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\tshow : true,\n\t\t\t\taboveData : false,\n\t\t\t\tcolor : '#dcdcdc',\n\t\t\t\tlabelMargin : 15,\n\t\t\t\taxisMargin : 0,\n\t\t\t\tborderWidth : 0,\n\t\t\t\tborderColor : null,\n\t\t\t\tminBorderMargin : 5,\n\t\t\t\tclickable : true,\n\t\t\t\thoverable : true,\n\t\t\t\tautoHighlight : false,\n\t\t\t\tmouseActiveRadius : 20\n\t\t\t},\n\t\t\ttooltip : true, //activate tooltip\n\t\t\ttooltipOpts : {\n\t\t\t\tcontent : \"Value is : %y.0\" + \"%\",\n\t\t\t\tshifts : {\n\t\t\t\t\tx : -30,\n\t\t\t\t\ty : -50\n\t\t\t\t}\n\t\t\t},\n\t\t\tyaxis : {\n\t\t\t\tmin : 0,\n\t\t\t\tmax : 100,\n\t\t\t\tcolor : 'rgba(0,0,0,0.1)'\n\t\t\t},\n\t\t\txaxis : {\n\t\t\t\tshow : false\n\t\t\t}\n\t\t});\n\n\t\treturn plot;\n\t},\n\t//creates Pie Chart\n\tFlotChart.prototype.createDonutGraph = function(selector, labels, datas, colors) {\n\t\tvar data = [{\n\t\t\tlabel : labels[0],\n\t\t\tdata : datas[0]\n\t\t}, {\n\t\t\tlabel : labels[1],\n\t\t\tdata : datas[1]\n\t\t}, {\n\t\t\tlabel : labels[2],\n\t\t\tdata : datas[2]\n\t\t}, {\n\t\t\tlabel : labels[3],\n\t\t\tdata : datas[3]\n\t\t}];\n\t\tvar options = {\n\t\t\tseries : {\n\t\t\t\tpie : {\n\t\t\t\t\tshow : true,\n\t\t\t\t\tinnerRadius : 0.5\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend : {\n\t\t\t\tshow : true,\n\t\t\t\tlabelFormatter : function(label, series) {\n\t\t\t\t\treturn '<div style=\"font-size:14px;\">&nbsp;' + label + '</div>'\n\t\t\t\t},\n\t\t\t\tlabelBoxBorderColor : null,\n\t\t\t\tmargin : 50,\n\t\t\t\twidth : 20,\n\t\t\t\tpadding : 1\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\thoverable : true,\n\t\t\t\tclickable : true\n\t\t\t},\n\t\t\tcolors : colors,\n\t\t\ttooltip : true,\n\t\t\ttooltipOpts : {\n\t\t\t\tcontent : \"%s, %p.0%\"\n\t\t\t}\n\t\t};\n\n\t\t$.plot($(selector), data, options);\n\t},\n\t//creates Combine Chart\n\tFlotChart.prototype.createCombineGraph = function(selector, ticks, labels, datas) {\n\n\t\tvar data = [{\n\t\t\tlabel : labels[0],\n\t\t\tdata : datas[0],\n\t\t\tlines : {\n\t\t\t\tshow : true,\n\t\t\t\tfill : true\n\t\t\t},\n\t\t\tpoints : {\n\t\t\t\tshow : true\n\t\t\t}\n\t\t}, {\n\t\t\tlabel : labels[1],\n\t\t\tdata : datas[1],\n\t\t\tlines : {\n\t\t\t\tshow : true\n\t\t\t},\n\t\t\tpoints : {\n\t\t\t\tshow : true\n\t\t\t}\n\t\t}, {\n\t\t\tlabel : labels[2],\n\t\t\tdata : datas[2],\n\t\t\tbars : {\n\t\t\t\tshow : true\n\t\t\t}\n\t\t}];\n\t\tvar options = {\n\t\t\tseries : {\n\t\t\t\tshadowSize : 0\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\thoverable : true,\n\t\t\t\tclickable : true,\n\t\t\t\ttickColor : \"#f9f9f9\",\n\t\t\t\tborderWidth : 1,\n\t\t\t\tborderColor : \"#eeeeee\"\n\t\t\t},\n\t\t\tcolors : [\"#6e8cd7\", \"#34d3eb\", \"#5fbeaa\"],\n\t\t\ttooltip : true,\n\t\t\ttooltipOpts : {\n\t\t\t\tdefaultTheme : false\n\t\t\t},\n\t\t\tlegend : {\n\t\t\t\tposition : \"ne\",\n\t\t\t\tmargin : [0, -24],\n\t\t\t\tnoColumns : 0,\n\t\t\t\tlabelBoxBorderColor : null,\n\t\t\t\tlabelFormatter : function(label, series) {\n\t\t\t\t\t// just add some space to labes\n\t\t\t\t\treturn '' + label + '&nbsp;&nbsp;';\n\t\t\t\t},\n\t\t\t\twidth : 30,\n\t\t\t\theight : 2\n\t\t\t},\n\t\t\tyaxis : {\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis : {\n\t\t\t\tticks: ticks,\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t$.plot($(selector), data, options);\n\t},\n\n\t//initializing various charts and components\n\tFlotChart.prototype.init = function() {\n\t\t//plot graph data\n\t\tvar uploads = [[0, 9], [1, 8], [2, 5], [3, 8], [4, 5], [5, 14], [6, 10]];\n\t\tvar downloads = [[0, 5], [1, 12], [2, 4], [3, 3], [4, 12], [5, 11], [6, 14]];\n\t\tvar plabels = [\"Visits\", \"Pages/Visit\"];\n\t\tvar pcolors = ['#5fbeaa', '#34d3eb'];\n\t\tvar borderColor = '#f5f5f5';\n\t\tvar bgColor = '#fff';\n\t\tthis.createPlotGraph(\"#website-stats\", uploads, downloads, plabels, pcolors, borderColor, bgColor);\n\n\t\t//Pie graph data\n\t\tvar pielabels = [\"Series 1\", \"Series 2\", \"Series 3\"];\n\t\tvar datas = [20, 30, 15];\n\t\tvar colors = [\"#5fbeaa\", \"#6c85bd\", \"#34d3eb\"];\n\t\tthis.createPieGraph(\"#pie-chart #pie-chart-container\", pielabels, datas, colors);\n\n\t\t//real time data representation\n\t\tvar plot = this.createRealTimeGraph('#flotRealTime', this.randomData(), ['#5fbeaa']);\n\t\tplot.draw();\n\t\tvar $this = this;\n\t\tfunction updatePlot() {\n\t\t\tplot.setData([$this.randomData()]);\n\t\t\t// Since the axes don't change, we don't need to call plot.setupGrid()\n\t\t\tplot.draw();\n\t\t\tsetTimeout(updatePlot, $('html').hasClass('mobile-device') ? 1000 : 1000);\n\t\t}\n\n\t\tupdatePlot();\n\n\t\t//Donut pie graph data\n\t\tvar donutlabels = [\"Series 1\", \"Series 2\", \"Series 3\", \"Series 4\"];\n\t\tvar donutdatas = [35, 20, 10, 20];\n\t\tvar donutcolors = [\"#5fbeaa\", \"#ebeff2\", \"#34d3eb\", \"#6e8cd7\"];\n\t\tthis.createDonutGraph(\"#donut-chart #donut-chart-container\", donutlabels, donutdatas, donutcolors);\n\n\t\t//Combine graph data\n\t\tvar data24Hours = [[0, 201], [1, 520], [2, 337], [3, 261], [4, 157], [5, 95], [6, 200], [7, 250], [8, 320], [9, 500], [10, 152], [11, 214], [12, 364], [13, 449], [14, 558], [15, 282], [16, 379], [17, 429], [18, 518], [19, 470], [20, 330], [21, 245], [22, 358], [23, 74]];\n\t\tvar data48Hours = [[0, 311], [1, 630], [2, 447], [3, 371], [4, 267], [5, 205], [6, 310], [7, 360], [8, 430], [9, 610], [10, 262], [11, 324], [12, 474], [13, 559], [14, 668], [15, 392], [16, 489], [17, 539], [18, 628], [19, 580], [20, 440], [21, 355], [22, 468], [23, 184]];\n\t\tvar dataDifference = [[23, 727], [22, 128], [21, 110], [20, 92], [19, 172], [18, 63], [17, 150], [16, 592], [15, 12], [14, 246], [13, 52], [12, 149], [11, 123], [10, 2], [9, 325], [8, 10], [7, 15], [6, 89], [5, 65], [4, 77], [3, 600], [2, 200], [1, 385], [0, 200]];\n\t\tvar ticks = [[0, \"22h\"], [1, \"\"], [2, \"00h\"], [3, \"\"], [4, \"02h\"], [5, \"\"], [6, \"04h\"], [7, \"\"], [8, \"06h\"], [9, \"\"], [10, \"08h\"], [11, \"\"], [12, \"10h\"], [13, \"\"], [14, \"12h\"], [15, \"\"], [16, \"14h\"], [17, \"\"], [18, \"16h\"], [19, \"\"], [20, \"18h\"], [21, \"\"], [22, \"20h\"], [23, \"\"]];\n\t\tvar combinelabels = [\"Last 24 Hours\", \"Last 48 Hours\", \"Difference\"];\n\t\tvar combinedatas = [data24Hours, data48Hours, dataDifference];\n\n\t\tthis.createCombineGraph(\"#combine-chart #combine-chart-container\", ticks, combinelabels, combinedatas);\n\t},\n\n\t//init flotchart\n\t$.FlotChart = new FlotChart, $.FlotChart.Constructor =\n\tFlotChart\n\n}(window.jQuery),\n\n//initializing flotchart\nfunction($) {\n\t\"use strict\";\n\t$.FlotChart.init()\n}(window.jQuery);\n\n$(document).ready(function() {\n\n\t\n\n\t//------------- Ordered bars chart -------------//\n\t$(function() {\n\t\t//some data\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i <= 10; i += 1)\n\t\t\td1.push([i, parseInt(Math.random() * 30)]);\n\n\t\tvar d2 = [];\n\t\tfor (var i = 0; i <= 10; i += 1)\n\t\t\td2.push([i, parseInt(Math.random() * 30)]);\n\n\t\tvar d3 = [];\n\t\tfor (var i = 0; i <= 10; i += 1)\n\t\t\td3.push([i, parseInt(Math.random() * 30)]);\n\n\t\tvar ds = new Array();\n\n\t\tds.push({\n\t\t\tlabel : \"Data One\",\n\t\t\tdata : d1,\n\t\t\tbars : {\n\t\t\t\torder : 1\n\t\t\t}\n\t\t});\n\t\tds.push({\n\t\t\tlabel : \"Data Two\",\n\t\t\tdata : d2,\n\t\t\tbars : {\n\t\t\t\torder : 2\n\t\t\t}\n\t\t});\n\t\tds.push({\n\t\t\tlabel : \"Data Three\",\n\t\t\tdata : d3,\n\t\t\tbars : {\n\t\t\t\torder : 3\n\t\t\t}\n\t\t});\n\n\t\tvar stack = 0,\n\t\t    bars = false,\n\t\t    lines = false,\n\t\t    steps = false;\n\n\t\tvar options = {\n\t\t\tbars : {\n\t\t\t\tshow : true,\n\t\t\t\tbarWidth : 0.2,\n\t\t\t\tfill : 1\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\tshow : true,\n\t\t\t\taboveData : false,\n\t\t\t\tlabelMargin : 5,\n\t\t\t\taxisMargin : 0,\n\t\t\t\tborderWidth : 1,\n\t\t\t\tminBorderMargin : 5,\n\t\t\t\tclickable : true,\n\t\t\t\thoverable : true,\n\t\t\t\tautoHighlight : false,\n\t\t\t\tmouseActiveRadius : 20,\n\t\t\t\tborderColor : '#f5f5f5'\n\t\t\t},\n\t\t\tseries : {\n\t\t\t\tstack : stack\n\t\t\t},\n\t\t\tlegend : {\n\t\t\t\tposition : \"ne\",\n\t\t\t\tmargin : [0, -24],\n\t\t\t\tnoColumns : 0,\n\t\t\t\tlabelBoxBorderColor : null,\n\t\t\t\tlabelFormatter : function(label, series) {\n\t\t\t\t\t// just add some space to labes\n\t\t\t\t\treturn '' + label + '&nbsp;&nbsp;';\n\t\t\t\t},\n\t\t\t\twidth : 30,\n\t\t\t\theight : 2\n\t\t\t},\n\t\t\tyaxis : {\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis : {\n\t\t\t\ttickColor : '#f5f5f5',\n\t\t\t\tfont : {\n\t\t\t\t\tcolor : '#bdbdbd'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcolors : [\"#6e8cd7\", \"#34d3eb\", \"#5fbeaa\"],\n\t\t\ttooltip : true, //activate tooltip\n\t\t\ttooltipOpts : {\n\t\t\t\tcontent : \"%s : %y.0\",\n\t\t\t\tshifts : {\n\t\t\t\t\tx : -30,\n\t\t\t\t\ty : -50\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t$.plot($(\"#ordered-bars-chart\"), ds, options);\n\t});\n});\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.footable.js",
    "content": "/**\n* Theme: Ubold Dashboard\n* Author: Coderthemes\n* Foo table\n*/\n\n$(window).on('load', function() {\n\n\t// Row Toggler\n\t// -----------------------------------------------------------------\n\t$('#demo-foo-row-toggler').footable();\n\n\t// Accordion\n\t// -----------------------------------------------------------------\n\t$('#demo-foo-accordion').footable().on('footable_row_expanded', function(e) {\n\t\t$('#demo-foo-accordion tbody tr.footable-detail-show').not(e.row).each(function() {\n\t\t\t$('#demo-foo-accordion').data('footable').toggleDetail(this);\n\t\t});\n\t});\n\n\t// Pagination\n\t// -----------------------------------------------------------------\n\t$('#demo-foo-pagination').footable();\n\t$('#demo-show-entries').change(function (e) {\n\t\te.preventDefault();\n\t\tvar pageSize = $(this).val();\n\t\t$('#demo-foo-pagination').data('page-size', pageSize);\n\t\t$('#demo-foo-pagination').trigger('footable_initialized');\n\t});\n\n\t// Filtering\n\t// -----------------------------------------------------------------\n\tvar filtering = $('#demo-foo-filtering');\n\tfiltering.footable().on('footable_filtering', function (e) {\n\t\tvar selected = $('#demo-foo-filter-status').find(':selected').val();\n\t\te.filter += (e.filter && e.filter.length > 0) ? ' ' + selected : selected;\n\t\te.clear = !e.filter;\n\t});\n\n\t// Filter status\n\t$('#demo-foo-filter-status').change(function (e) {\n\t\te.preventDefault();\n\t\tfiltering.trigger('footable_filter', {filter: $(this).val()});\n\t});\n\n\t// Search input\n\t$('#demo-foo-search').on('input', function (e) {\n\t\te.preventDefault();\n\t\tfiltering.trigger('footable_filter', {filter: $(this).val()});\n\t});\n\n\n\t// Add & Remove Row\n\t// -----------------------------------------------------------------\n\tvar addrow = $('#demo-foo-addrow');\n\taddrow.footable().on('click', '.demo-delete-row', function() {\n\n\t\t//get the footable object\n\t\tvar footable = addrow.data('footable');\n\n\t\t//get the row we are wanting to delete\n\t\tvar row = $(this).parents('tr:first');\n\n\t\t//delete the row\n\t\tfootable.removeRow(row);\n\t});\n\n\t// Search input\n\t$('#demo-input-search2').on('input', function (e) {\n\t\te.preventDefault();\n\t\taddrow.trigger('footable_filter', {filter: $(this).val()});\n\t});\n\n\t// Add Row Button\n\t$('#demo-btn-addrow').click(function() {\n\n\t\t//get the footable object\n\t\tvar footable = addrow.data('footable');\n\n\t\t//build up the row we are wanting to add\n\t\tvar newRow = '<tr><td style=\"text-align: center;\"><button class=\"demo-delete-row btn btn-danger btn-xs btn-icon fa fa-times\"></button></td><td>Adam</td><td>Doe</td><td>Traffic Court Referee</td><td>22 Jun 1972</td><td><span class=\"label label-table label-success\">Active</span></td></tr>';\n\n\t\t//add it\n\t\tfootable.appendRow(newRow);\n\t});\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.form-advanced.init.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * Form Advanced\n */\n\n\njQuery(document).ready(function () {\n\n    //advance multiselect start\n    $('#my_multi_select3').multiSelect({\n        selectableHeader: \"<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>\",\n        selectionHeader: \"<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>\",\n        afterInit: function (ms) {\n            var that = this,\n                $selectableSearch = that.$selectableUl.prev(),\n                $selectionSearch = that.$selectionUl.prev(),\n                selectableSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selectable:not(.ms-selected)',\n                selectionSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selection.ms-selected';\n\n            that.qs1 = $selectableSearch.quicksearch(selectableSearchString)\n                .on('keydown', function (e) {\n                    if (e.which === 40) {\n                        that.$selectableUl.focus();\n                        return false;\n                    }\n                });\n\n            that.qs2 = $selectionSearch.quicksearch(selectionSearchString)\n                .on('keydown', function (e) {\n                    if (e.which == 40) {\n                        that.$selectionUl.focus();\n                        return false;\n                    }\n                });\n        },\n        afterSelect: function () {\n            this.qs1.cache();\n            this.qs2.cache();\n        },\n        afterDeselect: function () {\n            this.qs1.cache();\n            this.qs2.cache();\n        }\n    });\n\n    // Select2\n    $(\".select2\").select2();\n\n    $(\".select2-limiting\").select2({\n        maximumSelectionLength: 2\n    });\n\n    $('.selectpicker').selectpicker();\n    $(\":file\").filestyle({input: false});\n});\n\n//Bootstrap-TouchSpin\n$(\".vertical-spin\").TouchSpin({\n    verticalbuttons: true,\n    verticalupclass: 'ion-plus-round',\n    verticaldownclass: 'ion-minus-round'\n});\n\n$(\"input[name='demo1']\").TouchSpin({\n    min: 0,\n    max: 100,\n    step: 0.1,\n    decimals: 2,\n    boostat: 5,\n    maxboostedstep: 10,\n    postfix: '%'\n});\n$(\"input[name='demo2']\").TouchSpin({\n    min: -1000000000,\n    max: 1000000000,\n    stepinterval: 50,\n    maxboostedstep: 10000000,\n    prefix: '$'\n});\n$(\"input[name='demo3']\").TouchSpin();\n$(\"input[name='demo3_21']\").TouchSpin({\n    initval: 40\n});\n$(\"input[name='demo3_22']\").TouchSpin({\n    initval: 40\n});\n\n$(\"input[name='demo5']\").TouchSpin({\n    prefix: \"pre\",\n    postfix: \"post\"\n});\n$(\"input[name='demo0']\").TouchSpin({});\n\n\n//Bootstrap-MaxLength\n$('input#defaultconfig').maxlength()\n\n$('input#thresholdconfig').maxlength({\n    threshold: 20\n});\n\n$('input#moreoptions').maxlength({\n    alwaysShow: true,\n    warningClass: \"label label-success\",\n    limitReachedClass: \"label label-danger\"\n});\n\n$('input#alloptions').maxlength({\n    alwaysShow: true,\n    warningClass: \"label label-success\",\n    limitReachedClass: \"label label-danger\",\n    separator: ' out of ',\n    preText: 'You typed ',\n    postText: ' chars available.',\n    validate: true\n});\n\n$('textarea#textarea').maxlength({\n    alwaysShow: true\n});\n\n$('input#placement').maxlength({\n    alwaysShow: true,\n    placement: 'top-left'\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.form-pickers.init.js",
    "content": "jQuery(document).ready(function() {\n\n\t\t\t\t// Time Picker\n\t\t\t\tjQuery('#timepicker').timepicker({\n\t\t\t\t\tdefaultTIme : false\n\t\t\t\t});\n\t\t\t\tjQuery('#timepicker2').timepicker({\n\t\t\t\t\tshowMeridian : false\n\t\t\t\t});\n\t\t\t\tjQuery('#timepicker3').timepicker({\n\t\t\t\t\tminuteStep : 15\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t//colorpicker start\n\n                $('.colorpicker-default').colorpicker({\n                    format: 'hex'\n                });\n                $('.colorpicker-rgba').colorpicker();\n                \n                // Date Picker\n                jQuery('#datepicker').datepicker();\n                jQuery('#datepicker-autoclose').datepicker({\n                \tautoclose: true,\n                \ttodayHighlight: true\n                });\n                jQuery('#datepicker-inline').datepicker();\n                jQuery('#datepicker-multiple-date').datepicker({\n                    format: \"mm/dd/yyyy\",\n\t\t\t\t\tclearBtn: true,\n\t\t\t\t\tmultidate: true,\n\t\t\t\t\tmultidateSeparator: \",\"\n                });\n                jQuery('#date-range').datepicker({\n                    toggleActive: true\n                });\n                \n                //Clock Picker\n                $('.clockpicker').clockpicker({\n                \tdonetext: 'Done'\n                });\n                \n                $('#single-input').clockpicker({\n\t\t\t\t    placement: 'bottom',\n\t\t\t\t    align: 'left',\n\t\t\t\t    autoclose: true,\n\t\t\t\t    'default': 'now'\n\t\t\t\t});\n\t\t\t\t$('#check-minutes').click(function(e){\n\t\t\t\t    // Have to stop propagation here\n\t\t\t\t    e.stopPropagation();\n\t\t\t\t    $(\"#single-input\").clockpicker('show')\n\t\t\t\t            .clockpicker('toggleView', 'minutes');\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//Date range picker\n\t\t\t\t$('.input-daterange-datepicker').daterangepicker({\n\t\t\t\t\tbuttonClasses: ['btn', 'btn-sm'],\n\t\t            applyClass: 'btn-default',\n\t\t            cancelClass: 'btn-white'\n\t\t\t\t});\n\t\t        $('.input-daterange-timepicker').daterangepicker({\n\t\t            timePicker: true,\n                    timePickerIncrement: 30,\n                    locale: {\n                        format: 'MM/DD/YYYY h:mm A'\n                    },\n\t\t            buttonClasses: ['btn', 'btn-sm'],\n\t\t            applyClass: 'btn-default',\n\t\t            cancelClass: 'btn-white'\n\t\t        });\n\t\t        $('.input-limit-datepicker').daterangepicker({\n\t\t            format: 'MM/DD/YYYY',\n\t\t            minDate: '06/01/2015',\n\t\t            maxDate: '06/30/2015',\n\t\t            buttonClasses: ['btn', 'btn-sm'],\n\t\t            applyClass: 'btn-default',\n\t\t            cancelClass: 'btn-white',\n\t\t            dateLimit: {\n\t\t                days: 6\n\t\t            }\n\t\t        });\n\t\t\n\t\t        $('#reportrange span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY'));\n\t\t\n\t\t        $('#reportrange').daterangepicker({\n\t\t            format: 'MM/DD/YYYY',\n\t\t            startDate: moment().subtract(29, 'days'),\n\t\t            endDate: moment(),\n\t\t            minDate: '01/01/2012',\n\t\t            maxDate: '12/31/2015',\n\t\t            dateLimit: {\n\t\t                days: 60\n\t\t            },\n\t\t            showDropdowns: true,\n\t\t            showWeekNumbers: true,\n\t\t            timePicker: false,\n\t\t            timePickerIncrement: 1,\n\t\t            timePicker12Hour: true,\n\t\t            ranges: {\n\t\t                'Today': [moment(), moment()],\n\t\t                'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n\t\t                'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n\t\t                'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n\t\t                'This Month': [moment().startOf('month'), moment().endOf('month')],\n\t\t                'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]\n\t\t            },\n\t\t            opens: 'left',\n\t\t            drops: 'down',\n\t\t            buttonClasses: ['btn', 'btn-sm'],\n\t\t            applyClass: 'btn-default',\n\t\t            cancelClass: 'btn-white',\n\t\t            separator: ' to ',\n\t\t            locale: {\n\t\t                applyLabel: 'Submit',\n\t\t                cancelLabel: 'Cancel',\n\t\t                fromLabel: 'From',\n\t\t                toLabel: 'To',\n\t\t                customRangeLabel: 'Custom',\n\t\t                daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n\t\t                monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n\t\t                firstDay: 1\n\t\t            }\n\t\t        }, function (start, end, label) {\n\t\t            console.log(start.toISOString(), end.toISOString(), label);\n\t\t            $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));\n\t\t        });\n\t\t\t\t\n\t\t\t});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.fullcalendar.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Full-Calendar\n* \n*/\n\n\n\n\n!function($) {\n    \"use strict\";\n\n    var CalendarApp = function() {\n        this.$body = $(\"body\")\n        this.$modal = $('#event-modal'),\n        this.$event = ('#external-events div.external-event'),\n        this.$calendar = $('#calendar'),\n        this.$saveCategoryBtn = $('.save-category'),\n        this.$categoryForm = $('#add-category form'),\n        this.$extEvents = $('#external-events'),\n        this.$calendarObj = null\n    };\n\n\n    /* on drop */\n    CalendarApp.prototype.onDrop = function (eventObj, date) { \n        var $this = this;\n            // retrieve the dropped element's stored Event Object\n            var originalEventObject = eventObj.data('eventObject');\n            var $categoryClass = eventObj.attr('data-class');\n            // we need to copy it, so that multiple events don't have a reference to the same object\n            var copiedEventObject = $.extend({}, originalEventObject);\n            // assign it the date that was reported\n            copiedEventObject.start = date;\n            if ($categoryClass)\n                copiedEventObject['className'] = [$categoryClass];\n            // render the event on the calendar\n            $this.$calendar.fullCalendar('renderEvent', copiedEventObject, true);\n            // is the \"remove after drop\" checkbox checked?\n            if ($('#drop-remove').is(':checked')) {\n                // if so, remove the element from the \"Draggable Events\" list\n                eventObj.remove();\n            }\n    },\n    /* on click on event */\n    CalendarApp.prototype.onEventClick =  function (calEvent, jsEvent, view) {\n        var $this = this;\n            var form = $(\"<form></form>\");\n            form.append(\"<label>Change event name</label>\");\n            form.append(\"<div class='input-group'><input class='form-control' type=text value='\" + calEvent.title + \"' /><span class='input-group-btn'><button type='submit' class='btn btn-success waves-effect waves-light'><i class='fa fa-check'></i> Save</button></span></div>\");\n            $this.$modal.modal({\n                backdrop: 'static'\n            });\n            $this.$modal.find('.delete-event').show().end().find('.save-event').hide().end().find('.modal-body').empty().prepend(form).end().find('.delete-event').unbind('click').click(function () {\n                $this.$calendarObj.fullCalendar('removeEvents', function (ev) {\n                    return (ev._id == calEvent._id);\n                });\n                $this.$modal.modal('hide');\n            });\n            $this.$modal.find('form').on('submit', function () {\n                calEvent.title = form.find(\"input[type=text]\").val();\n                $this.$calendarObj.fullCalendar('updateEvent', calEvent);\n                $this.$modal.modal('hide');\n                return false;\n            });\n    },\n    /* on select */\n    CalendarApp.prototype.onSelect = function (start, end, allDay) {\n        var $this = this;\n            $this.$modal.modal({\n                backdrop: 'static'\n            });\n            var form = $(\"<form></form>\");\n            form.append(\"<div class='row'></div>\");\n            form.find(\".row\")\n                .append(\"<div class='col-md-6'><div class='form-group'><label class='control-label'>Event Name</label><input class='form-control' placeholder='Insert Event Name' type='text' name='title'/></div></div>\")\n                .append(\"<div class='col-md-6'><div class='form-group'><label class='control-label'>Category</label><select class='form-control' name='category'></select></div></div>\")\n                .find(\"select[name='category']\")\n                .append(\"<option value='bg-danger'>Danger</option>\")\n                .append(\"<option value='bg-success'>Success</option>\")\n                .append(\"<option value='bg-purple'>Purple</option>\")\n                .append(\"<option value='bg-primary'>Primary</option>\")\n                .append(\"<option value='bg-pink'>Pink</option>\")\n                .append(\"<option value='bg-info'>Info</option>\")\n                .append(\"<option value='bg-warning'>Warning</option></div></div>\");\n            $this.$modal.find('.delete-event').hide().end().find('.save-event').show().end().find('.modal-body').empty().prepend(form).end().find('.save-event').unbind('click').click(function () {\n                form.submit();\n            });\n            $this.$modal.find('form').on('submit', function () {\n                var title = form.find(\"input[name='title']\").val();\n                var beginning = form.find(\"input[name='beginning']\").val();\n                var ending = form.find(\"input[name='ending']\").val();\n                var categoryClass = form.find(\"select[name='category'] option:checked\").val();\n                if (title !== null && title.length != 0) {\n                    $this.$calendarObj.fullCalendar('renderEvent', {\n                        title: title,\n                        start:start,\n                        end: end,\n                        allDay: false,\n                        className: categoryClass\n                    }, true);  \n                    $this.$modal.modal('hide');\n                }\n                else{\n                    alert('You have to give a title to your event');\n                }\n                return false;\n                \n            });\n            $this.$calendarObj.fullCalendar('unselect');\n    },\n    CalendarApp.prototype.enableDrag = function() {\n        //init events\n        $(this.$event).each(function () {\n            // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)\n            // it doesn't need to have a start or end\n            var eventObject = {\n                title: $.trim($(this).text()) // use the element's text as the event title\n            };\n            // store the Event Object in the DOM element so we can get to it later\n            $(this).data('eventObject', eventObject);\n            // make the event draggable using jQuery UI\n            $(this).draggable({\n                zIndex: 999,\n                revert: true,      // will cause the event to go back to its\n                revertDuration: 0  //  original position after the drag\n            });\n        });\n    }\n    /* Initializing */\n    CalendarApp.prototype.init = function() {\n        this.enableDrag();\n        /*  Initialize the calendar  */\n        var date = new Date();\n        var d = date.getDate();\n        var m = date.getMonth();\n        var y = date.getFullYear();\n        var form = '';\n        var today = new Date($.now());\n\n        var defaultEvents =  [{\n                title: 'Hey!',\n                start: new Date($.now() + 158000000),\n                className: 'bg-purple'\n            }, {\n                title: 'See John Deo',\n                start: today,\n                end: today,\n                className: 'bg-danger'\n            }, {\n                title: 'Buy a Theme',\n                start: new Date($.now() + 338000000),\n                className: 'bg-primary'\n            }];\n\n        var $this = this;\n        $this.$calendarObj = $this.$calendar.fullCalendar({\n            slotDuration: '00:15:00', /* If we want to split day time each 15minutes */\n            minTime: '08:00:00',\n            maxTime: '19:00:00',  \n            defaultView: 'month',  \n            handleWindowResize: true,   \n            height: $(window).height() - 200,   \n            header: {\n                left: 'prev,next today',\n                center: 'title',\n                right: 'month,agendaWeek,agendaDay'\n            },\n            events: defaultEvents,\n            editable: true,\n            droppable: true, // this allows things to be dropped onto the calendar !!!\n            eventLimit: true, // allow \"more\" link when too many events\n            selectable: true,\n            drop: function(date) { $this.onDrop($(this), date); },\n            select: function (start, end, allDay) { $this.onSelect(start, end, allDay); },\n            eventClick: function(calEvent, jsEvent, view) { $this.onEventClick(calEvent, jsEvent, view); }\n\n        });\n\n        //on new event\n        this.$saveCategoryBtn.on('click', function(){\n            var categoryName = $this.$categoryForm.find(\"input[name='category-name']\").val();\n            var categoryColor = $this.$categoryForm.find(\"select[name='category-color']\").val();\n            if (categoryName !== null && categoryName.length != 0) {\n                $this.$extEvents.append('<div class=\"external-event bg-' + categoryColor + '\" data-class=\"bg-' + categoryColor + '\" style=\"position: relative;\"><i class=\"fa fa-move\"></i>' + categoryName + '</div>')\n                $this.enableDrag();\n            }\n\n        });\n    },\n\n   //init CalendarApp\n    $.CalendarApp = new CalendarApp, $.CalendarApp.Constructor = CalendarApp\n    \n}(window.jQuery),\n\n//initializing CalendarApp\nfunction($) {\n    \"use strict\";\n    $.CalendarApp.init()\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.gmaps.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Google Maps\n*/\n\n!function($) {\n    \"use strict\";\n\n    var GoogleMap = function() {};\n\n    //creates basic map\n    GoogleMap.prototype.createBasic = function($container) {\n        return new GMaps({\n          div: $container,\n          lat: -12.043333,\n          lng: -77.028333\n        });\n    },\n    //creates map with markers\n    GoogleMap.prototype.createMarkers = function($container) {\n        var map = new GMaps({\n          div: $container,\n          lat: -12.043333,\n          lng: -77.028333\n        });\n\n        //sample markers, but you can pass actual marker data as function parameter\n        map.addMarker({\n          lat: -12.043333,\n          lng: -77.03,\n          title: 'Lima',\n          details: {\n            database_id: 42,\n            author: 'HPNeo'\n          },\n          click: function(e){\n            if(console.log)\n              console.log(e);\n            alert('You clicked in this marker');\n          }\n        });\n        map.addMarker({\n          lat: -12.042,\n          lng: -77.028333,\n          title: 'Marker with InfoWindow',\n          infoWindow: {\n            content: '<p>HTML Content</p>'\n          }\n        });\n\n        return map;\n    },\n    //creates map with polygone\n    GoogleMap.prototype.createWithPolygon = function ($container, $path) {\n      var map = new GMaps({\n        div: $container,\n        lat: -12.043333,\n        lng: -77.028333\n      });\n\n      var polygon = map.drawPolygon({\n        paths: $path,\n        strokeColor: '#BBD8E9',\n        strokeOpacity: 1,\n        strokeWeight: 3,\n        fillColor: '#BBD8E9',\n        fillOpacity: 0.6\n      });\n\n      return map;\n    },\n\n    //creates map with overlay\n    GoogleMap.prototype.createWithOverlay = function ($container) {\n      var map = new GMaps({\n        div: $container,\n        lat: -12.043333,\n        lng: -77.028333\n      });\n      map.drawOverlay({\n        lat: map.getCenter().lat(),\n        lng: map.getCenter().lng(),\n        content: '<div class=\"gmaps-overlay\">Our Office!<div class=\"gmaps-overlay_arrow above\"></div></div>',\n        verticalAlign: 'top',\n        horizontalAlign: 'center'\n      });\n\n      return map;\n    },\n\n    //creates map with street view\n    GoogleMap.prototype.createWithStreetview = function ($container, $lat, $lng) {\n      return GMaps.createPanorama({\n        el: $container,\n        lat : $lat,\n        lng : $lng\n      });\n    },\n    //Routes\n    GoogleMap.prototype.createWithRoutes = function ($container, $lat, $lng) {\n      var map = new GMaps({\n        div: $container,\n        lat: $lat,\n        lng: $lng\n      });\n      $('#start_travel').click(function(e){\n        e.preventDefault();\n        map.travelRoute({\n          origin: [-12.044012922866312, -77.02470665341184],\n          destination: [-12.090814532191756, -77.02271108990476],\n          travelMode: 'driving',\n          step: function(e){\n            $('#instructions').append('<li>'+e.instructions+'</li>');\n            $('#instructions li:eq('+e.step_number+')').delay(450*e.step_number).fadeIn(200, function(){\n              map.setCenter(e.end_location.lat(), e.end_location.lng());\n              map.drawPolyline({\n                path: e.path,\n                strokeColor: '#131540',\n                strokeOpacity: 0.6,\n                strokeWeight: 6\n              });\n            });\n          }\n        });\n      });\n      return map;\n    },\n    //Type\n    GoogleMap.prototype.createMapByType = function ($container, $lat, $lng) {\n      var map = new GMaps({\n        div: $container,\n        lat: $lat,\n        lng: $lng,\n        mapTypeControlOptions: {\n          mapTypeIds : [\"hybrid\", \"roadmap\", \"satellite\", \"terrain\", \"osm\", \"cloudmade\"]\n        }\n      });\n      map.addMapType(\"osm\", {\n        getTileUrl: function(coord, zoom) {\n          return \"http://tile.openstreetmap.org/\" + zoom + \"/\" + coord.x + \"/\" + coord.y + \".png\";\n        },\n        tileSize: new google.maps.Size(256, 256),\n        name: \"OpenStreetMap\",\n        maxZoom: 18\n      });\n      map.addMapType(\"cloudmade\", {\n        getTileUrl: function(coord, zoom) {\n          return \"http://b.tile.cloudmade.com/8ee2a50541944fb9bcedded5165f09d9/1/256/\" + zoom + \"/\" + coord.x + \"/\" + coord.y + \".png\";\n        },\n        tileSize: new google.maps.Size(256, 256),\n        name: \"CloudMade\",\n        maxZoom: 18\n      });\n      map.setMapTypeId(\"osm\");\n      return map;\n    },\n    GoogleMap.prototype.createWithMenu = function ($container, $lat, $lng) {\n      var map = new GMaps({\n        div: $container,\n        lat: $lat,\n        lng: $lng\n      });\n      map.setContextMenu({\n        control: 'map',\n        options: [{\n          title: 'Add marker',\n          name: 'add_marker',\n          action: function(e){\n            this.addMarker({\n              lat: e.latLng.lat(),\n              lng: e.latLng.lng(),\n              title: 'New marker'\n            });\n            this.hideContextMenu();\n          }\n        }, {\n          title: 'Center here',\n          name: 'center_here',\n          action: function(e){\n            this.setCenter(e.latLng.lat(), e.latLng.lng());\n          }\n        }]\n      });\n    },\n    //init\n    GoogleMap.prototype.init = function() {\n      var $this = this;\n      $(document).ready(function(){\n        //creating basic map\n        $this.createBasic('#gmaps-basic'),\n        //with sample markers\n        $this.createMarkers('#gmaps-markers');\n\n        //polygon\n        var path = [[-12.040397656836609,-77.03373871559225],\n                  [-12.040248585302038,-77.03993927003302],\n                  [-12.050047116528843,-77.02448169303511],\n                  [-12.044804866577001,-77.02154422636042]];\n        $this.createWithPolygon('#gmaps-polygons', path);\n\n        //overlay\n        $this.createWithOverlay('#gmaps-overlay');\n\n        //street view\n        $this.createWithStreetview('#panorama',  42.3455, -71.0983);\n\n        //routes\n        $this.createWithRoutes('#gmaps-route',-12.043333, -77.028333);\n\n        //types\n        $this.createMapByType('#gmaps-types', -12.043333, -77.028333);\n\n        //statu\n        $this.createWithMenu('#gmaps-menu', -12.043333, -77.028333);\n      });\n    },\n    //init\n    $.GoogleMap = new GoogleMap, $.GoogleMap.Constructor = GoogleMap\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.GoogleMap.init()\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.jsgrid.init.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* JsGrid page\n*/\n\n\n/**\n * JsGrid Controller\n */\n\n\n\nvar JsDBSource = {\n    loadData: function (filter) {\n        console.log(filter);\n        var d = $.Deferred();\n        $.ajax({\n            type: \"GET\",\n            url: \"data/jsgrid.json\",\n            data: filter,\n            success: function(response) {\n                //static filter on frontend side, you should actually filter data on backend side\n                var filtered_data = $.grep(response, function (client) {\n                    return (!filter.Name || client.Name.indexOf(filter.Name) > -1)\n                        && (!filter.Age || client.Age === filter.Age)\n                        && (!filter.Address || client.Address.indexOf(filter.Address) > -1)\n                        && (!filter.Country || client.Country === filter.Country)\n                });\n                d.resolve(filtered_data);\n            }\n        });\n        return d.promise();\n    },\n\n    insertItem: function (item) {\n        return $.ajax({\n            type: \"POST\",\n            url: \"data/jsgrid.json\",\n            data: item\n        });\n    },\n\n    updateItem: function (item) {\n        return $.ajax({\n            type: \"PUT\",\n            url: \"data/jsgrid.json\",\n            data: item\n        });\n    },\n\n    deleteItem: function (item) {\n        return $.ajax({\n            type: \"DELETE\",\n            url: \"data/jsgrid.json\",\n            data: item\n        });\n    },\n\n    countries: [\n        { Name: \"\", Id: 0 },\n        { Name: \"United States\", Id: 1 },\n        { Name: \"Canada\", Id: 2 },\n        { Name: \"United Kingdom\", Id: 3 },\n        { Name: \"France\", Id: 4 },\n        { Name: \"Brazil\", Id: 5 },\n        { Name: \"China\", Id: 6 },\n        { Name: \"Russia\", Id: 7 }\n    ]\n};\n\n\n\n!function($) {\n    \"use strict\";\n\n    var GridApp = function() {\n        this.$body = $(\"body\")\n    };\n    GridApp.prototype.createGrid = function ($element, options) {\n        //default options\n        var defaults = {\n            height: \"450\",\n            width: \"100%\",\n            filtering: true,\n            editing: true,\n            inserting: true,\n            sorting: true,\n            paging: true,\n            autoload: true,\n            pageSize: 10,\n            pageButtonCount: 5,\n            deleteConfirm: \"Do you really want to delete the entry?\"\n        };\n\n        $element.jsGrid($.extend(defaults, options));\n    },\n    GridApp.prototype.init = function () {\n        var $this = this;\n\n        var options = {\n            fields: [\n                {name: \"Name\", type: \"text\", width: 150},\n                {name: \"Age\", type: \"number\", width: 50},\n                {name: \"Address\", type: \"text\", width: 200},\n                {name: \"Country\", type: \"select\", items: JsDBSource.countries, valueField: \"Id\", textField: \"Name\"},\n                {type: \"control\"}\n            ],\n            controller: JsDBSource,\n        };\n        $this.createGrid($(\"#jsGrid\"), options);\n\n    },\n    //init ChatApp\n    $.GridApp = new GridApp, $.GridApp.Constructor = GridApp\n\n}(window.jQuery),\n\n//initializing main application module\nfunction($) {\n    \"use strict\";\n    $.GridApp.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.leads.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Leads\n*/\n\n!function($) {\n    \"use strict\";\n\n    var LeadsCharts = function() {};\n\n    //creates Stacked chart\n    LeadsCharts.prototype.createStackedChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            stacked: true,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n    \n    LeadsCharts.prototype.init = function() {\n\n        \n        //creating Stacked chart\n        var $stckedData  = [\n            { y: 'Mon', a: 45, b: 180 },\n            { y: 'Tue', a: 75,  b: 65 },\n            { y: 'Wed', a: 100, b: 90 },\n            { y: 'Thur', a: 75,  b: 65 },\n            { y: 'Fri', a: 100, b: 90 },\n            { y: 'Sat', a: 75,  b: 65 },\n            { y: 'Sun', a: 50,  b: 40 }\n        ];\n        this.createStackedChart('morris-bar-stacked', $stckedData, 'y', ['a', 'b'], ['Series A', 'Series B'], ['#5d9cec', '#ebeff2']);\n\n    },\n    //init\n    $.LeadsCharts = new LeadsCharts, $.LeadsCharts.Constructor = LeadsCharts\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.LeadsCharts.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.nvd3.init.js",
    "content": "/**\n* Theme: Ubold Admin\n* Author: Coderthemes\n* Chart Nvd3 page\n*/\n\n\n(function($) {\n    'use strict';\n\n    function sinAndCos() {\n        var sin = [],\n            sin2 = [],\n            cos = [];\n        for (var i = 0; i < 100; i++) {\n            sin.push({\n                x: i,\n                y: Math.sin(i / 9)\n            });\n            sin2.push({\n                x: i,\n                y: Math.sin(i / 10) * 0.25 + 0.5\n            });\n            cos.push({\n                x: i,\n                y: 0.5 * Math.cos(i / 10)\n            });\n        }\n        return [{\n            values: sin,\n            key: 'Sine Wave',\n            color: \"#5d9cec\"\n        }, {\n            values: cos,\n            key: 'Cosine Wave',\n            color: \"#fb6d9d\"\n        }, {\n            values: sin2,\n            key: 'Custom sine',\n            color: \"#34d3eb\"\n        }];\n    }\n    nv.addGraph(function() {\n        var lineChart = nv.models.lineChart();\n        var height = 300;\n        lineChart.useInteractiveGuideline(true);\n        lineChart.xAxis.tickFormat(d3.format(',r'));\n        lineChart.yAxis.axisLabel('Voltage (v)').tickFormat(d3.format(',.2f'));\n        d3.select('.line-chart svg').attr('perserveAspectRatio', 'xMinYMid').datum(sinAndCos()).transition().duration(500).call(lineChart);\n        nv.utils.windowResize(lineChart.update);\n        return lineChart;\n    });\n    \n    var historicalBarChart = [{\n        key: 'Cumulative Return',\n        values: [{\n            'label': 'A Label',\n            'value': -29.765957771107,\n            'color': '#5fbeaa'\n        }, {\n            'label': 'B Label',\n            'value': 50,\n            'color': '#f05050'\n        }, {\n            'label': 'C Label',\n            'value': 32.807804682612,\n            'color': '#5d9cec'\n        }, {\n            'label': 'D Label',\n            'value': 196.45946739256,\n            'color': '#ffbd4a'\n        }, {\n            'label': 'E Label',\n            'value': 15.79434030906893,\n            'color': '#81c868'\n        }, {\n            'label': 'F Label',\n            'value': -98.079782601442,\n            'color': '#dcdcdc'\n        }, {\n            'label': 'G Label',\n            'value': -13.925743130903,\n            'color': '#7266ba'\n        }, {\n            'label': 'H Label',\n            'value': -5.1387322875705,\n            'color': '#fb6d9d'\n        }]\n    }];\n    nv.addGraph(function() {\n        var barChart = nv.models.discreteBarChart().x(function(d) {\n            return d.label;\n        }).y(function(d) {\n            return d.value;\n        }).staggerLabels(true).tooltips(false).showValues(true).duration(250);\n        barChart.yAxis.axisLabel('Price change in USD');\n        d3.select('.bar-chart svg').datum(historicalBarChart).call(barChart);\n        nv.utils.windowResize(barChart.update);\n        return barChart;\n    });\n    var i, j;\n    nv.utils.symbolMap.set('thin-x', function(size) {\n        size = Math.sqrt(size);\n        return 'M' + (-size / 2) + ',' + (-size / 2) + 'l' + size + ',' + size + 'm0,' + -(size) + 'l' + (-size) + ',' + size;\n    });\n    var scatterChart;\n    var colors = ['#5fbeaa', '#fb6d9d','#7266ba', '#ffbd4a','#81c868', '#dcdcdc','#555555\t', '#fb6d9d','#98a6ad', '#5d9cec'];\n    //d3.scale.category10().range()\n    nv.addGraph(function() {\n        scatterChart = nv.models.scatterChart().useVoronoi(true).color(colors).duration(300);\n        scatterChart.xAxis.tickFormat(d3.format('.02f'));\n        scatterChart.yAxis.axisLabel('Population dynamics').tickFormat(d3.format('.02f'));\n        scatterChart.tooltipContent(function(obj) {\n            return '<p>' + obj.series[0].key + '</p>';\n        });\n        d3.select('.scatter-chart svg').datum(randomData(4, 40)).call(scatterChart);\n        nv.utils.windowResize(scatterChart.update);\n        scatterChart.dispatch.on('stateChange', function(e) {\n            ('New State:', JSON.stringify(e));\n        });\n        return scatterChart;\n    });\n\n    function randomData(groups, points) {\n        var data = [],\n            shapes = ['thin-x', 'circle', 'cross', 'triangle-up', 'triangle-down', 'diamond', 'square'],\n            random = d3.random.normal();\n        for (i = 0; i < groups; i++) {\n            data.push({\n                key: 'Group ' + i,\n                values: []\n            });\n            for (j = 0; j < points; j++) {\n                data[i].values.push({\n                    x: random(),\n                    y: random(),\n                    size: Math.round(Math.random() * 100) / 100,\n                    shape: shapes[j % shapes.length]\n                });\n            }\n        }\n        return data;\n    }\n    var long_short_data = [{\n        'key': 'Series 1',\n        'color': \"#5d9cec\",\n        'values': [{\n            'label': 'Group A',\n            'value': -1.8746444827653\n        }, {\n            'label': 'Group B',\n            'value': -8.0961543492239\n        }, {\n            'label': 'Group C',\n            'value': -0.57072943117674\n        }, {\n            'label': 'Group D',\n            'value': -2.4174010336624\n        }, {\n            'label': 'Group E',\n            'value': -0.72009071426284\n        }, {\n            'label': 'Group F',\n            'value': -0.77154485523777\n        }, {\n            'label': 'Group G',\n            'value': -0.90152097798131\n        }, {\n            'label': 'Group H',\n            'value': -0.91445417330854\n        }, {\n            'label': 'Group I',\n            'value': -0.055746319141851\n        }]\n    }, {\n        'key': 'Series 2',\n        'color': \"#34d3eb\",\n        'values': [{\n            'label': 'Group A',\n            'value': 25.307646510375\n        }, {\n            'label': 'Group B',\n            'value': 16.756779544553\n        }, {\n            'label': 'Group C',\n            'value': 18.451534877007\n        }, {\n            'label': 'Group D',\n            'value': 8.6142352811805\n        }, {\n            'label': 'Group E',\n            'value': 7.8082472075876\n        }, {\n            'label': 'Group F',\n            'value': 5.259101026956\n        }, {\n            'label': 'Group G',\n            'value': 0.30947953487127\n        }, {\n            'label': 'Group H',\n            'value': 0\n        }, {\n            'label': 'Group I',\n            'value': 0\n        }]\n    }];\n    var multiChart;\n    nv.addGraph(function() {\n        multiChart = nv.models.multiBarHorizontalChart().x(function(d) {\n            return d.label;\n        }).y(function(d) {\n            return d.value;\n        }).duration(250);\n        multiChart.yAxis.tickFormat(d3.format(',.2f'));\n        d3.select('.multi-chart svg').datum(long_short_data).call(multiChart);\n        nv.utils.windowResize(multiChart.update);\n        return multiChart;\n    });\n    \n    \n    //Regular pie chart example\n\tnv.addGraph(function() {\n\t  var chart = nv.models.pieChart()\n\t      .x(function(d) { return d.label })\n\t      .y(function(d) { return d.value })\n\t      .showLabels(true);\n\t\n\t    d3.select(\"#chart1 svg\")\n\t        .datum(exampleData)\n\t      \t.transition().duration(1200)\n\t        .call(chart);\n\t\n\t  return chart;\n\t});\n\t\n\t//Donut chart example\n\tnv.addGraph(function() {\n\t  var chart = nv.models.pieChart()\n\t      .x(function(d) { return d.label })\n\t      .y(function(d) { return d.value })\n\t      .showLabels(true)     //Display pie labels\n\t      .labelThreshold(.05)  //Configure the minimum slice size for labels to show up\n\t      .labelType(\"percent\") //Configure what type of data to show in the label. Can be \"key\", \"value\" or \"percent\"\n\t      .donut(true)          //Turn on Donut mode. Makes pie chart look tasty!\n\t      .donutRatio(0.35)     //Configure how big you want the donut hole size to be.\n\t      ;\n\t\n\t    d3.select(\"#chart2 svg\")\n\t        .datum(exampleData())\n\t        .transition().duration(350)\n\t        .call(chart);\n\t\n\t  return chart;\n\t});\n\t\n\t//Pie chart example data. Note how there is only a single array of key-value pairs.\n\tfunction exampleData() {\n\t  return  [\n\t      { \n\t        \"label\": \"One\",\n\t        \"value\" : 29.765957771107,\n\t        \"color\" : \"#5fbeaa\"\n\t      } , \n\t      { \n\t        \"label\": \"Two\",\n\t        \"value\" : 60,\n\t        'color': '#f05050'\n\t      } , \n\t      { \n\t        \"label\": \"Three\",\n\t        \"value\" : 39.69895,\n\t        'color': '#5d9cec'\n\t      } , \n\t      { \n\t        \"label\": \"Four\",\n\t        \"value\" : 160.45946739256,\n\t        'color': '#ffbd4a'\n\t      } , \n\t      { \n\t        \"label\": \"Five\",\n\t        \"value\" : 89.02525,\n\t        'color': '#81c868'\n\t      } , \n\t      { \n\t        \"label\": \"Six\",\n\t        \"value\" : 98.079782601442,\n\t        'color': '#7266ba'\n\t      } , \n\t      { \n\t        \"label\": \"Seven\",\n\t        \"value\" : 98.925743130903,\n\t        'color': '#fb6d9d'\n\t      } \n\t      \n\t    ];\n\t}\n})(jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.opportunities.init.js",
    "content": "/**\n* Theme: Ubold Admin\n* Author: Coderthemes\n* Page: opportunities\n*/\n\n!function($) {\n    \"use strict\";\n\n    var Opportunities = function() {};\n\n    Opportunities.prototype.init = function () {\n        \n        //Pie Chart\n        c3.generate({\n             bindto: '#pie-chart',\n            data: {\n                columns: [\n                    ['Hot', 46],\n                    ['Cold', 24],\n                    ['In-progress', 46],\n                    ['Lost', 10],\n                    ['Won', 30]\n                ],\n                type : 'pie'\n            },\n            color: {\n            \tpattern: [\"#34d3eb\", \"#7266ba\", \"#ffbd4a\", \"#f05050\", \"#81c868\"]\n            },\n            pie: {\n\t\t        label: {\n\t\t          show: false\n\t\t        }\n\t\t    }\n        });\n        \n    },\n    $.Opportunities = new Opportunities, $.Opportunities.Constructor = Opportunities\n\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.Opportunities.init()\n}(window.jQuery);\n\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.peity.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Peity Chart\n* \n*/\n\n!function($) {\n    \"use strict\";\n\n    var PeityChart = function() {};\n\n    //create line\n    PeityChart.prototype.createLine = function ($element, $strokeColor, $fillColor, $width ,$height) {\n        $($element).peity(\"line\", {\n            fill: $strokeColor,\n            stroke: $fillColor,\n            width: $width,\n            height: $height\n        });\n        return $($element);\n    },\n\n    //init\n    PeityChart.prototype.init = function() {\n        //live graph\n        var updatingChart = this.createLine(\".updating-chart\",'#5fbeaa','#5fbeaa', 120,40);\n\n        setInterval(function() {\n            var random = Math.round(Math.random() * 10)\n            var values = updatingChart.text().split(\",\")\n            values.shift()\n            values.push(random)\n\n            updatingChart\n                .text(values.join(\",\"))\n                .change()\n        }, 1000);\n    },\n    //init\n    $.PeityChart = new PeityChart, $.PeityChart.Constructor = PeityChart\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.PeityChart.init()\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.rickshaw.chart.init.js",
    "content": "/**\n* Theme: Velonic Admin Template\n* Author: Coderthemes\n* Module/App: RickshawChart Application\n*/\n\n!function($) {\n    \"use strict\";\n\n    var RickshawChart = function() {\n        this.$body = $(\"body\")\n    };\n    //creates area graph\n    RickshawChart.prototype.createAreaGraph = function(selector, seriesData, random, colors, labels) {\n      var areaGraph = new Rickshaw.Graph( {\n          element: document.querySelector(selector),\n          renderer: 'area',\n          stroke: true,\n          height: 250,\n          preserve: true,\n          series: [\n            {\n              color: colors[0],\n              data: seriesData[0],\n              name: labels[0]\n            }, \n            {\n              color: colors[1],\n              data: seriesData[1],\n              name: labels[1]\n            }\n          ]\n      });\n   \n      areaGraph.render();\n      \n      setInterval( function() {\n          random.removeData(seriesData);\n          random.addData(seriesData);\n          areaGraph.update();\n      }, 700 );\n      \n      $(window).resize(function(){\n          areaGraph.render();\n      });\n\n    },\n    RickshawChart.prototype.createSimpleareaGraph = function(selector, simpleAdata,colors) {\n        var Simplearea = new Rickshaw.Graph( {\n            element: document.querySelector(selector),\n            renderer: 'area',\n            stroke: true,\n            series: [ {\n                    data: simpleAdata,\n                    color: colors[0]\n            }]\n        });\n        Simplearea.render();\n    },\n    RickshawChart.prototype.createMultipleareaGraph = function(selector, multipleAdata1,multipleAdata2,colors) {\n        var Multiplearea = new Rickshaw.Graph( {\n            element: document.querySelector(selector),\n            renderer: 'area',\n            stroke: true,\n            series: [ {\n                data: multipleAdata1,\n                color: colors[0],\n                border: 0\n        }, {    \n                data: multipleAdata2,\n                color: colors[1]\n        }]    \n        });\n        Multiplearea.render();\n    },\n    RickshawChart.prototype.createLinetoggleGraph = function(selector, height, colors, names) {\n      // set up our data series with 50 random data points\n\n      var seriesData = [ [], [], [] ];\n      var random = new Rickshaw.Fixtures.RandomData(150);\n\n      for (var i = 0; i < 150; i++) {\n        random.addData(seriesData);\n      }\n\n      // instantiate our graph!\n\n      var graph = new Rickshaw.Graph( {\n        element: document.getElementById(selector),\n        height: height,\n        renderer: 'line',\n        series: [\n          {\n            color: colors[0],\n            data: seriesData[0],\n            name: names[0]\n          }, {\n            color: colors[1],\n            data: seriesData[1],\n            name: names[1]\n          }, {\n            color: colors[2],\n            data: seriesData[2],\n            name: names[2]\n          }\n        ]\n      } );\n\n      graph.render();\n\n      var hoverDetail = new Rickshaw.Graph.HoverDetail( {\n        graph: graph,\n        formatter: function(series, x, y) {\n          var date = '<span class=\"date\">' + new Date(x * 1000).toUTCString() + '</span>';\n          var swatch = '<span class=\"detail_swatch\" style=\"background-color: #000' + series.color + '\"></span>';\n          var content = swatch + series.name + \": \" + parseInt(y) + '<br>' + date;\n          return content;\n        }\n      } );\n    },\n    RickshawChart.prototype.createLinePlotGraph = function(selector, colors, names) {\n      var graph = new Rickshaw.Graph( {\n        element: document.getElementById(selector),\n        renderer: 'lineplot',\n        padding: { top: 0.1 },\n        series: [\n          {\n            data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 } ],\n            color: colors[0],\n            name: names[0]\n          }, {\n            data: [ { x: 0, y: 19 }, { x: 1, y: 22 }, { x: 2, y: 32 }, { x: 3, y: 20 }, { x: 4, y: 21 } ],\n            color: colors[1],\n            name: names[1]\n          }\n        ]\n      } );\n\n      var hover = new Rickshaw.Graph.HoverDetail({ graph: graph });\n\n      graph.render();\n    },\n    RickshawChart.prototype.createMultiGraph = function(selector, height, names, colors) {\n      var seriesData = [ [], [], [], [], [] ];\n      var random = new Rickshaw.Fixtures.RandomData(50);\n\n      for (var i = 0; i < 75; i++) {\n        random.addData(seriesData);\n      }\n\n      var graph = new Rickshaw.Graph( {\n        element: document.getElementById(selector),\n        renderer: 'multi',\n        height: height,\n        dotSize: 5,\n        series: [\n          {\n            name: names[0],\n            data: seriesData.shift(),\n            color: colors[0],\n            renderer: 'stack'\n          }, {\n            name: names[1],\n            data: seriesData.shift(),\n            color: colors[1],\n            renderer: 'stack'\n          }, {\n            name: names[2],\n            data: seriesData.shift(),\n            color: colors[2],\n            renderer: 'scatterplot'\n          }, {\n            name: names[3],\n            data: seriesData.shift().map(function(d) { return { x: d.x, y: d.y / 4 } }),\n            color: colors[3],\n            renderer: 'bar'\n          }, {\n            name: names[4],\n            data: seriesData.shift().map(function(d) { return { x: d.x, y: d.y * 1.5 } }),\n            color: colors[4],\n            renderer: 'line'\n            \n          }\n        ]\n      } );\n\n      graph.render();\n\n      var detail = new Rickshaw.Graph.HoverDetail({\n        graph: graph\n      });\n\n      var legend = new Rickshaw.Graph.Legend({\n        graph: graph,\n        element: document.querySelector('#legend')\n      });\n\n      var highlighter = new Rickshaw.Graph.Behavior.Series.Highlight({\n          graph: graph,\n          legend: legend,\n          disabledColor: function() { return '#ddd' }\n      });\n\n      var highlighter = new Rickshaw.Graph.Behavior.Series.Toggle({\n          graph: graph,\n          legend: legend\n      });\n    },\n    //initializing various charts and components\n    RickshawChart.prototype.init = function() {\n      //live statics\n      var seriesData = [ [], [], [], [], [], [], [], [], [] ];\n      var random = new Rickshaw.Fixtures.RandomData(200);\n\n      for (var i = 0; i < 100; i++) {\n          random.addData(seriesData);\n      }\n\n      //create live area graph\n      var colors = ['#5fbeaa', '#ebeff2'];\n      var labels = ['Moscow', 'Shanghai'];\n      this.createAreaGraph(\"#linechart\", seriesData, random, colors, labels);\n\n      //create Simple area graph\n      var simpleAdata = [ \n                { x: 0, y: 20 }, \n                { x: 1, y: 25 }, \n                { x: 2, y: 38 }, \n                { x: 3, y: 28 }, \n                { x: 4, y: 20 } \n            ];\n      var simpleAcolors = ['#5fbeaa'];\n      this.createSimpleareaGraph(\"#simplearea\", simpleAdata, simpleAcolors);\n\n      //create Multiple area graph\n      var multipleAdata1 = [ \n                { x: 0, y: 40 }, \n                    { x: 1, y: 49 }, \n                    { x: 2, y: 38 }, \n                    { x: 3, y: 30 }, \n                    { x: 4, y: 32 } \n            ];\n        var multipleAdata2 = [ \n            { x: 0, y: 40 },\n                    { x: 1, y: 49 },\n                    { x: 2, y: 38 }, \n                    { x: 3, y: 30 }, \n                    { x: 4, y: 32 }  \n        ];\n      var MultipleAcolors = ['#5fbeaa','#ebeff2'];\n      this.createMultipleareaGraph(\"#multiplearea\", multipleAdata1, multipleAdata2, MultipleAcolors);\n\n      //create Line-Toggle graph\n      var height = [250];\n      var LineTcolors = [\"#5fbeaa\", \"#5d9cec\",\"#36404a\"];\n      var names = ['New York', 'London','Tokyo'];\n      this.createLinetoggleGraph(\"linetoggle\", height, LineTcolors, names);\n\n      //create Line-plot graph\n      var LinePlotcolors = ['#5fbeaa','#5d9cec'];\n      var linePnames = [\"Series 1\", \"Series 2\"];\n      this.createLinePlotGraph(\"lineplotchart\", LinePlotcolors, linePnames);\n\n      //create Multi graph\n      var Multiheight = [250];\n      var multinames = ['Temperature', 'Heat index','Dewpoint','Pop','Humidity'];\n      var multicolors = ['#5fbeaa','#ebeff2','#36404a','#5d9cec','#fb6d9d'];\n      this.createMultiGraph(\"multichart\", Multiheight, multinames, multicolors);\n\n    },\n\n    //init dashboard\n    $.RickshawChart = new RickshawChart, $.RickshawChart.Constructor = RickshawChart\n    \n}(window.jQuery),\n\n//initializing rickksawChart\nfunction($) {\n    \"use strict\";\n    $.RickshawChart.init()\n}(window.jQuery);\n\n\n\n\n\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.sweet-alert.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* SweetAlert\n*/\n\n!function ($) {\n    \"use strict\";\n\n    var SweetAlert = function () {\n    };\n\n    //examples\n    SweetAlert.prototype.init = function () {\n\n        //Basic\n        $('#sa-basic').click(function () {\n            swal(\"Here's a message!\");\n        });\n\n        //A title with a text under\n        $('#sa-title').click(function () {\n            swal(\"Here's a message!\", \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lorem erat, tincidunt vitae ipsum et, pellentesque maximus enim. Mauris eleifend ex semper, lobortis purus sed, pharetra felis\")\n        });\n\n        //Success Message\n        $('#sa-success').click(function () {\n            swal(\"Good job!\", \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lorem erat, tincidunt vitae ipsum et, pellentesque maximus enim. Mauris eleifend ex semper, lobortis purus sed, pharetra felis\", \"success\")\n        });\n\n        //Warning Message\n        $('#sa-warning').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"warning\",\n                showCancelButton: true,\n                confirmButtonClass: 'btn-warning',\n                confirmButtonText: \"Yes, delete it!\",\n                closeOnConfirm: false\n            }, function () {\n                swal(\"Deleted!\", \"Your imaginary file has been deleted.\", \"success\");\n            });\n        });\n\n        //Parameter\n        $('#sa-params').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"warning\",\n                showCancelButton: true,\n                confirmButtonColor: \"#DD6B55\",\n                confirmButtonText: \"Yes, delete it!\",\n                cancelButtonText: \"No, cancel plx!\",\n                closeOnConfirm: false,\n                closeOnCancel: false\n            }, function (isConfirm) {\n                if (isConfirm) {\n                    swal(\"Deleted!\", \"Your imaginary file has been deleted.\", \"success\");\n                } else {\n                    swal(\"Cancelled\", \"Your imaginary file is safe :)\", \"error\");\n                }\n            });\n        });\n\n        //Custom Image\n        $('#sa-image').click(function () {\n            swal({\n                title: \"Sweet!\",\n                text: \"Here's a custom image.\",\n                imageUrl: \"assets/plugins/bootstrap-sweetalert/thumbs-up.jpg\"\n            });\n        });\n\n        //Auto Close Timer\n        $('#sa-close').click(function () {\n            swal({\n                title: \"Auto close alert!\",\n                text: \"I will close in 2 seconds.\",\n                timer: 2000,\n                showConfirmButton: false\n            });\n        });\n\n        //Primary\n        $('#primary-alert').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"info\",\n                showCancelButton: true,\n                cancelButtonClass: 'btn-default btn-md waves-effect',\n                confirmButtonClass: 'btn-primary btn-md waves-effect waves-light',\n                confirmButtonText: 'Primary!'\n            });\n        });\n\n        //Info\n        $('#info-alert').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"info\",\n                showCancelButton: true,\n                cancelButtonClass: 'btn-default btn-md waves-effect',\n                confirmButtonClass: 'btn-info btn-md waves-effect waves-light',\n                confirmButtonText: 'Info!'\n            });\n        });\n\n        //Success\n        $('#success-alert').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"success\",\n                showCancelButton: true,\n                cancelButtonClass: 'btn-default btn-md waves-effect',\n                confirmButtonClass: 'btn-success btn-md waves-effect waves-light',\n                confirmButtonText: 'Success!'\n            });\n        });\n\n        //Warning\n        $('#warning-alert').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"warning\",\n                showCancelButton: true,\n                cancelButtonClass: 'btn-default btn-md waves-effect',\n                confirmButtonClass: 'btn-warning btn-md waves-effect waves-light',\n                confirmButtonText: 'Warning!'\n            });\n        });\n\n        //Danger\n        $('#danger-alert').click(function () {\n            swal({\n                title: \"Are you sure?\",\n                text: \"You will not be able to recover this imaginary file!\",\n                type: \"error\",\n                showCancelButton: true,\n                cancelButtonClass: 'btn-default btn-md waves-effect',\n                confirmButtonClass: 'btn-danger btn-md waves-effect waves-light',\n                confirmButtonText: 'Danger!'\n            });\n        });\n\n\n    },\n        //init\n        $.SweetAlert = new SweetAlert, $.SweetAlert.Constructor = SweetAlert\n}(window.jQuery),\n\n//initializing\n    function ($) {\n        \"use strict\";\n        $.SweetAlert.init()\n    }(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.sweet-alert2.init.js",
    "content": "\n/**\n* Theme: Ubold Template\n* Author: Coderthemes\n* SweetAlert\n*/\n\n!function ($) {\n    \"use strict\";\n\n    var SweetAlert = function () {\n    };\n\n    //examples\n    SweetAlert.prototype.init = function () {\n\n        //Basic\n        $('#sa-basic').on('click', function () {\n            swal('Any fool can use a computer').catch(swal.noop)\n        });\n\n        //A title with a text under\n        $('#sa-title').click(function () {\n            swal(\n                'The Internet?',\n                'That thing is still around?',\n                'question'\n            )\n        });\n\n        //Success Message\n        $('#sa-success').click(function () {\n            swal(\n                {\n                    title: 'Good job!',\n                    text: 'You clicked the button!',\n                    type: 'success',\n                    confirmButtonColor: '#4fa7f3'\n                }\n            )\n        });\n\n        //Warning Message\n        $('#sa-warning').click(function () {\n            swal({\n                title: 'Are you sure?',\n                text: \"You won't be able to revert this!\",\n                type: 'warning',\n                showCancelButton: true,\n                confirmButtonColor: '#4fa7f3',\n                cancelButtonColor: '#d57171',\n                confirmButtonText: 'Yes, delete it!'\n            }).then(function () {\n                swal(\n                    'Deleted!',\n                    'Your file has been deleted.',\n                    'success'\n                )\n            })\n        });\n\n        //Parameter\n        $('#sa-params').click(function () {\n            swal({\n                title: 'Are you sure?',\n                text: \"You won't be able to revert this!\",\n                type: 'warning',\n                showCancelButton: true,\n                confirmButtonText: 'Yes, delete it!',\n                cancelButtonText: 'No, cancel!',\n                confirmButtonClass: 'btn btn-success',\n                cancelButtonClass: 'btn btn-danger m-l-10',\n                buttonsStyling: false\n            }).then(function () {\n                swal(\n                    'Deleted!',\n                    'Your file has been deleted.',\n                    'success'\n                )\n            }, function (dismiss) {\n                // dismiss can be 'cancel', 'overlay',\n                // 'close', and 'timer'\n                if (dismiss === 'cancel') {\n                    swal(\n                        'Cancelled',\n                        'Your imaginary file is safe :)',\n                        'error'\n                    )\n                }\n            })\n        });\n\n        //Custom Image\n        $('#sa-image').click(function () {\n            swal({\n                title: 'Sweet!',\n                text: 'Modal with a custom image.',\n                imageUrl: 'assets/images/logo_sm.png',\n                imageHeight: 50,\n                animation: false\n            })\n        });\n\n        //Auto Close Timer\n        $('#sa-close').click(function () {\n            swal({\n                title: 'Auto close alert!',\n                text: 'I will close in 2 seconds.',\n                timer: 2000\n            }).then(\n                function () {\n                },\n                // handling the promise rejection\n                function (dismiss) {\n                    if (dismiss === 'timer') {\n                        console.log('I was closed by the timer')\n                    }\n                }\n            )\n        });\n\n        //custom html alert\n        $('#custom-html-alert').click(function () {\n            swal({\n                title: '<i>HTML</i> <u>example</u>',\n                type: 'info',\n                html: 'You can use <b>bold text</b>, ' +\n                '<a href=\"//coderthemes.com/\">links</a> ' +\n                'and other HTML tags',\n                showCloseButton: true,\n                showCancelButton: true,\n                confirmButtonClass: 'btn btn-success',\n                cancelButtonClass: 'btn btn-danger m-l-10',\n                confirmButtonText: '<i class=\"fa fa-thumbs-up\"></i> Great!',\n                cancelButtonText: '<i class=\"fa fa-thumbs-down\"></i>'\n            })\n        });\n\n        //Custom width padding\n        $('#custom-padding-width-alert').click(function () {\n            swal({\n                title: 'Custom width, padding, background.',\n                width: 600,\n                padding: 100,\n                background: '#fff url(//subtlepatterns2015.subtlepatterns.netdna-cdn.com/patterns/geometry.png)'\n            })\n        });\n\n        //Ajax\n        $('#ajax-alert').click(function () {\n            swal({\n                title: 'Submit email to run ajax request',\n                input: 'email',\n                showCancelButton: true,\n                confirmButtonText: 'Submit',\n                showLoaderOnConfirm: true,\n                confirmButtonClass: 'btn btn-success',\n                cancelButtonClass: 'btn btn-danger m-l-10',\n                preConfirm: function (email) {\n                    return new Promise(function (resolve, reject) {\n                        setTimeout(function () {\n                            if (email === 'taken@example.com') {\n                                reject('This email is already taken.')\n                            } else {\n                                resolve()\n                            }\n                        }, 2000)\n                    })\n                },\n                allowOutsideClick: false\n            }).then(function (email) {\n                swal({\n                    type: 'success',\n                    title: 'Ajax request finished!',\n                    html: 'Submitted email: ' + email\n                })\n            })\n        });\n\n        //chaining modal alert\n        $('#chaining-alert').click(function () {\n            swal.setDefaults({\n                input: 'text',\n                confirmButtonText: 'Next &rarr;',\n                showCancelButton: true,\n                animation: false,\n                progressSteps: ['1', '2', '3']\n            })\n\n            var steps = [\n                {\n                    title: 'Question 1',\n                    text: 'Chaining swal2 modals is easy'\n                },\n                'Question 2',\n                'Question 3'\n            ]\n\n            swal.queue(steps).then(function (result) {\n                swal.resetDefaults()\n                swal({\n                    title: 'All done!',\n                    html: 'Your answers: <pre>' +\n                    JSON.stringify(result) +\n                    '</pre>',\n                    confirmButtonText: 'Lovely!',\n                    showCancelButton: false\n                })\n            }, function () {\n                swal.resetDefaults()\n            })\n        });\n\n        //Danger\n        $('#dynamic-alert').click(function () {\n            swal.queue([{\n                title: 'Your public IP',\n                confirmButtonText: 'Show my public IP',\n                text: 'Your public IP will be received ' +\n                'via AJAX request',\n                showLoaderOnConfirm: true,\n                preConfirm: function () {\n                    return new Promise(function (resolve) {\n                        $.get('https://api.ipify.org?format=json')\n                            .done(function (data) {\n                                swal.insertQueueStep(data.ip)\n                                resolve()\n                            })\n                    })\n                }\n            }])\n        });\n\n\n    },\n        //init\n        $.SweetAlert = new SweetAlert, $.SweetAlert.Constructor = SweetAlert\n}(window.jQuery),\n\n//initializing\n    function ($) {\n        \"use strict\";\n        $.SweetAlert.init()\n    }(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.todo.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Todos-widget\n*/\n\n!function($) {\n    \"use strict\";\n\n    var TodoApp = function() {\n        this.$body = $(\"body\"),\n        this.$todoContainer = $('#todo-container'),\n        this.$todoMessage = $(\"#todo-message\"),\n        this.$todoRemaining = $(\"#todo-remaining\"),\n        this.$todoTotal = $(\"#todo-total\"),\n        this.$archiveBtn = $(\"#btn-archive\"),\n        this.$todoList = $(\"#todo-list\"),\n        this.$todoDonechk = \".todo-done\",\n        this.$todoForm = $(\"#todo-form\"),\n        this.$todoInput = $(\"#todo-input-text\"),\n        this.$todoBtn = $(\"#todo-btn-submit\"),\n\n        this.$todoData = [\n        {\n            'id': '1',\n            'text': 'Design One page theme',\n            'done': false\n        },\n        {\n            'id': '2',\n            'text': 'Build a js based app',\n            'done': true\n        },\n        {\n            'id': '3',\n            'text': 'Creating component page',\n            'done': true\n        },\n        {\n            'id': '4',\n            'text': 'Testing??',\n            'done': true\n        },\n        {\n            'id': '5',\n            'text': 'Hehe!! This is looks cool!',\n            'done': false\n        },\n        {\n            'id': '6',\n            'text': 'Build an angular app',\n            'done': true\n        }];\n\n        this.$todoCompletedData = [];\n        this.$todoUnCompletedData = [];\n    };\n\n    //mark/unmark - you can use ajax to save data on server side\n    TodoApp.prototype.markTodo = function(todoId, complete) {\n       for(var count=0; count<this.$todoData.length;count++) {\n            if(this.$todoData[count].id == todoId) {\n                this.$todoData[count].done = complete;\n            }\n       }\n    },\n    //adds new todo\n    TodoApp.prototype.addTodo = function(todoText) {\n        this.$todoData.push({'id': this.$todoData.length, 'text': todoText, 'done': false});\n        //regenerate list\n        this.generate();\n    },\n    //Archives the completed todos\n    TodoApp.prototype.archives = function() {\n    \tthis.$todoUnCompletedData = [];\n        for(var count=0; count<this.$todoData.length;count++) {\n            //geretaing html\n            var todoItem = this.$todoData[count];\n            if(todoItem.done == true) {\n                this.$todoCompletedData.push(todoItem);\n            } else {\n                this.$todoUnCompletedData.push(todoItem);\n            }\n        }\n        this.$todoData = [];\n        this.$todoData = [].concat(this.$todoUnCompletedData);\n        //regenerate todo list\n        this.generate();\n    },\n    //Generates todos\n    TodoApp.prototype.generate = function() {\n        //clear list\n        this.$todoList.html(\"\");\n        var remaining = 0;\n        for(var count=0; count<this.$todoData.length;count++) {\n            //geretaing html\n            var todoItem = this.$todoData[count];\n            if(todoItem.done == true)\n                this.$todoList.prepend('<li class=\"list-group-item\"><div class=\"checkbox checkbox-primary\"><input class=\"todo-done\" id=\"' + todoItem.id + '\" type=\"checkbox\" checked><label for=\"' + todoItem.id + '\">' + todoItem.text + '</label></div></li>');\n            else {\n                remaining = remaining + 1;\n                this.$todoList.prepend('<li class=\"list-group-item\"><div class=\"checkbox checkbox-primary\"><input class=\"todo-done\" id=\"' + todoItem.id + '\" type=\"checkbox\"><label for=\"' + todoItem.id + '\">' + todoItem.text + '</label></div></li>');\n            }\n        }\n\n        //set total in ui\n        this.$todoTotal.text(this.$todoData.length);\n        //set remaining\n        this.$todoRemaining.text(remaining);\n    },\n    //init todo app\n    TodoApp.prototype.init = function () {\n        var $this = this;\n        //generating todo list\n        this.generate();\n\n        //binding archive\n        this.$archiveBtn.on(\"click\", function(e) {\n        \te.preventDefault();\n            $this.archives();\n            return false;\n        });\n\n        //binding todo done chk\n        $(document).on(\"change\", this.$todoDonechk, function() {\n            if(this.checked) \n                $this.markTodo($(this).attr('id'), true);\n            else\n                $this.markTodo($(this).attr('id'), false);\n            //regenerate list\n            $this.generate();\n        });\n\n        //binding the new todo button\n        this.$todoBtn.on(\"click\", function() {\n            if ($this.$todoInput.val() == \"\" || typeof($this.$todoInput.val()) == 'undefined' || $this.$todoInput.val() == null) {\n                sweetAlert(\"Oops...\", \"You forgot to enter todo text\", \"error\");\n                $this.$todoInput.focus();\n            } else {\n                $this.addTodo($this.$todoInput.val());\n            }\n        });\n    },\n    //init TodoApp\n    $.TodoApp = new TodoApp, $.TodoApp.Constructor = TodoApp\n    \n}(window.jQuery),\n\n//initializing todo app\nfunction($) {\n    \"use strict\";\n    $.TodoApp.init()\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.tree.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * Tree view\n */\n\n$( document ).ready(function() {\n    // Basic\n    $('#basicTree').jstree({\n\t\t'core' : {\n\t\t\t'themes' : {\n\t\t\t\t'responsive': false\n\t\t\t}\n\t\t},\n        'types' : {\n            'default' : {\n                'icon' : 'md md-folder'\n            },\n            'file' : {\n                'icon' : 'md md-insert-drive-file'\n            }\n        },\n        'plugins' : ['types']\n    });\n    \n    // Checkbox\n    $('#checkTree').jstree({\n\t\t'core' : {\n\t\t\t'themes' : {\n\t\t\t\t'responsive': false\n\t\t\t}\n\t\t},\n        'types' : {\n            'default' : {\n                'icon' : 'fa fa-folder'\n            },\n            'file' : {\n                'icon' : 'fa fa-file'\n            }\n        },\n        'plugins' : ['types', 'checkbox']\n    });\n    \n    // Drag & Drop\n    $('#dragTree').jstree({\n\t\t'core' : {\n\t\t\t'check_callback' : true,\n\t\t\t'themes' : {\n\t\t\t\t'responsive': false\n\t\t\t}\n\t\t},\n        'types' : {\n            'default' : {\n                'icon' : 'fa fa-folder'\n            },\n            'file' : {\n                'icon' : 'fa fa-file'\n            }\n        },\n        'plugins' : ['types', 'dnd']\n    });\n    \n    // Ajax\n    $('#ajaxTree').jstree({\n\t\t'core' : {\n\t\t\t'check_callback' : true,\n\t\t\t'themes' : {\n\t\t\t\t'responsive': false\n\t\t\t},\n            'data' : {\n                'url' : function (node) {\n                    return node.id === '#' ? 'assets/plugins/jstree/ajax_roots.json' : 'assets/plugins/jstree/ajax_children.json';\n                },\n                'data' : function (node) {\n                    return { 'id' : node.id };\n                }\n            }\n        },\n        \"types\" : {\n            'default' : {\n                'icon' : 'fa fa-folder'\n            },\n            'file' : {\n                'icon' : 'fa fa-file'\n            }\n        },\n        \"plugins\" : [ \"contextmenu\", \"dnd\", \"search\", \"state\", \"types\", \"wholerow\" ]\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.ui-sliders.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Ion Slider\n* \n*/\n$(document).ready(function () {\n    $(\"#range_01\").ionRangeSlider();\n    \n    $(\"#range_02\").ionRangeSlider({\n        min: 100,\n        max: 1000,\n        from: 550\n    });\n    \n    $(\"#range_03\").ionRangeSlider({\n        type: \"double\",\n        grid: true,\n        min: 0,\n        max: 1000,\n        from: 200,\n        to: 800,\n        prefix: \"$\"\n    });\n   \n    $(\"#range_04\").ionRangeSlider({\n        type: \"double\",\n        grid: true,\n        min: -1000,\n        max: 1000,\n        from: -500,\n        to: 500\n    });\n    \n    $(\"#range_05\").ionRangeSlider({\n        type: \"double\",\n        grid: true,\n        min: -1000,\n        max: 1000,\n        from: -500,\n        to: 500,\n        step: 250\n    });\n    \n    $(\"#range_06\").ionRangeSlider({\n        grid: true,\n        from: 3,\n        values: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n    });\n    \n    $(\"#range_07\").ionRangeSlider({\n        grid: true,\n        min: 1000,\n        max: 1000000,\n        from: 200000,\n        step: 1000,\n        prettify_enabled: true\n    });\n    \n    $(\"#range_08\").ionRangeSlider({\n        min: 100,\n        max: 1000,\n        from: 550,\n        disable: true\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.widgets.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Component: Widget\n* \n*/\n$( document ).ready(function() {\n    \n    var DrawSparkline = function() {\n        $('#sparkline1').sparkline([0, 23, 43, 35, 44, 45, 56, 37, 40], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 50,\n            lineColor: '#5fbeaa',\n            fillColor: 'rgba(95, 190, 170, 0.3)',\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline1').sparkline([25, 23, 26, 24, 25, 32, 30, 24, 19], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 40,\n            lineColor: '#5d9cec',\n            fillColor: 'rgba(93, 156, 236, 0.3)',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline2').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'bar',\n            height: '165',\n            barWidth: '10',\n            barSpacing: '3',\n            barColor: '#fb6d9d'\n        });\n        \n        $('#sparkline3').sparkline([20, 40, 30, 10], {\n            type: 'pie',\n            width: '165',\n            height: '165',\n            sliceColors: ['#dcdcdc', '#5d9cec', '#36404a', '#5fbeaa']\n        });\n    \n        $('#sparkline4').sparkline([0, 23, 43, 35, 44, 45, 56, 37, 40], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 50,\n            lineColor: '#fb6d9d',\n            fillColor: 'transparent',\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n    \n        $('#sparkline4').sparkline([25, 23, 26, 24, 25, 32, 30, 24, 19], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            chartRangeMax: 40,\n            lineColor: '#5d9cec',\n            fillColor: 'transparent',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,1)',\n            highlightSpotColor: 'rgba(0,0,0,1)'\n        });\n    \n        $('#sparkline6').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'bar',\n            height: '165',\n            barWidth: '10',\n            barSpacing: '3',\n            barColor: '#5fbeaa'\n        });\n    \n        $('#sparkline6').sparkline([3, 6, 7, 8, 6, 4, 7, 10, 12, 7, 4, 9, 12, 13, 11, 12], {\n            type: 'line',\n            width: '100%',\n            height: '165',\n            lineColor: '#fb6d9d',\n            fillColor: 'transparent',\n            composite: true,\n            highlightLineColor: 'rgba(0,0,0,.1)',\n            highlightSpotColor: 'rgba(0,0,0,.2)'\n        });\n        \n        \n    },\n        DrawMouseSpeed = function () {\n            var mrefreshinterval = 500; // update display every 500ms\n            var lastmousex=-1; \n            var lastmousey=-1;\n            var lastmousetime;\n            var mousetravel = 0;\n            var mpoints = [];\n            var mpoints_max = 30;\n            $('html').mousemove(function(e) {\n                var mousex = e.pageX;\n                var mousey = e.pageY;\n                if (lastmousex > -1) {\n                    mousetravel += Math.max( Math.abs(mousex-lastmousex), Math.abs(mousey-lastmousey) );\n                }\n                lastmousex = mousex;\n                lastmousey = mousey;\n            });\n            var mdraw = function() {\n                var md = new Date();\n                var timenow = md.getTime();\n                if (lastmousetime && lastmousetime!=timenow) {\n                    var pps = Math.round(mousetravel / (timenow - lastmousetime) * 1000);\n                    mpoints.push(pps);\n                    if (mpoints.length > mpoints_max)\n                        mpoints.splice(0,1);\n                    mousetravel = 0;\n                    $('#sparkline5').sparkline(mpoints, {\n                        tooltipSuffix: ' pixels per second',\n                        type: 'line',\n                        width: '100%',\n                        height: '165',\n                        chartRangeMax: 50,\n                        lineColor: '#1e88e5',\n                        fillColor: 'rgba(30, 136, 229, 0.3)',\n                        highlightLineColor: 'rgba(24,147,126,.1)',\n                        highlightSpotColor: 'rgba(24,147,126,.2)'\n                    });\n                }\n                lastmousetime = timenow;\n                setTimeout(mdraw, mrefreshinterval);\n            }\n            // We could use setInterval instead, but I prefer to do it this way\n            setTimeout(mdraw, mrefreshinterval); \n        };\n    \n    DrawSparkline();\n    DrawMouseSpeed();\n    \n    var resizeChart;\n\n    $(window).resize(function(e) {\n        clearTimeout(resizeChart);\n        resizeChart = setTimeout(function() {\n            DrawSparkline();\n            DrawMouseSpeed();\n        }, 300);\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.wizard-init.js",
    "content": "/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Form wizard page\n*/\n\n!function($) {\n    \"use strict\";\n\n    var FormWizard = function() {};\n\n    FormWizard.prototype.createBasic = function($form_container) {\n        $form_container.children(\"div\").steps({\n            headerTag: \"h3\",\n            bodyTag: \"section\",\n            transitionEffect: \"slideLeft\",\n            onFinishing: function (event, currentIndex) { \n                //NOTE: Here you can do form validation and return true or false based on your validation logic\n                console.log(\"Form has been validated!\");\n                return true; \n            }, \n            onFinished: function (event, currentIndex) {\n               //NOTE: Submit the form, if all validation passed.\n                console.log(\"Form can be submitted using submit method. E.g. $('#basic-form').submit()\"); \n                $(\"#basic-form\").submit();\n\n            }\n        });\n        return $form_container;\n    },\n    //creates form with validation\n    FormWizard.prototype.createValidatorForm = function($form_container) {\n        $form_container.validate({\n            errorPlacement: function errorPlacement(error, element) {\n                element.after(error);\n            }\n        });\n        $form_container.children(\"div\").steps({\n            headerTag: \"h3\",\n            bodyTag: \"section\",\n            transitionEffect: \"slideLeft\",\n            onStepChanging: function (event, currentIndex, newIndex) {\n                $form_container.validate().settings.ignore = \":disabled,:hidden\";\n                return $form_container.valid();\n            },\n            onFinishing: function (event, currentIndex) {\n                $form_container.validate().settings.ignore = \":disabled\";\n                return $form_container.valid();\n            },\n            onFinished: function (event, currentIndex) {\n                alert(\"Submitted!\");\n            }\n        });\n\n        return $form_container;\n    },\n    //creates vertical form\n    FormWizard.prototype.createVertical = function($form_container) {\n        $form_container.steps({\n            headerTag: \"h3\",\n            bodyTag: \"section\",\n            transitionEffect: \"fade\",\n            stepsOrientation: \"vertical\"\n        });\n        return $form_container;\n    },\n    FormWizard.prototype.init = function() {\n        //initialzing various forms\n\n        //basic form\n        this.createBasic($(\"#basic-form\"));\n\n        //form with validation\n        this.createValidatorForm($(\"#wizard-validation-form\"));\n\n        //vertical form\n        this.createVertical($(\"#wizard-vertical\"));\n    },\n    //init\n    $.FormWizard = new FormWizard, $.FormWizard.Constructor = FormWizard\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.FormWizard.init()\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jquery.xeditable.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Demo: Editable (Inline editing)\n* \n*/\n\n\n$(function(){\n\n    //modify buttons style\n    $.fn.editableform.buttons = \n    '<button type=\"submit\" class=\"btn btn-primary editable-submit btn-sm waves-effect waves-light\"><i class=\"md md-done\"></i></button>' +\n    '<button type=\"button\" class=\"btn btn-white editable-cancel btn-sm waves-effect\"><i class=\"md md-clear\"></i></button>';\n    \n    //editables \n    $('#username').editable({\n     type: 'text',\n     pk: 1,\n     name: 'username',\n     title: 'Enter username'\n   });\n    \n    $('#firstname').editable({\n      validate: function(value) {\n       if($.trim(value) == '') return 'This field is required';\n     }\n   });\n    \n    $('#sex').editable({\n      prepend: \"not selected\",\n      source: [\n      {value: 1, text: 'Male'},\n      {value: 2, text: 'Female'}\n      ],\n      display: function(value, sourceData) {\n       var colors = {\"\": \"#98a6ad\", 1: \"#5fbeaa\", 2: \"#5d9cec\"},\n       elem = $.grep(sourceData, function(o){return o.value == value;});\n\n       if(elem.length) {\n         $(this).text(elem[0].text).css(\"color\", colors[value]);\n       } else {\n         $(this).empty();\n       }\n     }\n   });\n    \n    $('#status').editable();\n    \n    $('#group').editable({\n      showbuttons: false\n    });\n\n    $('#dob').editable();\n\n    $('#comments').editable({\n      showbuttons: 'bottom'\n    });\n\n    //inline\n\n\n  $('#inline-username').editable({\n     type: 'text',\n     pk: 1,\n     name: 'username',\n     title: 'Enter username',\n     mode: 'inline'\n   });\n    \n    $('#inline-firstname').editable({\n      validate: function(value) {\n       if($.trim(value) == '') return 'This field is required';\n     },\n     mode: 'inline'\n   });\n    \n    $('#inline-sex').editable({\n      prepend: \"not selected\",\n      mode: 'inline',\n      source: [\n      {value: 1, text: 'Male'},\n      {value: 2, text: 'Female'}\n      ],\n      display: function(value, sourceData) {\n       var colors = {\"\": \"#98a6ad\", 1: \"#5fbeaa\", 2: \"#5d9cec\"},\n       elem = $.grep(sourceData, function(o){return o.value == value;});\n\n       if(elem.length) {\n         $(this).text(elem[0].text).css(\"color\", colors[value]);\n       } else {\n         $(this).empty();\n       }\n     }\n   });\n    \n    $('#inline-status').editable({\n        mode: 'inline',\n        inputclass: 'string'\n    });\n    \n    $('#inline-group').editable({\n      showbuttons: false,\n      mode: 'inline'\n    });\n\n    $('#inline-dob').editable({mode: 'inline'});\n\n    $('#inline-comments').editable({\n      showbuttons: 'bottom',\n      mode: 'inline'\n    });\n\n\n\n  });"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/jvectormap.init.js",
    "content": "/**\n * Theme: Ubold Admin Template\n * Author: Coderthemes\n * VectorMap\n */\n\n! function($) {\n\t\"use strict\";\n\n\tvar VectorMap = function() {\n\t};\n\n\tVectorMap.prototype.init = function() {\n\t\t//various examples\n\t\t$('#world-map-markers').vectorMap({\n\t\t\tmap : 'world_mill_en',\n\t\t\tscaleColors : ['#ea6c9c', '#ea6c9c'],\n\t\t\tnormalizeFunction : 'polynomial',\n\t\t\thoverOpacity : 0.7,\n\t\t\thoverColor : false,\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#566676'\n\t\t\t\t}\n\t\t\t},\n\t\t\t markerStyle: {\n                initial: {\n                    r: 9,\n                    'fill': '#a288d5',\n                    'fill-opacity': 0.9,\n                    'stroke': '#fff',\n                    'stroke-width' : 7,\n                    'stroke-opacity': 0.4\n                },\n\n                hover: {\n                    'stroke': '#fff',\n                    'fill-opacity': 1,\n                    'stroke-width': 1.5\n                }\n            },\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tmarkers : [{\n\t\t\t\tlatLng : [41.90, 12.45],\n\t\t\t\tname : 'Vatican City'\n\t\t\t}, {\n\t\t\t\tlatLng : [43.73, 7.41],\n\t\t\t\tname : 'Monaco'\n\t\t\t}, {\n\t\t\t\tlatLng : [-0.52, 166.93],\n\t\t\t\tname : 'Nauru'\n\t\t\t}, {\n\t\t\t\tlatLng : [-8.51, 179.21],\n\t\t\t\tname : 'Tuvalu'\n\t\t\t}, {\n\t\t\t\tlatLng : [43.93, 12.46],\n\t\t\t\tname : 'San Marino'\n\t\t\t}, {\n\t\t\t\tlatLng : [47.14, 9.52],\n\t\t\t\tname : 'Liechtenstein'\n\t\t\t}, {\n\t\t\t\tlatLng : [7.11, 171.06],\n\t\t\t\tname : 'Marshall Islands'\n\t\t\t}, {\n\t\t\t\tlatLng : [17.3, -62.73],\n\t\t\t\tname : 'Saint Kitts and Nevis'\n\t\t\t}, {\n\t\t\t\tlatLng : [3.2, 73.22],\n\t\t\t\tname : 'Maldives'\n\t\t\t}, {\n\t\t\t\tlatLng : [35.88, 14.5],\n\t\t\t\tname : 'Malta'\n\t\t\t}, {\n\t\t\t\tlatLng : [12.05, -61.75],\n\t\t\t\tname : 'Grenada'\n\t\t\t}, {\n\t\t\t\tlatLng : [13.16, -61.23],\n\t\t\t\tname : 'Saint Vincent and the Grenadines'\n\t\t\t}, {\n\t\t\t\tlatLng : [13.16, -59.55],\n\t\t\t\tname : 'Barbados'\n\t\t\t}, {\n\t\t\t\tlatLng : [17.11, -61.85],\n\t\t\t\tname : 'Antigua and Barbuda'\n\t\t\t}, {\n\t\t\t\tlatLng : [-4.61, 55.45],\n\t\t\t\tname : 'Seychelles'\n\t\t\t}, {\n\t\t\t\tlatLng : [7.35, 134.46],\n\t\t\t\tname : 'Palau'\n\t\t\t}, {\n\t\t\t\tlatLng : [42.5, 1.51],\n\t\t\t\tname : 'Andorra'\n\t\t\t}, {\n\t\t\t\tlatLng : [14.01, -60.98],\n\t\t\t\tname : 'Saint Lucia'\n\t\t\t}, {\n\t\t\t\tlatLng : [6.91, 158.18],\n\t\t\t\tname : 'Federated States of Micronesia'\n\t\t\t}, {\n\t\t\t\tlatLng : [1.3, 103.8],\n\t\t\t\tname : 'Singapore'\n\t\t\t}, {\n\t\t\t\tlatLng : [1.46, 173.03],\n\t\t\t\tname : 'Kiribati'\n\t\t\t}, {\n\t\t\t\tlatLng : [-21.13, -175.2],\n\t\t\t\tname : 'Tonga'\n\t\t\t}, {\n\t\t\t\tlatLng : [15.3, -61.38],\n\t\t\t\tname : 'Dominica'\n\t\t\t}, {\n\t\t\t\tlatLng : [-20.2, 57.5],\n\t\t\t\tname : 'Mauritius'\n\t\t\t}, {\n\t\t\t\tlatLng : [26.02, 50.55],\n\t\t\t\tname : 'Bahrain'\n\t\t\t}, {\n\t\t\t\tlatLng : [0.33, 6.73],\n\t\t\t\tname : 'São Tomé and Príncipe'\n\t\t\t}]\n\t\t});\n\n\t\t$('#india').vectorMap({\n\t\t\tmap : 'in_mill',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#5d9cec'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$('#uk').vectorMap({\n\t\t\tmap : 'uk_mill_en',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#81c868'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$('#usa').vectorMap({\n\t\t\tmap : 'us_aea_en',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#fb6d9d'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$('#chicago').vectorMap({\n\t\t\tmap : 'us-il-chicago_mill_en',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#34d3eb'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\n\t\t$('#australia').vectorMap({\n\t\t\tmap : 'au_mill',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#ffbd4a'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t$('#canada').vectorMap({\n\t\t\tmap : 'ca_lcc',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#f05050'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t$('#germany').vectorMap({\n\t\t\tmap : 'de_mill',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#7266ba'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t$('#asia').vectorMap({\n\t\t\tmap : 'asia_mill',\n\t\t\tbackgroundColor : 'transparent',\n\t\t\tregionStyle : {\n\t\t\t\tinitial : {\n\t\t\t\t\tfill : '#4c5667'\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t//init\n\t$.VectorMap = new VectorMap, $.VectorMap.Constructor =\n\tVectorMap\n}(window.jQuery),\n\n//initializing\nfunction($) {\n\t\"use strict\";\n\t$.VectorMap.init()\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/morris.init.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Morris Chart\n*/\n\n!function($) {\n    \"use strict\";\n\n    var MorrisCharts = function() {};\n\n    //creates line chart\n    MorrisCharts.prototype.createLineChart = function(element, data, xkey, ykeys, labels, opacity, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Line({\n          element: element,\n          data: data,\n          xkey: xkey,\n          ykeys: ykeys,\n          labels: labels,\n          fillOpacity: opacity,\n          pointFillColors: Pfillcolor,\n          pointStrokeColors: Pstockcolor,\n          behaveLikeLine: true,\n          gridLineColor: '#eef0f2',\n          hideHover: 'auto',\n          resize: true, //defaulted to true\n          lineColors: lineColors\n        });\n    },\n    //creates area chart\n    MorrisCharts.prototype.createAreaChart = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 0,\n            lineWidth: 0,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n    },\n    //creates area chart with dotted\n    MorrisCharts.prototype.createAreaChartDotted = function(element, pointSize, lineWidth, data, xkey, ykeys, labels, Pfillcolor, Pstockcolor, lineColors) {\n        Morris.Area({\n            element: element,\n            pointSize: 3,\n            lineWidth: 1,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            pointFillColors: Pfillcolor,\n            pointStrokeColors: Pstockcolor,\n            resize: true,\n            gridLineColor: '#eef0f2',\n            lineColors: lineColors\n        });\n    },\n    //creates Bar chart\n    MorrisCharts.prototype.createBarChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n    //creates Stacked chart\n    MorrisCharts.prototype.createStackedChart  = function(element, data, xkey, ykeys, labels, lineColors) {\n        Morris.Bar({\n            element: element,\n            data: data,\n            xkey: xkey,\n            ykeys: ykeys,\n            stacked: true,\n            labels: labels,\n            hideHover: 'auto',\n            resize: true, //defaulted to true\n            gridLineColor: '#eeeeee',\n            barColors: lineColors\n        });\n    },\n    //creates Donut chart\n    MorrisCharts.prototype.createDonutChart = function(element, data, colors) {\n        Morris.Donut({\n            element: element,\n            data: data,\n            resize: true, //defaulted to true\n            colors: colors\n        });\n    },\n    MorrisCharts.prototype.init = function() {\n\n        //create line chart\n        var $data  = [\n            { y: '2010', a: 30,  b: 20 , c: 10 },\n            { y: '2011', a: 50,  b: 40 , c: 30 },\n            { y: '2012', a: 75,  b: 65 , c: 50 },\n            { y: '2013', a: 50,  b: 40 , c: 22 },\n            { y: '2014', a: 75,  b: 65 , c: 50 },\n            { y: '2015', a: 100, b: 90 , c: 65 }\n          ];\n        this.createLineChart('morris-line-example', $data, 'y', ['a', 'b','c'], ['Series A', 'Series B', 'Series C'],['0.1'],['#ffffff'],['#999999'], ['#36404a', '#5fbeaa', '#5d9cec']);\n\n        //creating area chart\n        var $areaData = [\n                { y: '2009', a: 10, b: 20, c:30 },\n                { y: '2010', a: 75, b: 65, c:30 },\n                { y: '2011', a: 50, b: 40, c:30 },\n                { y: '2012', a: 75, b: 65, c:30 },\n                { y: '2013', a: 50, b: 40, c:30 },\n                { y: '2014', a: 75, b: 65, c:30 },\n                { y: '2015', a: 90, b: 60, c:30 }\n            ];\n        this.createAreaChart('morris-area-example', 0, 0, $areaData, 'y', ['a', 'b','c'], ['Series A', 'Series B','Series C'], ['#5fbeaa', '#5d9cec', '#bbbbbb']);\n\n        //creating area chart with dotted\n        var $areaDotData = [\n                { y: '2009', a: 10, b: 20 },\n                { y: '2010', a: 75,  b: 65 },\n                { y: '2011', a: 50,  b: 40 },\n                { y: '2012', a: 75,  b: 65 },\n                { y: '2013', a: 50,  b: 40 },\n                { y: '2014', a: 75,  b: 65 },\n                { y: '2015', a: 90, b: 60 }\n            ];\n        this.createAreaChartDotted('morris-area-with-dotted', 0, 0, $areaDotData, 'y', ['a', 'b'], ['Series A', 'Series B'],['#ffffff'],['#999999'], ['#36404a', '#5d9cec']);\n\n        //creating bar chart\n        var $barData  = [\n            { y: '2009', a: 100, b: 90 , c: 40 },\n            { y: '2010', a: 75,  b: 65 , c: 20 },\n            { y: '2011', a: 50,  b: 40 , c: 50 },\n            { y: '2012', a: 75,  b: 65 , c: 95 },\n            { y: '2013', a: 50,  b: 40 , c: 22 },\n            { y: '2014', a: 75,  b: 65 , c: 56 },\n            { y: '2015', a: 100, b: 90 , c: 60 }\n        ];\n        this.createBarChart('morris-bar-example', $barData, 'y', ['a', 'b', 'c'], ['Series A', 'Series B', 'Series C'], ['#5fbeaa', '#5d9cec', '#ebeff2']);\n\n        //creating Stacked chart\n        var $stckedData  = [\n            { y: '2005', a: 45, b: 180 },\n            { y: '2006', a: 75,  b: 65 },\n            { y: '2007', a: 100, b: 90 },\n            { y: '2008', a: 75,  b: 65 },\n            { y: '2009', a: 100, b: 90 },\n            { y: '2010', a: 75,  b: 65 },\n            { y: '2011', a: 50,  b: 40 },\n            { y: '2012', a: 75,  b: 65 },\n            { y: '2013', a: 50,  b: 40 },\n            { y: '2014', a: 75,  b: 65 },\n            { y: '2015', a: 100, b: 90 }\n        ];\n        this.createStackedChart('morris-bar-stacked', $stckedData, 'y', ['a', 'b'], ['Series A', 'Series B'], ['#5d9cec', '#ebeff2']);\n\n        //creating donut chart\n        var $donutData = [\n                {label: \"Download Sales\", value: 12},\n                {label: \"In-Store Sales\", value: 30},\n                {label: \"Mail-Order Sales\", value: 20}\n            ];\n        this.createDonutChart('morris-donut-example', $donutData, ['#ebeff2', '#5fbeaa', '#5d9cec']);\n    },\n    //init\n    $.MorrisCharts = new MorrisCharts, $.MorrisCharts.Constructor = MorrisCharts\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.MorrisCharts.init();\n}(window.jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/pages/nestable.js",
    "content": "\n/**\n* Theme: Ubold Admin Template\n* Author: Coderthemes\n* Nestable Component\n*/\n\n!function($) {\n    \"use strict\";\n\n    var Nestable = function() {};\n\n    Nestable.prototype.updateOutput = function (e) {\n        var list = e.length ? e : $(e.target),\n            output = list.data('output');\n        if (window.JSON) {\n            output.val(window.JSON.stringify(list.nestable('serialize'))); //, null, 2));\n        } else {\n            output.val('JSON browser support required for this demo.');\n        }\n    },\n    //init\n    Nestable.prototype.init = function() {\n        // activate Nestable for list 1\n        $('#nestable_list_1').nestable({\n            group: 1\n        }).on('change', this.updateOutput);\n\n        // activate Nestable for list 2\n        $('#nestable_list_2').nestable({\n            group: 1\n        }).on('change', this.updateOutput);\n\n        // output initial serialised data\n        this.updateOutput($('#nestable_list_1').data('output', $('#nestable_list_1_output')));\n        this.updateOutput($('#nestable_list_2').data('output', $('#nestable_list_2_output')));\n\n        $('#nestable_list_menu').on('click', function (e) {\n            var target = $(e.target),\n                action = target.data('action');\n            if (action === 'expand-all') {\n                $('.dd').nestable('expandAll');\n            }\n            if (action === 'collapse-all') {\n                $('.dd').nestable('collapseAll');\n            }\n        });\n\n        $('#nestable_list_3').nestable();\n    },\n    //init\n    $.Nestable = new Nestable, $.Nestable.Constructor = Nestable\n}(window.jQuery),\n\n//initializing \nfunction($) {\n    \"use strict\";\n    $.Nestable.init()\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/autoNumeric/autoNumeric.js",
    "content": "﻿/**\n * autoNumeric.js\n * @author: Bob Knothe\n * @author: Sokolov Yura\n * @version: 1.9.39 - 2015-07-17 GMT 5:00 PM / 19:00\n *\n * Created by Robert J. Knothe on 2010-10-25. Please report any bugs to https://github.com/BobKnothe/autoNumeric\n * Contributor by Sokolov Yura on 2010-11-07\n *\n * Copyright (c) 2011 Robert J. Knothe http://www.decorplanit.com/plugin/\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n(function ($) {\n    \"use strict\";\n    /*jslint browser: true*/\n    /*global jQuery: false*/\n    /*Cross browser routine for getting selected range/cursor position\n     */\n\n   /**\n     * Cross browser routine for getting selected range/cursor position\n     */\n    function getElementSelection(that) {\n        var position = {};\n        if (that.selectionStart === undefined) {\n            that.focus();\n            var select = document.selection.createRange();\n            position.length = select.text.length;\n            select.moveStart('character', -that.value.length);\n            position.end = select.text.length;\n            position.start = position.end - position.length;\n        } else {\n            position.start = that.selectionStart;\n            position.end = that.selectionEnd;\n            position.length = position.end - position.start;\n        }\n        return position;\n    }\n\n    /**\n     * Cross browser routine for setting selected range/cursor position\n     */\n    function setElementSelection(that, start, end) {\n        if (that.selectionStart === undefined) {\n            that.focus();\n            var r = that.createTextRange();\n            r.collapse(true);\n            r.moveEnd('character', end);\n            r.moveStart('character', start);\n            r.select();\n        } else {\n            that.selectionStart = start;\n            that.selectionEnd = end;\n        }\n    }\n\n    /**\n     * run callbacks in parameters if any\n     * any parameter could be a callback:\n     * - a function, which invoked with jQuery element, parameters and this parameter name and returns parameter value\n     * - a name of function, attached to $(selector).autoNumeric.functionName(){} - which was called previously\n     */\n    function runCallbacks($this, settings) {\n        /**\n         * loops through the settings object (option array) to find the following\n         * k = option name example k=aNum\n         * val = option value example val=0123456789\n         */\n        $.each(settings, function (k, val) {\n            if (typeof val === 'function') {\n                settings[k] = val($this, settings, k);\n            } else if (typeof $this.autoNumeric[val] === 'function') {\n                /**\n                 * calls the attached function from the html5 data example: data-a-sign=\"functionName\"\n                 */\n                settings[k] = $this.autoNumeric[val]($this, settings, k);\n            }\n        });\n    }\n\n    /**\n     * Converts the vMin, vMax & mDec string to numeric value\n     */\n    function convertKeyToNumber(settings, key) {\n        if (typeof (settings[key]) === 'string') {\n            settings[key] *= 1;\n        }\n    }\n\n    /**\n     * Preparing user defined options for further usage\n     * merge them with defaults appropriately\n     */\n    function autoCode($this, settings) {\n        runCallbacks($this, settings);\n        settings.tagList = ['b', 'caption', 'cite', 'code', 'dd', 'del', 'div', 'dfn', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ins', 'kdb', 'label', 'li', 'output', 'p', 'q', 's', 'sample', 'span', 'strong', 'td', 'th', 'u', 'var'];\n        var vmax = settings.vMax.toString().split('.'),\n            vmin = (!settings.vMin && settings.vMin !== 0) ? [] : settings.vMin.toString().split('.');\n        convertKeyToNumber(settings, 'vMax');\n        convertKeyToNumber(settings, 'vMin');\n        convertKeyToNumber(settings, 'mDec'); /** set mDec if not defined by user */\n        settings.mDec = (settings.mRound === 'CHF') ? '2' : settings.mDec;\n        settings.allowLeading = true;\n        settings.aNeg = settings.vMin < 0 ? '-' : '';\n        vmax[0] = vmax[0].replace('-', '');\n        vmin[0] = vmin[0].replace('-', '');\n        settings.mInt = Math.max(vmax[0].length, vmin[0].length, 1);\n        if (settings.mDec === null) {\n            var vmaxLength = 0,\n                vminLength = 0;\n            if (vmax[1]) {\n                vmaxLength = vmax[1].length;\n            }\n            if (vmin[1]) {\n                vminLength = vmin[1].length;\n            }\n            settings.mDec = Math.max(vmaxLength, vminLength);\n        } /** set alternative decimal separator key */\n        if (settings.altDec === null && settings.mDec > 0) {\n            if (settings.aDec === '.' && settings.aSep !== ',') {\n                settings.altDec = ',';\n            } else if (settings.aDec === ',' && settings.aSep !== '.') {\n                settings.altDec = '.';\n            }\n        }\n        /** cache regexps for autoStrip */\n        var aNegReg = settings.aNeg ? '([-\\\\' + settings.aNeg + ']?)' : '(-?)';\n        settings.aNegRegAutoStrip = aNegReg;\n        settings.skipFirstAutoStrip = new RegExp(aNegReg + '[^-' + (settings.aNeg ? '\\\\' + settings.aNeg : '') + '\\\\' + settings.aDec + '\\\\d]' + '.*?(\\\\d|\\\\' + settings.aDec + '\\\\d)');\n        settings.skipLastAutoStrip = new RegExp('(\\\\d\\\\' + settings.aDec + '?)[^\\\\' + settings.aDec + '\\\\d]\\\\D*$');\n        var allowed = '-' + settings.aNum + '\\\\' + settings.aDec;\n        settings.allowedAutoStrip = new RegExp('[^' + allowed + ']', 'gi');\n        settings.numRegAutoStrip = new RegExp(aNegReg + '(?:\\\\' + settings.aDec + '?(\\\\d+\\\\' + settings.aDec + '\\\\d+)|(\\\\d*(?:\\\\' + settings.aDec + '\\\\d*)?))');\n        return settings;\n    }\n\n    /**\n     * strips all unwanted characters and leave only a number alert\n     */\n    function autoStrip(s, settings, strip_zero) {\n        if (settings.aSign) { /** remove currency sign */\n            while (s.indexOf(settings.aSign) > -1) {\n                s = s.replace(settings.aSign, '');\n            }\n        }\n        s = s.replace(settings.skipFirstAutoStrip, '$1$2'); /** first replace anything before digits */\n        s = s.replace(settings.skipLastAutoStrip, '$1'); /** then replace anything after digits */\n        s = s.replace(settings.allowedAutoStrip, ''); /** then remove any uninterested characters */\n        if (settings.altDec) {\n            s = s.replace(settings.altDec, settings.aDec);\n        } /** get only number string */\n        var m = s.match(settings.numRegAutoStrip);\n        s = m ? [m[1], m[2], m[3]].join('') : '';\n        if ((settings.lZero === 'allow' || settings.lZero === 'keep') && strip_zero !== 'strip') {\n            var parts = [],\n                nSign = '';\n            parts = s.split(settings.aDec);\n            if (parts[0].indexOf('-') !== -1) {\n                nSign = '-';\n                parts[0] = parts[0].replace('-', '');\n            }\n            if (parts[0].length > settings.mInt && parts[0].charAt(0) === '0') { /** strip leading zero if need */\n                parts[0] = parts[0].slice(1);\n            }\n            s = nSign + parts.join(settings.aDec);\n        }\n        if ((strip_zero && settings.lZero === 'deny') || (strip_zero && settings.lZero === 'allow' && settings.allowLeading === false)) {\n            var strip_reg = '^' + settings.aNegRegAutoStrip + '0*(\\\\d' + (strip_zero === 'leading' ? ')' : '|$)');\n            strip_reg = new RegExp(strip_reg);\n            s = s.replace(strip_reg, '$1$2');\n        }\n        return s;\n    }\n\n    /**\n     * places or removes brackets on negative values\n     * works only when with pSign: 'p'\n     */\n    function negativeBracket(s, settings) {\n        if (settings.pSign === 'p') {\n            var brackets = settings.nBracket.split(',');\n            if (!settings.hasFocus && !settings.removeBrackets) {\n                s = s.replace(settings.aNeg, '');\n                s = brackets[0] + s + brackets[1];\n            } else if ((settings.hasFocus && s.charAt(0) === brackets[0]) || (settings.removeBrackets && s.charAt(0) === brackets[0])) {\n                s = s.replace(brackets[0], settings.aNeg);\n                s = s.replace(brackets[1], '');\n            }\n        }\n        return s;\n    }\n\n    /**\n     * function to handle numbers less than 0 that are stored in Exponential notation ex: .0000001 stored as 1e-7\n     */\n    function checkValue(value, settings) {\n        if (value) {\n            var checkSmall = +value;\n            if (checkSmall < 0.000001 && checkSmall > -1) {\n                value = +value;\n                if (value < 0.000001 && value > 0) {\n                    value = (value + 10).toString();\n                    value = value.substring(1);\n                }\n                if (value < 0 && value > -1) {\n                    value = (value - 10).toString();\n                    value = '-' + value.substring(2);\n                }\n                value = value.toString();\n            } else {\n                var parts = value.split('.');\n                if (parts[1] !== undefined) {\n                    if (+parts[1] === 0) {\n                        value = parts[0];\n                    } else {\n                        parts[1] = parts[1].replace(/0*$/, '');\n                        value = parts.join('.');\n                    }\n                }\n            }\n        }\n        return (settings.lZero === 'keep') ? value : value.replace(/^0*(\\d)/, '$1');\n    }\n\n    /**\n     * prepare number string to be converted to real number\n     */\n    function fixNumber(s, aDec, aNeg) {\n        if (aDec && aDec !== '.') {\n            s = s.replace(aDec, '.');\n        }\n        if (aNeg && aNeg !== '-') {\n            s = s.replace(aNeg, '-');\n        }\n        if (!s.match(/\\d/)) {\n            s += '0';\n        }\n        return s;\n    }\n\n    /**\n     * prepare real number to be converted to our format\n     */\n    function presentNumber(s, aDec, aNeg) {\n        if (aNeg && aNeg !== '-') {\n            s = s.replace('-', aNeg);\n        }\n        if (aDec && aDec !== '.') {\n            s = s.replace('.', aDec);\n        }\n        return s;\n    }\n\n    /**\n     * private function to check for empty value\n     */\n    function checkEmpty(iv, settings, signOnEmpty) {\n        if (iv === '' || iv === settings.aNeg) {\n            if (settings.wEmpty === 'zero') {\n                return iv + '0';\n            }\n            if (settings.wEmpty === 'sign' || signOnEmpty) {\n                return iv + settings.aSign;\n            }\n            return iv;\n        }\n        return null;\n    }\n\n    /**\n     * private function that formats our number\n     */\n    function autoGroup(iv, settings) {\n        iv = autoStrip(iv, settings);\n        var testNeg = iv.replace(',', '.'),\n            empty = checkEmpty(iv, settings, true);\n        if (empty !== null) {\n            return empty;\n        }\n        var digitalGroup = '';\n        if (settings.dGroup === 2) {\n            digitalGroup = /(\\d)((\\d)(\\d{2}?)+)$/;\n        } else if (settings.dGroup === 4) {\n            digitalGroup = /(\\d)((\\d{4}?)+)$/;\n        } else {\n            digitalGroup = /(\\d)((\\d{3}?)+)$/;\n        } /** splits the string at the decimal string */\n        var ivSplit = iv.split(settings.aDec);\n        if (settings.altDec && ivSplit.length === 1) {\n            ivSplit = iv.split(settings.altDec);\n        } /** assigns the whole number to the a variable (s) */\n        var s = ivSplit[0];\n        if (settings.aSep) {\n            while (digitalGroup.test(s)) { /** re-inserts the thousand separator via a regular expression */\n                s = s.replace(digitalGroup, '$1' + settings.aSep + '$2');\n            }\n        }\n        if (settings.mDec !== 0 && ivSplit.length > 1) {\n            if (ivSplit[1].length > settings.mDec) {\n                ivSplit[1] = ivSplit[1].substring(0, settings.mDec);\n            } /** joins the whole number with the decimal value */\n            iv = s + settings.aDec + ivSplit[1];\n        } else { /** if whole numbers only */\n            iv = s;\n        }\n        if (settings.aSign) {\n            var has_aNeg = iv.indexOf(settings.aNeg) !== -1;\n            iv = iv.replace(settings.aNeg, '');\n            iv = settings.pSign === 'p' ? settings.aSign + iv : iv + settings.aSign;\n            if (has_aNeg) {\n                iv = settings.aNeg + iv;\n            }\n        }\n        if (testNeg < 0 && settings.nBracket !== null) { /** removes the negative sign and places brackets */\n            iv = negativeBracket(iv, settings);\n        }\n        return iv;\n    }\n\n    /**\n     * round number after setting by pasting or $().autoNumericSet()\n     * private function for round the number\n     * please note this handled as text - JavaScript math function can return inaccurate values\n     * also this offers multiple rounding methods that are not easily accomplished in JavaScript\n     */\n    function autoRound(iv, settings) { /** value to string */\n        iv = (iv === '') ? '0' : iv.toString();\n        convertKeyToNumber(settings, 'mDec'); /** set mDec to number needed when mDec set by 'update method */\n        if (settings.mRound === 'CHF') {\n            iv = (Math.round(iv * 20) / 20).toString();\n        }\n        var ivRounded = '',\n            i = 0,\n            nSign = '',\n            rDec = (typeof (settings.aPad) === 'boolean' || settings.aPad === null) ? (settings.aPad ? settings.mDec : 0) : +settings.aPad;\n        var truncateZeros = function (ivRounded) { /** truncate not needed zeros */\n            var regex = (rDec === 0) ? (/(\\.(?:\\d*[1-9])?)0*$/) : rDec === 1 ? (/(\\.\\d(?:\\d*[1-9])?)0*$/) : new RegExp('(\\\\.\\\\d{' + rDec + '}(?:\\\\d*[1-9])?)0*$');\n            ivRounded = ivRounded.replace(regex, '$1'); /** If there are no decimal places, we don't need a decimal point at the end */\n            if (rDec === 0) {\n                ivRounded = ivRounded.replace(/\\.$/, '');\n            }\n            return ivRounded;\n        };\n        if (iv.charAt(0) === '-') { /** Checks if the iv (input Value)is a negative value */\n            nSign = '-';\n            iv = iv.replace('-', ''); /** removes the negative sign will be added back later if required */\n        }\n        if (!iv.match(/^\\d/)) { /** append a zero if first character is not a digit (then it is likely to be a dot)*/\n            iv = '0' + iv;\n        }\n        if (nSign === '-' && +iv === 0) { /** determines if the value is zero - if zero no negative sign */\n            nSign = '';\n        }\n        if ((+iv > 0 && settings.lZero !== 'keep') || (iv.length > 0 && settings.lZero === 'allow')) { /** trims leading zero's if needed */\n            iv = iv.replace(/^0*(\\d)/, '$1');\n        }\n        var dPos = iv.lastIndexOf('.'),\n            /** virtual decimal position */\n            vdPos = (dPos === -1) ? iv.length - 1 : dPos,\n            /** checks decimal places to determine if rounding is required */\n            cDec = (iv.length - 1) - vdPos; /** check if no rounding is required */\n        if (cDec <= settings.mDec) {\n            ivRounded = iv; /** check if we need to pad with zeros */\n            if (cDec < rDec) {\n                if (dPos === -1) {\n                    ivRounded += '.';\n                }\n                var zeros = '000000';\n                while (cDec < rDec) {\n                    zeros = zeros.substring(0, rDec - cDec);\n                    ivRounded += zeros;\n                    cDec += zeros.length;\n                }\n            } else if (cDec > rDec) {\n                ivRounded = truncateZeros(ivRounded);\n            } else if (cDec === 0 && rDec === 0) {\n                ivRounded = ivRounded.replace(/\\.$/, '');\n            }\n            if (settings.mRound !== 'CHF') {\n                return (+ivRounded === 0) ? ivRounded : nSign + ivRounded;\n            }\n            if (settings.mRound === 'CHF') {\n                dPos = ivRounded.lastIndexOf('.');\n                iv = ivRounded;\n            }\n\n        } /** rounded length of the string after rounding */\n        var rLength = dPos + settings.mDec,\n            tRound = +iv.charAt(rLength + 1),\n            ivArray = iv.substring(0, rLength + 1).split(''),\n            odd = (iv.charAt(rLength) === '.') ? (iv.charAt(rLength - 1) % 2) : (iv.charAt(rLength) % 2),\n            onePass = true;\n        if (odd !== 1) {\n            odd = (odd === 0 && (iv.substring(rLength + 2, iv.length) > 0)) ? 1 : 0;\n        }\n        /*jslint white: true*/\n        if ((tRound > 4 && settings.mRound === 'S') || /**                      Round half up symmetric */\n            (tRound > 4 && settings.mRound === 'A' && nSign === '') || /**      Round half up asymmetric positive values */\n            (tRound > 5 && settings.mRound === 'A' && nSign === '-') || /**     Round half up asymmetric negative values */\n            (tRound > 5 && settings.mRound === 's') || /**                      Round half down symmetric */\n            (tRound > 5 && settings.mRound === 'a' && nSign === '') || /**      Round half down asymmetric positive values */\n            (tRound > 4 && settings.mRound === 'a' && nSign === '-') || /**     Round half down asymmetric negative values */\n            (tRound > 5 && settings.mRound === 'B') || /**                      Round half even \"Banker's Rounding\" */\n            (tRound === 5 && settings.mRound === 'B' && odd === 1) || /**       Round half even \"Banker's Rounding\" */\n            (tRound > 0 && settings.mRound === 'C' && nSign === '') || /**      Round to ceiling toward positive infinite */\n            (tRound > 0 && settings.mRound === 'F' && nSign === '-') || /**     Round to floor toward negative infinite */\n            (tRound > 0 && settings.mRound === 'U') || /**                      round up away from zero */\n            (settings.mRound === 'CHF')) { /**                                  Round Swiss FRanc */\n            /*jslint white: false*/\n            for (i = (ivArray.length - 1); i >= 0; i -= 1) { /** Round up the last digit if required, and continue until no more 9's are found */\n                if (ivArray[i] !== '.') {\n                    if (settings.mRound === 'CHF' && ivArray[i] <= 2 && onePass) {\n                        ivArray[i] = 0;\n                        onePass = false;\n                        break;\n                    }\n                    if (settings.mRound === 'CHF' && ivArray[i] <= 7 && onePass) {\n                        ivArray[i] = 5;\n                        onePass = false;\n                        break;\n                    }\n                    if (settings.mRound === 'CHF' && onePass) {\n                        ivArray[i] = 10;\n                        onePass = false;\n                    } else {\n                        ivArray[i] = +ivArray[i] + 1;\n                    }\n                    if (ivArray[i] < 10) {\n                        break;\n                    }\n                    if (i > 0) {\n                        ivArray[i] = '0';\n                    }\n                }\n            }\n        }\n        ivArray = ivArray.slice(0, rLength + 1); /** Reconstruct the string, converting any 10's to 0's */\n        ivRounded = truncateZeros(ivArray.join('')); /** return rounded value */\n        return (+ivRounded === 0) ? ivRounded : nSign + ivRounded;\n    }\n\n    /**\n     * truncate decimal part of a number\n     */\n    function truncateDecimal(s, settings, paste) {\n        var aDec = settings.aDec,\n            mDec = settings.mDec;\n        s = (paste === 'paste') ? autoRound(s, settings) : s;\n        if (aDec && mDec) {\n            var parts = s.split(aDec);\n            /** truncate decimal part to satisfying length\n             * cause we would round it anyway */\n            if (parts[1] && parts[1].length > mDec) {\n                if (mDec > 0) {\n                    parts[1] = parts[1].substring(0, mDec);\n                    s = parts.join(aDec);\n                } else {\n                    s = parts[0];\n                }\n            }\n        }\n        return s;\n    }\n\n    /**\n     * checking that number satisfy format conditions\n     * and lays between settings.vMin and settings.vMax\n     * and the string length does not exceed the digits in settings.vMin and settings.vMax\n     */\n    function autoCheck(s, settings) {\n        s = autoStrip(s, settings);\n        s = truncateDecimal(s, settings);\n        s = fixNumber(s, settings.aDec, settings.aNeg);\n        var value = +s;\n        return value >= settings.vMin && value <= settings.vMax;\n    }\n\n    /**\n     * Holder object for field properties\n     */\n    function AutoNumericHolder(that, settings) {\n        this.settings = settings;\n        this.that = that;\n        this.$that = $(that);\n        this.formatted = false;\n        this.settingsClone = autoCode(this.$that, this.settings);\n        this.value = that.value;\n    }\n    AutoNumericHolder.prototype = {\n        init: function (e) {\n            this.value = this.that.value;\n            this.settingsClone = autoCode(this.$that, this.settings);\n            this.ctrlKey = e.ctrlKey;\n            this.cmdKey = e.metaKey;\n            this.shiftKey = e.shiftKey;\n            this.selection = getElementSelection(this.that); /** keypress event overwrites meaningful value of e.keyCode */\n            if (e.type === 'keydown' || e.type === 'keyup') {\n                this.kdCode = e.keyCode;\n            }\n            this.which = e.which;\n            this.processed = false;\n            this.formatted = false;\n        },\n        setSelection: function (start, end, setReal) {\n            start = Math.max(start, 0);\n            end = Math.min(end, this.that.value.length);\n            this.selection = {\n                start: start,\n                end: end,\n                length: end - start\n            };\n            if (setReal === undefined || setReal) {\n                setElementSelection(this.that, start, end);\n            }\n        },\n        setPosition: function (pos, setReal) {\n            this.setSelection(pos, pos, setReal);\n        },\n        getBeforeAfter: function () {\n            var value = this.value,\n                left = value.substring(0, this.selection.start),\n                right = value.substring(this.selection.end, value.length);\n            return [left, right];\n        },\n        getBeforeAfterStriped: function () {\n            var parts = this.getBeforeAfter();\n            parts[0] = autoStrip(parts[0], this.settingsClone);\n            parts[1] = autoStrip(parts[1], this.settingsClone);\n            return parts;\n        },\n\n        /**\n         * strip parts from excess characters and leading zeroes\n         */\n        normalizeParts: function (left, right) {\n            var settingsClone = this.settingsClone;\n            right = autoStrip(right, settingsClone); /** if right is not empty and first character is not aDec, */\n            /** we could strip all zeros, otherwise only leading */\n            var strip = right.match(/^\\d/) ? true : 'leading';\n            left = autoStrip(left, settingsClone, strip); /** prevents multiple leading zeros from being entered */\n            if ((left === '' || left === settingsClone.aNeg) && settingsClone.lZero === 'deny') {\n                if (right > '') {\n                    right = right.replace(/^0*(\\d)/, '$1');\n                }\n            }\n            var new_value = left + right; /** insert zero if has leading dot */\n            if (settingsClone.aDec) {\n                var m = new_value.match(new RegExp('^' + settingsClone.aNegRegAutoStrip + '\\\\' + settingsClone.aDec));\n                if (m) {\n                    left = left.replace(m[1], m[1] + '0');\n                    new_value = left + right;\n                }\n            } /** insert zero if number is empty and io.wEmpty == 'zero' */\n            if (settingsClone.wEmpty === 'zero' && (new_value === settingsClone.aNeg || new_value === '')) {\n                left += '0';\n            }\n            return [left, right];\n        },\n\n        /**\n         * set part of number to value keeping position of cursor\n         */\n        setValueParts: function (left, right, paste) {\n            var settingsClone = this.settingsClone,\n                parts = this.normalizeParts(left, right),\n                new_value = parts.join(''),\n                position = parts[0].length;\n            if (autoCheck(new_value, settingsClone)) {\n                new_value = truncateDecimal(new_value, settingsClone, paste);\n                if (position > new_value.length) {\n                    position = new_value.length;\n                }\n                this.value = new_value;\n                this.setPosition(position, false);\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * helper function for expandSelectionOnSign\n         * returns sign position of a formatted value\n         */\n        signPosition: function () {\n            var settingsClone = this.settingsClone,\n                aSign = settingsClone.aSign,\n                that = this.that;\n            if (aSign) {\n                var aSignLen = aSign.length;\n                if (settingsClone.pSign === 'p') {\n                    var hasNeg = settingsClone.aNeg && that.value && that.value.charAt(0) === settingsClone.aNeg;\n                    return hasNeg ? [1, aSignLen + 1] : [0, aSignLen];\n                }\n                var valueLen = that.value.length;\n                return [valueLen - aSignLen, valueLen];\n            }\n            return [1000, -1];\n        },\n\n        /**\n         * expands selection to cover whole sign\n         * prevents partial deletion/copying/overwriting of a sign\n         */\n        expandSelectionOnSign: function (setReal) {\n            var sign_position = this.signPosition(),\n                selection = this.selection;\n            if (selection.start < sign_position[1] && selection.end > sign_position[0]) { /** if selection catches something except sign and catches only space from sign */\n                if ((selection.start < sign_position[0] || selection.end > sign_position[1]) && this.value.substring(Math.max(selection.start, sign_position[0]), Math.min(selection.end, sign_position[1])).match(/^\\s*$/)) { /** then select without empty space */\n                    if (selection.start < sign_position[0]) {\n                        this.setSelection(selection.start, sign_position[0], setReal);\n                    } else {\n                        this.setSelection(sign_position[1], selection.end, setReal);\n                    }\n                } else { /** else select with whole sign */\n                    this.setSelection(Math.min(selection.start, sign_position[0]), Math.max(selection.end, sign_position[1]), setReal);\n                }\n            }\n        },\n\n        /**\n         * try to strip pasted value to digits\n         */\n        checkPaste: function () {\n            if (this.valuePartsBeforePaste !== undefined) {\n                var parts = this.getBeforeAfter(),\n\n                    oldParts = this.valuePartsBeforePaste;\n                delete this.valuePartsBeforePaste; /** try to strip pasted value first */\n                parts[0] = parts[0].substr(0, oldParts[0].length) + autoStrip(parts[0].substr(oldParts[0].length), this.settingsClone);\n                if (!this.setValueParts(parts[0], parts[1], 'paste')) {\n                    this.value = oldParts.join('');\n                    this.setPosition(oldParts[0].length, false);\n                }\n            }\n        },\n\n        /**\n         * process pasting, cursor moving and skipping of not interesting keys\n         * if returns true, further processing is not performed\n         */\n        skipAllways: function (e) {\n            var kdCode = this.kdCode,\n                which = this.which,\n                ctrlKey = this.ctrlKey,\n                cmdKey = this.cmdKey,\n                shiftKey = this.shiftKey; /** catch the ctrl up on ctrl-v */\n            if (((ctrlKey || cmdKey) && e.type === 'keyup' && this.valuePartsBeforePaste !== undefined) || (shiftKey && kdCode === 45)) {\n                this.checkPaste();\n                return false;\n            }\n            /** codes are taken from http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx\n             * skip Fx keys, windows keys, other special keys\n             * Thanks Ney Estrabelli for the FF for Mac meta key support \"keycode 224\"\n             */\n            if ((kdCode >= 112 && kdCode <= 123) || (kdCode >= 91 && kdCode <= 93) || (kdCode >= 9 && kdCode <= 31) || (kdCode < 8 && (which === 0 || which === kdCode)) || kdCode === 144 || kdCode === 145 || kdCode === 45 || kdCode === 224) {\n                return true;\n            }\n            if ((ctrlKey || cmdKey) && kdCode === 65) { /** if select all (a=65)*/\n                return true;\n            }\n            if ((ctrlKey || cmdKey) && (kdCode === 67 || kdCode === 86 || kdCode === 88)) { /** if copy (c=67) paste (v=86) or cut (x=88) */\n                if (e.type === 'keydown') {\n                    this.expandSelectionOnSign();\n                }\n                if (kdCode === 86 || kdCode === 45) { /** try to prevent wrong paste */\n                    if (e.type === 'keydown' || e.type === 'keypress') {\n                        if (this.valuePartsBeforePaste === undefined) {\n                            this.valuePartsBeforePaste = this.getBeforeAfter();\n                        }\n                    } else {\n                        this.checkPaste();\n                    }\n                }\n                return e.type === 'keydown' || e.type === 'keypress' || kdCode === 67;\n            }\n            if (ctrlKey || cmdKey) {\n                return true;\n            }\n            if (kdCode === 37 || kdCode === 39) { /** jump over thousand separator */\n                var aSep = this.settingsClone.aSep,\n                    start = this.selection.start,\n                    value = this.that.value;\n                if (e.type === 'keydown' && aSep && !this.shiftKey) {\n                    if (kdCode === 37 && value.charAt(start - 2) === aSep) {\n                        this.setPosition(start - 1);\n                    } else if (kdCode === 39 && value.charAt(start + 1) === aSep) {\n                        this.setPosition(start + 1);\n                    }\n                }\n                return true;\n            }\n            if (kdCode >= 34 && kdCode <= 40) {\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * process deletion of characters\n         * returns true if processing performed\n         */\n        processAllways: function () {\n            var parts; /** process backspace or delete */\n            if (this.kdCode === 8 || this.kdCode === 46) {\n                if (!this.selection.length) {\n                    parts = this.getBeforeAfterStriped();\n                    if (this.kdCode === 8) {\n                        parts[0] = parts[0].substring(0, parts[0].length - 1);\n                    } else {\n                        parts[1] = parts[1].substring(1, parts[1].length);\n                    }\n                    this.setValueParts(parts[0], parts[1]);\n                } else {\n                    this.expandSelectionOnSign(false);\n                    parts = this.getBeforeAfterStriped();\n                    this.setValueParts(parts[0], parts[1]);\n                }\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * process insertion of characters\n         * returns true if processing performed\n         */\n        processKeypress: function () {\n            var settingsClone = this.settingsClone,\n                cCode = String.fromCharCode(this.which),\n                parts = this.getBeforeAfterStriped(),\n                left = parts[0],\n                right = parts[1]; /** start rules when the decimal character key is pressed */\n            /** always use numeric pad dot to insert decimal separator */\n            if (cCode === settingsClone.aDec || (settingsClone.altDec && cCode === settingsClone.altDec) || ((cCode === '.' || cCode === ',') && this.kdCode === 110)) { /** do not allow decimal character if no decimal part allowed */\n                if (!settingsClone.mDec || !settingsClone.aDec) {\n                    return true;\n                } /** do not allow decimal character before aNeg character */\n                if (settingsClone.aNeg && right.indexOf(settingsClone.aNeg) > -1) {\n                    return true;\n                } /** do not allow decimal character if other decimal character present */\n                if (left.indexOf(settingsClone.aDec) > -1) {\n                    return true;\n                }\n                if (right.indexOf(settingsClone.aDec) > 0) {\n                    return true;\n                }\n                if (right.indexOf(settingsClone.aDec) === 0) {\n                    right = right.substr(1);\n                }\n                this.setValueParts(left + settingsClone.aDec, right);\n                return true;\n            }\n            /**\n             * start rule on negative sign & prevent minus if not allowed\n             */\n            if (cCode === '-' || cCode === '+') {\n                if (!settingsClone.aNeg) {\n                    return true;\n                } /** caret is always after minus */\n                if (left === '' && right.indexOf(settingsClone.aNeg) > -1) {\n                    left = settingsClone.aNeg;\n                    right = right.substring(1, right.length);\n                } /** change sign of number, remove part if should */\n                if (left.charAt(0) === settingsClone.aNeg) {\n                    left = left.substring(1, left.length);\n                } else {\n                    left = (cCode === '-') ? settingsClone.aNeg + left : left;\n                }\n                this.setValueParts(left, right);\n                return true;\n            } /** digits */\n            if (cCode >= '0' && cCode <= '9') { /** if try to insert digit before minus */\n                if (settingsClone.aNeg && left === '' && right.indexOf(settingsClone.aNeg) > -1) {\n                    left = settingsClone.aNeg;\n                    right = right.substring(1, right.length);\n                }\n                if (settingsClone.vMax <= 0 && settingsClone.vMin < settingsClone.vMax && this.value.indexOf(settingsClone.aNeg) === -1 && cCode !== '0') {\n                    left = settingsClone.aNeg + left;\n                }\n                this.setValueParts(left + cCode, right);\n                return true;\n            } /** prevent any other character */\n            return true;\n        },\n\n        /**\n         * formatting of just processed value with keeping of cursor position\n         */\n        formatQuick: function () {\n            var settingsClone = this.settingsClone,\n                parts = this.getBeforeAfterStriped(),\n                leftLength = this.value;\n            if ((settingsClone.aSep === '' || (settingsClone.aSep !== '' && leftLength.indexOf(settingsClone.aSep) === -1)) && (settingsClone.aSign === '' || (settingsClone.aSign !== '' && leftLength.indexOf(settingsClone.aSign) === -1))) {\n                var subParts = [],\n                    nSign = '';\n                subParts = leftLength.split(settingsClone.aDec);\n                if (subParts[0].indexOf('-') > -1) {\n                    nSign = '-';\n                    subParts[0] = subParts[0].replace('-', '');\n                    parts[0] = parts[0].replace('-', '');\n                }\n                if (subParts[0].length > settingsClone.mInt && parts[0].charAt(0) === '0') { /** strip leading zero if need */\n                    parts[0] = parts[0].slice(1);\n                }\n                parts[0] = nSign + parts[0];\n            }\n            var value = autoGroup(this.value, this.settingsClone),\n                position = value.length;\n            if (value) {\n                /** prepare regexp which searches for cursor position from unformatted left part */\n                var left_ar = parts[0].split(''),\n                    i = 0;\n                for (i; i < left_ar.length; i += 1) { /** thanks Peter Kovari */\n                    if (!left_ar[i].match('\\\\d')) {\n                        left_ar[i] = '\\\\' + left_ar[i];\n                    }\n                }\n                var leftReg = new RegExp('^.*?' + left_ar.join('.*?'));\n                /** search cursor position in formatted value */\n                var newLeft = value.match(leftReg);\n                if (newLeft) {\n                    position = newLeft[0].length;\n                    /** if we are just before sign which is in prefix position */\n                    if (((position === 0 && value.charAt(0) !== settingsClone.aNeg) || (position === 1 && value.charAt(0) === settingsClone.aNeg)) && settingsClone.aSign && settingsClone.pSign === 'p') {\n                        /** place caret after prefix sign */\n                        position = this.settingsClone.aSign.length + (value.charAt(0) === '-' ? 1 : 0);\n                    }\n                } else if (settingsClone.aSign && settingsClone.pSign === 's') {\n                    /** if we could not find a place for cursor and have a sign as a suffix */\n                    /** place carret before suffix currency sign */\n                    position -= settingsClone.aSign.length;\n                }\n            }\n            this.that.value = value;\n            this.setPosition(position);\n            this.formatted = true;\n        }\n    };\n\n    /**\n    * thanks to Anthony & Evan C\n    */\n    function autoGet(obj) {\n        if (typeof obj === 'string') {\n            obj = obj.replace(/\\[/g, \"\\\\[\").replace(/\\]/g, \"\\\\]\");\n            obj = '#' + obj.replace(/(:|\\.)/g, '\\\\$1');\n            /** obj = '#' + obj.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1'); */\n            /** possible modification to replace the above 2 lines */\n        }\n        return $(obj);\n    }\n\n    /**\n    * function to attach data to the element\n    * and imitate the holder\n    */\n    function getHolder($that, settings, update) {\n        var data = $that.data('autoNumeric');\n        if (!data) {\n            data = {};\n            $that.data('autoNumeric', data);\n        }\n        var holder = data.holder;\n        if ((holder === undefined && settings) || update) {\n            holder = new AutoNumericHolder($that.get(0), settings);\n            data.holder = holder;\n        }\n        return holder;\n    }\n\n    var methods = {\n\n        /**\n         * Method to initiate autoNumeric and attached the settings (default and options passed as a parameter\n         * $(someSelector).autoNumeric('init'); // initiate autoNumeric with defaults\n         * $(someSelector).autoNumeric('init', {option}); // initiate autoNumeric with options\n         * $(someSelector).autoNumeric(); // initiate autoNumeric with defaults\n         * $(someSelector).autoNumeric({option}); // initiate autoNumeric with options\n         * options passes as a parameter example '{aSep: '.', aDec: ',', aSign: '€ '}\n         */\n        init: function (options) {\n            return this.each(function () {\n                var $this = $(this),\n                    settings = $this.data('autoNumeric'), /** attempt to grab 'autoNumeric' settings, if they don't exist returns \"undefined\". */\n                    tagData = $this.data(), /** attempt to grab HTML5 data, if they don't exist we'll get \"undefined\".*/\n                    $input = $this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])');\n                if (typeof settings !== 'object') { /** If we couldn't grab settings, create them from defaults and passed options. */\n                    settings = $.extend({}, $.fn.autoNumeric.defaults, tagData, options, {\n                        aNum: '0123456789',\n                        hasFocus: false,\n                        removeBrackets: false,\n                        runOnce: false,\n                        tagList: ['b', 'caption', 'cite', 'code', 'dd', 'del', 'div', 'dfn', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ins', 'kdb', 'label', 'li', 'output', 'p', 'q', 's', 'sample', 'span', 'strong', 'td', 'th', 'u', 'var']\n                    }); /** Merge defaults, tagData and options */\n                    if (settings.aDec === settings.aSep) {\n                        $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + settings.aDec + \"' and thousand separator aSep: '\" + settings.aSep + \"' are the same character\");\n                    }\n                    $this.data('autoNumeric', settings); /** Save our new settings */\n                } else {\n                    return this;\n                }\n                var holder = getHolder($this, settings);\n                if (!$input && $this.prop('tagName').toLowerCase() === 'input') { /** checks for non-supported input types */\n                    $.error('The input type \"' + $this.prop('type') + '\" is not supported by autoNumeric()');\n\n                }\n                if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) === -1 && $this.prop('tagName').toLowerCase() !== 'input') {\n                    $.error(\"The <\" + $this.prop('tagName').toLowerCase() + \"> is not supported by autoNumeric()\");\n\n                }\n                if (settings.runOnce === false && settings.aForm) { /** routine to format default value on page load */\n                    if ($input) {\n                        var setValue = true;\n                        if ($this[0].value === '' && settings.wEmpty === 'empty') {\n                            $this[0].value = '';\n                            setValue = false;\n                        }\n                        if ($this[0].value === '' && settings.wEmpty === 'sign') {\n                            $this[0].value = settings.aSign;\n                            setValue = false;\n                        }\n                         /** checks for page reload from back button\n                          * also checks for ASP.net form post back\n                          * the following HTML data attribute is REQUIRED (data-an-default=\"same value as the value attribute\")\n                          * example: <asp:TextBox runat=\"server\" id=\"someID\" value=\"1234.56\" data-an-default=\"1234.56\">\n                          */\n                        if (setValue && $this.val() !== '' && ((settings.anDefault === null && $this[0].value === $this.prop('defaultValue')) || (settings.anDefault !== null && settings.anDefault.toString() === $this.val()))) {\n                            $this.autoNumeric('set', $this.val());\n                        }\n                    }\n                    if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1 && $this.text() !== '') {\n                        $this.autoNumeric('set', $this.text());\n                    }\n                }\n                settings.runOnce = true;\n                if ($this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])')) { /**added hidden type */\n                    $this.on('keydown.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        if (holder.settings.aDec === holder.settings.aSep) {\n                            $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + holder.settings.aDec + \"' and thousand separator aSep: '\" + holder.settings.aSep + \"' are the same character\");\n                        }\n                        if (holder.that.readOnly) {\n                            holder.processed = true;\n                            return true;\n                        }\n                        /** The below streamed code / comment allows the \"enter\" keydown to throw a change() event */\n                        /** if (e.keyCode === 13 && holder.inVal !== $this.val()){\n                            $this.change();\n                            holder.inVal = $this.val();\n                        }*/\n                        holder.init(e);\n                        if (holder.skipAllways(e)) {\n                            holder.processed = true;\n                            return true;\n                        }\n                        if (holder.processAllways()) {\n                            holder.processed = true;\n                            holder.formatQuick();\n                            e.preventDefault();\n                            return false;\n                        }\n                        holder.formatted = false;\n                        return true;\n                    });\n                    $this.on('keypress.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        var processed = holder.processed;\n                        holder.init(e);\n                        if (holder.skipAllways(e)) {\n                            return true;\n                        }\n                        if (processed) {\n                            e.preventDefault();\n                            return false;\n                        }\n                        if (holder.processAllways() || holder.processKeypress()) {\n                            holder.formatQuick();\n                            e.preventDefault();\n                            return false;\n                        }\n                        holder.formatted = false;\n                    });\n                    $this.on('keyup.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        holder.init(e);\n                        var skip = holder.skipAllways(e);\n                        holder.kdCode = 0;\n                        delete holder.valuePartsBeforePaste;\n                        if ($this[0].value === holder.settings.aSign) { /** added to properly place the caret when only the currency is present */\n                            if (holder.settings.pSign === 's') {\n                                setElementSelection(this, 0, 0);\n                            } else {\n                                setElementSelection(this, holder.settings.aSign.length, holder.settings.aSign.length);\n                            }\n                        }\n                        if (skip) {\n                            return true;\n                        }\n                        if (this.value === '') {\n                            return true;\n                        }\n                        if (!holder.formatted) {\n                            holder.formatQuick();\n                        }\n                    });\n                    $this.on('focusin.autoNumeric', function () {\n                        holder = getHolder($this);\n                        var $settings = holder.settingsClone;\n                        $settings.hasFocus = true;\n                        if ($settings.nBracket !== null) {\n                            var checkVal = $this.val();\n                            $this.val(negativeBracket(checkVal, $settings));\n                        }\n                        holder.inVal = $this.val();\n                        var onEmpty = checkEmpty(holder.inVal, $settings, true);\n                        if (onEmpty !== null && onEmpty !== '') {\n                            $this.val(onEmpty);\n                        }\n                    });\n                    $this.on('focusout.autoNumeric', function () {\n                        holder = getHolder($this);\n                        var $settings = holder.settingsClone,\n                            value = $this.val(),\n                            origValue = value;\n                        $settings.hasFocus = false;\n                        var strip_zero = ''; /** added to control leading zero */\n                        if ($settings.lZero === 'allow') { /** added to control leading zero */\n                            $settings.allowLeading = false;\n                            strip_zero = 'leading';\n                        }\n                        if (value !== '') {\n                            value = autoStrip(value, $settings, strip_zero);\n                            if (checkEmpty(value, $settings) === null && autoCheck(value, $settings, $this[0])) {\n                                value = fixNumber(value, $settings.aDec, $settings.aNeg);\n                                value = autoRound(value, $settings);\n                                value = presentNumber(value, $settings.aDec, $settings.aNeg);\n                            } else {\n                                value = '';\n                            }\n                        }\n                        var groupedValue = checkEmpty(value, $settings, false);\n                        if (groupedValue === null) {\n                            groupedValue = autoGroup(value, $settings);\n                        }\n                        if (groupedValue !== holder.inVal || groupedValue !== origValue) {\n                            $this.val(groupedValue);\n                            $this.change();\n                            delete holder.inVal;\n                        }\n                    });\n                }\n            });\n        },\n\n        /**\n         * method to remove settings and stop autoNumeric() - does not remove the formatting\n         * $(someSelector).autoNumeric('destroy'); // destroy autoNumeric\n         * no parameters accepted\n         */\n        destroy: function () {\n            return $(this).each(function () {\n                var $this = $(this);\n                $this.off('.autoNumeric');\n                $this.removeData('autoNumeric');\n            });\n        },\n\n        /**\n         * method to update settings - can be call as many times\n         * $(someSelector).autoNumeric('update', {options}); // updates the settings\n         * options passes as a parameter example '{aSep: '.', aDec: ',', aSign: '€ '}\n         */\n        update: function (options) {\n            return $(this).each(function () {\n                var $this = autoGet($(this)),\n                    settings = $this.data('autoNumeric');\n                if (typeof settings !== 'object') {\n                    $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'update' method\");\n                }\n                var strip = $this.autoNumeric('get');\n                settings = $.extend(settings, options);\n                getHolder($this, settings, true);\n                if (settings.aDec === settings.aSep) {\n                    $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + settings.aDec + \"' and thousand separator aSep: '\" + settings.aSep + \"' are the same character\");\n                }\n                $this.data('autoNumeric', settings);\n                if ($this.val() !== '' || $this.text() !== '') {\n                    return $this.autoNumeric('set', strip);\n                }\n                return;\n            });\n        },\n\n        /**\n         * method to format value sent as a parameter \"\"\n         * $(someSelector).autoNumeric('set', 'value'}); // formats the value being passed\n         * value passed as a string - can be a integer '1234' or double '1234.56789'\n         * must contain only numbers and one decimal (period) character\n         */\n        set: function (valueIn) {\n            if (valueIn === null) {\n                return;\n            }\n            return $(this).each(function () {\n                var $this = autoGet($(this)),\n                    settings = $this.data('autoNumeric'),\n                    value = valueIn.toString(),\n                    testValue = valueIn.toString(),\n                    $input = $this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])');\n                if (typeof settings !== 'object') {\n                    $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'set' method\");\n                }\n                /** allows locale decimal separator to be a comma */\n                if ((testValue === $this.attr('value') || testValue === $this.text()) && settings.runOnce === false) {\n                    value = value.replace(',', '.');\n                }\n                if (!$.isNumeric(+value)) {\n                    $.error(\"The value (\" + value + \") being 'set' is not numeric and has caused a error to be thrown\");\n                }\n                value = checkValue(value, settings);\n                settings.setEvent = true;\n                value.toString();\n                if (value !== '') {\n                    value = autoRound(value, settings);\n                }\n                value = presentNumber(value, settings.aDec, settings.aNeg);\n                if (!autoCheck(value, settings)) {\n                    value = autoRound('', settings);\n                }\n                value = autoGroup(value, settings);\n                if ($input) {\n                    return $this.val(value);\n                }\n                if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1) {\n                    return $this.text(value);\n                }\n                return false;\n            });\n        },\n\n        /**\n         * method to get the unformatted that accepts up to one parameter\n         * $(someSelector).autoNumeric('get'); no parameters accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         * only the first element in the selector is returned\n         */\n        get: function () {\n            var $this = autoGet($(this)),\n                settings = $this.data('autoNumeric');\n            if (typeof settings !== 'object') {\n                $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'get' method\");\n            }\n            var getValue = '';\n            /** determine the element type then use .eq(0) selector to grab the value of the first element in selector */\n            if ($this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])')) { /**added hidden type */\n                getValue = $this.eq(0).val();\n            } else if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1) {\n                getValue = $this.eq(0).text();\n            } else {\n                $.error(\"The <\" + $this.prop('tagName').toLowerCase() + \"> is not supported by autoNumeric()\");\n            }\n            if ((getValue === '' && settings.wEmpty === 'empty') || (getValue === settings.aSign && (settings.wEmpty === 'sign' || settings.wEmpty === 'empty'))) {\n                return '';\n            }\n            if (getValue !== '' && settings.nBracket !== null) {\n                settings.removeBrackets = true;\n                getValue = negativeBracket(getValue, settings);\n                settings.removeBrackets = false;\n            }\n            if (settings.runOnce || settings.aForm === false) {\n                getValue = autoStrip(getValue, settings);\n            }\n            getValue = fixNumber(getValue, settings.aDec, settings.aNeg);\n            if (+getValue === 0 && settings.lZero !== 'keep') {\n                getValue = '0';\n            }\n            if (settings.lZero === 'keep') {\n                return getValue;\n            }\n            getValue = checkValue(getValue, settings);\n            return getValue; /** returned Numeric String */\n        },\n\n        /**\n         * The 'getString' method used jQuerys .serialize() method that creates a text string in standard URL-encoded notation\n         * it then loops through the string and un-formats the inputs with autoNumeric\n         * $(someSelector).autoNumeric('getString'); no parameter accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         */\n        getString: function () {\n            var isAutoNumeric = false,\n                $this = autoGet($(this)),\n                formFields = $this.serialize(),\n                formParts = formFields.split('&'),\n                formIndex = $('form').index($this),\n                allFormElements = $('form:eq(' + formIndex + ')'),\n                aiIndex = [], /* all input index */\n                scIndex = [], /* successful control index */\n                rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, /* from jQuery serialize method */\n                rsubmittable = /^(?:input|select|textarea|keygen)/i, /* from jQuery serialize method */\n                rcheckableType = /^(?:checkbox|radio)$/i,\n                rnonAutoNumericTypes = /^(?:button|checkbox|color|date|datetime|datetime-local|email|file|image|month|number|password|radio|range|reset|search|submit|time|url|week)/i,\n                count = 0;\n            /*jslint unparam: true*/\n            /* index of successful elements */\n            $.each(allFormElements[0], function (i, field) {\n                if (field.name !== '' && rsubmittable.test(field.localName) && !rsubmitterTypes.test(field.type) && !field.disabled && (field.checked || !rcheckableType.test(field.type))) {\n                    scIndex.push(count);\n                    count = count + 1;\n                } else {\n                    scIndex.push(-1);\n                }\n            });\n            /* index of all inputs tags except checkbox */\n            count = 0;\n            $.each(allFormElements[0], function (i, field) {\n                if (field.localName === 'input' && (field.type === '' || field.type === 'text' || field.type === 'hidden' || field.type === 'tel')) {\n                    aiIndex.push(count);\n                    count = count + 1;\n                } else {\n                    aiIndex.push(-1);\n                    if (field.localName === 'input' && rnonAutoNumericTypes.test(field.type)) {\n                        count = count + 1;\n                    }\n                }\n            });\n            $.each(formParts, function (i, miniParts) {\n                miniParts = formParts[i].split('=');\n                var scElement = $.inArray(i, scIndex);\n                if (scElement > -1 && aiIndex[scElement] > -1) {\n                    var testInput = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')'),\n                        settings = testInput.data('autoNumeric');\n                    if (typeof settings === 'object') {\n                        if (miniParts[1] !== null) {\n                            miniParts[1] = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')').autoNumeric('get').toString();\n                            formParts[i] = miniParts.join('=');\n                            isAutoNumeric = true;\n                        }\n                    }\n                }\n            });\n            /*jslint unparam: false*/\n            if (!isAutoNumeric) {\n                $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'getString' method\");\n            }\n            return formParts.join('&');\n        },\n\n        /**\n         * The 'getString' method used jQuerys .serializeArray() method that creates array or objects that can be encoded as a JSON string\n         * it then loops through the string and un-formats the inputs with autoNumeric\n         * $(someSelector).autoNumeric('getArray'); no parameter accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         */\n        getArray: function () {\n            var isAutoNumeric = false,\n                $this = autoGet($(this)),\n                formFields = $this.serializeArray(),\n                formIndex = $('form').index($this),\n                allFormElements = $('form:eq(' + formIndex + ')'),\n                aiIndex = [], /* all input index */\n                scIndex = [], /* successful control index */\n                rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, /* from jQuery serialize method */\n                rsubmittable = /^(?:input|select|textarea|keygen)/i, /* from jQuery serialize method */\n                rcheckableType = /^(?:checkbox|radio)$/i,\n                rnonAutoNumericTypes = /^(?:button|checkbox|color|date|datetime|datetime-local|email|file|image|month|number|password|radio|range|reset|search|submit|time|url|week)/i,\n                count = 0;\n            /*jslint unparam: true*/\n            /* index of successful elements */\n            $.each(allFormElements[0], function (i, field) {\n                if (field.name !== '' && rsubmittable.test(field.localName) && !rsubmitterTypes.test(field.type) && !field.disabled && (field.checked || !rcheckableType.test(field.type))) {\n                    scIndex.push(count);\n                    count = count + 1;\n                } else {\n                    scIndex.push(-1);\n                }\n            });\n            /* index of all inputs tags */\n            count = 0;\n            $.each(allFormElements[0], function (i, field) {\n                if (field.localName === 'input' && (field.type === '' || field.type === 'text' || field.type === 'hidden' || field.type === 'tel')) {\n                    aiIndex.push(count);\n                    count = count + 1;\n                } else {\n                    aiIndex.push(-1);\n                    if (field.localName === 'input' && rnonAutoNumericTypes.test(field.type)) {\n                        count = count + 1;\n                    }\n                }\n            });\n            $.each(formFields, function (i, field) {\n                var scElement = $.inArray(i, scIndex);\n                if (scElement > -1 && aiIndex[scElement] > -1) {\n                    var testInput = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')'),\n                        settings = testInput.data('autoNumeric');\n                    if (typeof settings === 'object') {\n                        field.value = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')').autoNumeric('get').toString();\n                        isAutoNumeric = true;\n                    }\n                }\n            });\n            /*jslint unparam: false*/\n            if (!isAutoNumeric) {\n                $.error(\"None of the successful form inputs are initialized by autoNumeric.\");\n            }\n            return formFields;\n        },\n\n        /**\n        * The 'getSteetings returns the object with autoNumeric settings for those who need to look under the hood\n        * $(someSelector).autoNumeric('getSettings'); // no parameters accepted\n        * $(someSelector).autoNumeric('getSettings').aDec; // return the aDec setting as a string - ant valid setting can be used\n        */\n        getSettings: function () {\n            var $this = autoGet($(this));\n            return $this.eq(0).data('autoNumeric');\n        }\n    };\n\n    /**\n    * autoNumeric function\n    */\n    $.fn.autoNumeric = function (method) {\n        if (methods[method]) {\n            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n        }\n        if (typeof method === 'object' || !method) {\n            return methods.init.apply(this, arguments);\n        }\n        $.error('Method \"' + method + '\" is not supported by autoNumeric()');\n    };\n\n    /**\n    * Defaults are public - these can be overridden by the following:\n    * HTML5 data attributes\n    * Options passed by the 'init' or 'update' methods\n    * Use jQuery's $.extend method - great way to pass ASP.NET current culture settings\n    */\n    $.fn.autoNumeric.defaults = {\n        /** allowed thousand separator characters\n         * comma = ','\n         * period \"full stop\" = '.'\n         * apostrophe is escaped = '\\''\n         * space = ' '\n         * none = ''\n         * NOTE: do not use numeric characters\n         */\n        aSep: ',',\n        /** digital grouping for the thousand separator used in Format\n         * dGroup: '2', results in 99,99,99,999 common in India for values less than 1 billion and greater than -1 billion\n         * dGroup: '3', results in 999,999,999 default\n         * dGroup: '4', results in 9999,9999,9999 used in some Asian countries\n         */\n        dGroup: '3',\n        /** allowed decimal separator characters\n         * period \"full stop\" = '.'\n         * comma = ','\n         */\n        aDec: '.',\n        /** allow to declare alternative decimal separator which is automatically replaced by aDec\n         * developed for countries the use a comma ',' as the decimal character\n         * and have keyboards\\numeric pads that have a period 'full stop' as the decimal characters (Spain is an example)\n         */\n        altDec: null,\n        /** allowed currency symbol\n         * Must be in quotes aSign: '$', a space is allowed aSign: '$ '\n         */\n        aSign: '',\n        /** placement of currency sign\n         * for prefix pSign: 'p',\n         * for suffix pSign: 's',\n         */\n        pSign: 'p',\n        /** maximum possible value\n         * value must be enclosed in quotes and use the period for the decimal point\n         * value must be larger than vMin\n         */\n        vMax: '9999999999999.99',\n        /** minimum possible value\n         * value must be enclosed in quotes and use the period for the decimal point\n         * value must be smaller than vMax\n         */\n        vMin: '-9999999999999.99',\n        /** max number of decimal places = used to override decimal places set by the vMin & vMax values\n         * value must be enclosed in quotes example mDec: '3',\n         * This can also set the value via a call back function mDec: 'css:#\n         */\n        mDec: null,\n        /** method used for rounding\n         * mRound: 'S', Round-Half-Up Symmetric (default)\n         * mRound: 'A', Round-Half-Up Asymmetric\n         * mRound: 's', Round-Half-Down Symmetric (lower case s)\n         * mRound: 'a', Round-Half-Down Asymmetric (lower case a)\n         * mRound: 'B', Round-Half-Even \"Bankers Rounding\"\n         * mRound: 'U', Round Up \"Round-Away-From-Zero\"\n         * mRound: 'D', Round Down \"Round-Toward-Zero\" - same as truncate\n         * mRound: 'C', Round to Ceiling \"Toward Positive Infinity\"\n         * mRound: 'F', Round to Floor \"Toward Negative Infinity\"\n         */\n        mRound: 'S',\n        /** controls decimal padding\n         * aPad: true - always Pad decimals with zeros\n         * aPad: false - does not pad with zeros.\n         * aPad: `some number` - pad decimals with zero to number different from mDec\n         * thanks to Jonas Johansson for the suggestion\n         */\n        aPad: true,\n        /** places brackets on negative value -$ 999.99 to (999.99)\n         * visible only when the field does NOT have focus the left and right symbols should be enclosed in quotes and seperated by a comma\n         * nBracket: null, nBracket: '(,)', nBracket: '[,]', nBracket: '<,>' or nBracket: '{,}'\n         */\n        nBracket: null,\n        /** Displayed on empty string\n         * wEmpty: 'empty', - input can be blank\n         * wEmpty: 'zero', - displays zero\n         * wEmpty: 'sign', - displays the currency sign\n         */\n        wEmpty: 'empty',\n        /** controls leading zero behavior\n         * lZero: 'allow', - allows leading zeros to be entered. Zeros will be truncated when entering additional digits. On focusout zeros will be deleted.\n         * lZero: 'deny', - allows only one leading zero on values less than one\n         * lZero: 'keep', - allows leading zeros to be entered. on fousout zeros will be retained.\n         */\n        lZero: 'allow',\n        /** determine if the select all keyboard command will select\n         * the complete input text or only the input numeric value\n         * if the currency symbol is between the numeric value and the negative sign only the numeric value will sellected\n         */\n        sNumber: true,\n        /** determine if the default value will be formatted on page ready.\n         * true = automatically formats the default value on page ready\n         * false = will not format the default value\n         */\n        aForm: true,\n        /** helper option for ASP.NET postback\n         * should be the value of the unformatted default value\n         * examples:\n         * no default value='' {anDefault: ''}\n         * value=1234.56 {anDefault: '1234.56'}\n         */\n        anDefault: null\n    };\n}(jQuery));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/autocomplete/countries.js",
    "content": "﻿var countries = {\n    \"AD\": \"Andorra\",\n    \"A2\": \"Andorra Test\",\n    \"AE\": \"United Arab Emirates\",\n    \"AF\": \"Afghanistan\",\n    \"AG\": \"Antigua and Barbuda\",\n    \"AI\": \"Anguilla\",\n    \"AL\": \"Albania\",\n    \"AM\": \"Armenia\",\n    \"AN\": \"Netherlands Antilles\",\n    \"AO\": \"Angola\",\n    \"AQ\": \"Antarctica\",\n    \"AR\": \"Argentina\",\n    \"AS\": \"American Samoa\",\n    \"AT\": \"Austria\",\n    \"AU\": \"Australia\",\n    \"AW\": \"Aruba\",\n    \"AX\": \"\\u00c5land Islands\",\n    \"AZ\": \"Azerbaijan\",\n    \"BA\": \"Bosnia and Herzegovina\",\n    \"BB\": \"Barbados\",\n    \"BD\": \"Bangladesh\",\n    \"BE\": \"Belgium\",\n    \"BF\": \"Burkina Faso\",\n    \"BG\": \"Bulgaria\",\n    \"BH\": \"Bahrain\",\n    \"BI\": \"Burundi\",\n    \"BJ\": \"Benin\",\n    \"BL\": \"Saint Barth\\u00e9lemy\",\n    \"BM\": \"Bermuda\",\n    \"BN\": \"Brunei\",\n    \"BO\": \"Bolivia\",\n    \"BQ\": \"British Antarctic Territory\",\n    \"BR\": \"Brazil\",\n    \"BS\": \"Bahamas\",\n    \"BT\": \"Bhutan\",\n    \"BV\": \"Bouvet Island\",\n    \"BW\": \"Botswana\",\n    \"BY\": \"Belarus\",\n    \"BZ\": \"Belize\",\n    \"CA\": \"Canada\",\n    \"CC\": \"Cocos [Keeling] Islands\",\n    \"CD\": \"Congo - Kinshasa\",\n    \"CF\": \"Central African Republic\",\n    \"CG\": \"Congo - Brazzaville\",\n    \"CH\": \"Switzerland\",\n    \"CI\": \"C\\u00f4te d\\u2019Ivoire\",\n    \"CK\": \"Cook Islands\",\n    \"CL\": \"Chile\",\n    \"CM\": \"Cameroon\",\n    \"CN\": \"China\",\n    \"CO\": \"Colombia\",\n    \"CR\": \"Costa Rica\",\n    \"CS\": \"Serbia and Montenegro\",\n    \"CT\": \"Canton and Enderbury Islands\",\n    \"CU\": \"Cuba\",\n    \"CV\": \"Cape Verde\",\n    \"CX\": \"Christmas Island\",\n    \"CY\": \"Cyprus\",\n    \"CZ\": \"Czech Republic\",\n    \"DD\": \"East Germany\",\n    \"DE\": \"Germany\",\n    \"DJ\": \"Djibouti\",\n    \"DK\": \"Denmark\",\n    \"DM\": \"Dominica\",\n    \"DO\": \"Dominican Republic\",\n    \"DZ\": \"Algeria\",\n    \"EC\": \"Ecuador\",\n    \"EE\": \"Estonia\",\n    \"EG\": \"Egypt\",\n    \"EH\": \"Western Sahara\",\n    \"ER\": \"Eritrea\",\n    \"ES\": \"Spain\",\n    \"ET\": \"Ethiopia\",\n    \"FI\": \"Finland\",\n    \"FJ\": \"Fiji\",\n    \"FK\": \"Falkland Islands\",\n    \"FM\": \"Micronesia\",\n    \"FO\": \"Faroe Islands\",\n    \"FQ\": \"French Southern and Antarctic Territories\",\n    \"FR\": \"France\",\n    \"FX\": \"Metropolitan France\",\n    \"GA\": \"Gabon\",\n    \"GB\": \"United Kingdom\",\n    \"GD\": \"Grenada\",\n    \"GE\": \"Georgia\",\n    \"GF\": \"French Guiana\",\n    \"GG\": \"Guernsey\",\n    \"GH\": \"Ghana\",\n    \"GI\": \"Gibraltar\",\n    \"GL\": \"Greenland\",\n    \"GM\": \"Gambia\",\n    \"GN\": \"Guinea\",\n    \"GP\": \"Guadeloupe\",\n    \"GQ\": \"Equatorial Guinea\",\n    \"GR\": \"Greece\",\n    \"GS\": \"South Georgia and the South Sandwich Islands\",\n    \"GT\": \"Guatemala\",\n    \"GU\": \"Guam\",\n    \"GW\": \"Guinea-Bissau\",\n    \"GY\": \"Guyana\",\n    \"HK\": \"Hong Kong SAR China\",\n    \"HM\": \"Heard Island and McDonald Islands\",\n    \"HN\": \"Honduras\",\n    \"HR\": \"Croatia\",\n    \"HT\": \"Haiti\",\n    \"HU\": \"Hungary\",\n    \"ID\": \"Indonesia\",\n    \"IE\": \"Ireland\",\n    \"IL\": \"Israel\",\n    \"IM\": \"Isle of Man\",\n    \"IN\": \"India\",\n    \"IO\": \"British Indian Ocean Territory\",\n    \"IQ\": \"Iraq\",\n    \"IR\": \"Iran\",\n    \"IS\": \"Iceland\",\n    \"IT\": \"Italy\",\n    \"JE\": \"Jersey\",\n    \"JM\": \"Jamaica\",\n    \"JO\": \"Jordan\",\n    \"JP\": \"Japan\",\n    \"JT\": \"Johnston Island\",\n    \"KE\": \"Kenya\",\n    \"KG\": \"Kyrgyzstan\",\n    \"KH\": \"Cambodia\",\n    \"KI\": \"Kiribati\",\n    \"KM\": \"Comoros\",\n    \"KN\": \"Saint Kitts and Nevis\",\n    \"KP\": \"North Korea\",\n    \"KR\": \"South Korea\",\n    \"KW\": \"Kuwait\",\n    \"KY\": \"Cayman Islands\",\n    \"KZ\": \"Kazakhstan\",\n    \"LA\": \"Laos\",\n    \"LB\": \"Lebanon\",\n    \"LC\": \"Saint Lucia\",\n    \"LI\": \"Liechtenstein\",\n    \"LK\": \"Sri Lanka\",\n    \"LR\": \"Liberia\",\n    \"LS\": \"Lesotho\",\n    \"LT\": \"Lithuania\",\n    \"LU\": \"Luxembourg\",\n    \"LV\": \"Latvia\",\n    \"LY\": \"Libya\",\n    \"MA\": \"Morocco\",\n    \"MC\": \"Monaco\",\n    \"MD\": \"Moldova\",\n    \"ME\": \"Montenegro\",\n    \"MF\": \"Saint Martin\",\n    \"MG\": \"Madagascar\",\n    \"MH\": \"Marshall Islands\",\n    \"MI\": \"Midway Islands\",\n    \"MK\": \"Macedonia\",\n    \"ML\": \"Mali\",\n    \"MM\": \"Myanmar [Burma]\",\n    \"MN\": \"Mongolia\",\n    \"MO\": \"Macau SAR China\",\n    \"MP\": \"Northern Mariana Islands\",\n    \"MQ\": \"Martinique\",\n    \"MR\": \"Mauritania\",\n    \"MS\": \"Montserrat\",\n    \"MT\": \"Malta\",\n    \"MU\": \"Mauritius\",\n    \"MV\": \"Maldives\",\n    \"MW\": \"Malawi\",\n    \"MX\": \"Mexico\",\n    \"MY\": \"Malaysia\",\n    \"MZ\": \"Mozambique\",\n    \"NA\": \"Namibia\",\n    \"NC\": \"New Caledonia\",\n    \"NE\": \"Niger\",\n    \"NF\": \"Norfolk Island\",\n    \"NG\": \"Nigeria\",\n    \"NI\": \"Nicaragua\",\n    \"NL\": \"Netherlands\",\n    \"NO\": \"Norway\",\n    \"NP\": \"Nepal\",\n    \"NQ\": \"Dronning Maud Land\",\n    \"NR\": \"Nauru\",\n    \"NT\": \"Neutral Zone\",\n    \"NU\": \"Niue\",\n    \"NZ\": \"New Zealand\",\n    \"OM\": \"Oman\",\n    \"PA\": \"Panama\",\n    \"PC\": \"Pacific Islands Trust Territory\",\n    \"PE\": \"Peru\",\n    \"PF\": \"French Polynesia\",\n    \"PG\": \"Papua New Guinea\",\n    \"PH\": \"Philippines\",\n    \"PK\": \"Pakistan\",\n    \"PL\": \"Poland\",\n    \"PM\": \"Saint Pierre and Miquelon\",\n    \"PN\": \"Pitcairn Islands\",\n    \"PR\": \"Puerto Rico\",\n    \"PS\": \"Palestinian Territories\",\n    \"PT\": \"Portugal\",\n    \"PU\": \"U.S. Miscellaneous Pacific Islands\",\n    \"PW\": \"Palau\",\n    \"PY\": \"Paraguay\",\n    \"PZ\": \"Panama Canal Zone\",\n    \"QA\": \"Qatar\",\n    \"RE\": \"R\\u00e9union\",\n    \"RO\": \"Romania\",\n    \"RS\": \"Serbia\",\n    \"RU\": \"Russia\",\n    \"RW\": \"Rwanda\",\n    \"SA\": \"Saudi Arabia\",\n    \"SB\": \"Solomon Islands\",\n    \"SC\": \"Seychelles\",\n    \"SD\": \"Sudan\",\n    \"SE\": \"Sweden\",\n    \"SG\": \"Singapore\",\n    \"SH\": \"Saint Helena\",\n    \"SI\": \"Slovenia\",\n    \"SJ\": \"Svalbard and Jan Mayen\",\n    \"SK\": \"Slovakia\",\n    \"SL\": \"Sierra Leone\",\n    \"SM\": \"San Marino\",\n    \"SN\": \"Senegal\",\n    \"SO\": \"Somalia\",\n    \"SR\": \"Suriname\",\n    \"ST\": \"S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe\",\n    \"SU\": \"Union of Soviet Socialist Republics\",\n    \"SV\": \"El Salvador\",\n    \"SY\": \"Syria\",\n    \"SZ\": \"Swaziland\",\n    \"TC\": \"Turks and Caicos Islands\",\n    \"TD\": \"Chad\",\n    \"TF\": \"French Southern Territories\",\n    \"TG\": \"Togo\",\n    \"TH\": \"Thailand\",\n    \"TJ\": \"Tajikistan\",\n    \"TK\": \"Tokelau\",\n    \"TL\": \"Timor-Leste\",\n    \"TM\": \"Turkmenistan\",\n    \"TN\": \"Tunisia\",\n    \"TO\": \"Tonga\",\n    \"TR\": \"Turkey\",\n    \"TT\": \"Trinidad and Tobago\",\n    \"TV\": \"Tuvalu\",\n    \"TW\": \"Taiwan\",\n    \"TZ\": \"Tanzania\",\n    \"UA\": \"Ukraine\",\n    \"UG\": \"Uganda\",\n    \"UM\": \"U.S. Minor Outlying Islands\",\n    \"US\": \"United States\",\n    \"UY\": \"Uruguay\",\n    \"UZ\": \"Uzbekistan\",\n    \"VA\": \"Vatican City\",\n    \"VC\": \"Saint Vincent and the Grenadines\",\n    \"VD\": \"North Vietnam\",\n    \"VE\": \"Venezuela\",\n    \"VG\": \"British Virgin Islands\",\n    \"VI\": \"U.S. Virgin Islands\",\n    \"VN\": \"Vietnam\",\n    \"VU\": \"Vanuatu\",\n    \"WF\": \"Wallis and Futuna\",\n    \"WK\": \"Wake Island\",\n    \"WS\": \"Samoa\",\n    \"YD\": \"People's Democratic Republic of Yemen\",\n    \"YE\": \"Yemen\",\n    \"YT\": \"Mayotte\",\n    \"ZA\": \"South Africa\",\n    \"ZM\": \"Zambia\",\n    \"ZW\": \"Zimbabwe\",\n    \"ZZ\": \"Unknown or Invalid Region\"\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/autocomplete/demo.js",
    "content": "﻿/*jslint  browser: true, white: true, plusplus: true */\n/*global $, countries */\n\n$(function () {\n    'use strict';\n\n    var countriesArray = $.map(countries, function (value, key) { return { value: value, data: key }; });\n\n    // Setup jQuery ajax mock:\n    $.mockjax({\n        url: '*',\n        responseTime: 2000,\n        response: function (settings) {\n            var query = settings.data.query,\n                queryLowerCase = query.toLowerCase(),\n                re = new RegExp('\\\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi'),\n                suggestions = $.grep(countriesArray, function (country) {\n                     // return country.value.toLowerCase().indexOf(queryLowerCase) === 0;\n                    return re.test(country.value);\n                }),\n                response = {\n                    query: query,\n                    suggestions: suggestions\n                };\n\n            this.responseText = JSON.stringify(response);\n        }\n    });\n\n    // Initialize ajax autocomplete:\n    $('#autocomplete-ajax').autocomplete({\n        // serviceUrl: '/autosuggest/service/url',\n        lookup: countriesArray,\n        lookupFilter: function(suggestion, originalQuery, queryLowerCase) {\n            var re = new RegExp('\\\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi');\n            return re.test(suggestion.value);\n        },\n        onSelect: function(suggestion) {\n            $('#selction-ajax').html('You selected: ' + suggestion.value + ', ' + suggestion.data);\n        },\n        onHint: function (hint) {\n            $('#autocomplete-ajax-x').val(hint);\n        },\n        onInvalidateSelection: function() {\n            $('#selction-ajax').html('You selected: none');\n        }\n    });\n\n    var nhlTeams = ['Anaheim Ducks', 'Atlanta Thrashers', 'Boston Bruins', 'Buffalo Sabres', 'Calgary Flames', 'Carolina Hurricanes', 'Chicago Blackhawks', 'Colorado Avalanche', 'Columbus Blue Jackets', 'Dallas Stars', 'Detroit Red Wings', 'Edmonton OIlers', 'Florida Panthers', 'Los Angeles Kings', 'Minnesota Wild', 'Montreal Canadiens', 'Nashville Predators', 'New Jersey Devils', 'New Rork Islanders', 'New York Rangers', 'Ottawa Senators', 'Philadelphia Flyers', 'Phoenix Coyotes', 'Pittsburgh Penguins', 'Saint Louis Blues', 'San Jose Sharks', 'Tampa Bay Lightning', 'Toronto Maple Leafs', 'Vancouver Canucks', 'Washington Capitals'];\n    var nbaTeams = ['Atlanta Hawks', 'Boston Celtics', 'Charlotte Bobcats', 'Chicago Bulls', 'Cleveland Cavaliers', 'Dallas Mavericks', 'Denver Nuggets', 'Detroit Pistons', 'Golden State Warriors', 'Houston Rockets', 'Indiana Pacers', 'LA Clippers', 'LA Lakers', 'Memphis Grizzlies', 'Miami Heat', 'Milwaukee Bucks', 'Minnesota Timberwolves', 'New Jersey Nets', 'New Orleans Hornets', 'New York Knicks', 'Oklahoma City Thunder', 'Orlando Magic', 'Philadelphia Sixers', 'Phoenix Suns', 'Portland Trail Blazers', 'Sacramento Kings', 'San Antonio Spurs', 'Toronto Raptors', 'Utah Jazz', 'Washington Wizards'];\n    var nhl = $.map(nhlTeams, function (team) { return { value: team, data: { category: 'NHL' }}; });\n    var nba = $.map(nbaTeams, function (team) { return { value: team, data: { category: 'NBA' } }; });\n    var teams = nhl.concat(nba);\n\n    // Initialize autocomplete with local lookup:\n    $('#autocomplete').devbridgeAutocomplete({\n        lookup: teams,\n        minChars: 1,\n        onSelect: function (suggestion) {\n            $('#selection').html('You selected: ' + suggestion.value + ', ' + suggestion.data.category);\n        },\n        showNoSuggestionNotice: true,\n        noSuggestionNotice: 'Sorry, no matching results',\n        groupBy: 'category'\n    });\n    \n    // Initialize autocomplete with custom appendTo:\n    $('#autocomplete-custom-append').autocomplete({\n        lookup: countriesArray,\n        appendTo: '#suggestions-container'\n    });\n\n    // Initialize autocomplete with custom appendTo:\n    $('#autocomplete-dynamic').autocomplete({\n        lookup: countriesArray\n    });\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/autocomplete/jquery.mockjax.js",
    "content": "/*!\n * MockJax - jQuery Plugin to Mock Ajax requests\n *\n * Version:  1.5.3\n * Released:\n * Home:   http://github.com/appendto/jquery-mockjax\n * Author:   Jonathan Sharp (http://jdsharp.com)\n * License:  MIT,GPL\n *\n * Copyright (c) 2011 appendTo LLC.\n * Dual licensed under the MIT or GPL licenses.\n * http://appendto.com/open-source-licenses\n */\n(function($) {\n\tvar _ajax = $.ajax,\n\t\tmockHandlers = [],\n\t\tmockedAjaxCalls = [],\n\t\tCALLBACK_REGEX = /=\\?(&|$)/,\n\t\tjsc = (new Date()).getTime();\n\n\n\t// Parse the given XML string.\n\tfunction parseXML(xml) {\n\t\tif ( window.DOMParser == undefined && window.ActiveXObject ) {\n\t\t\tDOMParser = function() { };\n\t\t\tDOMParser.prototype.parseFromString = function( xmlString ) {\n\t\t\t\tvar doc = new ActiveXObject('Microsoft.XMLDOM');\n\t\t\t\tdoc.async = 'false';\n\t\t\t\tdoc.loadXML( xmlString );\n\t\t\t\treturn doc;\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tvar xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' );\n\t\t\tif ( $.isXMLDoc( xmlDoc ) ) {\n\t\t\t\tvar err = $('parsererror', xmlDoc);\n\t\t\t\tif ( err.length == 1 ) {\n\t\t\t\t\tthrow('Error: ' + $(xmlDoc).text() );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow('Unable to parse XML');\n\t\t\t}\n\t\t\treturn xmlDoc;\n\t\t} catch( e ) {\n\t\t\tvar msg = ( e.name == undefined ? e : e.name + ': ' + e.message );\n\t\t\t$(document).trigger('xmlParseError', [ msg ]);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t// Trigger a jQuery event\n\tfunction trigger(s, type, args) {\n\t\t(s.context ? $(s.context) : $.event).trigger(type, args);\n\t}\n\n\t// Check if the data field on the mock handler and the request match. This\n\t// can be used to restrict a mock handler to being used only when a certain\n\t// set of data is passed to it.\n\tfunction isMockDataEqual( mock, live ) {\n\t\tvar identical = true;\n\t\t// Test for situations where the data is a querystring (not an object)\n\t\tif (typeof live === 'string') {\n\t\t\t// Querystring may be a regex\n\t\t\treturn $.isFunction( mock.test ) ? mock.test(live) : mock == live;\n\t\t}\n\t\t$.each(mock, function(k) {\n\t\t\tif ( live[k] === undefined ) {\n\t\t\t\tidentical = false;\n\t\t\t\treturn identical;\n\t\t\t} else {\n\t\t\t\tif ( typeof live[k] === 'object' && live[k] !== null ) {\n\t\t\t\t\tif ( identical && $.isArray( live[k] ) ) {\n\t\t\t\t\t\tidentical = $.isArray( mock[k] ) && live[k].length === mock[k].length;\n\t\t\t\t\t}\n\t\t\t\t\tidentical = identical && isMockDataEqual(mock[k], live[k]);\n\t\t\t\t} else {\n\t\t\t\t\tif ( mock[k] && $.isFunction( mock[k].test ) ) {\n\t\t\t\t\t\tidentical = identical && mock[k].test(live[k]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tidentical = identical && ( mock[k] == live[k] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn identical;\n\t}\n\n    // See if a mock handler property matches the default settings\n    function isDefaultSetting(handler, property) {\n        return handler[property] === $.mockjaxSettings[property];\n    }\n\n\t// Check the given handler should mock the given request\n\tfunction getMockForRequest( handler, requestSettings ) {\n\t\t// If the mock was registered with a function, let the function decide if we\n\t\t// want to mock this request\n\t\tif ( $.isFunction(handler) ) {\n\t\t\treturn handler( requestSettings );\n\t\t}\n\n\t\t// Inspect the URL of the request and check if the mock handler's url\n\t\t// matches the url for this ajax request\n\t\tif ( $.isFunction(handler.url.test) ) {\n\t\t\t// The user provided a regex for the url, test it\n\t\t\tif ( !handler.url.test( requestSettings.url ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\t// Look for a simple wildcard '*' or a direct URL match\n\t\t\tvar star = handler.url.indexOf('*');\n\t\t\tif (handler.url !== requestSettings.url && star === -1 ||\n\t\t\t\t\t!new RegExp(handler.url.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, \"\\\\$&\").replace(/\\*/g, '.+')).test(requestSettings.url)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Inspect the data submitted in the request (either POST body or GET query string)\n\t\tif ( handler.data ) {\n\t\t\tif ( ! requestSettings.data || !isMockDataEqual(handler.data, requestSettings.data) ) {\n\t\t\t\t// They're not identical, do not mock this request\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t// Inspect the request type\n\t\tif ( handler && handler.type &&\n\t\t\t\thandler.type.toLowerCase() != requestSettings.type.toLowerCase() ) {\n\t\t\t// The request type doesn't match (GET vs. POST)\n\t\t\treturn null;\n\t\t}\n\n\t\treturn handler;\n\t}\n\n\t// Process the xhr objects send operation\n\tfunction _xhrSend(mockHandler, requestSettings, origSettings) {\n\n\t\t// This is a substitute for < 1.4 which lacks $.proxy\n\t\tvar process = (function(that) {\n\t\t\treturn function() {\n\t\t\t\treturn (function() {\n\t\t\t\t\tvar onReady;\n\n\t\t\t\t\t// The request has returned\n\t\t\t\t\tthis.status     = mockHandler.status;\n\t\t\t\t\tthis.statusText = mockHandler.statusText;\n\t\t\t\t\tthis.readyState\t= 4;\n\n\t\t\t\t\t// We have an executable function, call it to give\n\t\t\t\t\t// the mock handler a chance to update it's data\n\t\t\t\t\tif ( $.isFunction(mockHandler.response) ) {\n\t\t\t\t\t\tmockHandler.response(origSettings);\n\t\t\t\t\t}\n\t\t\t\t\t// Copy over our mock to our xhr object before passing control back to\n\t\t\t\t\t// jQuery's onreadystatechange callback\n\t\t\t\t\tif ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) {\n\t\t\t\t\t\tthis.responseText = JSON.stringify(mockHandler.responseText);\n\t\t\t\t\t} else if ( requestSettings.dataType == 'xml' ) {\n\t\t\t\t\t\tif ( typeof mockHandler.responseXML == 'string' ) {\n\t\t\t\t\t\t\tthis.responseXML = parseXML(mockHandler.responseXML);\n\t\t\t\t\t\t\t//in jQuery 1.9.1+, responseXML is processed differently and relies on responseText\n\t\t\t\t\t\t\tthis.responseText = mockHandler.responseXML;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.responseXML = mockHandler.responseXML;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.responseText = mockHandler.responseText;\n\t\t\t\t\t}\n\t\t\t\t\tif( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) {\n\t\t\t\t\t\tthis.status = mockHandler.status;\n\t\t\t\t\t}\n\t\t\t\t\tif( typeof mockHandler.statusText === \"string\") {\n\t\t\t\t\t\tthis.statusText = mockHandler.statusText;\n\t\t\t\t\t}\n\t\t\t\t\t// jQuery 2.0 renamed onreadystatechange to onload\n\t\t\t\t\tonReady = this.onreadystatechange || this.onload;\n\n\t\t\t\t\t// jQuery < 1.4 doesn't have onreadystate change for xhr\n\t\t\t\t\tif ( $.isFunction( onReady ) ) {\n\t\t\t\t\t\tif( mockHandler.isTimeout) {\n\t\t\t\t\t\t\tthis.status = -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonReady.call( this, mockHandler.isTimeout ? 'timeout' : undefined );\n\t\t\t\t\t} else if ( mockHandler.isTimeout ) {\n\t\t\t\t\t\t// Fix for 1.3.2 timeout to keep success from firing.\n\t\t\t\t\t\tthis.status = -1;\n\t\t\t\t\t}\n\t\t\t\t}).apply(that);\n\t\t\t};\n\t\t})(this);\n\n\t\tif ( mockHandler.proxy ) {\n\t\t\t// We're proxying this request and loading in an external file instead\n\t\t\t_ajax({\n\t\t\t\tglobal: false,\n\t\t\t\turl: mockHandler.proxy,\n\t\t\t\ttype: mockHandler.proxyType,\n\t\t\t\tdata: mockHandler.data,\n\t\t\t\tdataType: requestSettings.dataType === \"script\" ? \"text/plain\" : requestSettings.dataType,\n\t\t\t\tcomplete: function(xhr) {\n\t\t\t\t\tmockHandler.responseXML = xhr.responseXML;\n\t\t\t\t\tmockHandler.responseText = xhr.responseText;\n                    // Don't override the handler status/statusText if it's specified by the config\n                    if (isDefaultSetting(mockHandler, 'status')) {\n\t\t\t\t\t    mockHandler.status = xhr.status;\n                    }\n                    if (isDefaultSetting(mockHandler, 'statusText')) {\n\t\t\t\t\t    mockHandler.statusText = xhr.statusText;\n                    }\n\n\t\t\t\t\tthis.responseTimer = setTimeout(process, mockHandler.responseTime || 0);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// type == 'POST' || 'GET' || 'DELETE'\n\t\t\tif ( requestSettings.async === false ) {\n\t\t\t\t// TODO: Blocking delay\n\t\t\t\tprocess();\n\t\t\t} else {\n\t\t\t\tthis.responseTimer = setTimeout(process, mockHandler.responseTime || 50);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Construct a mocked XHR Object\n\tfunction xhr(mockHandler, requestSettings, origSettings, origHandler) {\n\t\t// Extend with our default mockjax settings\n\t\tmockHandler = $.extend(true, {}, $.mockjaxSettings, mockHandler);\n\n\t\tif (typeof mockHandler.headers === 'undefined') {\n\t\t\tmockHandler.headers = {};\n\t\t}\n\t\tif ( mockHandler.contentType ) {\n\t\t\tmockHandler.headers['content-type'] = mockHandler.contentType;\n\t\t}\n\n\t\treturn {\n\t\t\tstatus: mockHandler.status,\n\t\t\tstatusText: mockHandler.statusText,\n\t\t\treadyState: 1,\n\t\t\topen: function() { },\n\t\t\tsend: function() {\n\t\t\t\torigHandler.fired = true;\n\t\t\t\t_xhrSend.call(this, mockHandler, requestSettings, origSettings);\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tclearTimeout(this.responseTimer);\n\t\t\t},\n\t\t\tsetRequestHeader: function(header, value) {\n\t\t\t\tmockHandler.headers[header] = value;\n\t\t\t},\n\t\t\tgetResponseHeader: function(header) {\n\t\t\t\t// 'Last-modified', 'Etag', 'content-type' are all checked by jQuery\n\t\t\t\tif ( mockHandler.headers && mockHandler.headers[header] ) {\n\t\t\t\t\t// Return arbitrary headers\n\t\t\t\t\treturn mockHandler.headers[header];\n\t\t\t\t} else if ( header.toLowerCase() == 'last-modified' ) {\n\t\t\t\t\treturn mockHandler.lastModified || (new Date()).toString();\n\t\t\t\t} else if ( header.toLowerCase() == 'etag' ) {\n\t\t\t\t\treturn mockHandler.etag || '';\n\t\t\t\t} else if ( header.toLowerCase() == 'content-type' ) {\n\t\t\t\t\treturn mockHandler.contentType || 'text/plain';\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\tvar headers = '';\n\t\t\t\t$.each(mockHandler.headers, function(k, v) {\n\t\t\t\t\theaders += k + ': ' + v + \"\\n\";\n\t\t\t\t});\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t};\n\t}\n\n\t// Process a JSONP mock request.\n\tfunction processJsonpMock( requestSettings, mockHandler, origSettings ) {\n\t\t// Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here\n\t\t// because there isn't an easy hook for the cross domain script tag of jsonp\n\n\t\tprocessJsonpUrl( requestSettings );\n\n\t\trequestSettings.dataType = \"json\";\n\t\tif(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) {\n\t\t\tcreateJsonpCallback(requestSettings, mockHandler, origSettings);\n\n\t\t\t// We need to make sure\n\t\t\t// that a JSONP style response is executed properly\n\n\t\t\tvar rurl = /^(\\w+:)?\\/\\/([^\\/?#]+)/,\n\t\t\t\tparts = rurl.exec( requestSettings.url ),\n\t\t\t\tremote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);\n\n\t\t\trequestSettings.dataType = \"script\";\n\t\t\tif(requestSettings.type.toUpperCase() === \"GET\" && remote ) {\n\t\t\t\tvar newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings );\n\n\t\t\t\t// Check if we are supposed to return a Deferred back to the mock call, or just\n\t\t\t\t// signal success\n\t\t\t\tif(newMockReturn) {\n\t\t\t\t\treturn newMockReturn;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t// Append the required callback parameter to the end of the request URL, for a JSONP request\n\tfunction processJsonpUrl( requestSettings ) {\n\t\tif ( requestSettings.type.toUpperCase() === \"GET\" ) {\n\t\t\tif ( !CALLBACK_REGEX.test( requestSettings.url ) ) {\n\t\t\t\trequestSettings.url += (/\\?/.test( requestSettings.url ) ? \"&\" : \"?\") +\n\t\t\t\t\t(requestSettings.jsonp || \"callback\") + \"=?\";\n\t\t\t}\n\t\t} else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) {\n\t\t\trequestSettings.data = (requestSettings.data ? requestSettings.data + \"&\" : \"\") + (requestSettings.jsonp || \"callback\") + \"=?\";\n\t\t}\n\t}\n\n\t// Process a JSONP request by evaluating the mocked response text\n\tfunction processJsonpRequest( requestSettings, mockHandler, origSettings ) {\n\t\t// Synthesize the mock request for adding a script tag\n\t\tvar callbackContext = origSettings && origSettings.context || requestSettings,\n\t\t\tnewMock = null;\n\n\n\t\t// If the response handler on the moock is a function, call it\n\t\tif ( mockHandler.response && $.isFunction(mockHandler.response) ) {\n\t\t\tmockHandler.response(origSettings);\n\t\t} else {\n\n\t\t\t// Evaluate the responseText javascript in a global context\n\t\t\tif( typeof mockHandler.responseText === 'object' ) {\n\t\t\t\t$.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')');\n\t\t\t} else {\n\t\t\t\t$.globalEval( '(' + mockHandler.responseText + ')');\n\t\t\t}\n\t\t}\n\n\t\t// Successful response\n\t\tjsonpSuccess( requestSettings, callbackContext, mockHandler );\n\t\tjsonpComplete( requestSettings, callbackContext, mockHandler );\n\n\t\t// If we are running under jQuery 1.5+, return a deferred object\n\t\tif($.Deferred){\n\t\t\tnewMock = new $.Deferred();\n\t\t\tif(typeof mockHandler.responseText == \"object\"){\n\t\t\t\tnewMock.resolveWith( callbackContext, [mockHandler.responseText] );\n\t\t\t}\n\t\t\telse{\n\t\t\t\tnewMock.resolveWith( callbackContext, [$.parseJSON( mockHandler.responseText )] );\n\t\t\t}\n\t\t}\n\t\treturn newMock;\n\t}\n\n\n\t// Create the required JSONP callback function for the request\n\tfunction createJsonpCallback( requestSettings, mockHandler, origSettings ) {\n\t\tvar callbackContext = origSettings && origSettings.context || requestSettings;\n\t\tvar jsonp = requestSettings.jsonpCallback || (\"jsonp\" + jsc++);\n\n\t\t// Replace the =? sequence both in the query string and the data\n\t\tif ( requestSettings.data ) {\n\t\t\trequestSettings.data = (requestSettings.data + \"\").replace(CALLBACK_REGEX, \"=\" + jsonp + \"$1\");\n\t\t}\n\n\t\trequestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, \"=\" + jsonp + \"$1\");\n\n\n\t\t// Handle JSONP-style loading\n\t\twindow[ jsonp ] = window[ jsonp ] || function( tmp ) {\n\t\t\tdata = tmp;\n\t\t\tjsonpSuccess( requestSettings, callbackContext, mockHandler );\n\t\t\tjsonpComplete( requestSettings, callbackContext, mockHandler );\n\t\t\t// Garbage collect\n\t\t\twindow[ jsonp ] = undefined;\n\n\t\t\ttry {\n\t\t\t\tdelete window[ jsonp ];\n\t\t\t} catch(e) {}\n\n\t\t\tif ( head ) {\n\t\t\t\thead.removeChild( script );\n\t\t\t}\n\t\t};\n\t}\n\n\t// The JSONP request was successful\n\tfunction jsonpSuccess(requestSettings, callbackContext, mockHandler) {\n\t\t// If a local callback was specified, fire it and pass it the data\n\t\tif ( requestSettings.success ) {\n\t\t\trequestSettings.success.call( callbackContext, mockHandler.responseText || \"\", status, {} );\n\t\t}\n\n\t\t// Fire the global callback\n\t\tif ( requestSettings.global ) {\n\t\t\ttrigger(requestSettings, \"ajaxSuccess\", [{}, requestSettings] );\n\t\t}\n\t}\n\n\t// The JSONP request was completed\n\tfunction jsonpComplete(requestSettings, callbackContext) {\n\t\t// Process result\n\t\tif ( requestSettings.complete ) {\n\t\t\trequestSettings.complete.call( callbackContext, {} , status );\n\t\t}\n\n\t\t// The request was completed\n\t\tif ( requestSettings.global ) {\n\t\t\ttrigger( \"ajaxComplete\", [{}, requestSettings] );\n\t\t}\n\n\t\t// Handle the global AJAX counter\n\t\tif ( requestSettings.global && ! --$.active ) {\n\t\t\t$.event.trigger( \"ajaxStop\" );\n\t\t}\n\t}\n\n\n\t// The core $.ajax replacement.\n\tfunction handleAjax( url, origSettings ) {\n\t\tvar mockRequest, requestSettings, mockHandler;\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\torigSettings = url;\n\t\t\turl = undefined;\n\t\t} else {\n\t\t\t// work around to support 1.5 signature\n\t\t\torigSettings = origSettings || {};\n\t\t\torigSettings.url = url;\n\t\t}\n\n\t\t// Extend the original settings for the request\n\t\trequestSettings = $.extend(true, {}, $.ajaxSettings, origSettings);\n\n\t\t// Iterate over our mock handlers (in registration order) until we find\n\t\t// one that is willing to intercept the request\n\t\tfor(var k = 0; k < mockHandlers.length; k++) {\n\t\t\tif ( !mockHandlers[k] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmockHandler = getMockForRequest( mockHandlers[k], requestSettings );\n\t\t\tif(!mockHandler) {\n\t\t\t\t// No valid mock found for this request\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmockedAjaxCalls.push(requestSettings);\n\n\t\t\t// If logging is enabled, log the mock to the console\n\t\t\t$.mockjaxSettings.log( mockHandler, requestSettings );\n\n\n\t\t\tif ( requestSettings.dataType && requestSettings.dataType.toUpperCase() === 'JSONP' ) {\n\t\t\t\tif ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) {\n\t\t\t\t\t// This mock will handle the JSONP request\n\t\t\t\t\treturn mockRequest;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// Removed to fix #54 - keep the mocking data object intact\n\t\t\t//mockHandler.data = requestSettings.data;\n\n\t\t\tmockHandler.cache = requestSettings.cache;\n\t\t\tmockHandler.timeout = requestSettings.timeout;\n\t\t\tmockHandler.global = requestSettings.global;\n\n\t\t\tcopyUrlParameters(mockHandler, origSettings);\n\n\t\t\t(function(mockHandler, requestSettings, origSettings, origHandler) {\n\t\t\t\tmockRequest = _ajax.call($, $.extend(true, {}, origSettings, {\n\t\t\t\t\t// Mock the XHR object\n\t\t\t\t\txhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ); }\n\t\t\t\t}));\n\t\t\t})(mockHandler, requestSettings, origSettings, mockHandlers[k]);\n\n\t\t\treturn mockRequest;\n\t\t}\n\n\t\t// We don't have a mock request\n\t\tif($.mockjaxSettings.throwUnmocked === true) {\n\t\t\tthrow('AJAX not mocked: ' + origSettings.url);\n\t\t}\n\t\telse { // trigger a normal request\n\t\t\treturn _ajax.apply($, [origSettings]);\n\t\t}\n\t}\n\n\t/**\n\t* Copies URL parameter values if they were captured by a regular expression\n\t* @param {Object} mockHandler\n\t* @param {Object} origSettings\n\t*/\n\tfunction copyUrlParameters(mockHandler, origSettings) {\n\t\t//parameters aren't captured if the URL isn't a RegExp\n\t\tif (!(mockHandler.url instanceof RegExp)) {\n\t\t\treturn;\n\t\t}\n\t\t//if no URL params were defined on the handler, don't attempt a capture\n\t\tif (!mockHandler.hasOwnProperty('urlParams')) {\n\t\t\treturn;\n\t\t}\n\t\tvar captures = mockHandler.url.exec(origSettings.url);\n\t\t//the whole RegExp match is always the first value in the capture results\n\t\tif (captures.length === 1) {\n\t\t\treturn;\n\t\t}\n\t\tcaptures.shift();\n\t\t//use handler params as keys and capture resuts as values\n\t\tvar i = 0,\n\t\tcapturesLength = captures.length,\n\t\tparamsLength = mockHandler.urlParams.length,\n\t\t//in case the number of params specified is less than actual captures\n\t\tmaxIterations = Math.min(capturesLength, paramsLength),\n\t\tparamValues = {};\n\t\tfor (i; i < maxIterations; i++) {\n\t\t\tvar key = mockHandler.urlParams[i];\n\t\t\tparamValues[key] = captures[i];\n\t\t}\n\t\torigSettings.urlParams = paramValues;\n\t}\n\n\n\t// Public\n\n\t$.extend({\n\t\tajax: handleAjax\n\t});\n\n\t$.mockjaxSettings = {\n\t\t//url:        null,\n\t\t//type:       'GET',\n\t\tlog:          function( mockHandler, requestSettings ) {\n\t\t\tif ( mockHandler.logging === false ||\n\t\t\t\t ( typeof mockHandler.logging === 'undefined' && $.mockjaxSettings.logging === false ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( window.console && console.log ) {\n\t\t\t\tvar message = 'MOCK ' + requestSettings.type.toUpperCase() + ': ' + requestSettings.url;\n\t\t\t\tvar request = $.extend({}, requestSettings);\n\n\t\t\t\tif (typeof console.log === 'function') {\n\t\t\t\t\tconsole.log(message, request);\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconsole.log( message + ' ' + JSON.stringify(request) );\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tlogging:       true,\n\t\tstatus:        200,\n\t\tstatusText:    \"OK\",\n\t\tresponseTime:  500,\n\t\tisTimeout:     false,\n\t\tthrowUnmocked: false,\n\t\tcontentType:   'text/plain',\n\t\tresponse:      '',\n\t\tresponseText:  '',\n\t\tresponseXML:   '',\n\t\tproxy:         '',\n\t\tproxyType:     'GET',\n\n\t\tlastModified:  null,\n\t\tetag:          '',\n\t\theaders: {\n\t\t\tetag: 'IJF@H#@923uf8023hFO@I#H#',\n\t\t\t'content-type' : 'text/plain'\n\t\t}\n\t};\n\n\t$.mockjax = function(settings) {\n\t\tvar i = mockHandlers.length;\n\t\tmockHandlers[i] = settings;\n\t\treturn i;\n\t};\n\t$.mockjaxClear = function(i) {\n\t\tif ( arguments.length == 1 ) {\n\t\t\tmockHandlers[i] = null;\n\t\t} else {\n\t\t\tmockHandlers = [];\n\t\t}\n\t\tmockedAjaxCalls = [];\n\t};\n\t$.mockjax.handler = function(i) {\n\t\tif ( arguments.length == 1 ) {\n\t\t\treturn mockHandlers[i];\n\t\t}\n\t};\n\t$.mockjax.mockedAjaxCalls = function() {\n\t\treturn mockedAjaxCalls;\n\t};\n})(jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-colorpicker/css/bootstrap-colorpicker.css",
    "content": "/*!\n * Bootstrap Colorpicker v2.3.3\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n */\n.colorpicker-saturation {\n  width: 100px;\n  height: 100px;\n  background-image: url(\"../img/bootstrap-colorpicker/saturation.png\");\n  cursor: crosshair;\n  float: left;\n}\n.colorpicker-saturation i {\n  display: block;\n  height: 5px;\n  width: 5px;\n  border: 1px solid #000;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin: -4px 0 0 -4px;\n}\n.colorpicker-saturation i b {\n  display: block;\n  height: 5px;\n  width: 5px;\n  border: 1px solid #fff;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n}\n.colorpicker-hue,\n.colorpicker-alpha {\n  width: 15px;\n  height: 100px;\n  float: left;\n  cursor: row-resize;\n  margin-left: 4px;\n  margin-bottom: 4px;\n}\n.colorpicker-hue i,\n.colorpicker-alpha i {\n  display: block;\n  height: 1px;\n  background: #000;\n  border-top: 1px solid #fff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  margin-top: -1px;\n}\n.colorpicker-hue {\n  background-image: url(\"../img/bootstrap-colorpicker/hue.png\");\n}\n.colorpicker-alpha {\n  background-image: url(\"../img/bootstrap-colorpicker/alpha.png\");\n  display: none;\n}\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n  background-size: contain;\n}\n.colorpicker {\n  padding: 4px;\n  min-width: 130px;\n  margin-top: 1px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  z-index: 2500;\n}\n.colorpicker:before,\n.colorpicker:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.colorpicker:after {\n  clear: both;\n}\n.colorpicker:before {\n  content: '';\n  display: inline-block;\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  position: absolute;\n  top: -7px;\n  left: 6px;\n}\n.colorpicker:after {\n  content: '';\n  display: inline-block;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #ffffff;\n  position: absolute;\n  top: -6px;\n  left: 7px;\n}\n.colorpicker div {\n  position: relative;\n}\n.colorpicker.colorpicker-with-alpha {\n  min-width: 140px;\n}\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n  display: block;\n}\n.colorpicker-color {\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n  background-image: url(\"../img/bootstrap-colorpicker/alpha.png\");\n  background-position: 0 100%;\n}\n.colorpicker-color div {\n  height: 10px;\n}\n.colorpicker-selectors {\n  display: none;\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n}\n.colorpicker-selectors i {\n  cursor: pointer;\n  float: left;\n  height: 10px;\n  width: 10px;\n}\n.colorpicker-selectors i + i {\n  margin-left: 3px;\n}\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n  display: inline-block;\n  cursor: pointer;\n  height: 16px;\n  vertical-align: text-top;\n  width: 16px;\n}\n.colorpicker.colorpicker-inline {\n  position: relative;\n  display: inline-block;\n  float: none;\n  z-index: auto;\n}\n.colorpicker.colorpicker-horizontal {\n  width: 110px;\n  min-width: 110px;\n  height: auto;\n}\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n  margin-bottom: 4px;\n}\n.colorpicker.colorpicker-horizontal .colorpicker-color {\n  width: 100px;\n}\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  width: 100px;\n  height: 15px;\n  float: left;\n  cursor: col-resize;\n  margin-left: 0px;\n  margin-bottom: 4px;\n}\n.colorpicker.colorpicker-horizontal .colorpicker-hue i,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha i {\n  display: block;\n  height: 15px;\n  background: #ffffff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1px;\n  border: none;\n  margin-top: 0px;\n}\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n  background-image: url(\"../img/bootstrap-colorpicker/hue-horizontal.png\");\n}\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  background-image: url(\"../img/bootstrap-colorpicker/alpha-horizontal.png\");\n}\n.colorpicker.colorpicker-hidden {\n  display: none;\n}\n.colorpicker.colorpicker-visible {\n  display: block;\n}\n.colorpicker-inline.colorpicker-visible {\n  display: inline-block;\n}\n.colorpicker-right:before {\n  left: auto;\n  right: 6px;\n}\n.colorpicker-right:after {\n  left: auto;\n  right: 7px;\n}\n.colorpicker-no-arrow:before {\n  border-right: 0;\n  border-left: 0;\n}\n.colorpicker-no-arrow:after {\n  border-right: 0;\n  border-left: 0;\n}\n/*# sourceMappingURL=bootstrap-colorpicker.css.map */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-colorpicker/js/bootstrap-colorpicker.js",
    "content": "/*!\n * Bootstrap Colorpicker v2.3.3\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n */\n\n(function(factory) {\n  \"use strict\";\n  if (typeof exports === 'object') {\n    module.exports = factory(window.jQuery);\n  } else if (typeof define === 'function' && define.amd) {\n    define(['jquery'], factory);\n  } else if (window.jQuery && !window.jQuery.fn.colorpicker) {\n    factory(window.jQuery);\n  }\n}(function($) {\n  'use strict';\n\n  /**\n   * Color manipulation helper class\n   *\n   * @param {Object|String} val\n   * @param {Object} predefinedColors\n   * @constructor\n   */\n  var Color = function(val, predefinedColors) {\n    this.value = {\n      h: 0,\n      s: 0,\n      b: 0,\n      a: 1\n    };\n    this.origFormat = null; // original string format\n    if (predefinedColors) {\n      $.extend(this.colors, predefinedColors);\n    }\n    if (val) {\n      if (val.toLowerCase !== undefined) {\n        // cast to string\n        val = val + '';\n        this.setColor(val);\n      } else if (val.h !== undefined) {\n        this.value = val;\n      }\n    }\n  };\n\n  Color.prototype = {\n    constructor: Color,\n    // 140 predefined colors from the HTML Colors spec\n    colors: {\n      \"aliceblue\": \"#f0f8ff\",\n      \"antiquewhite\": \"#faebd7\",\n      \"aqua\": \"#00ffff\",\n      \"aquamarine\": \"#7fffd4\",\n      \"azure\": \"#f0ffff\",\n      \"beige\": \"#f5f5dc\",\n      \"bisque\": \"#ffe4c4\",\n      \"black\": \"#000000\",\n      \"blanchedalmond\": \"#ffebcd\",\n      \"blue\": \"#0000ff\",\n      \"blueviolet\": \"#8a2be2\",\n      \"brown\": \"#a52a2a\",\n      \"burlywood\": \"#deb887\",\n      \"cadetblue\": \"#5f9ea0\",\n      \"chartreuse\": \"#7fff00\",\n      \"chocolate\": \"#d2691e\",\n      \"coral\": \"#ff7f50\",\n      \"cornflowerblue\": \"#6495ed\",\n      \"cornsilk\": \"#fff8dc\",\n      \"crimson\": \"#dc143c\",\n      \"cyan\": \"#00ffff\",\n      \"darkblue\": \"#00008b\",\n      \"darkcyan\": \"#008b8b\",\n      \"darkgoldenrod\": \"#b8860b\",\n      \"darkgray\": \"#a9a9a9\",\n      \"darkgreen\": \"#006400\",\n      \"darkkhaki\": \"#bdb76b\",\n      \"darkmagenta\": \"#8b008b\",\n      \"darkolivegreen\": \"#556b2f\",\n      \"darkorange\": \"#ff8c00\",\n      \"darkorchid\": \"#9932cc\",\n      \"darkred\": \"#8b0000\",\n      \"darksalmon\": \"#e9967a\",\n      \"darkseagreen\": \"#8fbc8f\",\n      \"darkslateblue\": \"#483d8b\",\n      \"darkslategray\": \"#2f4f4f\",\n      \"darkturquoise\": \"#00ced1\",\n      \"darkviolet\": \"#9400d3\",\n      \"deeppink\": \"#ff1493\",\n      \"deepskyblue\": \"#00bfff\",\n      \"dimgray\": \"#696969\",\n      \"dodgerblue\": \"#1e90ff\",\n      \"firebrick\": \"#b22222\",\n      \"floralwhite\": \"#fffaf0\",\n      \"forestgreen\": \"#228b22\",\n      \"fuchsia\": \"#ff00ff\",\n      \"gainsboro\": \"#dcdcdc\",\n      \"ghostwhite\": \"#f8f8ff\",\n      \"gold\": \"#ffd700\",\n      \"goldenrod\": \"#daa520\",\n      \"gray\": \"#808080\",\n      \"green\": \"#008000\",\n      \"greenyellow\": \"#adff2f\",\n      \"honeydew\": \"#f0fff0\",\n      \"hotpink\": \"#ff69b4\",\n      \"indianred\": \"#cd5c5c\",\n      \"indigo\": \"#4b0082\",\n      \"ivory\": \"#fffff0\",\n      \"khaki\": \"#f0e68c\",\n      \"lavender\": \"#e6e6fa\",\n      \"lavenderblush\": \"#fff0f5\",\n      \"lawngreen\": \"#7cfc00\",\n      \"lemonchiffon\": \"#fffacd\",\n      \"lightblue\": \"#add8e6\",\n      \"lightcoral\": \"#f08080\",\n      \"lightcyan\": \"#e0ffff\",\n      \"lightgoldenrodyellow\": \"#fafad2\",\n      \"lightgrey\": \"#d3d3d3\",\n      \"lightgreen\": \"#90ee90\",\n      \"lightpink\": \"#ffb6c1\",\n      \"lightsalmon\": \"#ffa07a\",\n      \"lightseagreen\": \"#20b2aa\",\n      \"lightskyblue\": \"#87cefa\",\n      \"lightslategray\": \"#778899\",\n      \"lightsteelblue\": \"#b0c4de\",\n      \"lightyellow\": \"#ffffe0\",\n      \"lime\": \"#00ff00\",\n      \"limegreen\": \"#32cd32\",\n      \"linen\": \"#faf0e6\",\n      \"magenta\": \"#ff00ff\",\n      \"maroon\": \"#800000\",\n      \"mediumaquamarine\": \"#66cdaa\",\n      \"mediumblue\": \"#0000cd\",\n      \"mediumorchid\": \"#ba55d3\",\n      \"mediumpurple\": \"#9370d8\",\n      \"mediumseagreen\": \"#3cb371\",\n      \"mediumslateblue\": \"#7b68ee\",\n      \"mediumspringgreen\": \"#00fa9a\",\n      \"mediumturquoise\": \"#48d1cc\",\n      \"mediumvioletred\": \"#c71585\",\n      \"midnightblue\": \"#191970\",\n      \"mintcream\": \"#f5fffa\",\n      \"mistyrose\": \"#ffe4e1\",\n      \"moccasin\": \"#ffe4b5\",\n      \"navajowhite\": \"#ffdead\",\n      \"navy\": \"#000080\",\n      \"oldlace\": \"#fdf5e6\",\n      \"olive\": \"#808000\",\n      \"olivedrab\": \"#6b8e23\",\n      \"orange\": \"#ffa500\",\n      \"orangered\": \"#ff4500\",\n      \"orchid\": \"#da70d6\",\n      \"palegoldenrod\": \"#eee8aa\",\n      \"palegreen\": \"#98fb98\",\n      \"paleturquoise\": \"#afeeee\",\n      \"palevioletred\": \"#d87093\",\n      \"papayawhip\": \"#ffefd5\",\n      \"peachpuff\": \"#ffdab9\",\n      \"peru\": \"#cd853f\",\n      \"pink\": \"#ffc0cb\",\n      \"plum\": \"#dda0dd\",\n      \"powderblue\": \"#b0e0e6\",\n      \"purple\": \"#800080\",\n      \"red\": \"#ff0000\",\n      \"rosybrown\": \"#bc8f8f\",\n      \"royalblue\": \"#4169e1\",\n      \"saddlebrown\": \"#8b4513\",\n      \"salmon\": \"#fa8072\",\n      \"sandybrown\": \"#f4a460\",\n      \"seagreen\": \"#2e8b57\",\n      \"seashell\": \"#fff5ee\",\n      \"sienna\": \"#a0522d\",\n      \"silver\": \"#c0c0c0\",\n      \"skyblue\": \"#87ceeb\",\n      \"slateblue\": \"#6a5acd\",\n      \"slategray\": \"#708090\",\n      \"snow\": \"#fffafa\",\n      \"springgreen\": \"#00ff7f\",\n      \"steelblue\": \"#4682b4\",\n      \"tan\": \"#d2b48c\",\n      \"teal\": \"#008080\",\n      \"thistle\": \"#d8bfd8\",\n      \"tomato\": \"#ff6347\",\n      \"turquoise\": \"#40e0d0\",\n      \"violet\": \"#ee82ee\",\n      \"wheat\": \"#f5deb3\",\n      \"white\": \"#ffffff\",\n      \"whitesmoke\": \"#f5f5f5\",\n      \"yellow\": \"#ffff00\",\n      \"yellowgreen\": \"#9acd32\",\n      \"transparent\": \"transparent\"\n    },\n    _sanitizeNumber: function(val) {\n      if (typeof val === 'number') {\n        return val;\n      }\n      if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {\n        return 1;\n      }\n      if (val === '') {\n        return 0;\n      }\n      if (val.toLowerCase !== undefined) {\n        if (val.match(/^\\./)) {\n          val = \"0\" + val;\n        }\n        return Math.ceil(parseFloat(val) * 100) / 100;\n      }\n      return 1;\n    },\n    isTransparent: function(strVal) {\n      if (!strVal) {\n        return false;\n      }\n      strVal = strVal.toLowerCase().trim();\n      return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\\(0,0,0,0?\\.?0\\)/));\n    },\n    rgbaIsTransparent: function(rgba) {\n      return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));\n    },\n    //parse a string to HSB\n    setColor: function(strVal) {\n      strVal = strVal.toLowerCase().trim();\n      if (strVal) {\n        if (this.isTransparent(strVal)) {\n          this.value = {\n            h: 0,\n            s: 0,\n            b: 0,\n            a: 0\n          };\n        } else {\n          this.value = this.stringToHSB(strVal) || {\n            h: 0,\n            s: 0,\n            b: 0,\n            a: 1\n          }; // if parser fails, defaults to black\n        }\n      }\n    },\n    stringToHSB: function(strVal) {\n      strVal = strVal.toLowerCase();\n      var alias;\n      if (typeof this.colors[strVal] !== 'undefined') {\n        strVal = this.colors[strVal];\n        alias = 'alias';\n      }\n      var that = this,\n        result = false;\n      $.each(this.stringParsers, function(i, parser) {\n        var match = parser.re.exec(strVal),\n          values = match && parser.parse.apply(that, [match]),\n          format = alias || parser.format || 'rgba';\n        if (values) {\n          if (format.match(/hsla?/)) {\n            result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));\n          } else {\n            result = that.RGBtoHSB.apply(that, values);\n          }\n          that.origFormat = format;\n          return false;\n        }\n        return true;\n      });\n      return result;\n    },\n    setHue: function(h) {\n      this.value.h = 1 - h;\n    },\n    setSaturation: function(s) {\n      this.value.s = s;\n    },\n    setBrightness: function(b) {\n      this.value.b = 1 - b;\n    },\n    setAlpha: function(a) {\n      this.value.a = Math.round((parseInt((1 - a) * 100, 10) / 100) * 100) / 100;\n    },\n    toRGB: function(h, s, b, a) {\n      if (!h) {\n        h = this.value.h;\n        s = this.value.s;\n        b = this.value.b;\n      }\n      h *= 360;\n      var R, G, B, X, C;\n      h = (h % 360) / 60;\n      C = b * s;\n      X = C * (1 - Math.abs(h % 2 - 1));\n      R = G = B = b - C;\n\n      h = ~~h;\n      R += [C, X, 0, 0, X, C][h];\n      G += [X, C, C, X, 0, 0][h];\n      B += [0, 0, X, C, C, X][h];\n      return {\n        r: Math.round(R * 255),\n        g: Math.round(G * 255),\n        b: Math.round(B * 255),\n        a: a || this.value.a\n      };\n    },\n    toHex: function(h, s, b, a) {\n      var rgb = this.toRGB(h, s, b, a);\n      if (this.rgbaIsTransparent(rgb)) {\n        return 'transparent';\n      }\n      return '#' + ((1 << 24) | (parseInt(rgb.r) << 16) | (parseInt(rgb.g) << 8) | parseInt(rgb.b)).toString(16).substr(1);\n    },\n    toHSL: function(h, s, b, a) {\n      h = h || this.value.h;\n      s = s || this.value.s;\n      b = b || this.value.b;\n      a = a || this.value.a;\n\n      var H = h,\n        L = (2 - s) * b,\n        S = s * b;\n      if (L > 0 && L <= 1) {\n        S /= L;\n      } else {\n        S /= 2 - L;\n      }\n      L /= 2;\n      if (S > 1) {\n        S = 1;\n      }\n      return {\n        h: isNaN(H) ? 0 : H,\n        s: isNaN(S) ? 0 : S,\n        l: isNaN(L) ? 0 : L,\n        a: isNaN(a) ? 0 : a\n      };\n    },\n    toAlias: function(r, g, b, a) {\n      var rgb = this.toHex(r, g, b, a);\n      for (var alias in this.colors) {\n        if (this.colors[alias] === rgb) {\n          return alias;\n        }\n      }\n      return false;\n    },\n    RGBtoHSB: function(r, g, b, a) {\n      r /= 255;\n      g /= 255;\n      b /= 255;\n\n      var H, S, V, C;\n      V = Math.max(r, g, b);\n      C = V - Math.min(r, g, b);\n      H = (C === 0 ? null :\n        V === r ? (g - b) / C :\n        V === g ? (b - r) / C + 2 :\n        (r - g) / C + 4\n      );\n      H = ((H + 360) % 6) * 60 / 360;\n      S = C === 0 ? 0 : C / V;\n      return {\n        h: this._sanitizeNumber(H),\n        s: S,\n        b: V,\n        a: this._sanitizeNumber(a)\n      };\n    },\n    HueToRGB: function(p, q, h) {\n      if (h < 0) {\n        h += 1;\n      } else if (h > 1) {\n        h -= 1;\n      }\n      if ((h * 6) < 1) {\n        return p + (q - p) * h * 6;\n      } else if ((h * 2) < 1) {\n        return q;\n      } else if ((h * 3) < 2) {\n        return p + (q - p) * ((2 / 3) - h) * 6;\n      } else {\n        return p;\n      }\n    },\n    HSLtoRGB: function(h, s, l, a) {\n      if (s < 0) {\n        s = 0;\n      }\n      var q;\n      if (l <= 0.5) {\n        q = l * (1 + s);\n      } else {\n        q = l + s - (l * s);\n      }\n\n      var p = 2 * l - q;\n\n      var tr = h + (1 / 3);\n      var tg = h;\n      var tb = h - (1 / 3);\n\n      var r = Math.round(this.HueToRGB(p, q, tr) * 255);\n      var g = Math.round(this.HueToRGB(p, q, tg) * 255);\n      var b = Math.round(this.HueToRGB(p, q, tb) * 255);\n      return [r, g, b, this._sanitizeNumber(a)];\n    },\n    toString: function(format) {\n      format = format || 'rgba';\n      var c = false;\n      switch (format) {\n        case 'rgb':\n          {\n            c = this.toRGB();\n            if (this.rgbaIsTransparent(c)) {\n              return 'transparent';\n            }\n            return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';\n          }\n          break;\n        case 'rgba':\n          {\n            c = this.toRGB();\n            return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';\n          }\n          break;\n        case 'hsl':\n          {\n            c = this.toHSL();\n            return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';\n          }\n          break;\n        case 'hsla':\n          {\n            c = this.toHSL();\n            return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';\n          }\n          break;\n        case 'hex':\n          {\n            return this.toHex();\n          }\n          break;\n        case 'alias':\n          return this.toAlias() || this.toHex();\n        default:\n          {\n            return c;\n          }\n          break;\n      }\n    },\n    // a set of RE's that can match strings and generate color tuples.\n    // from John Resig color plugin\n    // https://github.com/jquery/jquery-color/\n    stringParsers: [{\n      re: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*?\\)/,\n      format: 'rgb',\n      parse: function(execResult) {\n        return [\n          execResult[1],\n          execResult[2],\n          execResult[3],\n          1\n        ];\n      }\n    }, {\n      re: /rgb\\(\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*?\\)/,\n      format: 'rgb',\n      parse: function(execResult) {\n        return [\n          2.55 * execResult[1],\n          2.55 * execResult[2],\n          2.55 * execResult[3],\n          1\n        ];\n      }\n    }, {\n      re: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d*(?:\\.\\d+)?)\\s*)?\\)/,\n      format: 'rgba',\n      parse: function(execResult) {\n        return [\n          execResult[1],\n          execResult[2],\n          execResult[3],\n          execResult[4]\n        ];\n      }\n    }, {\n      re: /rgba\\(\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d*(?:\\.\\d+)?)\\s*)?\\)/,\n      format: 'rgba',\n      parse: function(execResult) {\n        return [\n          2.55 * execResult[1],\n          2.55 * execResult[2],\n          2.55 * execResult[3],\n          execResult[4]\n        ];\n      }\n    }, {\n      re: /hsl\\(\\s*(\\d*(?:\\.\\d+)?)\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*?\\)/,\n      format: 'hsl',\n      parse: function(execResult) {\n        return [\n          execResult[1] / 360,\n          execResult[2] / 100,\n          execResult[3] / 100,\n          execResult[4]\n        ];\n      }\n    }, {\n      re: /hsla\\(\\s*(\\d*(?:\\.\\d+)?)\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*,\\s*(\\d*(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d*(?:\\.\\d+)?)\\s*)?\\)/,\n      format: 'hsla',\n      parse: function(execResult) {\n        return [\n          execResult[1] / 360,\n          execResult[2] / 100,\n          execResult[3] / 100,\n          execResult[4]\n        ];\n      }\n    }, {\n      re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,\n      format: 'hex',\n      parse: function(execResult) {\n        return [\n          parseInt(execResult[1], 16),\n          parseInt(execResult[2], 16),\n          parseInt(execResult[3], 16),\n          1\n        ];\n      }\n    }, {\n      re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,\n      format: 'hex',\n      parse: function(execResult) {\n        return [\n          parseInt(execResult[1] + execResult[1], 16),\n          parseInt(execResult[2] + execResult[2], 16),\n          parseInt(execResult[3] + execResult[3], 16),\n          1\n        ];\n      }\n    }],\n    colorNameToHex: function(name) {\n      if (typeof this.colors[name.toLowerCase()] !== 'undefined') {\n        return this.colors[name.toLowerCase()];\n      }\n      return false;\n    }\n  };\n\n  /*\n   * Default plugin options\n   */\n  var defaults = {\n    horizontal: false, // horizontal mode layout ?\n    inline: false, //forces to show the colorpicker as an inline element\n    color: false, //forces a color\n    format: false, //forces a format\n    input: 'input', // children input selector\n    container: false, // container selector\n    component: '.add-on, .input-group-addon', // children component selector\n    sliders: {\n      saturation: {\n        maxLeft: 100,\n        maxTop: 100,\n        callLeft: 'setSaturation',\n        callTop: 'setBrightness'\n      },\n      hue: {\n        maxLeft: 0,\n        maxTop: 100,\n        callLeft: false,\n        callTop: 'setHue'\n      },\n      alpha: {\n        maxLeft: 0,\n        maxTop: 100,\n        callLeft: false,\n        callTop: 'setAlpha'\n      }\n    },\n    slidersHorz: {\n      saturation: {\n        maxLeft: 100,\n        maxTop: 100,\n        callLeft: 'setSaturation',\n        callTop: 'setBrightness'\n      },\n      hue: {\n        maxLeft: 100,\n        maxTop: 0,\n        callLeft: 'setHue',\n        callTop: false\n      },\n      alpha: {\n        maxLeft: 100,\n        maxTop: 0,\n        callLeft: 'setAlpha',\n        callTop: false\n      }\n    },\n    template: '<div class=\"colorpicker dropdown-menu\">' +\n      '<div class=\"colorpicker-saturation\"><i><b></b></i></div>' +\n      '<div class=\"colorpicker-hue\"><i></i></div>' +\n      '<div class=\"colorpicker-alpha\"><i></i></div>' +\n      '<div class=\"colorpicker-color\"><div /></div>' +\n      '<div class=\"colorpicker-selectors\"></div>' +\n      '</div>',\n    align: 'right',\n    customClass: null,\n    colorSelectors: null\n  };\n\n  /**\n   * Colorpicker component class\n   *\n   * @param {Object|String} element\n   * @param {Object} options\n   * @constructor\n   */\n  var Colorpicker = function(element, options) {\n    this.element = $(element).addClass('colorpicker-element');\n    this.options = $.extend(true, {}, defaults, this.element.data(), options);\n    this.component = this.options.component;\n    this.component = (this.component !== false) ? this.element.find(this.component) : false;\n    if (this.component && (this.component.length === 0)) {\n      this.component = false;\n    }\n    this.container = (this.options.container === true) ? this.element : this.options.container;\n    this.container = (this.container !== false) ? $(this.container) : false;\n\n    // Is the element an input? Should we search inside for any input?\n    this.input = this.element.is('input') ? this.element : (this.options.input ?\n      this.element.find(this.options.input) : false);\n    if (this.input && (this.input.length === 0)) {\n      this.input = false;\n    }\n    // Set HSB color\n    this.color = new Color(this.options.color !== false ? this.options.color : this.getValue(), this.options.colorSelectors);\n    this.format = this.options.format !== false ? this.options.format : this.color.origFormat;\n\n    if (this.options.color !== false) {\n      this.updateInput(this.color);\n      this.updateData(this.color);\n    }\n\n    // Setup picker\n    this.picker = $(this.options.template);\n    if (this.options.customClass) {\n      this.picker.addClass(this.options.customClass);\n    }\n    if (this.options.inline) {\n      this.picker.addClass('colorpicker-inline colorpicker-visible');\n    } else {\n      this.picker.addClass('colorpicker-hidden');\n    }\n    if (this.options.horizontal) {\n      this.picker.addClass('colorpicker-horizontal');\n    }\n    if (this.format === 'rgba' || this.format === 'hsla' || this.options.format === false) {\n      this.picker.addClass('colorpicker-with-alpha');\n    }\n    if (this.options.align === 'right') {\n      this.picker.addClass('colorpicker-right');\n    }\n    if (this.options.inline === true) {\n      this.picker.addClass('colorpicker-no-arrow');\n    }\n    if (this.options.colorSelectors) {\n      var colorpicker = this;\n      $.each(this.options.colorSelectors, function(name, color) {\n        var $btn = $('<i />').css('background-color', color).data('class', name);\n        $btn.click(function() {\n          colorpicker.setValue($(this).css('background-color'));\n        });\n        colorpicker.picker.find('.colorpicker-selectors').append($btn);\n      });\n      this.picker.find('.colorpicker-selectors').show();\n    }\n    this.picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));\n    this.picker.appendTo(this.container ? this.container : $('body'));\n\n    // Bind events\n    if (this.input !== false) {\n      this.input.on({\n        'keyup.colorpicker': $.proxy(this.keyup, this)\n      });\n      this.input.on({\n        'change.colorpicker': $.proxy(this.change, this)\n      });\n      if (this.component === false) {\n        this.element.on({\n          'focus.colorpicker': $.proxy(this.show, this)\n        });\n      }\n      if (this.options.inline === false) {\n        this.element.on({\n          'focusout.colorpicker': $.proxy(this.hide, this)\n        });\n      }\n    }\n\n    if (this.component !== false) {\n      this.component.on({\n        'click.colorpicker': $.proxy(this.show, this)\n      });\n    }\n\n    if ((this.input === false) && (this.component === false)) {\n      this.element.on({\n        'click.colorpicker': $.proxy(this.show, this)\n      });\n    }\n\n    // for HTML5 input[type='color']\n    if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {\n\n      this.input.on({\n        'click.colorpicker': $.proxy(this.show, this),\n        'focus.colorpicker': $.proxy(this.show, this)\n      });\n    }\n    this.update();\n\n    $($.proxy(function() {\n      this.element.trigger('create');\n    }, this));\n  };\n\n  Colorpicker.Color = Color;\n\n  Colorpicker.prototype = {\n    constructor: Colorpicker,\n    destroy: function() {\n      this.picker.remove();\n      this.element.removeData('colorpicker', 'color').off('.colorpicker');\n      if (this.input !== false) {\n        this.input.off('.colorpicker');\n      }\n      if (this.component !== false) {\n        this.component.off('.colorpicker');\n      }\n      this.element.removeClass('colorpicker-element');\n      this.element.trigger({\n        type: 'destroy'\n      });\n    },\n    reposition: function() {\n      if (this.options.inline !== false || this.options.container) {\n        return false;\n      }\n      var type = this.container && this.container[0] !== document.body ? 'position' : 'offset';\n      var element = this.component || this.element;\n      var offset = element[type]();\n      if (this.options.align === 'right') {\n        offset.left -= this.picker.outerWidth() - element.outerWidth();\n      }\n      this.picker.css({\n        top: offset.top + element.outerHeight(),\n        left: offset.left\n      });\n    },\n    show: function(e) {\n      if (this.isDisabled()) {\n        return false;\n      }\n      this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n      this.reposition();\n      $(window).on('resize.colorpicker', $.proxy(this.reposition, this));\n      if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n        if (e.stopPropagation && e.preventDefault) {\n          e.stopPropagation();\n          e.preventDefault();\n        }\n      }\n      if ((this.component || !this.input) && (this.options.inline === false)) {\n        $(window.document).on({\n          'mousedown.colorpicker': $.proxy(this.hide, this)\n        });\n      }\n      this.element.trigger({\n        type: 'showPicker',\n        color: this.color\n      });\n    },\n    hide: function() {\n      this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n      $(window).off('resize.colorpicker', this.reposition);\n      $(document).off({\n        'mousedown.colorpicker': this.hide\n      });\n      this.update();\n      this.element.trigger({\n        type: 'hidePicker',\n        color: this.color\n      });\n    },\n    updateData: function(val) {\n      val = val || this.color.toString(this.format);\n      this.element.data('color', val);\n      return val;\n    },\n    updateInput: function(val) {\n      val = val || this.color.toString(this.format);\n      if (this.input !== false) {\n        if (this.options.colorSelectors) {\n          var color = new Color(val, this.options.colorSelectors);\n          var alias = color.toAlias();\n          if (typeof this.options.colorSelectors[alias] !== 'undefined') {\n            val = alias;\n          }\n        }\n        this.input.prop('value', val);\n      }\n      return val;\n    },\n    updatePicker: function(val) {\n      if (val !== undefined) {\n        this.color = new Color(val, this.options.colorSelectors);\n      }\n      var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;\n      var icns = this.picker.find('i');\n      if (icns.length === 0) {\n        return;\n      }\n      if (this.options.horizontal === false) {\n        sl = this.options.sliders;\n        icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()\n          .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));\n      } else {\n        sl = this.options.slidersHorz;\n        icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()\n          .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));\n      }\n      icns.eq(0).css({\n        'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,\n        'left': this.color.value.s * sl.saturation.maxLeft\n      });\n      this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.toHex(this.color.value.h, 1, 1, 1));\n      this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toHex());\n      this.picker.find('.colorpicker-color, .colorpicker-color div').css('backgroundColor', this.color.toString(this.format));\n      return val;\n    },\n    updateComponent: function(val) {\n      val = val || this.color.toString(this.format);\n      if (this.component !== false) {\n        var icn = this.component.find('i').eq(0);\n        if (icn.length > 0) {\n          icn.css({\n            'backgroundColor': val\n          });\n        } else {\n          this.component.css({\n            'backgroundColor': val\n          });\n        }\n      }\n      return val;\n    },\n    update: function(force) {\n      var val;\n      if ((this.getValue(false) !== false) || (force === true)) {\n        // Update input/data only if the current value is not empty\n        val = this.updateComponent();\n        this.updateInput(val);\n        this.updateData(val);\n        this.updatePicker(); // only update picker if value is not empty\n      }\n      return val;\n\n    },\n    setValue: function(val) { // set color manually\n      this.color = new Color(val, this.options.colorSelectors);\n      this.update(true);\n      this.element.trigger({\n        type: 'changeColor',\n        color: this.color,\n        value: val\n      });\n    },\n    getValue: function(defaultValue) {\n      defaultValue = (defaultValue === undefined) ? '#000000' : defaultValue;\n      var val;\n      if (this.hasInput()) {\n        val = this.input.val();\n      } else {\n        val = this.element.data('color');\n      }\n      if ((val === undefined) || (val === '') || (val === null)) {\n        // if not defined or empty, return default\n        val = defaultValue;\n      }\n      return val;\n    },\n    hasInput: function() {\n      return (this.input !== false);\n    },\n    isDisabled: function() {\n      if (this.hasInput()) {\n        return (this.input.prop('disabled') === true);\n      }\n      return false;\n    },\n    disable: function() {\n      if (this.hasInput()) {\n        this.input.prop('disabled', true);\n        this.element.trigger({\n          type: 'disable',\n          color: this.color,\n          value: this.getValue()\n        });\n        return true;\n      }\n      return false;\n    },\n    enable: function() {\n      if (this.hasInput()) {\n        this.input.prop('disabled', false);\n        this.element.trigger({\n          type: 'enable',\n          color: this.color,\n          value: this.getValue()\n        });\n        return true;\n      }\n      return false;\n    },\n    currentSlider: null,\n    mousePointer: {\n      left: 0,\n      top: 0\n    },\n    mousedown: function(e) {\n      if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n        e.pageX = e.originalEvent.touches[0].pageX;\n        e.pageY = e.originalEvent.touches[0].pageY;\n      }\n      e.stopPropagation();\n      e.preventDefault();\n\n      var target = $(e.target);\n\n      //detect the slider and set the limits and callbacks\n      var zone = target.closest('div');\n      var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n      if (!zone.is('.colorpicker')) {\n        if (zone.is('.colorpicker-saturation')) {\n          this.currentSlider = $.extend({}, sl.saturation);\n        } else if (zone.is('.colorpicker-hue')) {\n          this.currentSlider = $.extend({}, sl.hue);\n        } else if (zone.is('.colorpicker-alpha')) {\n          this.currentSlider = $.extend({}, sl.alpha);\n        } else {\n          return false;\n        }\n        var offset = zone.offset();\n        //reference to guide's style\n        this.currentSlider.guide = zone.find('i')[0].style;\n        this.currentSlider.left = e.pageX - offset.left;\n        this.currentSlider.top = e.pageY - offset.top;\n        this.mousePointer = {\n          left: e.pageX,\n          top: e.pageY\n        };\n        //trigger mousemove to move the guide to the current position\n        $(document).on({\n          'mousemove.colorpicker': $.proxy(this.mousemove, this),\n          'touchmove.colorpicker': $.proxy(this.mousemove, this),\n          'mouseup.colorpicker': $.proxy(this.mouseup, this),\n          'touchend.colorpicker': $.proxy(this.mouseup, this)\n        }).trigger('mousemove');\n      }\n      return false;\n    },\n    mousemove: function(e) {\n      if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {\n        e.pageX = e.originalEvent.touches[0].pageX;\n        e.pageY = e.originalEvent.touches[0].pageY;\n      }\n      e.stopPropagation();\n      e.preventDefault();\n      var left = Math.max(\n        0,\n        Math.min(\n          this.currentSlider.maxLeft,\n          this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)\n        )\n      );\n      var top = Math.max(\n        0,\n        Math.min(\n          this.currentSlider.maxTop,\n          this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)\n        )\n      );\n      this.currentSlider.guide.left = left + 'px';\n      this.currentSlider.guide.top = top + 'px';\n      if (this.currentSlider.callLeft) {\n        this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);\n      }\n      if (this.currentSlider.callTop) {\n        this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);\n      }\n      // Change format dynamically\n      // Only occurs if user choose the dynamic format by\n      // setting option format to false\n      if (this.currentSlider.callTop === 'setAlpha' && this.options.format === false) {\n\n        // Converting from hex / rgb to rgba\n        if (this.color.value.a !== 1) {\n          this.format = 'rgba';\n          this.color.origFormat = 'rgba';\n        }\n\n        // Converting from rgba to hex\n        else {\n          this.format = 'hex';\n          this.color.origFormat = 'hex';\n        }\n      }\n      this.update(true);\n\n      this.element.trigger({\n        type: 'changeColor',\n        color: this.color\n      });\n      return false;\n    },\n    mouseup: function(e) {\n      e.stopPropagation();\n      e.preventDefault();\n      $(document).off({\n        'mousemove.colorpicker': this.mousemove,\n        'touchmove.colorpicker': this.mousemove,\n        'mouseup.colorpicker': this.mouseup,\n        'touchend.colorpicker': this.mouseup\n      });\n      return false;\n    },\n    change: function(e) {\n      this.keyup(e);\n    },\n    keyup: function(e) {\n      if ((e.keyCode === 38)) {\n        if (this.color.value.a < 1) {\n          this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;\n        }\n        this.update(true);\n      } else if ((e.keyCode === 40)) {\n        if (this.color.value.a > 0) {\n          this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;\n        }\n        this.update(true);\n      } else {\n        this.color = new Color(this.input.val(), this.options.colorSelectors);\n        // Change format dynamically\n        // Only occurs if user choose the dynamic format by\n        // setting option format to false\n        if (this.color.origFormat && this.options.format === false) {\n          this.format = this.color.origFormat;\n        }\n        if (this.getValue(false) !== false) {\n          this.updateData();\n          this.updateComponent();\n          this.updatePicker();\n        }\n      }\n      this.element.trigger({\n        type: 'changeColor',\n        color: this.color,\n        value: this.input.val()\n      });\n    }\n  };\n\n  $.colorpicker = Colorpicker;\n\n  $.fn.colorpicker = function(option) {\n    var pickerArgs = arguments,\n      rv = null;\n\n    var $returnValue = this.each(function() {\n      var $this = $(this),\n        inst = $this.data('colorpicker'),\n        options = ((typeof option === 'object') ? option : {});\n      if ((!inst) && (typeof option !== 'string')) {\n        $this.data('colorpicker', new Colorpicker(this, options));\n      } else {\n        if (typeof option === 'string') {\n          rv = inst[option].apply(inst, Array.prototype.slice.call(pickerArgs, 1));\n        }\n      }\n    });\n    if (option === 'getValue') {\n      return rv;\n    }\n    return $returnValue;\n  };\n\n  $.fn.colorpicker.constructor = Colorpicker;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-daterangepicker/daterangepicker.css",
    "content": ".daterangepicker {\n  position: absolute;\n  color: inherit;\n  background: #fff;\n  border-radius: 4px;\n  width: 278px;\n  padding: 4px;\n  margin-top: 1px;\n  top: 100px;\n  left: 20px;\n  /* Calendars */ }\n  .daterangepicker:before, .daterangepicker:after {\n    position: absolute;\n    display: inline-block;\n    border-bottom-color: rgba(0, 0, 0, 0.2);\n    content: ''; }\n  .daterangepicker:before {\n    top: -7px;\n    border-right: 7px solid transparent;\n    border-left: 7px solid transparent;\n    border-bottom: 7px solid #ccc; }\n  .daterangepicker:after {\n    top: -6px;\n    border-right: 6px solid transparent;\n    border-bottom: 6px solid #fff;\n    border-left: 6px solid transparent; }\n  .daterangepicker.opensleft:before {\n    right: 9px; }\n  .daterangepicker.opensleft:after {\n    right: 10px; }\n  .daterangepicker.openscenter:before {\n    left: 0;\n    right: 0;\n    width: 0;\n    margin-left: auto;\n    margin-right: auto; }\n  .daterangepicker.openscenter:after {\n    left: 0;\n    right: 0;\n    width: 0;\n    margin-left: auto;\n    margin-right: auto; }\n  .daterangepicker.opensright:before {\n    left: 9px; }\n  .daterangepicker.opensright:after {\n    left: 10px; }\n  .daterangepicker.dropup {\n    margin-top: -5px; }\n    .daterangepicker.dropup:before {\n      top: initial;\n      bottom: -7px;\n      border-bottom: initial;\n      border-top: 7px solid #ccc; }\n    .daterangepicker.dropup:after {\n      top: initial;\n      bottom: -6px;\n      border-bottom: initial;\n      border-top: 6px solid #fff; }\n  .daterangepicker.dropdown-menu {\n    max-width: none;\n    z-index: 3001; }\n  .daterangepicker.single .ranges, .daterangepicker.single .calendar {\n    float: none; }\n  .daterangepicker.show-calendar .calendar {\n    display: block; }\n  .daterangepicker .calendar {\n    display: none;\n    max-width: 270px;\n    margin: 4px; }\n    .daterangepicker .calendar.single .calendar-table {\n      border: none; }\n    .daterangepicker .calendar th, .daterangepicker .calendar td {\n      white-space: nowrap;\n      text-align: center;\n      min-width: 32px; }\n  .daterangepicker .calendar-table {\n    border: 1px solid #fff;\n    padding: 4px;\n    border-radius: 4px;\n    background: #fff; }\n  .daterangepicker table {\n    width: 100%;\n    margin: 0; }\n  .daterangepicker td, .daterangepicker th {\n    text-align: center;\n    width: 20px;\n    height: 20px;\n    border-radius: 4px;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    cursor: pointer; }\n    .daterangepicker td.available:hover, .daterangepicker th.available:hover {\n      background-color: #eee;\n      border-color: transparent;\n      color: inherit; }\n    .daterangepicker td.week, .daterangepicker th.week {\n      font-size: 80%;\n      color: #ccc; }\n  .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {\n    background-color: #fff;\n    border-color: transparent;\n    color: #999; }\n  .daterangepicker td.in-range {\n    background-color: #ebf4f8;\n    border-color: transparent;\n    color: #000;\n    border-radius: 0; }\n  .daterangepicker td.start-date {\n    border-radius: 4px 0 0 4px; }\n  .daterangepicker td.end-date {\n    border-radius: 0 4px 4px 0; }\n  .daterangepicker td.start-date.end-date {\n    border-radius: 4px; }\n  .daterangepicker td.active, .daterangepicker td.active:hover {\n    background-color: #357ebd;\n    border-color: transparent;\n    color: #fff; }\n  .daterangepicker th.month {\n    width: auto; }\n  .daterangepicker td.disabled, .daterangepicker option.disabled {\n    color: #999;\n    cursor: not-allowed;\n    text-decoration: line-through; }\n  .daterangepicker select.monthselect, .daterangepicker select.yearselect {\n    font-size: 12px;\n    padding: 1px;\n    height: auto;\n    margin: 0;\n    cursor: default; }\n  .daterangepicker select.monthselect {\n    margin-right: 2%;\n    width: 56%; }\n  .daterangepicker select.yearselect {\n    width: 40%; }\n  .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {\n    width: 50px;\n    margin-bottom: 0; }\n  .daterangepicker .input-mini {\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    color: #555;\n    height: 30px;\n    line-height: 30px;\n    display: block;\n    vertical-align: middle;\n    margin: 0 0 5px 0;\n    padding: 0 6px 0 28px;\n    width: 100%; }\n    .daterangepicker .input-mini.active {\n      border: 1px solid #08c;\n      border-radius: 4px; }\n  .daterangepicker .daterangepicker_input {\n    position: relative; }\n    .daterangepicker .daterangepicker_input i {\n      position: absolute;\n      left: 8px;\n      top: 8px; }\n  .daterangepicker.rtl .input-mini {\n    padding-right: 28px;\n    padding-left: 6px; }\n  .daterangepicker.rtl .daterangepicker_input i {\n    left: auto;\n    right: 8px; }\n  .daterangepicker .calendar-time {\n    text-align: center;\n    margin: 5px auto;\n    line-height: 30px;\n    position: relative;\n    padding-left: 28px; }\n    .daterangepicker .calendar-time select.disabled {\n      color: #ccc;\n      cursor: not-allowed; }\n\n.ranges {\n  font-size: 11px;\n  float: none;\n  margin: 4px;\n  text-align: left; }\n  .ranges ul {\n    list-style: none;\n    margin: 0 auto;\n    padding: 0;\n    width: 100%; }\n  .ranges li {\n    font-size: 13px;\n    background: #f5f5f5;\n    border: 1px solid #f5f5f5;\n    border-radius: 4px;\n    color: #08c;\n    padding: 3px 12px;\n    margin-bottom: 8px;\n    cursor: pointer; }\n    .ranges li:hover {\n      background: #08c;\n      border: 1px solid #08c;\n      color: #fff; }\n    .ranges li.active {\n      background: #08c;\n      border: 1px solid #08c;\n      color: #fff; }\n\n/*  Larger Screen Styling */\n@media (min-width: 564px) {\n  .daterangepicker {\n    width: auto; }\n    .daterangepicker .ranges ul {\n      width: 160px; }\n    .daterangepicker.single .ranges ul {\n      width: 100%; }\n    .daterangepicker.single .calendar.left {\n      clear: none; }\n    .daterangepicker.single.ltr .ranges, .daterangepicker.single.ltr .calendar {\n      float: left; }\n    .daterangepicker.single.rtl .ranges, .daterangepicker.single.rtl .calendar {\n      float: right; }\n    .daterangepicker.ltr {\n      direction: ltr;\n      text-align: left; }\n      .daterangepicker.ltr .calendar.left {\n        clear: left;\n        margin-right: 0; }\n        .daterangepicker.ltr .calendar.left .calendar-table {\n          border-right: none;\n          border-top-right-radius: 0;\n          border-bottom-right-radius: 0; }\n      .daterangepicker.ltr .calendar.right {\n        margin-left: 0; }\n        .daterangepicker.ltr .calendar.right .calendar-table {\n          border-left: none;\n          border-top-left-radius: 0;\n          border-bottom-left-radius: 0; }\n      .daterangepicker.ltr .left .daterangepicker_input {\n        padding-right: 12px; }\n      .daterangepicker.ltr .calendar.left .calendar-table {\n        padding-right: 12px; }\n      .daterangepicker.ltr .ranges, .daterangepicker.ltr .calendar {\n        float: left; }\n    .daterangepicker.rtl {\n      direction: rtl;\n      text-align: right; }\n      .daterangepicker.rtl .calendar.left {\n        clear: right;\n        margin-left: 0; }\n        .daterangepicker.rtl .calendar.left .calendar-table {\n          border-left: none;\n          border-top-left-radius: 0;\n          border-bottom-left-radius: 0; }\n      .daterangepicker.rtl .calendar.right {\n        margin-right: 0; }\n        .daterangepicker.rtl .calendar.right .calendar-table {\n          border-right: none;\n          border-top-right-radius: 0;\n          border-bottom-right-radius: 0; }\n      .daterangepicker.rtl .left .daterangepicker_input {\n        padding-left: 12px; }\n      .daterangepicker.rtl .calendar.left .calendar-table {\n        padding-left: 12px; }\n      .daterangepicker.rtl .ranges, .daterangepicker.rtl .calendar {\n        text-align: right;\n        float: right; } }\n@media (min-width: 730px) {\n  .daterangepicker .ranges {\n    width: auto; }\n  .daterangepicker.ltr .ranges {\n    float: left; }\n  .daterangepicker.rtl .ranges {\n    float: right; }\n  .daterangepicker .calendar.left {\n    clear: none !important; } }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-daterangepicker/daterangepicker.js",
    "content": "/**\n* @version: 2.1.24\n* @author: Dan Grossman http://www.dangrossman.info/\n* @copyright: Copyright (c) 2012-2016 Dan Grossman. All rights reserved.\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n* @website: https://www.improvely.com/\n*/\n// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Make globaly available as well\n        define(['moment', 'jquery'], function (moment, jquery) {\n            return (root.daterangepicker = factory(moment, jquery));\n        });\n    } else if (typeof module === 'object' && module.exports) {\n        // Node / Browserify\n        //isomorphic issue\n        var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;\n        if (!jQuery) {\n            jQuery = require('jquery');\n            if (!jQuery.fn) jQuery.fn = {};\n        }\n        module.exports = factory(require('moment'), jQuery);\n    } else {\n        // Browser globals\n        root.daterangepicker = factory(root.moment, root.jQuery);\n    }\n}(this, function(moment, $) {\n    var DateRangePicker = function(element, options, cb) {\n\n        //default settings for options\n        this.parentEl = 'body';\n        this.element = $(element);\n        this.startDate = moment().startOf('day');\n        this.endDate = moment().endOf('day');\n        this.minDate = false;\n        this.maxDate = false;\n        this.dateLimit = false;\n        this.autoApply = false;\n        this.singleDatePicker = false;\n        this.showDropdowns = false;\n        this.showWeekNumbers = false;\n        this.showISOWeekNumbers = false;\n        this.showCustomRangeLabel = true;\n        this.timePicker = false;\n        this.timePicker24Hour = false;\n        this.timePickerIncrement = 1;\n        this.timePickerSeconds = false;\n        this.linkedCalendars = true;\n        this.autoUpdateInput = true;\n        this.alwaysShowCalendars = false;\n        this.ranges = {};\n\n        this.opens = 'right';\n        if (this.element.hasClass('pull-right'))\n            this.opens = 'left';\n\n        this.drops = 'down';\n        if (this.element.hasClass('dropup'))\n            this.drops = 'up';\n\n        this.buttonClasses = 'btn btn-sm';\n        this.applyClass = 'btn-success';\n        this.cancelClass = 'btn-default';\n\n        this.locale = {\n            direction: 'ltr',\n            format: 'MM/DD/YYYY',\n            separator: ' - ',\n            applyLabel: 'Apply',\n            cancelLabel: 'Cancel',\n            weekLabel: 'W',\n            customRangeLabel: 'Custom Range',\n            daysOfWeek: moment.weekdaysMin(),\n            monthNames: moment.monthsShort(),\n            firstDay: moment.localeData().firstDayOfWeek()\n        };\n\n        this.callback = function() { };\n\n        //some state information\n        this.isShowing = false;\n        this.leftCalendar = {};\n        this.rightCalendar = {};\n\n        //custom options from user\n        if (typeof options !== 'object' || options === null)\n            options = {};\n\n        //allow setting options with data attributes\n        //data-api options will be overwritten with custom javascript options\n        options = $.extend(this.element.data(), options);\n\n        //html template for the picker UI\n        if (typeof options.template !== 'string' && !(options.template instanceof $))\n            options.template = '<div class=\"daterangepicker dropdown-menu\">' +\n                '<div class=\"calendar left\">' +\n                    '<div class=\"daterangepicker_input\">' +\n                      '<input class=\"input-mini form-control\" type=\"text\" name=\"daterangepicker_start\" value=\"\" />' +\n                      '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n                      '<div class=\"calendar-time\">' +\n                        '<div></div>' +\n                        '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n                      '</div>' +\n                    '</div>' +\n                    '<div class=\"calendar-table\"></div>' +\n                '</div>' +\n                '<div class=\"calendar right\">' +\n                    '<div class=\"daterangepicker_input\">' +\n                      '<input class=\"input-mini form-control\" type=\"text\" name=\"daterangepicker_end\" value=\"\" />' +\n                      '<i class=\"fa fa-calendar glyphicon glyphicon-calendar\"></i>' +\n                      '<div class=\"calendar-time\">' +\n                        '<div></div>' +\n                        '<i class=\"fa fa-clock-o glyphicon glyphicon-time\"></i>' +\n                      '</div>' +\n                    '</div>' +\n                    '<div class=\"calendar-table\"></div>' +\n                '</div>' +\n                '<div class=\"ranges\">' +\n                    '<div class=\"range_inputs\">' +\n                        '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\n                        '<button class=\"cancelBtn\" type=\"button\"></button>' +\n                    '</div>' +\n                '</div>' +\n            '</div>';\n\n        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\n        this.container = $(options.template).appendTo(this.parentEl);\n\n        //\n        // handle all the possible options overriding defaults\n        //\n\n        if (typeof options.locale === 'object') {\n\n            if (typeof options.locale.direction === 'string')\n                this.locale.direction = options.locale.direction;\n\n            if (typeof options.locale.format === 'string')\n                this.locale.format = options.locale.format;\n\n            if (typeof options.locale.separator === 'string')\n                this.locale.separator = options.locale.separator;\n\n            if (typeof options.locale.daysOfWeek === 'object')\n                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\n\n            if (typeof options.locale.monthNames === 'object')\n              this.locale.monthNames = options.locale.monthNames.slice();\n\n            if (typeof options.locale.firstDay === 'number')\n              this.locale.firstDay = options.locale.firstDay;\n\n            if (typeof options.locale.applyLabel === 'string')\n              this.locale.applyLabel = options.locale.applyLabel;\n\n            if (typeof options.locale.cancelLabel === 'string')\n              this.locale.cancelLabel = options.locale.cancelLabel;\n\n            if (typeof options.locale.weekLabel === 'string')\n              this.locale.weekLabel = options.locale.weekLabel;\n\n            if (typeof options.locale.customRangeLabel === 'string')\n              this.locale.customRangeLabel = options.locale.customRangeLabel;\n\n        }\n        this.container.addClass(this.locale.direction);\n\n        if (typeof options.startDate === 'string')\n            this.startDate = moment(options.startDate, this.locale.format);\n\n        if (typeof options.endDate === 'string')\n            this.endDate = moment(options.endDate, this.locale.format);\n\n        if (typeof options.minDate === 'string')\n            this.minDate = moment(options.minDate, this.locale.format);\n\n        if (typeof options.maxDate === 'string')\n            this.maxDate = moment(options.maxDate, this.locale.format);\n\n        if (typeof options.startDate === 'object')\n            this.startDate = moment(options.startDate);\n\n        if (typeof options.endDate === 'object')\n            this.endDate = moment(options.endDate);\n\n        if (typeof options.minDate === 'object')\n            this.minDate = moment(options.minDate);\n\n        if (typeof options.maxDate === 'object')\n            this.maxDate = moment(options.maxDate);\n\n        // sanity check for bad options\n        if (this.minDate && this.startDate.isBefore(this.minDate))\n            this.startDate = this.minDate.clone();\n\n        // sanity check for bad options\n        if (this.maxDate && this.endDate.isAfter(this.maxDate))\n            this.endDate = this.maxDate.clone();\n\n        if (typeof options.applyClass === 'string')\n            this.applyClass = options.applyClass;\n\n        if (typeof options.cancelClass === 'string')\n            this.cancelClass = options.cancelClass;\n\n        if (typeof options.dateLimit === 'object')\n            this.dateLimit = options.dateLimit;\n\n        if (typeof options.opens === 'string')\n            this.opens = options.opens;\n\n        if (typeof options.drops === 'string')\n            this.drops = options.drops;\n\n        if (typeof options.showWeekNumbers === 'boolean')\n            this.showWeekNumbers = options.showWeekNumbers;\n\n        if (typeof options.showISOWeekNumbers === 'boolean')\n            this.showISOWeekNumbers = options.showISOWeekNumbers;\n\n        if (typeof options.buttonClasses === 'string')\n            this.buttonClasses = options.buttonClasses;\n\n        if (typeof options.buttonClasses === 'object')\n            this.buttonClasses = options.buttonClasses.join(' ');\n\n        if (typeof options.showDropdowns === 'boolean')\n            this.showDropdowns = options.showDropdowns;\n\n        if (typeof options.showCustomRangeLabel === 'boolean')\n            this.showCustomRangeLabel = options.showCustomRangeLabel;\n\n        if (typeof options.singleDatePicker === 'boolean') {\n            this.singleDatePicker = options.singleDatePicker;\n            if (this.singleDatePicker)\n                this.endDate = this.startDate.clone();\n        }\n\n        if (typeof options.timePicker === 'boolean')\n            this.timePicker = options.timePicker;\n\n        if (typeof options.timePickerSeconds === 'boolean')\n            this.timePickerSeconds = options.timePickerSeconds;\n\n        if (typeof options.timePickerIncrement === 'number')\n            this.timePickerIncrement = options.timePickerIncrement;\n\n        if (typeof options.timePicker24Hour === 'boolean')\n            this.timePicker24Hour = options.timePicker24Hour;\n\n        if (typeof options.autoApply === 'boolean')\n            this.autoApply = options.autoApply;\n\n        if (typeof options.autoUpdateInput === 'boolean')\n            this.autoUpdateInput = options.autoUpdateInput;\n\n        if (typeof options.linkedCalendars === 'boolean')\n            this.linkedCalendars = options.linkedCalendars;\n\n        if (typeof options.isInvalidDate === 'function')\n            this.isInvalidDate = options.isInvalidDate;\n\n        if (typeof options.isCustomDate === 'function')\n            this.isCustomDate = options.isCustomDate;\n\n        if (typeof options.alwaysShowCalendars === 'boolean')\n            this.alwaysShowCalendars = options.alwaysShowCalendars;\n\n        // update day names order to firstDay\n        if (this.locale.firstDay != 0) {\n            var iterator = this.locale.firstDay;\n            while (iterator > 0) {\n                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\n                iterator--;\n            }\n        }\n\n        var start, end, range;\n\n        //if no start/end dates set, check if an input element contains initial values\n        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\n            if ($(this.element).is('input[type=text]')) {\n                var val = $(this.element).val(),\n                    split = val.split(this.locale.separator);\n\n                start = end = null;\n\n                if (split.length == 2) {\n                    start = moment(split[0], this.locale.format);\n                    end = moment(split[1], this.locale.format);\n                } else if (this.singleDatePicker && val !== \"\") {\n                    start = moment(val, this.locale.format);\n                    end = moment(val, this.locale.format);\n                }\n                if (start !== null && end !== null) {\n                    this.setStartDate(start);\n                    this.setEndDate(end);\n                }\n            }\n        }\n\n        if (typeof options.ranges === 'object') {\n            for (range in options.ranges) {\n\n                if (typeof options.ranges[range][0] === 'string')\n                    start = moment(options.ranges[range][0], this.locale.format);\n                else\n                    start = moment(options.ranges[range][0]);\n\n                if (typeof options.ranges[range][1] === 'string')\n                    end = moment(options.ranges[range][1], this.locale.format);\n                else\n                    end = moment(options.ranges[range][1]);\n\n                // If the start or end date exceed those allowed by the minDate or dateLimit\n                // options, shorten the range to the allowable period.\n                if (this.minDate && start.isBefore(this.minDate))\n                    start = this.minDate.clone();\n\n                var maxDate = this.maxDate;\n                if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate))\n                    maxDate = start.clone().add(this.dateLimit);\n                if (maxDate && end.isAfter(maxDate))\n                    end = maxDate.clone();\n\n                // If the end of the range is before the minimum or the start of the range is\n                // after the maximum, don't display this range option at all.\n                if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) \n                  || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\n                    continue;\n\n                //Support unicode chars in the range names.\n                var elem = document.createElement('textarea');\n                elem.innerHTML = range;\n                var rangeHtml = elem.value;\n\n                this.ranges[rangeHtml] = [start, end];\n            }\n\n            var list = '<ul>';\n            for (range in this.ranges) {\n                list += '<li data-range-key=\"' + range + '\">' + range + '</li>';\n            }\n            if (this.showCustomRangeLabel) {\n                list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + '</li>';\n            }\n            list += '</ul>';\n            this.container.find('.ranges').prepend(list);\n        }\n\n        if (typeof cb === 'function') {\n            this.callback = cb;\n        }\n\n        if (!this.timePicker) {\n            this.startDate = this.startDate.startOf('day');\n            this.endDate = this.endDate.endOf('day');\n            this.container.find('.calendar-time').hide();\n        }\n\n        //can't be used together for now\n        if (this.timePicker && this.autoApply)\n            this.autoApply = false;\n\n        if (this.autoApply && typeof options.ranges !== 'object') {\n            this.container.find('.ranges').hide();\n        } else if (this.autoApply) {\n            this.container.find('.applyBtn, .cancelBtn').addClass('hide');\n        }\n\n        if (this.singleDatePicker) {\n            this.container.addClass('single');\n            this.container.find('.calendar.left').addClass('single');\n            this.container.find('.calendar.left').show();\n            this.container.find('.calendar.right').hide();\n            this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide();\n            if (this.timePicker) {\n                this.container.find('.ranges ul').hide();\n            } else {\n                this.container.find('.ranges').hide();\n            }\n        }\n\n        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\n            this.container.addClass('show-calendar');\n        }\n\n        this.container.addClass('opens' + this.opens);\n\n        //swap the position of the predefined ranges if opens right\n        if (typeof options.ranges !== 'undefined' && this.opens == 'right') {\n            this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() );\n        }\n\n        //apply CSS classes and labels to buttons\n        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\n        if (this.applyClass.length)\n            this.container.find('.applyBtn').addClass(this.applyClass);\n        if (this.cancelClass.length)\n            this.container.find('.cancelBtn').addClass(this.cancelClass);\n        this.container.find('.applyBtn').html(this.locale.applyLabel);\n        this.container.find('.cancelBtn').html(this.locale.cancelLabel);\n\n        //\n        // event listeners\n        //\n\n        this.container.find('.calendar')\n            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\n            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\n            .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\n            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\n            .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))\n            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))\n            .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))\n            .on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this))\n            .on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this))\n            .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this));\n\n        this.container.find('.ranges')\n            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\n            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))\n            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))\n            .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))\n            .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));\n\n        if (this.element.is('input') || this.element.is('button')) {\n            this.element.on({\n                'click.daterangepicker': $.proxy(this.show, this),\n                'focus.daterangepicker': $.proxy(this.show, this),\n                'keyup.daterangepicker': $.proxy(this.elementChanged, this),\n                'keydown.daterangepicker': $.proxy(this.keydown, this)\n            });\n        } else {\n            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\n        }\n\n        //\n        // if attached to a text input, set the initial value\n        //\n\n        if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n            this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n            this.element.trigger('change');\n        } else if (this.element.is('input') && this.autoUpdateInput) {\n            this.element.val(this.startDate.format(this.locale.format));\n            this.element.trigger('change');\n        }\n\n    };\n\n    DateRangePicker.prototype = {\n\n        constructor: DateRangePicker,\n\n        setStartDate: function(startDate) {\n            if (typeof startDate === 'string')\n                this.startDate = moment(startDate, this.locale.format);\n\n            if (typeof startDate === 'object')\n                this.startDate = moment(startDate);\n\n            if (!this.timePicker)\n                this.startDate = this.startDate.startOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.minDate && this.startDate.isBefore(this.minDate)) {\n                this.startDate = this.minDate;\n                if (this.timePicker && this.timePickerIncrement)\n                    this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n            }\n\n            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\n                this.startDate = this.maxDate;\n                if (this.timePicker && this.timePickerIncrement)\n                    this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n            }\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        setEndDate: function(endDate) {\n            if (typeof endDate === 'string')\n                this.endDate = moment(endDate, this.locale.format);\n\n            if (typeof endDate === 'object')\n                this.endDate = moment(endDate);\n\n            if (!this.timePicker)\n                this.endDate = this.endDate.endOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.endDate.isBefore(this.startDate))\n                this.endDate = this.startDate.clone();\n\n            if (this.maxDate && this.endDate.isAfter(this.maxDate))\n                this.endDate = this.maxDate;\n\n            if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))\n                this.endDate = this.startDate.clone().add(this.dateLimit);\n\n            this.previousRightTime = this.endDate.clone();\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        isInvalidDate: function() {\n            return false;\n        },\n\n        isCustomDate: function() {\n            return false;\n        },\n\n        updateView: function() {\n            if (this.timePicker) {\n                this.renderTimePicker('left');\n                this.renderTimePicker('right');\n                if (!this.endDate) {\n                    this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');\n                } else {\n                    this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');\n                }\n            }\n            if (this.endDate) {\n                this.container.find('input[name=\"daterangepicker_end\"]').removeClass('active');\n                this.container.find('input[name=\"daterangepicker_start\"]').addClass('active');\n            } else {\n                this.container.find('input[name=\"daterangepicker_end\"]').addClass('active');\n                this.container.find('input[name=\"daterangepicker_start\"]').removeClass('active');\n            }\n            this.updateMonthsInView();\n            this.updateCalendars();\n            this.updateFormInputs();\n        },\n\n        updateMonthsInView: function() {\n            if (this.endDate) {\n\n                //if both dates are visible already, do nothing\n                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\n                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    &&\n                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    ) {\n                    return;\n                }\n\n                this.leftCalendar.month = this.startDate.clone().date(2);\n                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\n                    this.rightCalendar.month = this.endDate.clone().date(2);\n                } else {\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n\n            } else {\n                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\n                    this.leftCalendar.month = this.startDate.clone().date(2);\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n            }\n            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\n              this.rightCalendar.month = this.maxDate.clone().date(2);\n              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\n            }\n        },\n\n        updateCalendars: function() {\n\n            if (this.timePicker) {\n                var hour, minute, second;\n                if (this.endDate) {\n                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                } else {\n                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                }\n                this.leftCalendar.month.hour(hour).minute(minute).second(second);\n                this.rightCalendar.month.hour(hour).minute(minute).second(second);\n            }\n\n            this.renderCalendar('left');\n            this.renderCalendar('right');\n\n            //highlight any predefined range matching the current start and end dates\n            this.container.find('.ranges li').removeClass('active');\n            if (this.endDate == null) return;\n\n            this.calculateChosenLabel();\n        },\n\n        renderCalendar: function(side) {\n\n            //\n            // Build the matrix of dates that will populate the calendar\n            //\n\n            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\n            var month = calendar.month.month();\n            var year = calendar.month.year();\n            var hour = calendar.month.hour();\n            var minute = calendar.month.minute();\n            var second = calendar.month.second();\n            var daysInMonth = moment([year, month]).daysInMonth();\n            var firstDay = moment([year, month, 1]);\n            var lastDay = moment([year, month, daysInMonth]);\n            var lastMonth = moment(firstDay).subtract(1, 'month').month();\n            var lastYear = moment(firstDay).subtract(1, 'month').year();\n            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\n            var dayOfWeek = firstDay.day();\n\n            //initialize a 6 rows x 7 columns array for the calendar\n            var calendar = [];\n            calendar.firstDay = firstDay;\n            calendar.lastDay = lastDay;\n\n            for (var i = 0; i < 6; i++) {\n                calendar[i] = [];\n            }\n\n            //populate the calendar with date objects\n            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n            if (startDay > daysInLastMonth)\n                startDay -= 7;\n\n            if (dayOfWeek == this.locale.firstDay)\n                startDay = daysInLastMonth - 6;\n\n            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\n\n            var col, row;\n            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\n                if (i > 0 && col % 7 === 0) {\n                    col = 0;\n                    row++;\n                }\n                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n                curDate.hour(12);\n\n                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\n                    calendar[row][col] = this.minDate.clone();\n                }\n\n                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\n                    calendar[row][col] = this.maxDate.clone();\n                }\n\n            }\n\n            //make the calendar object available to hoverDate/clickDate\n            if (side == 'left') {\n                this.leftCalendar.calendar = calendar;\n            } else {\n                this.rightCalendar.calendar = calendar;\n            }\n\n            //\n            // Display the calendar\n            //\n\n            var minDate = side == 'left' ? this.minDate : this.startDate;\n            var maxDate = this.maxDate;\n            var selected = side == 'left' ? this.startDate : this.endDate;\n            var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};\n\n            var html = '<table class=\"table-condensed\">';\n            html += '<thead>';\n            html += '<tr>';\n\n            // add empty cell for week number\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th></th>';\n\n            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\n                html += '<th class=\"prev available\"><i class=\"fa fa-' + arrow.left + ' glyphicon glyphicon-' + arrow.left + '\"></i></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\n\n            if (this.showDropdowns) {\n                var currentMonth = calendar[1][1].month();\n                var currentYear = calendar[1][1].year();\n                var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);\n                var minYear = (minDate && minDate.year()) || (currentYear - 50);\n                var inMinYear = currentYear == minYear;\n                var inMaxYear = currentYear == maxYear;\n\n                var monthHtml = '<select class=\"monthselect\">';\n                for (var m = 0; m < 12; m++) {\n                    if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \">\" + this.locale.monthNames[m] + \"</option>\";\n                    } else {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\n                    }\n                }\n                monthHtml += \"</select>\";\n\n                var yearHtml = '<select class=\"yearselect\">';\n                for (var y = minYear; y <= maxYear; y++) {\n                    yearHtml += '<option value=\"' + y + '\"' +\n                        (y === currentYear ? ' selected=\"selected\"' : '') +\n                        '>' + y + '</option>';\n                }\n                yearHtml += '</select>';\n\n                dateHtml = monthHtml + yearHtml;\n            }\n\n            html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\n            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\n                html += '<th class=\"next available\"><i class=\"fa fa-' + arrow.right + ' glyphicon glyphicon-' + arrow.right + '\"></i></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            html += '</tr>';\n            html += '<tr>';\n\n            // add week number label\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\n\n            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\n                html += '<th>' + dayOfWeek + '</th>';\n            });\n\n            html += '</tr>';\n            html += '</thead>';\n            html += '<tbody>';\n\n            //adjust maxDate to reflect the dateLimit setting in order to\n            //grey out end dates beyond the dateLimit\n            if (this.endDate == null && this.dateLimit) {\n                var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');\n                if (!maxDate || maxLimit.isBefore(maxDate)) {\n                    maxDate = maxLimit;\n                }\n            }\n\n            for (var row = 0; row < 6; row++) {\n                html += '<tr>';\n\n                // add week number\n                if (this.showWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\n                else if (this.showISOWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\n\n                for (var col = 0; col < 7; col++) {\n\n                    var classes = [];\n\n                    //highlight today's date\n                    if (calendar[row][col].isSame(new Date(), \"day\"))\n                        classes.push('today');\n\n                    //highlight weekends\n                    if (calendar[row][col].isoWeekday() > 5)\n                        classes.push('weekend');\n\n                    //grey out the dates in other months displayed at beginning and end of this calendar\n                    if (calendar[row][col].month() != calendar[1][1].month())\n                        classes.push('off');\n\n                    //don't allow selection of dates before the minimum date\n                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of dates after the maximum date\n                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of date if a custom function decides it's invalid\n                    if (this.isInvalidDate(calendar[row][col]))\n                        classes.push('off', 'disabled');\n\n                    //highlight the currently selected start date\n                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'start-date');\n\n                    //highlight the currently selected end date\n                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'end-date');\n\n                    //highlight dates in-between the selected dates\n                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\n                        classes.push('in-range');\n\n                    //apply custom classes for this date\n                    var isCustom = this.isCustomDate(calendar[row][col]);\n                    if (isCustom !== false) {\n                        if (typeof isCustom === 'string')\n                            classes.push(isCustom);\n                        else\n                            Array.prototype.push.apply(classes, isCustom);\n                    }\n\n                    var cname = '', disabled = false;\n                    for (var i = 0; i < classes.length; i++) {\n                        cname += classes[i] + ' ';\n                        if (classes[i] == 'disabled')\n                            disabled = true;\n                    }\n                    if (!disabled)\n                        cname += 'available';\n\n                    html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\n\n                }\n                html += '</tr>';\n            }\n\n            html += '</tbody>';\n            html += '</table>';\n\n            this.container.find('.calendar.' + side + ' .calendar-table').html(html);\n\n        },\n\n        renderTimePicker: function(side) {\n\n            // Don't bother updating the time picker if it's currently disabled\n            // because an end date hasn't been clicked yet\n            if (side == 'right' && !this.endDate) return;\n\n            var html, selected, minDate, maxDate = this.maxDate;\n\n            if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))\n                maxDate = this.startDate.clone().add(this.dateLimit);\n\n            if (side == 'left') {\n                selected = this.startDate.clone();\n                minDate = this.minDate;\n            } else if (side == 'right') {\n                selected = this.endDate.clone();\n                minDate = this.startDate;\n\n                //Preserve the time already selected\n                var timeSelector = this.container.find('.calendar.right .calendar-time div');\n                if (!this.endDate && timeSelector.html() != '') {\n\n                    selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());\n                    selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());\n                    selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());\n\n                    if (!this.timePicker24Hour) {\n                        var ampm = timeSelector.find('.ampmselect option:selected').val();\n                        if (ampm === 'PM' && selected.hour() < 12)\n                            selected.hour(selected.hour() + 12);\n                        if (ampm === 'AM' && selected.hour() === 12)\n                            selected.hour(0);\n                    }\n\n                }\n\n                if (selected.isBefore(this.startDate))\n                    selected = this.startDate.clone();\n\n                if (maxDate && selected.isAfter(maxDate))\n                    selected = maxDate.clone();\n\n            }\n\n            //\n            // hours\n            //\n\n            html = '<select class=\"hourselect\">';\n\n            var start = this.timePicker24Hour ? 0 : 1;\n            var end = this.timePicker24Hour ? 23 : 12;\n\n            for (var i = start; i <= end; i++) {\n                var i_in_24 = i;\n                if (!this.timePicker24Hour)\n                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\n\n                var time = selected.clone().hour(i_in_24);\n                var disabled = false;\n                if (minDate && time.minute(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.minute(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (i_in_24 == selected.hour() && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + i + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // minutes\n            //\n\n            html += ': <select class=\"minuteselect\">';\n\n            for (var i = 0; i < 60; i += this.timePickerIncrement) {\n                var padded = i < 10 ? '0' + i : i;\n                var time = selected.clone().minute(i);\n\n                var disabled = false;\n                if (minDate && time.second(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.second(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (selected.minute() == i && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + padded + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // seconds\n            //\n\n            if (this.timePickerSeconds) {\n                html += ': <select class=\"secondselect\">';\n\n                for (var i = 0; i < 60; i++) {\n                    var padded = i < 10 ? '0' + i : i;\n                    var time = selected.clone().second(i);\n\n                    var disabled = false;\n                    if (minDate && time.isBefore(minDate))\n                        disabled = true;\n                    if (maxDate && time.isAfter(maxDate))\n                        disabled = true;\n\n                    if (selected.second() == i && !disabled) {\n                        html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                    } else if (disabled) {\n                        html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                    } else {\n                        html += '<option value=\"' + i + '\">' + padded + '</option>';\n                    }\n                }\n\n                html += '</select> ';\n            }\n\n            //\n            // AM/PM\n            //\n\n            if (!this.timePicker24Hour) {\n                html += '<select class=\"ampmselect\">';\n\n                var am_html = '';\n                var pm_html = '';\n\n                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\n                    am_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\n                    pm_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (selected.hour() >= 12) {\n                    html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\n                } else {\n                    html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\n                }\n\n                html += '</select>';\n            }\n\n            this.container.find('.calendar.' + side + ' .calendar-time div').html(html);\n\n        },\n\n        updateFormInputs: function() {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n                return;\n\n            this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));\n            if (this.endDate)\n                this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));\n\n            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\n                this.container.find('button.applyBtn').removeAttr('disabled');\n            } else {\n                this.container.find('button.applyBtn').attr('disabled', 'disabled');\n            }\n\n        },\n\n        move: function() {\n            var parentOffset = { top: 0, left: 0 },\n                containerTop;\n            var parentRightEdge = $(window).width();\n            if (!this.parentEl.is('body')) {\n                parentOffset = {\n                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),\n                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()\n                };\n                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\n            }\n\n            if (this.drops == 'up')\n                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n            else\n                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n            this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');\n\n            if (this.opens == 'left') {\n                this.container.css({\n                    top: containerTop,\n                    right: parentRightEdge - this.element.offset().left - this.element.outerWidth(),\n                    left: 'auto'\n                });\n                if (this.container.offset().left < 0) {\n                    this.container.css({\n                        right: 'auto',\n                        left: 9\n                    });\n                }\n            } else if (this.opens == 'center') {\n                this.container.css({\n                    top: containerTop,\n                    left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\n                            - this.container.outerWidth() / 2,\n                    right: 'auto'\n                });\n                if (this.container.offset().left < 0) {\n                    this.container.css({\n                        right: 'auto',\n                        left: 9\n                    });\n                }\n            } else {\n                this.container.css({\n                    top: containerTop,\n                    left: this.element.offset().left - parentOffset.left,\n                    right: 'auto'\n                });\n                if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {\n                    this.container.css({\n                        left: 'auto',\n                        right: 0\n                    });\n                }\n            }\n        },\n\n        show: function(e) {\n            if (this.isShowing) return;\n\n            // Create a click proxy that is private to this instance of datepicker, for unbinding\n            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\n\n            // Bind global datepicker mousedown for hiding and\n            $(document)\n              .on('mousedown.daterangepicker', this._outsideClickProxy)\n              // also support mobile devices\n              .on('touchend.daterangepicker', this._outsideClickProxy)\n              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\n              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\n              // and also close when focus changes to outside the picker (eg. tabbing between controls)\n              .on('focusin.daterangepicker', this._outsideClickProxy);\n\n            // Reposition the picker if the window is resized while it's open\n            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\n\n            this.oldStartDate = this.startDate.clone();\n            this.oldEndDate = this.endDate.clone();\n            this.previousRightTime = this.endDate.clone();\n\n            this.updateView();\n            this.container.show();\n            this.move();\n            this.element.trigger('show.daterangepicker', this);\n            this.isShowing = true;\n        },\n\n        hide: function(e) {\n            if (!this.isShowing) return;\n\n            //incomplete date selection, revert to last values\n            if (!this.endDate) {\n                this.startDate = this.oldStartDate.clone();\n                this.endDate = this.oldEndDate.clone();\n            }\n\n            //if a new date range was selected, invoke the user callback function\n            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\n                this.callback(this.startDate, this.endDate, this.chosenLabel);\n\n            //if picker is attached to a text input, update it\n            this.updateElement();\n\n            $(document).off('.daterangepicker');\n            $(window).off('.daterangepicker');\n            this.container.hide();\n            this.element.trigger('hide.daterangepicker', this);\n            this.isShowing = false;\n        },\n\n        toggle: function(e) {\n            if (this.isShowing) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        },\n\n        outsideClick: function(e) {\n            var target = $(e.target);\n            // if the page is clicked anywhere except within the daterangerpicker/button\n            // itself then call this.hide()\n            if (\n                // ie modal dialog fix\n                e.type == \"focusin\" ||\n                target.closest(this.element).length ||\n                target.closest(this.container).length ||\n                target.closest('.calendar-table').length\n                ) return;\n            this.hide();\n            this.element.trigger('outsideClick.daterangepicker', this);\n        },\n\n        showCalendars: function() {\n            this.container.addClass('show-calendar');\n            this.move();\n            this.element.trigger('showCalendar.daterangepicker', this);\n        },\n\n        hideCalendars: function() {\n            this.container.removeClass('show-calendar');\n            this.element.trigger('hideCalendar.daterangepicker', this);\n        },\n\n        hoverRange: function(e) {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n                return;\n\n            var label = e.target.getAttribute('data-range-key');\n\n            if (label == this.locale.customRangeLabel) {\n                this.updateView();\n            } else {\n                var dates = this.ranges[label];\n                this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));\n                this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));\n            }\n\n        },\n\n        clickRange: function(e) {\n            var label = e.target.getAttribute('data-range-key');\n            this.chosenLabel = label;\n            if (label == this.locale.customRangeLabel) {\n                this.showCalendars();\n            } else {\n                var dates = this.ranges[label];\n                this.startDate = dates[0];\n                this.endDate = dates[1];\n\n                if (!this.timePicker) {\n                    this.startDate.startOf('day');\n                    this.endDate.endOf('day');\n                }\n\n                if (!this.alwaysShowCalendars)\n                    this.hideCalendars();\n                this.clickApply();\n            }\n        },\n\n        clickPrev: function(e) {\n            var cal = $(e.target).parents('.calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.subtract(1, 'month');\n                if (this.linkedCalendars)\n                    this.rightCalendar.month.subtract(1, 'month');\n            } else {\n                this.rightCalendar.month.subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        clickNext: function(e) {\n            var cal = $(e.target).parents('.calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.add(1, 'month');\n            } else {\n                this.rightCalendar.month.add(1, 'month');\n                if (this.linkedCalendars)\n                    this.leftCalendar.month.add(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        hoverDate: function(e) {\n\n            //ignore mouse movements while an above-calendar text input has focus\n            //if (this.container.find('input[name=daterangepicker_start]').is(\":focus\") || this.container.find('input[name=daterangepicker_end]').is(\":focus\"))\n            //    return;\n\n            //ignore dates that can't be selected\n            if (!$(e.target).hasClass('available')) return;\n\n            //have the text inputs above calendars reflect the date being hovered over\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(\":focus\")) {\n                this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));\n            } else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(\":focus\")) {\n                this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));\n            }\n\n            //highlight the dates between the start date and the date being hovered as a potential end date\n            var leftCalendar = this.leftCalendar;\n            var rightCalendar = this.rightCalendar;\n            var startDate = this.startDate;\n            if (!this.endDate) {\n                this.container.find('.calendar td').each(function(index, el) {\n\n                    //skip week numbers, only look at dates\n                    if ($(el).hasClass('week')) return;\n\n                    var title = $(el).attr('data-title');\n                    var row = title.substr(1, 1);\n                    var col = title.substr(3, 1);\n                    var cal = $(el).parents('.calendar');\n                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\n\n                    if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\n                        $(el).addClass('in-range');\n                    } else {\n                        $(el).removeClass('in-range');\n                    }\n\n                });\n            }\n\n        },\n\n        clickDate: function(e) {\n\n            if (!$(e.target).hasClass('available')) return;\n\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            //\n            // this function needs to do a few things:\n            // * alternate between selecting a start and end date for the range,\n            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\n            // * if autoapply is enabled, and an end date was chosen, apply the selection\n            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\n            // * if one of the inputs above the calendars was focused, cancel that manual input\n            //\n\n            if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.endDate = null;\n                this.setStartDate(date.clone());\n            } else if (!this.endDate && date.isBefore(this.startDate)) {\n                //special case: clicking the same date for start/end,\n                //but the time of the end date is before the start date\n                this.setEndDate(this.startDate.clone());\n            } else { // picking end\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.setEndDate(date.clone());\n                if (this.autoApply) {\n                  this.calculateChosenLabel();\n                  this.clickApply();\n                }\n            }\n\n            if (this.singleDatePicker) {\n                this.setEndDate(this.startDate);\n                if (!this.timePicker)\n                    this.clickApply();\n            }\n\n            this.updateView();\n\n            //This is to cancel the blur event handler if the mouse was in one of the inputs\n            e.stopPropagation();\n\n        },\n\n        calculateChosenLabel: function() {\n          var customRange = true;\n          var i = 0;\n          for (var range in this.ranges) {\n              if (this.timePicker) {\n                  if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) {\n                      customRange = false;\n                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n                      break;\n                  }\n              } else {\n                  //ignore times when comparing dates if time picker is not enabled\n                  if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\n                      customRange = false;\n                      this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();\n                      break;\n                  }\n              }\n              i++;\n          }\n          if (customRange && this.showCustomRangeLabel) {\n              this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();\n              this.showCalendars();\n          }\n        },\n\n        clickApply: function(e) {\n            this.hide();\n            this.element.trigger('apply.daterangepicker', this);\n        },\n\n        clickCancel: function(e) {\n            this.startDate = this.oldStartDate;\n            this.endDate = this.oldEndDate;\n            this.hide();\n            this.element.trigger('cancel.daterangepicker', this);\n        },\n\n        monthOrYearChanged: function(e) {\n            var isLeft = $(e.target).closest('.calendar').hasClass('left'),\n                leftOrRight = isLeft ? 'left' : 'right',\n                cal = this.container.find('.calendar.'+leftOrRight);\n\n            // Month must be Number for new moment versions\n            var month = parseInt(cal.find('.monthselect').val(), 10);\n            var year = cal.find('.yearselect').val();\n\n            if (!isLeft) {\n                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\n                    month = this.startDate.month();\n                    year = this.startDate.year();\n                }\n            }\n\n            if (this.minDate) {\n                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\n                    month = this.minDate.month();\n                    year = this.minDate.year();\n                }\n            }\n\n            if (this.maxDate) {\n                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\n                    month = this.maxDate.month();\n                    year = this.maxDate.year();\n                }\n            }\n\n            if (isLeft) {\n                this.leftCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\n            } else {\n                this.rightCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        timeChanged: function(e) {\n\n            var cal = $(e.target).closest('.calendar'),\n                isLeft = cal.hasClass('left');\n\n            var hour = parseInt(cal.find('.hourselect').val(), 10);\n            var minute = parseInt(cal.find('.minuteselect').val(), 10);\n            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\n\n            if (!this.timePicker24Hour) {\n                var ampm = cal.find('.ampmselect').val();\n                if (ampm === 'PM' && hour < 12)\n                    hour += 12;\n                if (ampm === 'AM' && hour === 12)\n                    hour = 0;\n            }\n\n            if (isLeft) {\n                var start = this.startDate.clone();\n                start.hour(hour);\n                start.minute(minute);\n                start.second(second);\n                this.setStartDate(start);\n                if (this.singleDatePicker) {\n                    this.endDate = this.startDate.clone();\n                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\n                    this.setEndDate(start.clone());\n                }\n            } else if (this.endDate) {\n                var end = this.endDate.clone();\n                end.hour(hour);\n                end.minute(minute);\n                end.second(second);\n                this.setEndDate(end);\n            }\n\n            //update the calendars so all clickable dates reflect the new time component\n            this.updateCalendars();\n\n            //update the form inputs above the calendars with the new time\n            this.updateFormInputs();\n\n            //re-render the time pickers because changing one selection can affect what's enabled in another\n            this.renderTimePicker('left');\n            this.renderTimePicker('right');\n\n        },\n\n        formInputsChanged: function(e) {\n            var isRight = $(e.target).closest('.calendar').hasClass('right');\n            var start = moment(this.container.find('input[name=\"daterangepicker_start\"]').val(), this.locale.format);\n            var end = moment(this.container.find('input[name=\"daterangepicker_end\"]').val(), this.locale.format);\n\n            if (start.isValid() && end.isValid()) {\n\n                if (isRight && end.isBefore(start))\n                    start = end.clone();\n\n                this.setStartDate(start);\n                this.setEndDate(end);\n\n                if (isRight) {\n                    this.container.find('input[name=\"daterangepicker_start\"]').val(this.startDate.format(this.locale.format));\n                } else {\n                    this.container.find('input[name=\"daterangepicker_end\"]').val(this.endDate.format(this.locale.format));\n                }\n\n            }\n\n            this.updateView();\n        },\n\n        formInputsFocused: function(e) {\n\n            // Highlight the focused input\n            this.container.find('input[name=\"daterangepicker_start\"], input[name=\"daterangepicker_end\"]').removeClass('active');\n            $(e.target).addClass('active');\n\n            // Set the state such that if the user goes back to using a mouse, \n            // the calendars are aware we're selecting the end of the range, not\n            // the start. This allows someone to edit the end of a date range without\n            // re-selecting the beginning, by clicking on the end date input then\n            // using the calendar.\n            var isRight = $(e.target).closest('.calendar').hasClass('right');\n            if (isRight) {\n                this.endDate = null;\n                this.setStartDate(this.startDate.clone());\n                this.updateView();\n            }\n\n        },\n\n        formInputsBlurred: function(e) {\n\n            // this function has one purpose right now: if you tab from the first\n            // text input to the second in the UI, the endDate is nulled so that\n            // you can click another, but if you tab out without clicking anything\n            // or changing the input value, the old endDate should be retained\n\n            if (!this.endDate) {\n                var val = this.container.find('input[name=\"daterangepicker_end\"]').val();\n                var end = moment(val, this.locale.format);\n                if (end.isValid()) {\n                    this.setEndDate(end);\n                    this.updateView();\n                }\n            }\n\n        },\n\n        elementChanged: function() {\n            if (!this.element.is('input')) return;\n            if (!this.element.val().length) return;\n            if (this.element.val().length < this.locale.format.length) return;\n\n            var dateString = this.element.val().split(this.locale.separator),\n                start = null,\n                end = null;\n\n            if (dateString.length === 2) {\n                start = moment(dateString[0], this.locale.format);\n                end = moment(dateString[1], this.locale.format);\n            }\n\n            if (this.singleDatePicker || start === null || end === null) {\n                start = moment(this.element.val(), this.locale.format);\n                end = start;\n            }\n\n            if (!start.isValid() || !end.isValid()) return;\n\n            this.setStartDate(start);\n            this.setEndDate(end);\n            this.updateView();\n        },\n\n        keydown: function(e) {\n            //hide on tab or enter\n            if ((e.keyCode === 9) || (e.keyCode === 13)) {\n                this.hide();\n            }\n        },\n\n        updateElement: function() {\n            if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {\n                this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n                this.element.trigger('change');\n            } else if (this.element.is('input') && this.autoUpdateInput) {\n                this.element.val(this.startDate.format(this.locale.format));\n                this.element.trigger('change');\n            }\n        },\n\n        remove: function() {\n            this.container.remove();\n            this.element.off('.daterangepicker');\n            this.element.removeData();\n        }\n\n    };\n\n    $.fn.daterangepicker = function(options, callback) {\n        this.each(function() {\n            var el = $(this);\n            if (el.data('daterangepicker'))\n                el.data('daterangepicker').remove();\n            el.data('daterangepicker', new DateRangePicker(el, options, callback));\n        });\n        return this;\n    };\n\n    return DateRangePicker;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-filestyle/js/bootstrap-filestyle.js",
    "content": "/*\n * bootstrap-filestyle\n * doc: http://markusslima.github.io/bootstrap-filestyle/\n * github: https://github.com/markusslima/bootstrap-filestyle\n *\n * Copyright (c) 2014 Markus Vinicius da Silva Lima\n * Version 1.2.1\n * Licensed under the MIT license.\n */\n(function($) {\"use strict\";\n\n    var nextId = 0;\n\n\tvar Filestyle = function(element, options) {\n\t\tthis.options = options;\n\t\tthis.$elementFilestyle = [];\n\t\tthis.$element = $(element);\n\t};\n\n\tFilestyle.prototype = {\n\t\tclear : function() {\n\t\t\tthis.$element.val('');\n\t\t\tthis.$elementFilestyle.find(':text').val('');\n\t\t\tthis.$elementFilestyle.find('.badge').remove();\n\t\t},\n\n\t\tdestroy : function() {\n\t\t\tthis.$element.removeAttr('style').removeData('filestyle');\n\t\t\tthis.$elementFilestyle.remove();\n\t\t},\n\n\t\tdisabled : function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tif (!this.options.disabled) {\n\t\t\t\t\tthis.$element.attr('disabled', 'true');\n\t\t\t\t\tthis.$elementFilestyle.find('label').attr('disabled', 'true');\n\t\t\t\t\tthis.options.disabled = true;\n\t\t\t\t}\n\t\t\t} else if (value === false) {\n\t\t\t\tif (this.options.disabled) {\n\t\t\t\t\tthis.$element.removeAttr('disabled');\n\t\t\t\t\tthis.$elementFilestyle.find('label').removeAttr('disabled');\n\t\t\t\t\tthis.options.disabled = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this.options.disabled;\n\t\t\t}\n\t\t},\n\n\t\tbuttonBefore : function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tif (!this.options.buttonBefore) {\n\t\t\t\t\tthis.options.buttonBefore = true;\n\t\t\t\t\tif (this.options.input) {\n\t\t\t\t\t\tthis.$elementFilestyle.remove();\n\t\t\t\t\t\tthis.constructor();\n\t\t\t\t\t\tthis.pushNameFiles();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (value === false) {\n\t\t\t\tif (this.options.buttonBefore) {\n\t\t\t\t\tthis.options.buttonBefore = false;\n\t\t\t\t\tif (this.options.input) {\n\t\t\t\t\t\tthis.$elementFilestyle.remove();\n\t\t\t\t\t\tthis.constructor();\n\t\t\t\t\t\tthis.pushNameFiles();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this.options.buttonBefore;\n\t\t\t}\n\t\t},\n\n\t\ticon : function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tif (!this.options.icon) {\n\t\t\t\t\tthis.options.icon = true;\n\t\t\t\t\tthis.$elementFilestyle.find('label').prepend(this.htmlIcon());\n\t\t\t\t}\n\t\t\t} else if (value === false) {\n\t\t\t\tif (this.options.icon) {\n\t\t\t\t\tthis.options.icon = false;\n\t\t\t\t\tthis.$elementFilestyle.find('.icon-span-filestyle').remove();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this.options.icon;\n\t\t\t}\n\t\t},\n\t\t\n\t\tinput : function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tif (!this.options.input) {\n\t\t\t\t\tthis.options.input = true;\n\n\t\t\t\t\tif (this.options.buttonBefore) {\n\t\t\t\t\t\tthis.$elementFilestyle.append(this.htmlInput());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$elementFilestyle.prepend(this.htmlInput());\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.$elementFilestyle.find('.badge').remove();\n\n\t\t\t\t\tthis.pushNameFiles();\n\n\t\t\t\t\tthis.$elementFilestyle.find('.group-span-filestyle').addClass('input-group-btn');\n\t\t\t\t}\n\t\t\t} else if (value === false) {\n\t\t\t\tif (this.options.input) {\n\t\t\t\t\tthis.options.input = false;\n\t\t\t\t\tthis.$elementFilestyle.find(':text').remove();\n\t\t\t\t\tvar files = this.pushNameFiles();\n\t\t\t\t\tif (files.length > 0 && this.options.badge) {\n\t\t\t\t\t\tthis.$elementFilestyle.find('label').append(' <span class=\"badge\">' + files.length + '</span>');\n\t\t\t\t\t}\n\t\t\t\t\tthis.$elementFilestyle.find('.group-span-filestyle').removeClass('input-group-btn');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this.options.input;\n\t\t\t}\n\t\t},\n\n\t\tsize : function(value) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tvar btn = this.$elementFilestyle.find('label'), input = this.$elementFilestyle.find('input');\n\n\t\t\t\tbtn.removeClass('btn-lg btn-sm');\n\t\t\t\tinput.removeClass('input-lg input-sm');\n\t\t\t\tif (value != 'nr') {\n\t\t\t\t\tbtn.addClass('btn-' + value);\n\t\t\t\t\tinput.addClass('input-' + value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this.options.size;\n\t\t\t}\n\t\t},\n\t\t\n\t\tplaceholder : function(value) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tthis.options.placeholder = value;\n\t\t\t\tthis.$elementFilestyle.find('input').attr('placeholder', value);\n\t\t\t} else {\n\t\t\t\treturn this.options.placeholder;\n\t\t\t}\n\t\t},\t\t\n\n\t\tbuttonText : function(value) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tthis.options.buttonText = value;\n\t\t\t\tthis.$elementFilestyle.find('label .buttonText').html(this.options.buttonText);\n\t\t\t} else {\n\t\t\t\treturn this.options.buttonText;\n\t\t\t}\n\t\t},\n\t\t\n\t\tbuttonName : function(value) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tthis.options.buttonName = value;\n\t\t\t\tthis.$elementFilestyle.find('label').attr({\n\t\t\t\t\t'class' : 'btn ' + this.options.buttonName\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn this.options.buttonName;\n\t\t\t}\n\t\t},\n\n\t\ticonName : function(value) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tthis.$elementFilestyle.find('.icon-span-filestyle').attr({\n\t\t\t\t\t'class' : 'icon-span-filestyle ' + this.options.iconName\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn this.options.iconName;\n\t\t\t}\n\t\t},\n\n\t\thtmlIcon : function() {\n\t\t\tif (this.options.icon) {\n\t\t\t\treturn '<span class=\"icon-span-filestyle ' + this.options.iconName + '\"></span> ';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t},\n\n\t\thtmlInput : function() {\n\t\t\tif (this.options.input) {\n\t\t\t\treturn '<input type=\"text\" class=\"form-control ' + (this.options.size == 'nr' ? '' : 'input-' + this.options.size) + '\" placeholder=\"'+ this.options.placeholder +'\" disabled> ';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t},\n\n\t\t// puts the name of the input files\n\t\t// return files\n\t\tpushNameFiles : function() {\n\t\t\tvar content = '', files = [];\n\t\t\tif (this.$element[0].files === undefined) {\n\t\t\t\tfiles[0] = {\n\t\t\t\t\t'name' : this.$element[0] && this.$element[0].value\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tfiles = this.$element[0].files;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\tcontent += files[i].name.split(\"\\\\\").pop() + ', ';\n\t\t\t}\n\n\t\t\tif (content !== '') {\n\t\t\t\tthis.$elementFilestyle.find(':text').val(content.replace(/\\, $/g, ''));\n\t\t\t} else {\n\t\t\t\tthis.$elementFilestyle.find(':text').val('');\n\t\t\t}\n\t\t\t\n\t\t\treturn files;\n\t\t},\n\n\t\tconstructor : function() {\n\t\t\tvar _self = this, \n\t\t\t\thtml = '', \n\t\t\t\tid = _self.$element.attr('id'), \n\t\t\t\tfiles = [], \n\t\t\t\tbtn = '', \n\t\t\t\t$label;\n\n\t\t\tif (id === '' || !id) {\n\t\t\t\tid = 'filestyle-' + nextId;\n\t\t\t\t_self.$element.attr({\n\t\t\t\t\t'id' : id\n\t\t\t\t});\n                nextId++;\n\t\t\t}\n\n\t\t\tbtn = '<span class=\"group-span-filestyle ' + (_self.options.input ? 'input-group-btn' : '') + '\">' + \n\t\t\t  '<label for=\"' + id + '\" class=\"btn ' + _self.options.buttonName + ' ' + \n\t\t\t(_self.options.size == 'nr' ? '' : 'btn-' + _self.options.size) + '\" ' + \n\t\t\t(_self.options.disabled ? 'disabled=\"true\"' : '') + '>' + \n\t\t\t_self.htmlIcon() + '<span class=\"buttonText\">' + _self.options.buttonText + '</span>' + \n\t\t\t  '</label>' + \n\t\t\t  '</span>';\n\t\t\t\n\t\t\thtml = _self.options.buttonBefore ? btn + _self.htmlInput() : _self.htmlInput() + btn;\n\t\t\t\n\t\t\t_self.$elementFilestyle = $('<div class=\"bootstrap-filestyle input-group\">' + html + '</div>');\n\t\t\t_self.$elementFilestyle.find('.group-span-filestyle').attr('tabindex', \"0\").keypress(function(e) {\n\t\t\tif (e.keyCode === 13 || e.charCode === 32) {\n\t\t\t\t_self.$elementFilestyle.find('label').click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// hidding input file and add filestyle\n\t\t\t_self.$element.css({\n\t\t\t\t'position' : 'absolute',\n\t\t\t\t'clip' : 'rect(0px 0px 0px 0px)' // using 0px for work in IE8\n\t\t\t}).attr('tabindex', \"-1\").after(_self.$elementFilestyle);\n\n\t\t\tif (_self.options.disabled) {\n\t\t\t\t_self.$element.attr('disabled', 'true');\n\t\t\t}\n\n\t\t\t// Getting input file value\n\t\t\t_self.$element.change(function() {\n\t\t\t\tvar files = _self.pushNameFiles();\n\n\t\t\t\tif (_self.options.input == false && _self.options.badge) {\n\t\t\t\t\tif (_self.$elementFilestyle.find('.badge').length == 0) {\n\t\t\t\t\t\t_self.$elementFilestyle.find('label').append(' <span class=\"badge\">' + files.length + '</span>');\n\t\t\t\t\t} else if (files.length == 0) {\n\t\t\t\t\t\t_self.$elementFilestyle.find('.badge').remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_self.$elementFilestyle.find('.badge').html(files.length);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_self.$elementFilestyle.find('.badge').remove();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Check if browser is Firefox\n\t\t\tif (window.navigator.userAgent.search(/firefox/i) > -1) {\n\t\t\t\t// Simulating choose file for firefox\n\t\t\t\t_self.$elementFilestyle.find('label').click(function() {\n\t\t\t\t\t_self.$element.click();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tvar old = $.fn.filestyle;\n\n\t$.fn.filestyle = function(option, value) {\n\t\tvar get = '', element = this.each(function() {\n\t\t\tif ($(this).attr('type') === 'file') {\n\t\t\t\tvar $this = $(this), data = $this.data('filestyle'), options = $.extend({}, $.fn.filestyle.defaults, option, typeof option === 'object' && option);\n\n\t\t\t\tif (!data) {\n\t\t\t\t\t$this.data('filestyle', ( data = new Filestyle(this, options)));\n\t\t\t\t\tdata.constructor();\n\t\t\t\t}\n\n\t\t\t\tif ( typeof option === 'string') {\n\t\t\t\t\tget = data[option](value);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( typeof get !== undefined) {\n\t\t\treturn get;\n\t\t} else {\n\t\t\treturn element;\n\t\t}\n\t};\n\n\t$.fn.filestyle.defaults = {\n\t\t'buttonText' : 'Choose file',\n\t\t'iconName' : 'glyphicon glyphicon-folder-open',\n\t\t'buttonName' : 'btn-default',\n\t\t'size' : 'nr',\n\t\t'input' : true,\n\t\t'badge' : true,\n\t\t'icon' : true,\n\t\t'buttonBefore' : false,\n\t\t'disabled' : false,\n\t\t'placeholder': ''\n\t};\n\n\t$.fn.filestyle.noConflict = function() {\n\t\t$.fn.filestyle = old;\n\t\treturn this;\n\t};\n\n\t$(function() {\n\t\t$('.filestyle').each(function() {\n\t\t\tvar $this = $(this), options = {\n\n\t\t\t\t'input' : $this.attr('data-input') === 'false' ? false : true,\n\t\t\t\t'icon' : $this.attr('data-icon') === 'false' ? false : true,\n\t\t\t\t'buttonBefore' : $this.attr('data-buttonBefore') === 'true' ? true : false,\n\t\t\t\t'disabled' : $this.attr('data-disabled') === 'true' ? true : false,\n\t\t\t\t'size' : $this.attr('data-size'),\n\t\t\t\t'buttonText' : $this.attr('data-buttonText'),\n\t\t\t\t'buttonName' : $this.attr('data-buttonName'),\n\t\t\t\t'iconName' : $this.attr('data-iconName'),\n\t\t\t\t'badge' : $this.attr('data-badge') === 'false' ? false : true,\n\t\t\t\t'placeholder': $this.attr('data-placeholder')\n\t\t\t};\n\n\t\t\t$this.filestyle(options);\n\t\t});\n\t});\n})(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-markdown/js/bootstrap-markdown.js",
    "content": "/* ===================================================\n * bootstrap-markdown.js v2.9.0\n * http://github.com/toopay/bootstrap-markdown\n * ===================================================\n * Copyright 2013-2015 Taufan Aditya\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n  /* MARKDOWN CLASS DEFINITION\n   * ========================== */\n\n  var Markdown = function (element, options) {\n    // @TODO : remove this BC on next major release\n    // @see : https://github.com/toopay/bootstrap-markdown/issues/109\n    var opts = ['autofocus', 'savable', 'hideable', 'width', \n      'height', 'resize', 'iconlibrary', 'language', \n      'footer', 'fullscreen', 'hiddenButtons', 'disabledButtons'];\n    $.each(opts,function(_, opt){\n      if (typeof $(element).data(opt) !== 'undefined') {\n        options = typeof options == 'object' ? options : {}\n        options[opt] = $(element).data(opt)\n      }\n    });\n    // End BC\n\n    // Class Properties\n    this.$ns           = 'bootstrap-markdown';\n    this.$element      = $(element);\n    this.$editable     = {el:null, type:null,attrKeys:[], attrValues:[], content:null};\n    this.$options      = $.extend(true, {}, $.fn.markdown.defaults, options, this.$element.data('options'));\n    this.$oldContent   = null;\n    this.$isPreview    = false;\n    this.$isFullscreen = false;\n    this.$editor       = null;\n    this.$textarea     = null;\n    this.$handler      = [];\n    this.$callback     = [];\n    this.$nextTab      = [];\n\n    this.showEditor();\n  };\n\n  Markdown.prototype = {\n\n    constructor: Markdown\n\n  , __alterButtons: function(name,alter) {\n      var handler = this.$handler, isAll = (name == 'all'),that = this;\n\n      $.each(handler,function(k,v) {\n        var halt = true;\n        if (isAll) {\n          halt = false;\n        } else {\n          halt = v.indexOf(name) < 0;\n        }\n\n        if (halt === false) {\n          alter(that.$editor.find('button[data-handler=\"'+v+'\"]'));\n        }\n      });\n    }\n\n  , __buildButtons: function(buttonsArray, container) {\n      var i,\n          ns = this.$ns,\n          handler = this.$handler,\n          callback = this.$callback;\n\n      for (i=0;i<buttonsArray.length;i++) {\n        // Build each group container\n        var y, btnGroups = buttonsArray[i];\n        for (y=0;y<btnGroups.length;y++) {\n          // Build each button group\n          var z,\n              buttons = btnGroups[y].data,\n              btnGroupContainer = $('<div/>', {\n                                    'class': 'btn-group'\n                                  });\n\n          for (z=0;z<buttons.length;z++) {\n            var button = buttons[z],\n                buttonContainer, buttonIconContainer,\n                buttonHandler = ns+'-'+button.name,\n                buttonIcon = this.__getIcon(button.icon),\n                btnText = button.btnText ? button.btnText : '',\n                btnClass = button.btnClass ? button.btnClass : 'btn',\n                tabIndex = button.tabIndex ? button.tabIndex : '-1',\n                hotkey = typeof button.hotkey !== 'undefined' ? button.hotkey : '',\n                hotkeyCaption = typeof jQuery.hotkeys !== 'undefined' && hotkey !== '' ? ' ('+hotkey+')' : '';\n\n            // Construct the button object\n            buttonContainer = $('<button></button>');\n            buttonContainer.text(' ' + this.__localize(btnText)).addClass('btn-default btn-sm').addClass(btnClass);\n            if(btnClass.match(/btn\\-(primary|success|info|warning|danger|link)/)){\n                buttonContainer.removeClass('btn-default');\n            }\n            buttonContainer.attr({\n                'type': 'button',\n                'title': this.__localize(button.title) + hotkeyCaption,\n                'tabindex': tabIndex,\n                'data-provider': ns,\n                'data-handler': buttonHandler,\n                'data-hotkey': hotkey\n            });\n            if (button.toggle === true){\n              buttonContainer.attr('data-toggle', 'button');\n            }\n            buttonIconContainer = $('<span/>');\n            buttonIconContainer.addClass(buttonIcon);\n            buttonIconContainer.prependTo(buttonContainer);\n\n            // Attach the button object\n            btnGroupContainer.append(buttonContainer);\n\n            // Register handler and callback\n            handler.push(buttonHandler);\n            callback.push(button.callback);\n          }\n\n          // Attach the button group into container dom\n          container.append(btnGroupContainer);\n        }\n      }\n\n      return container;\n    }\n  , __setListener: function() {\n      // Set size and resizable Properties\n      var hasRows = typeof this.$textarea.attr('rows') !== 'undefined',\n          maxRows = this.$textarea.val().split(\"\\n\").length > 5 ? this.$textarea.val().split(\"\\n\").length : '5',\n          rowsVal = hasRows ? this.$textarea.attr('rows') : maxRows;\n\n      this.$textarea.attr('rows',rowsVal);\n      if (this.$options.resize) {\n        this.$textarea.css('resize',this.$options.resize);\n      }\n\n      this.$textarea\n        .on('focus',    $.proxy(this.focus, this))\n        .on('keypress', $.proxy(this.keypress, this))\n        .on('keyup',    $.proxy(this.keyup, this))\n        .on('change',   $.proxy(this.change, this))\n        .on('select',   $.proxy(this.select, this));\n\n      if (this.eventSupported('keydown')) {\n        this.$textarea.on('keydown', $.proxy(this.keydown, this));\n      }\n\n      // Re-attach markdown data\n      this.$textarea.data('markdown',this);\n    }\n\n  , __handle: function(e) {\n      var target = $(e.currentTarget),\n          handler = this.$handler,\n          callback = this.$callback,\n          handlerName = target.attr('data-handler'),\n          callbackIndex = handler.indexOf(handlerName),\n          callbackHandler = callback[callbackIndex];\n\n      // Trigger the focusin\n      $(e.currentTarget).focus();\n\n      callbackHandler(this);\n\n      // Trigger onChange for each button handle\n      this.change(this);\n\n      // Unless it was the save handler,\n      // focusin the textarea\n      if (handlerName.indexOf('cmdSave') < 0) {\n        this.$textarea.focus();\n      }\n\n      e.preventDefault();\n    }\n\n  , __localize: function(string) {\n      var messages = $.fn.markdown.messages,\n          language = this.$options.language;\n      if (\n        typeof messages !== 'undefined' &&\n        typeof messages[language] !== 'undefined' &&\n        typeof messages[language][string] !== 'undefined'\n      ) {\n        return messages[language][string];\n      }\n      return string;\n    }\n\n  , __getIcon: function(src) {\n    return typeof src == 'object' ? src[this.$options.iconlibrary] : src;\n  }\n\n  , setFullscreen: function(mode) {\n    var $editor = this.$editor,\n        $textarea = this.$textarea;\n\n    if (mode === true) {\n      $editor.addClass('md-fullscreen-mode');\n      $('body').addClass('md-nooverflow');\n      this.$options.onFullscreen(this);\n    } else {\n      $editor.removeClass('md-fullscreen-mode');\n      $('body').removeClass('md-nooverflow');\n\n      if (this.$isPreview == true) this.hidePreview().showPreview()\n    }\n\n    this.$isFullscreen = mode;\n    $textarea.focus();\n  }\n\n  , showEditor: function() {\n      var instance = this,\n          textarea,\n          ns = this.$ns,\n          container = this.$element,\n          originalHeigth = container.css('height'),\n          originalWidth = container.css('width'),\n          editable = this.$editable,\n          handler = this.$handler,\n          callback = this.$callback,\n          options = this.$options,\n          editor = $( '<div/>', {\n                      'class': 'md-editor',\n                      click: function() {\n                        instance.focus();\n                      }\n                    });\n\n      // Prepare the editor\n      if (this.$editor === null) {\n        // Create the panel\n        var editorHeader = $('<div/>', {\n                            'class': 'md-header btn-toolbar'\n                            });\n\n        // Merge the main & additional button groups together\n        var allBtnGroups = [];\n        if (options.buttons.length > 0) allBtnGroups = allBtnGroups.concat(options.buttons[0]);\n        if (options.additionalButtons.length > 0) allBtnGroups = allBtnGroups.concat(options.additionalButtons[0]);\n\n        // Reduce and/or reorder the button groups\n        if (options.reorderButtonGroups.length > 0) {\n          allBtnGroups = allBtnGroups\n              .filter(function(btnGroup) {\n                return options.reorderButtonGroups.indexOf(btnGroup.name) > -1;\n              })\n              .sort(function(a, b) {\n                if (options.reorderButtonGroups.indexOf(a.name) < options.reorderButtonGroups.indexOf(b.name)) return -1;\n                if (options.reorderButtonGroups.indexOf(a.name) > options.reorderButtonGroups.indexOf(b.name)) return 1;\n                return 0;\n              });\n        }\n\n        // Build the buttons\n        if (allBtnGroups.length > 0) {\n          editorHeader = this.__buildButtons([allBtnGroups], editorHeader);\n        }\n\n        if (options.fullscreen.enable) {\n          editorHeader.append('<div class=\"md-controls\"><a class=\"md-control md-control-fullscreen\" href=\"#\"><span class=\"'+this.__getIcon(options.fullscreen.icons.fullscreenOn)+'\"></span></a></div>').on('click', '.md-control-fullscreen', function(e) {\n              e.preventDefault();\n              instance.setFullscreen(true);\n          });\n        }\n\n        editor.append(editorHeader);\n\n        // Wrap the textarea\n        if (container.is('textarea')) {\n          container.before(editor);\n          textarea = container;\n          textarea.addClass('md-input');\n          editor.append(textarea);\n        } else {\n          var rawContent = (typeof toMarkdown == 'function') ? toMarkdown(container.html()) : container.html(),\n              currentContent = $.trim(rawContent);\n\n          // This is some arbitrary content that could be edited\n          textarea = $('<textarea/>', {\n                       'class': 'md-input',\n                       'val' : currentContent\n                      });\n\n          editor.append(textarea);\n\n          // Save the editable\n          editable.el = container;\n          editable.type = container.prop('tagName').toLowerCase();\n          editable.content = container.html();\n\n          $(container[0].attributes).each(function(){\n            editable.attrKeys.push(this.nodeName);\n            editable.attrValues.push(this.nodeValue);\n          });\n\n          // Set editor to blocked the original container\n          container.replaceWith(editor);\n        }\n\n        var editorFooter = $('<div/>', {\n                           'class': 'md-footer'\n                         }),\n            createFooter = false,\n            footer = '';\n        // Create the footer if savable\n        if (options.savable) {\n          createFooter = true;\n          var saveHandler = 'cmdSave';\n\n          // Register handler and callback\n          handler.push(saveHandler);\n          callback.push(options.onSave);\n\n          editorFooter.append('<button class=\"btn btn-success\" data-provider=\"'\n                              + ns\n                              + '\" data-handler=\"'\n                              + saveHandler\n                              + '\"><i class=\"icon icon-white icon-ok\"></i> '\n                              + this.__localize('Save')\n                              + '</button>');\n\n\n        }\n\n        footer = typeof options.footer === 'function' ? options.footer(this) : options.footer;\n\n        if ($.trim(footer) !== '') {\n          createFooter = true;\n          editorFooter.append(footer);\n        }\n\n        if (createFooter) editor.append(editorFooter);\n\n        // Set width\n        if (options.width && options.width !== 'inherit') {\n          if (jQuery.isNumeric(options.width)) {\n            editor.css('display', 'table');\n            textarea.css('width', options.width + 'px');\n          } else {\n            editor.addClass(options.width);\n          }\n        }\n\n        // Set height\n        if (options.height && options.height !== 'inherit') {\n          if (jQuery.isNumeric(options.height)) {\n            var height = options.height;\n            if (editorHeader) height = Math.max(0, height - editorHeader.outerHeight());\n            if (editorFooter) height = Math.max(0, height - editorFooter.outerHeight());\n            textarea.css('height', height + 'px');\n          } else {\n            editor.addClass(options.height);\n          }\n        }\n\n        // Reference\n        this.$editor     = editor;\n        this.$textarea   = textarea;\n        this.$editable   = editable;\n        this.$oldContent = this.getContent();\n\n        this.__setListener();\n\n        // Set editor attributes, data short-hand API and listener\n        this.$editor.attr('id',(new Date()).getTime());\n        this.$editor.on('click', '[data-provider=\"bootstrap-markdown\"]', $.proxy(this.__handle, this));\n\n        if (this.$element.is(':disabled') || this.$element.is('[readonly]')) {\n          this.$editor.addClass('md-editor-disabled');\n          this.disableButtons('all');\n        }\n\n        if (this.eventSupported('keydown') && typeof jQuery.hotkeys === 'object') {\n          editorHeader.find('[data-provider=\"bootstrap-markdown\"]').each(function() {\n            var $button = $(this),\n                hotkey = $button.attr('data-hotkey');\n            if (hotkey.toLowerCase() !== '') {\n              textarea.bind('keydown', hotkey, function() {\n                $button.trigger('click');\n                return false;\n              });\n            }\n          });\n        }\n\n        if (options.initialstate === 'preview') {\n          this.showPreview();\n        } else if (options.initialstate === 'fullscreen' && options.fullscreen.enable) {\n          this.setFullscreen(true);\n        }\n\n      } else {\n        this.$editor.show();\n      }\n\n      if (options.autofocus) {\n        this.$textarea.focus();\n        this.$editor.addClass('active');\n      }\n\n      if (options.fullscreen.enable && options.fullscreen !== false) {\n        this.$editor.append('<div class=\"md-fullscreen-controls\">'\n                        + '<a href=\"#\" class=\"exit-fullscreen\" title=\"Exit fullscreen\"><span class=\"' + this.__getIcon(options.fullscreen.icons.fullscreenOff) + '\">'\n                        + '</span></a>'\n                        + '</div>');\n        this.$editor.on('click', '.exit-fullscreen', function(e) {\n          e.preventDefault();\n          instance.setFullscreen(false);\n        });\n      }\n\n      // hide hidden buttons from options\n      this.hideButtons(options.hiddenButtons);\n\n      // disable disabled buttons from options\n      this.disableButtons(options.disabledButtons);\n\n      // Trigger the onShow hook\n      options.onShow(this);\n\n      return this;\n    }\n\n  , parseContent: function(val) {\n      var content;\n\n      // parse with supported markdown parser\n      var val = val || this.$textarea.val();\n\n      if (this.$options.parser) {\n        content = this.$options.parser(val);\n      } else if (typeof markdown == 'object') {\n        content = markdown.toHTML(val);\n      } else if (typeof marked == 'function') {\n        content = marked(val);\n      } else {\n        content = val;\n      }\n\n      return content;\n    }\n\n  , showPreview: function() {\n      var options = this.$options,\n          container = this.$textarea,\n          afterContainer = container.next(),\n          replacementContainer = $('<div/>',{'class':'md-preview','data-provider':'markdown-preview'}),\n          content,\n          callbackContent;\n\n      if (this.$isPreview == true) {\n        // Avoid sequenced element creation on missused scenario\n        // @see https://github.com/toopay/bootstrap-markdown/issues/170\n        return this;\n      }\n      \n      // Give flag that tell the editor enter preview mode\n      this.$isPreview = true;\n      // Disable all buttons\n      this.disableButtons('all').enableButtons('cmdPreview');\n\n      // Try to get the content from callback\n      callbackContent = options.onPreview(this);\n      // Set the content based from the callback content if string otherwise parse value from textarea\n      content = typeof callbackContent == 'string' ? callbackContent : this.parseContent();\n\n      // Build preview element\n      replacementContainer.html(content);\n\n      if (afterContainer && afterContainer.attr('class') == 'md-footer') {\n        // If there is footer element, insert the preview container before it\n        replacementContainer.insertBefore(afterContainer);\n      } else {\n        // Otherwise, just append it after textarea\n        container.parent().append(replacementContainer);\n      }\n\n      // Set the preview element dimensions\n      replacementContainer.css({\n        width: container.outerWidth() + 'px',\n        height: container.outerHeight() + 'px'\n      });\n\n      if (this.$options.resize) {\n        replacementContainer.css('resize',this.$options.resize);\n      }\n\n      // Hide the last-active textarea\n      container.hide();\n\n      // Attach the editor instances\n      replacementContainer.data('markdown',this);\n\n      if (this.$element.is(':disabled') || this.$element.is('[readonly]')) {\n        this.$editor.addClass('md-editor-disabled');\n        this.disableButtons('all');\n      }\n\n      return this;\n    }\n\n  , hidePreview: function() {\n      // Give flag that tell the editor quit preview mode\n      this.$isPreview = false;\n\n      // Obtain the preview container\n      var container = this.$editor.find('div[data-provider=\"markdown-preview\"]');\n\n      // Remove the preview container\n      container.remove();\n\n      // Enable all buttons\n      this.enableButtons('all');\n      // Disable configured disabled buttons\n      this.disableButtons(this.$options.disabledButtons);\n\n      // Back to the editor\n      this.$textarea.show();\n      this.__setListener();\n\n      return this;\n    }\n\n  , isDirty: function() {\n      return this.$oldContent != this.getContent();\n    }\n\n  , getContent: function() {\n      return this.$textarea.val();\n    }\n\n  , setContent: function(content) {\n      this.$textarea.val(content);\n\n      return this;\n    }\n\n  , findSelection: function(chunk) {\n    var content = this.getContent(), startChunkPosition;\n\n    if (startChunkPosition = content.indexOf(chunk), startChunkPosition >= 0 && chunk.length > 0) {\n      var oldSelection = this.getSelection(), selection;\n\n      this.setSelection(startChunkPosition,startChunkPosition+chunk.length);\n      selection = this.getSelection();\n\n      this.setSelection(oldSelection.start,oldSelection.end);\n\n      return selection;\n    } else {\n      return null;\n    }\n  }\n\n  , getSelection: function() {\n\n      var e = this.$textarea[0];\n\n      return (\n\n          ('selectionStart' in e && function() {\n              var l = e.selectionEnd - e.selectionStart;\n              return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };\n          }) ||\n\n          /* browser not supported */\n          function() {\n            return null;\n          }\n\n      )();\n\n    }\n\n  , setSelection: function(start,end) {\n\n      var e = this.$textarea[0];\n\n      return (\n\n          ('selectionStart' in e && function() {\n              e.selectionStart = start;\n              e.selectionEnd = end;\n              return;\n          }) ||\n\n          /* browser not supported */\n          function() {\n            return null;\n          }\n\n      )();\n\n    }\n\n  , replaceSelection: function(text) {\n\n      var e = this.$textarea[0];\n\n      return (\n\n          ('selectionStart' in e && function() {\n              e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);\n              // Set cursor to the last replacement end\n              e.selectionStart = e.value.length;\n              return this;\n          }) ||\n\n          /* browser not supported */\n          function() {\n              e.value += text;\n              return jQuery(e);\n          }\n\n      )();\n    }\n\n  , getNextTab: function() {\n      // Shift the nextTab\n      if (this.$nextTab.length === 0) {\n        return null;\n      } else {\n        var nextTab, tab = this.$nextTab.shift();\n\n        if (typeof tab == 'function') {\n          nextTab = tab();\n        } else if (typeof tab == 'object' && tab.length > 0) {\n          nextTab = tab;\n        }\n\n        return nextTab;\n      }\n    }\n\n  , setNextTab: function(start,end) {\n      // Push new selection into nextTab collections\n      if (typeof start == 'string') {\n        var that = this;\n        this.$nextTab.push(function(){\n          return that.findSelection(start);\n        });\n      } else if (typeof start == 'number' && typeof end == 'number') {\n        var oldSelection = this.getSelection();\n\n        this.setSelection(start,end);\n        this.$nextTab.push(this.getSelection());\n\n        this.setSelection(oldSelection.start,oldSelection.end);\n      }\n\n      return;\n    }\n\n  , __parseButtonNameParam: function(nameParam) {\n      var buttons = [];\n\n      if (typeof nameParam == 'string') {\n        buttons = nameParam.split(',')\n      } else {\n        buttons = nameParam;\n      }\n\n      return buttons;\n    }\n\n  , enableButtons: function(name) {\n      var buttons = this.__parseButtonNameParam(name),\n        that = this;\n\n      $.each(buttons, function(i, v) {\n        that.__alterButtons(buttons[i], function (el) {\n          el.removeAttr('disabled');\n        });\n      });\n\n      return this;\n    }\n\n  , disableButtons: function(name) {\n      var buttons = this.__parseButtonNameParam(name),\n        that = this;\n\n      $.each(buttons, function(i, v) {\n        that.__alterButtons(buttons[i], function (el) {\n          el.attr('disabled','disabled');\n        });\n      });\n\n      return this;\n    }\n\n  , hideButtons: function(name) {\n      var buttons = this.__parseButtonNameParam(name),\n        that = this;\n\n      $.each(buttons, function(i, v) {\n        that.__alterButtons(buttons[i], function (el) {\n          el.addClass('hidden');\n        });\n      });\n\n      return this;\n    }\n\n  , showButtons: function(name) {\n      var buttons = this.__parseButtonNameParam(name),\n        that = this;\n\n      $.each(buttons, function(i, v) {\n        that.__alterButtons(buttons[i], function (el) {\n          el.removeClass('hidden');\n        });\n      });\n\n      return this;\n    }\n\n  , eventSupported: function(eventName) {\n      var isSupported = eventName in this.$element;\n      if (!isSupported) {\n        this.$element.setAttribute(eventName, 'return;');\n        isSupported = typeof this.$element[eventName] === 'function';\n      }\n      return isSupported;\n    }\n\n  , keyup: function (e) {\n      var blocked = false;\n      switch(e.keyCode) {\n        case 40: // down arrow\n        case 38: // up arrow\n        case 16: // shift\n        case 17: // ctrl\n        case 18: // alt\n          break;\n\n        case 9: // tab\n          var nextTab;\n          if (nextTab = this.getNextTab(),nextTab !== null) {\n            // Get the nextTab if exists\n            var that = this;\n            setTimeout(function(){\n              that.setSelection(nextTab.start,nextTab.end);\n            },500);\n\n            blocked = true;\n          } else {\n            // The next tab memory contains nothing...\n            // check the cursor position to determine tab action\n            var cursor = this.getSelection();\n\n            if (cursor.start == cursor.end && cursor.end == this.getContent().length) {\n              // The cursor already reach the end of the content\n              blocked = false;\n            } else {\n              // Put the cursor to the end\n              this.setSelection(this.getContent().length,this.getContent().length);\n\n              blocked = true;\n            }\n          }\n\n          break;\n\n        case 13: // enter\n          blocked = false;\n          break;\n        case 27: // escape\n          if (this.$isFullscreen) this.setFullscreen(false);\n          blocked = false;\n          break;\n\n        default:\n          blocked = false;\n      }\n\n      if (blocked) {\n        e.stopPropagation();\n        e.preventDefault();\n      }\n\n      this.$options.onChange(this);\n    }\n\n  , change: function(e) {\n      this.$options.onChange(this);\n      return this;\n    }\n  , select: function (e) {\n      this.$options.onSelect(this);\n      return this;\n    }\n  , focus: function (e) {\n      var options = this.$options,\n          isHideable = options.hideable,\n          editor = this.$editor;\n\n      editor.addClass('active');\n\n      // Blur other markdown(s)\n      $(document).find('.md-editor').each(function(){\n        if ($(this).attr('id') !== editor.attr('id')) {\n          var attachedMarkdown;\n\n          if (attachedMarkdown = $(this).find('textarea').data('markdown'),\n              attachedMarkdown === null) {\n              attachedMarkdown = $(this).find('div[data-provider=\"markdown-preview\"]').data('markdown');\n          }\n\n          if (attachedMarkdown) {\n            attachedMarkdown.blur();\n          }\n        }\n      });\n\n      // Trigger the onFocus hook\n      options.onFocus(this);\n\n      return this;\n    }\n\n  , blur: function (e) {\n      var options = this.$options,\n          isHideable = options.hideable,\n          editor = this.$editor,\n          editable = this.$editable;\n\n      if (editor.hasClass('active') || this.$element.parent().length === 0) {\n        editor.removeClass('active');\n\n        if (isHideable) {\n          // Check for editable elements\n          if (editable.el !== null) {\n            // Build the original element\n            var oldElement = $('<'+editable.type+'/>'),\n                content = this.getContent(),\n                currentContent = this.parseContent(content);\n\n            $(editable.attrKeys).each(function(k,v) {\n              oldElement.attr(editable.attrKeys[k],editable.attrValues[k]);\n            });\n\n            // Get the editor content\n            oldElement.html(currentContent);\n\n            editor.replaceWith(oldElement);\n          } else {\n            editor.hide();\n          }\n        }\n\n        // Trigger the onBlur hook\n        options.onBlur(this);\n      }\n\n      return this;\n    }\n\n  };\n\n /* MARKDOWN PLUGIN DEFINITION\n  * ========================== */\n\n  var old = $.fn.markdown;\n\n  $.fn.markdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('markdown')\n        , options = typeof option == 'object' && option;\n      if (!data) $this.data('markdown', (data = new Markdown(this, options)))\n    })\n  };\n\n  $.fn.markdown.messages = {};\n\n  $.fn.markdown.defaults = {\n    /* Editor Properties */\n    autofocus: false,\n    hideable: false,\n    savable: false,\n    width: 'inherit',\n    height: 'inherit',\n    resize: 'none',\n    iconlibrary: 'glyph',\n    language: 'en',\n    initialstate: 'editor',\n    parser: null,\n\n    /* Buttons Properties */\n    buttons: [\n      [{\n        name: 'groupFont',\n        data: [{\n          name: 'cmdBold',\n          hotkey: 'Ctrl+B',\n          title: 'Bold',\n          icon: { glyph: 'glyphicon glyphicon-bold', fa: 'fa fa-bold', 'fa-3': 'icon-bold' },\n          callback: function(e){\n            // Give/remove ** surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('strong text');\n            } else {\n              chunk = selected.text;\n            }\n\n            // transform selection and set the cursor into chunked text\n            if (content.substr(selected.start-2,2) === '**'\n                && content.substr(selected.end,2) === '**' ) {\n              e.setSelection(selected.start-2,selected.end+2);\n              e.replaceSelection(chunk);\n              cursor = selected.start-2;\n            } else {\n              e.replaceSelection('**'+chunk+'**');\n              cursor = selected.start+2;\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        },{\n          name: 'cmdItalic',\n          title: 'Italic',\n          hotkey: 'Ctrl+I',\n          icon: { glyph: 'glyphicon glyphicon-italic', fa: 'fa fa-italic', 'fa-3': 'icon-italic' },\n          callback: function(e){\n            // Give/remove * surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('emphasized text');\n            } else {\n              chunk = selected.text;\n            }\n\n            // transform selection and set the cursor into chunked text\n            if (content.substr(selected.start-1,1) === '_'\n                && content.substr(selected.end,1) === '_' ) {\n              e.setSelection(selected.start-1,selected.end+1);\n              e.replaceSelection(chunk);\n              cursor = selected.start-1;\n            } else {\n              e.replaceSelection('_'+chunk+'_');\n              cursor = selected.start+1;\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        },{\n          name: 'cmdHeading',\n          title: 'Heading',\n          hotkey: 'Ctrl+H',\n          icon: { glyph: 'glyphicon glyphicon-header', fa: 'fa fa-header', 'fa-3': 'icon-font' },\n          callback: function(e){\n            // Append/remove ### surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent(), pointer, prevChar;\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('heading text');\n            } else {\n              chunk = selected.text + '\\n';\n            }\n\n            // transform selection and set the cursor into chunked text\n            if ((pointer = 4, content.substr(selected.start-pointer,pointer) === '### ')\n                || (pointer = 3, content.substr(selected.start-pointer,pointer) === '###')) {\n              e.setSelection(selected.start-pointer,selected.end);\n              e.replaceSelection(chunk);\n              cursor = selected.start-pointer;\n            } else if (selected.start > 0 && (prevChar = content.substr(selected.start-1,1), !!prevChar && prevChar != '\\n')) {\n              e.replaceSelection('\\n\\n### '+chunk);\n              cursor = selected.start+6;\n            } else {\n              // Empty string before element\n              e.replaceSelection('### '+chunk);\n              cursor = selected.start+4;\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        }]\n      },{\n        name: 'groupLink',\n        data: [{\n          name: 'cmdUrl',\n          title: 'URL/Link',\n          hotkey: 'Ctrl+L',\n          icon: { glyph: 'glyphicon glyphicon-link', fa: 'fa fa-link', 'fa-3': 'icon-link' },\n          callback: function(e){\n            // Give [] surround the selection and prepend the link\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent(), link;\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('enter link description here');\n            } else {\n              chunk = selected.text;\n            }\n\n            link = prompt(e.__localize('Insert Hyperlink'),'http://');\n\n            if (link !== null && link !== '' && link !== 'http://' && link.substr(0,4) === 'http') {\n              var sanitizedLink = $('<div>'+link+'</div>').text();\n\n              // transform selection and set the cursor into chunked text\n              e.replaceSelection('['+chunk+']('+sanitizedLink+')');\n              cursor = selected.start+1;\n\n              // Set the cursor\n              e.setSelection(cursor,cursor+chunk.length);\n            }\n          }\n        },{\n          name: 'cmdImage',\n          title: 'Image',\n          hotkey: 'Ctrl+G',\n          icon: { glyph: 'glyphicon glyphicon-picture', fa: 'fa fa-picture-o', 'fa-3': 'icon-picture' },\n          callback: function(e){\n            // Give ![] surround the selection and prepend the image link\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent(), link;\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('enter image description here');\n            } else {\n              chunk = selected.text;\n            }\n\n            link = prompt(e.__localize('Insert Image Hyperlink'),'http://');\n\n            if (link !== null && link !== '' && link !== 'http://' && link.substr(0,4) === 'http') {\n              var sanitizedLink = $('<div>'+link+'</div>').text();\n\n              // transform selection and set the cursor into chunked text\n              e.replaceSelection('!['+chunk+']('+sanitizedLink+' \"'+e.__localize('enter image title here')+'\")');\n              cursor = selected.start+2;\n\n              // Set the next tab\n              e.setNextTab(e.__localize('enter image title here'));\n\n              // Set the cursor\n              e.setSelection(cursor,cursor+chunk.length);\n            }\n          }\n        }]\n      },{\n        name: 'groupMisc',\n        data: [{\n          name: 'cmdList',\n          hotkey: 'Ctrl+U',\n          title: 'Unordered List',\n          icon: { glyph: 'glyphicon glyphicon-list', fa: 'fa fa-list', 'fa-3': 'icon-list-ul' },\n          callback: function(e){\n            // Prepend/Give - surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            // transform selection and set the cursor into chunked text\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('list text here');\n\n              e.replaceSelection('- '+chunk);\n              // Set the cursor\n              cursor = selected.start+2;\n            } else {\n              if (selected.text.indexOf('\\n') < 0) {\n                chunk = selected.text;\n\n                e.replaceSelection('- '+chunk);\n\n                // Set the cursor\n                cursor = selected.start+2;\n              } else {\n                var list = [];\n\n                list = selected.text.split('\\n');\n                chunk = list[0];\n\n                $.each(list,function(k,v) {\n                  list[k] = '- '+v;\n                });\n\n                e.replaceSelection('\\n\\n'+list.join('\\n'));\n\n                // Set the cursor\n                cursor = selected.start+4;\n              }\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        },\n        {\n          name: 'cmdListO',\n          hotkey: 'Ctrl+O',\n          title: 'Ordered List',\n          icon: { glyph: 'glyphicon glyphicon-th-list', fa: 'fa fa-list-ol', 'fa-3': 'icon-list-ol' },\n          callback: function(e) {\n\n            // Prepend/Give - surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            // transform selection and set the cursor into chunked text\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('list text here');\n              e.replaceSelection('1. '+chunk);\n              // Set the cursor\n              cursor = selected.start+3;\n            } else {\n              if (selected.text.indexOf('\\n') < 0) {\n                chunk = selected.text;\n\n                e.replaceSelection('1. '+chunk);\n\n                // Set the cursor\n                cursor = selected.start+3;\n              } else {\n                var list = [];\n\n                list = selected.text.split('\\n');\n                chunk = list[0];\n\n                $.each(list,function(k,v) {\n                  list[k] = '1. '+v;\n                });\n\n                e.replaceSelection('\\n\\n'+list.join('\\n'));\n\n                // Set the cursor\n                cursor = selected.start+5;\n              }\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        },\n        {\n          name: 'cmdCode',\n          hotkey: 'Ctrl+K',\n          title: 'Code',\n          icon: { glyph: 'glyphicon glyphicon-asterisk', fa: 'fa fa-code', 'fa-3': 'icon-code' },\n          callback: function(e) {\n            // Give/remove ** surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('code text here');\n            } else {\n              chunk = selected.text;\n            }\n\n            // transform selection and set the cursor into chunked text\n            if (content.substr(selected.start-4,4) === '```\\n'\n                && content.substr(selected.end,4) === '\\n```') {\n              e.setSelection(selected.start-4, selected.end+4);\n              e.replaceSelection(chunk);\n              cursor = selected.start-4;\n            } else if (content.substr(selected.start-1,1) === '`'\n                && content.substr(selected.end,1) === '`') {\n              e.setSelection(selected.start-1,selected.end+1);\n              e.replaceSelection(chunk);\n              cursor = selected.start-1;\n            } else if (content.indexOf('\\n') > -1) {\n              e.replaceSelection('```\\n'+chunk+'\\n```');\n              cursor = selected.start+4;\n            } else {\n              e.replaceSelection('`'+chunk+'`');\n              cursor = selected.start+1;\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        },\n        {\n          name: 'cmdQuote',\n          hotkey: 'Ctrl+Q',\n          title: 'Quote',\n          icon: { glyph: 'glyphicon glyphicon-comment', fa: 'fa fa-quote-left', 'fa-3': 'icon-quote-left' },\n          callback: function(e) {\n            // Prepend/Give - surround the selection\n            var chunk, cursor, selected = e.getSelection(), content = e.getContent();\n\n            // transform selection and set the cursor into chunked text\n            if (selected.length === 0) {\n              // Give extra word\n              chunk = e.__localize('quote here');\n\n              e.replaceSelection('> '+chunk);\n\n              // Set the cursor\n              cursor = selected.start+2;\n            } else {\n              if (selected.text.indexOf('\\n') < 0) {\n                chunk = selected.text;\n\n                e.replaceSelection('> '+chunk);\n\n                // Set the cursor\n                cursor = selected.start+2;\n              } else {\n                var list = [];\n\n                list = selected.text.split('\\n');\n                chunk = list[0];\n\n                $.each(list,function(k,v) {\n                  list[k] = '> '+v;\n                });\n\n                e.replaceSelection('\\n\\n'+list.join('\\n'));\n\n                // Set the cursor\n                cursor = selected.start+4;\n              }\n            }\n\n            // Set the cursor\n            e.setSelection(cursor,cursor+chunk.length);\n          }\n        }]\n      },{\n        name: 'groupUtil',\n        data: [{\n          name: 'cmdPreview',\n          toggle: true,\n          hotkey: 'Ctrl+P',\n          title: 'Preview',\n          btnText: 'Preview',\n          btnClass: 'btn btn-primary btn-sm',\n          icon: { glyph: 'glyphicon glyphicon-search', fa: 'fa fa-search', 'fa-3': 'icon-search' },\n          callback: function(e){\n            // Check the preview mode and toggle based on this flag\n            var isPreview = e.$isPreview,content;\n\n            if (isPreview === false) {\n              // Give flag that tell the editor enter preview mode\n              e.showPreview();\n            } else {\n              e.hidePreview();\n            }\n          }\n        }]\n      }]\n    ],\n    additionalButtons:[], // Place to hook more buttons by code\n    reorderButtonGroups:[],\n    hiddenButtons:[], // Default hidden buttons\n    disabledButtons:[], // Default disabled buttons\n    footer: '',\n    fullscreen: {\n      enable: true,\n      icons: {\n        fullscreenOn: {\n          fa: 'fa fa-expand',\n          glyph: 'glyphicon glyphicon-fullscreen',\n          'fa-3': 'icon-resize-full'\n        },\n        fullscreenOff: {\n          fa: 'fa fa-compress',\n          glyph: 'glyphicon glyphicon-fullscreen',\n          'fa-3': 'icon-resize-small'\n        }\n      }\n    },\n\n    /* Events hook */\n    onShow: function (e) {},\n    onPreview: function (e) {},\n    onSave: function (e) {},\n    onBlur: function (e) {},\n    onFocus: function (e) {},\n    onChange: function(e) {},\n    onFullscreen: function(e) {},\n    onSelect: function (e) {}\n  };\n\n  $.fn.markdown.Constructor = Markdown;\n\n\n /* MARKDOWN NO CONFLICT\n  * ==================== */\n\n  $.fn.markdown.noConflict = function () {\n    $.fn.markdown = old;\n    return this;\n  };\n\n  /* MARKDOWN GLOBAL FUNCTION & DATA-API\n  * ==================================== */\n  var initMarkdown = function(el) {\n    var $this = el;\n\n    if ($this.data('markdown')) {\n      $this.data('markdown').showEditor();\n      return;\n    }\n\n    $this.markdown()\n  };\n\n  var blurNonFocused = function(e) {\n    var $activeElement = $(document.activeElement);\n\n    // Blur event\n    $(document).find('.md-editor').each(function(){\n      var $this            = $(this),\n          focused          = $activeElement.closest('.md-editor')[0] === this,\n          attachedMarkdown = $this.find('textarea').data('markdown') ||\n                             $this.find('div[data-provider=\"markdown-preview\"]').data('markdown');\n\n      if (attachedMarkdown && !focused) {\n        attachedMarkdown.blur();\n      }\n    })\n  };\n\n  $(document)\n    .on('click.markdown.data-api', '[data-provide=\"markdown-editable\"]', function (e) {\n      initMarkdown($(this));\n      e.preventDefault();\n    })\n    .on('click focusin', function (e) {\n      blurNonFocused(e);\n    })\n    .ready(function(){\n      $('textarea[data-provide=\"markdown\"]').each(function(){\n        initMarkdown($(this));\n      })\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-maxlength/bootstrap-maxlength.js",
    "content": "(function ($) {\n  'use strict';\n  /**\n   * We need an event when the elements are destroyed\n   * because if an input is removed, we have to remove the\n   * maxlength object associated (if any).\n   * From:\n   * http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\n   */\n  if (!$.event.special.destroyed) {\n    $.event.special.destroyed = {\n      remove: function (o) {\n        if (o.handler) {\n          o.handler();\n        }\n      }\n    };\n  }\n\n\n  $.fn.extend({\n    maxlength: function (options, callback) {\n      var documentBody = $('body'),\n        defaults = {\n          showOnReady: false, // true to always show when indicator is ready\n          alwaysShow: false, // if true the indicator it's always shown.\n          threshold: 10, // Represents how many chars left are needed to show up the counter\n          warningClass: 'label label-success',\n          limitReachedClass: 'label label-important label-danger',\n          separator: ' / ',\n          preText: '',\n          postText: '',\n          showMaxLength: true,\n          placement: 'bottom',\n          message: null, // an alternative way to provide the message text\n          showCharsTyped: true, // show the number of characters typed and not the number of characters remaining\n          validate: false, // if the browser doesn't support the maxlength attribute, attempt to type more than\n          // the indicated chars, will be prevented.\n          utf8: false, // counts using bytesize rather than length. eg: '£' is counted as 2 characters.\n          appendToParent: false, // append the indicator to the input field's parent instead of body\n          twoCharLinebreak: true,  // count linebreak as 2 characters to match IE/Chrome textarea validation. As well as DB storage.\n          allowOverMax: false  // false = use maxlength attribute and browswer functionality.\n          // true = removes maxlength attribute and replaces with 'data-bs-mxl'.\n          // Form submit validation is handled on your own.  when maxlength has been exceeded 'overmax' class added to element\n        };\n\n      if ($.isFunction(options) && !callback) {\n        callback = options;\n        options = {};\n      }\n      options = $.extend(defaults, options);\n\n      /**\n      * Return the length of the specified input.\n      *\n      * @param input\n      * @return {number}\n      */\n      function inputLength(input) {\n        var text = input.val();\n\n        if (options.twoCharLinebreak) {\n          // Count all line breaks as 2 characters\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n        } else {\n          // Remove all double-character (\\r\\n) linebreaks, so they're counted only once.\n          text = text.replace(new RegExp('\\r?\\n', 'g'), '\\n');\n        }\n\n        var currentLength = 0;\n\n        if (options.utf8) {\n          currentLength = utf8Length(text);\n        } else {\n          currentLength = text.length;\n        }\n        return currentLength;\n      }\n\n      /**\n      * Truncate the text of the specified input.\n      *\n      * @param input\n      * @param limit\n      */\n      function truncateChars(input, maxlength) {\n        var text = input.val();\n        var newlines = 0;\n\n        if (options.twoCharLinebreak) {\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n\n          if (text.substr(text.length - 1) === '\\n' && text.length % 2 === 1) {\n            newlines = 1;\n          }\n        }\n\n        input.val(text.substr(0, maxlength - newlines));\n      }\n\n      /**\n      * Return the length of the specified input in UTF8 encoding.\n      *\n      * @param input\n      * @return {number}\n      */\n      function utf8Length(string) {\n        var utf8length = 0;\n        for (var n = 0; n < string.length; n++) {\n          var c = string.charCodeAt(n);\n          if (c < 128) {\n            utf8length++;\n          }\n          else if ((c > 127) && (c < 2048)) {\n            utf8length = utf8length + 2;\n          }\n          else {\n            utf8length = utf8length + 3;\n          }\n        }\n        return utf8length;\n      }\n\n      /**\n       * Return true if the indicator should be showing up.\n       *\n       * @param input\n       * @param thereshold\n       * @param maxlength\n       * @return {number}\n       */\n      function charsLeftThreshold(input, thereshold, maxlength) {\n        var output = true;\n        if (!options.alwaysShow && (maxlength - inputLength(input) > thereshold)) {\n          output = false;\n        }\n        return output;\n      }\n\n      /**\n       * Returns how many chars are left to complete the fill up of the form.\n       *\n       * @param input\n       * @param maxlength\n       * @return {number}\n       */\n      function remainingChars(input, maxlength) {\n        var length = maxlength - inputLength(input);\n        return length;\n      }\n\n      /**\n       * When called displays the indicator.\n       *\n       * @param indicator\n       */\n      function showRemaining(currentInput, indicator) {\n        indicator.css({\n          display: 'block'\n        });\n        currentInput.trigger('maxlength.shown');\n      }\n\n      /**\n       * When called shows the indicator.\n       *\n       * @param indicator\n       */\n      function hideRemaining(currentInput, indicator) {\n        indicator.css({\n          display: 'none'\n        });\n        currentInput.trigger('maxlength.hidden');\n      }\n\n      /**\n      * This function updates the value in the indicator\n      *\n      * @param maxLengthThisInput\n      * @param typedChars\n      * @return String\n      */\n      function updateMaxLengthHTML(currentInputText, maxLengthThisInput, typedChars) {\n        var output = '';\n        if (options.message) {\n          if (typeof options.message === 'function') {\n            output = options.message(currentInputText, maxLengthThisInput);\n          } else {\n            output = options.message.replace('%charsTyped%', typedChars)\n              .replace('%charsRemaining%', maxLengthThisInput - typedChars)\n              .replace('%charsTotal%', maxLengthThisInput);\n          }\n        } else {\n          if (options.preText) {\n            output += options.preText;\n          }\n          if (!options.showCharsTyped) {\n            output += maxLengthThisInput - typedChars;\n          }\n          else {\n            output += typedChars;\n          }\n          if (options.showMaxLength) {\n            output += options.separator + maxLengthThisInput;\n          }\n          if (options.postText) {\n            output += options.postText;\n          }\n        }\n        return output;\n      }\n\n      /**\n       * This function updates the value of the counter in the indicator.\n       * Wants as parameters: the number of remaining chars, the element currently managed,\n       * the maxLength for the current input and the indicator generated for it.\n       *\n       * @param remaining\n       * @param currentInput\n       * @param maxLengthCurrentInput\n       * @param maxLengthIndicator\n       */\n      function manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator) {\n        if (maxLengthIndicator) {\n          maxLengthIndicator.html(updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, (maxLengthCurrentInput - remaining)));\n\n          if (remaining > 0) {\n            if (charsLeftThreshold(currentInput, options.threshold, maxLengthCurrentInput)) {\n              showRemaining(currentInput, maxLengthIndicator.removeClass(options.limitReachedClass).addClass(options.warningClass));\n            } else {\n              hideRemaining(currentInput, maxLengthIndicator);\n            }\n          } else {\n            showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass).addClass(options.limitReachedClass));\n          }\n        }\n\n        if (options.allowOverMax) {\n          // class to use for form validation on custom maxlength attribute\n          if (remaining < 0) {\n            currentInput.addClass('overmax');\n          } else {\n            currentInput.removeClass('overmax');\n          }\n        }\n      }\n\n      /**\n       * This function returns an object containing all the\n       * informations about the position of the current input\n       *\n       * @param currentInput\n       * @return object {bottom height left right top width}\n       *\n       */\n      function getPosition(currentInput) {\n        var el = currentInput[0];\n        return $.extend({}, (typeof el.getBoundingClientRect === 'function') ? el.getBoundingClientRect() : {\n          width: el.offsetWidth,\n          height: el.offsetHeight\n        }, currentInput.offset());\n      }\n\n      /**\n       * This function places the maxLengthIndicator at the\n       * top / bottom / left / right of the currentInput\n       *\n       * @param currentInput\n       * @param maxLengthIndicator\n       * @return null\n       *\n       */\n      function place(currentInput, maxLengthIndicator) {\n        var pos = getPosition(currentInput);\n\n        // Supports custom placement handler\n        if ($.type(options.placement) === 'function'){\n          options.placement(currentInput, maxLengthIndicator, pos);\n          return;\n        }\n\n        // Supports custom placement via css positional properties\n        if ($.isPlainObject(options.placement)){\n          placeWithCSS(options.placement, maxLengthIndicator);\n          return;\n        }\n\n        var inputOuter = currentInput.outerWidth(),\n          outerWidth = maxLengthIndicator.outerWidth(),\n          actualWidth = maxLengthIndicator.width(),\n          actualHeight = maxLengthIndicator.height();\n\n        // get the right position if the indicator is appended to the input's parent\n        if (options.appendToParent) {\n          pos.top -= currentInput.parent().offset().top;\n          pos.left -= currentInput.parent().offset().left;\n        }\n\n        switch (options.placement) {\n          case 'bottom':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'top':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'left':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth });\n            break;\n          case 'right':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width });\n            break;\n          case 'bottom-right':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width });\n            break;\n          case 'top-right':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter });\n            break;\n          case 'top-left':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left - outerWidth });\n            break;\n          case 'bottom-left':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left - outerWidth });\n            break;\n          case 'centered-right':\n            maxLengthIndicator.css({ top: pos.top + (actualHeight / 2), left: pos.left + inputOuter - outerWidth - 3 });\n            break;\n\n            // Some more options for placements\n          case 'bottom-right-inside':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width - outerWidth });\n            break;\n          case 'top-right-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter - outerWidth });\n            break;\n          case 'top-left-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left });\n            break;\n          case 'bottom-left-inside':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left });\n            break;\n        }\n      }\n\n      /**\n       * This function places the maxLengthIndicator based on placement config object.\n       *\n       * @param {object} placement\n       * @param {$} maxLengthIndicator\n       * @return null\n       *\n       */\n      function placeWithCSS(placement, maxLengthIndicator) {\n        if (!placement || !maxLengthIndicator){\n          return;\n        }\n\n        var POSITION_KEYS = [\n          'top',\n          'bottom',\n          'left',\n          'right',\n          'position'\n        ];\n\n        var cssPos = {};\n\n        // filter css properties to position\n        $.each(POSITION_KEYS, function (i, key) {\n          var val = options.placement[key];\n          if (typeof val !== 'undefined'){\n            cssPos[key] = val;\n          }\n        });\n\n        maxLengthIndicator.css(cssPos);\n\n        return;\n      }\n\n      /**\n       * This function retrieves the maximum length of currentInput\n       *\n       * @param currentInput\n       * @return {number}\n       *\n       */\n      function getMaxLength(currentInput) {\n        var attr = 'maxlength';\n        if (options.allowOverMax) {\n          attr = 'data-bs-mxl';\n        }\n        return currentInput.attr(attr) || currentInput.attr('size');\n      }\n\n      return this.each(function () {\n\n        var currentInput = $(this),\n          maxLengthCurrentInput,\n          maxLengthIndicator;\n\n        $(window).resize(function () {\n          if (maxLengthIndicator) {\n            place(currentInput, maxLengthIndicator);\n          }\n        });\n\n        if (options.allowOverMax) {\n          $(this).attr('data-bs-mxl', $(this).attr('maxlength'));\n          $(this).removeAttr('maxlength');\n        }\n\n        function firstInit() {\n          var maxlengthContent = updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, '0');\n          maxLengthCurrentInput = getMaxLength(currentInput);\n\n          if (!maxLengthIndicator) {\n            maxLengthIndicator = $('<span class=\"bootstrap-maxlength\"></span>').css({\n              display: 'none',\n              position: 'absolute',\n              whiteSpace: 'nowrap',\n              zIndex: 1099\n            }).html(maxlengthContent);\n          }\n\n          // We need to detect resizes if we are dealing with a textarea:\n          if (currentInput.is('textarea')) {\n            currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n            currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n\n            currentInput.mouseup(function () {\n              if (currentInput.outerWidth() !== currentInput.data('maxlenghtsizex') || currentInput.outerHeight() !== currentInput.data('maxlenghtsizey')) {\n                place(currentInput, maxLengthIndicator);\n              }\n\n              currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n              currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n            });\n          }\n\n          if (options.appendToParent) {\n            currentInput.parent().append(maxLengthIndicator);\n            currentInput.parent().css('position', 'relative');\n          } else {\n            documentBody.append(maxLengthIndicator);\n          }\n\n          var remaining = remainingChars(currentInput, getMaxLength(currentInput));\n          manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          place(currentInput, maxLengthIndicator);\n        }\n\n        if (options.showOnReady) {\n          currentInput.ready(function () {\n            firstInit();\n          });\n        } else {\n          currentInput.focus(function () {\n            firstInit();\n          });\n        }\n\n        currentInput.on('maxlength.reposition', function () {\n          place(currentInput, maxLengthIndicator);\n        });\n\n\n        currentInput.on('destroyed', function () {\n          if (maxLengthIndicator) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('blur', function () {\n          if (maxLengthIndicator && !options.showOnReady) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('input', function () {\n          var maxlength = getMaxLength(currentInput),\n            remaining = remainingChars(currentInput, maxlength),\n            output = true;\n\n          if (options.validate && remaining < 0) {\n            truncateChars(currentInput, maxlength);\n            output = false;\n          } else {\n            manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          }\n\n          //reposition the indicator if placement \"bottom-right-inside\" & \"top-right-inside\" is used\n          if (options.placement === 'bottom-right-inside' || options.placement === 'top-right-inside') {\n            place(currentInput, maxLengthIndicator);\n          }\n\n          return output;\n        });\n      });\n    }\n  });\n}(jQuery));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-maxlength/src/bootstrap-maxlength.js",
    "content": "(function ($) {\n  'use strict';\n  /**\n   * We need an event when the elements are destroyed\n   * because if an input is removed, we have to remove the\n   * maxlength object associated (if any).\n   * From:\n   * http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\n   */\n  if (!$.event.special.destroyed) {\n    $.event.special.destroyed = {\n      remove: function (o) {\n        if (o.handler) {\n          o.handler();\n        }\n      }\n    };\n  }\n\n\n  $.fn.extend({\n    maxlength: function (options, callback) {\n      var documentBody = $('body'),\n        defaults = {\n          showOnReady: false, // true to always show when indicator is ready\n          alwaysShow: false, // if true the indicator it's always shown.\n          threshold: 10, // Represents how many chars left are needed to show up the counter\n          warningClass: 'label label-success',\n          limitReachedClass: 'label label-important label-danger',\n          separator: ' / ',\n          preText: '',\n          postText: '',\n          showMaxLength: true,\n          placement: 'bottom',\n          message: null, // an alternative way to provide the message text\n          showCharsTyped: true, // show the number of characters typed and not the number of characters remaining\n          validate: false, // if the browser doesn't support the maxlength attribute, attempt to type more than\n          // the indicated chars, will be prevented.\n          utf8: false, // counts using bytesize rather than length. eg: '£' is counted as 2 characters.\n          appendToParent: false, // append the indicator to the input field's parent instead of body\n          twoCharLinebreak: true,  // count linebreak as 2 characters to match IE/Chrome textarea validation. As well as DB storage.\n          allowOverMax: false  // false = use maxlength attribute and browswer functionality.\n          // true = removes maxlength attribute and replaces with 'data-bs-mxl'.\n          // Form submit validation is handled on your own.  when maxlength has been exceeded 'overmax' class added to element\n        };\n\n      if ($.isFunction(options) && !callback) {\n        callback = options;\n        options = {};\n      }\n      options = $.extend(defaults, options);\n\n      /**\n      * Return the length of the specified input.\n      *\n      * @param input\n      * @return {number}\n      */\n      function inputLength(input) {\n        var text = input.val();\n\n        if (options.twoCharLinebreak) {\n          // Count all line breaks as 2 characters\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n        } else {\n          // Remove all double-character (\\r\\n) linebreaks, so they're counted only once.\n          text = text.replace(new RegExp('\\r?\\n', 'g'), '\\n');\n        }\n\n        var currentLength = 0;\n\n        if (options.utf8) {\n          currentLength = utf8Length(text);\n        } else {\n          currentLength = text.length;\n        }\n        return currentLength;\n      }\n\n      /**\n      * Truncate the text of the specified input.\n      *\n      * @param input\n      * @param limit\n      */\n      function truncateChars(input, maxlength) {\n        var text = input.val();\n        var newlines = 0;\n\n        if (options.twoCharLinebreak) {\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n\n          if (text.substr(text.length - 1) === '\\n' && text.length % 2 === 1) {\n            newlines = 1;\n          }\n        }\n\n        input.val(text.substr(0, maxlength - newlines));\n      }\n\n      /**\n      * Return the length of the specified input in UTF8 encoding.\n      *\n      * @param input\n      * @return {number}\n      */\n      function utf8Length(string) {\n        var utf8length = 0;\n        for (var n = 0; n < string.length; n++) {\n          var c = string.charCodeAt(n);\n          if (c < 128) {\n            utf8length++;\n          }\n          else if ((c > 127) && (c < 2048)) {\n            utf8length = utf8length + 2;\n          }\n          else {\n            utf8length = utf8length + 3;\n          }\n        }\n        return utf8length;\n      }\n\n      /**\n       * Return true if the indicator should be showing up.\n       *\n       * @param input\n       * @param thereshold\n       * @param maxlength\n       * @return {number}\n       */\n      function charsLeftThreshold(input, thereshold, maxlength) {\n        var output = true;\n        if (!options.alwaysShow && (maxlength - inputLength(input) > thereshold)) {\n          output = false;\n        }\n        return output;\n      }\n\n      /**\n       * Returns how many chars are left to complete the fill up of the form.\n       *\n       * @param input\n       * @param maxlength\n       * @return {number}\n       */\n      function remainingChars(input, maxlength) {\n        var length = maxlength - inputLength(input);\n        return length;\n      }\n\n      /**\n       * When called displays the indicator.\n       *\n       * @param indicator\n       */\n      function showRemaining(currentInput, indicator) {\n        indicator.css({\n          display: 'block'\n        });\n        currentInput.trigger('maxlength.shown');\n      }\n\n      /**\n       * When called shows the indicator.\n       *\n       * @param indicator\n       */\n      function hideRemaining(currentInput, indicator) {\n        indicator.css({\n          display: 'none'\n        });\n        currentInput.trigger('maxlength.hidden');\n      }\n\n      /**\n      * This function updates the value in the indicator\n      *\n      * @param maxLengthThisInput\n      * @param typedChars\n      * @return String\n      */\n      function updateMaxLengthHTML(currentInputText, maxLengthThisInput, typedChars) {\n        var output = '';\n        if (options.message) {\n          if (typeof options.message === 'function') {\n            output = options.message(currentInputText, maxLengthThisInput);\n          } else {\n            output = options.message.replace('%charsTyped%', typedChars)\n              .replace('%charsRemaining%', maxLengthThisInput - typedChars)\n              .replace('%charsTotal%', maxLengthThisInput);\n          }\n        } else {\n          if (options.preText) {\n            output += options.preText;\n          }\n          if (!options.showCharsTyped) {\n            output += maxLengthThisInput - typedChars;\n          }\n          else {\n            output += typedChars;\n          }\n          if (options.showMaxLength) {\n            output += options.separator + maxLengthThisInput;\n          }\n          if (options.postText) {\n            output += options.postText;\n          }\n        }\n        return output;\n      }\n\n      /**\n       * This function updates the value of the counter in the indicator.\n       * Wants as parameters: the number of remaining chars, the element currently managed,\n       * the maxLength for the current input and the indicator generated for it.\n       *\n       * @param remaining\n       * @param currentInput\n       * @param maxLengthCurrentInput\n       * @param maxLengthIndicator\n       */\n      function manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator) {\n        if (maxLengthIndicator) {\n          maxLengthIndicator.html(updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, (maxLengthCurrentInput - remaining)));\n\n          if (remaining > 0) {\n            if (charsLeftThreshold(currentInput, options.threshold, maxLengthCurrentInput)) {\n              showRemaining(currentInput, maxLengthIndicator.removeClass(options.limitReachedClass).addClass(options.warningClass));\n            } else {\n              hideRemaining(currentInput, maxLengthIndicator);\n            }\n          } else {\n            showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass).addClass(options.limitReachedClass));\n          }\n        }\n\n        if (options.allowOverMax) {\n          // class to use for form validation on custom maxlength attribute\n          if (remaining < 0) {\n            currentInput.addClass('overmax');\n          } else {\n            currentInput.removeClass('overmax');\n          }\n        }\n      }\n\n      /**\n       * This function returns an object containing all the\n       * informations about the position of the current input\n       *\n       * @param currentInput\n       * @return object {bottom height left right top width}\n       *\n       */\n      function getPosition(currentInput) {\n        var el = currentInput[0];\n        return $.extend({}, (typeof el.getBoundingClientRect === 'function') ? el.getBoundingClientRect() : {\n          width: el.offsetWidth,\n          height: el.offsetHeight\n        }, currentInput.offset());\n      }\n\n      /**\n       * This function places the maxLengthIndicator at the\n       * top / bottom / left / right of the currentInput\n       *\n       * @param currentInput\n       * @param maxLengthIndicator\n       * @return null\n       *\n       */\n      function place(currentInput, maxLengthIndicator) {\n        var pos = getPosition(currentInput);\n\n        // Supports custom placement handler\n        if ($.type(options.placement) === 'function'){\n          options.placement(currentInput, maxLengthIndicator, pos);\n          return;\n        }\n\n        // Supports custom placement via css positional properties\n        if ($.isPlainObject(options.placement)){\n          placeWithCSS(options.placement, maxLengthIndicator);\n          return;\n        }\n\n        var inputOuter = currentInput.outerWidth(),\n          outerWidth = maxLengthIndicator.outerWidth(),\n          actualWidth = maxLengthIndicator.width(),\n          actualHeight = maxLengthIndicator.height();\n\n        // get the right position if the indicator is appended to the input's parent\n        if (options.appendToParent) {\n          pos.top -= currentInput.parent().offset().top;\n          pos.left -= currentInput.parent().offset().left;\n        }\n\n        switch (options.placement) {\n          case 'bottom':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'top':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'left':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth });\n            break;\n          case 'right':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width });\n            break;\n          case 'bottom-right':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width });\n            break;\n          case 'top-right':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter });\n            break;\n          case 'top-left':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left - outerWidth });\n            break;\n          case 'bottom-left':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left - outerWidth });\n            break;\n          case 'centered-right':\n            maxLengthIndicator.css({ top: pos.top + (actualHeight / 2), left: pos.left + inputOuter - outerWidth - 3 });\n            break;\n\n            // Some more options for placements\n          case 'bottom-right-inside':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width - outerWidth });\n            break;\n          case 'top-right-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter - outerWidth });\n            break;\n          case 'top-left-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left });\n            break;\n          case 'bottom-left-inside':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left });\n            break;\n        }\n      }\n\n      /**\n       * This function places the maxLengthIndicator based on placement config object.\n       *\n       * @param {object} placement\n       * @param {$} maxLengthIndicator\n       * @return null\n       *\n       */\n      function placeWithCSS(placement, maxLengthIndicator) {\n        if (!placement || !maxLengthIndicator){\n          return;\n        }\n\n        var POSITION_KEYS = [\n          'top',\n          'bottom',\n          'left',\n          'right',\n          'position'\n        ];\n\n        var cssPos = {};\n\n        // filter css properties to position\n        $.each(POSITION_KEYS, function (i, key) {\n          var val = options.placement[key];\n          if (typeof val !== 'undefined'){\n            cssPos[key] = val;\n          }\n        });\n\n        maxLengthIndicator.css(cssPos);\n\n        return;\n      }\n\n      /**\n       * This function retrieves the maximum length of currentInput\n       *\n       * @param currentInput\n       * @return {number}\n       *\n       */\n      function getMaxLength(currentInput) {\n        var attr = 'maxlength';\n        if (options.allowOverMax) {\n          attr = 'data-bs-mxl';\n        }\n        return currentInput.attr(attr) || currentInput.attr('size');\n      }\n\n      return this.each(function () {\n\n        var currentInput = $(this),\n          maxLengthCurrentInput,\n          maxLengthIndicator;\n\n        $(window).resize(function () {\n          if (maxLengthIndicator) {\n            place(currentInput, maxLengthIndicator);\n          }\n        });\n\n        if (options.allowOverMax) {\n          $(this).attr('data-bs-mxl', $(this).attr('maxlength'));\n          $(this).removeAttr('maxlength');\n        }\n\n        function firstInit() {\n          var maxlengthContent = updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, '0');\n          maxLengthCurrentInput = getMaxLength(currentInput);\n\n          if (!maxLengthIndicator) {\n            maxLengthIndicator = $('<span class=\"bootstrap-maxlength\"></span>').css({\n              display: 'none',\n              position: 'absolute',\n              whiteSpace: 'nowrap',\n              zIndex: 1099\n            }).html(maxlengthContent);\n          }\n\n          // We need to detect resizes if we are dealing with a textarea:\n          if (currentInput.is('textarea')) {\n            currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n            currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n\n            currentInput.mouseup(function () {\n              if (currentInput.outerWidth() !== currentInput.data('maxlenghtsizex') || currentInput.outerHeight() !== currentInput.data('maxlenghtsizey')) {\n                place(currentInput, maxLengthIndicator);\n              }\n\n              currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n              currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n            });\n          }\n\n          if (options.appendToParent) {\n            currentInput.parent().append(maxLengthIndicator);\n            currentInput.parent().css('position', 'relative');\n          } else {\n            documentBody.append(maxLengthIndicator);\n          }\n\n          var remaining = remainingChars(currentInput, getMaxLength(currentInput));\n          manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          place(currentInput, maxLengthIndicator);\n        }\n\n        if (options.showOnReady) {\n          currentInput.ready(function () {\n            firstInit();\n          });\n        } else {\n          currentInput.focus(function () {\n            firstInit();\n          });\n        }\n\n        currentInput.on('maxlength.reposition', function () {\n          place(currentInput, maxLengthIndicator);\n        });\n\n\n        currentInput.on('destroyed', function () {\n          if (maxLengthIndicator) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('blur', function () {\n          if (maxLengthIndicator && !options.showOnReady) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('input', function () {\n          var maxlength = getMaxLength(currentInput),\n            remaining = remainingChars(currentInput, maxlength),\n            output = true;\n\n          if (options.validate && remaining < 0) {\n            truncateChars(currentInput, maxlength);\n            output = false;\n          } else {\n            manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          }\n\n          //reposition the indicator if placement \"bottom-right-inside\" & \"top-right-inside\" is used\n          if (options.placement === 'bottom-right-inside' || options.placement === 'top-right-inside') {\n            place(currentInput, maxLengthIndicator);\n          }\n\n          return output;\n        });\n      });\n    }\n  });\n}(jQuery));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/bootstrap-select.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  'use strict';\n\n  //<editor-fold desc=\"Shims\">\n  if (!String.prototype.includes) {\n    (function () {\n      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n      var toString = {}.toString;\n      var defineProperty = (function () {\n        // IE 8 only supports `Object.defineProperty` on DOM elements\n        try {\n          var object = {};\n          var $defineProperty = Object.defineProperty;\n          var result = $defineProperty(object, object, object) && $defineProperty;\n        } catch (error) {\n        }\n        return result;\n      }());\n      var indexOf = ''.indexOf;\n      var includes = function (search) {\n        if (this == null) {\n          throw new TypeError();\n        }\n        var string = String(this);\n        if (search && toString.call(search) == '[object RegExp]') {\n          throw new TypeError();\n        }\n        var stringLength = string.length;\n        var searchString = String(search);\n        var searchLength = searchString.length;\n        var position = arguments.length > 1 ? arguments[1] : undefined;\n        // `ToInteger`\n        var pos = position ? Number(position) : 0;\n        if (pos != pos) { // better `isNaN`\n          pos = 0;\n        }\n        var start = Math.min(Math.max(pos, 0), stringLength);\n        // Avoid the `indexOf` call if no match is possible\n        if (searchLength + start > stringLength) {\n          return false;\n        }\n        return indexOf.call(string, searchString, pos) != -1;\n      };\n      if (defineProperty) {\n        defineProperty(String.prototype, 'includes', {\n          'value': includes,\n          'configurable': true,\n          'writable': true\n        });\n      } else {\n        String.prototype.includes = includes;\n      }\n    }());\n  }\n\n  if (!String.prototype.startsWith) {\n    (function () {\n      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n      var defineProperty = (function () {\n        // IE 8 only supports `Object.defineProperty` on DOM elements\n        try {\n          var object = {};\n          var $defineProperty = Object.defineProperty;\n          var result = $defineProperty(object, object, object) && $defineProperty;\n        } catch (error) {\n        }\n        return result;\n      }());\n      var toString = {}.toString;\n      var startsWith = function (search) {\n        if (this == null) {\n          throw new TypeError();\n        }\n        var string = String(this);\n        if (search && toString.call(search) == '[object RegExp]') {\n          throw new TypeError();\n        }\n        var stringLength = string.length;\n        var searchString = String(search);\n        var searchLength = searchString.length;\n        var position = arguments.length > 1 ? arguments[1] : undefined;\n        // `ToInteger`\n        var pos = position ? Number(position) : 0;\n        if (pos != pos) { // better `isNaN`\n          pos = 0;\n        }\n        var start = Math.min(Math.max(pos, 0), stringLength);\n        // Avoid the `indexOf` call if no match is possible\n        if (searchLength + start > stringLength) {\n          return false;\n        }\n        var index = -1;\n        while (++index < searchLength) {\n          if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n            return false;\n          }\n        }\n        return true;\n      };\n      if (defineProperty) {\n        defineProperty(String.prototype, 'startsWith', {\n          'value': startsWith,\n          'configurable': true,\n          'writable': true\n        });\n      } else {\n        String.prototype.startsWith = startsWith;\n      }\n    }());\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (\n      o, // object\n      k, // key\n      r  // result array\n      ){\n      // initialize object and result\n      r=[];\n      // iterate over object keys\n      for (k in o)\n          // fill result array with non-prototypical keys\n        r.hasOwnProperty.call(o, k) && r.push(k);\n      // return result\n      return r;\n    };\n  }\n\n  $.fn.triggerNative = function (eventName) {\n    var el = this[0],\n        event;\n\n    if (el.dispatchEvent) {\n      if (typeof Event === 'function') {\n        // For modern browsers\n        event = new Event(eventName, {\n          bubbles: true\n        });\n      } else {\n        // For IE since it doesn't support Event constructor\n        event = document.createEvent('Event');\n        event.initEvent(eventName, true, false);\n      }\n\n      el.dispatchEvent(event);\n    } else {\n      if (el.fireEvent) {\n        event = document.createEventObject();\n        event.eventType = eventName;\n        el.fireEvent('on' + eventName, event);\n      }\n\n      this.trigger(eventName);\n    }\n  };\n  //</editor-fold>\n\n  // Case insensitive contains search\n  $.expr[':'].icontains = function (obj, index, meta) {\n    var $obj = $(obj);\n    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();\n    return haystack.includes(meta[3].toUpperCase());\n  };\n\n  // Case insensitive begins search\n  $.expr[':'].ibegins = function (obj, index, meta) {\n    var $obj = $(obj);\n    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();\n    return haystack.startsWith(meta[3].toUpperCase());\n  };\n\n  // Case and accent insensitive contains search\n  $.expr[':'].aicontains = function (obj, index, meta) {\n    var $obj = $(obj);\n    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();\n    return haystack.includes(meta[3].toUpperCase());\n  };\n\n  // Case and accent insensitive begins search\n  $.expr[':'].aibegins = function (obj, index, meta) {\n    var $obj = $(obj);\n    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();\n    return haystack.startsWith(meta[3].toUpperCase());\n  };\n\n  /**\n   * Remove all diatrics from the given text.\n   * @access private\n   * @param {String} text\n   * @returns {String}\n   */\n  function normalizeToBase(text) {\n    var rExps = [\n      {re: /[\\xC0-\\xC6]/g, ch: \"A\"},\n      {re: /[\\xE0-\\xE6]/g, ch: \"a\"},\n      {re: /[\\xC8-\\xCB]/g, ch: \"E\"},\n      {re: /[\\xE8-\\xEB]/g, ch: \"e\"},\n      {re: /[\\xCC-\\xCF]/g, ch: \"I\"},\n      {re: /[\\xEC-\\xEF]/g, ch: \"i\"},\n      {re: /[\\xD2-\\xD6]/g, ch: \"O\"},\n      {re: /[\\xF2-\\xF6]/g, ch: \"o\"},\n      {re: /[\\xD9-\\xDC]/g, ch: \"U\"},\n      {re: /[\\xF9-\\xFC]/g, ch: \"u\"},\n      {re: /[\\xC7-\\xE7]/g, ch: \"c\"},\n      {re: /[\\xD1]/g, ch: \"N\"},\n      {re: /[\\xF1]/g, ch: \"n\"}\n    ];\n    $.each(rExps, function () {\n      text = text.replace(this.re, this.ch);\n    });\n    return text;\n  }\n\n\n  function htmlEscape(html) {\n    var escapeMap = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#x27;',\n      '`': '&#x60;'\n    };\n    var source = '(?:' + Object.keys(escapeMap).join('|') + ')',\n        testRegexp = new RegExp(source),\n        replaceRegexp = new RegExp(source, 'g'),\n        string = html == null ? '' : '' + html;\n    return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {\n      return escapeMap[match];\n    }) : string;\n  }\n\n  var Selectpicker = function (element, options, e) {\n    if (e) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n\n    this.$element = $(element);\n    this.$newElement = null;\n    this.$button = null;\n    this.$menu = null;\n    this.$lis = null;\n    this.options = options;\n\n    // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n    // data-attribute)\n    if (this.options.title === null) {\n      this.options.title = this.$element.attr('title');\n    }\n\n    //Expose public methods\n    this.val = Selectpicker.prototype.val;\n    this.render = Selectpicker.prototype.render;\n    this.refresh = Selectpicker.prototype.refresh;\n    this.setStyle = Selectpicker.prototype.setStyle;\n    this.selectAll = Selectpicker.prototype.selectAll;\n    this.deselectAll = Selectpicker.prototype.deselectAll;\n    this.destroy = Selectpicker.prototype.destroy;\n    this.remove = Selectpicker.prototype.remove;\n    this.show = Selectpicker.prototype.show;\n    this.hide = Selectpicker.prototype.hide;\n\n    this.init();\n  };\n\n  Selectpicker.VERSION = '1.10.0';\n\n  // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n  Selectpicker.DEFAULTS = {\n    noneSelectedText: 'Nothing selected',\n    noneResultsText: 'No results matched {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} item selected\" : \"{0} items selected\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',\n        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'\n      ];\n    },\n    selectAllText: 'Select All',\n    deselectAllText: 'Deselect All',\n    doneButton: false,\n    doneButtonText: 'Close',\n    multipleSeparator: ', ',\n    styleBase: 'btn',\n    style: 'btn-default',\n    size: 'auto',\n    title: null,\n    selectedTextFormat: 'values',\n    width: false,\n    container: false,\n    hideDisabled: false,\n    showSubtext: false,\n    showIcon: true,\n    showContent: true,\n    dropupAuto: true,\n    header: false,\n    liveSearch: false,\n    liveSearchPlaceholder: null,\n    liveSearchNormalize: false,\n    liveSearchStyle: 'contains',\n    actionsBox: false,\n    iconBase: 'glyphicon',\n    tickIcon: 'glyphicon-ok',\n    showTick: false,\n    template: {\n      caret: '<span class=\"caret\"></span>'\n    },\n    maxOptions: false,\n    mobile: false,\n    selectOnTab: false,\n    dropdownAlignRight: false\n  };\n\n  Selectpicker.prototype = {\n\n    constructor: Selectpicker,\n\n    init: function () {\n      var that = this,\n          id = this.$element.attr('id');\n\n      this.$element.addClass('bs-select-hidden');\n\n      // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility\n      // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index=\"' + index + '\"]')\n      this.liObj = {};\n      this.multiple = this.$element.prop('multiple');\n      this.autofocus = this.$element.prop('autofocus');\n      this.$newElement = this.createView();\n      this.$element\n        .after(this.$newElement)\n        .appendTo(this.$newElement);\n      this.$button = this.$newElement.children('button');\n      this.$menu = this.$newElement.children('.dropdown-menu');\n      this.$menuInner = this.$menu.children('.inner');\n      this.$searchbox = this.$menu.find('input');\n\n      this.$element.removeClass('bs-select-hidden');\n\n      if (this.options.dropdownAlignRight)\n        this.$menu.addClass('dropdown-menu-right');\n\n      if (typeof id !== 'undefined') {\n        this.$button.attr('data-id', id);\n        $('label[for=\"' + id + '\"]').click(function (e) {\n          e.preventDefault();\n          that.$button.focus();\n        });\n      }\n\n      this.checkDisabled();\n      this.clickListener();\n      if (this.options.liveSearch) this.liveSearchListener();\n      this.render();\n      this.setStyle();\n      this.setWidth();\n      if (this.options.container) this.selectPosition();\n      this.$menu.data('this', this);\n      this.$newElement.data('this', this);\n      if (this.options.mobile) this.mobile();\n\n      this.$newElement.on({\n        'hide.bs.dropdown': function (e) {\n          that.$element.trigger('hide.bs.select', e);\n        },\n        'hidden.bs.dropdown': function (e) {\n          that.$element.trigger('hidden.bs.select', e);\n        },\n        'show.bs.dropdown': function (e) {\n          that.$element.trigger('show.bs.select', e);\n        },\n        'shown.bs.dropdown': function (e) {\n          that.$element.trigger('shown.bs.select', e);\n        }\n      });\n\n      if (that.$element[0].hasAttribute('required')) {\n        this.$element.on('invalid', function () {\n          that.$button\n            .addClass('bs-invalid')\n            .focus();\n          \n          that.$element.on({\n            'focus.bs.select': function () {\n              that.$button.focus();\n              that.$element.off('focus.bs.select');\n            },\n            'shown.bs.select': function () {\n              that.$element\n                .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\n                .off('shown.bs.select');\n            },\n            'rendered.bs.select': function () {\n              // if select is no longer invalid, remove the bs-invalid class\n              if (this.validity.valid) that.$button.removeClass('bs-invalid');\n              that.$element.off('rendered.bs.select');\n            }\n          });\n          \n        });\n      }\n\n      setTimeout(function () {\n        that.$element.trigger('loaded.bs.select');\n      });\n    },\n\n    createDropdown: function () {\n      // Options\n      // If we are multiple or showTick option is set, then add the show-tick class\n      var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',\n          inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',\n          autofocus = this.autofocus ? ' autofocus' : '';\n      // Elements\n      var header = this.options.header ? '<div class=\"popover-title\"><button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button>' + this.options.header + '</div>' : '';\n      var searchbox = this.options.liveSearch ?\n      '<div class=\"bs-searchbox\">' +\n      '<input type=\"text\" class=\"form-control\" autocomplete=\"off\"' +\n      (null === this.options.liveSearchPlaceholder ? '' : ' placeholder=\"' + htmlEscape(this.options.liveSearchPlaceholder) + '\"') + '>' +\n      '</div>'\n          : '';\n      var actionsbox = this.multiple && this.options.actionsBox ?\n      '<div class=\"bs-actionsbox\">' +\n      '<div class=\"btn-group btn-group-sm btn-block\">' +\n      '<button type=\"button\" class=\"actions-btn bs-select-all btn btn-default\">' +\n      this.options.selectAllText +\n      '</button>' +\n      '<button type=\"button\" class=\"actions-btn bs-deselect-all btn btn-default\">' +\n      this.options.deselectAllText +\n      '</button>' +\n      '</div>' +\n      '</div>'\n          : '';\n      var donebutton = this.multiple && this.options.doneButton ?\n      '<div class=\"bs-donebutton\">' +\n      '<div class=\"btn-group btn-block\">' +\n      '<button type=\"button\" class=\"btn btn-sm btn-default\">' +\n      this.options.doneButtonText +\n      '</button>' +\n      '</div>' +\n      '</div>'\n          : '';\n      var drop =\n          '<div class=\"btn-group bootstrap-select' + showTick + inputGroup + '\">' +\n          '<button type=\"button\" class=\"' + this.options.styleBase + ' dropdown-toggle\" data-toggle=\"dropdown\"' + autofocus + '>' +\n          '<span class=\"filter-option pull-left\"></span>&nbsp;' +\n          '<span class=\"bs-caret\">' +\n          this.options.template.caret +\n          '</span>' +\n          '</button>' +\n          '<div class=\"dropdown-menu open\">' +\n          header +\n          searchbox +\n          actionsbox +\n          '<ul class=\"dropdown-menu inner\" role=\"menu\">' +\n          '</ul>' +\n          donebutton +\n          '</div>' +\n          '</div>';\n\n      return $(drop);\n    },\n\n    createView: function () {\n      var $drop = this.createDropdown(),\n          li = this.createLi();\n\n      $drop.find('ul')[0].innerHTML = li;\n      return $drop;\n    },\n\n    reloadLi: function () {\n      //Remove all children.\n      this.destroyLi();\n      //Re build\n      var li = this.createLi();\n      this.$menuInner[0].innerHTML = li;\n    },\n\n    destroyLi: function () {\n      this.$menu.find('li').remove();\n    },\n\n    createLi: function () {\n      var that = this,\n          _li = [],\n          optID = 0,\n          titleOption = document.createElement('option'),\n          liIndex = -1; // increment liIndex whenever a new <li> element is created to ensure liObj is correct\n\n      // Helper functions\n      /**\n       * @param content\n       * @param [index]\n       * @param [classes]\n       * @param [optgroup]\n       * @returns {string}\n       */\n      var generateLI = function (content, index, classes, optgroup) {\n        return '<li' +\n            ((typeof classes !== 'undefined' & '' !== classes) ? ' class=\"' + classes + '\"' : '') +\n            ((typeof index !== 'undefined' & null !== index) ? ' data-original-index=\"' + index + '\"' : '') +\n            ((typeof optgroup !== 'undefined' & null !== optgroup) ? 'data-optgroup=\"' + optgroup + '\"' : '') +\n            '>' + content + '</li>';\n      };\n\n      /**\n       * @param text\n       * @param [classes]\n       * @param [inline]\n       * @param [tokens]\n       * @returns {string}\n       */\n      var generateA = function (text, classes, inline, tokens) {\n        return '<a tabindex=\"0\"' +\n            (typeof classes !== 'undefined' ? ' class=\"' + classes + '\"' : '') +\n            (typeof inline !== 'undefined' ? ' style=\"' + inline + '\"' : '') +\n            (that.options.liveSearchNormalize ? ' data-normalized-text=\"' + normalizeToBase(htmlEscape(text)) + '\"' : '') +\n            (typeof tokens !== 'undefined' || tokens !== null ? ' data-tokens=\"' + tokens + '\"' : '') +\n            '>' + text +\n            '<span class=\"' + that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark\"></span>' +\n            '</a>';\n      };\n\n      if (this.options.title && !this.multiple) {\n        // this option doesn't create a new <li> element, but does add a new option, so liIndex is decreased\n        // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended\n        liIndex--;\n\n        if (!this.$element.find('.bs-title-option').length) {\n          // Use native JS to prepend option (faster)\n          var element = this.$element[0];\n          titleOption.className = 'bs-title-option';\n          titleOption.appendChild(document.createTextNode(this.options.title));\n          titleOption.value = '';\n          element.insertBefore(titleOption, element.firstChild);\n          // Check if selected attribute is already set on an option. If not, select the titleOption option.\n          if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;\n        }\n      }\n\n      this.$element.find('option').each(function (index) {\n        var $this = $(this);\n\n        liIndex++;\n\n        if ($this.hasClass('bs-title-option')) return;\n\n        // Get the class and text for the option\n        var optionClass = this.className || '',\n            inline = this.style.cssText,\n            text = $this.data('content') ? $this.data('content') : $this.html(),\n            tokens = $this.data('tokens') ? $this.data('tokens') : null,\n            subtext = typeof $this.data('subtext') !== 'undefined' ? '<small class=\"text-muted\">' + $this.data('subtext') + '</small>' : '',\n            icon = typeof $this.data('icon') !== 'undefined' ? '<span class=\"' + that.options.iconBase + ' ' + $this.data('icon') + '\"></span> ' : '',\n            isOptgroup = this.parentNode.tagName === 'OPTGROUP',\n            isDisabled = this.disabled || (isOptgroup && this.parentNode.disabled);\n\n        if (icon !== '' && isDisabled) {\n          icon = '<span>' + icon + '</span>';\n        }\n\n        if (that.options.hideDisabled && isDisabled && !isOptgroup) {\n          liIndex--;\n          return;\n        }\n\n        if (!$this.data('content')) {\n          // Prepend any icon and append any subtext to the main text.\n          text = icon + '<span class=\"text\">' + text + subtext + '</span>';\n        }\n\n        if (isOptgroup && $this.data('divider') !== true) {\n          var optGroupClass = ' ' + this.parentNode.className || '';\n\n          if ($this.index() === 0) { // Is it the first option of the optgroup?\n            optID += 1;\n\n            // Get the opt group label\n            var label = this.parentNode.label,\n                labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '<small class=\"text-muted\">' + $this.parent().data('subtext') + '</small>' : '',\n                labelIcon = $this.parent().data('icon') ? '<span class=\"' + that.options.iconBase + ' ' + $this.parent().data('icon') + '\"></span> ' : '';\n\n            label = labelIcon + '<span class=\"text\">' + label + labelSubtext + '</span>';\n\n            if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?\n              liIndex++;\n              _li.push(generateLI('', null, 'divider', optID + 'div'));\n            }\n            liIndex++;\n            _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));\n          }\n\n          if (that.options.hideDisabled && isDisabled) {\n            liIndex--;\n            return;\n          }\n\n          _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));\n        } else if ($this.data('divider') === true) {\n          _li.push(generateLI('', index, 'divider'));\n        } else if ($this.data('hidden') === true) {\n          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));\n        } else {\n          if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {\n            liIndex++;\n            _li.push(generateLI('', null, 'divider', optID + 'div'));\n          }\n          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));\n        }\n\n        that.liObj[index] = liIndex;\n      });\n\n      //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button\n      if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {\n        this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');\n      }\n\n      return _li.join('');\n    },\n\n    findLis: function () {\n      if (this.$lis == null) this.$lis = this.$menu.find('li');\n      return this.$lis;\n    },\n\n    /**\n     * @param [updateLi] defaults to true\n     */\n    render: function (updateLi) {\n      var that = this,\n          notDisabled;\n\n      //Update the LI to match the SELECT\n      if (updateLi !== false) {\n        this.$element.find('option').each(function (index) {\n          var $lis = that.findLis().eq(that.liObj[index]);\n\n          that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);\n          that.setSelected(index, this.selected, $lis);\n        });\n      }\n\n      this.tabIndex();\n\n      var selectedItems = this.$element.find('option').map(function () {\n        if (this.selected) {\n          if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;\n\n          var $this = $(this),\n              icon = $this.data('icon') && that.options.showIcon ? '<i class=\"' + that.options.iconBase + ' ' + $this.data('icon') + '\"></i> ' : '',\n              subtext;\n\n          if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {\n            subtext = ' <small class=\"text-muted\">' + $this.data('subtext') + '</small>';\n          } else {\n            subtext = '';\n          }\n          if (typeof $this.attr('title') !== 'undefined') {\n            return $this.attr('title');\n          } else if ($this.data('content') && that.options.showContent) {\n            return $this.data('content');\n          } else {\n            return icon + $this.html() + subtext;\n          }\n        }\n      }).toArray();\n\n      //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled\n      //Convert all the values into a comma delimited string\n      var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);\n\n      //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..\n      if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {\n        var max = this.options.selectedTextFormat.split('>');\n        if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {\n          notDisabled = this.options.hideDisabled ? ', [disabled]' : '';\n          var totalCount = this.$element.find('option').not('[data-divider=\"true\"], [data-hidden=\"true\"]' + notDisabled).length,\n              tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;\n          title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());\n        }\n      }\n\n      if (this.options.title == undefined) {\n        this.options.title = this.$element.attr('title');\n      }\n\n      if (this.options.selectedTextFormat == 'static') {\n        title = this.options.title;\n      }\n\n      //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text\n      if (!title) {\n        title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;\n      }\n\n      //strip all html-tags and trim the result\n      this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, '')));\n      this.$button.children('.filter-option').html(title);\n\n      this.$element.trigger('rendered.bs.select');\n    },\n\n    /**\n     * @param [style]\n     * @param [status]\n     */\n    setStyle: function (style, status) {\n      if (this.$element.attr('class')) {\n        this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n      }\n\n      var buttonClass = style ? style : this.options.style;\n\n      if (status == 'add') {\n        this.$button.addClass(buttonClass);\n      } else if (status == 'remove') {\n        this.$button.removeClass(buttonClass);\n      } else {\n        this.$button.removeClass(this.options.style);\n        this.$button.addClass(buttonClass);\n      }\n    },\n\n    liHeight: function (refresh) {\n      if (!refresh && (this.options.size === false || this.sizeInfo)) return;\n\n      var newElement = document.createElement('div'),\n          menu = document.createElement('div'),\n          menuInner = document.createElement('ul'),\n          divider = document.createElement('li'),\n          li = document.createElement('li'),\n          a = document.createElement('a'),\n          text = document.createElement('span'),\n          header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,\n          search = this.options.liveSearch ? document.createElement('div') : null,\n          actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\n          doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;\n\n      text.className = 'text';\n      newElement.className = this.$menu[0].parentNode.className + ' open';\n      menu.className = 'dropdown-menu open';\n      menuInner.className = 'dropdown-menu inner';\n      divider.className = 'divider';\n\n      text.appendChild(document.createTextNode('Inner text'));\n      a.appendChild(text);\n      li.appendChild(a);\n      menuInner.appendChild(li);\n      menuInner.appendChild(divider);\n      if (header) menu.appendChild(header);\n      if (search) {\n        // create a span instead of input as creating an input element is slower\n        var input = document.createElement('span');\n        search.className = 'bs-searchbox';\n        input.className = 'form-control';\n        search.appendChild(input);\n        menu.appendChild(search);\n      }\n      if (actions) menu.appendChild(actions);\n      menu.appendChild(menuInner);\n      if (doneButton) menu.appendChild(doneButton);\n      newElement.appendChild(menu);\n\n      document.body.appendChild(newElement);\n\n      var liHeight = a.offsetHeight,\n          headerHeight = header ? header.offsetHeight : 0,\n          searchHeight = search ? search.offsetHeight : 0,\n          actionsHeight = actions ? actions.offsetHeight : 0,\n          doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\n          dividerHeight = $(divider).outerHeight(true),\n          // fall back to jQuery if getComputedStyle is not supported\n          menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,\n          $menu = menuStyle ? null : $(menu),\n          menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +\n                        parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +\n                        parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +\n                        parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\n          menuExtras =  menuPadding +\n                        parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +\n                        parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2;\n\n      document.body.removeChild(newElement);\n\n      this.sizeInfo = {\n        liHeight: liHeight,\n        headerHeight: headerHeight,\n        searchHeight: searchHeight,\n        actionsHeight: actionsHeight,\n        doneButtonHeight: doneButtonHeight,\n        dividerHeight: dividerHeight,\n        menuPadding: menuPadding,\n        menuExtras: menuExtras\n      };\n    },\n\n    setSize: function () {\n      this.findLis();\n      this.liHeight();\n\n      if (this.options.header) this.$menu.css('padding-top', 0);\n      if (this.options.size === false) return;\n\n      var that = this,\n          $menu = this.$menu,\n          $menuInner = this.$menuInner,\n          $window = $(window),\n          selectHeight = this.$newElement[0].offsetHeight,\n          liHeight = this.sizeInfo['liHeight'],\n          headerHeight = this.sizeInfo['headerHeight'],\n          searchHeight = this.sizeInfo['searchHeight'],\n          actionsHeight = this.sizeInfo['actionsHeight'],\n          doneButtonHeight = this.sizeInfo['doneButtonHeight'],\n          divHeight = this.sizeInfo['dividerHeight'],\n          menuPadding = this.sizeInfo['menuPadding'],\n          menuExtras = this.sizeInfo['menuExtras'],\n          notDisabled = this.options.hideDisabled ? '.disabled' : '',\n          menuHeight,\n          getHeight,\n          selectOffsetTop,\n          selectOffsetBot,\n          posVert = function () {\n            selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();\n            selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;\n          };\n\n      posVert();\n\n      if (this.options.size === 'auto') {\n        var getSize = function () {\n          var minHeight,\n              hasClass = function (className, include) {\n                return function (element) {\n                    if (include) {\n                        return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));\n                    } else {\n                        return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));\n                    }\n                };\n              },\n              lis = that.$menuInner[0].getElementsByTagName('li'),\n              lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),\n              optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');\n\n          posVert();\n          menuHeight = selectOffsetBot - menuExtras;\n\n          if (that.options.container) {\n            if (!$menu.data('height')) $menu.data('height', $menu.height());\n            getHeight = $menu.data('height');\n          } else {\n            getHeight = $menu.height();\n          }\n\n          if (that.options.dropupAuto) {\n            that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);\n          }\n          if (that.$newElement.hasClass('dropup')) {\n            menuHeight = selectOffsetTop - menuExtras;\n          }\n\n          if ((lisVisible.length + optGroup.length) > 3) {\n            minHeight = liHeight * 3 + menuExtras - 2;\n          } else {\n            minHeight = 0;\n          }\n\n          $menu.css({\n            'max-height': menuHeight + 'px',\n            'overflow': 'hidden',\n            'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'\n          });\n          $menuInner.css({\n            'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px',\n            'overflow-y': 'auto',\n            'min-height': Math.max(minHeight - menuPadding, 0) + 'px'\n          });\n        };\n        getSize();\n        this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);\n        $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);\n      } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {\n        var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),\n            divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;\n        menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;\n\n        if (that.options.container) {\n          if (!$menu.data('height')) $menu.data('height', $menu.height());\n          getHeight = $menu.data('height');\n        } else {\n          getHeight = $menu.height();\n        }\n\n        if (that.options.dropupAuto) {\n          //noinspection JSUnusedAssignment\n          this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);\n        }\n        $menu.css({\n          'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',\n          'overflow': 'hidden',\n          'min-height': ''\n        });\n        $menuInner.css({\n          'max-height': menuHeight - menuPadding + 'px',\n          'overflow-y': 'auto',\n          'min-height': ''\n        });\n      }\n    },\n\n    setWidth: function () {\n      if (this.options.width === 'auto') {\n        this.$menu.css('min-width', '0');\n\n        // Get correct width if element is hidden\n        var $selectClone = this.$menu.parent().clone().appendTo('body'),\n            $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,\n            ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),\n            btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();\n\n        $selectClone.remove();\n        $selectClone2.remove();\n\n        // Set width to whatever's larger, button title or longest option\n        this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');\n      } else if (this.options.width === 'fit') {\n        // Remove inline min-width so width can be changed from 'auto'\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', '').addClass('fit-width');\n      } else if (this.options.width) {\n        // Remove inline min-width so width can be changed from 'auto'\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', this.options.width);\n      } else {\n        // Remove inline min-width/width so width can be changed\n        this.$menu.css('min-width', '');\n        this.$newElement.css('width', '');\n      }\n      // Remove fit-width class if width is changed programmatically\n      if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n        this.$newElement.removeClass('fit-width');\n      }\n    },\n\n    selectPosition: function () {\n      this.$bsContainer = $('<div class=\"bs-container\" />');\n\n      var that = this,\n          pos,\n          actualHeight,\n          getPlacement = function ($element) {\n            that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));\n            pos = $element.offset();\n            actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;\n            that.$bsContainer.css({\n              'top': pos.top + actualHeight,\n              'left': pos.left,\n              'width': $element[0].offsetWidth\n            });\n          };\n\n      this.$button.on('click', function () {\n        var $this = $(this);\n\n        if (that.isDisabled()) {\n          return;\n        }\n\n        getPlacement(that.$newElement);\n\n        that.$bsContainer\n          .appendTo(that.options.container)\n          .toggleClass('open', !$this.hasClass('open'))\n          .append(that.$menu);\n      });\n\n      $(window).on('resize scroll', function () {\n        getPlacement(that.$newElement);\n      });\n\n      this.$element.on('hide.bs.select', function () {\n        that.$menu.data('height', that.$menu.height());\n        that.$bsContainer.detach();\n      });\n    },\n\n    setSelected: function (index, selected, $lis) {\n      if (!$lis) {\n        $lis = this.findLis().eq(this.liObj[index]);\n      }\n\n      $lis.toggleClass('selected', selected);\n    },\n\n    setDisabled: function (index, disabled, $lis) {\n      if (!$lis) {\n        $lis = this.findLis().eq(this.liObj[index]);\n      }\n\n      if (disabled) {\n        $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);\n      } else {\n        $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);\n      }\n    },\n\n    isDisabled: function () {\n      return this.$element[0].disabled;\n    },\n\n    checkDisabled: function () {\n      var that = this;\n\n      if (this.isDisabled()) {\n        this.$newElement.addClass('disabled');\n        this.$button.addClass('disabled').attr('tabindex', -1);\n      } else {\n        if (this.$button.hasClass('disabled')) {\n          this.$newElement.removeClass('disabled');\n          this.$button.removeClass('disabled');\n        }\n\n        if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {\n          this.$button.removeAttr('tabindex');\n        }\n      }\n\n      this.$button.click(function () {\n        return !that.isDisabled();\n      });\n    },\n\n    tabIndex: function () {\n      if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && \n        (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {\n        this.$element.data('tabindex', this.$element.attr('tabindex'));\n        this.$button.attr('tabindex', this.$element.data('tabindex'));\n      }\n      \n      this.$element.attr('tabindex', -98);\n    },\n\n    clickListener: function () {\n      var that = this,\n          $document = $(document);\n\n      this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {\n        e.stopPropagation();\n      });\n\n      $document.data('spaceSelect', false);\n\n      this.$button.on('keyup', function (e) {\n        if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n            e.preventDefault();\n            $document.data('spaceSelect', false);\n        }\n      });\n\n      this.$button.on('click', function () {\n        that.setSize();\n      });\n\n      this.$element.on('shown.bs.select', function () {\n        if (!that.options.liveSearch && !that.multiple) {\n          that.$menuInner.find('.selected a').focus();\n        } else if (!that.multiple) {\n          var selectedIndex = that.liObj[that.$element[0].selectedIndex];\n\n          if (typeof selectedIndex !== 'number' || that.options.size === false) return;\n\n          // scroll to selected option\n          var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;\n          offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;\n          that.$menuInner[0].scrollTop = offset;\n        }\n      });\n\n      this.$menuInner.on('click', 'li a', function (e) {\n        var $this = $(this),\n            clickedIndex = $this.parent().data('originalIndex'),\n            prevValue = that.$element.val(),\n            prevIndex = that.$element.prop('selectedIndex');\n\n        // Don't close on multi choice menu\n        if (that.multiple) {\n          e.stopPropagation();\n        }\n\n        e.preventDefault();\n\n        //Don't run if we have been disabled\n        if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {\n          var $options = that.$element.find('option'),\n              $option = $options.eq(clickedIndex),\n              state = $option.prop('selected'),\n              $optgroup = $option.parent('optgroup'),\n              maxOptions = that.options.maxOptions,\n              maxOptionsGrp = $optgroup.data('maxOptions') || false;\n\n          if (!that.multiple) { // Deselect all others if not multi select box\n            $options.prop('selected', false);\n            $option.prop('selected', true);\n            that.$menuInner.find('.selected').removeClass('selected');\n            that.setSelected(clickedIndex, true);\n          } else { // Toggle the one we have chosen if we are multi select.\n            $option.prop('selected', !state);\n            that.setSelected(clickedIndex, !state);\n            $this.blur();\n\n            if (maxOptions !== false || maxOptionsGrp !== false) {\n              var maxReached = maxOptions < $options.filter(':selected').length,\n                  maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n              if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {\n                if (maxOptions && maxOptions == 1) {\n                  $options.prop('selected', false);\n                  $option.prop('selected', true);\n                  that.$menuInner.find('.selected').removeClass('selected');\n                  that.setSelected(clickedIndex, true);\n                } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n                  $optgroup.find('option:selected').prop('selected', false);\n                  $option.prop('selected', true);\n                  var optgroupID = $this.parent().data('optgroup');\n                  that.$menuInner.find('[data-optgroup=\"' + optgroupID + '\"]').removeClass('selected');\n                  that.setSelected(clickedIndex, true);\n                } else {\n                  var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?\n                          that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText,\n                      maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\n                      maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\n                      $notify = $('<div class=\"notify\"></div>');\n                  // If {var} is set in array, replace it\n                  /** @deprecated */\n                  if (maxOptionsArr[2]) {\n                    maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n                    maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n                  }\n\n                  $option.prop('selected', false);\n\n                  that.$menu.append($notify);\n\n                  if (maxOptions && maxReached) {\n                    $notify.append($('<div>' + maxTxt + '</div>'));\n                    that.$element.trigger('maxReached.bs.select');\n                  }\n\n                  if (maxOptionsGrp && maxReachedGrp) {\n                    $notify.append($('<div>' + maxTxtGrp + '</div>'));\n                    that.$element.trigger('maxReachedGrp.bs.select');\n                  }\n\n                  setTimeout(function () {\n                    that.setSelected(clickedIndex, false);\n                  }, 10);\n\n                  $notify.delay(750).fadeOut(300, function () {\n                    $(this).remove();\n                  });\n                }\n              }\n            }\n          }\n\n          if (!that.multiple) {\n            that.$button.focus();\n          } else if (that.options.liveSearch) {\n            that.$searchbox.focus();\n          }\n\n          // Trigger select 'change'\n          if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {\n            // $option.prop('selected') is current option state (selected/unselected). state is previous option state.\n            that.$element\n              .trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state])\n              .triggerNative('change');\n          }\n        }\n      });\n\n      this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {\n        if (e.currentTarget == this) {\n          e.preventDefault();\n          e.stopPropagation();\n          if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n            that.$searchbox.focus();\n          } else {\n            that.$button.focus();\n          }\n        }\n      });\n\n      this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        if (that.options.liveSearch) {\n          that.$searchbox.focus();\n        } else {\n          that.$button.focus();\n        }\n      });\n\n      this.$menu.on('click', '.popover-title .close', function () {\n        that.$button.click();\n      });\n\n      this.$searchbox.on('click', function (e) {\n        e.stopPropagation();\n      });\n\n      this.$menu.on('click', '.actions-btn', function (e) {\n        if (that.options.liveSearch) {\n          that.$searchbox.focus();\n        } else {\n          that.$button.focus();\n        }\n\n        e.preventDefault();\n        e.stopPropagation();\n\n        if ($(this).hasClass('bs-select-all')) {\n          that.selectAll();\n        } else {\n          that.deselectAll();\n        }\n      });\n\n      this.$element.change(function () {\n        that.render(false);\n      });\n    },\n\n    liveSearchListener: function () {\n      var that = this,\n          $no_results = $('<li class=\"no-results\"></li>');\n\n      this.$button.on('click.dropdown.data-api touchstart.dropdown.data-api', function () {\n        that.$menuInner.find('.active').removeClass('active');\n        if (!!that.$searchbox.val()) {\n          that.$searchbox.val('');\n          that.$lis.not('.is-hidden').removeClass('hidden');\n          if (!!$no_results.parent().length) $no_results.remove();\n        }\n        if (!that.multiple) that.$menuInner.find('.selected').addClass('active');\n        setTimeout(function () {\n          that.$searchbox.focus();\n        }, 10);\n      });\n\n      this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {\n        e.stopPropagation();\n      });\n\n      this.$searchbox.on('input propertychange', function () {\n        if (that.$searchbox.val()) {\n          var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');\n          if (that.options.liveSearchNormalize) {\n            $searchBase = $searchBase.not(':a' + that._searchStyle() + '(\"' + normalizeToBase(that.$searchbox.val()) + '\")');\n          } else {\n            $searchBase = $searchBase.not(':' + that._searchStyle() + '(\"' + that.$searchbox.val() + '\")');\n          }\n          $searchBase.parent().addClass('hidden');\n\n          that.$lis.filter('.dropdown-header').each(function () {\n            var $this = $(this),\n                optgroup = $this.data('optgroup');\n\n            if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {\n              $this.addClass('hidden');\n              that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');\n            }\n          });\n\n          var $lisVisible = that.$lis.not('.hidden');\n\n          // hide divider if first or last visible, or if followed by another divider\n          $lisVisible.each(function (index) {\n            var $this = $(this);\n\n            if ($this.hasClass('divider') && (\n              $this.index() === $lisVisible.first().index() ||\n              $this.index() === $lisVisible.last().index() ||\n              $lisVisible.eq(index + 1).hasClass('divider'))) {\n              $this.addClass('hidden');\n            }\n          });\n\n          if (!that.$lis.not('.hidden, .no-results').length) {\n            if (!!$no_results.parent().length) {\n              $no_results.remove();\n            }\n            $no_results.html(that.options.noneResultsText.replace('{0}', '\"' + htmlEscape(that.$searchbox.val()) + '\"')).show();\n            that.$menuInner.append($no_results);\n          } else if (!!$no_results.parent().length) {\n            $no_results.remove();\n          }\n        } else {\n          that.$lis.not('.is-hidden').removeClass('hidden');\n          if (!!$no_results.parent().length) {\n            $no_results.remove();\n          }\n        }\n\n        that.$lis.filter('.active').removeClass('active');\n        if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();\n        $(this).focus();\n      });\n    },\n\n    _searchStyle: function () {\n      var styles = {\n        begins: 'ibegins',\n        startsWith: 'ibegins'\n      };\n\n      return styles[this.options.liveSearchStyle] || 'icontains';\n    },\n\n    val: function (value) {\n      if (typeof value !== 'undefined') {\n        this.$element.val(value);\n        this.render();\n\n        return this.$element;\n      } else {\n        return this.$element.val();\n      }\n    },\n\n    changeAll: function (status) {\n      if (typeof status === 'undefined') status = true;\n\n      this.findLis();\n\n      var $options = this.$element.find('option'),\n          $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').toggleClass('selected', status),\n          lisVisLen = $lisVisible.length,\n          selectedOptions = [];\n\n      for (var i = 0; i < lisVisLen; i++) {\n        var origIndex = $lisVisible[i].getAttribute('data-original-index');\n        selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];\n      }\n\n      $(selectedOptions).prop('selected', status);\n\n      this.render(false);\n\n      this.$element\n        .trigger('changed.bs.select')\n        .triggerNative('change');\n    },\n\n    selectAll: function () {\n      return this.changeAll(true);\n    },\n\n    deselectAll: function () {\n      return this.changeAll(false);\n    },\n\n    toggle: function (e) {\n      e = e || window.event;\n      \n      if (e) e.stopPropagation();\n\n      this.$button.trigger('click');\n    },\n\n    keydown: function (e) {\n      var $this = $(this),\n          $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),\n          $items,\n          that = $parent.data('this'),\n          index,\n          next,\n          first,\n          last,\n          prev,\n          nextPrev,\n          prevIndex,\n          isActive,\n          selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',\n          keyCodeMap = {\n            32: ' ',\n            48: '0',\n            49: '1',\n            50: '2',\n            51: '3',\n            52: '4',\n            53: '5',\n            54: '6',\n            55: '7',\n            56: '8',\n            57: '9',\n            59: ';',\n            65: 'a',\n            66: 'b',\n            67: 'c',\n            68: 'd',\n            69: 'e',\n            70: 'f',\n            71: 'g',\n            72: 'h',\n            73: 'i',\n            74: 'j',\n            75: 'k',\n            76: 'l',\n            77: 'm',\n            78: 'n',\n            79: 'o',\n            80: 'p',\n            81: 'q',\n            82: 'r',\n            83: 's',\n            84: 't',\n            85: 'u',\n            86: 'v',\n            87: 'w',\n            88: 'x',\n            89: 'y',\n            90: 'z',\n            96: '0',\n            97: '1',\n            98: '2',\n            99: '3',\n            100: '4',\n            101: '5',\n            102: '6',\n            103: '7',\n            104: '8',\n            105: '9'\n          };\n\n      if (that.options.liveSearch) $parent = $this.parent().parent();\n\n      if (that.options.container) $parent = that.$menu;\n\n      $items = $('[role=menu] li', $parent);\n\n      isActive = that.$newElement.hasClass('open');\n\n      if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {\n        if (!that.options.container) {\n          that.setSize();\n          that.$menu.parent().addClass('open');\n          isActive = true;\n        } else {\n          that.$button.trigger('click');\n        }\n        that.$searchbox.focus();\n      }\n\n      if (that.options.liveSearch) {\n        if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {\n          e.preventDefault();\n          that.$menu.parent().removeClass('open');\n          if (that.options.container) that.$newElement.removeClass('open');\n          that.$button.focus();\n        }\n        // $items contains li elements when liveSearch is enabled\n        $items = $('[role=menu] li' + selector, $parent);\n        if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {\n          if ($items.filter('.active').length === 0) {\n            $items = that.$menuInner.find('li');\n            if (that.options.liveSearchNormalize) {\n              $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');\n            } else {\n              $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');\n            }\n          }\n        }\n      }\n\n      if (!$items.length) return;\n\n      if (/(38|40)/.test(e.keyCode.toString(10))) {\n        index = $items.index($items.find('a').filter(':focus').parent());\n        first = $items.filter(selector).first().index();\n        last = $items.filter(selector).last().index();\n        next = $items.eq(index).nextAll(selector).eq(0).index();\n        prev = $items.eq(index).prevAll(selector).eq(0).index();\n        nextPrev = $items.eq(next).prevAll(selector).eq(0).index();\n\n        if (that.options.liveSearch) {\n          $items.each(function (i) {\n            if (!$(this).hasClass('disabled')) {\n              $(this).data('index', i);\n            }\n          });\n          index = $items.index($items.filter('.active'));\n          first = $items.first().data('index');\n          last = $items.last().data('index');\n          next = $items.eq(index).nextAll().eq(0).data('index');\n          prev = $items.eq(index).prevAll().eq(0).data('index');\n          nextPrev = $items.eq(next).prevAll().eq(0).data('index');\n        }\n\n        prevIndex = $this.data('prevIndex');\n\n        if (e.keyCode == 38) {\n          if (that.options.liveSearch) index--;\n          if (index != nextPrev && index > prev) index = prev;\n          if (index < first) index = first;\n          if (index == prevIndex) index = last;\n        } else if (e.keyCode == 40) {\n          if (that.options.liveSearch) index++;\n          if (index == -1) index = 0;\n          if (index != nextPrev && index < next) index = next;\n          if (index > last) index = last;\n          if (index == prevIndex) index = first;\n        }\n\n        $this.data('prevIndex', index);\n\n        if (!that.options.liveSearch) {\n          $items.eq(index).children('a').focus();\n        } else {\n          e.preventDefault();\n          if (!$this.hasClass('dropdown-toggle')) {\n            $items.removeClass('active').eq(index).addClass('active').children('a').focus();\n            $this.focus();\n          }\n        }\n\n      } else if (!$this.is('input')) {\n        var keyIndex = [],\n            count,\n            prevKey;\n\n        $items.each(function () {\n          if (!$(this).hasClass('disabled')) {\n            if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {\n              keyIndex.push($(this).index());\n            }\n          }\n        });\n\n        count = $(document).data('keycount');\n        count++;\n        $(document).data('keycount', count);\n\n        prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);\n\n        if (prevKey != keyCodeMap[e.keyCode]) {\n          count = 1;\n          $(document).data('keycount', count);\n        } else if (count >= keyIndex.length) {\n          $(document).data('keycount', 0);\n          if (count > keyIndex.length) count = 1;\n        }\n\n        $items.eq(keyIndex[count - 1]).children('a').focus();\n      }\n\n      // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n      if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {\n        if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();\n        if (!that.options.liveSearch) {\n          var elem = $(':focus');\n          elem.click();\n          // Bring back focus for multiselects\n          elem.focus();\n          // Prevent screen from scrolling if the user hit the spacebar\n          e.preventDefault();\n          // Fixes spacebar selection of dropdown items in FF & IE\n          $(document).data('spaceSelect', true);\n        } else if (!/(32)/.test(e.keyCode.toString(10))) {\n          that.$menuInner.find('.active a').click();\n          $this.focus();\n        }\n        $(document).data('keycount', 0);\n      }\n\n      if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {\n        that.$menu.parent().removeClass('open');\n        if (that.options.container) that.$newElement.removeClass('open');\n        that.$button.focus();\n      }\n    },\n\n    mobile: function () {\n      this.$element.addClass('mobile-device');\n    },\n\n    refresh: function () {\n      this.$lis = null;\n      this.liObj = {};\n      this.reloadLi();\n      this.render();\n      this.checkDisabled();\n      this.liHeight(true);\n      this.setStyle();\n      this.setWidth();\n      if (this.$lis) this.$searchbox.trigger('propertychange');\n\n      this.$element.trigger('refreshed.bs.select');\n    },\n\n    hide: function () {\n      this.$newElement.hide();\n    },\n\n    show: function () {\n      this.$newElement.show();\n    },\n\n    remove: function () {\n      this.$newElement.remove();\n      this.$element.remove();\n    },\n\n    destroy: function () {\n        this.$newElement.before(this.$element).remove();\n\n        if (this.$bsContainer) {\n            this.$bsContainer.remove();\n        } else {\n            this.$menu.remove();\n        }\n\n        this.$element\n          .off('.bs.select')\n          .removeData('selectpicker')\n          .removeClass('bs-select-hidden selectpicker');\n    }\n  };\n\n  // SELECTPICKER PLUGIN DEFINITION\n  // ==============================\n  function Plugin(option, event) {\n    // get the args of the outer function..\n    var args = arguments;\n    // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n    // to get lost/corrupted in android 2.3 and IE9 #715 #775\n    var _option = option,\n        _event = event;\n    [].shift.apply(args);\n\n    var value;\n    var chain = this.each(function () {\n      var $this = $(this);\n      if ($this.is('select')) {\n        var data = $this.data('selectpicker'),\n            options = typeof _option == 'object' && _option;\n\n        if (!data) {\n          var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);\n          config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);\n          $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));\n        } else if (options) {\n          for (var i in options) {\n            if (options.hasOwnProperty(i)) {\n              data.options[i] = options[i];\n            }\n          }\n        }\n\n        if (typeof _option == 'string') {\n          if (data[_option] instanceof Function) {\n            value = data[_option].apply(data, args);\n          } else {\n            value = data.options[_option];\n          }\n        }\n      }\n    });\n\n    if (typeof value !== 'undefined') {\n      //noinspection JSUnusedAssignment\n      return value;\n    } else {\n      return chain;\n    }\n  }\n\n  var old = $.fn.selectpicker;\n  $.fn.selectpicker = Plugin;\n  $.fn.selectpicker.Constructor = Selectpicker;\n\n  // SELECTPICKER NO CONFLICT\n  // ========================\n  $.fn.selectpicker.noConflict = function () {\n    $.fn.selectpicker = old;\n    return this;\n  };\n\n  $(document)\n      .data('keycount', 0)\n      .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"menu\"], .bs-searchbox input', Selectpicker.prototype.keydown)\n      .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"menu\"], .bs-searchbox input', function (e) {\n        e.stopPropagation();\n      });\n\n  // SELECTPICKER DATA-API\n  // =====================\n  $(window).on('load.bs.select.data-api', function () {\n    $('.selectpicker').each(function () {\n      var $selectpicker = $(this);\n      Plugin.call($selectpicker, $selectpicker.data());\n    })\n  });\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-ar_AR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n/*!\n * Translated default messages for bootstrap-select.\n * Locale: AR (Arabic)\n * Author: Yasser Lotfy <y_l@alive.com>\n */\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'لم يتم إختيار شئ',\n    noneResultsText: 'لا توجد نتائج مطابقة لـ {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} خيار تم إختياره\" : \"{0} خيارات تمت إختيارها\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)',\n        (numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)'\n      ];\n    },\n    selectAllText: 'إختيار الجميع',\n    deselectAllText: 'إلغاء إختيار الجميع',\n    multipleSeparator: '، '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-bg_BG.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Нищо избрано',\n    noneResultsText: 'Няма резултат за {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} избран елемент\" : \"{0} избрани елемента\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)',\n        (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)'\n      ];\n    },\n    selectAllText: 'Избери всички',\n    deselectAllText: 'Размаркирай всички',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-cro_CRO.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Odaberite stavku',\n    noneResultsText: 'Nema rezultata pretrage {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} stavka selektirana\" : \"{0} stavke selektirane\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Limit je postignut ({n} stvar maximalno)' : 'Limit je postignut ({n} stavke maksimalno)',\n        (numGroup == 1) ? 'Grupni limit je postignut ({n} stvar maksimalno)' : 'Grupni limit je postignut ({n} stavke maksimalno)'\n      ];\n    },\n    selectAllText: 'Selektiraj sve',\n    deselectAllText: 'Deselektiraj sve',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-cs_CZ.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nic není vybráno',\n    noneResultsText: 'Žádné výsledky {0}',\n    countSelectedText: 'Označeno {0} z {1}',\n    maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-da_DK.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Intet valgt',\n    noneResultsText: 'Ingen resultater fundet {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} valgt\" : \"{0} valgt\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)',\n        (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)'\n      ];\n    },\n    selectAllText: 'Markér alle',\n    deselectAllText: 'Afmarkér alle',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-de_DE.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Bitte wählen...',\n    noneResultsText: 'Keine Ergebnisse für {0}',\n    countSelectedText: '{0} von {1} ausgewählt',\n    maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-en_US.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nothing selected',\n    noneResultsText: 'No results match {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} item selected\" : \"{0} items selected\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',\n        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'\n      ];\n    },\n    selectAllText: 'Select All',\n    deselectAllText: 'Deselect All',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-es_CL.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'No hay selección',\n    noneResultsText: 'No hay resultados {0}',\n    countSelectedText: 'Seleccionados {0} de {1}',\n    maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-eu.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Hautapenik ez',\n    noneResultsText: 'Emaitzarik ez {0}',\n    countSelectedText: '{1}(e)tik {0} hautatuta',\n    maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-fa_IR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n    $.fn.selectpicker.defaults = {\n        noneSelectedText: 'چیزی انتخاب نشده است',\n        noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',\n        countSelectedText: \"{0} از {1} مورد انتخاب شده\",\n        maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],\n        selectAllText: 'انتخاب همه',\n        deselectAllText: 'انتخاب هیچ کدام',\n        multipleSeparator: ', '\n    };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-fi_FI.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Ei valintoja',\n    noneResultsText: 'Ei hakutuloksia {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} valittu\" : \"{0} valitut\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Valintojen maksimimäärä ({n} saavutettu)' : 'Valintojen maksimimäärä ({n} saavutettu)',\n        (numGroup == 1) ? 'Ryhmän maksimimäärä ({n} saavutettu)' : 'Ryhmän maksimimäärä ({n} saavutettu)'\n      ];\n    },\n    selectAllText: 'Valitse kaikki',\n    deselectAllText: 'Poista kaikki',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-fr_FR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Aucune sélection',\n    noneResultsText: 'Aucun résultat pour {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected > 1) ? \"{0} éléments sélectionnés\" : \"{0} élément sélectionné\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)',\n        (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'\n      ];\n    },\n    multipleSeparator: ', ',\n    selectAllText: 'Tout Sélectionner',\n    deselectAllText: 'Tout Dé-selectionner',\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-hu_HU.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Válasszon!',\n    noneResultsText: 'Nincs találat {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return '{0} elem kiválasztva';\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        'Legfeljebb {n} elem választható',\n        'A csoportban legfeljebb {n} elem választható'\n      ];\n    },\n    selectAllText: 'Mind',\n    deselectAllText: 'Egyik sem',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-id_ID.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Tidak ada yang dipilih',\n    noneResultsText: 'Tidak ada yang cocok {0}',\n    countSelectedText: '{0} terpilih',\n    maxOptionsText: ['Mencapai batas (maksimum {n})', 'Mencapai batas grup (maksimum {n})'],\n    selectAllText: 'Pilih Semua',\n    deselectAllText: 'Hapus Semua',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-it_IT.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nessuna selezione',\n    noneResultsText: 'Nessun risultato per {0}',\n    countSelectedText: 'Selezionati {0} di {1}',\n    maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-ko_KR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: '항목을 선택해주세요',\n    noneResultsText: '{0} 검색 결과가 없습니다',\n    countSelectedText: function (numSelected, numTotal) {\n      return \"{0}개를 선택하였습니다\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        '{n}개까지 선택 가능합니다',\n        '해당 그룹은 {n}개까지 선택 가능합니다'\n      ];\n    },\n    selectAllText: '전체선택',\n    deselectAllText: '전체해제',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-lt_LT.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Niekas nepasirinkta',\n    noneResultsText: 'Niekas nesutapo su {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} elementas pasirinktas\" : \"{0} elementai(-ų) pasirinkta\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Pasiekta riba ({n} elementas daugiausiai)' : 'Riba pasiekta ({n} elementai(-ų) daugiausiai)',\n        (numGroup == 1) ? 'Grupės riba pasiekta ({n} elementas daugiausiai)' : 'Grupės riba pasiekta ({n} elementai(-ų) daugiausiai)'\n      ];\n    },\n    selectAllText: 'Pasirinkti visus',\n    deselectAllText: 'Atmesti visus',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-nb_NO.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n/*!\n * Bootstrap-select v1.8.1 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2015 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Ingen valgt',\n    noneResultsText: 'Søket gir ingen treff {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} alternativ valgt\" : \"{0} alternativer valgt\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Grense nådd (maks {n} valg)' : 'Grense nådd (maks {n} valg)',\n        (numGroup == 1) ? 'Grense for grupper nådd (maks {n} grupper)' : 'Grense for grupper nådd (maks {n} grupper)'\n      ];\n    },\n    selectAllText: 'Merk alle',\n    deselectAllText: 'Fjern alle',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-nl_NL.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Niets geselecteerd',\n    noneResultsText: 'Geen resultaten gevonden voor {0}',\n    countSelectedText: '{0} van {1} geselecteerd',\n    maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-pl_PL.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nic nie zaznaczono',\n    noneResultsText: 'Brak wyników wyszukiwania {0}',\n    countSelectedText: 'Zaznaczono {0} z {1}',\n    maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']],\n    selectAll: 'Zaznacz wszystkie',\n    deselectAll: 'Odznacz wszystkie',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-pt_BR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nada selecionado',\n    noneResultsText: 'Nada encontrado contendo {0}',\n    countSelectedText: 'Selecionado {0} de {1}',\n    maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-pt_PT.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n$.fn.selectpicker.defaults = {\nnoneSelectedText: 'Nenhum seleccionado',\nnoneResultsText: 'Sem resultados contendo {0}',\ncountSelectedText: 'Selecionado {0} de {1}',\nmaxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']],\nmultipleSeparator: ', '\n};\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-ro_RO.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nu a fost selectat nimic',\n    noneResultsText: 'Nu exista niciun rezultat {0}',\n    countSelectedText: '{0} din {1} selectat(e)',\n    maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-ru_RU.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Ничего не выбрано',\n    noneResultsText: 'Совпадений не найдено {0}',\n    countSelectedText: 'Выбрано {0} из {1}',\n    maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']],\n    doneButtonText: 'Закрыть',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-sk_SK.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Vyberte zo zoznamu',\n    noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky',\n    countSelectedText: 'Vybrané {0} z {1}',\n    maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']],\n    selectAllText: 'Vybrať všetky',\n    deselectAllText: 'Zrušiť výber',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-sl_SI.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Nič izbranega',\n    noneResultsText: 'Ni zadetkov za {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      \"Število izbranih: {0}\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        'Omejitev dosežena (max. izbranih: {n})',\n        'Omejitev skupine dosežena (max. izbranih: {n})'\n      ];\n    },\n    selectAllText: 'Izberi vse',\n    deselectAllText: 'Počisti izbor',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-sv_SE.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Inget valt',\n    noneResultsText: 'Inget sökresultat matchar {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected === 1) ? \"{0} alternativ valt\" : \"{0} alternativ valda\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        'Gräns uppnåd (max {n} alternativ)',\n        'Gräns uppnåd (max {n} gruppalternativ)'\n      ];\n    },\n    selectAllText: 'Markera alla',\n    deselectAllText: 'Avmarkera alla',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-tr_TR.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Hiçbiri seçilmedi',\n    noneResultsText: 'Hiçbir sonuç bulunamadı {0}',\n    countSelectedText: function (numSelected, numTotal) {\n      return (numSelected == 1) ? \"{0} öğe seçildi\" : \"{0} öğe seçildi\";\n    },\n    maxOptionsText: function (numAll, numGroup) {\n      return [\n        (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)',\n        (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)'\n      ];\n    },\n    selectAllText: 'Tümünü Seç',\n    deselectAllText: 'Seçiniz',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-ua_UA.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: 'Нічого не вибрано',\n    noneResultsText: 'Збігів не знайдено {0}',\n    countSelectedText: 'Вибрано {0} із {1}',\n    maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-zh_CN.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: '没有选中任何项',\n    noneResultsText: '没有找到匹配项',\n    countSelectedText: '选中{1}中的{0}项',\n    maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-select/js/i18n/defaults-zh_TW.js",
    "content": "/*!\n * Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)\n *\n * Copyright 2013-2016 bootstrap-select\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n */\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n(function ($) {\n  $.fn.selectpicker.defaults = {\n    noneSelectedText: '沒有選取任何項目',\n    noneResultsText: '沒有找到符合的結果',\n    countSelectedText: '已經選取{0}個項目',\n    maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],\n    selectAllText: '選取全部',\n    deselectAllText: '全部取消',\n    multipleSeparator: ', '\n  };\n})(jQuery);\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-sweetalert/sweet-alert.css",
    "content": "@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n    -webkit-tranform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n}\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n    -webkit-tranform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n}\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5);\n  }\n}\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5);\n  }\n}\n.showSweetAlert {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s;\n}\n.hideSweetAlert {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s;\n}\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px;\n  }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px;\n  }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px;\n  }\n}\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px;\n  }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px;\n  }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px;\n  }\n}\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px;\n  }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px;\n  }\n}\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px;\n  }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px;\n  }\n}\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n}\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n}\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s;\n}\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s;\n}\n.icon.success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in;\n}\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s;\n}\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px;\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px;\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s;\n}\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486;\n  }\n  100% {\n    border-color: #F8BB86;\n  }\n}\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486;\n  }\n  100% {\n    border-color: #F8BB86;\n  }\n}\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate;\n}\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486;\n  }\n  100% {\n    background-color: #F8BB86;\n  }\n}\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486;\n  }\n  100% {\n    background-color: #F8BB86;\n  }\n}\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate;\n}\n.sweet-overlay {\n  background-color: rgba(0, 0, 0, 0.4);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  z-index: 1040;\n}\n.sweet-alert {\n  background-color: #ffffff;\n  width: 478px;\n  padding: 17px;\n  border-radius: 5px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -256px;\n  margin-top: -200px;\n  overflow: hidden;\n  display: none;\n  z-index: 2000;\n}\n@media all and (max-width: 767px) {\n  .sweet-alert {\n    width: auto;\n    margin-left: 0;\n    margin-right: 0;\n    left: 15px;\n    right: 15px;\n  }\n}\n.sweet-alert .icon {\n  width: 80px;\n  height: 80px;\n  border: 4px solid gray;\n  border-radius: 50%;\n  margin: 20px auto;\n  position: relative;\n  box-sizing: content-box;\n}\n.sweet-alert .icon.error {\n  border-color: #d43f3a;\n}\n.sweet-alert .icon.error .x-mark {\n  position: relative;\n  display: block;\n}\n.sweet-alert .icon.error .line {\n  position: absolute;\n  height: 5px;\n  width: 47px;\n  background-color: #d9534f;\n  display: block;\n  top: 37px;\n  border-radius: 2px;\n}\n.sweet-alert .icon.error .line.left {\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  left: 17px;\n}\n.sweet-alert .icon.error .line.right {\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n  right: 16px;\n}\n.sweet-alert .icon.warning {\n  border-color: #eea236;\n}\n.sweet-alert .icon.warning .body {\n  position: absolute;\n  width: 5px;\n  height: 47px;\n  left: 50%;\n  top: 10px;\n  border-radius: 2px;\n  margin-left: -2px;\n  background-color: #f0ad4e;\n}\n.sweet-alert .icon.warning .dot {\n  position: absolute;\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  margin-left: -3px;\n  left: 50%;\n  bottom: 10px;\n  background-color: #f0ad4e;\n}\n.sweet-alert .icon.info {\n  border-color: #46b8da;\n}\n.sweet-alert .icon.info::before {\n  content: \"\";\n  position: absolute;\n  width: 5px;\n  height: 29px;\n  left: 50%;\n  bottom: 17px;\n  border-radius: 2px;\n  margin-left: -2px;\n  background-color: #5bc0de;\n}\n.sweet-alert .icon.info::after {\n  content: \"\";\n  position: absolute;\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  margin-left: -3px;\n  top: 19px;\n  background-color: #5bc0de;\n}\n.sweet-alert .icon.success {\n  border-color: #4cae4c;\n}\n.sweet-alert .icon.success::before,\n.sweet-alert .icon.success::after {\n  content: '';\n  border-radius: 50%;\n  position: absolute;\n  width: 60px;\n  height: 120px;\n  background: white;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.sweet-alert .icon.success::before {\n  border-radius: 120px 0 0 120px;\n  top: -7px;\n  left: -33px;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n  -webkit-transform-origin: 60px 60px;\n  transform-origin: 60px 60px;\n}\n.sweet-alert .icon.success::after {\n  border-radius: 0 120px 120px 0;\n  top: -11px;\n  left: 30px;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n  -webkit-transform-origin: 0px 60px;\n  transform-origin: 0px 60px;\n}\n.sweet-alert .icon.success .placeholder {\n  width: 80px;\n  height: 80px;\n  border: 4px solid rgba(92, 184, 92, 0.2);\n  border-radius: 50%;\n  box-sizing: content-box;\n  position: absolute;\n  left: -4px;\n  top: -4px;\n  z-index: 2;\n}\n.sweet-alert .icon.success .fix {\n  width: 5px;\n  height: 90px;\n  background-color: #ffffff;\n  position: absolute;\n  left: 28px;\n  top: 8px;\n  z-index: 1;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n.sweet-alert .icon.success .line {\n  height: 5px;\n  background-color: #5cb85c;\n  display: block;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 2;\n}\n.sweet-alert .icon.success .line.tip {\n  width: 25px;\n  left: 14px;\n  top: 46px;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.sweet-alert .icon.success .line.long {\n  width: 47px;\n  right: 8px;\n  top: 38px;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n.sweet-alert .icon.custom {\n  background-size: contain;\n  border-radius: 0;\n  border: none;\n  background-position: center center;\n  background-repeat: no-repeat;\n}\n.sweet-alert .btn-default:focus {\n  border-color: #cccccc;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(204, 204, 204, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(204, 204, 204, 0.6);\n}\n.sweet-alert .btn-success:focus {\n  border-color: #4cae4c;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(76, 174, 76, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(76, 174, 76, 0.6);\n}\n.sweet-alert .btn-info:focus {\n  border-color: #46b8da;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 184, 218, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 184, 218, 0.6);\n}\n.sweet-alert .btn-danger:focus {\n  border-color: #d43f3a;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(212, 63, 58, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(212, 63, 58, 0.6);\n}\n.sweet-alert .btn-warning:focus {\n  border-color: #eea236;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(238, 162, 54, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(238, 162, 54, 0.6);\n}\n.sweet-alert button::-moz-focus-inner {\n  border: 0;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-sweetalert/sweet-alert.js",
    "content": "// SweetAlert\n// 2014 (c) - Tristan Edwards\n// github.com/t4t5/sweetalert\n(function(window, document) {\n\n  var modalClass   = '.sweet-alert',\n      overlayClass = '.sweet-overlay',\n      alertTypes   = ['error', 'warning', 'info', 'success'],\n      defaultParams = {\n        title: '',\n        text: '',\n        type: null,\n        allowOutsideClick: false,\n        showCancelButton: false,\n        showConfirmButton: true,\n        closeOnConfirm: true,\n        closeOnCancel: true,\n        confirmButtonText: 'OK',\n        confirmButtonClass: 'btn-primary',\n        cancelButtonText: 'Cancel',\n        cancelButtonClass: 'btn-default',\n        containerClass: '',\n        titleClass: '',\n        textClass: '',\n        imageUrl: null,\n        imageSize: null,\n        timer: null\n      };\n\n\n  /*\n   * Manipulate DOM\n   */\n\n  var getModal = function() {\n      return document.querySelector(modalClass);\n    },\n    getOverlay = function() {\n      return document.querySelector(overlayClass);\n    },\n    hasClass = function(elem, className) {\n      return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');\n    },\n    addClass = function(elem, className) {\n      if (className && !hasClass(elem, className)) {\n        elem.className += ' ' + className;\n      }\n    },\n    removeClass = function(elem, className) {\n      var newClass = ' ' + elem.className.replace(/[\\t\\r\\n]/g, ' ') + ' ';\n      if (hasClass(elem, className)) {\n        while (newClass.indexOf(' ' + className + ' ') >= 0) {\n          newClass = newClass.replace(' ' + className + ' ', ' ');\n        }\n        elem.className = newClass.replace(/^\\s+|\\s+$/g, '');\n      }\n    },\n    escapeHtml = function(str) {\n      var div = document.createElement('div');\n      div.appendChild(document.createTextNode(str));\n      return div.innerHTML;\n    },\n    _show = function(elem) {\n      elem.style.opacity = '';\n      elem.style.display = 'block';\n    },\n    show = function(elems) {\n      if (elems && !elems.length) {\n        return _show(elems);\n      }\n      for (var i = 0; i < elems.length; ++i) {\n        _show(elems[i]);\n      }\n    },\n    _hide = function(elem) {\n      elem.style.opacity = '';\n      elem.style.display = 'none';\n    },\n    hide = function(elems) {\n      if (elems && !elems.length) {\n        return _hide(elems);\n      }\n      for (var i = 0; i < elems.length; ++i) {\n        _hide(elems[i]);\n      }\n    },\n    isDescendant = function(parent, child) {\n      var node = child.parentNode;\n      while (node !== null) {\n        if (node === parent) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n    getTopMargin = function(elem) {\n      elem.style.left = '-9999px';\n      elem.style.display = 'block';\n\n      var height = elem.clientHeight;\n      var padding = parseInt(getComputedStyle(elem).getPropertyValue('padding'), 10);\n\n      elem.style.left = '';\n      elem.style.display = 'none';\n      return ('-' + parseInt(height / 2 + padding) + 'px');\n    },\n    fadeIn = function(elem, interval) {\n      if(+elem.style.opacity < 1) {\n        interval = interval || 16;\n        elem.style.opacity = 0;\n        elem.style.display = 'block';\n        var last = +new Date();\n        var tick = function() {\n          elem.style.opacity = +elem.style.opacity + (new Date() - last) / 100;\n          last = +new Date();\n\n          if (+elem.style.opacity < 1) {\n            setTimeout(tick, interval);\n          }\n        };\n        tick();\n      }\n    },\n    fadeOut = function(elem, interval) {\n      interval = interval || 16;\n      elem.style.opacity = 1;\n      var last = +new Date();\n      var tick = function() {\n        elem.style.opacity = +elem.style.opacity - (new Date() - last) / 100;\n        last = +new Date();\n\n        if (+elem.style.opacity > 0) {\n          setTimeout(tick, interval);\n        } else {\n          elem.style.display = 'none';\n        }\n      };\n      tick();\n    },\n    fireClick = function(node) {\n      // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/\n      // Then fixed for today's Chrome browser.\n      if (MouseEvent) {\n        // Up-to-date approach\n        var mevt = new MouseEvent('click', {\n          view: window,\n          bubbles: false,\n          cancelable: true\n        });\n        node.dispatchEvent(mevt);\n      } else if ( document.createEvent ) {\n        // Fallback\n        var evt = document.createEvent('MouseEvents');\n        evt.initEvent('click', false, false);\n        node.dispatchEvent(evt);\n      } else if( document.createEventObject ) {\n        node.fireEvent('onclick') ;\n      } else if (typeof node.onclick === 'function' ) {\n        node.onclick();\n      }\n    },\n    stopEventPropagation = function(e) {\n      // In particular, make sure the space bar doesn't scroll the main window.\n      if (typeof e.stopPropagation === 'function') {\n        e.stopPropagation();\n        e.preventDefault();\n      } else if (window.event && window.event.hasOwnProperty('cancelBubble')) {\n        window.event.cancelBubble = true;\n      }\n    };\n\n  // Remember state in cases where opening and handling a modal will fiddle with it.\n  var previousActiveElement,\n      previousDocumentClick,\n      previousWindowKeyDown,\n      lastFocusedButton;\n\n  /*\n   * Add modal + overlay to DOM\n   */\n\n  window.sweetAlertInitialize = function() {\n    var sweetHTML = '<div class=\"sweet-overlay\" tabIndex=\"-1\"></div><div class=\"sweet-alert\" tabIndex=\"-1\"><div class=\"icon error\"><span class=\"x-mark\"><span class=\"line left\"></span><span class=\"line right\"></span></span></div><div class=\"icon warning\"> <span class=\"body\"></span> <span class=\"dot\"></span> </div> <div class=\"icon info\"></div> <div class=\"icon success\"> <span class=\"line tip\"></span> <span class=\"line long\"></span> <div class=\"placeholder\"></div> <div class=\"fix\"></div> </div> <div class=\"icon custom\"></div> <h2>Title</h2><p class=\"lead text-muted\">Text</p><p><button class=\"cancel btn btn-lg\" tabIndex=\"2\">Cancel</button> <button class=\"confirm btn btn-lg\" tabIndex=\"1\">OK</button></p></div>',\n        sweetWrap = document.createElement('div');\n\n    sweetWrap.innerHTML = sweetHTML;\n\n    // For readability: check sweet-alert.html\n    document.body.appendChild(sweetWrap);\n\n    // For development use only!\n    /*jQuery.ajax({\n      url: '../lib/sweet-alert.html', // Change path depending on file location\n      dataType: 'html'\n    })\n    .done(function(html) {\n      jQuery('body').append(html);\n    });*/\n  }\n\n  /*\n   * Global sweetAlert function\n   */\n\n  window.sweetAlert = window.swal = function() {\n    if (arguments[0] === undefined) {\n      window.console.error('sweetAlert expects at least 1 attribute!');\n      return false;\n    }\n\n    var params = extend({}, defaultParams);\n\n    switch (typeof arguments[0]) {\n\n      case 'string':\n        params.title              = arguments[0];\n        params.text               = arguments[1] || '';\n        params.type               = arguments[2] || '';\n        params.confirmButtonClass = params.type ? 'btn-' + params.type : defaultParams.confirmButtonClass;\n\n        break;\n\n      case 'object':\n        if (arguments[0].title === undefined) {\n          window.console.error('Missing \"title\" argument!');\n          return false;\n        }\n\n        params.title              = arguments[0].title;\n        params.text               = arguments[0].text || defaultParams.text;\n        params.type               = arguments[0].type || defaultParams.type;\n        params.allowOutsideClick  = arguments[0].allowOutsideClick || defaultParams.allowOutsideClick;\n        params.showCancelButton   = arguments[0].showCancelButton !== undefined ? arguments[0].showCancelButton : defaultParams.showCancelButton;\n        params.showConfirmButton  = arguments[0].showConfirmButton !== undefined ? arguments[0].showConfirmButton : defaultParams.showConfirmButton;\n        params.closeOnConfirm     = arguments[0].closeOnConfirm !== undefined ? arguments[0].closeOnConfirm : defaultParams.closeOnConfirm;\n        params.closeOnCancel      = arguments[0].closeOnCancel !== undefined ? arguments[0].closeOnCancel : defaultParams.closeOnCancel;\n        params.timer              = arguments[0].timer || defaultParams.timer;\n\n        // Show \"Confirm\" instead of \"OK\" if cancel button is visible\n        params.confirmButtonText  = (defaultParams.showCancelButton) ? 'Confirm' : defaultParams.confirmButtonText;\n        params.confirmButtonText  = arguments[0].confirmButtonText || defaultParams.confirmButtonText;\n        params.confirmButtonClass = arguments[0].confirmButtonClass || (arguments[0].type ? 'btn-' + arguments[0].type : null) || defaultParams.confirmButtonClass;\n        params.cancelButtonText   = arguments[0].cancelButtonText || defaultParams.cancelButtonText;\n        params.cancelButtonClass  = arguments[0].cancelButtonClass || defaultParams.cancelButtonClass;\n        params.containerClass     = arguments[0].containerClass || defaultParams.containerClass;\n        params.titleClass         = arguments[0].titleClass || defaultParams.titleClass;\n        params.textClass          = arguments[0].textClass || defaultParams.textClass;\n        params.imageUrl           = arguments[0].imageUrl || defaultParams.imageUrl;\n        params.imageSize          = arguments[0].imageSize || defaultParams.imageSize;\n        params.doneFunction       = arguments[1] || null;\n\n        break;\n\n      default:\n        window.console.error('Unexpected type of argument! Expected \"string\" or \"object\", got ' + typeof arguments[0]);\n        return false;\n\n    }\n\n    setParameters(params);\n    fixVerticalPosition();\n    openModal();\n\n\n    // Modal interactions\n    var modal = getModal();\n\n    // Mouse interactions\n    var onButtonEvent = function(e) {\n\n      var target = e.target || e.srcElement,\n          targetedConfirm    = (target.className.indexOf('confirm') > -1),\n          modalIsVisible     = hasClass(modal, 'visible'),\n          doneFunctionExists = (params.doneFunction && modal.getAttribute('data-has-done-function') === 'true');\n\n      switch (e.type) {\n        case (\"click\"):\n          if (targetedConfirm && doneFunctionExists && modalIsVisible) { // Clicked \"confirm\"\n\n            params.doneFunction(true);\n\n            if (params.closeOnConfirm) {\n              closeModal();\n            }\n          } else if (doneFunctionExists && modalIsVisible) { // Clicked \"cancel\"\n\n            // Check if callback function expects a parameter (to track cancel actions)\n            var functionAsStr          = String(params.doneFunction).replace(/\\s/g, '');\n            var functionHandlesCancel  = functionAsStr.substring(0, 9) === \"function(\" && functionAsStr.substring(9, 10) !== \")\";\n\n            if (functionHandlesCancel) {\n              params.doneFunction(false);\n            }\n\n            if (params.closeOnCancel) {\n              closeModal();\n            }\n          } else {\n            closeModal();\n          }\n\n          break;\n      }\n    };\n\n    var $buttons = modal.querySelectorAll('button');\n    for (var i = 0; i < $buttons.length; i++) {\n      $buttons[i].onclick     = onButtonEvent;\n    }\n\n    // Remember the current document.onclick event.\n    previousDocumentClick = document.onclick;\n    document.onclick = function(e) {\n      var target = e.target || e.srcElement;\n\n      var clickedOnModal = (modal === target),\n          clickedOnModalChild = isDescendant(modal, e.target),\n          modalIsVisible = hasClass(modal, 'visible'),\n          outsideClickIsAllowed = modal.getAttribute('data-allow-ouside-click') === 'true';\n\n      if (!clickedOnModal && !clickedOnModalChild && modalIsVisible && outsideClickIsAllowed) {\n        closeModal();\n      }\n    };\n\n\n    // Keyboard interactions\n    var $okButton = modal.querySelector('button.confirm'),\n        $cancelButton = modal.querySelector('button.cancel'),\n        $modalButtons = modal.querySelectorAll('button:not([type=hidden])');\n\n\n    function handleKeyDown(e) {\n      var keyCode = e.keyCode || e.which;\n\n      if ([9,13,32,27].indexOf(keyCode) === -1) {\n        // Don't do work on keys we don't care about.\n        return;\n      }\n\n      var $targetElement = e.target || e.srcElement;\n\n      var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.\n      for (var i = 0; i < $modalButtons.length; i++) {\n        if ($targetElement === $modalButtons[i]) {\n          btnIndex = i;\n          break;\n        }\n      }\n\n      if (keyCode === 9) {\n        // TAB\n        if (btnIndex === -1) {\n          // No button focused. Jump to the confirm button.\n          $targetElement = $okButton;\n        } else {\n          // Cycle to the next button\n          if (btnIndex === $modalButtons.length - 1) {\n            $targetElement = $modalButtons[0];\n          } else {\n            $targetElement = $modalButtons[btnIndex + 1];\n          }\n        }\n\n        stopEventPropagation(e);\n        $targetElement.focus();\n\n      } else {\n        if (keyCode === 13 || keyCode === 32) {\n            if (btnIndex === -1) {\n              // ENTER/SPACE clicked outside of a button.\n              $targetElement = $okButton;\n            } else {\n              // Do nothing - let the browser handle it.\n              $targetElement = undefined;\n            }\n        } else if (keyCode === 27 && !($cancelButton.hidden || $cancelButton.style.display === 'none')) {\n          // ESC to cancel only if there's a cancel button displayed (like the alert() window).\n          $targetElement = $cancelButton;\n        } else {\n          // Fallback - let the browser handle it.\n          $targetElement = undefined;\n        }\n\n        if ($targetElement !== undefined) {\n          fireClick($targetElement, e);\n        }\n      }\n    }\n\n    previousWindowKeyDown = window.onkeydown;\n    window.onkeydown = handleKeyDown;\n\n    function handleOnBlur(e) {\n      var $targetElement = e.target || e.srcElement,\n          $focusElement = e.relatedTarget,\n          modalIsVisible = hasClass(modal, 'visible');\n\n      if (modalIsVisible) {\n        var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.\n\n        if ($focusElement !== null) {\n          // If we picked something in the DOM to focus to, let's see if it was a button.\n          for (var i = 0; i < $modalButtons.length; i++) {\n            if ($focusElement === $modalButtons[i]) {\n              btnIndex = i;\n              break;\n            }\n          }\n\n          if (btnIndex === -1) {\n            // Something in the dom, but not a visible button. Focus back on the button.\n            $targetElement.focus();\n          }\n        } else {\n          // Exiting the DOM (e.g. clicked in the URL bar);\n          lastFocusedButton = $targetElement;\n        }\n      }\n    }\n\n    $okButton.onblur = handleOnBlur;\n    $cancelButton.onblur = handleOnBlur;\n\n    window.onfocus = function() {\n      // When the user has focused away and focused back from the whole window.\n      window.setTimeout(function() {\n        // Put in a timeout to jump out of the event sequence. Calling focus() in the event\n        // sequence confuses things.\n        if (lastFocusedButton !== undefined) {\n          lastFocusedButton.focus();\n          lastFocusedButton = undefined;\n        }\n      }, 0);\n    };\n  };\n\n  /**\n   * Set default params for each popup\n   * @param {Object} userParams\n   */\n  window.swal.setDefaults = function(userParams) {\n    if (!userParams) {\n      throw new Error('userParams is required');\n    }\n    if (typeof userParams !== 'object') {\n      throw new Error('userParams has to be a object');\n    }\n\n    extend(defaultParams, userParams);\n  };\n\n  /**\n   * Closes the current modal\n   */\n  window.swal.close = function() {\n    closeModal();\n  }\n\n  /*\n   * Set type, text and actions on modal\n   */\n\n  function setParameters(params) {\n    var modal = getModal();\n\n    var $title = modal.querySelector('h2'),\n        $text = modal.querySelector('p'),\n        $cancelBtn = modal.querySelector('button.cancel'),\n        $confirmBtn = modal.querySelector('button.confirm');\n\n    // Title\n    $title.innerHTML = escapeHtml(params.title).split(\"\\n\").join(\"<br>\");\n\n    // Text\n    $text.innerHTML = escapeHtml(params.text || '').split(\"\\n\").join(\"<br>\");\n    if (params.text) {\n      show($text);\n    }\n\n    // Icon\n    hide(modal.querySelectorAll('.icon'));\n    if (params.type) {\n      var validType = false;\n      for (var i = 0; i < alertTypes.length; i++) {\n        if (params.type === alertTypes[i]) {\n          validType = true;\n          break;\n        }\n      }\n      if (!validType) {\n        window.console.error('Unknown alert type: ' + params.type);\n        return false;\n      }\n      var $icon = modal.querySelector('.icon.' + params.type);\n      show($icon);\n\n      // Animate icon\n      switch (params.type) {\n        case \"success\":\n          addClass($icon, 'animate');\n          addClass($icon.querySelector('.tip'), 'animateSuccessTip');\n          addClass($icon.querySelector('.long'), 'animateSuccessLong');\n          break;\n        case \"error\":\n          addClass($icon, 'animateErrorIcon');\n          addClass($icon.querySelector('.x-mark'), 'animateXMark');\n          break;\n        case \"warning\":\n          addClass($icon, 'pulseWarning');\n          addClass($icon.querySelector('.body'), 'pulseWarningIns');\n          addClass($icon.querySelector('.dot'), 'pulseWarningIns');\n          break;\n      }\n\n    }\n\n    // Custom image\n    if (params.imageUrl) {\n      var $customIcon = modal.querySelector('.icon.custom');\n\n      $customIcon.style.backgroundImage = 'url(' + params.imageUrl + ')';\n      show($customIcon);\n\n      var _imgWidth  = 80,\n          _imgHeight = 80;\n\n      if (params.imageSize) {\n        var imgWidth  = params.imageSize.split('x')[0];\n        var imgHeight = params.imageSize.split('x')[1];\n\n        if (!imgWidth || !imgHeight) {\n          window.console.error(\"Parameter imageSize expects value with format WIDTHxHEIGHT, got \" + params.imageSize);\n        } else {\n          _imgWidth  = imgWidth;\n          _imgHeight = imgHeight;\n\n          $customIcon.css({\n            'width': imgWidth + 'px',\n            'height': imgHeight + 'px'\n          });\n        }\n      }\n      $customIcon.setAttribute('style', $customIcon.getAttribute('style') + 'width:' + _imgWidth + 'px; height:' + _imgHeight + 'px');\n    }\n\n    // Cancel button\n    modal.setAttribute('data-has-cancel-button', params.showCancelButton);\n    if (params.showCancelButton) {\n      $cancelBtn.style.display = 'inline-block';\n    } else {\n      hide($cancelBtn);\n    }\n    \n    //Confirm button\n    modal.setAttribute('data-has-confirm-button', params.showConfirmButton);\n    if (params.showConfirmButton) {\n      $confirmBtn.style.display = 'inline-block';\n    } else {\n      hide($confirmBtn);\n    }\n    \n\n    // Edit text on cancel and confirm buttons\n    if (params.cancelButtonText) {\n      $cancelBtn.innerHTML = escapeHtml(params.cancelButtonText);\n    }\n    if (params.confirmButtonText) {\n      $confirmBtn.innerHTML = escapeHtml(params.confirmButtonText);\n    }\n\n    // Reset confirm buttons to default class (Ugly fix)\n    $confirmBtn.className = 'confirm btn btn-lg';\n\n    // Attach selected class to the sweet alert modal\n    addClass(modal, params.containerClass);\n\n    // Set confirm button to selected class\n    addClass($confirmBtn, params.confirmButtonClass);\n\n    // Set cancel button to selected class\n    addClass($cancelBtn, params.cancelButtonClass);\n\n    // Set title to selected class\n    addClass($title, params.titleClass);\n\n    // Set text to selected class\n    addClass($text, params.textClass);\n\n    // Allow outside click?\n    modal.setAttribute('data-allow-ouside-click', params.allowOutsideClick);\n\n    // Done-function\n    var hasDoneFunction = (params.doneFunction) ? true : false;\n    modal.setAttribute('data-has-done-function', hasDoneFunction);\n\n    // Close timer\n    modal.setAttribute('data-timer', params.timer);\n  }\n\n\n  /*\n   * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)\n   */\n\n  function colorLuminance(hex, lum) {\n    // Validate hex string\n    hex = String(hex).replace(/[^0-9a-f]/gi, '');\n    if (hex.length < 6) {\n      hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n    }\n    lum = lum || 0;\n\n    // Convert to decimal and change luminosity\n    var rgb = \"#\", c, i;\n    for (i = 0; i < 3; i++) {\n      c = parseInt(hex.substr(i*2,2), 16);\n      c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n      rgb += (\"00\"+c).substr(c.length);\n    }\n\n    return rgb;\n  }\n\n  function extend(a, b){\n    for (var key in b) {\n      if (b.hasOwnProperty(key)) {\n        a[key] = b[key];\n      }\n    }\n\n    return a;\n  }\n\n  function hexToRgb(hex) {\n    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? parseInt(result[1], 16) + ', ' + parseInt(result[2], 16) + ', ' + parseInt(result[3], 16) : null;\n  }\n\n  // Add box-shadow style to button (depending on its chosen bg-color)\n  function setFocusStyle($button, bgColor) {\n    var rgbColor = hexToRgb(bgColor);\n    $button.style.boxShadow = '0 0 2px rgba(' + rgbColor +', 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)';\n  }\n\n\n  /*\n   * Animations\n   */\n\n  function openModal() {\n    var modal = getModal();\n    fadeIn(getOverlay(), 10);\n    show(modal);\n    addClass(modal, 'showSweetAlert');\n    removeClass(modal, 'hideSweetAlert');\n\n    previousActiveElement = document.activeElement;\n    var $okButton = modal.querySelector('button.confirm');\n    $okButton.focus();\n\n    setTimeout(function() {\n      addClass(modal, 'visible');\n    }, 500);\n\n    var timer = modal.getAttribute('data-timer');\n    if (timer !== \"null\" && timer !== \"\") {\n      setTimeout(function() {\n        closeModal();\n      }, timer);\n    }\n  }\n\n  function closeModal() {\n    var modal = getModal();\n    fadeOut(getOverlay(), 5);\n    fadeOut(modal, 5);\n    removeClass(modal, 'showSweetAlert');\n    addClass(modal, 'hideSweetAlert');\n    removeClass(modal, 'visible');\n\n\n    // Reset icon animations\n\n    var $successIcon = modal.querySelector('.icon.success');\n    removeClass($successIcon, 'animate');\n    removeClass($successIcon.querySelector('.tip'), 'animateSuccessTip');\n    removeClass($successIcon.querySelector('.long'), 'animateSuccessLong');\n\n    var $errorIcon = modal.querySelector('.icon.error');\n    removeClass($errorIcon, 'animateErrorIcon');\n    removeClass($errorIcon.querySelector('.x-mark'), 'animateXMark');\n\n    var $warningIcon = modal.querySelector('.icon.warning');\n    removeClass($warningIcon, 'pulseWarning');\n    removeClass($warningIcon.querySelector('.body'), 'pulseWarningIns');\n    removeClass($warningIcon.querySelector('.dot'), 'pulseWarningIns');\n\n\n    // Reset the page to its previous state\n    window.onkeydown = previousWindowKeyDown;\n    document.onclick = previousDocumentClick;\n    if (previousActiveElement) {\n      previousActiveElement.focus();\n    }\n    lastFocusedButton = undefined;\n  }\n\n\n  /*\n   * Set \"margin-top\"-property on modal based on its computed height\n   */\n\n  function fixVerticalPosition() {\n    var modal = getModal();\n    modal.style.marginTop = getTopMargin(getModal());\n  }\n\n\n  /*\n   * If library is injected after page has loaded\n   */\n\n  (function () {\n    if (document.readyState === \"complete\" || document.readyState === \"interactive\" && document.body) {\n      sweetAlertInitialize();\n    } else {\n      if (document.addEventListener) {\n        document.addEventListener('DOMContentLoaded', function handler() {\n          document.removeEventListener('DOMContentLoaded', handler, false);\n          sweetAlertInitialize();\n        }, false);\n      } else if (document.attachEvent) {\n        document.attachEvent('onreadystatechange', function handler() {\n          if (document.readyState === 'complete') {\n            document.detachEvent('onreadystatechange', handler);\n            sweetAlertInitialize();\n          }\n        });\n      }\n    }\n  })();\n\n})(window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-table/css/bootstrap-table.css",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.11.1\n * https://github.com/wenzhixin/bootstrap-table/\n */\n\n.bootstrap-table .table {\n    margin-bottom: 0 !important;\n    border-bottom: 1px solid #dddddd;\n    border-collapse: collapse !important;\n    border-radius: 1px;\n}\n\n.bootstrap-table .table:not(.table-condensed),\n.bootstrap-table .table:not(.table-condensed) > tbody > tr > th,\n.bootstrap-table .table:not(.table-condensed) > tfoot > tr > th,\n.bootstrap-table .table:not(.table-condensed) > thead > tr > td,\n.bootstrap-table .table:not(.table-condensed) > tbody > tr > td,\n.bootstrap-table .table:not(.table-condensed) > tfoot > tr > td {\n    padding: 8px;\n}\n\n.bootstrap-table .table.table-no-bordered > thead > tr > th,\n.bootstrap-table .table.table-no-bordered > tbody > tr > td {\n    border-right: 2px solid transparent;\n}\n\n.bootstrap-table .table.table-no-bordered > tbody > tr > td:last-child {\n    border-right: none;\n}\n\n.fixed-table-container {\n    position: relative;\n    clear: both;\n    border: 1px solid #dddddd;\n    border-radius: 4px;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n}\n\n.fixed-table-container.table-no-bordered {\n    border: 1px solid transparent;\n}\n\n.fixed-table-footer,\n.fixed-table-header {\n    overflow: hidden;\n}\n\n.fixed-table-footer {\n    border-top: 1px solid #dddddd;\n}\n\n.fixed-table-body {\n    overflow-x: auto;\n    overflow-y: auto;\n    height: 100%;\n}\n\n.fixed-table-container table {\n    width: 100%;\n}\n\n.fixed-table-container thead th {\n    height: 0;\n    padding: 0;\n    margin: 0;\n    border-left: 1px solid #dddddd;\n}\n\n.fixed-table-container thead th:focus {\n    outline: 0 solid transparent;\n}\n\n.fixed-table-container thead th:first-child {\n    border-left: none;\n    border-top-left-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -moz-border-radius-topleft: 4px;\n}\n\n.fixed-table-container thead th .th-inner,\n.fixed-table-container tbody td .th-inner {\n    padding: 8px;\n    line-height: 24px;\n    vertical-align: top;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.fixed-table-container thead th .sortable {\n    cursor: pointer;\n    background-position: right;\n    background-repeat: no-repeat;\n    padding-right: 30px;\n}\n\n.fixed-table-container thead th .both {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC');\n}\n\n.fixed-table-container thead th .asc {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==');\n}\n\n.fixed-table-container thead th .desc {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ');\n}\n\n.fixed-table-container th.detail {\n    width: 30px;\n}\n\n.fixed-table-container tbody td {\n    border-left: 1px solid #dddddd;\n}\n\n.fixed-table-container tbody tr:first-child td {\n    border-top: none;\n}\n\n.fixed-table-container tbody td:first-child {\n    border-left: none;\n}\n\n/* the same color with .active */\n.fixed-table-container tbody .selected td {\n    background-color: #f5f5f5;\n}\n\n.fixed-table-container .bs-checkbox {\n    text-align: center;\n}\n\n.fixed-table-container .bs-checkbox .th-inner {\n    padding: 8px 0;\n}\n\n.fixed-table-container input[type=\"radio\"],\n.fixed-table-container input[type=\"checkbox\"] {\n    margin: 0 auto !important;\n}\n\n.fixed-table-container .no-records-found {\n    text-align: center;\n}\n\n.fixed-table-pagination div.pagination,\n.fixed-table-pagination .pagination-detail {\n    margin-top: 10px;\n    margin-bottom: 10px;\n}\n\n.fixed-table-pagination div.pagination .pagination {\n    margin: 0;\n}\n\n.fixed-table-pagination .pagination a {\n    padding: 6px 12px;\n    line-height: 1.428571429;\n}\n\n.fixed-table-pagination .pagination-info {\n    line-height: 34px;\n    margin-right: 5px;\n}\n\n.fixed-table-pagination .btn-group {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.fixed-table-pagination .dropup .dropdown-menu {\n    margin-bottom: 0;\n}\n\n.fixed-table-pagination .page-list {\n    display: inline-block;\n}\n\n.fixed-table-toolbar .columns-left {\n    margin-right: 5px;\n}\n\n.fixed-table-toolbar .columns-right {\n    margin-left: 5px;\n}\n\n.fixed-table-toolbar .columns label {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.428571429;\n}\n\n.fixed-table-toolbar .bs-bars,\n.fixed-table-toolbar .search,\n.fixed-table-toolbar .columns {\n    position: relative;\n    margin-top: 10px;\n    margin-bottom: 10px;\n    line-height: 34px;\n}\n\n.fixed-table-pagination li.disabled a {\n    pointer-events: none;\n    cursor: default;\n}\n\n.fixed-table-loading {\n    display: none;\n    position: absolute;\n    top: 42px;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 99;\n    background-color: #fff;\n    text-align: center;\n}\n\n.fixed-table-body .card-view .title {\n    font-weight: bold;\n    display: inline-block;\n    min-width: 30%;\n    text-align: left !important;\n}\n\n/* support bootstrap 2 */\n.fixed-table-body thead th .th-inner {\n    box-sizing: border-box;\n}\n\n.table th, .table td {\n    vertical-align: middle;\n    box-sizing: border-box;\n}\n\n.fixed-table-toolbar .dropdown-menu {\n    text-align: left;\n    max-height: 300px;\n    overflow: auto;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group {\n    display: inline-block;\n    margin-left: -1px !important;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group > .btn {\n    border-radius: 0;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn {\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n}\n\n.bootstrap-table .table > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 1px solid #ddd;\n}\n\n/* support bootstrap 3 */\n.bootstrap-table .table thead > tr > th {\n    padding: 0;\n    margin: 0;\n}\n\n.bootstrap-table .fixed-table-footer tbody > tr > td {\n    padding: 0 !important;\n}\n\n.bootstrap-table .fixed-table-footer .table {\n    border-bottom: none;\n    border-radius: 0;\n    padding: 0 !important;\n}\n\n.bootstrap-table .pull-right .dropdown-menu {\n    right: 0;\n    left: auto;\n}\n\n/* calculate scrollbar width */\np.fixed-table-scroll-inner {\n    width: 100%;\n    height: 200px;\n}\n\ndiv.fixed-table-scroll-outer {\n    top: 0;\n    left: 0;\n    visibility: hidden;\n    width: 200px;\n    height: 150px;\n    overflow: hidden;\n}\n\n/* for get correct heights  */\n.fixed-table-toolbar:after, .fixed-table-pagination:after {\n    content: \"\";\n    display: block;\n    clear: both;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-table/js/bootstrap-table.js",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.11.1\n * https://github.com/wenzhixin/bootstrap-table/\n */\n\n(function ($) {\n    'use strict';\n\n    // TOOLS DEFINITION\n    // ======================\n\n    var cachedWidth = null;\n\n    // it only does '%s', and return '' when arguments are undefined\n    var sprintf = function (str) {\n        var args = arguments,\n            flag = true,\n            i = 1;\n\n        str = str.replace(/%s/g, function () {\n            var arg = args[i++];\n\n            if (typeof arg === 'undefined') {\n                flag = false;\n                return '';\n            }\n            return arg;\n        });\n        return flag ? str : '';\n    };\n\n    var getPropertyFromOther = function (list, from, to, value) {\n        var result = '';\n        $.each(list, function (i, item) {\n            if (item[from] === value) {\n                result = item[to];\n                return false;\n            }\n            return true;\n        });\n        return result;\n    };\n\n    var getFieldIndex = function (columns, field) {\n        var index = -1;\n\n        $.each(columns, function (i, column) {\n            if (column.field === field) {\n                index = i;\n                return false;\n            }\n            return true;\n        });\n        return index;\n    };\n\n    // http://jsfiddle.net/wenyi/47nz7ez9/3/\n    var setFieldIndex = function (columns) {\n        var i, j, k,\n            totalCol = 0,\n            flag = [];\n\n        for (i = 0; i < columns[0].length; i++) {\n            totalCol += columns[0][i].colspan || 1;\n        }\n\n        for (i = 0; i < columns.length; i++) {\n            flag[i] = [];\n            for (j = 0; j < totalCol; j++) {\n                flag[i][j] = false;\n            }\n        }\n\n        for (i = 0; i < columns.length; i++) {\n            for (j = 0; j < columns[i].length; j++) {\n                var r = columns[i][j],\n                    rowspan = r.rowspan || 1,\n                    colspan = r.colspan || 1,\n                    index = $.inArray(false, flag[i]);\n\n                if (colspan === 1) {\n                    r.fieldIndex = index;\n                    // when field is undefined, use index instead\n                    if (typeof r.field === 'undefined') {\n                        r.field = index;\n                    }\n                }\n\n                for (k = 0; k < rowspan; k++) {\n                    flag[i + k][index] = true;\n                }\n                for (k = 0; k < colspan; k++) {\n                    flag[i][index + k] = true;\n                }\n            }\n        }\n    };\n\n    var getScrollBarWidth = function () {\n        if (cachedWidth === null) {\n            var inner = $('<p/>').addClass('fixed-table-scroll-inner'),\n                outer = $('<div/>').addClass('fixed-table-scroll-outer'),\n                w1, w2;\n\n            outer.append(inner);\n            $('body').append(outer);\n\n            w1 = inner[0].offsetWidth;\n            outer.css('overflow', 'scroll');\n            w2 = inner[0].offsetWidth;\n\n            if (w1 === w2) {\n                w2 = outer[0].clientWidth;\n            }\n\n            outer.remove();\n            cachedWidth = w1 - w2;\n        }\n        return cachedWidth;\n    };\n\n    var calculateObjectValue = function (self, name, args, defaultValue) {\n        var func = name;\n\n        if (typeof name === 'string') {\n            // support obj.func1.func2\n            var names = name.split('.');\n\n            if (names.length > 1) {\n                func = window;\n                $.each(names, function (i, f) {\n                    func = func[f];\n                });\n            } else {\n                func = window[name];\n            }\n        }\n        if (typeof func === 'object') {\n            return func;\n        }\n        if (typeof func === 'function') {\n            return func.apply(self, args || []);\n        }\n        if (!func && typeof name === 'string' && sprintf.apply(this, [name].concat(args))) {\n            return sprintf.apply(this, [name].concat(args));\n        }\n        return defaultValue;\n    };\n\n    var compareObjects = function (objectA, objectB, compareLength) {\n        // Create arrays of property names\n        var objectAProperties = Object.getOwnPropertyNames(objectA),\n            objectBProperties = Object.getOwnPropertyNames(objectB),\n            propName = '';\n\n        if (compareLength) {\n            // If number of properties is different, objects are not equivalent\n            if (objectAProperties.length !== objectBProperties.length) {\n                return false;\n            }\n        }\n\n        for (var i = 0; i < objectAProperties.length; i++) {\n            propName = objectAProperties[i];\n\n            // If the property is not in the object B properties, continue with the next property\n            if ($.inArray(propName, objectBProperties) > -1) {\n                // If values of same property are not equal, objects are not equivalent\n                if (objectA[propName] !== objectB[propName]) {\n                    return false;\n                }\n            }\n        }\n\n        // If we made it this far, objects are considered equivalent\n        return true;\n    };\n\n    var escapeHTML = function (text) {\n        if (typeof text === 'string') {\n            return text\n                .replace(/&/g, '&amp;')\n                .replace(/</g, '&lt;')\n                .replace(/>/g, '&gt;')\n                .replace(/\"/g, '&quot;')\n                .replace(/'/g, '&#039;')\n                .replace(/`/g, '&#x60;');\n        }\n        return text;\n    };\n\n    var getRealDataAttr = function (dataAttr) {\n        for (var attr in dataAttr) {\n            var auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase();\n            if (auxAttr !== attr) {\n                dataAttr[auxAttr] = dataAttr[attr];\n                delete dataAttr[attr];\n            }\n        }\n\n        return dataAttr;\n    };\n\n    var getItemField = function (item, field, escape) {\n        var value = item;\n\n        if (typeof field !== 'string' || item.hasOwnProperty(field)) {\n            return escape ? escapeHTML(item[field]) : item[field];\n        }\n        var props = field.split('.');\n        for (var p in props) {\n            if (props.hasOwnProperty(p)) {\n                value = value && value[props[p]];\n            }\n        }\n        return escape ? escapeHTML(value) : value;\n    };\n\n    var isIEBrowser = function () {\n        return !!(navigator.userAgent.indexOf(\"MSIE \") > 0 || !!navigator.userAgent.match(/Trident.*rv\\:11\\./));\n    };\n\n    var objectKeys = function () {\n        // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n        if (!Object.keys) {\n            Object.keys = (function() {\n                var hasOwnProperty = Object.prototype.hasOwnProperty,\n                    hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),\n                    dontEnums = [\n                        'toString',\n                        'toLocaleString',\n                        'valueOf',\n                        'hasOwnProperty',\n                        'isPrototypeOf',\n                        'propertyIsEnumerable',\n                        'constructor'\n                    ],\n                    dontEnumsLength = dontEnums.length;\n\n                return function(obj) {\n                    if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\n                        throw new TypeError('Object.keys called on non-object');\n                    }\n\n                    var result = [], prop, i;\n\n                    for (prop in obj) {\n                        if (hasOwnProperty.call(obj, prop)) {\n                            result.push(prop);\n                        }\n                    }\n\n                    if (hasDontEnumBug) {\n                        for (i = 0; i < dontEnumsLength; i++) {\n                            if (hasOwnProperty.call(obj, dontEnums[i])) {\n                                result.push(dontEnums[i]);\n                            }\n                        }\n                    }\n                    return result;\n                };\n            }());\n        }\n    };\n\n    // BOOTSTRAP TABLE CLASS DEFINITION\n    // ======================\n\n    var BootstrapTable = function (el, options) {\n        this.options = options;\n        this.$el = $(el);\n        this.$el_ = this.$el.clone();\n        this.timeoutId_ = 0;\n        this.timeoutFooter_ = 0;\n\n        this.init();\n    };\n\n    BootstrapTable.DEFAULTS = {\n        classes: 'table table-hover',\n        sortClass: undefined,\n        locale: undefined,\n        height: undefined,\n        undefinedText: '-',\n        sortName: undefined,\n        sortOrder: 'asc',\n        sortStable: false,\n        striped: false,\n        columns: [[]],\n        data: [],\n        totalField: 'total',\n        dataField: 'rows',\n        method: 'get',\n        url: undefined,\n        ajax: undefined,\n        cache: true,\n        contentType: 'application/json',\n        dataType: 'json',\n        ajaxOptions: {},\n        queryParams: function (params) {\n            return params;\n        },\n        queryParamsType: 'limit', // undefined\n        responseHandler: function (res) {\n            return res;\n        },\n        pagination: false,\n        onlyInfoPagination: false,\n        paginationLoop: true,\n        sidePagination: 'client', // client or server\n        totalRows: 0, // server side need to set\n        pageNumber: 1,\n        pageSize: 10,\n        pageList: [10, 25, 50, 100],\n        paginationHAlign: 'right', //right, left\n        paginationVAlign: 'bottom', //bottom, top, both\n        paginationDetailHAlign: 'left', //right, left\n        paginationPreText: '&lsaquo;',\n        paginationNextText: '&rsaquo;',\n        search: false,\n        searchOnEnterKey: false,\n        strictSearch: false,\n        searchAlign: 'right',\n        selectItemName: 'btSelectItem',\n        showHeader: true,\n        showFooter: false,\n        showColumns: false,\n        showPaginationSwitch: false,\n        showRefresh: false,\n        showToggle: false,\n        buttonsAlign: 'right',\n        smartDisplay: true,\n        escape: false,\n        minimumCountColumns: 1,\n        idField: undefined,\n        uniqueId: undefined,\n        cardView: false,\n        detailView: false,\n        detailFormatter: function (index, row) {\n            return '';\n        },\n        trimOnSearch: true,\n        clickToSelect: false,\n        singleSelect: false,\n        toolbar: undefined,\n        toolbarAlign: 'left',\n        checkboxHeader: true,\n        sortable: true,\n        silentSort: true,\n        maintainSelected: false,\n        searchTimeOut: 500,\n        searchText: '',\n        iconSize: undefined,\n        buttonsClass: 'default',\n        iconsPrefix: 'fa', // glyphicon of fa (font awesome)\n        icons: {\n            paginationSwitchDown: 'fa-caret-square-o-down icon-chevron-down',\n            paginationSwitchUp: 'fa-caret-square-o-up icon-chevron-up',\n            refresh: 'fa-refresh',\n            toggle: 'fa-list-alt icon-list-alt',\n            columns: 'fa-th icon-th',\n            detailOpen: 'fa-plus icon-plus',\n            detailClose: 'fa-minus icon-minus'\n        },\n\n        customSearch: $.noop,\n\n        customSort: $.noop,\n\n        rowStyle: function (row, index) {\n            return {};\n        },\n\n        rowAttributes: function (row, index) {\n            return {};\n        },\n\n        footerStyle: function (row, index) {\n            return {};\n        },\n\n        onAll: function (name, args) {\n            return false;\n        },\n        onClickCell: function (field, value, row, $element) {\n            return false;\n        },\n        onDblClickCell: function (field, value, row, $element) {\n            return false;\n        },\n        onClickRow: function (item, $element) {\n            return false;\n        },\n        onDblClickRow: function (item, $element) {\n            return false;\n        },\n        onSort: function (name, order) {\n            return false;\n        },\n        onCheck: function (row) {\n            return false;\n        },\n        onUncheck: function (row) {\n            return false;\n        },\n        onCheckAll: function (rows) {\n            return false;\n        },\n        onUncheckAll: function (rows) {\n            return false;\n        },\n        onCheckSome: function (rows) {\n            return false;\n        },\n        onUncheckSome: function (rows) {\n            return false;\n        },\n        onLoadSuccess: function (data) {\n            return false;\n        },\n        onLoadError: function (status) {\n            return false;\n        },\n        onColumnSwitch: function (field, checked) {\n            return false;\n        },\n        onPageChange: function (number, size) {\n            return false;\n        },\n        onSearch: function (text) {\n            return false;\n        },\n        onToggle: function (cardView) {\n            return false;\n        },\n        onPreBody: function (data) {\n            return false;\n        },\n        onPostBody: function () {\n            return false;\n        },\n        onPostHeader: function () {\n            return false;\n        },\n        onExpandRow: function (index, row, $detail) {\n            return false;\n        },\n        onCollapseRow: function (index, row) {\n            return false;\n        },\n        onRefreshOptions: function (options) {\n            return false;\n        },\n        onRefresh: function (params) {\n          return false;\n        },\n        onResetView: function () {\n            return false;\n        }\n    };\n\n    BootstrapTable.LOCALES = {};\n\n    BootstrapTable.LOCALES['en-US'] = BootstrapTable.LOCALES.en = {\n        formatLoadingMessage: function () {\n            return 'Loading, please wait...';\n        },\n        formatRecordsPerPage: function (pageNumber) {\n            return sprintf('%s rows per page', pageNumber);\n        },\n        formatShowingRows: function (pageFrom, pageTo, totalRows) {\n            return sprintf('Showing %s to %s of %s rows', pageFrom, pageTo, totalRows);\n        },\n        formatDetailPagination: function (totalRows) {\n            return sprintf('Showing %s rows', totalRows);\n        },\n        formatSearch: function () {\n            return 'Search';\n        },\n        formatNoMatches: function () {\n            return 'No matching records found';\n        },\n        formatPaginationSwitch: function () {\n            return 'Hide/Show pagination';\n        },\n        formatRefresh: function () {\n            return 'Refresh';\n        },\n        formatToggle: function () {\n            return 'Toggle';\n        },\n        formatColumns: function () {\n            return 'Columns';\n        },\n        formatAllRows: function () {\n            return 'All';\n        }\n    };\n\n    $.extend(BootstrapTable.DEFAULTS, BootstrapTable.LOCALES['en-US']);\n\n    BootstrapTable.COLUMN_DEFAULTS = {\n        radio: false,\n        checkbox: false,\n        checkboxEnabled: true,\n        field: undefined,\n        title: undefined,\n        titleTooltip: undefined,\n        'class': undefined,\n        align: undefined, // left, right, center\n        halign: undefined, // left, right, center\n        falign: undefined, // left, right, center\n        valign: undefined, // top, middle, bottom\n        width: undefined,\n        sortable: false,\n        order: 'asc', // asc, desc\n        visible: true,\n        switchable: true,\n        clickToSelect: true,\n        formatter: undefined,\n        footerFormatter: undefined,\n        events: undefined,\n        sorter: undefined,\n        sortName: undefined,\n        cellStyle: undefined,\n        searchable: true,\n        searchFormatter: true,\n        cardVisible: true,\n        escape : false\n    };\n\n    BootstrapTable.EVENTS = {\n        'all.bs.table': 'onAll',\n        'click-cell.bs.table': 'onClickCell',\n        'dbl-click-cell.bs.table': 'onDblClickCell',\n        'click-row.bs.table': 'onClickRow',\n        'dbl-click-row.bs.table': 'onDblClickRow',\n        'sort.bs.table': 'onSort',\n        'check.bs.table': 'onCheck',\n        'uncheck.bs.table': 'onUncheck',\n        'check-all.bs.table': 'onCheckAll',\n        'uncheck-all.bs.table': 'onUncheckAll',\n        'check-some.bs.table': 'onCheckSome',\n        'uncheck-some.bs.table': 'onUncheckSome',\n        'load-success.bs.table': 'onLoadSuccess',\n        'load-error.bs.table': 'onLoadError',\n        'column-switch.bs.table': 'onColumnSwitch',\n        'page-change.bs.table': 'onPageChange',\n        'search.bs.table': 'onSearch',\n        'toggle.bs.table': 'onToggle',\n        'pre-body.bs.table': 'onPreBody',\n        'post-body.bs.table': 'onPostBody',\n        'post-header.bs.table': 'onPostHeader',\n        'expand-row.bs.table': 'onExpandRow',\n        'collapse-row.bs.table': 'onCollapseRow',\n        'refresh-options.bs.table': 'onRefreshOptions',\n        'reset-view.bs.table': 'onResetView',\n        'refresh.bs.table': 'onRefresh'\n    };\n\n    BootstrapTable.prototype.init = function () {\n        this.initLocale();\n        this.initContainer();\n        this.initTable();\n        this.initHeader();\n        this.initData();\n        this.initHiddenRows();\n        this.initFooter();\n        this.initToolbar();\n        this.initPagination();\n        this.initBody();\n        this.initSearchText();\n        this.initServer();\n    };\n\n    BootstrapTable.prototype.initLocale = function () {\n        if (this.options.locale) {\n            var parts = this.options.locale.split(/-|_/);\n            parts[0].toLowerCase();\n            if (parts[1]) parts[1].toUpperCase();\n            if ($.fn.bootstrapTable.locales[this.options.locale]) {\n                // locale as requested\n                $.extend(this.options, $.fn.bootstrapTable.locales[this.options.locale]);\n            } else if ($.fn.bootstrapTable.locales[parts.join('-')]) {\n                // locale with sep set to - (in case original was specified with _)\n                $.extend(this.options, $.fn.bootstrapTable.locales[parts.join('-')]);\n            } else if ($.fn.bootstrapTable.locales[parts[0]]) {\n                // short locale language code (i.e. 'en')\n                $.extend(this.options, $.fn.bootstrapTable.locales[parts[0]]);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.initContainer = function () {\n        this.$container = $([\n            '<div class=\"bootstrap-table\">',\n            '<div class=\"fixed-table-toolbar\"></div>',\n            this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\" style=\"clear: both;\"></div>' :\n                '',\n            '<div class=\"fixed-table-container\">',\n            '<div class=\"fixed-table-header\"><table></table></div>',\n            '<div class=\"fixed-table-body\">',\n            '<div class=\"fixed-table-loading\">',\n            this.options.formatLoadingMessage(),\n            '</div>',\n            '</div>',\n            '<div class=\"fixed-table-footer\"><table><tr></tr></table></div>',\n            this.options.paginationVAlign === 'bottom' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\"></div>' :\n                '',\n            '</div>',\n            '</div>'\n        ].join(''));\n\n        this.$container.insertAfter(this.$el);\n        this.$tableContainer = this.$container.find('.fixed-table-container');\n        this.$tableHeader = this.$container.find('.fixed-table-header');\n        this.$tableBody = this.$container.find('.fixed-table-body');\n        this.$tableLoading = this.$container.find('.fixed-table-loading');\n        this.$tableFooter = this.$container.find('.fixed-table-footer');\n        this.$toolbar = this.$container.find('.fixed-table-toolbar');\n        this.$pagination = this.$container.find('.fixed-table-pagination');\n\n        this.$tableBody.append(this.$el);\n        this.$container.after('<div class=\"clearfix\"></div>');\n\n        this.$el.addClass(this.options.classes);\n        if (this.options.striped) {\n            this.$el.addClass('table-striped');\n        }\n        if ($.inArray('table-no-bordered', this.options.classes.split(' ')) !== -1) {\n            this.$tableContainer.addClass('table-no-bordered');\n        }\n    };\n\n    BootstrapTable.prototype.initTable = function () {\n        var that = this,\n            columns = [],\n            data = [];\n\n        this.$header = this.$el.find('>thead');\n        if (!this.$header.length) {\n            this.$header = $('<thead></thead>').appendTo(this.$el);\n        }\n        this.$header.find('tr').each(function () {\n            var column = [];\n\n            $(this).find('th').each(function () {\n                // Fix #2014 - getFieldIndex and elsewhere assume this is string, causes issues if not\n                if (typeof $(this).data('field') !== 'undefined') {\n                    $(this).data('field', $(this).data('field') + '');\n                }\n                column.push($.extend({}, {\n                    title: $(this).html(),\n                    'class': $(this).attr('class'),\n                    titleTooltip: $(this).attr('title'),\n                    rowspan: $(this).attr('rowspan') ? +$(this).attr('rowspan') : undefined,\n                    colspan: $(this).attr('colspan') ? +$(this).attr('colspan') : undefined\n                }, $(this).data()));\n            });\n            columns.push(column);\n        });\n        if (!$.isArray(this.options.columns[0])) {\n            this.options.columns = [this.options.columns];\n        }\n        this.options.columns = $.extend(true, [], columns, this.options.columns);\n        this.columns = [];\n\n        setFieldIndex(this.options.columns);\n        $.each(this.options.columns, function (i, columns) {\n            $.each(columns, function (j, column) {\n                column = $.extend({}, BootstrapTable.COLUMN_DEFAULTS, column);\n\n                if (typeof column.fieldIndex !== 'undefined') {\n                    that.columns[column.fieldIndex] = column;\n                }\n\n                that.options.columns[i][j] = column;\n            });\n        });\n\n        // if options.data is setting, do not process tbody data\n        if (this.options.data.length) {\n            return;\n        }\n\n        var m = [];\n        this.$el.find('>tbody>tr').each(function (y) {\n            var row = {};\n\n            // save tr's id, class and data-* attributes\n            row._id = $(this).attr('id');\n            row._class = $(this).attr('class');\n            row._data = getRealDataAttr($(this).data());\n\n            $(this).find('>td').each(function (x) {\n                var $this = $(this),\n                    cspan = +$this.attr('colspan') || 1,\n                    rspan = +$this.attr('rowspan') || 1,\n                    tx, ty;\n\n                for (; m[y] && m[y][x]; x++); //skip already occupied cells in current row\n\n                for (tx = x; tx < x + cspan; tx++) { //mark matrix elements occupied by current cell with true\n                    for (ty = y; ty < y + rspan; ty++) {\n                        if (!m[ty]) { //fill missing rows\n                            m[ty] = [];\n                        }\n                        m[ty][tx] = true;\n                    }\n                }\n\n                var field = that.columns[x].field;\n\n                row[field] = $(this).html();\n                // save td's id, class and data-* attributes\n                row['_' + field + '_id'] = $(this).attr('id');\n                row['_' + field + '_class'] = $(this).attr('class');\n                row['_' + field + '_rowspan'] = $(this).attr('rowspan');\n                row['_' + field + '_colspan'] = $(this).attr('colspan');\n                row['_' + field + '_title'] = $(this).attr('title');\n                row['_' + field + '_data'] = getRealDataAttr($(this).data());\n            });\n            data.push(row);\n        });\n        this.options.data = data;\n        if (data.length) this.fromHtml = true;\n    };\n\n    BootstrapTable.prototype.initHeader = function () {\n        var that = this,\n            visibleColumns = {},\n            html = [];\n\n        this.header = {\n            fields: [],\n            styles: [],\n            classes: [],\n            formatters: [],\n            events: [],\n            sorters: [],\n            sortNames: [],\n            cellStyles: [],\n            searchables: []\n        };\n\n        $.each(this.options.columns, function (i, columns) {\n            html.push('<tr>');\n\n            if (i === 0 && !that.options.cardView && that.options.detailView) {\n                html.push(sprintf('<th class=\"detail\" rowspan=\"%s\"><div class=\"fht-cell\"></div></th>',\n                    that.options.columns.length));\n            }\n\n            $.each(columns, function (j, column) {\n                var text = '',\n                    halign = '', // header align style\n                    align = '', // body align style\n                    style = '',\n                    class_ = sprintf(' class=\"%s\"', column['class']),\n                    order = that.options.sortOrder || column.order,\n                    unitWidth = 'px',\n                    width = column.width;\n\n                if (column.width !== undefined && (!that.options.cardView)) {\n                    if (typeof column.width === 'string') {\n                        if (column.width.indexOf('%') !== -1) {\n                            unitWidth = '%';\n                        }\n                    }\n                }\n                if (column.width && typeof column.width === 'string') {\n                    width = column.width.replace('%', '').replace('px', '');\n                }\n\n                halign = sprintf('text-align: %s; ', column.halign ? column.halign : column.align);\n                align = sprintf('text-align: %s; ', column.align);\n                style = sprintf('vertical-align: %s; ', column.valign);\n                style += sprintf('width: %s; ', (column.checkbox || column.radio) && !width ?\n                    '36px' : (width ? width + unitWidth : undefined));\n\n                if (typeof column.fieldIndex !== 'undefined') {\n                    that.header.fields[column.fieldIndex] = column.field;\n                    that.header.styles[column.fieldIndex] = align + style;\n                    that.header.classes[column.fieldIndex] = class_;\n                    that.header.formatters[column.fieldIndex] = column.formatter;\n                    that.header.events[column.fieldIndex] = column.events;\n                    that.header.sorters[column.fieldIndex] = column.sorter;\n                    that.header.sortNames[column.fieldIndex] = column.sortName;\n                    that.header.cellStyles[column.fieldIndex] = column.cellStyle;\n                    that.header.searchables[column.fieldIndex] = column.searchable;\n\n                    if (!column.visible) {\n                        return;\n                    }\n\n                    if (that.options.cardView && (!column.cardVisible)) {\n                        return;\n                    }\n\n                    visibleColumns[column.field] = column;\n                }\n\n                html.push('<th' + sprintf(' title=\"%s\"', column.titleTooltip),\n                    column.checkbox || column.radio ?\n                        sprintf(' class=\"bs-checkbox %s\"', column['class'] || '') :\n                        class_,\n                    sprintf(' style=\"%s\"', halign + style),\n                    sprintf(' rowspan=\"%s\"', column.rowspan),\n                    sprintf(' colspan=\"%s\"', column.colspan),\n                    sprintf(' data-field=\"%s\"', column.field),\n                    '>');\n\n                html.push(sprintf('<div class=\"th-inner %s\">', that.options.sortable && column.sortable ?\n                    'sortable both' : ''));\n\n                text = that.options.escape ? escapeHTML(column.title) : column.title;\n\n                if (column.checkbox) {\n                    if (!that.options.singleSelect && that.options.checkboxHeader) {\n                        text = '<input name=\"btSelectAll\" type=\"checkbox\" />';\n                    }\n                    that.header.stateField = column.field;\n                }\n                if (column.radio) {\n                    text = '';\n                    that.header.stateField = column.field;\n                    that.options.singleSelect = true;\n                }\n\n                html.push(text);\n                html.push('</div>');\n                html.push('<div class=\"fht-cell\"></div>');\n                html.push('</div>');\n                html.push('</th>');\n            });\n            html.push('</tr>');\n        });\n\n        this.$header.html(html.join(''));\n        this.$header.find('th[data-field]').each(function (i) {\n            $(this).data(visibleColumns[$(this).data('field')]);\n        });\n        this.$container.off('click', '.th-inner').on('click', '.th-inner', function (event) {\n            var target = $(this);\n\n            if (that.options.detailView) {\n                if (target.closest('.bootstrap-table')[0] !== that.$container[0])\n                    return false;\n            }\n\n            if (that.options.sortable && target.parent().data().sortable) {\n                that.onSort(event);\n            }\n        });\n\n        this.$header.children().children().off('keypress').on('keypress', function (event) {\n            if (that.options.sortable && $(this).data().sortable) {\n                var code = event.keyCode || event.which;\n                if (code == 13) { //Enter keycode\n                    that.onSort(event);\n                }\n            }\n        });\n\n        $(window).off('resize.bootstrap-table');\n        if (!this.options.showHeader || this.options.cardView) {\n            this.$header.hide();\n            this.$tableHeader.hide();\n            this.$tableLoading.css('top', 0);\n        } else {\n            this.$header.show();\n            this.$tableHeader.show();\n            this.$tableLoading.css('top', this.$header.outerHeight() + 1);\n            // Assign the correct sortable arrow\n            this.getCaret();\n            $(window).on('resize.bootstrap-table', $.proxy(this.resetWidth, this));\n        }\n\n        this.$selectAll = this.$header.find('[name=\"btSelectAll\"]');\n        this.$selectAll.off('click').on('click', function () {\n                var checked = $(this).prop('checked');\n                that[checked ? 'checkAll' : 'uncheckAll']();\n                that.updateSelected();\n            });\n    };\n\n    BootstrapTable.prototype.initFooter = function () {\n        if (!this.options.showFooter || this.options.cardView) {\n            this.$tableFooter.hide();\n        } else {\n            this.$tableFooter.show();\n        }\n    };\n\n    /**\n     * @param data\n     * @param type: append / prepend\n     */\n    BootstrapTable.prototype.initData = function (data, type) {\n        if (type === 'append') {\n            this.data = this.data.concat(data);\n        } else if (type === 'prepend') {\n            this.data = [].concat(data).concat(this.data);\n        } else {\n            this.data = data || this.options.data;\n        }\n\n        // Fix #839 Records deleted when adding new row on filtered table\n        if (type === 'append') {\n            this.options.data = this.options.data.concat(data);\n        } else if (type === 'prepend') {\n            this.options.data = [].concat(data).concat(this.options.data);\n        } else {\n            this.options.data = this.data;\n        }\n\n        if (this.options.sidePagination === 'server') {\n            return;\n        }\n        this.initSort();\n    };\n\n    BootstrapTable.prototype.initSort = function () {\n        var that = this,\n            name = this.options.sortName,\n            order = this.options.sortOrder === 'desc' ? -1 : 1,\n            index = $.inArray(this.options.sortName, this.header.fields),\n            timeoutId = 0;\n\n        if (this.options.customSort !== $.noop) {\n            this.options.customSort.apply(this, [this.options.sortName, this.options.sortOrder]);\n            return;\n        }\n\n        if (index !== -1) {\n            if (this.options.sortStable) {\n                $.each(this.data, function (i, row) {\n                    if (!row.hasOwnProperty('_position')) row._position = i;\n                });\n            }\n\n            this.data.sort(function (a, b) {\n                if (that.header.sortNames[index]) {\n                    name = that.header.sortNames[index];\n                }\n                var aa = getItemField(a, name, that.options.escape),\n                    bb = getItemField(b, name, that.options.escape),\n                    value = calculateObjectValue(that.header, that.header.sorters[index], [aa, bb]);\n\n                if (value !== undefined) {\n                    return order * value;\n                }\n\n                // Fix #161: undefined or null string sort bug.\n                if (aa === undefined || aa === null) {\n                    aa = '';\n                }\n                if (bb === undefined || bb === null) {\n                    bb = '';\n                }\n\n                if (that.options.sortStable && aa === bb) {\n                    aa = a._position;\n                    bb = b._position;\n                }\n\n                // IF both values are numeric, do a numeric comparison\n                if ($.isNumeric(aa) && $.isNumeric(bb)) {\n                    // Convert numerical values form string to float.\n                    aa = parseFloat(aa);\n                    bb = parseFloat(bb);\n                    if (aa < bb) {\n                        return order * -1;\n                    }\n                    return order;\n                }\n\n                if (aa === bb) {\n                    return 0;\n                }\n\n                // If value is not a string, convert to string\n                if (typeof aa !== 'string') {\n                    aa = aa.toString();\n                }\n\n                if (aa.localeCompare(bb) === -1) {\n                    return order * -1;\n                }\n\n                return order;\n            });\n\n            if (this.options.sortClass !== undefined) {\n                clearTimeout(timeoutId);\n                timeoutId = setTimeout(function () {\n                    that.$el.removeClass(that.options.sortClass);\n                    var index = that.$header.find(sprintf('[data-field=\"%s\"]',\n                        that.options.sortName).index() + 1);\n                    that.$el.find(sprintf('tr td:nth-child(%s)', index))\n                        .addClass(that.options.sortClass);\n                }, 250);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.onSort = function (event) {\n        var $this = event.type === \"keypress\" ? $(event.currentTarget) : $(event.currentTarget).parent(),\n            $this_ = this.$header.find('th').eq($this.index());\n\n        this.$header.add(this.$header_).find('span.order').remove();\n\n        if (this.options.sortName === $this.data('field')) {\n            this.options.sortOrder = this.options.sortOrder === 'asc' ? 'desc' : 'asc';\n        } else {\n            this.options.sortName = $this.data('field');\n            this.options.sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc';\n        }\n        this.trigger('sort', this.options.sortName, this.options.sortOrder);\n\n        $this.add($this_).data('order', this.options.sortOrder);\n\n        // Assign the correct sortable arrow\n        this.getCaret();\n\n        if (this.options.sidePagination === 'server') {\n            this.initServer(this.options.silentSort);\n            return;\n        }\n\n        this.initSort();\n        this.initBody();\n    };\n\n    BootstrapTable.prototype.initToolbar = function () {\n        var that = this,\n            html = [],\n            timeoutId = 0,\n            $keepOpen,\n            $search,\n            switchableCount = 0;\n\n        if (this.$toolbar.find('.bs-bars').children().length) {\n            $('body').append($(this.options.toolbar));\n        }\n        this.$toolbar.html('');\n\n        if (typeof this.options.toolbar === 'string' || typeof this.options.toolbar === 'object') {\n            $(sprintf('<div class=\"bs-bars pull-%s\"></div>', this.options.toolbarAlign))\n                .appendTo(this.$toolbar)\n                .append($(this.options.toolbar));\n        }\n\n        // showColumns, showToggle, showRefresh\n        html = [sprintf('<div class=\"columns columns-%s btn-group pull-%s\">',\n            this.options.buttonsAlign, this.options.buttonsAlign)];\n\n        if (typeof this.options.icons === 'string') {\n            this.options.icons = calculateObjectValue(null, this.options.icons);\n        }\n\n        if (this.options.showPaginationSwitch) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"paginationSwitch\" aria-label=\"pagination Switch\" title=\"%s\">',\n                    this.options.formatPaginationSwitch()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.paginationSwitchDown),\n                '</button>');\n        }\n\n        if (this.options.showRefresh) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"refresh\" aria-label=\"refresh\" title=\"%s\">',\n                    this.options.formatRefresh()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.refresh),\n                '</button>');\n        }\n\n        if (this.options.showToggle) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"toggle\" aria-label=\"toggle\" title=\"%s\">',\n                    this.options.formatToggle()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.toggle),\n                '</button>');\n        }\n\n        if (this.options.showColumns) {\n            html.push(sprintf('<div class=\"keep-open btn-group\" title=\"%s\">',\n                    this.options.formatColumns()),\n                '<button type=\"button\" aria-label=\"columns\" class=\"btn' +\n                sprintf(' btn-%s', this.options.buttonsClass) +\n                sprintf(' btn-%s', this.options.iconSize) +\n                ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.columns),\n                ' <span class=\"caret\"></span>',\n                '</button>',\n                '<ul class=\"dropdown-menu\" role=\"menu\">');\n\n            $.each(this.columns, function (i, column) {\n                if (column.radio || column.checkbox) {\n                    return;\n                }\n\n                if (that.options.cardView && !column.cardVisible) {\n                    return;\n                }\n\n                var checked = column.visible ? ' checked=\"checked\"' : '';\n\n                if (column.switchable) {\n                    html.push(sprintf('<li role=\"menuitem\">' +\n                        '<label><input type=\"checkbox\" data-field=\"%s\" value=\"%s\"%s> %s</label>' +\n                        '</li>', column.field, i, checked, column.title));\n                    switchableCount++;\n                }\n            });\n            html.push('</ul>',\n                '</div>');\n        }\n\n        html.push('</div>');\n\n        // Fix #188: this.showToolbar is for extensions\n        if (this.showToolbar || html.length > 2) {\n            this.$toolbar.append(html.join(''));\n        }\n\n        if (this.options.showPaginationSwitch) {\n            this.$toolbar.find('button[name=\"paginationSwitch\"]')\n                .off('click').on('click', $.proxy(this.togglePagination, this));\n        }\n\n        if (this.options.showRefresh) {\n            this.$toolbar.find('button[name=\"refresh\"]')\n                .off('click').on('click', $.proxy(this.refresh, this));\n        }\n\n        if (this.options.showToggle) {\n            this.$toolbar.find('button[name=\"toggle\"]')\n                .off('click').on('click', function () {\n                    that.toggleView();\n                });\n        }\n\n        if (this.options.showColumns) {\n            $keepOpen = this.$toolbar.find('.keep-open');\n\n            if (switchableCount <= this.options.minimumCountColumns) {\n                $keepOpen.find('input').prop('disabled', true);\n            }\n\n            $keepOpen.find('li').off('click').on('click', function (event) {\n                event.stopImmediatePropagation();\n            });\n            $keepOpen.find('input').off('click').on('click', function () {\n                var $this = $(this);\n\n                that.toggleColumn($(this).val(), $this.prop('checked'), false);\n                that.trigger('column-switch', $(this).data('field'), $this.prop('checked'));\n            });\n        }\n\n        if (this.options.search) {\n            html = [];\n            html.push(\n                '<div class=\"pull-' + this.options.searchAlign + ' search\">',\n                sprintf('<input class=\"form-control' +\n                    sprintf(' input-%s', this.options.iconSize) +\n                    '\" type=\"text\" placeholder=\"%s\">',\n                    this.options.formatSearch()),\n                '</div>');\n\n            this.$toolbar.append(html.join(''));\n            $search = this.$toolbar.find('.search input');\n            $search.off('keyup drop blur').on('keyup drop blur', function (event) {\n                if (that.options.searchOnEnterKey && event.keyCode !== 13) {\n                    return;\n                }\n\n                if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) {\n                    return;\n                }\n\n                clearTimeout(timeoutId); // doesn't matter if it's 0\n                timeoutId = setTimeout(function () {\n                    that.onSearch(event);\n                }, that.options.searchTimeOut);\n            });\n\n            if (isIEBrowser()) {\n                $search.off('mouseup').on('mouseup', function (event) {\n                    clearTimeout(timeoutId); // doesn't matter if it's 0\n                    timeoutId = setTimeout(function () {\n                        that.onSearch(event);\n                    }, that.options.searchTimeOut);\n                });\n            }\n        }\n    };\n\n    BootstrapTable.prototype.onSearch = function (event) {\n        var text = $.trim($(event.currentTarget).val());\n\n        // trim search input\n        if (this.options.trimOnSearch && $(event.currentTarget).val() !== text) {\n            $(event.currentTarget).val(text);\n        }\n\n        if (text === this.searchText) {\n            return;\n        }\n        this.searchText = text;\n        this.options.searchText = text;\n\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n        this.trigger('search', text);\n    };\n\n    BootstrapTable.prototype.initSearch = function () {\n        var that = this;\n\n        if (this.options.sidePagination !== 'server') {\n            if (this.options.customSearch !== $.noop) {\n                this.options.customSearch.apply(this, [this.searchText]);\n                return;\n            }\n\n            var s = this.searchText && (this.options.escape ?\n                escapeHTML(this.searchText) : this.searchText).toLowerCase();\n            var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;\n\n            // Check filter\n            this.data = f ? $.grep(this.options.data, function (item, i) {\n                for (var key in f) {\n                    if ($.isArray(f[key]) && $.inArray(item[key], f[key]) === -1 ||\n                            !$.isArray(f[key]) && item[key] !== f[key]) {\n                        return false;\n                    }\n                }\n                return true;\n            }) : this.options.data;\n\n            this.data = s ? $.grep(this.data, function (item, i) {\n                for (var j = 0; j < that.header.fields.length; j++) {\n\n                    if (!that.header.searchables[j]) {\n                        continue;\n                    }\n\n                    var key = $.isNumeric(that.header.fields[j]) ? parseInt(that.header.fields[j], 10) : that.header.fields[j];\n                    var column = that.columns[getFieldIndex(that.columns, key)];\n                    var value;\n\n                    if (typeof key === 'string') {\n                        value = item;\n                        var props = key.split('.');\n                        for (var prop_index = 0; prop_index < props.length; prop_index++) {\n                            value = value[props[prop_index]];\n                        }\n\n                        // Fix #142: respect searchForamtter boolean\n                        if (column && column.searchFormatter) {\n                            value = calculateObjectValue(column,\n                                that.header.formatters[j], [value, item, i], value);\n                        }\n                    } else {\n                        value = item[key];\n                    }\n\n                    if (typeof value === 'string' || typeof value === 'number') {\n                        if (that.options.strictSearch) {\n                            if ((value + '').toLowerCase() === s) {\n                                return true;\n                            }\n                        } else {\n                            if ((value + '').toLowerCase().indexOf(s) !== -1) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n                return false;\n            }) : this.data;\n        }\n    };\n\n    BootstrapTable.prototype.initPagination = function () {\n        if (!this.options.pagination) {\n            this.$pagination.hide();\n            return;\n        } else {\n            this.$pagination.show();\n        }\n\n        var that = this,\n            html = [],\n            $allSelected = false,\n            i, from, to,\n            $pageList,\n            $first, $pre,\n            $next, $last,\n            $number,\n            data = this.getData(),\n            pageList = this.options.pageList;\n\n        if (this.options.sidePagination !== 'server') {\n            this.options.totalRows = data.length;\n        }\n\n        this.totalPages = 0;\n        if (this.options.totalRows) {\n            if (this.options.pageSize === this.options.formatAllRows()) {\n                this.options.pageSize = this.options.totalRows;\n                $allSelected = true;\n            } else if (this.options.pageSize === this.options.totalRows) {\n                // Fix #667 Table with pagination,\n                // multiple pages and a search that matches to one page throws exception\n                var pageLst = typeof this.options.pageList === 'string' ?\n                    this.options.pageList.replace('[', '').replace(']', '')\n                        .replace(/ /g, '').toLowerCase().split(',') : this.options.pageList;\n                if ($.inArray(this.options.formatAllRows().toLowerCase(), pageLst)  > -1) {\n                    $allSelected = true;\n                }\n            }\n\n            this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1;\n\n            this.options.totalPages = this.totalPages;\n        }\n        if (this.totalPages > 0 && this.options.pageNumber > this.totalPages) {\n            this.options.pageNumber = this.totalPages;\n        }\n\n        this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1;\n        this.pageTo = this.options.pageNumber * this.options.pageSize;\n        if (this.pageTo > this.options.totalRows) {\n            this.pageTo = this.options.totalRows;\n        }\n\n        html.push(\n            '<div class=\"pull-' + this.options.paginationDetailHAlign + ' pagination-detail\">',\n            '<span class=\"pagination-info\">',\n            this.options.onlyInfoPagination ? this.options.formatDetailPagination(this.options.totalRows) :\n            this.options.formatShowingRows(this.pageFrom, this.pageTo, this.options.totalRows),\n            '</span>');\n\n        if (!this.options.onlyInfoPagination) {\n            html.push('<span class=\"page-list\">');\n\n            var pageNumber = [\n                    sprintf('<span class=\"btn-group %s\">',\n                        this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                            'dropdown' : 'dropup'),\n                    '<button type=\"button\" class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                    '<span class=\"page-size\">',\n                    $allSelected ? this.options.formatAllRows() : this.options.pageSize,\n                    '</span>',\n                    ' <span class=\"caret\"></span>',\n                    '</button>',\n                    '<ul class=\"dropdown-menu\" role=\"menu\">'\n                ];\n\n            if (typeof this.options.pageList === 'string') {\n                var list = this.options.pageList.replace('[', '').replace(']', '')\n                    .replace(/ /g, '').split(',');\n\n                pageList = [];\n                $.each(list, function (i, value) {\n                    pageList.push(value.toUpperCase() === that.options.formatAllRows().toUpperCase() ?\n                        that.options.formatAllRows() : +value);\n                });\n            }\n\n            $.each(pageList, function (i, page) {\n                if (!that.options.smartDisplay || i === 0 || pageList[i - 1] < that.options.totalRows) {\n                    var active;\n                    if ($allSelected) {\n                        active = page === that.options.formatAllRows() ? ' class=\"active\"' : '';\n                    } else {\n                        active = page === that.options.pageSize ? ' class=\"active\"' : '';\n                    }\n                    pageNumber.push(sprintf('<li role=\"menuitem\"%s><a href=\"#\">%s</a></li>', active, page));\n                }\n            });\n            pageNumber.push('</ul></span>');\n\n            html.push(this.options.formatRecordsPerPage(pageNumber.join('')));\n            html.push('</span>');\n\n            html.push('</div>',\n                '<div class=\"pull-' + this.options.paginationHAlign + ' pagination\">',\n                '<ul class=\"pagination' + sprintf(' pagination-%s', this.options.iconSize) + '\">',\n                '<li class=\"page-pre\"><a href=\"#\">' + this.options.paginationPreText + '</a></li>');\n\n            if (this.totalPages < 5) {\n                from = 1;\n                to = this.totalPages;\n            } else {\n                from = this.options.pageNumber - 2;\n                to = from + 4;\n                if (from < 1) {\n                    from = 1;\n                    to = 5;\n                }\n                if (to > this.totalPages) {\n                    to = this.totalPages;\n                    from = to - 4;\n                }\n            }\n\n            if (this.totalPages >= 6) {\n                if (this.options.pageNumber >= 3) {\n                    html.push('<li class=\"page-first' + (1 === this.options.pageNumber ? ' active' : '') + '\">',\n                        '<a href=\"#\">', 1, '</a>',\n                        '</li>');\n\n                    from++;\n                }\n\n                if (this.options.pageNumber >= 4) {\n                    if (this.options.pageNumber == 4 || this.totalPages == 6 || this.totalPages == 7) {\n                        from--;\n                    } else {\n                        html.push('<li class=\"page-first-separator disabled\">',\n                            '<a href=\"#\">...</a>',\n                            '</li>');\n                    }\n\n                    to--;\n                }\n            }\n\n            if (this.totalPages >= 7) {\n                if (this.options.pageNumber >= (this.totalPages - 2)) {\n                    from--;\n                }\n            }\n\n            if (this.totalPages == 6) {\n                if (this.options.pageNumber >= (this.totalPages - 2)) {\n                    to++;\n                }\n            } else if (this.totalPages >= 7) {\n                if (this.totalPages == 7 || this.options.pageNumber >= (this.totalPages - 3)) {\n                    to++;\n                }\n            }\n\n            for (i = from; i <= to; i++) {\n                html.push('<li class=\"page-number' + (i === this.options.pageNumber ? ' active' : '') + '\">',\n                    '<a href=\"#\">', i, '</a>',\n                    '</li>');\n            }\n\n            if (this.totalPages >= 8) {\n                if (this.options.pageNumber <= (this.totalPages - 4)) {\n                    html.push('<li class=\"page-last-separator disabled\">',\n                        '<a href=\"#\">...</a>',\n                        '</li>');\n                }\n            }\n\n            if (this.totalPages >= 6) {\n                if (this.options.pageNumber <= (this.totalPages - 3)) {\n                    html.push('<li class=\"page-last' + (this.totalPages === this.options.pageNumber ? ' active' : '') + '\">',\n                        '<a href=\"#\">', this.totalPages, '</a>',\n                        '</li>');\n                }\n            }\n\n            html.push(\n                '<li class=\"page-next\"><a href=\"#\">' + this.options.paginationNextText + '</a></li>',\n                '</ul>',\n                '</div>');\n        }\n        this.$pagination.html(html.join(''));\n\n        if (!this.options.onlyInfoPagination) {\n            $pageList = this.$pagination.find('.page-list a');\n            $first = this.$pagination.find('.page-first');\n            $pre = this.$pagination.find('.page-pre');\n            $next = this.$pagination.find('.page-next');\n            $last = this.$pagination.find('.page-last');\n            $number = this.$pagination.find('.page-number');\n\n            if (this.options.smartDisplay) {\n                if (this.totalPages <= 1) {\n                    this.$pagination.find('div.pagination').hide();\n                }\n                if (pageList.length < 2 || this.options.totalRows <= pageList[0]) {\n                    this.$pagination.find('span.page-list').hide();\n                }\n\n                // when data is empty, hide the pagination\n                this.$pagination[this.getData().length ? 'show' : 'hide']();\n            }\n\n            if (!this.options.paginationLoop) {\n                if (this.options.pageNumber === 1) {\n                    $pre.addClass('disabled');\n                }\n                if (this.options.pageNumber === this.totalPages) {\n                    $next.addClass('disabled');\n                }\n            }\n\n            if ($allSelected) {\n                this.options.pageSize = this.options.formatAllRows();\n            }\n            $pageList.off('click').on('click', $.proxy(this.onPageListChange, this));\n            $first.off('click').on('click', $.proxy(this.onPageFirst, this));\n            $pre.off('click').on('click', $.proxy(this.onPagePre, this));\n            $next.off('click').on('click', $.proxy(this.onPageNext, this));\n            $last.off('click').on('click', $.proxy(this.onPageLast, this));\n            $number.off('click').on('click', $.proxy(this.onPageNumber, this));\n        }\n    };\n\n    BootstrapTable.prototype.updatePagination = function (event) {\n        // Fix #171: IE disabled button can be clicked bug.\n        if (event && $(event.currentTarget).hasClass('disabled')) {\n            return;\n        }\n\n        if (!this.options.maintainSelected) {\n            this.resetRows();\n        }\n\n        this.initPagination();\n        if (this.options.sidePagination === 'server') {\n            this.initServer();\n        } else {\n            this.initBody();\n        }\n\n        this.trigger('page-change', this.options.pageNumber, this.options.pageSize);\n    };\n\n    BootstrapTable.prototype.onPageListChange = function (event) {\n        var $this = $(event.currentTarget);\n\n        $this.parent().addClass('active').siblings().removeClass('active');\n        this.options.pageSize = $this.text().toUpperCase() === this.options.formatAllRows().toUpperCase() ?\n            this.options.formatAllRows() : +$this.text();\n        this.$toolbar.find('.page-size').text(this.options.pageSize);\n\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageFirst = function (event) {\n        this.options.pageNumber = 1;\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPagePre = function (event) {\n        if ((this.options.pageNumber - 1) === 0) {\n            this.options.pageNumber = this.options.totalPages;\n        } else {\n            this.options.pageNumber--;\n        }\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageNext = function (event) {\n        if ((this.options.pageNumber + 1) > this.options.totalPages) {\n            this.options.pageNumber = 1;\n        } else {\n            this.options.pageNumber++;\n        }\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageLast = function (event) {\n        this.options.pageNumber = this.totalPages;\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageNumber = function (event) {\n        if (this.options.pageNumber === +$(event.currentTarget).text()) {\n            return;\n        }\n        this.options.pageNumber = +$(event.currentTarget).text();\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.initRow = function(item, i, data, parentDom) {\n        var that=this,\n            key,\n            html = [],\n            style = {},\n            csses = [],\n            data_ = '',\n            attributes = {},\n            htmlAttributes = [];\n\n        if ($.inArray(item, this.hiddenRows) > -1) {\n            return;\n        }\n\n        style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style);\n\n        if (style && style.css) {\n            for (key in style.css) {\n                csses.push(key + ': ' + style.css[key]);\n            }\n        }\n\n        attributes = calculateObjectValue(this.options,\n            this.options.rowAttributes, [item, i], attributes);\n\n        if (attributes) {\n            for (key in attributes) {\n                htmlAttributes.push(sprintf('%s=\"%s\"', key, escapeHTML(attributes[key])));\n            }\n        }\n\n        if (item._data && !$.isEmptyObject(item._data)) {\n            $.each(item._data, function(k, v) {\n                // ignore data-index\n                if (k === 'index') {\n                    return;\n                }\n                data_ += sprintf(' data-%s=\"%s\"', k, v);\n            });\n        }\n\n        html.push('<tr',\n            sprintf(' %s', htmlAttributes.join(' ')),\n            sprintf(' id=\"%s\"', $.isArray(item) ? undefined : item._id),\n            sprintf(' class=\"%s\"', style.classes || ($.isArray(item) ? undefined : item._class)),\n            sprintf(' data-index=\"%s\"', i),\n            sprintf(' data-uniqueid=\"%s\"', item[this.options.uniqueId]),\n            sprintf('%s', data_),\n            '>'\n        );\n\n        if (this.options.cardView) {\n            html.push(sprintf('<td colspan=\"%s\"><div class=\"card-views\">', this.header.fields.length));\n        }\n\n        if (!this.options.cardView && this.options.detailView) {\n            html.push('<td>',\n                '<a class=\"detail-icon\" href=\"#\">',\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.detailOpen),\n                '</a>',\n                '</td>');\n        }\n\n        $.each(this.header.fields, function(j, field) {\n            var text = '',\n                value_ = getItemField(item, field, that.options.escape),\n                value = '',\n                type = '',\n                cellStyle = {},\n                id_ = '',\n                class_ = that.header.classes[j],\n                data_ = '',\n                rowspan_ = '',\n                colspan_ = '',\n                title_ = '',\n                column = that.columns[j];\n\n            if (that.fromHtml && typeof value_ === 'undefined') {\n                return;\n            }\n\n            if (!column.visible) {\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            if (column.escape) {\n                value_ = escapeHTML(value_);\n            }\n\n            style = sprintf('style=\"%s\"', csses.concat(that.header.styles[j]).join('; '));\n\n            // handle td's id and class\n            if (item['_' + field + '_id']) {\n                id_ = sprintf(' id=\"%s\"', item['_' + field + '_id']);\n            }\n            if (item['_' + field + '_class']) {\n                class_ = sprintf(' class=\"%s\"', item['_' + field + '_class']);\n            }\n            if (item['_' + field + '_rowspan']) {\n                rowspan_ = sprintf(' rowspan=\"%s\"', item['_' + field + '_rowspan']);\n            }\n            if (item['_' + field + '_colspan']) {\n                colspan_ = sprintf(' colspan=\"%s\"', item['_' + field + '_colspan']);\n            }\n            if (item['_' + field + '_title']) {\n                title_ = sprintf(' title=\"%s\"', item['_' + field + '_title']);\n            }\n            cellStyle = calculateObjectValue(that.header,\n                that.header.cellStyles[j], [value_, item, i, field], cellStyle);\n            if (cellStyle.classes) {\n                class_ = sprintf(' class=\"%s\"', cellStyle.classes);\n            }\n            if (cellStyle.css) {\n                var csses_ = [];\n                for (var key in cellStyle.css) {\n                    csses_.push(key + ': ' + cellStyle.css[key]);\n                }\n                style = sprintf('style=\"%s\"', csses_.concat(that.header.styles[j]).join('; '));\n            }\n\n            value = calculateObjectValue(column,\n                that.header.formatters[j], [value_, item, i], value_);\n\n            if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) {\n                $.each(item['_' + field + '_data'], function(k, v) {\n                    // ignore data-index\n                    if (k === 'index') {\n                        return;\n                    }\n                    data_ += sprintf(' data-%s=\"%s\"', k, v);\n                });\n            }\n\n            if (column.checkbox || column.radio) {\n                type = column.checkbox ? 'checkbox' : type;\n                type = column.radio ? 'radio' : type;\n\n                text = [sprintf(that.options.cardView ?\n                        '<div class=\"card-view %s\">' : '<td class=\"bs-checkbox %s\">', column['class'] || ''),\n                    '<input' +\n                    sprintf(' data-index=\"%s\"', i) +\n                    sprintf(' name=\"%s\"', that.options.selectItemName) +\n                    sprintf(' type=\"%s\"', type) +\n                    sprintf(' value=\"%s\"', item[that.options.idField]) +\n                    sprintf(' checked=\"%s\"', value === true ||\n                        (value_ || value && value.checked) ? 'checked' : undefined) +\n                    sprintf(' disabled=\"%s\"', !column.checkboxEnabled ||\n                        (value && value.disabled) ? 'disabled' : undefined) +\n                    ' />',\n                    that.header.formatters[j] && typeof value === 'string' ? value : '',\n                    that.options.cardView ? '</div>' : '</td>'\n                ].join('');\n\n                item[that.header.stateField] = value === true || (value && value.checked);\n            } else {\n                value = typeof value === 'undefined' || value === null ?\n                    that.options.undefinedText : value;\n\n                text = that.options.cardView ? ['<div class=\"card-view\">',\n                    that.options.showHeader ? sprintf('<span class=\"title\" %s>%s</span>', style,\n                        getPropertyFromOther(that.columns, 'field', 'title', field)) : '',\n                    sprintf('<span class=\"value\">%s</span>', value),\n                    '</div>'\n                ].join('') : [sprintf('<td%s %s %s %s %s %s %s>',\n                        id_, class_, style, data_, rowspan_, colspan_, title_),\n                    value,\n                    '</td>'\n                ].join('');\n\n                // Hide empty data on Card view when smartDisplay is set to true.\n                if (that.options.cardView && that.options.smartDisplay && value === '') {\n                    // Should set a placeholder for event binding correct fieldIndex\n                    text = '<div class=\"card-view\"></div>';\n                }\n            }\n\n            html.push(text);\n        });\n\n        if (this.options.cardView) {\n            html.push('</div></td>');\n        }\n        html.push('</tr>');\n\n        return html.join(' ');\n    };\n\n    BootstrapTable.prototype.initBody = function (fixedScroll) {\n        var that = this,\n            html = [],\n            data = this.getData();\n\n        this.trigger('pre-body', data);\n\n        this.$body = this.$el.find('>tbody');\n        if (!this.$body.length) {\n            this.$body = $('<tbody></tbody>').appendTo(this.$el);\n        }\n\n        //Fix #389 Bootstrap-table-flatJSON is not working\n\n        if (!this.options.pagination || this.options.sidePagination === 'server') {\n            this.pageFrom = 1;\n            this.pageTo = data.length;\n        }\n\n        var trFragments = $(document.createDocumentFragment());\n        var hasTr;\n\n        for (var i = this.pageFrom - 1; i < this.pageTo; i++) {\n            var item = data[i];\n            var tr = this.initRow(item, i, data, trFragments);\n            hasTr = hasTr || !!tr;\n            if (tr&&tr!==true) {\n                trFragments.append(tr);\n            }\n        }\n\n        // show no records\n        if (!hasTr) {\n            trFragments.append('<tr class=\"no-records-found\">' +\n                sprintf('<td colspan=\"%s\">%s</td>',\n                this.$header.find('th').length,\n                this.options.formatNoMatches()) +\n                '</tr>');\n        }\n\n        this.$body.html(trFragments);\n\n        if (!fixedScroll) {\n            this.scrollTo(0);\n        }\n\n        // click to select by column\n        this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick', function (e) {\n            var $td = $(this),\n                $tr = $td.parent(),\n                item = that.data[$tr.data('index')],\n                index = $td[0].cellIndex,\n                fields = that.getVisibleFields(),\n                field = fields[that.options.detailView && !that.options.cardView ? index - 1 : index],\n                column = that.columns[getFieldIndex(that.columns, field)],\n                value = getItemField(item, field, that.options.escape);\n\n            if ($td.find('.detail-icon').length) {\n                return;\n            }\n\n            that.trigger(e.type === 'click' ? 'click-cell' : 'dbl-click-cell', field, value, item, $td);\n            that.trigger(e.type === 'click' ? 'click-row' : 'dbl-click-row', item, $tr, field);\n\n            // if click to select - then trigger the checkbox/radio click\n            if (e.type === 'click' && that.options.clickToSelect && column.clickToSelect) {\n                var $selectItem = $tr.find(sprintf('[name=\"%s\"]', that.options.selectItemName));\n                if ($selectItem.length) {\n                    $selectItem[0].click(); // #144: .trigger('click') bug\n                }\n            }\n        });\n\n        this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click', function () {\n            var $this = $(this),\n                $tr = $this.parent().parent(),\n                index = $tr.data('index'),\n                row = data[index]; // Fix #980 Detail view, when searching, returns wrong row\n\n            // remove and update\n            if ($tr.next().is('tr.detail-view')) {\n                $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailOpen));\n                that.trigger('collapse-row', index, row);\n                $tr.next().remove();\n            } else {\n                $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailClose));\n                $tr.after(sprintf('<tr class=\"detail-view\"><td colspan=\"%s\"></td></tr>', $tr.find('td').length));\n                var $element = $tr.next().find('td');\n                var content = calculateObjectValue(that.options, that.options.detailFormatter, [index, row, $element], '');\n                if($element.length === 1) {\n                    $element.append(content);\n                }\n                that.trigger('expand-row', index, row, $element);\n            }\n            that.resetView();\n            return false;\n        });\n\n        this.$selectItem = this.$body.find(sprintf('[name=\"%s\"]', this.options.selectItemName));\n        this.$selectItem.off('click').on('click', function (event) {\n            event.stopImmediatePropagation();\n\n            var $this = $(this),\n                checked = $this.prop('checked'),\n                row = that.data[$this.data('index')];\n\n            if (that.options.maintainSelected && $(this).is(':radio')) {\n                $.each(that.options.data, function (i, row) {\n                    row[that.header.stateField] = false;\n                });\n            }\n\n            row[that.header.stateField] = checked;\n\n            if (that.options.singleSelect) {\n                that.$selectItem.not(this).each(function () {\n                    that.data[$(this).data('index')][that.header.stateField] = false;\n                });\n                that.$selectItem.filter(':checked').not(this).prop('checked', false);\n            }\n\n            that.updateSelected();\n            that.trigger(checked ? 'check' : 'uncheck', row, $this);\n        });\n\n        $.each(this.header.events, function (i, events) {\n            if (!events) {\n                return;\n            }\n            // fix bug, if events is defined with namespace\n            if (typeof events === 'string') {\n                events = calculateObjectValue(null, events);\n            }\n\n            var field = that.header.fields[i],\n                fieldIndex = $.inArray(field, that.getVisibleFields());\n\n            if (that.options.detailView && !that.options.cardView) {\n                fieldIndex += 1;\n            }\n\n            for (var key in events) {\n                that.$body.find('>tr:not(.no-records-found)').each(function () {\n                    var $tr = $(this),\n                        $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(fieldIndex),\n                        index = key.indexOf(' '),\n                        name = key.substring(0, index),\n                        el = key.substring(index + 1),\n                        func = events[key];\n\n                    $td.find(el).off(name).on(name, function (e) {\n                        var index = $tr.data('index'),\n                            row = that.data[index],\n                            value = row[field];\n\n                        func.apply(this, [e, value, row, index]);\n                    });\n                });\n            }\n        });\n\n        this.updateSelected();\n        this.resetView();\n\n        this.trigger('post-body', data);\n    };\n\n    BootstrapTable.prototype.initServer = function (silent, query, url) {\n        var that = this,\n            data = {},\n            params = {\n                searchText: this.searchText,\n                sortName: this.options.sortName,\n                sortOrder: this.options.sortOrder\n            },\n            request;\n\n        if (this.options.pagination) {\n            params.pageSize = this.options.pageSize === this.options.formatAllRows() ?\n                this.options.totalRows : this.options.pageSize;\n            params.pageNumber = this.options.pageNumber;\n        }\n\n        if (!(url || this.options.url) && !this.options.ajax) {\n            return;\n        }\n\n        if (this.options.queryParamsType === 'limit') {\n            params = {\n                search: params.searchText,\n                sort: params.sortName,\n                order: params.sortOrder\n            };\n\n            if (this.options.pagination) {\n                params.offset = this.options.pageSize === this.options.formatAllRows() ?\n                    0 : this.options.pageSize * (this.options.pageNumber - 1);\n                params.limit = this.options.pageSize === this.options.formatAllRows() ?\n                    this.options.totalRows : this.options.pageSize;\n            }\n        }\n\n        if (!($.isEmptyObject(this.filterColumnsPartial))) {\n            params.filter = JSON.stringify(this.filterColumnsPartial, null);\n        }\n\n        data = calculateObjectValue(this.options, this.options.queryParams, [params], data);\n\n        $.extend(data, query || {});\n\n        // false to stop request\n        if (data === false) {\n            return;\n        }\n\n        if (!silent) {\n            this.$tableLoading.show();\n        }\n        request = $.extend({}, calculateObjectValue(null, this.options.ajaxOptions), {\n            type: this.options.method,\n            url:  url || this.options.url,\n            data: this.options.contentType === 'application/json' && this.options.method === 'post' ?\n                JSON.stringify(data) : data,\n            cache: this.options.cache,\n            contentType: this.options.contentType,\n            dataType: this.options.dataType,\n            success: function (res) {\n                res = calculateObjectValue(that.options, that.options.responseHandler, [res], res);\n\n                that.load(res);\n                that.trigger('load-success', res);\n                if (!silent) that.$tableLoading.hide();\n            },\n            error: function (res) {\n                that.trigger('load-error', res.status, res);\n                if (!silent) that.$tableLoading.hide();\n            }\n        });\n\n        if (this.options.ajax) {\n            calculateObjectValue(this, this.options.ajax, [request], null);\n        } else {\n            if (this._xhr && this._xhr.readyState !== 4) {\n                this._xhr.abort();\n            }\n            this._xhr = $.ajax(request);\n        }\n    };\n\n    BootstrapTable.prototype.initSearchText = function () {\n        if (this.options.search) {\n            if (this.options.searchText !== '') {\n                var $search = this.$toolbar.find('.search input');\n                $search.val(this.options.searchText);\n                this.onSearch({currentTarget: $search});\n            }\n        }\n    };\n\n    BootstrapTable.prototype.getCaret = function () {\n        var that = this;\n\n        $.each(this.$header.find('th'), function (i, th) {\n            $(th).find('.sortable').removeClass('desc asc').addClass($(th).data('field') === that.options.sortName ? that.options.sortOrder : 'both');\n        });\n    };\n\n    BootstrapTable.prototype.updateSelected = function () {\n        var checkAll = this.$selectItem.filter(':enabled').length &&\n            this.$selectItem.filter(':enabled').length ===\n            this.$selectItem.filter(':enabled').filter(':checked').length;\n\n        this.$selectAll.add(this.$selectAll_).prop('checked', checkAll);\n\n        this.$selectItem.each(function () {\n            $(this).closest('tr')[$(this).prop('checked') ? 'addClass' : 'removeClass']('selected');\n        });\n    };\n\n    BootstrapTable.prototype.updateRows = function () {\n        var that = this;\n\n        this.$selectItem.each(function () {\n            that.data[$(this).data('index')][that.header.stateField] = $(this).prop('checked');\n        });\n    };\n\n    BootstrapTable.prototype.resetRows = function () {\n        var that = this;\n\n        $.each(this.data, function (i, row) {\n            that.$selectAll.prop('checked', false);\n            that.$selectItem.prop('checked', false);\n            if (that.header.stateField) {\n                row[that.header.stateField] = false;\n            }\n        });\n        this.initHiddenRows();\n    };\n\n    BootstrapTable.prototype.trigger = function (name) {\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        name += '.bs.table';\n        this.options[BootstrapTable.EVENTS[name]].apply(this.options, args);\n        this.$el.trigger($.Event(name), args);\n\n        this.options.onAll(name, args);\n        this.$el.trigger($.Event('all.bs.table'), [name, args]);\n    };\n\n    BootstrapTable.prototype.resetHeader = function () {\n        // fix #61: the hidden table reset header bug.\n        // fix bug: get $el.css('width') error sometime (height = 500)\n        clearTimeout(this.timeoutId_);\n        this.timeoutId_ = setTimeout($.proxy(this.fitHeader, this), this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitHeader = function () {\n        var that = this,\n            fixedBody,\n            scrollWidth,\n            focused,\n            focusedTemp;\n\n        if (that.$el.is(':hidden')) {\n            that.timeoutId_ = setTimeout($.proxy(that.fitHeader, that), 100);\n            return;\n        }\n        fixedBody = this.$tableBody.get(0);\n\n        scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth &&\n        fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.outerHeight() ?\n            getScrollBarWidth() : 0;\n\n        this.$el.css('margin-top', -this.$header.outerHeight());\n\n        focused = $(':focus');\n        if (focused.length > 0) {\n            var $th = focused.parents('th');\n            if ($th.length > 0) {\n                var dataField = $th.attr('data-field');\n                if (dataField !== undefined) {\n                    var $headerTh = this.$header.find(\"[data-field='\" + dataField + \"']\");\n                    if ($headerTh.length > 0) {\n                        $headerTh.find(\":input\").addClass(\"focus-temp\");\n                    }\n                }\n            }\n        }\n\n        this.$header_ = this.$header.clone(true, true);\n        this.$selectAll_ = this.$header_.find('[name=\"btSelectAll\"]');\n        this.$tableHeader.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', this.$el.outerWidth())\n            .html('').attr('class', this.$el.attr('class'))\n            .append(this.$header_);\n\n\n        focusedTemp = $('.focus-temp:visible:eq(0)');\n        if (focusedTemp.length > 0) {\n            focusedTemp.focus();\n            this.$header.find('.focus-temp').removeClass('focus-temp');\n        }\n\n        // fix bug: $.data() is not working as expected after $.append()\n        this.$header.find('th[data-field]').each(function (i) {\n            that.$header_.find(sprintf('th[data-field=\"%s\"]', $(this).data('field'))).data($(this).data());\n        });\n\n        var visibleFields = this.getVisibleFields(),\n            $ths = this.$header_.find('th');\n\n        this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) {\n            var $this = $(this),\n                index = i;\n\n            if (that.options.detailView && !that.options.cardView) {\n                if (i === 0) {\n                    that.$header_.find('th.detail').find('.fht-cell').width($this.innerWidth());\n                }\n                index = i - 1;\n            }\n\n            var $th = that.$header_.find(sprintf('th[data-field=\"%s\"]', visibleFields[index]));\n            if ($th.length > 1) {\n                $th = $($ths[$this[0].cellIndex]);\n            }\n\n            $th.find('.fht-cell').width($this.innerWidth());\n        });\n        // horizontal scroll event\n        // TODO: it's probably better improving the layout than binding to scroll event\n        this.$tableBody.off('scroll').on('scroll', function () {\n            that.$tableHeader.scrollLeft($(this).scrollLeft());\n\n            if (that.options.showFooter && !that.options.cardView) {\n                that.$tableFooter.scrollLeft($(this).scrollLeft());\n            }\n        });\n        that.trigger('post-header');\n    };\n\n    BootstrapTable.prototype.resetFooter = function () {\n        var that = this,\n            data = that.getData(),\n            html = [];\n\n        if (!this.options.showFooter || this.options.cardView) { //do nothing\n            return;\n        }\n\n        if (!this.options.cardView && this.options.detailView) {\n            html.push('<td><div class=\"th-inner\">&nbsp;</div><div class=\"fht-cell\"></div></td>');\n        }\n\n        $.each(this.columns, function (i, column) {\n            var key,\n                falign = '', // footer align style\n                valign = '',\n                csses = [],\n                style = {},\n                class_ = sprintf(' class=\"%s\"', column['class']);\n\n            if (!column.visible) {\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            falign = sprintf('text-align: %s; ', column.falign ? column.falign : column.align);\n            valign = sprintf('vertical-align: %s; ', column.valign);\n\n            style = calculateObjectValue(null, that.options.footerStyle);\n\n            if (style && style.css) {\n                for (key in style.css) {\n                    csses.push(key + ': ' + style.css[key]);\n                }\n            }\n\n            html.push('<td', class_, sprintf(' style=\"%s\"', falign + valign + csses.concat().join('; ')), '>');\n            html.push('<div class=\"th-inner\">');\n\n            html.push(calculateObjectValue(column, column.footerFormatter, [data], '&nbsp;') || '&nbsp;');\n\n            html.push('</div>');\n            html.push('<div class=\"fht-cell\"></div>');\n            html.push('</div>');\n            html.push('</td>');\n        });\n\n        this.$tableFooter.find('tr').html(html.join(''));\n        this.$tableFooter.show();\n        clearTimeout(this.timeoutFooter_);\n        this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this),\n            this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitFooter = function () {\n        var that = this,\n            $footerTd,\n            elWidth,\n            scrollWidth;\n\n        clearTimeout(this.timeoutFooter_);\n        if (this.$el.is(':hidden')) {\n            this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this), 100);\n            return;\n        }\n\n        elWidth = this.$el.css('width');\n        scrollWidth = elWidth > this.$tableBody.width() ? getScrollBarWidth() : 0;\n\n        this.$tableFooter.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', elWidth)\n            .attr('class', this.$el.attr('class'));\n\n        $footerTd = this.$tableFooter.find('td');\n\n        this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) {\n            var $this = $(this);\n\n            $footerTd.eq(i).find('.fht-cell').width($this.innerWidth());\n        });\n    };\n\n    BootstrapTable.prototype.toggleColumn = function (index, checked, needUpdate) {\n        if (index === -1) {\n            return;\n        }\n        this.columns[index].visible = checked;\n        this.initHeader();\n        this.initSearch();\n        this.initPagination();\n        this.initBody();\n\n        if (this.options.showColumns) {\n            var $items = this.$toolbar.find('.keep-open input').prop('disabled', false);\n\n            if (needUpdate) {\n                $items.filter(sprintf('[value=\"%s\"]', index)).prop('checked', checked);\n            }\n\n            if ($items.filter(':checked').length <= this.options.minimumCountColumns) {\n                $items.filter(':checked').prop('disabled', true);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.getVisibleFields = function () {\n        var that = this,\n            visibleFields = [];\n\n        $.each(this.header.fields, function (j, field) {\n            var column = that.columns[getFieldIndex(that.columns, field)];\n\n            if (!column.visible) {\n                return;\n            }\n            visibleFields.push(field);\n        });\n        return visibleFields;\n    };\n\n    // PUBLIC FUNCTION DEFINITION\n    // =======================\n\n    BootstrapTable.prototype.resetView = function (params) {\n        var padding = 0;\n\n        if (params && params.height) {\n            this.options.height = params.height;\n        }\n\n        this.$selectAll.prop('checked', this.$selectItem.length > 0 &&\n            this.$selectItem.length === this.$selectItem.filter(':checked').length);\n\n        if (this.options.height) {\n            var toolbarHeight = this.$toolbar.outerHeight(true),\n                paginationHeight = this.$pagination.outerHeight(true),\n                height = this.options.height - toolbarHeight - paginationHeight;\n\n            this.$tableContainer.css('height', height + 'px');\n        }\n\n        if (this.options.cardView) {\n            // remove the element css\n            this.$el.css('margin-top', '0');\n            this.$tableContainer.css('padding-bottom', '0');\n            this.$tableFooter.hide();\n            return;\n        }\n\n        if (this.options.showHeader && this.options.height) {\n            this.$tableHeader.show();\n            this.resetHeader();\n            padding += this.$header.outerHeight();\n        } else {\n            this.$tableHeader.hide();\n            this.trigger('post-header');\n        }\n\n        if (this.options.showFooter) {\n            this.resetFooter();\n            if (this.options.height) {\n                padding += this.$tableFooter.outerHeight() + 1;\n            }\n        }\n\n        // Assign the correct sortable arrow\n        this.getCaret();\n        this.$tableContainer.css('padding-bottom', padding + 'px');\n        this.trigger('reset-view');\n    };\n\n    BootstrapTable.prototype.getData = function (useCurrentPage) {\n        return (this.searchText || !$.isEmptyObject(this.filterColumns) || !$.isEmptyObject(this.filterColumnsPartial)) ?\n            (useCurrentPage ? this.data.slice(this.pageFrom - 1, this.pageTo) : this.data) :\n            (useCurrentPage ? this.options.data.slice(this.pageFrom - 1, this.pageTo) : this.options.data);\n    };\n\n    BootstrapTable.prototype.load = function (data) {\n        var fixedScroll = false;\n\n        // #431: support pagination\n        if (this.options.sidePagination === 'server') {\n            this.options.totalRows = data[this.options.totalField];\n            fixedScroll = data.fixedScroll;\n            data = data[this.options.dataField];\n        } else if (!$.isArray(data)) { // support fixedScroll\n            fixedScroll = data.fixedScroll;\n            data = data.data;\n        }\n\n        this.initData(data);\n        this.initSearch();\n        this.initPagination();\n        this.initBody(fixedScroll);\n    };\n\n    BootstrapTable.prototype.append = function (data) {\n        this.initData(data, 'append');\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.prepend = function (data) {\n        this.initData(data, 'prepend');\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.remove = function (params) {\n        var len = this.options.data.length,\n            i, row;\n\n        if (!params.hasOwnProperty('field') || !params.hasOwnProperty('values')) {\n            return;\n        }\n\n        for (i = len - 1; i >= 0; i--) {\n            row = this.options.data[i];\n\n            if (!row.hasOwnProperty(params.field)) {\n                continue;\n            }\n            if ($.inArray(row[params.field], params.values) !== -1) {\n                this.options.data.splice(i, 1);\n                if (this.options.sidePagination === 'server') {\n                    this.options.totalRows -= 1;\n                }\n            }\n        }\n\n        if (len === this.options.data.length) {\n            return;\n        }\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.removeAll = function () {\n        if (this.options.data.length > 0) {\n            this.options.data.splice(0, this.options.data.length);\n            this.initSearch();\n            this.initPagination();\n            this.initBody(true);\n        }\n    };\n\n    BootstrapTable.prototype.getRowByUniqueId = function (id) {\n        var uniqueId = this.options.uniqueId,\n            len = this.options.data.length,\n            dataRow = null,\n            i, row, rowUniqueId;\n\n        for (i = len - 1; i >= 0; i--) {\n            row = this.options.data[i];\n\n            if (row.hasOwnProperty(uniqueId)) { // uniqueId is a column\n                rowUniqueId = row[uniqueId];\n            } else if(row._data.hasOwnProperty(uniqueId)) { // uniqueId is a row data property\n                rowUniqueId = row._data[uniqueId];\n            } else {\n                continue;\n            }\n\n            if (typeof rowUniqueId === 'string') {\n                id = id.toString();\n            } else if (typeof rowUniqueId === 'number') {\n                if ((Number(rowUniqueId) === rowUniqueId) && (rowUniqueId % 1 === 0)) {\n                    id = parseInt(id);\n                } else if ((rowUniqueId === Number(rowUniqueId)) && (rowUniqueId !== 0)) {\n                    id = parseFloat(id);\n                }\n            }\n\n            if (rowUniqueId === id) {\n                dataRow = row;\n                break;\n            }\n        }\n\n        return dataRow;\n    };\n\n    BootstrapTable.prototype.removeByUniqueId = function (id) {\n        var len = this.options.data.length,\n            row = this.getRowByUniqueId(id);\n\n        if (row) {\n            this.options.data.splice(this.options.data.indexOf(row), 1);\n        }\n\n        if (len === this.options.data.length) {\n            return;\n        }\n\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.updateByUniqueId = function (params) {\n        var that = this;\n        var allParams = $.isArray(params) ? params : [ params ];\n\n        $.each(allParams, function(i, params) {\n            var rowId;\n\n            if (!params.hasOwnProperty('id') || !params.hasOwnProperty('row')) {\n                return;\n            }\n\n            rowId = $.inArray(that.getRowByUniqueId(params.id), that.options.data);\n\n            if (rowId === -1) {\n                return;\n            }\n            $.extend(that.options.data[rowId], params.row);\n        });\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.insertRow = function (params) {\n        if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n            return;\n        }\n        this.data.splice(params.index, 0, params.row);\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.updateRow = function (params) {\n        var that = this;\n        var allParams = $.isArray(params) ? params : [ params ];\n\n        $.each(allParams, function(i, params) {\n            if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n                return;\n            }\n            $.extend(that.options.data[params.index], params.row);\n        });\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.initHiddenRows = function () {\n        this.hiddenRows = [];\n    };\n\n    BootstrapTable.prototype.showRow = function (params) {\n        this.toggleRow(params, true);\n    };\n\n    BootstrapTable.prototype.hideRow = function (params) {\n        this.toggleRow(params, false);\n    };\n\n    BootstrapTable.prototype.toggleRow = function (params, visible) {\n        var row, index;\n\n        if (params.hasOwnProperty('index')) {\n            row = this.getData()[params.index];\n        } else if (params.hasOwnProperty('uniqueId')) {\n            row = this.getRowByUniqueId(params.uniqueId);\n        }\n\n        if (!row) {\n            return;\n        }\n\n        index = $.inArray(row, this.hiddenRows);\n\n        if (!visible && index === -1) {\n            this.hiddenRows.push(row);\n        } else if (visible && index > -1) {\n            this.hiddenRows.splice(index, 1);\n        }\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.getHiddenRows = function (show) {\n        var that = this,\n            data = this.getData(),\n            rows = [];\n\n        $.each(data, function (i, row) {\n            if ($.inArray(row, that.hiddenRows) > -1) {\n                rows.push(row);\n            }\n        });\n        this.hiddenRows = rows;\n        return rows;\n    };\n\n    BootstrapTable.prototype.mergeCells = function (options) {\n        var row = options.index,\n            col = $.inArray(options.field, this.getVisibleFields()),\n            rowspan = options.rowspan || 1,\n            colspan = options.colspan || 1,\n            i, j,\n            $tr = this.$body.find('>tr'),\n            $td;\n\n        if (this.options.detailView && !this.options.cardView) {\n            col += 1;\n        }\n\n        $td = $tr.eq(row).find('>td').eq(col);\n\n        if (row < 0 || col < 0 || row >= this.data.length) {\n            return;\n        }\n\n        for (i = row; i < row + rowspan; i++) {\n            for (j = col; j < col + colspan; j++) {\n                $tr.eq(i).find('>td').eq(j).hide();\n            }\n        }\n\n        $td.attr('rowspan', rowspan).attr('colspan', colspan).show();\n    };\n\n    BootstrapTable.prototype.updateCell = function (params) {\n        if (!params.hasOwnProperty('index') ||\n            !params.hasOwnProperty('field') ||\n            !params.hasOwnProperty('value')) {\n            return;\n        }\n        this.data[params.index][params.field] = params.value;\n\n        if (params.reinit === false) {\n            return;\n        }\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.getOptions = function () {\n        return this.options;\n    };\n\n    BootstrapTable.prototype.getSelections = function () {\n        var that = this;\n\n        return $.grep(this.options.data, function (row) {\n            // fix #2424: from html with checkbox\n            return row[that.header.stateField] === true;\n        });\n    };\n\n    BootstrapTable.prototype.getAllSelections = function () {\n        var that = this;\n\n        return $.grep(this.options.data, function (row) {\n            return row[that.header.stateField];\n        });\n    };\n\n    BootstrapTable.prototype.checkAll = function () {\n        this.checkAll_(true);\n    };\n\n    BootstrapTable.prototype.uncheckAll = function () {\n        this.checkAll_(false);\n    };\n\n    BootstrapTable.prototype.checkInvert = function () {\n        var that = this;\n        var rows = that.$selectItem.filter(':enabled');\n        var checked = rows.filter(':checked');\n        rows.each(function() {\n            $(this).prop('checked', !$(this).prop('checked'));\n        });\n        that.updateRows();\n        that.updateSelected();\n        that.trigger('uncheck-some', checked);\n        checked = that.getSelections();\n        that.trigger('check-some', checked);\n    };\n\n    BootstrapTable.prototype.checkAll_ = function (checked) {\n        var rows;\n        if (!checked) {\n            rows = this.getSelections();\n        }\n        this.$selectAll.add(this.$selectAll_).prop('checked', checked);\n        this.$selectItem.filter(':enabled').prop('checked', checked);\n        this.updateRows();\n        if (checked) {\n            rows = this.getSelections();\n        }\n        this.trigger(checked ? 'check-all' : 'uncheck-all', rows);\n    };\n\n    BootstrapTable.prototype.check = function (index) {\n        this.check_(true, index);\n    };\n\n    BootstrapTable.prototype.uncheck = function (index) {\n        this.check_(false, index);\n    };\n\n    BootstrapTable.prototype.check_ = function (checked, index) {\n        var $el = this.$selectItem.filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n        this.data[index][this.header.stateField] = checked;\n        this.updateSelected();\n        this.trigger(checked ? 'check' : 'uncheck', this.data[index], $el);\n    };\n\n    BootstrapTable.prototype.checkBy = function (obj) {\n        this.checkBy_(true, obj);\n    };\n\n    BootstrapTable.prototype.uncheckBy = function (obj) {\n        this.checkBy_(false, obj);\n    };\n\n    BootstrapTable.prototype.checkBy_ = function (checked, obj) {\n        if (!obj.hasOwnProperty('field') || !obj.hasOwnProperty('values')) {\n            return;\n        }\n\n        var that = this,\n            rows = [];\n        $.each(this.options.data, function (index, row) {\n            if (!row.hasOwnProperty(obj.field)) {\n                return false;\n            }\n            if ($.inArray(row[obj.field], obj.values) !== -1) {\n                var $el = that.$selectItem.filter(':enabled')\n                    .filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n                row[that.header.stateField] = checked;\n                rows.push(row);\n                that.trigger(checked ? 'check' : 'uncheck', row, $el);\n            }\n        });\n        this.updateSelected();\n        this.trigger(checked ? 'check-some' : 'uncheck-some', rows);\n    };\n\n    BootstrapTable.prototype.destroy = function () {\n        this.$el.insertBefore(this.$container);\n        $(this.options.toolbar).insertBefore(this.$el);\n        this.$container.next().remove();\n        this.$container.remove();\n        this.$el.html(this.$el_.html())\n            .css('margin-top', '0')\n            .attr('class', this.$el_.attr('class') || ''); // reset the class\n    };\n\n    BootstrapTable.prototype.showLoading = function () {\n        this.$tableLoading.show();\n    };\n\n    BootstrapTable.prototype.hideLoading = function () {\n        this.$tableLoading.hide();\n    };\n\n    BootstrapTable.prototype.togglePagination = function () {\n        this.options.pagination = !this.options.pagination;\n        var button = this.$toolbar.find('button[name=\"paginationSwitch\"] i');\n        if (this.options.pagination) {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchDown);\n        } else {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchUp);\n        }\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.refresh = function (params) {\n        if (params && params.url) {\n            this.options.url = params.url;\n        }\n        if (params && params.pageNumber) {\n            this.options.pageNumber = params.pageNumber;\n        }\n        if (params && params.pageSize) {\n            this.options.pageSize = params.pageSize;\n        }\n        this.initServer(params && params.silent,\n            params && params.query, params && params.url);\n        this.trigger('refresh', params);\n    };\n\n    BootstrapTable.prototype.resetWidth = function () {\n        if (this.options.showHeader && this.options.height) {\n            this.fitHeader();\n        }\n        if (this.options.showFooter) {\n            this.fitFooter();\n        }\n    };\n\n    BootstrapTable.prototype.showColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.columns, field), true, true);\n    };\n\n    BootstrapTable.prototype.hideColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.columns, field), false, true);\n    };\n\n    BootstrapTable.prototype.getHiddenColumns = function () {\n        return $.grep(this.columns, function (column) {\n            return !column.visible;\n        });\n    };\n\n    BootstrapTable.prototype.getVisibleColumns = function () {\n        return $.grep(this.columns, function (column) {\n            return column.visible;\n        });\n    };\n\n    BootstrapTable.prototype.toggleAllColumns = function (visible) {\n        $.each(this.columns, function (i, column) {\n            this.columns[i].visible = visible;\n        });\n\n        this.initHeader();\n        this.initSearch();\n        this.initPagination();\n        this.initBody();\n        if (this.options.showColumns) {\n            var $items = this.$toolbar.find('.keep-open input').prop('disabled', false);\n\n            if ($items.filter(':checked').length <= this.options.minimumCountColumns) {\n                $items.filter(':checked').prop('disabled', true);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.showAllColumns = function () {\n        this.toggleAllColumns(true);\n    };\n\n    BootstrapTable.prototype.hideAllColumns = function () {\n        this.toggleAllColumns(false);\n    };\n\n    BootstrapTable.prototype.filterBy = function (columns) {\n        this.filterColumns = $.isEmptyObject(columns) ? {} : columns;\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.scrollTo = function (value) {\n        if (typeof value === 'string') {\n            value = value === 'bottom' ? this.$tableBody[0].scrollHeight : 0;\n        }\n        if (typeof value === 'number') {\n            this.$tableBody.scrollTop(value);\n        }\n        if (typeof value === 'undefined') {\n            return this.$tableBody.scrollTop();\n        }\n    };\n\n    BootstrapTable.prototype.getScrollPosition = function () {\n        return this.scrollTo();\n    };\n\n    BootstrapTable.prototype.selectPage = function (page) {\n        if (page > 0 && page <= this.options.totalPages) {\n            this.options.pageNumber = page;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.prevPage = function () {\n        if (this.options.pageNumber > 1) {\n            this.options.pageNumber--;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.nextPage = function () {\n        if (this.options.pageNumber < this.options.totalPages) {\n            this.options.pageNumber++;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.toggleView = function () {\n        this.options.cardView = !this.options.cardView;\n        this.initHeader();\n        // Fixed remove toolbar when click cardView button.\n        //that.initToolbar();\n        this.initBody();\n        this.trigger('toggle', this.options.cardView);\n    };\n\n    BootstrapTable.prototype.refreshOptions = function (options) {\n        //If the objects are equivalent then avoid the call of destroy / init methods\n        if (compareObjects(this.options, options, true)) {\n            return;\n        }\n        this.options = $.extend(this.options, options);\n        this.trigger('refresh-options', this.options);\n        this.destroy();\n        this.init();\n    };\n\n    BootstrapTable.prototype.resetSearch = function (text) {\n        var $search = this.$toolbar.find('.search input');\n        $search.val(text || '');\n        this.onSearch({currentTarget: $search});\n    };\n\n    BootstrapTable.prototype.expandRow_ = function (expand, index) {\n        var $tr = this.$body.find(sprintf('> tr[data-index=\"%s\"]', index));\n        if ($tr.next().is('tr.detail-view') === (expand ? false : true)) {\n            $tr.find('> td > .detail-icon').click();\n        }\n    };\n\n    BootstrapTable.prototype.expandRow = function (index) {\n        this.expandRow_(true, index);\n    };\n\n    BootstrapTable.prototype.collapseRow = function (index) {\n        this.expandRow_(false, index);\n    };\n\n    BootstrapTable.prototype.expandAllRows = function (isSubTable) {\n        if (isSubTable) {\n            var $tr = this.$body.find(sprintf('> tr[data-index=\"%s\"]', 0)),\n                that = this,\n                detailIcon = null,\n                executeInterval = false,\n                idInterval = -1;\n\n            if (!$tr.next().is('tr.detail-view')) {\n                $tr.find('> td > .detail-icon').click();\n                executeInterval = true;\n            } else if (!$tr.next().next().is('tr.detail-view')) {\n                $tr.next().find(\".detail-icon\").click();\n                executeInterval = true;\n            }\n\n            if (executeInterval) {\n                try {\n                    idInterval = setInterval(function () {\n                        detailIcon = that.$body.find(\"tr.detail-view\").last().find(\".detail-icon\");\n                        if (detailIcon.length > 0) {\n                            detailIcon.click();\n                        } else {\n                            clearInterval(idInterval);\n                        }\n                    }, 1);\n                } catch (ex) {\n                    clearInterval(idInterval);\n                }\n            }\n        } else {\n            var trs = this.$body.children();\n            for (var i = 0; i < trs.length; i++) {\n                this.expandRow_(true, $(trs[i]).data(\"index\"));\n            }\n        }\n    };\n\n    BootstrapTable.prototype.collapseAllRows = function (isSubTable) {\n        if (isSubTable) {\n            this.expandRow_(false, 0);\n        } else {\n            var trs = this.$body.children();\n            for (var i = 0; i < trs.length; i++) {\n                this.expandRow_(false, $(trs[i]).data(\"index\"));\n            }\n        }\n    };\n\n    BootstrapTable.prototype.updateFormatText = function (name, text) {\n        if (this.options[sprintf('format%s', name)]) {\n            if (typeof text === 'string') {\n                this.options[sprintf('format%s', name)] = function () {\n                    return text;\n                };\n            } else if (typeof text === 'function') {\n                this.options[sprintf('format%s', name)] = text;\n            }\n        }\n        this.initToolbar();\n        this.initPagination();\n        this.initBody();\n    };\n\n    // BOOTSTRAP TABLE PLUGIN DEFINITION\n    // =======================\n\n    var allowedMethods = [\n        'getOptions',\n        'getSelections', 'getAllSelections', 'getData',\n        'load', 'append', 'prepend', 'remove', 'removeAll',\n        'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId',\n        'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows',\n        'mergeCells',\n        'checkAll', 'uncheckAll', 'checkInvert',\n        'check', 'uncheck',\n        'checkBy', 'uncheckBy',\n        'refresh',\n        'resetView',\n        'resetWidth',\n        'destroy',\n        'showLoading', 'hideLoading',\n        'showColumn', 'hideColumn', 'getHiddenColumns', 'getVisibleColumns',\n        'showAllColumns', 'hideAllColumns',\n        'filterBy',\n        'scrollTo',\n        'getScrollPosition',\n        'selectPage', 'prevPage', 'nextPage',\n        'togglePagination',\n        'toggleView',\n        'refreshOptions',\n        'resetSearch',\n        'expandRow', 'collapseRow', 'expandAllRows', 'collapseAllRows',\n        'updateFormatText'\n    ];\n\n    $.fn.bootstrapTable = function (option) {\n        var value,\n            args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n            var $this = $(this),\n                data = $this.data('bootstrap.table'),\n                options = $.extend({}, BootstrapTable.DEFAULTS, $this.data(),\n                    typeof option === 'object' && option);\n\n            if (typeof option === 'string') {\n                if ($.inArray(option, allowedMethods) < 0) {\n                    throw new Error(\"Unknown method: \" + option);\n                }\n\n                if (!data) {\n                    return;\n                }\n\n                value = data[option].apply(data, args);\n\n                if (option === 'destroy') {\n                    $this.removeData('bootstrap.table');\n                }\n            }\n\n            if (!data) {\n                $this.data('bootstrap.table', (data = new BootstrapTable(this, options)));\n            }\n        });\n\n        return typeof value === 'undefined' ? this : value;\n    };\n\n    $.fn.bootstrapTable.Constructor = BootstrapTable;\n    $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS;\n    $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS;\n    $.fn.bootstrapTable.locales = BootstrapTable.LOCALES;\n    $.fn.bootstrapTable.methods = allowedMethods;\n    $.fn.bootstrapTable.utils = {\n        sprintf: sprintf,\n        getFieldIndex: getFieldIndex,\n        compareObjects: compareObjects,\n        calculateObjectValue: calculateObjectValue,\n        getItemField: getItemField,\n        objectKeys: objectKeys,\n        isIEBrowser: isIEBrowser\n    };\n\n    // BOOTSTRAP TABLE INIT\n    // =======================\n\n    $(function () {\n        $('[data-toggle=\"table\"]').bootstrapTable();\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/bootstrap-tagsinput/css/bootstrap-tagsinput.css",
    "content": "/*\n * bootstrap-tagsinput v0.8.0\n * \n */\n\n.bootstrap-tagsinput {\n  background-color: #fff;\n  border: 1px solid #ccc;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  display: inline-block;\n  padding: 4px 6px;\n  color: #555;\n  vertical-align: middle;\n  border-radius: 4px;\n  max-width: 100%;\n  line-height: 22px;\n  cursor: text;\n}\n.bootstrap-tagsinput input {\n  border: none;\n  box-shadow: none;\n  outline: none;\n  background-color: transparent;\n  padding: 0 6px;\n  margin: 0;\n  width: auto;\n  max-width: inherit;\n}\n.bootstrap-tagsinput.form-control input::-moz-placeholder {\n  color: #777;\n  opacity: 1;\n}\n.bootstrap-tagsinput.form-control input:-ms-input-placeholder {\n  color: #777;\n}\n.bootstrap-tagsinput.form-control input::-webkit-input-placeholder {\n  color: #777;\n}\n.bootstrap-tagsinput input:focus {\n  border: none;\n  box-shadow: none;\n}\n.bootstrap-tagsinput .tag {\n  margin-right: 2px;\n  color: white;\n}\n.bootstrap-tagsinput .tag [data-role=\"remove\"] {\n  margin-left: 8px;\n  cursor: pointer;\n}\n.bootstrap-tagsinput .tag [data-role=\"remove\"]:after {\n  content: \"x\";\n  padding: 0px 2px;\n}\n.bootstrap-tagsinput .tag [data-role=\"remove\"]:hover {\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.bootstrap-tagsinput .tag [data-role=\"remove\"]:hover:active {\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/c3/c3.css",
    "content": "/*-- Chart --*/\n.c3 svg {\n  font: 10px sans-serif; }\n\n.c3 path, .c3 line {\n  fill: none;\n  stroke: #000; }\n\n.c3 text {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none; }\n\n.c3-legend-item-tile, .c3-xgrid-focus, .c3-ygrid, .c3-event-rect, .c3-bars path {\n  shape-rendering: crispEdges; }\n\n.c3-chart-arc path {\n  stroke: #fff; }\n\n.c3-chart-arc text {\n  fill: #fff;\n  font-size: 13px; }\n\n/*-- Axis --*/\n/*-- Grid --*/\n.c3-grid line {\n  stroke: #aaa; }\n\n.c3-grid text {\n  fill: #aaa; }\n\n.c3-xgrid, .c3-ygrid {\n  stroke-dasharray: 3 3; }\n\n/*-- Text on Chart --*/\n.c3-text.c3-empty {\n  fill: #808080;\n  font-size: 2em; }\n\n/*-- Line --*/\n.c3-line {\n  stroke-width: 1px; }\n\n/*-- Point --*/\n.c3-circle._expanded_ {\n  stroke-width: 1px;\n  stroke: white; }\n\n.c3-selected-circle {\n  fill: white;\n  stroke-width: 2px; }\n\n/*-- Bar --*/\n.c3-bar {\n  stroke-width: 0; }\n\n.c3-bar._expanded_ {\n  fill-opacity: 0.75; }\n\n/*-- Focus --*/\n.c3-target.c3-focused {\n  opacity: 1; }\n\n.c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {\n  stroke-width: 2px; }\n\n.c3-target.c3-defocused {\n  opacity: 0.3 !important; }\n\n/*-- Region --*/\n.c3-region {\n  fill: steelblue;\n  fill-opacity: 0.1; }\n\n/*-- Brush --*/\n.c3-brush .extent {\n  fill-opacity: 0.1; }\n\n/*-- Select - Drag --*/\n/*-- Legend --*/\n.c3-legend-item {\n  font-size: 12px; }\n\n.c3-legend-item-hidden {\n  opacity: 0.15; }\n\n.c3-legend-background {\n  opacity: 0.75;\n  fill: white;\n  stroke: lightgray;\n  stroke-width: 1; }\n\n/*-- Tooltip --*/\n.c3-tooltip-container {\n  z-index: 10; }\n\n.c3-tooltip {\n  border-collapse: collapse;\n  border-spacing: 0;\n  background-color: #fff;\n  empty-cells: show;\n  -webkit-box-shadow: 7px 7px 12px -9px #777777;\n  -moz-box-shadow: 7px 7px 12px -9px #777777;\n  box-shadow: 7px 7px 12px -9px #777777;\n  opacity: 0.9; }\n\n.c3-tooltip tr {\n  border: 1px solid #CCC; }\n\n.c3-tooltip th {\n  background-color: #aaa;\n  font-size: 14px;\n  padding: 2px 5px;\n  text-align: left;\n  color: #FFF; }\n\n.c3-tooltip td {\n  font-size: 13px;\n  padding: 3px 6px;\n  background-color: #fff;\n  border-left: 1px dotted #999; }\n\n.c3-tooltip td > span {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin-right: 6px; }\n\n.c3-tooltip td.value {\n  text-align: right; }\n\n/*-- Area --*/\n.c3-area {\n  stroke-width: 0;\n  opacity: 0.2; }\n\n/*-- Arc --*/\n.c3-chart-arcs-title {\n  dominant-baseline: middle;\n  font-size: 1.3em; }\n\n.c3-chart-arcs .c3-chart-arcs-background {\n  fill: #e0e0e0;\n  stroke: none; }\n\n.c3-chart-arcs .c3-chart-arcs-gauge-unit {\n  fill: #000;\n  font-size: 16px; }\n\n.c3-chart-arcs .c3-chart-arcs-gauge-max {\n  fill: #777; }\n\n.c3-chart-arcs .c3-chart-arcs-gauge-min {\n  fill: #777; }\n\n.c3-chart-arc .c3-gauge-value {\n  fill: #000;\n  /*  font-size: 28px !important;*/ }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/c3/c3.js",
    "content": "(function (window) {\n    'use strict';\n\n    /*global define, module, exports, require */\n\n    var c3 = { version: \"0.4.10\" };\n\n    var c3_chart_fn,\n        c3_chart_internal_fn,\n        c3_chart_internal_axis_fn;\n\n    function API(owner) {\n        this.owner = owner;\n    }\n\n    function inherit(base, derived) {\n\n        if (Object.create) {\n            derived.prototype = Object.create(base.prototype);\n        } else {\n            var f = function f() {};\n            f.prototype = base.prototype;\n            derived.prototype = new f();\n        }\n\n        derived.prototype.constructor = derived;\n\n        return derived;\n    }\n\n    function Chart(config) {\n        var $$ = this.internal = new ChartInternal(this);\n        $$.loadConfig(config);\n        $$.init();\n\n        // bind \"this\" to nested API\n        (function bindThis(fn, target, argThis) {\n            Object.keys(fn).forEach(function (key) {\n                target[key] = fn[key].bind(argThis);\n                if (Object.keys(fn[key]).length > 0) {\n                    bindThis(fn[key], target[key], argThis);\n                }\n            });\n        })(c3_chart_fn, this, this);\n    }\n\n    function ChartInternal(api) {\n        var $$ = this;\n        $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require(\"d3\") : undefined;\n        $$.api = api;\n        $$.config = $$.getDefaultConfig();\n        $$.data = {};\n        $$.cache = {};\n        $$.axes = {};\n    }\n\n    c3.generate = function (config) {\n        return new Chart(config);\n    };\n\n    c3.chart = {\n        fn: Chart.prototype,\n        internal: {\n            fn: ChartInternal.prototype,\n            axis: {\n                fn: Axis.prototype\n            }\n        }\n    };\n    c3_chart_fn = c3.chart.fn;\n    c3_chart_internal_fn = c3.chart.internal.fn;\n    c3_chart_internal_axis_fn = c3.chart.internal.axis.fn;\n\n    c3_chart_internal_fn.init = function () {\n        var $$ = this, config = $$.config;\n\n        $$.initParams();\n\n        if (config.data_url) {\n            $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_keys, $$.initWithData);\n        }\n        else if (config.data_json) {\n            $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));\n        }\n        else if (config.data_rows) {\n            $$.initWithData($$.convertRowsToData(config.data_rows));\n        }\n        else if (config.data_columns) {\n            $$.initWithData($$.convertColumnsToData(config.data_columns));\n        }\n        else {\n            throw Error('url or json or rows or columns is required.');\n        }\n    };\n\n    c3_chart_internal_fn.initParams = function () {\n        var $$ = this, d3 = $$.d3, config = $$.config;\n\n        // MEMO: clipId needs to be unique because it conflicts when multiple charts exist\n        $$.clipId = \"c3-\" + (+new Date()) + '-clip',\n        $$.clipIdForXAxis = $$.clipId + '-xaxis',\n        $$.clipIdForYAxis = $$.clipId + '-yaxis',\n        $$.clipIdForGrid = $$.clipId + '-grid',\n        $$.clipIdForSubchart = $$.clipId + '-subchart',\n        $$.clipPath = $$.getClipPath($$.clipId),\n        $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis),\n        $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);\n        $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid),\n        $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart),\n\n        $$.dragStart = null;\n        $$.dragging = false;\n        $$.flowing = false;\n        $$.cancelClick = false;\n        $$.mouseover = false;\n        $$.transiting = false;\n\n        $$.color = $$.generateColor();\n        $$.levelColor = $$.generateLevelColor();\n\n        $$.dataTimeFormat = config.data_xLocaltime ? d3.time.format : d3.time.format.utc;\n        $$.axisTimeFormat = config.axis_x_localtime ? d3.time.format : d3.time.format.utc;\n        $$.defaultAxisTimeFormat = $$.axisTimeFormat.multi([\n            [\".%L\", function (d) { return d.getMilliseconds(); }],\n            [\":%S\", function (d) { return d.getSeconds(); }],\n            [\"%I:%M\", function (d) { return d.getMinutes(); }],\n            [\"%I %p\", function (d) { return d.getHours(); }],\n            [\"%-m/%-d\", function (d) { return d.getDay() && d.getDate() !== 1; }],\n            [\"%-m/%-d\", function (d) { return d.getDate() !== 1; }],\n            [\"%-m/%-d\", function (d) { return d.getMonth(); }],\n            [\"%Y/%-m/%-d\", function () { return true; }]\n        ]);\n\n        $$.hiddenTargetIds = [];\n        $$.hiddenLegendIds = [];\n        $$.focusedTargetIds = [];\n        $$.defocusedTargetIds = [];\n\n        $$.xOrient = config.axis_rotated ? \"left\" : \"bottom\";\n        $$.yOrient = config.axis_rotated ? (config.axis_y_inner ? \"top\" : \"bottom\") : (config.axis_y_inner ? \"right\" : \"left\");\n        $$.y2Orient = config.axis_rotated ? (config.axis_y2_inner ? \"bottom\" : \"top\") : (config.axis_y2_inner ? \"left\" : \"right\");\n        $$.subXOrient = config.axis_rotated ? \"left\" : \"bottom\";\n\n        $$.isLegendRight = config.legend_position === 'right';\n        $$.isLegendInset = config.legend_position === 'inset';\n        $$.isLegendTop = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'top-right';\n        $$.isLegendLeft = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'bottom-left';\n        $$.legendStep = 0;\n        $$.legendItemWidth = 0;\n        $$.legendItemHeight = 0;\n\n        $$.currentMaxTickWidths = {\n            x: 0,\n            y: 0,\n            y2: 0\n        };\n\n        $$.rotated_padding_left = 30;\n        $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;\n        $$.rotated_padding_top = 5;\n\n        $$.withoutFadeIn = {};\n\n        $$.intervalForObserveInserted = undefined;\n\n        $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js\n    };\n\n    c3_chart_internal_fn.initChartElements = function () {\n        if (this.initBar) { this.initBar(); }\n        if (this.initLine) { this.initLine(); }\n        if (this.initArc) { this.initArc(); }\n        if (this.initGauge) { this.initGauge(); }\n        if (this.initText) { this.initText(); }\n    };\n\n    c3_chart_internal_fn.initWithData = function (data) {\n        var $$ = this, d3 = $$.d3, config = $$.config;\n        var defs, main, binding = true;\n\n        $$.axis = new Axis($$);\n\n        if ($$.initPie) { $$.initPie(); }\n        if ($$.initBrush) { $$.initBrush(); }\n        if ($$.initZoom) { $$.initZoom(); }\n\n        if (!config.bindto) {\n            $$.selectChart = d3.selectAll([]);\n        }\n        else if (typeof config.bindto.node === 'function') {\n            $$.selectChart = config.bindto;\n        }\n        else {\n            $$.selectChart = d3.select(config.bindto);\n        }\n        if ($$.selectChart.empty()) {\n            $$.selectChart = d3.select(document.createElement('div')).style('opacity', 0);\n            $$.observeInserted($$.selectChart);\n            binding = false;\n        }\n        $$.selectChart.html(\"\").classed(\"c3\", true);\n\n        // Init data as targets\n        $$.data.xs = {};\n        $$.data.targets = $$.convertDataToTargets(data);\n\n        if (config.data_filter) {\n            $$.data.targets = $$.data.targets.filter(config.data_filter);\n        }\n\n        // Set targets to hide if needed\n        if (config.data_hide) {\n            $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);\n        }\n        if (config.legend_hide) {\n            $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);\n        }\n\n        // when gauge, hide legend // TODO: fix\n        if ($$.hasType('gauge')) {\n            config.legend_show = false;\n        }\n\n        // Init sizes and scales\n        $$.updateSizes();\n        $$.updateScales();\n\n        // Set domains for each scale\n        $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));\n        $$.y.domain($$.getYDomain($$.data.targets, 'y'));\n        $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));\n        $$.subX.domain($$.x.domain());\n        $$.subY.domain($$.y.domain());\n        $$.subY2.domain($$.y2.domain());\n\n        // Save original x domain for zoom update\n        $$.orgXDomain = $$.x.domain();\n\n        // Set initialized scales to brush and zoom\n        if ($$.brush) { $$.brush.scale($$.subX); }\n        if (config.zoom_enabled) { $$.zoom.scale($$.x); }\n\n        /*-- Basic Elements --*/\n\n        // Define svgs\n        $$.svg = $$.selectChart.append(\"svg\")\n            .style(\"overflow\", \"hidden\")\n            .on('mouseenter', function () { return config.onmouseover.call($$); })\n            .on('mouseleave', function () { return config.onmouseout.call($$); });\n\n        // Define defs\n        defs = $$.svg.append(\"defs\");\n        $$.clipChart = $$.appendClip(defs, $$.clipId);\n        $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);\n        $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);\n        $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);\n        $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);\n        $$.updateSvgSize();\n\n        // Define regions\n        main = $$.main = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('main'));\n\n        if ($$.initSubchart) { $$.initSubchart(); }\n        if ($$.initTooltip) { $$.initTooltip(); }\n        if ($$.initLegend) { $$.initLegend(); }\n\n        /*-- Main Region --*/\n\n        // text when empty\n        main.append(\"text\")\n            .attr(\"class\", CLASS.text + ' ' + CLASS.empty)\n            .attr(\"text-anchor\", \"middle\") // horizontal centering of text at x position in all browsers.\n            .attr(\"dominant-baseline\", \"middle\"); // vertical centering of text at y position in all browsers, except IE.\n\n        // Regions\n        $$.initRegion();\n\n        // Grids\n        $$.initGrid();\n\n        // Define g for chart area\n        main.append('g')\n            .attr(\"clip-path\", $$.clipPath)\n            .attr('class', CLASS.chart);\n\n        // Grid lines\n        if (config.grid_lines_front) { $$.initGridLines(); }\n\n        // Cover whole with rects for events\n        $$.initEventRect();\n\n        // Define g for chart\n        $$.initChartElements();\n\n        // if zoom privileged, insert rect to forefront\n        // TODO: is this needed?\n        main.insert('rect', config.zoom_privileged ? null : 'g.' + CLASS.regions)\n            .attr('class', CLASS.zoomRect)\n            .attr('width', $$.width)\n            .attr('height', $$.height)\n            .style('opacity', 0)\n            .on(\"dblclick.zoom\", null);\n\n        // Set default extent if defined\n        if (config.axis_x_extent) { $$.brush.extent($$.getDefaultExtent()); }\n\n        // Add Axis\n        $$.axis.init();\n\n        // Set targets\n        $$.updateTargets($$.data.targets);\n\n        // Draw with targets\n        if (binding) {\n            $$.updateDimension();\n            $$.config.oninit.call($$);\n            $$.redraw({\n                withTransition: false,\n                withTransform: true,\n                withUpdateXDomain: true,\n                withUpdateOrgXDomain: true,\n                withTransitionForAxis: false\n            });\n        }\n\n        // Bind resize event\n        if (window.onresize == null) {\n            window.onresize = $$.generateResize();\n        }\n        if (window.onresize.add) {\n            window.onresize.add(function () {\n                config.onresize.call($$);\n            });\n            window.onresize.add(function () {\n                $$.api.flush();\n            });\n            window.onresize.add(function () {\n                config.onresized.call($$);\n            });\n        }\n\n        // export element of the chart\n        $$.api.element = $$.selectChart.node();\n    };\n\n    c3_chart_internal_fn.smoothLines = function (el, type) {\n        var $$ = this;\n        if (type === 'grid') {\n            el.each(function () {\n                var g = $$.d3.select(this),\n                    x1 = g.attr('x1'),\n                    x2 = g.attr('x2'),\n                    y1 = g.attr('y1'),\n                    y2 = g.attr('y2');\n                g.attr({\n                    'x1': Math.ceil(x1),\n                    'x2': Math.ceil(x2),\n                    'y1': Math.ceil(y1),\n                    'y2': Math.ceil(y2)\n                });\n            });\n        }\n    };\n\n\n    c3_chart_internal_fn.updateSizes = function () {\n        var $$ = this, config = $$.config;\n        var legendHeight = $$.legend ? $$.getLegendHeight() : 0,\n            legendWidth = $$.legend ? $$.getLegendWidth() : 0,\n            legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight,\n            hasArc = $$.hasArcType(),\n            xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'),\n            subchartHeight = config.subchart_show && !hasArc ? (config.subchart_size_height + xAxisHeight) : 0;\n\n        $$.currentWidth = $$.getCurrentWidth();\n        $$.currentHeight = $$.getCurrentHeight();\n\n        // for main\n        $$.margin = config.axis_rotated ? {\n            top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),\n            right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n            bottom: $$.getHorizontalAxisHeight('y') + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n            left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())\n        } : {\n            top: 4 + $$.getCurrentPaddingTop(), // for top tick text\n            right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n            bottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n            left: hasArc ? 0 : $$.getCurrentPaddingLeft()\n        };\n\n        // for subchart\n        $$.margin2 = config.axis_rotated ? {\n            top: $$.margin.top,\n            right: NaN,\n            bottom: 20 + legendHeightForBottom,\n            left: $$.rotated_padding_left\n        } : {\n            top: $$.currentHeight - subchartHeight - legendHeightForBottom,\n            right: NaN,\n            bottom: xAxisHeight + legendHeightForBottom,\n            left: $$.margin.left\n        };\n\n        // for legend\n        $$.margin3 = {\n            top: 0,\n            right: NaN,\n            bottom: 0,\n            left: 0\n        };\n        if ($$.updateSizeForLegend) { $$.updateSizeForLegend(legendHeight, legendWidth); }\n\n        $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;\n        $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;\n        if ($$.width < 0) { $$.width = 0; }\n        if ($$.height < 0) { $$.height = 0; }\n\n        $$.width2 = config.axis_rotated ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;\n        $$.height2 = config.axis_rotated ? $$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;\n        if ($$.width2 < 0) { $$.width2 = 0; }\n        if ($$.height2 < 0) { $$.height2 = 0; }\n\n        // for arc\n        $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);\n        $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);\n        if ($$.hasType('gauge')) {\n            $$.arcHeight += $$.height - $$.getGaugeLabelHeight();\n        }\n        if ($$.updateRadius) { $$.updateRadius(); }\n\n        if ($$.isLegendRight && hasArc) {\n            $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;\n        }\n    };\n\n    c3_chart_internal_fn.updateTargets = function (targets) {\n        var $$ = this;\n\n        /*-- Main --*/\n\n        //-- Text --//\n        $$.updateTargetsForText(targets);\n\n        //-- Bar --//\n        $$.updateTargetsForBar(targets);\n\n        //-- Line --//\n        $$.updateTargetsForLine(targets);\n\n        //-- Arc --//\n        if ($$.hasArcType() && $$.updateTargetsForArc) { $$.updateTargetsForArc(targets); }\n\n        /*-- Sub --*/\n\n        if ($$.updateTargetsForSubchart) { $$.updateTargetsForSubchart(targets); }\n\n        // Fade-in each chart\n        $$.showTargets();\n    };\n    c3_chart_internal_fn.showTargets = function () {\n        var $$ = this;\n        $$.svg.selectAll('.' + CLASS.target).filter(function (d) { return $$.isTargetToShow(d.id); })\n          .transition().duration($$.config.transition_duration)\n            .style(\"opacity\", 1);\n    };\n\n    c3_chart_internal_fn.redraw = function (options, transitions) {\n        var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config;\n        var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType);\n        var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis,\n            withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend,\n            withEventRect, withDimension, withUpdateXAxis;\n        var hideAxis = $$.hasArcType();\n        var drawArea, drawBar, drawLine, xForText, yForText;\n        var duration, durationForExit, durationForAxis;\n        var waitForDraw, flow;\n        var targetsToShow = $$.filterTargetsToShow($$.data.targets), tickValues, i, intervalForCulling, xDomainForZoom;\n        var xv = $$.xv.bind($$), cx, cy;\n\n        options = options || {};\n        withY = getOption(options, \"withY\", true);\n        withSubchart = getOption(options, \"withSubchart\", true);\n        withTransition = getOption(options, \"withTransition\", true);\n        withTransform = getOption(options, \"withTransform\", false);\n        withUpdateXDomain = getOption(options, \"withUpdateXDomain\", false);\n        withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", false);\n        withTrimXDomain = getOption(options, \"withTrimXDomain\", true);\n        withUpdateXAxis = getOption(options, \"withUpdateXAxis\", withUpdateXDomain);\n        withLegend = getOption(options, \"withLegend\", false);\n        withEventRect = getOption(options, \"withEventRect\", true);\n        withDimension = getOption(options, \"withDimension\", true);\n        withTransitionForExit = getOption(options, \"withTransitionForExit\", withTransition);\n        withTransitionForAxis = getOption(options, \"withTransitionForAxis\", withTransition);\n\n        duration = withTransition ? config.transition_duration : 0;\n        durationForExit = withTransitionForExit ? duration : 0;\n        durationForAxis = withTransitionForAxis ? duration : 0;\n\n        transitions = transitions || $$.axis.generateTransitions(durationForAxis);\n\n        // update legend and transform each g\n        if (withLegend && config.legend_show) {\n            $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);\n        } else if (withDimension) {\n            // need to update dimension (e.g. axis.y.tick.values) because y tick values should change\n            // no need to update axis in it because they will be updated in redraw()\n            $$.updateDimension(true);\n        }\n\n        // MEMO: needed for grids calculation\n        if ($$.isCategorized() && targetsToShow.length === 0) {\n            $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);\n        }\n\n        if (targetsToShow.length) {\n            $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);\n            if (!config.axis_x_tick_values) {\n                tickValues = $$.axis.updateXAxisTickValues(targetsToShow);\n            }\n        } else {\n            $$.xAxis.tickValues([]);\n            $$.subXAxis.tickValues([]);\n        }\n\n        if (config.zoom_rescale && !options.flow) {\n            xDomainForZoom = $$.x.orgDomain();\n        }\n\n        $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));\n        $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));\n\n        if (!config.axis_y_tick_values && config.axis_y_tick_count) {\n            $$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(), config.axis_y_tick_count));\n        }\n        if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {\n            $$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));\n        }\n\n        // axes\n        $$.axis.redraw(transitions, hideAxis);\n\n        // Update axis label\n        $$.axis.updateLabels(withTransition);\n\n        // show/hide if manual culling needed\n        if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {\n            if (config.axis_x_tick_culling && tickValues) {\n                for (i = 1; i < tickValues.length; i++) {\n                    if (tickValues.length / i < config.axis_x_tick_culling_max) {\n                        intervalForCulling = i;\n                        break;\n                    }\n                }\n                $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {\n                    var index = tickValues.indexOf(e);\n                    if (index >= 0) {\n                        d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');\n                    }\n                });\n            } else {\n                $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').style('display', 'block');\n            }\n        }\n\n        // setup drawer - MEMO: these must be called after axis updated\n        drawArea = $$.generateDrawArea ? $$.generateDrawArea(areaIndices, false) : undefined;\n        drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;\n        drawLine = $$.generateDrawLine ? $$.generateDrawLine(lineIndices, false) : undefined;\n        xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);\n        yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false);\n\n        // Update sub domain\n        if (withY) {\n            $$.subY.domain($$.getYDomain(targetsToShow, 'y'));\n            $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));\n        }\n\n        // tooltip\n        $$.tooltip.style(\"display\", \"none\");\n\n        // xgrid focus\n        $$.updateXgridFocus();\n\n        // Data empty label positioning and text.\n        main.select(\"text.\" + CLASS.text + '.' + CLASS.empty)\n            .attr(\"x\", $$.width / 2)\n            .attr(\"y\", $$.height / 2)\n            .text(config.data_empty_label_text)\n          .transition()\n            .style('opacity', targetsToShow.length ? 0 : 1);\n\n        // grid\n        $$.updateGrid(duration);\n\n        // rect for regions\n        $$.updateRegion(duration);\n\n        // bars\n        $$.updateBar(durationForExit);\n\n        // lines, areas and cricles\n        $$.updateLine(durationForExit);\n        $$.updateArea(durationForExit);\n        $$.updateCircle();\n\n        // text\n        if ($$.hasDataLabel()) {\n            $$.updateText(durationForExit);\n        }\n\n        // arc\n        if ($$.redrawArc) { $$.redrawArc(duration, durationForExit, withTransform); }\n\n        // subchart\n        if ($$.redrawSubchart) {\n            $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);\n        }\n\n        // circles for select\n        main.selectAll('.' + CLASS.selectedCircles)\n            .filter($$.isBarType.bind($$))\n            .selectAll('circle')\n            .remove();\n\n        // event rects will redrawn when flow called\n        if (config.interaction_enabled && !options.flow && withEventRect) {\n            $$.redrawEventRect();\n            if ($$.updateZoom) { $$.updateZoom(); }\n        }\n\n        // update circleY based on updated parameters\n        $$.updateCircleY();\n\n        // generate circle x/y functions depending on updated params\n        cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);\n        cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$);\n\n        if (options.flow) {\n            flow = $$.generateFlow({\n                targets: targetsToShow,\n                flow: options.flow,\n                duration: options.flow.duration,\n                drawBar: drawBar,\n                drawLine: drawLine,\n                drawArea: drawArea,\n                cx: cx,\n                cy: cy,\n                xv: xv,\n                xForText: xForText,\n                yForText: yForText\n            });\n        }\n\n        if ((duration || flow) && $$.isTabVisible()) { // Only use transition if tab visible. See #938.\n            // transition should be derived from one transition\n            d3.transition().duration(duration).each(function () {\n                var transitionsToWait = [];\n\n                // redraw and gather transitions\n                [\n                    $$.redrawBar(drawBar, true),\n                    $$.redrawLine(drawLine, true),\n                    $$.redrawArea(drawArea, true),\n                    $$.redrawCircle(cx, cy, true),\n                    $$.redrawText(xForText, yForText, options.flow, true),\n                    $$.redrawRegion(true),\n                    $$.redrawGrid(true),\n                ].forEach(function (transitions) {\n                    transitions.forEach(function (transition) {\n                        transitionsToWait.push(transition);\n                    });\n                });\n\n                // Wait for end of transitions to call flow and onrendered callback\n                waitForDraw = $$.generateWait();\n                transitionsToWait.forEach(function (t) {\n                    waitForDraw.add(t);\n                });\n            })\n            .call(waitForDraw, function () {\n                if (flow) {\n                    flow();\n                }\n                if (config.onrendered) {\n                    config.onrendered.call($$);\n                }\n            });\n        }\n        else {\n            $$.redrawBar(drawBar);\n            $$.redrawLine(drawLine);\n            $$.redrawArea(drawArea);\n            $$.redrawCircle(cx, cy);\n            $$.redrawText(xForText, yForText, options.flow);\n            $$.redrawRegion();\n            $$.redrawGrid();\n            if (config.onrendered) {\n                config.onrendered.call($$);\n            }\n        }\n\n        // update fadein condition\n        $$.mapToIds($$.data.targets).forEach(function (id) {\n            $$.withoutFadeIn[id] = true;\n        });\n    };\n\n    c3_chart_internal_fn.updateAndRedraw = function (options) {\n        var $$ = this, config = $$.config, transitions;\n        options = options || {};\n        // same with redraw\n        options.withTransition = getOption(options, \"withTransition\", true);\n        options.withTransform = getOption(options, \"withTransform\", false);\n        options.withLegend = getOption(options, \"withLegend\", false);\n        // NOT same with redraw\n        options.withUpdateXDomain = true;\n        options.withUpdateOrgXDomain = true;\n        options.withTransitionForExit = false;\n        options.withTransitionForTransform = getOption(options, \"withTransitionForTransform\", options.withTransition);\n        // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)\n        $$.updateSizes();\n        // MEMO: called in updateLegend in redraw if withLegend\n        if (!(options.withLegend && config.legend_show)) {\n            transitions = $$.axis.generateTransitions(options.withTransitionForAxis ? config.transition_duration : 0);\n            // Update scales\n            $$.updateScales();\n            $$.updateSvgSize();\n            // Update g positions\n            $$.transformAll(options.withTransitionForTransform, transitions);\n        }\n        // Draw with new sizes & scales\n        $$.redraw(options, transitions);\n    };\n    c3_chart_internal_fn.redrawWithoutRescale = function () {\n        this.redraw({\n            withY: false,\n            withSubchart: false,\n            withEventRect: false,\n            withTransitionForAxis: false\n        });\n    };\n\n    c3_chart_internal_fn.isTimeSeries = function () {\n        return this.config.axis_x_type === 'timeseries';\n    };\n    c3_chart_internal_fn.isCategorized = function () {\n        return this.config.axis_x_type.indexOf('categor') >= 0;\n    };\n    c3_chart_internal_fn.isCustomX = function () {\n        var $$ = this, config = $$.config;\n        return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));\n    };\n\n    c3_chart_internal_fn.isTimeSeriesY = function () {\n        return this.config.axis_y_type === 'timeseries';\n    };\n\n    c3_chart_internal_fn.getTranslate = function (target) {\n        var $$ = this, config = $$.config, x, y;\n        if (target === 'main') {\n            x = asHalfPixel($$.margin.left);\n            y = asHalfPixel($$.margin.top);\n        } else if (target === 'context') {\n            x = asHalfPixel($$.margin2.left);\n            y = asHalfPixel($$.margin2.top);\n        } else if (target === 'legend') {\n            x = $$.margin3.left;\n            y = $$.margin3.top;\n        } else if (target === 'x') {\n            x = 0;\n            y = config.axis_rotated ? 0 : $$.height;\n        } else if (target === 'y') {\n            x = 0;\n            y = config.axis_rotated ? $$.height : 0;\n        } else if (target === 'y2') {\n            x = config.axis_rotated ? 0 : $$.width;\n            y = config.axis_rotated ? 1 : 0;\n        } else if (target === 'subx') {\n            x = 0;\n            y = config.axis_rotated ? 0 : $$.height2;\n        } else if (target === 'arc') {\n            x = $$.arcWidth / 2;\n            y = $$.arcHeight / 2;\n        }\n        return \"translate(\" + x + \",\" + y + \")\";\n    };\n    c3_chart_internal_fn.initialOpacity = function (d) {\n        return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;\n    };\n    c3_chart_internal_fn.initialOpacityForCircle = function (d) {\n        return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;\n    };\n    c3_chart_internal_fn.opacityForCircle = function (d) {\n        var opacity = this.config.point_show ? 1 : 0;\n        return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0;\n    };\n    c3_chart_internal_fn.opacityForText = function () {\n        return this.hasDataLabel() ? 1 : 0;\n    };\n    c3_chart_internal_fn.xx = function (d) {\n        return d ? this.x(d.x) : null;\n    };\n    c3_chart_internal_fn.xv = function (d) {\n        var $$ = this, value = d.value;\n        if ($$.isTimeSeries()) {\n            value = $$.parseDate(d.value);\n        }\n        else if ($$.isCategorized() && typeof d.value === 'string') {\n            value = $$.config.axis_x_categories.indexOf(d.value);\n        }\n        return Math.ceil($$.x(value));\n    };\n    c3_chart_internal_fn.yv = function (d) {\n        var $$ = this,\n            yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;\n        return Math.ceil(yScale(d.value));\n    };\n    c3_chart_internal_fn.subxx = function (d) {\n        return d ? this.subX(d.x) : null;\n    };\n\n    c3_chart_internal_fn.transformMain = function (withTransition, transitions) {\n        var $$ = this,\n            xAxis, yAxis, y2Axis;\n        if (transitions && transitions.axisX) {\n            xAxis = transitions.axisX;\n        } else {\n            xAxis  = $$.main.select('.' + CLASS.axisX);\n            if (withTransition) { xAxis = xAxis.transition(); }\n        }\n        if (transitions && transitions.axisY) {\n            yAxis = transitions.axisY;\n        } else {\n            yAxis = $$.main.select('.' + CLASS.axisY);\n            if (withTransition) { yAxis = yAxis.transition(); }\n        }\n        if (transitions && transitions.axisY2) {\n            y2Axis = transitions.axisY2;\n        } else {\n            y2Axis = $$.main.select('.' + CLASS.axisY2);\n            if (withTransition) { y2Axis = y2Axis.transition(); }\n        }\n        (withTransition ? $$.main.transition() : $$.main).attr(\"transform\", $$.getTranslate('main'));\n        xAxis.attr(\"transform\", $$.getTranslate('x'));\n        yAxis.attr(\"transform\", $$.getTranslate('y'));\n        y2Axis.attr(\"transform\", $$.getTranslate('y2'));\n        $$.main.select('.' + CLASS.chartArcs).attr(\"transform\", $$.getTranslate('arc'));\n    };\n    c3_chart_internal_fn.transformAll = function (withTransition, transitions) {\n        var $$ = this;\n        $$.transformMain(withTransition, transitions);\n        if ($$.config.subchart_show) { $$.transformContext(withTransition, transitions); }\n        if ($$.legend) { $$.transformLegend(withTransition); }\n    };\n\n    c3_chart_internal_fn.updateSvgSize = function () {\n        var $$ = this,\n            brush = $$.svg.select(\".c3-brush .background\");\n        $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);\n        $$.svg.selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]).select('rect')\n            .attr('width', $$.width)\n            .attr('height', $$.height);\n        $$.svg.select('#' + $$.clipIdForXAxis).select('rect')\n            .attr('x', $$.getXAxisClipX.bind($$))\n            .attr('y', $$.getXAxisClipY.bind($$))\n            .attr('width', $$.getXAxisClipWidth.bind($$))\n            .attr('height', $$.getXAxisClipHeight.bind($$));\n        $$.svg.select('#' + $$.clipIdForYAxis).select('rect')\n            .attr('x', $$.getYAxisClipX.bind($$))\n            .attr('y', $$.getYAxisClipY.bind($$))\n            .attr('width', $$.getYAxisClipWidth.bind($$))\n            .attr('height', $$.getYAxisClipHeight.bind($$));\n        $$.svg.select('#' + $$.clipIdForSubchart).select('rect')\n            .attr('width', $$.width)\n            .attr('height', brush.size() ? brush.attr('height') : 0);\n        $$.svg.select('.' + CLASS.zoomRect)\n            .attr('width', $$.width)\n            .attr('height', $$.height);\n        // MEMO: parent div's height will be bigger than svg when <!DOCTYPE html>\n        $$.selectChart.style('max-height', $$.currentHeight + \"px\");\n    };\n\n\n    c3_chart_internal_fn.updateDimension = function (withoutAxis) {\n        var $$ = this;\n        if (!withoutAxis) {\n            if ($$.config.axis_rotated) {\n                $$.axes.x.call($$.xAxis);\n                $$.axes.subx.call($$.subXAxis);\n            } else {\n                $$.axes.y.call($$.yAxis);\n                $$.axes.y2.call($$.y2Axis);\n            }\n        }\n        $$.updateSizes();\n        $$.updateScales();\n        $$.updateSvgSize();\n        $$.transformAll(false);\n    };\n\n    c3_chart_internal_fn.observeInserted = function (selection) {\n        var $$ = this, observer;\n        if (typeof MutationObserver === 'undefined') {\n            window.console.error(\"MutationObserver not defined.\");\n            return;\n        }\n        observer= new MutationObserver(function (mutations) {\n            mutations.forEach(function (mutation) {\n                if (mutation.type === 'childList' && mutation.previousSibling) {\n                    observer.disconnect();\n                    // need to wait for completion of load because size calculation requires the actual sizes determined after that completion\n                    $$.intervalForObserveInserted = window.setInterval(function () {\n                        // parentNode will NOT be null when completed\n                        if (selection.node().parentNode) {\n                            window.clearInterval($$.intervalForObserveInserted);\n                            $$.updateDimension();\n                            $$.config.oninit.call($$);\n                            $$.redraw({\n                                withTransform: true,\n                                withUpdateXDomain: true,\n                                withUpdateOrgXDomain: true,\n                                withTransition: false,\n                                withTransitionForTransform: false,\n                                withLegend: true\n                            });\n                            selection.transition().style('opacity', 1);\n                        }\n                    }, 10);\n                }\n            });\n        });\n        observer.observe(selection.node(), {attributes: true, childList: true, characterData: true});\n    };\n\n\n    c3_chart_internal_fn.generateResize = function () {\n        var resizeFunctions = [];\n        function callResizeFunctions() {\n            resizeFunctions.forEach(function (f) {\n                f();\n            });\n        }\n        callResizeFunctions.add = function (f) {\n            resizeFunctions.push(f);\n        };\n        return callResizeFunctions;\n    };\n\n    c3_chart_internal_fn.endall = function (transition, callback) {\n        var n = 0;\n        transition\n            .each(function () { ++n; })\n            .each(\"end\", function () {\n                if (!--n) { callback.apply(this, arguments); }\n            });\n    };\n    c3_chart_internal_fn.generateWait = function () {\n        var transitionsToWait = [],\n            f = function (transition, callback) {\n                var timer = setInterval(function () {\n                    var done = 0;\n                    transitionsToWait.forEach(function (t) {\n                        if (t.empty()) {\n                            done += 1;\n                            return;\n                        }\n                        try {\n                            t.transition();\n                        } catch (e) {\n                            done += 1;\n                        }\n                    });\n                    if (done === transitionsToWait.length) {\n                        clearInterval(timer);\n                        if (callback) { callback(); }\n                    }\n                }, 10);\n            };\n        f.add = function (transition) {\n            transitionsToWait.push(transition);\n        };\n        return f;\n    };\n\n    c3_chart_internal_fn.parseDate = function (date) {\n        var $$ = this, parsedDate;\n        if (date instanceof Date) {\n            parsedDate = date;\n        } else if (typeof date === 'string') {\n            parsedDate = $$.dataTimeFormat($$.config.data_xFormat).parse(date);\n        } else if (typeof date === 'number' || !isNaN(date)) {\n            parsedDate = new Date(+date);\n        }\n        if (!parsedDate || isNaN(+parsedDate)) {\n            window.console.error(\"Failed to parse x '\" + date + \"' to Date object\");\n        }\n        return parsedDate;\n    };\n\n    c3_chart_internal_fn.isTabVisible = function () {\n        var hidden;\n        if (typeof document.hidden !== \"undefined\") { // Opera 12.10 and Firefox 18 and later support\n            hidden = \"hidden\";\n        } else if (typeof document.mozHidden !== \"undefined\") {\n            hidden = \"mozHidden\";\n        } else if (typeof document.msHidden !== \"undefined\") {\n            hidden = \"msHidden\";\n        } else if (typeof document.webkitHidden !== \"undefined\") {\n            hidden = \"webkitHidden\";\n        }\n\n        return document[hidden] ? false : true;\n    };\n\n    c3_chart_internal_fn.getDefaultConfig = function () {\n        var config = {\n            bindto: '#chart',\n            size_width: undefined,\n            size_height: undefined,\n            padding_left: undefined,\n            padding_right: undefined,\n            padding_top: undefined,\n            padding_bottom: undefined,\n            zoom_enabled: false,\n            zoom_extent: undefined,\n            zoom_privileged: false,\n            zoom_rescale: false,\n            zoom_onzoom: function () {},\n            zoom_onzoomstart: function () {},\n            zoom_onzoomend: function () {},\n            interaction_enabled: true,\n            onmouseover: function () {},\n            onmouseout: function () {},\n            onresize: function () {},\n            onresized: function () {},\n            oninit: function () {},\n            onrendered: function () {},\n            transition_duration: 350,\n            data_x: undefined,\n            data_xs: {},\n            data_xFormat: '%Y-%m-%d',\n            data_xLocaltime: true,\n            data_xSort: true,\n            data_idConverter: function (id) { return id; },\n            data_names: {},\n            data_classes: {},\n            data_groups: [],\n            data_axes: {},\n            data_type: undefined,\n            data_types: {},\n            data_labels: {},\n            data_order: 'desc',\n            data_regions: {},\n            data_color: undefined,\n            data_colors: {},\n            data_hide: false,\n            data_filter: undefined,\n            data_selection_enabled: false,\n            data_selection_grouped: false,\n            data_selection_isselectable: function () { return true; },\n            data_selection_multiple: true,\n            data_selection_draggable: false,\n            data_onclick: function () {},\n            data_onmouseover: function () {},\n            data_onmouseout: function () {},\n            data_onselected: function () {},\n            data_onunselected: function () {},\n            data_url: undefined,\n            data_json: undefined,\n            data_rows: undefined,\n            data_columns: undefined,\n            data_mimeType: undefined,\n            data_keys: undefined,\n            // configuration for no plot-able data supplied.\n            data_empty_label_text: \"\",\n            // subchart\n            subchart_show: false,\n            subchart_size_height: 60,\n            subchart_onbrush: function () {},\n            // color\n            color_pattern: [],\n            color_threshold: {},\n            // legend\n            legend_show: true,\n            legend_hide: false,\n            legend_position: 'bottom',\n            legend_inset_anchor: 'top-left',\n            legend_inset_x: 10,\n            legend_inset_y: 0,\n            legend_inset_step: undefined,\n            legend_item_onclick: undefined,\n            legend_item_onmouseover: undefined,\n            legend_item_onmouseout: undefined,\n            legend_equally: false,\n            // axis\n            axis_rotated: false,\n            axis_x_show: true,\n            axis_x_type: 'indexed',\n            axis_x_localtime: true,\n            axis_x_categories: [],\n            axis_x_tick_centered: false,\n            axis_x_tick_format: undefined,\n            axis_x_tick_culling: {},\n            axis_x_tick_culling_max: 10,\n            axis_x_tick_count: undefined,\n            axis_x_tick_fit: true,\n            axis_x_tick_values: null,\n            axis_x_tick_rotate: 0,\n            axis_x_tick_outer: true,\n            axis_x_tick_multiline: true,\n            axis_x_tick_width: null,\n            axis_x_max: undefined,\n            axis_x_min: undefined,\n            axis_x_padding: {},\n            axis_x_height: undefined,\n            axis_x_extent: undefined,\n            axis_x_label: {},\n            axis_y_show: true,\n            axis_y_type: undefined,\n            axis_y_max: undefined,\n            axis_y_min: undefined,\n            axis_y_inverted: false,\n            axis_y_center: undefined,\n            axis_y_inner: undefined,\n            axis_y_label: {},\n            axis_y_tick_format: undefined,\n            axis_y_tick_outer: true,\n            axis_y_tick_values: null,\n            axis_y_tick_count: undefined,\n            axis_y_tick_time_value: undefined,\n            axis_y_tick_time_interval: undefined,\n            axis_y_padding: {},\n            axis_y_default: undefined,\n            axis_y2_show: false,\n            axis_y2_max: undefined,\n            axis_y2_min: undefined,\n            axis_y2_inverted: false,\n            axis_y2_center: undefined,\n            axis_y2_inner: undefined,\n            axis_y2_label: {},\n            axis_y2_tick_format: undefined,\n            axis_y2_tick_outer: true,\n            axis_y2_tick_values: null,\n            axis_y2_tick_count: undefined,\n            axis_y2_padding: {},\n            axis_y2_default: undefined,\n            // grid\n            grid_x_show: false,\n            grid_x_type: 'tick',\n            grid_x_lines: [],\n            grid_y_show: false,\n            // not used\n            // grid_y_type: 'tick',\n            grid_y_lines: [],\n            grid_y_ticks: 10,\n            grid_focus_show: true,\n            grid_lines_front: true,\n            // point - point of each data\n            point_show: true,\n            point_r: 2.5,\n            point_focus_expand_enabled: true,\n            point_focus_expand_r: undefined,\n            point_select_r: undefined,\n            // line\n            line_connectNull: false,\n            line_step_type: 'step',\n            // bar\n            bar_width: undefined,\n            bar_width_ratio: 0.6,\n            bar_width_max: undefined,\n            bar_zerobased: true,\n            // area\n            area_zerobased: true,\n            // pie\n            pie_label_show: true,\n            pie_label_format: undefined,\n            pie_label_threshold: 0.05,\n            pie_expand: true,\n            // gauge\n            gauge_label_show: true,\n            gauge_label_format: undefined,\n            gauge_expand: true,\n            gauge_min: 0,\n            gauge_max: 100,\n            gauge_units: undefined,\n            gauge_width: undefined,\n            // donut\n            donut_label_show: true,\n            donut_label_format: undefined,\n            donut_label_threshold: 0.05,\n            donut_width: undefined,\n            donut_expand: true,\n            donut_title: \"\",\n            // region - region to change style\n            regions: [],\n            // tooltip - show when mouseover on each data\n            tooltip_show: true,\n            tooltip_grouped: true,\n            tooltip_format_title: undefined,\n            tooltip_format_name: undefined,\n            tooltip_format_value: undefined,\n            tooltip_position: undefined,\n            tooltip_contents: function (d, defaultTitleFormat, defaultValueFormat, color) {\n                return this.getTooltipContent ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) : '';\n            },\n            tooltip_init_show: false,\n            tooltip_init_x: 0,\n            tooltip_init_position: {top: '0px', left: '50px'}\n        };\n\n        Object.keys(this.additionalConfig).forEach(function (key) {\n            config[key] = this.additionalConfig[key];\n        }, this);\n\n        return config;\n    };\n    c3_chart_internal_fn.additionalConfig = {};\n\n    c3_chart_internal_fn.loadConfig = function (config) {\n        var this_config = this.config, target, keys, read;\n        function find() {\n            var key = keys.shift();\n    //        console.log(\"key =>\", key, \", target =>\", target);\n            if (key && target && typeof target === 'object' && key in target) {\n                target = target[key];\n                return find();\n            }\n            else if (!key) {\n                return target;\n            }\n            else {\n                return undefined;\n            }\n        }\n        Object.keys(this_config).forEach(function (key) {\n            target = config;\n            keys = key.split('_');\n            read = find();\n    //        console.log(\"CONFIG : \", key, read);\n            if (isDefined(read)) {\n                this_config[key] = read;\n            }\n        });\n    };\n\n    c3_chart_internal_fn.getScale = function (min, max, forTimeseries) {\n        return (forTimeseries ? this.d3.time.scale() : this.d3.scale.linear()).range([min, max]);\n    };\n    c3_chart_internal_fn.getX = function (min, max, domain, offset) {\n        var $$ = this,\n            scale = $$.getScale(min, max, $$.isTimeSeries()),\n            _scale = domain ? scale.domain(domain) : scale, key;\n        // Define customized scale if categorized axis\n        if ($$.isCategorized()) {\n            offset = offset || function () { return 0; };\n            scale = function (d, raw) {\n                var v = _scale(d) + offset(d);\n                return raw ? v : Math.ceil(v);\n            };\n        } else {\n            scale = function (d, raw) {\n                var v = _scale(d);\n                return raw ? v : Math.ceil(v);\n            };\n        }\n        // define functions\n        for (key in _scale) {\n            scale[key] = _scale[key];\n        }\n        scale.orgDomain = function () {\n            return _scale.domain();\n        };\n        // define custom domain() for categorized axis\n        if ($$.isCategorized()) {\n            scale.domain = function (domain) {\n                if (!arguments.length) {\n                    domain = this.orgDomain();\n                    return [domain[0], domain[1] + 1];\n                }\n                _scale.domain(domain);\n                return scale;\n            };\n        }\n        return scale;\n    };\n    c3_chart_internal_fn.getY = function (min, max, domain) {\n        var scale = this.getScale(min, max, this.isTimeSeriesY());\n        if (domain) { scale.domain(domain); }\n        return scale;\n    };\n    c3_chart_internal_fn.getYScale = function (id) {\n        return this.axis.getId(id) === 'y2' ? this.y2 : this.y;\n    };\n    c3_chart_internal_fn.getSubYScale = function (id) {\n        return this.axis.getId(id) === 'y2' ? this.subY2 : this.subY;\n    };\n    c3_chart_internal_fn.updateScales = function () {\n        var $$ = this, config = $$.config,\n            forInit = !$$.x;\n        // update edges\n        $$.xMin = config.axis_rotated ? 1 : 0;\n        $$.xMax = config.axis_rotated ? $$.height : $$.width;\n        $$.yMin = config.axis_rotated ? 0 : $$.height;\n        $$.yMax = config.axis_rotated ? $$.width : 1;\n        $$.subXMin = $$.xMin;\n        $$.subXMax = $$.xMax;\n        $$.subYMin = config.axis_rotated ? 0 : $$.height2;\n        $$.subYMax = config.axis_rotated ? $$.width2 : 1;\n        // update scales\n        $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () { return $$.xAxis.tickOffset(); });\n        $$.y = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y_default : $$.y.domain());\n        $$.y2 = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y2_default : $$.y2.domain());\n        $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) { return d % 1 ? 0 : $$.subXAxis.tickOffset(); });\n        $$.subY = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y_default : $$.subY.domain());\n        $$.subY2 = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y2_default : $$.subY2.domain());\n        // update axes\n        $$.xAxisTickFormat = $$.axis.getXAxisTickFormat();\n        $$.xAxisTickValues = $$.axis.getXAxisTickValues();\n        $$.yAxisTickValues = $$.axis.getYAxisTickValues();\n        $$.y2AxisTickValues = $$.axis.getY2AxisTickValues();\n\n        $$.xAxis = $$.axis.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n        $$.subXAxis = $$.axis.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n        $$.yAxis = $$.axis.getYAxis($$.y, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, config.axis_y_tick_outer);\n        $$.y2Axis = $$.axis.getYAxis($$.y2, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, config.axis_y2_tick_outer);\n\n        // Set initialized scales to brush and zoom\n        if (!forInit) {\n            if ($$.brush) { $$.brush.scale($$.subX); }\n            if (config.zoom_enabled) { $$.zoom.scale($$.x); }\n        }\n        // update for arc\n        if ($$.updateArc) { $$.updateArc(); }\n    };\n\n    c3_chart_internal_fn.getYDomainMin = function (targets) {\n        var $$ = this, config = $$.config,\n            ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),\n            j, k, baseId, idsInGroup, id, hasNegativeValue;\n        if (config.data_groups.length > 0) {\n            hasNegativeValue = $$.hasNegativeValueInTargets(targets);\n            for (j = 0; j < config.data_groups.length; j++) {\n                // Determine baseId\n                idsInGroup = config.data_groups[j].filter(function (id) { return ids.indexOf(id) >= 0; });\n                if (idsInGroup.length === 0) { continue; }\n                baseId = idsInGroup[0];\n                // Consider negative values\n                if (hasNegativeValue && ys[baseId]) {\n                    ys[baseId].forEach(function (v, i) {\n                        ys[baseId][i] = v < 0 ? v : 0;\n                    });\n                }\n                // Compute min\n                for (k = 1; k < idsInGroup.length; k++) {\n                    id = idsInGroup[k];\n                    if (! ys[id]) { continue; }\n                    ys[id].forEach(function (v, i) {\n                        if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasNegativeValue && +v > 0)) {\n                            ys[baseId][i] += +v;\n                        }\n                    });\n                }\n            }\n        }\n        return $$.d3.min(Object.keys(ys).map(function (key) { return $$.d3.min(ys[key]); }));\n    };\n    c3_chart_internal_fn.getYDomainMax = function (targets) {\n        var $$ = this, config = $$.config,\n            ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),\n            j, k, baseId, idsInGroup, id, hasPositiveValue;\n        if (config.data_groups.length > 0) {\n            hasPositiveValue = $$.hasPositiveValueInTargets(targets);\n            for (j = 0; j < config.data_groups.length; j++) {\n                // Determine baseId\n                idsInGroup = config.data_groups[j].filter(function (id) { return ids.indexOf(id) >= 0; });\n                if (idsInGroup.length === 0) { continue; }\n                baseId = idsInGroup[0];\n                // Consider positive values\n                if (hasPositiveValue && ys[baseId]) {\n                    ys[baseId].forEach(function (v, i) {\n                        ys[baseId][i] = v > 0 ? v : 0;\n                    });\n                }\n                // Compute max\n                for (k = 1; k < idsInGroup.length; k++) {\n                    id = idsInGroup[k];\n                    if (! ys[id]) { continue; }\n                    ys[id].forEach(function (v, i) {\n                        if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasPositiveValue && +v < 0)) {\n                            ys[baseId][i] += +v;\n                        }\n                    });\n                }\n            }\n        }\n        return $$.d3.max(Object.keys(ys).map(function (key) { return $$.d3.max(ys[key]); }));\n    };\n    c3_chart_internal_fn.getYDomain = function (targets, axisId, xDomain) {\n        var $$ = this, config = $$.config,\n            targetsByAxisId = targets.filter(function (t) { return $$.axis.getId(t.id) === axisId; }),\n            yTargets = xDomain ? $$.filterByXDomain(targetsByAxisId, xDomain) : targetsByAxisId,\n            yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min,\n            yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max,\n            yDomainMin = $$.getYDomainMin(yTargets),\n            yDomainMax = $$.getYDomainMax(yTargets),\n            domain, domainLength, padding, padding_top, padding_bottom,\n            center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center,\n            yDomainAbs, lengths, diff, ratio, isAllPositive, isAllNegative,\n            isZeroBased = ($$.hasType('bar', yTargets) && config.bar_zerobased) || ($$.hasType('area', yTargets) && config.area_zerobased),\n            isInverted = axisId === 'y2' ? config.axis_y2_inverted : config.axis_y_inverted,\n            showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated,\n            showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated;\n\n        // MEMO: avoid inverting domain unexpectedly\n        yDomainMin = isValue(yMin) ? yMin : isValue(yMax) ? (yDomainMin < yMax ? yDomainMin : yMax - 10) : yDomainMin;\n        yDomainMax = isValue(yMax) ? yMax : isValue(yMin) ? (yMin < yDomainMax ? yDomainMax : yMin + 10) : yDomainMax;\n\n        if (yTargets.length === 0) { // use current domain if target of axisId is none\n            return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();\n        }\n        if (isNaN(yDomainMin)) { // set minimum to zero when not number\n            yDomainMin = 0;\n        }\n        if (isNaN(yDomainMax)) { // set maximum to have same value as yDomainMin\n            yDomainMax = yDomainMin;\n        }\n        if (yDomainMin === yDomainMax) {\n            yDomainMin < 0 ? yDomainMax = 0 : yDomainMin = 0;\n        }\n        isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;\n        isAllNegative = yDomainMin <= 0 && yDomainMax <= 0;\n\n        // Cancel zerobased if axis_*_min / axis_*_max specified\n        if ((isValue(yMin) && isAllPositive) || (isValue(yMax) && isAllNegative)) {\n            isZeroBased = false;\n        }\n\n        // Bar/Area chart should be 0-based if all positive|negative\n        if (isZeroBased) {\n            if (isAllPositive) { yDomainMin = 0; }\n            if (isAllNegative) { yDomainMax = 0; }\n        }\n\n        domainLength = Math.abs(yDomainMax - yDomainMin);\n        padding = padding_top = padding_bottom = domainLength * 0.1;\n\n        if (typeof center !== 'undefined') {\n            yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));\n            yDomainMax = center + yDomainAbs;\n            yDomainMin = center - yDomainAbs;\n        }\n        // add padding for data label\n        if (showHorizontalDataLabel) {\n            lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'width');\n            diff = diffDomain($$.y.range());\n            ratio = [lengths[0] / diff, lengths[1] / diff];\n            padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));\n            padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));\n        } else if (showVerticalDataLabel) {\n            lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'height');\n            padding_top += $$.axis.convertPixelsToAxisPadding(lengths[1], domainLength);\n            padding_bottom += $$.axis.convertPixelsToAxisPadding(lengths[0], domainLength);\n        }\n        if (axisId === 'y' && notEmpty(config.axis_y_padding)) {\n            padding_top = $$.axis.getPadding(config.axis_y_padding, 'top', padding_top, domainLength);\n            padding_bottom = $$.axis.getPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);\n        }\n        if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {\n            padding_top = $$.axis.getPadding(config.axis_y2_padding, 'top', padding_top, domainLength);\n            padding_bottom = $$.axis.getPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);\n        }\n        // Bar/Area chart should be 0-based if all positive|negative\n        if (isZeroBased) {\n            if (isAllPositive) { padding_bottom = yDomainMin; }\n            if (isAllNegative) { padding_top = -yDomainMax; }\n        }\n        domain = [yDomainMin - padding_bottom, yDomainMax + padding_top];\n        return isInverted ? domain.reverse() : domain;\n    };\n    c3_chart_internal_fn.getXDomainMin = function (targets) {\n        var $$ = this, config = $$.config;\n        return isDefined(config.axis_x_min) ?\n            ($$.isTimeSeries() ? this.parseDate(config.axis_x_min) : config.axis_x_min) :\n        $$.d3.min(targets, function (t) { return $$.d3.min(t.values, function (v) { return v.x; }); });\n    };\n    c3_chart_internal_fn.getXDomainMax = function (targets) {\n        var $$ = this, config = $$.config;\n        return isDefined(config.axis_x_max) ?\n            ($$.isTimeSeries() ? this.parseDate(config.axis_x_max) : config.axis_x_max) :\n        $$.d3.max(targets, function (t) { return $$.d3.max(t.values, function (v) { return v.x; }); });\n    };\n    c3_chart_internal_fn.getXDomainPadding = function (domain) {\n        var $$ = this, config = $$.config,\n            diff = domain[1] - domain[0],\n            maxDataCount, padding, paddingLeft, paddingRight;\n        if ($$.isCategorized()) {\n            padding = 0;\n        } else if ($$.hasType('bar')) {\n            maxDataCount = $$.getMaxDataCount();\n            padding = maxDataCount > 1 ? (diff / (maxDataCount - 1)) / 2 : 0.5;\n        } else {\n            padding = diff * 0.01;\n        }\n        if (typeof config.axis_x_padding === 'object' && notEmpty(config.axis_x_padding)) {\n            paddingLeft = isValue(config.axis_x_padding.left) ? config.axis_x_padding.left : padding;\n            paddingRight = isValue(config.axis_x_padding.right) ? config.axis_x_padding.right : padding;\n        } else if (typeof config.axis_x_padding === 'number') {\n            paddingLeft = paddingRight = config.axis_x_padding;\n        } else {\n            paddingLeft = paddingRight = padding;\n        }\n        return {left: paddingLeft, right: paddingRight};\n    };\n    c3_chart_internal_fn.getXDomain = function (targets) {\n        var $$ = this,\n            xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)],\n            firstX = xDomain[0], lastX = xDomain[1],\n            padding = $$.getXDomainPadding(xDomain),\n            min = 0, max = 0;\n        // show center of x domain if min and max are the same\n        if ((firstX - lastX) === 0 && !$$.isCategorized()) {\n            if ($$.isTimeSeries()) {\n                firstX = new Date(firstX.getTime() * 0.5);\n                lastX = new Date(lastX.getTime() * 1.5);\n            } else {\n                firstX = firstX === 0 ? 1 : (firstX * 0.5);\n                lastX = lastX === 0 ? -1 : (lastX * 1.5);\n            }\n        }\n        if (firstX || firstX === 0) {\n            min = $$.isTimeSeries() ? new Date(firstX.getTime() - padding.left) : firstX - padding.left;\n        }\n        if (lastX || lastX === 0) {\n            max = $$.isTimeSeries() ? new Date(lastX.getTime() + padding.right) : lastX + padding.right;\n        }\n        return [min, max];\n    };\n    c3_chart_internal_fn.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {\n        var $$ = this, config = $$.config;\n\n        if (withUpdateOrgXDomain) {\n            $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));\n            $$.orgXDomain = $$.x.domain();\n            if (config.zoom_enabled) { $$.zoom.scale($$.x).updateScaleExtent(); }\n            $$.subX.domain($$.x.domain());\n            if ($$.brush) { $$.brush.scale($$.subX); }\n        }\n        if (withUpdateXDomain) {\n            $$.x.domain(domain ? domain : (!$$.brush || $$.brush.empty()) ? $$.orgXDomain : $$.brush.extent());\n            if (config.zoom_enabled) { $$.zoom.scale($$.x).updateScaleExtent(); }\n        }\n\n        // Trim domain when too big by zoom mousemove event\n        if (withTrim) { $$.x.domain($$.trimXDomain($$.x.orgDomain())); }\n\n        return $$.x.domain();\n    };\n    c3_chart_internal_fn.trimXDomain = function (domain) {\n        var $$ = this;\n        if (domain[0] <= $$.orgXDomain[0]) {\n            domain[1] = +domain[1] + ($$.orgXDomain[0] - domain[0]);\n            domain[0] = $$.orgXDomain[0];\n        }\n        if ($$.orgXDomain[1] <= domain[1]) {\n            domain[0] = +domain[0] - (domain[1] - $$.orgXDomain[1]);\n            domain[1] = $$.orgXDomain[1];\n        }\n        return domain;\n    };\n\n    c3_chart_internal_fn.isX = function (key) {\n        var $$ = this, config = $$.config;\n        return (config.data_x && key === config.data_x) || (notEmpty(config.data_xs) && hasValue(config.data_xs, key));\n    };\n    c3_chart_internal_fn.isNotX = function (key) {\n        return !this.isX(key);\n    };\n    c3_chart_internal_fn.getXKey = function (id) {\n        var $$ = this, config = $$.config;\n        return config.data_x ? config.data_x : notEmpty(config.data_xs) ? config.data_xs[id] : null;\n    };\n    c3_chart_internal_fn.getXValuesOfXKey = function (key, targets) {\n        var $$ = this,\n            xValues, ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];\n        ids.forEach(function (id) {\n            if ($$.getXKey(id) === key) {\n                xValues = $$.data.xs[id];\n            }\n        });\n        return xValues;\n    };\n    c3_chart_internal_fn.getIndexByX = function (x) {\n        var $$ = this,\n            data = $$.filterByX($$.data.targets, x);\n        return data.length ? data[0].index : null;\n    };\n    c3_chart_internal_fn.getXValue = function (id, i) {\n        var $$ = this;\n        return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) ? $$.data.xs[id][i] : i;\n    };\n    c3_chart_internal_fn.getOtherTargetXs = function () {\n        var $$ = this,\n            idsForX = Object.keys($$.data.xs);\n        return idsForX.length ? $$.data.xs[idsForX[0]] : null;\n    };\n    c3_chart_internal_fn.getOtherTargetX = function (index) {\n        var xs = this.getOtherTargetXs();\n        return xs && index < xs.length ? xs[index] : null;\n    };\n    c3_chart_internal_fn.addXs = function (xs) {\n        var $$ = this;\n        Object.keys(xs).forEach(function (id) {\n            $$.config.data_xs[id] = xs[id];\n        });\n    };\n    c3_chart_internal_fn.hasMultipleX = function (xs) {\n        return this.d3.set(Object.keys(xs).map(function (id) { return xs[id]; })).size() > 1;\n    };\n    c3_chart_internal_fn.isMultipleX = function () {\n        return notEmpty(this.config.data_xs) || !this.config.data_xSort || this.hasType('scatter');\n    };\n    c3_chart_internal_fn.addName = function (data) {\n        var $$ = this, name;\n        if (data) {\n            name = $$.config.data_names[data.id];\n            data.name = name ? name : data.id;\n        }\n        return data;\n    };\n    c3_chart_internal_fn.getValueOnIndex = function (values, index) {\n        var valueOnIndex = values.filter(function (v) { return v.index === index; });\n        return valueOnIndex.length ? valueOnIndex[0] : null;\n    };\n    c3_chart_internal_fn.updateTargetX = function (targets, x) {\n        var $$ = this;\n        targets.forEach(function (t) {\n            t.values.forEach(function (v, i) {\n                v.x = $$.generateTargetX(x[i], t.id, i);\n            });\n            $$.data.xs[t.id] = x;\n        });\n    };\n    c3_chart_internal_fn.updateTargetXs = function (targets, xs) {\n        var $$ = this;\n        targets.forEach(function (t) {\n            if (xs[t.id]) {\n                $$.updateTargetX([t], xs[t.id]);\n            }\n        });\n    };\n    c3_chart_internal_fn.generateTargetX = function (rawX, id, index) {\n        var $$ = this, x;\n        if ($$.isTimeSeries()) {\n            x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));\n        }\n        else if ($$.isCustomX() && !$$.isCategorized()) {\n            x = isValue(rawX) ? +rawX : $$.getXValue(id, index);\n        }\n        else {\n            x = index;\n        }\n        return x;\n    };\n    c3_chart_internal_fn.cloneTarget = function (target) {\n        return {\n            id : target.id,\n            id_org : target.id_org,\n            values : target.values.map(function (d) {\n                return {x: d.x, value: d.value, id: d.id};\n            })\n        };\n    };\n    c3_chart_internal_fn.updateXs = function () {\n        var $$ = this;\n        if ($$.data.targets.length) {\n            $$.xs = [];\n            $$.data.targets[0].values.forEach(function (v) {\n                $$.xs[v.index] = v.x;\n            });\n        }\n    };\n    c3_chart_internal_fn.getPrevX = function (i) {\n        var x = this.xs[i - 1];\n        return typeof x !== 'undefined' ? x : null;\n    };\n    c3_chart_internal_fn.getNextX = function (i) {\n        var x = this.xs[i + 1];\n        return typeof x !== 'undefined' ? x : null;\n    };\n    c3_chart_internal_fn.getMaxDataCount = function () {\n        var $$ = this;\n        return $$.d3.max($$.data.targets, function (t) { return t.values.length; });\n    };\n    c3_chart_internal_fn.getMaxDataCountTarget = function (targets) {\n        var length = targets.length, max = 0, maxTarget;\n        if (length > 1) {\n            targets.forEach(function (t) {\n                if (t.values.length > max) {\n                    maxTarget = t;\n                    max = t.values.length;\n                }\n            });\n        } else {\n            maxTarget = length ? targets[0] : null;\n        }\n        return maxTarget;\n    };\n    c3_chart_internal_fn.getEdgeX = function (targets) {\n        var $$ = this;\n        return !targets.length ? [0, 0] : [\n            $$.d3.min(targets, function (t) { return t.values[0].x; }),\n            $$.d3.max(targets, function (t) { return t.values[t.values.length - 1].x; })\n        ];\n    };\n    c3_chart_internal_fn.mapToIds = function (targets) {\n        return targets.map(function (d) { return d.id; });\n    };\n    c3_chart_internal_fn.mapToTargetIds = function (ids) {\n        var $$ = this;\n        return ids ? (isString(ids) ? [ids] : ids) : $$.mapToIds($$.data.targets);\n    };\n    c3_chart_internal_fn.hasTarget = function (targets, id) {\n        var ids = this.mapToIds(targets), i;\n        for (i = 0; i < ids.length; i++) {\n            if (ids[i] === id) {\n                return true;\n            }\n        }\n        return false;\n    };\n    c3_chart_internal_fn.isTargetToShow = function (targetId) {\n        return this.hiddenTargetIds.indexOf(targetId) < 0;\n    };\n    c3_chart_internal_fn.isLegendToShow = function (targetId) {\n        return this.hiddenLegendIds.indexOf(targetId) < 0;\n    };\n    c3_chart_internal_fn.filterTargetsToShow = function (targets) {\n        var $$ = this;\n        return targets.filter(function (t) { return $$.isTargetToShow(t.id); });\n    };\n    c3_chart_internal_fn.mapTargetsToUniqueXs = function (targets) {\n        var $$ = this;\n        var xs = $$.d3.set($$.d3.merge(targets.map(function (t) { return t.values.map(function (v) { return +v.x; }); }))).values();\n        return $$.isTimeSeries() ? xs.map(function (x) { return new Date(+x); }) : xs.map(function (x) { return +x; });\n    };\n    c3_chart_internal_fn.addHiddenTargetIds = function (targetIds) {\n        this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds);\n    };\n    c3_chart_internal_fn.removeHiddenTargetIds = function (targetIds) {\n        this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) { return targetIds.indexOf(id) < 0; });\n    };\n    c3_chart_internal_fn.addHiddenLegendIds = function (targetIds) {\n        this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds);\n    };\n    c3_chart_internal_fn.removeHiddenLegendIds = function (targetIds) {\n        this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) { return targetIds.indexOf(id) < 0; });\n    };\n    c3_chart_internal_fn.getValuesAsIdKeyed = function (targets) {\n        var ys = {};\n        targets.forEach(function (t) {\n            ys[t.id] = [];\n            t.values.forEach(function (v) {\n                ys[t.id].push(v.value);\n            });\n        });\n        return ys;\n    };\n    c3_chart_internal_fn.checkValueInTargets = function (targets, checker) {\n        var ids = Object.keys(targets), i, j, values;\n        for (i = 0; i < ids.length; i++) {\n            values = targets[ids[i]].values;\n            for (j = 0; j < values.length; j++) {\n                if (checker(values[j].value)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    c3_chart_internal_fn.hasNegativeValueInTargets = function (targets) {\n        return this.checkValueInTargets(targets, function (v) { return v < 0; });\n    };\n    c3_chart_internal_fn.hasPositiveValueInTargets = function (targets) {\n        return this.checkValueInTargets(targets, function (v) { return v > 0; });\n    };\n    c3_chart_internal_fn.isOrderDesc = function () {\n        var config = this.config;\n        return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'desc';\n    };\n    c3_chart_internal_fn.isOrderAsc = function () {\n        var config = this.config;\n        return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'asc';\n    };\n    c3_chart_internal_fn.orderTargets = function (targets) {\n        var $$ = this, config = $$.config, orderAsc = $$.isOrderAsc(), orderDesc = $$.isOrderDesc();\n        if (orderAsc || orderDesc) {\n            targets.sort(function (t1, t2) {\n                var reducer = function (p, c) { return p + Math.abs(c.value); };\n                var t1Sum = t1.values.reduce(reducer, 0),\n                    t2Sum = t2.values.reduce(reducer, 0);\n                return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;\n            });\n        } else if (isFunction(config.data_order)) {\n            targets.sort(config.data_order);\n        } // TODO: accept name array for order\n        return targets;\n    };\n    c3_chart_internal_fn.filterByX = function (targets, x) {\n        return this.d3.merge(targets.map(function (t) { return t.values; })).filter(function (v) { return v.x - x === 0; });\n    };\n    c3_chart_internal_fn.filterRemoveNull = function (data) {\n        return data.filter(function (d) { return isValue(d.value); });\n    };\n    c3_chart_internal_fn.filterByXDomain = function (targets, xDomain) {\n        return targets.map(function (t) {\n            return {\n                id: t.id,\n                id_org: t.id_org,\n                values: t.values.filter(function (v) {\n                    return xDomain[0] <= v.x && v.x <= xDomain[1];\n                })\n            };\n        });\n    };\n    c3_chart_internal_fn.hasDataLabel = function () {\n        var config = this.config;\n        if (typeof config.data_labels === 'boolean' && config.data_labels) {\n            return true;\n        } else if (typeof config.data_labels === 'object' && notEmpty(config.data_labels)) {\n            return true;\n        }\n        return false;\n    };\n    c3_chart_internal_fn.getDataLabelLength = function (min, max, key) {\n        var $$ = this,\n            lengths = [0, 0], paddingCoef = 1.3;\n        $$.selectChart.select('svg').selectAll('.dummy')\n            .data([min, max])\n            .enter().append('text')\n            .text(function (d) { return $$.dataLabelFormat(d.id)(d); })\n            .each(function (d, i) {\n                lengths[i] = this.getBoundingClientRect()[key] * paddingCoef;\n            })\n            .remove();\n        return lengths;\n    };\n    c3_chart_internal_fn.isNoneArc = function (d) {\n        return this.hasTarget(this.data.targets, d.id);\n    },\n    c3_chart_internal_fn.isArc = function (d) {\n        return 'data' in d && this.hasTarget(this.data.targets, d.data.id);\n    };\n    c3_chart_internal_fn.findSameXOfValues = function (values, index) {\n        var i, targetX = values[index].x, sames = [];\n        for (i = index - 1; i >= 0; i--) {\n            if (targetX !== values[i].x) { break; }\n            sames.push(values[i]);\n        }\n        for (i = index; i < values.length; i++) {\n            if (targetX !== values[i].x) { break; }\n            sames.push(values[i]);\n        }\n        return sames;\n    };\n\n    c3_chart_internal_fn.findClosestFromTargets = function (targets, pos) {\n        var $$ = this, candidates;\n\n        // map to array of closest points of each target\n        candidates = targets.map(function (target) {\n            return $$.findClosest(target.values, pos);\n        });\n\n        // decide closest point and return\n        return $$.findClosest(candidates, pos);\n    };\n    c3_chart_internal_fn.findClosest = function (values, pos) {\n        var $$ = this, minDist = 100, closest;\n\n        // find mouseovering bar\n        values.filter(function (v) { return v && $$.isBarType(v.id); }).forEach(function (v) {\n            var shape = $$.main.select('.' + CLASS.bars + $$.getTargetSelectorSuffix(v.id) + ' .' + CLASS.bar + '-' + v.index).node();\n            if (!closest && $$.isWithinBar(shape)) {\n                closest = v;\n            }\n        });\n\n        // find closest point from non-bar\n        values.filter(function (v) { return v && !$$.isBarType(v.id); }).forEach(function (v) {\n            var d = $$.dist(v, pos);\n            if (d < minDist) {\n                minDist = d;\n                closest = v;\n            }\n        });\n\n        return closest;\n    };\n    c3_chart_internal_fn.dist = function (data, pos) {\n        var $$ = this, config = $$.config,\n            xIndex = config.axis_rotated ? 1 : 0,\n            yIndex = config.axis_rotated ? 0 : 1,\n            y = $$.circleY(data, data.index),\n            x = $$.x(data.x);\n        return Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2);\n    };\n    c3_chart_internal_fn.convertValuesToStep = function (values) {\n        var converted = [].concat(values), i;\n\n        if (!this.isCategorized()) {\n            return values;\n        }\n\n        for (i = values.length + 1; 0 < i; i--) {\n            converted[i] = converted[i - 1];\n        }\n\n        converted[0] = {\n            x: converted[0].x - 1,\n            value: converted[0].value,\n            id: converted[0].id\n        };\n        converted[values.length + 1] = {\n            x: converted[values.length].x + 1,\n            value: converted[values.length].value,\n            id: converted[values.length].id\n        };\n\n        return converted;\n    };\n    c3_chart_internal_fn.updateDataAttributes = function (name, attrs) {\n        var $$ = this, config = $$.config, current = config['data_' + name];\n        if (typeof attrs === 'undefined') { return current; }\n        Object.keys(attrs).forEach(function (id) {\n            current[id] = attrs[id];\n        });\n        $$.redraw({withLegend: true});\n        return current;\n    };\n\n    c3_chart_internal_fn.convertUrlToData = function (url, mimeType, keys, done) {\n        var $$ = this, type = mimeType ? mimeType : 'csv';\n        $$.d3.xhr(url, function (error, data) {\n            var d;\n            if (!data) {\n                throw new Error(error.responseURL + ' ' + error.status + ' (' + error.statusText + ')');\n            }\n            if (type === 'json') {\n                d = $$.convertJsonToData(JSON.parse(data.response), keys);\n            } else if (type === 'tsv') {\n                d = $$.convertTsvToData(data.response);\n            } else {\n                d = $$.convertCsvToData(data.response);\n            }\n            done.call($$, d);\n        });\n    };\n    c3_chart_internal_fn.convertXsvToData = function (xsv, parser) {\n        var rows = parser.parseRows(xsv), d;\n        if (rows.length === 1) {\n            d = [{}];\n            rows[0].forEach(function (id) {\n                d[0][id] = null;\n            });\n        } else {\n            d = parser.parse(xsv);\n        }\n        return d;\n    };\n    c3_chart_internal_fn.convertCsvToData = function (csv) {\n        return this.convertXsvToData(csv, this.d3.csv);\n    };\n    c3_chart_internal_fn.convertTsvToData = function (tsv) {\n        return this.convertXsvToData(tsv, this.d3.tsv);\n    };\n    c3_chart_internal_fn.convertJsonToData = function (json, keys) {\n        var $$ = this,\n            new_rows = [], targetKeys, data;\n        if (keys) { // when keys specified, json would be an array that includes objects\n            if (keys.x) {\n                targetKeys = keys.value.concat(keys.x);\n                $$.config.data_x = keys.x;\n            } else {\n                targetKeys = keys.value;\n            }\n            new_rows.push(targetKeys);\n            json.forEach(function (o) {\n                var new_row = [];\n                targetKeys.forEach(function (key) {\n                    // convert undefined to null because undefined data will be removed in convertDataToTargets()\n                    var v = isUndefined(o[key]) ? null : o[key];\n                    new_row.push(v);\n                });\n                new_rows.push(new_row);\n            });\n            data = $$.convertRowsToData(new_rows);\n        } else {\n            Object.keys(json).forEach(function (key) {\n                new_rows.push([key].concat(json[key]));\n            });\n            data = $$.convertColumnsToData(new_rows);\n        }\n        return data;\n    };\n    c3_chart_internal_fn.convertRowsToData = function (rows) {\n        var keys = rows[0], new_row = {}, new_rows = [], i, j;\n        for (i = 1; i < rows.length; i++) {\n            new_row = {};\n            for (j = 0; j < rows[i].length; j++) {\n                if (isUndefined(rows[i][j])) {\n                    throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n                }\n                new_row[keys[j]] = rows[i][j];\n            }\n            new_rows.push(new_row);\n        }\n        return new_rows;\n    };\n    c3_chart_internal_fn.convertColumnsToData = function (columns) {\n        var new_rows = [], i, j, key;\n        for (i = 0; i < columns.length; i++) {\n            key = columns[i][0];\n            for (j = 1; j < columns[i].length; j++) {\n                if (isUndefined(new_rows[j - 1])) {\n                    new_rows[j - 1] = {};\n                }\n                if (isUndefined(columns[i][j])) {\n                    throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n                }\n                new_rows[j - 1][key] = columns[i][j];\n            }\n        }\n        return new_rows;\n    };\n    c3_chart_internal_fn.convertDataToTargets = function (data, appendXs) {\n        var $$ = this, config = $$.config,\n            ids = $$.d3.keys(data[0]).filter($$.isNotX, $$),\n            xs = $$.d3.keys(data[0]).filter($$.isX, $$),\n            targets;\n\n        // save x for update data by load when custom x and c3.x API\n        ids.forEach(function (id) {\n            var xKey = $$.getXKey(id);\n\n            if ($$.isCustomX() || $$.isTimeSeries()) {\n                // if included in input data\n                if (xs.indexOf(xKey) >= 0) {\n                    $$.data.xs[id] = (appendXs && $$.data.xs[id] ? $$.data.xs[id] : []).concat(\n                        data.map(function (d) { return d[xKey]; })\n                            .filter(isValue)\n                            .map(function (rawX, i) { return $$.generateTargetX(rawX, id, i); })\n                    );\n                }\n                // if not included in input data, find from preloaded data of other id's x\n                else if (config.data_x) {\n                    $$.data.xs[id] = $$.getOtherTargetXs();\n                }\n                // if not included in input data, find from preloaded data\n                else if (notEmpty(config.data_xs)) {\n                    $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);\n                }\n                // MEMO: if no x included, use same x of current will be used\n            } else {\n                $$.data.xs[id] = data.map(function (d, i) { return i; });\n            }\n        });\n\n\n        // check x is defined\n        ids.forEach(function (id) {\n            if (!$$.data.xs[id]) {\n                throw new Error('x is not defined for id = \"' + id + '\".');\n            }\n        });\n\n        // convert to target\n        targets = ids.map(function (id, index) {\n            var convertedId = config.data_idConverter(id);\n            return {\n                id: convertedId,\n                id_org: id,\n                values: data.map(function (d, i) {\n                    var xKey = $$.getXKey(id), rawX = d[xKey], x = $$.generateTargetX(rawX, id, i);\n                    // use x as categories if custom x and categorized\n                    if ($$.isCustomX() && $$.isCategorized() && index === 0 && rawX) {\n                        if (i === 0) { config.axis_x_categories = []; }\n                        config.axis_x_categories.push(rawX);\n                    }\n                    // mark as x = undefined if value is undefined and filter to remove after mapped\n                    if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {\n                        x = undefined;\n                    }\n                    return {x: x, value: d[id] !== null && !isNaN(d[id]) ? +d[id] : null, id: convertedId};\n                }).filter(function (v) { return isDefined(v.x); })\n            };\n        });\n\n        // finish targets\n        targets.forEach(function (t) {\n            var i;\n            // sort values by its x\n            if (config.data_xSort) {\n                t.values = t.values.sort(function (v1, v2) {\n                    var x1 = v1.x || v1.x === 0 ? v1.x : Infinity,\n                        x2 = v2.x || v2.x === 0 ? v2.x : Infinity;\n                    return x1 - x2;\n                });\n            }\n            // indexing each value\n            i = 0;\n            t.values.forEach(function (v) {\n                v.index = i++;\n            });\n            // this needs to be sorted because its index and value.index is identical\n            $$.data.xs[t.id].sort(function (v1, v2) {\n                return v1 - v2;\n            });\n        });\n\n        // set target types\n        if (config.data_type) {\n            $$.setTargetType($$.mapToIds(targets).filter(function (id) { return ! (id in config.data_types); }), config.data_type);\n        }\n\n        // cache as original id keyed\n        targets.forEach(function (d) {\n            $$.addCache(d.id_org, d);\n        });\n\n        return targets;\n    };\n\n    c3_chart_internal_fn.load = function (targets, args) {\n        var $$ = this;\n        if (targets) {\n            // filter loading targets if needed\n            if (args.filter) {\n                targets = targets.filter(args.filter);\n            }\n            // set type if args.types || args.type specified\n            if (args.type || args.types) {\n                targets.forEach(function (t) {\n                    var type = args.types && args.types[t.id] ? args.types[t.id] : args.type;\n                    $$.setTargetType(t.id, type);\n                });\n            }\n            // Update/Add data\n            $$.data.targets.forEach(function (d) {\n                for (var i = 0; i < targets.length; i++) {\n                    if (d.id === targets[i].id) {\n                        d.values = targets[i].values;\n                        targets.splice(i, 1);\n                        break;\n                    }\n                }\n            });\n            $$.data.targets = $$.data.targets.concat(targets); // add remained\n        }\n\n        // Set targets\n        $$.updateTargets($$.data.targets);\n\n        // Redraw with new targets\n        $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});\n\n        if (args.done) { args.done(); }\n    };\n    c3_chart_internal_fn.loadFromArgs = function (args) {\n        var $$ = this;\n        if (args.data) {\n            $$.load($$.convertDataToTargets(args.data), args);\n        }\n        else if (args.url) {\n            $$.convertUrlToData(args.url, args.mimeType, args.keys, function (data) {\n                $$.load($$.convertDataToTargets(data), args);\n            });\n        }\n        else if (args.json) {\n            $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);\n        }\n        else if (args.rows) {\n            $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);\n        }\n        else if (args.columns) {\n            $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);\n        }\n        else {\n            $$.load(null, args);\n        }\n    };\n    c3_chart_internal_fn.unload = function (targetIds, done) {\n        var $$ = this;\n        if (!done) {\n            done = function () {};\n        }\n        // filter existing target\n        targetIds = targetIds.filter(function (id) { return $$.hasTarget($$.data.targets, id); });\n        // If no target, call done and return\n        if (!targetIds || targetIds.length === 0) {\n            done();\n            return;\n        }\n        $$.svg.selectAll(targetIds.map(function (id) { return $$.selectorTarget(id); }))\n            .transition()\n            .style('opacity', 0)\n            .remove()\n            .call($$.endall, done);\n        targetIds.forEach(function (id) {\n            // Reset fadein for future load\n            $$.withoutFadeIn[id] = false;\n            // Remove target's elements\n            if ($$.legend) {\n                $$.legend.selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)).remove();\n            }\n            // Remove target\n            $$.data.targets = $$.data.targets.filter(function (t) {\n                return t.id !== id;\n            });\n        });\n    };\n\n    c3_chart_internal_fn.categoryName = function (i) {\n        var config = this.config;\n        return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;\n    };\n\n    c3_chart_internal_fn.initEventRect = function () {\n        var $$ = this;\n        $$.main.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.eventRects)\n            .style('fill-opacity', 0);\n    };\n    c3_chart_internal_fn.redrawEventRect = function () {\n        var $$ = this, config = $$.config,\n            eventRectUpdate, maxDataCountTarget,\n            isMultipleX = $$.isMultipleX();\n\n        // rects for mouseover\n        var eventRects = $$.main.select('.' + CLASS.eventRects)\n                .style('cursor', config.zoom_enabled ? config.axis_rotated ? 'ns-resize' : 'ew-resize' : null)\n                .classed(CLASS.eventRectsMultiple, isMultipleX)\n                .classed(CLASS.eventRectsSingle, !isMultipleX);\n\n        // clear old rects\n        eventRects.selectAll('.' + CLASS.eventRect).remove();\n\n        // open as public variable\n        $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);\n\n        if (isMultipleX) {\n            eventRectUpdate = $$.eventRect.data([0]);\n            // enter : only one rect will be added\n            $$.generateEventRectsForMultipleXs(eventRectUpdate.enter());\n            // update\n            $$.updateEventRect(eventRectUpdate);\n            // exit : not needed because always only one rect exists\n        }\n        else {\n            // Set data and update $$.eventRect\n            maxDataCountTarget = $$.getMaxDataCountTarget($$.data.targets);\n            eventRects.datum(maxDataCountTarget ? maxDataCountTarget.values : []);\n            $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);\n            eventRectUpdate = $$.eventRect.data(function (d) { return d; });\n            // enter\n            $$.generateEventRectsForSingleX(eventRectUpdate.enter());\n            // update\n            $$.updateEventRect(eventRectUpdate);\n            // exit\n            eventRectUpdate.exit().remove();\n        }\n    };\n    c3_chart_internal_fn.updateEventRect = function (eventRectUpdate) {\n        var $$ = this, config = $$.config,\n            x, y, w, h, rectW, rectX;\n\n        // set update selection if null\n        eventRectUpdate = eventRectUpdate || $$.eventRect.data(function (d) { return d; });\n\n        if ($$.isMultipleX()) {\n            // TODO: rotated not supported yet\n            x = 0;\n            y = 0;\n            w = $$.width;\n            h = $$.height;\n        }\n        else {\n            if (($$.isCustomX() || $$.isTimeSeries()) && !$$.isCategorized()) {\n\n                // update index for x that is used by prevX and nextX\n                $$.updateXs();\n\n                rectW = function (d) {\n                    var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index);\n\n                    // if there this is a single data point make the eventRect full width (or height)\n                    if (prevX === null && nextX === null) {\n                        return config.axis_rotated ? $$.height : $$.width;\n                    }\n\n                    if (prevX === null) { prevX = $$.x.domain()[0]; }\n                    if (nextX === null) { nextX = $$.x.domain()[1]; }\n\n                    return Math.max(0, ($$.x(nextX) - $$.x(prevX)) / 2);\n                };\n                rectX = function (d) {\n                    var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index),\n                        thisX = $$.data.xs[d.id][d.index];\n\n                    // if there this is a single data point position the eventRect at 0\n                    if (prevX === null && nextX === null) {\n                        return 0;\n                    }\n\n                    if (prevX === null) { prevX = $$.x.domain()[0]; }\n\n                    return ($$.x(thisX) + $$.x(prevX)) / 2;\n                };\n            } else {\n                rectW = $$.getEventRectWidth();\n                rectX = function (d) {\n                    return $$.x(d.x) - (rectW / 2);\n                };\n            }\n            x = config.axis_rotated ? 0 : rectX;\n            y = config.axis_rotated ? rectX : 0;\n            w = config.axis_rotated ? $$.width : rectW;\n            h = config.axis_rotated ? rectW : $$.height;\n        }\n\n        eventRectUpdate\n            .attr('class', $$.classEvent.bind($$))\n            .attr(\"x\", x)\n            .attr(\"y\", y)\n            .attr(\"width\", w)\n            .attr(\"height\", h);\n    };\n    c3_chart_internal_fn.generateEventRectsForSingleX = function (eventRectEnter) {\n        var $$ = this, d3 = $$.d3, config = $$.config;\n        eventRectEnter.append(\"rect\")\n            .attr(\"class\", $$.classEvent.bind($$))\n            .style(\"cursor\", config.data_selection_enabled && config.data_selection_grouped ? \"pointer\" : null)\n            .on('mouseover', function (d) {\n                var index = d.index;\n\n                if ($$.dragging || $$.flowing) { return; } // do nothing while dragging/flowing\n                if ($$.hasArcType()) { return; }\n\n                // Expand shapes for selection\n                if (config.point_focus_expand_enabled) { $$.expandCircles(index, null, true); }\n                $$.expandBars(index, null, true);\n\n                // Call event handler\n                $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {\n                    config.data_onmouseover.call($$.api, d);\n                });\n            })\n            .on('mouseout', function (d) {\n                var index = d.index;\n                if (!$$.config) { return; } // chart is destroyed\n                if ($$.hasArcType()) { return; }\n                $$.hideXGridFocus();\n                $$.hideTooltip();\n                // Undo expanded shapes\n                $$.unexpandCircles();\n                $$.unexpandBars();\n                // Call event handler\n                $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {\n                    config.data_onmouseout.call($$.api, d);\n                });\n            })\n            .on('mousemove', function (d) {\n                var selectedData, index = d.index,\n                    eventRect = $$.svg.select('.' + CLASS.eventRect + '-' + index);\n\n                if ($$.dragging || $$.flowing) { return; } // do nothing while dragging/flowing\n                if ($$.hasArcType()) { return; }\n\n                if ($$.isStepType(d) && $$.config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {\n                    index -= 1;\n                }\n\n                // Show tooltip\n                selectedData = $$.filterTargetsToShow($$.data.targets).map(function (t) {\n                    return $$.addName($$.getValueOnIndex(t.values, index));\n                });\n\n                if (config.tooltip_grouped) {\n                    $$.showTooltip(selectedData, this);\n                    $$.showXGridFocus(selectedData);\n                }\n\n                if (config.tooltip_grouped && (!config.data_selection_enabled || config.data_selection_grouped)) {\n                    return;\n                }\n\n                $$.main.selectAll('.' + CLASS.shape + '-' + index)\n                    .each(function () {\n                        d3.select(this).classed(CLASS.EXPANDED, true);\n                        if (config.data_selection_enabled) {\n                            eventRect.style('cursor', config.data_selection_grouped ? 'pointer' : null);\n                        }\n                        if (!config.tooltip_grouped) {\n                            $$.hideXGridFocus();\n                            $$.hideTooltip();\n                            if (!config.data_selection_grouped) {\n                                $$.unexpandCircles(index);\n                                $$.unexpandBars(index);\n                            }\n                        }\n                    })\n                    .filter(function (d) {\n                        return $$.isWithinShape(this, d);\n                    })\n                    .each(function (d) {\n                        if (config.data_selection_enabled && (config.data_selection_grouped || config.data_selection_isselectable(d))) {\n                            eventRect.style('cursor', 'pointer');\n                        }\n                        if (!config.tooltip_grouped) {\n                            $$.showTooltip([d], this);\n                            $$.showXGridFocus([d]);\n                            if (config.point_focus_expand_enabled) { $$.expandCircles(index, d.id, true); }\n                            $$.expandBars(index, d.id, true);\n                        }\n                    });\n            })\n            .on('click', function (d) {\n                var index = d.index;\n                if ($$.hasArcType() || !$$.toggleShape) { return; }\n                if ($$.cancelClick) {\n                    $$.cancelClick = false;\n                    return;\n                }\n                if ($$.isStepType(d) && config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {\n                    index -= 1;\n                }\n                $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {\n                    if (config.data_selection_grouped || $$.isWithinShape(this, d)) {\n                        $$.toggleShape(this, d, index);\n                        $$.config.data_onclick.call($$.api, d, this);\n                    }\n                });\n            })\n            .call(\n                config.data_selection_draggable && $$.drag ? (\n                    d3.behavior.drag().origin(Object)\n                        .on('drag', function () { $$.drag(d3.mouse(this)); })\n                        .on('dragstart', function () { $$.dragstart(d3.mouse(this)); })\n                        .on('dragend', function () { $$.dragend(); })\n                ) : function () {}\n            );\n    };\n\n    c3_chart_internal_fn.generateEventRectsForMultipleXs = function (eventRectEnter) {\n        var $$ = this, d3 = $$.d3, config = $$.config;\n\n        function mouseout() {\n            $$.svg.select('.' + CLASS.eventRect).style('cursor', null);\n            $$.hideXGridFocus();\n            $$.hideTooltip();\n            $$.unexpandCircles();\n            $$.unexpandBars();\n        }\n\n        eventRectEnter.append('rect')\n            .attr('x', 0)\n            .attr('y', 0)\n            .attr('width', $$.width)\n            .attr('height', $$.height)\n            .attr('class', CLASS.eventRect)\n            .on('mouseout', function () {\n                if (!$$.config) { return; } // chart is destroyed\n                if ($$.hasArcType()) { return; }\n                mouseout();\n            })\n            .on('mousemove', function () {\n                var targetsToShow = $$.filterTargetsToShow($$.data.targets);\n                var mouse, closest, sameXData, selectedData;\n\n                if ($$.dragging) { return; } // do nothing when dragging\n                if ($$.hasArcType(targetsToShow)) { return; }\n\n                mouse = d3.mouse(this);\n                closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n                if ($$.mouseover && (!closest || closest.id !== $$.mouseover.id)) {\n                    config.data_onmouseout.call($$.api, $$.mouseover);\n                    $$.mouseover = undefined;\n                }\n\n                if (! closest) {\n                    mouseout();\n                    return;\n                }\n\n                if ($$.isScatterType(closest) || !config.tooltip_grouped) {\n                    sameXData = [closest];\n                } else {\n                    sameXData = $$.filterByX(targetsToShow, closest.x);\n                }\n\n                // show tooltip when cursor is close to some point\n                selectedData = sameXData.map(function (d) {\n                    return $$.addName(d);\n                });\n                $$.showTooltip(selectedData, this);\n\n                // expand points\n                if (config.point_focus_expand_enabled) {\n                    $$.expandCircles(closest.index, closest.id, true);\n                }\n                $$.expandBars(closest.index, closest.id, true);\n\n                // Show xgrid focus line\n                $$.showXGridFocus(selectedData);\n\n                // Show cursor as pointer if point is close to mouse position\n                if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {\n                    $$.svg.select('.' + CLASS.eventRect).style('cursor', 'pointer');\n                    if (!$$.mouseover) {\n                        config.data_onmouseover.call($$.api, closest);\n                        $$.mouseover = closest;\n                    }\n                }\n            })\n            .on('click', function () {\n                var targetsToShow = $$.filterTargetsToShow($$.data.targets);\n                var mouse, closest;\n\n                if ($$.hasArcType(targetsToShow)) { return; }\n\n                mouse = d3.mouse(this);\n                closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n                if (! closest) { return; }\n\n                // select if selection enabled\n                if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {\n                    $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(closest.id)).selectAll('.' + CLASS.shape + '-' + closest.index).each(function () {\n                        if (config.data_selection_grouped || $$.isWithinShape(this, closest)) {\n                            $$.toggleShape(this, closest, closest.index);\n                            $$.config.data_onclick.call($$.api, closest, this);\n                        }\n                    });\n                }\n            })\n            .call(\n                config.data_selection_draggable && $$.drag ? (\n                    d3.behavior.drag().origin(Object)\n                        .on('drag', function () { $$.drag(d3.mouse(this)); })\n                        .on('dragstart', function () { $$.dragstart(d3.mouse(this)); })\n                        .on('dragend', function () { $$.dragend(); })\n                ) : function () {}\n            );\n    };\n    c3_chart_internal_fn.dispatchEvent = function (type, index, mouse) {\n        var $$ = this,\n            selector = '.' + CLASS.eventRect + (!$$.isMultipleX() ? '-' + index : ''),\n            eventRect = $$.main.select(selector).node(),\n            box = eventRect.getBoundingClientRect(),\n            x = box.left + (mouse ? mouse[0] : 0),\n            y = box.top + (mouse ? mouse[1] : 0),\n            event = document.createEvent(\"MouseEvents\");\n\n        event.initMouseEvent(type, true, true, window, 0, x, y, x, y,\n                             false, false, false, false, 0, null);\n        eventRect.dispatchEvent(event);\n    };\n\n    c3_chart_internal_fn.getCurrentWidth = function () {\n        var $$ = this, config = $$.config;\n        return config.size_width ? config.size_width : $$.getParentWidth();\n    };\n    c3_chart_internal_fn.getCurrentHeight = function () {\n        var $$ = this, config = $$.config,\n            h = config.size_height ? config.size_height : $$.getParentHeight();\n        return h > 0 ? h : 320 / ($$.hasType('gauge') ? 2 : 1);\n    };\n    c3_chart_internal_fn.getCurrentPaddingTop = function () {\n        var config = this.config;\n        return isValue(config.padding_top) ? config.padding_top : 0;\n    };\n    c3_chart_internal_fn.getCurrentPaddingBottom = function () {\n        var config = this.config;\n        return isValue(config.padding_bottom) ? config.padding_bottom : 0;\n    };\n    c3_chart_internal_fn.getCurrentPaddingLeft = function (withoutRecompute) {\n        var $$ = this, config = $$.config;\n        if (isValue(config.padding_left)) {\n            return config.padding_left;\n        } else if (config.axis_rotated) {\n            return !config.axis_x_show ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);\n        } else if (!config.axis_y_show || config.axis_y_inner) { // && !config.axis_rotated\n            return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1;\n        } else {\n            return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));\n        }\n    };\n    c3_chart_internal_fn.getCurrentPaddingRight = function () {\n        var $$ = this, config = $$.config,\n            defaultPadding = 10, legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;\n        if (isValue(config.padding_right)) {\n            return config.padding_right + 1; // 1 is needed not to hide tick line\n        } else if (config.axis_rotated) {\n            return defaultPadding + legendWidthOnRight;\n        } else if (!config.axis_y2_show || config.axis_y2_inner) { // && !config.axis_rotated\n            return 2 + legendWidthOnRight + ($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0);\n        } else {\n            return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;\n        }\n    };\n\n    c3_chart_internal_fn.getParentRectValue = function (key) {\n        var parent = this.selectChart.node(), v;\n        while (parent && parent.tagName !== 'BODY') {\n            try {\n                v = parent.getBoundingClientRect()[key];\n            } catch(e) {\n                if (key === 'width') {\n                    // In IE in certain cases getBoundingClientRect\n                    // will cause an \"unspecified error\"\n                    v = parent.offsetWidth;\n                }\n            }\n            if (v) {\n                break;\n            }\n            parent = parent.parentNode;\n        }\n        return v;\n    };\n    c3_chart_internal_fn.getParentWidth = function () {\n        return this.getParentRectValue('width');\n    };\n    c3_chart_internal_fn.getParentHeight = function () {\n        var h = this.selectChart.style('height');\n        return h.indexOf('px') > 0 ? +h.replace('px', '') : 0;\n    };\n\n\n    c3_chart_internal_fn.getSvgLeft = function (withoutRecompute) {\n        var $$ = this, config = $$.config,\n            hasLeftAxisRect = config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner),\n            leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,\n            leftAxis = $$.main.select('.' + leftAxisClass).node(),\n            svgRect = leftAxis && hasLeftAxisRect ? leftAxis.getBoundingClientRect() : {right: 0},\n            chartRect = $$.selectChart.node().getBoundingClientRect(),\n            hasArc = $$.hasArcType(),\n            svgLeft = svgRect.right - chartRect.left - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));\n        return svgLeft > 0 ? svgLeft : 0;\n    };\n\n\n    c3_chart_internal_fn.getAxisWidthByAxisId = function (id, withoutRecompute) {\n        var $$ = this, position = $$.axis.getLabelPositionById(id);\n        return $$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40);\n    };\n    c3_chart_internal_fn.getHorizontalAxisHeight = function (axisId) {\n        var $$ = this, config = $$.config, h = 30;\n        if (axisId === 'x' && !config.axis_x_show) { return 8; }\n        if (axisId === 'x' && config.axis_x_height) { return config.axis_x_height; }\n        if (axisId === 'y' && !config.axis_y_show) { return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1; }\n        if (axisId === 'y2' && !config.axis_y2_show) { return $$.rotated_padding_top; }\n        // Calculate x axis height when tick rotated\n        if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {\n            h = 30 + $$.axis.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - config.axis_x_tick_rotate) / 180);\n        }\n        return h + ($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) + (axisId === 'y2' ? -10 : 0);\n    };\n\n    c3_chart_internal_fn.getEventRectWidth = function () {\n        return Math.max(0, this.xAxis.tickInterval());\n    };\n\n    c3_chart_internal_fn.getShapeIndices = function (typeFilter) {\n        var $$ = this, config = $$.config,\n            indices = {}, i = 0, j, k;\n        $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {\n            for (j = 0; j < config.data_groups.length; j++) {\n                if (config.data_groups[j].indexOf(d.id) < 0) { continue; }\n                for (k = 0; k < config.data_groups[j].length; k++) {\n                    if (config.data_groups[j][k] in indices) {\n                        indices[d.id] = indices[config.data_groups[j][k]];\n                        break;\n                    }\n                }\n            }\n            if (isUndefined(indices[d.id])) { indices[d.id] = i++; }\n        });\n        indices.__max__ = i - 1;\n        return indices;\n    };\n    c3_chart_internal_fn.getShapeX = function (offset, targetsNum, indices, isSub) {\n        var $$ = this, scale = isSub ? $$.subX : $$.x;\n        return function (d) {\n            var index = d.id in indices ? indices[d.id] : 0;\n            return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;\n        };\n    };\n    c3_chart_internal_fn.getShapeY = function (isSub) {\n        var $$ = this;\n        return function (d) {\n            var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);\n            return scale(d.value);\n        };\n    };\n    c3_chart_internal_fn.getShapeOffset = function (typeFilter, indices, isSub) {\n        var $$ = this,\n            targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))),\n            targetIds = targets.map(function (t) { return t.id; });\n        return function (d, i) {\n            var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id),\n                y0 = scale(0), offset = y0;\n            targets.forEach(function (t) {\n                var values = $$.isStepType(d) ? $$.convertValuesToStep(t.values) : t.values;\n                if (t.id === d.id || indices[t.id] !== indices[d.id]) { return; }\n                if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {\n                    if (values[i].value * d.value >= 0) {\n                        offset += scale(values[i].value) - y0;\n                    }\n                }\n            });\n            return offset;\n        };\n    };\n    c3_chart_internal_fn.isWithinShape = function (that, d) {\n        var $$ = this,\n            shape = $$.d3.select(that), isWithin;\n        if (!$$.isTargetToShow(d.id)) {\n            isWithin = false;\n        }\n        else if (that.nodeName === 'circle') {\n            isWithin = $$.isStepType(d) ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);\n        }\n        else if (that.nodeName === 'path') {\n            isWithin = shape.classed(CLASS.bar) ? $$.isWithinBar(that) : true;\n        }\n        return isWithin;\n    };\n\n\n    c3_chart_internal_fn.getInterpolate = function (d) {\n        var $$ = this;\n        return $$.isSplineType(d) ? \"cardinal\" : $$.isStepType(d) ? $$.config.line_step_type : \"linear\";\n    };\n\n    c3_chart_internal_fn.initLine = function () {\n        var $$ = this;\n        $$.main.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartLines);\n    };\n    c3_chart_internal_fn.updateTargetsForLine = function (targets) {\n        var $$ = this, config = $$.config,\n            mainLineUpdate, mainLineEnter,\n            classChartLine = $$.classChartLine.bind($$),\n            classLines = $$.classLines.bind($$),\n            classAreas = $$.classAreas.bind($$),\n            classCircles = $$.classCircles.bind($$),\n            classFocus = $$.classFocus.bind($$);\n        mainLineUpdate = $$.main.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)\n            .data(targets)\n            .attr('class', function (d) { return classChartLine(d) + classFocus(d); });\n        mainLineEnter = mainLineUpdate.enter().append('g')\n            .attr('class', classChartLine)\n            .style('opacity', 0)\n            .style(\"pointer-events\", \"none\");\n        // Lines for each data\n        mainLineEnter.append('g')\n            .attr(\"class\", classLines);\n        // Areas\n        mainLineEnter.append('g')\n            .attr('class', classAreas);\n        // Circles for each data point on lines\n        mainLineEnter.append('g')\n            .attr(\"class\", function (d) { return $$.generateClass(CLASS.selectedCircles, d.id); });\n        mainLineEnter.append('g')\n            .attr(\"class\", classCircles)\n            .style(\"cursor\", function (d) { return config.data_selection_isselectable(d) ? \"pointer\" : null; });\n        // Update date for selected circles\n        targets.forEach(function (t) {\n            $$.main.selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)).selectAll('.' + CLASS.selectedCircle).each(function (d) {\n                d.value = t.values[d.index].value;\n            });\n        });\n        // MEMO: can not keep same color...\n        //mainLineUpdate.exit().remove();\n    };\n    c3_chart_internal_fn.updateLine = function (durationForExit) {\n        var $$ = this;\n        $$.mainLine = $$.main.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)\n            .data($$.lineData.bind($$));\n        $$.mainLine.enter().append('path')\n            .attr('class', $$.classLine.bind($$))\n            .style(\"stroke\", $$.color);\n        $$.mainLine\n            .style(\"opacity\", $$.initialOpacity.bind($$))\n            .style('shape-rendering', function (d) { return $$.isStepType(d) ? 'crispEdges' : ''; })\n            .attr('transform', null);\n        $$.mainLine.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawLine = function (drawLine, withTransition) {\n        return [\n            (withTransition ? this.mainLine.transition() : this.mainLine)\n                .attr(\"d\", drawLine)\n                .style(\"stroke\", this.color)\n                .style(\"opacity\", 1)\n        ];\n    };\n    c3_chart_internal_fn.generateDrawLine = function (lineIndices, isSub) {\n        var $$ = this, config = $$.config,\n            line = $$.d3.svg.line(),\n            getPoints = $$.generateGetLinePoints(lineIndices, isSub),\n            yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n            xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\n            yValue = function (d, i) {\n                return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);\n            };\n\n        line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);\n        if (!config.line_connectNull) { line = line.defined(function (d) { return d.value != null; }); }\n        return function (d) {\n            var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n                x = isSub ? $$.x : $$.subX, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;\n            if ($$.isLineType(d)) {\n                if (config.data_regions[d.id]) {\n                    path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\n                } else {\n                    if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\n                    path = line.interpolate($$.getInterpolate(d))(values);\n                }\n            } else {\n                if (values[0]) {\n                    x0 = x(values[0].x);\n                    y0 = y(values[0].value);\n                }\n                path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n            }\n            return path ? path : \"M 0 0\";\n        };\n    };\n    c3_chart_internal_fn.generateGetLinePoints = function (lineIndices, isSub) { // partial duplication of generateGetBarPoints\n        var $$ = this, config = $$.config,\n            lineTargetsNum = lineIndices.__max__ + 1,\n            x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub),\n            y = $$.getShapeY(!!isSub),\n            lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub),\n            yScale = isSub ? $$.getSubYScale : $$.getYScale;\n        return function (d, i) {\n            var y0 = yScale.call($$, d.id)(0),\n                offset = lineOffset(d, i) || y0, // offset is for stacked area chart\n                posX = x(d), posY = y(d);\n            // fix posY not to overflow opposite quadrant\n            if (config.axis_rotated) {\n                if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { posY = y0; }\n            }\n            // 1 point that marks the line position\n            return [\n                [posX, posY - (y0 - offset)],\n                [posX, posY - (y0 - offset)], // needed for compatibility\n                [posX, posY - (y0 - offset)], // needed for compatibility\n                [posX, posY - (y0 - offset)]  // needed for compatibility\n            ];\n        };\n    };\n\n\n    c3_chart_internal_fn.lineWithRegions = function (d, x, y, _regions) {\n        var $$ = this, config = $$.config,\n            prev = -1, i, j,\n            s = \"M\", sWithRegion,\n            xp, yp, dx, dy, dd, diff, diffx2,\n            xOffset = $$.isCategorized() ? 0.5 : 0,\n            xValue, yValue,\n            regions = [];\n\n        function isWithinRegions(x, regions) {\n            var i;\n            for (i = 0; i < regions.length; i++) {\n                if (regions[i].start < x && x <= regions[i].end) { return true; }\n            }\n            return false;\n        }\n\n        // Check start/end of regions\n        if (isDefined(_regions)) {\n            for (i = 0; i < _regions.length; i++) {\n                regions[i] = {};\n                if (isUndefined(_regions[i].start)) {\n                    regions[i].start = d[0].x;\n                } else {\n                    regions[i].start = $$.isTimeSeries() ? $$.parseDate(_regions[i].start) : _regions[i].start;\n                }\n                if (isUndefined(_regions[i].end)) {\n                    regions[i].end = d[d.length - 1].x;\n                } else {\n                    regions[i].end = $$.isTimeSeries() ? $$.parseDate(_regions[i].end) : _regions[i].end;\n                }\n            }\n        }\n\n        // Set scales\n        xValue = config.axis_rotated ? function (d) { return y(d.value); } : function (d) { return x(d.x); };\n        yValue = config.axis_rotated ? function (d) { return x(d.x); } : function (d) { return y(d.value); };\n\n        // Define svg generator function for region\n        function generateM(points) {\n            return 'M' + points[0][0] + ' ' + points[0][1] + ' ' + points[1][0] + ' ' + points[1][1];\n        }\n        if ($$.isTimeSeries()) {\n            sWithRegion = function (d0, d1, j, diff) {\n                var x0 = d0.x.getTime(), x_diff = d1.x - d0.x,\n                    xv0 = new Date(x0 + x_diff * j),\n                    xv1 = new Date(x0 + x_diff * (j + diff)),\n                    points;\n                if (config.axis_rotated) {\n                    points = [[y(yp(j)), x(xv0)], [y(yp(j + diff)), x(xv1)]];\n                } else {\n                    points = [[x(xv0), y(yp(j))], [x(xv1), y(yp(j + diff))]];\n                }\n                return generateM(points);\n            };\n        } else {\n            sWithRegion = function (d0, d1, j, diff) {\n                var points;\n                if (config.axis_rotated) {\n                    points = [[y(yp(j), true), x(xp(j))], [y(yp(j + diff), true), x(xp(j + diff))]];\n                } else {\n                    points = [[x(xp(j), true), y(yp(j))], [x(xp(j + diff), true), y(yp(j + diff))]];\n                }\n                return generateM(points);\n            };\n        }\n\n        // Generate\n        for (i = 0; i < d.length; i++) {\n\n            // Draw as normal\n            if (isUndefined(regions) || ! isWithinRegions(d[i].x, regions)) {\n                s += \" \" + xValue(d[i]) + \" \" + yValue(d[i]);\n            }\n            // Draw with region // TODO: Fix for horizotal charts\n            else {\n                xp = $$.getScale(d[i - 1].x + xOffset, d[i].x + xOffset, $$.isTimeSeries());\n                yp = $$.getScale(d[i - 1].value, d[i].value);\n\n                dx = x(d[i].x) - x(d[i - 1].x);\n                dy = y(d[i].value) - y(d[i - 1].value);\n                dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n                diff = 2 / dd;\n                diffx2 = diff * 2;\n\n                for (j = diff; j <= 1; j += diffx2) {\n                    s += sWithRegion(d[i - 1], d[i], j, diff);\n                }\n            }\n            prev = d[i].x;\n        }\n\n        return s;\n    };\n\n\n    c3_chart_internal_fn.updateArea = function (durationForExit) {\n        var $$ = this, d3 = $$.d3;\n        $$.mainArea = $$.main.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)\n            .data($$.lineData.bind($$));\n        $$.mainArea.enter().append('path')\n            .attr(\"class\", $$.classArea.bind($$))\n            .style(\"fill\", $$.color)\n            .style(\"opacity\", function () { $$.orgAreaOpacity = +d3.select(this).style('opacity'); return 0; });\n        $$.mainArea\n            .style(\"opacity\", $$.orgAreaOpacity);\n        $$.mainArea.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawArea = function (drawArea, withTransition) {\n        return [\n            (withTransition ? this.mainArea.transition() : this.mainArea)\n                .attr(\"d\", drawArea)\n                .style(\"fill\", this.color)\n                .style(\"opacity\", this.orgAreaOpacity)\n        ];\n    };\n    c3_chart_internal_fn.generateDrawArea = function (areaIndices, isSub) {\n        var $$ = this, config = $$.config, area = $$.d3.svg.area(),\n            getPoints = $$.generateGetAreaPoints(areaIndices, isSub),\n            yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n            xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\n            value0 = function (d, i) {\n                return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));\n            },\n            value1 = function (d, i) {\n                return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);\n            };\n\n        area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(value0).y1(value1);\n        if (!config.line_connectNull) {\n            area = area.defined(function (d) { return d.value !== null; });\n        }\n\n        return function (d) {\n            var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n                x0 = 0, y0 = 0, path;\n            if ($$.isAreaType(d)) {\n                if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\n                path = area.interpolate($$.getInterpolate(d))(values);\n            } else {\n                if (values[0]) {\n                    x0 = $$.x(values[0].x);\n                    y0 = $$.getYScale(d.id)(values[0].value);\n                }\n                path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n            }\n            return path ? path : \"M 0 0\";\n        };\n    };\n    c3_chart_internal_fn.getAreaBaseValue = function () {\n        return 0;\n    };\n    c3_chart_internal_fn.generateGetAreaPoints = function (areaIndices, isSub) { // partial duplication of generateGetBarPoints\n        var $$ = this, config = $$.config,\n            areaTargetsNum = areaIndices.__max__ + 1,\n            x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub),\n            y = $$.getShapeY(!!isSub),\n            areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub),\n            yScale = isSub ? $$.getSubYScale : $$.getYScale;\n        return function (d, i) {\n            var y0 = yScale.call($$, d.id)(0),\n                offset = areaOffset(d, i) || y0, // offset is for stacked area chart\n                posX = x(d), posY = y(d);\n            // fix posY not to overflow opposite quadrant\n            if (config.axis_rotated) {\n                if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { posY = y0; }\n            }\n            // 1 point that marks the area position\n            return [\n                [posX, offset],\n                [posX, posY - (y0 - offset)],\n                [posX, posY - (y0 - offset)], // needed for compatibility\n                [posX, offset] // needed for compatibility\n            ];\n        };\n    };\n\n\n    c3_chart_internal_fn.updateCircle = function () {\n        var $$ = this;\n        $$.mainCircle = $$.main.selectAll('.' + CLASS.circles).selectAll('.' + CLASS.circle)\n            .data($$.lineOrScatterData.bind($$));\n        $$.mainCircle.enter().append(\"circle\")\n            .attr(\"class\", $$.classCircle.bind($$))\n            .attr(\"r\", $$.pointR.bind($$))\n            .style(\"fill\", $$.color);\n        $$.mainCircle\n            .style(\"opacity\", $$.initialOpacityForCircle.bind($$));\n        $$.mainCircle.exit().remove();\n    };\n    c3_chart_internal_fn.redrawCircle = function (cx, cy, withTransition) {\n        var selectedCircles = this.main.selectAll('.' + CLASS.selectedCircle);\n        return [\n            (withTransition ? this.mainCircle.transition() : this.mainCircle)\n                .style('opacity', this.opacityForCircle.bind(this))\n                .style(\"fill\", this.color)\n                .attr(\"cx\", cx)\n                .attr(\"cy\", cy),\n            (withTransition ? selectedCircles.transition() : selectedCircles)\n                .attr(\"cx\", cx)\n                .attr(\"cy\", cy)\n        ];\n    };\n    c3_chart_internal_fn.circleX = function (d) {\n        return d.x || d.x === 0 ? this.x(d.x) : null;\n    };\n    c3_chart_internal_fn.updateCircleY = function () {\n        var $$ = this, lineIndices, getPoints;\n        if ($$.config.data_groups.length > 0) {\n            lineIndices = $$.getShapeIndices($$.isLineType),\n            getPoints = $$.generateGetLinePoints(lineIndices);\n            $$.circleY = function (d, i) {\n                return getPoints(d, i)[0][1];\n            };\n        } else {\n            $$.circleY = function (d) {\n                return $$.getYScale(d.id)(d.value);\n            };\n        }\n    };\n    c3_chart_internal_fn.getCircles = function (i, id) {\n        var $$ = this;\n        return (id ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));\n    };\n    c3_chart_internal_fn.expandCircles = function (i, id, reset) {\n        var $$ = this,\n            r = $$.pointExpandedR.bind($$);\n        if (reset) { $$.unexpandCircles(); }\n        $$.getCircles(i, id)\n            .classed(CLASS.EXPANDED, true)\n            .attr('r', r);\n    };\n    c3_chart_internal_fn.unexpandCircles = function (i) {\n        var $$ = this,\n            r = $$.pointR.bind($$);\n        $$.getCircles(i)\n            .filter(function () { return $$.d3.select(this).classed(CLASS.EXPANDED); })\n            .classed(CLASS.EXPANDED, false)\n            .attr('r', r);\n    };\n    c3_chart_internal_fn.pointR = function (d) {\n        var $$ = this, config = $$.config;\n        return $$.isStepType(d) ? 0 : (isFunction(config.point_r) ? config.point_r(d) : config.point_r);\n    };\n    c3_chart_internal_fn.pointExpandedR = function (d) {\n        var $$ = this, config = $$.config;\n        return config.point_focus_expand_enabled ? (config.point_focus_expand_r ? config.point_focus_expand_r : $$.pointR(d) * 1.75) : $$.pointR(d);\n    };\n    c3_chart_internal_fn.pointSelectR = function (d) {\n        var $$ = this, config = $$.config;\n        return config.point_select_r ? config.point_select_r : $$.pointR(d) * 4;\n    };\n    c3_chart_internal_fn.isWithinCircle = function (that, r) {\n        var d3 = this.d3,\n            mouse = d3.mouse(that), d3_this = d3.select(that),\n            cx = +d3_this.attr(\"cx\"), cy = +d3_this.attr(\"cy\");\n        return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;\n    };\n    c3_chart_internal_fn.isWithinStep = function (that, y) {\n        return Math.abs(y - this.d3.mouse(that)[1]) < 30;\n    };\n\n    c3_chart_internal_fn.initBar = function () {\n        var $$ = this;\n        $$.main.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartBars);\n    };\n    c3_chart_internal_fn.updateTargetsForBar = function (targets) {\n        var $$ = this, config = $$.config,\n            mainBarUpdate, mainBarEnter,\n            classChartBar = $$.classChartBar.bind($$),\n            classBars = $$.classBars.bind($$),\n            classFocus = $$.classFocus.bind($$);\n        mainBarUpdate = $$.main.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)\n            .data(targets)\n            .attr('class', function (d) { return classChartBar(d) + classFocus(d); });\n        mainBarEnter = mainBarUpdate.enter().append('g')\n            .attr('class', classChartBar)\n            .style('opacity', 0)\n            .style(\"pointer-events\", \"none\");\n        // Bars for each data\n        mainBarEnter.append('g')\n            .attr(\"class\", classBars)\n            .style(\"cursor\", function (d) { return config.data_selection_isselectable(d) ? \"pointer\" : null; });\n\n    };\n    c3_chart_internal_fn.updateBar = function (durationForExit) {\n        var $$ = this,\n            barData = $$.barData.bind($$),\n            classBar = $$.classBar.bind($$),\n            initialOpacity = $$.initialOpacity.bind($$),\n            color = function (d) { return $$.color(d.id); };\n        $$.mainBar = $$.main.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)\n            .data(barData);\n        $$.mainBar.enter().append('path')\n            .attr(\"class\", classBar)\n            .style(\"stroke\", color)\n            .style(\"fill\", color);\n        $$.mainBar\n            .style(\"opacity\", initialOpacity);\n        $$.mainBar.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawBar = function (drawBar, withTransition) {\n        return [\n            (withTransition ? this.mainBar.transition() : this.mainBar)\n                .attr('d', drawBar)\n                .style(\"fill\", this.color)\n                .style(\"opacity\", 1)\n        ];\n    };\n    c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) {\n        var $$ = this, config = $$.config,\n            w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickInterval() * config.bar_width_ratio) / barTargetsNum : 0;\n        return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;\n    };\n    c3_chart_internal_fn.getBars = function (i, id) {\n        var $$ = this;\n        return (id ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));\n    };\n    c3_chart_internal_fn.expandBars = function (i, id, reset) {\n        var $$ = this;\n        if (reset) { $$.unexpandBars(); }\n        $$.getBars(i, id).classed(CLASS.EXPANDED, true);\n    };\n    c3_chart_internal_fn.unexpandBars = function (i) {\n        var $$ = this;\n        $$.getBars(i).classed(CLASS.EXPANDED, false);\n    };\n    c3_chart_internal_fn.generateDrawBar = function (barIndices, isSub) {\n        var $$ = this, config = $$.config,\n            getPoints = $$.generateGetBarPoints(barIndices, isSub);\n        return function (d, i) {\n            // 4 points that make a bar\n            var points = getPoints(d, i);\n\n            // switch points if axis is rotated, not applicable for sub chart\n            var indexX = config.axis_rotated ? 1 : 0;\n            var indexY = config.axis_rotated ? 0 : 1;\n\n            var path = 'M ' + points[0][indexX] + ',' + points[0][indexY] + ' ' +\n                    'L' + points[1][indexX] + ',' + points[1][indexY] + ' ' +\n                    'L' + points[2][indexX] + ',' + points[2][indexY] + ' ' +\n                    'L' + points[3][indexX] + ',' + points[3][indexY] + ' ' +\n                    'z';\n\n            return path;\n        };\n    };\n    c3_chart_internal_fn.generateGetBarPoints = function (barIndices, isSub) {\n        var $$ = this,\n            axis = isSub ? $$.subXAxis : $$.xAxis,\n            barTargetsNum = barIndices.__max__ + 1,\n            barW = $$.getBarW(axis, barTargetsNum),\n            barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub),\n            barY = $$.getShapeY(!!isSub),\n            barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub),\n            yScale = isSub ? $$.getSubYScale : $$.getYScale;\n        return function (d, i) {\n            var y0 = yScale.call($$, d.id)(0),\n                offset = barOffset(d, i) || y0, // offset is for stacked bar chart\n                posX = barX(d), posY = barY(d);\n            // fix posY not to overflow opposite quadrant\n            if ($$.config.axis_rotated) {\n                if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { posY = y0; }\n            }\n            // 4 points that make a bar\n            return [\n                [posX, offset],\n                [posX, posY - (y0 - offset)],\n                [posX + barW, posY - (y0 - offset)],\n                [posX + barW, offset]\n            ];\n        };\n    };\n    c3_chart_internal_fn.isWithinBar = function (that) {\n        var mouse = this.d3.mouse(that), box = that.getBoundingClientRect(),\n            seg0 = that.pathSegList.getItem(0), seg1 = that.pathSegList.getItem(1),\n            x = Math.min(seg0.x, seg1.x), y = Math.min(seg0.y, seg1.y),\n            w = box.width, h = box.height, offset = 2,\n            sx = x - offset, ex = x + w + offset, sy = y + h + offset, ey = y - offset;\n        return sx < mouse[0] && mouse[0] < ex && ey < mouse[1] && mouse[1] < sy;\n    };\n\n    c3_chart_internal_fn.initText = function () {\n        var $$ = this;\n        $$.main.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartTexts);\n        $$.mainText = $$.d3.selectAll([]);\n    };\n    c3_chart_internal_fn.updateTargetsForText = function (targets) {\n        var $$ = this, mainTextUpdate, mainTextEnter,\n            classChartText = $$.classChartText.bind($$),\n            classTexts = $$.classTexts.bind($$),\n            classFocus = $$.classFocus.bind($$);\n        mainTextUpdate = $$.main.select('.' + CLASS.chartTexts).selectAll('.' + CLASS.chartText)\n            .data(targets)\n            .attr('class', function (d) { return classChartText(d) + classFocus(d); });\n        mainTextEnter = mainTextUpdate.enter().append('g')\n            .attr('class', classChartText)\n            .style('opacity', 0)\n            .style(\"pointer-events\", \"none\");\n        mainTextEnter.append('g')\n            .attr('class', classTexts);\n    };\n    c3_chart_internal_fn.updateText = function (durationForExit) {\n        var $$ = this, config = $$.config,\n            barOrLineData = $$.barOrLineData.bind($$),\n            classText = $$.classText.bind($$);\n        $$.mainText = $$.main.selectAll('.' + CLASS.texts).selectAll('.' + CLASS.text)\n            .data(barOrLineData);\n        $$.mainText.enter().append('text')\n            .attr(\"class\", classText)\n            .attr('text-anchor', function (d) { return config.axis_rotated ? (d.value < 0 ? 'end' : 'start') : 'middle'; })\n            .style(\"stroke\", 'none')\n            .style(\"fill\", function (d) { return $$.color(d); })\n            .style(\"fill-opacity\", 0);\n        $$.mainText\n            .text(function (d, i, j) { return $$.dataLabelFormat(d.id)(d.value, d.id, i, j); });\n        $$.mainText.exit()\n            .transition().duration(durationForExit)\n            .style('fill-opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawText = function (xForText, yForText, forFlow, withTransition) {\n        return [\n            (withTransition ? this.mainText.transition() : this.mainText)\n                .attr('x', xForText)\n                .attr('y', yForText)\n                .style(\"fill\", this.color)\n                .style(\"fill-opacity\", forFlow ? 0 : this.opacityForText.bind(this))\n        ];\n    };\n    c3_chart_internal_fn.getTextRect = function (text, cls) {\n        var dummy = this.d3.select('body').append('div').classed('c3', true),\n            svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0),\n            rect;\n        svg.selectAll('.dummy')\n            .data([text])\n          .enter().append('text')\n            .classed(cls ? cls : \"\", true)\n            .text(text)\n          .each(function () { rect = this.getBoundingClientRect(); });\n        dummy.remove();\n        return rect;\n    };\n    c3_chart_internal_fn.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {\n        var $$ = this,\n            getAreaPoints = $$.generateGetAreaPoints(areaIndices, false),\n            getBarPoints = $$.generateGetBarPoints(barIndices, false),\n            getLinePoints = $$.generateGetLinePoints(lineIndices, false),\n            getter = forX ? $$.getXForText : $$.getYForText;\n        return function (d, i) {\n            var getPoints = $$.isAreaType(d) ? getAreaPoints : $$.isBarType(d) ? getBarPoints : getLinePoints;\n            return getter.call($$, getPoints(d, i), d, this);\n        };\n    };\n    c3_chart_internal_fn.getXForText = function (points, d, textElement) {\n        var $$ = this,\n            box = textElement.getBoundingClientRect(), xPos, padding;\n        if ($$.config.axis_rotated) {\n            padding = $$.isBarType(d) ? 4 : 6;\n            xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);\n        } else {\n            xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];\n        }\n        // show labels regardless of the domain if value is null\n        if (d.value === null) {\n            if (xPos > $$.width) {\n                xPos = $$.width - box.width;\n            } else if (xPos < 0) {\n                xPos = 4;\n            }\n        }\n        return xPos;\n    };\n    c3_chart_internal_fn.getYForText = function (points, d, textElement) {\n        var $$ = this,\n            box = textElement.getBoundingClientRect(),\n            yPos;\n        if ($$.config.axis_rotated) {\n            yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;\n        } else {\n            yPos = points[2][1];\n            if (d.value < 0) {\n                yPos += box.height;\n                if ($$.isBarType(d) && $$.isSafari()) {\n                    yPos -= 3;\n                }\n                else if (!$$.isBarType(d) && $$.isChrome()) {\n                    yPos += 3;\n                }\n            } else {\n                yPos += $$.isBarType(d) ? -3 : -6;\n            }\n        }\n        // show labels regardless of the domain if value is null\n        if (d.value === null && !$$.config.axis_rotated) {\n            if (yPos < box.height) {\n                yPos = box.height;\n            } else if (yPos > this.height) {\n                yPos = this.height - 4;\n            }\n        }\n        return yPos;\n    };\n\n    c3_chart_internal_fn.setTargetType = function (targetIds, type) {\n        var $$ = this, config = $$.config;\n        $$.mapToTargetIds(targetIds).forEach(function (id) {\n            $$.withoutFadeIn[id] = (type === config.data_types[id]);\n            config.data_types[id] = type;\n        });\n        if (!targetIds) {\n            config.data_type = type;\n        }\n    };\n    c3_chart_internal_fn.hasType = function (type, targets) {\n        var $$ = this, types = $$.config.data_types, has = false;\n        targets = targets || $$.data.targets;\n        if (targets && targets.length) {\n            targets.forEach(function (target) {\n                var t = types[target.id];\n                if ((t && t.indexOf(type) >= 0) || (!t && type === 'line')) {\n                    has = true;\n                }\n            });\n        } else if (Object.keys(types).length) {\n            Object.keys(types).forEach(function (id) {\n                if (types[id] === type) { has = true; }\n            });\n        } else {\n            has = $$.config.data_type === type;\n        }\n        return has;\n    };\n    c3_chart_internal_fn.hasArcType = function (targets) {\n        return this.hasType('pie', targets) || this.hasType('donut', targets) || this.hasType('gauge', targets);\n    };\n    c3_chart_internal_fn.isLineType = function (d) {\n        var config = this.config, id = isString(d) ? d : d.id;\n        return !config.data_types[id] || ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0;\n    };\n    c3_chart_internal_fn.isStepType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n    };\n    c3_chart_internal_fn.isSplineType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;\n    };\n    c3_chart_internal_fn.isAreaType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return ['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n    };\n    c3_chart_internal_fn.isBarType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return this.config.data_types[id] === 'bar';\n    };\n    c3_chart_internal_fn.isScatterType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return this.config.data_types[id] === 'scatter';\n    };\n    c3_chart_internal_fn.isPieType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return this.config.data_types[id] === 'pie';\n    };\n    c3_chart_internal_fn.isGaugeType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return this.config.data_types[id] === 'gauge';\n    };\n    c3_chart_internal_fn.isDonutType = function (d) {\n        var id = isString(d) ? d : d.id;\n        return this.config.data_types[id] === 'donut';\n    };\n    c3_chart_internal_fn.isArcType = function (d) {\n        return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);\n    };\n    c3_chart_internal_fn.lineData = function (d) {\n        return this.isLineType(d) ? [d] : [];\n    };\n    c3_chart_internal_fn.arcData = function (d) {\n        return this.isArcType(d.data) ? [d] : [];\n    };\n    /* not used\n     function scatterData(d) {\n     return isScatterType(d) ? d.values : [];\n     }\n     */\n    c3_chart_internal_fn.barData = function (d) {\n        return this.isBarType(d) ? d.values : [];\n    };\n    c3_chart_internal_fn.lineOrScatterData = function (d) {\n        return this.isLineType(d) || this.isScatterType(d) ? d.values : [];\n    };\n    c3_chart_internal_fn.barOrLineData = function (d) {\n        return this.isBarType(d) || this.isLineType(d) ? d.values : [];\n    };\n\n    c3_chart_internal_fn.initGrid = function () {\n        var $$ = this, config = $$.config, d3 = $$.d3;\n        $$.grid = $$.main.append('g')\n            .attr(\"clip-path\", $$.clipPathForGrid)\n            .attr('class', CLASS.grid);\n        if (config.grid_x_show) {\n            $$.grid.append(\"g\").attr(\"class\", CLASS.xgrids);\n        }\n        if (config.grid_y_show) {\n            $$.grid.append('g').attr('class', CLASS.ygrids);\n        }\n        if (config.grid_focus_show) {\n            $$.grid.append('g')\n                .attr(\"class\", CLASS.xgridFocus)\n                .append('line')\n                .attr('class', CLASS.xgridFocus);\n        }\n        $$.xgrid = d3.selectAll([]);\n        if (!config.grid_lines_front) { $$.initGridLines(); }\n    };\n    c3_chart_internal_fn.initGridLines = function () {\n        var $$ = this, d3 = $$.d3;\n        $$.gridLines = $$.main.append('g')\n            .attr(\"clip-path\", $$.clipPathForGrid)\n            .attr('class', CLASS.grid + ' ' + CLASS.gridLines);\n        $$.gridLines.append('g').attr(\"class\", CLASS.xgridLines);\n        $$.gridLines.append('g').attr('class', CLASS.ygridLines);\n        $$.xgridLines = d3.selectAll([]);\n    };\n    c3_chart_internal_fn.updateXGrid = function (withoutUpdate) {\n        var $$ = this, config = $$.config, d3 = $$.d3,\n            xgridData = $$.generateGridData(config.grid_x_type, $$.x),\n            tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;\n\n        $$.xgridAttr = config.axis_rotated ? {\n            'x1': 0,\n            'x2': $$.width,\n            'y1': function (d) { return $$.x(d) - tickOffset; },\n            'y2': function (d) { return $$.x(d) - tickOffset; }\n        } : {\n            'x1': function (d) { return $$.x(d) + tickOffset; },\n            'x2': function (d) { return $$.x(d) + tickOffset; },\n            'y1': 0,\n            'y2': $$.height\n        };\n\n        $$.xgrid = $$.main.select('.' + CLASS.xgrids).selectAll('.' + CLASS.xgrid)\n            .data(xgridData);\n        $$.xgrid.enter().append('line').attr(\"class\", CLASS.xgrid);\n        if (!withoutUpdate) {\n            $$.xgrid.attr($$.xgridAttr)\n                .style(\"opacity\", function () { return +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1') === (config.axis_rotated ? $$.height : 0) ? 0 : 1; });\n        }\n        $$.xgrid.exit().remove();\n    };\n\n    c3_chart_internal_fn.updateYGrid = function () {\n        var $$ = this, config = $$.config,\n            gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);\n        $$.ygrid = $$.main.select('.' + CLASS.ygrids).selectAll('.' + CLASS.ygrid)\n            .data(gridValues);\n        $$.ygrid.enter().append('line')\n            .attr('class', CLASS.ygrid);\n        $$.ygrid.attr(\"x1\", config.axis_rotated ? $$.y : 0)\n            .attr(\"x2\", config.axis_rotated ? $$.y : $$.width)\n            .attr(\"y1\", config.axis_rotated ? 0 : $$.y)\n            .attr(\"y2\", config.axis_rotated ? $$.height : $$.y);\n        $$.ygrid.exit().remove();\n        $$.smoothLines($$.ygrid, 'grid');\n    };\n\n    c3_chart_internal_fn.gridTextAnchor = function (d) {\n        return d.position ? d.position : \"end\";\n    };\n    c3_chart_internal_fn.gridTextDx = function (d) {\n        return d.position === 'start' ? 4 : d.position === 'middle' ? 0 : -4;\n    };\n    c3_chart_internal_fn.xGridTextX = function (d) {\n        return d.position === 'start' ? -this.height : d.position === 'middle' ? -this.height / 2 : 0;\n    };\n    c3_chart_internal_fn.yGridTextX = function (d) {\n        return d.position === 'start' ? 0 : d.position === 'middle' ? this.width / 2 : this.width;\n    };\n    c3_chart_internal_fn.updateGrid = function (duration) {\n        var $$ = this, main = $$.main, config = $$.config,\n            xgridLine, ygridLine, yv;\n\n        // hide if arc type\n        $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n\n        main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n        if (config.grid_x_show) {\n            $$.updateXGrid();\n        }\n        $$.xgridLines = main.select('.' + CLASS.xgridLines).selectAll('.' + CLASS.xgridLine)\n            .data(config.grid_x_lines);\n        // enter\n        xgridLine = $$.xgridLines.enter().append('g')\n            .attr(\"class\", function (d) { return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : ''); });\n        xgridLine.append('line')\n            .style(\"opacity\", 0);\n        xgridLine.append('text')\n            .attr(\"text-anchor\", $$.gridTextAnchor)\n            .attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\")\n            .attr('dx', $$.gridTextDx)\n            .attr('dy', -5)\n            .style(\"opacity\", 0);\n        // udpate\n        // done in d3.transition() of the end of this function\n        // exit\n        $$.xgridLines.exit().transition().duration(duration)\n            .style(\"opacity\", 0)\n            .remove();\n\n        // Y-Grid\n        if (config.grid_y_show) {\n            $$.updateYGrid();\n        }\n        $$.ygridLines = main.select('.' + CLASS.ygridLines).selectAll('.' + CLASS.ygridLine)\n            .data(config.grid_y_lines);\n        // enter\n        ygridLine = $$.ygridLines.enter().append('g')\n            .attr(\"class\", function (d) { return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : ''); });\n        ygridLine.append('line')\n            .style(\"opacity\", 0);\n        ygridLine.append('text')\n            .attr(\"text-anchor\", $$.gridTextAnchor)\n            .attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\")\n            .attr('dx', $$.gridTextDx)\n            .attr('dy', -5)\n            .style(\"opacity\", 0);\n        // update\n        yv = $$.yv.bind($$);\n        $$.ygridLines.select('line')\n          .transition().duration(duration)\n            .attr(\"x1\", config.axis_rotated ? yv : 0)\n            .attr(\"x2\", config.axis_rotated ? yv : $$.width)\n            .attr(\"y1\", config.axis_rotated ? 0 : yv)\n            .attr(\"y2\", config.axis_rotated ? $$.height : yv)\n            .style(\"opacity\", 1);\n        $$.ygridLines.select('text')\n          .transition().duration(duration)\n            .attr(\"x\", config.axis_rotated ? $$.xGridTextX.bind($$) : $$.yGridTextX.bind($$))\n            .attr(\"y\", yv)\n            .text(function (d) { return d.text; })\n            .style(\"opacity\", 1);\n        // exit\n        $$.ygridLines.exit().transition().duration(duration)\n            .style(\"opacity\", 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawGrid = function (withTransition) {\n        var $$ = this, config = $$.config, xv = $$.xv.bind($$),\n            lines = $$.xgridLines.select('line'),\n            texts = $$.xgridLines.select('text');\n        return [\n            (withTransition ? lines.transition() : lines)\n                .attr(\"x1\", config.axis_rotated ? 0 : xv)\n                .attr(\"x2\", config.axis_rotated ? $$.width : xv)\n                .attr(\"y1\", config.axis_rotated ? xv : 0)\n                .attr(\"y2\", config.axis_rotated ? xv : $$.height)\n                .style(\"opacity\", 1),\n            (withTransition ? texts.transition() : texts)\n                .attr(\"x\", config.axis_rotated ? $$.yGridTextX.bind($$) : $$.xGridTextX.bind($$))\n                .attr(\"y\", xv)\n                .text(function (d) { return d.text; })\n                .style(\"opacity\", 1)\n        ];\n    };\n    c3_chart_internal_fn.showXGridFocus = function (selectedData) {\n        var $$ = this, config = $$.config,\n            dataToShow = selectedData.filter(function (d) { return d && isValue(d.value); }),\n            focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus),\n            xx = $$.xx.bind($$);\n        if (! config.tooltip_show) { return; }\n        // Hide when scatter plot exists\n        if ($$.hasType('scatter') || $$.hasArcType()) { return; }\n        focusEl\n            .style(\"visibility\", \"visible\")\n            .data([dataToShow[0]])\n            .attr(config.axis_rotated ? 'y1' : 'x1', xx)\n            .attr(config.axis_rotated ? 'y2' : 'x2', xx);\n        $$.smoothLines(focusEl, 'grid');\n    };\n    c3_chart_internal_fn.hideXGridFocus = function () {\n        this.main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n    };\n    c3_chart_internal_fn.updateXgridFocus = function () {\n        var $$ = this, config = $$.config;\n        $$.main.select('line.' + CLASS.xgridFocus)\n            .attr(\"x1\", config.axis_rotated ? 0 : -10)\n            .attr(\"x2\", config.axis_rotated ? $$.width : -10)\n            .attr(\"y1\", config.axis_rotated ? -10 : 0)\n            .attr(\"y2\", config.axis_rotated ? -10 : $$.height);\n    };\n    c3_chart_internal_fn.generateGridData = function (type, scale) {\n        var $$ = this,\n            gridData = [], xDomain, firstYear, lastYear, i,\n            tickNum = $$.main.select(\".\" + CLASS.axisX).selectAll('.tick').size();\n        if (type === 'year') {\n            xDomain = $$.getXDomain();\n            firstYear = xDomain[0].getFullYear();\n            lastYear = xDomain[1].getFullYear();\n            for (i = firstYear; i <= lastYear; i++) {\n                gridData.push(new Date(i + '-01-01 00:00:00'));\n            }\n        } else {\n            gridData = scale.ticks(10);\n            if (gridData.length > tickNum) { // use only int\n                gridData = gridData.filter(function (d) { return (\"\" + d).indexOf('.') < 0; });\n            }\n        }\n        return gridData;\n    };\n    c3_chart_internal_fn.getGridFilterToRemove = function (params) {\n        return params ? function (line) {\n            var found = false;\n            [].concat(params).forEach(function (param) {\n                if ((('value' in param && line.value === param.value) || ('class' in param && line['class'] === param['class']))) {\n                    found = true;\n                }\n            });\n            return found;\n        } : function () { return true; };\n    };\n    c3_chart_internal_fn.removeGridLines = function (params, forX) {\n        var $$ = this, config = $$.config,\n            toRemove = $$.getGridFilterToRemove(params),\n            toShow = function (line) { return !toRemove(line); },\n            classLines = forX ? CLASS.xgridLines : CLASS.ygridLines,\n            classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;\n        $$.main.select('.' + classLines).selectAll('.' + classLine).filter(toRemove)\n            .transition().duration(config.transition_duration)\n            .style('opacity', 0).remove();\n        if (forX) {\n            config.grid_x_lines = config.grid_x_lines.filter(toShow);\n        } else {\n            config.grid_y_lines = config.grid_y_lines.filter(toShow);\n        }\n    };\n\n    c3_chart_internal_fn.initTooltip = function () {\n        var $$ = this, config = $$.config, i;\n        $$.tooltip = $$.selectChart\n            .style(\"position\", \"relative\")\n          .append(\"div\")\n            .attr('class', CLASS.tooltipContainer)\n            .style(\"position\", \"absolute\")\n            .style(\"pointer-events\", \"none\")\n            .style(\"display\", \"none\");\n        // Show tooltip if needed\n        if (config.tooltip_init_show) {\n            if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {\n                config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);\n                for (i = 0; i < $$.data.targets[0].values.length; i++) {\n                    if (($$.data.targets[0].values[i].x - config.tooltip_init_x) === 0) { break; }\n                }\n                config.tooltip_init_x = i;\n            }\n            $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {\n                return $$.addName(d.values[config.tooltip_init_x]);\n            }), $$.axis.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));\n            $$.tooltip.style(\"top\", config.tooltip_init_position.top)\n                .style(\"left\", config.tooltip_init_position.left)\n                .style(\"display\", \"block\");\n        }\n    };\n    c3_chart_internal_fn.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {\n        var $$ = this, config = $$.config,\n            titleFormat = config.tooltip_format_title || defaultTitleFormat,\n            nameFormat = config.tooltip_format_name || function (name) { return name; },\n            valueFormat = config.tooltip_format_value || defaultValueFormat,\n            text, i, title, value, name, bgcolor;\n        for (i = 0; i < d.length; i++) {\n            if (! (d[i] && (d[i].value || d[i].value === 0))) { continue; }\n\n            if (! text) {\n                title = titleFormat ? titleFormat(d[i].x) : d[i].x;\n                text = \"<table class='\" + CLASS.tooltip + \"'>\" + (title || title === 0 ? \"<tr><th colspan='2'>\" + title + \"</th></tr>\" : \"\");\n            }\n\n            value = valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index);\n            if (value !== undefined) {\n                name = nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index);\n                bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);\n\n                text += \"<tr class='\" + CLASS.tooltipName + \"-\" + d[i].id + \"'>\";\n                text += \"<td class='name'><span style='background-color:\" + bgcolor + \"'></span>\" + name + \"</td>\";\n                text += \"<td class='value'>\" + value + \"</td>\";\n                text += \"</tr>\";\n            }\n        }\n        return text + \"</table>\";\n    };\n    c3_chart_internal_fn.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {\n        var $$ = this, config = $$.config, d3 = $$.d3;\n        var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;\n        var forArc = $$.hasArcType(),\n            mouse = d3.mouse(element);\n      // Determin tooltip position\n        if (forArc) {\n            tooltipLeft = (($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2) + mouse[0];\n            tooltipTop = ($$.height / 2) + mouse[1] + 20;\n        } else {\n            svgLeft = $$.getSvgLeft(true);\n            if (config.axis_rotated) {\n                tooltipLeft = svgLeft + mouse[0] + 100;\n                tooltipRight = tooltipLeft + tWidth;\n                chartRight = $$.currentWidth - $$.getCurrentPaddingRight();\n                tooltipTop = $$.x(dataToShow[0].x) + 20;\n            } else {\n                tooltipLeft = svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;\n                tooltipRight = tooltipLeft + tWidth;\n                chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();\n                tooltipTop = mouse[1] + 15;\n            }\n\n            if (tooltipRight > chartRight) {\n                // 20 is needed for Firefox to keep tooletip width\n                tooltipLeft -= tooltipRight - chartRight + 20;\n            }\n            if (tooltipTop + tHeight > $$.currentHeight) {\n                tooltipTop -= tHeight + 30;\n            }\n        }\n        if (tooltipTop < 0) {\n            tooltipTop = 0;\n        }\n        return {top: tooltipTop, left: tooltipLeft};\n    };\n    c3_chart_internal_fn.showTooltip = function (selectedData, element) {\n        var $$ = this, config = $$.config;\n        var tWidth, tHeight, position;\n        var forArc = $$.hasArcType(),\n            dataToShow = selectedData.filter(function (d) { return d && isValue(d.value); }),\n            positionFunction = config.tooltip_position || c3_chart_internal_fn.tooltipPosition;\n        if (dataToShow.length === 0 || !config.tooltip_show) {\n            return;\n        }\n        $$.tooltip.html(config.tooltip_contents.call($$, selectedData, $$.axis.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)).style(\"display\", \"block\");\n\n        // Get tooltip dimensions\n        tWidth = $$.tooltip.property('offsetWidth');\n        tHeight = $$.tooltip.property('offsetHeight');\n\n        position = positionFunction.call(this, dataToShow, tWidth, tHeight, element);\n        // Set tooltip\n        $$.tooltip\n            .style(\"top\", position.top + \"px\")\n            .style(\"left\", position.left + 'px');\n    };\n    c3_chart_internal_fn.hideTooltip = function () {\n        this.tooltip.style(\"display\", \"none\");\n    };\n\n    c3_chart_internal_fn.initLegend = function () {\n        var $$ = this;\n        $$.legendItemTextBox = {};\n        $$.legendHasRendered = false;\n        $$.legend = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('legend'));\n        if (!$$.config.legend_show) {\n            $$.legend.style('visibility', 'hidden');\n            $$.hiddenLegendIds = $$.mapToIds($$.data.targets);\n            return;\n        }\n        // MEMO: call here to update legend box and tranlate for all\n        // MEMO: translate will be upated by this, so transform not needed in updateLegend()\n        $$.updateLegendWithDefaults();\n    };\n    c3_chart_internal_fn.updateLegendWithDefaults = function () {\n        var $$ = this;\n        $$.updateLegend($$.mapToIds($$.data.targets), {withTransform: false, withTransitionForTransform: false, withTransition: false});\n    };\n    c3_chart_internal_fn.updateSizeForLegend = function (legendHeight, legendWidth) {\n        var $$ = this, config = $$.config, insetLegendPosition = {\n            top: $$.isLegendTop ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 : $$.currentHeight - legendHeight - $$.getCurrentPaddingBottom() - config.legend_inset_y,\n            left: $$.isLegendLeft ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 : $$.currentWidth - legendWidth - $$.getCurrentPaddingRight() - config.legend_inset_x + 0.5\n        };\n\n        $$.margin3 = {\n            top: $$.isLegendRight ? 0 : $$.isLegendInset ? insetLegendPosition.top : $$.currentHeight - legendHeight,\n            right: NaN,\n            bottom: 0,\n            left: $$.isLegendRight ? $$.currentWidth - legendWidth : $$.isLegendInset ? insetLegendPosition.left : 0\n        };\n    };\n    c3_chart_internal_fn.transformLegend = function (withTransition) {\n        var $$ = this;\n        (withTransition ? $$.legend.transition() : $$.legend).attr(\"transform\", $$.getTranslate('legend'));\n    };\n    c3_chart_internal_fn.updateLegendStep = function (step) {\n        this.legendStep = step;\n    };\n    c3_chart_internal_fn.updateLegendItemWidth = function (w) {\n        this.legendItemWidth = w;\n    };\n    c3_chart_internal_fn.updateLegendItemHeight = function (h) {\n        this.legendItemHeight = h;\n    };\n    c3_chart_internal_fn.getLegendWidth = function () {\n        var $$ = this;\n        return $$.config.legend_show ? $$.isLegendRight || $$.isLegendInset ? $$.legendItemWidth * ($$.legendStep + 1) : $$.currentWidth : 0;\n    };\n    c3_chart_internal_fn.getLegendHeight = function () {\n        var $$ = this, h = 0;\n        if ($$.config.legend_show) {\n            if ($$.isLegendRight) {\n                h = $$.currentHeight;\n            } else {\n                h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);\n            }\n        }\n        return h;\n    };\n    c3_chart_internal_fn.opacityForLegend = function (legendItem) {\n        return legendItem.classed(CLASS.legendItemHidden) ? null : 1;\n    };\n    c3_chart_internal_fn.opacityForUnfocusedLegend = function (legendItem) {\n        return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;\n    };\n    c3_chart_internal_fn.toggleFocusLegend = function (targetIds, focus) {\n        var $$ = this;\n        targetIds = $$.mapToTargetIds(targetIds);\n        $$.legend.selectAll('.' + CLASS.legendItem)\n            .filter(function (id) { return targetIds.indexOf(id) >= 0; })\n            .classed(CLASS.legendItemFocused, focus)\n          .transition().duration(100)\n            .style('opacity', function () {\n                var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;\n                return opacity.call($$, $$.d3.select(this));\n            });\n    };\n    c3_chart_internal_fn.revertLegend = function () {\n        var $$ = this, d3 = $$.d3;\n        $$.legend.selectAll('.' + CLASS.legendItem)\n            .classed(CLASS.legendItemFocused, false)\n            .transition().duration(100)\n            .style('opacity', function () { return $$.opacityForLegend(d3.select(this)); });\n    };\n    c3_chart_internal_fn.showLegend = function (targetIds) {\n        var $$ = this, config = $$.config;\n        if (!config.legend_show) {\n            config.legend_show = true;\n            $$.legend.style('visibility', 'visible');\n            if (!$$.legendHasRendered) {\n                $$.updateLegendWithDefaults();\n            }\n        }\n        $$.removeHiddenLegendIds(targetIds);\n        $$.legend.selectAll($$.selectorLegends(targetIds))\n            .style('visibility', 'visible')\n            .transition()\n            .style('opacity', function () { return $$.opacityForLegend($$.d3.select(this)); });\n    };\n    c3_chart_internal_fn.hideLegend = function (targetIds) {\n        var $$ = this, config = $$.config;\n        if (config.legend_show && isEmpty(targetIds)) {\n            config.legend_show = false;\n            $$.legend.style('visibility', 'hidden');\n        }\n        $$.addHiddenLegendIds(targetIds);\n        $$.legend.selectAll($$.selectorLegends(targetIds))\n            .style('opacity', 0)\n            .style('visibility', 'hidden');\n    };\n    c3_chart_internal_fn.clearLegendItemTextBoxCache = function () {\n        this.legendItemTextBox = {};\n    };\n    c3_chart_internal_fn.updateLegend = function (targetIds, options, transitions) {\n        var $$ = this, config = $$.config;\n        var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect;\n        var paddingTop = 4, paddingRight = 10, maxWidth = 0, maxHeight = 0, posMin = 10, tileWidth = 15;\n        var l, totalLength = 0, offsets = {}, widths = {}, heights = {}, margins = [0], steps = {}, step = 0;\n        var withTransition, withTransitionForTransform;\n        var texts, rects, tiles, background;\n\n        options = options || {};\n        withTransition = getOption(options, \"withTransition\", true);\n        withTransitionForTransform = getOption(options, \"withTransitionForTransform\", true);\n\n        function getTextBox(textElement, id) {\n            if (!$$.legendItemTextBox[id]) {\n                $$.legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem);\n            }\n            return $$.legendItemTextBox[id];\n        }\n\n        function updatePositions(textElement, id, index) {\n            var reset = index === 0, isLast = index === targetIds.length - 1,\n                box = getTextBox(textElement, id),\n                itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight),\n                itemHeight = box.height + paddingTop,\n                itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,\n                areaLength = $$.isLegendRight || $$.isLegendInset ? $$.getLegendHeight() : $$.getLegendWidth(),\n                margin, maxLength;\n\n            // MEMO: care about condifion of step, totalLength\n            function updateValues(id, withoutStep) {\n                if (!withoutStep) {\n                    margin = (areaLength - totalLength - itemLength) / 2;\n                    if (margin < posMin) {\n                        margin = (areaLength - itemLength) / 2;\n                        totalLength = 0;\n                        step++;\n                    }\n                }\n                steps[id] = step;\n                margins[step] = $$.isLegendInset ? 10 : margin;\n                offsets[id] = totalLength;\n                totalLength += itemLength;\n            }\n\n            if (reset) {\n                totalLength = 0;\n                step = 0;\n                maxWidth = 0;\n                maxHeight = 0;\n            }\n\n            if (config.legend_show && !$$.isLegendToShow(id)) {\n                widths[id] = heights[id] = steps[id] = offsets[id] = 0;\n                return;\n            }\n\n            widths[id] = itemWidth;\n            heights[id] = itemHeight;\n\n            if (!maxWidth || itemWidth >= maxWidth) { maxWidth = itemWidth; }\n            if (!maxHeight || itemHeight >= maxHeight) { maxHeight = itemHeight; }\n            maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;\n\n            if (config.legend_equally) {\n                Object.keys(widths).forEach(function (id) { widths[id] = maxWidth; });\n                Object.keys(heights).forEach(function (id) { heights[id] = maxHeight; });\n                margin = (areaLength - maxLength * targetIds.length) / 2;\n                if (margin < posMin) {\n                    totalLength = 0;\n                    step = 0;\n                    targetIds.forEach(function (id) { updateValues(id); });\n                }\n                else {\n                    updateValues(id, true);\n                }\n            } else {\n                updateValues(id);\n            }\n        }\n\n        if ($$.isLegendInset) {\n            step = config.legend_inset_step ? config.legend_inset_step : targetIds.length;\n            $$.updateLegendStep(step);\n        }\n\n        if ($$.isLegendRight) {\n            xForLegend = function (id) { return maxWidth * steps[id]; };\n            yForLegend = function (id) { return margins[steps[id]] + offsets[id]; };\n        } else if ($$.isLegendInset) {\n            xForLegend = function (id) { return maxWidth * steps[id] + 10; };\n            yForLegend = function (id) { return margins[steps[id]] + offsets[id]; };\n        } else {\n            xForLegend = function (id) { return margins[steps[id]] + offsets[id]; };\n            yForLegend = function (id) { return maxHeight * steps[id]; };\n        }\n        xForLegendText = function (id, i) { return xForLegend(id, i) + 14; };\n        yForLegendText = function (id, i) { return yForLegend(id, i) + 9; };\n        xForLegendRect = function (id, i) { return xForLegend(id, i); };\n        yForLegendRect = function (id, i) { return yForLegend(id, i) - 5; };\n\n        // Define g for legend area\n        l = $$.legend.selectAll('.' + CLASS.legendItem)\n            .data(targetIds)\n            .enter().append('g')\n            .attr('class', function (id) { return $$.generateClass(CLASS.legendItem, id); })\n            .style('visibility', function (id) { return $$.isLegendToShow(id) ? 'visible' : 'hidden'; })\n            .style('cursor', 'pointer')\n            .on('click', function (id) {\n                if (config.legend_item_onclick) {\n                    config.legend_item_onclick.call($$, id);\n                } else {\n                    if ($$.d3.event.altKey) {\n                        $$.api.hide();\n                        $$.api.show(id);\n                    } else {\n                        $$.api.toggle(id);\n                        $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();\n                    }\n                }\n            })\n            .on('mouseover', function (id) {\n                $$.d3.select(this).classed(CLASS.legendItemFocused, true);\n                if (!$$.transiting && $$.isTargetToShow(id)) {\n                    $$.api.focus(id);\n                }\n                if (config.legend_item_onmouseover) {\n                    config.legend_item_onmouseover.call($$, id);\n                }\n            })\n            .on('mouseout', function (id) {\n                $$.d3.select(this).classed(CLASS.legendItemFocused, false);\n                $$.api.revert();\n                if (config.legend_item_onmouseout) {\n                    config.legend_item_onmouseout.call($$, id);\n                }\n            });\n        l.append('text')\n            .text(function (id) { return isDefined(config.data_names[id]) ? config.data_names[id] : id; })\n            .each(function (id, i) { updatePositions(this, id, i); })\n            .style(\"pointer-events\", \"none\")\n            .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)\n            .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);\n        l.append('rect')\n            .attr(\"class\", CLASS.legendItemEvent)\n            .style('fill-opacity', 0)\n            .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200)\n            .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);\n        l.append('rect')\n            .attr(\"class\", CLASS.legendItemTile)\n            .style(\"pointer-events\", \"none\")\n            .style('fill', $$.color)\n            .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)\n            .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegend)\n            .attr('width', 10)\n            .attr('height', 10);\n\n        // Set background for inset legend\n        background = $$.legend.select('.' + CLASS.legendBackground + ' rect');\n        if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {\n            background = $$.legend.insert('g', '.' + CLASS.legendItem)\n                .attr(\"class\", CLASS.legendBackground)\n                .append('rect');\n        }\n\n        texts = $$.legend.selectAll('text')\n            .data(targetIds)\n            .text(function (id) { return isDefined(config.data_names[id]) ? config.data_names[id] : id; }) // MEMO: needed for update\n            .each(function (id, i) { updatePositions(this, id, i); });\n        (withTransition ? texts.transition() : texts)\n            .attr('x', xForLegendText)\n            .attr('y', yForLegendText);\n\n        rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent)\n            .data(targetIds);\n        (withTransition ? rects.transition() : rects)\n            .attr('width', function (id) { return widths[id]; })\n            .attr('height', function (id) { return heights[id]; })\n            .attr('x', xForLegendRect)\n            .attr('y', yForLegendRect);\n\n        tiles = $$.legend.selectAll('rect.' + CLASS.legendItemTile)\n            .data(targetIds);\n        (withTransition ? tiles.transition() : tiles)\n            .style('fill', $$.color)\n            .attr('x', xForLegend)\n            .attr('y', yForLegend);\n\n        if (background) {\n            (withTransition ? background.transition() : background)\n                .attr('height', $$.getLegendHeight() - 12)\n                .attr('width', maxWidth * (step + 1) + 10);\n        }\n\n        // toggle legend state\n        $$.legend.selectAll('.' + CLASS.legendItem)\n            .classed(CLASS.legendItemHidden, function (id) { return !$$.isTargetToShow(id); });\n\n        // Update all to reflect change of legend\n        $$.updateLegendItemWidth(maxWidth);\n        $$.updateLegendItemHeight(maxHeight);\n        $$.updateLegendStep(step);\n        // Update size and scale\n        $$.updateSizes();\n        $$.updateScales();\n        $$.updateSvgSize();\n        // Update g positions\n        $$.transformAll(withTransitionForTransform, transitions);\n        $$.legendHasRendered = true;\n    };\n\n    function Axis(owner) {\n        API.call(this, owner);\n    }\n\n    inherit(API, Axis);\n\n    Axis.prototype.init = function init() {\n\n        var $$ = this.owner, config = $$.config, main = $$.main;\n        $$.axes.x = main.append(\"g\")\n            .attr(\"class\", CLASS.axis + ' ' + CLASS.axisX)\n            .attr(\"clip-path\", $$.clipPathForXAxis)\n            .attr(\"transform\", $$.getTranslate('x'))\n            .style(\"visibility\", config.axis_x_show ? 'visible' : 'hidden');\n        $$.axes.x.append(\"text\")\n            .attr(\"class\", CLASS.axisXLabel)\n            .attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\")\n            .style(\"text-anchor\", this.textAnchorForXAxisLabel.bind(this));\n        $$.axes.y = main.append(\"g\")\n            .attr(\"class\", CLASS.axis + ' ' + CLASS.axisY)\n            .attr(\"clip-path\", config.axis_y_inner ? \"\" : $$.clipPathForYAxis)\n            .attr(\"transform\", $$.getTranslate('y'))\n            .style(\"visibility\", config.axis_y_show ? 'visible' : 'hidden');\n        $$.axes.y.append(\"text\")\n            .attr(\"class\", CLASS.axisYLabel)\n            .attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\")\n            .style(\"text-anchor\", this.textAnchorForYAxisLabel.bind(this));\n\n        $$.axes.y2 = main.append(\"g\")\n            .attr(\"class\", CLASS.axis + ' ' + CLASS.axisY2)\n            // clip-path?\n            .attr(\"transform\", $$.getTranslate('y2'))\n            .style(\"visibility\", config.axis_y2_show ? 'visible' : 'hidden');\n        $$.axes.y2.append(\"text\")\n            .attr(\"class\", CLASS.axisY2Label)\n            .attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\")\n            .style(\"text-anchor\", this.textAnchorForY2AxisLabel.bind(this));\n    };\n    Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\n        var $$ = this.owner, config = $$.config,\n            axisParams = {\n                isCategory: $$.isCategorized(),\n                withOuterTick: withOuterTick,\n                tickMultiline: config.axis_x_tick_multiline,\n                tickWidth: config.axis_x_tick_width,\n                tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate,\n                withoutTransition: withoutTransition,\n            },\n            axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient);\n\n        if ($$.isTimeSeries() && tickValues) {\n            tickValues = tickValues.map(function (v) { return $$.parseDate(v); });\n        }\n\n        // Set tick\n        axis.tickFormat(tickFormat).tickValues(tickValues);\n        if ($$.isCategorized()) {\n            axis.tickCentered(config.axis_x_tick_centered);\n            if (isEmpty(config.axis_x_tick_culling)) {\n                config.axis_x_tick_culling = false;\n            }\n        }\n\n        return axis;\n    };\n    Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) {\n        var $$ = this.owner, config = $$.config, tickValues;\n        if (config.axis_x_tick_fit || config.axis_x_tick_count) {\n            tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries());\n        }\n        if (axis) {\n            axis.tickValues(tickValues);\n        } else {\n            $$.xAxis.tickValues(tickValues);\n            $$.subXAxis.tickValues(tickValues);\n        }\n        return tickValues;\n    };\n    Axis.prototype.getYAxis = function getYAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition) {\n        var axisParams = {\n            withOuterTick: withOuterTick,\n            withoutTransition: withoutTransition,\n        },\n            $$ = this.owner,\n            d3 = $$.d3,\n            config = $$.config,\n            axis = c3_axis(d3, axisParams).scale(scale).orient(orient).tickFormat(tickFormat);\n        if ($$.isTimeSeriesY()) {\n            axis.ticks(d3.time[config.axis_y_tick_time_value], config.axis_y_tick_time_interval);\n        } else {\n            axis.tickValues(tickValues);\n        }\n        return axis;\n    };\n    Axis.prototype.getId = function getId(id) {\n        var config = this.owner.config;\n        return id in config.data_axes ? config.data_axes[id] : 'y';\n    };\n    Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() {\n        var $$ = this.owner, config = $$.config,\n            format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) { return v < 0 ? v.toFixed(0) : v; };\n        if (config.axis_x_tick_format) {\n            if (isFunction(config.axis_x_tick_format)) {\n                format = config.axis_x_tick_format;\n            } else if ($$.isTimeSeries()) {\n                format = function (date) {\n                    return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : \"\";\n                };\n            }\n        }\n        return isFunction(format) ? function (v) { return format.call($$, v); } : format;\n    };\n    Axis.prototype.getTickValues = function getTickValues(tickValues, axis) {\n        return tickValues ? tickValues : axis ? axis.tickValues() : undefined;\n    };\n    Axis.prototype.getXAxisTickValues = function getXAxisTickValues() {\n        return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis);\n    };\n    Axis.prototype.getYAxisTickValues = function getYAxisTickValues() {\n        return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis);\n    };\n    Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() {\n        return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis);\n    };\n    Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) {\n        var $$ = this.owner, config = $$.config, option;\n        if (axisId === 'y') {\n            option = config.axis_y_label;\n        } else if (axisId === 'y2') {\n            option = config.axis_y2_label;\n        } else if (axisId === 'x') {\n            option = config.axis_x_label;\n        }\n        return option;\n    };\n    Axis.prototype.getLabelText = function getLabelText(axisId) {\n        var option = this.getLabelOptionByAxisId(axisId);\n        return isString(option) ? option : option ? option.text : null;\n    };\n    Axis.prototype.setLabelText = function setLabelText(axisId, text) {\n        var $$ = this.owner, config = $$.config,\n            option = this.getLabelOptionByAxisId(axisId);\n        if (isString(option)) {\n            if (axisId === 'y') {\n                config.axis_y_label = text;\n            } else if (axisId === 'y2') {\n                config.axis_y2_label = text;\n            } else if (axisId === 'x') {\n                config.axis_x_label = text;\n            }\n        } else if (option) {\n            option.text = text;\n        }\n    };\n    Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) {\n        var option = this.getLabelOptionByAxisId(axisId),\n            position = (option && typeof option === 'object' && option.position) ? option.position : defaultPosition;\n        return {\n            isInner: position.indexOf('inner') >= 0,\n            isOuter: position.indexOf('outer') >= 0,\n            isLeft: position.indexOf('left') >= 0,\n            isCenter: position.indexOf('center') >= 0,\n            isRight: position.indexOf('right') >= 0,\n            isTop: position.indexOf('top') >= 0,\n            isMiddle: position.indexOf('middle') >= 0,\n            isBottom: position.indexOf('bottom') >= 0\n        };\n    };\n    Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() {\n        return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right');\n    };\n    Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() {\n        return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n    };\n    Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() {\n        return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n    };\n    Axis.prototype.getLabelPositionById = function getLabelPositionById(id) {\n        return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();\n    };\n    Axis.prototype.textForXAxisLabel = function textForXAxisLabel() {\n        return this.getLabelText('x');\n    };\n    Axis.prototype.textForYAxisLabel = function textForYAxisLabel() {\n        return this.getLabelText('y');\n    };\n    Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() {\n        return this.getLabelText('y2');\n    };\n    Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) {\n        var $$ = this.owner;\n        if (forHorizontal) {\n            return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;\n        } else {\n            return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0;\n        }\n    };\n    Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) {\n        if (forHorizontal) {\n            return position.isLeft ? \"0.5em\" : position.isRight ? \"-0.5em\" : \"0\";\n        } else {\n            return position.isTop ? \"-0.5em\" : position.isBottom ? \"0.5em\" : \"0\";\n        }\n    };\n    Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) {\n        if (forHorizontal) {\n            return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';\n        } else {\n            return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';\n        }\n    };\n    Axis.prototype.xForXAxisLabel = function xForXAxisLabel() {\n        return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n    };\n    Axis.prototype.xForYAxisLabel = function xForYAxisLabel() {\n        return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n    };\n    Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() {\n        return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n    };\n    Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() {\n        return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n    };\n    Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() {\n        return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n    };\n    Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() {\n        return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n    };\n    Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() {\n        var $$ = this.owner, config = $$.config,\n            position = this.getXAxisLabelPosition();\n        if (config.axis_rotated) {\n            return position.isInner ? \"1.2em\" : -25 - this.getMaxTickWidth('x');\n        } else {\n            return position.isInner ? \"-0.5em\" : config.axis_x_height ? config.axis_x_height - 10 : \"3em\";\n        }\n    };\n    Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() {\n        var $$ = this.owner,\n            position = this.getYAxisLabelPosition();\n        if ($$.config.axis_rotated) {\n            return position.isInner ? \"-0.5em\" : \"3em\";\n        } else {\n            return position.isInner ? \"1.2em\" : -10 - ($$.config.axis_y_inner ? 0 : (this.getMaxTickWidth('y') + 10));\n        }\n    };\n    Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() {\n        var $$ = this.owner,\n            position = this.getY2AxisLabelPosition();\n        if ($$.config.axis_rotated) {\n            return position.isInner ? \"1.2em\" : \"-2.2em\";\n        } else {\n            return position.isInner ? \"-0.5em\" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth('y2') + 15));\n        }\n    };\n    Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() {\n        var $$ = this.owner;\n        return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition());\n    };\n    Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() {\n        var $$ = this.owner;\n        return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition());\n    };\n    Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() {\n        var $$ = this.owner;\n        return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition());\n    };\n    Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) {\n        var $$ = this.owner, config = $$.config,\n            maxWidth = 0, targetsToShow, scale, axis, dummy, svg;\n        if (withoutRecompute && $$.currentMaxTickWidths[id]) {\n            return $$.currentMaxTickWidths[id];\n        }\n        if ($$.svg) {\n            targetsToShow = $$.filterTargetsToShow($$.data.targets);\n            if (id === 'y') {\n                scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));\n                axis = this.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, false, true);\n            } else if (id === 'y2') {\n                scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));\n                axis = this.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, false, true);\n            } else {\n                scale = $$.x.copy().domain($$.getXDomain(targetsToShow));\n                axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true);\n                this.updateXAxisTickValues(targetsToShow, axis);\n            }\n            dummy = $$.d3.select('body').append('div').classed('c3', true);\n            svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0),\n            svg.append('g').call(axis).each(function () {\n                $$.d3.select(this).selectAll('text').each(function () {\n                    var box = this.getBoundingClientRect();\n                    if (maxWidth < box.width) { maxWidth = box.width; }\n                });\n                dummy.remove();\n            });\n        }\n        $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;\n        return $$.currentMaxTickWidths[id];\n    };\n\n    Axis.prototype.updateLabels = function updateLabels(withTransition) {\n        var $$ = this.owner;\n        var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel),\n            axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel),\n            axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);\n        (withTransition ? axisXLabel.transition() : axisXLabel)\n            .attr(\"x\", this.xForXAxisLabel.bind(this))\n            .attr(\"dx\", this.dxForXAxisLabel.bind(this))\n            .attr(\"dy\", this.dyForXAxisLabel.bind(this))\n            .text(this.textForXAxisLabel.bind(this));\n        (withTransition ? axisYLabel.transition() : axisYLabel)\n            .attr(\"x\", this.xForYAxisLabel.bind(this))\n            .attr(\"dx\", this.dxForYAxisLabel.bind(this))\n            .attr(\"dy\", this.dyForYAxisLabel.bind(this))\n            .text(this.textForYAxisLabel.bind(this));\n        (withTransition ? axisY2Label.transition() : axisY2Label)\n            .attr(\"x\", this.xForY2AxisLabel.bind(this))\n            .attr(\"dx\", this.dxForY2AxisLabel.bind(this))\n            .attr(\"dy\", this.dyForY2AxisLabel.bind(this))\n            .text(this.textForY2AxisLabel.bind(this));\n    };\n    Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) {\n        if (!isValue(padding[key])) {\n            return defaultValue;\n        }\n        if (padding.unit === 'ratio') {\n            return padding[key] * domainLength;\n        }\n        // assume padding is pixels if unit is not specified\n        return this.convertPixelsToAxisPadding(padding[key], domainLength);\n    };\n    Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) {\n        var $$ = this.owner,\n            length = $$.config.axis_rotated ? $$.width : $$.height;\n        return domainLength * (pixels / length);\n    };\n    Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) {\n        var tickValues = values, targetCount, start, end, count, interval, i, tickValue;\n        if (tickCount) {\n            targetCount = isFunction(tickCount) ? tickCount() : tickCount;\n            // compute ticks according to tickCount\n            if (targetCount === 1) {\n                tickValues = [values[0]];\n            } else if (targetCount === 2) {\n                tickValues = [values[0], values[values.length - 1]];\n            } else if (targetCount > 2) {\n                count = targetCount - 2;\n                start = values[0];\n                end = values[values.length - 1];\n                interval = (end - start) / (count + 1);\n                // re-construct unique values\n                tickValues = [start];\n                for (i = 0; i < count; i++) {\n                    tickValue = +start + interval * (i + 1);\n                    tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);\n                }\n                tickValues.push(end);\n            }\n        }\n        if (!forTimeSeries) { tickValues = tickValues.sort(function (a, b) { return a - b; }); }\n        return tickValues;\n    };\n    Axis.prototype.generateTransitions = function generateTransitions(duration) {\n        var $$ = this.owner, axes = $$.axes;\n        return {\n            axisX: duration ? axes.x.transition().duration(duration) : axes.x,\n            axisY: duration ? axes.y.transition().duration(duration) : axes.y,\n            axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,\n            axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx\n        };\n    };\n    Axis.prototype.redraw = function redraw(transitions, isHidden) {\n        var $$ = this.owner;\n        $$.axes.x.style(\"opacity\", isHidden ? 0 : 1);\n        $$.axes.y.style(\"opacity\", isHidden ? 0 : 1);\n        $$.axes.y2.style(\"opacity\", isHidden ? 0 : 1);\n        $$.axes.subx.style(\"opacity\", isHidden ? 0 : 1);\n        transitions.axisX.call($$.xAxis);\n        transitions.axisY.call($$.yAxis);\n        transitions.axisY2.call($$.y2Axis);\n        transitions.axisSubX.call($$.subXAxis);\n    };\n\n    c3_chart_internal_fn.getClipPath = function (id) {\n        var isIE9 = window.navigator.appVersion.toLowerCase().indexOf(\"msie 9.\") >= 0;\n        return \"url(\" + (isIE9 ? \"\" : document.URL.split('#')[0]) + \"#\" + id + \")\";\n    };\n    c3_chart_internal_fn.appendClip = function (parent, id) {\n        return parent.append(\"clipPath\").attr(\"id\", id).append(\"rect\");\n    };\n    c3_chart_internal_fn.getAxisClipX = function (forHorizontal) {\n        // axis line width + padding for left\n        var left = Math.max(30, this.margin.left);\n        return forHorizontal ? -(1 + left) : -(left - 1);\n    };\n    c3_chart_internal_fn.getAxisClipY = function (forHorizontal) {\n        return forHorizontal ? -20 : -this.margin.top;\n    };\n    c3_chart_internal_fn.getXAxisClipX = function () {\n        var $$ = this;\n        return $$.getAxisClipX(!$$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getXAxisClipY = function () {\n        var $$ = this;\n        return $$.getAxisClipY(!$$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getYAxisClipX = function () {\n        var $$ = this;\n        return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getYAxisClipY = function () {\n        var $$ = this;\n        return $$.getAxisClipY($$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getAxisClipWidth = function (forHorizontal) {\n        var $$ = this,\n            left = Math.max(30, $$.margin.left),\n            right = Math.max(30, $$.margin.right);\n        // width + axis line width + padding for left/right\n        return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;\n    };\n    c3_chart_internal_fn.getAxisClipHeight = function (forHorizontal) {\n        // less than 20 is not enough to show the axis label 'outer' without legend\n        return (forHorizontal ? this.margin.bottom : (this.margin.top + this.height)) + 20;\n    };\n    c3_chart_internal_fn.getXAxisClipWidth = function () {\n        var $$ = this;\n        return $$.getAxisClipWidth(!$$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getXAxisClipHeight = function () {\n        var $$ = this;\n        return $$.getAxisClipHeight(!$$.config.axis_rotated);\n    };\n    c3_chart_internal_fn.getYAxisClipWidth = function () {\n        var $$ = this;\n        return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);\n    };\n    c3_chart_internal_fn.getYAxisClipHeight = function () {\n        var $$ = this;\n        return $$.getAxisClipHeight($$.config.axis_rotated);\n    };\n\n    c3_chart_internal_fn.initPie = function () {\n        var $$ = this, d3 = $$.d3, config = $$.config;\n        $$.pie = d3.layout.pie().value(function (d) {\n            return d.values.reduce(function (a, b) { return a + b.value; }, 0);\n        });\n        if (!config.data_order) {\n            $$.pie.sort(null);\n        }\n    };\n\n    c3_chart_internal_fn.updateRadius = function () {\n        var $$ = this, config = $$.config,\n            w = config.gauge_width || config.donut_width;\n        $$.radiusExpanded = Math.min($$.arcWidth, $$.arcHeight) / 2;\n        $$.radius = $$.radiusExpanded * 0.95;\n        $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;\n        $$.innerRadius = $$.hasType('donut') || $$.hasType('gauge') ? $$.radius * $$.innerRadiusRatio : 0;\n    };\n\n    c3_chart_internal_fn.updateArc = function () {\n        var $$ = this;\n        $$.svgArc = $$.getSvgArc();\n        $$.svgArcExpanded = $$.getSvgArcExpanded();\n        $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);\n    };\n\n    c3_chart_internal_fn.updateAngle = function (d) {\n        var $$ = this, config = $$.config,\n            found = false, index = 0,\n            gMin = config.gauge_min, gMax = config.gauge_max, gTic, gValue;\n        $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {\n            if (! found && t.data.id === d.data.id) {\n                found = true;\n                d = t;\n                d.index = index;\n            }\n            index++;\n        });\n        if (isNaN(d.startAngle)) {\n            d.startAngle = 0;\n        }\n        if (isNaN(d.endAngle)) {\n            d.endAngle = d.startAngle;\n        }\n        if ($$.isGaugeType(d.data)) {\n            gTic = (Math.PI) / (gMax - gMin);\n            gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : (gMax - gMin);\n            d.startAngle = -1 * (Math.PI / 2);\n            d.endAngle = d.startAngle + gTic * gValue;\n        }\n        return found ? d : null;\n    };\n\n    c3_chart_internal_fn.getSvgArc = function () {\n        var $$ = this,\n            arc = $$.d3.svg.arc().outerRadius($$.radius).innerRadius($$.innerRadius),\n            newArc = function (d, withoutUpdate) {\n                var updated;\n                if (withoutUpdate) { return arc(d); } // for interpolate\n                updated = $$.updateAngle(d);\n                return updated ? arc(updated) : \"M 0 0\";\n            };\n        // TODO: extends all function\n        newArc.centroid = arc.centroid;\n        return newArc;\n    };\n\n    c3_chart_internal_fn.getSvgArcExpanded = function (rate) {\n        var $$ = this,\n            arc = $$.d3.svg.arc().outerRadius($$.radiusExpanded * (rate ? rate : 1)).innerRadius($$.innerRadius);\n        return function (d) {\n            var updated = $$.updateAngle(d);\n            return updated ? arc(updated) : \"M 0 0\";\n        };\n    };\n\n    c3_chart_internal_fn.getArc = function (d, withoutUpdate, force) {\n        return force || this.isArcType(d.data) ? this.svgArc(d, withoutUpdate) : \"M 0 0\";\n    };\n\n\n    c3_chart_internal_fn.transformForArcLabel = function (d) {\n        var $$ = this,\n            updated = $$.updateAngle(d), c, x, y, h, ratio, translate = \"\";\n        if (updated && !$$.hasType('gauge')) {\n            c = this.svgArc.centroid(updated);\n            x = isNaN(c[0]) ? 0 : c[0];\n            y = isNaN(c[1]) ? 0 : c[1];\n            h = Math.sqrt(x * x + y * y);\n            // TODO: ratio should be an option?\n            ratio = $$.radius && h ? (36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * $$.radius / h : 0;\n            translate = \"translate(\" + (x * ratio) +  ',' + (y * ratio) +  \")\";\n        }\n        return translate;\n    };\n\n    c3_chart_internal_fn.getArcRatio = function (d) {\n        var $$ = this,\n            whole = $$.hasType('gauge') ? Math.PI : (Math.PI * 2);\n        return d ? (d.endAngle - d.startAngle) / whole : null;\n    };\n\n    c3_chart_internal_fn.convertToArcData = function (d) {\n        return this.addName({\n            id: d.data.id,\n            value: d.value,\n            ratio: this.getArcRatio(d),\n            index: d.index\n        });\n    };\n\n    c3_chart_internal_fn.textForArcLabel = function (d) {\n        var $$ = this,\n            updated, value, ratio, id, format;\n        if (! $$.shouldShowArcLabel()) { return \"\"; }\n        updated = $$.updateAngle(d);\n        value = updated ? updated.value : null;\n        ratio = $$.getArcRatio(updated);\n        id = d.data.id;\n        if (! $$.hasType('gauge') && ! $$.meetsArcLabelThreshold(ratio)) { return \"\"; }\n        format = $$.getArcLabelFormat();\n        return format ? format(value, ratio, id) : $$.defaultArcValueFormat(value, ratio);\n    };\n\n    c3_chart_internal_fn.expandArc = function (targetIds) {\n        var $$ = this, interval;\n\n        // MEMO: avoid to cancel transition\n        if ($$.transiting) {\n            interval = window.setInterval(function () {\n                if (!$$.transiting) {\n                    window.clearInterval(interval);\n                    if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {\n                        $$.expandArc(targetIds);\n                    }\n                }\n            }, 10);\n            return;\n        }\n\n        targetIds = $$.mapToTargetIds(targetIds);\n\n        $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {\n            if (! $$.shouldExpand(d.data.id)) { return; }\n            $$.d3.select(this).selectAll('path')\n                .transition().duration(50)\n                .attr(\"d\", $$.svgArcExpanded)\n                .transition().duration(100)\n                .attr(\"d\", $$.svgArcExpandedSub)\n                .each(function (d) {\n                    if ($$.isDonutType(d.data)) {\n                        // callback here\n                    }\n                });\n        });\n    };\n\n    c3_chart_internal_fn.unexpandArc = function (targetIds) {\n        var $$ = this;\n\n        if ($$.transiting) { return; }\n\n        targetIds = $$.mapToTargetIds(targetIds);\n\n        $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path')\n            .transition().duration(50)\n            .attr(\"d\", $$.svgArc);\n        $$.svg.selectAll('.' + CLASS.arc)\n            .style(\"opacity\", 1);\n    };\n\n    c3_chart_internal_fn.shouldExpand = function (id) {\n        var $$ = this, config = $$.config;\n        return ($$.isDonutType(id) && config.donut_expand) || ($$.isGaugeType(id) && config.gauge_expand) || ($$.isPieType(id) && config.pie_expand);\n    };\n\n    c3_chart_internal_fn.shouldShowArcLabel = function () {\n        var $$ = this, config = $$.config, shouldShow = true;\n        if ($$.hasType('donut')) {\n            shouldShow = config.donut_label_show;\n        } else if ($$.hasType('pie')) {\n            shouldShow = config.pie_label_show;\n        }\n        // when gauge, always true\n        return shouldShow;\n    };\n\n    c3_chart_internal_fn.meetsArcLabelThreshold = function (ratio) {\n        var $$ = this, config = $$.config,\n            threshold = $$.hasType('donut') ? config.donut_label_threshold : config.pie_label_threshold;\n        return ratio >= threshold;\n    };\n\n    c3_chart_internal_fn.getArcLabelFormat = function () {\n        var $$ = this, config = $$.config,\n            format = config.pie_label_format;\n        if ($$.hasType('gauge')) {\n            format = config.gauge_label_format;\n        } else if ($$.hasType('donut')) {\n            format = config.donut_label_format;\n        }\n        return format;\n    };\n\n    c3_chart_internal_fn.getArcTitle = function () {\n        var $$ = this;\n        return $$.hasType('donut') ? $$.config.donut_title : \"\";\n    };\n\n    c3_chart_internal_fn.updateTargetsForArc = function (targets) {\n        var $$ = this, main = $$.main,\n            mainPieUpdate, mainPieEnter,\n            classChartArc = $$.classChartArc.bind($$),\n            classArcs = $$.classArcs.bind($$),\n            classFocus = $$.classFocus.bind($$);\n        mainPieUpdate = main.select('.' + CLASS.chartArcs).selectAll('.' + CLASS.chartArc)\n            .data($$.pie(targets))\n            .attr(\"class\", function (d) { return classChartArc(d) + classFocus(d.data); });\n        mainPieEnter = mainPieUpdate.enter().append(\"g\")\n            .attr(\"class\", classChartArc);\n        mainPieEnter.append('g')\n            .attr('class', classArcs);\n        mainPieEnter.append(\"text\")\n            .attr(\"dy\", $$.hasType('gauge') ? \"-.1em\" : \".35em\")\n            .style(\"opacity\", 0)\n            .style(\"text-anchor\", \"middle\")\n            .style(\"pointer-events\", \"none\");\n        // MEMO: can not keep same color..., but not bad to update color in redraw\n        //mainPieUpdate.exit().remove();\n    };\n\n    c3_chart_internal_fn.initArc = function () {\n        var $$ = this;\n        $$.arcs = $$.main.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartArcs)\n            .attr(\"transform\", $$.getTranslate('arc'));\n        $$.arcs.append('text')\n            .attr('class', CLASS.chartArcsTitle)\n            .style(\"text-anchor\", \"middle\")\n            .text($$.getArcTitle());\n    };\n\n    c3_chart_internal_fn.redrawArc = function (duration, durationForExit, withTransform) {\n        var $$ = this, d3 = $$.d3, config = $$.config, main = $$.main,\n            mainArc;\n        mainArc = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc)\n            .data($$.arcData.bind($$));\n        mainArc.enter().append('path')\n            .attr(\"class\", $$.classArc.bind($$))\n            .style(\"fill\", function (d) { return $$.color(d.data); })\n            .style(\"cursor\", function (d) { return config.interaction_enabled && config.data_selection_isselectable(d) ? \"pointer\" : null; })\n            .style(\"opacity\", 0)\n            .each(function (d) {\n                if ($$.isGaugeType(d.data)) {\n                    d.startAngle = d.endAngle = -1 * (Math.PI / 2);\n                }\n                this._current = d;\n            });\n        mainArc\n            .attr(\"transform\", function (d) { return !$$.isGaugeType(d.data) && withTransform ? \"scale(0)\" : \"\"; })\n            .style(\"opacity\", function (d) { return d === this._current ? 0 : 1; })\n            .on('mouseover', config.interaction_enabled ? function (d) {\n                var updated, arcData;\n                if ($$.transiting) { // skip while transiting\n                    return;\n                }\n                updated = $$.updateAngle(d);\n                arcData = $$.convertToArcData(updated);\n                // transitions\n                $$.expandArc(updated.data.id);\n                $$.api.focus(updated.data.id);\n                $$.toggleFocusLegend(updated.data.id, true);\n                $$.config.data_onmouseover(arcData, this);\n            } : null)\n            .on('mousemove', config.interaction_enabled ? function (d) {\n                var updated = $$.updateAngle(d),\n                    arcData = $$.convertToArcData(updated),\n                    selectedData = [arcData];\n                $$.showTooltip(selectedData, this);\n            } : null)\n            .on('mouseout', config.interaction_enabled ? function (d) {\n                var updated, arcData;\n                if ($$.transiting) { // skip while transiting\n                    return;\n                }\n                updated = $$.updateAngle(d);\n                arcData = $$.convertToArcData(updated);\n                // transitions\n                $$.unexpandArc(updated.data.id);\n                $$.api.revert();\n                $$.revertLegend();\n                $$.hideTooltip();\n                $$.config.data_onmouseout(arcData, this);\n            } : null)\n            .on('click', config.interaction_enabled ? function (d, i) {\n                var updated = $$.updateAngle(d),\n                    arcData = $$.convertToArcData(updated);\n                if ($$.toggleShape) { $$.toggleShape(this, arcData, i); }\n                $$.config.data_onclick.call($$.api, arcData, this);\n            } : null)\n            .each(function () { $$.transiting = true; })\n            .transition().duration(duration)\n            .attrTween(\"d\", function (d) {\n                var updated = $$.updateAngle(d), interpolate;\n                if (! updated) {\n                    return function () { return \"M 0 0\"; };\n                }\n                //                if (this._current === d) {\n                //                    this._current = {\n                //                        startAngle: Math.PI*2,\n                //                        endAngle: Math.PI*2,\n                //                    };\n                //                }\n                if (isNaN(this._current.startAngle)) {\n                    this._current.startAngle = 0;\n                }\n                if (isNaN(this._current.endAngle)) {\n                    this._current.endAngle = this._current.startAngle;\n                }\n                interpolate = d3.interpolate(this._current, updated);\n                this._current = interpolate(0);\n                return function (t) {\n                    var interpolated = interpolate(t);\n                    interpolated.data = d.data; // data.id will be updated by interporator\n                    return $$.getArc(interpolated, true);\n                };\n            })\n            .attr(\"transform\", withTransform ? \"scale(1)\" : \"\")\n            .style(\"fill\", function (d) {\n                return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data.id);\n            }) // Where gauge reading color would receive customization.\n            .style(\"opacity\", 1)\n            .call($$.endall, function () {\n                $$.transiting = false;\n            });\n        mainArc.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n        main.selectAll('.' + CLASS.chartArc).select('text')\n            .style(\"opacity\", 0)\n            .attr('class', function (d) { return $$.isGaugeType(d.data) ? CLASS.gaugeValue : ''; })\n            .text($$.textForArcLabel.bind($$))\n            .attr(\"transform\", $$.transformForArcLabel.bind($$))\n            .style('font-size', function (d) { return $$.isGaugeType(d.data) ? Math.round($$.radius / 5) + 'px' : ''; })\n          .transition().duration(duration)\n            .style(\"opacity\", function (d) { return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0; });\n        main.select('.' + CLASS.chartArcsTitle)\n            .style(\"opacity\", $$.hasType('donut') || $$.hasType('gauge') ? 1 : 0);\n\n        if ($$.hasType('gauge')) {\n            $$.arcs.select('.' + CLASS.chartArcsBackground)\n                .attr(\"d\", function () {\n                    var d = {\n                        data: [{value: config.gauge_max}],\n                        startAngle: -1 * (Math.PI / 2),\n                        endAngle: Math.PI / 2\n                    };\n                    return $$.getArc(d, true, true);\n                });\n            $$.arcs.select('.' + CLASS.chartArcsGaugeUnit)\n                .attr(\"dy\", \".75em\")\n                .text(config.gauge_label_show ? config.gauge_units : '');\n            $$.arcs.select('.' + CLASS.chartArcsGaugeMin)\n                .attr(\"dx\", -1 * ($$.innerRadius + (($$.radius - $$.innerRadius) / 2)) + \"px\")\n                .attr(\"dy\", \"1.2em\")\n                .text(config.gauge_label_show ? config.gauge_min : '');\n            $$.arcs.select('.' + CLASS.chartArcsGaugeMax)\n                .attr(\"dx\", $$.innerRadius + (($$.radius - $$.innerRadius) / 2) + \"px\")\n                .attr(\"dy\", \"1.2em\")\n                .text(config.gauge_label_show ? config.gauge_max : '');\n        }\n    };\n    c3_chart_internal_fn.initGauge = function () {\n        var arcs = this.arcs;\n        if (this.hasType('gauge')) {\n            arcs.append('path')\n                .attr(\"class\", CLASS.chartArcsBackground);\n            arcs.append(\"text\")\n                .attr(\"class\", CLASS.chartArcsGaugeUnit)\n                .style(\"text-anchor\", \"middle\")\n                .style(\"pointer-events\", \"none\");\n            arcs.append(\"text\")\n                .attr(\"class\", CLASS.chartArcsGaugeMin)\n                .style(\"text-anchor\", \"middle\")\n                .style(\"pointer-events\", \"none\");\n            arcs.append(\"text\")\n                .attr(\"class\", CLASS.chartArcsGaugeMax)\n                .style(\"text-anchor\", \"middle\")\n                .style(\"pointer-events\", \"none\");\n        }\n    };\n    c3_chart_internal_fn.getGaugeLabelHeight = function () {\n        return this.config.gauge_label_show ? 20 : 0;\n    };\n\n    c3_chart_internal_fn.initRegion = function () {\n        var $$ = this;\n        $$.region = $$.main.append('g')\n            .attr(\"clip-path\", $$.clipPath)\n            .attr(\"class\", CLASS.regions);\n    };\n    c3_chart_internal_fn.updateRegion = function (duration) {\n        var $$ = this, config = $$.config;\n\n        // hide if arc type\n        $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n\n        $$.mainRegion = $$.main.select('.' + CLASS.regions).selectAll('.' + CLASS.region)\n            .data(config.regions);\n        $$.mainRegion.enter().append('g')\n            .attr('class', $$.classRegion.bind($$))\n          .append('rect')\n            .style(\"fill-opacity\", 0);\n        $$.mainRegion.exit().transition().duration(duration)\n            .style(\"opacity\", 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawRegion = function (withTransition) {\n        var $$ = this,\n            regions = $$.mainRegion.selectAll('rect'),\n            x = $$.regionX.bind($$),\n            y = $$.regionY.bind($$),\n            w = $$.regionWidth.bind($$),\n            h = $$.regionHeight.bind($$);\n        return [\n            (withTransition ? regions.transition() : regions)\n                .attr(\"x\", x)\n                .attr(\"y\", y)\n                .attr(\"width\", w)\n                .attr(\"height\", h)\n                .style(\"fill-opacity\", function (d) { return isValue(d.opacity) ? d.opacity : 0.1; })\n        ];\n    };\n    c3_chart_internal_fn.regionX = function (d) {\n        var $$ = this, config = $$.config,\n            xPos, yScale = d.axis === 'y' ? $$.y : $$.y2;\n        if (d.axis === 'y' || d.axis === 'y2') {\n            xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0;\n        } else {\n            xPos = config.axis_rotated ? 0 : ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0);\n        }\n        return xPos;\n    };\n    c3_chart_internal_fn.regionY = function (d) {\n        var $$ = this, config = $$.config,\n            yPos, yScale = d.axis === 'y' ? $$.y : $$.y2;\n        if (d.axis === 'y' || d.axis === 'y2') {\n            yPos = config.axis_rotated ? 0 : ('end' in d ? yScale(d.end) : 0);\n        } else {\n            yPos = config.axis_rotated ? ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0) : 0;\n        }\n        return yPos;\n    };\n    c3_chart_internal_fn.regionWidth = function (d) {\n        var $$ = this, config = $$.config,\n            start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;\n        if (d.axis === 'y' || d.axis === 'y2') {\n            end = config.axis_rotated ? ('end' in d ? yScale(d.end) : $$.width) : $$.width;\n        } else {\n            end = config.axis_rotated ? $$.width : ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width);\n        }\n        return end < start ? 0 : end - start;\n    };\n    c3_chart_internal_fn.regionHeight = function (d) {\n        var $$ = this, config = $$.config,\n            start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;\n        if (d.axis === 'y' || d.axis === 'y2') {\n            end = config.axis_rotated ? $$.height : ('start' in d ? yScale(d.start) : $$.height);\n        } else {\n            end = config.axis_rotated ? ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height) : $$.height;\n        }\n        return end < start ? 0 : end - start;\n    };\n    c3_chart_internal_fn.isRegionOnX = function (d) {\n        return !d.axis || d.axis === 'x';\n    };\n\n    c3_chart_internal_fn.drag = function (mouse) {\n        var $$ = this, config = $$.config, main = $$.main, d3 = $$.d3;\n        var sx, sy, mx, my, minX, maxX, minY, maxY;\n\n        if ($$.hasArcType()) { return; }\n        if (! config.data_selection_enabled) { return; } // do nothing if not selectable\n        if (config.zoom_enabled && ! $$.zoom.altDomain) { return; } // skip if zoomable because of conflict drag dehavior\n        if (!config.data_selection_multiple) { return; } // skip when single selection because drag is used for multiple selection\n\n        sx = $$.dragStart[0];\n        sy = $$.dragStart[1];\n        mx = mouse[0];\n        my = mouse[1];\n        minX = Math.min(sx, mx);\n        maxX = Math.max(sx, mx);\n        minY = (config.data_selection_grouped) ? $$.margin.top : Math.min(sy, my);\n        maxY = (config.data_selection_grouped) ? $$.height : Math.max(sy, my);\n\n        main.select('.' + CLASS.dragarea)\n            .attr('x', minX)\n            .attr('y', minY)\n            .attr('width', maxX - minX)\n            .attr('height', maxY - minY);\n        // TODO: binary search when multiple xs\n        main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape)\n            .filter(function (d) { return config.data_selection_isselectable(d); })\n            .each(function (d, i) {\n                var shape = d3.select(this),\n                    isSelected = shape.classed(CLASS.SELECTED),\n                    isIncluded = shape.classed(CLASS.INCLUDED),\n                    _x, _y, _w, _h, toggle, isWithin = false, box;\n                if (shape.classed(CLASS.circle)) {\n                    _x = shape.attr(\"cx\") * 1;\n                    _y = shape.attr(\"cy\") * 1;\n                    toggle = $$.togglePoint;\n                    isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;\n                }\n                else if (shape.classed(CLASS.bar)) {\n                    box = getPathBox(this);\n                    _x = box.x;\n                    _y = box.y;\n                    _w = box.width;\n                    _h = box.height;\n                    toggle = $$.togglePath;\n                    isWithin = !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);\n                } else {\n                    // line/area selection not supported yet\n                    return;\n                }\n                if (isWithin ^ isIncluded) {\n                    shape.classed(CLASS.INCLUDED, !isIncluded);\n                    // TODO: included/unincluded callback here\n                    shape.classed(CLASS.SELECTED, !isSelected);\n                    toggle.call($$, !isSelected, shape, d, i);\n                }\n            });\n    };\n\n    c3_chart_internal_fn.dragstart = function (mouse) {\n        var $$ = this, config = $$.config;\n        if ($$.hasArcType()) { return; }\n        if (! config.data_selection_enabled) { return; } // do nothing if not selectable\n        $$.dragStart = mouse;\n        $$.main.select('.' + CLASS.chart).append('rect')\n            .attr('class', CLASS.dragarea)\n            .style('opacity', 0.1);\n        $$.dragging = true;\n    };\n\n    c3_chart_internal_fn.dragend = function () {\n        var $$ = this, config = $$.config;\n        if ($$.hasArcType()) { return; }\n        if (! config.data_selection_enabled) { return; } // do nothing if not selectable\n        $$.main.select('.' + CLASS.dragarea)\n            .transition().duration(100)\n            .style('opacity', 0)\n            .remove();\n        $$.main.selectAll('.' + CLASS.shape)\n            .classed(CLASS.INCLUDED, false);\n        $$.dragging = false;\n    };\n\n    c3_chart_internal_fn.selectPoint = function (target, d, i) {\n        var $$ = this, config = $$.config,\n            cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$),\n            cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$),\n            r = $$.pointSelectR.bind($$);\n        config.data_onselected.call($$.api, d, target.node());\n        // add selected-circle on low layer g\n        $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)\n            .data([d])\n            .enter().append('circle')\n            .attr(\"class\", function () { return $$.generateClass(CLASS.selectedCircle, i); })\n            .attr(\"cx\", cx)\n            .attr(\"cy\", cy)\n            .attr(\"stroke\", function () { return $$.color(d); })\n            .attr(\"r\", function (d) { return $$.pointSelectR(d) * 1.4; })\n            .transition().duration(100)\n            .attr(\"r\", r);\n    };\n    c3_chart_internal_fn.unselectPoint = function (target, d, i) {\n        var $$ = this;\n        $$.config.data_onunselected(d, target.node());\n        // remove selected-circle from low layer g\n        $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)\n            .transition().duration(100).attr('r', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.togglePoint = function (selected, target, d, i) {\n        selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);\n    };\n    c3_chart_internal_fn.selectPath = function (target, d) {\n        var $$ = this;\n        $$.config.data_onselected.call($$, d, target.node());\n        target.transition().duration(100)\n            .style(\"fill\", function () { return $$.d3.rgb($$.color(d)).brighter(0.75); });\n    };\n    c3_chart_internal_fn.unselectPath = function (target, d) {\n        var $$ = this;\n        $$.config.data_onunselected.call($$, d, target.node());\n        target.transition().duration(100)\n            .style(\"fill\", function () { return $$.color(d); });\n    };\n    c3_chart_internal_fn.togglePath = function (selected, target, d, i) {\n        selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);\n    };\n    c3_chart_internal_fn.getToggle = function (that, d) {\n        var $$ = this, toggle;\n        if (that.nodeName === 'circle') {\n            if ($$.isStepType(d)) {\n                // circle is hidden in step chart, so treat as within the click area\n                toggle = function () {}; // TODO: how to select step chart?\n            } else {\n                toggle = $$.togglePoint;\n            }\n        }\n        else if (that.nodeName === 'path') {\n            toggle = $$.togglePath;\n        }\n        return toggle;\n    };\n    c3_chart_internal_fn.toggleShape = function (that, d, i) {\n        var $$ = this, d3 = $$.d3, config = $$.config,\n            shape = d3.select(that), isSelected = shape.classed(CLASS.SELECTED),\n            toggle = $$.getToggle(that, d).bind($$);\n\n        if (config.data_selection_enabled && config.data_selection_isselectable(d)) {\n            if (!config.data_selection_multiple) {\n                $$.main.selectAll('.' + CLASS.shapes + (config.data_selection_grouped ? $$.getTargetSelectorSuffix(d.id) : \"\")).selectAll('.' + CLASS.shape).each(function (d, i) {\n                    var shape = d3.select(this);\n                    if (shape.classed(CLASS.SELECTED)) { toggle(false, shape.classed(CLASS.SELECTED, false), d, i); }\n                });\n            }\n            shape.classed(CLASS.SELECTED, !isSelected);\n            toggle(!isSelected, shape, d, i);\n        }\n    };\n\n    c3_chart_internal_fn.initBrush = function () {\n        var $$ = this, d3 = $$.d3;\n        $$.brush = d3.svg.brush().on(\"brush\", function () { $$.redrawForBrush(); });\n        $$.brush.update = function () {\n            if ($$.context) { $$.context.select('.' + CLASS.brush).call(this); }\n            return this;\n        };\n        $$.brush.scale = function (scale) {\n            return $$.config.axis_rotated ? this.y(scale) : this.x(scale);\n        };\n    };\n    c3_chart_internal_fn.initSubchart = function () {\n        var $$ = this, config = $$.config,\n            context = $$.context = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('context'));\n\n        context.style('visibility', config.subchart_show ? 'visible' : 'hidden');\n\n        // Define g for chart area\n        context.append('g')\n            .attr(\"clip-path\", $$.clipPathForSubchart)\n            .attr('class', CLASS.chart);\n\n        // Define g for bar chart area\n        context.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartBars);\n\n        // Define g for line chart area\n        context.select('.' + CLASS.chart).append(\"g\")\n            .attr(\"class\", CLASS.chartLines);\n\n        // Add extent rect for Brush\n        context.append(\"g\")\n            .attr(\"clip-path\", $$.clipPath)\n            .attr(\"class\", CLASS.brush)\n            .call($$.brush);\n\n        // ATTENTION: This must be called AFTER chart added\n        // Add Axis\n        $$.axes.subx = context.append(\"g\")\n            .attr(\"class\", CLASS.axisX)\n            .attr(\"transform\", $$.getTranslate('subx'))\n            .attr(\"clip-path\", config.axis_rotated ? \"\" : $$.clipPathForXAxis);\n    };\n    c3_chart_internal_fn.updateTargetsForSubchart = function (targets) {\n        var $$ = this, context = $$.context, config = $$.config,\n            contextLineEnter, contextLineUpdate, contextBarEnter, contextBarUpdate,\n            classChartBar = $$.classChartBar.bind($$),\n            classBars = $$.classBars.bind($$),\n            classChartLine = $$.classChartLine.bind($$),\n            classLines = $$.classLines.bind($$),\n            classAreas = $$.classAreas.bind($$);\n\n        if (config.subchart_show) {\n            //-- Bar --//\n            contextBarUpdate = context.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)\n                .data(targets)\n                .attr('class', classChartBar);\n            contextBarEnter = contextBarUpdate.enter().append('g')\n                .style('opacity', 0)\n                .attr('class', classChartBar);\n            // Bars for each data\n            contextBarEnter.append('g')\n                .attr(\"class\", classBars);\n\n            //-- Line --//\n            contextLineUpdate = context.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)\n                .data(targets)\n                .attr('class', classChartLine);\n            contextLineEnter = contextLineUpdate.enter().append('g')\n                .style('opacity', 0)\n                .attr('class', classChartLine);\n            // Lines for each data\n            contextLineEnter.append(\"g\")\n                .attr(\"class\", classLines);\n            // Area\n            contextLineEnter.append(\"g\")\n                .attr(\"class\", classAreas);\n\n            //-- Brush --//\n            context.selectAll('.' + CLASS.brush + ' rect')\n                .attr(config.axis_rotated ? \"width\" : \"height\", config.axis_rotated ? $$.width2 : $$.height2);\n        }\n    };\n    c3_chart_internal_fn.updateBarForSubchart = function (durationForExit) {\n        var $$ = this;\n        $$.contextBar = $$.context.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)\n            .data($$.barData.bind($$));\n        $$.contextBar.enter().append('path')\n            .attr(\"class\", $$.classBar.bind($$))\n            .style(\"stroke\", 'none')\n            .style(\"fill\", $$.color);\n        $$.contextBar\n            .style(\"opacity\", $$.initialOpacity.bind($$));\n        $$.contextBar.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawBarForSubchart = function (drawBarOnSub, withTransition, duration) {\n        (withTransition ? this.contextBar.transition().duration(duration) : this.contextBar)\n            .attr('d', drawBarOnSub)\n            .style('opacity', 1);\n    };\n    c3_chart_internal_fn.updateLineForSubchart = function (durationForExit) {\n        var $$ = this;\n        $$.contextLine = $$.context.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)\n            .data($$.lineData.bind($$));\n        $$.contextLine.enter().append('path')\n            .attr('class', $$.classLine.bind($$))\n            .style('stroke', $$.color);\n        $$.contextLine\n            .style(\"opacity\", $$.initialOpacity.bind($$));\n        $$.contextLine.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawLineForSubchart = function (drawLineOnSub, withTransition, duration) {\n        (withTransition ? this.contextLine.transition().duration(duration) : this.contextLine)\n            .attr(\"d\", drawLineOnSub)\n            .style('opacity', 1);\n    };\n    c3_chart_internal_fn.updateAreaForSubchart = function (durationForExit) {\n        var $$ = this, d3 = $$.d3;\n        $$.contextArea = $$.context.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)\n            .data($$.lineData.bind($$));\n        $$.contextArea.enter().append('path')\n            .attr(\"class\", $$.classArea.bind($$))\n            .style(\"fill\", $$.color)\n            .style(\"opacity\", function () { $$.orgAreaOpacity = +d3.select(this).style('opacity'); return 0; });\n        $$.contextArea\n            .style(\"opacity\", 0);\n        $$.contextArea.exit().transition().duration(durationForExit)\n            .style('opacity', 0)\n            .remove();\n    };\n    c3_chart_internal_fn.redrawAreaForSubchart = function (drawAreaOnSub, withTransition, duration) {\n        (withTransition ? this.contextArea.transition().duration(duration) : this.contextArea)\n            .attr(\"d\", drawAreaOnSub)\n            .style(\"fill\", this.color)\n            .style(\"opacity\", this.orgAreaOpacity);\n    };\n    c3_chart_internal_fn.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {\n        var $$ = this, d3 = $$.d3, config = $$.config,\n            drawAreaOnSub, drawBarOnSub, drawLineOnSub;\n\n        $$.context.style('visibility', config.subchart_show ? 'visible' : 'hidden');\n\n        // subchart\n        if (config.subchart_show) {\n            // reflect main chart to extent on subchart if zoomed\n            if (d3.event && d3.event.type === 'zoom') {\n                $$.brush.extent($$.x.orgDomain()).update();\n            }\n            // update subchart elements if needed\n            if (withSubchart) {\n\n                // extent rect\n                if (!$$.brush.empty()) {\n                    $$.brush.extent($$.x.orgDomain()).update();\n                }\n                // setup drawer - MEMO: this must be called after axis updated\n                drawAreaOnSub = $$.generateDrawArea(areaIndices, true);\n                drawBarOnSub = $$.generateDrawBar(barIndices, true);\n                drawLineOnSub = $$.generateDrawLine(lineIndices, true);\n\n                $$.updateBarForSubchart(duration);\n                $$.updateLineForSubchart(duration);\n                $$.updateAreaForSubchart(duration);\n\n                $$.redrawBarForSubchart(drawBarOnSub, duration, duration);\n                $$.redrawLineForSubchart(drawLineOnSub, duration, duration);\n                $$.redrawAreaForSubchart(drawAreaOnSub, duration, duration);\n            }\n        }\n    };\n    c3_chart_internal_fn.redrawForBrush = function () {\n        var $$ = this, x = $$.x;\n        $$.redraw({\n            withTransition: false,\n            withY: $$.config.zoom_rescale,\n            withSubchart: false,\n            withUpdateXDomain: true,\n            withDimension: false\n        });\n        $$.config.subchart_onbrush.call($$.api, x.orgDomain());\n    };\n    c3_chart_internal_fn.transformContext = function (withTransition, transitions) {\n        var $$ = this, subXAxis;\n        if (transitions && transitions.axisSubX) {\n            subXAxis = transitions.axisSubX;\n        } else {\n            subXAxis = $$.context.select('.' + CLASS.axisX);\n            if (withTransition) { subXAxis = subXAxis.transition(); }\n        }\n        $$.context.attr(\"transform\", $$.getTranslate('context'));\n        subXAxis.attr(\"transform\", $$.getTranslate('subx'));\n    };\n    c3_chart_internal_fn.getDefaultExtent = function () {\n        var $$ = this, config = $$.config,\n            extent = isFunction(config.axis_x_extent) ? config.axis_x_extent($$.getXDomain($$.data.targets)) : config.axis_x_extent;\n        if ($$.isTimeSeries()) {\n            extent = [$$.parseDate(extent[0]), $$.parseDate(extent[1])];\n        }\n        return extent;\n    };\n\n    c3_chart_internal_fn.initZoom = function () {\n        var $$ = this, d3 = $$.d3, config = $$.config, startEvent;\n\n        $$.zoom = d3.behavior.zoom()\n            .on(\"zoomstart\", function () {\n                startEvent = d3.event.sourceEvent;\n                $$.zoom.altDomain = d3.event.sourceEvent.altKey ? $$.x.orgDomain() : null;\n                config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);\n            })\n            .on(\"zoom\", function () {\n                $$.redrawForZoom.call($$);\n            })\n            .on('zoomend', function () {\n                var event = d3.event.sourceEvent;\n                // if click, do nothing. otherwise, click interaction will be canceled.\n                if (event && startEvent.clientX === event.clientX && startEvent.clientY === event.clientY) {\n                    return;\n                }\n                $$.redrawEventRect();\n                $$.updateZoom();\n                config.zoom_onzoomend.call($$.api, $$.x.orgDomain());\n            });\n        $$.zoom.scale = function (scale) {\n            return config.axis_rotated ? this.y(scale) : this.x(scale);\n        };\n        $$.zoom.orgScaleExtent = function () {\n            var extent = config.zoom_extent ? config.zoom_extent : [1, 10];\n            return [extent[0], Math.max($$.getMaxDataCount() / extent[1], extent[1])];\n        };\n        $$.zoom.updateScaleExtent = function () {\n            var ratio = diffDomain($$.x.orgDomain()) / diffDomain($$.orgXDomain),\n                extent = this.orgScaleExtent();\n            this.scaleExtent([extent[0] * ratio, extent[1] * ratio]);\n            return this;\n        };\n    };\n    c3_chart_internal_fn.updateZoom = function () {\n        var $$ = this, z = $$.config.zoom_enabled ? $$.zoom : function () {};\n        $$.main.select('.' + CLASS.zoomRect).call(z).on(\"dblclick.zoom\", null);\n        $$.main.selectAll('.' + CLASS.eventRect).call(z).on(\"dblclick.zoom\", null);\n    };\n    c3_chart_internal_fn.redrawForZoom = function () {\n        var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x;\n        if (!config.zoom_enabled) {\n            return;\n        }\n        if ($$.filterTargetsToShow($$.data.targets).length === 0) {\n            return;\n        }\n        if (d3.event.sourceEvent.type === 'mousemove' && zoom.altDomain) {\n            x.domain(zoom.altDomain);\n            zoom.scale(x).updateScaleExtent();\n            return;\n        }\n        if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {\n            x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);\n        }\n        $$.redraw({\n            withTransition: false,\n            withY: config.zoom_rescale,\n            withSubchart: false,\n            withEventRect: false,\n            withDimension: false\n        });\n        if (d3.event.sourceEvent.type === 'mousemove') {\n            $$.cancelClick = true;\n        }\n        config.zoom_onzoom.call($$.api, x.orgDomain());\n    };\n\n    c3_chart_internal_fn.generateColor = function () {\n        var $$ = this, config = $$.config, d3 = $$.d3,\n            colors = config.data_colors,\n            pattern = notEmpty(config.color_pattern) ? config.color_pattern : d3.scale.category10().range(),\n            callback = config.data_color,\n            ids = [];\n\n        return function (d) {\n            var id = d.id || (d.data && d.data.id) || d, color;\n\n            // if callback function is provided\n            if (colors[id] instanceof Function) {\n                color = colors[id](d);\n            }\n            // if specified, choose that color\n            else if (colors[id]) {\n                color = colors[id];\n            }\n            // if not specified, choose from pattern\n            else {\n                if (ids.indexOf(id) < 0) { ids.push(id); }\n                color = pattern[ids.indexOf(id) % pattern.length];\n                colors[id] = color;\n            }\n            return callback instanceof Function ? callback(color, d) : color;\n        };\n    };\n    c3_chart_internal_fn.generateLevelColor = function () {\n        var $$ = this, config = $$.config,\n            colors = config.color_pattern,\n            threshold = config.color_threshold,\n            asValue = threshold.unit === 'value',\n            values = threshold.values && threshold.values.length ? threshold.values : [],\n            max = threshold.max || 100;\n        return notEmpty(config.color_threshold) ? function (value) {\n            var i, v, color = colors[colors.length - 1];\n            for (i = 0; i < values.length; i++) {\n                v = asValue ? value : (value * 100 / max);\n                if (v < values[i]) {\n                    color = colors[i];\n                    break;\n                }\n            }\n            return color;\n        } : null;\n    };\n\n    c3_chart_internal_fn.getYFormat = function (forArc) {\n        var $$ = this,\n            formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat,\n            formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;\n        return function (v, ratio, id) {\n            var format = $$.axis.getId(id) === 'y2' ? formatForY2 : formatForY;\n            return format.call($$, v, ratio);\n        };\n    };\n    c3_chart_internal_fn.yFormat = function (v) {\n        var $$ = this, config = $$.config,\n            format = config.axis_y_tick_format ? config.axis_y_tick_format : $$.defaultValueFormat;\n        return format(v);\n    };\n    c3_chart_internal_fn.y2Format = function (v) {\n        var $$ = this, config = $$.config,\n            format = config.axis_y2_tick_format ? config.axis_y2_tick_format : $$.defaultValueFormat;\n        return format(v);\n    };\n    c3_chart_internal_fn.defaultValueFormat = function (v) {\n        return isValue(v) ? +v : \"\";\n    };\n    c3_chart_internal_fn.defaultArcValueFormat = function (v, ratio) {\n        return (ratio * 100).toFixed(1) + '%';\n    };\n    c3_chart_internal_fn.dataLabelFormat = function (targetId) {\n        var $$ = this, data_labels = $$.config.data_labels,\n            format, defaultFormat = function (v) { return isValue(v) ? +v : \"\"; };\n        // find format according to axis id\n        if (typeof data_labels.format === 'function') {\n            format = data_labels.format;\n        } else if (typeof data_labels.format === 'object') {\n            if (data_labels.format[targetId]) {\n                format = data_labels.format[targetId] === true ? defaultFormat : data_labels.format[targetId];\n            } else {\n                format = function () { return ''; };\n            }\n        } else {\n            format = defaultFormat;\n        }\n        return format;\n    };\n\n    c3_chart_internal_fn.hasCaches = function (ids) {\n        for (var i = 0; i < ids.length; i++) {\n            if (! (ids[i] in this.cache)) { return false; }\n        }\n        return true;\n    };\n    c3_chart_internal_fn.addCache = function (id, target) {\n        this.cache[id] = this.cloneTarget(target);\n    };\n    c3_chart_internal_fn.getCaches = function (ids) {\n        var targets = [], i;\n        for (i = 0; i < ids.length; i++) {\n            if (ids[i] in this.cache) { targets.push(this.cloneTarget(this.cache[ids[i]])); }\n        }\n        return targets;\n    };\n\n    var CLASS = c3_chart_internal_fn.CLASS = {\n        target: 'c3-target',\n        chart: 'c3-chart',\n        chartLine: 'c3-chart-line',\n        chartLines: 'c3-chart-lines',\n        chartBar: 'c3-chart-bar',\n        chartBars: 'c3-chart-bars',\n        chartText: 'c3-chart-text',\n        chartTexts: 'c3-chart-texts',\n        chartArc: 'c3-chart-arc',\n        chartArcs: 'c3-chart-arcs',\n        chartArcsTitle: 'c3-chart-arcs-title',\n        chartArcsBackground: 'c3-chart-arcs-background',\n        chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',\n        chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',\n        chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',\n        selectedCircle: 'c3-selected-circle',\n        selectedCircles: 'c3-selected-circles',\n        eventRect: 'c3-event-rect',\n        eventRects: 'c3-event-rects',\n        eventRectsSingle: 'c3-event-rects-single',\n        eventRectsMultiple: 'c3-event-rects-multiple',\n        zoomRect: 'c3-zoom-rect',\n        brush: 'c3-brush',\n        focused: 'c3-focused',\n        defocused: 'c3-defocused',\n        region: 'c3-region',\n        regions: 'c3-regions',\n        tooltipContainer: 'c3-tooltip-container',\n        tooltip: 'c3-tooltip',\n        tooltipName: 'c3-tooltip-name',\n        shape: 'c3-shape',\n        shapes: 'c3-shapes',\n        line: 'c3-line',\n        lines: 'c3-lines',\n        bar: 'c3-bar',\n        bars: 'c3-bars',\n        circle: 'c3-circle',\n        circles: 'c3-circles',\n        arc: 'c3-arc',\n        arcs: 'c3-arcs',\n        area: 'c3-area',\n        areas: 'c3-areas',\n        empty: 'c3-empty',\n        text: 'c3-text',\n        texts: 'c3-texts',\n        gaugeValue: 'c3-gauge-value',\n        grid: 'c3-grid',\n        gridLines: 'c3-grid-lines',\n        xgrid: 'c3-xgrid',\n        xgrids: 'c3-xgrids',\n        xgridLine: 'c3-xgrid-line',\n        xgridLines: 'c3-xgrid-lines',\n        xgridFocus: 'c3-xgrid-focus',\n        ygrid: 'c3-ygrid',\n        ygrids: 'c3-ygrids',\n        ygridLine: 'c3-ygrid-line',\n        ygridLines: 'c3-ygrid-lines',\n        axis: 'c3-axis',\n        axisX: 'c3-axis-x',\n        axisXLabel: 'c3-axis-x-label',\n        axisY: 'c3-axis-y',\n        axisYLabel: 'c3-axis-y-label',\n        axisY2: 'c3-axis-y2',\n        axisY2Label: 'c3-axis-y2-label',\n        legendBackground: 'c3-legend-background',\n        legendItem: 'c3-legend-item',\n        legendItemEvent: 'c3-legend-item-event',\n        legendItemTile: 'c3-legend-item-tile',\n        legendItemHidden: 'c3-legend-item-hidden',\n        legendItemFocused: 'c3-legend-item-focused',\n        dragarea: 'c3-dragarea',\n        EXPANDED: '_expanded_',\n        SELECTED: '_selected_',\n        INCLUDED: '_included_'\n    };\n    c3_chart_internal_fn.generateClass = function (prefix, targetId) {\n        return \" \" + prefix + \" \" + prefix + this.getTargetSelectorSuffix(targetId);\n    };\n    c3_chart_internal_fn.classText = function (d) {\n        return this.generateClass(CLASS.text, d.index);\n    };\n    c3_chart_internal_fn.classTexts = function (d) {\n        return this.generateClass(CLASS.texts, d.id);\n    };\n    c3_chart_internal_fn.classShape = function (d) {\n        return this.generateClass(CLASS.shape, d.index);\n    };\n    c3_chart_internal_fn.classShapes = function (d) {\n        return this.generateClass(CLASS.shapes, d.id);\n    };\n    c3_chart_internal_fn.classLine = function (d) {\n        return this.classShape(d) + this.generateClass(CLASS.line, d.id);\n    };\n    c3_chart_internal_fn.classLines = function (d) {\n        return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);\n    };\n    c3_chart_internal_fn.classCircle = function (d) {\n        return this.classShape(d) + this.generateClass(CLASS.circle, d.index);\n    };\n    c3_chart_internal_fn.classCircles = function (d) {\n        return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);\n    };\n    c3_chart_internal_fn.classBar = function (d) {\n        return this.classShape(d) + this.generateClass(CLASS.bar, d.index);\n    };\n    c3_chart_internal_fn.classBars = function (d) {\n        return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);\n    };\n    c3_chart_internal_fn.classArc = function (d) {\n        return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);\n    };\n    c3_chart_internal_fn.classArcs = function (d) {\n        return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);\n    };\n    c3_chart_internal_fn.classArea = function (d) {\n        return this.classShape(d) + this.generateClass(CLASS.area, d.id);\n    };\n    c3_chart_internal_fn.classAreas = function (d) {\n        return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);\n    };\n    c3_chart_internal_fn.classRegion = function (d, i) {\n        return this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '');\n    };\n    c3_chart_internal_fn.classEvent = function (d) {\n        return this.generateClass(CLASS.eventRect, d.index);\n    };\n    c3_chart_internal_fn.classTarget = function (id) {\n        var $$ = this;\n        var additionalClassSuffix = $$.config.data_classes[id], additionalClass = '';\n        if (additionalClassSuffix) {\n            additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;\n        }\n        return $$.generateClass(CLASS.target, id) + additionalClass;\n    };\n    c3_chart_internal_fn.classFocus = function (d) {\n        return this.classFocused(d) + this.classDefocused(d);\n    };\n    c3_chart_internal_fn.classFocused = function (d) {\n        return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');\n    };\n    c3_chart_internal_fn.classDefocused = function (d) {\n        return ' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '');\n    };\n    c3_chart_internal_fn.classChartText = function (d) {\n        return CLASS.chartText + this.classTarget(d.id);\n    };\n    c3_chart_internal_fn.classChartLine = function (d) {\n        return CLASS.chartLine + this.classTarget(d.id);\n    };\n    c3_chart_internal_fn.classChartBar = function (d) {\n        return CLASS.chartBar + this.classTarget(d.id);\n    };\n    c3_chart_internal_fn.classChartArc = function (d) {\n        return CLASS.chartArc + this.classTarget(d.data.id);\n    };\n    c3_chart_internal_fn.getTargetSelectorSuffix = function (targetId) {\n        return targetId || targetId === 0 ? ('-' + targetId).replace(/[\\s?!@#$%^&*()_=+,.<>'\":;\\[\\]\\/|~`{}\\\\]/g, '-') : '';\n    };\n    c3_chart_internal_fn.selectorTarget = function (id, prefix) {\n        return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);\n    };\n    c3_chart_internal_fn.selectorTargets = function (ids, prefix) {\n        var $$ = this;\n        ids = ids || [];\n        return ids.length ? ids.map(function (id) { return $$.selectorTarget(id, prefix); }) : null;\n    };\n    c3_chart_internal_fn.selectorLegend = function (id) {\n        return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);\n    };\n    c3_chart_internal_fn.selectorLegends = function (ids) {\n        var $$ = this;\n        return ids && ids.length ? ids.map(function (id) { return $$.selectorLegend(id); }) : null;\n    };\n\n    var isValue = c3_chart_internal_fn.isValue = function (v) {\n        return v || v === 0;\n    },\n        isFunction = c3_chart_internal_fn.isFunction = function (o) {\n            return typeof o === 'function';\n        },\n        isString = c3_chart_internal_fn.isString = function (o) {\n            return typeof o === 'string';\n        },\n        isUndefined = c3_chart_internal_fn.isUndefined = function (v) {\n            return typeof v === 'undefined';\n        },\n        isDefined = c3_chart_internal_fn.isDefined = function (v) {\n            return typeof v !== 'undefined';\n        },\n        ceil10 = c3_chart_internal_fn.ceil10 = function (v) {\n            return Math.ceil(v / 10) * 10;\n        },\n        asHalfPixel = c3_chart_internal_fn.asHalfPixel = function (n) {\n            return Math.ceil(n) + 0.5;\n        },\n        diffDomain = c3_chart_internal_fn.diffDomain = function (d) {\n            return d[1] - d[0];\n        },\n        isEmpty = c3_chart_internal_fn.isEmpty = function (o) {\n            return !o || (isString(o) && o.length === 0) || (typeof o === 'object' && Object.keys(o).length === 0);\n        },\n        notEmpty = c3_chart_internal_fn.notEmpty = function (o) {\n            return Object.keys(o).length > 0;\n        },\n        getOption = c3_chart_internal_fn.getOption = function (options, key, defaultValue) {\n            return isDefined(options[key]) ? options[key] : defaultValue;\n        },\n        hasValue = c3_chart_internal_fn.hasValue = function (dict, value) {\n            var found = false;\n            Object.keys(dict).forEach(function (key) {\n                if (dict[key] === value) { found = true; }\n            });\n            return found;\n        },\n        getPathBox = c3_chart_internal_fn.getPathBox = function (path) {\n            var box = path.getBoundingClientRect(),\n                items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)],\n                minX = items[0].x, minY = Math.min(items[0].y, items[1].y);\n            return {x: minX, y: minY, width: box.width, height: box.height};\n        };\n\n    c3_chart_fn.focus = function (targetIds) {\n        var $$ = this.internal, candidates;\n\n        targetIds = $$.mapToTargetIds(targetIds);\n        candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),\n\n        this.revert();\n        this.defocus();\n        candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);\n        if ($$.hasArcType()) {\n            $$.expandArc(targetIds);\n        }\n        $$.toggleFocusLegend(targetIds, true);\n\n        $$.focusedTargetIds = targetIds;\n        $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {\n            return targetIds.indexOf(id) < 0;\n        });\n    };\n\n    c3_chart_fn.defocus = function (targetIds) {\n        var $$ = this.internal, candidates;\n\n        targetIds = $$.mapToTargetIds(targetIds);\n        candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),\n\n        candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);\n        if ($$.hasArcType()) {\n            $$.unexpandArc(targetIds);\n        }\n        $$.toggleFocusLegend(targetIds, false);\n\n        $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {\n            return targetIds.indexOf(id) < 0;\n        });\n        $$.defocusedTargetIds = targetIds;\n    };\n\n    c3_chart_fn.revert = function (targetIds) {\n        var $$ = this.internal, candidates;\n\n        targetIds = $$.mapToTargetIds(targetIds);\n        candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets\n\n        candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);\n        if ($$.hasArcType()) {\n            $$.unexpandArc(targetIds);\n        }\n        if ($$.config.legend_show) {\n            $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));\n            $$.legend.selectAll($$.selectorLegends(targetIds))\n                .filter(function () {\n                    return $$.d3.select(this).classed(CLASS.legendItemFocused);\n                })\n                .classed(CLASS.legendItemFocused, false);\n        }\n\n        $$.focusedTargetIds = [];\n        $$.defocusedTargetIds = [];\n    };\n\n    c3_chart_fn.show = function (targetIds, options) {\n        var $$ = this.internal, targets;\n\n        targetIds = $$.mapToTargetIds(targetIds);\n        options = options || {};\n\n        $$.removeHiddenTargetIds(targetIds);\n        targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n\n        targets.transition()\n            .style('opacity', 1, 'important')\n            .call($$.endall, function () {\n                targets.style('opacity', null).style('opacity', 1);\n            });\n\n        if (options.withLegend) {\n            $$.showLegend(targetIds);\n        }\n\n        $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});\n    };\n\n    c3_chart_fn.hide = function (targetIds, options) {\n        var $$ = this.internal, targets;\n\n        targetIds = $$.mapToTargetIds(targetIds);\n        options = options || {};\n\n        $$.addHiddenTargetIds(targetIds);\n        targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n\n        targets.transition()\n            .style('opacity', 0, 'important')\n            .call($$.endall, function () {\n                targets.style('opacity', null).style('opacity', 0);\n            });\n\n        if (options.withLegend) {\n            $$.hideLegend(targetIds);\n        }\n\n        $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});\n    };\n\n    c3_chart_fn.toggle = function (targetIds, options) {\n        var that = this, $$ = this.internal;\n        $$.mapToTargetIds(targetIds).forEach(function (targetId) {\n            $$.isTargetToShow(targetId) ? that.hide(targetId, options) : that.show(targetId, options);\n        });\n    };\n\n    c3_chart_fn.zoom = function (domain) {\n        var $$ = this.internal;\n        if (domain) {\n            if ($$.isTimeSeries()) {\n                domain = domain.map(function (x) { return $$.parseDate(x); });\n            }\n            $$.brush.extent(domain);\n            $$.redraw({withUpdateXDomain: true, withY: $$.config.zoom_rescale});\n            $$.config.zoom_onzoom.call(this, $$.x.orgDomain());\n        }\n        return $$.brush.extent();\n    };\n    c3_chart_fn.zoom.enable = function (enabled) {\n        var $$ = this.internal;\n        $$.config.zoom_enabled = enabled;\n        $$.updateAndRedraw();\n    };\n    c3_chart_fn.unzoom = function () {\n        var $$ = this.internal;\n        $$.brush.clear().update();\n        $$.redraw({withUpdateXDomain: true});\n    };\n\n    c3_chart_fn.load = function (args) {\n        var $$ = this.internal, config = $$.config;\n        // update xs if specified\n        if (args.xs) {\n            $$.addXs(args.xs);\n        }\n        // update classes if exists\n        if ('classes' in args) {\n            Object.keys(args.classes).forEach(function (id) {\n                config.data_classes[id] = args.classes[id];\n            });\n        }\n        // update categories if exists\n        if ('categories' in args && $$.isCategorized()) {\n            config.axis_x_categories = args.categories;\n        }\n        // update axes if exists\n        if ('axes' in args) {\n            Object.keys(args.axes).forEach(function (id) {\n                config.data_axes[id] = args.axes[id];\n            });\n        }\n        // update colors if exists\n        if ('colors' in args) {\n            Object.keys(args.colors).forEach(function (id) {\n                config.data_colors[id] = args.colors[id];\n            });\n        }\n        // use cache if exists\n        if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {\n            $$.load($$.getCaches(args.cacheIds), args.done);\n            return;\n        }\n        // unload if needed\n        if ('unload' in args) {\n            // TODO: do not unload if target will load (included in url/rows/columns)\n            $$.unload($$.mapToTargetIds((typeof args.unload === 'boolean' && args.unload) ? null : args.unload), function () {\n                $$.loadFromArgs(args);\n            });\n        } else {\n            $$.loadFromArgs(args);\n        }\n    };\n\n    c3_chart_fn.unload = function (args) {\n        var $$ = this.internal;\n        args = args || {};\n        if (args instanceof Array) {\n            args = {ids: args};\n        } else if (typeof args === 'string') {\n            args = {ids: [args]};\n        }\n        $$.unload($$.mapToTargetIds(args.ids), function () {\n            $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});\n            if (args.done) { args.done(); }\n        });\n    };\n\n    c3_chart_fn.flow = function (args) {\n        var $$ = this.internal,\n            targets, data, notfoundIds = [], orgDataCount = $$.getMaxDataCount(),\n            dataCount, domain, baseTarget, baseValue, length = 0, tail = 0, diff, to;\n\n        if (args.json) {\n            data = $$.convertJsonToData(args.json, args.keys);\n        }\n        else if (args.rows) {\n            data = $$.convertRowsToData(args.rows);\n        }\n        else if (args.columns) {\n            data = $$.convertColumnsToData(args.columns);\n        }\n        else {\n            return;\n        }\n        targets = $$.convertDataToTargets(data, true);\n\n        // Update/Add data\n        $$.data.targets.forEach(function (t) {\n            var found = false, i, j;\n            for (i = 0; i < targets.length; i++) {\n                if (t.id === targets[i].id) {\n                    found = true;\n\n                    if (t.values[t.values.length - 1]) {\n                        tail = t.values[t.values.length - 1].index + 1;\n                    }\n                    length = targets[i].values.length;\n\n                    for (j = 0; j < length; j++) {\n                        targets[i].values[j].index = tail + j;\n                        if (!$$.isTimeSeries()) {\n                            targets[i].values[j].x = tail + j;\n                        }\n                    }\n                    t.values = t.values.concat(targets[i].values);\n\n                    targets.splice(i, 1);\n                    break;\n                }\n            }\n            if (!found) { notfoundIds.push(t.id); }\n        });\n\n        // Append null for not found targets\n        $$.data.targets.forEach(function (t) {\n            var i, j;\n            for (i = 0; i < notfoundIds.length; i++) {\n                if (t.id === notfoundIds[i]) {\n                    tail = t.values[t.values.length - 1].index + 1;\n                    for (j = 0; j < length; j++) {\n                        t.values.push({\n                            id: t.id,\n                            index: tail + j,\n                            x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,\n                            value: null\n                        });\n                    }\n                }\n            }\n        });\n\n        // Generate null values for new target\n        if ($$.data.targets.length) {\n            targets.forEach(function (t) {\n                var i, missing = [];\n                for (i = $$.data.targets[0].values[0].index; i < tail; i++) {\n                    missing.push({\n                        id: t.id,\n                        index: i,\n                        x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,\n                        value: null\n                    });\n                }\n                t.values.forEach(function (v) {\n                    v.index += tail;\n                    if (!$$.isTimeSeries()) {\n                        v.x += tail;\n                    }\n                });\n                t.values = missing.concat(t.values);\n            });\n        }\n        $$.data.targets = $$.data.targets.concat(targets); // add remained\n\n        // check data count because behavior needs to change when it's only one\n        dataCount = $$.getMaxDataCount();\n        baseTarget = $$.data.targets[0];\n        baseValue = baseTarget.values[0];\n\n        // Update length to flow if needed\n        if (isDefined(args.to)) {\n            length = 0;\n            to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;\n            baseTarget.values.forEach(function (v) {\n                if (v.x < to) { length++; }\n            });\n        } else if (isDefined(args.length)) {\n            length = args.length;\n        }\n\n        // If only one data, update the domain to flow from left edge of the chart\n        if (!orgDataCount) {\n            if ($$.isTimeSeries()) {\n                if (baseTarget.values.length > 1) {\n                    diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;\n                } else {\n                    diff = baseValue.x - $$.getXDomain($$.data.targets)[0];\n                }\n            } else {\n                diff = 1;\n            }\n            domain = [baseValue.x - diff, baseValue.x];\n            $$.updateXDomain(null, true, true, false, domain);\n        } else if (orgDataCount === 1) {\n            if ($$.isTimeSeries()) {\n                diff = (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;\n                domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];\n                $$.updateXDomain(null, true, true, false, domain);\n            }\n        }\n\n        // Set targets\n        $$.updateTargets($$.data.targets);\n\n        // Redraw with new targets\n        $$.redraw({\n            flow: {\n                index: baseValue.index,\n                length: length,\n                duration: isValue(args.duration) ? args.duration : $$.config.transition_duration,\n                done: args.done,\n                orgDataCount: orgDataCount,\n            },\n            withLegend: true,\n            withTransition: orgDataCount > 1,\n            withTrimXDomain: false,\n            withUpdateXAxis: true,\n        });\n    };\n\n    c3_chart_internal_fn.generateFlow = function (args) {\n        var $$ = this, config = $$.config, d3 = $$.d3;\n\n        return function () {\n            var targets = args.targets,\n                flow = args.flow,\n                drawBar = args.drawBar,\n                drawLine = args.drawLine,\n                drawArea = args.drawArea,\n                cx = args.cx,\n                cy = args.cy,\n                xv = args.xv,\n                xForText = args.xForText,\n                yForText = args.yForText,\n                duration = args.duration;\n\n            var translateX, scaleX = 1, transform,\n                flowIndex = flow.index,\n                flowLength = flow.length,\n                flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex),\n                flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength),\n                orgDomain = $$.x.domain(), domain,\n                durationForFlow = flow.duration || duration,\n                done = flow.done || function () {},\n                wait = $$.generateWait();\n\n            var xgrid = $$.xgrid || d3.selectAll([]),\n                xgridLines = $$.xgridLines || d3.selectAll([]),\n                mainRegion = $$.mainRegion || d3.selectAll([]),\n                mainText = $$.mainText || d3.selectAll([]),\n                mainBar = $$.mainBar || d3.selectAll([]),\n                mainLine = $$.mainLine || d3.selectAll([]),\n                mainArea = $$.mainArea || d3.selectAll([]),\n                mainCircle = $$.mainCircle || d3.selectAll([]);\n\n            // set flag\n            $$.flowing = true;\n\n            // remove head data after rendered\n            $$.data.targets.forEach(function (d) {\n                d.values.splice(0, flowLength);\n            });\n\n            // update x domain to generate axis elements for flow\n            domain = $$.updateXDomain(targets, true, true);\n            // update elements related to x scale\n            if ($$.updateXGrid) { $$.updateXGrid(true); }\n\n            // generate transform to flow\n            if (!flow.orgDataCount) { // if empty\n                if ($$.data.targets[0].values.length !== 1) {\n                    translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n                } else {\n                    if ($$.isTimeSeries()) {\n                        flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);\n                        flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);\n                        translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\n                    } else {\n                        translateX = diffDomain(domain) / 2;\n                    }\n                }\n            } else if (flow.orgDataCount === 1 || flowStart.x === flowEnd.x) {\n                translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n            } else {\n                if ($$.isTimeSeries()) {\n                    translateX = ($$.x(orgDomain[0]) - $$.x(domain[0]));\n                } else {\n                    translateX = ($$.x(flowStart.x) - $$.x(flowEnd.x));\n                }\n            }\n            scaleX = (diffDomain(orgDomain) / diffDomain(domain));\n            transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';\n\n            // hide tooltip\n            $$.hideXGridFocus();\n            $$.hideTooltip();\n\n            d3.transition().ease('linear').duration(durationForFlow).each(function () {\n                wait.add($$.axes.x.transition().call($$.xAxis));\n                wait.add(mainBar.transition().attr('transform', transform));\n                wait.add(mainLine.transition().attr('transform', transform));\n                wait.add(mainArea.transition().attr('transform', transform));\n                wait.add(mainCircle.transition().attr('transform', transform));\n                wait.add(mainText.transition().attr('transform', transform));\n                wait.add(mainRegion.filter($$.isRegionOnX).transition().attr('transform', transform));\n                wait.add(xgrid.transition().attr('transform', transform));\n                wait.add(xgridLines.transition().attr('transform', transform));\n            })\n            .call(wait, function () {\n                var i, shapes = [], texts = [], eventRects = [];\n\n                // remove flowed elements\n                if (flowLength) {\n                    for (i = 0; i < flowLength; i++) {\n                        shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));\n                        texts.push('.' + CLASS.text + '-' + (flowIndex + i));\n                        eventRects.push('.' + CLASS.eventRect + '-' + (flowIndex + i));\n                    }\n                    $$.svg.selectAll('.' + CLASS.shapes).selectAll(shapes).remove();\n                    $$.svg.selectAll('.' + CLASS.texts).selectAll(texts).remove();\n                    $$.svg.selectAll('.' + CLASS.eventRects).selectAll(eventRects).remove();\n                    $$.svg.select('.' + CLASS.xgrid).remove();\n                }\n\n                // draw again for removing flowed elements and reverting attr\n                xgrid\n                    .attr('transform', null)\n                    .attr($$.xgridAttr);\n                xgridLines\n                    .attr('transform', null);\n                xgridLines.select('line')\n                    .attr(\"x1\", config.axis_rotated ? 0 : xv)\n                    .attr(\"x2\", config.axis_rotated ? $$.width : xv);\n                xgridLines.select('text')\n                    .attr(\"x\", config.axis_rotated ? $$.width : 0)\n                    .attr(\"y\", xv);\n                mainBar\n                    .attr('transform', null)\n                    .attr(\"d\", drawBar);\n                mainLine\n                    .attr('transform', null)\n                    .attr(\"d\", drawLine);\n                mainArea\n                    .attr('transform', null)\n                    .attr(\"d\", drawArea);\n                mainCircle\n                    .attr('transform', null)\n                    .attr(\"cx\", cx)\n                    .attr(\"cy\", cy);\n                mainText\n                    .attr('transform', null)\n                    .attr('x', xForText)\n                    .attr('y', yForText)\n                    .style('fill-opacity', $$.opacityForText.bind($$));\n                mainRegion\n                    .attr('transform', null);\n                mainRegion.select('rect').filter($$.isRegionOnX)\n                    .attr(\"x\", $$.regionX.bind($$))\n                    .attr(\"width\", $$.regionWidth.bind($$));\n\n                if (config.interaction_enabled) {\n                    $$.redrawEventRect();\n                }\n\n                // callback for end of flow\n                done();\n\n                $$.flowing = false;\n            });\n        };\n    };\n\n    c3_chart_fn.selected = function (targetId) {\n        var $$ = this.internal, d3 = $$.d3;\n        return d3.merge(\n            $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape)\n                .filter(function () { return d3.select(this).classed(CLASS.SELECTED); })\n                .map(function (d) { return d.map(function (d) { var data = d.__data__; return data.data ? data.data : data; }); })\n        );\n    };\n    c3_chart_fn.select = function (ids, indices, resetOther) {\n        var $$ = this.internal, d3 = $$.d3, config = $$.config;\n        if (! config.data_selection_enabled) { return; }\n        $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n            var shape = d3.select(this), id = d.data ? d.data.id : d.id,\n                toggle = $$.getToggle(this, d).bind($$),\n                isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n                isTargetIndex = !indices || indices.indexOf(i) >= 0,\n                isSelected = shape.classed(CLASS.SELECTED);\n            // line/area selection not supported yet\n            if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n                return;\n            }\n            if (isTargetId && isTargetIndex) {\n                if (config.data_selection_isselectable(d) && !isSelected) {\n                    toggle(true, shape.classed(CLASS.SELECTED, true), d, i);\n                }\n            } else if (isDefined(resetOther) && resetOther) {\n                if (isSelected) {\n                    toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n                }\n            }\n        });\n    };\n    c3_chart_fn.unselect = function (ids, indices) {\n        var $$ = this.internal, d3 = $$.d3, config = $$.config;\n        if (! config.data_selection_enabled) { return; }\n        $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n            var shape = d3.select(this), id = d.data ? d.data.id : d.id,\n                toggle = $$.getToggle(this, d).bind($$),\n                isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n                isTargetIndex = !indices || indices.indexOf(i) >= 0,\n                isSelected = shape.classed(CLASS.SELECTED);\n            // line/area selection not supported yet\n            if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n                return;\n            }\n            if (isTargetId && isTargetIndex) {\n                if (config.data_selection_isselectable(d)) {\n                    if (isSelected) {\n                        toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n                    }\n                }\n            }\n        });\n    };\n\n    c3_chart_fn.transform = function (type, targetIds) {\n        var $$ = this.internal,\n            options = ['pie', 'donut'].indexOf(type) >= 0 ? {withTransform: true} : null;\n        $$.transformTo(targetIds, type, options);\n    };\n\n    c3_chart_internal_fn.transformTo = function (targetIds, type, optionsForRedraw) {\n        var $$ = this,\n            withTransitionForAxis = !$$.hasArcType(),\n            options = optionsForRedraw || {withTransitionForAxis: withTransitionForAxis};\n        options.withTransitionForTransform = false;\n        $$.transiting = false;\n        $$.setTargetType(targetIds, type);\n        $$.updateTargets($$.data.targets); // this is needed when transforming to arc\n        $$.updateAndRedraw(options);\n    };\n\n    c3_chart_fn.groups = function (groups) {\n        var $$ = this.internal, config = $$.config;\n        if (isUndefined(groups)) { return config.data_groups; }\n        config.data_groups = groups;\n        $$.redraw();\n        return config.data_groups;\n    };\n\n    c3_chart_fn.xgrids = function (grids) {\n        var $$ = this.internal, config = $$.config;\n        if (! grids) { return config.grid_x_lines; }\n        config.grid_x_lines = grids;\n        $$.redrawWithoutRescale();\n        return config.grid_x_lines;\n    };\n    c3_chart_fn.xgrids.add = function (grids) {\n        var $$ = this.internal;\n        return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));\n    };\n    c3_chart_fn.xgrids.remove = function (params) { // TODO: multiple\n        var $$ = this.internal;\n        $$.removeGridLines(params, true);\n    };\n\n    c3_chart_fn.ygrids = function (grids) {\n        var $$ = this.internal, config = $$.config;\n        if (! grids) { return config.grid_y_lines; }\n        config.grid_y_lines = grids;\n        $$.redrawWithoutRescale();\n        return config.grid_y_lines;\n    };\n    c3_chart_fn.ygrids.add = function (grids) {\n        var $$ = this.internal;\n        return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));\n    };\n    c3_chart_fn.ygrids.remove = function (params) { // TODO: multiple\n        var $$ = this.internal;\n        $$.removeGridLines(params, false);\n    };\n\n    c3_chart_fn.regions = function (regions) {\n        var $$ = this.internal, config = $$.config;\n        if (!regions) { return config.regions; }\n        config.regions = regions;\n        $$.redrawWithoutRescale();\n        return config.regions;\n    };\n    c3_chart_fn.regions.add = function (regions) {\n        var $$ = this.internal, config = $$.config;\n        if (!regions) { return config.regions; }\n        config.regions = config.regions.concat(regions);\n        $$.redrawWithoutRescale();\n        return config.regions;\n    };\n    c3_chart_fn.regions.remove = function (options) {\n        var $$ = this.internal, config = $$.config,\n            duration, classes, regions;\n\n        options = options || {};\n        duration = $$.getOption(options, \"duration\", config.transition_duration);\n        classes = $$.getOption(options, \"classes\", [CLASS.region]);\n\n        regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) { return '.' + c; }));\n        (duration ? regions.transition().duration(duration) : regions)\n            .style('opacity', 0)\n            .remove();\n\n        config.regions = config.regions.filter(function (region) {\n            var found = false;\n            if (!region['class']) {\n                return true;\n            }\n            region['class'].split(' ').forEach(function (c) {\n                if (classes.indexOf(c) >= 0) { found = true; }\n            });\n            return !found;\n        });\n\n        return config.regions;\n    };\n\n    c3_chart_fn.data = function (targetIds) {\n        var targets = this.internal.data.targets;\n        return typeof targetIds === 'undefined' ? targets : targets.filter(function (t) {\n            return [].concat(targetIds).indexOf(t.id) >= 0;\n        });\n    };\n    c3_chart_fn.data.shown = function (targetIds) {\n        return this.internal.filterTargetsToShow(this.data(targetIds));\n    };\n    c3_chart_fn.data.values = function (targetId) {\n        var targets, values = null;\n        if (targetId) {\n            targets = this.data(targetId);\n            values = targets[0] ? targets[0].values.map(function (d) { return d.value; }) : null;\n        }\n        return values;\n    };\n    c3_chart_fn.data.names = function (names) {\n        this.internal.clearLegendItemTextBoxCache();\n        return this.internal.updateDataAttributes('names', names);\n    };\n    c3_chart_fn.data.colors = function (colors) {\n        return this.internal.updateDataAttributes('colors', colors);\n    };\n    c3_chart_fn.data.axes = function (axes) {\n        return this.internal.updateDataAttributes('axes', axes);\n    };\n\n    c3_chart_fn.category = function (i, category) {\n        var $$ = this.internal, config = $$.config;\n        if (arguments.length > 1) {\n            config.axis_x_categories[i] = category;\n            $$.redraw();\n        }\n        return config.axis_x_categories[i];\n    };\n    c3_chart_fn.categories = function (categories) {\n        var $$ = this.internal, config = $$.config;\n        if (!arguments.length) { return config.axis_x_categories; }\n        config.axis_x_categories = categories;\n        $$.redraw();\n        return config.axis_x_categories;\n    };\n\n    // TODO: fix\n    c3_chart_fn.color = function (id) {\n        var $$ = this.internal;\n        return $$.color(id); // more patterns\n    };\n\n    c3_chart_fn.x = function (x) {\n        var $$ = this.internal;\n        if (arguments.length) {\n            $$.updateTargetX($$.data.targets, x);\n            $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});\n        }\n        return $$.data.xs;\n    };\n    c3_chart_fn.xs = function (xs) {\n        var $$ = this.internal;\n        if (arguments.length) {\n            $$.updateTargetXs($$.data.targets, xs);\n            $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});\n        }\n        return $$.data.xs;\n    };\n\n    c3_chart_fn.axis = function () {};\n    c3_chart_fn.axis.labels = function (labels) {\n        var $$ = this.internal;\n        if (arguments.length) {\n            Object.keys(labels).forEach(function (axisId) {\n                $$.axis.setLabelText(axisId, labels[axisId]);\n            });\n            $$.axis.updateLabels();\n        }\n        // TODO: return some values?\n    };\n    c3_chart_fn.axis.max = function (max) {\n        var $$ = this.internal, config = $$.config;\n        if (arguments.length) {\n            if (typeof max === 'object') {\n                if (isValue(max.x)) { config.axis_x_max = max.x; }\n                if (isValue(max.y)) { config.axis_y_max = max.y; }\n                if (isValue(max.y2)) { config.axis_y2_max = max.y2; }\n            } else {\n                config.axis_y_max = config.axis_y2_max = max;\n            }\n            $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});\n        } else {\n            return {\n                x: config.axis_x_max,\n                y: config.axis_y_max,\n                y2: config.axis_y2_max\n            };\n        }\n    };\n    c3_chart_fn.axis.min = function (min) {\n        var $$ = this.internal, config = $$.config;\n        if (arguments.length) {\n            if (typeof min === 'object') {\n                if (isValue(min.x)) { config.axis_x_min = min.x; }\n                if (isValue(min.y)) { config.axis_y_min = min.y; }\n                if (isValue(min.y2)) { config.axis_y2_min = min.y2; }\n            } else {\n                config.axis_y_min = config.axis_y2_min = min;\n            }\n            $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});\n        } else {\n            return {\n                x: config.axis_x_min,\n                y: config.axis_y_min,\n                y2: config.axis_y2_min\n            };\n        }\n    };\n    c3_chart_fn.axis.range = function (range) {\n        if (arguments.length) {\n            if (isDefined(range.max)) { this.axis.max(range.max); }\n            if (isDefined(range.min)) { this.axis.min(range.min); }\n        } else {\n            return {\n                max: this.axis.max(),\n                min: this.axis.min()\n            };\n        }\n    };\n\n    c3_chart_fn.legend = function () {};\n    c3_chart_fn.legend.show = function (targetIds) {\n        var $$ = this.internal;\n        $$.showLegend($$.mapToTargetIds(targetIds));\n        $$.updateAndRedraw({withLegend: true});\n    };\n    c3_chart_fn.legend.hide = function (targetIds) {\n        var $$ = this.internal;\n        $$.hideLegend($$.mapToTargetIds(targetIds));\n        $$.updateAndRedraw({withLegend: true});\n    };\n\n    c3_chart_fn.resize = function (size) {\n        var $$ = this.internal, config = $$.config;\n        config.size_width = size ? size.width : null;\n        config.size_height = size ? size.height : null;\n        this.flush();\n    };\n\n    c3_chart_fn.flush = function () {\n        var $$ = this.internal;\n        $$.updateAndRedraw({withLegend: true, withTransition: false, withTransitionForTransform: false});\n    };\n\n    c3_chart_fn.destroy = function () {\n        var $$ = this.internal;\n\n        window.clearInterval($$.intervalForObserveInserted);\n        window.onresize = null;\n\n        $$.selectChart.classed('c3', false).html(\"\");\n\n        // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen.\n        Object.keys($$).forEach(function (key) {\n            $$[key] = null;\n        });\n\n        return null;\n    };\n\n    c3_chart_fn.tooltip = function () {};\n    c3_chart_fn.tooltip.show = function (args) {\n        var $$ = this.internal, index, mouse;\n\n        // determine mouse position on the chart\n        if (args.mouse) {\n            mouse = args.mouse;\n        }\n\n        // determine focus data\n        if (args.data) {\n            if ($$.isMultipleX()) {\n                // if multiple xs, target point will be determined by mouse\n                mouse = [$$.x(args.data.x), $$.getYScale(args.data.id)(args.data.value)];\n                index = null;\n            } else {\n                // TODO: when tooltip_grouped = false\n                index = isValue(args.data.index) ? args.data.index : $$.getIndexByX(args.data.x);\n            }\n        }\n        else if (typeof args.x !== 'undefined') {\n            index = $$.getIndexByX(args.x);\n        }\n        else if (typeof args.index !== 'undefined') {\n            index = args.index;\n        }\n\n        // emulate mouse events to show\n        $$.dispatchEvent('mouseover', index, mouse);\n        $$.dispatchEvent('mousemove', index, mouse);\n    };\n    c3_chart_fn.tooltip.hide = function () {\n        // TODO: get target data by checking the state of focus\n        this.internal.dispatchEvent('mouseout', 0);\n    };\n\n    // Features:\n    // 1. category axis\n    // 2. ceil values of translate/x/y to int for half pixel antialiasing\n    // 3. multiline tick text\n    var tickTextCharSize;\n    function c3_axis(d3, params) {\n        var scale = d3.scale.linear(), orient = \"bottom\", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;\n\n        var tickOffset = 0, tickCulling = true, tickCentered;\n\n        params = params || {};\n        outerTickSize = params.withOuterTick ? 6 : 0;\n\n        function axisX(selection, x) {\n            selection.attr(\"transform\", function (d) {\n                return \"translate(\" + Math.ceil(x(d) + tickOffset) + \", 0)\";\n            });\n        }\n        function axisY(selection, y) {\n            selection.attr(\"transform\", function (d) {\n                return \"translate(0,\" + Math.ceil(y(d)) + \")\";\n            });\n        }\n        function scaleExtent(domain) {\n            var start = domain[0], stop = domain[domain.length - 1];\n            return start < stop ? [ start, stop ] : [ stop, start ];\n        }\n        function generateTicks(scale) {\n            var i, domain, ticks = [];\n            if (scale.ticks) {\n                return scale.ticks.apply(scale, tickArguments);\n            }\n            domain = scale.domain();\n            for (i = Math.ceil(domain[0]); i < domain[1]; i++) {\n                ticks.push(i);\n            }\n            if (ticks.length > 0 && ticks[0] > 0) {\n                ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));\n            }\n            return ticks;\n        }\n        function copyScale() {\n            var newScale = scale.copy(), domain;\n            if (params.isCategory) {\n                domain = scale.domain();\n                newScale.domain([domain[0], domain[1] - 1]);\n            }\n            return newScale;\n        }\n        function textFormatted(v) {\n            var formatted = tickFormat ? tickFormat(v) : v;\n            return typeof formatted !== 'undefined' ? formatted : '';\n        }\n        function getSizeFor1Char(tick) {\n            if (tickTextCharSize) {\n                return tickTextCharSize;\n            }\n            var size = {\n                h: 11.5,\n                w: 5.5\n            };\n            tick.select('text').text(textFormatted).each(function (d) {\n                var box = this.getBoundingClientRect(),\n                    text = textFormatted(d),\n                    h = box.height,\n                    w = text ? (box.width / text.length) : undefined;\n                if (h && w) {\n                    size.h = h;\n                    size.w = w;\n                }\n            }).text('');\n            tickTextCharSize = size;\n            return size;\n        }\n        function transitionise(selection) {\n            return params.withoutTransition ? selection : d3.transition(selection);\n        }\n        function axis(g) {\n            g.each(function () {\n                var g = axis.g = d3.select(this);\n\n                var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale();\n\n                var ticks = tickValues ? tickValues : generateTicks(scale1),\n                    tick = g.selectAll(\".tick\").data(ticks, scale1),\n                    tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", 1e-6),\n                    // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.\n                    tickExit = tick.exit().remove(),\n                    tickUpdate = transitionise(tick).style(\"opacity\", 1),\n                    tickTransform, tickX, tickY;\n\n                var range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range()),\n                    path = g.selectAll(\".domain\").data([ 0 ]),\n                    pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), transitionise(path));\n                tickEnter.append(\"line\");\n                tickEnter.append(\"text\");\n\n                var lineEnter = tickEnter.select(\"line\"),\n                    lineUpdate = tickUpdate.select(\"line\"),\n                    textEnter = tickEnter.select(\"text\"),\n                    textUpdate = tickUpdate.select(\"text\");\n\n                if (params.isCategory) {\n                    tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);\n                    tickX = tickCentered ? 0 : tickOffset;\n                    tickY = tickCentered ? tickOffset : 0;\n                } else {\n                    tickOffset = tickX = 0;\n                }\n\n                var text, tspan, sizeFor1Char = getSizeFor1Char(g.select('.tick')), counts = [];\n                var tickLength = Math.max(innerTickSize, 0) + tickPadding,\n                    isVertical = orient === 'left' || orient === 'right';\n\n                // this should be called only when category axis\n                function splitTickText(d, maxWidth) {\n                    var tickText = textFormatted(d),\n                        subtext, spaceIndex, textWidth, splitted = [];\n\n                    if (Object.prototype.toString.call(tickText) === \"[object Array]\") {\n                        return tickText;\n                    }\n\n                    if (!maxWidth || maxWidth <= 0) {\n                        maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110;\n                    }\n\n                    function split(splitted, text) {\n                        spaceIndex = undefined;\n                        for (var i = 1; i < text.length; i++) {\n                            if (text.charAt(i) === ' ') {\n                                spaceIndex = i;\n                            }\n                            subtext = text.substr(0, i + 1);\n                            textWidth = sizeFor1Char.w * subtext.length;\n                            // if text width gets over tick width, split by space index or crrent index\n                            if (maxWidth < textWidth) {\n                                return split(\n                                    splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)),\n                                    text.slice(spaceIndex ? spaceIndex + 1 : i)\n                                );\n                            }\n                        }\n                        return splitted.concat(text);\n                    }\n\n                    return split(splitted, tickText + \"\");\n                }\n\n                function tspanDy(d, i) {\n                    var dy = sizeFor1Char.h;\n                    if (i === 0) {\n                        if (orient === 'left' || orient === 'right') {\n                            dy = -((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3);\n                        } else {\n                            dy = \".71em\";\n                        }\n                    }\n                    return dy;\n                }\n\n                function tickSize(d) {\n                    var tickPosition = scale(d) + (tickCentered ? 0 : tickOffset);\n                    return range[0] < tickPosition && tickPosition < range[1] ? innerTickSize : 0;\n                }\n\n                text = tick.select(\"text\");\n                tspan = text.selectAll('tspan')\n                    .data(function (d, i) {\n                        var splitted = params.tickMultiline ? splitTickText(d, params.tickWidth) : [].concat(textFormatted(d));\n                        counts[i] = splitted.length;\n                        return splitted.map(function (s) {\n                            return { index: i, splitted: s };\n                        });\n                    });\n                tspan.enter().append('tspan');\n                tspan.exit().remove();\n                tspan.text(function (d) { return d.splitted; });\n\n                var rotate = params.tickTextRotate;\n\n                function textAnchorForText(rotate) {\n                    if (!rotate) {\n                        return 'middle';\n                    }\n                    return rotate > 0 ? \"start\" : \"end\";\n                }\n                function textTransform(rotate) {\n                    if (!rotate) {\n                        return '';\n                    }\n                    return \"rotate(\" + rotate + \")\";\n                }\n                function dxForText(rotate) {\n                    if (!rotate) {\n                        return 0;\n                    }\n                    return 8 * Math.sin(Math.PI * (rotate / 180));\n                }\n                function yForText(rotate) {\n                    if (!rotate) {\n                        return tickLength;\n                    }\n                    return 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1);\n                }\n\n                switch (orient) {\n                case \"bottom\":\n                    {\n                        tickTransform = axisX;\n                        lineEnter.attr(\"y2\", innerTickSize);\n                        textEnter.attr(\"y\", tickLength);\n                        lineUpdate.attr(\"x1\", tickX).attr(\"x2\", tickX).attr(\"y2\", tickSize);\n                        textUpdate.attr(\"x\", 0).attr(\"y\", yForText(rotate))\n                            .style(\"text-anchor\", textAnchorForText(rotate))\n                            .attr(\"transform\", textTransform(rotate));\n                        tspan.attr('x', 0).attr(\"dy\", tspanDy).attr('dx', dxForText(rotate));\n                        pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + outerTickSize + \"V0H\" + range[1] + \"V\" + outerTickSize);\n                        break;\n                    }\n                case \"top\":\n                    {\n                        // TODO: rotated tick text\n                        tickTransform = axisX;\n                        lineEnter.attr(\"y2\", -innerTickSize);\n                        textEnter.attr(\"y\", -tickLength);\n                        lineUpdate.attr(\"x2\", 0).attr(\"y2\", -innerTickSize);\n                        textUpdate.attr(\"x\", 0).attr(\"y\", -tickLength);\n                        text.style(\"text-anchor\", \"middle\");\n                        tspan.attr('x', 0).attr(\"dy\", \"0em\");\n                        pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + -outerTickSize + \"V0H\" + range[1] + \"V\" + -outerTickSize);\n                        break;\n                    }\n                case \"left\":\n                    {\n                        tickTransform = axisY;\n                        lineEnter.attr(\"x2\", -innerTickSize);\n                        textEnter.attr(\"x\", -tickLength);\n                        lineUpdate.attr(\"x2\", -innerTickSize).attr(\"y1\", tickY).attr(\"y2\", tickY);\n                        textUpdate.attr(\"x\", -tickLength).attr(\"y\", tickOffset);\n                        text.style(\"text-anchor\", \"end\");\n                        tspan.attr('x', -tickLength).attr(\"dy\", tspanDy);\n                        pathUpdate.attr(\"d\", \"M\" + -outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + -outerTickSize);\n                        break;\n                    }\n                case \"right\":\n                    {\n                        tickTransform = axisY;\n                        lineEnter.attr(\"x2\", innerTickSize);\n                        textEnter.attr(\"x\", tickLength);\n                        lineUpdate.attr(\"x2\", innerTickSize).attr(\"y2\", 0);\n                        textUpdate.attr(\"x\", tickLength).attr(\"y\", 0);\n                        text.style(\"text-anchor\", \"start\");\n                        tspan.attr('x', tickLength).attr(\"dy\", tspanDy);\n                        pathUpdate.attr(\"d\", \"M\" + outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + outerTickSize);\n                        break;\n                    }\n                }\n                if (scale1.rangeBand) {\n                    var x = scale1, dx = x.rangeBand() / 2;\n                    scale0 = scale1 = function (d) {\n                        return x(d) + dx;\n                    };\n                } else if (scale0.rangeBand) {\n                    scale0 = scale1;\n                } else {\n                    tickExit.call(tickTransform, scale1);\n                }\n                tickEnter.call(tickTransform, scale0);\n                tickUpdate.call(tickTransform, scale1);\n            });\n        }\n        axis.scale = function (x) {\n            if (!arguments.length) { return scale; }\n            scale = x;\n            return axis;\n        };\n        axis.orient = function (x) {\n            if (!arguments.length) { return orient; }\n            orient = x in {top: 1, right: 1, bottom: 1, left: 1} ? x + \"\" : \"bottom\";\n            return axis;\n        };\n        axis.tickFormat = function (format) {\n            if (!arguments.length) { return tickFormat; }\n            tickFormat = format;\n            return axis;\n        };\n        axis.tickCentered = function (isCentered) {\n            if (!arguments.length) { return tickCentered; }\n            tickCentered = isCentered;\n            return axis;\n        };\n        axis.tickOffset = function () {\n            return tickOffset;\n        };\n        axis.tickInterval = function () {\n            var interval, length;\n            if (params.isCategory) {\n                interval = tickOffset * 2;\n            }\n            else {\n                length = axis.g.select('path.domain').node().getTotalLength() - outerTickSize * 2;\n                interval = length / axis.g.selectAll('line').size();\n            }\n            return interval === Infinity ? 0 : interval;\n        };\n        axis.ticks = function () {\n            if (!arguments.length) { return tickArguments; }\n            tickArguments = arguments;\n            return axis;\n        };\n        axis.tickCulling = function (culling) {\n            if (!arguments.length) { return tickCulling; }\n            tickCulling = culling;\n            return axis;\n        };\n        axis.tickValues = function (x) {\n            if (typeof x === 'function') {\n                tickValues = function () {\n                    return x(scale.domain());\n                };\n            }\n            else {\n                if (!arguments.length) { return tickValues; }\n                tickValues = x;\n            }\n            return axis;\n        };\n        return axis;\n    }\n\n    c3_chart_internal_fn.isSafari = function () {\n        var ua = window.navigator.userAgent;\n        return ua.indexOf('Safari') >= 0 && ua.indexOf('Chrome') < 0;\n    };\n    c3_chart_internal_fn.isChrome = function () {\n        var ua = window.navigator.userAgent;\n        return ua.indexOf('Chrome') >= 0;\n    };\n\n    // PhantomJS doesn't have support for Function.prototype.bind, which has caused confusion. Use\n    // this polyfill to avoid the confusion.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function(oThis) {\n        if (typeof this !== 'function') {\n          // closest thing possible to the ECMAScript 5\n          // internal IsCallable function\n          throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n        }\n\n        var aArgs   = Array.prototype.slice.call(arguments, 1),\n            fToBind = this,\n            fNOP    = function() {},\n            fBound  = function() {\n              return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));\n            };\n\n        fNOP.prototype = this.prototype;\n        fBound.prototype = new fNOP();\n\n        return fBound;\n      };\n    }\n\n    if (typeof define === 'function' && define.amd) {\n        define(\"c3\", [\"d3\"], c3);\n    } else if ('undefined' !== typeof exports && 'undefined' !== typeof module) {\n        module.exports = c3;\n    } else {\n        window.c3 = c3;\n    }\n\n})(window);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/css/ambiance.css",
    "content": "/* ambiance theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-ambiance .cm-header { color: blue; }\n.cm-s-ambiance .cm-quote { color: #24C2C7; }\n\n.cm-s-ambiance .cm-keyword { color: #cda869; }\n.cm-s-ambiance .cm-atom { color: #CF7EA9; }\n.cm-s-ambiance .cm-number { color: #78CF8A; }\n.cm-s-ambiance .cm-def { color: #aac6e3; }\n.cm-s-ambiance .cm-variable { color: #ffb795; }\n.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }\n.cm-s-ambiance .cm-variable-3 { color: #faded3; }\n.cm-s-ambiance .cm-property { color: #eed1b3; }\n.cm-s-ambiance .cm-operator { color: #fa8d6a; }\n.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }\n.cm-s-ambiance .cm-string { color: #8f9d6a; }\n.cm-s-ambiance .cm-string-2 { color: #9d937c; }\n.cm-s-ambiance .cm-meta { color: #D2A8A1; }\n.cm-s-ambiance .cm-qualifier { color: yellow; }\n.cm-s-ambiance .cm-builtin { color: #9999cc; }\n.cm-s-ambiance .cm-bracket { color: #24C2C7; }\n.cm-s-ambiance .cm-tag { color: #fee4ff; }\n.cm-s-ambiance .cm-attribute { color: #9B859D; }\n.cm-s-ambiance .cm-hr { color: pink; }\n.cm-s-ambiance .cm-link { color: #F4C20B; }\n.cm-s-ambiance .cm-special { color: #FF9D00; }\n.cm-s-ambiance .cm-error { color: #AF2018; }\n\n.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }\n.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }\n\n.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); }\n.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n\n/* Editor styling */\n\n.cm-s-ambiance.CodeMirror {\n  line-height: 1.40em;\n  color: #E6E1DC;\n  background-color: #202020;\n  -webkit-box-shadow: inset 0 0 10px black;\n  -moz-box-shadow: inset 0 0 10px black;\n  box-shadow: inset 0 0 10px black;\n}\n\n.cm-s-ambiance .CodeMirror-gutters {\n  background: #3D3D3D;\n  border-right: 1px solid #4D4D4D;\n  box-shadow: 0 10px 20px black;\n}\n\n.cm-s-ambiance .CodeMirror-linenumber {\n  text-shadow: 0px 1px 1px #4d4d4d;\n  color: #111;\n  padding: 0 5px;\n}\n\n.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }\n.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }\n\n.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; }\n\n.cm-s-ambiance .CodeMirror-activeline-background {\n  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);\n}\n\n.cm-s-ambiance.CodeMirror,\n.cm-s-ambiance .CodeMirror-gutters {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/css/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n  color: black;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n  border-left: 1px solid black;\n  border-right: none;\n  width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n  width: auto;\n  border: 0 !important;\n  background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n\n.cm-animate-fat-cursor {\n  width: auto;\n  border: 0;\n  -webkit-animation: blink 1.06s steps(1) infinite;\n  -moz-animation: blink 1.06s steps(1) infinite;\n  animation: blink 1.06s steps(1) infinite;\n  background-color: #7e7;\n}\n@-moz-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@-webkit-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n  position: absolute;\n  left: 0; right: 0; top: -50px; bottom: -20px;\n  overflow: hidden;\n}\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  top: 0; bottom: 0;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actual scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  min-height: 100%;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  vertical-align: top;\n  margin-bottom: -30px;\n  /* Hack to make IE7 behave */\n  *zoom:1;\n  *display:inline;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  background: none !important;\n  border: none !important;\n}\n.CodeMirror-gutter-background {\n  position: absolute;\n  top: 0; bottom: 0;\n  z-index: 4;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-font-variant-ligatures: none;\n  font-variant-ligatures: none;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.CodeMirror-cursor {\n  position: absolute;\n  pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n  visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background: #ffa;\n  background: rgba(255, 255, 0, .4);\n}\n\n/* IE7 hack to prevent it from returning funny offsetTops on the spans */\n.CodeMirror span { *vertical-align: text-bottom; }\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/js/codemirror.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    module.exports = mod();\n  else if (typeof define == \"function\" && define.amd) // AMD\n    return define([], mod);\n  else // Plain browser env\n    (this || window).CodeMirror = mod();\n})(function() {\n  \"use strict\";\n\n  // BROWSER SNIFFING\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]);\n  var webkit = /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) presto_version = Number(presto_version[1]);\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  // EDITOR CONSTRUCTOR\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n    setGuttersForLineNumbers(options);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") doc = new Doc(doc, options.mode, null, options.lineSeparator);\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    themeChanged(this);\n    if (options.lineWrapping)\n      this.display.wrapper.className += \" CodeMirror-wrap\";\n    if (options.autofocus && !mobile) display.input.focus();\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    var cm = this;\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20);\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || cm.hasFocus())\n      setTimeout(bind(onFocus, this), 20);\n    else\n      onBlur(this);\n\n    for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))\n      optionHandlers[opt](this, options[opt], Init);\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) options.finishInit(this);\n    for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      display.lineDiv.style.textRendering = \"auto\";\n  }\n\n  // DISPLAY CONSTRUCTOR\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = elt(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = elt(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [elt(\"div\", [d.lineSpace], \"CodeMirror-lines\")], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) d.scroller.draggable = true;\n\n    if (place) {\n      if (place.appendChild) place.appendChild(d.wrapper);\n      else place(d.wrapper);\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    input.init(d);\n  }\n\n  // STATE UPDATES\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function(line) {\n      if (line.stateAfter) line.stateAfter = null;\n      if (line.styles) line.styles = null;\n    });\n    cm.doc.frontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) regChange(cm);\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function(){updateScrollbars(cm);}, 100);\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function(line) {\n      if (lineIsHidden(cm.doc, line)) return 0;\n\n      var widgetsHeight = 0;\n      if (line.widgets) for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) widgetsHeight += line.widgets[i].height;\n      }\n\n      if (wrapping)\n        return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n      else\n        return widgetsHeight + th;\n    };\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function(line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) updateLineHeight(line, estHeight);\n    });\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  function guttersChanged(cm) {\n    updateGutters(cm);\n    regChange(cm);\n    setTimeout(function(){alignHorizontally(cm);}, 20);\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function updateGutters(cm) {\n    var gutters = cm.display.gutters, specs = cm.options.gutters;\n    removeChildren(gutters);\n    for (var i = 0; i < specs.length; ++i) {\n      var gutterClass = specs[i];\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n      if (gutterClass == \"CodeMirror-linenumbers\") {\n        cm.display.lineGutter = gElt;\n        gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = i ? \"\" : \"none\";\n    updateGutterSpace(cm);\n  }\n\n  function updateGutterSpace(cm) {\n    var width = cm.display.gutters.offsetWidth;\n    cm.display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) return 0;\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found = merged.find(0, true);\n      len -= cur.text.length - found.from.ch;\n      cur = found.to.line;\n      len += cur.text.length - found.to.ch;\n    }\n    return len;\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function(line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // Make sure the gutters options contains the element\n  // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n  function setGuttersForLineNumbers(options) {\n    var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n    if (found == -1 && options.lineNumbers) {\n      options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n    } else if (found > -1 && !options.lineNumbers) {\n      options.gutters = options.gutters.slice(0);\n      options.gutters.splice(found, 1);\n    }\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    };\n  }\n\n  function NativeScrollbars(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function() {\n      if (vert.clientHeight) scroll(vert.scrollTop, \"vertical\");\n    });\n    on(horiz, \"scroll\", function() {\n      if (horiz.clientWidth) scroll(horiz.scrollLeft, \"horizontal\");\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n  }\n\n  NativeScrollbars.prototype = copyObj({\n    update: function(measure) {\n      var needsH = measure.scrollWidth > measure.clientWidth + 1;\n      var needsV = measure.scrollHeight > measure.clientHeight + 1;\n      var sWidth = measure.nativeBarWidth;\n\n      if (needsV) {\n        this.vert.style.display = \"block\";\n        this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n        var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n        // A bug in IE8 can cause this value to be negative, so guard it.\n        this.vert.firstChild.style.height =\n          Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n      } else {\n        this.vert.style.display = \"\";\n        this.vert.firstChild.style.height = \"0\";\n      }\n\n      if (needsH) {\n        this.horiz.style.display = \"block\";\n        this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n        this.horiz.style.left = measure.barLeft + \"px\";\n        var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n        this.horiz.firstChild.style.width =\n          (measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n      } else {\n        this.horiz.style.display = \"\";\n        this.horiz.firstChild.style.width = \"0\";\n      }\n\n      if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n        if (sWidth == 0) this.zeroWidthHack();\n        this.checkedZeroWidth = true;\n      }\n\n      return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0};\n    },\n    setScrollLeft: function(pos) {\n      if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos;\n      if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz);\n    },\n    setScrollTop: function(pos) {\n      if (this.vert.scrollTop != pos) this.vert.scrollTop = pos;\n      if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert);\n    },\n    zeroWidthHack: function() {\n      var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n      this.horiz.style.height = this.vert.style.width = w;\n      this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n      this.disableHoriz = new Delayed;\n      this.disableVert = new Delayed;\n    },\n    enableZeroWidthBar: function(bar, delay) {\n      bar.style.pointerEvents = \"auto\";\n      function maybeDisable() {\n        // To find out whether the scrollbar is still visible, we\n        // check whether the element under the pixel in the bottom\n        // left corner of the scrollbar box is the scrollbar box\n        // itself (when the bar is still visible) or its filler child\n        // (when the bar is hidden). If it is still visible, we keep\n        // it enabled, if it's hidden, we disable pointer events.\n        var box = bar.getBoundingClientRect();\n        var elt = document.elementFromPoint(box.left + 1, box.bottom - 1);\n        if (elt != bar) bar.style.pointerEvents = \"none\";\n        else delay.set(1000, maybeDisable);\n      }\n      delay.set(1000, maybeDisable);\n    },\n    clear: function() {\n      var parent = this.horiz.parentNode;\n      parent.removeChild(this.horiz);\n      parent.removeChild(this.vert);\n    }\n  }, NativeScrollbars.prototype);\n\n  function NullScrollbars() {}\n\n  NullScrollbars.prototype = copyObj({\n    update: function() { return {bottom: 0, right: 0}; },\n    setScrollLeft: function() {},\n    setScrollTop: function() {},\n    clear: function() {}\n  }, NullScrollbars.prototype);\n\n  CodeMirror.scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n    }\n\n    cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function() {\n        if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0);\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function(pos, axis) {\n      if (axis == \"horizontal\") setScrollLeft(cm, pos);\n      else setScrollTop(cm, pos);\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n  }\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) measure = measureForScrollbars(cm);\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        updateHeightsInViewport(cm);\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\"\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else d.scrollbarFiller.style.display = \"\";\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else d.gutterFiller.style.display = \"\";\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)};\n  }\n\n  // LINE NUMBERS\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) if (!view[i].hidden) {\n      if (cm.options.fixedGutter && view[i].gutter)\n        view[i].gutter.style.left = left;\n      var align = view[i].alignable;\n      if (align) for (var j = 0; j < align.length; j++)\n        align[j].style.left = left;\n    }\n    if (cm.options.fixedGutter)\n      display.gutters.style.left = (comp + gutterW) + \"px\";\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) return false;\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm);\n      return true;\n    }\n    return false;\n  }\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber));\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n  }\n\n  // DISPLAY DRAWING\n\n  function DisplayUpdate(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  }\n\n  DisplayUpdate.prototype.signal = function(emitter, type) {\n    if (hasHandler(emitter, type))\n      this.events.push(arguments);\n  };\n  DisplayUpdate.prototype.finish = function() {\n    for (var i = 0; i < this.events.length; i++)\n      signal.apply(null, this.events[i]);\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false;\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      return false;\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);\n    if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      return false;\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var focused = activeElt();\n    if (toUpdate > 4) display.lineDiv.style.display = \"none\";\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) display.lineDiv.style.display = \"\";\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    if (focused && activeElt() != focused && focused.offsetHeight) focused.focus();\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true;\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)};\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          break;\n      }\n      if (!updateDisplayIfNeeded(cm, update)) break;\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], height;\n      if (cur.hidden) continue;\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n      }\n      var diff = cur.line.height - height;\n      if (height < 2) height = textHeight(display);\n      if (diff > .001 || diff < -.001) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) for (var j = 0; j < cur.rest.length; j++)\n          updateWidgetHeight(cur.rest[j]);\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) for (var i = 0; i < line.widgets.length; ++i)\n      line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight;\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[cm.options.gutters[i]] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth};\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        node.style.display = \"none\";\n      else\n        node.parentNode.removeChild(node);\n      return next;\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) {\n      } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) cur = rm(cur);\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) updateNumber = false;\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) cur = rm(cur);\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") updateLineText(cm, lineView);\n      else if (type == \"gutter\") updateLineGutter(cm, lineView, lineN, dims);\n      else if (type == \"class\") updateLineClasses(lineView);\n      else if (type == \"widget\") updateLineWidgets(cm, lineView, dims);\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) lineView.node.style.zIndex = 2;\n    }\n    return lineView.node;\n  }\n\n  function updateLineBackground(lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) cls += \" CodeMirror-linebackground\";\n    if (lineView.background) {\n      if (cls) lineView.background.className = cls;\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built;\n    }\n    return buildLineContent(cm, lineView);\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) lineView.node = built.pre;\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(lineView) {\n    updateLineBackground(lineView);\n    if (lineView.line.wrapClass)\n      ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n    else if (lineView.node != lineView.text)\n      lineView.node.className = \"\";\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      \"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) +\n                                      \"px; width: \" + dims.gutterTotalWidth + \"px\");\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" +\n                                             (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\");\n      cm.display.input.setUneditable(gutterWrap);\n      wrap.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        gutterWrap.className += \" \" + lineView.line.gutterClass;\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \"\n              + cm.display.lineNumInnerWidth + \"px\"));\n      if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) {\n        var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" +\n                                     dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n      }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) lineView.alignable = null;\n    for (var node = lineView.node.firstChild, next; node; node = next) {\n      var next = node.nextSibling;\n      if (node.className == \"CodeMirror-linewidget\")\n        lineView.node.removeChild(node);\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) lineView.bgClass = built.bgClass;\n    if (built.textClass) lineView.textClass = built.textClass;\n\n    updateLineClasses(lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node;\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n      insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) return;\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n      if (!widget.handleMouseEvents) node.setAttribute(\"cm-ignore-events\", \"true\");\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        wrap.insertBefore(node, lineView.gutter || lineView.text);\n      else\n        wrap.appendChild(node);\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n      (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n    }\n  }\n\n  // POSITION OBJECT\n\n  // A Pos instance represents a position within the text.\n  var Pos = CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; };\n\n  function copyPos(x) {return Pos(x.line, x.ch);}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }\n\n  // INPUT HANDLING\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) sel = doc.sel;\n\n    var paste = cm.state.pasteIncoming || origin == \"paste\";\n    var textLines = doc.splitLines(inserted), multiPaste = null\n    // When pasing N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            multiPaste.push(doc.splitLines(lastCopied.text[i]));\n        }\n      } else if (textLines.length == sel.ranges.length) {\n        multiPaste = map(textLines, function(l) { return [l]; });\n      }\n    }\n\n    // Normal behavior is to insert the new text into every selection\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          from = Pos(from.line, from.ch - deleted);\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n        else if (lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n          from = to = Pos(from.line, 0)\n      }\n      var updateInput = cm.curOp.updateInput;\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      triggerElectric(cm, inserted);\n\n    ensureCursorVisible(cm);\n    cm.curOp.updateInput = updateInput;\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = false;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"text/plain\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, \"paste\"); });\n      return true;\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) return;\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue;\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break;\n          }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          indented = indentLine(cm, range.head.line, \"smart\");\n      }\n      if (indented) signalLater(cm, \"electricInput\", cm, range.head.line);\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges};\n  }\n\n  function disableBrowserMagic(field) {\n    field.setAttribute(\"autocorrect\", \"off\");\n    field.setAttribute(\"autocapitalize\", \"off\");\n    field.setAttribute(\"spellcheck\", \"false\");\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  function TextareaInput(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Tracks when input.reset has punted to just putting a short\n    // string into the textarea instead of the full selection.\n    this.inaccurateSelection = false;\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) te.style.width = \"1000px\";\n    else te.setAttribute(\"wrap\", \"off\");\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) te.style.border = \"1px solid black\";\n    disableBrowserMagic(te);\n    return div;\n  }\n\n  TextareaInput.prototype = copyObj({\n    init: function(display) {\n      var input = this, cm = this.cm;\n\n      // Wraps and hides input textarea\n      var div = this.wrapper = hiddenTextarea();\n      // The semihidden textarea that is focused when the editor is\n      // focused, and receives input.\n      var te = this.textarea = div.firstChild;\n      display.wrapper.insertBefore(div, display.wrapper.firstChild);\n\n      // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n      if (ios) te.style.width = \"0px\";\n\n      on(te, \"input\", function() {\n        if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null;\n        input.poll();\n      });\n\n      on(te, \"paste\", function(e) {\n        if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return\n\n        cm.state.pasteIncoming = true;\n        input.fastPoll();\n      });\n\n      function prepareCopyCut(e) {\n        if (signalDOMEvent(cm, e)) return\n        if (cm.somethingSelected()) {\n          lastCopied = {lineWise: false, text: cm.getSelections()};\n          if (input.inaccurateSelection) {\n            input.prevInput = \"\";\n            input.inaccurateSelection = false;\n            te.value = lastCopied.text.join(\"\\n\");\n            selectInput(te);\n          }\n        } else if (!cm.options.lineWiseCopyCut) {\n          return;\n        } else {\n          var ranges = copyableRanges(cm);\n          lastCopied = {lineWise: true, text: ranges.text};\n          if (e.type == \"cut\") {\n            cm.setSelections(ranges.ranges, null, sel_dontScroll);\n          } else {\n            input.prevInput = \"\";\n            te.value = ranges.text.join(\"\\n\");\n            selectInput(te);\n          }\n        }\n        if (e.type == \"cut\") cm.state.cutIncoming = true;\n      }\n      on(te, \"cut\", prepareCopyCut);\n      on(te, \"copy\", prepareCopyCut);\n\n      on(display.scroller, \"paste\", function(e) {\n        if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return;\n        cm.state.pasteIncoming = true;\n        input.focus();\n      });\n\n      // Prevent normal selection in the editor (we handle our own)\n      on(display.lineSpace, \"selectstart\", function(e) {\n        if (!eventInWidget(display, e)) e_preventDefault(e);\n      });\n\n      on(te, \"compositionstart\", function() {\n        var start = cm.getCursor(\"from\");\n        if (input.composing) input.composing.range.clear()\n        input.composing = {\n          start: start,\n          range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n        };\n      });\n      on(te, \"compositionend\", function() {\n        if (input.composing) {\n          input.poll();\n          input.composing.range.clear();\n          input.composing = null;\n        }\n      });\n    },\n\n    prepareSelection: function() {\n      // Redraw the selection and/or cursor\n      var cm = this.cm, display = cm.display, doc = cm.doc;\n      var result = prepareSelection(cm);\n\n      // Move the hidden textarea near the cursor to prevent scrolling artifacts\n      if (cm.options.moveInputWithCursor) {\n        var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n        var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n        result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                            headPos.top + lineOff.top - wrapOff.top));\n        result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                             headPos.left + lineOff.left - wrapOff.left));\n      }\n\n      return result;\n    },\n\n    showSelection: function(drawn) {\n      var cm = this.cm, display = cm.display;\n      removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n      removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n      if (drawn.teTop != null) {\n        this.wrapper.style.top = drawn.teTop + \"px\";\n        this.wrapper.style.left = drawn.teLeft + \"px\";\n      }\n    },\n\n    // Reset the input to correspond to the selection (or to be empty,\n    // when not typing and nothing is selected)\n    reset: function(typing) {\n      if (this.contextMenuPending) return;\n      var minimal, selected, cm = this.cm, doc = cm.doc;\n      if (cm.somethingSelected()) {\n        this.prevInput = \"\";\n        var range = doc.sel.primary();\n        minimal = hasCopyEvent &&\n          (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000);\n        var content = minimal ? \"-\" : selected || cm.getSelection();\n        this.textarea.value = content;\n        if (cm.state.focused) selectInput(this.textarea);\n        if (ie && ie_version >= 9) this.hasSelection = content;\n      } else if (!typing) {\n        this.prevInput = this.textarea.value = \"\";\n        if (ie && ie_version >= 9) this.hasSelection = null;\n      }\n      this.inaccurateSelection = minimal;\n    },\n\n    getField: function() { return this.textarea; },\n\n    supportsTouch: function() { return false; },\n\n    focus: function() {\n      if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n        try { this.textarea.focus(); }\n        catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n      }\n    },\n\n    blur: function() { this.textarea.blur(); },\n\n    resetPosition: function() {\n      this.wrapper.style.top = this.wrapper.style.left = 0;\n    },\n\n    receivedFocus: function() { this.slowPoll(); },\n\n    // Poll for input changes, using the normal rate of polling. This\n    // runs as long as the editor is focused.\n    slowPoll: function() {\n      var input = this;\n      if (input.pollingFast) return;\n      input.polling.set(this.cm.options.pollInterval, function() {\n        input.poll();\n        if (input.cm.state.focused) input.slowPoll();\n      });\n    },\n\n    // When an event has just come in that is likely to add or change\n    // something in the input textarea, we poll faster, to ensure that\n    // the change appears on the screen quickly.\n    fastPoll: function() {\n      var missed = false, input = this;\n      input.pollingFast = true;\n      function p() {\n        var changed = input.poll();\n        if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n        else {input.pollingFast = false; input.slowPoll();}\n      }\n      input.polling.set(20, p);\n    },\n\n    // Read input from the textarea, and update the document to match.\n    // When something is selected, it is present in the textarea, and\n    // selected (unless it is huge, in which case a placeholder is\n    // used). When nothing is selected, the cursor sits after previously\n    // seen text (can be empty), which is stored in prevInput (we must\n    // not reset the textarea when typing, because that breaks IME).\n    poll: function() {\n      var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n      // Since this is called a *lot*, try to bail out as cheaply as\n      // possible when it is clear that nothing happened. hasSelection\n      // will be the case when there is a lot of text in the textarea,\n      // in which case reading its value would be expensive.\n      if (this.contextMenuPending || !cm.state.focused ||\n          (hasSelection(input) && !prevInput && !this.composing) ||\n          cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n        return false;\n\n      var text = input.value;\n      // If nothing changed, bail.\n      if (text == prevInput && !cm.somethingSelected()) return false;\n      // Work around nonsensical selection resetting in IE9/10, and\n      // inexplicable appearance of private area unicode characters on\n      // some key combos in Mac (#2689).\n      if (ie && ie_version >= 9 && this.hasSelection === text ||\n          mac && /[\\uf700-\\uf7ff]/.test(text)) {\n        cm.display.input.reset();\n        return false;\n      }\n\n      if (cm.doc.sel == cm.display.selForContextMenu) {\n        var first = text.charCodeAt(0);\n        if (first == 0x200b && !prevInput) prevInput = \"\\u200b\";\n        if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\"); }\n      }\n      // Find the part of the input that is actually new\n      var same = 0, l = Math.min(prevInput.length, text.length);\n      while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;\n\n      var self = this;\n      runInOp(cm, function() {\n        applyTextInput(cm, text.slice(same), prevInput.length - same,\n                       null, self.composing ? \"*compose\" : null);\n\n        // Don't leave long text in the textarea, since it makes further polling slow\n        if (text.length > 1000 || text.indexOf(\"\\n\") > -1) input.value = self.prevInput = \"\";\n        else self.prevInput = text;\n\n        if (self.composing) {\n          self.composing.range.clear();\n          self.composing.range = cm.markText(self.composing.start, cm.getCursor(\"to\"),\n                                             {className: \"CodeMirror-composing\"});\n        }\n      });\n      return true;\n    },\n\n    ensurePolled: function() {\n      if (this.pollingFast && this.poll()) this.pollingFast = false;\n    },\n\n    onKeyPress: function() {\n      if (ie && ie_version >= 9) this.hasSelection = null;\n      this.fastPoll();\n    },\n\n    onContextMenu: function(e) {\n      var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n      var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n      if (!pos || presto) return; // Opera is difficult.\n\n      // Reset the current text selection only if the click is done outside of the selection\n      // and 'resetSelectionOnContextMenu' option is true.\n      var reset = cm.options.resetSelectionOnContextMenu;\n      if (reset && cm.doc.sel.contains(pos) == -1)\n        operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n\n      var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n      input.wrapper.style.cssText = \"position: absolute\"\n      var wrapperBox = input.wrapper.getBoundingClientRect()\n      te.style.cssText = \"position: absolute; width: 30px; height: 30px; top: \" + (e.clientY - wrapperBox.top - 5) +\n        \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px; z-index: 1000; background: \" +\n        (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") +\n        \"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n      if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712)\n      display.input.focus();\n      if (webkit) window.scrollTo(null, oldScrollY);\n      display.input.reset();\n      // Adds \"Select all\" to context menu in FF\n      if (!cm.somethingSelected()) te.value = input.prevInput = \" \";\n      input.contextMenuPending = true;\n      display.selForContextMenu = cm.doc.sel;\n      clearTimeout(display.detectingSelectAll);\n\n      // Select-all will be greyed out if there's nothing to select, so\n      // this adds a zero-width space so that we can later check whether\n      // it got selected.\n      function prepareSelectAllHack() {\n        if (te.selectionStart != null) {\n          var selected = cm.somethingSelected();\n          var extval = \"\\u200b\" + (selected ? te.value : \"\");\n          te.value = \"\\u21da\"; // Used to catch context-menu undo\n          te.value = extval;\n          input.prevInput = selected ? \"\" : \"\\u200b\";\n          te.selectionStart = 1; te.selectionEnd = extval.length;\n          // Re-set this, in case some other handler touched the\n          // selection in the meantime.\n          display.selForContextMenu = cm.doc.sel;\n        }\n      }\n      function rehide() {\n        input.contextMenuPending = false;\n        input.wrapper.style.cssText = oldWrapperCSS\n        te.style.cssText = oldCSS;\n        if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n\n        // Try to detect the user choosing select-all\n        if (te.selectionStart != null) {\n          if (!ie || (ie && ie_version < 9)) prepareSelectAllHack();\n          var i = 0, poll = function() {\n            if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n                te.selectionEnd > 0 && input.prevInput == \"\\u200b\")\n              operation(cm, commands.selectAll)(cm);\n            else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500);\n            else display.input.reset();\n          };\n          display.detectingSelectAll = setTimeout(poll, 200);\n        }\n      }\n\n      if (ie && ie_version >= 9) prepareSelectAllHack();\n      if (captureRightClick) {\n        e_stop(e);\n        var mouseup = function() {\n          off(window, \"mouseup\", mouseup);\n          setTimeout(rehide, 20);\n        };\n        on(window, \"mouseup\", mouseup);\n      } else {\n        setTimeout(rehide, 50);\n      }\n    },\n\n    readOnlyChanged: function(val) {\n      if (!val) this.reset();\n    },\n\n    setUneditable: nothing,\n\n    needsContentAttribute: false\n  }, TextareaInput.prototype);\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  function ContentEditableInput(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.gracePeriod = false;\n  }\n\n  ContentEditableInput.prototype = copyObj({\n    init: function(display) {\n      var input = this, cm = input.cm;\n      var div = input.div = display.lineDiv;\n      disableBrowserMagic(div);\n\n      on(div, \"paste\", function(e) {\n        if (!signalDOMEvent(cm, e)) handlePaste(e, cm);\n      })\n\n      on(div, \"compositionstart\", function(e) {\n        var data = e.data;\n        input.composing = {sel: cm.doc.sel, data: data, startData: data};\n        if (!data) return;\n        var prim = cm.doc.sel.primary();\n        var line = cm.getLine(prim.head.line);\n        var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length));\n        if (found > -1 && found <= prim.head.ch)\n          input.composing.sel = simpleSelection(Pos(prim.head.line, found),\n                                                Pos(prim.head.line, found + data.length));\n      });\n      on(div, \"compositionupdate\", function(e) {\n        input.composing.data = e.data;\n      });\n      on(div, \"compositionend\", function(e) {\n        var ours = input.composing;\n        if (!ours) return;\n        if (e.data != ours.startData && !/\\u200b/.test(e.data))\n          ours.data = e.data;\n        // Need a small delay to prevent other code (input event,\n        // selection polling) from doing damage when fired right after\n        // compositionend.\n        setTimeout(function() {\n          if (!ours.handled)\n            input.applyComposition(ours);\n          if (input.composing == ours)\n            input.composing = null;\n        }, 50);\n      });\n\n      on(div, \"touchstart\", function() {\n        input.forceCompositionEnd();\n      });\n\n      on(div, \"input\", function() {\n        if (input.composing) return;\n        if (cm.isReadOnly() || !input.pollContent())\n          runInOp(input.cm, function() {regChange(cm);});\n      });\n\n      function onCopyCut(e) {\n        if (signalDOMEvent(cm, e)) return\n        if (cm.somethingSelected()) {\n          lastCopied = {lineWise: false, text: cm.getSelections()};\n          if (e.type == \"cut\") cm.replaceSelection(\"\", null, \"cut\");\n        } else if (!cm.options.lineWiseCopyCut) {\n          return;\n        } else {\n          var ranges = copyableRanges(cm);\n          lastCopied = {lineWise: true, text: ranges.text};\n          if (e.type == \"cut\") {\n            cm.operation(function() {\n              cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n              cm.replaceSelection(\"\", null, \"cut\");\n            });\n          }\n        }\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        if (e.clipboardData && !ios) {\n          e.preventDefault();\n          e.clipboardData.clearData();\n          e.clipboardData.setData(\"text/plain\", lastCopied.text.join(\"\\n\"));\n        } else {\n          // Old-fashioned briefly-focus-a-textarea hack\n          var kludge = hiddenTextarea(), te = kludge.firstChild;\n          cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n          te.value = lastCopied.text.join(\"\\n\");\n          var hadFocus = document.activeElement;\n          selectInput(te);\n          setTimeout(function() {\n            cm.display.lineSpace.removeChild(kludge);\n            hadFocus.focus();\n          }, 50);\n        }\n      }\n      on(div, \"copy\", onCopyCut);\n      on(div, \"cut\", onCopyCut);\n    },\n\n    prepareSelection: function() {\n      var result = prepareSelection(this.cm, false);\n      result.focus = this.cm.state.focused;\n      return result;\n    },\n\n    showSelection: function(info, takeFocus) {\n      if (!info || !this.cm.display.view.length) return;\n      if (info.focus || takeFocus) this.showPrimarySelection();\n      this.showMultipleSelections(info);\n    },\n\n    showPrimarySelection: function() {\n      var sel = window.getSelection(), prim = this.cm.doc.sel.primary();\n      var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset);\n      var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset);\n      if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n          cmp(minPos(curAnchor, curFocus), prim.from()) == 0 &&\n          cmp(maxPos(curAnchor, curFocus), prim.to()) == 0)\n        return;\n\n      var start = posToDOM(this.cm, prim.from());\n      var end = posToDOM(this.cm, prim.to());\n      if (!start && !end) return;\n\n      var view = this.cm.display.view;\n      var old = sel.rangeCount && sel.getRangeAt(0);\n      if (!start) {\n        start = {node: view[0].measure.map[2], offset: 0};\n      } else if (!end) { // FIXME dangerously hacky\n        var measure = view[view.length - 1].measure;\n        var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n        end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n      }\n\n      try { var rng = range(start.node, start.offset, end.offset, end.node); }\n      catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n      if (rng) {\n        if (!gecko && this.cm.state.focused) {\n          sel.collapse(start.node, start.offset);\n          if (!rng.collapsed) sel.addRange(rng);\n        } else {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n        if (old && sel.anchorNode == null) sel.addRange(old);\n        else if (gecko) this.startGracePeriod();\n      }\n      this.rememberSelection();\n    },\n\n    startGracePeriod: function() {\n      var input = this;\n      clearTimeout(this.gracePeriod);\n      this.gracePeriod = setTimeout(function() {\n        input.gracePeriod = false;\n        if (input.selectionChanged())\n          input.cm.operation(function() { input.cm.curOp.selectionChanged = true; });\n      }, 20);\n    },\n\n    showMultipleSelections: function(info) {\n      removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n      removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n    },\n\n    rememberSelection: function() {\n      var sel = window.getSelection();\n      this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n      this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n    },\n\n    selectionInEditor: function() {\n      var sel = window.getSelection();\n      if (!sel.rangeCount) return false;\n      var node = sel.getRangeAt(0).commonAncestorContainer;\n      return contains(this.div, node);\n    },\n\n    focus: function() {\n      if (this.cm.options.readOnly != \"nocursor\") this.div.focus();\n    },\n    blur: function() { this.div.blur(); },\n    getField: function() { return this.div; },\n\n    supportsTouch: function() { return true; },\n\n    receivedFocus: function() {\n      var input = this;\n      if (this.selectionInEditor())\n        this.pollSelection();\n      else\n        runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; });\n\n      function poll() {\n        if (input.cm.state.focused) {\n          input.pollSelection();\n          input.polling.set(input.cm.options.pollInterval, poll);\n        }\n      }\n      this.polling.set(this.cm.options.pollInterval, poll);\n    },\n\n    selectionChanged: function() {\n      var sel = window.getSelection();\n      return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n        sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;\n    },\n\n    pollSelection: function() {\n      if (!this.composing && !this.gracePeriod && this.selectionChanged()) {\n        var sel = window.getSelection(), cm = this.cm;\n        this.rememberSelection();\n        var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n        var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n        if (anchor && head) runInOp(cm, function() {\n          setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n          if (anchor.bad || head.bad) cm.curOp.selectionChanged = true;\n        });\n      }\n    },\n\n    pollContent: function() {\n      var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n      var from = sel.from(), to = sel.to();\n      if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false;\n\n      var fromIndex;\n      if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n        var fromLine = lineNo(display.view[0].line);\n        var fromNode = display.view[0].node;\n      } else {\n        var fromLine = lineNo(display.view[fromIndex].line);\n        var fromNode = display.view[fromIndex - 1].node.nextSibling;\n      }\n      var toIndex = findViewIndex(cm, to.line);\n      if (toIndex == display.view.length - 1) {\n        var toLine = display.viewTo - 1;\n        var toNode = display.lineDiv.lastChild;\n      } else {\n        var toLine = lineNo(display.view[toIndex + 1].line) - 1;\n        var toNode = display.view[toIndex + 1].node.previousSibling;\n      }\n\n      var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n      var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n      while (newText.length > 1 && oldText.length > 1) {\n        if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n        else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n        else break;\n      }\n\n      var cutFront = 0, cutEnd = 0;\n      var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n      while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n        ++cutFront;\n      var newBot = lst(newText), oldBot = lst(oldText);\n      var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                               oldBot.length - (oldText.length == 1 ? cutFront : 0));\n      while (cutEnd < maxCutEnd &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n        ++cutEnd;\n\n      newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd);\n      newText[0] = newText[0].slice(cutFront);\n\n      var chFrom = Pos(fromLine, cutFront);\n      var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n      if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n        replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n        return true;\n      }\n    },\n\n    ensurePolled: function() {\n      this.forceCompositionEnd();\n    },\n    reset: function() {\n      this.forceCompositionEnd();\n    },\n    forceCompositionEnd: function() {\n      if (!this.composing || this.composing.handled) return;\n      this.applyComposition(this.composing);\n      this.composing.handled = true;\n      this.div.blur();\n      this.div.focus();\n    },\n    applyComposition: function(composing) {\n      if (this.cm.isReadOnly())\n        operation(this.cm, regChange)(this.cm)\n      else if (composing.data && composing.data != composing.startData)\n        operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel);\n    },\n\n    setUneditable: function(node) {\n      node.contentEditable = \"false\"\n    },\n\n    onKeyPress: function(e) {\n      e.preventDefault();\n      if (!this.cm.isReadOnly())\n        operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);\n    },\n\n    readOnlyChanged: function(val) {\n      this.div.contentEditable = String(val != \"nocursor\")\n    },\n\n    onContextMenu: nothing,\n    resetPosition: nothing,\n\n    needsContentAttribute: true\n  }, ContentEditableInput.prototype);\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) return null;\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result;\n  }\n\n  function badPos(pos, bad) { if (bad) pos.bad = true; return pos; }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) return null;\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break;\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        return locateNodeInLineView(lineView, node, offset);\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true);\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad);\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) offset = textNode.nodeValue.length;\n    }\n    while (topNode.parentNode != wrapper) topNode = topNode.parentNode;\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)];\n            return Pos(line, ch);\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) return badPos(found, bad);\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        return badPos(Pos(found.line, found.ch - dist), bad);\n      else\n        dist += after.textContent.length;\n    }\n    for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        return badPos(Pos(found.line, found.ch + dist), bad);\n      else\n        dist += after.textContent.length;\n    }\n  }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator();\n    function recognizeMarker(id) { return function(marker) { return marker.id == id; }; }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText != null) {\n          if (cmText == \"\") cmText = node.textContent.replace(/\\u200b/g, \"\");\n          text += cmText;\n          return;\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find()))\n            text += getBetween(cm.doc, range.from, range.to).join(lineSep);\n          return;\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") return;\n        for (var i = 0; i < node.childNodes.length; i++)\n          walk(node.childNodes[i]);\n        if (/^(pre|div|p)$/i.test(node.nodeName))\n          closing = true;\n      } else if (node.nodeType == 3) {\n        var val = node.nodeValue;\n        if (!val) return;\n        if (closing) {\n          text += lineSep;\n          closing = false;\n        }\n        text += val;\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) break;\n      from = from.nextSibling;\n    }\n    return text;\n  }\n\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // SELECTION / CURSOR\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  function Selection(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  }\n\n  Selection.prototype = {\n    primary: function() { return this.ranges[this.primIndex]; },\n    equals: function(other) {\n      if (other == this) return true;\n      if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var here = this.ranges[i], there = other.ranges[i];\n        if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false;\n      }\n      return true;\n    },\n    deepCopy: function() {\n      for (var out = [], i = 0; i < this.ranges.length; i++)\n        out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n      return new Selection(out, this.primIndex);\n    },\n    somethingSelected: function() {\n      for (var i = 0; i < this.ranges.length; i++)\n        if (!this.ranges[i].empty()) return true;\n      return false;\n    },\n    contains: function(pos, end) {\n      if (!end) end = pos;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var range = this.ranges[i];\n        if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n          return i;\n      }\n      return -1;\n    }\n  };\n\n  function Range(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  }\n\n  Range.prototype = {\n    from: function() { return minPos(this.anchor, this.head); },\n    to: function() { return maxPos(this.anchor, this.head); },\n    empty: function() {\n      return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n    }\n  };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(ranges, primIndex) {\n    var prim = ranges[primIndex];\n    ranges.sort(function(a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      if (cmp(prev.to(), cur.from()) >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) --primIndex;\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex);\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0);\n  }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) return Pos(doc.first, 0);\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) return Pos(last, getLine(doc, last).text.length);\n    return clipToLen(pos, getLine(doc, pos.line).text.length);\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) return Pos(pos.line, linelen);\n    else if (ch < 0) return Pos(pos.line, 0);\n    else return pos;\n  }\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}\n  function clipPosArray(doc, array) {\n    for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]);\n    return out;\n  }\n\n  // SELECTION UPDATES\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(doc, range, head, other) {\n    if (doc.cm && doc.cm.display.shift || doc.extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head);\n    } else {\n      return new Range(other || head, head);\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options) {\n    setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    for (var out = [], i = 0; i < doc.sel.ranges.length; i++)\n      out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);\n    var newSel = normalizeSelection(out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head));\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n    if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1);\n    else return sel;\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      sel = filterSelectionChange(doc, sel, options);\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      ensureCursorVisible(doc.cm);\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) return;\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) out = sel.ranges.slice(0, i);\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(out, sel.primIndex) : sel;\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n      if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) break;\n            else {--i; continue;}\n          }\n        }\n        if (!m.atomic) continue;\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff;\n          if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n            near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            return skipAtomicInner(doc, near, pos, dir, mayClear);\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n          far = movePos(doc, far, dir, far.line == pos.line ? line : null);\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;\n      }\n    }\n    return pos;\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0);\n    }\n    return found;\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1));\n      else return null;\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0);\n      else return null;\n    } else {\n      return new Pos(pos.line, pos.ch + dir);\n    }\n  }\n\n  // SELECTION DRAWING\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (primary === false && i == doc.sel.primIndex) continue;\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue;\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        drawSelectionCursor(cm, range.head, curFragment);\n      if (!collapsed)\n        drawSelectionRange(cm, range, selFragment);\n    }\n    return result;\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n\n    function add(left, top, width, bottom) {\n      if (top < 0) top = 0;\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left +\n                               \"px; top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) +\n                               \"px; height: \" + (bottom - top) + \"px\"));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n      }\n\n      iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {\n        var leftPos = coords(from, \"left\"), rightPos, left, right;\n        if (from == to) {\n          rightPos = leftPos;\n          left = right = leftPos.left;\n        } else {\n          rightPos = coords(to - 1, \"right\");\n          if (dir == \"rtl\") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }\n          left = leftPos.left;\n          right = rightPos.right;\n        }\n        if (fromArg == null && from == 0) left = leftSide;\n        if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part\n          add(left, leftPos.top, null, leftPos.bottom);\n          left = leftSide;\n          if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);\n        }\n        if (toArg == null && to == lineLen) right = rightSide;\n        if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)\n          start = leftPos;\n        if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)\n          end = rightPos;\n        if (left < leftSide + 1) left = leftSide;\n        add(left, rightPos.top, right - left, rightPos.bottom);\n      });\n      return {start: start, end: end};\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        add(leftSide, leftEnd.bottom, null, rightStart.top);\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) return;\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      display.blinker = setInterval(function() {\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate);\n    else if (cm.options.cursorBlinkRate < 0)\n      display.cursorDiv.style.visibility = \"hidden\";\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)\n      cm.state.highlight.set(time, bind(highlightWorker, cm));\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.frontier < doc.first) doc.frontier = doc.first;\n    if (doc.frontier >= cm.display.viewTo) return;\n    var end = +new Date + cm.options.workTime;\n    var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));\n    var changedLines = [];\n\n    doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {\n      if (doc.frontier >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength;\n        var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true);\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) line.styleClasses = newCls;\n        else if (oldCls) line.styleClasses = null;\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];\n        if (ischange) changedLines.push(doc.frontier);\n        line.stateAfter = tooLong ? state : copyState(doc.mode, state);\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          processLine(cm, line.text, state);\n        line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;\n      }\n      ++doc.frontier;\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true;\n      }\n    });\n    if (changedLines.length) runInOp(cm, function() {\n      for (var i = 0; i < changedLines.length; i++)\n        regLineChange(cm, changedLines[i], \"text\");\n    });\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) return doc.first;\n      var line = getLine(doc, search - 1);\n      if (line.stateAfter && (!precise || search <= doc.frontier)) return search;\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline;\n  }\n\n  function getStateBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) return true;\n    var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;\n    if (!state) state = startState(doc.mode);\n    else state = copyState(doc.mode, state);\n    doc.iter(pos, n, function(line) {\n      processLine(cm, line.text, state);\n      var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;\n      line.stateAfter = save ? copyState(doc.mode, state) : null;\n      ++pos;\n    });\n    if (precise) doc.frontier = pos;\n    return state;\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop;}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}\n  function paddingH(display) {\n    if (display.cachedPaddingH) return display.cachedPaddingH;\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data;\n    return data;\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            heights.push((cur.bottom + next.top) / 2 - rect.top);\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      return {map: lineView.measure.map, cache: lineView.measure.cache};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineView.rest[i] == line)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineNo(lineView.rest[i]) > lineN)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view;\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      return cm.display.view[findViewIndex(cm, lineN)];\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      return ext;\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      view = updateExternalMeasurement(cm, line);\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    };\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) ch = -1;\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        prepared.rect = prepared.view.text.getBoundingClientRect();\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) prepared.cache[key] = found;\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom};\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      var mStart = map[i], mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) collapse = \"right\";\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          collapse = bias;\n        if (bias == \"left\" && start == 0)\n          while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          }\n        if (bias == \"right\" && start == mEnd - mStart)\n          while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          }\n        break;\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd};\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect\n    if (bias == \"left\") for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) break\n    } else for (var i = rects.length - 1; i >= 0; i--) {\n      if ((rect = rects[i]).left != rect.right) break\n    }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start;\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end;\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          rect = node.parentNode.getBoundingClientRect();\n        else\n          rect = getUsefulRect(range(node, start, end).getClientRects(), bias)\n        if (rect.left || rect.right || start == 0) break;\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) collapse = bias = \"right\";\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n      else\n        rect = node.getBoundingClientRect();\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};\n      else\n        rect = nullRect;\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    for (var i = 0; i < heights.length - 1; i++)\n      if (mid < heights[i]) break;\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) result.bogus = true;\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result;\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      return rect;\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY};\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n        lineView.measure.caches[i] = {};\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      clearLineMeasurementCacheFor(cm.display.view[i]);\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }\n  function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"/null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context) {\n    if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {\n      var size = widgetHeight(lineObj.widgets[i]);\n      rect.top += size; rect.bottom += size;\n    }\n    if (context == \"line\") return rect;\n    if (!context) context = \"local\";\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") yOff += paddingTop(cm.display);\n    else yOff -= cm.display.viewOffset;\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect;\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"/null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") return coords;\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) lineObj = getLine(cm.doc, pos.line);\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) m.left = m.right; else m.right = m.left;\n      return intoCoordSystem(cm, lineObj, m, context);\n    }\n    function getBidi(ch, partPos) {\n      var part = order[partPos], right = part.level % 2;\n      if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {\n        part = order[--partPos];\n        ch = bidiRight(part) - (part.level % 2 ? 0 : 1);\n        right = true;\n      } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {\n        part = order[++partPos];\n        ch = bidiLeft(part) - part.level % 2;\n        right = false;\n      }\n      if (right && ch == part.to && ch > part.from) return get(ch - 1);\n      return get(ch, right);\n    }\n    var order = getOrder(lineObj), ch = pos.ch;\n    if (!order) return get(ch);\n    var partPos = getBidiPartAt(order, ch);\n    var val = getBidi(ch, partPos);\n    if (bidiOther != null) val.other = getBidi(ch, bidiOther);\n    return val;\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0, pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch;\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height};\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, outside, xRel) {\n    var pos = Pos(line, ch);\n    pos.xRel = xRel;\n    if (outside) pos.outside = true;\n    return pos;\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) return PosWithInfo(doc.first, 0, true, -1);\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);\n    if (x < 0) x = 0;\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var merged = collapsedSpanAtEnd(lineObj);\n      var mergedPos = merged && merged.find(0, true);\n      if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n        lineN = lineNo(lineObj = mergedPos.to.line);\n      else\n        return found;\n    }\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    var innerOff = y - heightAtLine(lineObj);\n    var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n\n    function getX(ch) {\n      var sp = cursorCoords(cm, Pos(lineNo, ch), \"line\", lineObj, preparedMeasure);\n      wrongLine = true;\n      if (innerOff > sp.bottom) return sp.left - adjust;\n      else if (innerOff < sp.top) return sp.left + adjust;\n      else wrongLine = false;\n      return sp.left;\n    }\n\n    var bidi = getOrder(lineObj), dist = lineObj.text.length;\n    var from = lineLeft(lineObj), to = lineRight(lineObj);\n    var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;\n\n    if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);\n    // Do a binary search between these bounds.\n    for (;;) {\n      if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {\n        var ch = x < fromX || x - fromX <= toX - x ? from : to;\n        var outside = ch == from ? fromOutside : toOutside\n        var xDiff = x - (ch == from ? fromX : toX);\n        // This is a kludge to handle the case where the coordinates\n        // are after a line-wrapped line. We should replace it with a\n        // more general handling of cursor positions around line\n        // breaks. (Issue #4078)\n        if (toOutside && !bidi && !/\\s/.test(lineObj.text.charAt(ch)) && xDiff > 0 &&\n            ch < lineObj.text.length && preparedMeasure.view.measure.heights.length > 1) {\n          var charSize = measureCharPrepared(cm, preparedMeasure, ch, \"right\");\n          if (innerOff <= charSize.bottom && innerOff >= charSize.top && Math.abs(x - charSize.right) < xDiff) {\n            outside = false\n            ch++\n            xDiff = x - charSize.right\n          }\n        }\n        while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;\n        var pos = PosWithInfo(lineNo, ch, outside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);\n        return pos;\n      }\n      var step = Math.ceil(dist / 2), middle = from + step;\n      if (bidi) {\n        middle = from;\n        for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);\n      }\n      var middleX = getX(middle);\n      if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}\n      else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}\n    }\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) return display.cachedTextHeight;\n    if (measureText == null) {\n      measureText = elt(\"pre\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) display.cachedTextHeight = height;\n    removeChildren(display.measure);\n    return height || 1;\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) return display.cachedCharWidth;\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) display.cachedCharWidth = width;\n    return width || 10;\n  }\n\n  // OPERATIONS\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var operationGroup = null;\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: null,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    if (operationGroup) {\n      operationGroup.ops.push(cm.curOp);\n    } else {\n      cm.curOp.ownsGroup = operationGroup = {\n        ops: [cm.curOp],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        callbacks[i].call(null);\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);\n      }\n    } while (i < callbacks.length);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp, group = op.ownsGroup;\n    if (!group) return;\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      for (var i = 0; i < group.ops.length; i++)\n        group.ops[i].cm.curOp = null;\n      endOperations(group);\n    }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_R1(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n      endOperation_W1(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_R2(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n      endOperation_W2(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_finish(ops[i]);\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) findMaxLine(cm);\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) updateHeightsInViewport(cm);\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      op.preparedSelection = display.input.prepareSelection(op.focus);\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())\n    if (op.preparedSelection)\n      cm.display.input.showSelection(op.preparedSelection, takeFocus);\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      updateScrollbars(cm, op.barMeasure);\n    if (op.updatedDisplay)\n      setDocumentHeight(cm, op.barMeasure);\n\n    if (op.selectionChanged) restartBlink(cm);\n\n    if (cm.state.focused && op.updateInput)\n      cm.display.input.reset(op.typing);\n    if (takeFocus) ensureFocus(op.cm);\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) postUpdateDisplay(cm, op.update);\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      display.wheelStartX = display.wheelStartY = null;\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {\n      doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop));\n      display.scrollbars.setScrollTop(doc.scrollTop);\n      display.scroller.scrollTop = doc.scrollTop;\n    }\n    if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {\n      doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft));\n      display.scrollbars.setScrollLeft(doc.scrollLeft);\n      display.scroller.scrollLeft = doc.scrollLeft;\n      alignHorizontally(cm);\n    }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                     clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) for (var i = 0; i < hidden.length; ++i)\n      if (!hidden[i].lines.length) signal(hidden[i], \"hide\");\n    if (unhidden) for (var i = 0; i < unhidden.length; ++i)\n      if (unhidden[i].lines.length) signal(unhidden[i], \"unhide\");\n\n    if (display.wrapper.offsetHeight)\n      doc.scrollTop = cm.display.scroller.scrollTop;\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      signal(cm, \"changes\", cm, op.changeObjs);\n    if (op.update)\n      op.update.finish();\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) return f();\n    startOperation(cm);\n    try { return f(); }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) return f.apply(cm, arguments);\n      startOperation(cm);\n      try { return f.apply(cm, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) return f.apply(this, arguments);\n      startOperation(this);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(this); }\n    };\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) return f.apply(this, arguments);\n      startOperation(cm);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n\n  // VIEW TRACKING\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array;\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) from = cm.doc.first;\n    if (to == null) to = cm.doc.first + cm.doc.size;\n    if (!lendiff) lendiff = 0;\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      display.updateLineNumbers = from;\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        resetView(cm);\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut = viewCuttingPoint(cm, from, from, -1);\n      if (cut) {\n        display.view = display.view.slice(0, cut.index);\n        display.viewTo = cut.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        ext.lineN += lendiff;\n      else if (from < ext.lineN + ext.size)\n        display.externalMeasured = null;\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      display.externalMeasured = null;\n\n    if (line < display.viewFrom || line >= display.viewTo) return;\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) return;\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) arr.push(type);\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) return null;\n    n -= cm.display.viewFrom;\n    if (n < 0) return null;\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) return i;\n    }\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      return {index: index, lineN: newN};\n    for (var i = 0, n = cm.display.viewFrom; i < index; i++)\n      n += view[i].size;\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) return null;\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) return null;\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN};\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n      else if (display.viewFrom < from)\n        display.view = display.view.slice(findViewIndex(cm, from));\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n      else if (display.viewTo > to)\n        display.view = display.view.slice(0, findViewIndex(cm, to));\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty;\n    }\n    return dirty;\n  }\n\n  // EVENT HANDLERS\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      on(d.scroller, \"dblclick\", operation(cm, function(e) {\n        if (signalDOMEvent(cm, e)) return;\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      }));\n    else\n      on(d.scroller, \"dblclick\", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    if (!captureRightClick) on(d.scroller, \"contextmenu\", function(e) {onContextMenu(cm, e);});\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    };\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) return false;\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1;\n    }\n    function farAway(touch, other) {\n      if (other.left == null) return true;\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20;\n    }\n    on(d.scroller, \"touchstart\", function(e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) {\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function() {\n      if (d.activeTouch) d.activeTouch.moved = true;\n    });\n    on(d.scroller, \"touchend\", function(e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          range = new Range(pos, pos);\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          range = cm.findWordAt(pos);\n        else // Triple tap\n          range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function() {\n      if (d.scroller.clientHeight) {\n        setScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function(e){onScrollWheel(cm, e);});\n    on(d.scroller, \"DOMMouseScroll\", function(e){onScrollWheel(cm, e);});\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);},\n      over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function(e){onDragStart(cm, e);},\n      drop: operation(cm, onDrop),\n      leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function(e) { onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", bind(onFocus, cm));\n    on(inp, \"blur\", bind(onBlur, cm));\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != CodeMirror.Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)\n      return;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  // MOUSE EVENTS\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        return true;\n    }\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") return null;\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e) { return null; }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords;\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return;\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function(){display.scroller.draggable = true;}, 100);\n      }\n      return;\n    }\n    if (clickInGutter(cm, e)) return;\n    var start = posFromMouse(cm, e);\n    window.focus();\n\n    switch (e_button(e)) {\n    case 1:\n      // #3261: make sure, that we're not starting a second selection\n      if (cm.state.selectingText)\n        cm.state.selectingText(e);\n      else if (start)\n        leftButtonDown(cm, e, start);\n      else if (e_target(e) == display.scroller)\n        e_preventDefault(e);\n      break;\n    case 2:\n      if (webkit) cm.state.lastMiddleDown = +new Date;\n      if (start) extendSelection(cm.doc, start);\n      setTimeout(function() {display.input.focus();}, 20);\n      e_preventDefault(e);\n      break;\n    case 3:\n      if (captureRightClick) onContextMenu(cm, e);\n      else delayBlurEvent(cm);\n      break;\n    }\n  }\n\n  var lastClick, lastDoubleClick;\n  function leftButtonDown(cm, e, start) {\n    if (ie) setTimeout(bind(ensureFocus, cm), 0);\n    else cm.curOp.focus = activeElt();\n\n    var now = +new Date, type;\n    if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {\n      type = \"triple\";\n    } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {\n      type = \"double\";\n      lastDoubleClick = {time: now, pos: start};\n    } else {\n      type = \"single\";\n      lastClick = {time: now, pos: start};\n    }\n\n    var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        type == \"single\" && (contained = sel.contains(start)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) &&\n        (cmp(contained.to(), start) > 0 || start.xRel < 0))\n      leftButtonStartDrag(cm, e, start, modifier);\n    else\n      leftButtonSelect(cm, e, start, type, modifier);\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, e, start, modifier) {\n    var display = cm.display, startTime = +new Date;\n    var dragEnd = operation(cm, function(e2) {\n      if (webkit) display.scroller.draggable = false;\n      cm.state.draggingText = false;\n      off(document, \"mouseup\", dragEnd);\n      off(display.scroller, \"drop\", dragEnd);\n      if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n        e_preventDefault(e2);\n        if (!modifier && +new Date - 200 < startTime)\n          extendSelection(cm.doc, start);\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if (webkit || ie && ie_version == 9)\n          setTimeout(function() {document.body.focus(); display.input.focus();}, 20);\n        else\n          display.input.focus();\n      }\n    });\n    // Let the drag handler handle this.\n    if (webkit) display.scroller.draggable = true;\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = mac ? e.altKey : e.ctrlKey\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) display.scroller.dragDrop();\n    on(document, \"mouseup\", dragEnd);\n    on(display.scroller, \"drop\", dragEnd);\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, e, start, type, addNew) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(e);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (addNew && !e.shiftKey) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        ourRange = ranges[ourIndex];\n      else\n        ourRange = new Range(start, start);\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) {\n      type = \"rect\";\n      if (!addNew) ourRange = new Range(start, start);\n      start = posFromMouse(cm, e, true, true);\n      ourIndex = -1;\n    } else if (type == \"double\") {\n      var word = cm.findWordAt(start);\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, word.anchor, word.head);\n      else\n        ourRange = word;\n    } else if (type == \"triple\") {\n      var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)));\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, line.anchor, line.head);\n      else\n        ourRange = line;\n    } else {\n      ourRange = extendRange(doc, ourRange, start);\n    }\n\n    if (!addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == \"single\" && !e.shiftKey) {\n      setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) return;\n      lastPos = pos;\n\n      if (type == \"rect\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n          else if (text.length > leftPos)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n        }\n        if (!ranges.length) ranges.push(new Range(start, start));\n        setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var anchor = oldRange.anchor, head = pos;\n        if (type != \"single\") {\n          if (type == \"double\")\n            var range = cm.findWordAt(pos);\n          else\n            var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)));\n          if (cmp(range.anchor, anchor) > 0) {\n            head = range.head;\n            anchor = minPos(oldRange.from(), range.anchor);\n          } else {\n            head = range.anchor;\n            anchor = maxPos(oldRange.to(), range.head);\n          }\n        }\n        var ranges = startSel.ranges.slice(0);\n        ranges[ourIndex] = new Range(clipPos(doc, anchor), head);\n        setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, type == \"rect\");\n      if (!cur) return;\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) setTimeout(operation(cm, function() {\n          if (counter != curCount) return;\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50);\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      e_preventDefault(e);\n      display.input.focus();\n      off(document, \"mousemove\", move);\n      off(document, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function(e) {\n      if (!e_button(e)) done(e);\n      else extend(e);\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(document, \"mousemove\", move);\n    on(document, \"mouseup\", up);\n  }\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    try { var mX = e.clientX, mY = e.clientY; }\n    catch(e) { return false; }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false;\n    if (prevent) e_preventDefault(e);\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e);\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.options.gutters.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.options.gutters[i];\n        signal(cm, type, cm, line, gutter, e);\n        return e_defaultPrevented(e);\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true);\n  }\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      return;\n    e_preventDefault(e);\n    if (ie) lastDrop = +new Date;\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) return;\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var loadFile = function(file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n          return;\n\n        var reader = new FileReader;\n        reader.onload = operation(cm, function() {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) content = \"\";\n          text[i] = content;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n          }\n        });\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) loadFile(files[i], i);\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function() {cm.display.input.focus();}, 20);\n        return;\n      }\n      try {\n        var text = e.dataTransfer.getData(\"Text\");\n        if (text) {\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            var selected = cm.listSelections();\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) for (var i = 0; i < selected.length; ++i)\n            replaceRange(cm.doc, \"\", selected[i].anchor, selected[i].head, \"drag\");\n          cm.replaceSelection(text, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\"\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) img.parentNode.removeChild(img);\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) return;\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // SCROLL EVENTS\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function setScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) return;\n    cm.doc.scrollTop = val;\n    if (!gecko) updateDisplaySimple(cm, {top: val});\n    if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (gecko) updateDisplaySimple(cm);\n    startWorker(cm, 100);\n  }\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller) {\n    if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;\n    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) wheelPixelsPerUnit = -.53;\n  else if (gecko) wheelPixelsPerUnit = 15;\n  else if (chrome) wheelPixelsPerUnit = -.7;\n  else if (safari) wheelPixelsPerUnit = -1/3;\n\n  var wheelEventDelta = function(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;\n    else if (dy == null) dy = e.wheelDelta;\n    return {x: dx, y: dy};\n  };\n  CodeMirror.wheelEventPixels = function(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta;\n  };\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) return;\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer;\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));\n      setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        e_preventDefault(e);\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return;\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) top = Math.max(0, top + pixels - 50);\n      else bot = Math.min(cm.doc.height, bot + pixels + 50);\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function() {\n          if (display.wheelStartX == null) return;\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) return;\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // KEY EVENTS\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) return false;\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) cm.state.suppressEdits = true;\n      if (dropShift) cm.display.shift = false;\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done;\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) return result;\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm);\n  }\n\n  var stopSeq = new Delayed;\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) return \"handled\";\n      stopSeq.set(50, function() {\n        if (cm.state.keySeq == seq) {\n          cm.state.keySeq = null;\n          cm.display.input.reset();\n        }\n      });\n      name = seq + \" \" + name;\n    }\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      cm.state.keySeq = name;\n    if (result == \"handled\")\n      signalLater(cm, \"keyHandled\", cm, name, e);\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    if (seq && !result && /\\'$/.test(name)) {\n      e_preventDefault(e);\n      return true;\n    }\n    return !!result;\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) return false;\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function(b) {return doHandleBinding(cm, b, true);})\n          || dispatchKey(cm, name, e, function(b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 return doHandleBinding(cm, b);\n             });\n    } else {\n      return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); });\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e,\n                       function(b) { return doHandleBinding(cm, b, true); });\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) return;\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false;\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        cm.replaceSelection(\"\", null, \"cut\");\n    }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      showCrossHair(cm);\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) this.doc.sel.shift = false;\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return;\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return;\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    if (handleCharBinding(cm, e, ch)) return;\n    cm.display.input.onKeyPress(e);\n  }\n\n  // FOCUS/BLUR EVENTS\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function() {\n      if (cm.state.delayingBlurEvent) {\n        cm.state.delayingBlurEvent = false;\n        onBlur(cm);\n      }\n    }, 100);\n  }\n\n  function onFocus(cm) {\n    if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false;\n\n    if (cm.options.readOnly == \"nocursor\") return;\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm) {\n    if (cm.state.delayingBlurEvent) return;\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150);\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return;\n    if (signalDOMEvent(cm, e, \"contextmenu\")) return;\n    cm.display.input.onContextMenu(e);\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) return false;\n    return gutterEvent(cm, e, \"gutterContextMenu\", false);\n  }\n\n  // UPDATING\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  var changeEnd = CodeMirror.changeEnd = function(change) {\n    if (!change.text) return change.to;\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n  };\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) return pos;\n    if (cmp(pos, change.to) <= 0) return changeEnd(change);\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch;\n    return Pos(line, ch);\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(out, doc.sel.primIndex);\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      return Pos(nw.line, pos.ch - old.ch + nw.ch);\n    else\n      return Pos(nw.line + (pos.line - old.line), pos.ch);\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex);\n  }\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function() { this.canceled = true; }\n    };\n    if (update) obj.update = function(from, to, text, origin) {\n      if (from) this.from = clipPos(doc, from);\n      if (to) this.to = clipPos(doc, to);\n      if (text) this.text = text;\n      if (origin !== undefined) this.origin = origin;\n    };\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeChange\", doc.cm, obj);\n\n    if (obj.canceled) return null;\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n      if (doc.cm.state.suppressEdits) return;\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) return;\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text});\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) return;\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function(doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) return;\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    for (var i = 0; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        break;\n    }\n    if (i == source.length) return;\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return;\n        }\n        selAfter = event;\n      }\n      else break;\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    for (var i = event.changes.length - 1; i >= 0; --i) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return;\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)});\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function(doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) return;\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function(range) {\n      return new Range(Pos(range.anchor.line + distance, range.anchor.ch),\n                       Pos(range.head.line + distance, range.head.ch));\n    }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        regLineChange(doc.cm, l, \"gutter\");\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return;\n    }\n    if (change.from.line > doc.lastLine()) return;\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) selAfter = computeSelAfterChange(doc, change);\n    if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans);\n    else updateDoc(doc, change, spans);\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function(line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true;\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      signalCursorActivity(cm);\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function(line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) cm.curOp.updateMaxLine = true;\n    }\n\n    // Adjust frontier, schedule worker\n    doc.frontier = Math.min(doc.frontier, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      regChange(cm);\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      regLineChange(cm, from.line, \"text\");\n    else\n      regChange(cm, from.line, to.line + 1, lendiff);\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) signalLater(cm, \"change\", cm, obj);\n      if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    if (!to) to = from;\n    if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; }\n    if (typeof code == \"string\") code = doc.splitLines(code);\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, coords) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) return;\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (coords.top + box.top < 0) doScroll = true;\n    else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute; top: \" +\n                           (coords.top - display.viewOffset - paddingTop(cm.display)) + \"px; height: \" +\n                           (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + \"px; left: \" +\n                           coords.left + \"px; width: 2px;\");\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) margin = 0;\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false, coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),\n                                         Math.min(coords.top, endCoords.top) - margin,\n                                         Math.max(coords.left, endCoords.left),\n                                         Math.max(coords.bottom, endCoords.bottom) + margin);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        setScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;\n      }\n      if (!changed) break;\n    }\n    return coords;\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, x1, y1, x2, y2) {\n    var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);\n    if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);\n    if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, x1, y1, x2, y2) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (y1 < 0) y1 = 0;\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (y2 - y1 > screen) y2 = y1 + screen;\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;\n    if (y1 < screentop) {\n      result.scrollTop = atTop ? 0 : y1;\n    } else if (y2 > screentop + screen) {\n      var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);\n      if (newTop != screentop) result.scrollTop = newTop;\n    }\n\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n    var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n    var tooWide = x2 - x1 > screenw;\n    if (tooWide) x2 = x1 + screenw;\n    if (x1 < 10)\n      result.scrollLeft = 0;\n    else if (x1 < screenleft)\n      result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10));\n    else if (x2 > screenw + screenleft - 3)\n      result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw;\n    return result;\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollPos(cm, left, top) {\n    if (left != null || top != null) resolveScrollToPos(cm);\n    if (left != null)\n      cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left;\n    if (top != null)\n      cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor(), from = cur, to = cur;\n    if (!cm.options.lineWrapping) {\n      from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur;\n      to = Pos(cur.line, cur.ch + 1);\n    }\n    cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true};\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),\n                                    Math.min(from.top, to.top) - range.margin,\n                                    Math.max(from.right, to.right),\n                                    Math.max(from.bottom, to.bottom) + range.margin);\n      cm.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n    }\n  }\n\n  // API UTILITIES\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) how = \"add\";\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) how = \"prev\";\n      else state = getStateBefore(cm, n);\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) line.stateAfter = null;\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) return;\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);\n      else indentation = 0;\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";}\n    if (pos < indentation) indentString += spaceStr(indentation - pos);\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true;\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i = 0; i < doc.sel.ranges.length; i++) {\n        var range = doc.sel.ranges[i];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i, new Range(pos, pos));\n          break;\n        }\n      }\n    }\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") line = getLine(doc, clipLine(doc, handle));\n    else no = lineNo(handle);\n    if (no == null) return null;\n    if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType);\n    return line;\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break;\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function() {\n      for (var i = kill.length - 1; i >= 0; i--)\n        replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n      ensureCursorVisible(cm);\n    });\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"char\", \"column\" (like char, but doesn't\n  // cross line boundaries), \"word\" (across next word), or \"group\" (to\n  // the start of next group of word or non-word-non-whitespace\n  // chars). The visually param controls whether, in right-to-left\n  // text, direction 1 means to move towards the next index in the\n  // string, or towards the character to the right of the current\n  // position. The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var line = pos.line, ch = pos.ch, origDir = dir;\n    var lineObj = getLine(doc, line);\n    function findNextLine() {\n      var l = line + dir;\n      if (l < doc.first || l >= doc.first + doc.size) return false\n      line = l;\n      return lineObj = getLine(doc, l);\n    }\n    function moveOnce(boundToLine) {\n      var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);\n      if (next == null) {\n        if (!boundToLine && findNextLine()) {\n          if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);\n          else ch = dir < 0 ? lineObj.text.length : 0;\n        } else return false\n      } else ch = next;\n      return true;\n    }\n\n    if (unit == \"char\") {\n      moveOnce()\n    } else if (unit == \"column\") {\n      moveOnce(true)\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) break;\n        var cur = lineObj.text.charAt(ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) type = \"s\";\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce();}\n          break;\n        }\n\n        if (type) sawType = type;\n        if (dir > 0 && !moveOnce(!first)) break;\n      }\n    }\n    var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true);\n    if (!cmp(pos, result)) result.hitSide = true;\n    return result;\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    for (;;) {\n      var target = coordsChar(cm, x, y);\n      if (!target.outside) break;\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }\n      y += dir * 5;\n    }\n    return target;\n  }\n\n  // EDITOR METHODS\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  CodeMirror.prototype = {\n    constructor: CodeMirror,\n    focus: function(){window.focus(); this.display.input.focus();},\n\n    setOption: function(option, value) {\n      var options = this.options, old = options[option];\n      if (options[option] == value && option != \"mode\") return;\n      options[option] = value;\n      if (optionHandlers.hasOwnProperty(option))\n        operation(this, optionHandlers[option])(this, value, old);\n    },\n\n    getOption: function(option) {return this.options[option];},\n    getDoc: function() {return this.doc;},\n\n    addKeyMap: function(map, bottom) {\n      this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n    },\n    removeKeyMap: function(map) {\n      var maps = this.state.keyMaps;\n      for (var i = 0; i < maps.length; ++i)\n        if (maps[i] == map || maps[i].name == map) {\n          maps.splice(i, 1);\n          return true;\n        }\n    },\n\n    addOverlay: methodOp(function(spec, options) {\n      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n      if (mode.startState) throw new Error(\"Overlays may not be stateful.\");\n      this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});\n      this.state.modeGen++;\n      regChange(this);\n    }),\n    removeOverlay: methodOp(function(spec) {\n      var overlays = this.state.overlays;\n      for (var i = 0; i < overlays.length; ++i) {\n        var cur = overlays[i].modeSpec;\n        if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n          overlays.splice(i, 1);\n          this.state.modeGen++;\n          regChange(this);\n          return;\n        }\n      }\n    }),\n\n    indentLine: methodOp(function(n, dir, aggressive) {\n      if (typeof dir != \"string\" && typeof dir != \"number\") {\n        if (dir == null) dir = this.options.smartIndent ? \"smart\" : \"prev\";\n        else dir = dir ? \"add\" : \"subtract\";\n      }\n      if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);\n    }),\n    indentSelection: methodOp(function(how) {\n      var ranges = this.doc.sel.ranges, end = -1;\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (!range.empty()) {\n          var from = range.from(), to = range.to();\n          var start = Math.max(end, from.line);\n          end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n          for (var j = start; j < end; ++j)\n            indentLine(this, j, how);\n          var newRanges = this.doc.sel.ranges;\n          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n            replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n        } else if (range.head.line > end) {\n          indentLine(this, range.head.line, how, true);\n          end = range.head.line;\n          if (i == this.doc.sel.primIndex) ensureCursorVisible(this);\n        }\n      }\n    }),\n\n    // Fetch the parser token for a given character. Useful for hacks\n    // that want to inspect the mode state (say, for completion).\n    getTokenAt: function(pos, precise) {\n      return takeToken(this, pos, precise);\n    },\n\n    getLineTokens: function(line, precise) {\n      return takeToken(this, Pos(line), precise, true);\n    },\n\n    getTokenTypeAt: function(pos) {\n      pos = clipPos(this.doc, pos);\n      var styles = getLineStyles(this, getLine(this.doc, pos.line));\n      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n      var type;\n      if (ch == 0) type = styles[2];\n      else for (;;) {\n        var mid = (before + after) >> 1;\n        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;\n        else if (styles[mid * 2 + 1] < ch) before = mid + 1;\n        else { type = styles[mid * 2 + 2]; break; }\n      }\n      var cut = type ? type.indexOf(\"cm-overlay \") : -1;\n      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n    },\n\n    getModeAt: function(pos) {\n      var mode = this.doc.mode;\n      if (!mode.innerMode) return mode;\n      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n    },\n\n    getHelper: function(pos, type) {\n      return this.getHelpers(pos, type)[0];\n    },\n\n    getHelpers: function(pos, type) {\n      var found = [];\n      if (!helpers.hasOwnProperty(type)) return found;\n      var help = helpers[type], mode = this.getModeAt(pos);\n      if (typeof mode[type] == \"string\") {\n        if (help[mode[type]]) found.push(help[mode[type]]);\n      } else if (mode[type]) {\n        for (var i = 0; i < mode[type].length; i++) {\n          var val = help[mode[type][i]];\n          if (val) found.push(val);\n        }\n      } else if (mode.helperType && help[mode.helperType]) {\n        found.push(help[mode.helperType]);\n      } else if (help[mode.name]) {\n        found.push(help[mode.name]);\n      }\n      for (var i = 0; i < help._global.length; i++) {\n        var cur = help._global[i];\n        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n          found.push(cur.val);\n      }\n      return found;\n    },\n\n    getStateAfter: function(line, precise) {\n      var doc = this.doc;\n      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n      return getStateBefore(this, line + 1, precise);\n    },\n\n    cursorCoords: function(start, mode) {\n      var pos, range = this.doc.sel.primary();\n      if (start == null) pos = range.head;\n      else if (typeof start == \"object\") pos = clipPos(this.doc, start);\n      else pos = start ? range.from() : range.to();\n      return cursorCoords(this, pos, mode || \"page\");\n    },\n\n    charCoords: function(pos, mode) {\n      return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n    },\n\n    coordsChar: function(coords, mode) {\n      coords = fromCoordSystem(this, coords, mode || \"page\");\n      return coordsChar(this, coords.left, coords.top);\n    },\n\n    lineAtHeight: function(height, mode) {\n      height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n      return lineAtHeight(this.doc, height + this.display.viewOffset);\n    },\n    heightAtLine: function(line, mode) {\n      var end = false, lineObj;\n      if (typeof line == \"number\") {\n        var last = this.doc.first + this.doc.size - 1;\n        if (line < this.doc.first) line = this.doc.first;\n        else if (line > last) { line = last; end = true; }\n        lineObj = getLine(this.doc, line);\n      } else {\n        lineObj = line;\n      }\n      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\").top +\n        (end ? this.doc.height - heightAtLine(lineObj) : 0);\n    },\n\n    defaultTextHeight: function() { return textHeight(this.display); },\n    defaultCharWidth: function() { return charWidth(this.display); },\n\n    setGutterMarker: methodOp(function(line, gutterID, value) {\n      return changeLine(this.doc, line, \"gutter\", function(line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) line.gutterMarkers = null;\n        return true;\n      });\n    }),\n\n    clearGutter: methodOp(function(gutterID) {\n      var cm = this, doc = cm.doc, i = doc.first;\n      doc.iter(function(line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          line.gutterMarkers[gutterID] = null;\n          regLineChange(cm, i, \"gutter\");\n          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;\n        }\n        ++i;\n      });\n    }),\n\n    lineInfo: function(line) {\n      if (typeof line == \"number\") {\n        if (!isLine(this.doc, line)) return null;\n        var n = line;\n        line = getLine(this.doc, line);\n        if (!line) return null;\n      } else {\n        var n = lineNo(line);\n        if (n == null) return null;\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets};\n    },\n\n    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};},\n\n    addWidget: function(pos, node, scroll, vert, horiz) {\n      var display = this.display;\n      pos = cursorCoords(this, clipPos(this.doc, pos));\n      var top = pos.bottom, left = pos.left;\n      node.style.position = \"absolute\";\n      node.setAttribute(\"cm-ignore-events\", \"true\");\n      this.display.input.setUneditable(node);\n      display.sizer.appendChild(node);\n      if (vert == \"over\") {\n        top = pos.top;\n      } else if (vert == \"above\" || vert == \"near\") {\n        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n        // Default to positioning above (if specified and possible); otherwise default to positioning below\n        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n          top = pos.top - node.offsetHeight;\n        else if (pos.bottom + node.offsetHeight <= vspace)\n          top = pos.bottom;\n        if (left + node.offsetWidth > hspace)\n          left = hspace - node.offsetWidth;\n      }\n      node.style.top = top + \"px\";\n      node.style.left = node.style.right = \"\";\n      if (horiz == \"right\") {\n        left = display.sizer.clientWidth - node.offsetWidth;\n        node.style.right = \"0px\";\n      } else {\n        if (horiz == \"left\") left = 0;\n        else if (horiz == \"middle\") left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n        node.style.left = left + \"px\";\n      }\n      if (scroll)\n        scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);\n    },\n\n    triggerOnKeyDown: methodOp(onKeyDown),\n    triggerOnKeyPress: methodOp(onKeyPress),\n    triggerOnKeyUp: onKeyUp,\n\n    execCommand: function(cmd) {\n      if (commands.hasOwnProperty(cmd))\n        return commands[cmd].call(null, this);\n    },\n\n    triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n    findPosH: function(from, amount, unit, visually) {\n      var dir = 1;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        cur = findPosH(this.doc, cur, dir, unit, visually);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveH: methodOp(function(dir, unit) {\n      var cm = this;\n      cm.extendSelectionsBy(function(range) {\n        if (cm.display.shift || cm.doc.extend || range.empty())\n          return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually);\n        else\n          return dir < 0 ? range.from() : range.to();\n      }, sel_move);\n    }),\n\n    deleteH: methodOp(function(dir, unit) {\n      var sel = this.doc.sel, doc = this.doc;\n      if (sel.somethingSelected())\n        doc.replaceSelection(\"\", null, \"+delete\");\n      else\n        deleteNearSelection(this, function(range) {\n          var other = findPosH(doc, range.head, dir, unit, false);\n          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other};\n        });\n    }),\n\n    findPosV: function(from, amount, unit, goalColumn) {\n      var dir = 1, x = goalColumn;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        var coords = cursorCoords(this, cur, \"div\");\n        if (x == null) x = coords.left;\n        else coords.left = x;\n        cur = findPosV(this, coords, dir, unit);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveV: methodOp(function(dir, unit) {\n      var cm = this, doc = this.doc, goals = [];\n      var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected();\n      doc.extendSelectionsBy(function(range) {\n        if (collapse)\n          return dir < 0 ? range.from() : range.to();\n        var headPos = cursorCoords(cm, range.head, \"div\");\n        if (range.goalColumn != null) headPos.left = range.goalColumn;\n        goals.push(headPos.left);\n        var pos = findPosV(cm, headPos, dir, unit);\n        if (unit == \"page\" && range == doc.sel.primary())\n          addToScrollPos(cm, null, charCoords(cm, pos, \"div\").top - headPos.top);\n        return pos;\n      }, sel_move);\n      if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++)\n        doc.sel.ranges[i].goalColumn = goals[i];\n    }),\n\n    // Find the word at the given position (as returned by coordsChar).\n    findWordAt: function(pos) {\n      var doc = this.doc, line = getLine(doc, pos.line).text;\n      var start = pos.ch, end = pos.ch;\n      if (line) {\n        var helper = this.getHelper(pos, \"wordChars\");\n        if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;\n        var startChar = line.charAt(start);\n        var check = isWordChar(startChar, helper)\n          ? function(ch) { return isWordChar(ch, helper); }\n          : /\\s/.test(startChar) ? function(ch) {return /\\s/.test(ch);}\n          : function(ch) {return !/\\s/.test(ch) && !isWordChar(ch);};\n        while (start > 0 && check(line.charAt(start - 1))) --start;\n        while (end < line.length && check(line.charAt(end))) ++end;\n      }\n      return new Range(Pos(pos.line, start), Pos(pos.line, end));\n    },\n\n    toggleOverwrite: function(value) {\n      if (value != null && value == this.state.overwrite) return;\n      if (this.state.overwrite = !this.state.overwrite)\n        addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n      else\n        rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n\n      signal(this, \"overwriteToggle\", this, this.state.overwrite);\n    },\n    hasFocus: function() { return this.display.input.getField() == activeElt(); },\n    isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); },\n\n    scrollTo: methodOp(function(x, y) {\n      if (x != null || y != null) resolveScrollToPos(this);\n      if (x != null) this.curOp.scrollLeft = x;\n      if (y != null) this.curOp.scrollTop = y;\n    }),\n    getScrollInfo: function() {\n      var scroller = this.display.scroller;\n      return {left: scroller.scrollLeft, top: scroller.scrollTop,\n              height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n              width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n              clientHeight: displayHeight(this), clientWidth: displayWidth(this)};\n    },\n\n    scrollIntoView: methodOp(function(range, margin) {\n      if (range == null) {\n        range = {from: this.doc.sel.primary().head, to: null};\n        if (margin == null) margin = this.options.cursorScrollMargin;\n      } else if (typeof range == \"number\") {\n        range = {from: Pos(range, 0), to: null};\n      } else if (range.from == null) {\n        range = {from: range, to: null};\n      }\n      if (!range.to) range.to = range.from;\n      range.margin = margin || 0;\n\n      if (range.from.line != null) {\n        resolveScrollToPos(this);\n        this.curOp.scrollToPos = range;\n      } else {\n        var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left),\n                                      Math.min(range.from.top, range.to.top) - range.margin,\n                                      Math.max(range.from.right, range.to.right),\n                                      Math.max(range.from.bottom, range.to.bottom) + range.margin);\n        this.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n      }\n    }),\n\n    setSize: methodOp(function(width, height) {\n      var cm = this;\n      function interpret(val) {\n        return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n      }\n      if (width != null) cm.display.wrapper.style.width = interpret(width);\n      if (height != null) cm.display.wrapper.style.height = interpret(height);\n      if (cm.options.lineWrapping) clearLineMeasurementCache(this);\n      var lineNo = cm.display.viewFrom;\n      cm.doc.iter(lineNo, cm.display.viewTo, function(line) {\n        if (line.widgets) for (var i = 0; i < line.widgets.length; i++)\n          if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, \"widget\"); break; }\n        ++lineNo;\n      });\n      cm.curOp.forceUpdate = true;\n      signal(cm, \"refresh\", this);\n    }),\n\n    operation: function(f){return runInOp(this, f);},\n\n    refresh: methodOp(function() {\n      var oldHeight = this.display.cachedTextHeight;\n      regChange(this);\n      this.curOp.forceUpdate = true;\n      clearCaches(this);\n      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);\n      updateGutterSpace(this);\n      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n        estimateLineHeights(this);\n      signal(this, \"refresh\", this);\n    }),\n\n    swapDoc: methodOp(function(doc) {\n      var old = this.doc;\n      old.cm = null;\n      attachDoc(this, doc);\n      clearCaches(this);\n      this.display.input.reset();\n      this.scrollTo(doc.scrollLeft, doc.scrollTop);\n      this.curOp.forceScroll = true;\n      signalLater(this, \"swapDoc\", this, old);\n      return old;\n    }),\n\n    getInputField: function(){return this.display.input.getField();},\n    getWrapperElement: function(){return this.display.wrapper;},\n    getScrollerElement: function(){return this.display.scroller;},\n    getGutterElement: function(){return this.display.gutters;}\n  };\n  eventMixin(CodeMirror);\n\n  // OPTION DEFAULTS\n\n  // The default configuration options.\n  var defaults = CodeMirror.defaults = {};\n  // Functions to run when options are changed.\n  var optionHandlers = CodeMirror.optionHandlers = {};\n\n  function option(name, deflt, handle, notOnInit) {\n    CodeMirror.defaults[name] = deflt;\n    if (handle) optionHandlers[name] =\n      notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;\n  }\n\n  // Passed to option handlers when there is no old value.\n  var Init = CodeMirror.Init = {toString: function(){return \"CodeMirror.Init\";}};\n\n  // These two are, on init, called from the constructor because they\n  // have to be initialized before the editor can start at all.\n  option(\"value\", \"\", function(cm, val) {\n    cm.setValue(val);\n  }, true);\n  option(\"mode\", null, function(cm, val) {\n    cm.doc.modeOption = val;\n    loadMode(cm);\n  }, true);\n\n  option(\"indentUnit\", 2, loadMode, true);\n  option(\"indentWithTabs\", false);\n  option(\"smartIndent\", true);\n  option(\"tabSize\", 4, function(cm) {\n    resetModeState(cm);\n    clearCaches(cm);\n    regChange(cm);\n  }, true);\n  option(\"lineSeparator\", null, function(cm, val) {\n    cm.doc.lineSep = val;\n    if (!val) return;\n    var newBreaks = [], lineNo = cm.doc.first;\n    cm.doc.iter(function(line) {\n      for (var pos = 0;;) {\n        var found = line.text.indexOf(val, pos);\n        if (found == -1) break;\n        pos = found + val.length;\n        newBreaks.push(Pos(lineNo, found));\n      }\n      lineNo++;\n    });\n    for (var i = newBreaks.length - 1; i >= 0; i--)\n      replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length))\n  });\n  option(\"specialChars\", /[\\u0000-\\u001f\\u007f\\u00ad\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function(cm, val, old) {\n    cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n    if (old != CodeMirror.Init) cm.refresh();\n  });\n  option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);\n  option(\"electricChars\", true);\n  option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function() {\n    throw new Error(\"inputStyle can not (yet) be changed in a running editor\"); // FIXME\n  }, true);\n  option(\"rtlMoveVisually\", !windows);\n  option(\"wholeLineUpdateBefore\", true);\n\n  option(\"theme\", \"default\", function(cm) {\n    themeChanged(cm);\n    guttersChanged(cm);\n  }, true);\n  option(\"keyMap\", \"default\", function(cm, val, old) {\n    var next = getKeyMap(val);\n    var prev = old != CodeMirror.Init && getKeyMap(old);\n    if (prev && prev.detach) prev.detach(cm, next);\n    if (next.attach) next.attach(cm, prev || null);\n  });\n  option(\"extraKeys\", null);\n\n  option(\"lineWrapping\", false, wrappingChanged, true);\n  option(\"gutters\", [], function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"fixedGutter\", true, function(cm, val) {\n    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n    cm.refresh();\n  }, true);\n  option(\"coverGutterNextToScrollbar\", false, function(cm) {updateScrollbars(cm);}, true);\n  option(\"scrollbarStyle\", \"native\", function(cm) {\n    initScrollbars(cm);\n    updateScrollbars(cm);\n    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n  }, true);\n  option(\"lineNumbers\", false, function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"firstLineNumber\", 1, guttersChanged, true);\n  option(\"lineNumberFormatter\", function(integer) {return integer;}, guttersChanged, true);\n  option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n  option(\"resetSelectionOnContextMenu\", true);\n  option(\"lineWiseCopyCut\", true);\n\n  option(\"readOnly\", false, function(cm, val) {\n    if (val == \"nocursor\") {\n      onBlur(cm);\n      cm.display.input.blur();\n      cm.display.disabled = true;\n    } else {\n      cm.display.disabled = false;\n    }\n    cm.display.input.readOnlyChanged(val)\n  });\n  option(\"disableInput\", false, function(cm, val) {if (!val) cm.display.input.reset();}, true);\n  option(\"dragDrop\", true, dragDropChanged);\n  option(\"allowDropFileTypes\", null);\n\n  option(\"cursorBlinkRate\", 530);\n  option(\"cursorScrollMargin\", 0);\n  option(\"cursorHeight\", 1, updateSelection, true);\n  option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n  option(\"workTime\", 100);\n  option(\"workDelay\", 100);\n  option(\"flattenSpans\", true, resetModeState, true);\n  option(\"addModeClass\", false, resetModeState, true);\n  option(\"pollInterval\", 100);\n  option(\"undoDepth\", 200, function(cm, val){cm.doc.history.undoDepth = val;});\n  option(\"historyEventDelay\", 1250);\n  option(\"viewportMargin\", 10, function(cm){cm.refresh();}, true);\n  option(\"maxHighlightLength\", 10000, resetModeState, true);\n  option(\"moveInputWithCursor\", true, function(cm, val) {\n    if (!val) cm.display.input.resetPosition();\n  });\n\n  option(\"tabindex\", null, function(cm, val) {\n    cm.display.input.getField().tabIndex = val || \"\";\n  });\n  option(\"autofocus\", null);\n\n  // MODE DEFINITION AND QUERYING\n\n  // Known modes, by name and by MIME\n  var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name, mode) {\n    if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n    if (arguments.length > 2)\n      mode.dependencies = Array.prototype.slice.call(arguments, 2);\n    modes[name] = mode;\n  };\n\n  CodeMirror.defineMIME = function(mime, spec) {\n    mimeModes[mime] = spec;\n  };\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  CodeMirror.resolveMode = function(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") found = {name: found};\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return CodeMirror.resolveMode(\"application/xml\");\n    }\n    if (typeof spec == \"string\") return {name: spec};\n    else return spec || {name: \"null\"};\n  };\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  CodeMirror.getMode = function(options, spec) {\n    var spec = CodeMirror.resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) return CodeMirror.getMode(options, \"text/plain\");\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) continue;\n        if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop];\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) modeObj.helperType = spec.helperType;\n    if (spec.modeProps) for (var prop in spec.modeProps)\n      modeObj[prop] = spec.modeProps[prop];\n\n    return modeObj;\n  };\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function() {\n    return {token: function(stream) {stream.skipToEnd();}};\n  });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = CodeMirror.modeExtensions = {};\n  CodeMirror.extendMode = function(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  };\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function(name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function(name, func) {\n    Doc.prototype[name] = func;\n  };\n  CodeMirror.defineOption = option;\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function(f) {initHooks.push(f);};\n\n  var helpers = CodeMirror.helpers = {};\n  CodeMirror.registerHelper = function(type, name, value) {\n    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};\n    helpers[type][name] = value;\n  };\n  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n    CodeMirror.registerHelper(type, name, value);\n    helpers[type]._global.push({pred: predicate, val: value});\n  };\n\n  // MODE STATE HANDLING\n\n  // Utility functions for working with state. Exported because nested\n  // modes need to do this for their inner modes.\n\n  var copyState = CodeMirror.copyState = function(mode, state) {\n    if (state === true) return state;\n    if (mode.copyState) return mode.copyState(state);\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) val = val.concat([]);\n      nstate[n] = val;\n    }\n    return nstate;\n  };\n\n  var startState = CodeMirror.startState = function(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true;\n  };\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  CodeMirror.innerMode = function(mode, state) {\n    while (mode.innerMode) {\n      var info = mode.innerMode(state);\n      if (!info || info.mode == mode) break;\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state};\n  };\n\n  // STANDARD COMMANDS\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = CodeMirror.commands = {\n    selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);},\n    singleSelection: function(cm) {\n      cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n    },\n    killLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        if (range.empty()) {\n          var len = getLine(cm.doc, range.head.line).text.length;\n          if (range.head.ch == len && range.head.line < cm.lastLine())\n            return {from: range.head, to: Pos(range.head.line + 1, 0)};\n          else\n            return {from: range.head, to: Pos(range.head.line, len)};\n        } else {\n          return {from: range.from(), to: range.to()};\n        }\n      });\n    },\n    deleteLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0),\n                to: clipPos(cm.doc, Pos(range.to().line + 1, 0))};\n      });\n    },\n    delLineLeft: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0), to: range.from()};\n      });\n    },\n    delWrappedLineLeft: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n        return {from: leftPos, to: range.from()};\n      });\n    },\n    delWrappedLineRight: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n        return {from: range.from(), to: rightPos };\n      });\n    },\n    undo: function(cm) {cm.undo();},\n    redo: function(cm) {cm.redo();},\n    undoSelection: function(cm) {cm.undoSelection();},\n    redoSelection: function(cm) {cm.redoSelection();},\n    goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},\n    goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},\n    goLineStart: function(cm) {\n      cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },\n                            {origin: \"+move\", bias: 1});\n    },\n    goLineStartSmart: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        return lineStartSmart(cm, range.head);\n      }, {origin: \"+move\", bias: 1});\n    },\n    goLineEnd: function(cm) {\n      cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },\n                            {origin: \"+move\", bias: -1});\n    },\n    goLineRight: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineLeft: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: 0, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineLeftSmart: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n        if (pos.ch < cm.getLine(pos.line).search(/\\S/)) return lineStartSmart(cm, range.head);\n        return pos;\n      }, sel_move);\n    },\n    goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n    goLineDown: function(cm) {cm.moveV(1, \"line\");},\n    goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n    goPageDown: function(cm) {cm.moveV(1, \"page\");},\n    goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n    goCharRight: function(cm) {cm.moveH(1, \"char\");},\n    goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n    goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n    goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n    goGroupRight: function(cm) {cm.moveH(1, \"group\");},\n    goGroupLeft: function(cm) {cm.moveH(-1, \"group\");},\n    goWordRight: function(cm) {cm.moveH(1, \"word\");},\n    delCharBefore: function(cm) {cm.deleteH(-1, \"char\");},\n    delCharAfter: function(cm) {cm.deleteH(1, \"char\");},\n    delWordBefore: function(cm) {cm.deleteH(-1, \"word\");},\n    delWordAfter: function(cm) {cm.deleteH(1, \"word\");},\n    delGroupBefore: function(cm) {cm.deleteH(-1, \"group\");},\n    delGroupAfter: function(cm) {cm.deleteH(1, \"group\");},\n    indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n    indentMore: function(cm) {cm.indentSelection(\"add\");},\n    indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n    insertTab: function(cm) {cm.replaceSelection(\"\\t\");},\n    insertSoftTab: function(cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function(cm) {\n      if (cm.somethingSelected()) cm.indentSelection(\"add\");\n      else cm.execCommand(\"insertTab\");\n    },\n    transposeChars: function(cm) {\n      runInOp(cm, function() {\n        var ranges = cm.listSelections(), newSel = [];\n        for (var i = 0; i < ranges.length; i++) {\n          var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n          if (line) {\n            if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1);\n            if (cur.ch > 0) {\n              cur = new Pos(cur.line, cur.ch + 1);\n              cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                              Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n            } else if (cur.line > cm.doc.first) {\n              var prev = getLine(cm.doc, cur.line - 1).text;\n              if (prev)\n                cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                                prev.charAt(prev.length - 1),\n                                Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), \"+transpose\");\n            }\n          }\n          newSel.push(new Range(cur, cur));\n        }\n        cm.setSelections(newSel);\n      });\n    },\n    newlineAndIndent: function(cm) {\n      runInOp(cm, function() {\n        var len = cm.listSelections().length;\n        for (var i = 0; i < len; i++) {\n          var range = cm.listSelections()[i];\n          cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, \"+input\");\n          cm.indentLine(range.from().line + 1, null, true);\n        }\n        ensureCursorVisible(cm);\n      });\n    },\n    openLine: function(cm) {cm.replaceSelection(\"\\n\", \"start\")},\n    toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n  };\n\n\n  // STANDARD KEYMAPS\n\n  var keyMap = CodeMirror.keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    fallthrough: \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    fallthrough: [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/), name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) cmd = true;\n      else if (/^a(lt)?$/i.test(mod)) alt = true;\n      else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;\n      else if (/^s(hift)$/i.test(mod)) shift = true;\n      else throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt) name = \"Alt-\" + name;\n    if (ctrl) name = \"Ctrl-\" + name;\n    if (cmd) name = \"Cmd-\" + name;\n    if (shift) name = \"Shift-\" + name;\n    return name;\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  CodeMirror.normalizeKeyMap = function(keymap) {\n    var copy = {};\n    for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue;\n      if (value == \"...\") { delete keymap[keyname]; continue; }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val, name;\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) copy[name] = val;\n        else if (prev != val) throw new Error(\"Inconsistent bindings for \" + name);\n      }\n      delete keymap[keyname];\n    }\n    for (var prop in copy) keymap[prop] = copy[prop];\n    return keymap;\n  };\n\n  var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) return \"nothing\";\n    if (found === \"...\") return \"multi\";\n    if (found != null && handle(found)) return \"handled\";\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        return lookupKey(key, map.fallthrough, handle, context);\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) return result;\n      }\n    }\n  };\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  var isModifierKey = CodeMirror.isModifierKey = function(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n  };\n\n  // Look up the name of a key as indicated by an event object.\n  var keyName = CodeMirror.keyName = function(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) return false;\n    var base = keyNames[event.keyCode], name = base;\n    if (name == null || event.altGraphKey) return false;\n    if (event.altKey && base != \"Alt\") name = \"Alt-\" + name;\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") name = \"Ctrl-\" + name;\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") name = \"Cmd-\" + name;\n    if (!noShift && event.shiftKey && base != \"Shift\") name = \"Shift-\" + name;\n    return name;\n  };\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val;\n  }\n\n  // FROMTEXTAREA\n\n  CodeMirror.fromTextArea = function(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      options.tabindex = textarea.tabIndex;\n    if (!options.placeholder && textarea.placeholder)\n      options.placeholder = textarea.placeholder;\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form, realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function() {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function(cm) {\n      cm.save = save;\n      cm.getTextArea = function() { return textarea; };\n      cm.toTextArea = function() {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (typeof textarea.form.submit == \"function\")\n            textarea.form.submit = realSubmit;\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function(node) {\n      textarea.parentNode.insertBefore(node, textarea.nextSibling);\n    }, options);\n    return cm;\n  };\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  };\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      if (this.lastColumnPos < this.start) {\n        this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n        this.lastColumnPos = this.start;\n      }\n      return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    indentation: function() {\n      return countColumn(this.string, null, this.tabSize) -\n        (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  var nextMarkerId = 0;\n\n  var TextMarker = CodeMirror.TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n  eventMixin(TextMarker);\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) startOperation(cm);\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) signalLater(this, \"clear\", found.from, found.to);\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) regLineChange(cm, lineNo(line), \"text\");\n      else if (cm) {\n        if (span.to != null) max = lineNo(line);\n        if (span.from != null) min = lineNo(line);\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        updateLineHeight(line, textHeight(cm.display));\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {\n      var visual = visualLine(this.lines[i]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    }\n\n    if (min != null && cm && this.collapsed) regChange(cm, min, max + 1);\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) reCheckSelection(cm.doc);\n    }\n    if (cm) signalLater(cm, \"markerCleared\", cm, this);\n    if (withOp) endOperation(cm);\n    if (this.parent) this.parent.clear();\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function(side, lineObj) {\n    if (side == null && this.type == \"bookmark\") side = 1;\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) return from;\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) return to;\n      }\n    }\n    return from && {from: from, to: to};\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function() {\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) return;\n    runInOp(cm, function() {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          updateLineHeight(line, line.height + dHeight);\n      }\n    });\n  };\n\n  TextMarker.prototype.attachLine = function(line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n    }\n    this.lines.push(line);\n  };\n  TextMarker.prototype.detachLine = function(line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) return markTextShared(doc, from, to, options, type);\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) copyObj(options, marker, false);\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      return marker;\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = elt(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n      if (options.insertLeft) marker.widgetNode.insertLeft = true;\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n      sawCollapsedSpans = true;\n    }\n\n    if (marker.addToHistory)\n      addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN);\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function(line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        updateMaxLine = true;\n      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {\n      if (lineIsHidden(doc, line)) updateLineHeight(line, 0);\n    });\n\n    if (marker.clearOnEnter) on(marker, \"beforeCursorEnter\", function() { marker.clear(); });\n\n    if (marker.readOnly) {\n      sawReadOnlySpans = true;\n      if (doc.history.done.length || doc.history.undone.length)\n        doc.clearHistory();\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) cm.curOp.updateMaxLine = true;\n      if (marker.collapsed)\n        regChange(cm, from.line, to.line + 1);\n      else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n        for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, \"text\");\n      if (marker.atomic) reCheckSelection(cm.doc);\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker;\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      markers[i].parent = this;\n  };\n  eventMixin(SharedTextMarker);\n\n  SharedTextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      this.markers[i].clear();\n    signalLater(this, \"clear\");\n  };\n  SharedTextMarker.prototype.find = function(side, lineObj) {\n    return this.primary.find(side, lineObj);\n  };\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function(doc) {\n      if (widget) options.widgetNode = widget.cloneNode(true);\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        if (doc.linked[i].isParent) return;\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary);\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),\n                         function(m) { return m.parent; });\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], linked = [marker.primary.doc];;\n      linkedDocs(marker.primary.doc, function(d) { linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    }\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) return span;\n    }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    for (var r, i = 0; i < spans.length; ++i)\n      if (spans[i] != span) (r || (r = [])).push(spans[i]);\n    return r;\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n        (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    }\n    return nw;\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n        (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    }\n    return nw;\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) return null;\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) return null;\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) span.to = startCh;\n          else if (sameLine) span.to = found.to == null ? null : found.to + offset;\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i = 0; i < last.length; ++i) {\n        var span = last[i];\n        if (span.to != null) span.to += offset;\n        if (span.from == null) {\n          var found = getMarkedSpanFor(first, span.marker);\n          if (!found) {\n            span.from = offset;\n            if (sameLine) (first || (first = [])).push(span);\n          }\n        } else {\n          span.from += offset;\n          if (sameLine) (first || (first = [])).push(span);\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) first = clearEmptySpans(first);\n    if (last && last != first) last = clearEmptySpans(last);\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        for (var i = 0; i < first.length; ++i)\n          if (first[i].to == null)\n            (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null));\n      for (var i = 0; i < gap; ++i)\n        newMarkers.push(gapMarkers);\n      newMarkers.push(last);\n    }\n    return newMarkers;\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        spans.splice(i--, 1);\n    }\n    if (!spans.length) return null;\n    return spans;\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) return stretched;\n    if (!stretched) return old;\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            if (oldCur[k].marker == span.marker) continue spans;\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old;\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function(line) {\n      if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          (markers || (markers = [])).push(mark);\n      }\n    });\n    if (!markers) return null;\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue;\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          newParts.push({from: p.from, to: m.from});\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          newParts.push({from: m.to, to: p.to});\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 1;\n      }\n    }\n    return parts;\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.detachLine(line);\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.attachLine(line);\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) return lenDiff;\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) return -fromCmp;\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) return toCmp;\n    return b.id - a.id;\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        found = sp.marker;\n    }\n    return found;\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        return true;\n    }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      line = merged.find(-1, true).line;\n    return line;\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      (lines || (lines = [])).push(line);\n    }\n    return lines;\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) return lineN;\n    return lineNo(vis);\n  }\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) return lineN;\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) return lineN;\n    while (merged = collapsedSpanAtEnd(line))\n      line = merged.find(1, true).line;\n    return lineNo(line) + 1;\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      if (sp.from == null) return true;\n      if (sp.marker.widgetNode) continue;\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        return true;\n    }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      return true;\n    for (var sp, i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) return true;\n    }\n  }\n\n  // LINE WIDGETS\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = CodeMirror.LineWidget = function(doc, node, options) {\n    if (options) for (var opt in options) if (options.hasOwnProperty(opt))\n      this[opt] = options[opt];\n    this.doc = doc;\n    this.node = node;\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      addToScrollPos(cm, null, diff);\n  }\n\n  LineWidget.prototype.clear = function() {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) return;\n    for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);\n    if (!ws.length) line.widgets = null;\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) runInOp(cm, function() {\n      adjustScrollWhenAboveVisible(cm, line, -height);\n      regLineChange(cm, no, \"widget\");\n    });\n  };\n  LineWidget.prototype.changed = function() {\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) return;\n    updateLineHeight(line, line.height + diff);\n    if (cm) runInOp(cm, function() {\n      cm.curOp.forceUpdate = true;\n      adjustScrollWhenAboveVisible(cm, line, diff);\n    });\n  };\n\n  function widgetHeight(widget) {\n    if (widget.height != null) return widget.height;\n    var cm = widget.doc.cm;\n    if (!cm) return 0;\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\";\n      if (widget.noHScroll)\n        parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\";\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight;\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) cm.display.alignWidgets = true;\n    changeLine(doc, handle, \"widget\", function(line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) widgets.push(widget);\n      else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) addToScrollPos(cm, null, widget.height);\n        cm.curOp.forceUpdate = true;\n      }\n      return true;\n    });\n    return widget;\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n  eventMixin(Line);\n  Line.prototype.lineNo = function() { return lineNo(this); };\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) line.stateAfter = null;\n    if (line.styles) line.styles = null;\n    if (line.order != null) line.order = null;\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) updateLineHeight(line, estHeight);\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) break;\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        output[prop] = lineClass[2];\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n        output[prop] += \" \" + lineClass[2];\n    }\n    return type;\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) return mode.blankLine(state);\n    if (!mode.innerMode) return;\n    var inner = CodeMirror.innerMode(mode, state);\n    if (inner.mode.blankLine) return inner.mode.blankLine(inner.state);\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode;\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) return style;\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n  }\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    function getObj(copy) {\n      return {start: stream.start, end: stream.pos,\n              string: stream.current(),\n              type: style || null,\n              state: copy ? copyState(doc.mode, state) : state};\n    }\n\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize), tokens;\n    if (asArray) tokens = [];\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, state);\n      if (asArray) tokens.push(getObj(true));\n    }\n    return asArray ? tokens : getObj();\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") extractLineClasses(callBlankLine(mode, state), lineClasses);\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) processLine(cm, text, state, stream.pos);\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) style = \"m-\" + (style ? mName + \" \" + style : mName);\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 50000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444 characters\n      var pos = Math.min(stream.pos, curStart + 50000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, state, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {\n      st.push(end, style);\n    }, lineClasses, forceToEnd);\n\n    // Run overlays, adjust style array.\n    for (var o = 0; o < cm.state.overlays.length; ++o) {\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      runMode(cm, line.text, overlay.mode, true, function(end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            st.splice(i, 1, end, st[i+1], i_end);\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) return;\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"cm-overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"cm-overlay \" + style;\n          }\n        }\n      }, lineClasses);\n    }\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null};\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var state = getStateBefore(cm, lineNo(line));\n      var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state);\n      line.stateAfter = state;\n      line.styles = result.styles;\n      if (result.classes) line.styleClasses = result.classes;\n      else if (line.styleClasses) line.styleClasses = null;\n      if (updateFrontier === cm.doc.frontier) cm.doc.frontier++;\n    }\n    return line.styles;\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, state, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") callBlankLine(mode, state);\n    while (!stream.eol()) {\n      readToken(mode, stream, state);\n      stream.start = stream.pos;\n    }\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) return null;\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = elt(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: elt(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: (ie || webkit) && cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order;\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))\n        builder.addToken = buildTokenBadBidi(builder.addToken, order);\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n        if (line.styleClasses.textClass)\n          builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n        (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n        (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        builder.content.className = \"cm-tab-wrap-hack\";\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n\n    return builder;\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token;\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, title, css) {\n    if (!text) return;\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      var content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) mustWrap = true;\n      builder.pos += text.length;\n    } else {\n      var content = document.createDocumentFragment(), pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) break;\n        pos += skipped + 1;\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          var txt = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt.setAttribute(\"role\", \"presentation\");\n          txt.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          var txt = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          var txt = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32\n    if (style || startStyle || endStyle || mustWrap || css) {\n      var fullStyle = style || \"\";\n      if (startStyle) fullStyle += startStyle;\n      if (endStyle) fullStyle += endStyle;\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (title) token.title = title;\n      return builder.content.appendChild(token);\n    }\n    builder.content.appendChild(content);\n  }\n\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) return text\n    var spaceBefore = trailingBefore, result = \"\"\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i)\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        ch = \"\\u00a0\"\n      result += ch\n      spaceBefore = ch == \" \"\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function(builder, text, style, startStyle, endStyle, title, css) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        for (var i = 0; i < order.length; i++) {\n          var part = order[i];\n          if (part.to > start && part.from <= start) break;\n        }\n        if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css);\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    };\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) builder.map.push(builder.pos, builder.pos + size, widget);\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        widget = builder.content.appendChild(document.createElement(\"span\"));\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i = 1; i < styles.length; i+=2)\n        builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options));\n      return;\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = title = css = \"\";\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) spanStyle += \" \" + m.className;\n            if (m.css) css = (css ? css + \";\" : \"\") + m.css;\n            if (m.startStyle && sp.from == pos) spanStartStyle += \" \" + m.startStyle;\n            if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to)\n            if (m.title && !title) title = m.title;\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              collapsed = sp;\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) for (var j = 0; j < endStyles.length; j += 2)\n          if (endStyles[j + 1] == nextChange) spanEndStyle += \" \" + endStyles[j]\n\n        if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j)\n          buildCollapsedSpan(builder, 0, foundBookmarks[j]);\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) return;\n          if (collapsed.to == pos) collapsed = false;\n        }\n      }\n      if (pos >= len) break;\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null;}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      for (var i = start, result = []; i < end; ++i)\n        result.push(new Line(text[i], spansFor(i), estimateHeight));\n      return result;\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) doc.remove(from.line, nlines);\n      if (added.length) doc.insert(from.line, added);\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added = linesFor(1, text.length - 1);\n        added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added = linesFor(1, text.length - 1);\n      if (nlines > 1) doc.remove(from.line + 1, nlines - 1);\n      doc.insert(from.line + 1, added);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    for (var i = 0, height = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length; },\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) lines[i].parent = this;\n    },\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        if (op(this.lines[at])) return true;\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size; },\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines);\n    },\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break;\n        }\n        at -= sz;\n      }\n    },\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) return;\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10);\n      me.parent.maybeSpill();\n    },\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) return true;\n          if ((n -= used) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n    }\n  };\n\n  var nextDocId = 0;\n  var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) {\n    if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep);\n    if (firstLine == null) firstLine = 0;\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.frontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.extend = false;\n\n    if (typeof text == \"string\") text = this.splitLines(text);\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) this.iterN(from - this.first, to - from, op);\n      else this.iterN(this.first, this.first + this.size, from);\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) height += lines[i].height;\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || this.lineSeparator());\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      setSelection(this, simpleSelection(top));\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || this.lineSeparator());\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},\n\n    getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},\n    getLineNumber: function(line) {return lineNo(line);},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") line = getLine(this, line);\n      return visualLine(line);\n    },\n\n    lineCount: function() {return this.size;},\n    firstLine: function() {return this.first;},\n    lastLine: function() {return this.first + this.size - 1;},\n\n    clipPos: function(pos) {return clipPos(this, pos);},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") pos = range.head;\n      else if (start == \"anchor\") pos = range.anchor;\n      else if (start == \"end\" || start == \"to\" || start === false) pos = range.to();\n      else pos = range.from();\n      return pos;\n    },\n    listSelections: function() { return this.sel.ranges; },\n    somethingSelected: function() {return this.sel.somethingSelected();},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) return;\n      for (var i = 0, out = []; i < ranges.length; i++)\n        out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head));\n      if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex);\n      setSelection(this, normalizeSelection(out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) return lines;\n      else return lines.join(lineSep || this.lineSeparator());\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator());\n        parts[i] = sel;\n      }\n      return parts;\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        dup[i] = code;\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i = changes.length - 1; i >= 0; i--)\n        makeChange(this, changes[i]);\n      if (newSel) setSelectionReplaceHistory(this, newSel);\n      else if (this.cm) ensureCursorVisible(this.cm);\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend;},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done;\n      for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone;\n      return {undo: done, redo: undone};\n    },\n    clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n      return this.history.generation;\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration);\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)};\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function(line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) line[prop] = cls;\n        else if (classTest(cls).test(line[prop])) return false;\n        else line[prop] += \" \" + cls;\n        return true;\n      });\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function(line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) return false;\n        else if (cls == null) line[prop] = null;\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) return false;\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true;\n      });\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options);\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\");\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\");\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          markers.push(span.marker.parent || span.marker);\n      }\n      return markers;\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function(line) {\n        var spans = line.markedSpans;\n        if (spans) for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            found.push(span.marker.parent || span.marker);\n        }\n        ++lineNo;\n      });\n      return found;\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function(line) {\n        var sps = line.markedSpans;\n        if (sps) for (var i = 0; i < sps.length; ++i)\n          if (sps[i].from != null) markers.push(sps[i].marker);\n      });\n      return markers;\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function(line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true; }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch));\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) return 0;\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) {\n        index += line.text.length + sepSize;\n      });\n      return index;\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc;\n    },\n\n    linkedDoc: function(options) {\n      if (!options) options = {};\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) from = options.from;\n      if (options.to != null && options.to < to) to = options.to;\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep);\n      if (options.sharedHist) copy.history = this.history;\n      (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy;\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) other = other.doc;\n      if (this.linked) for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) continue;\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break;\n      }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode;},\n    getEditor: function() {return this.cm;},\n\n    splitLines: function(str) {\n      if (this.lineSep) return str.split(this.lineSep);\n      return splitLinesAuto(str);\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\"; }\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments);};\n    })(Doc.prototype[prop]);\n\n  eventMixin(Doc);\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) continue;\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) continue;\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) throw new Error(\"This document is already in use.\");\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    if (!cm.options.lineWrapping) findMaxLine(cm);\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  // LINE UTILITIES\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n    for (var chunk = doc; !chunk.lines;) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break; }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n];\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function(line) {\n      var text = line.text;\n      if (n == end.line) text = text.slice(0, end.ch);\n      if (n == start.line) text = text.slice(start.ch);\n      out.push(text);\n      ++n;\n    });\n    return out;\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function(line) { out.push(line.text); });\n    return out;\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) for (var n = line; n; n = n.parent) n.height += diff;\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) return null;\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) break;\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first;\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i = 0; i < chunk.children.length; ++i) {\n        var child = chunk.children[i], ch = child.height;\n        if (h < ch) { chunk = child; continue outer; }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n;\n    } while (!chunk.lines);\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) break;\n      h -= lh;\n    }\n    return n + i;\n  }\n\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) break;\n      else h += line.height;\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i = 0; i < p.children.length; ++i) {\n        var cur = p.children[i];\n        if (cur == chunk) break;\n        else h += cur.height;\n      }\n    }\n    return h;\n  }\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line) {\n    var order = line.order;\n    if (order == null) order = line.order = bidiOrdering(line.text);\n    return order;\n  }\n\n  // HISTORY\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);\n    return histChange;\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) array.pop();\n      else break;\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done);\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done);\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done);\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, ore are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      var last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        pushSelectionToHistory(doc.sel, hist.done);\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) hist.done.shift();\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) signal(doc, \"historyAdded\");\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      hist.done[hist.done.length - 1] = sel;\n    else\n      pushSelectionToHistory(sel, hist.done);\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      clearSelectionEvents(hist.undone);\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      dest.push(sel);\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {\n      if (line.markedSpans)\n        (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) return null;\n    for (var i = 0, out; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }\n      else if (out) out.push(spans[i]);\n    }\n    return !out ? spans : out.length ? out : null;\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) return null;\n    for (var i = 0, nw = []; i < change.text.length; ++i)\n      nw.push(removeClearedSpans(found[i]));\n    return nw;\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    for (var i = 0, copy = []; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue;\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m;\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        }\n      }\n    }\n    return copy;\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue;\n      }\n      for (var j = 0; j < sub.changes.length; ++j) {\n        var cur = sub.changes[j];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break;\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // EVENT UTILITIES\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  var e_preventDefault = CodeMirror.e_preventDefault = function(e) {\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n  };\n  var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) {\n    if (e.stopPropagation) e.stopPropagation();\n    else e.cancelBubble = true;\n  };\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n  }\n  var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);};\n\n  function e_target(e) {return e.target || e.srcElement;}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) b = 1;\n      else if (e.button & 2) b = 3;\n      else if (e.button & 4) b = 2;\n    }\n    if (mac && e.ctrlKey && b == 1) b = 3;\n    return b;\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var on = CodeMirror.on = function(emitter, type, f) {\n    if (emitter.addEventListener)\n      emitter.addEventListener(type, f, false);\n    else if (emitter.attachEvent)\n      emitter.attachEvent(\"on\" + type, f);\n    else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      var arr = map[type] || (map[type] = []);\n      arr.push(f);\n    }\n  };\n\n  var noHandlers = []\n  function getHandlers(emitter, type, copy) {\n    var arr = emitter._handlers && emitter._handlers[type]\n    if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers\n    else return arr || noHandlers\n  }\n\n  var off = CodeMirror.off = function(emitter, type, f) {\n    if (emitter.removeEventListener)\n      emitter.removeEventListener(type, f, false);\n    else if (emitter.detachEvent)\n      emitter.detachEvent(\"on\" + type, f);\n    else {\n      var handlers = getHandlers(emitter, type, false)\n      for (var i = 0; i < handlers.length; ++i)\n        if (handlers[i] == f) { handlers.splice(i, 1); break; }\n    }\n  };\n\n  var signal = CodeMirror.signal = function(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type, true)\n    if (!handlers.length) return;\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args);\n  };\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type, false)\n    if (!arr.length) return;\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    function bnd(f) {return function(){f.apply(null, args);};};\n    for (var i = 0; i < arr.length; ++i)\n      list.push(bnd(arr[i]));\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) delayed[i]();\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      e = {type: e, preventDefault: function() { this.defaultPrevented = true; }};\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore;\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) return;\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)\n      set.push(arr[i]);\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // MISC UTILITIES\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 30;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = CodeMirror.Pass = {toString: function(){return \"CodeMirror.Pass\";}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  function Delayed() {this.id = null;}\n  Delayed.prototype.set = function(ms, f) {\n    clearTimeout(this.id);\n    this.id = setTimeout(f, ms);\n  };\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) end = string.length;\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        return n + (end - i);\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  };\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) nextTab = string.length;\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        return pos + Math.min(skipped, goal - col);\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) return pos;\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      spaceStrs.push(lst(spaceStrs) + \" \");\n    return spaceStrs[n];\n  }\n\n  function lst(arr) { return arr[arr.length-1]; }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; };\n  else if (ie) // Suppress mysterious IE10 errors\n    selectInput = function(node) { try { node.select(); } catch(_e) {} };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      if (array[i] == elt) return i;\n    return -1;\n  }\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) out[i] = f(array[i], i);\n    return out;\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) copyObj(props, inst);\n    return inst;\n  };\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) target = {};\n    for (var prop in obj)\n      if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        target[prop] = obj[prop];\n    return target;\n  }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args);};\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  var isWordCharBasic = CodeMirror.isWordChar = function(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n  };\n  function isWordChar(ch, helper) {\n    if (!helper) return isWordCharBasic(ch);\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) return true;\n    return helper.test(ch);\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;\n    return true;\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }\n\n  // DOM UTILITIES\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  var range;\n  if (document.createRange) range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r;\n  };\n  else range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r; }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r;\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      e.removeChild(e.firstChild);\n    return e;\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e);\n  }\n\n  var contains = CodeMirror.contains = function(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      child = child.parentNode;\n    if (parent.contains)\n      return parent.contains(child);\n    do {\n      if (child.nodeType == 11) child = child.host;\n      if (child == parent) return true;\n    } while (child = child.parentNode);\n  };\n\n  function activeElt() {\n    var activeElement = document.activeElement;\n    while (activeElement && activeElement.root && activeElement.root.activeElement)\n      activeElement = activeElement.root.activeElement;\n    return activeElement;\n  }\n  // Older versions of IE throws unspecified error when touching\n  // document.activeElement in some cases (during loading, in iframe)\n  if (ie && ie_version < 11) activeElt = function() {\n    try { return document.activeElement; }\n    catch(e) { return document.body; }\n  };\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\"); }\n  var rmClass = CodeMirror.rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n  var addClass = CodeMirror.addClass = function(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) node.className += (current ? \" \" : \"\") + cls;\n  };\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      if (as[i] && !classTest(as[i]).test(b)) b += \" \" + as[i];\n    return b;\n  }\n\n  // WINDOW-WIDE EVENTS\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.body.getElementsByClassName) return;\n    var byClass = document.body.getElementsByClassName(\"CodeMirror\");\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) f(cm);\n    }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) return;\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function() {\n      if (resizeTimer == null) resizeTimer = setTimeout(function() {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100);\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function() {\n      forEachCodeMirror(onBlur);\n    });\n  }\n\n  // FEATURE DETECTION\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) return false;\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div;\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node;\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) return badBidiRects;\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3);\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = CodeMirror.splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) nl = string.length;\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result;\n  } : function(string){return string.split(/\\r\\n?|\\n/);};\n\n  var hasSelection = window.getSelection ? function(te) {\n    try { return te.selectionStart != te.selectionEnd; }\n    catch(e) { return false; }\n  } : function(te) {\n    try {var range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) return false;\n    return range.compareEndPoints(\"StartToEnd\", range) != 0;\n  };\n\n  var hasCopyEvent = (function() {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) return true;\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\";\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) return badZoomedRects;\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n  }\n\n  // KEY NAMES\n\n  var keyNames = CodeMirror.keyNames = {\n    3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n  (function() {\n    // Number keys\n    for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);\n    // Alphabetic keys\n    for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n    // Function keys\n    for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n  })();\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) return f(from, to, \"ltr\");\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\");\n        found = true;\n      }\n    }\n    if (!found) f(from, to, \"ltr\");\n  }\n\n  function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }\n  function bidiRight(part) { return part.level % 2 ? part.from : part.to; }\n\n  function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }\n  function lineRight(line) {\n    var order = getOrder(line);\n    if (!order) return line.text.length;\n    return bidiRight(lst(order));\n  }\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) lineN = lineNo(visual);\n    var order = getOrder(visual);\n    var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);\n    return Pos(lineN, ch);\n  }\n  function lineEnd(cm, lineN) {\n    var merged, line = getLine(cm.doc, lineN);\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      lineN = null;\n    }\n    var order = getOrder(line);\n    var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);\n    return Pos(lineN == null ? lineNo(line) : lineN, ch);\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(0, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS);\n    }\n    return start;\n  }\n\n  function compareBidiLevel(order, a, b) {\n    var linedir = order[0].level;\n    if (a == linedir) return true;\n    if (b == linedir) return false;\n    return a < b;\n  }\n  var bidiOther;\n  function getBidiPartAt(order, pos) {\n    bidiOther = null;\n    for (var i = 0, found; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < pos && cur.to > pos) return i;\n      if ((cur.from == pos || cur.to == pos)) {\n        if (found == null) {\n          found = i;\n        } else if (compareBidiLevel(order, cur.level, order[found].level)) {\n          if (cur.from != cur.to) bidiOther = found;\n          return i;\n        } else {\n          if (cur.from != cur.to) bidiOther = i;\n          return found;\n        }\n      }\n    }\n    return found;\n  }\n\n  function moveInLine(line, pos, dir, byUnit) {\n    if (!byUnit) return pos + dir;\n    do pos += dir;\n    while (pos > 0 && isExtendingChar(line.text.charAt(pos)));\n    return pos;\n  }\n\n  // This is needed in order to move 'visually' through bi-directional\n  // text -- i.e., pressing left should make the cursor go left, even\n  // when in RTL text. The tricky part is the 'jumps', where RTL and\n  // LTR text touch each other. This often requires the cursor offset\n  // to move more than one unit, in order to visually move one unit.\n  function moveVisually(line, start, dir, byUnit) {\n    var bidi = getOrder(line);\n    if (!bidi) return moveLogically(line, start, dir, byUnit);\n    var pos = getBidiPartAt(bidi, start), part = bidi[pos];\n    var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);\n\n    for (;;) {\n      if (target > part.from && target < part.to) return target;\n      if (target == part.from || target == part.to) {\n        if (getBidiPartAt(bidi, target) == pos) return target;\n        part = bidi[pos += dir];\n        return (dir > 0) == part.level % 2 ? part.to : part.from;\n      } else {\n        part = bidi[pos += dir];\n        if (!part) return null;\n        if ((dir > 0) == part.level % 2)\n          target = moveInLine(line, part.to, -1, byUnit);\n        else\n          target = moveInLine(line, part.from, 1, byUnit);\n      }\n    }\n  }\n\n  function moveLogically(line, start, dir, byUnit) {\n    var target = start + dir;\n    if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;\n    return target < 0 || target > line.text.length ? null : target;\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6ff\n    var arabicTypes = \"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm\";\n    function charType(code) {\n      if (code <= 0xf7) return lowTypes.charAt(code);\n      else if (0x590 <= code && code <= 0x5f4) return \"R\";\n      else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600);\n      else if (0x6ee <= code && code <= 0x8ac) return \"r\";\n      else if (0x2000 <= code && code <= 0x200b) return \"w\";\n      else if (code == 0x200c) return \"b\";\n      else return \"L\";\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n    // Browsers seem to always treat the boundaries of block elements as being L.\n    var outerType = \"L\";\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str) {\n      if (!bidiRE.test(str)) return false;\n      var len = str.length, types = [];\n      for (var i = 0, type; i < len; ++i)\n        types.push(type = charType(str.charCodeAt(i)));\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i = 0, prev = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"m\") types[i] = prev;\n        else prev = type;\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"1\" && cur == \"r\") types[i] = \"n\";\n        else if (isStrong.test(type)) { cur = type; if (type == \"r\") types[i] = \"R\"; }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i = 1, prev = types[0]; i < len - 1; ++i) {\n        var type = types[i];\n        if (type == \"+\" && prev == \"1\" && types[i+1] == \"1\") types[i] = \"1\";\n        else if (type == \",\" && prev == types[i+1] &&\n                 (prev == \"1\" || prev == \"n\")) types[i] = prev;\n        prev = type;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i = 0; i < len; ++i) {\n        var type = types[i];\n        if (type == \",\") types[i] = \"N\";\n        else if (type == \"%\") {\n          for (var end = i + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i && types[i-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (cur == \"L\" && type == \"1\") types[i] = \"L\";\n        else if (isStrong.test(type)) cur = type;\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i = 0; i < len; ++i) {\n        if (isNeutral.test(types[i])) {\n          for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}\n          var before = (i ? types[i-1] : outerType) == \"L\";\n          var after = (end < len ? types[end] : outerType) == \"L\";\n          var replace = before || after ? \"L\" : \"R\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i = 0; i < len;) {\n        if (countsAsLeft.test(types[i])) {\n          var start = i;\n          for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}\n          order.push(new BidiSpan(0, start, i));\n        } else {\n          var pos = i, at = order.length;\n          for (++i; i < len && types[i] != \"L\"; ++i) {}\n          for (var j = pos; j < i;) {\n            if (countsAsNum.test(types[j])) {\n              if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j));\n              var nstart = j;\n              for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j));\n              pos = j;\n            } else ++j;\n          }\n          if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i));\n        }\n      }\n      if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n        order[0].from = m[0].length;\n        order.unshift(new BidiSpan(0, 0, m[0].length));\n      }\n      if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n        lst(order).to -= m[0].length;\n        order.push(new BidiSpan(0, len - m[0].length, len));\n      }\n      if (order[0].level == 2)\n        order.unshift(new BidiSpan(1, order[0].to, order[0].to));\n      if (order[0].level != lst(order).level)\n        order.push(new BidiSpan(order[0].level, len, len));\n\n      return order;\n    };\n  })();\n\n  // THE END\n\n  CodeMirror.version = \"5.17.0\";\n\n  return CodeMirror;\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/js/formatting.js",
    "content": "(function() {\n\n  CodeMirror.extendMode(\"css\", {\n    commentStart: \"/*\",\n    commentEnd: \"*/\",\n    newlineAfterToken: function(type, content) {\n      return /^[;{}]$/.test(content);\n    }\n  });\n\n  CodeMirror.extendMode(\"javascript\", {\n    commentStart: \"/*\",\n    commentEnd: \"*/\",\n    // FIXME semicolons inside of for\n    newlineAfterToken: function(type, content, textAfter, state) {\n      if (this.jsonMode) {\n        return /^[\\[,{]$/.test(content) || /^}/.test(textAfter);\n      } else {\n        if (content == \";\" && state.lexical && state.lexical.type == \")\") return false;\n        return /^[;{}]$/.test(content) && !/^;/.test(textAfter);\n      }\n    }\n  });\n\n  CodeMirror.extendMode(\"xml\", {\n    commentStart: \"<!--\",\n    commentEnd: \"-->\",\n    newlineAfterToken: function(type, content, textAfter) {\n      return type == \"tag\" && />$/.test(content) || /^</.test(textAfter);\n    }\n  });\n\n  // Comment/uncomment the specified range\n  CodeMirror.defineExtension(\"commentRange\", function (isComment, from, to) {\n    var cm = this, curMode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(from).state).mode;\n    cm.operation(function() {\n      if (isComment) { // Comment range\n        cm.replaceRange(curMode.commentEnd, to);\n        cm.replaceRange(curMode.commentStart, from);\n        if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside\n          cm.setCursor(from.line, from.ch + curMode.commentStart.length);\n      } else { // Uncomment range\n        var selText = cm.getRange(from, to);\n        var startIndex = selText.indexOf(curMode.commentStart);\n        var endIndex = selText.lastIndexOf(curMode.commentEnd);\n        if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {\n          // Take string till comment start\n          selText = selText.substr(0, startIndex)\n          // From comment start till comment end\n            + selText.substring(startIndex + curMode.commentStart.length, endIndex)\n          // From comment end till string end\n            + selText.substr(endIndex + curMode.commentEnd.length);\n        }\n        cm.replaceRange(selText, from, to);\n      }\n    });\n  });\n\n  // Applies automatic mode-aware indentation to the specified range\n  CodeMirror.defineExtension(\"autoIndentRange\", function (from, to) {\n    var cmInstance = this;\n    this.operation(function () {\n      for (var i = from.line; i <= to.line; i++) {\n        cmInstance.indentLine(i, \"smart\");\n      }\n    });\n  });\n\n  // Applies automatic formatting to the specified range\n  CodeMirror.defineExtension(\"autoFormatRange\", function (from, to) {\n    var cm = this;\n    var outer = cm.getMode(), text = cm.getRange(from, to).split(\"\\n\");\n    var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);\n    var tabSize = cm.getOption(\"tabSize\");\n\n    var out = \"\", lines = 0, atSol = from.ch == 0;\n    function newline() {\n      out += \"\\n\";\n      atSol = true;\n      ++lines;\n    }\n\n    for (var i = 0; i < text.length; ++i) {\n      var stream = new CodeMirror.StringStream(text[i], tabSize);\n      while (!stream.eol()) {\n        var inner = CodeMirror.innerMode(outer, state);\n        var style = outer.token(stream, state), cur = stream.current();\n        stream.start = stream.pos;\n        if (!atSol || /\\S/.test(cur)) {\n          out += cur;\n          atSol = false;\n        }\n        if (!atSol && inner.mode.newlineAfterToken &&\n            inner.mode.newlineAfterToken(style, cur, stream.string.slice(stream.pos) || text[i+1] || \"\", inner.state))\n          newline();\n      }\n      if (!stream.pos && outer.blankLine) outer.blankLine(state);\n      if (!atSol) newline();\n    }\n\n    cm.operation(function () {\n      cm.replaceRange(out, from, to);\n      for (var cur = from.line + 1, end = from.line + lines; cur <= end; ++cur)\n        cm.indentLine(cur, \"smart\");\n      cm.setSelection(from, cm.getCursor(false));\n    });\n  });\n})();\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/js/javascript.js",
    "content": "// TODO actually recognize syntax of TypeScript constructs\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var statementIndent = parserConfig.statementIndent;\n  var jsonldMode = parserConfig.jsonld;\n  var jsonMode = parserConfig.json || jsonldMode;\n  var isTS = parserConfig.typescript;\n\n  // Tokenizer\n\n  var keywords = function(){\n    function kw(type) {return {type: type, style: \"keyword\"};}\n    var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n    var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n    var jsKeywords = {\n      \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n      \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C, \"debugger\": C,\n      \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n      \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n      \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n      \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n      \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n      \"this\": kw(\"this\"), \"module\": kw(\"module\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n      \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C\n    };\n\n    // Extend the 'normal' keywords with the TypeScript language extensions\n    if (isTS) {\n      var type = {type: \"variable\", style: \"variable-3\"};\n      var tsKeywords = {\n        // object-like things\n        \"interface\": kw(\"interface\"),\n        \"extends\": kw(\"extends\"),\n        \"constructor\": kw(\"constructor\"),\n\n        // scope modifiers\n        \"public\": kw(\"public\"),\n        \"private\": kw(\"private\"),\n        \"protected\": kw(\"protected\"),\n        \"static\": kw(\"static\"),\n\n        // types\n        \"string\": type, \"number\": type, \"bool\": type, \"any\": type\n      };\n\n      for (var attr in tsKeywords) {\n        jsKeywords[attr] = tsKeywords[attr];\n      }\n    }\n\n    return jsKeywords;\n  }();\n\n  var isOperatorChar = /[+\\-*&%=<>!?|~^]/;\n  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n  function readRegexp(stream) {\n    var escaped = false, next, inSet = false;\n    while ((next = stream.next()) != null) {\n      if (!escaped) {\n        if (next == \"/\" && !inSet) return;\n        if (next == \"[\") inSet = true;\n        else if (inSet && next == \"]\") inSet = false;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n      return ret(\"number\", \"number\");\n    } else if (ch == \".\" && stream.match(\"..\")) {\n      return ret(\"spread\", \"meta\");\n    } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      return ret(ch);\n    } else if (ch == \"=\" && stream.eat(\">\")) {\n      return ret(\"=>\", \"operator\");\n    } else if (ch == \"0\" && stream.eat(/x/i)) {\n      stream.eatWhile(/[\\da-f]/i);\n      return ret(\"number\", \"number\");\n    } else if (/\\d/.test(ch)) {\n      stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      } else if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return ret(\"comment\", \"comment\");\n      } else if (state.lastType == \"operator\" || state.lastType == \"keyword c\" ||\n               state.lastType == \"sof\" || /^[\\[{}\\(,;:]$/.test(state.lastType)) {\n        readRegexp(stream);\n        stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n        return ret(\"regexp\", \"string-2\");\n      } else {\n        stream.eatWhile(isOperatorChar);\n        return ret(\"operator\", \"operator\", stream.current());\n      }\n    } else if (ch == \"`\") {\n      state.tokenize = tokenQuasi;\n      return tokenQuasi(stream, state);\n    } else if (ch == \"#\") {\n      stream.skipToEnd();\n      return ret(\"error\", \"error\");\n    } else if (isOperatorChar.test(ch)) {\n      stream.eatWhile(isOperatorChar);\n      return ret(\"operator\", \"operator\", stream.current());\n    } else {\n      stream.eatWhile(/[\\w\\$_]/);\n      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n      return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n                     ret(\"variable\", \"variable\", word);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next;\n      if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n        state.tokenize = tokenBase;\n        return ret(\"jsonld-keyword\", \"meta\");\n      }\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) break;\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenQuasi(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    return ret(\"quasi\", \"string-2\", stream.current());\n  }\n\n  var brackets = \"([{}])\";\n  // This is a crude lookahead trick to try and notice that we're\n  // parsing the argument patterns for a fat-arrow function before we\n  // actually hit the arrow token. It only works if the arrow is on\n  // the same line as the arguments and there's no strange noise\n  // (comments) in between. Fallback is to only notice when we hit the\n  // arrow, and not declare the arguments as locals for the arrow\n  // body.\n  function findFatArrow(stream, state) {\n    if (state.fatArrowAt) state.fatArrowAt = null;\n    var arrow = stream.string.indexOf(\"=>\", stream.start);\n    if (arrow < 0) return;\n\n    var depth = 0, sawSomething = false;\n    for (var pos = arrow - 1; pos >= 0; --pos) {\n      var ch = stream.string.charAt(pos);\n      var bracket = brackets.indexOf(ch);\n      if (bracket >= 0 && bracket < 3) {\n        if (!depth) { ++pos; break; }\n        if (--depth == 0) break;\n      } else if (bracket >= 3 && bracket < 6) {\n        ++depth;\n      } else if (/[$\\w]/.test(ch)) {\n        sawSomething = true;\n      } else if (sawSomething && !depth) {\n        ++pos;\n        break;\n      }\n    }\n    if (sawSomething && !depth) state.fatArrowAt = pos;\n  }\n\n  // Parser\n\n  var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n  function JSLexical(indented, column, type, align, prev, info) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.prev = prev;\n    this.info = info;\n    if (align != null) this.align = align;\n  }\n\n  function inScope(state, varname) {\n    for (var v = state.localVars; v; v = v.next)\n      if (v.name == varname) return true;\n    for (var cx = state.context; cx; cx = cx.prev) {\n      for (var v = cx.vars; v; v = v.next)\n        if (v.name == varname) return true;\n    }\n  }\n\n  function parseJS(state, style, type, content, stream) {\n    var cc = state.cc;\n    // Communicate our context to the combinators.\n    // (Less wasteful than consing up a hundred closures on every call.)\n    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n    if (!state.lexical.hasOwnProperty(\"align\"))\n      state.lexical.align = true;\n\n    while(true) {\n      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n      if (combinator(type, content)) {\n        while(cc.length && cc[cc.length - 1].lex)\n          cc.pop()();\n        if (cx.marked) return cx.marked;\n        if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n        return style;\n      }\n    }\n  }\n\n  // Combinator utils\n\n  var cx = {state: null, column: null, marked: null, cc: null};\n  function pass() {\n    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n  }\n  function cont() {\n    pass.apply(null, arguments);\n    return true;\n  }\n  function register(varname) {\n    function inList(list) {\n      for (var v = list; v; v = v.next)\n        if (v.name == varname) return true;\n      return false;\n    }\n    var state = cx.state;\n    if (state.context) {\n      cx.marked = \"def\";\n      if (inList(state.localVars)) return;\n      state.localVars = {name: varname, next: state.localVars};\n    } else {\n      if (inList(state.globalVars)) return;\n      if (parserConfig.globalVars)\n        state.globalVars = {name: varname, next: state.globalVars};\n    }\n  }\n\n  // Combinators\n\n  var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n  function pushcontext() {\n    cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    cx.state.localVars = defaultVars;\n  }\n  function popcontext() {\n    cx.state.localVars = cx.state.context.vars;\n    cx.state.context = cx.state.context.prev;\n  }\n  function pushlex(type, info) {\n    var result = function() {\n      var state = cx.state, indent = state.indented;\n      if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n    };\n    result.lex = true;\n    return result;\n  }\n  function poplex() {\n    var state = cx.state;\n    if (state.lexical.prev) {\n      if (state.lexical.type == \")\")\n        state.indented = state.lexical.indented;\n      state.lexical = state.lexical.prev;\n    }\n  }\n  poplex.lex = true;\n\n  function expect(wanted) {\n    return function(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\") return pass();\n      else return cont(arguments.callee);\n    };\n  }\n\n  function statement(type, value) {\n    if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n    if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n    if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n    if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n    if (type == \";\") return cont();\n    if (type == \"if\") return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n    if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n    if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n                                      block, poplex, poplex);\n    if (type == \"case\") return cont(expression, expect(\":\"));\n    if (type == \"default\") return cont(expect(\":\"));\n    if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n                                     statement, poplex, popcontext);\n    if (type == \"module\") return cont(pushlex(\"form\"), pushcontext, afterModule, popcontext, poplex);\n    if (type == \"class\") return cont(pushlex(\"form\"), className, objlit, poplex);\n    if (type == \"export\") return cont(pushlex(\"form\"), afterExport, poplex);\n    if (type == \"import\") return cont(pushlex(\"form\"), afterImport, poplex);\n    return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n  }\n  function expression(type) {\n    return expressionInner(type, false);\n  }\n  function expressionNoComma(type) {\n    return expressionInner(type, true);\n  }\n  function expressionInner(type, noComma) {\n    if (cx.state.fatArrowAt == cx.stream.start) {\n      var body = noComma ? arrowBodyNoComma : arrowBody;\n      if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n      else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n    }\n\n    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"keyword c\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n    if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, comprehension, expect(\")\"), poplex, maybeop);\n    if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n    if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n    return cont();\n  }\n  function maybeexpression(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expression);\n  }\n  function maybeexpressionNoComma(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expressionNoComma);\n  }\n\n  function maybeoperatorComma(type, value) {\n    if (type == \",\") return cont(expression);\n    return maybeoperatorNoComma(type, value, false);\n  }\n  function maybeoperatorNoComma(type, value, noComma) {\n    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n    var expr = noComma == false ? expression : expressionNoComma;\n    if (value == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n    if (type == \"operator\") {\n      if (/\\+\\+|--/.test(value)) return cont(me);\n      if (value == \"?\") return cont(expression, expect(\":\"), expr);\n      return cont(expr);\n    }\n    if (type == \"quasi\") { cx.cc.push(me); return quasi(value); }\n    if (type == \";\") return;\n    if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n    if (type == \".\") return cont(property, me);\n    if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n  }\n  function quasi(value) {\n    if (value.slice(value.length - 2) != \"${\") return cont();\n    return cont(expression, continueQuasi);\n  }\n  function continueQuasi(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont();\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expressionNoComma);\n  }\n  function maybelabel(type) {\n    if (type == \":\") return cont(poplex, statement);\n    return pass(maybeoperatorComma, expect(\";\"), poplex);\n  }\n  function property(type) {\n    if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n  }\n  function objprop(type, value) {\n    if (type == \"variable\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (type + \" property\");\n    } else if (type == \"[\") {\n      return cont(expression, expect(\"]\"), afterprop);\n    }\n    if (atomicTypes.hasOwnProperty(type)) return cont(afterprop);\n  }\n  function getterSetter(type) {\n    if (type != \"variable\") return pass(afterprop);\n    cx.marked = \"property\";\n    return cont(functiondef);\n  }\n  function afterprop(type) {\n    if (type == \":\") return cont(expressionNoComma);\n    if (type == \"(\") return pass(functiondef);\n  }\n  function commasep(what, end) {\n    function proceed(type) {\n      if (type == \",\") {\n        var lex = cx.state.lexical;\n        if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n        return cont(what, proceed);\n      }\n      if (type == end) return cont();\n      return cont(expect(end));\n    }\n    return function(type) {\n      if (type == end) return cont();\n      return pass(what, proceed);\n    };\n  }\n  function contCommasep(what, end, info) {\n    for (var i = 3; i < arguments.length; i++)\n      cx.cc.push(arguments[i]);\n    return cont(pushlex(end, info), commasep(what, end), poplex);\n  }\n  function block(type) {\n    if (type == \"}\") return cont();\n    return pass(statement, block);\n  }\n  function maybetype(type) {\n    if (isTS && type == \":\") return cont(typedef);\n  }\n  function typedef(type) {\n    if (type == \"variable\"){cx.marked = \"variable-3\"; return cont();}\n  }\n  function vardef() {\n    return pass(pattern, maybetype, maybeAssign, vardefCont);\n  }\n  function pattern(type, value) {\n    if (type == \"variable\") { register(value); return cont(); }\n    if (type == \"[\") return contCommasep(pattern, \"]\");\n    if (type == \"{\") return contCommasep(proppattern, \"}\");\n  }\n  function proppattern(type, value) {\n    if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n      register(value);\n      return cont(maybeAssign);\n    }\n    if (type == \"variable\") cx.marked = \"property\";\n    return cont(expect(\":\"), pattern, maybeAssign);\n  }\n  function maybeAssign(_type, value) {\n    if (value == \"=\") return cont(expressionNoComma);\n  }\n  function vardefCont(type) {\n    if (type == \",\") return cont(vardef);\n  }\n  function maybeelse(type, value) {\n    if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\"), statement, poplex);\n  }\n  function forspec(type) {\n    if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n  }\n  function forspec1(type) {\n    if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n    if (type == \";\") return cont(forspec2);\n    if (type == \"variable\") return cont(formaybeinof);\n    return pass(expression, expect(\";\"), forspec2);\n  }\n  function formaybeinof(_type, value) {\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return cont(maybeoperatorComma, forspec2);\n  }\n  function forspec2(type, value) {\n    if (type == \";\") return cont(forspec3);\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return pass(expression, expect(\";\"), forspec3);\n  }\n  function forspec3(type) {\n    if (type != \")\") cont(expression);\n  }\n  function functiondef(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n    if (type == \"variable\") {register(value); return cont(functiondef);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, statement, popcontext);\n  }\n  function funarg(type) {\n    if (type == \"spread\") return cont(funarg);\n    return pass(pattern, maybetype);\n  }\n  function className(type, value) {\n    if (type == \"variable\") {register(value); return cont(classNameAfter);}\n  }\n  function classNameAfter(_type, value) {\n    if (value == \"extends\") return cont(expression);\n  }\n  function objlit(type) {\n    if (type == \"{\") return contCommasep(objprop, \"}\");\n  }\n  function afterModule(type, value) {\n    if (type == \"string\") return cont(statement);\n    if (type == \"variable\") { register(value); return cont(maybeFrom); }\n  }\n  function afterExport(_type, value) {\n    if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n    if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n    return pass(statement);\n  }\n  function afterImport(type) {\n    if (type == \"string\") return cont();\n    return pass(importSpec, maybeFrom);\n  }\n  function importSpec(type, value) {\n    if (type == \"{\") return contCommasep(importSpec, \"}\");\n    if (type == \"variable\") register(value);\n    return cont();\n  }\n  function maybeFrom(_type, value) {\n    if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n  }\n  function arrayLiteral(type) {\n    if (type == \"]\") return cont();\n    return pass(expressionNoComma, maybeArrayComprehension);\n  }\n  function maybeArrayComprehension(type) {\n    if (type == \"for\") return pass(comprehension, expect(\"]\"));\n    if (type == \",\") return cont(commasep(expressionNoComma, \"]\"));\n    return pass(commasep(expressionNoComma, \"]\"));\n  }\n  function comprehension(type) {\n    if (type == \"for\") return cont(forspec, comprehension);\n    if (type == \"if\") return cont(expression, comprehension);\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      var state = {\n        tokenize: tokenBase,\n        lastType: \"sof\",\n        cc: [],\n        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n        localVars: parserConfig.localVars,\n        context: parserConfig.localVars && {vars: parserConfig.localVars},\n        indented: 0\n      };\n      if (parserConfig.globalVars) state.globalVars = parserConfig.globalVars;\n      return state;\n    },\n\n    token: function(stream, state) {\n      if (stream.sol()) {\n        if (!state.lexical.hasOwnProperty(\"align\"))\n          state.lexical.align = false;\n        state.indented = stream.indentation();\n        findFatArrow(stream, state);\n      }\n      if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n      if (type == \"comment\") return style;\n      state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n      return parseJS(state, style, type, content, stream);\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == tokenComment) return CodeMirror.Pass;\n      if (state.tokenize != tokenBase) return 0;\n      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n      // Kludge to prevent 'maybelse' from blocking lexical scope pops\n      for (var i = state.cc.length - 1; i >= 0; --i) {\n        var c = state.cc[i];\n        if (c == poplex) lexical = lexical.prev;\n        else if (c != maybeelse) break;\n      }\n      if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n      if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n        lexical = lexical.prev;\n      var type = lexical.type, closing = firstChar == type;\n\n      if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n      else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n      else if (type == \"form\") return lexical.indented + indentUnit;\n      else if (type == \"stat\")\n        return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? statementIndent || indentUnit : 0);\n      else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n        return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n      else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n      else return lexical.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricChars: \":{}\",\n    blockCommentStart: jsonMode ? null : \"/*\",\n    blockCommentEnd: jsonMode ? null : \"*/\",\n    lineComment: jsonMode ? null : \"//\",\n    fold: \"brace\",\n\n    helperType: jsonMode ? \"json\" : \"javascript\",\n    jsonldMode: jsonldMode,\n    jsonMode: jsonMode\n  };\n});\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/codemirror/js/xml.js",
    "content": "CodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1;\n  var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag;\n  if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true;\n\n  var Kludges = parserConfig.htmlMode ? {\n    autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                      'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                      'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                      'track': true, 'wbr': true},\n    implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                       'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                       'th': true, 'tr': true},\n    contextGrabbers: {\n      'dd': {'dd': true, 'dt': true},\n      'dt': {'dd': true, 'dt': true},\n      'li': {'li': true},\n      'option': {'option': true, 'optgroup': true},\n      'optgroup': {'optgroup': true},\n      'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n            'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n            'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n            'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n            'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n      'rp': {'rp': true, 'rt': true},\n      'rt': {'rp': true, 'rt': true},\n      'tbody': {'tbody': true, 'tfoot': true},\n      'td': {'td': true, 'th': true},\n      'tfoot': {'tbody': true},\n      'th': {'td': true, 'th': true},\n      'thead': {'tbody': true, 'tfoot': true},\n      'tr': {'tr': true}\n    },\n    doNotIndent: {\"pre\": true},\n    allowUnquoted: true,\n    allowMissing: true\n  } : {\n    autoSelfClosers: {},\n    implicitlyClosed: {},\n    contextGrabbers: {},\n    doNotIndent: {},\n    allowUnquoted: false,\n    allowMissing: false\n  };\n  var alignCDATA = parserConfig.alignCDATA;\n\n  // Return variables for tokenizers\n  var tagName, type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        var isClose = stream.eat(\"/\");\n        tagName = \"\";\n        var c;\n        while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n        if (!tagName) return \"tag error\";\n        type = isClose ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" error\" : \"error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\']/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    };\n  }\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName.toLowerCase();\n      if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagName = tagName;\n      state.tagStart = stream.column();\n      return attrState;\n    } else if (type == \"closeTag\") {\n      var err = false;\n      if (state.context) {\n        if (state.context.tagName != tagName) {\n          if (Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName.toLowerCase()))\n            popContext(state);\n          err = !state.context || state.context.tagName != tagName;\n        }\n      } else {\n        err = true;\n      }\n      if (err) setStyle = \"error\";\n      return err ? closeStateErr : closeState;\n    } else {\n      return baseState;\n    }\n  }\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          Kludges.autoSelfClosers.hasOwnProperty(tagName.toLowerCase())) {\n        maybePopContext(state, tagName.toLowerCase());\n      } else {\n        maybePopContext(state, tagName.toLowerCase());\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!Kludges.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function() {\n      return {tokenize: inText,\n              state: baseState,\n              indented: 0,\n              tagName: null, tagStart: null,\n              context: null};\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      tagName = type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        return state.stringStartCol + 1;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (multilineTagIndentPastTag)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * multilineTagIndentFactor;\n      }\n      if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      if (context && /^<\\//.test(textAfter))\n        context = context.prev;\n      while (context && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return 0;\n    },\n\n    electricChars: \"/\",\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: parserConfig.htmlMode ? \"html\" : \"xml\",\n    helperType: parserConfig.htmlMode ? \"html\" : \"xml\"\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/countdown/dest/countdown.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;\"undefined\"!=typeof window?n=window:\"undefined\"!=typeof global?n=global:\"undefined\"!=typeof self&&(n=self),n.Countdown=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar defaultOptions = {\n  date: \"June 7, 2087 15:03:25\",\n  refresh: 1000,\n  offset: 0,\n  onEnd: function() {\n    return;\n  },\n  render: function (date) {\n    this.el.innerHTML = date.years + \" years, \" +\n                        date.days  + \" days, \" +\n                        this.leadingZeros(date.hours) + \" hours, \" +\n                        this.leadingZeros(date.min) + \" min and \" +\n                        this.leadingZeros(date.sec) + \" sec\";\n  }\n};\n\n/**\n * Countdown constructor\n * @param {HTMLElement} el      DOM node of the countdown\n * @param {Object}      options (optional) Options for the plugin\n */\nvar Countdown = function(el, options) {\n\n  /**\n   * Reference to the DOM element\n   * @type {HTMLElement}\n   */\n  this.el = el;\n\n  /**\n   * Options of the countdown plugin\n   * @type {Object}\n   */\n  this.options = {};\n\n  /**\n   * Interval reference or false if counter is stopped\n   * @type {Mixed}\n   */\n  this.interval = false;\n\n  // merge default options and options into this.options\n  for (var i in defaultOptions) {\n    if (defaultOptions.hasOwnProperty(i)) {\n      this.options[i] = typeof options[i] !== 'undefined' ? options[i] : defaultOptions[i];\n\n      if (i === 'date' && typeof this.options.date !== 'object') {\n        this.options.date = new Date(this.options.date);\n      }\n\n      // bind context for functions\n      if (typeof this.options[i] === 'function') {\n        this.options[i] = this.options[i].bind(this);\n      }\n    }\n  }\n\n  /**\n   * Get the difference between now and the end date\n   * @return {Object} Object with the diff information (years, days, hours, min, sec, millisec)\n   */\n  this.getDiffDate = function() {\n    var diff = (this.options.date.getTime() - Date.now() + this.options.offset) / 1000;\n\n    var dateData = {\n      years:    0,\n      days:     0,\n      hours:    0,\n      min:      0,\n      sec:      0,\n      millisec: 0\n    };\n\n    if (diff <= 0) {\n      if (this.interval) {\n        this.stop();\n        this.options.onEnd();\n      }\n      return dateData;\n    }\n\n    if (diff >= (365.25 * 86400)) {\n      dateData.years = Math.floor(diff / (365.25 * 86400));\n      diff -= dateData.years * 365.25 * 86400;\n    }\n\n    if (diff >= 86400) {\n      dateData.days = Math.floor(diff / 86400);\n      diff -= dateData.days * 86400;\n    }\n\n    if (diff >= 3600) {\n      dateData.hours = Math.floor(diff / 3600);\n      diff -= dateData.hours * 3600;\n    }\n\n    if (diff >= 60) {\n      dateData.min = Math.floor(diff / 60);\n      diff -= dateData.min * 60;\n    }\n\n    dateData.sec = Math.round(diff);\n\n    dateData.millisec = diff % 1 * 1000;\n\n    return dateData;\n  }.bind(this);\n\n  /**\n   * Add leading zeros to a number\n   * @param  {Number} num    Input number\n   * @param  {Number} length Length of the desired output\n   * @return {String}        String of the desired length with leading zeros\n   */\n  this.leadingZeros = function(num, length) {\n    length = length || 2;\n    num = String(num);\n    if (num.length > length) {\n      return num;\n    }\n    return (Array(length + 1).join('0') + num).substr(-length);\n  };\n\n  /**\n   * Update the end date of the countdown\n   * @param  {Mixed}     newDate Date object or a String/Number that can be passed to the Date constructor\n   * @return {Countdown}         Countdown instance\n   */\n  this.update = function(newDate) {\n    if (typeof newDate !== 'object') {\n      newDate = new Date(newDate);\n    }\n    this.options.date = newDate;\n    this.render();\n    return this;\n  }.bind(this);\n\n  /**\n   * Stop the countdown refresh / rerender\n   * @return {Countdown} Countdown instance\n   */\n  this.stop = function() {\n    if (this.interval) {\n      clearInterval(this.interval);\n      this.interval = false;\n    }\n    return this;\n  }.bind(this);\n\n  /**\n   * Render the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.render = function() {\n    this.options.render(this.getDiffDate());\n    return this;\n  }.bind(this);\n\n  /**\n   * Start the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.start = function() {\n    // don't start if the countdown is already started\n    if (this.interval) { return; }\n\n    this.render();\n\n    if (this.options.refresh) {\n      this.interval = setInterval(this.render, this.options.refresh);\n    }\n\n    return this;\n  }.bind(this);\n\n  /**\n   * Update the offset\n   * @param  {Number}    offset New offset in ms\n   * @return {Countdown}        Countdown instance\n   */\n  this.updateOffset = function(offset) {\n    this.options.offset = offset;\n    return this;\n  }.bind(this);\n\n\n  // initial start of the countdown or initial render\n  this.start();\n};\n\nmodule.exports = Countdown;\n\n},{}]},{},[1])(1)\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/countdown/dest/jquery.countdown.js",
    "content": "!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;\"undefined\"!=typeof window?n=window:\"undefined\"!=typeof global?n=global:\"undefined\"!=typeof self&&(n=self),n.Countdown=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar defaultOptions = {\n  date: \"June 7, 2087 15:03:25\",\n  refresh: 1000,\n  offset: 0,\n  onEnd: function() {\n    return;\n  },\n  render: function (date) {\n    this.el.innerHTML = date.years + \" years, \" +\n                        date.days  + \" days, \" +\n                        this.leadingZeros(date.hours) + \" hours, \" +\n                        this.leadingZeros(date.min) + \" min and \" +\n                        this.leadingZeros(date.sec) + \" sec\";\n  }\n};\n\n/**\n * Countdown constructor\n * @param {HTMLElement} el      DOM node of the countdown\n * @param {Object}      options (optional) Options for the plugin\n */\nvar Countdown = function(el, options) {\n\n  /**\n   * Reference to the DOM element\n   * @type {HTMLElement}\n   */\n  this.el = el;\n\n  /**\n   * Options of the countdown plugin\n   * @type {Object}\n   */\n  this.options = {};\n\n  /**\n   * Interval reference or false if counter is stopped\n   * @type {Mixed}\n   */\n  this.interval = false;\n\n  // merge default options and options into this.options\n  for (var i in defaultOptions) {\n    if (defaultOptions.hasOwnProperty(i)) {\n      this.options[i] = typeof options[i] !== 'undefined' ? options[i] : defaultOptions[i];\n\n      if (i === 'date' && typeof this.options.date !== 'object') {\n        this.options.date = new Date(this.options.date);\n      }\n\n      // bind context for functions\n      if (typeof this.options[i] === 'function') {\n        this.options[i] = this.options[i].bind(this);\n      }\n    }\n  }\n\n  /**\n   * Get the difference between now and the end date\n   * @return {Object} Object with the diff information (years, days, hours, min, sec, millisec)\n   */\n  this.getDiffDate = function() {\n    var diff = (this.options.date.getTime() - Date.now() + this.options.offset) / 1000;\n\n    var dateData = {\n      years:    0,\n      days:     0,\n      hours:    0,\n      min:      0,\n      sec:      0,\n      millisec: 0\n    };\n\n    if (diff <= 0) {\n      if (this.interval) {\n        this.stop();\n        this.options.onEnd();\n      }\n      return dateData;\n    }\n\n    if (diff >= (365.25 * 86400)) {\n      dateData.years = Math.floor(diff / (365.25 * 86400));\n      diff -= dateData.years * 365.25 * 86400;\n    }\n\n    if (diff >= 86400) {\n      dateData.days = Math.floor(diff / 86400);\n      diff -= dateData.days * 86400;\n    }\n\n    if (diff >= 3600) {\n      dateData.hours = Math.floor(diff / 3600);\n      diff -= dateData.hours * 3600;\n    }\n\n    if (diff >= 60) {\n      dateData.min = Math.floor(diff / 60);\n      diff -= dateData.min * 60;\n    }\n\n    dateData.sec = Math.round(diff);\n\n    dateData.millisec = diff % 1 * 1000;\n\n    return dateData;\n  }.bind(this);\n\n  /**\n   * Add leading zeros to a number\n   * @param  {Number} num    Input number\n   * @param  {Number} length Length of the desired output\n   * @return {String}        String of the desired length with leading zeros\n   */\n  this.leadingZeros = function(num, length) {\n    length = length || 2;\n    num = String(num);\n    if (num.length > length) {\n      return num;\n    }\n    return (Array(length + 1).join('0') + num).substr(-length);\n  };\n\n  /**\n   * Update the end date of the countdown\n   * @param  {Mixed}     newDate Date object or a String/Number that can be passed to the Date constructor\n   * @return {Countdown}         Countdown instance\n   */\n  this.update = function(newDate) {\n    if (typeof newDate !== 'object') {\n      newDate = new Date(newDate);\n    }\n    this.options.date = newDate;\n    this.render();\n    return this;\n  }.bind(this);\n\n  /**\n   * Stop the countdown refresh / rerender\n   * @return {Countdown} Countdown instance\n   */\n  this.stop = function() {\n    if (this.interval) {\n      clearInterval(this.interval);\n      this.interval = false;\n    }\n    return this;\n  }.bind(this);\n\n  /**\n   * Render the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.render = function() {\n    this.options.render(this.getDiffDate());\n    return this;\n  }.bind(this);\n\n  /**\n   * Start the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.start = function() {\n    // don't start if the countdown is already started\n    if (this.interval) { return; }\n\n    this.render();\n\n    if (this.options.refresh) {\n      this.interval = setInterval(this.render, this.options.refresh);\n    }\n\n    return this;\n  }.bind(this);\n\n  /**\n   * Update the offset\n   * @param  {Number}    offset New offset in ms\n   * @return {Countdown}        Countdown instance\n   */\n  this.updateOffset = function(offset) {\n    this.options.offset = offset;\n    return this;\n  }.bind(this);\n\n\n  // initial start of the countdown or initial render\n  this.start();\n};\n\nmodule.exports = Countdown;\n\n},{}],2:[function(require,module,exports){\nvar Countdown = require('./countdown.js');\nvar NAME = 'countdown';\nvar DATA_ATTR = 'date';\n\njQuery.fn.countdown = function(options) {\n  return $.each(this, function(i, el) {\n    var $el = $(el);\n    if (!$el.data(NAME)) {\n      // allow setting the date via the data-date attribute\n      if ($el.data(DATA_ATTR)) {\n        options.date = $el.data(DATA_ATTR);\n      }\n      $el.data(NAME, new Countdown(el, options));\n    }\n  });\n};\n\nmodule.exports = Countdown;\n\n},{\"./countdown.js\":1}]},{},[2])(2)\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/countdown/src/countdown.js",
    "content": "var defaultOptions = {\n  date: \"June 7, 2087 15:03:25\",\n  refresh: 1000,\n  offset: 0,\n  onEnd: function() {\n    return;\n  },\n  render: function (date) {\n    this.el.innerHTML = date.years + \" years, \" +\n                        date.days  + \" days, \" +\n                        this.leadingZeros(date.hours) + \" hours, \" +\n                        this.leadingZeros(date.min) + \" min and \" +\n                        this.leadingZeros(date.sec) + \" sec\";\n  }\n};\n\n/**\n * Countdown constructor\n * @param {HTMLElement} el      DOM node of the countdown\n * @param {Object}      options (optional) Options for the plugin\n */\nvar Countdown = function(el, options) {\n\n  /**\n   * Reference to the DOM element\n   * @type {HTMLElement}\n   */\n  this.el = el;\n\n  /**\n   * Options of the countdown plugin\n   * @type {Object}\n   */\n  this.options = {};\n\n  /**\n   * Interval reference or false if counter is stopped\n   * @type {Mixed}\n   */\n  this.interval = false;\n\n  // merge default options and options into this.options\n  for (var i in defaultOptions) {\n    if (defaultOptions.hasOwnProperty(i)) {\n      this.options[i] = typeof options[i] !== 'undefined' ? options[i] : defaultOptions[i];\n\n      if (i === 'date' && typeof this.options.date !== 'object') {\n        this.options.date = new Date(this.options.date);\n      }\n\n      // bind context for functions\n      if (typeof this.options[i] === 'function') {\n        this.options[i] = this.options[i].bind(this);\n      }\n    }\n  }\n\n  /**\n   * Get the difference between now and the end date\n   * @return {Object} Object with the diff information (years, days, hours, min, sec, millisec)\n   */\n  this.getDiffDate = function() {\n    var diff = (this.options.date.getTime() - Date.now() + this.options.offset) / 1000;\n\n    var dateData = {\n      years:    0,\n      days:     0,\n      hours:    0,\n      min:      0,\n      sec:      0,\n      millisec: 0\n    };\n\n    if (diff <= 0) {\n      if (this.interval) {\n        this.stop();\n        this.options.onEnd();\n      }\n      return dateData;\n    }\n\n    if (diff >= (365.25 * 86400)) {\n      dateData.years = Math.floor(diff / (365.25 * 86400));\n      diff -= dateData.years * 365.25 * 86400;\n    }\n\n    if (diff >= 86400) {\n      dateData.days = Math.floor(diff / 86400);\n      diff -= dateData.days * 86400;\n    }\n\n    if (diff >= 3600) {\n      dateData.hours = Math.floor(diff / 3600);\n      diff -= dateData.hours * 3600;\n    }\n\n    if (diff >= 60) {\n      dateData.min = Math.floor(diff / 60);\n      diff -= dateData.min * 60;\n    }\n\n    dateData.sec = Math.round(diff);\n\n    dateData.millisec = diff % 1 * 1000;\n\n    return dateData;\n  }.bind(this);\n\n  /**\n   * Add leading zeros to a number\n   * @param  {Number} num    Input number\n   * @param  {Number} length Length of the desired output\n   * @return {String}        String of the desired length with leading zeros\n   */\n  this.leadingZeros = function(num, length) {\n    length = length || 2;\n    num = String(num);\n    if (num.length > length) {\n      return num;\n    }\n    return (Array(length + 1).join('0') + num).substr(-length);\n  };\n\n  /**\n   * Update the end date of the countdown\n   * @param  {Mixed}     newDate Date object or a String/Number that can be passed to the Date constructor\n   * @return {Countdown}         Countdown instance\n   */\n  this.update = function(newDate) {\n    if (typeof newDate !== 'object') {\n      newDate = new Date(newDate);\n    }\n    this.options.date = newDate;\n    this.render();\n    return this;\n  }.bind(this);\n\n  /**\n   * Stop the countdown refresh / rerender\n   * @return {Countdown} Countdown instance\n   */\n  this.stop = function() {\n    if (this.interval) {\n      clearInterval(this.interval);\n      this.interval = false;\n    }\n    return this;\n  }.bind(this);\n\n  /**\n   * Render the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.render = function() {\n    this.options.render(this.getDiffDate());\n    return this;\n  }.bind(this);\n\n  /**\n   * Start the countdown\n   * @return {Countdown} Countdown instance\n   */\n  this.start = function() {\n    // don't start if the countdown is already started\n    if (this.interval) { return; }\n\n    this.render();\n\n    if (this.options.refresh) {\n      this.interval = setInterval(this.render, this.options.refresh);\n    }\n\n    return this;\n  }.bind(this);\n\n  /**\n   * Update the offset\n   * @param  {Number}    offset New offset in ms\n   * @return {Countdown}        Countdown instance\n   */\n  this.updateOffset = function(offset) {\n    this.options.offset = offset;\n    return this;\n  }.bind(this);\n\n\n  // initial start of the countdown or initial render\n  this.start();\n};\n\nmodule.exports = Countdown;\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/countdown/src/jquery-wrapper.js",
    "content": "var Countdown = require('./countdown.js');\nvar NAME = 'countdown';\nvar DATA_ATTR = 'date';\n\njQuery.fn.countdown = function(options) {\n  return $.each(this, function(i, el) {\n    var $el = $(el);\n    if (!$el.data(NAME)) {\n      // allow setting the date via the data-date attribute\n      if ($el.data(DATA_ATTR)) {\n        options.date = $el.data(DATA_ATTR);\n      }\n      $el.data(NAME, new Countdown(el, options));\n    }\n  });\n};\n\nmodule.exports = Countdown;\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/cropper/cropper.css",
    "content": "/*!\n * Cropper v0.7.0\n * https://github.com/fengyuanchen/cropper\n *\n * Copyright 2014 Fengyuan Chen\n * Released under the MIT license\n */\n\n.cropper-container {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\n\n.cropper-container {\n  position: relative;\n  overflow: hidden;\n  background-color: #fff;\n}\n\n.cropper-container > img {\n  width: 100%;\n  height: 100%;\n}\n\n.cropper-modal,\n.cropper-canvas {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n}\n\n.cropper-canvas {\n  background-color: #fff;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n\n.cropper-modal {\n  background-color: #000;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n\n.cropper-dragger {\n  position: absolute;\n  top: 10%;\n  left: 10%;\n  width: 80%;\n  height: 80%;\n}\n\n.cropper-viewer {\n  display: block;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline-width: 1px;\n  outline-style: solid;\n  outline-color: #69f;\n  outline-color: rgba(51, 102, 255, .75);\n}\n\n.cropper-viewer > img {\n  max-width: none !important;\n  max-height: none !important;\n}\n\n.cropper-dashed {\n  position: absolute;\n  display: block;\n  filter: alpha(opacity=50);\n  border: 0 dashed #fff;\n  opacity: .5;\n}\n\n.cropper-dashed.dashed-h {\n  top: 33.3%;\n  left: 0;\n  width: 100%;\n  height: 33.3%;\n  border-top-width: 1px;\n  border-bottom-width: 1px;\n}\n\n.cropper-dashed.dashed-v {\n  top: 0;\n  left: 33.3%;\n  width: 33.3%;\n  height: 100%;\n  border-right-width: 1px;\n  border-left-width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n  position: absolute;\n  display: block;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=10);\n  opacity: .1;\n}\n\n.cropper-face {\n  top: 0;\n  left: 0;\n  cursor: move;\n  background-color: #fff;\n}\n\n.cropper-line {\n  background-color: #69f;\n}\n\n.cropper-line.line-e {\n  top: 0;\n  right: -3px;\n  width: 5px;\n  cursor: e-resize;\n}\n\n.cropper-line.line-n {\n  top: -3px;\n  left: 0;\n  height: 5px;\n  cursor: n-resize;\n}\n\n.cropper-line.line-w {\n  top: 0;\n  left: -3px;\n  width: 5px;\n  cursor: w-resize;\n}\n\n.cropper-line.line-s {\n  bottom: -3px;\n  left: 0;\n  height: 5px;\n  cursor: s-resize;\n}\n\n.cropper-point {\n  width: 5px;\n  height: 5px;\n  background-color: #69f;\n  filter: alpha(opacity=75);\n  opacity: .75;\n}\n\n.cropper-point.point-e {\n  top: 50%;\n  right: -3px;\n  margin-top: -3px;\n  cursor: e-resize;\n}\n\n.cropper-point.point-n {\n  top: -3px;\n  left: 50%;\n  margin-left: -3px;\n  cursor: n-resize;\n}\n\n.cropper-point.point-w {\n  top: 50%;\n  left: -3px;\n  margin-top: -3px;\n  cursor: w-resize;\n}\n\n.cropper-point.point-s {\n  bottom: -3px;\n  left: 50%;\n  margin-left: -3px;\n  cursor: s-resize;\n}\n\n.cropper-point.point-ne {\n  top: -3px;\n  right: -3px;\n  cursor: ne-resize;\n}\n\n.cropper-point.point-nw {\n  top: -3px;\n  left: -3px;\n  cursor: nw-resize;\n}\n\n.cropper-point.point-sw {\n  bottom: -3px;\n  left: -3px;\n  cursor: sw-resize;\n}\n\n.cropper-point.point-se {\n  right: -3px;\n  bottom: -3px;\n  width: 20px;\n  height: 20px;\n  cursor: se-resize;\n  filter: alpha(opacity=100);\n  opacity: 1;\n}\n\n.cropper-point.point-se:before {\n  position: absolute;\n  right: -50%;\n  bottom: -50%;\n  display: block;\n  width: 200%;\n  height: 200%;\n  content: \" \";\n  background-color: #69f;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n\n@media (min-width: 768px) {\n  .cropper-point.point-se {\n    width: 15px;\n    height: 15px;\n  }\n}\n\n@media (min-width: 992px) {\n  .cropper-point.point-se {\n    width: 10px;\n    height: 10px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .cropper-point.point-se {\n    width: 5px;\n    height: 5px;\n    filter: alpha(opacity=75);\n    opacity: .75;\n  }\n}\n\n/* Helper classes for JavaScript */\n\n.cropper-hidden {\n  display: none !important;\n}\n\n.cropper-invisible {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: -1;\n  width: auto !important;\n  max-width: none !important;\n  height: auto !important;\n  max-height: none !important;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n\n.cropper-move {\n  cursor: move;\n}\n\n.cropper-crop {\n  cursor: crosshair;\n}\n\n.cropper-disabled .cropper-canvas,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n  cursor: not-allowed;\n}\n\n\n\n\n\n.preview {\n  float: left;\n  margin-right: 15px;\n  margin-bottom: 15px;\n  overflow: hidden;\n  background: #f7f7f7;\n}\n\n.preview-lg {\n  width: 290px;\n  height: 160px;\n}\n\n.preview-md {\n  width: 145px;\n  height: 90px;\n}\n\n.preview-sm {\n  width: 72.5px;\n  height: 45px;\n}\n\n.preview-xs {\n  width: 36.25px;\n  height: 22.5px;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/cropper/cropper.js",
    "content": "/*!\n * Cropper v0.11.1\n * https://github.com/fengyuanchen/cropper\n *\n * Copyright (c) 2014-2015 Fengyuan Chen and contributors\n * Released under the MIT license\n *\n * Date: 2015-08-22T04:55:04.780Z\n */\n\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    // Node / CommonJS\n    factory(require('jquery'));\n  } else {\n    // Browser globals.\n    factory(jQuery);\n  }\n})(function ($) {\n\n  'use strict';\n\n  // Globals\n  var $window = $(window);\n  var $document = $(document);\n  var location = window.location;\n\n  // Constants\n  var NAMESPACE = 'cropper';\n  var PREVIEW = 'preview.' + NAMESPACE;\n\n  // Classes\n  var CLASS_MODAL = 'cropper-modal';\n  var CLASS_HIDE = 'cropper-hide';\n  var CLASS_HIDDEN = 'cropper-hidden';\n  var CLASS_INVISIBLE = 'cropper-invisible';\n  var CLASS_MOVE = 'cropper-move';\n  var CLASS_CROP = 'cropper-crop';\n  var CLASS_DISABLED = 'cropper-disabled';\n  var CLASS_BG = 'cropper-bg';\n\n  // Events\n  var EVENT_MOUSE_DOWN = 'mousedown touchstart pointerdown MSPointerDown';\n  var EVENT_MOUSE_MOVE = 'mousemove touchmove pointermove MSPointerMove';\n  var EVENT_MOUSE_UP = 'mouseup touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel';\n  var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll';\n  var EVENT_DBLCLICK = 'dblclick';\n  var EVENT_LOAD = 'load.' + NAMESPACE;\n  var EVENT_ERROR = 'error.' + NAMESPACE;\n  var EVENT_RESIZE = 'resize.' + NAMESPACE; // Bind to window with namespace\n  var EVENT_BUILD = 'build.' + NAMESPACE;\n  var EVENT_BUILT = 'built.' + NAMESPACE;\n  var EVENT_CROP_START = 'cropstart.' + NAMESPACE;\n  var EVENT_CROP_MOVE = 'cropmove.' + NAMESPACE;\n  var EVENT_CROP_END = 'cropend.' + NAMESPACE;\n  var EVENT_CROP = 'crop.' + NAMESPACE;\n  var EVENT_ZOOM = 'zoom.' + NAMESPACE;\n\n  // RegExps\n  var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/;\n\n  // Actions\n  var ACTION_EAST = 'e';\n  var ACTION_WEST = 'w';\n  var ACTION_SOUTH = 's';\n  var ACTION_NORTH = 'n';\n  var ACTION_SOUTH_EAST = 'se';\n  var ACTION_SOUTH_WEST = 'sw';\n  var ACTION_NORTH_EAST = 'ne';\n  var ACTION_NORTH_WEST = 'nw';\n  var ACTION_ALL = 'all';\n  var ACTION_CROP = 'crop';\n  var ACTION_MOVE = 'move';\n  var ACTION_ZOOM = 'zoom';\n  var ACTION_NONE = 'none';\n\n  // Supports\n  var SUPPORT_CANVAS = $.isFunction($('<canvas>')[0].getContext);\n\n  // Maths\n  var sqrt = Math.sqrt;\n  var min = Math.min;\n  var max = Math.max;\n  var abs = Math.abs;\n  var sin = Math.sin;\n  var cos = Math.cos;\n  var num = parseFloat;\n\n  // Prototype\n  var prototype = {};\n\n  function isNumber(n) {\n    return typeof n === 'number' && !isNaN(n);\n  }\n\n  function isUndefined(n) {\n    return typeof n === 'undefined';\n  }\n\n  function toArray(obj, offset) {\n    var args = [];\n\n    // This is necessary for IE8\n    if (isNumber(offset)) {\n      args.push(offset);\n    }\n\n    return args.slice.apply(obj, args);\n  }\n\n  // Custom proxy to avoid jQuery's guid\n  function proxy(fn, context) {\n    var args = toArray(arguments, 2);\n\n    return function () {\n      return fn.apply(context, args.concat(toArray(arguments)));\n    };\n  }\n\n  function isCrossOriginURL(url) {\n    var parts = url.match(/^(https?:)\\/\\/([^\\:\\/\\?#]+):?(\\d*)/i);\n\n    return parts && (\n      parts[1] !== location.protocol ||\n      parts[2] !== location.hostname ||\n      parts[3] !== location.port\n    );\n  }\n\n  function addTimestamp(url) {\n    var timestamp = 'timestamp=' + (new Date()).getTime();\n\n    return (url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp);\n  }\n\n  function getImageData(image) {\n    var naturalWidth = image.naturalWidth;\n    var naturalHeight = image.naturalHeight;\n    var newImage;\n\n    // IE8\n    if (!naturalWidth) {\n      newImage = new Image();\n      newImage.src = image.src;\n      naturalWidth = newImage.width;\n      naturalHeight = newImage.height;\n    }\n\n    return {\n      naturalWidth: naturalWidth,\n      naturalHeight: naturalHeight,\n      aspectRatio: naturalWidth / naturalHeight\n    };\n  }\n\n  function getTransform(options) {\n    var transforms = [];\n    var rotate = options.rotate;\n    var scaleX = options.scaleX;\n    var scaleY = options.scaleY;\n\n    if (isNumber(rotate)) {\n      transforms.push('rotate(' + rotate + 'deg)');\n    }\n\n    if (isNumber(scaleX) && isNumber(scaleY)) {\n      transforms.push('scale(' + scaleX + ',' + scaleY + ')');\n    }\n\n    return transforms.length ? transforms.join(' ') : 'none';\n  }\n\n  function getRotatedSizes(data, reverse) {\n    var deg = abs(data.degree) % 180;\n    var arc = (deg > 90 ? (180 - deg) : deg) * Math.PI / 180;\n    var sinArc = sin(arc);\n    var cosArc = cos(arc);\n    var width = data.width;\n    var height = data.height;\n    var aspectRatio = data.aspectRatio;\n    var newWidth;\n    var newHeight;\n\n    if (!reverse) {\n      newWidth = width * cosArc + height * sinArc;\n      newHeight = width * sinArc + height * cosArc;\n    } else {\n      newWidth = width / (cosArc + sinArc / aspectRatio);\n      newHeight = newWidth / aspectRatio;\n    }\n\n    return {\n      width: newWidth,\n      height: newHeight\n    };\n  }\n\n  function getSourceCanvas(image, data) {\n    var canvas = $('<canvas>')[0];\n    var context = canvas.getContext('2d');\n    var x = 0;\n    var y = 0;\n    var width = data.naturalWidth;\n    var height = data.naturalHeight;\n    var rotate = data.rotate;\n    var scaleX = data.scaleX;\n    var scaleY = data.scaleY;\n    var scalable = isNumber(scaleX) && isNumber(scaleY) && (scaleX !== 1 || scaleY !== 1);\n    var rotatable = isNumber(rotate) && rotate !== 0;\n    var advanced = rotatable || scalable;\n    var canvasWidth = width;\n    var canvasHeight = height;\n    var translateX;\n    var translateY;\n    var rotated;\n\n    if (scalable) {\n      translateX = width / 2;\n      translateY = height / 2;\n    }\n\n    if (rotatable) {\n      rotated = getRotatedSizes({\n        width: width,\n        height: height,\n        degree: rotate\n      });\n\n      canvasWidth = rotated.width;\n      canvasHeight = rotated.height;\n      translateX = rotated.width / 2;\n      translateY = rotated.height / 2;\n    }\n\n    canvas.width = canvasWidth;\n    canvas.height = canvasHeight;\n\n    if (advanced) {\n      x = -width / 2;\n      y = -height / 2;\n\n      context.save();\n      context.translate(translateX, translateY);\n    }\n\n    if (rotatable) {\n      context.rotate(rotate * Math.PI / 180);\n    }\n\n    // Should call `scale` after rotated\n    if (scalable) {\n      context.scale(scaleX, scaleY);\n    }\n\n    context.drawImage(image, x, y, width, height);\n\n    if (advanced) {\n      context.restore();\n    }\n\n    return canvas;\n  }\n\n  function Cropper(element, options) {\n    this.$element = $(element);\n    this.options = $.extend({}, Cropper.DEFAULTS, $.isPlainObject(options) && options);\n    this.ready = false;\n    this.built = false;\n    this.complete = false;\n    this.rotated = false;\n    this.cropped = false;\n    this.disabled = false;\n    this.replaced = false;\n    this.isImg = false;\n    this.originalUrl = '';\n    this.canvas = null;\n    this.cropBox = null;\n    this.init();\n  }\n\n  $.extend(prototype, {\n    init: function () {\n      var $this = this.$element;\n      var url;\n\n      if ($this.is('img')) {\n        this.isImg = true;\n\n        // Should use `$.fn.attr` here. e.g.: \"img/picture.jpg\"\n        this.originalUrl = url = $this.attr('src');\n\n        // Stop when it's a blank image\n        if (!url) {\n          return;\n        }\n\n        // Should use `$.fn.prop` here. e.g.: \"http://example.com/img/picture.jpg\"\n        url = $this.prop('src');\n      } else if ($this.is('canvas') && SUPPORT_CANVAS) {\n        url = $this[0].toDataURL();\n      }\n\n      this.load(url);\n    },\n\n    // A shortcut for triggering custom events\n    trigger: function (type, data) {\n      var e = $.Event(type, data);\n\n      this.$element.trigger(e);\n\n      return e.isDefaultPrevented();\n    },\n\n    load: function (url) {\n      var options = this.options;\n      var $this = this.$element;\n      var crossOrigin = '';\n      var bustCacheUrl;\n      var $clone;\n\n      if (!url) {\n        return;\n      }\n\n      this.url = url;\n\n      // Trigger build event first\n      $this.one(EVENT_BUILD, options.build);\n\n      if (this.trigger(EVENT_BUILD)) {\n        return;\n      }\n\n      if (options.checkImageOrigin && isCrossOriginURL(url)) {\n        crossOrigin = ' crossOrigin=\"anonymous\"';\n\n        // Bust cache (#148), only when there was not a \"crossOrigin\" property\n        if (!$this.prop('crossOrigin')) {\n          bustCacheUrl = addTimestamp(url);\n        }\n      }\n\n      this.$clone = $clone = $('<img' + crossOrigin + ' src=\"' + (bustCacheUrl || url) + '\">');\n\n      if (this.isImg) {\n        if ($this[0].complete) {\n          this.start();\n        } else {\n          $this.one(EVENT_LOAD, $.proxy(this.start, this));\n        }\n      } else {\n        $clone.\n          one(EVENT_LOAD, $.proxy(this.start, this)).\n          one(EVENT_ERROR, $.proxy(this.stop, this)).\n          addClass(CLASS_HIDE).\n          insertAfter($this);\n      }\n    },\n\n    start: function () {\n      this.image = getImageData(this.isImg ? this.$element[0] : this.$clone[0]);\n      this.ready = true;\n      this.build();\n    },\n\n    stop: function () {\n      this.$clone.remove();\n      this.$clone = null;\n    }\n  });\n\n  $.extend(prototype, {\n    build: function () {\n      var options = this.options;\n      var $this = this.$element;\n      var $clone = this.$clone;\n      var $cropper;\n      var $cropBox;\n      var $face;\n\n      if (!this.ready) {\n        return;\n      }\n\n      // Unbuild first when replace\n      if (this.built) {\n        this.unbuild();\n      }\n\n      // Create cropper elements\n      this.$container = $this.parent();\n      this.$cropper = $cropper = $(Cropper.TEMPLATE);\n      this.$canvas = $cropper.find('.cropper-canvas').append($clone);\n      this.$dragBox = $cropper.find('.cropper-drag-box');\n      this.$cropBox = $cropBox = $cropper.find('.cropper-crop-box');\n      this.$viewBox = $cropper.find('.cropper-view-box');\n      this.$face = $face = $cropBox.find('.cropper-face');\n\n      // Hide the original image\n      $this.addClass(CLASS_HIDDEN).after($cropper);\n\n      // Show the clone image if is hidden\n      if (!this.isImg) {\n        $clone.removeClass(CLASS_HIDE);\n      }\n\n      this.initPreview();\n      this.bind();\n\n      // Format aspect ratio (0 -> NaN)\n      options.aspectRatio = num(options.aspectRatio) || NaN;\n\n      if (options.autoCrop) {\n        this.cropped = true;\n\n        if (options.modal) {\n          this.$dragBox.addClass(CLASS_MODAL);\n        }\n      } else {\n        $cropBox.addClass(CLASS_HIDDEN);\n      }\n\n      if (!options.guides) {\n        $cropBox.find('.cropper-dashed').addClass(CLASS_HIDDEN);\n      }\n\n      if (!options.center) {\n        $cropBox.find('.cropper-center').addClass(CLASS_HIDDEN);\n      }\n\n      if (options.cropBoxMovable) {\n        $face.addClass(CLASS_MOVE).data('action', ACTION_ALL);\n      }\n\n      if (!options.highlight) {\n        $face.addClass(CLASS_INVISIBLE);\n      }\n\n      if (options.background) {\n        $cropper.addClass(CLASS_BG);\n      }\n\n      if (!options.cropBoxResizable) {\n        $cropBox.find('.cropper-line, .cropper-point').addClass(CLASS_HIDDEN);\n      }\n\n      this.setDragMode(options.dragCrop ? ACTION_CROP : (options.movable ? ACTION_MOVE : ACTION_NONE));\n\n      this.render();\n      this.built = true;\n      this.setData(options.data);\n      $this.one(EVENT_BUILT, options.built);\n\n      // Trigger the built event asynchronously to keep `data('cropper')` is defined\n      setTimeout($.proxy(function () {\n        this.trigger(EVENT_BUILT);\n        this.complete = true;\n      }, this), 0);\n    },\n\n    unbuild: function () {\n      if (!this.built) {\n        return;\n      }\n\n      this.built = false;\n      this.initialImage = null;\n\n      // Clear `initialCanvas` is necessary when replace\n      this.initialCanvas = null;\n      this.initialCropBox = null;\n      this.container = null;\n      this.canvas = null;\n\n      // Clear `cropBox` is necessary when replace\n      this.cropBox = null;\n      this.unbind();\n\n      this.resetPreview();\n      this.$preview = null;\n\n      this.$viewBox = null;\n      this.$cropBox = null;\n      this.$dragBox = null;\n      this.$canvas = null;\n      this.$container = null;\n\n      this.$cropper.remove();\n      this.$cropper = null;\n    }\n  });\n\n  $.extend(prototype, {\n    render: function () {\n      this.initContainer();\n      this.initCanvas();\n      this.initCropBox();\n\n      this.renderCanvas();\n\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    },\n\n    initContainer: function () {\n      var options = this.options;\n      var $this = this.$element;\n      var $container = this.$container;\n      var $cropper = this.$cropper;\n\n      $cropper.addClass(CLASS_HIDDEN);\n      $this.removeClass(CLASS_HIDDEN);\n\n      $cropper.css((this.container = {\n        width: max($container.width(), num(options.minContainerWidth) || 200),\n        height: max($container.height(), num(options.minContainerHeight) || 100)\n      }));\n\n      $this.addClass(CLASS_HIDDEN);\n      $cropper.removeClass(CLASS_HIDDEN);\n    },\n\n    // Canvas (image wrapper)\n    initCanvas: function () {\n      var container = this.container;\n      var containerWidth = container.width;\n      var containerHeight = container.height;\n      var image = this.image;\n      var aspectRatio = image.aspectRatio;\n      var canvas = {\n            aspectRatio: aspectRatio,\n            width: containerWidth,\n            height: containerHeight\n          };\n\n      if (containerHeight * aspectRatio > containerWidth) {\n        canvas.height = containerWidth / aspectRatio;\n      } else {\n        canvas.width = containerHeight * aspectRatio;\n      }\n\n      canvas.oldLeft = canvas.left = (containerWidth - canvas.width) / 2;\n      canvas.oldTop = canvas.top = (containerHeight - canvas.height) / 2;\n\n      this.canvas = canvas;\n      this.limitCanvas(true, true);\n      this.initialImage = $.extend({}, image);\n      this.initialCanvas = $.extend({}, canvas);\n    },\n\n    limitCanvas: function (size, position) {\n      var options = this.options;\n      var strict = options.strict;\n      var container = this.container;\n      var containerWidth = container.width;\n      var containerHeight = container.height;\n      var canvas = this.canvas;\n      var aspectRatio = canvas.aspectRatio;\n      var cropBox = this.cropBox;\n      var cropped = this.cropped && cropBox;\n      var initialCanvas = this.initialCanvas || canvas;\n      var initialCanvasWidth = initialCanvas.width;\n      var initialCanvasHeight = initialCanvas.height;\n      var minCanvasWidth;\n      var minCanvasHeight;\n\n      if (size) {\n        minCanvasWidth = num(options.minCanvasWidth) || 0;\n        minCanvasHeight = num(options.minCanvasHeight) || 0;\n\n        if (minCanvasWidth) {\n          if (strict) {\n            minCanvasWidth = max(cropped ? cropBox.width : initialCanvasWidth, minCanvasWidth);\n          }\n\n          minCanvasHeight = minCanvasWidth / aspectRatio;\n        } else if (minCanvasHeight) {\n          if (strict) {\n            minCanvasHeight = max(cropped ? cropBox.height : initialCanvasHeight, minCanvasHeight);\n          }\n\n          minCanvasWidth = minCanvasHeight * aspectRatio;\n        } else if (strict) {\n          if (cropped) {\n            minCanvasWidth = cropBox.width;\n            minCanvasHeight = cropBox.height;\n\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          } else {\n            minCanvasWidth = initialCanvasWidth;\n            minCanvasHeight = initialCanvasHeight;\n          }\n        }\n\n        $.extend(canvas, {\n          minWidth: minCanvasWidth,\n          minHeight: minCanvasHeight,\n          maxWidth: Infinity,\n          maxHeight: Infinity\n        });\n      }\n\n      if (position) {\n        if (strict) {\n          if (cropped) {\n            canvas.minLeft = min(cropBox.left, (cropBox.left + cropBox.width) - canvas.width);\n            canvas.minTop = min(cropBox.top, (cropBox.top + cropBox.height) - canvas.height);\n            canvas.maxLeft = cropBox.left;\n            canvas.maxTop = cropBox.top;\n          } else {\n            canvas.minLeft = min(0, containerWidth - canvas.width);\n            canvas.minTop = min(0, containerHeight - canvas.height);\n            canvas.maxLeft = max(0, containerWidth - canvas.width);\n            canvas.maxTop = max(0, containerHeight - canvas.height);\n          }\n        } else {\n          canvas.minLeft = -canvas.width;\n          canvas.minTop = -canvas.height;\n          canvas.maxLeft = containerWidth;\n          canvas.maxTop = containerHeight;\n        }\n      }\n    },\n\n    renderCanvas: function (changed) {\n      var options = this.options;\n      var canvas = this.canvas;\n      var image = this.image;\n      var aspectRatio;\n      var rotated;\n\n      if (this.rotated) {\n        this.rotated = false;\n\n        // Computes rotated sizes with image sizes\n        rotated = getRotatedSizes({\n          width: image.width,\n          height: image.height,\n          degree: image.rotate\n        });\n\n        aspectRatio = rotated.width / rotated.height;\n\n        if (aspectRatio !== canvas.aspectRatio) {\n          canvas.left -= (rotated.width - canvas.width) / 2;\n          canvas.top -= (rotated.height - canvas.height) / 2;\n          canvas.width = rotated.width;\n          canvas.height = rotated.height;\n          canvas.aspectRatio = aspectRatio;\n          this.limitCanvas(true, false);\n        }\n      }\n\n      if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) {\n        canvas.left = canvas.oldLeft;\n      }\n\n      if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) {\n        canvas.top = canvas.oldTop;\n      }\n\n      canvas.width = min(max(canvas.width, canvas.minWidth), canvas.maxWidth);\n      canvas.height = min(max(canvas.height, canvas.minHeight), canvas.maxHeight);\n\n      this.limitCanvas(false, true);\n\n      canvas.oldLeft = canvas.left = min(max(canvas.left, canvas.minLeft), canvas.maxLeft);\n      canvas.oldTop = canvas.top = min(max(canvas.top, canvas.minTop), canvas.maxTop);\n\n      this.$canvas.css({\n        width: canvas.width,\n        height: canvas.height,\n        left: canvas.left,\n        top: canvas.top\n      });\n\n      this.renderImage();\n\n      if (this.cropped && options.strict) {\n        this.limitCropBox(true, true);\n      }\n\n      if (changed) {\n        this.output();\n      }\n    },\n\n    renderImage: function (changed) {\n      var canvas = this.canvas;\n      var image = this.image;\n      var reversed;\n\n      if (image.rotate) {\n        reversed = getRotatedSizes({\n          width: canvas.width,\n          height: canvas.height,\n          degree: image.rotate,\n          aspectRatio: image.aspectRatio\n        }, true);\n      }\n\n      $.extend(image, reversed ? {\n        width: reversed.width,\n        height: reversed.height,\n        left: (canvas.width - reversed.width) / 2,\n        top: (canvas.height - reversed.height) / 2\n      } : {\n        width: canvas.width,\n        height: canvas.height,\n        left: 0,\n        top: 0\n      });\n\n      this.$clone.css({\n        width: image.width,\n        height: image.height,\n        marginLeft: image.left,\n        marginTop: image.top,\n        transform: getTransform(image)\n      });\n\n      if (changed) {\n        this.output();\n      }\n    },\n\n    initCropBox: function () {\n      var options = this.options;\n      var canvas = this.canvas;\n      var aspectRatio = options.aspectRatio;\n      var autoCropArea = num(options.autoCropArea) || 0.8;\n      var cropBox = {\n            width: canvas.width,\n            height: canvas.height\n          };\n\n      if (aspectRatio) {\n        if (canvas.height * aspectRatio > canvas.width) {\n          cropBox.height = cropBox.width / aspectRatio;\n        } else {\n          cropBox.width = cropBox.height * aspectRatio;\n        }\n      }\n\n      this.cropBox = cropBox;\n      this.limitCropBox(true, true);\n\n      // Initialize auto crop area\n      cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth);\n      cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight);\n\n      // The width of auto crop area must large than \"minWidth\", and the height too. (#164)\n      cropBox.width = max(cropBox.minWidth, cropBox.width * autoCropArea);\n      cropBox.height = max(cropBox.minHeight, cropBox.height * autoCropArea);\n      cropBox.oldLeft = cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2;\n      cropBox.oldTop = cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2;\n\n      this.initialCropBox = $.extend({}, cropBox);\n    },\n\n    limitCropBox: function (size, position) {\n      var options = this.options;\n      var strict = options.strict;\n      var container = this.container;\n      var containerWidth = container.width;\n      var containerHeight = container.height;\n      var canvas = this.canvas;\n      var cropBox = this.cropBox;\n      var aspectRatio = options.aspectRatio;\n      var minCropBoxWidth;\n      var minCropBoxHeight;\n\n      if (size) {\n        minCropBoxWidth = num(options.minCropBoxWidth) || 0;\n        minCropBoxHeight = num(options.minCropBoxHeight) || 0;\n\n        // The min/maxCropBoxWidth/Height must less than container width/height\n        cropBox.minWidth = min(containerWidth, minCropBoxWidth);\n        cropBox.minHeight = min(containerHeight, minCropBoxHeight);\n        cropBox.maxWidth = min(containerWidth, strict ? canvas.width : containerWidth);\n        cropBox.maxHeight = min(containerHeight, strict ? canvas.height : containerHeight);\n\n        if (aspectRatio) {\n\n          // Compare crop box size with container first\n          if (cropBox.maxHeight * aspectRatio > cropBox.maxWidth) {\n            cropBox.minHeight = cropBox.minWidth / aspectRatio;\n            cropBox.maxHeight = cropBox.maxWidth / aspectRatio;\n          } else {\n            cropBox.minWidth = cropBox.minHeight * aspectRatio;\n            cropBox.maxWidth = cropBox.maxHeight * aspectRatio;\n          }\n        }\n\n        // The \"minWidth\" must be less than \"maxWidth\", and the \"minHeight\" too.\n        cropBox.minWidth = min(cropBox.maxWidth, cropBox.minWidth);\n        cropBox.minHeight = min(cropBox.maxHeight, cropBox.minHeight);\n      }\n\n      if (position) {\n        if (strict) {\n          cropBox.minLeft = max(0, canvas.left);\n          cropBox.minTop = max(0, canvas.top);\n          cropBox.maxLeft = min(containerWidth, canvas.left + canvas.width) - cropBox.width;\n          cropBox.maxTop = min(containerHeight, canvas.top + canvas.height) - cropBox.height;\n        } else {\n          cropBox.minLeft = 0;\n          cropBox.minTop = 0;\n          cropBox.maxLeft = containerWidth - cropBox.width;\n          cropBox.maxTop = containerHeight - cropBox.height;\n        }\n      }\n    },\n\n    renderCropBox: function () {\n      var options = this.options;\n      var container = this.container;\n      var containerWidth = container.width;\n      var containerHeight = container.height;\n      var cropBox = this.cropBox;\n\n      if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) {\n        cropBox.left = cropBox.oldLeft;\n      }\n\n      if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) {\n        cropBox.top = cropBox.oldTop;\n      }\n\n      cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth);\n      cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight);\n\n      this.limitCropBox(false, true);\n\n      cropBox.oldLeft = cropBox.left = min(max(cropBox.left, cropBox.minLeft), cropBox.maxLeft);\n      cropBox.oldTop = cropBox.top = min(max(cropBox.top, cropBox.minTop), cropBox.maxTop);\n\n      if (options.movable && options.cropBoxMovable) {\n\n        // Turn to move the canvas when the crop box is equal to the container\n        this.$face.data('action', (cropBox.width === containerWidth && cropBox.height === containerHeight) ? ACTION_MOVE : ACTION_ALL);\n      }\n\n      this.$cropBox.css({\n        width: cropBox.width,\n        height: cropBox.height,\n        left: cropBox.left,\n        top: cropBox.top\n      });\n\n      if (this.cropped && options.strict) {\n        this.limitCanvas(true, true);\n      }\n\n      if (!this.disabled) {\n        this.output();\n      }\n    },\n\n    output: function () {\n      this.preview();\n\n      if (this.complete) {\n        this.trigger(EVENT_CROP, this.getData());\n      } else if (!this.built) {\n\n        // Only trigger one crop event before complete\n        this.$element.one(EVENT_BUILT, $.proxy(function () {\n          this.trigger(EVENT_CROP, this.getData());\n        }, this));\n      }\n    }\n  });\n\n  $.extend(prototype, {\n    initPreview: function () {\n      var url = this.url;\n\n      this.$preview = $(this.options.preview);\n      this.$viewBox.html('<img src=\"' + url + '\">');\n      this.$preview.each(function () {\n        var $this = $(this);\n\n        // Save the original size for recover\n        $this.data(PREVIEW, {\n          width: $this.width(),\n          height: $this.height(),\n          original: $this.html()\n        });\n\n        /**\n         * Override img element styles\n         * Add `display:block` to avoid margin top issue\n         * (Occur only when margin-top <= -height)\n         */\n        $this.html(\n          '<img src=\"' + url + '\" style=\"display:block;width:100%;' +\n          'min-width:0!important;min-height:0!important;' +\n          'max-width:none!important;max-height:none!important;' +\n          'image-orientation:0deg!important\">'\n        );\n      });\n    },\n\n    resetPreview: function () {\n      this.$preview.each(function () {\n        var $this = $(this);\n\n        $this.html($this.data(PREVIEW).original).removeData(PREVIEW);\n      });\n    },\n\n    preview: function () {\n      var image = this.image;\n      var canvas = this.canvas;\n      var cropBox = this.cropBox;\n      var width = image.width;\n      var height = image.height;\n      var left = cropBox.left - canvas.left - image.left;\n      var top = cropBox.top - canvas.top - image.top;\n\n      if (!this.cropped || this.disabled) {\n        return;\n      }\n\n      this.$viewBox.find('img').css({\n        width: width,\n        height: height,\n        marginLeft: -left,\n        marginTop: -top,\n        transform: getTransform(image)\n      });\n\n      this.$preview.each(function () {\n        var $this = $(this);\n        var data = $this.data(PREVIEW);\n        var ratio = data.width / cropBox.width;\n        var newWidth = data.width;\n        var newHeight = cropBox.height * ratio;\n\n        if (newHeight > data.height) {\n          ratio = data.height / cropBox.height;\n          newWidth = cropBox.width * ratio;\n          newHeight = data.height;\n        }\n\n        $this.width(newWidth).height(newHeight).find('img').css({\n          width: width * ratio,\n          height: height * ratio,\n          marginLeft: -left * ratio,\n          marginTop: -top * ratio,\n          transform: getTransform(image)\n        });\n      });\n    }\n  });\n\n  $.extend(prototype, {\n    bind: function () {\n      var options = this.options;\n      var $this = this.$element;\n      var $cropper = this.$cropper;\n\n      if ($.isFunction(options.cropstart)) {\n        $this.on(EVENT_CROP_START, options.cropstart);\n      }\n\n      if ($.isFunction(options.cropmove)) {\n        $this.on(EVENT_CROP_MOVE, options.cropmove);\n      }\n\n      if ($.isFunction(options.cropend)) {\n        $this.on(EVENT_CROP_END, options.cropend);\n      }\n\n      if ($.isFunction(options.crop)) {\n        $this.on(EVENT_CROP, options.crop);\n      }\n\n      if ($.isFunction(options.zoom)) {\n        $this.on(EVENT_ZOOM, options.zoom);\n      }\n\n      $cropper.on(EVENT_MOUSE_DOWN, $.proxy(this.cropStart, this));\n\n      if (options.zoomable && options.mouseWheelZoom) {\n        $cropper.on(EVENT_WHEEL, $.proxy(this.wheel, this));\n      }\n\n      if (options.doubleClickToggle) {\n        $cropper.on(EVENT_DBLCLICK, $.proxy(this.dblclick, this));\n      }\n\n      $document.\n        on(EVENT_MOUSE_MOVE, (this._cropMove = proxy(this.cropMove, this))).\n        on(EVENT_MOUSE_UP, (this._cropEnd = proxy(this.cropEnd, this)));\n\n      if (options.responsive) {\n        $window.on(EVENT_RESIZE, (this._resize = proxy(this.resize, this)));\n      }\n    },\n\n    unbind: function () {\n      var options = this.options;\n      var $this = this.$element;\n      var $cropper = this.$cropper;\n\n      if ($.isFunction(options.cropstart)) {\n        $this.off(EVENT_CROP_START, options.cropstart);\n      }\n\n      if ($.isFunction(options.cropmove)) {\n        $this.off(EVENT_CROP_MOVE, options.cropmove);\n      }\n\n      if ($.isFunction(options.cropend)) {\n        $this.off(EVENT_CROP_END, options.cropend);\n      }\n\n      if ($.isFunction(options.crop)) {\n        $this.off(EVENT_CROP, options.crop);\n      }\n\n      if ($.isFunction(options.zoom)) {\n        $this.off(EVENT_ZOOM, options.zoom);\n      }\n\n      $cropper.off(EVENT_MOUSE_DOWN, this.cropStart);\n\n      if (options.zoomable && options.mouseWheelZoom) {\n        $cropper.off(EVENT_WHEEL, this.wheel);\n      }\n\n      if (options.doubleClickToggle) {\n        $cropper.off(EVENT_DBLCLICK, this.dblclick);\n      }\n\n      $document.\n        off(EVENT_MOUSE_MOVE, this._cropMove).\n        off(EVENT_MOUSE_UP, this._cropEnd);\n\n      if (options.responsive) {\n        $window.off(EVENT_RESIZE, this._resize);\n      }\n    }\n  });\n\n  $.extend(prototype, {\n    resize: function () {\n      var $container = this.$container;\n      var container = this.container;\n      var canvasData;\n      var cropBoxData;\n      var ratio;\n\n      // Check `container` is necessary for IE8\n      if (this.disabled || !container) {\n        return;\n      }\n\n      ratio = $container.width() / container.width;\n\n      // Resize when width changed or height changed\n      if (ratio !== 1 || $container.height() !== container.height) {\n        canvasData = this.getCanvasData();\n        cropBoxData = this.getCropBoxData();\n\n        this.render();\n        this.setCanvasData($.each(canvasData, function (i, n) {\n          canvasData[i] = n * ratio;\n        }));\n        this.setCropBoxData($.each(cropBoxData, function (i, n) {\n          cropBoxData[i] = n * ratio;\n        }));\n      }\n    },\n\n    dblclick: function () {\n      if (this.disabled) {\n        return;\n      }\n\n      if (this.$dragBox.hasClass(CLASS_CROP)) {\n        this.setDragMode(ACTION_MOVE);\n      } else {\n        this.setDragMode(ACTION_CROP);\n      }\n    },\n\n    wheel: function (event) {\n      var originalEvent = event.originalEvent;\n      var e = originalEvent;\n      var ratio = num(this.options.wheelZoomRatio) || 0.1;\n      var delta = 1;\n\n      if (this.disabled) {\n        return;\n      }\n\n      event.preventDefault();\n\n      if (e.deltaY) {\n        delta = e.deltaY > 0 ? 1 : -1;\n      } else if (e.wheelDelta) {\n        delta = -e.wheelDelta / 120;\n      } else if (e.detail) {\n        delta = e.detail > 0 ? 1 : -1;\n      }\n\n      this.zoom(-delta * ratio, originalEvent);\n    },\n\n    cropStart: function (event) {\n      var options = this.options;\n      var originalEvent = event.originalEvent;\n      var touches = originalEvent && originalEvent.touches;\n      var e = event;\n      var touchesLength;\n      var action;\n\n      if (this.disabled) {\n        return;\n      }\n\n      if (touches) {\n        touchesLength = touches.length;\n\n        if (touchesLength > 1) {\n          if (options.zoomable && options.touchDragZoom && touchesLength === 2) {\n            e = touches[1];\n            this.startX2 = e.pageX;\n            this.startY2 = e.pageY;\n            action = ACTION_ZOOM;\n          } else {\n            return;\n          }\n        }\n\n        e = touches[0];\n      }\n\n      action = action || $(e.target).data('action');\n\n      if (REGEXP_ACTIONS.test(action)) {\n        if (this.trigger(EVENT_CROP_START, {\n          originalEvent: originalEvent,\n          action: action\n        })) {\n          return;\n        }\n\n        event.preventDefault();\n\n        this.action = action;\n        this.cropping = false;\n\n        // IE8  has `event.pageX/Y`, but not `event.originalEvent.pageX/Y`\n        // IE10 has `event.originalEvent.pageX/Y`, but not `event.pageX/Y`\n        this.startX = e.pageX || originalEvent && originalEvent.pageX;\n        this.startY = e.pageY || originalEvent && originalEvent.pageY;\n\n        if (action === ACTION_CROP) {\n          this.cropping = true;\n          this.$dragBox.addClass(CLASS_MODAL);\n        }\n      }\n    },\n\n    cropMove: function (event) {\n      var options = this.options;\n      var originalEvent = event.originalEvent;\n      var touches = originalEvent && originalEvent.touches;\n      var e = event;\n      var action = this.action;\n      var touchesLength;\n\n      if (this.disabled) {\n        return;\n      }\n\n      if (touches) {\n        touchesLength = touches.length;\n\n        if (touchesLength > 1) {\n          if (options.zoomable && options.touchDragZoom && touchesLength === 2) {\n            e = touches[1];\n            this.endX2 = e.pageX;\n            this.endY2 = e.pageY;\n          } else {\n            return;\n          }\n        }\n\n        e = touches[0];\n      }\n\n      if (action) {\n        if (this.trigger(EVENT_CROP_MOVE, {\n          originalEvent: originalEvent,\n          action: action\n        })) {\n          return;\n        }\n\n        event.preventDefault();\n\n        this.endX = e.pageX || originalEvent && originalEvent.pageX;\n        this.endY = e.pageY || originalEvent && originalEvent.pageY;\n\n        this.change(e.shiftKey, action === ACTION_ZOOM ? originalEvent : null);\n      }\n    },\n\n    cropEnd: function (event) {\n      var originalEvent = event.originalEvent;\n      var action = this.action;\n\n      if (this.disabled) {\n        return;\n      }\n\n      if (action) {\n        event.preventDefault();\n\n        if (this.cropping) {\n          this.cropping = false;\n          this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal);\n        }\n\n        this.action = '';\n\n        this.trigger(EVENT_CROP_END, {\n          originalEvent: originalEvent,\n          action: action\n        });\n      }\n    }\n  });\n\n  $.extend(prototype, {\n    change: function (shiftKey, originalEvent) {\n      var options = this.options;\n      var aspectRatio = options.aspectRatio;\n      var action = this.action;\n      var container = this.container;\n      var canvas = this.canvas;\n      var cropBox = this.cropBox;\n      var width = cropBox.width;\n      var height = cropBox.height;\n      var left = cropBox.left;\n      var top = cropBox.top;\n      var right = left + width;\n      var bottom = top + height;\n      var minLeft = 0;\n      var minTop = 0;\n      var maxWidth = container.width;\n      var maxHeight = container.height;\n      var renderable = true;\n      var offset;\n      var range;\n\n      // Locking aspect ratio in \"free mode\" by holding shift key (#259)\n      if (!aspectRatio && shiftKey) {\n        aspectRatio = width && height ? width / height : 1;\n      }\n\n      if (options.strict) {\n        minLeft = cropBox.minLeft;\n        minTop = cropBox.minTop;\n        maxWidth = minLeft + min(container.width, canvas.width);\n        maxHeight = minTop + min(container.height, canvas.height);\n      }\n\n      range = {\n        x: this.endX - this.startX,\n        y: this.endY - this.startY\n      };\n\n      if (aspectRatio) {\n        range.X = range.y * aspectRatio;\n        range.Y = range.x / aspectRatio;\n      }\n\n      switch (action) {\n        // Move crop box\n        case ACTION_ALL:\n          left += range.x;\n          top += range.y;\n          break;\n\n        // Resize crop box\n        case ACTION_EAST:\n          if (range.x >= 0 && (right >= maxWidth || aspectRatio &&\n            (top <= minTop || bottom >= maxHeight))) {\n\n            renderable = false;\n            break;\n          }\n\n          width += range.x;\n\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top -= range.Y / 2;\n          }\n\n          if (width < 0) {\n            action = ACTION_WEST;\n            width = 0;\n          }\n\n          break;\n\n        case ACTION_NORTH:\n          if (range.y <= 0 && (top <= minTop || aspectRatio &&\n            (left <= minLeft || right >= maxWidth))) {\n\n            renderable = false;\n            break;\n          }\n\n          height -= range.y;\n          top += range.y;\n\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += range.X / 2;\n          }\n\n          if (height < 0) {\n            action = ACTION_SOUTH;\n            height = 0;\n          }\n\n          break;\n\n        case ACTION_WEST:\n          if (range.x <= 0 && (left <= minLeft || aspectRatio &&\n            (top <= minTop || bottom >= maxHeight))) {\n\n            renderable = false;\n            break;\n          }\n\n          width -= range.x;\n          left += range.x;\n\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += range.Y / 2;\n          }\n\n          if (width < 0) {\n            action = ACTION_EAST;\n            width = 0;\n          }\n\n          break;\n\n        case ACTION_SOUTH:\n          if (range.y >= 0 && (bottom >= maxHeight || aspectRatio &&\n            (left <= minLeft || right >= maxWidth))) {\n\n            renderable = false;\n            break;\n          }\n\n          height += range.y;\n\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left -= range.X / 2;\n          }\n\n          if (height < 0) {\n            action = ACTION_NORTH;\n            height = 0;\n          }\n\n          break;\n\n        case ACTION_NORTH_EAST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n              renderable = false;\n              break;\n            }\n\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n          } else {\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = 0;\n            width = 0;\n          } else if (width < 0) {\n            action = ACTION_NORTH_WEST;\n            width = 0;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = 0;\n          }\n\n          break;\n\n        case ACTION_NORTH_WEST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n              renderable = false;\n              break;\n            }\n\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n            left += range.X;\n          } else {\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = 0;\n            width = 0;\n          } else if (width < 0) {\n            action = ACTION_NORTH_EAST;\n            width = 0;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = 0;\n          }\n\n          break;\n\n        case ACTION_SOUTH_WEST:\n          if (aspectRatio) {\n            if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n\n            width -= range.x;\n            left += range.x;\n            height = width / aspectRatio;\n          } else {\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = 0;\n            width = 0;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_EAST;\n            width = 0;\n          } else if (height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = 0;\n          }\n\n          break;\n\n        case ACTION_SOUTH_EAST:\n          if (aspectRatio) {\n            if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n\n            width += range.x;\n            height = width / aspectRatio;\n          } else {\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = 0;\n            width = 0;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_WEST;\n            width = 0;\n          } else if (height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = 0;\n          }\n\n          break;\n\n        // Move canvas\n        case ACTION_MOVE:\n          canvas.left += range.x;\n          canvas.top += range.y;\n          this.renderCanvas(true);\n          renderable = false;\n          break;\n\n        // Zoom canvas\n        case ACTION_ZOOM:\n          this.zoom((function (x1, y1, x2, y2) {\n            var z1 = sqrt(x1 * x1 + y1 * y1);\n            var z2 = sqrt(x2 * x2 + y2 * y2);\n\n            return (z2 - z1) / z1;\n          })(\n            abs(this.startX - this.startX2),\n            abs(this.startY - this.startY2),\n            abs(this.endX - this.endX2),\n            abs(this.endY - this.endY2)\n          ), originalEvent);\n          this.startX2 = this.endX2;\n          this.startY2 = this.endY2;\n          renderable = false;\n          break;\n\n        // Create crop box\n        case ACTION_CROP:\n          if (range.x && range.y) {\n            offset = this.$cropper.offset();\n            left = this.startX - offset.left;\n            top = this.startY - offset.top;\n            width = cropBox.minWidth;\n            height = cropBox.minHeight;\n\n            if (range.x > 0) {\n              if (range.y > 0) {\n                action = ACTION_SOUTH_EAST;\n              } else {\n                action = ACTION_NORTH_EAST;\n                top -= height;\n              }\n            } else {\n              if (range.y > 0) {\n                action = ACTION_SOUTH_WEST;\n                left -= width;\n              } else {\n                action = ACTION_NORTH_WEST;\n                left -= width;\n                top -= height;\n              }\n            }\n\n            // Show the crop box if is hidden\n            if (!this.cropped) {\n              this.cropped = true;\n              this.$cropBox.removeClass(CLASS_HIDDEN);\n            }\n          }\n\n          break;\n\n        // No default\n      }\n\n      if (renderable) {\n        cropBox.width = width;\n        cropBox.height = height;\n        cropBox.left = left;\n        cropBox.top = top;\n        this.action = action;\n\n        this.renderCropBox();\n      }\n\n      // Override\n      this.startX = this.endX;\n      this.startY = this.endY;\n    }\n  });\n\n  $.extend(prototype, {\n\n    // Show the crop box manually\n    crop: function () {\n      if (!this.built || this.disabled) {\n        return;\n      }\n\n      if (!this.cropped) {\n        this.cropped = true;\n        this.limitCropBox(true, true);\n\n        if (this.options.modal) {\n          this.$dragBox.addClass(CLASS_MODAL);\n        }\n\n        this.$cropBox.removeClass(CLASS_HIDDEN);\n      }\n\n      this.setCropBoxData(this.initialCropBox);\n    },\n\n    // Reset the image and crop box to their initial states\n    reset: function () {\n      if (!this.built || this.disabled) {\n        return;\n      }\n\n      this.image = $.extend({}, this.initialImage);\n      this.canvas = $.extend({}, this.initialCanvas);\n\n      // Required for strict mode\n      this.cropBox = $.extend({}, this.initialCropBox);\n\n      this.renderCanvas();\n\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    },\n\n    // Clear the crop box\n    clear: function () {\n      if (!this.cropped || this.disabled) {\n        return;\n      }\n\n      $.extend(this.cropBox, {\n        left: 0,\n        top: 0,\n        width: 0,\n        height: 0\n      });\n\n      this.cropped = false;\n      this.renderCropBox();\n\n      this.limitCanvas();\n\n      // Render canvas after crop box rendered\n      this.renderCanvas();\n\n      this.$dragBox.removeClass(CLASS_MODAL);\n      this.$cropBox.addClass(CLASS_HIDDEN);\n    },\n\n    /**\n     * Replace the image's src and rebuild the cropper\n     *\n     * @param {String} url\n     */\n    replace: function (url) {\n      if (!this.disabled && url) {\n        if (this.isImg) {\n          this.$element.attr('src', url);\n        }\n\n        // Clear previous data\n        this.options.data = null;\n        this.load(url);\n      }\n    },\n\n    // Enable (unfreeze) the cropper\n    enable: function () {\n      if (this.built) {\n        this.disabled = false;\n        this.$cropper.removeClass(CLASS_DISABLED);\n      }\n    },\n\n    // Disable (freeze) the cropper\n    disable: function () {\n      if (this.built) {\n        this.disabled = true;\n        this.$cropper.addClass(CLASS_DISABLED);\n      }\n    },\n\n    // Destroy the cropper and remove the instance from the image\n    destroy: function () {\n      var $this = this.$element;\n\n      if (this.ready) {\n        if (this.isImg) {\n          $this.attr('src', this.originalUrl);\n        }\n\n        this.unbuild();\n        $this.removeClass(CLASS_HIDDEN);\n      } else {\n        if (this.isImg) {\n          $this.off(EVENT_LOAD, this.start);\n        } else if (this.$clone) {\n          this.$clone.remove();\n        }\n      }\n\n      $this.removeData(NAMESPACE);\n    },\n\n    /**\n     * Move the canvas\n     *\n     * @param {Number} offsetX\n     * @param {Number} offsetY (optional)\n     */\n    move: function (offsetX, offsetY) {\n      var canvas = this.canvas;\n\n      // If \"offsetY\" is not present, its default value is \"offsetX\"\n      if (isUndefined(offsetY)) {\n        offsetY = offsetX;\n      }\n\n      offsetX = num(offsetX);\n      offsetY = num(offsetY);\n\n      if (this.built && !this.disabled && this.options.movable) {\n        canvas.left += isNumber(offsetX) ? offsetX : 0;\n        canvas.top += isNumber(offsetY) ? offsetY : 0;\n        this.renderCanvas(true);\n      }\n    },\n\n    /**\n     * Zoom the canvas\n     *\n     * @param {Number} ratio\n     * @param {Event} _originalEvent (private)\n     */\n    zoom: function (ratio, _originalEvent) {\n      var canvas = this.canvas;\n      var width;\n      var height;\n\n      ratio = num(ratio);\n\n      if (ratio && this.built && !this.disabled && this.options.zoomable) {\n        if (this.trigger(EVENT_ZOOM, {\n          originalEvent: _originalEvent,\n          ratio: ratio\n        })) {\n          return;\n        }\n\n        if (ratio < 0) {\n          ratio =  1 / (1 - ratio);\n        } else {\n          ratio = 1 + ratio;\n        }\n\n        width = canvas.width * ratio;\n        height = canvas.height * ratio;\n        canvas.left -= (width - canvas.width) / 2;\n        canvas.top -= (height - canvas.height) / 2;\n        canvas.width = width;\n        canvas.height = height;\n        this.renderCanvas(true);\n        this.setDragMode(ACTION_MOVE);\n      }\n    },\n\n    /**\n     * Rotate the canvas\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#rotate()\n     *\n     * @param {Number} degree\n     */\n    rotate: function (degree) {\n      var image = this.image;\n      var rotate = image.rotate || 0;\n\n      degree = num(degree) || 0;\n\n      if (this.built && !this.disabled && this.options.rotatable) {\n        image.rotate = (rotate + degree) % 360;\n        this.rotated = true;\n        this.renderCanvas(true);\n      }\n    },\n\n    /**\n     * Scale the image\n     * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale()\n     *\n     * @param {Number} scaleX\n     * @param {Number} scaleY (optional)\n     */\n    scale: function (scaleX, scaleY) {\n      var image = this.image;\n\n      // If \"scaleY\" is not present, its default value is \"scaleX\"\n      if (isUndefined(scaleY)) {\n        scaleY = scaleX;\n      }\n\n      scaleX = num(scaleX);\n      scaleY = num(scaleY);\n\n      if (this.built && !this.disabled && this.options.scalable) {\n        image.scaleX = isNumber(scaleX) ? scaleX : 1;\n        image.scaleY = isNumber(scaleY) ? scaleY : 1;\n        this.renderImage(true);\n      }\n    },\n\n    /**\n     * Get the cropped area position and size data (base on the original image)\n     *\n     * @param {Boolean} rounded (optional)\n     * @return {Object} data\n     */\n    getData: function (rounded) {\n      var options = this.options;\n      var image = this.image;\n      var canvas = this.canvas;\n      var cropBox = this.cropBox;\n      var ratio;\n      var data;\n\n      if (this.built && this.cropped) {\n        data = {\n          x: cropBox.left - canvas.left,\n          y: cropBox.top - canvas.top,\n          width: cropBox.width,\n          height: cropBox.height\n        };\n\n        ratio = image.width / image.naturalWidth;\n\n        $.each(data, function (i, n) {\n          n = n / ratio;\n          data[i] = rounded ? Math.round(n) : n;\n        });\n\n      } else {\n        data = {\n          x: 0,\n          y: 0,\n          width: 0,\n          height: 0\n        };\n      }\n\n      if (options.rotatable) {\n        data.rotate = image.rotate || 0;\n      }\n\n      if (options.scalable) {\n        data.scaleX = image.scaleX || 1;\n        data.scaleY = image.scaleY || 1;\n      }\n\n      return data;\n    },\n\n    /**\n     * Set the cropped area position and size with new data\n     *\n     * @param {Object} data\n     */\n    setData: function (data) {\n      var image = this.image;\n      var canvas = this.canvas;\n      var cropBoxData = {};\n      var ratio;\n\n      if ($.isFunction(data)) {\n        data = data.call(this.$element);\n      }\n\n      if (this.built && !this.disabled && $.isPlainObject(data)) {\n        if (isNumber(data.rotate) && data.rotate !== image.rotate &&\n          this.options.rotatable) {\n\n          image.rotate = data.rotate;\n          this.rotated = true;\n          this.renderCanvas(true);\n        }\n\n        ratio = image.width / image.naturalWidth;\n\n        if (isNumber(data.x)) {\n          cropBoxData.left = data.x * ratio + canvas.left;\n        }\n\n        if (isNumber(data.y)) {\n          cropBoxData.top = data.y * ratio + canvas.top;\n        }\n\n        if (isNumber(data.width)) {\n          cropBoxData.width = data.width * ratio;\n        }\n\n        if (isNumber(data.height)) {\n          cropBoxData.height = data.height * ratio;\n        }\n\n        this.setCropBoxData(cropBoxData);\n      }\n    },\n\n    /**\n     * Get the container size data\n     *\n     * @return {Object} data\n     */\n    getContainerData: function () {\n      return this.built ? this.container : {};\n    },\n\n    /**\n     * Get the image position and size data\n     *\n     * @return {Object} data\n     */\n    getImageData: function () {\n      return this.ready ? this.image : {};\n    },\n\n    /**\n     * Get the canvas position and size data\n     *\n     * @return {Object} data\n     */\n    getCanvasData: function () {\n      var canvas = this.canvas;\n      var data;\n\n      if (this.built) {\n        data = {\n          left: canvas.left,\n          top: canvas.top,\n          width: canvas.width,\n          height: canvas.height\n        };\n      }\n\n      return data || {};\n    },\n\n    /**\n     * Set the canvas position and size with new data\n     *\n     * @param {Object} data\n     */\n    setCanvasData: function (data) {\n      var canvas = this.canvas;\n      var aspectRatio = canvas.aspectRatio;\n\n      if ($.isFunction(data)) {\n        data = data.call(this.$element);\n      }\n\n      if (this.built && !this.disabled && $.isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          canvas.left = data.left;\n        }\n\n        if (isNumber(data.top)) {\n          canvas.top = data.top;\n        }\n\n        if (isNumber(data.width)) {\n          canvas.width = data.width;\n          canvas.height = data.width / aspectRatio;\n        } else if (isNumber(data.height)) {\n          canvas.height = data.height;\n          canvas.width = data.height * aspectRatio;\n        }\n\n        this.renderCanvas(true);\n      }\n    },\n\n    /**\n     * Get the crop box position and size data\n     *\n     * @return {Object} data\n     */\n    getCropBoxData: function () {\n      var cropBox = this.cropBox;\n      var data;\n\n      if (this.built && this.cropped) {\n        data = {\n          left: cropBox.left,\n          top: cropBox.top,\n          width: cropBox.width,\n          height: cropBox.height\n        };\n      }\n\n      return data || {};\n    },\n\n    /**\n     * Set the crop box position and size with new data\n     *\n     * @param {Object} data\n     */\n    setCropBoxData: function (data) {\n      var cropBox = this.cropBox;\n      var aspectRatio = this.options.aspectRatio;\n      var widthChanged;\n      var heightChanged;\n\n      if ($.isFunction(data)) {\n        data = data.call(this.$element);\n      }\n\n      if (this.built && this.cropped && !this.disabled && $.isPlainObject(data)) {\n\n        if (isNumber(data.left)) {\n          cropBox.left = data.left;\n        }\n\n        if (isNumber(data.top)) {\n          cropBox.top = data.top;\n        }\n\n        if (isNumber(data.width) && data.width !== cropBox.width) {\n          widthChanged = true;\n          cropBox.width = data.width;\n        }\n\n        if (isNumber(data.height) && data.height !== cropBox.height) {\n          heightChanged = true;\n          cropBox.height = data.height;\n        }\n\n        if (aspectRatio) {\n          if (widthChanged) {\n            cropBox.height = cropBox.width / aspectRatio;\n          } else if (heightChanged) {\n            cropBox.width = cropBox.height * aspectRatio;\n          }\n        }\n\n        this.renderCropBox();\n      }\n    },\n\n    /**\n     * Get a canvas drawn the cropped image\n     *\n     * @param {Object} options (optional)\n     * @return {HTMLCanvasElement} canvas\n     */\n    getCroppedCanvas: function (options) {\n      var originalWidth;\n      var originalHeight;\n      var canvasWidth;\n      var canvasHeight;\n      var scaledWidth;\n      var scaledHeight;\n      var scaledRatio;\n      var aspectRatio;\n      var canvas;\n      var context;\n      var data;\n\n      if (!this.built || !this.cropped || !SUPPORT_CANVAS) {\n        return;\n      }\n\n      if (!$.isPlainObject(options)) {\n        options = {};\n      }\n\n      data = this.getData();\n      originalWidth = data.width;\n      originalHeight = data.height;\n      aspectRatio = originalWidth / originalHeight;\n\n      if ($.isPlainObject(options)) {\n        scaledWidth = options.width;\n        scaledHeight = options.height;\n\n        if (scaledWidth) {\n          scaledHeight = scaledWidth / aspectRatio;\n          scaledRatio = scaledWidth / originalWidth;\n        } else if (scaledHeight) {\n          scaledWidth = scaledHeight * aspectRatio;\n          scaledRatio = scaledHeight / originalHeight;\n        }\n      }\n\n      canvasWidth = scaledWidth || originalWidth;\n      canvasHeight = scaledHeight || originalHeight;\n\n      canvas = $('<canvas>')[0];\n      canvas.width = canvasWidth;\n      canvas.height = canvasHeight;\n      context = canvas.getContext('2d');\n\n      if (options.fillColor) {\n        context.fillStyle = options.fillColor;\n        context.fillRect(0, 0, canvasWidth, canvasHeight);\n      }\n\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n      context.drawImage.apply(context, (function () {\n        var source = getSourceCanvas(this.$clone[0], this.image);\n        var sourceWidth = source.width;\n        var sourceHeight = source.height;\n        var args = [source];\n\n        // Source canvas\n        var srcX = data.x;\n        var srcY = data.y;\n        var srcWidth;\n        var srcHeight;\n\n        // Destination canvas\n        var dstX;\n        var dstY;\n        var dstWidth;\n        var dstHeight;\n\n        if (srcX <= -originalWidth || srcX > sourceWidth) {\n          srcX = srcWidth = dstX = dstWidth = 0;\n        } else if (srcX <= 0) {\n          dstX = -srcX;\n          srcX = 0;\n          srcWidth = dstWidth = min(sourceWidth, originalWidth + srcX);\n        } else if (srcX <= sourceWidth) {\n          dstX = 0;\n          srcWidth = dstWidth = min(originalWidth, sourceWidth - srcX);\n        }\n\n        if (srcWidth <= 0 || srcY <= -originalHeight || srcY > sourceHeight) {\n          srcY = srcHeight = dstY = dstHeight = 0;\n        } else if (srcY <= 0) {\n          dstY = -srcY;\n          srcY = 0;\n          srcHeight = dstHeight = min(sourceHeight, originalHeight + srcY);\n        } else if (srcY <= sourceHeight) {\n          dstY = 0;\n          srcHeight = dstHeight = min(originalHeight, sourceHeight - srcY);\n        }\n\n        args.push(srcX, srcY, srcWidth, srcHeight);\n\n        // Scale destination sizes\n        if (scaledRatio) {\n          dstX *= scaledRatio;\n          dstY *= scaledRatio;\n          dstWidth *= scaledRatio;\n          dstHeight *= scaledRatio;\n        }\n\n        // Avoid \"IndexSizeError\" in IE and Firefox\n        if (dstWidth > 0 && dstHeight > 0) {\n          args.push(dstX, dstY, dstWidth, dstHeight);\n        }\n\n        return args;\n      }).call(this));\n\n      return canvas;\n    },\n\n    /**\n     * Change the aspect ratio of the crop box\n     *\n     * @param {Number} aspectRatio\n     */\n    setAspectRatio: function (aspectRatio) {\n      var options = this.options;\n\n      if (!this.disabled && !isUndefined(aspectRatio)) {\n\n        // 0 -> NaN\n        options.aspectRatio = num(aspectRatio) || NaN;\n\n        if (this.built) {\n          this.initCropBox();\n\n          if (this.cropped) {\n            this.renderCropBox();\n          }\n        }\n      }\n    },\n\n    /**\n     * Change the drag mode\n     *\n     * @param {String} mode (optional)\n     */\n    setDragMode: function (mode) {\n      var options = this.options;\n      var croppable;\n      var movable;\n\n      if (this.ready && !this.disabled) {\n        croppable = options.dragCrop && mode === ACTION_CROP;\n        movable = options.movable && mode === ACTION_MOVE;\n        mode = (croppable || movable) ? mode : ACTION_NONE;\n\n        this.$dragBox.\n          data('action', mode).\n          toggleClass(CLASS_CROP, croppable).\n          toggleClass(CLASS_MOVE, movable);\n\n        if (!options.cropBoxMovable) {\n\n          // Sync drag mode to crop box when it is not movable(#300)\n          this.$face.\n            data('action', mode).\n            toggleClass(CLASS_CROP, croppable).\n            toggleClass(CLASS_MOVE, movable);\n        }\n      }\n    }\n  });\n\n  $.extend(Cropper.prototype, prototype);\n\n  Cropper.DEFAULTS = {\n\n    // Define the aspect ratio of the crop box\n    aspectRatio: NaN,\n\n    // An object with the previous cropping result data\n    data: null,\n\n    // A jQuery selector for adding extra containers to preview\n    preview: '',\n\n    // Strict mode, the image cannot zoom out less than the container\n    strict: true,\n\n    // Rebuild when resize the window\n    responsive: true,\n\n    // Check if the target image is cross origin\n    checkImageOrigin: true,\n\n    // Show the black modal\n    modal: true,\n\n    // Show the dashed lines for guiding\n    guides: true,\n\n    // Show the center indicator for guiding\n    center: true,\n\n    // Show the white modal to highlight the crop box\n    highlight: true,\n\n    // Show the grid background\n    background: true,\n\n    // Enable to crop the image automatically when initialize\n    autoCrop: true,\n\n    // Define the percentage of automatic cropping area when initializes\n    autoCropArea: 0.8,\n\n    // Enable to create new crop box by dragging over the image\n    dragCrop: true,\n\n    // Enable to move the image\n    movable: true,\n\n    // Enable to rotate the image\n    rotatable: true,\n\n    // Enable to scale the image\n    scalable: true,\n\n    // Enable to zoom the image\n    zoomable: true,\n\n    // Enable to zoom the image by wheeling mouse\n    mouseWheelZoom: true,\n\n    // Define zoom ratio when zoom the image by wheeling mouse\n    wheelZoomRatio: 0.1,\n\n    // Enable to zoom the image by dragging touch\n    touchDragZoom: true,\n\n    // Enable to move the crop box\n    cropBoxMovable: true,\n\n    // Enable to resize the crop box\n    cropBoxResizable: true,\n\n    // Toggle drag mode between \"crop\" and \"move\" when double click on the cropper\n    doubleClickToggle: true,\n\n    // Size limitation\n    minCanvasWidth: 0,\n    minCanvasHeight: 0,\n    minCropBoxWidth: 0,\n    minCropBoxHeight: 0,\n    minContainerWidth: 200,\n    minContainerHeight: 100,\n\n    // Shortcuts of events\n    build: null,\n    built: null,\n    cropstart: null,\n    cropmove: null,\n    cropend: null,\n    crop: null,\n    zoom: null\n  };\n\n  Cropper.setDefaults = function (options) {\n    $.extend(Cropper.DEFAULTS, options);\n  };\n\n  Cropper.TEMPLATE = (\n    '<div class=\"cropper-container\">' +\n      '<div class=\"cropper-canvas\"></div>' +\n      '<div class=\"cropper-drag-box\"></div>' +\n      '<div class=\"cropper-crop-box\">' +\n        '<span class=\"cropper-view-box\"></span>' +\n        '<span class=\"cropper-dashed dashed-h\"></span>' +\n        '<span class=\"cropper-dashed dashed-v\"></span>' +\n        '<span class=\"cropper-center\"></span>' +\n        '<span class=\"cropper-face\"></span>' +\n        '<span class=\"cropper-line line-e\" data-action=\"e\"></span>' +\n        '<span class=\"cropper-line line-n\" data-action=\"n\"></span>' +\n        '<span class=\"cropper-line line-w\" data-action=\"w\"></span>' +\n        '<span class=\"cropper-line line-s\" data-action=\"s\"></span>' +\n        '<span class=\"cropper-point point-e\" data-action=\"e\"></span>' +\n        '<span class=\"cropper-point point-n\" data-action=\"n\"></span>' +\n        '<span class=\"cropper-point point-w\" data-action=\"w\"></span>' +\n        '<span class=\"cropper-point point-s\" data-action=\"s\"></span>' +\n        '<span class=\"cropper-point point-ne\" data-action=\"ne\"></span>' +\n        '<span class=\"cropper-point point-nw\" data-action=\"nw\"></span>' +\n        '<span class=\"cropper-point point-sw\" data-action=\"sw\"></span>' +\n        '<span class=\"cropper-point point-se\" data-action=\"se\"></span>' +\n      '</div>' +\n    '</div>'\n  );\n\n  // Save the other cropper\n  Cropper.other = $.fn.cropper;\n\n  // Register as jQuery plugin\n  $.fn.cropper = function (options) {\n    var args = toArray(arguments, 1);\n    var result;\n\n    this.each(function () {\n      var $this = $(this);\n      var data = $this.data(NAMESPACE);\n      var fn;\n\n      if (!data) {\n        if (/destroy/.test(options)) {\n          return;\n        }\n\n        $this.data(NAMESPACE, (data = new Cropper(this, options)));\n      }\n\n      if (typeof options === 'string' && $.isFunction(fn = data[options])) {\n        result = fn.apply(data, args);\n      }\n    });\n\n    return isUndefined(result) ? this : result;\n  };\n\n  $.fn.cropper.Constructor = Cropper;\n  $.fn.cropper.setDefaults = Cropper.setDefaults;\n\n  // No conflict\n  $.fn.cropper.noConflict = function () {\n    $.fn.cropper = Cropper.other;\n    return this;\n  };\n\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/custombox/css/custombox.css",
    "content": "/*\n ----------------------------\n Actions\n ----------------------------\n */\n.custombox-open,\n.custombox-open body {\n    overflow: hidden;\n}\n.custombox-perspective,\n.custombox-perspective body  {\n    perspective: 600px;\n    height: 100%;\n}\n.custombox-overlay-open {\n    visibility: visible;\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Defaults\n ----------------------------\n */\n.custombox-overlay {\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    position: fixed;\n    transition-delay: 0s;\n}\n.custombox-overlay-default {\n    transition-timing-function: linear;\n    transition-property: opacity;\n    opacity: 0;\n}\n.custombox-modal-wrapper {\n    right: 0;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    outline: 0 none;\n    overflow: auto;\n    position: fixed;\n    text-align: center;\n}\n.custombox-modal-container {\n    margin: 0 auto;\n    position: relative;\n}\n.custombox-modal img {\n    max-width: 100%;\n    height: auto;\n}\n.custombox-scrollbar {\n    position: absolute;\n    top: -9999px;\n    width: 50px;\n    height: 50px;\n    overflow: scroll;\n}\n.custombox-loading {\n    position: fixed;\n    transform: translateY(-50%) translateX(-50%);\n    top: 50%;\n    left: 50%;\n}\n\n/*\n ----------------------------\n Overlay: Letmein\n ----------------------------\n */\n.custombox-overlay-letmein {\n    transition-property: all;\n    transition-timing-function: ease;\n    visibility: hidden;\n}\n.custombox-overlay-open.custombox-overlay-letmein {\n    transform: rotateX(-2deg);\n    transform-origin: 50% 0;\n    transform-style: preserve-3d;\n    visibility: visible;\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Overlay: Slide together\n ----------------------------\n */\n.custombox-overlay-slidetogether {\n    transform: translateY(-100%);\n    transition-property: transform ease-in-out;\n}\n\n.custombox-overlay-open.custombox-overlay-slidetogether {\n    transform: translateY(0);\n    transition-property: transform ease-in-out;\n}\n\n/*\n ----------------------------\n Overlay: Corner\n ----------------------------\n */\n.custombox-overlay-corner {\n    transform: translateY(150px) translateX(150px);\n    transition-property: opacity, transform, visibility;\n}\n.custombox-overlay-open.custombox-overlay-corner {\n    transform: translateY(0);\n    transition-property: opacity, transform;\n}\n\n/*\n ----------------------------\n Overlay: Scale\n ----------------------------\n */\n.custombox-overlay-scale {\n    transform: scale(0.9);\n    transition-property: transform;\n}\n.custombox-overlay-open.custombox-overlay-scale {\n    transform: scale(1);\n    transition-property: transform;\n}\n\n/*\n ----------------------------\n Overlay: Door\n ----------------------------\n */\n.custombox-overlay-door {\n    visibility: hidden;\n    width: 0;\n    left: 50%;\n    transform: translateX(-50%);\n    transition-property: width ease-in-out;\n}\n.custombox-overlay-open.custombox-overlay-door {\n    visibility: visible;\n    width: 100%;\n    transition-property: width ease-in-out;\n}\n\n/*\n ----------------------------\n Overlay: Push\n ----------------------------\n */\n.custombox-container-push {\n    overflow-x: hidden;\n    transition-property: transform;\n}\n.custombox-container-open.custombox-container-push {\n    transform: translateX(100%);\n}\n.custombox-overlay-push {\n    backface-visibility: hidden;\n    transform: translateX(-100%);\n    transition-property: transform ease-in-out;\n}\n.custombox-overlay-open.custombox-overlay-push {\n    transform: translateX(0);\n    transition-property: transform ease-in-out;\n}\n\n/*\n ----------------------------\n Overlay: Content Scale\n ----------------------------\n */\n.custombox-open-contentscale body {\n    background-color: #DDD;\n}\n.custombox-container-contentscale {\n    transition: transform 0.5s;\n    overflow: hidden;\n    height: 100%;\n}\n.custombox-container-open.custombox-container-contentscale {\n    transform: scale(0.8);\n}\n.custombox-overlay-contentscale {\n    transform: translateY(100%);\n    transition-property: transform ease-in-out;\n}\n.custombox-overlay-open.custombox-overlay-contentscale {\n    transform: translateY(0);\n    transition-property: transform ease-in-out;\n}\n\n/*\n ----------------------------\n Overlay: Makeway\n ----------------------------\n */\n.custombox-container-open.custombox-container-makeway {\n    height: 100%;\n    overflow: hidden;\n}\n.custombox-overlay-open.custombox-overlay-makeway {\n    transition-property: all;\n}\n.custombox-overlay-open.custombox-overlay-makeway,\n.custombox-container-open.custombox-container-makeway {\n    transform-style: preserve-3d;\n    transform-origin: 0 50%;\n    animation: rotateRightSideFirst 0.5s forwards ease-in;\n}\n@keyframes rotateRightSideFirst {\n    50% {\n        transform: translateZ(-50px) rotateY(5deg);\n        animation-timing-function: ease-out;\n    }\n    100% {\n        transform: translateZ(-200px);\n    }\n}\n\n/*\n ----------------------------\n Overlay: Slip\n ----------------------------\n */\n.custombox-overlay-open.custombox-overlay-slip {\n    transition-property: all;\n}\n.custombox-overlay-open.custombox-overlay-slip,\n.custombox-container-open.custombox-container-slip {\n    transform-style: preserve-3d;\n    transform-origin: 50% 100%;\n    animation: OpenTop 0.5s forwards ease-in-out;\n}\n@keyframes OpenTop {\n    50% {\n        transform: rotateX(10deg);\n        animation-timing-function: ease-out;\n    }\n}\n\n/*\n ----------------------------\n Modal: Fadein\n ----------------------------\n */\n.custombox-modal-fadein {\n    transform: scale(0.7);\n    transition-property: all;\n    opacity: 0;\n    visibility: hidden;\n}\n.custombox-modal-open .custombox-modal-fadein {\n    transform: scale(1);\n    opacity: 1;\n    visibility: visible;\n}\n\n/*\n ----------------------------\n Modal: Slide\n ----------------------------\n */\n.custombox-modal-container-slide > div,\n.custombox-modal-container-slidetogether > div {\n    opacity: 0;\n    float: left;\n}\n.custombox-modal-open > .custombox-modal-container-slide > div,\n.custombox-modal-open > .custombox-modal-container-slidetogether > div {\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Slide from top\n ----------------------------\n */\n.custombox-modal-slide-top {\n    transform: translateY(-300%);\n}\n.custombox-modal-open .custombox-modal-slide-top {\n    transform: translateY(0);\n}\n\n/*\n ----------------------------\n Modal: Slide from left\n ----------------------------\n */\n.custombox-modal-slide-left {\n    transform: translateX(-300%);\n}\n.custombox-modal-open .custombox-modal-slide-left {\n    transform: translateX(0);\n}\n\n/*\n ----------------------------\n Modal: Slide from right\n ----------------------------\n */\n.custombox-modal-slide-right {\n    transform: translateX(300%);\n}\n.custombox-modal-open .custombox-modal-slide-right {\n    transform: translateX(0);\n}\n\n/*\n ----------------------------\n Modal: Slide from bottom\n ----------------------------\n */\n.custombox-modal-slide-bottom {\n    transform: translateY(300%);\n}\n.custombox-modal-open .custombox-modal-slide-bottom {\n    transform: translateY(0);\n}\n\n/*\n ----------------------------\n Modal: Newspaper\n ----------------------------\n */\n.custombox-modal-newspaper {\n    transform: scale(0) rotate(720deg);\n    opacity: 0;\n    transition-property: all;\n    position: absolute;\n}\n.custombox-overlay-newspaper {\n    transition-property: all;\n}\n.custombox-modal-open .custombox-modal-newspaper {\n    transform: scale(1) rotate(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Fall\n ----------------------------\n */\n.custombox-modal-container-fall {\n    perspective: 1300px;\n}\n.custombox-modal-fall {\n    transform-style: preserve-3d;\n    transform: translateZ(600px) rotateX(20deg);\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-fall {\n    transition-timing-function: ease-in;\n    transition-property: all;\n    transform: translateZ(0) rotateX(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Sideball\n ----------------------------\n */\n.custombox-modal-container-sidefall {\n    perspective: 1300px;\n}\n.custombox-modal-wrapper-sidefall {\n    overflow-x: hidden;\n}\n.custombox-modal-sidefall {\n    transform-style: preserve-3d;\n    transform: translate(30%) translateZ(600px) rotate(10deg);\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-sidefall {\n    transition-timing-function: ease-in;\n    transition-property: all;\n    transform: translate(0) translateZ(0) rotate(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Blur\n ----------------------------\n */\n.custombox-open-blur .custombox-container-blur {\n    filter: blur(3px);\n}\n@media all and (-ms-high-contrast: none) {\n    .custombox-open-blur .custombox-container-blur {\n        text-shadow: 0 0 8px #000;\n        color: rgba(255,255,255,0);\n        filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='3');\n        zoom: 1;\n    }\n}\n.custombox-modal-blur {\n    transform: translateY(-5%);\n    opacity: 0;\n    position: absolute;\n}\n.custombox-overlay-blur,\n.custombox-modal-container-blur {\n    transition-property: all;\n}\n.custombox-modal-open .custombox-modal-blur {\n    transform: translateY(0);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: 3D Flip generic\n ----------------------------\n */\n.custombox-modal-container-flip {\n    perspective: 1300px;\n}\n\n/*\n ----------------------------\n Modal: 3D Flip horizontal\n ----------------------------\n */\n.custombox-modal-flip-horizontal {\n    position: absolute;\n    transform-style: preserve-3d;\n    transform: rotateY(-70deg);\n    transition-property: all;\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-flip-horizontal {\n    transform: rotateY(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: 3D Flip vertical\n ----------------------------\n */\n.custombox-modal-flip-vertical {\n    position: absolute;\n    transform-style: preserve-3d;\n    transform: rotateX(-70deg);\n    transition-property: all;\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-flip-vertical {\n    transform: rotateX(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: 3D Sign\n ----------------------------\n */\n.custombox-modal-container-sign {\n    perspective: 1300px;\n}\n.custombox-modal-sign {\n    transform-style: preserve-3d;\n    transform: rotateX(-60deg);\n    transform-origin: 50% 0;\n    opacity: 0;\n    transition-property: all;\n}\n.custombox-modal-open .custombox-modal-sign {\n    transform: rotateX(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Superscaled\n ----------------------------\n */\n.custombox-modal-superscaled {\n    transform: scale(2);\n    opacity: 0;\n    transition-property: all;\n    position: absolute;\n}\n.custombox-modal-open .custombox-modal-superscaled {\n    transform: scale(1);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: 3D Slit\n ----------------------------\n */\n.custombox-modal-container-slit {\n    perspective: 1300px;\n}\n.custombox-modal-slit {\n    transform-style: preserve-3d;\n    transform: translateZ(-3000px) rotateY(90deg);\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-slit {\n    animation: slit .7s forwards ease-out;\n}\n@keyframes slit {\n    50% {\n        transform: translateZ(-250px) rotateY(89deg);\n        opacity: 1;\n        animation-timing-function: ease-out;\n    }\n    100% {\n        transform: translateZ(0) rotateY(0deg);\n        opacity: 1;\n    }\n}\n\n/*\n ----------------------------\n Modal: 3D Rotate generic\n ----------------------------\n */\n.custombox-modal-container-rotate {\n    perspective: 1300px;\n}\n\n/*\n ----------------------------\n Modal: 3D Rotate from bottom\n ----------------------------\n */\n.custombox-modal-rotate-bottom {\n    transform-style: preserve-3d;\n    transform: translateY(100%) rotateX(90deg);\n    transform-origin: 0 100%;\n    opacity: 0;\n    transition-timing-function: ease-out;\n    transition-property: all;\n    position: absolute;\n}\n.custombox-modal-open .custombox-modal-rotate-bottom {\n    transform: translateY(0) rotateX(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: 3D Rotate from left\n ----------------------------\n */\n.custombox-modal-rotate-left {\n    transform-style: preserve-3d;\n    transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n    transform-origin: 0 100%;\n    opacity: 0;\n    transition-property: all;\n    position: absolute;\n}\n.custombox-modal-open .custombox-modal-rotate-left {\n    transform: translateZ(0) translateX(0) rotateY(0deg);\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Letmein\n ----------------------------\n */\n.custombox-modal-container-letmein {\n    transition-property: transform;\n    transform: rotateX(-2deg);\n    transform-origin: 50% 0;\n    transform-style: preserve-3d;\n    opacity: 1;\n}\n.custombox-modal-letmein {\n    opacity: 0;\n    transform: translateY(300%);\n    float: left;\n}\n.custombox-modal-open .custombox-modal-letmein {\n    transform: translateY(0);\n    opacity: 1;\n    transition-property: all;\n}\n\n/*\n ----------------------------\n Modal: Makeway\n ----------------------------\n */\n.custombox-modal-makeway {\n    transform: translateX(200%);\n    opacity: 0;\n    float: left;\n}\n.custombox-modal-open .custombox-modal-makeway {\n    transform: translateX(0);\n    opacity: 1;\n}\n.custombox-modal-wrapper-makeway {\n    overflow: hidden;\n}\n\n/*\n ----------------------------\n Modal: Slip\n ----------------------------\n */\n.custombox-modal-slip {\n    transform: translateY(-350%);\n}\n.custombox-modal-open .custombox-modal-slip {\n    transform: translateY(0);\n    transition-property: all;\n}\n\n/*\n ----------------------------\n Modal: Corner\n ----------------------------\n */\n.custombox-modal-corner {\n    opacity: 0;\n    transform: translateY(150px) translateX(150px);\n    transition-property: opacity, transform, visibility;\n}\n.custombox-modal-open .custombox-modal-corner {\n    transform: translateY(0);\n    opacity: 1;\n    transition-property: opacity, transform;\n}\n\n/*\n ----------------------------\n Modal: Slide together\n ----------------------------\n */\n.custombox-modal-slidetogether {\n    transform: translateY(-600%);\n\n}\n.custombox-modal-open .custombox-modal-slidetogether {\n    transform: translateY(0);\n}\n\n/*\n ----------------------------\n Modal: Scale\n ----------------------------\n */\n.custombox-modal-scale {\n    transform: scale(0.9);\n    transition: transform;\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-scale {\n    transform: scale(1);\n    transition: transform;\n    opacity: 1;\n}\n\n/*\n ----------------------------\n Modal: Door\n ----------------------------\n */\n.custombox-modal-door {\n    visibility: hidden;\n    opacity: 0;\n}\n.custombox-modal-open .custombox-modal-door {\n    opacity: 1;\n    visibility: visible;\n}\n\n/*\n ----------------------------\n Modal: Push\n ----------------------------\n */\n.custombox-modal-push {\n    transform: translateX(-300%);\n}\n.custombox-modal-open .custombox-modal-push {\n    transform: translateX(0);\n}\n\n/*\n ----------------------------\n Modal: Content Scale\n ----------------------------\n */\n.custombox-modal-contentscale {\n    transform: translateY(600%);\n    transition-property: transform ease-in-out;\n    position: absolute;\n}\n.custombox-modal-open .custombox-modal-contentscale {\n    transform: translateY(0);\n}\n\n/*\n ----------------------------\n Modal: Val\n ----------------------------\n */\n.custombox-modal-swell {\n    animation-duration: 0.5s;\n    animation-fill-mode: forwards;\n    animation-timing-function: ease-out;\n    animation-name: swell-close;\n}\n.custombox-modal-open .custombox-modal-swell {\n    animation-name: swell-open;\n}\n@keyframes swell-open {\n    0% {\n        opacity: 0;\n        transform: translate3d(calc(-100vw - 50%), 0, 0);\n    }\n    50% {\n        opacity: 1;\n        transform: translate3d(100px, 0, 0);\n    }\n    100% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0);\n    }\n}\n@keyframes swell-close {\n    0% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0);\n    }\n    50% {\n        opacity: 1;\n        transform: translate3d(-100px, 0, 0) scale3d(1.1, 1.1, 1);\n    }\n    100% {\n        opacity: 0;\n        transform: translate3d(calc(100vw + 50%), 0, 0)\n    }\n}\n\n/*\n ----------------------------\n Modal: Rotate down\n ----------------------------\n */\n.custombox-modal-rotatedown {\n    animation-duration: 0.4s;\n    animation-timing-function: cubic-bezier(0.7,0,0.3,1);\n    animation-fill-mode: forwards;\n    transform-origin: -150% 50%;\n    animation-name: rotatedown-close;\n    overflow: hidden;\n}\n.custombox-modal-open .custombox-modal-rotatedown {\n    animation-name: rotatedown-open;\n}\n.custombox-modal-open .custombox-modal-rotatedown div > * {\n    animation: rotatedown-elem 0.4s both;\n    transform-origin: -50% 50%;\n    animation-timing-function: cubic-bezier(0.7,0,0.3,1);\n    animation-delay: 0.15s;\n}\n@keyframes rotatedown-open {\n    0% {\n        opacity: 0;\n        transform: rotate3d(0, 0, 1, -45deg);\n    }\n    100% {\n        opacity: 1;\n        transform: rotate3d(0, 0, 1, 0deg);\n    }\n}\n@keyframes rotatedown-close {\n    0% {\n        opacity: 1;\n    }\n    100% {\n        opacity: 0;\n        transform: rotate3d(0, 0, 1, 45deg);\n    }\n}\n@keyframes rotatedown-elem {\n    0% {\n        opacity: 0;\n        transform: translate3d(0, -150px, 0) rotate3d(0, 0, 1, -20deg);\n    }\n    100% { opacity: 1;\n        transform: translate3d(0, 0, 0) rotate3d(0, 0, 1, 0deg);\n    }\n}\n\n/*\n ----------------------------\n Modal: Flash\n ----------------------------\n */\n.custombox-modal-flash {\n    animation-duration: 0.4s;\n    animation-fill-mode: forwards;\n    animation-timing-function: cubic-bezier(0.7,0,0.3,1);\n    animation-name: flash-close;\n    overflow: hidden;\n}\n.custombox-modal-open .custombox-modal-flash {\n    animation-name: flash-open;\n}\n.custombox-modal-open .custombox-modal-flash div > * {\n    animation: flash-elem-open 0.4s cubic-bezier(0.7,0,0.3,1) both;\n}\n.custombox-modal-flash div > * {\n    animation: flash-elem-close 0.4s cubic-bezier(0.7,0,0.3,1) both;\n}\n@keyframes flash-open {\n    0% {\n        opacity: 0;\n        transform: translate3d(-400px, 0, 0)\n        scale3d(1.4, 0, 1);\n    }\n    100% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0) scale3d(1, 1, 1);\n    }\n}\n@keyframes flash-close {\n    0% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0) scale3d(1, 1, 1);\n    }\n    20% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0) scale3d(1, 1, 1);\n    }\n    100% {\n        opacity: 0;\n        transform: translate3d(-400px, 0, 0) scale3d(1.4, 0, 1);\n    }\n}\n@keyframes flash-elem-open {\n    0% {\n        opacity: 0;\n        transform: translate3d(-100px, 0, 0);\n    }\n    20% {\n        opacity: 0;\n        transform: translate3d(-100px, 0, 0);\n    }\n    100% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0);\n    }\n}\n@keyframes flash-elem-close {\n    0% {\n        opacity: 1;\n        transform: translate3d(0, 0, 0);\n    }\n    100% {\n        opacity: 0;\n        transform: translate3d(-100px, 0, 0);\n    }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/d3/d3.js",
    "content": "!function() {\n  var d3 = {\n    version: \"3.5.0\"\n  };\n  if (!Date.now) Date.now = function() {\n    return +new Date();\n  };\n  var d3_arraySlice = [].slice, d3_array = function(list) {\n    return d3_arraySlice.call(list);\n  };\n  var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window;\n  try {\n    d3_array(d3_documentElement.childNodes)[0].nodeType;\n  } catch (e) {\n    d3_array = function(list) {\n      var i = list.length, array = new Array(i);\n      while (i--) array[i] = list[i];\n      return array;\n    };\n  }\n  try {\n    d3_document.createElement(\"div\").style.setProperty(\"opacity\", 0, \"\");\n  } catch (error) {\n    var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n    d3_element_prototype.setAttribute = function(name, value) {\n      d3_element_setAttribute.call(this, name, value + \"\");\n    };\n    d3_element_prototype.setAttributeNS = function(space, local, value) {\n      d3_element_setAttributeNS.call(this, space, local, value + \"\");\n    };\n    d3_style_prototype.setProperty = function(name, value, priority) {\n      d3_style_setProperty.call(this, name, value + \"\", priority);\n    };\n  }\n  d3.ascending = d3_ascending;\n  function d3_ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n  d3.descending = function(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  };\n  d3.min = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n    }\n    return a;\n  };\n  d3.max = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n    }\n    return a;\n  };\n  d3.extent = function(array, f) {\n    var i = -1, n = array.length, a, b, c;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n    return [ a, c ];\n  };\n  function d3_number(x) {\n    return x === null ? NaN : +x;\n  }\n  function d3_numeric(x) {\n    return !isNaN(x);\n  }\n  d3.sum = function(array, f) {\n    var s = 0, n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n    } else {\n      while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n    }\n    return s;\n  };\n  d3.mean = function(array, f) {\n    var s = 0, n = array.length, a, i = -1, j = n;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n    }\n    if (j) return s / j;\n  };\n  d3.quantile = function(values, p) {\n    var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n    return e ? v + e * (values[h] - v) : v;\n  };\n  d3.median = function(array, f) {\n    var numbers = [], n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n    }\n    if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n  };\n  function d3_bisector(compare) {\n    return {\n      left: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n  var d3_bisect = d3_bisector(d3_ascending);\n  d3.bisectLeft = d3_bisect.left;\n  d3.bisect = d3.bisectRight = d3_bisect.right;\n  d3.bisector = function(f) {\n    return d3_bisector(f.length === 1 ? function(d, x) {\n      return d3_ascending(f(d), x);\n    } : f);\n  };\n  d3.shuffle = function(array, i0, i1) {\n    if ((m = arguments.length) < 3) {\n      i1 = array.length;\n      if (m < 2) i0 = 0;\n    }\n    var m = i1 - i0, t, i;\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n    }\n    return array;\n  };\n  d3.permute = function(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  };\n  d3.pairs = function(array) {\n    var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n    return pairs;\n  };\n  d3.zip = function() {\n    if (!(n = arguments.length)) return [];\n    for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {\n      for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {\n        zip[j] = arguments[j][i];\n      }\n    }\n    return zips;\n  };\n  function d3_zipLength(d) {\n    return d.length;\n  }\n  d3.transpose = function(matrix) {\n    return d3.zip.apply(d3, matrix);\n  };\n  d3.keys = function(map) {\n    var keys = [];\n    for (var key in map) keys.push(key);\n    return keys;\n  };\n  d3.values = function(map) {\n    var values = [];\n    for (var key in map) values.push(map[key]);\n    return values;\n  };\n  d3.entries = function(map) {\n    var entries = [];\n    for (var key in map) entries.push({\n      key: key,\n      value: map[key]\n    });\n    return entries;\n  };\n  d3.merge = function(arrays) {\n    var n = arrays.length, m, i = -1, j = 0, merged, array;\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n    return merged;\n  };\n  var abs = Math.abs;\n  d3.range = function(start, stop, step) {\n    if (arguments.length < 3) {\n      step = 1;\n      if (arguments.length < 2) {\n        stop = start;\n        start = 0;\n      }\n    }\n    if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n    var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n    start *= k, stop *= k, step *= k;\n    if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n    return range;\n  };\n  function d3_range_integerScale(x) {\n    var k = 1;\n    while (x * k % 1) k *= 10;\n    return k;\n  }\n  function d3_class(ctor, properties) {\n    for (var key in properties) {\n      Object.defineProperty(ctor.prototype, key, {\n        value: properties[key],\n        enumerable: false\n      });\n    }\n  }\n  d3.map = function(object, f) {\n    var map = new d3_Map();\n    if (object instanceof d3_Map) {\n      object.forEach(function(key, value) {\n        map.set(key, value);\n      });\n    } else if (Array.isArray(object)) {\n      var i = -1, n = object.length, o;\n      if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n    } else {\n      for (var key in object) map.set(key, object[key]);\n    }\n    return map;\n  };\n  function d3_Map() {\n    this._ = Object.create(null);\n  }\n  var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n  d3_class(d3_Map, {\n    has: d3_map_has,\n    get: function(key) {\n      return this._[d3_map_escape(key)];\n    },\n    set: function(key, value) {\n      return this._[d3_map_escape(key)] = value;\n    },\n    remove: d3_map_remove,\n    keys: d3_map_keys,\n    values: function() {\n      var values = [];\n      for (var key in this._) values.push(this._[key]);\n      return values;\n    },\n    entries: function() {\n      var entries = [];\n      for (var key in this._) entries.push({\n        key: d3_map_unescape(key),\n        value: this._[key]\n      });\n      return entries;\n    },\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n    }\n  });\n  function d3_map_escape(key) {\n    return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n  }\n  function d3_map_unescape(key) {\n    return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n  }\n  function d3_map_has(key) {\n    return d3_map_escape(key) in this._;\n  }\n  function d3_map_remove(key) {\n    return (key = d3_map_escape(key)) in this._ && delete this._[key];\n  }\n  function d3_map_keys() {\n    var keys = [];\n    for (var key in this._) keys.push(d3_map_unescape(key));\n    return keys;\n  }\n  function d3_map_size() {\n    var size = 0;\n    for (var key in this._) ++size;\n    return size;\n  }\n  function d3_map_empty() {\n    for (var key in this._) return false;\n    return true;\n  }\n  d3.nest = function() {\n    var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n    function map(mapType, array, depth) {\n      if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n      var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n      while (++i < n) {\n        if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n          values.push(object);\n        } else {\n          valuesByKey.set(keyValue, [ object ]);\n        }\n      }\n      if (mapType) {\n        object = mapType();\n        setter = function(keyValue, values) {\n          object.set(keyValue, map(mapType, values, depth));\n        };\n      } else {\n        object = {};\n        setter = function(keyValue, values) {\n          object[keyValue] = map(mapType, values, depth);\n        };\n      }\n      valuesByKey.forEach(setter);\n      return object;\n    }\n    function entries(map, depth) {\n      if (depth >= keys.length) return map;\n      var array = [], sortKey = sortKeys[depth++];\n      map.forEach(function(key, keyMap) {\n        array.push({\n          key: key,\n          values: entries(keyMap, depth)\n        });\n      });\n      return sortKey ? array.sort(function(a, b) {\n        return sortKey(a.key, b.key);\n      }) : array;\n    }\n    nest.map = function(array, mapType) {\n      return map(mapType, array, 0);\n    };\n    nest.entries = function(array) {\n      return entries(map(d3.map, array, 0), 0);\n    };\n    nest.key = function(d) {\n      keys.push(d);\n      return nest;\n    };\n    nest.sortKeys = function(order) {\n      sortKeys[keys.length - 1] = order;\n      return nest;\n    };\n    nest.sortValues = function(order) {\n      sortValues = order;\n      return nest;\n    };\n    nest.rollup = function(f) {\n      rollup = f;\n      return nest;\n    };\n    return nest;\n  };\n  d3.set = function(array) {\n    var set = new d3_Set();\n    if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n    return set;\n  };\n  function d3_Set() {\n    this._ = Object.create(null);\n  }\n  d3_class(d3_Set, {\n    has: d3_map_has,\n    add: function(key) {\n      this._[d3_map_escape(key += \"\")] = true;\n      return key;\n    },\n    remove: d3_map_remove,\n    values: d3_map_keys,\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key));\n    }\n  });\n  d3.behavior = {};\n  d3.rebind = function(target, source) {\n    var i = 1, n = arguments.length, method;\n    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n    return target;\n  };\n  function d3_rebind(target, source, method) {\n    return function() {\n      var value = method.apply(source, arguments);\n      return value === source ? target : value;\n    };\n  }\n  function d3_vendorSymbol(object, name) {\n    if (name in object) return name;\n    name = name.charAt(0).toUpperCase() + name.slice(1);\n    for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n      var prefixName = d3_vendorPrefixes[i] + name;\n      if (prefixName in object) return prefixName;\n    }\n  }\n  var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n  function d3_noop() {}\n  d3.dispatch = function() {\n    var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    return dispatch;\n  };\n  function d3_dispatch() {}\n  d3_dispatch.prototype.on = function(type, listener) {\n    var i = type.indexOf(\".\"), name = \"\";\n    if (i >= 0) {\n      name = type.slice(i + 1);\n      type = type.slice(0, i);\n    }\n    if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n    if (arguments.length === 2) {\n      if (listener == null) for (type in this) {\n        if (this.hasOwnProperty(type)) this[type].on(name, null);\n      }\n      return this;\n    }\n  };\n  function d3_dispatch_event(dispatch) {\n    var listeners = [], listenerByName = new d3_Map();\n    function event() {\n      var z = listeners, i = -1, n = z.length, l;\n      while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n      return dispatch;\n    }\n    event.on = function(name, listener) {\n      var l = listenerByName.get(name), i;\n      if (arguments.length < 2) return l && l.on;\n      if (l) {\n        l.on = null;\n        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n        listenerByName.remove(name);\n      }\n      if (listener) listeners.push(listenerByName.set(name, {\n        on: listener\n      }));\n      return dispatch;\n    };\n    return event;\n  }\n  d3.event = null;\n  function d3_eventPreventDefault() {\n    d3.event.preventDefault();\n  }\n  function d3_eventSource() {\n    var e = d3.event, s;\n    while (s = e.sourceEvent) e = s;\n    return e;\n  }\n  function d3_eventDispatch(target) {\n    var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    dispatch.of = function(thiz, argumentz) {\n      return function(e1) {\n        try {\n          var e0 = e1.sourceEvent = d3.event;\n          e1.target = target;\n          d3.event = e1;\n          dispatch[e1.type].apply(thiz, argumentz);\n        } finally {\n          d3.event = e0;\n        }\n      };\n    };\n    return dispatch;\n  }\n  d3.requote = function(s) {\n    return s.replace(d3_requote_re, \"\\\\$&\");\n  };\n  var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n  var d3_subclass = {}.__proto__ ? function(object, prototype) {\n    object.__proto__ = prototype;\n  } : function(object, prototype) {\n    for (var property in prototype) object[property] = prototype[property];\n  };\n  function d3_selection(groups) {\n    d3_subclass(groups, d3_selectionPrototype);\n    return groups;\n  }\n  var d3_select = function(s, n) {\n    return n.querySelector(s);\n  }, d3_selectAll = function(s, n) {\n    return n.querySelectorAll(s);\n  }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, \"matchesSelector\")], d3_selectMatches = function(n, s) {\n    return d3_selectMatcher.call(n, s);\n  };\n  if (typeof Sizzle === \"function\") {\n    d3_select = function(s, n) {\n      return Sizzle(s, n)[0] || null;\n    };\n    d3_selectAll = Sizzle;\n    d3_selectMatches = Sizzle.matchesSelector;\n  }\n  d3.selection = function() {\n    return d3_selectionRoot;\n  };\n  var d3_selectionPrototype = d3.selection.prototype = [];\n  d3_selectionPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, group, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n          if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selector(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_select(selector, this);\n    };\n  }\n  d3_selectionPrototype.selectAll = function(selector) {\n    var subgroups = [], subgroup, node;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n          subgroup.parentNode = node;\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selectorAll(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_selectAll(selector, this);\n    };\n  }\n  var d3_nsPrefix = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: \"http://www.w3.org/1999/xhtml\",\n    xlink: \"http://www.w3.org/1999/xlink\",\n    xml: \"http://www.w3.org/XML/1998/namespace\",\n    xmlns: \"http://www.w3.org/2000/xmlns/\"\n  };\n  d3.ns = {\n    prefix: d3_nsPrefix,\n    qualify: function(name) {\n      var i = name.indexOf(\":\"), prefix = name;\n      if (i >= 0) {\n        prefix = name.slice(0, i);\n        name = name.slice(i + 1);\n      }\n      return d3_nsPrefix.hasOwnProperty(prefix) ? {\n        space: d3_nsPrefix[prefix],\n        local: name\n      } : name;\n    }\n  };\n  d3_selectionPrototype.attr = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node();\n        name = d3.ns.qualify(name);\n        return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n      }\n      for (value in name) this.each(d3_selection_attr(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_attr(name, value));\n  };\n  function d3_selection_attr(name, value) {\n    name = d3.ns.qualify(name);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrConstant() {\n      this.setAttribute(name, value);\n    }\n    function attrConstantNS() {\n      this.setAttributeNS(name.space, name.local, value);\n    }\n    function attrFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n    }\n    function attrFunctionNS() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n    }\n    return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n  }\n  function d3_collapse(s) {\n    return s.trim().replace(/\\s+/g, \" \");\n  }\n  d3_selectionPrototype.classed = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n        if (value = node.classList) {\n          while (++i < n) if (!value.contains(name[i])) return false;\n        } else {\n          value = node.getAttribute(\"class\");\n          while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n        }\n        return true;\n      }\n      for (value in name) this.each(d3_selection_classed(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_classed(name, value));\n  };\n  function d3_selection_classedRe(name) {\n    return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n  }\n  function d3_selection_classes(name) {\n    return (name + \"\").trim().split(/^|\\s+/);\n  }\n  function d3_selection_classed(name, value) {\n    name = d3_selection_classes(name).map(d3_selection_classedName);\n    var n = name.length;\n    function classedConstant() {\n      var i = -1;\n      while (++i < n) name[i](this, value);\n    }\n    function classedFunction() {\n      var i = -1, x = value.apply(this, arguments);\n      while (++i < n) name[i](this, x);\n    }\n    return typeof value === \"function\" ? classedFunction : classedConstant;\n  }\n  function d3_selection_classedName(name) {\n    var re = d3_selection_classedRe(name);\n    return function(node, value) {\n      if (c = node.classList) return value ? c.add(name) : c.remove(name);\n      var c = node.getAttribute(\"class\") || \"\";\n      if (value) {\n        re.lastIndex = 0;\n        if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n      } else {\n        node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n      }\n    };\n  }\n  d3_selectionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n        return this;\n      }\n      if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);\n      priority = \"\";\n    }\n    return this.each(d3_selection_style(name, value, priority));\n  };\n  function d3_selection_style(name, value, priority) {\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleConstant() {\n      this.style.setProperty(name, value, priority);\n    }\n    function styleFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n    }\n    return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n  }\n  d3_selectionPrototype.property = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") return this.node()[name];\n      for (value in name) this.each(d3_selection_property(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_property(name, value));\n  };\n  function d3_selection_property(name, value) {\n    function propertyNull() {\n      delete this[name];\n    }\n    function propertyConstant() {\n      this[name] = value;\n    }\n    function propertyFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) delete this[name]; else this[name] = x;\n    }\n    return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n  }\n  d3_selectionPrototype.text = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.textContent = \"\";\n    } : function() {\n      this.textContent = value;\n    }) : this.node().textContent;\n  };\n  d3_selectionPrototype.html = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.innerHTML = \"\";\n    } : function() {\n      this.innerHTML = value;\n    }) : this.node().innerHTML;\n  };\n  d3_selectionPrototype.append = function(name) {\n    name = d3_selection_creator(name);\n    return this.select(function() {\n      return this.appendChild(name.apply(this, arguments));\n    });\n  };\n  function d3_selection_creator(name) {\n    return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? function() {\n      return this.ownerDocument.createElementNS(name.space, name.local);\n    } : function() {\n      return this.ownerDocument.createElementNS(this.namespaceURI, name);\n    };\n  }\n  d3_selectionPrototype.insert = function(name, before) {\n    name = d3_selection_creator(name);\n    before = d3_selection_selector(before);\n    return this.select(function() {\n      return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n    });\n  };\n  d3_selectionPrototype.remove = function() {\n    return this.each(d3_selectionRemove);\n  };\n  function d3_selectionRemove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n  d3_selectionPrototype.data = function(value, key) {\n    var i = -1, n = this.length, group, node;\n    if (!arguments.length) {\n      value = new Array(n = (group = this[0]).length);\n      while (++i < n) {\n        if (node = group[i]) {\n          value[i] = node.__data__;\n        }\n      }\n      return value;\n    }\n    function bind(group, groupData) {\n      var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n      if (key) {\n        var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n        for (i = -1; ++i < n; ) {\n          if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) {\n            exitNodes[i] = node;\n          } else {\n            nodeByKeyValue.set(keyValue, node);\n          }\n          keyValues[i] = keyValue;\n        }\n        for (i = -1; ++i < m; ) {\n          if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          } else if (node !== true) {\n            updateNodes[i] = node;\n            node.__data__ = nodeData;\n          }\n          nodeByKeyValue.set(keyValue, true);\n        }\n        for (i = -1; ++i < n; ) {\n          if (nodeByKeyValue.get(keyValues[i]) !== true) {\n            exitNodes[i] = group[i];\n          }\n        }\n      } else {\n        for (i = -1; ++i < n0; ) {\n          node = group[i];\n          nodeData = groupData[i];\n          if (node) {\n            node.__data__ = nodeData;\n            updateNodes[i] = node;\n          } else {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          }\n        }\n        for (;i < m; ++i) {\n          enterNodes[i] = d3_selection_dataNode(groupData[i]);\n        }\n        for (;i < n; ++i) {\n          exitNodes[i] = group[i];\n        }\n      }\n      enterNodes.update = updateNodes;\n      enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n      enter.push(enterNodes);\n      update.push(updateNodes);\n      exit.push(exitNodes);\n    }\n    var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n    if (typeof value === \"function\") {\n      while (++i < n) {\n        bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n      }\n    } else {\n      while (++i < n) {\n        bind(group = this[i], value);\n      }\n    }\n    update.enter = function() {\n      return enter;\n    };\n    update.exit = function() {\n      return exit;\n    };\n    return update;\n  };\n  function d3_selection_dataNode(data) {\n    return {\n      __data__: data\n    };\n  }\n  d3_selectionPrototype.datum = function(value) {\n    return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n  };\n  d3_selectionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_filter(selector) {\n    return function() {\n      return d3_selectMatches(this, selector);\n    };\n  }\n  d3_selectionPrototype.order = function() {\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n        if (node = group[i]) {\n          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n    return this;\n  };\n  d3_selectionPrototype.sort = function(comparator) {\n    comparator = d3_selection_sortComparator.apply(this, arguments);\n    for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n    return this.order();\n  };\n  function d3_selection_sortComparator(comparator) {\n    if (!arguments.length) comparator = d3_ascending;\n    return function(a, b) {\n      return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n    };\n  }\n  d3_selectionPrototype.each = function(callback) {\n    return d3_selection_each(this, function(node, i, j) {\n      callback.call(node, node.__data__, i, j);\n    });\n  };\n  function d3_selection_each(groups, callback) {\n    for (var j = 0, m = groups.length; j < m; j++) {\n      for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n        if (node = group[i]) callback(node, i, j);\n      }\n    }\n    return groups;\n  }\n  d3_selectionPrototype.call = function(callback) {\n    var args = d3_array(arguments);\n    callback.apply(args[0] = this, args);\n    return this;\n  };\n  d3_selectionPrototype.empty = function() {\n    return !this.node();\n  };\n  d3_selectionPrototype.node = function() {\n    for (var j = 0, m = this.length; j < m; j++) {\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n    return null;\n  };\n  d3_selectionPrototype.size = function() {\n    var n = 0;\n    d3_selection_each(this, function() {\n      ++n;\n    });\n    return n;\n  };\n  function d3_selection_enter(selection) {\n    d3_subclass(selection, d3_selection_enterPrototype);\n    return selection;\n  }\n  var d3_selection_enterPrototype = [];\n  d3.selection.enter = d3_selection_enter;\n  d3.selection.enter.prototype = d3_selection_enterPrototype;\n  d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n  d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n  d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n  d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n  d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n  d3_selection_enterPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, upgroup, group, node;\n    for (var j = -1, m = this.length; ++j < m; ) {\n      upgroup = (group = this[j]).update;\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = group.parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n          subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  d3_selection_enterPrototype.insert = function(name, before) {\n    if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n    return d3_selectionPrototype.insert.call(this, name, before);\n  };\n  function d3_selection_enterInsertBefore(enter) {\n    var i0, j0;\n    return function(d, i, j) {\n      var group = enter[j].update, n = group.length, node;\n      if (j != j0) j0 = j, i0 = 0;\n      if (i >= i0) i0 = i + 1;\n      while (!(node = group[i0]) && ++i0 < n) ;\n      return node;\n    };\n  }\n  d3_selectionPrototype.transition = function(name) {\n    var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n      time: Date.now(),\n      ease: d3_ease_cubicInOut,\n      delay: 0,\n      duration: 250\n    };\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_selectionPrototype.interrupt = function(name) {\n    var ns = d3_transitionNamespace(name);\n    return this.each(function() {\n      var lock = this[ns];\n      if (lock) ++lock.active;\n    });\n  };\n  function d3_selection_interrupt(that) {\n    var lock = that.__transition__;\n    if (lock) ++lock.active;\n  }\n  d3.select = function(node) {\n    var group = [ typeof node === \"string\" ? d3_select(node, d3_document) : node ];\n    group.parentNode = d3_documentElement;\n    return d3_selection([ group ]);\n  };\n  d3.selectAll = function(nodes) {\n    var group = d3_array(typeof nodes === \"string\" ? d3_selectAll(nodes, d3_document) : nodes);\n    group.parentNode = d3_documentElement;\n    return d3_selection([ group ]);\n  };\n  var d3_selectionRoot = d3.select(d3_documentElement);\n  d3_selectionPrototype.on = function(type, listener, capture) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof type !== \"string\") {\n        if (n < 2) listener = false;\n        for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n        return this;\n      }\n      if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n      capture = false;\n    }\n    return this.each(d3_selection_on(type, listener, capture));\n  };\n  function d3_selection_on(type, listener, capture) {\n    var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n    if (i > 0) type = type.slice(0, i);\n    var filter = d3_selection_onFilters.get(type);\n    if (filter) type = filter, wrap = d3_selection_onFilter;\n    function onRemove() {\n      var l = this[name];\n      if (l) {\n        this.removeEventListener(type, l, l.$);\n        delete this[name];\n      }\n    }\n    function onAdd() {\n      var l = wrap(listener, d3_array(arguments));\n      onRemove.call(this);\n      this.addEventListener(type, this[name] = l, l.$ = capture);\n      l._ = listener;\n    }\n    function removeAll() {\n      var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n      for (var name in this) {\n        if (match = name.match(re)) {\n          var l = this[name];\n          this.removeEventListener(match[1], l, l.$);\n          delete this[name];\n        }\n      }\n    }\n    return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n  }\n  var d3_selection_onFilters = d3.map({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\"\n  });\n  d3_selection_onFilters.forEach(function(k) {\n    if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n  });\n  function d3_selection_onListener(listener, argumentz) {\n    return function(e) {\n      var o = d3.event;\n      d3.event = e;\n      argumentz[0] = this.__data__;\n      try {\n        listener.apply(this, argumentz);\n      } finally {\n        d3.event = o;\n      }\n    };\n  }\n  function d3_selection_onFilter(listener, argumentz) {\n    var l = d3_selection_onListener(listener, argumentz);\n    return function(e) {\n      var target = this, related = e.relatedTarget;\n      if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n        l.call(target, e);\n      }\n    };\n  }\n  var d3_event_dragSelect = \"onselectstart\" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, \"userSelect\"), d3_event_dragId = 0;\n  function d3_event_dragSuppress() {\n    var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n    if (d3_event_dragSelect) {\n      var style = d3_documentElement.style, select = style[d3_event_dragSelect];\n      style[d3_event_dragSelect] = \"none\";\n    }\n    return function(suppressClick) {\n      w.on(name, null);\n      if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n      if (suppressClick) {\n        var off = function() {\n          w.on(click, null);\n        };\n        w.on(click, function() {\n          d3_eventPreventDefault();\n          off();\n        }, true);\n        setTimeout(off, 0);\n      }\n    };\n  }\n  d3.mouse = function(container) {\n    return d3_mousePoint(container, d3_eventSource());\n  };\n  var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;\n  function d3_mousePoint(container, e) {\n    if (e.changedTouches) e = e.changedTouches[0];\n    var svg = container.ownerSVGElement || container;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {\n        svg = d3.select(\"body\").append(\"svg\").style({\n          position: \"absolute\",\n          top: 0,\n          left: 0,\n          margin: 0,\n          padding: 0,\n          border: \"none\"\n        }, \"important\");\n        var ctm = svg[0][0].getScreenCTM();\n        d3_mouse_bug44083 = !(ctm.f || ctm.e);\n        svg.remove();\n      }\n      if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n      point.y = e.clientY;\n      point = point.matrixTransform(container.getScreenCTM().inverse());\n      return [ point.x, point.y ];\n    }\n    var rect = container.getBoundingClientRect();\n    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n  }\n  d3.touch = function(container, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n    if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return d3_mousePoint(container, touch);\n      }\n    }\n  };\n  d3.behavior.drag = function() {\n    var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, \"touchmove\", \"touchend\");\n    function drag() {\n      this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n    }\n    function dragstart(id, position, subject, move, end) {\n      return function() {\n        var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId);\n        if (origin) {\n          dragOffset = origin.apply(that, arguments);\n          dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n        } else {\n          dragOffset = [ 0, 0 ];\n        }\n        dispatch({\n          type: \"dragstart\"\n        });\n        function moved() {\n          var position1 = position(parent, dragId), dx, dy;\n          if (!position1) return;\n          dx = position1[0] - position0[0];\n          dy = position1[1] - position0[1];\n          dragged |= dx | dy;\n          position0 = position1;\n          dispatch({\n            type: \"drag\",\n            x: position1[0] + dragOffset[0],\n            y: position1[1] + dragOffset[1],\n            dx: dx,\n            dy: dy\n          });\n        }\n        function ended() {\n          if (!position(parent, dragId)) return;\n          dragSubject.on(move + dragName, null).on(end + dragName, null);\n          dragRestore(dragged && d3.event.target === target);\n          dispatch({\n            type: \"dragend\"\n          });\n        }\n      };\n    }\n    drag.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return drag;\n    };\n    return d3.rebind(drag, event, \"on\");\n  };\n  function d3_behavior_dragTouchId() {\n    return d3.event.changedTouches[0].identifier;\n  }\n  function d3_behavior_dragTouchSubject() {\n    return d3.event.target;\n  }\n  function d3_behavior_dragMouseSubject() {\n    return d3_window;\n  }\n  d3.touches = function(container, touches) {\n    if (arguments.length < 2) touches = d3_eventSource().touches;\n    return touches ? d3_array(touches).map(function(touch) {\n      var point = d3_mousePoint(container, touch);\n      point.identifier = touch.identifier;\n      return point;\n    }) : [];\n  };\n  var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n  function d3_sgn(x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  }\n  function d3_cross2d(a, b, c) {\n    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n  }\n  function d3_acos(x) {\n    return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n  }\n  function d3_asin(x) {\n    return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n  }\n  function d3_sinh(x) {\n    return ((x = Math.exp(x)) - 1 / x) / 2;\n  }\n  function d3_cosh(x) {\n    return ((x = Math.exp(x)) + 1 / x) / 2;\n  }\n  function d3_tanh(x) {\n    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n  }\n  function d3_haversin(x) {\n    return (x = Math.sin(x / 2)) * x;\n  }\n  var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n  d3.interpolateZoom = function(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];\n    var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;\n    function interpolate(t) {\n      var s = t * S;\n      if (dr) {\n        var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n        return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n      }\n      return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];\n    }\n    interpolate.duration = S * 1e3;\n    return interpolate;\n  };\n  d3.behavior.zoom = function() {\n    var view = {\n      x: 0,\n      y: 0,\n      k: 1\n    }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n    function zoom(g) {\n      g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n    }\n    zoom.event = function(g) {\n      g.each(function() {\n        var dispatch = event.of(this, arguments), view1 = view;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.zoom\", function() {\n            view = this.__chart__ || {\n              x: 0,\n              y: 0,\n              k: 1\n            };\n            zoomstarted(dispatch);\n          }).tween(\"zoom:zoom\", function() {\n            var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n            return function(t) {\n              var l = i(t), k = dx / l[2];\n              this.__chart__ = view = {\n                x: cx - l[0] * k,\n                y: cy - l[1] * k,\n                k: k\n              };\n              zoomed(dispatch);\n            };\n          }).each(\"interrupt.zoom\", function() {\n            zoomended(dispatch);\n          }).each(\"end.zoom\", function() {\n            zoomended(dispatch);\n          });\n        } else {\n          this.__chart__ = view;\n          zoomstarted(dispatch);\n          zoomed(dispatch);\n          zoomended(dispatch);\n        }\n      });\n    };\n    zoom.translate = function(_) {\n      if (!arguments.length) return [ view.x, view.y ];\n      view = {\n        x: +_[0],\n        y: +_[1],\n        k: view.k\n      };\n      rescale();\n      return zoom;\n    };\n    zoom.scale = function(_) {\n      if (!arguments.length) return view.k;\n      view = {\n        x: view.x,\n        y: view.y,\n        k: +_\n      };\n      rescale();\n      return zoom;\n    };\n    zoom.scaleExtent = function(_) {\n      if (!arguments.length) return scaleExtent;\n      scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.center = function(_) {\n      if (!arguments.length) return center;\n      center = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.size = function(_) {\n      if (!arguments.length) return size;\n      size = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.duration = function(_) {\n      if (!arguments.length) return duration;\n      duration = +_;\n      return zoom;\n    };\n    zoom.x = function(z) {\n      if (!arguments.length) return x1;\n      x1 = z;\n      x0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    zoom.y = function(z) {\n      if (!arguments.length) return y1;\n      y1 = z;\n      y0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    function location(p) {\n      return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n    }\n    function point(l) {\n      return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n    }\n    function scaleTo(s) {\n      view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n    }\n    function translateTo(p, l) {\n      l = point(l);\n      view.x += p[0] - l[0];\n      view.y += p[1] - l[1];\n    }\n    function zoomTo(that, p, l, k) {\n      that.__chart__ = {\n        x: view.x,\n        y: view.y,\n        k: view.k\n      };\n      scaleTo(Math.pow(2, k));\n      translateTo(center0 = p, l);\n      that = d3.select(that);\n      if (duration > 0) that = that.transition().duration(duration);\n      that.call(zoom.event);\n    }\n    function rescale() {\n      if (x1) x1.domain(x0.range().map(function(x) {\n        return (x - view.x) / view.k;\n      }).map(x0.invert));\n      if (y1) y1.domain(y0.range().map(function(y) {\n        return (y - view.y) / view.k;\n      }).map(y0.invert));\n    }\n    function zoomstarted(dispatch) {\n      if (!zooming++) dispatch({\n        type: \"zoomstart\"\n      });\n    }\n    function zoomed(dispatch) {\n      rescale();\n      dispatch({\n        type: \"zoom\",\n        scale: view.k,\n        translate: [ view.x, view.y ]\n      });\n    }\n    function zoomended(dispatch) {\n      if (!--zooming) dispatch({\n        type: \"zoomend\"\n      });\n      center0 = null;\n    }\n    function mousedowned() {\n      var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress();\n      d3_selection_interrupt(that);\n      zoomstarted(dispatch);\n      function moved() {\n        dragged = 1;\n        translateTo(d3.mouse(that), location0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        subject.on(mousemove, null).on(mouseup, null);\n        dragRestore(dragged && d3.event.target === target);\n        zoomended(dispatch);\n      }\n    }\n    function touchstarted() {\n      var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress();\n      started();\n      zoomstarted(dispatch);\n      subject.on(mousedown, null).on(touchstart, started);\n      function relocate() {\n        var touches = d3.touches(that);\n        scale0 = view.k;\n        touches.forEach(function(t) {\n          if (t.identifier in locations0) locations0[t.identifier] = location(t);\n        });\n        return touches;\n      }\n      function started() {\n        var target = d3.event.target;\n        d3.select(target).on(touchmove, moved).on(touchend, ended);\n        targets.push(target);\n        var changed = d3.event.changedTouches;\n        for (var i = 0, n = changed.length; i < n; ++i) {\n          locations0[changed[i].identifier] = null;\n        }\n        var touches = relocate(), now = Date.now();\n        if (touches.length === 1) {\n          if (now - touchtime < 500) {\n            var p = touches[0];\n            zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n            d3_eventPreventDefault();\n          }\n          touchtime = now;\n        } else if (touches.length > 1) {\n          var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n          distance0 = dx * dx + dy * dy;\n        }\n      }\n      function moved() {\n        var touches = d3.touches(that), p0, l0, p1, l1;\n        d3_selection_interrupt(that);\n        for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n          p1 = touches[i];\n          if (l1 = locations0[p1.identifier]) {\n            if (l0) break;\n            p0 = p1, l0 = l1;\n          }\n        }\n        if (l1) {\n          var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n          p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n          l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n          scaleTo(scale1 * scale0);\n        }\n        touchtime = null;\n        translateTo(p0, l0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        if (d3.event.touches.length) {\n          var changed = d3.event.changedTouches;\n          for (var i = 0, n = changed.length; i < n; ++i) {\n            delete locations0[changed[i].identifier];\n          }\n          for (var identifier in locations0) {\n            return void relocate();\n          }\n        }\n        d3.selectAll(targets).on(zoomName, null);\n        subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n        dragRestore();\n        zoomended(dispatch);\n      }\n    }\n    function mousewheeled() {\n      var dispatch = event.of(this, arguments);\n      if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), \n      d3_selection_interrupt(this), zoomstarted(dispatch);\n      mousewheelTimer = setTimeout(function() {\n        mousewheelTimer = null;\n        zoomended(dispatch);\n      }, 50);\n      d3_eventPreventDefault();\n      scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n      translateTo(center0, translate0);\n      zoomed(dispatch);\n    }\n    function dblclicked() {\n      var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n      zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n    }\n    return d3.rebind(zoom, event, \"on\");\n  };\n  var d3_behavior_zoomInfinity = [ 0, Infinity ];\n  var d3_behavior_zoomDelta, d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n    return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n  }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n    return d3.event.wheelDelta;\n  }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n    return -d3.event.detail;\n  }, \"MozMousePixelScroll\");\n  d3.color = d3_color;\n  function d3_color() {}\n  d3_color.prototype.toString = function() {\n    return this.rgb() + \"\";\n  };\n  d3.hsl = d3_hsl;\n  function d3_hsl(h, s, l) {\n    return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n  }\n  var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n  d3_hslPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, this.l / k);\n  };\n  d3_hslPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, k * this.l);\n  };\n  d3_hslPrototype.rgb = function() {\n    return d3_hsl_rgb(this.h, this.s, this.l);\n  };\n  function d3_hsl_rgb(h, s, l) {\n    var m1, m2;\n    h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n    s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n    l = l < 0 ? 0 : l > 1 ? 1 : l;\n    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n    m1 = 2 * l - m2;\n    function v(h) {\n      if (h > 360) h -= 360; else if (h < 0) h += 360;\n      if (h < 60) return m1 + (m2 - m1) * h / 60;\n      if (h < 180) return m2;\n      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n      return m1;\n    }\n    function vv(h) {\n      return Math.round(v(h) * 255);\n    }\n    return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n  }\n  d3.hcl = d3_hcl;\n  function d3_hcl(h, c, l) {\n    return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n  }\n  var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n  d3_hclPrototype.brighter = function(k) {\n    return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.darker = function(k) {\n    return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.rgb = function() {\n    return d3_hcl_lab(this.h, this.c, this.l).rgb();\n  };\n  function d3_hcl_lab(h, c, l) {\n    if (isNaN(h)) h = 0;\n    if (isNaN(c)) c = 0;\n    return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n  }\n  d3.lab = d3_lab;\n  function d3_lab(l, a, b) {\n    return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n  }\n  var d3_lab_K = 18;\n  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n  var d3_labPrototype = d3_lab.prototype = new d3_color();\n  d3_labPrototype.brighter = function(k) {\n    return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.darker = function(k) {\n    return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.rgb = function() {\n    return d3_lab_rgb(this.l, this.a, this.b);\n  };\n  function d3_lab_rgb(l, a, b) {\n    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n    x = d3_lab_xyz(x) * d3_lab_X;\n    y = d3_lab_xyz(y) * d3_lab_Y;\n    z = d3_lab_xyz(z) * d3_lab_Z;\n    return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n  }\n  function d3_lab_hcl(l, a, b) {\n    return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n  }\n  function d3_lab_xyz(x) {\n    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n  }\n  function d3_xyz_lab(x) {\n    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n  }\n  function d3_xyz_rgb(r) {\n    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n  }\n  d3.rgb = d3_rgb;\n  function d3_rgb(r, g, b) {\n    return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n  }\n  function d3_rgbNumber(value) {\n    return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n  }\n  function d3_rgbString(value) {\n    return d3_rgbNumber(value) + \"\";\n  }\n  var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n  d3_rgbPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    var r = this.r, g = this.g, b = this.b, i = 30;\n    if (!r && !g && !b) return new d3_rgb(i, i, i);\n    if (r && r < i) r = i;\n    if (g && g < i) g = i;\n    if (b && b < i) b = i;\n    return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n  };\n  d3_rgbPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_rgb(k * this.r, k * this.g, k * this.b);\n  };\n  d3_rgbPrototype.hsl = function() {\n    return d3_rgb_hsl(this.r, this.g, this.b);\n  };\n  d3_rgbPrototype.toString = function() {\n    return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n  };\n  function d3_rgb_hex(v) {\n    return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n  }\n  function d3_rgb_parse(format, rgb, hsl) {\n    var r = 0, g = 0, b = 0, m1, m2, color;\n    m1 = /([a-z]+)\\((.*)\\)/i.exec(format);\n    if (m1) {\n      m2 = m1[2].split(\",\");\n      switch (m1[1]) {\n       case \"hsl\":\n        {\n          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n        }\n\n       case \"rgb\":\n        {\n          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n        }\n      }\n    }\n    if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b);\n    if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n      if (format.length === 4) {\n        r = (color & 3840) >> 4;\n        r = r >> 4 | r;\n        g = color & 240;\n        g = g >> 4 | g;\n        b = color & 15;\n        b = b << 4 | b;\n      } else if (format.length === 7) {\n        r = (color & 16711680) >> 16;\n        g = (color & 65280) >> 8;\n        b = color & 255;\n      }\n    }\n    return rgb(r, g, b);\n  }\n  function d3_rgb_hsl(r, g, b) {\n    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n    if (d) {\n      s = l < .5 ? d / (max + min) : d / (2 - max - min);\n      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n      h *= 60;\n    } else {\n      h = NaN;\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new d3_hsl(h, s, l);\n  }\n  function d3_rgb_lab(r, g, b) {\n    r = d3_rgb_xyz(r);\n    g = d3_rgb_xyz(g);\n    b = d3_rgb_xyz(b);\n    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n  }\n  function d3_rgb_xyz(r) {\n    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n  }\n  function d3_rgb_parseNumber(c) {\n    var f = parseFloat(c);\n    return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n  }\n  var d3_rgb_names = d3.map({\n    aliceblue: 15792383,\n    antiquewhite: 16444375,\n    aqua: 65535,\n    aquamarine: 8388564,\n    azure: 15794175,\n    beige: 16119260,\n    bisque: 16770244,\n    black: 0,\n    blanchedalmond: 16772045,\n    blue: 255,\n    blueviolet: 9055202,\n    brown: 10824234,\n    burlywood: 14596231,\n    cadetblue: 6266528,\n    chartreuse: 8388352,\n    chocolate: 13789470,\n    coral: 16744272,\n    cornflowerblue: 6591981,\n    cornsilk: 16775388,\n    crimson: 14423100,\n    cyan: 65535,\n    darkblue: 139,\n    darkcyan: 35723,\n    darkgoldenrod: 12092939,\n    darkgray: 11119017,\n    darkgreen: 25600,\n    darkgrey: 11119017,\n    darkkhaki: 12433259,\n    darkmagenta: 9109643,\n    darkolivegreen: 5597999,\n    darkorange: 16747520,\n    darkorchid: 10040012,\n    darkred: 9109504,\n    darksalmon: 15308410,\n    darkseagreen: 9419919,\n    darkslateblue: 4734347,\n    darkslategray: 3100495,\n    darkslategrey: 3100495,\n    darkturquoise: 52945,\n    darkviolet: 9699539,\n    deeppink: 16716947,\n    deepskyblue: 49151,\n    dimgray: 6908265,\n    dimgrey: 6908265,\n    dodgerblue: 2003199,\n    firebrick: 11674146,\n    floralwhite: 16775920,\n    forestgreen: 2263842,\n    fuchsia: 16711935,\n    gainsboro: 14474460,\n    ghostwhite: 16316671,\n    gold: 16766720,\n    goldenrod: 14329120,\n    gray: 8421504,\n    green: 32768,\n    greenyellow: 11403055,\n    grey: 8421504,\n    honeydew: 15794160,\n    hotpink: 16738740,\n    indianred: 13458524,\n    indigo: 4915330,\n    ivory: 16777200,\n    khaki: 15787660,\n    lavender: 15132410,\n    lavenderblush: 16773365,\n    lawngreen: 8190976,\n    lemonchiffon: 16775885,\n    lightblue: 11393254,\n    lightcoral: 15761536,\n    lightcyan: 14745599,\n    lightgoldenrodyellow: 16448210,\n    lightgray: 13882323,\n    lightgreen: 9498256,\n    lightgrey: 13882323,\n    lightpink: 16758465,\n    lightsalmon: 16752762,\n    lightseagreen: 2142890,\n    lightskyblue: 8900346,\n    lightslategray: 7833753,\n    lightslategrey: 7833753,\n    lightsteelblue: 11584734,\n    lightyellow: 16777184,\n    lime: 65280,\n    limegreen: 3329330,\n    linen: 16445670,\n    magenta: 16711935,\n    maroon: 8388608,\n    mediumaquamarine: 6737322,\n    mediumblue: 205,\n    mediumorchid: 12211667,\n    mediumpurple: 9662683,\n    mediumseagreen: 3978097,\n    mediumslateblue: 8087790,\n    mediumspringgreen: 64154,\n    mediumturquoise: 4772300,\n    mediumvioletred: 13047173,\n    midnightblue: 1644912,\n    mintcream: 16121850,\n    mistyrose: 16770273,\n    moccasin: 16770229,\n    navajowhite: 16768685,\n    navy: 128,\n    oldlace: 16643558,\n    olive: 8421376,\n    olivedrab: 7048739,\n    orange: 16753920,\n    orangered: 16729344,\n    orchid: 14315734,\n    palegoldenrod: 15657130,\n    palegreen: 10025880,\n    paleturquoise: 11529966,\n    palevioletred: 14381203,\n    papayawhip: 16773077,\n    peachpuff: 16767673,\n    peru: 13468991,\n    pink: 16761035,\n    plum: 14524637,\n    powderblue: 11591910,\n    purple: 8388736,\n    red: 16711680,\n    rosybrown: 12357519,\n    royalblue: 4286945,\n    saddlebrown: 9127187,\n    salmon: 16416882,\n    sandybrown: 16032864,\n    seagreen: 3050327,\n    seashell: 16774638,\n    sienna: 10506797,\n    silver: 12632256,\n    skyblue: 8900331,\n    slateblue: 6970061,\n    slategray: 7372944,\n    slategrey: 7372944,\n    snow: 16775930,\n    springgreen: 65407,\n    steelblue: 4620980,\n    tan: 13808780,\n    teal: 32896,\n    thistle: 14204888,\n    tomato: 16737095,\n    turquoise: 4251856,\n    violet: 15631086,\n    wheat: 16113331,\n    white: 16777215,\n    whitesmoke: 16119285,\n    yellow: 16776960,\n    yellowgreen: 10145074\n  });\n  d3_rgb_names.forEach(function(key, value) {\n    d3_rgb_names.set(key, d3_rgbNumber(value));\n  });\n  function d3_functor(v) {\n    return typeof v === \"function\" ? v : function() {\n      return v;\n    };\n  }\n  d3.functor = d3_functor;\n  function d3_identity(d) {\n    return d;\n  }\n  d3.xhr = d3_xhrType(d3_identity);\n  function d3_xhrType(response) {\n    return function(url, mimeType, callback) {\n      if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n      mimeType = null;\n      return d3_xhr(url, mimeType, response, callback);\n    };\n  }\n  function d3_xhr(url, mimeType, response, callback) {\n    var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n    if (d3_window.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n    \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n      request.readyState > 3 && respond();\n    };\n    function respond() {\n      var status = request.status, result;\n      if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n        try {\n          result = response.call(xhr, request);\n        } catch (e) {\n          dispatch.error.call(xhr, e);\n          return;\n        }\n        dispatch.load.call(xhr, result);\n      } else {\n        dispatch.error.call(xhr, request);\n      }\n    }\n    request.onprogress = function(event) {\n      var o = d3.event;\n      d3.event = event;\n      try {\n        dispatch.progress.call(xhr, request);\n      } finally {\n        d3.event = o;\n      }\n    };\n    xhr.header = function(name, value) {\n      name = (name + \"\").toLowerCase();\n      if (arguments.length < 2) return headers[name];\n      if (value == null) delete headers[name]; else headers[name] = value + \"\";\n      return xhr;\n    };\n    xhr.mimeType = function(value) {\n      if (!arguments.length) return mimeType;\n      mimeType = value == null ? null : value + \"\";\n      return xhr;\n    };\n    xhr.responseType = function(value) {\n      if (!arguments.length) return responseType;\n      responseType = value;\n      return xhr;\n    };\n    xhr.response = function(value) {\n      response = value;\n      return xhr;\n    };\n    [ \"get\", \"post\" ].forEach(function(method) {\n      xhr[method] = function() {\n        return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n      };\n    });\n    xhr.send = function(method, data, callback) {\n      if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n      request.open(method, url, true);\n      if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n      if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n      if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n      if (responseType != null) request.responseType = responseType;\n      if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n        callback(null, request);\n      });\n      dispatch.beforesend.call(xhr, request);\n      request.send(data == null ? null : data);\n      return xhr;\n    };\n    xhr.abort = function() {\n      request.abort();\n      return xhr;\n    };\n    d3.rebind(xhr, dispatch, \"on\");\n    return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n  }\n  function d3_xhr_fixCallback(callback) {\n    return callback.length === 1 ? function(error, request) {\n      callback(error == null ? request : null);\n    } : callback;\n  }\n  function d3_xhrHasResponse(request) {\n    var type = request.responseType;\n    return type && type !== \"text\" ? request.response : request.responseText;\n  }\n  d3.dsv = function(delimiter, mimeType) {\n    var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n    function dsv(url, row, callback) {\n      if (arguments.length < 3) callback = row, row = null;\n      var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n      xhr.row = function(_) {\n        return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n      };\n      return xhr;\n    }\n    function response(request) {\n      return dsv.parse(request.responseText);\n    }\n    function typedResponse(f) {\n      return function(request) {\n        return dsv.parse(request.responseText, f);\n      };\n    }\n    dsv.parse = function(text, f) {\n      var o;\n      return dsv.parseRows(text, function(row, i) {\n        if (o) return o(row, i - 1);\n        var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n          return JSON.stringify(name) + \": d[\" + i + \"]\";\n        }).join(\",\") + \"}\");\n        o = f ? function(row, i) {\n          return f(a(row), i);\n        } : a;\n      });\n    };\n    dsv.parseRows = function(text, f) {\n      var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n      function token() {\n        if (I >= N) return EOF;\n        if (eol) return eol = false, EOL;\n        var j = I;\n        if (text.charCodeAt(j) === 34) {\n          var i = j;\n          while (i++ < N) {\n            if (text.charCodeAt(i) === 34) {\n              if (text.charCodeAt(i + 1) !== 34) break;\n              ++i;\n            }\n          }\n          I = i + 2;\n          var c = text.charCodeAt(i + 1);\n          if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(i + 2) === 10) ++I;\n          } else if (c === 10) {\n            eol = true;\n          }\n          return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n        }\n        while (I < N) {\n          var c = text.charCodeAt(I++), k = 1;\n          if (c === 10) eol = true; else if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(I) === 10) ++I, ++k;\n          } else if (c !== delimiterCode) continue;\n          return text.slice(j, I - k);\n        }\n        return text.slice(j);\n      }\n      while ((t = token()) !== EOF) {\n        var a = [];\n        while (t !== EOL && t !== EOF) {\n          a.push(t);\n          t = token();\n        }\n        if (f && (a = f(a, n++)) == null) continue;\n        rows.push(a);\n      }\n      return rows;\n    };\n    dsv.format = function(rows) {\n      if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n      var fieldSet = new d3_Set(), fields = [];\n      rows.forEach(function(row) {\n        for (var field in row) {\n          if (!fieldSet.has(field)) {\n            fields.push(fieldSet.add(field));\n          }\n        }\n      });\n      return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n        return fields.map(function(field) {\n          return formatValue(row[field]);\n        }).join(delimiter);\n      })).join(\"\\n\");\n    };\n    dsv.formatRows = function(rows) {\n      return rows.map(formatRow).join(\"\\n\");\n    };\n    function formatRow(row) {\n      return row.map(formatValue).join(delimiter);\n    }\n    function formatValue(text) {\n      return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n    }\n    return dsv;\n  };\n  d3.csv = d3.dsv(\",\", \"text/csv\");\n  d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n  var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, \"requestAnimationFrame\")] || function(callback) {\n    setTimeout(callback, 17);\n  };\n  d3.timer = function(callback, delay, then) {\n    var n = arguments.length;\n    if (n < 2) delay = 0;\n    if (n < 3) then = Date.now();\n    var time = then + delay, timer = {\n      c: callback,\n      t: time,\n      f: false,\n      n: null\n    };\n    if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n    d3_timer_queueTail = timer;\n    if (!d3_timer_interval) {\n      d3_timer_timeout = clearTimeout(d3_timer_timeout);\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n  };\n  function d3_timer_step() {\n    var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n    if (delay > 24) {\n      if (isFinite(delay)) {\n        clearTimeout(d3_timer_timeout);\n        d3_timer_timeout = setTimeout(d3_timer_step, delay);\n      }\n      d3_timer_interval = 0;\n    } else {\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n  }\n  d3.timer.flush = function() {\n    d3_timer_mark();\n    d3_timer_sweep();\n  };\n  function d3_timer_mark() {\n    var now = Date.now();\n    d3_timer_active = d3_timer_queueHead;\n    while (d3_timer_active) {\n      if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);\n      d3_timer_active = d3_timer_active.n;\n    }\n    return now;\n  }\n  function d3_timer_sweep() {\n    var t0, t1 = d3_timer_queueHead, time = Infinity;\n    while (t1) {\n      if (t1.f) {\n        t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n      } else {\n        if (t1.t < time) time = t1.t;\n        t1 = (t0 = t1).n;\n      }\n    }\n    d3_timer_queueTail = t0;\n    return time;\n  }\n  function d3_format_precision(x, p) {\n    return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n  }\n  d3.round = function(x, n) {\n    return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n  };\n  var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n  d3.formatPrefix = function(value, precision) {\n    var i = 0;\n    if (value) {\n      if (value < 0) value *= -1;\n      if (precision) value = d3.round(value, d3_format_precision(value, precision));\n      i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n      i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n    }\n    return d3_formatPrefixes[8 + i / 3];\n  };\n  function d3_formatPrefix(d, i) {\n    var k = Math.pow(10, abs(8 - i) * 3);\n    return {\n      scale: i > 8 ? function(d) {\n        return d / k;\n      } : function(d) {\n        return d * k;\n      },\n      symbol: d\n    };\n  }\n  function d3_locale_numberFormat(locale) {\n    var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n      var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = locale_grouping[j = (j + 1) % locale_grouping.length];\n      }\n      return t.reverse().join(locale_thousands);\n    } : d3_identity;\n    return function(specifier) {\n      var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n      if (precision) precision = +precision.substring(1);\n      if (zfill || fill === \"0\" && align === \"=\") {\n        zfill = fill = \"0\";\n        align = \"=\";\n      }\n      switch (type) {\n       case \"n\":\n        comma = true;\n        type = \"g\";\n        break;\n\n       case \"%\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"f\";\n        break;\n\n       case \"p\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"r\";\n        break;\n\n       case \"b\":\n       case \"o\":\n       case \"x\":\n       case \"X\":\n        if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n       case \"c\":\n        exponent = false;\n\n       case \"d\":\n        integer = true;\n        precision = 0;\n        break;\n\n       case \"s\":\n        scale = -1;\n        type = \"r\";\n        break;\n      }\n      if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n      if (type == \"r\" && !precision) type = \"g\";\n      if (precision != null) {\n        if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n      }\n      type = d3_format_types.get(type) || d3_format_typeDefault;\n      var zcomma = zfill && comma;\n      return function(value) {\n        var fullSuffix = suffix;\n        if (integer && value % 1) return \"\";\n        var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n        if (scale < 0) {\n          var unit = d3.formatPrefix(value, precision);\n          value = unit.scale(value);\n          fullSuffix = unit.symbol + suffix;\n        } else {\n          value *= scale;\n        }\n        value = type(value, precision);\n        var i = value.lastIndexOf(\".\"), before, after;\n        if (i < 0) {\n          var j = exponent ? value.lastIndexOf(\"e\") : -1;\n          if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n        } else {\n          before = value.substring(0, i);\n          after = locale_decimal + value.substring(i + 1);\n        }\n        if (!zfill && comma) before = formatGroup(before, Infinity);\n        var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n        if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n        negative += prefix;\n        value = before + after;\n        return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n      };\n    };\n  }\n  var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n  var d3_format_types = d3.map({\n    b: function(x) {\n      return x.toString(2);\n    },\n    c: function(x) {\n      return String.fromCharCode(x);\n    },\n    o: function(x) {\n      return x.toString(8);\n    },\n    x: function(x) {\n      return x.toString(16);\n    },\n    X: function(x) {\n      return x.toString(16).toUpperCase();\n    },\n    g: function(x, p) {\n      return x.toPrecision(p);\n    },\n    e: function(x, p) {\n      return x.toExponential(p);\n    },\n    f: function(x, p) {\n      return x.toFixed(p);\n    },\n    r: function(x, p) {\n      return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n    }\n  });\n  function d3_format_typeDefault(x) {\n    return x + \"\";\n  }\n  var d3_time = d3.time = {}, d3_date = Date;\n  function d3_date_utc() {\n    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n  }\n  d3_date_utc.prototype = {\n    getDate: function() {\n      return this._.getUTCDate();\n    },\n    getDay: function() {\n      return this._.getUTCDay();\n    },\n    getFullYear: function() {\n      return this._.getUTCFullYear();\n    },\n    getHours: function() {\n      return this._.getUTCHours();\n    },\n    getMilliseconds: function() {\n      return this._.getUTCMilliseconds();\n    },\n    getMinutes: function() {\n      return this._.getUTCMinutes();\n    },\n    getMonth: function() {\n      return this._.getUTCMonth();\n    },\n    getSeconds: function() {\n      return this._.getUTCSeconds();\n    },\n    getTime: function() {\n      return this._.getTime();\n    },\n    getTimezoneOffset: function() {\n      return 0;\n    },\n    valueOf: function() {\n      return this._.valueOf();\n    },\n    setDate: function() {\n      d3_time_prototype.setUTCDate.apply(this._, arguments);\n    },\n    setDay: function() {\n      d3_time_prototype.setUTCDay.apply(this._, arguments);\n    },\n    setFullYear: function() {\n      d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n    },\n    setHours: function() {\n      d3_time_prototype.setUTCHours.apply(this._, arguments);\n    },\n    setMilliseconds: function() {\n      d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n    },\n    setMinutes: function() {\n      d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n    },\n    setMonth: function() {\n      d3_time_prototype.setUTCMonth.apply(this._, arguments);\n    },\n    setSeconds: function() {\n      d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n    },\n    setTime: function() {\n      d3_time_prototype.setTime.apply(this._, arguments);\n    }\n  };\n  var d3_time_prototype = Date.prototype;\n  function d3_time_interval(local, step, number) {\n    function round(date) {\n      var d0 = local(date), d1 = offset(d0, 1);\n      return date - d0 < d1 - date ? d0 : d1;\n    }\n    function ceil(date) {\n      step(date = local(new d3_date(date - 1)), 1);\n      return date;\n    }\n    function offset(date, k) {\n      step(date = new d3_date(+date), k);\n      return date;\n    }\n    function range(t0, t1, dt) {\n      var time = ceil(t0), times = [];\n      if (dt > 1) {\n        while (time < t1) {\n          if (!(number(time) % dt)) times.push(new Date(+time));\n          step(time, 1);\n        }\n      } else {\n        while (time < t1) times.push(new Date(+time)), step(time, 1);\n      }\n      return times;\n    }\n    function range_utc(t0, t1, dt) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = t0;\n        return range(utc, t1, dt);\n      } finally {\n        d3_date = Date;\n      }\n    }\n    local.floor = local;\n    local.round = round;\n    local.ceil = ceil;\n    local.offset = offset;\n    local.range = range;\n    var utc = local.utc = d3_time_interval_utc(local);\n    utc.floor = utc;\n    utc.round = d3_time_interval_utc(round);\n    utc.ceil = d3_time_interval_utc(ceil);\n    utc.offset = d3_time_interval_utc(offset);\n    utc.range = range_utc;\n    return local;\n  }\n  function d3_time_interval_utc(method) {\n    return function(date, k) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = date;\n        return method(utc, k)._;\n      } finally {\n        d3_date = Date;\n      }\n    };\n  }\n  d3_time.year = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setMonth(0, 1);\n    return date;\n  }, function(date, offset) {\n    date.setFullYear(date.getFullYear() + offset);\n  }, function(date) {\n    return date.getFullYear();\n  });\n  d3_time.years = d3_time.year.range;\n  d3_time.years.utc = d3_time.year.utc.range;\n  d3_time.day = d3_time_interval(function(date) {\n    var day = new d3_date(2e3, 0);\n    day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    return day;\n  }, function(date, offset) {\n    date.setDate(date.getDate() + offset);\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n  d3_time.days = d3_time.day.range;\n  d3_time.days.utc = d3_time.day.utc.range;\n  d3_time.dayOfYear = function(date) {\n    var year = d3_time.year(date);\n    return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n  };\n  [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n    i = 7 - i;\n    var interval = d3_time[day] = d3_time_interval(function(date) {\n      (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n      return date;\n    }, function(date, offset) {\n      date.setDate(date.getDate() + Math.floor(offset) * 7);\n    }, function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n    });\n    d3_time[day + \"s\"] = interval.range;\n    d3_time[day + \"s\"].utc = interval.utc.range;\n    d3_time[day + \"OfYear\"] = function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n    };\n  });\n  d3_time.week = d3_time.sunday;\n  d3_time.weeks = d3_time.sunday.range;\n  d3_time.weeks.utc = d3_time.sunday.utc.range;\n  d3_time.weekOfYear = d3_time.sundayOfYear;\n  function d3_locale_timeFormat(locale) {\n    var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n    function d3_time_format(template) {\n      var n = template.length;\n      function format(date) {\n        var string = [], i = -1, j = 0, c, p, f;\n        while (++i < n) {\n          if (template.charCodeAt(i) === 37) {\n            string.push(template.slice(j, i));\n            if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n            if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n        string.push(template.slice(j, i));\n        return string.join(\"\");\n      }\n      format.parse = function(string) {\n        var d = {\n          y: 1900,\n          m: 0,\n          d: 1,\n          H: 0,\n          M: 0,\n          S: 0,\n          L: 0,\n          Z: null\n        }, i = d3_time_parse(d, template, string, 0);\n        if (i != string.length) return null;\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n        var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n        if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n          date.setFullYear(d.y, 0, 1);\n          date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n        } else date.setFullYear(d.y, d.m, d.d);\n        date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n        return localZ ? date._ : date;\n      };\n      format.toString = function() {\n        return template;\n      };\n      return format;\n    }\n    function d3_time_parse(date, template, string, j) {\n      var c, p, t, i = 0, n = template.length, m = string.length;\n      while (i < n) {\n        if (j >= m) return -1;\n        c = template.charCodeAt(i++);\n        if (c === 37) {\n          t = template.charAt(i++);\n          p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n          if (!p || (j = p(date, string, j)) < 0) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n      return j;\n    }\n    d3_time_format.utc = function(template) {\n      var local = d3_time_format(template);\n      function format(date) {\n        try {\n          d3_date = d3_date_utc;\n          var utc = new d3_date();\n          utc._ = date;\n          return local(utc);\n        } finally {\n          d3_date = Date;\n        }\n      }\n      format.parse = function(string) {\n        try {\n          d3_date = d3_date_utc;\n          var date = local.parse(string);\n          return date && date._;\n        } finally {\n          d3_date = Date;\n        }\n      };\n      format.toString = local.toString;\n      return format;\n    };\n    d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n    var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n    locale_periods.forEach(function(p, i) {\n      d3_time_periodLookup.set(p.toLowerCase(), i);\n    });\n    var d3_time_formats = {\n      a: function(d) {\n        return locale_shortDays[d.getDay()];\n      },\n      A: function(d) {\n        return locale_days[d.getDay()];\n      },\n      b: function(d) {\n        return locale_shortMonths[d.getMonth()];\n      },\n      B: function(d) {\n        return locale_months[d.getMonth()];\n      },\n      c: d3_time_format(locale_dateTime),\n      d: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      e: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      H: function(d, p) {\n        return d3_time_formatPad(d.getHours(), p, 2);\n      },\n      I: function(d, p) {\n        return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n      },\n      j: function(d, p) {\n        return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n      },\n      L: function(d, p) {\n        return d3_time_formatPad(d.getMilliseconds(), p, 3);\n      },\n      m: function(d, p) {\n        return d3_time_formatPad(d.getMonth() + 1, p, 2);\n      },\n      M: function(d, p) {\n        return d3_time_formatPad(d.getMinutes(), p, 2);\n      },\n      p: function(d) {\n        return locale_periods[+(d.getHours() >= 12)];\n      },\n      S: function(d, p) {\n        return d3_time_formatPad(d.getSeconds(), p, 2);\n      },\n      U: function(d, p) {\n        return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n      },\n      w: function(d) {\n        return d.getDay();\n      },\n      W: function(d, p) {\n        return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n      },\n      x: d3_time_format(locale_date),\n      X: d3_time_format(locale_time),\n      y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n      },\n      Y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n      },\n      Z: d3_time_zone,\n      \"%\": function() {\n        return \"%\";\n      }\n    };\n    var d3_time_parsers = {\n      a: d3_time_parseWeekdayAbbrev,\n      A: d3_time_parseWeekday,\n      b: d3_time_parseMonthAbbrev,\n      B: d3_time_parseMonth,\n      c: d3_time_parseLocaleFull,\n      d: d3_time_parseDay,\n      e: d3_time_parseDay,\n      H: d3_time_parseHour24,\n      I: d3_time_parseHour24,\n      j: d3_time_parseDayOfYear,\n      L: d3_time_parseMilliseconds,\n      m: d3_time_parseMonthNumber,\n      M: d3_time_parseMinutes,\n      p: d3_time_parseAmPm,\n      S: d3_time_parseSeconds,\n      U: d3_time_parseWeekNumberSunday,\n      w: d3_time_parseWeekdayNumber,\n      W: d3_time_parseWeekNumberMonday,\n      x: d3_time_parseLocaleDate,\n      X: d3_time_parseLocaleTime,\n      y: d3_time_parseYear,\n      Y: d3_time_parseFullYear,\n      Z: d3_time_parseZone,\n      \"%\": d3_time_parseLiteralPercent\n    };\n    function d3_time_parseWeekdayAbbrev(date, string, i) {\n      d3_time_dayAbbrevRe.lastIndex = 0;\n      var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseWeekday(date, string, i) {\n      d3_time_dayRe.lastIndex = 0;\n      var n = d3_time_dayRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonthAbbrev(date, string, i) {\n      d3_time_monthAbbrevRe.lastIndex = 0;\n      var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonth(date, string, i) {\n      d3_time_monthRe.lastIndex = 0;\n      var n = d3_time_monthRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseLocaleFull(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n    }\n    function d3_time_parseLocaleDate(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n    }\n    function d3_time_parseLocaleTime(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n    }\n    function d3_time_parseAmPm(date, string, i) {\n      var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n      return n == null ? -1 : (date.p = n, i);\n    }\n    return d3_time_format;\n  }\n  var d3_time_formatPads = {\n    \"-\": \"\",\n    _: \" \",\n    \"0\": \"0\"\n  }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n  function d3_time_formatPad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n  function d3_time_formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n  }\n  function d3_time_formatLookup(names) {\n    var map = new d3_Map(), i = -1, n = names.length;\n    while (++i < n) map.set(names[i].toLowerCase(), i);\n    return map;\n  }\n  function d3_time_parseWeekdayNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n    return n ? (date.w = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberSunday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.U = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberMonday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.W = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseFullYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n    return n ? (date.y = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n  }\n  function d3_time_parseZone(date, string, i) {\n    return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n    i + 5) : -1;\n  }\n  function d3_time_expandYear(d) {\n    return d + (d > 68 ? 1900 : 2e3);\n  }\n  function d3_time_parseMonthNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n  }\n  function d3_time_parseDay(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.d = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseDayOfYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.j = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseHour24(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.H = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMinutes(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.M = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseSeconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.S = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMilliseconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.L = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_zone(d) {\n    var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n    return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n  }\n  function d3_time_parseLiteralPercent(date, string, i) {\n    d3_time_percentRe.lastIndex = 0;\n    var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n  function d3_time_formatMulti(formats) {\n    var n = formats.length, i = -1;\n    while (++i < n) formats[i][0] = this(formats[i][0]);\n    return function(date) {\n      var i = 0, f = formats[i];\n      while (!f[1](date)) f = formats[++i];\n      return f[0](date);\n    };\n  }\n  d3.locale = function(locale) {\n    return {\n      numberFormat: d3_locale_numberFormat(locale),\n      timeFormat: d3_locale_timeFormat(locale)\n    };\n  };\n  var d3_locale_enUS = d3.locale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [ 3 ],\n    currency: [ \"$\", \"\" ],\n    dateTime: \"%a %b %e %X %Y\",\n    date: \"%m/%d/%Y\",\n    time: \"%H:%M:%S\",\n    periods: [ \"AM\", \"PM\" ],\n    days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n    shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n    months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n    shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n  });\n  d3.format = d3_locale_enUS.numberFormat;\n  d3.geo = {};\n  function d3_adder() {}\n  d3_adder.prototype = {\n    s: 0,\n    t: 0,\n    add: function(y) {\n      d3_adderSum(y, this.t, d3_adderTemp);\n      d3_adderSum(d3_adderTemp.s, this.s, this);\n      if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n    },\n    reset: function() {\n      this.s = this.t = 0;\n    },\n    valueOf: function() {\n      return this.s;\n    }\n  };\n  var d3_adderTemp = new d3_adder();\n  function d3_adderSum(a, b, o) {\n    var x = o.s = a + b, bv = x - a, av = x - bv;\n    o.t = a - av + (b - bv);\n  }\n  d3.geo.stream = function(object, listener) {\n    if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n      d3_geo_streamObjectType[object.type](object, listener);\n    } else {\n      d3_geo_streamGeometry(object, listener);\n    }\n  };\n  function d3_geo_streamGeometry(geometry, listener) {\n    if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n      d3_geo_streamGeometryType[geometry.type](geometry, listener);\n    }\n  }\n  var d3_geo_streamObjectType = {\n    Feature: function(feature, listener) {\n      d3_geo_streamGeometry(feature.geometry, listener);\n    },\n    FeatureCollection: function(object, listener) {\n      var features = object.features, i = -1, n = features.length;\n      while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n    }\n  };\n  var d3_geo_streamGeometryType = {\n    Sphere: function(object, listener) {\n      listener.sphere();\n    },\n    Point: function(object, listener) {\n      object = object.coordinates;\n      listener.point(object[0], object[1], object[2]);\n    },\n    MultiPoint: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n    },\n    LineString: function(object, listener) {\n      d3_geo_streamLine(object.coordinates, listener, 0);\n    },\n    MultiLineString: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n    },\n    Polygon: function(object, listener) {\n      d3_geo_streamPolygon(object.coordinates, listener);\n    },\n    MultiPolygon: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n    },\n    GeometryCollection: function(object, listener) {\n      var geometries = object.geometries, i = -1, n = geometries.length;\n      while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n    }\n  };\n  function d3_geo_streamLine(coordinates, listener, closed) {\n    var i = -1, n = coordinates.length - closed, coordinate;\n    listener.lineStart();\n    while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n    listener.lineEnd();\n  }\n  function d3_geo_streamPolygon(coordinates, listener) {\n    var i = -1, n = coordinates.length;\n    listener.polygonStart();\n    while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n    listener.polygonEnd();\n  }\n  d3.geo.area = function(object) {\n    d3_geo_areaSum = 0;\n    d3.geo.stream(object, d3_geo_area);\n    return d3_geo_areaSum;\n  };\n  var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n  var d3_geo_area = {\n    sphere: function() {\n      d3_geo_areaSum += 4 * π;\n    },\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_areaRingSum.reset();\n      d3_geo_area.lineStart = d3_geo_areaRingStart;\n    },\n    polygonEnd: function() {\n      var area = 2 * d3_geo_areaRingSum;\n      d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n      d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n    }\n  };\n  function d3_geo_areaRingStart() {\n    var λ00, φ00, λ0, cosφ0, sinφ0;\n    d3_geo_area.point = function(λ, φ) {\n      d3_geo_area.point = nextPoint;\n      λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n      sinφ0 = Math.sin(φ);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      φ = φ * d3_radians / 2 + π / 4;\n      var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n      d3_geo_areaRingSum.add(Math.atan2(v, u));\n      λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n    }\n    d3_geo_area.lineEnd = function() {\n      nextPoint(λ00, φ00);\n    };\n  }\n  function d3_geo_cartesian(spherical) {\n    var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n    return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n  }\n  function d3_geo_cartesianDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n  }\n  function d3_geo_cartesianCross(a, b) {\n    return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n  }\n  function d3_geo_cartesianAdd(a, b) {\n    a[0] += b[0];\n    a[1] += b[1];\n    a[2] += b[2];\n  }\n  function d3_geo_cartesianScale(vector, k) {\n    return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n  }\n  function d3_geo_cartesianNormalize(d) {\n    var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n    d[0] /= l;\n    d[1] /= l;\n    d[2] /= l;\n  }\n  function d3_geo_spherical(cartesian) {\n    return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n  }\n  function d3_geo_sphericalEqual(a, b) {\n    return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n  }\n  d3.geo.bounds = function() {\n    var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n    var bound = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        bound.point = ringPoint;\n        bound.lineStart = ringStart;\n        bound.lineEnd = ringEnd;\n        dλSum = 0;\n        d3_geo_area.polygonStart();\n      },\n      polygonEnd: function() {\n        d3_geo_area.polygonEnd();\n        bound.point = point;\n        bound.lineStart = lineStart;\n        bound.lineEnd = lineEnd;\n        if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n        range[0] = λ0, range[1] = λ1;\n      }\n    };\n    function point(λ, φ) {\n      ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n      if (φ < φ0) φ0 = φ;\n      if (φ > φ1) φ1 = φ;\n    }\n    function linePoint(λ, φ) {\n      var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n      if (p0) {\n        var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n        d3_geo_cartesianNormalize(inflection);\n        inflection = d3_geo_spherical(inflection);\n        var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n        if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = inflection[1] * d3_degrees;\n          if (φi > φ1) φ1 = φi;\n        } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = -inflection[1] * d3_degrees;\n          if (φi < φ0) φ0 = φi;\n        } else {\n          if (φ < φ0) φ0 = φ;\n          if (φ > φ1) φ1 = φ;\n        }\n        if (antimeridian) {\n          if (λ < λ_) {\n            if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n          } else {\n            if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n          }\n        } else {\n          if (λ1 >= λ0) {\n            if (λ < λ0) λ0 = λ;\n            if (λ > λ1) λ1 = λ;\n          } else {\n            if (λ > λ_) {\n              if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n            } else {\n              if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n            }\n          }\n        }\n      } else {\n        point(λ, φ);\n      }\n      p0 = p, λ_ = λ;\n    }\n    function lineStart() {\n      bound.point = linePoint;\n    }\n    function lineEnd() {\n      range[0] = λ0, range[1] = λ1;\n      bound.point = point;\n      p0 = null;\n    }\n    function ringPoint(λ, φ) {\n      if (p0) {\n        var dλ = λ - λ_;\n        dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n      } else λ__ = λ, φ__ = φ;\n      d3_geo_area.point(λ, φ);\n      linePoint(λ, φ);\n    }\n    function ringStart() {\n      d3_geo_area.lineStart();\n    }\n    function ringEnd() {\n      ringPoint(λ__, φ__);\n      d3_geo_area.lineEnd();\n      if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n      range[0] = λ0, range[1] = λ1;\n      p0 = null;\n    }\n    function angle(λ0, λ1) {\n      return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n    }\n    function compareRanges(a, b) {\n      return a[0] - b[0];\n    }\n    function withinRange(x, range) {\n      return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n    }\n    return function(feature) {\n      φ1 = λ1 = -(λ0 = φ0 = Infinity);\n      ranges = [];\n      d3.geo.stream(feature, bound);\n      var n = ranges.length;\n      if (n) {\n        ranges.sort(compareRanges);\n        for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n          b = ranges[i];\n          if (withinRange(b[0], a) || withinRange(b[1], a)) {\n            if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n            if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n          } else {\n            merged.push(a = b);\n          }\n        }\n        var best = -Infinity, dλ;\n        for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n          b = merged[i];\n          if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n        }\n      }\n      ranges = range = null;\n      return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n    };\n  }();\n  d3.geo.centroid = function(object) {\n    d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n    d3.geo.stream(object, d3_geo_centroid);\n    var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n    if (m < ε2) {\n      x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n      if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n      m = x * x + y * y + z * z;\n      if (m < ε2) return [ NaN, NaN ];\n    }\n    return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n  };\n  var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n  var d3_geo_centroid = {\n    sphere: d3_noop,\n    point: d3_geo_centroidPoint,\n    lineStart: d3_geo_centroidLineStart,\n    lineEnd: d3_geo_centroidLineEnd,\n    polygonStart: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n    }\n  };\n  function d3_geo_centroidPoint(λ, φ) {\n    λ *= d3_radians;\n    var cosφ = Math.cos(φ *= d3_radians);\n    d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n  }\n  function d3_geo_centroidPointXYZ(x, y, z) {\n    ++d3_geo_centroidW0;\n    d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n    d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n    d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n  }\n  function d3_geo_centroidLineStart() {\n    var x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroid.point = nextPoint;\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_centroidLineEnd() {\n    d3_geo_centroid.point = d3_geo_centroidPoint;\n  }\n  function d3_geo_centroidRingStart() {\n    var λ00, φ00, x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ00 = λ, φ00 = φ;\n      d3_geo_centroid.point = nextPoint;\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    d3_geo_centroid.lineEnd = function() {\n      nextPoint(λ00, φ00);\n      d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n      d3_geo_centroid.point = d3_geo_centroidPoint;\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n      d3_geo_centroidX2 += v * cx;\n      d3_geo_centroidY2 += v * cy;\n      d3_geo_centroidZ2 += v * cz;\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_compose(a, b) {\n    function compose(x, y) {\n      return x = a(x, y), b(x[0], x[1]);\n    }\n    if (a.invert && b.invert) compose.invert = function(x, y) {\n      return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n    };\n    return compose;\n  }\n  function d3_true() {\n    return true;\n  }\n  function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n    var subject = [], clip = [];\n    segments.forEach(function(segment) {\n      if ((n = segment.length - 1) <= 0) return;\n      var n, p0 = segment[0], p1 = segment[n];\n      if (d3_geo_sphericalEqual(p0, p1)) {\n        listener.lineStart();\n        for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n        listener.lineEnd();\n        return;\n      }\n      var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n      a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n      b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n    });\n    clip.sort(compare);\n    d3_geo_clipPolygonLinkCircular(subject);\n    d3_geo_clipPolygonLinkCircular(clip);\n    if (!subject.length) return;\n    for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n      clip[i].e = entry = !entry;\n    }\n    var start = subject[0], points, point;\n    while (1) {\n      var current = start, isSubject = true;\n      while (current.v) if ((current = current.n) === start) return;\n      points = current.z;\n      listener.lineStart();\n      do {\n        current.v = current.o.v = true;\n        if (current.e) {\n          if (isSubject) {\n            for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.n.x, 1, listener);\n          }\n          current = current.n;\n        } else {\n          if (isSubject) {\n            points = current.p.z;\n            for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.p.x, -1, listener);\n          }\n          current = current.p;\n        }\n        current = current.o;\n        points = current.z;\n        isSubject = !isSubject;\n      } while (!current.v);\n      listener.lineEnd();\n    }\n  }\n  function d3_geo_clipPolygonLinkCircular(array) {\n    if (!(n = array.length)) return;\n    var n, i = 0, a = array[0], b;\n    while (++i < n) {\n      a.n = b = array[i];\n      b.p = a;\n      a = b;\n    }\n    a.n = b = array[0];\n    b.p = a;\n  }\n  function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n    this.x = point;\n    this.z = points;\n    this.o = other;\n    this.e = entry;\n    this.v = false;\n    this.n = this.p = null;\n  }\n  function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n    return function(rotate, listener) {\n      var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          clip.point = pointRing;\n          clip.lineStart = ringStart;\n          clip.lineEnd = ringEnd;\n          segments = [];\n          polygon = [];\n        },\n        polygonEnd: function() {\n          clip.point = point;\n          clip.lineStart = lineStart;\n          clip.lineEnd = lineEnd;\n          segments = d3.merge(segments);\n          var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n          if (segments.length) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n          } else if (clipStartInside) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            interpolate(null, null, 1, listener);\n            listener.lineEnd();\n          }\n          if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n          segments = polygon = null;\n        },\n        sphere: function() {\n          listener.polygonStart();\n          listener.lineStart();\n          interpolate(null, null, 1, listener);\n          listener.lineEnd();\n          listener.polygonEnd();\n        }\n      };\n      function point(λ, φ) {\n        var point = rotate(λ, φ);\n        if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n      }\n      function pointLine(λ, φ) {\n        var point = rotate(λ, φ);\n        line.point(point[0], point[1]);\n      }\n      function lineStart() {\n        clip.point = pointLine;\n        line.lineStart();\n      }\n      function lineEnd() {\n        clip.point = point;\n        line.lineEnd();\n      }\n      var segments;\n      var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n      function pointRing(λ, φ) {\n        ring.push([ λ, φ ]);\n        var point = rotate(λ, φ);\n        ringListener.point(point[0], point[1]);\n      }\n      function ringStart() {\n        ringListener.lineStart();\n        ring = [];\n      }\n      function ringEnd() {\n        pointRing(ring[0][0], ring[0][1]);\n        ringListener.lineEnd();\n        var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n        ring.pop();\n        polygon.push(ring);\n        ring = null;\n        if (!n) return;\n        if (clean & 1) {\n          segment = ringSegments[0];\n          var n = segment.length - 1, i = -1, point;\n          if (n > 0) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            while (++i < n) listener.point((point = segment[i])[0], point[1]);\n            listener.lineEnd();\n          }\n          return;\n        }\n        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n        segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n      }\n      return clip;\n    };\n  }\n  function d3_geo_clipSegmentLength1(segment) {\n    return segment.length > 1;\n  }\n  function d3_geo_clipBufferListener() {\n    var lines = [], line;\n    return {\n      lineStart: function() {\n        lines.push(line = []);\n      },\n      point: function(λ, φ) {\n        line.push([ λ, φ ]);\n      },\n      lineEnd: d3_noop,\n      buffer: function() {\n        var buffer = lines;\n        lines = [];\n        line = null;\n        return buffer;\n      },\n      rejoin: function() {\n        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n      }\n    };\n  }\n  function d3_geo_clipSort(a, b) {\n    return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n  }\n  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n  function d3_geo_clipAntimeridianLine(listener) {\n    var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n    return {\n      lineStart: function() {\n        listener.lineStart();\n        clean = 1;\n      },\n      point: function(λ1, φ1) {\n        var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n        if (abs(dλ - π) < ε) {\n          listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          listener.point(λ1, φ0);\n          clean = 0;\n        } else if (sλ0 !== sλ1 && dλ >= π) {\n          if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n          if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n          φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          clean = 0;\n        }\n        listener.point(λ0 = λ1, φ0 = φ1);\n        sλ0 = sλ1;\n      },\n      lineEnd: function() {\n        listener.lineEnd();\n        λ0 = φ0 = NaN;\n      },\n      clean: function() {\n        return 2 - clean;\n      }\n    };\n  }\n  function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n    var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n    return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n  }\n  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n    var φ;\n    if (from == null) {\n      φ = direction * halfπ;\n      listener.point(-π, φ);\n      listener.point(0, φ);\n      listener.point(π, φ);\n      listener.point(π, 0);\n      listener.point(π, -φ);\n      listener.point(0, -φ);\n      listener.point(-π, -φ);\n      listener.point(-π, 0);\n      listener.point(-π, φ);\n    } else if (abs(from[0] - to[0]) > ε) {\n      var s = from[0] < to[0] ? π : -π;\n      φ = direction * s / 2;\n      listener.point(-s, φ);\n      listener.point(0, φ);\n      listener.point(s, φ);\n    } else {\n      listener.point(to[0], to[1]);\n    }\n  }\n  function d3_geo_pointInPolygon(point, polygon) {\n    var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n    d3_geo_areaRingSum.reset();\n    for (var i = 0, n = polygon.length; i < n; ++i) {\n      var ring = polygon[i], m = ring.length;\n      if (!m) continue;\n      var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n      while (true) {\n        if (j === m) j = 0;\n        point = ring[j];\n        var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n        d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n        polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n        if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n          var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n          d3_geo_cartesianNormalize(arc);\n          var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n          d3_geo_cartesianNormalize(intersection);\n          var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n          if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n            winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n          }\n        }\n        if (!j++) break;\n        λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n      }\n    }\n    return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;\n  }\n  function d3_geo_clipCircle(radius) {\n    var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n    return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n    function visible(λ, φ) {\n      return Math.cos(λ) * Math.cos(φ) > cr;\n    }\n    function clipLine(listener) {\n      var point0, c0, v0, v00, clean;\n      return {\n        lineStart: function() {\n          v00 = v0 = false;\n          clean = 1;\n        },\n        point: function(λ, φ) {\n          var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n          if (!point0 && (v00 = v0 = v)) listener.lineStart();\n          if (v !== v0) {\n            point2 = intersect(point0, point1);\n            if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n              point1[0] += ε;\n              point1[1] += ε;\n              v = visible(point1[0], point1[1]);\n            }\n          }\n          if (v !== v0) {\n            clean = 0;\n            if (v) {\n              listener.lineStart();\n              point2 = intersect(point1, point0);\n              listener.point(point2[0], point2[1]);\n            } else {\n              point2 = intersect(point0, point1);\n              listener.point(point2[0], point2[1]);\n              listener.lineEnd();\n            }\n            point0 = point2;\n          } else if (notHemisphere && point0 && smallRadius ^ v) {\n            var t;\n            if (!(c & c0) && (t = intersect(point1, point0, true))) {\n              clean = 0;\n              if (smallRadius) {\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n              } else {\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n              }\n            }\n          }\n          if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n            listener.point(point1[0], point1[1]);\n          }\n          point0 = point1, v0 = v, c0 = c;\n        },\n        lineEnd: function() {\n          if (v0) listener.lineEnd();\n          point0 = null;\n        },\n        clean: function() {\n          return clean | (v00 && v0) << 1;\n        }\n      };\n    }\n    function intersect(a, b, two) {\n      var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n      var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n      if (!determinant) return !two && a;\n      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n      d3_geo_cartesianAdd(A, B);\n      var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n      if (t2 < 0) return;\n      var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n      d3_geo_cartesianAdd(q, A);\n      q = d3_geo_spherical(q);\n      if (!two) return q;\n      var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n      if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n      var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n      if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n      if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n        var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n        d3_geo_cartesianAdd(q1, A);\n        return [ q, d3_geo_spherical(q1) ];\n      }\n    }\n    function code(λ, φ) {\n      var r = smallRadius ? radius : π - radius, code = 0;\n      if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n      if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n      return code;\n    }\n  }\n  function d3_geom_clipLine(x0, y0, x1, y1) {\n    return function(line) {\n      var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n      r = x0 - ax;\n      if (!dx && r > 0) return;\n      r /= dx;\n      if (dx < 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      } else if (dx > 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      }\n      r = x1 - ax;\n      if (!dx && r < 0) return;\n      r /= dx;\n      if (dx < 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      } else if (dx > 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      }\n      r = y0 - ay;\n      if (!dy && r > 0) return;\n      r /= dy;\n      if (dy < 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      } else if (dy > 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      }\n      r = y1 - ay;\n      if (!dy && r < 0) return;\n      r /= dy;\n      if (dy < 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      } else if (dy > 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      }\n      if (t0 > 0) line.a = {\n        x: ax + t0 * dx,\n        y: ay + t0 * dy\n      };\n      if (t1 < 1) line.b = {\n        x: ax + t1 * dx,\n        y: ay + t1 * dy\n      };\n      return line;\n    };\n  }\n  var d3_geo_clipExtentMAX = 1e9;\n  d3.geo.clipExtent = function() {\n    var x0, y0, x1, y1, stream, clip, clipExtent = {\n      stream: function(output) {\n        if (stream) stream.valid = false;\n        stream = clip(output);\n        stream.valid = true;\n        return stream;\n      },\n      extent: function(_) {\n        if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n        clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n        if (stream) stream.valid = false, stream = null;\n        return clipExtent;\n      }\n    };\n    return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n  };\n  function d3_geo_clipExtent(x0, y0, x1, y1) {\n    return function(listener) {\n      var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          listener = bufferListener;\n          segments = [];\n          polygon = [];\n          clean = true;\n        },\n        polygonEnd: function() {\n          listener = listener_;\n          segments = d3.merge(segments);\n          var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n          if (inside || visible) {\n            listener.polygonStart();\n            if (inside) {\n              listener.lineStart();\n              interpolate(null, null, 1, listener);\n              listener.lineEnd();\n            }\n            if (visible) {\n              d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n            }\n            listener.polygonEnd();\n          }\n          segments = polygon = ring = null;\n        }\n      };\n      function insidePolygon(p) {\n        var wn = 0, n = polygon.length, y = p[1];\n        for (var i = 0; i < n; ++i) {\n          for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n            b = v[j];\n            if (a[1] <= y) {\n              if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n            } else {\n              if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n            }\n            a = b;\n          }\n        }\n        return wn !== 0;\n      }\n      function interpolate(from, to, direction, listener) {\n        var a = 0, a1 = 0;\n        if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n          do {\n            listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n          } while ((a = (a + direction + 4) % 4) !== a1);\n        } else {\n          listener.point(to[0], to[1]);\n        }\n      }\n      function pointVisible(x, y) {\n        return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n      }\n      function point(x, y) {\n        if (pointVisible(x, y)) listener.point(x, y);\n      }\n      var x__, y__, v__, x_, y_, v_, first, clean;\n      function lineStart() {\n        clip.point = linePoint;\n        if (polygon) polygon.push(ring = []);\n        first = true;\n        v_ = false;\n        x_ = y_ = NaN;\n      }\n      function lineEnd() {\n        if (segments) {\n          linePoint(x__, y__);\n          if (v__ && v_) bufferListener.rejoin();\n          segments.push(bufferListener.buffer());\n        }\n        clip.point = point;\n        if (v_) listener.lineEnd();\n      }\n      function linePoint(x, y) {\n        x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n        y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n        var v = pointVisible(x, y);\n        if (polygon) ring.push([ x, y ]);\n        if (first) {\n          x__ = x, y__ = y, v__ = v;\n          first = false;\n          if (v) {\n            listener.lineStart();\n            listener.point(x, y);\n          }\n        } else {\n          if (v && v_) listener.point(x, y); else {\n            var l = {\n              a: {\n                x: x_,\n                y: y_\n              },\n              b: {\n                x: x,\n                y: y\n              }\n            };\n            if (clipLine(l)) {\n              if (!v_) {\n                listener.lineStart();\n                listener.point(l.a.x, l.a.y);\n              }\n              listener.point(l.b.x, l.b.y);\n              if (!v) listener.lineEnd();\n              clean = false;\n            } else if (v) {\n              listener.lineStart();\n              listener.point(x, y);\n              clean = false;\n            }\n          }\n        }\n        x_ = x, y_ = y, v_ = v;\n      }\n      return clip;\n    };\n    function corner(p, direction) {\n      return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n    }\n    function compare(a, b) {\n      return comparePoints(a.x, b.x);\n    }\n    function comparePoints(a, b) {\n      var ca = corner(a, 1), cb = corner(b, 1);\n      return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n    }\n  }\n  function d3_geo_conic(projectAt) {\n    var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n    p.parallels = function(_) {\n      if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n      return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n    };\n    return p;\n  }\n  function d3_geo_conicEqualArea(φ0, φ1) {\n    var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n    function forward(λ, φ) {\n      var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n      return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = ρ0 - y;\n      return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEqualArea = function() {\n    return d3_geo_conic(d3_geo_conicEqualArea);\n  }).raw = d3_geo_conicEqualArea;\n  d3.geo.albers = function() {\n    return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n  };\n  d3.geo.albersUsa = function() {\n    var lower48 = d3.geo.albers();\n    var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n    var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n    var point, pointStream = {\n      point: function(x, y) {\n        point = [ x, y ];\n      }\n    }, lower48Point, alaskaPoint, hawaiiPoint;\n    function albersUsa(coordinates) {\n      var x = coordinates[0], y = coordinates[1];\n      point = null;\n      (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n      return point;\n    }\n    albersUsa.invert = function(coordinates) {\n      var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n      return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n    };\n    albersUsa.stream = function(stream) {\n      var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n      return {\n        point: function(x, y) {\n          lower48Stream.point(x, y);\n          alaskaStream.point(x, y);\n          hawaiiStream.point(x, y);\n        },\n        sphere: function() {\n          lower48Stream.sphere();\n          alaskaStream.sphere();\n          hawaiiStream.sphere();\n        },\n        lineStart: function() {\n          lower48Stream.lineStart();\n          alaskaStream.lineStart();\n          hawaiiStream.lineStart();\n        },\n        lineEnd: function() {\n          lower48Stream.lineEnd();\n          alaskaStream.lineEnd();\n          hawaiiStream.lineEnd();\n        },\n        polygonStart: function() {\n          lower48Stream.polygonStart();\n          alaskaStream.polygonStart();\n          hawaiiStream.polygonStart();\n        },\n        polygonEnd: function() {\n          lower48Stream.polygonEnd();\n          alaskaStream.polygonEnd();\n          hawaiiStream.polygonEnd();\n        }\n      };\n    };\n    albersUsa.precision = function(_) {\n      if (!arguments.length) return lower48.precision();\n      lower48.precision(_);\n      alaska.precision(_);\n      hawaii.precision(_);\n      return albersUsa;\n    };\n    albersUsa.scale = function(_) {\n      if (!arguments.length) return lower48.scale();\n      lower48.scale(_);\n      alaska.scale(_ * .35);\n      hawaii.scale(_);\n      return albersUsa.translate(lower48.translate());\n    };\n    albersUsa.translate = function(_) {\n      if (!arguments.length) return lower48.translate();\n      var k = lower48.scale(), x = +_[0], y = +_[1];\n      lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n      alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      return albersUsa;\n    };\n    return albersUsa.scale(1070);\n  };\n  var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_pathAreaPolygon = 0;\n      d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n      d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n    }\n  };\n  function d3_geo_pathAreaRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathArea.point = function(x, y) {\n      d3_geo_pathArea.point = nextPoint;\n      x00 = x0 = x, y00 = y0 = y;\n    };\n    function nextPoint(x, y) {\n      d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n      x0 = x, y0 = y;\n    }\n    d3_geo_pathArea.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n  var d3_geo_pathBounds = {\n    point: d3_geo_pathBoundsPoint,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_pathBoundsPoint(x, y) {\n    if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n    if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n    if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n    if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n  }\n  function d3_geo_pathBuffer() {\n    var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointCircle = d3_geo_pathBufferCircle(_);\n        return stream;\n      },\n      result: function() {\n        if (buffer.length) {\n          var result = buffer.join(\"\");\n          buffer = [];\n          return result;\n        }\n      }\n    };\n    function point(x, y) {\n      buffer.push(\"M\", x, \",\", y, pointCircle);\n    }\n    function pointLineStart(x, y) {\n      buffer.push(\"M\", x, \",\", y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      buffer.push(\"L\", x, \",\", y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      buffer.push(\"Z\");\n    }\n    return stream;\n  }\n  function d3_geo_pathBufferCircle(radius) {\n    return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n  }\n  var d3_geo_pathCentroid = {\n    point: d3_geo_pathCentroidPoint,\n    lineStart: d3_geo_pathCentroidLineStart,\n    lineEnd: d3_geo_pathCentroidLineEnd,\n    polygonStart: function() {\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n      d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n    }\n  };\n  function d3_geo_pathCentroidPoint(x, y) {\n    d3_geo_centroidX0 += x;\n    d3_geo_centroidY0 += y;\n    ++d3_geo_centroidZ0;\n  }\n  function d3_geo_pathCentroidLineStart() {\n    var x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n  }\n  function d3_geo_pathCentroidLineEnd() {\n    d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n  }\n  function d3_geo_pathCentroidRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      z = y0 * x - x0 * y;\n      d3_geo_centroidX2 += z * (x0 + x);\n      d3_geo_centroidY2 += z * (y0 + y);\n      d3_geo_centroidZ2 += z * 3;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n    d3_geo_pathCentroid.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  function d3_geo_pathContext(context) {\n    var pointRadius = 4.5;\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointRadius = _;\n        return stream;\n      },\n      result: d3_noop\n    };\n    function point(x, y) {\n      context.moveTo(x + pointRadius, y);\n      context.arc(x, y, pointRadius, 0, τ);\n    }\n    function pointLineStart(x, y) {\n      context.moveTo(x, y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      context.lineTo(x, y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      context.closePath();\n    }\n    return stream;\n  }\n  function d3_geo_resample(project) {\n    var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n    function resample(stream) {\n      return (maxDepth ? resampleRecursive : resampleNone)(stream);\n    }\n    function resampleNone(stream) {\n      return d3_geo_transformPoint(stream, function(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      });\n    }\n    function resampleRecursive(stream) {\n      var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n      var resample = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          stream.polygonStart();\n          resample.lineStart = ringStart;\n        },\n        polygonEnd: function() {\n          stream.polygonEnd();\n          resample.lineStart = lineStart;\n        }\n      };\n      function point(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      }\n      function lineStart() {\n        x0 = NaN;\n        resample.point = linePoint;\n        stream.lineStart();\n      }\n      function linePoint(λ, φ) {\n        var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n        stream.point(x0, y0);\n      }\n      function lineEnd() {\n        resample.point = point;\n        stream.lineEnd();\n      }\n      function ringStart() {\n        lineStart();\n        resample.point = ringPoint;\n        resample.lineEnd = ringEnd;\n      }\n      function ringPoint(λ, φ) {\n        linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n        resample.point = linePoint;\n      }\n      function ringEnd() {\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n        resample.lineEnd = lineEnd;\n        lineEnd();\n      }\n      return resample;\n    }\n    function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n      var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n      if (d2 > 4 * δ2 && depth--) {\n        var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n        if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n          resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n          stream.point(x2, y2);\n          resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n        }\n      }\n    }\n    resample.precision = function(_) {\n      if (!arguments.length) return Math.sqrt(δ2);\n      maxDepth = (δ2 = _ * _) > 0 && 16;\n      return resample;\n    };\n    return resample;\n  }\n  d3.geo.path = function() {\n    var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n    function path(object) {\n      if (object) {\n        if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n        if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n        d3.geo.stream(object, cacheStream);\n      }\n      return contextStream.result();\n    }\n    path.area = function(object) {\n      d3_geo_pathAreaSum = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathArea));\n      return d3_geo_pathAreaSum;\n    };\n    path.centroid = function(object) {\n      d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n      return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n    };\n    path.bounds = function(object) {\n      d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n      d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n      return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n    };\n    path.projection = function(_) {\n      if (!arguments.length) return projection;\n      projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n      return reset();\n    };\n    path.context = function(_) {\n      if (!arguments.length) return context;\n      contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n      if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n      return reset();\n    };\n    path.pointRadius = function(_) {\n      if (!arguments.length) return pointRadius;\n      pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n      return path;\n    };\n    function reset() {\n      cacheStream = null;\n      return path;\n    }\n    return path.projection(d3.geo.albersUsa()).context(null);\n  };\n  function d3_geo_pathProjectStream(project) {\n    var resample = d3_geo_resample(function(x, y) {\n      return project([ x * d3_degrees, y * d3_degrees ]);\n    });\n    return function(stream) {\n      return d3_geo_projectionRadians(resample(stream));\n    };\n  }\n  d3.geo.transform = function(methods) {\n    return {\n      stream: function(stream) {\n        var transform = new d3_geo_transform(stream);\n        for (var k in methods) transform[k] = methods[k];\n        return transform;\n      }\n    };\n  };\n  function d3_geo_transform(stream) {\n    this.stream = stream;\n  }\n  d3_geo_transform.prototype = {\n    point: function(x, y) {\n      this.stream.point(x, y);\n    },\n    sphere: function() {\n      this.stream.sphere();\n    },\n    lineStart: function() {\n      this.stream.lineStart();\n    },\n    lineEnd: function() {\n      this.stream.lineEnd();\n    },\n    polygonStart: function() {\n      this.stream.polygonStart();\n    },\n    polygonEnd: function() {\n      this.stream.polygonEnd();\n    }\n  };\n  function d3_geo_transformPoint(stream, point) {\n    return {\n      point: point,\n      sphere: function() {\n        stream.sphere();\n      },\n      lineStart: function() {\n        stream.lineStart();\n      },\n      lineEnd: function() {\n        stream.lineEnd();\n      },\n      polygonStart: function() {\n        stream.polygonStart();\n      },\n      polygonEnd: function() {\n        stream.polygonEnd();\n      }\n    };\n  }\n  d3.geo.projection = d3_geo_projection;\n  d3.geo.projectionMutator = d3_geo_projectionMutator;\n  function d3_geo_projection(project) {\n    return d3_geo_projectionMutator(function() {\n      return project;\n    })();\n  }\n  function d3_geo_projectionMutator(projectAt) {\n    var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n      x = project(x, y);\n      return [ x[0] * k + δx, δy - x[1] * k ];\n    }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n    function projection(point) {\n      point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n      return [ point[0] * k + δx, δy - point[1] * k ];\n    }\n    function invert(point) {\n      point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n      return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n    }\n    projection.stream = function(output) {\n      if (stream) stream.valid = false;\n      stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n      stream.valid = true;\n      return stream;\n    };\n    projection.clipAngle = function(_) {\n      if (!arguments.length) return clipAngle;\n      preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n      return invalidate();\n    };\n    projection.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent;\n      clipExtent = _;\n      postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n      return invalidate();\n    };\n    projection.scale = function(_) {\n      if (!arguments.length) return k;\n      k = +_;\n      return reset();\n    };\n    projection.translate = function(_) {\n      if (!arguments.length) return [ x, y ];\n      x = +_[0];\n      y = +_[1];\n      return reset();\n    };\n    projection.center = function(_) {\n      if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n      λ = _[0] % 360 * d3_radians;\n      φ = _[1] % 360 * d3_radians;\n      return reset();\n    };\n    projection.rotate = function(_) {\n      if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n      δλ = _[0] % 360 * d3_radians;\n      δφ = _[1] % 360 * d3_radians;\n      δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n      return reset();\n    };\n    d3.rebind(projection, projectResample, \"precision\");\n    function reset() {\n      projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n      var center = project(λ, φ);\n      δx = x - center[0] * k;\n      δy = y + center[1] * k;\n      return invalidate();\n    }\n    function invalidate() {\n      if (stream) stream.valid = false, stream = null;\n      return projection;\n    }\n    return function() {\n      project = projectAt.apply(this, arguments);\n      projection.invert = project.invert && invert;\n      return reset();\n    };\n  }\n  function d3_geo_projectionRadians(stream) {\n    return d3_geo_transformPoint(stream, function(x, y) {\n      stream.point(x * d3_radians, y * d3_radians);\n    });\n  }\n  function d3_geo_equirectangular(λ, φ) {\n    return [ λ, φ ];\n  }\n  (d3.geo.equirectangular = function() {\n    return d3_geo_projection(d3_geo_equirectangular);\n  }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n  d3.geo.rotation = function(rotate) {\n    rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n    function forward(coordinates) {\n      coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    }\n    forward.invert = function(coordinates) {\n      coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    };\n    return forward;\n  };\n  function d3_geo_identityRotation(λ, φ) {\n    return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n  }\n  d3_geo_identityRotation.invert = d3_geo_equirectangular;\n  function d3_geo_rotation(δλ, δφ, δγ) {\n    return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n  }\n  function d3_geo_forwardRotationλ(δλ) {\n    return function(λ, φ) {\n      return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n    };\n  }\n  function d3_geo_rotationλ(δλ) {\n    var rotation = d3_geo_forwardRotationλ(δλ);\n    rotation.invert = d3_geo_forwardRotationλ(-δλ);\n    return rotation;\n  }\n  function d3_geo_rotationφγ(δφ, δγ) {\n    var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n    function rotation(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n      return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n    }\n    rotation.invert = function(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n      return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n    };\n    return rotation;\n  }\n  d3.geo.circle = function() {\n    var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n    function circle() {\n      var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n      interpolate(null, null, 1, {\n        point: function(x, y) {\n          ring.push(x = rotate(x, y));\n          x[0] *= d3_degrees, x[1] *= d3_degrees;\n        }\n      });\n      return {\n        type: \"Polygon\",\n        coordinates: [ ring ]\n      };\n    }\n    circle.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return circle;\n    };\n    circle.angle = function(x) {\n      if (!arguments.length) return angle;\n      interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n      return circle;\n    };\n    circle.precision = function(_) {\n      if (!arguments.length) return precision;\n      interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n      return circle;\n    };\n    return circle.angle(90);\n  };\n  function d3_geo_circleInterpolate(radius, precision) {\n    var cr = Math.cos(radius), sr = Math.sin(radius);\n    return function(from, to, direction, listener) {\n      var step = direction * precision;\n      if (from != null) {\n        from = d3_geo_circleAngle(cr, from);\n        to = d3_geo_circleAngle(cr, to);\n        if (direction > 0 ? from < to : from > to) from += direction * τ;\n      } else {\n        from = radius + direction * τ;\n        to = radius - .5 * step;\n      }\n      for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n        listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n      }\n    };\n  }\n  function d3_geo_circleAngle(cr, point) {\n    var a = d3_geo_cartesian(point);\n    a[0] -= cr;\n    d3_geo_cartesianNormalize(a);\n    var angle = d3_acos(-a[1]);\n    return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n  }\n  d3.geo.distance = function(a, b) {\n    var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n    return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n  };\n  d3.geo.graticule = function() {\n    var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n    function graticule() {\n      return {\n        type: \"MultiLineString\",\n        coordinates: lines()\n      };\n    }\n    function lines() {\n      return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n        return abs(x % DX) > ε;\n      }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n        return abs(y % DY) > ε;\n      }).map(y));\n    }\n    graticule.lines = function() {\n      return lines().map(function(coordinates) {\n        return {\n          type: \"LineString\",\n          coordinates: coordinates\n        };\n      });\n    };\n    graticule.outline = function() {\n      return {\n        type: \"Polygon\",\n        coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n      };\n    };\n    graticule.extent = function(_) {\n      if (!arguments.length) return graticule.minorExtent();\n      return graticule.majorExtent(_).minorExtent(_);\n    };\n    graticule.majorExtent = function(_) {\n      if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n      X0 = +_[0][0], X1 = +_[1][0];\n      Y0 = +_[0][1], Y1 = +_[1][1];\n      if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.minorExtent = function(_) {\n      if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n      x0 = +_[0][0], x1 = +_[1][0];\n      y0 = +_[0][1], y1 = +_[1][1];\n      if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n      if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.step = function(_) {\n      if (!arguments.length) return graticule.minorStep();\n      return graticule.majorStep(_).minorStep(_);\n    };\n    graticule.majorStep = function(_) {\n      if (!arguments.length) return [ DX, DY ];\n      DX = +_[0], DY = +_[1];\n      return graticule;\n    };\n    graticule.minorStep = function(_) {\n      if (!arguments.length) return [ dx, dy ];\n      dx = +_[0], dy = +_[1];\n      return graticule;\n    };\n    graticule.precision = function(_) {\n      if (!arguments.length) return precision;\n      precision = +_;\n      x = d3_geo_graticuleX(y0, y1, 90);\n      y = d3_geo_graticuleY(x0, x1, precision);\n      X = d3_geo_graticuleX(Y0, Y1, 90);\n      Y = d3_geo_graticuleY(X0, X1, precision);\n      return graticule;\n    };\n    return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n  };\n  function d3_geo_graticuleX(y0, y1, dy) {\n    var y = d3.range(y0, y1 - ε, dy).concat(y1);\n    return function(x) {\n      return y.map(function(y) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_geo_graticuleY(x0, x1, dx) {\n    var x = d3.range(x0, x1 - ε, dx).concat(x1);\n    return function(y) {\n      return x.map(function(x) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_source(d) {\n    return d.source;\n  }\n  function d3_target(d) {\n    return d.target;\n  }\n  d3.geo.greatArc = function() {\n    var source = d3_source, source_, target = d3_target, target_;\n    function greatArc() {\n      return {\n        type: \"LineString\",\n        coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n      };\n    }\n    greatArc.distance = function() {\n      return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n    };\n    greatArc.source = function(_) {\n      if (!arguments.length) return source;\n      source = _, source_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.target = function(_) {\n      if (!arguments.length) return target;\n      target = _, target_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.precision = function() {\n      return arguments.length ? greatArc : 0;\n    };\n    return greatArc;\n  };\n  d3.geo.interpolate = function(source, target) {\n    return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n  };\n  function d3_geo_interpolate(x0, y0, x1, y1) {\n    var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n    var interpolate = d ? function(t) {\n      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n      return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n    } : function() {\n      return [ x0 * d3_degrees, y0 * d3_degrees ];\n    };\n    interpolate.distance = d;\n    return interpolate;\n  }\n  d3.geo.length = function(object) {\n    d3_geo_lengthSum = 0;\n    d3.geo.stream(object, d3_geo_length);\n    return d3_geo_lengthSum;\n  };\n  var d3_geo_lengthSum;\n  var d3_geo_length = {\n    sphere: d3_noop,\n    point: d3_noop,\n    lineStart: d3_geo_lengthLineStart,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_lengthLineStart() {\n    var λ0, sinφ0, cosφ0;\n    d3_geo_length.point = function(λ, φ) {\n      λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n      d3_geo_length.point = nextPoint;\n    };\n    d3_geo_length.lineEnd = function() {\n      d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n    };\n    function nextPoint(λ, φ) {\n      var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n      d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n      λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n    }\n  }\n  function d3_geo_azimuthal(scale, angle) {\n    function azimuthal(λ, φ) {\n      var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n      return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n    }\n    azimuthal.invert = function(x, y) {\n      var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n      return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n    };\n    return azimuthal;\n  }\n  var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n    return Math.sqrt(2 / (1 + cosλcosφ));\n  }, function(ρ) {\n    return 2 * Math.asin(ρ / 2);\n  });\n  (d3.geo.azimuthalEqualArea = function() {\n    return d3_geo_projection(d3_geo_azimuthalEqualArea);\n  }).raw = d3_geo_azimuthalEqualArea;\n  var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n    var c = Math.acos(cosλcosφ);\n    return c && c / Math.sin(c);\n  }, d3_identity);\n  (d3.geo.azimuthalEquidistant = function() {\n    return d3_geo_projection(d3_geo_azimuthalEquidistant);\n  }).raw = d3_geo_azimuthalEquidistant;\n  function d3_geo_conicConformal(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), t = function(φ) {\n      return Math.tan(π / 4 + φ / 2);\n    }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n    if (!n) return d3_geo_mercator;\n    function forward(λ, φ) {\n      if (F > 0) {\n        if (φ < -halfπ + ε) φ = -halfπ + ε;\n      } else {\n        if (φ > halfπ - ε) φ = halfπ - ε;\n      }\n      var ρ = F / Math.pow(t(φ), n);\n      return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n      return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n    };\n    return forward;\n  }\n  (d3.geo.conicConformal = function() {\n    return d3_geo_conic(d3_geo_conicConformal);\n  }).raw = d3_geo_conicConformal;\n  function d3_geo_conicEquidistant(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n    if (abs(n) < ε) return d3_geo_equirectangular;\n    function forward(λ, φ) {\n      var ρ = G - φ;\n      return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = G - y;\n      return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEquidistant = function() {\n    return d3_geo_conic(d3_geo_conicEquidistant);\n  }).raw = d3_geo_conicEquidistant;\n  var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / cosλcosφ;\n  }, Math.atan);\n  (d3.geo.gnomonic = function() {\n    return d3_geo_projection(d3_geo_gnomonic);\n  }).raw = d3_geo_gnomonic;\n  function d3_geo_mercator(λ, φ) {\n    return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n  }\n  d3_geo_mercator.invert = function(x, y) {\n    return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n  };\n  function d3_geo_mercatorProjection(project) {\n    var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n    m.scale = function() {\n      var v = scale.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.translate = function() {\n      var v = translate.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.clipExtent = function(_) {\n      var v = clipExtent.apply(m, arguments);\n      if (v === m) {\n        if (clipAuto = _ == null) {\n          var k = π * scale(), t = translate();\n          clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n        }\n      } else if (clipAuto) {\n        v = null;\n      }\n      return v;\n    };\n    return m.clipExtent(null);\n  }\n  (d3.geo.mercator = function() {\n    return d3_geo_mercatorProjection(d3_geo_mercator);\n  }).raw = d3_geo_mercator;\n  var d3_geo_orthographic = d3_geo_azimuthal(function() {\n    return 1;\n  }, Math.asin);\n  (d3.geo.orthographic = function() {\n    return d3_geo_projection(d3_geo_orthographic);\n  }).raw = d3_geo_orthographic;\n  var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / (1 + cosλcosφ);\n  }, function(ρ) {\n    return 2 * Math.atan(ρ);\n  });\n  (d3.geo.stereographic = function() {\n    return d3_geo_projection(d3_geo_stereographic);\n  }).raw = d3_geo_stereographic;\n  function d3_geo_transverseMercator(λ, φ) {\n    return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n  }\n  d3_geo_transverseMercator.invert = function(x, y) {\n    return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n  };\n  (d3.geo.transverseMercator = function() {\n    var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n    projection.center = function(_) {\n      return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n    };\n    projection.rotate = function(_) {\n      return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n      [ _[0], _[1], _[2] - 90 ]);\n    };\n    return rotate([ 0, 0, 90 ]);\n  }).raw = d3_geo_transverseMercator;\n  d3.geom = {};\n  function d3_geom_pointX(d) {\n    return d[0];\n  }\n  function d3_geom_pointY(d) {\n    return d[1];\n  }\n  d3.geom.hull = function(vertices) {\n    var x = d3_geom_pointX, y = d3_geom_pointY;\n    if (arguments.length) return hull(vertices);\n    function hull(data) {\n      if (data.length < 3) return [];\n      var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n      for (i = 0; i < n; i++) {\n        points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n      }\n      points.sort(d3_geom_hullOrder);\n      for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n      var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n      var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n      for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n      for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n      return polygon;\n    }\n    hull.x = function(_) {\n      return arguments.length ? (x = _, hull) : x;\n    };\n    hull.y = function(_) {\n      return arguments.length ? (y = _, hull) : y;\n    };\n    return hull;\n  };\n  function d3_geom_hullUpper(points) {\n    var n = points.length, hull = [ 0, 1 ], hs = 2;\n    for (var i = 2; i < n; i++) {\n      while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n      hull[hs++] = i;\n    }\n    return hull.slice(0, hs);\n  }\n  function d3_geom_hullOrder(a, b) {\n    return a[0] - b[0] || a[1] - b[1];\n  }\n  d3.geom.polygon = function(coordinates) {\n    d3_subclass(coordinates, d3_geom_polygonPrototype);\n    return coordinates;\n  };\n  var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n  d3_geom_polygonPrototype.area = function() {\n    var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      area += a[1] * b[0] - a[0] * b[1];\n    }\n    return area * .5;\n  };\n  d3_geom_polygonPrototype.centroid = function(k) {\n    var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n    if (!arguments.length) k = -1 / (6 * this.area());\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      c = a[0] * b[1] - b[0] * a[1];\n      x += (a[0] + b[0]) * c;\n      y += (a[1] + b[1]) * c;\n    }\n    return [ x * k, y * k ];\n  };\n  d3_geom_polygonPrototype.clip = function(subject) {\n    var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n    while (++i < n) {\n      input = subject.slice();\n      subject.length = 0;\n      b = this[i];\n      c = input[(m = input.length - closed) - 1];\n      j = -1;\n      while (++j < m) {\n        d = input[j];\n        if (d3_geom_polygonInside(d, a, b)) {\n          if (!d3_geom_polygonInside(c, a, b)) {\n            subject.push(d3_geom_polygonIntersect(c, d, a, b));\n          }\n          subject.push(d);\n        } else if (d3_geom_polygonInside(c, a, b)) {\n          subject.push(d3_geom_polygonIntersect(c, d, a, b));\n        }\n        c = d;\n      }\n      if (closed) subject.push(subject[0]);\n      a = b;\n    }\n    return subject;\n  };\n  function d3_geom_polygonInside(p, a, b) {\n    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n  }\n  function d3_geom_polygonIntersect(c, d, a, b) {\n    var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n    return [ x1 + ua * x21, y1 + ua * y21 ];\n  }\n  function d3_geom_polygonClosed(coordinates) {\n    var a = coordinates[0], b = coordinates[coordinates.length - 1];\n    return !(a[0] - b[0] || a[1] - b[1]);\n  }\n  var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n  function d3_geom_voronoiBeach() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.edge = this.site = this.circle = null;\n  }\n  function d3_geom_voronoiCreateBeach(site) {\n    var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n    beach.site = site;\n    return beach;\n  }\n  function d3_geom_voronoiDetachBeach(beach) {\n    d3_geom_voronoiDetachCircle(beach);\n    d3_geom_voronoiBeaches.remove(beach);\n    d3_geom_voronoiBeachPool.push(beach);\n    d3_geom_voronoiRedBlackNode(beach);\n  }\n  function d3_geom_voronoiRemoveBeach(beach) {\n    var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n      x: x,\n      y: y\n    }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n    d3_geom_voronoiDetachBeach(beach);\n    var lArc = previous;\n    while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n      previous = lArc.P;\n      disappearing.unshift(lArc);\n      d3_geom_voronoiDetachBeach(lArc);\n      lArc = previous;\n    }\n    disappearing.unshift(lArc);\n    d3_geom_voronoiDetachCircle(lArc);\n    var rArc = next;\n    while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n      next = rArc.N;\n      disappearing.push(rArc);\n      d3_geom_voronoiDetachBeach(rArc);\n      rArc = next;\n    }\n    disappearing.push(rArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var nArcs = disappearing.length, iArc;\n    for (iArc = 1; iArc < nArcs; ++iArc) {\n      rArc = disappearing[iArc];\n      lArc = disappearing[iArc - 1];\n      d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n    }\n    lArc = disappearing[0];\n    rArc = disappearing[nArcs - 1];\n    rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiAddBeach(site) {\n    var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n    while (node) {\n      dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n      if (dxl > ε) node = node.L; else {\n        dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n        if (dxr > ε) {\n          if (!node.R) {\n            lArc = node;\n            break;\n          }\n          node = node.R;\n        } else {\n          if (dxl > -ε) {\n            lArc = node.P;\n            rArc = node;\n          } else if (dxr > -ε) {\n            lArc = node;\n            rArc = node.N;\n          } else {\n            lArc = rArc = node;\n          }\n          break;\n        }\n      }\n    }\n    var newArc = d3_geom_voronoiCreateBeach(site);\n    d3_geom_voronoiBeaches.insert(lArc, newArc);\n    if (!lArc && !rArc) return;\n    if (lArc === rArc) {\n      d3_geom_voronoiDetachCircle(lArc);\n      rArc = d3_geom_voronoiCreateBeach(lArc.site);\n      d3_geom_voronoiBeaches.insert(newArc, rArc);\n      newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      d3_geom_voronoiAttachCircle(lArc);\n      d3_geom_voronoiAttachCircle(rArc);\n      return;\n    }\n    if (!rArc) {\n      newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      return;\n    }\n    d3_geom_voronoiDetachCircle(lArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n      x: (cy * hb - by * hc) / d + ax,\n      y: (bx * hc - cx * hb) / d + ay\n    };\n    d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n    newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n    rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n    var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n    if (!pby2) return rfocx;\n    var lArc = arc.P;\n    if (!lArc) return -Infinity;\n    site = lArc.site;\n    var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n    if (!plby2) return lfocx;\n    var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n    return (rfocx + lfocx) / 2;\n  }\n  function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n    var rArc = arc.N;\n    if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n    var site = arc.site;\n    return site.y === directrix ? site.x : Infinity;\n  }\n  function d3_geom_voronoiCell(site) {\n    this.site = site;\n    this.edges = [];\n  }\n  d3_geom_voronoiCell.prototype.prepare = function() {\n    var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n    while (iHalfEdge--) {\n      edge = halfEdges[iHalfEdge].edge;\n      if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n    }\n    halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n    return halfEdges.length;\n  };\n  function d3_geom_voronoiCloseCells(extent) {\n    var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n    while (iCell--) {\n      cell = cells[iCell];\n      if (!cell || !cell.prepare()) continue;\n      halfEdges = cell.edges;\n      nHalfEdges = halfEdges.length;\n      iHalfEdge = 0;\n      while (iHalfEdge < nHalfEdges) {\n        end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n        start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n        if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n          halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n            x: x0,\n            y: abs(x2 - x0) < ε ? y2 : y1\n          } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n            x: abs(y2 - y1) < ε ? x2 : x1,\n            y: y1\n          } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n            x: x1,\n            y: abs(x2 - x1) < ε ? y2 : y0\n          } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n            x: abs(y2 - y0) < ε ? x2 : x0,\n            y: y0\n          } : null), cell.site, null));\n          ++nHalfEdges;\n        }\n      }\n    }\n  }\n  function d3_geom_voronoiHalfEdgeOrder(a, b) {\n    return b.angle - a.angle;\n  }\n  function d3_geom_voronoiCircle() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.x = this.y = this.arc = this.site = this.cy = null;\n  }\n  function d3_geom_voronoiAttachCircle(arc) {\n    var lArc = arc.P, rArc = arc.N;\n    if (!lArc || !rArc) return;\n    var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n    if (lSite === rSite) return;\n    var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n    var d = 2 * (ax * cy - ay * cx);\n    if (d >= -ε2) return;\n    var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n    var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n    circle.arc = arc;\n    circle.site = cSite;\n    circle.x = x + bx;\n    circle.y = cy + Math.sqrt(x * x + y * y);\n    circle.cy = cy;\n    arc.circle = circle;\n    var before = null, node = d3_geom_voronoiCircles._;\n    while (node) {\n      if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n        if (node.L) node = node.L; else {\n          before = node.P;\n          break;\n        }\n      } else {\n        if (node.R) node = node.R; else {\n          before = node;\n          break;\n        }\n      }\n    }\n    d3_geom_voronoiCircles.insert(before, circle);\n    if (!before) d3_geom_voronoiFirstCircle = circle;\n  }\n  function d3_geom_voronoiDetachCircle(arc) {\n    var circle = arc.circle;\n    if (circle) {\n      if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n      d3_geom_voronoiCircles.remove(circle);\n      d3_geom_voronoiCirclePool.push(circle);\n      d3_geom_voronoiRedBlackNode(circle);\n      arc.circle = null;\n    }\n  }\n  function d3_geom_voronoiClipEdges(extent) {\n    var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n    while (i--) {\n      e = edges[i];\n      if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n        e.a = e.b = null;\n        edges.splice(i, 1);\n      }\n    }\n  }\n  function d3_geom_voronoiConnectEdge(edge, extent) {\n    var vb = edge.b;\n    if (vb) return true;\n    var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n    if (ry === ly) {\n      if (fx < x0 || fx >= x1) return;\n      if (lx > rx) {\n        if (!va) va = {\n          x: fx,\n          y: y0\n        }; else if (va.y >= y1) return;\n        vb = {\n          x: fx,\n          y: y1\n        };\n      } else {\n        if (!va) va = {\n          x: fx,\n          y: y1\n        }; else if (va.y < y0) return;\n        vb = {\n          x: fx,\n          y: y0\n        };\n      }\n    } else {\n      fm = (lx - rx) / (ry - ly);\n      fb = fy - fm * fx;\n      if (fm < -1 || fm > 1) {\n        if (lx > rx) {\n          if (!va) va = {\n            x: (y0 - fb) / fm,\n            y: y0\n          }; else if (va.y >= y1) return;\n          vb = {\n            x: (y1 - fb) / fm,\n            y: y1\n          };\n        } else {\n          if (!va) va = {\n            x: (y1 - fb) / fm,\n            y: y1\n          }; else if (va.y < y0) return;\n          vb = {\n            x: (y0 - fb) / fm,\n            y: y0\n          };\n        }\n      } else {\n        if (ly < ry) {\n          if (!va) va = {\n            x: x0,\n            y: fm * x0 + fb\n          }; else if (va.x >= x1) return;\n          vb = {\n            x: x1,\n            y: fm * x1 + fb\n          };\n        } else {\n          if (!va) va = {\n            x: x1,\n            y: fm * x1 + fb\n          }; else if (va.x < x0) return;\n          vb = {\n            x: x0,\n            y: fm * x0 + fb\n          };\n        }\n      }\n    }\n    edge.a = va;\n    edge.b = vb;\n    return true;\n  }\n  function d3_geom_voronoiEdge(lSite, rSite) {\n    this.l = lSite;\n    this.r = rSite;\n    this.a = this.b = null;\n  }\n  function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, rSite);\n    d3_geom_voronoiEdges.push(edge);\n    if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n    if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n    d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n    d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n    return edge;\n  }\n  function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, null);\n    edge.a = va;\n    edge.b = vb;\n    d3_geom_voronoiEdges.push(edge);\n    return edge;\n  }\n  function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n    if (!edge.a && !edge.b) {\n      edge.a = vertex;\n      edge.l = lSite;\n      edge.r = rSite;\n    } else if (edge.l === rSite) {\n      edge.b = vertex;\n    } else {\n      edge.a = vertex;\n    }\n  }\n  function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n    var va = edge.a, vb = edge.b;\n    this.edge = edge;\n    this.site = lSite;\n    this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n  }\n  d3_geom_voronoiHalfEdge.prototype = {\n    start: function() {\n      return this.edge.l === this.site ? this.edge.a : this.edge.b;\n    },\n    end: function() {\n      return this.edge.l === this.site ? this.edge.b : this.edge.a;\n    }\n  };\n  function d3_geom_voronoiRedBlackTree() {\n    this._ = null;\n  }\n  function d3_geom_voronoiRedBlackNode(node) {\n    node.U = node.C = node.L = node.R = node.P = node.N = null;\n  }\n  d3_geom_voronoiRedBlackTree.prototype = {\n    insert: function(after, node) {\n      var parent, grandpa, uncle;\n      if (after) {\n        node.P = after;\n        node.N = after.N;\n        if (after.N) after.N.P = node;\n        after.N = node;\n        if (after.R) {\n          after = after.R;\n          while (after.L) after = after.L;\n          after.L = node;\n        } else {\n          after.R = node;\n        }\n        parent = after;\n      } else if (this._) {\n        after = d3_geom_voronoiRedBlackFirst(this._);\n        node.P = null;\n        node.N = after;\n        after.P = after.L = node;\n        parent = after;\n      } else {\n        node.P = node.N = null;\n        this._ = node;\n        parent = null;\n      }\n      node.L = node.R = null;\n      node.U = parent;\n      node.C = true;\n      after = node;\n      while (parent && parent.C) {\n        grandpa = parent.U;\n        if (parent === grandpa.L) {\n          uncle = grandpa.R;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.R) {\n              d3_geom_voronoiRedBlackRotateLeft(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n          }\n        } else {\n          uncle = grandpa.L;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.L) {\n              d3_geom_voronoiRedBlackRotateRight(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n          }\n        }\n        parent = after.U;\n      }\n      this._.C = false;\n    },\n    remove: function(node) {\n      if (node.N) node.N.P = node.P;\n      if (node.P) node.P.N = node.N;\n      node.N = node.P = null;\n      var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n      if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n      if (parent) {\n        if (parent.L === node) parent.L = next; else parent.R = next;\n      } else {\n        this._ = next;\n      }\n      if (left && right) {\n        red = next.C;\n        next.C = node.C;\n        next.L = left;\n        left.U = next;\n        if (next !== right) {\n          parent = next.U;\n          next.U = node.U;\n          node = next.R;\n          parent.L = node;\n          next.R = right;\n          right.U = next;\n        } else {\n          next.U = parent;\n          parent = next;\n          node = next.R;\n        }\n      } else {\n        red = node.C;\n        node = next;\n      }\n      if (node) node.U = parent;\n      if (red) return;\n      if (node && node.C) {\n        node.C = false;\n        return;\n      }\n      do {\n        if (node === this._) break;\n        if (node === parent.L) {\n          sibling = parent.R;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            d3_geom_voronoiRedBlackRotateLeft(this, parent);\n            sibling = parent.R;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.R || !sibling.R.C) {\n              sibling.L.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateRight(this, sibling);\n              sibling = parent.R;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.R.C = false;\n            d3_geom_voronoiRedBlackRotateLeft(this, parent);\n            node = this._;\n            break;\n          }\n        } else {\n          sibling = parent.L;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            d3_geom_voronoiRedBlackRotateRight(this, parent);\n            sibling = parent.L;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.L || !sibling.L.C) {\n              sibling.R.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n              sibling = parent.L;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.L.C = false;\n            d3_geom_voronoiRedBlackRotateRight(this, parent);\n            node = this._;\n            break;\n          }\n        }\n        sibling.C = true;\n        node = parent;\n        parent = parent.U;\n      } while (!node.C);\n      if (node) node.C = false;\n    }\n  };\n  function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n    var p = node, q = node.R, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n    q.U = parent;\n    p.U = q;\n    p.R = q.L;\n    if (p.R) p.R.U = p;\n    q.L = p;\n  }\n  function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n    var p = node, q = node.L, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n    q.U = parent;\n    p.U = q;\n    p.L = q.R;\n    if (p.L) p.L.U = p;\n    q.R = p;\n  }\n  function d3_geom_voronoiRedBlackFirst(node) {\n    while (node.L) node = node.L;\n    return node;\n  }\n  function d3_geom_voronoi(sites, bbox) {\n    var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n    d3_geom_voronoiEdges = [];\n    d3_geom_voronoiCells = new Array(sites.length);\n    d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n    d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n    while (true) {\n      circle = d3_geom_voronoiFirstCircle;\n      if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n        if (site.x !== x0 || site.y !== y0) {\n          d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n          d3_geom_voronoiAddBeach(site);\n          x0 = site.x, y0 = site.y;\n        }\n        site = sites.pop();\n      } else if (circle) {\n        d3_geom_voronoiRemoveBeach(circle.arc);\n      } else {\n        break;\n      }\n    }\n    if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n    var diagram = {\n      cells: d3_geom_voronoiCells,\n      edges: d3_geom_voronoiEdges\n    };\n    d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n    return diagram;\n  }\n  function d3_geom_voronoiVertexOrder(a, b) {\n    return b.y - a.y || b.x - a.x;\n  }\n  d3.geom.voronoi = function(points) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n    if (points) return voronoi(points);\n    function voronoi(data) {\n      var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n      d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n        var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n          var s = e.start();\n          return [ s.x, s.y ];\n        }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n        polygon.point = data[i];\n      });\n      return polygons;\n    }\n    function sites(data) {\n      return data.map(function(d, i) {\n        return {\n          x: Math.round(fx(d, i) / ε) * ε,\n          y: Math.round(fy(d, i) / ε) * ε,\n          i: i\n        };\n      });\n    }\n    voronoi.links = function(data) {\n      return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n        return edge.l && edge.r;\n      }).map(function(edge) {\n        return {\n          source: data[edge.l.i],\n          target: data[edge.r.i]\n        };\n      });\n    };\n    voronoi.triangles = function(data) {\n      var triangles = [];\n      d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n        var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n        while (++j < m) {\n          e0 = e1;\n          s0 = s1;\n          e1 = edges[j].edge;\n          s1 = e1.l === site ? e1.r : e1.l;\n          if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n            triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n          }\n        }\n      });\n      return triangles;\n    };\n    voronoi.x = function(_) {\n      return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n    };\n    voronoi.y = function(_) {\n      return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n    };\n    voronoi.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n      clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n      return voronoi;\n    };\n    voronoi.size = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n      return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n    };\n    return voronoi;\n  };\n  var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n  function d3_geom_voronoiTriangleArea(a, b, c) {\n    return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n  }\n  d3.geom.delaunay = function(vertices) {\n    return d3.geom.voronoi().triangles(vertices);\n  };\n  d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n    if (compat = arguments.length) {\n      x = d3_geom_quadtreeCompatX;\n      y = d3_geom_quadtreeCompatY;\n      if (compat === 3) {\n        y2 = y1;\n        x2 = x1;\n        y1 = x1 = 0;\n      }\n      return quadtree(points);\n    }\n    function quadtree(data) {\n      var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n      if (x1 != null) {\n        x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n      } else {\n        x2_ = y2_ = -(x1_ = y1_ = Infinity);\n        xs = [], ys = [];\n        n = data.length;\n        if (compat) for (i = 0; i < n; ++i) {\n          d = data[i];\n          if (d.x < x1_) x1_ = d.x;\n          if (d.y < y1_) y1_ = d.y;\n          if (d.x > x2_) x2_ = d.x;\n          if (d.y > y2_) y2_ = d.y;\n          xs.push(d.x);\n          ys.push(d.y);\n        } else for (i = 0; i < n; ++i) {\n          var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n          if (x_ < x1_) x1_ = x_;\n          if (y_ < y1_) y1_ = y_;\n          if (x_ > x2_) x2_ = x_;\n          if (y_ > y2_) y2_ = y_;\n          xs.push(x_);\n          ys.push(y_);\n        }\n      }\n      var dx = x2_ - x1_, dy = y2_ - y1_;\n      if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n      function insert(n, d, x, y, x1, y1, x2, y2) {\n        if (isNaN(x) || isNaN(y)) return;\n        if (n.leaf) {\n          var nx = n.x, ny = n.y;\n          if (nx != null) {\n            if (abs(nx - x) + abs(ny - y) < .01) {\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            } else {\n              var nPoint = n.point;\n              n.x = n.y = n.point = null;\n              insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            }\n          } else {\n            n.x = x, n.y = y, n.point = d;\n          }\n        } else {\n          insertChild(n, d, x, y, x1, y1, x2, y2);\n        }\n      }\n      function insertChild(n, d, x, y, x1, y1, x2, y2) {\n        var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n        n.leaf = false;\n        n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n        if (right) x1 = xm; else x2 = xm;\n        if (below) y1 = ym; else y2 = ym;\n        insert(n, d, x, y, x1, y1, x2, y2);\n      }\n      var root = d3_geom_quadtreeNode();\n      root.add = function(d) {\n        insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n      };\n      root.visit = function(f) {\n        d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n      };\n      root.find = function(point) {\n        return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n      };\n      i = -1;\n      if (x1 == null) {\n        while (++i < n) {\n          insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n        }\n        --i;\n      } else data.forEach(root.add);\n      xs = ys = data = d = null;\n      return root;\n    }\n    quadtree.x = function(_) {\n      return arguments.length ? (x = _, quadtree) : x;\n    };\n    quadtree.y = function(_) {\n      return arguments.length ? (y = _, quadtree) : y;\n    };\n    quadtree.extent = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n      y2 = +_[1][1];\n      return quadtree;\n    };\n    quadtree.size = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n      return quadtree;\n    };\n    return quadtree;\n  };\n  function d3_geom_quadtreeCompatX(d) {\n    return d.x;\n  }\n  function d3_geom_quadtreeCompatY(d) {\n    return d.y;\n  }\n  function d3_geom_quadtreeNode() {\n    return {\n      leaf: true,\n      nodes: [],\n      point: null,\n      x: null,\n      y: null\n    };\n  }\n  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n    if (!f(node, x1, y1, x2, y2)) {\n      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n    }\n  }\n  function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n    var minDistance2 = Infinity, closestPoint;\n    (function find(node, x1, y1, x2, y2) {\n      if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n      if (point = node.point) {\n        var point, dx = x - point[0], dy = y - point[1], distance2 = dx * dx + dy * dy;\n        if (distance2 < minDistance2) {\n          var distance = Math.sqrt(minDistance2 = distance2);\n          x0 = x - distance, y0 = y - distance;\n          x3 = x + distance, y3 = y + distance;\n          closestPoint = point;\n        }\n      }\n      var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n      for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n        if (node = children[i & 3]) switch (i & 3) {\n         case 0:\n          find(node, x1, y1, xm, ym);\n          break;\n\n         case 1:\n          find(node, xm, y1, x2, ym);\n          break;\n\n         case 2:\n          find(node, x1, ym, xm, y2);\n          break;\n\n         case 3:\n          find(node, xm, ym, x2, y2);\n          break;\n        }\n      }\n    })(root, x0, y0, x3, y3);\n    return closestPoint;\n  }\n  d3.interpolateRgb = d3_interpolateRgb;\n  function d3_interpolateRgb(a, b) {\n    a = d3.rgb(a);\n    b = d3.rgb(b);\n    var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n    return function(t) {\n      return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n    };\n  }\n  d3.interpolateObject = d3_interpolateObject;\n  function d3_interpolateObject(a, b) {\n    var i = {}, c = {}, k;\n    for (k in a) {\n      if (k in b) {\n        i[k] = d3_interpolate(a[k], b[k]);\n      } else {\n        c[k] = a[k];\n      }\n    }\n    for (k in b) {\n      if (!(k in a)) {\n        c[k] = b[k];\n      }\n    }\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n  d3.interpolateNumber = d3_interpolateNumber;\n  function d3_interpolateNumber(a, b) {\n    a = +a, b = +b;\n    return function(t) {\n      return a * (1 - t) + b * t;\n    };\n  }\n  d3.interpolateString = d3_interpolateString;\n  function d3_interpolateString(a, b) {\n    var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n    a = a + \"\", b = b + \"\";\n    while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n      if ((bs = bm.index) > bi) {\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) {\n        if (s[i]) s[i] += bm; else s[++i] = bm;\n      } else {\n        s[++i] = null;\n        q.push({\n          i: i,\n          x: d3_interpolateNumber(am, bm)\n        });\n      }\n      bi = d3_interpolate_numberB.lastIndex;\n    }\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; else s[++i] = bs;\n    }\n    return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n      return b(t) + \"\";\n    }) : function() {\n      return b;\n    } : (b = q.length, function(t) {\n      for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    });\n  }\n  var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n  d3.interpolate = d3_interpolate;\n  function d3_interpolate(a, b) {\n    var i = d3.interpolators.length, f;\n    while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n    return f;\n  }\n  d3.interpolators = [ function(a, b) {\n    var t = typeof b;\n    return (t === \"string\" ? d3_rgb_names.has(b) || /^(#|rgb\\(|hsl\\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n  } ];\n  d3.interpolateArray = d3_interpolateArray;\n  function d3_interpolateArray(a, b) {\n    var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n    for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n    for (;i < na; ++i) c[i] = a[i];\n    for (;i < nb; ++i) c[i] = b[i];\n    return function(t) {\n      for (i = 0; i < n0; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n  var d3_ease_default = function() {\n    return d3_identity;\n  };\n  var d3_ease = d3.map({\n    linear: d3_ease_default,\n    poly: d3_ease_poly,\n    quad: function() {\n      return d3_ease_quad;\n    },\n    cubic: function() {\n      return d3_ease_cubic;\n    },\n    sin: function() {\n      return d3_ease_sin;\n    },\n    exp: function() {\n      return d3_ease_exp;\n    },\n    circle: function() {\n      return d3_ease_circle;\n    },\n    elastic: d3_ease_elastic,\n    back: d3_ease_back,\n    bounce: function() {\n      return d3_ease_bounce;\n    }\n  });\n  var d3_ease_mode = d3.map({\n    \"in\": d3_identity,\n    out: d3_ease_reverse,\n    \"in-out\": d3_ease_reflect,\n    \"out-in\": function(f) {\n      return d3_ease_reflect(d3_ease_reverse(f));\n    }\n  });\n  d3.ease = function(name) {\n    var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n    t = d3_ease.get(t) || d3_ease_default;\n    m = d3_ease_mode.get(m) || d3_identity;\n    return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n  };\n  function d3_ease_clamp(f) {\n    return function(t) {\n      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n    };\n  }\n  function d3_ease_reverse(f) {\n    return function(t) {\n      return 1 - f(1 - t);\n    };\n  }\n  function d3_ease_reflect(f) {\n    return function(t) {\n      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n    };\n  }\n  function d3_ease_quad(t) {\n    return t * t;\n  }\n  function d3_ease_cubic(t) {\n    return t * t * t;\n  }\n  function d3_ease_cubicInOut(t) {\n    if (t <= 0) return 0;\n    if (t >= 1) return 1;\n    var t2 = t * t, t3 = t2 * t;\n    return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n  }\n  function d3_ease_poly(e) {\n    return function(t) {\n      return Math.pow(t, e);\n    };\n  }\n  function d3_ease_sin(t) {\n    return 1 - Math.cos(t * halfπ);\n  }\n  function d3_ease_exp(t) {\n    return Math.pow(2, 10 * (t - 1));\n  }\n  function d3_ease_circle(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n  function d3_ease_elastic(a, p) {\n    var s;\n    if (arguments.length < 2) p = .45;\n    if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n    return function(t) {\n      return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n    };\n  }\n  function d3_ease_back(s) {\n    if (!s) s = 1.70158;\n    return function(t) {\n      return t * t * ((s + 1) * t - s);\n    };\n  }\n  function d3_ease_bounce(t) {\n    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n  }\n  d3.interpolateHcl = d3_interpolateHcl;\n  function d3_interpolateHcl(a, b) {\n    a = d3.hcl(a);\n    b = d3.hcl(b);\n    var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n    if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateHsl = d3_interpolateHsl;\n  function d3_interpolateHsl(a, b) {\n    a = d3.hsl(a);\n    b = d3.hsl(b);\n    var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n    if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateLab = d3_interpolateLab;\n  function d3_interpolateLab(a, b) {\n    a = d3.lab(a);\n    b = d3.lab(b);\n    var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n    return function(t) {\n      return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n    };\n  }\n  d3.interpolateRound = d3_interpolateRound;\n  function d3_interpolateRound(a, b) {\n    b -= a;\n    return function(t) {\n      return Math.round(a + b * t);\n    };\n  }\n  d3.transform = function(string) {\n    var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n    return (d3.transform = function(string) {\n      if (string != null) {\n        g.setAttribute(\"transform\", string);\n        var t = g.transform.baseVal.consolidate();\n      }\n      return new d3_transform(t ? t.matrix : d3_transformIdentity);\n    })(string);\n  };\n  function d3_transform(m) {\n    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n    if (r0[0] * r1[1] < r1[0] * r0[1]) {\n      r0[0] *= -1;\n      r0[1] *= -1;\n      kx *= -1;\n      kz *= -1;\n    }\n    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n    this.translate = [ m.e, m.f ];\n    this.scale = [ kx, ky ];\n    this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n  }\n  d3_transform.prototype.toString = function() {\n    return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n  };\n  function d3_transformDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1];\n  }\n  function d3_transformNormalize(a) {\n    var k = Math.sqrt(d3_transformDot(a, a));\n    if (k) {\n      a[0] /= k;\n      a[1] /= k;\n    }\n    return k;\n  }\n  function d3_transformCombine(a, b, k) {\n    a[0] += k * b[0];\n    a[1] += k * b[1];\n    return a;\n  }\n  var d3_transformIdentity = {\n    a: 1,\n    b: 0,\n    c: 0,\n    d: 1,\n    e: 0,\n    f: 0\n  };\n  d3.interpolateTransform = d3_interpolateTransform;\n  function d3_interpolateTransform(a, b) {\n    var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;\n    if (ta[0] != tb[0] || ta[1] != tb[1]) {\n      s.push(\"translate(\", null, \",\", null, \")\");\n      q.push({\n        i: 1,\n        x: d3_interpolateNumber(ta[0], tb[0])\n      }, {\n        i: 3,\n        x: d3_interpolateNumber(ta[1], tb[1])\n      });\n    } else if (tb[0] || tb[1]) {\n      s.push(\"translate(\" + tb + \")\");\n    } else {\n      s.push(\"\");\n    }\n    if (ra != rb) {\n      if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n      q.push({\n        i: s.push(s.pop() + \"rotate(\", null, \")\") - 2,\n        x: d3_interpolateNumber(ra, rb)\n      });\n    } else if (rb) {\n      s.push(s.pop() + \"rotate(\" + rb + \")\");\n    }\n    if (wa != wb) {\n      q.push({\n        i: s.push(s.pop() + \"skewX(\", null, \")\") - 2,\n        x: d3_interpolateNumber(wa, wb)\n      });\n    } else if (wb) {\n      s.push(s.pop() + \"skewX(\" + wb + \")\");\n    }\n    if (ka[0] != kb[0] || ka[1] != kb[1]) {\n      n = s.push(s.pop() + \"scale(\", null, \",\", null, \")\");\n      q.push({\n        i: n - 4,\n        x: d3_interpolateNumber(ka[0], kb[0])\n      }, {\n        i: n - 2,\n        x: d3_interpolateNumber(ka[1], kb[1])\n      });\n    } else if (kb[0] != 1 || kb[1] != 1) {\n      s.push(s.pop() + \"scale(\" + kb + \")\");\n    }\n    n = q.length;\n    return function(t) {\n      var i = -1, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  }\n  function d3_uninterpolateNumber(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return (x - a) / b;\n    };\n  }\n  function d3_uninterpolateClamp(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return Math.max(0, Math.min(1, (x - a) / b));\n    };\n  }\n  d3.layout = {};\n  d3.layout.bundle = function() {\n    return function(links) {\n      var paths = [], i = -1, n = links.length;\n      while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n      return paths;\n    };\n  };\n  function d3_layout_bundlePath(link) {\n    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n    while (start !== lca) {\n      start = start.parent;\n      points.push(start);\n    }\n    var k = points.length;\n    while (end !== lca) {\n      points.splice(k, 0, end);\n      end = end.parent;\n    }\n    return points;\n  }\n  function d3_layout_bundleAncestors(node) {\n    var ancestors = [], parent = node.parent;\n    while (parent != null) {\n      ancestors.push(node);\n      node = parent;\n      parent = parent.parent;\n    }\n    ancestors.push(node);\n    return ancestors;\n  }\n  function d3_layout_bundleLeastCommonAncestor(a, b) {\n    if (a === b) return a;\n    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n    while (aNode === bNode) {\n      sharedNode = aNode;\n      aNode = aNodes.pop();\n      bNode = bNodes.pop();\n    }\n    return sharedNode;\n  }\n  d3.layout.chord = function() {\n    var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n    function relayout() {\n      var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n      chords = [];\n      groups = [];\n      k = 0, i = -1;\n      while (++i < n) {\n        x = 0, j = -1;\n        while (++j < n) {\n          x += matrix[i][j];\n        }\n        groupSums.push(x);\n        subgroupIndex.push(d3.range(n));\n        k += x;\n      }\n      if (sortGroups) {\n        groupIndex.sort(function(a, b) {\n          return sortGroups(groupSums[a], groupSums[b]);\n        });\n      }\n      if (sortSubgroups) {\n        subgroupIndex.forEach(function(d, i) {\n          d.sort(function(a, b) {\n            return sortSubgroups(matrix[i][a], matrix[i][b]);\n          });\n        });\n      }\n      k = (τ - padding * n) / k;\n      x = 0, i = -1;\n      while (++i < n) {\n        x0 = x, j = -1;\n        while (++j < n) {\n          var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n          subgroups[di + \"-\" + dj] = {\n            index: di,\n            subindex: dj,\n            startAngle: a0,\n            endAngle: a1,\n            value: v\n          };\n        }\n        groups[di] = {\n          index: di,\n          startAngle: x0,\n          endAngle: x,\n          value: (x - x0) / k\n        };\n        x += padding;\n      }\n      i = -1;\n      while (++i < n) {\n        j = i - 1;\n        while (++j < n) {\n          var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n          if (source.value || target.value) {\n            chords.push(source.value < target.value ? {\n              source: target,\n              target: source\n            } : {\n              source: source,\n              target: target\n            });\n          }\n        }\n      }\n      if (sortChords) resort();\n    }\n    function resort() {\n      chords.sort(function(a, b) {\n        return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n      });\n    }\n    chord.matrix = function(x) {\n      if (!arguments.length) return matrix;\n      n = (matrix = x) && matrix.length;\n      chords = groups = null;\n      return chord;\n    };\n    chord.padding = function(x) {\n      if (!arguments.length) return padding;\n      padding = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortGroups = function(x) {\n      if (!arguments.length) return sortGroups;\n      sortGroups = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortSubgroups = function(x) {\n      if (!arguments.length) return sortSubgroups;\n      sortSubgroups = x;\n      chords = null;\n      return chord;\n    };\n    chord.sortChords = function(x) {\n      if (!arguments.length) return sortChords;\n      sortChords = x;\n      if (chords) resort();\n      return chord;\n    };\n    chord.chords = function() {\n      if (!chords) relayout();\n      return chords;\n    };\n    chord.groups = function() {\n      if (!groups) relayout();\n      return groups;\n    };\n    return chord;\n  };\n  d3.layout.force = function() {\n    var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n    function repulse(node) {\n      return function(quad, x1, _, x2) {\n        if (quad.point !== node) {\n          var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n          if (dw * dw / theta2 < dn) {\n            if (dn < chargeDistance2) {\n              var k = quad.charge / dn;\n              node.px -= dx * k;\n              node.py -= dy * k;\n            }\n            return true;\n          }\n          if (quad.point && dn && dn < chargeDistance2) {\n            var k = quad.pointCharge / dn;\n            node.px -= dx * k;\n            node.py -= dy * k;\n          }\n        }\n        return !quad.charge;\n      };\n    }\n    force.tick = function() {\n      if ((alpha *= .99) < .005) {\n        event.end({\n          type: \"end\",\n          alpha: alpha = 0\n        });\n        return true;\n      }\n      var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        s = o.source;\n        t = o.target;\n        x = t.x - s.x;\n        y = t.y - s.y;\n        if (l = x * x + y * y) {\n          l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n          x *= l;\n          y *= l;\n          t.x -= x * (k = s.weight / (t.weight + s.weight));\n          t.y -= y * k;\n          s.x += x * (k = 1 - k);\n          s.y += y * k;\n        }\n      }\n      if (k = alpha * gravity) {\n        x = size[0] / 2;\n        y = size[1] / 2;\n        i = -1;\n        if (k) while (++i < n) {\n          o = nodes[i];\n          o.x += (x - o.x) * k;\n          o.y += (y - o.y) * k;\n        }\n      }\n      if (charge) {\n        d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n        i = -1;\n        while (++i < n) {\n          if (!(o = nodes[i]).fixed) {\n            q.visit(repulse(o));\n          }\n        }\n      }\n      i = -1;\n      while (++i < n) {\n        o = nodes[i];\n        if (o.fixed) {\n          o.x = o.px;\n          o.y = o.py;\n        } else {\n          o.x -= (o.px - (o.px = o.x)) * friction;\n          o.y -= (o.py - (o.py = o.y)) * friction;\n        }\n      }\n      event.tick({\n        type: \"tick\",\n        alpha: alpha\n      });\n    };\n    force.nodes = function(x) {\n      if (!arguments.length) return nodes;\n      nodes = x;\n      return force;\n    };\n    force.links = function(x) {\n      if (!arguments.length) return links;\n      links = x;\n      return force;\n    };\n    force.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return force;\n    };\n    force.linkDistance = function(x) {\n      if (!arguments.length) return linkDistance;\n      linkDistance = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.distance = force.linkDistance;\n    force.linkStrength = function(x) {\n      if (!arguments.length) return linkStrength;\n      linkStrength = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.friction = function(x) {\n      if (!arguments.length) return friction;\n      friction = +x;\n      return force;\n    };\n    force.charge = function(x) {\n      if (!arguments.length) return charge;\n      charge = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.chargeDistance = function(x) {\n      if (!arguments.length) return Math.sqrt(chargeDistance2);\n      chargeDistance2 = x * x;\n      return force;\n    };\n    force.gravity = function(x) {\n      if (!arguments.length) return gravity;\n      gravity = +x;\n      return force;\n    };\n    force.theta = function(x) {\n      if (!arguments.length) return Math.sqrt(theta2);\n      theta2 = x * x;\n      return force;\n    };\n    force.alpha = function(x) {\n      if (!arguments.length) return alpha;\n      x = +x;\n      if (alpha) {\n        if (x > 0) alpha = x; else alpha = 0;\n      } else if (x > 0) {\n        event.start({\n          type: \"start\",\n          alpha: alpha = x\n        });\n        d3.timer(force.tick);\n      }\n      return force;\n    };\n    force.start = function() {\n      var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n      for (i = 0; i < n; ++i) {\n        (o = nodes[i]).index = i;\n        o.weight = 0;\n      }\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        if (typeof o.source == \"number\") o.source = nodes[o.source];\n        if (typeof o.target == \"number\") o.target = nodes[o.target];\n        ++o.source.weight;\n        ++o.target.weight;\n      }\n      for (i = 0; i < n; ++i) {\n        o = nodes[i];\n        if (isNaN(o.x)) o.x = position(\"x\", w);\n        if (isNaN(o.y)) o.y = position(\"y\", h);\n        if (isNaN(o.px)) o.px = o.x;\n        if (isNaN(o.py)) o.py = o.y;\n      }\n      distances = [];\n      if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n      strengths = [];\n      if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n      charges = [];\n      if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n      function position(dimension, size) {\n        if (!neighbors) {\n          neighbors = new Array(n);\n          for (j = 0; j < n; ++j) {\n            neighbors[j] = [];\n          }\n          for (j = 0; j < m; ++j) {\n            var o = links[j];\n            neighbors[o.source.index].push(o.target);\n            neighbors[o.target.index].push(o.source);\n          }\n        }\n        var candidates = neighbors[i], j = -1, m = candidates.length, x;\n        while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x;\n        return Math.random() * size;\n      }\n      return force.resume();\n    };\n    force.resume = function() {\n      return force.alpha(.1);\n    };\n    force.stop = function() {\n      return force.alpha(0);\n    };\n    force.drag = function() {\n      if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n      if (!arguments.length) return drag;\n      this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n    };\n    function dragmove(d) {\n      d.px = d3.event.x, d.py = d3.event.y;\n      force.resume();\n    }\n    return d3.rebind(force, event, \"on\");\n  };\n  function d3_layout_forceDragstart(d) {\n    d.fixed |= 2;\n  }\n  function d3_layout_forceDragend(d) {\n    d.fixed &= ~6;\n  }\n  function d3_layout_forceMouseover(d) {\n    d.fixed |= 4;\n    d.px = d.x, d.py = d.y;\n  }\n  function d3_layout_forceMouseout(d) {\n    d.fixed &= ~4;\n  }\n  function d3_layout_forceAccumulate(quad, alpha, charges) {\n    var cx = 0, cy = 0;\n    quad.charge = 0;\n    if (!quad.leaf) {\n      var nodes = quad.nodes, n = nodes.length, i = -1, c;\n      while (++i < n) {\n        c = nodes[i];\n        if (c == null) continue;\n        d3_layout_forceAccumulate(c, alpha, charges);\n        quad.charge += c.charge;\n        cx += c.charge * c.cx;\n        cy += c.charge * c.cy;\n      }\n    }\n    if (quad.point) {\n      if (!quad.leaf) {\n        quad.point.x += Math.random() - .5;\n        quad.point.y += Math.random() - .5;\n      }\n      var k = alpha * charges[quad.point.index];\n      quad.charge += quad.pointCharge = k;\n      cx += k * quad.point.x;\n      cy += k * quad.point.y;\n    }\n    quad.cx = cx / quad.charge;\n    quad.cy = cy / quad.charge;\n  }\n  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n  d3.layout.hierarchy = function() {\n    var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n    function hierarchy(root) {\n      var stack = [ root ], nodes = [], node;\n      root.depth = 0;\n      while ((node = stack.pop()) != null) {\n        nodes.push(node);\n        if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n          var n, childs, child;\n          while (--n >= 0) {\n            stack.push(child = childs[n]);\n            child.parent = node;\n            child.depth = node.depth + 1;\n          }\n          if (value) node.value = 0;\n          node.children = childs;\n        } else {\n          if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          delete node.children;\n        }\n      }\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var childs, parent;\n        if (sort && (childs = node.children)) childs.sort(sort);\n        if (value && (parent = node.parent)) parent.value += node.value;\n      });\n      return nodes;\n    }\n    hierarchy.sort = function(x) {\n      if (!arguments.length) return sort;\n      sort = x;\n      return hierarchy;\n    };\n    hierarchy.children = function(x) {\n      if (!arguments.length) return children;\n      children = x;\n      return hierarchy;\n    };\n    hierarchy.value = function(x) {\n      if (!arguments.length) return value;\n      value = x;\n      return hierarchy;\n    };\n    hierarchy.revalue = function(root) {\n      if (value) {\n        d3_layout_hierarchyVisitBefore(root, function(node) {\n          if (node.children) node.value = 0;\n        });\n        d3_layout_hierarchyVisitAfter(root, function(node) {\n          var parent;\n          if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          if (parent = node.parent) parent.value += node.value;\n        });\n      }\n      return root;\n    };\n    return hierarchy;\n  };\n  function d3_layout_hierarchyRebind(object, hierarchy) {\n    d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n    object.nodes = object;\n    object.links = d3_layout_hierarchyLinks;\n    return object;\n  }\n  function d3_layout_hierarchyVisitBefore(node, callback) {\n    var nodes = [ node ];\n    while ((node = nodes.pop()) != null) {\n      callback(node);\n      if ((children = node.children) && (n = children.length)) {\n        var n, children;\n        while (--n >= 0) nodes.push(children[n]);\n      }\n    }\n  }\n  function d3_layout_hierarchyVisitAfter(node, callback) {\n    var nodes = [ node ], nodes2 = [];\n    while ((node = nodes.pop()) != null) {\n      nodes2.push(node);\n      if ((children = node.children) && (n = children.length)) {\n        var i = -1, n, children;\n        while (++i < n) nodes.push(children[i]);\n      }\n    }\n    while ((node = nodes2.pop()) != null) {\n      callback(node);\n    }\n  }\n  function d3_layout_hierarchyChildren(d) {\n    return d.children;\n  }\n  function d3_layout_hierarchyValue(d) {\n    return d.value;\n  }\n  function d3_layout_hierarchySort(a, b) {\n    return b.value - a.value;\n  }\n  function d3_layout_hierarchyLinks(nodes) {\n    return d3.merge(nodes.map(function(parent) {\n      return (parent.children || []).map(function(child) {\n        return {\n          source: parent,\n          target: child\n        };\n      });\n    }));\n  }\n  d3.layout.partition = function() {\n    var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n    function position(node, x, dx, dy) {\n      var children = node.children;\n      node.x = x;\n      node.y = node.depth * dy;\n      node.dx = dx;\n      node.dy = dy;\n      if (children && (n = children.length)) {\n        var i = -1, n, c, d;\n        dx = node.value ? dx / node.value : 0;\n        while (++i < n) {\n          position(c = children[i], x, d = c.value * dx, dy);\n          x += d;\n        }\n      }\n    }\n    function depth(node) {\n      var children = node.children, d = 0;\n      if (children && (n = children.length)) {\n        var i = -1, n;\n        while (++i < n) d = Math.max(d, depth(children[i]));\n      }\n      return 1 + d;\n    }\n    function partition(d, i) {\n      var nodes = hierarchy.call(this, d, i);\n      position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n      return nodes;\n    }\n    partition.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return partition;\n    };\n    return d3_layout_hierarchyRebind(partition, hierarchy);\n  };\n  d3.layout.pie = function() {\n    var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n    function pie(data) {\n      var n = data.length, values = data.map(function(d, i) {\n        return +value.call(pie, d, i);\n      }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v;\n      if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n        return values[j] - values[i];\n      } : function(i, j) {\n        return sort(data[i], data[j]);\n      });\n      index.forEach(function(i) {\n        arcs[i] = {\n          data: data[i],\n          value: v = values[i],\n          startAngle: a,\n          endAngle: a += v * k + pa,\n          padAngle: p\n        };\n      });\n      return arcs;\n    }\n    pie.value = function(_) {\n      if (!arguments.length) return value;\n      value = _;\n      return pie;\n    };\n    pie.sort = function(_) {\n      if (!arguments.length) return sort;\n      sort = _;\n      return pie;\n    };\n    pie.startAngle = function(_) {\n      if (!arguments.length) return startAngle;\n      startAngle = _;\n      return pie;\n    };\n    pie.endAngle = function(_) {\n      if (!arguments.length) return endAngle;\n      endAngle = _;\n      return pie;\n    };\n    pie.padAngle = function(_) {\n      if (!arguments.length) return padAngle;\n      padAngle = _;\n      return pie;\n    };\n    return pie;\n  };\n  var d3_layout_pieSortByValue = {};\n  d3.layout.stack = function() {\n    var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n    function stack(data, index) {\n      if (!(n = data.length)) return data;\n      var series = data.map(function(d, i) {\n        return values.call(stack, d, i);\n      });\n      var points = series.map(function(d) {\n        return d.map(function(v, i) {\n          return [ x.call(stack, v, i), y.call(stack, v, i) ];\n        });\n      });\n      var orders = order.call(stack, points, index);\n      series = d3.permute(series, orders);\n      points = d3.permute(points, orders);\n      var offsets = offset.call(stack, points, index);\n      var m = series[0].length, n, i, j, o;\n      for (j = 0; j < m; ++j) {\n        out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n        for (i = 1; i < n; ++i) {\n          out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n        }\n      }\n      return data;\n    }\n    stack.values = function(x) {\n      if (!arguments.length) return values;\n      values = x;\n      return stack;\n    };\n    stack.order = function(x) {\n      if (!arguments.length) return order;\n      order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n      return stack;\n    };\n    stack.offset = function(x) {\n      if (!arguments.length) return offset;\n      offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n      return stack;\n    };\n    stack.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      return stack;\n    };\n    stack.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      return stack;\n    };\n    stack.out = function(z) {\n      if (!arguments.length) return out;\n      out = z;\n      return stack;\n    };\n    return stack;\n  };\n  function d3_layout_stackX(d) {\n    return d.x;\n  }\n  function d3_layout_stackY(d) {\n    return d.y;\n  }\n  function d3_layout_stackOut(d, y0, y) {\n    d.y0 = y0;\n    d.y = y;\n  }\n  var d3_layout_stackOrders = d3.map({\n    \"inside-out\": function(data) {\n      var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n        return max[a] - max[b];\n      }), top = 0, bottom = 0, tops = [], bottoms = [];\n      for (i = 0; i < n; ++i) {\n        j = index[i];\n        if (top < bottom) {\n          top += sums[j];\n          tops.push(j);\n        } else {\n          bottom += sums[j];\n          bottoms.push(j);\n        }\n      }\n      return bottoms.reverse().concat(tops);\n    },\n    reverse: function(data) {\n      return d3.range(data.length).reverse();\n    },\n    \"default\": d3_layout_stackOrderDefault\n  });\n  var d3_layout_stackOffsets = d3.map({\n    silhouette: function(data) {\n      var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o > max) max = o;\n        sums.push(o);\n      }\n      for (j = 0; j < m; ++j) {\n        y0[j] = (max - sums[j]) / 2;\n      }\n      return y0;\n    },\n    wiggle: function(data) {\n      var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n      y0[0] = o = o0 = 0;\n      for (j = 1; j < m; ++j) {\n        for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n        for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n          for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n            s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n          }\n          s2 += s3 * data[i][j][1];\n        }\n        y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n        if (o < o0) o0 = o;\n      }\n      for (j = 0; j < m; ++j) y0[j] -= o0;\n      return y0;\n    },\n    expand: function(data) {\n      var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n      }\n      for (j = 0; j < m; ++j) y0[j] = 0;\n      return y0;\n    },\n    zero: d3_layout_stackOffsetZero\n  });\n  function d3_layout_stackOrderDefault(data) {\n    return d3.range(data.length);\n  }\n  function d3_layout_stackOffsetZero(data) {\n    var j = -1, m = data[0].length, y0 = [];\n    while (++j < m) y0[j] = 0;\n    return y0;\n  }\n  function d3_layout_stackMaxIndex(array) {\n    var i = 1, j = 0, v = array[0][1], k, n = array.length;\n    for (;i < n; ++i) {\n      if ((k = array[i][1]) > v) {\n        j = i;\n        v = k;\n      }\n    }\n    return j;\n  }\n  function d3_layout_stackReduceSum(d) {\n    return d.reduce(d3_layout_stackSum, 0);\n  }\n  function d3_layout_stackSum(p, d) {\n    return p + d[1];\n  }\n  d3.layout.histogram = function() {\n    var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n    function histogram(data, i) {\n      var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n      while (++i < m) {\n        bin = bins[i] = [];\n        bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n        bin.y = 0;\n      }\n      if (m > 0) {\n        i = -1;\n        while (++i < n) {\n          x = values[i];\n          if (x >= range[0] && x <= range[1]) {\n            bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n            bin.y += k;\n            bin.push(data[i]);\n          }\n        }\n      }\n      return bins;\n    }\n    histogram.value = function(x) {\n      if (!arguments.length) return valuer;\n      valuer = x;\n      return histogram;\n    };\n    histogram.range = function(x) {\n      if (!arguments.length) return ranger;\n      ranger = d3_functor(x);\n      return histogram;\n    };\n    histogram.bins = function(x) {\n      if (!arguments.length) return binner;\n      binner = typeof x === \"number\" ? function(range) {\n        return d3_layout_histogramBinFixed(range, x);\n      } : d3_functor(x);\n      return histogram;\n    };\n    histogram.frequency = function(x) {\n      if (!arguments.length) return frequency;\n      frequency = !!x;\n      return histogram;\n    };\n    return histogram;\n  };\n  function d3_layout_histogramBinSturges(range, values) {\n    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n  }\n  function d3_layout_histogramBinFixed(range, n) {\n    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n    while (++x <= n) f[x] = m * x + b;\n    return f;\n  }\n  function d3_layout_histogramRange(values) {\n    return [ d3.min(values), d3.max(values) ];\n  }\n  d3.layout.pack = function() {\n    var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n    function pack(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n        return radius;\n      };\n      root.x = root.y = 0;\n      d3_layout_hierarchyVisitAfter(root, function(d) {\n        d.r = +r(d.value);\n      });\n      d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n      if (padding) {\n        var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r += dr;\n        });\n        d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r -= dr;\n        });\n      }\n      d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n      return nodes;\n    }\n    pack.size = function(_) {\n      if (!arguments.length) return size;\n      size = _;\n      return pack;\n    };\n    pack.radius = function(_) {\n      if (!arguments.length) return radius;\n      radius = _ == null || typeof _ === \"function\" ? _ : +_;\n      return pack;\n    };\n    pack.padding = function(_) {\n      if (!arguments.length) return padding;\n      padding = +_;\n      return pack;\n    };\n    return d3_layout_hierarchyRebind(pack, hierarchy);\n  };\n  function d3_layout_packSort(a, b) {\n    return a.value - b.value;\n  }\n  function d3_layout_packInsert(a, b) {\n    var c = a._pack_next;\n    a._pack_next = b;\n    b._pack_prev = a;\n    b._pack_next = c;\n    c._pack_prev = b;\n  }\n  function d3_layout_packSplice(a, b) {\n    a._pack_next = b;\n    b._pack_prev = a;\n  }\n  function d3_layout_packIntersects(a, b) {\n    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n    return .999 * dr * dr > dx * dx + dy * dy;\n  }\n  function d3_layout_packSiblings(node) {\n    if (!(nodes = node.children) || !(n = nodes.length)) return;\n    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n    function bound(node) {\n      xMin = Math.min(node.x - node.r, xMin);\n      xMax = Math.max(node.x + node.r, xMax);\n      yMin = Math.min(node.y - node.r, yMin);\n      yMax = Math.max(node.y + node.r, yMax);\n    }\n    nodes.forEach(d3_layout_packLink);\n    a = nodes[0];\n    a.x = -a.r;\n    a.y = 0;\n    bound(a);\n    if (n > 1) {\n      b = nodes[1];\n      b.x = b.r;\n      b.y = 0;\n      bound(b);\n      if (n > 2) {\n        c = nodes[2];\n        d3_layout_packPlace(a, b, c);\n        bound(c);\n        d3_layout_packInsert(a, c);\n        a._pack_prev = c;\n        d3_layout_packInsert(c, b);\n        b = a._pack_next;\n        for (i = 3; i < n; i++) {\n          d3_layout_packPlace(a, b, c = nodes[i]);\n          var isect = 0, s1 = 1, s2 = 1;\n          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n            if (d3_layout_packIntersects(j, c)) {\n              isect = 1;\n              break;\n            }\n          }\n          if (isect == 1) {\n            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n              if (d3_layout_packIntersects(k, c)) {\n                break;\n              }\n            }\n          }\n          if (isect) {\n            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n            i--;\n          } else {\n            d3_layout_packInsert(a, c);\n            b = c;\n            bound(c);\n          }\n        }\n      }\n    }\n    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n    for (i = 0; i < n; i++) {\n      c = nodes[i];\n      c.x -= cx;\n      c.y -= cy;\n      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n    }\n    node.r = cr;\n    nodes.forEach(d3_layout_packUnlink);\n  }\n  function d3_layout_packLink(node) {\n    node._pack_next = node._pack_prev = node;\n  }\n  function d3_layout_packUnlink(node) {\n    delete node._pack_next;\n    delete node._pack_prev;\n  }\n  function d3_layout_packTransform(node, x, y, k) {\n    var children = node.children;\n    node.x = x += k * node.x;\n    node.y = y += k * node.y;\n    node.r *= k;\n    if (children) {\n      var i = -1, n = children.length;\n      while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n    }\n  }\n  function d3_layout_packPlace(a, b, c) {\n    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n    if (db && (dx || dy)) {\n      var da = b.r + c.r, dc = dx * dx + dy * dy;\n      da *= da;\n      db *= db;\n      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n      c.x = a.x + x * dx + y * dy;\n      c.y = a.y + x * dy - y * dx;\n    } else {\n      c.x = a.x + db;\n      c.y = a.y;\n    }\n  }\n  d3.layout.tree = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n    function tree(d, i) {\n      var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n      d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n      d3_layout_hierarchyVisitBefore(root1, secondWalk);\n      if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n        var left = root0, right = root0, bottom = root0;\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          if (node.x < left.x) left = node;\n          if (node.x > right.x) right = node;\n          if (node.depth > bottom.depth) bottom = node;\n        });\n        var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          node.x = (node.x + tx) * kx;\n          node.y = node.depth * ky;\n        });\n      }\n      return nodes;\n    }\n    function wrapTree(root0) {\n      var root1 = {\n        A: null,\n        children: [ root0 ]\n      }, queue = [ root1 ], node1;\n      while ((node1 = queue.pop()) != null) {\n        for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n          queue.push((children[i] = child = {\n            _: children[i],\n            parent: node1,\n            children: (child = children[i].children) && child.slice() || [],\n            A: null,\n            a: null,\n            z: 0,\n            m: 0,\n            c: 0,\n            s: 0,\n            t: null,\n            i: i\n          }).a = child);\n        }\n      }\n      return root1.children[0];\n    }\n    function firstWalk(v) {\n      var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n      if (children.length) {\n        d3_layout_treeShift(v);\n        var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n        if (w) {\n          v.z = w.z + separation(v._, w._);\n          v.m = v.z - midpoint;\n        } else {\n          v.z = midpoint;\n        }\n      } else if (w) {\n        v.z = w.z + separation(v._, w._);\n      }\n      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n    }\n    function secondWalk(v) {\n      v._.x = v.z + v.parent.m;\n      v.m += v.parent.m;\n    }\n    function apportion(v, w, ancestor) {\n      if (w) {\n        var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n          vom = d3_layout_treeLeft(vom);\n          vop = d3_layout_treeRight(vop);\n          vop.a = v;\n          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n          if (shift > 0) {\n            d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n            sip += shift;\n            sop += shift;\n          }\n          sim += vim.m;\n          sip += vip.m;\n          som += vom.m;\n          sop += vop.m;\n        }\n        if (vim && !d3_layout_treeRight(vop)) {\n          vop.t = vim;\n          vop.m += sim - sop;\n        }\n        if (vip && !d3_layout_treeLeft(vom)) {\n          vom.t = vip;\n          vom.m += sip - som;\n          ancestor = v;\n        }\n      }\n      return ancestor;\n    }\n    function sizeNode(node) {\n      node.x *= size[0];\n      node.y = node.depth * size[1];\n    }\n    tree.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return tree;\n    };\n    tree.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null ? sizeNode : null;\n      return tree;\n    };\n    tree.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) == null ? null : sizeNode;\n      return tree;\n    };\n    return d3_layout_hierarchyRebind(tree, hierarchy);\n  };\n  function d3_layout_treeSeparation(a, b) {\n    return a.parent == b.parent ? 1 : 2;\n  }\n  function d3_layout_treeLeft(v) {\n    var children = v.children;\n    return children.length ? children[0] : v.t;\n  }\n  function d3_layout_treeRight(v) {\n    var children = v.children, n;\n    return (n = children.length) ? children[n - 1] : v.t;\n  }\n  function d3_layout_treeMove(wm, wp, shift) {\n    var change = shift / (wp.i - wm.i);\n    wp.c -= change;\n    wp.s += shift;\n    wm.c += change;\n    wp.z += shift;\n    wp.m += shift;\n  }\n  function d3_layout_treeShift(v) {\n    var shift = 0, change = 0, children = v.children, i = children.length, w;\n    while (--i >= 0) {\n      w = children[i];\n      w.z += shift;\n      w.m += shift;\n      shift += w.s + (change += w.c);\n    }\n  }\n  function d3_layout_treeAncestor(vim, v, ancestor) {\n    return vim.a.parent === v.parent ? vim.a : ancestor;\n  }\n  d3.layout.cluster = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n    function cluster(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var children = node.children;\n        if (children && children.length) {\n          node.x = d3_layout_clusterX(children);\n          node.y = d3_layout_clusterY(children);\n        } else {\n          node.x = previousNode ? x += separation(node, previousNode) : 0;\n          node.y = 0;\n          previousNode = node;\n        }\n      });\n      var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n      d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n        node.x = (node.x - root.x) * size[0];\n        node.y = (root.y - node.y) * size[1];\n      } : function(node) {\n        node.x = (node.x - x0) / (x1 - x0) * size[0];\n        node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n      });\n      return nodes;\n    }\n    cluster.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return cluster;\n    };\n    cluster.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null;\n      return cluster;\n    };\n    cluster.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) != null;\n      return cluster;\n    };\n    return d3_layout_hierarchyRebind(cluster, hierarchy);\n  };\n  function d3_layout_clusterY(children) {\n    return 1 + d3.max(children, function(child) {\n      return child.y;\n    });\n  }\n  function d3_layout_clusterX(children) {\n    return children.reduce(function(x, child) {\n      return x + child.x;\n    }, 0) / children.length;\n  }\n  function d3_layout_clusterLeft(node) {\n    var children = node.children;\n    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n  }\n  function d3_layout_clusterRight(node) {\n    var children = node.children, n;\n    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n  }\n  d3.layout.treemap = function() {\n    var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n    function scale(children, k) {\n      var i = -1, n = children.length, child, area;\n      while (++i < n) {\n        area = (child = children[i]).value * (k < 0 ? 0 : k);\n        child.area = isNaN(area) || area <= 0 ? 0 : area;\n      }\n    }\n    function squarify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while ((n = remaining.length) > 0) {\n          row.push(child = remaining[n - 1]);\n          row.area += child.area;\n          if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n            remaining.pop();\n            best = score;\n          } else {\n            row.area -= row.pop().area;\n            position(row, u, rect, false);\n            u = Math.min(rect.dx, rect.dy);\n            row.length = row.area = 0;\n            best = Infinity;\n          }\n        }\n        if (row.length) {\n          position(row, u, rect, true);\n          row.length = row.area = 0;\n        }\n        children.forEach(squarify);\n      }\n    }\n    function stickify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), remaining = children.slice(), child, row = [];\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while (child = remaining.pop()) {\n          row.push(child);\n          row.area += child.area;\n          if (child.z != null) {\n            position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n            row.length = row.area = 0;\n          }\n        }\n        children.forEach(stickify);\n      }\n    }\n    function worst(row, u) {\n      var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n      while (++i < n) {\n        if (!(r = row[i].area)) continue;\n        if (r < rmin) rmin = r;\n        if (r > rmax) rmax = r;\n      }\n      s *= s;\n      u *= u;\n      return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n    }\n    function position(row, u, rect, flush) {\n      var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n      if (u == rect.dx) {\n        if (flush || v > rect.dy) v = rect.dy;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dy = v;\n          x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n        }\n        o.z = true;\n        o.dx += rect.x + rect.dx - x;\n        rect.y += v;\n        rect.dy -= v;\n      } else {\n        if (flush || v > rect.dx) v = rect.dx;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dx = v;\n          y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n        }\n        o.z = false;\n        o.dy += rect.y + rect.dy - y;\n        rect.x += v;\n        rect.dx -= v;\n      }\n    }\n    function treemap(d) {\n      var nodes = stickies || hierarchy(d), root = nodes[0];\n      root.x = 0;\n      root.y = 0;\n      root.dx = size[0];\n      root.dy = size[1];\n      if (stickies) hierarchy.revalue(root);\n      scale([ root ], root.dx * root.dy / root.value);\n      (stickies ? stickify : squarify)(root);\n      if (sticky) stickies = nodes;\n      return nodes;\n    }\n    treemap.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return treemap;\n    };\n    treemap.padding = function(x) {\n      if (!arguments.length) return padding;\n      function padFunction(node) {\n        var p = x.call(treemap, node, node.depth);\n        return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n      }\n      function padConstant(node) {\n        return d3_layout_treemapPad(node, x);\n      }\n      var type;\n      pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n      padConstant) : padConstant;\n      return treemap;\n    };\n    treemap.round = function(x) {\n      if (!arguments.length) return round != Number;\n      round = x ? Math.round : Number;\n      return treemap;\n    };\n    treemap.sticky = function(x) {\n      if (!arguments.length) return sticky;\n      sticky = x;\n      stickies = null;\n      return treemap;\n    };\n    treemap.ratio = function(x) {\n      if (!arguments.length) return ratio;\n      ratio = x;\n      return treemap;\n    };\n    treemap.mode = function(x) {\n      if (!arguments.length) return mode;\n      mode = x + \"\";\n      return treemap;\n    };\n    return d3_layout_hierarchyRebind(treemap, hierarchy);\n  };\n  function d3_layout_treemapPadNull(node) {\n    return {\n      x: node.x,\n      y: node.y,\n      dx: node.dx,\n      dy: node.dy\n    };\n  }\n  function d3_layout_treemapPad(node, padding) {\n    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n    if (dx < 0) {\n      x += dx / 2;\n      dx = 0;\n    }\n    if (dy < 0) {\n      y += dy / 2;\n      dy = 0;\n    }\n    return {\n      x: x,\n      y: y,\n      dx: dx,\n      dy: dy\n    };\n  }\n  d3.random = {\n    normal: function(µ, σ) {\n      var n = arguments.length;\n      if (n < 2) σ = 1;\n      if (n < 1) µ = 0;\n      return function() {\n        var x, y, r;\n        do {\n          x = Math.random() * 2 - 1;\n          y = Math.random() * 2 - 1;\n          r = x * x + y * y;\n        } while (!r || r > 1);\n        return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n      };\n    },\n    logNormal: function() {\n      var random = d3.random.normal.apply(d3, arguments);\n      return function() {\n        return Math.exp(random());\n      };\n    },\n    bates: function(m) {\n      var random = d3.random.irwinHall(m);\n      return function() {\n        return random() / m;\n      };\n    },\n    irwinHall: function(m) {\n      return function() {\n        for (var s = 0, j = 0; j < m; j++) s += Math.random();\n        return s;\n      };\n    }\n  };\n  d3.scale = {};\n  function d3_scaleExtent(domain) {\n    var start = domain[0], stop = domain[domain.length - 1];\n    return start < stop ? [ start, stop ] : [ stop, start ];\n  }\n  function d3_scaleRange(scale) {\n    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n  }\n  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n    return function(x) {\n      return i(u(x));\n    };\n  }\n  function d3_scale_nice(domain, nice) {\n    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n    if (x1 < x0) {\n      dx = i0, i0 = i1, i1 = dx;\n      dx = x0, x0 = x1, x1 = dx;\n    }\n    domain[i0] = nice.floor(x0);\n    domain[i1] = nice.ceil(x1);\n    return domain;\n  }\n  function d3_scale_niceStep(step) {\n    return step ? {\n      floor: function(x) {\n        return Math.floor(x / step) * step;\n      },\n      ceil: function(x) {\n        return Math.ceil(x / step) * step;\n      }\n    } : d3_scale_niceIdentity;\n  }\n  var d3_scale_niceIdentity = {\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n    if (domain[k] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n    while (++j <= k) {\n      u.push(uninterpolate(domain[j - 1], domain[j]));\n      i.push(interpolate(range[j - 1], range[j]));\n    }\n    return function(x) {\n      var j = d3.bisect(domain, x, 1, k) - 1;\n      return i[j](u[j](x));\n    };\n  }\n  d3.scale.linear = function() {\n    return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n  };\n  function d3_scale_linear(domain, range, interpolate, clamp) {\n    var output, input;\n    function rescale() {\n      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n      output = linear(domain, range, uninterpolate, interpolate);\n      input = linear(range, domain, uninterpolate, d3_interpolate);\n      return scale;\n    }\n    function scale(x) {\n      return output(x);\n    }\n    scale.invert = function(y) {\n      return input(y);\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(Number);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.rangeRound = function(x) {\n      return scale.range(x).interpolate(d3_interpolateRound);\n    };\n    scale.clamp = function(x) {\n      if (!arguments.length) return clamp;\n      clamp = x;\n      return rescale();\n    };\n    scale.interpolate = function(x) {\n      if (!arguments.length) return interpolate;\n      interpolate = x;\n      return rescale();\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      d3_scale_linearNice(domain, m);\n      return rescale();\n    };\n    scale.copy = function() {\n      return d3_scale_linear(domain, range, interpolate, clamp);\n    };\n    return rescale();\n  }\n  function d3_scale_linearRebind(scale, linear) {\n    return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n  }\n  function d3_scale_linearNice(domain, m) {\n    return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n  }\n  function d3_scale_linearTickRange(domain, m) {\n    if (m == null) m = 10;\n    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n    extent[0] = Math.ceil(extent[0] / step) * step;\n    extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n    extent[2] = step;\n    return extent;\n  }\n  function d3_scale_linearTicks(domain, m) {\n    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n  }\n  function d3_scale_linearTickFormat(domain, m, format) {\n    var range = d3_scale_linearTickRange(domain, m);\n    if (format) {\n      var match = d3_format_re.exec(format);\n      match.shift();\n      if (match[8] === \"s\") {\n        var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n        if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n        match[8] = \"f\";\n        format = d3.format(match.join(\"\"));\n        return function(d) {\n          return format(prefix.scale(d)) + prefix.symbol;\n        };\n      }\n      if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n      format = match.join(\"\");\n    } else {\n      format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n    }\n    return d3.format(format);\n  }\n  var d3_scale_linearFormatSignificant = {\n    s: 1,\n    g: 1,\n    p: 1,\n    r: 1,\n    e: 1\n  };\n  function d3_scale_linearPrecision(value) {\n    return -Math.floor(Math.log(value) / Math.LN10 + .01);\n  }\n  function d3_scale_linearFormatPrecision(type, range) {\n    var p = d3_scale_linearPrecision(range[2]);\n    return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n  }\n  d3.scale.log = function() {\n    return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n  };\n  function d3_scale_log(linear, base, positive, domain) {\n    function log(x) {\n      return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n    }\n    function pow(x) {\n      return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n    }\n    function scale(x) {\n      return linear(log(x));\n    }\n    scale.invert = function(x) {\n      return pow(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      positive = x[0] >= 0;\n      linear.domain((domain = x.map(Number)).map(log));\n      return scale;\n    };\n    scale.base = function(_) {\n      if (!arguments.length) return base;\n      base = +_;\n      linear.domain(domain.map(log));\n      return scale;\n    };\n    scale.nice = function() {\n      var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n      linear.domain(niced);\n      domain = niced.map(pow);\n      return scale;\n    };\n    scale.ticks = function() {\n      var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n      if (isFinite(j - i)) {\n        if (positive) {\n          for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n          ticks.push(pow(i));\n        } else {\n          ticks.push(pow(i));\n          for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n        }\n        for (i = 0; ticks[i] < u; i++) {}\n        for (j = ticks.length; ticks[j - 1] > v; j--) {}\n        ticks = ticks.slice(i, j);\n      }\n      return ticks;\n    };\n    scale.tickFormat = function(n, format) {\n      if (!arguments.length) return d3_scale_logFormat;\n      if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n      var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, \n      Math.floor), e;\n      return function(d) {\n        return d / pow(f(log(d) + e)) <= k ? format(d) : \"\";\n      };\n    };\n    scale.copy = function() {\n      return d3_scale_log(linear.copy(), base, positive, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n    floor: function(x) {\n      return -Math.ceil(-x);\n    },\n    ceil: function(x) {\n      return -Math.floor(-x);\n    }\n  };\n  d3.scale.pow = function() {\n    return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n  };\n  function d3_scale_pow(linear, exponent, domain) {\n    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n    function scale(x) {\n      return linear(powp(x));\n    }\n    scale.invert = function(x) {\n      return powb(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      linear.domain((domain = x.map(Number)).map(powp));\n      return scale;\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      return scale.domain(d3_scale_linearNice(domain, m));\n    };\n    scale.exponent = function(x) {\n      if (!arguments.length) return exponent;\n      powp = d3_scale_powPow(exponent = x);\n      powb = d3_scale_powPow(1 / exponent);\n      linear.domain(domain.map(powp));\n      return scale;\n    };\n    scale.copy = function() {\n      return d3_scale_pow(linear.copy(), exponent, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_scale_powPow(e) {\n    return function(x) {\n      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n    };\n  }\n  d3.scale.sqrt = function() {\n    return d3.scale.pow().exponent(.5);\n  };\n  d3.scale.ordinal = function() {\n    return d3_scale_ordinal([], {\n      t: \"range\",\n      a: [ [] ]\n    });\n  };\n  function d3_scale_ordinal(domain, ranger) {\n    var index, range, rangeBand;\n    function scale(x) {\n      return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n    }\n    function steps(start, step) {\n      return d3.range(domain.length).map(function(i) {\n        return start + step * i;\n      });\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = [];\n      index = new d3_Map();\n      var i = -1, n = x.length, xi;\n      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n      return scale[ranger.t].apply(scale, ranger.a);\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      rangeBand = 0;\n      ranger = {\n        t: \"range\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangePoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n      0) : (stop - start) / (domain.length - 1 + padding);\n      range = steps(start + step * padding / 2, step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangePoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundPoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n      0) : (stop - start) / (domain.length - 1 + padding) | 0;\n      range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangeRoundPoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n      range = steps(start + step * outerPadding, step);\n      if (reverse) range.reverse();\n      rangeBand = step * (1 - padding);\n      ranger = {\n        t: \"rangeBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n      range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n      if (reverse) range.reverse();\n      rangeBand = Math.round(step * (1 - padding));\n      ranger = {\n        t: \"rangeRoundBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBand = function() {\n      return rangeBand;\n    };\n    scale.rangeExtent = function() {\n      return d3_scaleExtent(ranger.a[0]);\n    };\n    scale.copy = function() {\n      return d3_scale_ordinal(domain, ranger);\n    };\n    return scale.domain(domain);\n  }\n  d3.scale.category10 = function() {\n    return d3.scale.ordinal().range(d3_category10);\n  };\n  d3.scale.category20 = function() {\n    return d3.scale.ordinal().range(d3_category20);\n  };\n  d3.scale.category20b = function() {\n    return d3.scale.ordinal().range(d3_category20b);\n  };\n  d3.scale.category20c = function() {\n    return d3.scale.ordinal().range(d3_category20c);\n  };\n  var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n  var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n  var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n  var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n  d3.scale.quantile = function() {\n    return d3_scale_quantile([], []);\n  };\n  function d3_scale_quantile(domain, range) {\n    var thresholds;\n    function rescale() {\n      var k = 0, q = range.length;\n      thresholds = [];\n      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n      return scale;\n    }\n    function scale(x) {\n      if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.quantiles = function() {\n      return thresholds;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantile(domain, range);\n    };\n    return rescale();\n  }\n  d3.scale.quantize = function() {\n    return d3_scale_quantize(0, 1, [ 0, 1 ]);\n  };\n  function d3_scale_quantize(x0, x1, range) {\n    var kx, i;\n    function scale(x) {\n      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n    }\n    function rescale() {\n      kx = range.length / (x1 - x0);\n      i = range.length - 1;\n      return scale;\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return [ x0, x1 ];\n      x0 = +x[0];\n      x1 = +x[x.length - 1];\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      y = y < 0 ? NaN : y / kx + x0;\n      return [ y, y + 1 / kx ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantize(x0, x1, range);\n    };\n    return rescale();\n  }\n  d3.scale.threshold = function() {\n    return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n  };\n  function d3_scale_threshold(domain, range) {\n    function scale(x) {\n      if (x <= x) return range[d3.bisect(domain, x)];\n    }\n    scale.domain = function(_) {\n      if (!arguments.length) return domain;\n      domain = _;\n      return scale;\n    };\n    scale.range = function(_) {\n      if (!arguments.length) return range;\n      range = _;\n      return scale;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return [ domain[y - 1], domain[y] ];\n    };\n    scale.copy = function() {\n      return d3_scale_threshold(domain, range);\n    };\n    return scale;\n  }\n  d3.scale.identity = function() {\n    return d3_scale_identity([ 0, 1 ]);\n  };\n  function d3_scale_identity(domain) {\n    function identity(x) {\n      return +x;\n    }\n    identity.invert = identity;\n    identity.domain = identity.range = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(identity);\n      return identity;\n    };\n    identity.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    identity.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    identity.copy = function() {\n      return d3_scale_identity(domain);\n    };\n    return identity;\n  }\n  d3.svg = {};\n  function d3_zero() {\n    return 0;\n  }\n  d3.svg.arc = function() {\n    var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n    function arc() {\n      var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n      if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n      if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n      var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n      if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n        rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n        if (!cw) p1 *= -1;\n        if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n        if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n      }\n      if (r1) {\n        x0 = r1 * Math.cos(a0 + p1);\n        y0 = r1 * Math.sin(a0 + p1);\n        x1 = r1 * Math.cos(a1 - p1);\n        y1 = r1 * Math.sin(a1 - p1);\n        var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n        if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n          var h1 = (a0 + a1) / 2;\n          x0 = r1 * Math.cos(h1);\n          y0 = r1 * Math.sin(h1);\n          x1 = y1 = null;\n        }\n      } else {\n        x0 = y0 = 0;\n      }\n      if (r0) {\n        x2 = r0 * Math.cos(a1 - p0);\n        y2 = r0 * Math.sin(a1 - p0);\n        x3 = r0 * Math.cos(a0 + p0);\n        y3 = r0 * Math.sin(a0 + p0);\n        var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n        if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n          var h0 = (a0 + a1) / 2;\n          x2 = r0 * Math.cos(h0);\n          y2 = r0 * Math.sin(h0);\n          x3 = y3 = null;\n        }\n      } else {\n        x2 = y2 = 0;\n      }\n      if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n        cr = r0 < r1 ^ cw ? 0 : 1;\n        var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n        if (x1 != null) {\n          var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n          if (rc === rc1) {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n          } else {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n          }\n        } else {\n          path.push(\"M\", x0, \",\", y0);\n        }\n        if (x3 != null) {\n          var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n          if (rc === rc0) {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          } else {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          }\n        } else {\n          path.push(\"L\", x2, \",\", y2);\n        }\n      } else {\n        path.push(\"M\", x0, \",\", y0);\n        if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n        path.push(\"L\", x2, \",\", y2);\n        if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n      }\n      path.push(\"Z\");\n      return path.join(\"\");\n    }\n    function circleSegment(r1, cw) {\n      return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n    }\n    arc.innerRadius = function(v) {\n      if (!arguments.length) return innerRadius;\n      innerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.outerRadius = function(v) {\n      if (!arguments.length) return outerRadius;\n      outerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.cornerRadius = function(v) {\n      if (!arguments.length) return cornerRadius;\n      cornerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.padRadius = function(v) {\n      if (!arguments.length) return padRadius;\n      padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n      return arc;\n    };\n    arc.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return arc;\n    };\n    arc.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return arc;\n    };\n    arc.padAngle = function(v) {\n      if (!arguments.length) return padAngle;\n      padAngle = d3_functor(v);\n      return arc;\n    };\n    arc.centroid = function() {\n      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n      return [ Math.cos(a) * r, Math.sin(a) * r ];\n    };\n    return arc;\n  };\n  var d3_svg_arcAuto = \"auto\";\n  function d3_svg_arcInnerRadius(d) {\n    return d.innerRadius;\n  }\n  function d3_svg_arcOuterRadius(d) {\n    return d.outerRadius;\n  }\n  function d3_svg_arcStartAngle(d) {\n    return d.startAngle;\n  }\n  function d3_svg_arcEndAngle(d) {\n    return d.endAngle;\n  }\n  function d3_svg_arcPadAngle(d) {\n    return d && d.padAngle;\n  }\n  function d3_svg_arcSweep(x0, y0, x1, y1) {\n    return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n  }\n  function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n    var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n    return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n  }\n  function d3_svg_line(projection) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n    function line(data) {\n      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points), tension));\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n        } else if (points.length) {\n          segment();\n          points = [];\n        }\n      }\n      if (points.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    line.x = function(_) {\n      if (!arguments.length) return x;\n      x = _;\n      return line;\n    };\n    line.y = function(_) {\n      if (!arguments.length) return y;\n      y = _;\n      return line;\n    };\n    line.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return line;\n    };\n    line.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      return line;\n    };\n    line.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return line;\n    };\n    return line;\n  }\n  d3.svg.line = function() {\n    return d3_svg_line(d3_identity);\n  };\n  var d3_svg_lineInterpolators = d3.map({\n    linear: d3_svg_lineLinear,\n    \"linear-closed\": d3_svg_lineLinearClosed,\n    step: d3_svg_lineStep,\n    \"step-before\": d3_svg_lineStepBefore,\n    \"step-after\": d3_svg_lineStepAfter,\n    basis: d3_svg_lineBasis,\n    \"basis-open\": d3_svg_lineBasisOpen,\n    \"basis-closed\": d3_svg_lineBasisClosed,\n    bundle: d3_svg_lineBundle,\n    cardinal: d3_svg_lineCardinal,\n    \"cardinal-open\": d3_svg_lineCardinalOpen,\n    \"cardinal-closed\": d3_svg_lineCardinalClosed,\n    monotone: d3_svg_lineMonotone\n  });\n  d3_svg_lineInterpolators.forEach(function(key, value) {\n    value.key = key;\n    value.closed = /-closed$/.test(key);\n  });\n  function d3_svg_lineLinear(points) {\n    return points.join(\"L\");\n  }\n  function d3_svg_lineLinearClosed(points) {\n    return d3_svg_lineLinear(points) + \"Z\";\n  }\n  function d3_svg_lineStep(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n    if (n > 1) path.push(\"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepBefore(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepAfter(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineCardinalOpen(points, tension) {\n    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineCardinalClosed(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n    points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n  }\n  function d3_svg_lineCardinal(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineHermite(points, tangents) {\n    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n      return d3_svg_lineLinear(points);\n    }\n    var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n    if (quad) {\n      path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n      p0 = points[1];\n      pi = 2;\n    }\n    if (tangents.length > 1) {\n      t = tangents[1];\n      p = points[pi];\n      pi++;\n      path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      for (var i = 2; i < tangents.length; i++, pi++) {\n        p = points[pi];\n        t = tangents[i];\n        path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      }\n    }\n    if (quad) {\n      var lp = points[pi];\n      path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n    }\n    return path;\n  }\n  function d3_svg_lineCardinalTangents(points, tension) {\n    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n    while (++i < n) {\n      p0 = p1;\n      p1 = p2;\n      p2 = points[i];\n      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineBasis(points) {\n    if (points.length < 3) return d3_svg_lineLinear(points);\n    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    points.push(points[n - 1]);\n    while (++i <= n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    points.pop();\n    path.push(\"L\", pi);\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisOpen(points) {\n    if (points.length < 4) return d3_svg_lineLinear(points);\n    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n    while (++i < 3) {\n      pi = points[i];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n    --i;\n    while (++i < n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisClosed(points) {\n    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n    while (++i < 4) {\n      pi = points[i % n];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    --i;\n    while (++i < m) {\n      pi = points[i % n];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBundle(points, tension) {\n    var n = points.length - 1;\n    if (n) {\n      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n      while (++i <= n) {\n        p = points[i];\n        t = i / n;\n        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n      }\n    }\n    return d3_svg_lineBasis(points);\n  }\n  function d3_svg_lineDot4(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n  }\n  var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n  function d3_svg_lineBasisBezier(path, x, y) {\n    path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n  }\n  function d3_svg_lineSlope(p0, p1) {\n    return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n  }\n  function d3_svg_lineFiniteDifferences(points) {\n    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n    while (++i < j) {\n      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n    }\n    m[i] = d;\n    return m;\n  }\n  function d3_svg_lineMonotoneTangents(points) {\n    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n    while (++i < j) {\n      d = d3_svg_lineSlope(points[i], points[i + 1]);\n      if (abs(d) < ε) {\n        m[i] = m[i + 1] = 0;\n      } else {\n        a = m[i] / d;\n        b = m[i + 1] / d;\n        s = a * a + b * b;\n        if (s > 9) {\n          s = d * 3 / Math.sqrt(s);\n          m[i] = s * a;\n          m[i + 1] = s * b;\n        }\n      }\n    }\n    i = -1;\n    while (++i <= j) {\n      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n      tangents.push([ s || 0, m[i] * s || 0 ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineMonotone(points) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n  }\n  d3.svg.line.radial = function() {\n    var line = d3_svg_line(d3_svg_lineRadial);\n    line.radius = line.x, delete line.x;\n    line.angle = line.y, delete line.y;\n    return line;\n  };\n  function d3_svg_lineRadial(points) {\n    var point, i = -1, n = points.length, r, a;\n    while (++i < n) {\n      point = points[i];\n      r = point[0];\n      a = point[1] - halfπ;\n      point[0] = r * Math.cos(a);\n      point[1] = r * Math.sin(a);\n    }\n    return points;\n  }\n  function d3_svg_area(projection) {\n    var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n    function area(data) {\n      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n        return x;\n      } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n        return y;\n      } : d3_functor(y1), x, y;\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n        } else if (points0.length) {\n          segment();\n          points0 = [];\n          points1 = [];\n        }\n      }\n      if (points0.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    area.x = function(_) {\n      if (!arguments.length) return x1;\n      x0 = x1 = _;\n      return area;\n    };\n    area.x0 = function(_) {\n      if (!arguments.length) return x0;\n      x0 = _;\n      return area;\n    };\n    area.x1 = function(_) {\n      if (!arguments.length) return x1;\n      x1 = _;\n      return area;\n    };\n    area.y = function(_) {\n      if (!arguments.length) return y1;\n      y0 = y1 = _;\n      return area;\n    };\n    area.y0 = function(_) {\n      if (!arguments.length) return y0;\n      y0 = _;\n      return area;\n    };\n    area.y1 = function(_) {\n      if (!arguments.length) return y1;\n      y1 = _;\n      return area;\n    };\n    area.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return area;\n    };\n    area.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      interpolateReverse = interpolate.reverse || interpolate;\n      L = interpolate.closed ? \"M\" : \"L\";\n      return area;\n    };\n    area.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return area;\n    };\n    return area;\n  }\n  d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n  d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n  d3.svg.area = function() {\n    return d3_svg_area(d3_identity);\n  };\n  d3.svg.area.radial = function() {\n    var area = d3_svg_area(d3_svg_lineRadial);\n    area.radius = area.x, delete area.x;\n    area.innerRadius = area.x0, delete area.x0;\n    area.outerRadius = area.x1, delete area.x1;\n    area.angle = area.y, delete area.y;\n    area.startAngle = area.y0, delete area.y0;\n    area.endAngle = area.y1, delete area.y1;\n    return area;\n  };\n  d3.svg.chord = function() {\n    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n    function chord(d, i) {\n      var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n      return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n    }\n    function subgroup(self, f, d, i) {\n      var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n      return {\n        r: r,\n        a0: a0,\n        a1: a1,\n        p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n        p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n      };\n    }\n    function equals(a, b) {\n      return a.a0 == b.a0 && a.a1 == b.a1;\n    }\n    function arc(r, p, a) {\n      return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n    }\n    function curve(r0, p0, r1, p1) {\n      return \"Q 0,0 \" + p1;\n    }\n    chord.radius = function(v) {\n      if (!arguments.length) return radius;\n      radius = d3_functor(v);\n      return chord;\n    };\n    chord.source = function(v) {\n      if (!arguments.length) return source;\n      source = d3_functor(v);\n      return chord;\n    };\n    chord.target = function(v) {\n      if (!arguments.length) return target;\n      target = d3_functor(v);\n      return chord;\n    };\n    chord.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return chord;\n    };\n    chord.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return chord;\n    };\n    return chord;\n  };\n  function d3_svg_chordRadius(d) {\n    return d.radius;\n  }\n  d3.svg.diagonal = function() {\n    var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n    function diagonal(d, i) {\n      var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n        x: p0.x,\n        y: m\n      }, {\n        x: p3.x,\n        y: m\n      }, p3 ];\n      p = p.map(projection);\n      return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n    }\n    diagonal.source = function(x) {\n      if (!arguments.length) return source;\n      source = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.target = function(x) {\n      if (!arguments.length) return target;\n      target = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.projection = function(x) {\n      if (!arguments.length) return projection;\n      projection = x;\n      return diagonal;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalProjection(d) {\n    return [ d.x, d.y ];\n  }\n  d3.svg.diagonal.radial = function() {\n    var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n    diagonal.projection = function(x) {\n      return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalRadialProjection(projection) {\n    return function() {\n      var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n      return [ r * Math.cos(a), r * Math.sin(a) ];\n    };\n  }\n  d3.svg.symbol = function() {\n    var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n    function symbol(d, i) {\n      return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n    }\n    symbol.type = function(x) {\n      if (!arguments.length) return type;\n      type = d3_functor(x);\n      return symbol;\n    };\n    symbol.size = function(x) {\n      if (!arguments.length) return size;\n      size = d3_functor(x);\n      return symbol;\n    };\n    return symbol;\n  };\n  function d3_svg_symbolSize() {\n    return 64;\n  }\n  function d3_svg_symbolType() {\n    return \"circle\";\n  }\n  function d3_svg_symbolCircle(size) {\n    var r = Math.sqrt(size / π);\n    return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n  }\n  var d3_svg_symbols = d3.map({\n    circle: d3_svg_symbolCircle,\n    cross: function(size) {\n      var r = Math.sqrt(size / 5) / 2;\n      return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n    },\n    diamond: function(size) {\n      var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n      return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n    },\n    square: function(size) {\n      var r = Math.sqrt(size) / 2;\n      return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n    },\n    \"triangle-down\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n    },\n    \"triangle-up\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n    }\n  });\n  d3.svg.symbolTypes = d3_svg_symbols.keys();\n  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n  function d3_transition(groups, namespace, id) {\n    d3_subclass(groups, d3_transitionPrototype);\n    groups.namespace = namespace;\n    groups.id = id;\n    return groups;\n  }\n  var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n  d3_transitionPrototype.call = d3_selectionPrototype.call;\n  d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n  d3_transitionPrototype.node = d3_selectionPrototype.node;\n  d3_transitionPrototype.size = d3_selectionPrototype.size;\n  d3.transition = function(selection) {\n    return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();\n  };\n  d3.transition.prototype = d3_transitionPrototype;\n  d3_transitionPrototype.select = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n          subgroup.push(subnode);\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.selectAll = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          transition = node[ns][id];\n          subnodes = selector.call(node, node.__data__, i, j);\n          subgroups.push(subgroup = []);\n          for (var k = -1, o = subnodes.length; ++k < o; ) {\n            if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n            subgroup.push(subnode);\n          }\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_transition(subgroups, this.namespace, this.id);\n  };\n  d3_transitionPrototype.tween = function(name, tween) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n    return d3_selection_each(this, tween == null ? function(node) {\n      node[ns][id].tween.remove(name);\n    } : function(node) {\n      node[ns][id].tween.set(name, tween);\n    });\n  };\n  function d3_transition_tween(groups, name, value, tween) {\n    var id = groups.id, ns = groups.namespace;\n    return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n    } : (value = tween(value), function(node) {\n      node[ns][id].tween.set(name, value);\n    }));\n  }\n  d3_transitionPrototype.attr = function(nameNS, value) {\n    if (arguments.length < 2) {\n      for (value in nameNS) this.attr(value, nameNS[value]);\n      return this;\n    }\n    var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrTween(b) {\n      return b == null ? attrNull : (b += \"\", function() {\n        var a = this.getAttribute(name), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttribute(name, i(t));\n        });\n      });\n    }\n    function attrTweenNS(b) {\n      return b == null ? attrNullNS : (b += \"\", function() {\n        var a = this.getAttributeNS(name.space, name.local), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttributeNS(name.space, name.local, i(t));\n        });\n      });\n    }\n    return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.attrTween = function(nameNS, tween) {\n    var name = d3.ns.qualify(nameNS);\n    function attrTween(d, i) {\n      var f = tween.call(this, d, i, this.getAttribute(name));\n      return f && function(t) {\n        this.setAttribute(name, f(t));\n      };\n    }\n    function attrTweenNS(d, i) {\n      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n      return f && function(t) {\n        this.setAttributeNS(name.space, name.local, f(t));\n      };\n    }\n    return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.style(priority, name[priority], value);\n        return this;\n      }\n      priority = \"\";\n    }\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleString(b) {\n      return b == null ? styleNull : (b += \"\", function() {\n        var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;\n        return a !== b && (i = d3_interpolate(a, b), function(t) {\n          this.style.setProperty(name, i(t), priority);\n        });\n      });\n    }\n    return d3_transition_tween(this, \"style.\" + name, value, styleString);\n  };\n  d3_transitionPrototype.styleTween = function(name, tween, priority) {\n    if (arguments.length < 3) priority = \"\";\n    function styleTween(d, i) {\n      var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));\n      return f && function(t) {\n        this.style.setProperty(name, f(t), priority);\n      };\n    }\n    return this.tween(\"style.\" + name, styleTween);\n  };\n  d3_transitionPrototype.text = function(value) {\n    return d3_transition_tween(this, \"text\", value, d3_transition_text);\n  };\n  function d3_transition_text(b) {\n    if (b == null) b = \"\";\n    return function() {\n      this.textContent = b;\n    };\n  }\n  d3_transitionPrototype.remove = function() {\n    var ns = this.namespace;\n    return this.each(\"end.transition\", function() {\n      var p;\n      if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n    });\n  };\n  d3_transitionPrototype.ease = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].ease;\n    if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n    return d3_selection_each(this, function(node) {\n      node[ns][id].ease = value;\n    });\n  };\n  d3_transitionPrototype.delay = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].delay;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].delay = +value.call(node, node.__data__, i, j);\n    } : (value = +value, function(node) {\n      node[ns][id].delay = value;\n    }));\n  };\n  d3_transitionPrototype.duration = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].duration;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n    } : (value = Math.max(1, value), function(node) {\n      node[ns][id].duration = value;\n    }));\n  };\n  d3_transitionPrototype.each = function(type, listener) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) {\n      var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n      d3_transitionInheritId = id;\n      d3_selection_each(this, function(node, i, j) {\n        d3_transitionInherit = node[ns][id];\n        type.call(node, node.__data__, i, j);\n      });\n      d3_transitionInherit = inherit;\n      d3_transitionInheritId = inheritId;\n    } else {\n      d3_selection_each(this, function(node) {\n        var transition = node[ns][id];\n        (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n      });\n    }\n    return this;\n  };\n  d3_transitionPrototype.transition = function() {\n    var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if (node = group[i]) {\n          transition = node[ns][id0];\n          d3_transitionNode(node, i, ns, id1, {\n            time: transition.time,\n            ease: transition.ease,\n            delay: transition.delay + transition.duration,\n            duration: transition.duration\n          });\n        }\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id1);\n  };\n  function d3_transitionNamespace(name) {\n    return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n  }\n  function d3_transitionNode(node, i, namespace, id, inherit) {\n    var lock = node[namespace] || (node[namespace] = {\n      active: 0,\n      count: 0\n    }), transition = lock[id];\n    if (!transition) {\n      var time = inherit.time;\n      transition = lock[id] = {\n        tween: new d3_Map(),\n        time: time,\n        delay: inherit.delay,\n        duration: inherit.duration,\n        ease: inherit.ease\n      };\n      inherit = null;\n      ++lock.count;\n      d3.timer(function(elapsed) {\n        var d = node.__data__, delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = [];\n        timer.t = delay + time;\n        if (delay <= elapsed) return start(elapsed - delay);\n        timer.c = start;\n        function start(elapsed) {\n          if (lock.active > id) return stop(false);\n          lock.active = id;\n          transition.event && transition.event.start.call(node, d, i);\n          transition.tween.forEach(function(key, value) {\n            if (value = value.call(node, d, i)) {\n              tweened.push(value);\n            }\n          });\n          ease = transition.ease;\n          duration = transition.duration;\n          d3.timer(function() {\n            timer.c = tick(elapsed || 1) ? d3_true : tick;\n            return 1;\n          }, 0, time);\n        }\n        function tick(elapsed) {\n          if (lock.active !== id) return stop(false);\n          var t = elapsed / duration, e = ease(t), n = tweened.length;\n          while (n > 0) {\n            tweened[--n].call(node, e);\n          }\n          if (t >= 1) return stop(true);\n        }\n        function stop(end) {\n          if (transition.event) transition.event[end ? \"end\" : \"interrupt\"].call(node, d, i);\n          if (--lock.count) delete lock[id]; else delete node[namespace];\n          return 1;\n        }\n      }, 0, time);\n    }\n  }\n  d3.svg.axis = function() {\n    var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n    function axis(g) {\n      g.each(function() {\n        var g = d3.select(this);\n        var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n        var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n        var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n        d3.transition(path));\n        tickEnter.append(\"line\");\n        tickEnter.append(\"text\");\n        var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n        if (orient === \"bottom\" || orient === \"top\") {\n          tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n          text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n          pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n        } else {\n          tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n          text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n          pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n        }\n        lineEnter.attr(y2, sign * innerTickSize);\n        textEnter.attr(y1, sign * tickSpacing);\n        lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n        textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n        if (scale1.rangeBand) {\n          var x = scale1, dx = x.rangeBand() / 2;\n          scale0 = scale1 = function(d) {\n            return x(d) + dx;\n          };\n        } else if (scale0.rangeBand) {\n          scale0 = scale1;\n        } else {\n          tickExit.call(tickTransform, scale1, scale0);\n        }\n        tickEnter.call(tickTransform, scale0, scale1);\n        tickUpdate.call(tickTransform, scale1, scale1);\n      });\n    }\n    axis.scale = function(x) {\n      if (!arguments.length) return scale;\n      scale = x;\n      return axis;\n    };\n    axis.orient = function(x) {\n      if (!arguments.length) return orient;\n      orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n      return axis;\n    };\n    axis.ticks = function() {\n      if (!arguments.length) return tickArguments_;\n      tickArguments_ = arguments;\n      return axis;\n    };\n    axis.tickValues = function(x) {\n      if (!arguments.length) return tickValues;\n      tickValues = x;\n      return axis;\n    };\n    axis.tickFormat = function(x) {\n      if (!arguments.length) return tickFormat_;\n      tickFormat_ = x;\n      return axis;\n    };\n    axis.tickSize = function(x) {\n      var n = arguments.length;\n      if (!n) return innerTickSize;\n      innerTickSize = +x;\n      outerTickSize = +arguments[n - 1];\n      return axis;\n    };\n    axis.innerTickSize = function(x) {\n      if (!arguments.length) return innerTickSize;\n      innerTickSize = +x;\n      return axis;\n    };\n    axis.outerTickSize = function(x) {\n      if (!arguments.length) return outerTickSize;\n      outerTickSize = +x;\n      return axis;\n    };\n    axis.tickPadding = function(x) {\n      if (!arguments.length) return tickPadding;\n      tickPadding = +x;\n      return axis;\n    };\n    axis.tickSubdivide = function() {\n      return arguments.length && axis;\n    };\n    return axis;\n  };\n  var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n    top: 1,\n    right: 1,\n    bottom: 1,\n    left: 1\n  };\n  function d3_svg_axisX(selection, x0, x1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = x0(d);\n      return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n    });\n  }\n  function d3_svg_axisY(selection, y0, y1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = y0(d);\n      return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n    });\n  }\n  d3.svg.brush = function() {\n    var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n    function brush(g) {\n      g.each(function() {\n        var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n        var background = g.selectAll(\".background\").data([ 0 ]);\n        background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n        g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n        var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n        resize.exit().remove();\n        resize.enter().append(\"g\").attr(\"class\", function(d) {\n          return \"resize \" + d;\n        }).style(\"cursor\", function(d) {\n          return d3_svg_brushCursor[d];\n        }).append(\"rect\").attr(\"x\", function(d) {\n          return /[ew]$/.test(d) ? -3 : null;\n        }).attr(\"y\", function(d) {\n          return /^[ns]/.test(d) ? -3 : null;\n        }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n        resize.style(\"display\", brush.empty() ? \"none\" : null);\n        var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n        if (x) {\n          range = d3_scaleRange(x);\n          backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n          redrawX(gUpdate);\n        }\n        if (y) {\n          range = d3_scaleRange(y);\n          backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n          redrawY(gUpdate);\n        }\n        redraw(gUpdate);\n      });\n    }\n    brush.event = function(g) {\n      g.each(function() {\n        var event_ = event.of(this, arguments), extent1 = {\n          x: xExtent,\n          y: yExtent,\n          i: xExtentDomain,\n          j: yExtentDomain\n        }, extent0 = this.__chart__ || extent1;\n        this.__chart__ = extent1;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.brush\", function() {\n            xExtentDomain = extent0.i;\n            yExtentDomain = extent0.j;\n            xExtent = extent0.x;\n            yExtent = extent0.y;\n            event_({\n              type: \"brushstart\"\n            });\n          }).tween(\"brush:brush\", function() {\n            var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n            xExtentDomain = yExtentDomain = null;\n            return function(t) {\n              xExtent = extent1.x = xi(t);\n              yExtent = extent1.y = yi(t);\n              event_({\n                type: \"brush\",\n                mode: \"resize\"\n              });\n            };\n          }).each(\"end.brush\", function() {\n            xExtentDomain = extent1.i;\n            yExtentDomain = extent1.j;\n            event_({\n              type: \"brush\",\n              mode: \"resize\"\n            });\n            event_({\n              type: \"brushend\"\n            });\n          });\n        } else {\n          event_({\n            type: \"brushstart\"\n          });\n          event_({\n            type: \"brush\",\n            mode: \"resize\"\n          });\n          event_({\n            type: \"brushend\"\n          });\n        }\n      });\n    };\n    function redraw(g) {\n      g.selectAll(\".resize\").attr(\"transform\", function(d) {\n        return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n      });\n    }\n    function redrawX(g) {\n      g.select(\".extent\").attr(\"x\", xExtent[0]);\n      g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n    }\n    function redrawY(g) {\n      g.select(\".extent\").attr(\"y\", yExtent[0]);\n      g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n    }\n    function brushstart() {\n      var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset;\n      var w = d3.select(d3_window).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n      if (d3.event.changedTouches) {\n        w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n      } else {\n        w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n      }\n      g.interrupt().selectAll(\"*\").interrupt();\n      if (dragging) {\n        origin[0] = xExtent[0] - origin[0];\n        origin[1] = yExtent[0] - origin[1];\n      } else if (resizing) {\n        var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n        offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n        origin[0] = xExtent[ex];\n        origin[1] = yExtent[ey];\n      } else if (d3.event.altKey) center = origin.slice();\n      g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n      d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n      event_({\n        type: \"brushstart\"\n      });\n      brushmove();\n      function keydown() {\n        if (d3.event.keyCode == 32) {\n          if (!dragging) {\n            center = null;\n            origin[0] -= xExtent[1];\n            origin[1] -= yExtent[1];\n            dragging = 2;\n          }\n          d3_eventPreventDefault();\n        }\n      }\n      function keyup() {\n        if (d3.event.keyCode == 32 && dragging == 2) {\n          origin[0] += xExtent[1];\n          origin[1] += yExtent[1];\n          dragging = 0;\n          d3_eventPreventDefault();\n        }\n      }\n      function brushmove() {\n        var point = d3.mouse(target), moved = false;\n        if (offset) {\n          point[0] += offset[0];\n          point[1] += offset[1];\n        }\n        if (!dragging) {\n          if (d3.event.altKey) {\n            if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n            origin[0] = xExtent[+(point[0] < center[0])];\n            origin[1] = yExtent[+(point[1] < center[1])];\n          } else center = null;\n        }\n        if (resizingX && move1(point, x, 0)) {\n          redrawX(g);\n          moved = true;\n        }\n        if (resizingY && move1(point, y, 1)) {\n          redrawY(g);\n          moved = true;\n        }\n        if (moved) {\n          redraw(g);\n          event_({\n            type: \"brush\",\n            mode: dragging ? \"move\" : \"resize\"\n          });\n        }\n      }\n      function move1(point, scale, i) {\n        var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n        if (dragging) {\n          r0 -= position;\n          r1 -= size + position;\n        }\n        min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n        if (dragging) {\n          max = (min += position) + size;\n        } else {\n          if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n          if (position < min) {\n            max = min;\n            min = position;\n          } else {\n            max = position;\n          }\n        }\n        if (extent[0] != min || extent[1] != max) {\n          if (i) yExtentDomain = null; else xExtentDomain = null;\n          extent[0] = min;\n          extent[1] = max;\n          return true;\n        }\n      }\n      function brushend() {\n        brushmove();\n        g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n        d3.select(\"body\").style(\"cursor\", null);\n        w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n        dragRestore();\n        event_({\n          type: \"brushend\"\n        });\n      }\n    }\n    brush.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.clamp = function(z) {\n      if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n      if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n      return brush;\n    };\n    brush.extent = function(z) {\n      var x0, x1, y0, y1, t;\n      if (!arguments.length) {\n        if (x) {\n          if (xExtentDomain) {\n            x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n          } else {\n            x0 = xExtent[0], x1 = xExtent[1];\n            if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n            if (x1 < x0) t = x0, x0 = x1, x1 = t;\n          }\n        }\n        if (y) {\n          if (yExtentDomain) {\n            y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n          } else {\n            y0 = yExtent[0], y1 = yExtent[1];\n            if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n            if (y1 < y0) t = y0, y0 = y1, y1 = t;\n          }\n        }\n        return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n      }\n      if (x) {\n        x0 = z[0], x1 = z[1];\n        if (y) x0 = x0[0], x1 = x1[0];\n        xExtentDomain = [ x0, x1 ];\n        if (x.invert) x0 = x(x0), x1 = x(x1);\n        if (x1 < x0) t = x0, x0 = x1, x1 = t;\n        if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n      }\n      if (y) {\n        y0 = z[0], y1 = z[1];\n        if (x) y0 = y0[1], y1 = y1[1];\n        yExtentDomain = [ y0, y1 ];\n        if (y.invert) y0 = y(y0), y1 = y(y1);\n        if (y1 < y0) t = y0, y0 = y1, y1 = t;\n        if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n      }\n      return brush;\n    };\n    brush.clear = function() {\n      if (!brush.empty()) {\n        xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n        xExtentDomain = yExtentDomain = null;\n      }\n      return brush;\n    };\n    brush.empty = function() {\n      return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n    };\n    return d3.rebind(brush, event, \"on\");\n  };\n  var d3_svg_brushCursor = {\n    n: \"ns-resize\",\n    e: \"ew-resize\",\n    s: \"ns-resize\",\n    w: \"ew-resize\",\n    nw: \"nwse-resize\",\n    ne: \"nesw-resize\",\n    se: \"nwse-resize\",\n    sw: \"nesw-resize\"\n  };\n  var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n  var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n  var d3_time_formatUtc = d3_time_format.utc;\n  var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n  d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n  function d3_time_formatIsoNative(date) {\n    return date.toISOString();\n  }\n  d3_time_formatIsoNative.parse = function(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  };\n  d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n  d3_time.second = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 1e3) * 1e3);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n  }, function(date) {\n    return date.getSeconds();\n  });\n  d3_time.seconds = d3_time.second.range;\n  d3_time.seconds.utc = d3_time.second.utc.range;\n  d3_time.minute = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 6e4) * 6e4);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n  }, function(date) {\n    return date.getMinutes();\n  });\n  d3_time.minutes = d3_time.minute.range;\n  d3_time.minutes.utc = d3_time.minute.utc.range;\n  d3_time.hour = d3_time_interval(function(date) {\n    var timezone = date.getTimezoneOffset() / 60;\n    return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n  }, function(date) {\n    return date.getHours();\n  });\n  d3_time.hours = d3_time.hour.range;\n  d3_time.hours.utc = d3_time.hour.utc.range;\n  d3_time.month = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setDate(1);\n    return date;\n  }, function(date, offset) {\n    date.setMonth(date.getMonth() + offset);\n  }, function(date) {\n    return date.getMonth();\n  });\n  d3_time.months = d3_time.month.range;\n  d3_time.months.utc = d3_time.month.utc.range;\n  function d3_time_scale(linear, methods, format) {\n    function scale(x) {\n      return linear(x);\n    }\n    scale.invert = function(x) {\n      return d3_time_scaleDate(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n      linear.domain(x);\n      return scale;\n    };\n    function tickMethod(extent, count) {\n      var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n      return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n        return d / 31536e6;\n      }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n    }\n    scale.nice = function(interval, skip) {\n      var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n      if (method) interval = method[0], skip = method[1];\n      function skipped(date) {\n        return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n      }\n      return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n        floor: function(date) {\n          while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n          return date;\n        },\n        ceil: function(date) {\n          while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n          return date;\n        }\n      } : interval));\n    };\n    scale.ticks = function(interval, skip) {\n      var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n        range: interval\n      }, skip ];\n      if (method) interval = method[0], skip = method[1];\n      return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n    };\n    scale.tickFormat = function() {\n      return format;\n    };\n    scale.copy = function() {\n      return d3_time_scale(linear.copy(), methods, format);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_time_scaleDate(t) {\n    return new Date(t);\n  }\n  var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n  var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n  var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n    return d.getMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getDay() && d.getDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  var d3_time_scaleMilliseconds = {\n    range: function(start, stop, step) {\n      return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n    },\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  d3_time_scaleLocalMethods.year = d3_time.year;\n  d3_time.scale = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n  };\n  var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n    return [ m[0].utc, m[1] ];\n  });\n  var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n    return d.getUTCMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getUTCSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getUTCMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getUTCHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getUTCDay() && d.getUTCDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getUTCDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getUTCMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  d3_time_scaleUtcMethods.year = d3_time.year.utc;\n  d3_time.scale.utc = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n  };\n  d3.text = d3_xhrType(function(request) {\n    return request.responseText;\n  });\n  d3.json = function(url, callback) {\n    return d3_xhr(url, \"application/json\", d3_json, callback);\n  };\n  function d3_json(request) {\n    return JSON.parse(request.responseText);\n  }\n  d3.html = function(url, callback) {\n    return d3_xhr(url, \"text/html\", d3_html, callback);\n  };\n  function d3_html(request) {\n    var range = d3_document.createRange();\n    range.selectNode(d3_document.body);\n    return range.createContextualFragment(request.responseText);\n  }\n  d3.xml = d3_xhrType(function(request) {\n    return request.responseXML;\n  });\n  if (typeof define === \"function\" && define.amd) define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3;\n  this.d3 = d3;\n}();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/datatables/json/scroller-demo.json",
    "content": "{ \"aaData\": [\n\t[ \"1\", \"Armand\", \"Warren\", \"56045\", \"Taiwan, Province of China\" ],\n\t[ \"2\", \"Xenos\", \"Salas\", \"71090\", \"Liberia\" ],\n\t[ \"3\", \"Virginia\", \"Whitaker\", \"62723\", \"Nicaragua\" ],\n\t[ \"4\", \"Kato\", \"Patrick\", \"97662\", \"Palau\" ],\n\t[ \"5\", \"Penelope\", \"Hensley\", \"76634\", \"Greenland\" ],\n\t[ \"6\", \"Georgia\", \"Erickson\", \"81358\", \"Bolivia\" ],\n\t[ \"7\", \"Shad\", \"Pena\", \"20600\", \"Palestinian Territory, Occupied\" ],\n\t[ \"8\", \"Tanisha\", \"Humphrey\", \"93371\", \"Kenya\" ],\n\t[ \"9\", \"Claire\", \"Espinoza\", \"I8S 2S8\", \"Panama\" ],\n\t[ \"10\", \"Raya\", \"Tucker\", \"O8D 8W7\", \"Botswana\" ],\n\t[ \"11\", \"Otto\", \"Briggs\", \"57590\", \"Anguilla\" ],\n\t[ \"12\", \"Logan\", \"Burt\", \"53041\", \"Venezuela\" ],\n\t[ \"13\", \"Cooper\", \"Pennington\", \"36994\", \"France\" ],\n\t[ \"14\", \"Kristen\", \"Peterson\", \"52917\", \"Sao Tome and Principe\" ],\n\t[ \"15\", \"Jordan\", \"Velasquez\", \"08884\", \"Switzerland\" ],\n\t[ \"16\", \"Zelda\", \"Freeman\", \"F9H 1J9\", \"Holy See (Vatican City State)\" ],\n\t[ \"17\", \"Mary\", \"Pacheco\", \"A7Y 6X9\", \"Niger\" ],\n\t[ \"18\", \"Tiger\", \"Robles\", \"44533\", \"Malaysia\" ],\n\t[ \"19\", \"Zelenia\", \"Buckner\", \"Q8N 6E5\", \"Malawi\" ],\n\t[ \"20\", \"Coby\", \"Johnston\", \"N6I 2O9\", \"Rwanda\" ],\n\t[ \"21\", \"Gillian\", \"Strickland\", \"12258\", \"Cook Islands\" ],\n\t[ \"22\", \"Alfreda\", \"Mcbride\", \"K5A 3B6\", \"Nigeria\" ],\n\t[ \"23\", \"Laith\", \"Ford\", \"19072\", \"Czech Republic\" ],\n\t[ \"24\", \"Autumn\", \"Barton\", \"U9D 9F4\", \"Angola\" ],\n\t[ \"25\", \"Nadine\", \"Britt\", \"G4U 8L0\", \"Liechtenstein\" ],\n\t[ \"26\", \"Xaviera\", \"Hart\", \"T1N 7D2\", \"Mali\" ],\n\t[ \"27\", \"Neil\", \"Page\", \"T3E 9F4\", \"Korea\" ],\n\t[ \"28\", \"Rose\", \"French\", \"B7T 8M2\", \"French Polynesia\" ],\n\t[ \"29\", \"Alyssa\", \"Poole\", \"S1L 2T5\", \"Yemen\" ],\n\t[ \"30\", \"Chantale\", \"Lynch\", \"97316\", \"United States\" ],\n\t[ \"31\", \"Jermaine\", \"Dawson\", \"A3H 7A1\", \"American Samoa\" ],\n\t[ \"32\", \"Ann\", \"Giles\", \"54258\", \"Korea\" ],\n\t[ \"33\", \"Jerry\", \"Carr\", \"04901\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"34\", \"Lionel\", \"Hooper\", \"67970\", \"Bahrain\" ],\n\t[ \"35\", \"Alyssa\", \"Hewitt\", \"R3K 2V8\", \"Paraguay\" ],\n\t[ \"36\", \"Lisandra\", \"Sheppard\", \"71886\", \"Seychelles\" ],\n\t[ \"37\", \"Kylan\", \"Harrison\", \"96763\", \"Italy\" ],\n\t[ \"38\", \"Kaitlin\", \"Montgomery\", \"V5K 5U8\", \"Niger\" ],\n\t[ \"39\", \"Heidi\", \"Boyd\", \"B3C 8M9\", \"Papua New Guinea\" ],\n\t[ \"40\", \"Rinah\", \"Case\", \"W7M 5K1\", \"Mali\" ],\n\t[ \"41\", \"Thaddeus\", \"Maynard\", \"E4V 6W6\", \"Egypt\" ],\n\t[ \"42\", \"Lacota\", \"Ray\", \"T3J 8D8\", \"United Kingdom\" ],\n\t[ \"43\", \"Olympia\", \"Cortez\", \"F8C 7I5\", \"Palau\" ],\n\t[ \"44\", \"Wendy\", \"Rojas\", \"N8T 4K6\", \"Cook Islands\" ],\n\t[ \"45\", \"Arden\", \"Kelley\", \"V9N 2T6\", \"India\" ],\n\t[ \"46\", \"Colorado\", \"Lindsey\", \"96703\", \"Chad\" ],\n\t[ \"47\", \"Alika\", \"Weaver\", \"F6V 1I1\", \"Bulgaria\" ],\n\t[ \"48\", \"Phoebe\", \"Mack\", \"E4B 1X2\", \"El Salvador\" ],\n\t[ \"49\", \"Sybill\", \"Bridges\", \"Z2G 6A2\", \"Somalia\" ],\n\t[ \"50\", \"Trevor\", \"Larsen\", \"K1R 3B9\", \"United Arab Emirates\" ],\n\t[ \"51\", \"Maya\", \"Battle\", \"70881\", \"Australia\" ],\n\t[ \"52\", \"Charity\", \"Walton\", \"I4I 5R9\", \"Swaziland\" ],\n\t[ \"53\", \"Lane\", \"Sloan\", \"79076\", \"Nauru\" ],\n\t[ \"54\", \"Christopher\", \"Watson\", \"35116\", \"Suriname\" ],\n\t[ \"55\", \"Clementine\", \"Shelton\", \"98232\", \"Venezuela\" ],\n\t[ \"56\", \"Basil\", \"Hood\", \"J9I 1R2\", \"Tonga\" ],\n\t[ \"57\", \"Meghan\", \"Pacheco\", \"H5Z 6B1\", \"Dominican Republic\" ],\n\t[ \"58\", \"Brennan\", \"Potts\", \"51743\", \"Turkey\" ],\n\t[ \"59\", \"Lawrence\", \"Duran\", \"63266\", \"Uruguay\" ],\n\t[ \"60\", \"Ina\", \"Head\", \"S8P 9J5\", \"Romania\" ],\n\t[ \"61\", \"Castor\", \"Jacobson\", \"C9F 6C9\", \"Albania\" ],\n\t[ \"62\", \"Daquan\", \"Holden\", \"38571\", \"Ireland\" ],\n\t[ \"63\", \"Donna\", \"Valencia\", \"J7B 3I0\", \"Portugal\" ],\n\t[ \"64\", \"Kessie\", \"Phelps\", \"61063\", \"Georgia\" ],\n\t[ \"65\", \"Dillon\", \"Garcia\", \"13652\", \"Holy See (Vatican City State)\" ],\n\t[ \"66\", \"Russell\", \"Sweeney\", \"T8P 2O6\", \"Saint Kitts and Nevis\" ],\n\t[ \"67\", \"Zelda\", \"Berg\", \"84946\", \"Afghanistan\" ],\n\t[ \"68\", \"Dexter\", \"Mann\", \"73596\", \"Thailand\" ],\n\t[ \"69\", \"Maisie\", \"Miller\", \"X3M 6C1\", \"Seychelles\" ],\n\t[ \"70\", \"Lynn\", \"Mitchell\", \"N5B 3Z9\", \"Wallis and Futuna\" ],\n\t[ \"71\", \"Gay\", \"Medina\", \"66692\", \"Germany\" ],\n\t[ \"72\", \"Olga\", \"Clark\", \"M6B 7B6\", \"Kuwait\" ],\n\t[ \"73\", \"Brianna\", \"Obrien\", \"Z6Z 5R3\", \"Bahrain\" ],\n\t[ \"74\", \"Daria\", \"Byers\", \"R9T 4N7\", \"Ghana\" ],\n\t[ \"75\", \"Chiquita\", \"Barker\", \"28435\", \"Ireland\" ],\n\t[ \"76\", \"Gray\", \"Salazar\", \"58618\", \"Chile\" ],\n\t[ \"77\", \"Delilah\", \"Kirby\", \"42811\", \"Oman\" ],\n\t[ \"78\", \"Xanthus\", \"Holland\", \"B8Q 9C4\", \"Antigua and Barbuda\" ],\n\t[ \"79\", \"Reuben\", \"Brennan\", \"44693\", \"Czech Republic\" ],\n\t[ \"80\", \"Alden\", \"Long\", \"94236\", \"Slovakia\" ],\n\t[ \"81\", \"Blythe\", \"Bender\", \"04812\", \"Guam\" ],\n\t[ \"82\", \"Aileen\", \"Burgess\", \"47942\", \"Djibouti\" ],\n\t[ \"83\", \"Zeus\", \"Craig\", \"43002\", \"Nicaragua\" ],\n\t[ \"84\", \"Jade\", \"Garza\", \"F2X 8F3\", \"New Zealand\" ],\n\t[ \"85\", \"Noah\", \"Barrera\", \"K9C 8U0\", \"Malawi\" ],\n\t[ \"86\", \"Quyn\", \"Robertson\", \"H3X 6J9\", \"Bosnia and Herzegovina\" ],\n\t[ \"87\", \"Serena\", \"Cabrera\", \"83671\", \"Slovenia\" ],\n\t[ \"88\", \"Charity\", \"Chase\", \"T9Q 7C4\", \"Solomon Islands\" ],\n\t[ \"89\", \"Athena\", \"Grimes\", \"62801\", \"Aruba\" ],\n\t[ \"90\", \"Mallory\", \"Middleton\", \"D2V 1M5\", \"Italy\" ],\n\t[ \"91\", \"Xenos\", \"Jones\", \"46642\", \"Singapore\" ],\n\t[ \"92\", \"Tate\", \"Gregory\", \"66538\", \"Zimbabwe\" ],\n\t[ \"93\", \"Blaze\", \"Taylor\", \"70282\", \"Paraguay\" ],\n\t[ \"94\", \"Jena\", \"Duncan\", \"63057\", \"Cambodia\" ],\n\t[ \"95\", \"Thaddeus\", \"Chase\", \"66762\", \"Netherlands Antilles\" ],\n\t[ \"96\", \"Guinevere\", \"Mcgee\", \"O9G 4S2\", \"Lebanon\" ],\n\t[ \"97\", \"Kermit\", \"Ramsey\", \"41214\", \"Dominican Republic\" ],\n\t[ \"98\", \"Josephine\", \"Gallagher\", \"04960\", \"French Southern Territories\" ],\n\t[ \"99\", \"Amela\", \"Morales\", \"M9I 1X5\", \"Sudan\" ],\n\t[ \"100\", \"Rina\", \"Yates\", \"G3T 7M9\", \"Dominica\" ],\n\t[ \"101\", \"Orson\", \"Norris\", \"21660\", \"Sierra Leone\" ],\n\t[ \"102\", \"Graiden\", \"Silva\", \"98191\", \"Saint Lucia\" ],\n\t[ \"103\", \"Amaya\", \"Hood\", \"45779\", \"India\" ],\n\t[ \"104\", \"Fatima\", \"Fitzpatrick\", \"I4R 9Q8\", \"Viet Nam\" ],\n\t[ \"105\", \"Judith\", \"Stokes\", \"97596\", \"Sudan\" ],\n\t[ \"106\", \"Jared\", \"Vaughn\", \"75521\", \"Benin\" ],\n\t[ \"107\", \"Mira\", \"Morgan\", \"35169\", \"Martinique\" ],\n\t[ \"108\", \"Walter\", \"Perkins\", \"28618\", \"San Marino\" ],\n\t[ \"109\", \"Megan\", \"Maxwell\", \"K6X 3J4\", \"Oman\" ],\n\t[ \"110\", \"Christine\", \"Christensen\", \"M7S 8G8\", \"Netherlands Antilles\" ],\n\t[ \"111\", \"Tanner\", \"Guerra\", \"S3K 6Y5\", \"Finland\" ],\n\t[ \"112\", \"Meghan\", \"Rowland\", \"K7U 3A1\", \"Rwanda\" ],\n\t[ \"113\", \"Patrick\", \"Mitchell\", \"V3F 5C4\", \"Oman\" ],\n\t[ \"114\", \"Jackson\", \"Sanders\", \"83229\", \"Greenland\" ],\n\t[ \"115\", \"Omar\", \"Savage\", \"14082\", \"Korea\" ],\n\t[ \"116\", \"Ulla\", \"Larsen\", \"Q2P 4L8\", \"French Southern Territories\" ],\n\t[ \"117\", \"Hop\", \"Gates\", \"D9G 9J4\", \"Poland\" ],\n\t[ \"118\", \"Astra\", \"Mendoza\", \"R3D 2H9\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"119\", \"Denise\", \"Cardenas\", \"73138\", \"Sao Tome and Principe\" ],\n\t[ \"120\", \"Melodie\", \"Roberts\", \"L1G 4H2\", \"India\" ],\n\t[ \"121\", \"Cedric\", \"Joseph\", \"M4V 8O9\", \"Korea, Republic of\" ],\n\t[ \"122\", \"Linda\", \"Horn\", \"24465\", \"Bosnia and Herzegovina\" ],\n\t[ \"123\", \"Mary\", \"Lyons\", \"22324\", \"Norfolk Island\" ],\n\t[ \"124\", \"Ciara\", \"Mcknight\", \"30784\", \"Anguilla\" ],\n\t[ \"125\", \"Vaughan\", \"Santiago\", \"65037\", \"Guyana\" ],\n\t[ \"126\", \"Lamar\", \"Shepherd\", \"58040\", \"France\" ],\n\t[ \"127\", \"Xavier\", \"Webster\", \"68321\", \"Afghanistan\" ],\n\t[ \"128\", \"Ainsley\", \"Banks\", \"46902\", \"Pakistan\" ],\n\t[ \"129\", \"Alika\", \"Love\", \"L5O 4B3\", \"Iran, Islamic Republic of\" ],\n\t[ \"130\", \"Maite\", \"Dickson\", \"37405\", \"Saint Kitts and Nevis\" ],\n\t[ \"131\", \"Kimberley\", \"Morrow\", \"F7C 7J0\", \"Lebanon\" ],\n\t[ \"132\", \"Eugenia\", \"Stafford\", \"36282\", \"Nicaragua\" ],\n\t[ \"133\", \"Mira\", \"Gill\", \"K1T 8U1\", \"Uruguay\" ],\n\t[ \"134\", \"Herman\", \"Francis\", \"C2G 8G9\", \"Northern Mariana Islands\" ],\n\t[ \"135\", \"Veronica\", \"Peters\", \"74146\", \"Cook Islands\" ],\n\t[ \"136\", \"Axel\", \"Cochran\", \"32240\", \"Central African Republic\" ],\n\t[ \"137\", \"Edan\", \"Howe\", \"51862\", \"Mali\" ],\n\t[ \"138\", \"Ignacia\", \"Bruce\", \"Q8T 5Q1\", \"Sao Tome and Principe\" ],\n\t[ \"139\", \"Jana\", \"Mcguire\", \"89412\", \"Czech Republic\" ],\n\t[ \"140\", \"Alice\", \"Underwood\", \"74535\", \"Slovakia\" ],\n\t[ \"141\", \"Tobias\", \"Kent\", \"33601\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"142\", \"Nasim\", \"Coleman\", \"19377\", \"United States Minor Outlying Islands\" ],\n\t[ \"143\", \"Geoffrey\", \"Byers\", \"85753\", \"Netherlands Antilles\" ],\n\t[ \"144\", \"Odette\", \"Sawyer\", \"55418\", \"Tunisia\" ],\n\t[ \"145\", \"Chaney\", \"Flowers\", \"F4W 7O7\", \"Maldives\" ],\n\t[ \"146\", \"Shelly\", \"Glover\", \"M5Y 4A6\", \"Taiwan, Province of China\" ],\n\t[ \"147\", \"Uriel\", \"Thornton\", \"Z6Q 5B7\", \"Myanmar\" ],\n\t[ \"148\", \"Clio\", \"Nicholson\", \"Y8S 7P2\", \"Martinique\" ],\n\t[ \"149\", \"Jana\", \"Foley\", \"B1O 9J5\", \"United Arab Emirates\" ],\n\t[ \"150\", \"Fulton\", \"Rasmussen\", \"39194\", \"Solomon Islands\" ],\n\t[ \"151\", \"Lisandra\", \"Boyd\", \"J2Z 2V7\", \"French Guiana\" ],\n\t[ \"152\", \"Brennan\", \"Lopez\", \"Q4M 7Y4\", \"Burkina Faso\" ],\n\t[ \"153\", \"Martha\", \"Washington\", \"M7S 4U6\", \"Iran, Islamic Republic of\" ],\n\t[ \"154\", \"Dara\", \"Ramos\", \"07799\", \"Portugal\" ],\n\t[ \"155\", \"Virginia\", \"Harris\", \"01246\", \"Bermuda\" ],\n\t[ \"156\", \"Maryam\", \"Patrick\", \"Y3J 4Y0\", \"Rwanda\" ],\n\t[ \"157\", \"Shana\", \"Mullen\", \"61169\", \"Togo\" ],\n\t[ \"158\", \"Rowan\", \"Hahn\", \"K6D 5T4\", \"Guinea-bissau\" ],\n\t[ \"159\", \"Hermione\", \"Shepherd\", \"M4F 7T6\", \"Ireland\" ],\n\t[ \"160\", \"Jada\", \"Bright\", \"P1Z 7E6\", \"French Southern Territories\" ],\n\t[ \"161\", \"Scarlet\", \"Bray\", \"57161\", \"Austria\" ],\n\t[ \"162\", \"Haviva\", \"Conner\", \"M4T 8O4\", \"Bermuda\" ],\n\t[ \"163\", \"Myra\", \"Briggs\", \"Q4B 6L7\", \"Kenya\" ],\n\t[ \"164\", \"Hall\", \"Floyd\", \"40411\", \"Bangladesh\" ],\n\t[ \"165\", \"Kyle\", \"Marquez\", \"J4T 7C6\", \"Djibouti\" ],\n\t[ \"166\", \"Claudia\", \"Long\", \"R7B 1T6\", \"Macedonia\" ],\n\t[ \"167\", \"Hasad\", \"Clemons\", \"94009\", \"Bosnia and Herzegovina\" ],\n\t[ \"168\", \"Kameko\", \"Reeves\", \"G4V 6D5\", \"Singapore\" ],\n\t[ \"169\", \"Angelica\", \"Bailey\", \"Z3Y 7I0\", \"Micronesia\" ],\n\t[ \"170\", \"Shelley\", \"Jennings\", \"O3A 9H0\", \"Christmas Island\" ],\n\t[ \"171\", \"Rafael\", \"Randolph\", \"Y4L 8B5\", \"Germany\" ],\n\t[ \"172\", \"Winter\", \"Kinney\", \"A3K 9A7\", \"Saint Lucia\" ],\n\t[ \"173\", \"Brian\", \"Larsen\", \"53752\", \"Comoros\" ],\n\t[ \"174\", \"Melvin\", \"Cooper\", \"72416\", \"Czech Republic\" ],\n\t[ \"175\", \"Gil\", \"Valencia\", \"95798\", \"Uganda\" ],\n\t[ \"176\", \"Uma\", \"Cummings\", \"84649\", \"Jordan\" ],\n\t[ \"177\", \"Micah\", \"Shannon\", \"H9L 8R6\", \"Ghana\" ],\n\t[ \"178\", \"Ahmed\", \"Weiss\", \"05291\", \"American Samoa\" ],\n\t[ \"179\", \"Hop\", \"Foster\", \"W9C 7J7\", \"Panama\" ],\n\t[ \"180\", \"Todd\", \"Barnett\", \"T9R 7J4\", \"Seychelles\" ],\n\t[ \"181\", \"Byron\", \"Meyers\", \"J4G 9P2\", \"Congo\" ],\n\t[ \"182\", \"Hadassah\", \"Barnett\", \"U1A 8V3\", \"Paraguay\" ],\n\t[ \"183\", \"Hermione\", \"Luna\", \"L4G 2E5\", \"New Zealand\" ],\n\t[ \"184\", \"Marsden\", \"Alvarado\", \"U1V 1Y4\", \"Aruba\" ],\n\t[ \"185\", \"Britanni\", \"Gregory\", \"C8O 2T4\", \"Kazakhstan\" ],\n\t[ \"186\", \"Brenda\", \"Oneil\", \"R9Q 9B7\", \"Gibraltar\" ],\n\t[ \"187\", \"Reuben\", \"Hopkins\", \"C2D 9D0\", \"Bhutan\" ],\n\t[ \"188\", \"Sonia\", \"Sandoval\", \"Y2G 5I0\", \"Guatemala\" ],\n\t[ \"189\", \"Yasir\", \"Holcomb\", \"A1H 6Y3\", \"Angola\" ],\n\t[ \"190\", \"Aristotle\", \"Rosa\", \"51870\", \"Indonesia\" ],\n\t[ \"191\", \"Uriah\", \"Blair\", \"X8K 1B9\", \"Suriname\" ],\n\t[ \"192\", \"Vaughan\", \"Sharp\", \"L2F 5N8\", \"Faroe Islands\" ],\n\t[ \"193\", \"Cooper\", \"Beard\", \"80399\", \"United States Minor Outlying Islands\" ],\n\t[ \"194\", \"Riley\", \"Greene\", \"44728\", \"Russian Federation\" ],\n\t[ \"195\", \"Rashad\", \"Flowers\", \"L6N 8U7\", \"Mongolia\" ],\n\t[ \"196\", \"Yvonne\", \"Wilson\", \"18599\", \"Svalbard and Jan Mayen\" ],\n\t[ \"197\", \"Martena\", \"Ayers\", \"A8Z 5F7\", \"Oman\" ],\n\t[ \"198\", \"Eagan\", \"Cline\", \"T9P 4L4\", \"Solomon Islands\" ],\n\t[ \"199\", \"Dawn\", \"Carrillo\", \"T6O 6E5\", \"Malawi\" ],\n\t[ \"200\", \"Ali\", \"Singleton\", \"G6F 3B4\", \"Italy\" ],\n\t[ \"201\", \"Christopher\", \"Beach\", \"01655\", \"Palau\" ],\n\t[ \"202\", \"Emma\", \"Cummings\", \"W1B 4R6\", \"Dominica\" ],\n\t[ \"203\", \"Ishmael\", \"Gray\", \"76928\", \"Egypt\" ],\n\t[ \"204\", \"Megan\", \"Hines\", \"F7X 2X5\", \"New Zealand\" ],\n\t[ \"205\", \"Emmanuel\", \"Steele\", \"09729\", \"Netherlands\" ],\n\t[ \"206\", \"Alea\", \"Burris\", \"08485\", \"Guatemala\" ],\n\t[ \"207\", \"Martina\", \"Todd\", \"46863\", \"Christmas Island\" ],\n\t[ \"208\", \"Len\", \"Valentine\", \"S6Z 5S8\", \"Slovenia\" ],\n\t[ \"209\", \"Jorden\", \"Salazar\", \"U4D 8H6\", \"Austria\" ],\n\t[ \"210\", \"Yvette\", \"Bradford\", \"17275\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"211\", \"Elvis\", \"Mcmahon\", \"27586\", \"Marshall Islands\" ],\n\t[ \"212\", \"Gray\", \"Bonner\", \"N4V 3U9\", \"Moldova\" ],\n\t[ \"213\", \"Yoshi\", \"Singleton\", \"86603\", \"United Kingdom\" ],\n\t[ \"214\", \"Amena\", \"Burks\", \"93820\", \"Reunion\" ],\n\t[ \"215\", \"Ocean\", \"Maldonado\", \"72026\", \"Ireland\" ],\n\t[ \"216\", \"Allen\", \"Foley\", \"75363\", \"Kiribati\" ],\n\t[ \"217\", \"Duncan\", \"Jimenez\", \"H3H 3G6\", \"Oman\" ],\n\t[ \"218\", \"Ira\", \"Maxwell\", \"53136\", \"French Polynesia\" ],\n\t[ \"219\", \"Astra\", \"Moon\", \"D7W 8G2\", \"Dominican Republic\" ],\n\t[ \"220\", \"Orson\", \"Myers\", \"06049\", \"Mali\" ],\n\t[ \"221\", \"Brandon\", \"Estes\", \"D2B 7P2\", \"Kenya\" ],\n\t[ \"222\", \"Halee\", \"Luna\", \"54733\", \"Moldova\" ],\n\t[ \"223\", \"Jillian\", \"Gonzalez\", \"E8W 3L9\", \"Ecuador\" ],\n\t[ \"224\", \"Julie\", \"Acosta\", \"X7M 1T2\", \"Equatorial Guinea\" ],\n\t[ \"225\", \"Quemby\", \"Foster\", \"48596\", \"Eritrea\" ],\n\t[ \"226\", \"Erich\", \"Chavez\", \"W4P 7G8\", \"Mayotte\" ],\n\t[ \"227\", \"Roary\", \"Mcknight\", \"K9K 2K4\", \"Chile\" ],\n\t[ \"228\", \"Mufutau\", \"Henderson\", \"81377\", \"Mayotte\" ],\n\t[ \"229\", \"Herman\", \"Ferguson\", \"69405\", \"Japan\" ],\n\t[ \"230\", \"Abdul\", \"Franks\", \"L1V 8X2\", \"Portugal\" ],\n\t[ \"231\", \"Dominic\", \"Logan\", \"98770\", \"Saint Lucia\" ],\n\t[ \"232\", \"Isadora\", \"Solis\", \"Y3A 6H5\", \"Portugal\" ],\n\t[ \"233\", \"Lester\", \"Davis\", \"30339\", \"British Indian Ocean Territory\" ],\n\t[ \"234\", \"Joel\", \"Rojas\", \"N8E 5T9\", \"Bahrain\" ],\n\t[ \"235\", \"Quinlan\", \"Carroll\", \"55785\", \"Australia\" ],\n\t[ \"236\", \"Guinevere\", \"Pickett\", \"A7Y 3V3\", \"Netherlands Antilles\" ],\n\t[ \"237\", \"Nita\", \"Hopkins\", \"88370\", \"Albania\" ],\n\t[ \"238\", \"Hayley\", \"Buckley\", \"F1V 7P5\", \"Togo\" ],\n\t[ \"239\", \"Colorado\", \"Reyes\", \"18798\", \"Congo\" ],\n\t[ \"240\", \"Tashya\", \"Bartlett\", \"48537\", \"Sierra Leone\" ],\n\t[ \"241\", \"Isabella\", \"Keith\", \"48878\", \"Kiribati\" ],\n\t[ \"242\", \"Jessica\", \"Noble\", \"D6C 9T9\", \"Svalbard and Jan Mayen\" ],\n\t[ \"243\", \"Cairo\", \"Edwards\", \"40598\", \"Nepal\" ],\n\t[ \"244\", \"Camille\", \"Bradley\", \"I4U 8F6\", \"Fiji\" ],\n\t[ \"245\", \"Quin\", \"Mcgee\", \"O5D 2P0\", \"Poland\" ],\n\t[ \"246\", \"Rina\", \"Guzman\", \"44940\", \"Bahrain\" ],\n\t[ \"247\", \"Glenna\", \"Kirkland\", \"Z1L 4W2\", \"San Marino\" ],\n\t[ \"248\", \"Tarik\", \"Todd\", \"77228\", \"Turks and Caicos Islands\" ],\n\t[ \"249\", \"Yardley\", \"Burris\", \"M6U 9D7\", \"New Caledonia\" ],\n\t[ \"250\", \"Hashim\", \"Casey\", \"17722\", \"Lesotho\" ],\n\t[ \"251\", \"Maggie\", \"Raymond\", \"62540\", \"Uganda\" ],\n\t[ \"252\", \"Christian\", \"Mcdonald\", \"R8K 2M1\", \"United Arab Emirates\" ],\n\t[ \"253\", \"Colt\", \"Cobb\", \"75393\", \"Moldova\" ],\n\t[ \"254\", \"Aline\", \"Graves\", \"I1C 9I6\", \"Holy See (Vatican City State)\" ],\n\t[ \"255\", \"Farrah\", \"Cannon\", \"H5W 2Y0\", \"Bhutan\" ],\n\t[ \"256\", \"Wynne\", \"Ayers\", \"B6X 6Y8\", \"Western Sahara\" ],\n\t[ \"257\", \"Teegan\", \"Avery\", \"33643\", \"San Marino\" ],\n\t[ \"258\", \"Shana\", \"Sloan\", \"K9P 9V7\", \"Gabon\" ],\n\t[ \"259\", \"Britanney\", \"Cook\", \"Y5D 6K7\", \"Romania\" ],\n\t[ \"260\", \"Kuame\", \"Schroeder\", \"12859\", \"Syrian Arab Republic\" ],\n\t[ \"261\", \"Valentine\", \"Joseph\", \"P2S 6T6\", \"Mayotte\" ],\n\t[ \"262\", \"Joelle\", \"Keller\", \"U6F 3T7\", \"Fiji\" ],\n\t[ \"263\", \"Elaine\", \"Hickman\", \"28056\", \"Tuvalu\" ],\n\t[ \"264\", \"Ivor\", \"Malone\", \"H2Z 5X5\", \"Virgin Islands, British\" ],\n\t[ \"265\", \"Maris\", \"Jefferson\", \"12474\", \"Czech Republic\" ],\n\t[ \"266\", \"Josephine\", \"Zimmerman\", \"Z5J 2I4\", \"Angola\" ],\n\t[ \"267\", \"Baker\", \"Wooten\", \"X4K 2L8\", \"Austria\" ],\n\t[ \"268\", \"Alyssa\", \"Mitchell\", \"97712\", \"Antarctica\" ],\n\t[ \"269\", \"Carlos\", \"Pearson\", \"85838\", \"Gambia\" ],\n\t[ \"270\", \"Luke\", \"Richardson\", \"73867\", \"Christmas Island\" ],\n\t[ \"271\", \"Davis\", \"Gardner\", \"U2E 4D9\", \"Chile\" ],\n\t[ \"272\", \"Thomas\", \"Conner\", \"92487\", \"Mozambique\" ],\n\t[ \"273\", \"Kieran\", \"Baird\", \"X9G 6G1\", \"Iceland\" ],\n\t[ \"274\", \"Cheyenne\", \"Morris\", \"F5V 4S2\", \"Greece\" ],\n\t[ \"275\", \"Hillary\", \"Reeves\", \"89804\", \"Slovakia\" ],\n\t[ \"276\", \"Ryder\", \"Long\", \"32725\", \"New Caledonia\" ],\n\t[ \"277\", \"Ariel\", \"Colon\", \"50675\", \"Estonia\" ],\n\t[ \"278\", \"Vanna\", \"Hess\", \"79057\", \"Saudi Arabia\" ],\n\t[ \"279\", \"Hayley\", \"Cherry\", \"B5E 9X4\", \"United States Minor Outlying Islands\" ],\n\t[ \"280\", \"Knox\", \"Blair\", \"75626\", \"Central African Republic\" ],\n\t[ \"281\", \"Astra\", \"Mcdaniel\", \"24493\", \"Bermuda\" ],\n\t[ \"282\", \"Teegan\", \"Ford\", \"A8U 1K9\", \"Iran, Islamic Republic of\" ],\n\t[ \"283\", \"Harrison\", \"Jackson\", \"43519\", \"Marshall Islands\" ],\n\t[ \"284\", \"Melyssa\", \"Lawson\", \"O7E 8E6\", \"Belize\" ],\n\t[ \"285\", \"Shaine\", \"Francis\", \"Q5K 5I4\", \"India\" ],\n\t[ \"286\", \"August\", \"Reed\", \"S9R 1O8\", \"Ghana\" ],\n\t[ \"287\", \"Aphrodite\", \"Zimmerman\", \"28336\", \"Lesotho\" ],\n\t[ \"288\", \"Declan\", \"Walters\", \"08662\", \"Rwanda\" ],\n\t[ \"289\", \"Brody\", \"Pate\", \"G2G 9D9\", \"Serbia and Montenegro\" ],\n\t[ \"290\", \"Bradley\", \"Odom\", \"L2R 6Z9\", \"Jordan\" ],\n\t[ \"291\", \"Phillip\", \"Cleveland\", \"E4D 1B7\", \"Paraguay\" ],\n\t[ \"292\", \"Silas\", \"Wiggins\", \"F9F 5X3\", \"Bahrain\" ],\n\t[ \"293\", \"Keely\", \"Donaldson\", \"B5H 7F2\", \"Vanuatu\" ],\n\t[ \"294\", \"Hammett\", \"Lancaster\", \"H2P 4E6\", \"Svalbard and Jan Mayen\" ],\n\t[ \"295\", \"Kiara\", \"Clarke\", \"50885\", \"Thailand\" ],\n\t[ \"296\", \"Ayanna\", \"Wiley\", \"20773\", \"Morocco\" ],\n\t[ \"297\", \"Tashya\", \"Stanley\", \"F5J 5R9\", \"New Caledonia\" ],\n\t[ \"298\", \"Margaret\", \"Barker\", \"J5A 9N8\", \"Marshall Islands\" ],\n\t[ \"299\", \"Xandra\", \"English\", \"92299\", \"Korea, Republic of\" ],\n\t[ \"300\", \"Jane\", \"Brock\", \"86140\", \"Yemen\" ],\n\t[ \"301\", \"Lunea\", \"Garrett\", \"96730\", \"New Caledonia\" ],\n\t[ \"302\", \"Slade\", \"Everett\", \"16105\", \"Malawi\" ],\n\t[ \"303\", \"Scott\", \"Booker\", \"G8V 2R4\", \"Macedonia\" ],\n\t[ \"304\", \"Candice\", \"Decker\", \"E5R 2D4\", \"China\" ],\n\t[ \"305\", \"Armando\", \"Bridges\", \"87959\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"306\", \"Clayton\", \"Whitley\", \"Q6O 4M7\", \"British Indian Ocean Territory\" ],\n\t[ \"307\", \"Driscoll\", \"Duncan\", \"M2J 9V5\", \"Argentina\" ],\n\t[ \"308\", \"Devin\", \"Stafford\", \"L8F 2V7\", \"Svalbard and Jan Mayen\" ],\n\t[ \"309\", \"Bell\", \"York\", \"E5B 7X5\", \"Lebanon\" ],\n\t[ \"310\", \"Haley\", \"Becker\", \"19759\", \"Bhutan\" ],\n\t[ \"311\", \"Chava\", \"Santiago\", \"04396\", \"Israel\" ],\n\t[ \"312\", \"David\", \"Mccall\", \"62087\", \"Norfolk Island\" ],\n\t[ \"313\", \"Clinton\", \"Jacobson\", \"06168\", \"Guam\" ],\n\t[ \"314\", \"Melvin\", \"Kaufman\", \"C4E 9N6\", \"Gambia\" ],\n\t[ \"315\", \"Dai\", \"Shepherd\", \"37490\", \"Saudi Arabia\" ],\n\t[ \"316\", \"Zahir\", \"Chase\", \"44340\", \"Turkey\" ],\n\t[ \"317\", \"Leilani\", \"Parrish\", \"62576\", \"Cocos (Keeling) Islands\" ],\n\t[ \"318\", \"Oleg\", \"Wilkins\", \"Z7S 8Z4\", \"Latvia\" ],\n\t[ \"319\", \"Pearl\", \"Pena\", \"82526\", \"Saudi Arabia\" ],\n\t[ \"320\", \"Kelly\", \"Moody\", \"W7U 5Y3\", \"Burundi\" ],\n\t[ \"321\", \"Marcia\", \"Kennedy\", \"85952\", \"Panama\" ],\n\t[ \"322\", \"Cailin\", \"Burnett\", \"M2Z 3L5\", \"Guyana\" ],\n\t[ \"323\", \"Ciara\", \"Small\", \"X6C 6M6\", \"Tanzania, United Republic of\" ],\n\t[ \"324\", \"Lillian\", \"Massey\", \"Z8A 5U5\", \"Algeria\" ],\n\t[ \"325\", \"Garrett\", \"Elliott\", \"R5P 6T0\", \"Canada\" ],\n\t[ \"326\", \"Inga\", \"Daniels\", \"40156\", \"Cocos (Keeling) Islands\" ],\n\t[ \"327\", \"Barry\", \"Pena\", \"03593\", \"Tonga\" ],\n\t[ \"328\", \"Penelope\", \"Mcintyre\", \"29293\", \"Burkina Faso\" ],\n\t[ \"329\", \"Dante\", \"Kirk\", \"74038\", \"Lesotho\" ],\n\t[ \"330\", \"Owen\", \"Cole\", \"17968\", \"Rwanda\" ],\n\t[ \"331\", \"Brittany\", \"Edwards\", \"24507\", \"Paraguay\" ],\n\t[ \"332\", \"Zeph\", \"Bentley\", \"12000\", \"Guam\" ],\n\t[ \"333\", \"Ruth\", \"Palmer\", \"E8V 9A5\", \"Ghana\" ],\n\t[ \"334\", \"Driscoll\", \"Ellis\", \"X1X 2N5\", \"Angola\" ],\n\t[ \"335\", \"Mohammad\", \"Guerra\", \"Y9N 3Y5\", \"Mongolia\" ],\n\t[ \"336\", \"Clio\", \"Baldwin\", \"67557\", \"Morocco\" ],\n\t[ \"337\", \"Virginia\", \"Duncan\", \"J8D 4T2\", \"Haiti\" ],\n\t[ \"338\", \"Dieter\", \"Sanchez\", \"H7E 2H4\", \"Romania\" ],\n\t[ \"339\", \"Quinn\", \"Hurst\", \"K4E 2X6\", \"Reunion\" ],\n\t[ \"340\", \"Coby\", \"Kelly\", \"S1H 8N0\", \"Equatorial Guinea\" ],\n\t[ \"341\", \"Raja\", \"Solis\", \"S5G 9T5\", \"Grenada\" ],\n\t[ \"342\", \"Jordan\", \"Riddle\", \"J7M 5X3\", \"Svalbard and Jan Mayen\" ],\n\t[ \"343\", \"Dora\", \"Knox\", \"25054\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"344\", \"Brendan\", \"Reilly\", \"U9U 3F7\", \"Armenia\" ],\n\t[ \"345\", \"Melyssa\", \"Reyes\", \"11285\", \"Viet Nam\" ],\n\t[ \"346\", \"Knox\", \"Rivera\", \"N8Z 7J0\", \"Nepal\" ],\n\t[ \"347\", \"Quynn\", \"Irwin\", \"26524\", \"Chile\" ],\n\t[ \"348\", \"Colin\", \"Coleman\", \"22833\", \"United Arab Emirates\" ],\n\t[ \"349\", \"Sybil\", \"Delgado\", \"99947\", \"Belize\" ],\n\t[ \"350\", \"Macaulay\", \"Salinas\", \"48521\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"351\", \"Garrison\", \"Hogan\", \"68950\", \"India\" ],\n\t[ \"352\", \"Ronan\", \"Guerra\", \"55445\", \"Angola\" ],\n\t[ \"353\", \"Regina\", \"Andrews\", \"H3E 3T0\", \"Central African Republic\" ],\n\t[ \"354\", \"Colorado\", \"Joyce\", \"V6X 5K8\", \"Anguilla\" ],\n\t[ \"355\", \"Basia\", \"Banks\", \"85049\", \"Grenada\" ],\n\t[ \"356\", \"Adena\", \"Berg\", \"04135\", \"New Caledonia\" ],\n\t[ \"357\", \"Wade\", \"Richardson\", \"C8M 9J3\", \"Dominican Republic\" ],\n\t[ \"358\", \"Cody\", \"Montoya\", \"22018\", \"Solomon Islands\" ],\n\t[ \"359\", \"Faith\", \"Barnett\", \"61475\", \"China\" ],\n\t[ \"360\", \"Cody\", \"Witt\", \"C8I 2Q8\", \"Congo\" ],\n\t[ \"361\", \"Brenden\", \"Carlson\", \"74007\", \"Marshall Islands\" ],\n\t[ \"362\", \"Gil\", \"Brooks\", \"U4S 5N1\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"363\", \"Kirestin\", \"Watts\", \"H8I 1D5\", \"Myanmar\" ],\n\t[ \"364\", \"Amelia\", \"Gilliam\", \"11461\", \"Chile\" ],\n\t[ \"365\", \"Noelani\", \"Rhodes\", \"83320\", \"Cuba\" ],\n\t[ \"366\", \"Len\", \"Trevino\", \"W9F 2U5\", \"Armenia\" ],\n\t[ \"367\", \"Galvin\", \"Middleton\", \"86707\", \"Thailand\" ],\n\t[ \"368\", \"Germaine\", \"Bridges\", \"90283\", \"Japan\" ],\n\t[ \"369\", \"Rose\", \"Hines\", \"W7L 7Q6\", \"Congo\" ],\n\t[ \"370\", \"Hop\", \"Mueller\", \"I3E 2X8\", \"Angola\" ],\n\t[ \"371\", \"Iliana\", \"Williamson\", \"56758\", \"Lebanon\" ],\n\t[ \"372\", \"Raja\", \"Price\", \"49603\", \"Armenia\" ],\n\t[ \"373\", \"Jeanette\", \"Hatfield\", \"E3K 5N5\", \"India\" ],\n\t[ \"374\", \"Brittany\", \"Christensen\", \"04750\", \"Uruguay\" ],\n\t[ \"375\", \"Inga\", \"Prince\", \"D4X 6J5\", \"Switzerland\" ],\n\t[ \"376\", \"Cherokee\", \"Ballard\", \"U1O 1M0\", \"Rwanda\" ],\n\t[ \"377\", \"Deirdre\", \"Watson\", \"46983\", \"Sri Lanka\" ],\n\t[ \"378\", \"Amanda\", \"Parrish\", \"99838\", \"Hong Kong\" ],\n\t[ \"379\", \"Leo\", \"Shannon\", \"L3N 3J0\", \"Brunei Darussalam\" ],\n\t[ \"380\", \"Kimberly\", \"Clemons\", \"88734\", \"South Africa\" ],\n\t[ \"381\", \"Seth\", \"Langley\", \"D6A 1Q9\", \"Guyana\" ],\n\t[ \"382\", \"Carol\", \"Blankenship\", \"X5N 2A7\", \"Angola\" ],\n\t[ \"383\", \"Dora\", \"Flores\", \"F8F 1O5\", \"Poland\" ],\n\t[ \"384\", \"Chava\", \"Dickson\", \"P8B 6W6\", \"Comoros\" ],\n\t[ \"385\", \"Trevor\", \"Mcdowell\", \"31382\", \"Solomon Islands\" ],\n\t[ \"386\", \"Alec\", \"Valentine\", \"P2R 4K7\", \"Greenland\" ],\n\t[ \"387\", \"Philip\", \"Jenkins\", \"Q7X 5U5\", \"Aruba\" ],\n\t[ \"388\", \"Kim\", \"Bowen\", \"69873\", \"Saint Kitts and Nevis\" ],\n\t[ \"389\", \"Allegra\", \"Oconnor\", \"X3Y 1X3\", \"Holy See (Vatican City State)\" ],\n\t[ \"390\", \"Daria\", \"Briggs\", \"A7Z 7P4\", \"Serbia and Montenegro\" ],\n\t[ \"391\", \"Amelia\", \"Wiley\", \"D4S 1G5\", \"Montserrat\" ],\n\t[ \"392\", \"Erica\", \"Aguirre\", \"H5L 2O3\", \"Andorra\" ],\n\t[ \"393\", \"Kibo\", \"Sawyer\", \"30638\", \"Guyana\" ],\n\t[ \"394\", \"Jackson\", \"Meyers\", \"P4N 9D6\", \"Bangladesh\" ],\n\t[ \"395\", \"Kirk\", \"Baxter\", \"F3M 7S6\", \"Estonia\" ],\n\t[ \"396\", \"Sybil\", \"Christian\", \"B3Q 2X0\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"397\", \"Ina\", \"Mercer\", \"N4S 1K8\", \"Korea\" ],\n\t[ \"398\", \"Kiara\", \"Whitehead\", \"86023\", \"Nicaragua\" ],\n\t[ \"399\", \"Vielka\", \"Hays\", \"29845\", \"Malta\" ],\n\t[ \"400\", \"Stacey\", \"Carlson\", \"53218\", \"Cook Islands\" ],\n\t[ \"401\", \"Selma\", \"Lloyd\", \"78256\", \"Turkey\" ],\n\t[ \"402\", \"Rhoda\", \"Mcintosh\", \"G8X 1C8\", \"Guatemala\" ],\n\t[ \"403\", \"Teagan\", \"Ochoa\", \"99752\", \"Barbados\" ],\n\t[ \"404\", \"Rebecca\", \"Carver\", \"82661\", \"Saint Kitts and Nevis\" ],\n\t[ \"405\", \"Yael\", \"Woodward\", \"66095\", \"Niger\" ],\n\t[ \"406\", \"Calvin\", \"Huffman\", \"82172\", \"Somalia\" ],\n\t[ \"407\", \"Sopoline\", \"Walters\", \"K5L 3I7\", \"Spain\" ],\n\t[ \"408\", \"Hollee\", \"Powell\", \"05572\", \"Samoa\" ],\n\t[ \"409\", \"Fiona\", \"Frank\", \"74456\", \"Timor-leste\" ],\n\t[ \"410\", \"Alana\", \"Hubbard\", \"76011\", \"Lithuania\" ],\n\t[ \"411\", \"Lillian\", \"Garcia\", \"J5Z 2O5\", \"Sierra Leone\" ],\n\t[ \"412\", \"Tad\", \"Mcleod\", \"B6A 8Z4\", \"Australia\" ],\n\t[ \"413\", \"Hadassah\", \"Hall\", \"47417\", \"China\" ],\n\t[ \"414\", \"Regan\", \"Summers\", \"X4L 4I6\", \"Honduras\" ],\n\t[ \"415\", \"Herrod\", \"Erickson\", \"R8G 3V0\", \"Israel\" ],\n\t[ \"416\", \"Autumn\", \"Rojas\", \"31205\", \"Cocos (Keeling) Islands\" ],\n\t[ \"417\", \"Castor\", \"Mooney\", \"92737\", \"Grenada\" ],\n\t[ \"418\", \"Wesley\", \"Holman\", \"57125\", \"Greenland\" ],\n\t[ \"419\", \"Kitra\", \"Wooten\", \"Q6X 4Y0\", \"Mongolia\" ],\n\t[ \"420\", \"Buckminster\", \"Rice\", \"U8B 7B8\", \"Tokelau\" ],\n\t[ \"421\", \"Xavier\", \"Hardin\", \"18280\", \"Iran, Islamic Republic of\" ],\n\t[ \"422\", \"Sopoline\", \"Fleming\", \"78437\", \"Singapore\" ],\n\t[ \"423\", \"Sydney\", \"Salinas\", \"23801\", \"Cook Islands\" ],\n\t[ \"424\", \"Bethany\", \"Rosales\", \"89650\", \"United States\" ],\n\t[ \"425\", \"Deirdre\", \"Hensley\", \"F3X 1B7\", \"Micronesia\" ],\n\t[ \"426\", \"Bernard\", \"Vargas\", \"S4D 9T0\", \"Uzbekistan\" ],\n\t[ \"427\", \"Merrill\", \"Compton\", \"17713\", \"Suriname\" ],\n\t[ \"428\", \"Carly\", \"Baird\", \"D3H 5G3\", \"United States Minor Outlying Islands\" ],\n\t[ \"429\", \"Grace\", \"Phelps\", \"64695\", \"Nauru\" ],\n\t[ \"430\", \"Kareem\", \"Stone\", \"65572\", \"Netherlands\" ],\n\t[ \"431\", \"Susan\", \"Newton\", \"04627\", \"Anguilla\" ],\n\t[ \"432\", \"Laura\", \"Miranda\", \"E1G 2R7\", \"Finland\" ],\n\t[ \"433\", \"Madaline\", \"Pugh\", \"J9A 9M5\", \"Senegal\" ],\n\t[ \"434\", \"Sophia\", \"Mendez\", \"33789\", \"Timor-leste\" ],\n\t[ \"435\", \"Roary\", \"Greene\", \"61774\", \"Canada\" ],\n\t[ \"436\", \"Amos\", \"Gilliam\", \"94933\", \"Sri Lanka\" ],\n\t[ \"437\", \"Ivory\", \"Joyner\", \"15379\", \"San Marino\" ],\n\t[ \"438\", \"Jorden\", \"Robbins\", \"43400\", \"Russian Federation\" ],\n\t[ \"439\", \"Merritt\", \"Holcomb\", \"R1I 3C7\", \"Brazil\" ],\n\t[ \"440\", \"Iliana\", \"Johnston\", \"U9W 8N2\", \"Trinidad and Tobago\" ],\n\t[ \"441\", \"Ivana\", \"Patterson\", \"G5O 6A5\", \"Georgia\" ],\n\t[ \"442\", \"Sydney\", \"Mccullough\", \"W9M 2H5\", \"American Samoa\" ],\n\t[ \"443\", \"Alvin\", \"Fulton\", \"X8A 8R5\", \"Antigua and Barbuda\" ],\n\t[ \"444\", \"Alfreda\", \"Lopez\", \"42499\", \"Montserrat\" ],\n\t[ \"445\", \"Ethan\", \"Bird\", \"W9A 8M1\", \"British Indian Ocean Territory\" ],\n\t[ \"446\", \"Zeus\", \"Logan\", \"01682\", \"San Marino\" ],\n\t[ \"447\", \"Nehru\", \"Andrews\", \"W8J 3C8\", \"Dominican Republic\" ],\n\t[ \"448\", \"Donna\", \"Booth\", \"64754\", \"Nepal\" ],\n\t[ \"449\", \"Cruz\", \"Bruce\", \"17429\", \"Burundi\" ],\n\t[ \"450\", \"Ronan\", \"Saunders\", \"69957\", \"South Africa\" ],\n\t[ \"451\", \"Jordan\", \"Barnes\", \"D8K 9L8\", \"Dominica\" ],\n\t[ \"452\", \"Carly\", \"Love\", \"D8Z 3P4\", \"Mauritania\" ],\n\t[ \"453\", \"Mari\", \"George\", \"60260\", \"Japan\" ],\n\t[ \"454\", \"Karly\", \"Hodges\", \"15790\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"455\", \"Rana\", \"Logan\", \"M1R 6Y6\", \"Bosnia and Herzegovina\" ],\n\t[ \"456\", \"Theodore\", \"Sims\", \"C7A 8T2\", \"Barbados\" ],\n\t[ \"457\", \"Quin\", \"Thompson\", \"26884\", \"Bouvet Island\" ],\n\t[ \"458\", \"Kimberley\", \"Sloan\", \"S5T 8E3\", \"Costa Rica\" ],\n\t[ \"459\", \"Upton\", \"Valenzuela\", \"Z6J 6Q1\", \"Macao\" ],\n\t[ \"460\", \"Clinton\", \"Williams\", \"Z3O 7C4\", \"Germany\" ],\n\t[ \"461\", \"Samson\", \"Mathis\", \"G1T 1V9\", \"Senegal\" ],\n\t[ \"462\", \"Michelle\", \"Frost\", \"87113\", \"Serbia and Montenegro\" ],\n\t[ \"463\", \"Tyrone\", \"Coffey\", \"80705\", \"Albania\" ],\n\t[ \"464\", \"Alea\", \"Delaney\", \"E4S 4K4\", \"Guyana\" ],\n\t[ \"465\", \"Dominique\", \"Schwartz\", \"81368\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"466\", \"Benedict\", \"Norton\", \"D1C 9C8\", \"Cyprus\" ],\n\t[ \"467\", \"Vaughan\", \"Stein\", \"R7K 1L8\", \"Egypt\" ],\n\t[ \"468\", \"Charles\", \"Foley\", \"20434\", \"Anguilla\" ],\n\t[ \"469\", \"Arden\", \"Ramos\", \"54065\", \"Gibraltar\" ],\n\t[ \"470\", \"Dillon\", \"Patel\", \"L6H 1H6\", \"Liberia\" ],\n\t[ \"471\", \"Gretchen\", \"Davenport\", \"57188\", \"Equatorial Guinea\" ],\n\t[ \"472\", \"Ivy\", \"Randall\", \"52617\", \"Costa Rica\" ],\n\t[ \"473\", \"Brett\", \"Baird\", \"45791\", \"Hungary\" ],\n\t[ \"474\", \"Wyoming\", \"Sparks\", \"11266\", \"Luxembourg\" ],\n\t[ \"475\", \"Rashad\", \"Roy\", \"47012\", \"Guam\" ],\n\t[ \"476\", \"Sopoline\", \"Le\", \"M1G 2P8\", \"United Arab Emirates\" ],\n\t[ \"477\", \"Ursa\", \"Haynes\", \"53774\", \"British Indian Ocean Territory\" ],\n\t[ \"478\", \"Maia\", \"Vincent\", \"26773\", \"New Caledonia\" ],\n\t[ \"479\", \"Salvador\", \"Pace\", \"S9E 2C4\", \"Egypt\" ],\n\t[ \"480\", \"Bethany\", \"Wilcox\", \"F2H 7N0\", \"Uzbekistan\" ],\n\t[ \"481\", \"Sara\", \"Brooks\", \"08176\", \"Holy See (Vatican City State)\" ],\n\t[ \"482\", \"Lillith\", \"Sampson\", \"75576\", \"British Indian Ocean Territory\" ],\n\t[ \"483\", \"Brynne\", \"Browning\", \"N4K 7P6\", \"Peru\" ],\n\t[ \"484\", \"Beck\", \"Tran\", \"06815\", \"Cambodia\" ],\n\t[ \"485\", \"Peter\", \"Hurley\", \"05770\", \"Rwanda\" ],\n\t[ \"486\", \"Buffy\", \"Sharpe\", \"H8F 8G6\", \"Georgia\" ],\n\t[ \"487\", \"Harrison\", \"Cross\", \"Y1A 1R8\", \"United Kingdom\" ],\n\t[ \"488\", \"Ursa\", \"Wolf\", \"J8C 9Q8\", \"French Polynesia\" ],\n\t[ \"489\", \"Nayda\", \"Vasquez\", \"05523\", \"Taiwan, Province of China\" ],\n\t[ \"490\", \"Gretchen\", \"Walters\", \"28628\", \"Seychelles\" ],\n\t[ \"491\", \"Adrian\", \"Hickman\", \"17956\", \"El Salvador\" ],\n\t[ \"492\", \"Laura\", \"Moon\", \"32103\", \"Myanmar\" ],\n\t[ \"493\", \"Kellie\", \"Barnett\", \"L5Z 2U8\", \"Saint Helena\" ],\n\t[ \"494\", \"Illana\", \"Stanton\", \"Z5D 2G0\", \"Australia\" ],\n\t[ \"495\", \"Jescie\", \"Santiago\", \"D9L 4B5\", \"Cambodia\" ],\n\t[ \"496\", \"Laura\", \"Hopkins\", \"X6V 9S5\", \"Netherlands Antilles\" ],\n\t[ \"497\", \"Vielka\", \"Harding\", \"U6A 9T2\", \"Cambodia\" ],\n\t[ \"498\", \"Walter\", \"Gentry\", \"L3X 9Q9\", \"Slovenia\" ],\n\t[ \"499\", \"Sara\", \"Atkinson\", \"67146\", \"Guinea\" ],\n\t[ \"500\", \"Yolanda\", \"Chambers\", \"Q8D 3W0\", \"Zimbabwe\" ],\n\t[ \"501\", \"Josiah\", \"Villarreal\", \"I1V 6Y7\", \"Burkina Faso\" ],\n\t[ \"502\", \"Hayfa\", \"Bowman\", \"77148\", \"Saudi Arabia\" ],\n\t[ \"503\", \"Colette\", \"Conley\", \"41232\", \"Estonia\" ],\n\t[ \"504\", \"Lana\", \"Doyle\", \"32962\", \"Cuba\" ],\n\t[ \"505\", \"Keegan\", \"Goodwin\", \"M2P 1X3\", \"Cocos (Keeling) Islands\" ],\n\t[ \"506\", \"Nina\", \"Cross\", \"49580\", \"Germany\" ],\n\t[ \"507\", \"Xenos\", \"Cervantes\", \"K6X 7W8\", \"Mauritius\" ],\n\t[ \"508\", \"Jared\", \"Hester\", \"30156\", \"Uzbekistan\" ],\n\t[ \"509\", \"Damon\", \"Curry\", \"U2J 2D8\", \"Pitcairn\" ],\n\t[ \"510\", \"Amery\", \"Savage\", \"O1S 2Z4\", \"Turkmenistan\" ],\n\t[ \"511\", \"Brian\", \"Wilkinson\", \"J6O 4T0\", \"Luxembourg\" ],\n\t[ \"512\", \"Ivory\", \"Mckinney\", \"L3E 8M2\", \"Lithuania\" ],\n\t[ \"513\", \"Eric\", \"Dalton\", \"Y1L 6F4\", \"Ethiopia\" ],\n\t[ \"514\", \"Brandon\", \"Callahan\", \"K6Q 9B4\", \"Haiti\" ],\n\t[ \"515\", \"Phillip\", \"Mclean\", \"18836\", \"Ethiopia\" ],\n\t[ \"516\", \"Carly\", \"Greer\", \"16811\", \"Mayotte\" ],\n\t[ \"517\", \"Stone\", \"Ware\", \"58795\", \"Moldova\" ],\n\t[ \"518\", \"Xena\", \"Hayden\", \"97158\", \"Chad\" ],\n\t[ \"519\", \"Catherine\", \"Leonard\", \"77868\", \"Azerbaijan\" ],\n\t[ \"520\", \"Bernard\", \"Horton\", \"04270\", \"Yemen\" ],\n\t[ \"521\", \"Olga\", \"Richmond\", \"89169\", \"Lebanon\" ],\n\t[ \"522\", \"Iris\", \"Cummings\", \"78836\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"523\", \"Beau\", \"Mccall\", \"78638\", \"Monaco\" ],\n\t[ \"524\", \"Michael\", \"Humphrey\", \"Q1A 2W9\", \"Tokelau\" ],\n\t[ \"525\", \"Oren\", \"Stevens\", \"F4V 9G7\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"526\", \"Ima\", \"Shelton\", \"19295\", \"Mozambique\" ],\n\t[ \"527\", \"Merritt\", \"Morrison\", \"K6W 5R0\", \"Georgia\" ],\n\t[ \"528\", \"Vera\", \"Cherry\", \"54993\", \"Angola\" ],\n\t[ \"529\", \"Grant\", \"Turner\", \"B4V 2J0\", \"Saint Helena\" ],\n\t[ \"530\", \"Odette\", \"Snyder\", \"N9L 2V8\", \"Chad\" ],\n\t[ \"531\", \"Uma\", \"Stewart\", \"E9A 6X9\", \"Bhutan\" ],\n\t[ \"532\", \"Kylee\", \"Best\", \"11393\", \"Malaysia\" ],\n\t[ \"533\", \"Nicholas\", \"Mercado\", \"85179\", \"Switzerland\" ],\n\t[ \"534\", \"Nathaniel\", \"Stuart\", \"M1Q 6Z6\", \"Mongolia\" ],\n\t[ \"535\", \"Ruth\", \"Conrad\", \"T7G 9V6\", \"Guadeloupe\" ],\n\t[ \"536\", \"Deanna\", \"Dudley\", \"79721\", \"Kiribati\" ],\n\t[ \"537\", \"David\", \"Thornton\", \"C6R 2G3\", \"Netherlands Antilles\" ],\n\t[ \"538\", \"Jane\", \"Ashley\", \"48711\", \"Rwanda\" ],\n\t[ \"539\", \"Nero\", \"Curry\", \"20590\", \"Denmark\" ],\n\t[ \"540\", \"Kellie\", \"Poole\", \"46053\", \"Martinique\" ],\n\t[ \"541\", \"Freya\", \"Burch\", \"W5R 8Y5\", \"Northern Mariana Islands\" ],\n\t[ \"542\", \"Maxwell\", \"Mcbride\", \"D4W 4M3\", \"Paraguay\" ],\n\t[ \"543\", \"Dawn\", \"Sargent\", \"85956\", \"Gibraltar\" ],\n\t[ \"544\", \"Lilah\", \"Matthews\", \"J4D 8A9\", \"Montserrat\" ],\n\t[ \"545\", \"Salvador\", \"Burns\", \"28067\", \"Bhutan\" ],\n\t[ \"546\", \"Ezekiel\", \"Ayala\", \"67153\", \"Wallis and Futuna\" ],\n\t[ \"547\", \"Evan\", \"Barker\", \"83026\", \"Puerto Rico\" ],\n\t[ \"548\", \"Jemima\", \"Case\", \"U3S 7N6\", \"Georgia\" ],\n\t[ \"549\", \"Belle\", \"Mcconnell\", \"H4S 9F8\", \"Angola\" ],\n\t[ \"550\", \"Doris\", \"Mays\", \"57387\", \"Tonga\" ],\n\t[ \"551\", \"Carson\", \"Buchanan\", \"20457\", \"Guatemala\" ],\n\t[ \"552\", \"Calista\", \"Lamb\", \"26851\", \"Gibraltar\" ],\n\t[ \"553\", \"Remedios\", \"Haley\", \"A9K 5M1\", \"Tokelau\" ],\n\t[ \"554\", \"Odette\", \"Mccarty\", \"Y8B 3V4\", \"Marshall Islands\" ],\n\t[ \"555\", \"Libby\", \"Pugh\", \"93261\", \"Netherlands\" ],\n\t[ \"556\", \"Bo\", \"Maldonado\", \"C1H 1K7\", \"Oman\" ],\n\t[ \"557\", \"Cameron\", \"Beasley\", \"41821\", \"Northern Mariana Islands\" ],\n\t[ \"558\", \"Chadwick\", \"Crosby\", \"62855\", \"New Caledonia\" ],\n\t[ \"559\", \"Steven\", \"Barrett\", \"92102\", \"Pakistan\" ],\n\t[ \"560\", \"Jonas\", \"Valdez\", \"N3V 4R9\", \"Bulgaria\" ],\n\t[ \"561\", \"Harlan\", \"Larsen\", \"Z8F 6A0\", \"Cayman Islands\" ],\n\t[ \"562\", \"Iola\", \"Joyner\", \"D1J 4C3\", \"Italy\" ],\n\t[ \"563\", \"Abra\", \"Medina\", \"Q9O 5J2\", \"Cambodia\" ],\n\t[ \"564\", \"Solomon\", \"Davidson\", \"91317\", \"Turkmenistan\" ],\n\t[ \"565\", \"Alisa\", \"Kim\", \"33036\", \"Austria\" ],\n\t[ \"566\", \"Deacon\", \"Silva\", \"Z5L 6M0\", \"Djibouti\" ],\n\t[ \"567\", \"Bree\", \"Landry\", \"43135\", \"Czech Republic\" ],\n\t[ \"568\", \"Molly\", \"Leach\", \"71714\", \"Botswana\" ],\n\t[ \"569\", \"Idona\", \"Cain\", \"A2J 1R8\", \"South Georgia and The South Sandwich Islands\" ],\n\t[ \"570\", \"Aileen\", \"Salinas\", \"90344\", \"Uzbekistan\" ],\n\t[ \"571\", \"Dominique\", \"Cooper\", \"31803\", \"Sao Tome and Principe\" ],\n\t[ \"572\", \"Lunea\", \"Pollard\", \"S9R 7B0\", \"Sweden\" ],\n\t[ \"573\", \"Leo\", \"Combs\", \"W7E 8T4\", \"Ukraine\" ],\n\t[ \"574\", \"Illiana\", \"Donovan\", \"D8K 3R4\", \"Palau\" ],\n\t[ \"575\", \"Orlando\", \"Vaughan\", \"Q4I 3E3\", \"Bosnia and Herzegovina\" ],\n\t[ \"576\", \"Yuri\", \"Blake\", \"I9W 5U5\", \"Seychelles\" ],\n\t[ \"577\", \"Amanda\", \"Baldwin\", \"19752\", \"Turkmenistan\" ],\n\t[ \"578\", \"Hanna\", \"Emerson\", \"73316\", \"Antigua and Barbuda\" ],\n\t[ \"579\", \"Xyla\", \"Atkins\", \"11151\", \"Uganda\" ],\n\t[ \"580\", \"Nathaniel\", \"Patterson\", \"00391\", \"Portugal\" ],\n\t[ \"581\", \"Naida\", \"Cote\", \"17484\", \"Mauritius\" ],\n\t[ \"582\", \"Scarlett\", \"Little\", \"V8N 8A6\", \"Sao Tome and Principe\" ],\n\t[ \"583\", \"Odessa\", \"Kerr\", \"56456\", \"Sweden\" ],\n\t[ \"584\", \"Kamal\", \"Richardson\", \"F6S 4I1\", \"Algeria\" ],\n\t[ \"585\", \"Griffith\", \"Morton\", \"I5H 2Z0\", \"Vanuatu\" ],\n\t[ \"586\", \"Orli\", \"Santana\", \"48213\", \"Burundi\" ],\n\t[ \"587\", \"Courtney\", \"Cook\", \"R3O 3A9\", \"Cape Verde\" ],\n\t[ \"588\", \"Jolene\", \"Wallace\", \"F6Q 7W8\", \"Zambia\" ],\n\t[ \"589\", \"Bert\", \"Sharp\", \"X7T 7Z8\", \"Paraguay\" ],\n\t[ \"590\", \"Ila\", \"Carver\", \"E4M 7P4\", \"Paraguay\" ],\n\t[ \"591\", \"Merrill\", \"Wall\", \"49416\", \"Fiji\" ],\n\t[ \"592\", \"Hanae\", \"Espinoza\", \"Y6D 6K8\", \"Turkey\" ],\n\t[ \"593\", \"Stephanie\", \"Bond\", \"Z1Q 3P3\", \"Algeria\" ],\n\t[ \"594\", \"Lionel\", \"Leonard\", \"U8O 7G6\", \"Nauru\" ],\n\t[ \"595\", \"Faith\", \"Ramirez\", \"75181\", \"Slovakia\" ],\n\t[ \"596\", \"Fritz\", \"Glass\", \"62878\", \"El Salvador\" ],\n\t[ \"597\", \"Raya\", \"Gardner\", \"L3E 2C7\", \"India\" ],\n\t[ \"598\", \"Brynne\", \"Price\", \"W1S 6O9\", \"Lithuania\" ],\n\t[ \"599\", \"Karen\", \"Gray\", \"O4X 8F6\", \"Albania\" ],\n\t[ \"600\", \"Perry\", \"Goodwin\", \"44266\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"601\", \"Dylan\", \"Glover\", \"76573\", \"Estonia\" ],\n\t[ \"602\", \"Melinda\", \"Holloway\", \"07861\", \"Grenada\" ],\n\t[ \"603\", \"Rahim\", \"Robinson\", \"D7M 1E8\", \"Madagascar\" ],\n\t[ \"604\", \"Ori\", \"Oconnor\", \"10386\", \"Antarctica\" ],\n\t[ \"605\", \"Candace\", \"Preston\", \"03610\", \"Denmark\" ],\n\t[ \"606\", \"Wing\", \"Howe\", \"E6U 3H2\", \"Burundi\" ],\n\t[ \"607\", \"Lucy\", \"Eaton\", \"26436\", \"Guinea\" ],\n\t[ \"608\", \"Ignatius\", \"Blevins\", \"93597\", \"Serbia and Montenegro\" ],\n\t[ \"609\", \"Nadine\", \"Franco\", \"80096\", \"Tonga\" ],\n\t[ \"610\", \"Shoshana\", \"Walters\", \"S4F 5O8\", \"Micronesia\" ],\n\t[ \"611\", \"Remedios\", \"Buckner\", \"29213\", \"Antigua and Barbuda\" ],\n\t[ \"612\", \"Adam\", \"Horne\", \"F8V 1V8\", \"Oman\" ],\n\t[ \"613\", \"Kieran\", \"Saunders\", \"I7A 7Y5\", \"Japan\" ],\n\t[ \"614\", \"Isabelle\", \"Fletcher\", \"K2K 3K5\", \"Norway\" ],\n\t[ \"615\", \"Ryder\", \"Ballard\", \"38518\", \"Tanzania, United Republic of\" ],\n\t[ \"616\", \"Nina\", \"Guerrero\", \"61142\", \"Saint Kitts and Nevis\" ],\n\t[ \"617\", \"Sheila\", \"Poole\", \"E2H 6I6\", \"Denmark\" ],\n\t[ \"618\", \"Melyssa\", \"Mcdaniel\", \"08247\", \"Netherlands Antilles\" ],\n\t[ \"619\", \"Leila\", \"Vang\", \"Q5Z 3S1\", \"United States Minor Outlying Islands\" ],\n\t[ \"620\", \"Grady\", \"Aguilar\", \"R1I 8I8\", \"Slovenia\" ],\n\t[ \"621\", \"Plato\", \"Terrell\", \"23916\", \"Kuwait\" ],\n\t[ \"622\", \"Rama\", \"Perkins\", \"56506\", \"Russian Federation\" ],\n\t[ \"623\", \"Boris\", \"Chaney\", \"66737\", \"Antigua and Barbuda\" ],\n\t[ \"624\", \"Edward\", \"Clarke\", \"30722\", \"Iraq\" ],\n\t[ \"625\", \"Skyler\", \"Wise\", \"53248\", \"Taiwan, Province of China\" ],\n\t[ \"626\", \"Uta\", \"Cox\", \"85242\", \"Malawi\" ],\n\t[ \"627\", \"Lesley\", \"Watkins\", \"26710\", \"Estonia\" ],\n\t[ \"628\", \"Gray\", \"Harrison\", \"C5L 9Y7\", \"Nepal\" ],\n\t[ \"629\", \"Joan\", \"Flores\", \"J5Q 2B9\", \"Tajikistan\" ],\n\t[ \"630\", \"Reece\", \"Lott\", \"85152\", \"Algeria\" ],\n\t[ \"631\", \"Jerome\", \"Faulkner\", \"V1K 3N2\", \"Kiribati\" ],\n\t[ \"632\", \"Jackson\", \"Hudson\", \"85932\", \"Botswana\" ],\n\t[ \"633\", \"Uma\", \"Booker\", \"79755\", \"Senegal\" ],\n\t[ \"634\", \"Katelyn\", \"Gillespie\", \"Q8P 4V9\", \"Eritrea\" ],\n\t[ \"635\", \"Clio\", \"Tillman\", \"67552\", \"Liberia\" ],\n\t[ \"636\", \"Anjolie\", \"Nixon\", \"36615\", \"Botswana\" ],\n\t[ \"637\", \"Nell\", \"Lee\", \"T9S 4R3\", \"French Southern Territories\" ],\n\t[ \"638\", \"Anthony\", \"Aguirre\", \"85443\", \"Morocco\" ],\n\t[ \"639\", \"Aaron\", \"Green\", \"90326\", \"Faroe Islands\" ],\n\t[ \"640\", \"Galvin\", \"Yang\", \"A4X 8H6\", \"Ukraine\" ],\n\t[ \"641\", \"Yoshi\", \"Strickland\", \"52538\", \"Brazil\" ],\n\t[ \"642\", \"Brenden\", \"Kirkland\", \"X7P 8V9\", \"Turks and Caicos Islands\" ],\n\t[ \"643\", \"Bree\", \"Stone\", \"U4L 2H2\", \"Hong Kong\" ],\n\t[ \"644\", \"Quin\", \"Tanner\", \"U4A 1X4\", \"Faroe Islands\" ],\n\t[ \"645\", \"Camilla\", \"Heath\", \"91749\", \"Andorra\" ],\n\t[ \"646\", \"Xaviera\", \"Bullock\", \"I4U 7W0\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"647\", \"Kay\", \"Rowe\", \"59689\", \"Iceland\" ],\n\t[ \"648\", \"Lance\", \"Bond\", \"66558\", \"Spain\" ],\n\t[ \"649\", \"Fredericka\", \"Langley\", \"48782\", \"Cayman Islands\" ],\n\t[ \"650\", \"Charles\", \"Avila\", \"42037\", \"Papua New Guinea\" ],\n\t[ \"651\", \"Ramona\", \"Rios\", \"T5M 3E1\", \"Argentina\" ],\n\t[ \"652\", \"Ezekiel\", \"Young\", \"W8X 4S7\", \"French Polynesia\" ],\n\t[ \"653\", \"Celeste\", \"Dodson\", \"19140\", \"Benin\" ],\n\t[ \"654\", \"Frances\", \"Mcintosh\", \"91246\", \"Swaziland\" ],\n\t[ \"655\", \"Deanna\", \"Hyde\", \"J8P 3T5\", \"Croatia\" ],\n\t[ \"656\", \"Dahlia\", \"Blair\", \"45364\", \"Kazakhstan\" ],\n\t[ \"657\", \"Jade\", \"Hayes\", \"I5Q 3S9\", \"Malawi\" ],\n\t[ \"658\", \"Robin\", \"Bullock\", \"G9Q 2P8\", \"Ireland\" ],\n\t[ \"659\", \"Nasim\", \"Bond\", \"I2V 8N4\", \"Macedonia\" ],\n\t[ \"660\", \"Axel\", \"Pickett\", \"18370\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"661\", \"Pearl\", \"Lee\", \"G1R 3R8\", \"Poland\" ],\n\t[ \"662\", \"Garth\", \"Meyers\", \"90308\", \"Georgia\" ],\n\t[ \"663\", \"Ivory\", \"Rios\", \"S8F 8R5\", \"Mexico\" ],\n\t[ \"664\", \"Jerome\", \"Lambert\", \"N1Q 6R8\", \"Saint Lucia\" ],\n\t[ \"665\", \"Meredith\", \"Clark\", \"27720\", \"Cocos (Keeling) Islands\" ],\n\t[ \"666\", \"Armando\", \"Holcomb\", \"M6D 4X0\", \"Oman\" ],\n\t[ \"667\", \"Rowan\", \"Page\", \"00307\", \"Nauru\" ],\n\t[ \"668\", \"Kyla\", \"Brown\", \"F4W 4C5\", \"Holy See (Vatican City State)\" ],\n\t[ \"669\", \"Leigh\", \"Sosa\", \"28499\", \"Uruguay\" ],\n\t[ \"670\", \"Shafira\", \"Forbes\", \"26526\", \"Honduras\" ],\n\t[ \"671\", \"Maxine\", \"Mueller\", \"90923\", \"Kazakhstan\" ],\n\t[ \"672\", \"Joy\", \"Sargent\", \"K6T 3W5\", \"Malawi\" ],\n\t[ \"673\", \"Lamar\", \"Roberts\", \"R5F 9C8\", \"Poland\" ],\n\t[ \"674\", \"Madonna\", \"Love\", \"15514\", \"Cyprus\" ],\n\t[ \"675\", \"Uriel\", \"Ware\", \"Z6V 5J1\", \"Singapore\" ],\n\t[ \"676\", \"Bevis\", \"Erickson\", \"M3X 9M8\", \"Brunei Darussalam\" ],\n\t[ \"677\", \"Grant\", \"Velasquez\", \"96942\", \"Antarctica\" ],\n\t[ \"678\", \"Lars\", \"Bullock\", \"14772\", \"Guyana\" ],\n\t[ \"679\", \"Maryam\", \"Jones\", \"01854\", \"Togo\" ],\n\t[ \"680\", \"Blythe\", \"Goodwin\", \"51731\", \"New Caledonia\" ],\n\t[ \"681\", \"Kane\", \"Wiggins\", \"55727\", \"Kiribati\" ],\n\t[ \"682\", \"Brian\", \"Rosales\", \"25896\", \"Cape Verde\" ],\n\t[ \"683\", \"Blaze\", \"Leach\", \"P6J 3E5\", \"Northern Mariana Islands\" ],\n\t[ \"684\", \"Cameron\", \"Neal\", \"82248\", \"Marshall Islands\" ],\n\t[ \"685\", \"Lydia\", \"Cunningham\", \"Q1V 8P7\", \"San Marino\" ],\n\t[ \"686\", \"Troy\", \"Cook\", \"32106\", \"British Indian Ocean Territory\" ],\n\t[ \"687\", \"Alexander\", \"Valenzuela\", \"S8Z 6B2\", \"Guadeloupe\" ],\n\t[ \"688\", \"Garth\", \"Beck\", \"46344\", \"Cook Islands\" ],\n\t[ \"689\", \"Hillary\", \"Nunez\", \"29462\", \"Sri Lanka\" ],\n\t[ \"690\", \"Hunter\", \"Sawyer\", \"W9M 6T4\", \"Saint Lucia\" ],\n\t[ \"691\", \"Jaquelyn\", \"Everett\", \"T1X 2U2\", \"Guinea-bissau\" ],\n\t[ \"692\", \"Indira\", \"Ortega\", \"43047\", \"Italy\" ],\n\t[ \"693\", \"Josiah\", \"Hinton\", \"N5F 5Y8\", \"Andorra\" ],\n\t[ \"694\", \"Bruno\", \"Gay\", \"E3U 3D9\", \"Palau\" ],\n\t[ \"695\", \"Melissa\", \"Blackburn\", \"S4V 1K2\", \"Virgin Islands, U.S.\" ],\n\t[ \"696\", \"Zeus\", \"Dawson\", \"K5S 6Z6\", \"Belgium\" ],\n\t[ \"697\", \"Castor\", \"Mcmahon\", \"H3R 1O8\", \"Cambodia\" ],\n\t[ \"698\", \"Elizabeth\", \"Beasley\", \"98178\", \"Northern Mariana Islands\" ],\n\t[ \"699\", \"Jescie\", \"Lee\", \"08056\", \"Eritrea\" ],\n\t[ \"700\", \"Dennis\", \"Chapman\", \"T4O 1Q2\", \"Bangladesh\" ],\n\t[ \"701\", \"Basia\", \"Wallace\", \"U3Y 7C1\", \"Pitcairn\" ],\n\t[ \"702\", \"Dante\", \"Brewer\", \"53544\", \"Bosnia and Herzegovina\" ],\n\t[ \"703\", \"Adrienne\", \"Glenn\", \"32378\", \"Austria\" ],\n\t[ \"704\", \"Kellie\", \"Acevedo\", \"51723\", \"Italy\" ],\n\t[ \"705\", \"Scarlet\", \"Mclaughlin\", \"43509\", \"Kiribati\" ],\n\t[ \"706\", \"Lillith\", \"Mullins\", \"S6L 4Y6\", \"Kyrgyzstan\" ],\n\t[ \"707\", \"Maxine\", \"Atkins\", \"Z5T 5R5\", \"Denmark\" ],\n\t[ \"708\", \"Nicholas\", \"Rose\", \"40286\", \"Macedonia\" ],\n\t[ \"709\", \"Zenia\", \"Pugh\", \"28682\", \"Venezuela\" ],\n\t[ \"710\", \"Keely\", \"Turner\", \"34939\", \"New Zealand\" ],\n\t[ \"711\", \"Maisie\", \"Walton\", \"S6M 5C5\", \"Cameroon\" ],\n\t[ \"712\", \"Michelle\", \"Salinas\", \"T7A 9N6\", \"Nicaragua\" ],\n\t[ \"713\", \"Reece\", \"Clements\", \"73923\", \"Austria\" ],\n\t[ \"714\", \"Eliana\", \"Fox\", \"V3Y 5T4\", \"Denmark\" ],\n\t[ \"715\", \"Kennedy\", \"Mullins\", \"43213\", \"Virgin Islands, British\" ],\n\t[ \"716\", \"Alea\", \"Glover\", \"M6P 3Z5\", \"Turkmenistan\" ],\n\t[ \"717\", \"Scarlett\", \"Hunt\", \"41461\", \"Montserrat\" ],\n\t[ \"718\", \"Rooney\", \"Kane\", \"T8A 3E2\", \"Madagascar\" ],\n\t[ \"719\", \"Cairo\", \"Ray\", \"L6M 1E7\", \"Canada\" ],\n\t[ \"720\", \"Wendy\", \"Burks\", \"R8V 8F5\", \"Virgin Islands, U.S.\" ],\n\t[ \"721\", \"Christine\", \"Suarez\", \"67369\", \"Georgia\" ],\n\t[ \"722\", \"Graiden\", \"Le\", \"K4M 9V5\", \"New Caledonia\" ],\n\t[ \"723\", \"Zane\", \"Nunez\", \"60548\", \"Haiti\" ],\n\t[ \"724\", \"Ali\", \"Bell\", \"U4Y 4C3\", \"Togo\" ],\n\t[ \"725\", \"Marsden\", \"Leon\", \"39374\", \"Venezuela\" ],\n\t[ \"726\", \"Holmes\", \"Kidd\", \"B6K 7Q9\", \"Iraq\" ],\n\t[ \"727\", \"Cameron\", \"Gardner\", \"88627\", \"Brazil\" ],\n\t[ \"728\", \"Ava\", \"George\", \"K1Z 7Y2\", \"Monaco\" ],\n\t[ \"729\", \"Chantale\", \"Holland\", \"H1B 9L8\", \"Afghanistan\" ],\n\t[ \"730\", \"Alika\", \"Middleton\", \"W8X 7O1\", \"Korea\" ],\n\t[ \"731\", \"Cameran\", \"Zimmerman\", \"78576\", \"Benin\" ],\n\t[ \"732\", \"Barrett\", \"Blair\", \"51161\", \"Virgin Islands, U.S.\" ],\n\t[ \"733\", \"Brielle\", \"Ballard\", \"59538\", \"Iceland\" ],\n\t[ \"734\", \"Teagan\", \"Morales\", \"40107\", \"Kenya\" ],\n\t[ \"735\", \"Lunea\", \"Cantu\", \"14690\", \"Oman\" ],\n\t[ \"736\", \"Robin\", \"Gilmore\", \"17972\", \"Nauru\" ],\n\t[ \"737\", \"Hall\", \"Mccarty\", \"86141\", \"China\" ],\n\t[ \"738\", \"Olga\", \"Rasmussen\", \"58309\", \"Virgin Islands, British\" ],\n\t[ \"739\", \"Mark\", \"Griffin\", \"51542\", \"Argentina\" ],\n\t[ \"740\", \"Medge\", \"Carrillo\", \"23192\", \"Pitcairn\" ],\n\t[ \"741\", \"Susan\", \"Mosley\", \"32128\", \"Turkmenistan\" ],\n\t[ \"742\", \"Zelda\", \"Valdez\", \"46831\", \"New Caledonia\" ],\n\t[ \"743\", \"Ruth\", \"Donaldson\", \"F9I 7G7\", \"Ukraine\" ],\n\t[ \"744\", \"Kirby\", \"Workman\", \"36679\", \"Rwanda\" ],\n\t[ \"745\", \"Alexa\", \"King\", \"66513\", \"Liberia\" ],\n\t[ \"746\", \"Ronan\", \"Gross\", \"K2S 6D0\", \"Saint Lucia\" ],\n\t[ \"747\", \"Kylee\", \"Dillon\", \"P7Y 1I5\", \"Faroe Islands\" ],\n\t[ \"748\", \"Brenda\", \"Weaver\", \"99365\", \"Uzbekistan\" ],\n\t[ \"749\", \"Aristotle\", \"Orr\", \"43451\", \"Canada\" ],\n\t[ \"750\", \"Jaquelyn\", \"Tyler\", \"B9Q 7P5\", \"Brunei Darussalam\" ],\n\t[ \"751\", \"Madeline\", \"Stewart\", \"D4D 2J4\", \"Zimbabwe\" ],\n\t[ \"752\", \"Lacota\", \"Glass\", \"89124\", \"Israel\" ],\n\t[ \"753\", \"Adrian\", \"Ashley\", \"N8M 4L1\", \"Sri Lanka\" ],\n\t[ \"754\", \"Ignatius\", \"Waller\", \"12053\", \"Thailand\" ],\n\t[ \"755\", \"Raven\", \"Stevens\", \"88768\", \"Estonia\" ],\n\t[ \"756\", \"Carly\", \"Camacho\", \"27075\", \"Vanuatu\" ],\n\t[ \"757\", \"Lee\", \"Calderon\", \"19501\", \"Pitcairn\" ],\n\t[ \"758\", \"Amos\", \"Briggs\", \"I6A 3L8\", \"Saint Kitts and Nevis\" ],\n\t[ \"759\", \"Cheryl\", \"Valencia\", \"90517\", \"Denmark\" ],\n\t[ \"760\", \"Kenyon\", \"Franco\", \"B2S 2E2\", \"Western Sahara\" ],\n\t[ \"761\", \"Damian\", \"Acosta\", \"A2S 6D0\", \"Bahamas\" ],\n\t[ \"762\", \"Brenda\", \"Zamora\", \"T9E 7L3\", \"Finland\" ],\n\t[ \"763\", \"Connor\", \"Atkinson\", \"03975\", \"Sierra Leone\" ],\n\t[ \"764\", \"Kaseem\", \"Waters\", \"A2K 2X0\", \"China\" ],\n\t[ \"765\", \"Zephania\", \"Whitfield\", \"A4Z 9P7\", \"Eritrea\" ],\n\t[ \"766\", \"Emmanuel\", \"Ballard\", \"G1M 6Y2\", \"Finland\" ],\n\t[ \"767\", \"Amos\", \"Walters\", \"43184\", \"Oman\" ],\n\t[ \"768\", \"Urielle\", \"Browning\", \"19959\", \"Panama\" ],\n\t[ \"769\", \"TaShya\", \"Summers\", \"B9V 3Y3\", \"Micronesia\" ],\n\t[ \"770\", \"Jermaine\", \"Mcgee\", \"X8A 4E1\", \"Cape Verde\" ],\n\t[ \"771\", \"Chaney\", \"Berry\", \"G2H 2C8\", \"Uganda\" ],\n\t[ \"772\", \"Jaime\", \"May\", \"49723\", \"Eritrea\" ],\n\t[ \"773\", \"Olga\", \"Cohen\", \"13403\", \"Macao\" ],\n\t[ \"774\", \"Jacob\", \"Vaughn\", \"U7G 1V5\", \"Greece\" ],\n\t[ \"775\", \"Kelly\", \"Mcdonald\", \"Z3B 5G7\", \"Kiribati\" ],\n\t[ \"776\", \"Emi\", \"Gilbert\", \"W1L 2M4\", \"Nicaragua\" ],\n\t[ \"777\", \"Francis\", \"Nunez\", \"K4U 6M5\", \"Lithuania\" ],\n\t[ \"778\", \"Noel\", \"Nelson\", \"Z5T 1Y0\", \"Nauru\" ],\n\t[ \"779\", \"Ora\", \"Ellison\", \"Y5I 4R8\", \"Burundi\" ],\n\t[ \"780\", \"Kirby\", \"Glass\", \"J5X 2E3\", \"Argentina\" ],\n\t[ \"781\", \"Hayley\", \"Tate\", \"V1T 6B6\", \"Greece\" ],\n\t[ \"782\", \"Mohammad\", \"Leblanc\", \"E3S 5R3\", \"Oman\" ],\n\t[ \"783\", \"Lionel\", \"Todd\", \"A1Z 9E1\", \"Macedonia\" ],\n\t[ \"784\", \"Courtney\", \"Mckay\", \"D4I 8Z3\", \"Fiji\" ],\n\t[ \"785\", \"Reagan\", \"West\", \"84159\", \"Equatorial Guinea\" ],\n\t[ \"786\", \"Noel\", \"Strickland\", \"Q7K 6S3\", \"Mozambique\" ],\n\t[ \"787\", \"Lara\", \"Porter\", \"49872\", \"Nigeria\" ],\n\t[ \"788\", \"Kyra\", \"Haley\", \"I9E 2K3\", \"Dominican Republic\" ],\n\t[ \"789\", \"Wynter\", \"Beasley\", \"66330\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"790\", \"Vladimir\", \"Briggs\", \"99538\", \"Burkina Faso\" ],\n\t[ \"791\", \"Rafael\", \"Campbell\", \"V8L 2S6\", \"Algeria\" ],\n\t[ \"792\", \"Buffy\", \"Wilder\", \"N3U 2X0\", \"Bahrain\" ],\n\t[ \"793\", \"Nyssa\", \"Dawson\", \"38434\", \"Spain\" ],\n\t[ \"794\", \"Sylvia\", \"Swanson\", \"39714\", \"Azerbaijan\" ],\n\t[ \"795\", \"Jolie\", \"Diaz\", \"A1J 5I1\", \"Cuba\" ],\n\t[ \"796\", \"Rosalyn\", \"Mcdaniel\", \"F3T 6E2\", \"Benin\" ],\n\t[ \"797\", \"Nelle\", \"Prince\", \"K1M 4U6\", \"Maldives\" ],\n\t[ \"798\", \"Luke\", \"Knight\", \"05930\", \"Seychelles\" ],\n\t[ \"799\", \"Macaulay\", \"Conway\", \"79707\", \"American Samoa\" ],\n\t[ \"800\", \"Freya\", \"Webb\", \"U2H 2D7\", \"Ireland\" ],\n\t[ \"801\", \"Clinton\", \"Meyers\", \"S9I 7N2\", \"Malta\" ],\n\t[ \"802\", \"Rudyard\", \"Chandler\", \"40347\", \"Bahrain\" ],\n\t[ \"803\", \"Courtney\", \"Hoover\", \"12325\", \"French Polynesia\" ],\n\t[ \"804\", \"Melissa\", \"Davenport\", \"K7P 1S8\", \"Canada\" ],\n\t[ \"805\", \"Noelle\", \"Nieves\", \"87427\", \"Martinique\" ],\n\t[ \"806\", \"Myles\", \"Hart\", \"V6T 1W0\", \"Niue\" ],\n\t[ \"807\", \"Jasper\", \"Campos\", \"78143\", \"Faroe Islands\" ],\n\t[ \"808\", \"Ariana\", \"Valentine\", \"J4X 2D4\", \"Ecuador\" ],\n\t[ \"809\", \"Vanna\", \"Fletcher\", \"M4Z 1F9\", \"Faroe Islands\" ],\n\t[ \"810\", \"Elijah\", \"Harper\", \"Y1B 7E4\", \"New Zealand\" ],\n\t[ \"811\", \"Leilani\", \"Nunez\", \"K9W 4F0\", \"United Arab Emirates\" ],\n\t[ \"812\", \"Maia\", \"Huber\", \"V4L 8M6\", \"United Kingdom\" ],\n\t[ \"813\", \"Richard\", \"Riddle\", \"U8C 8Q2\", \"Niue\" ],\n\t[ \"814\", \"Harper\", \"Blanchard\", \"10904\", \"Cameroon\" ],\n\t[ \"815\", \"Aurelia\", \"Trujillo\", \"01646\", \"Dominican Republic\" ],\n\t[ \"816\", \"Anthony\", \"Owen\", \"J2I 2B4\", \"Palestinian Territory, Occupied\" ],\n\t[ \"817\", \"Kelsie\", \"Roy\", \"M3J 6K3\", \"Maldives\" ],\n\t[ \"818\", \"James\", \"Pearson\", \"94810\", \"Mexico\" ],\n\t[ \"819\", \"Igor\", \"Marshall\", \"Y8M 2D6\", \"Palau\" ],\n\t[ \"820\", \"Aquila\", \"Willis\", \"20354\", \"Samoa\" ],\n\t[ \"821\", \"Randall\", \"Sheppard\", \"73577\", \"Sierra Leone\" ],\n\t[ \"822\", \"Gray\", \"Myers\", \"53651\", \"Gibraltar\" ],\n\t[ \"823\", \"Dana\", \"Camacho\", \"89571\", \"Reunion\" ],\n\t[ \"824\", \"Berk\", \"Hopper\", \"17794\", \"Cook Islands\" ],\n\t[ \"825\", \"Shannon\", \"Barry\", \"70536\", \"Bouvet Island\" ],\n\t[ \"826\", \"Dahlia\", \"Herman\", \"F8L 1Q3\", \"Lesotho\" ],\n\t[ \"827\", \"Gillian\", \"Hayes\", \"O2C 7X8\", \"Tajikistan\" ],\n\t[ \"828\", \"Leo\", \"Bolton\", \"P6V 6E1\", \"Dominica\" ],\n\t[ \"829\", \"Vivien\", \"Best\", \"E5E 6N8\", \"Cuba\" ],\n\t[ \"830\", \"Clayton\", \"Bradley\", \"E7R 3M5\", \"Zimbabwe\" ],\n\t[ \"831\", \"Lesley\", \"Collins\", \"16592\", \"Mali\" ],\n\t[ \"832\", \"Holly\", \"Hensley\", \"49080\", \"Tunisia\" ],\n\t[ \"833\", \"Larissa\", \"Velazquez\", \"41068\", \"Haiti\" ],\n\t[ \"834\", \"Delilah\", \"Mejia\", \"A5I 9Q9\", \"Croatia\" ],\n\t[ \"835\", \"Drew\", \"Roberson\", \"U7E 3R1\", \"Somalia\" ],\n\t[ \"836\", \"Jenette\", \"Patel\", \"64084\", \"Denmark\" ],\n\t[ \"837\", \"Gillian\", \"Cleveland\", \"05659\", \"Syrian Arab Republic\" ],\n\t[ \"838\", \"Noelle\", \"Lara\", \"U1N 6V6\", \"Sri Lanka\" ],\n\t[ \"839\", \"Celeste\", \"Rollins\", \"26590\", \"Mayotte\" ],\n\t[ \"840\", \"Elvis\", \"Fletcher\", \"M8V 6J4\", \"Bahamas\" ],\n\t[ \"841\", \"Caesar\", \"Hays\", \"E3D 3T7\", \"Malta\" ],\n\t[ \"842\", \"Rama\", \"Weber\", \"25880\", \"Malta\" ],\n\t[ \"843\", \"Lael\", \"Page\", \"57135\", \"Anguilla\" ],\n\t[ \"844\", \"Omar\", \"Hammond\", \"90213\", \"Belarus\" ],\n\t[ \"845\", \"Simone\", \"Mcintosh\", \"L5P 1S0\", \"Bhutan\" ],\n\t[ \"846\", \"Gay\", \"Harper\", \"56404\", \"Virgin Islands, U.S.\" ],\n\t[ \"847\", \"Joel\", \"Holman\", \"C1F 1C4\", \"Saint Lucia\" ],\n\t[ \"848\", \"Clayton\", \"Pennington\", \"57003\", \"Kazakhstan\" ],\n\t[ \"849\", \"Susan\", \"Mckee\", \"I5U 8F2\", \"Taiwan, Province of China\" ],\n\t[ \"850\", \"Jenna\", \"Stein\", \"P2K 6L4\", \"Reunion\" ],\n\t[ \"851\", \"Madonna\", \"Joyner\", \"Q4Q 4K6\", \"Guadeloupe\" ],\n\t[ \"852\", \"Deirdre\", \"Ingram\", \"N7U 3N9\", \"Monaco\" ],\n\t[ \"853\", \"Juliet\", \"Hodges\", \"U2Q 2T0\", \"Uzbekistan\" ],\n\t[ \"854\", \"Naomi\", \"Rice\", \"O6T 2Z1\", \"Nicaragua\" ],\n\t[ \"855\", \"Leila\", \"Alvarado\", \"Z2V 7L3\", \"Suriname\" ],\n\t[ \"856\", \"George\", \"Leon\", \"L6M 1V2\", \"Norway\" ],\n\t[ \"857\", \"Rama\", \"Cruz\", \"Y2S 7K6\", \"Kenya\" ],\n\t[ \"858\", \"Clarke\", \"Mckinney\", \"34622\", \"Viet Nam\" ],\n\t[ \"859\", \"Savannah\", \"Bailey\", \"L3O 1U6\", \"Solomon Islands\" ],\n\t[ \"860\", \"Maxwell\", \"Gibson\", \"R9K 9Q1\", \"Virgin Islands, British\" ],\n\t[ \"861\", \"Devin\", \"Humphrey\", \"74821\", \"Costa Rica\" ],\n\t[ \"862\", \"Kadeem\", \"Larsen\", \"43178\", \"Luxembourg\" ],\n\t[ \"863\", \"Elvis\", \"Todd\", \"O3O 3G9\", \"Azerbaijan\" ],\n\t[ \"864\", \"Levi\", \"Montoya\", \"G1Y 1N8\", \"Venezuela\" ],\n\t[ \"865\", \"Risa\", \"Barnes\", \"86118\", \"Benin\" ],\n\t[ \"866\", \"Dillon\", \"Riggs\", \"O3Y 8V2\", \"Greenland\" ],\n\t[ \"867\", \"Stewart\", \"Marshall\", \"V8G 8S2\", \"Mexico\" ],\n\t[ \"868\", \"Camden\", \"Goff\", \"N3W 2L0\", \"Bahrain\" ],\n\t[ \"869\", \"Sheila\", \"Meadows\", \"T6K 7M2\", \"Yemen\" ],\n\t[ \"870\", \"Hop\", \"Berger\", \"Q8B 9R7\", \"Germany\" ],\n\t[ \"871\", \"Charissa\", \"Wilkerson\", \"08090\", \"Burundi\" ],\n\t[ \"872\", \"Raphael\", \"Carey\", \"03667\", \"United Kingdom\" ],\n\t[ \"873\", \"Micah\", \"Hood\", \"T9N 4T5\", \"Georgia\" ],\n\t[ \"874\", \"Cathleen\", \"Mccall\", \"N6H 6N3\", \"Tanzania, United Republic of\" ],\n\t[ \"875\", \"Lisandra\", \"Poole\", \"S7O 1J1\", \"Greece\" ],\n\t[ \"876\", \"Stone\", \"Blackwell\", \"90654\", \"Serbia and Montenegro\" ],\n\t[ \"877\", \"Serena\", \"Mann\", \"32305\", \"Trinidad and Tobago\" ],\n\t[ \"878\", \"Scarlet\", \"Turner\", \"D7Y 8N4\", \"Oman\" ],\n\t[ \"879\", \"Zenaida\", \"Carrillo\", \"60361\", \"Montserrat\" ],\n\t[ \"880\", \"Jaime\", \"Dalton\", \"F4E 6R5\", \"Iraq\" ],\n\t[ \"881\", \"Wesley\", \"Drake\", \"D8J 9U2\", \"Bulgaria\" ],\n\t[ \"882\", \"Armand\", \"Chandler\", \"X8Z 9E6\", \"Saint Kitts and Nevis\" ],\n\t[ \"883\", \"Inez\", \"Dillard\", \"59975\", \"Eritrea\" ],\n\t[ \"884\", \"Roanna\", \"Floyd\", \"65958\", \"Bolivia\" ],\n\t[ \"885\", \"Timon\", \"Dalton\", \"O3Q 5B5\", \"Colombia\" ],\n\t[ \"886\", \"Ifeoma\", \"Lamb\", \"J9A 9X0\", \"Papua New Guinea\" ],\n\t[ \"887\", \"Brody\", \"Cash\", \"75525\", \"Kazakhstan\" ],\n\t[ \"888\", \"Dawn\", \"Wise\", \"G7X 5J3\", \"Samoa\" ],\n\t[ \"889\", \"Chaney\", \"Bartlett\", \"11112\", \"Ecuador\" ],\n\t[ \"890\", \"Galvin\", \"Merritt\", \"59635\", \"Bahrain\" ],\n\t[ \"891\", \"Cynthia\", \"Nash\", \"U5P 1H4\", \"Switzerland\" ],\n\t[ \"892\", \"Tara\", \"Austin\", \"Q6X 8U0\", \"Burundi\" ],\n\t[ \"893\", \"Roanna\", \"Petty\", \"28524\", \"Northern Mariana Islands\" ],\n\t[ \"894\", \"Palmer\", \"Mcdowell\", \"78234\", \"United States Minor Outlying Islands\" ],\n\t[ \"895\", \"Sade\", \"Patton\", \"28984\", \"Czech Republic\" ],\n\t[ \"896\", \"Yoko\", \"Compton\", \"62165\", \"Saint Kitts and Nevis\" ],\n\t[ \"897\", \"Regan\", \"Mccarthy\", \"C5D 6G0\", \"Lebanon\" ],\n\t[ \"898\", \"Norman\", \"Nixon\", \"E4C 4G0\", \"Virgin Islands, U.S.\" ],\n\t[ \"899\", \"Jocelyn\", \"Baldwin\", \"X9R 2B3\", \"Macedonia\" ],\n\t[ \"900\", \"Jaquelyn\", \"Berg\", \"N6X 6E1\", \"Saint Lucia\" ],\n\t[ \"901\", \"Zane\", \"Nelson\", \"G9P 4J8\", \"Macao\" ],\n\t[ \"902\", \"Judith\", \"Elliott\", \"R4I 4O3\", \"Iraq\" ],\n\t[ \"903\", \"Maia\", \"Ellis\", \"S9V 6P0\", \"Bahrain\" ],\n\t[ \"904\", \"Mechelle\", \"Stevens\", \"43406\", \"Bouvet Island\" ],\n\t[ \"905\", \"Sylvester\", \"Duran\", \"K5D 8W5\", \"Costa Rica\" ],\n\t[ \"906\", \"Unity\", \"Cooke\", \"64362\", \"Ecuador\" ],\n\t[ \"907\", \"Karly\", \"Velazquez\", \"43286\", \"Guam\" ],\n\t[ \"908\", \"Damian\", \"Yates\", \"84910\", \"Thailand\" ],\n\t[ \"909\", \"Linus\", \"Gross\", \"31808\", \"Israel\" ],\n\t[ \"910\", \"Cooper\", \"Franco\", \"36700\", \"Yemen\" ],\n\t[ \"911\", \"Gail\", \"Jones\", \"09157\", \"Turkey\" ],\n\t[ \"912\", \"Hayfa\", \"Bennett\", \"59422\", \"France\" ],\n\t[ \"913\", \"Hermione\", \"Barber\", \"I6W 8Z5\", \"Mozambique\" ],\n\t[ \"914\", \"Hedy\", \"Stevens\", \"35535\", \"Cuba\" ],\n\t[ \"915\", \"Galvin\", \"Frederick\", \"J2W 9A3\", \"Virgin Islands, British\" ],\n\t[ \"916\", \"Lamar\", \"Rush\", \"P4O 3H4\", \"Austria\" ],\n\t[ \"917\", \"Brenda\", \"Walter\", \"K8Q 9H9\", \"Tajikistan\" ],\n\t[ \"918\", \"Ria\", \"Guy\", \"12801\", \"Gibraltar\" ],\n\t[ \"919\", \"Bruno\", \"Lynch\", \"I6U 7D0\", \"Greenland\" ],\n\t[ \"920\", \"Kirk\", \"Pearson\", \"66242\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"921\", \"Owen\", \"Sosa\", \"61483\", \"Martinique\" ],\n\t[ \"922\", \"Rajah\", \"Mccarty\", \"G9K 6L2\", \"Faroe Islands\" ],\n\t[ \"923\", \"Erasmus\", \"Malone\", \"D6H 7H5\", \"Sierra Leone\" ],\n\t[ \"924\", \"Raja\", \"Hale\", \"85590\", \"Guadeloupe\" ],\n\t[ \"925\", \"Logan\", \"Christensen\", \"Y6L 8Z0\", \"Guatemala\" ],\n\t[ \"926\", \"Kirestin\", \"Griffith\", \"47900\", \"Micronesia\" ],\n\t[ \"927\", \"Kato\", \"Reeves\", \"93779\", \"Uruguay\" ],\n\t[ \"928\", \"Jonah\", \"Suarez\", \"13708\", \"Spain\" ],\n\t[ \"929\", \"Adam\", \"Lynn\", \"E1P 1L3\", \"Indonesia\" ],\n\t[ \"930\", \"Quinn\", \"Mckinney\", \"99683\", \"Faroe Islands\" ],\n\t[ \"931\", \"Whilemina\", \"Macias\", \"32145\", \"Iceland\" ],\n\t[ \"932\", \"Gillian\", \"Osborne\", \"L3L 6G0\", \"Italy\" ],\n\t[ \"933\", \"Venus\", \"Zamora\", \"28318\", \"Comoros\" ],\n\t[ \"934\", \"Allegra\", \"Eaton\", \"P5X 9S0\", \"Antarctica\" ],\n\t[ \"935\", \"Driscoll\", \"Preston\", \"R3L 9R0\", \"Niue\" ],\n\t[ \"936\", \"Joel\", \"Spencer\", \"12006\", \"Monaco\" ],\n\t[ \"937\", \"Lucius\", \"Sharp\", \"B8V 6U7\", \"Dominica\" ],\n\t[ \"938\", \"Curran\", \"Robinson\", \"82216\", \"Romania\" ],\n\t[ \"939\", \"Kerry\", \"Espinoza\", \"N4B 7Q1\", \"Guatemala\" ],\n\t[ \"940\", \"Isaac\", \"Kline\", \"85674\", \"Costa Rica\" ],\n\t[ \"941\", \"Neil\", \"Harrison\", \"I5A 2S2\", \"Greenland\" ],\n\t[ \"942\", \"Ezra\", \"Rodriguez\", \"D6P 5Q3\", \"Angola\" ],\n\t[ \"943\", \"Galvin\", \"Jefferson\", \"D6H 7G0\", \"Macedonia\" ],\n\t[ \"944\", \"Joseph\", \"Hahn\", \"Z8V 9B5\", \"Uganda\" ],\n\t[ \"945\", \"Naida\", \"Hammond\", \"40105\", \"Philippines\" ],\n\t[ \"946\", \"Brenna\", \"Everett\", \"41704\", \"Indonesia\" ],\n\t[ \"947\", \"Rae\", \"Parks\", \"79077\", \"Sweden\" ],\n\t[ \"948\", \"Jessica\", \"Richard\", \"Y3I 5R3\", \"Uganda\" ],\n\t[ \"949\", \"Rachel\", \"Marks\", \"16157\", \"Cameroon\" ],\n\t[ \"950\", \"Maxwell\", \"Ferguson\", \"V6A 6M0\", \"Ukraine\" ],\n\t[ \"951\", \"Alyssa\", \"Beard\", \"13936\", \"Antarctica\" ],\n\t[ \"952\", \"Camille\", \"Gill\", \"V9Q 9P7\", \"New Caledonia\" ],\n\t[ \"953\", \"Cora\", \"Bond\", \"M9X 1A4\", \"Seychelles\" ],\n\t[ \"954\", \"Peter\", \"Acosta\", \"07937\", \"Chile\" ],\n\t[ \"955\", \"Ella\", \"Poole\", \"A3F 9Z1\", \"Panama\" ],\n\t[ \"956\", \"Ashely\", \"Guerrero\", \"37436\", \"Central African Republic\" ],\n\t[ \"957\", \"Mikayla\", \"Johnston\", \"L9W 5T8\", \"Cameroon\" ],\n\t[ \"958\", \"Ora\", \"Weaver\", \"65897\", \"Turks and Caicos Islands\" ],\n\t[ \"959\", \"Timon\", \"Barnes\", \"R6J 1J7\", \"Djibouti\" ],\n\t[ \"960\", \"Jamalia\", \"Wade\", \"22211\", \"United States\" ],\n\t[ \"961\", \"Bradley\", \"Haney\", \"K1H 1Q1\", \"Western Sahara\" ],\n\t[ \"962\", \"Lance\", \"Le\", \"H4R 9T7\", \"Botswana\" ],\n\t[ \"963\", \"Ethan\", \"Rich\", \"T8N 1C6\", \"Netherlands\" ],\n\t[ \"964\", \"Jeanette\", \"Carver\", \"G1E 5C8\", \"Cook Islands\" ],\n\t[ \"965\", \"Ocean\", \"Marquez\", \"15084\", \"Pakistan\" ],\n\t[ \"966\", \"Ifeoma\", \"Cleveland\", \"R9D 6M1\", \"French Guiana\" ],\n\t[ \"967\", \"Sylvia\", \"Herring\", \"U4R 8P1\", \"Thailand\" ],\n\t[ \"968\", \"Clare\", \"Huffman\", \"Q5G 2Q0\", \"Niger\" ],\n\t[ \"969\", \"Colton\", \"Leach\", \"V3F 9W6\", \"Syrian Arab Republic\" ],\n\t[ \"970\", \"Maryam\", \"Hoover\", \"Y7U 6N3\", \"Slovakia\" ],\n\t[ \"971\", \"Nola\", \"Snider\", \"54275\", \"Bosnia and Herzegovina\" ],\n\t[ \"972\", \"Kameko\", \"Cote\", \"M3C 8N0\", \"Cambodia\" ],\n\t[ \"973\", \"Julian\", \"Pugh\", \"B6E 7J7\", \"Mauritania\" ],\n\t[ \"974\", \"Xena\", \"Lott\", \"52294\", \"Estonia\" ],\n\t[ \"975\", \"Fuller\", \"Kirk\", \"65396\", \"Qatar\" ],\n\t[ \"976\", \"Lance\", \"Knox\", \"78074\", \"Serbia and Montenegro\" ],\n\t[ \"977\", \"Hedwig\", \"Beck\", \"T5P 4C8\", \"Dominican Republic\" ],\n\t[ \"978\", \"Martena\", \"Diaz\", \"65420\", \"Saint Pierre and Miquelon\" ],\n\t[ \"979\", \"Shafira\", \"David\", \"74843\", \"Senegal\" ],\n\t[ \"980\", \"Shafira\", \"Clark\", \"T6F 5C7\", \"Mongolia\" ],\n\t[ \"981\", \"Georgia\", \"Booth\", \"28183\", \"Japan\" ],\n\t[ \"982\", \"Cameron\", \"Austin\", \"I2J 1R1\", \"Bahrain\" ],\n\t[ \"983\", \"Vanna\", \"Hyde\", \"82434\", \"Croatia\" ],\n\t[ \"984\", \"Deanna\", \"Park\", \"68486\", \"Zimbabwe\" ],\n\t[ \"985\", \"Grady\", \"Freeman\", \"U4O 1Q9\", \"Belarus\" ],\n\t[ \"986\", \"Sandra\", \"Knapp\", \"31413\", \"Sudan\" ],\n\t[ \"987\", \"Dorian\", \"Joseph\", \"90768\", \"Lithuania\" ],\n\t[ \"988\", \"Adria\", \"Bonner\", \"15899\", \"Mongolia\" ],\n\t[ \"989\", \"Sebastian\", \"Guzman\", \"G9L 9G5\", \"Yemen\" ],\n\t[ \"990\", \"Angelica\", \"Puckett\", \"W8D 8W8\", \"Virgin Islands, U.S.\" ],\n\t[ \"991\", \"Connor\", \"Parks\", \"26175\", \"Virgin Islands, U.S.\" ],\n\t[ \"992\", \"Yardley\", \"Griffith\", \"H3L 2U3\", \"Saint Pierre and Miquelon\" ],\n\t[ \"993\", \"Charissa\", \"Beck\", \"30611\", \"Zambia\" ],\n\t[ \"994\", \"Calvin\", \"Russo\", \"79906\", \"Chile\" ],\n\t[ \"995\", \"Yoshi\", \"Durham\", \"N2J 8M8\", \"China\" ],\n\t[ \"996\", \"Finn\", \"Buck\", \"Q9F 9Z8\", \"Iraq\" ],\n\t[ \"997\", \"Kessie\", \"Holden\", \"C4A 1J0\", \"Syrian Arab Republic\" ],\n\t[ \"998\", \"Chloe\", \"Richards\", \"63091\", \"Canada\" ],\n\t[ \"999\", \"Uriel\", \"Snyder\", \"95487\", \"Pakistan\" ],\n\t[ \"1000\", \"Maite\", \"Cash\", \"90705\", \"Syrian Arab Republic\" ],\n\t[ \"1001\", \"Cameron\", \"Schwartz\", \"82778\", \"Taiwan, Province of China\" ],\n\t[ \"1002\", \"Faith\", \"Jimenez\", \"J6K 2P9\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1003\", \"Otto\", \"Hancock\", \"34535\", \"Andorra\" ],\n\t[ \"1004\", \"Harlan\", \"Blackwell\", \"N8Y 4E6\", \"Qatar\" ],\n\t[ \"1005\", \"Fitzgerald\", \"Gilliam\", \"Y9J 6J5\", \"Burkina Faso\" ],\n\t[ \"1006\", \"Lev\", \"Ballard\", \"01956\", \"American Samoa\" ],\n\t[ \"1007\", \"Freya\", \"Brown\", \"01190\", \"Portugal\" ],\n\t[ \"1008\", \"Harding\", \"Osborn\", \"14814\", \"San Marino\" ],\n\t[ \"1009\", \"Alexander\", \"Howard\", \"81842\", \"Reunion\" ],\n\t[ \"1010\", \"Ori\", \"Marsh\", \"77738\", \"Saint Helena\" ],\n\t[ \"1011\", \"Brennan\", \"Rich\", \"18690\", \"Cambodia\" ],\n\t[ \"1012\", \"Dawn\", \"Christensen\", \"Y8F 7R3\", \"Mali\" ],\n\t[ \"1013\", \"Ahmed\", \"Pearson\", \"62230\", \"Sudan\" ],\n\t[ \"1014\", \"Tanek\", \"Head\", \"25744\", \"Kiribati\" ],\n\t[ \"1015\", \"Meredith\", \"Cantu\", \"E6X 2L1\", \"Kenya\" ],\n\t[ \"1016\", \"Levi\", \"Fisher\", \"I9Y 9G2\", \"Djibouti\" ],\n\t[ \"1017\", \"Katell\", \"Cameron\", \"10278\", \"Denmark\" ],\n\t[ \"1018\", \"Ina\", \"Orr\", \"P7H 2O3\", \"Congo\" ],\n\t[ \"1019\", \"Beck\", \"Hayden\", \"15115\", \"Saint Lucia\" ],\n\t[ \"1020\", \"Cassady\", \"Wagner\", \"R9H 8C5\", \"Estonia\" ],\n\t[ \"1021\", \"Amena\", \"Herrera\", \"13286\", \"Bahrain\" ],\n\t[ \"1022\", \"Tarik\", \"Gross\", \"C3X 3W0\", \"Azerbaijan\" ],\n\t[ \"1023\", \"Marshall\", \"Collier\", \"13416\", \"Dominica\" ],\n\t[ \"1024\", \"Kirestin\", \"Callahan\", \"15429\", \"Micronesia\" ],\n\t[ \"1025\", \"Sasha\", \"Rice\", \"O6H 6X2\", \"Denmark\" ],\n\t[ \"1026\", \"Ross\", \"Gonzalez\", \"D3B 3R5\", \"Sudan\" ],\n\t[ \"1027\", \"Veda\", \"Arnold\", \"56611\", \"Swaziland\" ],\n\t[ \"1028\", \"Ferdinand\", \"Macias\", \"P1Q 3I2\", \"Colombia\" ],\n\t[ \"1029\", \"Mohammad\", \"Reed\", \"74005\", \"Bhutan\" ],\n\t[ \"1030\", \"Reagan\", \"Sandoval\", \"19275\", \"Pitcairn\" ],\n\t[ \"1031\", \"Debra\", \"Nelson\", \"85945\", \"Ukraine\" ],\n\t[ \"1032\", \"Cleo\", \"Robertson\", \"84072\", \"Guadeloupe\" ],\n\t[ \"1033\", \"Tanya\", \"Vance\", \"C1F 7F1\", \"Romania\" ],\n\t[ \"1034\", \"Desirae\", \"Wooten\", \"74659\", \"Mongolia\" ],\n\t[ \"1035\", \"Hiram\", \"Estes\", \"Q5Z 5A0\", \"Namibia\" ],\n\t[ \"1036\", \"Medge\", \"Weiss\", \"67079\", \"Azerbaijan\" ],\n\t[ \"1037\", \"Hu\", \"Chase\", \"87562\", \"Cuba\" ],\n\t[ \"1038\", \"Shafira\", \"Everett\", \"18983\", \"Georgia\" ],\n\t[ \"1039\", \"Mannix\", \"Lamb\", \"45542\", \"Venezuela\" ],\n\t[ \"1040\", \"Germaine\", \"Harvey\", \"I9G 1U0\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1041\", \"Brenna\", \"Leonard\", \"55573\", \"New Zealand\" ],\n\t[ \"1042\", \"Kylie\", \"Rivas\", \"U9J 3O9\", \"Djibouti\" ],\n\t[ \"1043\", \"Alexandra\", \"Rich\", \"T4O 6S6\", \"Cuba\" ],\n\t[ \"1044\", \"Dorian\", \"Spears\", \"00456\", \"Brazil\" ],\n\t[ \"1045\", \"Laurel\", \"Abbott\", \"45449\", \"Switzerland\" ],\n\t[ \"1046\", \"Gabriel\", \"Drake\", \"U1S 5O2\", \"Trinidad and Tobago\" ],\n\t[ \"1047\", \"Priscilla\", \"Mercer\", \"01401\", \"Serbia and Montenegro\" ],\n\t[ \"1048\", \"Darius\", \"Hoffman\", \"49694\", \"Greece\" ],\n\t[ \"1049\", \"Caesar\", \"Patton\", \"42322\", \"Suriname\" ],\n\t[ \"1050\", \"Susan\", \"Clayton\", \"W1G 5C3\", \"Maldives\" ],\n\t[ \"1051\", \"Zane\", \"Dunlap\", \"73722\", \"Oman\" ],\n\t[ \"1052\", \"Leah\", \"Fuentes\", \"60412\", \"Luxembourg\" ],\n\t[ \"1053\", \"Yardley\", \"Hansen\", \"03194\", \"Mauritius\" ],\n\t[ \"1054\", \"Ingrid\", \"Talley\", \"37315\", \"Solomon Islands\" ],\n\t[ \"1055\", \"Demetria\", \"Evans\", \"30587\", \"Tajikistan\" ],\n\t[ \"1056\", \"Ignacia\", \"Alford\", \"01282\", \"Bouvet Island\" ],\n\t[ \"1057\", \"Destiny\", \"Wade\", \"L5R 3V3\", \"Uganda\" ],\n\t[ \"1058\", \"Alden\", \"Mason\", \"V7D 2V6\", \"Dominican Republic\" ],\n\t[ \"1059\", \"Pamela\", \"Wilcox\", \"L1I 6I1\", \"Canada\" ],\n\t[ \"1060\", \"Melvin\", \"Buckley\", \"05478\", \"Hungary\" ],\n\t[ \"1061\", \"Eve\", \"Holcomb\", \"B6B 8T1\", \"Cook Islands\" ],\n\t[ \"1062\", \"Arthur\", \"Weeks\", \"R5P 7U2\", \"Bangladesh\" ],\n\t[ \"1063\", \"Marah\", \"Levine\", \"10075\", \"Somalia\" ],\n\t[ \"1064\", \"Keiko\", \"Freeman\", \"90950\", \"Faroe Islands\" ],\n\t[ \"1065\", \"Dorian\", \"Rose\", \"T5M 4Z0\", \"Fiji\" ],\n\t[ \"1066\", \"Desirae\", \"Velez\", \"T4E 8K2\", \"Afghanistan\" ],\n\t[ \"1067\", \"Rebekah\", \"Lucas\", \"T9A 8V5\", \"Tunisia\" ],\n\t[ \"1068\", \"Sylvester\", \"Copeland\", \"W6R 3B6\", \"Jamaica\" ],\n\t[ \"1069\", \"Alea\", \"Preston\", \"31050\", \"Netherlands Antilles\" ],\n\t[ \"1070\", \"Aphrodite\", \"Gordon\", \"T7C 6T8\", \"Sao Tome and Principe\" ],\n\t[ \"1071\", \"Yael\", \"Delaney\", \"G9W 9P1\", \"Mexico\" ],\n\t[ \"1072\", \"Sierra\", \"Perez\", \"R3O 8H0\", \"Slovenia\" ],\n\t[ \"1073\", \"Avram\", \"Briggs\", \"05221\", \"Norfolk Island\" ],\n\t[ \"1074\", \"Troy\", \"Poole\", \"W7Q 8O5\", \"Malta\" ],\n\t[ \"1075\", \"Gavin\", \"Sandoval\", \"37352\", \"Greece\" ],\n\t[ \"1076\", \"Nerea\", \"Stokes\", \"N2Q 6S9\", \"United States\" ],\n\t[ \"1077\", \"Genevieve\", \"Ramirez\", \"53829\", \"Mali\" ],\n\t[ \"1078\", \"Oliver\", \"Boone\", \"M1Q 8V9\", \"Bolivia\" ],\n\t[ \"1079\", \"Lars\", \"Ramirez\", \"L2R 6V2\", \"Bosnia and Herzegovina\" ],\n\t[ \"1080\", \"Abbot\", \"Horton\", \"R1R 1V8\", \"Netherlands Antilles\" ],\n\t[ \"1081\", \"Abra\", \"Avila\", \"41608\", \"Congo\" ],\n\t[ \"1082\", \"Candice\", \"Christian\", \"13930\", \"Faroe Islands\" ],\n\t[ \"1083\", \"Flavia\", \"Miranda\", \"93964\", \"Estonia\" ],\n\t[ \"1084\", \"Medge\", \"Drake\", \"Q7C 2E2\", \"Belize\" ],\n\t[ \"1085\", \"Lee\", \"Montgomery\", \"H3T 4Q6\", \"Costa Rica\" ],\n\t[ \"1086\", \"Aline\", \"Ratliff\", \"99839\", \"Macao\" ],\n\t[ \"1087\", \"Shafira\", \"Fox\", \"A9S 7C8\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1088\", \"Orson\", \"Greene\", \"K9L 7R8\", \"Myanmar\" ],\n\t[ \"1089\", \"Henry\", \"Joyner\", \"55853\", \"South Africa\" ],\n\t[ \"1090\", \"Keely\", \"Boyer\", \"08996\", \"Liberia\" ],\n\t[ \"1091\", \"Jerome\", \"Jones\", \"31770\", \"Saint Lucia\" ],\n\t[ \"1092\", \"Hermione\", \"Dunlap\", \"U2R 7R2\", \"Moldova\" ],\n\t[ \"1093\", \"Lenore\", \"Powers\", \"73772\", \"Tunisia\" ],\n\t[ \"1094\", \"Alden\", \"Newman\", \"V4C 3O8\", \"Bhutan\" ],\n\t[ \"1095\", \"Jasper\", \"Blevins\", \"K2H 5W0\", \"Paraguay\" ],\n\t[ \"1096\", \"Robert\", \"Bender\", \"R5F 1H9\", \"Philippines\" ],\n\t[ \"1097\", \"Bo\", \"Richard\", \"N5R 6T2\", \"Trinidad and Tobago\" ],\n\t[ \"1098\", \"Iliana\", \"Mcpherson\", \"23758\", \"Bangladesh\" ],\n\t[ \"1099\", \"Alfreda\", \"Camacho\", \"35387\", \"Saint Helena\" ],\n\t[ \"1100\", \"Kirsten\", \"Giles\", \"14079\", \"Romania\" ],\n\t[ \"1101\", \"Harlan\", \"Crawford\", \"84847\", \"French Polynesia\" ],\n\t[ \"1102\", \"Wynne\", \"Bauer\", \"W9D 6F6\", \"Kazakhstan\" ],\n\t[ \"1103\", \"Connor\", \"Melton\", \"E2F 4Q2\", \"Angola\" ],\n\t[ \"1104\", \"Evelyn\", \"Barry\", \"I9H 8W7\", \"Turkmenistan\" ],\n\t[ \"1105\", \"Barry\", \"Stephens\", \"07823\", \"Gibraltar\" ],\n\t[ \"1106\", \"Ferris\", \"Farrell\", \"I7H 5Z6\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1107\", \"Ursa\", \"Carr\", \"31124\", \"Chad\" ],\n\t[ \"1108\", \"Laith\", \"Johnson\", \"10428\", \"Cyprus\" ],\n\t[ \"1109\", \"Harlan\", \"Frank\", \"J6K 7I6\", \"Gambia\" ],\n\t[ \"1110\", \"Gregory\", \"Ratliff\", \"P1C 8H2\", \"Chile\" ],\n\t[ \"1111\", \"Rina\", \"Holloway\", \"Y7N 1E7\", \"Estonia\" ],\n\t[ \"1112\", \"Maris\", \"Joyner\", \"T6R 2H9\", \"France\" ],\n\t[ \"1113\", \"Galvin\", \"Webster\", \"V8E 9U4\", \"Croatia\" ],\n\t[ \"1114\", \"Farrah\", \"Bean\", \"H2B 8E2\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1115\", \"Martha\", \"Schroeder\", \"14485\", \"Georgia\" ],\n\t[ \"1116\", \"Mari\", \"Boone\", \"D4C 1Q0\", \"Comoros\" ],\n\t[ \"1117\", \"Nadine\", \"Mercado\", \"35046\", \"Syrian Arab Republic\" ],\n\t[ \"1118\", \"Isadora\", \"Keith\", \"R5H 8Y7\", \"Mayotte\" ],\n\t[ \"1119\", \"Quinn\", \"William\", \"V8Q 3Y6\", \"India\" ],\n\t[ \"1120\", \"Justina\", \"Gilbert\", \"11271\", \"Yemen\" ],\n\t[ \"1121\", \"Jordan\", \"Hull\", \"F4Z 7R8\", \"Lesotho\" ],\n\t[ \"1122\", \"Mechelle\", \"Davenport\", \"A9Z 8P2\", \"Bermuda\" ],\n\t[ \"1123\", \"Isabelle\", \"Webster\", \"60972\", \"Zimbabwe\" ],\n\t[ \"1124\", \"Armand\", \"Butler\", \"Y3F 4H9\", \"Nicaragua\" ],\n\t[ \"1125\", \"Herman\", \"Beach\", \"Q8N 6V3\", \"Cape Verde\" ],\n\t[ \"1126\", \"Brianna\", \"Love\", \"D9B 2W8\", \"Sierra Leone\" ],\n\t[ \"1127\", \"Joy\", \"Brown\", \"O7V 7C1\", \"Djibouti\" ],\n\t[ \"1128\", \"Amena\", \"Moss\", \"P8D 1L9\", \"Andorra\" ],\n\t[ \"1129\", \"Zeph\", \"Whitehead\", \"01513\", \"Tanzania, United Republic of\" ],\n\t[ \"1130\", \"Logan\", \"Matthews\", \"73541\", \"Finland\" ],\n\t[ \"1131\", \"Amela\", \"Gregory\", \"65323\", \"Swaziland\" ],\n\t[ \"1132\", \"Zoe\", \"Owen\", \"V5L 5O6\", \"Zambia\" ],\n\t[ \"1133\", \"September\", \"Hewitt\", \"R8K 4G9\", \"Congo\" ],\n\t[ \"1134\", \"Holly\", \"Walter\", \"S2E 3M4\", \"Serbia and Montenegro\" ],\n\t[ \"1135\", \"Zeph\", \"Beach\", \"J6Z 8B5\", \"Ecuador\" ],\n\t[ \"1136\", \"Morgan\", \"Decker\", \"M9H 8I5\", \"Uruguay\" ],\n\t[ \"1137\", \"Malcolm\", \"Maldonado\", \"S6F 8X6\", \"Netherlands\" ],\n\t[ \"1138\", \"Fay\", \"Day\", \"B9R 1U7\", \"Seychelles\" ],\n\t[ \"1139\", \"Charles\", \"Juarez\", \"62791\", \"Virgin Islands, U.S.\" ],\n\t[ \"1140\", \"Amery\", \"Stout\", \"L9A 1F8\", \"Central African Republic\" ],\n\t[ \"1141\", \"Irene\", \"Ferrell\", \"52649\", \"Norway\" ],\n\t[ \"1142\", \"Dean\", \"Stout\", \"N5C 2S8\", \"Uruguay\" ],\n\t[ \"1143\", \"Eric\", \"Baxter\", \"82082\", \"Chile\" ],\n\t[ \"1144\", \"Shelley\", \"Larsen\", \"Y4T 4P3\", \"Antarctica\" ],\n\t[ \"1145\", \"Rigel\", \"Ellis\", \"E3S 6K8\", \"Zimbabwe\" ],\n\t[ \"1146\", \"Maite\", \"Rosa\", \"F6C 5Q9\", \"Zambia\" ],\n\t[ \"1147\", \"Serena\", \"Blanchard\", \"99373\", \"Estonia\" ],\n\t[ \"1148\", \"Melanie\", \"Berger\", \"C5P 4E2\", \"Mozambique\" ],\n\t[ \"1149\", \"Noah\", \"Spence\", \"B8H 7X7\", \"Martinique\" ],\n\t[ \"1150\", \"Elliott\", \"Pierce\", \"W5B 8V7\", \"Swaziland\" ],\n\t[ \"1151\", \"Ahmed\", \"Chang\", \"E9X 7J0\", \"Bulgaria\" ],\n\t[ \"1152\", \"Ross\", \"Figueroa\", \"22458\", \"China\" ],\n\t[ \"1153\", \"Gary\", \"Calderon\", \"V3C 4J8\", \"Algeria\" ],\n\t[ \"1154\", \"Montana\", \"Franklin\", \"94093\", \"Haiti\" ],\n\t[ \"1155\", \"Rae\", \"Curry\", \"45477\", \"Morocco\" ],\n\t[ \"1156\", \"Jillian\", \"Hogan\", \"N8L 4B5\", \"Iceland\" ],\n\t[ \"1157\", \"Mia\", \"Kaufman\", \"54758\", \"Burkina Faso\" ],\n\t[ \"1158\", \"Remedios\", \"Wilkerson\", \"75420\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1159\", \"Xanthus\", \"Baldwin\", \"13961\", \"Congo\" ],\n\t[ \"1160\", \"Madeline\", \"Gates\", \"76351\", \"Saint Helena\" ],\n\t[ \"1161\", \"Leroy\", \"Craig\", \"12770\", \"Finland\" ],\n\t[ \"1162\", \"Melanie\", \"Carpenter\", \"C3B 8L4\", \"Mayotte\" ],\n\t[ \"1163\", \"Ashely\", \"Mcneil\", \"E7E 9K5\", \"French Southern Territories\" ],\n\t[ \"1164\", \"Karina\", \"Mcneil\", \"39956\", \"United Arab Emirates\" ],\n\t[ \"1165\", \"Nina\", \"Mills\", \"92913\", \"Saint Kitts and Nevis\" ],\n\t[ \"1166\", \"Ashton\", \"Singleton\", \"73890\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1167\", \"Meghan\", \"Black\", \"31814\", \"Armenia\" ],\n\t[ \"1168\", \"Jolene\", \"Pope\", \"U6K 7O6\", \"Venezuela\" ],\n\t[ \"1169\", \"Abel\", \"Boyd\", \"37110\", \"Botswana\" ],\n\t[ \"1170\", \"Tiger\", \"Coffey\", \"Y6P 3S4\", \"Faroe Islands\" ],\n\t[ \"1171\", \"Aileen\", \"Rowe\", \"F7G 8D9\", \"Netherlands Antilles\" ],\n\t[ \"1172\", \"Bryar\", \"Forbes\", \"T2N 5H6\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1173\", \"Vera\", \"Hoffman\", \"36299\", \"Guadeloupe\" ],\n\t[ \"1174\", \"Hadassah\", \"Wright\", \"S8J 5B2\", \"Peru\" ],\n\t[ \"1175\", \"Bruce\", \"Blair\", \"Q8E 7K6\", \"Cape Verde\" ],\n\t[ \"1176\", \"Brianna\", \"Wolf\", \"V8S 5A6\", \"Bahamas\" ],\n\t[ \"1177\", \"Kimberley\", \"Reed\", \"17652\", \"Tajikistan\" ],\n\t[ \"1178\", \"Colin\", \"Phelps\", \"42334\", \"Brunei Darussalam\" ],\n\t[ \"1179\", \"Gil\", \"Britt\", \"U3N 6C2\", \"Swaziland\" ],\n\t[ \"1180\", \"Hasad\", \"Pena\", \"09526\", \"United States\" ],\n\t[ \"1181\", \"Violet\", \"Dixon\", \"48691\", \"Micronesia\" ],\n\t[ \"1182\", \"Uriel\", \"Bowen\", \"Z7F 7A7\", \"Uzbekistan\" ],\n\t[ \"1183\", \"Madeline\", \"Keller\", \"18227\", \"Iran, Islamic Republic of\" ],\n\t[ \"1184\", \"Buffy\", \"Mckee\", \"23861\", \"Ethiopia\" ],\n\t[ \"1185\", \"Doris\", \"Martin\", \"V8N 8O7\", \"Liberia\" ],\n\t[ \"1186\", \"Mia\", \"Burke\", \"64582\", \"Virgin Islands, British\" ],\n\t[ \"1187\", \"William\", \"Kemp\", \"63587\", \"Tuvalu\" ],\n\t[ \"1188\", \"Stacy\", \"Quinn\", \"01390\", \"Nauru\" ],\n\t[ \"1189\", \"Halla\", \"Solomon\", \"31138\", \"Pakistan\" ],\n\t[ \"1190\", \"Kasimir\", \"Rodriguez\", \"67823\", \"Costa Rica\" ],\n\t[ \"1191\", \"Davis\", \"Lawrence\", \"27918\", \"Rwanda\" ],\n\t[ \"1192\", \"Nigel\", \"Bryan\", \"L5U 2U9\", \"Seychelles\" ],\n\t[ \"1193\", \"Ivana\", \"Stone\", \"94862\", \"Niue\" ],\n\t[ \"1194\", \"Naomi\", \"Yang\", \"68985\", \"Haiti\" ],\n\t[ \"1195\", \"Roanna\", \"Brown\", \"51196\", \"India\" ],\n\t[ \"1196\", \"Colorado\", \"Chavez\", \"45634\", \"Brazil\" ],\n\t[ \"1197\", \"Illana\", \"Levy\", \"V1A 7R8\", \"Jordan\" ],\n\t[ \"1198\", \"Ali\", \"Lowe\", \"N8K 1Y5\", \"Hungary\" ],\n\t[ \"1199\", \"Virginia\", \"Witt\", \"Y3O 5W8\", \"Azerbaijan\" ],\n\t[ \"1200\", \"Howard\", \"Flores\", \"I9C 3Q7\", \"Fiji\" ],\n\t[ \"1201\", \"Walter\", \"Odom\", \"78418\", \"Thailand\" ],\n\t[ \"1202\", \"Thor\", \"Craig\", \"00935\", \"Jamaica\" ],\n\t[ \"1203\", \"Petra\", \"Barry\", \"E5L 5K5\", \"Finland\" ],\n\t[ \"1204\", \"Lev\", \"Ellison\", \"I6S 1K1\", \"Mongolia\" ],\n\t[ \"1205\", \"Roth\", \"Osborne\", \"15014\", \"Swaziland\" ],\n\t[ \"1206\", \"Lucius\", \"Baldwin\", \"12766\", \"China\" ],\n\t[ \"1207\", \"Candice\", \"Hyde\", \"B5E 4B8\", \"Bahamas\" ],\n\t[ \"1208\", \"Maggy\", \"Bailey\", \"76781\", \"Northern Mariana Islands\" ],\n\t[ \"1209\", \"Beatrice\", \"Gregory\", \"S5S 8S4\", \"Rwanda\" ],\n\t[ \"1210\", \"Adrian\", \"Bowman\", \"58500\", \"Vanuatu\" ],\n\t[ \"1211\", \"Brenden\", \"Chandler\", \"50326\", \"Thailand\" ],\n\t[ \"1212\", \"Jada\", \"Richmond\", \"15990\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"1213\", \"Sawyer\", \"Page\", \"G2W 7R7\", \"Somalia\" ],\n\t[ \"1214\", \"Haley\", \"Jordan\", \"U7X 4U2\", \"Equatorial Guinea\" ],\n\t[ \"1215\", \"Ruby\", \"Watson\", \"30990\", \"Romania\" ],\n\t[ \"1216\", \"Jocelyn\", \"Knowles\", \"78987\", \"Lebanon\" ],\n\t[ \"1217\", \"Preston\", \"Stevenson\", \"F3L 9B3\", \"Mali\" ],\n\t[ \"1218\", \"Kimberly\", \"Merritt\", \"38779\", \"Venezuela\" ],\n\t[ \"1219\", \"Herrod\", \"Burke\", \"56225\", \"French Guiana\" ],\n\t[ \"1220\", \"Solomon\", \"Shannon\", \"67980\", \"Cape Verde\" ],\n\t[ \"1221\", \"Bradley\", \"Stokes\", \"10213\", \"Botswana\" ],\n\t[ \"1222\", \"Grace\", \"Kinney\", \"67923\", \"Montserrat\" ],\n\t[ \"1223\", \"Celeste\", \"Clark\", \"S7M 6I2\", \"Guatemala\" ],\n\t[ \"1224\", \"Patricia\", \"Frank\", \"05615\", \"Venezuela\" ],\n\t[ \"1225\", \"Madonna\", \"Alford\", \"10878\", \"Brunei Darussalam\" ],\n\t[ \"1226\", \"May\", \"Rios\", \"N7O 2L0\", \"Georgia\" ],\n\t[ \"1227\", \"Driscoll\", \"Roach\", \"Y7F 9F8\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1228\", \"Idona\", \"Cruz\", \"T6Q 8L4\", \"Iraq\" ],\n\t[ \"1229\", \"Sydney\", \"Delacruz\", \"69511\", \"United Arab Emirates\" ],\n\t[ \"1230\", \"Gillian\", \"Huff\", \"52624\", \"French Southern Territories\" ],\n\t[ \"1231\", \"Minerva\", \"Rosario\", \"29195\", \"Andorra\" ],\n\t[ \"1232\", \"Kerry\", \"Alvarado\", \"L3Q 2V5\", \"Portugal\" ],\n\t[ \"1233\", \"Amos\", \"Bass\", \"26389\", \"Holy See (Vatican City State)\" ],\n\t[ \"1234\", \"Deanna\", \"Parks\", \"57376\", \"Estonia\" ],\n\t[ \"1235\", \"Fitzgerald\", \"Green\", \"M3P 9N2\", \"Slovenia\" ],\n\t[ \"1236\", \"Sade\", \"Hinton\", \"35561\", \"Barbados\" ],\n\t[ \"1237\", \"Suki\", \"Parsons\", \"44591\", \"Syrian Arab Republic\" ],\n\t[ \"1238\", \"Orli\", \"Weeks\", \"K2W 9L4\", \"Peru\" ],\n\t[ \"1239\", \"Nicholas\", \"Copeland\", \"I5W 7A4\", \"French Guiana\" ],\n\t[ \"1240\", \"Guy\", \"Vang\", \"22277\", \"Pitcairn\" ],\n\t[ \"1241\", \"Hunter\", \"Goodman\", \"72290\", \"Malaysia\" ],\n\t[ \"1242\", \"Noble\", \"Rich\", \"I3B 6T9\", \"Gibraltar\" ],\n\t[ \"1243\", \"Delilah\", \"Zamora\", \"96328\", \"New Zealand\" ],\n\t[ \"1244\", \"Sybil\", \"Mercer\", \"93665\", \"Namibia\" ],\n\t[ \"1245\", \"Scarlett\", \"Brock\", \"Z2E 3J2\", \"Central African Republic\" ],\n\t[ \"1246\", \"Channing\", \"Alexander\", \"W5V 8D2\", \"San Marino\" ],\n\t[ \"1247\", \"Carolyn\", \"Boyle\", \"Q5Z 9E6\", \"Gabon\" ],\n\t[ \"1248\", \"Irene\", \"Jennings\", \"F3H 4O6\", \"Saint Helena\" ],\n\t[ \"1249\", \"Bianca\", \"Pratt\", \"66354\", \"Malaysia\" ],\n\t[ \"1250\", \"Dexter\", \"Cole\", \"56106\", \"French Southern Territories\" ],\n\t[ \"1251\", \"Berk\", \"Velez\", \"26759\", \"Lesotho\" ],\n\t[ \"1252\", \"Barrett\", \"Richardson\", \"59446\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1253\", \"Scarlet\", \"Jacobs\", \"G9A 7L6\", \"Dominica\" ],\n\t[ \"1254\", \"Aiko\", \"Brooks\", \"R6R 9E4\", \"Liberia\" ],\n\t[ \"1255\", \"Jacob\", \"Moore\", \"P2Y 6P3\", \"Cambodia\" ],\n\t[ \"1256\", \"Madeline\", \"Bishop\", \"D4I 2E7\", \"Dominican Republic\" ],\n\t[ \"1257\", \"Jarrod\", \"Evans\", \"C9O 7V7\", \"Taiwan, Province of China\" ],\n\t[ \"1258\", \"Beverly\", \"Witt\", \"64850\", \"Denmark\" ],\n\t[ \"1259\", \"Karyn\", \"Rhodes\", \"D6G 5Z3\", \"Cape Verde\" ],\n\t[ \"1260\", \"Imani\", \"Quinn\", \"01897\", \"Macao\" ],\n\t[ \"1261\", \"Athena\", \"Eaton\", \"03568\", \"Syrian Arab Republic\" ],\n\t[ \"1262\", \"Raymond\", \"Valdez\", \"21037\", \"Romania\" ],\n\t[ \"1263\", \"Christopher\", \"Ferguson\", \"64945\", \"Indonesia\" ],\n\t[ \"1264\", \"Latifah\", \"Harris\", \"91381\", \"Suriname\" ],\n\t[ \"1265\", \"Dacey\", \"Wagner\", \"81483\", \"Qatar\" ],\n\t[ \"1266\", \"Summer\", \"Myers\", \"H6A 1G5\", \"Angola\" ],\n\t[ \"1267\", \"Jasmine\", \"Rivera\", \"Y4W 8P2\", \"Virgin Islands, British\" ],\n\t[ \"1268\", \"Cairo\", \"Massey\", \"Q6Y 7A7\", \"Poland\" ],\n\t[ \"1269\", \"Jena\", \"Hill\", \"89480\", \"United States Minor Outlying Islands\" ],\n\t[ \"1270\", \"Ava\", \"Benson\", \"L9H 8V1\", \"Sri Lanka\" ],\n\t[ \"1271\", \"Gillian\", \"Mercado\", \"A9W 6V5\", \"Norway\" ],\n\t[ \"1272\", \"Peter\", \"Marquez\", \"I5B 3W9\", \"Guyana\" ],\n\t[ \"1273\", \"Price\", \"Coleman\", \"X8G 2S0\", \"Burkina Faso\" ],\n\t[ \"1274\", \"Shana\", \"Harper\", \"L2B 3U9\", \"Malaysia\" ],\n\t[ \"1275\", \"Serina\", \"Matthews\", \"58061\", \"Lithuania\" ],\n\t[ \"1276\", \"Aretha\", \"Bryant\", \"Y8J 7A5\", \"Tonga\" ],\n\t[ \"1277\", \"Wesley\", \"Craig\", \"20141\", \"Australia\" ],\n\t[ \"1278\", \"Martena\", \"Mercer\", \"P6X 2L9\", \"Sudan\" ],\n\t[ \"1279\", \"Tamara\", \"Dennis\", \"D3H 9R0\", \"Mali\" ],\n\t[ \"1280\", \"Phelan\", \"Pena\", \"D2H 2H7\", \"United States Minor Outlying Islands\" ],\n\t[ \"1281\", \"Rebecca\", \"Kinney\", \"B5Z 9S4\", \"Antarctica\" ],\n\t[ \"1282\", \"Josephine\", \"Delgado\", \"81010\", \"Algeria\" ],\n\t[ \"1283\", \"Kieran\", \"Estes\", \"70093\", \"Bermuda\" ],\n\t[ \"1284\", \"Tamara\", \"Williamson\", \"90905\", \"French Guiana\" ],\n\t[ \"1285\", \"Dora\", \"Serrano\", \"W8K 6R5\", \"Nauru\" ],\n\t[ \"1286\", \"Morgan\", \"Bass\", \"B6F 8R2\", \"Madagascar\" ],\n\t[ \"1287\", \"Margaret\", \"Austin\", \"D2C 2C1\", \"Belgium\" ],\n\t[ \"1288\", \"Nasim\", \"Berry\", \"J9X 7M5\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1289\", \"Jelani\", \"Rutledge\", \"34552\", \"Bolivia\" ],\n\t[ \"1290\", \"Cassady\", \"Hardin\", \"I2K 4H6\", \"Hong Kong\" ],\n\t[ \"1291\", \"Jenette\", \"Thornton\", \"44943\", \"Uganda\" ],\n\t[ \"1292\", \"Alexandra\", \"Sims\", \"93937\", \"Australia\" ],\n\t[ \"1293\", \"Ross\", \"Higgins\", \"61993\", \"Nicaragua\" ],\n\t[ \"1294\", \"Penelope\", \"Henson\", \"90344\", \"Trinidad and Tobago\" ],\n\t[ \"1295\", \"Yoshi\", \"Blackwell\", \"C8D 1T4\", \"Costa Rica\" ],\n\t[ \"1296\", \"Daria\", \"Rodriquez\", \"X3C 6L0\", \"Iceland\" ],\n\t[ \"1297\", \"Wesley\", \"Waller\", \"43947\", \"Myanmar\" ],\n\t[ \"1298\", \"Adam\", \"Hayden\", \"88969\", \"Italy\" ],\n\t[ \"1299\", \"Charity\", \"William\", \"46439\", \"Greece\" ],\n\t[ \"1300\", \"Ronan\", \"Hopper\", \"51955\", \"Zambia\" ],\n\t[ \"1301\", \"Geraldine\", \"Hatfield\", \"W9S 7T5\", \"Luxembourg\" ],\n\t[ \"1302\", \"Barry\", \"Nicholson\", \"79625\", \"Liechtenstein\" ],\n\t[ \"1303\", \"Donovan\", \"Ortiz\", \"68119\", \"Macao\" ],\n\t[ \"1304\", \"Jeanette\", \"Cooper\", \"D5P 9L2\", \"Sri Lanka\" ],\n\t[ \"1305\", \"Isadora\", \"Stephenson\", \"P4X 4H5\", \"Mauritania\" ],\n\t[ \"1306\", \"Hall\", \"Hays\", \"J2Z 2H1\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1307\", \"Idola\", \"Roberson\", \"89249\", \"Niue\" ],\n\t[ \"1308\", \"Olympia\", \"Dennis\", \"69498\", \"Guinea\" ],\n\t[ \"1309\", \"Naida\", \"Palmer\", \"19840\", \"Gambia\" ],\n\t[ \"1310\", \"Maxine\", \"Rollins\", \"87856\", \"Belize\" ],\n\t[ \"1311\", \"Rooney\", \"Phelps\", \"48424\", \"Italy\" ],\n\t[ \"1312\", \"Shelly\", \"Edwards\", \"O7O 1U4\", \"Mali\" ],\n\t[ \"1313\", \"Cassidy\", \"Holcomb\", \"98785\", \"Colombia\" ],\n\t[ \"1314\", \"Sybil\", \"Moran\", \"F3C 6E4\", \"Switzerland\" ],\n\t[ \"1315\", \"Mufutau\", \"Larson\", \"00276\", \"British Indian Ocean Territory\" ],\n\t[ \"1316\", \"Fiona\", \"Bryant\", \"U7Y 7N6\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1317\", \"Lenore\", \"Boyle\", \"H5G 6P9\", \"Sudan\" ],\n\t[ \"1318\", \"Ignacia\", \"Avila\", \"Y5M 1S2\", \"Romania\" ],\n\t[ \"1319\", \"Wendy\", \"Stein\", \"25422\", \"Taiwan, Province of China\" ],\n\t[ \"1320\", \"Garrison\", \"Bass\", \"B9J 6D9\", \"Romania\" ],\n\t[ \"1321\", \"Curran\", \"Roy\", \"X2F 4P2\", \"Taiwan, Province of China\" ],\n\t[ \"1322\", \"Oliver\", \"Beach\", \"N6J 1C5\", \"Kazakhstan\" ],\n\t[ \"1323\", \"Bo\", \"Duran\", \"D5C 5C2\", \"Eritrea\" ],\n\t[ \"1324\", \"Tashya\", \"Morrow\", \"N2J 7O9\", \"Rwanda\" ],\n\t[ \"1325\", \"Cheryl\", \"Powell\", \"72413\", \"Niger\" ],\n\t[ \"1326\", \"Justin\", \"Roth\", \"18779\", \"Brunei Darussalam\" ],\n\t[ \"1327\", \"Nathaniel\", \"Foster\", \"04955\", \"Bermuda\" ],\n\t[ \"1328\", \"Candace\", \"Nunez\", \"G7Z 1N2\", \"Moldova\" ],\n\t[ \"1329\", \"Nero\", \"West\", \"K3Q 6B3\", \"Myanmar\" ],\n\t[ \"1330\", \"Brendan\", \"Mcintyre\", \"C4E 5H7\", \"Argentina\" ],\n\t[ \"1331\", \"Chaney\", \"Stafford\", \"V3X 8J4\", \"Benin\" ],\n\t[ \"1332\", \"Sylvia\", \"Velez\", \"95851\", \"Iraq\" ],\n\t[ \"1333\", \"Azalia\", \"Castro\", \"55986\", \"Israel\" ],\n\t[ \"1334\", \"Emily\", \"Hogan\", \"74667\", \"Botswana\" ],\n\t[ \"1335\", \"Buckminster\", \"Hurst\", \"N9C 2X6\", \"Reunion\" ],\n\t[ \"1336\", \"Rinah\", \"Rodriquez\", \"31896\", \"Guinea-bissau\" ],\n\t[ \"1337\", \"Nash\", \"Barnett\", \"Y8X 7H5\", \"China\" ],\n\t[ \"1338\", \"Xanthus\", \"Barker\", \"11212\", \"Trinidad and Tobago\" ],\n\t[ \"1339\", \"Minerva\", \"Huber\", \"M6M 9U3\", \"Equatorial Guinea\" ],\n\t[ \"1340\", \"Kaseem\", \"Tillman\", \"86565\", \"Bulgaria\" ],\n\t[ \"1341\", \"Cassidy\", \"Dejesus\", \"93205\", \"Sierra Leone\" ],\n\t[ \"1342\", \"Sheila\", \"Munoz\", \"26473\", \"Benin\" ],\n\t[ \"1343\", \"Florence\", \"Yates\", \"M5O 1J1\", \"Russian Federation\" ],\n\t[ \"1344\", \"Isadora\", \"Wagner\", \"88381\", \"Philippines\" ],\n\t[ \"1345\", \"Hilel\", \"Kramer\", \"E5D 4F5\", \"Lebanon\" ],\n\t[ \"1346\", \"Stewart\", \"Lawson\", \"67313\", \"Malaysia\" ],\n\t[ \"1347\", \"Ira\", \"Duffy\", \"52841\", \"Greece\" ],\n\t[ \"1348\", \"Ignatius\", \"Robinson\", \"10035\", \"Russian Federation\" ],\n\t[ \"1349\", \"Baxter\", \"Carroll\", \"92288\", \"Albania\" ],\n\t[ \"1350\", \"Palmer\", \"James\", \"N5X 5B1\", \"Germany\" ],\n\t[ \"1351\", \"Ava\", \"Eaton\", \"76497\", \"Egypt\" ],\n\t[ \"1352\", \"Kiona\", \"Smith\", \"09402\", \"Belize\" ],\n\t[ \"1353\", \"Brian\", \"Barlow\", \"00156\", \"Panama\" ],\n\t[ \"1354\", \"Nolan\", \"Rosa\", \"J2O 9W2\", \"Uruguay\" ],\n\t[ \"1355\", \"Teegan\", \"Burnett\", \"02401\", \"Italy\" ],\n\t[ \"1356\", \"Erin\", \"Knox\", \"95496\", \"Egypt\" ],\n\t[ \"1357\", \"Amela\", \"Sanford\", \"59890\", \"Virgin Islands, U.S.\" ],\n\t[ \"1358\", \"Quemby\", \"Hensley\", \"17698\", \"Tuvalu\" ],\n\t[ \"1359\", \"Ava\", \"York\", \"J1M 1A0\", \"Nigeria\" ],\n\t[ \"1360\", \"Vivien\", \"Ware\", \"N9S 1W6\", \"Bahamas\" ],\n\t[ \"1361\", \"Nyssa\", \"Lamb\", \"97964\", \"Estonia\" ],\n\t[ \"1362\", \"Brenna\", \"Slater\", \"L4P 5V6\", \"British Indian Ocean Territory\" ],\n\t[ \"1363\", \"Kennan\", \"Larsen\", \"M2A 4X0\", \"Angola\" ],\n\t[ \"1364\", \"Linda\", \"Luna\", \"P8C 4S8\", \"Gambia\" ],\n\t[ \"1365\", \"Boris\", \"Poole\", \"U7J 4G1\", \"Aruba\" ],\n\t[ \"1366\", \"Lyle\", \"Cote\", \"F5J 3Y2\", \"Somalia\" ],\n\t[ \"1367\", \"Oleg\", \"Knapp\", \"K4C 5T8\", \"Guinea\" ],\n\t[ \"1368\", \"Hanae\", \"Brown\", \"51395\", \"Nepal\" ],\n\t[ \"1369\", \"India\", \"Hyde\", \"E8P 7E8\", \"Belize\" ],\n\t[ \"1370\", \"Madeson\", \"Hodge\", \"23265\", \"Gambia\" ],\n\t[ \"1371\", \"Thaddeus\", \"Hester\", \"Y7S 5W1\", \"Saint Helena\" ],\n\t[ \"1372\", \"Aaron\", \"Kemp\", \"A1Q 8R3\", \"Albania\" ],\n\t[ \"1373\", \"Aurelia\", \"Thornton\", \"P8T 9D4\", \"Swaziland\" ],\n\t[ \"1374\", \"Preston\", \"Sharpe\", \"97472\", \"Niue\" ],\n\t[ \"1375\", \"Grace\", \"Gregory\", \"51767\", \"Burkina Faso\" ],\n\t[ \"1376\", \"Nicole\", \"Hicks\", \"81040\", \"Burkina Faso\" ],\n\t[ \"1377\", \"Hall\", \"Randall\", \"X1C 7A8\", \"Cambodia\" ],\n\t[ \"1378\", \"Burke\", \"Silva\", \"57219\", \"Romania\" ],\n\t[ \"1379\", \"Talon\", \"Kline\", \"28200\", \"Argentina\" ],\n\t[ \"1380\", \"Cassady\", \"Duncan\", \"Y2M 8F5\", \"Kenya\" ],\n\t[ \"1381\", \"Brielle\", \"Reed\", \"06254\", \"Greece\" ],\n\t[ \"1382\", \"Claire\", \"Stein\", \"50289\", \"Viet Nam\" ],\n\t[ \"1383\", \"Fleur\", \"Cabrera\", \"30131\", \"Indonesia\" ],\n\t[ \"1384\", \"Ella\", \"Ellison\", \"Q7Q 4R2\", \"Netherlands Antilles\" ],\n\t[ \"1385\", \"Zachery\", \"Wolf\", \"A9Q 6A8\", \"Jamaica\" ],\n\t[ \"1386\", \"Emerson\", \"Brewer\", \"Y4R 9M9\", \"Bosnia and Herzegovina\" ],\n\t[ \"1387\", \"Sarah\", \"Brooks\", \"27281\", \"Pitcairn\" ],\n\t[ \"1388\", \"Kylan\", \"Garrison\", \"S8E 7L8\", \"Djibouti\" ],\n\t[ \"1389\", \"Guinevere\", \"Mills\", \"75612\", \"Comoros\" ],\n\t[ \"1390\", \"Claudia\", \"Stevenson\", \"73390\", \"Colombia\" ],\n\t[ \"1391\", \"Valentine\", \"Burton\", \"Z9P 7R8\", \"Nauru\" ],\n\t[ \"1392\", \"Raymond\", \"Mclean\", \"L8W 2K5\", \"Brunei Darussalam\" ],\n\t[ \"1393\", \"Juliet\", \"Combs\", \"88712\", \"Samoa\" ],\n\t[ \"1394\", \"Lawrence\", \"Williamson\", \"32528\", \"Netherlands Antilles\" ],\n\t[ \"1395\", \"Inga\", \"Rivers\", \"12850\", \"Kuwait\" ],\n\t[ \"1396\", \"Mira\", \"Zimmerman\", \"D1I 1W2\", \"Ireland\" ],\n\t[ \"1397\", \"Hilda\", \"Stafford\", \"11054\", \"Cuba\" ],\n\t[ \"1398\", \"Tanek\", \"Kim\", \"88590\", \"Cayman Islands\" ],\n\t[ \"1399\", \"Bryar\", \"Mcintyre\", \"H6F 4S5\", \"Russian Federation\" ],\n\t[ \"1400\", \"Sean\", \"Reed\", \"P2V 8J9\", \"Malta\" ],\n\t[ \"1401\", \"Serena\", \"Henderson\", \"Z5C 8A0\", \"Madagascar\" ],\n\t[ \"1402\", \"Hedley\", \"Parks\", \"L8S 6F4\", \"Angola\" ],\n\t[ \"1403\", \"Alice\", \"Quinn\", \"06084\", \"Senegal\" ],\n\t[ \"1404\", \"Linda\", \"Burgess\", \"H1E 7C0\", \"Turkmenistan\" ],\n\t[ \"1405\", \"Hilda\", \"Burns\", \"Q9Q 4S2\", \"Kyrgyzstan\" ],\n\t[ \"1406\", \"Griffith\", \"Watts\", \"D4J 7N2\", \"United States Minor Outlying Islands\" ],\n\t[ \"1407\", \"Camden\", \"Glenn\", \"12939\", \"Russian Federation\" ],\n\t[ \"1408\", \"Tallulah\", \"Rush\", \"G9V 3N2\", \"Turkey\" ],\n\t[ \"1409\", \"Hasad\", \"Salinas\", \"H3F 7P9\", \"Cameroon\" ],\n\t[ \"1410\", \"Violet\", \"Chavez\", \"T2H 9C6\", \"Virgin Islands, U.S.\" ],\n\t[ \"1411\", \"Declan\", \"Hurley\", \"32614\", \"Iran, Islamic Republic of\" ],\n\t[ \"1412\", \"Robin\", \"Dean\", \"34266\", \"Northern Mariana Islands\" ],\n\t[ \"1413\", \"Mariko\", \"Avila\", \"B8F 8Y5\", \"Burundi\" ],\n\t[ \"1414\", \"Bradley\", \"Pugh\", \"11453\", \"Sri Lanka\" ],\n\t[ \"1415\", \"Herman\", \"Hernandez\", \"F3C 6S2\", \"Chile\" ],\n\t[ \"1416\", \"Montana\", \"Wynn\", \"B3M 8M2\", \"Aruba\" ],\n\t[ \"1417\", \"Erin\", \"Melton\", \"17022\", \"France\" ],\n\t[ \"1418\", \"Zachery\", \"Small\", \"L5O 7O1\", \"French Southern Territories\" ],\n\t[ \"1419\", \"Melanie\", \"Rivera\", \"07922\", \"Korea\" ],\n\t[ \"1420\", \"Blossom\", \"Chase\", \"75493\", \"Mauritius\" ],\n\t[ \"1421\", \"Stephanie\", \"Taylor\", \"U8K 3I9\", \"Bahamas\" ],\n\t[ \"1422\", \"Carter\", \"Fulton\", \"T4F 8D1\", \"Turks and Caicos Islands\" ],\n\t[ \"1423\", \"Celeste\", \"Medina\", \"75629\", \"Lebanon\" ],\n\t[ \"1424\", \"Katell\", \"Guzman\", \"15409\", \"United Arab Emirates\" ],\n\t[ \"1425\", \"Howard\", \"Rowland\", \"29003\", \"Liberia\" ],\n\t[ \"1426\", \"Reece\", \"Taylor\", \"W8G 7P7\", \"Samoa\" ],\n\t[ \"1427\", \"Bradley\", \"Peterson\", \"52568\", \"Singapore\" ],\n\t[ \"1428\", \"Ulric\", \"Hancock\", \"07437\", \"Bolivia\" ],\n\t[ \"1429\", \"Francis\", \"Rogers\", \"15904\", \"Albania\" ],\n\t[ \"1430\", \"Tatiana\", \"Mccray\", \"19604\", \"Belize\" ],\n\t[ \"1431\", \"Merrill\", \"Rowe\", \"68539\", \"Ethiopia\" ],\n\t[ \"1432\", \"Kiara\", \"Taylor\", \"F6D 8V7\", \"Burkina Faso\" ],\n\t[ \"1433\", \"Buffy\", \"Shannon\", \"61880\", \"Kiribati\" ],\n\t[ \"1434\", \"Amber\", \"Farmer\", \"K5F 1J7\", \"Barbados\" ],\n\t[ \"1435\", \"Blake\", \"Wilkins\", \"O1L 2G2\", \"Virgin Islands, U.S.\" ],\n\t[ \"1436\", \"Aimee\", \"Fulton\", \"18626\", \"Chad\" ],\n\t[ \"1437\", \"Kai\", \"Montgomery\", \"U6S 4W7\", \"Costa Rica\" ],\n\t[ \"1438\", \"Latifah\", \"Bell\", \"74589\", \"Chad\" ],\n\t[ \"1439\", \"Ronan\", \"Herring\", \"01710\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1440\", \"Macy\", \"Skinner\", \"78054\", \"Gibraltar\" ],\n\t[ \"1441\", \"Ignatius\", \"Berg\", \"59756\", \"Liechtenstein\" ],\n\t[ \"1442\", \"Prescott\", \"Pratt\", \"V6H 6P4\", \"Kuwait\" ],\n\t[ \"1443\", \"Deborah\", \"Hebert\", \"11480\", \"Liberia\" ],\n\t[ \"1444\", \"Quentin\", \"Jones\", \"G8W 8U6\", \"Slovenia\" ],\n\t[ \"1445\", \"Duncan\", \"Parsons\", \"Z9F 5G8\", \"Cambodia\" ],\n\t[ \"1446\", \"Sheila\", \"George\", \"18033\", \"Trinidad and Tobago\" ],\n\t[ \"1447\", \"Alyssa\", \"Padilla\", \"V3O 6C3\", \"Qatar\" ],\n\t[ \"1448\", \"Amelia\", \"Orr\", \"51943\", \"Canada\" ],\n\t[ \"1449\", \"Bethany\", \"Thomas\", \"33451\", \"Liberia\" ],\n\t[ \"1450\", \"Kellie\", \"Pitts\", \"G4S 1Q3\", \"Panama\" ],\n\t[ \"1451\", \"Stone\", \"Stout\", \"L4C 9N0\", \"Latvia\" ],\n\t[ \"1452\", \"Brynne\", \"Bailey\", \"B1M 4O0\", \"Ukraine\" ],\n\t[ \"1453\", \"Aquila\", \"Hurley\", \"41312\", \"United Kingdom\" ],\n\t[ \"1454\", \"David\", \"Bradshaw\", \"11152\", \"Denmark\" ],\n\t[ \"1455\", \"Ryan\", \"Gates\", \"Z7O 1U0\", \"Austria\" ],\n\t[ \"1456\", \"Kyle\", \"Weber\", \"39871\", \"Guyana\" ],\n\t[ \"1457\", \"Declan\", \"Moore\", \"K3B 6L2\", \"Gibraltar\" ],\n\t[ \"1458\", \"Theodore\", \"Hickman\", \"W8E 6K1\", \"Mauritius\" ],\n\t[ \"1459\", \"Rebekah\", \"Merritt\", \"44042\", \"Mauritania\" ],\n\t[ \"1460\", \"Meredith\", \"Powell\", \"98238\", \"Bhutan\" ],\n\t[ \"1461\", \"Paki\", \"Simmons\", \"34122\", \"Norway\" ],\n\t[ \"1462\", \"Carissa\", \"Ballard\", \"20095\", \"Antarctica\" ],\n\t[ \"1463\", \"James\", \"Wilson\", \"96376\", \"Venezuela\" ],\n\t[ \"1464\", \"Pamela\", \"Gamble\", \"U7F 7B6\", \"Turkmenistan\" ],\n\t[ \"1465\", \"Rogan\", \"Davenport\", \"E6S 4R7\", \"French Polynesia\" ],\n\t[ \"1466\", \"Daphne\", \"Pearson\", \"G2H 9M0\", \"American Samoa\" ],\n\t[ \"1467\", \"Maxwell\", \"Nash\", \"87205\", \"Guadeloupe\" ],\n\t[ \"1468\", \"Hayes\", \"Salazar\", \"55712\", \"American Samoa\" ],\n\t[ \"1469\", \"Justin\", \"Conner\", \"03924\", \"United Kingdom\" ],\n\t[ \"1470\", \"Blythe\", \"Joyner\", \"T6H 3M0\", \"Montserrat\" ],\n\t[ \"1471\", \"Herrod\", \"Spears\", \"19474\", \"Philippines\" ],\n\t[ \"1472\", \"Yvette\", \"Joyce\", \"R7Y 7B8\", \"Botswana\" ],\n\t[ \"1473\", \"Chloe\", \"Reid\", \"K4Y 1R2\", \"Philippines\" ],\n\t[ \"1474\", \"MacKensie\", \"Branch\", \"J5E 3X8\", \"Saint Kitts and Nevis\" ],\n\t[ \"1475\", \"Nasim\", \"Buchanan\", \"M4E 4D2\", \"Portugal\" ],\n\t[ \"1476\", \"Aileen\", \"Rasmussen\", \"H2V 3F4\", \"Dominica\" ],\n\t[ \"1477\", \"Nicole\", \"Mullins\", \"U6Q 9X5\", \"New Caledonia\" ],\n\t[ \"1478\", \"David\", \"Luna\", \"11935\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1479\", \"Germaine\", \"Massey\", \"G3N 4C7\", \"Colombia\" ],\n\t[ \"1480\", \"Matthew\", \"Knowles\", \"V4D 4Z0\", \"Turkey\" ],\n\t[ \"1481\", \"Timon\", \"Rowe\", \"14024\", \"Morocco\" ],\n\t[ \"1482\", \"Gail\", \"Young\", \"68293\", \"Bhutan\" ],\n\t[ \"1483\", \"Mariam\", \"Mejia\", \"O3P 4Q7\", \"Singapore\" ],\n\t[ \"1484\", \"Carla\", \"Norris\", \"D7A 3F1\", \"Liberia\" ],\n\t[ \"1485\", \"Ainsley\", \"Donaldson\", \"H4Z 1Q8\", \"Tanzania, United Republic of\" ],\n\t[ \"1486\", \"Avye\", \"Raymond\", \"44808\", \"Namibia\" ],\n\t[ \"1487\", \"Amanda\", \"Sargent\", \"O7F 3S4\", \"Afghanistan\" ],\n\t[ \"1488\", \"Tiger\", \"Chambers\", \"I3K 7H4\", \"United States\" ],\n\t[ \"1489\", \"Dylan\", \"Ford\", \"04043\", \"Solomon Islands\" ],\n\t[ \"1490\", \"Kaitlin\", \"Franklin\", \"99451\", \"Namibia\" ],\n\t[ \"1491\", \"Hayes\", \"Craft\", \"D6H 4Y6\", \"Christmas Island\" ],\n\t[ \"1492\", \"Nolan\", \"Sullivan\", \"31246\", \"United States Minor Outlying Islands\" ],\n\t[ \"1493\", \"Jennifer\", \"Romero\", \"E7I 1R7\", \"Latvia\" ],\n\t[ \"1494\", \"Deanna\", \"Wall\", \"36109\", \"Nepal\" ],\n\t[ \"1495\", \"Dara\", \"Valenzuela\", \"18359\", \"Martinique\" ],\n\t[ \"1496\", \"Iris\", \"Blanchard\", \"84392\", \"Turks and Caicos Islands\" ],\n\t[ \"1497\", \"Rhea\", \"Burgess\", \"T7Y 7C5\", \"Liberia\" ],\n\t[ \"1498\", \"Karina\", \"Small\", \"B2F 2X5\", \"Bermuda\" ],\n\t[ \"1499\", \"Victor\", \"Case\", \"49492\", \"Vanuatu\" ],\n\t[ \"1500\", \"Rose\", \"Terry\", \"B4G 8I0\", \"Timor-leste\" ],\n\t[ \"1501\", \"Wyatt\", \"Berg\", \"K3B 5N2\", \"Vanuatu\" ],\n\t[ \"1502\", \"Zephania\", \"Herrera\", \"E6R 2A5\", \"Romania\" ],\n\t[ \"1503\", \"Felix\", \"Johns\", \"X8U 2P1\", \"Angola\" ],\n\t[ \"1504\", \"Melyssa\", \"George\", \"M4J 5X8\", \"Uzbekistan\" ],\n\t[ \"1505\", \"Robert\", \"Spears\", \"61322\", \"Papua New Guinea\" ],\n\t[ \"1506\", \"Myra\", \"Wood\", \"50638\", \"Afghanistan\" ],\n\t[ \"1507\", \"Sean\", \"Kerr\", \"40094\", \"Guadeloupe\" ],\n\t[ \"1508\", \"Wesley\", \"Mcclain\", \"H7F 1H3\", \"Mongolia\" ],\n\t[ \"1509\", \"Ishmael\", \"Hoover\", \"42503\", \"Czech Republic\" ],\n\t[ \"1510\", \"Ocean\", \"Parker\", \"L3Z 8G0\", \"Guyana\" ],\n\t[ \"1511\", \"Berk\", \"Clay\", \"B6Q 7V7\", \"Botswana\" ],\n\t[ \"1512\", \"Daquan\", \"Harrison\", \"78004\", \"Niger\" ],\n\t[ \"1513\", \"Ramona\", \"Burris\", \"66986\", \"Palau\" ],\n\t[ \"1514\", \"Jaden\", \"Miranda\", \"80086\", \"Madagascar\" ],\n\t[ \"1515\", \"Solomon\", \"Kirk\", \"R7M 3M3\", \"Slovenia\" ],\n\t[ \"1516\", \"Tanek\", \"Rosales\", \"X5B 5D0\", \"Tonga\" ],\n\t[ \"1517\", \"Jack\", \"Cooke\", \"46356\", \"French Southern Territories\" ],\n\t[ \"1518\", \"Naomi\", \"Sykes\", \"76541\", \"Marshall Islands\" ],\n\t[ \"1519\", \"Moana\", \"Vinson\", \"K4R 3U7\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1520\", \"Kaye\", \"Sweet\", \"S6S 2G0\", \"Dominican Republic\" ],\n\t[ \"1521\", \"Bruno\", \"Beard\", \"20686\", \"Israel\" ],\n\t[ \"1522\", \"Helen\", \"Richards\", \"66393\", \"Argentina\" ],\n\t[ \"1523\", \"Gisela\", \"Owens\", \"S8Q 4L3\", \"Haiti\" ],\n\t[ \"1524\", \"Ivy\", \"Garrett\", \"P6G 8S8\", \"United Arab Emirates\" ],\n\t[ \"1525\", \"Malik\", \"Osborne\", \"78332\", \"Tajikistan\" ],\n\t[ \"1526\", \"Whoopi\", \"Franco\", \"T3T 5Y1\", \"Serbia and Montenegro\" ],\n\t[ \"1527\", \"Basil\", \"Baker\", \"61233\", \"Cuba\" ],\n\t[ \"1528\", \"Linda\", \"King\", \"31410\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1529\", \"Allegra\", \"Hobbs\", \"F2C 9M8\", \"Andorra\" ],\n\t[ \"1530\", \"Kirsten\", \"Elliott\", \"T8C 4X3\", \"Haiti\" ],\n\t[ \"1531\", \"Joseph\", \"Ortiz\", \"40165\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1532\", \"Pearl\", \"Mccormick\", \"93914\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"1533\", \"Fritz\", \"Austin\", \"A3S 7C8\", \"Canada\" ],\n\t[ \"1534\", \"Lunea\", \"Hickman\", \"25676\", \"Cameroon\" ],\n\t[ \"1535\", \"Inga\", \"Cortez\", \"14707\", \"Comoros\" ],\n\t[ \"1536\", \"Claudia\", \"Long\", \"74877\", \"Tokelau\" ],\n\t[ \"1537\", \"Judah\", \"Williamson\", \"S9N 6F0\", \"Paraguay\" ],\n\t[ \"1538\", \"Eve\", \"Beasley\", \"K8Z 5H7\", \"Honduras\" ],\n\t[ \"1539\", \"Tad\", \"Lang\", \"29577\", \"Equatorial Guinea\" ],\n\t[ \"1540\", \"Jack\", \"Lawson\", \"46631\", \"Costa Rica\" ],\n\t[ \"1541\", \"Vaughan\", \"Barron\", \"N9L 9T4\", \"Chile\" ],\n\t[ \"1542\", \"Solomon\", \"Bowman\", \"05734\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1543\", \"Nash\", \"Giles\", \"64600\", \"Denmark\" ],\n\t[ \"1544\", \"Xander\", \"Eaton\", \"84933\", \"Bosnia and Herzegovina\" ],\n\t[ \"1545\", \"Hanna\", \"Hull\", \"61062\", \"Namibia\" ],\n\t[ \"1546\", \"Lee\", \"Gaines\", \"V7H 6H7\", \"Suriname\" ],\n\t[ \"1547\", \"Brian\", \"Sutton\", \"60055\", \"Timor-leste\" ],\n\t[ \"1548\", \"Azalia\", \"Henson\", \"D9J 8E4\", \"Antarctica\" ],\n\t[ \"1549\", \"Russell\", \"Avila\", \"01774\", \"China\" ],\n\t[ \"1550\", \"Marsden\", \"Leblanc\", \"30201\", \"New Caledonia\" ],\n\t[ \"1551\", \"Tad\", \"Nichols\", \"K5V 6N1\", \"Monaco\" ],\n\t[ \"1552\", \"Eliana\", \"Savage\", \"06807\", \"Central African Republic\" ],\n\t[ \"1553\", \"Madeline\", \"Conway\", \"83513\", \"Latvia\" ],\n\t[ \"1554\", \"Kai\", \"Caldwell\", \"S1K 2Q2\", \"Indonesia\" ],\n\t[ \"1555\", \"Wynne\", \"Goodman\", \"U9Y 8P7\", \"Gibraltar\" ],\n\t[ \"1556\", \"Nora\", \"Dudley\", \"52688\", \"Netherlands Antilles\" ],\n\t[ \"1557\", \"Anastasia\", \"Gates\", \"T7T 8C8\", \"Morocco\" ],\n\t[ \"1558\", \"Lester\", \"Good\", \"76376\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1559\", \"Craig\", \"Skinner\", \"S7B 3Z6\", \"Madagascar\" ],\n\t[ \"1560\", \"Kibo\", \"Craft\", \"M5C 2I9\", \"Hong Kong\" ],\n\t[ \"1561\", \"Carlos\", \"Buck\", \"89343\", \"Northern Mariana Islands\" ],\n\t[ \"1562\", \"Ivor\", \"Mooney\", \"M9D 2Y3\", \"Korea\" ],\n\t[ \"1563\", \"Armand\", \"Shields\", \"E8O 7X6\", \"Uzbekistan\" ],\n\t[ \"1564\", \"Grace\", \"Weeks\", \"G5B 3W5\", \"Nicaragua\" ],\n\t[ \"1565\", \"Reagan\", \"Mann\", \"J2E 5I1\", \"San Marino\" ],\n\t[ \"1566\", \"Quin\", \"Nolan\", \"Q9E 2Q0\", \"Turkey\" ],\n\t[ \"1567\", \"Kareem\", \"Jefferson\", \"91393\", \"Zambia\" ],\n\t[ \"1568\", \"Erica\", \"Mccoy\", \"C3P 3L0\", \"Viet Nam\" ],\n\t[ \"1569\", \"Sybill\", \"Larsen\", \"J3U 3L9\", \"Sierra Leone\" ],\n\t[ \"1570\", \"Angela\", \"Weber\", \"46559\", \"Croatia\" ],\n\t[ \"1571\", \"Mannix\", \"Noel\", \"94029\", \"Belgium\" ],\n\t[ \"1572\", \"Martina\", \"Travis\", \"20063\", \"Solomon Islands\" ],\n\t[ \"1573\", \"Dominic\", \"Whitehead\", \"83547\", \"Gibraltar\" ],\n\t[ \"1574\", \"Vladimir\", \"Hunter\", \"L3I 4G7\", \"Reunion\" ],\n\t[ \"1575\", \"Farrah\", \"Alexander\", \"18538\", \"Croatia\" ],\n\t[ \"1576\", \"Hop\", \"Burns\", \"X1C 7J6\", \"Saint Lucia\" ],\n\t[ \"1577\", \"Zelda\", \"Trevino\", \"L8P 7E9\", \"Guinea\" ],\n\t[ \"1578\", \"Nehru\", \"Decker\", \"Q1P 4Q9\", \"Western Sahara\" ],\n\t[ \"1579\", \"Shay\", \"Goff\", \"68576\", \"Sweden\" ],\n\t[ \"1580\", \"Dominic\", \"Martin\", \"C1M 9P2\", \"Denmark\" ],\n\t[ \"1581\", \"Heather\", \"Doyle\", \"Y7R 9H1\", \"Iran, Islamic Republic of\" ],\n\t[ \"1582\", \"Honorato\", \"Rojas\", \"29414\", \"India\" ],\n\t[ \"1583\", \"Florence\", \"England\", \"64669\", \"China\" ],\n\t[ \"1584\", \"Zane\", \"Reyes\", \"84771\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"1585\", \"Scarlett\", \"Poole\", \"36928\", \"Algeria\" ],\n\t[ \"1586\", \"Dieter\", \"Brennan\", \"Y8V 5L2\", \"Colombia\" ],\n\t[ \"1587\", \"Jamal\", \"Whitney\", \"33428\", \"Turkey\" ],\n\t[ \"1588\", \"Evan\", \"Guy\", \"72119\", \"Slovakia\" ],\n\t[ \"1589\", \"Candace\", \"Bauer\", \"C8L 1P2\", \"Macedonia\" ],\n\t[ \"1590\", \"Naomi\", \"Pennington\", \"17350\", \"Tonga\" ],\n\t[ \"1591\", \"Celeste\", \"Banks\", \"R8R 4C8\", \"Anguilla\" ],\n\t[ \"1592\", \"Basil\", \"Elliott\", \"80065\", \"Singapore\" ],\n\t[ \"1593\", \"Darryl\", \"Wise\", \"33140\", \"Brunei Darussalam\" ],\n\t[ \"1594\", \"Marny\", \"Walls\", \"S1K 4V1\", \"Western Sahara\" ],\n\t[ \"1595\", \"Anastasia\", \"Meyer\", \"Z1F 8C2\", \"El Salvador\" ],\n\t[ \"1596\", \"Brynne\", \"Rivera\", \"48070\", \"Mexico\" ],\n\t[ \"1597\", \"Macey\", \"Johnston\", \"X9E 9J5\", \"Guadeloupe\" ],\n\t[ \"1598\", \"Bethany\", \"Marks\", \"46648\", \"Bhutan\" ],\n\t[ \"1599\", \"Kiayada\", \"Glass\", \"13661\", \"Christmas Island\" ],\n\t[ \"1600\", \"Veda\", \"Bowers\", \"D7S 1S9\", \"Korea\" ],\n\t[ \"1601\", \"Dante\", \"Kirk\", \"58404\", \"Guinea\" ],\n\t[ \"1602\", \"Judah\", \"Sloan\", \"04528\", \"Andorra\" ],\n\t[ \"1603\", \"Serena\", \"Giles\", \"12139\", \"Papua New Guinea\" ],\n\t[ \"1604\", \"Chase\", \"Hull\", \"27203\", \"Guinea-bissau\" ],\n\t[ \"1605\", \"Wallace\", \"Poole\", \"58919\", \"Christmas Island\" ],\n\t[ \"1606\", \"Deacon\", \"Lynn\", \"Z1H 9G4\", \"Kenya\" ],\n\t[ \"1607\", \"Igor\", \"Duncan\", \"X2V 2X1\", \"Christmas Island\" ],\n\t[ \"1608\", \"Walker\", \"Hopkins\", \"67256\", \"Bosnia and Herzegovina\" ],\n\t[ \"1609\", \"Serena\", \"Burnett\", \"Q4C 7Q0\", \"Canada\" ],\n\t[ \"1610\", \"Hedwig\", \"Burgess\", \"O2J 7A5\", \"Rwanda\" ],\n\t[ \"1611\", \"Amal\", \"Richmond\", \"34506\", \"Australia\" ],\n\t[ \"1612\", \"Rhona\", \"Gomez\", \"W2C 3I7\", \"Oman\" ],\n\t[ \"1613\", \"Kai\", \"Acosta\", \"N2O 7M2\", \"Uganda\" ],\n\t[ \"1614\", \"Henry\", \"Roman\", \"78113\", \"Guadeloupe\" ],\n\t[ \"1615\", \"Chester\", \"Good\", \"88809\", \"Norway\" ],\n\t[ \"1616\", \"Cleo\", \"Tanner\", \"73924\", \"Uganda\" ],\n\t[ \"1617\", \"Emi\", \"Lloyd\", \"59746\", \"South Africa\" ],\n\t[ \"1618\", \"Christopher\", \"Lopez\", \"76264\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1619\", \"Yvonne\", \"Mathews\", \"68655\", \"Saint Lucia\" ],\n\t[ \"1620\", \"Kimberly\", \"Mullen\", \"D6J 9G3\", \"Virgin Islands, British\" ],\n\t[ \"1621\", \"Hanna\", \"Slater\", \"F8F 9K5\", \"Montserrat\" ],\n\t[ \"1622\", \"Laura\", \"Dennis\", \"J6U 2G3\", \"Viet Nam\" ],\n\t[ \"1623\", \"Rogan\", \"Richards\", \"R1D 1B3\", \"Argentina\" ],\n\t[ \"1624\", \"Mira\", \"Rodriquez\", \"C3D 3E5\", \"Guinea\" ],\n\t[ \"1625\", \"Ezra\", \"Myers\", \"Y7Z 7X2\", \"Kuwait\" ],\n\t[ \"1626\", \"Jocelyn\", \"Martin\", \"E2F 3F2\", \"Algeria\" ],\n\t[ \"1627\", \"Denton\", \"Lee\", \"80903\", \"Congo\" ],\n\t[ \"1628\", \"Grace\", \"Leach\", \"86865\", \"Spain\" ],\n\t[ \"1629\", \"Clark\", \"Morrow\", \"12834\", \"Northern Mariana Islands\" ],\n\t[ \"1630\", \"Armando\", \"Calhoun\", \"I3I 1D4\", \"Spain\" ],\n\t[ \"1631\", \"George\", \"Decker\", \"R1B 6Q9\", \"Mali\" ],\n\t[ \"1632\", \"Jerome\", \"Salazar\", \"03831\", \"Faroe Islands\" ],\n\t[ \"1633\", \"Logan\", \"Santiago\", \"46269\", \"Hungary\" ],\n\t[ \"1634\", \"Gavin\", \"Tate\", \"Y3L 6G5\", \"Italy\" ],\n\t[ \"1635\", \"Chloe\", \"Jennings\", \"D9B 2H9\", \"Cambodia\" ],\n\t[ \"1636\", \"Rashad\", \"Knox\", \"T1V 4G5\", \"Germany\" ],\n\t[ \"1637\", \"Jin\", \"Roberts\", \"82928\", \"Azerbaijan\" ],\n\t[ \"1638\", \"Amity\", \"Guerrero\", \"F4G 2L4\", \"Viet Nam\" ],\n\t[ \"1639\", \"Carter\", \"Roberson\", \"53651\", \"Niue\" ],\n\t[ \"1640\", \"Slade\", \"Carson\", \"H9E 1G1\", \"Guyana\" ],\n\t[ \"1641\", \"Buckminster\", \"Christensen\", \"F5J 6T5\", \"Algeria\" ],\n\t[ \"1642\", \"Fallon\", \"Peters\", \"D9Y 5Q4\", \"Ethiopia\" ],\n\t[ \"1643\", \"Amy\", \"Barry\", \"D6F 3R4\", \"New Caledonia\" ],\n\t[ \"1644\", \"Calvin\", \"Buck\", \"18354\", \"Macedonia\" ],\n\t[ \"1645\", \"Kaye\", \"Haynes\", \"D9K 1X8\", \"Italy\" ],\n\t[ \"1646\", \"Shea\", \"Hammond\", \"R7P 3X8\", \"Guam\" ],\n\t[ \"1647\", \"Kiara\", \"Franks\", \"01185\", \"Mozambique\" ],\n\t[ \"1648\", \"Armando\", \"Oneil\", \"88972\", \"Bahrain\" ],\n\t[ \"1649\", \"Lesley\", \"Allen\", \"05171\", \"Belgium\" ],\n\t[ \"1650\", \"Ignatius\", \"Barrett\", \"94084\", \"Georgia\" ],\n\t[ \"1651\", \"Graham\", \"Maldonado\", \"76354\", \"Dominican Republic\" ],\n\t[ \"1652\", \"Briar\", \"Roman\", \"P9M 3A9\", \"Cayman Islands\" ],\n\t[ \"1653\", \"Germane\", \"Colon\", \"U3X 7S9\", \"Brazil\" ],\n\t[ \"1654\", \"Alvin\", \"Mcpherson\", \"58411\", \"Guinea\" ],\n\t[ \"1655\", \"Belle\", \"Sandoval\", \"87172\", \"Cyprus\" ],\n\t[ \"1656\", \"Eric\", \"Caldwell\", \"63246\", \"Guinea\" ],\n\t[ \"1657\", \"Nadine\", \"Dale\", \"T6E 4B0\", \"Denmark\" ],\n\t[ \"1658\", \"Dora\", \"Jimenez\", \"85463\", \"Nauru\" ],\n\t[ \"1659\", \"Mohammad\", \"Strickland\", \"H8B 9G2\", \"Japan\" ],\n\t[ \"1660\", \"Reagan\", \"Preston\", \"G5E 8S5\", \"Honduras\" ],\n\t[ \"1661\", \"Tamekah\", \"Daniel\", \"Z3X 6Q6\", \"Belarus\" ],\n\t[ \"1662\", \"Halee\", \"Mills\", \"23332\", \"Mayotte\" ],\n\t[ \"1663\", \"Courtney\", \"England\", \"09751\", \"Saint Kitts and Nevis\" ],\n\t[ \"1664\", \"Dai\", \"Arnold\", \"A2N 9J4\", \"Argentina\" ],\n\t[ \"1665\", \"Priscilla\", \"Reyes\", \"G2B 5M4\", \"Azerbaijan\" ],\n\t[ \"1666\", \"Brenda\", \"Stanley\", \"I6O 3I1\", \"Hungary\" ],\n\t[ \"1667\", \"Kasper\", \"Washington\", \"H4K 8K7\", \"Serbia and Montenegro\" ],\n\t[ \"1668\", \"Suki\", \"Hendricks\", \"L1K 5O9\", \"Norway\" ],\n\t[ \"1669\", \"Rebekah\", \"Mccormick\", \"89543\", \"Slovenia\" ],\n\t[ \"1670\", \"Oprah\", \"Rodriquez\", \"90034\", \"Costa Rica\" ],\n\t[ \"1671\", \"Ivory\", \"Matthews\", \"T9J 2A7\", \"Panama\" ],\n\t[ \"1672\", \"Ferris\", \"Garner\", \"93583\", \"Niue\" ],\n\t[ \"1673\", \"Melvin\", \"White\", \"X5U 9N8\", \"Nigeria\" ],\n\t[ \"1674\", \"Henry\", \"Swanson\", \"E7V 2C9\", \"Northern Mariana Islands\" ],\n\t[ \"1675\", \"Hadassah\", \"Eaton\", \"52798\", \"Albania\" ],\n\t[ \"1676\", \"Lisandra\", \"Sykes\", \"90838\", \"Namibia\" ],\n\t[ \"1677\", \"Honorato\", \"Bradshaw\", \"W3D 1Z9\", \"United States\" ],\n\t[ \"1678\", \"Aurelia\", \"Paul\", \"Z6E 6W9\", \"Malaysia\" ],\n\t[ \"1679\", \"Arthur\", \"Mann\", \"74673\", \"Bhutan\" ],\n\t[ \"1680\", \"Melissa\", \"Hernandez\", \"11742\", \"Dominican Republic\" ],\n\t[ \"1681\", \"Bert\", \"Mosley\", \"N2K 5U5\", \"Kuwait\" ],\n\t[ \"1682\", \"Sigourney\", \"Sharpe\", \"30204\", \"South Africa\" ],\n\t[ \"1683\", \"Ifeoma\", \"Woods\", \"39850\", \"Haiti\" ],\n\t[ \"1684\", \"Tyler\", \"Medina\", \"K6L 9V8\", \"Indonesia\" ],\n\t[ \"1685\", \"Karleigh\", \"Griffin\", \"G8Z 6W2\", \"Canada\" ],\n\t[ \"1686\", \"Brianna\", \"Collins\", \"11919\", \"New Caledonia\" ],\n\t[ \"1687\", \"Allistair\", \"Hampton\", \"O1X 2N7\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1688\", \"Carla\", \"Manning\", \"76866\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1689\", \"Jakeem\", \"Brewer\", \"Y1T 1D7\", \"Comoros\" ],\n\t[ \"1690\", \"Price\", \"Guerrero\", \"S7Z 8O1\", \"Christmas Island\" ],\n\t[ \"1691\", \"Harlan\", \"Sandoval\", \"58527\", \"Czech Republic\" ],\n\t[ \"1692\", \"Marcia\", \"Robinson\", \"64662\", \"Uganda\" ],\n\t[ \"1693\", \"Sylvester\", \"Hewitt\", \"81468\", \"Honduras\" ],\n\t[ \"1694\", \"Dawn\", \"Wood\", \"77743\", \"Malawi\" ],\n\t[ \"1695\", \"Farrah\", \"Nielsen\", \"E4N 9A9\", \"Christmas Island\" ],\n\t[ \"1696\", \"Tanisha\", \"Benjamin\", \"L2J 3G7\", \"Cape Verde\" ],\n\t[ \"1697\", \"Cherokee\", \"Atkins\", \"L7D 2L5\", \"Moldova\" ],\n\t[ \"1698\", \"Madaline\", \"Elliott\", \"H7K 8R4\", \"Barbados\" ],\n\t[ \"1699\", \"Odysseus\", \"Roy\", \"65008\", \"Slovakia\" ],\n\t[ \"1700\", \"Eaton\", \"Stein\", \"Z2V 7H0\", \"Moldova\" ],\n\t[ \"1701\", \"Rachel\", \"Hurley\", \"L6L 2B2\", \"Antigua and Barbuda\" ],\n\t[ \"1702\", \"Stacey\", \"Hardin\", \"O9U 1B7\", \"Montserrat\" ],\n\t[ \"1703\", \"Grady\", \"Montgomery\", \"75852\", \"Guinea-bissau\" ],\n\t[ \"1704\", \"Serena\", \"Douglas\", \"F5M 8Z6\", \"Mauritius\" ],\n\t[ \"1705\", \"Ralph\", \"Duke\", \"H7X 3M9\", \"Tunisia\" ],\n\t[ \"1706\", \"Charles\", \"Moody\", \"86445\", \"Pitcairn\" ],\n\t[ \"1707\", \"Mariam\", \"Lara\", \"07952\", \"United Kingdom\" ],\n\t[ \"1708\", \"Whitney\", \"Garza\", \"74001\", \"Norfolk Island\" ],\n\t[ \"1709\", \"Beverly\", \"Thornton\", \"69847\", \"Canada\" ],\n\t[ \"1710\", \"Helen\", \"Gentry\", \"Z8S 7U4\", \"Reunion\" ],\n\t[ \"1711\", \"Janna\", \"Gould\", \"W6C 6E1\", \"Burundi\" ],\n\t[ \"1712\", \"Jana\", \"Hooper\", \"A1R 9Y0\", \"Yemen\" ],\n\t[ \"1713\", \"Zachary\", \"Nicholson\", \"49616\", \"Gabon\" ],\n\t[ \"1714\", \"Julian\", \"Davis\", \"37608\", \"Anguilla\" ],\n\t[ \"1715\", \"Gay\", \"Knox\", \"51952\", \"Croatia\" ],\n\t[ \"1716\", \"Iola\", \"Moses\", \"16601\", \"French Polynesia\" ],\n\t[ \"1717\", \"Allegra\", \"Holder\", \"C9R 8J3\", \"Dominican Republic\" ],\n\t[ \"1718\", \"Cecilia\", \"Shannon\", \"62624\", \"Reunion\" ],\n\t[ \"1719\", \"Cora\", \"Peterson\", \"I9V 5P5\", \"Chad\" ],\n\t[ \"1720\", \"Stewart\", \"Mathews\", \"A5H 1E1\", \"Mexico\" ],\n\t[ \"1721\", \"Kathleen\", \"Lynn\", \"82408\", \"Honduras\" ],\n\t[ \"1722\", \"William\", \"Schneider\", \"25823\", \"Tajikistan\" ],\n\t[ \"1723\", \"Alice\", \"Mcconnell\", \"50155\", \"Russian Federation\" ],\n\t[ \"1724\", \"Timon\", \"Dillon\", \"93171\", \"Croatia\" ],\n\t[ \"1725\", \"Tanek\", \"Ellison\", \"Y7Q 5B1\", \"Malawi\" ],\n\t[ \"1726\", \"Tamekah\", \"Cummings\", \"03764\", \"Afghanistan\" ],\n\t[ \"1727\", \"Charlotte\", \"Chaney\", \"U7Y 7B0\", \"Kyrgyzstan\" ],\n\t[ \"1728\", \"Jason\", \"Conway\", \"37713\", \"Martinique\" ],\n\t[ \"1729\", \"Graiden\", \"Combs\", \"40454\", \"Turkmenistan\" ],\n\t[ \"1730\", \"Virginia\", \"Ortiz\", \"K9N 2Q4\", \"Malta\" ],\n\t[ \"1731\", \"Thomas\", \"Cannon\", \"W1H 3T9\", \"Cuba\" ],\n\t[ \"1732\", \"Galena\", \"Dominguez\", \"68072\", \"India\" ],\n\t[ \"1733\", \"Vaughan\", \"Petty\", \"15200\", \"Lesotho\" ],\n\t[ \"1734\", \"Buffy\", \"Saunders\", \"K1W 3B1\", \"Burkina Faso\" ],\n\t[ \"1735\", \"Chava\", \"Hill\", \"93461\", \"Iran, Islamic Republic of\" ],\n\t[ \"1736\", \"Sage\", \"Hampton\", \"R8Y 8J1\", \"Malta\" ],\n\t[ \"1737\", \"Nathaniel\", \"Whitney\", \"89097\", \"Ukraine\" ],\n\t[ \"1738\", \"Hector\", \"Hayden\", \"70774\", \"Netherlands\" ],\n\t[ \"1739\", \"Mercedes\", \"Freeman\", \"80848\", \"Croatia\" ],\n\t[ \"1740\", \"Vance\", \"Spencer\", \"25484\", \"Guyana\" ],\n\t[ \"1741\", \"Josephine\", \"Stevens\", \"E4D 9D1\", \"Netherlands Antilles\" ],\n\t[ \"1742\", \"Barbara\", \"Mcclure\", \"22602\", \"Cambodia\" ],\n\t[ \"1743\", \"Sydney\", \"Holder\", \"X4G 1Z7\", \"British Indian Ocean Territory\" ],\n\t[ \"1744\", \"Velma\", \"Evans\", \"83914\", \"New Zealand\" ],\n\t[ \"1745\", \"Francis\", \"Lane\", \"12545\", \"Serbia and Montenegro\" ],\n\t[ \"1746\", \"Garrison\", \"Brock\", \"19993\", \"Eritrea\" ],\n\t[ \"1747\", \"Quentin\", \"Santiago\", \"07085\", \"Norfolk Island\" ],\n\t[ \"1748\", \"Ivory\", \"Wilkerson\", \"79440\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1749\", \"Karyn\", \"Buckner\", \"D1Y 7D8\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1750\", \"Mari\", \"Bright\", \"24721\", \"Pakistan\" ],\n\t[ \"1751\", \"Dexter\", \"Garrison\", \"X3X 7G3\", \"Western Sahara\" ],\n\t[ \"1752\", \"Venus\", \"Acevedo\", \"V2F 8C0\", \"Poland\" ],\n\t[ \"1753\", \"Nayda\", \"Camacho\", \"F6H 6J5\", \"Northern Mariana Islands\" ],\n\t[ \"1754\", \"Avye\", \"Hartman\", \"G6V 2H0\", \"Hong Kong\" ],\n\t[ \"1755\", \"Kerry\", \"Baird\", \"M3Q 7B7\", \"Russian Federation\" ],\n\t[ \"1756\", \"Uma\", \"Herman\", \"C9A 4P3\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"1757\", \"Amaya\", \"Roman\", \"97179\", \"Iceland\" ],\n\t[ \"1758\", \"Bruce\", \"Joyce\", \"18344\", \"Denmark\" ],\n\t[ \"1759\", \"Jarrod\", \"Alvarez\", \"59269\", \"Liberia\" ],\n\t[ \"1760\", \"Olivia\", \"Reilly\", \"99058\", \"Malaysia\" ],\n\t[ \"1761\", \"Benedict\", \"Hensley\", \"23105\", \"Uganda\" ],\n\t[ \"1762\", \"Lavinia\", \"Hunter\", \"44729\", \"Maldives\" ],\n\t[ \"1763\", \"Bradley\", \"Gomez\", \"65125\", \"Belize\" ],\n\t[ \"1764\", \"Keely\", \"Burris\", \"18390\", \"Brunei Darussalam\" ],\n\t[ \"1765\", \"Autumn\", \"England\", \"E5D 7A5\", \"Kyrgyzstan\" ],\n\t[ \"1766\", \"Jane\", \"Blair\", \"S1W 4O0\", \"Bangladesh\" ],\n\t[ \"1767\", \"Chancellor\", \"Barrett\", \"E9F 1I1\", \"Fiji\" ],\n\t[ \"1768\", \"Whitney\", \"Morin\", \"G5T 4E7\", \"Aruba\" ],\n\t[ \"1769\", \"Madeline\", \"Sparks\", \"W7L 7E0\", \"Belize\" ],\n\t[ \"1770\", \"Dale\", \"Estes\", \"82712\", \"Guam\" ],\n\t[ \"1771\", \"Hakeem\", \"Buck\", \"O6K 1I8\", \"Singapore\" ],\n\t[ \"1772\", \"Alexandra\", \"Burns\", \"12697\", \"Portugal\" ],\n\t[ \"1773\", \"Winifred\", \"Gill\", \"Z8B 8B8\", \"Uruguay\" ],\n\t[ \"1774\", \"Gail\", \"Gomez\", \"S1V 3N8\", \"American Samoa\" ],\n\t[ \"1775\", \"Moana\", \"Brady\", \"18835\", \"Wallis and Futuna\" ],\n\t[ \"1776\", \"Martha\", \"Oliver\", \"81962\", \"Bolivia\" ],\n\t[ \"1777\", \"Nayda\", \"Wooten\", \"00071\", \"Palau\" ],\n\t[ \"1778\", \"Bryar\", \"Collier\", \"50631\", \"Mexico\" ],\n\t[ \"1779\", \"Penelope\", \"Bradshaw\", \"A6A 9M2\", \"Lebanon\" ],\n\t[ \"1780\", \"Wyatt\", \"Lara\", \"75486\", \"Slovenia\" ],\n\t[ \"1781\", \"Wang\", \"Odonnell\", \"N5X 1N5\", \"Bahamas\" ],\n\t[ \"1782\", \"Chiquita\", \"Harrell\", \"21691\", \"Guadeloupe\" ],\n\t[ \"1783\", \"Byron\", \"Blankenship\", \"M8A 3L4\", \"Syrian Arab Republic\" ],\n\t[ \"1784\", \"Holmes\", \"Stokes\", \"81039\", \"Mauritania\" ],\n\t[ \"1785\", \"Naomi\", \"Phillips\", \"56287\", \"Switzerland\" ],\n\t[ \"1786\", \"Quyn\", \"Johnson\", \"D2T 6B7\", \"Czech Republic\" ],\n\t[ \"1787\", \"Gillian\", \"Sanders\", \"50542\", \"Colombia\" ],\n\t[ \"1788\", \"Hope\", \"Benjamin\", \"67423\", \"Bolivia\" ],\n\t[ \"1789\", \"Bryar\", \"Dean\", \"U9V 9E5\", \"Guatemala\" ],\n\t[ \"1790\", \"Karyn\", \"Swanson\", \"S6H 3R8\", \"Israel\" ],\n\t[ \"1791\", \"Amena\", \"David\", \"02286\", \"French Polynesia\" ],\n\t[ \"1792\", \"Ira\", \"Joyner\", \"37335\", \"Cayman Islands\" ],\n\t[ \"1793\", \"Tanek\", \"Oneil\", \"75041\", \"Slovenia\" ],\n\t[ \"1794\", \"Dolan\", \"Miles\", \"K7Q 9U8\", \"Maldives\" ],\n\t[ \"1795\", \"Wang\", \"Keith\", \"88116\", \"Congo\" ],\n\t[ \"1796\", \"Wylie\", \"Bryant\", \"93369\", \"Andorra\" ],\n\t[ \"1797\", \"Heather\", \"Bryant\", \"78015\", \"French Polynesia\" ],\n\t[ \"1798\", \"Regina\", \"Wagner\", \"29087\", \"Virgin Islands, British\" ],\n\t[ \"1799\", \"Nathan\", \"Bush\", \"J5S 9L0\", \"Viet Nam\" ],\n\t[ \"1800\", \"Charity\", \"Dawson\", \"29508\", \"Greece\" ],\n\t[ \"1801\", \"Ulric\", \"Guzman\", \"I6R 6P6\", \"Micronesia\" ],\n\t[ \"1802\", \"Keefe\", \"Scott\", \"J1R 8T6\", \"Uzbekistan\" ],\n\t[ \"1803\", \"Florence\", \"Price\", \"U7P 8F6\", \"Taiwan, Province of China\" ],\n\t[ \"1804\", \"Griffith\", \"England\", \"92557\", \"China\" ],\n\t[ \"1805\", \"Kay\", \"Nielsen\", \"85991\", \"Suriname\" ],\n\t[ \"1806\", \"Tamekah\", \"Blackburn\", \"47324\", \"Panama\" ],\n\t[ \"1807\", \"Indira\", \"Crosby\", \"64463\", \"Trinidad and Tobago\" ],\n\t[ \"1808\", \"Pamela\", \"Vasquez\", \"K2Q 9A1\", \"Ghana\" ],\n\t[ \"1809\", \"Patricia\", \"Haley\", \"51509\", \"Jordan\" ],\n\t[ \"1810\", \"Nevada\", \"Prince\", \"41315\", \"Tokelau\" ],\n\t[ \"1811\", \"Martin\", \"Wilkerson\", \"Y8X 4Y5\", \"Palestinian Territory, Occupied\" ],\n\t[ \"1812\", \"Deirdre\", \"Castaneda\", \"X1S 5E2\", \"Bahrain\" ],\n\t[ \"1813\", \"Cara\", \"Flynn\", \"68372\", \"Azerbaijan\" ],\n\t[ \"1814\", \"Sylvia\", \"Alexander\", \"E5F 9M5\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1815\", \"Macon\", \"Suarez\", \"69866\", \"Tunisia\" ],\n\t[ \"1816\", \"Hammett\", \"Haney\", \"09768\", \"Bangladesh\" ],\n\t[ \"1817\", \"Geoffrey\", \"Simmons\", \"61986\", \"Burundi\" ],\n\t[ \"1818\", \"Danielle\", \"Kelly\", \"71568\", \"Mali\" ],\n\t[ \"1819\", \"Wing\", \"Brown\", \"U4D 6L1\", \"Uzbekistan\" ],\n\t[ \"1820\", \"Len\", \"Barber\", \"40311\", \"Suriname\" ],\n\t[ \"1821\", \"Richard\", \"Wilson\", \"W9E 6D7\", \"Finland\" ],\n\t[ \"1822\", \"Keaton\", \"Hayes\", \"55696\", \"Slovakia\" ],\n\t[ \"1823\", \"Dora\", \"Chaney\", \"57297\", \"United States Minor Outlying Islands\" ],\n\t[ \"1824\", \"Alexandra\", \"Pruitt\", \"17207\", \"Turkmenistan\" ],\n\t[ \"1825\", \"Deanna\", \"Gomez\", \"C9M 9K0\", \"Paraguay\" ],\n\t[ \"1826\", \"Laura\", \"Downs\", \"74422\", \"Antigua and Barbuda\" ],\n\t[ \"1827\", \"Jolene\", \"Lucas\", \"K9E 6U4\", \"Tokelau\" ],\n\t[ \"1828\", \"Lucy\", \"Marquez\", \"L1N 4O4\", \"Argentina\" ],\n\t[ \"1829\", \"Abbot\", \"Bishop\", \"G8W 7I1\", \"Guinea-bissau\" ],\n\t[ \"1830\", \"Aaron\", \"Bowman\", \"K8A 5K7\", \"Greece\" ],\n\t[ \"1831\", \"Candace\", \"Lee\", \"58901\", \"Turks and Caicos Islands\" ],\n\t[ \"1832\", \"Larissa\", \"Allen\", \"O1I 4X0\", \"Belgium\" ],\n\t[ \"1833\", \"Linda\", \"Malone\", \"31211\", \"United Arab Emirates\" ],\n\t[ \"1834\", \"Grace\", \"Daugherty\", \"62610\", \"Cyprus\" ],\n\t[ \"1835\", \"Kyra\", \"Berry\", \"T2F 3E5\", \"Netherlands Antilles\" ],\n\t[ \"1836\", \"Hadassah\", \"Willis\", \"C7H 5V4\", \"El Salvador\" ],\n\t[ \"1837\", \"Kyle\", \"Fitzgerald\", \"X1V 2R9\", \"Croatia\" ],\n\t[ \"1838\", \"Graiden\", \"Atkinson\", \"L9Q 6H8\", \"Thailand\" ],\n\t[ \"1839\", \"Raymond\", \"Fletcher\", \"59574\", \"Argentina\" ],\n\t[ \"1840\", \"Keaton\", \"Barnett\", \"O2G 6B4\", \"Papua New Guinea\" ],\n\t[ \"1841\", \"Farrah\", \"Kramer\", \"21928\", \"Netherlands Antilles\" ],\n\t[ \"1842\", \"Christian\", \"Sellers\", \"55504\", \"Timor-leste\" ],\n\t[ \"1843\", \"Keith\", \"Cohen\", \"D9T 7D0\", \"Italy\" ],\n\t[ \"1844\", \"Karleigh\", \"Bruce\", \"F2A 5H9\", \"Montserrat\" ],\n\t[ \"1845\", \"Julie\", \"Avery\", \"T4T 3Y7\", \"Nepal\" ],\n\t[ \"1846\", \"Hollee\", \"Deleon\", \"47524\", \"Oman\" ],\n\t[ \"1847\", \"Charity\", \"Booker\", \"61071\", \"Cocos (Keeling) Islands\" ],\n\t[ \"1848\", \"Flynn\", \"Bond\", \"E8L 9D2\", \"Afghanistan\" ],\n\t[ \"1849\", \"Sybill\", \"Roth\", \"16453\", \"Saudi Arabia\" ],\n\t[ \"1850\", \"Alyssa\", \"Juarez\", \"04466\", \"Singapore\" ],\n\t[ \"1851\", \"Jennifer\", \"Odonnell\", \"59277\", \"Tuvalu\" ],\n\t[ \"1852\", \"Carissa\", \"Byrd\", \"80861\", \"Palau\" ],\n\t[ \"1853\", \"Coby\", \"Barrett\", \"04665\", \"Congo\" ],\n\t[ \"1854\", \"Bertha\", \"Paul\", \"46442\", \"Andorra\" ],\n\t[ \"1855\", \"Hayden\", \"Dennis\", \"K7E 3O1\", \"France\" ],\n\t[ \"1856\", \"Kadeem\", \"Berry\", \"39544\", \"Vanuatu\" ],\n\t[ \"1857\", \"Clayton\", \"Burns\", \"C2A 6W5\", \"Andorra\" ],\n\t[ \"1858\", \"Breanna\", \"Hardy\", \"12284\", \"Norway\" ],\n\t[ \"1859\", \"Yael\", \"Hester\", \"69399\", \"Hong Kong\" ],\n\t[ \"1860\", \"Hunter\", \"Harding\", \"M4O 6N5\", \"Bosnia and Herzegovina\" ],\n\t[ \"1861\", \"Breanna\", \"Sutton\", \"N2C 6K3\", \"Singapore\" ],\n\t[ \"1862\", \"Bo\", \"Huffman\", \"54558\", \"Taiwan, Province of China\" ],\n\t[ \"1863\", \"Zena\", \"Potts\", \"80326\", \"Czech Republic\" ],\n\t[ \"1864\", \"Lucian\", \"Sykes\", \"D4M 6M5\", \"Trinidad and Tobago\" ],\n\t[ \"1865\", \"Gabriel\", \"Shepherd\", \"77631\", \"Bahrain\" ],\n\t[ \"1866\", \"Vivian\", \"Gould\", \"29510\", \"Norway\" ],\n\t[ \"1867\", \"Ina\", \"Sherman\", \"08122\", \"Portugal\" ],\n\t[ \"1868\", \"Constance\", \"Parsons\", \"D6E 9J8\", \"Armenia\" ],\n\t[ \"1869\", \"Tallulah\", \"Woodard\", \"51380\", \"Bahamas\" ],\n\t[ \"1870\", \"Amos\", \"Morris\", \"37846\", \"Switzerland\" ],\n\t[ \"1871\", \"Charles\", \"Kinney\", \"45961\", \"Marshall Islands\" ],\n\t[ \"1872\", \"Colby\", \"Camacho\", \"02978\", \"Niger\" ],\n\t[ \"1873\", \"Ora\", \"Hays\", \"B6F 9Z9\", \"Martinique\" ],\n\t[ \"1874\", \"Ariel\", \"Cannon\", \"04559\", \"Burundi\" ],\n\t[ \"1875\", \"Beatrice\", \"Hull\", \"66569\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1876\", \"Stacey\", \"Morrow\", \"53760\", \"Zimbabwe\" ],\n\t[ \"1877\", \"Naida\", \"Thomas\", \"43434\", \"Virgin Islands, U.S.\" ],\n\t[ \"1878\", \"Holly\", \"Holcomb\", \"31997\", \"Kazakhstan\" ],\n\t[ \"1879\", \"Lee\", \"Davenport\", \"99355\", \"Central African Republic\" ],\n\t[ \"1880\", \"Gary\", \"Higgins\", \"18703\", \"Norway\" ],\n\t[ \"1881\", \"Kay\", \"Wolf\", \"25509\", \"Switzerland\" ],\n\t[ \"1882\", \"Destiny\", \"Patel\", \"Q3X 2F8\", \"Ghana\" ],\n\t[ \"1883\", \"Clayton\", \"Middleton\", \"Y5C 1I8\", \"Antigua and Barbuda\" ],\n\t[ \"1884\", \"May\", \"Rivers\", \"26782\", \"Uzbekistan\" ],\n\t[ \"1885\", \"Hadassah\", \"Caldwell\", \"64493\", \"Chile\" ],\n\t[ \"1886\", \"Penelope\", \"Gentry\", \"V5N 7A6\", \"Kyrgyzstan\" ],\n\t[ \"1887\", \"James\", \"Boyle\", \"95421\", \"Indonesia\" ],\n\t[ \"1888\", \"Yuli\", \"Cardenas\", \"W4U 5U1\", \"Solomon Islands\" ],\n\t[ \"1889\", \"George\", \"Simpson\", \"30385\", \"Brazil\" ],\n\t[ \"1890\", \"Thaddeus\", \"Ferrell\", \"E6Z 2D4\", \"Norfolk Island\" ],\n\t[ \"1891\", \"Piper\", \"Morrow\", \"S6I 1L8\", \"Estonia\" ],\n\t[ \"1892\", \"Xaviera\", \"Heath\", \"L8I 5G1\", \"Afghanistan\" ],\n\t[ \"1893\", \"Odette\", \"Patton\", \"L2S 4I8\", \"Bosnia and Herzegovina\" ],\n\t[ \"1894\", \"Stewart\", \"Phillips\", \"E8E 5W6\", \"El Salvador\" ],\n\t[ \"1895\", \"Kellie\", \"Cooper\", \"77401\", \"Cape Verde\" ],\n\t[ \"1896\", \"Kathleen\", \"Salinas\", \"F3O 4Z9\", \"Sierra Leone\" ],\n\t[ \"1897\", \"Fallon\", \"Bennett\", \"X3P 7L1\", \"Macedonia\" ],\n\t[ \"1898\", \"Jesse\", \"Guerrero\", \"I2B 1Q0\", \"Finland\" ],\n\t[ \"1899\", \"Zenaida\", \"Mcguire\", \"M5R 1X6\", \"Kenya\" ],\n\t[ \"1900\", \"Carolyn\", \"Richards\", \"03060\", \"Paraguay\" ],\n\t[ \"1901\", \"Ulla\", \"Bruce\", \"20940\", \"Cambodia\" ],\n\t[ \"1902\", \"Adrian\", \"Shaffer\", \"M5O 9Y2\", \"Thailand\" ],\n\t[ \"1903\", \"Callum\", \"Russo\", \"L3U 5S8\", \"Holy See (Vatican City State)\" ],\n\t[ \"1904\", \"Echo\", \"Mathews\", \"49158\", \"Spain\" ],\n\t[ \"1905\", \"Driscoll\", \"Buckner\", \"70115\", \"Solomon Islands\" ],\n\t[ \"1906\", \"Nayda\", \"Phillips\", \"Y7D 4A9\", \"Singapore\" ],\n\t[ \"1907\", \"Piper\", \"Livingston\", \"51701\", \"Anguilla\" ],\n\t[ \"1908\", \"Zoe\", \"Hoover\", \"C8D 8W2\", \"Iraq\" ],\n\t[ \"1909\", \"Veronica\", \"Montoya\", \"G6B 9S4\", \"Egypt\" ],\n\t[ \"1910\", \"Kato\", \"Richmond\", \"41268\", \"Saint Helena\" ],\n\t[ \"1911\", \"Kevyn\", \"Lancaster\", \"71863\", \"Montserrat\" ],\n\t[ \"1912\", \"Rowan\", \"Carr\", \"90825\", \"Ethiopia\" ],\n\t[ \"1913\", \"Alec\", \"Wells\", \"C9P 8I7\", \"Netherlands\" ],\n\t[ \"1914\", \"Graham\", \"Shields\", \"S4B 5O9\", \"Norfolk Island\" ],\n\t[ \"1915\", \"Pearl\", \"Austin\", \"43642\", \"Bermuda\" ],\n\t[ \"1916\", \"Dana\", \"Pugh\", \"H4C 2A9\", \"Tuvalu\" ],\n\t[ \"1917\", \"Lucy\", \"Ellis\", \"31272\", \"Cameroon\" ],\n\t[ \"1918\", \"Logan\", \"Wright\", \"18651\", \"Honduras\" ],\n\t[ \"1919\", \"Chantale\", \"Velasquez\", \"A5D 3X2\", \"Burundi\" ],\n\t[ \"1920\", \"Linda\", \"Ingram\", \"R1P 1G8\", \"Myanmar\" ],\n\t[ \"1921\", \"Ginger\", \"Howell\", \"Q5D 4E6\", \"Pakistan\" ],\n\t[ \"1922\", \"Unity\", \"Lester\", \"P7M 7A4\", \"Gibraltar\" ],\n\t[ \"1923\", \"Brett\", \"Rutledge\", \"Q1E 2B4\", \"Thailand\" ],\n\t[ \"1924\", \"Stewart\", \"Morrow\", \"84299\", \"Mali\" ],\n\t[ \"1925\", \"Declan\", \"Aguilar\", \"35400\", \"Kenya\" ],\n\t[ \"1926\", \"Shad\", \"Simpson\", \"N8E 2U3\", \"Saint Pierre and Miquelon\" ],\n\t[ \"1927\", \"Alma\", \"Benton\", \"Q6C 5D2\", \"Pakistan\" ],\n\t[ \"1928\", \"Herman\", \"Bailey\", \"P5K 2X4\", \"Ireland\" ],\n\t[ \"1929\", \"Keegan\", \"Mendez\", \"19421\", \"Lesotho\" ],\n\t[ \"1930\", \"Erasmus\", \"Foreman\", \"J9T 1A2\", \"Panama\" ],\n\t[ \"1931\", \"Tarik\", \"Meyers\", \"Z8V 5F9\", \"Cape Verde\" ],\n\t[ \"1932\", \"Donovan\", \"Knox\", \"B8N 1G7\", \"Iceland\" ],\n\t[ \"1933\", \"Chloe\", \"Mccray\", \"67537\", \"United Arab Emirates\" ],\n\t[ \"1934\", \"Marvin\", \"Edwards\", \"21809\", \"Ukraine\" ],\n\t[ \"1935\", \"Freya\", \"Watkins\", \"80099\", \"Central African Republic\" ],\n\t[ \"1936\", \"Jerry\", \"Morgan\", \"C7U 7H5\", \"Guinea\" ],\n\t[ \"1937\", \"Yardley\", \"Marsh\", \"23654\", \"India\" ],\n\t[ \"1938\", \"Ava\", \"Mueller\", \"83374\", \"Greece\" ],\n\t[ \"1939\", \"Silas\", \"Joseph\", \"P5M 7F2\", \"Sweden\" ],\n\t[ \"1940\", \"Winifred\", \"Solis\", \"12335\", \"Viet Nam\" ],\n\t[ \"1941\", \"Virginia\", \"Cantu\", \"K4C 3S5\", \"Yemen\" ],\n\t[ \"1942\", \"Sade\", \"Cole\", \"40295\", \"Spain\" ],\n\t[ \"1943\", \"Ethan\", \"Hodges\", \"R7W 8X2\", \"Congo\" ],\n\t[ \"1944\", \"Barbara\", \"Day\", \"K6L 7S6\", \"Nigeria\" ],\n\t[ \"1945\", \"Conan\", \"Simon\", \"22124\", \"Guyana\" ],\n\t[ \"1946\", \"Lars\", \"Puckett\", \"R6Y 4N7\", \"Trinidad and Tobago\" ],\n\t[ \"1947\", \"Quin\", \"Ewing\", \"99053\", \"American Samoa\" ],\n\t[ \"1948\", \"Ali\", \"Haynes\", \"N6Z 7X0\", \"China\" ],\n\t[ \"1949\", \"Sara\", \"Wagner\", \"74544\", \"Chad\" ],\n\t[ \"1950\", \"Griffith\", \"Fuentes\", \"R1W 6Z9\", \"Slovenia\" ],\n\t[ \"1951\", \"Sharon\", \"Crane\", \"I2Z 9D6\", \"Philippines\" ],\n\t[ \"1952\", \"Marsden\", \"Acosta\", \"K6C 8C5\", \"Jordan\" ],\n\t[ \"1953\", \"Whoopi\", \"Villarreal\", \"E2O 1T5\", \"Svalbard and Jan Mayen\" ],\n\t[ \"1954\", \"Bruno\", \"Ball\", \"31931\", \"Barbados\" ],\n\t[ \"1955\", \"Ulric\", \"Young\", \"T4R 3M5\", \"Solomon Islands\" ],\n\t[ \"1956\", \"Noah\", \"Gonzalez\", \"L3O 6V5\", \"Mayotte\" ],\n\t[ \"1957\", \"Cheryl\", \"Gilliam\", \"F4Q 4H9\", \"Albania\" ],\n\t[ \"1958\", \"Bo\", \"Rowe\", \"67020\", \"Jamaica\" ],\n\t[ \"1959\", \"Kelly\", \"Alexander\", \"P8Y 9K5\", \"Somalia\" ],\n\t[ \"1960\", \"Hop\", \"Navarro\", \"O1G 9R6\", \"Cayman Islands\" ],\n\t[ \"1961\", \"Zachery\", \"Howard\", \"67147\", \"Fiji\" ],\n\t[ \"1962\", \"Elvis\", \"Daugherty\", \"X8V 7S7\", \"Jordan\" ],\n\t[ \"1963\", \"Mallory\", \"Hensley\", \"A5S 1U6\", \"Swaziland\" ],\n\t[ \"1964\", \"Fulton\", \"Williams\", \"P4C 4O5\", \"Viet Nam\" ],\n\t[ \"1965\", \"Madison\", \"Pittman\", \"F8G 1P9\", \"Chile\" ],\n\t[ \"1966\", \"Kermit\", \"Bradford\", \"W2T 6I5\", \"Uganda\" ],\n\t[ \"1967\", \"Gabriel\", \"Ballard\", \"N5M 6W0\", \"Andorra\" ],\n\t[ \"1968\", \"Jasmine\", \"Barber\", \"M2Z 7G5\", \"French Guiana\" ],\n\t[ \"1969\", \"Thane\", \"Koch\", \"21097\", \"Armenia\" ],\n\t[ \"1970\", \"Montana\", \"Oneal\", \"L2A 9Q6\", \"South Africa\" ],\n\t[ \"1971\", \"Brett\", \"Coleman\", \"79399\", \"Luxembourg\" ],\n\t[ \"1972\", \"Ivy\", \"Jimenez\", \"28549\", \"Senegal\" ],\n\t[ \"1973\", \"Shad\", \"Melton\", \"Z8N 4Z5\", \"Cook Islands\" ],\n\t[ \"1974\", \"Suki\", \"Vance\", \"H1A 1Z3\", \"Ireland\" ],\n\t[ \"1975\", \"Jin\", \"Hodges\", \"L2I 3T8\", \"France\" ],\n\t[ \"1976\", \"Diana\", \"Booth\", \"M3V 1S8\", \"Iran, Islamic Republic of\" ],\n\t[ \"1977\", \"Martha\", \"Nunez\", \"27837\", \"Northern Mariana Islands\" ],\n\t[ \"1978\", \"Silas\", \"Ayers\", \"17121\", \"United States\" ],\n\t[ \"1979\", \"Ainsley\", \"Whitaker\", \"42695\", \"Dominica\" ],\n\t[ \"1980\", \"Dillon\", \"Tucker\", \"N3R 3P3\", \"Botswana\" ],\n\t[ \"1981\", \"Lillian\", \"West\", \"57665\", \"Palau\" ],\n\t[ \"1982\", \"Talon\", \"Hart\", \"Z6T 4W3\", \"Serbia and Montenegro\" ],\n\t[ \"1983\", \"Desiree\", \"Booth\", \"Q1W 9S1\", \"Gambia\" ],\n\t[ \"1984\", \"Chastity\", \"Merrill\", \"F3B 9W7\", \"Puerto Rico\" ],\n\t[ \"1985\", \"Nichole\", \"Leon\", \"T7V 5D6\", \"Belize\" ],\n\t[ \"1986\", \"Rafael\", \"Washington\", \"87676\", \"Eritrea\" ],\n\t[ \"1987\", \"Samson\", \"Mathews\", \"G7Q 5V6\", \"Burkina Faso\" ],\n\t[ \"1988\", \"Jasper\", \"Campbell\", \"23791\", \"Thailand\" ],\n\t[ \"1989\", \"Mason\", \"Harrington\", \"R9R 5S3\", \"Nigeria\" ],\n\t[ \"1990\", \"Jameson\", \"Frederick\", \"R1N 4S0\", \"Guyana\" ],\n\t[ \"1991\", \"Cadman\", \"Woodard\", \"43080\", \"Gambia\" ],\n\t[ \"1992\", \"Catherine\", \"Gill\", \"W4W 8A4\", \"Philippines\" ],\n\t[ \"1993\", \"Yael\", \"Richards\", \"99504\", \"Kenya\" ],\n\t[ \"1994\", \"Porter\", \"Finley\", \"C8Z 5E0\", \"Brunei Darussalam\" ],\n\t[ \"1995\", \"Alden\", \"Merritt\", \"P4E 9F0\", \"Mali\" ],\n\t[ \"1996\", \"Kaye\", \"Andrews\", \"I5I 3A4\", \"Cayman Islands\" ],\n\t[ \"1997\", \"Luke\", \"Bryant\", \"F3Z 2U1\", \"Kuwait\" ],\n\t[ \"1998\", \"Heather\", \"Blackburn\", \"L1T 6B9\", \"Mongolia\" ],\n\t[ \"1999\", \"Gage\", \"Sykes\", \"L9Q 7E6\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2000\", \"Kaseem\", \"Harris\", \"B9O 1C3\", \"Korea\" ],\n\t[ \"2001\", \"Quail\", \"Leonard\", \"88755\", \"Burkina Faso\" ],\n\t[ \"2002\", \"Dennis\", \"Craft\", \"13309\", \"Namibia\" ],\n\t[ \"2003\", \"Ivor\", \"Forbes\", \"C3P 2E1\", \"Malta\" ],\n\t[ \"2004\", \"Cade\", \"Herman\", \"R1E 5X9\", \"Sri Lanka\" ],\n\t[ \"2005\", \"Larissa\", \"Santiago\", \"57781\", \"Dominica\" ],\n\t[ \"2006\", \"Hyatt\", \"Tillman\", \"45071\", \"Ghana\" ],\n\t[ \"2007\", \"Timothy\", \"Rodgers\", \"F8W 9W0\", \"Andorra\" ],\n\t[ \"2008\", \"Hanae\", \"Powell\", \"F8B 7P7\", \"Luxembourg\" ],\n\t[ \"2009\", \"Ima\", \"Pennington\", \"Z5W 5N5\", \"Latvia\" ],\n\t[ \"2010\", \"Laurel\", \"Bell\", \"16805\", \"Venezuela\" ],\n\t[ \"2011\", \"Avye\", \"Long\", \"04794\", \"Dominica\" ],\n\t[ \"2012\", \"Lysandra\", \"Pierce\", \"H7O 3F4\", \"Zimbabwe\" ],\n\t[ \"2013\", \"Eve\", \"Pollard\", \"L5K 6E2\", \"Algeria\" ],\n\t[ \"2014\", \"Ina\", \"Mcdowell\", \"65712\", \"Saint Lucia\" ],\n\t[ \"2015\", \"Meredith\", \"Serrano\", \"V8M 6K7\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2016\", \"Daphne\", \"Irwin\", \"89933\", \"Mongolia\" ],\n\t[ \"2017\", \"Adam\", \"Henson\", \"F6U 9D5\", \"Chile\" ],\n\t[ \"2018\", \"Amery\", \"Hoover\", \"13408\", \"Mongolia\" ],\n\t[ \"2019\", \"Quamar\", \"Hendricks\", \"20310\", \"Gambia\" ],\n\t[ \"2020\", \"Ori\", \"Wheeler\", \"89005\", \"Nigeria\" ],\n\t[ \"2021\", \"Zena\", \"Douglas\", \"Z1O 6F9\", \"Serbia and Montenegro\" ],\n\t[ \"2022\", \"Buckminster\", \"Huffman\", \"R4V 9L2\", \"Mali\" ],\n\t[ \"2023\", \"Harlan\", \"Gamble\", \"U4I 7M4\", \"Guyana\" ],\n\t[ \"2024\", \"Dalton\", \"Cline\", \"63829\", \"Tonga\" ],\n\t[ \"2025\", \"Martha\", \"Weber\", \"Z9B 4T0\", \"Bangladesh\" ],\n\t[ \"2026\", \"Vernon\", \"Francis\", \"M5A 9X7\", \"Tokelau\" ],\n\t[ \"2027\", \"Janna\", \"Velazquez\", \"67406\", \"Qatar\" ],\n\t[ \"2028\", \"Fuller\", \"Keller\", \"80871\", \"Burkina Faso\" ],\n\t[ \"2029\", \"Jamal\", \"Spears\", \"42197\", \"Norfolk Island\" ],\n\t[ \"2030\", \"Christen\", \"Holcomb\", \"29806\", \"Norway\" ],\n\t[ \"2031\", \"Mary\", \"Carter\", \"C6W 9K9\", \"Belgium\" ],\n\t[ \"2032\", \"Colorado\", \"Austin\", \"62904\", \"Cook Islands\" ],\n\t[ \"2033\", \"Fritz\", \"Hunt\", \"X8G 2V0\", \"Morocco\" ],\n\t[ \"2034\", \"Isabella\", \"Bush\", \"17676\", \"Monaco\" ],\n\t[ \"2035\", \"Adam\", \"Gilliam\", \"H7K 9X3\", \"Indonesia\" ],\n\t[ \"2036\", \"John\", \"Austin\", \"O7X 4Z0\", \"Czech Republic\" ],\n\t[ \"2037\", \"Cassady\", \"Yates\", \"68835\", \"Christmas Island\" ],\n\t[ \"2038\", \"Ori\", \"Cantrell\", \"56920\", \"Guinea\" ],\n\t[ \"2039\", \"May\", \"Horn\", \"47805\", \"Kuwait\" ],\n\t[ \"2040\", \"Skyler\", \"Clarke\", \"64131\", \"Lebanon\" ],\n\t[ \"2041\", \"Levi\", \"Foster\", \"S5Q 4B2\", \"Germany\" ],\n\t[ \"2042\", \"Veda\", \"Wilkinson\", \"L7Z 9M8\", \"Niger\" ],\n\t[ \"2043\", \"Brendan\", \"Levine\", \"L5B 9P4\", \"Nepal\" ],\n\t[ \"2044\", \"Carson\", \"Sullivan\", \"93066\", \"United Arab Emirates\" ],\n\t[ \"2045\", \"Steven\", \"Spencer\", \"F1V 9A7\", \"Pitcairn\" ],\n\t[ \"2046\", \"Halla\", \"Michael\", \"N1U 1E7\", \"Seychelles\" ],\n\t[ \"2047\", \"Jamal\", \"Hobbs\", \"G3D 6J7\", \"New Caledonia\" ],\n\t[ \"2048\", \"Steel\", \"Bush\", \"U8F 6T2\", \"Belize\" ],\n\t[ \"2049\", \"Ahmed\", \"Dennis\", \"M6E 3P3\", \"Afghanistan\" ],\n\t[ \"2050\", \"Aspen\", \"Estes\", \"32157\", \"American Samoa\" ],\n\t[ \"2051\", \"Peter\", \"Kelly\", \"91773\", \"Morocco\" ],\n\t[ \"2052\", \"Xandra\", \"Grimes\", \"66702\", \"Tokelau\" ],\n\t[ \"2053\", \"Michael\", \"Battle\", \"J2J 2N5\", \"Honduras\" ],\n\t[ \"2054\", \"Steel\", \"Wiggins\", \"34625\", \"United States Minor Outlying Islands\" ],\n\t[ \"2055\", \"Holmes\", \"Christian\", \"45402\", \"Liechtenstein\" ],\n\t[ \"2056\", \"Charles\", \"Barrett\", \"O4N 9N8\", \"Lebanon\" ],\n\t[ \"2057\", \"Hermione\", \"Soto\", \"C8E 4H8\", \"Congo\" ],\n\t[ \"2058\", \"Elton\", \"Maxwell\", \"89033\", \"Madagascar\" ],\n\t[ \"2059\", \"Zelda\", \"Burks\", \"B7W 5G7\", \"Sweden\" ],\n\t[ \"2060\", \"Lynn\", \"David\", \"P3D 5K5\", \"Chad\" ],\n\t[ \"2061\", \"Margaret\", \"Neal\", \"47438\", \"Western Sahara\" ],\n\t[ \"2062\", \"David\", \"Vaughan\", \"E3L 8D9\", \"Tokelau\" ],\n\t[ \"2063\", \"Vladimir\", \"Mcfarland\", \"U9V 1B3\", \"Belgium\" ],\n\t[ \"2064\", \"Uriah\", \"Harrington\", \"77051\", \"United Arab Emirates\" ],\n\t[ \"2065\", \"Noel\", \"Merritt\", \"J3G 7S1\", \"Dominican Republic\" ],\n\t[ \"2066\", \"Christine\", \"Key\", \"54543\", \"Niger\" ],\n\t[ \"2067\", \"Illana\", \"Hendricks\", \"07584\", \"Montserrat\" ],\n\t[ \"2068\", \"Pearl\", \"Lewis\", \"U5D 2V3\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2069\", \"Victoria\", \"Bullock\", \"17462\", \"Mauritania\" ],\n\t[ \"2070\", \"Benedict\", \"Marsh\", \"61479\", \"Guyana\" ],\n\t[ \"2071\", \"Quemby\", \"Washington\", \"99774\", \"French Polynesia\" ],\n\t[ \"2072\", \"Shelley\", \"Noble\", \"U8S 5Z4\", \"Philippines\" ],\n\t[ \"2073\", \"Olivia\", \"Britt\", \"72344\", \"Holy See (Vatican City State)\" ],\n\t[ \"2074\", \"Oleg\", \"Hendrix\", \"67567\", \"Cuba\" ],\n\t[ \"2075\", \"Hermione\", \"Gutierrez\", \"J5K 2J1\", \"Mozambique\" ],\n\t[ \"2076\", \"Myra\", \"Dean\", \"03485\", \"Andorra\" ],\n\t[ \"2077\", \"Deacon\", \"Moore\", \"34501\", \"Tunisia\" ],\n\t[ \"2078\", \"Dai\", \"Baird\", \"B2P 4R0\", \"Cambodia\" ],\n\t[ \"2079\", \"Levi\", \"Melton\", \"K7T 4B1\", \"Zimbabwe\" ],\n\t[ \"2080\", \"Ocean\", \"Dalton\", \"66801\", \"Gabon\" ],\n\t[ \"2081\", \"Selma\", \"Harding\", \"D7N 3J9\", \"Kyrgyzstan\" ],\n\t[ \"2082\", \"Maisie\", \"Gill\", \"56324\", \"Morocco\" ],\n\t[ \"2083\", \"Hillary\", \"Horne\", \"Y6O 6G3\", \"Cyprus\" ],\n\t[ \"2084\", \"Joel\", \"Stokes\", \"77952\", \"Burundi\" ],\n\t[ \"2085\", \"Channing\", \"Patterson\", \"G6B 8H4\", \"China\" ],\n\t[ \"2086\", \"Elliott\", \"Cleveland\", \"H3J 9U9\", \"Namibia\" ],\n\t[ \"2087\", \"Petra\", \"Gay\", \"44314\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2088\", \"May\", \"Hatfield\", \"48918\", \"Faroe Islands\" ],\n\t[ \"2089\", \"Jemima\", \"Francis\", \"14347\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2090\", \"Kyla\", \"Hale\", \"46200\", \"Cocos (Keeling) Islands\" ],\n\t[ \"2091\", \"Veda\", \"Bruce\", \"F5W 9A6\", \"Mauritania\" ],\n\t[ \"2092\", \"Sybill\", \"Avila\", \"58663\", \"Angola\" ],\n\t[ \"2093\", \"Charissa\", \"Salazar\", \"35271\", \"Faroe Islands\" ],\n\t[ \"2094\", \"Steven\", \"Allison\", \"E5L 4A3\", \"Wallis and Futuna\" ],\n\t[ \"2095\", \"Kane\", \"Parks\", \"D5C 6K7\", \"Norfolk Island\" ],\n\t[ \"2096\", \"Alika\", \"Bishop\", \"S3P 3O3\", \"China\" ],\n\t[ \"2097\", \"James\", \"Bonner\", \"33277\", \"Canada\" ],\n\t[ \"2098\", \"Yoko\", \"Foster\", \"B5J 6P9\", \"Croatia\" ],\n\t[ \"2099\", \"Ivy\", \"Riggs\", \"94420\", \"Kiribati\" ],\n\t[ \"2100\", \"Urielle\", \"Rosa\", \"V6W 2A0\", \"Falkland Islands (Malvinas)\" ],\n\t[ \"2101\", \"Armando\", \"Shepherd\", \"Y5C 5W6\", \"Panama\" ],\n\t[ \"2102\", \"Haley\", \"Ingram\", \"B4H 5U5\", \"Fiji\" ],\n\t[ \"2103\", \"Brielle\", \"Dyer\", \"P2S 4H7\", \"Malawi\" ],\n\t[ \"2104\", \"Francis\", \"Brady\", \"24239\", \"Uruguay\" ],\n\t[ \"2105\", \"Fiona\", \"Webster\", \"72015\", \"Belize\" ],\n\t[ \"2106\", \"Aiko\", \"Santos\", \"K4H 1N0\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2107\", \"Amir\", \"Rivas\", \"02737\", \"Papua New Guinea\" ],\n\t[ \"2108\", \"Mira\", \"Kerr\", \"W6E 6Y2\", \"Sri Lanka\" ],\n\t[ \"2109\", \"Harrison\", \"Jensen\", \"50193\", \"Heard Island and Mcdonald Islands\" ],\n\t[ \"2110\", \"Merrill\", \"Randall\", \"21534\", \"Colombia\" ],\n\t[ \"2111\", \"Benjamin\", \"Howe\", \"N8M 4N6\", \"Turkmenistan\" ],\n\t[ \"2112\", \"Melyssa\", \"Kidd\", \"97657\", \"Cameroon\" ],\n\t[ \"2113\", \"Henry\", \"Moore\", \"95626\", \"Botswana\" ],\n\t[ \"2114\", \"Nash\", \"Peters\", \"K3V 9F3\", \"Wallis and Futuna\" ],\n\t[ \"2115\", \"Iliana\", \"Holt\", \"E9F 2Q8\", \"Netherlands Antilles\" ],\n\t[ \"2116\", \"Naomi\", \"Hood\", \"P6D 2G3\", \"Anguilla\" ],\n\t[ \"2117\", \"Ainsley\", \"Barron\", \"94273\", \"New Caledonia\" ],\n\t[ \"2118\", \"Daphne\", \"Acevedo\", \"A9I 9E4\", \"Bermuda\" ],\n\t[ \"2119\", \"Kiona\", \"Keith\", \"62523\", \"Saint Lucia\" ],\n\t[ \"2120\", \"Kirsten\", \"Mcgee\", \"97481\", \"Macedonia\" ],\n\t[ \"2121\", \"Emerald\", \"Franklin\", \"Q2I 6D6\", \"Botswana\" ],\n\t[ \"2122\", \"Hall\", \"Schroeder\", \"I2D 9L7\", \"Kenya\" ],\n\t[ \"2123\", \"Amaya\", \"Lynch\", \"50534\", \"Costa Rica\" ],\n\t[ \"2124\", \"Randall\", \"Hanson\", \"B4R 2S3\", \"United Arab Emirates\" ],\n\t[ \"2125\", \"Sasha\", \"Clarke\", \"50972\", \"United States Minor Outlying Islands\" ],\n\t[ \"2126\", \"Susan\", \"Sutton\", \"Z4T 6K3\", \"Solomon Islands\" ],\n\t[ \"2127\", \"Hiram\", \"Torres\", \"C8O 5O7\", \"Botswana\" ],\n\t[ \"2128\", \"Melanie\", \"Calhoun\", \"87097\", \"New Zealand\" ],\n\t[ \"2129\", \"Courtney\", \"Sutton\", \"07944\", \"Spain\" ],\n\t[ \"2130\", \"Reuben\", \"Beard\", \"U6Z 8N5\", \"Faroe Islands\" ],\n\t[ \"2131\", \"Jarrod\", \"Payne\", \"94171\", \"Turkey\" ],\n\t[ \"2132\", \"Vincent\", \"Potts\", \"V5Z 9G9\", \"Madagascar\" ],\n\t[ \"2133\", \"Kaye\", \"Kent\", \"O1B 2Z9\", \"Fiji\" ],\n\t[ \"2134\", \"Carol\", \"Green\", \"78719\", \"Comoros\" ],\n\t[ \"2135\", \"Cairo\", \"Combs\", \"G3C 8F0\", \"Indonesia\" ],\n\t[ \"2136\", \"Ebony\", \"Parker\", \"77377\", \"Portugal\" ],\n\t[ \"2137\", \"Gary\", \"Shaffer\", \"F1B 9W7\", \"French Guiana\" ],\n\t[ \"2138\", \"Gay\", \"Jimenez\", \"05726\", \"Nepal\" ],\n\t[ \"2139\", \"Patience\", \"Bryan\", \"60437\", \"Macao\" ],\n\t[ \"2140\", \"Zenaida\", \"Bowen\", \"V3S 1G7\", \"Mauritania\" ],\n\t[ \"2141\", \"Isaac\", \"Aguirre\", \"X8S 9K4\", \"Bermuda\" ],\n\t[ \"2142\", \"Lacy\", \"Harrell\", \"67362\", \"Bhutan\" ],\n\t[ \"2143\", \"Jael\", \"Grimes\", \"95612\", \"Anguilla\" ],\n\t[ \"2144\", \"Catherine\", \"Galloway\", \"45834\", \"Suriname\" ],\n\t[ \"2145\", \"Donna\", \"Burt\", \"N8C 2M8\", \"Burkina Faso\" ],\n\t[ \"2146\", \"Colleen\", \"Ball\", \"N3E 4U8\", \"Libyan Arab Jamahiriya\" ],\n\t[ \"2147\", \"Lael\", \"Brady\", \"01369\", \"Macedonia\" ],\n\t[ \"2148\", \"Kermit\", \"Logan\", \"Y5P 8Q8\", \"Honduras\" ],\n\t[ \"2149\", \"Katelyn\", \"Orr\", \"R7X 9W3\", \"Switzerland\" ],\n\t[ \"2150\", \"Alisa\", \"Glenn\", \"17831\", \"Timor-leste\" ],\n\t[ \"2151\", \"Lee\", \"Bean\", \"89445\", \"Guam\" ],\n\t[ \"2152\", \"Maryam\", \"Cotton\", \"57924\", \"Gambia\" ],\n\t[ \"2153\", \"Amena\", \"Love\", \"X1Z 6F7\", \"Thailand\" ],\n\t[ \"2154\", \"Tallulah\", \"Case\", \"87477\", \"Ecuador\" ],\n\t[ \"2155\", \"Carlos\", \"Sanford\", \"F6S 8J6\", \"Iraq\" ],\n\t[ \"2156\", \"Quamar\", \"David\", \"D5F 2M8\", \"Gabon\" ],\n\t[ \"2157\", \"Cassady\", \"Mays\", \"12786\", \"Netherlands\" ],\n\t[ \"2158\", \"Jenna\", \"Rowland\", \"88845\", \"China\" ],\n\t[ \"2159\", \"Justin\", \"Tanner\", \"66071\", \"Nepal\" ],\n\t[ \"2160\", \"Riley\", \"Santiago\", \"F8K 2Y6\", \"Gabon\" ],\n\t[ \"2161\", \"Iris\", \"Gallegos\", \"K9C 3T9\", \"Niue\" ],\n\t[ \"2162\", \"Kato\", \"Osborn\", \"N4C 2L8\", \"Puerto Rico\" ],\n\t[ \"2163\", \"Imogene\", \"Schroeder\", \"79710\", \"United States Minor Outlying Islands\" ],\n\t[ \"2164\", \"Olympia\", \"Hebert\", \"D4W 1L0\", \"Saint Lucia\" ],\n\t[ \"2165\", \"Skyler\", \"Burnett\", \"B2R 5H7\", \"Antarctica\" ],\n\t[ \"2166\", \"Faith\", \"Sims\", \"88476\", \"Egypt\" ],\n\t[ \"2167\", \"Emily\", \"Odom\", \"U7O 2P6\", \"Kuwait\" ],\n\t[ \"2168\", \"Carly\", \"Washington\", \"46063\", \"Benin\" ],\n\t[ \"2169\", \"Jolene\", \"Meyer\", \"B2B 9A4\", \"Australia\" ],\n\t[ \"2170\", \"Ayanna\", \"Conrad\", \"84360\", \"Northern Mariana Islands\" ],\n\t[ \"2171\", \"Violet\", \"Blankenship\", \"W2B 3U1\", \"New Caledonia\" ],\n\t[ \"2172\", \"Rhona\", \"Gallegos\", \"10931\", \"Montserrat\" ],\n\t[ \"2173\", \"Alice\", \"Hodges\", \"96181\", \"Burkina Faso\" ],\n\t[ \"2174\", \"Brody\", \"Sandoval\", \"68959\", \"Pitcairn\" ],\n\t[ \"2175\", \"Isabella\", \"Dunlap\", \"U8U 7Y8\", \"Afghanistan\" ],\n\t[ \"2176\", \"Jordan\", \"Golden\", \"55152\", \"Guam\" ],\n\t[ \"2177\", \"Gillian\", \"Thomas\", \"75633\", \"Djibouti\" ],\n\t[ \"2178\", \"Hollee\", \"Clay\", \"79847\", \"Panama\" ],\n\t[ \"2179\", \"Dane\", \"Knapp\", \"89535\", \"Armenia\" ],\n\t[ \"2180\", \"Avram\", \"Martin\", \"T4S 4E2\", \"Madagascar\" ],\n\t[ \"2181\", \"Fuller\", \"Newman\", \"47317\", \"Jamaica\" ],\n\t[ \"2182\", \"Nina\", \"Berry\", \"81360\", \"Mongolia\" ],\n\t[ \"2183\", \"Akeem\", \"Pratt\", \"56230\", \"Colombia\" ],\n\t[ \"2184\", \"Lacy\", \"Hayes\", \"U7T 4F5\", \"Cyprus\" ],\n\t[ \"2185\", \"Alfonso\", \"Mcclure\", \"06797\", \"Swaziland\" ],\n\t[ \"2186\", \"Cedric\", \"Love\", \"64720\", \"Bermuda\" ],\n\t[ \"2187\", \"Astra\", \"Fernandez\", \"H3I 1B0\", \"Mongolia\" ],\n\t[ \"2188\", \"Iliana\", \"Durham\", \"R8C 7M8\", \"Spain\" ],\n\t[ \"2189\", \"Gwendolyn\", \"Livingston\", \"C7X 5L1\", \"Northern Mariana Islands\" ],\n\t[ \"2190\", \"Caldwell\", \"Anderson\", \"69099\", \"Kuwait\" ],\n\t[ \"2191\", \"Risa\", \"Mejia\", \"P7A 4U7\", \"Israel\" ],\n\t[ \"2192\", \"Dora\", \"Navarro\", \"L6G 2O8\", \"Ireland\" ],\n\t[ \"2193\", \"Kirk\", \"Dean\", \"I2T 3E6\", \"Pitcairn\" ],\n\t[ \"2194\", \"Jackson\", \"Harvey\", \"53467\", \"Myanmar\" ],\n\t[ \"2195\", \"Thane\", \"Ballard\", \"87240\", \"Solomon Islands\" ],\n\t[ \"2196\", \"Nadine\", \"Estes\", \"62003\", \"Malta\" ],\n\t[ \"2197\", \"Candace\", \"Nunez\", \"57223\", \"Virgin Islands, British\" ],\n\t[ \"2198\", \"Zelda\", \"Odom\", \"X4V 7F5\", \"Mongolia\" ],\n\t[ \"2199\", \"Wylie\", \"Ayala\", \"S4I 4Q4\", \"Djibouti\" ],\n\t[ \"2200\", \"Azalia\", \"Page\", \"57239\", \"Korea, Republic of\" ],\n\t[ \"2201\", \"Joshua\", \"Burch\", \"R7B 1N7\", \"Samoa\" ],\n\t[ \"2202\", \"Basil\", \"Ramos\", \"71614\", \"Tunisia\" ],\n\t[ \"2203\", \"Jessica\", \"Shields\", \"U2D 4X3\", \"Syrian Arab Republic\" ],\n\t[ \"2204\", \"Clio\", \"Singleton\", \"I1B 1B0\", \"Ghana\" ],\n\t[ \"2205\", \"Astra\", \"Dotson\", \"62378\", \"Turks and Caicos Islands\" ],\n\t[ \"2206\", \"Hamish\", \"Tucker\", \"E4Z 3N3\", \"Anguilla\" ],\n\t[ \"2207\", \"Rachel\", \"Matthews\", \"U4I 8M3\", \"Trinidad and Tobago\" ],\n\t[ \"2208\", \"Clayton\", \"Ball\", \"95319\", \"India\" ],\n\t[ \"2209\", \"Quinn\", \"Wilkinson\", \"Y6M 3Q7\", \"Virgin Islands, U.S.\" ],\n\t[ \"2210\", \"Phelan\", \"Talley\", \"00543\", \"Philippines\" ],\n\t[ \"2211\", \"Carol\", \"Brock\", \"M6X 4E2\", \"Gibraltar\" ],\n\t[ \"2212\", \"Nomlanga\", \"Robles\", \"56511\", \"Viet Nam\" ],\n\t[ \"2213\", \"Adrian\", \"Clay\", \"79479\", \"France\" ],\n\t[ \"2214\", \"Sara\", \"Riley\", \"B9N 5P4\", \"Peru\" ],\n\t[ \"2215\", \"Christine\", \"Sweeney\", \"W1Z 4S4\", \"French Polynesia\" ],\n\t[ \"2216\", \"Leilani\", \"Johnston\", \"W1C 8M8\", \"American Samoa\" ],\n\t[ \"2217\", \"Melyssa\", \"Lambert\", \"V1B 4P6\", \"Iraq\" ],\n\t[ \"2218\", \"Talon\", \"Delacruz\", \"Y3N 9R2\", \"Bulgaria\" ],\n\t[ \"2219\", \"Garth\", \"Jennings\", \"59667\", \"Malta\" ],\n\t[ \"2220\", \"Naida\", \"Coleman\", \"45456\", \"Finland\" ],\n\t[ \"2221\", \"Indigo\", \"Lopez\", \"77160\", \"Pitcairn\" ],\n\t[ \"2222\", \"Asher\", \"French\", \"99064\", \"British Indian Ocean Territory\" ],\n\t[ \"2223\", \"Vivian\", \"Mcgowan\", \"46310\", \"Oman\" ],\n\t[ \"2224\", \"Gwendolyn\", \"Cervantes\", \"48905\", \"Cocos (Keeling) Islands\" ],\n\t[ \"2225\", \"Logan\", \"Reid\", \"87376\", \"Ethiopia\" ],\n\t[ \"2226\", \"Bryar\", \"Wolfe\", \"75860\", \"Comoros\" ],\n\t[ \"2227\", \"Demetrius\", \"Hutchinson\", \"97252\", \"Dominican Republic\" ],\n\t[ \"2228\", \"Freya\", \"Becker\", \"04872\", \"United States\" ],\n\t[ \"2229\", \"Abel\", \"Brooks\", \"I7O 1M1\", \"Comoros\" ],\n\t[ \"2230\", \"Silas\", \"Mcguire\", \"04101\", \"Indonesia\" ],\n\t[ \"2231\", \"Quinn\", \"Fletcher\", \"B6E 2B0\", \"Niger\" ],\n\t[ \"2232\", \"Rooney\", \"Holden\", \"29294\", \"Micronesia\" ],\n\t[ \"2233\", \"Iris\", \"Hale\", \"N7W 6E9\", \"Greenland\" ],\n\t[ \"2234\", \"Candace\", \"Barry\", \"U8I 5A4\", \"Germany\" ],\n\t[ \"2235\", \"Yetta\", \"Ball\", \"62055\", \"Switzerland\" ],\n\t[ \"2236\", \"Dai\", \"Bentley\", \"P2Y 4C5\", \"Dominica\" ],\n\t[ \"2237\", \"Gannon\", \"Dunlap\", \"45728\", \"Fiji\" ],\n\t[ \"2238\", \"Chelsea\", \"Mays\", \"36498\", \"Guinea\" ],\n\t[ \"2239\", \"Ruth\", \"Mcguire\", \"62924\", \"Maldives\" ],\n\t[ \"2240\", \"Melissa\", \"Durham\", \"D6S 1A2\", \"Armenia\" ],\n\t[ \"2241\", \"Eaton\", \"Salinas\", \"53689\", \"Somalia\" ],\n\t[ \"2242\", \"Driscoll\", \"Cunningham\", \"31194\", \"Sweden\" ],\n\t[ \"2243\", \"Bevis\", \"Acosta\", \"V4M 9Z2\", \"Jamaica\" ],\n\t[ \"2244\", \"Anastasia\", \"Mcknight\", \"24878\", \"Sao Tome and Principe\" ],\n\t[ \"2245\", \"Anika\", \"Rowland\", \"45287\", \"Chile\" ],\n\t[ \"2246\", \"Dexter\", \"Rollins\", \"00684\", \"Iran, Islamic Republic of\" ],\n\t[ \"2247\", \"Brielle\", \"Irwin\", \"V4U 7R2\", \"Belgium\" ],\n\t[ \"2248\", \"Ocean\", \"Fields\", \"08544\", \"Croatia\" ],\n\t[ \"2249\", \"Sonia\", \"Solis\", \"C4X 1L5\", \"Niue\" ],\n\t[ \"2250\", \"Joseph\", \"Haney\", \"29567\", \"Argentina\" ],\n\t[ \"2251\", \"Lamar\", \"Heath\", \"81699\", \"Italy\" ],\n\t[ \"2252\", \"Raya\", \"Jordan\", \"R6K 7B3\", \"Spain\" ],\n\t[ \"2253\", \"Brody\", \"Frost\", \"34564\", \"Dominican Republic\" ],\n\t[ \"2254\", \"Ann\", \"Hawkins\", \"S3A 5K7\", \"Yemen\" ],\n\t[ \"2255\", \"Phillip\", \"Lindsay\", \"80544\", \"Sierra Leone\" ],\n\t[ \"2256\", \"Willa\", \"Maynard\", \"A6A 4C5\", \"Mexico\" ],\n\t[ \"2257\", \"Carolyn\", \"Mercer\", \"V8Z 1X5\", \"Zimbabwe\" ],\n\t[ \"2258\", \"Justin\", \"Cole\", \"68764\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2259\", \"Emmanuel\", \"Parks\", \"99769\", \"Latvia\" ],\n\t[ \"2260\", \"Isaiah\", \"Salazar\", \"H1K 1X3\", \"Turks and Caicos Islands\" ],\n\t[ \"2261\", \"Vance\", \"Porter\", \"49607\", \"Costa Rica\" ],\n\t[ \"2262\", \"Igor\", \"Kim\", \"99489\", \"Turkmenistan\" ],\n\t[ \"2263\", \"Emi\", \"Graves\", \"F4M 5L8\", \"El Salvador\" ],\n\t[ \"2264\", \"Griffith\", \"Monroe\", \"11550\", \"Tanzania, United Republic of\" ],\n\t[ \"2265\", \"Iliana\", \"Coffey\", \"30220\", \"Albania\" ],\n\t[ \"2266\", \"Jemima\", \"Guthrie\", \"69283\", \"Saint Pierre and Miquelon\" ],\n\t[ \"2267\", \"Zenia\", \"Farrell\", \"91872\", \"Tanzania, United Republic of\" ],\n\t[ \"2268\", \"Lucas\", \"Chambers\", \"L5Z 1W0\", \"Bouvet Island\" ],\n\t[ \"2269\", \"Zenaida\", \"Valenzuela\", \"31700\", \"Guam\" ],\n\t[ \"2270\", \"Bradley\", \"Wynn\", \"21222\", \"Lithuania\" ],\n\t[ \"2271\", \"Maite\", \"Richard\", \"H4D 7X0\", \"Cameroon\" ],\n\t[ \"2272\", \"Moses\", \"House\", \"Y3Z 3K7\", \"Saint Vincent and The Grenadines\" ],\n\t[ \"2273\", \"Erich\", \"Petersen\", \"U4N 9R7\", \"Rwanda\" ],\n\t[ \"2274\", \"Stephanie\", \"Zimmerman\", \"70097\", \"Malawi\" ],\n\t[ \"2275\", \"Rylee\", \"Schneider\", \"15645\", \"Gibraltar\" ],\n\t[ \"2276\", \"Zia\", \"Craig\", \"H1K 1N9\", \"Norway\" ],\n\t[ \"2277\", \"Fiona\", \"Chaney\", \"Y4U 7K8\", \"San Marino\" ],\n\t[ \"2278\", \"Gil\", \"Sherman\", \"64720\", \"Wallis and Futuna\" ],\n\t[ \"2279\", \"Raja\", \"Sandoval\", \"11225\", \"Lithuania\" ],\n\t[ \"2280\", \"Illana\", \"Wyatt\", \"A2M 9O2\", \"Brazil\" ],\n\t[ \"2281\", \"Declan\", \"Howell\", \"E9V 8J5\", \"San Marino\" ],\n\t[ \"2282\", \"Warren\", \"Cooper\", \"47160\", \"Guyana\" ],\n\t[ \"2283\", \"Alyssa\", \"Juarez\", \"S7G 8F2\", \"Sweden\" ],\n\t[ \"2284\", \"Quynn\", \"Long\", \"P1P 5Y4\", \"Mexico\" ],\n\t[ \"2285\", \"Dalton\", \"Booker\", \"I5T 1R3\", \"Mauritius\" ],\n\t[ \"2286\", \"Lunea\", \"Mclaughlin\", \"I3F 6D4\", \"Togo\" ],\n\t[ \"2287\", \"Irene\", \"Brock\", \"04760\", \"Tajikistan\" ],\n\t[ \"2288\", \"Raven\", \"Floyd\", \"R2N 2Y5\", \"Philippines\" ],\n\t[ \"2289\", \"Nichole\", \"Farmer\", \"81213\", \"Seychelles\" ],\n\t[ \"2290\", \"Sophia\", \"Mcdonald\", \"86291\", \"Chile\" ],\n\t[ \"2291\", \"Nehru\", \"Matthews\", \"60732\", \"Central African Republic\" ],\n\t[ \"2292\", \"Marah\", \"Nelson\", \"44533\", \"Kenya\" ],\n\t[ \"2293\", \"Marvin\", \"Lyons\", \"M7Y 1Q6\", \"Somalia\" ],\n\t[ \"2294\", \"Ian\", \"Fernandez\", \"D9U 8B6\", \"Turkey\" ],\n\t[ \"2295\", \"Gretchen\", \"Dotson\", \"48294\", \"China\" ],\n\t[ \"2296\", \"Brady\", \"Weaver\", \"S4U 4I8\", \"Burundi\" ],\n\t[ \"2297\", \"Ella\", \"Salas\", \"73771\", \"Sao Tome and Principe\" ],\n\t[ \"2298\", \"Martha\", \"Irwin\", \"06554\", \"Timor-leste\" ],\n\t[ \"2299\", \"Penelope\", \"Pratt\", \"S1R 4L4\", \"Gabon\" ],\n\t[ \"2300\", \"Kenyon\", \"Dale\", \"64548\", \"Zimbabwe\" ],\n\t[ \"2301\", \"Henry\", \"Myers\", \"07614\", \"United Arab Emirates\" ],\n\t[ \"2302\", \"Chaney\", \"Dunlap\", \"18388\", \"French Southern Territories\" ],\n\t[ \"2303\", \"Palmer\", \"Le\", \"10807\", \"Colombia\" ],\n\t[ \"2304\", \"Kaseem\", \"Madden\", \"U4E 6L9\", \"Guyana\" ],\n\t[ \"2305\", \"Grant\", \"Anthony\", \"F3K 4D8\", \"Trinidad and Tobago\" ],\n\t[ \"2306\", \"Denton\", \"Moore\", \"I5O 4I5\", \"Belize\" ],\n\t[ \"2307\", \"Regan\", \"Pittman\", \"U8T 9M1\", \"Romania\" ],\n\t[ \"2308\", \"Valentine\", \"Hunt\", \"E9O 6H6\", \"Poland\" ],\n\t[ \"2309\", \"Abraham\", \"Love\", \"X1T 4K0\", \"Philippines\" ],\n\t[ \"2310\", \"Maggie\", \"Gaines\", \"W5Z 6L4\", \"Chad\" ],\n\t[ \"2311\", \"Kylynn\", \"Sears\", \"53419\", \"Ghana\" ],\n\t[ \"2312\", \"Abel\", \"Hudson\", \"O6C 6K5\", \"Malaysia\" ],\n\t[ \"2313\", \"Aladdin\", \"Brady\", \"16465\", \"Antarctica\" ],\n\t[ \"2314\", \"Laurel\", \"Bush\", \"42295\", \"Kyrgyzstan\" ],\n\t[ \"2315\", \"Cameron\", \"Shepherd\", \"Y8R 5L7\", \"Finland\" ],\n\t[ \"2316\", \"Colin\", \"Barker\", \"H8Q 5L0\", \"Aruba\" ],\n\t[ \"2317\", \"Nichole\", \"Stephens\", \"B8P 3D5\", \"Qatar\" ],\n\t[ \"2318\", \"Mary\", \"Dorsey\", \"J7D 1E5\", \"Iceland\" ],\n\t[ \"2319\", \"Yetta\", \"Dillon\", \"I7X 9D3\", \"Hong Kong\" ],\n\t[ \"2320\", \"Hope\", \"May\", \"L5W 1T9\", \"Taiwan, Province of China\" ],\n\t[ \"2321\", \"Daphne\", \"Barr\", \"W2B 9G2\", \"Korea, Republic of\" ],\n\t[ \"2322\", \"Melissa\", \"Hartman\", \"17607\", \"Reunion\" ],\n\t[ \"2323\", \"Acton\", \"Merritt\", \"U7M 3Q5\", \"Cape Verde\" ],\n\t[ \"2324\", \"Alika\", \"Weeks\", \"45475\", \"Singapore\" ],\n\t[ \"2325\", \"Fitzgerald\", \"Rowe\", \"Z3Z 2B6\", \"Israel\" ],\n\t[ \"2326\", \"Frances\", \"Valentine\", \"54329\", \"Kyrgyzstan\" ],\n\t[ \"2327\", \"Hollee\", \"Poole\", \"56101\", \"Saint Kitts and Nevis\" ],\n\t[ \"2328\", \"Melissa\", \"Stafford\", \"R5C 7V0\", \"Philippines\" ],\n\t[ \"2329\", \"Patience\", \"Jones\", \"61516\", \"Mauritius\" ],\n\t[ \"2330\", \"Uta\", \"Sloan\", \"K1B 9R2\", \"Timor-leste\" ],\n\t[ \"2331\", \"Brent\", \"West\", \"69310\", \"Burundi\" ],\n\t[ \"2332\", \"Otto\", \"Olsen\", \"88849\", \"Monaco\" ],\n\t[ \"2333\", \"Blossom\", \"Soto\", \"E2Q 6E6\", \"Ukraine\" ],\n\t[ \"2334\", \"Anastasia\", \"Stanton\", \"S8D 3U5\", \"Mexico\" ],\n\t[ \"2335\", \"Nyssa\", \"Massey\", \"A4G 8G7\", \"Ireland\" ],\n\t[ \"2336\", \"Brian\", \"Moreno\", \"T6O 4D7\", \"Myanmar\" ],\n\t[ \"2337\", \"Fiona\", \"Price\", \"03826\", \"Benin\" ],\n\t[ \"2338\", \"Wyoming\", \"Knowles\", \"I5M 7T3\", \"Chad\" ],\n\t[ \"2339\", \"Iola\", \"Noble\", \"95251\", \"Tunisia\" ],\n\t[ \"2340\", \"Cameran\", \"Montgomery\", \"35748\", \"Korea\" ],\n\t[ \"2341\", \"Wesley\", \"Sims\", \"J6O 7C0\", \"Hungary\" ],\n\t[ \"2342\", \"Mona\", \"Gates\", \"J6Y 3E2\", \"Tokelau\" ],\n\t[ \"2343\", \"Dominique\", \"Sellers\", \"G6U 7I2\", \"Sudan\" ],\n\t[ \"2344\", \"Destiny\", \"Frazier\", \"Y2P 5X6\", \"Madagascar\" ],\n\t[ \"2345\", \"Kelsie\", \"Stokes\", \"78561\", \"Yemen\" ],\n\t[ \"2346\", \"Julie\", \"Jordan\", \"U5H 4H0\", \"Myanmar\" ],\n\t[ \"2347\", \"Xaviera\", \"Hodge\", \"36452\", \"Turkey\" ],\n\t[ \"2348\", \"Cain\", \"Boyd\", \"74543\", \"Lebanon\" ],\n\t[ \"2349\", \"Devin\", \"Burch\", \"94879\", \"Cyprus\" ],\n\t[ \"2350\", \"Michelle\", \"Manning\", \"V7T 4A3\", \"New Zealand\" ],\n\t[ \"2351\", \"Quintessa\", \"Chapman\", \"95379\", \"Faroe Islands\" ],\n\t[ \"2352\", \"Danielle\", \"Wells\", \"27722\", \"Colombia\" ],\n\t[ \"2353\", \"Faith\", \"Decker\", \"04881\", \"Canada\" ],\n\t[ \"2354\", \"Gannon\", \"Chapman\", \"07687\", \"Israel\" ],\n\t[ \"2355\", \"Jayme\", \"Black\", \"A6L 9W1\", \"Jordan\" ],\n\t[ \"2356\", \"Zenia\", \"Cooley\", \"A6X 1B7\", \"Greenland\" ],\n\t[ \"2357\", \"Maris\", \"Burton\", \"J4G 1Y0\", \"Ecuador\" ],\n\t[ \"2358\", \"Rina\", \"Vazquez\", \"G3V 7G6\", \"Russian Federation\" ],\n\t[ \"2359\", \"Nina\", \"Stanton\", \"E7Z 1W0\", \"Dominica\" ],\n\t[ \"2360\", \"Alexandra\", \"Jenkins\", \"C6N 4R4\", \"Morocco\" ],\n\t[ \"2361\", \"Jerome\", \"Chen\", \"68955\", \"Israel\" ],\n\t[ \"2362\", \"Clementine\", \"Robbins\", \"X7I 7T3\", \"Croatia\" ],\n\t[ \"2363\", \"Nigel\", \"Guthrie\", \"A4N 6X8\", \"French Southern Territories\" ],\n\t[ \"2364\", \"Xaviera\", \"Griffith\", \"90489\", \"Cuba\" ],\n\t[ \"2365\", \"Marsden\", \"Best\", \"U4B 5R7\", \"Estonia\" ],\n\t[ \"2366\", \"Ebony\", \"Benson\", \"H7C 7F7\", \"Anguilla\" ],\n\t[ \"2367\", \"Kylie\", \"Hansen\", \"38932\", \"Eritrea\" ],\n\t[ \"2368\", \"Iola\", \"Copeland\", \"P4X 9M4\", \"Rwanda\" ],\n\t[ \"2369\", \"Jorden\", \"Green\", \"48018\", \"Namibia\" ],\n\t[ \"2370\", \"Hamish\", \"Porter\", \"L6F 8L1\", \"Taiwan, Province of China\" ],\n\t[ \"2371\", \"Ezra\", \"Taylor\", \"09148\", \"French Southern Territories\" ],\n\t[ \"2372\", \"Dara\", \"Pratt\", \"00558\", \"Saint Kitts and Nevis\" ],\n\t[ \"2373\", \"Oliver\", \"Holt\", \"C4N 5Z7\", \"Thailand\" ],\n\t[ \"2374\", \"Kato\", \"Mcgee\", \"17017\", \"Micronesia\" ],\n\t[ \"2375\", \"Fuller\", \"Rogers\", \"M8F 6Y7\", \"French Polynesia\" ],\n\t[ \"2376\", \"Carol\", \"Stuart\", \"55980\", \"Sudan\" ],\n\t[ \"2377\", \"Wayne\", \"Nichols\", \"37344\", \"Chile\" ],\n\t[ \"2378\", \"Lars\", \"Gilbert\", \"27076\", \"Micronesia\" ],\n\t[ \"2379\", \"Todd\", \"Rollins\", \"M4I 4X8\", \"Virgin Islands, U.S.\" ],\n\t[ \"2380\", \"Colorado\", \"Justice\", \"68795\", \"Yemen\" ],\n\t[ \"2381\", \"Jordan\", \"Chang\", \"11149\", \"Mayotte\" ],\n\t[ \"2382\", \"Troy\", \"Haynes\", \"N2N 1N8\", \"Reunion\" ],\n\t[ \"2383\", \"Amity\", \"Snyder\", \"17785\", \"Argentina\" ],\n\t[ \"2384\", \"Kennan\", \"Turner\", \"30041\", \"Brazil\" ],\n\t[ \"2385\", \"Dorothy\", \"Gates\", \"B7Z 6V4\", \"Ghana\" ],\n\t[ \"2386\", \"Ariana\", \"Rojas\", \"70797\", \"Eritrea\" ],\n\t[ \"2387\", \"Desirae\", \"Joyner\", \"63493\", \"Maldives\" ],\n\t[ \"2388\", \"Marsden\", \"Barton\", \"36343\", \"Chile\" ],\n\t[ \"2389\", \"Graham\", \"Greer\", \"65152\", \"Cayman Islands\" ],\n\t[ \"2390\", \"Cameron\", \"Edwards\", \"89276\", \"Montserrat\" ],\n\t[ \"2391\", \"Bradley\", \"White\", \"80364\", \"United Kingdom\" ],\n\t[ \"2392\", \"Finn\", \"Cote\", \"G9P 1P0\", \"Ghana\" ],\n\t[ \"2393\", \"Geoffrey\", \"Becker\", \"O5G 4L4\", \"Wallis and Futuna\" ],\n\t[ \"2394\", \"Hayden\", \"Estes\", \"Q8G 7F9\", \"Togo\" ],\n\t[ \"2395\", \"Quinlan\", \"Garrett\", \"R2C 3E7\", \"Uganda\" ],\n\t[ \"2396\", \"Haviva\", \"Harrington\", \"64198\", \"Bahamas\" ],\n\t[ \"2397\", \"Brennan\", \"Hodge\", \"35327\", \"Paraguay\" ],\n\t[ \"2398\", \"Halee\", \"Sykes\", \"S6J 4S4\", \"Costa Rica\" ],\n\t[ \"2399\", \"Mikayla\", \"Ruiz\", \"21686\", \"Malaysia\" ],\n\t[ \"2400\", \"Macy\", \"Stanley\", \"F6D 6C4\", \"Luxembourg\" ],\n\t[ \"2401\", \"Petra\", \"Miles\", \"O7X 2D2\", \"Tokelau\" ],\n\t[ \"2402\", \"Oprah\", \"Mendez\", \"88994\", \"France\" ],\n\t[ \"2403\", \"Upton\", \"Silva\", \"17878\", \"French Southern Territories\" ],\n\t[ \"2404\", \"Wade\", \"Pennington\", \"S8J 3P2\", \"Malaysia\" ],\n\t[ \"2405\", \"Gannon\", \"Riddle\", \"I4A 2H9\", \"Somalia\" ],\n\t[ \"2406\", \"Jana\", \"Myers\", \"04982\", \"Philippines\" ],\n\t[ \"2407\", \"Brooke\", \"Hale\", \"98272\", \"Lithuania\" ],\n\t[ \"2408\", \"Hashim\", \"Mendez\", \"00144\", \"Saint Helena\" ],\n\t[ \"2409\", \"Blythe\", \"Hanson\", \"U5Z 6P4\", \"Saint Helena\" ],\n\t[ \"2410\", \"Michelle\", \"Madden\", \"B4R 1I9\", \"Ireland\" ],\n\t[ \"2411\", \"Deirdre\", \"Patton\", \"B4H 1N7\", \"Georgia\" ],\n\t[ \"2412\", \"Nathaniel\", \"Chandler\", \"W1V 8R4\", \"Sierra Leone\" ],\n\t[ \"2413\", \"Tamekah\", \"Murray\", \"I8M 1W8\", \"Guatemala\" ],\n\t[ \"2414\", \"Naida\", \"Boyle\", \"V4S 2N2\", \"United Arab Emirates\" ],\n\t[ \"2415\", \"Hiroko\", \"Winters\", \"K8G 3R9\", \"Barbados\" ],\n\t[ \"2416\", \"Palmer\", \"Guy\", \"A4H 5L1\", \"Saudi Arabia\" ],\n\t[ \"2417\", \"Hermione\", \"Nicholson\", \"76147\", \"Marshall Islands\" ],\n\t[ \"2418\", \"Russell\", \"Boyd\", \"66149\", \"Switzerland\" ],\n\t[ \"2419\", \"Gretchen\", \"Robles\", \"B9L 1J7\", \"Spain\" ],\n\t[ \"2420\", \"Leah\", \"Gibbs\", \"16682\", \"Vanuatu\" ],\n\t[ \"2421\", \"Amir\", \"Carlson\", \"A5C 6F2\", \"Myanmar\" ],\n\t[ \"2422\", \"Merrill\", \"Ratliff\", \"A6E 9B2\", \"Tonga\" ],\n\t[ \"2423\", \"Wyatt\", \"David\", \"P8G 2M1\", \"Kiribati\" ],\n\t[ \"2424\", \"Violet\", \"Boyle\", \"P5X 7B0\", \"Denmark\" ],\n\t[ \"2425\", \"Jared\", \"Myers\", \"22131\", \"Kyrgyzstan\" ],\n\t[ \"2426\", \"Lavinia\", \"Stephenson\", \"55537\", \"Turks and Caicos Islands\" ],\n\t[ \"2427\", \"Zachary\", \"Tyson\", \"C4O 7V4\", \"Macedonia\" ],\n\t[ \"2428\", \"Emma\", \"Clark\", \"A7Z 2Z1\", \"Guam\" ],\n\t[ \"2429\", \"Aaron\", \"Montoya\", \"Q3U 2X1\", \"Bahrain\" ],\n\t[ \"2430\", \"Dylan\", \"Roach\", \"81238\", \"French Guiana\" ],\n\t[ \"2431\", \"Baxter\", \"Rosario\", \"H7B 1R2\", \"Suriname\" ],\n\t[ \"2432\", \"Shad\", \"Bolton\", \"D1W 5X0\", \"Barbados\" ],\n\t[ \"2433\", \"Hasad\", \"Hines\", \"D9U 3H1\", \"Ukraine\" ],\n\t[ \"2434\", \"Maggy\", \"French\", \"M3E 5H8\", \"Nicaragua\" ],\n\t[ \"2435\", \"Evangeline\", \"Jenkins\", \"57732\", \"Nigeria\" ],\n\t[ \"2436\", \"Eaton\", \"Shannon\", \"56854\", \"Namibia\" ],\n\t[ \"2437\", \"Keaton\", \"Barber\", \"G5V 7T0\", \"Svalbard and Jan Mayen\" ],\n\t[ \"2438\", \"Lester\", \"Love\", \"J5Q 8H3\", \"United Kingdom\" ],\n\t[ \"2439\", \"Olivia\", \"Foley\", \"16284\", \"Mayotte\" ],\n\t[ \"2440\", \"Inez\", \"Craig\", \"98947\", \"Poland\" ],\n\t[ \"2441\", \"Desirae\", \"Jacobson\", \"25950\", \"French Polynesia\" ],\n\t[ \"2442\", \"Amethyst\", \"Robertson\", \"78840\", \"Timor-leste\" ],\n\t[ \"2443\", \"Rahim\", \"Day\", \"61420\", \"Maldives\" ],\n\t[ \"2444\", \"Kevyn\", \"Mccarty\", \"X7T 8Z3\", \"Guam\" ],\n\t[ \"2445\", \"Logan\", \"Malone\", \"B6F 8N0\", \"Madagascar\" ],\n\t[ \"2446\", \"Kathleen\", \"Cote\", \"L4R 6W9\", \"Congo\" ],\n\t[ \"2447\", \"Porter\", \"Mclean\", \"G1Z 1W9\", \"Mauritius\" ],\n\t[ \"2448\", \"Reagan\", \"Chapman\", \"86314\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2449\", \"Veda\", \"Harrington\", \"R7W 1K4\", \"Congo\" ],\n\t[ \"2450\", \"Dominique\", \"Hewitt\", \"P5K 7L4\", \"San Marino\" ],\n\t[ \"2451\", \"Zelda\", \"Orr\", \"Z5B 6V1\", \"Greenland\" ],\n\t[ \"2452\", \"Natalie\", \"Kane\", \"10491\", \"Belgium\" ],\n\t[ \"2453\", \"Elizabeth\", \"Bright\", \"R3V 2R4\", \"Bangladesh\" ],\n\t[ \"2454\", \"Evan\", \"Knapp\", \"W3Z 3I5\", \"Mauritius\" ],\n\t[ \"2455\", \"Unity\", \"Armstrong\", \"82986\", \"Kiribati\" ],\n\t[ \"2456\", \"Arden\", \"Winters\", \"C7D 4M2\", \"Sweden\" ],\n\t[ \"2457\", \"Hayfa\", \"Henderson\", \"B8Z 3V3\", \"Latvia\" ],\n\t[ \"2458\", \"Ocean\", \"Delacruz\", \"Z3Z 2H8\", \"Tonga\" ],\n\t[ \"2459\", \"Carter\", \"Harding\", \"R1Z 8J4\", \"Ireland\" ],\n\t[ \"2460\", \"Harriet\", \"Simmons\", \"54757\", \"Indonesia\" ],\n\t[ \"2461\", \"Sopoline\", \"Hicks\", \"I5A 6O2\", \"Argentina\" ],\n\t[ \"2462\", \"Jenette\", \"Ramos\", \"I4V 3H6\", \"Portugal\" ],\n\t[ \"2463\", \"Abigail\", \"Berg\", \"E6P 6L0\", \"United States\" ],\n\t[ \"2464\", \"Sybill\", \"Fox\", \"02319\", \"Svalbard and Jan Mayen\" ],\n\t[ \"2465\", \"Wyoming\", \"Jarvis\", \"I1R 7V9\", \"Palestinian Territory, Occupied\" ],\n\t[ \"2466\", \"Cynthia\", \"English\", \"17983\", \"Israel\" ],\n\t[ \"2467\", \"Jerry\", \"Little\", \"33846\", \"Mauritius\" ],\n\t[ \"2468\", \"Quintessa\", \"Donaldson\", \"V4N 2K1\", \"China\" ],\n\t[ \"2469\", \"Anne\", \"Potter\", \"78596\", \"United States Minor Outlying Islands\" ],\n\t[ \"2470\", \"Madonna\", \"Hart\", \"A4A 4T8\", \"Bahrain\" ],\n\t[ \"2471\", \"Madeline\", \"Walls\", \"Y3D 4T3\", \"Comoros\" ],\n\t[ \"2472\", \"Fleur\", \"Blevins\", \"D1T 9P6\", \"Guinea-bissau\" ],\n\t[ \"2473\", \"Jaden\", \"Webb\", \"13917\", \"Lesotho\" ],\n\t[ \"2474\", \"Abdul\", \"Fleming\", \"A8A 3Y3\", \"Canada\" ],\n\t[ \"2475\", \"Blaze\", \"Carroll\", \"41059\", \"Marshall Islands\" ],\n\t[ \"2476\", \"David\", \"Hoover\", \"29132\", \"Algeria\" ],\n\t[ \"2477\", \"Renee\", \"Nieves\", \"35843\", \"Egypt\" ],\n\t[ \"2478\", \"Jaime\", \"Mcclure\", \"R5K 6B5\", \"Liechtenstein\" ],\n\t[ \"2479\", \"Deborah\", \"Fletcher\", \"70399\", \"Equatorial Guinea\" ],\n\t[ \"2480\", \"Otto\", \"Lopez\", \"72417\", \"Belarus\" ],\n\t[ \"2481\", \"Bo\", \"Walls\", \"F4M 8X8\", \"Latvia\" ],\n\t[ \"2482\", \"Jamal\", \"Adams\", \"N9X 3A2\", \"Spain\" ],\n\t[ \"2483\", \"Silas\", \"Gardner\", \"25259\", \"French Guiana\" ],\n\t[ \"2484\", \"Aladdin\", \"Morin\", \"45179\", \"Sweden\" ],\n\t[ \"2485\", \"Dawn\", \"Grant\", \"53613\", \"Grenada\" ],\n\t[ \"2486\", \"Forrest\", \"Gay\", \"53606\", \"Cayman Islands\" ],\n\t[ \"2487\", \"Lavinia\", \"Murphy\", \"S5L 6X9\", \"Turkey\" ],\n\t[ \"2488\", \"Sylvia\", \"Wolfe\", \"37280\", \"Indonesia\" ],\n\t[ \"2489\", \"Wynter\", \"Adkins\", \"37391\", \"Russian Federation\" ],\n\t[ \"2490\", \"Iola\", \"Frank\", \"I9H 1K7\", \"Nigeria\" ],\n\t[ \"2491\", \"Emmanuel\", \"Hester\", \"Z6E 3I4\", \"Guinea\" ],\n\t[ \"2492\", \"Karina\", \"Christian\", \"V8M 6F3\", \"Honduras\" ],\n\t[ \"2493\", \"Malcolm\", \"Holden\", \"I7J 6U7\", \"Austria\" ],\n\t[ \"2494\", \"Moana\", \"Holmes\", \"80402\", \"Israel\" ],\n\t[ \"2495\", \"Ramona\", \"Hewitt\", \"U6B 7A6\", \"Guadeloupe\" ],\n\t[ \"2496\", \"Nicholas\", \"Terry\", \"V8J 5D9\", \"Costa Rica\" ],\n\t[ \"2497\", \"Erica\", \"Dunlap\", \"91596\", \"Kazakhstan\" ],\n\t[ \"2498\", \"Logan\", \"Harper\", \"R7V 3T5\", \"Guinea-bissau\" ],\n\t[ \"2499\", \"Bert\", \"Ortega\", \"74557\", \"Paraguay\" ],\n\t[ \"2500\", \"Cameron\", \"Ortiz\", \"P9C 5B6\", \"Eritrea\" ]\n] }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/datatables/vfs_fonts.js",
    "content": "window.pdfMake = window.pdfMake || {}; window.pdfMake.vfs = {\"LICENSE.txt\":\"DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNA0KICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLw0KDQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04NCg0KICAgMS4gRGVmaW5pdGlvbnMuDQoNCiAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sDQogICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4NCg0KICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkNCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4NCg0KICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbA0KICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbg0KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwNCiAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQ0KICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3INCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQ0KICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4NCg0KICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQ0KICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4NCg0KICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsDQogICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uDQogICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLg0KDQogICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbA0KICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dA0KICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLA0KICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLg0KDQogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcg0KICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQ0KICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrDQogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLg0KDQogICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0DQogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlDQogICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zDQogICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlcw0KICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluDQogICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsDQogICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLg0KDQogICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZw0KICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucw0KICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5DQogICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyDQogICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YNCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIg0KICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudA0KICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8NCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsDQogICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQ0KICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0DQogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQ0KICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iDQoNCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5DQogICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQNCiAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLg0KDQogICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwNCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlDQogICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwNCiAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQ0KICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4NCg0KICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsDQogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQ0KICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsDQogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywNCiAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlDQogICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcg0KICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQ0KICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UNCiAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhDQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrDQogICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdA0KICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcw0KICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlDQogICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuDQoNCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlDQogICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91DQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3INCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZA0KDQogICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kDQoNCiAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3Jrcw0KICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQNCiAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLA0KICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YNCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kDQoNCiAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cw0KICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QNCiAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQNCiAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QNCiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUNCiAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZA0KICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3INCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwNCiAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kDQogICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzDQogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZA0KICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uDQogICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUNCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQNCiAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQNCiAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuDQoNCiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZA0KICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucw0KICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcg0KICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsDQogICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgNCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuDQoNCiAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwNCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaw0KICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCiAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLg0KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQ0KICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQNCiAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4NCg0KICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQ0KICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLA0KICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlDQogICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4NCg0KICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yDQogICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoDQogICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywNCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcg0KICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMNCiAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEENCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQ0KICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55DQogICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuDQoNCiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LA0KICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsDQogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQ0KICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUNCiAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwNCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQ0KICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQ0KICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLA0KICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwNCiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3INCiAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4NCg0KICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZw0KICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwNCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksDQogICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcw0KICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkNCiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmDQogICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksDQogICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkNCiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24NCiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5Lg0KDQogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCg0KICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLg0KDQogICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZw0KICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIg0KICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUNCiAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlDQogICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGENCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUNCiAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcg0KICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLg0KDQogICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0NCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCg==\",\"Roboto-Italic.ttf\":\"AAEAAAAOAIAAAwBgR0RFRgsuCy8AATmYAAAASEdQT1OC3T4oAAE54AAAkPhHU1VCeolvLwABytgAAANsT1MvMrivKS4AAAFoAAAAYFZETVhu6nZPAAASPAAABeBjbWFwg/CFnwAAGBwAAA7yZ2x5ZqugYnAAACcQAADhjGhlYWQVl+THAAAA7AAAADZoaGVhK3TmIgAAASQAAAAkaG10eH7tDo8AAAHIAAAQdGxvY2H/CzayAAEInAAACDxtYXhwBDwA9gAAAUgAAAAgbmFtZW3ArcAAARDYAAAEb3Bvc3QJy9dbAAEVSAAAJE0AAQAAAAEAAERFNtJfDzz1AAkIAAAAAADE8BEuAAAAAM2Cslz6t9PdKU8IYgACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/q32vUpTwABAAAAAAAAAAAAAAAAAAAEHQABAAAEHQCWABYAXgAFAAEAAAAAAAAAAAAAAAAAAwABAAMEQQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAQAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAeMAAAAAAAAB4wAAAeMAAAJ1AMUErABDBDoARwV7ANMErAAbAVcAxgKBAFcCiP+MA0AAoQRCAHIBgf+YAhUAPgIGAEYDH/+mBDoAUAQ6AXAEOgAtBDoANQQ6ACcEOgBoBDoAZwQ6ANgEOgA1BDoAfwHpAEYB8f/GA9EAZQQ6AI4D7gBWA5IAwga0ABME/v/VBMsAWATBAGIE8ABYBGIAWARfAFgFJgBoBVgAWAIkAGIEJQAPBH4APgQgAFgGkgBYBVkAWAUcAF4EzQBYBTsAXgT4AFcEjQBDBHoA7AUSAGcE3QDNBpUA7AS9//wEpgDuBDIAIAIKABIDHAD3Agr/lwMnAHwDa/+WAl0A8wQgADoERAA1A/wARwREAEQD+QBHApsAigRDADcERAA1AegARAH2/x0D2QA2AegARAaLADUERAA1BEQARgRE/+IERABEAqQANQPuADsCaQBvBEQAWgPIAJcFrACyA8j/6QPI/7wDyAAIApEAUQHhADYCkf+pBRgAggHh/+sEHQBXBGAALQVVACYEjgBxAdkAAQSc/8gDvwEnBd4AUgNeAMIDjABwBCsApgXfAFIDewEDAtABBQQGAE4DMQCnAzgAqgJoAPsERP/rA7EAhwH/AMMB4//OAg8BBANtAM8DiwA1BdUBDgY7ARsGgQC6A7f/8wcF/54EBABIBR0AJgRvAEgEeQAwBlIABARnACYESgBqBEUATARY/+sFRABVAegAPgQxAD4D8wBJAhEARwUwAEYERAA1BygATwbHAEQB6ABEApb/ZgUjAFkETgBGBToAZwSuAFoB7/8bA/kAPAOWAUgDYgFeAzgBCwINAUECkQEiAhP/twOXAQgCzwEHAnoAHQAK/fIACv5BAAr9WAAK/kYACv1LAAr83AHzAWQD1AFBAgAAwwQuAFcFS//MBR0ATwTs/94ETQAiBVoAWARN//EFXwBXBS8AigUAAB0EPwBABHL/9QPIALMERABBBAsAKQPsAIsERAA1BEYAVgJ5AH4EKv/RA7AAOgR6AHAERP/iBAsASQREAEMD7gC3BBwAWgVNAD8FRABDBisAXQSiAFoD/wCzBeEAZAWfANsFEgBmCAj/3ggTAFcGGgDyBVoAVwS7AEgFqv+WBtP/ygR0ACAFWQBYBU//3gS3AKMF0QBbBX8AVwUnANEHDgBXB0cAVwWrAMkGggBXBLkASAURAIcGrABiBM4ADAQnAEQETgBAAygAPgSQ/5oFvP/DA9IAHgRaAEAEFQBABFv/1QWSAEAEWQBABFoAQAOfAJAFbwBABHkAQAQYAH8GEgBABjoANQSlAIYF2ABABBYAQAQLADMGHgBABCH/1QRFADUEDABRBlj/1QZzAEAERQA1BFoAQAaRAGgFtwBFBBQAPga2AGMFmQA8BIb/2AQF/7wGmAB0BaoAXQZrADoFigA6CHsAYgddAD4D5f/HA5//xgUdAF0ERQBGBL4A6APIALMFHQBPBEUARgaLAGwFtwBIBpIAaAW4AEUE5ABkBAgASgSyAFUACv09AAr9ZAAK/m8ACv6QAAr6twAK+tYEFAA+BMsAVwRD/+IEHwBIA1wANQSXAFcDyQA1BL0ASAQ+AD4GJADzBTQApQdEAFcFVQA1B6kAVwaGADUFjQBlBIkATga/AOgFCwCIBR0A0QQmAJcFHQDQBc8ArgR0ACUEvQBIBBsAPgVYAFcERAA1BSsARgRgADYEYP/tBHIACgMY//sEtQA2BjQANgZzAEAF7wDoBNkAiAQIAM8DywC8B0H/8QYM/+wHfQBOBjUANQSoAGAD3gBGBVIA1wTPAKwFEQBqA9UAAAehAAAD1QAAB6EAAAKSAAAB7wAAAU4AAAQ4AAACEwAAAY8AAADMAAAACgAABS8A6QYSAQADb/9oAY0A1gGNALEBjP+kAY7/YQK7ANYCwgC9Aqn/pAQkAJUESQAQApAArwOPAEcFDABHByYArgJGAIACRgAhA24ACQN0AIsDLgCjBGAALQYmAEkD/gBgBYkA4wOXAGcIOABOBLQBIwTGAHwGUAD+BtwArAcIAKoGbQEeBFkAJgU/ADkEZ/+7BEoAzwSIAGgHqABJAfL/OwQ7AFAD7wCOA/YASAP9AEcDyQBnAjYAjwJ1AJQB7f/mBC0AaAAKAAAHq/+1B6wAhwPfAB8DXAAnBDoAUQLg/+AB6P8dAhH/egF+/8IDbQE3A2wBNwNsATcDyAEPA9ABCwPIAF8DxwEXA20BDQHrAS8Eb//UBDIAPgRJAE0EYAA+BAQAPgPfAD4EhgBKBKsAPgHoAD4DzwALBBwAPgOEAD4FlwA+BMoAPgR/AE0ElQBNBGMAPgQrACMD7gC9BLMAWARwAL4FoQDUBEH/4wQcALUD/v/5BDMASgJNAKwDqQAPA9YAIAQjACUEJQAeA+8ATgOEAL0D7gAjA+cAbQIPAH8DKAAiAzgAJQLTAO0DRwArA0gAQALjAI8DTwAuAzgAZANtAD4DZwC5ApEBKwMbAPUEOgAuBDoAJwQ6AGEESwBkA/n/kQQBAOsEMP/OBDoANQR7AEAERABBBPAAWAQgADcE3gBXBNMAWAPZADYE7ABYA9gANgQ6AH0EMgA+AzgBCwHjAAACFQA+BTMAXgUzAF4EYgBTBHoA7AJpAAcE/v/VBP7/1QT+/9UE/v/VBP7/1QT+/9UE/v/VBMsAYgRiAFgEYgBYBGIAWARiAFgCJABiAiQAYgIkAGICJABiBVkAWAU7AF4FOwBeBTsAXgU7AF4FOwBeBRIAZwUSAGcFEgBnBRIAZwSmAO4EIAA6BCAAOgQgADoEIAA6BCAAOgQgADoEIAA6A/wARwP5AEcD+QBHA/kARwP5AEcB6AA+AegAPgHoAD4B6AA+BEQANQREAEYERABGBEQARgREAEYERABGBEQAWgREAFoERABaBEQAWgPI/7wDyP+8BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BMsAYgP8AEcEywBiA/wARwTLAGID/ABHBMsAYgP8AEcFFQBYBNoARARiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcFJgBoBEMANwUmAGgEQwA3BSYAaARDADcFJgBoBEMANwVYAFgERAA1AiQAYgHoAD4CJABiAegAPgIkAGIB6AA+AiT/mgHo/3sCJABiBkkAYgPeAEQEJQAPAe//GwTTAD4D2QA2BCAAWAHoAEQEIABYAej/qAQgAFgCfgBEBCAAWALEAEQFWQBYBEQANQVZAFgERAA1BVkAWAREADUERAA1BTsAXgREAEYFOwBeBEQARgU7AF4ERABGBPgAVwKkADUE+ABXAqT/pgT4AFcCpAA1BJgAQwPuADsEmABDA+4AOwSYAEMD7gA7BJgAQwPuADsEmABDA+4AOwR6AOwCaQBFBHoA7AJpAG8EegDsApEAbwUSAGcERABaBRIAZwREAFoFEgBnBEQAWgUSAGcERABaBRIAZwREAFoFEgBnBEQAWgaVAOwFrACyBKYA7gPI/7wEpgDuBH0AIAPIAAgEfQAgA8gACAR9ACADyAAIBwX/ngZSAAQFHQAmBEUATARgAAsEYAALA+4AvQRv/9QEb//UBG//1ARv/9QEb//UBG//1ARv/9QESQBNBAQAPgQEAD4EBAA+BAQAPgHoAD4B6AA+AegAPgHoAD4EygA+BH8ATQR/AE0EfwBNBH8ATQR/AE0EswBYBLMAWASzAFgEswBYBBwAtQRv/9QEb//UBG//1ARJAE0ESQBNBEkATQRJAE0EYAA+BAQAPgQEAD4EBAA+BAQAPgQEAD4EhgBKBIYASgSGAEoEhgBKBKsAPgHoAD4B6AA+AegAPgHo/3MB6AA+A88ACwQcAD4DhAA+A4QAPgOEAD4DhAA+BMoAPgTKAD4EygA+BH8ATQR/AE0EfwBNBGMAPgRjAD4EYwA+BCsAIwQrACMEKwAjBCsAIwPuAJcD7gC9BLMAWASzAFgEswBYBLMAWASzAFgEswBYBaEA1AQcALUEHAC1A/7/+QP+//kD/v/5CFYAIwT+/9UExgCbBbwAvAKIAMYFTwByBQoASQUUADECeQBsBP7/1QTLAFgEYgBYBH0AIAVYAFgCJABiBNMAPgaSAFgFWQBYBTsAXgTNAFgEegDsBKYA7gS9//wCJABiBKYA7gQ/AEAECwApBEQANQJ5AH4EHABaBDEAPgREAEYERP/rA8gAlwPI/+kCeQB+BBwAWgREAEYEHABaBisAXQRiAFgELgBXBJgAQwIkAGICJABiBCUADwTTAD4E0wA+BLcAowT+/9UEywBYBC4AVwRiAFgFWQBYBpIAWAVYAFgFOwBeBVoAWATNAFgEywBiBHoA7AS9//wEIAA6A/kARwRaAEAERABGBET/4gP8AEcDyP+8A8j/6QP5AEcDKAA+A+4AOwHoAEQB6AA+Afb/HQQVAEADyP+8BpUA7AWsALIGlQDsBawAsgaVAOwFrACyBKYA7gPI/7wBVwDGAnUAxQP6AE8EgwCKAe//GwGNALEGkgBYBosANQT+/9UEIAA6BTsAAQbIAIoHHgCKBGIAWAVZAFgD+QBHBFoAQAUvAIoFRABDBL4A6APIALMIDABGCQMAXgR0ACAD0gAeBMsAYgP8AEcEpgDuA8gAswIkAGIG0//KBbz/wwIkAGIE/v/VBCAAOgT+/9UEIAA6BwX/ngZSAAQEYgBYA/kARwUrAEYD+QA8A/kAPAbT/8oFvP/DBHQAIAPSAB4FWQBYBFoAQAVZAFgEWgBABTsAXgREAEYFHQBdBEUARgUdAF0ERQBGBREAhwQLADMEtwCjA8j/vAS3AKMDyP+8BLcAowPI/7wFJwDRBBgAfwaCAFcF2ABABL3//API/+kERABEBU//3gRb/9UE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHAiQAYgHoAD4CJAAXAej/+gU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBSMAWQROAEYFIwBZBE4ARgUjAFkETgBGBSMAWQROAEYFIwBZBE4ARgUSAGcERABaBRIAZwREAFoFOgBnBK4AWgU6AGcErgBaBToAZwSuAFoFOgBnBK4AWgU6AGcErgBaBKYA7gPI/7wEpgDuA8j/vASmAO4DyP+8BGIARARiABME0wA+BBUAQAVYAFgEWQBABHoA7AOfAJAEvf/8A8j/6QUnANEEGAB/BScA0QQYAH8ELgBXAygAPgbT/8oFvP/DBc8ArgR0ACUERAA1BLkASAS5AEgELgA0AygACgTnAFID7QBKBVkAWARaAEAFWABYBFkAQAaSAFgFkgBABU//3gRb/9UEpgDuA8gAbQS9//wDyP/pBAsAKQRf//wGEgEAAAoAAAAKAAAB/QBPAAAAAQABAQEBAQAMAPgI/wAIAAj//gAJAAn//QAKAAr//QALAAv//QAMAAz//QANAA3//AAOAA7//AAPAA///AAQABD//AARABH/+wASABL/+wATABP/+wAUABT/+wAVABT/+gAWABX/+gAXABb/+gAYABf/+gAZABj/+QAaABn/+QAbABr/+QAcABv/+QAdABz/+AAeAB3/+AAfAB7/+AAgAB//+AAhACD/9wAiACH/9wAjACL/9wAkACP/9wAlACT/9gAmACX/9gAnACb/9gAoACf/9gApACf/9QAqACj/9QArACn/9QAsACr/9QAtACv/9AAuACz/9AAvAC3/9AAwAC7/9AAxAC//8wAyADD/8wAzADH/8wA0ADL/8wA1ADP/8gA2ADT/8gA3ADX/8gA4ADb/8gA5ADf/8QA6ADj/8QA7ADn/8QA8ADr/8QA9ADr/8AA+ADv/8AA/ADz/8ABAAD3/8ABBAD7/7wBCAD//7wBDAED/7wBEAEH/7wBFAEL/7gBGAEP/7gBHAET/7gBIAEX/7gBJAEb/7QBKAEf/7QBLAEj/7QBMAEn/7QBNAEr/7ABOAEv/7ABPAEz/7ABQAE3/7ABRAE3/6wBSAE7/6wBTAE//6wBUAFD/6wBVAFH/6gBWAFL/6gBXAFP/6gBYAFT/6gBZAFX/6QBaAFb/6QBbAFf/6QBcAFj/6QBdAFn/6ABeAFr/6ABfAFv/6ABgAFz/6ABhAF3/5wBiAF7/5wBjAF//5wBkAGD/5wBlAGD/5gBmAGH/5gBnAGL/5gBoAGP/5gBpAGT/5QBqAGX/5QBrAGb/5QBsAGf/5QBtAGj/5ABuAGn/5ABvAGr/5ABwAGv/5ABxAGz/4wByAG3/4wBzAG7/4wB0AG//4wB1AHD/4gB2AHH/4gB3AHL/4gB4AHP/4gB5AHP/4QB6AHT/4QB7AHX/4QB8AHb/4QB9AHf/4AB+AHj/4AB/AHn/4ACAAHr/4ACBAHv/3wCCAHz/3wCDAH3/3wCEAH7/3wCFAH//3gCGAID/3gCHAIH/3gCIAIL/3gCJAIP/3QCKAIT/3QCLAIX/3QCMAIb/3QCNAIb/3ACOAIf/3ACPAIj/3ACQAIn/3ACRAIr/2wCSAIv/2wCTAIz/2wCUAI3/2wCVAI7/2gCWAI//2gCXAJD/2gCYAJH/2gCZAJL/2QCaAJP/2QCbAJT/2QCcAJX/2QCdAJb/2ACeAJf/2ACfAJj/2ACgAJn/2AChAJn/1wCiAJr/1wCjAJv/1wCkAJz/1wClAJ3/1gCmAJ7/1gCnAJ//1gCoAKD/1gCpAKH/1QCqAKL/1QCrAKP/1QCsAKT/1QCtAKX/1ACuAKb/1ACvAKf/1ACwAKj/1ACxAKn/0wCyAKr/0wCzAKv/0wC0AKz/0wC1AKz/0gC2AK3/0gC3AK7/0gC4AK//0gC5ALD/0QC6ALH/0QC7ALL/0QC8ALP/0QC9ALT/0AC+ALX/0AC/ALb/0ADAALf/0ADBALj/zwDCALn/zwDDALr/zwDEALv/zwDFALz/zgDGAL3/zgDHAL7/zgDIAL//zgDJAL//zQDKAMD/zQDLAMH/zQDMAML/zQDNAMP/zADOAMT/zADPAMX/zADQAMb/zADRAMf/ywDSAMj/ywDTAMn/ywDUAMr/ywDVAMv/ygDWAMz/ygDXAM3/ygDYAM7/ygDZAM//yQDaAND/yQDbANH/yQDcANL/yQDdANL/yADeANP/yADfANT/yADgANX/yADhANb/xwDiANf/xwDjANj/xwDkANn/xwDlANr/xgDmANv/xgDnANz/xgDoAN3/xgDpAN7/xQDqAN//xQDrAOD/xQDsAOH/xQDtAOL/xADuAOP/xADvAOT/xADwAOX/xADxAOX/wwDyAOb/wwDzAOf/wwD0AOj/wwD1AOn/wgD2AOr/wgD3AOv/wgD4AOz/wgD5AO3/wQD6AO7/wQD7AO//wQD8APD/wQD9APH/wAD+APL/wAD/APP/wAAAAAMAAAADAAAIjAABAAAAAAAcAAMAAQAAAiYABgIKAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAADBBwABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAAAH1AfYB+AH6AgECBgIKAg0CDAIOAhACDwIRAhMCFQIUAhYCFwIZAhgCGgIbAhwCHgIdAh8CIQIgAiMCIgIkAiUBbABvAGIAYwBnAW4AdQCDAG0AaQF9AHMAaAGLAH8AgQGIAHABjAGNAGUAdAGDAYUBhADBAYkAagB5ALUAhACHAH4AYQBsAYcAkwGKAK0AawB6AXAAAwHxAfQCBQCQAJEBYgFjAWkBagFlAWYAhgGOAicClgF0AXkBcgFzAZIDUAFtAHYBZwFrAXEB8wH7AfIB/AH5Af4B/wIAAf0CAwIEAAACAgIIAgkCBwCKAJoAoABuAJwAnQCeAHcAoQCfAJsABAZmAAAA7ACAAAYAbAAAAAIACQANACEAfgCgAKwArQC/AMYAzwDmAO8A/gEPAREBJQEnATABOAFAAVMBXwFnAX4BfwGSAaEBsAHwAfsB/wIZAhsCNwJZArwCxwLJAt0C8wMBAwMDCQMPAyMDigOMA5IDoQOwA7kDyQPOA9ID1gQlBC8ERQRPBGIEbwR5BIYEzgTXBOEE9QUBBRAFEx4BHj8ehR7xHvMe+R9NIAsgFSAeICIgJiAwIDMgOiA8IEQgdCB/IKQgpyCsIQUhEyEWISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK7gL2w/sE/v///f//AAAAAAACAAkADQAgACIAoAChAK0ArgDAAMcA0ADnAPAA/wEQARIBJgEoATEBOQFBAVQBYAFoAX8BkgGgAa8B8AH6AfwCGAIaAjcCWQK8AsYCyQLYAvMDAAMDAwkDDwMjA4QDjAOOA5MDowOxA7oDygPRA9YEAAQmBDAERgRQBGMEcAR6BIgEzwTYBOIE9gUCBREeAB4+HoAeoB7yHvQfTSAAIBMgFyAgICUgMCAyIDkgPCBEIHQgfyCjIKcgqyEFIRMhFiEiISYhLiFbIgIiBiIPIhEiGiIeIisiSCJgImQlyu4B9sP7Af7///z//wABBBgEEv/1AAD/4gAA/8AAAP+/AAABMQAAASwAAAEoAAABJgAAASQAAAEiAAABHAAAAR4AAP8B/vT+5wFhAAAAoQBkAGb+Yf5AAJb91P2l/cT9r/2j/aL9nf2Y/YUAAP9w/28AAAAA/QUAAP9Q/Pn89gAA/LUAAPytAAD8ogAA/JwAAP6eAAD+mwAA/EUAAOVV5RXkxeT45Fnk9uQK4VYAAOFN4UzhSuFB4xvhOeMT4TDhAeD3AADg0QAA4HXgaOBm4Fvfj+BQ4CTfgd6n33XfdN9t32rfXt9C3yvfKNvEE44KzgAAApQBmAABAAAAAAAAAAAA5AAAAOQAAADiAAAA4AAAAOoAAAEUAAABLgAAAS4AAAEuAAABOgAAAVwAAAFoAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAFMAWgAAAGAAAAAAAAAAZgAAAHgAAACCAAAAioAAAI6AAACxAAAAtQAAALoAAAAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqYAAAAAAAAAAwQcAeoB6wHxAfIB8wH0AfUB9gB/Ae0CAQICAgMCBAIFAgYAgACBAgcCCAIJAgoCCwCCAIMCDAINAg4CDwIQAhEAhACFAhwCHQIeAh8CIAIhAIYAhwIiAiMCJAIlAiYAiAHsA/AAiQHuAIoCVQJWAlcCWAJZAloAiwCMAI0CYwJkAmUCZgJnAmgCaQCOAI8CagJrAmwCbQJuAm8AkACRAn4CfwKCAoMChAKFAe8B8ACSAfcCEgCpAKoC+ACrAvkC+gL7AKwArQMCAwMDBACuAwUDBgCvAwcDCACwAwkAsQMKALIDCwMMALMDDQC0ALUDDgMPAxADEQMSAxMDFAMVAL8DFwMYAMADFgDBAMIAwwDEAMUAxgDHAxkAyADJA1oDHwDNAyAAzgMhAyIDIwMkAM8A0ADRAyYDWwMnANIDKADTAykDKgDUAysA1QDWANcDLAMlANgDLQMuAy8DMAMxAzIDMwDZANoDNAM1AOUA5gDnAOgDNgDpAOoA6wM3AOwA7QDuAO8DOADwAzkDOgDxAzsA8gM8A1wDPQD9Az4A/gM/A0ADQQNCAP8BAAEBA0MDXQNEAQIBAwEEBAYDXgNfARIBEwEUARUDYANhA2MDYgEjASQECwQMBAUBJQEmAScBKAEpBAcECAEqASsEAAQBA2QDZQPyA/MBLAEtBAkECgEuAS8D9AP1ATABMQEyATMBNAE1A2YDZwP2A/cDaANpBBMEFAP4A/kBNgE3A/oD+wE4ATkBOgQEATsBPAQCBAMDagNrA2wBPQE+BBEEEgE/AUAEDQQOA/wD/QQPBBABQQN3A3YDeAN5A3oDewN8AUIBQwP+A/8DkQOSAUQBRQOTA5QEFQQWAUYDlQQXA5YDlwFiAWMEGQQYAXcD8QF5AZIDUANYA1kABAZmAAAA7ACAAAYAbAAAAAIACQANACEAfgCgAKwArQC/AMYAzwDmAO8A/gEPAREBJQEnATABOAFAAVMBXwFnAX4BfwGSAaEBsAHwAfsB/wIZAhsCNwJZArwCxwLJAt0C8wMBAwMDCQMPAyMDigOMA5IDoQOwA7kDyQPOA9ID1gQlBC8ERQRPBGIEbwR5BIYEzgTXBOEE9QUBBRAFEx4BHj8ehR7xHvMe+R9NIAsgFSAeICIgJiAwIDMgOiA8IEQgdCB/IKQgpyCsIQUhEyEWISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK7gL2w/sE/v///f//AAAAAAACAAkADQAgACIAoAChAK0ArgDAAMcA0ADnAPAA/wEQARIBJgEoATEBOQFBAVQBYAFoAX8BkgGgAa8B8AH6AfwCGAIaAjcCWQK8AsYCyQLYAvMDAAMDAwkDDwMjA4QDjAOOA5MDowOxA7oDygPRA9YEAAQmBDAERgRQBGMEcAR6BIgEzwTYBOIE9gUCBREeAB4+HoAeoB7yHvQfTSAAIBMgFyAgICUgMCAyIDkgPCBEIHQgfyCjIKcgqyEFIRMhFiEiISYhLiFbIgIiBiIPIhEiGiIeIisiSCJgImQlyu4B9sP7Af7///z//wABBBgEEv/1AAD/4gAA/8AAAP+/AAABMQAAASwAAAEoAAABJgAAASQAAAEiAAABHAAAAR4AAP8B/vT+5wFhAAAAoQBkAGb+Yf5AAJb91P2l/cT9r/2j/aL9nf2Y/YUAAP9w/28AAAAA/QUAAP9Q/Pn89gAA/LUAAPytAAD8ogAA/JwAAP6eAAD+mwAA/EUAAOVV5RXkxeT45Fnk9uQK4VYAAOFN4UzhSuFB4xvhOeMT4TDhAeD3AADg0QAA4HXgaOBm4Fvfj+BQ4CTfgd6n33XfdN9t32rfXt9C3yvfKNvEE44KzgAAApQBmAABAAAAAAAAAAAA5AAAAOQAAADiAAAA4AAAAOoAAAEUAAABLgAAAS4AAAEuAAABOgAAAVwAAAFoAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAFMAWgAAAGAAAAAAAAAAZgAAAHgAAACCAAAAioAAAI6AAACxAAAAtQAAALoAAAAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqYAAAAAAAAAAwQcAeoB6wHxAfIB8wH0AfUB9gB/Ae0CAQICAgMCBAIFAgYAgACBAgcCCAIJAgoCCwCCAIMCDAINAg4CDwIQAhEAhACFAhwCHQIeAh8CIAIhAIYAhwIiAiMCJAIlAiYAiAHsA/AAiQHuAIoCVQJWAlcCWAJZAloAiwCMAI0CYwJkAmUCZgJnAmgCaQCOAI8CagJrAmwCbQJuAm8AkACRAn4CfwKCAoMChAKFAe8B8ACSAfcCEgCpAKoC+ACrAvkC+gL7AKwArQMCAwMDBACuAwUDBgCvAwcDCACwAwkAsQMKALIDCwMMALMDDQC0ALUDDgMPAxADEQMSAxMDFAMVAL8DFwMYAMADFgDBAMIAwwDEAMUAxgDHAxkAyADJA1oDHwDNAyAAzgMhAyIDIwMkAM8A0ADRAyYDWwMnANIDKADTAykDKgDUAysA1QDWANcDLAMlANgDLQMuAy8DMAMxAzIDMwDZANoDNAM1AOUA5gDnAOgDNgDpAOoA6wM3AOwA7QDuAO8DOADwAzkDOgDxAzsA8gM8A1wDPQD9Az4A/gM/A0ADQQNCAP8BAAEBA0MDXQNEAQIBAwEEBAYDXgNfARIBEwEUARUDYANhA2MDYgEjASQECwQMBAUBJQEmAScBKAEpBAcECAEqASsEAAQBA2QDZQPyA/MBLAEtBAkECgEuAS8D9AP1ATABMQEyATMBNAE1A2YDZwP2A/cDaANpBBMEFAP4A/kBNgE3A/oD+wE4ATkBOgQEATsBPAQCBAMDagNrA2wBPQE+BBEEEgE/AUAEDQQOA/wD/QQPBBABQQN3A3YDeAN5A3oDewN8AUIBQwP+A/8DkQOSAUQBRQOTA5QEFQQWAUYDlQQXA5YDlwFiAWMEGQQYAXcD8QF5AZIDUANYA1kAAAACAMUEFAK9BhgABQALAAABAyMTNzMFAyMTNzMBiGpZOhiIAQdrWjwXiQWN/ocBcJSL/ocBd40AAAIAQwAABM8FsAAbAB8AAAEjAyMTIzczEyM3IRMzAzMTMwMzByMDMwcjAyMDMxMjApnvnIuc3Bv1ie8bAQifi5/vn4yfuRvTic8b552MHu6J7gGa/mYBmocBZokBoP5gAaD+YIn+mof+ZgIhAWYAAAABAEf/MAQ+BpsAKwAAATYmJy4BNz4BPwEzBx4BByM2JiMiBgcGFhceAQcOAQ8BIzcuATczBhYzMjYDEQ9fhbacHBvNoiORJJaIILQYWG1rhhERW4+4lRse2LAekR6brSK1G3lvdp4BdmF6NT/Gra3IFNrcGuvJkqJ+bGhzOUS/rLXCEr/AE9TVpnx+AAUA0//rBTAFxQANABsAKQA3ADsAABM+ATMyFg8BDgEjIiY3MwYWMzI2PwE2JiMiBgcBPgEzMhYPAQ4BIyImNzMGFjMyNj8BNiYjIgYHBScBF/wbtIR5fBkPHLODen0ahxE2SUFiEA8QNEhCZA8BZRu1g3l8GQ8cs4N6fRqHETZJQmIQDxA1SEJkD/4BWAN6WASYiqOuf02Koa1+UWNpS01RZWtL/M2Jo65+TouhrX9SY2lMTlFkakv2QQRyQQAAAAMAG//rBIQFxQAgACsAOAAAEz4BNy4BNz4BMzIWBw4BDwETPgE3Mw4BBxcjJw4BIyImBTI2NwEHDgEHBhYTBhYXNz4BNzYmIyIGORSdmDwuDh3Lo5CeFRFycHX8M0IPohZpVYzYQFa7YsbQAa1Di0P+8yljSQkTa5YJHymQPDIKC0pLS2UBhoGuX2aZVLKss4BohUxT/mNCmlqL1lrkaD4/404yMgG4HUl7NXiOA+k4ckVhJ1g4QltxAAAAAQDGBCMBqAYYAAUAAAEDIxM3MwGWd1k8FZEFqP57AXWAAAAAAQBX/ioDHwZqAA8AABMSADcXBgADBwISFwcmAhOZQgF0vxGT/vo4AjtuczaZzEACTwGfAhJqeGz+K/6gDv6R/j14b2cCJAGQAAAAAAH/jP4qAlUGagAPAAABAgAHJzYAEzcSAic3FhIDAhRD/oy9FJEBCTkCOnZrOJfMPwJF/l/98GpvbAHdAWEOAWoBzHRvZ/3Z/nMAAAABAKECYgOgBbAADgAAASU3FxMzAyUXBRMHCwEnAaP+/kv9PJVPASYP/tR/jG/daAPYW5RwAVn+oXCWXP7wXQEh/uZaAAEAcgCSBDUEtgALAAABIQchAyMTITchEzMCwAF1I/6MXLZc/oojAXVWtgMLrP4zAc2sAasAAAAAAf+Y/swBAADaAAkAADcOAQcnPgE/ATPiFn9eVzxGER+2RmvHSEhKkFWXAAABAD4CIQIjArYAAwAAASE3IQIF/jkeAccCIZUAAQBGAAABIwDFAAMAADMjNzP8tie2xQAAAf+m/4MDsQWwAAMAABcjATNBmwNymX0GLQAAAAIAUP/rBGEFxQANABsAAAECACMiAhsBEgAzMhIDJzYmIyIGBwMGFjMyNjcD5T3+7dC/tjhFPAEV0L+0N60pV39zrSZUKll+dKsnAiz+0P7vASoBFwFXAS4BFP7V/uko0bPEwP5b0bXEwgAAAAEBcAAAA14FsAAFAAAhIxMFNyUCO7X5/vEYAdYE3Ah3ZQAAAAEALQAABDMFxQAYAAApATcBPgE3NiYjIgYHIzYkMzIWBw4BBwEhA5r8kxUCEZFsDxNdZYqiF7UhARPcsrkcFaGU/lICk4MCE5GnW3aQnI/L9uKzf+CT/lcAAAAAAQA1/+sEKAXFACoAAAE/ATMyNjc2JiMiBgcjNiQzMhYHDgEHHgEHBgQjIiY3MwYWMzI2NzYmKwEBmQsHn3h/ExVddWqZErUcAQbAucAgEYBwc0wSIv7xw7fUH7YUandznRYXXoSfAsNGJ4Z2hX6Jc7Te1chirS8ttnLT19e/fIWJiJF6AAAAAAIAJwAABBwFsAAKAA8AAAEzByMDIxMhNwEzASETJwcDWrweu0S0RP2eFQMhv/zrAZ+MAyAB6JX+rQFTawPy/DgCvAE6AAAAAAEAaP/rBD4FsAAfAAAbASEHIQMXPgE3NhIHDgEjIiY3MwYWMzI2NzYmIyIGB8vOAqUb/fRuAy1vR7+pJSb716nJIasVaGpyoBoYY3ZqcCMCkQMfqf5gASItAgL+++To/cnLgH+xnZetSEoAAAIAZ//rBBkFxQAaACcAAAEyFhcHLgEjIgYPAT4BMzISBwYAIyICGwESABMiBg8BBhYzMjY3NiYDHkWFKD4pXkWO3SAERaFbsq8hJv71xcPYLi4uAVA4XpExEiN5fG+hGRlmBcUiG5EaHvjLGDc7/vTS7v7xATIBGwEfASYBSP1zVEl118/Ompy0AAAAAQDYAAAEhAWwAAwAAAEAAgMHIzcSABMhNyEEbP7T9WAntidgATPy/R8YA5QFGv7F/iH+mZmZAWICGAEHlgAAAAMANf/rBFgFxQAXACMALwAAAQ4BBx4BBwYEIyImNz4BNy4BNz4BMzIWATYmIyIGBwYWMzI2EzYmIyIGBwYWMzI2BDIalXBraBct/u/Mv9EpGqyEXVYXKvu9q7/+whpxdW61GBtvfG2xexdfZF+ZFxleaFyaBDV+pigvt3rbw9TKiLYpLadx0b/Q/JiEkZt6iIWQAyF3h4tze36IAAIAf//rBDcFxQAbACgAACUyNj8BJw4BIyICNzYAMzISCwECACMiJic3HgETMjY/ATYmIyIGBwYWAa6ExiQFAzaSV8G/JiYBHbTQyyw5MP7R3EePNzM1cLVlmCwYIGaIZLEaG2OA2NghAUVDAQbu8QEW/uf+6v6c/tX+5BwfkB0ZAd9jTpjNus6jp7j//wBGAAAB1AQ6ACYAEAAAAAcAEACxA3X////G/swB1QQ6ACcAEACyA3UABgAOLgAAAQBlAMUDxQRJAAoAAAEPARcFBwE/AQEHAWVPAUgB2yf9VBcGA0MmApsVAxTpwQF7ch0BesEAAAACAI4BkAQIA80AAwAHAAABITchAyE3IQPo/PkgAwdz/PkgAwcDL579w54AAAEAVgDGA9oESgALAAATNwEPAgE3JTc1J+QmAtAGEQb8mSUCX1JJA4+7/oYdVR3+hbzyFQMWAAAAAgDCAAAD5gXFABkAHQAAAT4BNz4BNzYmIyIGByM+ATMyFgcOAQcOAQcDIzczAU0eQHN7XxMXT2ZSjxO3JPyrrqskHJySPSYSTL4pvgGZk2lef3VddmtnYqnAybONu4A2VF7+Z8sAAAACABP+OwbGBZYAMwBDAAABBgAjIiYnDgEjIiY3EgAzMhYXBzMDBhYzMjY3EgIhIAADAhIhMjY3Fw4BIyAAExIAISAAAQYWMzI2Nz4BNxMuASMiBgZgNf760kFTBkGTW3BVOEsBDpxcdTgEBaMgKDBsvixd0P7B/u7+OFhe3QEqT7NCD0rGXf6v/tJnaAINAWEBUAEm+9koHkc6cDgCBgSXFzEecKwB99v+z1VOVE/xxAEIATM2NAT9uHNS5rEBhwGj/jH+jP6A/lArI2grLgHzAbABsAII/g39/ZKVNEQMGQ8CHQwO3QAAAv/VAAAEfwWwAAcACwAAASEDIwEzEyMBIQMnA5H9ztK4Ay+b4Ln96gHNXAMBhP58BbD6UAIZAqABAAAAAwBYAAAE0AWwAA8AGAAhAAAzASEyFgcOAQcVHgEHBgQjCwEhMjY3NiYjJSEyNjc2JiMhWAEjAbjL0icWjGV0YRss/vLXtWsBPnitGRtWff7FASljnRcab4r+/QWwxMVqlCIDG8eI2cECrf3oh3yMiZV6b4JtAAAAAQBi/+sE+AXFABsAAAEGBCMiABsBEgAzMhIHIzYmIyICBwMGEjMyNjcEdUP+89/f/vs2MzsBNezZ+Be3C4qZkNooMyyYoouhNwG/4PQBagELAQEBKAE8/vLgo7X+/8v+/dj++JinAAACAFgAAAUdBbAACQATAAAzASEgAAMHAgAhCwEhMhI/ATYCI1gBIwF6AQABKDcnPv6s/u8K5wEPsfMrKCy/xwWw/pT+7cX+zf7HBRr7ewEB1sjeAQgAAAAAAQBYAAAE8gWwAAsAAAEhAyEHIQEhByEDIQQC/ZJpAswe/H8BIwN3Hv0+YAJuAqb975UFsJb+IgABAFgAAAT5BbAACQAAASEDIwEhByEDIQP5/ZWBtQEjA34e/TdmAmsCiP14BbCW/gQAAAAAAQBo/+sFDwXFAB8AACUGBCMiABsBEgAzMhYHIzYmIyIGBwMGFjMyNjcTITchBFtA/vvC6P78NTs5AV3z2NYLtQJ0mpT6Jjwrn6ttqidD/tUeAeC/UYMBTwEKASkBIAE48smInf3D/tXV70QqAVCVAAEAWAAABXkFsAALAAAhIxMhAyMBMwMhEzMEVrWB/WyBtQEjtYQClIS1Aob9egWw/WsClQABAGIAAAI6BbAAAwAAISMBMwEXtQEjtQWwAAAAAQAP/+sEUgWwAA8AAAEzAwYEIyImNzMGFjMyNjcDnbXSK/74vrvFKrUeYnthoxoFsPvk1NXW0JZ7ln4AAQA+AAAFNQWwAAwAAAEjAyMBMwMzATMJASMCAomEtwEjt3+TAiPm/WsBhM8Clf1rBbD9hAJ8/Sj9KAAAAQBYAAADrQWwAAUAACUhByEBMwErAoIe/MkBI7WVlQWwAAAAAQBYAAAGswWwABEAAAETMwEzASMbAScBIwMjCwEjAQJkwgMCouj+3bV1iQP9WnnOA2R1tQEjBbD7UwSt+lACRwJUAftkBJj9r/25BbAAAAABAFgAAAV6BbAACwAAISMBIwMjATMBMxMzBFe2/lID47UBI7UBrgPjtgRw+5AFsPuRBG8AAgBe/+sFNgXFAA0AGwAAAQIAIyIAGwESADMyAAMnNiYjIgYHAwYWMzI2NwTOPP6y/eX+/DYzOwFE9OwBEDW0K6qzl98pMy2gqqHoKgJO/tr+wwFrAQoBAQEmAT7+k/73Atr++M7+/dz+99EAAgBYAAAFGAWwAAoAEwAAAQMjASEyFgcGBCMlITI2NzYmIyEBgnW1ASMCBM7LJyv+7OH+zwFPg7EZGmaP/rECSv22BbDww9bdlaN5hZoAAAACAF7/DAU2BcUAEwAhAAABDgEHFwcnDgEjIgAbARIAMzIAAyc2JiMiBgcDBhYzMjY3BM4kl3Kqk8MrVS7l/vw2MzsBRPTsARA1tCuqs5ffKTMtoKqh6CoCTrH9TtNz9gsMAWsBCgEBASYBPv6T/vcC2v74zv793P730QAAAgBXAAAFAgWvABoAIwAAAQMjASEyFgcOAQceAQ8BBhYXByMmNj8BNiYjJSEyNjc2JiMhAYt+tgEjAerUyikZkHlmRhkbDwccBbseBQ8bGWBx/s0BI5OrGxtnk/7MAnr9hgWv08p8oC8prn2JSWYjGCN+S4WCh5WDgod/AAEAQ//rBMAFxQAlAAABNiYnLgE3NiQzMhYHIzYmIyIGBwYWFx4BBwYEIyIkNzMGFjMyNgN+GHCz1rEoIwEFw9jpKrYciZJpnREaZrvbsCcl/vXM2f7jMLUjuJpqqwFMd4RCSMvGsbLs1ouhdFd/d0dPx8O4q9brq4FyAAABAOwAAAULBbAABwAAASEBIwEhNyEE7f5a/vu1AQX+Wh4EAQUa+uYFGpYAAAEAZ//rBVcFsAARAAABAwIEIyImNxMzAwYWMzI2NxMFV8U0/r7y1u0wxbbFJYqWkeIixQWw/CX+/ef87gPb/CW2n62oA9sAAAEAzQAABVcFsAAJAAABHwE3ATMBIwEzAkAMAzMCEcT9IJ3+88QBXnIBcwRS+lAFsAAAAAABAOwAAAbsBbAAFQAAAQczNwEzEx8BNwEzASMDJyMHASMDMwHDBANGAZOhYQgDOwFUtf3homkEAy/+TqJMtQHvv78Dwfw/wAHBA8H6UAP9iYn8AwWwAAAAAf/8AAAFHQWwAAsAAAkBMwkBIwMBIwkBMwKnAZvb/d4BQtfr/l3cAi3+xtkDcwI9/S79IgJI/bgC3gLSAAAAAAEA7gAABVMFsAAIAAAJATMBAyMTATMCjQH3z/1oZ7Rp/uXQAs0C4/xU/fwCDwOhAAEAIAAABFsFsAAJAAA3IQchNwEhNyEH+QK0HvyRCQNE/ZAeA0AblZWNBI2WiAAAAAEAEv7IArQGgAAHAAABIwEzByEBIQKcr/70rxj+mgE8AWYF6vl0lge4AAAAAQD3/4MCnAWwAAMAABMzEyP3rPmsBbD50wAAAAH/l/7IAjkGgAAHAAATIQEhNzMBI9MBZv7E/poYsQEMsQaA+EiWBowAAAAAAQB8AtkDIgWwAAkAAAEjATMTIwMnIwcBJKgBp3uEp0YCAx8C2QLX/SkBqkxMAAAAAf+W/2sDDQAAAAMAAAUhNyEC7/ynHgNZlZUAAAEA8wS7AkgFxQADAAABIwMzAkiTwtsEuwEKAAACADr/7AP3BE4AIAArAAAhNDY3Jw4BIyImNzYkOwE3NiYjIgYHIzYkMzIWBwMOARclMjY/ASMiBgcGFgKgBAUDQq5dlokeIgEB0L4WFVdnWI4OtRsBALaktSJoDQkE/jlXrS8ow2ukEBFBMz4fAUhdrJaoom5paWRGhbu7r/32PWY3i2BEyXtTUE8AAAIANf/rBCcGGAASACAAAAEOASMiJicHIwEzAxc+ATMyEgMjNiYjIgYHAx4BMzI2NwPvM+i+WY0rM50BOLZ0AziOV7GnM7UnXIdPfTJgGW9ae5chAeL/+GBWoQYY/b0BPD7+rP79yvNeUf4gS1W3pgABAEf/7AP7BE4AGwAAJTI2NzMGBCMiAj8BNgAzMhYHIzYmIyIGDwEGFgHxWqAPrBn+8qbXuyUHJwER4a7BGqwQameNpBoHHFWBeFyazwEy6ir1ASfeqmyG4qQqsdYAAAACAET/6wSVBhgAEgAgAAATGgEzMhYXEzMBIzcnDgEjIgI3MwYWMzI2NxMuASMiBgd3OO7BV4greLX+yJ0JAzyQWLCuL7YkYYlMdTNlG2tUfJ8mAh4BHAEUSEQCVvnoaAI/QAE06rPRU08B+kRP2b0AAgBH/+wD6wROABUAHQAABSICPwE2ADMyEg8BIQYWMzI2NxcOAQMiBgchNzYmAePOzicHJwEptMerIxP9bBhrh1qXPDNAuQFaoCkB2gQTWRQBKvEt9QEl/vvdea3FOTJ7OksDzKqGGn2ZAAAAAQCKAAADhwYtABcAADMTIzczNz4BMzIWFwcuASMiBg8BMwcjA4q8nRydHCXFnB5AJTMQLRtNaBMc0hzSvAOtjYu7rQsKkQUGamOLjfxTAAACADf+SwQ9BE4AHgAsAAATGgEzMhYXNzMDBgQjIiYnNx4BMzI2PwEnDgEjIgI3MwYWMzI2NxMuASMiBgd6OPHCXIwrLJnVLv752kWkOUwsg0V+oRwPAziKU7GxL7UkZYlNdjNkG2tVfaMlAh4BHAEUUEyI+9Tk3ysklB8kmItNATg5ATXpstJUUAH2RVDavAABADUAAAQZBhgAFAAAARc+ATMyFgcDIxM2JiMiBgcDIwEzAaoDQKRem48rh7WIHk9vSY85nrYBOLYDuwJITdDZ/VsCp5Z3VEj86AYYAAAAAAIARAAAAjEGGAADAAcAADMjEzMTIzcz+bXYtTi1KLUEOgEYxgAAAAAC/x3+SwI5BhgADwATAAABAw4BIyImJzceATMyNjcbASM3MwHe6iW5lRswGSsNMQ48WhXq6bYntgQ6+222pgkJlgUIW2YEkwEcwgAAAQA2AAAEKAYYAAwAAAEjAyMBMwMzATMJASMByHhktgE4trZ2AW7W/kMBFtYB9v4KBhj8dQGt/hP9swAAAQBEAAACMQYYAAMAADMjATP5tQE4tQYYAAAAAAEANQAABlsETgAkAAABFz4BMzIWFz4BMzIWBwMjEzYmIw4BBxUDIxM2JiMiBgcDIxMzAaECQKVmXn0UQq9vk4stgraCI0hqY5AgiraDIUtpUn4unbbYowOyAUxRYmNeZ+Dk/XYCi7F4AZFuA/1PAo2ngFNL/OoEOgAAAAABADUAAAQYBE4AFAAAARc+ATMyFgcDIxM2JiMiBgcDIxMzAZ8CQaZkm5EqibaIIE5xTI04nLbYowOoAVJVzNf9VQKnn25ZTfzyBDoAAgBG/+wEHAROAA0AGwAAEzYAMzISDwEGACMiAjczBhYzMjY/ATYmIyIGB3EpARrWzcUmBCn+5tbNxie2HmOJga4cBB1jiIGvGwIo/gEo/szyGP/+2wEx87fY4a4YtdvkrAAAAAL/4v5gBCYETgASACAAAAEOASMiJicDIwEzBxc+ATMyEgMjNiYjIgYHAx4BMzI2NwPuM+i+W4starYBK5wIAzuUWrKnNLYoYolJdjBqG2tWfJ8hAeH/90RD/e4F2m4BQEP+rP78yfVSSP3xQ0i8pQACAET+YAQrBE4AEgAgAAATGgEzMhYXNzMBIxMnDgEjIgI3MwYWMzI2NxMuASMiBgd3OO7BWYcsJZz+1bVjAzeETrCuL7YkYIlGbzJtHGhQfJ8mAh4BHAEURUR1+iYB8gI0NQE06rTVTUcCIj1F3L4AAQA1AAADDQROABAAAAEnIgYHAyMTMwcXPgEzMhYXAtJnR3QsmbbYow0DOYxVFC4LA5MGUEr9AQQ6jgFPVAcEAAEAO//sA8kETgAlAAABNiYnLgE3PgEzMhYHIzYmIyIGBwYWFx4BBw4BIyImNzMGFjMyNgK8C01/s58VFuesrLYXtQ1cX19yCgxGgLueFBnttbzBGLUMd11hfwEeRlIgLI+Bi7HBkE1uXkJFRx8tlIGXqNCQbF9WAAEAb//sAqQFQQAXAAABAzMHIwMGFjMyNjcHDgEjIiY3EyM3MxMCGjW/HL+EEiQrFDMTAhxdLGNjIISNHI01BUH++Y39alY5CAWDERWPnAKWjQEHAAEAWv/sBDsEOgAUAAAhNycOASMiJjcTMwMGFjMyNjcTMwMCwRICP6RknZMwf7Z/JkNpX5Mzm7XYkQFSVOHwAn39gb53W1MDBvvGAAABAJcAAAQKBDoACQAAARczNwEzASMDMwHFBQMgAWS5/eCJyrkBOlNTAwD7xgQ6AAABALIAAAX6BDoAFQAAAQcXNwEzExUzNwEzASMDLwEHASMDMwGEBQM4AVOSPwM8ASm0/gSSPgYDT/67k0y1AYaKAYsCtP1Mm5sCtPvGApu7Abz9ZQQ6AAAAAf/pAAAD8QQ6AAsAAAkBMwETIwMBIwEDMwIGARjT/mT40J7+3dMBqfLRAqcBk/3p/d0Bnv5iAiMCFwAAAf+8/ksEKgQ6ABUAAAEfAQEzAQ4BIyImJzcmFjMyNj8BAzMBtwcDAZ7L/V8/qXsVQhMxJGkLOEw+RaTLAYaFAQM6+x9vnwsFlQMIT2d1BCQAAAAAAQAIAAAD3wQ6AAkAADchByE3ASE3IQf7Akoe/OEbAsP94h4C+RmVlYUDHpeBAAAAAQBR/pADHAY9AB8AAAEuAT8BNiYjPwEyNj8BPgE3Fw4BDwEOAQceAQ8BBhYXAc+wcB0hEkhmEwRhdBMhHLnEEm5yFSETZlpJNxAhFzhj/pA4667Pd3h4F3xy0LTkOXEls4jQcJ4rL51nz4ytJgAAAAEANv7yAdwFsAADAAATIwEzyJIBFJL+8ga+AAAB/6n+kAJ2Bj0AHwAABz4BPwE+ATcuAT8BNiYnNx4BDwEGFjMPASIGDwEOAQdXbnIXIRJsYVE9EiEWOWI4r28cIRNJZxIFYnUSIR64wv4lsojPcpwqK51s0IyvJXE46q/QeHZwH35xz7TlOAABAIIBkwTMAyEAGQAAAQ4BIyImJy4BIyIGByc+ATMyFhceATMyNjcEzBe8fVF+Ry9QMD5rDIAXuX5Qg0MvUDE8bg0C5JDBQkoyMGtOEo+4RkY0LnNQAAAAAv/r/ooBxAQ6AAMABwAAEyMTMxMjNzOhtsS2N7Yotv6KA9IBEswAAAEAV/8LBAAFJgAhAAAlMjY3Mw4BDwEjNyYCPwE2Ej8BMwceAQcjNiYjIgYPAQYWAftaoA+sF+OWLbYwmX0fByPpwC22LoCCFawQameNpBoHHFWBeFyLxhTl8SsBHMUq3QEeG97lI8uNbIbipCqx1gABAC0AAAR/BcUAIQAAAQcOAQchByE3Mz4BPwEjNzMTPgEzMhYHIzYmIyIGBwMhBwG7GRU8JwKsH/x2HgkwUxYZmR2ULSz1tbGtI7caW2FYjhsuAYUdAmqYY6A6lZUNxWuYlQER3djTsIRpl4j+75UAAgAm/+UFjATxACMALwAAJQ4BIyImJwcnNy4BNz4BNyc3Fz4BMzIWFzcXBx4BBw4BBxcHAQYWMzIANzYmIyIAA8dWt2NbmT2bZaQiERUVWEJommVSsF5Vlj6rZrEkExQWUjtkm/0vK6qnlwEeJymppZn+4Wc+PUNCi4WTT7BjbrtPkoaONzlAO5qHoFC0ZmuyTIyGAnvQ+wEMv876/vUAAAEAcQAABS4FsAAWAAAJATMBIQchByEHIQMjEyE3ITchNyEDMwKLAdPQ/egBJRj+myIBZRj+m0G1Qf6iGAFeIv6iGAEk+NADGwKV/S94q3b+ugFGdqt4AtEAAAAAAgAB/vICEAWwAAMABwAAGwEzAxMjEzMBnraewraXtv7yAxb86gPIAvYAAAAC/8j+EQTBBcUAMQBDAAABDgEHHgEHBgQjIiY/AQYWMzI2NzYmJy4BNz4BNy4BNzYkMzIWByM2JiMiBgcGFhceASUuAScOAQcGFhceARc+ATc2JgQxFnFbOCYUJv7u2sf4LbchlIZ5sRMTabrWqiQUcFs3IxQkARbZz9AptRpyh4GqEhdiwtmn/hgpRR9IXQ0XY8AoQx5JYg8TawGvZ4gmM4VjurTN4gKge3ldZVxBQbO0Y4koM4dis7vhzoKXelxtWj1Fr1QLGA4UY0ZvXD8OFwwVY0ZkYgACAScE7APFBbAAAwAHAAABIzczBSM3MwOmyh/K/i3LH8sE7MTExAAAAwBS/+sF4AXEABsAJwAzAAABDgEjIiY/AT4BMzIWByM2JiMiBg8BBhYzMjY3JQIAMzIAExIAIyIAAxIAISAAAwIAISAABC4at5eSkB0THcuZj44YjhBEV1Z5EhMVR1tTYxD9VS4BAuzfAYArLP7/6+H+gZk1AboBHQEMAUIyNv5F/ub+8f6+AlSkltOwd7fMnptnU490eH6HWGSF/uX+ogFsAQ0BGQFc/pb+9QFOAZ3+U/7C/rH+YQGvAAACAMICtAN+BcUAIAArAAABJjQ3Jw4BIyImNz4BOwE3NiYjIgYHJz4BMzIWBwMOARclMjY/ASMiBgcGFgJ3AwMDKXFJaWYWF62cgQsOJzk8UwqbFrKHd3obPwsFBP67LXEbF4BDXwkKKwLCFi4WAS47e2l2bzVHQTg0Dm57job+xjVSLnk7JXNDLzMu//8AcAB3A5MDkQAmAXLw3QAHAXIBJv/dAAEApgF4A84DHwAHAAABBwMjEyE3IQO/ETW2Nf2uIAMIAtVV/vgBCJ8AAAAABABS/+sF4AXEAAsAFwAyADsAABMSACEgAAMCACEgABMCADMyABMSACMiAAEDIxMhMhYHDgEHHgEPAQ4BFwcjJjY/ATYmIyczPgE3NiYrAYY1AboBHAENAUIyNv5F/uX+8v6+oy4BAezgAX8rLP7/6+H+ggFpNoqIAQSLjRMLTEM6KAwJBwMGAo0GCQcIDTJKgI0+XQoMPV56AtkBTgGd/lP+wv6x/mEBrwE//uX+ogFsAQ0BGQFc/pb+rP6sA1KBf0JbIBxoSjgrPxUQFlIoNk5AfgE/O084AAAAAAEBAwUjA7gFsAADAAABITchA6H9YhcCngUjjQACAQUDwQMIBcUACwAXAAABPgEzMhYHDgEjIiY3BhYzMjY3NiYjIgYBGhemZlxvFRihZF5zjgw1My5TDAwyMi9XBMFzkZpqdYuVaz1FSjg9SE0AAAACAE4ACQP4BPMACwAPAAABIQchAyMTITchEzMTITchAqkBTxj+sUKjQv6eGAFiQ6Nq/PgeAwgDVpb+YQGflgGd+xaVAAEApwKbA1EFxwAZAAABITcBPgE3NiYjIgYHIz4BMzIWBw4BDwEXIQLM/dsZAU1ONwkLJzk8VQqdFrOIeHoXEl6LsAEBVQKbfgEIPkosNzxCNHCFf3RXYnCPAwAAAQCqAo8DYwXGACkAAAEzMjY3NiYjIgYHIz4BMzIWBw4BBx4BBw4BIyImNzMGFjMyNjc2JisBNwGjeztKCwo2QzFPCJ8VsHuAixYNUUA7NAwZuI1ymBefCjk+QF0KDTZGexEEbzs1MTczKWxvd248WhgaXEN5cnV0NDc8MkU1VQABAPsEvAKsBcYAAwAAATMBIwHR2/7XiAXG/vYAAf/r/mAEMwQ6ABcAAAEDNwYWMzI2NxMzAyM3Jw4BIyImJwMjAQHLfQEqSmVagS+fttijCwI0f1FBXiBetQErBDr9jwLRek9OAx37xmEBPDsjKP4qBdoAAAEAhwAAA9wFsAAKAAAhEyMiAjc2JDMhAQIDaE7PxyosARrhAQT+3QIIAQTQ4PT6UAAAAAABAMMCcAGkA0EAAwAAASM3MwF6tyq3AnDRAAAAAf/O/k0BIwAAAA8AADMHHgEHDgEjNzI2NzYmJze/Fzw/EBWjjQ5AXwsKOFQ5NQtQUmdqajIyNSMHhgAAAQEEApkCRgXFAAUAAAEjEwc3JQGkoIR3GgEbApkClAGCFwAAAgDPArMDowXFAA0AGwAAAT4BMzIWDwEOASMiJjczBhYzMjY/ATYmIyIGBwEEIMyXjJAdFyDLmIyRHp8UPFNKbRIXEjtSS20RBHagr7uUdaKsupRhZW1ZdV1nb1UAAAD//wA1AJkDYQO0ACYBcxQAAAcBcwFUAAD//wEOAAAFYAXEACcByQDXApgAJwF0AQUACAAHAZcCiQAAAAD//wEbAAAFvQXEACcBdAESAAgAJwHJANcCmAAHAcoC8QAAAAD//wC6AAAGEQXHACcBdAGyAAgAJwGXAzoAAAAHAcsAlQKbAAAAAv/z/nYDFgQ7ABkAHQAAAQ4BBw4BBwYWMzI2NzMOASMiJjc+ATc+ATcTMwcjAo0gQHJ8XxIYUGZRkBS1JPyqr6okHJySPSYTTL4pvgKhlGpcgHVbdmtnYqnAybOLvIA1VF8BmswAAAAC/54AAAd1BbAADwATAAApARMhASMBIQchAyEHIQMhARMnAQaL/MI5/fr+/N4EVgOBHv19TAIkHf3hVgKP/Ph0A/3tAWL+ngWwlv4mlf3qAXkC0AH9LwAAAQBIAOIEFwR2AAsAABMBAzcTARcBEwcDAUgBde+N7QFzXP6K8I3u/o0BXAFQAVB6/rMBTXr+sP6wegFN/rMAAAMAJv+jBWsF7AAZACQALwAAAQIAIyImJwcjNy4BNxMSADMyFhc3MwceAQcBBhYXAS4BIyICByE2JicBHgEzMgA3BNA6/pL9TYA1eYq3PigbMzkBZPRUjzttiq05JBj8RBMFFgK/J2pGmP0nAtQPAxL9RSNdPKEBBykCV/7j/rEsLaH0WOOFAQEBHAFRNjOQ5lfaff7/WpM8A6YqK/71xFCHOvxfIyEBCscAAAACAEgAAAR6BbAADAAVAAABAzMyFgcGBCsBAyMBEwMzMjY3NiYjAiE7+83MJCn+6t/7P7YBI11u/IGxFxlmjgWw/trtu83b/sYFsP5F/dqgcX2YAAABADD/7AQrBg8AJwAAMyMTPgEzMhYHDgEHBgAHDgEjIiYnNx4BMzI2NzYANz4BNzYmIyIGB+W12DD/s46gIRqhCxMBDRwl2a1IoR9IIm47YXYRE/7zHhKtEBRIQV6bHwQ68OWrpYPOOl7+8Iy0misdmR0vYFBhARKSXNJMZmSmmgAAAAADAAT/6wZgBE4ALAA3AD8AAAUiJicOASMiJjc+ATsBNzYmIyIGByc+ATMyFhc+ATMyEg8BIQYWMzI2NxcOASUyNj8BIyIGBwYWASIGByE3NiYEQXirL0XjmpeSHyLt1dYRF0VfXY0QsB7xuWOQI0uyZL6sLRf9ZSBnl1uUSyM6u/yoRK01LNRrmhARSQPIZKYsAeEGGk8VZF5Tb6+VrKBVdnJwUBKaqk9NTU/+/eN1s8A7MIUuTZVYOt90UlNYAzitix+GkwAAAAIAJv/rBKsF7QAgAC4AAAEWEg8BAgAjIgI3NgAzMhYXNzYmJwUnJS4BJzceARc3FwEuASMiBgcGFjMyNj8BA8hLKCkTNf7E0cHWKjEBLs9MgCsDBSst/tw0AQgfQiZWQm4v9TP+vBSCcXXHHh1vh3fRIxQFCHv+us9h/vb+3gEYzvkBB0U6AXKpQKBjkRglEJ4XRTCGY/0rPU/Tl5DB57BjAAAAAwBqALcELgSvAAMABwALAAABITchJSM3MwMjNzMECvxgJAOg/ri2KLbLtie2Alq02sf8CMcAAAADAEz/eQQ4BLkAGQAkAC8AABM2ADMyFhc3MwceAQ8BBgAjIiYnByM3LgE3MwYWFwEuASMiBgchNiYnAR4BMzI2N3EpARrWPGQrbHeZPy0VBCn+5tYzVydmdo1MOBi2DwseAb0bQyqBrxsCGQwGEv5OFzUjga4cAij+ASgdHKTnTdmEGP/+2xQUm9ZL5pBfljUCpBYY5KxPhDX9bA4N4a4AAv/r/mAELwYYABUAIwAAAQ4BIyImJwMjEzcbATMDFz4BMzISAyM2JiMiBgcDHgEzMjY3A/cz6L5biy1qtlMQyGC1cwM6jFWypzS2KGKJSXYwaRpqV3yfIQHh//dEQv3vAaBTA+cB3v3EATg7/qz+/Mn1UUj98EJJvKUAAAIAVQAABcMFsAATABcAAAEzByMDIxMhAyMTIzczEzMDIRMzASE3IQU8hxyHzbWB/WyBtcyHHIc7tToCkzu1/DMClC39bQSNjfwAAob9egQAjQEj/t0BI/1r5QAAAQA+AAABzQQ6AAMAADMjEzP1t9i3BDoAAQA+AAAEYAQ6AAwAAAEjAyMTMwMzATMJASMBrl5ctti2XFABxdv97wFY5AHP/jEEOv41Acv9+P3OAAAAAQBJAAADngWwAA0AAAElBwUDIQchEwc/ARMzAaYBDB/+82oCgh78yXx8IHyHtQNJVp9W/euVAmwnnycCpQAAAAEARwAAAlMGGAALAAABNw8BAyMTBz8BEzMBu5ggmI61f5AgkJm1A2g6oDr9OAJ+N6A3AvoAAAAAAQBG/ksFaQWwABgAAAkBDgEjIiYnNx4BMzI2PwEBIwMjATMBMxMFaf7LJbuVHC8aKgw9EDZYExL+TwPgtgEjtgGwA+EFsPn3tacJCZEFCGldWQRj+50FsPudBGMAAAAAAQA1/ksEEAROACAAAAEXPgEzMhYHAw4BIyImJzceATMyNjcTNiYjIgYHAyMTMwGgAkCiYZuQK5olupQcMhktDDwSN1QTmSBOck6CM6G22KMDsQFOUM3Y/P61pwkJmgUHYFwC/qBvSUP82AQ6AAAAAAIAT//rB4MFxQAXACUAACkBDgEjIgIbARIAMzIWFyEHIQMhByEDIQUyNjcTLgEjIgYHAwYWBmr8vVl5P97pNT05AVPyPYhGAzke/T5gAm4e/ZJpAsz7rDBqOOk0ZDWX6is9L4UKCwFLAQoBMAEgATUMCZb+Ipb97xUICQSOCAnn1/7O69UAAAADAET/6wbVBE4AIQAvADcAABMSADMyFhc+ATMyEg8BIQYWMzI2NxcOASMiJicOASMiAjczBhYzMjY/ATYmIyIGBwEiBgchNzYmeTQBI9dyoytQy2zBpisY/WsgZIdYnTwwQr2AdKUsTs9/x74xtSZZin28IwQlWYp9vCIEIlipLgHZBRlSAigBBQEhbmRmbP7523mwwzoyeztLamNmZwE08bvV5KwYudfmqgGQq4UagJYAAAABAEQAAANBBi0ADwAAMxM+ATMyFhcHLgEjIgYHA0T0JsSdHUEkMhMmGE5wE/QExbutDAmMBQZvY/s7AAAB/2b+SwNHBi0AIwAAASMDDgEjIiYnNx4BMzI2NxMjNzM3PgEzMhYXBy4BIyIGDwEzAoy2pR23kxwvGSQMPBA3URClnhaeFh3Amx8/Ji4QLhpQXxAWtgOt+/qxqwkJkQUIaV0EBo2LtrILCpEFBmlkiwAAAAIAWf/rBiUGNgAXACUAAAECACMiAhsBEgAzMhYXPgE3Mw4BBx4BByc2JiMiAgcDBhYzMgA3BMw6/pL94O41MzkBZPRpqT1XcRmjI5uAHgwStCqTr5j9JzQsiaahAQcpAlf+4/6xAWYBBgEBARwBUVJLCYl8r7wdTKtfAtb5/vXE/v3Y+QEKxwACAEb/7AUJBLAAFwAlAAATNgAzMhYXMjY3Mw4BBx4BDwEGACMiAjczBhYzMjY/ATYmIyIGB3EpARrWX5EyWVoZkSKFfhYJDQQp/ubWzcYnth5jiYGuHAQdY4iBrxsCKP4BKEhEd3ekpRNCllQY//7bATHzt9jhrhi12+SsAAAAAAEAZ//rBqUGDQAZAAABBz4BNzMOAQcDAgQjIiY3EzMDBhYzMjY3EwVXKFVkGqMqvKyBNP6+8tbtMMW2xSWKlpHiIsUFsMoakXzRzhT9e/795/zuA9v8JbafragD2wAAAAEAWv/sBVcEkQAcAAABDgEHAyM3Jw4BIyImNxMzAwYWMzI2NxMzBz4BNwVXJI2cp6ISAj+kZJ2TMH+2fyZDaV+TM5u1HFVLFwSRsJEI/LiRAVJU4fACff2BvndbUwMGigpmcQAB/xv+SwHcBDoADwAAAQMOASMiJic3HgEzMjY3EwHc6iW5lRowGioNPA83VhPqBDr7bbamCQmRBQhpXQSTAAAAAgA8/+wD9gRPABUAHQAAATISDwEGACciAj8BITYmIyIGByc+AQMyNjchBwYWAmnGxy8JM/7OtcKmLBkClR1jhVqdPC5BvSZXqi/+JwUaUgRP/tLuLf3+4wEBBtt5r8Q8MXw6TPwzqYYZgZUAAQFIBOQDhwXpAAgAAAEHIycHIzclMwOHBZRrppUFARZuBPwYlpYZ7AAAAAABAV4E5AOpBekACAAAATczBwUjJzczAmamnQT+4G26BJkFU5YS8/EUAAAAAAEBCwSlA08FsAANAAABDgEjIiY3MwYWMzI2NwNPFKuEfoMUkwsxR0JRCwWwf4ySeUZQVEIAAAAAAQFBBOoCMQWwAAMAAAEjNzMCCsknyQTqxgAAAAIBIgRfAsEF4AALABcAAAE+ATMyFgcOASMiJjcGFjMyNjc2JiMiBgEzEYJUS1wQE35TTV5wCSwpJUYJCSopJ0cFHlpob1NcY2pVLzg7LDA5PQAAAAH/t/5QAScANwATAAAhDgEHBhYzMjY3Bw4BIyImNz4BNwEnV2IJBhsoGTAXByBMMk9XDg+OjD5kPCUlEQt4ExljWlmVPAAAAAEBCATiA68F8QATAAABDgEjIiYjIgYHJz4BMzIWMzI2NwOvEIBWQIAyJkIHYA9/VzONMiZDCAXSYnxfQi8aYoFgQTEAAgEHBOQD7wXuAAQACAAAATMXASMDMwEjAxjWAf6xpBLJ/uWRBe4D/vkBCv72AAAAAgAd/ocBV/+rAAsAFwAAFz4BMzIWBw4BIyImNwYWMzI2NzYmIyIGKg5jPzhFDQ5ePjpJYAYdHBcrBgYaGhou6UVPVEBETFE/HSMlGyAkJgAB/fIEuv7KBhMAAwAAASMDM/7KeGCsBLoBWQAAAf5BBLv/owYUAAMAAAEzAyP++6jzbwYU/qcA///9WATi//8F8QAHAKD8UAAAAAAAAf5GBNn/lQZzAA8AAAE3PgE3NiYjNzIWBw4BDwH+Rh1NPwcJTUIcjnsTDl5BDwTZlwUdKSgnaV5dSEgJRgAAAAL9SwTk/8sF7gADAAcAAAEjAzMBIwMz/tak59sBpZGuyATkAQr+9gEKAAAAAfzc/rH9y/92AAMAAAEjNzP9pMgnyP6xxQAAAAEBZAT4AqoGeAADAAABMwMjAenB8FYGeP6AAAADAUEE7QP5BogAAwAHAAsAAAEjNzMFIzczNzMDIwPStye3/gG5J7mdyqqCBO3Dw8PY/vj//wDDAnABpANBAAYAdgAAAAEAVwAABLkFsAAFAAABIQEjASEEm/13/vu2ASMDPwUa+uYFsAAAAAAC/8wAAAS+BbAAAwAHAAABEyEJASEDIwPJ9fsOA2H9sAMQpAMFsPpQBbD65QQkAAADAE//6wUnBcUAAwARAB8AAAEhNyEXAgAjIgAbARIAMzIAAyc2JiMiBgcDBhYzMjY3A7D+JR4B2/E8/rL95f78NjM7AUT07AEQNbQrqrOX3ykzLaCqoegqApSW3P7a/sMBawEKAQEBJgE+/pP+9wLa/vjO/v3c/vfRAAAAAf/eAAAEXQWwAAcAAAEnASMBMxMjAwoD/ZG6AxSdzroEmAH7ZwWw+lAAAAADACIAAAShBbAAAwAHAAsAADchByETIQchEyEHIUADZx78mfQCwx79PU4DWx78pZWVAzyWAwqWAAEAWAAABXsFsAAHAAAhIwEhASMBIQRYtQEF/Wr++7UBIwQABRr65gWwAAAAAf/xAAAEoAWwAAwAAAkBIQchNwkBNyEHIQEDAP3nAuIe/EYcAjX+thwDjB79TQE2As79yJaOAk0CR46W/c0AAAMAVwAABX0FsAAVAB4AJwAAATMyEgcCACsBByM3IyICNxIAOwE3MwEiBgcGFjsBEzMDMzI2NzYmIwOzBdH0LzX+qeUFI7YjB9LyMTMBVuUHJbb/AJjhIyiApQeftp8HluElJ4GjBPb+zu/++/7hsbEBMfEBAwEguv6x2LbHxgMb/OXYt8TIAAABAIoAAAWSBbAAFwAAAT4BNxMzAwIABwMjEyYCNxMzAwYWFxMzAvKO0SJqtWo1/sfnSLZIyMsxarRqJm6EvbYCAxvUrAIS/e7+9v7rFf6WAWscASXyAhL97rvKFwOuAAABAB0AAAUIBcUAKAAAJT8BNhITNzYmIyIGDwECEhcPAiE3MyYCPwESADMyEgMHBgIHFzMHIQJjFwGLyTQXM4Cll+0uFzhbhwEXB/4zHt9ZOyMXPQFY8d3lOBclrXkB2B7+MyJzBhsBGwECdv7o/Op2/uz+9xsGcyKVYwEvrHQBNAFK/p7+5HS2/thdA5UAAAACAED/6wQ0BE4AHAAqAAABAwYWMzI2NwcOASMiJicOASMiAj8BEgAzMhYXNwEGFjMyNjcTLgEjIgYHBDSdExgjBxIGBSA5IkBIBEKeY6+gLwQ4AQTCWn0kLv2LJVSHT4E5XBRbUH22JQQ6/OxdOwMDiBMOS1RQTwEg6hUBGwEpU1CP/bu1wGBYAc1VXvK8AAAC//X+fwRwBcQAFAArAAABMhYHDgEHHgEHBgQjIiYnAyMBNiQDPwEzMjY3NiYjIgYHAx4BMzI2NzYmIwMLrLkiFHleZFcYLv7zxEqFMFy3ASMkAR04EA5MbIwXFFdqYKgWqB93VXOxGhhWbAXE261kli0vwH/i2S8w/jQFsbXf/P9QRXxsaIaRbfy6NDWggnulAAAAAQCz/mAEJgQ6AAsAAAEzAQMjEwMzExczNwNtuf3XYLZhlblXAQMkBDr8BP4iAeQD9v0AU1MAAAACAEH/7AQqBhwAIQAvAAABPgEzMhYXBy4BIyIGBwYWFxYSDwEGACMiAj8BPgE/AS4BAwYWMzI2PwE2JiciBgcBfB3TrEONQkIxfkRKawwLRXG6iSkEM/7f18jBLwQm1o0GU0dCJVyKfLkhBB1ldn28IAT2k5MtKIAXJEk/NlosS/7uzhf8/uwBKOgXvOsjCyeM/WGyytikF5HSGtyhAAAAAQAp/+0D/QRMACkAABM+ATcuATc+ATMyFgcjNiYjIgYHBhY7AQ8BIyIGBwYWMzI2NzMGBCMiJkgTeWZKRQ8h7sSizhy1D2phaIsNEFFwwggVwmyIERFpc2SjELUk/u+0tNABMGR9HyV2SKOWsI9OXmJEUlEmaldZUl9yTrSerAABAIv+gQRYBbAAIAAAAQcBDgEHBhYfAR4BBw4BByc+ATc2Ji8BLgE3NhI3ASE3BFgX/mualBwWKUpzhlcVEYpGTzk7Cgc3SU6aXCEauK0BRf2vHgWwdv5Snd6QalsTJixDbUqpM1M3Uy0nLxYXL56hgAEvrwFAlgABADX+YQQSBE4AFAAAARc+ATMyFgcDIxM2JiMiBgcDIxMzAaACQKJhno8t27XaIE5yToEzorbYowOxAU5QxOH7uAREoHNKRPzWBDoAAwBW/+sEZwXFAA0AFgAfAAABAgAjIgIbARIAMzISAwUhNzYmIyIGBwEhBwYWMzI2NwPrPf7t0L+2OEU8ARXQv7Q3/UQB8xwpV39zrSYBuf4NGipZfnSrJwIs/tD+7wEqARcBVwEuART+1f7pY4vRs8TA/uCF0bXEwgAAAAEAfv/rAfwEOQAPAAABAwYWMzI2NxcOASMiJjcTAfSiESUtFTAWDjBUM2tcIaAEOfzUVDQOC4AeFY6eAyIAAAAB/9H/8AO3Be4AIQAAMyMBJy4BIyIGIzc+ATMyFhcTHgEzOgE3Bw4BIyImJwMjB5vKAjgsCiUnCRwIHBFGGVVPCbsHHx8LEQgZDikVVVYTZAMzBALuOi4CjAQIU1X7qDUrApQFB1F9Al5zAAABADr+dwQbBcMAMwAAAS4BIyIGBwYWOwEHMwcjIgYHBhYfAR4BBw4BByc+ATc2Ji8BLgE3PgE3NS4BNzYkMzIWFwPjOF4zgqgQFnSfhAgBF4So3CAcbW1jgF4VEYlGTz8yDAk1TjLIpSsgvZVjXhQiAQ7cPIEoBQoRE21QcWsnb6CjiYsdFyNKbUmmNFM8RjcuJxMNNMDUosErAyuUXa+nFxAAAAEAcP/rBJcEOgAXAAABIwMGFjMyNjcXDgEjIiY3EyEDIxMjNyEEeXGEESUtFTAWDjBUM2tcIYL+jbq2unceA8YDpP1pVDQOC4AeFY6eAo38XAOklgAAAAAC/+L+YAQmBE4AEAAeAAABCgEjIiYnAyMTNRIkMzISAyM2JiMiBgcDHgEzMjY3A+0z+b9YgCpotsc1ARm8yao1tSlJh22uGz4XXlN8siEB9f8A/vc/QP31A+ICAQz+/sP++c7g64v+zUVJz6UAAAAAAQBJ/ooD/wROACEAAAEyFgcjNiYjIgYPAQYWFx4BBw4BByc+ATc2JicuAT8BNgACoae3JKsXVW96uB8IH3ihiWQWEIpGTj4yDAkzUNmtKwgxASAETtG3c3/qnCqWrTEsTW5IqDNTPUQ3MCcUNP7WKvYBJgACAEP/7ASzBDoAEAAeAAABIR4BDwEGACMiAj8BNgA3IQEGFjMyNj8BNiYjIgYHBJX+/EwzGgUu/trUx78xBDIBIdcCEfx3JlmKfbwjBCNciX26IAOjStGFF+X+5QE08Bj7ARYB/da71OOsGK/M2qEAAQC3/+sEHgQ6ABMAAAEhAwYWMzI2NxcOASMiJjcTITchBAH+qoQRJS0VMBYOMFQza1whgv7BHQNKA6b9Z1Q0DguAHhWOngKPlAAAAAEAWv/rA/QEOgAVAAABAwYWMzISNzYmJzMeAQcCACMiJjcTAcGDIkRZds8iFgkYvhsGHzb+5N+rny6DBDr9b6iBAQmogfuNbf2f/vT+xtvlAo8AAAIAP/4iBUAEOgAZACMAAAUmAjc+ATcXDgEHBhYXEz4BMzISBwYABQMjAT4BNzYmIyIGBwHq7b4vJKSNSV5vGyNnoZAWlXG01y0y/tP+7Fy2ATCo2R4cYYEaKAUQHAFB5rf2WoNKyHKq5hwC0XBy/svl9f7bF/4zAmYc6ZOh4ikcAAAAAAEAQ/4pBS4EOgAbAAABAz4BNzYmJzMeAQcCAAUDIxMmAhsBMwMGFhcTA3O9qNsgFgoavRwKHzX+1f7oWrZb2sU5YbZhL3GMvQQ5/E8f9ZyA+4ds+pz+/P7PFf47AcgcASwBGwHm/hjm0BYDswAAAAABAF3/6wXsBDoAKQAAAQ4BBwYWMzI2NxMzAwYWMzI2NzYCJzMeAQcKASMiJi8BDgEjIgI3PgE3AjNZeB0qMGpYkCQ8tzwnSmFglScWEiO/IxEfOOjFaIERAz2sdbZ6MiJxUwQ6iP+EzuGkswEr/tXClfG+hAEAh2/9n/7u/s51cgF4cAFJ+6vwcAAAAAIAWv/rBQoFxQAZACQAACUyNjcuAT8BPgEzMhYHAwIAIyICGwE3AwYWAQYWFxM2JiMiBgcCJZPoK8DNJg0l0JKLhyNmPf6y8NPZNoS3hSx0AYwbaoFIFyxEO2IVhvDTCvq/Pry/yrH+Av7T/swBWQEIApgC/Wba7AOEhZkIAWZ4Z3BvAAEAswAABNgFuwAjAAABPgEzMhYXBy4BIyIGBwEDIxMDLgEjIgYHNz4BMzIWFxMXMzcDW0mETR4vFjQFEwweOxn+aXS0dJYIKx8OFgQJGTAgR2EYVQQDIgTXfmYKDpIDBSUs/X79ugJEAoQtJAUDkg4KZ33+aEpKAAIAZP/rBjQEOgAXAC0AAAEjFgYHCgEjIiYvAQ4BIyICNz4BNyM3IQE2JichDgEHBhYzMjY/ATMHBhYzMjYGFn4MBRU42LFpgBADPat1pGgyFkEtaR4FZf6gEAEP/Qs2ShQqIFZXkSQztzMnSWJNgwOjVLZq/u/+zXZyAXlwAUn7cbJRl/31XbdgYrZczeKks/z8wpXyAAAAAQDb//UFfwWwABsAAAEhAz4BMzIWBwYEIzcyNjc2JiMiBgcDIwEhNyEE9/4eXVGQM9rZLC/+8+kaj6ocHHWYN5RIibYBBf58HgQcBRr+LRcd8Nvn1I+ckJaWGhb9VAUalgAAAAEAZv/sBPwFxgAfAAABBgQjIgAbARIAMzISByM2JiMiAg8BIQchBwYSMzI2NwR5Q/7z39/++zYzOwE17Nn4F7cLipmQ2igLAhke/ecKLJiii6E3AcDg9AFqAQsBAQEoATz+8uCjtf7/yzmVNdj++JinAAAAAv/eAAAH4wWwABYAHwAAAQMhMhYHBgQjIQEhAwIAKwE3MzISGwEBAyEyNjc2JiMFcXIBTs3JJyv+6t/9+wEF/itrVf717TEeJoW6RokCsXUBToG0GRpmjQWw/cX3xNbkBRr96/5k/peVAR8BUQKr/TD9tax7gqIAAgBXAAAH6AWwABIAGwAAASETMwMhMhYHBgQjIRMhAyMBMwEDITI2NzYmIwGxApV/tnwBT87MJSn+7OD9/Ib9a4a2ASO2ArJqAU6DrxcYaI8DNwJ5/Zbku8zbAqL9XgWw/QH97phye40AAAAAAQDyAAAFqgWwABcAAAEhAz4BMzIWBwMjEzYmIyIGBwMjASE3IQUP/hRZT5Rh1sYvW7VbJGSWT6FUjrUBBf6EHgQdBRr+RRQU0+3+OQHHtnQWFP05BRqWAAEAV/6aBXsFsAALAAABMwEhATMBIQMjEyEBerb++wKVAQW2/t3+YUi1SP5TBbD65QUb+lD+mgFmAAAAAAIASAAABKoFsAAMABYAAAEhAyEyFgcGBCMhASEBBwMhMjY3NiYjBIz9d1oBTs/MJyv+7eH9/AEjAz/84R9QAU6DsBkZZ48FGv4+5sLU3AWw/ROe/nCjeoCRAAAAAv+W/poFhQWwAA4AFQAAASMTIQMjEzM2EhsBIQEzAQYCByETIQTTtUf8Lki1ZnNaukKTAy3++7j9RDqnZQKV5/41/psBZf6aAftYAVABLQJG+uUC1fj+lnMEhQAB/8oAAAddBbAAFQAAASMDIxMjASMJATMTMxMzAzMBMwkBIwSJkIa1hpX9/uMCYf7o1OKZf7V/kgHg1P3VAS7iAp/9YQKf/WEDAQKv/YQCfP2EAnz9U/z9AAAAAAEAIP/rBLAFxQApAAABDgEHHgEHBgQjIiY3MwYWMzI2NzYmKwE/ATMyNjc2JiMiBgcjNiQzMhYEiReUdGxcGCz+zei7+Cu1GoKJjc0YHXqdmA0RmIqsFxh1l3DBFbUnASjK098EJ3CjLSyqfNnR1tN/lZd6k3c/V4Z0e4mQbMXN1wAAAAEAWAAABXoFsAALAAABMwEjEycBIwEzAxcExLb+3bbgA/yPtQEjteADBbD6UARfAfugBbD7oQEAAf/eAAAFcQWwAA8AAAkBIwEhAwoBKwE3MzISGwEFcf7dtwEF/iR5YfjgMB4lealPmwWw+lAFGv3r/l7+nZUBGQFXAqsAAAAAAQCj/+sFRQWwABUAAAEXMwEzAQ4BIyImJzceATMyNj8BAzMCbB8DAeTT/TNVlo8WPgchCT0QPlAyNu7LAvu4A237QIZ/BgOQAgJOTlQEQAADAFv/xAX2BewAFQAeACcAAAEzMgADAgArAQcjNyMiABMSADsBNzMBIgYHBhY7ARMzAzMyNjc2JiMD+RngAQQzOP6R9BontSca4f79NDcBbvUbKbX+6aj5Jy2OuBuvta8bpvgpK461BR7+uP8A/uj+zMbGAUgBAgEWATTO/p3ux9zZA2r8lu3K2NsAAAEAV/6hBXoFsAALAAABMwEhATMBMwMjEyEBerX++wKWAQW1/vuNd6FG/CcFsPrlBRv66f4IAV8AAQDRAAAFSAWwABMAAAkBIxMOASMiJjcTMwMGFjMyNjcTBUj+3bV6Yqdy18cwW7dbJWOXW71jiwWw+lACYR0a0u4Bxv46t3McHAK4AAEAVwAABzAFsAALAAAJASEBMwEhATMBIQECMP77AcwBBbX++wHJAQW2/t36SgEjBbD65QUb+uUFG/pQBbAAAAABAFf+oQcwBbAADwAACQEhATMBIQEzATMDIxMhAQIw/vsBzAEFtf77AckBBbb++5B2o0b6bwEjBbD65QUb+uUFG/rl/gwBXwWwAAAAAgDJAAAFgQWwAAwAFQAAEyEDITIWBwYEIyEBIQEDITI2NzYmI+cCKXgBTs/MJyv+7eH9/AEF/o0BsW8BToOwGRlnjwWw/ajmwtTcBRv9qP3So3qAkQAAAAMAVwAABqIFsAAKABMAFwAAASEyFgcGBCMhATMLASEyNjc2JiMBIwEzAbgBTs/MJyv+7eH9/AEjtpZvAU6DsBkZZ48Cl7UBI7UDWObC1NwFsP0T/dKjeoCR/T0FsAAAAAIASAAABJIFsAAKABMAAAEhMhYHBgQjIQEzCwEhMjY3NiYjAakBTs/MJyv+7eH9/AEjtpZvAU6DsBkZZ48DWObC1NwFsP0T/dKjeoCRAAAAAQCH/+wFNAXGAB8AAAE2ADMyEgsBAgAjIgI3MwYWMzISPwEhNyE3NiYjIgYHAR0tAUDr2+Q2Mzv+qO/c5i21I4GgkfUpC/3oHgIXCyt+n5PTHwPf4wEE/qD+8/7//tv+uQEF36qlAQzJOJU22/y0nQAAAAACAGL/6wblBcUAFQAjAAABAgAjIgATNyMDIwEzAzM3EgAzMgADJzYmIyIGBwMGFjMyNjcGfTz+sv3l/vw2BrN/tQEjtYayEDsBRPTsARA1tCuqs5ffKTMtoKqh6CoCTv7a/sMBawEKH/2BBbD9ZE0BJgE+/pP+9wLa/vjO/v3c/vfRAAACAAwAAATxBbAADQAWAAAzIwEuATc2JDMhASMTIQEjIgYHBhY7Ac3BAbt+XyApATbWAbL+3bdy/tEBwvuXrh0bf4j8Am82upvR5fpQAjwC3o2RhKYAAAAAAgBE/+sEUAYRABwAKgAAATISDwEGACMiAj8CEgA3PgE3Mw4BBw4BBxc+ARciBg8BBhYzMjY/ATYmAqG8uCIEKP7o1szJJgEVNgEo4H11DJQerriDzTcCS68kgKoXBBxjiYGuGwQYaAP7/u/YGPX+5gEm6QiAAVYBaiwZQEq4aCAYpKQBQEuVw5EYrc3VpRiaugAAAAMAQAAABCoEOgAPABgAIQAAMxMhMhYHDgEHFR4BBw4BIwsBITI2NzYmIyczPgE3NiYrAUDYAYy/xx4RaFRYSxIh4sG3QgEWYn8QEVVr+eFshhARZHvWBDqUlVJzHQMYh1qkjwHc/rdWT1VPkgFNTFVJAAAAAQA+AAADlQQ6AAUAAAEhAyMTIQN3/je6ttgCfwOj/F0EOgAAAv+a/sIETgQ6AA4AFQAANz4BNxMhAzMDIxMhAyMTAQ4BByETIUhieTtgApC7hl61QP1KQLZfAhovflAByZn+05VizuABlfxb/i0BPv7CAdMCELv8WQL8AAH/wwAABgEEOgAVAAABIwMjEyMBIwEDMxMzEzMDMwEzARMjA7R1XrZedf6U5QHd5Nugclq2WnMBVNv+UPjlAdj+KAHY/igCPgH8/j8Bwf4/AcH+A/3DAAABAB7/7QPEBEwAKwAAATMyNjc2JiMiBgcjPgEzMhYHDgEHHgEHDgEjIiY3MwYWMzI2NzYmKwE/AgFtr1xpEA9KZVOQDrQf+aqorh4QaVNOQxIh8bme0iK1EmNlX4kPE01rrwgJBQJ1UkxLW2RInKOil1F3IiJ9WqSfq6dUbGVMYUoqLRgAAAAAAQBAAAAERwQ6AAsAAAEzAyMTJwEjEzMDFwORtti2mwP9pLXYtZsDBDr7xgMJAfz2BDr89wEAAAABAEAAAARhBDoADAAAASMDIxMzAzMBMwkBIwHKeFy22LZcbAGp2v4JAT/mAc/+MQQ6/jUBy/36/cwAAAAB/9UAAARJBDoADwAAAQMjEyEDCgErAT8BMjYbAQRJ2Le6/rZKUse+NCQmW3M+bgQ6+8YDo/7H/rH+5aIBxwEAAdAAAAEAQAAABX8EOgAOAAAlATMDIxMnASMDIwMjEzMCpwH149i1mAL+LX2jA5y22OvyA0j7xgL8Af0DAwv89QQ6AAABAEAAAARGBDoACwAAISMTIQMjEzMDIRMzA262XP4+XLbYtl4Bwl62AdD+MAQ6/ioB1gAAAQBAAAAERwQ6AAcAACEjEyEDIxMhA2+2uv49urbYAy8Do/xdBDoAAAEAkAAAA/cEOgAHAAABIQMjEyE3IQPa/rK6tbr+uR0DSgOm/FoDppQAAAAAAwBA/mAFVwYYAB8ALQA7AAATGgEzMhYXEzMDPgEzMhIDBwoBIyImJwMjEw4BIyICNyU2JiMiBgcDHgEzMjY3IQYWMzI2NxMuASMiBgdzOfK3JkAbYrViI0wtqIg1BDPttSxIHlW1VCFFKKaNLwP9KUR+HDEXnhMuH3OjIfy9JUN9Gi0WnhIrGXOjJgIKAR0BJw8OAef+Fw8Q/sL++hX/AP72ERD+VAGlDQ0BHuwVzeELCfzrCAfPpre+CAgDGQcI8L4AAAEAQP6/BEcEOgALAAABMwMhEzMDMwMjEyEBGLa6AcO6trt7cKJA/QsEOvxbA6X8W/4qAUEAAAAAAQB/AAAEBgQ7ABMAACEjEw4BIyImNxMzAwYWMzI2NxMzAy62TjlwQa+uKj+1Px5ObDp0PWu2AYgQD8zMATr+xpFwEBACGgAAAQBAAAAGAgQ6AAsAAAEDIRMzAyETMwMhEwHOugFkura6AWS6ttj7FtgEOvxbA6X8WwOl+8YEOgABADX+vwX3BDoADwAAAQMhEzMDIRMzAzMDIxMhEwHDugFkura6AWS6truRcKFA+znYBDr8WwOl/FsDpfxb/ioBQQQ6AAIAhgAABIEEOgAMABUAABMhAzMyFgcOASMhEyEBAzMyNjc2JiOjAd1L+6qnHiPmuP5Quv7aAZFR+l97ERJEZwQ6/orDm6q8A6X+iv5mdVVbdQAAAAMAQAAABasEOgAKAA4AFwAAATMyFgcOASMhEzMBIxMzAQMzMjY3NiYjAYP7qqceI+a4/lDYtgMFt9i3+7pR+l97ERJEZwLEw5uqvAQ6+8YEOv31/mZ1VVt1AAAAAgBAAAADzwQ6AAoAEwAAATMyFgcOASMhEzMLATMyNjc2JiMBg/uqpx4j5rj+UNi2aVH6X3sREkRnAsTDm6q8BDr99f5mdVVbdQAAAAEAM//rA+kETgAdAAABIgYHIzYkMzISDwEGACMiJjczBhYzMjY3ITchNiYCUlOhEq0fARGhwbgtCDL+4NKjuiKtF2Bjb68o/pIeAW0SWQO4eluezf7G4ir4/tvfqHCCypKVlLMAAAAAAgBA/+wF9QROABMAIQAAATM2JDMyEg8BBgAjIgI3IwMjEzMBBhYzMjY/ATYmIyIGBwFz5TUBEMbNxSYEKf7m1sDHFOpet9i3AS0eY4mBrhwEHWOIga8bAm7h//7M8hj//tsBDt7+KAQ6/da32OGuGLXb5KwAAAAAAv/VAAAEDgQ6AA0AFgAAAQMjEyMBIwEuATc+ATMBBhYzIRMjIgYEDti2VPf+vMQBXFhMFh/pu/7zEEVeAQZJ8mCCBDr7xgGm/loBxSibaJ2t/rRRYgFrbgAAAAABADX+SwQZBhgALAAAASEHFz4BMzIWDwEzAw4BIyImJzceATMyNj8BEzc2JiMiBgcDIxMjNzM3MwchAt7+/zMDQKRem48rLQJtJbqUHTMXLAs9EDZXExJbLR5Pb0mPOZ628pwenCi2KAEBBLr/AkhN0Nnf/eG1pwgJkgUJal1ZAcbhlndUSPzoBLqVyckAAAABAFH/7AQFBE4AHQAAJTI2NzMGBCMiAj8BNgAzMhYHIzYmIyIGByEHIQYWAftaoA+sGf7ypte7JQcnARHhrsEarBBqZ4GfIQFxHv6VEV6BeFyazwEy6ir1ASfeqmyGvpOVm7YAAv/VAAAGIQQ6ABYAHwAAAQMzMhYHDgEjIRMhAwoBKwE/ATI2NxMBAzMyNjc2JiMEJVP7qqodIOW4/k+6/tc+RtTHMyEnX4UyXAIlSvpefBAPR2cEOv5juZKgsgOj/sf+qf7tmAHb9gHQ/c7+i3NOUWMAAAACAEAAAAZCBDoAEgAbAAABIRMzAzMyFgcOASMhEyEDIxMzAQMzMjY3NiYjAXwBwlK2U/uqqh0g5Ln+UGj+Pmi22LYCB0r6XnwQD0dnAqABmv5iuJKgsgIM/fQEOv3O/otzTlFjAAAAAAEANQAABBkGGAAcAAABIQMXPgEzMhYHAyMTNiYjIgYHAyMTIzczNzMHIQL1/uk0A0CkXpuPK4e1iB5Pb0mPOZ6284Yehie2JwEXBL/+/AJITdDZ/VsCp5Z3VEj86AS/lcTEAAABAED+nARHBDoACwAAAQMhEzMDIQMjEyETAc66AcO6ttj+xke2R/7B2AQ6/FsDpfvG/pwBZAQ6AAEAaP/rBskFsAAgAAABAw4BIyImJw4BIyImNxMzAwYWMzI2NxMzAwYWMzI2NxMGydQt9LVgih5Bs3GhqSnUttQdTFphmhvUu9QdVmNYkBvUBbD72dzCVlhcUtPLBCf72Y18h4IEJ/vZjXyHggQnAAABAEX/6wXIBDoAIAAAAQMOASMiJicOASMiJjcTMwMGFjMyNjcTMwMGFjMyNjcTBciRKN6kUngdOptikpgmkbWRGTxKUIIXkbaRGUZSSHgXkQQ6/SnIsEdITEO/uQLX/Sl5anNwAtf9KXlqc3AC1wAAAgA+AAAD1AYYABIAGwAAASEDMzIWBw4BIyETIzczEzMDIQEDMzI2NzYmIwL3/tZD+aumISTouf5Q2LAesEK3QgEq/ldZ+V99ExNCZwQ6/q7MpLLGBDqVAUn+t/2E/kJ/XWKAAAEAY//sBp8FxgAnAAABMzcSADMyEgcjNiYjIgIPASEHIQcGEjMyNjczBgQjIgATNyMDIwEzAb6tBzsBNezZ+Be3C4qZkNooBwIBHv3/DiyYoouhN7dD/vPf3/77Ng6tiLUBI7UDQCIBKAE8/vLgo7X+/8sklknY/viYp+D0AWoBC0n9VgWwAAABADz/7AWRBE4AIwAAATM2ADMyFgcjNiYjIgYHIQchBhYzMjY3MwYEIyICNyMDIxMzAW6lMAEL1K7BGqwQameBnyEBlx7+bxFeiVqgD6wZ/vKmyb4Tq1232LcCZ98BCN6qbIa+k5Wbtnhcms8BD9f+LgQ6AAL/2AAABDsFsAALAA8AAAEjAyMTIwMjATMTIwEhAyMDTpdYtFiL57kDDJu8uf5IAXJCAwG6/kYBuv5GBbD6UAJYAjwAAv+8AAADjgQ6AAsAEQAAASMDIxMjAyMBMxMjASEDJyMHAqBkO7U7aam5AnKcxLr+nwETNgQDIgEr/tUBK/7VBDr7xgHBAT1KSgAAAAIAdAAABicFsAATABcAAAEhATMTIwMjAyMTIwMjEyEDIwEzASEDIwGhAWUBypu8uTSXWLRYi+e57f7QWLUBI7UBawFxQgMCWQNX+lABuv5GAbr+RgG6/kYFsPyoAjwAAAIAXQAABS4EOgATABkAAAEzATMTIwMjAyMTIwMjEyMDIxMzASEDJyMHAW3zAW6cxLo0ZDu1O2mpua26O7fYtwEnARM2BAMiAcECefvGASv+1QEr/tUBK/7VBDr9hwE9SkoAAAACADoAAAY8BbAAIQAlAAABMzchATMyFgcDIxM2JisBBwMjEycjIgYHAyMTNiQ7AQMzEzMBIQKtAwMDif4QGdXGL0q1SiNjlW8efLV/CnuJoCBKtkoyAQHqJu7Q3wQBcf3gBaMN/XvO6f6MAXSxcCj9kwJ7Gn6j/owBdPy7AoX9ewHvAAACADoAAAUOBDoAGwAeAAABHgEPASM3NiYrAQcDIxMnIyIGDwEjNz4BNwMhARMhA6KwnyshtiEjUoEuDle1WQM4d44gIbYhMOXJrAOB/eHo/rECWgrP3KWlsXAS/kwBvgh+o6Wl9LwGAd/+JwFDAAAAAgBiAAAISgWwACkALQAAIRM+ATchAyMBMwMhOwEDMxczNyEBMzIWBwMjEzYmKwEHAyMTJyMiBgcDATMBIQJIShM9Lf6MhLUBI7WBAuEVJu7QBAMDA4n+EBnVxi9KtUojY5VvHny1fwp7iaAgSgKYBAFx/eABdGGNNP1qBbD9ewKFDQ39e87p/owBdLFwKP2TAnsafqP+jAMrAe8AAgA+AAAG4gQ6ACIAJQAAITc+ATchAyMTMwMhAyEBHgEPASM3NiYrAQcDIxMnIw4BDwEBEyECDiETOyr+qFq32LdgAp+rA4H+lLCfKyG2ISNSgS4OV7VZA0NzhyAhAf/o/rGlYYw0/joEOv4iAd7+IArP3KWlsXAS/kwBvggDf5+lAmEBQwAAAAL/x/5HBEcHcAAtADYAAAEyFgcOAQceAQcGBCsBIgYHBhYXBy4BNz4BOwEyNjc2JisBPwEzMjY3NiYjITcBNzMHBSMnNzMCZbzXJBeXd25gGSv+6M0vRE8KEEM7YV9vFRy2nSdzsRgdepqFBxaFiaoXF2iG/uYeAbmmnQT+4G26BJkFsNS1caEqLKx92NE8NUxOIHsvn3CKc5d5kn0jcoJzcX+VASqWEvPxFAAC/8b+RwO+BhsALQA2AAABMhYHDgEHHgEHDgErASIGBwYWFwcuATc+ATsBMjY3NiYrAT8BMzI2NzYmIyE3ATczBwUjJzczAhiqyxwRdV9aURAh+rstRFAKEEM8YV9vFRy1nSZijxAScIeFBxeFdo0QDmBw/uceAXymnQT+4G26BJkEOqaOUXUiI3dUo6A8NUxNIXsvn3CKc15MW0wjclZMSFKWAUuWEvPxFAAAAwBd/+sFNwXFAA0AFgAfAAABAgAjIgIbARIAMzISAwUhNzYmIyICBwUhBwYWMzIANwTQOv6S/eDuNTM5AWT06Pk0/GsC1A0qk6+Y/ScCqf0sCSyJpqEBBykCV/7j/rEBZgEGAQEBHAFR/pn++j5A1vn+9cTWLdj5AQrHAAMARv/sBBwETgANABQAGwAAEzYAMzISDwEGACMiAjcBMjY3IQYWEyIGByE2JnEpARrWzcUmBCn+5tbNxicBhHWmJf3rEGf/dKQlAhMLZwIo/gEo/szyGP/+2wEx8/5xvpmgtwM3uJOZsgAAAAEA6AAABVwFxAARAAABFzM3AT4BMxcHIyIGBwEjAzMCFQcDOQGRTpBmLyIMLUcq/aqbt8QBcXt7AzSegQGjP1T7cwWwAAAAAAEAswAABEsETQAVAAABFzM3Ez4BMzIWFwcuASMiBgcBIwMzAa4CAyT5QY5NHS8TMQUSDB1CFf5Eioq5ATpVVQIjfnIKDpIDBTIr/LIEOgAABABP/3MFJwY1AAMABwAVACMAAAEjEzMBIxMzAQIAIyIAGwESADMyAAMnNiYjIgYHAwYWMzI2NwOFtU21/qa1TrUB+Tz+sv3l/vw2MzsBRPTsARA1tCuqs5ffKTMtoKqh6CoEtQGA+T4BiQFS/tr+wwFrAQoBAQEmAT7+k/73Atr++M7+/dz+99EAAAAEAEb/iAQcBLYAAwAHABUAIwAAASMTMwEjEzMBNgAzMhIPAQYAIyICNzMGFjMyNj8BNiYjIgYHAtC1SbX+97VJtf4YKQEa1s3FJgQp/ubWzcYnth5jiYGuHAQdY4iBrxsDSAFu+tIBbgEy/gEo/szyGP/+2wEx87fY4a4YtdvkrAAAAAADAGz/6waVB1QALAA+AEQAAAEyFgcDDgEjIiYnDgEjIiY3Ez4BMwciBgcDBhYzMjY3EzMDBhYzMjY3EzYmIxMHIyIkIyIGDwEjNz4BMzIWMwEnPwEzBwVRn6UrczHurmSRIUGxcKGlLHMv77AeUosdcyBIWmGaG1e2Vx1ea1GLHnMfSFm4GStw/v0rLUQKBHsIFoNuPfpt/g89TRytGQWv59v9wO7UVVZbUObcAkDt1ZWak/3AoI2HggG0/kyNfJmUAkCfjgG7fX85NhIkdWV//lJAdIx8AAADAEj/6wWfBfEALAA+AEQAAAEyFgcDDgEjIiYnDgEjIiY3Ez4BMwciBgcDBhYzMjY/ATMHBhYzMjY3EzYmIxMHIyIkIyIGDwEjNz4BMzIWMwUHJz8BMwR6kJUoOizXnld/IDqcYpKUKTor158dRHIZOhw4SlCCFy+1LxhPWUJxGjobN0j7GStx/v4qLUQKBHwHF4NvPPpu/s7APk4brgRE08n+39vBSElNRNLKASHZw5WHgP7fjXpzcOvreWqFggEhjHsBwn1/ODYSI3VmgOrEQHSMAAIAaP/rBskHAwAHACgAAAE3IQchByM3BQMOASMiJjcTIwMOASMiJjcTIwMGFjMyNjceATMyNjcTArcVAvsV/s0ZpRkCOtQbkFhjVh3Uu9QbmmFaTB3UttQpqaFxs0EeimC19C3UBplqan196fvZgod8jQQn+9mCh3yNBCf72cvTUlxYVsLcBCcAAAAAAgBF/+sFyAWxAAcAKAAAATchByEHIzcBAw4BIyImNxMjAw4BIyImNxMjAwYWMzI2Nx4BMzI2NxMCIRUC+hL+yhmkGQHPkRd4SFJGGZG2kReCUEo8GZG1kSaYkmKbOh14UqTeKJEFR2pqgID+8/0pcHNqeQLX/Slwc2p5Atf9Kbm/Q0xIR7DIAtcAAAABAGT+gwUNBcUAGAAAASMTJgI3ExIAMzISByM2JiMiAgcDBhY7AQJDtUm8tzIzOwFZ79vmLLYigJ+S9Sg0LICgav6DAW4fAVL1AQEBJQFI/vneqab+88j+/dv8AAEASv6DA/sETgAYAAABIxMmAj8BNgAzMhYHIzYmIyIGDwEGFjsBAdu2SpyJKQgxASHUobkhqxZiYHq5HwgjUodi/oMBciIBKMkq9gEm4advg+qcKq7aAAABAFUAAATCBT4AEwAAARcHJwMjASc3FwEnNxcTMwEXBycCOuta7emgASHrWe8BBetc7e6e/trtXekBvax5qv6+AY6reasBb6t7qwFN/mereKoAAAAB/T0EpwAcBfsABwAAAQcnNyE3Fwf9+BmiMAH5FKIrBSV+AedsAdUAAf1kBRcAQwYVABEAAAEyJDMyFg8BIzc2JiMiBCsBN/2mbQErPG9aFgd8AwstLSv+zHArGQWVgGZ1IxI2OH99AAH+bwUY/zcGWAAFAAABNzMHFwf+bxmsHB9XBdx8jHRAAAAAAAH+kAUY/6cGWAAFAAABJz8BMwf+zT1NG68ZBRhAdIx8AAAAAAj6t/7EAdoFrwANABsAKQA3AEUAUwBhAG8AAAE+ATMyFgcjNiYjIgYHAT4BMzIWByM2JiMiBgcDPgEzMhYHIzYmIyIGBwE+ATMyFgcjNiYjIgYHAT4BMzIWByM2JiMiBgcBPgEzMhYHIzYmIyIGBwE+ATMyFgcjNiYjIgYHAz4BMzIWByM2JiMiBgf+DBN5XVZZEWgKIDErOwkBhRJ6XFZaEGkJITErOgghEnpdVlkQaQkfMSw7CP56EnlcVlkQaAkgMSs6Cf1HE3ldVloRaAkgMSs7Cf6DE3pdVlkRaAohMSs5Cv6NE3pcV1kRaQofMis7CTYSe1xWWxFpCiAyKzoJBPNaYmlTLzY6K/7rWmJpUy82Oiv+CVpiaVMvNjor/flaYmlTLzY7Kv7kW2FoVDA1OisFGlpiaVMvNjor/glaYmlTLzY6K/35WmJpUy82OyoAAAAI+tb+YwGOBcYABAAJAA4AEwAZAB4AIwAoAAAFFwMjGwEnEzMDATcFByUFByU3BQE3JRcGBQEHBSclEycDNxMBFxMHA/4YB7VaibcJtlmIAZQPAR0U/sz7vA/+4xQBMwOxBgFHMyj+7/x5Bf63MgE6bBBISn0CghBKTHs8Dv6tAWEEog4BUv6g/hEMfGJHOwx8YkcBrhCZRBex/I4RmUXIAuQCAUZF/tX84wL+u0cBKwAAAAACAD4AAAPUBnAAEgAbAAABIQMzMhYHDgEjIQEjNzM3MwchAQMzMjY3NiYjAyT+1nD5q6YhJOi5/lABBbAesCe3JwEq/ipZ+V99ExNCZwUa/c7MpLLGBRqWwMD8o/5Cf11igAAAAwBXAAAFFwWwAAMADgAXAAABBwE3AQMjASEyFgcGBCMlITI2NzYmIyEEr3/+9n/93HW1ASMCBM7LJyv+7OH+zwFPg7EZGmaP/rECPmQBk2X+eP22BbDww9bdlaN5hZoAA//i/mAEJgROAAMAFgAkAAAlBwM3JQ4BIyImJwMjATMHFz4BMzISAyM2JiMiBgcDHgEzMjY3A5OA7n8BSjPovluLLWq2ASucCAM7lFqypzS2KGKJSXYwahtrVnyfIQ1lAXVlX//3REP97gXabgFAQ/6s/vzJ9VJI/fFDSLylAAABAEgAAATwBwEACQAAASMVIQEjASETMwSOAv13/vu2ASMCjES1BRsB+uYFsAFRAAABADUAAAPRBXgACQAAASMVIQMjEyETMwNzBf43urbYAc5AtgOkAfxdBDoBPgAAAAABAFf+3gS5BbAAFQAAASEDMzISAwIAIzcyNjc2JisBAyMBIQSb/Xdfqvv0Njj+8N8bhasmKY2/qoa2ASMDPwUa/ib+0P7v/uf++JHSvtLQ/V8FsAABADX+5QOMBDoAFQAAASEDMzIWBwYCByc+ATc2JisBAyMTIQNu/jc5aMnfLB7ovBOChxcdfYdoYbbYAn8Do/7i/t2M/uskkCKedZmj/hoEOgAAAAABAEgAAAVQBbAAFAAACQIjAyMHIzcjAyMBMwMzEzMDMwEFUP4CAQLiu0gxkTFchLYBI7aBXDSRNEYBqgWw/U/9AQKV9/f9awWw/XoBAv7+AoYAAAABAD4AAASfBDoAFAAACQETIwMjByM3IwMjEzMDMzczBzMBBJ/+XevloCknkCdZXLbYtlxZK5ArJAFHBDr9//3HAc/ExP4xBDr+NdbWAcsAAAEA8wAABoYFsAAOAAABIwMjASE3IQMzATMJASMDU4mEtwEF/l8eAlh/kwIj5v1rAYTPApX9awUblf2EAnz9KP0oAAAAAQClAAAFjAQ6AA4AAAEjAyMTITchAzMBMwkBIwL1eFy2uv6AHgI2XGwBqdr+CQE/5gHP/jEDpJb+NQHL/fr9zAAAAAABAFcAAAfIBbAADQAAASETIQchASMTIQMjATMBqwKUhAMFHv2w/vu1gf1sgbUBI7UDGwKVlfrlAob9egWwAAAAAQA1AAAFjgQ6AA0AAAEhEyEHIQMjEyEDIxMzAWUBwl4CCR7+rbq2XP4+XLbYtgJkAdaW/FwB0P4wBDoAAQBX/t8HWgWwABcAAAEzMhIDAgAjNzI2NzYmKwEDIwEhASMBIQT9bvv0Njj+8N8bhasmKY2/boa1AQX9av77tQEjBAADQf7Q/u/+5/74kdK+0tD9XgUa+uYFsAABADX+5QY8BDoAFwAAATMyFgcGAgcnPgE3NiYrAQMjEyEDIxMhA+Sd0uksHui9EoKGFx2GkJxhtrr+Pbq22AMvAoX+3Yz+6ySQIp51maP+GgOj/F0EOgAAAgBl/+IFxAXFACkANwAABSImJw4BIyICEzcSADMHIgIPAQISMzI2NyYCPwE2ADMyEg8BBgIHHgEzAQYWFz4BPwE2JiMiBgcE4GCoSkudVfL6PCI6ASfDHmq+KCM0lrgiRCJkSyIuMgEJsKOdMDIimXIsYjz+ISE4WWyUHTMlP2FXnyAeJSYiIAGOASyqASUBUZz+9Mys/v/+4gkLZQERqOb/AST+zvH6q/74XQ0KAjmk5khL5o/9vMrgpgACAE7/6wR8BE8AKQA4AAAFIiYnDgEjIgITNzYSMwciBg8BBhYzMjY3LgE/AT4BMzIWDwEOAQceATMDNzYmIyIGDwEGFhc+ATcD+1mTPj16P9S5OAsp9IsfRm4eDCdseRQnFEcuHBUl2IGMbSoVF2dLJFIvkRUZHjQ6VhoVFSo8NUkUDBwdISEBOgETO80BDpummD289gQFTdaKZ73v7tNpcL9NDg0Bl2x+pYqFa2ejOzeXYgABAOj+oQZkBbAADwAAASE3IQchAyEBMwEzAyMTIQJG/qIeA3ce/pznApYBBbX++413oUb8JwUblZX7egUb+un+CAFfAAEAiP6/BM8EOwAPAAABIzchByMDIRMzAzMDIxMhAYL6HgKTHuOcAcO6trt7cKJA/QsDppWV/O8Dpfxb/ioBQQACANEAAAVIBbAAAwAXAAABIxMzCQEjEw4BIyImNxMzAwYWMzI2NxMC1ZGMkQHn/t21emKnctfHMFu3WyVjl1u9Y4sBQAK8AbT6UAJhHRrS7gHG/jq3cxwcArgAAAIAlwAABB4EOwADABcAACUjEzMTIxMOASMiJjcTMwMGFjMyNjcTMwI3kXGRnrZOOXBBr64qP7U/Hk5sOnQ9a7bmAjX85QGIEA/MzAE6/saRcBAQAhoAAAABANAAAAVGBbAAEwAAMwEzAz4BMzIWBwMjEzYmIyIGBwPQASO1el+odNbHL1u3WyRjll27Y4sFsP2eHBzT7f46Aca2dB0b/UgAAAAAAgCu/+kF7gXDAB4AJwAABSACEzcuATczBhYXNxIAMzISAwchBwYWMzI2NxcOAQEhNzYmIyICBwNa/v74OBaJdyCRFTJMAjsBXd3qxT0V/McULonOX6VGEza9/psChAYtY7CO6igXAVgBGWwXwZtldhIHASYBSv6e/sttZeX3MSaGJkADWSHh6f7wygACACX/7ARRBE4AHAAkAAAFIgI/AS4BNzMGFhc2JDMyEg8BIQYWMzI2NxcOAQMiBgchNzYmAknOzicCYk8akA4SIz0BEJzHqyMT/WwYa4dalzwzQLkBWqApAdoEE1kUASrxECGpgUdcGcXj/vvdea3FOTJ7OksDzKqGGn2ZAAAAAAEASP7ZBVAFsAAWAAAzIwEzAzMBMwEWEgcCACM3MjY3NiYrAf62ASO2fncCY9P9ktrKMjn+8d8bhawmKI3A9wWw/YsCdf2HGP7X/P7n/viR0r7R0AAAAAABAD7+/QRfBDoAFgAAAR4BBwYCByc+ATc2JisBAyMTMwMzATMCgKOiJR3luxKAhBcciJOdXLbYtlxQAcXaAmIf3LmH/vkjkCGSbpaL/jEEOv41AcsAAAAAAQBX/ksFegWwABcAAAEDIRMzAQ4BIyImJzceATMyNjcTIQMjAQIwhAKThLf+yyW7lBwwGisMPBE2VhOT/W2BtgEjBbD9awKV+fe1pwkJkQUIaV0C3/16BbAAAAABADX+SwQ7BDoAFwAAAQMhEzMDDgEjIiYnNx4BMzI2NxMhAyMTAcNeAcJetuolupUcMBorDDwRNlcTb/4+XbbYBDr+KgHW+221pwkJkQUIaV0CKf4wBDoAAgBG/+sFQAXFABYAHgAAASAAAwcCACMgAhM3ITc2AiMiBgcnPgEDMhI3IQcGFgMmARMBBzshQP6L7f7z7z4WA6oMMZngZK5KEjfGN5n/Mf0NBy2FBcX+j/7Vo/7D/qIBYAE2bzn4AQ4yJYYlQvq7ARfWI+LoAAAAAQA2/+sEhQWwABsAAAkBITchBwEeAQcGBCMiJjczBhYzMjY3NiYrATcB0wG//a0eAygW/hzDvSgs/uDVrOArtxpsdnu5GCF1nIcdA1MBx5Z1/hEO4sfZ0dbTf5WXeqqDkAAAAAH/7f51BDoEOgAcAAAJASE3IQcBHgEHBgQjIiY3MwYWMzI2NzYmKwE/AQGGAa39wR4DKBb+Kb21Jyv+39Ws3im3Gmx2e7kYInadiAcWAdwBx5d1/g8R4cTX0tfRfZWXeKqDI20AAAD//wAK/ksE/QWwACYArEQAACYB08BAAAcBmgDtAAAAAP////v+SwPkBDoAJgDnTwAAJgHTnY4ABwGaAN4AAAAAAAIANgAABPMFsAAKABMAAAETMwEhIiY3NiQzGwEhIgYHBhYzA8p0tf7d/f3PyCcrARHjvXP+soSwFxxljwNsAkT6UPXF1d39KQJCpHeHoAAAAgA2AAAGCwWwABgAIQAAISImNzYkMyETMwE3PgE3PgEnMx4BBwYEIycTISIGBwYWMwHNz8gnKwER4wFOdLX++lBlhh0RBAywCgMRLv75puZz/rKEsBccZY/1xdXdAkT65AEBjIJOpVJpkkrP1ZUCQqR3h6AAAAAAAgBA/+kGMAYYACIAMwAAExIAMzIWFxMzAwYWMz4BNz4BJzcWBgcCACMGJicOASMiAjcBLgEjIgYPAQYWMzI2Nz4BN3M4AQTCUnUmdrbzFjxKgbEpFQsIrwcFFDn+zMFxgxVEpGmvoC8C0RhcS322JQQkU4hMfTQCAwMCCgEbASlDQQJO+0FkdQHRv2TGaAF6u17+8f7pAlReWVcBIOoBPj1E77sVtLxMRhUcEQAAAAABAOj/6AWbBbAALQAAATc2JisBNzMyNjc2JiMhNyEyFgcOAQceAQ8BBhYzPgE3PgEnMxYGBwIAIwYmNwJ7DRpgcLIef5OsGxpolP6zHgFN1MwoGox3ZUQZDhE3QG6hKBULCLAGBBM6/t+xmIEcATJBgoiWgIWEfpbSyH6gLymufUVQYAHVu2THaIawXf7z/ucDmq4AAQCI/+MEpQQ6AC4AACUGFjM+ATc+ASczHgEHBgQjBiY/ATYmKwE3MzI2NzYmKwE3MzIWBw4BBxUeAQ8BApIKGi1miiAPBAywCwQQMf71p4NnFA8PT1/EG6tqgBARVHPzF/m2uR4SbGBTPREP1i0vApmOTqFQbItI2+IDb4RMT0qUVk5YW5Sql1ltIgMceVZOAAAAAAIAz/7EA7sFsAAhACsAABM3MzI2NzYmKwE3MzIWBw4BBx4BDwEGFhcHIyY2PwE2JiMBDgEHJz4BPwEzzx6WlasbG2aU/x7/08soGot4ZUYZGw8IHAW6HwUPGxlgcQGuFn9eVzxGER+2AnqWgoKIf5XUyX2fLymvfYhJZSQZJHxNhIKH/cRrx0hISpBVlwAAAAIAvP61A20EOgAiACwAABM3MzI2NzYmIyE3ITIWBw4BBxUeAQ8BBhYXByMmNj8BNiYjAQ4BByc+AT8BM7wew2t/EBJTdP77HAEGtrgeEm5iVD0SFAoKHAS7HgILExFOYAGcFn9eVzxGER+2AbqUVk9aWZSomFtuIgMeg15hMVIWExdjM19YVv51a8dISEqQVZcAAAAB//H/6AcfBbAAIQAAASEDAgArATczMhIbASEDBhYzPgE3PgEnNxYGBwIAIwYmNwSQ/kdrV/7+8TEeJoS8QokDJN4VPEqAsSkVCwivBwUUOf7MwKKFHgUa/eb+Uv6ulQEiAUkCsPupZXQB0b9kxmgBerte/vH+6QOtxAAAAf/s/+gF8wQ6ACEAAAEDBhYzPgE3PgEnMxYGBwYAIwYmNxMhAwoBKwE/ATI2NxMEMpMVO0llkSUUCQmvBwITNf7vqKCGH3X+4D5F1MY1IyhfhDFcBDr9H2R1AbmpXrxjeK1Y+P8AA63EAkr+y/6o/uqiAdf0AcwAAQBO/+gHJgWwAB0AAAEDBhYzPgE3PgEnNxYGBwIAIwYmNxMhAyMBMwMhEwVq3hU7SoGxKhQLB68HBBQ6/svBoIYfPP1ygbYBI7aEAo6EBbD7qWR1AdG/Y8ZpAXy5Xv7x/ukDrcQBLf16BbD9awKVAAEANf/oBgUEOgAdAAABIQMjEzMDIRMzAwYWMz4BNz4BJzMWBgcGACMGJjcDEv40XLXYtV4BzF62kxU7SWaRJRMJCK4HARM1/u+poIYfAc/+MQQ6/ikB1/0fZHUBualdvGR7qlj4/wADrcQAAAEAYP/rBJsFxQAhAAAFIgIbARIAMzIWFwcuASMiAAcDBhYzPgE3PgEnMxYGBwYEAjXk8TU1OgFj+WOhN1M4flCc/wAnNSyLqoGnHxILBLABAxEw/tYVAV4BDAEGASIBSC0qgyIi/vPF/vjZ/AGajlWxY518UNziAAEARv/rA5oETgAhAAAlPgE3PgE3Mw4BBw4BIyICPwE2ADMyFhcHLgEjIgYPAQYWAfJbWRQMDQOvAQoLJNqdy8MuCDEBINNTgiVGJ2pBebkfCCNcgAFVVz1zPEVxNqKgATviKvQBKCMfjRse7JoqrNwAAAAAAQDX/+gFJAWwABkAAAEhNyEHIQMGFjM+ATc+ASc3FgYHAgAjBiY3Ao7+SR4ELx7+PsAWPEqBsCsUCwivBwQVOf7MwaCGHgUalpb8P2R1AdG/Y8ZpAX24Xv7x/ukDrcQAAQCs/+gEfAQ6ABkAAAEhNyEHIQMGFjM+ATc+ASczHgEHBgQjBiY3AfT+uB0DTB3+snUWO0xliiAQBgyuCwQRMP71qKGGHgOmlJT9s2tuAZuPUKZQaJRK3eMDrcQAAAAAAQBq/+sFQwXFAC0AAAEHIyIGBwYWMzI2NzMGBCMiJDc+ATcuATc2JDMyFgcjNiYjIgYHBhY7AQczDwEDgAaqoswbG5qsi+EYtS7+tN3l/vsoG6WMZ2EVKgEx+cf9JLYXlYqdzRcZfaqqBwEKBwK7IIOHhI2fdeTF4siLqCcxo2TYxt21dYeTcX58Ii8lAAD//wDpAowFAAMhAEYBhtwAUzNAAP//AQACjAYJAyEARgGGtQBmZkAA////aP5uAxEAAAAnAEH/0v8DAAYAQQQAAAEA1gQCAkUGKwAJAAATPgE3Fw4BDwEj+RV/X1k9SBEktQSxa8dIR0qQVrIAAQCxA+cCIAYYAAkAAAEOAQcnPgE/ATMB+xV+X1g7RxIltgVhbMdHSEiRVroAAAAAAf+k/tYBEAD6AAkAADcOAQcnPgE/ATPuFn9eVztGEiO2T2vHR0dIkVauAP///2ED5wDQBhgARwFmAYEAAMABQAAAAP//ANYEAgNyBisAJgFlAAAABwFlAS0AAP//AL0D5wNSBhgAJgFmDAAABwFmATIAAAAC/6T+1gItAPoACQATAAA3DgEHJz4BPwEzFw4BByc+AT8BM+4Wf15XO0YSI7b7Fn9fVztHEiO2T2vHR0dIkVauq2vHR0dJkVWuAAAAAQCVAAAERgWwAAsAAAEhAyMTITchEzMDIQQu/oyVtpX+kRgBbzy2PAF0A6P8XQOjlwF2/ooAAAABABD+YARVBbAAEwAAKQEDIxMhNyETITchEzMDIQchAyEDqP6LQrZC/pMYAW1+/pIYAW48tjwBdBj+jH4Bdf5gAaCVAw6XAXb+ipf88gAAAAEArwIYAl8D3gANAAATPgEzMhYPAQ4BIyImN80Se1tUVhEMFHhcU1gSAxheaG9XPV9kbFcAAAD//wBHAAACvgDFACYAEAEAAAcAEAGbAAD//wBHAAAERADFACYAEAEAACcAEAGbAAAABwAQAyEAAAAGAK7/6wbhBcUAGQAnADUAQwBRAFUAAAE+ATMyFhc+ATMyFg8BDgEjIiYnDgEjIiY3AT4BMzIWDwEOASMiJjcBBhYzMjY/ATYmIyIGBwUGFjMyNj8BNiYjIgYHAQYWMzI2PwE2JiMiBgcTJwEXAvEbtYNBXhoteEp5fBkPHLODQl8ZLnhIen0a/fUbtIR5fBkPHLODen0aAqERNklCYhAPEDVIQmQPAZkRNklBYxAPEDVIQmQP/C8RNklCYhAPEDVIQmQPElgDelgBZYmjPzc5Pa5+TouhPTg5PK1/A4GKo65/TYqhrX78zFJjaUxOUWRqS05SY2lMTlFkaksC5lFjaUtNUmRrS/vXQQRyQQAAAAEAgACaAm0DtAAHAAABEyMDPwEBMwEvn4jGAwEBYYgCJ/5zAYQNBgGDAAAAAQAhAJkCDQO0AAgAAAETBzMHASMBAwFJxAIBA/6hiQE8nQO0/nwGDf58AY0BjgAAAQAJAG8D2wUiAAMAADcnARdhWAN6WG9BBHJBAAIAiwIwA3UFxQAKAA8AAAEzByMHIzchNwEzATMTJwcC6osZiyWfJf5ZDwImo/3t+04DFANmfbm5XgJ+/aEBhgIeAAAAAQCjAosDewW6ABQAAAEfAT4BMzIWBwMjEzYmIyIGBwMjEwHABAMsckVtZB9mpmAWLkAwUR5wpqAFq28BPkGWnf4EAd1xUzs1/c8DIAAAAAABAC0AAAR/BcUAJwAAAQ4BByEHITczPgE3IzczNyM3Mzc+ATMyFgcjNiYjIgYPASEHIQchBwGeFTkmAqwf/HYeCS5PGJ8emhiUHo4ZLPW1sa0jtxpbYViOGxkBiB7+fRkBfx4Bvl2VN5WVDbJqlpGWld3Y07CEaZeIlZaRlgAAAAMASf/sBiEFsAAKABMAKwAAAQMjASEyFgcGBCMnMzI2NzYmKwElAzMHIwMGFjMyNjcHDgEjIiY3EyM3MxMBb3G1ASMBSc3KJyv+6eB2lIKzGRtljpQDlDW/HL+EEiQrFDMTAhxdLGNjIISNHI01Ajb9ygWw+MXX5pareoakJv75jf1qVjkIBYMRFY+cApaNAQcAAAABAGD/6wRiBcUAKQAAASEGFjMyNjcHDgEjIgI3IzczNyM3MzcSADMyFhcHLgEjIgYPASEHIQchA2n+NSd2jjNtNAw6cjrN2TKJGIkhiBiIBDUBNN81bDsxMGM2g84jBAHLGP41IgHLAgK/wxERmA8QASL1eKl6EQEJAQ4QD5oQE9CvE3qpAAAABADj/+sFMAXFABsAKQA3ADsAAAEOASMiJj8BPgEzMhYHIzYmIyIGDwEGFjMyNjcTBhYzMjY/ATYmIyIGBzM+ATMyFg8BDgEjIiY3AScBFwL/FrBvfWocDxm3cXpuF4cMMzo/VBAPEDE7PU0MYRp9eoOzHA8ZfHmDtRuHD2RCSDUQDxBiQkk2EQF/WPyGWAQebJKhik1/rot0OU9kUk1Kakw7/Pl/raGLTn6uo4lLamRRTkxpY1IDykH7jkEAAAAAAgBn/+sD6wXFABoAJgAABSImPwEOASM3MjY3Ez4BMzIWDwEGAA8BBhYzEzc2JiMiBgcDPgE3AkjEjS4DMF8yIzReL2AjwXt2ax8IIP8AthQdQminCQ8bIDJCF01lfhgV3+UQDg2uDA0B37HKn50qm/66aWaRmAPXLE9RZnn+gErQeQAABABOAAAIaQXAAAMAEQAfACsAAAEhNyEBPgEzMhYPAQ4BIyImNzMGFjMyNj8BNiYjIgYHASMBIwMjATMBMxMzB3X9+RwCB/46IMuYjI8dFyDLl42QHp8UPFRJbRIXEjxRS2wS/eO2/lID47UBI7UBrgPjtgFrjQJ5oa67lHWirLmVYWRtWHVeZm5W+48EcPuQBbD7kQRvAAACASMDlwTkBbAADgAWAAABEzMDIxMnAyMDIwMjEzMHIwMjEyM3IQOU6mZrVkUC1S9KA0lXa2zEh1tXW4cQAWUEIAGQ/ecBXwH+oAFs/pQCGVH+OAHIUQAAAgB8/+wEjwROABUAHgAAJQ4BIyICNzYAMzISDwEhAx4BMzI2NwMiBgcDIRMuAQOQXrdaweQuMQFjw7fXLgn9NkIrdElUvl20QpRBNwH2OShyXjg6AUno9gE7/srnL/64Njg8PgMqQTn+6wEeNjsA//8A/v/1BgUFsgAnAckAjgKGACcBdAD1AAAABwHQAxAAAAAA//8ArP/1BpAFwAAnAcsAhwKUACcBdAGfAAAABwHQA5sAAAAA//8Aqv/1Br0FrwAnAc0AfwKOACcBdAHTAAAABwHQA8gAAAAA//8BHv/1BiMFrwAnAc8AjwKOACcBdAEhAAAABwHQAy4AAAAAAAIAJv/rBFoF7QAUACEAAAEWEgMHAgAjIgI3NgAzMhYXNzYmJwMyNj8BLgEjIgYHBhYCpOvLRRY1/sTRwdYqMgEV01KNLgMJoJVvd9EjFRGJeXmuHx1vBe1L/j3+qHD+9v7eARjO/QEDQTsB2eM9+zHnsGpRac2dkMEAAAABADn/KgVBBbAABwAABSMTIQMjASEENrXz/W7ztgELA/3WBfD6EAaGAAAAAAH/u/7zBOQFsAAMAAAJASEHITcJATchByEBA1z9UgNEHvvnHALH/locA9Ae/QQBlwJB/UiWjQLOAtSOlv1AAAABAM8CjAP1AyEAAwAAASE3IQPX/PgeAwgCjJUAAQBoAAAFKQWwAAsAAAEVFzcBMwEjAyM3IQH1AyUCU7n834lqrR4BMAFPWAFZBGH6UAJ1lwAAAAADAEn/6weABE4AGQAnADUAAAEGACMiJicGBCMiAj8BNgAzMhYXNiQzMhIHBQYWMzIAPwEmAiMiBgchNiYjIgAPARYSMzI2NwdGMf7nxZGyMWr++J23tC0OMAEYxpGzMWwBB5+0syz51yVRe3gBBy8IBoqEb6shBWYjUHd6/vkwCAWKhG+rIgH68/7k2p+g2QEw30TyAR7cnqDa/s7eRLfDASBoKmwBGtOntcX+4Wcqb/7n0akAAAAAAf87/ksDHQYtABwAAAUOASMiJic3HgEzMjY3Ez4BMzIWFwcuASMiBgcDAQUdtZQbMBkkDTwPOFEQ0R3Amx9AJS4RJxlPaRDRWbGrCQmRBQhpXQUetrILCowFBm5k+uIAAgBQARoEPgP7ABsANwAAEz4BMzYWFx4BMzI2NxcHDgEjIiYnLgEHIgYHJwM+ATM2FhceATMyNjcXBw4BIyImJy4BByIGByfFPIA+QTNWSjU+OYQ4Axg8gDw6Q0FUNUE6hTYDRzyAPUE0Vk4wPjmFNwMXPYA9OkBCWy5COoQ2AwNoRkwBFzMuF0xCAaNHSxwpMhgBTUEB/vpGTAEXMzAWTUIBpEdLHCk2FQFNQgEAAAABAI4ApAQIBN8AEwAAATMHIQMhByEHJzcjNyETITchExcDS70g/vWyAYog/iikR3u/IAENs/5zIAHav0cDzZ7+/57sOrKeAQGeARI7AAAA//8ASAACBDkEjQBnAB4AdACyQAA5mgAHAYb/ef12AAD//wBHAAAEEgSgAGcAIAA4AMRAADmaAAcBhv94/XQAAAACAGcAAAPaBbAABQAPAAABMxMBIwMhAy8BBwETHwE3Am2I5f38ieYCuokGAx7+sIkGAx4FsP0n/SkC1wIDNwE4/f39/jcBOP//AI8AsgIbBOsAJwAQAEkAsgAHABAA+AQmAAAAAgCUAnoCngQ6AAMABwAAASMTMxMjEzMBHYlZic+JWYkCegHA/kABwAAAAAAB/+b/LwEjAOwACQAAJQ4BByc+AT8BMwEOFGpSWDA6EBatgGKvQEg/e0xvAAIAaAAABBcGLQAXABsAADMTIzczNz4BMzIWFwcuASMiBg8BMwcjAyEjEzNovJ4cnhgn5Lc7ekc+LGk8aHsWGMkcybwCIbbYtgOtjXfFtyAdmhYda213jfxTBDoAFv+1/nIIMwWuAA0AHQArADsAQQBHAE0AUwBcAGAAZABoAGwAcAB0AH0AgQCFAIkAjQCRAJUAAAE2JiMiBg8BBhYzMjY3FzI2NzYmLwE+ATc2JisBAycOASMiJj8BPgEzMhYHBQ4BIyImNyMGFjMyNjcTIwETMwczByE3MzczAwETIQcjByU3IQMjNwEyFgcOASsBNwE3IQchNyEHITchBxM3IQchNyEHITchBwEzMhYHDgEHIwUjNzM3IzczAyM3MyUjNzM3IzczAyM3MwMkE2RaZIkVFhRjXWKJFt9abBEJIicBJzEJD1xar25oD1Y4QDQPFg1YOT40DgNYCT8kMSgLVhFVUk9wEUxW+UM/aSi2FwTMF7koZz/6LzkBHxe2IgWkFwEgOWci/GkxJggIPC11IgHgFwECF/2LFwEBF/2MFwEAF4oXAQIX/YsXAQEX/YwXAQAXAY5XOywICDwvYf0KaTNpGWkyaclpMmkGu2czZxlnMmfJZzJnAkRge3JpcGJ5cWrYSFMtRA0DDjorS0v929hFTkhLcERPSUqbLDYpMlJSVlUBevtPATvKcXHK/sUGHwEddKmpdP7jqfy2KysoK6kDSnR0dHR0dPk4cXFxcXFxBFsdKiYpAZb8fvr8Ffl+/H76/BX5AAAABQCH/dUHfAhiAAMAHQAhACUAKQAACQMFPgE3PgE3NiYjIgYHMz4BMzIWBw4BBw4BBxcjBzMDMwcjATMHIwTDArn7wf1KA5ULIixMcBEbe456vBy9C0ApMCwKCzswVUcTqrwivNAEAQQCGgQBBAZS/DH8MQPP8To3GyiAUIyLg4c0M0A0NkgdOVZaW6r9TAQKjQQAAAEAH//vA84EjQAeAAAbASEHIQM+ATc2FgcOASMiJj8BBhYzMjY3NiYjIgYHk8YCdSD+KF4pcDatkiYn4tKgxiG4E1xhaYkXF01iW24gAfkClJ7+wRomAgPGvMHDoaIOXWF+cXZ2PDUAAgAnAAAC1wMhAAoADwAAATMHIwcjNyE3ATMBMxMnBwJhdhl2H50f/nwMAfag/hjjQAMUARh+mppiAiX99wFCARsAAAACAFH/6wRiBcUADQAbAAABAgAjIgIbARIAMzISAyc2JiMiBgcDBhYzMjY3A+Y9/uzQvrY4RTwBFNDAtDeuKVd/c6wmVCpYfnSrJwIs/tH+7gEqARcBVwEuART+1f7pKNGzxMD+W9G1xcEAAAAB/+D+3wKzA0EADwAAETMyEgMCACM3MjY3NiYrAcT79DY4/vDfG4WrJimNv8QDQf7Q/u/+5/74kdK+0tAAAAAAAf8d/ksBJACYAA8AACUHDgEjIiYnNx4BMzI2PwEBJDAluZUbMBksDDsROFMTMJjxtqYJCZoFB2Bc8QAAAf96/mYBPgBAABMAADceAQcOASMiJic3HgEzMjY3NiYnpFhCDxaKYzpZHzYdLB82PwkKLDJANIxNaWQaEncMDzEpNk8zAAAAAf/C/pkA3wCaAAMAABMjEzN4tme2/pkCAQAAAAIBNwTZA6EGzgANACEAAAEOASMiJjczBhYzMjY3Ew4BIyImIyIGByc+ATMyFjMyNjcDdRWog3mFE5MMMUY/UQu+EWpFMGcoHjcHSw9qRSdvKR04CAWuaG12XzhARDQBCVFiTDQlFU5nTDMmAAIBNwTgA2wHAgANAB0AAAEOASMiJjcjBhYzMjY3JTc+ATc2JiM3MhYHDgEPAQLdClA+RjILjhOEeIGkFP68GEg8BwZLPxeIeQ4LVj0OBbAzQT03XXNrZRB8AxcgHx1QSEc3Ngg+AAAAAgE3BN8DgQaJAA0AEQAAAQ4BIyImNzMGFjMyNjcnMwcjA4EUq4Z9iBOUCzRIQFMKK5S/YwWwZWxzXjc+QjPZxgAAAAACAQ8E5APABtIABwAbAAABIycHIyclMzcOASMiJiMiBgcnPgEzMhYzMjY3A8Ckl9eeAQFIf+EOaUAtXSUcPAVFDWpAI2clGzoGBOSfnwPw5URYSDAcE0JeRiwdAAIBCwTkBKkGzgAGABYAAAEjATM3FzMnNz4BNzYmIzcyFgcOAQ8BAvW2/syj3ZGkNxlCNQgGQjcWemsQDVA3DQXp/vu6uomDBRYkIiFcUVA/Pgc8AAIAXwTSA70GgAAHAAsAAAEjJwcjJwEzBSMDMwO9v3y8uQEBQZL+kIeJwgTSn58DAQJYAQEAAAAAAgEXBOQFHgaSAAcACwAAATMTIycHIycBMwMjAlqT2796vLsBA0TD8IkF6f77n58DAav+/wAAAAACAQ0EpwOfBnkADQARAAABDgEjIiY3MwYWMzI2NwcjJzMDnxrCloqWGJIOQFxSZw5ckZzRBbCBiJJ3R01TQQXOAAAAAAEBLwSQAkYGFwAFAAABNzMPASMBTKBaRxu1BSP0/YoAAv/UAAAD6ASNAAcACwAAASEDIwEzEyMBIQMnAwH+J5i8Ap6ry7v+TQFwUQMBEP7wBI37cwGkAfsBAAAAAwA+AAAEGgSNAA8AGAAhAAAzEyEyFgcOAQcVHgEHDgEjCwEzMjY3NiYjJzMyNjc2JisBPukBcrzFHxNtVlpKEyTjv5JM+2GAExNSaeC7b48SEl9/uwSNnp9bfh4DGZJjsJgCC/6IYFpgXolbV19BAAEATf/vBEIEnQAbAAABBgQjIgI/ATYAMzIWByM2JiMiBg8BBhYzMjY3A9w4/vPAuNIuIzABMMi5wxu2DV92bskeIyJteG6aKgGO0M8BH+Ks9AEN0suKf9GbrarEgooAAAIAPgAABEkEjQAJABMAADMTITISDwEGBCMLATMyNj8BNiYjPukBiLrgKiou/svMBq7RcNAcKx18egSN/vPR0uT5A/n8mr2N05eyAAABAD4AAAQdBI0ACwAAASEDIQchEyEHIQMhA0/+EE0CPx39CukC9h79wUMB7wIV/n6TBI2U/rAAAAEAPgAABB8EjQAJAAABIQMjEyEHIQMhA0r+EGW36QL4Hv2/SAHwAfj+CASNlP6UAAEASv/vBF4EnQAfAAAlDgEjIgI/ATYkMzIWDwE2JiMiBg8BBhYzMjY/ASM3IQPNOPKrzeEqMS0BN9rBuhG0CGV2fdMbMSB9jl2QITLxHgGlnUJsAQnV8+X4xqQBbWq7jfScry0c/JUAAQA+AAAEpASNAAsAACEjEyEDIxMzAyETMwO7tmP98GO36bdpAhBptgHu/hIEjf31AgsAAAEAPgAAAd0EjQADAAAzIxMz9LbptgSNAAEAC//vA9EEjQAPAAABMwMOASMiJjczBhYzMjY3Ax20oiXxqa63I7YXV2lPihUEjfzUuLqyr3Fde2QAAAEAPgAABHEEjQAMAAABIwMjEzMDMwEzCQEjAbRaZbfpt2ZOAdHa/eQBU+UB+P4IBI3+AgH+/dH9ogAAAAEAPgAAAvsEjQAFAAAlIQchEzMBEgHpHf1g6beTkwSNAAAAAAEAPgAABY4EjQAPAAAlFwEzAyMTJwEjAyMDIxMzAqQDAgTj6bWkA/4ifZcDp7fp6/cBA5f7cwM1AfzKA0T8vASNAAAAAQA+AAAEvgSNAAsAACEjASMDIxMzATMTMwPVtP6EA6236bcBewOutANh/J8EjfydA2MAAAIATf/vBG8EnQANABsAAAEGACMiAj8BNgAzMhIHJzYmIyIGDwEGFjMyNjcEHzL+09jH1C4jMQEu2MbULbUlb4t+xCIjJm+Lf8MjAfD6/vkBG+as+AEJ/uTlAbqywautvLLBrQACAE3/iwRvBJ0AEwAhAAABDgEHFwcnDgEjIgI/ATYAMzISByc2JiMiBg8BBhYzMjY3BB8WUTx7knw7f0fH1C4jMQEu2MbULbUlb4t+xCIjJm+Lf8MjAfBsp0Gib6AfHQEb5qz4AQn+5OUBurLBq628ssGtAAIAPgAABD8EjQAaACMAAAEDIxMhMhYHDgEHHgEPAQ4BFwcjJjY/ATYmIyczMjY3NiYrAQFVYLfpAa21tiAVcmVYPhQUDAETBLsSCQwUE0tf9fZrgRIUUXT2AeL+HgSNs6JjeCYgjmdlNlwYExppO2NjXpVhWWRkAAEAI//vBDIEnQAlAAABNiYnLgE3PgEzMhYHIzYmIyIGBwYWFx4BBwYEIyImNzMGFjMyNgMAD12Wx5weIPrHusAitRRhc2+RDxBWpMGbHSL+/tO25Sa1GIF0dKEBL05RLDuRl5+hu6xlbmBLUEsuO5eTp5qqvXhcYQAAAAABAL0AAAQlBI0ABwAAASEDIxMhNyEEB/6zy7XL/rgeA0oD+fwHA/mUAAAAAAEAWP/vBLwEjQARAAABAwYEIyImNxMzAwYWMzI2NxMEvJkr/t/ZxeEombSZHH+Ee78amQSN/QHVytzDAv/9AYiEjn4C/wAAAAEAvgAABMoEjQAJAAABHwE3ATMBIwMzAf0GAycB28L9ZanIwwEgVQFUA2/7cwSNAAEA1AAABfIEjQATAAABNzMHATMTNzMHATMBIwMjASMDMwGMAgICAYGpGgICAgFbw/4FqCcD/n6mKcIBCQkHA4L8fAkHA4L7cwNd/KMEjQAAAf/jAAAEhQSNAAsAAAkBMwETIwMBIwEDMwJTAVzW/iH/1LT+ntgB7fzWAtcBtv2//bQBv/5BAkwCQQAAAQC1AAAEgQSNAAgAAAkBMwEDIxMDMwIoAY7L/dtStVT0ywJNAkD9Dv5lAaUC6AAAAf/5AAAEFgSNAAkAADchByE3ASE3IQfvAnEd/LYXAw79xh4DFBaTk3IDh5RuAAAAAgBK/+8EIASdAA0AGwAAAQYEIyImNxM2JDMyFgcnNiYjIgYHAwYWMzI2NwO0K/76w7TCKEUqAQjEssEntRtecWijGUUcYXFnohkBm9fV58UBV9TX58QBiY2Yfv6oio+ZgAAAAAEArAAAAk0EnQAFAAAhIxMHNyUBYbXEwBsBggPTA4hFAAAAAAEADwAAA6YEnQAYAAApATcBPgE3NiYjIgYHIz4BMzIWBw4BBwEhAuX9Kh0BzHVVDRI9VFuGEbYg8bSbniIYd8X+3QH1kwGYZXFAXWt1VqC/tqh3f7D++gABACD/7wPJBJ0AKQAAATMyNjc2JiMiBgcjPgEzMhYHDgEHHgEHDgEjIiY3MwYWMzI2NzYmKwE3AXWcXHUSEE9lTIQOtR/uo6mzHxNyWVJHEyP3upfHIrQRWF5fjxIWUmucFQKaYlVUZGJKnaOroFmDJCWHYa+nq6hXaW9UbVhpAAIAJQAAA8kEjQAKAA4AAAEzByMHIzchNwEzARMnAQMStx63L7Uv/eYUArq7/q9pA/5EAYKV7e12Ayr89QIJAf32AAAAAQAeAAAEVQXFABgAACkBNwE+ATc2JiMiBgcjNiQzMhYHDgEHASEDi/yTGgIml3MTF1Zmhq0btSkBGt6ttCMapp3+QQKTgwITkadbeY2ejdDx5LGC2pb+VwAAAAACAE7/7wO7BJ0AGwAoAAABMhYXBy4BIyIGDwEXPgEzMhYHDgEjIiY3EzYkEyIGDwEGFjMyNjc2JgLBO4c4OjJjRmu4GRQDNoxUpJojJf24prwnPyoBIitPgSgIHFpkXZcUF08EnRsYjxkVpYBhAjE0x7K5xfjEATfU5/20Qjoqip+IY3RwAAAAAQC9AAADwwSNAAwAAAEGAgMHIzcSADchNyEDpePUOCW1JTsBAsT9ux4C6AP57f7I/uW5uQEpAVbBlAAAAwAj/+8D3wSdABcAIwAvAAABDgEHHgEHDgEjIiY3PgE3LgE3PgEzMhYBNiYjIgYHBhYzMjYTNiYjIgYHBhYzMjYDwBR2W1hVEyP+tKzRIRSObk5JESHwr5m4/uESaF5epBAUb2hYmVsQWFBTixASYFlKhQNdYIEjKYxesKe1omiNJCeBVqaap/1UXWpxVmFnbgJpU11gUFZeZQAAAgBt/+8DyASdABsAKAAAJTI2PwEnDgEjIiY3NiQzMhYHAwYEIyImJzceARMyNj8BNiYjIgYHBhYBhmCqFxUDMXxFrawjJAECt6S2JkUo/vC8PIc5ODRlq02GJQsbWGFamhMXUIKXcGoCLy3PrrXS98T+qMXWGhiQGhUBpU03N4mell1wfwAAAAEAfwAAAcEDLAAFAAAhIxMHNyUBH6CEdxoBGwKUAYIXAAAAAAEAIgAAAswDLAAZAAApATcBPgE3NiYjIgYHIz4BMzIWBw4BDwEXIQJH/dsZAU1ONwkLJzk8VQqdFrOIeHoXEl6LsAEBVX4BCD5KLDc8QjRwhX90V2JwjwMAAAAAAQAl//UC3gMsACkAAAEzMjY3NiYjIgYHIz4BMzIWBw4BBx4BBw4BIyImNzMGFjMyNjc2JisBNwEeeztKCwo2QzFPCJ8VsHuAixYNUUA7NAwZuI1ymBefCjk+QF0KDTZGexEB1Ts1MTczKWxvd248WhgaXEN5cnV0NDc8MkU1VQABAO0AAALSBbAABQAAISMTBTclAa+1+f76GAHNBNwId2UAAAABACv/9QLoAyEAHgAAGwEhByEHPgE3NhYHDgEjIiY/AQYWMzI2NzYmIyIGB32LAeAa/qw8Hk4pfmwaG6igepsXnwxBQ0ZYDg41QTpKFAFaAceBvxIZAQKOgoSGbm8LNzNHREpMJB8AAAIAQP/1AscDLAAbACgAAAEyFhcHLgEjIgYPARc+ATMyFgcOASMiJj8BPgETIgYPAQYWMzI2NzYmAg4vZCQzI0cxSXoQDAMlYz11chgZvot9kBsrHdcpOVkXARI9Qj9hDA41AywTEHsQD2BQOwIgIox6f4iqh9aTnf5ZLygIVl1NPEdCAAEAjwAAAswDIQAMAAABDgEPASM3PgE3ITchArOgjiUZnhkotnL+fRkCJAKioca8f3/I92R/AAAAAwAu//UC9QMsABcAIwAvAAABDgEHHgEHDgEjIiY3PgE3LgE3PgEzMhYDNiYjIgYHBhYzMjYTNiYjIgYHBhYzMjYC4A1VQj8+DBi8iYKgFw1mTzk1DBezhHSO5AtGPz5rCwxMRjpjOgo6NjZYCQtAOjBUAlBBWRkdYT56cnxwRWEbHFg6cmpz/i46P0Q1Ojo+AZczMjUwMzc6AAAAAgBk//UC5gMsABsAKAAAJTI2PwEnDgEjIiY3PgEzMhYPAQ4BIyImJzceARMyNj8BNiYjIgYHBhYBQUBuDgwDIFEugYIZGMCKeo0aLxvMji1lKzIlSX01VxMFETxAPGAKDzVzVkU/Ah4ckHp8kayG64eTEhB7Eg0BGDMlF1VeVTlITAAAAgA+//UDGAMsAA0AGwAAAQ4BIyImPwE+ATMyFgcnNiYjIgYPAQYWMzI2NwLPHsWSh5UcLx3EkoeVGqAQQEtGZw8vEkBNRGcRARuTk56I65GVoIYBVFJYTuxXUVhQAAAAAQC5AowDKgMhAAMAAAEhNyEDDP2tHgJTAoyVAAMBKwRCAz0GcwAEABAAHAAAATMXByMHPgEzMhYHDgEjIiY3BhYzMjY3NiYjIgYCirIB8G6lD29HPksOD2pEQVFhCCYjHTkHCCIhIDwGcwO1101ZX0dNVVtHJy0wJCgwMwAAAAACAPUEcANuBdYABQAPAAABEzMHASMnPgE3Fw4BDwEjAgWpwAT+7VX8EnBeOzI4DhCkBIMBQhX+wlRchS86LmdHUAAAAAEALv/rBEsFxQArAAABPwIzMjY3NiYjIgYHIzYkMzIWBw4BBx4BBwYEIyImNzMGFjMyNjc2JisBAaYLAwifdIkYG1h2Z6EXtSQBDMK0vCcVh3RuSBUs/uzFstAmthpmeHClGx5ZhZ8CwzcPJ4d1iHuKcrja1sdlrS4utm/Y0ti+f4KKh5V2AAACACcAAAQcBbAACgAPAAABMwcjAyMTITcBMwEhEycHA1q8HrtEtET9nhUDIb/86wGfjAMgAeiV/q0BU2sD8vw4ArwBOgAAAAABAGH/6wRpBbAAHwAAGwEhByEDFz4BNzYSBwYEIyImNzMGFjMyNjc2JiMiBgfW7gKlIv30fwMwcEe+ny0w/v3ZpMUpqxtja2+pIB9cd2d2JQKRAx+p/mABIywCAv775O34ysqEe7Kcm6lJSQACAGT/6wQ5BcUAGwAoAAABMhYXBy4BIyIGDwEXPgEzMhIHBgAjIgIbARIAEyIGDwEGFjMyNjc2JgNKQ4YmQylcRYvqKAQDRKJbrKspMf7tx77QOTk8AVkgXJczFyxxfWutHx9eBcUjGpEaHvnKEgE0Of7y0PP+9gE0ARkBHwEtAUH9c1ZKctzK0JigsAAAAAAD/5H+SgRTBE4ALwA/AE0AAAEjHgEPAQYEIyImJw4BBwYWOwEyFgcGBCMiJjc+ATcuATc+ATcuAT8BPgEzMhYXIQEiJicOAQcGFjMyNjc2JiMDBhYzMjY/ATYmIyIGBwQ4lhUNCgUh/wC1JkIeGyUHCjU6oLKyHhz+yefC0BcUc1MWEQkPUDxFOhMFIf65Iz8gAWH84xQjEDNNCxBsgYjRDg9KdLESYmVamBEFEmFkXZgQA6orYTYWo8IKDBQ0JDEjkpOIzKJ0ZH8nFjsmTl8lMpVYFqm9Cgr79AIEF109TVd6RU9BAqRadn1TFl1zelYAAAAAAQDrAAAEiwWwAAwAAAEIAQMHIzcSABMhNyEEbf7Q/wBtLbYtbQFA8/0xHgOCBRr+xf4i/piZmQFhAhgBCJYAAAH/zv5MBFoESQAjAAABMhYfAQEzARMeATMyNjcHDgEjIiYnAwEjAQMuASMiBiM3PgEBRW9ZGjMBSrb+LGIPLCkMDBQhCyMNY10eQP6QwAIETQ08OQo0AhwWOQRJlHf7Aff9L/4hS00CA5wGCX+QAT39yQMTAYFUZAWSBQoAAAAAAwA1/+sEWAXFABcAIwAvAAABDgEHHgEHBgQjIiY3PgE3LgE3PgEzMhYBNiYjIgYHBhYzMjYTNiYjIgYHBhYzMjYEMhqVcGtoFy3+78y/0SkarIRdVhcq+72rv/7CGnF1brUYG298bbF7F19kX5kXGV5oXJoENX6mKC+3etvD1MqItiktp3HRv9D8mISRm3qIhZADIXeHi3N7fogAAgBA/+sEkQROABQAIgAAJScOASMiAj8BEgAzMhYXMzczCwEjAQYWMzI2PwE2JiMiBgcDHwNJw4GvoC8EOAEEwneRHQNMrNACrP4SJVSHZalCCApPbX22JeABeX0BIOoVARsBKYB55f3i/eQB9bXA2LAmrN7yvAAAAgBB090pTwWwABoAKwAAAQchFgABFhIPAQYAIyICPwE2JDc6ARcmAic3AwYWMzI2PwE2JicuASMiBgcERR3+Xg8mutnNiXMfBDP+39jHwS8EKQEO0ggPCgbXKheIJVyKfLshBBk6PhMnGIbDHwWwkh3O3DB8nv73nhj9/uwBKegYzPkZAQcBBUFy/EyyytmjGH2qNgYG0JkAAAAAAgBYAAAE+QWwAAkAEwAAMwEhIBIDBwIAIRMDMzI2PwE2JiNYASMBXgEu8jwxQv62/rZc56nX/i4xMZTqBbD+z/7S8/62/uwFGvt74+b2988AAAAAAgA3/+sD/QROACAAKwAAITQ2NycOASMiJjc+ATsBNzYmIyIGByM+ATMyFgcDDgEXJTI2PwEjIgYHBhYCoAMDAkGtXZqIIST/2bUcFFdsZYAPtRzi07WqI20NCQT+OVerLC67e5sTEDosNxsBQFSgobaWiWZRYUmOsp+w/ds9ZjeKUTnkbmJTSwAAAAACAFcAAATuBa8ADgAXAAABDgEHEwcjAyEDIwEhMhYBITI2NzYmIyEExh2efcQEy6v+sHu2ASMB2NLK/LgBJIGsGhtnkf7eBAuLuy/9fBICav2WBa/a/iqOgIiFAAEAWAAABVgFsAANAAABBwMjATMDFzcBMwkBIwIuu2a1ASO1kAO4Ai3Q/WkBtuMCq63+AgWw/TECrQIk/YP8zQABADYAAAQxBhgADQAAAQcDIwEzAxc3ATMJASMBvIVLtgE4tr4DdgF52f4bATXWAfB4/ogGGPxLAXIBZv45/Y0AAQBYAAAFVgWwAAsAAAEDIwEzAzMBMwkBIwGXirUBI7WCDAK74f0JAfrfArL9TgWw/XgCiP05/RcAAAAAAQA2AAAEFAYYAAwAAAEjAyMBMwMXATMJASMBVARktgE4trUDAbfr/eoBZt8B9P4MBhj8eAEBq/4O/bgAAgB9/+sEVwXFABsAKAAAJTI2PwEnDgEjIgI3NgAzMhILAQIAIyImJzceARMyNj8BNiYjIgYHBhYBpYDTKwYDOZNXvLowMQEktsvENkg+/svfRZA1ODRwx2KeMB4qX4liuyAjWoDZ1x0BREABCOz3ARD+5f7s/pz+zf7sHB+QHRkB32RNmNK1z6KsswACAD4AAARDBI0ACgATAAABAyMTITIWBw4BIyczMjY3NiYrAQFJVLfpAbKyuCAl98Pe/GiQEhRUcfsBpv5aBI3QpLPAlIJbZX0AAAD//wELBKUDTwWwAgYAnAAA//8AAAAAAAAAAAIGAAMAAP//AD4CIQIjArYCBgAPAAAAAgBeAAAFOwWwAA0AGwAAMxMjNzMTISAAAwcCACETIQMhMhI/ATYCKwEDIXaFnR6dgAF6AQABKDcnPv6s/u93/v9nAQ+x8ysoLL/HxWIBAQKalQKB/pT+7cX+zf7HApr9+wEB1sjeAQj+FQAAAgBeAAAFOwWwAA0AGwAAMxMjNzMTISAAAwcCACETIQMhMhI/ATYCKwEDIXaFnR6dgAF6AQABKDcnPv6s/u93/v9nAQ+x8ysoLL/HxWIBAQKalQKB/pT+7cX+zf7HApr9+wEB1sjeAQj+FQAAAQBTAAAENwYYABwAAAEjAxc+ATMyFgcDIxM2JiMiBgcDIxMjNzM3MwczAvz8OANApF6bjyuHtYgeT29JjzmetvehHqAktiT9BNL+6QJITdDZ/VsCp5Z3VEj86ATSlbGxAAAAAAEA7AAABQsFsAAPAAABIwMjEyM3MxMhNyEHIQMzA7HLpLWk0x7TQ/5aHgQBHv5aQ8sDNvzKAzaVAU+Wlv6xAAABAAf/7AKkBUEAHwAAAQMzByMHMwcjAwYWMzI2NwcOASMiJjcTIzczNyM3MxMCGjW/HL8m1R7VQBIkKxQzEwIcXSxjYyBAyB7IJo0cjTUFQf75jb6V/r1WOQgFgxEVj5wBQ5W+jQEH////1QAABH8HIgImACMAAAAHAEIBawFd////1QAABMMHHwImACMAAAAHAHMCFwFZ////1QAABI0HRgImACMAAAAHAJoBBgFd////1QAABNQHUQImACMAAAAHAKABJQFg////1QAABMwHDAImACMAAAAHAGgBBwFc////1QAABH8HiAImACMAAAAHAJ4BkgGo////1QAABMYHnwImACMAAAAHAdQBiQEs//8AYv5EBPgFxQAmACUAAAAHAHcBt//3//8AWAAABPIHIgImACcAAAAHAEIBNwFd//8AWAAABPIHHwImACcAAAAHAHMB4wFZ//8AWAAABPIHRgImACcAAAAHAJoA0gFd//8AWAAABPIHDAImACcAAAAHAGgA0wFc//8AYgAAAkQHIgImACsAAAAHAEL//AFd//8AYgAAA1MHHwImACsAAAAHAHMApwFZ//8AYgAAAx4HRgImACsAAAAHAJr/lwFd//8AYgAAA10HDAImACsAAAAHAGj/mAFc//8AWAAABXoHUQImADAAAAAHAKABTgFg//8AXv/rBTYHNwAmADEAAAAHAEIBjAFy//8AXv/rBTYHNAAmADEAAAAHAHMCOAFu//8AXv/rBTYHWwAmADEAAAAHAJoBJwFy//8AXv/rBTYHZgAmADEAAAAHAKABRgF1//8AXv/rBTYHIQAmADEAAAAHAGgBKAFx//8AZ//rBVcHIgImADcAAAAHAEIBdwFd//8AZ//rBVcHHwImADcAAAAHAHMCIwFZ//8AZ//rBVcHRgImADcAAAAHAJoBEgFd//8AZ//rBVcHDAImADcAAAAHAGgBEwFc//8A7gAABVMHHQImADsAAAAHAHMB6QFX//8AOv/sA/cF4AImAEMAAAAHAEIAswAb//8AOv/sBAsF3QImAEMAAAAHAHMBXwAX//8AOv/sA/cGBAImAEMAAAAGAJpOGwAA//8AOv/sBBwGDwImAEMAAAAGAKBtHgAA//8AOv/sBBQFygImAEMAAAAGAGhPGgAA//8AOv/sA/cGRgImAEMAAAAHAJ4A2gBm//8AOv/sBA4GXgImAEMAAAAHAdQA0f/r//8AR/5EA/sETgImAEUAAAAHAHcBOf/3//8AR//sA+sF4QImAEcAAAAHAEIAkQAc//8AR//sA+sF3gImAEcAAAAHAHMBPQAY//8AR//sA+sGBQImAEcAAAAGAJosHAAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAAd0FywImAIoAAAAGAEKVBgAA//8APgAAAuwFyAImAIoAAAAGAHNAAgAA//8APgAAArcF7wImAIoAAAAHAJr/MAAG//8APgAAAvYFtQImAIoAAAAHAGj/MQAF//8ANQAABDIGDwImAFAAAAAHAKAAgwAe//8ARv/sBBwF4AImAFEAAAAHAEIApwAb//8ARv/sBBwF3QImAFEAAAAHAHMBUwAX//8ARv/sBBwGBAImAFEAAAAGAJpCGwAA//8ARv/sBBwGDwImAFEAAAAGAKBhHgAA//8ARv/sBBwFygImAFEAAAAGAGhDGgAA//8AWv/sBDsFywImAFcAAAAHAEIAxgAG//8AWv/sBDsFyAImAFcAAAAHAHMBcgAC//8AWv/sBDsF7wImAFcAAAAGAJphBgAA//8AWv/sBDsFtQImAFcAAAAGAGhiBQAA////vP5LBCoFyAImAFsAAAAHAHMBNQAC////vP5LBCoFtQImAFsAAAAGAGglBQAA////1QAABN4G+gImACMAAAAHAG4BJgFK//8AOv/sBCYFuAImAEMAAAAGAG5uCAAA////1QAABLAHTAImACMAAAAHAJwBYQGc//8AOv/sA/gGCgImAEMAAAAHAJwAqQBaAAL/1f5QBH8FsAAaAB4AAAEzEyMOAQcGFjMyNjcHDgEjIiY3PgE3AyEDIwEhAycDBJvgJVdiCQYbKBkwFwcgTDJPWA8LY180/c7SuAHbAc1cAwWw+lA+ZDwlJRELeBMZY1pJfTYBe/58AhkCoAEAAAACADr+UAP3BE4ANAA/AAAhNDY3Jw4BIyImNzYkOwE3NiYjIgYHIzYkMzIWBwMOARcjDgEHBhYzMjY3Bw4BIyImNz4BNyUyNj8BIyIGBwYWAqAEBQNCrl2WiR4iAQHQvhYVV2dYjg61GwEAtqS1ImgNCQQTV2IJBhsoGTAXByBMMk9YDwtbWP7wV60vKMNrpBARQTM+HwFIXayWqKJuaWlkRoW7u6/99j1mNz5kPCUlEQt4ExljWkZ5NItgRMl7U1BPAAD//wBi/+sE+Ac0ACYAJQAAAAcAcwIhAW7//wBH/+wD+wXdAiYARQAAAAcAcwEqABf//wBi/+sE+AdbACYAJQAAAAcAmgEQAXL//wBH/+wD+wYEAiYARQAAAAYAmhkbAAD//wBi/+sE+AciACYAJQAAAAcAnQHRAXL//wBH/+wD+wXLAiYARQAAAAcAnQDaABv//wBi/+sE+AdcACYAJQAAAAcAmwEmAXP//wBH/+wD+wYFAiYARQAAAAYAmy8cAAD//wBYAAAFHQdHACYAJgAAAAcAmwDgAV7//wBE/+sFwwYYACYARgAAAAcBkQSgBSz//wBYAAAE8gb6AiYAJwAAAAcAbgDyAUr//wBH/+wEBAW5AiYARwAAAAYAbkwJAAD//wBYAAAE8gdMAiYAJwAAAAcAnAEtAZz//wBH/+wD6wYLAiYARwAAAAcAnACHAFv//wBYAAAE8gcNAiYAJwAAAAcAnQGTAV3//wBH/+wD6wXMAiYARwAAAAcAnQDtABwAAQBY/lAE8gWwACAAAAEhAyEHIw4BBwYWMzI2NwcOASMiJjc+ATcnIQEhByEDIQQC/ZJpAsweNFdiCQYbKBkwFwcgTDJPWA8LWlQB/V0BIwN3Hv0+YAJuAqb975U+ZDwlJRELeBMZY1pGeDIDBbCW/iIAAAACAEf+ZAPrBE4AKQAxAAAlDgEHDgEHBhYzMjY3Bw4BIyImNz4BNycmAj8BNgAzMhIPASEGFjMyNjcDIgYHITc2JgNbIVM0U14IBhsoGTAXByBMMk9YDwg/OQHIyicHJwEptMerIxP9bBhrh1qXPMdaoCkB2gQTWXEeMxI7YjslJRELeBMZY1o5YywDAwEp7y31ASX++915rcU5MgLMqoYafZkA//8AWAAABPIHRwImACcAAAAHAJsA6AFe//8AR//sA+sGBgImAEcAAAAGAJtCHQAA//8AaP/rBQ8HWwImACkAAAAHAJoBBgFy//8AN/5LBD0GBAImAEkAAAAGAJpWGwAA//8AaP/rBQ8HYQImACkAAAAHAJwBYQGx//8AN/5LBD0GCgImAEkAAAAHAJwAsQBa//8AaP/rBQ8HIgImACkAAAAHAJ0BxwFy//8AN/5LBD0FywImAEkAAAAHAJ0BFwAb//8AaP3lBQ8FxQImACkAAAAHAZEBRv62//8AN/5LBD0GbQImAEkAAAAHAaUBKABW//8AWAAABXkHRgImACoAAAAHAJoBKQFd//8ANQAABBkHRQImAEoAAAAHAJoAYwFc//8AYgAAA2UHUQImACsAAAAHAKD/tgFg//8APgAAAv4F+gImAIoAAAAHAKD/TwAJ//8AYgAAA28G+gImACsAAAAHAG7/twFK//8APgAAAwgFpAImAIoAAAAHAG7/UP/0//8AYgAAA0EHTAImACsAAAAHAJz/8gGc//8APgAAAtoF9QImAIoAAAAGAJyLRQAA////mv5YAjoFsAImACsAAAAGAJ/jCAAA////e/5QAjEGGAImAEsAAAAGAJ/EAAAA//8AYgAAAogHDQImACsAAAAHAJ0AVwFd//8AYv/rBnYFsAAmACsAAAAHACwCJAAA//8ARP5LBCEGGAAmAEsAAAAHAEwB6AAA//8AD//rBSwHOQImACwAAAAHAJoBpQFQ////G/5LAsQF3AImAJgAAAAHAJr/Pf/z//8APv31BTUFsAAmAC0AAAAHAZEBIP7G//8ANv33BCgGGAImAE0AAAAHAZEAxP7I//8AWAAAA60G4AImAC4AAAAHAHMAjwEa//8ARAAAA0MHXAImAE4AAAAHAHMAlwGW//8AWP33A60FsAImAC4AAAAHAZEBGv7I////qP33AjEGGAImAE4AAAAHAZH/wv7I//8AWAAAA9UFsQImAC4AAAAHAZECsgTF//8ARAAAA3IGGAAmAE4AAAAHAZECTwUs//8AWAAAA60FsAImAC4AAAAHAJ0BNP3F//8ARAAAAukGGAAmAE4AAAAHAJ0AuP23//8AWAAABXoHHwImADAAAAAHAHMCQAFZ//8ANQAABCEF3QImAFAAAAAHAHMBdQAX//8AWP33BXoFsAImADAAAAAHAZEBd/7I//8ANf33BBgETgImAFAAAAAHAZEA7P7I//8AWAAABXoHRwImADAAAAAHAJsBRQFe//8ANQAABCMGBQImAFAAAAAGAJt6HAAA//8ANQAABBgGGAImAFAAAAAHAZEAiwUs//8AXv/rBTYHDwAmADEAAAAHAG4BRwFf//8ARv/sBBwFuAImAFEAAAAGAG5iCAAA//8AXv/rBTYHYQAmADEAAAAHAJwBggGx//8ARv/sBBwGCgImAFEAAAAHAJwAnQBa//8AXv/rBZkHYAAmADEAAAAHAKEBqgFy//8ARv/sBLQGCQImAFEAAAAHAKEAxQAb//8AVwAABQIHHwImADQAAAAHAHMB3AFZ//8ANQAAA4cF3QImAFQAAAAHAHMA2wAX//8AV/33BQIFrwImADQAAAAHAZEBE/7I////pv33Aw0ETgImAFQAAAAHAZH/wP7I//8AVwAABQIHRwImADQAAAAHAJsA4QFe//8ANQAAA4oGBQImAFQAAAAGAJvhHAAA//8AQ//rBMAHNAAmADUAAAAHAHMB1gFu//8AO//sA9MF3QImAFUAAAAHAHMBJwAX//8AQ//rBMAHWwAmADUAAAAHAJoAxQFy//8AO//sA8kGBAImAFUAAAAGAJoWGwAA//8AQ/5EBMAFxQAmADUAAAAHAHcBbP/3//8AO/5FA8kETgImAFUAAAAHAHcBN//4//8AQ/3jBMAFxQAmADUAAAAHAZEBBP60//8AO/3kA8kETgImAFUAAAAHAZEAz/61//8AQ//rBMAHXAAmADUAAAAHAJsA2wFz//8AO//sA9UGBQImAFUAAAAGAJssHAAA//8A7P31BQsFsAImADYAAAAHAZEBDP7G//8ARf3tAqQFQQImAFYAAAAHAZEAX/6+//8A7P5VBQsFsAImADYAAAAHAHcBdAAI//8Ab/5NAqQFQQImAFYAAAAHAHcAxwAA//8A7AAABQsHRgImADYAAAAHAJsA2gFd//8Ab//sA7QGMQAmAFYAAAAHAZECkQVF//8AZ//rBVcHUQImADcAAAAHAKABMQFg//8AWv/sBDsF+gImAFcAAAAHAKAAgAAJ//8AZ//rBVcG+gImADcAAAAHAG4BMgFK//8AWv/sBDsFpAImAFcAAAAHAG4Agf/0//8AZ//rBVcHTAImADcAAAAHAJwBbQGc//8AWv/sBDsF9QImAFcAAAAHAJwAvABF//8AZ//rBVcHiAImADcAAAAHAJ4BngGo//8AWv/sBDsGMQImAFcAAAAHAJ4A7QBR//8AZ//rBYQHSwImADcAAAAHAKEBlQFd//8AWv/sBNMF9AImAFcAAAAHAKEA5AAGAAEAZ/5uBVcFsAAoAAABAw4BBw4BBwYWMzI2NwcOASMiJjc+ATcnIgYjIiY3EzMDBhYzMjY3EwVXxSW4jE5cCQYbKBkwFwcgTDJPWA8IOTQBBBYG1u0wxbbFJYqWkeIixQWw/CW22jI3YzklJRELeBMZY1o2XioDAfzuA9v8JbafragD2wAAAAABAFr+UAQ7BDoAJwAAIQ4BBwYWMzI2NwcOASMiJjc+AT8BJw4BIyImNxMzAwYWMzI2NxMzAwNiV2IJBhsoGTAXByBMMk9YDwpeWRIDP6JlnZMwf7Z/JkNpX5Mzm7XYPmQ8JSURC3gTGWNaRno1jwFSVOHwAn39gb53W1MDBvvG//8A7AAABuwHRgImADkAAAAHAJoBnAFd//8AsgAABfoF7wImAFkAAAAHAJoBFQAG//8A7gAABVMHRAImADsAAAAHAJoA2AFb////vP5LBCoF7wImAFsAAAAGAJokBgAA//8A7gAABVMHCgImADsAAAAHAGgA2QFa//8AIAAABH0HHwAmADwAAAAHAHMB0QFZ//8ACAAAA+oFyAImAFwAAAAHAHMBPgAC//8AIAAABFsHDQAmADwAAAAHAJ0BgQFd//8ACAAAA98FtgImAFwAAAAHAJ0A7gAG//8AIAAABH8HRwAmADwAAAAHAJsA1gFe//8ACAAAA+wF8AImAFwAAAAGAJtDBwAA////ngAAB3UHHwImAH8AAAAHAHMDAQFZ//8ABP/rBmAF3gImAIQAAAAHAHMCegAY//8AJv+jBWsHXQImAIEAAAAHAHMCMQGX//8ATP95BDgF3AImAIcAAAAHAHMBUAAW//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8AvQAABCUEjQImAbgAAAAGAdMo9wAA////1AAAA+gF3wImAaYAAAAHAEIA2QAa////1AAABDEF3AImAaYAAAAHAHMBhQAW////1AAAA/sGAwImAaYAAAAGAJp0GgAA////1AAABEIGDgImAaYAAAAHAKAAkwAd////1AAABDoFyQImAaYAAAAGAGh1GQAA////1AAAA+gGRQImAaYAAAAHAJ4BAABl////1AAABDQGXQImAaYAAAAHAdQA9//q//8ATf5HBEIEnQImAagAAAAHAHcBU//6//8APgAABB0F3wImAaoAAAAHAEIAqgAa//8APgAABB0F3AImAaoAAAAHAHMBVgAW//8APgAABB0GAwImAaoAAAAGAJpFGgAA//8APgAABB0FyQImAaoAAAAGAGhGGQAA//8APgAAAd8F3wImAa4AAAAGAEKXGgAA//8APgAAAu4F3AImAa4AAAAGAHNCFgAA//8APgAAArkGAwImAa4AAAAHAJr/MgAa//8APgAAAvgFyQImAa4AAAAHAGj/MwAZ//8APgAABL4GDgImAbMAAAAHAKAAsQAd//8ATf/vBG8F7wImAbQAAAAHAEIA3QAq//8ATf/vBG8F7AImAbQAAAAHAHMBiQAm//8ATf/vBG8GEwImAbQAAAAGAJp4KgAA//8ATf/vBG8GHgImAbQAAAAHAKAAlwAt//8ATf/vBG8F2QImAbQAAAAGAGh5KQAA//8AWP/vBLwF4AImAbkAAAAHAEIA9QAb//8AWP/vBLwF3QImAbkAAAAHAHMBoQAX//8AWP/vBLwGBAImAbkAAAAHAJoAkAAb//8AWP/vBLwFygImAbkAAAAHAGgAkQAa//8AtQAABIEF2wImAb0AAAAHAHMBWAAV////1AAABEwFtwImAaYAAAAHAG4AlAAH////1AAABB4GCQImAaYAAAAHAJwAzwBZAAL/1P5QA+gEjQAaAB4AAAETIw4BBwYWMzI2NwcOASMiJjc+ATcnIQMjAQMhAycDHcs3V2IJBhsoGTAXByBMMk9YDwtqZin+J5i8Ap74AXBRAwSN+3M+ZDwlJRELeBMZY1pMgDj//vAEjf0XAfsBAP//AE3/7wRCBewCJgGoAAAABwBzAXoAJv//AE3/7wRCBhMCJgGoAAAABgCaaSoAAP//AE3/7wRCBdoCJgGoAAAABwCdASoAKv//AE3/7wRCBhQCJgGoAAAABgCbfysAAP//AD4AAARJBgQCJgGpAAAABgCbLhsAAP//AD4AAAQdBbcCJgGqAAAABgBuZQcAAP//AD4AAAQdBgkCJgGqAAAABwCcAKAAWf//AD4AAAQdBcoCJgGqAAAABwCdAQYAGgABAD7+UAQdBI0AIAAAASEDIQcjDgEHBhYzMjY3Bw4BIyImNz4BNychEyEHIQMhA0/+EE0CPx1CV2IJBhsoGTAXByBMMk9YDwtaVAH99ukC9h79wUMB7wIV/n6TPmQ8JSURC3gTGWNaRngyAwSNlP6wAAAA//8APgAABB0GBAImAaoAAAAGAJtbGwAA//8ASv/vBF4GEwImAawAAAAGAJpzKgAA//8ASv/vBF4GGQImAawAAAAHAJwAzgBp//8ASv/vBF4F2gImAawAAAAHAJ0BNAAq//8ASv3nBF4EnQImAawAAAAHAZEA9/64//8APgAABKQGAwImAa0AAAAGAJp7GgAA//8APgAAAwAGDgImAa4AAAAHAKD/UQAd//8APgAAAwoFtwImAa4AAAAHAG7/UgAH//8APgAAAtwGCQImAa4AAAAGAJyNWQAA////c/5QAd0EjQImAa4AAAAGAJ+8AAAA//8APgAAAiQFygImAa4AAAAGAJ3zGgAA//8AC//vBKYF+QImAa8AAAAHAJoBHwAQ//8APv3zBHEEjQImAbAAAAAHAZEArP7E//8APgAAAvsFwQImAbEAAAAGAHND+wAA//8APv31AvsEjQImAbEAAAAHAZEAjP7G//8APgAAAxAEjgImAbEAAAAHAZEB7QOi//8APgAAAvsEjQImAbEAAAAHAJ0Aif0m//8APgAABL4F3AImAbMAAAAHAHMBowAW//8APv31BL4EjQImAbMAAAAHAZEBGv7G//8APgAABL4GBAImAbMAAAAHAJsAqAAb//8ATf/vBG8FxwImAbQAAAAHAG4AmAAX//8ATf/vBG8GGQImAbQAAAAHAJwA0wBp//8ATf/vBOoGGAImAbQAAAAHAKEA+wAq//8APgAABD8F3AImAbYAAAAHAHMBOQAW//8APv31BD8EjQImAbYAAAAHAZEAsP7G//8APgAABD8GBAImAbYAAAAGAJs+GwAA//8AI//vBDIF7AImAbcAAAAHAHMBZAAm//8AI//vBDIGEwImAbcAAAAGAJpTKgAA//8AI/5HBDIEnQImAbcAAAAHAHcBPf/6//8AI//vBDIGFAImAbcAAAAGAJtpKwAA//8Al/31BCUEjQImAbgAAAAHAZEAsf7G//8AvQAABCUGAwImAbgAAAAGAJs/GgAA//8AWP/vBLwGDwImAbkAAAAHAKAArwAe//8AWP/vBLwFuAImAbkAAAAHAG4AsAAI//8AWP/vBLwGCgImAbkAAAAHAJwA6wBa//8AWP/vBLwGRgImAbkAAAAHAJ4BHABm//8AWP/vBQIGCQImAbkAAAAHAKEBEwAbAAEAWP57BLwEjQAoAAABAw4BBw4BBwYWMzI2NwcOASMiJjc+ATcnIgYjIiY3EzMDBhYzMjY3EwS8mR2QcFBbCAYbKBkwFwcgTDJPWA8HNC4BBQ0LxeEombSZHH+Ee78amQSN/QGLszA5YDolJRELeBMZY1ozWigDAdzDAv/9AYiEjn4C/wAAAP//ANQAAAXyBgMCJgG7AAAABwCaAQwAGv//ALUAAASBBgICJgG9AAAABgCaRxkAAP//ALUAAASBBcgCJgG9AAAABgBoSBgAAP////kAAAQWBdwCJgG+AAAABwBzATcAFv////kAAAQWBcoCJgG+AAAABwCdAOcAGv////kAAAQWBgQCJgG+AAAABgCbPBsAAP//ACP/7whdBJ0AJgG3AAAABwG3BCsAAP///9UAAAR/BngCJgAjAAAABgCpPAAAAP//AJsAAAVWBnoAJgAnZAAABwCp/zcAAv//ALwAAAXdBnoAJgAqZAAABwCp/2MAAv//AMYAAAKeBnkAJgArZAAABwCp/2cAAf//AHL/6wVKBngAJgAxFAAABgCpmgAAAP//AEkAAAW3BngAJgA7ZAAABwCp/uUAAP//ADEAAAUcBngAJgC1FAAABgCphAAAAP//AGz/6wMkBj8CJgC+AAAABwCq/yv/t////9UAAAR/BbACBgAjAAD//wBYAAAE0AWwAgYAJAAA//8AWAAABPIFsAIGACcAAP//ACAAAARbBbAABgA8AAD//wBYAAAFeQWwAgYAKgAA//8AYgAAAjoFsAIGACsAAP//AD4AAAU1BbAABgAtAAD//wBYAAAGswWwAgYALwAA//8AWAAABXoFsAIGADAAAP//AF7/6wU2BcUABgAxAAD//wBYAAAFGAWwAgYAMgAA//8A7AAABQsFsAIGADYAAP//AO4AAAVTBbACBgA7AAD////8AAAFHQWwAgYAOgAA//8AYgAAA10HDAImACsAAAAHAGj/mAFc//8A7gAABVMHCgImADsAAAAHAGgA2QFa//8AQP/rBDQGegImALYAAAAHAKkBWwAC//8AKf/tA/0GeQImALoAAAAHAKkBFgAB//8ANf5hBBIGegImALwAAAAHAKkBMAAC//8Afv/rAtQGZgImAL4AAAAGAKkq7gAA//8AWv/rBAUGPwImAMYAAAAGAKoMtwAA//8APgAABGAEOgIGAIsAAP//AEb/7AQcBE4CBgBRAAD////r/mAEMwQ6AgYAdAAA//8AlwAABAoEOgIGAFgAAP///+kAAAPxBDoCBgBaAAD//wB+/+sDJQW1AiYAvgAAAAcAaP9gAAX//wBa/+sEBgW1AiYAxgAAAAYAaEEFAAD//wBG/+wEHAZ6AiYAUQAAAAcAqQEOAAL//wBa/+sD9AZmAiYAxgAAAAcAqQEM/+7//wBd/+sF7AZjAiYAyQAAAAcAqQIj/+v//wBYAAAE8gcMAiYAJwAAAAcAaADTAVz//wBXAAAEuQcfAiYArAAAAAcAcwHhAVkAAQBD/+sEwAXFACUAAAE2JicuATc2JDMyFgcjNiYjIgYHBhYXHgEHBgQjIiQ3MwYWMzI2A34YcLPWsSgjAQXD2OkqthyJkmmdERpmu9uwJyX+9czZ/uMwtSO4mmqrAUx3hEJIy8axsuzWi6F0V393R0/Hw7ir1uurgXIA//8AYgAAAjoFsAIGACsAAP//AGIAAANdBwwCJgArAAAABwBo/5gBXP//AA//6wRSBbACBgAsAAD//wA+AAAFNQWwAAYALQAA//8APgAABTUGxwAmAC0AAAAHAHMBxQEB//8Ao//rBUUHTAImANkAAAAHAJwBPgGc////1QAABH8FsAIGACMAAP//AFgAAATQBbACBgAkAAD//wBXAAAEuQWwAgYArAAA//8AWAAABPIFsAIGACcAAP//AFgAAAV6B0wCJgDXAAAABwCcAY4BnP//AFgAAAazBbACBgAvAAD//wBYAAAFeQWwAgYAKgAA//8AXv/rBTYFxQAGADEAAP//AFgAAAV7BbACBgCxAAD//wBYAAAFGAWwAgYAMgAA//8AYv/rBPgFxQAGACUAAP//AOwAAAULBbACBgA2AAD////8AAAFHQWwAgYAOgAA//8AOv/sA/cETgIGAEMAAP//AEf/7APrBE4CBgBHAAD//wBAAAAERwX1AiYA6wAAAAcAnADIAEX//wBG/+wEHAROAgYAUQAA////4v5gBCYETgIGAFIAAAABAEf/7AP7BE4AGwAAJTI2NzMGBCMiAj8BNgAzMhYHIzYmIyIGDwEGFgHxWqAPrBn+8qbXuyUHJwER4a7BGqwQameNpBoHHFWBeFyazwEy6ir1ASfeqmyG4qQqsdYAAP///7z+SwQqBDoCBgBbAAD////pAAAD8QQ6AgYAWgAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAA5UFyAImAOcAAAAHAHMA5wAC//8AO//sA8kETgIGAFUAAP//AEQAAAIxBhgCBgBLAAD//wA+AAAC9gW1AiYAigAAAAcAaP8xAAX///8d/ksCOQYYAgYATAAA//8AQAAABGEFxwImAOwAAAAHAHMBTQAB////vP5LBCoF9QImAFsAAAAGAJx/RQAA//8A7AAABuwHIgImADkAAAAHAEICAQFd//8AsgAABfoFywImAFkAAAAHAEIBegAG//8A7AAABuwHHwImADkAAAAHAHMCrQFZ//8AsgAABfoFyAImAFkAAAAHAHMCJgAC//8A7AAABuwHDAImADkAAAAHAGgBnQFc//8AsgAABfoFtQImAFkAAAAHAGgBFgAF//8A7gAABVMHIAImADsAAAAHAEIBPQFb////vP5LBCoFywImAFsAAAAHAEIAiQAG//8AxgQjAagGGAIGAAkAAP//AMUEFAK9BhgCBgAEAAD//wBPAAAEJQWwACYEHAAAAAcEHAH9AAD//wCKAAAEzAYtACYASAAAAAcATgKbAAD///8b/ksC/AXdAiYAmAAAAAcAm/9T//T//wCxA+cCIAYYAgYBZgAA//8AWAAABrMHHwImAC8AAAAHAHMC3wFZ//8ANQAABlsF3QImAE8AAAAHAHMCrwAX////1f6HBH8FsAImACMAAAAHAKIBOQAA//8AOv6HA/cETgImAEMAAAAHAKIAkgAA//8AAf/rBTYGogAmADEAAAAHAdX/DADM//8AigAABrIGLQAmAEgAAAAHAZICmwAA//8AigAAB2cGLQAmAEgAAAAnAEgCmwAAAAcATgU2AAD//wBYAAAE8gciAiYAJwAAAAcAQgE3AV3//wBYAAAFegciAiYA1wAAAAcAQgGYAV3//wBH/+wD6wXhAiYARwAAAAcAQgCRABz//wBAAAAERwXLAiYA6wAAAAcAQgDSAAb//wCKAAAFkgWwAgYAtAAA//8AQ/4pBS4EOgIGAMgAAP//AOgAAAVcB0cCJgEUAAAABwCnBDEBWf//ALMAAARLBh8CJgEVAAAABwCnA5gAMf//AEb+SwhuBE4AJgBRAAAABwBbBEQAAP//AF7+SwllBcUAJgAxAAAABwBbBTsAAP//ACD+UQSwBcUCJgDWAAAABwGcAXD/uP//AB7+UgPEBEwCJgDqAAAABwGcASD/uf//AGL+UQT4BcUAJgAlAAAABwGcAb//uP//AEf+UQP7BE4CJgBFAAAABwGcAUH/uP//AO4AAAVTBbACBgA7AAD//wCz/mAEJgQ6AgYAuAAA//8AYgAAAjoFsAIGACsAAP///8oAAAddB0wCJgDVAAAABwCcAkwBnP///8MAAAYBBfUCJgDpAAAABwCcAaQARf//AGIAAAI6BbACBgArAAD////VAAAEsAdMAiYAIwAAAAcAnAFhAZz//wA6/+wD+AYKAiYAQwAAAAcAnACpAFr////VAAAEzAcMAiYAIwAAAAcAaAEHAVz//wA6/+wEFAXKAiYAQwAAAAYAaE8aAAD///+eAAAHdQWwAgYAfwAA//8ABP/rBmAETgIGAIQAAP//AFgAAATyB0wCJgAnAAAABwCcAS0BnP//AEf/7APrBgsCJgBHAAAABwCcAIcAW///AEb/6wVABt4CJgFBAAAABwBoAMsBLv//ADz/7AP2BE8CBgCZAAD//wA8/+wEFgXLAiYAmQAAAAYAaFEbAAD////KAAAHXQcMAiYA1QAAAAcAaAHyAVz////DAAAGAQW1AiYA6QAAAAcAaAFKAAX//wAg/+sEsAchAiYA1gAAAAcAaADCAXH//wAe/+0D8gXJAiYA6gAAAAYAaC0ZAAD//wBYAAAFegb6AiYA1wAAAAcAbgFTAUr//wBAAAAERwWkAiYA6wAAAAcAbgCN//T//wBYAAAFegcMAiYA1wAAAAcAaAE0AVz//wBAAAAERwW1AiYA6wAAAAYAaG4FAAD//wBe/+sFNgchACYAMQAAAAcAaAEoAXH//wBG/+wEHAXKAiYAUQAAAAYAaEMaAAD//wBd/+sFNwXFAgYBEgAA//8ARv/sBBwETgIGARMAAP//AF3/6wU3BwcCJgESAAAABwBoAScBV///AEb/7AQeBeYCJgETAAAABgBoWTYAAP//AIf/7AU0ByICJgDiAAAABwBoARQBcv//ADP/6wQNBcoCJgD6AAAABgBoSBoAAP//AKP/6wVFBvoCJgDZAAAABwBuAQMBSv///7z+SwQqBaQCJgBbAAAABgBuRPQAAP//AKP/6wVFBwwCJgDZAAAABwBoAOQBXP///7z+SwQqBbUCJgBbAAAABgBoJQUAAP//AKP/6wVVB0sCJgDZAAAABwChAWYBXf///7z+SwSWBfQCJgBbAAAABwChAKcABv//ANEAAAVIBwwCJgDcAAAABwBoAQsBXP//AH8AAAQGBbUCJgD0AAAABgBoLwUAAP//AFcAAAaiBwwAJgDhDwAAJwArBGgAAAAHAGgByAFc//8AQAAABasFtQAmAPkAAAAnAIoD3gAAAAcAaAEjAAX////8/ksFHQWwAiYAOgAAAAcBmgN+AAD////p/ksD8QQ6AiYAWgAAAAcBmgKWAAD//wBE/+sElQYYAgYARgAA////3v5LBXEFsAImANgAAAAHAZoD/AAA////1f5LBEkEOgImAO0AAAAHAZoDHwAA////1f6xBH8FsAImACMAAAAHAKgErAAA//8AOv6xA/cETgImAEMAAAAHAKgEBQAA////1QAABH8HxgImACMAAAAHAKYE5QFT//8AOv/sA/cGhAImAEMAAAAHAKYELQAR////1QAABg4HqAImACMAAAAHAaMA8AEW//8AOv/sBVYGZwImAEMAAAAGAaM41QAA////1QAABLcHpQImACMAAAAHAaIA+gEl//8AOv/sA/8GZAImAEMAAAAGAaJC5AAA////1QAABZ4H2wImACMAAAAHAaEA9QEN//8AOv/sBOYGmgImAEMAAAAGAaE9zAAA////1QAABLYH5QImACMAAAAHAaAA9gET//8AOv/sA/4GpAImAEMAAAAGAaA+0gAA////1f6xBI0HRgImACMAAAAnAJoBBgFdAAcAqASsAAD//wA6/rED9wYEAiYAQwAAACYAmk4bAAcAqAQFAAAAAP///9UAAASqB90CJgAjAAAABwGfASkBVP//ADr/7AP3BpsCJgBDAAAABgGfcRIAAP///9UAAATOB+ACJgAjAAAABwGkAS8BZ///ADr/7AQWBp4CJgBDAAAABgGkdyUAAP///9UAAASVCEsCJgAjAAAABwGeASkBSf//ADr/7AP3BwkCJgBDAAAABgGecQcAAP///9UAAATMCB8CJgAjAAAABwGdASsBUf//ADr/7AQUBt0CJgBDAAAABgGdcw8AAP///9X+sQSwB0wCJgAjAAAAJwCcAWEBnAAHAKgErAAA//8AOv6xA/gGCgImAEMAAAAnAJwAqQBaAAcAqAQFAAD//wBY/rsE8gWwAiYAJwAAAAcAqAR3AAr//wBH/rED6wROAiYARwAAAAcAqARRAAD//wBYAAAE8gfGAiYAJwAAAAcApgSxAVP//wBH/+wD6waFAiYARwAAAAcApgQLABL//wBYAAAE8gdRAiYAJwAAAAcAoADxAWD//wBH/+wD+gYQAiYARwAAAAYAoEsfAAD//wBYAAAF2geoAiYAJwAAAAcBowC8ARb//wBH/+wFNAZoAiYARwAAAAYBoxbWAAD//wBYAAAE8gelAiYAJwAAAAcBogDGASX//wBH/+wD6wZlAiYARwAAAAYBoiDlAAD//wBYAAAFagfbAiYAJwAAAAcBoQDBAQ3//wBH/+wExAabAiYARwAAAAYBoRvNAAD//wBYAAAE8gflAiYAJwAAAAcBoADCARP//wBH/+wD6walAiYARwAAAAYBoBzTAAD//wBY/rsE8gdGAiYAJwAAACcAmgDSAV0ABwCoBHcACv//AEf+sQPrBgUCJgBHAAAAJgCaLBwABwCoBFEAAAAA//8AYgAAAwoHxgImACsAAAAHAKYDdQFT//8APgAAAqMGcAImAIoAAAAHAKYDDv/9//8AF/65AjoFsAImACsAAAAHAKgDOwAI////+v67AjEGGAImAEsAAAAHAKgDHgAK//8AXv6pBTYFxQAmADEAAAAHAKgEw//4//8ARv6oBBwETgImAFEAAAAHAKgEV//3//8AXv/rBTYH2wAmADEAAAAHAKYFBgFo//8ARv/sBBwGhAImAFEAAAAHAKYEIQAR//8AXv/rBi8HvQAmADEAAAAHAaMBEQEr//8ARv/sBUoGZwImAFEAAAAGAaMs1QAA//8AXv/rBTYHugAmADEAAAAHAaIBGwE6//8ARv/sBBwGZAImAFEAAAAGAaI25AAA//8AXv/rBb8H8AAmADEAAAAHAaEBFgEi//8ARv/sBNoGmgImAFEAAAAGAaExzAAA//8AXv/rBTYH+gAmADEAAAAHAaABFwEo//8ARv/sBBwGpAImAFEAAAAGAaAy0gAA//8AXv6pBTYHWwAmADEAAAAnAJoBJwFyAAcAqATD//j//wBG/qgEHAYEAiYAUQAAACYAmkIbAAcAqARX//cAAP//AFn/6wYlBw8CJgCUAAAABwBzAiQBSf//AEb/7AUJBd0CJgCVAAAABwBzAXgAF///AFn/6wYlBxICJgCUAAAABwBCAXgBTf//AEb/7AUJBeACJgCVAAAABwBCAMwAG///AFn/6wYlB7YCJgCUAAAABwCmBPIBQ///AEb/7AUJBoQCJgCVAAAABwCmBEYAEf//AFn/6wYlB0ECJgCUAAAABwCgATIBUP//AEb/7AUJBg8CJgCVAAAABwCgAIYAHv//AFn+sQYlBjYCJgCUAAAABwCoBLEAAP//AEb+qAUJBLACJgCVAAAABwCoBEj/9///AGf+qgVXBbACJgA3AAAABwCoBLL/+f//AFr+sQQ7BDoCJgBXAAAABwCoBAsAAP//AGf/6wVXB8YCJgA3AAAABwCmBPEBU///AFr/7AQ7BnACJgBXAAAABwCmBED//f//AGf/6walBx8CJgCWAAAABwBzAiIBWf//AFr/7AVXBcgCJgCXAAAABwBzAXIAAv//AGf/6walByICJgCWAAAABwBCAXYBXf//AFr/7AVXBcsCJgCXAAAABwBCAMYABv//AGf/6walB8YCJgCWAAAABwCmBPABU///AFr/7AVXBnACJgCXAAAABwCmBED//f//AGf/6walB1ECJgCWAAAABwCgATABYP//AFr/7AVXBfoCJgCXAAAABwCgAIAACf//AGf+qQalBg0CJgCWAAAABwCoBLH/+P//AFr+sQVXBJECJgCXAAAABwCoBAsAAP//AO7+uwVTBbACJgA7AAAABwCoBH0ACv///7z+FAQqBDoCJgBbAAAABwCoBKj/Y///AO4AAAVTB8QCJgA7AAAABwCmBLcBUf///7z+SwQqBnACJgBbAAAABwCmBAP//f//AO4AAAVTB08CJgA7AAAABwCgAPcBXv///7z+SwQqBfoCJgBbAAAABgCgQwkAAAACAET/6wUmBhgAGgAoAAABIwMjNycOASMiAj8BGgEzMhYXEyM3MzczBzMBBhYzMjY3Ey4BIyIGBwUItPedCQM8kFiwri8EOO7BWIcrN+oe6SS1JLX8AyRhiUx1M2Uba1R8nyYE0vsuaAI/QAE06hUBHAEUSEUBEZWxsfyis9FTTwH6RE/ZvQD//wAT/u4FJgYYACYARgAAACcB0wH8AkYABgBBfYMAAP//AD7+mQU1BbAAJgAtAAAABwGcA/QAAP//AED+mQRhBDoCJgDsAAAABwGcAxMAAP//AFj+mQV5BbACJgAqAAAABwGcBBwAAP//AED+mQRGBDoCJgDvAAAABwGcAzQAAP//AOz+mQULBbACJgA2AAAABwGcAggAAP//AJD+mQP3BDoCJgDxAAAABwGcAZgAAP////z+mQUdBbACJgA6AAAABwGcA5YAAP///+n+mQPxBDoCJgBaAAAABwGcAq4AAP//ANH+mQVIBbACJgDcAAAABwGcA+sAAP//AH/+mQQGBDsCJgD0AAAABwGcAvMAAP//ANH+mQVIBbACJgDcAAAABwGcAt8AAP//AH/+mQQGBDsCJgD0AAAABwGcAeYAAP//AFf+mQS5BbACJgCsAAAABwGcANMAAP//AD7+mQOVBDoCJgDnAAAABwGcAJsAAP///8r+mQddBbACJgDVAAAABwGcBeEAAP///8P+mQYBBDoCJgDpAAAABwGcBKoAAP//AK7+VAXuBcMCJgE7AAAABwGcAsn/u///ACX+WARRBE4CJgE8AAAABwGcAdL/v///ADUAAAQZBhgCBgBKAAAAAgBIAAAEkgWwABIAGwAAASMHITIWBwYEIyETIzczNzMHMwEDITI2NzYmIwKv1TEBTs/MJyv+7eH9/NzIHsgptinV/r5vAU6DsBkZZ48EUPjmwtTcBFCVy8v93v3So3qAkQAAAAIASAAABJIFsAASABsAAAEjByEyFgcGBCMhEyM3MzczBzMBAyEyNjc2JiMCr9UxAU7PzCcr/u3h/fzcyB7IKbYp1f6+bwFOg7AZGWePBFD45sLU3ARQlcvL/d790qN6gJEAAAABADQAAAS5BbAADQAAASMDIxMjNzMTIQchAzMCh/KItoirHqt9Az8e/Xdf8gKs/VQCrJUCb5b+JwAAAAABAAoAAAOVBDoADQAAASEDIxMjNzMTIQchAyECXf72X7Zfkx6TWwJ/Hv43PQEKAd/+IQHflQHGl/7RAAABAFIAAAVJBbAAFAAAASMDIxMjNzM3MwczByMDMwEzCQEjAhaJhLfnrB6sHrce8B7wRJQCI+b9awGEzwKV/WsEhZWWlpX+rwJ8/Sj9KAAAAAEASgAABDwGGAAUAAABIwMjEyM3MzczBzMHIwMzATMJASMB3HhktvPGHsYntifXHtdxdgFu1v5DARbWAfb+CgTBlcLClf3MAa3+E/2zAAD//wBY/ooFegdMAiYA1wAAACcAnAGOAZwABwAOBCz/vv//AED+igRHBfUCJgDrAAAAJwCcAMgARQAHAA4DRP++//8AWP6KBXkFsAImACoAAAAHAA4EK/++//8AQP6KBEYEOgImAO8AAAAHAA4DQ/++//8AWP6KBrMFsAImAC8AAAAHAA4FZf++//8AQP6KBX8EOgImAO4AAAAHAA4EfP++////3v6KBXEFsAImANgAAAAHAA4EI/++////1f6KBEkEOgImAO0AAAAHAA4DRv++AAEA7gAABVMFsAAQAAAJATMBMwcjBwMjEycjNzMDMwKNAffP/dpyHr0JZ7RqAdsekO7QAs0C4/z2lQ39/AIQAZUDCgAAAQBt/mAEJgQ6ABEAAAUjAyMTIzczAzMTFzM3ATMBMwLA0lG2Ucses4u5VwEDJAGCuf3/uQz+bAGUlQOx/QBTUwMA/E8AAAAAAf/8AAAFHQWwABEAAAEjASMDASMBIzczATMTATMBMwO0nQEm1+v+XdwB/Jcehf7r2d8Bm9v+HpcCnv1iAkj9uAKelQJ9/cMCPf2DAAH/6QAAA/EEOgARAAABIxMjAwEjASM3MwMzEwEzATMDDpva0J7+3dMBdaMek8zRlQEY0/6klwHh/h8Bnv5iAeGVAcT+bQGT/jwAAP//ACn/7QP9BEwCBgC6AAD////8AAAE+QWwAiYAKAAAAAcB0/9D/n7//wEAAowGCQMhAEYBhrUAZmZAAAACAE8AAAIoBbAAAwAHAAABIxMzASM3MwFltsO2/t22KLYB3gPS+lDIAAAAAAAAAAAAAAAAAAAcAFQAmgD6AVgBagGQAbYB2AH0AgoCGAIkAjICaAJ6AqgC7AMQA0YDjAOsA/oEQARMBFgEdASKBKYE2gVOBWwFqAXcBggGJAY+BnYGkAaeBrwG2gbsBxQHLgdkB4wHyggICEYIXAiACJoIxgjmCP4JFgksCToJUAloCXYJhAnKCgIKMgpqCqAKyAsQCzgLTAtyC5ALngvcDAIMNAxsDKQMxA0ADSoNUA1oDZQNsg3cDfQOLA46DnAOnA6wDugPIA9wD54PtBAgEDQQkhDYEOQQ+hFoEXYRoBHCEfASMBI+EmoShBKSErASwhLyEv4TEBMiEzQTaBOUE7QUChQ0FHYU2hUsFUgVmBXWFgQWEBYuFk4WahaaFtIXFhdwF44XyBgMGEwYfBiuGM4ZBBkaGTAZTBlaGYQZqBnKGeIaChoYGiYaMBpQGmYadBqCGpwapBq4GtAbDhskG0AbVht2G7ob6hwyHHocxBzgHTAdcB2sHdIeEB4wHmYeuB7kHxwfVh+OH7Qf3iAgIFggniDgIRwhaCGaIdQiECJGInIikCK+IuwjGiNcI3gjnCPEJAokJiRMJGwkkiS+JO4lFiVQJZIlviYIJkImVCaAJqwm8CcMJyonTCdsJ4YnmiewKBIoLihSKG4okCi6KOgpDilCKX4prCn0KiYqYCqUKsYq4isaK1IrhCvILAIsJCxKLHosrCzuLSYtdC24Lg4uZC6iLtgu/C8kL2ovrDAYMIIwyDEOMTwxaDGSMaYxxjHYMeoylDLuMyAzUDOQM6gzwDPqNBQ0PjRmNIg0qjTKNOg1FjVCNaA1+jYcNjw2ajaWNrw3AjdCN243mjfIN/Q4MDhiOJY4pji2ON45GjlyObw6BjpOOpg61jsSO0o7gDu8O/Y8JjxWPJ48njyePJ48njyePJ48njyePJ48njyePJ48qDyyPL481DzsPQI9Dj0aPSY9TD1oPZA9rD24Pcg+UD5mPn4+jD6uPtY/Fj9gP6RABEBGQJJAvkD2QQhBGkEsQT5BfEGSQbJBwEHcQjhCaELAQuhC+EMIQyxDOkNQQ2ZDlEOURIpE1EUIRSpFYEWARZ5FwkXQRgZGOkZcRopGtEbQRuxHDkceRzxHdEekR8pH5kf+SDJITEhYSHZIlEimSMhI4kkUSU5JiknISd5KAkoaSkJKYEp4SpBKwkrUSwBLQEtiS5BL1EvyTEBMhEyWTMRNBE0WTUpNjE2oTfZOOE5oTnZOqE7KTw5PMk9oT7BQKlBKUIpQ2FEUUWJRjFHSUgBSIFJAUl5SfFLCUuhS8FL4UwBTNlNsU55TvlPyU/5UClQWVCJULlQ6VEZUUlReVGpUdlSCVI5UmlSmVLJUvlTKVNZU4lTuVPpVBlUSVR5VKlU2VUJVTlVaVWZVclV+VYpVllWiVa5VulXGVdJV3lXqVfZWAlYOVhpWJlYyVj5WSlZWVmJWblZ6VoZWklaeVqpWtlbuV1BXXFdoV3RXgFeMV5hXpFewV7xXyFfUV+BX7Ff4WARYEFhKWJxYqFi0WMBYzFjYWORY8Fj8WQhZFFkgWSxZOFlEWVBZXFloWXRZgFmMWZhZpFmwWbxZyFnUWeBZ7Fn4WgRaEFocWihaNFpAWkxaWFpkWnBafFqIWpRaoFqsWrhaxFrQWtxa6Fr0WwBbDFsYWyRbMFs8W0hbVFtgW2xbeFuEW5BbnFuoW7RbwFvMW9hb5FvwW/xcCFwUXCBcLFw4XERcUFxcXKBc4FzsXPhdBF0QXRxdKF00XUBdTF1YXWRdcF18XYhdlF2gXaxduF3EXdBd3F3oXfReAF4MXhheJF4wXjxeSF5UXmBebF54XoRekF6cXqhetF7AXsxe2F7kXvBe/F8IXxRfTF9YX2RfcF98X4hflF+gX6xf5l/yX/5gCmAWYCJgLmA6YEZgUmBeYGpgdmCCYI5gmmCmYLJgvmDKYNZg4mDuYPphBmESYR5hKmE2YUJhTmFaYWZhcmF+YYphlmGiYeZh8mH+YgpiFmIiYi5iOmJGYlJiXmJqYnZigmKOYppiomKqYrJiumLCYspi0mLaYuJi6mLyYvpjAmMKYxZjImMuYzpjRmNSY15jZmNuY3ZjfmOGY5JjnmOqY7ZjwmPOY9pkGGQgZCxkNGQ8ZEhkVGRcZGRkbGR0ZIBkiGSQZJhkoGSoZLBkuGTAZMhk0GTcZORk7GUcZSRlLGU4ZURlTGVUZWBlaGV0ZYBljGWYZaRlsGW8Zchl1GXgZehl8GX8ZghmFGYcZihmNGZAZkxmWGZkZnRmgGaMZphmpGasZrRmwGbMZthm5GbwZvxnCGcUZxxnJGcsZzhnRGdMZ1hnZGdwZ3xnhGeMZ5hnpGewZ7hnxGfQZ9xn6Gf0aABoDGgYaCRoMGg8aERoTGhYaGRocGh8aIholGigaKxouGjEaNBo3GjsaPxpCGkUaRxpKGk0aUBpTGlYaWRpcGl8aYhplGmgaaxpuGnEadRp5GnwafxqCGoUaiBqLGo4akRqVGpkanBqfGqIapRqoGqsarhqxGrQatxq6Gr0awBrDGscayxrOGtEa1BrXGtoa3RrgGuMa5hrpGuwa7xryGvUa+Br7Gv8bAxsGGwkbDBsPGxIbFRsYGxsbHhshGyQbJxsqGy0bMBszGzYbORs8Gz8bQhtFG0gbSxtOG1EbVBtXG1obXRtuG3IbdRt4G3sbfhuBG4QbhxuKG40bkBuTG5YbmRucG58bohulG6gbqhu2m8MbypvSG9wb5hvqG+4b8Rv0G/cb+hv9HAAcCJwRnBscJJwmnCmcLBwsHCwcMYAAAAbAUoAAQAAAAAAAAAfAAAAAQAAAAAAAQAGAB8AAQAAAAAAAgAGACUAAQAAAAAAAwASACsAAQAAAAAABAANAD0AAQAAAAAABQAWAEoAAQAAAAAABgANAGAAAQAAAAAABwAgAG0AAQAAAAAACQAGAI0AAQAAAAAACwAKAJMAAQAAAAAADAATAJ0AAQAAAAAADQAuALAAAQAAAAAADgAqAN4AAQAAAAAAEgANAQgAAwABBAkAAAA+ARUAAwABBAkAAQAMAVMAAwABBAkAAgAMAV8AAwABBAkAAwAkAWsAAwABBAkABAAaAY8AAwABBAkABQAsAakAAwABBAkABgAaAdUAAwABBAkABwBAAe8AAwABBAkACQAMAi8AAwABBAkACwAUAjsAAwABBAkADAAmAk8AAwABBAkADQBcAnUAAwABBAkADgBUAtFGb250IGRhdGEgY29weXJpZ2h0IEdvb2dsZSAyMDEzUm9ib3RvSXRhbGljR29vZ2xlOlJvYm90bzoyMDEzUm9ib3RvIEl0YWxpY1ZlcnNpb24gMS4yMDAzMTA7IDIwMTNSb2JvdG8tSXRhbGljUm9ib3RvIGlzIGEgdHJhZGVtYXJrIG9mIEdvb2dsZS5Hb29nbGVHb29nbGUuY29tQ2hyaXN0aWFuIFJvYmVydHNvbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBSb2JvdG8gSXRhbGljAEYAbwBuAHQAIABkAGEAdABhACAAYwBvAHAAeQByAGkAZwBoAHQAIABHAG8AbwBnAGwAZQAgADIAMAAxADMAUgBvAGIAbwB0AG8ASQB0AGEAbABpAGMARwBvAG8AZwBsAGUAOgBSAG8AYgBvAHQAbwA6ADIAMAAxADMAUgBvAGIAbwB0AG8AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMQAuADIAMAAwADMAMQAwADsAIAAyADAAMQAzAFIAbwBiAG8AdABvAC0ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAuAEcAbwBvAGcAbABlAEcAbwBvAGcAbABlAC4AYwBvAG0AQwBoAHIAaQBzAHQAaQBhAG4AIABSAG8AYgBlAHIAdABzAG8AbgBMAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEEAcABhAGMAaABlACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADIALgAwAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAAACAAAAAAAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAABB0AAAECAAIAAwAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKAQMAgwCTAPIA8wCNAJcAiAEEAN4A8QCeAKoA9QD0APYAogCQAPAAkQDtAIkAoADqALgAoQDuAQUA1wEGAOIA4wEHAQgAsACxAQkApgEKAQsBDAENAQ4BDwDYAOEA2wDcAN0A4ADZAN8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgCfASMBJAElASYBJwEoASkBKgErASwBLQCbAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0AsgCzAc4AtgC3AMQBzwC0ALUAxQCCAMIAhwHQAKsAxgC+AL8AvAHRAdIB0wHUAdUB1gHXAdgAjAHZAdoB2wHcAd0AmACaAJkA7wClAJIAnACnAI8AlACVALkB3gHfAeAAwAHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwCsAjgCOQDpAjoCOwI8AK0AyQDHAK4AYgBjAj0AZADLAGUAyADKAM8AzADNAM4AZgDTANAA0QCvAGcA1gDUANUAaADrAGoAaQBrAG0AbABuAj4AbwBxAHAAcgBzAHUAdAB2AHcAeAB6AHkAewB9AHwAfwB+AIAAgQDsALoCPwJAAkECQgJDAkQA/QD+AkUCRgJHAkgA/wEAAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgD4APkCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigD7APwCiwKMAOQA5QKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiALsCowKkAqUCpgDmAOcCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YDlwOYA5kDmgObA5wDnQOeA58DoAOhA6IDowOkA6UDpgOnA6gDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7oDuwO8A70DvgO/A8ADwQPCA8MDxAPFA8YDxwPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QPaA9sD3APdA94D3wPgA+ED4gPjA+QD5QPmA+cD6APpA+oD6wPsA+0D7gPvA/AD8QPyA/MD9AP1A/YD9wP4A/kD+gP7A/wD/QP+A/8EAAQBBAIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcBB0EHgQfBCAEIQD3BCIEIwQkAAQETlVMTAZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkxRUYwB3VuaTFFRjEHdW5pMUVGNAd1bmkxRUY1B3VuaTFFRjYHdW5pMUVGNwd1bmkxRUY4B3VuaTFFRjkGZGNyb2F0B3VuaTIwQUIHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEFDB3VuaTA0QUQHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjYHdW5pMDRCNwd1bmkwNENCB3VuaTA0Q0MHdW5pMDRGNgd1bmkwNEY3B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNEJFB3VuaTA0QkYHdW5pMDRCQgd1bmkwNDhDB3VuaTA0NjIHdW5pMDQ5Mgd1bmkwNDkzB3VuaTA0OUUHdW5pMDQ5Rgd1bmkwNDhBB3VuaTA0OEIHdW5pMDRDOQd1bmkwNENBB3VuaTA0Q0QHdW5pMDRDRQd1bmkwNEM1B3VuaTA0QzYHdW5pMDRCMAd1bmkwNEIxB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTExB3VuaTIwMTUHdW5pMDAwMgd1bmkwMDA5AAAAAAEAAAAMAAAAAAAAAAIACADKAMoAAQEeASQAAQFWAWEAAQF2AXYAAQF7AXwAAQF+AX4AAQGTAZUAAQHVAdUAAQAAAAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAA//8AAQAAAAFrZXJuAAgAAAABAAAAAQAEAAIAAAAEAA5NaFUGc1wAAXrYAAQAAAGtA2QDagNwA3YD6APyBAQEKgRABEoEbASOBJQE4gUQBTIFVAV6BaAFpgaMBpIGuAbeB0AH0gf0CBIILAgyCEAIRghMCFIIeAiSCKAIvgjECOII/AkCCcQKNgpcCs4K1AreCuQK6grwCw4LHAtGC0wLYgt8C4ILnAuiC6gL3gvkC+4MHAxCDGgMigysDM4M/A1eDXQNlg24DgIOJA5GDngOng7EDs4O2A7yDwQPDg8oDy4PRA+SD6wPxg/cD/4QIBA6EEAQYhCEEKYRGBE+EWQRghGcEl4SaBK2EwQTDhMUExoTIBMmEywTUhNcE2ITdBOeE7QTxhPYE/4UBBQaFCQUNhRcFHIUeBR+FJgUnhTEFOoV0BZCFrQXJheYGAoYfBjuGQAZFhksGUIZWBl6GZwZvhngGgIaKBpOGnQamhrAGsYazBrSGtgbahuIG6YbxBviHAAcHhw8HEIcSBxOHFQcWhyAHKYczBzyHRgdNh1UHcYd5B5WHnQe5h8EHxYfKB86H0wfch+IH44fpB+qH8Afxh/cH+If+B/+ICAgJiBIIGogjCCuINAg1iEkIVIhgCGuIdwh/iIEIiYiLCJOIlQiWiKAIqYizCLyIxgjPiNMI1ojaCROJTQmGiYgJiYmLCYyJjgmPiZkJvYnFCemJ8gn6igMKH4olCi2KNgo/imQKgIqDCoiKkQqZiqIKtYq+CsaK0ArZixMLN4tQC1iLfQt+i4gLj4uZC56LzwvXi+AL4Yv1DAiMGww3jDoMaoxwDHiMgQyKjJQMmIzSDOqM8gzzjP0NA40LDQyNDg0QjRgNIY0rDTSNWQ1gjWINY41lDW2Nbw2LjZMNnI2iDaONrQ20jbkN3Y3lDe2OBg4HjhAOLI40DlCOWA5djl8OYI5iDnqOfA6Fjo8OmI6fDrGOuQ7LjtMO5Y7tDwWPBw8jjysPR49PD2uPcw+Pj5cPs4+7D9eP3w/7kAMQH5AnEEOQSxBnkG8Qi5CTEK+QtxC8kL4Qw5DFEMqQzBDRkNMQ2JDaEN+Q4RDmkOgQ7ZDvEPeRABEJkRMRHJEmES+RORFCkUwRVZFfEWiRchF7kYURjpGQEZGRthG9keIR6ZIOEhWSKRIxkmsSg5KFErWSuBLQktIS05LdEw2TIRMpkzIAAEAWQALAAEAWQALAAEAEf8gABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAIBDAALAVP/5gAEAAv/5gA///QAX//vATz/7QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AACAFT/5gGn/8AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAaf/6wATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt/+YBtf/nAbb/5wALAFn/pAGnABMBqf/zAa3/8QG1//IBtv/xAbn/OwG6/9oBu/9UAbz/kQG+/z8ACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAVgAOAH//nwC//94Awv/lANT/qADo/8oBRv/jAaf/xgHf//UAAQGnAA4AOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQABAaf/6wAJAAsAFAA/ABEAVP/iAF8AEwGn/7QBqf/ZAa3/2QG1/9kBtv/ZAAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAgAWf/lALP/ywDI/+QBpwANAan/7QGt/+sBtf/sAbb/7AAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAEA8f/1AAMACwAUAD8AEgBfABMAAQDx/8AAAQDx/8AAAQDx/8AACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAMASAAPAFYAIABZABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQEX//EABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AABAPH/9QAwAFT/bQBZ/4wAa/2/AHr+fQB//rwAhP8rAIf/SwCz/2EAuv8PAL7+6ADB/x8Awv7lAMX/RgDH/u0AyP79AMn+2QDU/1IA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPr/EwD8/wcBAv8OAQT/EQEX/zwBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/1kB3/+PABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAAQC/AA0AAgCz/8IAvwAQAAEAv//iAAEAwv/yAAEAvwAOAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAMAxf/tAPH/wAHc/+wACgC6/+YAvf/rAL7/6QDA//AAwf/nAMX/4wDH/84AyP/UAMn/2wHf/+4AAQDx/8AABQC9/+wAvwAPAMH/6gDF/8QAx//nAAYASP/pAL3/7gC/ABAAwf/sAMX/IAHc/9oAAQC/AA8ABgDF/+oA6P/uAPH/qwEv/+wBVP/sAdz/6AABAPH/1QABAMUACwANAEgADADBAAsAxQAMAaf/vwGp/+4Brf/sAbX/7QG2/+wBuP/1AbkADgG7AA0BvgANAd//7QABAPH/2AACAPH/qgHc/+EACwDh/9QA8f/JAQT/5QEb/+MBL//EATj/4QFJ/9QBSv/1AUv/5wFT/9IBVP/JAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QAIAOH/yQDx/98BBP/tARv/6wEv/98BO//pAUr/9QFU/+AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA4f/mAPH/0AEv/84BOP/oAUn/5wFL/+0BU//mAVT/0AALANQAFADh/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADADUABMA4f/mAOL/9ADoABIA8f/nAS//5wE4/+UBOf/oAUn/5gFL/+YBU//mAVT/5wAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAGAOj/7gDx/+4BBP/0ARv/8QEv/+8BVP/vAAQA8f/0AQT/9QEv//UBVP/1AAIA6P/JARf/7gAGAOgAFADx/+0A9//iAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAan/6wGt/+kBtf/rAbb/6wATAEgADQDC/6sAw//AAMf/1QDo/6oBF//iARsADAFKAAsBTAALAaf/vwGp/+4Brf/sAbX/7QG2/+wBuP/1AbkADgG7AA0BvgANAd//sAAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAYA6AAUAPH/8AD8AAwBL//wATn/5gFU//AABQDoADoA8f/jAS//4gE5/+MBVP/jAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAIAPH/ugEE/88BG//bAS//UAE5/50BSv/wAUz/8gFU/0wABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AABAOj/7wAIAPH/ugEE/88BG//bAS//UAE5/50BSv/wAUz/8gFU/0wACADx/7oBBP/PARv/2wEv/1ABOf+dAUr/8AFM//IBVP9MAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AAwAFT/bQBZ/4wAa/2/AHr+fQB//rwAhP8rAIf/SwCz/2EAuv8PAL7+6ADB/x8Awv7lAMX/RgDH/u0AyP79AMn+2QDU/1IA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPr/EwD8/wcBAv8OAQT/EQEX/zwBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/1kB3/+PAAIA6P/JARf/7gATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt/+YBtf/nAbb/5wATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt/+YBtf/nAbb/5wACAOj/yQEX/+4AAQBZAAsAAQBZAAsAAQBZAAsAAQBZAAsAAQBZAAsACQGp//IBrf/yAbX/8gG2//IBuf/AAbr/7AG7/8cBvP/YAb7/vwACAbv/7gG8//UAAQGn/9IABAGp/+sBrf/pAbX/6wG2/+sACgGnABEBqf/wAa3/7gG1/+8Btv/wAbn/uwG6/+wBu/+3Abz/1QG+/7QABQGn//MBuf/uAbv/8QG9/+wBvv/qAAQBuf/pAbv/6wG8//EBvv/lAAQBuf/yAbv/8QG8//UBvv/uAAkBp/+/Aan/7gGt/+wBtf/tAbb/7AG4//UBuQAOAbsADQG+AA0AAQGn/+8ABQGn/8cBqf/yAa3/8AG1//ABtv/wAAIBp//cAbkADgAEAan/7QGt/+sBtf/rAbb/6wAJAaf/wAGp/+0Brf/rAbX/6wG2/+sBuQAPAbsAEAG8AA0BvgAQAAUBpwAMAan/8AGt//ABtf/wAbb/8AABAdf/agABAdf/FQAGAEgACwC6//IAx//xAMn/7wHcAA8B3//uAAEBp//VAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAQAC//mAD//9ABf/+8BPP/tAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QABAaf/6wABAaf/6wABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/AAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAEAAv/5gA///QAX//vATz/7QAEAAv/5gA///QAX//vATz/7QAEAAv/5gA///QAX//vATz/7QAEAAv/5gA///QAX//vATz/7QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQGn/+sAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cACwBZ/6QBpwATAan/8wGt//EBtf/yAbb/8QG5/zsBuv/aAbv/VAG8/5EBvv8/AAsAWf+kAacAEwGp//MBrf/xAbX/8gG2//EBuf87Abr/2gG7/1QBvP+RAb7/PwALAFn/pAGnABMBqf/zAa3/8QG1//IBtv/xAbn/OwG6/9oBu/9UAbz/kQG+/z8ACwBZ/6QBpwATAan/8wGt//EBtf/yAbb/8QG5/zsBuv/aAbv/VAG8/5EBvv8/AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/wAAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AAAEA8f/AAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAMASAAPAFYAIABZABEAAwBIAA8AVgAgAFkAEQADAEgADwBWACAAWQARADkAVP+1AFn/xwBr/rgAev8oAH//TQCE/44Ah/+hALP/rgC6/34Avv9nAMH/hwDC/2UAxf+eAMf/agDI/3MAyf9eANT/pQDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+v+AAPz/eQEC/30BBP9/ARf/mAEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAaf/rwGp/7kBrf+5AbX/uQG2/7kBuP+8Abn/8QG8//EBvf/tAdz/qQHf/8kAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JAAEBp//rAAEBp//rAAEBp//rAAEBp//rAAEBp//rAAEBp//rAAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAgAWf/lALP/ywDI/+QBpwANAan/7QGt/+sBtf/sAbb/7AAIAFn/5QCz/8sAyP/kAacADQGp/+0Brf/rAbX/7AG2/+wACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAUASP/uAFn/6gG7//ABvP/tAb7/8AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAACAQwACwFT/+YABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgAWf/lALP/ywDI/+QBpwANAan/7QGt/+sBtf/sAbb/7AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAFYADgB//58Av//eAML/5QDU/6gA6P/KAUb/4wGn/8YB3//1ADkAVP+1AFn/xwBr/rgAev8oAH//TQCE/44Ah/+hALP/rgC6/34Avv9nAMH/hwDC/2UAxf+eAMf/agDI/3MAyf9eANT/pQDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+v+AAPz/eQEC/30BBP9/ARf/mAEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAaf/rwGp/7kBrf+5AbX/uQG2/7kBuP+8Abn/8QG8//EBvf/tAdz/qQHf/8kAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAEA8f/AAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAFAEj/7gBZ/+oBu//wAbz/7QG+//AAMABU/20AWf+MAGv9vwB6/n0Af/68AIT/KwCH/0sAs/9hALr/DwC+/ugAwf8fAML+5QDF/0YAx/7tAMj+/QDJ/tkA1P9SAOEABQDl/70A5v9JAOj+/gDq/xMA8f9oAPj/DgD6/xMA/P8HAQL/DgEE/xEBF/88ARv/rAEn/xUBKf88AS3/DgEv/2oBM/9JATn/DAE7/z8BPP7xAUH/wAFG/u8BSv8xAUz/XwFQ/woBUwAFAVT/MAFV/9UB3P9ZAd//jwAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEBp//rABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAAgEMAAsBU//mADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48ABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAFYADgB//58Av//eAML/5QDU/6gA6P/KAUb/4wGn/8YB3//1AAQAC//mAD//9ABf/+8BPP/tADkAVP+1AFn/xwBr/rgAev8oAH//TQCE/44Ah/+hALP/rgC6/34Avv9nAMH/hwDC/2UAxf+eAMf/agDI/3MAyf9eANT/pQDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+v+AAPz/eQEC/30BBP9/ARf/mAEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAaf/rwGp/7kBrf+5AbX/uQG2/7kBuP+8Abn/8QG8//EBvf/tAdz/qQHf/8kAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wABAPH/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQEX//EAAQDx//UAAgDo/8kBF//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAJAAsADwA/AAwAVP/rAF8ADgGn/8sBqf/pAa3/5wG1/+cBtv/nACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQBZAAsAAQBZAAsAAQBZAAsACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAEA8f/1AAEA8f/1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt/+YBtf/nAbb/5wAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48AAgDo/8kBF//uABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EAAQDx/8AACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QAwAFT/bQBZ/4wAa/2/AHr+fQB//rwAhP8rAIf/SwCz/2EAuv8PAL7+6ADB/x8Awv7lAMX/RgDH/u0AyP79AMn+2QDU/1IA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPr/EwD8/wcBAv8OAQT/EQEX/zwBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/1kB3/+PABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gABMLIABAAAAAoAHgB0A6YEJASOBNAF7gbkB0IHXAAVADgAFAA5ABIAOwAWARQAFAILABYCkgASApQAFgKWABYC/QAWAwwAFgMPABYDRQASA0cAEgNJABIDSwAWA2AAFANoABYD6gAWA+wAFgPuABYEEwAWAMwADv8WABD/FgAj/1YALP74ADYAFABD/94ARf/rAEb/6wBH/+sASf/rAFH/6wBT/+sAV//qAFj/6ABb/+gAkf/rAJX/6wCX/+oArf9WAK//VgC2/+sAuP/oAMP/6wDE/+sAxv/qAM0AFADRABQA8v/rAP7/6wEI/1YBE//rARX/6AEZ/+sBHf/rAS4AFAE1/+sBNgAUAUf/6wFI/+sBUv/rAWf/FgFr/xYBb/8WAXD/FgHx/1YB8v9WAfP/VgH0/1YB9f9WAfb/VgH3/1YCDP/eAg3/3gIO/94CD//eAhD/3gIR/94CEv/eAhP/6wIU/+sCFf/rAhb/6wIX/+sCHf/rAh7/6wIf/+sCIP/rAiH/6wIi/+oCI//qAiT/6gIl/+oCJv/oAif/6AIo/1YCKf/eAir/VgIr/94CLP9WAi3/3gIv/+sCMf/rAjP/6wI1/+sCN//rAjn/6wI7/+sCPf/rAj//6wJB/+sCQ//rAkX/6wJH/+sCSf/rAlf++AJr/+sCbf/rAm//6wKAABQCggAUAoQAFAKH/+oCif/qAov/6gKN/+oCj//qApH/6gKV/+gC+P9WAwD/VgMQ/+sDFP/qAxb/6wMY/+gDG//qAxz/6wMd/+oDJP74Ayj/VgMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/1YDVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9WA2//3gNw/1YDcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/1YDmf/eA5r/VgOb/94DnP9WA53/3gOe/1YDn//eA6D/VgOh/94Dov9WA6P/3gOk/1YDpf/eA6b/VgOn/94DqP9WA6n/3gOq/1YDq//eA6z/VgOt/94Drv9WA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/9UAOP/kADn/7AA7/90Azf/VANH/1QEU/+QBLv/VATb/1QIL/90CgP/VAoL/1QKE/9UCkv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//VA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/1QQT/90AGgA2/7AAOP/tADv/0ADN/7AA0f+wART/7QEu/7ABNv+wAgv/0AKA/7ACgv+wAoT/sAKU/9AClv/QAv3/0AMM/9ADD//QAzP/sANL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/7AEE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAEcABAAQAAkAEABF/+gARv/oAEf/6ABJ/+gAU//oAJH/6ACV/+gAtv/oAMP/6ADE/+gA8v/oAP7/6AEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlABABZgAQAWgAEAFpABABagAQAhP/6AIU/+gCFf/oAhb/6AIX/+gCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AMQ/+gDNv/oAzr/6AM9/+gDTQAQA04AEANSABADXP/oA2L/6ANn/+gDdf/oA3f/6AN4/+gDhP/oA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA9P/6APV/+gD1//oA9v/6AA9AEX/7ABG/+wAR//sAEn/7ABT/+wAkf/sAJX/7AC2/+wAw//sAMT/7ADy/+wA/v/sARn/7AEd/+wBNf/sAUf/7AFI/+wBUv/sAhP/7AIU/+wCFf/sAhb/7AIX/+wCL//sAjH/7AIz/+wCNf/sAjf/7AI5/+wCO//sAj3/7AI//+wCQf/sAkP/7AJF/+wCR//sAkn/7AMQ/+wDNv/sAzr/7AM9/+wDXP/sA2L/7ANn/+wDdf/sA3f/7AN4/+wDhP/sA5X/7AOx/+wDs//sA7X/7AO3/+wDuf/sA7v/7AO9/+wDv//sA9P/7APV/+wD1//sA9v/7AAXAFH/7AET/+wCHf/sAh7/7AIf/+wCIP/sAiH/7AJr/+wCbf/sAm//7AMW/+wDHP/sAzj/7AOC/+wDhv/sA8X/7APH/+wDyf/sA8v/7APN/+wDz//sA9H/7APZ/+wABgAO/4QAEP+EAWf/hAFr/4QBb/+EAXD/hAAQACz/7AA3/+wCB//sAgj/7AIJ/+wCCv/sAlf/7AKG/+wCiP/sAor/7AKM/+wCjv/sApD/7AMk/+wD3P/sA97/7AABKSwABAAAACIATgDEAaoCkANqBAQGnghkCTYKLAvyDCQMVgzUDroPMBACEhQSyhQwFOoVcBXOFpAXBhcYF0IYlBrSGvQcChyIHLIc3AAdAAT/8gAJ//IAWP/zAFv/8wC4//MBFf/zAWX/8gFm//IBaP/yAWn/8gFq//ICJv/zAif/8wKV//MDGP/zAzv/8wNE//MDTP/zA03/8gNO//IDUv/yA2H/8wNp//MDiv/zA4z/8wOO//MD6//zA+3/8wPv//MAOQAl//MAKf/zADH/8wAz//MAgf/zAJD/8wCU//MArv/zAM7/8wED//MBEv/zARb/8wEY//MBGv/zARz/8wE0//MBUf/zAfj/8wIC//MCA//zAgT/8wIF//MCBv/zAi7/8wIw//MCMv/zAjT/8wJC//MCRP/zAkb/8wJI//MCav/zAmz/8wJu//MCn//zAvz/8wMJ//MDL//zAzL/8wNX//MDY//zA2b/8wOB//MDg//zA4X/8wPE//MDxv/zA8j/8wPK//MDzP/zA87/8wPQ//MD0v/zA9T/8wPW//MD2P/zA9r/8wA5ACX/5gAp/+YAMf/mADP/5gCB/+YAkP/mAJT/5gCu/+YAzv/mAQP/5gES/+YBFv/mARj/5gEa/+YBHP/mATT/5gFR/+YB+P/mAgL/5gID/+YCBP/mAgX/5gIG/+YCLv/mAjD/5gIy/+YCNP/mAkL/5gJE/+YCRv/mAkj/5gJq/+YCbP/mAm7/5gKf/+YC/P/mAwn/5gMv/+YDMv/mA1f/5gNj/+YDZv/mA4H/5gOD/+YDhf/mA8T/5gPG/+YDyP/mA8r/5gPM/+YDzv/mA9D/5gPS/+YD1P/mA9b/5gPY/+YD2v/mADYAI//kADr/0gA7/9MArf/kAK//5ADV/9IBCP/kAfH/5AHy/+QB8//kAfT/5AH1/+QB9v/kAff/5AIL/9MCKP/kAir/5AIs/+QClP/TApb/0wL4/+QC/f/TAwD/5AMM/9MDDf/SAw//0wMo/+QDNP/SA0v/0wNV/+QDaP/TA2v/0gNu/+QDcP/kA3n/0gOT/9IDmP/kA5r/5AOc/+QDnv/kA6D/5AOi/+QDpP/kA6b/5AOo/+QDqv/kA6z/5AOu/+QD6v/TA+z/0wPu/9MD+P/SBAD/0gQT/9MAJgAO/x4AEP8eACP/zQCt/80Ar//NAQj/zQFn/x4Ba/8eAW//HgFw/x4B8f/NAfL/zQHz/80B9P/NAfX/zQH2/80B9//NAij/zQIq/80CLP/NAvj/zQMA/80DKP/NA1X/zQNu/80DcP/NA5j/zQOa/80DnP/NA57/zQOg/80Dov/NA6T/zQOm/80DqP/NA6r/zQOs/80Drv/NAKYARf/cAEb/3ABH/9wASf/cAE//8wBQ//MAUf/WAFL/8wBT/9wAV//dAFj/4QBb/+EAkf/cAJX/3ACX/90Atv/cALj/4QC8//MAw//cAMT/3ADG/90A5//zAOv/8wDs//MA7v/zAO//8wDw//MA8v/cAPP/8wD1//MA9v/zAPn/8wD7//MA/v/cAQD/8wET/9YBFf/hARn/3AEd/9wBMf/zATX/3AFA//MBRf/zAUf/3AFI/9wBUv/cAhP/3AIU/9wCFf/cAhb/3AIX/9wCHP/zAh3/1gIe/9YCH//WAiD/1gIh/9YCIv/dAiP/3QIk/90CJf/dAib/4QIn/+ECL//cAjH/3AIz/9wCNf/cAjf/3AI5/9wCO//cAj3/3AI//9wCQf/cAkP/3AJF/9wCR//cAkn/3AJk//MCZv/zAmj/8wJp//MCa//WAm3/1gJv/9YCh//dAon/3QKL/90Cjf/dAo//3QKR/90Clf/hAxD/3AMS//MDFP/dAxb/1gMY/+EDG//dAxz/1gMd/90DNv/cAzf/8wM4/9YDOf/zAzr/3AM7/+EDPf/cAz7/8wND//MDRP/hA0z/4QNU//MDXP/cA13/8wNh/+EDYv/cA2f/3ANp/+EDdf/cA3f/3AN4/9wDfv/zA4D/8wOC/9YDhP/cA4b/1gOK/+EDjP/hA47/4QOS//MDlf/cA7H/3AOz/9wDtf/cA7f/3AO5/9wDu//cA73/3AO//9wDxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/3APV/9wD1//cA9n/1gPb/9wD3f/dA9//3QPh/90D4//dA+X/3QPn/90D6f/dA+v/4QPt/+ED7//hA/P/8wP1//MD///zBAz/8wQO//MEEP/zAHEABP/aAAn/2gBF//AARv/wAEf/8ABJ//AAU//wAFf/7wBY/9wAW//cAJH/8ACV//AAl//vALb/8AC4/9wAw//wAMT/8ADG/+8A8v/wAP7/8AEV/9wBGf/wAR3/8AE1//ABR//wAUj/8AFS//ABZf/aAWb/2gFo/9oBaf/aAWr/2gIT//ACFP/wAhX/8AIW//ACF//wAiL/7wIj/+8CJP/vAiX/7wIm/9wCJ//cAi//8AIx//ACM//wAjX/8AI3//ACOf/wAjv/8AI9//ACP//wAkH/8AJD//ACRf/wAkf/8AJJ//ACh//vAon/7wKL/+8Cjf/vAo//7wKR/+8Clf/cAxD/8AMU/+8DGP/cAxv/7wMd/+8DNv/wAzr/8AM7/9wDPf/wA0T/3ANM/9wDTf/aA07/2gNS/9oDXP/wA2H/3ANi//ADZ//wA2n/3AN1//ADd//wA3j/8AOE//ADiv/cA4z/3AOO/9wDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///AD0//wA9X/8APX//AD2//wA93/7wPf/+8D4f/vA+P/7wPl/+8D5//vA+n/7wPr/9wD7f/cA+//3AA0AAT/oAAJ/6AAV//xAFj/xQBb/8UAl//xALj/xQDG//EBFf/FAWX/oAFm/6ABaP+gAWn/oAFq/6ACIv/xAiP/8QIk//ECJf/xAib/xQIn/8UCh//xAon/8QKL//ECjf/xAo//8QKR//EClf/FAxT/8QMY/8UDG//xAx3/8QM7/8UDRP/FA0z/xQNN/6ADTv+gA1L/oANh/8UDaf/FA4r/xQOM/8UDjv/FA93/8QPf//ED4f/xA+P/8QPl//ED5//xA+n/8QPr/8UD7f/FA+//xQA9AEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAhP/5wIU/+cCFf/nAhb/5wIX/+cCL//nAjH/5wIz/+cCNf/nAjf/5wI5/+cCO//nAj3/5wI//+cCQf/nAkP/5wJF/+cCR//nAkn/5wMQ/+cDNv/nAzr/5wM9/+cDXP/nA2L/5wNn/+cDdf/nA3f/5wN4/+cDhP/nA5X/5wOx/+cDs//nA7X/5wO3/+cDuf/nA7v/5wO9/+cDv//nA9P/5wPV/+cD1//nA9v/5wBxAAQADAAJAAwARf/oAEb/6ABH/+gASf/oAFH/6gBT/+gAWAALAFsACwCR/+gAlf/oALb/6AC4AAsAw//oAMT/6ADy/+gA/v/oARP/6gEVAAsBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gBZQAMAWYADAFoAAwBaQAMAWoADAIT/+gCFP/oAhX/6AIW/+gCF//oAh3/6gIe/+oCH//qAiD/6gIh/+oCJgALAicACwIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAmv/6gJt/+oCb//qApUACwMQ/+gDFv/qAxgACwMc/+oDNv/oAzj/6gM6/+gDOwALAz3/6ANEAAsDTAALA00ADANOAAwDUgAMA1z/6ANhAAsDYv/oA2f/6ANpAAsDdf/oA3f/6AN4/+gDgv/qA4T/6AOG/+oDigALA4wACwOOAAsDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gDxf/qA8f/6gPJ/+oDy//qA83/6gPP/+oD0f/qA9P/6APV/+gD1//oA9n/6gPb/+gD6wALA+0ACwPvAAsADABa/+0AXP/tAOn/7QKY/+0Cmv/tApz/7QM8/+0DbP/tA3r/7QOU/+0D+f/tBAH/7QAMAFr/8gBc//IA6f/yApj/8gKa//ICnP/yAzz/8gNs//IDev/yA5T/8gP5//IEAf/yAB8AWP/0AFr/8gBb//QAXP/zALj/9ADp//IBFf/0Aib/9AIn//QClf/0Apj/8wKa//MCnP/zAxj/9AM7//QDPP/yA0T/9ANM//QDYf/0A2n/9ANs//IDev/yA4r/9AOM//QDjv/0A5T/8gPr//QD7f/0A+//9AP5//IEAf/yAHkABP/KAAn/ygA2/9IAOP/UADr/9AA7/9MAT//RAFD/0QBS/9EAWP/mAFr/7wBb/+YAuP/mALz/0QDN/9IA0f/SANX/9ADZ/+0A3P/hAOf/0QDp/+8A6//RAOz/0QDu/9EA7//RAPD/0QDz/9EA9f/RAPb/0QD5/9EA+//RAQD/0QEU/9QBFf/mAS7/0gEx/9EBNv/SAUD/0QFF/9EBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCHP/RAib/5gIn/+YCZP/RAmb/0QJo/9ECaf/RAoD/0gKC/9IChP/SApT/0wKV/+YClv/TAv3/0wMM/9MDDf/0Aw//0wMS/9EDGP/mAyf/7QMz/9IDNP/0Azf/0QM5/9EDO//mAzz/7wM+/9EDQ//RA0T/5gNL/9MDTP/mA03/ygNO/8oDUv/KA1T/0QNd/9EDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wN+/9EDgP/RA4n/7QOK/+YDi//tA4z/5gON/+0Djv/mA4//4QOS/9EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gPz/9ED9f/RA/b/0gP4//QD+f/vA/r/4QP8/+ED///RBAD/9AQB/+8EDP/RBA7/0QQQ/9EEE//TAB0ANv++AFj/7wBb/+8AuP/vAM3/vgDR/74BFf/vAS7/vgE2/74CJv/vAif/7wKA/74Cgv++AoT/vgKV/+8DGP/vAzP/vgM7/+8DRP/vA0z/7wNh/+8Daf/vA4r/7wOM/+8Djv/vA+v/7wPt/+8D7//vA/b/vgA0ADb/5gA4/+cAOv/yADv/5wBa//EAzf/mANH/5gDV//IA2f/uANz/6ADp//EBFP/nAS7/5gE2/+YCC//nAoD/5gKC/+YChP/mApT/5wKW/+cC/f/nAwz/5wMN//IDD//nAyf/7gMz/+YDNP/yAzz/8QNL/+cDYP/nA2j/5wNr//IDbP/xA3n/8gN6//EDif/uA4v/7gON/+4Dj//oA5P/8gOU//ED6v/nA+z/5wPu/+cD9v/mA/j/8gP5//ED+v/oA/z/6AQA//IEAf/xBBP/5wCEACMAEAAl/+gAKf/oADH/6AAz/+gANv/gADj/4AA7/98Agf/oAJD/6ACU/+gArQAQAK7/6ACvABAAzf/gAM7/6ADPABAA0f/gANgAEADc/+EA7QAQAPT/4AD/ABABA//oAQgAEAES/+gBFP/gARb/6AEY/+gBGv/oARz/6AEu/+ABNP/oATb/4AFNABABUf/oAfEAEAHyABAB8wAQAfQAEAH1ABAB9gAQAfcAEAH4/+gCAv/oAgP/6AIE/+gCBf/oAgb/6AIL/98CKAAQAioAEAIsABACLv/oAjD/6AIy/+gCNP/oAkL/6AJE/+gCRv/oAkj/6AJq/+gCbP/oAm7/6AKA/+ACgv/gAoT/4AKU/98Clv/fAp//6AL4ABAC/P/oAv3/3wMAABADCf/oAwz/3wMP/98DKAAQAy//6AMy/+gDM//gA0v/3wNVABADV//oA2D/4ANj/+gDZv/oA2j/3wNuABADcAAQA4H/6AOD/+gDhf/oA4//4QOQ/+ADlgAQA5cAEAOYABADmgAQA5wAEAOeABADoAAQA6IAEAOkABADpgAQA6gAEAOqABADrAAQA64AEAPE/+gDxv/oA8j/6APK/+gDzP/oA87/6APQ/+gD0v/oA9T/6APW/+gD2P/oA9r/6APq/98D7P/fA+7/3wP2/+AD+v/hA/v/4AP8/+ED/f/gBBEAEAQSABAEE//fAC0ANv/xADj/9AA6//QAO//wAM3/8QDP//UA0f/xANX/9ADY//UA2f/zART/9AEu//EBNv/xAU3/9QIL//ACgP/xAoL/8QKE//EClP/wApb/8AL9//ADDP/wAw3/9AMP//ADJ//zAzP/8QM0//QDS//wA2D/9ANo//ADa//0A3n/9AOJ//MDi//zA43/8wOT//QDlv/1A+r/8APs//AD7v/wA/b/8QP4//QEAP/0BBH/9QQT//AAWQAjAA8ANv/mADj/5gA6AA4AO//mAK0ADwCvAA8Azf/mAM8ADgDR/+YA1QAOANgADgDZAAsA3P/lAO0ADwD0/+gA/wAPAQgADwEU/+YBLv/mATb/5gFNAA4B8QAPAfIADwHzAA8B9AAPAfUADwH2AA8B9wAPAgv/5gIoAA8CKgAPAiwADwKA/+YCgv/mAoT/5gKU/+YClv/mAvgADwL9/+YDAAAPAwz/5gMNAA4DD//mAycACwMoAA8DM//mAzQADgNL/+YDVQAPA2D/5gNo/+YDawAOA24ADwNwAA8DeQAOA4kACwOLAAsDjQALA4//5QOQ/+gDkwAOA5YADgOXAA8DmAAPA5oADwOcAA8DngAPA6AADwOiAA8DpAAPA6YADwOoAA8DqgAPA6wADwOuAA8D6v/mA+z/5gPu/+YD9v/mA/gADgP6/+UD+//oA/z/5QP9/+gEAAAOBBEADgQSAA8EE//mAC4ANv/jADr/5QA7/+QAzf/jAM//5QDR/+MA1f/lANj/5QDZ/+kA7f/qAP//6gEu/+MBNv/jAU3/5QIL/+QCgP/jAoL/4wKE/+MClP/kApb/5AL9/+QDDP/kAw3/5QMP/+QDJ//pAzP/4wM0/+UDS//kA2j/5ANr/+UDef/lA4n/6QOL/+kDjf/pA5P/5QOW/+UDl//qA+r/5APs/+QD7v/kA/b/4wP4/+UEAP/lBBH/5QQS/+oEE//kACEANv/iADr/5ADN/+IAz//kANH/4gDV/+QA2P/kANn/6QDt/+sA///rAS7/4gE2/+IBTf/kAoD/4gKC/+IChP/iAw3/5AMn/+kDM//iAzT/5ANr/+QDef/kA4n/6QOL/+kDjf/pA5P/5AOW/+QDl//rA/b/4gP4/+QEAP/kBBH/5AQS/+sAFwA2/+sAO//zAM3/6wDR/+sBLv/rATb/6wIL//MCgP/rAoL/6wKE/+sClP/zApb/8wL9//MDDP/zAw//8wMz/+sDS//zA2j/8wPq//MD7P/zA+7/8wP2/+sEE//zADAAT//vAFD/7wBS/+8AWv/wALz/7wDn/+8A6f/wAOv/7wDs/+8A7v/vAO//7wDw/+8A8//vAPX/7wD2/+8A+f/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1AAQA9P/tA5D/7QP7/+0D/f/tAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/6wBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/6wEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/6wIe/+sCH//rAiD/6wIh/+sCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/+sCbf/rAm//6wMQ//ADFv/rAxz/6wM2//ADOP/rAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/rA4T/8AOG/+sDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/8APV//AD1//wA9n/6wPb//AAjwAEAA0ACQANAEP/8ABF/7AARv+wAEf/sABJ/7AAUf/WAFP/sABYAAsAWwALAJH/sACV/7AAtv+wALgACwDE/7AA7f+vAPL/sAD+/7AA//+vARP/1gEVAAsBGf+wAR3/sAE1/7ABR/+wAUj/sAFS/7ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE/+wAhT/sAIV/7ACFv+wAhf/sAId/9YCHv/WAh//1gIg/9YCIf/WAiYACwInAAsCKf/wAiv/8AIt//ACL/+wAjH/sAIz/7ACNf+wAjf/sAI5/7ACO/+wAj3/sAI//7ACQf+wAkP/sAJF/7ACR/+wAkn/sAJr/9YCbf/WAm//1gKVAAsDEP+wAxb/1gMYAAsDHP/WAzX/8AM2/7ADOP/WAzr/sAM7AAsDPf+wA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/sANhAAsDYv+wA2f/sANpAAsDb//wA3H/8AN1/7ADd/+wA3j/sAOC/9YDhP+wA4b/1gOKAAsDjAALA44ACwOV/7ADl/+vA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/sAOz/7ADtf+wA7f/sAO5/7ADu/+wA73/sAO//7ADxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/sAPV/7AD1/+wA9n/1gPb/7AD6wALA+0ACwPvAAsEEv+vAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEUADABGAAwARwAMAEkADABTAAwAkQAMAJUADAC2AAwAwwAMAMQADADtABgA8gAMAPT/9wD+AAwA/wAYARkADAEdAAwBNQAMAUcADAFIAAwBUgAMAhMADAIUAAwCFQAMAhYADAIXAAwCLwAMAjEADAIzAAwCNQAMAjcADAI5AAwCOwAMAj0ADAI/AAwCQQAMAkMADAJFAAwCRwAMAkkADAMQAAwDNgAMAzoADAM9AAwDXAAMA2IADANnAAwDdQAMA3cADAN4AAwDhAAMA5D/9wOVAAwDlwAYA7EADAOzAAwDtQAMA7cADAO5AAwDuwAMA70ADAO/AAwD0wAMA9UADAPXAAwD2wAMA/v/9wP9//cEEgAYAB8AWP/0AFr/8ABb//QAuP/0AOn/8ADt//MA///zARX/9AIm//QCJ//0ApX/9AMY//QDO//0Azz/8ANE//QDTP/0A2H/9ANp//QDbP/wA3r/8AOK//QDjP/0A47/9AOU//ADl//zA+v/9APt//QD7//0A/n/8AQB//AEEv/zAAoABP/WAAn/1gFl/9YBZv/WAWj/1gFp/9YBav/WA03/1gNO/9YDUv/WAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//pARn/6wEd/+sBNf/rAUf/6wFI/+sBUv/rAWUACwFmAAsBaAALAWkACwFqAAsCE//rAhT/6wIV/+sCFv/rAhf/6wId/+kCHv/pAh//6QIg/+kCIf/pAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCa//pAm3/6QJv/+kDEP/rAxb/6QMc/+kDNv/rAzj/6QM6/+sDPf/rA00ACwNOAAsDUgALA1z/6wNi/+sDZ//rA3X/6wN3/+sDeP/rA4L/6QOE/+sDhv/pA5X/6wOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6QPH/+kDyf/pA8v/6QPN/+kDz//pA9H/6QPT/+sD1f/rA9f/6wPZ/+kD2//rAAILHgAEAAAN5hU6ACEAHQAAABH/zv+PABL/9f/v/4j/9P+7/3//9QAM/6n/ov/JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/lAAAAAP/o/8kAAP/zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAA/+UAEQAAAAAAAAAAAAD/4wAAAAAAAP/k/+QAAAASABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+EAAAAAAAAAAAAAAAAAAAAA/+UAAAAA/+r/1QAAAAD/6//q/5r/6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/mAAAAAAAAAAAAAP/tAAAAFP/vAAAAAAAAAAAAAAAAAAAAAAAA/+0AAAAAAAAAAAAAAAAAAAAA/8v/uP98/37/5AAAAAD/nQAPABD/of/EABAAEAAAAAD/sQAA/yYAAP+d/7P/GP+T//D/j/+M/xAAAP+S/3L/DP8P/70AAAAA/0QABQAH/0v/hgAHAAcAAAAA/z4AAP56AAD/RP9q/mL/M//R/yz/JwAAAAAAAAAAAAD/2AAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAD/2P+jAAD/4QAAAAD/5QAAAAD/6QAAAAAAAAAAAAAAAAAAAAAAAP/mAAD/wP/pAAAAAAAAAAAAAAAA/3sAAAAA/7//yv92AAD/cf7t/9QAAP9R/xEAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yQAPAAD/2QAAAAAAAP/zAAAAAAAAAAAAAAAAAAAAAP92/+H+vP/m//MAAAAAAAAAAP/1AAD/OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAA//MAAAAA/9IAAAAA/+QAAAAAAAAAAAAA/7UAAP8fAAD/1AAA/9sAAAAA/9IAAAAAAAAAEf/h/9EAEf/nAAAAAP/rAAAAAP/rAAAADgAAAAAAAAAAAAAAAAAA/+YAAP/SAAAAAAAAAAAAAAAAAAD/7AAAAAD/4/+gAAD/vwARABH/2f/iABIAEgAAAAD/ogAN/y0AAP+//+n/zP/Y//D/t//G/6AAAAAAAAAAAAAAAAAAAAAA/+EAAAAO/+0AAAAAAAAAAAAA/9UAAP+FAAD/4QAA/8QAAAAA/98AAAAAAAAAAP/lAAAAAP/mAAAAAP/rAAAAAP/tAAAAAAAAAAAAAAANAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAA/8oAAP/p/7v/6QAAAAD/vQAAABIAAAAAAAAAEgAAAAD/pQAA/m0AAP+9AAD/if+aAAD/kf/SAAAAAAAA//EAAAAAAAAAAP+9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAA//IAAAAA/+MAAAAAAAAAAP/xAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAA//MAAAAAAAAAAP/yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8QAA//AAAAAA/+wAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAP/XAAAAAAAP//EAAAAAAAAAAAAAAAAAAAAAAAAAAP+VAAD/8wAAAAAAAAAA//EAAAAAAAAAAAASAAAAAAAAAAAAEP/sAAAAAAAAAAAAAAAAAAAAAAAAAAD/hQAA/+0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/lf/DAAAAAAAAAAAAAAAAAAAAAP+IAAAAAAAA/8UAAAAA/+wAAP/O/7AAAAAAAAAAAAAAAAAAAAAA/1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAAAAAAAAAAAAP/AAAAAAP71AAAAAP/I/63/5//rAAD/8AAAAAAAAP/JAAAAAAAAAAAAAAAAAAAAAP/d/9kAAAAAAAD/eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAAAAAAAAAAAAAAAAACAIgABAAEAAAACQAJAAEAEQARAAIAIwAoAAMAKgAzAAkANgA8ABMAQwBEABoARwBIABwASgBKAB4ATwBSAB8AVABUACMAWABYACQAWgBbACUAiACIACcAmQCZACgArACwACkAsgC0AC4AtgC2ADEAuAC5ADIAuwC8ADQAvgDAADYAwgDHADkAzQDNAD8AzwDZAEAA2wDbAEsA3QDfAEwA4QDjAE8A5QDpAFIA7ADsAFcA8QDzAFgA9gD3AFsA+QD7AF0A/wEAAGABBQEFAGIBCAEIAGMBEwEVAGQBJwEpAGcBLAEsAGoBLgEuAGsBRQFFAGwBZQFmAG0BaAFqAG8BpgGmAHIBqQGpAHMBqwGrAHQBsAGxAHUBtAG2AHcBuAG+AHoBxAHEAIEB2wHcAIIB6AHoAIQB7AHtAIUB7wHvAIcB8QISAIgCFAIXAKoCHAIhAK4CJgIuALQCMAIwAL0CMgIyAL4CNAI0AL8CNgI2AMACOAJBAMECSgJMAMsCTgJOAM4CUAJQAM8CUgJSANACVAJUANECVwJXANICWQJZANMCWwJbANQCXQJdANUCXwJfANYCYQJhANcCYwJvANgCcQJxAOUCcwJzAOYCdQJ1AOcCgAKAAOgCggKCAOkChAKEAOoChgKGAOsCiAKIAOwCigKKAO0CjAKMAO4CjgKOAO8CkAKQAPACkgKSAPEClAKXAPICmQKZAPYCmwKbAPcC+AL9APgDAAMPAP4DEgMSAQ4DFgMWAQ8DGAMYARADHAMcAREDHwMgARIDIgMrARQDLQMvAR4DMQM2ASEDOAM5AScDOwM+ASkDRANFAS0DRwNHAS8DSQNJATADSwNOATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAKAAoAKAAzADQAPQBIAE0AVgBZAF0AAQAiAJkAsACyALMAtAC7AL4AvwDAAMUAxwDIAMkAzQDRANMA1ADWAN4A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APsA/gEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFhA9kD2QFvA9wD3AFwA94D3gFxA+oD7wFyA/ID8gF4A/QD9AF5A/YD9gF6A/gD+QF7A/4EAQF9BAQEBAGBBAYEBwGCBAkECQGEBA0EDQGFBA8EDwGGBBMEEwGHAAIBOAAEAAQAHQAJAAkAHQAOAA4AHgAQABAAHgAkACQAAQAlACUABAAmACYAAwAnACcABQAqACsAAgAsACwADAAtAC0ACQAuAC4ACgAvADAAAgAxADEAAwAyADIACwA2ADYABgA3ADcADAA4ADgADQA5ADkAEAA6ADoADgA7ADsADwA8ADwAEQBDAEMAEwBEAEQAFQBFAEUAFABHAEcAFgBKAEoAFwBPAFAAFwBRAFEAGABSAFIAFQBUAFQAGgBYAFgAGQBaAFoAGwBbAFsAGQBcAFwAHACIAIgAFQCsAKwABwCuAK4AAwC4ALgAGQC8ALwAFwDCAMIAFQDPANAAHwDSANIAAgDVANUADgDXANgAAgDZANkAEgDbANsAAgDdAN0AAgDfAN8AHwDhAOEAHwDnAOcACADpAOkAGwDyAPIAFQD3APcAIAD5APkAIAD6APoAFQD/AQAAIAEFAQUAIAETARMAGAEUARQADQEVARUAGQEnAScAFQEoASgABwEpASkACAEsASwACQEuAS4ACQFFAUUACAFlAWYAHQFnAWcAHgFoAWoAHQFrAWsAHgFvAXAAHgHsAe0AAwHvAe8ABgH4AfgABAH5AfwABQH9AgEAAgICAgYAAwIHAgoADAILAgsADwIMAhIAEwITAhMAFAIUAhcAFgIcAhwAFwIdAiEAGAImAicAGQIpAikAEwIrAisAEwItAi0AEwIuAi4ABAIvAi8AFAIwAjAABAIxAjEAFAIyAjIABAIzAjMAFAI0AjQABAI1AjUAFAI2AjYAAwI4AjgABQI5AjkAFgI6AjoABQI7AjsAFgI8AjwABQI9Aj0AFgI+Aj4ABQI/Aj8AFgJAAkAABQJBAkEAFgJKAkoAAgJLAksAFwJMAkwAAgJOAk4AAgJQAlAAAgJSAlIAAgJUAlQAAgJXAlcADAJZAlkACQJbAlsACgJdAl0ACgJfAl8ACgJhAmEACgJjAmMAAgJkAmQAFwJlAmUAAgJmAmYAFwJnAmcAAgJoAmkAFwJqAmoAAwJrAmsAGAJsAmwAAwJtAm0AGAJuAm4AAwJvAm8AGAJxAnEAGgJzAnMAGgJ1AnUAGgKAAoAABgKCAoIABgKEAoQABgKGAoYADAKIAogADAKKAooADAKMAowADAKOAo4ADAKQApAADAKSApIAEAKUApQADwKVApUAGQKWApYADwKXApcAEQKYApgAHAKZApkAEQKaApoAHAKbApsAEQKcApwAHAL5AvkABQL6AvsAAgL8AvwAAwL9Av0ADwMBAwEAAQMCAwIABQMDAwMAEQMEAwUAAgMGAwYACQMHAwgAAgMJAwkAAwMKAwoACwMLAwsABgMMAwwADwMNAw0ADgMOAw4AAgMPAw8ADwMSAxIAFwMWAxYAGAMYAxgAGQMcAxwAGAMfAx8ABQMgAyAABwMiAyMAAgMkAyQADAMlAyYACQMnAycAEgMpAykAAQMqAyoABwMrAysABQMtAy4AAgMvAy8AAwMxAzEACwMyAzIABAMzAzMABgM0AzQADgM1AzUAEwM2AzYAFgM4AzgAGAM5AzkAFQM6AzoAFAM7AzsAGQM8AzwAGwM9Az0AFgM+Az4ACANEA0QAGQNFA0UAEANHA0cAEANJA0kAEANLA0sADwNMA0wAGQNNA04AHQNSA1IAHQNTA1MAAgNUA1QAFwNWA1YAEwNXA1cAAwNaA1oABQNcA1wAFgNgA2AADQNhA2EAGQNmA2YABANnA2cAFANoA2gADwNpA2kAGQNqA2oAAgNrA2sADgNsA2wAGwNtA20AAgNvA28AEwNxA3EAEwN0A3QABQN1A3UAFgN3A3gAFgN5A3kADgN6A3oAGwOBA4EAAwOCA4IAGAOGA4YAGAOIA4gAFQOJA4kAEgOKA4oAGQOLA4sAEgOMA4wAGQONA40AEgOOA44AGQOTA5MADgOUA5QAGwOZA5kAEwObA5sAEwOdA50AEwOfA58AEwOhA6EAEwOjA6MAEwOlA6UAEwOnA6cAEwOpA6kAEwOrA6sAEwOtA60AEwOvA68AEwOwA7AABQOxA7EAFgOyA7IABQOzA7MAFgO0A7QABQO1A7UAFgO2A7YABQO3A7cAFgO4A7gABQO5A7kAFgO6A7oABQO7A7sAFgO8A7wABQO9A70AFgO+A74ABQO/A78AFgPAA8AAAgPCA8IAAgPEA8QAAwPFA8UAGAPGA8YAAwPHA8cAGAPIA8gAAwPJA8kAGAPKA8oAAwPLA8sAGAPMA8wAAwPNA80AGAPOA84AAwPPA88AGAPQA9AAAwPRA9EAGAPZA9kAGAPcA9wADAPeA94ADAPqA+oADwPrA+sAGQPsA+wADwPtA+0AGQPuA+4ADwPvA+8AGQPyA/IACQP0A/QAAgP2A/YABgP4A/gADgP5A/kAGwP+A/4ABwP/A/8ACAQABAAADgQBBAEAGwQEBAQAFwQGBAYAHwQHBAcABwQJBAkACQQNBA0AAgQPBA8AAgQTBBMADwABAAQEFgAHAAAAAAAAAAAABwAAAAAAAAAAABMAFwATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAFAAAAAAAAAAUAAAAAABwAAAAAAAAAAAAFAAAABQAAABkACgAGAA0ACQASAA4AFAAAAAAAAAAAAAAAAAAaAAAAFQAVABUAAAAVAAAAAAAAAAAAAAAYABgACAAYABUAAAAbAAAACwACAAAAFgACAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAVAAAAAAAFABUAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEABQARAAAAAAAAAAAAAAAAABUAAAACAAAAAAAAABgAAAAAAAAAAAAAAAAAFQAVAAAACwAAAAAAAAAAAAAAAAAKAAUAAQAAAAoAAAAAAAAAEgAAAAAAAQAQAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABYAAAAYABgABAAYABgAGAAAABUAGAADABgAGAAAAAAAGAAAABgAAAAAABUABAAYAAAAAAAFAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAFAAgADQACAAUAAAAFABUABQAAAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAABgAAAAAAAUAFQAKAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAYAAAAFQAVAAAAAAAAAAAAAQAAAAAAAAAFABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAXAAAABwAHABMABwAHAAcAEwAAAAAAAAATABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAAAABEAEQARABEAEQARABEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABgAGAAYABgAOABoAGgAaABoAGgAaABoAFQAVABUAFQAVAAAAAAAAAAAAGAAIAAgACAAIAAgACwALAAsACwACAAIAEQAaABEAGgARABoABQAVAAUAFQAFABUABQAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAUAFQAFABUABQAVAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYABgABQAIAAUACAAFAAgAAAAAAAAAAAAAAAAAGQAbABkAGwAZABsAGQAbABkAGwAKAAAACgAAAAoAAAAGAAsABgALAAYACwAGAAsABgALAAYACwAJAAAADgACAA4AFAAMABQADAAUAAwAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAUADgAAAAAAEQAAAAAAFAAAAAAAAAAAAAAABQAAAAAADgASAAAADgAVAAAAGAAAAAsAAAAIAAAAAgAAAAAACwAIAAsAAAAAAAAAAAAAAAAAHAAAAAAAEAARAAAAAAAAAAAAAAAAAAUAAAAAAAUACgASABoAFQAYAAgAGAAVAAIAFgAVABgAGwAAAAAAAAAYAAIACQAAAAkAAAAJAAAADgACAAcABwAAAAAAAAAHAAAAGAARABoABQAAAAAAAAAAABUAGAAAAAAADQACABUABQAAAAAABQAVAA4AAgAAABIAFgAAABEAGgARABoAAAAAAAAAFQAAABUAFQASABYAAAAAAAAAGAAAABgABQAIAAUAFQAFAAgAAAAAABAAAgAQAAIAEAACAA8AAwAAABgAEgAWABUAAQAEABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAAAAAAAAAFAAgABQAIAAUACAAFAAgABQAIAAUACAAFAAgABQAVAAUAFQAFABUABQAIAAUAFQAGAAsABgALAAAACwAAAAsAAAALAAAACwAAAAsADgACAA4AAgAOAAIAAAAAAAAAGAAAABgACgAAABIAFgAPAAMADwADAAAAGAASABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAQAEAA4AAAAAAAAAAAAAABcAAQAAAAoALACOAAFERkxUAAgABAAAAAD//wAIAAAAAQACAAMABAAFAAYABwAIbGlnYQAybG51bQA4c21jcAA+c3MwMQBEc3MwMgBKc3MwMwBQc3MwNABWc3MwNQBcAAAAAQABAAAAAQACAAAAAQAAAAAAAQADAAAAAQAEAAAAAQAFAAAAAQAGAAAAAQAHAAgAEgAaACIAKgAyADoAQgBKAAEAAAABAEAABAAAAAEB9gABAAAAAQIAAAEAAAABAhIAAQAAAAECEAABAAAAAQIOAAEAAAABAgwAAQAAAAECDgACAhAA3AGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4BpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQB6AG1AbYBtwG4AbkBugG7AbwBvQG+AvcCogKhAqICowKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AvMCvwK/AsACwALBAsECwgLCAsMCwwLFAsUCxgLGAscCxwLIAsgCyQLJAsoCygLLAssCzALMAs0CzQLPAs8C0ALQAtEC0QLSAtIC0wLTAtQC1ALVAtYC1gLXAtcC2ALYAtkC2QLaAtoC2wLbAtwC3ALdAt0C3gLeAt8C3wLgAuAC4QLhAuIC4gLjAuMC5ALkAuUC5QLmAuYC5wLnAugC6P////8C6gLqAusC6wLsAuwC7QLtAu4C7gLvAu8C8ALwAvEC8QLyAvIC8wL0AvQC9QL1AvYC9gKhAAEApAABAAgAAQAEAZIAAgBLAAIAmAAKAZgBzAHEAdYB1wHYAdkB2wHdAecAAQCIAZEAAQCIASgAAQCIAa4AAgCIAAIB4wHkAAIAfgACAeUB5gACAA0AIwA8AAAAQwBcABoAgwCDADQAhQCFADUB7AHtADYB7wIxADgCNAJFAHsCSAJUAI0CVwJoAJoCagJ7AKwCfgJ/AL4CggKcAMAD8APwANsAAQABAEgAAgABABIAGwAAAAEAAQBJAAEAAQC2AAEAAQA0AAEAAgAtAE0=\",\"Roboto-Medium.ttf\":\"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASxgAAAASEdQT1OQeyOPAAEsqAAAl/pHU1VCeolvLwABxKQAAANsT1MvMrkTKcoAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5Zm8zqQ4AACb8AADUQGhlYWT1Pw7VAAAA7AAAADZoaGVhCx4JIwAAASQAAAAkaG10eLpNNCcAAAHIAAAQcGxvY2EEms7QAAD7PAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZb10XwMAAQN4AAAEn3Bvc3Tfb5xiAAEIGAAAJEYAAQAAAAEAAF5SMstfDzz1AAkIAAAAAADE8BEuAAAAAM2CsnL6JP3VCYsIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJnfok/V0JiwABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAME3gH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAf4AAAAAAAAB/gAAAf4AAAKYAFIE4gA8BIwAZAXgAGQFHQA+AVoAUgK3AIACvAARA38AGwR1AEQBwgAnAqAARwI8AJkDKgACBIwAaASMAMoEjABRBIwATwSMADgEjACBBIwAdASMAEUEjABhBIwAUgIlAJkCIABRBBEAPwSOAJEEKgCAA+QAKQchAEoFQgAaBSAAnwUgAHQFYgCfBKMAnwShAJ8FbQB0BbAAnwJNAK0EfAA6BSgAnwRkAJ8HAgCfBbAAnwWPAHQFKwCfBZAAdAVFAJ8E8wBTBOoANQV0AIYFKwAaBwIARAUUAC8FAwATBMAAWAIxAIQDVwAVAjEADANrADUDnAADApQASgRaAF4EiACABDMAUQSIAFMEPABZAs8AMQSIAFQEiAB9AhMAkAIZ/7AEMACBAhMAkAb1AIAEiAB+BIgAUwSIAIAEiABTAtoAgAQpAFECnQAZBIgAewQOACAF+gAlBA4AIQQOABAEDgBVAq8AOAICAK4CrwAbBVEAdQIeAI8EfQBoBLUAUQWdAF0E4AAaAfwAiAT4AFoEHgCkBkQAVwORAHQD4gBUBG0AfwZEAFcD2wCHAwoAfwRLAF8DYQBtA2MAYQKxAHgEuwCSBBAAPgJCAKACEABtAjUAZAOnAHcD4gBcBgwAmwZmAJMG0wBmBAEAYAeF//YERABNBXoAaQTKAJQE5wCIBsEANAS6ADwEkQBDBIkAUwSXAIcFogAYAhoAjwSYAI4EJAAbAj8AGwWSAJMEiAB+B7QAZQc6AFsCDACLAtD/3QWJAGYEnwBSBaUAhgTyAHsCJv+1BDwAWQPmAJsDsAB5A3wAdQJPAJoCsgCCAk0AKQPYAIADLwB6ApwAqwAA/NsAAP02AAD8eQAA/T4AAPwMAAD9IgJdANcEPACdAkIAoAR1AJ8FvQAaBXsAZgU5ACMEkQBwBbEAnwSRAEcF6wBLBacASAVbAGwEhABWBMYAlgQOACAEiABUBGAAYAQaAGEEiAB+BKIAcwKmAKkEagAWBBMAZAT3AE8EiACABDcAUgSQAFIELgBABGAAgAXQAEQFyQBPBpQAZgUuAHUEdf/uBnEAMwX/ACQFPgByCIoALgiRAJ8GXwA1BasAmQUIAJQGBwAmB5oAGATTAEoFqgCaBakALgUKAD8GYABPBfYAmQWIAI8HmgCeB/oAngYaABgG+QCfBQcAlAU8AIgHVACqBPsALQR9AFsEjwCPA1oAhQT2ACcGdgAXBBYATQSYAIYEbgCPBJoAHwYDAI8ElwCGBJgAhgP1ACMF0wBUBNMAhgRmAF8GjgCGBuwAfgUYAB8GbwCPBGgAjwQ8AFEGhACQBHAAJwSJ/+EEPQBYBtEAHwbkAIYEif/1BJgAhgdDAI0GTwBwBGf/4AcpAKIGAQCGBQcAIARgAAoHQgC2BjYAnQbtAIQF5gCCCTIArQf5AI8EIQApA/AAMwV7AGoEiQBSBRkAEQQOACAFewBqBIkAUwc+AI0GRAB0B0MAjQZQAHAFHQBqBEoAXAT/AG0AAPxmAAD8cwAA/XsAAP2lAAD6JP7p+k0EZ//gBRQAnwSHAIAEagCUA6IAfgS3AJ8EIAB+BSoAlASrAI4GlgA0BaQAPgfRAJ8FqwB+CEcAnwb1AH4GJQBpBP8AYQcyAC4FcQAmBXUAggRzAHQFhwCKBiYAIATE/84FHwCUBHgAjgWwAJ8EiAB+BYgAUwSmAF0EpgBdBMcAOwNTADQFBwBUBusAZgbdAF4GUwA7BSgALwR7AEkEPwB1B74AQwadAD8H/gCYBp4AdwUDAGIELABVBaoAIgUdAEQFVwCHBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYcArQaBALIDnQAEAcAAYAG8ADMBzgAyAagARwMUAGIDGwBAAwgAMgRdAEAEmQBcAssAiAP6AJwFpgCcB6gASwJyAGwCaQBUA5wALQOpAD8DXABpBLUATwa4AJkETQBLBeUAcQPiAEUIyACYBQkAZAUUAJYGyQBpB2EAageRAGoG7wBqBLsAQwWWAKYE2QBABIMAngSyADsIRQBkAiH/sgSOAGUETACYBEYAqgRLAKAEGgAkAlsAswKYAGMB8QBFBKgAGAAAAAAIMABZCDUAXAQyAE0DiwBNBJMAbAMn/58CEP+wAk0AGAGzAFwDoQB1A6EAdQOhAHUECwB5BAsAdQQL/0wECwB6A6EAWwIFAJAEyAAcBIwAjgSUAGgErwCOBEcAjgQqAI4E2wBoBRIAjgIVAI4EFwAuBHcAjgO9AI4GBgCOBSEAjgTKAGYE3QBoBKgAjgRwAE8EMgA8BQAAfgSxABwGDgA0BIwALARVABMETQBKBIYAbQKFAD4D/wBSBCIATQRlADkEfABRBD0AbQOvADwEQwBSBCoAPwIzAFcDVQBrA2YAYAL9ADgDdgBoA3YAcAMAAFIDgwBoA2YAYAOfAHADuQCXArIAlgNCAGwEjABPBIwAOASMAIEEmAB0BDsACgQ0ADIEYgA+BIwAYQS7AFYEiABTBUkAnwRaAGAFMgCfBSgAnwQwAIEFOgCfBC0AgQSNAFIEjACOA3wAdQH+AAACoABHBYAAJAWAACQEpv/9BOoANQKd/+cFQgAaBUIAGgVCABoFQgAaBUIAGgVCABoFQgAaBSAAdASjAJ8EowCfBKMAnwSjAJ8CTf/MAk0ArQJN/9gCTf+9BbAAnwWPAHQFjwB0BY8AdAWPAHQFjwB0BXQAhgV0AIYFdACGBXQAhgUDABMEWgBeBFoAXgRaAF4EWgBeBFoAXgRaAF4EWgBeBDMAUQQ8AFkEPABZBDwAWQQ8AFkCGv+vAhoAjwIa/7sCGv+gBIgAfgSIAFMEiABTBIgAUwSIAFMEiABTBIgAewSIAHsEiAB7BIgAewQOABAEDgAQBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBSAAdAQzAFEFIAB0BDMAUQUgAHQEMwBRBSAAdAQzAFEFYgCfBR4AUwSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkFbQB0BIgAVAVtAHQEiABUBW0AdASIAFQFbQB0BIgAVAWwAJ8EiAB9Ak3/vwIa/6ICTf+/Ahr/ogJN/+UCGv/IAk0AHAIT//4CTQCjBskArQQsAJAEfAA6Aib/tQUoAJ8EMACBBGQAnwITAJAEZACfAhMAWARkAJ8CqQCQBGQAnwLvAJAFsACfBIgAfgWwAJ8EiAB+BbAAnwSIAH4EiP/VBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBUUAnwLaAIAFRQCfAtoAVgVFAJ8C2gBDBPMAUwQpAFEE8wBTBCkAUQTzAFMEKQBRBPMAUwQpAFEE8wBTBCkAUQTqADUCnQAZBOoANQKdABkE6gA1AsUAGQV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewcCAEQF+gAlBQMAEwQOABAFAwATBMAAWAQOAFUEwABYBA4AVQTAAFgEDgBVB4X/9gbBADQFegBpBIkAUwSv/+oEr//qBDIAPATIABwEyAAcBMgAHATIABwEyAAcBMgAHATIABwElABoBEcAjgRHAI4ERwCOBEcAjgIV/6wCFQCOAhX/uAIV/50FIQCOBMoAZgTKAGYEygBmBMoAZgTKAGYFAAB+BQAAfgUAAH4FAAB+BFUAEwTIABwEyAAcBMgAHASUAGgElABoBJQAaASUAGgErwCOBEcAjgRHAI4ERwCOBEcAjgRHAI4E2wBoBNsAaATbAGgE2wBoBRIAjgIV/58CFf+fAhX/xQIV//kCFQCEBBcALgR3AI4DvQCOA70AjgO9AI4DvQCOBSEAjgUhAI4FIQCOBMoAZgTKAGYEygBmBKgAjgSoAI4EqACOBHAATwRwAE8EcABPBHAATwQyADwEMgA8BQAAfgUAAH4FAAB+BQAAfgUAAH4FAAB+Bg4ANARVABMEVQATBE0ASgRNAEoETQBKCOAATwVCABoFB/+vBhT/3AKx/+MFowAqBWf/ZwVvABMCpv+wBUIAGgUgAJ8EowCfBMAAWAWwAJ8CTQCtBSgAnwcCAJ8FsACfBY8AdAUrAJ8E6gA1BQMAEwUUAC8CTf+9BQMAEwSEAFYEYABgBIgAfgKmAKkEYACABJgAjgSIAFMEuwCSBA4AIAQOACECpv/EBGAAgASIAFMEYACABpQAZgSjAJ8EdQCfBPMAUwJNAK0CTf+9BHwAOgUoAJ8FKACfBQoAPwVCABoFIACfBHUAnwSjAJ8FqgCaBwIAnwWwAJ8FjwB0BbEAnwUrAJ8FIAB0BOoANQUUAC8EWgBeBDwAWQSYAIYEiABTBIgAgAQzAFEEDgAQBA4AIQQ8AFkDWgCFBCkAUQITAJACGv+gAhn/sARuAI8EDgAQBwIARAX6ACUHAgBEBfoAJQcCAEQF+gAlBQMAEwQOABABWgBSApgAUgRKAJoE4gAxAib/tQG8ADMHAgCfBvUAgAVCABoEWgBeBY//PQd3ADEHsQAxBKMAnwWqAJoEPABZBJgAhgWnAEgFyQBPBRkAEQQO/+MIlgBTCZ0AdATTAEoEFgBNBSAAdAQzAFEFAwATBA4AIAJNAK0HmgAYBnYAFwJNAK0FQgAaBFoAXgVCABoEWgBeB4X/9gbBADQEowCfBDwAWQWIAFMEPABZBDwAWQeaABgGdgAXBNMASgQWAE0FqgCaBJgAhgWqAJoEmACGBY8AdASIAFMFewBqBIkAUgV7AGoEiQBSBTwAiAQ8AFEFCgA/BA4AEAUKAD8EDgAQBQoAPwQOABAFiACPBGYAXwb5AJ8GbwCPBRQALwQOACEEiABTBakALgSaAB8FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAEBFr/iQVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4EowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSj/8wEPP+LBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZAk0ArQIaAI8CTQCfAhMAggWPAHQEiABTBY8AdASIAFMFjwB0BIgAUwWPACsEiP+mBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBYkAZgSfAFIFiQBmBJ8AUgWJAGYEnwBSBYkAZgSfAFIFiQBmBJ8AUgV0AIYEiAB7BXQAhgSIAHsFpQCGBPIAewWlAIYE8gB7BaUAhgTyAHsFpQCGBPIAewWlAIYE8gB7BQMAEwQOABAFAwATBA4AEAUDABMEDgAQBKYAUwSmAFMFKACfBG4AjwWwAJ8ElwCGBOoANQP1ACMFFAAvBA4AIQWIAI8EZgBfBYgAjwRmAF8EdQCfA1oAhQeaABgGdgAXBiYAIATE/84EiAB9BQf/1wUH/9cEdf/3A1r/6QU8/90ERP/MBaoAmgSYAIYFsACfBJcAhgcCAJ8GAwCPBakALgSaAB8FAwATBA4AIAUUAC8EDgAhBGAAYAShABYGgQCyAAAAAAIlAJoAAAABAAEBAQEBAAwA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/8AA4ADv/8AA8AD//8ABAAEP/8ABEAEf/7ABIAEv/7ABMAE//7ABQAFP/7ABUAFP/6ABYAFf/6ABcAFv/6ABgAF//6ABkAGP/5ABoAGf/5ABsAGv/5ABwAG//5AB0AHP/4AB4AHf/4AB8AHv/4ACAAH//4ACEAIP/3ACIAIf/3ACMAIv/3ACQAI//3ACUAJP/2ACYAJf/2ACcAJv/2ACgAJ//2ACkAJ//1ACoAKP/1ACsAKf/1ACwAKv/1AC0AK//0AC4ALP/0AC8ALf/0ADAALv/0ADEAL//zADIAMP/zADMAMf/zADQAMv/zADUAM//yADYANP/yADcANf/yADgANv/yADkAN//xADoAOP/xADsAOf/xADwAOv/xAD0AOv/wAD4AO//wAD8APP/wAEAAPf/wAEEAPv/vAEIAP//vAEMAQP/vAEQAQf/vAEUAQv/uAEYAQ//uAEcARP/uAEgARf/uAEkARv/tAEoAR//tAEsASP/tAEwASf/tAE0ASv/sAE4AS//sAE8ATP/sAFAATf/sAFEATf/rAFIATv/rAFMAT//rAFQAUP/rAFUAUf/qAFYAUv/qAFcAU//qAFgAVP/qAFkAVf/pAFoAVv/pAFsAV//pAFwAWP/pAF0AWf/oAF4AWv/oAF8AW//oAGAAXP/oAGEAXf/nAGIAXv/nAGMAX//nAGQAYP/nAGUAYP/mAGYAYf/mAGcAYv/mAGgAY//mAGkAZP/lAGoAZf/lAGsAZv/lAGwAZ//lAG0AaP/kAG4Aaf/kAG8Aav/kAHAAa//kAHEAbP/jAHIAbf/jAHMAbv/jAHQAb//jAHUAcP/iAHYAcf/iAHcAcv/iAHgAc//iAHkAc//hAHoAdP/hAHsAdf/hAHwAdv/hAH0Ad//gAH4AeP/gAH8Aef/gAIAAev/gAIEAe//fAIIAfP/fAIMAff/fAIQAfv/fAIUAf//eAIYAgP/eAIcAgf/eAIgAgv/eAIkAg//dAIoAhP/dAIsAhf/dAIwAhv/dAI0Ahv/cAI4Ah//cAI8AiP/cAJAAif/cAJEAiv/bAJIAi//bAJMAjP/bAJQAjf/bAJUAjv/aAJYAj//aAJcAkP/aAJgAkf/aAJkAkv/ZAJoAk//ZAJsAlP/ZAJwAlf/ZAJ0Alv/YAJ4Al//YAJ8AmP/YAKAAmf/YAKEAmf/XAKIAmv/XAKMAm//XAKQAnP/XAKUAnf/WAKYAnv/WAKcAn//WAKgAoP/WAKkAof/VAKoAov/VAKsAo//VAKwApP/VAK0Apf/UAK4Apv/UAK8Ap//UALAAqP/UALEAqf/TALIAqv/TALMAq//TALQArP/TALUArP/SALYArf/SALcArv/SALgAr//SALkAsP/RALoAsf/RALsAsv/RALwAs//RAL0AtP/QAL4Atf/QAL8Atv/QAMAAt//QAMEAuP/PAMIAuf/PAMMAuv/PAMQAu//PAMUAvP/OAMYAvf/OAMcAvv/OAMgAv//OAMkAv//NAMoAwP/NAMsAwf/NAMwAwv/NAM0Aw//MAM4AxP/MAM8Axf/MANAAxv/MANEAx//LANIAyP/LANMAyf/LANQAyv/LANUAy//KANYAzP/KANcAzf/KANgAzv/KANkAz//JANoA0P/JANsA0f/JANwA0v/JAN0A0v/IAN4A0//IAN8A1P/IAOAA1f/IAOEA1v/HAOIA1//HAOMA2P/HAOQA2f/HAOUA2v/GAOYA2//GAOcA3P/GAOgA3f/GAOkA3v/FAOoA3//FAOsA4P/FAOwA4f/FAO0A4v/EAO4A4//EAO8A5P/EAPAA5f/EAPEA5f/DAPIA5v/DAPMA5//DAPQA6P/DAPUA6f/CAPYA6v/CAPcA6//CAPgA7P/CAPkA7f/BAPoA7v/BAPsA7//BAPwA8P/BAP0A8f/AAP4A8v/AAP8A8//AAAAAAwAAAAMAAAiEAAEAAAAAABwAAwABAAACJgAGAgoAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAEAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAMEGwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYAAAAfUB9gH4AfoCAQIGAgoCDQIMAg4CEAIPAhECEwIVAhQCFgIXAhkCGAIaAhsCHAIeAh0CHwIhAiACIwIiAiQCJQFsAG8AYgBjAGcBbgB1AIMAbQBpAX0AcwBoAYsAfwCBAYgAcAGMAY0AZQB0AYMBhQGEAMEBiQBqAHkAtQCEAIcAfgBhAGwBhwCTAYoArQBrAHoBcAADAfEB9AIFAJAAkQFiAWMBaQFqAWUBZgCGAY4CJwKWAXQBeQFyAXMBkgNQAW0AdgFnAWsBcQHzAfsB8gH8AfkB/gH/AgAB/QIDAgQAAAICAggCCQIHAIoAmgCgAG4AnACdAJ4AdwChAJ8AmwAEBl4AAADqAIAABgBqAAAAAgANACEAfgCgAKwArQC/AMYAzwDmAO8A/gEPAREBJQEnATABOAFAAVMBXwFnAX4BfwGSAaEBsAHwAfsB/wIZAhsCNwJZArwCxwLJAt0C8wMBAwMDCQMPAyMDigOMA5IDoQOwA7kDyQPOA9ID1gQlBC8ERQRPBGIEbwR5BIYEzgTXBOEE9QUBBRAFEx4BHj8ehR7xHvMe+R9NIAsgFSAeICIgJiAwIDMgOiA8IEQgdCB/IKQgpyCsIQUhEyEWISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK7gL2w/sE/v///f//AAAAAAACAA0AIAAiAKAAoQCtAK4AwADHANAA5wDwAP8BEAESASYBKAExATkBQQFUAWABaAF/AZIBoAGvAfAB+gH8AhgCGgI3AlkCvALGAskC2ALzAwADAwMJAw8DIwOEA4wDjgOTA6MDsQO6A8oD0QPWBAAEJgQwBEYEUARjBHAEegSIBM8E2ATiBPYFAgURHgAePh6AHqAe8h70H00gACATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCnIKshBSETIRYhIiEmIS4hWyICIgYiDyIRIhoiHiIrIkgiYCJkJcruAfbD+wH+///8//8AAQQY//UAAP/iAAD/wAAA/78AAAExAAABLAAAASgAAAEmAAABJAAAASIAAAEcAAABHgAA/wH+9P7nAWEAAAChAGQAZv5h/kAAlv3U/aX9xP2v/aP9ov2d/Zj9hQAA/3D/bwAAAAD9BQAA/1D8+fz2AAD8tQAA/K0AAPyiAAD8nAAA/p4AAP6bAAD8RQAA5VXlFeTF5PjkWeT25ArhVgAA4U3hTOFK4UHjG+E54xPhMOEB4PcAAODRAADgdeBo4GbgW9+P4FDgJN+B3qffdd90323fat9e30LfK98o28QTjgrOAAAClAGYAAEAAAAAAAAA5AAAAOQAAADiAAAA4AAAAOoAAAEUAAABLgAAAS4AAAEuAAABOgAAAVwAAAFoAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAFMAWgAAAGAAAAAAAAAAZgAAAHgAAACCAAAAioAAAI6AAACxAAAAtQAAALoAAAAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqYAAAAAAAAAAwQbAeoB6wHxAfIB8wH0AfUB9gB/Ae0CAQICAgMCBAIFAgYAgACBAgcCCAIJAgoCCwCCAIMCDAINAg4CDwIQAhEAhACFAhwCHQIeAh8CIAIhAIYAhwIiAiMCJAIlAiYAiAHsA/AAiQHuAIoCVQJWAlcCWAJZAloAiwCMAI0CYwJkAmUCZgJnAmgCaQCOAI8CagJrAmwCbQJuAm8AkACRAn4CfwKCAoMChAKFAe8B8ACSAfcCEgCpAKoC+ACrAvkC+gL7AKwArQMCAwMDBACuAwUDBgCvAwcDCACwAwkAsQMKALIDCwMMALMDDQC0ALUDDgMPAxADEQMSAxMDFAMVAL8DFwMYAMADFgDBAMIAwwDEAMUAxgDHAxkAyADJA1oDHwDNAyAAzgMhAyIDIwMkAM8A0ADRAyYDWwMnANIDKADTAykDKgDUAysA1QDWANcDLAMlANgDLQMuAy8DMAMxAzIDMwDZANoDNAM1AOUA5gDnAOgDNgDpAOoA6wM3AOwA7QDuAO8DOADwAzkDOgDxAzsA8gM8A1wDPQD9Az4A/gM/A0ADQQNCAP8BAAEBA0MDXQNEAQIBAwEEBAYDXgNfARIBEwEUARUDYANhA2MDYgEjASQECwQMBAUBJQEmAScBKAEpBAcECAEqASsEAAQBA2QDZQPyA/MBLAEtBAkECgEuAS8D9AP1ATABMQEyATMBNAE1A2YDZwP2A/cDaANpBBMEFAP4A/kBNgE3A/oD+wE4ATkBOgQEATsBPAQCBAMDagNrA2wBPQE+BBEEEgE/AUAEDQQOA/wD/QQPBBABQQN3A3YDeAN5A3oDewN8AUIBQwP+A/8DkQOSAUQBRQOTA5QEFQQWAUYDlQQXA5YDlwFiAWMEGQQYAXcD8QF5AZIDUANYA1kABAZeAAAA6gCAAAYAagAAAAIADQAhAH4AoACsAK0AvwDGAM8A5gDvAP4BDwERASUBJwEwATgBQAFTAV8BZwF+AX8BkgGhAbAB8AH7Af8CGQIbAjcCWQK8AscCyQLdAvMDAQMDAwkDDwMjA4oDjAOSA6EDsAO5A8kDzgPSA9YEJQQvBEUETwRiBG8EeQSGBM4E1wThBPUFAQUQBRMeAR4/HoUe8R7zHvkfTSALIBUgHiAiICYgMCAzIDogPCBEIHQgfyCkIKcgrCEFIRMhFiEiISYhLiFeIgIiBiIPIhIiGiIeIisiSCJgImUlyu4C9sP7BP7///3//wAAAAAAAgANACAAIgCgAKEArQCuAMAAxwDQAOcA8AD/ARABEgEmASgBMQE5AUEBVAFgAWgBfwGSAaABrwHwAfoB/AIYAhoCNwJZArwCxgLJAtgC8wMAAwMDCQMPAyMDhAOMA44DkwOjA7EDugPKA9ED1gQABCYEMARGBFAEYwRwBHoEiATPBNgE4gT2BQIFER4AHj4egB6gHvIe9B9NIAAgEyAXICAgJSAwIDIgOSA8IEQgdCB/IKMgpyCrIQUhEyEWISIhJiEuIVsiAiIGIg8iESIaIh4iKyJIImAiZCXK7gH2w/sB/v///P//AAEEGP/1AAD/4gAA/8AAAP+/AAABMQAAASwAAAEoAAABJgAAASQAAAEiAAABHAAAAR4AAP8B/vT+5wFhAAAAoQBkAGb+Yf5AAJb91P2l/cT9r/2j/aL9nf2Y/YUAAP9w/28AAAAA/QUAAP9Q/Pn89gAA/LUAAPytAAD8ogAA/JwAAP6eAAD+mwAA/EUAAOVV5RXkxeT45Fnk9uQK4VYAAOFN4UzhSuFB4xvhOeMT4TDhAeD3AADg0QAA4HXgaOBm4Fvfj+BQ4CTfgd6n33XfdN9t32rfXt9C3yvfKNvEE44KzgAAApQBmAABAAAAAAAAAOQAAADkAAAA4gAAAOAAAADqAAABFAAAAS4AAAEuAAABLgAAAToAAAFcAAABaAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAAAABTAFoAAABgAAAAAAAAAGYAAAB4AAAAggAAAIqAAACOgAAAsQAAALUAAAC6AAAAAAAAAAAAAAAAAAAAAAC3AAAAAAAAAAAAAAAAAAAAAAAAAAAAswAAALMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmAAAAAAAAAAMEGwHqAesB8QHyAfMB9AH1AfYAfwHtAgECAgIDAgQCBQIGAIAAgQIHAggCCQIKAgsAggCDAgwCDQIOAg8CEAIRAIQAhQIcAh0CHgIfAiACIQCGAIcCIgIjAiQCJQImAIgB7APwAIkB7gCKAlUCVgJXAlgCWQJaAIsAjACNAmMCZAJlAmYCZwJoAmkAjgCPAmoCawJsAm0CbgJvAJAAkQJ+An8CggKDAoQChQHvAfAAkgH3AhIAqQCqAvgAqwL5AvoC+wCsAK0DAgMDAwQArgMFAwYArwMHAwgAsAMJALEDCgCyAwsDDACzAw0AtAC1Aw4DDwMQAxEDEgMTAxQDFQC/AxcDGADAAxYAwQDCAMMAxADFAMYAxwMZAMgAyQNaAx8AzQMgAM4DIQMiAyMDJADPANAA0QMmA1sDJwDSAygA0wMpAyoA1AMrANUA1gDXAywDJQDYAy0DLgMvAzADMQMyAzMA2QDaAzQDNQDlAOYA5wDoAzYA6QDqAOsDNwDsAO0A7gDvAzgA8AM5AzoA8QM7APIDPANcAz0A/QM+AP4DPwNAA0EDQgD/AQABAQNDA10DRAECAQMBBAQGA14DXwESARMBFAEVA2ADYQNjA2IBIwEkBAsEDAQFASUBJgEnASgBKQQHBAgBKgErBAAEAQNkA2UD8gPzASwBLQQJBAoBLgEvA/QD9QEwATEBMgEzATQBNQNmA2cD9gP3A2gDaQQTBBQD+AP5ATYBNwP6A/sBOAE5AToEBAE7ATwEAgQDA2oDawNsAT0BPgQRBBIBPwFABA0EDgP8A/0EDwQQAUEDdwN2A3gDeQN6A3sDfAFCAUMD/gP/A5EDkgFEAUUDkwOUBBUEFgFGA5UEFwOWA5cBYgFjBBkEGAF3A/EBeQGSA1ADWANZAAAAAgBSA/wCPwYYAAQACQAAAQMjETMFAyMRMwEBOHevAT44d68Fj/5tAhyJ/m0CHAAAAgA8AAAEmAWwABsAHwAAASMDIxMjNSETIzUhEzMDMxMzAzMVIwMzFSMDIwMzEyMCq+FMp0znAQU68wERTqdO4E6oTtDuOt37TKd34TrhAZr+ZgGangE5nwGg/mABoP5gn/7Hnv5mAjgBOQAAAQBk/y0EJgabACsAAAE0JicuATU0Njc1MxUeARUjNCYjIgYVFBYXHgEVFAYHFSM1LgE1MxQWMzI2AzNshdfPx7Cgr73ybmRoZGiO18rPuZ+25fOJanF4AXxXbS9JxrOq0RXa3Brty4CPa15YaTJNw7KwyxPDwhPb3pF3agAAAAAFAGT/6wWJBcUADQAbACkANwA7AAATNDYzMhYdARQGIyImNTMUFjMyNj0BNCYjIgYVATQ2MzIWHQEUBiMiJjUzFBYzMjY9ATQmIyIGFQUnARdkopKToqKRk6OpSEVDRkdEREcCE6ORkqOikZKkqUpDR0NIRERH/gV9Asd9BJiDqqqDTYOoqYJCV1dCTUJZWUL8zYKqqoJOg6mpg0FZVUVOQVlZQfhIBHJIAAAAAwA+/+sE+AXFACAAKwA4AAATNDY3LgE1NDYzMhYVFAYPAQE+ATUzFAYHFyEnDgEjIiYFMjY3AQcOARUUFgMUFhc3PgE1NCYjIgY+hYtLRsqzosRlYGQBMSksxUhLyf7nUVO4at79AeJAdzj+uB5KLnwMMDFyOiZURktOAYl6rVxhl1GvwbyKZJZGSP6WQJNWi+Jc7V87OeIgIyQBgxY5ZjFmfgOrMWQ/TCZPMjdUYQABAFIEBAELBhgABAAAAQMjETMBC0J3uQWb/mkCFAAAAAEAgP4xAqIGXwAPAAATEAA3FwYCERUQEhcHJgARgAE1vTCJvLuKML3+ywJQAZECIV2OaP5H/qIU/qL+R2+HXgIfAZIAAQAR/jECOwZfAA8AAAEQAAcnNhIRNRACJzcWABECO/7EvTGHvsKDMb0BPAJA/nP93F6HaAG/AV8UAVoBwWqIXf3Z/nUAAAAAAQAbAk8DYgWwAA4AAAElNwUDMwMlFwUTBwsBJwFF/tY1ASgNrg8BIzX+0cONsa6PA8xZqXUBV/6ic6tY/vZpAR/+6WYAAAAAAQBEAJIEKgS2AAsAAAEhFSERIxEhNSERMwKuAXz+hOz+ggF+7AMh3v5PAbHeAZUAAQAn/qsBZADrAAkAACUUBgcnPgE9ATMBY2hVfyws5Tdn3ElOSJNbvAAAAAABAEcCCQJUAs0AAwAAASE1IQJU/fMCDQIJxAAAAQCZAAABiwDpAAMAACEjNTMBi/Ly6QAAAQAC/4MC/gWwAAMAABcjATPBvwI9v30GLQAAAAIAaP/rBCMFxQANABsAAAEQAiMiAhkBEBIzMhIRJzQmIyIGFREUFjMyNjUEI/vh4f784eH983Z1dXV3dXV0AjH+3v7cASUBIQFNASEBJv7a/t8ltqmptv5ruKmouQAAAAEAygAAAt4FsAAFAAAhIxEhNSUC3vP+3wIUBKCfcQAAAQBRAAAENAXFABgAACkBNQE+ATU0JiMiBhUjNAAzMhYVFAYHASEENPw5Adp2VnBjgnrzAQXq1vCKl/63ApinAgWCn09kgo2BygEH5L+A3qb+pAAAAQBP/+sEFgXFACgAAAEzMjY1NCYjIgYVIzQkMzIWFRQGBx4BFRQEIyIkNTMUFjMyNjU0JisBAYapeWVub2V78wECztn6b2x/cv7x2s7+8POAbnOAdX+pA0ZzbWtxb16v4dTLX6sxLbB2zOHUx2N2eHJ+cgACADgAAARZBbAACgAPAAABMxUjESMRIScBMwEhEScHA6G4uPL9jwYCb/r9hwGHAxcCB8T+vQFDlQPY/FcCVgExAAAAAAEAgf/rBCYFsAAeAAAbASEVIQM+ATc2EhUUAiMiJDU3FBYzMjY1NCYjIgYHnFQDAf3JLCxvSNHk8OvE/vrremVzdXhzZl4XAosDJdL+kyApAgP+/Ora/vTRyQhsdJ2FhqM/PwACAHT/6wRGBcUAGgAnAAABMhYXBy4BIyIGHQE+ATMyEhUUAiMiABkBEAATIgYHFRQWMzI2NTQmAqhQjTouOWdIlK89nWDH3//Y4v7nATy0XX4jkndtd34FxSAcvBgb3cMHODv+89fk/ucBMgEeARYBIgFS/UpAOWi9xLOIhaIAAAEARQAABDMFsAAMAAABAAIDByM3GgE3ITUhBDP/AKsoD/MPJ+bO/P0D7gTt/tP+Mv6ompoBUAIP9MMAAAMAYf/rBCoFxQAXACMALwAAARQGBx4BFRQEIyIkNTQ2Ny4BNTQ2MzIWAzQmIyIGFRQWMzI2AzQmIyIGFRQWMzI2BAV1anqK/vnc3/75iHxqdPHNy/XNh2xug4JxbYQmcF1fbG1gXW4EMHGmLi+1es/T0897tDAtpnHGz8/8o22Eg25wfH0C/WJ5dWZldXUAAAIAUv/rBBcFxQAbACgAACUyNj0BJw4BIyICNTQAMzIAGQEQACMiJic3HgETMjY3NTQmIyIGFRQWAgOFnQMwilXV7AEKy+cBCf7c8EyeRCBAfXhdfSGAemSCdq29vSMBQUIBBPHmASL+3P7k/qv+5v7VHh64GxcB2EY7nLGvt46SpgAA//8AmQAAAYsEOgAmABAAAAAHABAAAANR//8AUf6rAY4EOgAnABD//QNRAAYADioAAAEAPwCkA4QETgAJAAABBxUXBRUBNQEVAUIREQJC/LsDRQJ9BAQE2vMBdcEBdPMAAAIAkQFkA+8D1gADAAcAAAEhNSERITUhA+/8ogNe/KIDXgMMyv2OyQABAIAApQPgBE4ACQAAEzUBFQE1JT8BJ4ADYPygAl0QAREDX+/+jMH+jO/iBAMFAAACACkAAAOgBcUAGQAdAAABPgE3PgE1NCYjIgYVIz4BMzIWFRQGBw4BFRMjNTMBVAE+cFBaZ2NVcvMC8sbW55FyOhwE+PgBnJJ2X06HVmNpWVu5xtPBgdVcM1hY/mTpAAACAEr+OwbTBZAAMwBDAAABBgIjIiYnDgEjIiY3GgEzMhYXBzMDBhYzMjY3EgAhIAADAgAhMjY3Fw4BIyAAExIAISAAAQYWMzI2NzwBNxMuASMiBgbDCeHqTGsZMIdeh44TGeSqcINSAwUzCDMseYwJEf7N/rL+yP6XDxIBRQE8WbFBJkTMZf51/mIREwHLAYMBhgGR+/4KOkc9YSgCLRgzHHl5Afvc/sxST1JN68gBBgEwMzcE/b1nStqtAXcBkv5N/o3+jP5jKCGCKy4B6gG5AbECAf4c/fSIhzBACA8NAgMJC8kAAAAAAgAaAAAFKAWwAAcACwAAASEDIwEzASMBIQMjA7r9z3j3AhfnAhD3/ZsBrNQDAVz+pAWw+lACHwJrAAAAAwCfAAAEvAWwAA8AGAAhAAAzESEyBBUUBgcVHgEVFAQjAREhMjY1NCYjJSEyNjU0JisBnwHo9QEJb2OBiP798f7KATZ+hHB6/rIBD3N+hIf1BbDDymSZJgMcvoHR0QKW/ix0bHZ+tWhlbmcAAQB0/+sE2AXFABsAAAEGACMgABkBEAAhIAAXIy4BIyIGFREUFjMyNjcE1xb+5f3+/f7OATUBAAECARUY8xOPmpirqZqXkRMB2Ob++QFRAREBFQEPAVT+/fCYmOi2/um555SXAAIAnwAABO4FsAAJABMAADMRISAAERUQACEDETMyNj0BNCYjnwHKASoBW/6i/szKw9nNys8FsP6m/uLB/uD+qQTt+9Xqy8PN5gAAAAABAJ8AAAR1BbAACwAAASERIRUhESEVIREhBA/9gwLj/CoDz/0kAn0Cj/4zwgWww/5lAAAAAQCfAAAEcgWwAAkAAAEhESMRIRUhESEEDP2G8wPT/SACegJt/ZMFsMP+QwABAHT/6wTiBcUAHwAAJQYEIyAAGQEQACEgBBcjLgEjIgYVERQWMzI2NxEhNSEE4jz+/NP+8/6yATwBAgEGAQsf7xiPlpq2xaR0iiL+3gIVvlKBAUgBDQEwAQ0BSPTagIvesv7OtN80JQEktgABAJ8AAAUQBbAACwAAISMRIREjETMRIREzBRDy/XTz8wKM8gJt/ZMFsP2AAoAAAAABAK0AAAGgBbAAAwAAISMRMwGg8/MFsAABADr/6wPmBbAADwAAATMRFAQjIiY1MxQWMzI2NQLz8/8A0N/983V0ZncFsPv10OrX239xgnYAAAEAnwAABS8FsAAMAAABIxEjETMRMwEhCQEhAjqo8/OLAckBIP30AjX+1wJ2/YoFsP2XAmn9Sf0HAAAAAAEAnwAABC8FsAAFAAAlIRUhETMBkgKd/HDzwsIFsAAAAQCfAAAGYgWwABAAAAkCIREjERMjASMBIxMRIxEB2gGmAacBO/MZA/5Mo/5OAxnzBbD7mARo+lAB8AKA+5AEbf2D/hAFsAAAAQCfAAAFEAWwAAsAACEjAQcRIxEzATcRMwUQ8v13A/PzAokD8gQrAfvWBbD71gEEKQAAAAIAdP/rBRsFxQANABsAAAEQACEgABkBEAAhIAARJzQmIyIGFREUFjMyNjUFG/61/vH+9v69AUIBCgEPAUzzwKijt7ijqb4CVf7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAAAAgCfAAAE2gWwAAoAEwAAAREjESEyBBUUBCMlITI2NTQmIyEBkvMCOfYBDP709v66AUaKhYWK/roCKP3YBbD1z9Hzw45xcZIAAgB0/wkFJwXFABMAIQAAARQGBxcHJQ4BIyAAGQEQACEgABEnNCYjIgYVERQWMzI2NQUbdGvroP7tLFgv/vb+vQFCAQoBDwFM88Coo7e4o6m+AlWZ+1fSj/oLDQFeAQwBBgELAV/+of71ArXr6rb++Ljr67gAAAAAAgCfAAAE8AWwABoAIwAAAREjESEyFhUUBgceAR0BFBYXFSMuAT0BNCYjJSEyNjU0JiMhAZLzAiX3/Ht5fmkfJ/kpFntx/sYBGpWDfon+1QJc/aQFsNXQdp4yKayGeUF0Ihoii0Z1c4HDbnVxegAAAAEAU//rBKAFxQAlAAABNCYnJiQ1NCQzMgAVIzQmIyIGFRQWFx4BFRQEIyIkNTMUFjMyNgOtg676/v4BH+r0ASLzlo+HjZe47+/+4fHp/qzztJaJlAF2XHMuQs6us+H/AL1yiXNdVWsyQdiwudTu24eBawAAAQA1AAAEtQWwAAcAAAEhESMRITUhBLX+OfP+OgSABO37EwTtwwAAAAEAhv/rBPEFsAARAAABERQEISIkNREzERQWMzI2NREE8f7J/vz//s/zqZSZrwWw/DD3/v/2A9D8MJyXl5wD0AABABoAAAUQBbAACQAAARczNwEhASMBIQJ4HAMbAVsBA/355/34AQQBfW1rBDX6UAWwAAAAAQBEAAAGuwWwABMAAAE1MzUBMwEVPwETMwEjASMBIwEzAgMDARnAARwDAc7u/r7c/uQD/uTc/r7uAYQCAQQp+9QDAQUEKfpQBBz75AWwAAABAC8AAATqBbAACwAACQEhCQEhCQEhCQEhAoYBNAEf/kEB0P7d/sP+xP7hAcn+QQEdA5YCGv0u/SICI/3dAt4C0gAAAAEAEwAABO8FsAAIAAAJASEBESMRASECgAFgAQ/+B/L+DwEPAuwCxPxN/gMCDAOkAAEAWAAABHEFsAAJAAAlIRUhNQEhNSEVAXkC+PvnAtv9KwP6wsKYBFXDkgAAAQCE/rwCHAaOAAcAAAEjETMVIREhAhylpf5oAZgF0PmpvQfSAAAAAAEAFf+DA2EFsAADAAATMwEjFewCYOwFsPnTAAABAAz+vAGmBo4ABwAAEyERITUzESMMAZr+ZqenBo74Lr0GVwABADUC2QM1BbAACQAAASMBMwEjAycjBwEDzgErqwEqzaUNBA0C2QLX/SkBnTw8AAABAAP/QQOYAAAAAwAABSE1IQOY/GsDlb+/AAAAAQBKBLwCFwXGAAMAAAEjASECF8T+9wEUBLwBCgAAAAACAF7/7AQBBE4AHwAqAAAhLgEnDgEjIiY1NDY7ATU0JiMiBhUjNDYzMhYVERQWFyUyNjc1IyIGFRQWAwsLDwQ3nGKns/TlsWRgWGTz9cnB5xEV/exUhSK1bXVOIkQkRlirmqCsX1ZfT0CIxL23/h9FeDyvSDa4Z0k/RwAAAgCA/+wENgYYABIAIAAAARQCIyImJwcjETMRFz4BMzISESM0JiMiBgcRHgEzMjY1BDbZzWaRMxTS8wMxiV7P2fNxgVJsICFtUoFvAfny/uVPT4oGGP2sAURH/sn+963MR0H+N0BErZoAAAAAAQBR/+wD9wROABsAACUyNjUzFAQjIgI9ATQSMzIWFSM0JiMiBh0BFBYCO1t85f7/uPT5+fPH8+V1Yotsaq5nUaDaAS7xI/ABMOG3W3rDmiOdwAAAAgBT/+wEAwYYABIAIAAAExASMzIWFzcRMxEjJw4BIyICNTMUFjMyNjcRLgEjIgYVU9rNWocyA/PSFDWPYcva83F/TmkjI2lMf3MCDgEIAThEQQECTvnohExMARzxma5APgHYPULOqwACAFn/7AP4BE8AFQAdAAAFIgA9ATQAFzISHQEhHgEzMjY3Fw4BAyIGByE1NCYCUOr+8wEL0ODk/VYKiX5kiUJHPcKiW3QSAbRnFAEo8CjxATIB/vvjj4eiLy2mNUMDn411GWmAAAAAAAEAMQAAAuAGLQAXAAAzESM1MzU0NjMyFhcHLgEjIgYdATMVIxHWpaW/syRHLRgWLx1RTNzcA4a0fra/Cwq8BAZYVn60/HoAAAIAVP5MBAgETgAeACwAABMQEjMyFhc3MxEUBCMiJic3HgEzMjY9AScOASMiAjUzFBYzMjY3ES4BIyIGFVTezWKPNBTQ/wDsVbdPNEOPTIR+AzKIW8ve83SAUGkhImlNgHYCDgEHATlQTYn73djzLSqwISaNf1MBQEABHfCYrz8+Ado9Qc+qAAABAH0AAAQMBhgAFAAAARc+ATMyFhURIxE0JiMiBgcRIxEzAXADNZdgsL3zZGhJbibz8wOzAUtR1Of9bQKVgnA6NfzoBhgAAAACAJAAAAGDBhgAAwAHAAAhIxEzESM1MwGD8/Pz8wQ6AQnVAAAC/7D+SwGOBhgADwATAAABERQGIyImJzceATMyNjUREyM1MwGOt6klOCEOEjEVP0bt8/MEOvuHt78ICcIFB1NcBHkBDNIAAAABAIEAAAQ1BhgADAAAASMRIxEzETMBIQkBIQHib/LyaQEPARz+nwGP/uYB2f4nBhj8hAGe/hH9tQAAAAABAJAAAAGDBhgAAwAAISMRMwGD8/MGGAABAIAAAAZ1BE4AJgAAARczPgEzMhYXPgEzMhYVESMRNCYjIgYHFBYVESMRNCYjIgYHESMRAV4NAjSda2yVJzOhcKe5815gUGkZAvNgX0tmHvMEOolMUV5iW2Xb5/10Ao2NbVJJDxYK/UMCjYdzODX85gQ6AAEAfgAABAsETgAUAAABHwE+ATMyFhURIxE0JiMiBgcRIxEBXA4CNZ5mrbnzY2lJbSXzBDqXAVJayd39WAKmfWQ+OPzvBDoAAAIAU//sBDQETgANABsAABM0ADMyAB0BFAAjIgA1MxQWMzI2PQE0JiMiBhVTAQTr7QEF/vzs7f7883qEgnx8hIJ6Aif2ATH+0PcV+P7SAS74osLDoRWexsaeAAAAAgCA/mAENAROABIAIAAAARQCIyImJwcRIxEzFz4BMzISESM0JiMiBgcRHgEzMjY1BDTayl6KMgPz2RA0j2HM2/J6f01pICBoUH94Afnx/uQ/PwH99wXagkpM/sj++KnQQDv+Fzo7s5gAAAAAAgBT/mAD/AROABIAIAAAExASMzIWFzczESMRJw4BIyICNTMUFjMyNjcRLgEjIgYVU9rNXos0E9LzAzGEWcva83F/S2YiI2VJf3MCDgEIAThJSH36JgIDATw8ARzxmbI6OAH4NzzRrAABAIAAAALDBE4AEAAAASciBgcRIxEzFzM+ATMyFhcCpnNIXhrz3g8DKX5VGDAPA1wEOjf9EQQ6mFFbBwUAAAAAAQBR/+wDzwROACUAAAE0JicuATU0NjMyFhUjNCYjIgYVFBYXHgEVFAYjIiY1Mx4BMzI2AuBdhsbD47/K5/JkW1paVIjQwe3J1/HrBH5eYGQBJjlIHSqUhIu9wZhEX046OkEbK5WHlbLWk2BTRgAAAAEAGf/sAnAFQQAXAAABETMVIxEUFjMyNjcXDgEjIiY1ESM1MxEBocPDMSsZLBQaIV4xg4+VlQVB/vm0/apFNgcGshAUmasCVrQBBwABAHv/7AQKBDoAFAAAJScOASMiJjURMxEUFjMyNjcRMxEjAyICNJhnssDyWl9ZdSPz2JABUVTY7wKH/XeRbj48Aw77xgAAAAABACAAAAP1BDoACQAAARczNxMzASMBMwH4FAMU1/v+gNP+fvsBbl9fAsz7xgQ6AAABACUAAAXQBDoAFQAAARczNxMzExczNxMzASMDJyMHAyMBMwGzCgMN1bHWDgMPnun+2MfPFwMWzsf+2OkBdkhGAsb9OlNaAr/7xgKbaGf9ZAQ6AAABACEAAAPtBDoACwAAARMhCQEhCwEhCQEhAgTIARf+rAFe/uzR0f7qAV7+rAEUAscBc/3p/d0BfP6EAiMCFwAAAQAQ/ksD/AQ6ABUAAAEXMxMhAQ4BIyImJzceATMyNj8BASEB5xkD7wEK/kAqmpIeRSAbDi4NRUAlKP53AQkBsnEC+fsicaAMCLwBBEBVYgQtAAAAAQBVAAADxAQ6AAkAACUhFSE1ASE1IRUBggJC/JECIv3pA0rCwp8C18SaAAABADj+mAKRBj0AHgAAAS4BPQE0JiM1MjY9ATQ2NxcOAR0BFAYHHgEdARQWFwJhx6FdZGRdoccwZE9UWVlUT2T+mDjsrstqcrJybMuu6ziMIqR/y2qeLjCeaMt/pCIAAAABAK7+8gFVBbAAAwAAASMRMwFVp6f+8ga+AAAAAQAb/pgCdQY9AB4AABc+AT0BNDY3LgE9ATQmJzceAR0BFBYzFSIGHQEUBgcbY1FXX19XUWMwxqJcZmZcosbbIqR/y2udLSyebct/pCKMOOqvy2xysnJqy6/rOAABAHUBgwTcAy8AGQAAARQGIyImJy4BIyIGFSc0NjMyFhceATMyNjUE3K2IWY1VOVUvPVOqqolXlFI3VDA8VQLumtE/SS4sZUoWmcpCRTAqa0wAAAACAI/+igGCBDoAAwAHAAABIxEzESM1MwGC8/Pz8/6KA8QBAesAAAAAAQBo/wsEDgUmACEAACUyNjUzFAYHFSM1JgI9ATQSNzUzFR4BFSM0JiMiBh0BFBYCUlt85caZyL/AwL/Ior3ldWKLbGquZ1GLzBvp6yMBH9Mj0QEhJOLfG9efW3rDmiOdwAAAAAEAUQAABGsFxQAhAAABFxQGByEHITUzPgE1JyM1Myc0NjMyFhUjNCYjIgYVFyEVAecFLCsC1gH8JgowLgWimwnkx9Pi82tXV2EJAYUCV3FTljvCwg2vYHnE7tPp17prY4F47sQAAAAAAgBd/+UFTwTxACMALwAAJQ4BIyImJwcnNy4BNTQ2Nyc3Fz4BMzIWFzcXBx4BFRQGBxcHARQWMzI2NTQmIyIGBD1OtmZntE2BjYcyMjc2kI2OTKxjYq5NkY6UNDcyMIuO/Hjsrq3s7K2v62s/QEA+hJCJTq9kZ7ZQk5CRODs8OZSRl0+0ZmOtTY2RAnu9/v69u/39AAEAGgAABL4FsAAWAAAJASEBIRUhFSEVIREjESE1ITUhNSEBIQJsAUMBD/5zART+nQFj/p3z/psBZf6bAR/+cQEQAzACgP02k4+S/s4BMpKPkwLKAAIAiP7yAW0FsAADAAcAABMRMxkBIxEziOXl5f7yAxv85QPIAvYAAAACAFr+JASMBcUAMQBDAAABFAYHHgEVFAQjIiQ1NxQWMzI2NTQmJy4BNTQ2Ny4BNTQkMzIEFSM0JiMiBhUUFhceASUuAScOARUUFhceARc+ATU0JgSMV1REQ/707Of+0fKofH2Jgr/34FZTREEBDuvzAQnzin+FgXbI+eD9zSpOJTg0eMY2RCE4O4UBx1+HKzOHY7PCx+MBfGxhT09XOUG1slyJLTOIY63K3dFnhGNPWFM1RLQpCxgOFVQ7Wlk4EBULFlQ6UV8AAAIApATkA3kFsAADAAcAAAEjNTMFIzUzA3ny8v4c8fEE5MzMzAAAAAADAFf/6wXiBcQAGwAnADMAAAEUBiMiJj0BNDYzMhYVIzQmIyIGHQEUFjMyNjUlEAAzMgAREAAjIgADEAAhIAAREAAhIAAEXq6hpLm6o6CwnFhcYGNjYFxX/Q8BUvr5AVL+rvn7/q96AZgBLgEsAZn+Z/7U/tL+aAJUnpzRsnew056cX1SIc3h2hlFihf7z/pwBZAENAQwBYv6e/vQBQQGq/lb+v/6+/lQBqwAAAgB0ArQDEQXFAB8AKgAAAS4BJw4BIyImNTQ2OwE1NCYjIgYVJzQ2MzIWFREUFhclMjY3NSMiBhUUFgJgCAoDIm1PeYCmpYk5O0NHraiPiZoLD/6HNGkTiExROQLCFS8aMDx4bHF2Mz9AMzAOaIGMiP7GNFYrgjkkaT8vLCwAAP//AFQAdAOFA5MAJgFy6N0ABwFyAVL/3QABAH8BdgPCAyUABQAAASMRITUhA8LI/YUDQwF2AQSrAAQAV//rBeIFxAALABcAMgA7AAATEAAhIAAREAAhIAATEAAzMgAREAAjIgABESMRITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMnMzI2NTQmKwFXAZgBLgEsAZn+Z/7U/tL+aHoBUvr5AVL+rvn7/q8BvJcBGZqrPDw/NgcKmwkEQU6ej0VdTGOCAtkBQQGq/lb+v/6+/lQBqwFD/vP+nAFkAQ0BDAFi/p7+qP6vA1KDgTxZHx1qTDgqQBUQFk8rNklChjw4SjgAAAAAAQCHBRIDXgWwAAMAAAEhNSEDXv0pAtcFEp4AAAIAfwOwAosFxQALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBn+Zb22Xl21vmYtINTRGRjQ1SAS4cJ2dcHGXmHA2RkU3N0lJAAACAF8AAAPzBQoACwAPAAABIRUhESMRITUhETMBITUhApwBV/6p1/6aAWbXASj8vQNDA4rH/nUBi8cBgPr2xAAAAQBtApsC1wXHABgAAAEhNQE+ATU0JiMiBhUjNDYzMhYVFAYPASEC1/2hATFCJjI3Pj++qpSOmF96iAFnApuRAQA3RCotNzsxbZGAd1Nya3QAAAAAAQBhAo8C7AXGACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AaJCPEA/Nj6/q4WYqUY+R0qxmIq4v0Q+QkpFR3sEczQxKDQsImh4dXA4WRoYXkVyenh3LDIzLjk2gwAAAAABAHgEvAJMBcYAAwAAASEBIwE3ARX+6b0Fxv72AAAAAAEAkv5gBB8EOgAVAAABERQWMzI2NxEzESMnDgEjIiYnESMRAYRiY1lsHvPfBy50TT9gJ/IEOv2UqnU8PQMS+8ZWNjUaHf4+BdoAAAABAD4AAANwBbAACgAAIREjIiY1NBIzIRECfVPu/v/tAUYCCP/V0wEB+lAAAAEAoAJSAZIDQgADAAABIzUzAZLy8gJS8AAAAAABAG3+QQHJAAMADwAAJQceARUUBiMnMjY1NCYnNwE+C0FVpqEHP0pDVCADNgtRUWh3iSwtLSMFiwAAAAABAGQCmQGjBcUABQAAASMRIzUlAaPAfwE/ApkCf5YXAAIAdwKzAywFxQANABsAABM0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhV3uaGiubmgorqvVldUVldVVVYEdpe4uJd1mLa2mFdlZVd1VGdnVAAA//8AXACXA5kDtgAmAXMIAAAHAXMBfgAA//8AmwAABccFxAAnAckARAKYACcBdAD8AAgABwGXAqIAAAAA//8AkwAABdkFxAAnAXQBAQAIACcByQA8ApgABwHKAwQAAAAA//8AZgAABoMFxwAnAXQBwgAIACcBlwNeAAAABwHLAAYCmwAAAAIAYP52A9gEOgAZAB0AAAEOAQcOARUUFjMyNjczDgEjIiY1NDY3PgE1AzMVIwKsAj1wUlhmZVNyAvMD88TY5pBzOR4E+PgCnZN1XlGFVWNpWlu6xdLAgdZbMlhZAZ3pAAL/9gAAB1cFsAAPABMAACkBAyEDIQEhFSETIRUhEyEBIQMnB1f8fg/+Crj+3gNDA+D9ehECJP3kFAKX+u0BeRsDAVT+rAWwxf5oxf42AWcCggEAAAEATQDWA+wEhgALAAATCQE3CQEXCQEHCQFNATz+xJQBOwE8lP7EATyU/sT+xQFsAUIBQpb+vgFClv6+/r6WAUH+vwAAAwBp/6EFEAXuABkAJAAvAAABEAAhIiYnByM3LgE1ERAAITIWFzczBx4BFQEUFhcBLgEjIgYVITQmJwEeATMyNjUFEP61/vFVkkFYlIVdYQFCAQphpklRlIJSVvxLISIB+i9wRKO3AsIZGf4NKF44qb4CVf7z/qMmJpbiV+2OAQYBCwFfMS+J3Ffegv76TYM2A1woKuq2PnAy/K8dHeu4AAIAlAAABH4FsAAMABUAAAERMzIEFRQEKwERIxETETMyNjU0JiMBh/b3AQr+9vf28/P2ioSEigWw/ujvx8ju/tQFsP4l/hqJaGqLAAABAIj/7ASbBh8AJwAAISMRNDYzMhYVFAYVFAAVFAYjIiYnNx4BMzI2NTQANTQ2NTQmIyIGFQF68vLOrdh2AUTWyVGoKDEsdkBfXP67fl5AXW0EReX1tLB0yz9F/uiNt7AjG8QaJlFITQERlFbPTVFgkocAAAMANP/rBoQETgAsADcAPwAABSImJw4BIyImNTQ2OwE1NCYjIgYVJzQ2MzIWFz4BMzISHQEhHgEzMjY3Fw4BJTI2NzUjIgYVFBYBIgYHITU0JgTmh8hEPdGYuMHt685bWF5q8u/Nbqc5QKVm2uj9UAiKjmR6U0k6xvxuRZApzG94WQNCanMOAb1kFVdVS2GwnaGpR11lWUITk7hBQUBC/v7ojYufLS+lLku5SDK9YEdCTgLnjnsebH8AAAAAAgA8/+sETgXtACEAMQAAARYSHQEQACMiADU0ADMyFhc3LgEnByc3LgEnNx4BFzM3FwM0JjUuASMiBhUUFjMyNjUDcWty/tjl6P7jAQ3iUIs4AxdQOfxO2CNIJ0tRj0IB2k7YASSOaICRlIJ/lwUDef7ExVf++v6/ARXU5wESNS4CWY86jm16FCENxBVFMXtt/RsDDwQxP7KLe6zYrQAAAAMAQwCqBDcEtgADAAcACwAAASE1ISUjNTMRIzUzBDf8DAP0/oHz8/PzAkbUv9379N0AAAADAFP/dgQ0BLwAGQAkAC8AABM0ADMyFhc3MwceAR0BFAAjIiYnByM3LgE1MxQWFwEuASMiBhUhNCYnAR4BMzI2NVMBBOs2YS5IkGhdYP787DFZKkiQZmVm8x0gASoYNR6CegH8Ghr+2xMtG4J8Aif2ATETEZLTS+WSFfj+0g8Ok89J65lPgDACYAsNxp5Gdy/9qwkHw6EAAAIAh/5gBDsGGAATACEAAAEUAiMiJicHESMRMxEXPgEzMhIRIzQmIyIGBxEeATMyNjUEO9rKXooyA/PzAzGKXMzb8np/TWkgIGhQf3gB+fH+5D8/Af33B7j9sgFBRP7I/vip0EA7/hc6O7OYAAIAGAAABZYFsAATABcAAAEzFSMRIxEhESMRIzUzETMRIREzASE1IQUPh4fy/XTzhobzAozy/IICjP10BKSi+/4Cbf2TBAKiAQz+9AEM/YDSAAAAAAEAjwAAAYIEOgADAAAhIxEzAYLz8wQ6AAEAjgAABGsEOgAMAAABIxEjETMRMwEhCQEhAe9v8vJVAVABLP5cAb7+ywGs/lQEOv5QAbD9+v3MAAAAAAEAGwAABCAFsAANAAABJRUFESEVIREHNTcRMwGDAQL+/gKd/HB1dfMDYU64Tv4ZwgJfI7gjApkAAQAbAAACKAYYAAsAAAE3FQcRIxEHNTcRMwGXkZHziYnzA3s0uDT9PQJtMbgxAvMAAQCT/ksFBAWwABgAAAERFAYjIiYnNx4BMzI2PQEBBxEjETMBNxEFBLipJTkhDhE8FjxA/XgD8/MCiAMFsPoRtsAICb8FCF1WPwQdAfvkBbD74wEEHAAAAAEAfv5LBAYETgAgAAABHwE+ATMyFhURFAYjIiYnNx4BMzI2NRE0JiMiBgcRIxEBXA0DNZtkrbm4qSQ6IQ4SOxY8QGBmTGwk8wQ6kQFPV8vi/SC2wAgJxgUHVlUC3oBoNTL84AQ6AAAAAgBl/+sHVgXFABcAJQAAKQEOASMgABkBEAAhMhYXIRUhESEVIREhBTI2NxEuASMiBhURFBYHVvx1XX9E/vf+wwE7AQlGjFADhP0kAn39gwLj+1U3aTU7ZzWjr7EKCwFGAQ8BMAEOAUcMCcP+ZcP+MxQICAQ0BwnJx/7OyMoAAAADAFv/6wbyBE4AIQAvADcAABM0ADMyFhc+ATMyEh0BIR4BMzI2NxcOASMiJicOASMiADUzFBYzMjY9ATQmIyIGFQEiBgchNTQmWwED7H6/QkK1buDk/VYKiX5kikFPQMSIfsFEQr587f788nuEgnt8g4J7A+FbdBIBtWgCJ/cBMFtWVlv+++OPh6MvLp84SFlVVVkBL/iiw8ShFZ7Gxp4BZI50GWiBAAABAIsAAAKVBi0ADwAAMxE0NjMyFhcHLgEjIgYVEYu/syRHLRkXKRxRUgS4tr8LCrkFBlxW+0gAAAH/3f5LAtMGLQAjAAABIxEUBiMiJic3HgEzMjY1ESM1MzU0NjMyFhcHLgEjIgYdATMChMm3qSU5IA8ROhY7QKWlwLMkRi4ZFDEcUU3JA4b8O7e/CAm/BQhdVgPFtH62vwsKvAQGWFZ+AAAAAAIAZv/rBa8GLgAXACUAAAEQACEgABkBEAAhMhYXPgE1MxQGBx4BFSc0JiMiBhURFBYzMjY1BQ3+tf7x/vb+vQFCAQqB1FNTRrx2eiYo88Coo7e4o6m+AlX+8/6jAV4BDAEGAQsBX1dRDYZ+p8slSJ1XArXr6rb++Ljr67gAAAAAAgBS/+wEvASpABcAJQAAEzQAMzIWFz4BNTMUBgceAR0BFAAjIgA1MxQWMzI2PQE0JiMiBhVSAQTrc7NCQCuoXmkeIP787O3+/PN6hIJ8fISCegIn9gExTUgTcmuQriJCj1EV+P7SAS74osLDoRWexsaeAAABAIb/6wZLBhAAGQAAARU+ATUzFAYHERQEISIkNREzERQWMzI2NREE8V1BvKC6/sn+/P/+z/OplJmvBbDNFo6J0eAV/Zb3/v/2A9D8MJyXl5wD0AABAHv/7AUpBJQAHAAAARQGBxEjLwEOASMiJjURMxEUFjMyNjcRMxU+ATUFKX6h2BACNJhnssDyWl9ZdSPzVDAElKunDvzMkAFRVNjvAof9d5FuPjwDDosNZXMAAAH/tf5LAZMEOgAPAAABERQGIyImJzceATMyNjURAZO3qSQ5IQ8SORY7QQQ6+4e3vwgJvwUIXVYEeQAAAAIAWf/sA/gEUAAVAB0AAAEyAB0BFAAnIgI9ASEuASMiBgcnPgETMjY3IRUUFgIA6gEO/vTP4eMCqgyJfGWJQU8/xaVZdBT+S2cEUP7W8Cjy/tABAQPkj4akMC2fN0r8X4x2GWmAAAAAAQCbBOQDPAXuAAgAAAEVIycHIzUlMwM8vJaVugEIjwT8GJKSGvAAAAEAeQTkAy0F8QAIAAABNzMVBSMlNTMB0ovQ/vSd/vXOBWKPEfz6EwABAHUElQL7BbAADQAAARQGIyImNTMUFjMyNjUC+62Wl6y2Q0pJQwWwgpmZgj9MTD8AAAAAAQCaBNcBnQW2AAMAAAEhNSEBnf79AQME198AAAIAggRUAiYF3AALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBoJ6Wlh4d1lbeW46LCs3NyssOgUWVnBwVldra1csOTgtLjo7AAABACn+UgGhADwAEwAAIQ4BFRQWMzI2NxcOASMiJjU0NjcBjFBRICcaKhYVIU03XnV6hjNcOCEjDQqOExlpYFWROwAAAAEAgATWA1EF9wATAAABFAYjIiYjIgYVJzQ2MzIWMzI2NQNRdlxJojQoNYN1XDqwNSc3BdBhhFlALiNgiVk/LwACAHoE5AObBe4AAwAHAAABIQEjAzMDIwKbAQD+1cpu8vW7Be7+9gEK/vYAAAIAq/5+Afr/uAALABcAABc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBqthSUZfXkdKYGUnHhsmJhseJ+dGWVlGRVZWRR0mJxwfJycAAAAB/NsEs/4qBf0AAwAAASMDM/4qmbbQBLMBSgAAAf02BLb+hgYBAAMAAAEzAyP9uM6+kgYB/rUA///8eQTW/0oF9wAHAKD7+QAAAAAAAf0+BOb+mQZ/AA8AAAEnPgE1NCYjNzIWFRQGBxX9UQdNPU5IB6mrVUEE5pIEHSMnIXtlW0VHCEUAAAAAAvwMBOT/NAXuAAMABwAAASMBIQEjAzP+B9D+1QEGAiLD9foE5AEK/vYBCgAB/SL+pf4w/4QAAwAAASE1If4w/vIBDv6l3wAAAQDXBPYCDQZwAAMAAAEzAyMBG/LAdgZw/oYAAAMAnQTkA44GpAADAAcACwAAASM1MwUjNTM3MwMjA47a2v3p2tp4+JWSBOTMzMz0/tcAAP//AKACUgGSA0ICBgB2AAAAAQCfAAAENwWwAAUAAAEhESMRIQQ3/VvzA5gE7fsTBbAAAAAAAgAaAAAFmAWwAAMABgAAATMBISUhAQJz5wI++oIBSALy/pAFsPpQwgPOAAADAGb/6wUNBcUAAwARAB8AAAEhNSEFEAAhIAAZARAAISAAESc0JiMiBhURFBYzMjY1A6P+QAHAAWr+tf7x/vb+vQFCAQoBDwFM88Coo7e4o6m+AnnD5/7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAEAIwAABREFsAAHAAABIwEjATMBIwKbA/6G+wID5wIE/AR0+4wFsPpQAAAAAwBwAAAELQWwAAMABwALAAA3IRUhEyEVIQMhFSFwA738Q2AC9/0JVgOa/GbCwgNMvwMjwwAAAAABAJ8AAAURBbAABwAAISMRIREjESEFEfL9c/MEcgTt+xMFsAABAEcAAARMBbAADAAACQEhFSE1CQE1IRUhAQMW/m0Cyfv7Ac7+MgPf/V4BkgLP/fTDmAJBAj+Yw/32AAADAEsAAAWjBbAAEQAYAB8AAAEWABUUAAcVIzUmADU0ADc1MwEUFhcRDgEFNCYnET4BA3H5ATn+x/ny/P7IATj88v3JqJ2dqAN5p5uaqAT+BP7S+vr+1AKqqgEBK/r7ATADsv0gprQBAr4CuKeotgP9QgG2AAEASAAABVEFsAAXAAABPgE1ETMREAAHESMRJgAZATMRFBYXETMDQoqS8/7m9fLz/uvykYXyAjgXwakB9/4J/v7+1Rn+jQFyGAErAQQB9/4JpsEZA3cAAAABAGwAAATaBcUAJAAAJTYSPQE0JiMiBh0BFBIXFSE1MzcmAj0BEAAhIAARFRQCBzMVIQLfeYGilZWghHz+DOcBcoMBNQEBAQEBN4Vy8f4LyB0BDPhp1tjY1mn5/vQcyMQDXgEho2cBHAFZ/qf+5Gek/uBhxAAAAAACAFb/6wR5BE4AHAArAAABERQWMzI2NxcOASMiJicOASMiAj0BEBIzMhYXNwEUFjMyNjc1ES4BIyIGFQP9JSQHDgYYHzomUmsaM5Bky9vbzV6KNBP+HHF/TGQiImRKf3MEOf0KTzsCArQRDU1UUVABHfEVAQgBOE1Lg/3AmbNGQw0BukVJ0awAAgCW/ncEagXEABQAKgAAATIWFRQGBx4BFRQGIyImJxEjETQkEzI2NTQmIyIGFREeATMyNjU0JisBNQJp0fBhWnqB8tFQkj3yAQ3CbmRrY2N+KnxPdoR3bHkFxNK4YJoxLbqD1eQoK/44Bai37v2ZbWdXeX5k/OEoKodvbpK5AAABACD+XwP1BDoACwAAATMBESMRATMTFzM3Avr7/o/z/o/73RQDFAQ6+/D+NQHQBAv9NF9fAAAAAAIAVP/sBDgGIAAhAC8AABM0NjMyFhcHLgEjIgYVFBYXFhIdARQAIyIAPQE0Nj8BLgETFBYzMjY9ATQmJyIGFdDRwEyYUiw6h0ZQWFBv5Nn++uru/vqyiQReZXZ/g39/jHKBgQTqk6MsKKMWIj00KlAmUf7s0xTw/tgBJO4UqvMjCymI/X2cwsKcFHjKGMOXAAEAYP/sBAwETQAoAAATNDY3LgE1NDYzMhYVIzQmIyIGFRQWOwEVIyIGFRQWMzI2NTMUBCMiJGBmZVlf9NbA/vJ4W2hoYmfHx25ud2xofPL+8cDW/vkBMlx9IiR3SpmisJY9TlI6QEetSE5AVlpBqqusAAAAAQBh/n4DygWwACAAAAEVAQ4BFRQWHwEeARUOAQcnPgE1NCYvAS4BNTQSNxMhNQPK/qN6ZURRbJt5AX5NfTAtPUlSs5CGkOv9xAWwkf5bjsqLXlkTIC5RcU61PGU2UyQjMBIVL6iejQEoqwEOwwAAAAEAfv5hBAYETgAUAAABHwE+ATMyFhURIxE0JiMiBgcRIxEBXA0DNZtkr7fzYWVMbCTzBDqRAU9Xxej7wAQ+gWs3M/zfBDoAAAMAc//rBC4FxQANABYAHwAAARACIyICGQEQEjMyEhEDIRUUFjMyNjUBITU0JiMiBhUELvvh4f784eH98/4rd3V1dP4rAdV2dXV1AjH+3v7cASUBIQFNASEBJv7a/t/+/Gy4qai5ASprtqmptgAAAAABAKn/6wJ+BDkADwAAAREUFjMyNjcXDgEjIiY1EQGcMC4bKRomL1Y3i44EOfzvRDILC7EZE5qqAwoAAAABABb/7gRKBfQAIQAAKQEBJy4BIyIGByc+ATMyFhcBHgEzOgE3Fw4BIyImJwMjBwEf/vcBgVYWOCsRGAsDGFUhZ2sfAbAULCMMEAcEFDAab3YtzwMXBA7IMSoBAbUGCk5V+8QxLQHABAZYfAIkZwAAAQBk/nYD1AXEADEAAAEuASMiBhUUFjsBFSMiBhUUFh8BHgEVDgEHJz4BNTQmLwEuATU0Njc1LgE1NCQzMhYXA4NKYDeDf4OQko+wr4tyapSCAn9MfTQpO0su7uGck293AQHkUoc9BNsTEVpIWGDGjJFvgBgYIlpzTrY6ZDpJLSkqEQszvtaRwS8DJ41hrb4XFAAAAAEAT//rBOoEOgAXAAABIxEUFjMyNjcXDgEjIiY1ESERIxEjNSEEj4cwLhspGiYvVjeLjv628ooEQAN9/atEMgsLsRkTmqoCTvyDA329AAAAAgCA/mAEMQROAA8AHQAAARQCIyImJxEjETQAMzISESM0JiMiBhURHgEzMjY1BDHYyV2LNfMBAtTp8vNxfXBtIGhQfnUB+fL+5Ts8/f0D3/YBGf7K/vat0MuN/vA6O7KZAAAAAAEAUv6KA+kETgAhAAABMhYVIzQmIyIGHQEUFhceARcOAQcnPgE1NCYnLgE9ATQSAjjG6+RnZn91j5+lfgMBfU1/NCk8RvLl/QRO1sJed8mUI4WZLDBVc062O2U6Si0oKw8699gj7QEzAAAAAAIAUv/sBH0EOgARAB8AAAEhBx4BHQEUACMiAD0BNAAzIQEUFjMyNj0BNCYjIgYVBH3++wFVYf785e3++wEE7AI7/Mh6hX54eX+DegN2A0S/chXb/t4BLvgV7gEl/diiwsOhFZW6upUAAQBA/+sD7QQ6ABMAAAEhERQWMzI2NxcOASMiJjURITUhA+3+lTAuGykaJi9WN4uO/rEDrQN5/a9EMgsLsRkTmqoCSsEAAAAAAQCA/+sECAQ6ABUAAAERFBYzMjY1LgEnMx4BFRACIyImNREBclVMeIoDOjTxND/098nUBDr9bYZ07J1/+4pq/pz+/P651+cCkQAAAAIARP4iBYUEQQAZACMAAAUkADU0EjcXDgEHFBYXETQ2MzIAFRQABREjEz4BNS4BIyIGFQJl/uD+/3t2mExHA4yim3/qARz++P7b8/OmlAOGeh4ZDh8BQvGkAQNVkkm7ZpjUIAKEdZD+x+Hl/ssc/jEClB3IjJTCIhcAAAABAE/+IgV+BDoAGwAAARE+ATUuASczHgEVFAAFESMRJAAZATMRFBYXEQNSpZUDPTXuN0L++/7Z8/7+/vLzlYgEOvx9H9aYfPSGaPeX9f69HP4yAdAeASUBHAHp/hW6wRwDggAAAQBm/+sGLQQ6ACgAAAEOAQcUFjMyNjURMxEUFjMyNjUuASczHgEVEAIjIiYnDgEjIgIRNDY3AeVCSANXYldk+2RXYlcESEDxQE3C3nSiLi+gc+DBTEEEOof8gbDZkKMBRf67o5DYsYD9h2r+nP70/sFvb29vAT8BDJz+agAAAAACAHX/7AThBcQAGQAkAAAlMjY3LgE9ATQ2MzIWFREQACEgABkBNxEUFhMUFhcRNCYjIgYVAqmVpgTJ9rubp7v+zP78/wD+zPqm8nVsODk0PLbHtgzvuVu0zs28/gT+7f7AAU0BBgKlAv1ZsdgDL2WECwFZVlJUVAAB/+4AAASFBcIAIwAAAT4BMzIWFwcuASMiBgcBESMRAS4BIyIGByc+ATMyFhcTFzM3AvI5hWogMxgYBBsNIzcR/tvy/twSNiIPGgMXFzEiaoQ5pRMEEwTEjnAJDMACAysn/W398wISAo4nKwMCwAwJbY7+d1VVAAACADP/6wZUBDoAFgAsAAABIx4BFRACIyImJw4BIyICETQ2NyM1IQEuASchDgEHFBYzMjY9ATMVFBYzMjYGVIAaHbbQeKUtLqV30LUbG28GIf7FAyAe/MYeIAJKVFpp+mdbU0sDg02jXf70/sFxcnJxAT8BDF2kTLf9/FOjV1ekUrDZkKPi4qOQ2AAAAAEAJP/xBbsFsAAbAAABIRE+ATMyBBUUBiEnMjY1LgEjIgYHESMRITUhBJH+D06EOPwBFf/+9QGgeAGPjkKFQ/P+dwRtBO3+ZhMY6d/U8bqIfH2HEBD9bQTtwwAAAQBy/+wE1gXGAB8AAAEGACMgABkBEAAhIAAXIy4BIyIGHQEhFSEVFBYzMjY3BNUW/uX9/v3+zgE1AQABAgEVGPMTj5qYqwIB/f+pmpeREwHZ5v75AVEBEQEVAQ8BVP798JiY6LYmwy6555SXAAAAAAIALgAACEMFsAAWAB8AAAERITIEFRQEIyERIREQAiEjNTMyEhkBAREhMjY1NCYjBQoBNPUBEP7w9f3Z/kDs/vMwKJh3A6UBNImKiYoFsP3r/dHR/ATt/iD+Xf6WwgEDAUgCo/0o/eqac3GYAAIAnwAACEoFsAASABsAAAEhETMRITIEFRQEIyERIREjETMBESEyNjU0JiMBkgKM8wE09gEP/vH2/dn9dPPzA38BNIqJiYoDRAJs/cnwycz0AoH9fwWw/Qb+FIttaooAAAEANQAABcsFsAAXAAABIRE+ATMgBBURIxE0JiMiBgcRIxEhNSEEmP4LQ4xPAQEBCfKClkeQR/P+hQRjBO3+jw4P2vX+NgHKmnEQDv1JBO3DAAAAAAEAmf6YBQsFsAALAAATMxEhETMRIREjESGZ8wKM8/5K8/43BbD7EgTu+lD+mAFoAAIAlAAABMEFsAAMABUAAAEhESEyBBUUBCMhESEBESEyNjU0JiMELP1bATT4AQ7+8ff92QOY/VsBNIqJiIsE7f6Q7M7Q8wWw/Qr+CJFybocAAgAm/pkF2wWwAA4AFQAAASMRIREjAzM2EhsBIREzAQYCByERIQXR6fwx7Ad3T3gIJQOPu/yGCVtLAnv+S/6aAWb+mQIpTgEtAR8CVPsSApro/r5wBCsAAAEAGAAAB4kFsAAVAAABIxEjESMBIQkBIQEzETMRMwEhCQEhBPCi8qn+k/7SAdf+SgEkAWGe8pgBXgEk/k0B1P7SAnv9hQJ7/YUDBwKp/ZwCZP2cAmT9WPz4AAAAAQBK/+sEewXFACgAAAEyNjU0JiMiBhUjNCQzMgQVFAYHHgEVFAQjIiQ1MxQWMzI2NTQmKwE1AmiKgI2NcpTzASDZ+AEVeG58gP7V+Nr+zPOcf5CgjpKqA0dza2F8d1673dTMZqMwLKl/zeDU1WSDgWl9csEAAAAAAQCaAAAFCwWwAAsAAAEzESMRIwEjETMRMwQY8/MD/Xjz8wMFsPpQBBj76AWw++kAAQAuAAAFCgWwAA8AAAERIxEhAwoBKwE1Mz4BGwEFCvP+OREPzvY+KIliDBgFsPpQBO3+IP5W/p3CBfYBUAKjAAEAP//rBNkFsAAVAAABFzMBIQEOASMiJic3HgEzMjY/AQEhAmgzAwEvAQz+Cj6WnxlCDAIKPBFMRCAf/g4BCgMekgMk+1KMiwQCwAICRkpFBC4AAAMAT//EBhkF7AAVAB4AJwAAATMgABEQACEjFSM1IyAAERAAITM1MwEiBhUUFjsBETMRMzI2NTQmIwOvDwELAVD+r/72D/MT/vX+sQFPAQsT8/76r7u6sBPzEa28u64FJv66/vL+9P69v78BQQEMAQ8BR8b+cM6+u8gDD/zxyru9zQAAAAEAmf6hBbYFsAALAAATMxEhETMRMwMjESGZ8wKM86sU3fvUBbD7EgTu+xX93AFfAAEAjwAABOkFsAATAAABESMRDgEjICQ1ETMRFBYzMjY3EQTp81CrYf7+/vfzgZdVs1QFsPpQAkEWFdr1Acv+NZtwFhYCqgAAAAEAngAABvwFsAALAAABESERMxEhETMRIREBkQHF8gHB8/miBbD7EgTu+xIE7vpQBbAAAAABAJ7+oQetBbAADwAAAREhETMRIREzETMDIxEhEQGRAcXyAcHzsRTd+eIFsPsSBO77EgTu+xP93gFfBbAAAAAAAgAYAAAF0wWwAAwAFQAAEyERITIEFRQEIyERIQERITI2NTQmIxgCgQE0+AEO/vH3/dn+cgKBATSKiYiLBbD9zezO0PME7f3N/giRcm6HAAADAJ8AAAZZBbAACgAOABcAAAEhMgQVFAQjIREzASMRMwERITI2NTQmIwGSATT4AQ7+8ff92fMEx/Pz+zkBNIqJiIsDfezO0PMFsPpQBbD9Cv4IkXJuhwAAAgCUAAAEwQWwAAoAEwAAASEyBBUUBCMhETMZASEyNjU0JiMBhwE0+AEO/vH3/dnzATSKiYiLA33sztDzBbD9Cv4IkXJuhwAAAQCI/+wE1wXGAB8AABM0ADMyABkBEAAjIAA1MxQWMzI2PQEhNSE1NCYjIgYViAEj//4BL/7R/v79/uHyl5mVpP3zAg2klZiXA9TkAQ7+rf7w/uv+7/6vAQHulZjmuCnDK7jompUAAAACAKr/6wcABcUAFQAjAAABEAAhIAARNSMRIxEzETM1EAAhIAARJzQmIyIGFREUFjMyNjUHAP61/vH+9v69vPPzvAFCAQoBDwFM88Coo7e4o6m+AlX+8/6jAV4BDAj9owWw/XE6AQsBX/6h/vUCtevqtv74uOvruAACAC0AAARiBbAADQAWAAApAQEuATU0JDMhESMRIQEjIgYVFBY7AQEx/vwBSIOBARL7AeTz/t4BIvGPjI2O8QJsOsGO2eL6UAIlAsiFfICKAAIAW//rBDwGEwAbACkAAAEyEh0BFAAjIgA9ARAANz4BNTMUBgcOAQcXPgEXIgYdARQWMzI2PQE0JgJz2fD+/Ozt/vwBBuN6ZsS0znOfIwNFnzKCenqEgnx9A/7+7d8V7f7hASTvZwFlAY0sFzZDxXojFI+GAjhAw6mGFZW1tZUVhqkAAAMAjwAABDoEOgAPABgAIQAAMxEhMhYVFAYHFR4BFRQGIwERITI2NTQmIyUzMjY1NCYrAY8Bt9vrXFduc9zS/vYBCmBbWmH+9shqZWhrxAQ6lJhNdB8DGIRam5oBzf7zQ0NBRq48PkRAAAAAAAEAhQAAA00EOgAFAAABIREjESEDTf4q8gLIA3b8igQ6AAAAAAIAJ/6+BMUEOgAOABUAADc+ATcTIREzESMRIREjEwEOAQchESGBXE0LCwLvlvL9SvYBAgAJRjwBoP7ww2bHyQGB/Ij9/AFC/r4CBQH2rPNYAqcAAAEAFwAABl8EOgAVAAABIxEjESMDIQkBIRMzETMRMxMhCQEhBDSA84D2/swBb/6rASzycvNz8gEt/qoBb/7LAbP+TQGz/k0CQQH5/lcBqf5XAan+B/2/AAABAE3/7APEBE0AKAAAARQGBx4BFRQGIyIkNTMUFjMyNjU0JisBNTMyNjU0JiMiBhUjNDYzMhYDsFZQXF7yy7j+/vJwYGBiWmKurltOVFxUavLxuMveAxJKdyQhfV2bq6uqQVpVQU9Gr0RCPFBOPZawoQAAAAEAhgAABBIEOgALAAABMxEjEScBIxEzERcDIPLyA/5b8vIDBDr7xgLUAf0rBDr9LgEAAAABAI8AAARlBDoADAAAASMRIxEzETMBIQkBIQH9e/PzawErASz+eQGo/sQBrP5UBDr+UAGw/fr9zAAAAAABAB8AAAQUBDoADwAAAREjESEDCgErATczMjY3EwQU8/7QCw+m3jQBJGY+CxQEOvvGA3b+9/6y/uHNqfcBzQAAAQCPAAAFbwQ6AA4AAAkBIREjEScBIwEHESMRIQL/AUABMPMD/tml/tgD8wEyASsDD/vGAsQB/TsCyQH9OAQ6AAEAhgAABBEEOgALAAAhIxEhESMRMxEhETMEEfP+W/PzAaXzAbX+SwQ6/j0BwwAAAAEAhgAABBIEOgAHAAAhIxEhESMRIQQS8/5a8wOMA3b8igQ6AAEAIwAAA9AEOgAHAAABIREjESE1IQPQ/qHz/qUDrQN5/IcDecEAAAADAFT+YAV/BhgAHwAtADsAABMQEjMyFhcRMxE+ATMyEhEVFAIjIiYnESMRDgEjIgI1JTQmIyIGBxEeATMyNjUhFBYzMjY3ES4BIyIGFVTKwidDIPIgSS3Cy8vALUoh8h9FKMDKBDhqdBgoEhEpGnNp/LpidBclEhIlFXRkAg4BCQE3Dg4B5v4WEBD+yf73FfL+5BAO/lcBpQ0NARzyFazRBwb9OQYEs5mbsQQGAsoEBs+uAAABAIb+vwSlBDoACwAAEzMRIREzETMDIxEhhvMBpvOTFN380gQ6/IgDePyI/f0BQQABAF8AAAPgBDsAEwAAISMRDgEjIiY1ETMRFBYzMjY3ETMD4PMxYjPd6/NlcDVfMvMBaQsLytIBTP60dmILDAIMAAAAAAEAhgAABgMEOgALAAABESERMxEhETMRIREBeQFS8wFT8vqDBDr8iAN4/IgDePvGBDoAAAABAH7+vwa1BDoADwAAAREhETMRIREzETMDIxEhEQFxAVLzAVPyuhTd+roEOvyIA3j8iAN4/Ij9/QFBBDoAAAAAAgAfAAAE6gQ6AAwAFQAAATMyFhUUBiMhESE1IRkBMzI2NTQmIwJK7dDj5M/+IP7IAivtZFxcZALiyKimzAN3w/3l/qNgS0xmAAAAAAMAjwAABckEOgAKAA4AFwAAATMyFhUUBiMhETMBIxEzAREzMjY1NCYjAYLt0OPkz/4g8wRH8/P7ue1kXFxkAuLIqKbMBDr7xgQ6/eX+o2BLTGYAAAIAjwAABCIEOgAKABMAAAEzMhYVFAYjIREzGQEzMjY1NCYjAYLt0OPkz/4g8+1kXFxkAuLIqKbMBDr95f6jYEtMZgAAAQBR/+sD6AROAB0AAAEiBhUjNDYzMhIdARQCIyImNTMUFjMyNjchNSEuAQIBV3Tl/LTo///nw+7lcFxwdQv+rAFTD3MDi2hQn9z+ze0j7v7O4LdbeqKBqHyXAAACAJD/7AYvBE4AEwAhAAABMz4BMzIAHQEUACMiJicjESMRMwEUFjMyNj0BNCYjIgYVAYPRGv3S7QEF/vzs2f8Vz/PzAb56hIJ8fISCegKI0Pb+0PcV+P7S/9n+PAQ6/diiwsOhFZ7Gxp4AAAACACcAAAPfBDoADQAWAAABESMRIwMjEy4BNTQ2MwMUFjsBESMiBgPf8uPn/P9maefPw1tb7eBiYQQ6+8YBjf5zAbUqmmebv/6gQFkBOF4AAAH/4f5LBAwGGAAoAAABIRUXPgEzMhYVERQGIyImJzceATMyNjURNCYjIgYHESMRIzUzNTMVIQJw/wADNZdgsL22qSU6IQ8ROxY7QGRoSW4m85yc8wEABK77AUtR1Of9Lre/CAm/BQhcVwLUgnA6NfzoBK6qwMAAAAEAWP/sA/4ETgAdAAAlMjY1MxQEIyICPQE0EjMyFhUjNCYjIgYHIRUhHgECQlt85f7/uPT5+fPH8+V1YnxwCQFW/qsLbq5nUaDaAS7xI/ABMOG3W3qegqiAlQAAAgAfAAAGmgQ6ABYAHwAAAREzMhYVFAYjIREhERACKwE/ATI2NREBETMyNjU0JiMD+u3Q4+PQ/iD+7b7jNAEkZFkC+e1jXVxkBDr+h7+foMMDdv73/r3+1sUByN8Bzf3F/sFeR0NXAAACAIYAAAaxBDoAEgAbAAABIREzETMyFhUUBiMhESERIxEzAREzMjY1NCYjAXkBpfPt0OPj0P4g/lvz8wKY7WNdXWMCnwGb/oe/n6DDAd3+IwQ6/cX+wV9GQ1cAAAH/9QAABAwGGAAcAAABIREXPgEzMhYVESMRNCYjIgYHESMRIzUzNTMVIQKE/uwDNZdgsL3zZGhJbibziIjzARQEtf7+AUtR1Of9bQKVgnA6NfzoBLWqubkAAAAAAQCG/poEEgQ6AAsAAAERIREzESERIxEhEQF5Aabz/rXz/rIEOvyIA3j7xv6aAWYEOgAAAAEAjf/rBrIFsAAgAAABERQGIyImJw4BIyImNREzERQWMzI2NREzERQWMzI2NREGsvbOcKo2OLBxye/zaVxod/dwY2JvBbD79drgUlRUUuDaBAv79X17en4EC/v1fXt6fgQLAAABAHD/6wXtBDoAIAAAAREUBiMiJicOASMiJjURMxEUFjMyNjURMxEUFjMyNjURBe3du2KVMDSaY7fW81BKV2L0WFNOVwQ6/VHN00ZISEbSzgKv/VFybG1xAq/9UXJsbXECrwAAAv/gAAAEIQYYABIAGwAAASERMzIWFRQGIyERIzUzETMRIQERMzI2NTQmIwKj/t7t0OPj0P4grq7zASL+3u1kXF1jBDn+ytGur9UEOasBNP7M/Vz+gmpUUW8AAAABAKL/7Aa2BcYAJwAAATM1EAAhIAAXIy4BIyIGHQEhFSEVFBYzMjY3MwYAIyAAETUjESMRMwGVvQE1AQABAgEVGPMTj5qYqwHs/hSpmpeRE/MW/uX9/v3+zr3z8wNQEwEPAVT+/fCYmOi2FcQ+ueeUl+b++QFRARE+/XQFsAAAAAEAhv/sBb4ETgAjAAABMzYSMzIWFSM0JiMiBgchFSEeATMyNjUzFAQjIgInIxEjETMBeaES9+HH8+V1YnpwCgF4/ocKb3xbfOX+/7ji9xKh8/MCctcBBeG3W3qaf6uCl2dRoNoBBNf+OQQ6AAIAIAAABQ4FsAALAA8AAAEjESMRIwMjATMBIwEhAyMDhITdd5H7AgfnAgD7/dgBW6sDAaz+VAGs/lQFsPpQAmcB/wAAAgAKAAAERQQ6AAsAEQAAASMRIxEjAyMBMwEjATMDJyMHAuRdw1to9wGp5wGr9/5c+GQXBBcBF/7pARf+6QQ6+8YBxAEGXl4AAgC2AAAHJwWwABMAFwAAASEBMwEjAyMRIxEjAyMTIREjETMBIQMjAakBawEs5wIA+4+E3XeR+5j+2PPzAlsBW6sDAmcDSfpQAaz+VAGs/lQBrP5UBbD8twH/AAACAJ0AAAYYBDoAEwAZAAABMxMzASMDIxEjESMDIxMjESMRMwEzAycjBwGQ/vjnAav3al3DW2j3bbrz8wHt+GQXBBcBxAJ2+8YBF/7pARf+6QEX/ukEOv2KAQZeXgAAAAACAIQAAAZpBbAAHAAfAAABHgEVESMRNCYrAQcRIxEnIyIGFREjETQ2ITMBIQETIQR0+vvzfZBpCfICgJB88/8BAAz+hQTc/ZLy/hwDKwPS8v6cAWSVbRH9qwJjA22V/pwBZPXSAoX9hgG1AAACAIIAAAVkBDoAGgAdAAAzNTQ2NwEhAR4BHQEjNTQmKwEHESMRIyIGHQEBEyGCycr+6wP0/urCxPNmdiQB8i13ZQGFlf7Wqd3MDQHb/iQQzNmpqZBrA/5fAaRrkKkCaQEiAAAAAgCtAAAIrgWwACQAJwAAIRE0NjchESMRMxEhOwEBIQEeARURIxE0JisBBxEjEScjIgYVEQETIQLJGx7+nvPzAxAYDP6FBNz+hPr7832QaQnyAoCQfAIL8v4cAWRRfjT9mQWw/XsChf17A9Ly/pwBZJVtEf2rAmMDbZX+nAM2AbUAAAAAAgCPAAAHdwQ6ACEAJAAAITU0NjchESMRMxEhASEBHgEdASM1NCYrAQcRIxEjIgYdAQETIQKVGhz+t/PzAqT+7QP0/urCxPNmdiQB8i13ZQGFlf7WqVB8M/5YBDr+KAHY/iQQzNmpqZBrA/5fAaRrkKkCaQEiAAAAAgAp/kADqgd4AC0ANgAAATI2NTQmIyE1ITIEFRQGBxUeARUUBCsBIgYVFBYXBy4BJzQ2OwEyNjU0JisBNQE3MxUFIyU1MwGQiH5/gP7lARvmAQx5b4KH/vfgNUU9VkJRhqEBtKkzeIaWlY8BBYvQ/vSd/vXOA05vZFtuxse9caAsAyqqgM7fNjFCSx6ZKbOBjYh8Znp5xwObjxH8+hMAAAIAM/5HA4gGCwAtADYAAAEyNjU0JiMhNSEyFhUUBgcVHgEVFAYrASIGFRQWFwcuASc0NjsBMjY1NCYrATUTNzMVBSMlNTMBl3Rqb2/+5QEb1vpeV2lt880xSUBTPlJ6nwGuoTBreIGAl9eL0P70nf71zgJvS0Q8R7mdlFB2IwMhd1WbqjYxQkseki+ueYWBT0FKSakDDY8R/PoTAAMAav/rBREFxQANABYAHwAAARAAISAAGQEQACEgABEFITU0JiMiBhUFIRUUFjMyNjUFEf61/vH+9v69AUIBCgEPAUz8SwLCwKijtwLC/T64o6m+AlX+8/6jAV4BDAEGAQsBX/6h/vUxM7Xr6rbeKrjr67gAAwBS/+wEMwROAA0AFAAbAAATNAAzMgAdARQAIyIANQEyNjchHgETIgYHIS4BUgEE6+0BBf787O3+/AHxcnoO/gsNenJxeQ4B8w97Aif2ATH+0PcV+P7SAS74/pyXhISXAt2XgICXAAABABEAAATvBcMAEQAAARczNxM+ATMXByMiBgcBIwEhAlwbAxvpNJJ9LgEULzsW/pLn/gwBBAGLcG4C/aiVAdA9RPuPBbAAAAABACAAAAQYBE4AFQAAARczNxM+ATMyFhcHLgEjIgYHASMBMwHjEgQSei6SaSExGBcEGw0jOg3+9tP+kvsBblpaAb6UjgkNwAIENir84gQ6AAQAav92BREGLgADAAcAFQAjAAABIxEzEyMRMwEQACEgABkBEAAhIAARJzQmIyIGFREUFjMyNjUDIMbGAcXFAfD+tf7x/vb+vQFCAQoBDwFM88Coo7e4o6m+BIQBqvlIAbQBK/7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAAAAAQAU/+IBDQEtAADAAcAFQAjAAABIxEzAyMRMyU0ADMyAB0BFAAjIgA1MxQWMzI2PQE0JiMiBhUCori4A7e3/bQBBOvtAQX+/Ozt/vzzeoSCfHyEgnoDGwGZ+tQBoP/2ATH+0PcV+P7SAS74osLDoRWexsaeAAAAAAMAjf/rBqcHRAAsAD4ARAAAATIWFREUBiMiJicOASMiJjURNDYzFSIGFREUFjMyNjURMxEUFjMyNjURNCYjExUjIiQjIgYdASM1NDYzMgQzASc3JzMVBO7J8PDJcK03Oa1vye/vyVxpaVxod+x1aVxqalxqJIT+0CoyN4Z4c0gBKnL+N1E6AboFsO/m/eTm7k9RUU/u5gIc5fDDiIr95IuHen4Bi/51fnqHiwIciogB34Z4MjQSJW9qeP5LPXCPfQAAAAADAHT/6wXRBeMALAA+AEQAAAEyFh0BFAYjIiYnDgEjIiY9ATQ2MxUiBh0BFBYzMjY9ATMVFBYzMjY9ATQmIxMVIyIkIyIGHQEjNTQ2MzIEMwUHJzcnMwQ6ud7Ws2GUMTKUX7XU3LtOVk9HUV7sXVNGUFdNvSSF/tAqMjaHeHNJASly/tmiUToBugRH3tb119xHSklI3Nf11t7Dd3r1e3ZtccbGcW13evV6dwHnhngyNBIlb2p48L49b4kAAAIAjf/rBrIHBwAHACgAAAE1IRchFSM1BREUBiMiJjURIxEUBiMiJjURIxEUFjMyNjceATMyNjURAesDVQH+prUCjW9iY3D3d2hcafPvyXGwODaqcM72BpdwcH9/5/v1fnp7fQQL+/V+ent9BAv79drgUlRUUuDaBAsAAAACAHD/6wXtBbEABwAoAAABNSEXIRUjNQERFAYjIiY1ESMRFAYjIiY1ESMRFBYzMjY3HgEzMjY1EQGXAzgF/rG1AipXTlNY9GJXSlDz1rdjmjQwlWK73QVBcHB/f/75/VFxbWxyAq/9UXFtbHICr/1RztJGSEhG080CrwAAAQBq/ooEuAXFABgAAAEjESYCNREQACEgABUjNCYjIgYVERQWOwEDMPLa+gEwAQABAQEd85OYl6enl5b+igFoIAFF9gEVARABU/797ZWY57f+6bnnAAAAAAEAXP6JA/METgAYAAABIxEmAj0BNBIzMhYVIzQmIyIGHQEUFjsBAtXzvcn+6MLv5XBcf3RzgZL+iQFqIQEk0yPtATPitlt6yZQjmMYAAAAAAQBtAAAEkwU+ABMAAAEFByUDIxMlNwUTJTcFEzMDBQclAlsBIUj+3bWv4f7fRwElyv7eSQEjuazkASVM/uABwayAqv7BAY6rgKsBaKuCqwFG/murf6oAAAH8ZgSi/zkF/QAHAAABFSc3IScXFf0XsQECIgGxBSB+Ae5sAdwAAAAB/HMFF/9tBhUAEQAAATIkMzIWHQEjNTQmIyIEKwE1/JV0AS1JdXmIODIr/s2GJAWdeGpvJRI0MniGAAAB/XsFFv5yBmAABQAAATUzBxcH/Xu9ATtSBdyElnBEAAH9pQUW/pwGYAAFAAABJzcnMxX991I7Ab0FFkRwloQACPok/sQBvwWvAA0AGwApADcARQBTAGEAbwAAATQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFRM0NjMyFhUjNCYjIgYVATQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFQE0NjMyFhUjNCYjIgYVATQ2MzIWFSM0JiMiBhUTNDYzMhYVIzQmIyIGFf0RcGJjcHAvNDIvAd5xYGJycS80MS5IcGJicXAvNDMu/stxYGJxcC80MS/9T3BiY3BwLzQyL/1NcWJjcHAvNDIv/t5xYWNwcC41Mi81cWFjcXEuNTIuBPNVZ2dVLDk5LP7rVWdnVSw5OSz+CVVnZ1UsOTks/flVZ2dVLDk5LP7kVmZmVi04OC0FGlVnZ1UsOTks/glVZ2dVLDk5LP35VWdnVSw5OSwAAAAI+k3+YwGMBcYABAAJAA4AEwAZAB4AIwAoAAAFFwMjEwMnEzMDATcFFSUFByU1BQE3JRcGBQEHBSclAycDNxMBFxMHA/5QC3pgRjoMemBGAh0NAU3+pvt1Df6zAVoDnAIBQEQl/wD88wL+wEUBJisRlEHGA2ARlELEPA7+rQFhBKIOAVL+oP4RDHxiRzsMfGJHAa4QmUQXsfyOEZlFyALkAgFGRf7V/OMC/rtHASsAAAL/4AAABCEGYgASABsAAAEhETMyFhUUBiMhESM1MzUzFSEBETMyNjU0JiMCo/7e7dDj49D+IK6u8wEi/t7tZFxdYwUF/f7Rrq/VBQWrsrL8kP6CalRRbwADAJ8AAATaBbAAAwAOABcAAAEHATcBESMRITIEFRQEIyUhMjY1NCYjIQTabv5sbv5M8wI59gEM/vT2/roBRoqFhYr+ugIjZAG/ZP5G/dgFsPXP0fPDjnFxkgAAAAMAgP5gBDQETgADABYAJAAAJQcBNyUUAiMiJicHESMRMxc+ATMyEhEjNCYjIgYHER4BMzI2NQQtb/6XbwFw2speijID89kQNI9hzNvyen9NaSAgaFB/eA1jAaFkSvH+5D8/Af33BdqCSkz+yP74qdBAO/4XOjuzmAAAAAABAJQAAAQ0BxAABwAAASERIxEhETMENP1T8wKt8wTt+xMFsAFgAAAAAQB+AAADXAV0AAcAAAEhESMRIREzA1z+FPIB6/MDdvyKBDoBOgAAAAEAn/7GBJ0FsAAVAAABIREzIAAREAIhJzI2NS4BKwERIxEhBDf9W7EBIAE6+f78AZhzAbC2sfMDmATt/lb+1f7k/vv+z7rKq8PB/YcFsAAAAQB+/uID2wQ6ABUAAAEhFTMyBBUUAgcnPgE1NCYrAREjESEDRv4qU/UBI76+VHVonIlT8gLIA3bl+umL/vAxrSiLbImQ/jkEOgAAAAEAlAAABSwFsAAUAAAJAiEBIxUjNSMRIxEzETM1MxUzAQUE/nsBrf7O/s1Do1rz81qjOwEhBbD9Wfz3AnTq6v2MBbD9lf7+AmsAAAABAI4AAASuBDoAFAAACQIhAyMVIzUjESMRMxEzNTMVMxMElP7EAVb+y9gvm1fy8lebJ88EOv3+/cgBrLKy/lQEOv5Qx8cBsAABADQAAAahBbAADgAAASMRIxEhNSERMwEhCQEhA6yo8/4jAtCLAckBIP30AjX+1wJ2/YoE7cP9lwJp/Un9BwAAAQA+AAAFqQQ6AA4AAAEjESMRITUhETMBIQkBIQNBe/P+awKIawErASz+eQGo/sQBrP5UA3bE/lABsP36/cwAAAEAnwAAB4QFsAANAAABIREhFSERIxEhESMRMwGSAowDZv2M8v108/MDMAKAw/sTAm39kwWwAAAAAQB+AAAFZwQ6AA0AAAEhESEVIREjESERIxEzAXEBpQJR/qLz/lvz8wJ3AcPE/IoBtf5LBDoAAAABAJ/+xAfvBbAAFwAAATMgABEQAiEnMjY1LgErAREjESERIxEhBRGEASABOvn+/AGYcwGwtoTy/XPzBHIDQf7V/uT++/7Pusqrw8H9iQTt+xMFsAABAH7+5Qa7BDoAFwAAATMyBBUUAgcnPgE1LgErAREjESERIxEhBAqE/wEuvr5VdGoBppOE8/5a8wOMApX66Yz+8DGuJ4xsiY/+NgN2/IoEOgAAAAACAGn/6AXMBcUAKQA3AAAFIiYnDgEjIAARNRAAMxUiBh0BFBIzMjY3JgI9ATQSMzISERUUBgceATMBFBYXPgE9ATQmIyIGFQXMcsZaS6Fa/tn+nAEI22181bwYLhhxdOW+xexhXi5kOP2NZmdSVmFdWF8YIyUjIgGEAS+2AREBYMzpurjb/vMEBGMBB6LU8QE0/sb+/9SX/GELCgIdi9VJRs6B5a6ytqMAAAAAAgBh/+sEyQROACkAOAAABSImJw4BIyIAPQE0EjMVDgEdARQWMzI2Ny4BPQE0NjMyFh0BFAYHHgEzATU0JiMiBh0BFBYXPgE1BMlhpEg9g0rv/t7VsEJJlIMIEQxIR7GZm7hCPyZRLv7pOjQ1ODw8MTISGhwdHAFB/EvRAQrKBJN4TabMAQFKum5/vOn+x35rtEgJCAGAgGqIemWEVos1MIRTAAABAC7+oQaxBbAADwAAASE1IRUhESERMxEzAyMRIQGU/poDvf6cAozzqxTd+9QE7cPD+9UE7vsV/dwBXwABACb+vwU6BDsADwAAASM1IRUjESERMxEzAyMRIQEb9QLE3AGm85MU3fzSA3fExP1LA3j8iP39AUEAAAACAIIAAATcBbAAAwAXAAABIxEzAREjEQ4BIyAkNREzERQWMzI2NxEDLqOjAa7zUKth/v7+9/OBl1WzVAEsAtsBqfpQAkEWFdr1Acv+NZtwFhYCqgACAHQAAAP1BDsAAwAXAAAlIxEzASMRDgEjIiY1ETMRFBYzMjY3ETMCjaSkAWjzMWIz3evzZXA1XzLzzAJf/NUBaQsLytIBTP60dmILDAIMAAEAigAABOQFsAATAAAzETMRPgEzIAQVESMRNCYjIgYHEYrzUKthAQEBCvOCllezUgWw/b4VF9v0/jUBy5pxGBT9VgAAAgAg/+kFwAXEAB0AJgAABSAAETUuATUzFBYXEAAXIAARFSEVFBYzMjY3Fw4BASE1NCYjIgYVA+L+yf63oKKyRUsBQfUBEQEX/JW90G6eTzE1xf3hAniPppuoFwFUASJKF86sWnIVARMBWAH+nf6/hDzD6CghvCA4A2kftdHptwAC/87/7AR2BE8AGwAjAAAFIgAnLgE1MxQWFz4BFzISHQEhHgEzMjY3Fw4BAyIGByE1NCYCzub+9AWEhaoyNiH8teDk/VYKiX5kiUJHPcKiW3QSAbRnFAEd6R68l0pjGMXsAf7744+Hoi8tpjVDA5+NdRlpgAAAAAABAJT+xATnBbAAGAAAASMRIxEzETMBIQEWEhUQAiEnMjY1LgErAQGYEfPzcwHCAST+Gu7/+f78AZh0AbG29QJ4/YgFsP2hAl/9ix7+3P7++/7Ousqsw8AAAQCO/uoEQwQ6ABYAAAEeARUUAgcnPgE1LgEnIxEjETMRMwEhAs2tvr2+VXVpAZGGrvLyVQFBAS0CYSnbtYj++S+tJoRnfn4I/lQEOv5QAbAAAAAAAQCf/ksFEAWwABcAAAERIREzERQGIyImJzceATMyNjURIREjEQGSAozyt6klOiAOETsWPEH9dPMFsP2AAoD6EbbACAm/BQhdVgKs/ZMFsAABAH7+SwQJBDoAFwAAAREhETMRFAYjIiYnNx4BMzI2NREhESMRAXEBpfO4qSQ6IQ8ROxY7Qf5b8wQ6/j0Bw/uHtsAICb8FCF1WAfT+SwQ6AAIAU//qBRsFxQAWAB4AAAEgABEVEAAlIAARNSE1NCYjIgYHJz4BEzI2NyEVFBYCcwFKAV7+q/7+/sn+xgPW0uR2p1IxN8/robgL/R6wBcX+lv7Mov7X/o4BAWEBQoQV0/8pILwfOvrx6L0fttAAAAABAF3/6wRGBbAAGgAAARcBHgEVFAQjIiQ1MxQWMzI2NTQmKwE1ASE1BBsB/n/Q2/7o6cz+5POGb3+PlJmOAWr9kAWwm/5FGOPHzeDU1WSDgWmVhasBkcMAAQBd/nUERgQ6ABoAAAEhNSEXAR4BFRQEIyIkNTMUFjMyNjU0JisBNQL0/ZsDjAH+iMzW/ujpzP7k84Zvf4+UmY8DdsSb/kMZ48XL4dTUYoOCZ5WEqwAA//8AO/5LBIkFsAAmAKxSAAAmAdOkKQAHAZoBNQAAAAD//wA0/kkDogQ6ACYA51UAACcB0/+d/3oABwGaAQv//gACAFQAAASABbAACgATAAABETMRISIkNTQkMwERISIGFRQWMwOO8v3Z9v7xAQ73ATX+y4uHiIoDlAIc+lD80dD3/S4CD5Jwc5oAAAAAAgBmAAAGpQWwABgAIQAAISIkNTQkMyERMxE3PgE3NiYnMx4BBwYEIyURISIGFRQWMwJr9v7xAQ73ATXyTGVpBAEfHuwiIwIE/wDB/sL+y4uHiIr80dD3Ahz7EgEBdm9OolBlkknR2MICD5Jwc5oAAAIAXv/pBn4GGAAiADMAABMQEjMyFhcRMxEGFjM+ATc2JiczHgEHAgAjBiYnDgEjIgI1AS4BIyIGHQEUFjMyNjcuATVe2s1UgTPzAk1Ed38EAR4f7CIjAgT+6tOAqiw1l2rL2gKvI2NEf3Nxf0lmIwMDAg4BCAE4PTsCQvtPU2UBuahjyGiBtV3+8f7pAlVgWVoBHfEBJjI2zqsVma86OA8iEwAAAQA7/+gF4QWwAC0AAAE0JisBNTMyNjU0JiMhNSEyBBUUBgcXHgEdAQYWMz4BNzYmJzMeAQcCACMGJicCpntr1JuehYCP/qABYP4BBHx6AYJvAT42anIEAR4f7CMiAgT+9cunsAgBeG2BxW55aXDF0c90ojADJaiARD1KAbipY8hoiK9c/vD+6gOdsQABAC//4gT/BDoALgAAJQYWMz4BNzYmJzMeAQcOASMGJic1NCYrASczMjY1NCYjISchMhYVFAYHFx4BHQEDAQEhLFpfBAEfH+wjIwIF77WjmwhRTukCt2ddXmb++gYBDNbhVlYBZFbrKy0BjYJNoVFoj0jb4wNwhEs8QL1EQ0ZQw6ecUW8jAxp1WT4AAAIASf6sBCQFsAAhACsAABMnMzI2NTQmIyEnITIEFRQGBx4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzlwHIlYSBiv7gAwEj9wEGc3N+aiAm+ikWfXICmmhVfyws5QJcw291b3vD2M9zoDMorYR4QXgiFyKLR3Rzgf3cZ9xJTkiTW7wAAAIAdf6cBAsEOgAhACsAABM1MzI2NTQmIyEnITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzs+VpZGZn/uEEASPW61dXYVMXHfsdDmJfAl5oVX8sLOUBnLNJRUdVwa+gUnMoIYJhVSdZFBEUYTFTT1T+jGfcSU5Ik1u8AAAAAAEAQ//oB34FsAAhAAABIREQAiEjNTMyEhkBIREGFjM+ATc2JiczHgEHAgAjBiYnBA3+VN3+9DUpjHcDkQFNRHd+BAEeH+wiIwIE/uvTuMIJBOv+Ff5q/pbEAQUBNwKw+7dUZAG5qGPIaIG1Xf7x/ukDtMsAAQA//+gGWQQ6ACEAAAERBhYzPgE3NiYnMx4BBwYCIwYmJxEhERACKwE/ATI2NREECgFRR11iBAEeH+wiIwIE97u7xgn+/7jfQAQpZFMEOv0tVGQBopZevWJ6q1j7/v4DtMsCDf76/rz+1tMBu98BzAAAAAABAJj/6AeFBbAAHQAAAREGFjM+ATc2JiczHgEHAgAjBiYnESERIxEzESERBQYBTUR4fgQBHx/sIiQCBf7r07fCCf138/MCiQWw+7dTZQG4qWPHaX+2Xv7x/ukDtMsBBv2TBbD9gAKAAAEAd//oBlwEOgAdAAABIREjETMRIREzEQYWMz4BNzYmJzMeAQcGAiMGJicDGv5Q8/MBsPMCUEheYwQBHx7rIyICBPe8usYJAbr+RgQ6/kMBvf0tU2UBopZdvWOBpVf7/v4DtMsAAAAAAQBi/+sEtgXFACEAAAUgABkBEAAhMhYXBy4BIyIGFREUFjM+ATc2JiczHgEHBgQCu/7w/rcBSQEQdK1GP0SOVqe/v6d/hQQBGhnrJhQBBP7jFQFYARIBBgERAVksLbAiIu61/vi57QGFe1OtYqpqTuDlAAABAFX/6wPlBE4AIQAAJT4BNzQmJzMeARUOASMiAD0BNAAzMhYXBy4BIyIGHQEUFgJaU0IDCgnrDQ4E1bL1/vABBupgizAuMHhFgH2GrwFERzdxNkZnMamnATXoKucBNSIgvRwey4wqj8oAAAABACL/6AVYBbAAGQAAASE1IRUhEQYWMz4BNzYmJzMeAQcCACMGJicB5/47BID+OAFNRHd/BAEfH+wjIgIE/uvTt8MJBOvFxfx8U2UBuKljx2l/t13+8f7pA7TLAAEARP/oBMwEOgAZAAABITUhFSERBhYzPgE3NiYnMx4BBw4BIwYmJwGJ/rsDi/6tAVFHXWMEAR8e6yMjAgT4u7rGCgN3w8P98FRkAYF4SptMY4lF2+MDtMsAAAAAAQCH/+sFAQXFACkAAAEiBhUUFjMyNjUzFAQjICQ1NDY3NS4BNTQkITIEFSM0JiMiBhUUFjsBFQLCp6G0pI2v8/656P70/sGGhHSAASoBC+YBNfOpf6KgkqC+AoZyfWmBg2TV1ODNf6krAy6jZszU3bted3xha3PBAAAA//8ArQJtBOoDMQBGAYbgAFMzQAD//wCyAm0F6gMxAEYBhrYAZmZAAP//AAT+PwOZAAAAJwBBAAH+/gAGAEEBAAABAGAD8wGWBjIACQAAEzQ2NxcOAR0BI2BkUoAuK90ErGbYSE1Ik1y7AAAAAAEAMwPWAWkGGAAJAAABFAYHJz4BPQEzAWllUn8tLN0FXGfYR01Hk12+AAAAAQAy/sIBaAENAAkAACUUBgcnPgE9ATMBZ2RSfyws3kdl2EhOSJNbxwAAAP//AEcD1gF9BhgARwFmAbAAAMABQAAAAP//AGID8wLlBjIAJgFlAgAABwFlAU8AAP//AEAD1gLABhgAJgFmDQAABwFmAVcAAAACADL+wgKqAQ0ACQATAAAlFAYHJz4BPQEzBRQGByc+AT0BMwFnZFJ/LCzeAUJlUn8sLN5HZdhITkiTW8fGZdhITkiTW8cAAAABAEAAAAQeBbAACwAAASERIxEhNSERMxEhBB7+iPP+jQFz8wF4A3L8jgNyyAF2/ooAAAAAAQBc/mAEOQWwABMAACkBESMRITUhESE1IREzESEVIREhBDn+iPP+jgFy/o4BcvMBeP6IAXj+YAGgwgK0xAF2/orE/UwAAAAAAQCIAf8CRAP4AA0AABM0NjMyFh0BFAYjIiY1iHZnaHd2aGh2AyFgd3ZhTWF0dGH//wCcAAADWADpACYAEAMAAAcAEAHNAAD//wCcAAAFEQDpACYAEAMAACcAEAHNAAAABwAQA4YAAAAGAEv/6wdgBcUAGQAnADUAQwBRAFUAAAE0NjMyFhc+ATMyFh0BFAYjIiYnDgEjIiY1ATQ2MzIWHQEUBiMiJjUBFBYzMjY9ATQmIyIGFQUUFjMyNj0BNCYjIgYVARQWMzI2PQE0JiMiBhUTJwEXAzClj0tyJiZyTI+mpY5NdCUmcUqRpf0boYyQpaWOjaIDjklER0JHREVGAcdKQ0ZDR0RFRvtNR0ZDR0hERUbqfQLHfQFlgas6NTU6q4FOgqo5NTU5qoIDgYKrq4JNgqmpgvzMQlhVRU5BWVlBTkFZVkROQVlZQQLmQldXQk1CWVlC+9VIBHJIAAAAAAEAbACXAjMDtgAGAAABEyMBNQEzATz3p/7gASCnAib+cQGGEwGGAAABAFQAlwIbA7YABgAAEwEVASMTA/sBIP7gp/f3A7b+ehP+egGPAZAAAQAtAG0DcQUnAAMAADcnAReqfQLHfW1IBHJIAAIAPwIwA1YFxQAKAA4AAAEzFSMVIzUhJwEzAxEnAwLUgoLE/jMEAczJxAP3A3iYsLBwAnX9swFOAf6xAAEAaQKMAv8FugATAAABFz4BMzIWFREjETQmIyIGBxEjEQEBICRuSX6FxUFBNEMTxQWseUFGk6D+BQHJZ1cvKv3SAyAAAQBPAAAEawXFACcAAAEOAQchByE1Mz4BNyM1MycjNTMnNDYzMhYVIzQmIyIGFRchFSEXIRUB6wIgHwLBAfwmCi8tAqehBZ6YBOTH0+Lza1dXYQQBiP5+BQF/AcBNfzLCwg2VXKaAp3zT6de6a2OBeHyngKYAAAAAAwCZ/+wGSQWwAAoAEwArAAABESMRITIEFRQEIyczMjY1NCYrASURMxUjERQWMzI2NxcOASMiJjURIzUzEQGT+gF49wEL/vX3fn6GgoKGfgPnw8MxKxksFBohXjGDj5WVAhz95AWw+c3T+8ySbmyQXf75tP2qRTYHBrIQFJmrAla0AQcAAQBL/+sD4AXFACsAAAEhFRQWMzI2NxcOASMiAD0BIzUzNSM1MzU0ADMyFhcHLgEjIgYdASEVIRUhA5z+NJeIO201FDp4P/L+4JKSkpIBH/E9ckQUN246h5YBzP40AcwB8AKapxERxQ8QARLxAo6cjgz2ARsQD8cQE7CcDo6cAAAEAHH/6wWJBcUAGwApADcAOwAAARQGIyImPQE0NjMyFhUjNCYjIgYdARQWMzI2NQEUFjMyNj0BNCYjIgYVMzQ2MzIWHQEUBiMiJjUTJwEXArGXh4mZmIiImKk9Ojs8PTw5PAEYpJKRoqOSkaOpR0RESENHQ0rBff05fQQlcZSpgk2DqpZxMURZQk1CV0Qv/PKDqamDToKqqoJBWVlBTkVVWUEDyEj7jkgAAAAAAgBF/+sDkAXFABoAJgAABSImPQEOASM1MjY3ETQ2MzIWHQEUAgcVFBYzAzU0JiMiBhURPgE1Atvq5DFiNTdhMLCfi6nPul13MCkiLSxSUhXs2AcLCbsLCwGyxtqxmiqY/sBnRYeBA4osPUJdYf6zR7ZjAAAEAJgAAAhPBcAAAwARAB8AKwAAASE1IQE0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhUBIwEHESMRMwE3ETMIEP3GAjr9irmhorm5oKK6r1ZXVFZXVVVW/sDy/XcD8/MCiQPyAXyVAmCXuLiXdZi2tphXZWVXdVRnZ1T7jwQrAfvWBbD71gEEKQAAAAIAZAOUBGIFsAAOABYAAAEnAyMDBxEjETMbATMRIwEjESMRIzUhA/QDhD2JA2+JkJGDbv33inWIAYcE2QH+ugFSAf6vAhz+gwF9/eQBvf5FAbtfAAIAlv/sBJEETgAVAB4AACUOASMiADU0ADMyAB0BIREeATMyNjcBIgYHESERLgEEFFm4Yd7+0gE/zdMBHP0AOYlPYbZZ/pBLizsCHDeIXjg6AUTt5gFL/s7rL/64Njg7PwMqQDr+6wEeNjsA//8Aaf/1Bl8FsgAnAckAEgKGACcBdAEMAAAABwHQA1EAAAAA//8Aav/1BvYFwAAnAcsACgKUACcBdAHFAAAABwHQA+gAAAAA//8Aav/1ByYFrwAnAc0AAgKOACcBdAH9AAAABwHQBBgAAAAA//8Aav/1BoUFrwAnAc8AGAKOACcBdAFCAAAABwHQA3cAAAAAAAIAQ//rBE4F7QAUACIAAAEEABEVFAAjIgA1NBIzMhYXNy4BJwEuASMiBhUUFjMyNj0BAegBGQFN/tjl5f7n+OJSkTkDL9mXAb4llW+AfJB/e5sF7Ub+Nv6kZP3+ywEV1OoBDy8rAqnNMf1rPE6tkHqtz6FmAAAAAAEApv8bBPQFsAAHAAAFIxEhESMRIQT01/1f1gRO5QXU+iwGlQAAAAABAED+8wTBBbAADAAACQEhFSE1CQE1IRUhAQOP/e4DRPt/Ak/9sQRH/PYCEgJD/XPDlwLIAsaYw/1zAAABAJ4CbQPhAzEAAwAAASE1IQPh/L0DQwJtxAAAAQA7AAAEiwWwAAsAAAEXMzcBMwEjAyM1IQIiHQMcAVvS/he+2NEBYwF8hYUENPpQAkHFAAMAZP/rB9kETgAZACcANQAAARQAIyImJw4BIyIAPQE0ADMyFhc+ATMyABUjNCYjIgYHFR4BMzI2NSEUFjMyNjc1LgEjIgYVB9n++uGi409P5KHi/vwBA+Gi5U9O5aPgAQXzeniHuhgVvIZ5e/pxeHuFvBYXu4d5eAH/6/7XwJaWwAEp6zrqASu+k5O+/tXqmrj4YSRi/7WdnbX/YiRg+bebAAAAAf+y/ksCqAYtABwAAAUUBiMiJic3HgEzMjY1ETQ2MzIWFwcuASMiBhURAZC3qSU4IQ8SORY7Qb+zJEctGRcpHFFSP7e/CAm/BQhdVgT3tr8LCrkFBlxW+wkAAAACAGUA/QQiBAEAGwA3AAATPgEzNhYXHgEzMjY3HwEOASMiJicuAQciBgcnBz4BMzYWFx4BMzI2Nx8BDgEjIiYnLgEHIgYHJ28weUNHSl9RTERBeS8DCjF5QkRMUV9KR0J5LgMUMHlDR0pfUUxEQXkvAwoxeUJETFFfSkdCeS4DA21GTAIcLyobSkQBwUdLGyovHAJLQwHtRkwCHC8qG0pEAcFHSxsqLxwCS0MBAAAAAAEAmACBA/YEwgATAAABMxUhByEVIQcnNyM1ITchNSE3FwM6vP7TfAGp/eh+ZFq+AS18/lcCGoNkA9bK38njQaLJ38rsQQAA//8AqgAVBBYErwBnAB4AkgDQQAA5mgAHAYYADP2oAAD//wCgABMEAATDAGcAIAAgAORAADmaAAcBhgAI/aYAAAACACQAAAP5BbAABQAPAAABMwkBIwEhAycjBwMTFzM3AaTSAYP+gNP+fgLZ3BQDFNfdEwMUBbD9J/0pAtcB30FB/iH+IkBAAP//ALMAtgGlBPAAJwAQABoAtgAHABAAGgQHAAAAAgBjAn8CPgQ5AAMABwAAASMRMwEjETMBAJ2dAT6dnQJ/Abr+RgG6AAEARf83AVoBBgAJAAAlFAYHJz4BPQEzAVpQRYAmJsmbYMNBTj9/UHMAAAAAAgAYAAAEFwYtABcAGwAAMxEjNTM1NDYzMhYXBy4BIyIGHQEzFSMRISMRM72lpeLTSopeJT92R3Bj1dUCZ/PzA4a0XMfQHh7JFhpfY1y0/HoEOgAAFgBZ/nIH7AWuAA0AHQArADsAQQBHAE0AUwBdAGEAZQBpAG0AcQB1AH4AggCGAIoAjgCSAJYAAAE0JiMiBh0BFBYzMjY1BTI2NTQmJzU+ATU0JisBEScUBiMiJj0BNDYzMhYVBRQGIyImNSMUFjMyNjURIwERMxUzFSE1MzUzEQERIRUjFSU1IREjNQEzHgEVFAYrATUBNSEVITUhFSE1IRUBNSEVITUhFSE1IRUTMzIWFRQGKwEFIzUzNSM1MxEjNTMlIzUzNSM1MxEjNTMDN39oaH5+amh9ASBeZzQtJSptZ7yfSEFDSUhCQUoDujYpMzVdaF1TaFz5xHHEBSjHb/htATXEBewBNm/82gUwMjQzfgFOARb9WwEV/VwBFAIKARb9WwEV/VwBFLxdPjg6PF388XFxcXFxcQcib29vb29vAkRieXlicGR3d2TYTk0uRA0DDjwoTEr929hHTExHcEVOTkWbLDYsL1NRW1ABevtPATvKcXHK/sUGHwEddKmpdP7jqfy2Ai0nKSqpA0p0dHR0dHT5OHFxcXFxcQRbHygpJ5b8fvr8Ffl+/H76/BX5AAAAAAUAXP3VB9cIYgADAB0AIQAlACkAAAkDBTQ2Nz4BNTQmIyIGBzM+ATMyFhUUBgcOARUXIxUzAzMVIwMzFSMEGAO//EH8RAQPGSlJXaaWi6UCywE6LDc6MitQOsrKyksEBAIEBAZS/DH8MQPP8TY7GyiAUIOUgYk0Mz42Mk0cOVZaW6r9TAQKjQQAAAAAAQBN/+8DygSNAB4AABsBIRUhAz4BNzYWFRQGIyImNTcUFjMyNjU0JiMiBgd8RwLJ/gwdJmo7usrY58L88m9daWNlXFlYFAH4ApXG/vMWIAIDx7u1z6KnEEZTamBday4oAAAAAAIATQAAAyUDIQAKAA8AAAEzFSMVIzUhJwEzATMRIwcCs3Jyv/5jCgGmwP5g4QMPASKRkZF0Ahz+AQEbGAAAAAACAGz/6wQnBcUADQAbAAABEAIjIgIZARASMzISESc0JiMiBhURFBYzMjY1BCf74eH+/OHh/fN2dXV1dnZ1dAIx/t7+3AElASEBTQEhASb+2v7fJbapqbb+a7ipqLkAAAAB/5/+xQLtA0IADwAAAzMgABEQAiEnMjY1LgErAWH0ASABOvn+/AGYcwGwtvQDQv7V/uT++/7Pusqrw8EAAAAAAf+w/ksBjgDNAA8AACURFAYjIiYnNx4BMzI2NREBjrepJTghDhE5FzxAzf70t78ICcYFB1ZVAQwAAAAAAQAY/l8B0wBCABMAACUeARUUBiMiJic3HgEzMjY1NCYnAQ9lX4lsQ1wnIx0vITouOjhCNYtNZ28ZE44KDS0jME0xAAABAFz+mgFPALYAAwAAASMRMwFP8/P+mgIcAAAAAgB1BNAC9wbcAA0AIQAAARQGIyImNTMUFjMyNjUTFAYjIiYjIgYVJzQ2MzIWMzI2NQL3rJWWq69ETkxGkF5IOYEpICloXUktiyseLAWwZ3l6ZjI9PTIBD01pRzIlG0tuRzElAAIAdQTVAvYHCAANAB0AAAEUBiMiJjUjFBYzMjY1JSc+ATU0JiM3MhYVFAYPAQJIR0tNR62ql5Wr/nMIST5NRQecoVJAAQWwMTw8MWV2dmUZdgIWGx0ZYE5GNTUHOgAAAAIAdQTTAwAGfgANABEAAAEUBiMiJjUzFBYzMjY1JzMHIwMAr5aZrbFGT0xHZbapgAWwZXh4ZTI+PjLOwAAAAAACAHkE5wNYBtEACAAcAAABByMnByMnJTM3FAYjIiYjIgYVJzQ2MzIWMzI2NQNYAbyzsrwBASaTulc/M3glHChaVEEogiUbKwTqA46OA+rfP15CLBsYP2FBLRwAAAIAdQTnBAoGywAGABYAAAEjBTM3FzMvAT4BNTQmIzcyFhUUBg8BAka7/urBsrPBXQdBNkQ9B4iNSTgBBeH6oqKGfQQZHSEdaVdNOz0HOwAAAv9MBNoDXAaDAAYACgAAASMnByMlMwUjAzMDXNWfn9QBI6H+h53X3QTajo76XAELAAAAAAIAegTnBIsGkAAGAAoAAAEzBSMnByMBMwMjAZ2hASPUn5/VAzPe2J0F4fqOjgGp/vUAAAACAFsElQMVBpgADQARAAABFAYjIiY1MxQWMzI2NScjJzMDFbuio7q1UFhWUDq/0vsFsIKZmYI7SUk7FdMAAAAAAQCQBGkBhQYMAAUAABM3MwMVI5B3fhvaBQ3//veaAAACABwAAASsBI0ABwAKAAAlIQcjATMBIwEhAwNX/hlW/gHM+AHM/v4KAVes6ekEjftzAasBzQAAAAMAjgAABC4EjQAPABgAIQAAMxEhMhYVFAYHFR4BFRQGIwERITI2NTQmIyUzMjY1NCYrAY4BrdvrYFpxdtzS/wABAGJZWmH/ALtqaWVuuwSNnqNUgCADGo5jpqQB+v7GS01PU6hISE4+AAAAAAEAaP/vBDIEnQAbAAABDgEjIgA9ATQAMzIWFyMuASMiBh0BFBYzMjY3BDEP+NXb/u4BEtvZ9BDzEG1tc4iJcnFoEAGU1NEBFOS+4wEV0dJ3a62Jv4quaXwAAAAAAgCOAAAEQgSNAAkAEwAAMxEhMgAdARQAIwMRMzI2PQE0JiOOAbfeAR/+4d7FxXSWlnQEjf741tLX/voDzPz0oH3Te6EAAAAAAQCOAAADzgSNAAsAAAEhESEVIREhFSERIQN4/ggCTvzAA0D9sgH4Afz+xMAEjcH+8gAAAAEAjgAAA9oEjQAJAAABIREjESEVIREhA4P9/fIDTP2mAgMB3v4iBI3B/tQAAQBo/+8EXwSdAB8AACUOASMiAD0BNAAzMhYXIy4BIyIGHQEUFjMyNjc1IzUhBF8577/v/t8BH+nh7hPyDnNvf5eYhmJ0H+8B4Z9IaAEF2fPXAQbCtF1Ynn30gJ4fF9SxAAAAAAEAjgAABHoEjQALAAAhIxEhESMRMxEhETMEevT9+vLyAgb0Adj+KASN/g0B8wAAAAEAjgAAAYAEjQADAAAhIxEzAYDy8gSNAAEALv/uA4wEjQAPAAABMxEUBiMiJjUzFBYzMjY1Apry6b3P6fNpXE9lBI385bXPubpbWGpaAAAAAQCOAAAEXQSNAAwAAAEjESMRMxEzASEJASEB62vy8lUBQQEt/mQBtv7LAdX+KwSN/iAB4P3V/Z4AAAAAAQCOAAADeQSNAAUAACUhFSERMwGAAfn9FfLAwASNAAABAI4AAAVuBI0ADgAACQEhESMRIwEjASMRIxEhAv4BQAEw8wP+2KX+2APyATIBKwNi+3MC/v0CAwH8/wSNAAAAAQCOAAAEhQSNAAsAACEjAQcRIxEzATcRMwSF8v3wA/LyAhAD8gMeAfzjBI385AEDGwAAAAIAZv/uBGQEnQANABsAAAEUACMiAD0BNAAzMgAVJzQmIyIGHQEUFjMyNjUEZP7p6Of+6AEW6OcBGfOOf4CLjX9/jQHn5f7sARTlvuQBFP7s5AGPp6ePv5GoqJEAAgBo/38ElASdABMAIQAAARQGBxcHJw4BIyIAPQE0ADMyABUnNCYjIgYdARQWMzI2NQRmODacoaE3c0Hn/ugBFujnARnzjn+AjI2Af40B52OlQZ2CoBkYARTlvuQBFP7s5AGPp6aQv5GoqJEAAgCOAAAESQSNABsAJAAAAREjESEyFhUUBgcVHgEdARQWFxUjLgE9ATQmIyczMjY1NCYrAQGA8gHO1uphYGxcERX6FQpgYPDcaWRlaNwBvf5DBI22pl6CKQMejWtWLGYXEBZsOFRWWcJUT05cAAAAAAEAT//uBBkEnQAlAAABNCYnLgE1NDYzMhYVIzQmIyIGFRQWFx4BFRQEIyIkNTMeATMyNgMnbJPlyfLV2u/yam1uZ2Sj28v/AN/d/vLyAYlvd3YBOz5NITSWoJa2v69RXEw+QUgkM5uanrG4uV9STQABADwAAAPpBI0ABwAAASERIxEhNSED6f6g8/6mA60DzPw0A8zBAAAAAQB+/+4EewSNABEAAAERFAQjIiQ1ETMRFBYzMjY1EQR7/uvp6f7q8o5/f40Ejf0KzN3dzAL2/Qpyd3dyAvYAAAEAHAAABIsEjQAJAAABFzM3ASEBIwEhAkARAxEBJQEB/kP3/kUBAQE1R0QDW/tzBI0AAAABADQAAAXXBI0ADwAAATMTIQEjAyMDIwEhEzMTMwQ4A5sBAf7j580DzOf+5AEAnAPK0gFZAzT7cwMM/PQEjfzJAzcAAAEALAAABFEEjQALAAABEyEJASELASEJASECPPEBG/6KAX/+5/n4/uUBgP6JARkC+AGV/b/9tAGd/mMCTAJBAAABABMAAAQ8BI0ACAAACQEhAREjEQEhAigBCQEL/mLz/mgBCwJvAh79Cv5pAaIC6wABAEoAAAPrBI0ACQAAJSEVITUBITUhFQF+Am38XwJZ/cgDcMDAegNSwXUAAAIAbf/vBBMEnQANABsAAAEUBiMiJjURNDYzMhYVJzQmIyIGFREUFjMyNjUEE/3V1v781tX/83dqaXZ3aml2AZvI5OTIAVfH5OTHAWx9fmv+qG5+fW8AAAABAD4AAAHzBJ0ABQAAISMRIzUlAfPzwgG1A6e6PAAAAAEAUgAAA5IEnQAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGDwEhA5L80QGeVkNMTlph8+bIvc6DntMB+8ABg1FrOEZfZE6j0LmteKuNxwAAAQBN/+8DuwSdACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AgZcVFxaTmLy6LPL5F5WYmX2zLP58WpYXWtfY7kCq09LQFdMPpmyqaNSgicjh2Wls6ytQVhdRVpPsQAAAAACADkAAAQYBI0ACgAPAAABMxUjFSM1IScBMwEhEScHA3Gnp/L9xQsCQ/X9yQFFAwIBm8PY2J8DFv0OAboBBAAAAQBRAAAENAXFABgAACkBNQE+ATU0JiMiBhUjNAAzMhYVFAYHASEENPw5Adp2VnBjgnrzAQXq1vCKl/63ApinAgWCn09kgo2BygEH5L+A3qb+pAAAAgBt/+8D8ASdABoAJwAAATIWFwcuASMiBh0BPgEzMhYVFAYjIiY1ETQkEyIGBxUUFjMyNjU0JgJcSotDJzltSHKNModVvcX1zMX9ARexT2sbeV5ba2AEnRoYuhcUi3VWMTTCsrLW+MoBKc71/ZIyLh5wkm5UW2MAAQA8AAADZgSNAAwAAAEGAhEVIzUQEjchNSEDZriW8+OE/bADKgPM5f7e/vS5uQEHAYqCwQAAAAADAFL/7wPnBJ0AFwAjAC8AAAEUBgceARUUBiMiJDU0NjcuATU0NjMyFgM0JiMiBhUUFjMyNgM0JiMiBhUUFjMyNgPEZFlpd/3Fzf76em1eZvC/t+nQeVdgf39hWHcjZElSa21RSWMDXFeCJymMX6W0tKVfjCkngVicpaX9XUlcXElLW1sCREBOTEJBUVEAAAACAD//7wO1BJ0AGgAnAAAlMjY9AQ4BIyImNTQ2MzIWFREUBCMiJic3HgETMjY3NTQmIyIGFRQWAeFify1xQsjb98nA9v79ykiaRyY+c2JKZRt0WllqZa9/YVoqKs20qd75yv62u+YaGLgXEwGUNCpAbY57UFtzAAABAFcAAAGWAywABQAAISMRIzUlAZbAfwE/An+WFwAAAAEAawAAAtUDLAAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGDwEhAtX9oQExQiYyNz4/vqqUjphfeogBZ5EBADdEKi03OzFtkYB3U3JrdAAAAQBg//UC6wMsACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AaFCPEA/Nj6/q4WYqUY+R0qxmIq4v0Q+QkpFR3sB2TQxKDQsImh4dXA4WRoYXkVyenh3LDIzLjk2gwAAAAABADgAAAJGBbAABQAAISMRITUlAkbz/uUCDgSgpmoAAAEAaP/1AwEDIQAeAAAbASEVIQc+ATc2FhUUBiMiJjU3FBYzMjY1NCYjIgYHiTQCFP6VFRxMLIeVoayRu75NQUpERj0+Pw8BWgHHkqoRFgECi4CAj290DC0xPjw/SR4ZAAIAcP/1AwoDLAAaACcAAAEyFhcHLgEjIgYdAT4BMzIWFRQGIyImPQE0NhMiBgcVFBYzMjY1NCYB4DdnLiApTzJRYiViP4iNtpeTus6DNkoSUkBCSUQDLBIRjQ8PWE0zICKHeXuUqo3Ij6n+Sx8cEEtbQTc6PwAAAAEAUgAAAqQDIQAMAAABDgEdASM1NBI3ITUhAqSHaL+aWf5pAlICj6C7tX9/tAELUZIAAAADAGj/9QMOAywAFwAjAC8AAAEUBgceARUUBiMiJjU0NjcuATU0NjMyFgM0JiMiBhUUFjMyNgM0JiMiBhUUFjMyNgL2SUBLVrqSmMJYT0RLs46IraZTPENYWEQ9URpDMjlISjgxQwJQO1obHWFAcnt7ckBhHRtaO2txcf4wMDs7MC82NgGIKC4tKSoyMgAAAAACAGD/9QLwAywAGgAnAAAlMjY9AQ4BIyImNTQ2MzIWHQEUBiMiJic3HgETMjY3NTQmIyIGFRQWAZVEWCBRLZOgs5KRusOYNW40ICtTSzVGD1E+PUdFhk5AOyAfkH91mK2M3oKeERGOEQ4BESUeGUpdSzU7SAAAAAACAHD/9QMkAywADQAbAAABFAYjIiY9ATQ2MzIWFSc0JiMiBh0BFBYzMjY1AyS7n5+7up+evb9SSkpQUEtJUgEnkKKikNGPpaWPAktVVUvTTlNTTgABAJcChwMmAzEAAwAAASE1IQMm/XECjwKHqgAAAwCWBEgCngaVAAQAEAAcAAABMxcHIwc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBgG84QHxlYJrUU5qaU9Ra2MzJiQwMCQmMwaVA7/eTWVkTk1gYE0mMDAmJzMzAAACAGwEbwLMBdcABQAPAAABEzMVAyMlNDY3Fw4BHQEjAYpv0+Zc/uJbVVAqJbEEhQFAFf7BVlqKLEgpYURSAAAAAQBP/+sEFgXFACgAAAEzMjY1NCYjIgYVIzQkMzIWFRQGBx4BFRQEIyIkNTMUFjMyNjU0JisBAYapeWVub2V78wECztn6b2x/cv7x2s7+8POAbnOAdX+pA0ZzbWtxb16v4dTLX6sxLbB2zOHUx2N2eHJ+cgACADgAAARZBbAACgAPAAABMxUjESMRIScBMwEhEScHA6G4uPL9jwYCb/r9hwGHAxcCB8T+vQFDlQPY/FcCVgExAAAAAAEAgf/rBCYFsAAeAAAbASEVIQM+ATc2EhUUAiMiJDU3FBYzMjY1NCYjIgYHnFQDAf3JLCxvSNHk8OvE/vrremVzdXhzZl4XAosDJdL+kyApAgP+/Ora/vTRyQhsdJ2FhqM/PwACAHT/6wRGBcUAGgAnAAABMhYXBy4BIyIGHQE+ATMyEhUUAiMiABkBEAATIgYHFRQWMzI2NTQmAqhQjTouOWdIlK89nWDH3//Y4v7nATy0XX4jkndtd34FxSAcvBgb3cMHODv+89fk/ucBMgEeARYBIgFS/UpAOWi9xLOIhaIAAAMACv5KBBsETgAvAD8ATQAAASMeAR0BFAYjIiYnDgEVFBY7ATIWFRQEIyImNTQ2Ny4BNTQ2Ny4BPQE0NjMyFhchASImJw4BFRQWMzI2NTQmIwEUFjMyNj0BNCYjIgYVBBuKHB73yipJIxITQj2xxc3+1vno/GNTGRk/Nlxi9s0rTicBcf2GGCoUJy59fZCiUGX+zHNgXXJzXl9yA6AqXzUWnc8IChEoGSsilJWF2552WXwpFzwnQ18mMZxhFqPJCgr73gMEFUYwPlFiPDo7ArRJaGhJFktlZUsAAAABADIAAAP3BbAADAAAAQoBAwcjNxoBNyE1IQP3+KQnD/MPJ9zH/ScDxQTt/tP+NP6mmpoBUgIO88MAAAABAD7+TQREBEoAIwAAEzIWHwETMwETHgEXOgE3Bw4BJy4BLwEDIwEDLgEjIgYHJz4BwYxzPVvh9f6fxRo9KxARDwcTNhdxeT9l+PgBfKccWTwMKA8CH0IESoqGzgHO/Sj+QT1EBQLGBgYBBZST5v4AAwwBgEVRBAG6CAsAAwBh/+sEKgXFABcAIwAvAAABFAYHHgEVFAQjIiQ1NDY3LgE1NDYzMhYDNCYjIgYVFBYzMjYDNCYjIgYVFBYzMjYEBXVqeor++dzf/vmIfGp08c3L9c2HbG6DgnFthCZwXV9sbWBdbgQwcaYuL7V6z9PTz3u0MC2mccbPz/yjbYSDbnB8fQL9Ynl1ZmV1dQAAAgBW/+sEXwROABQAIgAAJScOASMiAj0BEBIzMhYXPwEzAxMjARQWMzI2NzUuASMiBhUDZAM2qn7O397Reqc3AxvdbHPd/cdxf21vFxFzbX9zvwFpbAEd8RUBCAE4bGcBvv3i/eQB+Zmzt5ovm8PRrAAAAAACAFP/6wQ0BbAAGgArAAABFSEeARcWEh0BFAAjIgA9ATQSNzI2My4BJzUTFBYzMjY9ATQmJy4BIyIGFQPD/lQaZzqvs/787Oz+++bHCQwMgZI3b3qEgnxgSBMjFYmABbDBG1gul/77nxXw/t0BHegVwwEHHAF0iD+J/E6ZuLmYFW6pMAQEupUAAgCfAAAEyAWwAAkAEwAAMxEhIAARFRAAIQMRMzI2PQE0JiOfAZ4BUwE4/sj+rauk57i45wWw/tH+z/H+z/7SBO371cXY89XGAAAAAAIAYP/rA/4ETgAfACoAACEuAScOASMiJjU0NjsBNTQmIyIGFSM0NjMyFhURFBYXJTI2NzUjIgYVFBYDCAkMAzefYqys8+qrX2VjWfPd4dHXDxT98lSDIa96bUcdNRw6SaKiqqR6VEZMQ5S4oLn+BEZ4O647K9FdVUJDAAACAJ8AAAT+BbAADgAXAAABFAYHARUhASERIxEhMgQBITI2NTQmIyEEqn93AUr+9f7d/sLzAg34AQb86AEbhoSCif7mBAaGwDX9iBMCS/21BbDa/jh7dXB/AAAAAAEAnwAABS8FsAAMAAABBxEjETMRNwEhCQEhAieV8/OSAasBIP3eAmL+zAKApf4lBbD9X6sB9v2J/McAAAEAgQAABDwGGAANAAABBxEjETMRFzcBIQkBIQHgbfLyA1ABLQEe/m0Bvv7mAc9z/qQGGPxxAWEBUf5A/YYAAAABAJ8AAAURBbAACwAAAREjETMRMwEhCQEhAZLz8wcCJgEt/ZsCiv7TAp/9YQWw/X8Cgf02/RoAAAEAgQAABCIGGAAMAAABBxEjETMRFwEhCQEhAXYD8vIDAVYBKv5QAdz+2wHnAf4aBhj8iAEBm/4M/boAAAIAUv/rBBcFxQAbACgAACUyNj0BJw4BIyICNTQAMzIAGQEQACMiJic3HgETMjY3NTQmIyIGFRQWAgOFnQMwilXV7AEKy+cBCf7c8EyeRCBAfXhdfSGAemSCdq29vSMBQUIBBPHmASL+3P7k/qv+5v7VHh64GxcB2EY7nLGvt46SpgAAAAIAjgAABEAEjQAKABMAAAERIxEhMhYVFAYjJzMyNjU0JisBAYDyAePY9/fY8fFscHBs8QGG/noEjdaur9TCblFTcgD//wB1BJUC+wWwAgYAnAAA//8AAAAAAAAAAAIGAAMAAP//AEcCCQJUAs0CBgAPAAAAAgAkAAAFDAWwAA0AGwAAMxEjNTMRISAAERUQACETIREzMjY9ATQmKwERIb2ZmQHKASoBW/6i/sw5/v3D2c3Kz9ABAwKRqgJ1/qb+4sH+4P6pApH+MerLw83m/k4AAAAAAgAkAAAFDAWwAA0AGwAAMxEjNTMRISAAERUQACETIREzMjY9ATQmKwERIb2ZmQHKASoBW/6i/sw5/v3D2c3Kz9ABAwKRqgJ1/qb+4sH+4P6pApH+MerLw83m/k4AAAAAAf/9AAAEKgYYABwAAAEjERc+ATMyFhURIxE0JiMiBgcRIxEjNTM1MxUzAoz+AzWXYLC982RoSW4m856e8/4Ex/7sAUtR1Of9bQKVgnA6NfzoBMeqp6cAAAEANQAABLUFsAAPAAABIxEjESM1MxEhNSEVIREzA73P883N/joEgP45zwMS/O4DEqoBMcPD/s8AAf/n/+wCdgVBAB8AAAERMxUjFTMVIxEUFjMyNjcXDgEjIiY1ESM1MzUjNTMRAaHDw9XVMSsZLBQaIV4xg4/Hx5WVBUH++bSlqv75RTYHBrIQFJmrAQeqpbQBB///ABoAAAUoByICJgAjAAAABwBCAPwBXP//ABoAAAUoByECJgAjAAAABwBzAbMBW///ABoAAAUoB0cCJgAjAAAABwCaALcBWf//ABoAAAUoB2MCJgAjAAAABwCgALkBbP//ABoAAAUoBw0CJgAjAAAABwBoAJMBXf//ABoAAAUoB48CJgAjAAAABwCeAUwBs///ABoAAAUoB70CJgAjAAAABwHUAVIBKP//AHT+PATYBcUCJgAlAAAABwB3Acb/+///AJ8AAAR1ByICJgAnAAAABwBCAMQBXP//AJ8AAAR1ByECJgAnAAAABwBzAXsBW///AJ8AAAR1B0cCJgAnAAAABwCaAH8BWf//AJ8AAAR1Bw0CJgAnAAAABwBoAFsBXf///8wAAAGgByICJgArAAAABwBC/4IBXP//AK0AAAKEByECJgArAAAABwBzADgBW////9gAAAJ5B0cCJgArAAAABwCa/z0BWf///70AAAKSBw0CJgArAAAABwBo/xkBXf//AJ8AAAUQB2MCJgAwAAAABwCgAO4BbP//AHT/6wUbBzcCJgAxAAAABwBCASMBcf//AHT/6wUbBzYCJgAxAAAABwBzAdoBcP//AHT/6wUbB1wCJgAxAAAABwCaAN4Bbv//AHT/6wUbB3gCJgAxAAAABwCgAOABgf//AHT/6wUbByICJgAxAAAABwBoALoBcv//AIb/6wTxByICJgA3AAAABwBCARcBXP//AIb/6wTxByECJgA3AAAABwBzAc4BW///AIb/6wTxB0cCJgA3AAAABwCaANIBWf//AIb/6wTxBw0CJgA3AAAABwBoAK4BXf//ABMAAATvByECJgA7AAAABwBzAZYBW///AF7/7AQBBeACJgBDAAAABwBCAIEAGv//AF7/7AQBBd8CJgBDAAAABwBzATgAGf//AF7/7AQBBgUCJgBDAAAABgCaPBcAAP//AF7/7AQBBiECJgBDAAAABgCgPioAAP//AF7/7AQBBcsCJgBDAAAABgBoGBsAAP//AF7/7AQBBk0CJgBDAAAABwCeANEAcf//AF7/7AQBBnwCJgBDAAAABwHUANf/5///AFH+PAP3BE4CJgBFAAAABwB3AT7/+///AFn/7AP4BeECJgBHAAAABwBCAIMAG///AFn/7AP4BeACJgBHAAAABwBzAToAGv//AFn/7AP4BgYCJgBHAAAABgCaPhgAAP//AFn/7AP4BcwCJgBHAAAABgBoGhwAAP///68AAAGCBcsCJgCKAAAABwBC/2UABf//AI8AAAJnBcoCJgCKAAAABgBzGwQAAP///7sAAAJcBfACJgCKAAAABwCa/yAAAv///6AAAAJ1BbYCJgCKAAAABwBo/vwABv//AH4AAAQLBiECJgBQAAAABgCgWSoAAP//AFP/7AQ0BeACJgBRAAAABwBCAJ4AGv//AFP/7AQ0Bd8CJgBRAAAABwBzAVUAGf//AFP/7AQ0BgUCJgBRAAAABgCaWRcAAP//AFP/7AQ0BiECJgBRAAAABgCgWyoAAP//AFP/7AQ0BcsCJgBRAAAABgBoNRsAAP//AHv/7AQKBcsCJgBXAAAABwBCAJ0ABf//AHv/7AQKBcoCJgBXAAAABwBzAVQABP//AHv/7AQKBfACJgBXAAAABgCaWAIAAP//AHv/7AQKBbYCJgBXAAAABgBoNAYAAP//ABD+SwP8BcoCJgBbAAAABwBzARgABP//ABD+SwP8BbYCJgBbAAAABgBo+QYAAP//ABoAAAUoBvYCJgAjAAAABwBuALIBRv//AF7/7AQBBbQCJgBDAAAABgBuNwQAAP//ABoAAAUoB1wCJgAjAAAABwCcAOoBrP//AF7/7AQBBhoCJgBDAAAABgCcb2oAAAACABr+UgUoBbAAGgAeAAAJASMOARUUFjMyNjcXDgEjIiY1NDY3AyEDIwEDIQMjAxgCEERQUSAnGioWFSFNN151UVlx/c949wIXZQGs1AMFsPpQM1w4ISMNCo4TGWlgRno1AUz+pAWw/G8CawACAF7+UgQBBE4AMwA+AAAhLgEnDgEjIiY1NDY7ATU0JiMiBhUjNDYzMhYVERQWFyMOARUUFjMyNjcXDgEjIiY1NDY3JTI2NzUjIgYVFBYDCwsPBDecYqez9OWxZGBYZPP1ycHnERUiUFEgJxoqFhUhTTdedUVM/uBUhSK1bXVOIkQkRlirmqCsX1ZfT0CIxL23/h9FeDwzXDghIw0KjhMZaWBBcTOvSDa4Z0k/RwAA//8AdP/rBNgHNgImACUAAAAHAHMBvwFw//8AUf/sA/cF3wImAEUAAAAHAHMBKAAZ//8AdP/rBNgHXAImACUAAAAHAJoAwwFu//8AUf/sA/cGBQImAEUAAAAGAJosFwAA//8AdP/rBNgHNgImACUAAAAHAJ0BkAGA//8AUf/sA/cF3wImAEUAAAAHAJ0A+QAp//8AdP/rBNgHYwImACUAAAAHAJsA2gFy//8AUf/sA/cGDAImAEUAAAAGAJtDGwAA//8AnwAABO4HTgImACYAAAAHAJsAjQFd//8AU//sBVcGGAAmAEYAAAAHAZED/QUS//8AnwAABHUG9gImACcAAAAHAG4AegFG//8AWf/sA/gFtQImAEcAAAAGAG45BQAA//8AnwAABHUHXAImACcAAAAHAJwAsgGs//8AWf/sA/gGGwImAEcAAAAGAJxxawAA//8AnwAABHUHIQImACcAAAAHAJ0BTAFr//8AWf/sA/gF4AImAEcAAAAHAJ0BCwAqAAEAn/5SBHUFsAAgAAABIREhFSMOARUUFjMyNjcXDgEjIiY1NDY3JyERIRUhESEED/2DAuNAUFEgJxoqFhUhTTdedURJAf1BA8/9JAJ9Ao/+M8IzXDghIw0KjhMZaWBAcTEDBbDD/mUAAgBZ/mAD+ARPACkAMQAAJQ4BBzMOARUUFjMyNjcXDgEjIiY1NDY3JgA9ATQAFzISHQEhHgEzMjY3ASIGByE1NCYD1R5OMgFQUSAnGioWFSFNN151MDXh/wABC9Dg5P1WCol+ZIlC/qZbdBIBtGdkGiwQM1w4ISMNCo4TGWlgNmEtCAEk6yjxATIB/vvjj4eiLy0CgY11GWmAAAD//wCfAAAEdQdOAiYAJwAAAAcAmwCWAV3//wBZ/+wD+AYNAiYARwAAAAYAm1UcAAD//wB0/+sE4gdcAiYAKQAAAAcAmgC6AW7//wBU/kwECAYFAiYASQAAAAYAmkYXAAD//wB0/+sE4gdxAiYAKQAAAAcAnADtAcH//wBU/kwECAYaAiYASQAAAAYAnHlqAAD//wB0/+sE4gc2AiYAKQAAAAcAnQGHAYD//wBU/kwECAXfAiYASQAAAAcAnQETACn//wB0/eIE4gXFAiYAKQAAAAcBkQG2/qv//wBU/kwECAaKAiYASQAAAAcBpQEtAH7//wCfAAAFEAdHAiYAKgAAAAcAmgDoAVn//wB9AAAEDAdiAiYASgAAAAcAmgAbAXT///+/AAACkAdjAiYAKwAAAAcAoP8/AWz///+iAAACcwYMAiYAigAAAAcAoP8iABX///+/AAAClgb2AiYAKwAAAAcAbv84AUb///+iAAACeQWgAiYAigAAAAcAbv8b//D////lAAACawdcAiYAKwAAAAcAnP9wAaz////IAAACTgYFAiYAigAAAAcAnP9TAFX//wAc/lwBoAWwAiYAKwAAAAYAn/MKAAD////+/lIBgwYYAiYASwAAAAYAn9UAAAD//wCjAAABpgchAiYAKwAAAAcAnQAJAWv//wCt/+sGMwWwACYAKwAAAAcALAJNAAD//wCQ/ksDoQYYACYASwAAAAcATAITAAD//wA6/+sEsgc/AiYALAAAAAcAmgF2AVH///+1/ksCZAXjAiYAmAAAAAcAmv8o//X//wCf/fAFLwWwAiYALQAAAAcBkQGK/rn//wCB/fIENQYYAiYATQAAAAcBkQEv/rv//wCfAAAELwb4AiYALgAAAAcAcwAqATL//wCQAAACZwdfAiYATgAAAAcAcwAbAZn//wCf/fIELwWwAiYALgAAAAcBkQF1/rv//wBY/fIBgwYYAiYATgAAAAcBkQAT/rv//wCfAAAELwWyAiYALgAAAAcBkQIEBKz//wCQAAAC6AYYACYATgAAAAcBkQGOBRL//wCfAAAELwWwAiYALgAAAAcAnQG7/dT//wCQAAAC9wYYACYATgAAAAcAnQFa/a///wCfAAAFEAchAiYAMAAAAAcAcwHoAVv//wB+AAAECwXfAiYAUAAAAAcAcwFTABn//wCf/fIFEAWwAiYAMAAAAAcBkQHg/rv//wB+/fIECwROAiYAUAAAAAcBkQFL/rv//wCfAAAFEAdOAiYAMAAAAAcAmwEDAV3//wB+AAAECwYMAiYAUAAAAAYAm24bAAD////VAAAECwYYAiYAUAAAAAcBkf+QBRL//wB0/+sFGwcLAiYAMQAAAAcAbgDZAVv//wBT/+wENAW0AiYAUQAAAAYAblQEAAD//wB0/+sFGwdxAiYAMQAAAAcAnAERAcH//wBT/+wENAYaAiYAUQAAAAcAnACMAGr//wB0/+sFGwdgAiYAMQAAAAcAoQFDAXL//wBT/+wEWQYJAiYAUQAAAAcAoQC+ABv//wCfAAAE8AchAiYANAAAAAcAcwGDAVv//wCAAAAC+gXfAiYAVAAAAAcAcwCuABn//wCf/fIE8AWwAiYANAAAAAcBkQF7/rv//wBW/fICwwROAiYAVAAAAAcBkQAR/rv//wCfAAAE8AdOAiYANAAAAAcAmwCeAV3//wBDAAAC9wYMAiYAVAAAAAYAm8obAAD//wBT/+sEoAc2AiYANQAAAAcAcwGBAXD//wBR/+wDzwXfAiYAVQAAAAcAcwEiABn//wBT/+sEoAdcAiYANQAAAAcAmgCFAW7//wBR/+wDzwYFAiYAVQAAAAYAmiYXAAD//wBT/jgEoAXFAiYANQAAAAcAdwGW//f//wBR/jgDzwROAiYAVQAAAAcAdwEv//f//wBT/d4EoAXFAiYANQAAAAcBkQGB/qf//wBR/d4DzwROAiYAVQAAAAcBkQEa/qf//wBT/+sEoAdjAiYANQAAAAcAmwCcAXL//wBR/+wDzwYMAiYAVQAAAAYAmz0bAAD//wA1/fIEtQWwAiYANgAAAAcBkQGB/rv//wAZ/egCcAVBAiYAVgAAAAcBkQC5/rH//wA1/ksEtQWwAiYANgAAAAcAdwGWAAr//wAZ/kEClwVBAiYAVgAAAAcAdwDOAAD//wA1AAAEtQdOAiYANgAAAAcAmwCkAV3//wAZ/+wDLwY2ACYAVgAAAAcBkQHVBTD//wCG/+sE8QdjAiYANwAAAAcAoADUAWz//wB7/+wECgYMAiYAVwAAAAYAoFoVAAD//wCG/+sE8Qb2AiYANwAAAAcAbgDNAUb//wB7/+wECgWgAiYAVwAAAAYAblPwAAD//wCG/+sE8QdcAiYANwAAAAcAnAEFAaz//wB7/+wECgYFAiYAVwAAAAcAnACLAFX//wCG/+sE8QePAiYANwAAAAcAngFnAbP//wB7/+wECgY4AiYAVwAAAAcAngDtAFz//wCG/+sE8QdLAiYANwAAAAcAoQE3AV3//wB7/+wEWAX0AiYAVwAAAAcAoQC9AAYAAQCG/nkE8QWwACcAAAERFAYHDgEVFBYzMjY3Fw4BIyImNTQ2NyIGIyIkNREzERQWMzI2NREE8YyBUFEgJxoqFhUhTTdedSMnBA4D//7P86mUma8FsPwwo9o8M1w4ISMNCo4TGWlgLlQoAf/2A9D8MJyXl5wD0AAAAQB7/lIEEAQ6ACcAACEOARUUFjMyNjcXDgEjIiY1NDY3LwEOASMiJjURMxEUFjMyNjcRMxED+1BRICcaKhYVIU03XnVJUA8CNJhnssDyWl9ZdSPzM1w4ISMNCo4TGWlgQnUziwFRVNjvAof9d5FuPjwDDvvGAAD//wBEAAAGuwdHAiYAOQAAAAcAmgGVAVn//wAlAAAF0AXwAiYAWQAAAAcAmgERAAL//wATAAAE7wdHAiYAOwAAAAcAmgCaAVn//wAQ/ksD/AXwAiYAWwAAAAYAmhwCAAD//wATAAAE7wcNAiYAOwAAAAcAaAB2AV3//wBYAAAEcQciAiYAPAAAAAcAcwFvAVz//wBVAAADxAXKAiYAXAAAAAcAcwEeAAT//wBYAAAEcQciAiYAPAAAAAcAnQFAAWz//wBVAAADxAXKAiYAXAAAAAcAnQDvABT//wBYAAAEcQdPAiYAPAAAAAcAmwCKAV7//wBVAAADxAX3AiYAXAAAAAYAmzkGAAD////2AAAHVwchAiYAfwAAAAcAcwK4AVv//wA0/+sGhAXgAiYAhAAAAAcAcwJuABr//wBp/6EFEAdfAiYAgQAAAAcAcwHSAZn//wBT/3YENAXcAiYAhwAAAAcAcwEuABb////qAAAEQgSNAiYBqQAAAAcB0/9T/3f////qAAAEQgSNAiYBqQAAAAcB0/9T/3f//wA8AAAD6QSNAiYBuAAAAAYB0y3eAAD//wAcAAAErAXfAiYBpgAAAAcAQgC6ABn//wAcAAAErAXeAiYBpgAAAAcAcwFxABj//wAcAAAErAYEAiYBpgAAAAYAmnUWAAD//wAcAAAErAYgAiYBpgAAAAYAoHcpAAD//wAcAAAErAXKAiYBpgAAAAYAaFEaAAD//wAcAAAErAZMAiYBpgAAAAcAngEKAHD//wAcAAAErAZ7AiYBpgAAAAcB1AEQ/+b//wBo/j4EMgSdAiYBqAAAAAcAdwFi//3//wCOAAADzgXfAiYBqgAAAAYAQnsZAAD//wCOAAADzgXeAiYBqgAAAAcAcwEyABj//wCOAAADzgYEAiYBqgAAAAYAmjYWAAD//wCOAAADzgXKAiYBqgAAAAYAaBIaAAD///+sAAABgAXfAiYBrgAAAAcAQv9iABn//wCOAAACZAXeAiYBrgAAAAYAcxgYAAD///+4AAACWQYEAiYBrgAAAAcAmv8dABb///+dAAACcgXKAiYBrgAAAAcAaP75ABr//wCOAAAEhQYgAiYBswAAAAcAoACQACn//wBm/+4EZAXwAiYBtAAAAAcAQgCxACr//wBm/+4EZAXvAiYBtAAAAAcAcwFoACn//wBm/+4EZAYVAiYBtAAAAAYAmmwnAAD//wBm/+4EZAYxAiYBtAAAAAYAoG46AAD//wBm/+4EZAXbAiYBtAAAAAYAaEgrAAD//wB+/+4EewXhAiYBuQAAAAcAQgDKABv//wB+/+4EewXgAiYBuQAAAAcAcwGBABr//wB+/+4EewYGAiYBuQAAAAcAmgCFABj//wB+/+4EewXMAiYBuQAAAAYAaGEcAAD//wATAAAEPAXeAiYBvQAAAAcAcwE4ABj//wAcAAAErAWzAiYBpgAAAAYAbnADAAD//wAcAAAErAYZAiYBpgAAAAcAnACoAGkAAgAc/lIErASNABoAHQAAATMBIw4BFRQWMzI2NxcOASMiJjU0NjcnIQcjASEDAej4AcxQUFEgJxoqFhUhTTdedVNbUP4ZVv4BnAFXrASN+3MzXDghIw0KjhMZaWBHezXX6QGrAc0AAP//AGj/7wQyBe4CJgGoAAAABwBzAVoAKP//AGj/7wQyBhQCJgGoAAAABgCaXiYAAP//AGj/7wQyBe4CJgGoAAAABwCdASsAOP//AGj/7wQyBhsCJgGoAAAABgCbdSoAAP//AI4AAARCBgsCJgGpAAAABgCbJRoAAP//AI4AAAPOBbMCJgGqAAAABgBuMQMAAP//AI4AAAPOBhkCJgGqAAAABgCcaWkAAP//AI4AAAPOBd4CJgGqAAAABwCdAQMAKAABAI7+UgPOBI0AIAAAASERIRUjDgEVFBYzMjY3Fw4BIyImNTQ2NychESEVIREhA3j+CAJOQ1BRICcaKhYVIU03XnVESQH92gNA/bIB+AH8/sTAM1w4ISMNCo4TGWlgQHExAwSNwf7y//8AjgAAA84GCwImAaoAAAAGAJtNGgAA//8AaP/vBF8GFAImAawAAAAGAJpuJgAA//8AaP/vBF8GKQImAawAAAAHAJwAoQB5//8AaP/vBF8F7gImAawAAAAHAJ0BOwA4//8AaP3kBF8EnQImAawAAAAHAZEBaf6t//8AjgAABHoGBAImAa0AAAAHAJoAggAW////nwAAAnAGIAImAa4AAAAHAKD/HwAp////nwAAAnYFswImAa4AAAAHAG7/GAAD////xQAAAksGGQImAa4AAAAHAJz/UABp////+f5SAYAEjQImAa4AAAAGAJ/QAAAA//8AhAAAAYcF3gImAa4AAAAGAJ3qKAAA//8ALv/uBF4GAAImAa8AAAAHAJoBIgAS//8Ajv3uBF0EjQImAbAAAAAHAZEBG/63//8AjgAAA3kFywImAbEAAAAGAHMXBQAA//8Ajv3wA3kEjQImAbEAAAAHAZEA7f65//8AjgAAA3kEjwImAbEAAAAHAZEBkAOJ//8AjgAAA3kEjQImAbEAAAAHAJ0BSv0y//8AjgAABIUF3gImAbMAAAAHAHMBigAY//8Ajv3wBIUEjQImAbMAAAAHAZEBgv65//8AjgAABIUGCwImAbMAAAAHAJsApQAa//8AZv/uBGQFxAImAbQAAAAGAG5nFAAA//8AZv/uBGQGKgImAbQAAAAHAJwAnwB6//8AZv/uBGwGGQImAbQAAAAHAKEA0QAr//8AjgAABEkF3gImAbYAAAAHAHMBIQAY//8Ajv3wBEkEjQImAbYAAAAHAZEBGf65//8AjgAABEkGCwImAbYAAAAGAJs8GgAA//8AT//uBBkF8AImAbcAAAAHAHMBPQAq//8AT//uBBkGFgImAbcAAAAGAJpBKAAA//8AT/47BBkEnQImAbcAAAAHAHcBSv/6//8AT//uBBkGHQImAbcAAAAGAJtYLAAA//8APP3wA+kEjQImAbgAAAAHAZEBFv65//8APAAAA+kGCwImAbgAAAAGAJs5GgAA//8Afv/uBHsGIgImAbkAAAAHAKAAhwAr//8Afv/uBHsFtQImAbkAAAAHAG4AgAAF//8Afv/uBHsGGwImAbkAAAAHAJwAuABr//8Afv/uBHsGTgImAbkAAAAHAJ4BGgBy//8Afv/uBIUGCgImAbkAAAAHAKEA6gAcAAEAfv58BHsEjQAmAAABERQGBzMOARUUFjMyNjcXDgEjIiY1NDY3IyIkNREzERQWMzI2NREEe3NsAVBRICcaKhYVIU03XnUjJgbp/uryjn9/jQSN/QqBtjYzXDghIw0KjhMZaWAuVCfdzAL2/Qpyd3dyAvb//wA0AAAF1wYEAiYBuwAAAAcAmgEWABb//wATAAAEPAYEAiYBvQAAAAYAmjwWAAD//wATAAAEPAXKAiYBvQAAAAYAaBgaAAD//wBKAAAD6wXfAiYBvgAAAAcAcwEoABn//wBKAAAD6wXfAiYBvgAAAAcAnQD5ACn//wBKAAAD6wYMAiYBvgAAAAYAm0MbAAD//wBP/+4IiQSdACYBtwAAAAcBtwRwAAD//wAaAAAFKAZwAiYAIwAAAAYAqeUAAAD///+vAAAE2QZyACYAJ2QAAAcAqf7YAAL////cAAAFdAZwACYAKmQAAAcAqf8FAAD////jAAACBAZyACYAK2QAAAcAqf8MAAL//wAq/+sFLwZwACYAMRQAAAcAqf9TAAD///9nAAAFUwZwACYAO2QAAAcAqf6QAAD//wATAAAE7gZwACYAtRQAAAcAqf88AAD///+w/+sCoQZfAiYAvgAAAAcAqv8T/7v//wAaAAAFKAWwAgYAIwAA//8AnwAABLwFsAIGACQAAP//AJ8AAAR1BbACBgAnAAD//wBYAAAEcQWwAgYAPAAA//8AnwAABRAFsAIGACoAAP//AK0AAAGgBbACBgArAAD//wCfAAAFLwWwAgYALQAA//8AnwAABmIFsAIGAC8AAP//AJ8AAAUQBbACBgAwAAD//wB0/+sFGwXFAgYAMQAA//8AnwAABNoFsAIGADIAAP//ADUAAAS1BbACBgA2AAD//wATAAAE7wWwAgYAOwAA//8ALwAABOoFsAIGADoAAP///70AAAKSBw0CJgArAAAABwBo/xkBXf//ABMAAATvBw0CJgA7AAAABwBoAHYBXf//AFb/6wR5BlwCJgC2AAAABwCpAUT/7P//AGD/7AQMBlsCJgC6AAAABwCpAQ3/6///AH7+YQQGBlwCJgC8AAAABwCpARf/7P//AKn/6wJ+BkYCJgC+AAAABgCpA9YAAP//AID/6wQIBmACJgDGAAAABgCqGLwAAP//AI4AAARrBDoCBgCLAAD//wBT/+wENAROAgYAUQAA//8Akv5gBB8EOgIGAHQAAP//ACAAAAP1BDoCBgBYAAD//wAhAAAD7QQ6AgYAWgAA////xP/rApkFtQImAL4AAAAHAGj/IAAF//8AgP/rBAgFtgImAMYAAAAGAGglBgAA//8AU//sBDQGXAImAFEAAAAHAKkBGf/s//8AgP/rBAgGRwImAMYAAAAHAKkBCf/X//8AZv/rBi0GRQImAMkAAAAHAKkCIf/V//8AnwAABHUHDQImACcAAAAHAGgAWwFd//8AnwAABDcHIQImAKwAAAAHAHMBfQFbAAEAU//rBKAFxQAlAAABNCYnJiQ1NCQzMgAVIzQmIyIGFRQWFx4BFRQEIyIkNTMUFjMyNgOtg676/v4BH+r0ASLzlo+HjZe47+/+4fHp/qzztJaJlAF2XHMuQs6us+H/AL1yiXNdVWsyQdiwudTu24eBawD//wCtAAABoAWwAgYAKwAA////vQAAApIHDQImACsAAAAHAGj/GQFd//8AOv/rA+YFsAIGACwAAP//AJ8AAAUvBbACBgAtAAD//wCfAAAFLwbJAiYALQAAAAcAcwFzAQP//wA//+sE2QdcAiYA2QAAAAcAnADPAaz//wAaAAAFKAWwAgYAIwAA//8AnwAABLwFsAIGACQAAP//AJ8AAAQ3BbACBgCsAAD//wCfAAAEdQWwAgYAJwAA//8AmgAABQsHXAImANcAAAAHAJwBHQGs//8AnwAABmIFsAIGAC8AAP//AJ8AAAUQBbACBgAqAAD//wB0/+sFGwXFAgYAMQAA//8AnwAABREFsAIGALEAAP//AJ8AAATaBbACBgAyAAD//wB0/+sE2AXFAgYAJQAA//8ANQAABLUFsAIGADYAAP//AC8AAATqBbACBgA6AAD//wBe/+wEAQROAgYAQwAA//8AWf/sA/gETwIGAEcAAP//AIYAAAQSBgUCJgDrAAAABwCcAJUAVf//AFP/7AQ0BE4CBgBRAAD//wCA/mAENAROAgYAUgAAAAEAUf/sA/cETgAbAAAlMjY1MxQEIyICPQE0EjMyFhUjNCYjIgYdARQWAjtbfOX+/7j0+fnzx/PldWKLbGquZ1Gg2gEu8SPwATDht1t6w5ojncAA//8AEP5LA/wEOgIGAFsAAP//ACEAAAPtBDoCBgBaAAD//wBZ/+wD+AXMAiYARwAAAAYAaBocAAD//wCFAAADTQXKAiYA5wAAAAcAcwC+AAT//wBR/+wDzwROAgYAVQAA//8AkAAAAYMGGAIGAEsAAP///6AAAAJ1BbYCJgCKAAAABwBo/vwABv///7D+SwGOBhgCBgBMAAD//wCPAAAEZQXJAiYA7AAAAAcAcwE8AAP//wAQ/ksD/AYFAiYAWwAAAAYAnE9VAAD//wBEAAAGuwciAiYAOQAAAAcAQgHaAVz//wAlAAAF0AXLAiYAWQAAAAcAQgFWAAX//wBEAAAGuwchAiYAOQAAAAcAcwKRAVv//wAlAAAF0AXKAiYAWQAAAAcAcwINAAT//wBEAAAGuwcNAiYAOQAAAAcAaAFxAV3//wAlAAAF0AW2AiYAWQAAAAcAaADtAAb//wATAAAE7wciAiYAOwAAAAcAQgDfAVz//wAQ/ksD/AXLAiYAWwAAAAYAQmEFAAD//wBSBAQBCwYYAgYACQAA//8AUgP8Aj8GGAIGAAQAAP//AJoAAAOyBbAAJgQbAAAABwQbAiUAAP//ADEAAARSBi0AJgBIAAAABwBOAs8AAP///7X+SwJsBeoCJgCYAAAABwCb/z//+f//ADMD1gFpBhgCBgFmAAD//wCfAAAGYgchAiYALwAAAAcAcwKSAVv//wCAAAAGdQXfAiYATwAAAAcAcwKhABn//wAa/n4FKAWwAiYAIwAAAAcAogFIAAD//wBe/oUEAQROAiYAQwAAAAcAogCQAAf///89/+sFGwasAiYAMQAAAAcB1f7RANX//wAxAAAG5gYtACYASAAAAAcBkgLPAAD//wAxAAAHIQYtACYASAAAACcASALPAAAABwBOBZ4AAP//AJ8AAAR1ByICJgAnAAAABwBCAMQBXP//AJoAAAULByICJgDXAAAABwBCAS8BXP//AFn/7AP4BeECJgBHAAAABwBCAIMAG///AIYAAAQSBcsCJgDrAAAABwBCAKcABf//AEgAAAVRBbACBgC0AAD//wBP/iIFfgQ6AgYAyAAA//8AEQAABO8HRAImARQAAAAHAKcEOwFW////4wAABBgGMgImARUAAAAHAKcD1wBE//8AU/5LCIQETgAmAFEAAAAHAFsEiAAA//8AdP5LCYsFxQAmADEAAAAHAFsFjwAA//8ASv46BHsFxQImANYAAAAHAZwBkv+g//8ATf47A8QETQImAOoAAAAHAZwBOf+h//8AdP4+BNgFxQImACUAAAAHAZwB0/+k//8AUf4+A/cETgImAEUAAAAHAZwBS/+k//8AEwAABO8FsAIGADsAAP//ACD+XwP1BDoCBgC4AAD//wCtAAABoAWwAgYAKwAA//8AGAAAB4kHXAImANUAAAAHAJwCHAGs//8AFwAABl8GBQImAOkAAAAHAJwBpQBV//8ArQAAAaAFsAIGACsAAP//ABoAAAUoB1wCJgAjAAAABwCcAOoBrP//AF7/7AQBBhoCJgBDAAAABgCcb2oAAP//ABoAAAUoBw0CJgAjAAAABwBoAJMBXf//AF7/7AQBBcsCJgBDAAAABgBoGBsAAP////YAAAdXBbACBgB/AAD//wA0/+sGhAROAgYAhAAA//8AnwAABHUHXAImACcAAAAHAJwAsgGs//8AWf/sA/gGGwImAEcAAAAGAJxxawAA//8AU//qBRsG2gImAUEAAAAHAGgAcwEq//8AWf/sA/gEUAIGAJkAAP//AFn/7AP4BcwCJgCZAAAABgBoGhwAAP//ABgAAAeJBw0CJgDVAAAABwBoAcUBXf//ABcAAAZfBbYCJgDpAAAABwBoAU4ABv//AEr/6wR7ByICJgDWAAAABwBoAFgBcv//AE3/7APEBcoCJgDqAAAABgBoABoAAP//AJoAAAULBvYCJgDXAAAABwBuAOUBRv//AIYAAAQSBaACJgDrAAAABgBuXfAAAP//AJoAAAULBw0CJgDXAAAABwBoAMYBXf//AIYAAAQSBbYCJgDrAAAABgBoPgYAAP//AHT/6wUbByICJgAxAAAABwBoALoBcv//AFP/7AQ0BcsCJgBRAAAABgBoNRsAAP//AGr/6wURBcUCBgESAAD//wBS/+wEMwROAgYBEwAA//8Aav/rBREHCAImARIAAAAHAGgAxgFY//8AUv/sBDMF5wImARMAAAAGAGghNwAA//8AiP/sBNcHIwImAOIAAAAHAGgAjwFz//8AUf/rA+gFywImAPoAAAAGAGgPGwAA//8AP//rBNkG9gImANkAAAAHAG4AlwFG//8AEP5LA/wFoAImAFsAAAAGAG4X8AAA//8AP//rBNkHDQImANkAAAAHAGgAeAFd//8AEP5LA/wFtgImAFsAAAAGAGj5BgAA//8AP//rBNkHSwImANkAAAAHAKEBAQFd//8AEP5LBBwF9AImAFsAAAAHAKEAgQAG//8AjwAABOkHDQImANwAAAAHAGgAwgFd//8AXwAAA+AFtgImAPQAAAAGAGgNBgAA//8AnwAABlkHDQAmAOELAAAnACsEuQAAAAcAaAFuAV3//wCPAAAFyQW2ACYA+QAAACcAigRHAAAABwBoAR8ABv//AC/+SwVUBbACJgA6AAAABwGaA8YAAP//ACH+SwRYBDoCJgBaAAAABwGaAsoAAP//AFP/7AQDBhgCBgBGAAD//wAu/ksF/QWwAiYA2AAAAAcBmgRvAAD//wAf/ksFBwQ6AiYA7QAAAAcBmgN5AAD//wAa/qUFKAWwAiYAIwAAAAcAqAT8AAD//wBe/qwEAQROAiYAQwAAAAcAqAREAAf//wAaAAAFKAfHAiYAIwAAAAcApgT5AUj//wBe/+wEAQaFAiYAQwAAAAcApgR+AAb//wAaAAAFPgejAiYAIwAAAAcBowCzARP//wBe/+wEwwZiAiYAQwAAAAYBozjSAAD//wAEAAAFKAegAiYAIwAAAAcBogC4AR3///+J/+wEAQZfAiYAQwAAAAYBoj3cAAD//wAaAAAFKAfWAiYAIwAAAAcBoQC3AQv//wBe/+wERgaVAiYAQwAAAAYBoTzKAAD//wAaAAAFKAfiAiYAIwAAAAcBoAC4ARH//wBe/+wEAQahAiYAQwAAAAYBoD3QAAD//wAa/qUFKAdHAiYAIwAAACcAmgC3AVkABwCoBPwAAP//AF7+rAQBBgUCJgBDAAAAJgCaPBcABwCoBEQABwAA//8AGgAABSgHzgImACMAAAAHAZ8A4wFQ//8AXv/sBAEGjAImAEMAAAAGAZ9oDgAA//8AGgAABSgIFwImACMAAAAHAaQA6AF///8AXv/sBAEG1QImAEMAAAAGAaRtPQAA//8AGgAABSgISgImACMAAAAHAZ4A4gFC//8AXv/sBAEHCAImAEMAAAAGAZ5nAAAA//8AGgAABSgIJAImACMAAAAHAZ0A5QFI//8AXv/sBAEG4gImAEMAAAAGAZ1qBgAA//8AGv6lBSgHXAImACMAAAAnAJwA6gGsAAcAqAT8AAD//wBe/qwEAQYaAiYAQwAAACYAnG9qAAcAqAREAAcAAP//AJ/+rwR1BbACJgAnAAAABwCoBMAACv//AFn+pQP4BE8CJgBHAAAABwCoBJUAAP//AJ8AAAR1B8cCJgAnAAAABwCmBMEBSP//AFn/7AP4BoYCJgBHAAAABwCmBIAAB///AJ8AAAR1B2MCJgAnAAAABwCgAIEBbP//AFn/7AP4BiICJgBHAAAABgCgQCsAAP//AJ8AAAUGB6MCJgAnAAAABwGjAHsBE///AFn/7ATFBmMCJgBHAAAABgGjOtMAAP///8wAAAR1B6ACJgAnAAAABwGiAIABHf///4v/7AP4BmACJgBHAAAABgGiP90AAP//AJ8AAASJB9YCJgAnAAAABwGhAH8BC///AFn/7ARIBpYCJgBHAAAABgGhPssAAP//AJ8AAAR1B+ICJgAnAAAABwGgAIABEf//AFn/7AP4BqICJgBHAAAABgGgP9EAAP//AJ/+rwR1B0cCJgAnAAAAJwCaAH8BWQAHAKgEwAAK//8AWf6lA/gGBgImAEcAAAAmAJo+GAAHAKgElQAAAAD//wCtAAACFwfHAiYAKwAAAAcApgN+AUj//wCPAAAB+gZxAiYAigAAAAcApgNh//L//wCf/q8BrQWwAiYAKwAAAAcAqAN9AAr//wCC/q8BkAYYAiYASwAAAAcAqANgAAr//wB0/pwFGwXFAiYAMQAAAAcAqAUf//f//wBT/pwENAROAiYAUQAAAAcAqASb//f//wB0/+sFGwfcAiYAMQAAAAcApgUgAV3//wBT/+wENAaFAiYAUQAAAAcApgSbAAb//wB0/+sFZQe4AiYAMQAAAAcBowDaASj//wBT/+wE4AZiAiYAUQAAAAYBo1XSAAD//wAr/+sFGwe1AiYAMQAAAAcBogDfATL///+m/+wENAZfAiYAUQAAAAYBolrcAAD//wB0/+sFGwfrAiYAMQAAAAcBoQDeASD//wBT/+wEYwaVAiYAUQAAAAYBoVnKAAD//wB0/+sFGwf3AiYAMQAAAAcBoADfASb//wBT/+wENAahAiYAUQAAAAYBoFrQAAD//wB0/pwFGwdcAiYAMQAAACcAmgDeAW4ABwCoBR//9///AFP+nAQ0BgUCJgBRAAAAJgCaWRcABwCoBJv/9wAA//8AZv/rBa8HEwImAJQAAAAHAHMB1QFN//8AUv/sBLwF3wImAJUAAAAHAHMBVgAZ//8AZv/rBa8HFAImAJQAAAAHAEIBHgFO//8AUv/sBLwF4AImAJUAAAAHAEIAnwAa//8AZv/rBa8HuQImAJQAAAAHAKYFGwE6//8AUv/sBLwGhQImAJUAAAAHAKYEnAAG//8AZv/rBa8HVQImAJQAAAAHAKAA2wFe//8AUv/sBLwGIQImAJUAAAAGAKBcKgAA//8AZv6lBa8GLgImAJQAAAAHAKgFCwAA//8AUv6cBLwEqQImAJUAAAAHAKgEm//3//8Ahv6cBPEFsAImADcAAAAHAKgFE//3//8Ae/6lBAoEOgImAFcAAAAHAKgERQAA//8Ahv/rBPEHxwImADcAAAAHAKYFFAFI//8Ae//sBAoGcQImAFcAAAAHAKYEmv/y//8Ahv/rBksHIQImAJYAAAAHAHMB1AFb//8Ae//sBSkFygImAJcAAAAHAHMBVAAE//8Ahv/rBksHIgImAJYAAAAHAEIBHQFc//8Ae//sBSkFywImAJcAAAAHAEIAnQAF//8Ahv/rBksHxwImAJYAAAAHAKYFGgFI//8Ae//sBSkGcQImAJcAAAAHAKYEmv/y//8Ahv/rBksHYwImAJYAAAAHAKAA2gFs//8Ae//sBSkGDAImAJcAAAAGAKBaFQAA//8Ahv6cBksGEAImAJYAAAAHAKgFGf/3//8Ae/6lBSkElAImAJcAAAAHAKgERQAA//8AE/6vBO8FsAImADsAAAAHAKgE2wAK//8AEP3/A/wEOgImAFsAAAAHAKgFOv9a//8AEwAABO8HxwImADsAAAAHAKYE3AFI//8AEP5LA/wGcQImAFsAAAAHAKYEXv/y//8AEwAABO8HYwImADsAAAAHAKAAnAFs//8AEP5LA/wGDAImAFsAAAAGAKAeFQAAAAIAU//sBK8GGAAaACgAAAEjESMnDgEjIgI9ARASMzIWFzc1IzUzNTMVMwEUFjMyNjcRLgEjIgYVBK+s0hQ1j2HL2trNWocyA/Dw86z8l3F/TmkjI2lMf3MEyfs3hExMARzxFQEIAThEQQH/qqWl/IaZrkA+Adg9Qs6rAP//AFP+xASvBhgAJgBGAAAAJwHTAYkCQgAHAEEAm/+D//8An/6aBWcFsAImAC0AAAAHAZwEGAAA//8Aj/6aBKEEOgImAOwAAAAHAZwDUgAA//8An/6aBbMFsAImACoAAAAHAZwEZAAA//8Ahv6aBLQEOgImAO8AAAAHAZwDZQAA//8ANf6aBLUFsAImADYAAAAHAZwCQgAA//8AI/6aA9AEOgImAPEAAAAHAZwBxQAA//8AL/6aBQQFsAImADoAAAAHAZwDtQAA//8AIf6aBAgEOgImAFoAAAAHAZwCuQAA//8Aj/6aBYwFsAImANwAAAAHAZwEPQAA//8AX/6aBIMEOwImAPQAAAAHAZwDNAAA//8Aj/6aBOkFsAImANwAAAAHAZwC8QAA//8AX/6aA+AEOwImAPQAAAAHAZwB6AAA//8An/6aBDcFsAImAKwAAAAHAZwA5gAA//8Ahf6aA00EOgImAOcAAAAHAZwApQAA//8AGP6aB+QFsAImANUAAAAHAZwGlQAA//8AF/6aBpMEOgImAOkAAAAHAZwFRAAA//8AIP5DBcAFxAImATsAAAAHAZwC7f+p////zv5HBHYETwImATwAAAAHAZwB9f+t//8AfQAABAwGGAIGAEoAAAAC/9cAAATBBbAAEgAbAAABIxUhMgQVFAQjIREjNTM1MxUzAxEhMjY1NCYjAmbfATT4AQ7+8ff92b2989/fATSKiYiLBEfK7M7Q8wRHqr+//cn+CJFybocAAv/XAAAEwQWwABIAGwAAASMVITIEFRQEIyERIzUzNTMVMwMRITI2NTQmIwJm3wE0+AEO/vH3/dm9vfPf3wE0iomIiwRHyuzO0PMER6q/v/3J/giRcm6HAAH/9wAABDcFsAANAAABIxEjESM1MxEhFSERMwKG9POoqAOY/Vv0Ap/9YQKfqgJnw/5cAAAB/+kAAANNBDoADQAAASERIxEjNTMRIRUhFSECeP7/8pycAsj+KgEBAdH+LwHRqgG/xPsAAf/dAAAFQwWwABQAAAEjESMRIzUzNTMVMxUjETMBIQkBIQJOqPPW1vPGxosByQEg/fQCNf7XAnb9igR6qoyMqv7NAmn9Sf0HAAAAAAH/zAAABEkGGAAUAAABIxEjESM1MzUzFTMVIxEzASEJASEB9m/yycny1NRpAQ8BHP6fAY/+5gHZ/icEu6qzs6r94QGe/hH9tQAAAP//AJr+bwX3B1wCJgDXAAAAJwCcAR0BrAAHAA4Ek//E//8Ahv5vBP4GBQImAOsAAAAnAJwAlQBVAAcADgOa/8T//wCf/m8F/AWwAiYAKgAAAAcADgSY/8T//wCG/m8E/QQ6AiYA7wAAAAcADgOZ/8T//wCf/m8HTgWwAiYALwAAAAcADgXq/8T//wCP/m8GWwQ6AiYA7gAAAAcADgT3/8T//wAu/m8F9gWwAiYA2AAAAAcADgSS/8T//wAf/m8FAAQ6AiYA7QAAAAcADgOc/8QAAQATAAAE7wWwAA8AAAkBIQEzFSMHESMRIzUzASECgAFgAQ/+aWzHB/LPdf5pAQ8C7ALE/QWqDv4DAguqAvsAAAEAIP5fA/UEOgARAAAFIxEjESM1MwEzExczNxMzATMDWdXzx5v+u/vdFAMU1/v+vKgB/mABoKoDkf00X18CzPxvAAAAAQAvAAAE6gWwABEAAAEjASEJASEBIzUzASEJASEBMwPXjwGi/t3+w/7E/uEBm4J0/n0BHQEwATQBH/59gQKV/WsCI/3dApWqAnH95gIa/Y8AAAAAAQAhAAAD7QQ6ABEAAAEjASELASEBIzUzASEbASEBMwNRkgEu/uzR0f7qAS2Mgf7oARTFyAEX/ueHAdf+KQF8/oQB16oBuf6NAXP+RwAAAP//AGD/7AQMBE0CBgC6AAD//wAWAAAEcgWwAiYAKAAAAAcB0/9//m7//wCyAm0F6gMxAEYBhrYAZmZAAAACAJoAAAGNBbAAAwAHAAABIxEzESM1MwGN8/Pz8wHrA8X6UOoAAAAAAAAAAAAAAAAAABgATgCOAOQBPAFMAW4BkgG2Ac4B5AHyAf4CDAI8AkwCdgKwAtIDBANEA2IDqgPsA/gEBAQcBDAESAR4BOwFCgVABXIFmAWyBcgF/gYWBiIGPgZcBmwGkAaqBt4HAgc+B3YHsAfEB+QH/ggmCEgIYAh2CIoImAiqCMII0AjgCR4JVAl+CbIJ5goKCk4KcgqECqgKxgrSCwwLMAteC5QLyAvoDCAMRgxqDIIMrAzMDPYNDA08DUoNeA2iDbYN6A4cDmYOkA6kDwgPHA9yD7IPvg/OEDIQQBBmEIYQsBDqEPoRIBE2EUQRYhFyEZwRqBG6EcwR3hIOEjgSWhKqEtATChNoE7gT0hQeFFQUfhSKFKgUxBTcFQgVPBV8FdAV7BYiFmIWnBbGFvQXEhdGF1oXbheIF5YXvBfeF/4YFBg6GEgYVhhgGH4YlBiiGLAYyhjSGOQY+hk0GUoZZhl4GZYZ0Bn8GjgafBq8GtgbIBtaG5IbthvuHAwcRByOHLYc6B0eHVIddh2cHdoeDB5MHogexB8KHzgfcB+mH9YgACAYIEAgbCCaINYg7iEOITgheiGSIbYh0CHwIhgiRCJoIpwi2CMAI0IjeCOKI7Qj4CQaJDQkUiRyJJIkqiS8JNAlKiVCJWQlfiWeJcQl7iYQJj4mdCacJtgnBic6J2gnliewJ+IoFChCKIIouCjaKP4pLClcKZIpxCoGKkIqkirgKxorTityK5or3CwYLHos2C0WLVQtgC2oLdQt6C4GLhYuJi7ALxgvRC9yL7AvxC/YMAAwJjBMMHAwkDCwMMww6DESMTwxkjHkMgIyIDJKMnIylDLUMxAzPDNmM44ztjPuNBo0RjRWNGY0jDTENRY1XDWiNeQ2JjZgNpo2zjcCNzw3cjegN844DDgMOAw4DDgMOAw4DDgMOAw4DDgMOAw4DDgWOCA4LDhCOFg4bjh6OIY4kji2ONA49DkMORg5KDmkObg5zDnaOfg6GjpWOpg62DsuO2g7rjvYPA48IDwyPEQ8VjySPKY8xDzSPOw9Pj1sPcQ96D34Pgg+LD46Pk4+ZD6OPo4/aD+uP+BAAEAwQFBAbkCQQJ5A0EEAQSBBTkF2QZBBqkHKQdpB9kIsQlpCfkKYQq5C4EL4QwRDIEM+Q05DbkOIQ7ZD7EQkRFxEcESQRKpEzETsRQRFGkVGRVZFfkW4RdhGAkY+RlpGokbeRu5HFkdQR2BHkEfMR+ZILkhqSJRIokjQSPBJKklMSX5JvkosSkpKiErQSwpLTkt0S7JL4Ev+TB5MOkxYTJpMvEzETMxM1E0ETTRNYE18TapNtk3CTc5N2k3mTfJN/k4KThZOIk4uTjpORk5STl5Oak52ToJOjk6aTqZOsk6+TspO1k7iTu5O+k8GTxJPHk8qTzZPQk9OT1pPZk9yT35Pik+WT6JPrk+6T8ZP0k/eT+pP9lACUA5QGlAmUDJQPlBKUFZQYlBuUKRQ/FEIURRRIFEsUThRRFFQUVxRaFF0UYBRjFGYUaRRsFG8UfBSPlJKUlZSYlJuUnpShlKSUp5SqlK2UsJSzlLaUuZS8lL+UwpTFlMiUy5TOlNGU1JTXlNqU3ZTglOOU5pTplOyU75TylPWU+JT7lP6VAZUElQeVCpUNlRCVE5UWlRmVHJUflSKVJZUolSuVLpUxlTSVN5U6lT2VQJVDlUaVSZVMlU+VUpVVlViVW5VelWGVZJVnlWqVbZVwlXOVdpV5lXyVf5WOlZ2VoJWjlaaVqZWsla+VspW1lbiVu5W+lcGVxJXHlcqVzZXQldOV1pXZldyV35XileWV6JXrle6V8ZX0lfeV+pX9lgCWA5YGlgmWDJYPlhKWFZYYlhuWHpYhliSWJ5YqljeWOpY9lkCWQ5ZGlkmWTJZPllyWX5ZilmWWaJZrlm6WcZZ0lneWepZ9loCWg5aGlomWjJaPlpKWlZaYlpuWnpahlqSWp5aqlq2WsJazlraWuZa8lr+WwpbFlsiWy5baFt0W4BbjFuYW6RbsFu8W8hb1FvgW+xb+FwEXBBcHFwkXCxcNFw8XERcTFxUXFxcZFxsXHRcfFyEXIxcmFykXLBcvFzIXNRc4FzoXPBc+F0AXQhdFF0gXSxdOF1EXVBdXF2WXZ5dql2yXbpdxl3SXdpd4l3qXfJd/l4GXg5eFl4eXiZeLl42Xj5eRl5OXlpeYl5qXpRenF6kXrBevF7EXsxe2F7gXuxe+F8EXxBfHF8oXzRfQF9MX1hfYF9oX3RfgF+MX5RfoF+sX7hfxF/QX9xf7F/4YARgEGAcYCRgLGA4YERgUGBcYGhgdGCAYIxglGCcYKRgsGC8YMRg0GDcYOhg9GD8YQRhEGEcYShhMGE8YUhhVGFgYWxheGGEYZBhnGGoYbRhvGHEYdBh3GHoYfRiAGIMYhhiJGIwYjxiSGJUYmRidGKAYoxilGKgYqxiuGLEYtBi3GLoYvRjAGMMYxhjJGMwYzxjTGNcY2hjdGOAY4xjmGOkY7BjvGPMY9xj6GP0ZABkDGQYZCRkMGQ8ZEhkVGRgZGxkeGSEZJRkpGSwZLxkyGTUZOBk7GT4ZQRlEGUcZShlNGVAZUxlWGVkZXRlhGWQZZxlqGW0ZcBlzGXYZeRl8GX8ZghmFGYgZixmOGZEZlBmXGZoZnRmgGaMZphmpGawZrxmyGbUZuBm7GcqZzpnRmdSZ15namd2Z4JnjmeaZ6Znsme+Z8pn1mfiZ+5n+mgGaBJoGmhGaHJojGimaMxo8mkCaRJpHmkqaTZpQmlOaVppemmcacZp7mn2agJqDGoMaiAAAAAAAB0BYgABAAAAAAAAAB8AAAABAAAAAAABAAYAHwABAAAAAAACAAYAJQABAAAAAAADABIAKwABAAAAAAAEAA0APQABAAAAAAAFABYASgABAAAAAAAGAA0AYAABAAAAAAAHACAAbQABAAAAAAAJAAYAjQABAAAAAAALAAoAkwABAAAAAAAMABMAnQABAAAAAAANAC4AsAABAAAAAAAOACoA3gABAAAAAAASAA0BCAADAAEECQAAAD4BFQADAAEECQABAAwBUwADAAEECQACAAwBXwADAAEECQADACQBawADAAEECQAEABoBjwADAAEECQAFACwBqQADAAEECQAGABoB1QADAAEECQAHAEAB7wADAAEECQAJAAwCLwADAAEECQALABQCOwADAAEECQAMACYCTwADAAEECQANAFwCdQADAAEECQAOAFQC0QADAAEECQAQAAwDJQADAAEECQARAAwDMUZvbnQgZGF0YSBjb3B5cmlnaHQgR29vZ2xlIDIwMTNSb2JvdG9NZWRpdW1Hb29nbGU6Um9ib3RvOjIwMTNSb2JvdG8gTWVkaXVtVmVyc2lvbiAxLjIwMDMxMDsgMjAxM1JvYm90by1NZWRpdW1Sb2JvdG8gaXMgYSB0cmFkZW1hcmsgb2YgR29vZ2xlLkdvb2dsZUdvb2dsZS5jb21DaHJpc3RpYW4gUm9iZXJ0c29uTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFJvYm90byBNZWRpdW0ARgBvAG4AdAAgAGQAYQB0AGEAIABjAG8AcAB5AHIAaQBnAGgAdAAgAEcAbwBvAGcAbABlACAAMgAwADEAMwBSAG8AYgBvAHQAbwBNAGUAZABpAHUAbQBHAG8AbwBnAGwAZQA6AFIAbwBiAG8AdABvADoAMgAwADEAMwBSAG8AYgBvAHQAbwAgAE0AZQBkAGkAdQBtAFYAZQByAHMAaQBvAG4AIAAxAC4AMgAwADAAMwAxADAAOwAgADIAMAAxADMAUgBvAGIAbwB0AG8ALQBNAGUAZABpAHUAbQBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUARwBvAG8AZwBsAGUALgBjAG8AbQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAIAAAAAAAD/agBkAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAAAAQIAAgADAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAKMAhACFAL0AlgDoAIYAjgCLAJ0AqQCkAIoBAwCDAJMA8gDzAI0AlwCIAQQA3gDxAJ4AqgD1APQA9gCiAJAA8ACRAO0AiQCgAOoAuAChAO4BBQDXAQYA4gDjAQcBCACwALEBCQCmAQoBCwEMAQ0BDgEPANgA4QDbANwA3QDgANkA3wEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiAJ8BIwEkASUBJgEnASgBKQEqASsBLAEtAJsBLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQCyALMBzgC2ALcAxAHPALQAtQDFAIIAwgCHAdAAqwDGAL4AvwC8AdEB0gHTAdQB1QHWAdcB2ACMAdkB2gHbAdwB3QCYAJoAmQDvAKUAkgCcAKcAjwCUAJUAuQHeAd8B4ADAAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AKwCOAI5AOkCOgI7AjwArQDJAMcArgBiAGMCPQBkAMsAZQDIAMoAzwDMAM0AzgBmANMA0ADRAK8AZwDWANQA1QBoAOsAagBpAGsAbQBsAG4CPgBvAHEAcAByAHMAdQB0AHYAdwB4AHoAeQB7AH0AfAB/AH4AgACBAOwAugI/AkACQQJCAkMCRAD9AP4CRQJGAkcCSAD/AQACSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAPgA+QJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAPsA/AKLAowA5ADlAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqIAuwKjAqQCpQKmAOYA5wKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA+8D8APxA/ID8wP0A/UD9gP3A/gD+QP6A/sD/AP9A/4D/wQABAEEAgQDBAQEBQQGBAcECAQJBAoECwQMBA0EDgQPBBAEEQQSBBMEFAQVBBYEFwQYBBkEGgQbBBwEHQQeBB8EIAQhAPcEIgQjAAQHdW5pMDAwOQZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkxRUYwB3VuaTFFRjEHdW5pMUVGNAd1bmkxRUY1B3VuaTFFRjYHdW5pMUVGNwd1bmkxRUY4B3VuaTFFRjkGZGNyb2F0B3VuaTIwQUIHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEFDB3VuaTA0QUQHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjYHdW5pMDRCNwd1bmkwNENCB3VuaTA0Q0MHdW5pMDRGNgd1bmkwNEY3B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNEJFB3VuaTA0QkYHdW5pMDRCQgd1bmkwNDhDB3VuaTA0NjIHdW5pMDQ5Mgd1bmkwNDkzB3VuaTA0OUUHdW5pMDQ5Rgd1bmkwNDhBB3VuaTA0OEIHdW5pMDRDOQd1bmkwNENBB3VuaTA0Q0QHdW5pMDRDRQd1bmkwNEM1B3VuaTA0QzYHdW5pMDRCMAd1bmkwNEIxB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTExB3VuaTIwMTUHdW5pMDAwMgAAAAEAAAAMAAAAAAAAAAIACADKAMoAAQEeASQAAQFWAWEAAQF2AXYAAQF7AXwAAQF+AX4AAQGTAZUAAQHVAdUAAQAAAAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAA//8AAQAAAAFrZXJuAAgAAAABAAAAAQAEAAIAAAAEAA5PUFUOekAAAYG8AAQAAAGtA2QDagNwA3YD7AP2BAgELgREBE4EcASSBJgE6gUYBToFXAWCBagFrgacBqIGyAbuB1AH4ggECCYIRAhKCFgIXghkCGoIkAiuCLwI2gjgCP4JHAkiCewKYgqICv4LBAsOCxQLGgsgCz4LaAtuC4QLiguoC64LtAvuC/QL/gwwDFoMhAyqDMwM8g0gDYINmA26DdwOJg5IDmoOoA7KDvQO/g8IDyYPPA9GD2QPag+AD84P7BAKECgQThB0EJIQnBDCEOgRDhGEEaoR0BHuEgwS1hLgEzIThBOOE5QTmhOgE6YTrBPSE9wT4hP0FB4UNBRGFFgUfhSEFJoUpBS2FNwU8hT4FP4VBBUeFSwVMhVYFX4WbBbiF1gXzhhEGLoZMBmmGbgZzhnkGfoaEBoyGlQadhqYGroa4BsGGywbUht4G34bhBuKG5AcIhxEHGYciByqHMwc7h0QHRYdHB0iHSgdLh1UHXodoB3GHeweCh4oHp4ewB82H1gfzh/wIAIgFCAmIDggXiB0IHogkCCWIKwgsiDIIM4g5CDqIQwhEiE0IVYheCGaIbwhwiIUIkIicCKeIswi7iL0IxYjHCM+I0QjSiNwI5YjvCPiJAgkLiQ8JEokWCVGJjQnIicoJy4nNCc6J0AnRidsJ/4oHCiuKNAo8ikUKYopoCnCKeQqCiqcKxIrHCsyK1QrdiuYK+osDCwuLFQsei1oLfouXC5+LxAvFi88L1ovgC+WMGAwgjCkMKow/DFOMZgyDjIYMuIy+DMaMzwzYjOIM5o0iDTqNQw1EjU4NVY1dDV6NYA1ijWoNc419DYaNqw2yjbQNtY23Db+NwQ3ejecN8I32DfeOAQ4Ijg0OMY45DkGOWg5bjmQOgY6KDqeOsA61jrcOuI66DtKO1A7djucO8I74DwqPEg8kjywPPo9GD16PYA99j4YPo4+sD8mP0g/vj/gQFZAeEDuQRBBhkGoQh5CQEK2QthDTkNwQ+ZECER+RKBEtkS8RNJE2ETuRPRFCkUQRSZFLEVCRUhFXkVkRXpFgEWiRcRF6kYQRjZGXEaCRqhGzkb0RxpHQEdmR4xHskfYR/5IBEgKSJxIuklMSWpJ/EoaSmxKjkt8S95L5EyuTLhNGk0gTSZNUE4aTmxOjk6wAAEAWQALAAEAWQALAAEAEf8IAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAACAQwACwFT/+YABAAL/+YAP//0AF//7wE8/+0ACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAgBU/+YBpv/AAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQGm/+sAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nAAsAWf/MAaYAEwGo//MBrP/xAbT/8gG1//IBuP+9Abn/7gG6/7gBu//XAb3/twAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQBWAA4Af/7XAL//mADC/8cA1P8SAOj/UgFG/88Bpv+AAd//1wABAaYADgA7AFT/vwBZ/9EAa/9sAHr/bgB//0MAhP+sAIf/oQCz/7gAuv9+AL7/ewDB/5sAwv95AMX/sgDH/34AyP99AMn/fADU/68A4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APn/sgD6/4AA/P95AP0AKAEC/30BBP9/ARf/ZgEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAab/rwGo/7kBrP+5AbT/uQG1/7kBt/+8Abj/8QG7//EBvP/tAdz/swHf//EAAQGm/+sACQALABQAPwARAFT/4gBfABMBpv+0Aaj/2QGs/9kBtP/ZAbX/2QAJAAsADwA/AAwAVP/rAF8ADgGm/8sBqP/pAaz/5wG0/+cBtf/nABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAIAFn/5QCz/8sAyP/kAaYADQGo/+0BrP/rAbT/7AG1/+wACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oAAEA8f/1AAMACwAUAD8AEgBfABMAAQDx/9YAAQDx/9YAAQDx/9YACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAMX/6gDo/+4A8f/WAPn/7QEv/+wBVP/sAdz/6AADAEgAFABWABgAWQARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAEBF//xAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oAAEA8f/1ADIAVP9+AFn/nQBr/vEAev70AH/+qwCE/14Ah/9LALP/cgC6/w8Avv8KAMH/QQDC/wcAxf9oAMf/DwDI/w4Ayf8MANT/YwDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+f9oAPr/EwD8/wcA/QAwAQL/DgEE/xEBF/7nARv/rAEn/xUBKf88AS3/DgEv/2oBM/9JATn/DAE7/z8BPP7xAUH/wAFG/u8BSv8xAUz/XwFQ/woBUwAFAVT/MAFV/9UB3P9qAd//0wAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QAAQC/AA0AAgCz/8IAvwAQAAEAv//iAAEAwv/yAAEAvwAOAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAoAuv/mAL3/6wC+/+kAwP/wAMH/5wDF/+MAx//OAMj/1ADJ/9sB3//uAAEA8f/WAAUAvf/sAL8ADwDB/+oAxf/OAMf/5wABAL8ADwAHAMX/6gDo/+4A8f/VAPn/7QEv/+wBVP/sAdz/6AABAPH/wAABAMUAIAAOAEgADAC//5AAwQALAMUADAGm/78BqP/uAaz/7AG0/+0Btf/sAbf/9QG4AA4BugANAb0ADQHf/+0AAQDx/+IAAgDx/8AB3P/hAAwA4f/UAPH/yQD5/9EBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/ZAFU/8kACgDh/8EA8f/NAPn/0gEv/8wBOP/lATv/3wFJ/84BS//qAVP/ngFU/84ACgDh/8IA8f/GAPn/zwEv/8ABOP/hATv/3wFJ/80BS//oAVP/nwFU/8YACQDh/8kA8f/fAPn/4QEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQDh/+YA8f/QAPn/1gEv/84BOP/oAUn/5wFL/+0BU//mAVT/0AALANQAFADh/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADQDUABMA4f/mAOL/9ADoABIA8f/nAPn/5wEv/+cBOP/lATn/6AFJ/+YBS//mAVP/5gFU/+cACgDh/8QA8f/NAPn/1QEv/8wBOP/mATv/3wFJ/9EBS//sAVP/oQFU/88ACgDh/8MA8f/PAPn/1AEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAHAOj/7gDx/+4A+f/vAQT/9AEb//EBL//vAVT/7wAFAPH/9AD5//QBBP/1AS//9QFU//UAAgDo/2gBF//uAAcA6AAUAPH/7QD3/9AA+f/uAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAaj/6wGs/+kBtP/rAbX/6wATAEgADQDC/9YAw//AAMf/1QDo/8gBF//sARsADAFKAAsBTAALAab/vwGo/+4BrP/sAbT/7QG1/+wBt//1AbgADgG6AA0BvQANAd//xAAHAMX/6gDo/+4A8f/WAPn/7QEv/+wBVP/sAdz/6AAHAOgAFADx//AA+f/wAPwAFgEv/+YBOf/cAVT/8AAHAOgAEgDx/+MA9/+4APn/4wEv/7oBOf/ZAVT/4wAJAPH/gAD5//ABBP/bARv/3AEv/0cBOf/uAUoABwFM//QBVP9/AAkA8f9qAPn/xgEE/9kBG//bAS//HgE5/+0BSv/wAUz/8gFU/1YABwDF/+oA6P/uAPH/1gD5/+0BL//sAVT/7AHc/+gAAgDo/+8A+f/uAAkA8f92APn/0wEE/9kBG//bAS//HgE5/+0BSv/wAUz/8gFU/1YACQDx/2QA+f/ZAQT/2QEb/9sBL/8eATn/7QFK//ABTP/yAVT/VgAJAPH/agD5/8YBBP/ZARv/2wEv/x4BOf/tAUr/8AFM//IBVP9WAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkACwAUAD8AEQBU/+IAXwATAab/tAGo/9kBrP/ZAbT/2QG1/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABwDF/+oA6P/uAPH/1gD5/+0BL//sAVT/7AHc/+gAMgBU/34AWf+dAGv+8QB6/vQAf/6rAIT/XgCH/0sAs/9yALr/DwC+/woAwf9BAML/BwDF/2gAx/8PAMj/DgDJ/wwA1P9jAOEABQDl/70A5v9JAOj+/gDq/xMA8f9oAPj/DgD5/2gA+v8TAPz/BwD9ADABAv8OAQT/EQEX/ucBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/2oB3//TAAIA6P9oARf/7gAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nAAIA6P9oARf/7gABAFkACwABAFkACwABAFkACwABAFkACwABAFkACwAJAaj/8gGs//IBtP/yAbX/8gG4/8ABuf/sAbr/xwG7/9gBvf+/AAIBuv/uAbv/9QABAab/0gAEAaj/6wGs/+kBtP/rAbX/6wAKAaYAEQGo//ABrP/uAbT/7wG1//ABuP+7Abn/7AG6/7cBu//VAb3/tAAFAab/8wG4/+4Buv/xAbz/7AG9/+oABAG4/+kBuv/rAbv/8QG9/+UABAG4//IBuv/xAbv/9QG9/+4ACQGm/78BqP/uAaz/7AG0/+0Btf/sAbf/9QG4AA4BugANAb0ADQABAab/7wAFAab/xwGo//IBrP/wAbT/8AG1//AAAgGm/9wBuAAOAAQBqP/tAaz/6wG0/+sBtf/rAAkBpv/AAaj/7QGs/+sBtP/rAbX/6wG4AA8BugAQAbsADQG9ABAABQGmAAwBqP/wAaz/8AG0//ABtf/wAAEB1//VAAEBxP/VAAEB1/9AAAYASAALALr/8gDH//EAyf/vAdwADwHf/+4AAwDF/+0A8f/VAdz/7AABAab/1QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UAOwBU/78AWf/RAGv/bAB6/24Af/9DAIT/rACH/6EAs/+4ALr/fgC+/3sAwf+bAML/eQDF/7IAx/9+AMj/fQDJ/3wA1P+vAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD5/7IA+v+AAPz/eQD9ACgBAv99AQT/fwEX/2YBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGm/68BqP+5Aaz/uQG0/7kBtf+5Abf/vAG4//EBu//xAbz/7QHc/7MB3//xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAEAAv/5gA///QAX//vATz/7QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAUASP/uAFn/6gG6//ABu//tAb3/8AAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UAAQGm/+sAAQGm/+sAAQGm/+sAAQGm/+sAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/9YACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAab/6wAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAsAWf/MAaYAEwGo//MBrP/xAbT/8gG1//IBuP+9Abn/7gG6/7gBu//XAb3/twALAFn/zAGmABMBqP/zAaz/8QG0//IBtf/yAbj/vQG5/+4Buv+4Abv/1wG9/7cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/WAAEA8f/WAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAMASAAUAFYAGABZABEAAwBIABQAVgAYAFkAEQADAEgAFABWABgAWQARADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QA7AFT/vwBZ/9EAa/9sAHr/bgB//0MAhP+sAIf/oQCz/7gAuv9+AL7/ewDB/5sAwv95AMX/sgDH/34AyP99AMn/fADU/68A4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APn/sgD6/4AA/P95AP0AKAEC/30BBP9/ARf/ZgEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAab/rwGo/7kBrP+5AbT/uQG1/7kBt/+8Abj/8QG7//EBvP/tAdz/swHf//EAOwBU/78AWf/RAGv/bAB6/24Af/9DAIT/rACH/6EAs/+4ALr/fgC+/3sAwf+bAML/eQDF/7IAx/9+AMj/fQDJ/3wA1P+vAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD5/7IA+v+AAPz/eQD9ACgBAv99AQT/fwEX/2YBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGm/68BqP+5Aaz/uQG0/7kBtf+5Abf/vAG4//EBu//xAbz/7QHc/7MB3//xAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAkACwAPAD8ADABU/+sAXwAOAab/ywGo/+kBrP/nAbT/5wG1/+cAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAgAWf/lALP/ywDI/+QBpgANAaj/7QGs/+sBtP/sAbX/7AAIAFn/5QCz/8sAyP/kAaYADQGo/+0BrP/rAbT/7AG1/+wACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAFYADgB//tcAv/+YAML/xwDU/xIA6P9SAUb/zwGm/4AB3//XADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AAQDx/9YACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAUASP/uAFn/6gG6//ABu//tAb3/8AAyAFT/fgBZ/50Aa/7xAHr+9AB//qsAhP9eAIf/SwCz/3IAuv8PAL7/CgDB/0EAwv8HAMX/aADH/w8AyP8OAMn/DADU/2MA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPn/aAD6/xMA/P8HAP0AMAEC/w4BBP8RARf+5wEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/agHf/9MACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAab/6wAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAIBDAALAVP/5gAyAFT/fgBZ/50Aa/7xAHr+9AB//qsAhP9eAIf/SwCz/3IAuv8PAL7/CgDB/0EAwv8HAMX/aADH/w8AyP8OAMn/DADU/2MA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPn/aAD6/xMA/P8HAP0AMAEC/w4BBP8RARf+5wEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/agHf/9MABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAFYADgB//tcAv/+YAML/xwDU/xIA6P9SAUb/zwGm/4AB3//XAAQAC//mAD//9ABf/+8BPP/tADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGo/+kBrP/nAbT/5wG1/+kB3//wAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QABAPH/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAEBF//xAAEA8f/1AAIA6P9oARf/7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAJAAsADwA/AAwAVP/rAF8ADgGm/8sBqP/pAaz/5wG0/+cBtf/nAAkACwAPAD8ADABU/+sAXwAOAab/ywGo/+kBrP/nAbT/5wG1/+cACQALAA8APwAMAFT/6wBfAA4Bpv/LAaj/6QGs/+cBtP/nAbX/5wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAEAWQALAAEAWQALAAEAWQALAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAab/tAGo/9kBrP/ZAbT/2QG1/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QABAPH/9QABAPH/9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGo/+kBrP/nAbT/5wG1/+kB3//wAAEBF//xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AAAQEX//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAEBpv/rAAEBpv/rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABQAWf/BALP/xQDF/7QA5f/XAPH/uQD5/+kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAaj/6AGs/+YBtP/nAbX/5wAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAOwBU/78AWf/RAGv/bAB6/24Af/9DAIT/rACH/6EAs/+4ALr/fgC+/3sAwf+bAML/eQDF/7IAx/9+AMj/fQDJ/3wA1P+vAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD5/7IA+v+AAPz/eQD9ACgBAv99AQT/fwEX/2YBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGm/68BqP+5Aaz/uQG0/7kBtf+5Abf/vAG4//EBu//xAbz/7QHc/7MB3//xABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AAAQEX//EAMgBU/34AWf+dAGv+8QB6/vQAf/6rAIT/XgCH/0sAs/9yALr/DwC+/woAwf9BAML/BwDF/2gAx/8PAMj/DgDJ/wwA1P9jAOEABQDl/70A5v9JAOj+/gDq/xMA8f9oAPj/DgD5/2gA+v8TAPz/BwD9ADABAv8OAQT/EQEX/ucBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/2oB3//TAAIA6P9oARf/7gAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGo/+kBrP/nAbT/5wG1/+kB3//wAAEBF//xAAEA8f/WAAoA4f/DAPH/zwD5/9QBL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RADIAVP9+AFn/nQBr/vEAev70AH/+qwCE/14Ah/9LALP/cgC6/w8Avv8KAMH/QQDC/wcAxf9oAMf/DwDI/w4Ayf8MANT/YwDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+f9oAPr/EwD8/wcA/QAwAQL/DgEE/xEBF/7nARv/rAEn/xUBKf88AS3/DgEv/2oBM/9JATn/DAE7/z8BPP7xAUH/wAFG/u8BSv8xAUz/XwFQ/woBUwAFAVT/MAFV/9UB3P9qAd//0wAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAE1wAAEAAAABgAWAGwDngQcBIYEyAAVADgAFAA5ACYAOwAWARQAFAILABYCkgAmApQAFgKWABYC/QAWAwwAFgMPABYDRQAmA0cAJgNJACYDSwAWA2AAFANoABYD6gAWA+wAFgPuABYEEwAWAMwADv7uABD+7gAj/0AALP8wADYAFABD/94ARf/rAEb/6wBH/+sASf/rAFH/6wBT/+sAV//qAFj/6ABb/+gAkf/rAJX/6wCX/+oArf9AAK//QAC2/+sAuP/oAMP/6wDE/+sAxv/qAM0AFADRABQA8v/rAP7/6wEI/0ABE//rARX/6AEZ/+sBHf/rAS4AFAE1/+sBNgAUAUf/6wFI/+sBUv/rAWf+7gFr/u4Bb/7uAXD+7gHx/0AB8v9AAfP/QAH0/0AB9f9AAfb/QAH3/0ACDP/eAg3/3gIO/94CD//eAhD/3gIR/94CEv/eAhP/6wIU/+sCFf/rAhb/6wIX/+sCHf/rAh7/6wIf/+sCIP/rAiH/6wIi/+oCI//qAiT/6gIl/+oCJv/oAif/6AIo/0ACKf/eAir/QAIr/94CLP9AAi3/3gIv/+sCMf/rAjP/6wI1/+sCN//rAjn/6wI7/+sCPf/rAj//6wJB/+sCQ//rAkX/6wJH/+sCSf/rAlf/MAJr/+sCbf/rAm//6wKAABQCggAUAoQAFAKH/+oCif/qAov/6gKN/+oCj//qApH/6gKV/+gC+P9AAwD/QAMQ/+sDFP/qAxb/6wMY/+gDG//qAxz/6wMd/+oDJP8wAyj/QAMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/0ADVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9AA2//3gNw/0ADcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/0ADmf/eA5r/QAOb/94DnP9AA53/3gOe/0ADn//eA6D/QAOh/94Dov9AA6P/3gOk/0ADpf/eA6b/QAOn/94DqP9AA6n/3gOq/0ADq//eA6z/QAOt/94Drv9AA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/98AOP/kADn/7AA7/90Azf/fANH/3wEU/+QBLv/fATb/3wIL/90CgP/fAoL/3wKE/98Ckv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//fA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/3wQT/90AGgA2/84AOP/tADv/0ADN/84A0f/OART/7QEu/84BNv/OAgv/0AKA/84Cgv/OAoT/zgKU/9AClv/QAv3/0AMM/9ADD//QAzP/zgNL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/84EE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAD0ARf/oAEb/6ABH/+gASf/oAFP/6ACR/+gAlf/oALb/6ADD/+gAxP/oAPL/6AD+/+gBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gCE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAAEwEgAEAAAALABiAIwBggHgAfoCPAKyA5gEfgVYBfIIjApSC2ANJg1YDYoOCA9OENgSbhOAFO4XABe2GRwZ0hqMGxIbcBwuHKQdUh18Hs4hDCEuIkQioiMgI0ojfCOOI7gACgAEABAACQAQAWUAEAFmABABaAAQAWkAEAFqABADTQAQA04AEANSABAAPQBF/+wARv/sAEf/7ABJ/+wAU//sAJH/7ACV/+wAtv/sAMP/7ADE/+wA8v/sAP7/7AEZ/+wBHf/sATX/7AFH/+wBSP/sAVL/7AIT/+wCFP/sAhX/7AIW/+wCF//sAi//7AIx/+wCM//sAjX/7AI3/+wCOf/sAjv/7AI9/+wCP//sAkH/7AJD/+wCRf/sAkf/7AJJ/+wDEP/sAzb/7AM6/+wDPf/sA1z/7ANi/+wDZ//sA3X/7AN3/+wDeP/sA4T/7AOV/+wDsf/sA7P/7AO1/+wDt//sA7n/7AO7/+wDvf/sA7//7APT/+wD1f/sA9f/7APb/+wAFwBR/+IBE//iAh3/4gIe/+ICH//iAiD/4gIh/+ICa//iAm3/4gJv/+IDFv/iAxz/4gM4/+IDgv/iA4b/4gPF/+IDx//iA8n/4gPL/+IDzf/iA8//4gPR/+ID2f/iAAYADv+EABD/hAFn/4QBa/+EAW//hAFw/4QAEAAs/+wAN//sAgf/7AII/+wCCf/sAgr/7AJX/+wChv/sAoj/7AKK/+wCjP/sAo7/7AKQ/+wDJP/sA9z/7APe/+wAHQAE//IACf/yAFj/8wBb//MAuP/zARX/8wFl//IBZv/yAWj/8gFp//IBav/yAib/8wIn//MClf/zAxj/8wM7//MDRP/zA0z/8wNN//IDTv/yA1L/8gNh//MDaf/zA4r/8wOM//MDjv/zA+v/8wPt//MD7//zADkAJf/zACn/8wAx//MAM//zAIH/8wCQ//MAlP/zAK7/8wDO//MBA//zARL/8wEW//MBGP/zARr/8wEc//MBNP/zAVH/8wH4//MCAv/zAgP/8wIE//MCBf/zAgb/8wIu//MCMP/zAjL/8wI0//MCQv/zAkT/8wJG//MCSP/zAmr/8wJs//MCbv/zAp//8wL8//MDCf/zAy//8wMy//MDV//zA2P/8wNm//MDgf/zA4P/8wOF//MDxP/zA8b/8wPI//MDyv/zA8z/8wPO//MD0P/zA9L/8wPU//MD1v/zA9j/8wPa//MAOQAl/+YAKf/mADH/5gAz/+YAgf/mAJD/5gCU/+YArv/mAM7/5gED/+YBEv/mARb/5gEY/+YBGv/mARz/5gE0/+YBUf/mAfj/5gIC/+YCA//mAgT/5gIF/+YCBv/mAi7/5gIw/+YCMv/mAjT/5gJC/+YCRP/mAkb/5gJI/+YCav/mAmz/5gJu/+YCn//mAvz/5gMJ/+YDL//mAzL/5gNX/+YDY//mA2b/5gOB/+YDg//mA4X/5gPE/+YDxv/mA8j/5gPK/+YDzP/mA87/5gPQ/+YD0v/mA9T/5gPW/+YD2P/mA9r/5gA2ACP/5AA6/9IAO//TAK3/5ACv/+QA1f/SAQj/5AHx/+QB8v/kAfP/5AH0/+QB9f/kAfb/5AH3/+QCC//TAij/5AIq/+QCLP/kApT/0wKW/9MC+P/kAv3/0wMA/+QDDP/TAw3/0gMP/9MDKP/kAzT/0gNL/9MDVf/kA2j/0wNr/9IDbv/kA3D/5AN5/9IDk//SA5j/5AOa/+QDnP/kA57/5AOg/+QDov/kA6T/5AOm/+QDqP/kA6r/5AOs/+QDrv/kA+r/0wPs/9MD7v/TA/j/0gQA/9IEE//TACYADv9GABD/RgAj/80Arf/NAK//zQEI/80BZ/9GAWv/RgFv/0YBcP9GAfH/zQHy/80B8//NAfT/zQH1/80B9v/NAff/zQIo/80CKv/NAiz/zQL4/80DAP/NAyj/zQNV/80Dbv/NA3D/zQOY/80Dmv/NA5z/zQOe/80DoP/NA6L/zQOk/80Dpv/NA6j/zQOq/80DrP/NA67/zQCmAEX/3ABG/9wAR//cAEn/3ABP/8EAUP/BAFH/1gBS/8EAU//cAFf/3QBY/+EAW//hAJH/3ACV/9wAl//dALb/3AC4/+EAvP/BAMP/3ADE/9wAxv/dAOf/wQDr/8EA7P/BAO7/wQDv/8EA8P/BAPL/3ADz/8EA9f/BAPb/wQD5/8EA+//BAP7/3AEA/8EBE//WARX/4QEZ/9wBHf/cATH/wQE1/9wBQP/BAUX/wQFH/9wBSP/cAVL/3AIT/9wCFP/cAhX/3AIW/9wCF//cAhz/wQId/9YCHv/WAh//1gIg/9YCIf/WAiL/3QIj/90CJP/dAiX/3QIm/+ECJ//hAi//3AIx/9wCM//cAjX/3AI3/9wCOf/cAjv/3AI9/9wCP//cAkH/3AJD/9wCRf/cAkf/3AJJ/9wCZP/BAmb/wQJo/8ECaf/BAmv/1gJt/9YCb//WAof/3QKJ/90Ci//dAo3/3QKP/90Ckf/dApX/4QMQ/9wDEv/BAxT/3QMW/9YDGP/hAxv/3QMc/9YDHf/dAzb/3AM3/8EDOP/WAzn/wQM6/9wDO//hAz3/3AM+/8EDQ//BA0T/4QNM/+EDVP/BA1z/3ANd/8EDYf/hA2L/3ANn/9wDaf/hA3X/3AN3/9wDeP/cA37/wQOA/8EDgv/WA4T/3AOG/9YDiv/hA4z/4QOO/+EDkv/BA5X/3AOx/9wDs//cA7X/3AO3/9wDuf/cA7v/3AO9/9wDv//cA8X/1gPH/9YDyf/WA8v/1gPN/9YDz//WA9H/1gPT/9wD1f/cA9f/3APZ/9YD2//cA93/3QPf/90D4f/dA+P/3QPl/90D5//dA+n/3QPr/+ED7f/hA+//4QPz/8ED9f/BA///wQQM/8EEDv/BBBD/wQBxAAT/2gAJ/9oARf/wAEb/8ABH//AASf/wAFP/8ABX/+8AWP/cAFv/3ACR//AAlf/wAJf/7wC2//AAuP/cAMP/8ADE//AAxv/vAPL/8AD+//ABFf/cARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAWX/2gFm/9oBaP/aAWn/2gFq/9oCE//wAhT/8AIV//ACFv/wAhf/8AIi/+8CI//vAiT/7wIl/+8CJv/cAif/3AIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAof/7wKJ/+8Ci//vAo3/7wKP/+8Ckf/vApX/3AMQ//ADFP/vAxj/3AMb/+8DHf/vAzb/8AM6//ADO//cAz3/8ANE/9wDTP/cA03/2gNO/9oDUv/aA1z/8ANh/9wDYv/wA2f/8ANp/9wDdf/wA3f/8AN4//ADhP/wA4r/3AOM/9wDjv/cA5X/8AOx//ADs//wA7X/8AO3//ADuf/wA7v/8AO9//ADv//wA9P/8APV//AD1//wA9v/8APd/+8D3//vA+H/7wPj/+8D5f/vA+f/7wPp/+8D6//cA+3/3APv/9wAQwAOAAwAEAAMAEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAWcADAFrAAwBbwAMAXAADAIT/+cCFP/nAhX/5wIW/+cCF//nAi//5wIx/+cCM//nAjX/5wI3/+cCOf/nAjv/5wI9/+cCP//nAkH/5wJD/+cCRf/nAkf/5wJJ/+cDEP/nAzb/5wM6/+cDPf/nA1z/5wNi/+cDZ//nA3X/5wN3/+cDeP/nA4T/5wOV/+cDsf/nA7P/5wO1/+cDt//nA7n/5wO7/+cDvf/nA7//5wPT/+cD1f/nA9f/5wPb/+cAcQAEAAwACQAMAEX/6ABG/+gAR//oAEn/6ABR/+oAU//oAFgACwBbAAsAkf/oAJX/6AC2/+gAuAALAMP/6ADE/+gA8v/oAP7/6AET/+oBFQALARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUADAFmAAwBaAAMAWkADAFqAAwCE//oAhT/6AIV/+gCFv/oAhf/6AId/+oCHv/qAh//6gIg/+oCIf/qAiYACwInAAsCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AJr/+oCbf/qAm//6gKVAAsDEP/oAxb/6gMYAAsDHP/qAzb/6AM4/+oDOv/oAzsACwM9/+gDRAALA0wACwNNAAwDTgAMA1IADANc/+gDYQALA2L/6ANn/+gDaQALA3X/6AN3/+gDeP/oA4L/6gOE/+gDhv/qA4oACwOMAAsDjgALA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA8X/6gPH/+oDyf/qA8v/6gPN/+oDz//qA9H/6gPT/+gD1f/oA9f/6APZ/+oD2//oA+sACwPtAAsD7wALAAwAWv/tAFz/7QDp/+0CmP/tApr/7QKc/+0DPP/tA2z/7QN6/+0DlP/tA/n/7QQB/+0ADABa//IAXP/yAOn/8gKY//ICmv/yApz/8gM8//IDbP/yA3r/8gOU//ID+f/yBAH/8gAfAFj/9ABa//IAW//0AFz/8wC4//QA6f/yARX/9AIm//QCJ//0ApX/9AKY//MCmv/zApz/8wMY//QDO//0Azz/8gNE//QDTP/0A2H/9ANp//QDbP/yA3r/8gOK//QDjP/0A47/9AOU//ID6//0A+3/9APv//QD+f/yBAH/8gBRAAT/ygAJ/8oANv/SADj/1AA6//QAO//TAFj/5gBa/+8AW//mALj/5gDN/9IA0f/SANX/9ADZ/+0A3P/hAOn/7wEU/9QBFf/mAS7/0gE2/9IBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCJv/mAif/5gKA/9ICgv/SAoT/0gKU/9MClf/mApb/0wL9/9MDDP/TAw3/9AMP/9MDGP/mAyf/7QMz/9IDNP/0Azv/5gM8/+8DRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wOJ/+0Div/mA4v/7QOM/+YDjf/tA47/5gOP/+EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gP2/9ID+P/0A/n/7wP6/+ED/P/hBAD/9AQB/+8EE//TAGIABP/AAAn/wAA2/50AOP/HADr/8AA7/6sAT//SAFD/0gBS/9IAvP/SAM3/nQDP//UA0f+dANX/8ADY//UA2f/qANz/5QDn/9IA6//SAOz/0gDu/9IA7//SAPD/0gDz/9IA9f/SAPb/0gD7/9IBAP/SART/xwEu/50BMf/SATb/nQFA/9IBRf/SAU3/9QFl/8ABZv/AAWj/wAFp/8ABav/AAgv/qwIc/9ICZP/SAmb/0gJo/9ICaf/SAoD/nQKC/50ChP+dApT/qwKW/6sC/f+rAwz/qwMN//ADD/+rAxL/0gMn/+oDM/+dAzT/8AM3/9IDOf/SAz7/0gND/9IDS/+rA03/wANO/8ADUv/AA1T/0gNd/9IDYP/HA2j/qwNr//ADef/wA37/0gOA/9IDif/qA4v/6gON/+oDj//lA5L/0gOT//ADlv/1A+r/qwPs/6sD7v+rA/P/0gP1/9ID9v+dA/j/8AP6/+UD/P/lA///0gQA//AEDP/SBA7/0gQQ/9IEEf/1BBP/qwBlAAT/sQAJ/7EANv+eADj/xQA6//IAO/+oAE//zwBQ/88AUv/PAFr/7wC8/88Azf+eANH/ngDV//IA2f/sANz/4QDn/88A6f/vAOv/zwDs/88A7v/PAO//zwDw/88A8//PAPX/zwD2/88A+//PAQD/zwEU/8UBLv+eATH/zwE2/54BQP/PAUX/zwFl/7EBZv+xAWj/sQFp/7EBav+xAgv/qAIc/88CZP/PAmb/zwJo/88Caf/PAoD/ngKC/54ChP+eApT/qAKW/6gC/f+oAwz/qAMN//IDD/+oAxL/zwMn/+wDM/+eAzT/8gM3/88DOf/PAzz/7wM+/88DQ//PA0v/qANN/7EDTv+xA1L/sQNU/88DXf/PA2D/xQNo/6gDa//yA2z/7wN5//IDev/vA37/zwOA/88Dif/sA4v/7AON/+wDj//hA5L/zwOT//IDlP/vA+r/qAPs/6gD7v+oA/P/zwP1/88D9v+eA/j/8gP5/+8D+v/hA/z/4QP//88EAP/yBAH/7wQM/88EDv/PBBD/zwQT/6gARAA2/74AT//hAFD/4QBS/+EAWP/vAFv/7wC4/+8AvP/hAM3/vgDR/74A5//hAOv/4QDs/+EA7v/hAO//4QDw/+EA8//hAPX/4QD2/+EA+//hAQD/4QEV/+8BLv++ATH/4QE2/74BQP/hAUX/4QIc/+ECJv/vAif/7wJk/+ECZv/hAmj/4QJp/+ECgP++AoL/vgKE/74Clf/vAxL/4QMY/+8DM/++Azf/4QM5/+EDO//vAz7/4QND/+EDRP/vA0z/7wNU/+EDXf/hA2H/7wNp/+8Dfv/hA4D/4QOK/+8DjP/vA47/7wOS/+ED6//vA+3/7wPv/+8D8//hA/X/4QP2/74D///hBAz/4QQO/+EEEP/hAFsANv/mADj/5wA6//IAO//nAE//1gBQ/9YAUv/WAFr/8QC8/9YAzf/mANH/5gDV//IA2f/uANz/6ADn/9YA6f/xAOv/1gDs/9YA7v/WAO//1gDw/9YA8//WAPX/1gD2/9YA+//WAQD/1gEU/+cBLv/mATH/1gE2/+YBQP/WAUX/1gIL/+cCHP/WAmT/1gJm/9YCaP/WAmn/1gKA/+YCgv/mAoT/5gKU/+cClv/nAv3/5wMM/+cDDf/yAw//5wMS/9YDJ//uAzP/5gM0//IDN//WAzn/1gM8//EDPv/WA0P/1gNL/+cDVP/WA13/1gNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QN+/9YDgP/WA4n/7gOL/+4Djf/uA4//6AOS/9YDk//yA5T/8QPq/+cD7P/nA+7/5wPz/9YD9f/WA/b/5gP4//ID+f/xA/r/6AP8/+gD///WBAD/8gQB//EEDP/WBA7/1gQQ/9YEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALQAE/78ACf+/ADb/nwA4/8kAO/+tAM3/nwDR/58A2f/sANz/5gEU/8kBLv+fATb/nwFl/78BZv+/AWj/vwFp/78Bav+/Agv/rQKA/58Cgv+fAoT/nwKU/60Clv+tAv3/rQMM/60DD/+tAyf/7AMz/58DS/+tA03/vwNO/78DUv+/A2D/yQNo/60Dif/sA4v/7AON/+wDj//mA+r/rQPs/60D7v+tA/b/nwP6/+YD/P/mBBP/rQAuADb/4wA6/+UAO//kAM3/4wDP/+UA0f/jANX/5QDY/+UA2f/pAO3/6gD//+oBLv/jATb/4wFN/+UCC//kAoD/4wKC/+MChP/jApT/5AKW/+QC/f/kAwz/5AMN/+UDD//kAyf/6QMz/+MDNP/lA0v/5ANo/+QDa//lA3n/5QOJ/+kDi//pA43/6QOT/+UDlv/lA5f/6gPq/+QD7P/kA+7/5AP2/+MD+P/lBAD/5QQR/+UEEv/qBBP/5AAhADb/4gA6/+QAzf/iAM//5ADR/+IA1f/kANj/5ADZ/+kA7f/rAP//6wEu/+IBNv/iAU3/5AKA/+ICgv/iAoT/4gMN/+QDJ//pAzP/4gM0/+QDa//kA3n/5AOJ/+kDi//pA43/6QOT/+QDlv/kA5f/6wP2/+ID+P/kBAD/5AQR/+QEEv/rABcANv/rADv/8wDN/+sA0f/rAS7/6wE2/+sCC//zAoD/6wKC/+sChP/rApT/8wKW//MC/f/zAwz/8wMP//MDM//rA0v/8wNo//MD6v/zA+z/8wPu//MD9v/rBBP/8wAvAE//7wBQ/+8AUv/vAFr/8AC8/+8A5//vAOn/8ADr/+8A7P/vAO7/7wDv/+8A8P/vAPP/7wD1/+8A9v/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1ACsAT//uAFD/7gBS/+4AvP/uAOf/7gDr/+4A7P/uAO7/7gDv/+4A8P/uAPP/7gD0/+0A9f/uAPb/7gD7/+4BAP/uATH/7gFA/+4BRf/uAhz/7gJk/+4CZv/uAmj/7gJp/+4DEv/uAzf/7gM5/+4DPv/uA0P/7gNU/+4DXf/uA37/7gOA/+4DkP/tA5L/7gPz/+4D9f/uA/v/7QP9/+0D///uBAz/7gQO/+4EEP/uAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/xwBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/xwEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/xwIe/8cCH//HAiD/xwIh/8cCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/8cCbf/HAm//xwMQ//ADFv/HAxz/xwM2//ADOP/HAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/HA4T/8AOG/8cDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/HA8f/xwPJ/8cDy//HA83/xwPP/8cD0f/HA9P/8APV//AD1//wA9n/xwPb//AAjwAEAA0ACQANAEP/8ABF/8AARv/AAEf/wABJ/8AAUf/iAFP/wABYAAsAWwALAJH/wACV/8AAtv/AALgACwDE/8AA7f/XAPL/wAD+/8AA///XARP/4gEVAAsBGf/AAR3/wAE1/8ABR//AAUj/wAFS/8ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE//AAhT/wAIV/8ACFv/AAhf/wAId/+ICHv/iAh//4gIg/+ICIf/iAiYACwInAAsCKf/wAiv/8AIt//ACL//AAjH/wAIz/8ACNf/AAjf/wAI5/8ACO//AAj3/wAI//8ACQf/AAkP/wAJF/8ACR//AAkn/wAJr/+ICbf/iAm//4gKVAAsDEP/AAxb/4gMYAAsDHP/iAzX/8AM2/8ADOP/iAzr/wAM7AAsDPf/AA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/wANhAAsDYv/AA2f/wANpAAsDb//wA3H/8AN1/8ADd//AA3j/wAOC/+IDhP/AA4b/4gOKAAsDjAALA44ACwOV/8ADl//XA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/wAOz/8ADtf/AA7f/wAO5/8ADu//AA73/wAO//8ADxf/iA8f/4gPJ/+IDy//iA83/4gPP/+ID0f/iA9P/wAPV/8AD1//AA9n/4gPb/8AD6wALA+0ACwPvAAsEEv/XAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEX/7gBG/+4AR//uAEn/7gBT/+4Akf/uAJX/7gC2/+4Aw//uAMT/7gDtAA4A8v/uAPT/4wD+/+4A/wAOARn/7gEd/+4BNf/uAUf/7gFI/+4BUv/uAhP/7gIU/+4CFf/uAhb/7gIX/+4CL//uAjH/7gIz/+4CNf/uAjf/7gI5/+4CO//uAj3/7gI//+4CQf/uAkP/7gJF/+4CR//uAkn/7gMQ/+4DNv/uAzr/7gM9/+4DXP/uA2L/7gNn/+4Ddf/uA3f/7gN4/+4DhP/uA5D/4wOV/+4DlwAOA7H/7gOz/+4Dtf/uA7f/7gO5/+4Du//uA73/7gO//+4D0//uA9X/7gPX/+4D2//uA/v/4wP9/+MEEgAOABcAWP/AAFv/wAC4/8AA9P/uARX/wAIm/8ACJ//AApX/wAMY/8ADO//AA0T/wANM/8ADYf/AA2n/wAOK/8ADjP/AA47/wAOQ/+4D6//AA+3/wAPv/8AD+//uA/3/7gAfAFj/9ABa//AAW//0ALj/9ADp//AA7f/zAP//8wEV//QCJv/0Aif/9AKV//QDGP/0Azv/9AM8//ADRP/0A0z/9ANh//QDaf/0A2z/8AN6//ADiv/0A4z/9AOO//QDlP/wA5f/8wPr//QD7f/0A+//9AP5//AEAf/wBBL/8wAKAAT/1gAJ/9YBZf/WAWb/1gFo/9YBaf/WAWr/1gNN/9YDTv/WA1L/1gAMAFr/4ADp/+AA9P/CAzz/4ANs/+ADev/gA5D/wgOU/+AD+f/gA/v/wgP9/8IEAf/gAAQA9P/SA5D/0gP7/9ID/f/SAAoABP/XAAn/1wFl/9cBZv/XAWj/1wFp/9cBav/XA03/1wNO/9cDUv/XAF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//pARn/6wEd/+sBNf/rAUf/6wFI/+sBUv/rAWUACwFmAAsBaAALAWkACwFqAAsCE//rAhT/6wIV/+sCFv/rAhf/6wId/+kCHv/pAh//6QIg/+kCIf/pAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCa//pAm3/6QJv/+kDEP/rAxb/6QMc/+kDNv/rAzj/6QM6/+sDPf/rA00ACwNOAAsDUgALA1z/6wNi/+sDZ//rA3X/6wN3/+sDeP/rA4L/6QOE/+sDhv/pA5X/6wOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6QPH/+kDyf/pA8v/6QPN/+kDz//pA9H/6QPT/+sD1f/rA9f/6wPZ/+kD2//rAAILPAAEAAAOBBVYACEAHQAAAAwAEf/f//T/zv/1/7P/7//Q/2r/iP+n//X/yf/ZABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/oAAAAAP/JAAD/5QAAAAAAAAAA//MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/+UAAAAAAAAAAAAAAAD/5AAA/+MAAP/kAAAAEQAAABIAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4QAAAAAAAAAA/+oAAAAA/9UAAP/lAAAAAAAAAAAAAP/r/+r/6f+GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7f/mAAAAAAAAAAAAAAAAABT/7wAAAAAAAAAAAAAAAAAAAAD/7QAAAAAAAAAAAAAAAAAA/8T/y/98/7H/rv/kABAAAP+nABAAAAAQ/78AAAAP/34AAP+TAAAAAP7+/6f/s/+0/vD/8P+t/ygAAP+G/5L/DP9m/2H/vQAHAAD/VQAHAAAAB/9+AAAABf8PAAD/MwAAAAD+Nv9V/2r/a/4e/9H/XwAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAP+j/+X/2P/hAAAAAAAAAAAAAAAA/+kAAAAAAAAAAAAAAAAAAAAA/+YAAAAA/1wAAAAAAAAAAAAAAAAAAAAA/4X/5/8y/+gAAP7p/v7/M//yAAD/owAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9vAAD/8wAPAAAAAAAAAAAAAAAAAAAAAAAAAAD/pwAA/07/zf/c/mz/8wAAAAAAAAAA//X/SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/S//X/8wAAAAAAAAAAAAAAAP/kAAAAAAAAAAD/tQAAAAD/Kf/UAAAAAP9jAAD/0gAAAAAAAAAR/9H/6//h/+cADgAAAAAAAAAAAAD/6wAAAAAAEQAAAAAAAAAAAAD/5gAAAAD/ZAAAAAAAAAAA/+IAAAAA/7//7P/jABL/oP/YABIAAAAR/9kAAAARAAAAAP9qAA0AAP8Z/7//6f/G/2j/8P/B/6AAAAAAAAAAAP/hAAAAAAAAAAAAAAAAAAAADv/tAAAAAAAAAAD/1QAAAAD/cf/hAAAAAP/EAAD/3wAAAAAAAAAAAAD/6//l/+YAAAAAAAAAAAAAAAD/7QAAAAAAAAAAAA0AAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAD/yv/p/70AAP/pAAAAAP+uABIAAAASAAAAAAAA/7sAAP+lAAAAAP53/70AAP/S/zkAAP+vAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAA/+8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAD/9QAAAAAAAAAAAAD/4wAAAAAAAAAA//IAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAAAAAAAAAAAAAAA//MAAAAAAAAAAAAA//IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAD/8QAAAAAAAAAAAAD/7AAAAAAAAAAA//AAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAAAAAA8AAAAAAAAAAP/XAAAAAAAAAAD/Wf/zAAAAAAAAAAD/8QAAAAAAAAAAAAD/7AASAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA/1P/7QAAAAAAAAAA/+wAAAAAAAAAAAAA/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAD/pQAAAAAAAAAA/+wAAP/bAAAAAAAAAAAAAAAA/4gAAAAAAAD/xQAA/6QAAAAA/84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/IAAAAAP+t/8D/nwAA/+cAAAAA/+sAAAAAAAAAAAAA/8kAAAAAAAAAAAAAAAAAAAAA/+MAAP+1AAAAAAAAAAAAAP95AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/rAAAAAAAAAAAAAAACAIsABAAEAAAACQAJAAEAEQARAAIAIwAoAAMAKgAzAAkANgA8ABMAQwBEABoARwBIABwASgBKAB4ATwBSAB8AVABUACMAWABYACQAWgBbACUAiACIACcAmQCZACgArACwACkAsgC0AC4AtgC2ADEAuAC4ADIAuwC8ADMAvgC+ADUAwADAADYAwgDHADcAzQDNAD0AzwDZAD4A2wDbAEkA3QDfAEoA4QDjAE0A5QDpAFAA7ADsAFUA8QDzAFYA9gD3AFkA+QD7AFsA/wEAAF4BBQEFAGABCAEIAGEBEwEVAGIBJwEpAGUBLAEsAGgBLgEuAGkBRQFFAGoBZQFmAGsBaAFqAG0BpgGmAHABqQGpAHEBqwGrAHIBsAGxAHMBtAG2AHUBuAG+AHgBxAHEAH8B1wHXAIAB2wHcAIEB3wHfAIMB6AHoAIQB7AHtAIUB7wHvAIcB8QISAIgCFAIXAKoCHAIhAK4CJgIuALQCMAIwAL0CMgIyAL4CNAI0AL8CNgI2AMACOAJBAMECSgJMAMsCTgJOAM4CUAJQAM8CUgJSANACVAJUANECVwJXANICWQJZANMCWwJbANQCXQJdANUCXwJfANYCYQJhANcCYwJvANgCcQJxAOUCcwJzAOYCdQJ1AOcCgAKAAOgCggKCAOkChAKEAOoChgKGAOsCiAKIAOwCigKKAO0CjAKMAO4CjgKOAO8CkAKQAPACkgKSAPEClAKXAPICmQKZAPYCmwKbAPcC+AL9APgDAAMPAP4DEgMSAQ4DFgMWAQ8DGAMYARADHAMcAREDHwMgARIDIgMrARQDLQMvAR4DMQM2ASEDOAM5AScDOwM+ASkDRANFAS0DRwNHAS8DSQNJATADSwNOATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAGAAoAKAAzADQAPQBIAAEALABIAE0AVgBZAF0AmQCwALIAswC0ALsAvgDAAMUAxwDIAMkAzQDPANAA0QDTANQA1gDeAN8A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APcA+wD+AP8BAAEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFhA9kD2QFvA9wD3AFwA94D3gFxA+oD7wFyA/ID8gF4A/QD9AF5A/YD9gF6A/gD+QF7A/4EAQF9BAQEBAGBBAYEBwGCBAkECQGEBA0EDQGFBA8EDwGGBBMEEwGHAAIBOAAEAAQAHQAJAAkAHQAOAA4AHgAQABAAHgAkACQAAQAlACUABAAmACYAAwAnACcABQAqACsAAgAsACwADAAtAC0ACQAuAC4ACgAvADAAAgAxADEAAwAyADIACwA2ADYABgA3ADcADAA4ADgADQA5ADkAEAA6ADoADgA7ADsADwA8ADwAEQBDAEMAEwBEAEQAFQBFAEUAFABHAEcAFgBKAEoAFwBPAFAAFwBRAFEAGABSAFIAFQBUAFQAGgBYAFgAGQBaAFoAGwBbAFsAGQBcAFwAHACIAIgAFQCsAKwABwCuAK4AAwC4ALgAGQC8ALwAFwDCAMIAFQDPANAAHwDSANIAAgDVANUADgDXANgAAgDZANkAEgDbANsAAgDdAN0AAgDfAN8AHwDhAOEAHwDnAOcACADpAOkAGwDyAPIAFQD3APcAIAD5APkAIAD6APoAFQD/AQAAIAEFAQUAIAETARMAGAEUARQADQEVARUAGQEnAScAFQEoASgABwEpASkACAEsASwACQEuAS4ACQFFAUUACAFlAWYAHQFnAWcAHgFoAWoAHQFrAWsAHgFvAXAAHgHsAe0AAwHvAe8ABgH4AfgABAH5AfwABQH9AgEAAgICAgYAAwIHAgoADAILAgsADwIMAhIAEwITAhMAFAIUAhcAFgIcAhwAFwIdAiEAGAImAicAGQIpAikAEwIrAisAEwItAi0AEwIuAi4ABAIvAi8AFAIwAjAABAIxAjEAFAIyAjIABAIzAjMAFAI0AjQABAI1AjUAFAI2AjYAAwI4AjgABQI5AjkAFgI6AjoABQI7AjsAFgI8AjwABQI9Aj0AFgI+Aj4ABQI/Aj8AFgJAAkAABQJBAkEAFgJKAkoAAgJLAksAFwJMAkwAAgJOAk4AAgJQAlAAAgJSAlIAAgJUAlQAAgJXAlcADAJZAlkACQJbAlsACgJdAl0ACgJfAl8ACgJhAmEACgJjAmMAAgJkAmQAFwJlAmUAAgJmAmYAFwJnAmcAAgJoAmkAFwJqAmoAAwJrAmsAGAJsAmwAAwJtAm0AGAJuAm4AAwJvAm8AGAJxAnEAGgJzAnMAGgJ1AnUAGgKAAoAABgKCAoIABgKEAoQABgKGAoYADAKIAogADAKKAooADAKMAowADAKOAo4ADAKQApAADAKSApIAEAKUApQADwKVApUAGQKWApYADwKXApcAEQKYApgAHAKZApkAEQKaApoAHAKbApsAEQKcApwAHAL5AvkABQL6AvsAAgL8AvwAAwL9Av0ADwMBAwEAAQMCAwIABQMDAwMAEQMEAwUAAgMGAwYACQMHAwgAAgMJAwkAAwMKAwoACwMLAwsABgMMAwwADwMNAw0ADgMOAw4AAgMPAw8ADwMSAxIAFwMWAxYAGAMYAxgAGQMcAxwAGAMfAx8ABQMgAyAABwMiAyMAAgMkAyQADAMlAyYACQMnAycAEgMpAykAAQMqAyoABwMrAysABQMtAy4AAgMvAy8AAwMxAzEACwMyAzIABAMzAzMABgM0AzQADgM1AzUAEwM2AzYAFgM4AzgAGAM5AzkAFQM6AzoAFAM7AzsAGQM8AzwAGwM9Az0AFgM+Az4ACANEA0QAGQNFA0UAEANHA0cAEANJA0kAEANLA0sADwNMA0wAGQNNA04AHQNSA1IAHQNTA1MAAgNUA1QAFwNWA1YAEwNXA1cAAwNaA1oABQNcA1wAFgNgA2AADQNhA2EAGQNmA2YABANnA2cAFANoA2gADwNpA2kAGQNqA2oAAgNrA2sADgNsA2wAGwNtA20AAgNvA28AEwNxA3EAEwN0A3QABQN1A3UAFgN3A3gAFgN5A3kADgN6A3oAGwOBA4EAAwOCA4IAGAOGA4YAGAOIA4gAFQOJA4kAEgOKA4oAGQOLA4sAEgOMA4wAGQONA40AEgOOA44AGQOTA5MADgOUA5QAGwOZA5kAEwObA5sAEwOdA50AEwOfA58AEwOhA6EAEwOjA6MAEwOlA6UAEwOnA6cAEwOpA6kAEwOrA6sAEwOtA60AEwOvA68AEwOwA7AABQOxA7EAFgOyA7IABQOzA7MAFgO0A7QABQO1A7UAFgO2A7YABQO3A7cAFgO4A7gABQO5A7kAFgO6A7oABQO7A7sAFgO8A7wABQO9A70AFgO+A74ABQO/A78AFgPAA8AAAgPCA8IAAgPEA8QAAwPFA8UAGAPGA8YAAwPHA8cAGAPIA8gAAwPJA8kAGAPKA8oAAwPLA8sAGAPMA8wAAwPNA80AGAPOA84AAwPPA88AGAPQA9AAAwPRA9EAGAPZA9kAGAPcA9wADAPeA94ADAPqA+oADwPrA+sAGQPsA+wADwPtA+0AGQPuA+4ADwPvA+8AGQPyA/IACQP0A/QAAgP2A/YABgP4A/gADgP5A/kAGwP+A/4ABwP/A/8ACAQABAAADgQBBAEAGwQEBAQAFwQGBAYAHwQHBAcABwQJBAkACQQNBA0AAgQPBA8AAgQTBBMADwABAAQEFgALAAAAAAAAAAAACwAAAAAAAAAAABUAGQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAGAAAAAAAAAAYAAAAAABwAAAAAAAAAAAAGAAAABgAAABoADAAIAAcADwATAAoAFAAAAAAAAAAAAAAAAAAbAAAAFgAWABYAAAAWAAAAAAAAAAAAAAAJAAkABAAJABYAAAAYAAAADQAFAAAAFwAFAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAWAAAAAAAGABYAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIABgASAAAAAAAAAAAAAAAAABYAAAAFAAAAAAAAAAkAAAAAAAAAAAAAAAAAFgAWAAAADQAAAAAAAAAAAAAAAAAMAAYAAgAAAAwAAAAAAAAAEwAAAAAAAgARAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAABcAAAAJAAkAEAAJAAkACQAAABYACQADAAkACQAAAAAACQAAAAkAAAAAABYAEAAJAAAAAAAGAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAGAAQABwAFAAYAAAAGABYABgAAAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAkAAAAAAAYAFgAMAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAJAAAAFgAWAAAAAAAAAAAAAgAAAAAAAAAGABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAZAAAACwALABUACwALAAsAFQAAAAAAAAAVABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAABIAEgASABIAEgASABIABgAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGAAYACAAIAAgACAAKABsAGwAbABsAGwAbABsAFgAWABYAFgAWAAAAAAAAAAAACQAEAAQABAAEAAQADQANAA0ADQAFAAUAEgAbABIAGwASABsABgAWAAYAFgAGABYABgAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAYAFgAGABYABgAWAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAkAAAAJAAkABgAEAAYABAAGAAQAAAAAAAAAAAAAAAAAGgAYABoAGAAaABgAGgAYABoAGAAMAAAADAAAAAwAAAAIAA0ACAANAAgADQAIAA0ACAANAAgADQAPAAAACgAFAAoAFAABABQAAQAUAAEAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAYACgAAAAAAEgAAAAAAFAAAAAAAAAAAAAAABgAAAAAACgATAAAACgAWAAAACQAAAA0AAAAEAAAABQAAAAAADQAEAA0AAAAAAAAAAAAAAAAAHAAAAAAAEQASAAAAAAAAAAAAAAAAAAYAAAAAAAYADAATABsAFgAJAAQACQAWAAUAFwAWAAkAGAAAAAAAAAAJAAUADwAAAA8AAAAPAAAACgAFAAsACwAAAAAAAAALAAAACQASABsABgAAAAAAAAAAABYACQAAAAAABwAFABYABgAAAAAABgAWAAoABQAAABMAFwAAABIAGwASABsAAAAAAAAAFgAAABYAFgATABcAAAAAAAAACQAAAAkABgAEAAYAFgAGAAQAAAAAABEABQARAAUAEQAFAA4AAwAAAAkAEwAXABYAAgAQABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAAAAAAAAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAWAAYAFgAGABYABgAEAAYAFgAIAA0ACAANAAAADQAAAA0AAAANAAAADQAAAA0ACgAFAAoABQAKAAUAAAAAAAAACQAAAAkADAAAABMAFwAOAAMADgADAAAACQATABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAACQAAAAkAAgAQAAoAAAAAAAAAAAAAABkAAAABAAAACgAsAI4AAURGTFQACAAEAAAAAP//AAgAAAABAAIAAwAEAAUABgAHAAhsaWdhADJsbnVtADhzbWNwAD5zczAxAERzczAyAEpzczAzAFBzczA0AFZzczA1AFwAAAABAAEAAAABAAIAAAABAAAAAAABAAMAAAABAAQAAAABAAUAAAABAAYAAAABAAcACAASABoAIgAqADIAOgBCAEoAAQAAAAEAQAAEAAAAAQH2AAEAAAABAgAAAQAAAAECEgABAAAAAQIQAAEAAAABAg4AAQAAAAECDAABAAAAAQIOAAICEADcAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AegBtQG2AbcBuAG5AboBuwG8Ab0BvgGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4C9wKiAqECogKjAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4C8wK/Ar8CwALAAsECwQLCAsICwwLDAsUCxQLGAsYCxwLHAsgCyALJAskCygLKAssCywLMAswCzQLNAs8CzwLQAtAC0QLRAtIC0gLTAtMC1ALUAtUC1gLWAtcC1wLYAtgC2QLZAtoC2gLbAtsC3ALcAt0C3QLeAt4C3wLfAuAC4ALhAuEC4gLiAuMC4wLkAuQC5QLlAuYC5gLnAucC6ALo/////wLqAuoC6wLrAuwC7ALtAu0C7gLuAu8C7wLwAvAC8QLxAvIC8gLzAvQC9AL1AvUC9gL2AqEAAQCkAAEACAABAAQBkgACAEsAAgCYAAoBmAHMAcQB1gHXAdgB2QHbAd0B5wABAIgBkQABAIgBKAABAIgBrgACAIgAAgHjAeQAAgB+AAIB5QHmAAIADQAjADwAAABDAFwAGgCDAIMANACFAIUANQHsAe0ANgHvAjEAOAI0AkUAewJIAlQAjQJXAmgAmgJqAnsArAJ+An8AvgKCApwAwAPwA/AA2wABAAEASAACAAEAEgAbAAAAAQABAEkAAQABALYAAQABADQAAQACAC0ATQ==\",\"Roboto-Regular.ttf\":\"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASx0AAAASEdQT1OC3T4oAAEsvAAAkPhHU1VCeolvLwABvbQAAANsT1MvMrivKcMAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5ZusE9WMAACb8AADUeGhlYWT1kQ7EAAAA7AAAADZoaGVhC3AJkwAAASQAAAAkaG10eJaDaacAAAHIAAAQcGxvY2EvrvnGAAD7dAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZbs83bQAAQOwAAAEeXBvc3Tfb5xiAAEILAAAJEYAAQAAAAEAAHdFsyVfDzz1AAkIAAAAAADE8BEuAAAAAM2CsmH6jf3VCXQIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJkvqN/dgJdAABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAMElwGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAQAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAfsAAAAAAAAB+wAAAfsAAAKPAGkE+wBGBH4AbgXcAGkE+QBEAWUAZwKhAIUCqgAIA3IAHASJAE4BkgAdAjUAJQIbAKIDTAASBH4AcgR+ANcEfgBdBH4AXgR+ADkEfgCaBH4AhwR+AE0EfgBmBH4AVAH4AKACAABKBBEASASAAJgELgCGA8cAOgcvAGEFSgAnBRcAtgUeAIMFaQC2BKoAtgSnALYFfgCFBbMAtgI/AMMEagA/BSQAtgRgALYHAwC2BbQAtgWQAIIFGQC2BZAAggVMALUE4wBaBMYAOwVoAJYFKQAnBw0ASAUJAEEE8gAeBMkAYQIfAJIDSAAoAh8ACQNYAEADnAAEAnkATwRiAHIEiACRBDsAYQSIAGQENwBiAr4AQgSIAGYEiACRAfwAoQIL/7YEEwCSAfwAoQcCAJAEiACRBIgAYASIAJEEiABkAsoAkQQrAGYCjAAdBIgAjQQCAC4GDgAwBAIALgQCABsEAgBeArUAQAHzAK8CtQATBXEAggHzAJAEYQBuBKYARgW0AGkE2AAgAesAkwToAFoD9ACpBkkAWwOTAHoDwQBmBG4AfwZKAFoDqgB4Av0AggRHAGEDXwBxA2gAaQKCAIEEiACaA+kAQgIWAKIB+wB0AiYAXgOjAHoDwABvBjYAtAaWALQG6wB7A+0AcQd6//IERABZBXIAcwS6AKYEwgCLBsEAPQSwAEwEkQBHBIkAYAScAJoFmwAeAfoAmwRzAJoEMwAmAioAIwWLAKQEiACRB6EAaQdEAGEB/ACgArn/5AV/AHEEkwBgBZAAlgTzAI0CA/+0BDcAYgPEAKkDjQCMA2oAgQIhAKACtQCLAioAMgPGAIIC/ABoAp0AtgAA/NoAAP13AAD8kwAA/V4AAPwnAAD9QwINAMMECwChAhcAogRzALUFpAAgBXIAcwU+ADQEkQB6BbUAtgSRAEUFuwBOBYkAXQVSAHIEhQBkBL0AoAQCAC4EiABgBFAAYwQlAG0EiACRBI8AegKXAMMEbgAlA+wAZQTFAE8EiACRBE0AZQSIAGAELABRBF0AjwWjAFcFmgBfBpcAegTwAHQEQv/nBkgASgX/ACsFZQCHCJkAMgikALUGggBABbQAtQULAKYGBAA0B0MAGwS/AFEFtAC2BakAMAUHAFEGLQBTBdkAtAV6AJcHhwC0B8AAtAYSABEG6wC1BQUApgVkALEHJwDDBRgAYwRsAGEEkgCdA1sAmgTUAC4GIAAVBBAAWASeAJwEUgCcBKAAKAXvAJ0EnQCcBJ4AnAPYACgFzQBkBL0AnARZAGcGeACcBp8AkQT3AB4GNgCdBFgAnQRNAGQGiACdBGQALwSJ/+cETgBsBskAJwbkAJwEif/9BJ4AnAcIAJ8GKwCBBFb/3AcsAMQF+QCZBNIAKgRGAA8HDADWBgwAvAbRAJYF4QCWCQUAwwfRAJsEJABQA9sATAVyAHMEjABgBQoAFwQDAC4FcgBzBIkAYAcBAJ8GJAB+BwkAnwYsAIEFMgB4BEcAZAT9AHQAAPxnAAD8cQAA/WYAAP2kAAD6jQAA+qQEVv/cBRsAtQSKAJEEZACmA5AAkQTbALUEBgCRBQkApgR+AJoGjABFBYQAPgfPALUFtACRCDEAtAb0AJEF7gBzBNMAbQctADQFXAAfBXAAlwRrAIMFcACOBi8ARwS+/+MFCQCmBFoAmgWyALUEiACRBYcAXwSoAGkEqABpBLcAOgNJADsE9gBZBpQAWQbkAGQGVgA2BSsAMQRKAFMECAB5B8EARQZ1AD8H+wCtBqEAkAT2AHkEHQBlBa0AJAUgAEYFZACbBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYgAswZ9ALsDpgANAZkAYAGZADABlwAkAZoAUALUAGAC2wA8AsEAJARpAEYEjwBXArIAigPEAKYFWgCmB6oARAJmAGwCZgBZA6MAOwOrAEgDYAB6BKYARgaRAKcEPgBPBegAewPOAGgIywCrBQEAZgUXAJgGuwBvB1AAawd/AGwG2wBrBKIATAWOAKkErwBFBJIAqATFAD8IOgBrAgz/tASCAGUELQCYBDYAngQ8AJkECAArAkwAxwKPAG4CAwBcBG4AHwAAAAAIMwBbCDUAXAQcAFwDjQBXBIAAcwML/6IB/P+2AiUAGwGRAGcDpACDA54AgQOfAIED9ABtBA4AaQPz/14D7wBuA6QAWwH9AJ8EtQApBHUAmwSPAHIEpgCbBEMAmwQdAJsEzwByBPYAmwH6AJsECwBBBF0AmwO5AJsF9ACbBRkAmwTLAHIE4QByBKkAmwRvAF0ELABHBQIAjAS4ACoGBQBBBIQAOAReACAEPgBOBHcAewJpAEID4QBaBBIAWQRkAEcEaQBdBC0AegO5AEcELQBcBCcASwInAF4DVQBxA2gAaQL8AEoDeQByA3oAewMMAF4DggByA2sAaQOkAHwDlgCPArUAngNHAG8EfgBeBH4AOQR+AJoEjwCHBDoAHgRCADsEbwBaBH4AZgTDAGQEiABgBUQAtgRiAHIFLwC1BSQAtgQTAJIFPQC2BA8AkgR+AFQEdQCbA2oAgQH7AAACNQAlBYcALgWHAC4EpgAGBMYAOwKM/+MFSgAnBUoAJwVKACcFSgAnBUoAJwVKACcFSgAnBR4AgwSqALYEqgC2BKoAtgSqALYCP//cAj8AwwI///ICP//MBbQAtgWQAIIFkACCBZAAggWQAIIFkACCBWgAlgVoAJYFaACWBWgAlgTyAB4EYgByBGIAcgRiAHIEYgByBGIAcgRiAHIEYgByBDsAYQQ3AGIENwBiBDcAYgQ3AGIB+v+1AfoAmwH6/8sB+v+lBIgAkQSIAGAEiABgBIgAYASIAGAEiABgBIgAjQSIAI0EiACNBIgAjQQCABsEAgAbBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBR4AgwQ7AGEFHgCDBDsAYQUeAIMEOwBhBR4AgwQ7AGEFaQC2BR4AZASqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIFfgCFBIgAZgV+AIUEiABmBX4AhQSIAGYFfgCFBIgAZgWzALYEiACRAj//xQH6/54CP/+/Afr/mAI///UB+v/OAj8AIQH8AAACPwC3BqkAwwQHAKEEagA/AgP/tAUkALYEEwCSBGAAtgH8AKEEYAC2AfwAWwRgALYCkgChBGAAtgLYAKEFtAC2BIgAkQW0ALYEiACRBbQAtgSIAJEEiP/SBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBUwAtQLKAJEFTAC1AsoAWAVMALUCygBpBOMAWgQrAGYE4wBaBCsAZgTjAFoEKwBmBOMAWgQrAGYE4wBaBCsAZgTGADsCjAAdBMYAOwKMAB0ExgA7ArQAHQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQcNAEgGDgAwBPIAHgQCABsE8gAeBMkAYQQCAF4EyQBhBAIAXgTJAGEEAgBeB3r/8gbBAD0FcgBzBIkAYASm//MEpv/zBCwARwS1ACkEtQApBLUAKQS1ACkEtQApBLUAKQS1ACkEjwByBEMAmwRDAJsEQwCbBEMAmwH6/7MB+gCbAfr/yQH6/6MFGQCbBMsAcgTLAHIEywByBMsAcgTLAHIFAgCMBQIAjAUCAIwFAgCMBF4AIAS1ACkEtQApBLUAKQSPAHIEjwByBI8AcgSPAHIEpgCbBEMAmwRDAJsEQwCbBEMAmwRDAJsEzwByBM8AcgTPAHIEzwByBPYAmwH6/5wB+v+WAfr/zAH6//cB+gCPBAsAQQRdAJsDuQCbA7kAmwO5AJsDuQCbBRkAmwUZAJsFGQCbBMsAcgTLAHIEywByBKkAmwSpAJsEqQCbBG8AXQRvAF0EbwBdBG8AXQQsAEcELABHBQIAjAUCAIwFAgCMBQIAjAUCAIwFAgCMBgUAQQReACAEXgAgBD4ATgQ+AE4EPgBOCN4AXQVKACcFDv/mBhcAEwKjABkFpABSBVb/jQVmAD8Cl//IBUoAJwUXALYEqgC2BMkAYQWzALYCPwDDBSQAtgcDALYFtAC2BZAAggUZALYExgA7BPIAHgUJAEECP//MBPIAHgSFAGQEUABjBIgAkQKXAMMEXQCPBHMAmgSIAGAEiACaBAIALgQCAC4Cl//TBF0AjwSIAGAEXQCPBpcAegSqALYEcwC1BOMAWgI/AMMCP//MBGoAPwUkALYFJAC2BQcAUQVKACcFFwC2BHMAtQSqALYFtAC2BwMAtgWzALYFkACCBbUAtgUZALYFHgCDBMYAOwUJAEEEYgByBDcAYgSeAJwEiABgBIgAkQQ7AGEEAgAbBAIALgQ3AGIDWwCaBCsAZgH8AKEB+v+lAgv/tgRSAJwEAgAbBw0ASAYOADAHDQBIBg4AMAcNAEgGDgAwBPIAHgQCABsBZQBnAo8AaQQeAKkEugBCAgP/tAGZADAHAwC2BwIAkAVKACcEYgByBZD/PgcsAEIHeABCBKoAtgW0ALYENwBiBJ4AnAWJAF0FmgBfBQoAFwQD//kIigBgCZIAggS/AFEEEABYBR4AgwQ7AGEE8gAeBAIALgI/AMMHQwAbBiAAFQI/AMMFSgAnBGIAcgVKACcEYgByB3r/8gbBAD0EqgC2BDcAYgWHAF8ENwBiBDcAYgdDABsGIAAVBL8AUQQQAFgFtAC2BJ4AnAW0ALYEngCcBZAAggSIAGAFcgBzBIwAYAVyAHMEjABgBWQAsQRNAGQFBwBRBAIAGwUHAFEEAgAbBQcAUQQCABsFegCXBFkAZwbrALUGNgCdBQkAQQQCAC4EiABkBakAMASgACgFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGL/rgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSq//gEN/+zBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiAj8AwwH6AJsCPwC3AfwAlgWQAIIEiABgBZAAggSIAGAFkACCBIgAYAWQAEwEiP/LBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBX8AcQSTAGAFfwBxBJMAYAV/AHEEkwBgBX8AcQSTAGAFfwBxBJMAYAVoAJYEiACNBWgAlgSIAI0FkACWBPMAjQWQAJYE8wCNBZAAlgTzAI0FkACWBPMAjQWQAJYE8wCNBPIAHgQCABsE8gAeBAIAGwTyAB4EAgAbBKYAZASmAGQFJAC2BFIAnAWzALYEnQCcBMYAOwPYACgFCQBBBAIALgV6AJcEWQBnBXoAlwRZAGcEcwC1A1sAmgdDABsGIAAVBi8ARwS+/+MEiACRBQX/1AUF/9QEcwADA1v//AU4//UEJ//YBbQAtgSeAJwFswC2BJ0AnAcDALYF7wCdBakAMASgACgE8gAeBAIALgUJAEEEAgAuBFAAYwSnABsGfQC7AAAAAAIPAKkAAAABAAEBAQEBAAwA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/8AA4ADv/8AA8AD//8ABAAEP/8ABEAEf/7ABIAEv/7ABMAE//7ABQAFP/7ABUAFP/6ABYAFf/6ABcAFv/6ABgAF//6ABkAGP/5ABoAGf/5ABsAGv/5ABwAG//5AB0AHP/4AB4AHf/4AB8AHv/4ACAAH//4ACEAIP/3ACIAIf/3ACMAIv/3ACQAI//3ACUAJP/2ACYAJf/2ACcAJv/2ACgAJ//2ACkAJ//1ACoAKP/1ACsAKf/1ACwAKv/1AC0AK//0AC4ALP/0AC8ALf/0ADAALv/0ADEAL//zADIAMP/zADMAMf/zADQAMv/zADUAM//yADYANP/yADcANf/yADgANv/yADkAN//xADoAOP/xADsAOf/xADwAOv/xAD0AOv/wAD4AO//wAD8APP/wAEAAPf/wAEEAPv/vAEIAP//vAEMAQP/vAEQAQf/vAEUAQv/uAEYAQ//uAEcARP/uAEgARf/uAEkARv/tAEoAR//tAEsASP/tAEwASf/tAE0ASv/sAE4AS//sAE8ATP/sAFAATf/sAFEATf/rAFIATv/rAFMAT//rAFQAUP/rAFUAUf/qAFYAUv/qAFcAU//qAFgAVP/qAFkAVf/pAFoAVv/pAFsAV//pAFwAWP/pAF0AWf/oAF4AWv/oAF8AW//oAGAAXP/oAGEAXf/nAGIAXv/nAGMAX//nAGQAYP/nAGUAYP/mAGYAYf/mAGcAYv/mAGgAY//mAGkAZP/lAGoAZf/lAGsAZv/lAGwAZ//lAG0AaP/kAG4Aaf/kAG8Aav/kAHAAa//kAHEAbP/jAHIAbf/jAHMAbv/jAHQAb//jAHUAcP/iAHYAcf/iAHcAcv/iAHgAc//iAHkAc//hAHoAdP/hAHsAdf/hAHwAdv/hAH0Ad//gAH4AeP/gAH8Aef/gAIAAev/gAIEAe//fAIIAfP/fAIMAff/fAIQAfv/fAIUAf//eAIYAgP/eAIcAgf/eAIgAgv/eAIkAg//dAIoAhP/dAIsAhf/dAIwAhv/dAI0Ahv/cAI4Ah//cAI8AiP/cAJAAif/cAJEAiv/bAJIAi//bAJMAjP/bAJQAjf/bAJUAjv/aAJYAj//aAJcAkP/aAJgAkf/aAJkAkv/ZAJoAk//ZAJsAlP/ZAJwAlf/ZAJ0Alv/YAJ4Al//YAJ8AmP/YAKAAmf/YAKEAmf/XAKIAmv/XAKMAm//XAKQAnP/XAKUAnf/WAKYAnv/WAKcAn//WAKgAoP/WAKkAof/VAKoAov/VAKsAo//VAKwApP/VAK0Apf/UAK4Apv/UAK8Ap//UALAAqP/UALEAqf/TALIAqv/TALMAq//TALQArP/TALUArP/SALYArf/SALcArv/SALgAr//SALkAsP/RALoAsf/RALsAsv/RALwAs//RAL0AtP/QAL4Atf/QAL8Atv/QAMAAt//QAMEAuP/PAMIAuf/PAMMAuv/PAMQAu//PAMUAvP/OAMYAvf/OAMcAvv/OAMgAv//OAMkAv//NAMoAwP/NAMsAwf/NAMwAwv/NAM0Aw//MAM4AxP/MAM8Axf/MANAAxv/MANEAx//LANIAyP/LANMAyf/LANQAyv/LANUAy//KANYAzP/KANcAzf/KANgAzv/KANkAz//JANoA0P/JANsA0f/JANwA0v/JAN0A0v/IAN4A0//IAN8A1P/IAOAA1f/IAOEA1v/HAOIA1//HAOMA2P/HAOQA2f/HAOUA2v/GAOYA2//GAOcA3P/GAOgA3f/GAOkA3v/FAOoA3//FAOsA4P/FAOwA4f/FAO0A4v/EAO4A4//EAO8A5P/EAPAA5f/EAPEA5f/DAPIA5v/DAPMA5//DAPQA6P/DAPUA6f/CAPYA6v/CAPcA6//CAPgA7P/CAPkA7f/BAPoA7v/BAPsA7//BAPwA8P/BAP0A8f/AAP4A8v/AAP8A8//AAAAAAwAAAAMAAAiEAAEAAAAAABwAAwABAAACJgAGAgoAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAEAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAMEGwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYAAAAfUB9gH4AfoCAQIGAgoCDQIMAg4CEAIPAhECEwIVAhQCFgIXAhkCGAIaAhsCHAIeAh0CHwIhAiACIwIiAiQCJQFsAG8AYgBjAGcBbgB1AIMAbQBpAX0AcwBoAYsAfwCBAYgAcAGMAY0AZQB0AYMBhQGEAMEBiQBqAHkAtQCEAIcAfgBhAGwBhwCTAYoArQBrAHoBcAADAfEB9AIFAJAAkQFiAWMBaQFqAWUBZgCGAY4CJwKWAXQBeQFyAXMBkgNQAW0AdgFnAWsBcQHzAfsB8gH8AfkB/gH/AgAB/QIDAgQAAAICAggCCQIHAIoAmgCgAG4AnACdAJ4AdwChAJ8AmwAEBl4AAADqAIAABgBqAAAAAgANACEAfgCgAKwArQC/AMYAzwDmAO8A/gEPAREBJQEnATABOAFAAVMBXwFnAX4BfwGSAaEBsAHwAfsB/wIZAhsCNwJZArwCxwLJAt0C8wMBAwMDCQMPAyMDigOMA5IDoQOwA7kDyQPOA9ID1gQlBC8ERQRPBGIEbwR5BIYEzgTXBOEE9QUBBRAFEx4BHj8ehR7xHvMe+R9NIAsgFSAeICIgJiAwIDMgOiA8IEQgdCB/IKQgpyCsIQUhEyEWISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK7gL2w/sE/v///f//AAAAAAACAA0AIAAiAKAAoQCtAK4AwADHANAA5wDwAP8BEAESASYBKAExATkBQQFUAWABaAF/AZIBoAGvAfAB+gH8AhgCGgI3AlkCvALGAskC2ALzAwADAwMJAw8DIwOEA4wDjgOTA6MDsQO6A8oD0QPWBAAEJgQwBEYEUARjBHAEegSIBM8E2ATiBPYFAgURHgAePh6AHqAe8h70H00gACATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCnIKshBSETIRYhIiEmIS4hWyICIgYiDyIRIhoiHiIrIkgiYCJkJcruAfbD+wH+///8//8AAQQY//UAAP/iAAD/wAAA/78AAAExAAABLAAAASgAAAEmAAABJAAAASIAAAEcAAABHgAA/wH+9P7nAWEAAAChAGQAZv5h/kAAlv3U/aX9xP2v/aP9ov2d/Zj9hQAA/3D/bwAAAAD9BQAA/1D8+fz2AAD8tQAA/K0AAPyiAAD8nAAA/p4AAP6bAAD8RQAA5VXlFeTF5PjkWeT25ArhVgAA4U3hTOFK4UHjG+E54xPhMOEB4PcAAODRAADgdeBo4GbgW9+P4FDgJN+B3qffdd90323fat9e30LfK98o28QTjgrOAAAClAGYAAEAAAAAAAAA5AAAAOQAAADiAAAA4AAAAOoAAAEUAAABLgAAAS4AAAEuAAABOgAAAVwAAAFoAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAFMAWgAAAGAAAAAAAAAAZgAAAHgAAACCAAAAioAAAI6AAACxAAAAtQAAALoAAAAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqYAAAAAAAAAAwQbAeoB6wHxAfIB8wH0AfUB9gB/Ae0CAQICAgMCBAIFAgYAgACBAgcCCAIJAgoCCwCCAIMCDAINAg4CDwIQAhEAhACFAhwCHQIeAh8CIAIhAIYAhwIiAiMCJAIlAiYAiAHsA/AAiQHuAIoCVQJWAlcCWAJZAloAiwCMAI0CYwJkAmUCZgJnAmgCaQCOAI8CagJrAmwCbQJuAm8AkACRAn4CfwKCAoMChAKFAe8B8ACSAfcCEgCpAKoC+ACrAvkC+gL7AKwArQMCAwMDBACuAwUDBgCvAwcDCACwAwkAsQMKALIDCwMMALMDDQC0ALUDDgMPAxADEQMSAxMDFAMVAL8DFwMYAMADFgDBAMIAwwDEAMUAxgDHAxkAyADJA1oDHwDNAyAAzgMhAyIDIwMkAM8A0ADRAyYDWwMnANIDKADTAykDKgDUAysA1QDWANcDLAMlANgDLQMuAy8DMAMxAzIDMwDZANoDNAM1AOUA5gDnAOgDNgDpAOoA6wM3AOwA7QDuAO8DOADwAzkDOgDxAzsA8gM8A1wDPQD9Az4A/gM/A0ADQQNCAP8BAAEBA0MDXQNEAQIBAwEEBAYDXgNfARIBEwEUARUDYANhA2MDYgEjASQECwQMBAUBJQEmAScBKAEpBAcECAEqASsEAAQBA2QDZQPyA/MBLAEtBAkECgEuAS8D9AP1ATABMQEyATMBNAE1A2YDZwP2A/cDaANpBBMEFAP4A/kBNgE3A/oD+wE4ATkBOgQEATsBPAQCBAMDagNrA2wBPQE+BBEEEgE/AUAEDQQOA/wD/QQPBBABQQN3A3YDeAN5A3oDewN8AUIBQwP+A/8DkQOSAUQBRQOTA5QEFQQWAUYDlQQXA5YDlwFiAWMEGQQYAXcD8QF5AZIDUANYA1kABAZeAAAA6gCAAAYAagAAAAIADQAhAH4AoACsAK0AvwDGAM8A5gDvAP4BDwERASUBJwEwATgBQAFTAV8BZwF+AX8BkgGhAbAB8AH7Af8CGQIbAjcCWQK8AscCyQLdAvMDAQMDAwkDDwMjA4oDjAOSA6EDsAO5A8kDzgPSA9YEJQQvBEUETwRiBG8EeQSGBM4E1wThBPUFAQUQBRMeAR4/HoUe8R7zHvkfTSALIBUgHiAiICYgMCAzIDogPCBEIHQgfyCkIKcgrCEFIRMhFiEiISYhLiFeIgIiBiIPIhIiGiIeIisiSCJgImUlyu4C9sP7BP7///3//wAAAAAAAgANACAAIgCgAKEArQCuAMAAxwDQAOcA8AD/ARABEgEmASgBMQE5AUEBVAFgAWgBfwGSAaABrwHwAfoB/AIYAhoCNwJZArwCxgLJAtgC8wMAAwMDCQMPAyMDhAOMA44DkwOjA7EDugPKA9ED1gQABCYEMARGBFAEYwRwBHoEiATPBNgE4gT2BQIFER4AHj4egB6gHvIe9B9NIAAgEyAXICAgJSAwIDIgOSA8IEQgdCB/IKMgpyCrIQUhEyEWISIhJiEuIVsiAiIGIg8iESIaIh4iKyJIImAiZCXK7gH2w/sB/v///P//AAEEGP/1AAD/4gAA/8AAAP+/AAABMQAAASwAAAEoAAABJgAAASQAAAEiAAABHAAAAR4AAP8B/vT+5wFhAAAAoQBkAGb+Yf5AAJb91P2l/cT9r/2j/aL9nf2Y/YUAAP9w/28AAAAA/QUAAP9Q/Pn89gAA/LUAAPytAAD8ogAA/JwAAP6eAAD+mwAA/EUAAOVV5RXkxeT45Fnk9uQK4VYAAOFN4UzhSuFB4xvhOeMT4TDhAeD3AADg0QAA4HXgaOBm4Fvfj+BQ4CTfgd6n33XfdN9t32rfXt9C3yvfKNvEE44KzgAAApQBmAABAAAAAAAAAOQAAADkAAAA4gAAAOAAAADqAAABFAAAAS4AAAEuAAABLgAAAToAAAFcAAABaAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAAAABTAFoAAABgAAAAAAAAAGYAAAB4AAAAggAAAIqAAACOgAAAsQAAALUAAAC6AAAAAAAAAAAAAAAAAAAAAAC3AAAAAAAAAAAAAAAAAAAAAAAAAAAAswAAALMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmAAAAAAAAAAMEGwHqAesB8QHyAfMB9AH1AfYAfwHtAgECAgIDAgQCBQIGAIAAgQIHAggCCQIKAgsAggCDAgwCDQIOAg8CEAIRAIQAhQIcAh0CHgIfAiACIQCGAIcCIgIjAiQCJQImAIgB7APwAIkB7gCKAlUCVgJXAlgCWQJaAIsAjACNAmMCZAJlAmYCZwJoAmkAjgCPAmoCawJsAm0CbgJvAJAAkQJ+An8CggKDAoQChQHvAfAAkgH3AhIAqQCqAvgAqwL5AvoC+wCsAK0DAgMDAwQArgMFAwYArwMHAwgAsAMJALEDCgCyAwsDDACzAw0AtAC1Aw4DDwMQAxEDEgMTAxQDFQC/AxcDGADAAxYAwQDCAMMAxADFAMYAxwMZAMgAyQNaAx8AzQMgAM4DIQMiAyMDJADPANAA0QMmA1sDJwDSAygA0wMpAyoA1AMrANUA1gDXAywDJQDYAy0DLgMvAzADMQMyAzMA2QDaAzQDNQDlAOYA5wDoAzYA6QDqAOsDNwDsAO0A7gDvAzgA8AM5AzoA8QM7APIDPANcAz0A/QM+AP4DPwNAA0EDQgD/AQABAQNDA10DRAECAQMBBAQGA14DXwESARMBFAEVA2ADYQNjA2IBIwEkBAsEDAQFASUBJgEnASgBKQQHBAgBKgErBAAEAQNkA2UD8gPzASwBLQQJBAoBLgEvA/QD9QEwATEBMgEzATQBNQNmA2cD9gP3A2gDaQQTBBQD+AP5ATYBNwP6A/sBOAE5AToEBAE7ATwEAgQDA2oDawNsAT0BPgQRBBIBPwFABA0EDgP8A/0EDwQQAUEDdwN2A3gDeQN6A3sDfAFCAUMD/gP/A5EDkgFEAUUDkwOUBBUEFgFGA5UEFwOWA5cBYgFjBBkEGAF3A/EBeQGSA1ADWANZAAAAAgBpBBQCHwYYAAUACgAAAQMjEzUzBQMjETMCHy9eAYz+1i9djAWN/ocBd42L/ocCBAAAAAIARgAABKIFsAAbAB8AAAEhAyMTIzUhEyE1IRMzAyETMwMzFSMDMxUjAyMDIRMhAsz++FCPUO8BCUb+/QEeUY9RAQhRkFHL5kbh+1CQngEIRv74AZr+ZgGahwFmiQGg/mABoP5gif6ah/5mAiEBZgABAG7/MAQRBpsAKwAAATQmJy4BNTQ2NzUzFR4BFSM0JiMiBhUUFhceARUUBgcVIzUuATUzFBYzMjYDWH+bz8m8qpWst7iAeHx5eabRwsu3lLDduaB4hpMBdl1/ND/GrajMFdrbGOnOjKh8bmV3OES/rK/IEr+/EdPZoIJ8AAAAAAUAaf/rBYMFxQANABsAKQA3ADsAABM0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhUBNDYzMhYdARQGIyImNTMUFjMyNj0BNCYjIgYVBScBF2mgioqhoImLoYtST01RUk5OUQI6oIqKoaCJi6GLUk9OUVJPTlH+EmgCx2gEmIKrq4JNgaqqgU1nZ01NTWlpTfzNgaurgU6CqqqCTWhnTk5NaGhN9kEEckEAAAADAET/6wTRBcUAIAArADgAABM0NjcuATU0NjMyFhUUBg8BAT4BNTMUBgcXIycOASMiJgUyNjcBBw4BFRQWAxQWFzc+ATU0JiMiBkSMj1BKvayfvmVmcwFcLC+mTEu+3VtTv2zc+wHXTI5A/o8qYTyQDzc4kDopYFJXWQGGfLRgYptUq7OxgmOLS1X+XkSdXIXcW+NsQEHgSzIyAbofSXw0dJID6Td0R2QnWTdAXXAAAAEAZwQjAP0GGAAFAAATAyMTNTP9OV0BlQWo/nsBdYAAAQCF/ioClQZqAA8AABMQADcXBgIRFRASFwcmABGFATW1Jo3KyY4mtv7MAk8BjwInZXhs/iz+nw7+n/4sdW9mAiQBkQABAAj+KgIYBmoADwAAARAAByc2EhE1EAInNxYAEQIY/su0J4vM0oUntAE1AkX+b/3cZm9rAd0BYg4BXAHfb29m/dn+cgAAAAABABwCYgNVBbAADgAAASU3BQMzAyUXBRMHCwEnAUr+0i4BLgmZCgEpLv7Nxny6tH0D2FuUcAFZ/qFwllz+8F0BIf7mWgAAAAABAE4AkgQ0BLYACwAAASEVIREjESE1IREzAp4Blv5quv5qAZa6Awus/jMBzawBqwABAB3+zAE0ANoACQAAJRQGByc+AT0BMwE0XFJpMC65RmTPR0hJkVWXAAAAAAEAJQIhAg0CtgADAAABITUhAg3+GAHoAiGVAAABAKIAAAFeAMUAAwAAISM1MwFevLzFAAABABL/gwMQBbAAAwAAFyMBM7GfAmCefQYtAAAAAgBy/+sEDAXFAA0AGwAAARACIyICGQEQEjMyEhEnNCYjIgYVERQWMzI2NQQM8dva9PLa2/O5i4qJioyJiokCLP7j/twBJQEcAVcBHAEm/tr+5CjEwMDE/lvEwsDGAAAAAQDXAAACuQWwAAUAACEjEQU1JQK5uf7XAeIE3Ah3ZQABAF0AAAQjBcUAGAAAKQE1AT4BNTQmIyIGFSM0NjMyFhUUBgcBIQQj/FYB3YRagXCckbn+6MbljIP+eQLLgwITkqdacpSakcP+4LV56ZD+VwAAAAABAF7/6wP6BcUAKAAAATMyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAQjIiQ1MxQWMzI2NTQmKwEBhqeKc36BeY659srO6m5wh27/AM7K/vy6koKFkISQpwMwhHiBgoh0reXTyl2wMCu2dcvf1cF3ioeKi4AAAAIAOQAABFEFsAAKAA8AAAEzFSMRIxEhNQEzASERIwcDhM3NuP1tAofE/X0BywMbAeiV/q0BU2sD8vw4AslGAAABAJr/6wQRBbAAHgAAGwEhFSEDPgE3NhIVFAIjIiY1MxQWMzI2NTQmIyIGB7FUAtX9xzAwclHK4+TlvPKvi3SEjI2AemwaApEDH6n+XCUtAgL+++Tg/vvHzXyDr5+Rs0ZMAAAAAgCH/+sEMwXFABoAJwAAATIWFwcuASMiBh0BPgEzMhIVFAIjIgAZARAAEyIGBxUUFjMyNjU0JgKfTJEyKDRpSqC/QaVjx+Pz0Nj+7wEwqWqRJaqGgIqSBcUiG5EaHvXOIjtB/vfV5f7oAS8BHgEfARsBU/1zVUpzztjMnJa6AAABAE0AAAQiBbAADAAAAQACAwcjNxoBEyE1IQQi/ve+KQ+6Dyvw2PziA9UFGv7B/hv+o5mZAWICFwEIlgADAGb/6wQYBcUAGAAkADAAAAEUBgceARUUBCMiJDU0Njc1LgE1NDYzMhYDNCYjIgYVFBYzMjYDNCYjIgYVFBYzMjYD8H9vgZX+/tba/wCRf2166cbD75Gif4Kdm4aBnimKbnCGh3FvhwQ1dakrLbh+zdHQzn65LAMpqXTEzM38lXuamXyAjY4DI3COiXVzhoYAAAAAAgBU/+sD/QXFABsAKAAAJTI2PQEnDgEjIgI1NAAzMgAZARAAIyImJzceARMyNjc1NCYjIgYVFBYB/5auAzCWXtfxAQLA5gEB/uroT5tCHT9+b3KUIZWSdJqOgNbaLAFJSgED8egBH/7q/uf+nP7g/tkcH5AeGAHfYE2cxcLMpaG+AAD//wCgAAABXQQ6ACYAEP4AAAcAEP//A3X//wBK/swBYQQ6ACcAEAAAA3UABgAOLQAAAQBIAMUDegRJAAkAAAEHFRcFFQE1ARUBQk9PAjj8zgMyApsUBBTpwQF7jwF6wQAAAgCYAZAD2gPNAAMABwAAASE1IREhNSED2vy+A0L8vgNCAy+e/cOeAAEAhgDGA9wESgAJAAATNQEVATUlNzUnhgNW/KoCXFJSA4+7/oaP/oW88hUDFgAAAAIAOgAAA28FxQAZAB0AAAE+ATc+ATU0JiMiBhUjPgEzMhYVFAYHDgEVEyM1MwFnAS1mZlRybmGAugLjtsbUiXg4FgjExAGZk2pddn5db3JlZKnAxbeE0HQ2VF7+Z8sAAAIAYf47BtgFlgAzAEMAAAEGAiMiJicOASMiJjcaATMyFhcHMwMGFjMyNjcSACEgAAMCACEyNjcXDgEjIAATEgAhIAABBhYzMjY3PAE3Ey4BIyIGBscJ2d9LaRY0jmKBhxIY4qhqekwEBjMJPzSAlAkR/sP+pv7E/ogQEgFOAURasUAlRctk/n3+aBITAcYBfAGEAYz78AxDT0RuLgIvGzwigYgB99r+zlROU0/tyAEIATMzNwT9uHJT4rUBhwGj/jj+hf6A/lAqJGgrLgHqAbkBrwIJ/hf985KVNUYQFQwCGg0Q2QAAAAACACcAAAUiBbAABwAKAAABIQMjATMBIwEhAwPY/ZuPvQIyoAIpvf1FAfj6AYT+fAWw+lACGQKyAAMAtgAABKkFsAAPABgAIQAAMxEhMhYVFAYHFR4BFRQGIwERITI2NTQmIyUhPgE1NCYjIbYB0+j9eWODlP7h/qUBW42ZgYn+iQFMc4eXlf7mBbDByGSYJAMbx4jLzwKt/eiFfoOSlQN3b3p1AAEAg//rBMkFxQAbAAABBgAjIgAZARAAMzIEFyMuASMiAhURFBIzMjY3BMkY/u/x/P7QATD89QENGLkZo6Wsx8espqIZAc3c/voBWAEUAQEBEwFa/eimqf73zP79zv73pKkAAAACALYAAATnBbAACQATAAAzESEgABEVEAAhAxEzMhI9ATQmI7YBuwEiAVT+qP7Q8PDo5uLaBbD+pv7kxf7i/qkFGvt7AQXbx9//AAAAAQC2AAAEdQWwAAsAAAEhESEVIREhFSERIQQP/WADBvxBA7X9BAKgAqb975UFsJb+IgAAAAEAtgAABHMFsAAJAAABIREjESEVIREhBA39YrkDvfz8Ap4CiP14BbCW/gQAAQCF/+sE2wXFAB8AACUOASMgABkBEAAhMgQXIy4BIyIGFREUFjMyNjcRITUhBNs0/c/+9/6zATcBAPgBCB+5GqOpr87kuIKiI/62AgO/UIQBSgEPASkBDwFJ7c6HnvnH/tXJ+0IsAVCVAAAAAQC2AAAE/QWwAAsAACEjESERIxEzESERMwT9uf0rubkC1bkChv16BbD9awKVAAAAAQDDAAABfAWwAAMAACEjETMBfLm5BbAAAQA//+sDwAWwAA8AAAEzERQGIyImNTMUFjMyNjUDB7nyx9XzuYqFco4FsPvkyOHS1IyFlIAAAAABALYAAAUcBbAADAAAASMRIxEzETMBMwkBIwIfsLm5nwIR1P3DAmbjApT9bAWw/XkCh/0+/RIAAAEAtgAABCUFsAAFAAAlIRUhETMBbwK2/JG5lZUFsAAAAQC2AAAGTQWwABAAAAkCMxEjERMjASMBIxMRIxEBpAHdAd7uuRMD/ht8/hwDE7kFsPtPBLH6UAJHAmP7VgSo/Z/9uQWwAAAAAQC2AAAE/gWwAAsAACEjASMRIxEzATMRMwT+uf0tA7m5AtMDuQR7+4UFsPuGBHoAAgCC/+sFDQXFAA0AGwAAARAAISAAGQEQACEgABEnNAIjIgIVERQSMzISNQUN/rv+9v7+/sYBOgECAQoBRbnavLTPz7S92QJX/vT+oAFgAQwBAQELAWL+nv71AskBBv76yf79y/76AQXMAAAAAgC2AAAExAWwAAoAEwAAAREjESEyFhUUBiMlITI2NTQmIyEBb7kCJO39/e3+lQFrnJWVnP6VAkr9tgWw68jK6ZWffX6hAAAAAgCC/wwFDQXFABMAIQAAARQCBxcHJQ4BIyAAGQEQACEgABEnNAIjIgIVERQSMzISNQUNfHPuf/7yL18z/v7+xgE6AQIBCgFFudq8tM/PtL3ZAleh/vtW3HP9DhABYAEMAQEBCwFi/p7+9QLJAQb++sn+/cv++gEFzAAAAAIAtQAABOIFrwAaACMAAAERIxEhMhYVFAYHHgEdARQWFxUjLgE9ATQmIyUhMjY1NCYjIQFuuQIK8/d5dXtpHiW/KBaMfP6RAT6vlZKf/q8Cev2GBa/PznKkMiirhIlGaSMYI4NGhXqPlYCFf4cAAAABAFr/6wSKBcUAJQAAATQmJy4BNTQkMzIAFSM0JiMiBhUUFhceARUUBCMiJDUzFBYzMjYD0JbH7P4BE+HxARi5rKSboKnI6u3+5evf/rW5056csAFuaIUxONClrd/+/raEnoVuYn8xO9ins9Loz5GRfgAAAAEAOwAABIoFsAAHAAABIREjESE1IQSK/jW5/jUETwUa+uYFGpYAAAABAJb/6wTXBbAAEQAAAREUBCMiJDURMxEUFjMyNjURBNf+0vv0/ty6vaGpxwWw/CXy+PjyA9v8JauqqqsD2wAAAQAnAAAFAgWwAAkAAAEXMzcBMwEjATMCciEEIQGCyP3jof3jyQFednYEUvpQBbAAAQBIAAAGwgWwABUAAAEXMzcBMwEXMzcTMwEjAScjBwEjATMB0x8DLAERpQETKwMhz7r+rqb+2x0DHf7Xpv6vuQHvysoDwfw/zMwDwfpQA/2RkfwDBbAAAAEAQQAABNAFsAALAAAJATMJASMJASMJATMChgFg3/4vAdzc/pb+l+AB3P4v3gNzAj39Lv0iAkj9uALeAtIAAAABAB4AAATTBbAACAAACQEzAREjEQEzAngBh9T9/rj+BdQCvgLy/FL9/gIPA6EAAAABAGEAAARtBbAACQAAJSEVITUBITUhFQE1Azj79AMU/PkD3pWVjQSNlogAAAEAkv7IAgsGgAAHAAABIxEzFSERIQILv7/+hwF5Ber5dJYHuAAAAAABACj/gwM4BbAAAwAAEzMBIyiwAmCwBbD50wAAAQAJ/sgBgwaAAAcAABMhESE1MxEjCQF6/obBwQaA+EiWBowAAQBAAtkDFAWwAAkAABMjATMBIwMnIwfsrAErfwEqq6sTBBMC2QLX/SkBqlVVAAAAAQAE/2sDmAAAAAMAAAUhNSEDmPxsA5SVlQAAAAEATwS7AeQFxQADAAABIwMzAeSY/eIEuwEKAAACAHL/7APsBE4AHwAqAAAhLgEnDgEjIiY1NDY7ATU0JiMiBhUjNDYzMhYVERQWFyUyNjc1IyIGFRQWAy0KCgI6rGerrfjc0XpxaYG57r+73wwQ/flopSXXgZRdM0IkTGGpmZ6sbmNvY0d9w7iy/fY6ajaLYEbHeVVLVAAAAgCR/+wEJQYYABIAIAAAARQCIyImJwcjETMRFz4BMzISESM0JiMiBgcRHgEzMjY1BCXbyW2cNRKgugMylmnL27mKkWF/Jid/YpGIAfXw/udSUpAGGP2gAUpN/sb+9sDqWk/+JVBaxqkAAAAAAQBh/+wD8gROABsAACUyNjczDgEjIgI9ATQSMzIWFyMuASMiBh0BFBYCQ2eXAbAB/6/u9PTuv+8BsAGOcKGHhoF4XJTVAS/tKuwBMNysaIrfpyqr3AAAAAIAZP/sA/AGGAASACAAABMQEjMyFhc3ETMRIycOASMiAjUzFBYzMjY3ES4BIyIGFWTazGSSNAO5oRA2mGnJ27mHkl56KSh8W5OIAgoBCgE6SEYBAlf56IdOTQEa76rFUkwB9khS6sAAAgBi/+wD6QROABUAHQAABSIAPQE0ADMyEh0BIR4BMzI2NxcOAQMiBgchNTQmAk7k/vgBD7/c3f0zBJ2RZZM7STu5pmmRFAIOgBQBJ/Qt7AEu/v7geabMODN7OksDzKmHGnmdAAEAQgAAAs4GLQAXAAAzESM1MzU0NjMyFhcHLgEjIgYdATMVIxHsqqqvoyJDKxcTMh1aVebmA62Ni6+5CwqRBQZoZYuN/FMAAAIAZv5MA/cETgAeACwAABMQEjMyFhc3MxEUBiMiJic3HgEzMjY9AScOASMiAjUzFBYzMjY3ES4BIyIGFWbezWqYNhKc8uRUs00vQpVMk4wDNJRkyt+5ipNeeyknfF2TjAIKAQoBOlJRj/vU1uwsKoohKZ2PaQFGRgEa76nGU04B8EpT678AAAABAJEAAAP6BhgAFAAAARc+ATMyFhURIxE0JiMiBgcRIxEzAUsDN6Jnsbu5dHdXiCy6ugOnAVBYzN39WwKnjYBSSPzmBhgAAAACAKEAAAFaBhgAAwAHAAAhIxEzESM1MwFaubm5uQQ6ARjGAAAC/7b+SwFnBhgADwATAAABERQGIyImJzceATMyNjUREyM1MwFnp5sgMh0ODzURRk+zubkEOvttqrIJCZYFCFpnBJMBHMIAAAABAJIAAAQUBhgADAAAASMRIxEzETMBMwkBIwHNgbq6fgE72/6GAa7bAfb+CgYY/HUBrf4T/bMAAAEAoQAAAVoGGAADAAAhIxEzAVq5uQYYAAEAkAAABnIETgAkAAABHwE+ATMyFhc+ATMyFhURIxE0JiMOAQcVESMRNCYjIgYHESMRATcNAzShcHGaJzSndam7um9xb4ALunJwYXcgugQ6kAFPVmVqYW7c6P12AoulhAGSbwH9TwKNnYpQSvzmBDoAAAAAAQCRAAAD+AROABQAAAEfAT4BMzIWFREjETQmIyIGBxEjEQE4DQM1o2uxvLpxeVuFKboEOqIBV2DI2/1VAqeVeFZN/O8EOgAAAgBg/+wEJwROAA0AGwAAEzQAMzIAHQEUACMiADUzFBYzMjY9ATQmIyIGFWABAOLkAQH/AOPk/wC6lJaUlpeVlJQCKPUBMf7P9Rj2/tIBLvax3t+wGK7i4q4AAAACAJH+YAQkBE4AEgAgAAABFAIjIiYnBxEjETMXPgEzMhIRIzQmIyIGBxEeATMyNjUEJNvJZ5Y1A7qfEjaaa8zbupCTW3smKHldko8B9fD+50NDAf3vBdqKTlD+x/71v+tQRv32R0zLqQAAAAACAGT+YAPmBE4AEgAgAAATEBIzMhYXNzMRIxEnDgEjIgI1MxQWMzI2NxEuASMiBhVk2sxkkzYPoLkDNI5gydu5h5JYdikpd1WTiAIKAQoBOklIffomAgoBQD8BGu+qykpGAhpCS+3BAAEAkQAAArEETgAQAAABJyIGBxEjETMfAT4BMzIWFwKYbFVuHrqmEgMtiFwYLw0DkwZOSfz+BDqdAVReBwQAAAABAGb/7APCBE4AJQAAATQmJy4BNTQ2MzIWFSM0JiMiBhUUFhceARUUBiMiJjUzHgEzMjYDCWSRyMHatsDcuXppbmlaks/D47/R6bkGlGdweQEeRFUfK5CBhra/kkpxXUNDSR8tlIGSrc2TbV5VAAAAAQAd/+wCTgVBABcAAAERMxUjERQWMzI2NxcOASMiJjURIzUzEQFy0NA2LxgxFRkaXS5xgJubBUH++Y39alA/BwaDERWNngKWjQEHAAEAjf/sA/YEOgAUAAAlJw4BIyImNREzERQWMzI2NxEzESMDQwMynm20wrpocXCJJLmmngFXXN30An39gbKDV1MDCvvGAAAAAAEALgAAA98EOgAJAAABFzM3ATMBIwEzAfIWAxcBAL3+cI3+bL0BOl1dAwD7xgQ6AAEAMAAABdgEOgAVAAABHwE3EzMTFzM3EzMBIwMnIwcDIwEzAaAbAyHaltojAyKvuP7GltYvAy3Sl/7GuQGGlgGXArT9TKSkArT7xgKbwcH9ZQQ6AAEALgAAA88EOgALAAABEzMJASMLASMJATMB/PDY/p8BbNX6+tgBbf6e1gKnAZP96f3dAZ7+YgIjAhcAAAEAG/5LA+QEOgAVAAABFzMBMwEOASMiJic3JhYzMjY/AQEzAdkmAwETz/42KZSEGEYUEwNOC0M+LjH+a88BhpADRPsfb58LBZUBBktrdQQkAAAAAAEAXgAAA7gEOgAJAAAlIRUhNQEhNSEVAT4CevymAlH9twMulZWFAx6XgQAAAQBA/pACngY9AB4AAAEuAT0BNCYjNTI2PQE0NjcXDgEdARQGBx4BHQEUFhcCeMSgZm5uZp/FJnNeUldXUl5z/pA4667Pc3yPenTQrus4cSWziNBrni0unmrPh7MlAAAAAQCv/vIBRAWwAAMAAAEjETMBRJWV/vIGvgAAAAEAE/6QAnIGPQAeAAAXPgE9ATQ2Ny4BPQE0Jic3HgEdARQWMxUiBh0BFAYHE3JgV19fV19yJsSgZW9vZaDE/iWzh89unCsqnm/QiLMlcTjqr9B0eo98c8+u6zgAAQCCAZME7wMhABkAAAEUBiMiJicuASMiBhUnNDYzMhYXHgEzMjY1BO+qg1uOWjxhNEZfh6eFWpJXPGA1RWEC5IvGQUsyMGpPEoq9REg1LXJRAAAAAgCQ/ooBTQQ6AAMABwAAASMRMxMjNTMBS7m5Ar29/ooD0gESzAAAAAEAbv8LA/8FJgAhAAAlMjY3Mw4BBxUjNSYCPQE0Ejc1MxUeARcjLgEjIgYdARQWAlBnlwGwAcqWurq8vLq6oMABsAGOcKGHhoF4XILIGOjsIwEfzyrNAR8l494Y0phoit+nKqvcAAAAAQBGAAAEUQXFACEAAAEXFAYHIQchNTM+ATUnIzUzAzQ2MzIWFSM0JiMiBhUTIRUBqQYhIALjAfw2CjQyBqqkCtu+ytW6fWhpdgoBpwJqmF2jPZWVDcVrmJUBEdDlz7R8cZSL/u+VAAACAGn/5QVbBPEAIwAvAAAlDgEjIiYnByc3LgE1NDY3JzcXPgEzMhYXNxcHHgEVFAYHFwcBFBIzMhI1NAIjIgIET0+5aGm3ToaCjDQ1OTiUgpNMsWRksU6VhJg2OTUxj4T8YPS0svT0srT0cEFDQkCIhY5Os2ZpuVGXhpY7PT47mIebULdoZLJOkYYCe8P++AEIw8EBB/75AAEAIAAABKsFsAAWAAAJATMBIRUhFSEVIREjESE1ITUhNSEBMwJmAXHU/loBP/57AYX+e7n+gwF9/oMBPv5Z1QMNAqP9L3irdv66AUZ2q3gC0QAAAAIAk/7yAU0FsAADAAcAABMRMxkBIxEzk7q6uv7yAxb86gPIAvYAAAACAFr+EQR4BcUAMQBDAAABFAYHHgEVFAQjIiQ1NxQWMzI2NTQmJy4BNTQ2Ny4BNTQkMzIEFSM0JiMiBhUUFhceASUuAScOARUUFhceARc+ATU0JgR4YFtJRv785OH+17rDjY+fjdL13l5aR0QBBuPsAQC5oZKZloPa+dv94jROIlBMh9sxTCNPVJIBr2CJKTSFZa7Ay+QClYZ3X19jQEGztF2LKjOHZKjG3dJ7nndfZ2E8Ra9UDRgOE2NJaGU9DhgMFGNIXmoAAAIAqQTsA1IFsAADAAcAAAEjNTMFIzUzA1LT0/4r1NQE7MTExAAAAAADAFv/6wXmBcQAGwAnADMAAAEUBiMiJj0BNDYzMhYVIzQmIyIGHQEUFjMyNjUlEAAzMgAREAAjIgADEAAhIAAREAAhIAAEX62eori4op6ukltfY2dnY19a/QEBVv37AVf+qfv9/qpzAZgBLgEsAZn+Z/7U/tL+aAJUnpzRsnew052cY1eNdnh5jFZmhf7w/pcBaQEQAQ4BZ/6Z/vIBQQGq/lb+v/6+/lQBqwAAAgB6ArQDDwXFAB8AKgAAAS4BJw4BIyImNTQ2OwE1NCYjIgYVJzQ2MzIWFREUFhclMjY3NSMiBhUUFgJqCAoDInBQeYCko5E9P0hMoaeOh5gMDv6LN24TkE9WPALCFTAaMTx4bG92NUNFNzUOaIGMiP7GM1creTsmckIwMDEAAP//AGYAdwNkA5EAJgFy+t0ABwFyAUT/3QABAH8BeAO+Ax8ABQAAASMRITUhA766/XsDPwF4AQifAAQAWv/rBeUFxAALABcAMgA7AAATEAAhIAAREAAhIAATEAAzMgAREAAjIgABESMRITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMnMz4BNTQmKwFaAZgBLgEsAZn+Z/7U/tL+aHMBVv38AVb+qvz9/qoBwI0BFJqoQkBDOgcKkQoEQ1CjnEVbTmeHAtkBQQGq/lb+v/6+/lQBqwFD/vD+lwFpARABDgFn/pn+qf6sA1KAgD9dIBtoTDgqQBUQFk8rNktDfgE/O0w7AAAAAQB4BSMDQgWwAAMAAAEhNSEDQv02AsoFI40AAAIAggPBAnwFxQALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBoKUa2mSkmlrlH1KODdJSTc3SwTBbJiYbG2Tk205SUg6OktMAAACAGEACQP1BPMACwAPAAABIRUhESMRITUhETMBITUhAooBa/6Vp/5+AYKnAUz8vQNDA1aW/mEBn5YBnfsWlQAAAQBxApsCxgXHABgAAAEhNQE+ATU0JiMiBhUjNDYzMhYVFAYPASECxv20AS9ILDo/SEqhpI+IlFd1qAF6Apt+AQg+Siw0P0E1aYx9dlBtbJIAAAAAAQBpAo8C4AXGACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AadIQUlKO0qip4CSo0U/SEqwk4C0o01ETVRKTYMEbzo2LjoyKmV2dXA4WhoYXUZxenR1MTo7M0E5egAAAAABAIEEvAIeBcYAAwAAATMBIwE94f7wjQXG/vYAAQCa/mAD7gQ6ABYAAAERFBYzMjY3ETMRIy8BDgEjIiYnESMRAVNxa2p7ILqmCgMrgVhMbiq5BDr9kcOITUwDIfvGbgFBQyIo/isF2gAAAAABAEIAAAM/BbAACgAAIREjIiY1NBIzIREChVfu/v/tARECCP/V0wEB+lAAAAEAogJwAWEDQQADAAABIzUzAWG/vwJw0QAAAAABAHT+TQGqAAAADwAAIQceARUUBiMnMjY1NCYnNwEdDENWm5QHSlxIWiA1C1BSYXBqMTMyJgeGAAEAXgKZAYQFxQAFAAABIxEHNSUBhKSCASYCmQKUAYIXAAAAAAIAegKzAycFxQANABsAABM0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhV6t5+gt7afoLijWltYWltZWVoEdpa5uJd1mLa3l1tra1t1WGxsWAAA//8AbwCZA3gDtAAmAXMWAAAHAXMBagAA//8AtAAABdwFxAAnAckAVgKYACcBdAEVAAgABwGXArgAAAAA//8AtAAABe4FxAAnAXQBIgAIACcByQBWApgABwHKAygAAAAA//8AewAABp0FxwAnAXQB0QAIACcBlwN5AAAABwHLABICmwAAAAIAcf52A6YEOwAZAB0AAAEOAQcOARUUFjMyNjczDgEjIiY1NDY3PgE1AzMVIwJ6Ai1mZ1Nxb2CBAbkD47XH04h5NxcIxMQCoZRpXXd9XG9yZWSpwMW3gtB1NVRfAZrMAAL/8gAAB1cFsAAPABMAACkBAyEDIwEhFSETIRUhEyEBIQMjB1f8jQ/9zM3iA3ADt/1NFAJO/bgXAsD6rQHKHwMBYv6eBbCW/iaV/eoBeQLcAAAAAAEAWQDiA90EdgALAAATCQE3CQEXCQEHCQFZAUr+uHcBSQFJd/63AUt3/rX+tQFcAVEBT3r+sQFPev6x/q96AVH+rwAAAwBz/6ME/gXsABkAJAAvAAABEAAhIiYnByM3LgE1ERAAITIWFzczBx4BFQEUFhcBLgEjIgIVITQmJwEeATMyEjUE/v67/vZWlUJdj4xWWQE6AQJip0lUj4ZOUvwuKSoCLDR9S7TPAxkkIv3XLmtAvdkCV/70/qAqKpzqV+iLAQEBCwFiNTKO4Ffcgf7/WJg9A6UsLv76yU2JO/xhIyMBBcwAAAACAKYAAARdBbAADAAVAAABESEyFhUUBiMhESMRExEhMjY1NCYjAWABFer+/ur+67q6ARWZlZWZBbD+2ujAwef+xgWw/kX92px1dp8AAQCL/+wEagYPACcAACEjETQ2MzIWFRQGFRQAFRQGIyImJzceATMyNjU0ADU0NjU0JiMiBhUBRLniuqHEgAFez7JTsSgrKoNAcmr+oopnRW5/BDrh9Kiod9g8VP7ojqmlKx2ZHS9eUlcBGpRT2U5fa6ScAAADAD3/6wZ8BE4ALAA3AD8AAAUiJicOASMiJjU0NjsBNTQmIyIGFSc0NjMyFhc+ATMyFh0BIR4BMzI2NxcOASUyNjc1IyIGFRQWASIGByE1NCYE7ovKQznao6224d/qaWdvfbjiwnWsMkGuadji/S4EnaNqhkxAObX8SFCnLOiAiWcDZXeNEAIVexVhXVJsq5miqlVweG5SEpC0UlJQVP/ndarJODOFL0yVWDrfcVVOXQM4q40ffpsAAgBM/+sELQXtACAAMAAAARYSHQEUACMiADU0ADMyFhc3LgEnBSc3LgEnNx4BFzcXAzQmNS4BIyIGFRQWMzI2NQNTanD+59rd/u8BDtpXlzkDF1Y+/utJ+iZPKzlMhj3sSbgBJKB7jKOnkoyqBQd8/rvOYfr+zgET0+oBFkA3AWqmQZ5jjxgnEJ4XRTGHY/z2CCIJPVHPm4jJ47QAAwBHALcELQSvAAMABwALAAABITUhJSM1MxEjNTMELfwaA+b+bb29vb0CWrTax/wIxwAAAAMAYP95BCcEuQAZACQALwAAEzQAMzIWFzczBx4BHQEUACMiJicHIzcuATUzFBYXAS4BIyIGFSE0JicBHgEzMjY1YAEA4jpmMEp7aFpe/wDjNVsrSXtkZGW6LC8BVx9EJ5SUAlQnJ/6uGjkjlJYCKPUBMRcVl9JL5JAY9v7SERGVy0nqmWCbNwK3ERLirlaROP1SDQvfsAAAAgCa/mAELQYYABMAIQAAARQCIyImJwcRIxEzERc+ATMyEhEjNCYjIgYHER4BMzI2NQQt28lnljUDurkDNJZmzNu6kJNbeicoeV2SjwH18P7nQ0MB/e8HuP2oAUZJ/sf+9b/rUEb99kdMy6kAAgAeAAAFiQWwABMAFwAAATMVIxEjESERIxEjNTMRMxEhETMBITUhBPeSkrn9K7mSkrkC1bn8cgLV/SsEjY38AAKG/XoEAI0BI/7dASP9a+UAAAAAAQCbAAABVQQ6AAMAACEjETMBVbq6BDoAAQCaAAAEPwQ6AAwAAAEjESMRMxEzATMJASMBvmq6ulsBjd/+NwHt6QHP/jEEOv41Acv9+P3OAAABACYAAAQVBbAADQAAASUVBREhFSERBzU3ETMBXwEU/uwCtvyRgIC5A0dYn1j97ZUCbSifKAKkAAEAIwAAAgsGGAALAAABNxUHESMRBzU3ETMBcZqauZWVuQNnO6A7/TkCgDmgOQL4AAEApP5LBO0FsAAYAAABERQGIyImJzceATMyNj0BASMRIxEzATMRBO2omyAzHQ4OQhJCSP0tA7q6AtMDBbD596qyCQmRBQhnX1kEb/uRBbD7kQRvAAEAkf5LA/AETgAgAAABHwE+ATMyFhURFAYjIiYnNx4BMzI2NRE0JiMiBgcRIxEBNw0DNZ5psbynmyA1Hg4OQxRCR3N5XH0nugQ6lQFRWcnc/P6qsgkJmgUHX10C/pZ5RkH80wQ6AAAAAgBp/+sHOAXFABcAJQAAKQEOASMiABkBEAAzMhYXIRUhESEVIREhBTI2NxEuASMiBhURFBYHOPyCXoFF/f7QAS79R45RA3T9BAKg/WADBvteOHE6OnE6scHDCgsBRgEPATABDgFHDAmW/iKW/e8VCAkEjQgK49v+ztzkAAMAYf/rBwAETgAhAC8ANwAAEzQSMzIWFz4BMzISHQEhHgEzMjY3Fw4BIyImJw4BIyIANTMUFjMyNj0BNCYjIgYVASIGByE1NCZh/+OHyEBCwnHc3f0yBJ2QZ5U4Sjy6iIfMQEHFheT/ALmVlpSVlpWVlAQtapEUAg6AAij1ATFxaGdy/v3feabNOTN7O0ttZ2dtAS/2sd/fsRiv4eKuAZCphxp5nQAAAAEAoAAAAoIGLQAPAAAzETQ2MzIWFwcuASMiBhURoLCjIkMqFxUsGltcBMWwuAsKjAUGbWX7OwAAAf/k/ksCvAYtACMAAAEjERQGIyImJzceATMyNjURIzUzNTQ2MzIWFwcuASMiBh0BMwJgy6ebIDMcDg5AE0FHq6uvoyJDKhYUMhxaVcsDrfv6qrIJCZEFCGdfBAaNi6+5CwqRBQZoZYsAAAAAAgBx/+sFnQY2ABcAJQAAARAAISAAGQEQACEyFhc+ATUzFAYHHgEVJzQCIyICFREUEjMyEjUE/P67/vb+/v7GAToBAnrKUGFUp32ALS+52ry0z8+0vdkCV/70/qABYAEMAQEBCwFiUUwKhn6jwyBMrGACyQEG/vrJ/v3L/voBBcwAAAAAAgBg/+wEugSwABcAJQAAEzQAMzIWFz4BNTMUBgceAR0BFAAjIgA1MxQWMzI2PQE0JiMiBhVgAQDia6hBVziVZHUjI/8A4+T/ALqUlpSWl5WUlAIo9QExR0QIcnOUqRpCmFcY9v7SAS72sd7fsBiu4uKuAAABAJb/6wYmBg0AGQAAARU+ATUzFAYHERQEIyIkNREzERQWMzI2NREE115Kp5+w/tL79P7cur2hqccFsM0WkITG1xb9e/L4+PID2/wlq6qqqwPbAAABAI3/7AUQBJEAHAAAARQGBxEjLwEOASMiJjURMxEUFjMyNjcRMxU+ATUFEHqgpg0DMp5ttMK6aHFwiSS5YDUEkaWbCfy4ngFXXN30An39gbKDV1MDCooJYnYAAAH/tP5LAWUEOgAPAAABERQGIyImJzceATMyNjURAWWnmx8yHg4OQBNBSAQ6+22qsgkJkQUIaF4EkwAAAAIAYv/sA+kETwAVAB0AAAEyAB0BFAAnIgI9ASEuASMiBgcnPgETMjY3IRUUFgH/4gEI/vG/3dwCzQWdjmmUOEk7uqVpkBX9838ET/7X8y3t/tMBAQHgeaXOOjN8Okz8M6eIGXqcAAAAAQCpBOQDBgXpAAgAAAEVIycHIzU3MwMGmZaVmfR0BPwYlpYZ7AAAAAEAjATkAvcF6QAIAAABNzMVByMnNTMBwJWi/nP6ngVTlhLz8RQAAAABAIEEpQLYBbAADQAAARQGIyImNTMUFjMyNjUC2KCLjKCXRk9NSAWwepGRekRSU0MAAAAAAQCgBOoBbwWwAAMAAAEjNTMBb8/PBOrGAAAAAAIAiwRfAhwF4AALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBot0VlRzclVXc2M8Kys5OSsrPAUeVG5uVFZpaVYsOzotLTw8AAABADL+UAGSADcAEwAAIQ4BFRQWMzI2NxcOASMiJjU0NjcBflNYIysdLxgNIEo2V2mAhz1lPCQmEAx4ExliW1aYPAAAAAEAggTiAzQF8QATAAABFAYjIiYjIgYVJzQ2MzIWMzI2NQM0dFtJlzUsOmhyXDukNis8BdJff19BMBpehWBBMQACAGgE5ANIBe4AAwAHAAABMwEjAzMDIwJn4f7OqUfO9pYF7v72AQr+9gAAAAIAtv6HAen/qwALABcAABc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBrZZQ0BXV0BDWVcnHhsmJhseJ+lBU1NBQFBQQBslJBweJiYAAAAB/NoEuv4HBhMAAwAAASMDM/4HfbCxBLoBWQAAAf13BLv+pAYUAAMAAAEzAyP99625dAYU/qcA///8kwTi/0UF8QAHAKD8EQAAAAAAAf1eBNn+lAZzAA8AAAEnPgE1NCYjNzIWFRQGDwH9dAFQQVpMB5SbVkUBBNmXBR8nKSZpZFdISAlGAAAAAvwnBOT/BwXuAAMABwAAASMBMwEjAzP+Aqn+zuEB/5b2zgTkAQr+9gEKAAAB/UP+sf4S/3YAAwAAASM1M/4Sz8/+scUAAAAAAQDDBPgBygZ4AAMAAAEzAyMBAsitWgZ4/oAAAAMAoQTtA1wGiAADAAcACwAAASM1MwUjNTM3MwMjA1zAwP4GwcF/036FBO3Dw8PY/vgAAP//AKICcAFhA0EABgB2AAAAAQC1AAAEMAWwAAUAAAEhESMRIQQw/T65A3sFGvrmBbAAAAAAAgAgAAAFbQWwAAMABgAAATMBITchAQKJoQJD+rP7A1v+YQWw+lCVBDcAAAADAHP/6wT+BcUAAwARAB8AAAEhNSEFEAAhIAAZARAAISAAESc0AiMiAhURFBIzMhI1A8D9/AIEAT7+u/72/v7+xgE6AQIBCgFFudq8tM/PtL3ZApSW0/70/qABYAEMAQEBCwFi/p7+9QLJAQb++sn+/cv++gEFzAABADQAAAUCBbAABwAAASMBIwEzASMCnQT+Wb4CFqICFr4EqPtYBbD6UAAAAAMAegAABCAFsAADAAcACwAANyEVIRMhFSEDIRUhegOm/FpVAvP9DVMDlvxqlZUDPJYDCpYAAAAAAQC2AAAE/wWwAAcAACEjESERIxEhBP+5/Sm5BEkFGvrmBbAAAQBFAAAERAWwAAwAAAkBIRUhNQkBNSEVIQEC7v46Axz8AQHl/hsDzf0XAcUCzv3Ilo4CTQJHjpb9zQAAAwBOAAAFbAWwABUAHgAnAAABMzIAFRQAKwEVIzUjIgA1NAA7ATUzAyIGFRQWOwERMxEzMjY1NCYjAzoF9AE5/sbzBboH9P7JATf0B7rBtL++tQe6B7LAwLIE9v7T9PX+0bGxAS319AEvuv6x1Lq70gMb/OXUu7nTAAAAAAEAXQAABRgFsAAXAAABPgE1ETMRFAAHESMRJgA1ETMRFBYXETMDD52zuf7n8Lrp/vG4qpa6AgEX1LICEv3u+v7dF/6WAWoYASL6AhL97rHTGQOvAAEAcgAABM0FxQAjAAAlNhIRNTQmIyIGHQEQEhcVITUzJgI9ARAAMzIAERUUAgczFSEC4ZCfw7CxwaOT/hXwc4EBLv38ATGBcvb+FJsbARwBAXbu+Pjudv7//uMam5VjAS+sdAEhAV3+o/7fdKz+0WOVAAAAAgBk/+sEdwROABwAKgAAAREUFjMyNjcXDgEjIiYnDgEjIgI9ARASMzIWFzcBFBYzMjY3ES4BIyIGFQPuKiYJEgcXHTkkSlsUNppsydvazGiYNhH9zIeSXXkpKXlbk4gEOvzsV0EDA4gTDkxYUlIBG+8VAQoBOlFPjP27qstgWgHBWmPtwQAAAAIAoP5/BE0FxAAUACoAAAEyFhUUBgceARUUBiMiJicRIxE0JBMyNjU0JiMiBhURHgEzMjY1NCYrATUCXcXnYll7hPjOVps8ugEDtoF2f3Rxki2QXYmXiHiPBcTXsV2XLyzChNTnLjH+NAWxqur9lHpuYoyPb/zENzydhXWrlQAAAQAu/mAD3wQ6AAsAAAEzAREjEQEzARczNwMivf6Fuv6EvQEHFgMXBDr7//4nAeAD+v0AXV0AAAACAGD/7AQnBhwAIQAvAAATNDYzMhYXBy4BIyIGFRQWFxYSHQEUACMiAD0BNDY/AS4BExQWMzI2PQE0JiciBhXdxrRNm1ApPYxKWGNihdjQ/wDi5f8Au4wEZWk+lJaTlaODlZcE9oqcLSiAGCNIQDNdLEv+7s4X7f7dASPtF7D4Igsni/1iqNTUqBeH3BrXpgABAGP/7QPsBEwAKQAAASIGFRQWMzI2NTMUBCMiJjU0Njc1LgE1NDYzMhYVIzQmIyIGFRQWOwEVAhuBfIx9eJS5/va7zfdlZFdf5M26+bmPa3x7cHvNAeBVW01kcFCpqamaXn0gAyN3S5mgrZJKYmBGTVaQAAEAbf6BA8MFsAAgAAABFQEOARUUFh8BHgEVDgEHJz4BNTQmLwEuATU0EjcBITUDw/6igm5HWYGXbAJvQGIzL0dSWrKHhZIBGf2BBbB2/lKa4JFkYRMmLENtSqg0UzpRLCQyFhcvn6B6ATisAUCWAAABAJH+YQPwBE4AFAAAAR8BPgEzMhYVESMRNCYjIgYHESMRATcNAzWeabS5uXR4XH0nugQ6lQFRWcDl+7gERJd8SEL80gQ6AAADAHr/6wQUBcUADQAWAB8AAAEQAiMiAhkBEBIzMhIRBSE1NCYjIgYVASEVFBYzMjY1BBTx29r08trb8/0fAiiLiomKAij92IyJiokCLP7j/twBJQEcAVcBHAEm/tr+5GOLxMDAxP7ghcTCwMYAAAAAAQDD/+sCawQ5AA8AAAERFBYzMjY3Fw4BIyImNREBfDcyGS4WKS1UNHt4BDn81E85DQyAHhWLoQMiAAAAAQAl//AEOwXuACEAADMjAScuASMiBiMnPgEzMhYXAR4BMzoBNxcOASMiJicDIwfzzgGKYBg0LQocCQERRhplXh0BsxQtJA0SBwYOKhZiZi/vAyAEBes6LgKMBAhQWPuoNSsClAQIT38CZ3wAAQBl/ncDqQXDADEAAAEuASMiBhUUFjsBFSMiBhUUFh8BHgEVDgEHJz4BNTQmLwEuATU0Nj8BLgE1NCQzMhYXA3I/azeal5qrjY3CxJ59a5B0AW9AYjkoRVY35N2hlQF2gAED50SIMQUKERNrUmpylp2mgJUcFyJLbUmkNlNCQTYrKxINNMDUlsYuAymWYaSyFhEAAAEAT//rBM4EOgAXAAABIxEUFjMyNjcXDgEjIiY1ESERIxEjNSEEXX43MhkuFiktVDR7eP5luoIEDgOk/WlPOQ0MgB4Vi6ECjfxcA6SWAAAAAgCR/mAEHwROABEAHwAAARQCIyImJxEjETMnNBIzMhIRIzQmIyIGFREeATMyNjUEH9fIZpc4ugEB+8Tl6rmFkYOCKHldkYwB9fD+5z0//fgD4gL7AQ/+yf7zwuzlkf7SR0zLqQAAAAABAGX+igPhBE4AIQAAATIWFSM0JiMiBh0BFBYXHgEVDgEHJz4BNTQmJy4BPQE0EgI9vuavfneQj661m3oCbj9iOChDWfTw+gROzrpshuWhKo23MCtObkinNFNBQTYtKhQ0/tYq6AE0AAIAYP/sBHkEOgARACAAAAEhBx4BHQEUACMiAD0BNAAzIQEUFjMyNj0BNCYrAQ4BFQR5/usBX2X+/N/k/wABAOICN/yhlJaUlpeVAZSTA6MDSNCFF9j+2AEu9hjsASb91rHe37AYpdYB1aUAAAEAUf/rA9kEOgATAAABIREUFjMyNjcXDgEjIiY1ESE1IQPZ/o03MhkuFiktVDR7eP6kA4gDpv1nTzkNDIAeFYuhAo+UAAAAAAEAj//rA/YEOgAVAAABERQWMzISNS4BJzMeARUUAiMiJjURAUlqX42eA0A4wzM+8OvBywQ6/W+djAEDroH8jG79nv3+t9fpAo8AAAACAFf+IgVMBDoAGQAjAAAFJAI1NBI3Fw4BBxQWFxE0NjMyABUUAAURIxM+ATUuASMiBhUCbP7p/n+BZVdQBKS3iHPMARn+9/7iubm9sQScjCAiERkBO/CsAQNYg0vIcaLwGwLSaHr+z+nn/s0X/jMCZBnnmqHiKRwAAAAAAQBf/ikFQwQ6ABsAAAERPgE1LgEnMx4BFRQABREjESYAGQEzERQWFxEDHL+vA0I6wjVB/vv+3rn8/vi6rZ0EOfxNGvOlgPmJbfmc9v7CFv47AccZASgBIwHm/hjZ2hgDsgAAAAEAev/rBhkEOgApAAABDgEHFBYzMjY1ETMRFBYzMjY1LgEnMx4BFRACIyImJyMOASMiAhE0NjcBxENLA2h0Z3a7dWhzaQRLQsM9SrzPeaIoAymieNC7ST4EOon/g8LtobYBK/7VtqHsw4P/iW/9n/7+/r51dXV1AUIBAp//bQAAAgB0/+sEqQXFABkAJAAAJTI2NyYkPQE0NjMyFhUREAAjIgAZATcRFBYTFBYXETQmIyIGFQKFrL4B3v76uJeesP7X+/D+37q24puPSktGT4br2An2xD6wy8e0/gL+5f66AVQBDQKYAv1mzfkDhH2hCAFmcW5ucQAAAf/nAAAEWQW7ACMAAAE+ATMyFhcHLgEjIgYHAREjEQEuASMiBgcnPgEzMhYXExczNwLsNHhTIjIaFwYXDyQ5FP7XuP7WFTkjEBYFFxgxI1N3NrQXAxcE139lCg6SAwUkLf18/bwCRAKELSQFA5IOCmV//mhUVAAAAgBK/+sGGwQ6ABcALQAAASMeARUQAiMiJicjDgEjIgIRNDY3IzUhAS4BJyEOAQcUFjMyNj0BMxUUFjMyNgYbiR8irLt5oicEKKF4vKshIHUF0f7+Aygk/LwlKAJYYGd1u3RpXlgDo1W1av7+/r52dXV2AUIBAmq1VZf99V23YGK2XMLtobb8/Lah7AABACv/9QWwBbAAGwAAASERPgEzMgQVFAYjJzI2NS4BIyIGBxEjESE1IQSV/fNSmTn4AQz49QKojgKkpUKaSLr+XQRqBRr+LBce7N/Z4o+Zk5aWGhf9VQUalgAAAAEAh//sBM0FxgAfAAABBgAjIgAZARAAMzIEFyMuASMiAh0BIRUhFRQSMzI2NwTNGP7v8fz+0AEw/PUBDRi5GaOlrMcCO/3Fx6ymohkBztz++gFYARQBAQETAVr96Kap/vfMMJU+zv73pKkAAAIAMgAACEUFsAAWAB8AAAERITIWFRQGIyERIQMKASsBNTMyEhsBAREhMjY1NCYjBPQBaOz9/ez93v3/AwTO/zMonIMEBANzAWialpaaBbD9xfLJyfEFGv3r/mP+mJUBFwFZAqv9MP21qH98qAAAAAACALUAAAhPBbAAEgAbAAABIREzESEyFhUUBiMhESERIxEzAREhMjY1NCYjAW4C17kBaO38/ez93/0pubkDkAFonJWVnAM3Ann9lt/AwOcCov1eBbD9Af3ulXV0lAAAAAABAEAAAAXWBbAAFwAAASERPgEzMhYVESMRNCYjIgYHESMRITUhBKv961CeavT0uY6hXKRYuf5jBGsFGv5DFRXP8f45AceqgBYV/ToFGpYAAAEAtf6aBP4FsAALAAATMxEhETMRIREjESG1uQLXuf4/uf4xBbD65QUb+lD+mgFmAAIApgAABLEFsAAMABUAAAEhESEyFhUUBiMhESEBESEyNjU0JiMEIf0+AWju/P3t/d8De/0+AWiclJScBRr+PuHHyOgFsP0T/dKffnmYAAAAAgA0/poFyQWwAA4AFQAAJTMRIxEhESMRMzYSGwEhAQYCByERIQUIwbn73bl5T4MIIANh/ToJaFQC0v4Jlf4GAWX+mgH7WgFOAS0CRv269/6WdASFAAAAAAEAGwAABygFsAAVAAABIxEjESMBIwkBMwEzETMRMwEzCQEjBJ2buaL+XOgB7v472QGGprmfAYbZ/joB7ucCn/1hAp/9YQMAArD9hAJ8/YQCfP1R/P8AAAABAFH/6wRnBcUAKAAAATI2NTQmIyIGFSM0JDMyBBUUBgceARUUBCMiJDUzFBYzMjY1NCYrATUCXqSWoqWErrkBGNPyAQ58coGD/t3z1f7VubOUprenqaUDMYN3dJCObrja08topDArqoHM3tTVd52VfIqAlgAAAAABALYAAAT+BbAACwAAATMRIxEjASMRMxEzBEW5uQP9Lbm5AwWw+lAEb/uRBbD7kgABADAAAAT0BbAADwAAAREjESEDCgErATUzMhIbAQT0uv3xEQ677jMojHEMFgWw+lAFGv3r/l3+npUBEQFfAqsAAQBR/+sEyAWwABQAAAEXATMBDgEjIiYnNx4BMzI2PwEBMwJOSwFY1/38PIiaGUEKBgpAEktCKCr+DtAC+8MDePtAhIEGA5ACAkpSVgQ+AAADAFP/xAXjBewAFQAeACcAAAEzIAAREAAhIxUjNSMgABEQACEzNTMDIgYVFBY7AREzETMyNjU0JiMDeBsBAgFO/rL+/hu5Hf79/rQBTAEDHbnWxtHRxh25HcTS0sQFHv69/vv++f67xsYBQwEHAQUBRc7+nenMzucDavyW6c7L6AAAAAABALT+oQWSBbAACwAAEzMRIREzETMDIxEhtLkC17mVEqX72QWw+uUFG/rp/ggBXwABAJcAAATEBbAAEwAAAREjEQ4BIyImNREzERQWMzI2NxEExLlhsHv187qMomm8ZwWw+lACYR0azvIBxv46q38cHAK4AAEAtAAABtIFsAALAAABESERMxEhETMRIREBbgH6uQH4ufniBbD65QUb+uUFG/pQBbAAAAABALT+oQdrBbAADwAAAREhETMRIREzETMDIxEhEQFuAfq5Afi5mRKm+gEFsPrlBRv65QUb+uX+DAFfBbAAAAAAAgARAAAFuAWwAAwAFQAAEyERITIWFRQGIyERIQERITI2NTQmIxECVQFo7vz97f3f/mQCVQFonJSUnAWw/ajhx8joBRv9qP3Sn355mAAAAAADALUAAAY1BbAACgATABcAAAEhMhYVFAYjIREzGQEhMjY1NCYjASMRMwFuAWju/P3t/d+5AWiclJScA1+5uQNY4cfI6AWw/RP90p9+eZj9PQWwAAACAKYAAASxBbAACgATAAABITIWFRQGIyERMxkBITI2NTQmIwFfAWju/P3t/d+5AWiclJScA1jhx8joBbD9E/3Sn355mAAAAAABALH/7AT2BcYAHwAAEzQAMzIAGQEQACMiADUzFBYzMhI9ASE1ITU0AiMiBhWxAST2+wEw/tD7+/7hubWsq8f9uwJFx6ustQPf1QES/qb+7f7//uz+qAEB46CvAQjNOJU2zgEJsKEAAAIAw//rBt4FxQAVACMAAAEQACEgABE1IxEjETMRMzUQACEgABEnNAIjIgIVERQSMzISNQbe/rv+9v7+/sbXubnXAToBAgEKAUW52ry0z8+0vdkCV/70/qABYAEMKP2BBbD9ZEQBCwFi/p7+9QLJAQb++sn+/cv++gEFzAACAGMAAARnBbAADQAWAAAhIwEuATU0JDMhESMRIQEhIgYVFBYzIQEoxQFVkJABC/UBz7r+qwFV/uujpKSdARsCbzbDktTi+lACPALeloiHowAAAAACAGH/6wQoBhEAGwApAAABMhIdARQAIyIAPQEQADc+ATUzFAYHDgEHFz4BFyIGHQEUFjMyNj0BNCYCZ9Pu/wDj5P8AAQPmhnOYsLqNwx4DRrJFlJSVlZSWlwP7/vLbGOz+3QEj7IgBSgF3KxlASrFxHhipqgJGUZXAlBin09OnGJTAAAADAJ0AAAQpBDoADwAYACEAADMRITIWFRQGBxUeARUUBiMBESEyNjU0JiMlMz4BNTQmKwGdAabY51lUZW/Yyf7OATJ0c3N0/s77fXuChO0EOpKXTnUfAxiHWpqZAdz+t1RRUFSSAUxNUE4AAAABAJoAAANHBDoABQAAASERIxEhA0f+DboCrQOj/F0EOgAAAAACAC7+wgSTBDoADgAVAAA3PgE3EyERMxEjESERIxMBDgEHIREhg1VYDxACuYu5/Q25AQHJC1BCAfT+s5Vkzd8Blfxb/i0BPv7CAdMCELv9WAL8AAABABUAAAYEBDoAFQAAASMRIxEjASMJATMBMxEzETMBMwkBIwPqgbmC/tHqAYz+meABF3+5fgEZ4P6YAYzqAdj+KAHY/igCOwH//j8Bwf4/AcH+Af3FAAAAAQBY/+0DrARMACgAAAEUBgceARUUBiMiJjUzFBYzMjY1NCYrATUzMjY1NCYjIgYVIzQ2MzIWA5hXUl5f5MKz+7iIbnJ6ana5uXBdaXBig7jsscHRAxNLeCQhfV6aqaqoUHBjTltQmlBOSF5jSZGunwAAAAABAJwAAAQBBDoACwAAATMRIxEjASMRMxEzA0i5uQP+ELm5AwQ6+8YDF/zpBDr86gABAJwAAAQ/BDoADAAAASMRIxEzETMBMwkBIwHdh7q6eQFs4P5SAdLrAc/+MQQ6/jUBy/35/c0AAAEAKAAABAMEOgAPAAABESMRIQMKASsBPwEyNhsBBAO6/pEND5fJNgQoaUoNFAQ6+8YDo/7H/rL+5KIBwQEGAdAAAAAAAQCdAAAFUgQ6AA4AACUBMxEjESMBIwEjESMRMwL7AXDnuQP+pYD+ngO58PIDSPvGAwz89AMd/OMEOgAAAQCcAAAEAAQ6AAsAACEjESERIxEzESERMwQAuf4PuroB8bkB0P4wBDr+KgHWAAAAAQCcAAAEAQQ6AAcAACEjESERIxEhBAG5/g66A2UDo/xdBDoAAQAoAAADsAQ6AAcAAAEhESMRITUhA7D+lbn+nAOIA6b8WgOmlAAAAAMAZP5gBWkGGAAfAC0AOwAAExASMzIWFxEzET4BMzISERUUAiMiJicRIxEOASMiAjUlNCYjIgYHER4BMzI2NSEUFjMyNjcRLgEjIgYVZMjBK0khuSJQMsHJyb8yUSO5IUosvskETICHIjYWFjcjh378bXWHHzMXFzIeiHYCCgEMATgPDgHn/hMREv7I/vQV8f7nEQ/+VQGoDg8BGfEVwe0LCfztCQjKq63ICQkDFQgJ6sQAAAEAnP6/BIIEOgALAAATMxEhETMRMwMjESGcugHyuYESpvzSBDr8WwOl/Fv+KgFBAAEAZwAAA70EOwATAAAhIxEOASMiJjURMxEUFjMyNjcRMwO9uj53RcrYuXJ3RXk8ugGKERDI0AE6/saJeBARAhkAAAAAAQCcAAAF4AQ6AAsAAAERIREzESERMxEhEQFWAYy5AYu6+rwEOvxbA6X8WwOl+8YEOgAAAAEAkf6/Bm0EOgAPAAABESERMxEhETMRMwMjESERAUsBjLkBi7qYEqX62wQ6/FsDpfxbA6X8W/4qAUEEOgAAAAACAB4AAAS/BDoADAAVAAATIREhMhYVFAYjIREhAREhMjY1NCYjHgH6ARPD0dLC/jT+vwH6ARNyaGlxBDr+ir+foMYDpf6K/mZyWFZ6AAAAAAMAnQAABX8EOgAKAA4AFwAAASEyFhUUBiMhETMBIxEzAREhMjY1NCYjAVYBE8PR0sL+NLkEKbq6+9cBE3JoaXECxL+foMYEOvvGBDr99f5mclhWegAAAAACAJ0AAAP9BDoACgATAAABITIWFRQGIyERMxkBITI2NTQmIwFWARPD0dLC/jS5ARNyaGlxAsS/n6DGBDr99f5mclhWegAAAAABAGT/6wPgBE4AHQAAASIGFSM0NjMyEh0BFAIjIiY1MxQWMzI2NyE1IS4BAghikrD7qd76+t6567CKaoWNC/5qAZUPjAO4eVyU1/7M6Crp/szcq2mJx5WVjrkAAAIAnf/sBiMETgATACEAAAEhNhIzMgAdARQAIyICJyERIxEzARQWMzI2PQE0JiMiBhUBVwEIE/zQ5AEB/wDj1v0P/vm6ugG/lJaUlpeVlJQCbtkBB/7P9Rj2/tIBDOD+KAQ6/dax3t+wGK7i4q4AAAACAC8AAAPHBDoADQAWAAABESMRIQEjAS4BNTQ2MwMUFjMhESEiBgPHuv7q/wDIARFqbtfE4WNnASH+9nJvBDr7xgGm/loBwSWdbZS2/rRMZwFrawAB/+f+SwP7BhgAKgAAASERFz4BMzIWHQEzERQGIyImJzceATMyNjURNCYjIgYHESMRIzUzNTMVIQJj/ugDN6JnsbsBp5siNRwPDUQTQUd0d1eILLqqqroBGAS6/u0BUFjM3d/94aqyCAmSBQloXwMAjYBSSPzmBLqVyckAAQBs/+wD/QROAB0AACUyNjczDgEjIgI9ATQSMzIWFyMuASMiBgchFSEeAQJOZ5cBsAH/r+709O6/7wGwAY5wk4oKAZD+cQqIgXhclNUBL+0q7AEw3KxoiryVlZe6AAAAAgAnAAAGhgQ6ABYAHwAAAREhMhYVFAYjIREhERACKwE/ATI2NREBESEyNjU0JiMD3wETw9HSwv4z/rCqzjYDKW1cAsMBE3BqaXEEOv5jtZaXuwOj/sf+vP7amAHW+wHQ/c7+i3FQTGgAAAAAAgCcAAAGpwQ6ABIAGwAAASERMxEhMhYVFAYjIREhESMRMwERITI2NTQmIwFWAfG5ARPD0dLC/jT+D7q6AqoBE3BqaXECoAGa/mK0lpe7Agz99AQ6/c7+i3FQTGgAAAAAAf/9AAAD+gYYABwAAAEhERc+ATMyFhURIxE0JiMiBgcRIxEjNTM1MxUhAnn+0gM3omexu7l0d1eILLqUlLoBLgS//ugBUFjM3f1bAqeNgFJI/OYEv5XExAAAAAABAJz+nAQBBDoACwAAAREhETMRIREjESERAVYB8rn+rbn+pwQ6/FsDpfvG/pwBZAQ6AAAAAQCf/+sGaQWwACAAAAERFAYjIiYnDgEjIiY1ETMRFBYzMjY1ETMRFBYzMjY1EQZp4b1xpzAzrnW317pyYnGHv31qaXwFsPvZztBYWlpY0M4EJ/vZhIWFhAQn+9mEhYWEBCcAAAEAgf/rBa0EOgAgAAABERQGIyImJw4BIyImNREzERQWMzI2NREzERQWMzI2NREFrc2rYpEsMJhlpsK5XVJfcrpnWldoBDr9Kbu9SUxMSby8Atf9KXJxcnEC1/0pcnFycQLXAAAC/9wAAAP8BhgAEgAbAAABIREhMhYVFAYjIREjNTMRMxEhAREhMjY1NCYjApb+vwESxNHTwv40v7+6AUH+vwEScmhpcQQ6/q7Jp6jQBDqVAUn+t/2E/kJ8YF2FAAEAxP/sBpEFxgAnAAABMzUQADMyBBcjLgEjIgIdASEVIRUUEjMyNjczBgAjIgARNSMRIxEzAX3OATD89QENGLkZo6WsxwIa/ebHrKaiGbkY/u/x/P7Qzrm5A0AZARMBWv3opqn+98wbllLO/vekqdz++gFYARRS/VYFsAABAJn/7AWnBE4AIwAAATM2EjMyFhcjLgEjIgYHIRUhHgEzMjY3Mw4BIyICJyMRIxEzAVPEDvTfv+8BsAGOcJOKCgGx/lAKiJRnlwGwAf+v4PIPxLq6AmfYAQ/crGiKvJWVl7p4XJTVAQza/i4EOgAAAgAqAAAE3gWwAAsADwAAASMRIxEjAyMBMwEjASEDIwOJrrihmr4CD6ACBb39mAGaygMBuv5GAbr+RgWw+lACWAJNAAACAA8AAAQlBDoACwARAAABIxEjESMDIwEzASMBIQMnIwcC7XW5e3i9AbqfAb2+/hkBMIEWBBYBK/7VASv+1QQ6+8YBwQE9U1MAAAAAAgDWAAAG7wWwABMAFwAAASEBMwEjAyMRIxEjAyMTIREjETMBIQMjAY8BhQE2oAIFvZiuuKGavqD+tLm5AjsBmsoDAlkDV/pQAbr+RgG6/kYBuv5GBbD8qAJNAAACALwAAAXkBDoAEwAZAAABIQEzASMDIxEjESMDIxMjESMRMwEhAycjBwF2AQ8BA58Bvb56dbl7eL160rq6AckBMIEWBBYBwQJ5+8YBK/7VASv+1QEr/tUEOv2HAT1TUwACAJYAAAY7BbAAIQAlAAABNzUhATMyFhURIxE0JisBBxEjEScjIgYVESMRNDY7AQEzATMBIQHzAwPQ/nUf8fC5ip57F7kRh5+Iuu/yK/521QF6EQEi/asFpQEK/XvK7f6MAXSmeyf9kgJ6G3um/owBdO3KAoX9ewHvAAAAAgCWAAAFSwQ6ABsAHwAAAR4BHQEjNTQmKwEHESMRJyMiBh0BIzU0NjcBIQEzEyEDtcnNuniLMwu5Bj6Md7rR0f7fA7/+HgW4/ooCWgnM4KWlpnsT/k0BvQl7pqWl5coGAeD+IQFJAAACAMMAAAhuBbAAKQAtAAAhETQ2NyERIxEzESE7AQEzFzc1IQEzMhYVESMRNCYrAQcRIxEnIyIGFREBMwEhAsknKf5jubkDFxcr/nbVBgMD0P51H/HwuYqeexe5EYefiAIXEQEi/asBdF+NNv1qBbD9ewKFCwEK/XvK7f6MAXSmeyf9kgJ6G3um/owDKwHvAAACAJsAAAc7BDoAIgAmAAAhNTQ2NyERIxEzESEBIQEeAR0BIzU0JisBBxEjEScjIgYdAQETIRMChiQm/oW6ugLS/uADv/7fyc26eIszC7kGPox3Aam5/om5pV6NNv46BDr+IgHe/iAJzOClpaZ7E/5NAb0Je6alAlsBSf63AAAAAAIAUP5HA6oHcAAtADYAAAEyNjU0JiMhNSEyBBUUBgcVHgEVFAQrASIGFRQWFwcuASc0NjsBMjY1NCYrATUBNzMVByMnNTMBoqOVkpL+zgEy2AEGf3OChv742DVQRV5DSm6YAaqjLYqdqKeNAQqVov5z+p4DNn92a4WV0LlpoisDKayDyt86N0dVHnsvoG+BfJV7ioWVA6SWEvPxFAAAAAACAEz+RwN3BhsALQA2AAABMjY1NCYjITUhMhYVFAYHFR4BFRQGKwEiBhUUFhcHLgEnNDY7ATI2NTQmKwE1EzczFQcjJzUzAZqNgH18/tMBLcTvZFpobPHFMFBFXkNKbpgBqqIpdoaRko3BlaL+c/qeAmhUTkRWlqSQS3UjAyB5V5mqOjdHVR57L6BvgXxcTlZRlQMdlhLz8RQAAAADAHP/6wT+BcUADQAWAB8AAAEQACEgABkBEAAhIAARBSE1NAIjIgIVBSEVFBIzMhI1BP7+u/72/v7+xgE6AQIBCgFF/C4DGdq8tM8DGfznz7S92QJX/vT+oAFgAQwBAQELAWL+nv71PkDJAQb++snWLcv++gEFzAADAGD/7AQnBE4ADQAUABsAABM0ADMyAB0BFAAjIgA1ATI2NyEeARMiBgchLgFgAQDi5AEB/wDj5P8AAeSHkw39sQyTh4SSDwJND5QCKPUBMf7P9Rj2/tIBLvb+cbybm7wDN7aVlbYAAAEAFwAABNoFxAARAAABFzM3AT4BMxcHIyIGBwEjATMCPyIDIgEFMYFuLwEMNUEd/nig/gXJAXF+fgM0noEBoz5V+3MFsAAAAAEALgAABAsETQAVAAABFzM3Ez4BMzIWFwcuASMiBgcBIwEzAdsWAxedKX5SIjAYFQUYDSE7D/7Xjf6DvQE6XV0CI35yCg6SAwUxLPyyBDoABABz/3ME/gY1AAMABwAVACMAAAEjETMRIxEzARAAISAAGQEQACEgABEnNAIjIgIVERQSMzISNQMWubm5uQHo/rv+9v7+/sYBOgECAQoBRbnavLTPz7S92QS1AYD5PgGJAVv+9P6gAWABDAEBAQsBYv6e/vUCyQEG/vrJ/v3L/voBBcwABABg/4gEJwS2AAMABwAVACMAAAEjETMRIxEzATQAMzIAHQEUACMiADUzFBYzMjY9ATQmIyIGFQKhubm5uf2/AQDi5AEB/wDj5P8AupSWlJaXlZSUA0gBbvrSAW4BMvUBMf7P9Rj2/tIBLvax3t+wGK7i4q4AAAAAAwCf/+sGZAdUACwAPgBEAAABMhYVERQGIyImJw4BIyImNRE0NjMVIgYVERQWMzI2NREzERQWMzI2NRE0JiMTFSMiJCMiBh0BIzU0NjMyBDMBJzc1MxUE1rbY2LZ1rTM0rXO319e3YnJyYnGHuoVyYXR0YWgshf7dLjY8f3l0SwEec/5BTDq0Ba/k3v3A3+NWWVlW498CQN7klZiV/cCWl4WEAbT+TISFl5YCQJWYAbt9fzg3EiRubH/+UkB0jHwAAwB+/+sFqgXxACwAPgBEAAABMhYVERQGIyImJw4BIyImNRE0NjMVIgYVERQWMzI2PQEzFRQWMzI2NRE0JiMTFSMiJCMiBh0BIzU0NjMyBDMFByc3JzMEQqXDw6VnmS8vmWWmwsKmUl1dUl9yuXJgUF5eUKoshf7dLTc7gHp0SgEedP7ioU07AbQERNDM/t/Nz0pMTErPzQEhzNCVhIP+34SDcnHr63Fyg4QBIYOEAcJ9fzc3EiNubYDqxEB0jAAAAgCf/+sGaQcDAAcAKAAAATUhFyEVIzUFERQGIyImNREjERQGIyImNREjERQWMzI2Nx4BMzI2NREB3QMrAf61qAKafGlqfb+HcWJyute3da4zMKdxveEGmWpqfX3p+9mEhYWEBCf72YSFhYQEJ/vZztBYWlpY0M4EJwAAAAIAgf/rBa0FsQAHACgAAAE1IRchFSM1AREUBiMiJjURIxEUBiMiJjURIxEUFjMyNjceATMyNjURAYgDKwP+s6gCM2hXWme6cl9SXbnCpmWYMCyRYqvNBUdqaoCA/vP9KXFycXIC1/0pcXJxcgLX/Sm8vElMTEm9uwLXAAABAHj+gwS+BcUAGAAAASMRJgA1ERAAMzIAFSM0JiMiAhURFBI7AQMRud3+/QEw/PoBILq1q6zHx6xt/oMBbRwBTv0BAQETAVr+/eKfsP73zP79zv73AAAAAQBk/oMD4AROABgAAAEjESYCPQE0EjMyFhUjNCYjIgYdARQWOwECorm7yvrfuOuvjGiRj46SZf6DAW8fASbRKugBNN2raIrloSqk5AAAAAABAHQAAASQBT4AEwAAAQUHJQMjEyU3BRMlNwUTMwMFByUCWAEhRP7dtqjh/t9EASXN/t5GASO8pecBJUj+4AG9rHmq/r4Bjqt5qwFvq3urAU3+Z6t4qgAAAfxnBKf/JwX7AAcAAAEVJzchJxcV/Q2mAQIbAaUFJX4B52wB1QAAAAH8cQUX/2QGFQARAAABMiQzMhYdASM1NCYjIgQrATX8m3MBHkp0eoA7Ny3+3YUsBZWAbW4jEjc3f30AAAH9ZgUY/lQGWAAFAAABNTMVFwf9ZrM7TQXcfIx0QAAAAf2kBRj+kwZYAAUAAAEnNyczFf3xTTsBtQUYQHSMfAAI+o3+xAIoBa8ADQAbACkANwBFAFMAYQBvAAABNDYzMhYVIzQmIyIGFQE0NjMyFhUjNCYjIgYVEzQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFQE0NjMyFhUjNCYjIgYVATQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFRM0NjMyFhUjNCYjIgYV/XpwYmNwcC80Mi8B3m9iYnJxLzQzLUlwYmJxcC80My7+y29iYnFwLzQzLv1QcGJjcHAvNDIv/U1xYmNwcC80Mi/+3nFhY3BwLjUyLzVxYWNxcS41Mi4E81VnZ1UsOTks/utVZ2dVLDk5LP4JVWdnVSw5OSz9+VVnZ1UsOTks/uRWZmZWLTg4LQUaVWdnVSw5OSz+CVVnZ1UsOTks/flVZ2dVLDk5LAAAAAj6pP5jAeMFxgAEAAkADgATABkAHgAjACgAAAUXAyMTAycTMwMBNwUVJQUHJTUFATclFwYFAQcFJyUDJwM3EwEXEwcD/qcLemBGOgx6YEYCHQ0BTf6m+3UN/rMBWgOcAgFARCX/APzzAv7ARQEmKxGUQcYDXxGVQsQ8Dv6tAWEEog4BUv6g/hEMfGJHOwx8YkcBrhCZRBex/I4RmUXIAuQCAUZF/tX84wL+u0cBKwAAAv/cAAAD/AZwABIAGwAAASERITIWFRQGIyERIzUzNTMVIQERITI2NTQmIwKW/r8BEsTR08L+NL+/ugFB/r8BEnJoaXEFGv3Oyaeo0AUalsDA/KP+QnxgXYUAAAADALUAAATYBbAAAwAOABcAAAEHATcBESMRITIWFRQGIyUhMjY1NCYjIQTYbv6Rbf4GuQIk7f397f6VAWuclZWc/pUCPmQBk2X+eP22BbDryMrplZ99fqEAAwCR/mAEJAROAAMAFgAkAAAlBwE3JRQCIyImJwcRIxEzFz4BMzISESM0JiMiBgcRHgEzMjY1BCNu/rZuAUvbyWeWNQO6nxI2mmvM27qQk1t7Jih5XZKPDWUBdWVz8P7nQ0MB/e8F2opOUP7H/vW/61BG/fZHTMupAAAAAAEApgAABCMHAQAJAAABIxUhESMRIREzBCMC/T65AsS5BRsB+uYFsAFRAAAAAQCRAAADQwV4AAkAAAEjFSERIxEhETMDQwX+DboB+LoDpAH8XQQ6AT4AAAABALX+3gR8BbAAFQAAASERMyAAERACIycyNjUuASsBESMRIQQw/T65AR8BNu/qApyFAcvPubkDewUa/ib+1f7q/vf+6JHNw9HR/V8FsAAAAAEAkf7lA74EOgAVAAABIREzMgQVBgIHJz4BNS4BKwERIxEhAz7+DXTnARgBvcIxh3EBsJV0ugKtA6P+4vrhjP7rJJAinnWZo/4aBDoAAAAAAQCmAAAE+AWwABQAAAkCIwEjFSM1IxEjETMRMxEzETMBBMv+bgG/5/6cUJVpublplU8BRwWw/U79AgKV9/f9awWw/XoBAv7+AoYAAAEAmgAABH8EOgAUAAAJAiMBIxUjNSMRIxEzETM1MxUzAQRa/q0BeOv+6jGUZbq6ZZQqAQMEOv3+/cgBz8TE/jEEOv411tYBywAAAAABAEUAAAaJBbAADgAAASMRIxEhNSERMwEzCQEjA4ywuf4iApefAhHU/cMCZuMClP1sBRuV/XkCh/0+/RIAAAAAAQA+AAAFfAQ6AA4AAAEjESMRITUhETMBMwkBIwMah7r+ZQJVeQFs4P5SAdLrAc/+MQOklv41Acv9+f3NAAAAAAEAtQAAB4QFsAANAAABIREhFSERIxEhESMRMwFuAtUDQf14uf0rubkDGwKVlfrlAob9egWwAAAAAQCRAAAFagQ6AA0AAAEhESEVIREjESERIxEzAUsB8QIu/ou5/g+6ugJkAdaW/FwB0P4wBDoAAAABALT+3wfNBbAAFwAAATMgABEQAiMnMjY1LgErAREjESERIxEhBP17AR8BNu/qApyFAcvPe7n9KbkESQNB/tX+6v73/uiRzcPR0f1eBRr65gWwAAABAJH+5QawBDoAFwAAATMyBBUGAgcnPgE1LgErAREjESERIxEhA/ao8AEiAb3DMIdxAbqeqLn+DroDZQKF+uGM/uskkCKddpmj/hoDo/xdBDoAAAACAHP/4gWaBcUAKQA3AAAFIiYnDgEjIAARNRASMxciAh0BFBIzMjY3JgI9ATQSMzISHQEUAgceATMBFBYXPgE9ATQmIyIGFQWab8FZR5pX/un+sfjOAX6Q5sckQSB+g9+5ut9wajNxQv18eHllaXZqaHceJSUhIAGIATKqARMBY5z++dGs8v7TBwhjARSs5vABM/7T9vqi/vdhDg0COZ/sSknmlP2x1durAAAAAgBt/+sEnARPACkAOAAABSImJw4BIyIAETU0EjMVIgYdARQWMzI2Ny4BPQE0NjMyFh0BFAYHHgEzAzU0JiMiBh0BFBYXPgE1BJxbnEc7gUnf/vPAoE1Zo48YLRdhYqiUk6tCQChYMulGP0FCT080NgwcHSEhAUoBAzvRAQqbsY09wfEFB1DXg2fB6/vGaXPBTgsKAZdsgKOSfWtrpzo5nWEAAAABADT+oQaOBbAADwAAASE1IRUhESERMxEzAyMRIQGw/oQDuf58Ate5lRKl+9kFG5WV+3oFG/rp/ggBXwABAB/+vwUXBDsADwAAASE1IRUjESERMxEzAyMRIQEx/u4CxPgB8rmBEqb80gOmlZX87wOl/Fv+KgFBAAACAJcAAATEBbAAAwAXAAABIxEzAREjEQ4BIyImNREzERQWMzI2NxEDF5WVAa25YbB79fO6jKJpvGcBQAK8AbT6UAJhHRrO8gHG/jqrfxwcArgAAAACAIMAAAPZBDsAAwAXAAAlIxEzASMRDgEjIiY1ETMRFBYzMjY3ETMChpWVAVO6PndFyti5cndFeTy65gI1/OUBihEQyNABOv7GiXgQEQIZAAEAjgAABLsFsAATAAAzETMRPgEzMhYVESMRNCYjIgYHEY65Ya989PS6jaFqvGYFsP2eHBzP8f46AcaqgB0c/UkAAAAAAgBH/+kFwAXDAB4AJwAABSAAETUuATUzFBYXNRAAMyAAERUhFRQSMzI2NxcOAQEhNTQmIyICFQPt/tj+waCflVJYATTpAQwBEfyAz95wnUowOLz9wALHpr6puhcBUgEfaxS/oWB5FAcBFAFc/qX+xG1l2f79LyiGJz8DWSHU9v71zwAAAv/j/+wEWQROABwAJAAABSIAPQEuATUzFBYXPgEzMhIdASEeATMyNjcXDgEDIgYHITU0JgK+5P74eHeUMDQg/qfc3f0zBJ2RZZM7STu5pmmRFAIOgBQBJ/QMHKqJSWEZwu3+/uB5psw4M3s6SwPMqYcaeZ0AAAAAAQCm/tkEywWwABYAAAEWABEQAiMnMjY1LgEjIREjETMRMwEzArr9AQ3u6wKdhQLK0P7wubmHAg3YAzgV/tn+/v73/uiRzcPQ0f1lBbD9iwJ1AAAAAQCa/v0EGQQ6ABYAAAEeARUGAgcnPgE1LgErAREjETMRMwEzAn291gG8wzCHcQG2oqu6ulsBiuACZB3av4f++SOQIZJulov+MQQ6/jUBywABALX+SwT9BbAAFwAAAREhETMRFAYjIiYnNx4BMzI2NREhESMRAW4C1bqomx80HQ4OQhJCR/0ruQWw/WsClfn3qrIJCZEFCGdfAt/9egWwAAEAkf5LA/UEOgAXAAABESERMxEUBiMiJic3HgEzMjY1ESERIxEBSwHxuaibHzQdDw1CEkJI/g+6BDr+KgHW+22qsgkJkQUIZ18CKf4wBDoAAgBf/+sFEAXFABYAHgAAASAAERUQACMgABE1ITU0AiMiBgcnPgETMhI3IRUUFgKCAToBVP60+f7N/scD+OTxdqdOLzrG47XPB/zDyQXF/pb+zqP+1/6OAVoBPG856gEcMCeGJkH6uwES2yPV9QAAAAEAaf/rBCgFsAAaAAABITUhFwEeARUUBCMiJDUzFBYzMjY1NCYrATUDIP10A2UB/mTg6v703sP+7rqbgJGgoaaOBRqWdf4SDd/My9/U1XedlXyfjpUAAAABAGn+dQQoBDoAGgAAASE1IRcBHgEVFAQjIiQ1MxQWMzI2NTQmKwE1Awz9iANlAf5x2eT+9N7D/u66m4CRoKSmjQOjl3X+EBHeyMng1dN1nZV6n46VAAD//wA6/ksEdAWwACYArEQAACYB06tAAAcBmgDwAAAAAP//ADv+SwOWBDoAJgDnTwAAJgHTrI4ABwGaAOEAAAAAAAIAWQAABGMFsAAKABMAAAERMxEhIiY1NDYzAREhIgYVFBYzA6q5/d/t/PvuAWj+mJyUlJwDbAJE+lDxycjq/SkCQqB7f6gAAAIAWQAABl4FsAAYACEAACEiJjU0NjMhETMRNz4BNzYmJzMeAQcOASMlESEiBhUUFjMCQu38++4BaLlab3MEAR8esyEjAgTrsP7t/piclJSc8cnI6gJE+uQBAYyCT6VRZpVKz9WVAkKge3+oAAIAZP/pBm4GGAAjADQAABMQEjMyFhc3ETMRBhYzPgE3NiYnNx4BBwIAIwYmJw4BIyICNQEuASMiBh0BFBYzMjY3LgE1ZNrMXo0zA7kCXFGMlAQBHx+zIiMCBP71znmfKDagccnbAscodlWTiIeSWncpAwICCgEKATpBPgECSPtBZHUB0b9jxmkBfLle/vH+6QJWYVtaARvvAThAR+rAFarGTEcVHBAAAAEANv/oBdIFsAAsAAABNCYrATUzMjY1NCYjITUhMhYVFAYHHgEdAQYWMz4BNzYmJzMeAQcKASMGJicCw4h5v4yslZKh/pkBZ/P5dXR4ZAFSSHqDBAEfH7QjIgIE+b6gqggBc3qQln2IfYWWzsx0pTEorINFUGAB1btjx2mIr1z+8/7nA5quAAABADH/4wTpBDoALgAAJQYWMz4BNzYmJzMeAQcOASMGJic1NCYrASczMjY1NCYjISchMhYVFAYHFR4BHQEC5wEpNXB1BAEgH7QjIwIF7LKLhgZrZ9MCu3tydnv++gYBDNDcXVthVdUtLgKZjk2iUGiPSNviA2+ETEpPlFVPU2CUpptTcSIDHHdaTgAAAAIAU/7EA9AFsAAhACsAABM1MzI2NTQmIyE1ITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzsKKvlpGg/u0BE/P3dHN7aB8lvikWjHwCRVxSaTAuuQJ6ln+FgIeVz85zpDEorISIRWojGSSCR4R6j/3EZM9HSEmRVZcAAgB5/rUDuQQ6ACIALAAAEzUzMjY1NCYjITUhMhYVFAYHFR4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzwtR+cnJ+/uMBHc/bXl1kVhoivyQSa2gCBlxSaTAuuQG6lFRRVV6UpZtUcyIDHYFjYS9UFhMXYjRfU1v+dWTPR0hJkVWXAAAAAQBF/+gHbwWwACEAAAERBhYzPgE3NiYnNx4BBwIAIwYmJxEhERACKwE1MzISGQEE5QFcUYyTBAEfH7MiIwIE/vXNqrMI/hnQ+zUpmoQFsPupZHUB0b9jxmkBfLle/vH+6QOtxAPB/eb+av6WlQEbAVACsAABAD//6AY5BDoAIQAAAREGFjM+ATc2JiczHgEHDgEjBiYnESEREAIrAT8BMjY1EQPqAVpQcXYEAR8fsyIjAgTstKiyCP69qsw5AypuWwQ6/R9kdQG5qV68Y3qrWPn/A63EAkr+y/69/tWiAdL5AcwAAQCt/+gHcQWwAB0AAAERBhYzPgE3NiYnNx4BBwIAIwYmJxEhESMRMxEhEQTmAVtRjJQEAR8fsyIkAgX+9c6pswj9Obm5AscFsPupZXQB0b9ixWsBf7Ze/vD+6gOtxAEt/XoFsP1rApUAAAAAAQCQ/+gGTAQ6AB0AAAEhESMRMxEhETMRBhYzPgE3NiYnMx4BBw4BIwYmJwND/ga5uQH6uQFaUHF3BAEfH7IjIwIE7LWosggBz/4xBDr+KQHX/R9kdQG5qV28ZH2pV/n/A63EAAEAef/rBJ0FxQAhAAAFIAAZARAAITIWFwcuASMiAhURFBIzPgE3NiYnMx4BBwYEArn++/7FATsBBXKsRTtEjla20dC3j5YEARoZtCYTAQT+8BUBWAESAQYBEQFZLCuDIiL+98n++M3++AGajlWxY7VlT9ziAAAAAAEAZf/rA8YETgAhAAAlPgE3NCYnMx4BFQ4BIyIAPQE0EjMyFhcHLgEjIgYdARQWAlFnUgMLCbINDgTIqen+/fneX4owLDB3RpCOl4ABVVc5eTpGcDaioAE16CrnATUiII0bHuefKqPlAAAAAAEAJP/oBUUFsAAZAAABITUhFSERBhYzPgE3NiYnNx4BBwIAIwYmJwIC/iIEgP4YAlxRjJQEASAfsyMiAgT+9c2ptAgFGpaW/D9kdQHRv2LGagF/t13+8f7pA63EAAAAAAEARv/oBLgEOgAZAAABITUhFSERBhYzPgE3NiYnMx4BBw4BIwYmJwGs/poDi/6VAVtRcXYEAR8esiMjAgTttKm0CAOmlJT9s2V0AZuPTqVTapJK3eMDrcQAAAAAAQCb/+sFAAXFACkAAAEiBhUUFjMyNjUzFAQjICQ1NDY3NS4BNTQkITIEFSM0JiMiBhUUFjsBFQLMv7nLuqXJuf6+5f76/siKiXmEASMBBeQBL7nGlLq1qbm3ApuAinyVnXfV1N7MgaoqAy6kaMrU2rhujpB0d4OWAAAA//8AswKMBPADIQBGAYbZAFMzQAD//wC7AowF8wMhAEYBhq8AZmZAAP//AA3+bgOhAAAAJwBBAAn/AwAGAEEJAAABAGAEAgF4BisACQAAEzQ2NxcOAR0BI2BcUmoyLbkEsWTPR0dKkFayAAAAAAEAMAPnAUcGGAAJAAABFAYHJz4BPQEzAUdcUmkwLrkFYWXPRkhIkVa6AAAAAQAk/tYBOwD6AAkAACUUBgcnPgE9ATMBO1xSaTAuuU9kz0ZHSZFVrgAAAP//AFAD5wFnBhgARwFmAZcAAMABQAAAAP//AGAEAgKyBisAJgFlAAAABwFlAToAAP//ADwD5wKGBhgAJgFmDAAABwFmAT8AAAACACT+1gJkAPoACQATAAAlFAYHJz4BPQEzBRQGByc+AT0BMwE7XFJpMC65ASldUmkwLrpPZM9GR0mRVa6rZM9GR0mRVa4AAAABAEYAAAQkBbAACwAAASERIxEhNSERMxEhBCT+bLr+cAGQugGUA6P8XQOjlwF2/ooAAAAAAQBX/mAENAWwABMAACkBESMRITUhESE1IREzESEVIREhBDT+arr+cwGN/nMBjboBlv5qAZb+YAGglQMOlwF2/oqX/PIAAAAAAQCKAhgCIgPeAA0AABM0NjMyFh0BFAYjIiY1im1eYG1tX19tAxhZbW1ZPVlqaln//wCmAAADFwDFACYAEAQAAAcAEAG5AAD//wCmAAAEtgDFACYAEAQAACcAEAG5AAAABwAQA1gAAAAGAET/6wdXBcUAGQAnADUAQwBRAFUAAAE0NjMyFhc+ATMyFh0BFAYjIiYnDgEjIiY1ATQ2MzIWHQEUBiMiJjUBFBYzMjY9ATQmIyIGFQUUFjMyNj0BNCYjIgYVARQWMzI2PQE0JiMiBhUTJwEXAzegikx0JiVzTYqhoIlOdCUlc0yLof0NoIqKoZ+Ki6EDflJPTlFST05RAcpST01SUk9OUftDUk9OUVNOTlH8aALHaAFlgatAOTlAq4FOgqo+Ojo+qoIDgYKrq4JNgqmqgfzMTWhnTk5NaGhNTk1oZ05OTWhoTQLmTWdnTU1NaWlN+9dBBHJBAAAAAAEAbACaAiADtAAGAAAJASMBNQEzAR4BAo3+2QEnjQIn/nMBhBMBgwABAFkAmQIOA7QABgAAEwEVASMJAecBJ/7ZjgEC/v4DtP58E/58AY0BjgAAAAEAOwBvA2oFIgADAAA3JwEXo2gCx2hvQQRyQQACAEgCMANSBcUACgAPAAABMxUjFSM1IScBMwEhEScHArqYmKP+NQQByan+QgEbAxEDZn25uV4Cfv2hAYsBIgAAAQB6AosC+AW6ABMAABMXPgEzMhYVESMRNCYjIgYHESMR+h4lbkl+hqpKRjlMFaoFq3pCR5Og/gQB3WpaOTP9ywMgAAABAEYAAARRBcUAJwAAAQ4BByEHITUzPgE3IzUzJyM1Myc0NjMyFhUjNCYjIgYVFyEVIRchFQGvAyAeAuMB/DYKMTIDsKsGpJ4F277K1bp9aGl2BQGm/mAFAZwBvliYOZWVDbNplpGWldDlz7R8cZSLlZaRlgAAAAADAKf/7AYMBbAACgATACsAAAERIxEhMhYVFAYjJzMyNjU0JisBJREzFSMRFBYzMjY3Fw4BIyImNREjNTMRAWC5AV/s/v7spqablZWbpgPQ0NA2LxgxFRkaXS5xgJubAjb9ygWw9MnK85anfn+rJv75jf1qUD8HBoMRFY2eApaNAQcAAAABAE//6wPUBcUAKQAAASEUFjMyNjcXDgEjIgA1IzUzNSM1MzU0ADMyFhcHLgEjIgYdASEVIRUhA5L+DK6ZO201Ejp3Pur+6paWlpYBFOo8cUQSN246mawB9P4MAfQCArTOERGYDxABHfp4qXoR+QEeEA+aEBPMsxN6qQAABAB7/+sFgwXFABsAKQA3ADsAAAEUBiMiJj0BNDYzMhYVIzQmIyIGHQEUFjMyNjUBFBYzMjY9ATQmIyIGFTM0NjMyFh0BFAYjIiY1EycBFwKplX+CmJeBgJaLR0RFSEpFQ0YBEKGLiaChioqgi1FOT1JRTk9Sy2j9OWgEHm6QqoFNgaySbTpOaU1NTGhPOPz5gqqqgk6Bq6uBTWhoTU5OZ2hNA8pB+45BAAAAAAIAaP/rA2oFxQAaACYAAAUiJj0BDgEjNTI2NxE0NjMyFh0BFAIHFRQWMwM1NCYjIgYVET4BNQLMzMgzZTg6ZjCYi3qVx7JhehsuKDY0YGAV7NgPDgyuDg4B3LTHqZMqpP6zZVqVlAPXLFFPbnH+gkzScwAABACrAAAISgXAAAMAEQAfACsAAAEhNSEBNDYzMhYdARQGIyImNTMUFjMyNj0BNCYjIgYVASMBIxEjETMBMxEzCAz90wIt/ZK3n5+3tp6ht6NaW1haW1laWf6yuf0tA7m5AtMDuQFrjQJ5l7i4l3WYtraYW2pqW3VYbGtZ+48Ee/uFBbD7hgR6AAIAZgOXBFwFsAAOABYAAAEjAyMDIxEjETMbATMRIwEjESMRIzUhBAIDmzOgA1pxpadrWv3kkluTAYAE/P6bAXL+jgIZ/nABkP3nAcj+OAHIUQAAAAIAmP/sBJMETgAVAB4AACUOASMiADU0ADMyAB0BIREeATMyNjcBIgYHESERLgEEFlm4Yd7+0gE/zdMBHP0AOYlPYbZZ/pBLizsCHDeIXjg6AUTt5gFL/s7rL/64Njg7PwMqQDr+6wEeNjsA//8Ab//1Bk8FsgAnAckAEQKGACcBdAEJAAAABwHQA0wAAAAA//8Aa//1BuIFwAAnAcsAAgKUACcBdAG8AAAABwHQA98AAAAA//8AbP/1BxIFrwAnAc3/+gKOACcBdAH0AAAABwHQBA8AAAAA//8Aa//1Bm8FrwAnAc8ADQKOACcBdAE3AAAABwHQA2wAAAAAAAIATP/rBC0F7QAUACEAAAEEABEVFAAjIgA1NBIzMhYXNy4BJxMyNj0BLgEjIgYVFBYB6AENATj+59rd/u/13l6jPAMp4qWPjKolrISQiqcF7Uv+Pv6ncPr+zgET0+8BETw5AsnwOPsx47RlUm3JoYjJAAAAAQCp/yoE5QWwAAcAAAUjESERIxEhBOW5/Ta5BDzWBfD6EAaGAAAAAAEARf7zBKsFsAAMAAAJASEVITUJATUhFSEBA2v9uQOH+5oCYf2fBBn8xQJIAkH9SJaNAs4C1I6W/UAAAAEAqAKMA+sDIQADAAABITUhA+v8vQNDAoyVAAABAD8AAASYBbAACwAAARczNwEzASMDIzUhAh4VAxcBjr394o32uAE7AU9iYgRh+lACdZcAAwBr/+sHwgROABkAJwA1AAABFAIjIiYnDgEjIgI9ATQSMzIWFz4BMzISFQUUFjMyEjc1JgIjIgYVITQmIyICBxUWEjMyNjUHwvXRq+tQUOup0/T00arsUVDsq8/1+WKHh5PSHB3Tk4WHBeWIg5XTHBvTlIWIAfrk/tXZoaHZASrlROMBLdqgoNr+0+NErc0BGW8qbQEZz6urz/7nbSpv/ufNrQAB/7T+SwKOBi0AHAAABRQGIyImJzceATMyNjURNDYzMhYXBy4BIyIGFREBZaebIDIdDg5AE0FIr6MiRCoYFCwbWlxZqrIJCZEFCGheBR6vuQsKjAUGbWX64gAAAAIAZQEaBBQD+wAbADcAABM+ATM2FhceATMyNjcfAQ4BIyImJy4BByIGBycDPgEzNhYXHgEzMjY3HwEOASMiJicuAQciBgcnbzB5Q0Y9Z1g/Q0F5LwMJMXlCQz9YZz1GQnkuAxMweUNGPWdbPENBeS8DCTF5QkM/WGs5RkJ5LgMDaEZMARczLRhKRAGjR0sYLTMXAUtDAf76RkwBFzMvF0tEAaRHSxgtNRYBTEMBAAAAAQCYAKQD2gTfABMAAAEzFSEDIRUhByc3IzUhEyE1IRMXAw/L/t2OAbH994NTY8YBHY/+VAIEmFMDzZ7+/57sOrKeAQGeARI7AAAA//8AngACA+YEjQBnAB4AVgCyQAA5mgAHAYb/+/12AAD//wCZAAAD7wSgAGcAIAATAMRAADmaAAcBhv/6/XQAAAACACsAAAPcBbAABQAPAAABMwkBIwEhAScjBwkBFzM3AbyMAZT+cI3+bAL0/vkWAxb/AAEGFgMWBbD9J/0pAtcCAz4+/f39/j8/AAD//wDHALIBgwTrACcAEAAlALIABwAQACUEJgAAAAIAbgJ6AjMEOgADAAcAABMjETMBIxEz+42NATiNjQJ6AcD+QAHAAAABAFz/LwFXAOwACQAAJRQGByc+AT0BMwFXS0dpJiSxgFy2P0g/e0xvAAAAAAIAHwAAA80GLQAXABsAADMRIzUzNTQ2MzIWFwcuASMiBh0BMxUjESEjETPKq6vOvkSCVR83dUJ4aN3dAkm6ugOtjXe5wx8emhYdaHB3jfxTBDoAABYAW/5yB+4FrgANAB0AKwA7AEEARwBNAFMAXQBhAGUAaQBtAHEAdQB+AIIAhgCKAI4AkgCWAAABNCYjIgYdARQWMzI2NQUyNjU0Jic1PgE1NCYrAREnFAYjIiY9ATQ2MzIWFQUUBiMiJjUjFBYzMjY1ESMBETMVMxUhNTM1MxEBESEVIxUlNSERIzUBMx4BFRQGKwE1ATUhFSE1IRUhNSEVATUhFSE1IRUhNSEVEzMyFhUUBisBBSM1MzUjNTMRIzUzJSM1MzUjNTMRIzUzAzl/aGh+fmpofQEgXmc0LSUqbWe8n0hBQ0lIQkFKA7o2KTM1XWhdU2hc+cRxxAUox2/4bQE1xAXsATZv/NoFMDI0M34BTgEW/VsBFf1cARQCCgEW/VsBFf1cARS8XT44Ojxd/PFxcXFxcXEHIm9vb29vbwJEYnl5YnBkd3dk2E5NLkQNAw48KExK/dvYR0xMR3BFTk5Fmyw2LC9TUVtQAXr7TwE7ynFxyv7FBh8BHXSpqXT+46n8tgItJykqqQNKdHR0dHR0+ThxcXFxcXEEWx8oKSeW/H76/BX5fvx++vwV+QAAAAAFAFz91QfXCGIAAwAdACEAJQApAAAJAwU0Njc+ATU0JiMiBgczPgEzMhYVFAYHDgEVFyMVMwMzFSMDMxUjBBgDv/xB/EQEDxkpSV2mloulAssBOiw3OjIrUDrKyspLBAQCBAQGUvwx/DEDz/E2OxsogFCDlIGJNDM+NjJNHDlWWluq/UwECo0EAAAAAAEAXP/vA6QEjQAeAAAbASEVIQM+ATc2FhUUBiMiJjU3FBYzMjY1NCYjIgYHiEcCof4AIyhxP7fIzN216rl9aXx0cmpsZRkB+QKUnv7BGyUCA8a8ts6fpA5XZ3xzb305OAAAAAACAFcAAAMkAyEACgAPAAABMxUjFSM1IScBMwEzEScHAqKCgqH+XQcBpqX+Y/wDEgEYfpqaYgIl/fcBRgEfAAAAAgBz/+sEDQXFAA0AGwAAARACIyICGQEQEjMyEhEnNCYjIgYVERQWMzI2NQQN8dva9PLa2/O6i4mJioyJiYkCLP7j/twBJQEcAVcBHAEm/tr+5CjEwMDE/lvEwsDGAAAAAf+i/t8CzANBAA8AAAMzIAAREAIjJzI2NS4BKwFe1QEfATbv6gKchQHLz9UDQf7V/ur+9/7okc3D0dEAAf+2/ksBZwCYAA8AACUVFAYjIiYnNx4BMzI2PQEBZ6ebIDIdDg4/FEJHmPGqsgkJmgUHX13xAAABABv+ZgHCAEAAEwAANx4BFRQGIyImJzceATMyNjU0Jif4ZmR/ZENbJh8jMCM9NEQ9QDSMTWJrGRN3DQ4wKjJWMAAAAAEAZ/6ZASEAmgADAAABIxEzASG6uv6ZAgEAAAACAIME2QLSBs4ADQAhAAABFAYjIiY1MxQWMzI2NRMUBiMiJiMiBhUnNDYzMhYzMjY1AtKeiYqelkVNS0aNXkg6eSojL1NcSS+DKyIxBa5hdHRhNkJDNQEJTGdMMyYVSmtMMyYAAgCBBOACygcCAA0AHQAAARQGIyImNSMUFjMyNjUlJz4BNTQmIzcyFhUUBg8BAjdGS01GkpyJiJz+pAFMQFdJB4+VU0IBBbA0QEA0X3FxXxB8AxkeHx1QTEM3Nwc+AAAAAgCBBN8C4AaJAA0AEQAAARQGIyImNTMUFjMyNjUnMwcjAuCijY+hmEhQTUlgmaRmBbBgcXFgNUBBNNnGAAAAAAIAbQTkA0IG0gAIABwAAAEHIycHIyclMzcUBiMiJiMiBhUnNDYzMhYzMjY1A0IBpcXFpAEBKYPDXkM2bycgM01dQyt5KB80BOcDn58D8OU/XUgwHBM+YkYsHQAAAgBpBOQD7AbOAAYAFgAAASMBMzcXMy8BPgE1NCYjNzIWFRQGDwECNbz+8KnFxapTAUU3TUAFf4dLOwEF6f77urqJgwQZIiMgXFZLPz4HPAAC/14E0gNGBoAABgAKAAABIycHIwEzBSMDMwNGxaqqxAEimP6PjMjHBNKfnwEFWAEBAAAAAgBuBOQEWAaSAAYACgAAATMBIycHIwEzAyMBkpgBIsWpqsYDIsjJjQXp/vufnwGu/v8AAAIAWwSnAv8GeQANABEAAAEUBiMiJjUzFBYzMjY1ByMnMwL/tZ2etJZYZGFaZ5fS2AWweZCQeUNRUkIFzgAAAAABAJ8EkAFwBhcABQAAEzczBxUjn3NeGLkFI/T9igAAAAIAKQAABIMEjQAHAAoAAAEhAyMBMwEjASEDA1r9+GnAAdavAdW//ccBlswBEP7wBI37cwGkAg0AAwCbAAAECQSNAA8AGAAhAAAzESEyFhUUBgcVHgEVFAYjAREhMjY1NCYjJTMyNjU0JisBmwGK1+dcVmZy2Mf+6wEVc3Jzcv7r0IKDfYjQBI2coVaBIAMYlGKkpAIL/ohfW1pkiVlZWUcAAAAAAQBy/+8EJASdABsAAAEOASMiAD0BNAAzMhYXIy4BIyIGHQEUFjMyNjcEIw70ztL+8QEP0tTvDroOhoOCpaWCg4UOAY7QzwEb5qzlARzOz4p/zZ+toM5/jQAAAAACAJsAAAQtBI0ACQATAAAzESEyAB0BFAAjAxEzMjY9ATQmI5sBotUBG/7l1ejohLKyhASN/vfV0tb++QP5/Jq7j9OOuwAAAAABAJsAAAPHBI0ACwAAASERIRUhESEVIREhA3D95QJy/NQDLP2OAhsCFf5+kwSNlP6wAAAAAQCbAAADyASNAAkAAAEhESMRIRUhESEDcf3kugMt/Y0CHAH4/ggEjZT+lAABAHL/7wRHBJ0AHwAAJQ4BIyIAPQE0ADMyFhcHLgEjIgYdARQWMzI2NzUhNSEERy7st+r+5gEb5N7hErgOh4SSs7GZb4sf/vgBwJ1CbAEF2fPXAQbBqQFtariQ9JO4LB38lQAAAQCbAAAEVQSNAAsAACEjESERIxEzESERMwRVuv26uroCRroB7v4SBI399QILAAAAAQCbAAABVASNAAMAACEjETMBVLm5BI0AAQBB/+8DcQSNAA8AAAEzERQGIyImNTMUFjMyNjUCubjdscXdunZyXXkEjfzUrcWvsmpkeWYAAAABAJsAAARABI0ADAAAASMRIxEzETMBMwkBIwG+abq6WwGN3/4zAfHqAfj+CASN/gIB/v3P/aQAAAEAmwAAA2oEjQAFAAAlIRUhETMBVQIV/TG6k5MEjQAAAQCbAAAFUASNAA4AACUBMxEjEScBIwEHESMRMwL5AXDnuQP+pYD+nwO68PIDm/tzA0YB/LkDWQH8qASNAAAAAAEAmwAABHIEjQALAAAhIwEHESMRMwE3ETMEcrj9ngO6ugJiA7gDbwH8kgSN/JABA28AAAACAHL/7wRXBJ0ADQAbAAABFAAjIgA9ATQAMzIAFSc0JiMiBh0BFBYzMjY1BFf+8ePj/vABD+LjARG5ppWUo6SVlaQB8Ov+6gEX6qzpARj+6OkBr72+rq2wvr2xAAIAcv+LBJoEnQATACEAAAEUBgcXBycOASMiAD0BNAAzMgAVJzQmIyIGHQEUFjMyNjUEVzY0rX+uO4JL4/7wAQ/i4wERuaaVlKOklZWkAfBlp0Kob6ciIQEX6qzpARj+6OkBr72+rq2wvr2xAAIAmwAABDoEjQAbACQAAAERIxEhMhYVFAYHFR4BHQEUFhcVIy4BPQE0JiMlITI2NTQmIyEBVboBy8/bYF9nWBIYvxgMa2f+0AERf3Fyfv7vAeL+HgSNsKVbfSUDHo1rZTNfGBMaazljXWSVXlxfaQABAF3/7wQNBJ0AJQAAATQmJy4BNTQ2MzIWFSM0JiMiBhUUFhceARUUBiMiJDUzFBYzMjYDVHur4sbt0NXouYd9hIByudzH+d3N/vO5pnuKkwEvSVcrPJCXlau4r2BzXk1MUC07l5Ocpai/cGRfAAAAAQBHAAADzwSNAAcAAAEhESMRITUhA8/+lbn+nAOIA/n8BwP5lAAAAAEAjP/vBHAEjQARAAABERQEIyIkNREzERQWMzI2NREEcP7w4uH+77isjpCqBI39AcfY2McC//0BgIyMgAL/AAABACoAAAR9BI0ACQAAARczNwEzASMBMwI6GQMYAUnG/i2u/i7HASBZVwNv+3MEjQABAEEAAAXABI0AEwAAARczNxMzExczNxMzASMDIwMjATMBwwMDA9+t4AMDA7jH/tes6QPqq/7XxgEJFBYDgvx8FBYDgvtzA2z8lASNAAAAAAEAOAAABD4EjQALAAAJATMJASMJASMJATMCOQEg2/51AZXZ/tb+2dwBlv5z2gLXAbb9v/20Ab/+QQJMAkEAAAABACAAAAQwBI0ACAAACQEzAREjEQEzAigBOND+Urn+V9ACQgJL/Q3+ZgGjAuoAAAABAE4AAAPYBI0ACQAAJSEVITUBITUhFQEyAqb8dgKM/ZYDUJOTcgOHlG4AAAIAe//vA/YEnQANABsAAAEUBiMiJjURNDYzMhYVJzQmIyIGFREUFjMyNjUD9vHLzfLwzczyuYp7eoqMenqJAZvJ4+PJAVfI4+THAYGVlYH+qIKXl4IAAAABAEIAAAHLBJ0ABQAAISMRBzUlAcu50AGJA9MDiEUAAAEAWgAAA3AEnQAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGBwEhA3D89QGbaUReXWxzudu9scR0nv74AiOTAZhlcUBYcHNYl8izq2+Wof76AAAAAAEAWf/vA50EnQAoAAABMjY1NCYjIgYVIzQ2MzIWFRQGBx4BFRQGIyImNTMUFjMyNjU0JisBNQH+bmVvb1t1ud+qwNhfV2Nl6cGr77h8ZnF/cXSnAppgV1BoYUuTramiU4MnIohmpLKpqlJubVZmX5AAAAAAAgBHAAAEEQSNAAoADgAAATMVIxUjNSEnATMDEScBA0nIyLn9uwQCQsC5A/6IAYKV7e12Ayr89QIRAf3uAAAAAAEAXQAABCMFxQAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGBwEhBCP8VgHdhFqBcJyRuf7oxuWMg/55AsuDAhOSp1pylJqRw/7gtXnpkP5XAAAAAAIAev/vA9IEnQAaACcAAAEyFhcHLgEjIgYdAT4BMzIWFRQGIyImNRE0JBMiBgcVFBYzMjY1NCYCTUSRQh87b0x+nTOPXL3D6sC98QEKplx9HYhsb4JzBJ0bGI8ZFaOCcTc8w7at0fTIATfH9P20QjoqgqeGZW13AAEARwAAA2MEjQAMAAABBgIRFSM1EBI3ITUhA2PBornkkf2LAxwD+ev+xv7lubkBFQGSmZQAAAAAAwBc/+8DxQSdABcAIwAvAAABFAYHHgEVFAYjIiY1NDY3LgE1NDYzMhYDNCYjIgYVFBYzMjYDNCYjIgYVFBYzMjYDomRZaXfxu8T5eW1dZ+S1rd6XjWdulJNxZ4sjeldifoBiWHcDXVmDJSeOYaSzs6Rhjiclg1mbpaX9Uldwb1hbbW0Cak5iX1FQZGQAAAAAAgBL/+8DnQSdABoAJwAAJTI2PQEOASMiJjU0NjMyFhURFAYjIiYnNx4BEzI2NzU0JiMiBhUUFgHec5IvgE3G1urAvOz6xUSRRB09clxdfRyHaWyCdoKUc3o1Ncyxqt30x/6ouOMaGJAaFQGlSjg5gKeTYGqFAAAAAQBeAAABhAMsAAUAACEjEQc1JQGEpIIBJgKUAYIXAAABAHEAAALGAywAGAAAKQE1AT4BNTQmIyIGFSM0NjMyFhUUBg8BIQLG/bQBL0gsOj9ISqGkj4iUV3WoAXp+AQg+Siw0P0E1aYx9dlBtbJIAAAEAaf/1AuADLAAoAAABMjY1NCYjIgYVIzQ2MzIWFRQGBx4BFRQGIyImNTMUFjMyNjU0JisBNQGnSEFJSjtKoqeAkqNFP0hKsJOAtKNNRE1USk2DAdU6Ni46MipldnVwOFoaGF1GcXp0dTE6OzNBOXoAAAAAAQBKAAACIwWwAAUAACEjEQU1JQIjuf7gAdkE3Ah3ZQABAHL/9QLxAyEAHgAAGwEhFSEHPgE3NhYVFAYjIiY1NxQWMzI2NTQmIyIGB5MzAgD+kBkdUC6Gk5unirOhVEhUTE5HRUUQAVoBx4G/EhkBAo6CfY1tcAszN0VGRVEjIAACAHv/9QMAAywAGgAnAAABMhYXBy4BIyIGHQE+ATMyFhUUBiMiJj0BNDYTIgYHFRQWMzI2NTQmAd02aiwdKFA1V2skZkKGkbGRj7TIgkNWD1lIS1ZMAywTEHsQD19RRyQoiX13kKeK1oqm/lktKApRYks+Q0YAAAABAF4AAAKoAyEADAAAAQ4BHQEjNTQSNyE1IQKoim6imF3+WwJKAqKgx7x/f7sBEVd/AAAAAwBy//UDAwMsABcAIwAvAAABFAYHHgEVFAYjIiY1NDY3LgE1NDYzMhYDNCYjIgYVFBYzMjYDNCYjIgYVFBYzMjYC60hASla0jpS7WE5DSqyJhKeJXkRKY2JMRVwaTTtBUlRAOU4CUDxaGxxiQHJ6enJAYhwbWjxrcXH+LDZDQzY3PT0BmC82NDEwOjoAAAAAAgBp//UC6AMsABoAJwAAJTI2PQEOASMiJjU0NjMyFh0BFAYjIiYnNx4BEzI2NzU0JiMiBhUUFgGWTWEgVjKToLCRi7O+lDNsMxsrU0g/Ug5ZRkdTTXNVRkwjIo58dZipiet/mxERexEOARgwJBtQY1Q6RFAAAAAAAgB8//UDGwMsAA0AGwAAARQGIyImPQE0NjMyFhUnNCYjIgYdARQWMzI2NQMbtpmatrWZmrejXFJSWltTUloBG4qcnIrriZ2diQFPV1dP7FFXV1EAAQCPAowDCwMhAAMAAAEhNSEDC/2EAnwCjJUAAAMAngRCAmsGcwAEABAAHAAAATMXByMHNDYzMhYVFAYjIiY3FBYzMjY1NCYjIgYBsbkB2XKCY0lHYGBHSWNVMiUjMDAjJTIGcwO110heXUlJWVpIJDAwJCYyMwAAAgBvBHACvgXWAAUADwAAARMzFQMjJTQ2NxcOAR0BIwGGdMTfWf7pWlhJLCeoBIMBQhX+wlRXiy46LmdHUAAAAAEAXv/rA/oFxQAoAAABMzI2NTQmIyIGFSM0NjMyFhUUBgceARUUBCMiJDUzFBYzMjY1NCYrAQGGp4pzfoF5jrn2ys7qbnCHbv8Azsr+/LqSgoWQhJCnAzCEeIGCiHSt5dPKXbAwK7Z1y9/VwXeKh4qLgAAAAgA5AAAEUQWwAAoADwAAATMVIxEjESE1ATMBIREjBwOEzc24/W0Ch8T9fQHLAxsB6JX+rQFTawPy/DgCyUYAAAEAmv/rBBEFsAAeAAAbASEVIQM+ATc2EhUUAiMiJjUzFBYzMjY1NCYjIgYHsVQC1f3HMDByUcrj5OW88q+LdISMjYB6bBoCkQMfqf5cJS0CAv775OD++8fNfIOvn5GzRkwAAAACAIf/6wQzBcUAGgAnAAABMhYXBy4BIyIGHQE+ATMyEhUUAiMiABkBEAATIgYHFRQWMzI2NTQmAp9MkTIoNGlKoL9ApWTH4/PQ2P7vATCpapElqoaAipIFxSIbkRoe9c4jPEH+99Xl/ugBLwEeAR8BGwFT/XNVSnPO2MyclroAAAMAHv5KBBEETgAvAD8ATQAAASMeAR0BFAYjIiYnDgEVFBY7ATIWFRQEIyImNTQ2Ny4BNTQ2Ny4BPQE0NjMyFhchASImJw4BFRQWMzI2NTQmIwEUFjMyNj0BNCYjIgYVBBGZHh/tvStJIxkcQzytytH+3PTe8mFSHB0/NVVa68EoSyQBb/2MFSYTNUGLjKC/ZH7+q4dua4aGbW6FA6orYDcWmcwKCxQ0Iy4mj5aA1J54XIEqFzsoRmEmMZdcFp/HCgr79AIEGFw9SFx4R0tFAqRVe3tVFlh4eFgAAAABADsAAAP8BbAADAAAAQoBAwcjNxoBEyE1IQP8/7YnD7oPKefP/PYDwQUa/sH+G/6jmZkBYgIXAQiWAAABAFr+TARHBEkAIwAAEzIWFxsBMwETHgEzMjY3Bw4BIyImJwMBIwEDLgEjIgYjJz4Bwn9uO3P/u/6g0SFBLQ4OFAILJA5vc0KP/ufEAYOoI1M+CzcCARU8BEmJgv74AgT9L/4hS00CA5wGCXmWAUf9vwMQAYRWYgWSBQoAAwBm/+sEGAXFABgAJAAwAAABFAYHHgEVFAQjIiQ1NDY3NS4BNTQ2MzIWAzQmIyIGFRQWMzI2AzQmIyIGFRQWMzI2A/B/b4GV/v7W2v8AkX9teunGw++Ron+CnZuGgZ4pim5whodxb4cENXWpKy24fs3R0M5+uSwDKal0xMzN/JV7mpl8gI2OAyNwjol1c4aGAAAAAAIAZP/rBFgETgAUACIAACUjDgEjIgI9ARASMzIWFz8BMwMTIwEUFjMyNjc1LgEjIgYVA4MDNbeMydvazIm1NQMhsGpxsP11h5J3giIahnmTiOt+ggEb7xUBCgE6gHsB5v3i/eQB9arL07UmrN7twQACAGD/6wQnBbAAGwAsAAABFSEeARcWEh0BFAAjIgA9ATQSNzoBMzcmJCc1ExQWMzI2PQE0JicuASMiBhUDtP40HHRMsbL/AOPk/wDz2gkUCgEW/ug5LJWVlJZnSxcwHJ+gBbCSH2ZAnf73nxjt/twBJO0YwAEGGAIU9kBy/Eyo1NWnGHO1NQYGzJ0AAAIAtgAABLYFsAAJABMAADMRISAAERUQACEDETMyNj0BNCYjtgF3AVgBMf7P/qi+vvnX1/kFsP7W/svz/sv+1wUa+3ve6/bo3gAAAAACAHL/6wPsBE4AHwAqAAAhLgEnDgEjIiY1NDY7ATU0JiMiBhUjNDYzMhYVERQWFyUyNjc1IyIGFRQWAy0JCQI7rGivqfrjyHZ1d3O50dzNzQwQ/flopiTOkoxVKzsfRFadpKuhiWBXX0uFu5yz/ds6ajaKUTvia2VOUAAAAgC1AAAE8gWvAA4AFwAAARQGBwEVIwEhESMRITIWASEyNjU0JiMhBJeHfAFez/7A/ou5Afrv+fzXAUaWlJOc/r8EC4LDMP18EgJq/ZYFr9b+JouDf44AAAEAtgAABR0FsAAMAAABBxEjETMRNwEzCQEjAhanubmoAevV/bwCiugCrbH+BAWw/Sa2AiT9g/zNAAAAAAEAkgAABBQGGAAMAAABBxEjETMRNwEzCQEjAcN3urprAVTe/lQB19sB8nz+igYY/EN5AWb+Of2NAAAAAAEAtgAABPkFsAALAAABESMRMxEzATMJASMBb7m5DAJu5/1jAsbkArf9SQWw/XgCiP08/RQAAAAAAQCSAAAD8QYYAAwAAAEjESMRMxEzATMJASMBUQW6ugEBivD+KgIA5AH0/gwGGPxzAa/+Df25AAACAFT/6wP9BcUAGwAoAAAlMjY9AScOASMiAjU0ADMyABkBEAAjIiYnNx4BEzI2NzU0JiMiBhUUFgH/lq4DMJZe1/EBAsDmAQH+6uhPm0IdP35vcpQhlZJ0mo6A1tosAUlKAQPx6AEf/ur+5/6c/uD+2RwfkB4YAd9gTZzFwsylob4AAAACAJsAAAQZBI0ACgATAAABESMRITIWFRQGIyUhMjY1NCYjIQFVugHPzOPizf7rARV7enp7/usBpv5aBI3Np6nKlH9eYIIAAP//AIEEpQLYBbACBgCcAAD//wAAAAAAAAAAAgYAAwAA//8AJQIhAg0CtgIGAA8AAAACAC4AAAUFBbAADQAbAAAzESM1MxEhIAARFRAAIRMhETMyEj0BNCYjIREh1KamAbsBIgFU/qj+0C3+4/Do5uLa/v4BHQKalQKB/qb+5MX+4v6pApr9+wEF28ff//4VAAACAC4AAAUFBbAADQAbAAAzESM1MxEhIAARFRAAIRMhETMyEj0BNCYjIREh1KamAbsBIgFU/qj+0C3+4/Do5uLa/v4BHQKalQKB/qb+5MX+4v6pApr9+wEF28ff//4VAAABAAYAAAQYBhgAHAAAASERFz4BMzIWFREjETQmIyIGBxEjESM1MzUzFSECgv7nAzeiZ7G7uXR3V4gsuqmpugEZBNL+1QFQWMzd/VsCp42AUkj85gTSlbGxAAAAAAEAOwAABIoFsAAPAAABIxEjESM1MxEhNSEVIREzA5zduebm/jUET/413QM2/MoDNpUBT5aW/rEAAf/j/+wCXwVBAB8AAAERMxUjFTMVIxEUFjMyNjcXDgEjIiY1ESM1MzUjNTMRAXLQ0O3tNi8YMRUZGl0ucYDV1ZubBUH++Y2+lf69UD8HBoMRFY2eAUOVvo0BB///ACcAAAUiByICJgAjAAAABwBCARQBXf//ACcAAAUiBx8CJgAjAAAABwBzAc4BWf//ACcAAAUiB0YCJgAjAAAABwCaANABXf//ACcAAAUiB1ECJgAjAAAABwCgAMoBYP//ACcAAAUiBwwCJgAjAAAABwBoAKoBXP//ACcAAAUiB4gCJgAjAAAABwCeAVEBqP//ACcAAAUiB58CJgAjAAAABwHUAWEBLP//AIP+RATJBcUCJgAlAAAABwB3Adv/9///ALYAAAR1ByICJgAnAAAABwBCAOABXf//ALYAAAR1Bx8CJgAnAAAABwBzAZoBWf//ALYAAAR1B0YCJgAnAAAABwCaAJwBXf//ALYAAAR1BwwCJgAnAAAABwBoAHYBXP///9wAAAF8ByICJgArAAAABwBC/40BXf//AMMAAAJkBx8CJgArAAAABwBzAEYBWf////IAAAJPB0YCJgArAAAABwCa/0kBXf///8wAAAJ1BwwCJgArAAAABwBo/yMBXP//ALYAAAT+B1ECJgAwAAAABwCgAPsBYP//AIL/6wUNBzcCJgAxAAAABwBCATQBcv//AIL/6wUNBzQCJgAxAAAABwBzAe4Bbv//AIL/6wUNB1sCJgAxAAAABwCaAPABcv//AIL/6wUNB2YCJgAxAAAABwCgAOoBdf//AIL/6wUNByECJgAxAAAABwBoAMoBcf//AJb/6wTXByICJgA3AAAABwBCASYBXf//AJb/6wTXBx8CJgA3AAAABwBzAeABWf//AJb/6wTXB0YCJgA3AAAABwCaAOIBXf//AJb/6wTXBwwCJgA3AAAABwBoALwBXP//AB4AAATTBx0CJgA7AAAABwBzAaABV///AHL/7APsBeACJgBDAAAABwBCAJYAG///AHL/7APsBd0CJgBDAAAABwBzAVAAF///AHL/7APsBgQCJgBDAAAABgCaUhsAAP//AHL/7APsBg8CJgBDAAAABgCgTB4AAP//AHL/7APsBcoCJgBDAAAABgBoLBoAAP//AHL/7APsBkYCJgBDAAAABwCeANMAZv//AHL/7APsBl4CJgBDAAAABwHUAOP/6///AGH+RAPyBE4CJgBFAAAABwB3AUX/9///AGL/7APpBeECJgBHAAAABwBCAJsAHP//AGL/7APpBd4CJgBHAAAABwBzAVUAGP//AGL/7APpBgUCJgBHAAAABgCaVxwAAP//AGL/7APpBcsCJgBHAAAABgBoMRsAAP///7UAAAFVBcsCJgCKAAAABwBC/2YABv//AJsAAAI9BcgCJgCKAAAABgBzHwIAAP///8sAAAIoBe8CJgCKAAAABwCa/yIABv///6UAAAJOBbUCJgCKAAAABwBo/vwABf//AJEAAAP4Bg8CJgBQAAAABgCgZR4AAP//AGD/7AQnBeACJgBRAAAABwBCALMAG///AGD/7AQnBd0CJgBRAAAABwBzAW0AF///AGD/7AQnBgQCJgBRAAAABgCabxsAAP//AGD/7AQnBg8CJgBRAAAABgCgaR4AAP//AGD/7AQnBcoCJgBRAAAABgBoSRoAAP//AI3/7AP2BcsCJgBXAAAABwBCALEABv//AI3/7AP2BcgCJgBXAAAABwBzAWsAAv//AI3/7AP2Be8CJgBXAAAABgCabQYAAP//AI3/7AP2BbUCJgBXAAAABgBoRwUAAP//ABv+SwPkBcgCJgBbAAAABwBzASkAAv//ABv+SwPkBbUCJgBbAAAABgBoBQUAAP//ACcAAAUiBvoCJgAjAAAABwBuAM4BSv//AHL/7APsBbgCJgBDAAAABgBuUAgAAP//ACcAAAUiB0wCJgAjAAAABwCcAPsBnP//AHL/7APsBgoCJgBDAAAABgCcfVoAAAACACf+UAUiBbAAGgAdAAABMwEjDgEVFBYzMjY3Fw4BIyImNTQ2NwMhAyMBIQMCWaACKSVTWCMrHS8YDSBKNldpVVuJ/ZuPvQGDAfj6BbD6UD1lPCQmEAx4ExliW0d+NwF7/nwCGQKyAAIAcv5QA+0ETgAzAD4AACEuAScOASMiJjU0NjsBNTQmIyIGFSM0NjMyFhURFBYXIw4BFRQWMzI2NxcOASMiJjU0NjclMjY3NSMiBhUUFgMtCgoCOqxnq6343NF6cWmBue6/u98MEBNTWCMrHS8YDSBKNldpTlP+t2ilJdeBlF0zQiRMYamZnqxuY29jR33DuLL99jpqNj1lPCQmEAx4ExliW0R6NYtgRsd5VUtUAAD//wCD/+sEyQc0AiYAJQAAAAcAcwHXAW7//wBh/+wD8gXdAiYARQAAAAcAcwFBABf//wCD/+sEyQdbAiYAJQAAAAcAmgDZAXL//wBh/+wD8gYEAiYARQAAAAYAmkMbAAD//wCD/+sEyQciAiYAJQAAAAcAnQGoAXL//wBh/+wD8gXLAiYARQAAAAcAnQESABv//wCD/+sEyQdcAiYAJQAAAAcAmwDvAXP//wBh/+wD8gYFAiYARQAAAAYAm1kcAAD//wC2AAAE5wdHAiYAJgAAAAcAmwCoAV7//wBk/+wFMAYYACYARgAAAAcBkQPZBSz//wC2AAAEdQb6AiYAJwAAAAcAbgCaAUr//wBi/+wD6QW5AiYARwAAAAYAblUJAAD//wC2AAAEdQdMAiYAJwAAAAcAnADHAZz//wBi/+wD6QYLAiYARwAAAAcAnACCAFv//wC2AAAEdQcNAiYAJwAAAAcAnQFrAV3//wBi/+wD6QXMAiYARwAAAAcAnQEmABwAAQC2/lAEdQWwACAAAAEhESEVIw4BFRQWMzI2NxcOASMiJjU0NjcnIREhFSERIQQP/WADBjhTWCMrHS8YDSBKNldpTVAB/SkDtf0EAqACpv3vlT1lPCQmEAx4ExliW0N6MwMFsJb+IgACAGL+ZAPpBE4AKQAxAAAFIgA9ATQAMzISHQEhHgEzMjY3Fw4BBw4BFRQWMzI2NxcOASMiJjU0NjcDIgYHITU0JgJO5P74AQ+/3N39MwSdkWWTO0keSzBRVyMrHS8YDSBKNldpNDgkaZEUAg6AFAEn9C3sAS7+/uB5psw4M3sdMRE7ZTwkJhAMeBMZYls3ZS8DzKmHGnmd//8AtgAABHUHRwImACcAAAAHAJsAsgFe//8AYv/sA+kGBgImAEcAAAAGAJttHQAA//8Ahf/rBNsHWwImACkAAAAHAJoA0QFy//8AZv5MA/cGBAImAEkAAAAGAJpdGwAA//8Ahf/rBNsHYQImACkAAAAHAJwA/AGx//8AZv5MA/cGCgImAEkAAAAHAJwAiABa//8Ahf/rBNsHIgImACkAAAAHAJ0BoAFy//8AZv5MA/cFywImAEkAAAAHAJ0BLAAb//8Ahf3lBNsFxQImACkAAAAHAZEBq/62//8AZv5MA/cGbQImAEkAAAAHAaUBMwBW//8AtgAABP0HRgImACoAAAAHAJoA+gFd//8AkQAAA/oHRQImAEoAAAAHAJoAIwFc////xQAAAncHUQImACsAAAAHAKD/QwFg////ngAAAlAF+gImAIoAAAAHAKD/HAAJ////vwAAAokG+gImACsAAAAHAG7/RwFK////mAAAAmIFpAImAIoAAAAHAG7/IP/0////9QAAAkwHTAImACsAAAAHAJz/dAGc////zgAAAiUF9QImAIoAAAAHAJz/TQBF//8AIf5YAYEFsAImACsAAAAGAJ/vCAAA//8AAP5QAWAGGAImAEsAAAAGAJ/OAAAA//8AtwAAAYYHDQImACsAAAAHAJ0AFwFd//8Aw//rBf8FsAAmACsAAAAHACwCPwAA//8Aof5LA2MGGAAmAEsAAAAHAEwB/AAA//8AP//rBIsHOQImACwAAAAHAJoBhQFQ////tP5LAjkF3AImAJgAAAAHAJr/M//z//8Atv31BRwFsAImAC0AAAAHAZEBev7G//8Akv33BBQGGAImAE0AAAAHAZEBGP7I//8AtgAABCUG4AImAC4AAAAHAHMANwEa//8AoQAAAkMHXAImAE4AAAAHAHMAJQGW//8Atv33BCUFsAImAC4AAAAHAZEBdP7I//8AW/33AVoGGAImAE4AAAAHAZH///7I//8AtgAABCUFsQImAC4AAAAHAZEB2QTF//8AoQAAAq0GGAAmAE4AAAAHAZEBVgUs//8AtgAABCUFsAImAC4AAAAHAJ0Bxf3F//8AoQAAAq0GGAAmAE4AAAAHAJ0BPv23//8AtgAABP4HHwImADAAAAAHAHMB/wFZ//8AkQAAA/gF3QImAFAAAAAHAHMBaQAX//8Atv33BP4FsAImADAAAAAHAZEB2P7I//8Akf33A/gETgImAFAAAAAHAZEBQv7I//8AtgAABP4HRwImADAAAAAHAJsBFwFe//8AkQAAA/gGBQImAFAAAAAHAJsAgQAc////0gAAA/gGGAImAFAAAAAHAZH/dgUs//8Agv/rBQ0HDwImADEAAAAHAG4A7gFf//8AYP/sBCcFuAImAFEAAAAGAG5tCAAA//8Agv/rBQ0HYQImADEAAAAHAJwBGwGx//8AYP/sBCcGCgImAFEAAAAHAJwAmgBa//8Agv/rBQ0HYAImADEAAAAHAKEBdwFy//8AYP/sBD4GCQImAFEAAAAHAKEA9gAb//8AtQAABOIHHwImADQAAAAHAHMBkgFZ//8AkQAAAuIF3QImAFQAAAAHAHMAxAAX//8Atf33BOIFrwImADQAAAAHAZEBa/7I//8AWP33ArEETgImAFQAAAAHAZH//P7I//8AtQAABOIHRwImADQAAAAHAJsAqgFe//8AaQAAAtQGBQImAFQAAAAGAJvdHAAA//8AWv/rBIoHNAImADUAAAAHAHMBiQFu//8AZv/sA8IF3QImAFUAAAAHAHMBPAAX//8AWv/rBIoHWwImADUAAAAHAJoAiwFy//8AZv/sA8IGBAImAFUAAAAGAJo+GwAA//8AWv5EBIoFxQImADUAAAAHAHcBjf/3//8AZv5FA8IETgImAFUAAAAHAHcBQP/4//8AWv3jBIoFxQImADUAAAAHAZEBYv60//8AZv3kA8IETgImAFUAAAAHAZEBFf61//8AWv/rBIoHXAImADUAAAAHAJsAoQFz//8AZv/sA8IGBQImAFUAAAAGAJtUHAAA//8AO/31BIoFsAImADYAAAAHAZEBZf7G//8AHf3tAk4FQQImAFYAAAAHAZEArP6+//8AO/5VBIoFsAImADYAAAAHAHcBkAAI//8AHf5NAoEFQQImAFYAAAAHAHcA1wAA//8AOwAABIoHRgImADYAAAAHAJsApAFd//8AHf/sAuwGMQAmAFYAAAAHAZEBlQVF//8Alv/rBNcHUQImADcAAAAHAKAA3AFg//8Ajf/sA/YF+gImAFcAAAAGAKBnCQAA//8Alv/rBNcG+gImADcAAAAHAG4A4AFK//8Ajf/sA/YFpAImAFcAAAAGAG5r9AAA//8Alv/rBNcHTAImADcAAAAHAJwBDQGc//8Ajf/sA/YF9QImAFcAAAAHAJwAmABF//8Alv/rBNcHiAImADcAAAAHAJ4BYwGo//8Ajf/sA/YGMQImAFcAAAAHAJ4A7gBR//8Alv/rBNcHSwImADcAAAAHAKEBaQFd//8Ajf/sBDwF9AImAFcAAAAHAKEA9AAGAAEAlv5uBNcFsAAnAAABERQGBw4BFRQWMzI2NxcOASMiJjU0NjciBiMiJDURMxEUFjMyNjURBNeRhFNYIysdLxgNIEo2V2kuMgcbBvT+3Lq9oanHBbD8JaXaOD1lPCQmEAx4ExliWzRhLAH48gPb/CWrqqqrA9sAAAEAjf5QBAkEOgAnAAAhDgEVFBYzMjY3Fw4BIyImNTQ2Ny8BDgEjIiY1ETMRFBYzMjY3ETMRA/VTWCMrHS8YDSBKNldpUFYMAzKebbTCumhxcIkkuT1lPCQmEAx4ExliW0R8NpsBV1zd9AJ9/YGyg1dTAwr7xgAA//8ASAAABsIHRgImADkAAAAHAJoBrQFd//8AMAAABdgF7wImAFkAAAAHAJoBLgAG//8AHgAABNMHRAImADsAAAAHAJoAogFb//8AG/5LA+QF7wImAFsAAAAGAJorBgAA//8AHgAABNMHCgImADsAAAAHAGgAfAFa//8AYQAABG0HHwImADwAAAAHAHMBiAFZ//8AXgAAA7gFyAImAFwAAAAHAHMBMwAC//8AYQAABG0HDQImADwAAAAHAJ0BWQFd//8AXgAAA7gFtgImAFwAAAAHAJ0BBAAG//8AYQAABG0HRwImADwAAAAHAJsAoAFe//8AXgAAA7gF8AImAFwAAAAGAJtLBwAA////8gAAB1cHHwImAH8AAAAHAHMC0QFZ//8APf/rBnwF3gImAIQAAAAHAHMCggAY//8Ac/+jBP4HXQImAIEAAAAHAHMB4gGX//8AYP95BCcF3AImAIcAAAAHAHMBQAAW////8wAABC0EjQImAakAAAAHAdP/ZP97////8wAABC0EjQImAakAAAAHAdP/ZP97//8ARwAAA88EjQImAbgAAAAGAdMx9wAA//8AKQAABIMF3wImAaYAAAAHAEIAvwAa//8AKQAABIMF3AImAaYAAAAHAHMBeQAW//8AKQAABIMGAwImAaYAAAAGAJp7GgAA//8AKQAABIMGDgImAaYAAAAGAKB1HQAA//8AKQAABIMFyQImAaYAAAAGAGhVGQAA//8AKQAABIMGRQImAaYAAAAHAJ4A/ABl//8AKQAABIMGXQImAaYAAAAHAdQBDP/q//8Acv5HBCQEnQImAagAAAAHAHcBb//6//8AmwAAA8cF3wImAaoAAAAHAEIAjgAa//8AmwAAA8cF3AImAaoAAAAHAHMBSAAW//8AmwAAA8cGAwImAaoAAAAGAJpKGgAA//8AmwAAA8cFyQImAaoAAAAGAGgkGQAA////swAAAVQF3wImAa4AAAAHAEL/ZAAa//8AmwAAAjsF3AImAa4AAAAGAHMdFgAA////yQAAAiYGAwImAa4AAAAHAJr/IAAa////owAAAkwFyQImAa4AAAAHAGj++gAZ//8AmwAABHIGDgImAbMAAAAHAKAAlgAd//8Acv/vBFcF7wImAbQAAAAHAEIAwAAq//8Acv/vBFcF7AImAbQAAAAHAHMBegAm//8Acv/vBFcGEwImAbQAAAAGAJp8KgAA//8Acv/vBFcGHgImAbQAAAAGAKB2LQAA//8Acv/vBFcF2QImAbQAAAAGAGhWKQAA//8AjP/vBHAF4AImAbkAAAAHAEIA4AAb//8AjP/vBHAF3QImAbkAAAAHAHMBmgAX//8AjP/vBHAGBAImAbkAAAAHAJoAnAAb//8AjP/vBHAFygImAbkAAAAGAGh2GgAA//8AIAAABDAF2wImAb0AAAAHAHMBSQAV//8AKQAABIMFtwImAaYAAAAGAG55BwAA//8AKQAABIMGCQImAaYAAAAHAJwApgBZAAIAKf5QBIMEjQAaAB0AAAEzASMOARUUFjMyNjcXDgEjIiY1NDY3JyEDIwEhAwH/rwHVN1NYIysdLxgNIEo2V2lcYWP9+GnAAWIBlswEjftzPWU8JCYQDHgTGWJbSYM4//7wAaQCDQD//wBy/+8EJAXsAiYBqAAAAAcAcwFrACb//wBy/+8EJAYTAiYBqAAAAAYAmm0qAAD//wBy/+8EJAXaAiYBqAAAAAcAnQE8ACr//wBy/+8EJAYUAiYBqAAAAAcAmwCDACv//wCbAAAELQYEAiYBqQAAAAYAmy8bAAD//wCbAAADxwW3AiYBqgAAAAYAbkgHAAD//wCbAAADxwYJAiYBqgAAAAYAnHVZAAD//wCbAAADxwXKAiYBqgAAAAcAnQEZABoAAQCb/lADxwSNACAAAAEhESEVIw4BFRQWMzI2NxcOASMiJjU0NjcnIREhFSERIQNw/eUCckhTWCMrHS8YDSBKNldpTVAB/cwDLP2OAhsCFf5+kz1lPCQmEAx4ExliW0N6MwMEjZT+sP//AJsAAAPHBgQCJgGqAAAABgCbYBsAAP//AHL/7wRHBhMCJgGsAAAABgCadSoAAP//AHL/7wRHBhkCJgGsAAAABwCcAKAAaf//AHL/7wRHBdoCJgGsAAAABwCdAUQAKv//AHL95wRHBJ0CJgGsAAAABwGRAVL+uP//AJsAAARVBgMCJgGtAAAABwCaAIMAGv///5wAAAJOBg4CJgGuAAAABwCg/xoAHf///5YAAAJgBbcCJgGuAAAABwBu/x4AB////8wAAAIjBgkCJgGuAAAABwCc/0sAWf////f+UAFXBI0CJgGuAAAABgCfxQAAAP//AI8AAAFeBcoCJgGuAAAABgCd7xoAAP//AEH/7wQ9BfkCJgGvAAAABwCaATcAEP//AJv98wRABI0CJgGwAAAABwGRAP/+xP//AJsAAANqBcECJgGxAAAABgBzI/sAAP//AJv99QNqBI0CJgGxAAAABwGRANz+xv//AJsAAANqBI4CJgGxAAAABwGRAUUDov//AJsAAANqBI0CJgGxAAAABwCdATH9Jv//AJsAAARyBdwCJgGzAAAABwBzAZoAFv//AJv99QRyBI0CJgGzAAAABwGRAXP+xv//AJsAAARyBgQCJgGzAAAABwCbALIAG///AHL/7wRXBccCJgG0AAAABgBuehcAAP//AHL/7wRXBhkCJgG0AAAABwCcAKcAaf//AHL/7wRXBhgCJgG0AAAABwChAQMAKv//AJsAAAQ6BdwCJgG2AAAABwBzASYAFv//AJv99QQ6BI0CJgG2AAAABwGRAP/+xv//AJsAAAQ6BgQCJgG2AAAABgCbPhsAAP//AF3/7wQNBewCJgG3AAAABwBzAVQAJv//AF3/7wQNBhMCJgG3AAAABgCaVioAAP//AF3+RwQNBJ0CJgG3AAAABwB3AVj/+v//AF3/7wQNBhQCJgG3AAAABgCbbCsAAP//AEf99QPPBI0CJgG4AAAABwGRAQP+xv//AEcAAAPPBgMCJgG4AAAABgCbQhoAAP//AIz/7wRwBg8CJgG5AAAABwCgAJYAHv//AIz/7wRwBbgCJgG5AAAABwBuAJoACP//AIz/7wRwBgoCJgG5AAAABwCcAMcAWv//AIz/7wRwBkYCJgG5AAAABwCeAR0AZv//AIz/7wRwBgkCJgG5AAAABwChASMAGwABAIz+ewRwBI0AJwAAAREUBgcOARUUFjMyNjcXDgEjIiY1NDY3IgYjIiQ1ETMRFBYzMjY1EQRwcGhTWCMrHS8YDSBKNldpKi0HGAbh/u+4rI6QqgSN/QF9sjQ9ZTwkJhAMeBMZYlsyWysB2McC//0BgIyMgAL/AP//AEEAAAXABgMCJgG7AAAABwCaASEAGv//ACAAAAQwBgICJgG9AAAABgCaSxkAAP//ACAAAAQwBcgCJgG9AAAABgBoJRgAAP//AE4AAAPYBdwCJgG+AAAABwBzAScAFv//AE4AAAPYBcoCJgG+AAAABwCdAPgAGv//AE4AAAPYBgQCJgG+AAAABgCbPxsAAP//AF3/7wh8BJ0AJgG3AAAABwG3BG8AAP//ACcAAAUiBngCJgAjAAAABgCpOgAAAP///+YAAATZBnoAJgAnZAAABwCp/yMAAv//ABMAAAVhBnoAJgAqZAAABwCp/1AAAv//ABkAAAHgBnkAJgArZAAABwCp/1YAAf//AFL/6wUhBngAJgAxFAAABgCpjwAAAP///40AAAU3BngAJgA7ZAAABwCp/soAAP//AD8AAAThBngAJgC1FAAABwCp/3wAAP///8j/6wKDBj8CJgC+AAAABwCq/yf/t///ACcAAAUiBbACBgAjAAD//wC2AAAEqQWwAgYAJAAA//8AtgAABHUFsAIGACcAAP//AGEAAARtBbACBgA8AAD//wC2AAAE/QWwAgYAKgAA//8AwwAAAXwFsAIGACsAAP//ALYAAAUcBbACBgAtAAD//wC2AAAGTQWwAgYALwAA//8AtgAABP4FsAIGADAAAP//AIL/6wUNBcUCBgAxAAD//wC2AAAExAWwAgYAMgAA//8AOwAABIoFsAIGADYAAP//AB4AAATTBbACBgA7AAD//wBBAAAE0AWwAgYAOgAA////zAAAAnUHDAImACsAAAAHAGj/IwFc//8AHgAABNMHCgImADsAAAAHAGgAfAFa//8AZP/rBHcGegImALYAAAAHAKkBdQAC//8AY//tA+wGeQImALoAAAAHAKkBKwAB//8Akf5hA/AGegImALwAAAAHAKkBRgAC//8Aw//rAmsGZgImAL4AAAAGAKkq7gAA//8Aj//rA/YGPwImAMYAAAAGAKoetwAA//8AmgAABD8EOgIGAIsAAP//AGD/7AQnBE4CBgBRAAD//wCa/mAD7gQ6AgYAdAAA//8ALgAAA98EOgIGAFgAAP//AC4AAAPPBDoCBgBaAAD////T/+sCfAW1AiYAvgAAAAcAaP8qAAX//wCP/+sD9gW1AiYAxgAAAAYAaCEFAAD//wBg/+wEJwZ6AiYAUQAAAAcAqQFKAAL//wCP/+sD9gZmAiYAxgAAAAcAqQEi/+7//wB6/+sGGQZjAiYAyQAAAAcAqQJT/+v//wC2AAAEdQcMAiYAJwAAAAcAaAB2AVz//wC1AAAEMAcfAiYArAAAAAcAcwGYAVkAAQBa/+sEigXFACUAAAE0JicuATU0JDMyABUjNCYjIgYVFBYXHgEVFAQjIiQ1MxQWMzI2A9CWx+z+ARPh8QEYuaykm6CpyOrt/uXr3/61udOenLABbmiFMTjQpa3f/v62hJ6FbmJ/MTvYp7PS6M+RkX4AAP//AMMAAAF8BbACBgArAAD////MAAACdQcMAiYAKwAAAAcAaP8jAVz//wA//+sDwAWwAgYALAAA//8AtgAABRwFsAIGAC0AAP//ALYAAAUcBscCJgAtAAAABwBzAYwBAf//AFH/6wTIB0wCJgDZAAAABwCcANoBnP//ACcAAAUiBbACBgAjAAD//wC2AAAEqQWwAgYAJAAA//8AtQAABDAFsAIGAKwAAP//ALYAAAR1BbACBgAnAAD//wC2AAAE/gdMAiYA1wAAAAcAnAExAZz//wC2AAAGTQWwAgYALwAA//8AtgAABP0FsAIGACoAAP//AIL/6wUNBcUCBgAxAAD//wC2AAAE/wWwAgYAsQAA//8AtgAABMQFsAIGADIAAP//AIP/6wTJBcUCBgAlAAD//wA7AAAEigWwAgYANgAA//8AQQAABNAFsAIGADoAAP//AHL/7APsBE4CBgBDAAD//wBi/+wD6QROAgYARwAA//8AnAAABAEF9QImAOsAAAAHAJwAogBF//8AYP/sBCcETgIGAFEAAP//AJH+YAQkBE4CBgBSAAAAAQBh/+wD8gROABsAACUyNjczDgEjIgI9ATQSMzIWFyMuASMiBh0BFBYCQ2eXAbAB/6/u9PTuv+8BsAGOcKGHhoF4XJTVAS/tKuwBMNysaIrfpyqr3AAA//8AG/5LA+QEOgIGAFsAAP//AC4AAAPPBDoCBgBaAAD//wBi/+wD6QXLAiYARwAAAAYAaDEbAAD//wCaAAADRwXIAiYA5wAAAAcAcwDVAAL//wBm/+wDwgROAgYAVQAA//8AoQAAAVoGGAIGAEsAAP///6UAAAJOBbUCJgCKAAAABwBo/vwABf///7b+SwFnBhgCBgBMAAD//wCcAAAEPwXHAiYA7AAAAAcAcwFDAAH//wAb/ksD5AX1AiYAWwAAAAYAnFZFAAD//wBIAAAGwgciAiYAOQAAAAcAQgHxAV3//wAwAAAF2AXLAiYAWQAAAAcAQgFyAAb//wBIAAAGwgcfAiYAOQAAAAcAcwKrAVn//wAwAAAF2AXIAiYAWQAAAAcAcwIsAAL//wBIAAAGwgcMAiYAOQAAAAcAaAGHAVz//wAwAAAF2AW1AiYAWQAAAAcAaAEIAAX//wAeAAAE0wcgAiYAOwAAAAcAQgDmAVv//wAb/ksD5AXLAiYAWwAAAAYAQm8GAAD//wBnBCMA/QYYAgYACQAA//8AaQQUAh8GGAIGAAQAAP//AKkAAAN1BbAAJgQbAAAABwQbAg8AAP//AEIAAAQYBi0AJgBIAAAABwBOAr4AAP///7T+SwJABd0CJgCYAAAABwCb/0n/9P//ADAD5wFHBhgCBgFmAAD//wC2AAAGTQcfAiYALwAAAAcAcwKpAVn//wCQAAAGcgXdAiYATwAAAAcAcwK7ABf//wAn/ocFIgWwAiYAIwAAAAcAogFPAAD//wBy/ocD7AROAiYAQwAAAAcAogCeAAD///8+/+sFDQaiAiYAMQAAAAcB1f7PAMz//wBCAAAGiwYtACYASAAAAAcBkgK+AAD//wBCAAAG1gYtACYASAAAACcASAK+AAAABwBOBXwAAP//ALYAAAR1ByICJgAnAAAABwBCAOABXf//ALYAAAT+ByICJgDXAAAABwBCAUoBXf//AGL/7APpBeECJgBHAAAABwBCAJsAHP//AJwAAAQBBcsCJgDrAAAABwBCALsABv//AF0AAAUYBbACBgC0AAD//wBf/ikFQwQ6AgYAyAAA//8AFwAABNoHRwImARQAAAAHAKcENwFZ////+QAABAsGHwImARUAAAAHAKcD0gAx//8AYP5LCGwETgAmAFEAAAAHAFsEiAAA//8Agv5LCXQFxQAmADEAAAAHAFsFkAAA//8AUf5RBGcFxQImANYAAAAHAZwBnP+4//8AWP5SA6wETAImAOoAAAAHAZwBQ/+5//8Ag/5RBMkFxQImACUAAAAHAZwB7v+4//8AYf5RA/IETgImAEUAAAAHAZwBWP+4//8AHgAABNMFsAIGADsAAP//AC7+YAPfBDoCBgC4AAD//wDDAAABfAWwAgYAKwAA//8AGwAABygHTAImANUAAAAHAJwB+AGc//8AFQAABgQF9QImAOkAAAAHAJwBjQBF//8AwwAAAXwFsAIGACsAAP//ACcAAAUiB0wCJgAjAAAABwCcAPsBnP//AHL/7APsBgoCJgBDAAAABgCcfVoAAP//ACcAAAUiBwwCJgAjAAAABwBoAKoBXP//AHL/7APsBcoCJgBDAAAABgBoLBoAAP////IAAAdXBbACBgB/AAD//wA9/+sGfAROAgYAhAAA//8AtgAABHUHTAImACcAAAAHAJwAxwGc//8AYv/sA+kGCwImAEcAAAAHAJwAggBb//8AX//rBRAG3gImAUEAAAAHAGgAfQEu//8AYv/sA+kETwIGAJkAAP//AGL/7APpBcsCJgCZAAAABgBoMRsAAP//ABsAAAcoBwwCJgDVAAAABwBoAacBXP//ABUAAAYEBbUCJgDpAAAABwBoATwABf//AFH/6wRnByECJgDWAAAABwBoAGEBcf//AFj/7QOsBckCJgDqAAAABgBoCBkAAP//ALYAAAT+BvoCJgDXAAAABwBuAQQBSv//AJwAAAQBBaQCJgDrAAAABgBudfQAAP//ALYAAAT+BwwCJgDXAAAABwBoAOABXP//AJwAAAQBBbUCJgDrAAAABgBoUQUAAP//AIL/6wUNByECJgAxAAAABwBoAMoBcf//AGD/7AQnBcoCJgBRAAAABgBoSRoAAP//AHP/6wT+BcUCBgESAAD//wBg/+wEJwROAgYBEwAA//8Ac//rBP4HBwImARIAAAAHAGgA0gFX//8AYP/sBCcF5gImARMAAAAGAGgyNgAA//8Asf/sBPYHIgImAOIAAAAHAGgAtwFy//8AZP/rA+AFygImAPoAAAAGAGgmGgAA//8AUf/rBMgG+gImANkAAAAHAG4ArQFK//8AG/5LA+QFpAImAFsAAAAGAG4p9AAA//8AUf/rBMgHDAImANkAAAAHAGgAiQFc//8AG/5LA+QFtQImAFsAAAAGAGgFBQAA//8AUf/rBMgHSwImANkAAAAHAKEBNgFd//8AG/5LA/oF9AImAFsAAAAHAKEAsgAG//8AlwAABMQHDAImANwAAAAHAGgAswFc//8AZwAAA70FtQImAPQAAAAGAGgOBQAA//8AtQAABjUHDAAmAOEPAAAnACsEuQAAAAcAaAF9AVz//wCdAAAFfwW1ACYA+QAAACcAigQqAAAABwBoARcABf//AEH+SwUXBbACJgA6AAAABwGaA7AAAP//AC7+SwQfBDoCJgBaAAAABwGaArgAAP//AGT/7APwBhgCBgBGAAD//wAw/ksFrAWwAiYA2AAAAAcBmgRFAAD//wAo/ksEuwQ6AiYA7QAAAAcBmgNUAAD//wAn/rEFIgWwAiYAIwAAAAcAqAUBAAD//wBy/rED7AROAiYAQwAAAAcAqARQAAD//wAnAAAFIgfGAiYAIwAAAAcApgT1AVP//wBy/+wD7AaEAiYAQwAAAAcApgR3ABH//wAnAAAFIgeoAiYAIwAAAAcBowDKARb//wBy/+wEpAZnAiYAQwAAAAYBo0zVAAD//wAnAAAFIgelAiYAIwAAAAcBogDOASX///+u/+wD7AZkAiYAQwAAAAYBolDkAAD//wAnAAAFIgfbAiYAIwAAAAcBoQDPAQ3//wBy/+wEPQaaAiYAQwAAAAYBoVHMAAD//wAnAAAFIgflAiYAIwAAAAcBoADOARP//wBy/+wD7AakAiYAQwAAAAYBoFDSAAD//wAn/rEFIgdGAiYAIwAAACcAmgDQAV0ABwCoBQEAAP//AHL+sQPsBgQCJgBDAAAAJgCaUhsABwCoBFAAAAAA//8AJwAABSIH3QImACMAAAAHAZ8A8QFU//8Acv/sA+wGmwImAEMAAAAGAZ9zEgAA//8AJwAABSIH4AImACMAAAAHAaQA9QFn//8Acv/sA+wGngImAEMAAAAGAaR3JQAA//8AJwAABSIISwImACMAAAAHAZ4A9QFJ//8Acv/sA+wHCQImAEMAAAAGAZ53BwAA//8AJwAABSIIHwImACMAAAAHAZ0A9QFR//8Acv/sA+wG3QImAEMAAAAGAZ13DwAA//8AJ/6xBSIHTAImACMAAAAnAJwA+wGcAAcAqAUBAAD//wBy/rED7AYKAiYAQwAAACYAnH1aAAcAqARQAAAAAP//ALb+uwR1BbACJgAnAAAABwCoBMgACv//AGL+sQPpBE4CJgBHAAAABwCoBJIAAP//ALYAAAR1B8YCJgAnAAAABwCmBMEBU///AGL/7APpBoUCJgBHAAAABwCmBHwAEv//ALYAAAR1B1ECJgAnAAAABwCgAJYBYP//AGL/7APpBhACJgBHAAAABgCgUR8AAP//ALYAAATuB6gCJgAnAAAABwGjAJYBFv//AGL/7ASpBmgCJgBHAAAABgGjUdYAAP////gAAAR1B6UCJgAnAAAABwGiAJoBJf///7P/7APpBmUCJgBHAAAABgGiVeUAAP//ALYAAASHB9sCJgAnAAAABwGhAJsBDf//AGL/7ARCBpsCJgBHAAAABgGhVs0AAP//ALYAAAR1B+UCJgAnAAAABwGgAJoBE///AGL/7APpBqUCJgBHAAAABgGgVdMAAP//ALb+uwR1B0YCJgAnAAAAJwCaAJwBXQAHAKgEyAAK//8AYv6xA+kGBQImAEcAAAAmAJpXHAAHAKgEkgAAAAD//wDDAAACAQfGAiYAKwAAAAcApgNtAVP//wCbAAAB2gZwAiYAigAAAAcApgNG//3//wC3/rkBhgWwAiYAKwAAAAcAqAN0AAj//wCW/rsBZQYYAiYASwAAAAcAqANTAAr//wCC/qkFDQXFAiYAMQAAAAcAqAUd//j//wBg/qgEJwROAiYAUQAAAAcAqASb//f//wCC/+sFDQfbAiYAMQAAAAcApgUVAWj//wBg/+wEJwaEAiYAUQAAAAcApgSUABH//wCC/+sFQge9AiYAMQAAAAcBowDqASv//wBg/+wEwQZnAiYAUQAAAAYBo2nVAAD//wBM/+sFDQe6AiYAMQAAAAcBogDuATr////L/+wEJwZkAiYAUQAAAAYBom3kAAD//wCC/+sFDQfwAiYAMQAAAAcBoQDvASL//wBg/+wEWgaaAiYAUQAAAAYBoW7MAAD//wCC/+sFDQf6AiYAMQAAAAcBoADuASj//wBg/+wEJwakAiYAUQAAAAYBoG3SAAD//wCC/qkFDQdbAiYAMQAAACcAmgDwAXIABwCoBR3/+P//AGD+qAQnBgQCJgBRAAAAJgCabxsABwCoBJv/9wAA//8Acf/rBZ0HDwImAJQAAAAHAHMB5gFJ//8AYP/sBLoF3QImAJUAAAAHAHMBbQAX//8Acf/rBZ0HEgImAJQAAAAHAEIBLAFN//8AYP/sBLoF4AImAJUAAAAHAEIAswAb//8Acf/rBZ0HtgImAJQAAAAHAKYFDQFD//8AYP/sBLoGhAImAJUAAAAHAKYElAAR//8Acf/rBZ0HQQImAJQAAAAHAKAA4gFQ//8AYP/sBLoGDwImAJUAAAAGAKBpHgAA//8Acf6xBZ0GNgImAJQAAAAHAKgFCQAA//8AYP6oBLoEsAImAJUAAAAHAKgEm//3//8Alv6qBNcFsAImADcAAAAHAKgFDP/5//8Ajf6xA/YEOgImAFcAAAAHAKgEVwAA//8Alv/rBNcHxgImADcAAAAHAKYFBwFT//8Ajf/sA/YGcAImAFcAAAAHAKYEkv/9//8Alv/rBiYHHwImAJYAAAAHAHMB3QFZ//8Ajf/sBRAFyAImAJcAAAAHAHMBawAC//8Alv/rBiYHIgImAJYAAAAHAEIBIwFd//8Ajf/sBRAFywImAJcAAAAHAEIAsQAG//8Alv/rBiYHxgImAJYAAAAHAKYFBAFT//8Ajf/sBRAGcAImAJcAAAAHAKYEkv/9//8Alv/rBiYHUQImAJYAAAAHAKAA2QFg//8Ajf/sBRAF+gImAJcAAAAGAKBnCQAA//8Alv6pBiYGDQImAJYAAAAHAKgFCf/4//8Ajf6xBRAEkQImAJcAAAAHAKgEVwAA//8AHv67BNMFsAImADsAAAAHAKgEzgAK//8AG/4UA+QEOgImAFsAAAAHAKgFIv9j//8AHgAABNMHxAImADsAAAAHAKYExwFR//8AG/5LA+QGcAImAFsAAAAHAKYEUP/9//8AHgAABNMHTwImADsAAAAHAKAAnAFe//8AG/5LA+QF+gImAFsAAAAGAKAlCQAAAAIAZP/sBLEGGAAaACgAAAEjESMnDgEjIgI9ARASMzIWFzcRITUhNTMVMwEUFjMyNjcRLgEjIgYVBLHBoRA2mGnJ29rMZJI0A/7+AQK5wfxsh5JeeikofFuTiATS+y6HTk0BGu8VAQoBOkhGAQERlbGx/I6qxVJMAfZIUurAAAD//wBk/u4EsQYYACYARgAAACcB0wGmAkYABwBBAKP/g///ALb+mQVbBbACJgAtAAAABwGcBDoAAP//AJz+mQRpBDoCJgDsAAAABwGcA0gAAP//ALb+mQWHBbACJgAqAAAABwGcBGYAAP//AJz+mQSKBDoCJgDvAAAABwGcA2kAAP//ADv+mQSKBbACJgA2AAAABwGcAigAAP//ACj+mQOwBDoCJgDxAAAABwGcAa4AAP//AEH+mQTpBbACJgA6AAAABwGcA8gAAP//AC7+mQPxBDoCJgBaAAAABwGcAtAAAP//AJf+mQVOBbACJgDcAAAABwGcBC0AAP//AGf+mQRGBDsCJgD0AAAABwGcAyUAAP//AJf+mQTEBbACJgDcAAAABwGcAxkAAP//AGf+mQO9BDsCJgD0AAAABwGcAhAAAP//ALX+mQQwBbACJgCsAAAABwGcANcAAP//AJr+mQNHBDoCJgDnAAAABwGcAJ4AAP//ABv+mQdqBbACJgDVAAAABwGcBkkAAP//ABX+mQYlBDoCJgDpAAAABwGcBQQAAP//AEf+VAXABcMCJgE7AAAABwGcAwb/u////+P+WARZBE4CJgE8AAAABwGcAgH/v///AJEAAAP6BhgCBgBKAAAAAv/UAAAEsQWwABIAGwAAASMVITIWFRQGIyERIzUzNTMVMwMRITI2NTQmIwJQ8QFo7vz97f3f0tK58fEBaJyUlJwEUPjhx8joBFCVy8v93v3Sn355mAAAAAL/1AAABLEFsAASABsAAAEjFSEyFhUUBiMhESM1MzUzFTMDESEyNjU0JiMCUPEBaO78/e3939LSufHxAWiclJScBFD44cfI6ARQlcvL/d790p9+eZgAAAABAAMAAAQwBbAADQAAASERIxEjNTMRIRUhESECf/7vubKyA3v9PgERAqz9VAKslQJvlv4nAAAAAAH//AAAA0cEOgANAAABIREjESM1MxEhFSERIQJ4/ty6np4Crf4NASQB3/4hAd+VAcaX/tEAAAAAAf/1AAAFMAWwABQAAAEjESMRIzUzNTMVMxUjETMBMwkBIwIzsLnV1bnu7p8CEdT9wwJm4wKU/WwEhZWWlpX+pAKH/T79EgAAAf/YAAAEKAYYABQAAAEjESMRIzUzNTMVMxUjETMBMwkBIwHhgbrOzrr09H4BO9v+hgGu2wH2/goEwZXCwpX9zAGt/hP9swD//wC2/ooFtwdMAiYA1wAAACcAnAExAZwABwAOBIP/vv//AJz+igS6BfUCJgDrAAAAJwCcAKIARQAHAA4Dhv++//8Atv6KBbYFsAImACoAAAAHAA4Egv++//8AnP6KBLkEOgImAO8AAAAHAA4Dhf++//8Atv6KBwYFsAImAC8AAAAHAA4F0v++//8Anf6KBgsEOgImAO4AAAAHAA4E1/++//8AMP6KBa0FsAImANgAAAAHAA4Eef++//8AKP6KBLwEOgImAO0AAAAHAA4DiP++AAEAHgAABNMFsAAQAAAJATMBMxUjBxEjEScjNTMBMwJ4AYfU/ld+zwi4Aeya/ljUAr4C8vz2lQ/9/gIPApUDCgABAC7+YAPfBDoAEQAABSMRIxEjNTMBMwEXMzcBMwEzA0rmutzB/p+9AQcWAxcBAL3+oskM/mwBlJUDsf0AXl4DAPxPAAEAQQAABNAFsAARAAABIwEjCQEjASM1MwEzCQEzATMDzbABs9z+lv6X4AGyopX+Zt4BXAFg3/5lowKe/WICSP24Ap6VAn39wwI9/YMAAAAAAQAuAAADzwQ6ABEAAAEjASMLASMBIzUzATMbATMBMwM+rwFA1fr62AFBraL+1dbt8Nj+1qQB4f4fAZ7+YgHhlQHE/m0Bk/48AAAA//8AY//tA+wETAIGALoAAP//ABsAAARzBbACJgAoAAAABwHT/4z+fv//ALsCjAXzAyEARgGGrwBmZkAAAAIAqQAAAWYFsAADAAcAAAEjETMTIzUzAWS5uQK9vQHeA9L6UMgAAAAAAAAAAAAAAAAAGgBSAJIA6AFAAVABcgGWAboB0gHoAfYCAgIQAkACUAJ6ArQC1AMGA0YDZAOuA/AD/AQIBCAENARMBHwE8AUMBUIFdAWaBbQFygYABhgGJAZABlwGbAaQBqgG3gcCB0AHeAeyB8YH5gf+CCoISghiCHgIjAiaCKwIxAjSCOAJHglUCYAJtAnmCgoKTgpyCoQKqArECtALCgsuC1wLkgvGC+YMHgxEDGgMgAyqDMgM8g0IDTgNRg10DZ4Nsg3mDhoOZg6QDqQPCA8cD3IPsg++D84QMhBAEGYQhhCwEOoQ+BEgETYRRBFgEXIRnBGoEboRzBHeEg4SOBJaEqwS0hMME2gTthPQFBwUUhR8FIgUpBTAFNgVAhU2FXQVyBXkFhoWXBaWFsAW7hcMF0AXVBdoF4IXkBe2F9gX+BgOGDQYQhhQGFoYeBiOGJwYqhjEGMwY3hj0GTAZRhliGXQZkhnQGfoaNBp4Grga1BscG1YbjhuyG+ocCBw+HIgcsBzkHRgdTh1yHZgd1h4IHkgehB7AHwYfNB9qH6If0h/6IBIgOiBmIJIgziDmIQYhLiFwIYghqiHEIeQiDCI2IloijiLMIvYjOCNuI4AjqiPWJBAkKCREJGYkhCScJK4kwiUcJTQlViVwJZAluCXkJggmNiZuJpgm1icGJzwnbCeaJ7Qn5igYKEYohCi8KN4pBCkyKWIpoCnUKhwqXCqsKvorNitqK44rtiv4LDQslCz0LTItcC2cLcQt8C4ELiIuMi5CLtwvNC9iL44vzC/iL/gwIDBIMG4wlDC0MNQw8DEMMTYxYDG2MggyJjJEMm4yljK4MvozNjNgM4gzsDPYNBA0PDRoNHg0iDSsNOI1NjV6NcA2ADZCNnw2tDbqNxw3WDeON7437DgqOCo4KjgqOCo4KjgqOCo4KjgqOCo4KjgqODQ4PjhKOGA4djiMOJg4pDiwONQ47jkSOSo5NjlGOcI51jnsOfo6Gjo8Ong6ujr4O047iDvMO/Y8LDw+PFA8Yjx0PK48wjzgPO49CD1aPYg94D4GPhY+Jj5MPlo+bj6EPq4+rj+IP85AAEAgQFBAbkCKQKxAukDsQRxBPEFqQZJBrEHGQeZB9kISQkhCdkKaQrRCykL8QxRDIEM8Q1hDaEOIQ6JD0EQGRD5EdkSKRKpEwkTqRQpFIkU4RWRFdEWeRdhF+EYiRl5GekbCRv5HDkc2R3BHgEewR+xIBkhOSIpItEjCSPBJEElKSWpJnEncSkpKaEqmSvBLKEtuS5RL0kv+TBxMOkxWTHJMtEzYTOBM6EzwTSBNUE1+TZpNyE3UTeBN7E34TgROEE4cTihONE5ATkxOWE5kTnBOfE6ITpROoE6sTrhOxE7QTtxO6E70TwBPDE8YTyRPME88T0hPVE9gT2xPeE+ET5BPnE+oT7RPwE/MT9hP5E/wT/xQCFAUUCBQLFA4UERQUFBcUGhQdFCAUIxQwFEYUSRRMFE8UUhRVFFgUWxReFGEUZBRnFGoUbRRwFHMUdhSDFJYUmRScFJ8UohSlFKgUqxSuFLEUtBS3FLoUvRTAFMMUxhTJFMwUzxTSFNUU2BTbFN4U4RTkFOcU6hTtFPAU8xT2FPkU/BT/FQIVBRUIFQsVDhURFRQVFxUaFR0VIBUjFSYVKRUsFS8VMhU1FTgVOxU+FUEVRBVHFUoVTRVQFVMVVhVZFVwVXxViFWUVaBVrFW4VcRV0FXcVehV9FYAVgxWGFZUVpBWnFaoVrRWwFbMVthW5FbwVvxXCFcUVyBXLFc4V0RXUFdcV2hXdFeAV4xXmFekV7BXvFfIV9RX4FfsV/hYBFgQWBxYKFg0WEBYTFhYWGRYcFh8WIhYlFigWKxYuFjEWPhZBFkQWRxZKFk0WUBZTFlYWYxZmFmkWbBZvFnIWdRZ4FnsWfhaBFoQWhxaKFo0WkBaTFpYWmRacFp8WohalFqgWqxauFrEWtBa3FroWvRbAFsMWxhbJFswWzxbSFuEW5BbnFuoW7RbwFvMW9hb5FvwW/xcCFwUXCBcLFw4XEBcSFxQXFhcYFxoXHBceFyAXIhckFyYXKBcqFy0XMBczFzYXORc8Fz8XQRdDF0UXRxdJF0wXTxdSF1UXWBdbF14XbJdul3GXc5d1l3iXe5d9l3+XgZeDl4aXiJeKl4yXjpeQl5KXlJeWl5iXmpedl5+XoZesl66XsJezl7aXuJe6l72Xv5fCl8WXyJfLl86X0ZfUl9eX2pfdl9+X4Zfkl+eX6pfsl++X8pf1l/iX+5f+mAKYBZgImAuYDpgQmBKYFZgYmBuYHpghmCSYJ5gqmCyYLpgwmDOYNpg4mDuYPphBmESYRphImEuYTphRmFOYVphZmFyYX5himGWYaJhrmG6YcZh0mHaYeJh7mH6YgZiEmIeYipiNmJCYk5iWmJmYnJigmKSYp5iqmKyYr5iymLWYuJi7mL6YwZjEmMeYypjNmNCY05jWmNqY3pjhmOSY55jqmO2Y8JjzmPaY+pj+mQGZBJkHmQqZDZkQmROZFpkZmRyZH5kimSWZKJksmTCZM5k2mTmZPJk/mUKZRZlImUuZTplRmVSZV5lamV2ZYJlkmWiZa5lumXGZdJl3mXqZfZmAmYOZhpmJmYyZj5mSmZWZmJmbmZ6ZoZmkmaeZqpmtmbCZs5m2mbmZvJm/mcKZ0pnWmdmZ3JnfmeKZ5ZnomeuZ7pnxmfSZ95n6mf2aAJoDmgaaCZoMmg6aGZokmiuaMpo7mkSaSJpMmk+aUppVmliaW5pemmaabxp5GoKahJqHmooaihqPAAAAAAAGwFKAAEAAAAAAAAAHwAAAAEAAAAAAAEABgAfAAEAAAAAAAIABwAlAAEAAAAAAAMAEgAsAAEAAAAAAAQADgA+AAEAAAAAAAUAFgBMAAEAAAAAAAYADgBiAAEAAAAAAAcAIABwAAEAAAAAAAkABgCQAAEAAAAAAAsACgCWAAEAAAAAAAwAEwCgAAEAAAAAAA0ALgCzAAEAAAAAAA4AKgDhAAEAAAAAABIADgELAAMAAQQJAAAAPgEZAAMAAQQJAAEADAFXAAMAAQQJAAIADgFjAAMAAQQJAAMAJAFxAAMAAQQJAAQAHAGVAAMAAQQJAAUALAGxAAMAAQQJAAYAHAHdAAMAAQQJAAcAQAH5AAMAAQQJAAkADAI5AAMAAQQJAAsAFAJFAAMAAQQJAAwAJgJZAAMAAQQJAA0AXAJ/AAMAAQQJAA4AVALbRm9udCBkYXRhIGNvcHlyaWdodCBHb29nbGUgMjAxM1JvYm90b1JlZ3VsYXJHb29nbGU6Um9ib3RvOjIwMTNSb2JvdG8gUmVndWxhclZlcnNpb24gMS4yMDAzMTA7IDIwMTNSb2JvdG8tUmVndWxhclJvYm90byBpcyBhIHRyYWRlbWFyayBvZiBHb29nbGUuR29vZ2xlR29vZ2xlLmNvbUNocmlzdGlhbiBSb2JlcnRzb25MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4waHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wUm9ib3RvIFJlZ3VsYXIARgBvAG4AdAAgAGQAYQB0AGEAIABjAG8AcAB5AHIAaQBnAGgAdAAgAEcAbwBvAGcAbABlACAAMgAwADEAMwBSAG8AYgBvAHQAbwBSAGUAZwB1AGwAYQByAEcAbwBvAGcAbABlADoAUgBvAGIAbwB0AG8AOgAyADAAMQAzAFIAbwBiAG8AdABvACAAUgBlAGcAdQBsAGEAcgBWAGUAcgBzAGkAbwBuACAAMQAuADIAMAAwADMAMQAwADsAIAAyADAAMQAzAFIAbwBiAG8AdABvAC0AUgBlAGcAdQBsAGEAcgBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUARwBvAG8AZwBsAGUALgBjAG8AbQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAAAAAAgAAAAAAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAQcAAABAgACAAMABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAowCEAIUAvQCWAOgAhgCOAIsAnQCpAKQAigEDAIMAkwDyAPMAjQCXAIgBBADeAPEAngCqAPUA9AD2AKIAkADwAJEA7QCJAKAA6gC4AKEA7gEFANcBBgDiAOMBBwEIALAAsQEJAKYBCgELAQwBDQEOAQ8A2ADhANsA3ADdAOAA2QDfARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIAnwEjASQBJQEmAScBKAEpASoBKwEsAS0AmwEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNALIAswHOALYAtwDEAc8AtAC1AMUAggDCAIcB0ACrAMYAvgC/ALwB0QHSAdMB1AHVAdYB1wHYAIwB2QHaAdsB3AHdAJgAmgCZAO8ApQCSAJwApwCPAJQAlQC5Ad4B3wHgAMAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcArAI4AjkA6QI6AjsCPACtAMkAxwCuAGIAYwI9AGQAywBlAMgAygDPAMwAzQDOAGYA0wDQANEArwBnANYA1ADVAGgA6wBqAGkAawBtAGwAbgI+AG8AcQBwAHIAcwB1AHQAdgB3AHgAegB5AHsAfQB8AH8AfgCAAIEA7AC6Aj8CQAJBAkICQwJEAP0A/gJFAkYCRwJIAP8BAAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYA+AD5AlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooA+wD8AosCjADkAOUCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogC7AqMCpAKlAqYA5gDnAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEA9wQiBCMABAd1bmkwMDA5Bm1hY3Jvbg5wZXJpb2RjZW50ZXJlZARIYmFyDGtncmVlbmxhbmRpYwNFbmcDZW5nBWxvbmdzBU9ob3JuBW9ob3JuBVVob3JuBXVob3JuB3VuaTAyMzcFc2Nod2EHdW5pMDJGMwlncmF2ZWNvbWIJYWN1dGVjb21iCXRpbGRlY29tYgRob29rB3VuaTAzMEYIZG90YmVsb3cFdG9ub3MNZGllcmVzaXN0b25vcwlhbm90ZWxlaWEFR2FtbWEFRGVsdGEFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hA1BoaQNQc2kFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEGbGFtYmRhAnhpA3JobwZzaWdtYTEFc2lnbWEDdGF1B3Vwc2lsb24DcGhpA3BzaQVvbWVnYQd1bmkwM0QxB3VuaTAzRDIHdW5pMDNENgd1bmkwNDAyB3VuaTA0MDQHdW5pMDQwOQd1bmkwNDBBB3VuaTA0MEIHdW5pMDQwRgd1bmkwNDExB3VuaTA0MTQHdW5pMDQxNgd1bmkwNDE3B3VuaTA0MTgHdW5pMDQxQgd1bmkwNDIzB3VuaTA0MjQHdW5pMDQyNgd1bmkwNDI3B3VuaTA0MjgHdW5pMDQyOQd1bmkwNDJBB3VuaTA0MkIHdW5pMDQyQwd1bmkwNDJEB3VuaTA0MkUHdW5pMDQyRgd1bmkwNDMxB3VuaTA0MzIHdW5pMDQzMwd1bmkwNDM0B3VuaTA0MzYHdW5pMDQzNwd1bmkwNDM4B3VuaTA0M0EHdW5pMDQzQgd1bmkwNDNDB3VuaTA0M0QHdW5pMDQzRgd1bmkwNDQyB3VuaTA0NDQHdW5pMDQ0Ngd1bmkwNDQ3B3VuaTA0NDgHdW5pMDQ0OQd1bmkwNDRBB3VuaTA0NEIHdW5pMDQ0Qwd1bmkwNDREB3VuaTA0NEUHdW5pMDQ0Rgd1bmkwNDUyB3VuaTA0NTQHdW5pMDQ1OQd1bmkwNDVBB3VuaTA0NUIHdW5pMDQ1Rgd1bmkwNDYwB3VuaTA0NjEHdW5pMDQ2Mwd1bmkwNDY0B3VuaTA0NjUHdW5pMDQ2Ngd1bmkwNDY3B3VuaTA0NjgHdW5pMDQ2OQd1bmkwNDZBB3VuaTA0NkIHdW5pMDQ2Qwd1bmkwNDZEB3VuaTA0NkUHdW5pMDQ2Rgd1bmkwNDcyB3VuaTA0NzMHdW5pMDQ3NAd1bmkwNDc1B3VuaTA0N0EHdW5pMDQ3Qgd1bmkwNDdDB3VuaTA0N0QHdW5pMDQ3RQd1bmkwNDdGB3VuaTA0ODAHdW5pMDQ4MQd1bmkwNDgyB3VuaTA0ODMHdW5pMDQ4NAd1bmkwNDg1B3VuaTA0ODYHdW5pMDQ4OAd1bmkwNDg5B3VuaTA0OEQHdW5pMDQ4RQd1bmkwNDhGB3VuaTA0OTAHdW5pMDQ5MQd1bmkwNDk0B3VuaTA0OTUHdW5pMDQ5Qwd1bmkwNDlEB3VuaTA0QTAHdW5pMDRBMQd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEI0B3VuaTA0QjUHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQwd1bmkwNEJEB3VuaTA0QzMHdW5pMDRDNAd1bmkwNEM3B3VuaTA0QzgHdW5pMDREOAd1bmkwNEUwB3VuaTA0RTEHdW5pMDRGQQd1bmkwNEZCB3VuaTA1MDAHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEINdW5kZXJzY29yZWRibA1xdW90ZXJldmVyc2VkB3VuaTIwMjUHdW5pMjA3NAluc3VwZXJpb3IEbGlyYQZwZXNldGEERXVybwd1bmkyMTA1B3VuaTIxMTMHdW5pMjExNgllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMKY29sb24ubG51bQlxdW90ZWRibHgLY29tbWFhY2NlbnQHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQJZml2ZS5zbWNwCGZvdXIuc3VwCXplcm8ubG51bQ5sYXJnZXJpZ2h0aG9vawxjeXJpbGxpY2hvb2sQY3lyaWxsaWNob29rbGVmdAtjeXJpbGxpY3RpYw5icmV2ZXRpbGRlY29tYg1icmV2ZWhvb2tjb21iDmJyZXZlYWN1dGVjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWITY2lyY3VtZmxleGFjdXRlY29tYg5icmV2ZWdyYXZlY29tYhFjb21tYWFjY2VudHJvdGF0ZQZBLnNtY3AGQi5zbWNwBkMuc21jcAZELnNtY3AGRS5zbWNwBkYuc21jcAZHLnNtY3AGSC5zbWNwBkkuc21jcAZKLnNtY3AGSy5zbWNwBkwuc21jcAZNLnNtY3AGTi5zbWNwBk8uc21jcAZRLnNtY3AGUi5zbWNwBlMuc21jcAZULnNtY3AGVS5zbWNwBlYuc21jcAZXLnNtY3AGWC5zbWNwBlkuc21jcAZaLnNtY3AJemVyby5zbWNwCG9uZS5zbWNwCHR3by5zbWNwCnRocmVlLnNtY3AJZm91ci5zbWNwCHR3by5sbnVtCHNpeC5zbWNwCnNldmVuLnNtY3AKZWlnaHQuc21jcAluaW5lLnNtY3AHb25lLnN1cAd0d28uc3VwCXRocmVlLnN1cAhvbmUubG51bQhmaXZlLnN1cAdzaXguc3VwCXNldmVuLnN1cAllaWdodC5zdXAIbmluZS5zdXAIemVyby5zdXAIY3Jvc3NiYXIJcmluZ2FjdXRlCWRhc2lhb3hpYQp0aHJlZS5sbnVtCWZvdXIubG51bQlmaXZlLmxudW0Ic2l4LmxudW0FZy5hbHQKc2V2ZW4ubG51bQdjaGkuYWx0CmVpZ2h0LmxudW0JYWxwaGEuYWx0CWRlbHRhLmFsdARELmNuBGEuY24FUi5hbHQFSy5hbHQFay5hbHQGSy5hbHQyBmsuYWx0MgluaW5lLmxudW0GUC5zbWNwDWN5cmlsbGljYnJldmUHdW5pMDBBRAZEY3JvYXQEaGJhcgRUYmFyBHRiYXIKQXJpbmdhY3V0ZQphcmluZ2FjdXRlB0FtYWNyb24HYW1hY3JvbgZBYnJldmUGYWJyZXZlB0FvZ29uZWsHYW9nb25lawtDY2lyY3VtZmxleAtjY2lyY3VtZmxleAd1bmkwMTBBB3VuaTAxMEIGRGNhcm9uBmRjYXJvbgdFbWFjcm9uB2VtYWNyb24GRWJyZXZlBmVicmV2ZQpFZG90YWNjZW50CmVkb3RhY2NlbnQHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24LR2NpcmN1bWZsZXgLZ2NpcmN1bWZsZXgHdW5pMDEyMAd1bmkwMTIxDEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsKSWRvdGFjY2VudAJJSgJpagtKY2lyY3VtZmxleAtqY2lyY3VtZmxleAxLY29tbWFhY2NlbnQMa2NvbW1hYWNjZW50BkxhY3V0ZQZsYWN1dGUMTGNvbW1hYWNjZW50DGxjb21tYWFjY2VudAZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlDE5jb21tYWFjY2VudAxuY29tbWFhY2NlbnQGTmNhcm9uBm5jYXJvbgtuYXBvc3Ryb3BoZQdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAd1bmkwMjE4B3VuaTAyMTkHdW5pMDIxQQd1bmkwMjFCB3VuaTAxNjIHdW5pMDE2MwZUY2Fyb24GdGNhcm9uBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUFVXJpbmcFdXJpbmcNVWh1bmdhcnVtbGF1dA11aHVuZ2FydW1sYXV0B1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAdBRWFjdXRlB2FlYWN1dGULT3NsYXNoYWN1dGULb3NsYXNoYWN1dGULRGNyb2F0LnNtY3AIRXRoLnNtY3AJVGJhci5zbWNwC0FncmF2ZS5zbWNwC0FhY3V0ZS5zbWNwEEFjaXJjdW1mbGV4LnNtY3ALQXRpbGRlLnNtY3AOQWRpZXJlc2lzLnNtY3AKQXJpbmcuc21jcA9BcmluZ2FjdXRlLnNtY3ANQ2NlZGlsbGEuc21jcAtFZ3JhdmUuc21jcAtFYWN1dGUuc21jcBBFY2lyY3VtZmxleC5zbWNwDkVkaWVyZXNpcy5zbWNwC0lncmF2ZS5zbWNwC0lhY3V0ZS5zbWNwEEljaXJjdW1mbGV4LnNtY3AOSWRpZXJlc2lzLnNtY3ALTnRpbGRlLnNtY3ALT2dyYXZlLnNtY3ALT2FjdXRlLnNtY3AQT2NpcmN1bWZsZXguc21jcAtPdGlsZGUuc21jcA5PZGllcmVzaXMuc21jcAtVZ3JhdmUuc21jcAtVYWN1dGUuc21jcBBVY2lyY3VtZmxleC5zbWNwDlVkaWVyZXNpcy5zbWNwC1lhY3V0ZS5zbWNwDEFtYWNyb24uc21jcAtBYnJldmUuc21jcAxBb2dvbmVrLnNtY3ALQ2FjdXRlLnNtY3AQQ2NpcmN1bWZsZXguc21jcAx1bmkwMTBBLnNtY3ALQ2Nhcm9uLnNtY3ALRGNhcm9uLnNtY3AMRW1hY3Jvbi5zbWNwC0VicmV2ZS5zbWNwD0Vkb3RhY2NlbnQuc21jcAxFb2dvbmVrLnNtY3ALRWNhcm9uLnNtY3AQR2NpcmN1bWZsZXguc21jcAtHYnJldmUuc21jcAx1bmkwMTIwLnNtY3ARR2NvbW1hYWNjZW50LnNtY3AQSGNpcmN1bWZsZXguc21jcAtJdGlsZGUuc21jcAxJbWFjcm9uLnNtY3ALSWJyZXZlLnNtY3AMSW9nb25lay5zbWNwD0lkb3RhY2NlbnQuc21jcBBKY2lyY3VtZmxleC5zbWNwEUtjb21tYWFjY2VudC5zbWNwC0xhY3V0ZS5zbWNwEUxjb21tYWFjY2VudC5zbWNwC0xjYXJvbi5zbWNwCUxkb3Quc21jcAtOYWN1dGUuc21jcBFOY29tbWFhY2NlbnQuc21jcAtOY2Fyb24uc21jcAxPbWFjcm9uLnNtY3ALT2JyZXZlLnNtY3AST2h1bmdhcnVtbGF1dC5zbWNwC1JhY3V0ZS5zbWNwEVJjb21tYWFjY2VudC5zbWNwC1JjYXJvbi5zbWNwC1NhY3V0ZS5zbWNwEFNjaXJjdW1mbGV4LnNtY3ANU2NlZGlsbGEuc21jcAtTY2Fyb24uc21jcBFUY29tbWFhY2NlbnQuc21jcAtUY2Fyb24uc21jcAtVdGlsZGUuc21jcAxVbWFjcm9uLnNtY3ALVWJyZXZlLnNtY3AKVXJpbmcuc21jcBJVaHVuZ2FydW1sYXV0LnNtY3AMVW9nb25lay5zbWNwEFdjaXJjdW1mbGV4LnNtY3AQWWNpcmN1bWZsZXguc21jcA5ZZGllcmVzaXMuc21jcAtaYWN1dGUuc21jcA9aZG90YWNjZW50LnNtY3ALWmNhcm9uLnNtY3APZ2VybWFuZGJscy5zbWNwCkFscGhhdG9ub3MMRXBzaWxvbnRvbm9zCEV0YXRvbm9zCUlvdGF0b25vcwxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQdFcHNpbG9uBFpldGEDRXRhBElvdGEFS2FwcGECTXUCTnUHT21pY3JvbgNSaG8DVGF1B1Vwc2lsb24DQ2hpDElvdGFkaWVyZXNpcw9VcHNpbG9uZGllcmVzaXMKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MJaW90YXRvbm9zFHVwc2lsb25kaWVyZXNpc3Rvbm9zBWthcHBhB29taWNyb24HdW5pMDNCQwJudQNjaGkMaW90YWRpZXJlc2lzD3Vwc2lsb25kaWVyZXNpcwxvbWljcm9udG9ub3MMdXBzaWxvbnRvbm9zCm9tZWdhdG9ub3MHdW5pMDQwMQd1bmkwNDAzB3VuaTA0MDUHdW5pMDQwNgd1bmkwNDA3B3VuaTA0MDgHdW5pMDQxQQd1bmkwNDBDB3VuaTA0MEUHdW5pMDQxMAd1bmkwNDEyB3VuaTA0MTMHdW5pMDQxNQd1bmkwNDE5B3VuaTA0MUMHdW5pMDQxRAd1bmkwNDFFB3VuaTA0MUYHdW5pMDQyMAd1bmkwNDIxB3VuaTA0MjIHdW5pMDQyNQd1bmkwNDMwB3VuaTA0MzUHdW5pMDQzOQd1bmkwNDNFB3VuaTA0NDAHdW5pMDQ0MQd1bmkwNDQzB3VuaTA0NDUHdW5pMDQ1MQd1bmkwNDUzB3VuaTA0NTUHdW5pMDQ1Ngd1bmkwNDU3B3VuaTA0NTgHdW5pMDQ1Qwd1bmkwNDVFBldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGbWludXRlBnNlY29uZAlleGNsYW1kYmwHdW5pRkIwMgd1bmkwMUYwB3VuaTAyQkMHdW5pMUUzRQd1bmkxRTNGB3VuaTFFMDAHdW5pMUUwMQd1bmkxRjREB3VuaUZCMDMHdW5pRkIwNAd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NzAHdW5pMDQ3MQd1bmkwNDc2B3VuaTA0NzcHdW5pMDQ3OQd1bmkwNDc4B3VuaTA0OTgHdW5pMDQ5OQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBRQd1bmkwNEFGB3VuaTA0QzAHdW5pMDRDMQd1bmkwNEMyB3VuaTA0Q0YHdW5pMDREMAd1bmkwNEQxB3VuaTA0RDIHdW5pMDREMwd1bmkwNEQ0B3VuaTA0RDUHdW5pMDRENgd1bmkwNEQ3B3VuaTA0REEHdW5pMDREOQd1bmkwNERCB3VuaTA0REMHdW5pMDRERAd1bmkwNERFB3VuaTA0REYHdW5pMDRFMgd1bmkwNEUzB3VuaTA0RTQHdW5pMDRFNQd1bmkwNEU2B3VuaTA0RTcHdW5pMDRFOAd1bmkwNEU5B3VuaTA0RUEHdW5pMDRFQgd1bmkwNEVDB3VuaTA0RUQHdW5pMDRFRQd1bmkwNEVGB3VuaTA0RjAHdW5pMDRGMQd1bmkwNEYyB3VuaTA0RjMHdW5pMDRGNAd1bmkwNEY1B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZDB3VuaTA0RkQHdW5pMDUwMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwd1bmkxRUM4B3VuaTFFQzkHdW5pMUVDQQd1bmkxRUNCB3VuaTFFQ0MHdW5pMUVDRAd1bmkxRUNFB3VuaTFFQ0YHdW5pMUVEMAd1bmkxRUQxB3VuaTFFRDIHdW5pMUVEMwd1bmkxRUQ0B3VuaTFFRDUHdW5pMUVENgd1bmkxRUQ3B3VuaTFFRDgHdW5pMUVEOQd1bmkxRURBB3VuaTFFREIHdW5pMUVEQwd1bmkxRUREB3VuaTFFREUHdW5pMUVERgd1bmkxRUUwB3VuaTFFRTEHdW5pMUVFMgd1bmkxRUUzB3VuaTFFRTQHdW5pMUVFNQd1bmkxRUU2B3VuaTFFRTcHdW5pMUVFOAd1bmkxRUU5B3VuaTFFRUEHdW5pMUVFQgd1bmkxRUVDB3VuaTFFRUQHdW5pMUVFRQd1bmkxRUVGB3VuaTFFRjAHdW5pMUVGMQd1bmkxRUY0B3VuaTFFRjUHdW5pMUVGNgd1bmkxRUY3B3VuaTFFRjgHdW5pMUVGOQZkY3JvYXQHdW5pMjBBQgd1bmkwNDlBB3VuaTA0OUIHdW5pMDRBMgd1bmkwNEEzB3VuaTA0QUMHdW5pMDRBRAd1bmkwNEIyB3VuaTA0QjMHdW5pMDRCNgd1bmkwNEI3B3VuaTA0Q0IHdW5pMDRDQwd1bmkwNEY2B3VuaTA0RjcHdW5pMDQ5Ngd1bmkwNDk3B3VuaTA0QkUHdW5pMDRCRgd1bmkwNEJCB3VuaTA0OEMHdW5pMDQ2Mgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5RQd1bmkwNDlGB3VuaTA0OEEHdW5pMDQ4Qgd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDRAd1bmkwNENFB3VuaTA0QzUHdW5pMDRDNgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRGRQd1bmkwNEZGB3VuaTA1MTEHdW5pMjAxNQd1bmkwMDAyAAAAAQAAAAwAAAAAAAAAAgAIAMoAygABAR4BJAABAVYBYQABAXYBdgABAXsBfAABAX4BfgABAZMBlQABAdUB1QABAAAAAAAAAAAAAQAAAAoAHgAsAAFERkxUAAgABAAAAAD//wABAAAAAWtlcm4ACAAAAAEAAAABAAQAAgAAAAQADk1oVQZzXAABetgABAAAAa0DZANqA3ADdgPoA/IEBAQqBEAESgRsBI4ElATiBRAFMgVUBXoFoAWmBowGkga4Bt4HQAfSB/QIEggsCDIIQAhGCEwIUgh4CJIIoAi+CMQI4gj8CQIJxAo2ClwKzgrUCt4K5ArqCvALDgscC0YLTAtiC3wLggucC6ILqAveC+QL7gwcDEIMaAyKDKwMzgz8DV4NdA2WDbgOAg4kDkYOeA6eDsQOzg7YDvIPBA8ODygPLg9ED5IPrA/GD9wP/hAgEDoQQBBiEIQQphEYET4RZBGCEZwSXhJoErYTBBMOExQTGhMgEyYTLBNSE1wTYhN0E54TtBPGE9gT/hQEFBoUJBQ2FFwUchR4FH4UmBSeFMQU6hXQFkIWtBcmF5gYChh8GO4ZABkWGSwZQhlYGXoZnBm+GeAaAhooGk4adBqaGsAaxhrMGtIa2BtqG4gbphvEG+IcABweHDwcQhxIHE4cVBxaHIAcphzMHPIdGB02HVQdxh3kHlYedB7mHwQfFh8oHzofTB9yH4gfjh+kH6ofwB/GH9wf4h/4H/4gICAmIEggaiCMIK4g0CDWISQhUiGAIa4h3CH+IgQiJiIsIk4iVCJaIoAipiLMIvIjGCM+I0wjWiNoJE4lNCYaJiAmJiYsJjImOCY+JmQm9icUJ6YnyCfqKAwofiiUKLYo2Cj+KZAqAioMKiIqRCpmKogq1ir4KxorQCtmLEws3i1ALWIt9C36LiAuPi5kLnovPC9eL4Avhi/UMCIwbDDeMOgxqjHAMeIyBDIqMlAyYjNIM6ozyDPOM/Q0DjQsNDI0ODRCNGA0hjSsNNI1ZDWCNYg1jjWUNbY1vDYuNkw2cjaINo42tDbSNuQ3djeUN7Y4GDgeOEA4sjjQOUI5YDl2OXw5gjmIOeo58DoWOjw6Yjp8OsY65DsuO0w7lju0PBY8HDyOPKw9Hj08Pa49zD4+Plw+zj7sP14/fD/uQAxAfkCcQQ5BLEGeQbxCLkJMQr5C3ELyQvhDDkMUQypDMENGQ0xDYkNoQ35DhEOaQ6BDtkO8Q95EAEQmRExEckSYRL5E5EUKRTBFVkV8RaJFyEXuRhRGOkZARkZG2Eb2R4hHpkg4SFZIpEjGSaxKDkoUStZK4EtCS0hLTkt0TDZMhEymTMgAAQBZAAsAAQBZAAsAAQAR/yAAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAAgEMAAsBU//mAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAIAVP/mAaf/wAAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEBp//rABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAsAWf+kAacAEwGp//MBrf/xAbX/8gG2//EBuf87Abr/2gG7/1QBvP+RAb7/PwAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQBWAA4Af/+fAL//3gDC/+UA1P+oAOj/ygFG/+MBp//GAd//9QABAacADgA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JAAEBp//rAAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gAAQDx//UAAwALABQAPwASAF8AEwABAPH/wAABAPH/wAABAPH/wAAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gAAwBIAA8AVgAgAFkAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QABARf/8QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAEA8f/1ADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48AHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAABAL8ADQACALP/wgC/ABAAAQC//+IAAQDC//IAAQC/AA4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAwDF/+0A8f/AAdz/7AAKALr/5gC9/+sAvv/pAMD/8ADB/+cAxf/jAMf/zgDI/9QAyf/bAd//7gABAPH/wAAFAL3/7AC/AA8Awf/qAMX/xADH/+cABgBI/+kAvf/uAL8AEADB/+wAxf8gAdz/2gABAL8ADwAGAMX/6gDo/+4A8f+rAS//7AFU/+wB3P/oAAEA8f/VAAEAxQALAA0ASAAMAMEACwDFAAwBp/+/Aan/7gGt/+wBtf/tAbb/7AG4//UBuQAOAbsADQG+AA0B3//tAAEA8f/YAAIA8f+qAdz/4QALAOH/1ADx/8kBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/0gFU/8kACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAgA4f/JAPH/3wEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADh/+YA8f/QAS//zgE4/+gBSf/nAUv/7QFT/+YBVP/QAAsA1AAUAOH/4ADoABMBOP/hATn/4AE8/+EBQf/pAUn/3wFL/94BU//fAVX/8gAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAUAGf/yAOH/8QFJ//IBS//yAVP/8gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAMANQAEwDh/+YA4v/0AOgAEgDx/+cBL//nATj/5QE5/+gBSf/mAUv/5gFT/+YBVP/nAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QACANT/4gFT/+QAAgDU/+EA6P/kAAYA6P/uAPH/7gEE//QBG//xAS//7wFU/+8ABADx//QBBP/1AS//9QFU//UAAgDo/8kBF//uAAYA6AAUAPH/7QD3/+IBL//tATn/7QFU/+0AAQEX//EABQEX/+sBqf/rAa3/6QG1/+sBtv/rABMASAANAML/qwDD/8AAx//VAOj/qgEX/+IBGwAMAUoACwFMAAsBp/+/Aan/7gGt/+wBtf/tAbb/7AG4//UBuQAOAbsADQG+AA0B3/+wAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gABgDoABQA8f/wAPwADAEv//ABOf/mAVT/8AAFAOgAOgDx/+MBL//iATn/4wFU/+MACADx/7oBBP/PARv/2wEv/1ABOf+dAUr/8AFM//IBVP9MAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAEA6P/vAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAIAPH/ugEE/88BG//bAS//UAE5/50BSv/wAUz/8gFU/0wACADx/7oBBP/PARv/2wEv/1ABOf+dAUr/8AFM//IBVP9MABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQALABQAPwARAFT/4gBfABMBp/+0Aan/2QGt/9kBtf/ZAbb/2QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48AAgDo/8kBF//uABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAIA6P/JARf/7gABAFkACwABAFkACwABAFkACwABAFkACwABAFkACwAJAan/8gGt//IBtf/yAbb/8gG5/8ABuv/sAbv/xwG8/9gBvv+/AAIBu//uAbz/9QABAaf/0gAEAan/6wGt/+kBtf/rAbb/6wAKAacAEQGp//ABrf/uAbX/7wG2//ABuf+7Abr/7AG7/7cBvP/VAb7/tAAFAaf/8wG5/+4Bu//xAb3/7AG+/+oABAG5/+kBu//rAbz/8QG+/+UABAG5//IBu//xAbz/9QG+/+4ACQGn/78Bqf/uAa3/7AG1/+0Btv/sAbj/9QG5AA4BuwANAb4ADQABAaf/7wAFAaf/xwGp//IBrf/wAbX/8AG2//AAAgGn/9wBuQAOAAQBqf/tAa3/6wG1/+sBtv/rAAkBp//AAan/7QGt/+sBtf/rAbb/6wG5AA8BuwAQAbwADQG+ABAABQGnAAwBqf/wAa3/8AG1//ABtv/wAAEB1/9qAAEB1/8VAAYASAALALr/8gDH//EAyf/vAdwADwHf/+4AAQGn/9UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1ADkAVP+1AFn/xwBr/rgAev8oAH//TQCE/44Ah/+hALP/rgC6/34Avv9nAMH/hwDC/2UAxf+eAMf/agDI/3MAyf9eANT/pQDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+v+AAPz/eQEC/30BBP9/ARf/mAEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAaf/rwGp/7kBrf+5AbX/uQG2/7kBuP+8Abn/8QG8//EBvf/tAdz/qQHf/8kAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABAAL/+YAP//0AF//7wE8/+0ABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAEBp//rAAEBp//rAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/8AACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAaf/6wATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt/+YBtf/nAbb/5wALAFn/pAGnABMBqf/zAa3/8QG1//IBtv/xAbn/OwG6/9oBu/9UAbz/kQG+/z8ACwBZ/6QBpwATAan/8wGt//EBtf/yAbb/8QG5/zsBuv/aAbv/VAG8/5EBvv8/AAsAWf+kAacAEwGp//MBrf/xAbX/8gG2//EBuf87Abr/2gG7/1QBvP+RAb7/PwALAFn/pAGnABMBqf/zAa3/8QG1//IBtv/xAbn/OwG6/9oBu/9UAbz/kQG+/z8ACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/wAAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AAAQDx/8AACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oAAwBIAA8AVgAgAFkAEQADAEgADwBWACAAWQARAAMASAAPAFYAIABZABEAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JADkAVP+1AFn/xwBr/rgAev8oAH//TQCE/44Ah/+hALP/rgC6/34Avv9nAMH/hwDC/2UAxf+eAMf/agDI/3MAyf9eANT/pQDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+v+AAPz/eQEC/30BBP9/ARf/mAEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAaf/rwGp/7kBrf+5AbX/uQG2/7kBuP+8Abn/8QG8//EBvf/tAdz/qQHf/8kAAQGn/+sAAQGn/+sAAQGn/+sAAQGn/+sAAQGn/+sAAQGn/+sACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAgAWf/lALP/ywDI/+QBpwANAan/7QGt/+sBtf/sAbb/7AAIAFn/5QCz/8sAyP/kAacADQGp/+0Brf/rAbX/7AG2/+wAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBu//wAbz/7QG+//AACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAVgAOAH//nwC//94Awv/lANT/qADo/8oBRv/jAaf/xgHf//UAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4AAQDx/8AACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAUASP/uAFn/6gG7//ABvP/tAb7/8AAwAFT/bQBZ/4wAa/2/AHr+fQB//rwAhP8rAIf/SwCz/2EAuv8PAL7+6ADB/x8Awv7lAMX/RgDH/u0AyP79AMn+2QDU/1IA4QAFAOX/vQDm/0kA6P7+AOr/EwDx/2gA+P8OAPr/EwD8/wcBAv8OAQT/EQEX/zwBG/+sASf/FQEp/zwBLf8OAS//agEz/0kBOf8MATv/PwE8/vEBQf/AAUb+7wFK/zEBTP9fAVD/CgFTAAUBVP8wAVX/1QHc/1kB3/+PAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQGn/+sAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAACAQwACwFT/+YAMABU/20AWf+MAGv9vwB6/n0Af/68AIT/KwCH/0sAs/9hALr/DwC+/ugAwf8fAML+5QDF/0YAx/7tAMj+/QDJ/tkA1P9SAOEABQDl/70A5v9JAOj+/gDq/xMA8f9oAPj/DgD6/xMA/P8HAQL/DgEE/xEBF/88ARv/rAEn/xUBKf88AS3/DgEv/2oBM/9JATn/DAE7/z8BPP7xAUH/wAFG/u8BSv8xAUz/XwFQ/woBUwAFAVT/MAFV/9UB3P9ZAd//jwAFAEj/7gBZ/+oBu//wAbz/7QG+//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAVgAOAH//nwC//94Awv/lANT/qADo/8oBRv/jAaf/xgHf//UABAAL/+YAP//0AF//7wE8/+0AOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+/2cAwf+HAML/ZQDF/54Ax/9qAMj/cwDJ/14A1P+lAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD6/4AA/P95AQL/fQEE/38BF/+YARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBp/+vAan/uQGt/7kBtf+5Abb/uQG4/7wBuf/xAbz/8QG9/+0B3P+pAd//yQAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAEA8f/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QABARf/8QABAPH/9QACAOj/yQEX/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAJAAsADwA/AAwAVP/rAF8ADgGn/8sBqf/pAa3/5wG1/+cBtv/nAAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QABAFkACwABAFkACwABAFkACwAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACQALABQAPwARAFT/4gBfABMBp/+0Aan/2QGt/9kBtf/ZAbb/2QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAEAAv/5gA///QAX//vATz/7QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UAAQDx//UAAQDx//UAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EAMABU/20AWf+MAGv9vwB6/n0Af/68AIT/KwCH/0sAs/9hALr/DwC+/ugAwf8fAML+5QDF/0YAx/7tAMj+/QDJ/tkA1P9SAOEABQDl/70A5v9JAOj+/gDq/xMA8f9oAPj/DgD6/xMA/P8HAQL/DgEE/xEBF/88ARv/rAEn/xUBKf88AS3/DgEv/2oBM/9JATn/DAE7/z8BPP7xAUH/wAFG/u8BSv8xAUz/XwFQ/woBUwAFAVT/MAFV/9UB3P9ZAd//jwACAOj/yQEX/+4AGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QABAPH/wAAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48AEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAEwsgAEAAAACgAeAHQDpgQkBI4E0AXuBuQHQgdcABUAOAAUADkAEgA7ABYBFAAUAgsAFgKSABIClAAWApYAFgL9ABYDDAAWAw8AFgNFABIDRwASA0kAEgNLABYDYAAUA2gAFgPqABYD7AAWA+4AFgQTABYAzAAO/xYAEP8WACP/VgAs/vgANgAUAEP/3gBF/+sARv/rAEf/6wBJ/+sAUf/rAFP/6wBX/+oAWP/oAFv/6ACR/+sAlf/rAJf/6gCt/1YAr/9WALb/6wC4/+gAw//rAMT/6wDG/+oAzQAUANEAFADy/+sA/v/rAQj/VgET/+sBFf/oARn/6wEd/+sBLgAUATX/6wE2ABQBR//rAUj/6wFS/+sBZ/8WAWv/FgFv/xYBcP8WAfH/VgHy/1YB8/9WAfT/VgH1/1YB9v9WAff/VgIM/94CDf/eAg7/3gIP/94CEP/eAhH/3gIS/94CE//rAhT/6wIV/+sCFv/rAhf/6wId/+sCHv/rAh//6wIg/+sCIf/rAiL/6gIj/+oCJP/qAiX/6gIm/+gCJ//oAij/VgIp/94CKv9WAiv/3gIs/1YCLf/eAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCV/74Amv/6wJt/+sCb//rAoAAFAKCABQChAAUAof/6gKJ/+oCi//qAo3/6gKP/+oCkf/qApX/6AL4/1YDAP9WAxD/6wMU/+oDFv/rAxj/6AMb/+oDHP/rAx3/6gMk/vgDKP9WAzMAFAM1/94DNv/rAzj/6wM6/+sDO//oAz3/6wNE/+gDTP/oA1X/VgNW/94DXP/rA2H/6ANi/+sDZ//rA2n/6ANu/1YDb//eA3D/VgNx/94Ddf/rA3f/6wN4/+sDgv/rA4T/6wOG/+sDiv/oA4z/6AOO/+gDlf/rA5j/VgOZ/94Dmv9WA5v/3gOc/1YDnf/eA57/VgOf/94DoP9WA6H/3gOi/1YDo//eA6T/VgOl/94Dpv9WA6f/3gOo/1YDqf/eA6r/VgOr/94DrP9WA63/3gOu/1YDr//eA7H/6wOz/+sDtf/rA7f/6wO5/+sDu//rA73/6wO//+sDxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/6wPV/+sD1//rA9n/6wPb/+sD3f/qA9//6gPh/+oD4//qA+X/6gPn/+oD6f/qA+v/6APt/+gD7//oA/YAFAAfADb/1QA4/+QAOf/sADv/3QDN/9UA0f/VART/5AEu/9UBNv/VAgv/3QKA/9UCgv/VAoT/1QKS/+wClP/dApb/3QL9/90DDP/dAw//3QMz/9UDRf/sA0f/7ANJ/+wDS//dA2D/5ANo/90D6v/dA+z/3QPu/90D9v/VBBP/3QAaADb/sAA4/+0AO//QAM3/sADR/7ABFP/tAS7/sAE2/7ACC//QAoD/sAKC/7AChP+wApT/0AKW/9AC/f/QAwz/0AMP/9ADM/+wA0v/0ANg/+0DaP/QA+r/0APs/9AD7v/QA/b/sAQT/9AAEAAs/+4AN//uAgf/7gII/+4CCf/uAgr/7gJX/+4Chv/uAoj/7gKK/+4CjP/uAo7/7gKQ/+4DJP/uA9z/7gPe/+4ARwAEABAACQAQAEX/6ABG/+gAR//oAEn/6ABT/+gAkf/oAJX/6AC2/+gAw//oAMT/6ADy/+gA/v/oARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUAEAFmABABaAAQAWkAEAFqABACE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANNABADTgAQA1IAEANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAD0ARf/sAEb/7ABH/+wASf/sAFP/7ACR/+wAlf/sALb/7ADD/+wAxP/sAPL/7AD+/+wBGf/sAR3/7AE1/+wBR//sAUj/7AFS/+wCE//sAhT/7AIV/+wCFv/sAhf/7AIv/+wCMf/sAjP/7AI1/+wCN//sAjn/7AI7/+wCPf/sAj//7AJB/+wCQ//sAkX/7AJH/+wCSf/sAxD/7AM2/+wDOv/sAz3/7ANc/+wDYv/sA2f/7AN1/+wDd//sA3j/7AOE/+wDlf/sA7H/7AOz/+wDtf/sA7f/7AO5/+wDu//sA73/7AO//+wD0//sA9X/7APX/+wD2//sABcAUf/sARP/7AId/+wCHv/sAh//7AIg/+wCIf/sAmv/7AJt/+wCb//sAxb/7AMc/+wDOP/sA4L/7AOG/+wDxf/sA8f/7APJ/+wDy//sA83/7APP/+wD0f/sA9n/7AAGAA7/hAAQ/4QBZ/+EAWv/hAFv/4QBcP+EABAALP/sADf/7AIH/+wCCP/sAgn/7AIK/+wCV//sAob/7AKI/+wCiv/sAoz/7AKO/+wCkP/sAyT/7APc/+wD3v/sAAEpLAAEAAAAIgBOAMQBqgKQA2oEBAaeCGQJNgosC/IMJAxWDNQOug8wEAISFBLKFDAU6hVwFc4WkBcGFxgXQhiUGtIa9BwKHIgcshzcAB0ABP/yAAn/8gBY//MAW//zALj/8wEV//MBZf/yAWb/8gFo//IBaf/yAWr/8gIm//MCJ//zApX/8wMY//MDO//zA0T/8wNM//MDTf/yA07/8gNS//IDYf/zA2n/8wOK//MDjP/zA47/8wPr//MD7f/zA+//8wA5ACX/8wAp//MAMf/zADP/8wCB//MAkP/zAJT/8wCu//MAzv/zAQP/8wES//MBFv/zARj/8wEa//MBHP/zATT/8wFR//MB+P/zAgL/8wID//MCBP/zAgX/8wIG//MCLv/zAjD/8wIy//MCNP/zAkL/8wJE//MCRv/zAkj/8wJq//MCbP/zAm7/8wKf//MC/P/zAwn/8wMv//MDMv/zA1f/8wNj//MDZv/zA4H/8wOD//MDhf/zA8T/8wPG//MDyP/zA8r/8wPM//MDzv/zA9D/8wPS//MD1P/zA9b/8wPY//MD2v/zADkAJf/mACn/5gAx/+YAM//mAIH/5gCQ/+YAlP/mAK7/5gDO/+YBA//mARL/5gEW/+YBGP/mARr/5gEc/+YBNP/mAVH/5gH4/+YCAv/mAgP/5gIE/+YCBf/mAgb/5gIu/+YCMP/mAjL/5gI0/+YCQv/mAkT/5gJG/+YCSP/mAmr/5gJs/+YCbv/mAp//5gL8/+YDCf/mAy//5gMy/+YDV//mA2P/5gNm/+YDgf/mA4P/5gOF/+YDxP/mA8b/5gPI/+YDyv/mA8z/5gPO/+YD0P/mA9L/5gPU/+YD1v/mA9j/5gPa/+YANgAj/+QAOv/SADv/0wCt/+QAr//kANX/0gEI/+QB8f/kAfL/5AHz/+QB9P/kAfX/5AH2/+QB9//kAgv/0wIo/+QCKv/kAiz/5AKU/9MClv/TAvj/5AL9/9MDAP/kAwz/0wMN/9IDD//TAyj/5AM0/9IDS//TA1X/5ANo/9MDa//SA27/5ANw/+QDef/SA5P/0gOY/+QDmv/kA5z/5AOe/+QDoP/kA6L/5AOk/+QDpv/kA6j/5AOq/+QDrP/kA67/5APq/9MD7P/TA+7/0wP4/9IEAP/SBBP/0wAmAA7/HgAQ/x4AI//NAK3/zQCv/80BCP/NAWf/HgFr/x4Bb/8eAXD/HgHx/80B8v/NAfP/zQH0/80B9f/NAfb/zQH3/80CKP/NAir/zQIs/80C+P/NAwD/zQMo/80DVf/NA27/zQNw/80DmP/NA5r/zQOc/80Dnv/NA6D/zQOi/80DpP/NA6b/zQOo/80Dqv/NA6z/zQOu/80ApgBF/9wARv/cAEf/3ABJ/9wAT//zAFD/8wBR/9YAUv/zAFP/3ABX/90AWP/hAFv/4QCR/9wAlf/cAJf/3QC2/9wAuP/hALz/8wDD/9wAxP/cAMb/3QDn//MA6//zAOz/8wDu//MA7//zAPD/8wDy/9wA8//zAPX/8wD2//MA+f/zAPv/8wD+/9wBAP/zARP/1gEV/+EBGf/cAR3/3AEx//MBNf/cAUD/8wFF//MBR//cAUj/3AFS/9wCE//cAhT/3AIV/9wCFv/cAhf/3AIc//MCHf/WAh7/1gIf/9YCIP/WAiH/1gIi/90CI//dAiT/3QIl/90CJv/hAif/4QIv/9wCMf/cAjP/3AI1/9wCN//cAjn/3AI7/9wCPf/cAj//3AJB/9wCQ//cAkX/3AJH/9wCSf/cAmT/8wJm//MCaP/zAmn/8wJr/9YCbf/WAm//1gKH/90Cif/dAov/3QKN/90Cj//dApH/3QKV/+EDEP/cAxL/8wMU/90DFv/WAxj/4QMb/90DHP/WAx3/3QM2/9wDN//zAzj/1gM5//MDOv/cAzv/4QM9/9wDPv/zA0P/8wNE/+EDTP/hA1T/8wNc/9wDXf/zA2H/4QNi/9wDZ//cA2n/4QN1/9wDd//cA3j/3AN+//MDgP/zA4L/1gOE/9wDhv/WA4r/4QOM/+EDjv/hA5L/8wOV/9wDsf/cA7P/3AO1/9wDt//cA7n/3AO7/9wDvf/cA7//3APF/9YDx//WA8n/1gPL/9YDzf/WA8//1gPR/9YD0//cA9X/3APX/9wD2f/WA9v/3APd/90D3//dA+H/3QPj/90D5f/dA+f/3QPp/90D6//hA+3/4QPv/+ED8//zA/X/8wP///MEDP/zBA7/8wQQ//MAcQAE/9oACf/aAEX/8ABG//AAR//wAEn/8ABT//AAV//vAFj/3ABb/9wAkf/wAJX/8ACX/+8Atv/wALj/3ADD//AAxP/wAMb/7wDy//AA/v/wARX/3AEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AFl/9oBZv/aAWj/2gFp/9oBav/aAhP/8AIU//ACFf/wAhb/8AIX//ACIv/vAiP/7wIk/+8CJf/vAib/3AIn/9wCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AKH/+8Cif/vAov/7wKN/+8Cj//vApH/7wKV/9wDEP/wAxT/7wMY/9wDG//vAx3/7wM2//ADOv/wAzv/3AM9//ADRP/cA0z/3ANN/9oDTv/aA1L/2gNc//ADYf/cA2L/8ANn//ADaf/cA3X/8AN3//ADeP/wA4T/8AOK/9wDjP/cA47/3AOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APT//AD1f/wA9f/8APb//AD3f/vA9//7wPh/+8D4//vA+X/7wPn/+8D6f/vA+v/3APt/9wD7//cADQABP+gAAn/oABX//EAWP/FAFv/xQCX//EAuP/FAMb/8QEV/8UBZf+gAWb/oAFo/6ABaf+gAWr/oAIi//ECI//xAiT/8QIl//ECJv/FAif/xQKH//ECif/xAov/8QKN//ECj//xApH/8QKV/8UDFP/xAxj/xQMb//EDHf/xAzv/xQNE/8UDTP/FA03/oANO/6ADUv+gA2H/xQNp/8UDiv/FA4z/xQOO/8UD3f/xA9//8QPh//ED4//xA+X/8QPn//ED6f/xA+v/xQPt/8UD7//FAD0ARf/nAEb/5wBH/+cASf/nAFP/5wCR/+cAlf/nALb/5wDD/+cAxP/nAPL/5wD+/+cBGf/nAR3/5wE1/+cBR//nAUj/5wFS/+cCE//nAhT/5wIV/+cCFv/nAhf/5wIv/+cCMf/nAjP/5wI1/+cCN//nAjn/5wI7/+cCPf/nAj//5wJB/+cCQ//nAkX/5wJH/+cCSf/nAxD/5wM2/+cDOv/nAz3/5wNc/+cDYv/nA2f/5wN1/+cDd//nA3j/5wOE/+cDlf/nA7H/5wOz/+cDtf/nA7f/5wO5/+cDu//nA73/5wO//+cD0//nA9X/5wPX/+cD2//nAHEABAAMAAkADABF/+gARv/oAEf/6ABJ/+gAUf/qAFP/6ABYAAsAWwALAJH/6ACV/+gAtv/oALgACwDD/+gAxP/oAPL/6AD+/+gBE//qARUACwEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlAAwBZgAMAWgADAFpAAwBagAMAhP/6AIU/+gCFf/oAhb/6AIX/+gCHf/qAh7/6gIf/+oCIP/qAiH/6gImAAsCJwALAi//6AIx/+gCM//oAjX/6AI3/+gCOf/oAjv/6AI9/+gCP//oAkH/6AJD/+gCRf/oAkf/6AJJ/+gCa//qAm3/6gJv/+oClQALAxD/6AMW/+oDGAALAxz/6gM2/+gDOP/qAzr/6AM7AAsDPf/oA0QACwNMAAsDTQAMA04ADANSAAwDXP/oA2EACwNi/+gDZ//oA2kACwN1/+gDd//oA3j/6AOC/+oDhP/oA4b/6gOKAAsDjAALA44ACwOV/+gDsf/oA7P/6AO1/+gDt//oA7n/6AO7/+gDvf/oA7//6APF/+oDx//qA8n/6gPL/+oDzf/qA8//6gPR/+oD0//oA9X/6APX/+gD2f/qA9v/6APrAAsD7QALA+8ACwAMAFr/7QBc/+0A6f/tApj/7QKa/+0CnP/tAzz/7QNs/+0Dev/tA5T/7QP5/+0EAf/tAAwAWv/yAFz/8gDp//ICmP/yApr/8gKc//IDPP/yA2z/8gN6//IDlP/yA/n/8gQB//IAHwBY//QAWv/yAFv/9ABc//MAuP/0AOn/8gEV//QCJv/0Aif/9AKV//QCmP/zApr/8wKc//MDGP/0Azv/9AM8//IDRP/0A0z/9ANh//QDaf/0A2z/8gN6//IDiv/0A4z/9AOO//QDlP/yA+v/9APt//QD7//0A/n/8gQB//IAeQAE/8oACf/KADb/0gA4/9QAOv/0ADv/0wBP/9EAUP/RAFL/0QBY/+YAWv/vAFv/5gC4/+YAvP/RAM3/0gDR/9IA1f/0ANn/7QDc/+EA5//RAOn/7wDr/9EA7P/RAO7/0QDv/9EA8P/RAPP/0QD1/9EA9v/RAPn/0QD7/9EBAP/RART/1AEV/+YBLv/SATH/0QE2/9IBQP/RAUX/0QFl/8oBZv/KAWj/ygFp/8oBav/KAgv/0wIc/9ECJv/mAif/5gJk/9ECZv/RAmj/0QJp/9ECgP/SAoL/0gKE/9IClP/TApX/5gKW/9MC/f/TAwz/0wMN//QDD//TAxL/0QMY/+YDJ//tAzP/0gM0//QDN//RAzn/0QM7/+YDPP/vAz7/0QND/9EDRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDVP/RA13/0QNg/9QDYf/mA2j/0wNp/+YDa//0A2z/7wN5//QDev/vA37/0QOA/9EDif/tA4r/5gOL/+0DjP/mA43/7QOO/+YDj//hA5L/0QOT//QDlP/vA+r/0wPr/+YD7P/TA+3/5gPu/9MD7//mA/P/0QP1/9ED9v/SA/j/9AP5/+8D+v/hA/z/4QP//9EEAP/0BAH/7wQM/9EEDv/RBBD/0QQT/9MAHQA2/74AWP/vAFv/7wC4/+8Azf++ANH/vgEV/+8BLv++ATb/vgIm/+8CJ//vAoD/vgKC/74ChP++ApX/7wMY/+8DM/++Azv/7wNE/+8DTP/vA2H/7wNp/+8Div/vA4z/7wOO/+8D6//vA+3/7wPv/+8D9v++ADQANv/mADj/5wA6//IAO//nAFr/8QDN/+YA0f/mANX/8gDZ/+4A3P/oAOn/8QEU/+cBLv/mATb/5gIL/+cCgP/mAoL/5gKE/+YClP/nApb/5wL9/+cDDP/nAw3/8gMP/+cDJ//uAzP/5gM0//IDPP/xA0v/5wNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QOJ/+4Di//uA43/7gOP/+gDk//yA5T/8QPq/+cD7P/nA+7/5wP2/+YD+P/yA/n/8QP6/+gD/P/oBAD/8gQB//EEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALgA2/+MAOv/lADv/5ADN/+MAz//lANH/4wDV/+UA2P/lANn/6QDt/+oA///qAS7/4wE2/+MBTf/lAgv/5AKA/+MCgv/jAoT/4wKU/+QClv/kAv3/5AMM/+QDDf/lAw//5AMn/+kDM//jAzT/5QNL/+QDaP/kA2v/5QN5/+UDif/pA4v/6QON/+kDk//lA5b/5QOX/+oD6v/kA+z/5APu/+QD9v/jA/j/5QQA/+UEEf/lBBL/6gQT/+QAIQA2/+IAOv/kAM3/4gDP/+QA0f/iANX/5ADY/+QA2f/pAO3/6wD//+sBLv/iATb/4gFN/+QCgP/iAoL/4gKE/+IDDf/kAyf/6QMz/+IDNP/kA2v/5AN5/+QDif/pA4v/6QON/+kDk//kA5b/5AOX/+sD9v/iA/j/5AQA/+QEEf/kBBL/6wAXADb/6wA7//MAzf/rANH/6wEu/+sBNv/rAgv/8wKA/+sCgv/rAoT/6wKU//MClv/zAv3/8wMM//MDD//zAzP/6wNL//MDaP/zA+r/8wPs//MD7v/zA/b/6wQT//MAMABP/+8AUP/vAFL/7wBa//AAvP/vAOf/7wDp//AA6//vAOz/7wDu/+8A7//vAPD/7wDz/+8A9f/vAPb/7wD5/+8A+//vAQD/7wEx/+8BQP/vAUX/7wIc/+8CZP/vAmb/7wJo/+8Caf/vAxL/7wM3/+8DOf/vAzz/8AM+/+8DQ//vA1T/7wNd/+8DbP/wA3r/8AN+/+8DgP/vA5L/7wOU//AD8//vA/X/7wP5//AD///vBAH/8AQM/+8EDv/vBBD/7wAdAAT/8gAJ//IAWP/1AFv/9QC4//UBFf/1AWX/8gFm//IBaP/yAWn/8gFq//ICJv/1Aif/9QKV//UDGP/1Azv/9QNE//UDTP/1A03/8gNO//IDUv/yA2H/9QNp//UDiv/1A4z/9QOO//UD6//1A+3/9QPv//UABAD0/+0DkP/tA/v/7QP9/+0ACgAE//UACf/1AWX/9QFm//UBaP/1AWn/9QFq//UDTf/1A07/9QNS//UAVABF//AARv/wAEf/8ABJ//AAUf/rAFP/8ACR//AAlf/wALb/8ADD//AAxP/wAPL/8AD+//ABE//rARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAhP/8AIU//ACFf/wAhb/8AIX//ACHf/rAh7/6wIf/+sCIP/rAiH/6wIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAmv/6wJt/+sCb//rAxD/8AMW/+sDHP/rAzb/8AM4/+sDOv/wAz3/8ANc//ADYv/wA2f/8AN1//ADd//wA3j/8AOC/+sDhP/wA4b/6wOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APF/+sDx//rA8n/6wPL/+sDzf/rA8//6wPR/+sD0//wA9X/8APX//AD2f/rA9v/8ACPAAQADQAJAA0AQ//wAEX/sABG/7AAR/+wAEn/sABR/9YAU/+wAFgACwBbAAsAkf+wAJX/sAC2/7AAuAALAMT/sADt/68A8v+wAP7/sAD//68BE//WARUACwEZ/7ABHf+wATX/sAFH/7ABSP+wAVL/sAFlAA0BZgANAWgADQFpAA0BagANAgz/8AIN//ACDv/wAg//8AIQ//ACEf/wAhL/8AIT/7ACFP+wAhX/sAIW/7ACF/+wAh3/1gIe/9YCH//WAiD/1gIh/9YCJgALAicACwIp//ACK//wAi3/8AIv/7ACMf+wAjP/sAI1/7ACN/+wAjn/sAI7/7ACPf+wAj//sAJB/7ACQ/+wAkX/sAJH/7ACSf+wAmv/1gJt/9YCb//WApUACwMQ/7ADFv/WAxgACwMc/9YDNf/wAzb/sAM4/9YDOv+wAzsACwM9/7ADRAALA0wACwNNAA0DTgANA1IADQNW//ADXP+wA2EACwNi/7ADZ/+wA2kACwNv//ADcf/wA3X/sAN3/7ADeP+wA4L/1gOE/7ADhv/WA4oACwOMAAsDjgALA5X/sAOX/68Dmf/wA5v/8AOd//ADn//wA6H/8AOj//ADpf/wA6f/8AOp//ADq//wA63/8AOv//ADsf+wA7P/sAO1/7ADt/+wA7n/sAO7/7ADvf+wA7//sAPF/9YDx//WA8n/1gPL/9YDzf/WA8//1gPR/9YD0/+wA9X/sAPX/7AD2f/WA9v/sAPrAAsD7QALA+8ACwQS/68ACADtABAA9P/wAP8AEAOQ//ADlwAQA/v/8AP9//AEEgAQAEUARQAMAEYADABHAAwASQAMAFMADACRAAwAlQAMALYADADDAAwAxAAMAO0AGADyAAwA9P/3AP4ADAD/ABgBGQAMAR0ADAE1AAwBRwAMAUgADAFSAAwCEwAMAhQADAIVAAwCFgAMAhcADAIvAAwCMQAMAjMADAI1AAwCNwAMAjkADAI7AAwCPQAMAj8ADAJBAAwCQwAMAkUADAJHAAwCSQAMAxAADAM2AAwDOgAMAz0ADANcAAwDYgAMA2cADAN1AAwDdwAMA3gADAOEAAwDkP/3A5UADAOXABgDsQAMA7MADAO1AAwDtwAMA7kADAO7AAwDvQAMA78ADAPTAAwD1QAMA9cADAPbAAwD+//3A/3/9wQSABgAHwBY//QAWv/wAFv/9AC4//QA6f/wAO3/8wD///MBFf/0Aib/9AIn//QClf/0Axj/9AM7//QDPP/wA0T/9ANM//QDYf/0A2n/9ANs//ADev/wA4r/9AOM//QDjv/0A5T/8AOX//MD6//0A+3/9APv//QD+f/wBAH/8AQS//MACgAE/9YACf/WAWX/1gFm/9YBaP/WAWn/1gFq/9YDTf/WA07/1gNS/9YACgAE//UACf/1AWX/9QFm//UBaP/1AWn/9QFq//UDTf/1A07/9QNS//UAXgAEAAsACQALAEX/6wBG/+sAR//rAEn/6wBR/+kAU//rAJH/6wCV/+sAtv/rAMP/6wDE/+sA8v/rAP7/6wET/+kBGf/rAR3/6wE1/+sBR//rAUj/6wFS/+sBZQALAWYACwFoAAsBaQALAWoACwIT/+sCFP/rAhX/6wIW/+sCF//rAh3/6QIe/+kCH//pAiD/6QIh/+kCL//rAjH/6wIz/+sCNf/rAjf/6wI5/+sCO//rAj3/6wI//+sCQf/rAkP/6wJF/+sCR//rAkn/6wJr/+kCbf/pAm//6QMQ/+sDFv/pAxz/6QM2/+sDOP/pAzr/6wM9/+sDTQALA04ACwNSAAsDXP/rA2L/6wNn/+sDdf/rA3f/6wN4/+sDgv/pA4T/6wOG/+kDlf/rA7H/6wOz/+sDtf/rA7f/6wO5/+sDu//rA73/6wO//+sDxf/pA8f/6QPJ/+kDy//pA83/6QPP/+kD0f/pA9P/6wPV/+sD1//rA9n/6QPb/+sAAgseAAQAAA3mFToAIQAdAAAAEf/O/48AEv/1/+//iP/0/7v/f//1AAz/qf+i/8kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+UAAAAA/+j/yQAA//MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAD/5QARAAAAAAAAAAAAAP/jAAAAAAAA/+T/5AAAABIAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4QAAAAAAAAAAAAAAAAAAAAD/5QAAAAD/6v/VAAAAAP/r/+r/mv/pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+YAAAAAAAAAAAAA/+0AAAAU/+8AAAAAAAAAAAAAAAAAAAAAAAD/7QAAAAAAAAAAAAAAAAAAAAD/y/+4/3z/fv/kAAAAAP+dAA8AEP+h/8QAEAAQAAAAAP+xAAD/JgAA/53/s/8Y/5P/8P+P/4z/EAAA/5L/cv8M/w//vQAAAAD/RAAFAAf/S/+GAAcABwAAAAD/PgAA/noAAP9E/2r+Yv8z/9H/LP8nAAAAAAAAAAAAAP/YAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAP/Y/6MAAP/hAAAAAP/lAAAAAP/pAAAAAAAAAAAAAAAAAAAAAAAA/+YAAP/A/+kAAAAAAAAAAAAAAAD/ewAAAAD/v//K/3YAAP9x/u3/1AAA/1H/EQAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/JAA8AAP/ZAAAAAAAA//MAAAAAAAAAAAAAAAAAAAAA/3b/4f68/+b/8wAAAAAAAAAA//UAAP84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAAAAD/8wAAAAD/0gAAAAD/5AAAAAAAAAAAAAD/tQAA/x8AAP/UAAD/2wAAAAD/0gAAAAAAAAAR/+H/0QAR/+cAAAAA/+sAAAAA/+sAAAAOAAAAAAAAAAAAAAAAAAD/5gAA/9IAAAAAAAAAAAAAAAAAAP/sAAAAAP/j/6AAAP+/ABEAEf/Z/+IAEgASAAAAAP+iAA3/LQAA/7//6f/M/9j/8P+3/8b/oAAAAAAAAAAAAAAAAAAAAAD/4QAAAA7/7QAAAAAAAAAAAAD/1QAA/4UAAP/hAAD/xAAAAAD/3wAAAAAAAAAA/+UAAAAA/+YAAAAA/+sAAAAA/+0AAAAAAAAAAAAAAA0AAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAD/ygAA/+n/u//pAAAAAP+9AAAAEgAAAAAAAAASAAAAAP+lAAD+bQAA/70AAP+J/5oAAP+R/9IAAAAAAAD/8QAAAAAAAAAA/70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAD/8gAAAAD/4wAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAAAAAAAAAD/8wAAAAAAAAAA//IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/xAAD/8AAAAAD/7AAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAAAAAAAAAAAAAAA/9cAAAAAAA//8QAAAAAAAAAAAAAAAAAAAAAAAAAA/5UAAP/zAAAAAAAAAAD/8QAAAAAAAAAAABIAAAAAAAAAAAAQ/+wAAAAAAAAAAAAAAAAAAAAAAAAAAP+FAAD/7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+V/8MAAAAAAAAAAAAAAAAAAAAA/4gAAAAAAAD/xQAAAAD/7AAA/87/sAAAAAAAAAAAAAAAAAAAAAD/VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAAAAAAAAAA/8AAAAAA/vUAAAAA/8j/rf/n/+sAAP/wAAAAAAAA/8kAAAAAAAAAAAAAAAAAAAAA/93/2QAAAAAAAP95AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1AAAAAAAAAAAAAAAAAAIAiAAEAAQAAAAJAAkAAQARABEAAgAjACgAAwAqADMACQA2ADwAEwBDAEQAGgBHAEgAHABKAEoAHgBPAFIAHwBUAFQAIwBYAFgAJABaAFsAJQCIAIgAJwCZAJkAKACsALAAKQCyALQALgC2ALYAMQC4ALkAMgC7ALwANAC+AMAANgDCAMcAOQDNAM0APwDPANkAQADbANsASwDdAN8ATADhAOMATwDlAOkAUgDsAOwAVwDxAPMAWAD2APcAWwD5APsAXQD/AQAAYAEFAQUAYgEIAQgAYwETARUAZAEnASkAZwEsASwAagEuAS4AawFFAUUAbAFlAWYAbQFoAWoAbwGmAaYAcgGpAakAcwGrAasAdAGwAbEAdQG0AbYAdwG4Ab4AegHEAcQAgQHbAdwAggHoAegAhAHsAe0AhQHvAe8AhwHxAhIAiAIUAhcAqgIcAiEArgImAi4AtAIwAjAAvQIyAjIAvgI0AjQAvwI2AjYAwAI4AkEAwQJKAkwAywJOAk4AzgJQAlAAzwJSAlIA0AJUAlQA0QJXAlcA0gJZAlkA0wJbAlsA1AJdAl0A1QJfAl8A1gJhAmEA1wJjAm8A2AJxAnEA5QJzAnMA5gJ1AnUA5wKAAoAA6AKCAoIA6QKEAoQA6gKGAoYA6wKIAogA7AKKAooA7QKMAowA7gKOAo4A7wKQApAA8AKSApIA8QKUApcA8gKZApkA9gKbApsA9wL4Av0A+AMAAw8A/gMSAxIBDgMWAxYBDwMYAxgBEAMcAxwBEQMfAyABEgMiAysBFAMtAy8BHgMxAzYBIQM4AzkBJwM7Az4BKQNEA0UBLQNHA0cBLwNJA0kBMANLA04BMQNSA1cBNQNaA1oBOwNcA1wBPANgA2EBPQNmA2YBPwNoA3EBQAN0A3UBSgN3A3oBTAOBA4IBUAOGA4YBUgOIA44BUwOTA5QBWgOYA8ABXAPCA8IBhQPEA9EBhgPZA9kBlAPcA9wBlQPeA94BlgPqA+8BlwPyA/IBnQP0A/QBngP2A/YBnwP4A/kBoAP+BAEBogQEBAQBpgQGBAcBpwQJBAkBqQQNBA0BqgQPBA8BqwQTBBMBrAABAAoACgAoADMANAA9AEgATQBWAFkAXQABACIAmQCwALIAswC0ALsAvgC/AMAAxQDHAMgAyQDNANEA0wDUANYA3gDiAOMA5ADlAOYA6ADqAOwA8QDzAPYA+wD+AR0B3AACAHYABAAEAAAACQAJAAEADgAOAAIAEAAQAAMAIwAnAAQAKgAyAAkANgA8ABIAQwBFABkARwBHABwASgBKAB0ATwBSAB4AVABUACIAWABYACMAWgBcACQAiACIACcArACvACgAuAC4ACwAvAC8AC0AwgDCAC4AzwDQAC8A0gDSADEA1QDVADIA1wDZADMA2wDbADYA3QDdADcA3wDfADgA4QDhADkA5wDnADoA6QDpADsA8gDyADwA9wD3AD0A+QD6AD4A/wEAAEABBQEFAEIBCAEIAEMBEwEVAEQBJwEpAEcBLAEsAEoBLgEuAEsBRQFFAEwBZQFrAE0BbwFwAFQB7AHtAFYB7wHvAFgB8QIXAFkCHAIhAIACJgI2AIYCOAJBAJcCSgJMAKECTgJOAKQCUAJQAKUCUgJSAKYCVAJUAKcCVwJXAKgCWQJZAKkCWwJbAKoCXQJdAKsCXwJfAKwCYQJhAK0CYwJvAK4CcQJxALsCcwJzALwCdQJ1AL0CgAKAAL4CggKCAL8ChAKEAMAChgKGAMECiAKIAMICigKKAMMCjAKMAMQCjgKOAMUCkAKQAMYCkgKSAMcClAKcAMgC+AL9ANEDAAMPANcDEgMSAOcDFgMWAOgDGAMYAOkDHAMcAOoDHwMgAOsDIgMrAO0DLQMvAPcDMQM2APoDOAM+AQADRANFAQcDRwNHAQkDSQNJAQoDSwNOAQsDUgNXAQ8DWgNaARUDXANcARYDYANhARcDZgNxARkDdAN1ASUDdwN6AScDgQOCASsDhgOGAS0DiAOOAS4DkwOUATUDmAPAATcDwgPCAWADxAPRAWED2QPZAW8D3APcAXAD3gPeAXED6gPvAXID8gPyAXgD9AP0AXkD9gP2AXoD+AP5AXsD/gQBAX0EBAQEAYEEBgQHAYIECQQJAYQEDQQNAYUEDwQPAYYEEwQTAYcAAgE4AAQABAAdAAkACQAdAA4ADgAeABAAEAAeACQAJAABACUAJQAEACYAJgADACcAJwAFACoAKwACACwALAAMAC0ALQAJAC4ALgAKAC8AMAACADEAMQADADIAMgALADYANgAGADcANwAMADgAOAANADkAOQAQADoAOgAOADsAOwAPADwAPAARAEMAQwATAEQARAAVAEUARQAUAEcARwAWAEoASgAXAE8AUAAXAFEAUQAYAFIAUgAVAFQAVAAaAFgAWAAZAFoAWgAbAFsAWwAZAFwAXAAcAIgAiAAVAKwArAAHAK4ArgADALgAuAAZALwAvAAXAMIAwgAVAM8A0AAfANIA0gACANUA1QAOANcA2AACANkA2QASANsA2wACAN0A3QACAN8A3wAfAOEA4QAfAOcA5wAIAOkA6QAbAPIA8gAVAPcA9wAgAPkA+QAgAPoA+gAVAP8BAAAgAQUBBQAgARMBEwAYARQBFAANARUBFQAZAScBJwAVASgBKAAHASkBKQAIASwBLAAJAS4BLgAJAUUBRQAIAWUBZgAdAWcBZwAeAWgBagAdAWsBawAeAW8BcAAeAewB7QADAe8B7wAGAfgB+AAEAfkB/AAFAf0CAQACAgICBgADAgcCCgAMAgsCCwAPAgwCEgATAhMCEwAUAhQCFwAWAhwCHAAXAh0CIQAYAiYCJwAZAikCKQATAisCKwATAi0CLQATAi4CLgAEAi8CLwAUAjACMAAEAjECMQAUAjICMgAEAjMCMwAUAjQCNAAEAjUCNQAUAjYCNgADAjgCOAAFAjkCOQAWAjoCOgAFAjsCOwAWAjwCPAAFAj0CPQAWAj4CPgAFAj8CPwAWAkACQAAFAkECQQAWAkoCSgACAksCSwAXAkwCTAACAk4CTgACAlACUAACAlICUgACAlQCVAACAlcCVwAMAlkCWQAJAlsCWwAKAl0CXQAKAl8CXwAKAmECYQAKAmMCYwACAmQCZAAXAmUCZQACAmYCZgAXAmcCZwACAmgCaQAXAmoCagADAmsCawAYAmwCbAADAm0CbQAYAm4CbgADAm8CbwAYAnECcQAaAnMCcwAaAnUCdQAaAoACgAAGAoICggAGAoQChAAGAoYChgAMAogCiAAMAooCigAMAowCjAAMAo4CjgAMApACkAAMApICkgAQApQClAAPApUClQAZApYClgAPApcClwARApgCmAAcApkCmQARApoCmgAcApsCmwARApwCnAAcAvkC+QAFAvoC+wACAvwC/AADAv0C/QAPAwEDAQABAwIDAgAFAwMDAwARAwQDBQACAwYDBgAJAwcDCAACAwkDCQADAwoDCgALAwsDCwAGAwwDDAAPAw0DDQAOAw4DDgACAw8DDwAPAxIDEgAXAxYDFgAYAxgDGAAZAxwDHAAYAx8DHwAFAyADIAAHAyIDIwACAyQDJAAMAyUDJgAJAycDJwASAykDKQABAyoDKgAHAysDKwAFAy0DLgACAy8DLwADAzEDMQALAzIDMgAEAzMDMwAGAzQDNAAOAzUDNQATAzYDNgAWAzgDOAAYAzkDOQAVAzoDOgAUAzsDOwAZAzwDPAAbAz0DPQAWAz4DPgAIA0QDRAAZA0UDRQAQA0cDRwAQA0kDSQAQA0sDSwAPA0wDTAAZA00DTgAdA1IDUgAdA1MDUwACA1QDVAAXA1YDVgATA1cDVwADA1oDWgAFA1wDXAAWA2ADYAANA2EDYQAZA2YDZgAEA2cDZwAUA2gDaAAPA2kDaQAZA2oDagACA2sDawAOA2wDbAAbA20DbQACA28DbwATA3EDcQATA3QDdAAFA3UDdQAWA3cDeAAWA3kDeQAOA3oDegAbA4EDgQADA4IDggAYA4YDhgAYA4gDiAAVA4kDiQASA4oDigAZA4sDiwASA4wDjAAZA40DjQASA44DjgAZA5MDkwAOA5QDlAAbA5kDmQATA5sDmwATA50DnQATA58DnwATA6EDoQATA6MDowATA6UDpQATA6cDpwATA6kDqQATA6sDqwATA60DrQATA68DrwATA7ADsAAFA7EDsQAWA7IDsgAFA7MDswAWA7QDtAAFA7UDtQAWA7YDtgAFA7cDtwAWA7gDuAAFA7kDuQAWA7oDugAFA7sDuwAWA7wDvAAFA70DvQAWA74DvgAFA78DvwAWA8ADwAACA8IDwgACA8QDxAADA8UDxQAYA8YDxgADA8cDxwAYA8gDyAADA8kDyQAYA8oDygADA8sDywAYA8wDzAADA80DzQAYA84DzgADA88DzwAYA9AD0AADA9ED0QAYA9kD2QAYA9wD3AAMA94D3gAMA+oD6gAPA+sD6wAZA+wD7AAPA+0D7QAZA+4D7gAPA+8D7wAZA/ID8gAJA/QD9AACA/YD9gAGA/gD+AAOA/kD+QAbA/4D/gAHA/8D/wAIBAAEAAAOBAEEAQAbBAQEBAAXBAYEBgAfBAcEBwAHBAkECQAJBA0EDQACBA8EDwACBBMEEwAPAAEABAQWAAcAAAAAAAAAAAAHAAAAAAAAAAAAEwAXABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAUAAAAAAAAABQAAAAAAHAAAAAAAAAAAAAUAAAAFAAAAGQAKAAYADQAJABIADgAUAAAAAAAAAAAAAAAAABoAAAAVABUAFQAAABUAAAAAAAAAAAAAABgAGAAIABgAFQAAABsAAAALAAIAAAAWAAIADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABUAAAAAAAUAFQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAFABEAAAAAAAAAAAAAAAAAFQAAAAIAAAAAAAAAGAAAAAAAAAAAAAAAAAAVABUAAAALAAAAAAAAAAAAAAAAAAoABQABAAAACgAAAAAAAAASAAAAAAABABAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAFgAAABgAGAAEABgAGAAYAAAAFQAYAAMAGAAYAAAAAAAYAAAAGAAAAAAAFQAEABgAAAAAAAUAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAUACAANAAIABQAAAAUAFQAFAAAABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAGAAAAAAABQAVAAoAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAABgAAAAVABUAAAAAAAAAAAABAAAAAAAAAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXABcAAAAHAAcAEwAHAAcABwATAAAAAAAAABMAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAAAEQARABEAEQARABEAEQAFAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAGAAYABgAGAA4AGgAaABoAGgAaABoAGgAVABUAFQAVABUAAAAAAAAAAAAYAAgACAAIAAgACAALAAsACwALAAIAAgARABoAEQAaABEAGgAFABUABQAVAAUAFQAFABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUABQAVAAUAFQAFABUABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAGAAFAAgABQAIAAUACAAAAAAAAAAAAAAAAAAZABsAGQAbABkAGwAZABsAGQAbAAoAAAAKAAAACgAAAAYACwAGAAsABgALAAYACwAGAAsABgALAAkAAAAOAAIADgAUAAwAFAAMABQADAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAABQAOAAAAAAARAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAOABIAAAAOABUAAAAYAAAACwAAAAgAAAACAAAAAAALAAgACwAAAAAAAAAAAAAAAAAcAAAAAAAQABEAAAAAAAAAAAAAAAAABQAAAAAABQAKABIAGgAVABgACAAYABUAAgAWABUAGAAbAAAAAAAAABgAAgAJAAAACQAAAAkAAAAOAAIABwAHAAAAAAAAAAcAAAAYABEAGgAFAAAAAAAAAAAAFQAYAAAAAAANAAIAFQAFAAAAAAAFABUADgACAAAAEgAWAAAAEQAaABEAGgAAAAAAAAAVAAAAFQAVABIAFgAAAAAAAAAYAAAAGAAFAAgABQAVAAUACAAAAAAAEAACABAAAgAQAAIADwADAAAAGAASABYAFQABAAQAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAAAAAAAAAAAUACAAFAAgABQAIAAUACAAFAAgABQAIAAUACAAFABUABQAVAAUAFQAFAAgABQAVAAYACwAGAAsAAAALAAAACwAAAAsAAAALAAAACwAOAAIADgACAA4AAgAAAAAAAAAYAAAAGAAKAAAAEgAWAA8AAwAPAAMAAAAYABIAFgAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAABAAQADgAAAAAAAAAAAAAAFwABAAAACgAsAI4AAURGTFQACAAEAAAAAP//AAgAAAABAAIAAwAEAAUABgAHAAhsaWdhADJsbnVtADhzbWNwAD5zczAxAERzczAyAEpzczAzAFBzczA0AFZzczA1AFwAAAABAAEAAAABAAIAAAABAAAAAAABAAMAAAABAAQAAAABAAUAAAABAAYAAAABAAcACAASABoAIgAqADIAOgBCAEoAAQAAAAEAQAAEAAAAAQH2AAEAAAABAgAAAQAAAAECEgABAAAAAQIQAAEAAAABAg4AAQAAAAECDAABAAAAAQIOAAICEADcAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AegBtQG2AbcBuAG5AboBuwG8Ab0BvgGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4C9wKiAqECogKjAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4C8wK/Ar8CwALAAsECwQLCAsICwwLDAsUCxQLGAsYCxwLHAsgCyALJAskCygLKAssCywLMAswCzQLNAs8CzwLQAtAC0QLRAtIC0gLTAtMC1ALUAtUC1gLWAtcC1wLYAtgC2QLZAtoC2gLbAtsC3ALcAt0C3QLeAt4C3wLfAuAC4ALhAuEC4gLiAuMC4wLkAuQC5QLlAuYC5gLnAucC6ALo/////wLqAuoC6wLrAuwC7ALtAu0C7gLuAu8C7wLwAvAC8QLxAvIC8gLzAvQC9AL1AvUC9gL2AqEAAQCkAAEACAABAAQBkgACAEsAAgCYAAoBmAHMAcQB1gHXAdgB2QHbAd0B5wABAIgBkQABAIgBKAABAIgBrgACAIgAAgHjAeQAAgB+AAIB5QHmAAIADQAjADwAAABDAFwAGgCDAIMANACFAIUANQHsAe0ANgHvAjEAOAI0AkUAewJIAlQAjQJXAmgAmgJqAnsArAJ+An8AvgKCApwAwAPwA/AA2wABAAEASAACAAEAEgAbAAAAAQABAEkAAQABALYAAQABADQAAQACAC0ATQ==\",\"sampleImage.jpg\":\"/9j/4RC5RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAgAAAAcgEyAAIAAAAUAAAAkodpAAQAAAABAAAAqAAAANQACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaAAyMDE0OjAzOjE5IDAzOjAyOjI2AAAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAregAwAEAAAAAQAAATYAAAAAAAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABIgEbAAUAAAABAAABKgEoAAMAAAABAAIAAAIBAAQAAAABAAABMgICAAQAAAABAAAPfwAAAAAAAABIAAAAAQAAAEgAAAAB/9j/7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAEcAoAMBIgACEQEDEQH/3QAEAAr/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AO9gJbfNShKFatpsfcPNRJd31RITEJWpGH2A6Ex4KJPkilqbajYRqikpiPLXxRCxNtTrUjIP+1SG8cBPBT7dPPxStCVrslrQ5jdzBzw6FH7VaHSII7wOFCXARJA8FEiU0RHUBcZHoSn+1vPYfM/3qFmW94iI+CFt7dkmhoI3at7gcoiER0VxyPVmy2sCXyT4awpG9rj7Xlo7hQln5o2jxOqi41xLZJHc8flR4RfVXFpuFw92rnu0/NH96Gbn7uyR3Hkp20veJER5p1AbosnZg615/wByGSTyilkHmfgmhOBC031f/9D0X0H+B/BRNTx2VuJGibXwT/cLEcQae1w7JiPEK9BPITGuSj7ngj2uzS0SA3GByrbDXbu9Mts2OLX7TMOH0mP2/n/yU5YD2R9zwR7Xi0oTbJPCtuobOmiQpEzyUfcCPbLWYGQQ5m49j/BRLY5aFc2tA1H8U2yuZiZ7hLj808GjRI+SaFedTVOg7eJ/vUDUBwJThkC04i1NqYtVr0xPh8UtidxrfbLT2+SW1Wy1zR218lAsPgPkiJoMGtt+acNPafvRjWfBMKXeCPEFcJ7MRXqCYPknOODJbB8giCt4HA+9OGxyhxeK4R7h/9H0oOrJ0BkrKt+tf1aqkftKl7hI21v36jT832/9JXMfJqvxq8tocaLam3ca7Ht9SHfu+1ebV9K+vEAOz8MjQCK6NPvwv3ETKu31WgfyD1nUfrl0+7Dvx8O4tttrc1l5urrLCdBYwsdbZ7Vy7uo51vtyeqeuwGWtOXEGNu7+b/e9T/z3/wAIiYPS/rPvsPUcyl1XpONIx2Ywf62noeo63B/mPper/hFa6hg9XdjbenXVY+UXja+2ui2st2nfU5rsc+n7/f63v/0f+EQ4vGP8v8FRjfSX8v8ACaRynwWtzIaXF4aMsD3kbfUftq99n8tEZ1Tr24OZ1na9rmuaXXeq2AWy2ynaxtjH7bWfS/P/AOCV+vAzgykWuY6wCoXlooAc4N/WfT/Vvb6ln82sf6wvb0+thzzb+sY11eB9nc1hbmNLXm/I+zfY/wBV9F+P+js9f3+p+gTgSSBcde3/AKKigNalp3/9GenwfrK7HuvttvrubkHe6uyyGsf7W7qHbXenV6bPdR9D/DfT9b1bbvrphMfse7Ha/TT1XmZIa2HNoc125zmrygdRyw0l2RcWgSYsfMf5y1s7q31n6DRh05FuMx17C6ptNNZb6Iaz0t7m7avV93vZ6Pqf6W23/BGWMxIF3xfT/vlCYIJqq+r6APrv00jd6uOQYg+q/udjf8B+/wC1IfXfpZBd62PGkn1X95j/AAH8hy5vo3Vep5tIs9VucxzKnPvrqNba7X6ZHT3Ctu227EZsust/4VXWZnWDXW77HZvc6tr2fpJYHu2XWT6fubjs/Su/fTSCP/Ro/wDepsfyjJ12/XXpbo2247p4i1x7Od/oP3a3op+tOGOfRkcgXa/jUsO276xPAqxML1LrC1ostn06w71PWyLfWayt7cVlbLPTsf8ApPU/6zdh59HUbOq3VsuvZWAw2OqbY9lTjUyxtThhBzHOs+n+hZ/hEo2TV19YlE5AC6v/AAZPQdU691HJua7EzqsSoNLRWy2JcfznGH7vd/0FUHVOsguI6n7nd/XHA+hzT+7+6sjo7uo2ZIx2utbn12B11d9gLBjt2/bcd7Mh1lf2raf0T/T3s/01a231dXlxaKg0B4AJoJneDX/g/d+g3MTttLj/AIX/AKKs31qX+D/6Mh/afWWOcaupBhedzybgZMMYHH9D/oq9n+vv1em/WO6jGFebfVlW+oXG02iSwx+i+gz6KoCnqQquFjqha994xnA0FoDh/k9lkV/Srf8Azu7/AMGSNPUzdXHpCsPJtbux5dWai1rWONf0vteyz/i/+20r/rQ/l/gpArpL6/8AozvD609NPMsHjvpP4C5EH1gwHAFpJB1BBq/9Lrna6uoAsNoYWgs9QB1APBFv5jXN/SbHLhupY3Sq+qZdHUaX29QrD7sqyq6prHWemcq30mVYzWbXf8G1C+xifLVI8RIeb7FV1Kq8MNYJFhIafb23fuPf+4im0+C4j6o9Qpoqr6fSPTwcKy9ofY7c8Q9+nsrYxzH22vc36di6L9t9PLnMFji5oBPscNHFwb7nhrfzHJQnoeKtD+CZRNiuz//So9P6t9lyvVZYdzWw7ffW6sHIAxq77La273Mp+0faXv2Pr/R/y61rW9Uof0u7Hq610+nqLg4VZLMkOrYd+5jt17rMj+Y/Ru9n01yHoBzrnfaHO+02ltjHs3F1VTD6LtK9m+2/0/0dLdlf6JZ7sKxtRfXjudYWPEtaT9L2Tua33e1yhjkjKJuUeIa1p6lvuAeP1e8t6i111j6vrBgsqdblvrYchntqupbV0ur/ANp+ZuybP+h6yVPUA2yp1v1gwbK2WYLrWjIr1ZRW5nV2/m/8p3/pK/8AwT0FwFXRszc26rFve1jg8ltDnCB7vptDmtRcfp2f6D/8mPe703kuNNhLvUdWx0kfS+zfTq/cUnCLriG29xTx+Bez+15rcQVH6z9P+0/ZfT9U3sg5H2n7T9r1bu2fsv8AUfo/T/wez9Ms/wDxg9SwModOGFfRlAPySfSsbb6YIx9v8y921/8AXXL4+Pa59RGF61T7W+nc+pzt7WN9F7Q4bGur/wAJsQXYWc1jLnY11eOwBrH+m4Md3cN8bfplKFcUSSB9YolOwRSZr5BG0vEGWjkgCXLR+tVmT9k6WMrqOP1O1oui7Gsa8MZtxvTx7BU1np2Vx+cqbcLIZiW5Ty2p1BINFpDbPaBqa3uZZ+dsbtZ9NaZ+qPT7cfbXlWNc0eqS/wBMQXtrcW27jX6fsZ/hXVqTJmx2JcYIhd0jHA0RXzVTd+p2Zk19IeMO3GpJuyTa3KtrDjb9noHT31Nt2foftf8AP/8ABroreo9R3H0Mrp4b+n27rqp/mK/2d+f/AOWXr/af+62xcfT9TulvL9+Y+ahLmudjVvH0tu6qy93q7q632/on2f8AFItv1J6d6DjXdk7thNbnMqDSfcWOc7d9BRGcJeoSBEtQWQAjStnr6uqZLMtrvtmAynfb7zfUNrPSr+yvd7zu2Zn2p13/AAXpLk+rue/qD3PvryXFtc30P31uOxo3V2sDGv8Ab7PooeJ9UacXJrttuBYJaRsDnOkW0xXTFvrPe70/0Xvs9/p/zivt6J0xtftyrxVUIkY73Na2SYL2VbW+47PejCUAdx9iyYMtK/Fn9V8vp2Jm7svZS8iwtzLbRWxjTWR6T22fo3Otd+et93VunHI3N6vhCo21PFf2lk+m1rhfXs1/nbNrvpf9crXP09N6bh9RpvGbacioE14z8Z1jXkhzJOOaX+t9P9z6f/CLHzvqu9nVMmvD+0XYlBcym9oL3OIDfz6WbPd+k3bNnpv+miZxJNHcVsgAgVWxv5v0v3fS9mOq4LWtbZ1nCL2ioPP2pp9zbN2Q76P+Eo/Rf+fP9Ig3dUrdU9tXX+nMsNdja3m0ECx14ux7CB+ZXgbsR/8AwvvWIei9Nx+nY7jj3WZDy9uTYWXFzWNtG+l7aR6fqOwnbX+33/p/T/SIWTi9Jrvx2YvRbcqm7+dt25bTUJj1Nrm/p2bHb/0aackSdfP5YhNVp4dZF6N/WcM2WFvWunitz8g1t9Yghjwz9nsJ93vxnNt+0O/7YXJZlfW39Qz3MutzK7LLXU5NJcWWNspu9I02e3fW2z0WN/4VJrayBP1WtDy/aW7skkN/0n0Vft6N0H7Xv/ZlrsU1vDpx8wOddvbsfJj2ej6nt/fSM4j/AHop+z7VsCy/p+Hm5OZQ47X3Xem/b7g4Ndv/AEgtY79I51n6Suz+aQXfXLCAhmExsN3Of+jBc1w9P/B4zPT99jXfo0+TV07Ccw4uC4Yz6bqvstldzPVvea/TZ6lm29vq07v8J/N1WqtQOmm7FOR0ZtGM+suyHD1niff6FQ3WHfTvbRY2ytD3IjU6691E+IH1f//T5lv7d/SFpyJIA1Do0+jLWt2/R+h6f5ikLetj2tF4siXEtkxHf2Ljklln2uvB/wA1qa+L1zr+pydzX7dd0tgydNf0f7qeh3Uy57i6xhcRIa0nQfR0LPbYuQSQPtUa4f8Amo1e1st6o4PFrrAOHbqwD/1H/f1Oo9TdYfTdYD/JBBn+wxrVw6SjPt1pw/8ANVr4vbi3qpLQPWEiG+0zHj7Wu9iEcnPEw1xAJDj6cDj3ep7P+qXGpJw9rrX/ADVavZi7Oa6WD3RqGMBdB+ju9n/mCduRcWtc4bdCA19bPLwZ/wCYLi0kvR4X9Favb13Zjmba/olx+gwDXvDhXt3JPuubra1jmtjcHsGzy3abVxCSaeG+n9qtXvqM7Elotx2SeIazU6bYhu5v8hWmWYj90MrAH0hAB/tbfztq83SUc6/RXC/B9JD8cPmptLrB9ICNxJ/ejanDmuZu2NYCBoD7QB2hpe3uvNUkxWr6W5w3htgZvj6RHb5u3KJFjhEsaBHplnh+Z9H6f530l5skiFPojxVuJN1Qsc7RvpSOP+i701EV4wc8NsYbDt3eQn9HG0Nf/VXnqSdqj7H/2f/tF+hQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNBDoAAAAAAJMAAAAQAAAAAQAAAAAAC3ByaW50T3V0cHV0AAAABQAAAABDbHJTZW51bQAAAABDbHJTAAAAAFJHQkMAAAAASW50ZWVudW0AAAAASW50ZQAAAABDbHJtAAAAAE1wQmxib29sAQAAAA9wcmludFNpeHRlZW5CaXRib29sAAAAAAtwcmludGVyTmFtZVRFWFQAAAABAAAAOEJJTQQ7AAAAAAGyAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAASAAAAAENwdG5ib29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jvb2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0EMAAAAAAAAgEBOEJJTQQtAAAAAAAGAAEAAAACOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0sAAAAGAAAAAAAAAAAAAAE2AAACtwAAAAsAQgBlAHoAIABuAGEAegB3AHkALQAxAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAK3AAABNgAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABNgAAAABSZ2h0bG9uZwAAArcAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAATYAAAAAUmdodGxvbmcAAAK3AAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAjhCSU0EDAAAAAAPmwAAAAEAAACgAAAARwAAAeAAAIUgAAAPfwAYAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgARwCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A72Alt81KEoVq2mx9w81El3fVEhMQlakYfYDoTHgok+SKWptqNhGqKSmI8tfFELE21OtSMg/7VIbxwE8FPt08/FK0JWuyWtDmN3MHPDoUftVodIgjvA4UJcBEkDwUSJTREdQFxkehKf7W89h8z/eoWZb3iIj4IW3t2SaGgjdq3uByiIRHRXHI9WbLawJfJPhrCkb2uPteWjuFCWfmjaPE6qLjXEtkkdzx+VHhF9VcWm4XD3aue7T80f3oZufu7JHceSnbS94kRHmnUBuiydmDrXn/AHIZJPKKWQeZ+CaE4ELTfV//0PRfQf4H8FE1PHZW4kaJtfBP9wsRxBp7XDsmI8Qr0E8hMa5KPueCPa7NLRIDcYHKtsNdu70y2zY4tftMw4fSY/b+f/JTlgPZH3PBHteLShNsk8K26hs6aJCkTPJR9wI9stZgZBDmbj2P8FEtjloVza0DUfxTbK5mJnuEuPzTwaNEj5JoV51NU6Dt4n+9QNQHAlOGQLTiLU2pi1WvTE+HxS2J3Gt9stPb5JbVbLXNHbXyUCw+A+SImgwa235pw09p+9GNZ8Ewpd4I8QVwnsxFeoJg+Sc44MlsHyCIK3gcD704bHKHF4rhHuH/0fSg6snQGSsq361/VqqR+0qXuEjbW/fqNPzfb/0lcx8mq/Gry2hxotqbdxrse31Id+77V5tX0r68QA7PwyNAIro0+/C/cRMq7fVaB/IPWdR+uXT7sO/Hw7i222tzWXm6ussJ0FjCx1tntXLu6jnW+3J6p67AZa05cQY27v5v971P/Pf/AAiJg9L+s++w9RzKXVek40jHZjB/raeh6jrcH+Y+l6v+EVrqGD1d2Nt6ddVj5ReNr7a6Lay3ad9Tmuxz6fv9/re//R/4RDi8Y/y/wVGN9Jfy/wAJpHKfBa3MhpcXhoywPeRt9R+2r32fy0RnVOvbg5nWdr2ua5pdd6rYBbLbKdrG2MfttZ9L8/8A4JX68DODKRa5jrAKheWigBzg39Z9P9W9vqWfzax/rC9vT62HPNv6xjXV4H2dzWFuY0teb8j7N9j/AFX0X4/6Oz1/f6n6BOBJIFx17f8AoqKA1qWnf/0Z6fB+srse6+22+u5uQd7q7LIax/tbuodtd6dXps91H0P8N9P1vVtu+umEx+x7sdr9NPVeZkhrYc2hzXbnOavKB1HLDSXZFxaBJix8x/nLWzurfWfoNGHTkW4zHXsLqm001lvohrPS3ubtq9X3e9no+p/pbbf8EZYzEgXfF9P++UJggmqr6voA+u/TSN3q45BiD6r+52N/wH7/ALUh9d+lkF3rY8aSfVf3mP8AAfyHLm+jdV6nm0iz1W5zHMqc++uo1trtfpkdPcK27bbsRmy6y3/hVdZmdYNdbvsdm9zq2vZ+klge7ZdZPp+5uOz9K799NII/9Gj/AN6mx/KMnXb9delujbbjuniLXHs53+g/drein604Y59GRyBdr+NSw7bvrE8CrEwvUusLWiy2fTrDvU9bIt9ZrK3txWVss9Ox/wCk9T/rN2Hn0dRs6rdWy69lYDDY6ptj2VONTLG1OGEHMc6z6f6Fn+ESjZNXX1iUTkALq/8ABk9B1Tr3Ucm5rsTOqxKg0tFbLYlx/OcYfu93/QVQdU6yC4jqfud39ccD6HNP7v7qyOju6jZkjHa61ufXYHXV32AsGO3b9tx3syHWV/atp/RP9Pez/TVrbfV1eXFoqDQHgAmgmd4Nf+D936DcxO20uP8Ahf8AoqzfWpf4P/oyH9p9ZY5xq6kGF53PJuBkwxgcf0P+ir2f6+/V6b9Y7qMYV5t9WVb6hcbTaJLDH6L6DPoqgKepCq4WOqFr33jGcDQWgOH+T2WRX9Kt/wDO7v8AwZI09TN1cekKw8m1u7Hl1ZqLWtY41/S+17LP+L/7bSv+tD+X+CkCukvr/wCjO8PrT008yweO+k/gLkQfWDAcAWkkHUEGr/0uudrq6gCw2hhaCz1AHUA8EW/mNc39JscuG6ljdKr6pl0dRpfb1CsPuyrKrqmsdZ6ZyrfSZVjNZtd/wbUL7GJ8tUjxEh5vsVXUqrww1gkWEhp9vbd+49/7iKbT4LiPqj1Cmiqvp9I9PBwrL2h9jtzxD36eytjHMfba9zfp2Lov2308ucwWOLmgE+xw0cXBvueGt/MclCeh4q0P4JlE2K7P/9Kj0/q32XK9Vlh3NbDt99bqwcgDGrvstrbvcyn7R9pe/Y+v9H/LrWtb1Sh/S7serrXT6eouDhVksyQ6th37mO3XusyP5j9G72fTXIegHOud9oc77TaW2MezcXVVMPou0r2b7b/T/R0t2V/olnuwrG1F9eO51hY8S1pP0vZO5rfd7XKGOSMom5R4hrWnqW+4B4/V7y3qLXXWPq+sGCyp1uW+thyGe2q6ltXS6v8A2n5m7Js/6HrJU9QDbKnW/WDBsrZZgutaMivVlFbmdXb+b/ynf+kr/wDBPQXAVdGzNzbqsW97WODyW0OcIHu+m0Oa1Fx+nZ/oP/yY97vTeS402Eu9R1bHSR9L7N9Or9xScIuuIbb3FPH4F7P7XmtxBUfrP0/7T9l9P1TeyDkfaftP2vVu7Z+y/wBR+j9P/B7P0yz/APGD1LAyh04YV9GUA/JJ9KxtvpgjH2/zL3bX/wBdcvj49rn1EYXrVPtb6dz6nO3tY30XtDhsa6v/AAmxBdhZzWMudjXV47AGsf6bgx3dw3xt+mUoVxRJIH1iiU7BFJmvkEbS8QZaOSAJctH61WZP2TpYyuo4/U7Wi6Lsaxrwxm3G9PHsFTWenZXH5yptwshmJblPLanUEg0WkNs9oGpre5ln52xu1n01pn6o9Ptx9teVY1zR6pL/AExBe2txbbuNfp+xn+FdWpMmbHYlxgiF3SMcDRFfNVN36nZmTX0h4w7cakm7JNrcq2sONv2egdPfU23Z+h+1/wA//wAGuit6j1HcfQyunhv6fbuuqn+Yr/Z35/8A5Zev9p/7rbFx9P1O6W8v35j5qEua52NW8fS27qrL3erurrfb+ifZ/wAUi2/Unp3oONd2Tu2E1ucyoNJ9xY5zt30FEZwl6hIES1BZACNK2evq6pksy2u+2YDKd9vvN9Q2s9Kv7K93vO7ZmfanXf8ABekuT6u57+oPc++vJcW1zfQ/fW47GjdXawMa/wBvs+ih4n1Rpxcmu224FglpGwOc6RbTFdMW+s97vT/Re+z3+n/OK+3onTG1+3KvFVQiRjvc1rZJgvZVtb7js96MJQB3H2LJgy0r8Wf1Xy+nYmbuy9lLyLC3MttFbGNNZHpPbZ+jc6135633dW6ccjc3q+EKjbU8V/aWT6bWuF9ezX+ds2u+l/1ytc/T03puH1Gm8ZtpyKgTXjPxnWNeSHMk45pf630/3Pp/8IsfO+q72dUya8P7RdiUFzKb2gvc4gN/PpZs936Tds2em/6aJnEk0dxWyACBVbG/m/S/d9L2Y6rgta1tnWcIvaKg8/amn3Ns3ZDvo/4Sj9F/58/0iDd1St1T21df6cyw12NrebQQLHXi7HsIH5leBuxH/wDC+9Yh6L03H6djuOPdZkPL25NhZcXNY20b6XtpHp+o7Cdtf7ff+n9P9IhZOL0mu/HZi9Ftyqbv523bltNQmPU2ub+nZsdv/RppyRJ18/liE1Wnh1kXo39ZwzZYW9a6eK3PyDW31iCGPDP2ewn3e/Gc237Q7/thclmV9bf1DPcy63MrsstdTk0lxZY2ym70jTZ7d9bbPRY3/hUmtrIE/Va0PL9pbuySQ3/SfRV+3o3Qfte/9mWuxTW8OnHzA5129ux8mPZ6Pqe399IziP8Aein7PtWwLL+n4ebk5lDjtfdd6b9vuDg12/8ASC1jv0jnWfpK7P5pBd9csICGYTGw3c5/6MFzXD0/8HjM9P32Nd+jT5NXTsJzDi4LhjPpuq+y2V3M9W95r9NnqWbb2+rTu/wn83Vaq1A6absU5HRm0Yz6y7IcPWeJ9/oVDdYd9O9tFjbK0PciNTrr3UT4gfV//9PmW/t39IWnIkgDUOjT6Mta3b9H6Hp/mKQt62Pa0XiyJcS2TEd/YuOSWWfa68H/ADWpr4vXOv6nJ3Nft13S2DJ01/R/up6HdTLnuLrGFxEhrSdB9HQs9ti5BJA+1Rrh/wCajV7Wy3qjg8WusA4durAP/Uf9/U6j1N1h9N1gP8kEGf7DGtXDpKM+3WnD/wA1Wvi9uLeqktA9YSIb7TMePta72IRyc8TDXEAkOPpwOPd6ns/6pcaknD2utf8ANVq9mLs5rpYPdGoYwF0H6O72f+YJ25Fxa1zht0IDX1s8vBn/AJguLSS9Hhf0Vq9vXdmOZtr+iXH6DANe8OFe3ck+65utrWOa2NwewbPLdptXEJJp4b6f2q1e+ozsSWi3HZJ4hrNTptiG7m/yFaZZiP3QysAfSEAH+1t/O2rzdJRzr9FcL8H0kPxw+am0usH0gI3En96NqcOa5m7Y1gIGgPtAHaGl7e681STFavpbnDeG2Bm+PpEdvm7cokWOESxoEemWeH5n0fp/nfSXmySIU+iPFW4k3VCxztG+lI4/6LvTURXjBzw2xhsO3d5Cf0cbQ1/9VeepJ2qPsf/ZADhCSU0EIQAAAAAAWQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABUAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMANQAuADEAAAABADhCSU0EBgAAAAAABwAEAAAAAQEA/+EN3Gh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjEgNjQuMTQwOTQ5LCAyMDEwLzEyLzA3LTEwOjU3OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTQtMDMtMTlUMDM6MDI6MjYrMDE6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDI4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE4NzFGODEzMUZCNkU2ODk4IiBzdEV2dDp3aGVuPSIyMDE0LTAzLTE5VDAzOjAyOjI2KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgc3RFdnQ6d2hlbj0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBwcHDQwNGBAQGBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIATYCtwMBEQACEQEDEQH/3QAEAFf/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/AO70YnNo6pqrA9cUO5v440rfPxrjSthwdq40l3IdK4KYku2wq0GI2rUYquDKDQgfPpkSGVr/AFSo+EkU+nBwp4nC6lIoW/DHgC8ZaMs/XkTjwhPEWxcSeJ+WPAF4y5rhidjQ48ATxFct01NzjwBeNY0rnrXCIhBkSpcpB+0flkqYEtCWQHrvjwhIkvFzIOorg4AjxFVL4jvTInG2DKrJqFRQ7jIeEy8VSlmDbBvoOSEUEoUlgadMtpoNtFm+nFRa0pKN6U8MKaLvjpu2+FC0hgRU7eIxVsueWxNMSFbaRya128MeFbcxFQRUDwGNJta5NTSowhCwnxJwsbW716nCriD44otbVgeu2KLXiaQH4TTBQTxFxdmNSanCAkEtFqeOKbXLJseu+DhW2jQ9zXwwsVypX9v78BLKlQRU/bGRJZBVBoKc8jTYHDlWof8AHBSEVbyUPxNlUotsSjVMTD7X0ZSQWwFr0oi1akHDbKlX01A61yNp4VJyiHfpkhugrFcNuv3YSGJXiQjtgISCqpNQg1+jIEM7VTdDtvkOBeJYZmY0yQim1prkqQSpujE9SMQqqkZHU4kpc23fAgqbSUB3yQDEyQ8lwQNjXJiLAyQb3NTlwi1GakZ98mIo4mjcLTY48LHiaWSp2bDS2rJKa7A5AhkCUQCxHSn05W2ArubKOv0YKTbYuvfHgRxLXuQcPAvGFM3A8foyXAjjUzOPfJCK8Sm0+S4WBkt9Qk0JJrhpFr1B71wJtplXxxWljcQP44QghT9Q9B0yVKvV/bAQtrmYH2xCkqbsabH78IDFYQw75JBCw07E4UKbuw6ZIBiSos57k5OmNrPWp4n6cNMeJYZHPenthpbcCfHFFv8A/9DvlM2Vuoa4jG1aKjG1aKA4bVaY/DDabdwNcVbo3hjYVaSRvhQ1WvXFXUxQ4DfFbVFlK9hkSGXE2bg9wMeBPGptID+yMIixMlnIV2JB+/JUxBbWVsFJ4my9R0xRxLSRhW1pY0w0qznvhAQ2j0PTAQm0QNxUb+2RLO2mZlWpG2IUlTaSuGmNtCVqUGGk2VpY4aQt5YVaL+2KLdyxRbdcNLa5pKjBS2tWjHfFQqmOMLWtTkbLKgosB2ybArMUOpirsVaIOFWhyGKrgTWmBVwG9anFILjTxwMrXKB3NcSoVUWMAb0r2yBZhUG26iv05Flbfr0Fa0OPDa8Tk1BlIqa4DiXxkYmo7eOVHE2jKpzXyuDko46RLIoJeLHuD9OTOO2HGu/SW/Xrg8JfFVorlm3B28ciYU2CdqyzHvue2Q4WQk01w6ipoBiIp410dyCK8qHEwTxhprhxvXbAIIMm0vPHpicaibbXKkbmnhgEEmaHeVSeuWCLAyCGmmNevXLYxapSUOa+OTphbXMN0/HDS2qJBy3ArXIkqIoqGxjG8n3DKpTLdGPeiQsXRRldkswtZB44VUJ+QHw5OLCSDkkl7jLgGokuSOVxUniMTSAFxQgGprgZUhZZWDEA7ZaItRkpCSU7DfDQRxFF20bFg7E/LK5FsjurTzKppWmRiGZlSibqOnX6clwMTNRe7FdhkhBici360D028cnwLxuW5IwcCOJxuiemPAjiWGZ69cPCjiWNK56tkuFBkVplbxw8K2saUnvkgEWsZmOLElrCxbG+K22KdPngSH//0e+ZsXUF2Kuwq1iyb3xRTsCHYq0Vr1w2q1o6kU2w8SrSrDCtNYUU7FDRAOKKa44qtpvhV2FLqnwxpacKU6Y0tLSBiq0rhtacBTClcrsp2ORpVxkLbNjSrMKrab1wq1Uk+2KGgN8VXFcVdTFFLSMKKdvihoYq3VqdcUupirZFDimnMvh0xQVmKHYq7FXYq3U4q6u+KurTFIK4N41wEJ4lVJlXod8iYshJbI3IeJwgKSohd/bvkmCKV4SoHceGVkFtBDYjhY05EYLKdkPPEUOxqMsibYSipZJrVlmYDbI8IZcS4XEnY4OAMxIrjPUUclsHCvEt9Q9jTwx4Vtf6zUoTtjwp4it9cjv9+PCgyd9ZenWmPAjjWtOfGuHhXiWGUEb7nJAMSVMk+OFja5AOtcBSEwsyOJPanXKJuRjXyTx9iT75ERbDIOW5Aw8CONv6yp2rjwJ4nGQHauPCtrCFPXphtiQGtgaYUFRmYAZKIYSOyAarHbvl4aVa2XiQSMhIsohG8lVdsrbkLMpkNa75OOzXIIWRQvf6MtBaypE5NDqjFFuBwLbeK24nCqw1rhQ1irRG+KrcKtjFFN7YFcOv0Ypf/9LvZzZOqcMUOGKurXFadXFabocCHYq7FXYq7DatUxtVpj8MNopaVIG+FaaoMUU7iMbQ0Vw2rXE4VaK064q1TDaXccVaoMVa474UtFSMbV2KtYVaIPyxVunviinUwWtOGKXUxtXUxtFO4DDaKWkUxtS6hwsab+KmBk0Sx64oa413GFFOKgDrv4YqtxVUCVHbBbKlvpv2GG0UuEZB+Ibd8BKRFeEtyNyQcjZZcIXxwoP2tsBkyEQi4ILd6cqHKZSIbYwCIbSLd0PD4a98h4xDPwgUJNo8iNVDVO/zy0ZwWqWCkIYHjNHUjLRIFrMCGmoPsj78IQs5k98ICCWuKnen04bRTXAYopw2xUFUDLTcYCyC5Xj/AJQcibZWF1YD7e2O62FkypQEEYRaJKDEZNrW7Yq3irRxVsf5jFVT15AKA8R4YOEMhIrDM/c4aRZa9ZvHGk24TNWuNKJLvXf6MeFPEV63L136ZHhCRIr/AKxQeOPCy4lJ5FfxrhApBWoorhRSulAMgWQWNLxrUYRFSaUHnZthsMsEWsyUyK9ckwU2rkgrsKtrgKG8CCtO/wBGSCQ3QnFVpBGKtYq7jXFWiKYq6mK04Yq//9PvebJ1JbwIdTFWqDCm26eBpitu59sCG8CuIGG1dTbFXUxVrFXYq7CrRUHG1Wem3jhVogjqPpxRTqfdhRTVBihxAw2rRG2Nq1TCrRAxVxXFNtU36Y2rRXDaWihGNqtySuwFXYFdireKt4q0cVb3xRTWK03itNbfLDaWiBhtFNcRja03tTpgSvWQjbrgIVt5amoFMFKsDkUwqCuaQt1A+jDSqkOzA7/LISDKKaQXDBQAajwzFlByoyakv6NxphGNZZEHNKHHX7sujGmmUrQcgoeuWtJWqVB3GGkWuafaijGlMlPl49ckAi1nNGYhSCV+0B2xYt1xV1cVtxbFVpJPfbwwrbWKuocVdirvbFXcW8MU0uCeJ3wWkBv0icbTwt/Vx442y4Vph8DhBRTRjUDrhRS0ca9cbTS4CppgSvWIVrgJSAvoAcFq1z7Y0tqErA98mAwkVLJsG8WK0qDhBVopQbYbVobYlW8CuxV2KupjatcRhtWivhjauIrhS1T78VcBvir/AP/U75mxdQ7FXYq4A98VbpgtNOp7YbQ44Fa3FMVbxV2KupXCrqYq1Q4q7FXYq7FVpAwppor4YUUtp9+FiQ7AimsKuIxtWqYbVrCrsVapim3UBxtK3hjatFThVricVdQ4q6uKt4q7FXYq0TirWKuxVvFWsVXBCae+NquaFgadcFppaSw2O4wodyH8owq1yatRtgpVwlevU4KTZbeQt418caW1nI1rhQ0aHrvXCEFYyjsa5IMGqYq7FVqRRoXZFCtIeUhH7RoBU/QMVtdirsVdscVaphVrFXYq2Kk4qiI7UlCT17ZWZtwxu9B++PEogvWBh+z9OAyTwuZHxtNKThhkgxJWUrtXrkmKrLYsq1D8iciJs+BDiFgx5ZLiY0qVAPTfFVrTN0AxAUyU2kbxyVNZKmzMd65IBbW4UN4ot2KHYq7FWqDG1dxxVog4VaOKuxV2KuxVsUxV1BhtXBN8bS//1e+ZsXUOpthTTYHvgWm6YFDgcUu2xV1MUU1XFadihvFLWKHYq7FNOIrhtDqYq1TFWqYUuxV3zxVoouG0U1wxtBC0imKKdhQ1scVdxxtLuGG1pbSmFDsVdtitupittU9sWTVBjatcffG1aIIwq1uMVaxVv3xVrFW6Yq6hwq2CVOBV4farYFWMRTbocKrcVdirsVbxV2KuIw2gtGv3YQxpojFadxHH3wrS2hxQ7FWn5BCVXkwGy1pU+FTirogWUErwYjdSQSD4VG2KaXEUPjihor37Yq4rthTSIt0RSGbK5lsjQR63MAHyyjhLkcYUXuY6/CPpyQgWJyBDtcsx75PhazkUmlJP8MnTHiaRHlNANvHtiTSx3REdooHvkDNsEUR6aEAM4FPHK7LZspSRwAGkgJycSWBpASEA0DZcGklTyTBawrhQt4nCrsKl2BFOwrTsVpviSKjBaadwOC1pv0277Y2tOKEY2tLaZJFNUGK07jitNEYVp1DitOrimm98Uv8A/9bvtN82NuqdvjauwK4HfClvfpgQ1vhV2BV3emKlxGBi0a4Vd9GKXYq7FDWKuxV2KuoMVdTDau4jxxtNraHCtu6Yq7bvitOoMUU1wHbG0ENcSMNrTVDirsVaoMKu4jG0U1xOG1pbQ4UU6mKtUxW3UxTbqYrbuIxRbRQY2tuCjFkuFKdMCLdhtDRFcVdTFXEA42q3ga7YU2tIOKWsVbGKt4q7FXYq7CimjitNcR9GFjS2mKKdTFXCoxV3XFWwK7V38MVDuIp1wsmq++NItqpxRbsVcS3Y4rblIHXFKpHMU6dMBDKMqae5lJNDQYBAJM1Lmx2Jrk6YEtHFCw1PXCrsKuxVsYpapvitN7YFcAtaHG1pWitufQH3yJlSRG0Utivfp4HKzkbBBd9Vjr8I+/BxsuAKTxKu5O2TEmBCHkK7gZMMSpGlDkrYLCD4YbVo18MVdhV2Nq1xGNpbAxV//9f0BTM91Tq0xQ11xV3HG1brih2K21QYrbqDFFu2xV1MUu3xV1MVtojFW6DFVprkgyC0++GkU2DvgpaXYEOocVdirVBhtXUGNq7iMbVojwxS1vhV2KuIU9cUU1xGK01xPbDa00a+GKGiaYVdsfnja0sOFi7CrhXFW+JwLTVMU07FaditOpitOpitOwrTsVp2KHYqt4DG1top4Y2m2uDY2tuoa0wpdvirqbYq7FXYq6gw2inUGNo4XYrwrSCR4YUUs3BwocScVdirWKt4q7FWjvirRGKtYVdirsVcRirXHDauK+GNq1QjemKXYVdQ4FVo1G1QMiSkIiN+PemVkMxsrLLXr08cjTO2nc9sQFtCylyp7DLAGuRQ9NjTc5YwLVKe2Nq6o7b42hxHjjaXbdKYUONAPDFVhpXDauGKv//Q9A75nurprFDsVdirqYrTsVpo4op1DiimqnCtN1ONLTt/DAtO3xWnYrTsU04rXDaQsK4bVuhxtVwpTIodTFFOxV2KupirqYq4jauFWqE9NxjaXe2KGiuG1a442lxBGKtVOFXYq0VBHTFVpSnvkrRS3jhRTfyGBacDU79MLKlSK2eVwqVNfuyEpgM447XvaSxvx6++AZAQyOIhs2rkUNB74PER4ZUzbSg79clxsTByW0jKWHQdceNfDLvQiD7knHiK8Kn6bA7KfbJWjhb9JiPi2xtBisK0+jDbAhrCh2KuxV2KuxW1pB+jG1tor4YbSC4An/PwxTbVD4b4q6h8MVt2KuxVqmG0ENcR4Y2imioxtadww2tNFcNop3A42imuJ8MVp1DitOKkdsbVqmKuC42rXE4q7Crq4q6mKtcRirXD3xtVy1HfAtrubdsaTbfqP44KXiLvWbGk8TYLNtTrhUFxiFTQ/RgtNLTFvvvhtaXJEa7dMBKiKobf+bBxJ4VKSIDY7eGSEkGKlxbwyVop3pt4Y2tO4GvTG1p//9H0MY2rmbbrStMXjjaCFpj98NrTfpjxxtaaKGu2K01Q4UNYq7FaaoMUN4q7FXYq7FXYq7FXYq1TFWxtirq4q7bFXCgxVvbFadTFaaIxWmt8WLqYq4jFXbYq4jw2xtNtFcIK2tIGFXYVpqoxVxI8MVpv0mIqBXHiZcLQA+kYsSitPl4ScSNj0yrKLDdikjXCOzVpXtlI2cjYqErcSVGWRYFCO78wT36jLAGqRc9x8HFdq9TiIsTNQ50NMmwtWBRAD1ORLMELZZgRsPnhEUSkoU2ybSWuOG0OpirWFXYq7FXYq7FXYq7FXVxVriuKtFfDDa2tNRim2q4pdXFXVxV2Ku2xRTqe+G0U1xHXvjau+P54ULa06jFXEjww0hscT3p88CuIGG0reIxWnccUO44VdirYXfwwFQGygAr1xZUtoPDFDa8DtT6cSoX7L075EslhDHocISuVXP0d8BKgKqCh75EskSSpTbqMiyUWUbmlThCCFIxnwpkrRSzgR0GESQQ4K3hhtD//0vRW+ZVuuouKnuMbC8Ja2HbDaaLVBXbG0UXcd/fG1orTGd8NppoIDjxKWim+2StFLTGcbWmiMKKaocUU6mK07FDsUOxV2KuxV2KuxV2KuxV2KuxV2KuxV1CADTY9DgtPCXYUO2xWnUGK01iimqYUuIxBVbxwpb442q6N+PIeORIZiWywg1675NrpyllNQd8BSFVJjy+I9e4yBizjNt2Zj12xASSpMHrU5MMStoK7jDbWQ4KOvTG0NcduuG0hZwamEFWqkYUU4EYKY03itNUxtDVMNq4jG1apirqHFXYVdirsVdirsVcd8VWlFxTbXp4bW3FKdMbW1mKXYq7FWwcVdih1PEYbRTRQYbWncBja06m42xtNONMUFrFDsNrTRUHG0U1xOBNLgMUrginrjaaaZD4fTjaeFeqFhv8ARkSUgKyxADYb5G2XC7hJX2wWmm+mNrTccbkkgYkpiFZYRWhGQMmdNvAOgxEl4VJ4CoyQkgwUinxDbJWw4X//0/TKop6CmWEtFNlBTxyNp4Wgu5/VhtFOMMZ+0BXHiKRAFY0KdsIkgwWG3WlRucPEx4VMwSdKD55LiDHhWm2lUVp065ITDEwKz02PbDbHgbFuxHQU8ceJeBY0TDthEl4Vvpt4YeJFNGJvDDxLwtGI+GNhHCtETnoK4bC8DjGw6g42EGJW/hhRwl1DiinUOKuxV2K06mK06mK06mK07fFI5owEulCKjwHbKXI5oedVVqAUp1yyJtomKU8kxccVcKk7Yq2QQd8bWmiMbWnYq4D2xWl6qgUnjvgtnSwr9+EFjTXAnpvhtNN+i3hg4k8KosRO1RgJZU36Mf7Tfdg4lpaRD0GIJQYhYUU9MmCx4Qs9L4tj9GNrwtFaHbDbExW0PhhtFNFARhtaWhD44bY01uO2K02AT2xRTqHwxWnUPhja06h8MFrTXH2w2inccbWncR44bWnca42tNcDja07icbWncTitNYULtiBgVaUr2w2lrgMUOMftjad1vpnxxtLuB9sNq7ia42i2qHwxtNthSTTpirRFD44q1htXUGNoprjhtadx98bWmwMFrTeKWwCTgVU3GBkFwpTAleCQP14CkFdyr8sDINV3xVf6tBQCmClBWCY8t9wMeFPEiFlDbnbI0ziWyVI64KZWsKpUYbYv/9T0wtRXw98mWndUqDkWVtcPc4qQt4gNuaYSUALqL41yLJsBSNsbQspvQ4rTiCVI8clFiVojWvSpw2ilxjU7FdsFp4VrRLt2w8SOFvglOmG08KlWgPw4bYkOEXJSTsMeJHCpj4PnkrRS5pqihGIVYFVmqV2w2il4gjJoB88TJPCHLbRk1pUYONeANGONagIB74gqYhSdI+pJH0ZMFgYhr6sp+yTiZrwKq20NNwa5HjLIYwse2i5UrQ+GHjKDjC2S2jH2WwiZRwNrG4Witt4YCUiNKbwyHrkhJgYkrDA4FcnxMTBaUI642jhbSoOKgKwNRXjUnIM1jCpJbt0GEFipld+mStFKiRilTvgJZCKoANi3TrTIkswKcyKy1ApgBVuOJQWI6jpiZJAXJFUEtgtIis9Msx8cNopzxKF64iS8KgyEdAcmJMCHem9RtthtABXeltv18MHEnhU2+E0OSYlaXjPVakYQq0lfDCxaoK7Y2vC2VPhjaDF3E1xtFO4Y2oDYjwWy4Xelja8LvTOG14Wiu+NseF3EV/hja03QY2kh1B442xpoqK42kBsqtK0xtaW+mnhhtHC2I17Y2vC16Nehx4k8Nti3wcSRBVEIYU7jBbLgWmzFNsRNeAKMluyioyYk1ygp8WHY/PJWx4XHG0NYq0VBw2rRVRtTG0tEJhtVtBXFXfPFXbYq7FXcj22xVcHPfAq/4O4wMlwKjrX2GKVQfhkWYab2xtBWqW79MKHbV6YqqI4p0yJDYCu5kmgwUydU1rTFX//V9OEE9BiwaCV69sNrwl32Qe+BaaLVyVILW2AoC4FR0xoptx4k74EtgDFQFoWh64qV1AtTihaaHFLioqPDFW+FenTFacVoMILEhaUFKU2yVopZ6APsMPEjhXegtOmDiTTloCRvv3xRTgAuwwEshFzKCNxjxLTXBOvHEyKeELgo8AMILGlwA47AVwFkpmNC3IjfHiY8IaaJD02OESUhrgAaGmStjTRjLDYAe+G00ta3NOuIkxMVH0SOvXwyfExMVhFDuuStgQ4EV6GnyxULvgPiD3wJpaAK7YSildFFNup6nIEtkQvKAilBkbLLhcsagHpiSoC4QioPTAZJ4W2jalB0xtPCp+mVJJ6HDaKX8ErvgtVjqrbDYeOEWghUCxKKAVIwWUgKbx8vDDaCFwtIK147+JwHIUjGFzwQ03UDBGRUwCg8EfbY5aJFgYLFgUGvUfjjxI4XNGKeGESUxUmgr0yXEwMGjEqmhOHiXhbACntjaab4BgSMFrS0xN4bYbQQpvGR16+GEFjS0Jt4ZK0U6gG1cUEN+mp3BwErTYjXxONp4W/RT+bBxJ4Q4hR3xVaWQDwwgK0HOGkO9VhjS8TfrsR0x4V43eu2NI42jMx7bd8NLxLeYJ3xpi3RfDbFVpCfy4bRQWmNCfDCCtLTHTDbGlhQHww2tNemO+Nopb6a+Jw2rvTHjjauCb742rYUdsVdTFkAuBGApVBTrtkWQVFZQCQBXwwUya9TfoMaUFolSOgxCdmggrXavjhJQAvAU5Hdku4qNxjuydXAh//W9OBx2NMNNdrga98DMFo4qWiAaY2xU2AXYfCPHrkgWBDlJ7MGGEoHNsUrkC2NsjHZfvwimJU6srfEemSACLXgqR12wUkF1U6Vx4U2vFKbZFVwOLIFpqHFStKjthtjTRBxWm+LHAmmgp77YbRwt8aYFWk7dMmi2lNe2K8S7I2l2JKttTjgVbXY4QgrCDIcmxXqhUUwWycVr1OIKFJkNaAVOStFLghpja070z36YLQQsENRU98lxIoLvq0fQCmPGU8LvQoaqcHEngWksDTCFLW1cJYhes3I8enuciQyBX8qbE4E2uBU9KHBRStKVOG0LTEw6HHiWm0U/tfRiim+C1674pAXgVyBZguZRhDEhRZAP2voyYKC4RFtxSnjhtDfpIDVjXBakKbIO2StBCm0ZO9ATkrY8KwxnuKZIFHCp8itRTChcHNRttjSuKqevjgQQtEan3w2jhd6KHxx4ikRbMFB8OG08LRRu+/vjaCGuB8MbRwrSntXDaOFaYmOEFFFr0Gr1pjxI4XeicbXhWshGEFBitNfDCx4S754UU4jFVtPfFLRLYULanGlbq3jhCtYVaqBihojFWgDirdMVp1Dilvgx74rTXpsMbTTY5dCMUN74pdyI7VwJbDOdgN8BSF4DE0pgtmAuMeC002kZPUYLSA36e+Npp//1/ThRD1yTCg7ilKdsBSuAFMCWipPQkYqQt4t41+eKKaoR2+7DaKcFB6jAtrq70ofnihorXvhtat3DtXG08LXoDxw8S8K4R075FPC3w98VpumKadQYrTXHeuK07FIbxUhaQT2xYOKjFFO4g4bWmqHCpao3bpkUt8SepxVpkNCMIQXIpB6YSVC/IqspQ5IFXVI7bYkpa3yNrTitevTCCxpb6fauStFLgtNq1OKQ4A1yDJxWo3yQLEhaIkrk7RTjFTpucbWmgxA+JcCFM0rsTkgFbSdgadcTFQVQyq+335GqTamVABwqtHINWu2SKFQF6+I98iWQVRWm/4ZFko8QzkE7VybFc4VRQbnAtKYAJ3JwoXMi02NcbVbwP8ANjaKWtEx/bwiSCFpi+HZt8lbHhWenJXDa8LXFgdzja8LZ8fxwsXAqTscUhs08d8AZW1vSuFebt8UELeGLGm6HtitOp44q7FCw9emSBStNPDCCgtcVPUYbY0704/vxteELTGnhjaCGjEpxteF3pJh4l4GjEPCuIkpgpmHfJcTHhb9Hxx4l4WvRYdseNeFv0tsHEyEWxATsMeJPA36DDtjxLwLvQb6cjxLwLhEwFKY8SRFv0h4YOJPC70RjxMuFxQDalcHEjha4ivSmPEinBRhtk3t0xVokdsVaB3rhV//0PSxcVpTbLGq2hKFGwpjwoBXLMO+AxSCvEynvTHhZW36ifzYOFHE7mvjgpbb5CmCltvDS26oxpILq40m3V9sC26vtim2wCdwDituofA4rbdG8MUWlPmO/wDqukXUkdwIZ0C8SCvIEsB0PzwgIJSZfzJ0c/8AHtcj5hP8nwb/ACsPCkFd/wArH0jvbXP/AAKf5X+V/k48KeJ53aT+Zh+e9zGJ71dNe8RBCJHMHpekWYcalQhPtk5DZqxmyXtGo3sdhYzXkykxwIZGVaciFFaLWm+V022x3/lYujVA9C5qTTZU/m4/zYeFbCYaL5r0/V7praCKWORY/UrIFAI+HYUJ3+LAQtpyQfDAxbofDFDqHwxVrFWmdVUsxAVRVidgAO+KoWy1jSb8stjeQXTJ9oRSK5H3HGlRVSain04q1xxVdiq1hvilbUA0yYVeK0yJQtNe+EBXChNe+FLTmgwsStCVFSTja0taPfbCCpDvRPj9GNsaa4EbHG0tqi1rU42mlxVR742mlveo2xVvk3TApWFO+G0U7iR0NcNoWkPXbDau+OtMdkN/Ecdktd8VdhVpq9sUO+E9RihaeBxBQt+DwyatHjirTNGiszGigVJ8AMBTEXyUbO9s763W5s5kuLd68JomDKaGhoR4HG2UokGir9MbY01yxtBCncXcFvbyTysEjjUu7HYAAV74krAGRpLvLfmfSvMOkrqencxbPJJFSQcWDRNxYEVOIDPNjOOXCU09SKngThprJWkJ442imiF8cIKKa4EnbfDYWm/TfwwcQXhbCHHiWm+D+GDiTTQVxsRXHiWnen3OPGvC2IxgM08LZT2wcS8LqbYeJIi1THiWm8HEmnDDa07Da00dsUU0WAGKrSzeOJKGjkUU7DaKaJqMbULcmCloncZJX//R9KmJvCuW21Ut9GSvTDxLS703Hvgtaa4N4Y2rRjbrTG0UtKMD0Iw7Ip1XHjirhz8ThoK7kw/aI+eCkrg7DviQm16zEHepwGKgrvXXwyPCtvD/AM3PMF/ZecjDbahcWq/VoiIYp3jU1rVuKsB/ssnRaZTNlg7efLtaq3mCUMmxBvnBJ8P7zHhLHjK0efL4gf8AOwTUPU/Xn29v7zBwpEyh7rzLHflhPqf1l5RxIkui9VHahfHhWyprd6epqXXbZf3rbn3+LBwlfEXC904bmdTTc/vm8On2seBj4hRMfmIR3hu49QaO5O7Ti5YP4btyr9nDw2mOSl195vmvIPRutWlmhYgmKS6crUdCQWw+GviFAfpHTBubhNj19c+P+tkfDUzKIttct7WYT218YJlFUljuCrAkEbENjwJGQo7/AB1qtR/ueuCT4Xj0/wCJ4eBPEWv8dasAD+nrkEGh/wBMf/mvBwrxFtvPWtcSRr1yPA/W36f8Fh4UHIzj8sPzssEkbQvM2oAAMfqGpzEmvf0pX35f8VSftfYbIyjTdGVvRb78wvJK2cx/S0MgZGWkQaRviFNlA98AZEGnjH5X3+k+ULrVdSlmBufqbrZRmFvjlqCqnhU9viyRkCURBAe8eU/M1l5i0SDUbd09R1UXUCtyMMvEFo27qd/2v2cr6sqTmorTJUha1K9cFK19O2GkuPHvhVwdR3wEFXcgTirRemGlWE1ySLXK60pvgIW1xYUqN/bGlWl2+WKrTyJxUhrcYUgNlvHAlbXCxJdUDFi2DXFmGicCC1yOLG3V3xQ6rHvhtVtCOuStLXIg79MbVsMuRtUu1nWYbFRGgEl44+CPsB/M/gv/ABLAZKA8nvfOXmmK/njXV3ASVlVOMWw5dKccnHcW0TO6kfO/mwhv9yz+3wRf805JjxIe380eYbaQNFqsoJBJ5cWqfpBxXiXXPnPzRNbmCXVn9OUFZAFiWqmoIqFr0xSMpBsIbRvMes6Hpy6dpeoGC0iZnjiCxsAXPJt2Bb7RxTPNKRs80ePzB82cj/uWqKd44a/8RxphxlY3n3zY6qDqxHLrSOIH7wMFLxlTufOXma5sZLW41ATQP8LBo460rt8VK1wkWoyEGwh9H8za3osEtrpt4sEDu0pj4K9ZH+03xct2xplLNKRs80dF5983pTjqfLkKnlFG2/tUYsfEK7/lYPnUCv6STc0AMEX9MFJ4y4/mF51PKmoq3EV2gip0+WFfELKPy+8069qusTW+p3azQrbmSOMRpH8QcCtVFehwFMZG3oBcUyNtyFs7uWa4u45AFEEiqg6mjRq25Hu2ElF7oqoyKXVGKuLDFVpbCrRceOHhVrkMaW2ua48K27muPCtuDjGkN8gemHdNtVrjurXLbtjZVpmxCreWSVrkcUFrFDVcQruW+HiV/9L05y9sm1u5eIwFXGhxVbTGldQYVd8sKuIJ69MC0tKeGG0UtMbeGG1poxnDa0tKcRVjQeJ2GNoSy98yeX7JS1zqMC8dioYOa+FE5HGwrx/8wPO1tP5wgu7HTry7t4LFreRxGqUb1udR6jLVSoy7HkiBu42XFKRNPOtJ1+Wzso7ebyWt5KXlcXDiDnJzkZ6nkjHYN/NkjniowSoBCW+rSx+ZbrVm8nK9tNbx2qWdIOKSI9S4+DiS32dlweMEjBIAphda8Z7i09Pyd+jzZ3MVzNcQi3LhI6kj4VT7X+tiM0UHBJkX+NlJVf0NfcmFQPTi6D/Z5MZ4NfgSKyy85QpbKraNfkl3AYRxEEs5O3x4DmjaRp5UoXvm23dpz+h76noNExMcWzFgez+GP5iLE6aRVv8AFmnFuJ0W/rQmhhj6f8HkhqAv5WSna+brKNX/ANw99SaQvFSGPcFR/l+2A6iKjTSCWeY/MlteSadLH5fubuKzuWkuLeeKJUflE0YHxFwSGcHpg8eLKOCQKW6zrEF5pd5aQeSfq08sLIswS3rGWBAf4UB29sHjQT4E12laxbwWFpayeR/XmjhRWkKWxLlFAL/Eld/fEZoMjgnfNUh1T/cFrtpF5fubaXU3m+qwQxRGNDJEsaryUqPtKa0XD40GB08zTHNC8u+YtP1fTJUsZv0fzBlBFTbuq1NaVojncA5hznYc7HGnr9hqUtOJJBWnXrmPbkBN4b3kBU7+NcKkK3lbWJ9E8w3l81lPcWtyhT9xJGOTVHEujsu6Ubif8rJxlQYcLMP+VlQU/wCOPe7f5Vv/ANVMPiBh4Tv+Vl25/wClRfD6YP8Aqpj4oXwnD8yLev8AxyL6n/PD/qpj4oXwy5vzItyf+ORe/wDJD/qpkvEivAWx+ZFt30m+H0Qf9VMfEivAVw/Me17aVffdD/1UweJFeErh+Ylt30q++6D/AKq4+JFeAt/8rEsx/wBKq++6H/qrg8QI8Mt/8rEs/wDq13w/2MP/AFVx8QJ4C2PzCs/+rbe/8DD/ANVMPiRXhLh+YNmf+lbe/wDAw/8AVTB4kV4C2PzAsq/8c69/4GL/AKqY+KF4S3/j+w/6t97/AMDF/wBVMfFCeBo+fbE/8eF5/wABH/1Ux8QLwFr/AB7YjpYXn/ARf9VMfECPDLv8fWB62F5/wEf/ADXj4oTwF3+P9PA/3gvf+Aj/AOqmPiBPAWv8f6dXewvvn6af814+IGPAW/8AH2mn/jxvf+Raf814+IF8Mtp570ok1trxKeMa/wAGOHjCOArj520kn+5ut/8Air/m7HxAjhLX+NtKB2iuf+RX9uHxYo4Sv/xxpQG8Nz/yK/tx8SKeEpXL+YF0LidUsZDAVAt3KioavxFhXf4dxlZyMhFh3mTzLczapHaQLPZ2twvK91RlVpgBUFYkr/eN/vw/DH+yuRjKymQoPL79fL6ReZ7eDS7hzcyTHTJJLSWVyrQhVPqlSwPqAmpb/KzaYZxEaLrs0JGdhFQ3fkQRxiTy5NzCryP6NY7gUPbxyZnBr8KSD0qfyZCl0Lvy/M7PdTPATp7vSF2rGvTbiP2f2ceOCnFJfb3Pk9de+sJo0sNn9UMbK2nyAGX1QwPEI37H7WEZIsTjmmF3qHk028ippjcyPhpp0o7+Pp5LxYI8OaodW8iVr+jyP+3dL/1SweLBBxzQkeo+ShOhfTyFBmLE2EvRmBT/AHX4Y+LBfDmvvNU8jNbSrHYnmV+ECwlG/wDyLw+JBPhzVf0p5BJr9S2r/wAsEv8A1Tx8SCBjmk1ld+RkmvzeaVLL6l1I9vILKYj0SF4gUUUoeXw5EzgyMMim9z5F/TaSfoiYWP1ZlkT6nPT1ualTxp/Jy+LETgvBkXajdeSZI7b9H6TNFKl1A7t9TnUeksgMoJI3HD9n9rESxqY5KZ9+WvmfQtL8wawtjp7kX0NsLd1iNvvH6nqAGRV8UJplGfJHo3aeEhzelN59pT/cbKT3BkQZjeKHM4Cg4POZivLq4OmyN67IygTJsFjCGo6dsfFCPDkzGxujdWcNzwMZmRX9M7leQrSoyfNirBxTqMaUF3PDSkrSxxpBaLYVWlziq3kcKu5+OKHcjgS7mfHCttFz4/RirXP54q7meldsaRbRfDS2t9UdsICLd6mPCtteoRh4Vtwkx4Uv/9P0h9YfLaaW/Xf5YeFXeu3jjwq16z+ONJbErHvh4UW4zsoqx4jxOw/HBSbS+880aLZsEuNQhRz0jDhnNP8AJWpxoMeJJbv8y9DiD+iJ7gJsWVOC18AXKk/QuOzLdJ7n80dSccLOxjhciv75zJwX+ZuPAf7GuAkLwlJ7vz75nuWBF4YYifgSBFRpDTsSCwT6cjaQEnu7+9uWdrm6llb/AHdK7syr/kICftYCWQih1DLxVECsBWKM9EH87/5WKUNNHGwqQXjJ6/tTP/zT/n9nBa0oPaqWerAOBW4lGwUdQi/5/wCVgQpfVB8BVAGpS3j/AJR3dsUtfVIgu45Qqdz1Mslf6/58VxQu+pkllLAMRWdx0VR0QH/P+bFQG1tmqhVeLH4YEp9lf5iP8/5cUrGtUAO1YYjuepeSv47/APD4sW/qRPJD9t/inYdFX+UYUgNfViT6oFGk+CBT2X+b+P8AwOBabNogHSsUHTxZ/wDM/wDBYopv6hUiJ92f95cEeHYfLt/qriq9Laqc12eY8IvZfH9bYCkBVEEMdWUfu7cUA8WIw2mkRbRMgSIn4z+8lPvXp9+ApRHMsvJqO0r0jBFaDx+4VwUm1dXhXm1Cqx9SN96VpQ5HhZAoqKVKhQwLEV49DSuKbRMcjDr9GAhKus46UyBCCvV1PhjSrgwHhjSF1Vr2xS3QE1xpWyfAY0ri46HbBS24v02xVxcg0AxV3InxwK3ybrTfvgVcCepHXCq0nsBuMbS2Q1B1wq6jdxirhy32xV1SNqbnFDRJA36eOKtqCy1p1wrS4J4jFFBTkuLSI0eQBv5Qan7hiIkoNBDvqQp+6iJ3pyf4R925yYxljxISa5upK8m4Ab8UFNvmd8sGMMeJDyW6nelSw2Y7n7zkqDElDGI0qdwdmwoIWG3alPD7J8R4Y2ilv1XwNFY1+nG1pY1qxPIncfCflimm/qrmq19x742tNC2NN+/68Fopr6sw69R1wgrTTWxI2O3bCSimvq7bD7t8bWnLCwqKVJO4ONqu9HerD4um/fBa0u+rg9uhw2mkTbx8eYPtWmC1CKDSrTix+/Y/24KDO1wnJJDAH36ffTHgTxKbPqFWEV/cRRtsIlIYKPatNssEyOTUcYJUVtb5hQ6nJU9mUD8emPjS7gvgjvRFuuv24b6vqc6q3XhSn4HIHNLuSMI70Rb6n5mt5RJ+lppOP7EoV16d1ORGUsvCCL/xR5oPW8i9v3CYfFK+EHf4n8z/APLXF9MC/wBcHilPghr/ABP5or/vXFT/AIwL/XHxSjwR3t/4m8zf8tUR/wCeC/1x8Yr4I72v8SeZv+WqE/OBf4HD4xXwR3tHzL5prtdQ/wDIgf8ANWDxivgjvTmy1TVZrWN5blfUI+IrGoB++uUS1EmccIVWub1lNbtx/qhB/wAa5H8xLvZ+DFU0Kad5r9ZZnm4SqI+ZrxUoDQbDvmdpshlHdxM0QJUE155ktTueKtcjhVqpxVsE4LW3/9T0VRa7A5bbU2DthtDq1xtW6YLV5V+c/mfXNMS3j0fW4raK4SSOe2REkkDJSp58uSHfpTAS1E+p5W3nDWpggur95SCSQ5LAkbAnkx6DI0WziUh5r1GkgFx9pvjbiAaV6LQ7bY8PmnjLl84aly5GZQQv7peI4j3pXrjwp8Qr28z6gvGM3FVryc8RVjT9rfBwr4hbXzRqTiQi54yN8NeO6rWnw77YOBfE8lx80agsvH1xxiX4F4ClT3Pxb48HmnxPJYnmrUWVUNz/AHh5THgKnatK8unbHg80eIe5z+adTAlmFyOQHFBwFAKdhyw8PmnxFh803XKNBdDgoLEGMVZtqcvi38ceHzR4nk1/im+KPW7XnI3xsEFQtaUHxbbYBDzXxT3NjzXe8uXrp8C0iX09hXvSuHh80DI2vmi9CIhuFKk8pSU3JpWh3wcA71OU9yofNF+VaQXK+o5IrwFVUDbjvjwp8Qt/4oulkUfWF9OMVUcBu3TffHgXxT3NL5ovDGAbhayNWWiCtK9OvTHhXxGx5pvCZpBcJyA4xDhsBStevjjwr4ionmG6rEhuVKKCx+AVLCnXf3x4V8XyXJ5gvJI243K85Xp/djYVpTr4YOFHiFuXXtbE5EMkDFCkSh1IHxhmJ25fyYCyEyrx3XmMxxj6zaUryaquST1328cCnIvN75jHqn61acjt9l9hTttjunxAq/W/MYkX/SbMBFoq8JKdvpx3XxFovPM3pgG7tKM/I/u5Kn4sd18QLjf+ZQ8h+tWgJUAfBIaUrgT4gcupeaF9JVvbYBVNBwkp0774r4qFbz1q+j30Lau0M+nyzenPLEHDxq2/JVPw8V/a/wAnHhtMc1ml+s2MVxr2oXtx5dudZt7j0TZ3UBRk4LEAwFZU/a/ycyMU4gbtWWEidkjvdBebVtOntvKN/FYQmU30Pwgy8lpGKetvxbfMjxcbQcWVV1bQPW0u6hsPKOowX0kbC2mPEBHI2NRMenywHLjQMORFW2jWyWsKS+TdQedUUSybfE4UBj/fdzg8bGpxZUJpOhTW8moHUPKeo3CTXLSWQG/pwFQAn98OjcsfExp8LIjbfTHTUTJb+W7+zg+pzxMHQvymcqY2A9R/sgN8WHxcaDiyLNN0eIWdvFd+UdSa4SJFnlox5SKoDN/fD7RwHLjTHFl6lB6fod5Deag115V1KWCWcPYp8X7uLiBw/vdvi3wjLjQcWVu90K/k1Owlt/K+px2MRkN7B8Q9QMlE29X9lsfFxKMebvVdT0a7l025isfKuqQXbxsLeX4gFemzf3x6HD4uJRjzd6KttKpawJN5T1Z51jUTOeW7hQGP993OQGTEnw8vehLrQNYk0xIV0PUwv195WgTmkotiDxX1BJ2NPh55bHNhHNicea9ig77ytqTaZOln5f1yPUGU+hK9xMURuxI9Y1/4HDLLg6Moxz9SmcGlzJDEsvlbVmkVFEjAyGrBRyP993OV+JhYnHn70Ho+lX8UNwuo+W9Xmla4leFlMh4wMR6aH96PsjHxMTLw83eqw6Lz18y3nlzXf0P9W4pbwSTRuLnnXmaTD4eG32sicmLozjDL1TVdL0lLzT5NN8u+YLaSK5Vrp7t55oTBxYMpjaaQMeRX9jBx42RhMhNtTLTzejp8EltJEgZ/rCSRKpDBh8NRXkBgOaPINZxz5lDwzeYImXi9uaDYt6h+ffKyLT4pCoup+ZlVTztRU/ytjwr4pd+lfNPxnnbH+UcW8K48JZeN5O/Sfmv4avbe+z74DEo8YNHVPNXpseVtsaDZ/ltjwp8Zr6/5oJofq3TcUbHhScvksi1PzMXX1mtxGepUMWr1HWm2SEGJzeSJ+v6uWaksR8AUPWnzw8CPFLX17WQF/ewmn2vgP9cBgvilo6hrQr8cNR0+A9PvxGNfGLf6Q1jkKyQhT/kHr9+PAvilr9Iazx3khqPtEqen34eBHilpr/WKmkkQP7HwH+uPAnxStbUNX2PqQ8f2vgPX78Hhr4pa/Ses0PxQ1rt8B6ffh4F8UtnU9XqPigp1Hwt1HXvg4EeM1+k9a415wV/a+Bv64eBfG8m11jW15ANBUfZHFv648C+KVzazrpK8Wh413qrf1wcC+M3+mNc6MYOVd/hbp9+HgXxW/wBL64K0MHT4fhb+uPAnxXfpnWqDeGnfZuv348C+K4azrgqawV6nZumDw18Yrhr+v1+1ER+zUMa/fg8IJ8cqcmueZA0ZjitnRfthi61PgaA4DiXxykt7+dXl/S7mWx1a2uRfW7mOcwRhouVK/AzOCdjkfDLkRnYUP+hgPJH++L7/AJFJ/wA14PDLLicP+cgfJHUwX3/IpP8AmvHwyvE3/wBDBeSP98X1P+MSf814fDK8Tv8AoYHyOTX0L7/kUn/NeDwyvEHqnk/zBZa75cs9WsuYtbpS0YkAVwFYqagE9xmHkiQWyErCecvDwytmraEQLvUVP88TfembLSfS4Gp+tOPh8czQ0tbeOFWiQO+BLXIU642hoEeOBX//1fRu3t92WNK2q16YFd8PvirvhrtiryPztqHkzSdfuRrklnZXFwxlQ3KorOh25gkfF0zGyA23YyDskI82/lV/1dNL++L+mV7ttBcPNX5WOKDU9LPtWP8Apg3TQcfMn5XGn+5DTPpMX9MbK8IcPMX5WHf9JaV/wUWG14Wj5h/K7/q46UK9+UWNp4F36e/Kv/q4aV/wUWNlHC79N/lZT4dQ0o/7KLBa8DY1n8rKf73aUT/rRY8S8K4av+Vlf97tJ/4KLDZXhC79LflbX/e3SfnyhxsoEQ2NX/K3/lu0n/g4cbK0Hfpf8rDWt7pO/i0OC14Q1+k/yrp/vbpIH+vDhtPCHfpL8qD/AMfukf8ABw4bRwhv6/8AlVWv1zSNv8uH+uNleENi/wDypJr9c0in+vD/AFxJKOENfX/yqr/vZpFf9eH+uNrwho6h+Vf/AC2aSP8AZw/1xteENNfflXwbheaUTSnwyRV/XiCVlEU8R/x1f2d7dWlusMlrDcSpCx5t8CuQu4bcUzYwxAh18juiofPupPyHpRHl12f5eOW/lwWHEih501djX0IunQCT+uH8sE8a5fOepHb6vHtvWknjXxwHTBHEuPnHUSSfQj8NhJ/XB+V81E3DzfqWx9GPbYDjJ/XH8r5rxpp5VeDzHrcVjq9vG9pR5WUGRDyAAHxE++Y+oxcEbb8FEvVrfyxotnZiC0mnggiUrHGly4CjsAKnMK3M5KdjdSFzbXBrc29A7dOan7MgH+V3/wAvlhSmAlFD74oXrIcVXJP2IrgWmzcrUVNB74rTRv4lYBmAG/fFaXPfQ0DBxU/LAtLF1FQ9GIp0BwJpVW/hJpyH34rRWm/QkgMKAb74rTZvohvyArv1GC1pqTUYwh3BNN9xja06PUYyCAR7bjCtL0uot/iArhWl3rx1FWrXYU3JJ6AUwJR2r6BNaWlnNcyyRXFxzJiRuIRQAQD4vv8AFhDEsQ8y2sWn6Hf6hbScrqJDKObcwxqK1HU1GWwu2udU8wHnjWBT9xbmnT4ZP65ncDr7aPnbWCB+4t69fsyb/jjwIto+dtbqaRW4rt/dvt+OPAkFy+dtaotYoHC9Ko/8Dg4Ftsed9YANYYADufhkH8ceBeJUj8+6lUco7Y0H+X/XAYM4m3p+n3HlWTyzod3fvZQXl5bvJMHlVWLGZwuzty+yNswjI3TmCMatUD+S6/70WX/I2P8A5qw3JeGHk4HyYynjcWTAbAiVKbbdmw+tHDDybY+TQByuLJSTQVmjFT4CrYCZJEYt8PKFP7+zr/xmT/mrD6kVB1PJxr/pNnXoaTJ1/wCCxuSeGPktc+TVoWu7JR2JnQfrbG5LwhsjyeaEXNmQe4mQj/iWNyTwx8myPKFafWLOvgJkrT/gsbkvDFaR5QA5NcWYVdyTMlPxbBckcEfJ1PJ53E9mQe4lTp/wWSuSKj5NV8oA0FxZhvD1krT/AILBck8MfJph5PVam4swOpJmQf8AG2NyXhj5NKfJzDktzZsOlVnQ/qbG5I4Yt08n/wDLRaVPQGZKn/hsfUtR8ncPKVf7+0r/AMZk/wCasfWvDHyaX/B53+sWZHSvrIf+NsfUioNcvJwIBuLIHsDMn4fFj6k1DyWtJ5NA3urMAf8AFyf81Y+peGLyr897TTb7TNH/AEE0N0yzSmdLWRHoGReLNxJ+/LMPFe6ZcIDx0aBrPT6nLt7Zk008QcPL+s9Pqclfl/biniDX+H9aPSzl+4f1wUvEHf4f1v8A5Ypfuw0vEH1J+SE4X8v9PsZCFvLT1RPb1HNA0rsvIDpyG4zW6kHibsB2Pvegh/vzHb1XRWA1C/Feqwt+DDNjpD6XB1P1BOua065l7tDRYUxStJHjitNcl8cVpoOK4Vf/1vRQ33ybS3hVrFWiK9emBXy1/wA5TRrP52tI2Ab09PjoG95HO2XCNhx4mpF4RNpkdSAAD7YPDb+IojR9Mpec6qypx/Fqd8HCAVMjSZzQr9SmAQE8P5R+zCxOW8IabNrorOGOwt1MSsWiRuVB14n/AJqyMQGUpG0MLW3bUg3pr8KoAOI7sckIhHEaU72K3GnykIvLiQCFAp8Z9sJiERkbZr+TP5d6N5lsdSur6KSVoZ0hhCMFH2eR6g+ODHp4S5ss2WUapm3nr8lfK2jeTb3V0SRZ7cwmNXdSvxzIhBHHwbI+BAHZgMuTa2Zw6PpCQLGtjbcVUKv7mPoPoywANc5G1HTtL0r6zqBNlb0+sAU9GPtEnthIDGJNMb/NzTtMh/L7VpYrOCOUCLi6RIrCsq9CBXISqimJPFH3vmPMN2bMfyxsre485aGssSSo9x8aOoZSArGhBqD0y2ADVM830suh6JX/AI51p7fuIv8AmnMkAODZS3Q9G0c6ajfULY8pJjUwxf7+f/Jw0EAlKta0bSW86+WkFlbhCt8zqIowDSFaVAXelcEwKZYzuWS/oHQyP+Oda/P0Iv8AmnHZBtL/AC5o2jfosN+j7U1nudzBGTT6xIB1XBQTZoMG/PjTdMh8v6Wbe0hgdrtwWijRCR6R2PEDIkAs8ciJPUPy6sLNfI2ggQRD/QoSfgXclak9O+V2me5YD+e8MEd/owjRErFOTxolfiTwzIwcmrq8yQkftCvs5y9krrNtvx/4M4oVFlQmnJQf+MhxSvDddx/yMOBUs8w3U1vZLPC/F4pAQQ5NdiKEZj6mNxbcBIkhbTzdVAXnKN0IJIp+OaiWEuzE2V65+ZQ1Xy5Y+ldtHrllN6UskTsrS27KaMeJFfiC8v8AK+LMrTQ33aM8ttkrh8z69IARqF1Sm/7yT/mrM/w49zh8cu9WTzJr/bULr5epJ/zVh8OPcx8SSw+bNaUkfpK5quxo8h3+hsHhx7k+LLvZh+WPnHQ/rupf4t1RFi9KP6mL6Rqcizc+HIntSuYmoiARQcjDO+b0NfMn5Skcvr1ga96n+mY9NtjvbHmX8om2Ooad4Ecjjw+Sb81w8x/k6SFOo6by7Ly3+7GvJbXjX/yhFSL/AE4e9SP4Y15LfmvXX/yiFf8AT9ONepqf6YDHyW3DzL+TXLidT0sOP2S4r9xwcB7k2u/xH+TxFf0nplPdxjwHuW/N36d/KCtf0hpn0OMeA9y35t/4j/KHtqWmmmxpJWlO2AxPcniRNn+Yf5PaJN+km1KxD2itJGkR5SswX7Manq57ZUQTyZgvNfMnnO48+al+m9Sv0t7aK4hj0jREY14GZd3Heo+1X7WZGCB4g1Zcg4SAyTzzpdjHoE0kMCROkikMihTtWoqMzzEOuhIvMiSd6/8AD4bQ7w/5ryQFoJA3LiCKkggePI4Tjl3NQzw7w6oAG/X/AC8g2orTArahaBgGQzxBlLcgQXHbvhgN0T5PTP0fp5be1goP+K0/pmSQHGsvGrG0toPzdkCRqqx6qojUAUUFjsB2GY0YjicycjwPfo0hNCVX7hlhaRLZjWjKiDUFAApqV6dgO87H+OWR5NUuaR/mIqGPy8xAPHWLc1oPfBLmzgTwy9zLSqVNVH3YXHtKdAWPlqo4j/jo3FRQdwh/jhplI7sY/OWCN/LNoSo2vB1A7xtleQCw5OCR3egeS7e3bydojcFJ+o2/Yf77GMhu1h0dpAPOUw4L8Wmx9h+zcP8A1xBSeiG/MG0hPkvW14L/ALySHoOwrjLkzhsUL5UWNvLOkniN7OHt/kDLSHHaWGP/ABXL8I+LT496fyzv/XAAk9EP57t4m8mawOA/3mY9B2IOQkNm3EfUEp/Je3ifyaw4D4buXt7KcIiAGOQ3Msi8xW0SS6O3EVGoRilB+1HIP45IDdhP6SmHopUfCPuGJRRpKfLUMY0114gcLq6XoP8AlofFTzK++ijHmDRDxG7XS1IHeGv/ABrgWXL4p20ERRgUXcEdB4ZA8myPMPGfK3kOTUdIS5SeONfUkUKykn4WI7HMSeYQNU5oxGScD8spa/71xD/Yn+uQ/NDuZ/lyv/5Vi9Km8j/4A/1wfmh3J/Lnvb/5VjMOl1HT/UP9cfzQ7kflz3tj8sZ+puo/+BP9cfzQ7kjTnvZZ5G0u68q/XOJjuvrfCu5Tj6fL2b+bMbNPjbcOMxNsqHmi9DA/VY9v+LD/AM05R4bkcTIfLFw1xczTOoRpYImKqagHkw6kDMzS7CnF1G5BZDTMu2imq74LSA1UY2mmiRjxIpwbfpthtaf/1+1eUvM2m6xYcbS/N/Na0S5laJoWqa8eSsOtB2xojmg0d0+EmHiY8LYYY8S8LjJtjxI4Xz/+a/lbWvNPmRtQ063jUIiwH60y1Kx16ca/tVxjnAKBhPMMHH5R+bCJfUgsieNI/iIo1R19qVwnUjzZeEVGL8n/ADetyjtb2LRApzCyMCVDVNN/DpjLURQMJ6q8/wCVfnNbcpb2tkSY5Iwsz8lUOpSg3b9lvtfzZH8xFgMBbl/KfzUVtVjtbQenCiTcpG+2Bvxofs5IZwEywm1Afk/5t5SSPaWXrMVCESPQIAa13+1yOD8yF8Eqbfk35se3eB7KyIKMFpM/2qfBU16cvtZL8yE+CWcflh5S1nypo9xaXtiv1ma4M1bOYemV4Kor6jcuWxycdUAiWEmk6882/mHXvK13o9nY/vZzHx+syII/3civ8XA8/wBnH8zFgcErCpBD5gFrGJbOk4QeoqshXnTfiSwNMrGoCZYCVK2tNeikuna0P72X1E4mPccVXer9dsl+YFsfyxpbqVhql9p8lnd6NDfQSEFre44MhANd6SDpTlkcmexszx4CDuwTzp+W195hgpp3lqwtb61EcCzRyfV4lCAExlI2HLirU5ZjRmerkmKC8pflN5v0XzBpt8+n2iW1qQ8zpK7yBjGQ3EM1D8TbVy8ZhTXLGS9VaHVhQi3JI9l/5qywagNEtOUHpuna3b2SQyW1JFLkhOJFWct3bwOH8zFj+WkgrzRvMM3mHStRSyDRWUdysjFlDqZlVV4jnRunxVxOpFUmGnkLTZItc5UNo3EHYnhX/iWR/MRX8tJAadp3mS1s0gayAIeVm4utPjldx1avRhXJDURU6aSQ/mL5R8xeY9KtbdbIE20jyuS6ghTGwqlG3blx+1+zg/MjkyjgI5oXyz+dPlfSdA0/Srqzvzd2ECW1x6cKsvqRDi9Dz3HIZZwEtcgxf8x/POl+bL2wl06G5hS0ikWT6zGEqzsCONGbsMyMII5tRjuxNWPv/wACMuQqAt/lU/1Bilurd+X/AAAxVeruPslv+AxVuTQtV19JbGwtHvbkL6ghXihPE/zE5j5yAN23EDa7Rvyc80HUoW1jy7eJpyuPrPpzR8vToalaBj8NMwDIU5gCb+Y4vykg0CCG30u4sLxhcmwnDytIZEbgwmDL8S+oPh5fs4cUpk7BjkApgdtJRRUD/gTmyi4ZR0UgPYf8CckinuH5VQo/k62NBvJcf8nmyiUmBG7zf894kHmu2XahsVP/AA74OY3bIbPX9KUfomyouwt4e3b01yQaSo6fEn+mniP96Zuw8RkmLHdQVP8AlZejMFApp11XYfzDIy3LZH6SyHWFB0e/qBvazdv8g4kMAmMdunox0UABV7e2R4k08hlhiH55MSopXwH/ACyDDQtmSeB6nqcEb6Rd/u1r6EvYf77OJaxyRMMEZtovhH2F6gfyjBxJILHvKiQx33mAlAeOrykrQb/uojTJEWE8iLeX/mymu3+ow3uqtEsPqSxWdlASyRIhFSSQtXb9psxI4qcvx+LkzDy9pWoSeS4Tb2M8xadJIzHEzchHMjNxNKGgGThkALVKEiz+7ez1S0khvbO9itQ6tIHhMRIFdvjpsfHI5M1cmzFgPV5x5hs/LFsI20a9uLlnPxpLHGQo/wBZKfRtk8eQnojJCIS7TfivowRUUOxSnQeObDSAGdOj7YNYPizrTfLVrf8AlrVdTkkdZbJW4RALxaicviqK98zNRnMZiFbSdJo9GMmKWS6ON5paO5hSprUDquaqQ3etx/SEdbXK288Uzq7JFIkjKiVYhWBPH32wA0WUhYZePP2jkk/Vr2n/ABg/5uy3xA0+DJj58gedv8ZDzNHo8p068uItQtVLxLK8DHkCVL/CzL+y2Yo1EQXLOCRi9EW719R/yj17/wAHbf8AVXLDqoFgNNJLLCDzLbteep5fuyJ7ue4Ti9uaLK3IA/vOvjiNXCkS0syUu816J5s1eLTkttBuUazvobpzJJbiqRVqBSQ/FvgOqgmOlkLTwjzEST+gLzc95Lb/AKq5L83BqOimg9MsfM9rJfM+g3JF1dPcR0lttldUWh/edarj+aik6OaWee/LHm7zFo0VjaaNLFLHOsvOaWALQKwI+F2P7WROpi249NKLJvLa+YtM8vadpk+hXDz2dvHDI6TWxUlBSorIDTInUxX8tJEWqan+n31O8064tLYWX1ZRWKVy/qmTlRHICqvi2RnqwOTIaU3u35pt7jU/LV7Y6dZ3VxdXlu8S81iijBdaKxZpPs/6obIx1gPMNn5WuqUaDY+Z9O0SxsJ9Dnaa1hSJ2Sa3KkqKVFZBmR+bg4v5Sdtmz8z/AKaF+NCuPS+q/VyvrW3Ll6nOv95SlMH5uCTpJ7Kev2fmjUdEvtPi0C4WW6heJHea24gsKAmkhOJ1UCyhppA2lv5f6B5x8s6HJp93ok08jztMHhmt+IDKop8Tqa/Dg/NRqkHSyMiU21WDzTe/U/T0C4U211HcNymtt1QMCBSTr8WI1UVOllSK9XzIP+meuv8Akda/9VMkdXBH5SaC0q380WcEsUnl64cyXE8y8Zrb7MshcA1k6iuP5uCPyk7XXlt5pmv9Nuo/L84WykkeQNPbVKvE0dB+88WyP5uNpOklSY/XfMnfy7cnx/f2v/VTAdVFI00nnlvoXnby15W1h75ZLNDKkli6PE4j5v8AH0r9quYs5RnJzIgxBYdqnm7zfb2plj1i45cgD9jof9jl3gxaoZ5Ero/NXm97NZf0zccmTl1TrT/VwHDEMfHlbI/MOu+YI9N0CaDUp4XubBJLhkKj1JNqu232sqxwBJbckyIilkHmDzGfIOo3g1Sb9IwagkSXLcWZYiq/BuKU3wHGOKmeOZIJWfl5feZ/MMV5cat5omtLeEtHEsSxPLzUA82T4f3QrTr8TZXlAi2RlZZUuk3qSqI/Nl5eEipj9H0h16c1ZxlPEGb1vyfG0EixFi5FpHyZjVieR3JPzzI00ubj5hyZOzgfaIHzzKtrpRe9sozR541PuwGC000t7aMKrOhWvUMMbC0tfUbFPtXEY/2QyJkGQionXdLBA9cGvcA0/Vg8QJ8Mv//QmH5GSrLZ60yspKXEcb8TWh4E0Pgd8nlNljEVB6ZLdQQ8PWlWP1GCR82C8mPRRXvldItV5b4aW3F9sC2wMsDK/jyb9ZzHPNyI8lC5llELmAKZuJ9PlXjyptypvTIsqXws/pL6oAfiOdNxWm9MWJC31Lj6yAFQ23Dc1PPnXw6caYpAVWc0biByp8IbpXCqy2knMCG5VVm4gyiMkrX/ACa/FTArriS4AQ26o5ZwJOZIAT9oigPxeGKq3MbV2p92KqSS3H1mUMqfVwq+m4J5E/tVHT5YrS6aWQQyGAKZgpMavUKWptWm9MNquSRzEpkAV6AsF3ANN8UUseW59UCNUMHpklyTy512FP5ae+BNJd5e+vC2uTqDRfWzcymT0QQnYDjy36YpTK3luWVhOioQzcOB5ApX4Sagb0+1htBbuZJ0t3a2VZJgP3auSqk17kAn8MbULxJQb7V64oKmJLj6068F+rcAUcN8Zap5AilKdKb4FCozkK3HdwDxU7AntXG1pq3lkaBDOgSUqDIqnkoam9DQVGFVt44FjOQK/A2/0YRzRLk+OppgdSuzUCs8p+0e7nNxjOzrZBExyjxX58jltsCrowPQrt35nCqopFeq/wDBnFVQMKj4l/4M4quDA919vjOFWdfk7v5qlNQaW7dGJ6svjmDreQcrS8y9ydgIm3oaZrnLfOn53WaS3dnfRQC2gRmhC9DI0lZHcqN0YMOLA5l6Y9GjOHnULgU6f8NmcC4pCLjmA+XzOTtFMl0L8zPNWg6cmnWCWb2sTO0ZlSQv+8YuakMB1OUyxpFMp8s+X7380UvdZ1W++oXNoyWSLZxjgYwvqVPqEnlV8x8kzE03Qx29Tg8q3EVtHAt5URoqBim5CgCvX2yPjlfy4ag8pTx+rS85eq7SGq9OXYb4+OUflx3oK4/LyabWLfVBqbJJbwvAIhGChEhqWNTWuPjFPgbVaLm8j3U0EkTakQsqMjER7gMKVHxYnOWI0w70bH5UugKfXaigH934f7LKjmLMacJH/wAqiQ+ZG199Wl9diG9ARrwFI/ToDXl03yQ1BZeAKpPpfJskts8BvSFkRkLBKkcl4169sTqCxGmConlKVEVBefZAFSvWm3jkfHKfy470BbflvLBLePHqj/6bO1ywMYPFmVVotCPh+Dvh/NFZaUHqvtfyR0vWtatJdYvpbqxtmklkswqosnKnws1S3HKpamRZx08YvRPNFna2a6fa2sKwW0ELJFDGAqKqkUAAyHVu5MT13iNKum41ohNB128MbV4JoWktq93NbRs4aO3muFCVct6QqFpVePKv2v2c2IlQdaRck9H5bayHCjUrCO6ST6v6QujzF2U9T6t9n++9M8+P8uShmo2GGXSicakLCvD5d/MBtGbTLfV4qXSwyXekJLGtysd03CN5SIw3Fjt9v7OSnnMpWWOLRQhAxiKBQS+Q7W2076w+swP6dzJaObblPEHiRWKhlo3ME8XXj8OWYRxk006zMMEQSxiGYOgI29i5yqQot+M2AUfAVIG46fznKZt0eb6IglQ6RotSBXTLXv8A8V5g3u7ADZvlFTqPwwrSFSKVbqaT6wGjfjwhNKLQUND742ghE+rGKVIH0jFab9WIioZfvGBaQgjmF1LN9YDRSABYTSikdSD/AJWG1IV1mjpQkD6RgtivEsRH2l+8YbZUg72Jnk9ZLgqixurQAgq3IdT7jtgtQFPRr+K60u2n4tGrIAFkHBvh+GvE70NKr/k4QWJG6O9SA7h1+8Y2mkPdxtK0LR3HpCNuTKpWjilOJr2wcS0qrKFFGZT7gjCChsTwH9tfvGBKneKs9s8Mdx6DuKCVGHJfcYpdHIEQB5VcgUJqKnFivNxCR9tQfcjCqjehbi3aKO5ELNSkiMvIUNdsFsgG45FVfikRqd+Q3xsIYh+b10ifl5q8kbq0kaIwWoPSRfDJwO6a2L5bfV7u6t3WXdCwNAo2p75nwlbhHGAUyt9YgWzSIxSFgnHYCnT54S1cG7I/Ot7Mvl7ylJCzqHsSDSn7PDxyjF9RciQ9Kpol2W/LTXHlDsY72Fm6Fjy4DBI+sJxjYqf5WIksusA/AGib7XYHft8shqAyx83puhKhhRgCobcBhQj5jMVvZ4muNauktqw5NAEd9vhoa9DksVi2M43SBu9b1C4Yubg79CAAfwGWmSiIQ8V1O0oZpWJPXc9MFppjOi3N23mCUSu7olxKFqWIC8TT22wsTzZb67Dv2wEsqXJOeJ3/AGT+rEckv//RZZajBbys+nXQtzIxJa3k9PkVNCTwI5EZXuyBFJxD5w80QlSmovKFPwiZUmFf9kpP44eIqYpvb/mf5hiUevDbXA7/AAtGfvUkf8Lh40GAZt5W8xvr2mS3bW4tjG5j4h+YNFBqDRfHDxMZQrdIdzU06nMY826PJSIo1D88DJeSB8+wxRTqCu3XEJXcT3G3uMJChoL1C4KRTqAHfqMUruJ8DTCtNItG2G5FcCuKbksOvTFVyqeNACRirVN6d8VQumgmO5YjY3M2/wAmpiVRaqewrTFXFfEb++KFyq3gd++JVpRuaDrirZUdwfbGlbHFQADsOgxKqOocf0fct4RtT7sYndjLk+NnZje3J33mkPQfznN1Dk6+SKiLbfaH0DJsCikLUp8X3DCxVlZuo5e2wyQVcGf/ACtvYYFVAXI/a+4Y2rOvyfD/AOJpia7W56gD9seGYWtOwcrS9XtkpPoNt2Oa4FzXhn598fR05qkNzAO5ApxY9OmZem5uPneRI3v/AMNmc4pV1kPY/wDDZJWpJjTc/L4sBQ9w/wCceJD/AId1Y13N6vev+6lzB1HNysXJ60rimUtjreL0lKh2epLVcliORrTft4YqvaPlIj8mBSvwg0U1/mHfFVcgMhBJFRSo64CUNwj041jBLBQAGY1Y08T3yBZAtlf3wl5tUKV41+Hehrx8cDJc8nKMrUgEUqNiPkcVWRt6cax8i/ABeTGrGm1ST1OKto3GZpBI3xADgT8IpXoO3XfIkJCKg1y4syDbRLLMxCIHNF37k9aDK2SaebNMQ2lrLdSNPcyMQ0lSoA414ooNFXJgMSWF6xp0CWMzJX4RUAs3Y/PJhiXheiatd6VeS3NrIkcrQyQVliLrxkoG2UrvTfNgRs4ANFGt5y1lbtrz17czvqC6xx+ryBfrKwi34/a+xwH/ADdgpkZL/wDHWtvBGGltPrkHpiC/NkfrAELc4/j5U+D7Iqv2ceFPGoap5u1fUo0tzJZ2Nssjy8La0MQaWUfvJXAZvjPjl+HLLGbHVw9XpYZwBLlEpHbqyIBUmnfiMgTe7dGAiKCYQepT9r/gRlM2yPN7t5StLefyLoDzRiSQpdAu4BY8bhgKk+A6ZhEbubA7I86XZnpEn/AjFO639F21aCBT8lGNIsuOmWw2MCj/AGIxpbLf6Mt6f7zr/wACMNLa39G2h/3Qp/2IxpbcdMtB1gUD3UY0vEXfou0O4t1p/qjBS8RabTbUVpAgIr+yKjbGlsqNnptsbG3ZoFqY0JJUd1GGltVGmWpG0Cf8CP6Y0ttnTLXb9wg/2I/pgpC06bbAVMCf8CP6YeFNuGm2h6QIf9iMeFFtHTbTp6CV8OIwUm2jptoKfuE3/wAkf0w0i1w0+zPSFPoUY0rv0ba/74T/AIEYgJtx0+1H+6E2/wAkY0EML/NePRIPK7RX06afb3sn1c3PEGhZS2wp/k4YjfZIGzxRfLvkS59O3/xOGdiEjVI1BJY7dBmSMsnHGMI6fQPJ2mTPYXXmYwTW54PE0Sll2rQ/CcfGkQnwBaa6va+UX8vaIk+vG3sYopIrO44BvXVSFYkFTTiRlcJkFJhYpAtaeXbfyBr9voepnUl5wSzMVK8G9RQB0XqFw2TIJjEAFL/yp2vdWRqb27Hb/UY5LUBhi+p6fpbHitcxHKKbSve+mq2drJdzHb0ohU08T7ZOLFDxWPnebj6fl2ZVYAN6ksScfHqd8bC279Ged6MphsbWVdv3tyHoQDWoQV2OFFqUPl7zcsnNtT06FWHJ0ijmkatNyGJp9qv7OSQbRsehawwQS60OQ6tFbjfan7bEdemNBO6ne6TLaTWrjUbmT6xN6ZSkQReS0+zxrt1+3hCv/9KJR6TfxPbepAT6Aui5FD8UzMVp7/FiJBrMT9iGEV7bWQHGWKWOwKCnKvrVBAFOr4dkm0xgv74amsHrOYjNFGVbccfRZn6+LAZGQFMok29y/LCg8usR+1cv+AUZGLLLyYD5S8v6BqEes32qW0c8tzrGocZZdyI0nMaqCTsq8egzN4A4IkeEbovydZeXojPdaRIhW4MnOJKHgqysF6VbttyzD1EKczTyJG7Ja7e/jmM5CQfmDcNB5I1idWo6W5I3I/aHcZPGLk15pVHZ5h+Umt3F75yihkjRFSCZyV512BH7TMMv1GMAbNemkSTar+fl/d2+u6YLeaSP/Q5HYI7KD+98AfbDp4AjdrzTILOPyemkl8jwzSuXeSedqseRALdKnwynMPW5Y+gPEdM1HU5PNNrEbqYxy36gqZHIobhduvgcy5QAg4eGZ4w9e/PvUbiw8kLPbyNHIbyJeSMVNCHJFRmFjG7fmJY9/wA496vd6lcas9zK0gihhVOTFty7VO/yxzABlivhNpP+Z+qahF5+1BY7mWOBBCvEOwUViWtADQZkYwOFxpzIL0+SeVPyle4Dt6q6OX9Wp5cvQJry61zGPNy8h2eZ+StVvZ/zcsrRruUwRpVoS7FWP1SpLCtPtb4yGzVhJMym3/ORWo39o2gG0uZLfl9Y5+k7JWnCleJFcMeTHLMgp9+QN3c3nk24nuZnuJDfSKrysWNFjj2qcjPYt0CTAPHdf8269H521K1iunWAX0qBSxNB6pFBvl3CKaYzNvefzavp7DyHcXMTFXjmtgCCR1kAIqKdcqxCy2aiRA2Yf+Seu3epa9eJcSFhHakgVJFTIviTlmUU16eRkDb2UEUym3ICG1IkaZdf8YziBuiXJ8qpfaFFIVk0WOZuTepM0jjkanfNgLp10uaFvZ9PlugbO2S2hVACgZjViSaktXMjET1YkNLwA/Y+85axIVFK1pRPvPXCELgy7fZp/rHCqorL1+GnzOKrG1m/0u8tp7G4e2dmZXMMjKWXj0PEjauY+eII3bMUiLIZBpHnLzJfarYW0mo3Qje5QMVmk3XeqnfcHMGWIByceYkpv+e8oa308GvMTNUjYUCsBk9NzZZ3kaknep29xma4xCsGNB1+VRk0IyDRtWurcXFvAXhatH5oOhodjlEswBpbe1/kJYXlnoOpRXKcGkvFYCobb0gO2YuWVlysXJOrD83NButbi0dLS5FxJMLdXb0+HItwr9quQMSoyRJpOPOX5gaV5SFob6CaYXnqemYApp6fGteTL15YxiSspiPNHeXPNtjr+gHW7SKWO2BlBjk48/3P2vskjftvgIo0yiQRaSeXPzf0DXtYtdLtbS6jnuuXpvKI+I4oXNeLE9BkpYyBbCOQE0jvNn5l6L5Xv4LG/imeS4j9VHj4cQORXcswPUZAQJZmQB3TKDzZYTeVv8SKkn1L0WuPTPHnxQlT349vHI8JumfEEq8rfmdonmXU206yt54pkieYtLw4cUKgj4WY1+LJzxGIssIZRI0FLzJ+aOj6Dqs2mXNrPJNAiSO8ZTjSQVFOTA4I4jIWFllETum2q+abPT/LY16WKR7YxxSiJSvOk3HiNzx25ZARJNNnEKtbpfmaO9lXhCQ3pJcKC6t8LnYHj0OQMaKiVor80fM948/lqOG6khilnmjnjhdo0Yek3GpG54kDLcO53a88iI7ML+u3/wBbSNr25uIncIUedmWhPUiv68yJQAi4kMsjJ5kwHI7gePxnMiPJiebR4EUPH2+M5IIdSIbfD/wZyNq2qpTenv8AGcbVE2MNvLeQRyAGOSVFdQ7VKs4BAp7YQN0E7PUh5F8qh/hsmArQfvpv+a8yTCNNMZS72daFZQ2PlbTbWAFYYpb0RKSWopuWIFWJbvmklzLuIfSiajIpY551iWWztlYtxExNFZl/YP8AKRmx7NhGWSpC3A7RyGGOwa3QnkSJYbrUgrMYyLcqrOzgH94CRyJpWgyztTFGEgIjha+zsspxPEbY95ttl+satKEmkmrLxEUjq1aUHEclUcczdNhgcHFW7ianPMZ64qDMdVUy+VlRyWDRQczUgn7Pcb5qNNEHKAXZ55EYiQd6STyraLD5gUpyCNayhl5sVJEkZFQSRXrmf2jijGIoOD2fllKR4jav5gsbKfXJWnj5twjA+JgKcelARh0GKMsdkdWWuzSjMAGhSYeXkdPJ1vGzMWSFlDMSW2ZgNzU9BmszxAyEOwwm4gsU0Syij8w6TPEGVvXkEtGahDQSdQTT7VM2mqxQGAEB1elzSOYglMPzE1zTdIurRryJ5VlhYpwptxbvUr1rmv0kbJdhqiQBSafl/qMGo+XDcwK0cUk8wRH3IoQPE5XnjUqTpzcWBaN5q0641qws/SmjlkuYkVzQiocdaNmXKI4HHBkJsq/NPW4NG0/T7mWAzJJM8ZVG4kHgGruPbMTT1e7kZ74Nl/5X61ZatZX9zaKyRpOiFXpUN6YJpQnDqKvZjpZGt2O6nrWiJqV3DJeQrcLPIhjLUfmHIpTrWuZEAOBoyykMnNmnna4tLXRklupFii+sIhdzReTBgAcxcAHG5WckY7CX+Rbm1nurxraWOVPTh5GNgw+0/hlmpABFNOmkTaA1GKE6tdclBPrPX/gjmVhgDDk055kTO7wv82iy32nxBiIxA6lamhaOeRA1OnKnfK5xADk4CTe7DNHkKatZVOwuIiT8nGUW3S5Mh8/ov+OtV5iqtIhpudii4cPJE+ibaqts/kHy00ilwpuFUBS1Pj9vlgh9TX/Cfev8q/Vj5R82x8SsfpQMQQQaA/f2wS5hljH3L/ypkj/TOpLGfhNtJTr/ACN445zYTj2kHp2myfCuYhchmXk+X/cqBXqjA+PbD0YHmxOL80/NkmneY5p7uC3bSdRgtYZY4V+GGRpVfkG58m+Bfiy44hswyZCDID+EMot7n6xGl0W5tOiSmSlORdQ1ae9cBDKEuIAlWVwFB8K4GSS6h5hmtbyyt4Y0Kz8+TsTVeJUUAFK154bWWwRusbtYH+W6T8QcIQeT/9OJR+do3jSSSNPitzduqlqheVEFKH7dcrIpPH0R9t5ktbmSVHiZGtYkmuQp5FPVHwpSn28x8+YQiDamYHNfb61YTXQt1D+pz9NSQCKqvPrXwy6O8QVjIHkjI/OV7pt7HpdpcMkkkiiOFX41eSlNvfMjHQjbVI8RpJE8lfmBHbmB9L9RjPLNJJ9aQBzLMZOh+eSGpDX4BqmTflP5X1ny+dV/SloLV7t0ePg6yAkci32enXMfPkEuTl4o8MaL0LkP7cptmkHn7T9Q1LyfqWn6dD9YvLmNUii5KtfjUndiB0GSxmjbDLGwwD8r/JPmnRPNRvtW0/6ta/V5Y/UEiP8AG/Ggopr/ADZdmzCQoMMEDG7VPzg8meaPMWu2tzpFkbm2htDC8nqIlHZmNKMQe+OHKIjdhmxmUmY/lppeoaN5Ot7DUIDb3sTTF4aqxozErQqabjKckgZW5I+mnk+iflp56t/Mdjd3WllbaK7jmlf1ojRBKGY0DeAzJnnBjTjYsRErL0f85/LeseZfK8Gm6Rbm4nF2ksihlSiKrCvxEd2zGxEDm25QSdko/JHyZ5i8rS6qNZtvq6XKwC1+JXqEL8vsk0+1jkILLH9O6UfmJ5I856t5o1K703S2kt5mT6vciWJeQWNV3BYGlR3yYls488ZJehXem6k35Zy6PFCzao2lC0W3qoJmMQQrUnj9r3ymPNyZ7jZ5/wCTfInmS0/M+PzBcWbJpSCSP1uSHcQ+l9kHl9sUyyRBDDFGibTP88PJnmfzRNpI0SyNzHapN6780QKZGXiPiI/lxxkUwyRJNp5+S/lzV/LXlJ9O1eD6vd/XJJuFQwKsqAEFSR+zkMhst4+mnkurflJ+YF15rudTXTG+rS3zzqfUiqYzMWBpy/ly7iFNEYkF7J+a+j6rrvkmfTdKt2uLySeBhECq/Cj8mNWIG2VY5cJZ5o8Q2Yl+THk7zH5d1m/n1ize2Se2EcTsyMCwcEj4WJyzNMS5McEDEG3sINem+UFuCH1ZuOl3R/4rOGPNE+T4zmuJprmR0jk4Emg28fnmyjE068x81exLqXLq6liOoHauXwBDAhMFfru33DLEFesj1J3+dBixXiQ9at9wwqqLK5Famg67DCq+HQtX1u8ghsLWa6MPKSZYghZVIoDRmUdffMfUSADZjiTbIdI8i+cLTW7O5bRLmKygmSR2JjdgADU0VqnMIzFN2PCQUT+eMyvHp5U1/et28FINQffDpebbleUpXao27bDM0OOV9T4f8KMkxpF2WrXsUYhW4dIlLUVWKgVNemUSiDugh7n+RF3JcaFqDO5creKoLGp/u1OY2QUdnJwj0vNPLsyH8xLEhhy/SgBFRWvrnLSPS48B62df85AMjNoQcgLW5Jqabfu8hhbdQNmQ/lRMrflpIy0C8r2gHQUByE/qbMX0vKfyem5fmLpAr09bv/xS+ZGWuBoxD1Mk/wCcgh/ud06U0IFpwpUAgmRjWnhkcDLUR3Zfpcn/ACAQGv8A0qpt/wDZPlUvrboj0MG/Iadn86XHL/lhl71/3ZHl2oPpaMA9SH/Ou4KeebxAwUSW1uCe+yHI4JVFdQLls9I84Sov5Ro7fZW0sSd6ftRd8oiam5BHoSj8q9SWeWdTOsi29lCteQPEeq3XDm5oxcmTfmBY6tqFrodxpdlNfpa3EjzGAKaAoy9WKjIYjRZZomQoJBaW3mP9IWpm0a6t7cSqZp5RHxVQOp4uT+GZE5iqcXFhkDZYGeVd+R/2Iy8HZgebjyp0P/AjDaG6tTowI/yRgVsBv8r/AIEYqqwTtDIk/B3MTLJxULVuJBoPuwg0UU9Aj/NfSWbfSNQ3/wAmH/mvJzzLHE9J8u6pFqnlHTL+GGS3jllvAsU1OYpN34kjNXI7uyjyRg3FcCUg85QapLY2/wCjbI30yS1eESJEQpUjlyfbrmXo84xysuJrMByQoITyZBq8Ut2dS05rDmIxGDLHKH48q/Y6Urk9dqY5SCGvRYDiBBSfX7DzS+q3zWujG5tpHYxTi5hTkrDrwPxL9OZWn18YY+EuPqNCZ5OIMn1FL9vLPpW1t618sUIFqXVCWUryXmar2O+a7Fk4cnF0c+eMygYpP5ag8wpqqyahpZsoBE6+r68cvxMVovFNx9nrmVq9XHKKDjaXSnHK3eZ4PMR1cyadpX122MaVl+sRw0YVBXiwr9OHR6wYo0QjWaM5JWE20SG8Xy/HBcwfV7vg4eAurhSzMQA4+E9euYWbIJTJDmaeBjEAsZ0Sy8xjV7WabSxHYJIzC6FwjHhxZVb06cvir/sczsutjLFwU4GPRyjl47VfzI8va5rItBpdotyFjdJS0qxcCWDLswPLpmHgy8Dm5ocQTT8vtP1XTNCFrq0CW90J5H4RsrrxYgihWmRzZOI2uCBiKLzfR/y086WPmG0v5bSI28F4s70uVb92JOVQvEb8e1ct8YGNNZxHitm/5peWNU8yaPZWunRLNLDcGV1eUQgKUK1qVavyynHLhO7dOPFGlD8qPK2seWrHULbVIViNzOk0PpyCUUCcTUgL3GOWYkww4zHmwnzL+VHnG+8z6hqdrBAbee7eeBmnAPEvyFV47fflsMoAphlwkyt6J+Y+gan5k8pSabp6R/XJJoZQkz8FAQkt8QB33ymMwJW3mNxpIvyl8leYfK9xqX6WjhCXaw+m8MnOhiL1BFF/nyeXJxNWHEYm0TfaD5zTWNQmtrO2urSe5ea2eS6MbBGp8JX02pvX9rLsep4Y015tOZTsPJ/zc8kearbTYtc1KK3htrY+gyRTGVi00ryA0KJ/NTE5hIU24sRjby2xbjfW7ntKh+5hlbOXIsm/MdjH50vpBvyELU9zGvXHGdlIsBN5ZkP5eaCzUH+kXKD/AIInDD6muQqJVPJ8iHR/NkddvqkbV7bVwT5hOIb/AAU/yqkDeZL1VNQ9vLQ+PwNgzckw5h6dpkg4rTMQuQmdz5ll8t2E2sRQi4eCg9JmKAhzT7Qrk8cbNMSWNwfm9aJHP6XlfTUFywkuAan1HBJDP8PxNueuZPg+bV4m/Jbcfm3cegLpdNhVXPEwq7KqcTxotB0xGNfErkhz+bt8UamnwjsP3j9PfbHw0+Ig9U88NObC6Foi+kpZRzbcyUqDUdAUxjjRKeyvdfmdql2YS1tBGIZVnUIX3Me/Fia/Cf2skMdI8R//1I1/hfy0kjTSKURI0RyHYj04mDItByP7I7Zg6zNwQJ6lGQiItj2t3mg20sjSTTI17MJrr02CsKDilahabbrH/wALmrxXkIveMXDJEjRKdaT5btbO5t7yK7lmVS8oEgB5euoG/f4QM3GGQMduTmwjQS+X0m/MXTg7KALu3G7U7KfD+OZY+hpgf3r3trq2rT1U/wCCX+uYbmqZubYmolTw+0P64opoTQmo9RP+CGK0uEsAIPqJ/wAEP64lNLnuoCP7xf8Agh/XHmrS3EIG0i0rueQxC00J4t/3iGv+UP64qAv9eLjTmte+4xpSHLLEK/Gv0EY0u7jMh/aB+kYVpeJYgteQ+8YFpaHjJX4huR3GJRVITSZR9RSpH25D18ZGxCaRquo3qPfcY0tO5qd6g777480U2WQLQnfGkUt5D+hwUtODL0xpabDDFO6X6/dJHpVwjGjSRvw360FTjGVSDGfJ8dwSAlqkdT3Pjm6iXXyCLj4+x+k5YGKJUpt9n/gjhpBVFC+K0PucCheOHio2/mOKCqR8OI+zT/WOFD0f8lFB1++IA2t16En9vMHW8g5mm6vbGU8DscwLDl08K/5yMgt47mxZEAdpnBanZYkIH3scyNMd2jKHjKsPD7wcz3HpeGHh+BwhClJHGaniK/I5ExDISL3L/nHo8fLOqAbf6cP+TS5hZebkQeiReXPLkdwtxHpdolwjc1mWGMOGrXkGpWte+Qsp4AjL7StK1H0zf2cN36dfT9eNZOPLrTkDStMbIUi1W0sdPs7Y2tpbRW9seVYI0CoeX2vhApvgSBSlaaBoNpMk9rp1tBNH9iWOFFZaimxABGSJNIEQFW90bRr+RZb6xt7qRRxV5o0dgvgCwO2RshJAKqljYJZfUEt4lsuJT6sEURcTuV4U40yHVQNqULTRNEsZvXsrC2tp6FfUhiRG4nqKqBthJJURAWXmh6HezGe80+3uJyADLLEjtQdBVgTiCQnhCtNZ2Etn9Slt45LOgX6syKY6L0HEim1NsimlGx0bQ7OQm0sbeBpKB/TiReQBqA1AK0OA2tAMuWp09QBsJB0/1TiqW6stNPnPHoh/Vh6q+cWMZ/lJ/wBY5shydcebiV22X/gjihw4Gmyj/ZHFWwY+4X/gjiq5WQHcLv7nBaomGSIdePXxOVzZh7n5EngHkDSOUiKPWvAAWA/3aPHMI83NhyTf6xbV/vo/+CX+uKXGe3p/eoP9kv8AXFId9Yt6U9aP/g1/rirX1m17zRg/66/1wq19as+88X/Br/XAVWteWHVrmEHtWRB/HFaUzqOnjrdwf8jU/rimmhqel1A+uW9f+Msf9cbWkLp+p6YlhAkl5bqyqAwaaMEEbdCcWFK51jRx11C1A954/wDmrJIorTreiA76jaf8j4v+asFlFNPr2hbD9J2n/SRF/wA1YppZ/iDy+Kg6pZ/9JEX/ADViVAK0+ZfLqmn6Wsh/0cRf81YsqWnzN5Zp/wAdayH/AEcw/wDNWKrR5q8rr11ix/6SYf8AmrFNNHzZ5W3/ANzNiP8Ao5h/5qxtSHf4w8ojrrdh/wBJUP8AzVjSKYR+c13p2vfl9d22j3cGo3P1i3dYraVJGoH32Untk4c90XzD53Xyl5hV1YadOKEHcDxy0yDUbIZN578taxqHmGS5tLKaaOSKIc048SyoAepyMJAJN0Fa48s63L5B07T/AKjI13b3ksjwDiGVGBoxqab1xEgJLRVPJ/lXX7XTvMcFxYyQtfWRitVYpV33ouxp374JyCY81b8tvKXmbTPMJnvrF4YGidC5ZD1U/wArHHJKwgDdnlhb3iqoeMgUBrtmOQ3Wo+cz/wA6pqRYGiRq1KVOzDLMWxQXjsWt2yxiscvh9j+3MzicWkUt4j6JNOA3BZCQKfF1HbACit0F+m7cKB6Uu/8Akj+uSJDKkc98F0WG4ZWZeQotKtQse2RBYgWhk1y36enLQgkfCPA++TteF//V5noWm6la6xqd3LE0UCW9nArSKaFQiiULuKEcT8WabtbIOAR6yacxqO/exq8lt18wTuGE1vM5khfkFMQ6kKK9V/ZwYwTjH8JH1OJEWGWeU2vWv7JZDOYRFctIHJ4luSBa/s+JXM3T7Rc/Cdku8z6gLbzBclnPpq1AtW2/dp2HfM6MbDROQEixS6ZhcSXHpCcyAqBMvNaH2Pf3wnE2Qy7JA1lcKe9MBgz41Nobhf5seBImjtB0q41DU4YKkRg85mqQAg65javKMUCUHI7Xw7arOyNUMa1Umnh3w6UXjDHHPZL+MvicyeBnxu4zeJx8NeN37/8Amb7zjwJ40fo1lNe3yxO7iJfikIJGw98x9TPw42xlkoKN9bXlrcNE7k03BVuQofcHJYpCYsLHJYQ4e5/nf7zl3AWXEujN20iIJHBZgAanqTgMF4k082PdjzLqYMjFhcOCQT1BpjwIE0BaJdz3EcfOQhmAbiSSBXfbIZPTG0HImvmc3H1xXilcKqhCoLAgLsCfmMxNEbjRa8eW7tJfVvP9+v8A8Ef65n+G28bvWvP9/Sf8E2Phrxt+te/7+k/4Jv64+GvGqW/6SnlWKKWQuxoByb+uRmBEWUHJTI7ljZWEdikrNcSR0uXLNUtXkB1245rMcjknxdAfS4xyklKbeGQdj9wzoYjZEkZGJRtQ/cMsYKwSTwb7hhtSqqrDqH+4YFCotRuQ4+gYrSZaVe3NstzHHDC4mhdGkmjDuAVpRDWi1/mpkZRtkCkd7NqkHD6rO8UpBBdWaOvw+MZB265RnjYbcMqSs+Z/NMMhX9LXisp/5aJevX+bMThDlCZTfzpr2uX9roialePd8rJbnlLu5kkd0JLfab4I0XLMUaYSNsaV/wDPfMkFrIXhzT28N8LEhosaYCkBN/L/AJ781eXLeW20e9+rQTP6sienG9XoFrV1Y9BmPOLbEpr/AMrn/Mb/AKug/wCREH/NGV8IZWvH51/mQOmpr/yIg/5ox4Qtt/8AK7fzI/6ua/8ASPB/zRg4AttH87PzJ/6ugH/PCD/mjDwrbv8Aldn5lf8AV2H/ACIg/wCaMHAFtr/ldf5l/wDV3/5IQf8AVPHgCeJw/On8y2NP0v1/4og/6p4+GEGbZ/OT8yz/ANLb/khB/wBU8fCC+Itb84/zK76sf+RMH/VPD4ajIjtA/NL8x9Q1WK1/Sx+MMT+5gH2VJ7JkTjCTlKprHmvzu96EudevWod1EroA3YBUAHfI8DA5SifIWseZLzzHDZ3l1c3P+kGVZJJ5TQQox9PiW4MjftDjkjBfFRYZt68q9vs5mDk4Z5uJYn9r7lxQ1WTanP8A4XFW6sBSj/8AC4q4Ox2+P/hcFJDbGanRx92R2ZLLKz1ea6NzY2Ul7LAKbw/WFTl0PGhCtt8JymeIFsjlI2SfUtF1bT7cLqcEtrayTtKZbiJlLSOKEcmoaU/ZyHAs8prZBTTWp5IJVeMfDGWc7Cle4x4GvxSltxRTJwkhaIoaoWq9adtgPlkuAMhlKto0zTR27SyRn06JSQnkd9utdt8jKCZTlacQrpRMhJX1FB22NGHTt0yowYHKUn1axN3cqxoaRqCU6dT45Zig2RmaQ99aPdNH6iIghjEUaRqEUKvsO5O5OXDEg5SoRaQgmSo2DLX78lwI8Qpx5x8u+n5i1SUFWR7uaig1YDmacsx8WSMpcPUMpZKKR/ogV6ZkcCPELX6JHhjwL4hd+iB4fjjwL4pd+iB4Y8CPFLv0QD2pjwL4hd+iF8Pxw8CfFLf6IXw/HBwI8QoqO3jRET0FJReNeRAPXcinvgOK0+KVBNIjruB9+SGNj4hTrS/McXllGAtPXFzQij8ePD6G68shlgzwmzaOb82EJB/Rh2/4u/5syrgcgFVH5wAKB+iqkd/X/wCvePAtrl/OQhq/ogEeHrn/AKp4PCW1Vfzmfto9G8fXr/xoMIwljab+XvzUn1TWLbT49MELXD8BJ6vKhIp04jBLFSRMWmMXne/NoZUsIyEb00VpSCxHUj4cxJZwJiPUsiQDSrrd9d6j5M1aS4gWB/qzURGLbAj2GZEeaebwfk/Dv198yWqhafWLE+WLsDYgn9YOHow/iSIySFVrWm9OuNllwhPpef8AhNCQRQjiaEbc6YOIHkiI3KRo78ht+w3j4HDxMqD/AP/W5Xc+dL6+0DUo54IYJHYRR8GZudTUjce2arWYbyQN7BxtTKwGCSlklinvVWX1FqI42ClT0oRQjtmTGiCIsYgcg9C0jzTNZeX4pUtykK7r8ZkcmvRqgUGa/URkJCMSylkpDG90TVoob68kuI7meQiVIZOKg0p04nwXNhizyiOE7lrlEFIZ4oTK3HjQMePIkmldq++bYbhkAttYYkuY3KI/E1p16DwyMhsyBUbqzgM8tFQDk1APngA2W0XodmFNwIgpd1FSCRQdeozV9pigCeTGRsJJcPAsjpLGrOK8mA3Jr/TMnSHZEOSEuIxHPEvENyQVG/Wv68yJ30bQdlVLZPrLDgFoSKV2yrFIkreylG1qsSlwpbiC1RU19Tp/wOZYpBtNtAljSN6KKymgoDuB1WmaztCNxBYZDtSB1NuUsCFArcgtAKbf5WDS80YeRZD5W0HTLy2unurdZmWXjG5LbAKppsR45dqJEFM5GkJrWl2NrrMMFrCIk/dGgLE8mk9ycniJMSnHIksw1Lyrot1e3lxNaAyM8sjyBn3NSa7EZSJm6RKRBed2Ui213BIQAjLRm+IgciNyBvXwyesiZQpJ3CLvXVb2TmC877AgkjrT4q+2YOG+EVyaoJ7o/lXTJ9Btrqe25zS8mL8mFRX2PhlmXNIGgW2UklXSbR/MC2YjAga4KekGboFJpWtczeM+FdrE2U51vy1pNrp1zJHbBZokUo4ZtizUrucpw5ZGkGSSaXCkLSTBV5RAMr1Pw12yztA+mu9hI7KepSQzTBlkcsoJYnpyNBUd8wcAMQxhySSW7mSXiNuO1Kk/xzYxma5uXGAITXTnZoS70BqKAkjala5lYCSN2mYRYYDf4SfDkcyGtWDJ/k+3xHFK7klADTf/ACjiqtBKoqBxpSg+I4QhK9eNLXkhCsCB8LEnfKc3Jsxc2NkkmpNTmE5bIPNVeGiDw0q3/F5DlmNBSRf898vYFeKf5nFCpGoI32rWm58cxJ5SCxJamWP1GVegA3r3+nJ4iZDdMSaUfTH+ZyzhZ8SvbRQsGDx8+hDciKe22VT2LCcyGpYIhKAoovw8gSe5wRlsVjM0ip7Oz+ru0ScWQDcsSTvTplcZm6YDJK1GCKzCVmWpBINCQfwycpG2UpS6Ie6SNXb09krRR9GSvZnA2ttByuEB9/1YxO7KfJM0toPRDOWLOdqHYbnKpZKLimRtqztIpnkV6mkbstD3DAA/dlhkQLbAU/8AIllF/iu1RSTyjuK8TVtoj098jjJkWMp1ElmR+o3ttLNE84aI8ZoW3lQk03UA5dLEQ0w1MZBJvLssml+Zprjd2tmm4oxNCeJXelPHAI9HJtGGNASKp18DlsRs0nm16ajuv3HDSuVE7so/2JxpDYjTfdf+BOKqdzGos5zUV9J9+Br9k98B5JDEhuoqWpTxP9cxLLa9a/JjWdP0rTNVju5mie6KcGCNJspYN0I/m23zKwYpTGzg6rWY8J9f8Sl+dutabe+ULG1tbl5ZbafkG9No6JxCgVYsa/M5LPp5QFldHr8WU8MOjym65t5Y0mMeoeV1cBTXdyeApWnbMWR9Ic7vSuKAFpBK7oyg9+hHY5T4hBYmS2GEGKMxs4csAxBoOvbCch4me9rri1mhvZIiZFCnduRrxO4JP+UMMp7KU/0a3BZohx+JY+L/ABEsWJFWqTQ5PHmsbhhRZrJ+VWuj/d0G4DUHLuK5MaiLI4ZKL/ljrMKiSW4t0TkBU1G56DIz1MQGPhSQ+p6Feav511OziuI0k9eXjG4PRW6mma/T5AJ3SJxJlSNH5Ua1Wn1mDf8AyWzY/mYpGGS4flNrJ/4+4B/sD/XH81FPgSXj8pdR9Ir9ai9UsCrcTTiBuONetcfzMU+BJaPyj1cj/e2Ef7A/1x/NRXwJO/5VHqx2F5D/AMAf64fzMV8CTv8AlUerkf72Q0Hbgf64PzI7l8CTh+UerHf65EKf5B/rj+ZHcvgSXf8AKo9SrT67Hv8A5H9uP5kdy+BJev5S6hT/AHuT2/d/24fzQ7l8AobUfyWvb1YwdRRClTX069f9l7ZGWpB6MoYpRSu8/JL6hbvdXmrqtvFvIREa0/4LMfNrBGNgM5CQChpX5SWesBn0/VgAv2opI/jXtvRsGDWiQ3G7CMpFMf8AlQ1yDtqaU7Vj/wCbsv8AzA7mRhNsfkXdV31FNv8Aiv8A5ux/MDuR4ck48r/lZFoGsQ6xd6grR2aySrVKAOqMUr1qOVNsyNMRllwkNWWMo0brdi19rrW2qepLxaFwskEEI+AGejOafzb0zQTw+s1zElnM8VvR5PLM13o81qLhFivYSnIVJUOAfppmfCXVyokkWwtvyDQf9LY0J2/db0/4LLvFCKkjbb8mVg0+az/SJZJiavwAIr7Vx8byY+GbtDL+Q1iFHPVJCQasQgG3y3yE8/CLZUVOz8nWGuTS6J9ZkS2tkVIGUhmCqT9o0KjcfZzXaPUEmz/E0gESpMIfyH0RUbnfXDuVZVcFFAJBFSOBr9+bLxW/gL//1+e6loWjaHpd24qbllMkUcnJqGuwFDszdf8AU/181GsyGRjEd7TqgAGHeWNGbW9UntXZlnkjcrKVJTqAd9+gqP2ctnsBTDFh4gnvmPR5dK0KK2nHpdIxFGSVfh0etT1/lbMW5HKCWOWFEKPk7y9puoWU6yyfv4HJ4LIwNGH2iAR+rMsT9TdHEJC0rOzELzABIFAOx983cOTSURp8fqahbRsHIeVFYUWhDMAa4Zckx5rb9FF5cBVdVErhQAtKcjTEDZiCrRXS2WmyyxR8pn+Es5AAqaDbbNF2hEzyCJ+ljM9GKRNNdzyJxqQKFhT6My8MKIpsiKCLudPnnkSSjKY1CkEDsa5nmNqDTcNnOshdgxDVqBTrkceERKTLZBPot2Budv8AVyzhXjCZ6Z6ljaOQvJ4xuzbKKnb8c12vgSAC1ZJWl7SvcXbgMKqQZDQktQ1NK46XGAQyiKCb6frusabDLBaGP0ZXMjepHVqkAda+2ZmTT8RUkHm5Lm/1LVrZ7rjzeSGNSi8RQSDr9+Sji4YllEAHZMtV80a/HqN5DE0XorNKiAx1PHkR1yEcHVZSBKSadBS8jmdeSQJuDUb9jtmP2hA+GxJ2UtTvXF8REoVpwAO9ATU/TmDgxXHfoxhG90bbeY/MdtaR2cEsXoRCiAxVNK13Nc2P5EHdsMgg1utQS5W8Vl+urKZeXD4KkEdPpzI8H08KBIApte6nq915fM9w0fOe5+ryBUI/dxoJBSp+1ybIQwCMlJFJabgQWjs0lK/ZQjr2Ncx9aOKQDXVpMZBIHkA4moAp45VVbNojWyu9i7SrI0cTEdRxcBtu9Dmbjw7JGShSKgWVC9VVATXjGCFFBT9ok5k448LXI2rcm267ewyy2K+rnryNOmww2raliKfER40GDiCd1USkAAV+4YgqnHl7y3a+Y5prW8keOONVcFKA1rTwOY2py8LfhhafH8lvLldrq4/4NP8AmnMHx/JyfDPeitW/K7QrqS2WaeYLa20NrEQwFQicv5TU1b9nJRz10QcZ70sv/wAmbR7crp80sVwSCHmKsvHv8IoanJ/mwx8MpJYflTe3xnEN6I2tpDFIrJUlh1YfENjlePXA82IxkoxfyY1gUI1CP4agfuq7H/Z4yyxO7M4Cibf8orSxheTVriSfnIio1vxjCg1BLAl65IZ65L4JTWL8oPK8oqLm5FfF1/5pw/mivg+aqv5N+XVrxuLk12+2B/xrkJZr6IOFsfkt5cbrLcknYjmP+acRl25MhhV/+VL6F6fEvdcTTo3gf9XB4nkx8ALf+VJ+Xjtyu/EktQb+9MJy+SfB80Drv5QaRZ6bLc2sVxcSoQeDvVd9qkAxk/8ABrko5L2Xw63YfZ+S9Z9cyLoUZWJS7n1iKKNixrPt1ywNMiT0TLT/ACPqF5M0U9hBDCkcsgKyPIRxVm7TjIGIu0RhZ5LbHyXrDzpBbWunrM6soDy3BqtOR/b2+z45MkVSeE9yY+S/Jltd+YYIr1rMI6ScRbPOsvLgaULtQCvX4WxjMQ3DCen448JZxpPkCCxme6Dl7lk4qpclAWALV2BbfJ5NYDs0YOzzDe2rX8u4E1K5vJHHG5SYSqrEkepGeXGop1+zlEsoOznDG0vkIOQ3qmjb7seh38MkNQx8G1w/L9OVWlPGvZ2rTH8ynwHJ+Xyb8pKjvR2x/Mr4Dl/L+Po0p37Bn69u+D8yvgOb8vIpIpIzIaOpXZ377b7+GJ1CjAla/k5ZEGtwa7cd3p71+LK/GCfBKd6H+X40jg1vMheNw6Fw7Lsa7gt45kYdd4YIrYuDrey/GMTdGKd6f+Wuj67qYi11RdW0vqSNCheNeRoQdmrschqe0vEiIhjouxximZk/U8p/NHQLOwlttH0mAwW9neyC1iTlIazJG7k1LM24zGhM9XOyjh2YXPY3MkIkmdJATSOSu1KGvbESDQCKTbyr5bgvtA+tx7X3rmKJxJTiQocVQ/DRt0/2WGc92+BBBRvlfQrG81+5XVYGuIprd5oFYFQxDcV4kUPUcciZsOZpHWfly1tdflt4yUjNzFEqjoq+qRtUnplgl6S2Sju9+13SbSy00yoCbiJxHIxJowC7GnaoGYgkbcrhFMI128jTTGJoEqPVL7KBUHc/s4zFhhPkxvRLa2b8ydamb966kvEFFVQualmJ7/srTBAbtHD6rZ3z+nLm9dyVasa8QKnv74Cl5+Pzh8v2M9zBqQuDKs0gjMMYZfTr8O7Mpw4oGTWJC3H88PJY29O99v3Kf9VMt8KTLjCZ6p+YWm6TZxarepOdPvVgazWONTIPVjMnxAsvYfzZCMLNMrCUf8rz8oCn7m+6/wC+o/8Aqrk/BkjiCbab+aOgX1lc3kMNysNvBLcssiIHZIqcuIDsO/dspP1cKBkBNJL/AMr58qA7WV+R/qQ/9VctGEp4gnflH8ytG80X01jY29zDJDEZmecRheIYLT4XY1q2CeMgLxBlYY1rWop1yq2VMf8AP15Ja+VruRI1kXjSQNXZT+1sD3yjMCaDXk+lhf5Lw3Us9/eyrIIwAiSk0jJO/EDuRl5gAdnGxDfZ6qX3G/ti5q0t1xWleyuXgukkjCFjVKOodfiFPsnJRkQdmMogvnHWrMpeFUjeVg/wotAVVCRTj9qtB/xtlMTubcLJHcl623mkaV5OOrtbCWC1iiEcMTgcgSqH4iDxoxyzELcnDyYkfz8tf2dGk+m4H/VPMjwmfEGUeSfzCTzPBqMqWJtv0eqtRpA5fmGNPsrT7GQnClErlTGIPztt9QkNo2mNbCccPW9cNx96emMp1mnJxmmM8lBE+QPMMUnmg2MMXITRSSGUEV+DcGlK7jr8WY+nwGMbLVH6renpfXSo8SFQj0DbAmg3oD75lW5L/9DnPm689SF42q/rOBcTqQZAvKu3Tb5fs5zkZCWSx0aNSQSmHlKbQrOyS3troPdMOUykmg+g/CoFcyBl6lycU4gKnnO3lv7NYIZF2q5U7V2oCDXvlOXUQEwXH1MwSFHyxYWGjaPcTSNH9auXPqPGakqB8Ip269Ms/NCrZjLGMPexO4j05maCyt55JxyPqsxKmlOR4qOm+Z2n1uQyBkYxi4USTuu0y0uE1K3keOkcE8fqtyPw8WBNc2GTWY4jctgmAVC9hBuJSjK7c2JCuf2jX+OHDq4yYiVoK4/3kmViF5KampYmngMp1Y4qI6FmRaX2UkFqFidxzlqSaHev2d8qxTPFfRv4dkdX4qDifH4jm0EgQ0UV427Lt0+M4bVaSQegP+zONopZPMY7GcIgLOADRiTQZg6zGZEHoGJCV6fCziSYheTbLvQgDrlmniA2SG1IplYdVHv8RzLtrITPysofzLpSMAytdRAqSSD8YyOQjhbMY9SG1Y11W7IAoZ5P2j/McMDswI3XWRSGJp3ViK0UAkj7huc1+vPEKbYQsJM0DPfFnqygFgxBWtTUdcjpwDQU7BEVJ6j/AIY5sxINJDdQN6bd9zhsKmcjD/DEB7G+lpue0Mf9ch/EylyCU3SvLAVWlRvuScpzQ4t0RO6XxAySqiqBwNS3T78xowstpGyZc6UFNvZjmyFAU0t8q9t/mcbC0vDk7fxOFU+8l6MNY1yO34rII19X0iwAkIICx/EQvxMcxNXqI44WeTk6XTyyE0PpZ9qGn+eouIhgmRYzSKOK4gQL/sQyrmrhqMBFm24xyeTFdb0jzBIxj1eH/csE9eICSMlrcGhZirUqpFOuXYNXjB9J9Ky08zGyu/Lm5CahcsaCsa96nqfHMvVmwGvTino6yyyVBPFOzMBX6F/5q/4HMLipyqVuMYvJl7qIlUmlaeih6/TkJzVFAUPJRUjp06+GAmgkCylc9trunzxLp1rBDp8pZ5uL2omckVLVcklgx6H7K/Dmrhk00pESMuNyJ4ssNgNkubV/Ni6grTx8tOd1+rIfQEoK9Vf0zv6i8v8AJRuGXRzYBKsZN/xIhiyyB4hsnGsqbuwihQrFLNJGEEh6tvRfh5fEx+Ff8rNhA2ebRLZMbfSvzFsVa307ywJrLjtcOiNKz1B+Lk47bcczY4hXNwpZZdAsaPz5EJJ9X0oaZAv2JioEYA/35xZyrb9hjkgANizx5T1UJvMV0lrbyxSUZ1Ik27g7VzFFuS3/AIjuZNMmeQqZVniC1H7LJJWgH+qMd1pu3165ayvea/GgiaKgP89Gp9Bw2UUpxajdXFleo8Hqsbd2hjJKgyIQy1NNsQd1IQGiR3Ut1LDeaascNzBLGxWYtU8eSjZVoOS9ckSx4WtB0tFv4zc6fHGkwaGVo5C54yqUOxA8cFhab07y7Y2d/HPFbKpRyCw68SCpoa+B8MBK8KItPK9hp2p+vbjg0DkRkU3A23PywWKRwbp/SO3At05MsSKoYncjiKYgsyrSfCHANQYXYH5o2EHdBCnaF3tYGP2mjQkj3UYCkK4U7bYUu4niaDAinEe22JVwU+GQJK0W+QFCcCRErw4rQkVyMmQiU58tMp1SMBhXi3f2yktjx38zB6Xmb61HP6UttfCRQYfVUkQigPxLtTM/DEVbh5QOJgkegpMfh1MhRWi/VwAP+Hy3gHc0HHae+UNPt9MElj9aNxC9X4vEqjl8NKHkTtxyE4DmzhFuJLldRgv4NSVHtkeGGMWqlAju0hrWT4jykb4sTEMyASnvleeGw1K6v9QlGpvclCsbRJEEKuXJXd+tcryQsbNkeb1TWtbttU8nvq6MIlNRMhI+AryPxHb7OY1UWy9nl1xrGjXMbwTT280Eg4vG8kZDA9tzTLhEtct1CC6tbHzxrsTXSWyrLSkjooZQBQb77ZXwniaSKkyAeYtH6fX7ce5lT+uXcJbbVR5j0RQWOoW3/I5NvxwGJRYeBfmKLceY5vqrpJAatzi+JCzMdw29aimW6YUGFC2M7nxrmUVeiee9Qs7jyZo8UVxG8yRWPOJWBYFbZ1aoG+x65jQB4iz6POt6DMlgzTy0sEnljUZZpY4mt4LlI1aXg7F4tgEG71Y5hTx/vLawPVbCwD4ZmNls+/JzU7DTtfvJL6dLaJ7MqryHiC3qoaD3plWYEjZQd3r/APjTysKf7lIK9/iP9MxeCXc3cQQ175t8oXdpNbTalC0UylGALdCPYZDJiMhTEyCVeUte8r6Ho/1GXULZZFd2bgZD1O3LkPtU8PhyUMUq3a8YEU3bz/5SqK6jF7UD/wDNOTOOXc28YWN+YPlOgrqMfXeiv/zTg4Jdy8YVtO88+WLnVLa2ivlaSaVERQripcgAfZ98RjlfJEph5p5n1HTF80W7x0Yqvp6gGDcao3Fq06/Z3yqUDu4+Y7p35182+W7zypqGnWM4Z3iVYYUidFqsimgHEAdMyMeOQPJuhKIDxf0Zv5G+45lEFjxB6D+VPmDTtFh1hNSkaBbpIhDRGbkVEgboD/MMqyQJTGQBtg9i13bXIkSN67qRQjZtuuHJDijRYSILNPJmu2Ol+a7W8uTILeO1mhkkCl/jZSFUADpyzHxYzwn3oga5vSE/MzytQgyz1od/RfrQ4fBk3cYf/9HnIjiuozOk/CJCysJECkGuwIbbf55yEiYmiN3WHvXW+lTyyOZoViUx1VYmHJviqORUjb/JxnmobFIulIaPrhDPIeMs6kcQxaNAppRqj2/ZwnPj5DlH/TINr7Hy7cfDFNJ6rSHnOkfKgGwpvt2+LI5dUOYQSqyeW9ThuWNhDJC7A1kd0kSn7IAUAhf8nEamBFS3WJIUj5evLkq2rK0yo3P04gUSneo35fZyf5kR+j/ZKAoL5SsrfT5beBGa4lLSNdyVLJGCCFQUpy36Yfz0pSBPIfwqSSiz5E09baKO4iN08Q5RSuzKwr8R4hR3/lIwDtKXEa2BbIyIQB8oaULeJTachGS1xIVcyeKqv7PxH/J+zlo1875szmJKrH5b8h3jRNf6VdW8zNRmgdkQitCWBVu/XMjFrskNieINkcw6o+y/Lz8sZ3Ag+tSBjuWnICgEg1rCOmZMu1Ijns2eJE9Uav5P/lw7sPXuFp1/0pQKnpSsOTHaUO9mJx70Dffll+W9oDxe9lboQLlAFPcn9yP9jlcu1O7dEpjogpvy78ievboi3vpuObH105Ffpj6H9n4crHa1bkNfigFHxfld+XcsBuFW/CKxT0zOnInxA9L+OTPa8atn4sau0R5b/L7yUmtx3VpFfJdWMomiMsqehVDVeRWIH8f9ljh7TE+ey4coJVdR/KXyT6nqXMt291dSHk0My8fUY8jsI24j5nLJ9p4xte4ZGosQ17yPPa3QtdOWRNKXZpiwkIBFSealfir+zxXKf5Qxne7LCWUBf5e8k+WbmQWeqSXLzN0ZJFjRqUrQGNun+thPaNeqlhO+eyZ6v+XPkjTGg+rrc3NzIQ6RNOjJQGlG/drjPtK43EscuSuRSpPKvkuGVo9Rsr6GZQCfQuIilG8VdGYUG5w4+0CRfNhDMOqY3nlDyhBZR2EKXdzbxObpwZQ0itMip+xGg40QHIZO0p36aWeU9EPZfl75RupZK22pJBGGFVmh5M6j9nlH92VnteUa4q3QM+6c235QeRLpG9G7vOYA5xtPCHWvSoMfXtmZj7RhIXbkRMSLBQGo/lf5QsZPhN7cKOXMepETUDelFXpmLPte5VFoyZaOzHl8nyXfBotHeC0LkrIGKTcAftsH5Gn8u2TOvEDvPf8A2LXHIb5siv8A8vvL9m6CGO6uWFGVX9P06gUUuVXfp45Tk7TN1EimWXIRsF2l2V7o7y6lDZlTwWN47RkEpHMMv2K0qe3/AAWY+TUDIOAy5/zmzS6k4jt1ZCdc8wtJwYSrECoaYojAMTv8KjmeP81MojIiNCX+a5w1uM7lj2u3+vXjTyrYzTekvBpn2Do5IqFHGo3PLfLtPwRq5bycTNrJHaPJBeTvL9kmpNeXcVzpptvTlijh4LHKUapDeqwqB/rZszrQBRILHBk7yzfVvNFjBbj6h6ks/Hm8ZVD8INKfC56775RLUg/S2S1A6Iuy1WO8WO9ZWSGVEYFVRiP3YWp+Jd6r/wADkZ5RCV2zGQc0xhv7WOSG4ZnaNGDt8EdGANaU9T9qmVZtWDEi22OYA30QLec/0heSyRaE9hal3KSSegoFDQ8Y4jX4v9X4s5+eilH1eJxSP83ic6famKuqGvtWjkhkdbEtMi1jnAjY1Y8f3dasG4j/ACclhwyEgeL72ufakeAgBIk/MKzstV0r6/aO0Npdwzcq/tQmoBA6jxXOk08snOxQdWNQSd2b3/50SXTo8Gm6t6EqP6UsF3LErAGtQgdaDj+3T/VzPGugOZptOWPehtb893MltBZQ/XjLexBFnaSS8FueaszS+seLEIXIZv8AUymHasJiX8PD/skSlEb2t0zXNLmn+oveNcXKkKJzAilix7qpCrTMUdodTsEwzxJpOJTpiRK55SHoUWNSwPiVrk4doQJq24yAQslzpBcDgVr1aWICn3HBk18Qdi1HPFQvb7SbSBneJnKgFQsZQUI926fRhlrQB5rPOAoQa95daISyTGCXosXxVr23B74jXCrKBqIoix1LQ7uYxxXbRuo5KAGBHHr32OAdoDqmOYFbqFzDZSK1JzCVL+uR8NQeg3O+HNrxHkLTKdJdrvmOOwEbRLNcyzfEVZQDQ7k7A/ZGUfn5TlUaoNGTUUdm5fIujeYI31y5uLqKS5VWYGaSEmi8QFRXC9F8MzRrOGO9NwlYu0ss7HSm8xJdyy3kJ0iIJC/NzFIUUokcimoP2qu2YuPtMg3KqaBmPFudkFF+X3k2eX975l1WG4YqXh5gIGc9E+A/DX7OZmPtTHIcmQzDvTmT8j/LiCsnmbVl+c0f/NOXHXYwN6bfixu/8l/l/Z3aWzeYtalLEKWSSMgE/Ne3fKP5TBO0dmk5hdWn3l3y15Ei0fWbS31+/kS/iSC4a4kjEkXFiwMfw9/5viwz7QiBZDYJiuaUp5D8jRaWdUj1fULuZAQbCSccC4rsSqq/Qcspy9oE49vTMtU5+nYsee30q6QR3Ma2qmhMcTlZFQn4fjJYKxHxfFmPHPkibszcOOeYN2Uw0vyn+W+o6tHpsNzrTSSKWXncQhiAKkhQn2f9lmd+dlz4fS5sNRxHmz3yt5T8k+S9ci1uyn1K4vLdHQQTuGWko4NVQg8f5sjk1sSHIGQDqlGuan5Z1jXLiPUp59Pkeb1FZVSRdl40IahAp3ODFr6jdbOPPODJEaf5U8lXY52+uPISPiXjGCO2+2ZA7QiWUeE9UXF5O8rI7MmpyxmM0JVYt6j3BOR/PRPNmCO9Yvkvyd6iIuqTfF8TOBEKClRuFyGTtGEVuPK1O6tPLeiE2yzT3EbOqvOyxOSJKABW4028PtZg5dZHJMEEsZZRHZOtPTyxLol/o6ajcyWl4CtxG/ANGxUq3E8QOVP9bMyGrgd+TOGUEc2G3P5OeW4KPbX1z6DEHlOi9zRfiXY5LJqJDlIU0yxHnxIjXfImlapqWo6xLLJ6kshYwooLcafDWu1SMxc2vlEcUSEZO+0ptPJHlSURrJNLHI5+GBl+Kv0ZVHtHLL+Joib6psv5UaCyclvXow+IcU798vGsyfz4tvhf0kFcflr5ei4SNdTSRluEnFI34b9wK/qyEtfOJu4rKB70Qn5X+VPS5reM4NKkJH1+Vcme0p19QUQ80Qn5S6BLG00dxL6Y2qVi2p2oT1yyGsyEXxRZeGe9TH5S6IYg31xkUn4eSQb/APDDJR10qsyijwfNRh/LPQZWpFqMzjcOqJBRSDTerrlf5+zdhRDzXp+W3lj1nie7nBipyJWFd2NOPXrjDtCZJFxCBAXzRiflV5aozrPO/HdgphBFfpyz81kP8cWYxX1Xn8tPLYm9JnnLjb7cY7dPtZV+anf1xXwvNGH8ofLhZY0uVdyoYxGYK4r2NaD8cP5jJ/PCfB81Gb8rtGhLyvbTuBUyN6sTj/hWyuepyjnJEsKg3kTyq3BFtpz4jYNQ9xR/iysarJ0kw4AojyN5S9T0nt5lB2H7xamm5254/nMt7yTwea6z8u+RbPV7d42dbu3kSVYmlUHlGwYVBb2yX56Y34jXuYmIvcpZq/ljywsF3qM0LvdBmdmEgCksxbpyrx37ZGWslI7FZ0WIQX+nXssQTTolsjxS4lDFXVq0opqN6DLzLJHnM8TikkJvqI8jWcqJBp17OgAZ5SzKFB7bAr18TkBqc8jtIU2mYTTTdD8lT6WLue0lVpB6kSiQ0ZD0+02xyk9o5I3En1LCYPNA+j5IaV4xZO/w1jdJmA8KMev3Lhjq84FkoEwFkmmeWYFkaa3JC0KLykB+I9BuOW+QGuznYFBmpWVz5cla5A0zi0a86MWIKUIqK5bPPmFermg5N3//0ohF5k0QTOj+msPIsIwlRyG34++cRPS5C67ZJ9W833McxFo8cdsjkh2QK4BoCAcysOjBjUhugSTODzlYXFujSOtOQFFqtQNq+GY89FIGmRkETL5k0y3jWITlvVryCCpUEfD/AC7f8NlcdJM7p2QqeZtNZuEUsqLsGY1FPl1yw6SQQaVTqtk7/urksNquSVIApkPBkOiLCutxYLRri8ZkmBY7gAVNRypkeE8gE2FZNc0aFEj9SrVqKVJqe9TXbB4EzuzEgqNrFojcjcCpHVQSfwGA4ZMCQhH1K1lVjE7STqwI59K9+oOS4JCkGQVIr+2YhXYRPwPNAQVFO1fnjKBKbBWRXfrtVJYwYqGjPQE08R/L2wiBioUdRv4Y4SEMUkrU5RMQVZt8ljgSfJBk5NSt5oGEsKLMq8YyOh4/ZB26YmBCJbpNe6/eRXKtIVZIyGXkKb0oVWh2GZWPAJBjuE80/WLCezWVmRHHwmMcjSgoKMeu5zFyYCDTMSVP0tZD4kuuRX4eDdd/Db9nrkfAPcvErWWp2F0hVp4wsbmiMRUkmtatSpOQlhI6JRlxdWSxhy684x/d7FgB4Gm3+VkBGXQMiVOSTTZAqoOUvLirKwBqu/w164RGTEgLL+XT4UHAxer6n963E9FoadetaZKEZBEqStbu4a/VkCURgBCGCihJHKtcu4BW6IojUrmaG4t04RxggtHKzjiWqOQO+Qx4QQUl1xf3FsAEECBqFmUrXia7mp98MYdEA1yVJPMcENVKxc2FCQQahd6jr8siNMSpLcfmKzPSaOJW+EF6/E/dq/yjE6YrHZx1nTDO0clws5koPT/ZJO1RU8cIwT5opfJqGnszLBwElAFAKgVB3I99sfCkyruUWuIkYMJoEaRQSjOOQC9aVB7nDHEUCJVJtXX0Vhlkio5IYMygU38OnjgGA9Ay5NJqllcK4j9Jo6HkC3Y9qdcJxkLYaWz00uWkto25jisiGjCg+yDXGJlytIIDoZbNbcJCiLDHReIfYAfT4YzEiWRkF9vqMV1KsaMskYFREXBJG/7O32chPEQGHFeylLp+ntLLPMvosikIoYhdzxPQjxwwkaphS1Y7Q8lt26kry9WrUU0DfENuuSkDbIkdFGLSbdKTGKB5BVJHkIZgvTam3tXJnJKqsqEXyQFzI0TBFJWE0VVX+VaeIyoxKbRcj28loqSBY4pR8ILca0HQg77ZAYyDakghDC0sOScE4SkghwNzvsK/LLakgABEfVLz1PVe+V0pu3EKaUIXp/LXBKI7mRsdUKdLnuJ5FF2si9OK7Ny2NOVckDQ5MS4abfqOSz+oI19Liep4n4uW56eGRkR3JJXrpSQ0J4KC3Op4n4m/a3+ziZEsCFCy0xIfVnjuYgi19Z1Cs5HXenv1yUiTzZAJvaxlbeONJSUjHw0+yK7vtvlcgbbRM8rU2jpEGEwJHx/F14/LpXBwMeEIJrjmWjjulAbf0033Pf38ct4O9BKq1u7WpE85WNalkAAb6e/yyG3cxMtqQ0iaZxXmr8IwVAC70O/I/wA3TJAFja0rplxGsYvJY+TVUftDlseu/TJDbdIk5vLUE0Txw3isJqci6BjUEGoZgG7YRmo8mQpExaDb2kkxSdQ0lOcQQ8dhTr8WQlk4uaCFi+WtKuIQzMzKx+LiSA1du3h44RlIRGKx/KumOxlMIaUsBU0AIXalKfZwjUSqrTQKIHlq1EkdwlYp+ZLzKQGNRTiG/ZFP5cAzSqk8KI/RnwBC7NMBTm9CwoKV5EU2yviJK0Vp8u+uknqAMz0HFgNjTryO9TkuMjkjgbstHhtnKC3C8T8NBsaihqNsEpE80xjTo7GSByTIuwJ5Ur8VdiOvviWYQ62gNw/qzmjkqqqdgPeg64CA0rp9HMoj/ec0iIZEZv2gO9Ou+Mdr82VWp/4agaC4nf4jLR5KfZXwIP2h0yfHLaujIQbtNNijRbT1CI670mJHjUchscZ2d2PRMYtHtY4puDMpkasgZi3IDY0PbIEX8GQipppUlamdI4geKqOtO1T1yPCGPCsuoJLOP1mq6R7VA5HhXeg2riMYUgrbA2U8jlJldD8XwbfH4GvxHp8WSMCEA7rrhGkT/RyFlRt1rtWoFSenemAQFsjy2XW8NyIF+syhXc/CoPICSm/TEgA7KCURJ6ckvppyUMo5CgAJ6daYBBPEUHc6Fp7RuJGdVcFTRiDXr277bZOM6Y8K2z0zTAX9ISersJXlJJLDw+jJSkSilZtJDSExTH1EWiKWoCdyK198rBSLX6XpBMjyXgkNSPVRZf5dqAjf/WyQEeZ6JiCTuiLrSLOSUXFm0qxk09NpCxSu25OSkRzDOYrkls0WmQJNHKGAl+Fzzbff26ZGywGQhuOWzhcsKVRaIF6U8BTr0wCJtESirawS6WqAPzX6zHI8gUcR136hqD7GWjGSmiUlNpost09wlvG0przahqq1rUnHjkBVtR5tx2WkSMfrFseAYiOnIg1BB5YiZHJmA1BovlzTrZoLKCWWIuXLAcveu+5AyWTLKZsndSBe26rNa6MYvTaoe54KkTfCWYdPh8aZGyOXRjYQ0h4l4QqBFQqqk7KWXbb/AGORqzaLpAWGk2Md16qWwSJCUkkib9nb7S16++ZE80iKJWUrKa3senmz9UQlkK9K8SeR23OY4Jtl0Q1vcaeySIbUC4RCU32LEfFvt8stIPexf//T4c8N4wAhIaQFuTtQUVT0BzS3Gzbqg208E8YWY0qN2OwJH68iIkHZCIttOWGMjmvE7py7D6PHK55rKktahJCnBSzPQUWnUU+eOIEoU7f0rklreVkII5I4oCPn7ZKdx+oJBKOMEsUikOSd/hB6/PKOIEKVdjMsZWRlao6eAyAq9kIWSS4knKwzKkMY3G1QewHfrloAA3G621ELppf70oVbchq7eIwnhA5LaMWahIDni1KmtTXKTFFqM96to6iSWryHYdqE+PbJxx8Q2DIFb6Uc10twZkZUaiVqRWnXam+GzGNUqJYoVFXVmBFDsd+mVC1Q99fi3RVkLHY0IPQV+eWY8XFyVAJJBeOv76h/Z2Jr/rHLyDAckkUmUMMsQFZeTrUKKUFKUzHlIHoxJU4X1ZJg0oR4qGiqK1Pv4ZKQxkbc1tXVZANlFD8XIdRXwrkLCQVkSgljyYAHjxqBv3O3z64ZFNr1imZQUkLAbFvn3yJkB0Y2oSM8TgOCwagZj238BlgohbXpC0klCxpu3cewyJlQTaIksTyD8i3Aj4Sdqg7ZAZEW2fUWQh4w22xpWlR1ONik8SoJFAP7sFjsRx32yO56otdIC1WQBD4dSPowA0xtqMqCRQlkGzUG5HSmJJTa2SYHZoeRJ2oOnfCB5ptZ6Cs/IghS3TtSlAN8lxGlte6gtyXjXo602P35G0ElTMkyPWKJA46PSlR4DJgDqyBX/WCUHqrwb9oE7V69Dg4d9kEro2Q0HU7swAFBkSEKX7uKUyQsQ5FGcHfr298luRRSNlX1nZgrNVCtfiNSfDY4OFNqhuIEDKQTXoB02yJiSUWoXLQvCCpIkDAluRpSn4ZKGyb2UbNzHC3ryBqUovsa06/LJzFnZFohmtpal5XfiKorN8IJpgG3RNr47ekgJuHCk/D3oeux7YDLyTaJqnGQCVyrCgofv+7Kvgi0uWC+iukk+s/A4JYn22HTLyYmNUto0SzxtyMjRMaV4EknbenzyvhC24zFpVdJnoB8VRTenXp1x4QE2px3MXqmNmARgeQHw15deWHh6qCiYpZoSF9ZUWhCAGhow6YDEdy2hJ0D1EkzMUY1WhNCdqHtvko0Oir44LYc5Y4zzABFKqdvlglM8mNoiK6EcBVnk4n9ksWFfp8KZWRaSV312cssbSSlwKBa7Lt4HAQi2zcIjlkpzSlGZqb9+njkeG02mEGrrEih4fVoAABThQnfc5A4mXEjYZ45i0LyTJb8aBAR33JDAg/DkOGkiaYWvG3URxytO0hBVn6KKjYLtlcrLKJ3Xp+kYbglY+SN4bAKTX33qd/8nEbMuqOhEzfFJwCrWqg7iuwPbGmQBdduEQsGPEnYBRWopvgpBQ8t1bKm8j+owqqg9TXr498kAjiCks6qysPWfkeIB6qDua+IxIRxK884oDHGvqtQoDsa0rucBDIleZFEYfgqt1Kgg9u1cCLCHjjij5tHGGB+MndTXw6nwxJKBSvJPGiFvUPpKRULtyI3IJxBLLjQd3fqkIaGBpTUBoH2NCRuKihyUR3sbCNGowFOYQs1K0rQ1H8cFrxhTGpxPGzxwMkgrVWIArsa8gTikzCg1xbXCFZLdmr1qSQK/I40UcS9LfR7dIwtuIubMW4A1JO5JpvhJJ5sdlGRIFldYRGqgByHFVJDU3yIJSCpGRY5VKNGF3JG5FKePbfDw2GNoqLVoQvPirlaF6LQ7ioFScQGQkF7XySLxEY226/FxHxGhGAimRLRu4yUaRY3G3JVBoK1r07j3xFptCpqpEoRYkElRymI+KhHw0rXvjwkMeKipT61dxrIqwJyWokPKoqaUO3jXfJCLEzWWt7LMgeWMAbVYCo3HYVNMapRO1Ux2MxWR2+JVoF6AbdvY4CuxQWoTCJFkiHJQQoVB9kE0I37UyUBbBfPdwxqqGYBuJqCVqO5FOm2JiSyHkgY9QtbeZXD8wlXMjfEQSOpNN8n4ZLGlzPN65nVSYACzlTRSdievWnIfDgrZatauvfU7tIooDHJJzDlgxqCKkKwpxqP8nJjESLXipWt7i3uTxmYnmOYrTlQDfcGvQf8DkOEhQXCysrluCylFVeK1ovKlRsD8Rw8VLzbtdJtbepS7k4yVEnwAmij4Sa4ZZCeieFEk2VqiqiMY2+Lc/CeWx6CmQJtlwoe3n08SPcCzZwY2JZzsOoqp8cs3Twh/9TjE9xxfglOVTSvY1365z4j3unIU59PjmZC9OJJb1FNOIpvhjlI5JulaGhkihDGRFFefjkJciVUp4GNweYNaGvZhy2GTjLZbULe1hgl9IMQ/E8anfrk5TMhaTJGLUgL6hpX4Sdvpyk+5i3MAkocyckHTcEUI6mmMdxVIU4GieYsK8SD2ou23X2yUgQEuiEVtI5L1JFQNyQD06YJXILTa8lj5UJHXY0NSe/XE81pDX1ks1JGanHvWgJO9OmW4slbJBIX2kBihI9QGIKabd/EYJys+a2rLb3HEOsgWMLyDEgUY5XxDuQh5bKa4hKLJ0apJqeR8N6Uy2OQRKYmm7fTLqKSMswFDxZa0HI9ME80SCtpwljVoy7F0pV9+3htmGcvNBVrWyS15py5jdgpNaZCeQy3VdIbUsYiCWf4hvTYd8A4uaLQ7R2bExrJxrsQepGWAy50i7X/AKNDjlDOYoqbgHxweNXMWUqkcQVqvKvEHiF9/p+WAm+QS2ArPzVixUcgB0I6VOR5BStSP4W9Q78eRHia4Se5gCpw2U4kr6xIO5Fex98lLIK5JJREelSTTLSRkrUniw3K7mhPU7fDkDmAHJlGNqk9vEkJaFJXl9YxCPYsUK15Gnh+1gjIk71w0yOPbZCvcRx8QwoDUKCaE9qjLBAlgApJcR3Sc4w2wpXwPyyRgYmikBpo3jcGKUhhRQO/LwyQLMSAV0g5o3xDkaV8fnlRnTGRtzQyqAoJO+/H2P34bQh7pY+aRzV5yklifs+HU5OBPMIUhHEpeTmxMg4Kp8BSmw22AyZkTspK2Cr1jU0Irx5V6de22Mtt1BXRJcMVJZeNfi5GlPvp4YnhSq/UtUcqAOAPau5H09sHFEKrfUrqCF2dA7V2X2pU5HjBKqRKqHEkXFqgsD0qdgu+Kr60CVhHMV4oKct/ngrzQQow6okhaNkCkA7FgK18NqZOWEjdbR9tJUclj4q3QVBp36DKJCkhWNy05ROAAjJVeIFdzyNfvxpLTq9RxoaA7npvgGyhTWB1lpUEkhSRuSaZK1LS28hYhCGUddh160rhBRTc1sSih6FlOx67Dp0xEkhyQMo+EkA1NRWgp12wcSktCZOfpF2DDcKAaH5k/PExNWhWiZWkT4nVBvQ7jfb6OuRspDkAkZjx5FWNGHcD3OE7MSpzRICOLBnBowpTYb1yQVtYkY8KsisteR78abADE7JC9JZo6ULbA9TsKfLI8KolNSdyGRwnbiDt92RliBZAo2HXXBCer+8I+yTQ+9MrliTxJkuqSoBRuRP7TEUP30yvgZcRVY9RcMxkYfF8Kim47+ODhY8TbXCcVeiPyYmoNCPAFjkSVtUM8pK+pHRmP2gQeK/TTIpVXt+CIyVYvX9qpHXwwkqXOJw/H0y0ZG7AhgdqmqjBYSQ0Udj6gjNWJ4AVIG3th4gilG4S4KenursdyegpWgp/NT/hsFpLUVtcA0kqPSoUY0J6b9NjhkGNFCSOAwtiGKUJ3B38STt3yKKQtlqkLyC2QOpWjKqrWnWtaVH35bKBAtCZFrQyPEJ2UqQZuW3EnfqRkK2Z7KohgRy8cvqCMlGWoruKH7hkaARThZvyUsw9MqSHFANz36kHESTW6mlpDydeXwVHwEbkmpAyQkEUqPaiFEZ1UF/gINKk/s+++DiZGFLf3Mboi/CCvIKOqnfx36YbWlryNIvJUBTmKuDUV67/ADxCOFFLbyrC7NErSAlwincAU8O3I1wlnGNoK6XVmWR4bWP4QzqqniCuyhAB8VeWGNXuWXh2FCwaeZmhngkSWhYuaFAan4UII6ZKUAORauEq9vp1y8TbhEIKsWrsQdqZAFeEr57C9MkTF1KKy+pCVNXTqTt/N/k5IEDmngV5dP0mdi8cC15VFasfs0wcfczq3W2nKLThBaxxpuHjAoCQd9vDBxEsQOiLaJ1Q/Z+GgCU34r/bTBaRCkNcafbytG71QqK812Ox6NhEypAQw0a19WirTaqsTxJPfcDvvhMkCCtJpnp/GT8Sg7nqB1+EZE2yMacbWJo1TmRI5+JjQe+StG6ndWc3oLCFUuzUKdQBSpYVwEqonT4vgdY2rxbmp2/ZPEUrTDxIf//V41erak/bVWq1D8RPXftmghxW6kqSxL6Kcphxp4NSn/A/fhJ3U0q2MUIuAI5izdSaMB8umRy3W6oq7U82KODJStKGlPDplOOuvJiUMyRNx5OiS9qVpX6A2+Wj7E0tuILf6tzW4T6wAtY1EnJg1e/EABP2slDn5JAU/SrabzKBtzIFfi+kYb9SNkRAjegvoSIU8AG+mldsrlV7pKnKqhjV1JpQg8qU7HcZKKlT/ecqbdNzU/0yVBi16bGZKSkEUryDcT49iMdqSLRTiMKKlSKHjXYdTlYClCy+tROdDBtWta09tq5ZER+KNmoUBZBG7CMyfaPLY9ui/qwy865Kio0b0pKutanmfiryrt1HhlRqwqvGs44+m4MfGg+1SvY9MrPD15pKJpcggEqZeI378a9tsrqPwQsCziVW5IdtlbrX22yXppQAl9xGhdDJIBRySo5b+I2HjmRDlsu1pnB6gtE9KhavxDfx98xpAcW5UqJEfKL1Ch3JWv8AN3G+SrnSUTb/AG3MfGtBQDpSuVyG26Gz6vqFmoQQeadgK+JwUKQVsoueElGBHfjXrUUpt4ZKIjswKMtzdiMEKC/da/xymQjfNsCtp3I3hEQIuOD/ABIRXhx+PYj+XI5AOHc7NkLSK7Nvyb1VWo+yVJqT7Uo2ZsAehauq/TBBWcxH9r94orTl33I/Vhy3taV05vQqmMIxB3Wu5+WRiI3uVU7UXRnJcqr7bDkTw964ZCNbIVbo3YRvQUMxIE1DSnv92RiI3uVS29BKL6xVQKemX5Enw7UpXMjGBeyqsZuDbgMAsXYgk99698gRG+e7EoaIXRIrQD4qA18evTLCIqEcIoyq85lWI/b4gkBvoGU382Saxq/KHi1RQUrWvT5eGYprdV1wLkSfaBXYsWr49MEQEoG/DmT4ywlPLdK1B9uIy/EGO6BCt9Xbmx6UTjy5cduR3HKuXbWhRjigBoJyzb8XIcHj32IyciUprpq0T4W5Kft0rQD35DMbKGYRh9WrelT1KniB14967dchtSDyUIHu6kGNTAAAhqKn3/mwkRrnuoVJOAjH2WqfiIJFKnalB9oZGIVZMGD1SjbjkDUCn3YYhSrW5uBCgRVLEncno307ZGQF81XWR1MMTOqMNgASeNd9xXb50xyCPQqi0KG4HIRqNqk+GVUaSW7kERngQ0lfg7b9qVwQG+6EucS8T6Z/eileFaH58RTMgAKW4OJHxgLJv4kV4nwxrfZQ2irQfEpNSDy5bbbnpgkqyWIs4ZJikatUoikhvauWROyUQFgFQrcpiBua0A9qjISu0Ier14qq0q3JifirXbtXGh3qEVMJTAPXZVkrRQvIj5nbIGrVHRc/QFOm9ORNOu/auVTAtUdBzMfwUXcGux7nZq9spoMgioyjbFeA3oQanpvkCEhMYTF6JCCjcqhiSTWmy0pgDPoheUnqEcD6nEfGD8+NQNsjIDvYm1WNnJUsoV6KCKkmm+5ptuOuNBLrh72gM8a8qqI1JNAOJ3/l6UyZA6JKnKlx6WzktyUyEV5V22+EZFibWP6ProDx4hPjZtiTTYEUOTUqGnRWIuC1rMGu6EBCCDuTxIJHQfF1yU7pApXZLAzH1pEW55Dn6oJOx2rUdz/wuV7suu7Xo2Zc/VrhlUMQCA/EtyBJ+z9GE2pV7mFeJZrj91yUhCrfaDCgqB0PfAqlCn72UTO3qjjzJrUgMePbuciQxHNq8jt3uSbmYQychRaM3xjoBtTfv/lYYhlNSmjsfUYCat2JCasG5FeO4oBk+it2KxDn8aMhPwCQNQGu/KoC1riyFplai7+sSm2P78bSg8iDsDVqjpTBRZxvoqrzCMGo0ZBoRUUT4eXvg2tMTKlBfWHIR8CA9eRrU7bgDqMQDbA23HwEu+9UcjqFHWoG3XCQjdDKl0ySESemwIIVwzArT4gNulf9jgARu1YgCesBJJQ8lFaA16EkdMK7rrd9a9N+UY5LUL9kclr1O5pkiB3qOJDRtraFlCiR1ZjzrTnUjYA0Aof9jgqPej1ISZvMPq/vkHpAjkFK/F8VNiP+CyYEK5o9SZqLtZ3qeabGIioPTpTpkJBI4lCdL43C/GFkK/FzDGg79skFNqEolChWYNIKVdeVCe9BTbHZiqypKQtXoApKkh6Up0ag6fPAeagd7cf1urFKenQhweXTx33/AONsI5p3f//Z\"};"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/doc-ready/.bower.json",
    "content": "{\n  \"name\": \"doc-ready\",\n  \"version\": \"1.0.4\",\n  \"description\": \"Let's get this party started... on document ready\",\n  \"main\": \"doc-ready.js\",\n  \"dependencies\": {\n    \"eventie\": \"^1\"\n  },\n  \"homepage\": \"https://github.com/desandro/doc-ready\",\n  \"authors\": [\n    \"David DeSandro\"\n  ],\n  \"moduleType\": [\n    \"amd\",\n    \"globals\",\n    \"node\"\n  ],\n  \"keywords\": [\n    \"DOM\",\n    \"document\",\n    \"ready\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"test\",\n    \"tests\",\n    \"examples\",\n    \"package.json\",\n    \"component.json\",\n    \"index.html\"\n  ],\n  \"_release\": \"1.0.4\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.0.4\",\n    \"commit\": \"cec8e49744a1e18b14a711eea77e201bb70de544\"\n  },\n  \"_source\": \"git://github.com/desandro/doc-ready.git\",\n  \"_target\": \"1.0.x\",\n  \"_originalSource\": \"doc-ready\"\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/doc-ready/README.md",
    "content": "# docReady\n\nCross browser document ready helper. Supported by IE8+ and good browsers.\n\n```js\ndocReady( function() {\n  console.log(\"DOM is ready. Let's party\");\n});\n```\n\nProps to [dperini/ContentLoaded](https://github.com/dperini/ContentLoaded) for original code\n\n## Install\n\nInstall with [Bower](http://bower.io) `bower install doc-ready`\n\nInstall with npm `npm install doc-ready`\n\nInstall with [Component](http://github.com/component/component) `component install desandro/doc-ready`\n\n## MIT License\n\ndocReady is released under the [MIT license](http://desandro.mit-license.org).\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/doc-ready/bower.json",
    "content": "{\n  \"name\": \"doc-ready\",\n  \"version\": \"1.0.4\",\n  \"description\": \"Let's get this party started... on document ready\",\n  \"main\": \"doc-ready.js\",\n  \"dependencies\": {\n    \"eventie\": \"^1\"\n  },\n  \"homepage\": \"https://github.com/desandro/doc-ready\",\n  \"authors\": [\n    \"David DeSandro\"\n  ],\n  \"moduleType\": [\n    \"amd\",\n    \"globals\",\n    \"node\"\n  ],\n  \"keywords\": [\n    \"DOM\",\n    \"document\",\n    \"ready\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"test\",\n    \"tests\",\n    \"examples\",\n    \"package.json\",\n    \"component.json\",\n    \"index.html\"\n  ]\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/doc-ready/doc-ready.js",
    "content": "/*!\n * docReady v1.0.4\n * Cross browser DOMContentLoaded event emitter\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true*/\n/*global define: false, require: false, module: false */\n\n( function( window ) {\n\n'use strict';\n\nvar document = window.document;\n// collection of functions to be triggered on ready\nvar queue = [];\n\nfunction docReady( fn ) {\n  // throw out non-functions\n  if ( typeof fn !== 'function' ) {\n    return;\n  }\n\n  if ( docReady.isReady ) {\n    // ready now, hit it\n    fn();\n  } else {\n    // queue function when ready\n    queue.push( fn );\n  }\n}\n\ndocReady.isReady = false;\n\n// triggered on various doc ready events\nfunction onReady( event ) {\n  // bail if already triggered or IE8 document is not ready just yet\n  var isIE8NotReady = event.type === 'readystatechange' && document.readyState !== 'complete';\n  if ( docReady.isReady || isIE8NotReady ) {\n    return;\n  }\n\n  trigger();\n}\n\nfunction trigger() {\n  docReady.isReady = true;\n  // process queue\n  for ( var i=0, len = queue.length; i < len; i++ ) {\n    var fn = queue[i];\n    fn();\n  }\n}\n\nfunction defineDocReady( eventie ) {\n  // trigger ready if page is ready\n  if ( document.readyState === 'complete' ) {\n    trigger();\n  } else {\n    // listen for events\n    eventie.bind( document, 'DOMContentLoaded', onReady );\n    eventie.bind( document, 'readystatechange', onReady );\n    eventie.bind( window, 'load', onReady );\n  }\n\n  return docReady;\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( [ 'eventie/eventie' ], defineDocReady );\n} else if ( typeof exports === 'object' ) {\n  module.exports = defineDocReady( require('eventie') );\n} else {\n  // browser global\n  window.docReady = defineDocReady( window.eventie );\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/dropzone/basic.css",
    "content": "/*\n * The MIT License\n * Copyright (c) 2012 Matias Meno <m@tias.me>\n */\n.dropzone, .dropzone * {\n  box-sizing: border-box; }\n\n.dropzone {\n  position: relative; }\n  .dropzone .dz-preview {\n    position: relative;\n    display: inline-block;\n    width: 120px;\n    margin: 0.5em; }\n    .dropzone .dz-preview .dz-progress {\n      display: block;\n      height: 15px;\n      border: 1px solid #aaa; }\n      .dropzone .dz-preview .dz-progress .dz-upload {\n        display: block;\n        height: 100%;\n        width: 0;\n        background: green; }\n    .dropzone .dz-preview .dz-error-message {\n      color: red;\n      display: none; }\n    .dropzone .dz-preview.dz-error .dz-error-message, .dropzone .dz-preview.dz-error .dz-error-mark {\n      display: block; }\n    .dropzone .dz-preview.dz-success .dz-success-mark {\n      display: block; }\n    .dropzone .dz-preview .dz-error-mark, .dropzone .dz-preview .dz-success-mark {\n      position: absolute;\n      display: none;\n      left: 30px;\n      top: 30px;\n      width: 54px;\n      height: 58px;\n      left: 50%;\n      margin-left: -27px; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/dropzone/dropzone-amd-module.js",
    "content": "// Uses AMD or browser globals to create a jQuery plugin.\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n      // AMD. Register as an anonymous module.\n      define(['jquery'], factory);\n  } else {\n      // Browser globals\n      factory(jQuery);\n  }\n} (function (jQuery) {\n    var module = { exports: { } }; // Fake component\n\n\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n(function() {\n  var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n    __slice = [].slice,\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n  noop = function() {};\n\n  Emitter = (function() {\n    function Emitter() {}\n\n    Emitter.prototype.addEventListener = Emitter.prototype.on;\n\n    Emitter.prototype.on = function(event, fn) {\n      this._callbacks = this._callbacks || {};\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n      this._callbacks[event].push(fn);\n      return this;\n    };\n\n    Emitter.prototype.emit = function() {\n      var args, callback, callbacks, event, _i, _len;\n      event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      this._callbacks = this._callbacks || {};\n      callbacks = this._callbacks[event];\n      if (callbacks) {\n        for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\n          callback = callbacks[_i];\n          callback.apply(this, args);\n        }\n      }\n      return this;\n    };\n\n    Emitter.prototype.removeListener = Emitter.prototype.off;\n\n    Emitter.prototype.removeAllListeners = Emitter.prototype.off;\n\n    Emitter.prototype.removeEventListener = Emitter.prototype.off;\n\n    Emitter.prototype.off = function(event, fn) {\n      var callback, callbacks, i, _i, _len;\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      }\n      callbacks = this._callbacks[event];\n      if (!callbacks) {\n        return this;\n      }\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      }\n      for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\n        callback = callbacks[i];\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n      return this;\n    };\n\n    return Emitter;\n\n  })();\n\n  Dropzone = (function(_super) {\n    var extend, resolveOption;\n\n    __extends(Dropzone, _super);\n\n    Dropzone.prototype.Emitter = Emitter;\n\n\n    /*\n    This is a list of all available events you can register on a dropzone object.\n    \n    You can register an event handler like this:\n    \n        dropzone.on(\"dragEnter\", function() { });\n     */\n\n    Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n    Dropzone.prototype.defaultOptions = {\n      url: null,\n      method: \"post\",\n      withCredentials: false,\n      parallelUploads: 2,\n      uploadMultiple: false,\n      maxFilesize: 256,\n      paramName: \"file\",\n      createImageThumbnails: true,\n      maxThumbnailFilesize: 10,\n      thumbnailWidth: 120,\n      thumbnailHeight: 120,\n      filesizeBase: 1000,\n      maxFiles: null,\n      filesizeBase: 1000,\n      params: {},\n      clickable: true,\n      ignoreHiddenFiles: true,\n      acceptedFiles: null,\n      acceptedMimeTypes: null,\n      autoProcessQueue: true,\n      autoQueue: true,\n      addRemoveLinks: false,\n      previewsContainer: null,\n      capture: null,\n      dictDefaultMessage: \"Drop files here to upload\",\n      dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n      dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n      dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n      dictInvalidFileType: \"You can't upload files of this type.\",\n      dictResponseError: \"Server responded with {{statusCode}} code.\",\n      dictCancelUpload: \"Cancel upload\",\n      dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n      dictRemoveFile: \"Remove file\",\n      dictRemoveFileConfirmation: null,\n      dictMaxFilesExceeded: \"You can not upload any more files.\",\n      accept: function(file, done) {\n        return done();\n      },\n      init: function() {\n        return noop;\n      },\n      forceFallback: false,\n      fallback: function() {\n        var child, messageElement, span, _i, _len, _ref;\n        this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n        _ref = this.element.getElementsByTagName(\"div\");\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          child = _ref[_i];\n          if (/(^| )dz-message($| )/.test(child.className)) {\n            messageElement = child;\n            child.className = \"dz-message\";\n            continue;\n          }\n        }\n        if (!messageElement) {\n          messageElement = Dropzone.createElement(\"<div class=\\\"dz-message\\\"><span></span></div>\");\n          this.element.appendChild(messageElement);\n        }\n        span = messageElement.getElementsByTagName(\"span\")[0];\n        if (span) {\n          span.textContent = this.options.dictFallbackMessage;\n        }\n        return this.element.appendChild(this.getFallbackForm());\n      },\n      resize: function(file) {\n        var info, srcRatio, trgRatio;\n        info = {\n          srcX: 0,\n          srcY: 0,\n          srcWidth: file.width,\n          srcHeight: file.height\n        };\n        srcRatio = file.width / file.height;\n        info.optWidth = this.options.thumbnailWidth;\n        info.optHeight = this.options.thumbnailHeight;\n        if ((info.optWidth == null) && (info.optHeight == null)) {\n          info.optWidth = info.srcWidth;\n          info.optHeight = info.srcHeight;\n        } else if (info.optWidth == null) {\n          info.optWidth = srcRatio * info.optHeight;\n        } else if (info.optHeight == null) {\n          info.optHeight = (1 / srcRatio) * info.optWidth;\n        }\n        trgRatio = info.optWidth / info.optHeight;\n        if (file.height < info.optHeight || file.width < info.optWidth) {\n          info.trgHeight = info.srcHeight;\n          info.trgWidth = info.srcWidth;\n        } else {\n          if (srcRatio > trgRatio) {\n            info.srcHeight = file.height;\n            info.srcWidth = info.srcHeight * trgRatio;\n          } else {\n            info.srcWidth = file.width;\n            info.srcHeight = info.srcWidth / trgRatio;\n          }\n        }\n        info.srcX = (file.width - info.srcWidth) / 2;\n        info.srcY = (file.height - info.srcHeight) / 2;\n        return info;\n      },\n\n      /*\n      Those functions register themselves to the events on init and handle all\n      the user interface specific stuff. Overwriting them won't break the upload\n      but can break the way it's displayed.\n      You can overwrite them if you don't like the default behavior. If you just\n      want to add an additional event handler, register it on the dropzone object\n      and don't overwrite those options.\n       */\n      drop: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      dragstart: noop,\n      dragend: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      dragenter: function(e) {\n        return this.element.classList.add(\"dz-drag-hover\");\n      },\n      dragover: function(e) {\n        return this.element.classList.add(\"dz-drag-hover\");\n      },\n      dragleave: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      paste: noop,\n      reset: function() {\n        return this.element.classList.remove(\"dz-started\");\n      },\n      addedfile: function(file) {\n        var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n        if (this.element === this.previewsContainer) {\n          this.element.classList.add(\"dz-started\");\n        }\n        if (this.previewsContainer) {\n          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n          file.previewTemplate = file.previewElement;\n          this.previewsContainer.appendChild(file.previewElement);\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            node.textContent = file.name;\n          }\n          _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            node = _ref1[_j];\n            node.innerHTML = this.filesize(file.size);\n          }\n          if (this.options.addRemoveLinks) {\n            file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\" + this.options.dictRemoveFile + \"</a>\");\n            file.previewElement.appendChild(file._removeLink);\n          }\n          removeFileEvent = (function(_this) {\n            return function(e) {\n              e.preventDefault();\n              e.stopPropagation();\n              if (file.status === Dropzone.UPLOADING) {\n                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n                  return _this.removeFile(file);\n                });\n              } else {\n                if (_this.options.dictRemoveFileConfirmation) {\n                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n                    return _this.removeFile(file);\n                  });\n                } else {\n                  return _this.removeFile(file);\n                }\n              }\n            };\n          })(this);\n          _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n          _results = [];\n          for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n            removeLink = _ref2[_k];\n            _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n          }\n          return _results;\n        }\n      },\n      removedfile: function(file) {\n        var _ref;\n        if (file.previewElement) {\n          if ((_ref = file.previewElement) != null) {\n            _ref.parentNode.removeChild(file.previewElement);\n          }\n        }\n        return this._updateMaxFilesReachedClass();\n      },\n      thumbnail: function(file, dataUrl) {\n        var thumbnailElement, _i, _len, _ref;\n        if (file.previewElement) {\n          file.previewElement.classList.remove(\"dz-file-preview\");\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            thumbnailElement = _ref[_i];\n            thumbnailElement.alt = file.name;\n            thumbnailElement.src = dataUrl;\n          }\n          return setTimeout(((function(_this) {\n            return function() {\n              return file.previewElement.classList.add(\"dz-image-preview\");\n            };\n          })(this)), 1);\n        }\n      },\n      error: function(file, message) {\n        var node, _i, _len, _ref, _results;\n        if (file.previewElement) {\n          file.previewElement.classList.add(\"dz-error\");\n          if (typeof message !== \"String\" && message.error) {\n            message = message.error;\n          }\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            _results.push(node.textContent = message);\n          }\n          return _results;\n        }\n      },\n      errormultiple: noop,\n      processing: function(file) {\n        if (file.previewElement) {\n          file.previewElement.classList.add(\"dz-processing\");\n          if (file._removeLink) {\n            return file._removeLink.textContent = this.options.dictCancelUpload;\n          }\n        }\n      },\n      processingmultiple: noop,\n      uploadprogress: function(file, progress, bytesSent) {\n        var node, _i, _len, _ref, _results;\n        if (file.previewElement) {\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            if (node.nodeName === 'PROGRESS') {\n              _results.push(node.value = progress);\n            } else {\n              _results.push(node.style.width = \"\" + progress + \"%\");\n            }\n          }\n          return _results;\n        }\n      },\n      totaluploadprogress: noop,\n      sending: noop,\n      sendingmultiple: noop,\n      success: function(file) {\n        if (file.previewElement) {\n          return file.previewElement.classList.add(\"dz-success\");\n        }\n      },\n      successmultiple: noop,\n      canceled: function(file) {\n        return this.emit(\"error\", file, \"Upload canceled.\");\n      },\n      canceledmultiple: noop,\n      complete: function(file) {\n        if (file._removeLink) {\n          file._removeLink.textContent = this.options.dictRemoveFile;\n        }\n        if (file.previewElement) {\n          return file.previewElement.classList.add(\"dz-complete\");\n        }\n      },\n      completemultiple: noop,\n      maxfilesexceeded: noop,\n      maxfilesreached: noop,\n      queuecomplete: noop,\n      previewTemplate: \"<div class=\\\"dz-preview dz-file-preview\\\">\\n  <div class=\\\"dz-image\\\"><img data-dz-thumbnail /></div>\\n  <div class=\\\"dz-details\\\">\\n    <div class=\\\"dz-size\\\"><span data-dz-size></span></div>\\n    <div class=\\\"dz-filename\\\"><span data-dz-name></span></div>\\n  </div>\\n  <div class=\\\"dz-progress\\\"><span class=\\\"dz-upload\\\" data-dz-uploadprogress></span></div>\\n  <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div>\\n  <div class=\\\"dz-success-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Check</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n      </g>\\n    </svg>\\n  </div>\\n  <div class=\\\"dz-error-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Error</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <g id=\\\"Check-+-Oval-2\\\" sketch:type=\\\"MSLayerGroup\\\" stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\">\\n          <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n        </g>\\n      </g>\\n    </svg>\\n  </div>\\n</div>\"\n    };\n\n    extend = function() {\n      var key, object, objects, target, val, _i, _len;\n      target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      for (_i = 0, _len = objects.length; _i < _len; _i++) {\n        object = objects[_i];\n        for (key in object) {\n          val = object[key];\n          target[key] = val;\n        }\n      }\n      return target;\n    };\n\n    function Dropzone(element, options) {\n      var elementOptions, fallback, _ref;\n      this.element = element;\n      this.version = Dropzone.version;\n      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n      this.clickableElements = [];\n      this.listeners = [];\n      this.files = [];\n      if (typeof this.element === \"string\") {\n        this.element = document.querySelector(this.element);\n      }\n      if (!(this.element && (this.element.nodeType != null))) {\n        throw new Error(\"Invalid dropzone element.\");\n      }\n      if (this.element.dropzone) {\n        throw new Error(\"Dropzone already attached.\");\n      }\n      Dropzone.instances.push(this);\n      this.element.dropzone = this;\n      elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n        return this.options.fallback.call(this);\n      }\n      if (this.options.url == null) {\n        this.options.url = this.element.getAttribute(\"action\");\n      }\n      if (!this.options.url) {\n        throw new Error(\"No URL provided.\");\n      }\n      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n        throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n      }\n      if (this.options.acceptedMimeTypes) {\n        this.options.acceptedFiles = this.options.acceptedMimeTypes;\n        delete this.options.acceptedMimeTypes;\n      }\n      this.options.method = this.options.method.toUpperCase();\n      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n        fallback.parentNode.removeChild(fallback);\n      }\n      if (this.options.previewsContainer !== false) {\n        if (this.options.previewsContainer) {\n          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n        } else {\n          this.previewsContainer = this.element;\n        }\n      }\n      if (this.options.clickable) {\n        if (this.options.clickable === true) {\n          this.clickableElements = [this.element];\n        } else {\n          this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n        }\n      }\n      this.init();\n    }\n\n    Dropzone.prototype.getAcceptedFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.accepted) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getRejectedFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (!file.accepted) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getFilesWithStatus = function(status) {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status === status) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getQueuedFiles = function() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    };\n\n    Dropzone.prototype.getUploadingFiles = function() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    };\n\n    Dropzone.prototype.getActiveFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.init = function() {\n      var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n      if (this.element.tagName === \"form\") {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n      }\n      if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><span>\" + this.options.dictDefaultMessage + \"</span></div>\"));\n      }\n      if (this.clickableElements.length) {\n        setupHiddenFileInput = (function(_this) {\n          return function() {\n            if (_this.hiddenFileInput) {\n              document.body.removeChild(_this.hiddenFileInput);\n            }\n            _this.hiddenFileInput = document.createElement(\"input\");\n            _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n              _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n            }\n            _this.hiddenFileInput.className = \"dz-hidden-input\";\n            if (_this.options.acceptedFiles != null) {\n              _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n            }\n            if (_this.options.capture != null) {\n              _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\n            }\n            _this.hiddenFileInput.style.visibility = \"hidden\";\n            _this.hiddenFileInput.style.position = \"absolute\";\n            _this.hiddenFileInput.style.top = \"0\";\n            _this.hiddenFileInput.style.left = \"0\";\n            _this.hiddenFileInput.style.height = \"0\";\n            _this.hiddenFileInput.style.width = \"0\";\n            document.body.appendChild(_this.hiddenFileInput);\n            return _this.hiddenFileInput.addEventListener(\"change\", function() {\n              var file, files, _i, _len;\n              files = _this.hiddenFileInput.files;\n              if (files.length) {\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                  file = files[_i];\n                  _this.addFile(file);\n                }\n              }\n              return setupHiddenFileInput();\n            });\n          };\n        })(this);\n        setupHiddenFileInput();\n      }\n      this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n      _ref1 = this.events;\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        eventName = _ref1[_i];\n        this.on(eventName, this.options[eventName]);\n      }\n      this.on(\"uploadprogress\", (function(_this) {\n        return function() {\n          return _this.updateTotalUploadProgress();\n        };\n      })(this));\n      this.on(\"removedfile\", (function(_this) {\n        return function() {\n          return _this.updateTotalUploadProgress();\n        };\n      })(this));\n      this.on(\"canceled\", (function(_this) {\n        return function(file) {\n          return _this.emit(\"complete\", file);\n        };\n      })(this));\n      this.on(\"complete\", (function(_this) {\n        return function(file) {\n          if (_this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n            return setTimeout((function() {\n              return _this.emit(\"queuecomplete\");\n            }), 0);\n          }\n        };\n      })(this));\n      noPropagation = function(e) {\n        e.stopPropagation();\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      };\n      this.listeners = [\n        {\n          element: this.element,\n          events: {\n            \"dragstart\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragstart\", e);\n              };\n            })(this),\n            \"dragenter\": (function(_this) {\n              return function(e) {\n                noPropagation(e);\n                return _this.emit(\"dragenter\", e);\n              };\n            })(this),\n            \"dragover\": (function(_this) {\n              return function(e) {\n                var efct;\n                try {\n                  efct = e.dataTransfer.effectAllowed;\n                } catch (_error) {}\n                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n                noPropagation(e);\n                return _this.emit(\"dragover\", e);\n              };\n            })(this),\n            \"dragleave\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragleave\", e);\n              };\n            })(this),\n            \"drop\": (function(_this) {\n              return function(e) {\n                noPropagation(e);\n                return _this.drop(e);\n              };\n            })(this),\n            \"dragend\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragend\", e);\n              };\n            })(this)\n          }\n        }\n      ];\n      this.clickableElements.forEach((function(_this) {\n        return function(clickableElement) {\n          return _this.listeners.push({\n            element: clickableElement,\n            events: {\n              \"click\": function(evt) {\n                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n                  return _this.hiddenFileInput.click();\n                }\n              }\n            }\n          });\n        };\n      })(this));\n      this.enable();\n      return this.options.init.call(this);\n    };\n\n    Dropzone.prototype.destroy = function() {\n      var _ref;\n      this.disable();\n      this.removeAllFiles(true);\n      if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    };\n\n    Dropzone.prototype.updateTotalUploadProgress = function() {\n      var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n      totalBytesSent = 0;\n      totalBytes = 0;\n      activeFiles = this.getActiveFiles();\n      if (activeFiles.length) {\n        _ref = this.getActiveFiles();\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          file = _ref[_i];\n          totalBytesSent += file.upload.bytesSent;\n          totalBytes += file.upload.total;\n        }\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n      return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n    };\n\n    Dropzone.prototype._getParamName = function(n) {\n      if (typeof this.options.paramName === \"function\") {\n        return this.options.paramName(n);\n      } else {\n        return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n      }\n    };\n\n    Dropzone.prototype.getFallbackForm = function() {\n      var existingFallback, fields, fieldsString, form;\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n      fieldsString = \"<div class=\\\"dz-fallback\\\">\";\n      if (this.options.dictFallbackText) {\n        fieldsString += \"<p>\" + this.options.dictFallbackText + \"</p>\";\n      }\n      fieldsString += \"<input type=\\\"file\\\" name=\\\"\" + (this._getParamName(0)) + \"\\\" \" + (this.options.uploadMultiple ? 'multiple=\"multiple\"' : void 0) + \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\";\n      fields = Dropzone.createElement(fieldsString);\n      if (this.element.tagName !== \"FORM\") {\n        form = Dropzone.createElement(\"<form action=\\\"\" + this.options.url + \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\" + this.options.method + \"\\\"></form>\");\n        form.appendChild(fields);\n      } else {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n        this.element.setAttribute(\"method\", this.options.method);\n      }\n      return form != null ? form : fields;\n    };\n\n    Dropzone.prototype.getExistingFallback = function() {\n      var fallback, getFallback, tagName, _i, _len, _ref;\n      getFallback = function(elements) {\n        var el, _i, _len;\n        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n          el = elements[_i];\n          if (/(^| )fallback($| )/.test(el.className)) {\n            return el;\n          }\n        }\n      };\n      _ref = [\"div\", \"form\"];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        tagName = _ref[_i];\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    };\n\n    Dropzone.prototype.setupEventListeners = function() {\n      var elementListeners, event, listener, _i, _len, _ref, _results;\n      _ref = this.listeners;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        elementListeners = _ref[_i];\n        _results.push((function() {\n          var _ref1, _results1;\n          _ref1 = elementListeners.events;\n          _results1 = [];\n          for (event in _ref1) {\n            listener = _ref1[event];\n            _results1.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n          return _results1;\n        })());\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.removeEventListeners = function() {\n      var elementListeners, event, listener, _i, _len, _ref, _results;\n      _ref = this.listeners;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        elementListeners = _ref[_i];\n        _results.push((function() {\n          var _ref1, _results1;\n          _ref1 = elementListeners.events;\n          _results1 = [];\n          for (event in _ref1) {\n            listener = _ref1[event];\n            _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n          return _results1;\n        })());\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.disable = function() {\n      var file, _i, _len, _ref, _results;\n      this.clickableElements.forEach(function(element) {\n        return element.classList.remove(\"dz-clickable\");\n      });\n      this.removeEventListeners();\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        _results.push(this.cancelUpload(file));\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.enable = function() {\n      this.clickableElements.forEach(function(element) {\n        return element.classList.add(\"dz-clickable\");\n      });\n      return this.setupEventListeners();\n    };\n\n    Dropzone.prototype.filesize = function(size) {\n      var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\n      units = ['TB', 'GB', 'MB', 'KB', 'b'];\n      selectedSize = selectedUnit = null;\n      for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\n        unit = units[i];\n        cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n        if (size >= cutoff) {\n          selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n          selectedUnit = unit;\n          break;\n        }\n      }\n      selectedSize = Math.round(10 * selectedSize) / 10;\n      return \"<strong>\" + selectedSize + \"</strong> \" + selectedUnit;\n    };\n\n    Dropzone.prototype._updateMaxFilesReachedClass = function() {\n      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit('maxfilesreached', this.files);\n        }\n        return this.element.classList.add(\"dz-max-files-reached\");\n      } else {\n        return this.element.classList.remove(\"dz-max-files-reached\");\n      }\n    };\n\n    Dropzone.prototype.drop = function(e) {\n      var files, items;\n      if (!e.dataTransfer) {\n        return;\n      }\n      this.emit(\"drop\", e);\n      files = e.dataTransfer.files;\n      if (files.length) {\n        items = e.dataTransfer.items;\n        if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n    };\n\n    Dropzone.prototype.paste = function(e) {\n      var items, _ref;\n      if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n        return;\n      }\n      this.emit(\"paste\", e);\n      items = e.clipboardData.items;\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    };\n\n    Dropzone.prototype.handleFiles = function(files) {\n      var file, _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        _results.push(this.addFile(file));\n      }\n      return _results;\n    };\n\n    Dropzone.prototype._addFilesFromItems = function(items) {\n      var entry, item, _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = items.length; _i < _len; _i++) {\n        item = items[_i];\n        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n          if (entry.isFile) {\n            _results.push(this.addFile(item.getAsFile()));\n          } else if (entry.isDirectory) {\n            _results.push(this._addFilesFromDirectory(entry, entry.name));\n          } else {\n            _results.push(void 0);\n          }\n        } else if (item.getAsFile != null) {\n          if ((item.kind == null) || item.kind === \"file\") {\n            _results.push(this.addFile(item.getAsFile()));\n          } else {\n            _results.push(void 0);\n          }\n        } else {\n          _results.push(void 0);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n      var dirReader, entriesReader;\n      dirReader = directory.createReader();\n      entriesReader = (function(_this) {\n        return function(entries) {\n          var entry, _i, _len;\n          for (_i = 0, _len = entries.length; _i < _len; _i++) {\n            entry = entries[_i];\n            if (entry.isFile) {\n              entry.file(function(file) {\n                if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                  return;\n                }\n                file.fullPath = \"\" + path + \"/\" + file.name;\n                return _this.addFile(file);\n              });\n            } else if (entry.isDirectory) {\n              _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n            }\n          }\n        };\n      })(this);\n      return dirReader.readEntries(entriesReader, function(error) {\n        return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n      });\n    };\n\n    Dropzone.prototype.accept = function(file, done) {\n      if (file.size > this.options.maxFilesize * 1024 * 1024) {\n        return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        return done(this.options.dictInvalidFileType);\n      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n        return this.emit(\"maxfilesexceeded\", file);\n      } else {\n        return this.options.accept.call(this, file, done);\n      }\n    };\n\n    Dropzone.prototype.addFile = function(file) {\n      file.upload = {\n        progress: 0,\n        total: file.size,\n        bytesSent: 0\n      };\n      this.files.push(file);\n      file.status = Dropzone.ADDED;\n      this.emit(\"addedfile\", file);\n      this._enqueueThumbnail(file);\n      return this.accept(file, (function(_this) {\n        return function(error) {\n          if (error) {\n            file.accepted = false;\n            _this._errorProcessing([file], error);\n          } else {\n            file.accepted = true;\n            if (_this.options.autoQueue) {\n              _this.enqueueFile(file);\n            }\n          }\n          return _this._updateMaxFilesReachedClass();\n        };\n      })(this));\n    };\n\n    Dropzone.prototype.enqueueFiles = function(files) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        this.enqueueFile(file);\n      }\n      return null;\n    };\n\n    Dropzone.prototype.enqueueFile = function(file) {\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n        if (this.options.autoProcessQueue) {\n          return setTimeout(((function(_this) {\n            return function() {\n              return _this.processQueue();\n            };\n          })(this)), 0);\n        }\n      } else {\n        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n      }\n    };\n\n    Dropzone.prototype._thumbnailQueue = [];\n\n    Dropzone.prototype._processingThumbnail = false;\n\n    Dropzone.prototype._enqueueThumbnail = function(file) {\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n        return setTimeout(((function(_this) {\n          return function() {\n            return _this._processThumbnailQueue();\n          };\n        })(this)), 0);\n      }\n    };\n\n    Dropzone.prototype._processThumbnailQueue = function() {\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n      this._processingThumbnail = true;\n      return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n        return function() {\n          _this._processingThumbnail = false;\n          return _this._processThumbnailQueue();\n        };\n      })(this));\n    };\n\n    Dropzone.prototype.removeFile = function(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n      this.files = without(this.files, file);\n      this.emit(\"removedfile\", file);\n      if (this.files.length === 0) {\n        return this.emit(\"reset\");\n      }\n    };\n\n    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n      var file, _i, _len, _ref;\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n      _ref = this.files.slice();\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n          this.removeFile(file);\n        }\n      }\n      return null;\n    };\n\n    Dropzone.prototype.createThumbnail = function(file, callback) {\n      var fileReader;\n      fileReader = new FileReader;\n      fileReader.onload = (function(_this) {\n        return function() {\n          if (file.type === \"image/svg+xml\") {\n            _this.emit(\"thumbnail\", file, fileReader.result);\n            if (callback != null) {\n              callback();\n            }\n            return;\n          }\n          return _this.createThumbnailFromUrl(file, fileReader.result, callback);\n        };\n      })(this);\n      return fileReader.readAsDataURL(file);\n    };\n\n    Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback) {\n      var img;\n      img = document.createElement(\"img\");\n      img.onload = (function(_this) {\n        return function() {\n          var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n          file.width = img.width;\n          file.height = img.height;\n          resizeInfo = _this.options.resize.call(_this, file);\n          if (resizeInfo.trgWidth == null) {\n            resizeInfo.trgWidth = resizeInfo.optWidth;\n          }\n          if (resizeInfo.trgHeight == null) {\n            resizeInfo.trgHeight = resizeInfo.optHeight;\n          }\n          canvas = document.createElement(\"canvas\");\n          ctx = canvas.getContext(\"2d\");\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n          drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n          thumbnail = canvas.toDataURL(\"image/png\");\n          _this.emit(\"thumbnail\", file, thumbnail);\n          if (callback != null) {\n            return callback();\n          }\n        };\n      })(this);\n      if (callback != null) {\n        img.onerror = callback;\n      }\n      return img.src = imageUrl;\n    };\n\n    Dropzone.prototype.processQueue = function() {\n      var i, parallelUploads, processingLength, queuedFiles;\n      parallelUploads = this.options.parallelUploads;\n      processingLength = this.getUploadingFiles().length;\n      i = processingLength;\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n      queuedFiles = this.getQueuedFiles();\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n      if (this.options.uploadMultiple) {\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          }\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    };\n\n    Dropzone.prototype.processFile = function(file) {\n      return this.processFiles([file]);\n    };\n\n    Dropzone.prototype.processFiles = function(files) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.processing = true;\n        file.status = Dropzone.UPLOADING;\n        this.emit(\"processing\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"processingmultiple\", files);\n      }\n      return this.uploadFiles(files);\n    };\n\n    Dropzone.prototype._getFilesWithXhr = function(xhr) {\n      var file, files;\n      return files = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.files;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          file = _ref[_i];\n          if (file.xhr === xhr) {\n            _results.push(file);\n          }\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Dropzone.prototype.cancelUpload = function(file) {\n      var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n      if (file.status === Dropzone.UPLOADING) {\n        groupedFiles = this._getFilesWithXhr(file.xhr);\n        for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n          groupedFile = groupedFiles[_i];\n          groupedFile.status = Dropzone.CANCELED;\n        }\n        file.xhr.abort();\n        for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n          groupedFile = groupedFiles[_j];\n          this.emit(\"canceled\", groupedFile);\n        }\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", groupedFiles);\n        }\n      } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\"canceled\", file);\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", [file]);\n        }\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    resolveOption = function() {\n      var args, option;\n      option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if (typeof option === 'function') {\n        return option.apply(this, args);\n      }\n      return option;\n    };\n\n    Dropzone.prototype.uploadFile = function(file) {\n      return this.uploadFiles([file]);\n    };\n\n    Dropzone.prototype.uploadFiles = function(files) {\n      var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\n      xhr = new XMLHttpRequest();\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.xhr = xhr;\n      }\n      method = resolveOption(this.options.method, files);\n      url = resolveOption(this.options.url, files);\n      xhr.open(method, url, true);\n      xhr.withCredentials = !!this.options.withCredentials;\n      response = null;\n      handleError = (function(_this) {\n        return function() {\n          var _j, _len1, _results;\n          _results = [];\n          for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n            file = files[_j];\n            _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n          }\n          return _results;\n        };\n      })(this);\n      updateProgress = (function(_this) {\n        return function(e) {\n          var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n          if (e != null) {\n            progress = 100 * e.loaded / e.total;\n            for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n              file = files[_j];\n              file.upload = {\n                progress: progress,\n                total: e.total,\n                bytesSent: e.loaded\n              };\n            }\n          } else {\n            allFilesFinished = true;\n            progress = 100;\n            for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n              file = files[_k];\n              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n                allFilesFinished = false;\n              }\n              file.upload.progress = progress;\n              file.upload.bytesSent = file.upload.total;\n            }\n            if (allFilesFinished) {\n              return;\n            }\n          }\n          _results = [];\n          for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n            file = files[_l];\n            _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n          }\n          return _results;\n        };\n      })(this);\n      xhr.onload = (function(_this) {\n        return function(e) {\n          var _ref;\n          if (files[0].status === Dropzone.CANCELED) {\n            return;\n          }\n          if (xhr.readyState !== 4) {\n            return;\n          }\n          response = xhr.responseText;\n          if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n            try {\n              response = JSON.parse(response);\n            } catch (_error) {\n              e = _error;\n              response = \"Invalid JSON response from server.\";\n            }\n          }\n          updateProgress();\n          if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n            return handleError();\n          } else {\n            return _this._finished(files, response, e);\n          }\n        };\n      })(this);\n      xhr.onerror = (function(_this) {\n        return function() {\n          if (files[0].status === Dropzone.CANCELED) {\n            return;\n          }\n          return handleError();\n        };\n      })(this);\n      progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n      progressObj.onprogress = updateProgress;\n      headers = {\n        \"Accept\": \"application/json\",\n        \"Cache-Control\": \"no-cache\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n      };\n      if (this.options.headers) {\n        extend(headers, this.options.headers);\n      }\n      for (headerName in headers) {\n        headerValue = headers[headerName];\n        xhr.setRequestHeader(headerName, headerValue);\n      }\n      formData = new FormData();\n      if (this.options.params) {\n        _ref1 = this.options.params;\n        for (key in _ref1) {\n          value = _ref1[key];\n          formData.append(key, value);\n        }\n      }\n      for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n        file = files[_j];\n        this.emit(\"sending\", file, xhr, formData);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"sendingmultiple\", files, xhr, formData);\n      }\n      if (this.element.tagName === \"FORM\") {\n        _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n          input = _ref2[_k];\n          inputName = input.getAttribute(\"name\");\n          inputType = input.getAttribute(\"type\");\n          if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n            _ref3 = input.options;\n            for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n              option = _ref3[_l];\n              if (option.selected) {\n                formData.append(inputName, option.value);\n              }\n            }\n          } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n            formData.append(inputName, input.value);\n          }\n        }\n      }\n      for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\n        formData.append(this._getParamName(i), files[i], files[i].name);\n      }\n      return xhr.send(formData);\n    };\n\n    Dropzone.prototype._finished = function(files, responseText, e) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.status = Dropzone.SUCCESS;\n        this.emit(\"success\", file, responseText, e);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"successmultiple\", files, responseText, e);\n        this.emit(\"completemultiple\", files);\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.status = Dropzone.ERROR;\n        this.emit(\"error\", file, message, xhr);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"errormultiple\", files, message, xhr);\n        this.emit(\"completemultiple\", files);\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    return Dropzone;\n\n  })(Emitter);\n\n  Dropzone.version = \"4.0.1\";\n\n  Dropzone.options = {};\n\n  Dropzone.optionsForElement = function(element) {\n    if (element.getAttribute(\"id\")) {\n      return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n    } else {\n      return void 0;\n    }\n  };\n\n  Dropzone.instances = [];\n\n  Dropzone.forElement = function(element) {\n    if (typeof element === \"string\") {\n      element = document.querySelector(element);\n    }\n    if ((element != null ? element.dropzone : void 0) == null) {\n      throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n    }\n    return element.dropzone;\n  };\n\n  Dropzone.autoDiscover = true;\n\n  Dropzone.discover = function() {\n    var checkElements, dropzone, dropzones, _i, _len, _results;\n    if (document.querySelectorAll) {\n      dropzones = document.querySelectorAll(\".dropzone\");\n    } else {\n      dropzones = [];\n      checkElements = function(elements) {\n        var el, _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n          el = elements[_i];\n          if (/(^| )dropzone($| )/.test(el.className)) {\n            _results.push(dropzones.push(el));\n          } else {\n            _results.push(void 0);\n          }\n        }\n        return _results;\n      };\n      checkElements(document.getElementsByTagName(\"div\"));\n      checkElements(document.getElementsByTagName(\"form\"));\n    }\n    _results = [];\n    for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n      dropzone = dropzones[_i];\n      if (Dropzone.optionsForElement(dropzone) !== false) {\n        _results.push(new Dropzone(dropzone));\n      } else {\n        _results.push(void 0);\n      }\n    }\n    return _results;\n  };\n\n  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n  Dropzone.isBrowserSupported = function() {\n    var capableBrowser, regex, _i, _len, _ref;\n    capableBrowser = true;\n    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n      if (!(\"classList\" in document.createElement(\"a\"))) {\n        capableBrowser = false;\n      } else {\n        _ref = Dropzone.blacklistedBrowsers;\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          regex = _ref[_i];\n          if (regex.test(navigator.userAgent)) {\n            capableBrowser = false;\n            continue;\n          }\n        }\n      }\n    } else {\n      capableBrowser = false;\n    }\n    return capableBrowser;\n  };\n\n  without = function(list, rejectedItem) {\n    var item, _i, _len, _results;\n    _results = [];\n    for (_i = 0, _len = list.length; _i < _len; _i++) {\n      item = list[_i];\n      if (item !== rejectedItem) {\n        _results.push(item);\n      }\n    }\n    return _results;\n  };\n\n  camelize = function(str) {\n    return str.replace(/[\\-_](\\w)/g, function(match) {\n      return match.charAt(1).toUpperCase();\n    });\n  };\n\n  Dropzone.createElement = function(string) {\n    var div;\n    div = document.createElement(\"div\");\n    div.innerHTML = string;\n    return div.childNodes[0];\n  };\n\n  Dropzone.elementInside = function(element, container) {\n    if (element === container) {\n      return true;\n    }\n    while (element = element.parentNode) {\n      if (element === container) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  Dropzone.getElement = function(el, name) {\n    var element;\n    if (typeof el === \"string\") {\n      element = document.querySelector(el);\n    } else if (el.nodeType != null) {\n      element = el;\n    }\n    if (element == null) {\n      throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n    }\n    return element;\n  };\n\n  Dropzone.getElements = function(els, name) {\n    var e, el, elements, _i, _j, _len, _len1, _ref;\n    if (els instanceof Array) {\n      elements = [];\n      try {\n        for (_i = 0, _len = els.length; _i < _len; _i++) {\n          el = els[_i];\n          elements.push(this.getElement(el, name));\n        }\n      } catch (_error) {\n        e = _error;\n        elements = null;\n      }\n    } else if (typeof els === \"string\") {\n      elements = [];\n      _ref = document.querySelectorAll(els);\n      for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n        el = _ref[_j];\n        elements.push(el);\n      }\n    } else if (els.nodeType != null) {\n      elements = [els];\n    }\n    if (!((elements != null) && elements.length)) {\n      throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n    }\n    return elements;\n  };\n\n  Dropzone.confirm = function(question, accepted, rejected) {\n    if (window.confirm(question)) {\n      return accepted();\n    } else if (rejected != null) {\n      return rejected();\n    }\n  };\n\n  Dropzone.isValidFile = function(file, acceptedFiles) {\n    var baseMimeType, mimeType, validType, _i, _len;\n    if (!acceptedFiles) {\n      return true;\n    }\n    acceptedFiles = acceptedFiles.split(\",\");\n    mimeType = file.type;\n    baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n    for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n      validType = acceptedFiles[_i];\n      validType = validType.trim();\n      if (validType.charAt(0) === \".\") {\n        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n          return true;\n        }\n      } else if (/\\/\\*$/.test(validType)) {\n        if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n          return true;\n        }\n      } else {\n        if (mimeType === validType) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n    jQuery.fn.dropzone = function(options) {\n      return this.each(function() {\n        return new Dropzone(this, options);\n      });\n    };\n  }\n\n  if (typeof module !== \"undefined\" && module !== null) {\n    module.exports = Dropzone;\n  } else {\n    window.Dropzone = Dropzone;\n  }\n\n  Dropzone.ADDED = \"added\";\n\n  Dropzone.QUEUED = \"queued\";\n\n  Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n  Dropzone.UPLOADING = \"uploading\";\n\n  Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n  Dropzone.CANCELED = \"canceled\";\n\n  Dropzone.ERROR = \"error\";\n\n  Dropzone.SUCCESS = \"success\";\n\n\n  /*\n  \n  Bugfix for iOS 6 and 7\n  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n  based on the work of https://github.com/stomita/ios-imagefile-megapixel\n   */\n\n  detectVerticalSquash = function(img) {\n    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n    iw = img.naturalWidth;\n    ih = img.naturalHeight;\n    canvas = document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = ih;\n    ctx = canvas.getContext(\"2d\");\n    ctx.drawImage(img, 0, 0);\n    data = ctx.getImageData(0, 0, 1, ih).data;\n    sy = 0;\n    ey = ih;\n    py = ih;\n    while (py > sy) {\n      alpha = data[(py - 1) * 4 + 3];\n      if (alpha === 0) {\n        ey = py;\n      } else {\n        sy = py;\n      }\n      py = (ey + sy) >> 1;\n    }\n    ratio = py / ih;\n    if (ratio === 0) {\n      return 1;\n    } else {\n      return ratio;\n    }\n  };\n\n  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n    var vertSquashRatio;\n    vertSquashRatio = detectVerticalSquash(img);\n    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n  };\n\n\n  /*\n   * contentloaded.js\n   *\n   * Author: Diego Perini (diego.perini at gmail.com)\n   * Summary: cross-browser wrapper for DOMContentLoaded\n   * Updated: 20101020\n   * License: MIT\n   * Version: 1.2\n   *\n   * URL:\n   * http://javascript.nwbox.com/ContentLoaded/\n   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n   */\n\n  contentLoaded = function(win, fn) {\n    var add, doc, done, init, poll, pre, rem, root, top;\n    done = false;\n    top = true;\n    doc = win.document;\n    root = doc.documentElement;\n    add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n    rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n    pre = (doc.addEventListener ? \"\" : \"on\");\n    init = function(e) {\n      if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n        return;\n      }\n      (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n      if (!done && (done = true)) {\n        return fn.call(win, e.type || e);\n      }\n    };\n    poll = function() {\n      var e;\n      try {\n        root.doScroll(\"left\");\n      } catch (_error) {\n        e = _error;\n        setTimeout(poll, 50);\n        return;\n      }\n      return init(\"poll\");\n    };\n    if (doc.readyState !== \"complete\") {\n      if (doc.createEventObject && root.doScroll) {\n        try {\n          top = !win.frameElement;\n        } catch (_error) {}\n        if (top) {\n          poll();\n        }\n      }\n      doc[add](pre + \"DOMContentLoaded\", init, false);\n      doc[add](pre + \"readystatechange\", init, false);\n      return win[add](pre + \"load\", init, false);\n    }\n  };\n\n  Dropzone._autoDiscoverFunction = function() {\n    if (Dropzone.autoDiscover) {\n      return Dropzone.discover();\n    }\n  };\n\n  contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n}).call(this);\n\n    return module.exports;\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/dropzone/dropzone.css",
    "content": "/*\n * The MIT License\n * Copyright (c) 2012 Matias Meno <m@tias.me>\n */\n@-webkit-keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@-moz-keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@-webkit-keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@-moz-keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n@-moz-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n.dropzone, .dropzone * {\n  box-sizing: border-box; }\n\n.dropzone {\n  min-height: 150px;\n  border: 2px solid rgba(0, 0, 0, 0.3);\n  background: white;\n  padding: 20px 20px; }\n  .dropzone.dz-clickable {\n    cursor: pointer; }\n    .dropzone.dz-clickable * {\n      cursor: default; }\n    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {\n      cursor: pointer; }\n  .dropzone.dz-started .dz-message {\n    display: none; }\n  .dropzone.dz-drag-hover {\n    border-style: solid; }\n    .dropzone.dz-drag-hover .dz-message {\n      opacity: 0.5; }\n  .dropzone .dz-message {\n    text-align: center;\n    margin: 2em 0; }\n  .dropzone .dz-preview {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n    margin: 16px;\n    min-height: 100px; }\n    .dropzone .dz-preview:hover {\n      z-index: 1000; }\n      .dropzone .dz-preview:hover .dz-details {\n        opacity: 1; }\n    .dropzone .dz-preview.dz-file-preview .dz-image {\n      border-radius: 20px;\n      background: #999;\n      background: linear-gradient(to bottom, #eee, #ddd); }\n    .dropzone .dz-preview.dz-file-preview .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview.dz-image-preview {\n      background: white; }\n      .dropzone .dz-preview.dz-image-preview .dz-details {\n        -webkit-transition: opacity 0.2s linear;\n        -moz-transition: opacity 0.2s linear;\n        -ms-transition: opacity 0.2s linear;\n        -o-transition: opacity 0.2s linear;\n        transition: opacity 0.2s linear; }\n    .dropzone .dz-preview .dz-remove {\n      font-size: 14px;\n      text-align: center;\n      display: block;\n      cursor: pointer;\n      border: none; }\n      .dropzone .dz-preview .dz-remove:hover {\n        text-decoration: underline; }\n    .dropzone .dz-preview:hover .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview .dz-details {\n      z-index: 20;\n      position: absolute;\n      top: 0;\n      left: 0;\n      opacity: 0;\n      font-size: 13px;\n      min-width: 100%;\n      max-width: 100%;\n      padding: 2em 1em;\n      text-align: center;\n      color: rgba(0, 0, 0, 0.9);\n      line-height: 150%; }\n      .dropzone .dz-preview .dz-details .dz-size {\n        margin-bottom: 1em;\n        font-size: 16px; }\n      .dropzone .dz-preview .dz-details .dz-filename {\n        white-space: nowrap; }\n        .dropzone .dz-preview .dz-details .dz-filename:hover span {\n          border: 1px solid rgba(200, 200, 200, 0.8);\n          background-color: rgba(255, 255, 255, 0.8); }\n        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {\n          overflow: hidden;\n          text-overflow: ellipsis; }\n          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {\n            border: 1px solid transparent; }\n      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {\n        background-color: rgba(255, 255, 255, 0.4);\n        padding: 0 0.4em;\n        border-radius: 3px; }\n    .dropzone .dz-preview:hover .dz-image img {\n      -webkit-transform: scale(1.05, 1.05);\n      -moz-transform: scale(1.05, 1.05);\n      -ms-transform: scale(1.05, 1.05);\n      -o-transform: scale(1.05, 1.05);\n      transform: scale(1.05, 1.05);\n      -webkit-filter: blur(8px);\n      filter: blur(8px); }\n    .dropzone .dz-preview .dz-image {\n      border-radius: 20px;\n      overflow: hidden;\n      width: 120px;\n      height: 120px;\n      position: relative;\n      display: block;\n      z-index: 10; }\n      .dropzone .dz-preview .dz-image img {\n        display: block; }\n    .dropzone .dz-preview.dz-success .dz-success-mark {\n      -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview.dz-error .dz-error-mark {\n      opacity: 1;\n      -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {\n      pointer-events: none;\n      opacity: 0;\n      z-index: 500;\n      position: absolute;\n      display: block;\n      top: 50%;\n      left: 50%;\n      margin-left: -27px;\n      margin-top: -27px; }\n      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {\n        display: block;\n        width: 54px;\n        height: 54px; }\n    .dropzone .dz-preview.dz-processing .dz-progress {\n      opacity: 1;\n      -webkit-transition: all 0.2s linear;\n      -moz-transition: all 0.2s linear;\n      -ms-transition: all 0.2s linear;\n      -o-transition: all 0.2s linear;\n      transition: all 0.2s linear; }\n    .dropzone .dz-preview.dz-complete .dz-progress {\n      opacity: 0;\n      -webkit-transition: opacity 0.4s ease-in;\n      -moz-transition: opacity 0.4s ease-in;\n      -ms-transition: opacity 0.4s ease-in;\n      -o-transition: opacity 0.4s ease-in;\n      transition: opacity 0.4s ease-in; }\n    .dropzone .dz-preview:not(.dz-processing) .dz-progress {\n      -webkit-animation: pulse 6s ease infinite;\n      -moz-animation: pulse 6s ease infinite;\n      -ms-animation: pulse 6s ease infinite;\n      -o-animation: pulse 6s ease infinite;\n      animation: pulse 6s ease infinite; }\n    .dropzone .dz-preview .dz-progress {\n      opacity: 1;\n      z-index: 1000;\n      pointer-events: none;\n      position: absolute;\n      height: 16px;\n      left: 50%;\n      top: 50%;\n      margin-top: -8px;\n      width: 80px;\n      margin-left: -40px;\n      background: rgba(255, 255, 255, 0.9);\n      -webkit-transform: scale(1);\n      border-radius: 8px;\n      overflow: hidden; }\n      .dropzone .dz-preview .dz-progress .dz-upload {\n        background: #333;\n        background: linear-gradient(to bottom, #666, #444);\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        width: 0;\n        -webkit-transition: width 300ms ease-in-out;\n        -moz-transition: width 300ms ease-in-out;\n        -ms-transition: width 300ms ease-in-out;\n        -o-transition: width 300ms ease-in-out;\n        transition: width 300ms ease-in-out; }\n    .dropzone .dz-preview.dz-error .dz-error-message {\n      display: block; }\n    .dropzone .dz-preview.dz-error:hover .dz-error-message {\n      opacity: 1;\n      pointer-events: auto; }\n    .dropzone .dz-preview .dz-error-message {\n      pointer-events: none;\n      z-index: 1000;\n      position: absolute;\n      display: block;\n      display: none;\n      opacity: 0;\n      -webkit-transition: opacity 0.3s ease;\n      -moz-transition: opacity 0.3s ease;\n      -ms-transition: opacity 0.3s ease;\n      -o-transition: opacity 0.3s ease;\n      transition: opacity 0.3s ease;\n      border-radius: 8px;\n      font-size: 13px;\n      top: 130px;\n      left: -10px;\n      width: 140px;\n      background: #be2626;\n      background: linear-gradient(to bottom, #be2626, #a92222);\n      padding: 0.5em 1.2em;\n      color: white; }\n      .dropzone .dz-preview .dz-error-message:after {\n        content: '';\n        position: absolute;\n        top: -6px;\n        left: 64px;\n        width: 0;\n        height: 0;\n        border-left: 6px solid transparent;\n        border-right: 6px solid transparent;\n        border-bottom: 6px solid #be2626; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/dropzone/dropzone.js",
    "content": "\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n(function() {\n  var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n    __slice = [].slice,\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n  noop = function() {};\n\n  Emitter = (function() {\n    function Emitter() {}\n\n    Emitter.prototype.addEventListener = Emitter.prototype.on;\n\n    Emitter.prototype.on = function(event, fn) {\n      this._callbacks = this._callbacks || {};\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n      this._callbacks[event].push(fn);\n      return this;\n    };\n\n    Emitter.prototype.emit = function() {\n      var args, callback, callbacks, event, _i, _len;\n      event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      this._callbacks = this._callbacks || {};\n      callbacks = this._callbacks[event];\n      if (callbacks) {\n        for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\n          callback = callbacks[_i];\n          callback.apply(this, args);\n        }\n      }\n      return this;\n    };\n\n    Emitter.prototype.removeListener = Emitter.prototype.off;\n\n    Emitter.prototype.removeAllListeners = Emitter.prototype.off;\n\n    Emitter.prototype.removeEventListener = Emitter.prototype.off;\n\n    Emitter.prototype.off = function(event, fn) {\n      var callback, callbacks, i, _i, _len;\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      }\n      callbacks = this._callbacks[event];\n      if (!callbacks) {\n        return this;\n      }\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      }\n      for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\n        callback = callbacks[i];\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n      return this;\n    };\n\n    return Emitter;\n\n  })();\n\n  Dropzone = (function(_super) {\n    var extend, resolveOption;\n\n    __extends(Dropzone, _super);\n\n    Dropzone.prototype.Emitter = Emitter;\n\n\n    /*\n    This is a list of all available events you can register on a dropzone object.\n    \n    You can register an event handler like this:\n    \n        dropzone.on(\"dragEnter\", function() { });\n     */\n\n    Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n    Dropzone.prototype.defaultOptions = {\n      url: null,\n      method: \"post\",\n      withCredentials: false,\n      parallelUploads: 2,\n      uploadMultiple: false,\n      maxFilesize: 256,\n      paramName: \"file\",\n      createImageThumbnails: true,\n      maxThumbnailFilesize: 10,\n      thumbnailWidth: 120,\n      thumbnailHeight: 120,\n      filesizeBase: 1000,\n      maxFiles: null,\n      filesizeBase: 1000,\n      params: {},\n      clickable: true,\n      ignoreHiddenFiles: true,\n      acceptedFiles: null,\n      acceptedMimeTypes: null,\n      autoProcessQueue: true,\n      autoQueue: true,\n      addRemoveLinks: false,\n      previewsContainer: null,\n      capture: null,\n      dictDefaultMessage: \"Drop files here to upload\",\n      dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n      dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n      dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n      dictInvalidFileType: \"You can't upload files of this type.\",\n      dictResponseError: \"Server responded with {{statusCode}} code.\",\n      dictCancelUpload: \"Cancel upload\",\n      dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n      dictRemoveFile: \"Remove file\",\n      dictRemoveFileConfirmation: null,\n      dictMaxFilesExceeded: \"You can not upload any more files.\",\n      accept: function(file, done) {\n        return done();\n      },\n      init: function() {\n        return noop;\n      },\n      forceFallback: false,\n      fallback: function() {\n        var child, messageElement, span, _i, _len, _ref;\n        this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n        _ref = this.element.getElementsByTagName(\"div\");\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          child = _ref[_i];\n          if (/(^| )dz-message($| )/.test(child.className)) {\n            messageElement = child;\n            child.className = \"dz-message\";\n            continue;\n          }\n        }\n        if (!messageElement) {\n          messageElement = Dropzone.createElement(\"<div class=\\\"dz-message\\\"><span></span></div>\");\n          this.element.appendChild(messageElement);\n        }\n        span = messageElement.getElementsByTagName(\"span\")[0];\n        if (span) {\n          span.textContent = this.options.dictFallbackMessage;\n        }\n        return this.element.appendChild(this.getFallbackForm());\n      },\n      resize: function(file) {\n        var info, srcRatio, trgRatio;\n        info = {\n          srcX: 0,\n          srcY: 0,\n          srcWidth: file.width,\n          srcHeight: file.height\n        };\n        srcRatio = file.width / file.height;\n        info.optWidth = this.options.thumbnailWidth;\n        info.optHeight = this.options.thumbnailHeight;\n        if ((info.optWidth == null) && (info.optHeight == null)) {\n          info.optWidth = info.srcWidth;\n          info.optHeight = info.srcHeight;\n        } else if (info.optWidth == null) {\n          info.optWidth = srcRatio * info.optHeight;\n        } else if (info.optHeight == null) {\n          info.optHeight = (1 / srcRatio) * info.optWidth;\n        }\n        trgRatio = info.optWidth / info.optHeight;\n        if (file.height < info.optHeight || file.width < info.optWidth) {\n          info.trgHeight = info.srcHeight;\n          info.trgWidth = info.srcWidth;\n        } else {\n          if (srcRatio > trgRatio) {\n            info.srcHeight = file.height;\n            info.srcWidth = info.srcHeight * trgRatio;\n          } else {\n            info.srcWidth = file.width;\n            info.srcHeight = info.srcWidth / trgRatio;\n          }\n        }\n        info.srcX = (file.width - info.srcWidth) / 2;\n        info.srcY = (file.height - info.srcHeight) / 2;\n        return info;\n      },\n\n      /*\n      Those functions register themselves to the events on init and handle all\n      the user interface specific stuff. Overwriting them won't break the upload\n      but can break the way it's displayed.\n      You can overwrite them if you don't like the default behavior. If you just\n      want to add an additional event handler, register it on the dropzone object\n      and don't overwrite those options.\n       */\n      drop: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      dragstart: noop,\n      dragend: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      dragenter: function(e) {\n        return this.element.classList.add(\"dz-drag-hover\");\n      },\n      dragover: function(e) {\n        return this.element.classList.add(\"dz-drag-hover\");\n      },\n      dragleave: function(e) {\n        return this.element.classList.remove(\"dz-drag-hover\");\n      },\n      paste: noop,\n      reset: function() {\n        return this.element.classList.remove(\"dz-started\");\n      },\n      addedfile: function(file) {\n        var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n        if (this.element === this.previewsContainer) {\n          this.element.classList.add(\"dz-started\");\n        }\n        if (this.previewsContainer) {\n          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n          file.previewTemplate = file.previewElement;\n          this.previewsContainer.appendChild(file.previewElement);\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            node.textContent = file.name;\n          }\n          _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            node = _ref1[_j];\n            node.innerHTML = this.filesize(file.size);\n          }\n          if (this.options.addRemoveLinks) {\n            file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\" + this.options.dictRemoveFile + \"</a>\");\n            file.previewElement.appendChild(file._removeLink);\n          }\n          removeFileEvent = (function(_this) {\n            return function(e) {\n              e.preventDefault();\n              e.stopPropagation();\n              if (file.status === Dropzone.UPLOADING) {\n                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n                  return _this.removeFile(file);\n                });\n              } else {\n                if (_this.options.dictRemoveFileConfirmation) {\n                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n                    return _this.removeFile(file);\n                  });\n                } else {\n                  return _this.removeFile(file);\n                }\n              }\n            };\n          })(this);\n          _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n          _results = [];\n          for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n            removeLink = _ref2[_k];\n            _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n          }\n          return _results;\n        }\n      },\n      removedfile: function(file) {\n        var _ref;\n        if (file.previewElement) {\n          if ((_ref = file.previewElement) != null) {\n            _ref.parentNode.removeChild(file.previewElement);\n          }\n        }\n        return this._updateMaxFilesReachedClass();\n      },\n      thumbnail: function(file, dataUrl) {\n        var thumbnailElement, _i, _len, _ref;\n        if (file.previewElement) {\n          file.previewElement.classList.remove(\"dz-file-preview\");\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            thumbnailElement = _ref[_i];\n            thumbnailElement.alt = file.name;\n            thumbnailElement.src = dataUrl;\n          }\n          return setTimeout(((function(_this) {\n            return function() {\n              return file.previewElement.classList.add(\"dz-image-preview\");\n            };\n          })(this)), 1);\n        }\n      },\n      error: function(file, message) {\n        var node, _i, _len, _ref, _results;\n        if (file.previewElement) {\n          file.previewElement.classList.add(\"dz-error\");\n          if (typeof message !== \"String\" && message.error) {\n            message = message.error;\n          }\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            _results.push(node.textContent = message);\n          }\n          return _results;\n        }\n      },\n      errormultiple: noop,\n      processing: function(file) {\n        if (file.previewElement) {\n          file.previewElement.classList.add(\"dz-processing\");\n          if (file._removeLink) {\n            return file._removeLink.textContent = this.options.dictCancelUpload;\n          }\n        }\n      },\n      processingmultiple: noop,\n      uploadprogress: function(file, progress, bytesSent) {\n        var node, _i, _len, _ref, _results;\n        if (file.previewElement) {\n          _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            node = _ref[_i];\n            if (node.nodeName === 'PROGRESS') {\n              _results.push(node.value = progress);\n            } else {\n              _results.push(node.style.width = \"\" + progress + \"%\");\n            }\n          }\n          return _results;\n        }\n      },\n      totaluploadprogress: noop,\n      sending: noop,\n      sendingmultiple: noop,\n      success: function(file) {\n        if (file.previewElement) {\n          return file.previewElement.classList.add(\"dz-success\");\n        }\n      },\n      successmultiple: noop,\n      canceled: function(file) {\n        return this.emit(\"error\", file, \"Upload canceled.\");\n      },\n      canceledmultiple: noop,\n      complete: function(file) {\n        if (file._removeLink) {\n          file._removeLink.textContent = this.options.dictRemoveFile;\n        }\n        if (file.previewElement) {\n          return file.previewElement.classList.add(\"dz-complete\");\n        }\n      },\n      completemultiple: noop,\n      maxfilesexceeded: noop,\n      maxfilesreached: noop,\n      queuecomplete: noop,\n      previewTemplate: \"<div class=\\\"dz-preview dz-file-preview\\\">\\n  <div class=\\\"dz-image\\\"><img data-dz-thumbnail /></div>\\n  <div class=\\\"dz-details\\\">\\n    <div class=\\\"dz-size\\\"><span data-dz-size></span></div>\\n    <div class=\\\"dz-filename\\\"><span data-dz-name></span></div>\\n  </div>\\n  <div class=\\\"dz-progress\\\"><span class=\\\"dz-upload\\\" data-dz-uploadprogress></span></div>\\n  <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div>\\n  <div class=\\\"dz-success-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Check</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n      </g>\\n    </svg>\\n  </div>\\n  <div class=\\\"dz-error-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Error</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <g id=\\\"Check-+-Oval-2\\\" sketch:type=\\\"MSLayerGroup\\\" stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\">\\n          <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n        </g>\\n      </g>\\n    </svg>\\n  </div>\\n</div>\"\n    };\n\n    extend = function() {\n      var key, object, objects, target, val, _i, _len;\n      target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      for (_i = 0, _len = objects.length; _i < _len; _i++) {\n        object = objects[_i];\n        for (key in object) {\n          val = object[key];\n          target[key] = val;\n        }\n      }\n      return target;\n    };\n\n    function Dropzone(element, options) {\n      var elementOptions, fallback, _ref;\n      this.element = element;\n      this.version = Dropzone.version;\n      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n      this.clickableElements = [];\n      this.listeners = [];\n      this.files = [];\n      if (typeof this.element === \"string\") {\n        this.element = document.querySelector(this.element);\n      }\n      if (!(this.element && (this.element.nodeType != null))) {\n        throw new Error(\"Invalid dropzone element.\");\n      }\n      if (this.element.dropzone) {\n        throw new Error(\"Dropzone already attached.\");\n      }\n      Dropzone.instances.push(this);\n      this.element.dropzone = this;\n      elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n        return this.options.fallback.call(this);\n      }\n      if (this.options.url == null) {\n        this.options.url = this.element.getAttribute(\"action\");\n      }\n      if (!this.options.url) {\n        throw new Error(\"No URL provided.\");\n      }\n      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n        throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n      }\n      if (this.options.acceptedMimeTypes) {\n        this.options.acceptedFiles = this.options.acceptedMimeTypes;\n        delete this.options.acceptedMimeTypes;\n      }\n      this.options.method = this.options.method.toUpperCase();\n      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n        fallback.parentNode.removeChild(fallback);\n      }\n      if (this.options.previewsContainer !== false) {\n        if (this.options.previewsContainer) {\n          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n        } else {\n          this.previewsContainer = this.element;\n        }\n      }\n      if (this.options.clickable) {\n        if (this.options.clickable === true) {\n          this.clickableElements = [this.element];\n        } else {\n          this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n        }\n      }\n      this.init();\n    }\n\n    Dropzone.prototype.getAcceptedFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.accepted) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getRejectedFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (!file.accepted) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getFilesWithStatus = function(status) {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status === status) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.getQueuedFiles = function() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    };\n\n    Dropzone.prototype.getUploadingFiles = function() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    };\n\n    Dropzone.prototype.getActiveFiles = function() {\n      var file, _i, _len, _ref, _results;\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n          _results.push(file);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.init = function() {\n      var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n      if (this.element.tagName === \"form\") {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n      }\n      if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><span>\" + this.options.dictDefaultMessage + \"</span></div>\"));\n      }\n      if (this.clickableElements.length) {\n        setupHiddenFileInput = (function(_this) {\n          return function() {\n            if (_this.hiddenFileInput) {\n              document.body.removeChild(_this.hiddenFileInput);\n            }\n            _this.hiddenFileInput = document.createElement(\"input\");\n            _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n              _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n            }\n            _this.hiddenFileInput.className = \"dz-hidden-input\";\n            if (_this.options.acceptedFiles != null) {\n              _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n            }\n            if (_this.options.capture != null) {\n              _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\n            }\n            _this.hiddenFileInput.style.visibility = \"hidden\";\n            _this.hiddenFileInput.style.position = \"absolute\";\n            _this.hiddenFileInput.style.top = \"0\";\n            _this.hiddenFileInput.style.left = \"0\";\n            _this.hiddenFileInput.style.height = \"0\";\n            _this.hiddenFileInput.style.width = \"0\";\n            document.body.appendChild(_this.hiddenFileInput);\n            return _this.hiddenFileInput.addEventListener(\"change\", function() {\n              var file, files, _i, _len;\n              files = _this.hiddenFileInput.files;\n              if (files.length) {\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                  file = files[_i];\n                  _this.addFile(file);\n                }\n              }\n              return setupHiddenFileInput();\n            });\n          };\n        })(this);\n        setupHiddenFileInput();\n      }\n      this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n      _ref1 = this.events;\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        eventName = _ref1[_i];\n        this.on(eventName, this.options[eventName]);\n      }\n      this.on(\"uploadprogress\", (function(_this) {\n        return function() {\n          return _this.updateTotalUploadProgress();\n        };\n      })(this));\n      this.on(\"removedfile\", (function(_this) {\n        return function() {\n          return _this.updateTotalUploadProgress();\n        };\n      })(this));\n      this.on(\"canceled\", (function(_this) {\n        return function(file) {\n          return _this.emit(\"complete\", file);\n        };\n      })(this));\n      this.on(\"complete\", (function(_this) {\n        return function(file) {\n          if (_this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n            return setTimeout((function() {\n              return _this.emit(\"queuecomplete\");\n            }), 0);\n          }\n        };\n      })(this));\n      noPropagation = function(e) {\n        e.stopPropagation();\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      };\n      this.listeners = [\n        {\n          element: this.element,\n          events: {\n            \"dragstart\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragstart\", e);\n              };\n            })(this),\n            \"dragenter\": (function(_this) {\n              return function(e) {\n                noPropagation(e);\n                return _this.emit(\"dragenter\", e);\n              };\n            })(this),\n            \"dragover\": (function(_this) {\n              return function(e) {\n                var efct;\n                try {\n                  efct = e.dataTransfer.effectAllowed;\n                } catch (_error) {}\n                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n                noPropagation(e);\n                return _this.emit(\"dragover\", e);\n              };\n            })(this),\n            \"dragleave\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragleave\", e);\n              };\n            })(this),\n            \"drop\": (function(_this) {\n              return function(e) {\n                noPropagation(e);\n                return _this.drop(e);\n              };\n            })(this),\n            \"dragend\": (function(_this) {\n              return function(e) {\n                return _this.emit(\"dragend\", e);\n              };\n            })(this)\n          }\n        }\n      ];\n      this.clickableElements.forEach((function(_this) {\n        return function(clickableElement) {\n          return _this.listeners.push({\n            element: clickableElement,\n            events: {\n              \"click\": function(evt) {\n                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n                  return _this.hiddenFileInput.click();\n                }\n              }\n            }\n          });\n        };\n      })(this));\n      this.enable();\n      return this.options.init.call(this);\n    };\n\n    Dropzone.prototype.destroy = function() {\n      var _ref;\n      this.disable();\n      this.removeAllFiles(true);\n      if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    };\n\n    Dropzone.prototype.updateTotalUploadProgress = function() {\n      var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n      totalBytesSent = 0;\n      totalBytes = 0;\n      activeFiles = this.getActiveFiles();\n      if (activeFiles.length) {\n        _ref = this.getActiveFiles();\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          file = _ref[_i];\n          totalBytesSent += file.upload.bytesSent;\n          totalBytes += file.upload.total;\n        }\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n      return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n    };\n\n    Dropzone.prototype._getParamName = function(n) {\n      if (typeof this.options.paramName === \"function\") {\n        return this.options.paramName(n);\n      } else {\n        return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n      }\n    };\n\n    Dropzone.prototype.getFallbackForm = function() {\n      var existingFallback, fields, fieldsString, form;\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n      fieldsString = \"<div class=\\\"dz-fallback\\\">\";\n      if (this.options.dictFallbackText) {\n        fieldsString += \"<p>\" + this.options.dictFallbackText + \"</p>\";\n      }\n      fieldsString += \"<input type=\\\"file\\\" name=\\\"\" + (this._getParamName(0)) + \"\\\" \" + (this.options.uploadMultiple ? 'multiple=\"multiple\"' : void 0) + \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\";\n      fields = Dropzone.createElement(fieldsString);\n      if (this.element.tagName !== \"FORM\") {\n        form = Dropzone.createElement(\"<form action=\\\"\" + this.options.url + \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\" + this.options.method + \"\\\"></form>\");\n        form.appendChild(fields);\n      } else {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n        this.element.setAttribute(\"method\", this.options.method);\n      }\n      return form != null ? form : fields;\n    };\n\n    Dropzone.prototype.getExistingFallback = function() {\n      var fallback, getFallback, tagName, _i, _len, _ref;\n      getFallback = function(elements) {\n        var el, _i, _len;\n        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n          el = elements[_i];\n          if (/(^| )fallback($| )/.test(el.className)) {\n            return el;\n          }\n        }\n      };\n      _ref = [\"div\", \"form\"];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        tagName = _ref[_i];\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    };\n\n    Dropzone.prototype.setupEventListeners = function() {\n      var elementListeners, event, listener, _i, _len, _ref, _results;\n      _ref = this.listeners;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        elementListeners = _ref[_i];\n        _results.push((function() {\n          var _ref1, _results1;\n          _ref1 = elementListeners.events;\n          _results1 = [];\n          for (event in _ref1) {\n            listener = _ref1[event];\n            _results1.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n          return _results1;\n        })());\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.removeEventListeners = function() {\n      var elementListeners, event, listener, _i, _len, _ref, _results;\n      _ref = this.listeners;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        elementListeners = _ref[_i];\n        _results.push((function() {\n          var _ref1, _results1;\n          _ref1 = elementListeners.events;\n          _results1 = [];\n          for (event in _ref1) {\n            listener = _ref1[event];\n            _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n          return _results1;\n        })());\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.disable = function() {\n      var file, _i, _len, _ref, _results;\n      this.clickableElements.forEach(function(element) {\n        return element.classList.remove(\"dz-clickable\");\n      });\n      this.removeEventListeners();\n      _ref = this.files;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        _results.push(this.cancelUpload(file));\n      }\n      return _results;\n    };\n\n    Dropzone.prototype.enable = function() {\n      this.clickableElements.forEach(function(element) {\n        return element.classList.add(\"dz-clickable\");\n      });\n      return this.setupEventListeners();\n    };\n\n    Dropzone.prototype.filesize = function(size) {\n      var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\n      units = ['TB', 'GB', 'MB', 'KB', 'b'];\n      selectedSize = selectedUnit = null;\n      for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\n        unit = units[i];\n        cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n        if (size >= cutoff) {\n          selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n          selectedUnit = unit;\n          break;\n        }\n      }\n      selectedSize = Math.round(10 * selectedSize) / 10;\n      return \"<strong>\" + selectedSize + \"</strong> \" + selectedUnit;\n    };\n\n    Dropzone.prototype._updateMaxFilesReachedClass = function() {\n      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit('maxfilesreached', this.files);\n        }\n        return this.element.classList.add(\"dz-max-files-reached\");\n      } else {\n        return this.element.classList.remove(\"dz-max-files-reached\");\n      }\n    };\n\n    Dropzone.prototype.drop = function(e) {\n      var files, items;\n      if (!e.dataTransfer) {\n        return;\n      }\n      this.emit(\"drop\", e);\n      files = e.dataTransfer.files;\n      if (files.length) {\n        items = e.dataTransfer.items;\n        if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n    };\n\n    Dropzone.prototype.paste = function(e) {\n      var items, _ref;\n      if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n        return;\n      }\n      this.emit(\"paste\", e);\n      items = e.clipboardData.items;\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    };\n\n    Dropzone.prototype.handleFiles = function(files) {\n      var file, _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        _results.push(this.addFile(file));\n      }\n      return _results;\n    };\n\n    Dropzone.prototype._addFilesFromItems = function(items) {\n      var entry, item, _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = items.length; _i < _len; _i++) {\n        item = items[_i];\n        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n          if (entry.isFile) {\n            _results.push(this.addFile(item.getAsFile()));\n          } else if (entry.isDirectory) {\n            _results.push(this._addFilesFromDirectory(entry, entry.name));\n          } else {\n            _results.push(void 0);\n          }\n        } else if (item.getAsFile != null) {\n          if ((item.kind == null) || item.kind === \"file\") {\n            _results.push(this.addFile(item.getAsFile()));\n          } else {\n            _results.push(void 0);\n          }\n        } else {\n          _results.push(void 0);\n        }\n      }\n      return _results;\n    };\n\n    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n      var dirReader, entriesReader;\n      dirReader = directory.createReader();\n      entriesReader = (function(_this) {\n        return function(entries) {\n          var entry, _i, _len;\n          for (_i = 0, _len = entries.length; _i < _len; _i++) {\n            entry = entries[_i];\n            if (entry.isFile) {\n              entry.file(function(file) {\n                if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                  return;\n                }\n                file.fullPath = \"\" + path + \"/\" + file.name;\n                return _this.addFile(file);\n              });\n            } else if (entry.isDirectory) {\n              _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n            }\n          }\n        };\n      })(this);\n      return dirReader.readEntries(entriesReader, function(error) {\n        return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n      });\n    };\n\n    Dropzone.prototype.accept = function(file, done) {\n      if (file.size > this.options.maxFilesize * 1024 * 1024) {\n        return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        return done(this.options.dictInvalidFileType);\n      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n        return this.emit(\"maxfilesexceeded\", file);\n      } else {\n        return this.options.accept.call(this, file, done);\n      }\n    };\n\n    Dropzone.prototype.addFile = function(file) {\n      file.upload = {\n        progress: 0,\n        total: file.size,\n        bytesSent: 0\n      };\n      this.files.push(file);\n      file.status = Dropzone.ADDED;\n      this.emit(\"addedfile\", file);\n      this._enqueueThumbnail(file);\n      return this.accept(file, (function(_this) {\n        return function(error) {\n          if (error) {\n            file.accepted = false;\n            _this._errorProcessing([file], error);\n          } else {\n            file.accepted = true;\n            if (_this.options.autoQueue) {\n              _this.enqueueFile(file);\n            }\n          }\n          return _this._updateMaxFilesReachedClass();\n        };\n      })(this));\n    };\n\n    Dropzone.prototype.enqueueFiles = function(files) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        this.enqueueFile(file);\n      }\n      return null;\n    };\n\n    Dropzone.prototype.enqueueFile = function(file) {\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n        if (this.options.autoProcessQueue) {\n          return setTimeout(((function(_this) {\n            return function() {\n              return _this.processQueue();\n            };\n          })(this)), 0);\n        }\n      } else {\n        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n      }\n    };\n\n    Dropzone.prototype._thumbnailQueue = [];\n\n    Dropzone.prototype._processingThumbnail = false;\n\n    Dropzone.prototype._enqueueThumbnail = function(file) {\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n        return setTimeout(((function(_this) {\n          return function() {\n            return _this._processThumbnailQueue();\n          };\n        })(this)), 0);\n      }\n    };\n\n    Dropzone.prototype._processThumbnailQueue = function() {\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n      this._processingThumbnail = true;\n      return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n        return function() {\n          _this._processingThumbnail = false;\n          return _this._processThumbnailQueue();\n        };\n      })(this));\n    };\n\n    Dropzone.prototype.removeFile = function(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n      this.files = without(this.files, file);\n      this.emit(\"removedfile\", file);\n      if (this.files.length === 0) {\n        return this.emit(\"reset\");\n      }\n    };\n\n    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n      var file, _i, _len, _ref;\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n      _ref = this.files.slice();\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        file = _ref[_i];\n        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n          this.removeFile(file);\n        }\n      }\n      return null;\n    };\n\n    Dropzone.prototype.createThumbnail = function(file, callback) {\n      var fileReader;\n      fileReader = new FileReader;\n      fileReader.onload = (function(_this) {\n        return function() {\n          if (file.type === \"image/svg+xml\") {\n            _this.emit(\"thumbnail\", file, fileReader.result);\n            if (callback != null) {\n              callback();\n            }\n            return;\n          }\n          return _this.createThumbnailFromUrl(file, fileReader.result, callback);\n        };\n      })(this);\n      return fileReader.readAsDataURL(file);\n    };\n\n    Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback) {\n      var img;\n      img = document.createElement(\"img\");\n      img.onload = (function(_this) {\n        return function() {\n          var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n          file.width = img.width;\n          file.height = img.height;\n          resizeInfo = _this.options.resize.call(_this, file);\n          if (resizeInfo.trgWidth == null) {\n            resizeInfo.trgWidth = resizeInfo.optWidth;\n          }\n          if (resizeInfo.trgHeight == null) {\n            resizeInfo.trgHeight = resizeInfo.optHeight;\n          }\n          canvas = document.createElement(\"canvas\");\n          ctx = canvas.getContext(\"2d\");\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n          drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n          thumbnail = canvas.toDataURL(\"image/png\");\n          _this.emit(\"thumbnail\", file, thumbnail);\n          if (callback != null) {\n            return callback();\n          }\n        };\n      })(this);\n      if (callback != null) {\n        img.onerror = callback;\n      }\n      return img.src = imageUrl;\n    };\n\n    Dropzone.prototype.processQueue = function() {\n      var i, parallelUploads, processingLength, queuedFiles;\n      parallelUploads = this.options.parallelUploads;\n      processingLength = this.getUploadingFiles().length;\n      i = processingLength;\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n      queuedFiles = this.getQueuedFiles();\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n      if (this.options.uploadMultiple) {\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          }\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    };\n\n    Dropzone.prototype.processFile = function(file) {\n      return this.processFiles([file]);\n    };\n\n    Dropzone.prototype.processFiles = function(files) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.processing = true;\n        file.status = Dropzone.UPLOADING;\n        this.emit(\"processing\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"processingmultiple\", files);\n      }\n      return this.uploadFiles(files);\n    };\n\n    Dropzone.prototype._getFilesWithXhr = function(xhr) {\n      var file, files;\n      return files = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.files;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          file = _ref[_i];\n          if (file.xhr === xhr) {\n            _results.push(file);\n          }\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Dropzone.prototype.cancelUpload = function(file) {\n      var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n      if (file.status === Dropzone.UPLOADING) {\n        groupedFiles = this._getFilesWithXhr(file.xhr);\n        for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n          groupedFile = groupedFiles[_i];\n          groupedFile.status = Dropzone.CANCELED;\n        }\n        file.xhr.abort();\n        for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n          groupedFile = groupedFiles[_j];\n          this.emit(\"canceled\", groupedFile);\n        }\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", groupedFiles);\n        }\n      } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\"canceled\", file);\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", [file]);\n        }\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    resolveOption = function() {\n      var args, option;\n      option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if (typeof option === 'function') {\n        return option.apply(this, args);\n      }\n      return option;\n    };\n\n    Dropzone.prototype.uploadFile = function(file) {\n      return this.uploadFiles([file]);\n    };\n\n    Dropzone.prototype.uploadFiles = function(files) {\n      var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\n      xhr = new XMLHttpRequest();\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.xhr = xhr;\n      }\n      method = resolveOption(this.options.method, files);\n      url = resolveOption(this.options.url, files);\n      xhr.open(method, url, true);\n      xhr.withCredentials = !!this.options.withCredentials;\n      response = null;\n      handleError = (function(_this) {\n        return function() {\n          var _j, _len1, _results;\n          _results = [];\n          for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n            file = files[_j];\n            _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n          }\n          return _results;\n        };\n      })(this);\n      updateProgress = (function(_this) {\n        return function(e) {\n          var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n          if (e != null) {\n            progress = 100 * e.loaded / e.total;\n            for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n              file = files[_j];\n              file.upload = {\n                progress: progress,\n                total: e.total,\n                bytesSent: e.loaded\n              };\n            }\n          } else {\n            allFilesFinished = true;\n            progress = 100;\n            for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n              file = files[_k];\n              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n                allFilesFinished = false;\n              }\n              file.upload.progress = progress;\n              file.upload.bytesSent = file.upload.total;\n            }\n            if (allFilesFinished) {\n              return;\n            }\n          }\n          _results = [];\n          for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n            file = files[_l];\n            _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n          }\n          return _results;\n        };\n      })(this);\n      xhr.onload = (function(_this) {\n        return function(e) {\n          var _ref;\n          if (files[0].status === Dropzone.CANCELED) {\n            return;\n          }\n          if (xhr.readyState !== 4) {\n            return;\n          }\n          response = xhr.responseText;\n          if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n            try {\n              response = JSON.parse(response);\n            } catch (_error) {\n              e = _error;\n              response = \"Invalid JSON response from server.\";\n            }\n          }\n          updateProgress();\n          if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n            return handleError();\n          } else {\n            return _this._finished(files, response, e);\n          }\n        };\n      })(this);\n      xhr.onerror = (function(_this) {\n        return function() {\n          if (files[0].status === Dropzone.CANCELED) {\n            return;\n          }\n          return handleError();\n        };\n      })(this);\n      progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n      progressObj.onprogress = updateProgress;\n      headers = {\n        \"Accept\": \"application/json\",\n        \"Cache-Control\": \"no-cache\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n      };\n      if (this.options.headers) {\n        extend(headers, this.options.headers);\n      }\n      for (headerName in headers) {\n        headerValue = headers[headerName];\n        xhr.setRequestHeader(headerName, headerValue);\n      }\n      formData = new FormData();\n      if (this.options.params) {\n        _ref1 = this.options.params;\n        for (key in _ref1) {\n          value = _ref1[key];\n          formData.append(key, value);\n        }\n      }\n      for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n        file = files[_j];\n        this.emit(\"sending\", file, xhr, formData);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"sendingmultiple\", files, xhr, formData);\n      }\n      if (this.element.tagName === \"FORM\") {\n        _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n          input = _ref2[_k];\n          inputName = input.getAttribute(\"name\");\n          inputType = input.getAttribute(\"type\");\n          if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n            _ref3 = input.options;\n            for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n              option = _ref3[_l];\n              if (option.selected) {\n                formData.append(inputName, option.value);\n              }\n            }\n          } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n            formData.append(inputName, input.value);\n          }\n        }\n      }\n      for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\n        formData.append(this._getParamName(i), files[i], files[i].name);\n      }\n      return xhr.send(formData);\n    };\n\n    Dropzone.prototype._finished = function(files, responseText, e) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.status = Dropzone.SUCCESS;\n        this.emit(\"success\", file, responseText, e);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"successmultiple\", files, responseText, e);\n        this.emit(\"completemultiple\", files);\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n      var file, _i, _len;\n      for (_i = 0, _len = files.length; _i < _len; _i++) {\n        file = files[_i];\n        file.status = Dropzone.ERROR;\n        this.emit(\"error\", file, message, xhr);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"errormultiple\", files, message, xhr);\n        this.emit(\"completemultiple\", files);\n      }\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    };\n\n    return Dropzone;\n\n  })(Emitter);\n\n  Dropzone.version = \"4.0.1\";\n\n  Dropzone.options = {};\n\n  Dropzone.optionsForElement = function(element) {\n    if (element.getAttribute(\"id\")) {\n      return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n    } else {\n      return void 0;\n    }\n  };\n\n  Dropzone.instances = [];\n\n  Dropzone.forElement = function(element) {\n    if (typeof element === \"string\") {\n      element = document.querySelector(element);\n    }\n    if ((element != null ? element.dropzone : void 0) == null) {\n      throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n    }\n    return element.dropzone;\n  };\n\n  Dropzone.autoDiscover = true;\n\n  Dropzone.discover = function() {\n    var checkElements, dropzone, dropzones, _i, _len, _results;\n    if (document.querySelectorAll) {\n      dropzones = document.querySelectorAll(\".dropzone\");\n    } else {\n      dropzones = [];\n      checkElements = function(elements) {\n        var el, _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n          el = elements[_i];\n          if (/(^| )dropzone($| )/.test(el.className)) {\n            _results.push(dropzones.push(el));\n          } else {\n            _results.push(void 0);\n          }\n        }\n        return _results;\n      };\n      checkElements(document.getElementsByTagName(\"div\"));\n      checkElements(document.getElementsByTagName(\"form\"));\n    }\n    _results = [];\n    for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n      dropzone = dropzones[_i];\n      if (Dropzone.optionsForElement(dropzone) !== false) {\n        _results.push(new Dropzone(dropzone));\n      } else {\n        _results.push(void 0);\n      }\n    }\n    return _results;\n  };\n\n  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n  Dropzone.isBrowserSupported = function() {\n    var capableBrowser, regex, _i, _len, _ref;\n    capableBrowser = true;\n    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n      if (!(\"classList\" in document.createElement(\"a\"))) {\n        capableBrowser = false;\n      } else {\n        _ref = Dropzone.blacklistedBrowsers;\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          regex = _ref[_i];\n          if (regex.test(navigator.userAgent)) {\n            capableBrowser = false;\n            continue;\n          }\n        }\n      }\n    } else {\n      capableBrowser = false;\n    }\n    return capableBrowser;\n  };\n\n  without = function(list, rejectedItem) {\n    var item, _i, _len, _results;\n    _results = [];\n    for (_i = 0, _len = list.length; _i < _len; _i++) {\n      item = list[_i];\n      if (item !== rejectedItem) {\n        _results.push(item);\n      }\n    }\n    return _results;\n  };\n\n  camelize = function(str) {\n    return str.replace(/[\\-_](\\w)/g, function(match) {\n      return match.charAt(1).toUpperCase();\n    });\n  };\n\n  Dropzone.createElement = function(string) {\n    var div;\n    div = document.createElement(\"div\");\n    div.innerHTML = string;\n    return div.childNodes[0];\n  };\n\n  Dropzone.elementInside = function(element, container) {\n    if (element === container) {\n      return true;\n    }\n    while (element = element.parentNode) {\n      if (element === container) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  Dropzone.getElement = function(el, name) {\n    var element;\n    if (typeof el === \"string\") {\n      element = document.querySelector(el);\n    } else if (el.nodeType != null) {\n      element = el;\n    }\n    if (element == null) {\n      throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n    }\n    return element;\n  };\n\n  Dropzone.getElements = function(els, name) {\n    var e, el, elements, _i, _j, _len, _len1, _ref;\n    if (els instanceof Array) {\n      elements = [];\n      try {\n        for (_i = 0, _len = els.length; _i < _len; _i++) {\n          el = els[_i];\n          elements.push(this.getElement(el, name));\n        }\n      } catch (_error) {\n        e = _error;\n        elements = null;\n      }\n    } else if (typeof els === \"string\") {\n      elements = [];\n      _ref = document.querySelectorAll(els);\n      for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n        el = _ref[_j];\n        elements.push(el);\n      }\n    } else if (els.nodeType != null) {\n      elements = [els];\n    }\n    if (!((elements != null) && elements.length)) {\n      throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n    }\n    return elements;\n  };\n\n  Dropzone.confirm = function(question, accepted, rejected) {\n    if (window.confirm(question)) {\n      return accepted();\n    } else if (rejected != null) {\n      return rejected();\n    }\n  };\n\n  Dropzone.isValidFile = function(file, acceptedFiles) {\n    var baseMimeType, mimeType, validType, _i, _len;\n    if (!acceptedFiles) {\n      return true;\n    }\n    acceptedFiles = acceptedFiles.split(\",\");\n    mimeType = file.type;\n    baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n    for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n      validType = acceptedFiles[_i];\n      validType = validType.trim();\n      if (validType.charAt(0) === \".\") {\n        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n          return true;\n        }\n      } else if (/\\/\\*$/.test(validType)) {\n        if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n          return true;\n        }\n      } else {\n        if (mimeType === validType) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n    jQuery.fn.dropzone = function(options) {\n      return this.each(function() {\n        return new Dropzone(this, options);\n      });\n    };\n  }\n\n  if (typeof module !== \"undefined\" && module !== null) {\n    module.exports = Dropzone;\n  } else {\n    window.Dropzone = Dropzone;\n  }\n\n  Dropzone.ADDED = \"added\";\n\n  Dropzone.QUEUED = \"queued\";\n\n  Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n  Dropzone.UPLOADING = \"uploading\";\n\n  Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n  Dropzone.CANCELED = \"canceled\";\n\n  Dropzone.ERROR = \"error\";\n\n  Dropzone.SUCCESS = \"success\";\n\n\n  /*\n  \n  Bugfix for iOS 6 and 7\n  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n  based on the work of https://github.com/stomita/ios-imagefile-megapixel\n   */\n\n  detectVerticalSquash = function(img) {\n    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n    iw = img.naturalWidth;\n    ih = img.naturalHeight;\n    canvas = document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = ih;\n    ctx = canvas.getContext(\"2d\");\n    ctx.drawImage(img, 0, 0);\n    data = ctx.getImageData(0, 0, 1, ih).data;\n    sy = 0;\n    ey = ih;\n    py = ih;\n    while (py > sy) {\n      alpha = data[(py - 1) * 4 + 3];\n      if (alpha === 0) {\n        ey = py;\n      } else {\n        sy = py;\n      }\n      py = (ey + sy) >> 1;\n    }\n    ratio = py / ih;\n    if (ratio === 0) {\n      return 1;\n    } else {\n      return ratio;\n    }\n  };\n\n  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n    var vertSquashRatio;\n    vertSquashRatio = detectVerticalSquash(img);\n    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n  };\n\n\n  /*\n   * contentloaded.js\n   *\n   * Author: Diego Perini (diego.perini at gmail.com)\n   * Summary: cross-browser wrapper for DOMContentLoaded\n   * Updated: 20101020\n   * License: MIT\n   * Version: 1.2\n   *\n   * URL:\n   * http://javascript.nwbox.com/ContentLoaded/\n   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n   */\n\n  contentLoaded = function(win, fn) {\n    var add, doc, done, init, poll, pre, rem, root, top;\n    done = false;\n    top = true;\n    doc = win.document;\n    root = doc.documentElement;\n    add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n    rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n    pre = (doc.addEventListener ? \"\" : \"on\");\n    init = function(e) {\n      if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n        return;\n      }\n      (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n      if (!done && (done = true)) {\n        return fn.call(win, e.type || e);\n      }\n    };\n    poll = function() {\n      var e;\n      try {\n        root.doScroll(\"left\");\n      } catch (_error) {\n        e = _error;\n        setTimeout(poll, 50);\n        return;\n      }\n      return init(\"poll\");\n    };\n    if (doc.readyState !== \"complete\") {\n      if (doc.createEventObject && root.doScroll) {\n        try {\n          top = !win.frameElement;\n        } catch (_error) {}\n        if (top) {\n          poll();\n        }\n      }\n      doc[add](pre + \"DOMContentLoaded\", init, false);\n      doc[add](pre + \"readystatechange\", init, false);\n      return win[add](pre + \"load\", init, false);\n    }\n  };\n\n  Dropzone._autoDiscoverFunction = function() {\n    if (Dropzone.autoDiscover) {\n      return Dropzone.discover();\n    }\n  };\n\n  contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n}).call(this);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/dropzone/readme.md",
    "content": "# Warning!\n\nYou shouldn't pull these files from the github master branch directly!\n\nThey might be outdated or not working at all since I normally only push them\nwhen I create a version release.\n\nTo be sure to get a proper release, please go to the\n[dropzone releases section on github](https://github.com/enyo/dropzone/releases/latest).\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/eventEmitter/EventEmitter.js",
    "content": "/*!\n * EventEmitter v4.2.11 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function () {\n    'use strict';\n\n    /**\n     * Class for managing events.\n     * Can be extended to provide event functionality in other classes.\n     *\n     * @class EventEmitter Manages event registering and emitting.\n     */\n    function EventEmitter() {}\n\n    // Shortcuts to improve speed and size\n    var proto = EventEmitter.prototype;\n    var exports = this;\n    var originalGlobalValue = exports.EventEmitter;\n\n    /**\n     * Finds the index of the listener for the event in its storage array.\n     *\n     * @param {Function[]} listeners Array of listeners to search through.\n     * @param {Function} listener Method to look for.\n     * @return {Number} Index of the specified listener, -1 if not found\n     * @api private\n     */\n    function indexOfListener(listeners, listener) {\n        var i = listeners.length;\n        while (i--) {\n            if (listeners[i].listener === listener) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    /**\n     * Alias a method while keeping the context correct, to allow for overwriting of target method.\n     *\n     * @param {String} name The name of the target method.\n     * @return {Function} The aliased method\n     * @api private\n     */\n    function alias(name) {\n        return function aliasClosure() {\n            return this[name].apply(this, arguments);\n        };\n    }\n\n    /**\n     * Returns the listener array for the specified event.\n     * Will initialise the event object and listener arrays if required.\n     * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n     * Each property in the object response is an array of listener functions.\n     *\n     * @param {String|RegExp} evt Name of the event to return the listeners from.\n     * @return {Function[]|Object} All listener functions for the event.\n     */\n    proto.getListeners = function getListeners(evt) {\n        var events = this._getEvents();\n        var response;\n        var key;\n\n        // Return a concatenated array of all matching events if\n        // the selector is a regular expression.\n        if (evt instanceof RegExp) {\n            response = {};\n            for (key in events) {\n                if (events.hasOwnProperty(key) && evt.test(key)) {\n                    response[key] = events[key];\n                }\n            }\n        }\n        else {\n            response = events[evt] || (events[evt] = []);\n        }\n\n        return response;\n    };\n\n    /**\n     * Takes a list of listener objects and flattens it into a list of listener functions.\n     *\n     * @param {Object[]} listeners Raw listener objects.\n     * @return {Function[]} Just the listener functions.\n     */\n    proto.flattenListeners = function flattenListeners(listeners) {\n        var flatListeners = [];\n        var i;\n\n        for (i = 0; i < listeners.length; i += 1) {\n            flatListeners.push(listeners[i].listener);\n        }\n\n        return flatListeners;\n    };\n\n    /**\n     * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n     *\n     * @param {String|RegExp} evt Name of the event to return the listeners from.\n     * @return {Object} All listener functions for an event in an object.\n     */\n    proto.getListenersAsObject = function getListenersAsObject(evt) {\n        var listeners = this.getListeners(evt);\n        var response;\n\n        if (listeners instanceof Array) {\n            response = {};\n            response[evt] = listeners;\n        }\n\n        return response || listeners;\n    };\n\n    /**\n     * Adds a listener function to the specified event.\n     * The listener will not be added if it is a duplicate.\n     * If the listener returns true then it will be removed after it is called.\n     * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to attach the listener to.\n     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addListener = function addListener(evt, listener) {\n        var listeners = this.getListenersAsObject(evt);\n        var listenerIsWrapped = typeof listener === 'object';\n        var key;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n                listeners[key].push(listenerIsWrapped ? listener : {\n                    listener: listener,\n                    once: false\n                });\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of addListener\n     */\n    proto.on = alias('addListener');\n\n    /**\n     * Semi-alias of addListener. It will add a listener that will be\n     * automatically removed after its first execution.\n     *\n     * @param {String|RegExp} evt Name of the event to attach the listener to.\n     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addOnceListener = function addOnceListener(evt, listener) {\n        return this.addListener(evt, {\n            listener: listener,\n            once: true\n        });\n    };\n\n    /**\n     * Alias of addOnceListener.\n     */\n    proto.once = alias('addOnceListener');\n\n    /**\n     * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n     * You need to tell it what event names should be matched by a regex.\n     *\n     * @param {String} evt Name of the event to create.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.defineEvent = function defineEvent(evt) {\n        this.getListeners(evt);\n        return this;\n    };\n\n    /**\n     * Uses defineEvent to define multiple events.\n     *\n     * @param {String[]} evts An array of event names to define.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.defineEvents = function defineEvents(evts) {\n        for (var i = 0; i < evts.length; i += 1) {\n            this.defineEvent(evts[i]);\n        }\n        return this;\n    };\n\n    /**\n     * Removes a listener function from the specified event.\n     * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to remove the listener from.\n     * @param {Function} listener Method to remove from the event.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeListener = function removeListener(evt, listener) {\n        var listeners = this.getListenersAsObject(evt);\n        var index;\n        var key;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key)) {\n                index = indexOfListener(listeners[key], listener);\n\n                if (index !== -1) {\n                    listeners[key].splice(index, 1);\n                }\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of removeListener\n     */\n    proto.off = alias('removeListener');\n\n    /**\n     * Adds listeners in bulk using the manipulateListeners method.\n     * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n     * You can also pass it a regular expression to add the array of listeners to all events that match it.\n     * Yeah, this function does quite a bit. That's probably a bad thing.\n     *\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to add.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addListeners = function addListeners(evt, listeners) {\n        // Pass through to manipulateListeners\n        return this.manipulateListeners(false, evt, listeners);\n    };\n\n    /**\n     * Removes listeners in bulk using the manipulateListeners method.\n     * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n     * You can also pass it an event name and an array of listeners to be removed.\n     * You can also pass it a regular expression to remove the listeners from all events that match it.\n     *\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to remove.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeListeners = function removeListeners(evt, listeners) {\n        // Pass through to manipulateListeners\n        return this.manipulateListeners(true, evt, listeners);\n    };\n\n    /**\n     * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n     * The first argument will determine if the listeners are removed (true) or added (false).\n     * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n     * You can also pass it an event name and an array of listeners to be added/removed.\n     * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n     *\n     * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n        var i;\n        var value;\n        var single = remove ? this.removeListener : this.addListener;\n        var multiple = remove ? this.removeListeners : this.addListeners;\n\n        // If evt is an object then pass each of its properties to this method\n        if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n            for (i in evt) {\n                if (evt.hasOwnProperty(i) && (value = evt[i])) {\n                    // Pass the single listener straight through to the singular method\n                    if (typeof value === 'function') {\n                        single.call(this, i, value);\n                    }\n                    else {\n                        // Otherwise pass back to the multiple function\n                        multiple.call(this, i, value);\n                    }\n                }\n            }\n        }\n        else {\n            // So evt must be a string\n            // And listeners must be an array of listeners\n            // Loop over it and pass each one to the multiple method\n            i = listeners.length;\n            while (i--) {\n                single.call(this, evt, listeners[i]);\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes all listeners from a specified event.\n     * If you do not specify an event then all listeners will be removed.\n     * That means every event will be emptied.\n     * You can also pass a regex to remove all events that match it.\n     *\n     * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeEvent = function removeEvent(evt) {\n        var type = typeof evt;\n        var events = this._getEvents();\n        var key;\n\n        // Remove different things depending on the state of evt\n        if (type === 'string') {\n            // Remove all listeners for the specified event\n            delete events[evt];\n        }\n        else if (evt instanceof RegExp) {\n            // Remove all events matching the regex.\n            for (key in events) {\n                if (events.hasOwnProperty(key) && evt.test(key)) {\n                    delete events[key];\n                }\n            }\n        }\n        else {\n            // Remove all listeners in all events\n            delete this._events;\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of removeEvent.\n     *\n     * Added to mirror the node API.\n     */\n    proto.removeAllListeners = alias('removeEvent');\n\n    /**\n     * Emits an event of your choice.\n     * When emitted, every listener attached to that event will be executed.\n     * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n     * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n     * So they will not arrive within the array on the other side, they will be separate.\n     * You can also pass a regular expression to emit to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n     * @param {Array} [args] Optional array of arguments to be passed to each listener.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.emitEvent = function emitEvent(evt, args) {\n        var listeners = this.getListenersAsObject(evt);\n        var listener;\n        var i;\n        var key;\n        var response;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key)) {\n                i = listeners[key].length;\n\n                while (i--) {\n                    // If the listener returns true then it shall be removed from the event\n                    // The function is executed either with a basic call or an apply if there is an args array\n                    listener = listeners[key][i];\n\n                    if (listener.once === true) {\n                        this.removeListener(evt, listener.listener);\n                    }\n\n                    response = listener.listener.apply(this, args || []);\n\n                    if (response === this._getOnceReturnValue()) {\n                        this.removeListener(evt, listener.listener);\n                    }\n                }\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of emitEvent\n     */\n    proto.trigger = alias('emitEvent');\n\n    /**\n     * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n     * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n     * @param {...*} Optional additional arguments to be passed to each listener.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.emit = function emit(evt) {\n        var args = Array.prototype.slice.call(arguments, 1);\n        return this.emitEvent(evt, args);\n    };\n\n    /**\n     * Sets the current value to check against when executing listeners. If a\n     * listeners return value matches the one set here then it will be removed\n     * after execution. This value defaults to true.\n     *\n     * @param {*} value The new value to check for when executing listeners.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.setOnceReturnValue = function setOnceReturnValue(value) {\n        this._onceReturnValue = value;\n        return this;\n    };\n\n    /**\n     * Fetches the current value to check against when executing listeners. If\n     * the listeners return value matches this one then it should be removed\n     * automatically. It will return true by default.\n     *\n     * @return {*|Boolean} The current value to check for or the default, true.\n     * @api private\n     */\n    proto._getOnceReturnValue = function _getOnceReturnValue() {\n        if (this.hasOwnProperty('_onceReturnValue')) {\n            return this._onceReturnValue;\n        }\n        else {\n            return true;\n        }\n    };\n\n    /**\n     * Fetches the events object and creates one if required.\n     *\n     * @return {Object} The events storage object.\n     * @api private\n     */\n    proto._getEvents = function _getEvents() {\n        return this._events || (this._events = {});\n    };\n\n    /**\n     * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n     *\n     * @return {Function} Non conflicting EventEmitter class.\n     */\n    EventEmitter.noConflict = function noConflict() {\n        exports.EventEmitter = originalGlobalValue;\n        return EventEmitter;\n    };\n\n    // Expose the class either via AMD, CommonJS or the global object\n    if (typeof define === 'function' && define.amd) {\n        define(function () {\n            return EventEmitter;\n        });\n    }\n    else if (typeof module === 'object' && module.exports){\n        module.exports = EventEmitter;\n    }\n    else {\n        exports.EventEmitter = EventEmitter;\n    }\n}.call(this));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/eventie/eventie.js",
    "content": "/*!\n * eventie v1.0.6\n * event binding helper\n *   eventie.bind( elem, 'click', myFn )\n *   eventie.unbind( elem, 'click', myFn )\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true */\n/*global define: false, module: false */\n\n( function( window ) {\n\n'use strict';\n\nvar docElem = document.documentElement;\n\nvar bind = function() {};\n\nfunction getIEEvent( obj ) {\n  var event = window.event;\n  // add event.target\n  event.target = event.target || event.srcElement || obj;\n  return event;\n}\n\nif ( docElem.addEventListener ) {\n  bind = function( obj, type, fn ) {\n    obj.addEventListener( type, fn, false );\n  };\n} else if ( docElem.attachEvent ) {\n  bind = function( obj, type, fn ) {\n    obj[ type + fn ] = fn.handleEvent ?\n      function() {\n        var event = getIEEvent( obj );\n        fn.handleEvent.call( fn, event );\n      } :\n      function() {\n        var event = getIEEvent( obj );\n        fn.call( obj, event );\n      };\n    obj.attachEvent( \"on\" + type, obj[ type + fn ] );\n  };\n}\n\nvar unbind = function() {};\n\nif ( docElem.removeEventListener ) {\n  unbind = function( obj, type, fn ) {\n    obj.removeEventListener( type, fn, false );\n  };\n} else if ( docElem.detachEvent ) {\n  unbind = function( obj, type, fn ) {\n    obj.detachEvent( \"on\" + type, obj[ type + fn ] );\n    try {\n      delete obj[ type + fn ];\n    } catch ( err ) {\n      // can't delete window object properties\n      obj[ type + fn ] = undefined;\n    }\n  };\n}\n\nvar eventie = {\n  bind: bind,\n  unbind: unbind\n};\n\n// ----- module definition ----- //\n\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( eventie );\n} else if ( typeof exports === 'object' ) {\n  // CommonJS\n  module.exports = eventie;\n} else {\n  // browser global\n  window.eventie = eventie;\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/fizzy-ui-utils/utils.js",
    "content": "/**\n * Fizzy UI utils v1.0.1\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false, require: false */\n  'use strict';\n  // universal module definition\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'doc-ready/doc-ready',\n      'matches-selector/matches-selector'\n    ], function( docReady, matchesSelector ) {\n      return factory( window, docReady, matchesSelector );\n    });\n  } else if ( typeof exports == 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('doc-ready'),\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.docReady,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, docReady, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- isArray ----- //\n  \nvar objToString = Object.prototype.toString;\nutils.isArray = function( obj ) {\n  return objToString.call( obj ) == '[object Array]';\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  var ary = [];\n  if ( utils.isArray( obj ) ) {\n    // use object if already an array\n    ary = obj;\n  } else if ( obj && typeof obj.length == 'number' ) {\n    // convert nodeList to array\n    for ( var i=0, len = obj.length; i < len; i++ ) {\n      ary.push( obj[i] );\n    }\n  } else {\n    // array of single index\n    ary.push( obj );\n  }\n  return ary;\n};\n\n// ----- indexOf ----- //\n\n// index of helper cause IE8\nutils.indexOf = Array.prototype.indexOf ? function( ary, obj ) {\n    return ary.indexOf( obj );\n  } : function( ary, obj ) {\n    for ( var i=0, len = ary.length; i < len; i++ ) {\n      if ( ary[i] === obj ) {\n        return i;\n      }\n    }\n    return -1;\n  };\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = utils.indexOf( ary, obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- isElement ----- //\n\n// http://stackoverflow.com/a/384380/182183\nutils.isElement = ( typeof HTMLElement == 'function' || typeof HTMLElement == 'object' ) ?\n  function isElementDOM2( obj ) {\n    return obj instanceof HTMLElement;\n  } :\n  function isElementQuirky( obj ) {\n    return obj && typeof obj == 'object' &&\n      obj.nodeType == 1 && typeof obj.nodeName == 'string';\n  };\n\n// ----- setText ----- //\n\nutils.setText = ( function() {\n  var setTextProperty;\n  function setText( elem, text ) {\n    // only check setTextProperty once\n    setTextProperty = setTextProperty || ( document.documentElement.textContent !== undefined ? 'textContent' : 'innerText' );\n    elem[ setTextProperty ] = text;\n  }\n  return setText;\n})();\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    // check that elem is an actual element\n    if ( !utils.isElement( elem ) ) {\n      continue;\n    }\n    // filter & find items if we have a selector\n    if ( selector ) {\n      // filter siblings\n      if ( matchesSelector( elem, selector ) ) {\n        ffElems.push( elem );\n      }\n      // find children\n      var childElems = elem.querySelectorAll( selector );\n      // concat childElems to filterFound array\n      for ( var j=0, jLen = childElems.length; j < jLen; j++ ) {\n        ffElems.push( childElems[j] );\n      }\n    } else {\n      ffElems.push( elem );\n    }\n  }\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    if ( timeout ) {\n      clearTimeout( timeout );\n    }\n    var args = arguments;\n\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold || 100 );\n  };\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-option attribute\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var elems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var dataAttr = 'data-' + dashedNamespace + '-options';\n\n    for ( var i=0, len = elems.length; i < len; i++ ) {\n      var elem = elems[i];\n      var attr = elem.getAttribute( dataAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' +\n            elem.nodeName.toLowerCase() + ( elem.id ? '#' + elem.id : '' ) + ': ' +\n            error );\n        }\n        continue;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('layoutname')\n      var jQuery = window.jQuery;\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    }\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.crosshair.js",
    "content": "/* Flot plugin for showing crosshairs when the mouse hovers over the plot.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tcrosshair: {\n\t\tmode: null or \"x\" or \"y\" or \"xy\"\n\t\tcolor: color\n\t\tlineWidth: number\n\t}\n\nSet the mode to one of \"x\", \"y\" or \"xy\". The \"x\" mode enables a vertical\ncrosshair that lets you trace the values on the x axis, \"y\" enables a\nhorizontal crosshair and \"xy\" enables them both. \"color\" is the color of the\ncrosshair (default is \"rgba(170, 0, 0, 0.80)\"), \"lineWidth\" is the width of\nthe drawn lines (default is 1).\n\nThe plugin also adds four public methods:\n\n  - setCrosshair( pos )\n\n    Set the position of the crosshair. Note that this is cleared if the user\n    moves the mouse. \"pos\" is in coordinates of the plot and should be on the\n    form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple\n    axes), which is coincidentally the same format as what you get from a\n    \"plothover\" event. If \"pos\" is null, the crosshair is cleared.\n\n  - clearCrosshair()\n\n    Clear the crosshair.\n\n  - lockCrosshair(pos)\n\n    Cause the crosshair to lock to the current location, no longer updating if\n    the user moves the mouse. Optionally supply a position (passed on to\n    setCrosshair()) to move it to.\n\n    Example usage:\n\n\tvar myFlot = $.plot( $(\"#graph\"), ..., { crosshair: { mode: \"x\" } } };\n\t$(\"#graph\").bind( \"plothover\", function ( evt, position, item ) {\n\t\tif ( item ) {\n\t\t\t// Lock the crosshair to the data point being hovered\n\t\t\tmyFlot.lockCrosshair({\n\t\t\t\tx: item.datapoint[ 0 ],\n\t\t\t\ty: item.datapoint[ 1 ]\n\t\t\t});\n\t\t} else {\n\t\t\t// Return normal crosshair operation\n\t\t\tmyFlot.unlockCrosshair();\n\t\t}\n\t});\n\n  - unlockCrosshair()\n\n    Free the crosshair to move again after locking it.\n*/\n\n(function ($) {\n    var options = {\n        crosshair: {\n            mode: null, // one of null, \"x\", \"y\" or \"xy\",\n            color: \"rgba(170, 0, 0, 0.80)\",\n            lineWidth: 1\n        }\n    };\n    \n    function init(plot) {\n        // position of crosshair in pixels\n        var crosshair = { x: -1, y: -1, locked: false };\n\n        plot.setCrosshair = function setCrosshair(pos) {\n            if (!pos)\n                crosshair.x = -1;\n            else {\n                var o = plot.p2c(pos);\n                crosshair.x = Math.max(0, Math.min(o.left, plot.width()));\n                crosshair.y = Math.max(0, Math.min(o.top, plot.height()));\n            }\n            \n            plot.triggerRedrawOverlay();\n        };\n        \n        plot.clearCrosshair = plot.setCrosshair; // passes null for pos\n        \n        plot.lockCrosshair = function lockCrosshair(pos) {\n            if (pos)\n                plot.setCrosshair(pos);\n            crosshair.locked = true;\n        };\n\n        plot.unlockCrosshair = function unlockCrosshair() {\n            crosshair.locked = false;\n        };\n\n        function onMouseOut(e) {\n            if (crosshair.locked)\n                return;\n\n            if (crosshair.x != -1) {\n                crosshair.x = -1;\n                plot.triggerRedrawOverlay();\n            }\n        }\n\n        function onMouseMove(e) {\n            if (crosshair.locked)\n                return;\n                \n            if (plot.getSelection && plot.getSelection()) {\n                crosshair.x = -1; // hide the crosshair while selecting\n                return;\n            }\n                \n            var offset = plot.offset();\n            crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));\n            crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));\n            plot.triggerRedrawOverlay();\n        }\n        \n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n            if (!plot.getOptions().crosshair.mode)\n                return;\n\n            eventHolder.mouseout(onMouseOut);\n            eventHolder.mousemove(onMouseMove);\n        });\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            var c = plot.getOptions().crosshair;\n            if (!c.mode)\n                return;\n\n            var plotOffset = plot.getPlotOffset();\n            \n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            if (crosshair.x != -1) {\n                var adj = plot.getOptions().crosshair.lineWidth % 2 ? 0.5 : 0;\n\n                ctx.strokeStyle = c.color;\n                ctx.lineWidth = c.lineWidth;\n                ctx.lineJoin = \"round\";\n\n                ctx.beginPath();\n                if (c.mode.indexOf(\"x\") != -1) {\n                    var drawX = Math.floor(crosshair.x) + adj;\n                    ctx.moveTo(drawX, 0);\n                    ctx.lineTo(drawX, plot.height());\n                }\n                if (c.mode.indexOf(\"y\") != -1) {\n                    var drawY = Math.floor(crosshair.y) + adj;\n                    ctx.moveTo(0, drawY);\n                    ctx.lineTo(plot.width(), drawY);\n                }\n                ctx.stroke();\n            }\n            ctx.restore();\n        });\n\n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mouseout\", onMouseOut);\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n        });\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'crosshair',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.pie.js",
    "content": "/* Flot plugin for rendering pie charts.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes that each series has a single data value, and that each\nvalue is a positive integer or zero.  Negative numbers don't make sense for a\npie chart, and have unpredictable results.  The values do NOT need to be\npassed in as percentages; the plugin will calculate the total and per-slice\npercentages internally.\n\n* Created by Brian Medendorp\n\n* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpie: {\n\t\t\tshow: true/false\n\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'\n\t\t\tinnerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect\n\t\t\tstartAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result\n\t\t\ttilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)\n\t\t\toffset: {\n\t\t\t\ttop: integer value to move the pie up or down\n\t\t\t\tleft: integer value to move the pie left or right, or 'auto'\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')\n\t\t\t\twidth: integer pixel width of the stroke\n\t\t\t},\n\t\t\tlabel: {\n\t\t\t\tshow: true/false, or 'auto'\n\t\t\t\tformatter:  a user-defined function that modifies the text/style of the label text\n\t\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length\n\t\t\t\tbackground: {\n\t\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')\n\t\t\t\t\topacity: 0-1\n\t\t\t\t},\n\t\t\t\tthreshold: 0-1 for the percentage value at which to hide labels (if they're too small)\n\t\t\t},\n\t\t\tcombine: {\n\t\t\t\tthreshold: 0-1 for the percentage value at which to combine slices (if they're too small)\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined\n\t\t\t\tlabel: any text value of what the combined slice should be labeled\n\t\t\t}\n\t\t\thighlight: {\n\t\t\t\topacity: 0-1\n\t\t\t}\n\t\t}\n\t}\n\nMore detail and specific examples can be found in the included HTML file.\n\n*/\n\n(function($) {\n\n\t// Maximum redraw attempts when fitting labels within the plot\n\n\tvar REDRAW_ATTEMPTS = 10;\n\n\t// Factor by which to shrink the pie when fitting labels within the plot\n\n\tvar REDRAW_SHRINK = 0.95;\n\n\tfunction init(plot) {\n\n\t\tvar canvas = null,\n\t\t\ttarget = null,\n\t\t\toptions = null,\n\t\t\tmaxRadius = null,\n\t\t\tcenterLeft = null,\n\t\t\tcenterTop = null,\n\t\t\tprocessed = false,\n\t\t\tctx = null;\n\n\t\t// interactive variables\n\n\t\tvar highlights = [];\n\n\t\t// add hook to determine if pie plugin in enabled, and then perform necessary operations\n\n\t\tplot.hooks.processOptions.push(function(plot, options) {\n\t\t\tif (options.series.pie.show) {\n\n\t\t\t\toptions.grid.show = false;\n\n\t\t\t\t// set labels.show\n\n\t\t\t\tif (options.series.pie.label.show == \"auto\") {\n\t\t\t\t\tif (options.legend.show) {\n\t\t\t\t\t\toptions.series.pie.label.show = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.label.show = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// set radius\n\n\t\t\t\tif (options.series.pie.radius == \"auto\") {\n\t\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\t\toptions.series.pie.radius = 3/4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.radius = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ensure sane tilt\n\n\t\t\t\tif (options.series.pie.tilt > 1) {\n\t\t\t\t\toptions.series.pie.tilt = 1;\n\t\t\t\t} else if (options.series.pie.tilt < 0) {\n\t\t\t\t\toptions.series.pie.tilt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.bindEvents.push(function(plot, eventHolder) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tif (options.grid.hoverable) {\n\t\t\t\t\teventHolder.unbind(\"mousemove\").mousemove(onMouseMove);\n\t\t\t\t}\n\t\t\t\tif (options.grid.clickable) {\n\t\t\t\t\teventHolder.unbind(\"click\").click(onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tprocessDatapoints(plot, series, data, datapoints);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.drawOverlay.push(function(plot, octx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdrawOverlay(plot, octx);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.draw.push(function(plot, newCtx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdraw(plot, newCtx);\n\t\t\t}\n\t\t});\n\n\t\tfunction processDatapoints(plot, series, datapoints) {\n\t\t\tif (!processed)\t{\n\t\t\t\tprocessed = true;\n\t\t\t\tcanvas = plot.getCanvas();\n\t\t\t\ttarget = $(canvas).parent();\n\t\t\t\toptions = plot.getOptions();\n\t\t\t\tplot.setData(combine(plot.getData()));\n\t\t\t}\n\t\t}\n\n\t\tfunction combine(data) {\n\n\t\t\tvar total = 0,\n\t\t\t\tcombined = 0,\n\t\t\t\tnumCombined = 0,\n\t\t\t\tcolor = options.series.pie.combine.color,\n\t\t\t\tnewdata = [];\n\n\t\t\t// Fix up the raw data from Flot, ensuring the data is numeric\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\n\t\t\t\tvar value = data[i].data;\n\n\t\t\t\t// If the data is an array, we'll assume that it's a standard\n\t\t\t\t// Flot x-y pair, and are concerned only with the second value.\n\n\t\t\t\t// Note how we use the original array, rather than creating a\n\t\t\t\t// new one; this is more efficient and preserves any extra data\n\t\t\t\t// that the user may have stored in higher indexes.\n\n\t\t\t\tif ($.isArray(value) && value.length == 1) {\n    \t\t\t\tvalue = value[0];\n\t\t\t\t}\n\n\t\t\t\tif ($.isArray(value)) {\n\t\t\t\t\t// Equivalent to $.isNumeric() but compatible with jQuery < 1.7\n\t\t\t\t\tif (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {\n\t\t\t\t\t\tvalue[1] = +value[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue[1] = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (!isNaN(parseFloat(value)) && isFinite(value)) {\n\t\t\t\t\tvalue = [1, +value];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = [1, 0];\n\t\t\t\t}\n\n\t\t\t\tdata[i].data = [value];\n\t\t\t}\n\n\t\t\t// Sum up all the slices, so we can calculate percentages for each\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\ttotal += data[i].data[0][1];\n\t\t\t}\n\n\t\t\t// Count the number of slices with percentages below the combine\n\t\t\t// threshold; if it turns out to be just one, we won't combine.\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (value / total <= options.series.pie.combine.threshold) {\n\t\t\t\t\tcombined += value;\n\t\t\t\t\tnumCombined++;\n\t\t\t\t\tif (!color) {\n\t\t\t\t\t\tcolor = data[i].color;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (numCombined < 2 || value / total > options.series.pie.combine.threshold) {\n\t\t\t\t\tnewdata.push(\n\t\t\t\t\t\t$.extend(data[i], {     /* extend to allow keeping all other original data values\n\t\t\t\t\t\t                           and using them e.g. in labelFormatter. */\n\t\t\t\t\t\t\tdata: [[1, value]],\n\t\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\t\tangle: value * Math.PI * 2 / total,\n\t\t\t\t\t\t\tpercent: value / (total / 100)\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (numCombined > 1) {\n\t\t\t\tnewdata.push({\n\t\t\t\t\tdata: [[1, combined]],\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tlabel: options.series.pie.combine.label,\n\t\t\t\t\tangle: combined * Math.PI * 2 / total,\n\t\t\t\t\tpercent: combined / (total / 100)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn newdata;\n\t\t}\n\n\t\tfunction draw(plot, newCtx) {\n\n\t\t\tif (!target) {\n\t\t\t\treturn; // if no series were passed\n\t\t\t}\n\n\t\t\tvar canvasWidth = plot.getPlaceholder().width(),\n\t\t\t\tcanvasHeight = plot.getPlaceholder().height(),\n\t\t\t\tlegendWidth = target.children().filter(\".legend\").children().width() || 0;\n\n\t\t\tctx = newCtx;\n\n\t\t\t// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!\n\n\t\t\t// When combining smaller slices into an 'other' slice, we need to\n\t\t\t// add a new series.  Since Flot gives plugins no way to modify the\n\t\t\t// list of series, the pie plugin uses a hack where the first call\n\t\t\t// to processDatapoints results in a call to setData with the new\n\t\t\t// list of series, then subsequent processDatapoints do nothing.\n\n\t\t\t// The plugin-global 'processed' flag is used to control this hack;\n\t\t\t// it starts out false, and is set to true after the first call to\n\t\t\t// processDatapoints.\n\n\t\t\t// Unfortunately this turns future setData calls into no-ops; they\n\t\t\t// call processDatapoints, the flag is true, and nothing happens.\n\n\t\t\t// To fix this we'll set the flag back to false here in draw, when\n\t\t\t// all series have been processed, so the next sequence of calls to\n\t\t\t// processDatapoints once again starts out with a slice-combine.\n\t\t\t// This is really a hack; in 0.9 we need to give plugins a proper\n\t\t\t// way to modify series before any processing begins.\n\n\t\t\tprocessed = false;\n\n\t\t\t// calculate maximum radius and center point\n\n\t\t\tmaxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;\n\t\t\tcenterTop = canvasHeight / 2 + options.series.pie.offset.top;\n\t\t\tcenterLeft = canvasWidth / 2;\n\n\t\t\tif (options.series.pie.offset.left == \"auto\") {\n\t\t\t\tif (options.legend.position.match(\"w\")) {\n\t\t\t\t\tcenterLeft += legendWidth / 2;\n\t\t\t\t} else {\n\t\t\t\t\tcenterLeft -= legendWidth / 2;\n\t\t\t\t}\n\t\t\t\tif (centerLeft < maxRadius) {\n\t\t\t\t\tcenterLeft = maxRadius;\n\t\t\t\t} else if (centerLeft > canvasWidth - maxRadius) {\n\t\t\t\t\tcenterLeft = canvasWidth - maxRadius;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcenterLeft += options.series.pie.offset.left;\n\t\t\t}\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\tattempts = 0;\n\n\t\t\t// Keep shrinking the pie's radius until drawPie returns true,\n\t\t\t// indicating that all the labels fit, or we try too many times.\n\n\t\t\tdo {\n\t\t\t\tif (attempts > 0) {\n\t\t\t\t\tmaxRadius *= REDRAW_SHRINK;\n\t\t\t\t}\n\t\t\t\tattempts += 1;\n\t\t\t\tclear();\n\t\t\t\tif (options.series.pie.tilt <= 0.8) {\n\t\t\t\t\tdrawShadow();\n\t\t\t\t}\n\t\t\t} while (!drawPie() && attempts < REDRAW_ATTEMPTS)\n\n\t\t\tif (attempts >= REDRAW_ATTEMPTS) {\n\t\t\t\tclear();\n\t\t\t\ttarget.prepend(\"<div class='error'>Could not draw pie with labels contained inside canvas</div>\");\n\t\t\t}\n\n\t\t\tif (plot.setSeries && plot.insertLegend) {\n\t\t\t\tplot.setSeries(slices);\n\t\t\t\tplot.insertLegend();\n\t\t\t}\n\n\t\t\t// we're actually done at this point, just defining internal functions at this point\n\n\t\t\tfunction clear() {\n\t\t\t\tctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\t\t\t\ttarget.children().filter(\".pieLabel, .pieLabelBackground\").remove();\n\t\t\t}\n\n\t\t\tfunction drawShadow() {\n\n\t\t\t\tvar shadowLeft = options.series.pie.shadow.left;\n\t\t\t\tvar shadowTop = options.series.pie.shadow.top;\n\t\t\t\tvar edge = 10;\n\t\t\t\tvar alpha = options.series.pie.shadow.alpha;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\tif (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {\n\t\t\t\t\treturn;\t// shadow would be outside canvas, so don't draw it\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(shadowLeft,shadowTop);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t\tctx.fillStyle = \"#000\";\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\n\t\t\t\t//radius -= edge;\n\n\t\t\t\tfor (var i = 1; i <= edge; i++) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, false);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tradius -= i;\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tfunction drawPie() {\n\n\t\t\t\tvar startAngle = Math.PI * options.series.pie.startAngle;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\t\t\t\t//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera\n\n\t\t\t\t// draw slices\n\n\t\t\t\tctx.save();\n\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\tslices[i].startAngle = currentAngle;\n\t\t\t\t\tdrawSlice(slices[i].angle, slices[i].color, true);\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw slice outlines\n\n\t\t\t\tif (options.series.pie.stroke.width > 0) {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.lineWidth = options.series.pie.stroke.width;\n\t\t\t\t\tcurrentAngle = startAngle;\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tdrawSlice(slices[i].angle, options.series.pie.stroke.color, false);\n\t\t\t\t\t}\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\n\t\t\t\t// draw donut hole\n\n\t\t\t\tdrawDonutHole(ctx);\n\n\t\t\t\tctx.restore();\n\n\t\t\t\t// Draw the labels, returning true if they fit within the plot\n\n\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\treturn drawLabels();\n\t\t\t\t} else return true;\n\n\t\t\t\tfunction drawSlice(angle, color, fill) {\n\n\t\t\t\t\tif (angle <= 0 || isNaN(angle)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fillStyle = color;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.strokeStyle = color;\n\t\t\t\t\t\tctx.lineJoin = \"round\";\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tif (Math.abs(angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t}\n\n\t\t\t\t\t//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\t//ctx.rotate(angle); // This doesn't work properly in Opera\n\t\t\t\t\tcurrentAngle += angle;\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawLabels() {\n\n\t\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\t\tvar radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;\n\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tif (slices[i].percent >= options.series.pie.label.threshold * 100) {\n\t\t\t\t\t\t\tif (!drawLabel(slices[i], currentAngle, i)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAngle += slices[i].angle;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\tfunction drawLabel(slice, startAngle, index) {\n\n\t\t\t\t\t\tif (slice.data[0][1] == 0) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// format label text\n\n\t\t\t\t\t\tvar lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;\n\n\t\t\t\t\t\tif (lf) {\n\t\t\t\t\t\t\ttext = lf(slice.label, slice);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttext = slice.label;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (plf) {\n\t\t\t\t\t\t\ttext = plf(text, slice);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar halfAngle = ((startAngle + slice.angle) + startAngle) / 2;\n\t\t\t\t\t\tvar x = centerLeft + Math.round(Math.cos(halfAngle) * radius);\n\t\t\t\t\t\tvar y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;\n\n\t\t\t\t\t\tvar html = \"<span class='pieLabel' id='pieLabel\" + index + \"' style='position:absolute;top:\" + y + \"px;left:\" + x + \"px;'>\" + text + \"</span>\";\n\t\t\t\t\t\ttarget.append(html);\n\n\t\t\t\t\t\tvar label = target.children(\"#pieLabel\" + index);\n\t\t\t\t\t\tvar labelTop = (y - label.height() / 2);\n\t\t\t\t\t\tvar labelLeft = (x - label.width() / 2);\n\n\t\t\t\t\t\tlabel.css(\"top\", labelTop);\n\t\t\t\t\t\tlabel.css(\"left\", labelLeft);\n\n\t\t\t\t\t\t// check to make sure that the label is not outside the canvas\n\n\t\t\t\t\t\tif (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.series.pie.label.background.opacity != 0) {\n\n\t\t\t\t\t\t\t// put in the transparent background separately to avoid blended labels and label boxes\n\n\t\t\t\t\t\t\tvar c = options.series.pie.label.background.color;\n\n\t\t\t\t\t\t\tif (c == null) {\n\t\t\t\t\t\t\t\tc = slice.color;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar pos = \"top:\" + labelTop + \"px;left:\" + labelLeft + \"px;\";\n\t\t\t\t\t\t\t$(\"<div class='pieLabelBackground' style='position:absolute;width:\" + label.width() + \"px;height:\" + label.height() + \"px;\" + pos + \"background-color:\" + c + \";'></div>\")\n\t\t\t\t\t\t\t\t.css(\"opacity\", options.series.pie.label.background.opacity)\n\t\t\t\t\t\t\t\t.insertBefore(label);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} // end individual label function\n\t\t\t\t} // end drawLabels function\n\t\t\t} // end drawPie function\n\t\t} // end draw function\n\n\t\t// Placed here because it needs to be accessed from multiple locations\n\n\t\tfunction drawDonutHole(layer) {\n\t\t\tif (options.series.pie.innerRadius > 0) {\n\n\t\t\t\t// subtract the center\n\n\t\t\t\tlayer.save();\n\t\t\t\tvar innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;\n\t\t\t\tlayer.globalCompositeOperation = \"destination-out\"; // this does not work with excanvas, but it will fall back to using the stroke color\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.fillStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.fill();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// add inner stroke\n\n\t\t\t\tlayer.save();\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.strokeStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.stroke();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.\n\t\t\t}\n\t\t}\n\n\t\t//-- Additional Interactive related functions --\n\n\t\tfunction isPointInPoly(poly, pt) {\n\t\t\tfor(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)\n\t\t\t\t((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))\n\t\t\t\t&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])\n\t\t\t\t&& (c = !c);\n\t\t\treturn c;\n\t\t}\n\n\t\tfunction findNearbySlice(mouseX, mouseY) {\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\toptions = plot.getOptions(),\n\t\t\t\tradius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,\n\t\t\t\tx, y;\n\n\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\n\t\t\t\tvar s = slices[i];\n\n\t\t\t\tif (s.pie.show) {\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t//ctx.scale(1, options.series.pie.tilt);\t// this actually seems to break everything when here.\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tx = mouseX - centerLeft;\n\t\t\t\t\ty = mouseY - centerTop;\n\n\t\t\t\t\tif (ctx.isPointInPath) {\n\t\t\t\t\t\tif (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// excanvas for IE doesn;t support isPointInPath, this is a workaround.\n\n\t\t\t\t\t\tvar p1X = radius * Math.cos(s.startAngle),\n\t\t\t\t\t\t\tp1Y = radius * Math.sin(s.startAngle),\n\t\t\t\t\t\t\tp2X = radius * Math.cos(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp2Y = radius * Math.sin(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp3X = radius * Math.cos(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp3Y = radius * Math.sin(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp4X = radius * Math.cos(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp5X = radius * Math.cos(s.startAngle + s.angle),\n\t\t\t\t\t\t\tp5Y = radius * Math.sin(s.startAngle + s.angle),\n\t\t\t\t\t\t\tarrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],\n\t\t\t\t\t\t\tarrPoint = [x, y];\n\n\t\t\t\t\t\t// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?\n\n\t\t\t\t\t\tif (isPointInPoly(arrPoly, arrPoint)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\ttriggerClickHoverEvent(\"plothover\", e);\n\t\t}\n\n\t\tfunction onClick(e) {\n\t\t\ttriggerClickHoverEvent(\"plotclick\", e);\n\t\t}\n\n\t\t// trigger click or hover event (they send the same parameters so we share their code)\n\n\t\tfunction triggerClickHoverEvent(eventname, e) {\n\n\t\t\tvar offset = plot.offset();\n\t\t\tvar canvasX = parseInt(e.pageX - offset.left);\n\t\t\tvar canvasY =  parseInt(e.pageY - offset.top);\n\t\t\tvar item = findNearbySlice(canvasX, canvasY);\n\n\t\t\tif (options.grid.autoHighlight) {\n\n\t\t\t\t// clear auto-highlights\n\n\t\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\t\tvar h = highlights[i];\n\t\t\t\t\tif (h.auto == eventname && !(item && h.series == item.series)) {\n\t\t\t\t\t\tunhighlight(h.series);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// highlight the slice\n\n\t\t\tif (item) {\n\t\t\t\thighlight(item.series, eventname);\n\t\t\t}\n\n\t\t\t// trigger any hover bind events\n\n\t\t\tvar pos = { pageX: e.pageX, pageY: e.pageY };\n\t\t\ttarget.trigger(eventname, [pos, item]);\n\t\t}\n\n\t\tfunction highlight(s, auto) {\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i == -1) {\n\t\t\t\thighlights.push({ series: s, auto: auto });\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t} else if (!auto) {\n\t\t\t\thighlights[i].auto = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction unhighlight(s) {\n\t\t\tif (s == null) {\n\t\t\t\thighlights = [];\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i != -1) {\n\t\t\t\thighlights.splice(i, 1);\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t}\n\n\t\tfunction indexOfHighlight(s) {\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tvar h = highlights[i];\n\t\t\t\tif (h.series == s)\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\tfunction drawOverlay(plot, octx) {\n\n\t\t\tvar options = plot.getOptions();\n\n\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\toctx.save();\n\t\t\toctx.translate(centerLeft, centerTop);\n\t\t\toctx.scale(1, options.series.pie.tilt);\n\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tdrawHighlight(highlights[i].series);\n\t\t\t}\n\n\t\t\tdrawDonutHole(octx);\n\n\t\t\toctx.restore();\n\n\t\t\tfunction drawHighlight(series) {\n\n\t\t\t\tif (series.angle <= 0 || isNaN(series.angle)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();\n\t\t\t\toctx.fillStyle = \"rgba(255, 255, 255, \" + options.series.pie.highlight.opacity + \")\"; // this is temporary until we have access to parseColor\n\t\t\t\toctx.beginPath();\n\t\t\t\tif (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\toctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t}\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);\n\t\t\t\toctx.closePath();\n\t\t\t\toctx.fill();\n\t\t\t}\n\t\t}\n\t} // end init (plugin body)\n\n\t// define pie specific options and their default values\n\n\tvar options = {\n\t\tseries: {\n\t\t\tpie: {\n\t\t\t\tshow: false,\n\t\t\t\tradius: \"auto\",\t// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\tinnerRadius: 0, /* for donut */\n\t\t\t\tstartAngle: 3/2,\n\t\t\t\ttilt: 1,\n\t\t\t\tshadow: {\n\t\t\t\t\tleft: 5,\t// shadow left offset\n\t\t\t\t\ttop: 15,\t// shadow top offset\n\t\t\t\t\talpha: 0.02\t// shadow alpha\n\t\t\t\t},\n\t\t\t\toffset: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: \"auto\"\n\t\t\t\t},\n\t\t\t\tstroke: {\n\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\twidth: 1\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tshow: \"auto\",\n\t\t\t\t\tformatter: function(label, slice) {\n\t\t\t\t\t\treturn \"<div style='font-size:x-small;text-align:center;padding:2px;color:\" + slice.color + \";'>\" + label + \"<br/>\" + Math.round(slice.percent) + \"%</div>\";\n\t\t\t\t\t},\t// formatter function\n\t\t\t\t\tradius: 1,\t// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\tthreshold: 0\t// percentage at which to hide the label (i.e. the slice is too narrow)\n\t\t\t\t},\n\t\t\t\tcombine: {\n\t\t\t\t\tthreshold: -1,\t// percentage at which to combine little slices into one larger slice\n\t\t\t\t\tcolor: null,\t// color to give the new slice (auto-generated if null)\n\t\t\t\t\tlabel: \"Other\"\t// label to give the new slice\n\t\t\t\t},\n\t\t\t\thighlight: {\n\t\t\t\t\t//color: \"#fff\",\t\t// will add this functionality once parseColor is available\n\t\t\t\t\topacity: 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"pie\",\n\t\tversion: \"1.1\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,e,t){\"$:nomunge\";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s=\"setTimeout\",u=\"resize\",m=u+\"-special-event\",o=\"pendingDelay\",l=\"activeDelay\",f=\"throttleWindow\";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(\":visible\")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            plot.getPlaceholder().resize(onResize);\n        }\n\n        function shutdown(plot, eventHolder) {\n            plot.getPlaceholder().unbind(\"resize\", onResize);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.selection.js",
    "content": "/* Flot plugin for selecting regions of a plot.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\nselection: {\n\tmode: null or \"x\" or \"y\" or \"xy\",\n\tcolor: color,\n\tshape: \"round\" or \"miter\" or \"bevel\",\n\tminSize: number of pixels\n}\n\nSelection support is enabled by setting the mode to one of \"x\", \"y\" or \"xy\".\nIn \"x\" mode, the user will only be able to specify the x range, similarly for\n\"y\" mode. For \"xy\", the selection becomes a rectangle where both ranges can be\nspecified. \"color\" is color of the selection (if you need to change the color\nlater on, you can get to it with plot.getOptions().selection.color). \"shape\"\nis the shape of the corners of the selection.\n\n\"minSize\" is the minimum size a selection can be in pixels. This value can\nbe customized to determine the smallest size a selection can be and still\nhave the selection rectangle be displayed. When customizing this value, the\nfact that it refers to pixels, not axis units must be taken into account.\nThus, for example, if there is a bar graph in time mode with BarWidth set to 1\nminute, setting \"minSize\" to 1 will not make the minimum selection size 1\nminute, but rather 1 pixel. Note also that setting \"minSize\" to 0 will prevent\n\"plotunselected\" events from being fired when the user clicks the mouse without\ndragging.\n\nWhen selection support is enabled, a \"plotselected\" event will be emitted on\nthe DOM element you passed into the plot function. The event handler gets a\nparameter with the ranges selected on the axes, like this:\n\n\tplaceholder.bind( \"plotselected\", function( event, ranges ) {\n\t\talert(\"You selected \" + ranges.xaxis.from + \" to \" + ranges.xaxis.to)\n\t\t// similar for yaxis - with multiple axes, the extra ones are in\n\t\t// x2axis, x3axis, ...\n\t});\n\nThe \"plotselected\" event is only fired when the user has finished making the\nselection. A \"plotselecting\" event is fired during the process with the same\nparameters as the \"plotselected\" event, in case you want to know what's\nhappening while it's happening,\n\nA \"plotunselected\" event with no arguments is emitted when the user clicks the\nmouse to remove the selection. As stated above, setting \"minSize\" to 0 will\ndestroy this behavior.\n\nThe plugin allso adds the following methods to the plot object:\n\n- setSelection( ranges, preventEvent )\n\n  Set the selection rectangle. The passed in ranges is on the same form as\n  returned in the \"plotselected\" event. If the selection mode is \"x\", you\n  should put in either an xaxis range, if the mode is \"y\" you need to put in\n  an yaxis range and both xaxis and yaxis if the selection mode is \"xy\", like\n  this:\n\n\tsetSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });\n\n  setSelection will trigger the \"plotselected\" event when called. If you don't\n  want that to happen, e.g. if you're inside a \"plotselected\" handler, pass\n  true as the second parameter. If you are using multiple axes, you can\n  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of\n  xaxis, the plugin picks the first one it sees.\n\n- clearSelection( preventEvent )\n\n  Clear the selection rectangle. Pass in true to avoid getting a\n  \"plotunselected\" event.\n\n- getSelection()\n\n  Returns the current selection in the same format as the \"plotselected\"\n  event. If there's currently no selection, the function returns null.\n\n*/\n\n(function ($) {\n    function init(plot) {\n        var selection = {\n                first: { x: -1, y: -1}, second: { x: -1, y: -1},\n                show: false,\n                active: false\n            };\n\n        // FIXME: The drag handling implemented here should be\n        // abstracted out, there's some similar code from a library in\n        // the navigation plugin, this should be massaged a bit to fit\n        // the Flot cases here better and reused. Doing this would\n        // make this plugin much slimmer.\n        var savedhandlers = {};\n\n        var mouseUpHandler = null;\n        \n        function onMouseMove(e) {\n            if (selection.active) {\n                updateSelection(e);\n                \n                plot.getPlaceholder().trigger(\"plotselecting\", [ getSelection() ]);\n            }\n        }\n\n        function onMouseDown(e) {\n            if (e.which != 1)  // only accept left-click\n                return;\n            \n            // cancel out any text selections\n            document.body.focus();\n\n            // prevent text selection and drag in old-school browsers\n            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {\n                savedhandlers.onselectstart = document.onselectstart;\n                document.onselectstart = function () { return false; };\n            }\n            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {\n                savedhandlers.ondrag = document.ondrag;\n                document.ondrag = function () { return false; };\n            }\n\n            setSelectionPos(selection.first, e);\n\n            selection.active = true;\n\n            // this is a bit silly, but we have to use a closure to be\n            // able to whack the same handler again\n            mouseUpHandler = function (e) { onMouseUp(e); };\n            \n            $(document).one(\"mouseup\", mouseUpHandler);\n        }\n\n        function onMouseUp(e) {\n            mouseUpHandler = null;\n            \n            // revert drag stuff for old-school browsers\n            if (document.onselectstart !== undefined)\n                document.onselectstart = savedhandlers.onselectstart;\n            if (document.ondrag !== undefined)\n                document.ondrag = savedhandlers.ondrag;\n\n            // no more dragging\n            selection.active = false;\n            updateSelection(e);\n\n            if (selectionIsSane())\n                triggerSelectedEvent();\n            else {\n                // this counts as a clear\n                plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n                plot.getPlaceholder().trigger(\"plotselecting\", [ null ]);\n            }\n\n            return false;\n        }\n\n        function getSelection() {\n            if (!selectionIsSane())\n                return null;\n            \n            if (!selection.show) return null;\n\n            var r = {}, c1 = selection.first, c2 = selection.second;\n            $.each(plot.getAxes(), function (name, axis) {\n                if (axis.used) {\n                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); \n                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };\n                }\n            });\n            return r;\n        }\n\n        function triggerSelectedEvent() {\n            var r = getSelection();\n\n            plot.getPlaceholder().trigger(\"plotselected\", [ r ]);\n\n            // backwards-compat stuff, to be removed in future\n            if (r.xaxis && r.yaxis)\n                plot.getPlaceholder().trigger(\"selected\", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);\n        }\n\n        function clamp(min, value, max) {\n            return value < min ? min: (value > max ? max: value);\n        }\n\n        function setSelectionPos(pos, e) {\n            var o = plot.getOptions();\n            var offset = plot.getPlaceholder().offset();\n            var plotOffset = plot.getPlotOffset();\n            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());\n            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());\n\n            if (o.selection.mode == \"y\")\n                pos.x = pos == selection.first ? 0 : plot.width();\n\n            if (o.selection.mode == \"x\")\n                pos.y = pos == selection.first ? 0 : plot.height();\n        }\n\n        function updateSelection(pos) {\n            if (pos.pageX == null)\n                return;\n\n            setSelectionPos(selection.second, pos);\n            if (selectionIsSane()) {\n                selection.show = true;\n                plot.triggerRedrawOverlay();\n            }\n            else\n                clearSelection(true);\n        }\n\n        function clearSelection(preventEvent) {\n            if (selection.show) {\n                selection.show = false;\n                plot.triggerRedrawOverlay();\n                if (!preventEvent)\n                    plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n            }\n        }\n\n        // function taken from markings support in Flot\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = plot.getAxes();\n\n            for (var k in axes) {\n                axis = axes[k];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? plot.getXAxes()[0] : plot.getYAxes()[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n            \n            return { from: from, to: to, axis: axis };\n        }\n        \n        function setSelection(ranges, preventEvent) {\n            var axis, range, o = plot.getOptions();\n\n            if (o.selection.mode == \"y\") {\n                selection.first.x = 0;\n                selection.second.x = plot.width();\n            }\n            else {\n                range = extractRange(ranges, \"x\");\n\n                selection.first.x = range.axis.p2c(range.from);\n                selection.second.x = range.axis.p2c(range.to);\n            }\n\n            if (o.selection.mode == \"x\") {\n                selection.first.y = 0;\n                selection.second.y = plot.height();\n            }\n            else {\n                range = extractRange(ranges, \"y\");\n\n                selection.first.y = range.axis.p2c(range.from);\n                selection.second.y = range.axis.p2c(range.to);\n            }\n\n            selection.show = true;\n            plot.triggerRedrawOverlay();\n            if (!preventEvent && selectionIsSane())\n                triggerSelectedEvent();\n        }\n\n        function selectionIsSane() {\n            var minSize = plot.getOptions().selection.minSize;\n            return Math.abs(selection.second.x - selection.first.x) >= minSize &&\n                Math.abs(selection.second.y - selection.first.y) >= minSize;\n        }\n\n        plot.clearSelection = clearSelection;\n        plot.setSelection = setSelection;\n        plot.getSelection = getSelection;\n\n        plot.hooks.bindEvents.push(function(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.selection.mode != null) {\n                eventHolder.mousemove(onMouseMove);\n                eventHolder.mousedown(onMouseDown);\n            }\n        });\n\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            // draw selection\n            if (selection.show && selectionIsSane()) {\n                var plotOffset = plot.getPlotOffset();\n                var o = plot.getOptions();\n\n                ctx.save();\n                ctx.translate(plotOffset.left, plotOffset.top);\n\n                var c = $.color.parse(o.selection.color);\n\n                ctx.strokeStyle = c.scale('a', 0.8).toString();\n                ctx.lineWidth = 1;\n                ctx.lineJoin = o.selection.shape;\n                ctx.fillStyle = c.scale('a', 0.4).toString();\n\n                var x = Math.min(selection.first.x, selection.second.x) + 0.5,\n                    y = Math.min(selection.first.y, selection.second.y) + 0.5,\n                    w = Math.abs(selection.second.x - selection.first.x) - 1,\n                    h = Math.abs(selection.second.y - selection.first.y) - 1;\n\n                ctx.fillRect(x, y, w, h);\n                ctx.strokeRect(x, y, w, h);\n\n                ctx.restore();\n            }\n        });\n        \n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mousedown\", onMouseDown);\n            \n            if (mouseUpHandler)\n                $(document).unbind(\"mouseup\", mouseUpHandler);\n        });\n\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        options: {\n            selection: {\n                mode: null, // one of null, \"x\", \"y\" or \"xy\"\n                color: \"#e8cfac\",\n                shape: \"round\", // one of \"round\", \"miter\", or \"bevel\"\n                minSize: 5 // minimum number of pixels\n            }\n        },\n        name: 'selection',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.stack.js",
    "content": "/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes the data is sorted on x (or y if stacking horizontally).\nFor line charts, it is assumed that if a line has an undefined gap (from a\nnull point), then the line above it should have the same gap - insert zeros\ninstead of \"null\" if you want another behaviour. This also holds for the start\nand end of the chart. Note that stacking a mix of positive and negative values\nin most instances doesn't make sense (so it looks weird).\n\nTwo or more series are stacked when their \"stack\" attribute is set to the same\nkey (which can be any number or string or just \"true\"). To specify the default\nstack, you can set the stack option like this:\n\n\tseries: {\n\t\tstack: null/false, true, or a key (number/string)\n\t}\n\nYou can also specify it for a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tstack: true\n\t}])\n\nThe stacking order is determined by the order of the data series in the array\n(later series end up on top of the previous).\n\nInternally, the plugin modifies the datapoints in each series, adding an\noffset to the y value. For line series, extra data points are inserted through\ninterpolation. If there's a second y value, it's also adjusted (e.g for bar\ncharts or filled areas).\n\n*/\n\n(function ($) {\n    var options = {\n        series: { stack: null } // or number/string\n    };\n    \n    function init(plot) {\n        function findMatchingSeries(s, allseries) {\n            var res = null;\n            for (var i = 0; i < allseries.length; ++i) {\n                if (s == allseries[i])\n                    break;\n                \n                if (allseries[i].stack == s.stack)\n                    res = allseries[i];\n            }\n            \n            return res;\n        }\n        \n        function stackData(plot, s, datapoints) {\n            if (s.stack == null || s.stack === false)\n                return;\n\n            var other = findMatchingSeries(s, plot.getData());\n            if (!other)\n                return;\n\n            var ps = datapoints.pointsize,\n                points = datapoints.points,\n                otherps = other.datapoints.pointsize,\n                otherpoints = other.datapoints.points,\n                newpoints = [],\n                px, py, intery, qx, qy, bottom,\n                withlines = s.lines.show,\n                horizontal = s.bars.horizontal,\n                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),\n                withsteps = withlines && s.lines.steps,\n                fromgap = true,\n                keyOffset = horizontal ? 1 : 0,\n                accumulateOffset = horizontal ? 0 : 1,\n                i = 0, j = 0, l, m;\n\n            while (true) {\n                if (i >= points.length)\n                    break;\n\n                l = newpoints.length;\n\n                if (points[i] == null) {\n                    // copy gaps\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(points[i + m]);\n                    i += ps;\n                }\n                else if (j >= otherpoints.length) {\n                    // for lines, we can't use the rest of the points\n                    if (!withlines) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                    }\n                    i += ps;\n                }\n                else if (otherpoints[j] == null) {\n                    // oops, got a gap\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(null);\n                    fromgap = true;\n                    j += otherps;\n                }\n                else {\n                    // cases where we actually got two points\n                    px = points[i + keyOffset];\n                    py = points[i + accumulateOffset];\n                    qx = otherpoints[j + keyOffset];\n                    qy = otherpoints[j + accumulateOffset];\n                    bottom = 0;\n\n                    if (px == qx) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n\n                        newpoints[l + accumulateOffset] += qy;\n                        bottom = qy;\n                        \n                        i += ps;\n                        j += otherps;\n                    }\n                    else if (px > qx) {\n                        // we got past point below, might need to\n                        // insert interpolated extra point\n                        if (withlines && i > 0 && points[i - ps] != null) {\n                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);\n                            newpoints.push(qx);\n                            newpoints.push(intery + qy);\n                            for (m = 2; m < ps; ++m)\n                                newpoints.push(points[i + m]);\n                            bottom = qy; \n                        }\n\n                        j += otherps;\n                    }\n                    else { // px < qx\n                        if (fromgap && withlines) {\n                            // if we come from a gap, we just skip this point\n                            i += ps;\n                            continue;\n                        }\n                            \n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                        \n                        // we might be able to interpolate a point below,\n                        // this can give us a better y\n                        if (withlines && j > 0 && otherpoints[j - otherps] != null)\n                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);\n\n                        newpoints[l + accumulateOffset] += bottom;\n                        \n                        i += ps;\n                    }\n\n                    fromgap = false;\n                    \n                    if (l != newpoints.length && withbottom)\n                        newpoints[l + 2] += bottom;\n                }\n\n                // maintain the line steps invariant\n                if (withsteps && l != newpoints.length && l > 0\n                    && newpoints[l] != null\n                    && newpoints[l] != newpoints[l - ps]\n                    && newpoints[l + 1] != newpoints[l - ps + 1]) {\n                    for (m = 0; m < ps; ++m)\n                        newpoints[l + ps + m] = newpoints[l + m];\n                    newpoints[l + 1] = newpoints[l - ps + 1];\n                }\n            }\n\n            datapoints.points = newpoints;\n        }\n        \n        plot.hooks.processDatapoints.push(stackData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'stack',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/flot-chart/jquery.flot.time.js",
    "content": "/* Pretty handling of time axes.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate()); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones.  This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n\t\t};\n\n\t\tvar utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n\t};\n\n\t// select time zone strategy.  This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\t\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"], \n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"], \n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object.  Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\t$.plot.dateGenerator = dateGenerator;\n\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/footable/css/footable.core.css",
    "content": "@font-face {\n  font-family: 'footable';\n  src: url('fonts/footable.eot');\n  src: url('fonts/footable.eot?#iefix') format('embedded-opentype'), url('fonts/footable.woff') format('woff'), url('fonts/footable.ttf') format('truetype'), url('fonts/footable.svg#footable') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  @font-face {\n    font-family: 'footable';\n    src: url('fonts/footable.svg#footable') format('svg');\n    font-weight: normal;\n    font-style: normal;\n  }\n}\n.footable {\n  width: 100%;\n  /** SORTING **/\n\n  /** PAGINATION **/\n\n}\n.footable.breakpoint > tbody > tr.footable-detail-show > td {\n  border-bottom: none;\n}\n.footable.breakpoint > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e001\";\n}\n.footable.breakpoint > tbody > tr:hover:not(.footable-row-detail) {\n  cursor: pointer;\n}\n.footable.breakpoint > tbody > tr > td.footable-cell-detail {\n  background: #eee;\n  border-top: none;\n}\n.footable.breakpoint > tbody > tr > td > span.footable-toggle {\n  display: inline-block;\n  font-family: 'footable';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  -webkit-font-smoothing: antialiased;\n  padding-right: 10px;\n  color: #777;\n}\n.footable.breakpoint > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e000\";\n}\n.footable.breakpoint.toggle-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e005\";\n}\n.footable.breakpoint.toggle-circle > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e004\";\n}\n.footable.breakpoint.toggle-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e003\";\n}\n.footable.breakpoint.toggle-circle-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e002\";\n}\n.footable.breakpoint.toggle-square > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e007\";\n}\n.footable.breakpoint.toggle-square > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e006\";\n}\n.footable.breakpoint.toggle-square-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e009\";\n}\n.footable.breakpoint.toggle-square-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e008\";\n}\n.footable.breakpoint.toggle-arrow > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e00f\";\n}\n.footable.breakpoint.toggle-arrow > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e011\";\n}\n.footable.breakpoint.toggle-arrow-small > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e013\";\n}\n.footable.breakpoint.toggle-arrow-small > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e015\";\n}\n.footable.breakpoint.toggle-arrow-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e01b\";\n}\n.footable.breakpoint.toggle-arrow-circle > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e01d\";\n}\n.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e00b\";\n}\n.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e00d\";\n}\n.footable.breakpoint.toggle-arrow-tiny > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e01f\";\n}\n.footable.breakpoint.toggle-arrow-tiny > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e021\";\n}\n.footable.breakpoint.toggle-arrow-alt > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e017\";\n}\n.footable.breakpoint.toggle-arrow-alt > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e019\";\n}\n.footable.breakpoint.toggle-medium > tbody > tr > td > span.footable-toggle {\n  font-size: 18px;\n}\n.footable.breakpoint.toggle-large > tbody > tr > td > span.footable-toggle {\n  font-size: 24px;\n}\n.footable > thead > tr > th {\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.footable > thead > tr > th.footable-sortable:hover {\n  cursor: pointer;\n}\n.footable > thead > tr > th.footable-sorted > span.footable-sort-indicator:before {\n  content: \"\\e013\";\n}\n.footable > thead > tr > th.footable-sorted-desc > span.footable-sort-indicator:before {\n  content: \"\\e012\";\n}\n.footable > thead > tr > th > span.footable-sort-indicator {\n  display: inline-block;\n  font-family: 'footable';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  -webkit-font-smoothing: antialiased;\n  padding-left: 5px;\n}\n.footable > thead > tr > th > span.footable-sort-indicator:before {\n  content: \"\\e022\";\n}\n.footable > tfoot .pagination {\n  margin: 0;\n}\n.footable.no-paging .hide-if-no-paging {\n  display: none;\n}\n.footable-row-detail{\n  background-color:#f5f5f5\n}\n.footable-row-detail-inner {\n  display: table;  \n}\n.footable-row-detail-row {\n  display: table-row;\n  line-height: 1.5em;\n}\n.footable-row-detail-group {\n  display: block;\n  line-height: 2em;\n  font-size: 1.2em;\n  font-weight: bold;\n}\n.footable-row-detail-name {\n  display: table-cell;\n  font-weight: 500;\n  padding-right: 1em;\n  padding-bottom: 5px;\n}\n.footable-row-detail-value {\n  display: table-cell;\n}\n.footable-odd {\n  background-color: #f7f7f7;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/get-size/get-size.js",
    "content": "/*!\n * getSize v1.2.2\n * measure size of elements\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n/*global define: false, exports: false, require: false, module: false, console: false */\n\n( function( window, undefined ) {\n\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') === -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console === 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0, len = measurements.length; i < len; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n\n\nfunction defineGetSize( getStyleProperty ) {\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar getStyle, boxSizingProp, isBoxSizeOuter;\n\n/**\n * setup vars and functions\n * do it on initial getSize(), rather than on script load\n * For Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  var getComputedStyle = window.getComputedStyle;\n  getStyle = ( function() {\n    var getStyleFn = getComputedStyle ?\n      function( elem ) {\n        return getComputedStyle( elem, null );\n      } :\n      function( elem ) {\n        return elem.currentStyle;\n      };\n\n      return function getStyle( elem ) {\n        var style = getStyleFn( elem );\n        if ( !style ) {\n          logError( 'Style returned ' + style +\n            '. Are you running this code in a hidden iframe on Firefox? ' +\n            'See http://bit.ly/getsizebug1' );\n        }\n        return style;\n      };\n  })();\n\n  // -------------------------- box sizing -------------------------- //\n\n  boxSizingProp = getStyleProperty('boxSizing');\n\n  /**\n   * WebKit measures the outer-width on style.width on border-box elems\n   * IE & Firefox measures the inner-width\n   */\n  if ( boxSizingProp ) {\n    var div = document.createElement('div');\n    div.style.width = '200px';\n    div.style.padding = '1px 2px 3px 4px';\n    div.style.borderStyle = 'solid';\n    div.style.borderWidth = '1px 2px 3px 4px';\n    div.style[ boxSizingProp ] = 'border-box';\n\n    var body = document.body || document.documentElement;\n    body.appendChild( div );\n    var style = getStyle( div );\n\n    isBoxSizeOuter = getStyleSize( style.width ) === 200;\n    body.removeChild( div );\n  }\n\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem === 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem !== 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display === 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = !!( boxSizingProp &&\n    style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' );\n\n  // get all measurements\n  for ( var i=0, len = measurements.length; i < len; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    value = mungeNonPixel( elem, value );\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\n// IE8 returns percent values, not pixels\n// taken from jQuery's curCSS\nfunction mungeNonPixel( elem, value ) {\n  // IE8 and has percent value\n  if ( window.getComputedStyle || value.indexOf('%') === -1 ) {\n    return value;\n  }\n  var style = elem.style;\n  // Remember the original values\n  var left = style.left;\n  var rs = elem.runtimeStyle;\n  var rsLeft = rs && rs.left;\n\n  // Put in the new values to get a computed value out\n  if ( rsLeft ) {\n    rs.left = elem.currentStyle.left;\n  }\n  style.left = value;\n  value = style.pixelLeft;\n\n  // Revert the changed values\n  style.left = left;\n  if ( rsLeft ) {\n    rs.left = rsLeft;\n  }\n\n  return value;\n}\n\nreturn getSize;\n\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD for RequireJS\n  define( [ 'get-style-property/get-style-property' ], defineGetSize );\n} else if ( typeof exports === 'object' ) {\n  // CommonJS for Component\n  module.exports = defineGetSize( require('desandro-get-style-property') );\n} else {\n  // browser global\n  window.getSize = defineGetSize( window.getStyleProperty );\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/get-style-property/get-style-property.js",
    "content": "/*!\n * getStyleProperty v1.0.4\n * original by kangax\n * http://perfectionkills.com/feature-testing-css-properties/\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true */\n/*global define: false, exports: false, module: false */\n\n( function( window ) {\n\n'use strict';\n\nvar prefixes = 'Webkit Moz ms Ms O'.split(' ');\nvar docElemStyle = document.documentElement.style;\n\nfunction getStyleProperty( propName ) {\n  if ( !propName ) {\n    return;\n  }\n\n  // test standard property first\n  if ( typeof docElemStyle[ propName ] === 'string' ) {\n    return propName;\n  }\n\n  // capitalize\n  propName = propName.charAt(0).toUpperCase() + propName.slice(1);\n\n  // test vendor specific properties\n  var prefixed;\n  for ( var i=0, len = prefixes.length; i < len; i++ ) {\n    prefixed = prefixes[i] + propName;\n    if ( typeof docElemStyle[ prefixed ] === 'string' ) {\n      return prefixed;\n    }\n  }\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( function() {\n    return getStyleProperty;\n  });\n} else if ( typeof exports === 'object' ) {\n  // CommonJS for Component\n  module.exports = getStyleProperty;\n} else {\n  // browser global\n  window.getStyleProperty = getStyleProperty;\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/gmaps.js",
    "content": "\"use strict\";\n(function(root, factory) {\n  if(typeof exports === 'object') {\n    module.exports = factory();\n  }\n  else if(typeof define === 'function' && define.amd) {\n    define('GMaps', [], factory);\n  }\n\n  root.GMaps = factory();\n\n}(this, function() {\n\n/*!\n * GMaps.js v0.4.18\n * http://hpneo.github.com/gmaps/\n *\n * Copyright 2015, Gustavo Leon\n * Released under the MIT License.\n */\n\nif (!(typeof window.google === 'object' && window.google.maps)) {\n  throw 'Google Maps API is required. Please register the following JavaScript library http://maps.google.com/maps/api/js?sensor=true.'\n}\n\nvar extend_object = function(obj, new_obj) {\n  var name;\n\n  if (obj === new_obj) {\n    return obj;\n  }\n\n  for (name in new_obj) {\n    obj[name] = new_obj[name];\n  }\n\n  return obj;\n};\n\nvar replace_object = function(obj, replace) {\n  var name;\n\n  if (obj === replace) {\n    return obj;\n  }\n\n  for (name in replace) {\n    if (obj[name] != undefined) {\n      obj[name] = replace[name];\n    }\n  }\n\n  return obj;\n};\n\nvar array_map = function(array, callback) {\n  var original_callback_params = Array.prototype.slice.call(arguments, 2),\n      array_return = [],\n      array_length = array.length,\n      i;\n\n  if (Array.prototype.map && array.map === Array.prototype.map) {\n    array_return = Array.prototype.map.call(array, function(item) {\n      var callback_params = original_callback_params.slice(0);\n      callback_params.splice(0, 0, item);\n\n      return callback.apply(this, callback_params);\n    });\n  }\n  else {\n    for (i = 0; i < array_length; i++) {\n      callback_params = original_callback_params;\n      callback_params.splice(0, 0, array[i]);\n      array_return.push(callback.apply(this, callback_params));\n    }\n  }\n\n  return array_return;\n};\n\nvar array_flat = function(array) {\n  var new_array = [],\n      i;\n\n  for (i = 0; i < array.length; i++) {\n    new_array = new_array.concat(array[i]);\n  }\n\n  return new_array;\n};\n\nvar coordsToLatLngs = function(coords, useGeoJSON) {\n  var first_coord = coords[0],\n      second_coord = coords[1];\n\n  if (useGeoJSON) {\n    first_coord = coords[1];\n    second_coord = coords[0];\n  }\n\n  return new google.maps.LatLng(first_coord, second_coord);\n};\n\nvar arrayToLatLng = function(coords, useGeoJSON) {\n  var i;\n\n  for (i = 0; i < coords.length; i++) {\n    if (!(coords[i] instanceof google.maps.LatLng)) {\n      if (coords[i].length > 0 && typeof(coords[i][0]) === \"object\") {\n        coords[i] = arrayToLatLng(coords[i], useGeoJSON);\n      }\n      else {\n        coords[i] = coordsToLatLngs(coords[i], useGeoJSON);\n      }\n    }\n  }\n\n  return coords;\n};\n\n\nvar getElementsByClassName = function (class_name, context) {\n\n    var element,\n        _class = class_name.replace('.', '');\n\n    if ('jQuery' in this && context) {\n        element = $(\".\" + _class, context)[0];\n    } else {\n        element = document.getElementsByClassName(_class)[0];\n    }\n    return element;\n\n};\n\nvar getElementById = function(id, context) {\n  var element,\n  id = id.replace('#', '');\n\n  if ('jQuery' in window && context) {\n    element = $('#' + id, context)[0];\n  } else {\n    element = document.getElementById(id);\n  };\n\n  return element;\n};\n\nvar findAbsolutePosition = function(obj)  {\n  var curleft = 0,\n      curtop = 0;\n\n  if (obj.offsetParent) {\n    do {\n      curleft += obj.offsetLeft;\n      curtop += obj.offsetTop;\n    } while (obj = obj.offsetParent);\n  }\n\n  return [curleft, curtop];\n};\n\nvar GMaps = (function(global) {\n  \"use strict\";\n\n  var doc = document;\n\n  var GMaps = function(options) {\n    if (!this) return new GMaps(options);\n\n    options.zoom = options.zoom || 15;\n    options.mapType = options.mapType || 'roadmap';\n\n    var self = this,\n        i,\n        events_that_hide_context_menu = [\n          'bounds_changed', 'center_changed', 'click', 'dblclick', 'drag',\n          'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed',\n          'resize', 'tilesloaded', 'zoom_changed'\n        ],\n        events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover'],\n        options_to_be_deleted = ['el', 'lat', 'lng', 'mapType', 'width', 'height', 'markerClusterer', 'enableNewStyle'],\n        identifier = options.el || options.div,\n        markerClustererFunction = options.markerClusterer,\n        mapType = google.maps.MapTypeId[options.mapType.toUpperCase()],\n        map_center = new google.maps.LatLng(options.lat, options.lng),\n        zoomControl = options.zoomControl || true,\n        zoomControlOpt = options.zoomControlOpt || {\n          style: 'DEFAULT',\n          position: 'TOP_LEFT'\n        },\n        zoomControlStyle = zoomControlOpt.style || 'DEFAULT',\n        zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT',\n        panControl = options.panControl || true,\n        mapTypeControl = options.mapTypeControl || true,\n        scaleControl = options.scaleControl || true,\n        streetViewControl = options.streetViewControl || true,\n        overviewMapControl = overviewMapControl || true,\n        map_options = {},\n        map_base_options = {\n          zoom: this.zoom,\n          center: map_center,\n          mapTypeId: mapType\n        },\n        map_controls_options = {\n          panControl: panControl,\n          zoomControl: zoomControl,\n          zoomControlOptions: {\n            style: google.maps.ZoomControlStyle[zoomControlStyle],\n            position: google.maps.ControlPosition[zoomControlPosition]\n          },\n          mapTypeControl: mapTypeControl,\n          scaleControl: scaleControl,\n          streetViewControl: streetViewControl,\n          overviewMapControl: overviewMapControl\n        };\n\n      if (typeof(options.el) === 'string' || typeof(options.div) === 'string') {\n\n          if (identifier.indexOf(\"#\") > -1) {\n              this.el = getElementById(identifier, options.context);\n          } else {\n              this.el = getElementsByClassName.apply(this, [identifier, options.context]);\n          }\n\n      } else {\n          this.el = identifier;\n      }\n\n    if (typeof(this.el) === 'undefined' || this.el === null) {\n      throw 'No element defined.';\n    }\n\n    window.context_menu = window.context_menu || {};\n    window.context_menu[self.el.id] = {};\n\n    this.controls = [];\n    this.overlays = [];\n    this.layers = []; // array with kml/georss and fusiontables layers, can be as many\n    this.singleLayers = {}; // object with the other layers, only one per layer\n    this.markers = [];\n    this.polylines = [];\n    this.routes = [];\n    this.polygons = [];\n    this.infoWindow = null;\n    this.overlay_el = null;\n    this.zoom = options.zoom;\n    this.registered_events = {};\n\n    this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth;\n    this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight;\n\n    google.maps.visualRefresh = options.enableNewStyle;\n\n    for (i = 0; i < options_to_be_deleted.length; i++) {\n      delete options[options_to_be_deleted[i]];\n    }\n\n    if(options.disableDefaultUI != true) {\n      map_base_options = extend_object(map_base_options, map_controls_options);\n    }\n\n    map_options = extend_object(map_base_options, options);\n\n    for (i = 0; i < events_that_hide_context_menu.length; i++) {\n      delete map_options[events_that_hide_context_menu[i]];\n    }\n\n    for (i = 0; i < events_that_doesnt_hide_context_menu.length; i++) {\n      delete map_options[events_that_doesnt_hide_context_menu[i]];\n    }\n\n    this.map = new google.maps.Map(this.el, map_options);\n\n    if (markerClustererFunction) {\n      this.markerClusterer = markerClustererFunction.apply(this, [this.map]);\n    }\n\n    var buildContextMenuHTML = function(control, e) {\n      var html = '',\n          options = window.context_menu[self.el.id][control];\n\n      for (var i in options){\n        if (options.hasOwnProperty(i)) {\n          var option = options[i];\n\n          html += '<li><a id=\"' + control + '_' + i + '\" href=\"#\">' + option.title + '</a></li>';\n        }\n      }\n\n      if (!getElementById('gmaps_context_menu')) return;\n\n      var context_menu_element = getElementById('gmaps_context_menu');\n      \n      context_menu_element.innerHTML = html;\n\n      var context_menu_items = context_menu_element.getElementsByTagName('a'),\n          context_menu_items_count = context_menu_items.length,\n          i;\n\n      for (i = 0; i < context_menu_items_count; i++) {\n        var context_menu_item = context_menu_items[i];\n\n        var assign_menu_item_action = function(ev){\n          ev.preventDefault();\n\n          options[this.id.replace(control + '_', '')].action.apply(self, [e]);\n          self.hideContextMenu();\n        };\n\n        google.maps.event.clearListeners(context_menu_item, 'click');\n        google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false);\n      }\n\n      var position = findAbsolutePosition.apply(this, [self.el]),\n          left = position[0] + e.pixel.x - 15,\n          top = position[1] + e.pixel.y- 15;\n\n      context_menu_element.style.left = left + \"px\";\n      context_menu_element.style.top = top + \"px\";\n\n      context_menu_element.style.display = 'block';\n    };\n\n    this.buildContextMenu = function(control, e) {\n      if (control === 'marker') {\n        e.pixel = {};\n\n        var overlay = new google.maps.OverlayView();\n        overlay.setMap(self.map);\n        \n        overlay.draw = function() {\n          var projection = overlay.getProjection(),\n              position = e.marker.getPosition();\n          \n          e.pixel = projection.fromLatLngToContainerPixel(position);\n\n          buildContextMenuHTML(control, e);\n        };\n      }\n      else {\n        buildContextMenuHTML(control, e);\n      }\n    };\n\n    this.setContextMenu = function(options) {\n      window.context_menu[self.el.id][options.control] = {};\n\n      var i,\n          ul = doc.createElement('ul');\n\n      for (i in options.options) {\n        if (options.options.hasOwnProperty(i)) {\n          var option = options.options[i];\n\n          window.context_menu[self.el.id][options.control][option.name] = {\n            title: option.title,\n            action: option.action\n          };\n        }\n      }\n\n      ul.id = 'gmaps_context_menu';\n      ul.style.display = 'none';\n      ul.style.position = 'absolute';\n      ul.style.minWidth = '100px';\n      ul.style.background = 'white';\n      ul.style.listStyle = 'none';\n      ul.style.padding = '8px';\n      ul.style.boxShadow = '2px 2px 6px #ccc';\n\n      doc.body.appendChild(ul);\n\n      var context_menu_element = getElementById('gmaps_context_menu')\n\n      google.maps.event.addDomListener(context_menu_element, 'mouseout', function(ev) {\n        if (!ev.relatedTarget || !this.contains(ev.relatedTarget)) {\n          window.setTimeout(function(){\n            context_menu_element.style.display = 'none';\n          }, 400);\n        }\n      }, false);\n    };\n\n    this.hideContextMenu = function() {\n      var context_menu_element = getElementById('gmaps_context_menu');\n\n      if (context_menu_element) {\n        context_menu_element.style.display = 'none';\n      }\n    };\n\n    var setupListener = function(object, name) {\n      google.maps.event.addListener(object, name, function(e){\n        if (e == undefined) {\n          e = this;\n        }\n\n        options[name].apply(this, [e]);\n\n        self.hideContextMenu();\n      });\n    };\n\n    //google.maps.event.addListener(this.map, 'idle', this.hideContextMenu);\n    google.maps.event.addListener(this.map, 'zoom_changed', this.hideContextMenu);\n\n    for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) {\n      var name = events_that_hide_context_menu[ev];\n\n      if (name in options) {\n        setupListener(this.map, name);\n      }\n    }\n\n    for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) {\n      var name = events_that_doesnt_hide_context_menu[ev];\n\n      if (name in options) {\n        setupListener(this.map, name);\n      }\n    }\n\n    google.maps.event.addListener(this.map, 'rightclick', function(e) {\n      if (options.rightclick) {\n        options.rightclick.apply(this, [e]);\n      }\n\n      if(window.context_menu[self.el.id]['map'] != undefined) {\n        self.buildContextMenu('map', e);\n      }\n    });\n\n    this.refresh = function() {\n      google.maps.event.trigger(this.map, 'resize');\n    };\n\n    this.fitZoom = function() {\n      var latLngs = [],\n          markers_length = this.markers.length,\n          i;\n\n      for (i = 0; i < markers_length; i++) {\n        if(typeof(this.markers[i].visible) === 'boolean' && this.markers[i].visible) {\n          latLngs.push(this.markers[i].getPosition());\n        }\n      }\n\n      this.fitLatLngBounds(latLngs);\n    };\n\n    this.fitLatLngBounds = function(latLngs) {\n      var total = latLngs.length,\n          bounds = new google.maps.LatLngBounds(),\n          i;\n\n      for(i = 0; i < total; i++) {\n        bounds.extend(latLngs[i]);\n      }\n\n      this.map.fitBounds(bounds);\n    };\n\n    this.setCenter = function(lat, lng, callback) {\n      this.map.panTo(new google.maps.LatLng(lat, lng));\n\n      if (callback) {\n        callback();\n      }\n    };\n\n    this.getElement = function() {\n      return this.el;\n    };\n\n    this.zoomIn = function(value) {\n      value = value || 1;\n\n      this.zoom = this.map.getZoom() + value;\n      this.map.setZoom(this.zoom);\n    };\n\n    this.zoomOut = function(value) {\n      value = value || 1;\n\n      this.zoom = this.map.getZoom() - value;\n      this.map.setZoom(this.zoom);\n    };\n\n    var native_methods = [],\n        method;\n\n    for (method in this.map) {\n      if (typeof(this.map[method]) == 'function' && !this[method]) {\n        native_methods.push(method);\n      }\n    }\n\n    for (i = 0; i < native_methods.length; i++) {\n      (function(gmaps, scope, method_name) {\n        gmaps[method_name] = function(){\n          return scope[method_name].apply(scope, arguments);\n        };\n      })(this, this.map, native_methods[i]);\n    }\n  };\n\n  return GMaps;\n})(this);\n\nGMaps.prototype.createControl = function(options) {\n  var control = document.createElement('div');\n\n  control.style.cursor = 'pointer';\n  \n  if (options.disableDefaultStyles !== true) {\n    control.style.fontFamily = 'Roboto, Arial, sans-serif';\n    control.style.fontSize = '11px';\n    control.style.boxShadow = 'rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px';\n  }\n\n  for (var option in options.style) {\n    control.style[option] = options.style[option];\n  }\n\n  if (options.id) {\n    control.id = options.id;\n  }\n\n  if (options.classes) {\n    control.className = options.classes;\n  }\n\n  if (options.content) {\n    if (typeof options.content === 'string') {\n      control.innerHTML = options.content;\n    }\n    else if (options.content instanceof HTMLElement) {\n      control.appendChild(options.content);\n    }\n  }\n\n  if (options.position) {\n    control.position = google.maps.ControlPosition[options.position.toUpperCase()];\n  }\n\n  for (var ev in options.events) {\n    (function(object, name) {\n      google.maps.event.addDomListener(object, name, function(){\n        options.events[name].apply(this, [this]);\n      });\n    })(control, ev);\n  }\n\n  control.index = 1;\n\n  return control;\n};\n\nGMaps.prototype.addControl = function(options) {\n  var control = this.createControl(options);\n  \n  this.controls.push(control);\n  this.map.controls[control.position].push(control);\n\n  return control;\n};\n\nGMaps.prototype.removeControl = function(control) {\n  var position = null,\n      i;\n\n  for (i = 0; i < this.controls.length; i++) {\n    if (this.controls[i] == control) {\n      position = this.controls[i].position;\n      this.controls.splice(i, 1);\n    }\n  }\n\n  if (position) {\n    for (i = 0; i < this.map.controls.length; i++) {\n      var controlsForPosition = this.map.controls[control.position];\n\n      if (controlsForPosition.getAt(i) == control) {\n        controlsForPosition.removeAt(i);\n\n        break;\n      }\n    }\n  }\n\n  return control;\n};\n\nGMaps.prototype.createMarker = function(options) {\n  if (options.lat == undefined && options.lng == undefined && options.position == undefined) {\n    throw 'No latitude or longitude defined.';\n  }\n\n  var self = this,\n      details = options.details,\n      fences = options.fences,\n      outside = options.outside,\n      base_options = {\n        position: new google.maps.LatLng(options.lat, options.lng),\n        map: null\n      },\n      marker_options = extend_object(base_options, options);\n\n  delete marker_options.lat;\n  delete marker_options.lng;\n  delete marker_options.fences;\n  delete marker_options.outside;\n\n  var marker = new google.maps.Marker(marker_options);\n\n  marker.fences = fences;\n\n  if (options.infoWindow) {\n    marker.infoWindow = new google.maps.InfoWindow(options.infoWindow);\n\n    var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed'];\n\n    for (var ev = 0; ev < info_window_events.length; ev++) {\n      (function(object, name) {\n        if (options.infoWindow[name]) {\n          google.maps.event.addListener(object, name, function(e){\n            options.infoWindow[name].apply(this, [e]);\n          });\n        }\n      })(marker.infoWindow, info_window_events[ev]);\n    }\n  }\n\n  var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed'];\n\n  var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup'];\n\n  for (var ev = 0; ev < marker_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(){\n          options[name].apply(this, [this]);\n        });\n      }\n    })(marker, marker_events[ev]);\n  }\n\n  for (var ev = 0; ev < marker_events_with_mouse.length; ev++) {\n    (function(map, object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(me){\n          if(!me.pixel){\n            me.pixel = map.getProjection().fromLatLngToPoint(me.latLng)\n          }\n          \n          options[name].apply(this, [me]);\n        });\n      }\n    })(this.map, marker, marker_events_with_mouse[ev]);\n  }\n\n  google.maps.event.addListener(marker, 'click', function() {\n    this.details = details;\n\n    if (options.click) {\n      options.click.apply(this, [this]);\n    }\n\n    if (marker.infoWindow) {\n      self.hideInfoWindows();\n      marker.infoWindow.open(self.map, marker);\n    }\n  });\n\n  google.maps.event.addListener(marker, 'rightclick', function(e) {\n    e.marker = this;\n\n    if (options.rightclick) {\n      options.rightclick.apply(this, [e]);\n    }\n\n    if (window.context_menu[self.el.id]['marker'] != undefined) {\n      self.buildContextMenu('marker', e);\n    }\n  });\n\n  if (marker.fences) {\n    google.maps.event.addListener(marker, 'dragend', function() {\n      self.checkMarkerGeofence(marker, function(m, f) {\n        outside(m, f);\n      });\n    });\n  }\n\n  return marker;\n};\n\nGMaps.prototype.addMarker = function(options) {\n  var marker;\n  if(options.hasOwnProperty('gm_accessors_')) {\n    // Native google.maps.Marker object\n    marker = options;\n  }\n  else {\n    if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) {\n      marker = this.createMarker(options);\n    }\n    else {\n      throw 'No latitude or longitude defined.';\n    }\n  }\n\n  marker.setMap(this.map);\n\n  if(this.markerClusterer) {\n    this.markerClusterer.addMarker(marker);\n  }\n\n  this.markers.push(marker);\n\n  GMaps.fire('marker_added', marker, this);\n\n  return marker;\n};\n\nGMaps.prototype.addMarkers = function(array) {\n  for (var i = 0, marker; marker=array[i]; i++) {\n    this.addMarker(marker);\n  }\n\n  return this.markers;\n};\n\nGMaps.prototype.hideInfoWindows = function() {\n  for (var i = 0, marker; marker = this.markers[i]; i++){\n    if (marker.infoWindow) {\n      marker.infoWindow.close();\n    }\n  }\n};\n\nGMaps.prototype.removeMarker = function(marker) {\n  for (var i = 0; i < this.markers.length; i++) {\n    if (this.markers[i] === marker) {\n      this.markers[i].setMap(null);\n      this.markers.splice(i, 1);\n\n      if(this.markerClusterer) {\n        this.markerClusterer.removeMarker(marker);\n      }\n\n      GMaps.fire('marker_removed', marker, this);\n\n      break;\n    }\n  }\n\n  return marker;\n};\n\nGMaps.prototype.removeMarkers = function (collection) {\n  var new_markers = [];\n\n  if (typeof collection == 'undefined') {\n    for (var i = 0; i < this.markers.length; i++) {\n      var marker = this.markers[i];\n      marker.setMap(null);\n\n      if(this.markerClusterer) {\n        this.markerClusterer.removeMarker(marker);\n      }\n\n      GMaps.fire('marker_removed', marker, this);\n    }\n    \n    this.markers = new_markers;\n  }\n  else {\n    for (var i = 0; i < collection.length; i++) {\n      var index = this.markers.indexOf(collection[i]);\n\n      if (index > -1) {\n        var marker = this.markers[index];\n        marker.setMap(null);\n\n        if(this.markerClusterer) {\n          this.markerClusterer.removeMarker(marker);\n        }\n\n        GMaps.fire('marker_removed', marker, this);\n      }\n    }\n\n    for (var i = 0; i < this.markers.length; i++) {\n      var marker = this.markers[i];\n      if (marker.getMap() != null) {\n        new_markers.push(marker);\n      }\n    }\n\n    this.markers = new_markers;\n  }\n};\n\nGMaps.prototype.drawOverlay = function(options) {\n  var overlay = new google.maps.OverlayView(),\n      auto_show = true;\n\n  overlay.setMap(this.map);\n\n  if (options.auto_show != null) {\n    auto_show = options.auto_show;\n  }\n\n  overlay.onAdd = function() {\n    var el = document.createElement('div');\n\n    el.style.borderStyle = \"none\";\n    el.style.borderWidth = \"0px\";\n    el.style.position = \"absolute\";\n    el.style.zIndex = 100;\n    el.innerHTML = options.content;\n\n    overlay.el = el;\n\n    if (!options.layer) {\n      options.layer = 'overlayLayer';\n    }\n    \n    var panes = this.getPanes(),\n        overlayLayer = panes[options.layer],\n        stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown'];\n\n    overlayLayer.appendChild(el);\n\n    for (var ev = 0; ev < stop_overlay_events.length; ev++) {\n      (function(object, name) {\n        google.maps.event.addDomListener(object, name, function(e){\n          if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) {\n            e.cancelBubble = true;\n            e.returnValue = false;\n          }\n          else {\n            e.stopPropagation();\n          }\n        });\n      })(el, stop_overlay_events[ev]);\n    }\n\n    if (options.click) {\n      panes.overlayMouseTarget.appendChild(overlay.el);\n      google.maps.event.addDomListener(overlay.el, 'click', function() {\n        options.click.apply(overlay, [overlay]);\n      });\n    }\n\n    google.maps.event.trigger(this, 'ready');\n  };\n\n  overlay.draw = function() {\n    var projection = this.getProjection(),\n        pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng));\n\n    options.horizontalOffset = options.horizontalOffset || 0;\n    options.verticalOffset = options.verticalOffset || 0;\n\n    var el = overlay.el,\n        content = el.children[0],\n        content_height = content.clientHeight,\n        content_width = content.clientWidth;\n\n    switch (options.verticalAlign) {\n      case 'top':\n        el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px';\n        break;\n      default:\n      case 'middle':\n        el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px';\n        break;\n      case 'bottom':\n        el.style.top = (pixel.y + options.verticalOffset) + 'px';\n        break;\n    }\n\n    switch (options.horizontalAlign) {\n      case 'left':\n        el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px';\n        break;\n      default:\n      case 'center':\n        el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px';\n        break;\n      case 'right':\n        el.style.left = (pixel.x + options.horizontalOffset) + 'px';\n        break;\n    }\n\n    el.style.display = auto_show ? 'block' : 'none';\n\n    if (!auto_show) {\n      options.show.apply(this, [el]);\n    }\n  };\n\n  overlay.onRemove = function() {\n    var el = overlay.el;\n\n    if (options.remove) {\n      options.remove.apply(this, [el]);\n    }\n    else {\n      overlay.el.parentNode.removeChild(overlay.el);\n      overlay.el = null;\n    }\n  };\n\n  this.overlays.push(overlay);\n  return overlay;\n};\n\nGMaps.prototype.removeOverlay = function(overlay) {\n  for (var i = 0; i < this.overlays.length; i++) {\n    if (this.overlays[i] === overlay) {\n      this.overlays[i].setMap(null);\n      this.overlays.splice(i, 1);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removeOverlays = function() {\n  for (var i = 0, item; item = this.overlays[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.overlays = [];\n};\n\nGMaps.prototype.drawPolyline = function(options) {\n  var path = [],\n      points = options.path;\n\n  if (points.length) {\n    if (points[0][0] === undefined) {\n      path = points;\n    }\n    else {\n      for (var i = 0, latlng; latlng = points[i]; i++) {\n        path.push(new google.maps.LatLng(latlng[0], latlng[1]));\n      }\n    }\n  }\n\n  var polyline_options = {\n    map: this.map,\n    path: path,\n    strokeColor: options.strokeColor,\n    strokeOpacity: options.strokeOpacity,\n    strokeWeight: options.strokeWeight,\n    geodesic: options.geodesic,\n    clickable: true,\n    editable: false,\n    visible: true\n  };\n\n  if (options.hasOwnProperty(\"clickable\")) {\n    polyline_options.clickable = options.clickable;\n  }\n\n  if (options.hasOwnProperty(\"editable\")) {\n    polyline_options.editable = options.editable;\n  }\n\n  if (options.hasOwnProperty(\"icons\")) {\n    polyline_options.icons = options.icons;\n  }\n\n  if (options.hasOwnProperty(\"zIndex\")) {\n    polyline_options.zIndex = options.zIndex;\n  }\n\n  var polyline = new google.maps.Polyline(polyline_options);\n\n  var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polyline_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polyline, polyline_events[ev]);\n  }\n\n  this.polylines.push(polyline);\n\n  GMaps.fire('polyline_added', polyline, this);\n\n  return polyline;\n};\n\nGMaps.prototype.removePolyline = function(polyline) {\n  for (var i = 0; i < this.polylines.length; i++) {\n    if (this.polylines[i] === polyline) {\n      this.polylines[i].setMap(null);\n      this.polylines.splice(i, 1);\n\n      GMaps.fire('polyline_removed', polyline, this);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removePolylines = function() {\n  for (var i = 0, item; item = this.polylines[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.polylines = [];\n};\n\nGMaps.prototype.drawCircle = function(options) {\n  options =  extend_object({\n    map: this.map,\n    center: new google.maps.LatLng(options.lat, options.lng)\n  }, options);\n\n  delete options.lat;\n  delete options.lng;\n\n  var polygon = new google.maps.Circle(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  return polygon;\n};\n\nGMaps.prototype.drawRectangle = function(options) {\n  options = extend_object({\n    map: this.map\n  }, options);\n\n  var latLngBounds = new google.maps.LatLngBounds(\n    new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]),\n    new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1])\n  );\n\n  options.bounds = latLngBounds;\n\n  var polygon = new google.maps.Rectangle(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  return polygon;\n};\n\nGMaps.prototype.drawPolygon = function(options) {\n  var useGeoJSON = false;\n\n  if(options.hasOwnProperty(\"useGeoJSON\")) {\n    useGeoJSON = options.useGeoJSON;\n  }\n\n  delete options.useGeoJSON;\n\n  options = extend_object({\n    map: this.map\n  }, options);\n\n  if (useGeoJSON == false) {\n    options.paths = [options.paths.slice(0)];\n  }\n\n  if (options.paths.length > 0) {\n    if (options.paths[0].length > 0) {\n      options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON));\n    }\n  }\n\n  var polygon = new google.maps.Polygon(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  GMaps.fire('polygon_added', polygon, this);\n\n  return polygon;\n};\n\nGMaps.prototype.removePolygon = function(polygon) {\n  for (var i = 0; i < this.polygons.length; i++) {\n    if (this.polygons[i] === polygon) {\n      this.polygons[i].setMap(null);\n      this.polygons.splice(i, 1);\n\n      GMaps.fire('polygon_removed', polygon, this);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removePolygons = function() {\n  for (var i = 0, item; item = this.polygons[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.polygons = [];\n};\n\nGMaps.prototype.getFromFusionTables = function(options) {\n  var events = options.events;\n\n  delete options.events;\n\n  var fusion_tables_options = options,\n      layer = new google.maps.FusionTablesLayer(fusion_tables_options);\n\n  for (var ev in events) {\n    (function(object, name) {\n      google.maps.event.addListener(object, name, function(e) {\n        events[name].apply(this, [e]);\n      });\n    })(layer, ev);\n  }\n\n  this.layers.push(layer);\n\n  return layer;\n};\n\nGMaps.prototype.loadFromFusionTables = function(options) {\n  var layer = this.getFromFusionTables(options);\n  layer.setMap(this.map);\n\n  return layer;\n};\n\nGMaps.prototype.getFromKML = function(options) {\n  var url = options.url,\n      events = options.events;\n\n  delete options.url;\n  delete options.events;\n\n  var kml_options = options,\n      layer = new google.maps.KmlLayer(url, kml_options);\n\n  for (var ev in events) {\n    (function(object, name) {\n      google.maps.event.addListener(object, name, function(e) {\n        events[name].apply(this, [e]);\n      });\n    })(layer, ev);\n  }\n\n  this.layers.push(layer);\n\n  return layer;\n};\n\nGMaps.prototype.loadFromKML = function(options) {\n  var layer = this.getFromKML(options);\n  layer.setMap(this.map);\n\n  return layer;\n};\n\nGMaps.prototype.addLayer = function(layerName, options) {\n  //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places'];\n  options = options || {};\n  var layer;\n\n  switch(layerName) {\n    case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer();\n      break;\n    case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer();\n      break;\n    case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer();\n      break;\n    case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer();\n      break;\n    case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer();\n      break;\n    case 'panoramio':\n        this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer();\n        layer.setTag(options.filter);\n        delete options.filter;\n\n        //click event\n        if (options.click) {\n          google.maps.event.addListener(layer, 'click', function(event) {\n            options.click(event);\n            delete options.click;\n          });\n        }\n      break;\n      case 'places':\n        this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map);\n\n        //search, nearbySearch, radarSearch callback, Both are the same\n        if (options.search || options.nearbySearch || options.radarSearch) {\n          var placeSearchRequest  = {\n            bounds : options.bounds || null,\n            keyword : options.keyword || null,\n            location : options.location || null,\n            name : options.name || null,\n            radius : options.radius || null,\n            rankBy : options.rankBy || null,\n            types : options.types || null\n          };\n\n          if (options.radarSearch) {\n            layer.radarSearch(placeSearchRequest, options.radarSearch);\n          }\n\n          if (options.search) {\n            layer.search(placeSearchRequest, options.search);\n          }\n\n          if (options.nearbySearch) {\n            layer.nearbySearch(placeSearchRequest, options.nearbySearch);\n          }\n        }\n\n        //textSearch callback\n        if (options.textSearch) {\n          var textSearchRequest  = {\n            bounds : options.bounds || null,\n            location : options.location || null,\n            query : options.query || null,\n            radius : options.radius || null\n          };\n\n          layer.textSearch(textSearchRequest, options.textSearch);\n        }\n      break;\n  }\n\n  if (layer !== undefined) {\n    if (typeof layer.setOptions == 'function') {\n      layer.setOptions(options);\n    }\n    if (typeof layer.setMap == 'function') {\n      layer.setMap(this.map);\n    }\n\n    return layer;\n  }\n};\n\nGMaps.prototype.removeLayer = function(layer) {\n  if (typeof(layer) == \"string\" && this.singleLayers[layer] !== undefined) {\n     this.singleLayers[layer].setMap(null);\n\n     delete this.singleLayers[layer];\n  }\n  else {\n    for (var i = 0; i < this.layers.length; i++) {\n      if (this.layers[i] === layer) {\n        this.layers[i].setMap(null);\n        this.layers.splice(i, 1);\n\n        break;\n      }\n    }\n  }\n};\n\nvar travelMode, unitSystem;\n\nGMaps.prototype.getRoutes = function(options) {\n  switch (options.travelMode) {\n    case 'bicycling':\n      travelMode = google.maps.TravelMode.BICYCLING;\n      break;\n    case 'transit':\n      travelMode = google.maps.TravelMode.TRANSIT;\n      break;\n    case 'driving':\n      travelMode = google.maps.TravelMode.DRIVING;\n      break;\n    default:\n      travelMode = google.maps.TravelMode.WALKING;\n      break;\n  }\n\n  if (options.unitSystem === 'imperial') {\n    unitSystem = google.maps.UnitSystem.IMPERIAL;\n  }\n  else {\n    unitSystem = google.maps.UnitSystem.METRIC;\n  }\n\n  var base_options = {\n        avoidHighways: false,\n        avoidTolls: false,\n        optimizeWaypoints: false,\n        waypoints: []\n      },\n      request_options =  extend_object(base_options, options);\n\n  request_options.origin = /string/.test(typeof options.origin) ? options.origin : new google.maps.LatLng(options.origin[0], options.origin[1]);\n  request_options.destination = /string/.test(typeof options.destination) ? options.destination : new google.maps.LatLng(options.destination[0], options.destination[1]);\n  request_options.travelMode = travelMode;\n  request_options.unitSystem = unitSystem;\n\n  delete request_options.callback;\n  delete request_options.error;\n\n  var self = this,\n      service = new google.maps.DirectionsService();\n\n  service.route(request_options, function(result, status) {\n    if (status === google.maps.DirectionsStatus.OK) {\n      for (var r in result.routes) {\n        if (result.routes.hasOwnProperty(r)) {\n          self.routes.push(result.routes[r]);\n        }\n      }\n\n      if (options.callback) {\n        options.callback(self.routes);\n      }\n    }\n    else {\n      if (options.error) {\n        options.error(result, status);\n      }\n    }\n  });\n};\n\nGMaps.prototype.removeRoutes = function() {\n  this.routes = [];\n};\n\nGMaps.prototype.getElevations = function(options) {\n  options = extend_object({\n    locations: [],\n    path : false,\n    samples : 256\n  }, options);\n\n  if (options.locations.length > 0) {\n    if (options.locations[0].length > 0) {\n      options.locations = array_flat(array_map([options.locations], arrayToLatLng,  false));\n    }\n  }\n\n  var callback = options.callback;\n  delete options.callback;\n\n  var service = new google.maps.ElevationService();\n\n  //location request\n  if (!options.path) {\n    delete options.path;\n    delete options.samples;\n\n    service.getElevationForLocations(options, function(result, status) {\n      if (callback && typeof(callback) === \"function\") {\n        callback(result, status);\n      }\n    });\n  //path request\n  } else {\n    var pathRequest = {\n      path : options.locations,\n      samples : options.samples\n    };\n\n    service.getElevationAlongPath(pathRequest, function(result, status) {\n     if (callback && typeof(callback) === \"function\") {\n        callback(result, status);\n      }\n    });\n  }\n};\n\nGMaps.prototype.cleanRoute = GMaps.prototype.removePolylines;\n\nGMaps.prototype.drawRoute = function(options) {\n  var self = this;\n\n  this.getRoutes({\n    origin: options.origin,\n    destination: options.destination,\n    travelMode: options.travelMode,\n    waypoints: options.waypoints,\n    unitSystem: options.unitSystem,\n    error: options.error,\n    callback: function(e) {\n      if (e.length > 0) {\n        var polyline_options = {\n          path: e[e.length - 1].overview_path,\n          strokeColor: options.strokeColor,\n          strokeOpacity: options.strokeOpacity,\n          strokeWeight: options.strokeWeight\n        };\n\n        if (options.hasOwnProperty(\"icons\")) {\n          polyline_options.icons = options.icons;\n        }\n\n        self.drawPolyline(polyline_options);\n        \n        if (options.callback) {\n          options.callback(e[e.length - 1]);\n        }\n      }\n    }\n  });\n};\n\nGMaps.prototype.travelRoute = function(options) {\n  if (options.origin && options.destination) {\n    this.getRoutes({\n      origin: options.origin,\n      destination: options.destination,\n      travelMode: options.travelMode,\n      waypoints : options.waypoints,\n      unitSystem: options.unitSystem,\n      error: options.error,\n      callback: function(e) {\n        //start callback\n        if (e.length > 0 && options.start) {\n          options.start(e[e.length - 1]);\n        }\n\n        //step callback\n        if (e.length > 0 && options.step) {\n          var route = e[e.length - 1];\n          if (route.legs.length > 0) {\n            var steps = route.legs[0].steps;\n            for (var i = 0, step; step = steps[i]; i++) {\n              step.step_number = i;\n              options.step(step, (route.legs[0].steps.length - 1));\n            }\n          }\n        }\n\n        //end callback\n        if (e.length > 0 && options.end) {\n           options.end(e[e.length - 1]);\n        }\n      }\n    });\n  }\n  else if (options.route) {\n    if (options.route.legs.length > 0) {\n      var steps = options.route.legs[0].steps;\n      for (var i = 0, step; step = steps[i]; i++) {\n        step.step_number = i;\n        options.step(step);\n      }\n    }\n  }\n};\n\nGMaps.prototype.drawSteppedRoute = function(options) {\n  var self = this;\n  \n  if (options.origin && options.destination) {\n    this.getRoutes({\n      origin: options.origin,\n      destination: options.destination,\n      travelMode: options.travelMode,\n      waypoints : options.waypoints,\n      error: options.error,\n      callback: function(e) {\n        //start callback\n        if (e.length > 0 && options.start) {\n          options.start(e[e.length - 1]);\n        }\n\n        //step callback\n        if (e.length > 0 && options.step) {\n          var route = e[e.length - 1];\n          if (route.legs.length > 0) {\n            var steps = route.legs[0].steps;\n            for (var i = 0, step; step = steps[i]; i++) {\n              step.step_number = i;\n              var polyline_options = {\n                path: step.path,\n                strokeColor: options.strokeColor,\n                strokeOpacity: options.strokeOpacity,\n                strokeWeight: options.strokeWeight\n              };\n\n              if (options.hasOwnProperty(\"icons\")) {\n                polyline_options.icons = options.icons;\n              }\n\n              self.drawPolyline(polyline_options);\n              options.step(step, (route.legs[0].steps.length - 1));\n            }\n          }\n        }\n\n        //end callback\n        if (e.length > 0 && options.end) {\n           options.end(e[e.length - 1]);\n        }\n      }\n    });\n  }\n  else if (options.route) {\n    if (options.route.legs.length > 0) {\n      var steps = options.route.legs[0].steps;\n      for (var i = 0, step; step = steps[i]; i++) {\n        step.step_number = i;\n        var polyline_options = {\n          path: step.path,\n          strokeColor: options.strokeColor,\n          strokeOpacity: options.strokeOpacity,\n          strokeWeight: options.strokeWeight\n        };\n\n        if (options.hasOwnProperty(\"icons\")) {\n          polyline_options.icons = options.icons;\n        }\n\n        self.drawPolyline(polyline_options);\n        options.step(step);\n      }\n    }\n  }\n};\n\nGMaps.Route = function(options) {\n  this.origin = options.origin;\n  this.destination = options.destination;\n  this.waypoints = options.waypoints;\n\n  this.map = options.map;\n  this.route = options.route;\n  this.step_count = 0;\n  this.steps = this.route.legs[0].steps;\n  this.steps_length = this.steps.length;\n\n  var polyline_options = {\n    path: new google.maps.MVCArray(),\n    strokeColor: options.strokeColor,\n    strokeOpacity: options.strokeOpacity,\n    strokeWeight: options.strokeWeight\n  };\n\n  if (options.hasOwnProperty(\"icons\")) {\n    polyline_options.icons = options.icons;\n  }\n\n  this.polyline = this.map.drawPolyline(polyline_options).getPath();\n};\n\nGMaps.Route.prototype.getRoute = function(options) {\n  var self = this;\n\n  this.map.getRoutes({\n    origin : this.origin,\n    destination : this.destination,\n    travelMode : options.travelMode,\n    waypoints : this.waypoints || [],\n    error: options.error,\n    callback : function() {\n      self.route = e[0];\n\n      if (options.callback) {\n        options.callback.call(self);\n      }\n    }\n  });\n};\n\nGMaps.Route.prototype.back = function() {\n  if (this.step_count > 0) {\n    this.step_count--;\n    var path = this.route.legs[0].steps[this.step_count].path;\n\n    for (var p in path){\n      if (path.hasOwnProperty(p)){\n        this.polyline.pop();\n      }\n    }\n  }\n};\n\nGMaps.Route.prototype.forward = function() {\n  if (this.step_count < this.steps_length) {\n    var path = this.route.legs[0].steps[this.step_count].path;\n\n    for (var p in path){\n      if (path.hasOwnProperty(p)){\n        this.polyline.push(path[p]);\n      }\n    }\n    this.step_count++;\n  }\n};\n\nGMaps.prototype.checkGeofence = function(lat, lng, fence) {\n  return fence.containsLatLng(new google.maps.LatLng(lat, lng));\n};\n\nGMaps.prototype.checkMarkerGeofence = function(marker, outside_callback) {\n  if (marker.fences) {\n    for (var i = 0, fence; fence = marker.fences[i]; i++) {\n      var pos = marker.getPosition();\n      if (!this.checkGeofence(pos.lat(), pos.lng(), fence)) {\n        outside_callback(marker, fence);\n      }\n    }\n  }\n};\n\nGMaps.prototype.toImage = function(options) {\n  var options = options || {},\n      static_map_options = {};\n\n  static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight];\n  static_map_options['lat'] = this.getCenter().lat();\n  static_map_options['lng'] = this.getCenter().lng();\n\n  if (this.markers.length > 0) {\n    static_map_options['markers'] = [];\n    \n    for (var i = 0; i < this.markers.length; i++) {\n      static_map_options['markers'].push({\n        lat: this.markers[i].getPosition().lat(),\n        lng: this.markers[i].getPosition().lng()\n      });\n    }\n  }\n\n  if (this.polylines.length > 0) {\n    var polyline = this.polylines[0];\n    \n    static_map_options['polyline'] = {};\n    static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath());\n    static_map_options['polyline']['strokeColor'] = polyline.strokeColor\n    static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity\n    static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight\n  }\n\n  return GMaps.staticMapURL(static_map_options);\n};\n\nGMaps.staticMapURL = function(options){\n  var parameters = [],\n      data,\n      static_root = (location.protocol === 'file:' ? 'http:' : location.protocol ) + '//maps.googleapis.com/maps/api/staticmap';\n\n  if (options.url) {\n    static_root = options.url;\n    delete options.url;\n  }\n\n  static_root += '?';\n\n  var markers = options.markers;\n  \n  delete options.markers;\n\n  if (!markers && options.marker) {\n    markers = [options.marker];\n    delete options.marker;\n  }\n\n  var styles = options.styles;\n\n  delete options.styles;\n\n  var polyline = options.polyline;\n  delete options.polyline;\n\n  /** Map options **/\n  if (options.center) {\n    parameters.push('center=' + options.center);\n    delete options.center;\n  }\n  else if (options.address) {\n    parameters.push('center=' + options.address);\n    delete options.address;\n  }\n  else if (options.lat) {\n    parameters.push(['center=', options.lat, ',', options.lng].join(''));\n    delete options.lat;\n    delete options.lng;\n  }\n  else if (options.visible) {\n    var visible = encodeURI(options.visible.join('|'));\n    parameters.push('visible=' + visible);\n  }\n\n  var size = options.size;\n  if (size) {\n    if (size.join) {\n      size = size.join('x');\n    }\n    delete options.size;\n  }\n  else {\n    size = '630x300';\n  }\n  parameters.push('size=' + size);\n\n  if (!options.zoom && options.zoom !== false) {\n    options.zoom = 15;\n  }\n\n  var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true;\n  delete options.sensor;\n  parameters.push('sensor=' + sensor);\n\n  for (var param in options) {\n    if (options.hasOwnProperty(param)) {\n      parameters.push(param + '=' + options[param]);\n    }\n  }\n\n  /** Markers **/\n  if (markers) {\n    var marker, loc;\n\n    for (var i = 0; data = markers[i]; i++) {\n      marker = [];\n\n      if (data.size && data.size !== 'normal') {\n        marker.push('size:' + data.size);\n        delete data.size;\n      }\n      else if (data.icon) {\n        marker.push('icon:' + encodeURI(data.icon));\n        delete data.icon;\n      }\n\n      if (data.color) {\n        marker.push('color:' + data.color.replace('#', '0x'));\n        delete data.color;\n      }\n\n      if (data.label) {\n        marker.push('label:' + data.label[0].toUpperCase());\n        delete data.label;\n      }\n\n      loc = (data.address ? data.address : data.lat + ',' + data.lng);\n      delete data.address;\n      delete data.lat;\n      delete data.lng;\n\n      for(var param in data){\n        if (data.hasOwnProperty(param)) {\n          marker.push(param + ':' + data[param]);\n        }\n      }\n\n      if (marker.length || i === 0) {\n        marker.push(loc);\n        marker = marker.join('|');\n        parameters.push('markers=' + encodeURI(marker));\n      }\n      // New marker without styles\n      else {\n        marker = parameters.pop() + encodeURI('|' + loc);\n        parameters.push(marker);\n      }\n    }\n  }\n\n  /** Map Styles **/\n  if (styles) {\n    for (var i = 0; i < styles.length; i++) {\n      var styleRule = [];\n      if (styles[i].featureType){\n        styleRule.push('feature:' + styles[i].featureType.toLowerCase());\n      }\n\n      if (styles[i].elementType) {\n        styleRule.push('element:' + styles[i].elementType.toLowerCase());\n      }\n\n      for (var j = 0; j < styles[i].stylers.length; j++) {\n        for (var p in styles[i].stylers[j]) {\n          var ruleArg = styles[i].stylers[j][p];\n          if (p == 'hue' || p == 'color') {\n            ruleArg = '0x' + ruleArg.substring(1);\n          }\n          styleRule.push(p + ':' + ruleArg);\n        }\n      }\n\n      var rule = styleRule.join('|');\n      if (rule != '') {\n        parameters.push('style=' + rule);\n      }\n    }\n  }\n\n  /** Polylines **/\n  function parseColor(color, opacity) {\n    if (color[0] === '#'){\n      color = color.replace('#', '0x');\n\n      if (opacity) {\n        opacity = parseFloat(opacity);\n        opacity = Math.min(1, Math.max(opacity, 0));\n        if (opacity === 0) {\n          return '0x00000000';\n        }\n        opacity = (opacity * 255).toString(16);\n        if (opacity.length === 1) {\n          opacity += opacity;\n        }\n\n        color = color.slice(0,8) + opacity;\n      }\n    }\n    return color;\n  }\n\n  if (polyline) {\n    data = polyline;\n    polyline = [];\n\n    if (data.strokeWeight) {\n      polyline.push('weight:' + parseInt(data.strokeWeight, 10));\n    }\n\n    if (data.strokeColor) {\n      var color = parseColor(data.strokeColor, data.strokeOpacity);\n      polyline.push('color:' + color);\n    }\n\n    if (data.fillColor) {\n      var fillcolor = parseColor(data.fillColor, data.fillOpacity);\n      polyline.push('fillcolor:' + fillcolor);\n    }\n\n    var path = data.path;\n    if (path.join) {\n      for (var j=0, pos; pos=path[j]; j++) {\n        polyline.push(pos.join(','));\n      }\n    }\n    else {\n      polyline.push('enc:' + path);\n    }\n\n    polyline = polyline.join('|');\n    parameters.push('path=' + encodeURI(polyline));\n  }\n\n  /** Retina support **/\n  var dpi = window.devicePixelRatio || 1;\n  parameters.push('scale=' + dpi);\n\n  parameters = parameters.join('&');\n  return static_root + parameters;\n};\n\nGMaps.prototype.addMapType = function(mapTypeId, options) {\n  if (options.hasOwnProperty(\"getTileUrl\") && typeof(options[\"getTileUrl\"]) == \"function\") {\n    options.tileSize = options.tileSize || new google.maps.Size(256, 256);\n\n    var mapType = new google.maps.ImageMapType(options);\n\n    this.map.mapTypes.set(mapTypeId, mapType);\n  }\n  else {\n    throw \"'getTileUrl' function required.\";\n  }\n};\n\nGMaps.prototype.addOverlayMapType = function(options) {\n  if (options.hasOwnProperty(\"getTile\") && typeof(options[\"getTile\"]) == \"function\") {\n    var overlayMapTypeIndex = options.index;\n\n    delete options.index;\n\n    this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options);\n  }\n  else {\n    throw \"'getTile' function required.\";\n  }\n};\n\nGMaps.prototype.removeOverlayMapType = function(overlayMapTypeIndex) {\n  this.map.overlayMapTypes.removeAt(overlayMapTypeIndex);\n};\n\nGMaps.prototype.addStyle = function(options) {\n  var styledMapType = new google.maps.StyledMapType(options.styles, { name: options.styledMapName });\n\n  this.map.mapTypes.set(options.mapTypeId, styledMapType);\n};\n\nGMaps.prototype.setStyle = function(mapTypeId) {\n  this.map.setMapTypeId(mapTypeId);\n};\n\nGMaps.prototype.createPanorama = function(streetview_options) {\n  if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) {\n    streetview_options.lat = this.getCenter().lat();\n    streetview_options.lng = this.getCenter().lng();\n  }\n\n  this.panorama = GMaps.createPanorama(streetview_options);\n\n  this.map.setStreetView(this.panorama);\n\n  return this.panorama;\n};\n\nGMaps.createPanorama = function(options) {\n  var el = getElementById(options.el, options.context);\n\n  options.position = new google.maps.LatLng(options.lat, options.lng);\n\n  delete options.el;\n  delete options.context;\n  delete options.lat;\n  delete options.lng;\n\n  var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'],\n      streetview_options = extend_object({visible : true}, options);\n\n  for (var i = 0; i < streetview_events.length; i++) {\n    delete streetview_options[streetview_events[i]];\n  }\n\n  var panorama = new google.maps.StreetViewPanorama(el, streetview_options);\n\n  for (var i = 0; i < streetview_events.length; i++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(){\n          options[name].apply(this);\n        });\n      }\n    })(panorama, streetview_events[i]);\n  }\n\n  return panorama;\n};\n\nGMaps.prototype.on = function(event_name, handler) {\n  return GMaps.on(event_name, this, handler);\n};\n\nGMaps.prototype.off = function(event_name) {\n  GMaps.off(event_name, this);\n};\n\nGMaps.custom_events = ['marker_added', 'marker_removed', 'polyline_added', 'polyline_removed', 'polygon_added', 'polygon_removed', 'geolocated', 'geolocation_failed'];\n\nGMaps.on = function(event_name, object, handler) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    if(object instanceof GMaps) object = object.map; \n    return google.maps.event.addListener(object, event_name, handler);\n  }\n  else {\n    var registered_event = {\n      handler : handler,\n      eventName : event_name\n    };\n\n    object.registered_events[event_name] = object.registered_events[event_name] || [];\n    object.registered_events[event_name].push(registered_event);\n\n    return registered_event;\n  }\n};\n\nGMaps.off = function(event_name, object) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    if(object instanceof GMaps) object = object.map; \n    google.maps.event.clearListeners(object, event_name);\n  }\n  else {\n    object.registered_events[event_name] = [];\n  }\n};\n\nGMaps.fire = function(event_name, object, scope) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    google.maps.event.trigger(object, event_name, Array.prototype.slice.apply(arguments).slice(2));\n  }\n  else {\n    if(event_name in scope.registered_events) {\n      var firing_events = scope.registered_events[event_name];\n\n      for(var i = 0; i < firing_events.length; i++) {\n        (function(handler, scope, object) {\n          handler.apply(scope, [object]);\n        })(firing_events[i]['handler'], scope, object);\n      }\n    }\n  }\n};\n\nGMaps.geolocate = function(options) {\n  var complete_callback = options.always || options.complete;\n\n  if (navigator.geolocation) {\n    navigator.geolocation.getCurrentPosition(function(position) {\n      options.success(position);\n\n      if (complete_callback) {\n        complete_callback();\n      }\n    }, function(error) {\n      options.error(error);\n\n      if (complete_callback) {\n        complete_callback();\n      }\n    }, options.options);\n  }\n  else {\n    options.not_supported();\n\n    if (complete_callback) {\n      complete_callback();\n    }\n  }\n};\n\nGMaps.geocode = function(options) {\n  this.geocoder = new google.maps.Geocoder();\n  var callback = options.callback;\n  if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) {\n    options.latLng = new google.maps.LatLng(options.lat, options.lng);\n  }\n\n  delete options.lat;\n  delete options.lng;\n  delete options.callback;\n  \n  this.geocoder.geocode(options, function(results, status) {\n    callback(results, status);\n  });\n};\n\n//==========================\n// Polygon containsLatLng\n// https://github.com/tparkin/Google-Maps-Point-in-Polygon\n// Poygon getBounds extension - google-maps-extensions\n// http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js\nif (!google.maps.Polygon.prototype.getBounds) {\n  google.maps.Polygon.prototype.getBounds = function(latLng) {\n    var bounds = new google.maps.LatLngBounds();\n    var paths = this.getPaths();\n    var path;\n\n    for (var p = 0; p < paths.getLength(); p++) {\n      path = paths.getAt(p);\n      for (var i = 0; i < path.getLength(); i++) {\n        bounds.extend(path.getAt(i));\n      }\n    }\n\n    return bounds;\n  };\n}\n\nif (!google.maps.Polygon.prototype.containsLatLng) {\n  // Polygon containsLatLng - method to determine if a latLng is within a polygon\n  google.maps.Polygon.prototype.containsLatLng = function(latLng) {\n    // Exclude points outside of bounds as there is no way they are in the poly\n    var bounds = this.getBounds();\n\n    if (bounds !== null && !bounds.contains(latLng)) {\n      return false;\n    }\n\n    // Raycast point in polygon method\n    var inPoly = false;\n\n    var numPaths = this.getPaths().getLength();\n    for (var p = 0; p < numPaths; p++) {\n      var path = this.getPaths().getAt(p);\n      var numPoints = path.getLength();\n      var j = numPoints - 1;\n\n      for (var i = 0; i < numPoints; i++) {\n        var vertex1 = path.getAt(i);\n        var vertex2 = path.getAt(j);\n\n        if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) {\n          if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {\n            inPoly = !inPoly;\n          }\n        }\n\n        j = i;\n      }\n    }\n\n    return inPoly;\n  };\n}\n\nif (!google.maps.Circle.prototype.containsLatLng) {\n  google.maps.Circle.prototype.containsLatLng = function(latLng) {\n    if (google.maps.geometry) {\n      return google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();\n    }\n    else {\n      return true;\n    }\n  };\n}\n\ngoogle.maps.LatLngBounds.prototype.containsLatLng = function(latLng) {\n  return this.contains(latLng);\n};\n\ngoogle.maps.Marker.prototype.setFences = function(fences) {\n  this.fences = fences;\n};\n\ngoogle.maps.Marker.prototype.addFence = function(fence) {\n  this.fences.push(fence);\n};\n\ngoogle.maps.Marker.prototype.getId = function() {\n  return this['__gm_id'];\n};\n\n//==========================\n// Array indexOf\n// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf\nif (!Array.prototype.indexOf) {\n  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n      \"use strict\";\n      if (this == null) {\n          throw new TypeError();\n      }\n      var t = Object(this);\n      var len = t.length >>> 0;\n      if (len === 0) {\n          return -1;\n      }\n      var n = 0;\n      if (arguments.length > 1) {\n          n = Number(arguments[1]);\n          if (n != n) { // shortcut for verifying if it's NaN\n              n = 0;\n          } else if (n != 0 && n != Infinity && n != -Infinity) {\n              n = (n > 0 || -1) * Math.floor(Math.abs(n));\n          }\n      }\n      if (n >= len) {\n          return -1;\n      }\n      var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n      for (; k < len; k++) {\n          if (k in t && t[k] === searchElement) {\n              return k;\n          }\n      }\n      return -1;\n  }\n}\n  \nreturn GMaps;\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.controls.js",
    "content": "GMaps.prototype.createControl = function(options) {\n  var control = document.createElement('div');\n\n  control.style.cursor = 'pointer';\n  \n  if (options.disableDefaultStyles !== true) {\n    control.style.fontFamily = 'Roboto, Arial, sans-serif';\n    control.style.fontSize = '11px';\n    control.style.boxShadow = 'rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px';\n  }\n\n  for (var option in options.style) {\n    control.style[option] = options.style[option];\n  }\n\n  if (options.id) {\n    control.id = options.id;\n  }\n\n  if (options.classes) {\n    control.className = options.classes;\n  }\n\n  if (options.content) {\n    if (typeof options.content === 'string') {\n      control.innerHTML = options.content;\n    }\n    else if (options.content instanceof HTMLElement) {\n      control.appendChild(options.content);\n    }\n  }\n\n  if (options.position) {\n    control.position = google.maps.ControlPosition[options.position.toUpperCase()];\n  }\n\n  for (var ev in options.events) {\n    (function(object, name) {\n      google.maps.event.addDomListener(object, name, function(){\n        options.events[name].apply(this, [this]);\n      });\n    })(control, ev);\n  }\n\n  control.index = 1;\n\n  return control;\n};\n\nGMaps.prototype.addControl = function(options) {\n  var control = this.createControl(options);\n  \n  this.controls.push(control);\n  this.map.controls[control.position].push(control);\n\n  return control;\n};\n\nGMaps.prototype.removeControl = function(control) {\n  var position = null,\n      i;\n\n  for (i = 0; i < this.controls.length; i++) {\n    if (this.controls[i] == control) {\n      position = this.controls[i].position;\n      this.controls.splice(i, 1);\n    }\n  }\n\n  if (position) {\n    for (i = 0; i < this.map.controls.length; i++) {\n      var controlsForPosition = this.map.controls[control.position];\n\n      if (controlsForPosition.getAt(i) == control) {\n        controlsForPosition.removeAt(i);\n\n        break;\n      }\n    }\n  }\n\n  return control;\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.core.js",
    "content": "if (!(typeof window.google === 'object' && window.google.maps)) {\n  throw 'Google Maps API is required. Please register the following JavaScript library http://maps.google.com/maps/api/js?sensor=true.'\n}\n\nvar extend_object = function(obj, new_obj) {\n  var name;\n\n  if (obj === new_obj) {\n    return obj;\n  }\n\n  for (name in new_obj) {\n    obj[name] = new_obj[name];\n  }\n\n  return obj;\n};\n\nvar replace_object = function(obj, replace) {\n  var name;\n\n  if (obj === replace) {\n    return obj;\n  }\n\n  for (name in replace) {\n    if (obj[name] != undefined) {\n      obj[name] = replace[name];\n    }\n  }\n\n  return obj;\n};\n\nvar array_map = function(array, callback) {\n  var original_callback_params = Array.prototype.slice.call(arguments, 2),\n      array_return = [],\n      array_length = array.length,\n      i;\n\n  if (Array.prototype.map && array.map === Array.prototype.map) {\n    array_return = Array.prototype.map.call(array, function(item) {\n      var callback_params = original_callback_params.slice(0);\n      callback_params.splice(0, 0, item);\n\n      return callback.apply(this, callback_params);\n    });\n  }\n  else {\n    for (i = 0; i < array_length; i++) {\n      callback_params = original_callback_params;\n      callback_params.splice(0, 0, array[i]);\n      array_return.push(callback.apply(this, callback_params));\n    }\n  }\n\n  return array_return;\n};\n\nvar array_flat = function(array) {\n  var new_array = [],\n      i;\n\n  for (i = 0; i < array.length; i++) {\n    new_array = new_array.concat(array[i]);\n  }\n\n  return new_array;\n};\n\nvar coordsToLatLngs = function(coords, useGeoJSON) {\n  var first_coord = coords[0],\n      second_coord = coords[1];\n\n  if (useGeoJSON) {\n    first_coord = coords[1];\n    second_coord = coords[0];\n  }\n\n  return new google.maps.LatLng(first_coord, second_coord);\n};\n\nvar arrayToLatLng = function(coords, useGeoJSON) {\n  var i;\n\n  for (i = 0; i < coords.length; i++) {\n    if (!(coords[i] instanceof google.maps.LatLng)) {\n      if (coords[i].length > 0 && typeof(coords[i][0]) === \"object\") {\n        coords[i] = arrayToLatLng(coords[i], useGeoJSON);\n      }\n      else {\n        coords[i] = coordsToLatLngs(coords[i], useGeoJSON);\n      }\n    }\n  }\n\n  return coords;\n};\n\n\nvar getElementsByClassName = function (class_name, context) {\n\n    var element,\n        _class = class_name.replace('.', '');\n\n    if ('jQuery' in this && context) {\n        element = $(\".\" + _class, context)[0];\n    } else {\n        element = document.getElementsByClassName(_class)[0];\n    }\n    return element;\n\n};\n\nvar getElementById = function(id, context) {\n  var element,\n  id = id.replace('#', '');\n\n  if ('jQuery' in window && context) {\n    element = $('#' + id, context)[0];\n  } else {\n    element = document.getElementById(id);\n  };\n\n  return element;\n};\n\nvar findAbsolutePosition = function(obj)  {\n  var curleft = 0,\n      curtop = 0;\n\n  if (obj.offsetParent) {\n    do {\n      curleft += obj.offsetLeft;\n      curtop += obj.offsetTop;\n    } while (obj = obj.offsetParent);\n  }\n\n  return [curleft, curtop];\n};\n\nvar GMaps = (function(global) {\n  \"use strict\";\n\n  var doc = document;\n\n  var GMaps = function(options) {\n    if (!this) return new GMaps(options);\n\n    options.zoom = options.zoom || 15;\n    options.mapType = options.mapType || 'roadmap';\n\n    var self = this,\n        i,\n        events_that_hide_context_menu = [\n          'bounds_changed', 'center_changed', 'click', 'dblclick', 'drag',\n          'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed',\n          'resize', 'tilesloaded', 'zoom_changed'\n        ],\n        events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover'],\n        options_to_be_deleted = ['el', 'lat', 'lng', 'mapType', 'width', 'height', 'markerClusterer', 'enableNewStyle'],\n        identifier = options.el || options.div,\n        markerClustererFunction = options.markerClusterer,\n        mapType = google.maps.MapTypeId[options.mapType.toUpperCase()],\n        map_center = new google.maps.LatLng(options.lat, options.lng),\n        zoomControl = options.zoomControl || true,\n        zoomControlOpt = options.zoomControlOpt || {\n          style: 'DEFAULT',\n          position: 'TOP_LEFT'\n        },\n        zoomControlStyle = zoomControlOpt.style || 'DEFAULT',\n        zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT',\n        panControl = options.panControl || true,\n        mapTypeControl = options.mapTypeControl || true,\n        scaleControl = options.scaleControl || true,\n        streetViewControl = options.streetViewControl || true,\n        overviewMapControl = overviewMapControl || true,\n        map_options = {},\n        map_base_options = {\n          zoom: this.zoom,\n          center: map_center,\n          mapTypeId: mapType\n        },\n        map_controls_options = {\n          panControl: panControl,\n          zoomControl: zoomControl,\n          zoomControlOptions: {\n            style: google.maps.ZoomControlStyle[zoomControlStyle],\n            position: google.maps.ControlPosition[zoomControlPosition]\n          },\n          mapTypeControl: mapTypeControl,\n          scaleControl: scaleControl,\n          streetViewControl: streetViewControl,\n          overviewMapControl: overviewMapControl\n        };\n\n      if (typeof(options.el) === 'string' || typeof(options.div) === 'string') {\n\n          if (identifier.indexOf(\"#\") > -1) {\n              this.el = getElementById(identifier, options.context);\n          } else {\n              this.el = getElementsByClassName.apply(this, [identifier, options.context]);\n          }\n\n      } else {\n          this.el = identifier;\n      }\n\n    if (typeof(this.el) === 'undefined' || this.el === null) {\n      throw 'No element defined.';\n    }\n\n    window.context_menu = window.context_menu || {};\n    window.context_menu[self.el.id] = {};\n\n    this.controls = [];\n    this.overlays = [];\n    this.layers = []; // array with kml/georss and fusiontables layers, can be as many\n    this.singleLayers = {}; // object with the other layers, only one per layer\n    this.markers = [];\n    this.polylines = [];\n    this.routes = [];\n    this.polygons = [];\n    this.infoWindow = null;\n    this.overlay_el = null;\n    this.zoom = options.zoom;\n    this.registered_events = {};\n\n    this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth;\n    this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight;\n\n    google.maps.visualRefresh = options.enableNewStyle;\n\n    for (i = 0; i < options_to_be_deleted.length; i++) {\n      delete options[options_to_be_deleted[i]];\n    }\n\n    if(options.disableDefaultUI != true) {\n      map_base_options = extend_object(map_base_options, map_controls_options);\n    }\n\n    map_options = extend_object(map_base_options, options);\n\n    for (i = 0; i < events_that_hide_context_menu.length; i++) {\n      delete map_options[events_that_hide_context_menu[i]];\n    }\n\n    for (i = 0; i < events_that_doesnt_hide_context_menu.length; i++) {\n      delete map_options[events_that_doesnt_hide_context_menu[i]];\n    }\n\n    this.map = new google.maps.Map(this.el, map_options);\n\n    if (markerClustererFunction) {\n      this.markerClusterer = markerClustererFunction.apply(this, [this.map]);\n    }\n\n    var buildContextMenuHTML = function(control, e) {\n      var html = '',\n          options = window.context_menu[self.el.id][control];\n\n      for (var i in options){\n        if (options.hasOwnProperty(i)) {\n          var option = options[i];\n\n          html += '<li><a id=\"' + control + '_' + i + '\" href=\"#\">' + option.title + '</a></li>';\n        }\n      }\n\n      if (!getElementById('gmaps_context_menu')) return;\n\n      var context_menu_element = getElementById('gmaps_context_menu');\n      \n      context_menu_element.innerHTML = html;\n\n      var context_menu_items = context_menu_element.getElementsByTagName('a'),\n          context_menu_items_count = context_menu_items.length,\n          i;\n\n      for (i = 0; i < context_menu_items_count; i++) {\n        var context_menu_item = context_menu_items[i];\n\n        var assign_menu_item_action = function(ev){\n          ev.preventDefault();\n\n          options[this.id.replace(control + '_', '')].action.apply(self, [e]);\n          self.hideContextMenu();\n        };\n\n        google.maps.event.clearListeners(context_menu_item, 'click');\n        google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false);\n      }\n\n      var position = findAbsolutePosition.apply(this, [self.el]),\n          left = position[0] + e.pixel.x - 15,\n          top = position[1] + e.pixel.y- 15;\n\n      context_menu_element.style.left = left + \"px\";\n      context_menu_element.style.top = top + \"px\";\n\n      context_menu_element.style.display = 'block';\n    };\n\n    this.buildContextMenu = function(control, e) {\n      if (control === 'marker') {\n        e.pixel = {};\n\n        var overlay = new google.maps.OverlayView();\n        overlay.setMap(self.map);\n        \n        overlay.draw = function() {\n          var projection = overlay.getProjection(),\n              position = e.marker.getPosition();\n          \n          e.pixel = projection.fromLatLngToContainerPixel(position);\n\n          buildContextMenuHTML(control, e);\n        };\n      }\n      else {\n        buildContextMenuHTML(control, e);\n      }\n    };\n\n    this.setContextMenu = function(options) {\n      window.context_menu[self.el.id][options.control] = {};\n\n      var i,\n          ul = doc.createElement('ul');\n\n      for (i in options.options) {\n        if (options.options.hasOwnProperty(i)) {\n          var option = options.options[i];\n\n          window.context_menu[self.el.id][options.control][option.name] = {\n            title: option.title,\n            action: option.action\n          };\n        }\n      }\n\n      ul.id = 'gmaps_context_menu';\n      ul.style.display = 'none';\n      ul.style.position = 'absolute';\n      ul.style.minWidth = '100px';\n      ul.style.background = 'white';\n      ul.style.listStyle = 'none';\n      ul.style.padding = '8px';\n      ul.style.boxShadow = '2px 2px 6px #ccc';\n\n      doc.body.appendChild(ul);\n\n      var context_menu_element = getElementById('gmaps_context_menu')\n\n      google.maps.event.addDomListener(context_menu_element, 'mouseout', function(ev) {\n        if (!ev.relatedTarget || !this.contains(ev.relatedTarget)) {\n          window.setTimeout(function(){\n            context_menu_element.style.display = 'none';\n          }, 400);\n        }\n      }, false);\n    };\n\n    this.hideContextMenu = function() {\n      var context_menu_element = getElementById('gmaps_context_menu');\n\n      if (context_menu_element) {\n        context_menu_element.style.display = 'none';\n      }\n    };\n\n    var setupListener = function(object, name) {\n      google.maps.event.addListener(object, name, function(e){\n        if (e == undefined) {\n          e = this;\n        }\n\n        options[name].apply(this, [e]);\n\n        self.hideContextMenu();\n      });\n    };\n\n    //google.maps.event.addListener(this.map, 'idle', this.hideContextMenu);\n    google.maps.event.addListener(this.map, 'zoom_changed', this.hideContextMenu);\n\n    for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) {\n      var name = events_that_hide_context_menu[ev];\n\n      if (name in options) {\n        setupListener(this.map, name);\n      }\n    }\n\n    for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) {\n      var name = events_that_doesnt_hide_context_menu[ev];\n\n      if (name in options) {\n        setupListener(this.map, name);\n      }\n    }\n\n    google.maps.event.addListener(this.map, 'rightclick', function(e) {\n      if (options.rightclick) {\n        options.rightclick.apply(this, [e]);\n      }\n\n      if(window.context_menu[self.el.id]['map'] != undefined) {\n        self.buildContextMenu('map', e);\n      }\n    });\n\n    this.refresh = function() {\n      google.maps.event.trigger(this.map, 'resize');\n    };\n\n    this.fitZoom = function() {\n      var latLngs = [],\n          markers_length = this.markers.length,\n          i;\n\n      for (i = 0; i < markers_length; i++) {\n        if(typeof(this.markers[i].visible) === 'boolean' && this.markers[i].visible) {\n          latLngs.push(this.markers[i].getPosition());\n        }\n      }\n\n      this.fitLatLngBounds(latLngs);\n    };\n\n    this.fitLatLngBounds = function(latLngs) {\n      var total = latLngs.length,\n          bounds = new google.maps.LatLngBounds(),\n          i;\n\n      for(i = 0; i < total; i++) {\n        bounds.extend(latLngs[i]);\n      }\n\n      this.map.fitBounds(bounds);\n    };\n\n    this.setCenter = function(lat, lng, callback) {\n      this.map.panTo(new google.maps.LatLng(lat, lng));\n\n      if (callback) {\n        callback();\n      }\n    };\n\n    this.getElement = function() {\n      return this.el;\n    };\n\n    this.zoomIn = function(value) {\n      value = value || 1;\n\n      this.zoom = this.map.getZoom() + value;\n      this.map.setZoom(this.zoom);\n    };\n\n    this.zoomOut = function(value) {\n      value = value || 1;\n\n      this.zoom = this.map.getZoom() - value;\n      this.map.setZoom(this.zoom);\n    };\n\n    var native_methods = [],\n        method;\n\n    for (method in this.map) {\n      if (typeof(this.map[method]) == 'function' && !this[method]) {\n        native_methods.push(method);\n      }\n    }\n\n    for (i = 0; i < native_methods.length; i++) {\n      (function(gmaps, scope, method_name) {\n        gmaps[method_name] = function(){\n          return scope[method_name].apply(scope, arguments);\n        };\n      })(this, this.map, native_methods[i]);\n    }\n  };\n\n  return GMaps;\n})(this);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.events.js",
    "content": "GMaps.prototype.on = function(event_name, handler) {\n  return GMaps.on(event_name, this, handler);\n};\n\nGMaps.prototype.off = function(event_name) {\n  GMaps.off(event_name, this);\n};\n\nGMaps.custom_events = ['marker_added', 'marker_removed', 'polyline_added', 'polyline_removed', 'polygon_added', 'polygon_removed', 'geolocated', 'geolocation_failed'];\n\nGMaps.on = function(event_name, object, handler) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    if(object instanceof GMaps) object = object.map; \n    return google.maps.event.addListener(object, event_name, handler);\n  }\n  else {\n    var registered_event = {\n      handler : handler,\n      eventName : event_name\n    };\n\n    object.registered_events[event_name] = object.registered_events[event_name] || [];\n    object.registered_events[event_name].push(registered_event);\n\n    return registered_event;\n  }\n};\n\nGMaps.off = function(event_name, object) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    if(object instanceof GMaps) object = object.map; \n    google.maps.event.clearListeners(object, event_name);\n  }\n  else {\n    object.registered_events[event_name] = [];\n  }\n};\n\nGMaps.fire = function(event_name, object, scope) {\n  if (GMaps.custom_events.indexOf(event_name) == -1) {\n    google.maps.event.trigger(object, event_name, Array.prototype.slice.apply(arguments).slice(2));\n  }\n  else {\n    if(event_name in scope.registered_events) {\n      var firing_events = scope.registered_events[event_name];\n\n      for(var i = 0; i < firing_events.length; i++) {\n        (function(handler, scope, object) {\n          handler.apply(scope, [object]);\n        })(firing_events[i]['handler'], scope, object);\n      }\n    }\n  }\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.geofences.js",
    "content": "GMaps.prototype.checkGeofence = function(lat, lng, fence) {\n  return fence.containsLatLng(new google.maps.LatLng(lat, lng));\n};\n\nGMaps.prototype.checkMarkerGeofence = function(marker, outside_callback) {\n  if (marker.fences) {\n    for (var i = 0, fence; fence = marker.fences[i]; i++) {\n      var pos = marker.getPosition();\n      if (!this.checkGeofence(pos.lat(), pos.lng(), fence)) {\n        outside_callback(marker, fence);\n      }\n    }\n  }\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.geometry.js",
    "content": "GMaps.prototype.drawPolyline = function(options) {\n  var path = [],\n      points = options.path;\n\n  if (points.length) {\n    if (points[0][0] === undefined) {\n      path = points;\n    }\n    else {\n      for (var i = 0, latlng; latlng = points[i]; i++) {\n        path.push(new google.maps.LatLng(latlng[0], latlng[1]));\n      }\n    }\n  }\n\n  var polyline_options = {\n    map: this.map,\n    path: path,\n    strokeColor: options.strokeColor,\n    strokeOpacity: options.strokeOpacity,\n    strokeWeight: options.strokeWeight,\n    geodesic: options.geodesic,\n    clickable: true,\n    editable: false,\n    visible: true\n  };\n\n  if (options.hasOwnProperty(\"clickable\")) {\n    polyline_options.clickable = options.clickable;\n  }\n\n  if (options.hasOwnProperty(\"editable\")) {\n    polyline_options.editable = options.editable;\n  }\n\n  if (options.hasOwnProperty(\"icons\")) {\n    polyline_options.icons = options.icons;\n  }\n\n  if (options.hasOwnProperty(\"zIndex\")) {\n    polyline_options.zIndex = options.zIndex;\n  }\n\n  var polyline = new google.maps.Polyline(polyline_options);\n\n  var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polyline_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polyline, polyline_events[ev]);\n  }\n\n  this.polylines.push(polyline);\n\n  GMaps.fire('polyline_added', polyline, this);\n\n  return polyline;\n};\n\nGMaps.prototype.removePolyline = function(polyline) {\n  for (var i = 0; i < this.polylines.length; i++) {\n    if (this.polylines[i] === polyline) {\n      this.polylines[i].setMap(null);\n      this.polylines.splice(i, 1);\n\n      GMaps.fire('polyline_removed', polyline, this);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removePolylines = function() {\n  for (var i = 0, item; item = this.polylines[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.polylines = [];\n};\n\nGMaps.prototype.drawCircle = function(options) {\n  options =  extend_object({\n    map: this.map,\n    center: new google.maps.LatLng(options.lat, options.lng)\n  }, options);\n\n  delete options.lat;\n  delete options.lng;\n\n  var polygon = new google.maps.Circle(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  return polygon;\n};\n\nGMaps.prototype.drawRectangle = function(options) {\n  options = extend_object({\n    map: this.map\n  }, options);\n\n  var latLngBounds = new google.maps.LatLngBounds(\n    new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]),\n    new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1])\n  );\n\n  options.bounds = latLngBounds;\n\n  var polygon = new google.maps.Rectangle(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  return polygon;\n};\n\nGMaps.prototype.drawPolygon = function(options) {\n  var useGeoJSON = false;\n\n  if(options.hasOwnProperty(\"useGeoJSON\")) {\n    useGeoJSON = options.useGeoJSON;\n  }\n\n  delete options.useGeoJSON;\n\n  options = extend_object({\n    map: this.map\n  }, options);\n\n  if (useGeoJSON == false) {\n    options.paths = [options.paths.slice(0)];\n  }\n\n  if (options.paths.length > 0) {\n    if (options.paths[0].length > 0) {\n      options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON));\n    }\n  }\n\n  var polygon = new google.maps.Polygon(options),\n      polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick'];\n\n  for (var ev = 0; ev < polygon_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(e){\n          options[name].apply(this, [e]);\n        });\n      }\n    })(polygon, polygon_events[ev]);\n  }\n\n  this.polygons.push(polygon);\n\n  GMaps.fire('polygon_added', polygon, this);\n\n  return polygon;\n};\n\nGMaps.prototype.removePolygon = function(polygon) {\n  for (var i = 0; i < this.polygons.length; i++) {\n    if (this.polygons[i] === polygon) {\n      this.polygons[i].setMap(null);\n      this.polygons.splice(i, 1);\n\n      GMaps.fire('polygon_removed', polygon, this);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removePolygons = function() {\n  for (var i = 0, item; item = this.polygons[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.polygons = [];\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.layers.js",
    "content": "GMaps.prototype.getFromFusionTables = function(options) {\n  var events = options.events;\n\n  delete options.events;\n\n  var fusion_tables_options = options,\n      layer = new google.maps.FusionTablesLayer(fusion_tables_options);\n\n  for (var ev in events) {\n    (function(object, name) {\n      google.maps.event.addListener(object, name, function(e) {\n        events[name].apply(this, [e]);\n      });\n    })(layer, ev);\n  }\n\n  this.layers.push(layer);\n\n  return layer;\n};\n\nGMaps.prototype.loadFromFusionTables = function(options) {\n  var layer = this.getFromFusionTables(options);\n  layer.setMap(this.map);\n\n  return layer;\n};\n\nGMaps.prototype.getFromKML = function(options) {\n  var url = options.url,\n      events = options.events;\n\n  delete options.url;\n  delete options.events;\n\n  var kml_options = options,\n      layer = new google.maps.KmlLayer(url, kml_options);\n\n  for (var ev in events) {\n    (function(object, name) {\n      google.maps.event.addListener(object, name, function(e) {\n        events[name].apply(this, [e]);\n      });\n    })(layer, ev);\n  }\n\n  this.layers.push(layer);\n\n  return layer;\n};\n\nGMaps.prototype.loadFromKML = function(options) {\n  var layer = this.getFromKML(options);\n  layer.setMap(this.map);\n\n  return layer;\n};\n\nGMaps.prototype.addLayer = function(layerName, options) {\n  //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places'];\n  options = options || {};\n  var layer;\n\n  switch(layerName) {\n    case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer();\n      break;\n    case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer();\n      break;\n    case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer();\n      break;\n    case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer();\n      break;\n    case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer();\n      break;\n    case 'panoramio':\n        this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer();\n        layer.setTag(options.filter);\n        delete options.filter;\n\n        //click event\n        if (options.click) {\n          google.maps.event.addListener(layer, 'click', function(event) {\n            options.click(event);\n            delete options.click;\n          });\n        }\n      break;\n      case 'places':\n        this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map);\n\n        //search, nearbySearch, radarSearch callback, Both are the same\n        if (options.search || options.nearbySearch || options.radarSearch) {\n          var placeSearchRequest  = {\n            bounds : options.bounds || null,\n            keyword : options.keyword || null,\n            location : options.location || null,\n            name : options.name || null,\n            radius : options.radius || null,\n            rankBy : options.rankBy || null,\n            types : options.types || null\n          };\n\n          if (options.radarSearch) {\n            layer.radarSearch(placeSearchRequest, options.radarSearch);\n          }\n\n          if (options.search) {\n            layer.search(placeSearchRequest, options.search);\n          }\n\n          if (options.nearbySearch) {\n            layer.nearbySearch(placeSearchRequest, options.nearbySearch);\n          }\n        }\n\n        //textSearch callback\n        if (options.textSearch) {\n          var textSearchRequest  = {\n            bounds : options.bounds || null,\n            location : options.location || null,\n            query : options.query || null,\n            radius : options.radius || null\n          };\n\n          layer.textSearch(textSearchRequest, options.textSearch);\n        }\n      break;\n  }\n\n  if (layer !== undefined) {\n    if (typeof layer.setOptions == 'function') {\n      layer.setOptions(options);\n    }\n    if (typeof layer.setMap == 'function') {\n      layer.setMap(this.map);\n    }\n\n    return layer;\n  }\n};\n\nGMaps.prototype.removeLayer = function(layer) {\n  if (typeof(layer) == \"string\" && this.singleLayers[layer] !== undefined) {\n     this.singleLayers[layer].setMap(null);\n\n     delete this.singleLayers[layer];\n  }\n  else {\n    for (var i = 0; i < this.layers.length; i++) {\n      if (this.layers[i] === layer) {\n        this.layers[i].setMap(null);\n        this.layers.splice(i, 1);\n\n        break;\n      }\n    }\n  }\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.map_types.js",
    "content": "GMaps.prototype.addMapType = function(mapTypeId, options) {\n  if (options.hasOwnProperty(\"getTileUrl\") && typeof(options[\"getTileUrl\"]) == \"function\") {\n    options.tileSize = options.tileSize || new google.maps.Size(256, 256);\n\n    var mapType = new google.maps.ImageMapType(options);\n\n    this.map.mapTypes.set(mapTypeId, mapType);\n  }\n  else {\n    throw \"'getTileUrl' function required.\";\n  }\n};\n\nGMaps.prototype.addOverlayMapType = function(options) {\n  if (options.hasOwnProperty(\"getTile\") && typeof(options[\"getTile\"]) == \"function\") {\n    var overlayMapTypeIndex = options.index;\n\n    delete options.index;\n\n    this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options);\n  }\n  else {\n    throw \"'getTile' function required.\";\n  }\n};\n\nGMaps.prototype.removeOverlayMapType = function(overlayMapTypeIndex) {\n  this.map.overlayMapTypes.removeAt(overlayMapTypeIndex);\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.markers.js",
    "content": "GMaps.prototype.createMarker = function(options) {\n  if (options.lat == undefined && options.lng == undefined && options.position == undefined) {\n    throw 'No latitude or longitude defined.';\n  }\n\n  var self = this,\n      details = options.details,\n      fences = options.fences,\n      outside = options.outside,\n      base_options = {\n        position: new google.maps.LatLng(options.lat, options.lng),\n        map: null\n      },\n      marker_options = extend_object(base_options, options);\n\n  delete marker_options.lat;\n  delete marker_options.lng;\n  delete marker_options.fences;\n  delete marker_options.outside;\n\n  var marker = new google.maps.Marker(marker_options);\n\n  marker.fences = fences;\n\n  if (options.infoWindow) {\n    marker.infoWindow = new google.maps.InfoWindow(options.infoWindow);\n\n    var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed'];\n\n    for (var ev = 0; ev < info_window_events.length; ev++) {\n      (function(object, name) {\n        if (options.infoWindow[name]) {\n          google.maps.event.addListener(object, name, function(e){\n            options.infoWindow[name].apply(this, [e]);\n          });\n        }\n      })(marker.infoWindow, info_window_events[ev]);\n    }\n  }\n\n  var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed'];\n\n  var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup'];\n\n  for (var ev = 0; ev < marker_events.length; ev++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(){\n          options[name].apply(this, [this]);\n        });\n      }\n    })(marker, marker_events[ev]);\n  }\n\n  for (var ev = 0; ev < marker_events_with_mouse.length; ev++) {\n    (function(map, object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(me){\n          if(!me.pixel){\n            me.pixel = map.getProjection().fromLatLngToPoint(me.latLng)\n          }\n          \n          options[name].apply(this, [me]);\n        });\n      }\n    })(this.map, marker, marker_events_with_mouse[ev]);\n  }\n\n  google.maps.event.addListener(marker, 'click', function() {\n    this.details = details;\n\n    if (options.click) {\n      options.click.apply(this, [this]);\n    }\n\n    if (marker.infoWindow) {\n      self.hideInfoWindows();\n      marker.infoWindow.open(self.map, marker);\n    }\n  });\n\n  google.maps.event.addListener(marker, 'rightclick', function(e) {\n    e.marker = this;\n\n    if (options.rightclick) {\n      options.rightclick.apply(this, [e]);\n    }\n\n    if (window.context_menu[self.el.id]['marker'] != undefined) {\n      self.buildContextMenu('marker', e);\n    }\n  });\n\n  if (marker.fences) {\n    google.maps.event.addListener(marker, 'dragend', function() {\n      self.checkMarkerGeofence(marker, function(m, f) {\n        outside(m, f);\n      });\n    });\n  }\n\n  return marker;\n};\n\nGMaps.prototype.addMarker = function(options) {\n  var marker;\n  if(options.hasOwnProperty('gm_accessors_')) {\n    // Native google.maps.Marker object\n    marker = options;\n  }\n  else {\n    if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) {\n      marker = this.createMarker(options);\n    }\n    else {\n      throw 'No latitude or longitude defined.';\n    }\n  }\n\n  marker.setMap(this.map);\n\n  if(this.markerClusterer) {\n    this.markerClusterer.addMarker(marker);\n  }\n\n  this.markers.push(marker);\n\n  GMaps.fire('marker_added', marker, this);\n\n  return marker;\n};\n\nGMaps.prototype.addMarkers = function(array) {\n  for (var i = 0, marker; marker=array[i]; i++) {\n    this.addMarker(marker);\n  }\n\n  return this.markers;\n};\n\nGMaps.prototype.hideInfoWindows = function() {\n  for (var i = 0, marker; marker = this.markers[i]; i++){\n    if (marker.infoWindow) {\n      marker.infoWindow.close();\n    }\n  }\n};\n\nGMaps.prototype.removeMarker = function(marker) {\n  for (var i = 0; i < this.markers.length; i++) {\n    if (this.markers[i] === marker) {\n      this.markers[i].setMap(null);\n      this.markers.splice(i, 1);\n\n      if(this.markerClusterer) {\n        this.markerClusterer.removeMarker(marker);\n      }\n\n      GMaps.fire('marker_removed', marker, this);\n\n      break;\n    }\n  }\n\n  return marker;\n};\n\nGMaps.prototype.removeMarkers = function (collection) {\n  var new_markers = [];\n\n  if (typeof collection == 'undefined') {\n    for (var i = 0; i < this.markers.length; i++) {\n      var marker = this.markers[i];\n      marker.setMap(null);\n\n      if(this.markerClusterer) {\n        this.markerClusterer.removeMarker(marker);\n      }\n\n      GMaps.fire('marker_removed', marker, this);\n    }\n    \n    this.markers = new_markers;\n  }\n  else {\n    for (var i = 0; i < collection.length; i++) {\n      var index = this.markers.indexOf(collection[i]);\n\n      if (index > -1) {\n        var marker = this.markers[index];\n        marker.setMap(null);\n\n        if(this.markerClusterer) {\n          this.markerClusterer.removeMarker(marker);\n        }\n\n        GMaps.fire('marker_removed', marker, this);\n      }\n    }\n\n    for (var i = 0; i < this.markers.length; i++) {\n      var marker = this.markers[i];\n      if (marker.getMap() != null) {\n        new_markers.push(marker);\n      }\n    }\n\n    this.markers = new_markers;\n  }\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.native_extensions.js",
    "content": "//==========================\n// Polygon containsLatLng\n// https://github.com/tparkin/Google-Maps-Point-in-Polygon\n// Poygon getBounds extension - google-maps-extensions\n// http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js\nif (!google.maps.Polygon.prototype.getBounds) {\n  google.maps.Polygon.prototype.getBounds = function(latLng) {\n    var bounds = new google.maps.LatLngBounds();\n    var paths = this.getPaths();\n    var path;\n\n    for (var p = 0; p < paths.getLength(); p++) {\n      path = paths.getAt(p);\n      for (var i = 0; i < path.getLength(); i++) {\n        bounds.extend(path.getAt(i));\n      }\n    }\n\n    return bounds;\n  };\n}\n\nif (!google.maps.Polygon.prototype.containsLatLng) {\n  // Polygon containsLatLng - method to determine if a latLng is within a polygon\n  google.maps.Polygon.prototype.containsLatLng = function(latLng) {\n    // Exclude points outside of bounds as there is no way they are in the poly\n    var bounds = this.getBounds();\n\n    if (bounds !== null && !bounds.contains(latLng)) {\n      return false;\n    }\n\n    // Raycast point in polygon method\n    var inPoly = false;\n\n    var numPaths = this.getPaths().getLength();\n    for (var p = 0; p < numPaths; p++) {\n      var path = this.getPaths().getAt(p);\n      var numPoints = path.getLength();\n      var j = numPoints - 1;\n\n      for (var i = 0; i < numPoints; i++) {\n        var vertex1 = path.getAt(i);\n        var vertex2 = path.getAt(j);\n\n        if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) {\n          if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {\n            inPoly = !inPoly;\n          }\n        }\n\n        j = i;\n      }\n    }\n\n    return inPoly;\n  };\n}\n\nif (!google.maps.Circle.prototype.containsLatLng) {\n  google.maps.Circle.prototype.containsLatLng = function(latLng) {\n    if (google.maps.geometry) {\n      return google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();\n    }\n    else {\n      return true;\n    }\n  };\n}\n\ngoogle.maps.LatLngBounds.prototype.containsLatLng = function(latLng) {\n  return this.contains(latLng);\n};\n\ngoogle.maps.Marker.prototype.setFences = function(fences) {\n  this.fences = fences;\n};\n\ngoogle.maps.Marker.prototype.addFence = function(fence) {\n  this.fences.push(fence);\n};\n\ngoogle.maps.Marker.prototype.getId = function() {\n  return this['__gm_id'];\n};\n\n//==========================\n// Array indexOf\n// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf\nif (!Array.prototype.indexOf) {\n  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n      \"use strict\";\n      if (this == null) {\n          throw new TypeError();\n      }\n      var t = Object(this);\n      var len = t.length >>> 0;\n      if (len === 0) {\n          return -1;\n      }\n      var n = 0;\n      if (arguments.length > 1) {\n          n = Number(arguments[1]);\n          if (n != n) { // shortcut for verifying if it's NaN\n              n = 0;\n          } else if (n != 0 && n != Infinity && n != -Infinity) {\n              n = (n > 0 || -1) * Math.floor(Math.abs(n));\n          }\n      }\n      if (n >= len) {\n          return -1;\n      }\n      var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n      for (; k < len; k++) {\n          if (k in t && t[k] === searchElement) {\n              return k;\n          }\n      }\n      return -1;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.overlays.js",
    "content": "GMaps.prototype.drawOverlay = function(options) {\n  var overlay = new google.maps.OverlayView(),\n      auto_show = true;\n\n  overlay.setMap(this.map);\n\n  if (options.auto_show != null) {\n    auto_show = options.auto_show;\n  }\n\n  overlay.onAdd = function() {\n    var el = document.createElement('div');\n\n    el.style.borderStyle = \"none\";\n    el.style.borderWidth = \"0px\";\n    el.style.position = \"absolute\";\n    el.style.zIndex = 100;\n    el.innerHTML = options.content;\n\n    overlay.el = el;\n\n    if (!options.layer) {\n      options.layer = 'overlayLayer';\n    }\n    \n    var panes = this.getPanes(),\n        overlayLayer = panes[options.layer],\n        stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown'];\n\n    overlayLayer.appendChild(el);\n\n    for (var ev = 0; ev < stop_overlay_events.length; ev++) {\n      (function(object, name) {\n        google.maps.event.addDomListener(object, name, function(e){\n          if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) {\n            e.cancelBubble = true;\n            e.returnValue = false;\n          }\n          else {\n            e.stopPropagation();\n          }\n        });\n      })(el, stop_overlay_events[ev]);\n    }\n\n    if (options.click) {\n      panes.overlayMouseTarget.appendChild(overlay.el);\n      google.maps.event.addDomListener(overlay.el, 'click', function() {\n        options.click.apply(overlay, [overlay]);\n      });\n    }\n\n    google.maps.event.trigger(this, 'ready');\n  };\n\n  overlay.draw = function() {\n    var projection = this.getProjection(),\n        pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng));\n\n    options.horizontalOffset = options.horizontalOffset || 0;\n    options.verticalOffset = options.verticalOffset || 0;\n\n    var el = overlay.el,\n        content = el.children[0],\n        content_height = content.clientHeight,\n        content_width = content.clientWidth;\n\n    switch (options.verticalAlign) {\n      case 'top':\n        el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px';\n        break;\n      default:\n      case 'middle':\n        el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px';\n        break;\n      case 'bottom':\n        el.style.top = (pixel.y + options.verticalOffset) + 'px';\n        break;\n    }\n\n    switch (options.horizontalAlign) {\n      case 'left':\n        el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px';\n        break;\n      default:\n      case 'center':\n        el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px';\n        break;\n      case 'right':\n        el.style.left = (pixel.x + options.horizontalOffset) + 'px';\n        break;\n    }\n\n    el.style.display = auto_show ? 'block' : 'none';\n\n    if (!auto_show) {\n      options.show.apply(this, [el]);\n    }\n  };\n\n  overlay.onRemove = function() {\n    var el = overlay.el;\n\n    if (options.remove) {\n      options.remove.apply(this, [el]);\n    }\n    else {\n      overlay.el.parentNode.removeChild(overlay.el);\n      overlay.el = null;\n    }\n  };\n\n  this.overlays.push(overlay);\n  return overlay;\n};\n\nGMaps.prototype.removeOverlay = function(overlay) {\n  for (var i = 0; i < this.overlays.length; i++) {\n    if (this.overlays[i] === overlay) {\n      this.overlays[i].setMap(null);\n      this.overlays.splice(i, 1);\n\n      break;\n    }\n  }\n};\n\nGMaps.prototype.removeOverlays = function() {\n  for (var i = 0, item; item = this.overlays[i]; i++) {\n    item.setMap(null);\n  }\n\n  this.overlays = [];\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.routes.js",
    "content": "var travelMode, unitSystem;\n\nGMaps.prototype.getRoutes = function(options) {\n  switch (options.travelMode) {\n    case 'bicycling':\n      travelMode = google.maps.TravelMode.BICYCLING;\n      break;\n    case 'transit':\n      travelMode = google.maps.TravelMode.TRANSIT;\n      break;\n    case 'driving':\n      travelMode = google.maps.TravelMode.DRIVING;\n      break;\n    default:\n      travelMode = google.maps.TravelMode.WALKING;\n      break;\n  }\n\n  if (options.unitSystem === 'imperial') {\n    unitSystem = google.maps.UnitSystem.IMPERIAL;\n  }\n  else {\n    unitSystem = google.maps.UnitSystem.METRIC;\n  }\n\n  var base_options = {\n        avoidHighways: false,\n        avoidTolls: false,\n        optimizeWaypoints: false,\n        waypoints: []\n      },\n      request_options =  extend_object(base_options, options);\n\n  request_options.origin = /string/.test(typeof options.origin) ? options.origin : new google.maps.LatLng(options.origin[0], options.origin[1]);\n  request_options.destination = /string/.test(typeof options.destination) ? options.destination : new google.maps.LatLng(options.destination[0], options.destination[1]);\n  request_options.travelMode = travelMode;\n  request_options.unitSystem = unitSystem;\n\n  delete request_options.callback;\n  delete request_options.error;\n\n  var self = this,\n      service = new google.maps.DirectionsService();\n\n  service.route(request_options, function(result, status) {\n    if (status === google.maps.DirectionsStatus.OK) {\n      for (var r in result.routes) {\n        if (result.routes.hasOwnProperty(r)) {\n          self.routes.push(result.routes[r]);\n        }\n      }\n\n      if (options.callback) {\n        options.callback(self.routes);\n      }\n    }\n    else {\n      if (options.error) {\n        options.error(result, status);\n      }\n    }\n  });\n};\n\nGMaps.prototype.removeRoutes = function() {\n  this.routes = [];\n};\n\nGMaps.prototype.getElevations = function(options) {\n  options = extend_object({\n    locations: [],\n    path : false,\n    samples : 256\n  }, options);\n\n  if (options.locations.length > 0) {\n    if (options.locations[0].length > 0) {\n      options.locations = array_flat(array_map([options.locations], arrayToLatLng,  false));\n    }\n  }\n\n  var callback = options.callback;\n  delete options.callback;\n\n  var service = new google.maps.ElevationService();\n\n  //location request\n  if (!options.path) {\n    delete options.path;\n    delete options.samples;\n\n    service.getElevationForLocations(options, function(result, status) {\n      if (callback && typeof(callback) === \"function\") {\n        callback(result, status);\n      }\n    });\n  //path request\n  } else {\n    var pathRequest = {\n      path : options.locations,\n      samples : options.samples\n    };\n\n    service.getElevationAlongPath(pathRequest, function(result, status) {\n     if (callback && typeof(callback) === \"function\") {\n        callback(result, status);\n      }\n    });\n  }\n};\n\nGMaps.prototype.cleanRoute = GMaps.prototype.removePolylines;\n\nGMaps.prototype.drawRoute = function(options) {\n  var self = this;\n\n  this.getRoutes({\n    origin: options.origin,\n    destination: options.destination,\n    travelMode: options.travelMode,\n    waypoints: options.waypoints,\n    unitSystem: options.unitSystem,\n    error: options.error,\n    callback: function(e) {\n      if (e.length > 0) {\n        var polyline_options = {\n          path: e[e.length - 1].overview_path,\n          strokeColor: options.strokeColor,\n          strokeOpacity: options.strokeOpacity,\n          strokeWeight: options.strokeWeight\n        };\n\n        if (options.hasOwnProperty(\"icons\")) {\n          polyline_options.icons = options.icons;\n        }\n\n        self.drawPolyline(polyline_options);\n        \n        if (options.callback) {\n          options.callback(e[e.length - 1]);\n        }\n      }\n    }\n  });\n};\n\nGMaps.prototype.travelRoute = function(options) {\n  if (options.origin && options.destination) {\n    this.getRoutes({\n      origin: options.origin,\n      destination: options.destination,\n      travelMode: options.travelMode,\n      waypoints : options.waypoints,\n      unitSystem: options.unitSystem,\n      error: options.error,\n      callback: function(e) {\n        //start callback\n        if (e.length > 0 && options.start) {\n          options.start(e[e.length - 1]);\n        }\n\n        //step callback\n        if (e.length > 0 && options.step) {\n          var route = e[e.length - 1];\n          if (route.legs.length > 0) {\n            var steps = route.legs[0].steps;\n            for (var i = 0, step; step = steps[i]; i++) {\n              step.step_number = i;\n              options.step(step, (route.legs[0].steps.length - 1));\n            }\n          }\n        }\n\n        //end callback\n        if (e.length > 0 && options.end) {\n           options.end(e[e.length - 1]);\n        }\n      }\n    });\n  }\n  else if (options.route) {\n    if (options.route.legs.length > 0) {\n      var steps = options.route.legs[0].steps;\n      for (var i = 0, step; step = steps[i]; i++) {\n        step.step_number = i;\n        options.step(step);\n      }\n    }\n  }\n};\n\nGMaps.prototype.drawSteppedRoute = function(options) {\n  var self = this;\n  \n  if (options.origin && options.destination) {\n    this.getRoutes({\n      origin: options.origin,\n      destination: options.destination,\n      travelMode: options.travelMode,\n      waypoints : options.waypoints,\n      error: options.error,\n      callback: function(e) {\n        //start callback\n        if (e.length > 0 && options.start) {\n          options.start(e[e.length - 1]);\n        }\n\n        //step callback\n        if (e.length > 0 && options.step) {\n          var route = e[e.length - 1];\n          if (route.legs.length > 0) {\n            var steps = route.legs[0].steps;\n            for (var i = 0, step; step = steps[i]; i++) {\n              step.step_number = i;\n              var polyline_options = {\n                path: step.path,\n                strokeColor: options.strokeColor,\n                strokeOpacity: options.strokeOpacity,\n                strokeWeight: options.strokeWeight\n              };\n\n              if (options.hasOwnProperty(\"icons\")) {\n                polyline_options.icons = options.icons;\n              }\n\n              self.drawPolyline(polyline_options);\n              options.step(step, (route.legs[0].steps.length - 1));\n            }\n          }\n        }\n\n        //end callback\n        if (e.length > 0 && options.end) {\n           options.end(e[e.length - 1]);\n        }\n      }\n    });\n  }\n  else if (options.route) {\n    if (options.route.legs.length > 0) {\n      var steps = options.route.legs[0].steps;\n      for (var i = 0, step; step = steps[i]; i++) {\n        step.step_number = i;\n        var polyline_options = {\n          path: step.path,\n          strokeColor: options.strokeColor,\n          strokeOpacity: options.strokeOpacity,\n          strokeWeight: options.strokeWeight\n        };\n\n        if (options.hasOwnProperty(\"icons\")) {\n          polyline_options.icons = options.icons;\n        }\n\n        self.drawPolyline(polyline_options);\n        options.step(step);\n      }\n    }\n  }\n};\n\nGMaps.Route = function(options) {\n  this.origin = options.origin;\n  this.destination = options.destination;\n  this.waypoints = options.waypoints;\n\n  this.map = options.map;\n  this.route = options.route;\n  this.step_count = 0;\n  this.steps = this.route.legs[0].steps;\n  this.steps_length = this.steps.length;\n\n  var polyline_options = {\n    path: new google.maps.MVCArray(),\n    strokeColor: options.strokeColor,\n    strokeOpacity: options.strokeOpacity,\n    strokeWeight: options.strokeWeight\n  };\n\n  if (options.hasOwnProperty(\"icons\")) {\n    polyline_options.icons = options.icons;\n  }\n\n  this.polyline = this.map.drawPolyline(polyline_options).getPath();\n};\n\nGMaps.Route.prototype.getRoute = function(options) {\n  var self = this;\n\n  this.map.getRoutes({\n    origin : this.origin,\n    destination : this.destination,\n    travelMode : options.travelMode,\n    waypoints : this.waypoints || [],\n    error: options.error,\n    callback : function() {\n      self.route = e[0];\n\n      if (options.callback) {\n        options.callback.call(self);\n      }\n    }\n  });\n};\n\nGMaps.Route.prototype.back = function() {\n  if (this.step_count > 0) {\n    this.step_count--;\n    var path = this.route.legs[0].steps[this.step_count].path;\n\n    for (var p in path){\n      if (path.hasOwnProperty(p)){\n        this.polyline.pop();\n      }\n    }\n  }\n};\n\nGMaps.Route.prototype.forward = function() {\n  if (this.step_count < this.steps_length) {\n    var path = this.route.legs[0].steps[this.step_count].path;\n\n    for (var p in path){\n      if (path.hasOwnProperty(p)){\n        this.polyline.push(path[p]);\n      }\n    }\n    this.step_count++;\n  }\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.static.js",
    "content": "GMaps.prototype.toImage = function(options) {\n  var options = options || {},\n      static_map_options = {};\n\n  static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight];\n  static_map_options['lat'] = this.getCenter().lat();\n  static_map_options['lng'] = this.getCenter().lng();\n\n  if (this.markers.length > 0) {\n    static_map_options['markers'] = [];\n    \n    for (var i = 0; i < this.markers.length; i++) {\n      static_map_options['markers'].push({\n        lat: this.markers[i].getPosition().lat(),\n        lng: this.markers[i].getPosition().lng()\n      });\n    }\n  }\n\n  if (this.polylines.length > 0) {\n    var polyline = this.polylines[0];\n    \n    static_map_options['polyline'] = {};\n    static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath());\n    static_map_options['polyline']['strokeColor'] = polyline.strokeColor\n    static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity\n    static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight\n  }\n\n  return GMaps.staticMapURL(static_map_options);\n};\n\nGMaps.staticMapURL = function(options){\n  var parameters = [],\n      data,\n      static_root = (location.protocol === 'file:' ? 'http:' : location.protocol ) + '//maps.googleapis.com/maps/api/staticmap';\n\n  if (options.url) {\n    static_root = options.url;\n    delete options.url;\n  }\n\n  static_root += '?';\n\n  var markers = options.markers;\n  \n  delete options.markers;\n\n  if (!markers && options.marker) {\n    markers = [options.marker];\n    delete options.marker;\n  }\n\n  var styles = options.styles;\n\n  delete options.styles;\n\n  var polyline = options.polyline;\n  delete options.polyline;\n\n  /** Map options **/\n  if (options.center) {\n    parameters.push('center=' + options.center);\n    delete options.center;\n  }\n  else if (options.address) {\n    parameters.push('center=' + options.address);\n    delete options.address;\n  }\n  else if (options.lat) {\n    parameters.push(['center=', options.lat, ',', options.lng].join(''));\n    delete options.lat;\n    delete options.lng;\n  }\n  else if (options.visible) {\n    var visible = encodeURI(options.visible.join('|'));\n    parameters.push('visible=' + visible);\n  }\n\n  var size = options.size;\n  if (size) {\n    if (size.join) {\n      size = size.join('x');\n    }\n    delete options.size;\n  }\n  else {\n    size = '630x300';\n  }\n  parameters.push('size=' + size);\n\n  if (!options.zoom && options.zoom !== false) {\n    options.zoom = 15;\n  }\n\n  var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true;\n  delete options.sensor;\n  parameters.push('sensor=' + sensor);\n\n  for (var param in options) {\n    if (options.hasOwnProperty(param)) {\n      parameters.push(param + '=' + options[param]);\n    }\n  }\n\n  /** Markers **/\n  if (markers) {\n    var marker, loc;\n\n    for (var i = 0; data = markers[i]; i++) {\n      marker = [];\n\n      if (data.size && data.size !== 'normal') {\n        marker.push('size:' + data.size);\n        delete data.size;\n      }\n      else if (data.icon) {\n        marker.push('icon:' + encodeURI(data.icon));\n        delete data.icon;\n      }\n\n      if (data.color) {\n        marker.push('color:' + data.color.replace('#', '0x'));\n        delete data.color;\n      }\n\n      if (data.label) {\n        marker.push('label:' + data.label[0].toUpperCase());\n        delete data.label;\n      }\n\n      loc = (data.address ? data.address : data.lat + ',' + data.lng);\n      delete data.address;\n      delete data.lat;\n      delete data.lng;\n\n      for(var param in data){\n        if (data.hasOwnProperty(param)) {\n          marker.push(param + ':' + data[param]);\n        }\n      }\n\n      if (marker.length || i === 0) {\n        marker.push(loc);\n        marker = marker.join('|');\n        parameters.push('markers=' + encodeURI(marker));\n      }\n      // New marker without styles\n      else {\n        marker = parameters.pop() + encodeURI('|' + loc);\n        parameters.push(marker);\n      }\n    }\n  }\n\n  /** Map Styles **/\n  if (styles) {\n    for (var i = 0; i < styles.length; i++) {\n      var styleRule = [];\n      if (styles[i].featureType){\n        styleRule.push('feature:' + styles[i].featureType.toLowerCase());\n      }\n\n      if (styles[i].elementType) {\n        styleRule.push('element:' + styles[i].elementType.toLowerCase());\n      }\n\n      for (var j = 0; j < styles[i].stylers.length; j++) {\n        for (var p in styles[i].stylers[j]) {\n          var ruleArg = styles[i].stylers[j][p];\n          if (p == 'hue' || p == 'color') {\n            ruleArg = '0x' + ruleArg.substring(1);\n          }\n          styleRule.push(p + ':' + ruleArg);\n        }\n      }\n\n      var rule = styleRule.join('|');\n      if (rule != '') {\n        parameters.push('style=' + rule);\n      }\n    }\n  }\n\n  /** Polylines **/\n  function parseColor(color, opacity) {\n    if (color[0] === '#'){\n      color = color.replace('#', '0x');\n\n      if (opacity) {\n        opacity = parseFloat(opacity);\n        opacity = Math.min(1, Math.max(opacity, 0));\n        if (opacity === 0) {\n          return '0x00000000';\n        }\n        opacity = (opacity * 255).toString(16);\n        if (opacity.length === 1) {\n          opacity += opacity;\n        }\n\n        color = color.slice(0,8) + opacity;\n      }\n    }\n    return color;\n  }\n\n  if (polyline) {\n    data = polyline;\n    polyline = [];\n\n    if (data.strokeWeight) {\n      polyline.push('weight:' + parseInt(data.strokeWeight, 10));\n    }\n\n    if (data.strokeColor) {\n      var color = parseColor(data.strokeColor, data.strokeOpacity);\n      polyline.push('color:' + color);\n    }\n\n    if (data.fillColor) {\n      var fillcolor = parseColor(data.fillColor, data.fillOpacity);\n      polyline.push('fillcolor:' + fillcolor);\n    }\n\n    var path = data.path;\n    if (path.join) {\n      for (var j=0, pos; pos=path[j]; j++) {\n        polyline.push(pos.join(','));\n      }\n    }\n    else {\n      polyline.push('enc:' + path);\n    }\n\n    polyline = polyline.join('|');\n    parameters.push('path=' + encodeURI(polyline));\n  }\n\n  /** Retina support **/\n  var dpi = window.devicePixelRatio || 1;\n  parameters.push('scale=' + dpi);\n\n  parameters = parameters.join('&');\n  return static_root + parameters;\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.streetview.js",
    "content": "GMaps.prototype.createPanorama = function(streetview_options) {\n  if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) {\n    streetview_options.lat = this.getCenter().lat();\n    streetview_options.lng = this.getCenter().lng();\n  }\n\n  this.panorama = GMaps.createPanorama(streetview_options);\n\n  this.map.setStreetView(this.panorama);\n\n  return this.panorama;\n};\n\nGMaps.createPanorama = function(options) {\n  var el = getElementById(options.el, options.context);\n\n  options.position = new google.maps.LatLng(options.lat, options.lng);\n\n  delete options.el;\n  delete options.context;\n  delete options.lat;\n  delete options.lng;\n\n  var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'],\n      streetview_options = extend_object({visible : true}, options);\n\n  for (var i = 0; i < streetview_events.length; i++) {\n    delete streetview_options[streetview_events[i]];\n  }\n\n  var panorama = new google.maps.StreetViewPanorama(el, streetview_options);\n\n  for (var i = 0; i < streetview_events.length; i++) {\n    (function(object, name) {\n      if (options[name]) {\n        google.maps.event.addListener(object, name, function(){\n          options[name].apply(this);\n        });\n      }\n    })(panorama, streetview_events[i]);\n  }\n\n  return panorama;\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.styles.js",
    "content": "GMaps.prototype.addStyle = function(options) {\n  var styledMapType = new google.maps.StyledMapType(options.styles, { name: options.styledMapName });\n\n  this.map.mapTypes.set(options.mapTypeId, styledMapType);\n};\n\nGMaps.prototype.setStyle = function(mapTypeId) {\n  this.map.setMapTypeId(mapTypeId);\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/gmaps/lib/gmaps.utils.js",
    "content": "GMaps.geolocate = function(options) {\n  var complete_callback = options.always || options.complete;\n\n  if (navigator.geolocation) {\n    navigator.geolocation.getCurrentPosition(function(position) {\n      options.success(position);\n\n      if (complete_callback) {\n        complete_callback();\n      }\n    }, function(error) {\n      options.error(error);\n\n      if (complete_callback) {\n        complete_callback();\n      }\n    }, options.options);\n  }\n  else {\n    options.not_supported();\n\n    if (complete_callback) {\n      complete_callback();\n    }\n  }\n};\n\nGMaps.geocode = function(options) {\n  this.geocoder = new google.maps.Geocoder();\n  var callback = options.callback;\n  if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) {\n    options.latLng = new google.maps.LatLng(options.lat, options.lng);\n  }\n\n  delete options.lat;\n  delete options.lng;\n  delete options.callback;\n  \n  this.geocoder.geocode(options, function(results, status) {\n    callback(results, status);\n  });\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/hopscotch/css/hopscotch.css",
    "content": "/**! hopscotch - v0.2.5\n*\n* Copyright 2015 LinkedIn Corp. All rights reserved.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n*     http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n/**\n * This fade animation is based on Dan Eden's animate.css (http://daneden.me/animate/), under the terms of the MIT license.\n *\n * Copyright 2013 Dan Eden.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n.animated {\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  -ms-animation-fill-mode: both;\n  -o-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-duration: 1s;\n  -moz-animation-duration: 1s;\n  -ms-animation-duration: 1s;\n  -o-animation-duration: 1s;\n  animation-duration: 1s;\n}\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n  }\n}\n@-moz-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(20px);\n  }\n  100% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n  }\n}\n@-o-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(20px);\n  }\n  100% {\n    opacity: 1;\n    -o-transform: translateY(0);\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n.fade-in-up {\n  -webkit-animation-name: fadeInUp;\n  -moz-animation-name: fadeInUp;\n  -o-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n  }\n}\n@-moz-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(-20px);\n  }\n  100% {\n    opacity: 1;\n    -moz-transform: translateY(0);\n  }\n}\n@-o-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -ms-transform: translateY(-20px);\n  }\n  100% {\n    opacity: 1;\n    -ms-transform: translateY(0);\n  }\n}\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    transform: translateY(-20px);\n  }\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n.fade-in-down {\n  -webkit-animation-name: fadeInDown;\n  -moz-animation-name: fadeInDown;\n  -o-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n  }\n}\n@-moz-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(-20px);\n  }\n  100% {\n    opacity: 1;\n    -moz-transform: translateX(0);\n  }\n}\n@-o-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -o-transform: translateX(-20px);\n  }\n  100% {\n    opacity: 1;\n    -o-transform: translateX(0);\n  }\n}\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    transform: translateX(-20px);\n  }\n  100% {\n    opacity: 1;\n    transform: translateX(0);\n  }\n}\n.fade-in-right {\n  -webkit-animation-name: fadeInRight;\n  -moz-animation-name: fadeInRight;\n  -o-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n  }\n}\n@-moz-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(20px);\n  }\n  100% {\n    opacity: 1;\n    -moz-transform: translateX(0);\n  }\n}\n@-o-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -o-transform: translateX(20px);\n  }\n  100% {\n    opacity: 1;\n    -o-transform: translateX(0);\n  }\n}\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    transform: translateX(20px);\n  }\n  100% {\n    opacity: 1;\n    transform: translateX(0);\n  }\n}\n.fade-in-left {\n  -webkit-animation-name: fadeInLeft;\n  -moz-animation-name: fadeInLeft;\n  -o-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\ndiv.hopscotch-bubble .hopscotch-nav-button {\n  /* borrowed from katy styles */\n  font-weight: bold;\n  border-width: 1px;\n  border-style: solid;\n  cursor: pointer;\n  margin: 0;\n  overflow: visible;\n  text-decoration: none !important;\n  width: auto;\n  padding: 0 10px;\n  height: 26px;\n  line-height: 24px;\n  font-size: 12px;\n  *zoom: 1;\n  white-space: nowrap;\n  display: -moz-inline-stack;\n  display: inline-block;\n  *vertical-align: auto;\n  zoom: 1;\n  *display: inline;\n  vertical-align: middle;\n  -moz-border-radius: 3px;\n  -ms-border-radius: 3px;\n  -o-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\ndiv.hopscotch-bubble .hopscotch-nav-button:hover {\n  *zoom: 1;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n}\ndiv.hopscotch-bubble .hopscotch-nav-button:active {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset;\n  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset;\n}\ndiv.hopscotch-bubble .hopscotch-nav-button.next {\n  border-color: #1b5480;\n  color: #fff;\n  margin: 0 0 0 10px;\n  /* HS specific*/\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.35);\n  background-color: #287bbc;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#287bbc', endColorstr='#23639a');\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #287bbc), color-stop(100%, #23639a));\n  background-image: -webkit-linear-gradient(top, #287bbc 0%, #23639a 100%);\n  background-image: -moz-linear-gradient(top, #287bbc 0%, #23639a 100%);\n  background-image: -o-linear-gradient(top, #287bbc 0%, #23639a 100%);\n  background-image: linear-gradient(top, #287bbc 0%, #23639a 100%);\n}\ndiv.hopscotch-bubble .hopscotch-nav-button.next:hover {\n  background-color: #2672ae;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#2672ae', endColorstr='#1e4f7e');\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2672ae), color-stop(100%, #1e4f7e));\n  background-image: -webkit-linear-gradient(top, #2672ae 0%, #1e4f7e 100%);\n  background-image: -moz-linear-gradient(top, #2672ae 0%, #1e4f7e 100%);\n  background-image: -o-linear-gradient(top, #2672ae 0%, #1e4f7e 100%);\n  background-image: linear-gradient(top, #2672ae 0%, #1e4f7e 100%);\n}\ndiv.hopscotch-bubble .hopscotch-nav-button.prev {\n  border-color: #a7a7a7;\n  color: #444;\n  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);\n  background-color: #f2f2f2;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f2f2f2', endColorstr='#e9e9e9');\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f2f2f2), color-stop(100%, #e9e9e9));\n  background-image: -webkit-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%);\n  background-image: -moz-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%);\n  background-image: -o-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%);\n  background-image: linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%);\n}\ndiv.hopscotch-bubble .hopscotch-nav-button.prev:hover {\n  background-color: #e8e8e8;\n  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE8E8E8', endColorstr='#FFA9A9A9');\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e8e8e8), color-stop(13%, #e3e3e3), color-stop(32%, #d7d7d7), color-stop(71%, #b9b9b9), color-stop(100%, #a9a9a9));\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 71%, #a9a9a9 100%);\n  background-image: -moz-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 71%, #a9a9a9 100%);\n  background-image: -o-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 71%, #a9a9a9 100%);\n  background-image: linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 71%, #a9a9a9 100%);\n}\ndiv.hopscotch-bubble {\n  background-color: #ffffff;\n  border: 5px solid #000000;\n  /* default */\n  border: 5px solid rgba(0, 0, 0, 0.5);\n  /* transparent, if supported */\n  color: #333;\n  font-family: Helvetica, Arial;\n  font-size: 13px;\n  position: absolute;\n  z-index: 999999;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  -moz-background-clip: padding;\n  /* for Mozilla browsers*/\n  -webkit-background-clip: padding;\n  /* Webkit */\n  background-clip: padding-box;\n  /*  browsers with full support */\n}\ndiv.hopscotch-bubble * {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\ndiv.hopscotch-bubble.animate {\n  -moz-transition-property: top, left;\n  -moz-transition-duration: 1s;\n  -moz-transition-timing-function: ease-in-out;\n  -ms-transition-property: top, left;\n  -ms-transition-duration: 1s;\n  -ms-transition-timing-function: ease-in-out;\n  -o-transition-property: top, left;\n  -o-transition-duration: 1s;\n  -o-transition-timing-function: ease-in-out;\n  -webkit-transition-property: top, left;\n  -webkit-transition-duration: 1s;\n  -webkit-transition-timing-function: ease-in-out;\n  transition-property: top, left;\n  transition-duration: 1s;\n  transition-timing-function: ease-in-out;\n}\ndiv.hopscotch-bubble.invisible {\n  opacity: 0;\n}\ndiv.hopscotch-bubble.hide,\ndiv.hopscotch-bubble .hide,\ndiv.hopscotch-bubble .hide-all {\n  display: none;\n}\ndiv.hopscotch-bubble h3 {\n  color: #000;\n  font-family: Helvetica, Arial;\n  font-size: 16px;\n  font-weight: bold;\n  line-height: 19px;\n  margin: -1px 15px 0 0;\n  padding: 0;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-container {\n  padding: 15px;\n  position: relative;\n  text-align: left;\n  -webkit-font-smoothing: antialiased;\n  /* to fix text flickering */\n}\ndiv.hopscotch-bubble .hopscotch-content {\n  font-family: Helvetica, Arial;\n  font-weight: normal;\n  line-height: 17px;\n  margin: -5px 0 11px;\n  padding-top: 8px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-content {\n  margin: 0 0 0 40px;\n}\ndiv.hopscotch-bubble.no-number .hopscotch-bubble-content {\n  margin: 0;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-close {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border: 0;\n  color: #000;\n  background: transparent url(../img/sprite-green.png) -192px -92px no-repeat;\n  display: block;\n  padding: 8px;\n  position: absolute;\n  text-decoration: none;\n  text-indent: -9999px;\n  width: 8px;\n  height: 8px;\n  top: 0;\n  right: 0;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-close.hide,\ndiv.hopscotch-bubble .hopscotch-bubble-close.hide-all {\n  display: none;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-number {\n  background: transparent url(../img/sprite-green.png) 0 0 no-repeat;\n  color: #fff;\n  display: block;\n  float: left;\n  font-size: 17px;\n  font-weight: bold;\n  line-height: 31px;\n  padding: 0 10px 0 0;\n  text-align: center;\n  width: 30px;\n  height: 30px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container {\n  position: absolute;\n  width: 34px;\n  height: 34px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container .hopscotch-bubble-arrow,\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container .hopscotch-bubble-arrow-border {\n  width: 0;\n  height: 0;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up {\n  top: -22px;\n  left: 10px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow {\n  border-bottom: 17px solid #ffffff;\n  border-left: 17px solid transparent;\n  border-right: 17px solid transparent;\n  position: relative;\n  top: -10px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow-border {\n  border-bottom: 17px solid #000000;\n  border-bottom: 17px solid rgba(0, 0, 0, 0.5);\n  border-left: 17px solid transparent;\n  border-right: 17px solid transparent;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down {\n  bottom: -39px;\n  left: 10px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow {\n  border-top: 17px solid #ffffff;\n  border-left: 17px solid transparent;\n  border-right: 17px solid transparent;\n  position: relative;\n  top: -24px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow-border {\n  border-top: 17px solid #000000;\n  border-top: 17px solid rgba(0, 0, 0, 0.5);\n  border-left: 17px solid transparent;\n  border-right: 17px solid transparent;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left {\n  top: 10px;\n  left: -22px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow {\n  border-bottom: 17px solid transparent;\n  border-right: 17px solid #ffffff;\n  border-top: 17px solid transparent;\n  position: relative;\n  left: 7px;\n  top: -34px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow-border {\n  border-right: 17px solid #000000;\n  border-right: 17px solid rgba(0, 0, 0, 0.5);\n  border-bottom: 17px solid transparent;\n  border-top: 17px solid transparent;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right {\n  top: 10px;\n  right: -39px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow {\n  border-bottom: 17px solid transparent;\n  border-left: 17px solid #ffffff;\n  border-top: 17px solid transparent;\n  position: relative;\n  left: -7px;\n  top: -34px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow-border {\n  border-left: 17px solid #000000;\n  border-left: 17px solid rgba(0, 0, 0, 0.5);\n  border-bottom: 17px solid transparent;\n  border-top: 17px solid transparent;\n}\ndiv.hopscotch-bubble .hopscotch-actions {\n  margin: 10px 0 0;\n  text-align: right;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/hopscotch/js/hopscotch.js",
    "content": "/**! hopscotch - v0.2.5\n*\n* Copyright 2015 LinkedIn Corp. All rights reserved.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n*     http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n(function(context, factory) {\n  'use strict';\n\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    // Node/CommonJS\n    module.exports = factory();\n  } else {\n    var namespace = 'hopscotch';\n    // Browser globals\n    if (context[namespace]) {\n      // Hopscotch already exists.\n      return;\n    }\n    context[namespace] = factory();\n  }\n}(this, (function() {\n  var Hopscotch,\n      HopscotchBubble,\n      HopscotchCalloutManager,\n      HopscotchI18N,\n      customI18N,\n      customRenderer,\n      customEscape,\n      templateToUse = 'bubble_default',\n      Sizzle = window.Sizzle || null,\n      utils,\n      callbacks,\n      helpers,\n      winLoadHandler,\n      defaultOpts,\n      winHopscotch,\n      undefinedStr      = 'undefined',\n      waitingToStart    = false, // is a tour waiting for the document to finish\n                                 // loading so that it can start?\n      hasJquery         = (typeof jQuery !== undefinedStr),\n      hasSessionStorage = false,\n      isStorageWritable = false,\n      document          = window.document,\n      validIdRegEx      = /^[a-zA-Z]+[a-zA-Z0-9_-]*$/,\n      rtlMatches        = {\n        left: 'right',\n        right: 'left'\n      };\n\n  // If cookies are disabled, accessing sessionStorage can throw an error.\n  // sessionStorage could also throw an error in Safari on write (even though it exists).\n  // So, we'll try writing to sessionStorage to verify it's available.\n  try {\n    if(typeof window.sessionStorage !== undefinedStr){\n      hasSessionStorage = true;\n      sessionStorage.setItem('hopscotch.test.storage', 'ok');\n      sessionStorage.removeItem('hopscotch.test.storage');\n      isStorageWritable = true;\n    }\n  } catch (err) {}\n\n  defaultOpts       = {\n    smoothScroll:    true,\n    scrollDuration:  1000,\n    scrollTopMargin: 200,\n    showCloseButton: true,\n    showPrevButton:  false,\n    showNextButton:  true,\n    bubbleWidth:     280,\n    bubblePadding:   15,\n    arrowWidth:      20,\n    skipIfNoElement: true,\n    isRtl:           false,\n    cookieName:      'hopscotch.tour.state'\n  };\n\n  if (!Array.isArray) {\n    Array.isArray = function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  /**\n   * Called when the page is done loading.\n   *\n   * @private\n   */\n  winLoadHandler = function() {\n    if (waitingToStart) {\n      winHopscotch.startTour();\n    }\n  };\n\n  /**\n   * utils\n   * =====\n   * A set of utility functions, mostly for standardizing to manipulate\n   * and extract information from the DOM. Basically these are things I\n   * would normally use jQuery for, but I don't want to require it for\n   * this framework.\n   *\n   * @private\n   */\n  utils = {\n    /**\n     * addClass\n     * ========\n     * Adds one or more classes to a DOM element.\n     *\n     * @private\n     */\n    addClass: function(domEl, classToAdd) {\n      var domClasses,\n          classToAddArr,\n          setClass,\n          i,\n          len;\n\n      if (!domEl.className) {\n        domEl.className = classToAdd;\n      }\n      else {\n        classToAddArr = classToAdd.split(/\\s+/);\n        domClasses = ' ' + domEl.className + ' ';\n        for (i = 0, len = classToAddArr.length; i < len; ++i) {\n          if (domClasses.indexOf(' ' + classToAddArr[i] + ' ') < 0) {\n            domClasses += classToAddArr[i] + ' ';\n          }\n        }\n        domEl.className = domClasses.replace(/^\\s+|\\s+$/g,'');\n      }\n    },\n\n    /**\n     * removeClass\n     * ===========\n     * Remove one or more classes from a DOM element.\n     *\n     * @private\n     */\n    removeClass: function(domEl, classToRemove) {\n      var domClasses,\n          classToRemoveArr,\n          currClass,\n          i,\n          len;\n\n      classToRemoveArr = classToRemove.split(/\\s+/);\n      domClasses = ' ' + domEl.className + ' ';\n      for (i = 0, len = classToRemoveArr.length; i < len; ++i) {\n        domClasses = domClasses.replace(' ' + classToRemoveArr[i] + ' ', ' ');\n      }\n      domEl.className = domClasses.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    /**\n     * hasClass\n     * ========\n     * Determine if a given DOM element has a class.\n     */\n    hasClass: function(domEl, classToCheck){\n      var classes;\n\n      if(!domEl.className){ return false; }\n      classes = ' ' + domEl.className + ' ';\n      return (classes.indexOf(' ' + classToCheck + ' ') !== -1);\n    },\n\n    /**\n     * @private\n     */\n    getPixelValue: function(val) {\n      var valType = typeof val;\n      if (valType === 'number') { return val; }\n      if (valType === 'string') { return parseInt(val, 10); }\n      return 0;\n    },\n\n    /**\n     * Inspired by Python... returns val if it's defined, otherwise returns the default.\n     *\n     * @private\n     */\n    valOrDefault: function(val, valDefault) {\n      return typeof val !== undefinedStr ? val : valDefault;\n    },\n\n    /**\n     * Invokes a single callback represented by an array.\n     * Example input: [\"my_fn\", \"arg1\", 2, \"arg3\"]\n     * @private\n     */\n    invokeCallbackArrayHelper: function(arr) {\n      // Logic for a single callback\n      var fn;\n      if (Array.isArray(arr)) {\n        fn = helpers[arr[0]];\n        if (typeof fn === 'function') {\n          return fn.apply(this, arr.slice(1));\n        }\n      }\n    },\n\n    /**\n     * Invokes one or more callbacks. Array should have at most one level of nesting.\n     * Example input:\n     * [\"my_fn\", \"arg1\", 2, \"arg3\"]\n     * [[\"my_fn_1\", \"arg1\", \"arg2\"], [\"my_fn_2\", \"arg2-1\", \"arg2-2\"]]\n     * [[\"my_fn_1\", \"arg1\", \"arg2\"], function() { ... }]\n     * @private\n     */\n    invokeCallbackArray: function(arr) {\n      var i, len;\n\n      if (Array.isArray(arr)) {\n        if (typeof arr[0] === 'string') {\n          // Assume there are no nested arrays. This is the one and only callback.\n          return utils.invokeCallbackArrayHelper(arr);\n        }\n        else { // assume an array\n          for (i = 0, len = arr.length; i < len; ++i) {\n            utils.invokeCallback(arr[i]);\n          }\n        }\n      }\n    },\n\n    /**\n     * Helper function for invoking a callback, whether defined as a function literal\n     * or an array that references a registered helper function.\n     * @private\n     */\n    invokeCallback: function(cb) {\n      if (typeof cb === 'function') {\n        return cb();\n      }\n      if (typeof cb === 'string' && helpers[cb]) { // name of a helper\n        return helpers[cb]();\n      }\n      else { // assuming array\n        return utils.invokeCallbackArray(cb);\n      }\n    },\n\n    /**\n     * If stepCb (the step-specific helper callback) is passed in, then invoke\n     * it first. Then invoke tour-wide helper.\n     *\n     * @private\n     */\n    invokeEventCallbacks: function(evtType, stepCb) {\n      var cbArr = callbacks[evtType],\n          callback,\n          fn,\n          i,\n          len;\n\n      if (stepCb) {\n        return this.invokeCallback(stepCb);\n      }\n\n      for (i=0, len=cbArr.length; i<len; ++i) {\n        this.invokeCallback(cbArr[i].cb);\n      }\n    },\n\n    /**\n     * @private\n     */\n    getScrollTop: function() {\n      var scrollTop;\n      if (typeof window.pageYOffset !== undefinedStr) {\n        scrollTop = window.pageYOffset;\n      }\n      else {\n        // Most likely IE <=8, which doesn't support pageYOffset\n        scrollTop = document.documentElement.scrollTop;\n      }\n      return scrollTop;\n    },\n\n    /**\n     * @private\n     */\n    getScrollLeft: function() {\n      var scrollLeft;\n      if (typeof window.pageXOffset !== undefinedStr) {\n        scrollLeft = window.pageXOffset;\n      }\n      else {\n        // Most likely IE <=8, which doesn't support pageXOffset\n        scrollLeft = document.documentElement.scrollLeft;\n      }\n      return scrollLeft;\n    },\n\n    /**\n     * @private\n     */\n    getWindowHeight: function() {\n      return window.innerHeight || document.documentElement.clientHeight;\n    },\n\n    /**\n     * @private\n     */\n    addEvtListener: function(el, evtName, fn) {\n      if(el) {\n        return el.addEventListener ? el.addEventListener(evtName, fn, false) : el.attachEvent('on' + evtName, fn);\n      }\n    },\n\n    /**\n     * @private\n     */\n    removeEvtListener: function(el, evtName, fn) {\n      if(el) {\n        return el.removeEventListener ? el.removeEventListener(evtName, fn, false) : el.detachEvent('on' + evtName, fn);\n      }\n    },\n\n    documentIsReady: function() {\n      return document.readyState === 'complete';\n    },\n\n    /**\n     * @private\n     */\n    evtPreventDefault: function(evt) {\n      if (evt.preventDefault) {\n        evt.preventDefault();\n      }\n      else if (event) {\n        event.returnValue = false;\n      }\n    },\n\n    /**\n     * @private\n     */\n    extend: function(obj1, obj2) {\n      var prop;\n      for (prop in obj2) {\n        if (obj2.hasOwnProperty(prop)) {\n          obj1[prop] = obj2[prop];\n        }\n      }\n    },\n\n    /**\n     * Helper function to get a single target DOM element. We will try to\n     * locate the DOM element through several ways, in the following order:\n     *\n     * 1) Passing the string into document.querySelector\n     * 2) Passing the string to jQuery, if it exists\n     * 3) Passing the string to Sizzle, if it exists\n     * 4) Calling document.getElementById if it is a plain id\n     *\n     * Default case is to assume the string is a plain id and call\n     * document.getElementById on it.\n     *\n     * @private\n     */\n    getStepTargetHelper: function(target){\n      var result = document.getElementById(target);\n\n      //Backwards compatibility: assume the string is an id\n      if (result) {\n        return result;\n      }\n      if (hasJquery) {\n        result = jQuery(target);\n        return result.length ? result[0] : null;\n      }\n      if (Sizzle) {\n        result = new Sizzle(target);\n        return result.length ? result[0] : null;\n      }\n      if (document.querySelector) {\n        try {\n          return document.querySelector(target);\n        } catch (err) {}\n      }\n      // Regex test for id. Following the HTML 4 spec for valid id formats.\n      // (http://www.w3.org/TR/html4/types.html#type-id)\n      if (/^#[a-zA-Z][\\w-_:.]*$/.test(target)) {\n        return document.getElementById(target.substring(1));\n      }\n\n      return null;\n    },\n\n    /**\n     * Given a step, returns the target DOM element associated with it. It is\n     * recommended to only assign one target per step. However, there are\n     * some use cases which require multiple step targets to be supplied. In\n     * this event, we will use the first target in the array that we can\n     * locate on the page. See the comments for getStepTargetHelper for more\n     * information.\n     *\n     * @private\n     */\n    getStepTarget: function(step) {\n      var queriedTarget;\n\n      if (!step || !step.target) {\n        return null;\n      }\n\n      if (typeof step.target === 'string') {\n        //Just one target to test. Check and return its results.\n        return utils.getStepTargetHelper(step.target);\n      }\n      else if (Array.isArray(step.target)) {\n        // Multiple items to check. Check each and return the first success.\n        // Assuming they are all strings.\n        var i,\n            len;\n\n        for (i = 0, len = step.target.length; i < len; i++){\n          if (typeof step.target[i] === 'string') {\n            queriedTarget = utils.getStepTargetHelper(step.target[i]);\n\n            if (queriedTarget) {\n              return queriedTarget;\n            }\n          }\n        }\n        return null;\n      }\n\n      // Assume that the step.target is a DOM element\n      return step.target;\n    },\n\n    /**\n     * Convenience method for getting an i18n string. Returns custom i18n value\n     * or the default i18n value if no custom value exists.\n     *\n     * @private\n     */\n    getI18NString: function(key) {\n      return customI18N[key] || HopscotchI18N[key];\n    },\n\n    // Tour session persistence for multi-page tours. Uses HTML5 sessionStorage if available, then\n    // falls back to using cookies.\n    //\n    // The following cookie-related logic is borrowed from:\n    // http://www.quirksmode.org/js/cookies.html\n\n    /**\n     * @private\n     */\n    setState: function(name,value,days) {\n      var expires = '',\n          date;\n\n      if (hasSessionStorage && isStorageWritable) {\n        try{\n          sessionStorage.setItem(name, value);\n        }\n        catch(err){\n          isStorageWritable = false;\n          this.setState(name, value, days);\n        }\n      }\n      else {\n        if(hasSessionStorage){\n          //Clear out existing sessionStorage key so the new value we set to cookie gets read.\n          //(If we're here, we've run into an error while trying to write to sessionStorage).\n          sessionStorage.removeItem(name);\n        }\n        if (days) {\n          date = new Date();\n          date.setTime(date.getTime()+(days*24*60*60*1000));\n          expires = '; expires='+date.toGMTString();\n        }\n        document.cookie = name+'='+value+expires+'; path=/';\n      }\n    },\n\n    /**\n     * @private\n     */\n    getState: function(name) {\n      var nameEQ = name + '=',\n          ca = document.cookie.split(';'),\n          i,\n          c,\n          state;\n\n      //return value from session storage if we have it\n      if (hasSessionStorage) {\n        state = sessionStorage.getItem(name);\n        if(state){\n          return state;\n        }\n      }\n\n      //else, try cookies\n      for(i=0;i < ca.length;i++) {\n        c = ca[i];\n        while (c.charAt(0)===' ') {c = c.substring(1,c.length);}\n        if (c.indexOf(nameEQ) === 0) {\n          state = c.substring(nameEQ.length,c.length);\n          break;\n        }\n      }\n\n      return state;\n    },\n\n    /**\n     * @private\n     */\n    clearState: function(name) {\n      if (hasSessionStorage) {\n        sessionStorage.removeItem(name);\n      }\n      else {\n        this.setState(name,'',-1);\n      }\n    },\n\n    /**\n     * Originally called it orientation, but placement is more intuitive.\n     * Allowing both for now for backwards compatibility.\n     * @private\n     */\n    normalizePlacement: function(step) {\n      if (!step.placement && step.orientation) {\n        step.placement = step.orientation;\n      }\n    },\n\n    /**\n     * If step is right-to-left enabled, flip the placement and xOffset, but only once.\n     * @private\n     */\n    flipPlacement: function(step){\n      if(step.isRtl && !step._isFlipped){\n        var props = ['orientation', 'placement'], prop, i;\n        if(step.xOffset){\n          step.xOffset = -1 * this.getPixelValue(step.xOffset);\n        }\n        for(i in props){\n          prop = props[i];\n          if(step.hasOwnProperty(prop) && rtlMatches.hasOwnProperty(step[prop])) {\n            step[prop] = rtlMatches[step[prop]];\n          }\n        }\n        step._isFlipped = true;\n      }\n    }\n  };\n\n  utils.addEvtListener(window, 'load', winLoadHandler);\n\n  callbacks = {\n    next:  [],\n    prev:  [],\n    start: [],\n    end:   [],\n    show:  [],\n    error: [],\n    close: []\n  };\n\n  /**\n   * helpers\n   * =======\n   * A map of functions to be used as callback listeners. Functions are\n   * added to and removed from the map using the functions\n   * Hopscotch.registerHelper() and Hopscotch.unregisterHelper().\n   */\n  helpers = {};\n\n  HopscotchI18N = {\n    stepNums: null,\n    nextBtn: 'Next',\n    prevBtn: 'Back',\n    doneBtn: 'Done',\n    skipBtn: 'Skip',\n    closeTooltip: 'Close'\n  };\n\n  customI18N = {}; // Developer's custom i18n strings goes here.\n\n  /**\n   * HopscotchBubble\n   *\n   * @class The HopscotchBubble class represents the view of a bubble. This class is also used for Hopscotch callouts.\n   */\n  HopscotchBubble = function(opt) {\n    this.init(opt);\n  };\n\n  HopscotchBubble.prototype = {\n    isShowing: false,\n\n    currStep: undefined,\n\n    /**\n     * setPosition\n     *\n     * Sets the position of the bubble using the bounding rectangle of the\n     * target element and the orientation and offset information specified by\n     * the JSON.\n     */\n    setPosition: function(step) {\n      var bubbleBoundingHeight,\n          bubbleBoundingWidth,\n          boundingRect,\n          top,\n          left,\n          arrowOffset,\n          verticalLeftPosition,\n          targetEl     = utils.getStepTarget(step),\n          el           = this.element,\n          arrowEl      = this.arrowEl,\n          arrowPos     = step.isRtl ? 'right' : 'left';\n\n      utils.flipPlacement(step);\n      utils.normalizePlacement(step);\n\n      bubbleBoundingWidth = el.offsetWidth;\n      bubbleBoundingHeight = el.offsetHeight;\n      utils.removeClass(el, 'fade-in-down fade-in-up fade-in-left fade-in-right');\n\n      // SET POSITION\n      boundingRect = targetEl.getBoundingClientRect();\n\n      verticalLeftPosition = step.isRtl ? boundingRect.right - bubbleBoundingWidth : boundingRect.left;\n\n      if (step.placement === 'top') {\n        top = (boundingRect.top - bubbleBoundingHeight) - this.opt.arrowWidth;\n        left = verticalLeftPosition;\n      }\n      else if (step.placement === 'bottom') {\n        top = boundingRect.bottom + this.opt.arrowWidth;\n        left = verticalLeftPosition;\n      }\n      else if (step.placement === 'left') {\n        top = boundingRect.top;\n        left = boundingRect.left - bubbleBoundingWidth - this.opt.arrowWidth;\n      }\n      else if (step.placement === 'right') {\n        top = boundingRect.top;\n        left = boundingRect.right + this.opt.arrowWidth;\n      }\n      else {\n        throw new Error('Bubble placement failed because step.placement is invalid or undefined!');\n      }\n\n      // SET (OR RESET) ARROW OFFSETS\n      if (step.arrowOffset !== 'center') {\n        arrowOffset = utils.getPixelValue(step.arrowOffset);\n      }\n      else {\n        arrowOffset = step.arrowOffset;\n      }\n      if (!arrowOffset) {\n        arrowEl.style.top = '';\n        arrowEl.style[arrowPos] = '';\n      }\n      else if (step.placement === 'top' || step.placement === 'bottom') {\n        arrowEl.style.top = '';\n        if (arrowOffset === 'center') {\n          arrowEl.style[arrowPos] = Math.floor((bubbleBoundingWidth / 2) - arrowEl.offsetWidth/2) + 'px';\n        }\n        else {\n          // Numeric pixel value\n          arrowEl.style[arrowPos] = arrowOffset + 'px';\n        }\n      }\n      else if (step.placement === 'left' || step.placement === 'right') {\n        arrowEl.style[arrowPos] = '';\n        if (arrowOffset === 'center') {\n          arrowEl.style.top = Math.floor((bubbleBoundingHeight / 2) - arrowEl.offsetHeight/2) + 'px';\n        }\n        else {\n          // Numeric pixel value\n          arrowEl.style.top = arrowOffset + 'px';\n        }\n      }\n\n      // HORIZONTAL OFFSET\n      if (step.xOffset === 'center') {\n        left = (boundingRect.left + targetEl.offsetWidth/2) - (bubbleBoundingWidth / 2);\n      }\n      else {\n        left += utils.getPixelValue(step.xOffset);\n      }\n      // VERTICAL OFFSET\n      if (step.yOffset === 'center') {\n        top = (boundingRect.top + targetEl.offsetHeight/2) - (bubbleBoundingHeight / 2);\n      }\n      else {\n        top += utils.getPixelValue(step.yOffset);\n      }\n\n      // ADJUST TOP FOR SCROLL POSITION\n      if (!step.fixedElement) {\n        top += utils.getScrollTop();\n        left += utils.getScrollLeft();\n      }\n\n      // ACCOUNT FOR FIXED POSITION ELEMENTS\n      el.style.position = (step.fixedElement ? 'fixed' : 'absolute');\n\n      el.style.top = top + 'px';\n      el.style.left = left + 'px';\n    },\n\n    /**\n     * Renders the bubble according to the step JSON.\n     *\n     * @param {Object} step Information defining how the bubble should look.\n     * @param {Number} idx The index of the step in the tour. Not used for callouts.\n     * @param {Function} callback Function to be invoked after rendering is finished.\n     */\n    render: function(step, idx, callback) {\n      var el = this.element,\n          tourSpecificRenderer,\n          customTourData,\n          unsafe,\n          currTour,\n          totalSteps,\n          totalStepsI18n,\n          nextBtnText,\n          isLast,\n          opts;\n\n      // Cache current step information.\n      if (step) {\n        this.currStep = step;\n      }\n      else if (this.currStep) {\n        step = this.currStep;\n      }\n\n      // Check current tour for total number of steps and custom render data\n      if(this.opt.isTourBubble){\n        currTour = winHopscotch.getCurrTour();\n        if(currTour){\n          customTourData = currTour.customData;\n          tourSpecificRenderer = currTour.customRenderer;\n          step.isRtl = step.hasOwnProperty('isRtl') ? step.isRtl :\n            (currTour.hasOwnProperty('isRtl') ? currTour.isRtl : this.opt.isRtl);\n          unsafe = currTour.unsafe;\n          if(Array.isArray(currTour.steps)){\n            totalSteps = currTour.steps.length;\n            totalStepsI18n = this._getStepI18nNum(this._getStepNum(totalSteps - 1));\n            isLast = (this._getStepNum(idx) === this._getStepNum(totalSteps - 1));\n          }\n        }\n      }else{\n        customTourData = step.customData;\n        tourSpecificRenderer = step.customRenderer;\n        unsafe = step.unsafe;\n        step.isRtl = step.hasOwnProperty('isRtl') ? step.isRtl : this.opt.isRtl;\n      }\n\n      // Determine label for next button\n      if(isLast){\n        nextBtnText = utils.getI18NString('doneBtn');\n      } else if(step.showSkip) {\n        nextBtnText = utils.getI18NString('skipBtn');\n      } else {\n        nextBtnText = utils.getI18NString('nextBtn');\n      }\n\n      utils.flipPlacement(step);\n      utils.normalizePlacement(step);\n\n      this.placement = step.placement;\n\n      // Setup the configuration options we want to pass along to the template\n      opts = {\n        i18n: {\n          prevBtn: utils.getI18NString('prevBtn'),\n          nextBtn: nextBtnText,\n          closeTooltip: utils.getI18NString('closeTooltip'),\n          stepNum: this._getStepI18nNum(this._getStepNum(idx)),\n          numSteps: totalStepsI18n\n        },\n        buttons:{\n          showPrev: (utils.valOrDefault(step.showPrevButton, this.opt.showPrevButton) && (this._getStepNum(idx) > 0)),\n          showNext: utils.valOrDefault(step.showNextButton, this.opt.showNextButton),\n          showCTA: utils.valOrDefault((step.showCTAButton && step.ctaLabel), false),\n          ctaLabel: step.ctaLabel,\n          showClose: utils.valOrDefault(this.opt.showCloseButton, true)\n        },\n        step:{\n          num: idx,\n          isLast: utils.valOrDefault(isLast, false),\n          title: (step.title || ''),\n          content: (step.content || ''),\n          isRtl: step.isRtl,\n          placement: step.placement,\n          padding: utils.valOrDefault(step.padding, this.opt.bubblePadding),\n          width: utils.getPixelValue(step.width) || this.opt.bubbleWidth,\n          customData: (step.customData || {})\n        },\n        tour:{\n          isTour: this.opt.isTourBubble,\n          numSteps: totalSteps,\n          unsafe: utils.valOrDefault(unsafe, false),\n          customData: (customTourData || {})\n        }\n      };\n\n      // Render the bubble's content.\n      // Use tour renderer if available, then the global customRenderer if defined.\n      if(typeof tourSpecificRenderer === 'function'){\n        el.innerHTML = tourSpecificRenderer(opts);\n      }\n      else if(typeof tourSpecificRenderer === 'string'){\n        if(!winHopscotch.templates || (typeof winHopscotch.templates[tourSpecificRenderer] !== 'function')){\n          throw new Error('Bubble rendering failed - template \"' + tourSpecificRenderer + '\" is not a function.');\n        }\n        el.innerHTML = winHopscotch.templates[tourSpecificRenderer](opts);\n      }\n      else if(customRenderer){\n        el.innerHTML = customRenderer(opts);\n      }\n      else{\n        if(!winHopscotch.templates || (typeof winHopscotch.templates[templateToUse] !== 'function')){\n          throw new Error('Bubble rendering failed - template \"' + templateToUse + '\" is not a function.');\n        }\n        el.innerHTML = winHopscotch.templates[templateToUse](opts);\n      }\n\n      // Find arrow among new child elements.\n      children = el.children;\n      numChildren = children.length;\n      for (i = 0; i < numChildren; i++){\n        node = children[i];\n\n        if(utils.hasClass(node, 'hopscotch-arrow')){\n          this.arrowEl = node;\n        }\n      }\n\n      // Set z-index and arrow placement\n      el.style.zIndex = (typeof step.zindex === 'number') ? step.zindex : '';\n      this._setArrow(step.placement);\n\n      // Set bubble positioning\n      // Make sure we're using visibility:hidden instead of display:none for height/width calculations.\n      this.hide(false);\n      this.setPosition(step);\n\n      // only want to adjust window scroll for non-fixed elements\n      if (callback) {\n        callback(!step.fixedElement);\n      }\n\n      return this;\n    },\n    /**\n     * Get step number considering steps that were skipped because their target wasn't found\n     *\n     * @private\n     */\n    _getStepNum: function(idx) {\n      var skippedStepsCount = 0,\n          stepIdx,\n          skippedSteps = winHopscotch.getSkippedStepsIndexes(),\n          i,\n          len = skippedSteps.length;\n      //count number of steps skipped before current step\n      for(i = 0; i < len; i++) {\n        stepIdx = skippedSteps[i];\n        if(stepIdx<idx) {\n          skippedStepsCount++;\n        }\n      }\n      return idx - skippedStepsCount;\n    },\n    /**\n     * Get the I18N step number for the current step.\n     *\n     * @private\n     */\n    _getStepI18nNum: function(idx) {\n      var stepNumI18N = utils.getI18NString('stepNums');\n      if (stepNumI18N && idx < stepNumI18N.length) {\n        idx = stepNumI18N[idx];\n      }\n      else {\n        idx = idx + 1;\n      }\n      return idx;\n    },\n\n    /**\n     * Sets which side the arrow is on.\n     *\n     * @private\n     */\n    _setArrow: function(placement) {\n      utils.removeClass(this.arrowEl, 'down up right left');\n\n      // Whatever the orientation is, we want to arrow to appear\n      // \"opposite\" of the orientation. E.g., a top orientation\n      // requires a bottom arrow.\n      if (placement === 'top') {\n        utils.addClass(this.arrowEl, 'down');\n      }\n      else if (placement === 'bottom') {\n        utils.addClass(this.arrowEl, 'up');\n      }\n      else if (placement === 'left') {\n        utils.addClass(this.arrowEl, 'right');\n      }\n      else if (placement === 'right') {\n        utils.addClass(this.arrowEl, 'left');\n      }\n    },\n\n    /**\n     * @private\n     */\n    _getArrowDirection: function() {\n      if (this.placement === 'top') {\n        return 'down';\n      }\n      if (this.placement === 'bottom') {\n        return 'up';\n      }\n      if (this.placement === 'left') {\n        return 'right';\n      }\n      if (this.placement === 'right') {\n        return 'left';\n      }\n    },\n\n    show: function() {\n      var self      = this,\n          fadeClass = 'fade-in-' + this._getArrowDirection(),\n          fadeDur   = 1000;\n\n      utils.removeClass(this.element, 'hide');\n      utils.addClass(this.element, fadeClass);\n      setTimeout(function() {\n        utils.removeClass(self.element, 'invisible');\n      }, 50);\n      setTimeout(function() {\n        utils.removeClass(self.element, fadeClass);\n      }, fadeDur);\n      this.isShowing = true;\n      return this;\n    },\n\n    hide: function(remove) {\n      var el = this.element;\n\n      remove = utils.valOrDefault(remove, true);\n      el.style.top = '';\n      el.style.left = '';\n\n      // display: none\n      if (remove) {\n        utils.addClass(el, 'hide');\n        utils.removeClass(el, 'invisible');\n      }\n      // opacity: 0\n      else {\n        utils.removeClass(el, 'hide');\n        utils.addClass(el, 'invisible');\n      }\n      utils.removeClass(el, 'animate fade-in-up fade-in-down fade-in-right fade-in-left');\n      this.isShowing = false;\n      return this;\n    },\n\n    destroy: function() {\n      var el = this.element;\n\n      if (el) {\n        el.parentNode.removeChild(el);\n      }\n      utils.removeEvtListener(el, 'click', this.clickCb);\n    },\n\n    _handleBubbleClick: function(evt){\n      var action;\n\n      // Override evt for IE8 as IE8 doesn't pass event but binds it to window\n      evt = evt || window.event; // get window.event if argument is falsy (in IE)\n\n      // get srcElement if target is falsy (IE)\n      var targetElement = evt.target || evt.srcElement;\n\n      //Recursively look up the parent tree until we find a match\n      //with one of the classes we're looking for, or the triggering element.\n      function findMatchRecur(el){\n        /* We're going to make the assumption that we're not binding\n         * multiple event classes to the same element.\n         * (next + previous = wait... err... what?)\n         *\n         * In the odd event we end up with an element with multiple\n         * possible matches, the following priority order is applied:\n         * hopscotch-cta, hopscotch-next, hopscotch-prev, hopscotch-close\n         */\n         if(el === evt.currentTarget){ return null; }\n         if(utils.hasClass(el, 'hopscotch-cta')){ return 'cta'; }\n         if(utils.hasClass(el, 'hopscotch-next')){ return 'next'; }\n         if(utils.hasClass(el, 'hopscotch-prev')){ return 'prev'; }\n         if(utils.hasClass(el, 'hopscotch-close')){ return 'close'; }\n         /*else*/ return findMatchRecur(el.parentElement);\n      }\n\n      action = findMatchRecur(targetElement);\n\n      //Now that we know what action we should take, let's take it.\n      if (action === 'cta'){\n        if (!this.opt.isTourBubble) {\n          // This is a callout. Close the callout when CTA is clicked.\n          winHopscotch.getCalloutManager().removeCallout(this.currStep.id);\n        }\n        // Call onCTA callback if one is provided\n        if (this.currStep.onCTA) {\n          utils.invokeCallback(this.currStep.onCTA);\n        }\n      }\n      else if (action === 'next'){\n        winHopscotch.nextStep(true);\n      }\n      else if (action === 'prev'){\n        winHopscotch.prevStep(true);\n      }\n      else if (action === 'close'){\n        if (this.opt.isTourBubble){\n          var currStepNum   = winHopscotch.getCurrStepNum(),\n              currTour      = winHopscotch.getCurrTour(),\n              doEndCallback = (currStepNum === currTour.steps.length-1);\n\n          utils.invokeEventCallbacks('close');\n\n          winHopscotch.endTour(true, doEndCallback);\n        } else {\n          if (this.opt.onClose) {\n            utils.invokeCallback(this.opt.onClose);\n          }\n          if (this.opt.id && !this.opt.isTourBubble) {\n            // Remove via the HopscotchCalloutManager.\n            // removeCallout() calls HopscotchBubble.destroy internally.\n            winHopscotch.getCalloutManager().removeCallout(this.opt.id);\n          }\n          else {\n            this.destroy();\n          }\n        }\n\n        utils.evtPreventDefault(evt);\n      }\n      //Otherwise, do nothing. We didn't click on anything relevant.\n    },\n\n    init: function(initOpt) {\n      var el              = document.createElement('div'),\n          self            = this,\n          resizeCooldown  = false, // for updating after window resize\n          onWinResize,\n          appendToBody,\n          children,\n          numChildren,\n          node,\n          i,\n          currTour,\n          opt;\n\n      //Register DOM element for this bubble.\n      this.element = el;\n\n      //Merge bubble options with defaults.\n      opt = {\n        showPrevButton: defaultOpts.showPrevButton,\n        showNextButton: defaultOpts.showNextButton,\n        bubbleWidth:    defaultOpts.bubbleWidth,\n        bubblePadding:  defaultOpts.bubblePadding,\n        arrowWidth:     defaultOpts.arrowWidth,\n        isRtl:          defaultOpts.isRtl,\n        showNumber:     true,\n        isTourBubble:   true\n      };\n      initOpt = (typeof initOpt === undefinedStr ? {} : initOpt);\n      utils.extend(opt, initOpt);\n      this.opt = opt;\n\n      //Apply classes to bubble. Add \"animated\" for fade css animation\n      el.className = 'hopscotch-bubble animated';\n      if (!opt.isTourBubble) {\n        utils.addClass(el, 'hopscotch-callout no-number');\n      } else {\n        currTour = winHopscotch.getCurrTour();\n        if(currTour){\n          utils.addClass(el, 'tour-' + currTour.id);\n        }\n      }\n\n      /**\n       * Not pretty, but IE8 doesn't support Function.bind(), so I'm\n       * relying on closures to keep a handle of \"this\".\n       * Reset position of bubble when window is resized\n       *\n       * @private\n       */\n      onWinResize = function() {\n        if (resizeCooldown || !self.isShowing) {\n          return;\n        }\n\n        resizeCooldown = true;\n        setTimeout(function() {\n          self.setPosition(self.currStep);\n          resizeCooldown = false;\n        }, 100);\n      };\n\n      //Add listener to reset bubble position on window resize\n      utils.addEvtListener(window, 'resize', onWinResize);\n\n      //Create our click callback handler and keep a\n      //reference to it for later.\n      this.clickCb = function(evt){\n        self._handleBubbleClick(evt);\n      };\n      utils.addEvtListener(el, 'click', this.clickCb);\n\n      //Hide the bubble by default\n      this.hide();\n\n      //Finally, append our new bubble to body once the DOM is ready.\n      if (utils.documentIsReady()) {\n        document.body.appendChild(el);\n      }\n      else {\n        // Moz, webkit, Opera\n        if (document.addEventListener) {\n          appendToBody = function() {\n            document.removeEventListener('DOMContentLoaded', appendToBody);\n            window.removeEventListener('load', appendToBody);\n\n            document.body.appendChild(el);\n          };\n\n          document.addEventListener('DOMContentLoaded', appendToBody, false);\n        }\n        // IE\n        else {\n          appendToBody = function() {\n            if (document.readyState === 'complete') {\n              document.detachEvent('onreadystatechange', appendToBody);\n              window.detachEvent('onload', appendToBody);\n              document.body.appendChild(el);\n            }\n          };\n\n          document.attachEvent('onreadystatechange', appendToBody);\n        }\n        utils.addEvtListener(window, 'load', appendToBody);\n      }\n    }\n  };\n\n  /**\n   * HopscotchCalloutManager\n   *\n   * @class Manages the creation and destruction of single callouts.\n   * @constructor\n   */\n  HopscotchCalloutManager = function() {\n    var callouts = {},\n        calloutOpts = {};\n\n    /**\n     * createCallout\n     *\n     * Creates a standalone callout. This callout has the same API\n     * as a Hopscotch tour bubble.\n     *\n     * @param {Object} opt The options for the callout. For the most\n     * part, these are the same options as you would find in a tour\n     * step.\n     */\n    this.createCallout = function(opt) {\n      var callout;\n\n      if (opt.id) {\n        if(!validIdRegEx.test(opt.id)) {\n          throw new Error('Callout ID is using an invalid format. Use alphanumeric, underscores, and/or hyphens only. First character must be a letter.');\n        }\n        if (callouts[opt.id]) {\n          throw new Error('Callout by that id already exists. Please choose a unique id.');\n        }\n        if (!utils.getStepTarget(opt)) {\n          throw new Error('Must specify existing target element via \\'target\\' option.');\n        }\n        opt.showNextButton = opt.showPrevButton = false;\n        opt.isTourBubble = false;\n        callout = new HopscotchBubble(opt);\n        callouts[opt.id] = callout;\n        calloutOpts[opt.id] = opt;\n        callout.render(opt, null, function() {\n          callout.show();\n          if (opt.onShow) {\n            utils.invokeCallback(opt.onShow);\n          }\n        });\n      }\n      else {\n        throw new Error('Must specify a callout id.');\n      }\n      return callout;\n    };\n\n    /**\n     * getCallout\n     *\n     * Returns a callout by its id.\n     *\n     * @param {String} id The id of the callout to fetch.\n     * @returns {Object} HopscotchBubble\n     */\n    this.getCallout = function(id) {\n      return callouts[id];\n    };\n\n    /**\n     * removeAllCallouts\n     *\n     * Removes all existing callouts.\n     */\n    this.removeAllCallouts = function() {\n      var calloutId;\n\n      for (calloutId in callouts) {\n        if (callouts.hasOwnProperty(calloutId)) {\n          this.removeCallout(calloutId);\n        }\n      }\n    };\n\n    /**\n     * removeCallout\n     *\n     * Removes an existing callout by id.\n     *\n     * @param {String} id The id of the callout to remove.\n     */\n    this.removeCallout = function(id) {\n      var callout = callouts[id];\n\n      callouts[id] = null;\n      calloutOpts[id] = null;\n      if (!callout) { return; }\n\n      callout.destroy();\n    };\n\n    /**\n     * refreshCalloutPositions\n     *\n     * Refresh the positions for all callouts known by the\n     * callout manager. Typically you'll use\n     * hopscotch.refreshBubblePosition() to refresh ALL\n     * bubbles instead of calling this directly.\n     */\n    this.refreshCalloutPositions = function(){\n      var calloutId,\n          callout,\n          opts;\n\n      for (calloutId in callouts) {\n        if (callouts.hasOwnProperty(calloutId) && calloutOpts.hasOwnProperty(calloutId)) {\n          callout = callouts[calloutId];\n          opts = calloutOpts[calloutId];\n          if(callout && opts){\n            callout.setPosition(opts);\n          }\n        }\n      }\n    };\n  };\n\n  /**\n   * Hopscotch\n   *\n   * @class Creates the Hopscotch object. Used to manage tour progress and configurations.\n   * @constructor\n   * @param {Object} initOptions Options to be passed to `configure()`.\n   */\n  Hopscotch = function(initOptions) {\n    var self       = this, // for targetClickNextFn\n        bubble,\n        calloutMgr,\n        opt,\n        currTour,\n        currStepNum,\n        skippedSteps = {},\n        cookieTourId,\n        cookieTourStep,\n        cookieSkippedSteps = [],\n        _configure,\n\n    /**\n     * getBubble\n     *\n     * Singleton accessor function for retrieving or creating bubble object.\n     *\n     * @private\n     * @param setOptions {Boolean} when true, transfers configuration options to the bubble\n     * @returns {Object} HopscotchBubble\n     */\n    getBubble = function(setOptions) {\n      if (!bubble || !bubble.element || !bubble.element.parentNode) {\n        bubble = new HopscotchBubble(opt);\n      }\n      if (setOptions) {\n        utils.extend(bubble.opt, {\n          bubblePadding:   getOption('bubblePadding'),\n          bubbleWidth:     getOption('bubbleWidth'),\n          showNextButton:  getOption('showNextButton'),\n          showPrevButton:  getOption('showPrevButton'),\n          showCloseButton: getOption('showCloseButton'),\n          arrowWidth:      getOption('arrowWidth'),\n          isRtl:           getOption('isRtl')\n        });\n      }\n      return bubble;\n    },\n\n    /**\n     * Destroy the bubble currently associated with Hopscotch.\n     * This is done when we end the current tour.\n     *\n     * @private\n     */\n    destroyBubble = function() {\n      if(bubble){\n        bubble.destroy();\n        bubble = null;\n      }\n    },\n\n    /**\n     * Convenience method for getting an option. Returns custom config option\n     * or the default config option if no custom value exists.\n     *\n     * @private\n     * @param name {String} config option name\n     * @returns {Object} config option value\n     */\n    getOption = function(name) {\n      if (typeof opt === 'undefined') {\n        return defaultOpts[name];\n      }\n      return utils.valOrDefault(opt[name], defaultOpts[name]);\n    },\n\n    /**\n     * getCurrStep\n     *\n     * @private\n     * @returns {Object} the step object corresponding to the current value of currStepNum\n     */\n    getCurrStep = function() {\n      var step;\n\n      if (!currTour || currStepNum < 0 || currStepNum >= currTour.steps.length) {\n        step = null;\n      }\n      else {\n        step = currTour.steps[currStepNum];\n      }\n\n      return step;\n    },\n\n    /**\n     * Used for nextOnTargetClick\n     *\n     * @private\n     */\n    targetClickNextFn = function() {\n      self.nextStep();\n    },\n\n    /**\n     * adjustWindowScroll\n     *\n     * Checks if the bubble or target element is partially or completely\n     * outside of the viewport. If it is, adjust the window scroll position\n     * to bring it back into the viewport.\n     *\n     * @private\n     * @param {Function} cb Callback to invoke after done scrolling.\n     */\n    adjustWindowScroll = function(cb) {\n      var bubble         = getBubble(),\n\n          // Calculate the bubble element top and bottom position\n          bubbleEl       = bubble.element,\n          bubbleTop      = utils.getPixelValue(bubbleEl.style.top),\n          bubbleBottom   = bubbleTop + utils.getPixelValue(bubbleEl.offsetHeight),\n\n          // Calculate the target element top and bottom position\n          targetEl       = utils.getStepTarget(getCurrStep()),\n          targetBounds   = targetEl.getBoundingClientRect(),\n          targetElTop    = targetBounds.top + utils.getScrollTop(),\n          targetElBottom = targetBounds.bottom + utils.getScrollTop(),\n\n          // The higher of the two: bubble or target\n          targetTop      = (bubbleTop < targetElTop) ? bubbleTop : targetElTop,\n          // The lower of the two: bubble or target\n          targetBottom   = (bubbleBottom > targetElBottom) ? bubbleBottom : targetElBottom,\n\n          // Calculate the current viewport top and bottom\n          windowTop      = utils.getScrollTop(),\n          windowBottom   = windowTop + utils.getWindowHeight(),\n\n          // This is our final target scroll value.\n          scrollToVal    = targetTop - getOption('scrollTopMargin'),\n\n          scrollEl,\n          yuiAnim,\n          yuiEase,\n          direction,\n          scrollIncr,\n          scrollTimeout,\n          scrollTimeoutFn;\n\n      // Target and bubble are both visible in viewport\n      if (targetTop >= windowTop && (targetTop <= windowTop + getOption('scrollTopMargin') || targetBottom <= windowBottom)) {\n        if (cb) { cb(); } // HopscotchBubble.show\n      }\n\n      // Abrupt scroll to scroll target\n      else if (!getOption('smoothScroll')) {\n        window.scrollTo(0, scrollToVal);\n\n        if (cb) { cb(); } // HopscotchBubble.show\n      }\n\n      // Smooth scroll to scroll target\n      else {\n        // Use YUI if it exists\n        if (typeof YAHOO             !== undefinedStr &&\n            typeof YAHOO.env         !== undefinedStr &&\n            typeof YAHOO.env.ua      !== undefinedStr &&\n            typeof YAHOO.util        !== undefinedStr &&\n            typeof YAHOO.util.Scroll !== undefinedStr) {\n          scrollEl = YAHOO.env.ua.webkit ? document.body : document.documentElement;\n          yuiEase = YAHOO.util.Easing ? YAHOO.util.Easing.easeOut : undefined;\n          yuiAnim = new YAHOO.util.Scroll(scrollEl, {\n            scroll: { to: [0, scrollToVal] }\n          }, getOption('scrollDuration')/1000, yuiEase);\n          yuiAnim.onComplete.subscribe(cb);\n          yuiAnim.animate();\n        }\n\n        // Use jQuery if it exists\n        else if (hasJquery) {\n          jQuery('body, html').animate({ scrollTop: scrollToVal }, getOption('scrollDuration'), cb);\n        }\n\n        // Use my crummy setInterval scroll solution if we're using plain, vanilla Javascript.\n        else {\n          if (scrollToVal < 0) {\n            scrollToVal = 0;\n          }\n\n          // 48 * 10 == 480ms scroll duration\n          // make it slightly less than CSS transition duration because of\n          // setInterval overhead.\n          // To increase or decrease duration, change the divisor of scrollIncr.\n          direction = (windowTop > targetTop) ? -1 : 1; // -1 means scrolling up, 1 means down\n          scrollIncr = Math.abs(windowTop - scrollToVal) / (getOption('scrollDuration')/10);\n          scrollTimeoutFn = function() {\n            var scrollTop = utils.getScrollTop(),\n                scrollTarget = scrollTop + (direction * scrollIncr);\n\n            if ((direction > 0 && scrollTarget >= scrollToVal) ||\n                (direction < 0 && scrollTarget <= scrollToVal)) {\n              // Overshot our target. Just manually set to equal the target\n              // and clear the interval\n              scrollTarget = scrollToVal;\n              if (cb) { cb(); } // HopscotchBubble.show\n              window.scrollTo(0, scrollTarget);\n              return;\n            }\n\n            window.scrollTo(0, scrollTarget);\n\n            if (utils.getScrollTop() === scrollTop) {\n              // Couldn't scroll any further.\n              if (cb) { cb(); } // HopscotchBubble.show\n              return;\n            }\n\n            // If we reached this point, that means there's still more to scroll.\n            setTimeout(scrollTimeoutFn, 10);\n          };\n\n          scrollTimeoutFn();\n        }\n      }\n    },\n\n    /**\n     * goToStepWithTarget\n     *\n     * Helper function to increment the step number until a step is found where\n     * the step target exists or until we reach the end/beginning of the tour.\n     *\n     * @private\n     * @param {Number} direction Either 1 for incrementing or -1 for decrementing\n     * @param {Function} cb The callback function to be invoked when the step has been found\n     */\n    goToStepWithTarget = function(direction, cb) {\n      var target,\n          step,\n          goToStepFn;\n\n      if (currStepNum + direction >= 0 &&\n          currStepNum + direction < currTour.steps.length) {\n\n        currStepNum += direction;\n        step = getCurrStep();\n\n        goToStepFn = function() {\n          target = utils.getStepTarget(step);\n\n          if (target) {\n            //this step was previously skipped, but now its target exists,\n            //remove this step from skipped steps set\n            if(skippedSteps[currStepNum]) {\n              delete skippedSteps[currStepNum];\n            }\n            // We're done! Return the step number via the callback.\n            cb(currStepNum);\n          }\n          else {\n            //mark this step as skipped, since its target wasn't found\n            skippedSteps[currStepNum] = true;\n            // Haven't found a valid target yet. Recursively call\n            // goToStepWithTarget.\n            utils.invokeEventCallbacks('error');\n            goToStepWithTarget(direction, cb);\n          }\n        };\n\n        if (step.delay) {\n          setTimeout(goToStepFn, step.delay);\n        }\n        else {\n          goToStepFn();\n        }\n      }\n      else {\n        cb(-1); // signal that we didn't find any step with a valid target\n      }\n    },\n\n    /**\n     * changeStep\n     *\n     * Helper function to change step by going forwards or backwards 1.\n     * nextStep and prevStep are publicly accessible wrappers for this function.\n     *\n     * @private\n     * @param {Boolean} doCallbacks Flag for invoking onNext or onPrev callbacks\n     * @param {Number} direction Either 1 for \"next\" or -1 for \"prev\"\n     */\n    changeStep = function(doCallbacks, direction) {\n      var bubble = getBubble(),\n          self = this,\n          step,\n          origStep,\n          wasMultiPage,\n          changeStepCb;\n\n      bubble.hide();\n\n      doCallbacks = utils.valOrDefault(doCallbacks, true);\n\n      step = getCurrStep();\n\n      if (step.nextOnTargetClick) {\n        // Detach the listener when tour is moving to a different step\n        utils.removeEvtListener(utils.getStepTarget(step), 'click', targetClickNextFn);\n      }\n\n      origStep = step;\n      if (direction > 0) {\n        wasMultiPage = origStep.multipage;\n      }\n      else {\n        wasMultiPage = (currStepNum > 0 && currTour.steps[currStepNum-1].multipage);\n      }\n\n      /**\n       * Callback for goToStepWithTarget\n       *\n       * @private\n       */\n      changeStepCb = function(stepNum) {\n        var doShowFollowingStep;\n\n        if (stepNum === -1) {\n          // Wasn't able to find a step with an existing element. End tour.\n          return this.endTour(true);\n        }\n\n        if (doCallbacks) {\n          if (direction > 0) {\n            doShowFollowingStep = utils.invokeEventCallbacks('next', origStep.onNext);\n          }\n          else {\n            doShowFollowingStep = utils.invokeEventCallbacks('prev', origStep.onPrev);\n          }\n        }\n\n        // If the state of the tour is updated in a callback, assume the client\n        // doesn't want to go to next step since they specifically updated.\n        if (stepNum !== currStepNum) {\n          return;\n        }\n\n        if (wasMultiPage) {\n          // Update state for the next page\n           setStateHelper();\n\n          // Next step is on a different page, so no need to attempt to render it.\n          return;\n        }\n\n        doShowFollowingStep = utils.valOrDefault(doShowFollowingStep, true);\n\n        // If the onNext/onPrev callback returned false, halt the tour and\n        // don't show the next step.\n        if (doShowFollowingStep) {\n          this.showStep(stepNum);\n        }\n        else {\n          // Halt tour (but don't clear state)\n          this.endTour(false);\n        }\n      };\n\n      if (!wasMultiPage && getOption('skipIfNoElement')) {\n        goToStepWithTarget(direction, function(stepNum) {\n          changeStepCb.call(self, stepNum);\n        });\n      }\n      else if (currStepNum + direction >= 0 && currStepNum + direction < currTour.steps.length) {\n        // only try incrementing once, and invoke error callback if no target is found\n        currStepNum += direction;\n        step = getCurrStep();\n        if (!utils.getStepTarget(step) && !wasMultiPage) {\n          utils.invokeEventCallbacks('error');\n          return this.endTour(true, false);\n        }\n        changeStepCb.call(this, currStepNum);\n      } else if (currStepNum + direction === currTour.steps.length) {\n        return this.endTour();\n      }\n\n      return this;\n    },\n\n    /**\n     * loadTour\n     *\n     * Loads, but does not display, tour.\n     *\n     * @private\n     * @param tour The tour JSON object\n     */\n    loadTour = function(tour) {\n      var tmpOpt = {},\n          prop,\n          tourState,\n          tourStateValues;\n\n      // Set tour-specific configurations\n      for (prop in tour) {\n        if (tour.hasOwnProperty(prop) &&\n            prop !== 'id' &&\n            prop !== 'steps') {\n          tmpOpt[prop] = tour[prop];\n        }\n      }\n\n      //this.resetDefaultOptions(); // reset all options so there are no surprises\n      // TODO check number of config properties of tour\n      _configure.call(this, tmpOpt, true);\n\n      // Get existing tour state, if it exists.\n      tourState = utils.getState(getOption('cookieName'));\n      if (tourState) {\n        tourStateValues     = tourState.split(':');\n        cookieTourId        = tourStateValues[0]; // selecting tour is not supported by this framework.\n        cookieTourStep      = tourStateValues[1];\n\n        if(tourStateValues.length > 2) {\n          cookieSkippedSteps = tourStateValues[2].split(',');\n        }\n\n        cookieTourStep    = parseInt(cookieTourStep, 10);\n      }\n\n      return this;\n    },\n\n    /**\n     * Find the first step to show for a tour. (What is the first step with a\n     * target on the page?)\n     */\n    findStartingStep = function(startStepNum, savedSkippedSteps, cb) {\n      var step,\n          target;\n\n      currStepNum = startStepNum || 0;\n      skippedSteps = savedSkippedSteps || {};\n      step        = getCurrStep();\n      target      = utils.getStepTarget(step);\n\n      if (target) {\n        // First step had an existing target.\n        cb(currStepNum);\n        return;\n      }\n\n      if (!target) {\n        // Previous target doesn't exist either. The user may have just\n        // clicked on a link that wasn't part of the tour. Another possibility is that\n        // the user clicked on the correct link, but the target is just missing for\n        // whatever reason. In either case, we should just advance until we find a step\n        // that has a target on the page or end the tour if we can't find such a step.\n        utils.invokeEventCallbacks('error');\n\n        //this step was skipped, since its target does not exist\n        skippedSteps[currStepNum] = true;\n\n        if (getOption('skipIfNoElement')) {\n          goToStepWithTarget(1, cb);\n          return;\n        }\n        else {\n          currStepNum = -1;\n          cb(currStepNum);\n        }\n      }\n    },\n\n    showStepHelper = function(stepNum) {\n      var step         = currTour.steps[stepNum],\n          bubble       = getBubble(),\n          targetEl     = utils.getStepTarget(step);\n\n      function showBubble() {\n        bubble.show();\n        utils.invokeEventCallbacks('show', step.onShow);\n      }\n\n      if (currStepNum !== stepNum && getCurrStep().nextOnTargetClick) {\n        // Detach the listener when tour is moving to a different step\n        utils.removeEvtListener(utils.getStepTarget(getCurrStep()), 'click', targetClickNextFn);\n      }\n\n      // Update bubble for current step\n      currStepNum = stepNum;\n\n      bubble.hide(false);\n\n      bubble.render(step, stepNum, function(adjustScroll) {\n        // when done adjusting window scroll, call showBubble helper fn\n        if (adjustScroll) {\n          adjustWindowScroll(showBubble);\n        }\n        else {\n          showBubble();\n        }\n\n        // If we want to advance to next step when user clicks on target.\n        if (step.nextOnTargetClick) {\n          utils.addEvtListener(targetEl, 'click', targetClickNextFn);\n        }\n      });\n\n      setStateHelper();\n    },\n\n    setStateHelper = function() {\n      var cookieVal = currTour.id + ':' + currStepNum,\n        skipedStepIndexes = winHopscotch.getSkippedStepsIndexes();\n\n      if(skipedStepIndexes && skipedStepIndexes.length > 0) {\n        cookieVal += ':' + skipedStepIndexes.join(',');\n      }\n\n      utils.setState(getOption('cookieName'), cookieVal, 1);\n    },\n\n    /**\n     * init\n     *\n     * Initializes the Hopscotch object.\n     *\n     * @private\n     */\n    init = function(initOptions) {\n      if (initOptions) {\n        //initOptions.cookieName = initOptions.cookieName || 'hopscotch.tour.state';\n        this.configure(initOptions);\n      }\n    };\n\n    /**\n     * getCalloutManager\n     *\n     * Gets the callout manager.\n     *\n     * @returns {Object} HopscotchCalloutManager\n     *\n     */\n    this.getCalloutManager = function() {\n      if (typeof calloutMgr === undefinedStr) {\n        calloutMgr = new HopscotchCalloutManager();\n      }\n\n      return calloutMgr;\n    };\n\n    /**\n     * startTour\n     *\n     * Begins the tour.\n     *\n     * @param {Object} tour The tour JSON object\n     * @stepNum {Number} stepNum __Optional__ The step number to start from\n     * @returns {Object} Hopscotch\n     *\n     */\n    this.startTour = function(tour, stepNum) {\n      var bubble,\n          currStepNum,\n          skippedSteps = {},\n          self = this;\n\n      // loadTour if we are calling startTour directly. (When we call startTour\n      // from window onLoad handler, we'll use currTour)\n      if (!currTour) {\n        \n        // Sanity check! Is there a tour?\n        if(!tour){\n          throw new Error('Tour data is required for startTour.');\n        }\n\n        // Check validity of tour ID. If invalid, throw an error.\n        if(!tour.id || !validIdRegEx.test(tour.id)) {\n          throw new Error('Tour ID is using an invalid format. Use alphanumeric, underscores, and/or hyphens only. First character must be a letter.');\n        }\n\n        currTour = tour;\n        loadTour.call(this, tour);\n\n      }\n\n      if (typeof stepNum !== undefinedStr) {\n        if (stepNum >= currTour.steps.length) {\n          throw new Error('Specified step number out of bounds.');\n        }\n        currStepNum = stepNum;\n      }\n\n      // If document isn't ready, wait for it to finish loading.\n      // (so that we can calculate positioning accurately)\n      if (!utils.documentIsReady()) {\n        waitingToStart = true;\n        return this;\n      }\n\n      if (typeof currStepNum === \"undefined\" && currTour.id === cookieTourId && typeof cookieTourStep !== undefinedStr) {\n        currStepNum = cookieTourStep;\n        if(cookieSkippedSteps.length > 0){\n          for(var i = 0, len = cookieSkippedSteps.length; i < len; i++) {\n            skippedSteps[cookieSkippedSteps[i]] = true;\n          }\n        }\n      }\n      else if (!currStepNum) {\n        currStepNum = 0;\n      }\n\n      // Find the current step we should begin the tour on, and then actually start the tour.\n      findStartingStep(currStepNum, skippedSteps, function(stepNum) {\n        var target = (stepNum !== -1) && utils.getStepTarget(currTour.steps[stepNum]);\n\n        if (!target) {\n          // Should we trigger onEnd callback? Let's err on the side of caution\n          // and not trigger it. Don't want weird stuff happening on a page that\n          // wasn't meant for the tour. Up to the developer to fix their tour.\n          self.endTour(false, false);\n          return;\n        }\n\n        utils.invokeEventCallbacks('start');\n\n        bubble = getBubble();\n        // TODO: do we still need this call to .hide()? No longer using opt.animate...\n        // Leaving it in for now to play it safe\n        bubble.hide(false); // make invisible for boundingRect calculations when opt.animate == true\n\n        self.isActive = true;\n\n        if (!utils.getStepTarget(getCurrStep())) {\n          // First step element doesn't exist\n          utils.invokeEventCallbacks('error');\n          if (getOption('skipIfNoElement')) {\n            self.nextStep(false);\n          }\n        }\n        else {\n          self.showStep(stepNum);\n        }\n      });\n\n      return this;\n    };\n\n    /**\n     * showStep\n     *\n     * Skips to a specific step and renders the corresponding bubble.\n     *\n     * @stepNum {Number} stepNum The step number to show\n     * @returns {Object} Hopscotch\n     */\n    this.showStep = function(stepNum) {\n      var step = currTour.steps[stepNum];\n      if(!utils.getStepTarget(step)) {\n        return;\n      }\n\n      if (step.delay) {\n        setTimeout(function() {\n          showStepHelper(stepNum);\n        }, step.delay);\n      }\n      else {\n        showStepHelper(stepNum);\n      }\n      return this;\n    };\n\n    /**\n     * prevStep\n     *\n     * Jump to the previous step.\n     *\n     * @param {Boolean} doCallbacks Flag for invoking onPrev callback. Defaults to true.\n     * @returns {Object} Hopscotch\n     */\n    this.prevStep = function(doCallbacks) {\n      changeStep.call(this, doCallbacks, -1);\n      return this;\n    };\n\n    /**\n     * nextStep\n     *\n     * Jump to the next step.\n     *\n     * @param {Boolean} doCallbacks Flag for invoking onNext callback. Defaults to true.\n     * @returns {Object} Hopscotch\n     */\n    this.nextStep = function(doCallbacks) {\n      changeStep.call(this, doCallbacks, 1);\n      return this;\n    };\n\n    /**\n     * endTour\n     *\n     * Cancels out of an active tour.\n     *\n     * @param {Boolean} clearState Flag for clearing state. Defaults to true.\n     * @param {Boolean} doCallbacks Flag for invoking 'onEnd' callbacks. Defaults to true.\n     * @returns {Object} Hopscotch\n     */\n    this.endTour = function(clearState, doCallbacks) {\n      var bubble     = getBubble(),\n        currentStep;\n\n      clearState     = utils.valOrDefault(clearState, true);\n      doCallbacks    = utils.valOrDefault(doCallbacks, true);\n\n      //remove event listener if current step had it added\n      if(currTour) {\n        currentStep = getCurrStep();\n        if(currentStep && currentStep.nextOnTargetClick) {\n          utils.removeEvtListener(utils.getStepTarget(currentStep), 'click', targetClickNextFn);\n        }\n      }\n\n      currStepNum    = 0;\n      cookieTourStep = undefined;\n\n      bubble.hide();\n      if (clearState) {\n        utils.clearState(getOption('cookieName'));\n      }\n      if (this.isActive) {\n        this.isActive = false;\n\n        if (currTour && doCallbacks) {\n          utils.invokeEventCallbacks('end');\n        }\n      }\n\n      this.removeCallbacks(null, true);\n      this.resetDefaultOptions();\n      destroyBubble();\n\n      currTour = null;\n\n      return this;\n    };\n\n    /**\n     * getCurrTour\n     *\n     * @return {Object} The currently loaded tour.\n     */\n    this.getCurrTour = function() {\n      return currTour;\n    };\n\n    /**\n     * getCurrTarget\n     *\n     * @return {Object} The currently visible target.\n     */\n    this.getCurrTarget = function() {\n      return utils.getStepTarget(getCurrStep());\n    };\n\n    /**\n     * getCurrStepNum\n     *\n     * @return {number} The current zero-based step number.\n     */\n    this.getCurrStepNum = function() {\n      return currStepNum;\n    };\n\n    /**\n     * getSkippedStepsIndexes\n     *\n     * @return {Array} Array of skipped step indexes\n     */\n    this.getSkippedStepsIndexes = function() {\n      var skippedStepsIdxArray = [],\n         stepIds;\n\n      for(stepIds in skippedSteps){\n        skippedStepsIdxArray.push(stepIds);\n      }\n\n      return skippedStepsIdxArray;\n    };\n\n    /**\n     * refreshBubblePosition\n     *\n     * Tell hopscotch that the position of the current tour element changed\n     * and the bubble therefore needs to be redrawn. Also refreshes position\n     * of all Hopscotch Callouts on the page.\n     *\n     * @returns {Object} Hopscotch\n     */\n    this.refreshBubblePosition = function() {\n      var currStep = getCurrStep();\n      if(currStep){\n        getBubble().setPosition(currStep);\n      }\n      this.getCalloutManager().refreshCalloutPositions();\n      return this;\n    };\n\n    /**\n     * listen\n     *\n     * Adds a callback for one of the event types. Valid event types are:\n     *\n     * @param {string} evtType \"start\", \"end\", \"next\", \"prev\", \"show\", \"close\", or \"error\"\n     * @param {Function} cb The callback to add.\n     * @param {Boolean} isTourCb Flag indicating callback is from a tour definition.\n     *    For internal use only!\n     * @returns {Object} Hopscotch\n     */\n    this.listen = function(evtType, cb, isTourCb) {\n      if (evtType) {\n        callbacks[evtType].push({ cb: cb, fromTour: isTourCb });\n      }\n      return this;\n    };\n\n    /**\n     * unlisten\n     *\n     * Removes a callback for one of the event types, e.g. 'start', 'next', etc.\n     *\n     * @param {string} evtType \"start\", \"end\", \"next\", \"prev\", \"show\", \"close\", or \"error\"\n     * @param {Function} cb The callback to remove.\n     * @returns {Object} Hopscotch\n     */\n    this.unlisten = function(evtType, cb) {\n      var evtCallbacks = callbacks[evtType],\n          i,\n          len;\n\n      for (i = 0, len = evtCallbacks.length; i < len; ++i) {\n        if (evtCallbacks[i] === cb) {\n          evtCallbacks.splice(i, 1);\n        }\n      }\n      return this;\n    };\n\n    /**\n     * removeCallbacks\n     *\n     * Remove callbacks for hopscotch events. If tourOnly is set to true, only\n     * removes callbacks specified by a tour (callbacks set by external calls\n     * to hopscotch.configure or hopscotch.listen will not be removed). If\n     * evtName is null or undefined, callbacks for all events will be removed.\n     *\n     * @param {string} evtName Optional Event name for which we should remove callbacks\n     * @param {boolean} tourOnly Optional flag to indicate we should only remove callbacks added\n     *    by a tour. Defaults to false.\n     * @returns {Object} Hopscotch\n     */\n    this.removeCallbacks = function(evtName, tourOnly) {\n      var cbArr,\n          i,\n          len,\n          evt;\n\n      // If evtName is null or undefined, remove callbacks for all events.\n      for (evt in callbacks) {\n        if (!evtName || evtName === evt) {\n          if (tourOnly) {\n            cbArr = callbacks[evt];\n            for (i=0, len=cbArr.length; i < len; ++i) {\n              if (cbArr[i].fromTour) {\n                cbArr.splice(i--, 1);\n                --len;\n              }\n            }\n          }\n          else {\n            callbacks[evt] = [];\n          }\n        }\n      }\n      return this;\n    };\n\n    /**\n     * registerHelper\n     * ==============\n     * Registers a helper function to be used as a callback function.\n     *\n     * @param {String} id The id of the function.\n     * @param {Function} id The callback function.\n     */\n    this.registerHelper = function(id, fn) {\n      if (typeof id === 'string' && typeof fn === 'function') {\n        helpers[id] = fn;\n      }\n    };\n\n    this.unregisterHelper = function(id) {\n      helpers[id] = null;\n    };\n\n    this.invokeHelper = function(id) {\n      var args = [],\n          i,\n          len;\n\n      for (i = 1, len = arguments.length; i < len; ++i) {\n        args.push(arguments[i]);\n      }\n      if (helpers[id]) {\n        helpers[id].call(null, args);\n      }\n    };\n\n    /**\n     * setCookieName\n     *\n     * Sets the cookie name (or sessionStorage name, if supported) used for multi-page\n     * tour persistence.\n     *\n     * @param {String} name The cookie name\n     * @returns {Object} Hopscotch\n     */\n    this.setCookieName = function(name) {\n      opt.cookieName = name;\n      return this;\n    };\n\n    /**\n     * resetDefaultOptions\n     *\n     * Resets all configuration options to default.\n     *\n     * @returns {Object} Hopscotch\n     */\n    this.resetDefaultOptions = function() {\n      opt = {};\n      return this;\n    };\n\n    /**\n     * resetDefaultI18N\n     *\n     * Resets all i18n.\n     *\n     * @returns {Object} Hopscotch\n     */\n    this.resetDefaultI18N = function() {\n      customI18N = {};\n      return this;\n    };\n\n    /**\n     * hasState\n     *\n     * Returns state from a previous tour run, if it exists.\n     *\n     * @returns {String} State of previous tour run, or empty string if none exists.\n     */\n    this.getState = function() {\n      return utils.getState(getOption('cookieName'));\n    };\n\n    /**\n     * _configure\n     *\n     * @see this.configure\n     * @private\n     * @param options\n     * @param {Boolean} isTourOptions Should be set to true when setting options from a tour definition.\n     */\n    _configure = function(options, isTourOptions) {\n      var bubble,\n          events = ['next', 'prev', 'start', 'end', 'show', 'error', 'close'],\n          eventPropName,\n          callbackProp,\n          i,\n          len;\n\n      if (!opt) {\n        this.resetDefaultOptions();\n      }\n\n      utils.extend(opt, options);\n\n      if (options) {\n        utils.extend(customI18N, options.i18n);\n      }\n\n      for (i = 0, len = events.length; i < len; ++i) {\n        // At this point, options[eventPropName] may have changed from an array\n        // to a function.\n        eventPropName = 'on' + events[i].charAt(0).toUpperCase() + events[i].substring(1);\n        if (options[eventPropName]) {\n          this.listen(events[i],\n                      options[eventPropName],\n                      isTourOptions);\n        }\n      }\n\n      bubble = getBubble(true);\n\n      return this;\n    };\n\n    /**\n     * configure\n     *\n     * <pre>\n     * VALID OPTIONS INCLUDE...\n     *\n     * - bubbleWidth:     Number   - Default bubble width. Defaults to 280.\n     * - bubblePadding:   Number   - DEPRECATED. Default bubble padding. Defaults to 15.\n     * - smoothScroll:    Boolean  - should the page scroll smoothly to the next\n     *                               step? Defaults to TRUE.\n     * - scrollDuration:  Number   - Duration of page scroll. Only relevant when\n     *                               smoothScroll is set to true. Defaults to\n     *                               1000ms.\n     * - scrollTopMargin: NUMBER   - When the page scrolls, how much space should there\n     *                               be between the bubble/targetElement and the top\n     *                               of the viewport? Defaults to 200.\n     * - showCloseButton: Boolean  - should the tour bubble show a close (X) button?\n     *                               Defaults to TRUE.\n     * - showPrevButton:  Boolean  - should the bubble have the Previous button?\n     *                               Defaults to FALSE.\n     * - showNextButton:  Boolean  - should the bubble have the Next button?\n     *                               Defaults to TRUE.\n     * - arrowWidth:      Number   - Default arrow width. (space between the bubble\n     *                               and the targetEl) Used for bubble position\n     *                               calculation. Only use this option if you are\n     *                               using your own custom CSS. Defaults to 20.\n     * - skipIfNoElement  Boolean  - If a specified target element is not found,\n     *                               should we skip to the next step? Defaults to\n     *                               TRUE.\n     * - onNext:          Function - A callback to be invoked after every click on\n     *                               a \"Next\" button.\n     * - isRtl:           Boolean  - Set to true when instantiating in a right-to-left\n     *                               language environment, or if mirrored positioning is\n     *                               needed.\n     *                               Defaults to FALSE.\n     *\n     * - i18n:            Object   - For i18n purposes. Allows you to change the\n     *                               text of button labels and step numbers.\n     * - i18n.stepNums:   Array\\<String\\> - Provide a list of strings to be shown as\n     *                               the step number, based on index of array. Unicode\n     *                               characters are supported. (e.g., ['&#x4e00;',\n     *                               '&#x4e8c;', '&#x4e09;']) If there are more steps\n     *                               than provided numbers, Arabic numerals\n     *                               ('4', '5', '6', etc.) will be used as default.\n     * // =========\n     * // CALLBACKS\n     * // =========\n     * - onNext:          Function - Invoked after every click on a \"Next\" button.\n     * - onPrev:          Function - Invoked after every click on a \"Prev\" button.\n     * - onStart:         Function - Invoked when the tour is started.\n     * - onEnd:           Function - Invoked when the tour ends.\n     * - onClose:         Function - Invoked when the user closes the tour before finishing.\n     * - onError:         Function - Invoked when the specified target element doesn't exist on the page.\n     *\n     * // ====\n     * // I18N\n     * // ====\n     * i18n:              OBJECT      - For i18n purposes. Allows you to change the text\n     *                                  of button labels and step numbers.\n     * i18n.nextBtn:      STRING      - Label for next button\n     * i18n.prevBtn:      STRING      - Label for prev button\n     * i18n.doneBtn:      STRING      - Label for done button\n     * i18n.skipBtn:      STRING      - Label for skip button\n     * i18n.closeTooltip: STRING      - Text for close button tooltip\n     * i18n.stepNums:   ARRAY<STRING> - Provide a list of strings to be shown as\n     *                                  the step number, based on index of array. Unicode\n     *                                  characters are supported. (e.g., ['&#x4e00;',\n     *                                  '&#x4e8c;', '&#x4e09;']) If there are more steps\n     *                                  than provided numbers, Arabic numerals\n     *                                  ('4', '5', '6', etc.) will be used as default.\n     * </pre>\n     *\n     * @example hopscotch.configure({ scrollDuration: 1000, scrollTopMargin: 150 });\n     * @example\n     * hopscotch.configure({\n     *   scrollTopMargin: 150,\n     *   onStart: function() {\n     *     alert(\"Have fun!\");\n     *   },\n     *   i18n: {\n     *     nextBtn: 'Forward',\n     *     prevBtn: 'Previous'\n     *     closeTooltip: 'Quit'\n     *   }\n     * });\n     *\n     * @param {Object} options A hash of configuration options.\n     * @returns {Object} Hopscotch\n     */\n    this.configure = function(options) {\n      return _configure.call(this, options, false);\n    };\n\n    /**\n     * Set the template that should be used for rendering Hopscotch bubbles.\n     * If a string, it's assumed your template is available in the\n     * hopscotch.templates namespace.\n     *\n     * @param {String|Function(obj)} The template to use for rendering.\n     * @returns {Object} The Hopscotch object (for chaining).\n     */\n    this.setRenderer = function(render){\n      var typeOfRender = typeof render;\n\n      if(typeOfRender === 'string'){\n        templateToUse = render;\n        customRenderer = undefined;\n      }\n      else if(typeOfRender === 'function'){\n        customRenderer = render;\n      }\n      return this;\n    };\n\n    /**\n     * Sets the escaping method to be used by JST templates.\n     *\n     * @param {Function} - The escape method to use.\n     * @returns {Object} The Hopscotch object (for chaining).\n     */\n    this.setEscaper = function(esc){\n      if (typeof esc === 'function'){\n        customEscape = esc;\n      }\n      return this;\n    };\n\n    init.call(this, initOptions);\n  };\n\n  winHopscotch = new Hopscotch();\n\n// Template includes, placed inside a closure to ensure we don't\n// end up declaring our shim globally.\n(function(){\nvar _ = {};\n/*\n * Adapted from the Underscore.js framework. Check it out at\n * https://github.com/jashkenas/underscore\n */\n_.escape = function(str){\n  if(customEscape){ return customEscape(str); }\n  \n  if(str == null) return '';\n  return ('' + str).replace(new RegExp('[&<>\"\\']', 'g'), function(match){\n    if(match == '&'){ return '&amp;' }\n    if(match == '<'){ return '&lt;' }\n    if(match == '>'){ return '&gt;' }\n    if(match == '\"'){ return '&quot;' }\n    if(match == \"'\"){ return '&#x27;' }\n  });\n}\nthis[\"templates\"] = this[\"templates\"] || {};\n\nthis[\"templates\"][\"bubble_default\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n\n  function optEscape(str, unsafe){\n    if(unsafe){\n      return _.escape(str);\n    }\n    return str;\n  }\n;\n__p += '\\n<div class=\"hopscotch-bubble-container\" style=\"width: ' +\n((__t = ( step.width )) == null ? '' : __t) +\n'px; padding: ' +\n((__t = ( step.padding )) == null ? '' : __t) +\n'px;\">\\n  ';\n if(tour.isTour){ ;\n__p += '<span class=\"hopscotch-bubble-number\">' +\n((__t = ( i18n.stepNum )) == null ? '' : __t) +\n'</span>';\n } ;\n__p += '\\n  <div class=\"hopscotch-bubble-content\">\\n    ';\n if(step.title !== ''){ ;\n__p += '<h3 class=\"hopscotch-title\">' +\n((__t = ( optEscape(step.title, tour.unsafe) )) == null ? '' : __t) +\n'</h3>';\n } ;\n__p += '\\n    ';\n if(step.content  !== ''){ ;\n__p += '<div class=\"hopscotch-content\">' +\n((__t = ( optEscape(step.content, tour.unsafe) )) == null ? '' : __t) +\n'</div>';\n } ;\n__p += '\\n  </div>\\n  <div class=\"hopscotch-actions\">\\n    ';\n if(buttons.showPrev){ ;\n__p += '<button class=\"hopscotch-nav-button prev hopscotch-prev\">' +\n((__t = ( i18n.prevBtn )) == null ? '' : __t) +\n'</button>';\n } ;\n__p += '\\n    ';\n if(buttons.showCTA){ ;\n__p += '<button class=\"hopscotch-nav-button next hopscotch-cta\">' +\n((__t = ( buttons.ctaLabel )) == null ? '' : __t) +\n'</button>';\n } ;\n__p += '\\n    ';\n if(buttons.showNext){ ;\n__p += '<button class=\"hopscotch-nav-button next hopscotch-next\">' +\n((__t = ( i18n.nextBtn )) == null ? '' : __t) +\n'</button>';\n } ;\n__p += '\\n  </div>\\n  ';\n if(buttons.showClose){ ;\n__p += '<button class=\"hopscotch-bubble-close hopscotch-close\">' +\n((__t = ( i18n.closeTooltip )) == null ? '' : __t) +\n'</button>';\n } ;\n__p += '\\n</div>\\n<div class=\"hopscotch-bubble-arrow-container hopscotch-arrow\">\\n  <div class=\"hopscotch-bubble-arrow-border\"></div>\\n  <div class=\"hopscotch-bubble-arrow\"></div>\\n</div>';\n\n}\nreturn __p\n};\n}.call(winHopscotch));\n\n  return winHopscotch;\n\n})));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/ion-rangeslider/ion.rangeSlider.css",
    "content": "/* Ion.RangeSlider\n// css version 2.0.3\n// © 2013-2014 Denis Ineshin | IonDen.com\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// RangeSlider */\n\n.irs {\n    position: relative; display: block;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n     -khtml-user-select: none;\n       -moz-user-select: none;\n        -ms-user-select: none;\n            user-select: none;\n}\n    .irs-line {\n        position: relative; display: block;\n        overflow: hidden;\n        outline: none !important;\n    }\n        .irs-line-left, .irs-line-mid, .irs-line-right {\n            position: absolute; display: block;\n            top: 0;\n        }\n        .irs-line-left {\n            left: 0; width: 11%;\n        }\n        .irs-line-mid {\n            left: 9%; width: 82%;\n        }\n        .irs-line-right {\n            right: 0; width: 11%;\n        }\n\n    .irs-bar {\n        position: absolute; display: block;\n        left: 0; width: 0;\n    }\n        .irs-bar-edge {\n            position: absolute; display: block;\n            top: 0; left: 0;\n        }\n\n    .irs-shadow {\n        position: absolute; display: none;\n        left: 0; width: 0;\n    }\n\n    .irs-slider {\n        position: absolute; display: block;\n        cursor: default;\n        z-index: 1;\n    }\n        .irs-slider.single {\n\n        }\n        .irs-slider.from {\n\n        }\n        .irs-slider.to {\n\n        }\n        .irs-slider.type_last {\n            z-index: 2;\n        }\n\n    .irs-min {\n        position: absolute; display: block;\n        left: 0;\n        cursor: default;\n    }\n    .irs-max {\n        position: absolute; display: block;\n        right: 0;\n        cursor: default;\n    }\n\n    .irs-from, .irs-to, .irs-single {\n        position: absolute; display: block;\n        top: 0; left: 0;\n        cursor: default;\n        white-space: nowrap;\n    }\n\n.irs-grid {\n    position: absolute; display: none;\n    bottom: 0; left: 0;\n    width: 100%; height: 20px;\n}\n.irs-with-grid .irs-grid {\n    display: block;\n}\n    .irs-grid-pol {\n        position: absolute;\n        top: 0; left: 0;\n        width: 1px; height: 8px;\n        background: #000;\n    }\n    .irs-grid-pol.small {\n        height: 4px;\n    }\n    .irs-grid-text {\n        position: absolute;\n        bottom: 0; left: 0;\n        white-space: nowrap;\n        text-align: center;\n        font-size: 9px; line-height: 9px;\n        padding: 0 3px;\n        color: #000;\n    }\n\n.irs-disable-mask {\n    position: absolute; display: block;\n    top: 0; left: -1%;\n    width: 102%; height: 100%;\n    cursor: default;\n    background: rgba(0,0,0,0.0);\n    z-index: 2;\n}\n.lt-ie9 .irs-disable-mask {\n    background: #000;\n    filter: alpha(opacity=0);\n    cursor: not-allowed;\n}\n\n.irs-disabled {\n    opacity: 0.4;\n}\n\n\n.irs-hidden-input {\n    position: absolute !important;\n    display: block !important;\n    top: 0 !important;\n    left: 0 !important;\n    width: 0 !important;\n    height: 0 !important;\n    font-size: 0 !important;\n    line-height: 0 !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    overflow: hidden;\n    outline: none !important;\n    z-index: -9999 !important;\n    background: none !important;\n    border-style: solid !important;\n    border-color: transparent !important;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/ion-rangeslider/ion.rangeSlider.skinFlat.css",
    "content": "/* Ion.RangeSlider, Flat UI Skin\n// css version 2.0.3\n// © Denis Ineshin, 2014    https://github.com/IonDen\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// Skin details */\n\n.irs-line-mid,\n.irs-line-left,\n.irs-line-right,\n.irs-bar,\n.irs-bar-edge,\n.irs-slider {\n    background: url(sprite-skin-flat.png) repeat-x;\n}\n\n.irs {\n    height: 40px;\n}\n.irs-with-grid {\n    height: 60px;\n}\n.irs-line {\n    height: 12px; top: 25px;\n}\n    .irs-line-left {\n        height: 12px;\n        background-position: 0 -30px;\n    }\n    .irs-line-mid {\n        height: 12px;\n        background-position: 0 0;\n    }\n    .irs-line-right {\n        height: 12px;\n        background-position: 100% -30px;\n    }\n\n.irs-bar {\n    height: 12px; top: 25px;\n    background-position: 0 -60px;\n}\n    .irs-bar-edge {\n        top: 25px;\n        height: 12px; width: 9px;\n        background-position: 0 -90px;\n    }\n\n.irs-shadow {\n    height: 3px; top: 34px;\n    background: #000;\n    opacity: 0.25;\n}\n.lt-ie9 .irs-shadow {\n    filter: alpha(opacity=25);\n}\n\n.irs-slider {\n    width: 16px; height: 18px;\n    top: 22px;\n    background-position: 0 -120px;\n}\n.irs-slider.state_hover, .irs-slider:hover {\n    background-position: 0 -150px;\n}\n\n.irs-min, .irs-max {\n    color: #999;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    top: 0; padding: 1px 3px;\n    background: #e1e4e9;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.irs-from, .irs-to, .irs-single {\n    color: #fff;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    padding: 1px 5px;\n    background: #ed5565;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.irs-from:after, .irs-to:after, .irs-single:after {\n    position: absolute; display: block; content: \"\";\n    bottom: -6px; left: 50%;\n    width: 0; height: 0;\n    margin-left: -3px;\n    overflow: hidden;\n    border: 3px solid transparent;\n    border-top-color: #ed5565;\n}\n\n\n.irs-grid-pol {\n    background: #e1e4e9;\n}\n.irs-grid-text {\n    color: #999;\n}\n\n.irs-disabled {\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-circliful/css/jquery.circliful.css",
    "content": ".circliful {\n    position: relative; \n}\n\n.circle-text, .circle-info, .circle-text-half, .circle-info-half {\n    width: 100%;\n    position: absolute;\n    text-align: center;\n    display: inline-block;\n}\n\n.circle-info, .circle-info-half {\n\tcolor: #999;\n}\n\n.circliful .fa {\n\tmargin: -10px 3px 0 3px;\n\tposition: relative;\n\tbottom: 4px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-circliful/js/jquery.circliful.js",
    "content": "\"use strict\";\n\n(function ($) {\n\n    $.fn.circliful = function (options, callback) {\n\n        var settings = $.extend({\n            // These are the defaults.\n            startdegree: 0,\n            fgcolor: \"#556b2f\",\n            bgcolor: \"#eee\",\n            fill: false,\n            width: 15,\n            dimension: 200,\n            fontsize: 15,\n            percent: 50,\n            animationstep: 1.0,\n            iconsize: '20px',\n            iconcolor: '#999',\n            border: 'default',\n            complete: null,\n            bordersize: 10\n        }, options);\n\n        return this.each(function () {\n\n            var customSettings = [\"fgcolor\", \"bgcolor\", \"fill\", \"width\", \"dimension\", \"fontsize\", \"animationstep\", \"endPercent\", \"icon\", \"iconcolor\", \"iconsize\", \"border\", \"startdegree\", \"bordersize\"];\n\n            var customSettingsObj = {};\n            var icon = '';\n            var percent;\n            var endPercent = 0;\n            var obj = $(this);\n            var fill = false;\n            var text, info;\n\n            obj.addClass('circliful');\n\n            checkDataAttributes(obj);\n\n            if (obj.data('text') != undefined) {\n                text = obj.data('text');\n\n                if (obj.data('icon') != undefined) {\n                    icon = $('<i></i>')\n                        .addClass('fa ' + $(this).data('icon'))\n                        .css({\n                            'color': customSettingsObj.iconcolor,\n                            'font-size': customSettingsObj.iconsize\n                        });\n                }\n\n                if (obj.data('type') != undefined) {\n                    type = $(this).data('type');\n\n                    if (type == 'half') {\n                        addCircleText(obj, 'circle-text-half', (customSettingsObj.dimension / 1.45));\n                    } else {\n                        addCircleText(obj, 'circle-text', customSettingsObj.dimension);\n                    }\n                } else {\n                    addCircleText(obj, 'circle-text', customSettingsObj.dimension);\n                }\n            }\n\n            if ($(this).data(\"total\") != undefined && $(this).data(\"part\") != undefined) {\n                var total = $(this).data(\"total\") / 100;\n\n                percent = (($(this).data(\"part\") / total) / 100).toFixed(3);\n                endPercent = ($(this).data(\"part\") / total).toFixed(3);\n            } else {\n                if ($(this).data(\"percent\") != undefined) {\n                    percent = $(this).data(\"percent\") / 100;\n                    endPercent = $(this).data(\"percent\");\n                } else {\n                    percent = settings.percent / 100;\n                }\n            }\n\n            if ($(this).data('info') != undefined) {\n                info = $(this).data('info');\n\n                if ($(this).data('type') != undefined) {\n                    type = $(this).data('type');\n\n                    if (type == 'half') {\n                        addInfoText(obj, 0.9);\n                    } else {\n                        addInfoText(obj, 1.25);\n                    }\n                } else {\n                    addInfoText(obj, 1.25);\n                }\n            }\n\n            $(this).width(customSettingsObj.dimension + 'px');\n\n            var size = customSettingsObj.dimension,\n                canvas = $('<canvas></canvas>').attr({\n                    width: size,\n                    height: size\n                }).appendTo($(this)).get(0);\n\n            var context = canvas.getContext('2d');\n\n            var dpr = window.devicePixelRatio;\n            if ( dpr ) {\n                var $canvas = $(canvas);\n                $canvas.css('width', size);\n                $canvas.css('height', size);\n                $canvas.attr('width', size * dpr);\n                $canvas.attr('height', size * dpr);\n\n                context.scale(dpr, dpr);\n            }\n\n            var container = $(canvas).parent();\n            var x = size / 2;\n            var y = size / 2;\n            var degrees = customSettingsObj.percent * 360.0;\n            var radians = degrees * (Math.PI / 180);\n            var radius = size / 2.5;\n            var startAngle = 2.3 * Math.PI;\n            var endAngle = 0;\n            var counterClockwise = false;\n            var curPerc = customSettingsObj.animationstep === 0.0 ? endPercent : 0.0;\n            var curStep = Math.max(customSettingsObj.animationstep, 0.0);\n            var circ = Math.PI * 2;\n            var quart = Math.PI / 2;\n            var type = '';\n            var fireCallback = true;\n            var additionalAngelPI = (customSettingsObj.startdegree / 180) * Math.PI;\n\n            if ($(this).data('type') != undefined) {\n                type = $(this).data('type');\n\n                if (type == 'half') {\n                    startAngle = 2.0 * Math.PI;\n                    endAngle = 3.13;\n                    circ = Math.PI;\n                    quart = Math.PI / 0.996;\n                }\n            }\n            \n            if ($(this).data('type') != undefined) {\n                type = $(this).data('type');\n\n                if (type == 'angle') {\n                    startAngle = 2.25 * Math.PI;\n                    endAngle = 2.4;\n                    circ = 1.53 + Math.PI;\n                    quart = 0.73 + Math.PI / 0.996;\n                }\n            }\n\n            /**\n             * adds text to circle\n             *\n             * @param obj\n             * @param cssClass\n             * @param lineHeight\n             */\n            function addCircleText(obj, cssClass, lineHeight) {\n                $(\"<span></span>\")\n                    .appendTo(obj)\n                    .addClass(cssClass)\n                    .html(text)\n                    .prepend(icon)\n                    .css({\n                        'line-height': lineHeight + 'px',\n                        'font-size': customSettingsObj.fontsize + 'px'\n                    });\n            }\n\n            /**\n             * adds info text to circle\n             *\n             * @param obj\n             * @param factor\n             */\n            function addInfoText(obj, factor) {\n                $('<span></span>')\n                    .appendTo(obj)\n                    .addClass('circle-info-half')\n                    .css(\n                        'line-height', (customSettingsObj.dimension * factor) + 'px'\n                    )\n                    .text(info);\n            }\n\n            /**\n             * checks which data attributes are defined\n             * @param obj\n             */\n            function checkDataAttributes(obj) {\n                $.each(customSettings, function (index, attribute) {\n                    if (obj.data(attribute) != undefined) {\n                        customSettingsObj[attribute] = obj.data(attribute);\n                    } else {\n                        customSettingsObj[attribute] = $(settings).attr(attribute);\n                    }\n\n                    if (attribute == 'fill' && obj.data('fill') != undefined) {\n                        fill = true;\n                    }\n                });\n            }\n\n            /**\n             * animate foreground circle\n             * @param current\n             */\n            function animate(current) {\n\n                context.clearRect(0, 0, canvas.width, canvas.height);\n\n                context.beginPath();\n                context.arc(x, y, radius, endAngle, startAngle, false);\n\n                context.lineWidth = customSettingsObj.width + 1;\n\n                context.strokeStyle = customSettingsObj.bgcolor;\n                context.stroke();\n\n                if (fill) {\n                    context.fillStyle = customSettingsObj.fill;\n                    context.fill();\n                }\n\n                context.beginPath();\n                context.arc(x, y, radius, -(quart) + additionalAngelPI, ((circ) * current) - quart + additionalAngelPI, false);\n\n                if (customSettingsObj.border == 'outline') {\n                    context.lineWidth = customSettingsObj.width + customSettingsObj.bordersize;\n                } else if (customSettingsObj.border == 'inline') {\n                    context.lineWidth = customSettingsObj.width - customSettingsObj.bordersize;\n                }\n\n                context.strokeStyle = customSettingsObj.fgcolor;\n                context.stroke();\n\n                if (curPerc < endPercent) {\n                    curPerc += curStep;\n                    requestAnimationFrame(function () {\n                        animate(Math.min(curPerc, endPercent) / 100);\n                    }, obj);\n                }\n\n                if (curPerc == endPercent && fireCallback && typeof(options) != \"undefined\") {\n                    if ($.isFunction(options.complete)) {\n                        options.complete();\n\n                        fireCallback = false;\n                    }\n                }\n            }\n\n            animate(curPerc / 100);\n\n        });\n    };\n}(jQuery));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-datatables-editable/dataTables.bootstrap.js",
    "content": "/*! DataTables Bootstrap 3 integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n(function(window, document, undefined){\n\nvar factory = function( $, DataTable ) {\n\"use strict\";\n\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-6'l><'col-sm-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-6'i><'col-sm-6'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper form-inline dt-bootstrap\",\n\tsFilterInput:  \"form-control input-sm\",\n\tsLengthSelect: \"form-control input-sm\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') ) {\n\t\t\t\tapi.page( e.data.action ).draw( false );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( $.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&hellip;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t'tabindex': settings.iTabIndex,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': '#'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n};\n\n\n/*\n * TableTools Bootstrap compatibility\n * Required TableTools 2.1+\n */\nif ( DataTable.TableTools ) {\n\t// Set the classes that TableTools uses to something suitable for Bootstrap\n\t$.extend( true, DataTable.TableTools.classes, {\n\t\t\"container\": \"DTTT btn-group\",\n\t\t\"buttons\": {\n\t\t\t\"normal\": \"btn btn-default\",\n\t\t\t\"disabled\": \"disabled\"\n\t\t},\n\t\t\"collection\": {\n\t\t\t\"container\": \"DTTT_dropdown dropdown-menu\",\n\t\t\t\"buttons\": {\n\t\t\t\t\"normal\": \"\",\n\t\t\t\t\"disabled\": \"disabled\"\n\t\t\t}\n\t\t},\n\t\t\"print\": {\n\t\t\t\"info\": \"DTTT_print_info\"\n\t\t},\n\t\t\"select\": {\n\t\t\t\"row\": \"active\"\n\t\t}\n\t} );\n\n\t// Have the collection use a bootstrap compatible drop down\n\t$.extend( true, DataTable.TableTools.DEFAULTS.oTags, {\n\t\t\"collection\": {\n\t\t\t\"container\": \"ul\",\n\t\t\t\"button\": \"li\",\n\t\t\t\"liner\": \"a\"\n\t\t}\n\t} );\n}\n\n}; // /factory\n\n\n// Define as an AMD module if possible\nif ( typeof define === 'function' && define.amd ) {\n\tdefine( ['jquery', 'datatables'], factory );\n}\nelse if ( typeof exports === 'object' ) {\n    // Node/CommonJS\n    factory( require('jquery'), require('datatables') );\n}\nelse if ( jQuery ) {\n\t// Otherwise simply initialise as normal, stopping multiple evaluation\n\tfactory( jQuery, jQuery.fn.dataTable );\n}\n\n\n})(window, document);\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-datatables-editable/jquery.dataTables.js",
    "content": "/*! DataTables 1.10.7\n * ©2008-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.10.7\n * @file        jquery.dataTables.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2008-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(/** @lends <global> */function( window, document, undefined ) {\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// Define as an AMD module if possible\n\t\tdefine( 'datatables', ['jquery'], factory );\n\t}\n    else if ( typeof exports === 'object' ) {\n        // Node/CommonJS\n        module.exports = factory( require( 'jquery' ) );\n    }\n\telse if ( jQuery && !jQuery.fn.dataTable ) {\n\t\t// Define using browser globals otherwise\n\t\t// Prevent multiple instantiations if the script is loaded twice\n\t\tfactory( jQuery );\n\t}\n}\n(/** @lends <global> */function( $ ) {\n\t\"use strict\";\n\n\t/**\n\t * DataTables is a plug-in for the jQuery Javascript library. It is a highly\n\t * flexible tool, based upon the foundations of progressive enhancement,\n\t * which will add advanced interaction controls to any HTML table. For a\n\t * full list of features please refer to\n\t * [DataTables.net](href=\"http://datatables.net).\n\t *\n\t * Note that the `DataTable` object is not a global variable but is aliased\n\t * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may\n\t * be  accessed.\n\t *\n\t *  @class\n\t *  @param {object} [init={}] Configuration object for DataTables. Options\n\t *    are defined by {@link DataTable.defaults}\n\t *  @requires jQuery 1.7+\n\t *\n\t *  @example\n\t *    // Basic initialisation\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable();\n\t *    } );\n\t *\n\t *  @example\n\t *    // Initialisation with configuration options - in this case, disable\n\t *    // pagination and sorting.\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable( {\n\t *        \"paginate\": false,\n\t *        \"sort\": false\n\t *      } );\n\t *    } );\n\t */\n\tvar DataTable;\n\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n]/g;\n\tvar _re_html = /<.*?>/g;\n\tvar _re_date_start = /^[\\w\\+\\-]/;\n\tvar _re_date_end = /[\\w\\+\\-]$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// http://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /[',$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar strType = typeof d === 'string';\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d.replace( _re_html, '' );\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t/* Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t * sZeroRecords - assuming that is given.\n\t\t */\n\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\t\n\t\t/* Likewise with loading records */\n\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\t\n\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\tif ( lang.sInfoThousands ) {\n\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t}\n\t\n\t\tvar decimal = lang.sDecimal;\n\t\tif ( decimal ) {\n\t\t\t_addNumericSort( decimal );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( dataSort && ! $.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\tvar browser = settings.oBrowser;\n\t\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"test\"/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\t\n\t\tvar test = n.find('.test');\n\t\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = test[0].offsetWidth === 100;\n\t\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( test.offset().left ) !== 1;\n\t\n\t\tn.remove();\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Covert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Covert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\treturn _fnGetColumns( oSettings, 'bVisible' ).length;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string\n\t\t\t\t\t\tif ( detectedType === 'html' ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.targets !== undefined ?\n\t\t\t\t\tdef.targets :\n\t\t\t\t\tdef.aTargets;\n\t\n\t\t\t\tif ( ! $.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data'\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t// When working with a row, the data source object must be populated. In\n\t\t\t// all other cases, the data source object is already populated, so we\n\t\t\t// don't overwrite it, which might break bindings etc\n\t\t\tif ( nTr ) {\n\t\t\t\t_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );\n\t\t\t}\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter' 'sort')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t/* When the data source is null, we can use default column data */\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type == 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g), function ( s ) {\n\t\t\treturn s.replace(/\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Build an object of get functions, and wrap them in a single call */\n\t\t\tvar o = {};\n\t\t\t$.each( mSource, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = _fnGetObjectDataFn( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Give an empty string for rendering / sorting etc */\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn mSource( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" )\n\t\t\t\t{\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( data === null || data[ a[i] ] === undefined )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn data[mSource];\n\t\t\t};\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn _fnSetObjectDataFn( mSource._ );\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Nothing to do when the data source is null */\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tmSource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* Like the get, we need to get data from a nested object */\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined )\n\t\t\t\t\t{\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) )\n\t\t\t\t{\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[mSource] = val;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d || objectRead ? {} : [];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = $.trim(cell.innerHTML);\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\t\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\n\t\t\t\tnTd = nTrIn ? anTds[i] : document.createElement( oCol.sCellType );\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( !nTrIn || oCol.mRender || oCol.mData !== i )\n\t\t\t\t{\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow] );\n\t\t}\n\t\n\t\t// Remove once webkit bug 131819 and Chromium bug 365619 have been resolved\n\t\t// and deployed\n\t\trow.nTr.setAttribute( 'role', 'row' );\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tif ( data.DT_RowId ) {\n\t\t\t\ttr.id = data.DT_RowId;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell.html() ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\t\n\t\t/* ARIA role for the rows */\n\t \t$(thead).find('>tr').attr('role', 'row');\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings )\n\t{\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar i, iLen, n;\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar iOpenRows = oSettings.aoOpenRows.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Check and see if we have an initial draw position from state saving */\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && $.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = $.isFunction( ajaxData ) ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = $.isFunction( ajaxData ) && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": function (json) {\n\t\t\t\tvar error = json.error || json.sError;\n\t\t\t\tif ( error ) {\n\t\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t\t}\n\t\n\t\t\t\toSettings.json = json;\n\t\t\t\tcallback( json );\n\t\t\t},\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( $.isFunction( ajax ) )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tif ( settings.bAjaxDataGet ) {\n\t\t\tsettings.iDraw++;\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t_fnBuildAjax(\n\t\t\t\tsettings,\n\t\t\t\t_fnAjaxParameters( settings ),\n\t\t\t\tfunction(json) {\n\t\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t\t}\n\t\t\t);\n\t\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\tsettings.bAjaxDataGet = false;\n\t\t_fnDraw( settings );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\tsettings.bAjaxDataGet = true;\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\tfunction _fnAjaxDataSrc ( oSettings, json )\n\t{\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\t// Compatibility with 1.9-. In order to read from aaData, check if the\n\t\t// default has been changed, if not, check for aaData\n\t\tif ( dataSrc === 'data' ) {\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\t\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function() {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.bind(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.bind( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\tdisplayRows.push.apply( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( ! rpSearch.test( data ) ) {\n\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\t\tif ( ! rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /\"[^\"]+\"|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnEscapeRegex ( sVal )\n\t{\n\t\treturn sVal.replace( _re_escape_regex, '\\\\$1' );\n\t}\n\t\n\t\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar fomatters = DataTable.ext.type.search;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\tif ( fomatters[ column.sType ] ) {\n\t\t\t\t\t\t\tcellData = fomatters[ column.sType ]( cellData );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster http://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// On an Ajax load we now have data and therefore want to apply the column\n\t\t// sizing\n\t\tif ( json ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = $.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option( language[i], lengths[i] );\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.bind( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).bind( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Add the ARIA grid role to the table\n\t\ttable.attr( 'role', 'grid' );\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\t// This is fairly messy, but with x scrolling enabled, if the table has a\n\t\t// width attribute, regardless of any width applied using the column width\n\t\t// options, the browser will shrink or grow the table as needed to fit into\n\t\t// that 100%. That would make the width options useless. So we remove it.\n\t\t// This is okay, under the assumption that width:100% is applied to the\n\t\t// table in CSS (it is in the default stylesheet) which will set the table\n\t\t// width as appropriate (the attribute and css behave differently...)\n\t\tif ( scroll.sX && table.attr('width') === '100%' ) {\n\t\t\ttable.removeAttr('width');\n\t\t}\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\theight: size( scrollY ),\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// If scroll collapse is enabled, when we put the headers back into the body for sizing, we\n\t\t// will end up forcing the scrollbar to appear, making our measurements wrong for when we\n\t\t// then hide it (end of this function), so add the header height to the body scroller.\n\t\tif ( scroll.bCollapse && scrollY !== \"\" ) {\n\t\t\tdivBodyStyle.height = (divBody[0].offsetHeight + header[0].offsetHeight)+\"px\";\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// x scrolling\n\t\t\tif ( scrollXInner !== \"\" ) {\n\t\t\t\t// x scroll inner has been given - use it\n\t\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\t\t}\n\t\t\telse if ( sanityWidth == divBody.width() && divBody.height() < table.height() ) {\n\t\t\t\t// There is y-scrolling - try to take account of the y scroll bar\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth-barWidth );\n\t\t\t\tif ( table.outerWidth() > sanityWidth-barWidth ) {\n\t\t\t\t\t// Not possible to take account of it\n\t\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// When all else fails\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t// Recalculate the sanity width - now that we've applied the required width,\n\t\t// before it was a temporary variable. This is required because the column\n\t\t// width calculation is done before this table DOM is created.\n\t\tsanityWidth = table.outerWidth();\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).height(0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\" style=\"height:0;overflow:hidden;\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = \"\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( table.outerWidth() < sanityWidth )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( scrollY && scroll.bCollapse ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( scrollY );\n\t\n\t\t\tvar iExtra = (scrollX && tableEl.offsetWidth > divBodyEl.offsetWidth) ?\n\t\t\t\tbarWidth :\n\t\t\t\t0;\n\t\n\t\t\tif ( tableEl.offsetHeight < divBodyEl.offsetHeight ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+iExtra );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.scroll();\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ! userInputs && ! scrollX && ! scrollY &&\n\t\t    columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t\tcolumnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tcolumns[i].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it\n\t\t\ttmpTable.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\n\t\t\t\tif ( tmpTable.width() < tableContainer.offsetWidth ) {\n\t\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Take into account the y scrollbar\n\t\t\t_fnScrollingWidthAdjust( oSettings, tmpTable[0] );\n\t\n\t\t\t// Browsers need a bit of a hand when a width is assigned to any columns\n\t\t\t// when x-scrolling as they tend to collapse the table to the min-width,\n\t\t\t// even if we sent the column widths. So we need to keep track of what\n\t\t\t// the table width should be by summing the user given values, and the\n\t\t\t// automatic values\n\t\t\tif ( scrollX )\n\t\t\t{\n\t\t\t\tvar total = 0;\n\t\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\t\touterWidth = $(headerCells[i]).outerWidth();\n\t\n\t\t\t\t\ttotal += column.sWidthOrig === null ?\n\t\t\t\t\t\touterWidth :\n\t\t\t\t\t\tparseInt( column.sWidth, 10 ) + outerWidth - $(headerCells[i]).width();\n\t\t\t\t}\n\t\n\t\t\t\ttmpTable.width( _fnStringToCss( total ) );\n\t\t\t\ttable.style.width = _fnStringToCss( total );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\twidth = $(headerCells[i]).width();\n\t\n\t\t\t\tif ( width ) {\n\t\t\t\t\tcolumn.sWidth = _fnStringToCss( width );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( tmpTable.css('width') );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\ttmpTable.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( oSettings.oBrowser.bScrollOversize ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnThrottle( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\t\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow  = +new Date(),\n\t\t\t\targs = arguments;\n\t\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Convert a CSS unit width to pixels (e.g. 2em)\n\t *  @param {string} width width to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( width, parent )\n\t{\n\t\tif ( ! width ) {\n\t\t\treturn 0;\n\t\t}\n\t\n\t\tvar n = $('<div/>')\n\t\t\t.css( 'width', _fnStringToCss( width ) )\n\t\t\t.appendTo( parent || document.body );\n\t\n\t\tvar val = n[0].offsetWidth;\n\t\tn.remove();\n\t\n\t\treturn val;\n\t}\n\t\n\t\n\t/**\n\t * Adjust a table's width to take account of vertical scroll bar\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n table node\n\t *  @memberof DataTable#oApi\n\t */\n\t\n\tfunction _fnScrollingWidthAdjust ( settings, n )\n\t{\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX || scroll.sY ) {\n\t\t\t// When y-scrolling only, we want to remove the width of the scroll bar\n\t\t\t// so the table + scroll bar will fit into the area available, otherwise\n\t\t\t// we fix the table at its current size with no adjustment\n\t\t\tvar correction = ! scroll.sX ? scroll.iBarWidth : 0;\n\t\t\tn.style.width = _fnStringToCss( $(n).outerWidth() - correction );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t/**\n\t * Get the width of a scroll bar in this browser being used\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollBarWidth ()\n\t{\n\t\t// On first run a static variable is set, since this is only needed once.\n\t\t// Subsequent runs will just use the previously calculated value\n\t\tvar width = DataTable.__scrollbarWidth;\n\t\n\t\tif ( width === undefined ) {\n\t\t\tvar sizer = $('<p/>').css( {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: 150,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\toverflow: 'scroll',\n\t\t\t\t\tvisibility: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.appendTo('body');\n\t\n\t\t\twidth = sizer[0].offsetWidth - sizer[0].clientWidth;\n\t\t\tDataTable.__scrollbarWidth = width;\n\t\n\t\t\tsizer.remove();\n\t\t}\n\t\n\t\treturn width;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! $.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\tnestedSort.push.apply( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( $.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif ( !settings.oFeatures.bStateSave || settings.bDestroying )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\t\tsettings.oSavedState = state;\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit )\n\t{\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings );\n\t\tif ( ! state || ! state.time ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t * cancelling of loading by returning false\n\t\t */\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, state] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Reject old data */\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && state.time < +new Date() - (duration*1000) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( columns.length !== state.columns.length ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, state );\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( state.start !== undefined ) {\n\t\t\tsettings._iDisplayStart    = state.start;\n\t\t\tsettings.iInitDisplayStart = state.start;\n\t\t}\n\t\tif ( state.length !== undefined ) {\n\t\t\tsettings._iDisplayLength   = state.length;\n\t\t}\n\t\n\t\t// Order\n\t\tif ( state.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( state.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( state.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( state.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tfor ( i=0, ien=state.columns.length ; i<ien ; i++ ) {\n\t\t\tvar col = state.columns[i];\n\t\n\t\t\t// Visibility\n\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t}\n\t\n\t\t\t// Search\n\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );\n\t}\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings!==null ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'http://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( $.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.bind( 'click.DT', oData, function (e) {\n\t\t\t\t\tn.blur(); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.bind( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.bind( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\n\t\t\t$(settings.nTable).trigger( e, args );\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\n\tDataTable = function( options )\n\t{\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).bind('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.oApi = this.internal = _ext.internal;\n\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ) );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif ( s.nTable == this || s.nTHead.parentNode == this || (s.nTFoot && s.nTFoot.parentNode == this) )\n\t\t\t\t{\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t\n\t\t\tif ( oInit.oLanguage )\n\t\t\t{\n\t\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t}\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ],\n\t\t\t\t[ \"bJQueryUI\", \"bJUI\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t// @todo Remove in 1.11\n\t\t\tif ( oInit.bJQueryUI )\n\t\t\t{\n\t\t\t\t/* Use the JUI classes object for display. You could clone the oStdClasses object if\n\t\t\t\t * you want to have multiple tables with multiple independent classes\n\t\t\t\t */\n\t\t\t\t$.extend( oClasses, DataTable.ext.oJUIClasses, oInit.oClasses );\n\t\t\t\n\t\t\t\tif ( oInit.sDom === defaults.sDom && defaults.sDom === \"lfrtip\" )\n\t\t\t\t{\n\t\t\t\t\t/* Set the DOM to use a layout suitable for jQuery UI's theming */\n\t\t\t\t\toSettings.sDom = '<\"H\"lfr>t<\"F\"ip>';\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( ! oSettings.renderer ) {\n\t\t\t\t\toSettings.renderer = 'jqueryui';\n\t\t\t\t}\n\t\t\t\telse if ( $.isPlainObject( oSettings.renderer ) && ! oSettings.renderer.header ) {\n\t\t\t\t\toSettings.renderer.header = 'jqueryui';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t}\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t/* Calculate the scroll bar width and cache it for use later on */\n\t\t\tif ( oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\toSettings.oScroll.iBarWidth = _fnScrollBarWidth();\n\t\t\t}\n\t\t\tif ( oSettings.oScroll.sX === true ) { // Easy initialisation of x-scrolling\n\t\t\t\toSettings.oScroll.sX = '100%';\n\t\t\t}\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = $.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl !== \"\" )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json );\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$.each( _fnGetRowElements( oSettings, rowOne[0] ).cells, function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit );\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\t\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined )\n\t\t\t{\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\tif ( features.bSort )\n\t\t\t{\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\tthis._captionSide = $this.css('caption-side');\n\t\t\t} );\n\t\t\t\n\t\t\tvar thead = $this.children('thead');\n\t\t\tif ( thead.length === 0 )\n\t\t\t{\n\t\t\t\tthead = $('<thead/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 )\n\t\t\t{\n\t\t\t\ttbody = $('<tbody/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") )\n\t\t\t{\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo(this);\n\t\t\t}\n\t\t\t\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\t\t\t\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData )\n\t\t\t{\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ )\n\t\t\t\t{\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' )\n\t\t\t{\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\t\t\t\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false )\n\t\t\t{\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( $.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\tthis.push.apply( this, data.toArray ? data.toArray() : data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t_Api.prototype = /** @lends DataTables.Api */{\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.flatten().length !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn el[ prop ];\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t};\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tj, jen,\n\t\t\tstruct, inner,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = typeof struct.val === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\t$.isPlainObject( struct.val ) ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   []\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\t$.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'draw()', function ( resetPaging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnReDraw( settings, resetPaging===false );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t// Trigger xhr\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\ta = selector[i] && selector[i].split ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout.push.apply( out, res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and fitler=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\ta = search == 'none' ?\n\t\t\t\tdisplayMaster.slice() :                      // no search\n\t\t\t\tsearch == 'applied' ?\n\t\t\t\t\tdisplayFiltered.slice() :                // applied search\n\t\t\t\t\t$.map( displayMaster, function (el, i) { // removed search\n\t\t\t\t\t\treturn $.inArray( el, displayFiltered ) === -1 ? el : null;\n\t\t\t\t\t} );\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\t\n\t\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( ! sel ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = settings.aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tif ( $.inArray( sel, nodes ) !== -1 ) {\n\t\t\t\t\treturn [ sel._DT_RowIndex ]; // sel is a TR node that is in the table\n\t\t\t\t\t                             // and DataTables adds a prop for fast lookup\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the _DT_RowIndex parameter on all rows in the table\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i].nTr !== null ) {\n\t\t\t\t\tdata[i].nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Remove the target row from the search array\n\t\t\tvar displayIndex = $.inArray( row, settings.aiDisplay );\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\tmodRows.push.apply( modRows, newRows.toArray() );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tctx[0].aoData[ this[0] ]._aData = data;\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( $.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td/></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.remove();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t}\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-visibility'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.children('td[colspan]').attr('colspan', visible );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^(.+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\t\treturn $( nodes )\n\t\t\t\t\t.filter( s )\n\t\t\t\t\t.map( function () {\n\t\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t\t} )\n\t\t\t\t\t.toArray();\n\t\t\t}\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis, recalc ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\tif ( recalc === undefined || recalc ) {\n\t\t\t// Automatically adjust column sizing\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\n\t\t\t// Realign columns for scrolling\n\t\t\tif ( settings.oScroll.sX || settings.oScroll.sY ) {\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis] );\n\t\n\t\t_fnSaveState( settings );\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis, calc );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\t\n\t\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $( [].concat.apply([], cells) );\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = settings.aoData[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\treturn [s];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\treturn allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\trow = el.parentNode._DT_RowIndex;\n\t\n\t\t\t\t\treturn {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: $.inArray( el, data[ row ].anCells )\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, opts );\n\t\tvar rows = this.rows( rowSelector, opts );\n\t\tvar a, i, ien, j, jen;\n\t\n\t\tvar cells = this.iterator( 'table', function ( settings, idx ) {\n\t\t\ta = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar cells = settings.aoData[ row ].anCells;\n\t\t\treturn cells ?\n\t\t\t\tcells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( ! $.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\treturn $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: _fnThrottle,\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} sVal string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: _fnEscapeRegex\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\tif ( ! args[0].match(/\\.dt\\b/) ) {\n\t\t\t\targs[0] += '.dt';\n\t\t\t}\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar orig      = settings.nTableWrapper.parentNode;\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.unbind('.DT').find(':not(tbody *)').unbind('.DT');\n\t\t\t$(window).unbind('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tjqTable.detach();\n\t\t\tjqWrapper.detach();\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\tif ( settings.bJUI ) {\n\t\t\t\t$('th span.'+classes.sSortIcon+ ', td span.'+classes.sSortIcon, thead).detach();\n\t\t\t\t$('th, td', thead).each( function () {\n\t\t\t\t\tvar wrapper = $('div.'+classes.sSortJUIWrapper, this);\n\t\t\t\t\t$(this).append( wrapper.contents() );\n\t\t\t\t\twrapper.detach();\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\t\t}\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\treturn this.iterator( type, function ( settings, idx, idx2 ) {\n\t\t\t\t// idx2 is undefined for rows and columns.\n\t\t\t\tfn.call( new _Api( settings )[ type ]( idx, idx2 ) );\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn resolved.replace( '%d', plural ); // nb: plural might be undefined,\n\t} );\n\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See http://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.10.7\";\n\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would at around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit.\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some\n\t\t * slightly different and additional mark-up from what DataTables has\n\t\t * traditionally used).\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.jQueryUI\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"jQueryUI\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bJQueryUI\": false,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings) {\n\t\t *          var o;\n\t\t *\n\t\t *          // Send an Ajax request to the server to get the data. Note that\n\t\t *          // this is a synchronous request.\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"async\": false,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              o = json;\n\t\t *            }\n\t\t *          } );\n\t\t *\n\t\t *          return o;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *  @default Processing...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"Processing...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"http://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features four different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus\n\t\t *   page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"platform.details.0\" },\n\t\t *          { \"data\": \"platform.details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed dislay and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all fro DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * Note if draw should be blocked while getting data\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bAjaxDataGet\": true,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * Flag to indicate if jQuery UI marking and classes should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bJUI\": null,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {}\n\t};\n\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! $.isNumeric( data.substring(1) ) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatiblity only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_asc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_desc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\t(function() {\n\t\n\t// Reused strings for better compression. Closure compiler appears to have a\n\t// weird edge case where it is trying to expand strings rather than use the\n\t// variable version. This results in about 200 bytes being added, for very\n\t// little preference benefit since it this run on script load only.\n\tvar _empty = '';\n\t_empty = '';\n\t\n\tvar _stateDefault = _empty + 'ui-state-default';\n\tvar _sortIcon     = _empty + 'css_right ui-icon ui-icon-';\n\tvar _headerFooter = _empty + 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix';\n\t\n\t$.extend( DataTable.ext.oJUIClasses, DataTable.ext.classes, {\n\t\t/* Full numbers paging buttons */\n\t\t\"sPageButton\":         \"fg-button ui-button \"+_stateDefault,\n\t\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\t\n\t\t/* Features */\n\t\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\":            _stateDefault+\" sorting_asc\",\n\t\t\"sSortDesc\":           _stateDefault+\" sorting_desc\",\n\t\t\"sSortable\":           _stateDefault+\" sorting\",\n\t\t\"sSortableAsc\":        _stateDefault+\" sorting_asc_disabled\",\n\t\t\"sSortableDesc\":       _stateDefault+\" sorting_desc_disabled\",\n\t\t\"sSortableNone\":       _stateDefault+\" sorting_disabled\",\n\t\t\"sSortJUIAsc\":         _sortIcon+\"triangle-1-n\",\n\t\t\"sSortJUIDesc\":        _sortIcon+\"triangle-1-s\",\n\t\t\"sSortJUI\":            _sortIcon+\"carat-2-n-s\",\n\t\t\"sSortJUIAscAllowed\":  _sortIcon+\"carat-1-n\",\n\t\t\"sSortJUIDescAllowed\": _sortIcon+\"carat-1-s\",\n\t\t\"sSortJUIWrapper\":     \"DataTables_sort_wrapper\",\n\t\t\"sSortIcon\":           \"DataTables_sort_icon\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollHead\": \"dataTables_scrollHead \"+_stateDefault,\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot \"+_stateDefault,\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\":  _stateDefault,\n\t\t\"sFooterTH\":  _stateDefault,\n\t\t\"sJUIHeader\": _headerFooter+\" ui-corner-tl ui-corner-tr\",\n\t\t\"sJUIFooter\": _headerFooter+\" ui-corner-bl ui-corner-br\"\n\t} );\n\t\n\t}());\n\t\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar btnDisplay, btnClass, counter=0;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( $.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbtnDisplay = '';\n\t\t\t\t\t\t\tbtnClass = '';\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\t\t\t\tnode = $('<a>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': counter,\n\t\t\t\t\t\t\t\t\t\t'tabindex': settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\n\t\t\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 will remove any unknown characters at the start and end of the\n\t\t\t// expression, leading to false matches such as `$245.12` or `10%` being\n\t\t\t// a valid date. See forum thread 18941 for detail.\n\t\t\tif ( d && !(d instanceof Date) && ( ! _re_date_start.test(d) || ! _re_date_end.test(d) ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\treturn Date.parse( d ) || 0;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// http://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tcolumn.sSortingClass +' '+\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 4 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tnumber: function ( thousands, decimal, precision, prefix ) {\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\td = Math.abs( parseFloat( d ) );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnScrollingWidthAdjust: _fnScrollingWidthAdjust,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnScrollBarWidth: _fnScrollBarWidth,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\n\t// Information about events fired by DataTables - for documentation.\n\t/**\n\t * Draw event, fired whenever the table is redrawn on the page, at the same\n\t * point as fnDrawCallback. This may be useful for binding events or\n\t * performing calculations when the table is altered at all.\n\t *  @name DataTable#draw.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Search event, fired when the searching applied to the table (using the\n\t * built-in global search, or column filters) is altered.\n\t *  @name DataTable#search.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page change event, fired when the paging of the table is altered.\n\t *  @name DataTable#page.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Order event, fired when the ordering applied to the table is altered.\n\t *  @name DataTable#order.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * DataTables initialisation complete event, fired when the table is fully\n\t * drawn, including Ajax data loaded, if Ajax data is required.\n\t *  @name DataTable#init.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The JSON object request from the server - only\n\t *    present if client-side Ajax sourced data is used</li></ol>\n\t */\n\n\t/**\n\t * State save event, fired when the table has changed state a new state save\n\t * is required. This event allows modification of the state saving object\n\t * prior to actually doing the save, including addition or other state\n\t * properties (for plug-ins) or modification of a DataTables core property.\n\t *  @name DataTable#stateSaveParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The state information to be saved\n\t */\n\n\t/**\n\t * State load event, fired when the table is loading state from the stored\n\t * data, but prior to the settings object being modified by the saved state\n\t * - allowing modification of the saved state is required or loading of\n\t * state for a plug-in.\n\t *  @name DataTable#stateLoadParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * State loaded event, fired when state has been loaded from stored data and\n\t * the settings object has been modified by the loaded data.\n\t *  @name DataTable#stateLoaded.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * Processing event, fired when DataTables is doing some kind of processing\n\t * (be it, order, searcg or anything else). It can be used to indicate to\n\t * the end user that there is something happening, or that something has\n\t * finished.\n\t *  @name DataTable#processing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {boolean} bShow Flag for if DataTables is doing processing or not\n\t */\n\n\t/**\n\t * Ajax (XHR) event, fired whenever an Ajax request is completed from a\n\t * request to made to the server for new data. This event is called before\n\t * DataTables processed the returned data, so it can also be used to pre-\n\t * process the data returned from the server, if needed.\n\t *\n\t * Note that this trigger is called in `fnServerData`, if you override\n\t * `fnServerData` and which to use this event, you need to trigger it in you\n\t * success function.\n\t *  @name DataTable#xhr.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {object} json JSON returned from the server\n\t *\n\t *  @example\n\t *     // Use a custom property returned from the server in another DOM element\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       $('#status').html( json.status );\n\t *     } );\n\t *\n\t *  @example\n\t *     // Pre-process the data returned from the server\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {\n\t *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;\n\t *       }\n\t *       // Note no return - manipulate the data directly in the JSON object.\n\t *     } );\n\t */\n\n\t/**\n\t * Destroy event, fired when the DataTable is destroyed by calling fnDestroy\n\t * or passing the bDestroy:true parameter in the initialisation object. This\n\t * can be used to remove bound events, added DOM nodes, etc.\n\t *  @name DataTable#destroy.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page length change event, fired when number of records to show on each\n\t * page (the length) is changed.\n\t *  @name DataTable#length.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {integer} len New length\n\t */\n\n\t/**\n\t * Column sizing has changed.\n\t *  @name DataTable#column-sizing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Column visibility has changed.\n\t *  @name DataTable#column-visibility.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {int} column Column index\n\t *  @param {bool} vis `false` if column now hidden, or `true` if visible\n\t */\n\n\treturn $.fn.dataTable;\n}));\n\n}(window, document));\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-knob/excanvas.js",
    "content": "// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns are not implemented.\n// * Radial gradient are not implemented. The VML version of these look very\n//   different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n//   width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n//   Quirks mode will draw the canvas using border-box. Either change your\n//   doctype to HTML5\n//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n//   or use Box Sizing Behavior from WebFX\n//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n  // alias some functions to make (compiled) code shorter\n  var m = Math;\n  var mr = m.round;\n  var ms = m.sin;\n  var mc = m.cos;\n  var abs = m.abs;\n  var sqrt = m.sqrt;\n\n  // this is used for sub pixel precision\n  var Z = 10;\n  var Z2 = Z / 2;\n\n  /**\n   * This funtion is assigned to the <canvas> elements as element.getContext().\n   * @this {HTMLElement}\n   * @return {CanvasRenderingContext2D_}\n   */\n  function getContext() {\n    return this.context_ ||\n        (this.context_ = new CanvasRenderingContext2D_(this));\n  }\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Binds a function to an object. The returned function will always use the\n   * passed in {@code obj} as {@code this}.\n   *\n   * Example:\n   *\n   *   g = bind(f, obj, a, b)\n   *   g(c, d) // will do f.call(obj, a, b, c, d)\n   *\n   * @param {Function} f The function to bind the object to\n   * @param {Object} obj The object that should act as this when the function\n   *     is called\n   * @param {*} var_args Rest arguments that will be used as the initial\n   *     arguments when the function is called\n   * @return {Function} A new function that has bound this\n   */\n  function bind(f, obj, var_args) {\n    var a = slice.call(arguments, 2);\n    return function() {\n      return f.apply(obj, a.concat(slice.call(arguments)));\n    };\n  }\n\n  var G_vmlCanvasManager_ = {\n    init: function(opt_doc) {\n      if (/MSIE/.test(navigator.userAgent) && !window.opera) {\n        var doc = opt_doc || document;\n        // Create a dummy element so that IE will allow canvas elements to be\n        // recognized.\n        doc.createElement('canvas');\n        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n      }\n    },\n\n    init_: function(doc) {\n      // create xmlns\n      if (!doc.namespaces['g_vml_']) {\n        doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',\n                           '#default#VML');\n\n      }\n      if (!doc.namespaces['g_o_']) {\n        doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',\n                           '#default#VML');\n      }\n\n      // Setup default CSS.  Only add one style sheet per document\n      if (!doc.styleSheets['ex_canvas_']) {\n        var ss = doc.createStyleSheet();\n        ss.owningElement.id = 'ex_canvas_';\n        ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n            // default size is 300x150 in Gecko and Opera\n            'text-align:left;width:300px;height:150px}' +\n            'g_vml_\\\\:*{behavior:url(#default#VML)}' +\n            'g_o_\\\\:*{behavior:url(#default#VML)}';\n\n      }\n\n      // find all canvas elements\n      var els = doc.getElementsByTagName('canvas');\n      for (var i = 0; i < els.length; i++) {\n        this.initElement(els[i]);\n      }\n    },\n\n    /**\n     * Public initializes a canvas element so that it can be used as canvas\n     * element from now on. This is called automatically before the page is\n     * loaded but if you are creating elements using createElement you need to\n     * make sure this is called on the element.\n     * @param {HTMLElement} el The canvas element to initialize.\n     * @return {HTMLElement} the element that was created.\n     */\n    initElement: function(el) {\n      if (!el.getContext) {\n\n        el.getContext = getContext;\n\n        // Remove fallback content. There is no way to hide text nodes so we\n        // just remove all childNodes. We could hide all elements and remove\n        // text nodes but who really cares about the fallback content.\n        el.innerHTML = '';\n\n        // do not use inline function because that will leak memory\n        el.attachEvent('onpropertychange', onPropertyChange);\n        el.attachEvent('onresize', onResize);\n\n        var attrs = el.attributes;\n        if (attrs.width && attrs.width.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setWidth_(attrs.width.nodeValue);\n          el.style.width = attrs.width.nodeValue + 'px';\n        } else {\n          el.width = el.clientWidth;\n        }\n        if (attrs.height && attrs.height.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setHeight_(attrs.height.nodeValue);\n          el.style.height = attrs.height.nodeValue + 'px';\n        } else {\n          el.height = el.clientHeight;\n        }\n        //el.getContext().setCoordsize_()\n      }\n      return el;\n    }\n  };\n\n  function onPropertyChange(e) {\n    var el = e.srcElement;\n\n    switch (e.propertyName) {\n      case 'width':\n        el.style.width = el.attributes.width.nodeValue + 'px';\n        el.getContext().clearRect();\n        break;\n      case 'height':\n        el.style.height = el.attributes.height.nodeValue + 'px';\n        el.getContext().clearRect();\n        break;\n    }\n  }\n\n  function onResize(e) {\n    var el = e.srcElement;\n    if (el.firstChild) {\n      el.firstChild.style.width =  el.clientWidth + 'px';\n      el.firstChild.style.height = el.clientHeight + 'px';\n    }\n  }\n\n  G_vmlCanvasManager_.init();\n\n  // precompute \"00\" to \"FF\"\n  var dec2hex = [];\n  for (var i = 0; i < 16; i++) {\n    for (var j = 0; j < 16; j++) {\n      dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);\n    }\n  }\n\n  function createMatrixIdentity() {\n    return [\n      [1, 0, 0],\n      [0, 1, 0],\n      [0, 0, 1]\n    ];\n  }\n\n  function matrixMultiply(m1, m2) {\n    var result = createMatrixIdentity();\n\n    for (var x = 0; x < 3; x++) {\n      for (var y = 0; y < 3; y++) {\n        var sum = 0;\n\n        for (var z = 0; z < 3; z++) {\n          sum += m1[x][z] * m2[z][y];\n        }\n\n        result[x][y] = sum;\n      }\n    }\n    return result;\n  }\n\n  function copyState(o1, o2) {\n    o2.fillStyle     = o1.fillStyle;\n    o2.lineCap       = o1.lineCap;\n    o2.lineJoin      = o1.lineJoin;\n    o2.lineWidth     = o1.lineWidth;\n    o2.miterLimit    = o1.miterLimit;\n    o2.shadowBlur    = o1.shadowBlur;\n    o2.shadowColor   = o1.shadowColor;\n    o2.shadowOffsetX = o1.shadowOffsetX;\n    o2.shadowOffsetY = o1.shadowOffsetY;\n    o2.strokeStyle   = o1.strokeStyle;\n    o2.globalAlpha   = o1.globalAlpha;\n    o2.arcScaleX_    = o1.arcScaleX_;\n    o2.arcScaleY_    = o1.arcScaleY_;\n    o2.lineScale_    = o1.lineScale_;\n  }\n\n  function processStyle(styleString) {\n    var str, alpha = 1;\n\n    styleString = String(styleString);\n    if (styleString.substring(0, 3) == 'rgb') {\n      var start = styleString.indexOf('(', 3);\n      var end = styleString.indexOf(')', start + 1);\n      var guts = styleString.substring(start + 1, end).split(',');\n\n      str = '#';\n      for (var i = 0; i < 3; i++) {\n        str += dec2hex[Number(guts[i])];\n      }\n\n      if (guts.length == 4 && styleString.substr(3, 1) == 'a') {\n        alpha = guts[3];\n      }\n    } else {\n      str = styleString;\n    }\n\n    return {color: str, alpha: alpha};\n  }\n\n  function processLineCap(lineCap) {\n    switch (lineCap) {\n      case 'butt':\n        return 'flat';\n      case 'round':\n        return 'round';\n      case 'square':\n      default:\n        return 'square';\n    }\n  }\n\n  /**\n   * This class implements CanvasRenderingContext2D interface as described by\n   * the WHATWG.\n   * @param {HTMLElement} surfaceElement The element that the 2D context should\n   * be associated with\n   */\n  function CanvasRenderingContext2D_(surfaceElement) {\n    this.m_ = createMatrixIdentity();\n\n    this.mStack_ = [];\n    this.aStack_ = [];\n    this.currentPath_ = [];\n\n    // Canvas context properties\n    this.strokeStyle = '#000';\n    this.fillStyle = '#000';\n\n    this.lineWidth = 1;\n    this.lineJoin = 'miter';\n    this.lineCap = 'butt';\n    this.miterLimit = Z * 1;\n    this.globalAlpha = 1;\n    this.canvas = surfaceElement;\n\n    var el = surfaceElement.ownerDocument.createElement('div');\n    el.style.width =  surfaceElement.clientWidth + 'px';\n    el.style.height = surfaceElement.clientHeight + 'px';\n    el.style.overflow = 'hidden';\n    el.style.position = 'absolute';\n    surfaceElement.appendChild(el);\n\n    this.element_ = el;\n    this.arcScaleX_ = 1;\n    this.arcScaleY_ = 1;\n    this.lineScale_ = 1;\n  }\n\n  var contextPrototype = CanvasRenderingContext2D_.prototype;\n  contextPrototype.clearRect = function() {\n    this.element_.innerHTML = '';\n  };\n\n  contextPrototype.beginPath = function() {\n    // TODO: Branch current matrix so that save/restore has no effect\n    //       as per safari docs.\n    this.currentPath_ = [];\n  };\n\n  contextPrototype.moveTo = function(aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.lineTo = function(aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n                                            aCP2x, aCP2y,\n                                            aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    var cp1 = this.getCoords_(aCP1x, aCP1y);\n    var cp2 = this.getCoords_(aCP2x, aCP2y);\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  // Helper function that takes the already fixed cordinates.\n  function bezierCurveTo(self, cp1, cp2, p) {\n    self.currentPath_.push({\n      type: 'bezierCurveTo',\n      cp1x: cp1.x,\n      cp1y: cp1.y,\n      cp2x: cp2.x,\n      cp2y: cp2.y,\n      x: p.x,\n      y: p.y\n    });\n    self.currentX_ = p.x;\n    self.currentY_ = p.y;\n  }\n\n  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n    // the following is lifted almost directly from\n    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n    var cp = this.getCoords_(aCPx, aCPy);\n    var p = this.getCoords_(aX, aY);\n\n    var cp1 = {\n      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n    };\n    var cp2 = {\n      x: cp1.x + (p.x - this.currentX_) / 3.0,\n      y: cp1.y + (p.y - this.currentY_) / 3.0\n    };\n\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  contextPrototype.arc = function(aX, aY, aRadius,\n                                  aStartAngle, aEndAngle, aClockwise) {\n    aRadius *= Z;\n    var arcType = aClockwise ? 'at' : 'wa';\n\n    var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n    var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n    // IE won't render arches drawn counter clockwise if xStart == xEnd.\n    if (xStart == xEnd && !aClockwise) {\n      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n                       // that can be represented in binary\n    }\n\n    var p = this.getCoords_(aX, aY);\n    var pStart = this.getCoords_(xStart, yStart);\n    var pEnd = this.getCoords_(xEnd, yEnd);\n\n    this.currentPath_.push({type: arcType,\n                           x: p.x,\n                           y: p.y,\n                           radius: aRadius,\n                           xStart: pStart.x,\n                           yStart: pStart.y,\n                           xEnd: pEnd.x,\n                           yEnd: pEnd.y});\n\n  };\n\n  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n  };\n\n  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.stroke();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.fill();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n    var gradient = new CanvasGradient_('gradient');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    return gradient;\n  };\n\n  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n                                                   aX1, aY1, aR1) {\n    var gradient = new CanvasGradient_('gradientradial');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.r0_ = aR0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    gradient.r1_ = aR1;\n    return gradient;\n  };\n\n  contextPrototype.drawImage = function(image, var_args) {\n    var dx, dy, dw, dh, sx, sy, sw, sh;\n\n    // to find the original width we overide the width and height\n    var oldRuntimeWidth = image.runtimeStyle.width;\n    var oldRuntimeHeight = image.runtimeStyle.height;\n    image.runtimeStyle.width = 'auto';\n    image.runtimeStyle.height = 'auto';\n\n    // get the original size\n    var w = image.width;\n    var h = image.height;\n\n    // and remove overides\n    image.runtimeStyle.width = oldRuntimeWidth;\n    image.runtimeStyle.height = oldRuntimeHeight;\n\n    if (arguments.length == 3) {\n      dx = arguments[1];\n      dy = arguments[2];\n      sx = sy = 0;\n      sw = dw = w;\n      sh = dh = h;\n    } else if (arguments.length == 5) {\n      dx = arguments[1];\n      dy = arguments[2];\n      dw = arguments[3];\n      dh = arguments[4];\n      sx = sy = 0;\n      sw = w;\n      sh = h;\n    } else if (arguments.length == 9) {\n      sx = arguments[1];\n      sy = arguments[2];\n      sw = arguments[3];\n      sh = arguments[4];\n      dx = arguments[5];\n      dy = arguments[6];\n      dw = arguments[7];\n      dh = arguments[8];\n    } else {\n      throw Error('Invalid number of arguments');\n    }\n\n    var d = this.getCoords_(dx, dy);\n\n    var w2 = sw / 2;\n    var h2 = sh / 2;\n\n    var vmlStr = [];\n\n    var W = 10;\n    var H = 10;\n\n    // For some reason that I've now forgotten, using divs didn't work\n    vmlStr.push(' <g_vml_:group',\n                ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                ' coordorigin=\"0,0\"' ,\n                ' style=\"width:', W, 'px;height:', H, 'px;position:absolute;');\n\n    // If filters are necessary (rotation exists), create them\n    // filters are bog-slow, so only create them if abbsolutely necessary\n    // The following check doesn't account for skews (which don't exist\n    // in the canvas spec (yet) anyway.\n\n    if (this.m_[0][0] != 1 || this.m_[0][1]) {\n      var filter = [];\n\n      // Note the 12/21 reversal\n      filter.push('M11=', this.m_[0][0], ',',\n                  'M12=', this.m_[1][0], ',',\n                  'M21=', this.m_[0][1], ',',\n                  'M22=', this.m_[1][1], ',',\n                  'Dx=', mr(d.x / Z), ',',\n                  'Dy=', mr(d.y / Z), '');\n\n      // Bounding box calculation (need to minimize displayed area so that\n      // filters don't waste time on unused pixels.\n      var max = d;\n      var c2 = this.getCoords_(dx + dw, dy);\n      var c3 = this.getCoords_(dx, dy + dh);\n      var c4 = this.getCoords_(dx + dw, dy + dh);\n\n      max.x = m.max(max.x, c2.x, c3.x, c4.x);\n      max.y = m.max(max.y, c2.y, c3.y, c4.y);\n\n      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),\n                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',\n                  filter.join(''), \", sizingmethod='clip');\")\n    } else {\n      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');\n    }\n\n    vmlStr.push(' \">' ,\n                '<g_vml_:image src=\"', image.src, '\"',\n                ' style=\"width:', Z * dw, 'px;',\n                ' height:', Z * dh, 'px;\"',\n                ' cropleft=\"', sx / w, '\"',\n                ' croptop=\"', sy / h, '\"',\n                ' cropright=\"', (w - sx - sw) / w, '\"',\n                ' cropbottom=\"', (h - sy - sh) / h, '\"',\n                ' />',\n                '</g_vml_:group>');\n\n    this.element_.insertAdjacentHTML('BeforeEnd',\n                                    vmlStr.join(''));\n  };\n\n  contextPrototype.stroke = function(aFill) {\n    var lineStr = [];\n    var lineOpen = false;\n    var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);\n    var color = a.color;\n    var opacity = a.alpha * this.globalAlpha;\n\n    var W = 10;\n    var H = 10;\n\n    lineStr.push('<g_vml_:shape',\n                 ' filled=\"', !!aFill, '\"',\n                 ' style=\"position:absolute;width:', W, 'px;height:', H, 'px;\"',\n                 ' coordorigin=\"0 0\" coordsize=\"', Z * W, ' ', Z * H, '\"',\n                 ' stroked=\"', !aFill, '\"',\n                 ' path=\"');\n\n    var newSeq = false;\n    var min = {x: null, y: null};\n    var max = {x: null, y: null};\n\n    for (var i = 0; i < this.currentPath_.length; i++) {\n      var p = this.currentPath_[i];\n      var c;\n\n      switch (p.type) {\n        case 'moveTo':\n          c = p;\n          lineStr.push(' m ', mr(p.x), ',', mr(p.y));\n          break;\n        case 'lineTo':\n          lineStr.push(' l ', mr(p.x), ',', mr(p.y));\n          break;\n        case 'close':\n          lineStr.push(' x ');\n          p = null;\n          break;\n        case 'bezierCurveTo':\n          lineStr.push(' c ',\n                       mr(p.cp1x), ',', mr(p.cp1y), ',',\n                       mr(p.cp2x), ',', mr(p.cp2y), ',',\n                       mr(p.x), ',', mr(p.y));\n          break;\n        case 'at':\n        case 'wa':\n          lineStr.push(' ', p.type, ' ',\n                       mr(p.x - this.arcScaleX_ * p.radius), ',',\n                       mr(p.y - this.arcScaleY_ * p.radius), ' ',\n                       mr(p.x + this.arcScaleX_ * p.radius), ',',\n                       mr(p.y + this.arcScaleY_ * p.radius), ' ',\n                       mr(p.xStart), ',', mr(p.yStart), ' ',\n                       mr(p.xEnd), ',', mr(p.yEnd));\n          break;\n      }\n\n\n      // TODO: Following is broken for curves due to\n      //       move to proper paths.\n\n      // Figure out dimensions so we can do gradient fills\n      // properly\n      if (p) {\n        if (min.x == null || p.x < min.x) {\n          min.x = p.x;\n        }\n        if (max.x == null || p.x > max.x) {\n          max.x = p.x;\n        }\n        if (min.y == null || p.y < min.y) {\n          min.y = p.y;\n        }\n        if (max.y == null || p.y > max.y) {\n          max.y = p.y;\n        }\n      }\n    }\n    lineStr.push(' \">');\n\n    if (!aFill) {\n      var lineWidth = this.lineScale_ * this.lineWidth;\n\n      // VML cannot correctly render a line if the width is less than 1px.\n      // In that case, we dilute the color to make the line look thinner.\n      if (lineWidth < 1) {\n        opacity *= lineWidth;\n      }\n\n      lineStr.push(\n        '<g_vml_:stroke',\n        ' opacity=\"', opacity, '\"',\n        ' joinstyle=\"', this.lineJoin, '\"',\n        ' miterlimit=\"', this.miterLimit, '\"',\n        ' endcap=\"', processLineCap(this.lineCap), '\"',\n        ' weight=\"', lineWidth, 'px\"',\n        ' color=\"', color, '\" />'\n      );\n    } else if (typeof this.fillStyle == 'object') {\n      var fillStyle = this.fillStyle;\n      var angle = 0;\n      var focus = {x: 0, y: 0};\n\n      // additional offset\n      var shift = 0;\n      // scale factor for offset\n      var expansion = 1;\n\n      if (fillStyle.type_ == 'gradient') {\n        var x0 = fillStyle.x0_ / this.arcScaleX_;\n        var y0 = fillStyle.y0_ / this.arcScaleY_;\n        var x1 = fillStyle.x1_ / this.arcScaleX_;\n        var y1 = fillStyle.y1_ / this.arcScaleY_;\n        var p0 = this.getCoords_(x0, y0);\n        var p1 = this.getCoords_(x1, y1);\n        var dx = p1.x - p0.x;\n        var dy = p1.y - p0.y;\n        angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n        // The angle should be a non-negative number.\n        if (angle < 0) {\n          angle += 360;\n        }\n\n        // Very small angles produce an unexpected result because they are\n        // converted to a scientific notation string.\n        if (angle < 1e-6) {\n          angle = 0;\n        }\n      } else {\n        var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_);\n        var width  = max.x - min.x;\n        var height = max.y - min.y;\n        focus = {\n          x: (p0.x - min.x) / width,\n          y: (p0.y - min.y) / height\n        };\n\n        width  /= this.arcScaleX_ * Z;\n        height /= this.arcScaleY_ * Z;\n        var dimension = m.max(width, height);\n        shift = 2 * fillStyle.r0_ / dimension;\n        expansion = 2 * fillStyle.r1_ / dimension - shift;\n      }\n\n      // We need to sort the color stops in ascending order by offset,\n      // otherwise IE won't interpret it correctly.\n      var stops = fillStyle.colors_;\n      stops.sort(function(cs1, cs2) {\n        return cs1.offset - cs2.offset;\n      });\n\n      var length = stops.length;\n      var color1 = stops[0].color;\n      var color2 = stops[length - 1].color;\n      var opacity1 = stops[0].alpha * this.globalAlpha;\n      var opacity2 = stops[length - 1].alpha * this.globalAlpha;\n\n      var colors = [];\n      for (var i = 0; i < length; i++) {\n        var stop = stops[i];\n        colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n      }\n\n      // When colors attribute is used, the meanings of opacity and o:opacity2\n      // are reversed.\n      lineStr.push('<g_vml_:fill type=\"', fillStyle.type_, '\"',\n                   ' method=\"none\" focus=\"100%\"',\n                   ' color=\"', color1, '\"',\n                   ' color2=\"', color2, '\"',\n                   ' colors=\"', colors.join(','), '\"',\n                   ' opacity=\"', opacity2, '\"',\n                   ' g_o_:opacity2=\"', opacity1, '\"',\n                   ' angle=\"', angle, '\"',\n                   ' focusposition=\"', focus.x, ',', focus.y, '\" />');\n    } else {\n      lineStr.push('<g_vml_:fill color=\"', color, '\" opacity=\"', opacity,\n                   '\" />');\n    }\n\n    lineStr.push('</g_vml_:shape>');\n\n    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n  };\n\n  contextPrototype.fill = function() {\n    this.stroke(true);\n  }\n\n  contextPrototype.closePath = function() {\n    this.currentPath_.push({type: 'close'});\n  };\n\n  /**\n   * @private\n   */\n  contextPrototype.getCoords_ = function(aX, aY) {\n    var m = this.m_;\n    return {\n      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n    }\n  };\n\n  contextPrototype.save = function() {\n    var o = {};\n    copyState(this, o);\n    this.aStack_.push(o);\n    this.mStack_.push(this.m_);\n    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n  };\n\n  contextPrototype.restore = function() {\n    copyState(this.aStack_.pop(), this);\n    this.m_ = this.mStack_.pop();\n  };\n\n  function matrixIsFinite(m) {\n    for (var j = 0; j < 3; j++) {\n      for (var k = 0; k < 2; k++) {\n        if (!isFinite(m[j][k]) || isNaN(m[j][k])) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  function setM(ctx, m, updateLineScale) {\n    if (!matrixIsFinite(m)) {\n      return;\n    }\n    ctx.m_ = m;\n\n    if (updateLineScale) {\n      // Get the line scale.\n      // Determinant of this.m_ means how much the area is enlarged by the\n      // transformation. So its square root can be used as a scale factor\n      // for width.\n      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n      ctx.lineScale_ = sqrt(abs(det));\n    }\n  }\n\n  contextPrototype.translate = function(aX, aY) {\n    var m1 = [\n      [1,  0,  0],\n      [0,  1,  0],\n      [aX, aY, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.rotate = function(aRot) {\n    var c = mc(aRot);\n    var s = ms(aRot);\n\n    var m1 = [\n      [c,  s, 0],\n      [-s, c, 0],\n      [0,  0, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.scale = function(aX, aY) {\n    this.arcScaleX_ *= aX;\n    this.arcScaleY_ *= aY;\n    var m1 = [\n      [aX, 0,  0],\n      [0,  aY, 0],\n      [0,  0,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n    var m1 = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n    var m = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, m, true);\n  };\n\n  /******** STUBS ********/\n  contextPrototype.clip = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.arcTo = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.createPattern = function() {\n    return new CanvasPattern_;\n  };\n\n  // Gradient / Pattern Stubs\n  function CanvasGradient_(aType) {\n    this.type_ = aType;\n    this.x0_ = 0;\n    this.y0_ = 0;\n    this.r0_ = 0;\n    this.x1_ = 0;\n    this.y1_ = 0;\n    this.r1_ = 0;\n    this.colors_ = [];\n  }\n\n  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n    aColor = processStyle(aColor);\n    this.colors_.push({offset: aOffset,\n                       color: aColor.color,\n                       alpha: aColor.alpha});\n  };\n\n  function CanvasPattern_() {}\n\n  // set up externs\n  G_vmlCanvasManager = G_vmlCanvasManager_;\n  CanvasRenderingContext2D = CanvasRenderingContext2D_;\n  CanvasGradient = CanvasGradient_;\n  CanvasPattern = CanvasPattern_;\n\n})();\n\n} // if\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-knob/jquery.knob.js",
    "content": "(function(e){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],e)}else{e(jQuery)}})(function(e){\"use strict\";var t={},n=Math.max,r=Math.min;t.c={};t.c.d=e(document);t.c.t=function(e){return e.originalEvent.touches.length-1};t.o=function(){var n=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.w=0;this.h=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.scale=1;this.relative=false;this.relativeWidth=false;this.relativeHeight=false;this.$div=null;this.run=function(){var t=function(e,t){var r;for(r in t){n.o[r]=t[r]}n._carve().init();n._configure()._draw()};if(this.$.data(\"kontroled\"))return;this.$.data(\"kontroled\",true);this.extend();this.o=e.extend({min:this.$.data(\"min\")!==undefined?this.$.data(\"min\"):0,max:this.$.data(\"max\")!==undefined?this.$.data(\"max\"):100,stopper:true,readOnly:this.$.data(\"readonly\")||this.$.attr(\"readonly\")===\"readonly\",cursor:this.$.data(\"cursor\")===true&&30||this.$.data(\"cursor\")||0,thickness:this.$.data(\"thickness\")&&Math.max(Math.min(this.$.data(\"thickness\"),1),.01)||.35,lineCap:this.$.data(\"linecap\")||\"butt\",width:this.$.data(\"width\")||200,height:this.$.data(\"height\")||200,displayInput:this.$.data(\"displayinput\")==null||this.$.data(\"displayinput\"),displayPrevious:this.$.data(\"displayprevious\"),fgColor:this.$.data(\"fgcolor\")||\"#87CEEB\",inputColor:this.$.data(\"inputcolor\"),font:this.$.data(\"font\")||\"Arial\",fontWeight:this.$.data(\"font-weight\")||\"bold\",inline:false,step:this.$.data(\"step\")||1,rotation:this.$.data(\"rotation\"),draw:null,change:null,cancel:null,release:null,format:function(e){return e},parse:function(e){return parseFloat(e)}},this.o);this.o.flip=this.o.rotation===\"anticlockwise\"||this.o.rotation===\"acw\";if(!this.o.inputColor){this.o.inputColor=this.o.fgColor}if(this.$.is(\"fieldset\")){this.v={};this.i=this.$.find(\"input\");this.i.each(function(t){var r=e(this);n.i[t]=r;n.v[t]=n.o.parse(r.val());r.bind(\"change blur\",function(){var e={};e[t]=r.val();n.val(n._validate(e))})});this.$.find(\"legend\").remove()}else{this.i=this.$;this.v=this.o.parse(this.$.val());this.v===\"\"&&(this.v=this.o.min);this.$.bind(\"change blur\",function(){n.val(n._validate(n.o.parse(n.$.val())))})}!this.o.displayInput&&this.$.hide();this.$c=e(document.createElement(\"canvas\")).attr({width:this.o.width,height:this.o.height});this.$div=e('<div style=\"'+(this.o.inline?\"display:inline;\":\"\")+\"width:\"+this.o.width+\"px;height:\"+this.o.height+\"px;\"+'\"></div>');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!==\"undefined\"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext(\"2d\"):null;if(!this.c){throw{name:\"CanvasNotSupportedException\",message:\"Canvas not supported. Please use excanvas on IE8.0.\",toString:function(){return this.name+\": \"+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf(\"%\");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf(\"%\");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind(\"configure\",t).parent().bind(\"configure\",t);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var e=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),t=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(e,t)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+\"px\",height:this.h+\"px\"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var e=true;n.g=n.c;n.clear();n.dH&&(e=n.dH());e!==false&&n.draw()};this._touch=function(e){var r=function(e){var t=n.xy2val(e.originalEvent.touches[n.t].pageX,e.originalEvent.touches[n.t].pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};this.t=t.c.t(e);r(e);t.c.d.bind(\"touchmove.k\",r).bind(\"touchend.k\",function(){t.c.d.unbind(\"touchmove.k touchend.k\");n.val(n.cv)});return this};this._mouse=function(e){var r=function(e){var t=n.xy2val(e.pageX,e.pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};r(e);t.c.d.bind(\"mousemove.k\",r).bind(\"keyup.k\",function(e){if(e.keyCode===27){t.c.d.unbind(\"mouseup.k mousemove.k keyup.k\");if(n.eH&&n.eH()===false)return;n.cancel()}}).bind(\"mouseup.k\",function(e){t.c.d.unbind(\"mousemove.k mouseup.k keyup.k\");n.val(n.cv)});return this};this._xy=function(){var e=this.$c.offset();this.x=e.left;this.y=e.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind(\"mousedown\",function(e){e.preventDefault();n._xy()._mouse(e)}).bind(\"touchstart\",function(e){e.preventDefault();n._xy()._touch(e)});this.listen()}else{this.$.attr(\"readonly\",\"readonly\")}if(this.relative){e(window).resize(function(){n._carve().init();n._draw()})}return this};this._configure=function(){if(this.o.draw)this.dH=this.o.draw;if(this.o.change)this.cH=this.o.change;if(this.o.cancel)this.eH=this.o.cancel;if(this.o.release)this.rH=this.o.release;if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,\"0.4\");this.fgColor=this.h2rgba(this.o.fgColor,\"0.6\")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(e){var t=~~((e<0?-.5:.5)+e/this.o.step)*this.o.step;return Math.round(t*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(e){};this.val=function(e){};this.xy2val=function(e,t){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(e,t){var n;e=e.substring(1,7);n=[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)];return\"rgba(\"+n[0]+\",\"+n[1]+\",\"+n[2]+\",\"+t+\")\"};this.copy=function(e,t){for(var n in e){t[n]=e[n]}}};t.Dial=function(){t.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=e.extend({bgColor:this.$.data(\"bgcolor\")||\"#EEEEEE\",angleOffset:this.$.data(\"angleoffset\")||0,angleArc:this.$.data(\"anglearc\")||360,inline:true},this.o)};this.val=function(e,t){if(null!=e){e=this.o.parse(e);if(t!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?n(r(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,t){var i,s;i=Math.atan2(e-(this.x+this.w2),-(t-this.y-this.w2))-this.angleOffset;if(this.o.flip){i=this.angleArc-i-this.PI2}if(this.angleArc!=this.PI2&&i<0&&i>-.5){i=0}else if(i<0){i+=this.PI2}s=i*(this.o.max-this.o.min)/this.angleArc+this.o.min;this.o.stopper&&(s=n(r(s,this.o.max),this.o.min));return s};this.listen=function(){var t=this,i,s,o=function(e){e.preventDefault();var o=e.originalEvent,u=o.detail||o.wheelDeltaX,a=o.detail||o.wheelDeltaY,f=t._validate(t.o.parse(t.$.val()))+(u>0||a>0?t.o.step:u<0||a<0?-t.o.step:0);f=n(r(f,t.o.max),t.o.min);t.val(f,false);if(t.rH){clearTimeout(i);i=setTimeout(function(){t.rH(f);i=null},100);if(!s){s=setTimeout(function(){if(i)t.rH(f);s=null},200)}}},u,a,f=1,l={37:-t.o.step,38:t.o.step,39:t.o.step,40:-t.o.step};this.$.bind(\"keydown\",function(i){var s=i.keyCode;if(s>=96&&s<=105){s=i.keyCode=s-48}u=parseInt(String.fromCharCode(s));if(isNaN(u)){s!==13&&s!==8&&s!==9&&s!==189&&(s!==190||t.$.val().match(/\\./))&&i.preventDefault();if(e.inArray(s,[37,38,39,40])>-1){i.preventDefault();var o=t.o.parse(t.$.val())+l[s]*f;t.o.stopper&&(o=n(r(o,t.o.max),t.o.min));t.change(t._validate(o));t._draw();a=window.setTimeout(function(){f*=2},30)}}}).bind(\"keyup\",function(e){if(isNaN(u)){if(a){window.clearTimeout(a);a=null;f=1;t.val(t.$.val())}}else{t.$.val()>t.o.max&&t.$.val(t.o.max)||t.$.val()<t.o.min&&t.$.val(t.o.min)}});this.$c.bind(\"mousewheel DOMMouseScroll\",o);this.$.bind(\"mousewheel DOMMouseScroll\",o)};this.init=function(){if(this.v<this.o.min||this.v>this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=n(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:(this.w/2+4>>0)+\"px\",height:(this.w/3>>0)+\"px\",position:\"absolute\",\"vertical-align\":\"middle\",\"margin-top\":(this.w/3>>0)+\"px\",\"margin-left\":\"-\"+(this.w*3/4+2>>0)+\"px\",border:0,background:\"none\",font:this.o.fontWeight+\" \"+(this.w/e>>0)+\"px \"+this.o.font,\"text-align\":\"center\",color:this.o.inputColor||this.o.fgColor,padding:\"0px\",\"-webkit-appearance\":\"none\"})||this.i.css({width:\"0px\",visibility:\"hidden\"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(e){var t,n;e=this.angle(e);if(this.o.flip){t=this.endAngle+1e-5;n=t-e-1e-5}else{t=this.startAngle-1e-5;n=t+e+1e-5}this.o.cursor&&(t=n-this.cursorExt)&&(n=n+this.cursorExt);return{s:t,e:n,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var e=this.g,t=this.arc(this.cv),n,r=1;e.lineWidth=this.lineWidth;e.lineCap=this.lineCap;if(this.o.bgColor!==\"none\"){e.beginPath();e.strokeStyle=this.o.bgColor;e.arc(this.xy,this.xy,this.radius,this.endAngle-1e-5,this.startAngle+1e-5,true);e.stroke()}if(this.o.displayPrevious){n=this.arc(this.v);e.beginPath();e.strokeStyle=this.pColor;e.arc(this.xy,this.xy,this.radius,n.s,n.e,n.d);e.stroke();r=this.cv==this.v}e.beginPath();e.strokeStyle=r?this.o.fgColor:this.fgColor;e.arc(this.xy,this.xy,this.radius,t.s,t.e,t.d);e.stroke()};this.cancel=function(){this.val(this.v)}};e.fn.dial=e.fn.knob=function(n){return this.each(function(){var r=new t.Dial;r.o=n;r.$=e(this);r.run()}).parent()}})"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-quicksearch/jquery.quicksearch.js",
    "content": "(function($, window, document, undefined) {\n\t$.fn.quicksearch = function (target, opt) {\n\t\t\n\t\tvar timeout, cache, rowcache, jq_results, val = '', e = this, options = $.extend({ \n\t\t\tdelay: 100,\n\t\t\tselector: null,\n\t\t\tstripeRows: null,\n\t\t\tloader: null,\n\t\t\tnoResults: '',\n\t\t\tmatchedResultsCount: 0,\n\t\t\tbind: 'keyup',\n\t\t\tonBefore: function () { \n\t\t\t\treturn;\n\t\t\t},\n\t\t\tonAfter: function () { \n\t\t\t\treturn;\n\t\t\t},\n\t\t\tshow: function () {\n\t\t\t\tthis.style.display = \"\";\n\t\t\t},\n\t\t\thide: function () {\n\t\t\t\tthis.style.display = \"none\";\n\t\t\t},\n\t\t\tprepareQuery: function (val) {\n\t\t\t\treturn val.toLowerCase().split(' ');\n\t\t\t},\n\t\t\ttestQuery: function (query, txt, _row) {\n\t\t\t\tfor (var i = 0; i < query.length; i += 1) {\n\t\t\t\t\tif (txt.indexOf(query[i]) === -1) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}, opt);\n\t\t\n\t\tthis.go = function () {\n\t\t\t\n\t\t\tvar i = 0,\n\t\t\t\tnumMatchedRows = 0,\n\t\t\t\tnoresults = true, \n\t\t\t\tquery = options.prepareQuery(val),\n\t\t\t\tval_empty = (val.replace(' ', '').length === 0);\n\t\t\t\n\t\t\tfor (var i = 0, len = rowcache.length; i < len; i++) {\n\t\t\t\tif (val_empty || options.testQuery(query, cache[i], rowcache[i])) {\n\t\t\t\t\toptions.show.apply(rowcache[i]);\n\t\t\t\t\tnoresults = false;\n\t\t\t\t\tnumMatchedRows++;\n\t\t\t\t} else {\n\t\t\t\t\toptions.hide.apply(rowcache[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (noresults) {\n\t\t\t\tthis.results(false);\n\t\t\t} else {\n\t\t\t\tthis.results(true);\n\t\t\t\tthis.stripe();\n\t\t\t}\n\t\t\t\n\t\t\tthis.matchedResultsCount = numMatchedRows;\n\t\t\tthis.loader(false);\n\t\t\toptions.onAfter();\n\t\t\t\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\t/*\n\t\t * External API so that users can perform search programatically. \n\t\t * */\n\t\tthis.search = function (submittedVal) {\n\t\t\tval = submittedVal;\n\t\t\te.trigger();\n\t\t};\n\t\t\n\t\t/*\n\t\t * External API to get the number of matched results as seen in \n\t\t * https://github.com/ruiz107/quicksearch/commit/f78dc440b42d95ce9caed1d087174dd4359982d6\n\t\t * */\n\t\tthis.currentMatchedResults = function() {\n\t\t\treturn this.matchedResultsCount;\n\t\t};\n\t\t\n\t\tthis.stripe = function () {\n\t\t\t\n\t\t\tif (typeof options.stripeRows === \"object\" && options.stripeRows !== null)\n\t\t\t{\n\t\t\t\tvar joined = options.stripeRows.join(' ');\n\t\t\t\tvar stripeRows_length = options.stripeRows.length;\n\t\t\t\t\n\t\t\t\tjq_results.not(':hidden').each(function (i) {\n\t\t\t\t\t$(this).removeClass(joined).addClass(options.stripeRows[i % stripeRows_length]);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tthis.strip_html = function (input) {\n\t\t\tvar output = input.replace(new RegExp('<[^<]+\\>', 'g'), \"\");\n\t\t\toutput = $.trim(output.toLowerCase());\n\t\t\treturn output;\n\t\t};\n\t\t\n\t\tthis.results = function (bool) {\n\t\t\tif (typeof options.noResults === \"string\" && options.noResults !== \"\") {\n\t\t\t\tif (bool) {\n\t\t\t\t\t$(options.noResults).hide();\n\t\t\t\t} else {\n\t\t\t\t\t$(options.noResults).show();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tthis.loader = function (bool) {\n\t\t\tif (typeof options.loader === \"string\" && options.loader !== \"\") {\n\t\t\t\t (bool) ? $(options.loader).show() : $(options.loader).hide();\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tthis.cache = function () {\n\t\t\t\n\t\t\tjq_results = $(target);\n\t\t\t\n\t\t\tif (typeof options.noResults === \"string\" && options.noResults !== \"\") {\n\t\t\t\tjq_results = jq_results.not(options.noResults);\n\t\t\t}\n\t\t\t\n\t\t\tvar t = (typeof options.selector === \"string\") ? jq_results.find(options.selector) : $(target).not(options.noResults);\n\t\t\tcache = t.map(function () {\n\t\t\t\treturn e.strip_html(this.innerHTML);\n\t\t\t});\n\t\t\t\n\t\t\trowcache = jq_results.map(function () {\n\t\t\t\treturn this;\n\t\t\t});\n\n\t\t\t/*\n\t\t\t * Modified fix for sync-ing \"val\". \n\t\t\t * Original fix https://github.com/michaellwest/quicksearch/commit/4ace4008d079298a01f97f885ba8fa956a9703d1\n\t\t\t * */\n\t\t\tval = val || this.val() || \"\";\n\t\t\t\n\t\t\treturn this.go();\n\t\t};\n\t\t\n\t\tthis.trigger = function () {\n\t\t\tthis.loader(true);\n\t\t\toptions.onBefore();\n\t\t\t\n\t\t\twindow.clearTimeout(timeout);\n\t\t\ttimeout = window.setTimeout(function () {\n\t\t\t\te.go();\n\t\t\t}, options.delay);\n\t\t\t\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tthis.cache();\n\t\tthis.results(true);\n\t\tthis.stripe();\n\t\tthis.loader(false);\n\t\t\n\t\treturn this.each(function () {\n\t\t\t\n\t\t\t/*\n\t\t\t * Changed from .bind to .on.\n\t\t\t * */\n\t\t\t$(this).on(options.bind, function () {\n\t\t\t\t\n\t\t\t\tval = $(this).val();\n\t\t\t\te.trigger();\n\t\t\t});\n\t\t});\n\t\t\n\t};\n\n}(jQuery, this, document));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/external/jquery/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/index.html",
    "content": "<!doctype html>\n<html lang=\"us\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>jQuery UI Example Page</title>\n\t<link href=\"jquery-ui.css\" rel=\"stylesheet\">\n\t<style>\n\tbody{\n\t\tfont: 62.5% \"Trebuchet MS\", sans-serif;\n\t\tmargin: 50px;\n\t}\n\t.demoHeaders {\n\t\tmargin-top: 2em;\n\t}\n\t#dialog-link {\n\t\tpadding: .4em 1em .4em 20px;\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t}\n\t#dialog-link span.ui-icon {\n\t\tmargin: 0 5px 0 0;\n\t\tposition: absolute;\n\t\tleft: .2em;\n\t\ttop: 50%;\n\t\tmargin-top: -8px;\n\t}\n\t#icons {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t#icons li {\n\t\tmargin: 2px;\n\t\tposition: relative;\n\t\tpadding: 4px 0;\n\t\tcursor: pointer;\n\t\tfloat: left;\n\t\tlist-style: none;\n\t}\n\t#icons span.ui-icon {\n\t\tfloat: left;\n\t\tmargin: 0 4px;\n\t}\n\t.fakewindowcontain .ui-widget-overlay {\n\t\tposition: absolute;\n\t}\n\tselect {\n\t\twidth: 200px;\n\t}\n\t</style>\n</head>\n<body>\n\n<h1>Welcome to jQuery UI!</h1>\n\n<div class=\"ui-widget\">\n\t<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>\n</div>\n\n<h1>YOUR COMPONENTS:</h1>\n\n\n<!-- Accordion -->\n<h2 class=\"demoHeaders\">Accordion</h2>\n<div id=\"accordion\">\n\t<h3>First</h3>\n\t<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>\n\t<h3>Second</h3>\n\t<div>Phasellus mattis tincidunt nibh.</div>\n\t<h3>Third</h3>\n\t<div>Nam dui erat, auctor a, dignissim quis.</div>\n</div>\n\n\n\n<!-- Autocomplete -->\n<h2 class=\"demoHeaders\">Autocomplete</h2>\n<div>\n\t<input id=\"autocomplete\" title=\"type &quot;a&quot;\">\n</div>\n\n\n\n<!-- Button -->\n<h2 class=\"demoHeaders\">Button</h2>\n<button id=\"button\">A button element</button>\n<form style=\"margin-top: 1em;\">\n\t<div id=\"radioset\">\n\t\t<input type=\"radio\" id=\"radio1\" name=\"radio\"><label for=\"radio1\">Choice 1</label>\n\t\t<input type=\"radio\" id=\"radio2\" name=\"radio\" checked=\"checked\"><label for=\"radio2\">Choice 2</label>\n\t\t<input type=\"radio\" id=\"radio3\" name=\"radio\"><label for=\"radio3\">Choice 3</label>\n\t</div>\n</form>\n\n\n\n<!-- Tabs -->\n<h2 class=\"demoHeaders\">Tabs</h2>\n<div id=\"tabs\">\n\t<ul>\n\t\t<li><a href=\"#tabs-1\">First</a></li>\n\t\t<li><a href=\"#tabs-2\">Second</a></li>\n\t\t<li><a href=\"#tabs-3\">Third</a></li>\n\t</ul>\n\t<div id=\"tabs-1\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>\n\t<div id=\"tabs-2\">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>\n\t<div id=\"tabs-3\">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>\n</div>\n\n\n\n<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->\n<h2 class=\"demoHeaders\">Dialog</h2>\n<p><a href=\"#\" id=\"dialog-link\" class=\"ui-state-default ui-corner-all\"><span class=\"ui-icon ui-icon-newwin\"></span>Open Dialog</a></p>\n\n<h2 class=\"demoHeaders\">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>\n<div style=\"position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;\" class=\"fakewindowcontain\">\n\t<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>\n\n\t<!-- ui-dialog -->\n\t<div class=\"ui-overlay\"><div class=\"ui-widget-overlay\"></div><div class=\"ui-widget-shadow ui-corner-all\" style=\"width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;\"></div></div>\n\t<div style=\"position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;\" class=\"ui-widget ui-widget-content ui-corner-all\">\n\t\t<div class=\"ui-dialog-content ui-widget-content\" style=\"background: none; border: 0;\">\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>\n\t\t</div>\n\t</div>\n\n</div>\n\n<!-- ui-dialog -->\n<div id=\"dialog\" title=\"Dialog Title\">\n\t<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>\n</div>\n\n\n\n<h2 class=\"demoHeaders\">Framework Icons (content color preview)</h2>\n<ul id=\"icons\" class=\"ui-widget ui-helper-clearfix\">\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-n\"><span class=\"ui-icon ui-icon-carat-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-ne\"><span class=\"ui-icon ui-icon-carat-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-e\"><span class=\"ui-icon ui-icon-carat-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-se\"><span class=\"ui-icon ui-icon-carat-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-s\"><span class=\"ui-icon ui-icon-carat-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-sw\"><span class=\"ui-icon ui-icon-carat-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-w\"><span class=\"ui-icon ui-icon-carat-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-1-nw\"><span class=\"ui-icon ui-icon-carat-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-2-n-s\"><span class=\"ui-icon ui-icon-carat-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-carat-2-e-w\"><span class=\"ui-icon ui-icon-carat-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-n\"><span class=\"ui-icon ui-icon-triangle-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-ne\"><span class=\"ui-icon ui-icon-triangle-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-e\"><span class=\"ui-icon ui-icon-triangle-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-se\"><span class=\"ui-icon ui-icon-triangle-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-s\"><span class=\"ui-icon ui-icon-triangle-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-sw\"><span class=\"ui-icon ui-icon-triangle-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-w\"><span class=\"ui-icon ui-icon-triangle-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-nw\"><span class=\"ui-icon ui-icon-triangle-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-n-s\"><span class=\"ui-icon ui-icon-triangle-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-e-w\"><span class=\"ui-icon ui-icon-triangle-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-n\"><span class=\"ui-icon ui-icon-arrow-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-ne\"><span class=\"ui-icon ui-icon-arrow-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-e\"><span class=\"ui-icon ui-icon-arrow-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-se\"><span class=\"ui-icon ui-icon-arrow-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-s\"><span class=\"ui-icon ui-icon-arrow-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-sw\"><span class=\"ui-icon ui-icon-arrow-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-w\"><span class=\"ui-icon ui-icon-arrow-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-nw\"><span class=\"ui-icon ui-icon-arrow-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-n-s\"><span class=\"ui-icon ui-icon-arrow-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-ne-sw\"><span class=\"ui-icon ui-icon-arrow-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-e-w\"><span class=\"ui-icon ui-icon-arrow-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-se-nw\"><span class=\"ui-icon ui-icon-arrow-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-n\"><span class=\"ui-icon ui-icon-arrowstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-e\"><span class=\"ui-icon ui-icon-arrowstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-s\"><span class=\"ui-icon ui-icon-arrowstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-w\"><span class=\"ui-icon ui-icon-arrowstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-n\"><span class=\"ui-icon ui-icon-arrowthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-ne\"><span class=\"ui-icon ui-icon-arrowthick-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-e\"><span class=\"ui-icon ui-icon-arrowthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-se\"><span class=\"ui-icon ui-icon-arrowthick-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-s\"><span class=\"ui-icon ui-icon-arrowthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-sw\"><span class=\"ui-icon ui-icon-arrowthick-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-w\"><span class=\"ui-icon ui-icon-arrowthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-nw\"><span class=\"ui-icon ui-icon-arrowthick-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-n-s\"><span class=\"ui-icon ui-icon-arrowthick-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-ne-sw\"><span class=\"ui-icon ui-icon-arrowthick-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-e-w\"><span class=\"ui-icon ui-icon-arrowthick-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-se-nw\"><span class=\"ui-icon ui-icon-arrowthick-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-n\"><span class=\"ui-icon ui-icon-arrowthickstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-e\"><span class=\"ui-icon ui-icon-arrowthickstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-s\"><span class=\"ui-icon ui-icon-arrowthickstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-w\"><span class=\"ui-icon ui-icon-arrowthickstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-w\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-n\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-e\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-s\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-w\"><span class=\"ui-icon ui-icon-arrowreturn-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-n\"><span class=\"ui-icon ui-icon-arrowreturn-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-e\"><span class=\"ui-icon ui-icon-arrowreturn-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-s\"><span class=\"ui-icon ui-icon-arrowreturn-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-w\"><span class=\"ui-icon ui-icon-arrowrefresh-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-n\"><span class=\"ui-icon ui-icon-arrowrefresh-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-e\"><span class=\"ui-icon ui-icon-arrowrefresh-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-s\"><span class=\"ui-icon ui-icon-arrowrefresh-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4\"><span class=\"ui-icon ui-icon-arrow-4\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4-diag\"><span class=\"ui-icon ui-icon-arrow-4-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-extlink\"><span class=\"ui-icon ui-icon-extlink\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-newwin\"><span class=\"ui-icon ui-icon-newwin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-refresh\"><span class=\"ui-icon ui-icon-refresh\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-shuffle\"><span class=\"ui-icon ui-icon-shuffle\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transfer-e-w\"><span class=\"ui-icon ui-icon-transfer-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transferthick-e-w\"><span class=\"ui-icon ui-icon-transferthick-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-collapsed\"><span class=\"ui-icon ui-icon-folder-collapsed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-open\"><span class=\"ui-icon ui-icon-folder-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document\"><span class=\"ui-icon ui-icon-document\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document-b\"><span class=\"ui-icon ui-icon-document-b\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-note\"><span class=\"ui-icon ui-icon-note\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-closed\"><span class=\"ui-icon ui-icon-mail-closed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-open\"><span class=\"ui-icon ui-icon-mail-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-suitcase\"><span class=\"ui-icon ui-icon-suitcase\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-comment\"><span class=\"ui-icon ui-icon-comment\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-person\"><span class=\"ui-icon ui-icon-person\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-print\"><span class=\"ui-icon ui-icon-print\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-trash\"><span class=\"ui-icon ui-icon-trash\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-locked\"><span class=\"ui-icon ui-icon-locked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-unlocked\"><span class=\"ui-icon ui-icon-unlocked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bookmark\"><span class=\"ui-icon ui-icon-bookmark\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-tag\"><span class=\"ui-icon ui-icon-tag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-home\"><span class=\"ui-icon ui-icon-home\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-flag\"><span class=\"ui-icon ui-icon-flag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calculator\"><span class=\"ui-icon ui-icon-calculator\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cart\"><span class=\"ui-icon ui-icon-cart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pencil\"><span class=\"ui-icon ui-icon-pencil\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clock\"><span class=\"ui-icon ui-icon-clock\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-disk\"><span class=\"ui-icon ui-icon-disk\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calendar\"><span class=\"ui-icon ui-icon-calendar\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomin\"><span class=\"ui-icon ui-icon-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomout\"><span class=\"ui-icon ui-icon-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-search\"><span class=\"ui-icon ui-icon-search\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-wrench\"><span class=\"ui-icon ui-icon-wrench\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gear\"><span class=\"ui-icon ui-icon-gear\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-heart\"><span class=\"ui-icon ui-icon-heart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-star\"><span class=\"ui-icon ui-icon-star\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-link\"><span class=\"ui-icon ui-icon-link\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cancel\"><span class=\"ui-icon ui-icon-cancel\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plus\"><span class=\"ui-icon ui-icon-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plusthick\"><span class=\"ui-icon ui-icon-plusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minus\"><span class=\"ui-icon ui-icon-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minusthick\"><span class=\"ui-icon ui-icon-minusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-close\"><span class=\"ui-icon ui-icon-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-closethick\"><span class=\"ui-icon ui-icon-closethick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-key\"><span class=\"ui-icon ui-icon-key\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-lightbulb\"><span class=\"ui-icon ui-icon-lightbulb\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-scissors\"><span class=\"ui-icon ui-icon-scissors\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clipboard\"><span class=\"ui-icon ui-icon-clipboard\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-copy\"><span class=\"ui-icon ui-icon-copy\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-contact\"><span class=\"ui-icon ui-icon-contact\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-image\"><span class=\"ui-icon ui-icon-image\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-video\"><span class=\"ui-icon ui-icon-video\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-script\"><span class=\"ui-icon ui-icon-script\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-alert\"><span class=\"ui-icon ui-icon-alert\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-info\"><span class=\"ui-icon ui-icon-info\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-notice\"><span class=\"ui-icon ui-icon-notice\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-help\"><span class=\"ui-icon ui-icon-help\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-check\"><span class=\"ui-icon ui-icon-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bullet\"><span class=\"ui-icon ui-icon-bullet\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-off\"><span class=\"ui-icon ui-icon-radio-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-on\"><span class=\"ui-icon ui-icon-radio-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-w\"><span class=\"ui-icon ui-icon-pin-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-s\"><span class=\"ui-icon ui-icon-pin-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-play\"><span class=\"ui-icon ui-icon-play\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pause\"><span class=\"ui-icon ui-icon-pause\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-next\"><span class=\"ui-icon ui-icon-seek-next\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-prev\"><span class=\"ui-icon ui-icon-seek-prev\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-end\"><span class=\"ui-icon ui-icon-seek-end\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-first\"><span class=\"ui-icon ui-icon-seek-first\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-stop\"><span class=\"ui-icon ui-icon-stop\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-eject\"><span class=\"ui-icon ui-icon-eject\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-off\"><span class=\"ui-icon ui-icon-volume-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-on\"><span class=\"ui-icon ui-icon-volume-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-power\"><span class=\"ui-icon ui-icon-power\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal-diag\"><span class=\"ui-icon ui-icon-signal-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal\"><span class=\"ui-icon ui-icon-signal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-0\"><span class=\"ui-icon ui-icon-battery-0\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-1\"><span class=\"ui-icon ui-icon-battery-1\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-2\"><span class=\"ui-icon ui-icon-battery-2\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-3\"><span class=\"ui-icon ui-icon-battery-3\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-plus\"><span class=\"ui-icon ui-icon-circle-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-minus\"><span class=\"ui-icon ui-icon-circle-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-close\"><span class=\"ui-icon ui-icon-circle-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-e\"><span class=\"ui-icon ui-icon-circle-triangle-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-s\"><span class=\"ui-icon ui-icon-circle-triangle-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-w\"><span class=\"ui-icon ui-icon-circle-triangle-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-n\"><span class=\"ui-icon ui-icon-circle-triangle-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-e\"><span class=\"ui-icon ui-icon-circle-arrow-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-s\"><span class=\"ui-icon ui-icon-circle-arrow-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-w\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-n\"><span class=\"ui-icon ui-icon-circle-arrow-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomin\"><span class=\"ui-icon ui-icon-circle-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomout\"><span class=\"ui-icon ui-icon-circle-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-check\"><span class=\"ui-icon ui-icon-circle-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-plus\"><span class=\"ui-icon ui-icon-circlesmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-minus\"><span class=\"ui-icon ui-icon-circlesmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-close\"><span class=\"ui-icon ui-icon-circlesmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-plus\"><span class=\"ui-icon ui-icon-squaresmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-minus\"><span class=\"ui-icon ui-icon-squaresmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-close\"><span class=\"ui-icon ui-icon-squaresmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-vertical\"><span class=\"ui-icon ui-icon-grip-dotted-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-horizontal\"><span class=\"ui-icon ui-icon-grip-dotted-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-vertical\"><span class=\"ui-icon ui-icon-grip-solid-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-horizontal\"><span class=\"ui-icon ui-icon-grip-solid-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gripsmall-diagonal-se\"><span class=\"ui-icon ui-icon-gripsmall-diagonal-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-diagonal-se\"><span class=\"ui-icon ui-icon-grip-diagonal-se\"></span></li>\n</ul>\n\n\n<!-- Slider -->\n<h2 class=\"demoHeaders\">Slider</h2>\n<div id=\"slider\"></div>\n\n\n\n<!-- Datepicker -->\n<h2 class=\"demoHeaders\">Datepicker</h2>\n<div id=\"datepicker\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Progressbar</h2>\n<div id=\"progressbar\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Selectmenu</h2>\n<select id=\"selectmenu\">\n\t<option>Slower</option>\n\t<option>Slow</option>\n\t<option selected=\"selected\">Medium</option>\n\t<option>Fast</option>\n\t<option>Faster</option>\n</select>\n\n\n\n<!-- Spinner -->\n<h2 class=\"demoHeaders\">Spinner</h2>\n<input id=\"spinner\">\n\n\n\n<!-- Menu -->\n<h2 class=\"demoHeaders\">Menu</h2>\n<ul style=\"width:100px;\" id=\"menu\">\n\t<li>Item 1</li>\n\t<li>Item 2</li>\n\t<li>Item 3\n\t\t<ul>\n\t\t\t<li>Item 3-1</li>\n\t\t\t<li>Item 3-2</li>\n\t\t\t<li>Item 3-3</li>\n\t\t\t<li>Item 3-4</li>\n\t\t\t<li>Item 3-5</li>\n\t\t</ul>\n\t</li>\n\t<li>Item 4</li>\n\t<li>Item 5</li>\n</ul>\n\n\n\n<!-- Tooltip -->\n<h2 class=\"demoHeaders\">Tooltip</h2>\n<p id=\"tooltip\">\n\t<a href=\"#\" title=\"That&apos;s what this widget is\">Tooltips</a> can be attached to any element. When you hover\nthe element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.\n</p>\n\n\n<!-- Highlight / Error -->\n<h2 class=\"demoHeaders\">Highlight / Error</h2>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-highlight ui-corner-all\" style=\"margin-top: 20px; padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-info\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Hey!</strong> Sample ui-state-highlight style.</p>\n\t</div>\n</div>\n<br>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-error ui-corner-all\" style=\"padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-alert\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Alert:</strong> Sample ui-state-error style.</p>\n\t</div>\n</div>\n\n<script src=\"external/jquery/jquery.js\"></script>\n<script src=\"jquery-ui.js\"></script>\n<script>\n\n$( \"#accordion\" ).accordion();\n\n\n\nvar availableTags = [\n\t\"ActionScript\",\n\t\"AppleScript\",\n\t\"Asp\",\n\t\"BASIC\",\n\t\"C\",\n\t\"C++\",\n\t\"Clojure\",\n\t\"COBOL\",\n\t\"ColdFusion\",\n\t\"Erlang\",\n\t\"Fortran\",\n\t\"Groovy\",\n\t\"Haskell\",\n\t\"Java\",\n\t\"JavaScript\",\n\t\"Lisp\",\n\t\"Perl\",\n\t\"PHP\",\n\t\"Python\",\n\t\"Ruby\",\n\t\"Scala\",\n\t\"Scheme\"\n];\n$( \"#autocomplete\" ).autocomplete({\n\tsource: availableTags\n});\n\n\n\n$( \"#button\" ).button();\n$( \"#radioset\" ).buttonset();\n\n\n\n$( \"#tabs\" ).tabs();\n\n\n\n$( \"#dialog\" ).dialog({\n\tautoOpen: false,\n\twidth: 400,\n\tbuttons: [\n\t\t{\n\t\t\ttext: \"Ok\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttext: \"Cancel\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t}\n\t]\n});\n\n// Link to open the dialog\n$( \"#dialog-link\" ).click(function( event ) {\n\t$( \"#dialog\" ).dialog( \"open\" );\n\tevent.preventDefault();\n});\n\n\n\n$( \"#datepicker\" ).datepicker({\n\tinline: true\n});\n\n\n\n$( \"#slider\" ).slider({\n\trange: true,\n\tvalues: [ 17, 67 ]\n});\n\n\n\n$( \"#progressbar\" ).progressbar({\n\tvalue: 20\n});\n\n\n\n$( \"#spinner\" ).spinner();\n\n\n\n$( \"#menu\" ).menu();\n\n\n\n$( \"#tooltip\" ).tooltip();\n\n\n\n$( \"#selectmenu\" ).selectmenu();\n\n\n// Hover states on the static widgets\n$( \"#dialog-link, #icons li\" ).hover(\n\tfunction() {\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t},\n\tfunction() {\n\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t}\n);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/jquery-ui.css",
    "content": "/*! jQuery UI - v1.11.4 - 2015-03-11\n* http://jqueryui.com\n* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-clearfix {\n\tmin-height: 0; /* support: IE7 */\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n}\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tmin-height: 0; /* support: IE7 */\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-icons .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-header .ui-accordion-header-icon {\n\tposition: absolute;\n\tleft: .5em;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-button {\n\tdisplay: inline-block;\n\tposition: relative;\n\tpadding: 0;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\toverflow: visible; /* removes extra width in IE */\n}\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2.2em;\n}\n/* button elements seem to need a little more width */\nbutton.ui-button-icon-only {\n\twidth: 2.4em;\n}\n.ui-button-icons-only {\n\twidth: 3.4em;\n}\nbutton.ui-button-icons-only {\n\twidth: 3.7em;\n}\n\n/* button text element */\n.ui-button .ui-button-text {\n\tdisplay: block;\n\tline-height: normal;\n}\n.ui-button-text-only .ui-button-text {\n\tpadding: .4em 1em;\n}\n.ui-button-icon-only .ui-button-text,\n.ui-button-icons-only .ui-button-text {\n\tpadding: .4em;\n\ttext-indent: -9999999px;\n}\n.ui-button-text-icon-primary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 1em .4em 2.1em;\n}\n.ui-button-text-icon-secondary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 2.1em .4em 1em;\n}\n.ui-button-text-icons .ui-button-text {\n\tpadding-left: 2.1em;\n\tpadding-right: 2.1em;\n}\n/* no icon support for input elements, provide padding by default */\ninput.ui-button {\n\tpadding: .4em 1em;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon,\n.ui-button-text-icon-primary .ui-icon,\n.ui-button-text-icon-secondary .ui-icon,\n.ui-button-text-icons .ui-icon,\n.ui-button-icons-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-button-icon-only .ui-icon {\n\tleft: 50%;\n\tmargin-left: -8px;\n}\n.ui-button-text-icon-primary .ui-button-icon-primary,\n.ui-button-text-icons .ui-button-icon-primary,\n.ui-button-icons-only .ui-button-icon-primary {\n\tleft: .5em;\n}\n.ui-button-text-icon-secondary .ui-button-icon-secondary,\n.ui-button-text-icons .ui-button-icon-secondary,\n.ui-button-icons-only .ui-button-icon-secondary {\n\tright: .5em;\n}\n\n/* button sets */\n.ui-buttonset {\n\tmargin-right: 7px;\n}\n.ui-buttonset .ui-button {\n\tmargin-left: 0;\n\tmargin-right: -.3em;\n}\n\n/* workarounds */\n/* reset extra padding in Firefox, see h5bp.com/l */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n.ui-dialog {\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-se {\n\twidth: 12px;\n\theight: 12px;\n\tright: -5px;\n\tbottom: -5px;\n\tbackground-position: 16px 16px;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: none;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 3px 1em 3px .4em;\n\tcursor: pointer;\n\tmin-height: 0; /* support: IE7 */\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\t/* Support: IE7 */\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-button {\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tposition: relative;\n\ttext-decoration: none;\n\tcursor: pointer;\n}\n.ui-selectmenu-button span.ui-icon {\n\tright: 0.5em;\n\tleft: auto;\n\tmargin-top: -8px;\n\tposition: absolute;\n\ttop: 50%;\n}\n.ui-selectmenu-button span.ui-selectmenu-text {\n\ttext-align: left;\n\tpadding: 0.4em 2.1em 0.4em 1em;\n\tdisplay: block;\n\tline-height: 1.4;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 22px;\n}\n.ui-spinner-button {\n\twidth: 16px;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top: none;\n\tborder-bottom: none;\n\tborder-right: none;\n}\n/* vertically center icon */\n.ui-spinner .ui-icon {\n\tposition: absolute;\n\tmargin-top: -8px;\n\ttop: 50%;\n\tleft: 0;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n\n/* TR overrides */\n.ui-spinner .ui-icon-triangle-1-s {\n\t/* need to fix icons sprite */\n\tbackground-position: -65px -16px;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n\t-webkit-box-shadow: 0 0 5px #aaa;\n\tbox-shadow: 0 0 5px #aaa;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;\n\tfont-size: 1.1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #eeeeee url(\"images/ui-bg_highlight-soft_100_eeeeee_1x100.png\") 50% top repeat-x;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #e78f08;\n\tbackground: #f6a828 url(\"images/ui-bg_gloss-wave_35_f6a828_500x100.png\") 50% 50% repeat-x;\n\tcolor: #ffffff;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #ffffff;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid #cccccc;\n\tbackground: #f6f6f6 url(\"images/ui-bg_glass_100_f6f6f6_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #1c94c4;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #1c94c4;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #fbcb09;\n\tbackground: #fdf5ce url(\"images/ui-bg_glass_100_fdf5ce_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #c77405;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited {\n\tcolor: #c77405;\n\ttext-decoration: none;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid #fbd850;\n\tbackground: #ffffff url(\"images/ui-bg_glass_65_ffffff_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #eb8f00;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #eb8f00;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #fed22f;\n\tbackground: #ffe45c url(\"images/ui-bg_highlight-soft_75_ffe45c_1x100.png\") 50% top repeat-x;\n\tcolor: #363636;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #363636;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #cd0a0a;\n\tbackground: #b81900 url(\"images/ui-bg_diagonals-thick_18_b81900_40x40.png\") 50% 50% repeat;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_222222_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-default .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url(\"images/ui-icons_228ef1_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffd27a_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 4px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\") 50% 50% repeat;\n\topacity: .5;\n\tfilter: Alpha(Opacity=50); /* support: IE8 */\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url(\"images/ui-bg_flat_10_000000_40x100.png\") 50% 50% repeat-x;\n\topacity: .2;\n\tfilter: Alpha(Opacity=20); /* support: IE8 */\n\tborder-radius: 5px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/jquery-ui.js",
    "content": "/*! jQuery UI - v1.11.4 - 2015-03-11\n* http://jqueryui.com\n* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n/*!\n * jQuery UI Core 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\n\n// $.ui might exist from components with no dependencies, e.g., $.ui.position\n$.ui = $.ui || {};\n\n$.extend( $.ui, {\n\tversion: \"1.11.4\",\n\n\tkeyCode: {\n\t\tBACKSPACE: 8,\n\t\tCOMMA: 188,\n\t\tDELETE: 46,\n\t\tDOWN: 40,\n\t\tEND: 35,\n\t\tENTER: 13,\n\t\tESCAPE: 27,\n\t\tHOME: 36,\n\t\tLEFT: 37,\n\t\tPAGE_DOWN: 34,\n\t\tPAGE_UP: 33,\n\t\tPERIOD: 190,\n\t\tRIGHT: 39,\n\t\tSPACE: 32,\n\t\tTAB: 9,\n\t\tUP: 38\n\t}\n});\n\n// plugins\n$.fn.extend({\n\tscrollParent: function( includeHidden ) {\n\t\tvar position = this.css( \"position\" ),\n\t\t\texcludeStaticParent = position === \"absolute\",\n\t\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\t\tscrollParent = this.parents().filter( function() {\n\t\t\t\tvar parent = $( this );\n\t\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) + parent.css( \"overflow-x\" ) );\n\t\t\t}).eq( 0 );\n\n\t\treturn position === \"fixed\" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;\n\t},\n\n\tuniqueId: (function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each(function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t})(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each(function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t});\n\t}\n});\n\n// selectors\nfunction focusable( element, isTabIndexNotNaN ) {\n\tvar map, mapName, img,\n\t\tnodeName = element.nodeName.toLowerCase();\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" )[ 0 ];\n\t\treturn !!img && visible( img );\n\t}\n\treturn ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?\n\t\t!element.disabled :\n\t\t\"a\" === nodeName ?\n\t\t\telement.href || isTabIndexNotNaN :\n\t\t\tisTabIndexNotNaN) &&\n\t\t// the element and all of its ancestors must be visible\n\t\tvisible( element );\n}\n\nfunction visible( element ) {\n\treturn $.expr.filters.visible( element ) &&\n\t\t!$( element ).parents().addBack().filter(function() {\n\t\t\treturn $.css( this, \"visibility\" ) === \"hidden\";\n\t\t}).length;\n}\n\n$.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo(function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t}) :\n\t\t// support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t},\n\n\tfocusable: function( element ) {\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\n\t},\n\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\n\t}\n});\n\n// support: jQuery <1.8\nif ( !$( \"<a>\" ).outerWidth( 1 ).jquery ) {\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t});\n\t\t};\n\n\t\t$.fn[ \"outer\" + name] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t});\n\t\t};\n\t});\n}\n\n// support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)\nif ( $( \"<a>\" ).data( \"a-b\", \"a\" ).removeData( \"a-b\" ).data( \"a-b\" ) ) {\n\t$.fn.removeData = (function( removeData ) {\n\t\treturn function( key ) {\n\t\t\tif ( arguments.length ) {\n\t\t\t\treturn removeData.call( this, $.camelCase( key ) );\n\t\t\t} else {\n\t\t\t\treturn removeData.call( this );\n\t\t\t}\n\t\t};\n\t})( $.fn.removeData );\n}\n\n// deprecated\n$.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n$.fn.extend({\n\tfocus: (function( orig ) {\n\t\treturn function( delay, fn ) {\n\t\t\treturn typeof delay === \"number\" ?\n\t\t\t\tthis.each(function() {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$( elem ).focus();\n\t\t\t\t\t\tif ( fn ) {\n\t\t\t\t\t\t\tfn.call( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay );\n\t\t\t\t}) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.focus ),\n\n\tdisableSelection: (function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.bind( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t};\n\t})(),\n\n\tenableSelection: function() {\n\t\treturn this.unbind( \".ui-disableSelection\" );\n\t},\n\n\tzIndex: function( zIndex ) {\n\t\tif ( zIndex !== undefined ) {\n\t\t\treturn this.css( \"zIndex\", zIndex );\n\t\t}\n\n\t\tif ( this.length ) {\n\t\t\tvar elem = $( this[ 0 ] ), position, value;\n\t\t\twhile ( elem.length && elem[ 0 ] !== document ) {\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\tposition = elem.css( \"position\" );\n\t\t\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telem = elem.parent();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n});\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\n$.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Widget 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/jQuery.widget/\n */\n\n\nvar widget_uuid = 0,\n\twidget_slice = Array.prototype.slice;\n\n$.cleanData = (function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n})( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar fullName, existingConstructor, constructor, basePrototype,\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\n\t\tproxiedPrototype = {},\n\t\tnamespace = name.split( \".\" )[ 0 ];\n\n\tname = name.split( \".\" )[ 1 ];\n\tfullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\t// create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\t\t// allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\t// extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\t\t// copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\t\t// track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t});\n\n\tbasePrototype = new base();\n\t// we need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = (function() {\n\t\t\tvar _super = function() {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t\t},\n\t\t\t\t_superApply = function( args ) {\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t\t};\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super,\n\t\t\t\t\t__superApply = this._superApply,\n\t\t\t\t\treturnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t})();\n\t});\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t});\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\n\t\t});\n\t\t// remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widget_slice.call( arguments, 1 ),\n\t\tinputIndex = 0,\n\t\tinputLength = input.length,\n\t\tkey,\n\t\tvalue;\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\targs = widget_slice.call( arguments, 1 ),\n\t\t\treturnValue = this;\n\n\t\tif ( isMethodCall ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar methodValue,\n\t\t\t\t\tinstance = $.data( this, fullName );\n\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\treturnValue = instance;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif ( !instance ) {\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t}\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\n\t\t\t\t}\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\tmethodValue;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdisabled: false,\n\n\t\t// callbacks\n\t\tcreate: null\n\t},\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widget_uuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.document = $( element.style ?\n\t\t\t\t// element within the document\n\t\t\t\telement.ownerDocument :\n\t\t\t\t// element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\t_getCreateOptions: $.noop,\n\t_getCreateEventData: $.noop,\n\t_create: $.noop,\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tthis._destroy();\n\t\t// we can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName )\n\t\t\t// support: jquery <1.6.3\n\t\t\t// http://bugs.jquery.com/ticket/9413\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\n\t\tthis.widget()\n\t\t\t.unbind( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeClass(\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\n\t\t\t\t\"ui-state-disabled\" );\n\n\t\t// clean up events and states\n\t\tthis.bindings.unbind( this.eventNamespace );\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t},\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key,\n\t\t\tparts,\n\t\t\tcurOption,\n\t\t\ti;\n\n\t\tif ( arguments.length === 0 ) {\n\t\t\t// don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\t_setOption: function( key, value ) {\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget()\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\n\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\t\tif ( value ) {\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions({ disabled: false });\n\t},\n\tdisable: function() {\n\t\treturn this._setOptions({ disabled: true });\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement,\n\t\t\tinstance = this;\n\n\t\t// no suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// no element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\t// allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\n\t\t\t\teventName = match[1] + instance.eventNamespace,\n\t\t\t\tselector = match[2];\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.bind( eventName, handlerProxy );\n\t\t\t}\n\t\t});\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.unbind( eventName ).undelegate( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig,\n\t\t\tcallback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\t\t// the original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\t\tvar hasOptions,\n\t\t\teffectName = !options ?\n\t\t\t\tmethod :\n\t\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\t\tdefaultEffect :\n\t\t\t\t\toptions.effect || defaultEffect;\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue(function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t});\n\t\t}\n\t};\n});\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Mouse 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/mouse/\n */\n\n\nvar mouseHandled = false;\n$( document ).mouseup( function() {\n\tmouseHandled = false;\n});\n\nvar mouse = $.widget(\"ui.mouse\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tcancel: \"input,textarea,button,select,option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.bind(\"mousedown.\" + this.widgetName, function(event) {\n\t\t\t\treturn that._mouseDown(event);\n\t\t\t})\n\t\t\t.bind(\"click.\" + this.widgetName, function(event) {\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.unbind(\".\" + this.widgetName);\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.unbind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate)\n\t\t\t\t.unbind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n\t\t}\n\t},\n\n\t_mouseDown: function(event) {\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// we may have missed mouseup (out of window)\n\t\t(this._mouseStarted && this._mouseUp(event));\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = (event.which === 1),\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = (typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif (!this.mouseDelayMet) {\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay);\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\n\t\t\tif (!this._mouseStarted) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\n\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\n\t\t}\n\n\t\t// these delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function(event) {\n\t\t\treturn that._mouseMove(event);\n\t\t};\n\t\tthis._mouseUpDelegate = function(event) {\n\t\t\treturn that._mouseUp(event);\n\t\t};\n\n\t\tthis.document\n\t\t\t.bind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.bind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function(event) {\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {\n\t\t\t\treturn this._mouseUp(event);\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\t\t\t\treturn this._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseDrag(event);\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function(event) {\n\t\tthis.document\n\t\t\t.unbind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.unbind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif (event.target === this._mouseDownEvent.target) {\n\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\n\t\t\t}\n\n\t\t\tthis._mouseStop(event);\n\t\t}\n\n\t\tmouseHandled = false;\n\t\treturn false;\n\t},\n\n\t_mouseDistanceMet: function(event) {\n\t\treturn (Math.max(\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function(/* event */) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function(/* event */) {},\n\t_mouseDrag: function(/* event */) {},\n\t_mouseStop: function(/* event */) {},\n\t_mouseCapture: function(/* event */) { return true; }\n});\n\n\n/*!\n * jQuery UI Position 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n(function() {\n\n$.ui = $.ui || {};\n\nvar cachedScrollbarWidth, supportsOffsetFractions,\n\tmax = Math.max,\n\tabs = Math.abs,\n\tround = Math.round,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[0];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[0];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[0].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn (cachedScrollbarWidth = w1 - w2);\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[0].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[0].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[0] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\n\t\t\t// support: jQuery 1.6.x\n\t\t\t// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows\n\t\t\twidth: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),\n\t\t\theight: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[0].preventDefault ) {\n\t\t// force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\t// clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t});\n\n\t// normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each(function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) + scrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) + scrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\t// if the browser doesn't support fractions, then round for consistent results\n\t\tif ( !supportsOffsetFractions ) {\n\t\t\tposition.left = round( position.left );\n\t\t\tposition.top = round( position.top );\n\t\t}\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tif ( options.using ) {\n\t\t\t// adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t});\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\t\t\t\t// element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\t\t\t\t// element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t// element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\t\t\t// too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\t\t\t// adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\t\t\t\t// element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\t\t\t\t// element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t// element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\t\t\t// too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\t\t\t// adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n// fraction support test\n(function() {\n\tvar testElement, testElementParent, testElementStyle, offsetLeft, i,\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ],\n\t\tdiv = document.createElement( \"div\" );\n\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\n\ttestElementStyle = {\n\t\tvisibility: \"hidden\",\n\t\twidth: 0,\n\t\theight: 0,\n\t\tborder: 0,\n\t\tmargin: 0,\n\t\tbackground: \"none\"\n\t};\n\tif ( body ) {\n\t\t$.extend( testElementStyle, {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: \"-1000px\",\n\t\t\ttop: \"-1000px\"\n\t\t});\n\t}\n\tfor ( i in testElementStyle ) {\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\n\t}\n\ttestElement.appendChild( div );\n\ttestElementParent = body || document.documentElement;\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\n\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\n\n\toffsetLeft = $( div ).offset().left;\n\tsupportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;\n\n\ttestElement.innerHTML = \"\";\n\ttestElementParent.removeChild( testElement );\n})();\n\n})();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI Accordion 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/accordion/\n */\n\n\nvar accordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: \"> li > :first-child,> :not(li):even\",\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis.element.addClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t// ARIA\n\t\t\t.attr( \"role\", \"tablist\" );\n\n\t\t// don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && (options.active === false || options.active == null) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icons = this.options.icons;\n\t\tif ( icons ) {\n\t\t\t$( \"<span>\" )\n\t\t\t\t.addClass( \"ui-accordion-header-icon ui-icon \" + icons.header )\n\t\t\t\t.prependTo( this.headers );\n\t\t\tthis.active.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.removeClass( icons.header )\n\t\t\t\t.addClass( icons.activeHeader );\n\t\t\tthis.headers.addClass( \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis.headers\n\t\t\t.removeClass( \"ui-accordion-icons\" )\n\t\t\t.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// clean up main element\n\t\tthis.element\n\t\t\t.removeClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t.removeAttr( \"role\" );\n\n\t\t// clean up headers\n\t\tthis.headers\n\t\t\t.removeClass( \"ui-accordion-header ui-accordion-header-active ui-state-default \" +\n\t\t\t\t\"ui-corner-all ui-state-active ui-state-disabled ui-corner-top\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t.removeAttr( \"aria-selected\" )\n\t\t\t.removeAttr( \"aria-controls\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.removeClass( \"ui-helper-reset ui-widget-content ui-corner-bottom \" +\n\t\t\t\t\"ui-accordion-content ui-accordion-content-active ui-state-disabled\" )\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\n\t\t// #5332 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t\tthis.headers.add( this.headers.next() )\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase keyCode.RIGHT:\n\t\t\tcase keyCode.DOWN:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.LEFT:\n\t\t\tcase keyCode.UP:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.SPACE:\n\t\t\tcase keyCode.ENTER:\n\t\t\t\tthis._eventHandler( event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.HOME:\n\t\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.END:\n\t\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\ttoFocus.focus();\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().focus();\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find(\".ui-state-disabled\").length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\t\t// was active, active panel still exists\n\t\t} else {\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header )\n\t\t\t.addClass( \"ui-accordion-header ui-state-default ui-corner-all\" );\n\n\t\tthis.panels = this.headers.next()\n\t\t\t.addClass( \"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom\" )\n\t\t\t.filter( \":not(.ui-accordion-content-active)\" )\n\t\t\t.hide();\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active )\n\t\t\t.addClass( \"ui-accordion-header-active ui-state-active ui-corner-top\" )\n\t\t\t.removeClass( \"ui-corner-all\" );\n\t\tthis.active.next()\n\t\t\t.addClass( \"ui-accordion-content-active\" )\n\t\t\t.show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each(function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t.attr({\n\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\ttabIndex: -1\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t})\n\t\t\t\t.hide();\n\n\t\t// make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr({\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t});\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each(function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.headers.each(function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t})\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t})\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler({\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t});\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t});\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" });\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// when the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tactive.removeClass( \"ui-accordion-header-active ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactive.children( \".ui-accordion-header-icon\" )\n\t\t\t\t.removeClass( options.icons.activeHeader )\n\t\t\t\t.addClass( options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tclicked\n\t\t\t\t.removeClass( \"ui-corner-all\" )\n\t\t\t\t.addClass( \"ui-accordion-header-active ui-state-active ui-corner-top\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclicked.children( \".ui-accordion-header-icon\" )\n\t\t\t\t\t.removeClass( options.icons.header )\n\t\t\t\t\t.addClass( options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tclicked\n\t\t\t\t.next()\n\t\t\t\t.addClass( \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr({\n\t\t\t\"aria-hidden\": \"true\"\n\t\t});\n\t\ttoHide.prev().attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t});\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr({\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t});\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter(function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t})\n\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t});\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t});\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel;\n\n\t\ttoHide\n\t\t\t.removeClass( \"ui-accordion-content-active\" )\n\t\t\t.prev()\n\t\t\t\t.removeClass( \"ui-corner-top\" )\n\t\t\t\t.addClass( \"ui-corner-all\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n});\n\n\n/*!\n * jQuery UI Menu 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/menu/\n */\n\n\nvar menu = $.widget( \"ui.menu\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-carat-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left-1 top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content\" )\n\t\t\t.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length )\n\t\t\t.attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t});\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.element\n\t\t\t\t.addClass( \"ui-state-disabled\" )\n\t\t\t\t.attr( \"aria-disabled\", \"true\" );\n\t\t}\n\n\t\tthis._on({\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) && $( this.document[ 0 ].activeElement ).closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = $( event.currentTarget );\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\ttarget.siblings( \".ui-state-active\" ).removeClass( \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay(function() {\n\t\t\t\t\tif ( !$.contains( this.element[0], this.document[0].activeElement ) ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t});\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeClass( \"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\" )\n\t\t\t\t.removeAttr( \"role\" )\n\t\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\t// Destroy menu items\n\t\tthis.element.find( \".ui-menu-item\" )\n\t\t\t.removeClass( \"ui-menu-item\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeUniqueId()\n\t\t\t.removeClass( \"ui-state-hover\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-haspopup\" )\n\t\t\t.children().each( function() {\n\t\t\t\tvar elem = $( this );\n\t\t\t\tif ( elem.data( \"ui-menu-submenu-carat\" ) ) {\n\t\t\t\t\telem.remove();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Destroy menu dividers\n\t\tthis.element.find( \".ui-menu-divider\" ).removeClass( \"ui-menu-divider ui-widget-content\" );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\tskip = false;\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay(function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.is( \"[aria-haspopup='true']\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis.element.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tsubmenus.filter( \":not(.ui-menu)\" )\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-front\" )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t})\n\t\t\t.each(function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.parent(),\n\t\t\t\t\tsubmenuCarat = $( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-menu-icon ui-icon \" + icon )\n\t\t\t\t\t\t.data( \"ui-menu-submenu-carat\", true );\n\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCarat );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t});\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each(function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\titem.addClass( \"ui-widget-content ui-menu-divider\" );\n\t\t\t}\n\t\t});\n\n\t\t// Don't refresh list items that are already adapted\n\t\titems.not( \".ui-menu-item, .ui-menu-divider\" )\n\t\t\t.addClass( \"ui-menu-item\" )\n\t\t\t.uniqueId()\n\t\t\t.attr({\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: this._itemRole()\n\t\t\t});\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.element.find( \".ui-menu-icon\" )\n\t\t\t\t.removeClass( this.options.icons.submenu )\n\t\t\t\t.addClass( value.submenu );\n\t\t}\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\t\tfocused = this.active.addClass( \"ui-state-focus\" ).removeClass( \"ui-state-active\" );\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tthis.active\n\t\t\t.parent()\n\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t.addClass( \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay(function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening(nested);\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[0], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[0], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.active.removeClass( \"ui-state-focus\" );\n\t\tthis.active = null;\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the carat icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay(function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend({\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay(function() {\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu\n\t\t\t.find( \".ui-menu\" )\n\t\t\t\t.hide()\n\t\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t\t.attr( \"aria-expanded\", \"false\" )\n\t\t\t.end()\n\t\t\t.find( \".ui-state-active\" ).not( \".ui-state-focus\" )\n\t\t\t\t.removeClass( \"ui-state-active\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t.find( this.options.items )\n\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay(function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t});\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each(function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t});\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each(function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t});\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function(character) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t.filter(function() {\n\t\t\t\treturn regex.test( $.trim( $( this ).text() ) );\n\t\t\t});\n\t}\n});\n\n\n/*!\n * jQuery UI Autocomplete 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/autocomplete/\n */\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\tthis.isMultiLine =\n\t\t\t// Textareas are always multi-line\n\t\t\tisTextarea ? true :\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t\t// IE also treats inputs as contentEditable\n\t\t\tisInput ? false :\n\t\t\t// All other element types are determined by whether or not they're contentEditable\n\t\t\tthis.element.prop( \"isContentEditable\" );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-autocomplete-input\" )\n\t\t\t.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t});\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.addClass( \"ui-autocomplete ui-front\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu({\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t})\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay(function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t});\n\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\n\t\t\t\t// so we have to track the next mousedown and close the menu if\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\n\t\t\t\tvar menuElement = this.menu.element[ 0 ];\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tthis.document.one( \"mousedown\", function( event ) {\n\t\t\t\t\t\t\tif ( event.target !== that.element[ 0 ] &&\n\t\t\t\t\t\t\t\t\tevent.target !== menuElement &&\n\t\t\t\t\t\t\t\t\t!$.contains( menuElement, event.target ) ) {\n\t\t\t\t\t\t\t\tthat.close();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {\n\t\t\t\t\tthis.element.focus();\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t});\n\n\t\tthis.liveRegion = $( \"<span>\", {\n\t\t\t\trole: \"status\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t})\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\n\t\t\t.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax({\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay(function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy(function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis.element.removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t});\n\t\t});\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend({\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t});\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" ).text( item.label ).appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n});\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t});\n\t}\n});\n\n// live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n});\n\nvar autocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Button 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/button/\n */\n\n\nvar lastActive,\n\tbaseClasses = \"ui-button ui-widget ui-state-default ui-corner-all\",\n\ttypeClasses = \"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",\n\tformResetHandler = function() {\n\t\tvar form = $( this );\n\t\tsetTimeout(function() {\n\t\t\tform.find( \":ui-button\" ).button( \"refresh\" );\n\t\t}, 1 );\n\t},\n\tradioGroup = function( radio ) {\n\t\tvar name = radio.name,\n\t\t\tform = radio.form,\n\t\t\tradios = $( [] );\n\t\tif ( name ) {\n\t\t\tname = name.replace( /'/g, \"\\\\'\" );\n\t\t\tif ( form ) {\n\t\t\t\tradios = $( form ).find( \"[name='\" + name + \"'][type=radio]\" );\n\t\t\t} else {\n\t\t\t\tradios = $( \"[name='\" + name + \"'][type=radio]\", radio.ownerDocument )\n\t\t\t\t\t.filter(function() {\n\t\t\t\t\t\treturn !this.form;\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn radios;\n\t};\n\n$.widget( \"ui.button\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tdisabled: null,\n\t\ttext: true,\n\t\tlabel: null,\n\t\ticons: {\n\t\t\tprimary: null,\n\t\t\tsecondary: null\n\t\t}\n\t},\n\t_create: function() {\n\t\tthis.element.closest( \"form\" )\n\t\t\t.unbind( \"reset\" + this.eventNamespace )\n\t\t\t.bind( \"reset\" + this.eventNamespace, formResetHandler );\n\n\t\tif ( typeof this.options.disabled !== \"boolean\" ) {\n\t\t\tthis.options.disabled = !!this.element.prop( \"disabled\" );\n\t\t} else {\n\t\t\tthis.element.prop( \"disabled\", this.options.disabled );\n\t\t}\n\n\t\tthis._determineButtonType();\n\t\tthis.hasTitle = !!this.buttonElement.attr( \"title\" );\n\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\ttoggleButton = this.type === \"checkbox\" || this.type === \"radio\",\n\t\t\tactiveClass = !toggleButton ? \"ui-state-active\" : \"\";\n\n\t\tif ( options.label === null ) {\n\t\t\toptions.label = (this.type === \"input\" ? this.buttonElement.val() : this.buttonElement.html());\n\t\t}\n\n\t\tthis._hoverable( this.buttonElement );\n\n\t\tthis.buttonElement\n\t\t\t.addClass( baseClasses )\n\t\t\t.attr( \"role\", \"button\" )\n\t\t\t.bind( \"mouseenter\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( this === lastActive ) {\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( \"mouseleave\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).removeClass( activeClass );\n\t\t\t})\n\t\t\t.bind( \"click\" + this.eventNamespace, function( event ) {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Can't use _focusable() because the element that receives focus\n\t\t// and the element that gets the ui-state-focus class are different\n\t\tthis._on({\n\t\t\tfocus: function() {\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\n\t\t\t}\n\t\t});\n\n\t\tif ( toggleButton ) {\n\t\t\tthis.element.bind( \"change\" + this.eventNamespace, function() {\n\t\t\t\tthat.refresh();\n\t\t\t});\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" ) {\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( this.type === \"radio\" ) {\n\t\t\tthis.buttonElement.bind( \"click\" + this.eventNamespace, function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\tthat.buttonElement.attr( \"aria-pressed\", \"true\" );\n\n\t\t\t\tvar radio = that.element[ 0 ];\n\t\t\t\tradioGroup( radio )\n\t\t\t\t\t.not( radio )\n\t\t\t\t\t.map(function() {\n\t\t\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t\t\t})\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t});\n\t\t} else {\n\t\t\tthis.buttonElement\n\t\t\t\t.bind( \"mousedown\" + this.eventNamespace, function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\tlastActive = this;\n\t\t\t\t\tthat.document.one( \"mouseup\", function() {\n\t\t\t\t\t\tlastActive = null;\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.bind( \"mouseup\" + this.eventNamespace, function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t})\n\t\t\t\t.bind( \"keydown\" + this.eventNamespace, function(event) {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {\n\t\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// see #8559, we bind to blur here in case the button element loses\n\t\t\t\t// focus between keydown and keyup, it would be left in an \"active\" state\n\t\t\t\t.bind( \"keyup\" + this.eventNamespace + \" blur\" + this.eventNamespace, function() {\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t});\n\n\t\t\tif ( this.buttonElement.is(\"a\") ) {\n\t\t\t\tthis.buttonElement.keyup(function(event) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\t// TODO pass through original event correctly (just as 2nd argument doesn't work)\n\t\t\t\t\t\t$( this ).click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis._setOption( \"disabled\", options.disabled );\n\t\tthis._resetButton();\n\t},\n\n\t_determineButtonType: function() {\n\t\tvar ancestor, labelSelector, checked;\n\n\t\tif ( this.element.is(\"[type=checkbox]\") ) {\n\t\t\tthis.type = \"checkbox\";\n\t\t} else if ( this.element.is(\"[type=radio]\") ) {\n\t\t\tthis.type = \"radio\";\n\t\t} else if ( this.element.is(\"input\") ) {\n\t\t\tthis.type = \"input\";\n\t\t} else {\n\t\t\tthis.type = \"button\";\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t// we don't search against the document in case the element\n\t\t\t// is disconnected from the DOM\n\t\t\tancestor = this.element.parents().last();\n\t\t\tlabelSelector = \"label[for='\" + this.element.attr(\"id\") + \"']\";\n\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\tancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();\n\t\t\t\tthis.buttonElement = ancestor.filter( labelSelector );\n\t\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.element.addClass( \"ui-helper-hidden-accessible\" );\n\n\t\t\tchecked = this.element.is( \":checked\" );\n\t\t\tif ( checked ) {\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-active\" );\n\t\t\t}\n\t\t\tthis.buttonElement.prop( \"aria-pressed\", checked );\n\t\t} else {\n\t\t\tthis.buttonElement = this.element;\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.buttonElement;\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-helper-hidden-accessible\" );\n\t\tthis.buttonElement\n\t\t\t.removeClass( baseClasses + \" ui-state-active \" + typeClasses )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-pressed\" )\n\t\t\t.html( this.buttonElement.find(\".ui-button-text\").html() );\n\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.buttonElement.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget().toggleClass( \"ui-state-disabled\", !!value );\n\t\t\tthis.element.prop( \"disabled\", !!value );\n\t\t\tif ( value ) {\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus\" );\n\t\t\t\t} else {\n\t\t\t\t\tthis.buttonElement.removeClass( \"ui-state-focus ui-state-active\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis._resetButton();\n\t},\n\n\trefresh: function() {\n\t\t//See #8237 & #8828\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ? this.element.is( \":disabled\" ) : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOption( \"disabled\", isDisabled );\n\t\t}\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tradioGroup( this.element[0] ).each(function() {\n\t\t\t\tif ( $( this ).is( \":checked\" ) ) {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t\t} else {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( this.type === \"checkbox\" ) {\n\t\t\tif ( this.element.is( \":checked\" ) ) {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t} else {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetButton: function() {\n\t\tif ( this.type === \"input\" ) {\n\t\t\tif ( this.options.label ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tvar buttonElement = this.buttonElement.removeClass( typeClasses ),\n\t\t\tbuttonText = $( \"<span></span>\", this.document[0] )\n\t\t\t\t.addClass( \"ui-button-text\" )\n\t\t\t\t.html( this.options.label )\n\t\t\t\t.appendTo( buttonElement.empty() )\n\t\t\t\t.text(),\n\t\t\ticons = this.options.icons,\n\t\t\tmultipleIcons = icons.primary && icons.secondary,\n\t\t\tbuttonClasses = [];\n\n\t\tif ( icons.primary || icons.secondary ) {\n\t\t\tif ( this.options.text ) {\n\t\t\t\tbuttonClasses.push( \"ui-button-text-icon\" + ( multipleIcons ? \"s\" : ( icons.primary ? \"-primary\" : \"-secondary\" ) ) );\n\t\t\t}\n\n\t\t\tif ( icons.primary ) {\n\t\t\t\tbuttonElement.prepend( \"<span class='ui-button-icon-primary ui-icon \" + icons.primary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( icons.secondary ) {\n\t\t\t\tbuttonElement.append( \"<span class='ui-button-icon-secondary ui-icon \" + icons.secondary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( !this.options.text ) {\n\t\t\t\tbuttonClasses.push( multipleIcons ? \"ui-button-icons-only\" : \"ui-button-icon-only\" );\n\n\t\t\t\tif ( !this.hasTitle ) {\n\t\t\t\t\tbuttonElement.attr( \"title\", $.trim( buttonText ) );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbuttonClasses.push( \"ui-button-text-only\" );\n\t\t}\n\t\tbuttonElement.addClass( buttonClasses.join( \" \" ) );\n\t}\n});\n\n$.widget( \"ui.buttonset\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\titems: \"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)\"\n\t},\n\n\t_create: function() {\n\t\tthis.element.addClass( \"ui-buttonset\" );\n\t},\n\n\t_init: function() {\n\t\tthis.refresh();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.buttons.button( \"option\", key, value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\trefresh: function() {\n\t\tvar rtl = this.element.css( \"direction\" ) === \"rtl\",\n\t\t\tallButtons = this.element.find( this.options.items ),\n\t\t\texistingButtons = allButtons.filter( \":ui-button\" );\n\n\t\t// Initialize new buttons\n\t\tallButtons.not( \":ui-button\" ).button();\n\n\t\t// Refresh existing buttons\n\t\texistingButtons.button( \"refresh\" );\n\n\t\tthis.buttons = allButtons\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-all ui-corner-left ui-corner-right\" )\n\t\t\t\t.filter( \":first\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-right\" : \"ui-corner-left\" )\n\t\t\t\t.end()\n\t\t\t\t.filter( \":last\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-left\" : \"ui-corner-right\" )\n\t\t\t\t.end()\n\t\t\t.end();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeClass( \"ui-buttonset\" );\n\t\tthis.buttons\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-left ui-corner-right\" )\n\t\t\t.end()\n\t\t\t.button( \"destroy\" );\n\t}\n});\n\nvar button = $.ui.button;\n\n\n/*!\n * jQuery UI Datepicker 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/datepicker/\n */\n\n\n$.extend($.ui, { datepicker: { version: \"1.11.4\" } });\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[\"\"] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], // For formatting\n\t\tdayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], // For formatting\n\t\tdayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], // For formatting\n\t\tdayNamesMin: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend(this._defaults, this.regional[\"\"]);\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ]);\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover($(\"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"));\n}\n\n$.extend(Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function(settings) {\n\t\tdatepicker_extendRemove(this._defaults, settings || {});\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function(target, settings) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = (nodeName === \"div\" || nodeName === \"span\");\n\t\tif (!target.id) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst($(target), inline);\n\t\tinst.settings = $.extend({}, settings || {});\n\t\tif (nodeName === \"input\") {\n\t\t\tthis._connectDatepicker(target, inst);\n\t\t} else if (inline) {\n\t\t\tthis._inlineDatepicker(target, inst);\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function(target, inline) {\n\t\tvar id = target[0].id.replace(/([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\"); // escape jQuery meta chars\n\t\treturn {id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: (!inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover($(\"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")))};\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function(target, inst) {\n\t\tvar input = $(target);\n\t\tinst.append = $([]);\n\t\tinst.trigger = $([]);\n\t\tif (input.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments(input, inst);\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).\n\t\t\tkeypress(this._doKeyPress).keyup(this._doKeyUp);\n\t\tthis._autoSize(inst);\n\t\t$.data(target, \"datepicker\", inst);\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function(input, inst) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get(inst, \"appendText\"),\n\t\t\tisRTL = this._get(inst, \"isRTL\");\n\n\t\tif (inst.append) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif (appendText) {\n\t\t\tinst.append = $(\"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\");\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.append);\n\t\t}\n\n\t\tinput.unbind(\"focus\", this._showDatepicker);\n\n\t\tif (inst.trigger) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get(inst, \"showOn\");\n\t\tif (showOn === \"focus\" || showOn === \"both\") { // pop-up date picker when in the marked field\n\t\t\tinput.focus(this._showDatepicker);\n\t\t}\n\t\tif (showOn === \"button\" || showOn === \"both\") { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get(inst, \"buttonText\");\n\t\t\tbuttonImage = this._get(inst, \"buttonImage\");\n\t\t\tinst.trigger = $(this._get(inst, \"buttonImageOnly\") ?\n\t\t\t\t$(\"<img/>\").addClass(this._triggerClass).\n\t\t\t\t\tattr({ src: buttonImage, alt: buttonText, title: buttonText }) :\n\t\t\t\t$(\"<button type='button'></button>\").addClass(this._triggerClass).\n\t\t\t\t\thtml(!buttonImage ? buttonText : $(\"<img/>\").attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText })));\n\t\t\tinput[isRTL ? \"before\" : \"after\"](inst.trigger);\n\t\t\tinst.trigger.click(function() {\n\t\t\t\tif ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function(inst) {\n\t\tif (this._get(inst, \"autoSize\") && !inst.inline) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date(2009, 12 - 1, 20), // Ensure double digits\n\t\t\t\tdateFormat = this._get(inst, \"dateFormat\");\n\n\t\t\tif (dateFormat.match(/[DM]/)) {\n\t\t\t\tfindMax = function(names) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor (i = 0; i < names.length; i++) {\n\t\t\t\t\t\tif (names[i].length > max) {\n\t\t\t\t\t\t\tmax = names[i].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\"))));\n\t\t\t\tdate.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\"))) + 20 - date.getDay());\n\t\t\t}\n\t\t\tinst.input.attr(\"size\", this._formatDate(inst, date).length);\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function(target, inst) {\n\t\tvar divSpan = $(target);\n\t\tif (divSpan.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass(this.markerClassName).append(inst.dpDiv);\n\t\t$.data(target, \"datepicker\", inst);\n\t\tthis._setDate(inst, this._getDefaultDate(inst), true);\n\t\tthis._updateDatepicker(inst);\n\t\tthis._updateAlternate(inst);\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function(input, date, onSelect, settings, pos) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif (!inst) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $(\"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\");\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\n\t\t\t$(\"body\").append(this._dialogInput);\n\t\t\tinst = this._dialogInst = this._newInst(this._dialogInput, false);\n\t\t\tinst.settings = {};\n\t\t\t$.data(this._dialogInput[0], \"datepicker\", inst);\n\t\t}\n\t\tdatepicker_extendRemove(inst.settings, settings || {});\n\t\tdate = (date && date.constructor === Date ? this._formatDate(inst, date) : date);\n\t\tthis._dialogInput.val(date);\n\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\n\t\tif (!this._pos) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\n\t\t}\n\n\t\t// move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css(\"left\", (this._pos[0] + 20) + \"px\").css(\"top\", this._pos[1] + \"px\");\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass(this._dialogClass);\n\t\tthis._showDatepicker(this._dialogInput[0]);\n\t\tif ($.blockUI) {\n\t\t\t$.blockUI(this.dpDiv);\n\t\t}\n\t\t$.data(this._dialogInput[0], \"datepicker\", inst);\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function(target) {\n\t\tvar nodeName,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData(target, \"datepicker\");\n\t\tif (nodeName === \"input\") {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass(this.markerClassName).\n\t\t\t\tunbind(\"focus\", this._showDatepicker).\n\t\t\t\tunbind(\"keydown\", this._doKeyDown).\n\t\t\t\tunbind(\"keypress\", this._doKeyPress).\n\t\t\t\tunbind(\"keyup\", this._doKeyUp);\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\t$target.removeClass(this.markerClassName).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function(target) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName === \"input\") {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter(\"button\").\n\t\t\t\teach(function() { this.disabled = false; }).end().\n\t\t\t\tfilter(\"img\").css({opacity: \"1.0\", cursor: \"\"});\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\n\t\t\tinline.children().removeClass(\"ui-state-disabled\");\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tprop(\"disabled\", false);\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function(target) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $(target),\n\t\t\tinst = $.data(target, \"datepicker\");\n\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName === \"input\") {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter(\"button\").\n\t\t\t\teach(function() { this.disabled = true; }).end().\n\t\t\t\tfilter(\"img\").css({opacity: \"0.5\", cursor: \"default\"});\n\t\t} else if (nodeName === \"div\" || nodeName === \"span\") {\n\t\t\tinline = $target.children(\".\" + this._inlineClass);\n\t\t\tinline.children().addClass(\"ui-state-disabled\");\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tprop(\"disabled\", true);\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value === target ? null : value); }); // delete entry\n\t\tthis._disabledInputs[this._disabledInputs.length] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function(target) {\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < this._disabledInputs.length; i++) {\n\t\t\tif (this._disabledInputs[i] === target) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function(target) {\n\t\ttry {\n\t\t\treturn $.data(target, \"datepicker\");\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function(target, name, value) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst(target);\n\n\t\tif (arguments.length === 2 && typeof name === \"string\") {\n\t\t\treturn (name === \"defaults\" ? $.extend({}, $.datepicker._defaults) :\n\t\t\t\t(inst ? (name === \"all\" ? $.extend({}, inst.settings) :\n\t\t\t\tthis._get(inst, name)) : null));\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif (typeof name === \"string\") {\n\t\t\tsettings = {};\n\t\t\tsettings[name] = value;\n\t\t}\n\n\t\tif (inst) {\n\t\t\tif (this._curInst === inst) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker(target, true);\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\");\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\");\n\t\t\tdatepicker_extendRemove(inst.settings, settings);\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {\n\t\t\t\tinst.settings.minDate = this._formatDate(inst, minDate);\n\t\t\t}\n\t\t\tif (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {\n\t\t\t\tinst.settings.maxDate = this._formatDate(inst, maxDate);\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker(target);\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker(target);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments($(target), inst);\n\t\t\tthis._autoSize(inst);\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateAlternate(inst);\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t// change method deprecated\n\t_changeDatepicker: function(target, name, value) {\n\t\tthis._optionDatepicker(target, name, value);\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function(target) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function(target, date) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateDatepicker(inst);\n\t\t\tthis._updateAlternate(inst);\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function(target, noDefault) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst && !inst.inline) {\n\t\t\tthis._setDateFromField(inst, noDefault);\n\t\t}\n\t\treturn (inst ? this._getDate(inst) : null);\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function(event) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst(event.target),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is(\".ui-datepicker-rtl\");\n\n\t\tinst._keyEvent = true;\n\t\tif ($.datepicker._datepickerShowing) {\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $(\"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv);\n\t\t\t\t\t\tif (sel[0]) {\n\t\t\t\t\t\t\t$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get(inst, \"onSelect\");\n\t\t\t\t\t\tif (onSelect) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate(inst);\n\n\t\t\t\t\t\t\t// trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._clearDate(event.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday(event.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t\t-$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, -7, \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif (event.originalEvent.altKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepBigMonths\") :\n\t\t\t\t\t\t\t\t+$.datepicker._get(inst, \"stepMonths\")), \"M\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if (event.ctrlKey || event.metaKey) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate(event.target, +7, \"D\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker(this);\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif (handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function(event) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst(event.target);\n\n\t\tif ($.datepicker._get(inst, \"constrainInput\")) {\n\t\t\tchars = $.datepicker._possibleChars($.datepicker._get(inst, \"dateFormat\"));\n\t\t\tchr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);\n\t\t\treturn event.ctrlKey || event.metaKey || (chr < \" \" || !chars || chars.indexOf(chr) > -1);\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function(event) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst(event.target);\n\n\t\tif (inst.input.val() !== inst.lastVal) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\n\t\t\t\t\t(inst.input ? inst.input.val() : null),\n\t\t\t\t\t$.datepicker._getFormatConfig(inst));\n\n\t\t\t\tif (date) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField(inst);\n\t\t\t\t\t$.datepicker._updateAlternate(inst);\n\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function(input) {\n\t\tinput = input.target || input;\n\t\tif (input.nodeName.toLowerCase() !== \"input\") { // find from button/image trigger\n\t\t\tinput = $(\"input\", input.parentNode)[0];\n\t\t}\n\n\t\tif ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst(input);\n\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst) {\n\t\t\t$.datepicker._curInst.dpDiv.stop(true, true);\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get(inst, \"beforeShow\");\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};\n\t\tif(beforeShowSettings === false){\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove(inst.settings, beforeShowSettings);\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField(inst);\n\n\t\tif ($.datepicker._inDialog) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif (!$.datepicker._pos) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$(input).parents().each(function() {\n\t\t\tisFixed |= $(this).css(\"position\") === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t});\n\n\t\toffset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};\n\t\t$.datepicker._pos = null;\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css({position: \"absolute\", display: \"block\", top: \"-1000px\"});\n\t\t$.datepicker._updateDatepicker(inst);\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset(inst, offset, isFixed);\n\t\tinst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : (isFixed ? \"fixed\" : \"absolute\")), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\"});\n\n\t\tif (!inst.inline) {\n\t\t\tshowAnim = $.datepicker._get(inst, \"showAnim\");\n\t\t\tduration = $.datepicker._get(inst, \"duration\");\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show(showAnim, $.datepicker._get(inst, \"showOptions\"), duration);\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[showAnim || \"show\"](showAnim ? duration : null);\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.focus();\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function(inst) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append(this._generateHTML(inst));\n\t\tthis._attachHandlers(inst);\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\n\t\t\tcols = numMonths[1],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\");\n\t\tif (cols > 1) {\n\t\t\tinst.dpDiv.addClass(\"ui-datepicker-multi-\" + cols).css(\"width\", (width * cols) + \"em\");\n\t\t}\n\t\tinst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? \"add\" : \"remove\") +\n\t\t\t\"Class\"](\"ui-datepicker-multi\");\n\t\tinst.dpDiv[(this._get(inst, \"isRTL\") ? \"add\" : \"remove\") +\n\t\t\t\"Class\"](\"ui-datepicker-rtl\");\n\n\t\tif (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.focus();\n\t\t}\n\n\t\t// deffered render of the years select (to avoid flashes on Firefox)\n\t\tif( inst.yearshtml ){\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout(function(){\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif( origyearshtml === inst.yearshtml && inst.yearshtml ){\n\t\t\t\t\tinst.dpDiv.find(\"select.ui-datepicker-year:first\").replaceWith(inst.yearshtml);\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0);\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function(inst, offset, isFixed) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),\n\t\t\tviewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());\n\n\t\toffset.left -= (this._get(inst, \"isRTL\") ? (dpWidth - inputWidth) : 0);\n\t\toffset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;\n\t\toffset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;\n\n\t\t// now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?\n\t\t\tMath.abs(offset.left + dpWidth - viewWidth) : 0);\n\t\toffset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?\n\t\t\tMath.abs(dpHeight + inputHeight) : 0);\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function(obj) {\n\t\tvar position,\n\t\t\tinst = this._getInst(obj),\n\t\t\tisRTL = this._get(inst, \"isRTL\");\n\n\t\twhile (obj && (obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {\n\t\t\tobj = obj[isRTL ? \"previousSibling\" : \"nextSibling\"];\n\t\t}\n\n\t\tposition = $(obj).offset();\n\t\treturn [position.left, position.top];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function(input) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif (!inst || (input && inst !== $.data(input, \"datepicker\"))) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._datepickerShowing) {\n\t\t\tshowAnim = this._get(inst, \"showAnim\");\n\t\t\tduration = this._get(inst, \"duration\");\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog(inst);\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide(showAnim, $.datepicker._get(inst, \"showOptions\"), duration, postProcess);\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[(showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t(showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\"))]((showAnim ? duration : null), postProcess);\n\t\t\t}\n\n\t\t\tif (!showAnim) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get(inst, \"onClose\");\n\t\t\tif (onClose) {\n\t\t\t\tonClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : \"\"), inst]);\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif (this._inDialog) {\n\t\t\t\tthis._dialogInput.css({ position: \"absolute\", left: \"0\", top: \"-100px\" });\n\t\t\t\tif ($.blockUI) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$(\"body\").append(this.dpDiv);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function(inst) {\n\t\tinst.dpDiv.removeClass(this._dialogClass).unbind(\".ui-datepicker-calendar\");\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function(event) {\n\t\tif (!$.datepicker._curInst) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $(event.target),\n\t\t\tinst = $.datepicker._getInst($target[0]);\n\n\t\tif ( ( ( $target[0].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents(\"#\" + $.datepicker._mainDivId).length === 0 &&\n\t\t\t\t!$target.hasClass($.datepicker.markerClassName) &&\n\t\t\t\t!$target.closest(\".\" + $.datepicker._triggerClass).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||\n\t\t\t( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function(id, offset, period) {\n\t\tvar target = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tif (this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate(inst, offset +\n\t\t\t(period === \"M\" ? this._get(inst, \"showCurrentAtPos\") : 0), // undo positioning\n\t\t\tperiod);\n\t\tthis._updateDatepicker(inst);\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function(id) {\n\t\tvar date,\n\t\t\ttarget = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tif (this._get(inst, \"gotoCurrent\") && inst.currentDay) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function(id, select, period) {\n\t\tvar target = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tinst[\"selected\" + (period === \"M\" ? \"Month\" : \"Year\")] =\n\t\tinst[\"draw\" + (period === \"M\" ? \"Month\" : \"Year\")] =\n\t\t\tparseInt(select.options[select.selectedIndex].value,10);\n\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function(id, month, year, td) {\n\t\tvar inst,\n\t\t\ttarget = $(id);\n\n\t\tif ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst(target[0]);\n\t\tinst.selectedDay = inst.currentDay = $(\"a\", td).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate(id, this._formatDate(inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear));\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function(id) {\n\t\tvar target = $(id);\n\t\tthis._selectDate(target, \"\");\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function(id, dateStr) {\n\t\tvar onSelect,\n\t\t\ttarget = $(id),\n\t\t\tinst = this._getInst(target[0]);\n\n\t\tdateStr = (dateStr != null ? dateStr : this._formatDate(inst));\n\t\tif (inst.input) {\n\t\t\tinst.input.val(dateStr);\n\t\t}\n\t\tthis._updateAlternate(inst);\n\n\t\tonSelect = this._get(inst, \"onSelect\");\n\t\tif (onSelect) {\n\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback\n\t\t} else if (inst.input) {\n\t\t\tinst.input.trigger(\"change\"); // fire the change event\n\t\t}\n\n\t\tif (inst.inline){\n\t\t\tthis._updateDatepicker(inst);\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[0];\n\t\t\tif (typeof(inst.input[0]) !== \"object\") {\n\t\t\t\tinst.input.focus(); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function(inst) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get(inst, \"altField\");\n\n\t\tif (altField) { // update alternate field too\n\t\t\taltFormat = this._get(inst, \"altFormat\") || this._get(inst, \"dateFormat\");\n\t\t\tdate = this._getDate(inst);\n\t\t\tdateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));\n\t\t\t$(altField).each(function() { $(this).val(dateStr); });\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function(date) {\n\t\tvar day = date.getDay();\n\t\treturn [(day > 0 && day < 6), \"\"];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function(date) {\n\t\tvar time,\n\t\t\tcheckDate = new Date(date.getTime());\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth(0); // Compare with Jan 1\n\t\tcheckDate.setDate(1);\n\t\treturn Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function (format, value, settings) {\n\t\tif (format == null || value == null) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = (typeof value === \"object\" ? value.toString() : value + \"\");\n\t\tif (value === \"\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = (typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function(match) {\n\t\t\t\tvar isDoubled = lookAhead(match),\n\t\t\t\t\tsize = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n\t\t\t\t\t(match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\n\t\t\t\t\tminSize = (match === \"y\" ? size : 1),\n\t\t\t\t\tdigits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"),\n\t\t\t\t\tnum = value.substring(iValue).match(digits);\n\t\t\t\tif (!num) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[0].length;\n\t\t\t\treturn parseInt(num[0], 10);\n\t\t\t},\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function(match, shortNames, longNames) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {\n\t\t\t\t\t\treturn [ [k, v] ];\n\t\t\t\t\t}).sort(function (a, b) {\n\t\t\t\t\t\treturn -(a[1].length - b[1].length);\n\t\t\t\t\t});\n\n\t\t\t\t$.each(names, function (i, pair) {\n\t\t\t\t\tvar name = pair[1];\n\t\t\t\t\tif (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n\t\t\t\t\t\tindex = pair[0];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif (value.charAt(iValue) !== format.charAt(iFormat)) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\tif (literal) {\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber(\"d\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName(\"D\", dayNamesShort, dayNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber(\"o\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber(\"m\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName(\"M\", monthNamesShort, monthNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber(\"y\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date(getNumber(\"@\"));\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date((getNumber(\"!\") - this._ticksTo1970) / 10000);\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\")){\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (iValue < value.length){\n\t\t\textra = value.substr(iValue);\n\t\t\tif (!/^\\s+/.test(extra)) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif (year === -1) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if (year < 100) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t(year <= shortYearCutoff ? 0 : -100);\n\t\t}\n\n\t\tif (doy > -1) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth(year, month - 1);\n\t\t\t\tif (day <= dim) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while (true);\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust(new Date(year, month - 1, day));\n\t\tif (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\n\t\tMath.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function (format, date, settings) {\n\t\tif (!date) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,\n\t\t\tdayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function(match, value, len) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif (lookAhead(match)) {\n\t\t\t\t\twhile (num.length < len) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function(match, value, shortNames, longNames) {\n\t\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif (date) {\n\t\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\t\tif (literal) {\n\t\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber(\"d\", date.getDate(), 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName(\"D\", date.getDay(), dayNamesShort, dayNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber(\"o\",\n\t\t\t\t\t\t\t\tMath.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber(\"m\", date.getMonth() + 1, 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName(\"M\", date.getMonth(), monthNamesShort, monthNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += (lookAhead(\"y\") ? date.getFullYear() :\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? \"0\" : \"\") + date.getYear() % 100);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif (lookAhead(\"'\")) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function (format) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function(match) {\n\t\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n\t\t\t\tif (matches) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor (iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\tif (literal) {\n\t\t\t\tif (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\")) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function(inst, name) {\n\t\treturn inst.settings[name] !== undefined ?\n\t\t\tinst.settings[name] : this._defaults[name];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function(inst, noDefault) {\n\t\tif (inst.input.val() === inst.lastVal) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get(inst, \"dateFormat\"),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate(inst),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig(inst);\n\n\t\ttry {\n\t\t\tdate = this.parseDate(dateFormat, dates, settings) || defaultDate;\n\t\t} catch (event) {\n\t\t\tdates = (noDefault ? \"\" : dates);\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = (dates ? date.getDate() : 0);\n\t\tinst.currentMonth = (dates ? date.getMonth() : 0);\n\t\tinst.currentYear = (dates ? date.getFullYear() : 0);\n\t\tthis._adjustInstDate(inst);\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function(inst) {\n\t\treturn this._restrictMinMax(inst,\n\t\t\tthis._determineDate(inst, this._get(inst, \"defaultDate\"), new Date()));\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function(inst, date, defaultDate) {\n\t\tvar offsetNumeric = function(offset) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate(date.getDate() + offset);\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function(offset) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate($.datepicker._get(inst, \"dateFormat\"),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig(inst));\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = (offset.toLowerCase().match(/^c/) ?\n\t\t\t\t\t$.datepicker._getDate(inst) : null) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec(offset);\n\n\t\t\t\twhile (matches) {\n\t\t\t\t\tswitch (matches[2] || \"d\") {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt(matches[1],10); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt(matches[1],10) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt(matches[1],10);\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt(matches[1],10);\n\t\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t\t}\n\t\t\t\treturn new Date(year, month, day);\n\t\t\t},\n\t\t\tnewDate = (date == null || date === \"\" ? defaultDate : (typeof date === \"string\" ? offsetString(date) :\n\t\t\t\t(typeof date === \"number\" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));\n\n\t\tnewDate = (newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate);\n\t\tif (newDate) {\n\t\t\tnewDate.setHours(0);\n\t\t\tnewDate.setMinutes(0);\n\t\t\tnewDate.setSeconds(0);\n\t\t\tnewDate.setMilliseconds(0);\n\t\t}\n\t\treturn this._daylightSavingAdjust(newDate);\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function(date) {\n\t\tif (!date) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function(inst, date, noChange) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {\n\t\t\tthis._notifyChange(inst);\n\t\t}\n\t\tthis._adjustInstDate(inst);\n\t\tif (inst.input) {\n\t\t\tinst.input.val(clear ? \"\" : this._formatDate(inst));\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function(inst) {\n\t\tvar startDate = (!inst.currentYear || (inst.input && inst.input.val() === \"\") ? null :\n\t\t\tthis._daylightSavingAdjust(new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function(inst) {\n\t\tvar stepMonths = this._get(inst, \"stepMonths\"),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find(\"[data-handler]\").map(function () {\n\t\t\tvar handler = {\n\t\t\t\tprev: function () {\n\t\t\t\t\t$.datepicker._adjustDate(id, -stepMonths, \"M\");\n\t\t\t\t},\n\t\t\t\tnext: function () {\n\t\t\t\t\t$.datepicker._adjustDate(id, +stepMonths, \"M\");\n\t\t\t\t},\n\t\t\t\thide: function () {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function () {\n\t\t\t\t\t$.datepicker._gotoToday(id);\n\t\t\t\t},\n\t\t\t\tselectDay: function () {\n\t\t\t\t\t$.datepicker._selectDay(id, +this.getAttribute(\"data-month\"), +this.getAttribute(\"data-year\"), this);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function () {\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"M\");\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function () {\n\t\t\t\t\t$.datepicker._selectMonthYear(id, this, \"Y\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(this).bind(this.getAttribute(\"data-event\"), handler[this.getAttribute(\"data-handler\")]);\n\t\t});\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function(inst) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time\n\t\t\tisRTL = this._get(inst, \"isRTL\"),\n\t\t\tshowButtonPanel = this._get(inst, \"showButtonPanel\"),\n\t\t\thideIfNoPrevNext = this._get(inst, \"hideIfNoPrevNext\"),\n\t\t\tnavigationAsDateFormat = this._get(inst, \"navigationAsDateFormat\"),\n\t\t\tnumMonths = this._getNumberOfMonths(inst),\n\t\t\tshowCurrentAtPos = this._get(inst, \"showCurrentAtPos\"),\n\t\t\tstepMonths = this._get(inst, \"stepMonths\"),\n\t\t\tisMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),\n\t\t\tcurrentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :\n\t\t\t\tnew Date(inst.currentYear, inst.currentMonth, inst.currentDay))),\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif (drawMonth < 0) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif (maxDate) {\n\t\t\tmaxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));\n\t\t\tmaxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);\n\t\t\twhile (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif (drawMonth < 0) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get(inst, \"prevText\");\n\t\tprevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\n\t\tprev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\"+ prevText +\"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\") + \"'>\" + prevText + \"</span></a>\"));\n\n\t\tnextText = this._get(inst, \"nextText\");\n\t\tnextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\n\t\tnext = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t(hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\"+ nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\") + \"'>\" + nextText + \"</span></a>\"));\n\n\t\tcurrentText = this._get(inst, \"currentText\");\n\t\tgotoDate = (this._get(inst, \"gotoCurrent\") && inst.currentDay ? currentDate : today);\n\t\tcurrentText = (!navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));\n\n\t\tcontrols = (!inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get(inst, \"closeText\") + \"</button>\" : \"\");\n\n\t\tbuttonPanel = (showButtonPanel) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + (isRTL ? controls : \"\") +\n\t\t\t(this._isInRange(inst, gotoDate) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\") + (isRTL ? \"\" : controls) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt(this._get(inst, \"firstDay\"),10);\n\t\tfirstDay = (isNaN(firstDay) ? 0 : firstDay);\n\n\t\tshowWeek = this._get(inst, \"showWeek\");\n\t\tdayNames = this._get(inst, \"dayNames\");\n\t\tdayNamesMin = this._get(inst, \"dayNamesMin\");\n\t\tmonthNames = this._get(inst, \"monthNames\");\n\t\tmonthNamesShort = this._get(inst, \"monthNamesShort\");\n\t\tbeforeShowDay = this._get(inst, \"beforeShowDay\");\n\t\tshowOtherMonths = this._get(inst, \"showOtherMonths\");\n\t\tselectOtherMonths = this._get(inst, \"selectOtherMonths\");\n\t\tdefaultDate = this._getDefaultDate(inst);\n\t\thtml = \"\";\n\t\tdow;\n\t\tfor (row = 0; row < numMonths[0]; row++) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor (col = 0; col < numMonths[1]; col++) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif (isMultiMonth) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif (numMonths[1] > 1) {\n\t\t\t\t\t\tswitch (col) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"right\" : \"left\"); break;\n\t\t\t\t\t\t\tcase numMonths[1]-1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + (isRTL ? \"left\" : \"right\"); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : \"\") +\n\t\t\t\t\t(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : \"\") +\n\t\t\t\t\tthis._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = (showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get(inst, \"weekHeader\") + \"</th>\" : \"\");\n\t\t\t\tfor (dow = 0; dow < 7; dow++) { // days of the week\n\t\t\t\t\tday = (dow + firstDay) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ((dow + firstDay + 6) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\") + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[day] + \"'>\" + dayNamesMin[day] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth(drawYear, drawMonth);\n\t\t\t\tif (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {\n\t\t\t\t\tinst.selectedDay = Math.min(inst.selectedDay, daysInMonth);\n\t\t\t\t}\n\t\t\t\tleadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\n\t\t\t\tcurRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate\n\t\t\t\tnumRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));\n\t\t\t\tfor (dRow = 0; dRow < numRows; dRow++) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = (!showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get(inst, \"calculateWeek\")(printDate) + \"</td>\");\n\t\t\t\t\tfor (dow = 0; dow < 7; dow++) { // create date picker days\n\t\t\t\t\t\tdaySettings = (beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, \"\"]);\n\t\t\t\t\t\totherMonth = (printDate.getMonth() !== drawMonth);\n\t\t\t\t\t\tunselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||\n\t\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\") + // highlight weekends\n\t\t\t\t\t\t\t(otherMonth ? \" ui-datepicker-other-month\" : \"\") + // highlight days from other months\n\t\t\t\t\t\t\t((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key\n\t\t\t\t\t\t\t(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\": \"\") +  // highlight unselectable days\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[1] + // highlight custom dates\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\")) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t((!otherMonth || showOtherMonths) && daySettings[2] ? \" title='\" + daySettings[2].replace(/'/g, \"&#39;\") + \"'\" : \"\") + // cell title\n\t\t\t\t\t\t\t(unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\") + \">\" + // actions\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t(unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t(printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\") +\n\t\t\t\t\t\t\t(printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\") + // highlight selected day\n\t\t\t\t\t\t\t(otherMonth ? \" ui-priority-secondary\" : \"\") + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\")) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust(printDate);\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif (drawMonth > 11) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + (isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t((numMonths[0] > 0 && col === numMonths[1]-1) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\") : \"\");\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get(inst, \"changeMonth\"),\n\t\t\tchangeYear = this._get(inst, \"changeYear\"),\n\t\t\tshowMonthAfterYear = this._get(inst, \"showMonthAfterYear\"),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// month selection\n\t\tif (secondary || !changeMonth) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[drawMonth] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = (minDate && minDate.getFullYear() === drawYear);\n\t\t\tinMaxYear = (maxDate && maxDate.getFullYear() === drawYear);\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++) {\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t(month === drawMonth ? \" selected='selected'\" : \"\") +\n\t\t\t\t\t\t\">\" + monthNamesShort[month] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif (!showMonthAfterYear) {\n\t\t\thtml += monthHtml + (secondary || !(changeMonth && changeYear) ? \"&#xa0;\" : \"\");\n\t\t}\n\n\t\t// year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif (secondary || !changeYear) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get(inst, \"yearRange\").split(\":\");\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function(value) {\n\t\t\t\t\tvar year = (value.match(/c[+\\-].*/) ? drawYear + parseInt(value.substring(1), 10) :\n\t\t\t\t\t\t(value.match(/[+\\-].*/) ? thisYear + parseInt(value, 10) :\n\t\t\t\t\t\tparseInt(value, 10)));\n\t\t\t\t\treturn (isNaN(year) ? thisYear : year);\n\t\t\t\t};\n\t\t\t\tyear = determineYear(years[0]);\n\t\t\t\tendYear = Math.max(year, determineYear(years[1] || \"\"));\n\t\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\n\t\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor (; year <= endYear; year++) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t(year === drawYear ? \" selected='selected'\" : \"\") +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get(inst, \"yearSuffix\");\n\t\tif (showMonthAfterYear) {\n\t\t\thtml += (secondary || !(changeMonth && changeYear) ? \"&#xa0;\" : \"\") + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function(inst, offset, period) {\n\t\tvar year = inst.drawYear + (period === \"Y\" ? offset : 0),\n\t\t\tmonth = inst.drawMonth + (period === \"M\" ? offset : 0),\n\t\t\tday = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === \"D\" ? offset : 0),\n\t\t\tdate = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif (period === \"M\" || period === \"Y\") {\n\t\t\tthis._notifyChange(inst);\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function(inst, date) {\n\t\tvar minDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tnewDate = (minDate && date < minDate ? minDate : date);\n\t\treturn (maxDate && newDate > maxDate ? maxDate : newDate);\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function(inst) {\n\t\tvar onChange = this._get(inst, \"onChangeMonthYear\");\n\t\tif (onChange) {\n\t\t\tonChange.apply((inst.input ? inst.input[0] : null),\n\t\t\t\t[inst.selectedYear, inst.selectedMonth + 1, inst]);\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function(inst) {\n\t\tvar numMonths = this._get(inst, \"numberOfMonths\");\n\t\treturn (numMonths == null ? [1, 1] : (typeof numMonths === \"number\" ? [1, numMonths] : numMonths));\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function(inst, minMax) {\n\t\treturn this._determineDate(inst, this._get(inst, minMax + \"Date\"), null);\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function(year, month) {\n\t\treturn 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function(year, month) {\n\t\treturn new Date(year, month, 1).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function(inst, offset, curYear, curMonth) {\n\t\tvar numMonths = this._getNumberOfMonths(inst),\n\t\t\tdate = this._daylightSavingAdjust(new Date(curYear,\n\t\t\tcurMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));\n\n\t\tif (offset < 0) {\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\n\t\t}\n\t\treturn this._isInRange(inst, date);\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function(inst, date) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate(inst, \"min\"),\n\t\t\tmaxDate = this._getMinMaxDate(inst, \"max\"),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get(inst, \"yearRange\");\n\t\t\tif (years){\n\t\t\t\tyearSplit = years.split(\":\");\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt(yearSplit[0], 10);\n\t\t\t\tmaxYear = parseInt(yearSplit[1], 10);\n\t\t\t\tif ( yearSplit[0].match(/[+\\-].*/) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[1].match(/[+\\-].*/) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ((!minDate || date.getTime() >= minDate.getTime()) &&\n\t\t\t(!maxDate || date.getTime() <= maxDate.getTime()) &&\n\t\t\t(!minYear || date.getFullYear() >= minYear) &&\n\t\t\t(!maxYear || date.getFullYear() <= maxYear));\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function(inst) {\n\t\tvar shortYearCutoff = this._get(inst, \"shortYearCutoff\");\n\t\tshortYearCutoff = (typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\n\t\treturn {shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get(inst, \"dayNamesShort\"), dayNames: this._get(inst, \"dayNames\"),\n\t\t\tmonthNamesShort: this._get(inst, \"monthNamesShort\"), monthNames: this._get(inst, \"monthNames\")};\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function(inst, day, month, year) {\n\t\tif (!day) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = (day ? (typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust(new Date(year, month, day))) :\n\t\t\tthis._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\treturn this.formatDate(this._get(inst, \"dateFormat\"), date, this._getFormatConfig(inst));\n\t}\n});\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover(dpDiv) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.delegate(selector, \"mouseout\", function() {\n\t\t\t$(this).removeClass(\"ui-state-hover\");\n\t\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\n\t\t\t\t$(this).removeClass(\"ui-datepicker-prev-hover\");\n\t\t\t}\n\t\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\n\t\t\t\t$(this).removeClass(\"ui-datepicker-next-hover\");\n\t\t\t}\n\t\t})\n\t\t.delegate( selector, \"mouseover\", datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {\n\t\t$(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\");\n\t\t$(this).addClass(\"ui-state-hover\");\n\t\tif (this.className.indexOf(\"ui-datepicker-prev\") !== -1) {\n\t\t\t$(this).addClass(\"ui-datepicker-prev-hover\");\n\t\t}\n\t\tif (this.className.indexOf(\"ui-datepicker-next\") !== -1) {\n\t\t\t$(this).addClass(\"ui-datepicker-next-hover\");\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove(target, props) {\n\t$.extend(target, props);\n\tfor (var name in props) {\n\t\tif (props[name] == null) {\n\t\t\ttarget[name] = props[name];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function(options){\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif (!$.datepicker.initialized) {\n\t\t$(document).mousedown($.datepicker._checkExternalClick);\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ($(\"#\"+$.datepicker._mainDivId).length === 0) {\n\t\t$(\"body\").append($.datepicker.dpDiv);\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\n\tif (typeof options === \"string\" && (options === \"isDisabled\" || options === \"getDate\" || options === \"widget\")) {\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\t}\n\tif (options === \"option\" && arguments.length === 2 && typeof arguments[1] === \"string\") {\n\t\treturn $.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\t}\n\treturn this.each(function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[\"_\" + options + \"Datepicker\"].\n\t\t\t\tapply($.datepicker, [this].concat(otherArgs)) :\n\t\t\t$.datepicker._attachDatepicker(this, options);\n\t});\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.11.4\";\n\nvar datepicker = $.datepicker;\n\n\n/*!\n * jQuery UI Draggable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/draggable/\n */\n\n\n$.widget(\"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif (this.options.addClasses){\n\t\t\tthis.element.addClass(\"ui-draggable\");\n\t\t}\n\t\tif (this.options.disabled){\n\t\t\tthis.element.addClass(\"ui-draggable-disabled\");\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.element.removeClass( \"ui-draggable ui-draggable-dragging ui-draggable-disabled\" );\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function(event) {\n\t\tvar o = this.options;\n\n\t\tthis._blurActiveElement( event );\n\n\t\t// among others, prevent a drag on a resizable-handle\n\t\tif (this.helper || o.disabled || $(event.target).closest(\".ui-resizable-handle\").length > 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle(event);\n\t\tif (!this.handle) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map(function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t});\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar document = this.document[ 0 ];\n\n\t\t// Only need to blur if the event occurred on the draggable itself, see #10527\n\t\tif ( !this.handleElement.is( event.target ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// support: IE9\n\t\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\t\ttry {\n\n\t\t\t// Support: IE9, IE10\n\t\t\t// If the <body> is blurred, IE will switch windows, see #9520\n\t\t\tif ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== \"body\" ) {\n\n\t\t\t\t// Blur any element that currently has focus, see #4261\n\t\t\t\t$( document.activeElement ).blur();\n\t\t\t}\n\t\t} catch ( error ) {}\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\tthis.helper.addClass(\"ui-draggable-dragging\");\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter(function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t}).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif (this._trigger(\"start\", event) === false) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t}\n\n\t\t// Reset helper's right/bottom css if they're set and set explicit width/height instead\n\t\t// as this prevents resizing of elements with right/bottom set (see #7772)\n\t\tthis._normalizeRightBottom();\n\n\t\tthis._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart(this, event);\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function(event, noPropagation) {\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif (!noPropagation) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif (this._trigger(\"drag\", event, ui) === false) {\n\t\t\t\tthis._mouseUp({});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.drag(this, event);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\n\t\t\tdropped = $.ui.ddmanager.drop(this, event);\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif (this.dropped) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ((this.options.revert === \"invalid\" && !dropped) || (this.options.revert === \"valid\" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {\n\t\t\t$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {\n\t\t\t\tif (that._trigger(\"stop\", event) !== false) {\n\t\t\t\t\tthat._clear();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this._trigger(\"stop\", event) !== false) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop(this, event);\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\t\t\t// The interaction is over; whether or not the click resulted in a drag, focus the element\n\t\t\tthis.element.focus();\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call(this, event);\n\t},\n\n\tcancel: function() {\n\n\t\tif (this.helper.is(\".ui-draggable-dragging\")) {\n\t\t\tthis._mouseUp({});\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function(event) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis.handleElement.addClass( \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis.handleElement.removeClass( \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif (!helper.parents(\"body\").length) {\n\t\t\thelper.appendTo((o.appendTo === \"parent\" ? this.element[0].parentNode : o.appendTo));\n\t\t}\n\n\t\t// http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css(\"position\"))) {\n\t\t\thelper.css(\"position\", \"absolute\");\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj === \"string\") {\n\t\t\tobj = obj.split(\" \");\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = { left: +obj[0], top: +obj[1] || 0 };\n\t\t}\n\t\tif (\"left\" in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif (\"right\" in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif (\"top\" in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif (\"bottom\" in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif (this.cssPosition === \"absolute\" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"), 10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"), 10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt(this.helper.css( \"top\" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt(this.helper.css( \"left\" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.element.css(\"marginLeft\"), 10) || 0),\n\t\t\ttop: (parseInt(this.element.css(\"marginTop\"), 10) || 0),\n\t\t\tright: (parseInt(this.element.css(\"marginRight\"), 10) || 0),\n\t\t\tbottom: (parseInt(this.element.css(\"marginBottom\"), 10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\") {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) + ( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif (!pos) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ){\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif (event.pageX - this.offset.click.left < containment[0]) {\n\t\t\t\t\tpageX = containment[0] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif (event.pageY - this.offset.click.top < containment[1]) {\n\t\t\t\t\tpageY = containment[1] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif (event.pageX - this.offset.click.left > containment[2]) {\n\t\t\t\t\tpageX = containment[2] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif (event.pageY - this.offset.click.top > containment[3]) {\n\t\t\t\t\tpageY = containment[3] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (o.grid) {\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;\n\t\t\t\tpageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tleft = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;\n\t\t\t\tpageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.top\t-\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.top -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.left -\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( this.cssPosition === \"fixed\" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis.helper.removeClass(\"ui-draggable-dragging\");\n\t\tif (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t_normalizeRightBottom: function() {\n\t\tif ( this.options.axis !== \"y\" && this.helper.css( \"right\" ) !== \"auto\" ) {\n\t\t\tthis.helper.width( this.helper.width() );\n\t\t\tthis.helper.css( \"right\", \"auto\" );\n\t\t}\n\t\tif ( this.options.axis !== \"x\" && this.helper.css( \"bottom\" ) !== \"auto\" ) {\n\t\t\tthis.helper.height( this.helper.height() );\n\t\t\tthis.helper.css( \"bottom\", \"auto\" );\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n});\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t});\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each(function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// refreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger(\"activate\", event, uiSortable);\n\t\t\t}\n\t\t});\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t});\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop(event);\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t});\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t});\n\n\t\t\t\t\t// hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif (t.css(\"cursor\")) {\n\t\t\to._cursor = t.css(\"cursor\");\n\t\t}\n\t\tt.css(\"cursor\", o.cursor);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif (o._cursor) {\n\t\t\t$(\"body\").css(\"cursor\", o._cursor);\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif (t.css(\"opacity\")) {\n\t\t\to._opacity = t.css(\"opacity\");\n\t\t}\n\t\tt.css(\"opacity\", o.opacity);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif (o._opacity) {\n\t\t\t$(ui.helper).css(\"opacity\", o._opacity);\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif (!o.axis || o.axis !== \"x\") {\n\t\t\t\tif (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\n\t\t\t\t} else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!o.axis || o.axis !== \"y\") {\n\t\t\t\tif (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\n\t\t\t\t} else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(i, event);\n\t\t}\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$(o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap).each(function() {\n\t\t\tvar $t = $(this),\n\t\t\t\t$o = $t.offset();\n\t\t\tif (this !== i.element[0]) {\n\t\t\t\ti.snapElements.push({\n\t\t\t\t\titem: this,\n\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor (i = inst.snapElements.length - 1; i >= 0; i--){\n\n\t\t\tl = inst.snapElements[i].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[i].width;\n\t\t\tt = inst.snapElements[i].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[i].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {\n\t\t\t\tif (inst.snapElements[i].snapping) {\n\t\t\t\t\t(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\t\t}\n\t\t\t\tinst.snapElements[i].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (o.snapMode !== \"inner\") {\n\t\t\t\tts = Math.abs(t - y2) <= d;\n\t\t\t\tbs = Math.abs(b - y1) <= d;\n\t\t\t\tls = Math.abs(l - x2) <= d;\n\t\t\t\trs = Math.abs(r - x1) <= d;\n\t\t\t\tif (ts) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t - inst.helperProportions.height, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (bs) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (ls) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l - inst.helperProportions.width }).left;\n\t\t\t\t}\n\t\t\t\tif (rs) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r }).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = (ts || bs || ls || rs);\n\n\t\t\tif (o.snapMode !== \"outer\") {\n\t\t\t\tts = Math.abs(t - y1) <= d;\n\t\t\t\tbs = Math.abs(b - y2) <= d;\n\t\t\t\tls = Math.abs(l - x1) <= d;\n\t\t\t\trs = Math.abs(r - x2) <= d;\n\t\t\t\tif (ts) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: t, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (bs) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo(\"relative\", { top: b - inst.helperProportions.height, left: 0 }).top;\n\t\t\t\t}\n\t\t\t\tif (ls) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l }).left;\n\t\t\t\t}\n\t\t\t\tif (rs) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r - inst.helperProportions.width }).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {\n\t\t\t\t(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\t}\n\t\t\tinst.snapElements[i].snapping = (ts || bs || ls || rs || first);\n\n\t\t}\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray($(o.stack)).sort(function(a, b) {\n\t\t\t\treturn (parseInt($(a).css(\"zIndex\"), 10) || 0) - (parseInt($(b).css(\"zIndex\"), 10) || 0);\n\t\t\t});\n\n\t\tif (!group.length) { return; }\n\n\t\tmin = parseInt($(group[0]).css(\"zIndex\"), 10) || 0;\n\t\t$(group).each(function(i) {\n\t\t\t$(this).css(\"zIndex\", min + i);\n\t\t});\n\t\tthis.css(\"zIndex\", (min + group.length));\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif (t.css(\"zIndex\")) {\n\t\t\to._zIndex = t.css(\"zIndex\");\n\t\t}\n\t\tt.css(\"zIndex\", o.zIndex);\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif (o._zIndex) {\n\t\t\t$(ui.helper).css(\"zIndex\", o._zIndex);\n\t\t}\n\t}\n});\n\nvar draggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/resizable/\n */\n\n\n$.widget(\"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseInt( value, 10 ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseInt( value, 10 ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar n, i, handle, axis, hname,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\t\tthis.element.addClass(\"ui-resizable\");\n\n\t\t$.extend(this, {\n\t\t\t_aspectRatio: !!(o.aspectRatio),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t});\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({\n\t\t\t\t\tposition: this.element.css(\"position\"),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css(\"top\"),\n\t\t\t\t\tleft: this.element.css(\"left\")\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tthis.element.css({\n\t\t\t\tmarginLeft: this.originalElement.css(\"marginLeft\"),\n\t\t\t\tmarginTop: this.originalElement.css(\"marginTop\"),\n\t\t\t\tmarginRight: this.originalElement.css(\"marginRight\"),\n\t\t\t\tmarginBottom: this.originalElement.css(\"marginBottom\")\n\t\t\t});\n\t\t\tthis.originalElement.css({\n\t\t\t\tmarginLeft: 0,\n\t\t\t\tmarginTop: 0,\n\t\t\t\tmarginRight: 0,\n\t\t\t\tmarginBottom: 0\n\t\t\t});\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css(\"resize\");\n\t\t\tthis.originalElement.css(\"resize\", \"none\");\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css({\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t}) );\n\n\t\t\t// support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css({ margin: this.originalElement.css(\"margin\") });\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis.handles = o.handles ||\n\t\t\t( !$(\".ui-resizable-handle\", this.element).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\") {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split(\",\");\n\t\t\tthis.handles = {};\n\n\t\t\tfor (i = 0; i < n.length; i++) {\n\n\t\t\t\thandle = $.trim(n[i]);\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $(\"<div class='ui-resizable-handle \" + hname + \"'></div>\");\n\n\t\t\t\taxis.css({ zIndex: o.zIndex });\n\n\t\t\t\t// TODO : What's going on here?\n\t\t\t\tif (\"se\" === handle) {\n\t\t\t\t\taxis.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\");\n\t\t\t\t}\n\n\t\t\t\tthis.handles[handle] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append(axis);\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function(target) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor (i in this.handles) {\n\n\t\t\t\tif (this.handles[i].constructor === String) {\n\t\t\t\t\tthis.handles[i] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown });\n\t\t\t\t}\n\n\t\t\t\tif (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {\n\n\t\t\t\t\taxis = $(this.handles[i], this.element);\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test(i) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test(i) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test(i) ? \"Right\" : \"Left\" ].join(\"\");\n\n\t\t\t\t\ttarget.css(padPos, padWrapper);\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis(this.element);\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.mouseover(function() {\n\t\t\tif (!that.resizing) {\n\t\t\t\tif (this.className) {\n\t\t\t\t\taxis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[1] ? axis[1] : \"se\";\n\t\t\t}\n\t\t});\n\n\t\tif (o.autoHide) {\n\t\t\tthis._handles.hide();\n\t\t\t$(this.element)\n\t\t\t\t.addClass(\"ui-resizable-autohide\")\n\t\t\t\t.mouseenter(function() {\n\t\t\t\t\tif (o.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t$(this).removeClass(\"ui-resizable-autohide\");\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t})\n\t\t\t\t.mouseleave(function() {\n\t\t\t\t\tif (o.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!that.resizing) {\n\t\t\t\t\t\t$(this).addClass(\"ui-resizable-autohide\");\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function(exp) {\n\t\t\t\t$(exp)\n\t\t\t\t\t.removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\")\n\t\t\t\t\t.removeData(\"resizable\")\n\t\t\t\t\t.removeData(\"ui-resizable\")\n\t\t\t\t\t.unbind(\".resizable\")\n\t\t\t\t\t.find(\".ui-resizable-handle\")\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif (this.elementIsWrapper) {\n\t\t\t_destroy(this.element);\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css({\n\t\t\t\tposition: wrapper.css(\"position\"),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css(\"top\"),\n\t\t\t\tleft: wrapper.css(\"left\")\n\t\t\t}).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css(\"resize\", this.originalResizeStyle);\n\t\t_destroy(this.originalElement);\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor (i in this.handles) {\n\t\t\thandle = $(this.handles[i])[0];\n\t\t\tif (handle === event.target || $.contains(handle, event.target)) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num(this.helper.css(\"left\"));\n\t\tcurtop = this._num(this.helper.css(\"top\"));\n\n\t\tif (o.containment) {\n\t\t\tcurleft += $(o.containment).scrollLeft() || 0;\n\t\t\tcurtop += $(o.containment).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = (typeof o.aspectRatio === \"number\") ?\n\t\t\to.aspectRatio :\n\t\t\t((this.originalSize.width / this.originalSize.height) || 1);\n\n\t\tcursor = $(\".ui-resizable-\" + this.axis).css(\"cursor\");\n\t\t$(\"body\").css(\"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor);\n\n\t\tel.addClass(\"ui-resizable-resizing\");\n\t\tthis._propagate(\"start\", event);\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = (event.pageX - smp.left) || 0,\n\t\t\tdy = (event.pageY - smp.top) || 0,\n\t\t\ttrigger = this._change[a];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif (!trigger) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply(this, [ event, dx, dy ]);\n\n\t\tthis._updateVirtualBoundaries(event.shiftKey);\n\t\tif (this._aspectRatio || event.shiftKey) {\n\t\t\tdata = this._updateRatio(data, event);\n\t\t}\n\n\t\tdata = this._respectSize(data, event);\n\n\t\tthis._updateCache(data);\n\n\t\tthis._propagate(\"resize\", event);\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif (this._helper) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName);\n\t\t\tsoffseth = ista && this._hasScroll(pr[0], \"left\") ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: (that.helper.width()  - soffsetw),\n\t\t\t\theight: (that.helper.height() - soffseth)\n\t\t\t};\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) +\n\t\t\t\t(that.position.left - that.originalPosition.left)) || null;\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) +\n\t\t\t\t(that.position.top - that.originalPosition.top)) || null;\n\n\t\t\tif (!o.animate) {\n\t\t\t\tthis.element.css($.extend(s, { top: top, left: left }));\n\t\t\t}\n\n\t\t\tthat.helper.height(that.size.height);\n\t\t\tthat.helper.width(that.size.width);\n\n\t\t\tif (this._helper && !o.animate) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$(\"body\").css(\"cursor\", \"auto\");\n\n\t\tthis.element.removeClass(\"ui-resizable-resizing\");\n\n\t\tthis._propagate(\"stop\", event);\n\n\t\tif (this._helper) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function(forceAspectRatio) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif (this._aspectRatio || forceAspectRatio) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif (pMinWidth > b.minWidth) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif (pMinHeight > b.minHeight) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif (pMaxWidth < b.maxWidth) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif (pMaxHeight < b.maxHeight) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function(data) {\n\t\tthis.offset = this.helper.offset();\n\t\tif (this._isNumber(data.left)) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif (this._isNumber(data.top)) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif (this._isNumber(data.height)) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif (this._isNumber(data.width)) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif (this._isNumber(data.height)) {\n\t\t\tdata.width = (data.height * this.aspectRatio);\n\t\t} else if (this._isNumber(data.width)) {\n\t\t\tdata.height = (data.width / this.aspectRatio);\n\t\t}\n\n\t\tif (a === \"sw\") {\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t\tdata.top = null;\n\t\t}\n\t\tif (a === \"nw\") {\n\t\t\tdata.top = cpos.top + (csize.height - data.height);\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),\n\t\t\tismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),\n\t\t\tisminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),\n\t\t\tisminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.position.top + this.size.height,\n\t\t\tcw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);\n\t\tif (isminw) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif (isminh) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif (ismaxw) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif (ismaxh) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif (isminw && cw) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif (ismaxw && cw) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif (isminh && ch) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif (ismaxh && ch) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif (!data.width && !data.height && !data.left && data.top) {\n\t\t\tdata.top = null;\n\t\t} else if (!data.width && !data.height && !data.top && data.left) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );\n\t\t\twidths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif (!this._proportionallyResizeElements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++) {\n\n\t\t\tprel = this._proportionallyResizeElements[i];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif (!this.outerDimensions) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css({\n\t\t\t\theight: (element.height() - this.outerDimensions.height) || 0,\n\t\t\t\twidth: (element.width() - this.outerDimensions.width) || 0\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif (this._helper) {\n\n\t\t\tthis.helper = this.helper || $(\"<div style='overflow:hidden;'></div>\");\n\n\t\t\tthis.helper.addClass(this._helper).css({\n\t\t\t\twidth: this.element.outerWidth() - 1,\n\t\t\t\theight: this.element.outerHeight() - 1,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t});\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo(\"body\")\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function(event, dx) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function(event, dx) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function(event, dx, dy) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function(event, dx, dy) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments),\n\t\t\t\tthis._change.e.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tsw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments),\n\t\t\t\tthis._change.w.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tne: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments),\n\t\t\t\tthis._change.e.apply(this, [ event, dx, dy ]));\n\t\t},\n\t\tnw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments),\n\t\t\t\tthis._change.w.apply(this, [ event, dx, dy ]));\n\t\t}\n\t},\n\n\t_propagate: function(n, event) {\n\t\t$.ui.plugin.call(this, n, [ event, this.ui() ]);\n\t\t(n !== \"resize\" && this._trigger(n, event, this.ui()));\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n});\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add(\"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && (/textarea/i).test(pr[0].nodeName),\n\t\t\tsoffseth = ista && that._hasScroll(pr[0], \"left\") ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },\n\t\t\tleft = (parseInt(that.element.css(\"left\"), 10) +\n\t\t\t\t(that.position.left - that.originalPosition.left)) || null,\n\t\t\ttop = (parseInt(that.element.css(\"top\"), 10) +\n\t\t\t\t(that.position.top - that.originalPosition.top)) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend(style, top && left ? { top: top, left: left } : {}), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseInt(that.element.css(\"width\"), 10),\n\t\t\t\t\t\theight: parseInt(that.element.css(\"height\"), 10),\n\t\t\t\t\t\ttop: parseInt(that.element.css(\"top\"), 10),\n\t\t\t\t\t\tleft: parseInt(that.element.css(\"left\"), 10)\n\t\t\t\t\t};\n\n\t\t\t\t\tif (pr && pr.length) {\n\t\t\t\t\t\t$(pr[0]).css({ width: data.width, height: data.height });\n\t\t\t\t\t}\n\n\t\t\t\t\t// propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache(data);\n\t\t\t\t\tthat._propagate(\"resize\", event);\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n});\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$([ \"Top\", \"Right\", \"Left\", \"Bottom\" ]).each(function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t});\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t(that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t(that.offset.left - co.left)) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t(that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t(that.offset.top - co.top)) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css({\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css({\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t});\n\t\t}\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$(o.alsoResize).each(function() {\n\t\t\tvar el = $(this);\n\t\t\tel.data(\"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseInt(el.width(), 10), height: parseInt(el.height(), 10),\n\t\t\t\tleft: parseInt(el.css(\"left\"), 10), top: parseInt(el.css(\"top\"), 10)\n\t\t\t});\n\t\t});\n\t},\n\n\tresize: function(event, ui) {\n\t\tvar that = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: (that.size.height - os.height) || 0,\n\t\t\t\twidth: (that.size.width - os.width) || 0,\n\t\t\t\ttop: (that.position.top - op.top) || 0,\n\t\t\t\tleft: (that.position.left - op.left) || 0\n\t\t\t};\n\n\t\t\t$(o.alsoResize).each(function() {\n\t\t\t\tvar el = $(this), start = $(this).data(\"ui-resizable-alsoresize\"), style = {},\n\t\t\t\t\tcss = el.parents(ui.originalElement[0]).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each(css, function(i, prop) {\n\t\t\t\t\tvar sum = (start[prop] || 0) + (delta[prop] || 0);\n\t\t\t\t\tif (sum && sum >= 0) {\n\t\t\t\t\t\tstyle[prop] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tel.css(style);\n\t\t\t});\n\t},\n\n\tstop: function() {\n\t\t$(this).removeData(\"resizable-alsoresize\");\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $(this).resizable( \"instance\" ), o = that.options, cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost\n\t\t\t.css({\n\t\t\t\topacity: 0.25,\n\t\t\t\tdisplay: \"block\",\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: cs.height,\n\t\t\t\twidth: cs.width,\n\t\t\t\tmargin: 0,\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t})\n\t\t\t.addClass(\"ui-resizable-ghost\")\n\t\t\t.addClass(typeof o.ghost === \"string\" ? o.ghost : \"\");\n\n\t\tthat.ghost.appendTo(that.helper);\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $(this).resizable( \"instance\" );\n\t\tif (that.ghost) {\n\t\t\tthat.ghost.css({\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t});\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $(this).resizable( \"instance\" );\n\t\tif (that.ghost && that.helper) {\n\t\t\tthat.helper.get(0).removeChild(that.ghost.get(0));\n\t\t}\n\t}\n\n});\n\n$.ui.plugin.add(\"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $(this).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = (grid[0] || 1),\n\t\t\tgridY = (grid[1] || 1),\n\t\t\tox = Math.round((cs.width - os.width) / gridX) * gridX,\n\t\t\toy = Math.round((cs.height - os.height) / gridY) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && (o.maxWidth < newWidth),\n\t\t\tisMaxHeight = o.maxHeight && (o.maxHeight < newHeight),\n\t\t\tisMinWidth = o.minWidth && (o.minWidth > newWidth),\n\t\t\tisMinHeight = o.minHeight && (o.minHeight > newHeight);\n\n\t\to.grid = grid;\n\n\t\tif (isMinWidth) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif (isMinHeight) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif (isMaxWidth) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif (isMaxHeight) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif (/^(se|s|e)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if (/^(ne)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if (/^(sw)$/.test(a)) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nvar resizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/dialog/\n */\n\n\nvar dialog = $.widget( \"ui.dialog\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdialogClass: \"\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tthis.options.title = this.options.title || this.originalTitle;\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.addClass( \"ui-dialog-content ui-widget-content\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && (element.jquery || element.nodeType) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.removeClass( \"ui-dialog-content ui-widget-content\" )\n\t\t\t.css( this.originalCss )\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.stop( true, true ).remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar activeElement,\n\t\t\tthat = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).focus().length ) {\n\n\t\t\t// support: IE9\n\t\t\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\t\t\ttry {\n\t\t\t\tactiveElement = this.document[ 0 ].activeElement;\n\n\t\t\t\t// Support: IE9, IE10\n\t\t\t\t// If the <body> is blurred, IE will switch windows, see #4520\n\t\t\t\tif ( activeElement && activeElement.nodeName.toLowerCase() !== \"body\" ) {\n\n\t\t\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t\t\t$( activeElement ).blur();\n\t\t\t\t}\n\t\t\t} catch ( error ) {}\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t});\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map(function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t}).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( this.document[ 0 ].activeElement );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t});\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).focus();\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = this.document[0].activeElement,\n\t\t\t\tisActive = this.uiDialog[0] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[0], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $(\"<div>\")\n\t\t\t.addClass( \"ui-dialog ui-widget ui-widget-content ui-corner-all ui-front \" +\n\t\t\t\tthis.options.dialogClass )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t})\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.filter( \":first\" ),\n\t\t\t\t\tlast = tabbables.filter( \":last\" );\n\n\t\t\t\tif ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tfirst.focus();\n\t\t\t\t\t});\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tlast.focus();\n\t\t\t\t\t});\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr({\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t});\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix\" )\n\t\t\t.prependTo( this.uiDialog );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button({\n\t\t\t\tlabel: this.options.closeText,\n\t\t\t\ticons: {\n\t\t\t\t\tprimary: \"ui-icon-closethick\"\n\t\t\t\t},\n\t\t\t\ttext: false\n\t\t\t})\n\t\t\t.addClass( \"ui-dialog-titlebar-close\" )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t});\n\n\t\tuiDialogTitle = $( \"<span>\" )\n\t\t\t.uniqueId()\n\t\t\t.addClass( \"ui-dialog-title\" )\n\t\t\t.prependTo( this.uiDialogTitlebar );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialog.attr({\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t});\n\t},\n\n\t_title: function( title ) {\n\t\tif ( !this.options.title ) {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t\ttitle.text( this.options.title );\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.addClass( \"ui-dialog-buttonset\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// if we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {\n\t\t\tthis.uiDialog.removeClass( \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tprops.click = function() {\n\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t};\n\t\t\tbuttonOptions = {\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.showText\n\t\t\t};\n\t\t\tdelete props.icons;\n\t\t\tdelete props.showText;\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet );\n\t\t});\n\t\tthis.uiDialog.addClass( \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable({\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\t$( this ).addClass( \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + (left >= 0 ? \"+\" : \"\") + left + \" \" +\n\t\t\t\t\t\t\"top\" + (top >= 0 ? \"+\" : \"\") + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\t$( this ).removeClass( \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t});\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css(\"position\"),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles\t:\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable({\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\t$( this ).addClass( \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + (left >= 0 ? \"+\" : \"\") + left + \" \" +\n\t\t\t\t\t\t\"top\" + (top >= 0 ? \"+\" : \"\") + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\t$( this ).removeClass( \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t})\n\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t});\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t});\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"dialogClass\" ) {\n\t\t\tuiDialog\n\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t.addClass( value );\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button({\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: \"\" + value\n\t\t\t});\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css({\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t});\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css({\n\t\t\t\theight: \"auto\",\n\t\t\t\twidth: options.width\n\t\t\t})\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css({\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map(function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t})\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[0];\n\t\t});\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay(function() {\n\t\t\tisOpening = false;\n\t\t});\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.addClass( \"ui-widget-overlay ui-front\" )\n\t\t\t.appendTo( this._appendTo() );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t});\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t(this.document.data( \"ui-dialog-overlays\" ) || 0) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document\n\t\t\t\t\t.unbind( \"focusin\" )\n\t\t\t\t\t.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Droppable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/droppable/\n */\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\tactiveClass: false,\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\thoverClass: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this.element.addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\n\t\tthis.element.removeClass( \"ui-droppable ui-droppable-disabled\" );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif ( this.options.activeClass ) {\n\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t}\n\t\tif ( draggable ){\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif ( this.options.activeClass ) {\n\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t}\n\t\tif ( draggable ){\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element.find( \":data(ui-droppable)\" ).not( \".ui-draggable-dragging\" ).each(function() {\n\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\tif (\n\t\t\t\tinst.options.greedy &&\n\t\t\t\t!inst.options.disabled &&\n\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\tinst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&\n\t\t\t\t$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )\n\t\t\t) { childrenIntersection = true; return false; }\n\t\t});\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t}\n\n});\n\n$.ui.intersect = (function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n})();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t});\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).bind( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t});\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ? \"isout\" : ( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter(function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t});\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[c === \"isout\" ? \"isover\" : \"isout\"] = false;\n\t\t\tthis[c === \"isover\" ? \"_over\" : \"_out\"].call( this, event );\n\n\t\t\t// we just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t});\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).unbind( \"scroll.droppable\" );\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\nvar droppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Effects 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/effects-core/\n */\n\n\nvar dataSpace = \"ui-effects-\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n(function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n});\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn (allowEmpty || !prop.def) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn (value + type.mod) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t});\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif (isCache) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn same;\n\t\t});\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t});\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t});\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t}));\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t});\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t});\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t}).join(\"\");\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n});\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round(h) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t});\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t});\n});\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t(backgroundColor === \"\" || backgroundColor === \"transparent\") &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t});\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t});\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n})( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n(function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each([ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ], function( _, prop ) {\n\t$.fx.step[ prop ] = function( fx ) {\n\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\tfx.setAttr = true;\n\t\t}\n\t};\n});\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\t// support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t});\n\n\t\t// apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function(i, action) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t});\n\n\t\t// apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map(function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend({}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t});\n\n\t\t// once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done(function() {\n\n\t\t\t// set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// for each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function(key) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// this is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t});\n\t});\n};\n\n$.fn.extend({\n\taddClass: (function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.addClass ),\n\n\tremoveClass: (function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t})( $.fn.removeClass ),\n\n\ttoggleClass: (function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\t\t\t\t\t// without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t(force ? { add: classNames } : { remove: classNames }),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t})( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n});\n\n})();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n(function() {\n\n$.extend( $.effects, {\n\tversion: \"1.11.4\",\n\n\t// Saves a set of properties in a data storage\n\tsave: function( element, set ) {\n\t\tfor ( var i = 0; i < set.length; i++ ) {\n\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Restores a set of previously saved properties from a data storage\n\trestore: function( element, set ) {\n\t\tvar val, i;\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t// support: jQuery 1.6.2\n\t\t\t\t// http://bugs.jquery.com/ticket/9917\n\t\t\t\t// jQuery 1.6.2 incorrectly returns undefined for any falsy value.\n\t\t\t\t// We can't differentiate between \"\" and 0 here, so we just assume\n\t\t\t\t// empty string since it's likely to be a more common value...\n\t\t\t\tif ( val === undefined ) {\n\t\t\t\t\tval = \"\";\n\t\t\t\t}\n\t\t\t\telement.css( set[ i ], val );\n\t\t\t}\n\t\t}\n\t},\n\n\tsetMode: function( el, mode ) {\n\t\tif (mode === \"toggle\") {\n\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\t// this should be a little more flexible in the future to handle a string & hash\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\t\tswitch ( origin[ 0 ] ) {\n\t\t\tcase \"top\": y = 0; break;\n\t\t\tcase \"middle\": y = 0.5; break;\n\t\t\tcase \"bottom\": y = 1; break;\n\t\t\tdefault: y = origin[ 0 ] / original.height;\n\t\t}\n\t\tswitch ( origin[ 1 ] ) {\n\t\t\tcase \"left\": x = 0; break;\n\t\t\tcase \"center\": x = 0.5; break;\n\t\t\tcase \"right\": x = 1; break;\n\t\t\tdefault: x = origin[ 1 ] / original.width;\n\t\t}\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Wraps the element around a wrapper that copies position properties\n\tcreateWrapper: function( element ) {\n\n\t\t// if the element is already wrapped, return it\n\t\tif ( element.parent().is( \".ui-effects-wrapper\" )) {\n\t\t\treturn element.parent();\n\t\t}\n\n\t\t// wrap the element\n\t\tvar props = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t},\n\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t.css({\n\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\tborder: \"none\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0\n\t\t\t\t}),\n\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\tsize = {\n\t\t\t\twidth: element.width(),\n\t\t\t\theight: element.height()\n\t\t\t},\n\t\t\tactive = document.activeElement;\n\n\t\t// support: Firefox\n\t\t// Firefox incorrectly exposes anonymous content\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\ttry {\n\t\t\tactive.id;\n\t\t} catch ( e ) {\n\t\t\tactive = document.body;\n\t\t}\n\n\t\telement.wrap( wrapper );\n\n\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t$( active ).focus();\n\t\t}\n\n\t\twrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element\n\n\t\t// transfer positioning properties to the wrapper\n\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\twrapper.css({ position: \"relative\" });\n\t\t\telement.css({ position: \"relative\" });\n\t\t} else {\n\t\t\t$.extend( props, {\n\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t});\n\t\t\t$.each([ \"top\", \"left\", \"bottom\", \"right\" ], function(i, pos) {\n\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t}\n\t\t\t});\n\t\t\telement.css({\n\t\t\t\tposition: \"relative\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: \"auto\",\n\t\t\t\tbottom: \"auto\"\n\t\t\t});\n\t\t}\n\t\telement.css(size);\n\n\t\treturn wrapper.css( props ).show();\n\t},\n\n\tremoveWrapper: function( element ) {\n\t\tvar active = document.activeElement;\n\n\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\telement.parent().replaceWith( element );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).focus();\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t});\n\t\treturn value;\n\t}\n});\n\n// return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// convert to an object\n\teffect = { effect: effect };\n\n\t// catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend({\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\tmode = args.mode,\n\t\t\tqueue = args.queue,\n\t\t\teffectMethod = $.effects.effect[ args.effect ];\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\t\t\t// delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, args.complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( args.complete ) {\n\t\t\t\t\t\targs.complete.call( this );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this ),\n\t\t\t\tcomplete = args.complete,\n\t\t\t\tmode = args.mode;\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[0] );\n\t\t\t\t}\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the element already has the correct final state, delegate to\n\t\t\t// the core methods so the internal tracking of \"olddisplay\" works.\n\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\t\telem[ mode ]();\n\t\t\t\tdone();\n\t\t\t} else {\n\t\t\t\teffectMethod.call( elem[0], args, done );\n\t\t\t}\n\t\t}\n\n\t\treturn queue === false ? this.each( run ) : this.queue( queue || \"fx\", run );\n\t},\n\n\tshow: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.show ),\n\n\thide: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.hide ),\n\n\ttoggle: (function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t})( $.fn.toggle ),\n\n\t// helper functions\n\tcssUnit: function(key) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t});\n\t\treturn val;\n\t}\n});\n\n})();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n(function() {\n\n// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n});\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n});\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n});\n\n})();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/blind-effect/\n */\n\n\nvar effectBlind = $.effects.effect.blind = function( o, done ) {\n\t// Create element\n\tvar el = $( this ),\n\t\trvertical = /up|down|vertical/,\n\t\trpositivemotion = /up|left|vertical|horizontal/,\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tdirection = o.direction || \"up\",\n\t\tvertical = rvertical.test( direction ),\n\t\tref = vertical ? \"height\" : \"width\",\n\t\tref2 = vertical ? \"top\" : \"left\",\n\t\tmotion = rpositivemotion.test( direction ),\n\t\tanimation = {},\n\t\tshow = mode === \"show\",\n\t\twrapper, distance, margin;\n\n\t// if already wrapped, the wrapper's properties are my property. #6245\n\tif ( el.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t$.effects.save( el.parent(), props );\n\t} else {\n\t\t$.effects.save( el, props );\n\t}\n\tel.show();\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\n\tdistance = wrapper[ ref ]();\n\tmargin = parseFloat( wrapper.css( ref2 ) ) || 0;\n\n\tanimation[ ref ] = show ? distance : 0;\n\tif ( !motion ) {\n\t\tel\n\t\t\t.css( vertical ? \"bottom\" : \"right\", 0 )\n\t\t\t.css( vertical ? \"top\" : \"left\", \"auto\" )\n\t\t\t.css({ position: \"absolute\" });\n\n\t\tanimation[ ref2 ] = show ? margin : distance + margin;\n\t}\n\n\t// start at 0 if we are showing\n\tif ( show ) {\n\t\twrapper.css( ref, 0 );\n\t\tif ( !motion ) {\n\t\t\twrapper.css( ref2, margin + distance );\n\t\t}\n\t}\n\n\t// Animate\n\twrapper.animate( animation, {\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tqueue: false,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Bounce 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/bounce-effect/\n */\n\n\nvar effectBounce = $.effects.effect.bounce = function( o, done ) {\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\n\t\t// defaults:\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"up\",\n\t\tdistance = o.distance,\n\t\ttimes = o.times || 5,\n\n\t\t// number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = o.duration / anims,\n\t\teasing = o.easing,\n\n\t\t// utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti,\n\t\tupAnim,\n\t\tdownAnim,\n\n\t\t// we will need to re-assemble the queue to stack our animations in place\n\t\tqueue = el.queue(),\n\t\tqueuelen = queue.length;\n\n\t// Avoid touching opacity to prevent clearType and PNG issues in IE\n\tif ( show || hide ) {\n\t\tprops.push( \"opacity\" );\n\t}\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el ); // Create Wrapper\n\n\t// default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = 0;\n\n\t\t// if we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\tel.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = 0;\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( i = 0; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\tel.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\tel.animate( upAnim, speed, easing );\n\t}\n\n\tel.queue(function() {\n\t\tif ( hide ) {\n\t\t\tel.hide();\n\t\t}\n\t\t$.effects.restore( el, props );\n\t\t$.effects.removeWrapper( el );\n\t\tdone();\n\t});\n\n\t// inject all the animations we just queued to be first in line (after \"inprogress\")\n\tif ( queuelen > 1) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\tel.dequeue();\n\n};\n\n\n/*!\n * jQuery UI Effects Clip 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/clip-effect/\n */\n\n\nvar effectClip = $.effects.effect.clip = function( o, done ) {\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"vertical\",\n\t\tvert = direction === \"vertical\",\n\t\tsize = vert ? \"height\" : \"width\",\n\t\tposition = vert ? \"top\" : \"left\",\n\t\tanimation = {},\n\t\twrapper, animate, distance;\n\n\t// Save & Show\n\t$.effects.save( el, props );\n\tel.show();\n\n\t// Create Wrapper\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\tanimate = ( el[0].tagName === \"IMG\" ) ? wrapper : el;\n\tdistance = animate[ size ]();\n\n\t// Shift\n\tif ( show ) {\n\t\tanimate.css( size, 0 );\n\t\tanimate.css( position, distance / 2 );\n\t}\n\n\t// Create Animation Object:\n\tanimation[ size ] = show ? distance : 0;\n\tanimation[ position ] = show ? 0 : distance / 2;\n\n\t// Animate\n\tanimate.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( !show ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Drop 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/drop-effect/\n */\n\n\nvar effectDrop = $.effects.effect.drop = function( o, done ) {\n\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"opacity\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"pos\" : \"neg\",\n\t\tanimation = {\n\t\t\topacity: show ? 1 : 0\n\t\t},\n\t\tdistance;\n\n\t// Adjust\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\n\tdistance = o.distance || el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tif ( show ) {\n\t\tel\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion === \"pos\" ? -distance : distance );\n\t}\n\n\t// Animation\n\tanimation[ ref ] = ( show ?\n\t\t( motion === \"pos\" ? \"+=\" : \"-=\" ) :\n\t\t( motion === \"pos\" ? \"-=\" : \"+=\" ) ) +\n\t\tdistance;\n\n\t// Animate\n\tel.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Explode 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/explode-effect/\n */\n\n\nvar effectExplode = $.effects.effect.explode = function( o, done ) {\n\n\tvar rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,\n\t\tcells = rows,\n\t\tel = $( this ),\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\n\t\t// show and then visibility:hidden the element before calculating offset\n\t\toffset = el.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// width and height of a piece\n\t\twidth = Math.ceil( el.outerWidth() / cells ),\n\t\theight = Math.ceil( el.outerHeight() / rows ),\n\t\tpieces = [],\n\n\t\t// loop\n\t\ti, j, left, top, mx, my;\n\n\t// children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// clone the element for each row and cell.\n\tfor ( i = 0; i < rows ; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2 ;\n\n\t\tfor ( j = 0; j < cells ; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2 ;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\tel\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t})\n\n\t\t\t// select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t}).animate({\n\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t}, o.duration || 500, o.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\tel.css({\n\t\t\tvisibility: \"visible\"\n\t\t});\n\t\t$( pieces ).remove();\n\t\tif ( !show ) {\n\t\t\tel.hide();\n\t\t}\n\t\tdone();\n\t}\n};\n\n\n/*!\n * jQuery UI Effects Fade 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/fade-effect/\n */\n\n\nvar effectFade = $.effects.effect.fade = function( o, done ) {\n\tvar el = $( this ),\n\t\tmode = $.effects.setMode( el, o.mode || \"toggle\" );\n\n\tel.animate({\n\t\topacity: mode\n\t}, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: done\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Fold 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/fold-effect/\n */\n\n\nvar effectFold = $.effects.effect.fold = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"hide\" ),\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = o.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!o.horizFirst,\n\t\twidthFirst = show !== horizFirst,\n\t\tref = widthFirst ? [ \"width\", \"height\" ] : [ \"height\", \"width\" ],\n\t\tduration = o.duration / 2,\n\t\twrapper, distance,\n\t\tanimation1 = {},\n\t\tanimation2 = {};\n\n\t$.effects.save( el, props );\n\tel.show();\n\n\t// Create Wrapper\n\twrapper = $.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\tdistance = widthFirst ?\n\t\t[ wrapper.width(), wrapper.height() ] :\n\t\t[ wrapper.height(), wrapper.width() ];\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tif ( show ) {\n\t\twrapper.css( horizFirst ? {\n\t\t\theight: 0,\n\t\t\twidth: size\n\t\t} : {\n\t\t\theight: size,\n\t\t\twidth: 0\n\t\t});\n\t}\n\n\t// Animation\n\tanimation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;\n\tanimation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;\n\n\t// Animate\n\twrapper\n\t\t.animate( animation1, duration, o.easing )\n\t\t.animate( animation2, duration, o.easing, function() {\n\t\t\tif ( hide ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Highlight 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/highlight-effect/\n */\n\n\nvar effectHighlight = $.effects.effect.highlight = function( o, done ) {\n\tvar elem = $( this ),\n\t\tprops = [ \"backgroundImage\", \"backgroundColor\", \"opacity\" ],\n\t\tmode = $.effects.setMode( elem, o.mode || \"show\" ),\n\t\tanimation = {\n\t\t\tbackgroundColor: elem.css( \"backgroundColor\" )\n\t\t};\n\n\tif (mode === \"hide\") {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.save( elem, props );\n\n\telem\n\t\t.show()\n\t\t.css({\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: o.color || \"#ffff99\"\n\t\t})\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: o.duration,\n\t\t\teasing: o.easing,\n\t\t\tcomplete: function() {\n\t\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\t\t\t\t$.effects.restore( elem, props );\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n};\n\n\n/*!\n * jQuery UI Effects Size 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/size-effect/\n */\n\n\nvar effectSize = $.effects.effect.size = function( o, done ) {\n\n\t// Create element\n\tvar original, baseline, factor,\n\t\tel = $( this ),\n\t\tprops0 = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"width\", \"height\", \"overflow\", \"opacity\" ],\n\n\t\t// Always restore\n\t\tprops1 = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"overflow\", \"opacity\" ],\n\n\t\t// Copy for children\n\t\tprops2 = [ \"width\", \"height\", \"overflow\" ],\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\trestore = o.restore || mode !== \"effect\",\n\t\tscale = o.scale || \"both\",\n\t\torigin = o.origin || [ \"middle\", \"center\" ],\n\t\tposition = el.css( \"position\" ),\n\t\tprops = restore ? props0 : props1,\n\t\tzero = {\n\t\t\theight: 0,\n\t\t\twidth: 0,\n\t\t\touterHeight: 0,\n\t\t\touterWidth: 0\n\t\t};\n\n\tif ( mode === \"show\" ) {\n\t\tel.show();\n\t}\n\toriginal = {\n\t\theight: el.height(),\n\t\twidth: el.width(),\n\t\touterHeight: el.outerHeight(),\n\t\touterWidth: el.outerWidth()\n\t};\n\n\tif ( o.mode === \"toggle\" && mode === \"show\" ) {\n\t\tel.from = o.to || zero;\n\t\tel.to = o.from || original;\n\t} else {\n\t\tel.from = o.from || ( mode === \"show\" ? zero : original );\n\t\tel.to = o.to || ( mode === \"hide\" ? zero : original );\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: el.from.height / original.height,\n\t\t\tx: el.from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: el.to.height / original.height,\n\t\t\tx: el.to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tprops = props.concat( vProps );\n\t\t\tel.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );\n\t\t\tel.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tprops = props.concat( hProps );\n\t\t\tel.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );\n\t\t\tel.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tprops = props.concat( cProps ).concat( props2 );\n\t\t\tel.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );\n\t\t\tel.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );\n\t\t}\n\t}\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\tel.css( \"overflow\", \"hidden\" ).css( el.from );\n\n\t// Adjust\n\tif (origin) { // Calculate baseline shifts\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tel.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;\n\t\tel.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;\n\t\tel.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;\n\t\tel.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;\n\t}\n\tel.css( el.from ); // set top & left\n\n\t// Animate\n\tif ( scale === \"content\" || scale === \"both\" ) { // Scale the children\n\n\t\t// Add margins/font-size\n\t\tvProps = vProps.concat([ \"marginTop\", \"marginBottom\" ]).concat(cProps);\n\t\thProps = hProps.concat([ \"marginLeft\", \"marginRight\" ]);\n\t\tprops2 = props0.concat(vProps).concat(hProps);\n\n\t\tel.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tc_original = {\n\t\t\t\t\theight: child.height(),\n\t\t\t\t\twidth: child.width(),\n\t\t\t\t\touterHeight: child.outerHeight(),\n\t\t\t\t\touterWidth: child.outerWidth()\n\t\t\t\t};\n\t\t\tif (restore) {\n\t\t\t\t$.effects.save(child, props2);\n\t\t\t}\n\n\t\t\tchild.from = {\n\t\t\t\theight: c_original.height * factor.from.y,\n\t\t\t\twidth: c_original.width * factor.from.x,\n\t\t\t\touterHeight: c_original.outerHeight * factor.from.y,\n\t\t\t\touterWidth: c_original.outerWidth * factor.from.x\n\t\t\t};\n\t\t\tchild.to = {\n\t\t\t\theight: c_original.height * factor.to.y,\n\t\t\t\twidth: c_original.width * factor.to.x,\n\t\t\t\touterHeight: c_original.height * factor.to.y,\n\t\t\t\touterWidth: c_original.width * factor.to.x\n\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchild.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );\n\t\t\t\tchild.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchild.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );\n\t\t\t\tchild.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( child.from );\n\t\t\tchild.animate( child.to, o.duration, o.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restore( child, props2 );\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Animate\n\tel.animate( el.to, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( el.to.opacity === 0 ) {\n\t\t\t\tel.css( \"opacity\", el.from.opacity );\n\t\t\t}\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\tif ( !restore ) {\n\n\t\t\t\t// we need to calculate our new positioning based on the scaling\n\t\t\t\tif ( position === \"static\" ) {\n\t\t\t\t\tel.css({\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\ttop: el.to.top,\n\t\t\t\t\t\tleft: el.to.left\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t$.each([ \"top\", \"left\" ], function( idx, pos ) {\n\t\t\t\t\t\tel.css( pos, function( _, str ) {\n\t\t\t\t\t\t\tvar val = parseInt( str, 10 ),\n\t\t\t\t\t\t\t\ttoRef = idx ? el.to.left : el.to.top;\n\n\t\t\t\t\t\t\t// if original was \"auto\", recalculate the new value from wrapper\n\t\t\t\t\t\t\tif ( str === \"auto\" ) {\n\t\t\t\t\t\t\t\treturn toRef + \"px\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn val + toRef + \"px\";\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n\n};\n\n\n/*!\n * jQuery UI Effects Scale 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/scale-effect/\n */\n\n\nvar effectScale = $.effects.effect.scale = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\toptions = $.extend( true, {}, o ),\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\tpercent = parseInt( o.percent, 10 ) ||\n\t\t\t( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === \"hide\" ? 0 : 100 ) ),\n\t\tdirection = o.direction || \"both\",\n\t\torigin = o.origin,\n\t\toriginal = {\n\t\t\theight: el.height(),\n\t\t\twidth: el.width(),\n\t\t\touterHeight: el.outerHeight(),\n\t\t\touterWidth: el.outerWidth()\n\t\t},\n\t\tfactor = {\n\t\t\ty: direction !== \"horizontal\" ? (percent / 100) : 1,\n\t\t\tx: direction !== \"vertical\" ? (percent / 100) : 1\n\t\t};\n\n\t// We are going to pass this effect to the size effect:\n\toptions.effect = \"size\";\n\toptions.queue = false;\n\toptions.complete = done;\n\n\t// Set default origin and restore for show/hide\n\tif ( mode !== \"effect\" ) {\n\t\toptions.origin = origin || [ \"middle\", \"center\" ];\n\t\toptions.restore = true;\n\t}\n\n\toptions.from = o.from || ( mode === \"show\" ? {\n\t\theight: 0,\n\t\twidth: 0,\n\t\touterHeight: 0,\n\t\touterWidth: 0\n\t} : original );\n\toptions.to = {\n\t\theight: original.height * factor.y,\n\t\twidth: original.width * factor.x,\n\t\touterHeight: original.outerHeight * factor.y,\n\t\touterWidth: original.outerWidth * factor.x\n\t};\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tif ( mode === \"show\" ) {\n\t\t\toptions.from.opacity = 0;\n\t\t\toptions.to.opacity = 1;\n\t\t}\n\t\tif ( mode === \"hide\" ) {\n\t\t\toptions.from.opacity = 1;\n\t\t\toptions.to.opacity = 0;\n\t\t}\n\t}\n\n\t// Animate\n\tel.effect( options );\n\n};\n\n\n/*!\n * jQuery UI Effects Puff 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/puff-effect/\n */\n\n\nvar effectPuff = $.effects.effect.puff = function( o, done ) {\n\tvar elem = $( this ),\n\t\tmode = $.effects.setMode( elem, o.mode || \"hide\" ),\n\t\thide = mode === \"hide\",\n\t\tpercent = parseInt( o.percent, 10 ) || 150,\n\t\tfactor = percent / 100,\n\t\toriginal = {\n\t\t\theight: elem.height(),\n\t\t\twidth: elem.width(),\n\t\t\touterHeight: elem.outerHeight(),\n\t\t\touterWidth: elem.outerWidth()\n\t\t};\n\n\t$.extend( o, {\n\t\teffect: \"scale\",\n\t\tqueue: false,\n\t\tfade: true,\n\t\tmode: mode,\n\t\tcomplete: done,\n\t\tpercent: hide ? percent : 100,\n\t\tfrom: hide ?\n\t\t\toriginal :\n\t\t\t{\n\t\t\t\theight: original.height * factor,\n\t\t\t\twidth: original.width * factor,\n\t\t\t\touterHeight: original.outerHeight * factor,\n\t\t\t\touterWidth: original.outerWidth * factor\n\t\t\t}\n\t});\n\n\telem.effect( o );\n};\n\n\n/*!\n * jQuery UI Effects Pulsate 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/pulsate-effect/\n */\n\n\nvar effectPulsate = $.effects.effect.pulsate = function( o, done ) {\n\tvar elem = $( this ),\n\t\tmode = $.effects.setMode( elem, o.mode || \"show\" ),\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = ( show || mode === \"hide\" ),\n\n\t\t// showing or hiding leaves of the \"last\" animation\n\t\tanims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = o.duration / anims,\n\t\tanimateTo = 0,\n\t\tqueue = elem.queue(),\n\t\tqueuelen = queue.length,\n\t\ti;\n\n\tif ( show || !elem.is(\":visible\")) {\n\t\telem.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// anims - 1 opacity \"toggles\"\n\tfor ( i = 1; i < anims; i++ ) {\n\t\telem.animate({\n\t\t\topacity: animateTo\n\t\t}, duration, o.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telem.animate({\n\t\topacity: animateTo\n\t}, duration, o.easing);\n\n\telem.queue(function() {\n\t\tif ( hide ) {\n\t\t\telem.hide();\n\t\t}\n\t\tdone();\n\t});\n\n\t// We just queued up \"anims\" animations, we need to put them next in the queue\n\tif ( queuelen > 1 ) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\telem.dequeue();\n};\n\n\n/*!\n * jQuery UI Effects Shake 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/shake-effect/\n */\n\n\nvar effectShake = $.effects.effect.shake = function( o, done ) {\n\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"height\", \"width\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"effect\" ),\n\t\tdirection = o.direction || \"left\",\n\t\tdistance = o.distance || 20,\n\t\ttimes = o.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( o.duration / anims ),\n\t\tref = (direction === \"up\" || direction === \"down\") ? \"top\" : \"left\",\n\t\tpositiveMotion = (direction === \"up\" || direction === \"left\"),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\t\ti,\n\n\t\t// we will need to re-assemble the queue to stack our animations in place\n\t\tqueue = el.queue(),\n\t\tqueuelen = queue.length;\n\n\t$.effects.save( el, props );\n\tel.show();\n\t$.effects.createWrapper( el );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\tel.animate( animation, speed, o.easing );\n\n\t// Shakes\n\tfor ( i = 1; i < times; i++ ) {\n\t\tel.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );\n\t}\n\tel\n\t\t.animate( animation1, speed, o.easing )\n\t\t.animate( animation, speed / 2, o.easing )\n\t\t.queue(function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t});\n\n\t// inject all the animations we just queued to be first in line (after \"inprogress\")\n\tif ( queuelen > 1) {\n\t\tqueue.splice.apply( queue,\n\t\t\t[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );\n\t}\n\tel.dequeue();\n\n};\n\n\n/*!\n * jQuery UI Effects Slide 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slide-effect/\n */\n\n\nvar effectSlide = $.effects.effect.slide = function( o, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tprops = [ \"position\", \"top\", \"bottom\", \"left\", \"right\", \"width\", \"height\" ],\n\t\tmode = $.effects.setMode( el, o.mode || \"show\" ),\n\t\tshow = mode === \"show\",\n\t\tdirection = o.direction || \"left\",\n\t\tref = (direction === \"up\" || direction === \"down\") ? \"top\" : \"left\",\n\t\tpositiveMotion = (direction === \"up\" || direction === \"left\"),\n\t\tdistance,\n\t\tanimation = {};\n\n\t// Adjust\n\t$.effects.save( el, props );\n\tel.show();\n\tdistance = o.distance || el[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true );\n\n\t$.effects.createWrapper( el ).css({\n\t\toverflow: \"hidden\"\n\t});\n\n\tif ( show ) {\n\t\tel.css( ref, positiveMotion ? (isNaN(distance) ? \"-\" + distance : -distance) : distance );\n\t}\n\n\t// Animation\n\tanimation[ ref ] = ( show ?\n\t\t( positiveMotion ? \"+=\" : \"-=\") :\n\t\t( positiveMotion ? \"-=\" : \"+=\")) +\n\t\tdistance;\n\n\t// Animate\n\tel.animate( animation, {\n\t\tqueue: false,\n\t\tduration: o.duration,\n\t\teasing: o.easing,\n\t\tcomplete: function() {\n\t\t\tif ( mode === \"hide\" ) {\n\t\t\t\tel.hide();\n\t\t\t}\n\t\t\t$.effects.restore( el, props );\n\t\t\t$.effects.removeWrapper( el );\n\t\t\tdone();\n\t\t}\n\t});\n};\n\n\n/*!\n * jQuery UI Effects Transfer 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/transfer-effect/\n */\n\n\nvar effectTransfer = $.effects.effect.transfer = function( o, done ) {\n\tvar elem = $( this ),\n\t\ttarget = $( o.to ),\n\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\tbody = $(\"body\"),\n\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\tendPosition = target.offset(),\n\t\tanimation = {\n\t\t\ttop: endPosition.top - fixTop,\n\t\t\tleft: endPosition.left - fixLeft,\n\t\t\theight: target.innerHeight(),\n\t\t\twidth: target.innerWidth()\n\t\t},\n\t\tstartPosition = elem.offset(),\n\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t.appendTo( document.body )\n\t\t\t.addClass( o.className )\n\t\t\t.css({\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: elem.innerHeight(),\n\t\t\t\twidth: elem.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t})\n\t\t\t.animate( animation, o.duration, o.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tdone();\n\t\t\t});\n};\n\n\n/*!\n * jQuery UI Progressbar 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/progressbar/\n */\n\n\nvar progressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.attr({\n\t\t\t\t// Only set static values, aria-valuenow and aria-valuemax are\n\t\t\t\t// set inside _refreshValue()\n\t\t\t\trole: \"progressbar\",\n\t\t\t\t\"aria-valuemin\": this.min\n\t\t\t});\n\n\t\tthis.valueDiv = $( \"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\" )\n\t\t\t.appendTo( this.element );\n\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-valuemin\" )\n\t\t\t.removeAttr( \"aria-valuemax\" )\n\t\t\t.removeAttr( \"aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.toggleClass( \"ui-corner-right\", value === this.options.max )\n\t\t\t.width( percentage.toFixed(0) + \"%\" );\n\n\t\tthis.element.toggleClass( \"ui-progressbar-indeterminate\", this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div class='ui-progressbar-overlay'></div>\" ).appendTo( this.valueDiv );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr({\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t});\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Selectable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/selectable/\n */\n\n\nvar selectable = $.widget(\"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar selectees,\n\t\t\tthat = this;\n\n\t\tthis.element.addClass(\"ui-selectable\");\n\n\t\tthis.dragged = false;\n\n\t\t// cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tselectees = $(that.options.filter, that.element[0]);\n\t\t\tselectees.addClass(\"ui-selectee\");\n\t\t\tselectees.each(function() {\n\t\t\t\tvar $this = $(this),\n\t\t\t\t\tpos = $this.offset();\n\t\t\t\t$.data(this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass(\"ui-selected\"),\n\t\t\t\t\tselecting: $this.hasClass(\"ui-selecting\"),\n\t\t\t\t\tunselecting: $this.hasClass(\"ui-unselecting\")\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis.selectees = selectees.addClass(\"ui-selectee\");\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $(\"<div class='ui-selectable-helper'></div>\");\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees\n\t\t\t.removeClass(\"ui-selectee\")\n\t\t\t.removeData(\"selectable-item\");\n\t\tthis.element\n\t\t\t.removeClass(\"ui-selectable ui-selectable-disabled\");\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function(event) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\n\t\tif (this.options.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $(options.filter, this.element[0]);\n\n\t\tthis._trigger(\"start\", event);\n\n\t\t$(options.appendTo).append(this.helper);\n\t\t// position helper (lasso)\n\t\tthis.helper.css({\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t});\n\n\t\tif (options.autoRefresh) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter(\".ui-selected\").each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.startselected = true;\n\t\t\tif (!event.metaKey && !event.ctrlKey) {\n\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\tselectee.selected = false;\n\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\tselectee.unselecting = true;\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t$(event.target).parents().addBack().each(function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data(this, \"selectable-item\");\n\t\t\tif (selectee) {\n\t\t\t\tdoSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass(\"ui-selected\");\n\t\t\t\tselectee.$element\n\t\t\t\t\t.removeClass(doSelect ? \"ui-unselecting\" : \"ui-selected\")\n\t\t\t\t\t.addClass(doSelect ? \"ui-selecting\" : \"ui-unselecting\");\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif (doSelect) {\n\t\t\t\t\tthat._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\tthis.dragged = true;\n\n\t\tif (this.options.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[0],\n\t\t\ty1 = this.opos[1],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });\n\n\t\tthis.selectees.each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\"),\n\t\t\t\thit = false;\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif (!selectee || selectee.element === that.element[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.tolerance === \"touch\") {\n\t\t\t\thit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );\n\t\t\t} else if (options.tolerance === \"fit\") {\n\t\t\t\thit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);\n\t\t\t}\n\n\t\t\tif (hit) {\n\t\t\t\t// SELECT\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif (selectee.unselecting) {\n\t\t\t\t\tselectee.$element.removeClass(\"ui-unselecting\");\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif (!selectee.selecting) {\n\t\t\t\t\tselectee.$element.addClass(\"ui-selecting\");\n\t\t\t\t\tselectee.selecting = true;\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// UNSELECT\n\t\t\t\tif (selectee.selecting) {\n\t\t\t\t\tif ((event.metaKey || event.ctrlKey) && selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selecting\");\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tselectee.$element.addClass(\"ui-selected\");\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selecting\");\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif (selectee.startselected) {\n\t\t\t\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tif (!event.metaKey && !event.ctrlKey && !selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass(\"ui-selected\");\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tselectee.$element.addClass(\"ui-unselecting\");\n\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$(\".ui-unselecting\", this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass(\"ui-unselecting\");\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger(\"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t});\n\t\t});\n\t\t$(\".ui-selecting\", this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass(\"ui-selecting\").addClass(\"ui-selected\");\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger(\"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t});\n\t\t});\n\t\tthis._trigger(\"stop\", event);\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n});\n\n\n/*!\n * jQuery UI Selectmenu 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/selectmenu\n */\n\n\nvar selectmenu = $.widget( \"ui.selectmenu\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.disable();\n\t\t}\n\t},\n\n\t_drawButton: function() {\n\t\tvar that = this;\n\n\t\t// Associate existing label with the new button\n\t\tthis.label = $( \"label[for='\" + this.ids.element + \"']\" ).attr( \"for\", this.ids.button );\n\t\tthis._on( this.label, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\t\"class\": \"ui-selectmenu-button ui-widget ui-state-default ui-corner-all\",\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\"\n\t\t})\n\t\t\t.insertAfter( this.element );\n\n\t\t$( \"<span>\", {\n\t\t\t\"class\": \"ui-icon \" + this.options.icons.button\n\t\t})\n\t\t\t.prependTo( this.button );\n\n\t\tthis.buttonText = $( \"<span>\", {\n\t\t\t\"class\": \"ui-selectmenu-text\"\n\t\t})\n\t\t\t.appendTo( this.button );\n\n\t\tthis._setText( this.buttonText, this.element.find( \"option:selected\" ).text() );\n\t\tthis._resizeButton();\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that.menuItems ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t});\n\t\tthis._hoverable( this.button );\n\t\tthis._focusable( this.button );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t});\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\", {\n\t\t\t\"class\": \"ui-selectmenu-menu ui-front\"\n\t\t})\n\t\t\t.append( this.menu )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu({\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t})\n\t\t\t.menu( \"instance\" );\n\n\t\t// Adjust menu styles to dropdown\n\t\tthis.menu\n\t\t\t.addClass( \"ui-corner-bottom\" )\n\t\t\t.removeClass( \"ui-corner-all\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis._setText( this.buttonText, this._getSelectedItem().text() );\n\t\tif ( !this.options.width ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tthis.menu.empty();\n\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" ).not( \".ui-selectmenu-optgroup\" );\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this.menuItems ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis.menu.find( \".ui-state-focus\" ).removeClass( \"ui-state-focus\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\t$( \"<li>\", {\n\t\t\t\t\t\"class\": \"ui-selectmenu-optgroup ui-menu-divider\" +\n\t\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\t\"\" ),\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t})\n\t\t\t\t\t.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t});\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" );\n\n\t\tif ( item.disabled ) {\n\t\t\tli.addClass( \"ui-state-disabled\" );\n\t\t}\n\t\tthis._setText( li, item.label );\n\n\t\treturn li.appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" + this.ids.button ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.TAB:\n\t\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\tpreventDefault = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._toggle( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"first\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"last\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.menu.trigger( event );\n\t\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis._setText( this.buttonText, item.label );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr({\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t});\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.button.find( \"span.ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.button )\n\t\t\t\t.addClass( value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.menuInstance.option( \"disabled\", value );\n\t\t\tthis.button\n\t\t\t\t.toggleClass( \"ui-state-disabled\", value )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\n\t\t\tthis.element.prop( \"disabled\", value );\n\t\t\tif ( value ) {\n\t\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\t\tthis.close();\n\t\t\t} else {\n\t\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button\n\t\t\t.toggleClass( \"ui-corner-top\", this.isOpen )\n\t\t\t.toggleClass( \"ui-corner-all\", !this.isOpen )\n\t\t\t.attr( \"aria-expanded\", this.isOpen );\n\t\tthis.menuWrap.toggleClass( \"ui-selectmenu-open\", this.isOpen );\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\tif ( !width ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn { disabled: this.element.prop( \"disabled\" ) };\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar data = [];\n\t\toptions.each(function( index, item ) {\n\t\t\tvar option = $( item ),\n\t\t\t\toptgroup = option.parent( \"optgroup\" );\n\t\t\tdata.push({\n\t\t\t\telement: option,\n\t\t\t\tindex: index,\n\t\t\t\tvalue: option.val(),\n\t\t\t\tlabel: option.text(),\n\t\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t\t});\n\t\t});\n\t\tthis.items = data;\n\t},\n\n\t_destroy: function() {\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.label.attr( \"for\", this.ids.element );\n\t}\n});\n\n\n/*!\n * jQuery UI Slider 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slider/\n */\n\n\nvar slider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-\" + this.orientation +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\");\n\n\t\tthis._refresh();\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ).addClass( \"ui-state-default ui-corner-all\" ),\n\t\t\thandle = \"<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each(function( i ) {\n\t\t\t$( this ).data( \"ui-slider-handle-index\", i );\n\t\t});\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options,\n\t\t\tclasses = \"\";\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[0], options.values[0] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div></div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tclasses = \"ui-slider-range\" +\n\t\t\t\t// note: this isn't the most fittingly semantic framework class for this element,\n\t\t\t\t// but worked best visually with a variety of themes\n\t\t\t\t\" ui-widget-header ui-corner-all\";\n\t\t\t} else {\n\t\t\t\tthis.range.removeClass( \"ui-slider-range-min ui-slider-range-max\" )\n\t\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\t\t.css({\n\t\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.range.addClass( classes +\n\t\t\t\t( ( options.range === \"min\" || options.range === \"max\" ) ? \" ui-slider-range-\" + options.range : \"\" ) );\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis.element\n\t\t\t.removeClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-horizontal\" +\n\t\t\t\t\" ui-slider-vertical\" +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\" );\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each(function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values(i) );\n\t\t\tif (( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t(i === that._lastChangedValue || that.values(i) === o.min ))) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t});\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tclosestHandle\n\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t.focus();\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderTopWidth\"), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderBottomWidth\"), 10 ) || 0) +\n\t\t\t\t( parseInt( closestHandle.css(\"marginTop\"), 10 ) || 0)\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis.handles.removeClass( \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_start: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\t\treturn this._trigger( \"start\", event, uiHash );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar otherVal,\n\t\t\tnewValues,\n\t\t\tallowed;\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\n\t\t\tif ( ( this.options.values.length === 2 && this.options.range === true ) &&\n\t\t\t\t\t( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )\n\t\t\t\t) {\n\t\t\t\tnewVal = otherVal;\n\t\t\t}\n\n\t\t\tif ( newVal !== this.values( index ) ) {\n\t\t\t\tnewValues = this.values();\n\t\t\t\tnewValues[ index ] = newVal;\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal,\n\t\t\t\t\tvalues: newValues\n\t\t\t\t} );\n\t\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.values( index, newVal );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( newVal !== this.value() ) {\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal\n\t\t\t\t} );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.value( newVal );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\n\t\tthis._trigger( \"stop\", event, uiHash );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\t\t\tvar uiHash = {\n\t\t\t\thandle: this.handles[ index ],\n\t\t\t\tvalue: this.value()\n\t\t\t};\n\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\tuiHash.value = this.values( index );\n\t\t\t\tuiHash.values = this.values();\n\t\t\t}\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\n\t\t\tthis._trigger( \"change\", event, uiHash );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.element.toggleClass( \"ui-state-disabled\", !!value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis.element\n\t\t\t\t\t.removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t.addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tfor ( i = 0; i < valsLength; i += 1 ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this.options.values && this.options.values.length ) {\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = (val - this._valueMin()) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs(valModStep) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed(5) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tthis.handles.each(function( i ) {\n\t\t\t\tvalPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { left: valPercent + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { width: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { bottom: ( valPercent ) + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( { height: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { width: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { width: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { height: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { height: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\t$( event.target ).addClass( \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\t$( event.target ).removeClass( \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n/*!\n * jQuery UI Sortable 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/sortable/\n */\n\n\nvar sortable = $.widget(\"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.11.4\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn (/left|right/).test(item.css(\"float\")) || (/inline|table-cell/).test(item.css(\"display\"));\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis.element.addClass(\"ui-sortable\");\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.element.find( \".ui-sortable-handle\" ).removeClass( \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\t( this.instance.options.handle ?\n\t\t\t\tthis.item.find( this.instance.options.handle ) : this.item )\n\t\t\t\t.addClass( \"ui-sortable-handle\" );\n\t\t});\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-sortable ui-sortable-disabled\" )\n\t\t\t.find( \".ui-sortable-handle\" )\n\t\t\t\t.removeClass( \"ui-sortable-handle\" );\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[i].item.removeData(this.widgetName + \"-item\");\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event, overrideHandle) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif (this.reverting) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif(this.options.disabled || this.options.type === \"static\") {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems(event);\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$(event.target).parents().each(function() {\n\t\t\tif($.data(this, that.widgetName + \"-item\") === that) {\n\t\t\t\tcurrentItem = $(this);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif($.data(event.target, that.widgetName + \"-item\") === that) {\n\t\t\tcurrentItem = $(event.target);\n\t\t}\n\n\t\tif(!currentItem) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.options.handle && !overrideHandle) {\n\t\t\t$(this.options.handle, currentItem).find(\"*\").addBack().each(function() {\n\t\t\t\tif(this === event.target) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(!validHandle) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function(event, overrideHandle, noActivation) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend(this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\n\t\t});\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css(\"position\", \"absolute\");\n\t\tthis.cssPosition = this.helper.css(\"position\");\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition(event);\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };\n\n\t\t//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way\n\t\tif(this.helper[0] !== this.currentItem[0]) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif(o.containment) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet = $( \"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif(o.opacity) { // opacity option\n\t\t\tif (this.helper.css(\"opacity\")) {\n\t\t\t\tthis._storedOpacity = this.helper.css(\"opacity\");\n\t\t\t}\n\t\t\tthis.helper.css(\"opacity\", o.opacity);\n\t\t}\n\n\t\tif(o.zIndex) { // zIndex option\n\t\t\tif (this.helper.css(\"zIndex\")) {\n\t\t\t\tthis._storedZIndex = this.helper.css(\"zIndex\");\n\t\t\t}\n\t\t\tthis.helper.css(\"zIndex\", o.zIndex);\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== \"HTML\") {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger(\"start\", event, this._uiHash());\n\n\t\t//Recache the helper size\n\t\tif(!this._preserveHelperProportions) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ($.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis.helper.addClass(\"ui-sortable-helper\");\n\t\tthis._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function(event) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition(event);\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\tif (!this.lastPositionAbs) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif(this.options.scroll) {\n\t\t\tif(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== \"HTML\") {\n\n\t\t\t\tif((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);\n\t\t\t\t} else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);\n\t\t\t\t}\n\n\t\t\t\tif(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);\n\t\t\t\t} else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Set the helper position\n\t\tif(!this.options.axis || this.options.axis !== \"y\") {\n\t\t\tthis.helper[0].style.left = this.position.left+\"px\";\n\t\t}\n\t\tif(!this.options.axis || this.options.axis !== \"x\") {\n\t\t\tthis.helper[0].style.top = this.position.top+\"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor (i = this.items.length - 1; i >= 0; i--) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[i];\n\t\t\titemElement = item.item[0];\n\t\t\tintersection = this._intersectsWithPointer(item);\n\t\t\tif (!intersection) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif (item.instance !== this.currentContainer) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif (itemElement !== this.currentItem[0] &&\n\t\t\t\tthis.placeholder[intersection === 1 ? \"next\" : \"prev\"]()[0] !== itemElement &&\n\t\t\t\t!$.contains(this.placeholder[0], itemElement) &&\n\t\t\t\t(this.options.type === \"semi-dynamic\" ? !$.contains(this.element[0], itemElement) : true)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif (this.options.tolerance === \"pointer\" || this._intersectsWithSides(item)) {\n\t\t\t\t\tthis._rearrange(event, item);\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers(event);\n\n\t\t//Interconnect with droppables\n\t\tif($.ui.ddmanager) {\n\t\t\t$.ui.ddmanager.drag(this, event);\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger(\"sort\", event, this._uiHash());\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function(event, noPropagation) {\n\n\t\tif(!event) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour) {\n\t\t\t$.ui.ddmanager.drop(this, event);\n\t\t}\n\n\t\tif(this.options.revert) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {\n\t\t\t\tthat._clear(event);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._clear(event, noPropagation);\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif(this.dragging) {\n\n\t\t\tthis._mouseUp({ target: null });\n\n\t\t\tif(this.options.helper === \"original\") {\n\t\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tthis.containers[i]._trigger(\"deactivate\", null, this._uiHash(this));\n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", null, this._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif (this.placeholder) {\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\t\tif(this.placeholder[0].parentNode) {\n\t\t\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\t\t\t}\n\t\t\tif(this.options.helper !== \"original\" && this.helper && this.helper[0].parentNode) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend(this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t});\n\n\t\t\tif(this.domPosition.prev) {\n\t\t\t\t$(this.domPosition.prev).after(this.currentItem);\n\t\t\t} else {\n\t\t\t\t$(this.domPosition.parent).prepend(this.currentItem);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$(items).each(function() {\n\t\t\tvar res = ($(o.item || this).attr(o.attribute || \"id\") || \"\").match(o.expression || (/(.+)[\\-=_](.+)/));\n\t\t\tif (res) {\n\t\t\t\tstr.push((o.key || res[1]+\"[]\")+\"=\"+(o.key && o.expression ? res[1] : res[2]));\n\t\t\t}\n\t\t});\n\n\t\tif(!str.length && o.key) {\n\t\t\tstr.push(o.key + \"=\");\n\t\t}\n\n\t\treturn str.join(\"&\");\n\n\t},\n\n\ttoArray: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each(function() { ret.push($(o.item || this).attr(o.attribute || \"id\") || \"\"); });\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function(item) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t(this.options.tolerance !== \"pointer\" && this.helperProportions[this.floating ? \"width\" : \"height\"] > item[this.floating ? \"width\" : \"height\"])\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn (l < x1 + (this.helperProportions.width / 2) && // Right Half\n\t\t\t\tx2 - (this.helperProportions.width / 2) < r && // Left Half\n\t\t\t\tt < y1 + (this.helperProportions.height / 2) && // Bottom Half\n\t\t\t\ty2 - (this.helperProportions.height / 2) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function(item) {\n\n\t\tvar isOverElementHeight = (this.options.axis === \"x\") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),\n\t\t\tisOverElementWidth = (this.options.axis === \"y\") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth,\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (!isOverElement) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this.floating ?\n\t\t\t( ((horizontalDirection && horizontalDirection === \"right\") || verticalDirection === \"down\") ? 2 : 1 )\n\t\t\t: ( verticalDirection && (verticalDirection === \"down\" ? 2 : 1) );\n\n\t},\n\n\t_intersectsWithSides: function(item) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),\n\t\t\tisOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (this.floating && horizontalDirection) {\n\t\t\treturn ((horizontalDirection === \"right\" && isOverRightHalf) || (horizontalDirection === \"left\" && !isOverRightHalf));\n\t\t} else {\n\t\t\treturn verticalDirection && ((verticalDirection === \"down\" && isOverBottomHalf) || (verticalDirection === \"up\" && !isOverBottomHalf));\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && (delta > 0 ? \"down\" : \"up\");\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && (delta > 0 ? \"right\" : \"left\");\n\t},\n\n\trefresh: function(event) {\n\t\tthis._refreshItems(event);\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function(connected) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif(connectWith && connected) {\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tcur = $(connectWith[i], this.document[0]);\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), inst]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"), this]);\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor (i = queries.length - 1; i >= 0; i--){\n\t\t\tqueries[i][0].each( addItems );\n\t\t}\n\n\t\treturn $(items);\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find(\":data(\" + this.widgetName + \"-item)\");\n\n\t\tthis.items = $.grep(this.items, function (item) {\n\t\t\tfor (var j=0; j < list.length; j++) {\n\t\t\t\tif(list[j] === item.item[0]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t},\n\n\t_refreshItems: function(event) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [this];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down\n\t\t\tfor (i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tcur = $(connectWith[i], this.document[0]);\n\t\t\t\tfor (j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tinst = $.data(cur[j], this.widgetFullName);\n\t\t\t\t\tif(inst && inst !== this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);\n\t\t\t\t\t\tthis.containers.push(inst);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i = queries.length - 1; i >= 0; i--) {\n\t\t\ttargetData = queries[i][1];\n\t\t\t_queries = queries[i][0];\n\n\t\t\tfor (j=0, queriesLength = _queries.length; j < queriesLength; j++) {\n\t\t\t\titem = $(_queries[j]);\n\n\t\t\t\titem.data(this.widgetName + \"-item\", targetData); // Data for target checking (mouse manager)\n\n\t\t\t\titems.push({\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function(fast) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change\n\t\tif(this.offsetParent && this.helper) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor (i = this.items.length - 1; i >= 0; i--){\n\t\t\titem = this.items[i];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;\n\n\t\t\tif (!fast) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif(this.options.custom && this.options.custom.refreshContainers) {\n\t\t\tthis.options.custom.refreshContainers.call(this);\n\t\t} else {\n\t\t\tfor (i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tp = this.containers[i].element.offset();\n\t\t\t\tthis.containers[i].containerCache.left = p.left;\n\t\t\t\tthis.containers[i].containerCache.top = p.top;\n\t\t\t\tthis.containers[i].containerCache.width = this.containers[i].element.outerWidth();\n\t\t\t\tthis.containers[i].containerCache.height = this.containers[i].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function(that) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif(!o.placeholder || o.placeholder.constructor === String) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[0].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[0] )\n\t\t\t\t\t\t\t.addClass(className || that.currentItem[0].className+\" ui-sortable-placeholder\")\n\t\t\t\t\t\t\t.removeClass(\"ui-sortable-helper\");\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function(container, p) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified\n\t\t\t\t\tif(className && !o.forcePlaceholderSize) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css(\"paddingTop\")||0, 10) - parseInt(that.currentItem.css(\"paddingBottom\")||0, 10)); }\n\t\t\t\t\tif(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css(\"paddingLeft\")||0, 10) - parseInt(that.currentItem.css(\"paddingRight\")||0, 10)); }\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after(that.placeholder);\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update(that, that.placeholder);\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each(function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t});\n\t},\n\n\t_contactContainers: function(event) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// get innermost container that intersects with item\n\t\tfor (i = this.containers.length - 1; i >= 0; i--) {\n\n\t\t\t// never consider a container that's located within the item itself\n\t\t\tif($.contains(this.currentItem[0], this.containers[i].element[0])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif(this._intersectsWith(this.containers[i].containerCache)) {\n\n\t\t\t\t// if we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[i];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", event, this._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// if no intersecting containers found, return\n\t\tif(!innermostContainer) {\n\t\t\treturn;\n\t\t}\n\n\t\t// move the item into the container if it's not there already\n\t\tif(this.containers.length === 1) {\n\t\t\tif (!this.containers[innermostIndex].containerCache.over) {\n\t\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//When entering a new container, we will find the item with the least distance and append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating(this.currentItem);\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"clientX\" : \"clientY\";\n\n\t\t\tfor (j = this.items.length - 1; j >= 0; j--) {\n\t\t\t\tif(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif(this.items[j].item[0] === this.currentItem[0]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[j].item.offset()[posProperty];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\": \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif(!itemWithLeastDistance && !this.options.dropOnEmpty) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.currentContainer === this.containers[innermostIndex]) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);\n\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\tthis.containers[innermostIndex]._trigger(\"change\", event, this._uiHash(this));\n\t\t\tthis.currentContainer = this.containers[innermostIndex];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update(this.currentContainer, this.placeholder);\n\n\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t}\n\n\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem);\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif(!helper.parents(\"body\").length) {\n\t\t\t$(o.appendTo !== \"parent\" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);\n\t\t}\n\n\t\tif(helper[0] === this.currentItem[0]) {\n\t\t\tthis._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css(\"position\"), top: this.currentItem.css(\"top\"), left: this.currentItem.css(\"left\") };\n\t\t}\n\n\t\tif(!helper[0].style.width || o.forceHelperSize) {\n\t\t\thelper.width(this.currentItem.width());\n\t\t}\n\t\tif(!helper[0].style.height || o.forceHelperSize) {\n\t\t\thelper.height(this.currentItem.height());\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj === \"string\") {\n\t\t\tobj = obj.split(\" \");\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\n\t\t}\n\t\tif (\"left\" in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif (\"right\" in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif (\"top\" in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif (\"bottom\" in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif(this.cssPosition === \"absolute\" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this information\n\t\t// with an ugly IE fix\n\t\tif( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === \"html\" && $.ui.ie)) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif(this.cssPosition === \"relative\") {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.currentItem.css(\"marginLeft\"),10) || 0),\n\t\t\ttop: (parseInt(this.currentItem.css(\"marginTop\"),10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif(o.containment === \"parent\") {\n\t\t\to.containment = this.helper[0].parentNode;\n\t\t}\n\t\tif(o.containment === \"document\" || o.containment === \"window\") {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t(o.containment === \"document\" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif(!(/^(document|window|parent)$/).test(o.containment)) {\n\t\t\tce = $(o.containment)[0];\n\t\t\tco = $(o.containment).offset();\n\t\t\tover = ($(ce).css(\"overflow\") !== \"hidden\");\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingLeft\"),10) || 0) - this.margins.left,\n\t\t\t\tco.top + (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingTop\"),10) || 0) - this.margins.top,\n\t\t\t\tco.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingRight\"),10) || 0) - this.helperProportions.width - this.margins.left,\n\t\t\t\tco.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingBottom\"),10) || 0) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif(!pos) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,\n\t\t\tscrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.top * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top * mod -\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left +\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.relative.left * mod +\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left * mod\t-\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function(event) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif(this.cssPosition === \"relative\" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif(this.originalPosition) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif(this.containment) {\n\t\t\t\tif(event.pageX - this.offset.click.left < this.containment[0]) {\n\t\t\t\t\tpageX = this.containment[0] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif(event.pageY - this.offset.click.top < this.containment[1]) {\n\t\t\t\t\tpageY = this.containment[1] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif(event.pageX - this.offset.click.left > this.containment[2]) {\n\t\t\t\t\tpageX = this.containment[2] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif(event.pageY - this.offset.click.top > this.containment[3]) {\n\t\t\t\t\tpageY = this.containment[3] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(o.grid) {\n\t\t\t\ttop = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];\n\t\t\t\tpageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tleft = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];\n\t\t\t\tpageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.top -\t\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.top\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.top +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\tthis.offset.click.left -\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.relative.left\t-\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.parent.left +\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t( ( this.cssPosition === \"fixed\" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function(event, i, a, hardRefresh) {\n\n\t\ta ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === \"down\" ? i.item[0] : i.item[0].nextSibling));\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay(function() {\n\t\t\tif(counter === this.counter) {\n\t\t\t\tthis.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove\n\t\t\t}\n\t\t});\n\n\t},\n\n\t_clear: function(event, noPropagation) {\n\n\t\tthis.reverting = false;\n\t\t// We delay all events that have to be triggered to after the point where the placeholder has been removed and\n\t\t// everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)\n\t\tif(!this._noFinalSort && this.currentItem.parent().length) {\n\t\t\tthis.placeholder.before(this.currentItem);\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif(this.helper[0] === this.currentItem[0]) {\n\t\t\tfor(i in this._storedCSS) {\n\t\t\t\tif(this._storedCSS[i] === \"auto\" || this._storedCSS[i] === \"static\") {\n\t\t\t\t\tthis._storedCSS[i] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif(this.fromOutside && !noPropagation) {\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"receive\", event, this._uiHash(this.fromOutside)); });\n\t\t}\n\t\tif((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(\".ui-sortable-helper\")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {\n\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"update\", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif (this !== this.currentContainer) {\n\t\t\tif(!noPropagation) {\n\t\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"remove\", event, this._uiHash()); });\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"receive\", event, this._uiHash(this)); };  }).call(this, this.currentContainer));\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"update\", event, this._uiHash(this));  }; }).call(this, this.currentContainer));\n\t\t\t}\n\t\t}\n\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor (i = this.containers.length - 1; i >= 0; i--){\n\t\t\tif (!noPropagation) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif(this._storedOpacity) {\n\t\t\tthis.helper.css(\"opacity\", this._storedOpacity);\n\t\t}\n\t\tif(this._storedZIndex) {\n\t\t\tthis.helper.css(\"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex);\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif(!noPropagation) {\n\t\t\tthis._trigger(\"beforeStop\", event, this._uiHash());\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif(!noPropagation) {\n\t\t\tfor (i=0; i < delayedTriggers.length; i++) {\n\t\t\t\tdelayedTriggers[i].call(this, event);\n\t\t\t} //Trigger all delayed events\n\t\t\tthis._trigger(\"stop\", event, this._uiHash());\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ($.Widget.prototype._trigger.apply(this, arguments) === false) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function(_inst) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $([]),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n});\n\n\n/*!\n * jQuery UI Spinner 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/spinner/\n */\n\n\nfunction spinner_modifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\nvar spinner = $.widget( \"ui.spinner\", {\n\tversion: \"1.11.4\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = {},\n\t\t\telement = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value !== undefined && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t});\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( (delta > 0 ? 1 : -1) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay(function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[0] === this.document[0].activeElement ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[0] === this.document[0].activeElement;\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.focus();\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay(function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay(function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t});\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget ).hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget ).hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t_draw: function() {\n\t\tvar uiSpinner = this.uiSpinner = this.element\n\t\t\t.addClass( \"ui-spinner-input\" )\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t.parent()\n\t\t\t\t// add buttons\n\t\t\t\t.append( this._buttonHtml() );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// button bindings\n\t\tthis.buttons = uiSpinner.find( \".ui-spinner-button\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.button()\n\t\t\t.removeClass( \"ui-corner-all\" );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&\n\t\t\t\tuiSpinner.height() > 0 ) {\n\t\t\tuiSpinner.height( uiSpinner.height() );\n\t\t}\n\n\t\t// disable spinner if element was already disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.disable();\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_uiSpinnerHtml: function() {\n\t\treturn \"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>\";\n\t},\n\n\t_buttonHtml: function() {\n\t\treturn \"\" +\n\t\t\t\"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>\" +\n\t\t\t\t\"<span class='ui-icon \" + this.options.icons.up + \"'>&#9650;</span>\" +\n\t\t\t\"</a>\" +\n\t\t\t\"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>\" +\n\t\t\t\t\"<span class='ui-icon \" + this.options.icons.down + \"'>&#9660;</span>\" +\n\t\t\t\"</a>\";\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay(function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round(aboveMin / options.step) * options.step;\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// clamp the value\n\t\tif ( options.max !== null && value > options.max) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tvar prevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis.buttons.first().find( \".ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.up )\n\t\t\t\t.addClass( value.up );\n\t\t\tthis.buttons.last().find( \".ui-icon\" )\n\t\t\t\t.removeClass( this.options.icons.down )\n\t\t\t\t.addClass( value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget().toggleClass( \"ui-state-disabled\", !!value );\n\t\t\tthis.element.prop( \"disabled\", !!value );\n\t\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t\t}\n\t},\n\n\t_setOptions: spinner_modifier(function( options ) {\n\t\tthis._super( options );\n\t}),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr({\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t});\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// if value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-spinner-input\" )\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-valuemin\" )\n\t\t\t.removeAttr( \"aria-valuemax\" )\n\t\t\t.removeAttr( \"aria-valuenow\" );\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinner_modifier(function( steps ) {\n\t\tthis._stepUp( steps );\n\t}),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( (steps || 1) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinner_modifier(function( steps ) {\n\t\tthis._stepDown( steps );\n\t}),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( (steps || 1) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinner_modifier(function( pages ) {\n\t\tthis._stepUp( (pages || 1) * this.options.page );\n\t}),\n\n\tpageDown: spinner_modifier(function( pages ) {\n\t\tthis._stepDown( (pages || 1) * this.options.page );\n\t}),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinner_modifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n});\n\n\n/*!\n * jQuery UI Tabs 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tabs/\n */\n\n\nvar tabs = $.widget( \"ui.tabs\", {\n\tversion: \"1.11.4\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: (function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\t// support: IE7\n\t\t\t// IE7 doesn't normalize the href property when set via script (#9317)\n\t\t\tanchor = anchor.cloneNode( false );\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t})(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.toggleClass( \"ui-tabs-collapsible\", options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t})\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each(function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// no active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( this.document[0].activeElement ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tselectedIndex++;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tgoingForward = false;\n\t\t\t\tselectedIndex--;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tselectedIndex = 0;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\t// Activate only, no collapsing\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearTimeout( this.activating );\n\t\t\t\tthis._activate( selectedIndex );\n\t\t\t\treturn;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearTimeout( this.activating );\n\t\t\t\t// Determine if we should collapse or activate\n\t\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay(function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.focus();\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).focus();\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\t// don't use the widget factory's disabled handling\n\t\t\tthis._setupDisabled( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value);\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis.element.toggleClass( \"ui-tabs-collapsible\", value );\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t});\n\n\t\tthis._processTabs();\n\n\t\t// was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\t\t// was active, active tab still exists\n\t\t} else {\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setupDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t});\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr({\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t});\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.addClass( \"ui-tabs-active ui-state-active\" )\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t});\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t});\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList()\n\t\t\t.addClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" )\n\t\t\t.attr( \"role\", \"tablist\" )\n\n\t\t\t// Prevent users from focusing disabled tabs via click\n\t\t\t.delegate( \"> li\", \"mousedown\" + this.eventNamespace, function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.delegate( \".ui-tabs-anchor\", \"focus\" + this.eventNamespace, function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.addClass( \"ui-state-default ui-corner-top\" )\n\t\t\t.attr({\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t});\n\n\t\tthis.anchors = this.tabs.map(function() {\n\t\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t\t})\n\t\t\t.addClass( \"ui-tabs-anchor\" )\n\t\t\t.attr({\n\t\t\t\trole: \"presentation\",\n\t\t\t\ttabIndex: -1\n\t\t\t});\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each(function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\t\t\t// remote tab\n\t\t\t} else {\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr({\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t});\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t});\n\n\t\tthis.panels\n\t\t\t.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" )\n\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol,ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setupDisabled: function( disabled ) {\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// disable tabs\n\t\tfor ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\t$( li )\n\t\t\t\t\t.addClass( \"ui-state-disabled\" )\n\t\t\t\t\t.attr( \"aria-disabled\", \"true\" );\n\t\t\t} else {\n\t\t\t\t$( li )\n\t\t\t\t\t.removeClass( \"ui-state-disabled\" )\n\t\t\t\t\t.removeAttr( \"aria-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split(\" \"), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t});\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each(function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.element.children().not( this.panels ).each(function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.panels.each(function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t})\n\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each(function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t}).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\teventData.newTab.closest( \"li\" ).addClass( \"ui-tabs-active ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\teventData.oldTab.closest( \"li\" ).removeClass( \"ui-tabs-active ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t});\n\t\t} else {\n\t\t\teventData.oldTab.closest( \"li\" ).removeClass( \"ui-tabs-active ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr({\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t});\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter(function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t})\n\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr({\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t});\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler({\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t});\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" + index + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.element.removeClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible\" );\n\n\t\tthis.tablist\n\t\t\t.removeClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" )\n\t\t\t.removeAttr( \"role\" );\n\n\t\tthis.anchors\n\t\t\t.removeClass( \"ui-tabs-anchor\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tablist.unbind( this.eventNamespace );\n\n\t\tthis.tabs.add( this.panels ).each(function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this )\n\t\t\t\t\t.removeClass( \"ui-state-default ui-state-active ui-state-disabled \" +\n\t\t\t\t\t\t\"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel\" )\n\t\t\t\t\t.removeAttr( \"tabIndex\" )\n\t\t\t\t\t.removeAttr( \"aria-live\" )\n\t\t\t\t\t.removeAttr( \"aria-busy\" )\n\t\t\t\t\t.removeAttr( \"aria-selected\" )\n\t\t\t\t\t.removeAttr( \"aria-labelledby\" )\n\t\t\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t\t\t.removeAttr( \"role\" );\n\t\t\t}\n\t\t});\n\n\t\tthis.tabs.each(function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t});\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._setupDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setupDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\ttab.removeClass( \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\ttab.addClass( \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done(function( response, status, jqXHR ) {\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t})\n\t\t\t\t.fail(function( jqXHR, status ) {\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t});\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\t\t\turl: anchor.attr( \"href\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n});\n\n\n/*!\n * jQuery UI Tooltip 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tooltip/\n */\n\n\nvar tooltip = $.widget( \"ui.tooltip\", {\n\tversion: \"1.11.4\",\n\toptions: {\n\t\tcontent: function() {\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can't accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttooltipClass: null,\n\t\ttrack: false,\n\n\t\t// callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = (elem.attr( \"aria-describedby\" ) || \"\").split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = $.trim( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on({\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t});\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._disable();\n\t\t}\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr({\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t})\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t\t\tthis.options[ key ] = value;\n\t\t\t// disable element style changes\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t});\n\t\t}\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t});\n\n\t\t// remove title attributes to prevent native tooltips\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\telement\n\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t}\n\t\t});\n\t},\n\n\t_enable: function() {\n\t\t// restore title attributes\n\t\tthis.element.find( this.options.items ).addBack().each(function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t});\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each(function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[0], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay(function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// jQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t});\n\t\t});\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// if we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\tif ( content.clone ) {\n\t\t\ta11yContent = content.clone();\n\t\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\t} else {\n\t\t\ta11yContent = content;\n\t\t}\n\t\t$( \"<div>\" ).html( a11yContent ).appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t});\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend({\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\tif ( this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval(function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event(event);\n\t\t\t\t\tfakeEvent.currentTarget = target[0];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t});\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t});\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" )\n\t\t\t\t.attr( \"role\", \"tooltip\" )\n\t\t\t\t.addClass( \"ui-tooltip ui-widget ui-corner-all ui-widget-content \" +\n\t\t\t\t\t( this.options.tooltipClass || \"\" ) ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\t$( \"<div>\" )\n\t\t\t.addClass( \"ui-tooltip-content\" )\n\t\t\t.appendTo( tooltip );\n\n\t\ttooltip.appendTo( this.document[0].body );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t});\n\t\tthis.liveRegion.remove();\n\t}\n});\n\n\n\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/jquery-ui.structure.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-clearfix {\n\tmin-height: 0; /* support: IE7 */\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n}\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tmin-height: 0; /* support: IE7 */\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-icons .ui-accordion-icons {\n\tpadding-left: 2.2em;\n}\n.ui-accordion .ui-accordion-header .ui-accordion-header-icon {\n\tposition: absolute;\n\tleft: .5em;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-button {\n\tdisplay: inline-block;\n\tposition: relative;\n\tpadding: 0;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\toverflow: visible; /* removes extra width in IE */\n}\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2.2em;\n}\n/* button elements seem to need a little more width */\nbutton.ui-button-icon-only {\n\twidth: 2.4em;\n}\n.ui-button-icons-only {\n\twidth: 3.4em;\n}\nbutton.ui-button-icons-only {\n\twidth: 3.7em;\n}\n\n/* button text element */\n.ui-button .ui-button-text {\n\tdisplay: block;\n\tline-height: normal;\n}\n.ui-button-text-only .ui-button-text {\n\tpadding: .4em 1em;\n}\n.ui-button-icon-only .ui-button-text,\n.ui-button-icons-only .ui-button-text {\n\tpadding: .4em;\n\ttext-indent: -9999999px;\n}\n.ui-button-text-icon-primary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 1em .4em 2.1em;\n}\n.ui-button-text-icon-secondary .ui-button-text,\n.ui-button-text-icons .ui-button-text {\n\tpadding: .4em 2.1em .4em 1em;\n}\n.ui-button-text-icons .ui-button-text {\n\tpadding-left: 2.1em;\n\tpadding-right: 2.1em;\n}\n/* no icon support for input elements, provide padding by default */\ninput.ui-button {\n\tpadding: .4em 1em;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon,\n.ui-button-text-icon-primary .ui-icon,\n.ui-button-text-icon-secondary .ui-icon,\n.ui-button-text-icons .ui-icon,\n.ui-button-icons-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-button-icon-only .ui-icon {\n\tleft: 50%;\n\tmargin-left: -8px;\n}\n.ui-button-text-icon-primary .ui-button-icon-primary,\n.ui-button-text-icons .ui-button-icon-primary,\n.ui-button-icons-only .ui-button-icon-primary {\n\tleft: .5em;\n}\n.ui-button-text-icon-secondary .ui-button-icon-secondary,\n.ui-button-text-icons .ui-button-icon-secondary,\n.ui-button-icons-only .ui-button-icon-secondary {\n\tright: .5em;\n}\n\n/* button sets */\n.ui-buttonset {\n\tmargin-right: 7px;\n}\n.ui-buttonset .ui-button {\n\tmargin-left: 0;\n\tmargin-right: -.3em;\n}\n\n/* workarounds */\n/* reset extra padding in Firefox, see h5bp.com/l */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n.ui-dialog {\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-se {\n\twidth: 12px;\n\theight: 12px;\n\tright: -5px;\n\tbottom: -5px;\n\tbackground-position: 16px 16px;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: none;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 3px 1em 3px .4em;\n\tcursor: pointer;\n\tmin-height: 0; /* support: IE7 */\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\t/* Support: IE7 */\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-button {\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tposition: relative;\n\ttext-decoration: none;\n\tcursor: pointer;\n}\n.ui-selectmenu-button span.ui-icon {\n\tright: 0.5em;\n\tleft: auto;\n\tmargin-top: -8px;\n\tposition: absolute;\n\ttop: 50%;\n}\n.ui-selectmenu-button span.ui-selectmenu-text {\n\ttext-align: left;\n\tpadding: 0.4em 2.1em 0.4em 1em;\n\tdisplay: block;\n\tline-height: 1.4;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 22px;\n}\n.ui-spinner-button {\n\twidth: 16px;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top: none;\n\tborder-bottom: none;\n\tborder-right: none;\n}\n/* vertically center icon */\n.ui-spinner .ui-icon {\n\tposition: absolute;\n\tmargin-top: -8px;\n\ttop: 50%;\n\tleft: 0;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n\n/* TR overrides */\n.ui-spinner .ui-icon-triangle-1-s {\n\t/* need to fix icons sprite */\n\tbackground-position: -65px -16px;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n\t-webkit-box-shadow: 0 0 5px #aaa;\n\tbox-shadow: 0 0 5px #aaa;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery-ui/jquery-ui.theme.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.11.4\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;\n\tfont-size: 1.1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #eeeeee url(\"images/ui-bg_highlight-soft_100_eeeeee_1x100.png\") 50% top repeat-x;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #e78f08;\n\tbackground: #f6a828 url(\"images/ui-bg_gloss-wave_35_f6a828_500x100.png\") 50% 50% repeat-x;\n\tcolor: #ffffff;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #ffffff;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid #cccccc;\n\tbackground: #f6f6f6 url(\"images/ui-bg_glass_100_f6f6f6_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #1c94c4;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #1c94c4;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #fbcb09;\n\tbackground: #fdf5ce url(\"images/ui-bg_glass_100_fdf5ce_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #c77405;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited {\n\tcolor: #c77405;\n\ttext-decoration: none;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid #fbd850;\n\tbackground: #ffffff url(\"images/ui-bg_glass_65_ffffff_1x400.png\") 50% 50% repeat-x;\n\tfont-weight: bold;\n\tcolor: #eb8f00;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #eb8f00;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #fed22f;\n\tbackground: #ffe45c url(\"images/ui-bg_highlight-soft_75_ffe45c_1x100.png\") 50% top repeat-x;\n\tcolor: #363636;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #363636;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #cd0a0a;\n\tbackground: #b81900 url(\"images/ui-bg_diagonals-thick_18_b81900_40x40.png\") 50% 50% repeat;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_222222_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-default .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ef8c08_256x240.png\");\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url(\"images/ui-icons_228ef1_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffd27a_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 4px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\") 50% 50% repeat;\n\topacity: .5;\n\tfilter: Alpha(Opacity=50); /* support: IE8 */\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url(\"images/ui-bg_flat_10_000000_40x100.png\") 50% 50% repeat-x;\n\topacity: .2;\n\tfilter: Alpha(Opacity=20); /* support: IE8 */\n\tborder-radius: 5px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/dist/angular.easypiechart.js",
    "content": "/**!\n * easyPieChart\n * Lightweight plugin to render simple, animated and retina optimized pie charts\n *\n * @license \n * @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)\n * @version 2.1.6\n **/\n\n(function(root, factory) {\n    if(typeof exports === 'object') {\n        module.exports = factory(require('angular'));\n    }\n    else if(typeof define === 'function' && define.amd) {\n        define(['angular'], factory);\n    }\n    else {\n        factory(root.angular);\n    }\n}(this, function(angular) {\n\n(function (angular) {\n\n\t'use strict';\n\n\treturn angular.module('easypiechart', [])\n\n\t\t.directive('easypiechart', [function() {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: '?ngModel',\n\t\t\t\tscope: {\n\t\t\t\t\tpercent: '=',\n\t\t\t\t\toptions: '='\n\t\t\t\t},\n\t\t\t\tlink: function (scope, element, attrs) {\n\n\t\t\t\t\tscope.percent = scope.percent || 0;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * default easy pie chart options\n\t\t\t\t\t * @type {Object}\n\t\t\t\t\t */\n\t\t\t\t\tvar options = {\n\t\t\t\t\t\tbarColor: '#ef1e25',\n\t\t\t\t\t\ttrackColor: '#f9f9f9',\n\t\t\t\t\t\tscaleColor: '#dfe0e0',\n\t\t\t\t\t\tscaleLength: 5,\n\t\t\t\t\t\tlineCap: 'round',\n\t\t\t\t\t\tlineWidth: 3,\n\t\t\t\t\t\tsize: 110,\n\t\t\t\t\t\trotate: 0,\n\t\t\t\t\t\tanimate: {\n\t\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tscope.options = angular.extend(options, scope.options);\n\n\t\t\t\t\tvar pieChart = new EasyPieChart(element[0], options);\n\n\t\t\t\t\tscope.$watch('percent', function(newVal, oldVal) {\n\t\t\t\t\t\tpieChart.update(newVal);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t}]);\n\n})(angular);\n/**\n * Renderer to render the chart on a canvas object\n * @param {DOMElement} el      DOM element to host the canvas (root of the plugin)\n * @param {object}     options options object of the plugin\n */\nvar CanvasRenderer = function(el, options) {\n\tvar cachedBackground;\n\tvar canvas = document.createElement('canvas');\n\n\tel.appendChild(canvas);\n\n\tif (typeof(G_vmlCanvasManager) !== 'undefined') {\n\t\tG_vmlCanvasManager.initElement(canvas);\n\t}\n\n\tvar ctx = canvas.getContext('2d');\n\n\tcanvas.width = canvas.height = options.size;\n\n\t// canvas on retina devices\n\tvar scaleBy = 1;\n\tif (window.devicePixelRatio > 1) {\n\t\tscaleBy = window.devicePixelRatio;\n\t\tcanvas.style.width = canvas.style.height = [options.size, 'px'].join('');\n\t\tcanvas.width = canvas.height = options.size * scaleBy;\n\t\tctx.scale(scaleBy, scaleBy);\n\t}\n\n\t// move 0,0 coordinates to the center\n\tctx.translate(options.size / 2, options.size / 2);\n\n\t// rotate canvas -90deg\n\tctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);\n\n\tvar radius = (options.size - options.lineWidth) / 2;\n\tif (options.scaleColor && options.scaleLength) {\n\t\tradius -= options.scaleLength + 2; // 2 is the distance between scale and bar\n\t}\n\n\t// IE polyfill for Date\n\tDate.now = Date.now || function() {\n\t\treturn +(new Date());\n\t};\n\n\t/**\n\t * Draw a circle around the center of the canvas\n\t * @param {strong} color     Valid CSS color string\n\t * @param {number} lineWidth Width of the line in px\n\t * @param {number} percent   Percentage to draw (float between -1 and 1)\n\t */\n\tvar drawCircle = function(color, lineWidth, percent) {\n\t\tpercent = Math.min(Math.max(-1, percent || 0), 1);\n\t\tvar isNegative = percent <= 0 ? true : false;\n\n\t\tctx.beginPath();\n\t\tctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);\n\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = lineWidth;\n\n\t\tctx.stroke();\n\t};\n\n\t/**\n\t * Draw the scale of the chart\n\t */\n\tvar drawScale = function() {\n\t\tvar offset;\n\t\tvar length;\n\n\t\tctx.lineWidth = 1;\n\t\tctx.fillStyle = options.scaleColor;\n\n\t\tctx.save();\n\t\tfor (var i = 24; i > 0; --i) {\n\t\t\tif (i % 6 === 0) {\n\t\t\t\tlength = options.scaleLength;\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\tlength = options.scaleLength * 0.6;\n\t\t\t\toffset = options.scaleLength - length;\n\t\t\t}\n\t\t\tctx.fillRect(-options.size/2 + offset, 0, length, 1);\n\t\t\tctx.rotate(Math.PI / 12);\n\t\t}\n\t\tctx.restore();\n\t};\n\n\t/**\n\t * Request animation frame wrapper with polyfill\n\t * @return {function} Request animation frame method or timeout fallback\n\t */\n\tvar reqAnimationFrame = (function() {\n\t\treturn  window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\twindow.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t}());\n\n\t/**\n\t * Draw the background of the plugin including the scale and the track\n\t */\n\tvar drawBackground = function() {\n\t\tif(options.scaleColor) drawScale();\n\t\tif(options.trackColor) drawCircle(options.trackColor, options.trackWidth || options.lineWidth, 1);\n\t};\n\n  /**\n    * Canvas accessor\n   */\n  this.getCanvas = function() {\n    return canvas;\n  };\n\n  /**\n    * Canvas 2D context 'ctx' accessor\n   */\n  this.getCtx = function() {\n    return ctx;\n  };\n\n\t/**\n\t * Clear the complete canvas\n\t */\n\tthis.clear = function() {\n\t\tctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);\n\t};\n\n\t/**\n\t * Draw the complete chart\n\t * @param {number} percent Percent shown by the chart between -100 and 100\n\t */\n\tthis.draw = function(percent) {\n\t\t// do we need to render a background\n\t\tif (!!options.scaleColor || !!options.trackColor) {\n\t\t\t// getImageData and putImageData are supported\n\t\t\tif (ctx.getImageData && ctx.putImageData) {\n\t\t\t\tif (!cachedBackground) {\n\t\t\t\t\tdrawBackground();\n\t\t\t\t\tcachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);\n\t\t\t\t} else {\n\t\t\t\t\tctx.putImageData(cachedBackground, 0, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t\tdrawBackground();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.clear();\n\t\t}\n\n\t\tctx.lineCap = options.lineCap;\n\n\t\t// if barcolor is a function execute it and pass the percent as a value\n\t\tvar color;\n\t\tif (typeof(options.barColor) === 'function') {\n\t\t\tcolor = options.barColor(percent);\n\t\t} else {\n\t\t\tcolor = options.barColor;\n\t\t}\n\n\t\t// draw bar\n\t\tdrawCircle(color, options.lineWidth, percent / 100);\n\t}.bind(this);\n\n\t/**\n\t * Animate from some percent to some other percentage\n\t * @param {number} from Starting percentage\n\t * @param {number} to   Final percentage\n\t */\n\tthis.animate = function(from, to) {\n\t\tvar startTime = Date.now();\n\t\toptions.onStart(from, to);\n\t\tvar animation = function() {\n\t\t\tvar process = Math.min(Date.now() - startTime, options.animate.duration);\n\t\t\tvar currentValue = options.easing(this, process, from, to - from, options.animate.duration);\n\t\t\tthis.draw(currentValue);\n\t\t\toptions.onStep(from, to, currentValue);\n\t\t\tif (process >= options.animate.duration) {\n\t\t\t\toptions.onStop(from, to);\n\t\t\t} else {\n\t\t\t\treqAnimationFrame(animation);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treqAnimationFrame(animation);\n\t}.bind(this);\n};\n\nvar EasyPieChart = function(el, opts) {\n\tvar defaultOptions = {\n\t\tbarColor: '#ef1e25',\n\t\ttrackColor: '#f9f9f9',\n\t\tscaleColor: '#dfe0e0',\n\t\tscaleLength: 5,\n\t\tlineCap: 'round',\n\t\tlineWidth: 3,\n\t\ttrackWidth: undefined,\n\t\tsize: 110,\n\t\trotate: 0,\n\t\tanimate: {\n\t\t\tduration: 1000,\n\t\t\tenabled: true\n\t\t},\n\t\teasing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/\n\t\t\tt = t / (d/2);\n\t\t\tif (t < 1) {\n\t\t\t\treturn c / 2 * t * t + b;\n\t\t\t}\n\t\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t\t},\n\t\tonStart: function(from, to) {\n\t\t\treturn;\n\t\t},\n\t\tonStep: function(from, to, currentValue) {\n\t\t\treturn;\n\t\t},\n\t\tonStop: function(from, to) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\t// detect present renderer\n\tif (typeof(CanvasRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = CanvasRenderer;\n\t} else if (typeof(SVGRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = SVGRenderer;\n\t} else {\n\t\tthrow new Error('Please load either the SVG- or the CanvasRenderer');\n\t}\n\n\tvar options = {};\n\tvar currentValue = 0;\n\n\t/**\n\t * Initialize the plugin by creating the options object and initialize rendering\n\t */\n\tvar init = function() {\n\t\tthis.el = el;\n\t\tthis.options = options;\n\n\t\t// merge user options into default options\n\t\tfor (var i in defaultOptions) {\n\t\t\tif (defaultOptions.hasOwnProperty(i)) {\n\t\t\t\toptions[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];\n\t\t\t\tif (typeof(options[i]) === 'function') {\n\t\t\t\t\toptions[i] = options[i].bind(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// check for jQuery easing\n\t\tif (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {\n\t\t\toptions.easing = jQuery.easing[options.easing];\n\t\t} else {\n\t\t\toptions.easing = defaultOptions.easing;\n\t\t}\n\n\t\t// process earlier animate option to avoid bc breaks\n\t\tif (typeof(options.animate) === 'number') {\n\t\t\toptions.animate = {\n\t\t\t\tduration: options.animate,\n\t\t\t\tenabled: true\n\t\t\t};\n\t\t}\n\n\t\tif (typeof(options.animate) === 'boolean' && !options.animate) {\n\t\t\toptions.animate = {\n\t\t\t\tduration: 1000,\n\t\t\t\tenabled: options.animate\n\t\t\t};\n\t\t}\n\n\t\t// create renderer\n\t\tthis.renderer = new options.renderer(el, options);\n\n\t\t// initial draw\n\t\tthis.renderer.draw(currentValue);\n\n\t\t// initial update\n\t\tif (el.dataset && el.dataset.percent) {\n\t\t\tthis.update(parseFloat(el.dataset.percent));\n\t\t} else if (el.getAttribute && el.getAttribute('data-percent')) {\n\t\t\tthis.update(parseFloat(el.getAttribute('data-percent')));\n\t\t}\n\t}.bind(this);\n\n\t/**\n\t * Update the value of the chart\n\t * @param  {number} newValue Number between 0 and 100\n\t * @return {object}          Instance of the plugin for method chaining\n\t */\n\tthis.update = function(newValue) {\n\t\tnewValue = parseFloat(newValue);\n\t\tif (options.animate.enabled) {\n\t\t\tthis.renderer.animate(currentValue, newValue);\n\t\t} else {\n\t\t\tthis.renderer.draw(newValue);\n\t\t}\n\t\tcurrentValue = newValue;\n\t\treturn this;\n\t}.bind(this);\n\n\t/**\n\t * Disable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.disableAnimation = function() {\n\t\toptions.animate.enabled = false;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Enable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.enableAnimation = function() {\n\t\toptions.animate.enabled = true;\n\t\treturn this;\n\t};\n\n\tinit();\n};\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/dist/easypiechart.js",
    "content": "/**!\n * easyPieChart\n * Lightweight plugin to render simple, animated and retina optimized pie charts\n *\n * @license \n * @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)\n * @version 2.1.6\n **/\n\n(function(root, factory) {\n    if(typeof exports === 'object') {\n        module.exports = factory();\n    }\n    else if(typeof define === 'function' && define.amd) {\n        define([], factory);\n    }\n    else {\n        root['EasyPieChart'] = factory();\n    }\n}(this, function() {\n\n/**\n * Renderer to render the chart on a canvas object\n * @param {DOMElement} el      DOM element to host the canvas (root of the plugin)\n * @param {object}     options options object of the plugin\n */\nvar CanvasRenderer = function(el, options) {\n\tvar cachedBackground;\n\tvar canvas = document.createElement('canvas');\n\n\tel.appendChild(canvas);\n\n\tif (typeof(G_vmlCanvasManager) !== 'undefined') {\n\t\tG_vmlCanvasManager.initElement(canvas);\n\t}\n\n\tvar ctx = canvas.getContext('2d');\n\n\tcanvas.width = canvas.height = options.size;\n\n\t// canvas on retina devices\n\tvar scaleBy = 1;\n\tif (window.devicePixelRatio > 1) {\n\t\tscaleBy = window.devicePixelRatio;\n\t\tcanvas.style.width = canvas.style.height = [options.size, 'px'].join('');\n\t\tcanvas.width = canvas.height = options.size * scaleBy;\n\t\tctx.scale(scaleBy, scaleBy);\n\t}\n\n\t// move 0,0 coordinates to the center\n\tctx.translate(options.size / 2, options.size / 2);\n\n\t// rotate canvas -90deg\n\tctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);\n\n\tvar radius = (options.size - options.lineWidth) / 2;\n\tif (options.scaleColor && options.scaleLength) {\n\t\tradius -= options.scaleLength + 2; // 2 is the distance between scale and bar\n\t}\n\n\t// IE polyfill for Date\n\tDate.now = Date.now || function() {\n\t\treturn +(new Date());\n\t};\n\n\t/**\n\t * Draw a circle around the center of the canvas\n\t * @param {strong} color     Valid CSS color string\n\t * @param {number} lineWidth Width of the line in px\n\t * @param {number} percent   Percentage to draw (float between -1 and 1)\n\t */\n\tvar drawCircle = function(color, lineWidth, percent) {\n\t\tpercent = Math.min(Math.max(-1, percent || 0), 1);\n\t\tvar isNegative = percent <= 0 ? true : false;\n\n\t\tctx.beginPath();\n\t\tctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);\n\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = lineWidth;\n\n\t\tctx.stroke();\n\t};\n\n\t/**\n\t * Draw the scale of the chart\n\t */\n\tvar drawScale = function() {\n\t\tvar offset;\n\t\tvar length;\n\n\t\tctx.lineWidth = 1;\n\t\tctx.fillStyle = options.scaleColor;\n\n\t\tctx.save();\n\t\tfor (var i = 24; i > 0; --i) {\n\t\t\tif (i % 6 === 0) {\n\t\t\t\tlength = options.scaleLength;\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\tlength = options.scaleLength * 0.6;\n\t\t\t\toffset = options.scaleLength - length;\n\t\t\t}\n\t\t\tctx.fillRect(-options.size/2 + offset, 0, length, 1);\n\t\t\tctx.rotate(Math.PI / 12);\n\t\t}\n\t\tctx.restore();\n\t};\n\n\t/**\n\t * Request animation frame wrapper with polyfill\n\t * @return {function} Request animation frame method or timeout fallback\n\t */\n\tvar reqAnimationFrame = (function() {\n\t\treturn  window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\twindow.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t}());\n\n\t/**\n\t * Draw the background of the plugin including the scale and the track\n\t */\n\tvar drawBackground = function() {\n\t\tif(options.scaleColor) drawScale();\n\t\tif(options.trackColor) drawCircle(options.trackColor, options.trackWidth || options.lineWidth, 1);\n\t};\n\n  /**\n    * Canvas accessor\n   */\n  this.getCanvas = function() {\n    return canvas;\n  };\n\n  /**\n    * Canvas 2D context 'ctx' accessor\n   */\n  this.getCtx = function() {\n    return ctx;\n  };\n\n\t/**\n\t * Clear the complete canvas\n\t */\n\tthis.clear = function() {\n\t\tctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);\n\t};\n\n\t/**\n\t * Draw the complete chart\n\t * @param {number} percent Percent shown by the chart between -100 and 100\n\t */\n\tthis.draw = function(percent) {\n\t\t// do we need to render a background\n\t\tif (!!options.scaleColor || !!options.trackColor) {\n\t\t\t// getImageData and putImageData are supported\n\t\t\tif (ctx.getImageData && ctx.putImageData) {\n\t\t\t\tif (!cachedBackground) {\n\t\t\t\t\tdrawBackground();\n\t\t\t\t\tcachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);\n\t\t\t\t} else {\n\t\t\t\t\tctx.putImageData(cachedBackground, 0, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t\tdrawBackground();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.clear();\n\t\t}\n\n\t\tctx.lineCap = options.lineCap;\n\n\t\t// if barcolor is a function execute it and pass the percent as a value\n\t\tvar color;\n\t\tif (typeof(options.barColor) === 'function') {\n\t\t\tcolor = options.barColor(percent);\n\t\t} else {\n\t\t\tcolor = options.barColor;\n\t\t}\n\n\t\t// draw bar\n\t\tdrawCircle(color, options.lineWidth, percent / 100);\n\t}.bind(this);\n\n\t/**\n\t * Animate from some percent to some other percentage\n\t * @param {number} from Starting percentage\n\t * @param {number} to   Final percentage\n\t */\n\tthis.animate = function(from, to) {\n\t\tvar startTime = Date.now();\n\t\toptions.onStart(from, to);\n\t\tvar animation = function() {\n\t\t\tvar process = Math.min(Date.now() - startTime, options.animate.duration);\n\t\t\tvar currentValue = options.easing(this, process, from, to - from, options.animate.duration);\n\t\t\tthis.draw(currentValue);\n\t\t\toptions.onStep(from, to, currentValue);\n\t\t\tif (process >= options.animate.duration) {\n\t\t\t\toptions.onStop(from, to);\n\t\t\t} else {\n\t\t\t\treqAnimationFrame(animation);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treqAnimationFrame(animation);\n\t}.bind(this);\n};\n\nvar EasyPieChart = function(el, opts) {\n\tvar defaultOptions = {\n\t\tbarColor: '#ef1e25',\n\t\ttrackColor: '#f9f9f9',\n\t\tscaleColor: '#dfe0e0',\n\t\tscaleLength: 5,\n\t\tlineCap: 'round',\n\t\tlineWidth: 3,\n\t\ttrackWidth: undefined,\n\t\tsize: 110,\n\t\trotate: 0,\n\t\tanimate: {\n\t\t\tduration: 1000,\n\t\t\tenabled: true\n\t\t},\n\t\teasing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/\n\t\t\tt = t / (d/2);\n\t\t\tif (t < 1) {\n\t\t\t\treturn c / 2 * t * t + b;\n\t\t\t}\n\t\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t\t},\n\t\tonStart: function(from, to) {\n\t\t\treturn;\n\t\t},\n\t\tonStep: function(from, to, currentValue) {\n\t\t\treturn;\n\t\t},\n\t\tonStop: function(from, to) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\t// detect present renderer\n\tif (typeof(CanvasRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = CanvasRenderer;\n\t} else if (typeof(SVGRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = SVGRenderer;\n\t} else {\n\t\tthrow new Error('Please load either the SVG- or the CanvasRenderer');\n\t}\n\n\tvar options = {};\n\tvar currentValue = 0;\n\n\t/**\n\t * Initialize the plugin by creating the options object and initialize rendering\n\t */\n\tvar init = function() {\n\t\tthis.el = el;\n\t\tthis.options = options;\n\n\t\t// merge user options into default options\n\t\tfor (var i in defaultOptions) {\n\t\t\tif (defaultOptions.hasOwnProperty(i)) {\n\t\t\t\toptions[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];\n\t\t\t\tif (typeof(options[i]) === 'function') {\n\t\t\t\t\toptions[i] = options[i].bind(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// check for jQuery easing\n\t\tif (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {\n\t\t\toptions.easing = jQuery.easing[options.easing];\n\t\t} else {\n\t\t\toptions.easing = defaultOptions.easing;\n\t\t}\n\n\t\t// process earlier animate option to avoid bc breaks\n\t\tif (typeof(options.animate) === 'number') {\n\t\t\toptions.animate = {\n\t\t\t\tduration: options.animate,\n\t\t\t\tenabled: true\n\t\t\t};\n\t\t}\n\n\t\tif (typeof(options.animate) === 'boolean' && !options.animate) {\n\t\t\toptions.animate = {\n\t\t\t\tduration: 1000,\n\t\t\t\tenabled: options.animate\n\t\t\t};\n\t\t}\n\n\t\t// create renderer\n\t\tthis.renderer = new options.renderer(el, options);\n\n\t\t// initial draw\n\t\tthis.renderer.draw(currentValue);\n\n\t\t// initial update\n\t\tif (el.dataset && el.dataset.percent) {\n\t\t\tthis.update(parseFloat(el.dataset.percent));\n\t\t} else if (el.getAttribute && el.getAttribute('data-percent')) {\n\t\t\tthis.update(parseFloat(el.getAttribute('data-percent')));\n\t\t}\n\t}.bind(this);\n\n\t/**\n\t * Update the value of the chart\n\t * @param  {number} newValue Number between 0 and 100\n\t * @return {object}          Instance of the plugin for method chaining\n\t */\n\tthis.update = function(newValue) {\n\t\tnewValue = parseFloat(newValue);\n\t\tif (options.animate.enabled) {\n\t\t\tthis.renderer.animate(currentValue, newValue);\n\t\t} else {\n\t\t\tthis.renderer.draw(newValue);\n\t\t}\n\t\tcurrentValue = newValue;\n\t\treturn this;\n\t}.bind(this);\n\n\t/**\n\t * Disable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.disableAnimation = function() {\n\t\toptions.animate.enabled = false;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Enable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.enableAnimation = function() {\n\t\toptions.animate.enabled = true;\n\t\treturn this;\n\t};\n\n\tinit();\n};\n\n\nreturn EasyPieChart;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/dist/jquery.easypiechart.js",
    "content": "/**!\n * easyPieChart\n * Lightweight plugin to render simple, animated and retina optimized pie charts\n *\n * @license \n * @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)\n * @version 2.1.6\n **/\n\n(function(root, factory) {\n    if(typeof exports === 'object') {\n        module.exports = factory(require('jquery'));\n    }\n    else if(typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    }\n    else {\n        factory(root.jQuery);\n    }\n}(this, function($) {\n\n/**\n * Renderer to render the chart on a canvas object\n * @param {DOMElement} el      DOM element to host the canvas (root of the plugin)\n * @param {object}     options options object of the plugin\n */\nvar CanvasRenderer = function(el, options) {\n\tvar cachedBackground;\n\tvar canvas = document.createElement('canvas');\n\n\tel.appendChild(canvas);\n\n\tif (typeof(G_vmlCanvasManager) !== 'undefined') {\n\t\tG_vmlCanvasManager.initElement(canvas);\n\t}\n\n\tvar ctx = canvas.getContext('2d');\n\n\tcanvas.width = canvas.height = options.size;\n\n\t// canvas on retina devices\n\tvar scaleBy = 1;\n\tif (window.devicePixelRatio > 1) {\n\t\tscaleBy = window.devicePixelRatio;\n\t\tcanvas.style.width = canvas.style.height = [options.size, 'px'].join('');\n\t\tcanvas.width = canvas.height = options.size * scaleBy;\n\t\tctx.scale(scaleBy, scaleBy);\n\t}\n\n\t// move 0,0 coordinates to the center\n\tctx.translate(options.size / 2, options.size / 2);\n\n\t// rotate canvas -90deg\n\tctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);\n\n\tvar radius = (options.size - options.lineWidth) / 2;\n\tif (options.scaleColor && options.scaleLength) {\n\t\tradius -= options.scaleLength + 2; // 2 is the distance between scale and bar\n\t}\n\n\t// IE polyfill for Date\n\tDate.now = Date.now || function() {\n\t\treturn +(new Date());\n\t};\n\n\t/**\n\t * Draw a circle around the center of the canvas\n\t * @param {strong} color     Valid CSS color string\n\t * @param {number} lineWidth Width of the line in px\n\t * @param {number} percent   Percentage to draw (float between -1 and 1)\n\t */\n\tvar drawCircle = function(color, lineWidth, percent) {\n\t\tpercent = Math.min(Math.max(-1, percent || 0), 1);\n\t\tvar isNegative = percent <= 0 ? true : false;\n\n\t\tctx.beginPath();\n\t\tctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);\n\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = lineWidth;\n\n\t\tctx.stroke();\n\t};\n\n\t/**\n\t * Draw the scale of the chart\n\t */\n\tvar drawScale = function() {\n\t\tvar offset;\n\t\tvar length;\n\n\t\tctx.lineWidth = 1;\n\t\tctx.fillStyle = options.scaleColor;\n\n\t\tctx.save();\n\t\tfor (var i = 24; i > 0; --i) {\n\t\t\tif (i % 6 === 0) {\n\t\t\t\tlength = options.scaleLength;\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\tlength = options.scaleLength * 0.6;\n\t\t\t\toffset = options.scaleLength - length;\n\t\t\t}\n\t\t\tctx.fillRect(-options.size/2 + offset, 0, length, 1);\n\t\t\tctx.rotate(Math.PI / 12);\n\t\t}\n\t\tctx.restore();\n\t};\n\n\t/**\n\t * Request animation frame wrapper with polyfill\n\t * @return {function} Request animation frame method or timeout fallback\n\t */\n\tvar reqAnimationFrame = (function() {\n\t\treturn  window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\twindow.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t}());\n\n\t/**\n\t * Draw the background of the plugin including the scale and the track\n\t */\n\tvar drawBackground = function() {\n\t\tif(options.scaleColor) drawScale();\n\t\tif(options.trackColor) drawCircle(options.trackColor, options.trackWidth || options.lineWidth, 1);\n\t};\n\n  /**\n    * Canvas accessor\n   */\n  this.getCanvas = function() {\n    return canvas;\n  };\n\n  /**\n    * Canvas 2D context 'ctx' accessor\n   */\n  this.getCtx = function() {\n    return ctx;\n  };\n\n\t/**\n\t * Clear the complete canvas\n\t */\n\tthis.clear = function() {\n\t\tctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);\n\t};\n\n\t/**\n\t * Draw the complete chart\n\t * @param {number} percent Percent shown by the chart between -100 and 100\n\t */\n\tthis.draw = function(percent) {\n\t\t// do we need to render a background\n\t\tif (!!options.scaleColor || !!options.trackColor) {\n\t\t\t// getImageData and putImageData are supported\n\t\t\tif (ctx.getImageData && ctx.putImageData) {\n\t\t\t\tif (!cachedBackground) {\n\t\t\t\t\tdrawBackground();\n\t\t\t\t\tcachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);\n\t\t\t\t} else {\n\t\t\t\t\tctx.putImageData(cachedBackground, 0, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t\tdrawBackground();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.clear();\n\t\t}\n\n\t\tctx.lineCap = options.lineCap;\n\n\t\t// if barcolor is a function execute it and pass the percent as a value\n\t\tvar color;\n\t\tif (typeof(options.barColor) === 'function') {\n\t\t\tcolor = options.barColor(percent);\n\t\t} else {\n\t\t\tcolor = options.barColor;\n\t\t}\n\n\t\t// draw bar\n\t\tdrawCircle(color, options.lineWidth, percent / 100);\n\t}.bind(this);\n\n\t/**\n\t * Animate from some percent to some other percentage\n\t * @param {number} from Starting percentage\n\t * @param {number} to   Final percentage\n\t */\n\tthis.animate = function(from, to) {\n\t\tvar startTime = Date.now();\n\t\toptions.onStart(from, to);\n\t\tvar animation = function() {\n\t\t\tvar process = Math.min(Date.now() - startTime, options.animate.duration);\n\t\t\tvar currentValue = options.easing(this, process, from, to - from, options.animate.duration);\n\t\t\tthis.draw(currentValue);\n\t\t\toptions.onStep(from, to, currentValue);\n\t\t\tif (process >= options.animate.duration) {\n\t\t\t\toptions.onStop(from, to);\n\t\t\t} else {\n\t\t\t\treqAnimationFrame(animation);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treqAnimationFrame(animation);\n\t}.bind(this);\n};\n\nvar EasyPieChart = function(el, opts) {\n\tvar defaultOptions = {\n\t\tbarColor: '#ef1e25',\n\t\ttrackColor: '#f9f9f9',\n\t\tscaleColor: '#dfe0e0',\n\t\tscaleLength: 5,\n\t\tlineCap: 'round',\n\t\tlineWidth: 3,\n\t\ttrackWidth: undefined,\n\t\tsize: 110,\n\t\trotate: 0,\n\t\tanimate: {\n\t\t\tduration: 1000,\n\t\t\tenabled: true\n\t\t},\n\t\teasing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/\n\t\t\tt = t / (d/2);\n\t\t\tif (t < 1) {\n\t\t\t\treturn c / 2 * t * t + b;\n\t\t\t}\n\t\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t\t},\n\t\tonStart: function(from, to) {\n\t\t\treturn;\n\t\t},\n\t\tonStep: function(from, to, currentValue) {\n\t\t\treturn;\n\t\t},\n\t\tonStop: function(from, to) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\t// detect present renderer\n\tif (typeof(CanvasRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = CanvasRenderer;\n\t} else if (typeof(SVGRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = SVGRenderer;\n\t} else {\n\t\tthrow new Error('Please load either the SVG- or the CanvasRenderer');\n\t}\n\n\tvar options = {};\n\tvar currentValue = 0;\n\n\t/**\n\t * Initialize the plugin by creating the options object and initialize rendering\n\t */\n\tvar init = function() {\n\t\tthis.el = el;\n\t\tthis.options = options;\n\n\t\t// merge user options into default options\n\t\tfor (var i in defaultOptions) {\n\t\t\tif (defaultOptions.hasOwnProperty(i)) {\n\t\t\t\toptions[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];\n\t\t\t\tif (typeof(options[i]) === 'function') {\n\t\t\t\t\toptions[i] = options[i].bind(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// check for jQuery easing\n\t\tif (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {\n\t\t\toptions.easing = jQuery.easing[options.easing];\n\t\t} else {\n\t\t\toptions.easing = defaultOptions.easing;\n\t\t}\n\n\t\t// process earlier animate option to avoid bc breaks\n\t\tif (typeof(options.animate) === 'number') {\n\t\t\toptions.animate = {\n\t\t\t\tduration: options.animate,\n\t\t\t\tenabled: true\n\t\t\t};\n\t\t}\n\n\t\tif (typeof(options.animate) === 'boolean' && !options.animate) {\n\t\t\toptions.animate = {\n\t\t\t\tduration: 1000,\n\t\t\t\tenabled: options.animate\n\t\t\t};\n\t\t}\n\n\t\t// create renderer\n\t\tthis.renderer = new options.renderer(el, options);\n\n\t\t// initial draw\n\t\tthis.renderer.draw(currentValue);\n\n\t\t// initial update\n\t\tif (el.dataset && el.dataset.percent) {\n\t\t\tthis.update(parseFloat(el.dataset.percent));\n\t\t} else if (el.getAttribute && el.getAttribute('data-percent')) {\n\t\t\tthis.update(parseFloat(el.getAttribute('data-percent')));\n\t\t}\n\t}.bind(this);\n\n\t/**\n\t * Update the value of the chart\n\t * @param  {number} newValue Number between 0 and 100\n\t * @return {object}          Instance of the plugin for method chaining\n\t */\n\tthis.update = function(newValue) {\n\t\tnewValue = parseFloat(newValue);\n\t\tif (options.animate.enabled) {\n\t\t\tthis.renderer.animate(currentValue, newValue);\n\t\t} else {\n\t\t\tthis.renderer.draw(newValue);\n\t\t}\n\t\tcurrentValue = newValue;\n\t\treturn this;\n\t}.bind(this);\n\n\t/**\n\t * Disable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.disableAnimation = function() {\n\t\toptions.animate.enabled = false;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Enable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.enableAnimation = function() {\n\t\toptions.animate.enabled = true;\n\t\treturn this;\n\t};\n\n\tinit();\n};\n\n$.fn.easyPieChart = function(options) {\n\treturn this.each(function() {\n\t\tvar instanceOptions;\n\n\t\tif (!$.data(this, 'easyPieChart')) {\n\t\t\tinstanceOptions = $.extend({}, options, $(this).data());\n\t\t\t$.data(this, 'easyPieChart', new EasyPieChart(this, instanceOptions));\n\t\t}\n\t});\n};\n\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/src/angular.directive.js",
    "content": "(function (angular) {\n\n\t'use strict';\n\n\treturn angular.module('easypiechart', [])\n\n\t\t.directive('easypiechart', [function() {\n\t\t\treturn {\n\t\t\t\trestrict: 'A',\n\t\t\t\trequire: '?ngModel',\n\t\t\t\tscope: {\n\t\t\t\t\tpercent: '=',\n\t\t\t\t\toptions: '='\n\t\t\t\t},\n\t\t\t\tlink: function (scope, element, attrs) {\n\n\t\t\t\t\tscope.percent = scope.percent || 0;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * default easy pie chart options\n\t\t\t\t\t * @type {Object}\n\t\t\t\t\t */\n\t\t\t\t\tvar options = {\n\t\t\t\t\t\tbarColor: '#ef1e25',\n\t\t\t\t\t\ttrackColor: '#f9f9f9',\n\t\t\t\t\t\tscaleColor: '#dfe0e0',\n\t\t\t\t\t\tscaleLength: 5,\n\t\t\t\t\t\tlineCap: 'round',\n\t\t\t\t\t\tlineWidth: 3,\n\t\t\t\t\t\tsize: 110,\n\t\t\t\t\t\trotate: 0,\n\t\t\t\t\t\tanimate: {\n\t\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tscope.options = angular.extend(options, scope.options);\n\n\t\t\t\t\tvar pieChart = new EasyPieChart(element[0], options);\n\n\t\t\t\t\tscope.$watch('percent', function(newVal, oldVal) {\n\t\t\t\t\t\tpieChart.update(newVal);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t}]);\n\n})(angular);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/src/easypiechart.js",
    "content": "var EasyPieChart = function(el, opts) {\n\tvar defaultOptions = {\n\t\tbarColor: '#ef1e25',\n\t\ttrackColor: '#f9f9f9',\n\t\tscaleColor: '#dfe0e0',\n\t\tscaleLength: 5,\n\t\tlineCap: 'round',\n\t\tlineWidth: 3,\n\t\ttrackWidth: undefined,\n\t\tsize: 110,\n\t\trotate: 0,\n\t\tanimate: {\n\t\t\tduration: 1000,\n\t\t\tenabled: true\n\t\t},\n\t\teasing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/\n\t\t\tt = t / (d/2);\n\t\t\tif (t < 1) {\n\t\t\t\treturn c / 2 * t * t + b;\n\t\t\t}\n\t\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t\t},\n\t\tonStart: function(from, to) {\n\t\t\treturn;\n\t\t},\n\t\tonStep: function(from, to, currentValue) {\n\t\t\treturn;\n\t\t},\n\t\tonStop: function(from, to) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\t// detect present renderer\n\tif (typeof(CanvasRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = CanvasRenderer;\n\t} else if (typeof(SVGRenderer) !== 'undefined') {\n\t\tdefaultOptions.renderer = SVGRenderer;\n\t} else {\n\t\tthrow new Error('Please load either the SVG- or the CanvasRenderer');\n\t}\n\n\tvar options = {};\n\tvar currentValue = 0;\n\n\t/**\n\t * Initialize the plugin by creating the options object and initialize rendering\n\t */\n\tvar init = function() {\n\t\tthis.el = el;\n\t\tthis.options = options;\n\n\t\t// merge user options into default options\n\t\tfor (var i in defaultOptions) {\n\t\t\tif (defaultOptions.hasOwnProperty(i)) {\n\t\t\t\toptions[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];\n\t\t\t\tif (typeof(options[i]) === 'function') {\n\t\t\t\t\toptions[i] = options[i].bind(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// check for jQuery easing\n\t\tif (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {\n\t\t\toptions.easing = jQuery.easing[options.easing];\n\t\t} else {\n\t\t\toptions.easing = defaultOptions.easing;\n\t\t}\n\n\t\t// process earlier animate option to avoid bc breaks\n\t\tif (typeof(options.animate) === 'number') {\n\t\t\toptions.animate = {\n\t\t\t\tduration: options.animate,\n\t\t\t\tenabled: true\n\t\t\t};\n\t\t}\n\n\t\tif (typeof(options.animate) === 'boolean' && !options.animate) {\n\t\t\toptions.animate = {\n\t\t\t\tduration: 1000,\n\t\t\t\tenabled: options.animate\n\t\t\t};\n\t\t}\n\n\t\t// create renderer\n\t\tthis.renderer = new options.renderer(el, options);\n\n\t\t// initial draw\n\t\tthis.renderer.draw(currentValue);\n\n\t\t// initial update\n\t\tif (el.dataset && el.dataset.percent) {\n\t\t\tthis.update(parseFloat(el.dataset.percent));\n\t\t} else if (el.getAttribute && el.getAttribute('data-percent')) {\n\t\t\tthis.update(parseFloat(el.getAttribute('data-percent')));\n\t\t}\n\t}.bind(this);\n\n\t/**\n\t * Update the value of the chart\n\t * @param  {number} newValue Number between 0 and 100\n\t * @return {object}          Instance of the plugin for method chaining\n\t */\n\tthis.update = function(newValue) {\n\t\tnewValue = parseFloat(newValue);\n\t\tif (options.animate.enabled) {\n\t\t\tthis.renderer.animate(currentValue, newValue);\n\t\t} else {\n\t\t\tthis.renderer.draw(newValue);\n\t\t}\n\t\tcurrentValue = newValue;\n\t\treturn this;\n\t}.bind(this);\n\n\t/**\n\t * Disable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.disableAnimation = function() {\n\t\toptions.animate.enabled = false;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Enable animation\n\t * @return {object} Instance of the plugin for method chaining\n\t */\n\tthis.enableAnimation = function() {\n\t\toptions.animate.enabled = true;\n\t\treturn this;\n\t};\n\n\tinit();\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/src/jquery.plugin.js",
    "content": "$.fn.easyPieChart = function(options) {\n\treturn this.each(function() {\n\t\tvar instanceOptions;\n\n\t\tif (!$.data(this, 'easyPieChart')) {\n\t\t\tinstanceOptions = $.extend({}, options, $(this).data());\n\t\t\t$.data(this, 'easyPieChart', new EasyPieChart(this, instanceOptions));\n\t\t}\n\t});\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.easy-pie-chart/src/renderer/canvas.js",
    "content": "/**\n * Renderer to render the chart on a canvas object\n * @param {DOMElement} el      DOM element to host the canvas (root of the plugin)\n * @param {object}     options options object of the plugin\n */\nvar CanvasRenderer = function(el, options) {\n\tvar cachedBackground;\n\tvar canvas = document.createElement('canvas');\n\n\tel.appendChild(canvas);\n\n\tif (typeof(G_vmlCanvasManager) !== 'undefined') {\n\t\tG_vmlCanvasManager.initElement(canvas);\n\t}\n\n\tvar ctx = canvas.getContext('2d');\n\n\tcanvas.width = canvas.height = options.size;\n\n\t// canvas on retina devices\n\tvar scaleBy = 1;\n\tif (window.devicePixelRatio > 1) {\n\t\tscaleBy = window.devicePixelRatio;\n\t\tcanvas.style.width = canvas.style.height = [options.size, 'px'].join('');\n\t\tcanvas.width = canvas.height = options.size * scaleBy;\n\t\tctx.scale(scaleBy, scaleBy);\n\t}\n\n\t// move 0,0 coordinates to the center\n\tctx.translate(options.size / 2, options.size / 2);\n\n\t// rotate canvas -90deg\n\tctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);\n\n\tvar radius = (options.size - options.lineWidth) / 2;\n\tif (options.scaleColor && options.scaleLength) {\n\t\tradius -= options.scaleLength + 2; // 2 is the distance between scale and bar\n\t}\n\n\t// IE polyfill for Date\n\tDate.now = Date.now || function() {\n\t\treturn +(new Date());\n\t};\n\n\t/**\n\t * Draw a circle around the center of the canvas\n\t * @param {strong} color     Valid CSS color string\n\t * @param {number} lineWidth Width of the line in px\n\t * @param {number} percent   Percentage to draw (float between -1 and 1)\n\t */\n\tvar drawCircle = function(color, lineWidth, percent) {\n\t\tpercent = Math.min(Math.max(-1, percent || 0), 1);\n\t\tvar isNegative = percent <= 0 ? true : false;\n\n\t\tctx.beginPath();\n\t\tctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);\n\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = lineWidth;\n\n\t\tctx.stroke();\n\t};\n\n\t/**\n\t * Draw the scale of the chart\n\t */\n\tvar drawScale = function() {\n\t\tvar offset;\n\t\tvar length;\n\n\t\tctx.lineWidth = 1;\n\t\tctx.fillStyle = options.scaleColor;\n\n\t\tctx.save();\n\t\tfor (var i = 24; i > 0; --i) {\n\t\t\tif (i % 6 === 0) {\n\t\t\t\tlength = options.scaleLength;\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\tlength = options.scaleLength * 0.6;\n\t\t\t\toffset = options.scaleLength - length;\n\t\t\t}\n\t\t\tctx.fillRect(-options.size/2 + offset, 0, length, 1);\n\t\t\tctx.rotate(Math.PI / 12);\n\t\t}\n\t\tctx.restore();\n\t};\n\n\t/**\n\t * Request animation frame wrapper with polyfill\n\t * @return {function} Request animation frame method or timeout fallback\n\t */\n\tvar reqAnimationFrame = (function() {\n\t\treturn  window.requestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\tfunction(callback) {\n\t\t\t\t\twindow.setTimeout(callback, 1000 / 60);\n\t\t\t\t};\n\t}());\n\n\t/**\n\t * Draw the background of the plugin including the scale and the track\n\t */\n\tvar drawBackground = function() {\n\t\tif(options.scaleColor) drawScale();\n\t\tif(options.trackColor) drawCircle(options.trackColor, options.trackWidth || options.lineWidth, 1);\n\t};\n\n  /**\n    * Canvas accessor\n   */\n  this.getCanvas = function() {\n    return canvas;\n  };\n\n  /**\n    * Canvas 2D context 'ctx' accessor\n   */\n  this.getCtx = function() {\n    return ctx;\n  };\n\n\t/**\n\t * Clear the complete canvas\n\t */\n\tthis.clear = function() {\n\t\tctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);\n\t};\n\n\t/**\n\t * Draw the complete chart\n\t * @param {number} percent Percent shown by the chart between -100 and 100\n\t */\n\tthis.draw = function(percent) {\n\t\t// do we need to render a background\n\t\tif (!!options.scaleColor || !!options.trackColor) {\n\t\t\t// getImageData and putImageData are supported\n\t\t\tif (ctx.getImageData && ctx.putImageData) {\n\t\t\t\tif (!cachedBackground) {\n\t\t\t\t\tdrawBackground();\n\t\t\t\t\tcachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);\n\t\t\t\t} else {\n\t\t\t\t\tctx.putImageData(cachedBackground, 0, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t\tdrawBackground();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.clear();\n\t\t}\n\n\t\tctx.lineCap = options.lineCap;\n\n\t\t// if barcolor is a function execute it and pass the percent as a value\n\t\tvar color;\n\t\tif (typeof(options.barColor) === 'function') {\n\t\t\tcolor = options.barColor(percent);\n\t\t} else {\n\t\t\tcolor = options.barColor;\n\t\t}\n\n\t\t// draw bar\n\t\tdrawCircle(color, options.lineWidth, percent / 100);\n\t}.bind(this);\n\n\t/**\n\t * Animate from some percent to some other percentage\n\t * @param {number} from Starting percentage\n\t * @param {number} to   Final percentage\n\t */\n\tthis.animate = function(from, to) {\n\t\tvar startTime = Date.now();\n\t\toptions.onStart(from, to);\n\t\tvar animation = function() {\n\t\t\tvar process = Math.min(Date.now() - startTime, options.animate.duration);\n\t\t\tvar currentValue = options.easing(this, process, from, to - from, options.animate.duration);\n\t\t\tthis.draw(currentValue);\n\t\t\toptions.onStep(from, to, currentValue);\n\t\t\tif (process >= options.animate.duration) {\n\t\t\t\toptions.onStop(from, to);\n\t\t\t} else {\n\t\t\t\treqAnimationFrame(animation);\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treqAnimationFrame(animation);\n\t}.bind(this);\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/assets/fonts/jquery.filer-icons/jquery-filer-preview.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>jquery-filer glyphs preview</title>\n\n    <style>\n      /* Page Styles */\n\n      * {\n        -moz-box-sizing: border-box;\n        -webkit-box-sizing: border-box;\n        box-sizing: border-box;\n        margin: 0;\n        padding: 0;\n      }\n\n      body {\n        background: #fff;\n        color: #444;\n        font: 16px/1.5 \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n      }\n\n      a,\n      a:visited {\n        color: #888;\n        text-decoration: underline;\n      }\n      a:hover,\n      a:focus { color: #000; }\n\n      header {\n        border-bottom: 2px solid #ddd;\n        margin-bottom: 20px;\n        overflow: hidden;\n        padding: 20px 0;\n      }\n\n      header h1 {\n        color: #888;\n        float: left;\n        font-size: 36px;\n        font-weight: 300;\n      }\n\n      header a {\n        float: right;\n        font-size: 14px;\n      }\n\n      .container {\n        margin: 0 auto;\n        max-width: 1200px;\n        min-width: 960px;\n        padding: 0 40px;\n        width: 90%;\n      }\n\n      .glyph {\n        border-bottom: 1px dotted #ccc;\n        padding: 10px 0 20px;\n        margin-bottom: 20px;\n      }\n\n      .preview-glyphs { vertical-align: bottom; }\n\n      .preview-scale {\n        color: #888;\n        font-size: 12px;\n        margin-top: 5px;\n      }\n\n      .step {\n        display: inline-block;\n        line-height: 1;\n        position: relative;\n        width: 10%;\n      }\n\n      .step .letters,\n      .step i {\n        -webkit-transition: opacity .3s;\n        -moz-transition: opacity .3s;\n        -ms-transition: opacity .3s;\n        -o-transition: opacity .3s;\n        transition: opacity .3s;\n      }\n\n      .step:hover .letters { opacity: 1; }\n      .step:hover i { opacity: .3; }\n\n      .letters {\n        opacity: .3;\n        position: absolute;\n      }\n\n      .characters-off .letters { display: none; }\n      .characters-off .step:hover i { opacity: 1; }\n\n      \n      .size-12 { font-size: 12px; }\n      \n      .size-14 { font-size: 14px; }\n      \n      .size-16 { font-size: 16px; }\n      \n      .size-18 { font-size: 18px; }\n      \n      .size-21 { font-size: 21px; }\n      \n      .size-24 { font-size: 24px; }\n      \n      .size-36 { font-size: 36px; }\n      \n      .size-48 { font-size: 48px; }\n      \n      .size-60 { font-size: 60px; }\n      \n      .size-72 { font-size: 72px; }\n      \n\n      .usage { margin-top: 10px; }\n\n      .usage input {\n        font-family: monospace;\n        margin-right: 3px;\n        padding: 2px 5px;\n        text-align: center;\n      }\n\n      .usage .point { width: 150px; }\n\n      .usage .class { width: 250px; }\n\n      footer {\n        color: #888;\n        font-size: 12px;\n        padding: 20px 0;\n      }\n\n      /* Icon Font: jquery-filer */\n\n      @font-face {\n  font-family: \"jquery-filer\";\n  src: url(\"./jquery-filer.eot\");\n  src: url(\"./jquery-filer.eot?#iefix\") format(\"embedded-opentype\"),\n       url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABY8AA0AAAAAJGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAWIAAAABoAAAAcbgWsnk9TLzIAAAGgAAAASgAAAGBDMGCrY21hcAAAAjgAAAB2AAABir/jw6BjdnQgAAACsAAAAAQAAAAEABEBRGdhc3AAABYYAAAACAAAAAj//wADZ2x5ZgAAAxwAABDDAAAbVDwbM1RoZWFkAAABMAAAADAAAAA2AudKS2hoZWEAAAFgAAAAIAAAACQD8QHEaG10eAAAAewAAABLAAAAbgpuBLZsb2NhAAACtAAAAGgAAABonHCkGm1heHAAAAGAAAAAIAAAACAAgQDCbmFtZQAAE+AAAAFmAAACwZhqioJwb3N0AAAVSAAAAM8AAAIIqeejRXjaY2BkYGAA4ogbscvj+W2+MnAzMYDAhScsz2H0////9zMxMh4EcjkYwNIAbNUNrHjaY2BkYGA8+H8/gx4Tw///DAxMjAxAERTAAgB/egS4AAEAAAAzAJEADAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYWJg/MLAysDA6MOYxsDA4A6lvzJIMrQwMDAxsHEywIEAgskQkOaawnDg07fPLowH/h9g0GM8yOAIFGZEUqLAwAgAW4ENdAAAeNpjYmAQZAACJgi2Y1BgcAAyVYC4ASQO5IFEHBiyweI2QNIGzFIAQgaGE0C2CpClzCAHhBD1DgwLwKQDQyBQbAZYNQTYAAC2kQkrAHja3YxNCoNADIXfOGUUnEDtQlwobnuQHqYH6Xm7yAMRReLUigvpCfpBEt4PAeDxnRYOH15JuU1f8Ey3xjU5QUedCXrmFN7YsOfDDNBBZ7XNL1mxZse7mYiUUkgQL4hLnOIQ3/v/H7iAI3RZWtm5gL9nBYpEIu8AAAARAUQAAAAqACoAKgBSAJ4AvgEGAUQBfAGqAkACeAKyAwwDPAN+A7gEDASUBLIE8gUgBVgFmgX8BjYGhga2BvoHSAeeB/AIHAhiCLII5AkcCYIJwgoSCi4KWgqyCuALNguYDGwMvAzwDUINqnjanVl7jNzGeZ+Pr1lyd0nuckne7d5x38t7P3aXy3vsPSRLOkknyVIiy3q4tlzbkuw6tRoHidTW8cVwYBVF28SxdQ5gNIpTCwWaJrJRGW5go+fHH0VRIEbkPwo0CGQjRV0kQa0U7R+tQfUbcu+0d3KMonviPD7OcGa+5+8bEY6kCCHfhrsITygZewXIePtVKpBf1V+RxJ+2X+U5bJJXeEYWGflVKsEn7VeB0RupRsptpMqpC185dQruCv4qBQ38GpB5Uoa3YT+xsJfROKk0ztWaC9Cq58FnBbxNr5ZohpZOUMrqvX/BOtCXkV4rSRJSsUfp3pexjV/gSYEU4Dos4l6LZJKQas21zIxUqnlNX6IO1Fu1Zq1cksyMVW95zVajbmWoCqWaW2v681C3bFirTWvb79muTdeKD33poW9RMT9KFepY4j+L5S8//eWyGFVXZvuzztj27WNOtn+2MTf3pwodzYuUipazT5dndu6alnV5etfOGRKec5EYsAZfYDzEVUw86jjUwg3YLbhrZKH4XDy+6iyMeIUCfGFhdLRwMR7/dn54dGFoKJxPyBGOwG5SZ3ySyqVxaJZddpKM1aj7pm/TMlJr4Qe9PCCxxQ6qgesjiSNLk9MVgC/kBqueVx3J9do9UJmZXFqa9CrcY7lhRh3I9dt9FX8S4MFdwwDPON5erwR5Iz+y68GlAeD+qIiE/opRGSQiqdz8OXwALxGFqCSN0svjJpGVQH2UnQ227/qdx27hSXEjNryfTAb//udNSCXcRPA3xuxMevHlBXPBWngkHh8SkoK1CI8kazjG+w6kcOyLRmamZ+HlRXPRWjTZEMFaIIQj5OZPkBc/wHWrhPhlr2HOAwrSpmOADKENu2GWPRXbNdd38E3LL1+96thPHLhzxew3Htu55/f0Jy9uJfz46h/uuefk/tgdh+/Z1e5q43orRIcVOEuSJEdIJaMBaikgq2dRnTLSMGpPR2NhRTwrJvBRpOuSEhYR4SIjsqZyJKEoUYfpBXfz5s01DmCNjJNThIhm0ZsH30NtdGstvzYHbZjn/AkfC5SrRSV8sMQ/0wGxOAbj4PmtBWhM4LSWR/2WW8O6Ngwq4CAV+iGTB9eyrTxn5cFECkcCAmePmKoqU14BUTFVXlSy6dhRU6Ax3EsqHtPV9OHHgiKsyQ/uVqWUysc5AXiV5wBbyTtoKiEoKZ1yvA68KMqcakjJPacmNW3+XrVmDNKM3k8VOa5qvWqCE5REHGbjaTMjJ7WSHaumh5L3jY3vkrnPiYlBhadCTIIeTezro+BCTDaAS+cTSd0SJCnOcbHhpHAI5F2ocwR5RVDn4kQjBrFJGXWukSqmGqgB+FAsivhAqtgLRa+MShA+cPl4QI6fuHhiLh98nIfloA3vtrHbhqdZ08FfG3/BcUgG/wHDvzWHPyYbtFmCNrsSrVRtRmrssgL9R2hjCzAPGXQfY9BkzgO+JlpiUjw1hYUlisdFiYrPiAvNo2eONbA4+lFMQPJDUyK+pVQ4LuLbNL5rHDtztNkM1yzcvI7+6yRa1Cz2Syqgp8ozWaKUbVxxHpo1K8OU22VqwHS82aot8POiPwZetIvGqWPNSgH1JF5z4lpKaxxrNg+3T8+l0/VtSR0ECQA44DgugYoa49zR9unfPw2L5dlSXyOd7LFMPadwXHl2x+zk0T3D3IgucKIIApvBcaqoJtKKta02smd4eN23FeAS8olxyWQGYUZWMcdMcA6YoXihtVj9zE7hkqqcUZUJRT2jqF3Nj26jsGaXHMpoJaTqNVG9w6Ik9TODRx23ZhmfmD3OAeNRt0zOKtKiIhUkZZGZ5Ebz4IZUrtz2jjX3dssFyO+QHDwPO9kZ1z0AjdzAAqpEd8SyMszXPSeVYhlp714pE8M4hfWW/n0Ytz6Nvt7v1r9h4kf6h6bNtDB062EZ6iG9pY32p+jkfeLoaKhwEmugRqIK3ka5f4MbFz5rWIfyeDdvKLNLlP8a2uUo7nQb2U+OkYcIKUTCZ1LPGGEplVORZnip2xTDRcuNhGqgSUfCNMIgVgyDXLrra1ZXG1xVllX5YNIwktXc9VyVNU7iv6SxclKmi1ReC64byetJQ6eyTIM1Vt4dzlkKS5mGpDUKXzGShaQR4DeqOSiEnQL7WkHX2dzgYSgE+B0D9svhzGBtY+6tAjFIG/nxLvJDQN4kUYY2Hsg2G1BMMW9U/m5w7sYDwT/AvtWrsHYpuMSR5gPBVRhdjWReQJmfJDoZCJGCBiqHHKih2FuNql1s+UyqszDDOZztAOMd/CBBIQGcEgveScQgCTQBR7ngLzmBU3hlWZZiPC9xiUTqz2IUSEz5kRRDFX9dUSaL5hClPM9RPiFKzJalLXtPEZP0bj2Bje6W4uPis+k0r88MnT00svlMTz76qDA2lm80kC+RPj9FZIzcJabRLmUejaM+KjPzdJWMypXGuOY8V3cALlhvlAb66hXrv98sDVYXKrDbaS4dWGo6UfXWQPENy6o0xt+wKwvVwYMHdjedfGN3NCD0pYRMYby4G1cbCnmJ+ldkSLBlM7xgt+wNjMSAVKdCVYMVb3nZCz4cnG4P6rtHZoZ6swMzMwM9djxWalRn40KSCn0DA30wtfzwvpmBoRlusD4U/2D60HRCkt2RSpKDgSmXRP4cV74OXyMxsoRYBQERdTEm+QwCoiV4TMtR7ctu02t2bULj1MihmeVww3644RDl4Ly34nuXE76+WhqfKD10v5Bza33a7FDfZFJS5bjey4Ns9Y04J07UmqUcX7LUhDpdmtgJb8SXl+OtX//aapRKk7rb1zcENDk4U8gmJdHWZT7m9uRHdK/qjMuWIzmVHRPAhb5vPSZVme/bCD3SlsjDMdd+fSPMCHRrlKm0Pzc2d/qX6yEFpNtjSqE93Dscye7mRyi7b5Ex5vtIyKvGp4trg0kdqTbqPOOyj2rKkWXv85/vkl1bWZfdY491Sde7XDePHDFR6YYeWXamD80kJXlglMnRnRpwpgcHmYQH48FfR8P+Dff392inU+ibNYZ8qxsBL/JmBu24OTfqwwRGlDCsSEosFlWKdJDKZ6YYlRXArbEmK8I8Zt33xxFzjhKSxr11nHrL2Ah+kZf0/KbLCBgH7Ijyj8w1hw79+4IwgRCNnxAEgeP5KTR2QRTGBAFWwgHMiwefREOwOPZiKA/uRU4QSLiPCu7jp3AJz1kkjfXo+1lru4aFKJMZGkJRI4xAhejjrBDQKU3hE22CX5NlUYsFKzFNlOU1QUtruzf2cv8XEXPyIHyR5/lfBpc0PYY/XYOTMVlety2W610iLlm4XQYs3HTvdJ3us3Rwc/COZLQy5LznDA05V5BVwhW9p0d/T+8RBF0QTiJiH/keL/F9PP+9EdTmFUl5/SAbixPCEeHYHv0gznwfX7LROFhioxNMoAIph9j1b1FbhhHFoE4bYipMUaKMrWpO9HHm5C0KxazFC/OZjGWIXjXNlB87V2EZGpVKs1kp9gY3uHql0mhgc8YuclzRtkulx0ALbrw5USpNFOH1bcF3KvXGnqb9J97raItQnmzsaVh/kLclu1AaL4HhHfOCZRxanMA9Ojd/Bh8ivmb5fRw9PzGKqWIVMbWHtUhd9ocZnQPvIm6+HJyDC/icNfeML5/qferAALwUtBFJn4DR/7KW6k8/n3rzj5kts+/+HZ59DXF0EU8/FsUTL4wlJvNoKeqmQixg+B3UbhvratbwMezc993gAhxf/YlqZPfuy6X1XAExe3FaltqSfPzaA2HEcTDYOFkjCC4+D7yRRTi//cprr13ZDnOSLEujv/0A6fiVT8IcokIQ41f9lPsbsKoZAku2O9ujXoRCtgBNeOb8+azxsZHVjFzOGMkZly9T+UMje+K8LAXvMzQwKksfS/J/Hg7eO7wjnculL+fSbSOnpXOOLGk541/eOPwEG4aneJdt8qsbOc4aSaDFZZBj/SG3MMf1omwGo3C1gewzzAZfZDQ4d2H1/PmLzrVdQf3dZ4Kr13b9D2jnVmHtq8E/OTfO5+f8bQ424Xe3BTdunO/kNet3ESyDwow51DMGIhnArLm330/0jcWVsf5aK7v6XH+rtvm24t5Cb2+h5VZzL1zMuW5L23p5cQvHNsmeMIJwLGupYULTalg2S9DnueYYx1J3luJ2jNhv5YE5dAfoJsvuAEZYyzeW3OEDOVTrEs8LXNpzsuPlTKY8nu0ZS5VigqicRWeq0GJ2Z9Vdaj4lCMw8hanQYP+VwYRKEXFRiQeuJ4vTmjg7rZcpzpHOKqIQK/T25Ru1s2wSzjiKFZ7lEvqcRTyLw/R4s8/xyt3eB1WH3+KSYDF0HYqk66w8KSlYF26FhoMF1sDiZFgq0jcUyE6wxkQUFrriAlt/5rZsqBMNN5yeu8VdW92JwSL6rQ5TenpYiUctYLxgTSwubaQEuwcEYYVRB8LhWAo/H+j0hYnNedIiuYS5AEHtDbnD4gA7fqMY5X3Beyyrw3gYZnthnqduyrU1dseyJcrcls+th8rNOVzEtC152yEC8EN4MowQ0b1ZpNWYMJmdfkf32ZVZJ72K+uaW8fBD1yn1vNPnD7j9q7wu8NwLRjZbNd7WM7qpPSvJVKGnQvppvd+0tG/27nLc3rf73QG/7wWOF3T+BaOWzRrvaCbO+KYkx2LS6ZB+SjfNfv3ZHuSDg/j7w9BX5sIdR/DPDuFgCBXZlZabKqfgw6//6OsP7qd33P34S4/ffQfd/+A156V7n3763jufSDnaozsOPf74oR2Pav36Ez8OrsEo4/ELqLtPIo7TSPv2eOlnVJ6q0EVF0BmCUob1GCPGgF0lOhxMSEJbkMLizpicjiuKyjpiIaMlbC2lyGle5PlBNKyBfZmBYubU+mjpWdXWNCpKpiTEZDFuVtEPxuM6lWyBy/NU2K5nq5v1XEMt33U77vCbzGdRKRSb32IbY/KKbrwiZMIOIHYrTpduL/YNWnMFQSoi+zk1FksmDCWhZ8N38VhMVmPSyVvqvz5L+L5Vy3iS2At8SpKSshyXaH9KZm9FTRTEZCKt3dI+oePL38JoqpE7yDcYirOYRJtWJ5hjak1tibpS50rRpSjeWoRLWr6Lcm9FFwuW7Vs2tdjlAvUxVfDGORy2wGa4tXG+VC6VNY5BYvwexeyhD0wcmweKE20rz89AY4FjN0gtn90i+B/Mj4zMj0yhNtayMHxAlGtpe7ee7tH6tJ60vttO12TxAMf9phdn9s7o6CAp7RfEHaqqaWKaAcu0qGmqukMQKxTd7969bEjl1giJxwF6Ut0hCv0UR0BihG1jX5ZtQwk/b7jr67qGvZT67A1ZKDshLei4ptrqLKrNzmpdy+oWT3krXBQHxKgo6DMzuiDSGA7wNDWp38IE/79cI0znGCz6P+caX6o7LI347FRjrf6LX9StI0dwP7ENTBDhsujuM8fyjjnALNxseH7DLDPoBF7Utzv1taur565hgaiAta6u/or1Vp1rziqjsXZUMptL4Do/+9R1yoiwGWpFPGiGeJDiUzWLHmzU0Xr8lnoVHg5WYTm45mDjKoziE9XOuePt450H1s4harx2Dpvt4Mb581iB3ul1E6M9dt9PRLcT/Ygqq2QQs6TQU2y+q2Bo0g65E91XlNl/Daz3sbaY20ArLDHcbTP/Gom51X2x0XZOzDnhr71RifVyTMsLXG/lbiHdm0oleW3zxYeDXO7MOJHPs8Zb5V5NzQnluktpIp3uSXP/CyLCXdEAeNqNkc1qwkAUhc/4By1S2lVdztKCiZOAm2wFxV1X7lOdaCQkmkwQX0P6GKX7PkuhT9AH6LIncSh20WKGmfudMzd37jAAbvAKgdM3w7NlgS6+LDfQFneWm+iL2HILXfFiuY1b8W65g26jw0zRuqI61n9VLNDDh+UGrkXbchOP4t5yCz1xtNyGFG+WO/Q/MUYOjRCG6xISTzhwnaFEgph+SjVlTLCgLrkO6iGxpzZYkybImGfqmGPFShI+XCjGPjMMxxYBhhyRzY1+cl0UVC5dTf8BGOc6NHopnw5yViZxmMppmCzicjEYDOQ+Nms5yVIzyfKVlr6rZH9tzDYYDiO6UeW6ReSm2rDUBjv2rHnSAQ5PiXmPSmGzK3V+cKI40VRnG9b570oB51+FT7s+8xx4nBV5GLHgr5YDed4Apa8cz/GVN7q453ltFtzO6kdS9UluHasuMdd5EWepVMpzlVLy0srfppZ9qgAAeNpdzkdSw1AUBVG1CCbnZJLJOUj/fWwzxID2woQZ+2NnQIlmgianStKrvkVZtM/XZ9H9geL/E+3bkpIxxplgkg5TTDPDLHPMs8AiSyyzwiprrLPBJlt02WaHXfbYp8cBhxxxzAmnnHHOBZdccc0Nt9xxT0Xd+Xh/a1LT14EOdaRNa1SVhg50pM/68mtda9K+elcP9e//V7WX/J4e9UntJXvJ++R98j7cG+4Id4T7I+uDui/cF/bDftgP+2E/7If9sJ/tZ/vZfraf8zcFz3IYAAAAAAH//wACeNpjYGBgZACCM7aLzoPoC09YnsNoAFB9B7oAAA==),\n       url(\"./jquery-filer.woff\") format(\"woff\"),\n       url(\"./jquery-filer.ttf\") format(\"truetype\"),\n       url(\"./jquery-filer.svg#jquery-filer\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: \"jquery-filer\";\n    src: url(\"./jquery-filer.svg#jquery-filer\") format(\"svg\");\n  }\n}\n\n      [data-icon]:before { content: attr(data-icon); }\n\n      [data-icon]:before,\n      .icon-jfi-ban:before,\n.icon-jfi-calendar:before,\n.icon-jfi-check:before,\n.icon-jfi-check-circle:before,\n.icon-jfi-cloud-o:before,\n.icon-jfi-cloud-up-o:before,\n.icon-jfi-comment:before,\n.icon-jfi-comment-o:before,\n.icon-jfi-download-o:before,\n.icon-jfi-exclamation:before,\n.icon-jfi-exclamation-circle:before,\n.icon-jfi-exclamation-triangle:before,\n.icon-jfi-external-link:before,\n.icon-jfi-eye:before,\n.icon-jfi-file:before,\n.icon-jfi-file-audio:before,\n.icon-jfi-file-image:before,\n.icon-jfi-file-o:before,\n.icon-jfi-file-text:before,\n.icon-jfi-file-video:before,\n.icon-jfi-files-o:before,\n.icon-jfi-folder:before,\n.icon-jfi-heart:before,\n.icon-jfi-heart-o:before,\n.icon-jfi-history:before,\n.icon-jfi-infinite:before,\n.icon-jfi-info:before,\n.icon-jfi-info-circle:before,\n.icon-jfi-minus:before,\n.icon-jfi-minus-circle:before,\n.icon-jfi-paperclip:before,\n.icon-jfi-pencil:before,\n.icon-jfi-plus:before,\n.icon-jfi-plus-circle:before,\n.icon-jfi-power-off:before,\n.icon-jfi-question:before,\n.icon-jfi-question-circle:before,\n.icon-jfi-reload:before,\n.icon-jfi-settings:before,\n.icon-jfi-sort:before,\n.icon-jfi-times:before,\n.icon-jfi-times-circle:before,\n.icon-jfi-trash:before,\n.icon-jfi-upload-o:before,\n.icon-jfi-user:before,\n.icon-jfi-view-grid:before,\n.icon-jfi-view-list:before,\n.icon-jfi-zip:before {\n        display: inline-block;\n  font-family: \"jquery-filer\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-decoration: inherit;\n  text-rendering: optimizeLegibility;\n  text-transform: none;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n      }\n\n      .icon-jfi-ban:before { content: \"\\f328\"; }\n.icon-jfi-calendar:before { content: \"\\f30b\"; }\n.icon-jfi-check:before { content: \"\\f2f6\"; }\n.icon-jfi-check-circle:before { content: \"\\f30c\"; }\n.icon-jfi-cloud-o:before { content: \"\\f329\"; }\n.icon-jfi-cloud-up-o:before { content: \"\\f32a\"; }\n.icon-jfi-comment:before { content: \"\\f32b\"; }\n.icon-jfi-comment-o:before { content: \"\\f30d\"; }\n.icon-jfi-download-o:before { content: \"\\f32c\"; }\n.icon-jfi-exclamation:before { content: \"\\f32d\"; }\n.icon-jfi-exclamation-circle:before { content: \"\\f32e\"; }\n.icon-jfi-exclamation-triangle:before { content: \"\\f32f\"; }\n.icon-jfi-external-link:before { content: \"\\f330\"; }\n.icon-jfi-eye:before { content: \"\\f2f7\"; }\n.icon-jfi-file:before { content: \"\\f31f\"; }\n.icon-jfi-file-audio:before { content: \"\\f331\"; }\n.icon-jfi-file-image:before { content: \"\\f332\"; }\n.icon-jfi-file-o:before { content: \"\\f31d\"; }\n.icon-jfi-file-text:before { content: \"\\f333\"; }\n.icon-jfi-file-video:before { content: \"\\f334\"; }\n.icon-jfi-files-o:before { content: \"\\f335\"; }\n.icon-jfi-folder:before { content: \"\\f31e\"; }\n.icon-jfi-heart:before { content: \"\\f2f8\"; }\n.icon-jfi-heart-o:before { content: \"\\f336\"; }\n.icon-jfi-history:before { content: \"\\f337\"; }\n.icon-jfi-infinite:before { content: \"\\f2fb\"; }\n.icon-jfi-info:before { content: \"\\f338\"; }\n.icon-jfi-info-circle:before { content: \"\\f339\"; }\n.icon-jfi-minus:before { content: \"\\f33a\"; }\n.icon-jfi-minus-circle:before { content: \"\\f33b\"; }\n.icon-jfi-paperclip:before { content: \"\\f33c\"; }\n.icon-jfi-pencil:before { content: \"\\f2ff\"; }\n.icon-jfi-plus:before { content: \"\\f311\"; }\n.icon-jfi-plus-circle:before { content: \"\\f312\"; }\n.icon-jfi-power-off:before { content: \"\\f33d\"; }\n.icon-jfi-question:before { content: \"\\f33e\"; }\n.icon-jfi-question-circle:before { content: \"\\f33f\"; }\n.icon-jfi-reload:before { content: \"\\f300\"; }\n.icon-jfi-settings:before { content: \"\\f340\"; }\n.icon-jfi-sort:before { content: \"\\f303\"; }\n.icon-jfi-times:before { content: \"\\f316\"; }\n.icon-jfi-times-circle:before { content: \"\\f317\"; }\n.icon-jfi-trash:before { content: \"\\f318\"; }\n.icon-jfi-upload-o:before { content: \"\\f341\"; }\n.icon-jfi-user:before { content: \"\\f307\"; }\n.icon-jfi-view-grid:before { content: \"\\f342\"; }\n.icon-jfi-view-list:before { content: \"\\f343\"; }\n.icon-jfi-zip:before { content: \"\\f344\"; }\n    </style>\n\n    <!--[if lte IE 8]><script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n\n    <script>\n      function toggleCharacters() {\n        var body = document.getElementsByTagName('body')[0];\n        body.className = body.className === 'characters-off' ? '' : 'characters-off';\n      }\n    </script>\n  </head>\n\n  <body class=\"characters-off\">\n    <div id=\"page\" class=\"container\">\n      <header>\n        <h1>jquery-filer contains 48 glyphs:</h1>\n        <a onclick=\"toggleCharacters(); return false;\" href=\"#\">Toggle Preview Characters</a>\n      </header>\n\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-ban\" class=\"icon-jfi-ban\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-ban\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf328;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-calendar\" class=\"icon-jfi-calendar\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-calendar\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf30b;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check\" class=\"icon-jfi-check\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-check\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf2f6;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-check-circle\" class=\"icon-jfi-check-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-check-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf30c;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-o\" class=\"icon-jfi-cloud-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-cloud-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf329;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-cloud-up-o\" class=\"icon-jfi-cloud-up-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-cloud-up-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32a;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment\" class=\"icon-jfi-comment\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-comment\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32b;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-comment-o\" class=\"icon-jfi-comment-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-comment-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf30d;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-download-o\" class=\"icon-jfi-download-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-download-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32c;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation\" class=\"icon-jfi-exclamation\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-exclamation\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32d;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-circle\" class=\"icon-jfi-exclamation-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-exclamation-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32e;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-exclamation-triangle\" class=\"icon-jfi-exclamation-triangle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-exclamation-triangle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf32f;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-external-link\" class=\"icon-jfi-external-link\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-external-link\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf330;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-eye\" class=\"icon-jfi-eye\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-eye\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf2f7;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file\" class=\"icon-jfi-file\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf31f;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-audio\" class=\"icon-jfi-file-audio\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file-audio\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf331;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-image\" class=\"icon-jfi-file-image\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file-image\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf332;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-o\" class=\"icon-jfi-file-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf31d;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-text\" class=\"icon-jfi-file-text\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file-text\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf333;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-file-video\" class=\"icon-jfi-file-video\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-file-video\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf334;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-files-o\" class=\"icon-jfi-files-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-files-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf335;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-folder\" class=\"icon-jfi-folder\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-folder\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf31e;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart\" class=\"icon-jfi-heart\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-heart\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf2f8;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-heart-o\" class=\"icon-jfi-heart-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-heart-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf336;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-history\" class=\"icon-jfi-history\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-history\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf337;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-infinite\" class=\"icon-jfi-infinite\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-infinite\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf2fb;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info\" class=\"icon-jfi-info\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-info\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf338;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-info-circle\" class=\"icon-jfi-info-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-info-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf339;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus\" class=\"icon-jfi-minus\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-minus\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33a;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-minus-circle\" class=\"icon-jfi-minus-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-minus-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33b;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-paperclip\" class=\"icon-jfi-paperclip\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-paperclip\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33c;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-pencil\" class=\"icon-jfi-pencil\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-pencil\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf2ff;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus\" class=\"icon-jfi-plus\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-plus\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf311;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-plus-circle\" class=\"icon-jfi-plus-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-plus-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf312;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-power-off\" class=\"icon-jfi-power-off\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-power-off\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33d;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question\" class=\"icon-jfi-question\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-question\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33e;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-question-circle\" class=\"icon-jfi-question-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-question-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf33f;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-reload\" class=\"icon-jfi-reload\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-reload\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf300;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-settings\" class=\"icon-jfi-settings\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-settings\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf340;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-sort\" class=\"icon-jfi-sort\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-sort\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf303;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times\" class=\"icon-jfi-times\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-times\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf316;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-times-circle\" class=\"icon-jfi-times-circle\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-times-circle\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf317;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-trash\" class=\"icon-jfi-trash\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-trash\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf318;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-upload-o\" class=\"icon-jfi-upload-o\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-upload-o\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf341;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-user\" class=\"icon-jfi-user\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-user\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf307;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-grid\" class=\"icon-jfi-view-grid\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-view-grid\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf342;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-view-list\" class=\"icon-jfi-view-list\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-view-list\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf343;\" />\n        </div>\n      </div>\n      \n      <div class=\"glyph\">\n        <div class=\"preview-glyphs\">\n          <span class=\"step size-12\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-14\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-16\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-18\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-21\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-24\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-36\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-48\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-60\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span><span class=\"step size-72\"><span class=\"letters\">Pp</span><i id=\"icon-jfi-zip\" class=\"icon-jfi-zip\"></i></span>\n        </div>\n        <div class=\"preview-scale\">\n          <span class=\"step\">12</span><span class=\"step\">14</span><span class=\"step\">16</span><span class=\"step\">18</span><span class=\"step\">21</span><span class=\"step\">24</span><span class=\"step\">36</span><span class=\"step\">48</span><span class=\"step\">60</span><span class=\"step\">72</span>\n        </div>\n        <div class=\"usage\">\n          <input class=\"class\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\".icon-jfi-zip\" />\n          <input class=\"point\" type=\"text\" readonly=\"readonly\" onClick=\"this.select();\" value=\"&amp;#xf344;\" />\n        </div>\n      </div>\n      \n\n      <footer>\n        Made with love using <a href=\"http://fontcustom.com\">Font Custom</a>.\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/assets/fonts/jquery.filer-icons/jquery-filer.css",
    "content": "/*\n  Icon Font: jquery-filer\n*/\n\n@font-face {\n  font-family: \"jquery-filer\";\n  src: url(\"./jquery-filer.eot\");\n  src: url(\"./jquery-filer.eot?#iefix\") format(\"embedded-opentype\"),\n       url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABY8AA0AAAAAJGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAWIAAAABoAAAAcbgWsnk9TLzIAAAGgAAAASgAAAGBDMGCrY21hcAAAAjgAAAB2AAABir/jw6BjdnQgAAACsAAAAAQAAAAEABEBRGdhc3AAABYYAAAACAAAAAj//wADZ2x5ZgAAAxwAABDDAAAbVDwbM1RoZWFkAAABMAAAADAAAAA2AudKS2hoZWEAAAFgAAAAIAAAACQD8QHEaG10eAAAAewAAABLAAAAbgpuBLZsb2NhAAACtAAAAGgAAABonHCkGm1heHAAAAGAAAAAIAAAACAAgQDCbmFtZQAAE+AAAAFmAAACwZhqioJwb3N0AAAVSAAAAM8AAAIIqeejRXjaY2BkYGAA4ogbscvj+W2+MnAzMYDAhScsz2H0////9zMxMh4EcjkYwNIAbNUNrHjaY2BkYGA8+H8/gx4Tw///DAxMjAxAERTAAgB/egS4AAEAAAAzAJEADAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYWJg/MLAysDA6MOYxsDA4A6lvzJIMrQwMDAxsHEywIEAgskQkOaawnDg07fPLowH/h9g0GM8yOAIFGZEUqLAwAgAW4ENdAAAeNpjYmAQZAACJgi2Y1BgcAAyVYC4ASQO5IFEHBiyweI2QNIGzFIAQgaGE0C2CpClzCAHhBD1DgwLwKQDQyBQbAZYNQTYAAC2kQkrAHja3YxNCoNADIXfOGUUnEDtQlwobnuQHqYH6Xm7yAMRReLUigvpCfpBEt4PAeDxnRYOH15JuU1f8Ey3xjU5QUedCXrmFN7YsOfDDNBBZ7XNL1mxZse7mYiUUkgQL4hLnOIQ3/v/H7iAI3RZWtm5gL9nBYpEIu8AAAARAUQAAAAqACoAKgBSAJ4AvgEGAUQBfAGqAkACeAKyAwwDPAN+A7gEDASUBLIE8gUgBVgFmgX8BjYGhga2BvoHSAeeB/AIHAhiCLII5AkcCYIJwgoSCi4KWgqyCuALNguYDGwMvAzwDUINqnjanVl7jNzGeZ+Pr1lyd0nuckne7d5x38t7P3aXy3vsPSRLOkknyVIiy3q4tlzbkuw6tRoHidTW8cVwYBVF28SxdQ5gNIpTCwWaJrJRGW5go+fHH0VRIEbkPwo0CGQjRV0kQa0U7R+tQfUbcu+0d3KMonviPD7OcGa+5+8bEY6kCCHfhrsITygZewXIePtVKpBf1V+RxJ+2X+U5bJJXeEYWGflVKsEn7VeB0RupRsptpMqpC185dQruCv4qBQ38GpB5Uoa3YT+xsJfROKk0ztWaC9Cq58FnBbxNr5ZohpZOUMrqvX/BOtCXkV4rSRJSsUfp3pexjV/gSYEU4Dos4l6LZJKQas21zIxUqnlNX6IO1Fu1Zq1cksyMVW95zVajbmWoCqWaW2v681C3bFirTWvb79muTdeKD33poW9RMT9KFepY4j+L5S8//eWyGFVXZvuzztj27WNOtn+2MTf3pwodzYuUipazT5dndu6alnV5etfOGRKec5EYsAZfYDzEVUw86jjUwg3YLbhrZKH4XDy+6iyMeIUCfGFhdLRwMR7/dn54dGFoKJxPyBGOwG5SZ3ySyqVxaJZddpKM1aj7pm/TMlJr4Qe9PCCxxQ6qgesjiSNLk9MVgC/kBqueVx3J9do9UJmZXFqa9CrcY7lhRh3I9dt9FX8S4MFdwwDPON5erwR5Iz+y68GlAeD+qIiE/opRGSQiqdz8OXwALxGFqCSN0svjJpGVQH2UnQ227/qdx27hSXEjNryfTAb//udNSCXcRPA3xuxMevHlBXPBWngkHh8SkoK1CI8kazjG+w6kcOyLRmamZ+HlRXPRWjTZEMFaIIQj5OZPkBc/wHWrhPhlr2HOAwrSpmOADKENu2GWPRXbNdd38E3LL1+96thPHLhzxew3Htu55/f0Jy9uJfz46h/uuefk/tgdh+/Z1e5q43orRIcVOEuSJEdIJaMBaikgq2dRnTLSMGpPR2NhRTwrJvBRpOuSEhYR4SIjsqZyJKEoUYfpBXfz5s01DmCNjJNThIhm0ZsH30NtdGstvzYHbZjn/AkfC5SrRSV8sMQ/0wGxOAbj4PmtBWhM4LSWR/2WW8O6Ngwq4CAV+iGTB9eyrTxn5cFECkcCAmePmKoqU14BUTFVXlSy6dhRU6Ax3EsqHtPV9OHHgiKsyQ/uVqWUysc5AXiV5wBbyTtoKiEoKZ1yvA68KMqcakjJPacmNW3+XrVmDNKM3k8VOa5qvWqCE5REHGbjaTMjJ7WSHaumh5L3jY3vkrnPiYlBhadCTIIeTezro+BCTDaAS+cTSd0SJCnOcbHhpHAI5F2ocwR5RVDn4kQjBrFJGXWukSqmGqgB+FAsivhAqtgLRa+MShA+cPl4QI6fuHhiLh98nIfloA3vtrHbhqdZ08FfG3/BcUgG/wHDvzWHPyYbtFmCNrsSrVRtRmrssgL9R2hjCzAPGXQfY9BkzgO+JlpiUjw1hYUlisdFiYrPiAvNo2eONbA4+lFMQPJDUyK+pVQ4LuLbNL5rHDtztNkM1yzcvI7+6yRa1Cz2Syqgp8ozWaKUbVxxHpo1K8OU22VqwHS82aot8POiPwZetIvGqWPNSgH1JF5z4lpKaxxrNg+3T8+l0/VtSR0ECQA44DgugYoa49zR9unfPw2L5dlSXyOd7LFMPadwXHl2x+zk0T3D3IgucKIIApvBcaqoJtKKta02smd4eN23FeAS8olxyWQGYUZWMcdMcA6YoXihtVj9zE7hkqqcUZUJRT2jqF3Nj26jsGaXHMpoJaTqNVG9w6Ik9TODRx23ZhmfmD3OAeNRt0zOKtKiIhUkZZGZ5Ebz4IZUrtz2jjX3dssFyO+QHDwPO9kZ1z0AjdzAAqpEd8SyMszXPSeVYhlp714pE8M4hfWW/n0Ytz6Nvt7v1r9h4kf6h6bNtDB062EZ6iG9pY32p+jkfeLoaKhwEmugRqIK3ka5f4MbFz5rWIfyeDdvKLNLlP8a2uUo7nQb2U+OkYcIKUTCZ1LPGGEplVORZnip2xTDRcuNhGqgSUfCNMIgVgyDXLrra1ZXG1xVllX5YNIwktXc9VyVNU7iv6SxclKmi1ReC64byetJQ6eyTIM1Vt4dzlkKS5mGpDUKXzGShaQR4DeqOSiEnQL7WkHX2dzgYSgE+B0D9svhzGBtY+6tAjFIG/nxLvJDQN4kUYY2Hsg2G1BMMW9U/m5w7sYDwT/AvtWrsHYpuMSR5gPBVRhdjWReQJmfJDoZCJGCBiqHHKih2FuNql1s+UyqszDDOZztAOMd/CBBIQGcEgveScQgCTQBR7ngLzmBU3hlWZZiPC9xiUTqz2IUSEz5kRRDFX9dUSaL5hClPM9RPiFKzJalLXtPEZP0bj2Bje6W4uPis+k0r88MnT00svlMTz76qDA2lm80kC+RPj9FZIzcJabRLmUejaM+KjPzdJWMypXGuOY8V3cALlhvlAb66hXrv98sDVYXKrDbaS4dWGo6UfXWQPENy6o0xt+wKwvVwYMHdjedfGN3NCD0pYRMYby4G1cbCnmJ+ldkSLBlM7xgt+wNjMSAVKdCVYMVb3nZCz4cnG4P6rtHZoZ6swMzMwM9djxWalRn40KSCn0DA30wtfzwvpmBoRlusD4U/2D60HRCkt2RSpKDgSmXRP4cV74OXyMxsoRYBQERdTEm+QwCoiV4TMtR7ctu02t2bULj1MihmeVww3644RDl4Ly34nuXE76+WhqfKD10v5Bza33a7FDfZFJS5bjey4Ns9Y04J07UmqUcX7LUhDpdmtgJb8SXl+OtX//aapRKk7rb1zcENDk4U8gmJdHWZT7m9uRHdK/qjMuWIzmVHRPAhb5vPSZVme/bCD3SlsjDMdd+fSPMCHRrlKm0Pzc2d/qX6yEFpNtjSqE93Dscye7mRyi7b5Ex5vtIyKvGp4trg0kdqTbqPOOyj2rKkWXv85/vkl1bWZfdY491Sde7XDePHDFR6YYeWXamD80kJXlglMnRnRpwpgcHmYQH48FfR8P+Dff392inU+ibNYZ8qxsBL/JmBu24OTfqwwRGlDCsSEosFlWKdJDKZ6YYlRXArbEmK8I8Zt33xxFzjhKSxr11nHrL2Ah+kZf0/KbLCBgH7Ijyj8w1hw79+4IwgRCNnxAEgeP5KTR2QRTGBAFWwgHMiwefREOwOPZiKA/uRU4QSLiPCu7jp3AJz1kkjfXo+1lru4aFKJMZGkJRI4xAhejjrBDQKU3hE22CX5NlUYsFKzFNlOU1QUtruzf2cv8XEXPyIHyR5/lfBpc0PYY/XYOTMVlety2W610iLlm4XQYs3HTvdJ3us3Rwc/COZLQy5LznDA05V5BVwhW9p0d/T+8RBF0QTiJiH/keL/F9PP+9EdTmFUl5/SAbixPCEeHYHv0gznwfX7LROFhioxNMoAIph9j1b1FbhhHFoE4bYipMUaKMrWpO9HHm5C0KxazFC/OZjGWIXjXNlB87V2EZGpVKs1kp9gY3uHql0mhgc8YuclzRtkulx0ALbrw5USpNFOH1bcF3KvXGnqb9J97raItQnmzsaVh/kLclu1AaL4HhHfOCZRxanMA9Ojd/Bh8ivmb5fRw9PzGKqWIVMbWHtUhd9ocZnQPvIm6+HJyDC/icNfeML5/qferAALwUtBFJn4DR/7KW6k8/n3rzj5kts+/+HZ59DXF0EU8/FsUTL4wlJvNoKeqmQixg+B3UbhvratbwMezc993gAhxf/YlqZPfuy6X1XAExe3FaltqSfPzaA2HEcTDYOFkjCC4+D7yRRTi//cprr13ZDnOSLEujv/0A6fiVT8IcokIQ41f9lPsbsKoZAku2O9ujXoRCtgBNeOb8+azxsZHVjFzOGMkZly9T+UMje+K8LAXvMzQwKksfS/J/Hg7eO7wjnculL+fSbSOnpXOOLGk541/eOPwEG4aneJdt8qsbOc4aSaDFZZBj/SG3MMf1omwGo3C1gewzzAZfZDQ4d2H1/PmLzrVdQf3dZ4Kr13b9D2jnVmHtq8E/OTfO5+f8bQ424Xe3BTdunO/kNet3ESyDwow51DMGIhnArLm330/0jcWVsf5aK7v6XH+rtvm24t5Cb2+h5VZzL1zMuW5L23p5cQvHNsmeMIJwLGupYULTalg2S9DnueYYx1J3luJ2jNhv5YE5dAfoJsvuAEZYyzeW3OEDOVTrEs8LXNpzsuPlTKY8nu0ZS5VigqicRWeq0GJ2Z9Vdaj4lCMw8hanQYP+VwYRKEXFRiQeuJ4vTmjg7rZcpzpHOKqIQK/T25Ru1s2wSzjiKFZ7lEvqcRTyLw/R4s8/xyt3eB1WH3+KSYDF0HYqk66w8KSlYF26FhoMF1sDiZFgq0jcUyE6wxkQUFrriAlt/5rZsqBMNN5yeu8VdW92JwSL6rQ5TenpYiUctYLxgTSwubaQEuwcEYYVRB8LhWAo/H+j0hYnNedIiuYS5AEHtDbnD4gA7fqMY5X3Beyyrw3gYZnthnqduyrU1dseyJcrcls+th8rNOVzEtC152yEC8EN4MowQ0b1ZpNWYMJmdfkf32ZVZJ72K+uaW8fBD1yn1vNPnD7j9q7wu8NwLRjZbNd7WM7qpPSvJVKGnQvppvd+0tG/27nLc3rf73QG/7wWOF3T+BaOWzRrvaCbO+KYkx2LS6ZB+SjfNfv3ZHuSDg/j7w9BX5sIdR/DPDuFgCBXZlZabKqfgw6//6OsP7qd33P34S4/ffQfd/+A156V7n3763jufSDnaozsOPf74oR2Pav36Ez8OrsEo4/ELqLtPIo7TSPv2eOlnVJ6q0EVF0BmCUob1GCPGgF0lOhxMSEJbkMLizpicjiuKyjpiIaMlbC2lyGle5PlBNKyBfZmBYubU+mjpWdXWNCpKpiTEZDFuVtEPxuM6lWyBy/NU2K5nq5v1XEMt33U77vCbzGdRKRSb32IbY/KKbrwiZMIOIHYrTpduL/YNWnMFQSoi+zk1FksmDCWhZ8N38VhMVmPSyVvqvz5L+L5Vy3iS2At8SpKSshyXaH9KZm9FTRTEZCKt3dI+oePL38JoqpE7yDcYirOYRJtWJ5hjak1tibpS50rRpSjeWoRLWr6Lcm9FFwuW7Vs2tdjlAvUxVfDGORy2wGa4tXG+VC6VNY5BYvwexeyhD0wcmweKE20rz89AY4FjN0gtn90i+B/Mj4zMj0yhNtayMHxAlGtpe7ee7tH6tJ60vttO12TxAMf9phdn9s7o6CAp7RfEHaqqaWKaAcu0qGmqukMQKxTd7969bEjl1giJxwF6Ut0hCv0UR0BihG1jX5ZtQwk/b7jr67qGvZT67A1ZKDshLei4ptrqLKrNzmpdy+oWT3krXBQHxKgo6DMzuiDSGA7wNDWp38IE/79cI0znGCz6P+caX6o7LI347FRjrf6LX9StI0dwP7ENTBDhsujuM8fyjjnALNxseH7DLDPoBF7Utzv1taur565hgaiAta6u/or1Vp1rziqjsXZUMptL4Do/+9R1yoiwGWpFPGiGeJDiUzWLHmzU0Xr8lnoVHg5WYTm45mDjKoziE9XOuePt450H1s4harx2Dpvt4Mb581iB3ul1E6M9dt9PRLcT/Ygqq2QQs6TQU2y+q2Bo0g65E91XlNl/Daz3sbaY20ArLDHcbTP/Gom51X2x0XZOzDnhr71RifVyTMsLXG/lbiHdm0oleW3zxYeDXO7MOJHPs8Zb5V5NzQnluktpIp3uSXP/CyLCXdEAeNqNkc1qwkAUhc/4By1S2lVdztKCiZOAm2wFxV1X7lOdaCQkmkwQX0P6GKX7PkuhT9AH6LIncSh20WKGmfudMzd37jAAbvAKgdM3w7NlgS6+LDfQFneWm+iL2HILXfFiuY1b8W65g26jw0zRuqI61n9VLNDDh+UGrkXbchOP4t5yCz1xtNyGFG+WO/Q/MUYOjRCG6xISTzhwnaFEgph+SjVlTLCgLrkO6iGxpzZYkybImGfqmGPFShI+XCjGPjMMxxYBhhyRzY1+cl0UVC5dTf8BGOc6NHopnw5yViZxmMppmCzicjEYDOQ+Nms5yVIzyfKVlr6rZH9tzDYYDiO6UeW6ReSm2rDUBjv2rHnSAQ5PiXmPSmGzK3V+cKI40VRnG9b570oB51+FT7s+8xx4nBV5GLHgr5YDed4Apa8cz/GVN7q453ltFtzO6kdS9UluHasuMdd5EWepVMpzlVLy0srfppZ9qgAAeNpdzkdSw1AUBVG1CCbnZJLJOUj/fWwzxID2woQZ+2NnQIlmgianStKrvkVZtM/XZ9H9geL/E+3bkpIxxplgkg5TTDPDLHPMs8AiSyyzwiprrLPBJlt02WaHXfbYp8cBhxxxzAmnnHHOBZdccc0Nt9xxT0Xd+Xh/a1LT14EOdaRNa1SVhg50pM/68mtda9K+elcP9e//V7WX/J4e9UntJXvJ++R98j7cG+4Id4T7I+uDui/cF/bDftgP+2E/7If9sJ/tZ/vZfraf8zcFz3IYAAAAAAH//wACeNpjYGBgZACCM7aLzoPoC09YnsNoAFB9B7oAAA==),\n       url(\"./jquery-filer.woff\") format(\"woff\"),\n       url(\"./jquery-filer.ttf\") format(\"truetype\"),\n       url(\"./jquery-filer.svg#jquery-filer\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: \"jquery-filer\";\n    src: url(\"./jquery-filer.svg#jquery-filer\") format(\"svg\");\n  }\n}\n\n[data-icon]:before { content: attr(data-icon); }\n\n[data-icon]:before,\n.icon-jfi-ban:before,\n.icon-jfi-calendar:before,\n.icon-jfi-check:before,\n.icon-jfi-check-circle:before,\n.icon-jfi-cloud-o:before,\n.icon-jfi-cloud-up-o:before,\n.icon-jfi-comment:before,\n.icon-jfi-comment-o:before,\n.icon-jfi-download-o:before,\n.icon-jfi-exclamation:before,\n.icon-jfi-exclamation-circle:before,\n.icon-jfi-exclamation-triangle:before,\n.icon-jfi-external-link:before,\n.icon-jfi-eye:before,\n.icon-jfi-file:before,\n.icon-jfi-file-audio:before,\n.icon-jfi-file-image:before,\n.icon-jfi-file-o:before,\n.icon-jfi-file-text:before,\n.icon-jfi-file-video:before,\n.icon-jfi-files-o:before,\n.icon-jfi-folder:before,\n.icon-jfi-heart:before,\n.icon-jfi-heart-o:before,\n.icon-jfi-history:before,\n.icon-jfi-infinite:before,\n.icon-jfi-info:before,\n.icon-jfi-info-circle:before,\n.icon-jfi-minus:before,\n.icon-jfi-minus-circle:before,\n.icon-jfi-paperclip:before,\n.icon-jfi-pencil:before,\n.icon-jfi-plus:before,\n.icon-jfi-plus-circle:before,\n.icon-jfi-power-off:before,\n.icon-jfi-question:before,\n.icon-jfi-question-circle:before,\n.icon-jfi-reload:before,\n.icon-jfi-settings:before,\n.icon-jfi-sort:before,\n.icon-jfi-times:before,\n.icon-jfi-times-circle:before,\n.icon-jfi-trash:before,\n.icon-jfi-upload-o:before,\n.icon-jfi-user:before,\n.icon-jfi-view-grid:before,\n.icon-jfi-view-list:before,\n.icon-jfi-zip:before {\n  display: inline-block;\n  font-family: \"jquery-filer\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-rendering: optimizeLegibility;\n  text-transform: none;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n}\n\n.icon-jfi-ban:before { content: \"\\f328\"; }\n.icon-jfi-calendar:before { content: \"\\f30b\"; }\n.icon-jfi-check:before { content: \"\\f2f6\"; }\n.icon-jfi-check-circle:before { content: \"\\f30c\"; }\n.icon-jfi-cloud-o:before { content: \"\\f329\"; }\n.icon-jfi-cloud-up-o:before { content: \"\\f32a\"; }\n.icon-jfi-comment:before { content: \"\\f32b\"; }\n.icon-jfi-comment-o:before { content: \"\\f30d\"; }\n.icon-jfi-download-o:before { content: \"\\f32c\"; }\n.icon-jfi-exclamation:before { content: \"\\f32d\"; }\n.icon-jfi-exclamation-circle:before { content: \"\\f32e\"; }\n.icon-jfi-exclamation-triangle:before { content: \"\\f32f\"; }\n.icon-jfi-external-link:before { content: \"\\f330\"; }\n.icon-jfi-eye:before { content: \"\\f2f7\"; }\n.icon-jfi-file:before { content: \"\\f31f\"; }\n.icon-jfi-file-audio:before { content: \"\\f331\"; }\n.icon-jfi-file-image:before { content: \"\\f332\"; }\n.icon-jfi-file-o:before { content: \"\\f31d\"; }\n.icon-jfi-file-text:before { content: \"\\f333\"; }\n.icon-jfi-file-video:before { content: \"\\f334\"; }\n.icon-jfi-files-o:before { content: \"\\f335\"; }\n.icon-jfi-folder:before { content: \"\\f31e\"; }\n.icon-jfi-heart:before { content: \"\\f2f8\"; }\n.icon-jfi-heart-o:before { content: \"\\f336\"; }\n.icon-jfi-history:before { content: \"\\f337\"; }\n.icon-jfi-infinite:before { content: \"\\f2fb\"; }\n.icon-jfi-info:before { content: \"\\f338\"; }\n.icon-jfi-info-circle:before { content: \"\\f339\"; }\n.icon-jfi-minus:before { content: \"\\f33a\"; }\n.icon-jfi-minus-circle:before { content: \"\\f33b\"; }\n.icon-jfi-paperclip:before { content: \"\\f33c\"; }\n.icon-jfi-pencil:before { content: \"\\f2ff\"; }\n.icon-jfi-plus:before { content: \"\\f311\"; }\n.icon-jfi-plus-circle:before { content: \"\\f312\"; }\n.icon-jfi-power-off:before { content: \"\\f33d\"; }\n.icon-jfi-question:before { content: \"\\f33e\"; }\n.icon-jfi-question-circle:before { content: \"\\f33f\"; }\n.icon-jfi-reload:before { content: \"\\f300\"; }\n.icon-jfi-settings:before { content: \"\\f340\"; }\n.icon-jfi-sort:before { content: \"\\f303\"; }\n.icon-jfi-times:before { content: \"\\f316\"; }\n.icon-jfi-times-circle:before { content: \"\\f317\"; }\n.icon-jfi-trash:before { content: \"\\f318\"; }\n.icon-jfi-upload-o:before { content: \"\\f341\"; }\n.icon-jfi-user:before { content: \"\\f307\"; }\n.icon-jfi-view-grid:before { content: \"\\f342\"; }\n.icon-jfi-view-list:before { content: \"\\f343\"; }\n.icon-jfi-zip:before { content: \"\\f344\"; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/css/jquery.filer.css",
    "content": "/*!\n * CSS jQuery.filer\n * Copyright (c) 2015 CreativeDream\n * Version: 1.0.5 (19-Nov-2015)\n*/\n@import url('../assets/fonts/jquery.filer-icons/jquery-filer.css');\n\n/*-------------------------\n\tBasic configurations\n-------------------------*/\n.jFiler * {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.jFiler {\n    font-family: sans-serif;\n    font-size: 14px;\n    color: #494949;\n}\n\n/* Helpers */\n.jFiler ul.list-inline li {\n    display: inline-block;\n    padding-right: 5px;\n    padding-left: 5px;\n}\n\n.jFiler .pull-left {\n    float: left;\n}\n\n.jFiler .pull-right {\n    float: right;\n}\n\n/* File Icons */\nspan.jFiler-icon-file {\n    position: relative;\n    width: 57px;\n    height: 70px;\n    display: inline-block;\n    line-height: 70px;\n    text-align: center;\n    border-radius: 3px;\n    color: #fff;\n    font-family: sans-serif;\n    font-size: 13px;\n    font-weight: bold;\n    overflow: hidden;\n    box-shadow: 42px -55px 0 0 #A4A7AC inset;\n}\n\nspan.jFiler-icon-file:after {\n    position: absolute;\n    top: -1px;\n    right: -1px;\n    display: inline-block;\n    content: '';\n    border-style: solid;\n    border-width: 16px 0 0 16px;\n    border-color: transparent transparent transparent #DADDE1;\n}\n\nspan.jFiler-icon-file i[class*=\"icon-jfi-\"] {\n    font-size: 24px;\n}\n\nspan.jFiler-icon-file.f-image {\n    box-shadow: 42px -55px 0 0 #e15955 inset;\n}\n\nspan.jFiler-icon-file.f-image:after {\n    border-left-color: #c6393f;\n}\n\nspan.jFiler-icon-file.f-video {\n    box-shadow: 42px -55px 0 0 #4183d7 inset;\n}\n\nspan.jFiler-icon-file.f-video:after {\n    border-left-color: #446cb3;\n}\n\nspan.jFiler-icon-file.f-audio {\n    box-shadow: 42px -55px 0 0 #5bab6e inset;\n}\n\nspan.jFiler-icon-file.f-audio:after {\n    border-left-color: #448353;\n}\n\n\n/* Progress Bar */\n.jFiler-jProgressBar {\n    height: 8px;\n    background: #f1f1f1;\n    margin-top: 3px;\n    margin-bottom: 0;\n    overflow: hidden;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.jFiler-jProgressBar .bar {\n    float: left;\n    width: 0;\n    height: 100%;\n    font-size: 12px;\n    color: #ffffff;\n    text-align: center;\n    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n    background-color: #50A1E9;\n    box-sizing: border-box;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n    -webkit-transition: width 0.3s ease;\n    -moz-transition: width 0.3s ease;\n    -o-transition: width 0.3s ease;\n    transition: width 0.3s ease;\n}\n\n.jFiler-jProgressBar .bar.dark {\n    background-color: #555;\n}\n\n.jFiler-jProgressBar .bar.blue {\n    background-color: #428bca;\n}\n\n.jFiler-jProgressBar .bar.green {\n    background-color: #5cb85c;\n}\n\n.jFiler-jProgressBar .bar.orange {\n    background-color: #f7a923;\n}\n\n.jFiler-jProgressBar .bar.red {\n    background-color: #d9534f;\n}\n\n/* Thumbs */\n.jFiler-row:after,\n.jFiler-item:after {\n    display: table;\n    line-height: 0;\n    content: \"\";\n    clear: both;\n}\n\n.jFiler-items ul {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n\n/*-------------------------\n\tDefault Theme\n-------------------------*/\n.jFiler-theme-default .jFiler-input {\n    position: relative;\n    display: block;\n    width: 400px;\n    height: 35px;\n    margin: 0 0 15px 0;\n    background: #fefefe;\n    border: 1px solid #cecece;\n    font-size: 12px;\n    font-family: sans-serif;\n    color: #888;\n    border-radius: 4px;\n    cursor: pointer;\n    overflow: hidden;\n    -webkit-box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;\n       -moz-box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;\n            box-shadow: rgba(0,0,0,.25) 0 4px 5px -5px inset;\n}\n\n.jFiler-theme-default .jFiler-input.focused {\n    outline: none;\n    -webkit-box-shadow: 0 0 7px rgba(0,0,0,0.1);\n    -moz-box-shadow: 0 0 7px rgba(0,0,0,0.1);\n    box-shadow: 0 0 7px rgba(0,0,0,0.1);\n}\n\n.jFiler-theme-default .jFiler.dragged .jFiler-input {\n    border: 1px dashed #aaaaaa;\n    background: #f9f9f9;\n}\n\n.jFiler-theme-default .jFiler.dragged .jFiler-input:hover {\n    background: #FFF8D0;\n}\n\n.jFiler-theme-default .jFiler.dragged .jFiler-input * {\n    pointer-events: none;\n}\n\n.jFiler-theme-default .jFiler.dragged .jFiler-input .jFiler-input-caption {\n    width: 100%;\n    text-align: center;\n}\n\n.jFiler-theme-default .jFiler.dragged .jFiler-input .jFiler-input-button {\n    display: none;\n}\n\n.jFiler-theme-default .jFiler-input-caption {\n    display: block;\n    float: left;\n    height: 100%;\n    padding-top: 8px;\n    padding-left: 10px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.jFiler-theme-default .jFiler-input-button {\n    display: block;\n    float: right;\n    height: 100%;\n    padding-top: 8px;\n    padding-left: 15px;\n    padding-right: 15px;\n    border-left: 1px solid #ccc;\n    color: #666666;\n    text-align: center;\n    background-color: #fefefe;\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#fefefe),to(#f1f1f1));\n    background-image: -webkit-linear-gradient(top,#fefefe,#f1f1f1);\n    background-image: -o-linear-gradient(top,#fefefe,#f1f1f1);\n    background-image: linear-gradient(to bottom,#fefefe,#f1f1f1);\n    background-image: -moz-linear-gradient(top,#fefefe,#f1f1f1);\n    -webkit-transition: all .1s ease-out;\n       -moz-transition: all .1s ease-out;\n         -o-transition: all .1s ease-out;\n            transition: all .1s ease-out;\n}\n\n.jFiler-theme-default .jFiler-input-button:hover {\n    -moz-box-shadow: inset 0 0 10px rgba(0,0,0,0.07);\n    -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.07);\n    box-shadow: inset 0 0 10px rgba(0,0,0,0.07);\n}\n\n.jFiler-theme-default .jFiler-input-button:active {\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#f1f1f1),to(#fefefe));\n    background-image: -webkit-linear-gradient(top,#f1f1f1,#fefefe);\n    background-image: -o-linear-gradient(top,#f1f1f1,#fefefe);\n    background-image: linear-gradient(to bottom,#f1f1f1,#fefefe);\n    background-image: -moz-linear-gradient(top,#f1f1f1,#fefefe);\n}\n\n/*-------------------------\n\tThumbnails\n-------------------------*/\n.jFiler-items-default .jFiler-items {\n    \n}\n\n.jFiler-items-default .jFiler-item {\n    position: relative;\n    padding: 16px;\n    margin-bottom: 16px;\n    background: #f7f7f7;\n    color: #4d4d4c;\n}\n\n\n.jFiler-items-default .jFiler-item .jFiler-item-icon {\n    font-size: 32px;\n    color: #f5871f;\n    \n    margin-right: 15px;\n    margin-top: -3px;\n}\n\n.jFiler-items-default .jFiler-item .jFiler-item-title {\n    font-weight: bold;\n}\n\n.jFiler-items-default .jFiler-item .jFiler-item-others {\n    font-size: 12px;\n    color: #777;\n    margin-left: -5px;\n    margin-right: -5px;\n}\n\n.jFiler-items-default .jFiler-item .jFiler-item-others span {\n    padding-left: 5px;\n    padding-right: 5px;\n}\n\n.jFiler-items-default .jFiler-item-assets {\n    position: absolute;\n    display: block;\n    right: 16px;\n    top: 50%;\n    margin-top: -10px;\n}\n\n.jFiler-items-default .jFiler-item-assets a {\n    padding: 8px 9px 8px 12px;\n    cursor: pointer;\n    background: #fafafa;\n    color: #777;\n    border-radius: 4px;\n    border: 1px solid #e3e3e3\n}\n\n.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:hover,\n.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:active {\n    color: #d9534f;\n}\n\n.jFiler-items-default .jFiler-item-assets .jFiler-item-trash-action:active {\n    background: transparent;\n}\n\n/* Thumbnails: Grid */\n.jFiler-items-grid .jFiler-item {\n    float: left;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container {\n    position: relative;\n    margin: 0 20px 30px 0;\n    padding: 10px;\n    border: 1px solid #e1e1e1;\n    border-radius: 3px;\n    background: #fff;\n    -webkit-box-shadow: 0px 0px 3px rgba(0,0,0,0.06);\n    -moz-box-shadow: 0px 0px 3px rgba(0,0,0,0.06);\n    box-shadow: 0px 0px 3px rgba(0,0,0,0.06);\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb {\n    position: relative;\n    width: 160px;\n    height: 115px;\n    min-height: 115px;\n    border: 1px solid #e1e1e1;\n    overflow: hidden;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb .jFiler-item-thumb-image {\n    width: 100%;\n    height: 100%;\n    text-align: center;\n}\n\n.jFiler-item .jFiler-item-container .jFiler-item-thumb img {\n    max-width: none;\n    max-height: 100%;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb span.jFiler-icon-file {\n    margin-top: 20px;\n}\n\n.jFiler-items-grid .jFiler-item-thumb-image.fi-loading {\n    background: url('data:image/gif;base64,R0lGODlhIwAjAMQAAP////f39+/v7+bm5t7e3tbW1s7OzsXFxb29vbW1ta2traWlpZycnJSUlIyMjISEhHt7e3Nzc2tra2NjY1paWlJSUkpKSkJCQjo6OjExMSkpKRkZGRAQEAAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBAAeACwAAAAAIwAjAAAF5CAgjmRpnmiqrmzrvnAsz3Rto4Fwm4EYLIweQHcTKAiAQOPRI0QKRcYiEGA4qI8K9HZoGAIOSOBgCdIGBeLCMUgoBJSJjsBAxAiKRSFAQBCVBwMKGRsNQi8DBwsJhyQVGxMKjTCJk0kPjDI5AlQqBAcICFstBQqmmScFGh0dHBaWKAIEBQQDKQEKDxEQCTMBA5Y/o5oDoZYCHB1PMgIHCQacwCPACRStDTEDBrYABQg5wAgGIg4YYjQCogEGB3wI3J2+oD0G42PfN2Pc7D2JRDb/+In4t8MHwYIIEypcyLChQ4YhAAAh+QQFBAAeACwIAAgAEwATAAAFlqAnjiKSjAFJBscgLos4NIQ6JggAKLHXSDWbp6CoLRgeg0ShGwkIKQ9iITggPJFHaqA4eAYIRK0a9SwK0spl0TQkvEIJJnIlCdDCRk4lEJIGBgcHRn4jBBkciROFKgkNDg51jCJBJJU2ARocD4xNAQsGCBMcGz2FAxwZKQwVDYVwEhwOI02MAxsceJMeOgwaJ7skCX0jIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwJAAcAEgAVAAAFjqAnjmJAnihgHChqCACAJKMyoMHBeggSJ40baoC4zTwFB6IlOiwLhkCDMUIYUAUSgiA4RCZLAXPkoDQOsfFosVNjDYaBQiRmWjaaDMTdXDAYbWMJQnwiGBoOBEwmIwVeGhhzKAJ+BBsXIgoSVCcEAxkbAw8enEwAARkaYqluAqliChlLY64aQrNjAT2MKCEAIfkEBQQAHgAsBwAIABQAFAAABZqgJ45jUQBkqorGgQqIsKqteCjyTLbAsBg6UoBA8CgSIoGhGGQNAoXG4zAaNBcPxalJQhS4KwGhUCQgRYHZQGKxVBpgD8CQUCiAYEQTpZpcGFYrBgw5HgkEBg4XFHoqFx10CwMZFCIIDwl8IwscFAQXGR4NGQo6BBocRRUYHgIWGEwqBxoPHgEWoYYXVCsBCTIBqzkHaVwHvCshACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAVABQAAAWaoCeOpDECZKqKgRcY7bqanoHI6+EKSIHjCJ2oMPidCgIPQbHwGUkIBoLwJAEM1OpqQBgkC0yjwBGRRBQokfdXOASzo0MjqTrQUwQIpwM/QSYJKQoaHRUKHgtQSgwTEUIeDRcPSRQcHgiBFREiB1IkdAkaEgMUGAILFoE4AxkaRRIVLRIURTIGGQ0iExWcEzQyBzGwI05PV78rIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAgAFAAUAAAFlaAnjmRBnmgqCip6kEGbDnJqvmJAsLVIDwgEoTc6JAy0k05VSIoKiSgipgoIaIFKZ8tBVBeNBgORkEwkDt6sYECSBosUwJRybDiqxuOgTmTwCAUKIwAHAwMJDw10CxUNMRIaBQcIAmhPCgYjVAcZDx4REx5lOCoWGCIPER4Bqi0FFwwiEBIxBg9DKpqpEVS5PQUFACohACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAUABQAAAWRoCeOpEGeaCoGKmqOQlvKXgId4usR6DA+HA6kQDsxMB0Nr0hSTHxFAgJxIABogpiEI9rgVAiF2ICARCANVovAjsESKoKaNGBkMqrEojA/WDYSHgMIJAVZBwsKSwoSCyIOFx4FJg4LVwQHRCgVDQIOEAEHDi9XJwISFAIADA4iDJ1xEwoiDa2SDFA0rCO5NGwtIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAgAEwAUAAAFj6AnisNonqeBLWg7GpwmtAENcc8s6ifyGKJMp1DyIFqNjecxUEiKLpGi4slATcBW4hkdDQ6HbHd048TELtah8XCwxqjAsXXdKSyWuuiAILwmGBBABzUiBDUFCQglCBAJIgsTBAQFAQpzAwZ1BREsCwweBQt+Lg8QNQpvCAqFJwMQc6mGjy6kHrI7cB4DeiIhACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcABwASABUAAAWXoCeOI0GQaBpUl5CSRZV4QrYN71hoWBBkGpdISAI4No2BhoNLHRijy8YQmQwOpJMC2BAgIh5fgJZKSDYWYg4FWZMMhkLT7XHYeAW6wrBgLGZ0KQZjgR4IEhFqJIAeBQ8UDQUCeSNzIwcNCCIJDwMDJwgGawSZAQgzBAiWIwELDSIHmh6xOQyiAKciV4oeAHO0IwB0ArweIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAcAEAAVAAAFjKAnjuMwkKgnjFJVosSEeMGVrcc1j8TlehVMIIDh7EaMzMKDuTE4k4DHsCiIKJnCI0LYcE6ehMWyPDxGgshyZL5MUqID6uCAowsEwsouWlTGFAR8HgUJCglHgyNWigF0dXYzBAwPCoJgcAUKBnELAgKYcAObHgdyfIYiBQcAdgIJjAanrq0AsoojQyghACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAUABQAAAWYoCeKwQhF5aiqA3SIlDVW7yoOlCRKlVhtNZtHYUkIKBfPYoNaFRADUUTWeAwyGYHHAFmIDhIJImBorBIFB6cDSZUnEGEA08k0UiPDQrsSTB58HgEDhEIqAHgIERESVoY2BAcIBwaPlh5Rl04KCnhnKwMJDFCelgMIBAAeT3hBNqoeAggFIgiaX7ZblZoBB5lbqoG3wzbCKyEAIfkEBQQAHgAsBwAHABUAEwAABZygJ46jIJBoSjZPqa6GGEmBZ0zx60Gt90QiSSb3QkgOHskkkMj0UAOkyCEhLBiey2X0SIwMLKRVAPAEHggCY8N5egiKB6OGAmwtC1UhQScFIgt9JAKCKQUICQkxBw2NCycqBhsdlBgBAwUGBgRlKgMPExMSgSSdKmQvBAgIOqwoAgeKkDopBgMiMbOutCgGSLe8IlIeSKbBI1LAKCEAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIAIfkECQQAHgAsAAAAACMAIwAABbWgJ45kaZ5oqq5s675wLM90baPBvS6MTgoKgqjxEBEihZuAsRAxHKJHJXk7NAwBB8RzsPRqBYFo4RgkFALKxMhAxAiKBdXtAXgah4Eis2nIBgcLCSgVGxMKNYAoD4MzAgI5KgQHCAhULQUKmgmRJgUaIhwWLwIEBQQDKQEKDxEQCXYxnSUBcjapKAIcHUg+JgkUHRx+YB6zIw4YEMc2QiMBzDB0HgbGvifR19rb3N3e3+Dh4ikhADs=') no-repeat center;\n    width: 100%;\n    height: 100%;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info {\n    position: absolute;\n    bottom: -10%;\n    left: 0;\n    width: 100%;\n    color: #fff;\n    padding: 6px 10px;\n    background: -moz-linear-gradient(bottom,rgba(0,0,0,1) 0,rgba(0,0,0,0) 100%);\n    background: -webkit-linear-gradient(bottom,rgba(0,0,0,1) 0,rgba(0,0,0,0) 100%);\n    background: -o-linear-gradient(bottom,rgba(0,0,0,1) 0,rgba(0,0,0,0) 100%);\n    background: -ms-linear-gradient(bottom,rgba(0,0,0,1) 0,rgba(0,0,0,0) 100%);\n    background: linear-gradient(to top,rgba(0,0,0,1) 0,rgba(0,0,0,0) 100%);\n    z-index: 9;\n    opacity: 0;\n    filter: alpha(opacity(0));\n    -webkit-transition: all 0.12s;\n    -moz-transition: all 0.12s;\n    transition: all 0.12s;\n}\n\n.jFiler-items-grid .jFiler-no-thumbnail.jFiler-item .jFiler-item-container .jFiler-item-info {\n    background: rgba(0,0,0,0.55);\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb:hover .jFiler-item-info {\n    bottom: 0;\n    opacity: 1;\n    filter: aplpha(opacity(100));\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info .jFiler-item-title {\n    display: block;\n    font-weight: bold;\n    word-break: break-all;\n    line-height: 1;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-info .jFiler-item-others {\n    display: inline-block;\n    font-size: 10px;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets {\n    margin-top: 10px;\n    color: #999;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .text-success {\n    color: #3C763D\n}\n\n.jFiler-items-grid .jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .text-error {\n    color: #A94442\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .jFiler-jProgressBar {\n    width: 120px;\n    margin-left: -5px;\n}\n\n.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-assets .jFiler-item-others {\n    font-size: 12px;\n}\n\n.jFiler-items-grid .jFiler-item-trash-action:hover {\n    cursor: pointer;\n    color: #d9534f;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/css/themes/jquery.filer-dragdropbox-theme.css",
    "content": "/*!\n * CSS jQuery.filer\n * Theme: DragDropBox\n * Copyright (c) 2015 CreativeDream\n * Version: 1.0.5 (15-Nov-2015)\n*/\n\n/*-------------------------\n\tInput\n-------------------------*/\n.jFiler-input-dragDrop {\n    display: block;\n    width: 343px;\n    margin: 0 auto 25px auto;\n    padding: 25px;\n    color: #8d9499;\n    color: #97A1A8;\n    background: #fff;\n    border: 2px dashed #C8CBCE;\n    text-align: center;\n    -webkit-transition: box-shadow 0.3s,\n                        border-color 0.3s;\n    -moz-transition: box-shadow 0.3s,\n                        border-color 0.3s;\n    transition: box-shadow 0.3s,\n                        border-color 0.3s;\n}\n\n.jFiler.dragged .jFiler-input-dragDrop {\n    border-color: #aaa;\n    box-shadow: inset 0 0 20px rgba(0,0,0,.08);\n}\n\n.jFiler.dragged .jFiler-input-dragDrop * {\n    pointer-events: none;\n}\n\n.jFiler.dragged .jFiler-input-icon {\n    -webkit-transform: rotate(180deg);\n    -ms-transform: rotate(180deg);\n    transform: rotate(180deg);\n}\n\n.jFiler.dragged .jFiler-input-text,\n.jFiler.dragged .jFiler-input-choose-btn {\n    filter: alpha(opacity=30);\n    opacity: 0.3;\n}\n\n.jFiler-input-dragDrop .jFiler-input-icon {\n    font-size: 48px;\n    margin-top: -10px;\n    -webkit-transition: all 0.3s ease;\n    -moz-transition: all 0.3s ease;\n    transition: all 0.3s ease;\n}\n\n.jFiler-input-text h3 {\n    margin: 0;\n    font-size: 18px;\n}\n\n.jFiler-input-text span {\n    font-size: 12px;\n}\n\n.jFiler-input-choose-btn {\n    display: inline-block;\n    padding: 8px 14px;\n    outline: none;\n    cursor: pointer;\n    text-decoration: none;\n    text-align: center;\n    white-space: nowrap;\n    font-size: 12px;\n    font-weight: bold;\n    color: #8d9496;\n    border-radius: 3px;\n    border: 1px solid #c6c6c6;\n    vertical-align: middle;\n    background-color: #fff;\n    box-shadow: 0px 1px 5px rgba(0,0,0,0.05);\n    -webkit-transition: all 0.2s;\n    -moz-transition: all 0.2s;\n    transition: all 0.2s;\n}\n\n.jFiler-input-choose-btn:hover,\n.jFiler-input-choose-btn:active {\n    color: inherit;\n}\n\n.jFiler-input-choose-btn:active {\n    background-color: #f5f5f5;\n}\n\n/* gray */\n.jFiler-input-choose-btn.gray {\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#fcfcfc),to(#f5f5f5));\n    background-image: -webkit-linear-gradient(top,#fcfcfc,#f5f5f5);\n    background-image: -o-linear-gradient(top,#fcfcfc,#f5f5f5);\n    background-image: linear-gradient(to bottom,#fcfcfc,#f5f5f5);\n    background-image: -moz-linear-gradient(top,#fcfcfc,#f5f5f5);\n}\n\n.jFiler-input-choose-btn.gray:hover {\n    filter: alpha(opacity=87);\n    opacity: 0.87;\n}\n\n.jFiler-input-choose-btn.gray:active {\n    background-color: #f5f5f5;\n    background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#fcfcfc));\n    background-image: -webkit-linear-gradient(top,#f5f5f5,#fcfcfc);\n    background-image: -o-linear-gradient(top,#f5f5f5,#fcfcfc);\n    background-image: linear-gradient(to bottom,#f5f5f5,#fcfcfc);\n    background-image: -moz-linear-gradient(top,#f5f5f5,#fcfcfc);\n}\n\n/* blue */\n.jFiler-input-choose-btn.blue {\n    color: #008BFF;\n    border: 1px solid #008BFF;\n}\n\n.jFiler-input-choose-btn.blue:hover {\n    background: #008BFF;\n}\n\n.jFiler-input-choose-btn.blue:active {\n    background: #008BFF;\n}\n\n/* green */\n.jFiler-input-choose-btn.green {\n    color: #27ae60;\n    border: 1px solid #27ae60;\n}\n\n.jFiler-input-choose-btn.green:hover {\n    background: #27ae60;\n}\n\n.jFiler-input-choose-btn.green:active {\n    background: #27ae60;\n}\n\n/* red */\n.jFiler-input-choose-btn.red {\n    color: #ed5a5a;\n    border: 1px solid #ed5a5a;\n}\n\n.jFiler-input-choose-btn.red:hover {\n    background: #ed5a5a;\n}\n\n.jFiler-input-choose-btn.red:active {\n    background: #E05252;\n}\n\n/* black */\n.jFiler-input-choose-btn.black {\n    color: #555;\n    border: 1px solid #555;\n}\n\n.jFiler-input-choose-btn.black:hover {\n    background: #555;\n}\n\n.jFiler-input-choose-btn.black:active {\n    background: #333;\n}\n\n.jFiler-input-choose-btn.blue:hover,\n.jFiler-input-choose-btn.green:hover,\n.jFiler-input-choose-btn.red:hover,\n.jFiler-input-choose-btn.black:hover {\n    border-color: transparent;\n    color: #fff;\n}\n\n.jFiler-input-choose-btn.blue:active,\n.jFiler-input-choose-btn.green:active,\n.jFiler-input-choose-btn.red:active,\n.jFiler-input-choose-btn.black:active {\n    border-color: transparent;\n    color: #fff;\n    filter: alpha(opacity=87);\n    opacity: 0.87;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/js/custom.js",
    "content": "$(document).ready(function() {\n    \n    //Example 1\n    $('#filer_input').filer({\n\t\tshowThumbs: true\n    });\n    \n    //Example 2\n    $(\"#filer_input2\").filer({\n        limit: null,\n        maxSize: null,\n        extensions: null,\n        changeInput: '<div class=\"jFiler-input-dragDrop\"><div class=\"jFiler-input-inner\"><div class=\"jFiler-input-icon\"><i class=\"icon-jfi-cloud-up-o\"></i></div><div class=\"jFiler-input-text\"><h3>Drag&Drop files here</h3> <span style=\"display:inline-block; margin: 15px 0\">or</span></div><a class=\"jFiler-input-choose-btn blue\">Browse Files</a></div></div>',\n        showThumbs: true,\n        theme: \"dragdropbox\",\n        templates: {\n            box: '<ul class=\"jFiler-items-list jFiler-items-grid\"></ul>',\n            item: '<li class=\"jFiler-item\">\\\n                        <div class=\"jFiler-item-container\">\\\n                            <div class=\"jFiler-item-inner\">\\\n                                <div class=\"jFiler-item-thumb\">\\\n                                    <div class=\"jFiler-item-status\"></div>\\\n                                    <div class=\"jFiler-item-info\">\\\n                                        <span class=\"jFiler-item-title\"><b title=\"{{fi-name}}\">{{fi-name | limitTo: 25}}</b></span>\\\n                                        <span class=\"jFiler-item-others\">{{fi-size2}}</span>\\\n                                    </div>\\\n                                    {{fi-image}}\\\n                                </div>\\\n                                <div class=\"jFiler-item-assets jFiler-row\">\\\n                                    <ul class=\"list-inline pull-left\">\\\n                                        <li>{{fi-progressBar}}</li>\\\n                                    </ul>\\\n                                    <ul class=\"list-inline pull-right\">\\\n                                        <li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li>\\\n                                    </ul>\\\n                                </div>\\\n                            </div>\\\n                        </div>\\\n                    </li>',\n            itemAppend: '<li class=\"jFiler-item\">\\\n                            <div class=\"jFiler-item-container\">\\\n                                <div class=\"jFiler-item-inner\">\\\n                                    <div class=\"jFiler-item-thumb\">\\\n                                        <div class=\"jFiler-item-status\"></div>\\\n                                        <div class=\"jFiler-item-info\">\\\n                                            <span class=\"jFiler-item-title\"><b title=\"{{fi-name}}\">{{fi-name | limitTo: 25}}</b></span>\\\n                                            <span class=\"jFiler-item-others\">{{fi-size2}}</span>\\\n                                        </div>\\\n                                        {{fi-image}}\\\n                                    </div>\\\n                                    <div class=\"jFiler-item-assets jFiler-row\">\\\n                                        <ul class=\"list-inline pull-left\">\\\n                                            <li><span class=\"jFiler-item-others\">{{fi-icon}}</span></li>\\\n                                        </ul>\\\n                                        <ul class=\"list-inline pull-right\">\\\n                                            <li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li>\\\n                                        </ul>\\\n                                    </div>\\\n                                </div>\\\n                            </div>\\\n                        </li>',\n            progressBar: '<div class=\"bar\"></div>',\n            itemAppendToEnd: false,\n            removeConfirmation: true,\n            _selectors: {\n                list: '.jFiler-items-list',\n                item: '.jFiler-item',\n                progressBar: '.bar',\n                remove: '.jFiler-item-trash-action'\n            }\n        },\n        dragDrop: {\n            dragEnter: null,\n            dragLeave: null,\n            drop: null,\n        },\n        uploadFile: {\n            url: \"./php/upload.php\",\n            data: null,\n            type: 'POST',\n            enctype: 'multipart/form-data',\n            beforeSend: function(){},\n            success: function(data, el){\n                var parent = el.find(\".jFiler-jProgressBar\").parent();\n                el.find(\".jFiler-jProgressBar\").fadeOut(\"slow\", function(){\n                    $(\"<div class=\\\"jFiler-item-others text-success\\\"><i class=\\\"icon-jfi-check-circle\\\"></i> Success</div>\").hide().appendTo(parent).fadeIn(\"slow\");    \n                });\n            },\n            error: function(el){\n                var parent = el.find(\".jFiler-jProgressBar\").parent();\n                el.find(\".jFiler-jProgressBar\").fadeOut(\"slow\", function(){\n                    $(\"<div class=\\\"jFiler-item-others text-error\\\"><i class=\\\"icon-jfi-minus-circle\\\"></i> Error</div>\").hide().appendTo(parent).fadeIn(\"slow\");    \n                });\n            },\n            statusCode: null,\n            onProgress: null,\n            onComplete: null\n        },\n        files: null,\n        addMore: false,\n        clipBoardPaste: true,\n        excludeName: null,\n        beforeRender: null,\n        afterRender: null,\n        beforeShow: null,\n        beforeSelect: null,\n        onSelect: null,\n        afterShow: null,\n        onRemove: function(itemEl, file, id, listEl, boxEl, newInputEl, inputEl){\n            var file = file.name;\n            $.post('./php/remove_file.php', {file: file});\n        },\n        onEmpty: null,\n        options: null,\n        captions: {\n            button: \"Choose Files\",\n            feedback: \"Choose files To Upload\",\n            feedback2: \"files were chosen\",\n            drop: \"Drop file here to Upload\",\n            removeConfirmation: \"Are you sure you want to remove this file?\",\n            errors: {\n                filesLimit: \"Only {{fi-limit}} files are allowed to be uploaded.\",\n                filesType: \"Only Images are allowed to be uploaded.\",\n                filesSize: \"{{fi-name}} is too large! Please upload file up to {{fi-maxSize}} MB.\",\n                filesSizeAll: \"Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB.\"\n            }\n        }\n    });\n    \n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/js/jquery.filer.js",
    "content": "/*!\n * jQuery.filer\n * Copyright (c) 2015 CreativeDream\n * Website: https://github.com/CreativeDream/jquery.filer\n * Version: 1.0.5 (19-Nov-2015)\n * Requires: jQuery v1.7.1 or later\n */\n(function($) {\n\t\"use strict\";\n\t$.fn.filer = function(q) {\n\t\treturn this.each(function(t, r) {\n\t\t\tvar s = $(r),\n\t\t\t\tb = '.jFiler',\n\t\t\t\tp = $(),\n\t\t\t\to = $(),\n\t\t\t\tl = $(),\n\t\t\t\tsl = [],\n\t\t\t\tn_f = $.isFunction(q) ? q(s, $.fn.filer.defaults) : q,\n\t\t\t\tn = n_f && $.isPlainObject(n_f) ? $.extend(true, {}, $.fn.filer.defaults, n_f) : $.fn.filer.defaults,\n\t\t\t\tf = {\n\t\t\t\t\tinit: function() {\n\t\t\t\t\t\ts.wrap('<div class=\"jFiler\"></div>');\n\t\t\t\t\t\tf._set('props');\n\t\t\t\t\t\ts.prop(\"jFiler\").boxEl = p = s.closest(b);\n\t\t\t\t\t\tf._changeInput();\n\t\t\t\t\t},\n\t\t\t\t\t_bindInput: function() {\n\t\t\t\t\t\tif(n.changeInput && o.size() > 0) {\n\t\t\t\t\t\t\to.bind(\"click\", f._clickHandler);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.on({\n\t\t\t\t\t\t\t\"focus\": function() {\n\t\t\t\t\t\t\t\to.addClass('focused');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"blur\": function() {\n\t\t\t\t\t\t\t\to.removeClass('focused');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"change\": function() {\n\t\t\t\t\t\t\t\tf._onChange();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(n.dragDrop) {\n\t\t\t\t\t\t\t(o.length > 0 ? o : s)\n\t\t\t\t\t\t\t.bind(\"drop\", f._dragDrop.drop)\n\t\t\t\t\t\t\t\t.bind(\"dragover\", f._dragDrop.dragEnter)\n\t\t\t\t\t\t\t\t.bind(\"dragleave\", f._dragDrop.dragLeave);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(n.uploadFile && n.clipBoardPaste) {\n\t\t\t\t\t\t\t$(window)\n\t\t\t\t\t\t\t\t.on(\"paste\", f._clipboardPaste);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_unbindInput: function() {\n\t\t\t\t\t\tif(n.changeInput && o.size() > 0) {\n\t\t\t\t\t\t\to.unbind(\"click\", f._clickHandler);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_clickHandler: function() {\n\t\t\t\t\t\ts.click()\n\t\t\t\t\t},\n\t\t\t\t\t_applyAttrSettings: function() {\n\t\t\t\t\t\tvar d = [\"name\", \"limit\", \"maxSize\", \"extensions\", \"changeInput\", \"showThumbs\", \"appendTo\", \"theme\", \"addMore\", \"excludeName\", \"files\", \"uploadUrl\", \"uploadData\", \"options\"];\n\t\t\t\t\t\tfor(var k in d) {\n\t\t\t\t\t\t\tvar j = \"data-jfiler-\" + d[k];\n\t\t\t\t\t\t\tif(f._assets.hasAttr(j)) {\n\t\t\t\t\t\t\t\tswitch(d[k]) {\n\t\t\t\t\t\t\t\t\tcase \"changeInput\":\n\t\t\t\t\t\t\t\t\tcase \"showThumbs\":\n\t\t\t\t\t\t\t\t\tcase \"addMore\":\n\t\t\t\t\t\t\t\t\t\tn[d[k]] = ([\"true\", \"false\"].indexOf(s.attr(j)) > -1 ? s.attr(j) == \"true\" : s.attr(j));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"extensions\":\n\t\t\t\t\t\t\t\t\t\tn[d[k]] = s.attr(j)\n\t\t\t\t\t\t\t\t\t\t\t.replace(/ /g, '')\n\t\t\t\t\t\t\t\t\t\t\t.split(\",\");\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"uploadUrl\":\n\t\t\t\t\t\t\t\t\t\tif(n.uploadFile) n.uploadFile.url = s.attr(j);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"uploadData\":\n\t\t\t\t\t\t\t\t\t\tif(n.uploadFile) n.uploadFile.data = JSON.parse(s.attr(j));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"files\":\n\t\t\t\t\t\t\t\t\tcase \"options\":\n\t\t\t\t\t\t\t\t\t\tn[d[k]] = JSON.parse(s.attr(j));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tn[d[k]] = s.attr(j);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ts.removeAttr(j);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_changeInput: function() {\n\t\t\t\t\t\tf._applyAttrSettings();\n\t\t\t\t\t\tn.beforeRender != null && typeof n.beforeRender == \"function\" ? n.beforeRender(p, s) : null;\n\t\t\t\t\t\tif(n.theme) {\n\t\t\t\t\t\t\tp.addClass('jFiler-theme-' + n.theme);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(s.get(0)\n\t\t\t\t\t\t\t.tagName.toLowerCase() != \"input\" && s.get(0)\n\t\t\t\t\t\t\t.type != \"file\") {\n\t\t\t\t\t\t\to = s;\n\t\t\t\t\t\t\ts = $(\"<input type=\\\"file\\\" name=\\\"\" + n.name + \"\\\" />\");\n\t\t\t\t\t\t\ts.css({\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tleft: \"-9999px\",\n\t\t\t\t\t\t\t\ttop: \"-9999px\",\n\t\t\t\t\t\t\t\t\"z-index\": \"-9999\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tp.prepend(s);\n\t\t\t\t\t\t\tf._isGn = s;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(n.changeInput) {\n\t\t\t\t\t\t\t\tswitch(typeof n.changeInput) {\n\t\t\t\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t\t\t\to = $('<div class=\"jFiler-input\"><div class=\"jFiler-input-caption\"><span>' + n.captions.feedback + '</span></div><div class=\"jFiler-input-button\">' + n.captions.button + '</div></div>\"');\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\t\t\to = $(n.changeInput);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\t\t\t\to = $(n.changeInput(p, s, n));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ts.after(o);\n\t\t\t\t\t\t\t\ts.css({\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tleft: \"-9999px\",\n\t\t\t\t\t\t\t\t\ttop: \"-9999px\",\n\t\t\t\t\t\t\t\t\t\"z-index\": \"-9999\"\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.prop(\"jFiler\").newInputEl = o;\n\t\t\t\t\t\tif(!n.limit || (n.limit && n.limit >= 2)) {\n\t\t\t\t\t\t\ts.attr(\"multiple\", \"multiple\");\n\t\t\t\t\t\t\ts.attr(\"name\")\n\t\t\t\t\t\t\t\t.slice(-2) != \"[]\" ? s.attr(\"name\", s.attr(\"name\") + \"[]\") : null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf._bindInput();\n\t\t\t\t\t\tif(n.files) {\n\t\t\t\t\t\t\tf._append(false, {\n\t\t\t\t\t\t\t\tfiles: n.files\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn.afterRender != null && typeof n.afterRender == \"function\" ? n.afterRender(l, p, o, s) : null;\n\t\t\t\t\t},\n\t\t\t\t\t_clear: function() {\n\t\t\t\t\t\tf.files = null;\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files = null;\n\t\t\t\t\t\tif(!n.uploadFile && !n.addMore) {\n\t\t\t\t\t\t\tf._reset();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf._set('feedback', (f._itFl && f._itFl.length > 0 ? f._itFl.length + ' ' + n.captions.feedback2 : n.captions.feedback));\n\t\t\t\t\t\tn.onEmpty != null && typeof n.onEmpty == \"function\" ? n.onEmpty(p, o, s) : null\n\t\t\t\t\t},\n\t\t\t\t\t_reset: function(a) {\n\t\t\t\t\t\tif(!a) {\n\t\t\t\t\t\t\tif(!n.uploadFile && n.addMore) {\n\t\t\t\t\t\t\t\tfor(var i = 0; i < sl.length; i++) {\n\t\t\t\t\t\t\t\t\tsl[i].remove();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsl = [];\n\t\t\t\t\t\t\t\tf._unbindInput();\n\t\t\t\t\t\t\t\tif(f._isGn) {\n\t\t\t\t\t\t\t\t\ts = f._isGn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ts = $(r);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tf._bindInput();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tf._set('input', '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf._itFl = [];\n\t\t\t\t\t\tf._itFc = null;\n\t\t\t\t\t\tf._ajFc = 0;\n\t\t\t\t\t\tf._set('props');\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files_list = f._itFl;\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.current_file = f._itFc;\n\t\t\t\t\t\tif(!f._prEr) {\n\t\t\t\t\t\t\tf._itFr = [];\n\t\t\t\t\t\t\tp.find(\"input[name^='jfiler-items-exclude-']:hidden\")\n\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl.fadeOut(\"fast\", function() {\n\t\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t});\n\t\t\t\t\t\ts.prop(\"jFiler\").listEl = l = $();\n\t\t\t\t\t},\n\t\t\t\t\t_set: function(element, value) {\n\t\t\t\t\t\tswitch(element) {\n\t\t\t\t\t\t\tcase 'input':\n\t\t\t\t\t\t\t\ts.val(\"\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'feedback':\n\t\t\t\t\t\t\t\tif(o.length > 0) {\n\t\t\t\t\t\t\t\t\to.find('.jFiler-input-caption span')\n\t\t\t\t\t\t\t\t\t\t.html(value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'props':\n\t\t\t\t\t\t\t\tif(!s.prop(\"jFiler\")){\n\t\t\t\t\t\t\t\t\ts.prop(\"jFiler\", {\n\t\t\t\t\t\t\t\t\t\toptions: n,\n\t\t\t\t\t\t\t\t\t\tlistEl: l,\n\t\t\t\t\t\t\t\t\t\tboxEl: p,\n\t\t\t\t\t\t\t\t\t\tnewInputEl: o,\n\t\t\t\t\t\t\t\t\t\tinputEl: s,\n\t\t\t\t\t\t\t\t\t\tfiles: f.files,\n\t\t\t\t\t\t\t\t\t\tfiles_list: f._itFl,\n\t\t\t\t\t\t\t\t\t\tcurrent_file: f._itFc,\n\t\t\t\t\t\t\t\t\t\tappend: function(data) {\n\t\t\t\t\t\t\t\t\t\t\treturn f._append(false, {\n\t\t\t\t\t\t\t\t\t\t\t\tfiles: [data]\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tremove: function(id) {\n\t\t\t\t\t\t\t\t\t\t\tf._remove(null, {\n\t\t\t\t\t\t\t\t\t\t\t\tbinded: true,\n\t\t\t\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tid: id\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\treset: function() {\n\t\t\t\t\t\t\t\t\t\t\tf._reset();\n\t\t\t\t\t\t\t\t\t\t\tf._clear();\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tretry: function(data) {\n\t\t\t\t\t\t\t\t\t\t\treturn f._retryUpload(data);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_filesCheck: function() {\n\t\t\t\t\t\tvar s = 0;\n\t\t\t\t\t\tif(n.limit && f.files.length + f._itFl.length > n.limit) {\n\t\t\t\t\t\t\talert(f._assets.textParse(n.captions.errors.filesLimit));\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(var t = 0; t < f.files.length; t++) {\n\t\t\t\t\t\t\tvar x = f.files[t].name.split(\".\")\n\t\t\t\t\t\t\t\t.pop()\n\t\t\t\t\t\t\t\t.toLowerCase(),\n\t\t\t\t\t\t\t\tfile = f.files[t],\n\t\t\t\t\t\t\t\tm = {\n\t\t\t\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\t\t\t\tsize: file.size,\n\t\t\t\t\t\t\t\t\tsize2: f._assets.bytesToSize(file.size),\n\t\t\t\t\t\t\t\t\ttype: file.type,\n\t\t\t\t\t\t\t\t\text: x\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif(n.extensions != null && $.inArray(x, n.extensions) == -1) {\n\t\t\t\t\t\t\t\talert(f._assets.textParse(n.captions.errors.filesType, m));\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(n.maxSize != null && f.files[t].size > n.maxSize * 1048576) {\n\t\t\t\t\t\t\t\talert(f._assets.textParse(n.captions.errors.filesSize, m));\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(file.size == 4096 && file.type.length == 0) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts += f.files[t].size\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(n.maxSize != null && s >= Math.round(n.maxSize * 1048576)) {\n\t\t\t\t\t\t\talert(f._assets.textParse(n.captions.errors.filesSizeAll));\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif((n.addMore || n.uploadFile)) {\n\t\t\t\t\t\t\tvar m = f._itFl.filter(function(a, b) {\n\t\t\t\t\t\t\t\tif(a.file.name == file.name && a.file.size == file.size && a.file.type == file.type && (file.lastModified ? a.file.lastModified == file.lastModified : true)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif(m.length > 0) {\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t_thumbCreator: {\n\t\t\t\t\t\tcreate: function(i) {\n\t\t\t\t\t\t\tvar file = f.files[i],\n\t\t\t\t\t\t\t\tid = (f._itFc ? f._itFc.id : i),\n\t\t\t\t\t\t\t\tname = file.name,\n\t\t\t\t\t\t\t\tsize = file.size,\n\t\t\t\t\t\t\t\ttype = file.type.split(\"/\", 1)\n\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t.toLowerCase(),\n\t\t\t\t\t\t\t\text = name.indexOf(\".\") != -1 ? name.split(\".\")\n\t\t\t\t\t\t\t\t.pop()\n\t\t\t\t\t\t\t\t.toLowerCase() : \"\",\n\t\t\t\t\t\t\t\tprogressBar = n.uploadFile ? '<div class=\"jFiler-jProgressBar\">' + n.templates.progressBar + '</div>' : '',\n\t\t\t\t\t\t\t\topts = {\n\t\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\t\t\tsize: size,\n\t\t\t\t\t\t\t\t\tsize2: f._assets.bytesToSize(size),\n\t\t\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\t\t\textension: ext,\n\t\t\t\t\t\t\t\t\ticon: f._assets.getIcon(ext, type),\n\t\t\t\t\t\t\t\t\ticon2: f._thumbCreator.generateIcon({\n\t\t\t\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\t\t\t\textension: ext\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\timage: '<div class=\"jFiler-item-thumb-image fi-loading\"></div>',\n\t\t\t\t\t\t\t\t\tprogressBar: progressBar,\n\t\t\t\t\t\t\t\t\t_appended: file._appended\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\thtml = \"\";\n\t\t\t\t\t\t\tif(file.opts) {\n\t\t\t\t\t\t\t\topts = $.extend({}, file.opts, opts);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtml = $(f._thumbCreator.renderContent(opts))\n\t\t\t\t\t\t\t\t.attr(\"data-jfiler-index\", id);\n\t\t\t\t\t\t\thtml.get(0)\n\t\t\t\t\t\t\t\t.jfiler_id = id;\n\t\t\t\t\t\t\tf._thumbCreator.renderFile(file, html, opts);\n\t\t\t\t\t\t\tif(file.forList) {\n\t\t\t\t\t\t\t\treturn html;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tf._itFc.html = html;\n\t\t\t\t\t\t\thtml.hide()[n.templates.itemAppendToEnd ? \"appendTo\" : \"prependTo\"](l.find(n.templates._selectors.list))\n\t\t\t\t\t\t\t\t.show();\n\t\t\t\t\t\t\tif(!file._appended) {\n\t\t\t\t\t\t\t\tf._onSelect(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\trenderContent: function(opts) {\n\t\t\t\t\t\t\treturn f._assets.textParse((opts._appended ? n.templates.itemAppend : n.templates.item), opts);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trenderFile: function(file, html, opts) {\n\t\t\t\t\t\t\tif(html.find('.jFiler-item-thumb-image')\n\t\t\t\t\t\t\t\t.size() == 0) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(file.file && opts.type == \"image\") {\n\t\t\t\t\t\t\t\tvar g = '<img src=\"' + file.file + '\" draggable=\"false\" />',\n\t\t\t\t\t\t\t\t\tm = html.find('.jFiler-item-thumb-image.fi-loading');\n\t\t\t\t\t\t\t\t$(g)\n\t\t\t\t\t\t\t\t\t.error(function() {\n\t\t\t\t\t\t\t\t\t\tg = f._thumbCreator.generateIcon(opts);\n\t\t\t\t\t\t\t\t\t\thtml.addClass('jFiler-no-thumbnail');\n\t\t\t\t\t\t\t\t\t\tm.removeClass('fi-loading')\n\t\t\t\t\t\t\t\t\t\t\t.html(g);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.load(function() {\n\t\t\t\t\t\t\t\t\t\tm.removeClass('fi-loading')\n\t\t\t\t\t\t\t\t\t\t\t.html(g);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(window.File && window.FileList && window.FileReader && opts.type == \"image\" && opts.size < 6e+6) {\n\t\t\t\t\t\t\t\tvar y = new FileReader;\n\t\t\t\t\t\t\t\ty.onload = function(e) {\n\t\t\t\t\t\t\t\t\tvar g = '<img src=\"' + e.target.result + '\" draggable=\"false\" />',\n\t\t\t\t\t\t\t\t\t\tm = html.find('.jFiler-item-thumb-image.fi-loading');\n\t\t\t\t\t\t\t\t\t$(g)\n\t\t\t\t\t\t\t\t\t\t.error(function() {\n\t\t\t\t\t\t\t\t\t\t\tg = f._thumbCreator.generateIcon(opts);\n\t\t\t\t\t\t\t\t\t\t\thtml.addClass('jFiler-no-thumbnail');\n\t\t\t\t\t\t\t\t\t\t\tm.removeClass('fi-loading')\n\t\t\t\t\t\t\t\t\t\t\t\t.html(g);\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.load(function() {\n\t\t\t\t\t\t\t\t\t\t\tm.removeClass('fi-loading')\n\t\t\t\t\t\t\t\t\t\t\t\t.html(g);\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ty.readAsDataURL(file);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar g = f._thumbCreator.generateIcon(opts),\n\t\t\t\t\t\t\t\t\tm = html.find('.jFiler-item-thumb-image.fi-loading');\n\t\t\t\t\t\t\t\thtml.addClass('jFiler-no-thumbnail');\n\t\t\t\t\t\t\t\tm.removeClass('fi-loading')\n\t\t\t\t\t\t\t\t\t.html(g);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgenerateIcon: function(obj) {\n\t\t\t\t\t\t\tvar m = new Array(3);\n\t\t\t\t\t\t\tif(obj && obj.type && obj.extension) {\n\t\t\t\t\t\t\t\tswitch(obj.type) {\n\t\t\t\t\t\t\t\t\tcase \"image\":\n\t\t\t\t\t\t\t\t\t\tm[0] = \"f-image\";\n\t\t\t\t\t\t\t\t\t\tm[1] = \"<i class=\\\"icon-jfi-file-image\\\"></i>\"\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"video\":\n\t\t\t\t\t\t\t\t\t\tm[0] = \"f-video\";\n\t\t\t\t\t\t\t\t\t\tm[1] = \"<i class=\\\"icon-jfi-file-video\\\"></i>\"\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"audio\":\n\t\t\t\t\t\t\t\t\t\tm[0] = \"f-audio\";\n\t\t\t\t\t\t\t\t\t\tm[1] = \"<i class=\\\"icon-jfi-file-audio\\\"></i>\"\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tm[0] = \"f-file f-file-ext-\" + obj.extension;\n\t\t\t\t\t\t\t\t\t\tm[1] = (obj.extension.length > 0 ? \".\" + obj.extension : \"\");\n\t\t\t\t\t\t\t\t\t\tm[2] = 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tm[0] = \"f-file\";\n\t\t\t\t\t\t\t\tm[1] = (obj.extension && obj.extension.length > 0 ? \".\" + obj.extension : \"\");\n\t\t\t\t\t\t\t\tm[2] = 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar el = '<span class=\"jFiler-icon-file ' + m[0] + '\">' + m[1] + '</span>';\n\t\t\t\t\t\t\tif(m[2] == 1) {\n\t\t\t\t\t\t\t\tvar c = f._assets.text2Color(obj.extension);\n\t\t\t\t\t\t\t\tif(c) {\n\t\t\t\t\t\t\t\t\tvar j = $(el)\n\t\t\t\t\t\t\t\t\t\t.appendTo(\"body\"),\n\t\t\t\t\t\t\t\t\t\th = j.css(\"box-shadow\");\n\t\t\t\t\t\t\t\t\th = c + h.substring(h.replace(/^.*(rgba?\\([^)]+\\)).*$/, '$1')\n\t\t\t\t\t\t\t\t\t\t.length, h.length);\n\t\t\t\t\t\t\t\t\tj.css({\n\t\t\t\t\t\t\t\t\t\t\t'-webkit-box-shadow': h,\n\t\t\t\t\t\t\t\t\t\t\t'-moz-box-shadow': h,\n\t\t\t\t\t\t\t\t\t\t\t'box-shadow': h\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.attr('style', '-webkit-box-shadow: ' + h + '; -moz-box-shadow: ' + h + '; box-shadow: ' + h + ';');\n\t\t\t\t\t\t\t\t\tel = j.prop('outerHTML');\n\t\t\t\t\t\t\t\t\tj.remove();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_box: function(params) {\n\t\t\t\t\t\t\tif(n.beforeShow != null && typeof n.beforeShow == \"function\" ? !n.beforeShow(f.files, l, p, o, s) : false) {\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(l.length < 1) {\n\t\t\t\t\t\t\t\tif(n.appendTo) {\n\t\t\t\t\t\t\t\t\tvar appendTo = $(n.appendTo);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar appendTo = p;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tappendTo.find('.jFiler-items')\n\t\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t\t\tl = $('<div class=\"jFiler-items jFiler-row\"></div>');\n\t\t\t\t\t\t\t\ts.prop(\"jFiler\").listEl = l;\n\t\t\t\t\t\t\t\tl.append(f._assets.textParse(n.templates.box))\n\t\t\t\t\t\t\t\t\t.appendTo(appendTo);\n\t\t\t\t\t\t\t\tl.on('click', n.templates._selectors.remove, function(e) {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tvar cf = n.templates.removeConfirmation ? confirm(n.captions.removeConfirmation) : true;\n\t\t\t\t\t\t\t\t\tif(cf) {\n\t\t\t\t\t\t\t\t\t\tf._remove(params ? params.remove.event : e, params ? params.remove.el : $(this)\n\t\t\t\t\t\t\t\t\t\t\t.closest(n.templates._selectors.item));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(var i = 0; i < f.files.length; i++) {\n\t\t\t\t\t\t\t\tif(!f.files[i]._appended) f.files[i]._choosed = true;\n\t\t\t\t\t\t\t\tf._addToMemory(i);\n\t\t\t\t\t\t\t\tf._thumbCreator.create(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_upload: function(i) {\n\t\t\t\t\t\tvar el = f._itFc.html,\n\t\t\t\t\t\t\tformData = new FormData();\n\t\t\t\t\t\tformData.append(s.attr('name'), f._itFc.file, (f._itFc.file.name ? f._itFc.file.name : false));\n\t\t\t\t\t\tif(n.uploadFile.data != null && $.isPlainObject(n.uploadFile.data)) {\n\t\t\t\t\t\t\tfor(var k in n.uploadFile.data) {\n\t\t\t\t\t\t\t\tformData.append(k, n.uploadFile.data[k])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf._ajax.send(el, formData, f._itFc);\n\t\t\t\t\t},\n\t\t\t\t\t_ajax: {\n\t\t\t\t\t\tsend: function(el, formData, c) {\n\t\t\t\t\t\t\tc.ajax = $.ajax({\n\t\t\t\t\t\t\t\turl: n.uploadFile.url,\n\t\t\t\t\t\t\t\tdata: formData,\n\t\t\t\t\t\t\t\ttype: n.uploadFile.type,\n\t\t\t\t\t\t\t\tenctype: n.uploadFile.enctype,\n\t\t\t\t\t\t\t\txhr: function() {\n\t\t\t\t\t\t\t\t\tvar myXhr = $.ajaxSettings.xhr();\n\t\t\t\t\t\t\t\t\tif(myXhr.upload) {\n\t\t\t\t\t\t\t\t\t\tmyXhr.upload.addEventListener(\"progress\", function(e) {\n\t\t\t\t\t\t\t\t\t\t\tf._ajax.progressHandling(e, el)\n\t\t\t\t\t\t\t\t\t\t}, false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn myXhr\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tcomplete: function(jqXHR, textStatus) {\n\t\t\t\t\t\t\t\t\tc.ajax = false;\n\t\t\t\t\t\t\t\t\tf._ajFc++;\n\t\t\t\t\t\t\t\t\tif(f._ajFc >= f.files.length) {\n\t\t\t\t\t\t\t\t\t\tf._ajFc = 0;\n\t\t\t\t\t\t\t\t\t\tn.uploadFile.onComplete != null && typeof n.uploadFile.onComplete == \"function\" ? n.uploadFile.onComplete(l, p, o, s, jqXHR, textStatus) : null;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbeforeSend: function(jqXHR, settings) {\n\t\t\t\t\t\t\t\t\treturn n.uploadFile.beforeSend != null && typeof n.uploadFile.beforeSend == \"function\" ? n.uploadFile.beforeSend(el, l, p, o, s, c.id, jqXHR, settings) : true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\t\t\t\t\tc.uploaded = true;\n\t\t\t\t\t\t\t\t\tn.uploadFile.success != null && typeof n.uploadFile.success == \"function\" ? n.uploadFile.success(data, el, l, p, o, s, c.id, textStatus, jqXHR) : null\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t\t\t\tc.uploaded = false;\n\t\t\t\t\t\t\t\t\tn.uploadFile.error != null && typeof n.uploadFile.error == \"function\" ? n.uploadFile.error(el, l, p, o, s, c.id, jqXHR, textStatus, errorThrown) : null\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstatusCode: n.uploadFile.statusCode,\n\t\t\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\t\t\tcontentType: false,\n\t\t\t\t\t\t\t\tprocessData: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn c.ajax;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprogressHandling: function(e, el) {\n\t\t\t\t\t\t\tif(e.lengthComputable) {\n\t\t\t\t\t\t\t\tvar t = Math.round(e.loaded * 100 / e.total)\n\t\t\t\t\t\t\t\t\t.toString();\n\t\t\t\t\t\t\t\tn.uploadFile.onProgress != null && typeof n.uploadFile.onProgress == \"function\" ? n.uploadFile.onProgress(t, el, l, p, o, s) : null;\n\t\t\t\t\t\t\t\tel.find('.jFiler-jProgressBar')\n\t\t\t\t\t\t\t\t\t.find(n.templates._selectors.progressBar)\n\t\t\t\t\t\t\t\t\t.css(\"width\", t + \"%\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_dragDrop: {\n\t\t\t\t\t\tdragEnter: function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tp.addClass('dragged');\n\t\t\t\t\t\t\tf._set('feedback', n.captions.drop);\n\t\t\t\t\t\t\tn.dragDrop.dragEnter != null && typeof n.dragDrop.dragEnter == \"function\" ? n.dragDrop.dragEnter(e, o, s, p) : null;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdragLeave: function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tif(!f._dragDrop._dragLeaveCheck(e)) {\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp.removeClass('dragged');\n\t\t\t\t\t\t\tf._set('feedback', n.captions.feedback);\n\t\t\t\t\t\t\tn.dragDrop.dragLeave != null && typeof n.dragDrop.dragLeave == \"function\" ? n.dragDrop.dragLeave(e, o, s, p) : null;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdrop: function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tp.removeClass('dragged');\n\t\t\t\t\t\t\tf._set('feedback', n.captions.feedback);\n\t\t\t\t\t\t\tif(e && e.originalEvent && e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files && e.originalEvent.dataTransfer.files.length > 0) {\n\t\t\t\t\t\t\t\tf._onChange(e, e.originalEvent.dataTransfer.files);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tn.dragDrop.drop != null && typeof n.dragDrop.drop == \"function\" ? n.dragDrop.drop(e.originalEvent.dataTransfer.files, e, o, s, p) : null;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_dragLeaveCheck: function(e) {\n\t\t\t\t\t\t\tvar related = e.relatedTarget,\n\t\t\t\t\t\t\t\tinside = false;\n\t\t\t\t\t\t\tif(related !== o) {\n\t\t\t\t\t\t\t\tif(related) {\n\t\t\t\t\t\t\t\t\tinside = $.contains(o, related);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(inside) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_clipboardPaste: function(e, fromDrop) {\n\t\t\t\t\t\tif(!fromDrop && (!e.originalEvent.clipboardData && !e.originalEvent.clipboardData.items)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(fromDrop && (!e.originalEvent.dataTransfer && !e.originalEvent.dataTransfer.items)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(f._clPsePre) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar items = (fromDrop ? e.originalEvent.dataTransfer.items : e.originalEvent.clipboardData.items),\n\t\t\t\t\t\t\tb64toBlob = function(b64Data, contentType, sliceSize) {\n\t\t\t\t\t\t\t\tcontentType = contentType || '';\n\t\t\t\t\t\t\t\tsliceSize = sliceSize || 512;\n\t\t\t\t\t\t\t\tvar byteCharacters = atob(b64Data);\n\t\t\t\t\t\t\t\tvar byteArrays = [];\n\t\t\t\t\t\t\t\tfor(var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n\t\t\t\t\t\t\t\t\tvar slice = byteCharacters.slice(offset, offset + sliceSize);\n\t\t\t\t\t\t\t\t\tvar byteNumbers = new Array(slice.length);\n\t\t\t\t\t\t\t\t\tfor(var i = 0; i < slice.length; i++) {\n\t\t\t\t\t\t\t\t\t\tbyteNumbers[i] = slice.charCodeAt(i);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvar byteArray = new Uint8Array(byteNumbers);\n\t\t\t\t\t\t\t\t\tbyteArrays.push(byteArray);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar blob = new Blob(byteArrays, {\n\t\t\t\t\t\t\t\t\ttype: contentType\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn blob;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tif(items) {\n\t\t\t\t\t\t\tfor(var i = 0; i < items.length; i++) {\n\t\t\t\t\t\t\t\tif(items[i].type.indexOf(\"image\") !== -1 || items[i].type.indexOf(\"text/uri-list\") !== -1) {\n\t\t\t\t\t\t\t\t\tif(fromDrop) {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\twindow.atob(e.originalEvent.dataTransfer.getData(\"text/uri-list\")\n\t\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t\t.split(',')[1]);\n\t\t\t\t\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvar blob = (fromDrop ? b64toBlob(e.originalEvent.dataTransfer.getData(\"text/uri-list\")\n\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t.split(',')[1], \"image/png\") : items[i].getAsFile());\n\t\t\t\t\t\t\t\t\tblob.name = Math.random()\n\t\t\t\t\t\t\t\t\t\t.toString(36)\n\t\t\t\t\t\t\t\t\t\t.substring(5);\n\t\t\t\t\t\t\t\t\tblob.name += blob.type.indexOf(\"/\") != -1 ? \".\" + blob.type.split(\"/\")[1].toString()\n\t\t\t\t\t\t\t\t\t\t.toLowerCase() : \".png\";\n\t\t\t\t\t\t\t\t\tf._onChange(e, [blob]);\n\t\t\t\t\t\t\t\t\tf._clPsePre = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\tdelete f._clPsePre\n\t\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_onSelect: function(i) {\n\t\t\t\t\t\tif(n.uploadFile && !$.isEmptyObject(n.uploadFile)) {\n\t\t\t\t\t\t\tf._upload(i)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn.onSelect != null && typeof n.onSelect == \"function\" ? n.onSelect(f.files[i], f._itFc.html, l, p, o, s) : null;\n\t\t\t\t\t\tif(i + 1 >= f.files.length) {\n\t\t\t\t\t\t\tn.afterShow != null && typeof n.afterShow == \"function\" ? n.afterShow(l, p, o, s) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_onChange: function(e, d) {\n\t\t\t\t\t\tif(!d) {\n\t\t\t\t\t\t\tif(!s.get(0)\n\t\t\t\t\t\t\t\t.files || typeof s.get(0)\n\t\t\t\t\t\t\t\t.files == \"undefined\" || s.get(0)\n\t\t\t\t\t\t\t\t.files.length == 0) {\n\t\t\t\t\t\t\t\tif(!n.uploadFile && !n.addMore) {\n\t\t\t\t\t\t\t\t\tf._set('input', '');\n\t\t\t\t\t\t\t\t\tf._clear();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tf.files = s.get(0)\n\t\t\t\t\t\t\t\t.files;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!d || d.length == 0) {\n\t\t\t\t\t\t\t\tf._set('input', '');\n\t\t\t\t\t\t\t\tf._clear();\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tf.files = d;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!n.uploadFile && !n.addMore) {\n\t\t\t\t\t\t\tf._reset(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files = f.files;\n\t\t\t\t\t\tif(!f._filesCheck() || (n.beforeSelect != null && typeof n.beforeSelect == \"function\" ? !n.beforeSelect(f.files, l, p, o, s) : false)) {\n\t\t\t\t\t\t\tf._set('input', '');\n\t\t\t\t\t\t\tf._clear();\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf._set('feedback', f.files.length + f._itFl.length + ' ' + n.captions.feedback2);\n\t\t\t\t\t\tif(n.showThumbs) {\n\t\t\t\t\t\t\tf._thumbCreator._box();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor(var i = 0; i < f.files.length; i++) {\n\t\t\t\t\t\t\t\tf.files[i]._choosed = true;\n\t\t\t\t\t\t\t\tf._addToMemory(i);\n\t\t\t\t\t\t\t\tf._onSelect(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!n.uploadFile && n.addMore) {\n\t\t\t\t\t\t\tvar elem = $('<input type=\"file\" />');\n\t\t\t\t\t\t\tvar attributes = s.prop(\"attributes\");\n\t\t\t\t\t\t\t$.each(attributes, function() {\n\t\t\t\t\t\t\t\telem.attr(this.name, this.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ts.after(elem);\n\t\t\t\t\t\t\tf._unbindInput();\n\t\t\t\t\t\t\tsl.push(elem);\n\t\t\t\t\t\t\ts = elem;\n\t\t\t\t\t\t\tf._bindInput();\n\t\t\t\t\t\t\tf._set('props');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_append: function(e, data) {\n\t\t\t\t\t\tvar files = (!data ? false : data.files);\n\t\t\t\t\t\tif(!files || files.length <= 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.files = files;\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files = f.files;\n\t\t\t\t\t\tif(n.showThumbs) {\n\t\t\t\t\t\t\tfor(var i = 0; i < f.files.length; i++) {\n\t\t\t\t\t\t\t\tf.files[i]._appended = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tf._thumbCreator._box();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_getList: function(e, data) {\n\t\t\t\t\t\tvar files = (!data ? false : data.files);\n\t\t\t\t\t\tif(!files || files.length <= 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.files = files;\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files = f.files;\n\t\t\t\t\t\tif(n.showThumbs) {\n\t\t\t\t\t\t\tvar returnData = [];\n\t\t\t\t\t\t\tfor(var i = 0; i < f.files.length; i++) {\n\t\t\t\t\t\t\t\tf.files[i].forList = true;\n\t\t\t\t\t\t\t\treturnData.push(f._thumbCreator.create(i));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(data.callback) {\n\t\t\t\t\t\t\t\tdata.callback(returnData, l, p, o, s);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_retryUpload: function(e, data) {\n\t\t\t\t\t\tvar id = parseInt(typeof data == \"object\" ? data.attr(\"data-jfiler-index\") : data),\n\t\t\t\t\t\t\tobj = f._itFl.filter(function(value, key) {\n\t\t\t\t\t\t\t\treturn value.id == id;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\tif(obj.length > 0) {\n\t\t\t\t\t\t\tif(n.uploadFile && !$.isEmptyObject(n.uploadFile) && !obj[0].uploaded) {\n\t\t\t\t\t\t\t\tf._itFc = obj[0];\n\t\t\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t\t\t.current_file = f._itFc;\n\t\t\t\t\t\t\t\tf._upload(id);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_remove: function(e, el) {\n\t\t\t\t\t\tif(el.binded) {\n\t\t\t\t\t\t\tif(typeof(el.data.id) != \"undefined\") {\n\t\t\t\t\t\t\t\tel = l.find(n.templates._selectors.item + \"[data-jfiler-index='\" + el.data.id + \"']\");\n\t\t\t\t\t\t\t\tif(el.size() == 0) {\n\t\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(el.data.el) {\n\t\t\t\t\t\t\t\tel = el.data.el;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar attrId = el.get(0)\n\t\t\t\t\t\t\t.jfiler_id || el.attr('data-jfiler-index'),\n\t\t\t\t\t\t\tid = null,\n\t\t\t\t\t\t\texcl_input = function(id) {\n\t\t\t\t\t\t\t\tvar input = p.find(\"input[name^='jfiler-items-exclude-']:hidden\")\n\t\t\t\t\t\t\t\t\t.first(),\n\t\t\t\t\t\t\t\t\titem = f._itFl[id],\n\t\t\t\t\t\t\t\t\tval = [];\n\t\t\t\t\t\t\t\tif(input.size() == 0) {\n\t\t\t\t\t\t\t\t\tinput = $('<input type=\"hidden\" name=\"jfiler-items-exclude-' + (n.excludeName ? n.excludeName : (s.attr(\"name\")\n\t\t\t\t\t\t\t\t\t\t.slice(-2) != \"[]\" ? s.attr(\"name\") : s.attr(\"name\")\n\t\t\t\t\t\t\t\t\t\t.substring(0, s.attr(\"name\")\n\t\t\t\t\t\t\t\t\t\t\t.length - 2)) + \"-\" + t) + '\">');\n\t\t\t\t\t\t\t\t\tinput.appendTo(p);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(item.file._choosed || item.file._appended || item.uploaded) {\n\t\t\t\t\t\t\t\t\tf._prEr = true;\n\t\t\t\t\t\t\t\t\tf._itFr.push(item);\n\t\t\t\t\t\t\t\t\tif(n.addMore) {\n\t\t\t\t\t\t\t\t\t\tvar current_input = item.input,\n\t\t\t\t\t\t\t\t\t\t\tcount_same_input = 0;\n\t\t\t\t\t\t\t\t\t\tf._itFl.filter(function(val, index) {\n\t\t\t\t\t\t\t\t\t\t\tif(val.file._choosed && val.input.get(0) == current_input.get(0)) count_same_input++;\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tif(count_same_input == 1) {\n\t\t\t\t\t\t\t\t\t\t\tf._itFr = f._itFr.filter(function(val, index) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn val.file._choosed ? val.input.get(0) != current_input.get(0) : true;\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\tcurrent_input.val(\"\");\n\t\t\t\t\t\t\t\t\t\t\tf._prEr = false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfor(var i = 0; i < f._itFr.length; i++) {\n\t\t\t\t\t\t\t\t\t\tval.push(f._itFr[i].file.name);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tval = JSON.stringify(val);\n\t\t\t\t\t\t\t\t\tinput.val(val);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcallback = function(el, id) {\n\t\t\t\t\t\t\t\texcl_input(id);\n\t\t\t\t\t\t\t\tf._itFl.splice(id, 1);\n\t\t\t\t\t\t\t\tif(f._itFl.length < 1) {\n\t\t\t\t\t\t\t\t\tf._reset();\n\t\t\t\t\t\t\t\t\tf._clear();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tf._set('feedback', f._itFl.length + ' ' + n.captions.feedback2);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tel.fadeOut(\"fast\", function() {\n\t\t\t\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tfor(var key in f._itFl) {\n\t\t\t\t\t\t\tif(key === 'length' || !f._itFl.hasOwnProperty(key)) continue;\n\t\t\t\t\t\t\tif(f._itFl[key].id == attrId) {\n\t\t\t\t\t\t\t\tid = key;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!f._itFl.hasOwnProperty(id)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(f._itFl[id].ajax) {\n\t\t\t\t\t\t\tf._itFl[id].ajax.abort();\n\t\t\t\t\t\t\tcallback(el, id);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn.onRemove != null && typeof n.onRemove == \"function\" ? n.onRemove(el, f._itFl[id].file, id, l, p, o, s) : null;\n\t\t\t\t\t\tcallback(el, id);\n\t\t\t\t\t},\n\t\t\t\t\t_addToMemory: function(i) {\n\t\t\t\t\t\tf._itFl.push({\n\t\t\t\t\t\t\tid: f._itFl.length,\n\t\t\t\t\t\t\tfile: f.files[i],\n\t\t\t\t\t\t\thtml: $(),\n\t\t\t\t\t\t\tajax: false,\n\t\t\t\t\t\t\tuploaded: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(n.addMore && !f.files[i]._appended) f._itFl[f._itFl.length - 1].input = s;\n\t\t\t\t\t\tf._itFc = f._itFl[f._itFl.length - 1];\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.files_list = f._itFl;\n\t\t\t\t\t\ts.prop(\"jFiler\")\n\t\t\t\t\t\t\t.current_file = f._itFc;\n\t\t\t\t\t},\n\t\t\t\t\t_assets: {\n\t\t\t\t\t\tbytesToSize: function(bytes) {\n\t\t\t\t\t\t\tif(bytes == 0) return '0 Byte';\n\t\t\t\t\t\t\tvar k = 1000;\n\t\t\t\t\t\t\tvar sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\t\t\t\t\t\t\tvar i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\t\t\t\t\t\treturn(bytes / Math.pow(k, i))\n\t\t\t\t\t\t\t\t.toPrecision(3) + ' ' + sizes[i];\n\t\t\t\t\t\t},\n\t\t\t\t\t\thasAttr: function(attr, el) {\n\t\t\t\t\t\t\tvar el = (!el ? s : el),\n\t\t\t\t\t\t\t\ta = el.attr(attr);\n\t\t\t\t\t\t\tif(!a || typeof a == \"undefined\") {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetIcon: function(ext, type) {\n\t\t\t\t\t\t\tvar types = [\"audio\", \"image\", \"text\", \"video\"];\n\t\t\t\t\t\t\tif($.inArray(type, types) > -1) {\n\t\t\t\t\t\t\t\treturn '<i class=\"icon-jfi-file-' + type + ' jfi-file-ext-' + ext + '\"></i>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn '<i class=\"icon-jfi-file-o jfi-file-type-' + type + ' jfi-file-ext-' + ext + '\"></i>';\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttextParse: function(text, opts) {\n\t\t\t\t\t\t\topts = $.extend({}, {\n\t\t\t\t\t\t\t\tlimit: n.limit,\n\t\t\t\t\t\t\t\tmaxSize: n.maxSize,\n\t\t\t\t\t\t\t\textensions: n.extensions ? n.extensions.join(',') : null,\n\t\t\t\t\t\t\t}, (opts && $.isPlainObject(opts) ? opts : {}), n.options);\n\t\t\t\t\t\t\tswitch(typeof(text)) {\n\t\t\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t\t\treturn text.replace(/\\{\\{fi-(.*?)\\}\\}/g, function(match, a) {\n\t\t\t\t\t\t\t\t\t\ta = a.replace(/ /g, '');\n\t\t\t\t\t\t\t\t\t\tif(a.match(/(.*?)\\|limitTo\\:(\\d+)/)) {\n\t\t\t\t\t\t\t\t\t\t\treturn a.replace(/(.*?)\\|limitTo\\:(\\d+)/, function(match, a, b) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar a = (opts[a] ? opts[a] : \"\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tstr = a.substring(0, b);\n\t\t\t\t\t\t\t\t\t\t\t\tstr = (a.length > str.length ? str.substring(0, str.length - 3) + \"...\" : str);\n\t\t\t\t\t\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn(opts[a] ? opts[a] : \"\");\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\t\t\treturn text(opts);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn text;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttext2Color: function(str) {\n\t\t\t\t\t\t\tif(!str || str.length == 0) {\n\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(var i = 0, hash = 0; i < str.length; hash = str.charCodeAt(i++) + ((hash << 5) - hash));\n\t\t\t\t\t\t\tfor(var i = 0, colour = \"#\"; i < 3; colour += (\"00\" + ((hash >> i++ * 2) & 0xFF)\n\t\t\t\t\t\t\t\t\t.toString(16))\n\t\t\t\t\t\t\t\t.slice(-2));\n\t\t\t\t\t\t\treturn colour;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tfiles: null,\n\t\t\t\t\t_itFl: [],\n\t\t\t\t\t_itFc: null,\n\t\t\t\t\t_itFr: [],\n\t\t\t\t\t_ajFc: 0,\n\t\t\t\t\t_prEr: false\n\t\t\t\t}\n\t\t\t\n\t\t\ts.on(\"filer.append\", function(e, data) {\n\t\t\t\tf._append(e, data)\n\t\t\t}).on(\"filer.remove\", function(e, data) {\n\t\t\t\tdata.binded = true;\n\t\t\t\tf._remove(e, data);\n\t\t\t}).on(\"filer.reset\", function(e) {\n\t\t\t\tf._reset();\n\t\t\t\tf._clear();\n\t\t\t\treturn true;\n\t\t\t}).on(\"filer.generateList\", function(e, data) {\n\t\t\t\treturn f._getList(e, data)\n\t\t\t}).on(\"filer.retry\", function(e, data) {\n\t\t\t\treturn f._retryUpload(e, data)\n\t\t\t});\n\t\t\t\n\t\t\tf.init();\n\t\t\t\n\t\t\treturn this;\n\t\t});\n\t};\n\t$.fn.filer.defaults = {\n\t\tlimit: null,\n\t\tmaxSize: null,\n\t\textensions: null,\n\t\tchangeInput: true,\n\t\tshowThumbs: false,\n\t\tappendTo: null,\n\t\ttheme: 'default',\n\t\ttemplates: {\n\t\t\tbox: '<ul class=\"jFiler-items-list jFiler-items-default\"></ul>',\n\t\t\titem: '<li class=\"jFiler-item\"><div class=\"jFiler-item-container\"><div class=\"jFiler-item-inner\"><div class=\"jFiler-item-icon pull-left\">{{fi-icon}}</div><div class=\"jFiler-item-info pull-left\"><div class=\"jFiler-item-title\" title=\"{{fi-name}}\">{{fi-name | limitTo:30}}</div><div class=\"jFiler-item-others\"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class=\"jFiler-item-status\">{{fi-progressBar}}</span></div><div class=\"jFiler-item-assets\"><ul class=\"list-inline\"><li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li></ul></div></div></div></div></li>',\n\t\t\titemAppend: '<li class=\"jFiler-item\"><div class=\"jFiler-item-container\"><div class=\"jFiler-item-inner\"><div class=\"jFiler-item-icon pull-left\">{{fi-icon}}</div><div class=\"jFiler-item-info pull-left\"><div class=\"jFiler-item-title\">{{fi-name | limitTo:35}}</div><div class=\"jFiler-item-others\"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class=\"jFiler-item-status\"></span></div><div class=\"jFiler-item-assets\"><ul class=\"list-inline\"><li><a class=\"icon-jfi-trash jFiler-item-trash-action\"></a></li></ul></div></div></div></div></li>',\n\t\t\tprogressBar: '<div class=\"bar\"></div>',\n\t\t\titemAppendToEnd: false,\n\t\t\tremoveConfirmation: true,\n\t\t\t_selectors: {\n\t\t\t\tlist: '.jFiler-items-list',\n\t\t\t\titem: '.jFiler-item',\n\t\t\t\tprogressBar: '.bar',\n\t\t\t\tremove: '.jFiler-item-trash-action'\n\t\t\t}\n\t\t},\n\t\tfiles: null,\n\t\tuploadFile: null,\n\t\tdragDrop: null,\n\t\taddMore: false,\n\t\tclipBoardPaste: true,\n\t\texcludeName: null,\n\t\tbeforeRender: null,\n\t\tafterRender: null,\n\t\tbeforeShow: null,\n\t\tbeforeSelect: null,\n\t\tonSelect: null,\n\t\tafterShow: null,\n\t\tonRemove: null,\n\t\tonEmpty: null,\n\t\toptions: null,\n\t\tcaptions: {\n\t\t\tbutton: \"Choose Files\",\n\t\t\tfeedback: \"Choose files To Upload\",\n\t\t\tfeedback2: \"files were chosen\",\n\t\t\tdrop: \"Drop file here to Upload\",\n\t\t\tremoveConfirmation: \"Are you sure you want to remove this file?\",\n\t\t\terrors: {\n\t\t\t\tfilesLimit: \"Only {{fi-limit}} files are allowed to be uploaded.\",\n\t\t\t\tfilesType: \"Only Images are allowed to be uploaded.\",\n\t\t\t\tfilesSize: \"{{fi-name}} is too large! Please upload file up to {{fi-maxSize}} MB.\",\n\t\t\t\tfilesSizeAll: \"Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB.\"\n\t\t\t}\n\t\t}\n\t}\n})(jQuery);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/php/class.uploader.php",
    "content": "<?php\n# ======================================================================== #\n#  \n#  Title      [PHP] Uploader\n#  Author:    CreativeDream\n#  Website:   https://github.com/CreativeDream/php-uploader\n#  Version:   0.2\n#  Date:      26-Aug-2015\n#  Purpose:   Validate, Remove, Upload, Download files to server.\n#\n# ======================================================================== #\n\nclass Uploader {\n    \n    protected $options = array(\n        'limit' => 10,\n        'maxSize' => 10,\n        'extensions' => null,\n        'required' => false,\n        'uploadDir' => 'uploads/',\n        'title' => array('auto', 10),\n        'removeFiles' => true,\n        'perms' => null,\n        'onCheck' => null,\n        'onError' => null,\n        'onSuccess' => null,\n        'onUpload' => null,\n        'onComplete' => null,\n        'onRemove' => null\n    );\n    \n    public $error_messages = array(\n        1 => \"The uploaded file exceeds the upload_max_filesize directive in php.ini.\",\n        2 => \"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.\",\n        3 => \"The uploaded file was only partially uploaded.\",\n        4 => \"No file was uploaded.\",\n        6 => \"Missing a temporary folder.\",\n        7 => \"Failed to write file to disk.\",\n        8 => \"A PHP extension stopped the file upload.\",\n        'accept_file_types' => \"Filetype not allowed\",\n        'file_uploads' => \"File uploading option in disabled in php.ini\",\n        'post_max_size' => \"The uploaded file exceeds the post_max_size directive in php.ini\",\n        'max_file_size' => \"File is too big\",\n        'max_number_of_files' => \"Maximum number of files exceeded\",\n        'required_and_no_file' => \"No file was choosed. Please select one.\",\n        'no_download_content' => \"File could't be download.\"\n    );\n    \n    private $field = null;\n    private $data = array(\n        \"hasErrors\" => false,\n        \"hasWarnings\" => false,\n        \"isSuccess\" => false,\n        \"isComplete\" => false,\n        \"data\" => array(\n            \"files\" => array(),\n            \"metas\" => array()\n        )\n    );\n\n    public function __construct(){\n        // __construct function\n        \n        $this->cache_data = $this->data;\n    }\n    \n    /**\n     * upload method\n     *\n     * Return the initialize method\n     * @param $field {Array, String}\n     * @param $options {Array, null}\n     * @return array\n     */\n    public function upload($field, $options = null){\n        $this->data = $this->cache_data;\n        return $this->initialize($field, $options);\n    }\n    \n    /**\n     * initialize method\n     *\n     * Initialize field values and properties.\n     * Merge options\n     * Prepare files\n     * @param $field {Array, String}\n     * @param $options {Array, null}\n     * @return array\n     */\n    private function initialize($field, $options){\n\t\tif(is_array($field) && in_array($field, $_FILES)){\n\t\t\t$this->field = $field;\n            $this->field['Field_Name'] = array_search($field, $_FILES);\n            $this->field['Field_Type'] = 'input';\n            \n            if(!is_array($this->field['name'])){\n           \t$this->field = array_merge($this->field, array(\"name\" => array($this->field['name']), \"tmp_name\"=>array($this->field['tmp_name']), \"type\"=>array($this->field['type']), \"error\"=>array($this->field['error']), \"size\"=>array($this->field['size'])));\n            }\n            \n            foreach($this->field['name'] as $key=>$value){ if(empty($value)){ unset($this->field['name'][$key]); unset($this->field['type'][$key]); unset($this->field['tmp_name'][$key]); unset($this->field['error'][$key]); unset($this->field['size'][$key]); } }\n            \n            $this->field['length'] = count($this->field['name']);\n\t\t}elseif(is_string($field) && $this->isURL($field)){\n            $this->field = array(\"name\" => array($field), \"size\"=>array(), \"type\"=>array(), \"error\"=>array());\n            $this->field['Field_Type'] = 'link';\n            $this->field['length'] = 1;\n        }else{\n            return false;   \n        }\n        \n        if($options != null){\n            $this->setOptions($options);\n        }\n\t\t\n\t\treturn $this->prepareFiles();\n    }\n    \n    /**\n     * setOptions method\n     *\n     * Merge options\n     * @param $options {Array}\n     */\n    private function setOptions($options){\n        if(!is_array($options)){return false;}\n        $this->options = array_merge($this->options, $options);\n    }\n\t\n\t/**\n     * validation method\n     *\n     * Check the field and files\n     * @return boolean\n     */\n    private function validate($file = null){\n        $field = $this->field;\n        $errors = array();\n        $options = $this->options;\n        \n        if($file == null){\n            $ini = array(ini_get('file_uploads'),((int) ini_get('upload_max_filesize')),((int) ini_get('post_max_size')), ((int) ini_get('max_file_uploads')));\n            \n            if(!isset($field) || empty($field)) return false;\n            if(!$ini[0]) $errors[] = $this->error_messages['file_uploads'];\n            \n            if($options['required'] && $field['length'] == 0) $errors[] = $this->error_messages['required_and_no_file'];\n            if(($options['limit'] && $field['length'] > $options['limit']) || ($field['length']) > $ini[3]) $errors[] = $this->error_messages['max_number_of_files'];\n            if(!file_exists($options['uploadDir']) && !is_dir($options['uploadDir']) && mkdir($options['uploadDir'], 750, true)){\n                $this->data['hasWarnings'] = true;\n                $this->data['warnings'] = \"A new directory was created in \" . realpath($options['uploadDir']);\n            }\n            if(!is_writable($options['uploadDir'])) @chmod($options['uploadDir'], 750);\n            \n            if($field['Field_Type'] == \"input\"){\n                $total_size = 0; foreach($this->field['size'] as $key=>$value){ $total_size += $value; } $total_size = $total_size/1048576;\n                if($options['maxSize'] && $total_size > $options['maxSize']) $errors[] = $this->error_messages['max_file_size'];\n                \n                if($total_size > $ini[1]) $errors[] = $this->error_messages[1];\n                if($total_size > $ini[2]) $errors[] = $this->error_messages['post_max_size'];\n            }\n        }else{\n            if(@$field['error'][$file['index']] > 0 && array_key_exists($field['error'][$file['index']], $this->error_messages)) $errors[] = $this->error_messages[$field['error'][$file['index']]];\n            if($options['extensions'] && !in_array($file['extension'], $options['extensions'])) $errors[] = $this->error_messages['accept_file_types'];\n            if($file['type'][0] == \"image\" && @!is_array(getimagesize($file['tmp']))) $errors[] = $this->error_messages['accept_file_types'];\n            if($options['maxSize'] && $file['size'][0] > $options['maxSize']) $errors[] = $this->error_messages['max_file_size'];\n            \n            if($field['Field_Type'] == 'link' && empty($this->cache_download_content)) $errors[] = \"\";\n        }\n        \n        $custom = $this->_onCheck($file); if($custom) $errors = array_merge($errors, $custom);\n        \n        if(!empty($errors)){\n            $this->data['hasErrors'] = true;\n            if(!isset($this->data['errors'])) $this->data['errors'] = array();\n            \n            $this->data['errors'][] = $errors;\n            $custom = $this->_onError($errors, $file);\n            \n            return false;\n        }else{\n            return true;\n        }\n\t}\n\t\n\t/**\n     * prepareFiles method\n     *\n     * Prepare files for upload/download and generate meta infos\n     * @return $this->data\n     */\n\tprivate function prepareFiles(){\n        $field = $this->field;\n        $validate = $this->validate();\n        \n        if($validate){\n            $files = array();\n            $removed_files = $this->removeFiles();\n            \n            for($i = 0; $i < count($field['name']); $i++){\n                \n                $metas = array();\n                \n                if($field['Field_Type'] == 'input'){\n                    $tmp_name = $field['tmp_name'][$i];\n                }elseif($field['Field_Type'] == 'link'){\n                    $link = $this->downloadFile($field['name'][0], false, true);\n                    \n                    $tmp_name = $field['name'][0];\n                    $field['name'][0] = pathinfo($field['name'][0], PATHINFO_BASENAME);\n                    $field['type'][0] = $link['type'];\n                    $field['size'][0] = $link['size'];\n                    $field['error'][0] = 0;\n                }\n                \n                $metas['extension'] = substr(strrchr(strtolower($field['name'][$i]), \".\"),1);\n                $metas['type'] = preg_split('[/]', $field['type'][$i]);\n                $metas['extension'] = $field['Field_Type'] == 'link' && empty($metas['extension']) ? $metas['type'][1] : $metas['extension'];\n                $metas['old_name'] = substr($field['name'][$i], 0, -(strlen(strrchr($field['name'][$i], $metas['extension']))+1));\n                $metas['size'] = $field['size'][$i];\n                $metas['size2'] = $this->formatSize($metas['size']);\n                $metas['name'] = $this->generateFileName($this->options['title'], array('name'=>$metas['old_name'], 'size'=>$metas['size'])) . (!empty($metas['extension']) ? \".\" . $metas['extension'] : \"\");\n                $metas['file'] = $this->options['uploadDir'] . $metas['name'];\n                $metas['replaced'] = file_exists($metas['file']);\n                $metas['date'] = date('r');\n                \n                if(!in_array($field['name'][$i], $removed_files) && $this->validate(array_merge($metas, array('index'=>$i, 'tmp'=>$tmp_name))) && $this->uploadFile($tmp_name, $metas['file'])){\n                    if($this->options['perms']) @chmod($metas['file'], $this->options['perms']);\n                    \n                    $custom = $this->_onUpload($metas, $this->field); if($custom && is_array($custom)) $metas = array_merge($custom, $metas);\n                    \n                    ksort($metas);\n                    \n                    $files[] = $metas['file'];\n                    $this->data['data']['metas'][] = $metas;   \n                }\n            }\n            \n            $this->data['isSuccess'] = count($field['name']) - count($removed_files) == count($files);\n            $this->data['data']['files'] = $files;\n            \n            if($this->data['isSuccess']) $custom = $this->_onSuccess($this->data['data']['files'], $this->data['data']['metas']);\n            \n            $this->data['isComplete'] = true;\n            $custom = $this->_onComplete($this->data['data']['files'], $this->data['data']['metas']);\n        }\n        \n        return $this->data;\n\t}\n    \n    /**\n     * uploadFile method\n     *\n     * Upload/Download files to server\n     * @return boolean\n     */\n    private function uploadFile($source, $destination){\n        if($this->field['Field_Type'] == 'input'){\n            return @move_uploaded_file($source, $destination);\n        }elseif($this->field['Field_Type'] == 'link'){\n            return $this->downloadFile($source, $destination);\n        }\n    }\n\t\n\t/**\n     * removeFiles method\n     *\n     * Remove files or cancel upload for them\n     * @return array\n     */\n\tprivate function removeFiles(){\n        $removed_files = array();\n        if($this->options['removeFiles'] !== false){\n            foreach($_POST as $key=>$value){\n                preg_match((is_string($this->options['removeFiles']) ? $this->options['removeFiles'] : '/jfiler-items-exclude-'.$this->field['Field_Name'].'-(\\d+)/'), $key, $matches);\n\n                if(isset($matches) && !empty($matches)){\n                    $input = $_POST[$matches[0]];\n                    if($this->isJson($input)) $removed_files = json_decode($input, true);\n                    \n                    $custom = $this->_onRemove($removed_files, $this->field); if($custom && is_array($custom)) $removed_files = $custom;\n                }\n            }\n        }\n        return $removed_files;\n\t}\n\t\n    /**\n     * downloadFile method\n     *\n     * Download file to server\n     * @return boolean\n     */\n    private function downloadFile($source, $destination, $info = false){\n        set_time_limit(80);\n        \n        $forInfo = array(\n            \"size\" => 1,\n            \"type\" => \"text/plain\"\n        );\n        \n        if(!isset($this->cache_download_content)){\n            $file_content = file_get_contents($source);\n            if($info){\n                $headers = implode(\" \", $http_response_header);\n                if(preg_match('/Content-Length: (\\d+)/', $headers, $matches)) $forInfo['size'] = $matches[1];\n                if(preg_match('/Content-Type: (\\w+\\/\\w+)/', $headers, $matches)) $forInfo['type'] = $matches[1];\n\n                $this->cache_download_content = $file_content;\n\n                return $forInfo;\n            }\n        }else{\n            $file_content = $this->cache_download_content;\n        }\n        \n        $downloaded_file = @fopen($destination, 'w');\n        $written = @fwrite($downloaded_file, $file_content);\n        @fclose($downloaded_file);\n        \n        return $written;\n    }\n    \n\t/**\n     * generateFileName method\n     *\n     * Generated a file name by uploading\n     * @return boolean\n     */\n\tprivate function generateFileName($conf, $file){\n\t\t$type = is_array($conf) && isset($conf[0]) ? $conf[0] : $conf;\n        $type = $type ? $type : 'name';\n\t\t$length = is_array($conf) && isset($conf[1]) ? $conf[1] : null;\n\t\t$random_string = substr(str_shuffle(\"_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"), 0, $length ? $length : 10);\n\t\t$string = \"\";\n\t\t\n\t\tswitch($type){\n\t\t\tcase \"auto\":\n\t\t\t\t$string = $random_string;\n\t\t\tbreak;\n\t\t\tcase \"name\":\n\t\t\t\t$string = $file['name'];\n\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t$string = $type;\n\t\t\t\t\n\t\t\t\tif(strpos($string, \"{{random}}\") !== false){\n\t\t\t\t\t$string = str_replace(\"{{random}}\", $random_string, $string);\n\t\t\t\t}\n\t\t\t\tif(strpos($string, \"{{file_name}}\") !== false){\n\t\t\t\t\t$string = str_replace(\"{{file_name}}\", $file['name'], $string);\t\n\t\t\t\t}\n\t\t\t\tif(strpos($string, \"{{file_size}}\") !== false){\n\t\t\t\t\t$string = str_replace(\"{{file_size}}\", $file['size'], $string);\t\n\t\t\t\t}\n\t\t\t\tif(strpos($string, \"{{timestamp}}\") !== false){\n\t\t\t\t\t$string = str_replace(\"{{timestamp}}\", time(), $string);\t\n\t\t\t\t}\n\t\t\t\tif(strpos($string, \"{{date}}\") !== false){\n\t\t\t\t\t$string = str_replace(\"{{date}}\", date('Y-n-d_H:i:s'), $string);\t\n\t\t\t\t}\n\t\t}\n\t\t\n\t\treturn $string;\n\t}\n    \n    /**\n     * isJson method\n     *\n     * Check if string is a valid json\n     * @return boolean\n     */\n    function isJson($string) {\n        json_decode($string);\n        return (json_last_error() == JSON_ERROR_NONE);\n    }\n    \n    /**\n     * isURL method\n     *\n     * Check if string $url is a link\n     * @return boolean\n     */\n    private function isURL($url){\n        return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);   \n    }\n    \n    /**\n     * formatSize method\n     *\n     * Convert file size\n     * @return float\n     */\n    private function formatSize($bytes){\n        if ($bytes >= 1073741824){\n            $bytes = number_format($bytes / 1073741824, 2) . ' GB';\n        }elseif ($bytes >= 1048576){\n            $bytes = number_format($bytes / 1048576, 2) . ' MB';\n        }elseif ($bytes > 0){\n            $bytes = number_format($bytes / 1024, 2) . ' KB';\n        }else{\n            $bytes = '0 bytes';\n        }\n        \n        return $bytes;\n    }\n\t\n\tprivate function _onCheck(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onCheck'] != null && function_exists($this->options['onCheck']) ? $this->options['onCheck'](@$arguments[0]) : null;\n\t}\n\t\n\tprivate function _onSuccess(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onSuccess'] != null && function_exists($this->options['onSuccess']) ? $this->options['onSuccess'](@$arguments[0], @$arguments[1]) : null;\n\t}\n\t\n\tprivate function _onError(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onError'] && function_exists($this->options['onError']) ? $this->options['onError'](@$arguments[0], @$arguments[1]) : null;\n\t}\n\t\n\tprivate function _onUpload(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onUpload'] && function_exists($this->options['onUpload']) ? $this->options['onUpload'](@$arguments[0], @$arguments[1]) : null;\n\t}\n    \n    private function _onComplete(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onComplete'] != null && function_exists($this->options['onComplete']) ? $this->options['onComplete'](@$arguments[0], @$arguments[1]) : null;\n\t}\n    \n    private function _onRemove(){\n\t\t$arguments = func_get_args();\n\t\treturn $this->options['onRemove'] && function_exists($this->options['onRemove']) ? $this->options['onRemove'](@$arguments[0], @$arguments[1]) : null;\n\t}\n}\n?>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/php/readme.txt",
    "content": "[PHP] Uploader 0.2\nhttps://github.com/CreativeDream/php-uploader\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/php/remove_file.php",
    "content": "<?php \nif(isset($_POST['file'])){\n    $file = '../uploads/' . $_POST['file'];\n    if(file_exists($file)){\n        unlink($file);\n    }\n}\n?>"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/php/upload.php",
    "content": "<?php\n    include('class.uploader.php');\n    \n    $uploader = new Uploader();\n    $data = $uploader->upload($_FILES['files'], array(\n        'limit' => 10, //Maximum Limit of files. {null, Number}\n        'maxSize' => 10, //Maximum Size of files {null, Number(in MB's)}\n        'extensions' => null, //Whitelist for file extension. {null, Array(ex: array('jpg', 'png'))}\n        'required' => false, //Minimum one file is required for upload {Boolean}\n        'uploadDir' => '../uploads/', //Upload directory {String}\n        'title' => array('name'), //New file name {null, String, Array} *please read documentation in README.md\n        'removeFiles' => true, //Enable file exclusion {Boolean(extra for jQuery.filer), String($_POST field name containing json data with file names)}\n        'perms' => null, //Uploaded file permisions {null, Number}\n        'onCheck' => null, //A callback function name to be called by checking a file for errors (must return an array) | ($file) | Callback\n        'onError' => null, //A callback function name to be called if an error occured (must return an array) | ($errors, $file) | Callback\n        'onSuccess' => null, //A callback function name to be called if all files were successfully uploaded | ($files, $metas) | Callback\n        'onUpload' => null, //A callback function name to be called if all files were successfully uploaded (must return an array) | ($file) | Callback\n        'onComplete' => null, //A callback function name to be called when upload is complete | ($file) | Callback\n        'onRemove' => 'onFilesRemoveCallback' //A callback function name to be called by removing files (must return an array) | ($removed_files) | Callback\n    ));\n    \n    if($data['isComplete']){\n        $files = $data['data'];\n        print_r($files);\n    }\n\n    if($data['hasErrors']){\n        $errors = $data['errors'];\n        print_r($errors);\n    }\n    \n    function onFilesRemoveCallback($removed_files){\n        foreach($removed_files as $key=>$value){\n            $file = '../uploads/' . $value;\n            if(file_exists($file)){\n                unlink($file);\n            }\n        }\n        \n        return $removed_files;\n    }\n?>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.filer/uploads/header.p.php",
    "content": "<?php\nglobal $zodkoo_setting;\n?>\n<?php\n/**\n * The header for our theme\n *\n * This is the template that displays all of the <head> section and everything up until <div id=\"content\">\n *\n * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials\n *\n * @package WordPress\n * @subpackage Zodkoo\n * @since 1.0\n * @version 1.0\n */\n\n?><!DOCTYPE html>\n<html <?php language_attributes(); ?>>\n\n<head>\n\t<meta charset=\"<?php bloginfo('charset'); ?>\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <link rel=\"pingback\" href=\"<?php bloginfo('pingback_url'); ?>\">\n    <?php if ( ! function_exists( 'wp_site_icon' ) ) { ?>\n    \t<?php $favicon = '';\n            if (isset( $zodkoo_setting['favicon_logo'])) {\n            $favicon = $zodkoo_setting['favicon_logo']['url']; ?>\n            <link rel=\"shortcut icon\" href=\"<?php echo esc_url($favicon); ?>\">\n        <?php } else { ?>\n        <link rel=\"shortcut icon\" href=\"<?php $logo_favicon_url = get_template_directory_uri() . '/assets/images/favicon.ico'; echo esc_url($logo_favicon_url); ?>\">\n        <?php } ?>\n    <?php } ?>\n\t<?php wp_head(); ?>\n</head>\n\n<body <?php body_class(); ?> data-spy=\"scroll\" data-target=\"#navbar-menu\">\n\n<!-- Navigation Bar-->\n<header id=\"topnav\" class=\"scroll-active defaultscroll\">\n<?php global $zodkoo_setting; ?>\n\t<div class=\"container\">\n\t\t<!-- Logo container-->\n\t\t<div class=\"logo\">\n\t\t\t<a href=\"<?php echo esc_url(get_site_url()); ?>\">\n\t\t\t\t<?php $logo = '';\n                if (isset( $zodkoo_setting['header_logo'])) { \n\t\t\t\t\t$logo = $zodkoo_setting['header_logo']['url'];\n\t\t\t\t?>\n\t\t\t\t\t<img src=\"<?php echo esc_url($logo); ?>\" alt=\"<?php echo esc_html__('logo','zodkoo') ?>\" class=\"logo-light\" height=\"30\">\n\t\t\t\t<?php } else { ?>\n                    <img src=\"<?php $logo_custom_url = get_template_directory_uri() . '/assets/images/logo.png'; echo esc_url($logo_custom_url); ?>\" alt=\"<?php echo esc_html__('logo','zodkoo') ?>\" class=\"logo-light\" height=\"30\">\n                <?php  }  ?>\n\t\t\t</a>\n\t\t</div>\n\t\t<!-- End Logo container-->\n\t\t<div class=\"menu-extras\">\n\n\t\t\t<div class=\"menu-item\">\n\t\t\t\t<!-- Mobile menu toggle-->\n\t\t\t\t<a class=\"navbar-toggle\">\n\t\t\t\t\t<div class=\"lines\">\n\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t<span></span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t\t<!-- End mobile menu toggle-->\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"navigation\">\n\n\t\t\t<!-- Navigation Menu-->\n\n\t\t\t<!-- Navbar left -->\n            <?php if (has_nav_menu('primary')) { ?>\n\t\t\t\t<?php wp_nav_menu( array( 'theme_location' => 'primary','depth' => '4','menu_class' => 'navigation-menu' ,'walker' => new zodkoo_Walker_Nav_Menu()) ); ?>\n            <?php } ?>    \n\t\t</div>\n\t</div>\n</header>\n<!-- End Navigation Bar-->\n\n\n<!--Bradcrumbs-->\n<?php if(is_404() || is_category() || is_search() || is_archive() || is_month() || is_author()) { ?>\n    <div class=\"zodkoo-breadcrumb\">\n            <div class=\"container\">\n                <div class=\"row breadcrumbs\">                       \n                    <div class=\"page_title\">\n                       <h2 class=\"heading_text\"><?php if(function_exists('zodkoo_page_title_sections')){ echo esc_html(zodkoo_page_title_sections()); } ?></h2>\n                    </div>\n                    <div class=\"page_breadcrumb\">                   \n                        <?php if(function_exists('zodkoo_breadcrumbs')){ echo zodkoo_breadcrumbs(); } ?>\n                    </div>\n                </div>\n            </div>\n        </div>\n<?php } else { ?>\n<?php global $post;\n      $checkboxBreadCrumbs = (get_post_meta( $post->ID, 'breadcrumbs-post-meta', 'yes' ) != '') ? get_post_meta( $post->ID, 'breadcrumbs-post-meta', 'yes' ) : ''; \n ?>\n<?php  if ( $checkboxBreadCrumbs == 'yes') { ?>\n    \t<div class=\"zodkoo-breadcrumb\">\n    \t\t<div class=\"container\">\n    \t\t\t<div class=\"row breadcrumbs\">\t\t\t\t\t\t\n    \t\t\t\t<div class=\"page_title\">\n    \t\t\t\t\t<h2 class=\"heading_text\"><?php if(function_exists('zodkoo_page_title_sections')){ echo esc_html(zodkoo_page_title_sections()); } ?></h2>\n    \t\t\t\t</div>\n    \t\t\t\t<div class=\"page_breadcrumb\">\t\t\t\t\t\n    \t\t\t\t\t<?php if(function_exists('zodkoo_breadcrumbs')){ echo zodkoo_breadcrumbs(); } ?>\n    \t\t\t\t</div>\n    \t\t\t</div>\n    \t\t</div>\n    \t</div>\n<?php } elseif($checkboxBreadCrumbs == '' ) { \n    if(is_front_page() ) {  } else { ?>\n        <div class=\"zodkoo-breadcrumb\">\n                <div class=\"container\">\n                    <div class=\"row breadcrumbs\">                       \n                        <div class=\"page_title\">\n                            <h2 class=\"heading_text\"><?php if(function_exists('zodkoo_page_title_sections')){ echo esc_html(zodkoo_page_title_sections()); } ?></h2>\n                        </div>\n                        <div class=\"page_breadcrumb\">                   \n                            <?php if(function_exists('zodkoo_breadcrumbs')){ echo zodkoo_breadcrumbs(); } ?>\n                        </div>\n                    </div>\n                </div>\n            </div>\n<?php  }  } } ?>\n<!-- BredCrumbs -->"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jquery.steps/css/jquery.steps.css",
    "content": "﻿/*\n    Common \n*/\n\n.wizard,\n.tabcontrol\n{\n    display: block;\n    width: 100%;\n    overflow: hidden;\n}\n\n.wizard a,\n.tabcontrol a\n{\n    outline: 0;\n}\n\n.wizard ul,\n.tabcontrol ul\n{\n    list-style: none !important;\n    padding: 0;\n    margin: 0;\n}\n\n.wizard ul > li,\n.tabcontrol ul > li\n{\n    display: block;\n    padding: 0;\n}\n\n/* Accessibility */\n.wizard > .steps .current-info,\n.tabcontrol > .steps .current-info\n{\n    position: absolute;\n    left: -999em;\n}\n\n.wizard > .content > .title,\n.tabcontrol > .content > .title\n{\n    position: absolute;\n    left: -999em;\n}\n\n\n\n/*\n    Wizard\n*/\n\n.wizard > .steps\n{\n    position: relative;\n    display: block;\n    width: 100%;\n}\n\n.wizard.vertical > .steps\n{\n    display: inline;\n    float: left;\n    width: 30%;\n}\n\n.wizard > .steps .number\n{\n    font-size: 1.429em;\n}\n\n.wizard > .steps > ul > li\n{\n    width: 25%;\n}\n\n.wizard > .steps > ul > li,\n.wizard > .actions > ul > li\n{\n    float: left;\n}\n\n.wizard.vertical > .steps > ul > li\n{\n    float: none;\n    width: 100%;\n}\n\n.wizard > .steps a,\n.wizard > .steps a:hover,\n.wizard > .steps a:active\n{\n    display: block;\n    width: auto;\n    margin: 0 0.5em 0.5em;\n    padding: 1em 1em;\n    text-decoration: none;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard > .steps .disabled a,\n.wizard > .steps .disabled a:hover,\n.wizard > .steps .disabled a:active\n{\n    background: #eee;\n    color: #aaa;\n    cursor: default;\n}\n\n.wizard > .steps .current a,\n.wizard > .steps .current a:hover,\n.wizard > .steps .current a:active\n{\n    background: #2184be;\n    color: #fff;\n    cursor: default;\n}\n\n.wizard > .steps .done a,\n.wizard > .steps .done a:hover,\n.wizard > .steps .done a:active\n{\n    background: #9dc8e2;\n    color: #fff;\n}\n\n.wizard > .steps .error a,\n.wizard > .steps .error a:hover,\n.wizard > .steps .error a:active\n{\n    background: #ff3111;\n    color: #fff;\n}\n\n.wizard > .content\n{\n    background: #eee;\n    display: block;\n    margin: 0.5em;\n    min-height: 35em;\n    overflow: hidden;\n    position: relative;\n    width: auto;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard.vertical > .content\n{\n    display: inline;\n    float: left;\n    margin: 0 2.5% 0.5em 2.5%;\n    width: 65%;\n}\n\n.wizard > .content > .body\n{\n    float: left;\n    position: absolute;\n    width: 95%;\n    height: 95%;\n    padding: 2.5%;\n}\n\n.wizard > .content > .body ul\n{\n    list-style: disc !important;\n}\n\n.wizard > .content > .body ul > li\n{\n    display: list-item;\n}\n\n.wizard > .content > .body > iframe\n{\n    border: 0 none;\n    width: 100%;\n    height: 100%;\n}\n\n.wizard > .content > .body input\n{\n    display: block;\n    border: 1px solid #ccc;\n}\n\n.wizard > .content > .body input[type=\"checkbox\"]\n{\n    display: inline-block;\n}\n\n.wizard > .content > .body input.error\n{\n    background: rgb(251, 227, 228);\n    border: 1px solid #fbc2c4;\n    color: #8a1f11;\n}\n\n.wizard > .content > .body label\n{\n    display: inline-block;\n    margin-bottom: 0.5em;\n}\n\n.wizard > .content > .body label.error\n{\n    color: #8a1f11;\n    display: inline-block;\n    margin-left: 1.5em;\n}\n\n.wizard > .actions\n{\n    position: relative;\n    display: block;\n    text-align: right;\n    width: 100%;\n}\n\n.wizard.vertical > .actions\n{\n    display: inline;\n    float: right;\n    margin: 0 2.5%;\n    width: 95%;\n}\n\n.wizard > .actions > ul\n{\n    display: inline-block;\n    text-align: right;\n}\n\n.wizard > .actions > ul > li\n{\n    margin: 0 0.5em;\n}\n\n.wizard.vertical > .actions > ul > li\n{\n    margin: 0 0 0 1em;\n}\n\n.wizard > .actions a,\n.wizard > .actions a:hover,\n.wizard > .actions a:active\n{\n    background: #2184be;\n    color: #fff;\n    display: block;\n    padding: 0.5em 1em;\n    text-decoration: none;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard > .actions .disabled a,\n.wizard > .actions .disabled a:hover,\n.wizard > .actions .disabled a:active\n{\n    background: #eee;\n    color: #aaa;\n}\n\n.wizard > .loading\n{\n}\n\n.wizard > .loading .spinner\n{\n}\n\n\n\n/*\n    Tabcontrol\n*/\n\n.tabcontrol > .steps\n{\n    position: relative;\n    display: block;\n    width: 100%;\n}\n\n.tabcontrol > .steps > ul\n{\n    position: relative;\n    margin: 6px 0 0 0;\n    top: 1px;\n    z-index: 1;\n}\n\n.tabcontrol > .steps > ul > li\n{\n    float: left;\n    margin: 5px 2px 0 0;\n    padding: 1px;\n\n    -webkit-border-top-left-radius: 5px;\n    -webkit-border-top-right-radius: 5px;\n    -moz-border-radius-topleft: 5px;\n    -moz-border-radius-topright: 5px;\n    border-top-left-radius: 5px;\n    border-top-right-radius: 5px;\n}\n\n.tabcontrol > .steps > ul > li:hover\n{\n    background: #edecec;\n    border: 1px solid #bbb;\n    padding: 0;\n}\n\n.tabcontrol > .steps > ul > li.current\n{\n    background: #fff;\n    border: 1px solid #bbb;\n    border-bottom: 0 none;\n    padding: 0 0 1px 0;\n    margin-top: 0;\n}\n\n.tabcontrol > .steps > ul > li > a\n{\n    color: #5f5f5f;\n    display: inline-block;\n    border: 0 none;\n    margin: 0;\n    padding: 10px 30px;\n    text-decoration: none;\n}\n\n.tabcontrol > .steps > ul > li > a:hover\n{\n    text-decoration: none;\n}\n\n.tabcontrol > .steps > ul > li.current > a\n{\n    padding: 15px 30px 10px 30px;\n}\n\n.tabcontrol > .content\n{\n    position: relative;\n    display: inline-block;\n    width: 100%;\n    height: 35em;\n    overflow: hidden;\n    border-top: 1px solid #bbb;\n    padding-top: 20px;\n}\n\n.tabcontrol > .content > .body\n{\n    float: left;\n    position: absolute;\n    width: 95%;\n    height: 95%;\n    padding: 2.5%;\n}\n\n.tabcontrol > .content > .body ul\n{\n    list-style: disc !important;\n}\n\n.tabcontrol > .content > .body ul > li\n{\n    display: list-item;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jsgrid/css/jsgrid-theme.css",
    "content": "/*\n * jsGrid v1.5.1 (http://js-grid.com)\n * (c) 2016 Artem Tabalin\n * Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)\n */\n\n.jsgrid-grid-header,\n.jsgrid-grid-body,\n.jsgrid-header-row > .jsgrid-header-cell,\n.jsgrid-filter-row > .jsgrid-cell,\n.jsgrid-insert-row > .jsgrid-cell,\n.jsgrid-edit-row > .jsgrid-cell {\n    border: 1px solid #e9e9e9;\n}\n\n.jsgrid-header-row > .jsgrid-header-cell {\n    border-top: 0;\n}\n\n.jsgrid-header-row > .jsgrid-header-cell,\n.jsgrid-filter-row > .jsgrid-cell,\n.jsgrid-insert-row > .jsgrid-cell {\n    border-bottom: 0;\n}\n\n.jsgrid-header-row > .jsgrid-header-cell:first-child,\n.jsgrid-filter-row > .jsgrid-cell:first-child,\n.jsgrid-insert-row > .jsgrid-cell:first-child {\n    border-left: none;\n}\n\n.jsgrid-header-row > .jsgrid-header-cell:last-child,\n.jsgrid-filter-row > .jsgrid-cell:last-child,\n.jsgrid-insert-row > .jsgrid-cell:last-child {\n    border-right: none;\n}\n\n.jsgrid-header-row .jsgrid-align-right,\n.jsgrid-header-row .jsgrid-align-left {\n    text-align: center;\n}\n\n.jsgrid-grid-header {\n    background: #f9f9f9;\n}\n\n.jsgrid-header-scrollbar {\n    scrollbar-arrow-color: #f1f1f1;\n    scrollbar-base-color: #f1f1f1;\n    scrollbar-3dlight-color: #f1f1f1;\n    scrollbar-highlight-color: #f1f1f1;\n    scrollbar-track-color: #f1f1f1;\n    scrollbar-shadow-color: #f1f1f1;\n    scrollbar-dark-shadow-color: #f1f1f1;\n}\n\n.jsgrid-header-scrollbar::-webkit-scrollbar {\n    visibility: hidden;\n}\n\n.jsgrid-header-scrollbar::-webkit-scrollbar-track {\n    background: #f1f1f1;\n}\n\n.jsgrid-header-sortable:hover {\n    cursor: pointer;\n    background: #fcfcfc;\n}\n\n.jsgrid-header-row .jsgrid-header-sort {\n    background: #c4e2ff;\n}\n\n.jsgrid-header-sort:before {\n    content: \" \";\n    display: block;\n    float: left;\n    width: 0;\n    height: 0;\n    border-style: solid;\n}\n\n.jsgrid-header-sort-asc:before {\n    border-width: 0 5px 5px 5px;\n    border-color: transparent transparent #009a67 transparent;\n}\n\n.jsgrid-header-sort-desc:before {\n    border-width: 5px 5px 0 5px;\n    border-color: #009a67 transparent transparent transparent;\n}\n\n.jsgrid-grid-body {\n    border-top: none;\n}\n\n.jsgrid-cell {\n    border: #f3f3f3 1px solid;\n}\n\n.jsgrid-grid-body .jsgrid-row:first-child .jsgrid-cell,\n.jsgrid-grid-body .jsgrid-alt-row:first-child .jsgrid-cell {\n    border-top: none;\n}\n\n.jsgrid-grid-body .jsgrid-cell:first-child {\n    border-left: none;\n}\n\n.jsgrid-grid-body .jsgrid-cell:last-child {\n    border-right: none;\n}\n\n.jsgrid-row > .jsgrid-cell {\n    background: #fff;\n}\n\n.jsgrid-alt-row > .jsgrid-cell {\n    background: #fcfcfc;\n}\n\n.jsgrid-header-row > .jsgrid-header-cell {\n    background: #f9f9f9;\n}\n\n.jsgrid-filter-row > .jsgrid-cell {\n    background: #fcfcfc;\n}\n\n.jsgrid-insert-row > .jsgrid-cell {\n    background: #e3ffe5;\n}\n\n.jsgrid-edit-row > .jsgrid-cell {\n    background: #fdffe3;\n}\n\n.jsgrid-selected-row > .jsgrid-cell {\n    background: #c4e2ff;\n    border-color: #c4e2ff;\n}\n\n.jsgrid-nodata-row > .jsgrid-cell {\n    background: #fff;\n}\n\n.jsgrid-invalid input,\n.jsgrid-invalid select,\n.jsgrid-invalid textarea {\n    background: #ffe3e5;\n    border: 1px solid #ff808a;\n}\n\n.jsgrid-pager-current-page {\n    font-weight: bold;\n}\n\n.jsgrid-pager-nav-inactive-button a {\n    color: #d3d3d3;\n}\n\n.jsgrid-button + .jsgrid-button {\n    margin-left: 5px;\n}\n\n.jsgrid-button:hover {\n    opacity: .5;\n    transition: opacity 200ms linear;\n}\n\n.jsgrid .jsgrid-button {\n    width: 16px;\n    height: 16px;\n    border: none;\n    cursor: pointer;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAFgEAYAAADx4WWjAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAZjElEQVR42u2deVyU1f7HzzyzDzCA7MgihCsY7uYOiZIamebVFl/Wy8zSxLTQuld/lmIuCGIu9cruLa9lXlNTUQsVUgQRNBbZF5F9lWEbZpj9/P74doQZ87LMDHjvPe9/vj7MPOf5fp6zjc/3e86D0H8rNTVRUd988/rrxpZTV3f48PHjixb1m+N5eVOmvP76hQtXryKEEMYVFWFhERG7dvW2nIKC4OBVq/71L1JOWdk774SHb9tmcoc1mpaWtjYLi6Ki+fPff/+f/7x2DS6YlobQpEkYJyQgxOViXFGxYUNExN693ZVXWDh//urV339/8yZCQiGUM3EixqTcqqq//e3gwQ8+MJkAnU6tVqvZbKk0KSkj47nnfv/d2nrcOInk1i2EHBw6HSBCyss3btyz53Eh4PiJEwkJCAkEGKenIzRlCsaJiQhZW2OcmentHRhYUCCX5+Tcv+/nZ/KaIKjVlZUSibPz3bu2tv7+jY1JSQjZ22P8++8ITZiA8c2bCIlEGNfU7Njx9dcbN5aXv/fe55/v2kXueFfHrawwzsjw8po1Kz9fp5PJVCoOx9T+sp4spLq6qcnJKTPTzy8wMDtbpWpurqlxcBAIEPL2RkihQKi8HCEWCyEOByGBACEPD4RkMoSysxGyshoxYtKkvLxnn83IiI3192cYoZDL1WjMduefhEbT2Njebm2dnT1x4sKFt26lpCDk7Q01Mm5cp719GyEPD4zz8+fNe/PNixcx1moxZhhz+9ftBTgce3tLy9ZWodDT08enqEirRUguh89YrE6r1SLU3o6QWDx27HPP3bjBYrHZLJZO1+933JDCwnnzVq8+eZJ0xvR0hKZNwzg5GSF3d4xJjXRt+2IxxpWVYWFRUX/964A5npc3e/aKFT/+aNg5k5IQsrPDOC9v/PjXX09Nzcpyc3vhhbKy5GSEXFygSY0fD6MWj4dxRcWmTZGRW7b0m+P5+dOnr1jx00+Gw+HNmwhZWmKcmTliRFBQdjb5vlrd1NTSYm2dmsrnDx0qlycnI+TsrC9EIMC4ouKDDyIitm41ucNqtUTS3GxlVVQ0f/66dZ0TWUYGQjNmQJPo6rhOp1RqtWy2YTkKRUFBVdXQoampPN7QoR0dt26BkPR0hCZPxpjMyDCRbdxoMgE6nUqlVnO5UmlSUmbmtGl374rFY8c2NcXFwQXv3RsxIigoKwtjpVKr7X5UUSgKCiorfXxSU0Wi4cOl0vh4KCcz08srMPD+fbk8O7u4+NlnTV4ThI6OrKzS0qFDc3JCQpYuPX1ap+vo0Ggev+PdIZPduVNY6O+flRUUFBLyyy9arVSqUAiFZnPcEI2mrq611cbG2HJUqrKyhgZX135znEKhUCgUCoVCoVAoFAqFQvlP4FGIyd//wIGYGPL0eOFCsOSRooWF/jHG3RT7R7kkwNHeDpY8W7106d69DRteesn4p9UGQbdZs8BOmAD26FGwajVYS8veFd/RAZbExtatA6tUgjW5gFdfBXv4MFhnZ7hTpEZ6D9TsiRNwFBsL9u23jXWc8FiUEi5IwqFlZWBLSkAIqaGeOn7uHBzNnAl2yBAoRyo1lYDHnvfDBUiV+/qCfeYZcOjs2Z45/s03cBQQAHbUKFM7TmB19wVwyNMTjlJSwCYlgW1tBUtqjM8HGxwMdsYMcDw319SOE7qNuIAD5eVwtGwZ2CVLwFpbgyU1RvrQypXmdrzHAvQhTaCoCOzy5eDoqlVwnJEBtqnJ3I73UQAJEQkEYG1t9T8nf++/UJKRqQBsNvSR3sfQBkiASPTHaX+cV1sLTUirhWNWt4PCAAuorQU7aBDYpUv1P5fJwJo+rcZoAfqjyvvvgz18GJpQXh4cjxkD1vTjvdEC9IUcOwZHZDglwyyEtREqLu4vARQKhUKhUCgUCoVCoVAoFMp/JL1+GAuLe0isbM8esCScum/fhAkIpaWdP9/vAsCxyEg4mjsX7MOHYA2XEE6ZAtbKSv/vJBx786b+eVwuWEdHsHFxINT4xUAGT5G9vMA6O4NtbgZrbw+WPJVOTARLHrMTS+LC48aBbWsD29gI1sFB/zrGYyCAhIpIXJgE927fBktCSCtXgv31V/07v3gx2DVrwA4dCjYwEOzp02DPnDGTAJJSQCLq48eDhdVlCB05Apa0fdKESFxg506wOTlgSVDwtdfAkiaZkAC2vt5YAQaP10kA4949/b8/KcWARGQMAxrk76TJEFJTwVZWGuv4YwKgU5FQEYn/EkjwjrRxQwyTP8ioRM4j1NTAdQzLN4EAfVpa9I9JDSgUYEmb77ogtyvkcxL4Jpg+cvMEASTiQiBtndQQEWIogNQE+Zz0KYLp48dPEFBSon9MhlUS/yXDIhk+iQDSxFQqsGKxfjkkQG52AWT8N1yRTZYmks8N5wHSREjc2MlJ/3zTdd5uBJBF54Zt1s4OLJmgyJ0nAkjNkBwKMgOTpkfOM7sAMkoYdmYyqvzZqvquDhKhBJJy9qRRzIQCYJgjna2qSv9TMk+QpkCakkSi/33iMIFMWGQiMx3dRNQNL0gi825uYEeNAks6rYsL2Dfe0D+PjP9kxu43Afn5YOfNAxsSApYMk6SzkiZE/u7tDZb8GjWc2SkUCoVCoVAoFAqFQqFQKBTjMNuiHViaMmQIHJFNgqOjYQVIRcVTKwAcJ2swydJFEuEhi0sDAvRXCPYdk20pC46TQAiJIxgG/0iN/PILfN/DY8AF6C8WTU8Hu3YtWPIQ2HBNJXko/MMPxl6/z+u9wHGSOhATA5Y8nSZbnhcWgiXLch88AEtibl9/bayAXvcBcHzwYDgiKQfdpQ6Q9cW//AKWy4U+QCL3/SAAHCc5EyRyTxa+9RQfH3DcMIjYd7ptQvqdjaQIkM7YHSQ2tmSJqR3vVgA4TqKMpI331HHCokXg+MWLpnb8iQL0R5UbN/rm+MKF5nacYLAxBgkVVVeDJaNKT1m8GBwnuxmYH7b+cEi21ScB7qlT//3ppI2TO06aWv/xx0Tm7g72wgWwZCOLjz7689NITgS545cu9bfjBI6+Q6TTkt8wpEZIqtknn4B95ZWBuuOG/FEDZC8VAo8HliRnkJ8IU6eC46SmBp4/aoC0ebKnyq1bYElKQWEhOE5+GlAoFAqFQqFQKBQKhUKhUCgDi8nCrKdOFRffuTN+/LJlMTEREdevIyQUkuAqPPPu6JBKEbp6ddmy7dtDQubOdXPz9SUBk75jsk0dWSwWi8Xi8xFiGDbbygpsVwFwzGIhxGIZLpB7CgQAGg1CGMOjYmIJXY/JmhvjMfu7U80NFTDQUAEEnc6w0/6HCfDyEovt7auru442+oJ0Oq0WITc3CwtbW7Kk0Xg4P/10//6dO7D4n8Uiq097/mJkPp/N5nC02t9+q6rKzx89GiGBgIzyMP6zWGB5PKEQoZMni4tTUwMCLl4sLc3MFAg6OrRatbrn2z5DTTMMl8swDKNUshCKilqyBOPOiae3TYE4yGZDdpBAALkoGOvfBhYLFu12dMCaV6iR3l+PnMflCgQdHRyY8lUqEMDj9b5A8m0ixNDxzu/B36EmOq/T272qQQCbzeUKhUolB4oATX3b9rr3Z5Gm1Sm99+fDOVotB35kCYXGNyFyvlBImhD5BrnT0IRUKlhtbFwT0mi0Wo1m0CDWtWuVlbm5s2aBI2TRf8/fJ8/lMgybrVbn5zc319b6+a1Zc/36t98ePtzZJ4jjSqVcjlBExKxZK1Zs3jxpkqOjl9edO2q1TqfVksGjezDGGGMOh81msRhGJuPMmePuboqftZmZjY3l5QUFCKlUCsXhw11HI7jDarVKhVBIiKenv39MzMiRtrYuLsbHnU02D+TmNjXV1np6du2c+m2bYRgGoaoqmay5meRmGI/JBEBT+jPHzQv9LTTQUAEDjcn+Tww/srjczgmKWDJrwjHGCGFM8pGeIgHw61Au5/G4XIGgoYFhuFyBoPPXjk6n0ajVLBZMQP33hggKhUKhUCgUCoVCoVAoFAoFIYTQhx8mJHz//dq1CO3b9/LLLS0IRUQsXNjSsm3b7ds//fThh/3tT6+fzEFekK0t/Ivsbkw+M9ws2Pz04eEuxhgrlX+eF0S2rH2qBTxd9FrAk5I6GKZ/Q0uEXvcBFxdLSxuburquj9ExRsjBgc+3sGho6HcBH32UkHD8eGgoxHOFQmjThlkOGNvYCARCYXt7XFx1dUHBCy8gJBTC1vBQH2fPlpZmZISE7NiRknLmDIvV2qpSKRQWFlBeZ91AnJdhWCyGYRiZLCpq5szly8mbJXoPC6F9+xYuxBghFotE6v8810Gng78LBJBOKRLpj0FyOWx4rlBAJB7Cqo9DymcYCG+HhZ092/fGx3k8v+dJof/HR50/vyxxsOt9//flGANn27bp05cv37wZxnUSWyepBp0vRrCzEwgsLEgTCgq6eLGkJC1twQIiPDjY03PMmCtX5s718Bg16sqVtjalsqNDJAInSV3AkU7H4bBYLBab3d6+fTtCP/9svJAeExWVlnbx4vLlCO3Z8+KLGCO0e/eCBRgfOZKRERv77rv96ArUQG9PKC9va5NInJ07kzmgKdTXKxRSKdmfov/o9TzA4zFM/72F3gwCIEw60G530ut7CeO4QNB1tOkcVQzfO/MUCmCzGYbNbmyEcby1lQhgGIZhsfp/JqZQKBQKhUKhUCgUCoVCofxv0uPAQmNjW1tbm5NTfX1ra3Pzyy9LJFKpVDp9Oiy/cnXV6XQ6na69ncfj8bjcjAw7O0tLK6vz5729nZ1dXDIzzSWg2ydzKSlFRfn5lpbNzTKZVLpwYUtLe3t7+xtvqFQajUYzdqxWi5BOZ2mJMUTN1GqdTqcjb0cXiUpL6+vr6trbvbycnJyd79/vtxqorJRIHj4cOTI7u7y8rOz0aY1Gq9VqfX0h0I0Ql8tmczgPH8Kz0oICCIU4OkIUc/hwEIgQj8fhcDgajY+Pi4uLyzvvDBvm6urmduyYqQQ89nS6rq6lpalpzJi8vMrKioq4OHDI11ck4vEEghs3LCz4fIFgzhxwzNNz3rxx4yZMmDmTx+NyudyRIwUCHo/HGz5cLBaJRKIjR0AuhwM34rvvSkrq6mprN240Ww1cuZKenpaWmalUajQajb+/lZVQKBB8+WVg4OjR/v7vv9/bC1y/np19797LL0ON/PxzR4darVKxWFOnDh8+cuS0aY6O1tY2NsnJfa4BuVyhUCjc3cvLGxrq69evl8tVKqXS318k4vN5vOvX++o4Ac4/fx5q7IMPSHShpKS2trZ23z5ja4ApL29sbGgIDq6qamqSSF56ic2G8CjYnTuNvYC+kEOHBAIul8stK2tr6+iQy6dOLStraKir6+17DLoIaG6WyWSyoCCFQq1Wq6dO5XI5HA6npgbu0+3bphLw6IIMwzDMtWtk1WtDQ0tLS8vEiX0uD9anOzoyDEKdK7rJjt+mzz6BUaywkAReVSqtVqcj7+TogwCtVqfT6eRyksQBw6GDA3xsrnCevb3+XghqdZ8FQGdNT+dwGIZh8vNBkK8vCOnt+we6B2bsqVPBImRjIxKJRH2f4BgvLwcHJ6cLF5ydbW1tbGJjVSqtVqMhaTVhYaZyPD4+MzM9fc4cjQZjjGfOtLQUi8XikhJfXw+PIUN+/bXPAmxtraysrNLS7O3FYmvrL7+EO9/erlSq1Wp1aOj16zk5WVmQUtA3x+/dy8iwsdHptFqtNjqax3N0dHREaNiwIUO8vDZvNvbGPJqJ7eysrMTi+/dHjHBzc3ffvFmhUKlUKoRUKrVarT53Diakdevi47OyMjO73wsF7viMGRhrtVptQoKFxZgxY8b4+ra0XLp0+TJCpaV790ZEGN/Hnvhb6MGDurra2vXrc3MrKysqoqNJ0gaPx2az2ZWVMBxevgyjSlkZhFutraHpzZ4N6SKTJgkEDg4ODghJJBcvXryIUEXFRx9t2oSQTCaXy+UIBQVFRkZGrls3bVpYWFhY7/OGuv05XVvb1NTUNHFicXFtbU3NoUMKhVqtUk2eDD/iyLDY+X2MoXNaWg4aZGf34IG7u6urq2tYWE7O6tXvvhsQcPfusWPHjq1fb23t7e3tjZBUWl1dXY3QvHmHDh06tGHDhAmrV69e/cUXJhNgSFWVRNLY6OtbXS2RSCQTJqjVsEUI5GApldbWIpFIVFDg6enu7uGRlGRpyWKxWJ27msXFbdmyZcvBgykpUVFRUaGhYrG7u7s7Qm1tICQ4ODIyMnLTpokT165duzYyss9ty9xcv/7ZZ599duDAzp1CoVCIcVSUm5ubG8bkOCkpIiIiYseOgfazWxISwsPDw6Ojw8N5PB4P46iowYMHD8Z4506RSCTCODFx9+7du033m8xsgKO7du3cKRAIBBgfPOjj4+PTKeTKlbCwsLC9ewfaz25JSTl06NCh8PDwcD6fz8d49247Ozs7jD/5hM1mszHOyzt79uzZ0FC5vKGhoWHIkKcuc/e550JDQ0P/7/+Cg/fv379/yxadDuYjS0sLCwsLhLhcoVAolEoRYrPZbKVyoP19IgpFa2trq739jz+GhISEnDhx8uTixYsXHz/e0dHc3NxsazvQ/lEoFAqFQqFQKBQKhUKhUChG0U2ERiBob1cqFYp9+ySStjapdP58iGa2tdnbW1uLxTt3jhzp5ubhcfbsUyMgL6+qqqIiKKisrKGhvv7YMUg5GDwY4jFlZbDlu7W1VouxTicUWltbWFhYXL7s7m5nZ2+/dKmHh4ODo2PP319gLI8e7hYV1dRUVQUGlpc3NDQ0XLum1ep0GJeWwtLDCRMglDRsGJvNZjPM4MEcDofD4Xz4YX19S0tz8yuv1NQ0NUkksbH9XgUymULR0WFvD2k29fUxMXfupKQkJvb0/Bs3cnKysvz8zp9PTU1OxhjygvovIMEUF9fV1dZu3QrRRUdHCws+n8/v+crsgAA/v2efzcnhcjkcLvf0aYlEKm1tXbPm/v3a2urqnu9q32cBLS3t7TLZsmWwGrW8fPZsf/+xY/PyelsQZLlcuaLVarUYI1Rd3dTU3Gz+Fd4MQgixWCT3zdLyt9+yszMze79NAkTibW2hHB5PKOTxeDzymngzCvDxcXZ2cgoP1+lg7wKVSqPRalev7m1BGHO5XO6qVba2Hh7u7ikpkyYNHTpsWHOzuQU84s6d4uKCgpiY06eTkxMTMYbOOWpUd+fFxxcW5udv356QUF9fW4txeXlZWWlp3zOwesujplJd3dTU2CgQlJXV1zc0nD/f1NTeLpUGB8OmL6dPw7B57RpE4p2ctFoej8t99VWRaNAgOztf39zc5ctXrECIzy8vLy8/dWrSpC1btmxZvtzff+XKlSt7/kqM3vJoHhg8eNAge3uFYtq0kSNHjXrhBVdXW1s7ux07RCI+n8+fOBEmtM8/hy3KQ0OHDHnmGR+fqioXl4cPJZIXX9Tp0tLS0lJSiopKSkpKli0rKrp69erVc+dyck6dOnWq/9faP0ZiYl5ebq6bW2pqQUF+/uM7OV27tm5daKit7YkTISEhIUlJkEiD8fHjwcHBwcnJKSkHDx482PfUsn7jzp2vvvrqKzu7b78NCAgIyMjYtIkImT179uz4+Nu3o6Ojo21sBtrPbklOjoyMjLS0PH48KCgoKC5u/XoQcvTojBkzZmRkyGR1dXV1gwcbex2z7dExdWpYWFhYe3tVVWpqaurChTKZVCqVPniAsUaj0bi58flisVjc92Q/swsguLlNnjx5skx26dKqVatW/eMfarVGo9HodAzD5/P5Eom5r0+hUCgUCoVCoVAoFAqFQqH8b3PsWHFxauqLLx49mp+fmLho0UD702Nyc1ta6urc3RHas2fBAowR2rkzOBjjTz+9e/fCBeO3ZzDbKiaZTKNRqRgmIOD06e3bb95EiMuFMIdGo1Ih9N13hYXJyatWPbUCnn/+3Lndu2NjHz5sbKyoGDKEOO7q6uHh51dRkZPzl7989tnkyU+dgDfeiI//+9+/+CI1tbDw1q05cxDi80UihBiGz7ew0Gji4195ZevW558Xi/l8oRD2yX8q2LUrMzM29r33EAoPDwrCGKEvvnjtNYwR2rVrwQKMY2OrqwsKnn/ebA6MHn3y5JYtiYlTppw6tW1bz9e4x8RUVOTkzJpFNpFH6MABcBw6a3R0Ts5vv61dazbH58y5dGn//h9+QGjr1mnTOi88evQPP3z88Y0bdXUKhUz2eJQxL6+lpa7OzQ2h6OhXX1WpEIqOXroUY4R27JgzB+OVKxMSjh//6iuzOf4HzPTpzs5Dh2ZmImRt7eSEEEIikViMUHZ2dXVBwaxZfn7ffbd+fV7egwetrQ0NnUsAAwLOnAkPv3ULIY1GqeRyEZLL29oQmjnTzy8wMD7+229nzVqxYs0acwt4FOi+cqWqKi8vIGDRonPndu+OiZHLOzqkUisr8ioKe3t7e0/PsjIPDyurQYNKS9PTy8uzsgIDEVKrlUqEXF3t7T08KisfPHjrrQMHvLwEAjabwyFv6e4HAYQHD6RSicTNbc6cM2d27IiLKympqSksHD4cISsre3uEEMIY3IL9JxBiGDZbpyspefvtI0e8vJ55xsrKzq6iwtyOEx4bRr29razs7KqqcnLefHP//tGj584dOXLmzMuXEWptra8HAbDDgVqtUCD0669Llnz66dy5/e14r3nrrbi4o0ePHkXo44/HjcN4796srGvXNmwYaL96TVxcZWVu7owZA+3Hfw3/D73/bnBl1mLvAAAAAElFTkSuQmCC);\n    background-repeat: no-repeat;\n    background-color: transparent;\n}\n\n@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {\n    .jsgrid .jsgrid-button {\n        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAALAEAYAAACFny30AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAA6CUlEQVR42u2dZ2AUZRPH53rLpVdSKSGhgwoIqIgKiBRFBGwooQjoC9KbSEdFqoIiNhDBQhdEQBABIShNCCUhpEF6T+5yuX77fhgejhwc6dkE5/dl2LvN7uz8n/4cOwAEQVSCmJjOnZ97bunSK1eeeWbo0G7d+Pbn2rWBA8eMmTnz8uWuXQcPfughvv2pLMKKnpiY+Oqrs2Z16lRampwcGzt6tNlcWFhQMGwYX45nZCxe/O23kZEazb///vPPuHEWS3FxQcGrr/LlT62RlBQV9d574eGnT/v6tm6dkREdDRAUxHHR0WJxSAjHXb3ar9+wYcuX15U/WVkrV27e7Od35kzjxg8/fP36iRMA3t4cd+qUUNikCcfFxHTs+Pzzc+fyHbdqk5T02muzZnXu/M8/Xl6RkXl5p04BNGnCcefOAXTrxnFnzgC0a8dxJ08KBL6+HBcb26/fsGEffVRb/mRmLlu2aVNk5JkzjRq1b5+WdvIkQKNGHHf+vN2f9u05LjpaIAgO5rhLlzp1euGFOXP4jmN5CBw/SEgYMWLq1CefzM/fseOXX7Zv57jiYgAvL4kEwMsLgOMATCYAgQBAIgGw2QAMBgCTSSjMygLw9OzXr3fvFStatNizZ9OmqVOr62BW1sqVW7YEBNy8+ckny5YdP26x3LiRnd2smUwGEBZW1h+RyH5sNgsEGg2AQhEZ2bTpqlVisYuLu/tPP7VufebMtm2nT/MdeMZdfYBQqFZLpX376nTFxdeve3mJxQCurvgdx9nP4zgAiwVAKASQyQCkUpvN3x+goGDv3gMHpkyJje3b9/XXP/64qo5hiW/VKjV1+fJly86fN5tv3MjJadZMLi8b+Hv5o1IBWK0cp9EAGI0aTVrapElicWCgi8srr/Ad8HIF8PcfPjwqatas0NBRo2bM+PjjkhKACxewpBuNWNLE4rIPbrXig8vlAFIpx6EQ+/cfPjxtWmzsc8+9/vqqVRV1iJX41NS1a1eu3LPHbM7IyM7295fLAUJD0Y87A3/7QW7d32AASEkBkMmCgwMCCgsbNRo1auzYHj1cXTt16tp15ky+A+6IoLwTbt6cNu3DDxcsSE5etmzevLlzFQqA5s2xuqtUKIDZfOtiAntTwAQzmQSCzEwAT88+fXr1WrGiRYvfftu8+e6mCQPPSvzhwyZTRkZOjr+/QlF+4KVSDPzNmwAiUXCwWp2bGxIyefL06U8+GRAwadKIEVev8h1oZ5Q7DA0JWbZs1qx580JDp02bM2fx4tJSgLg4DIheb+8LGM5rxIEDhw9PmRIb27//G2+sWMHOz8xcuvTrr93dU1PXrFm5cu/eypR4mcweeLE4MFCtLiwMDn777cmTn3++vgeeUW4NcOTmzVmzli9fsCAp6cMPZ86cO1epBIiMvH+NEApRFKMRwGoVCktKANTqDh06dPjsM7M5MzM3t1s3vT4jIympfXu5HCA4uGIlPiUFS7yra05OcPC7706b1qNHo0ZTp44aVf8DX2UBGCkpU6cuWLBoUUrK8uWLFs2Zo1IBtGyJAVIo7J3i7Rvd0TSZzSiIRmOvQRIJgLu7/fvyAi+RhIZ6excUBAWNHz95ct++AQFTp0ZF/f033wGtMwEYWCPmzMEasWhReTWizM1vHd85unKEBV6vB0hKApBIGjf28cnODgubO3fBgu7dfX2jogYNunaN70BWlQovRTgjJOTDD6dOXbw4LGzmzPnz583T6wHi48v2EXeOmu6kIoE3GABu3ACQSkND/fwKCsLCZs6cN+/55xt64BnVrgGOpKUtWrR27ciRaWmLF69atXatSGQ0qlRyuUCAAQW4f+AZVitASQmARBIR4eV17lxQ0JQp7777yiu+vm+9NXTo9et8B66mqHYNcEShCAlp1mzrVrHY3d3VtbCQ1YTKIBBgDSotBVCpGjdu3/7IkQct8IwaEyAjY8mSb75p2zY5efbs9967csViyc4uKQkIEIsBPD3xnIqUfHaeWAzg7Q1QWPjXX4cOvftufPzAgW+/PXEi3wGraaotQE7OmjU//RQUlJb25Zdr1uzZYzKlp6enBwdLJBh4Ni+4F4L7NICsDxAIdDqxWCrNzd29e9euVavi44cMGT9+yhS+A1dTVLkPSE+fO/fzz9u1y8zcuHHDhoMHjcabN9PT/fzKm7my4ajVCqDV4rFcXrazttnufb5Oh4tseXkAvr6DBg0ZMmVKePj27WvWrFzJdyCrSqUFSEoaPXru3NDQ3Ny9e3fuPH7cZsvKKi4OCZFKAYKC7l4kuzOQYjHODQoLAQQCmQznBUaj0Yjfubvbz3OsOWy+wIQzmwWCggIAH5/Bg196aebM5s23bl2zZulSvgNaWUQVD/ybb86e3aFDbu7u3Tt2HDtms+Xm6nSNGkmlAI0alR3v38mdw8mkJACpNDw8ICA9PSho8uQJE558Uiz28XF1LS4uLLx8+dChbt3EYgAPD/w7xxphs9mXIJhQWu3Vq2fOPPPMrFlDhowcWVKyZs2VK//8c+oU34GtKOXWgKSkkSPfey80NC9vz56dO0+csFpzc43GoCCZDMDXt2Iz1+RkALE4JMTbOz8/LGzevLlz+/Tx9R05csiQM2fY+deuvfrqmDE//piV9cMP33338ssqFUCrVvalDI67u2m6s0ZYLCJRYSGAt/dLLw0aNHNm8+Y//9wQaoRTARITX3tt1qyHHsrLO3Bg1679+zkuP99k8vWVSDDw5ZX4O2eu3t6ZmWFhc+YsXNi9u6/vyJGDBjkfTl6/PmzYhAkbNmRkfP/9+vXDhyuV9iUOiaTsEsedq69WKw5bLRahsKgIwM2ta9cuXaZPb9XqxIlt25Yt4zvQFRYgIWHEiGnTHnssL2/Hjt27t20DKC4G8Pe/c0esciV+1iws8ePG3VniyyMubsiQUaN+/DE7e+vWzZsrViPEYvsM3GJBzxWKVq0iIpYulUhUKnf3rVtbtTp9euvW8+f5DvztuN0dSFdXieTFF3FHzN9fLAZwc8Pv2APfOZ53LPFicePGXl4ZGWFh8+cvXPjoo5UNPCMycuvWr79+5ZVGjYYNGzPm2291OoDLl9EHi8Ve8pk/rGCIRABqtb1GGI2FhampM2YIhQEBSuWbb/Id8HIF8Pd/883hw2fMCAsbOXLGjM8+0+kALl60t/WspDmWeIkkJMTHJy8vLGz69HnzBgzw9R0x4sUXExKq62B4+Pfff/LJyJF+fkOGDBu2ZUtpKUBsrH2UdKc/bH/gxg0AmSww0N9fqw0IGD581KhevVxdH3740UdnzeI74JUmKWncuPffX7Hi6FEAiYTjzp4F6NiR46Kj8VcJp083btyqVVpaTs633+7c2aRJbfuDfcTXXx87BiCT4a80OnfmuFOnAEJCOO6ff4KDIyIKCjIyPvxw/foOHfiOX42RmDhy5LRpq1cfPgwAwHGnTwcFtWqVn5+dvW7dtm0PP1zX/ly7NnTo2LGbN//xB/rzzz8BAS1aaDTp6QsXrl37+ON8x6vWSEqaMGH27A8+SEv76KPPPuvShW9/rl2Linr77c8/T0mZPHnBgl69+PaHIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIIga4q5XF7drt3r1nj2PPYZHLAVh8+ZohcKytqI5MerscW49z53vWwfAtEIAAJMmXbw4ceKAASdO8O0pw0l+o9270Xp5oWVv8s/ORssCX5m0PLUJCzzLXMCO/fzQPvJI2efy9ubXXztOBGAl5Pnnyz7YBx+gPXQIbVAQ2jtfo80HrEampaHt2RMte2u6QlH2ueoPTgRgqcp37Cj7QC+8gPbIEazKR47w/QAMbDpbtCjrJws8KzD8pWB3htP8AfhArApv24aWvRI4MRFt794oBDuue9DPpk3x6OBBtOz4r7/QDh6MfrImtP7gNItSWYfHjEHL3rvPHnDnTgyAj09dO172vjt3lvWL+TlmTH0NPKPcNFb4ALGxeDR+PFqWAaNtW7Rbt2JAZLLadrjsfbZuLesH82v8+LJ+118qnEcMHyg6Go8mTUKbk4P2ySfRbtmCAWJtb81R9rpbtpS9L/ODDTOZn/WfSidywwfctw+PWGZsgwHtoEFoV6/GgMnl1XWw7HVWry57H3bfqVPL+tVwqHImPXzg77/HI1Yj2HzgrbfQvvdezbjJrsOuy+7DSjzzo+FRY9lUsaTOno1HS5agNRrRLl+O9uxZtGwC5ww272ATKFbTWNv/3nsYeDYvabjUeDpbFIItYTgm3ywpQVteH8Hyr7q4lP189WoMPKtxDR9x9S9xL2bMQMsCOGoUWhb4lBS0jjNoNqMNCyv7+ddfl73ug0ON5xPGEsqakD17yn7LlgL69EHLUqAwyz53XDLYs6fsdR8caqkGMBwT1rLOs6AAA5qfz77BpsvxPGfXeXCo8RpQFsfAsdRrzrLMs89Fovtf58GhlgUgyoME4BkSgGdIAJ4hAXimjgW4V0Lc/za1LIDjcJNNpEpL+X7w+kItC8ACzkp8y5ZonSUBZcnK/zs1pJZnwmz1k22QdOuGdv16nPn++ise79qFNiYGrVbLd2DqilqrAbjUkJmJR++8gxaz/wI0boyWbXH+9BPazZvRtm7t4OYDO1io9QdDIS5exKNXXkH78stoWcn39UX77LNoQ0PLXqX295r5grc1FmyC2HI1C/hrr6FlAl27hvbtt1HI5GS+/CUIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiB4otbfmHX2LMDDDz/1FB69+ipa9lZEsxkteycce2v67t2PPAJw7lzDS8pTWWr5rYkMlo21a1e0LPuRowAst0xCAtoHX4C7agCW2IcewqPISLQsjRQLWHk4ZrpYtAhteHjF/j43F+20aWWvJ65ggWE1ib2p9/JlrFEsw179wckD/fAD2ogIftxiKQo3bqyZ67GX/7ECVX9w8trKms+Exy/193mc1ICxY9G2aYO2qAgta7udpRRhiZJZJ5uXV/Z81iSwgLCSzs7T6dA6vqiVJZZmTQs7n13PWaoU9j5S9kbe+ofTURD2BSwQrBN1bFvZg3MctrGxsfh3rM9g2U0dA1NcjOffuIHnBwTg5yx9ruM7pFNS8HydDs9n/rBOm2X8Zv4wGx+Pf1fRvqvuKadTe/RRtCy/ESuJLNEaCyjHYWD69y8bOJZImWXUY2/AZZ/36oV2xQq07M26LGASCdpXX8Xrs9HR0aNoWU1iNdNxODtgANr9+/kOtDPKEcAxhzzDWZvKmiCWqI3h+Ophx2PHrEks8AyNBi0rAEplxfypv3mEGeW8O/rmTbSFhRW7nKsrWtZGs8A5UtG0VGz4yXLFq9UV+7usrLJ/V39xKkDZtpO9Bb08WAllTQJrqqoKa7pYDkp394r9HZtHsL+vv1Tw7ekVFcDTEy3LkFHdPADsOqwGenhUzt/6n/qwhgVgAaopAdiwlAng5lY5f1lNrL9UUADWppaHqys2XazpqX4NwOuxQQDrY8r3t+zf1V9qXICyx8464YrimOynogKwHPP1nwoKUNHhnGMnWVxcPfdY58twHH5W11/+qWQf4JiA2RE2A2ZUtwY4NmEV7QNSU2smPLVPJQWw5/+9N44ToorOH5zh2AQ5pjh3hA07q3vfuqOCArDhXHlV27EGVHce4FiDymuC2ATQsemqv1RQAFayyhNAKsU1GzbTrW4gHPuQ8gRgE7AHVoDyRkNsjYetCVW3DygsREHZ/EKluv/5rIBU9751R7kC4Hiadb4ZGfc/mwnAliSqLwBaNroqT4CcHPS3/i9BMCqZyK38JghtTQnANoLY6KeifUDDoZICsDbWGWxZmTUZ1Z0JMwHYKqjjMrUjFZ0w1h8qKUBFl3dZk8E60cqOhtgqbEEB2oouQ9f/5WdHKikAq+LlbfGxGsBKcGXzB7M2nNW4igrABGs4VFIANrwrr61lNaCiAjhu0DCBWSdcngCsrylvolj/qKIA5fUFHh44GmGBdwyMY8Adx+0lJfj3rAkrbyOGCd1wZsCMSgrAOtXyBPD3L3vs2Aew0RLDsXN1bOLYqMoZLPANrwmq9I9zcWLEfjnHfsXgCAtEfDzatm3RsmEkK/FXrqBlv1hjw03WB7Df84SEoGU/W3Hk6FGsMT168BnMqlDFH+eWVwPY1iT7WYsjbFGtc+d7f88mdB07Vswf1gQ1PKooAMuQzYRgM+TylqtrCvb7H/bLt1On6ua+BEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQDZB27Vav3rNn3jy0o0fz7U9lqfWEzrUFBnzDBjwaPrzstyNGXLw4ceKAAez7+kuDEwADz9Lcvvnm/c+u/0LUewEw4Oxti3v3omUp0itK/RWiku8NrXswcOwFsMHBVbvKt9+ikFFRfD+PI/VWAAzY0qVoIyNRCJbG9vDhql21/glR75qge3eu7M24ISEoREkJnsfS4j7zTNXu9vbbeL116/h63npTA+4/qmFvY79+Hc9zccHA9eyJn1e1RnTpwvdz8y7A/QPvCHsndXWFOHAA7aRJfD8/b01Q5QLvDJYxIzy8Yk3TgQN4Xp8+fD23I3UuQM0E3hFnQly9ip9bLPg5e4l4/aHOBKidwDvCkgyxJom9nZ0NZ+vq3dYVp9YFqJvAO/LjjxjwV1+tm/tVnVrrhPkJ/MGDaN96q27uV31qvAbwFXgs8c8+Wzf3qzlqTAAKfNWodhPET+DZcLLhBp5R5RrAb+Drzzi+ulRagMqtx9cUD17gGRUWgAJfOzgVAAPO8nt99RVaCnxNU04nPH8+Wgp8bXG7BmCJZwmTLRa0CgXaEyfQtmpVO2789wLPcKgBLOCXLqH19cXAtG5d9vOa4r8beIaDAGzzOzwc7bVrWDOYEGw1sbpCUOAZDgK0aXPv01JSakYICrwjDgK0bHnv01jTVFUhKPDOcBCgvE62PCHi4sqe//vvFPj7I8BAsgTLf/+NtlOnyl2GddLJyWgXLsTAT53K9wPWd27VgNBQtM76gPJge7BWKwW+ctxKZ9u9O1rWxLCEygkJaK9fR3v5clnLPmdpbcXisn9PlMetgLHN67Fj0f7zD9rERCzRLJU5QRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRDEf496l0mP0anTtm0LF3755enTqamXLr38skCgULi6lp+Eh+MAAAQCgOLi7GyBYNmyPn3Gj58xY9q0du169+YvY54zxHw74AyRSCgUCn19AUQiiUSt5jiRSFwpb4VCiQRAJAIQCt3d+X4eZ9RbATiO4zhOpwPgOCz3HIelu+JXsNmwRnCcwcD38ziD91SG/3VIAJ4hAXiGBOAZEoBnSACeIQF4hgTgGRKAZ0gAniEBeIYE4BkSgGfqrQAWi81mtQIACASCertrUX3qrQBubjKZUslxAFYrS6xYOXA5WqkUi6XS8jdy+KLeChAcrFJ5eOj1AFar2VyVK+AGTm6uwVBSUn9TsAgefXTbtgULvvwSQCgUidzdceOjao9cfTgOS6zFEh+v1ebmPvFEWppWm5/fuDHujFXmWlhzwsJcXb29z55t1kyt9va+eLGkxGw2GlmyorrHYrFYTCaZLCDAxcXTMy5OALBixeDBHAcgFuOWX2V3nmoamw0bDJkMM1tKpRgu1idUFIFAKAQAMJlKS9HivphQKOS13qMfKpWbm79/ZqZYIFAqXV2Li3HP1c2NfwFwSx2AbbBXNvAMtpUpkcjlaFm55/f5xGKZDMDLS6FwdU1Pr5d9QG0FiO+CdS9/6qUA/yVIAJ4hAXhGaP8lGVGXsLiLAYqKsrNdXe3DUJuN784K769S4e/ZZDKVCv2q3GhIKMTn0emKigAAjMaSEvyG3+JmNhsMAKmpAAJBcLBgxYoLFw4eHDcOQCgUCHAiBlD3vyQTCgUCgYDjpFKhUCw2mb79Njb2r79Gjjx3LiMjLu6hhwDkcheXylzRYNBqAZ5/PiLiscd++aVXr6Cgli1//91gsFrNZpmsrp+PgWtccrm7u1Qql6ekiKdMad++Pv5o9Z13jh797rs2bc6dS0w8c6YqApSWajQAgwc3afLQQ9u2vf568+ZdumzZwvdzOVJvO+ErVwoLMzNdXQFksqotHGATlJ2t12u1vr58P49TL/l2wBklJdhW4hoV397UHvVWALGYBZ7/pZHapN4K8F+BBOAZEoBnSACeIQF4hgTgGRKAZ0gAniEBeIYE4BkSgGdIAJ4hAXim3r4rQq+3WEwmT0/7L9rwB00VB//ObLbZrFa1mu/ncUa9FSAkxMXFw+Ps2cxMd3d//+BguVwuV6v1+vL+ji1dl5QIBAKBQuHuLpMplQkJfD8PQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRAEQRANl1pPZ9O9+65dH30UEXHpUk5OYuLhwwUFJpPBoFIJBBKJXG4wsJQ6HFdSUlioVLZp4+0dGpqYOGlSly4vvfTMMyNGNG/epUthId+Bqi1q/Y1ZAoFAIBDI5ZgJIygIQCQSiQA4jiVoYDmN8FggABAIwsLw3w9y7oxbT13bN+A4juM4kwn/ZTDYM2I4swAcp9FwnD0d54NMHb01kZXyimbw+u8klqPXVvIMCcAzJADPkAA8QwLwTK0LgOP6yv+dzfZgJ3Bj1LoAZrPNZrEA2Gz21wrfTxAc/wMoFGKxVMp3eGqfWhfAzU0mUyrz8hQKgUAotNnseYEdZbDZbDYAFxexWCo1m195pWnTRx4pKOA7QLWNuHv33bs//LB5cwAAoVChwBmpyYRfV31ChPmBLRa1WiqVy5s0EQgEAuEtue/dtEgkUilAfr7FYjZLpaNHHz363XcdOsTE5ObeuKHTyeUSiVQqFjv764r5w3FGo8ViNstkHh4ymUKh0ezb17//lClJSbwJcOlSVlZS0rFjuEbj61tTAuBajsViMtlsVqtYXFwsEAgEMpk9Q7ZjG69QqNUA8fGlpcXFISHp6VevHjt28qRSKRZLpVhrOE5c5bUrXJPiOJvNbDaZZDKVSiZTqWJj8dtWrXgToKDAbDYYXFwAbDaRSCjEwMjl1b80xwHgG/9RRizhzksw+1woFAoBdDqz2WxWKHQ6kwlfWl/d5QmBAK9gNptMACaTUCiR1MRzVg8xLgtrtbg66eJSm+lj7Ytt9/8eqenwMAEAhEIApVIikck0Gp2udp61ooixZHFc7S+AVVbWmvbHcUGwfiz4iXEjxMfHnrm6pmoAW0wWibDlVird3Mp+X/Y+rJNmf6fT4TaMzYbn2Utw1WB/b7EYjQC5uRaLxeLtXfshvj/itm29vYOD4+Jw+8PTEwNjNjOnK3tBFlSZTCgUiYzGkhKbzWJRqeLi9HqNJjDQHui7/9JqBRAIOA7Aao2I8PBo1Cg9XaUSiSQSk8lsttlsNomkegJwHMdZLCaTVCoWy2QqVUrKv//yK4Bg48b4+OhoDw90UCLBEFZdADbh8vZWKNRqozE3V6fTaiMjZ878889vvjl+PDfXZNLrlUo26rFTUlJQANCmjZdXcHBi4gcfPPXUiBHduxcVGQw6nUZjtXJcdQRgG59mM8dxnFSqVAqFQqFe/+qr4eGPPqrR8CWAePjw5s27dq29Pdfnntu7d+XK7Gxs4gQCAKEQmyTHeTE2STIZbkRqtSaTXp+ZOWxYeHjnzg/uzlitz4SzsvR6jcbV1WJhUzEcZt4NfmsycZzNJhYbjVarxeLuzneAaps6WIqQSpXKso1ZRTr5+jFGqX1qXQCb7b+wtV51aD+AZ0gAniEBeIYE4BkSgGfq4LehbHkBlwLsazJ2y860f85xbObKd4Bqm1oXwGCw2cxmmcxiMZtNJrmcrccD4LKwXQCz2WgEsFoxj7DZXL2lh4ZCrQvg4SGVyuU6nYeHTKZSxcQIBEKhRCKVSiQSiUxmNLJyr9GYzWazUuniIpe7uKSmymQikUTC1qQIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiCI/yx1/oLgggKtVqsVCvV6k8lkCg52dVUqlUq1mr24DN+0a7PpdEaj0VhQEBDg4eHpmZXFd6Bqi1oTICenuLioyNs7K6uwsLBw4ECdzmg0GHr2LC01Go3Gtm0NBpPJZGraFF9eJhbfKQBmELDZbDaNBrMnXb8uk0mlYvGZM35+bm4eHr/80rSpv39AwIEDfAewutSYAHl5Gk1xsb9/YmJWVlbWlCnFxaWlJSWjR5tMFovV6uYmFAqFAgGASIRvSReJ8C3qjhnz7C/txrfJWa2YQYmdhwmiAcRioVAkunzZ29vV1dX1888ffrhp0/Dwdev4DmhlqbYAV66kpt64MXbszZt5ebm5H31ktVqtVqubm1QqFkskGCjMzVSzjmMNATAazWazGUChkMmk0jNnmjcPCAgM/N//QkJ8fHx9T5/mK7AVpcoCREfHxV29unFjfr5Wq9G8+SYLuEQiFmO6tfvlomFt+qVLaDMy0BqNaF1c0DZtirZ9e7SYFutemM0Wi8UCoNfjazFbtgwKCgmJioqICAwMCtq4ke9AO6PSAhw9euXKpUt792o0Op1O16+fUimXy2T4DlCWj+luNm9G+/33aI8de/rptm3bt2cBd84ff8TEXLjQqBEe9emDdvRotJ07336QW09isWDNuFOI4ODx48PDAwICA9eu5TvgjlRYgDNnEhLi47/7LiOjoKCg4I03XFzkcud5vv7+G+3kyRjoU6dq2nEUZvhwPFq9Gq2bG8vearFg38GEaN8+LKxJk0GDQkN9fHx9d+6suxDfn3IFSErKysrKGj48JubmzeTkDRtcXGQyuZylBnQ8++uvMeCshNY+KETjxnjERkXNmzP/TCZsmrCJ4rju3Vu3btMmMNDVVaFQKjMz68pPZzh9eTcOFz08rl/PysrIWL9eJsM2HpNiOp79zTd1HXgG3jc5GY86dUKbksL6IKmU9UkAAALB1aupqTdvbthQ1346w6kACQlZWRkZ8+cbDCaT0SiVymQSCUtyZefffzEAo0bx/SDoR3ExHvXujRYHrxwHoFLJZDIZQE5OUVFRUe/e2dlFRYWF3brx7fddAuh0BoNe7+aGE6hx43Ai5GxU8/rrfD+AIyhEfDweLVzIPnecX6Sm5ufn5c2axbe/dwmQlpafn58/ZIjBYDabTBKJRMJSEd7J9u34oFev8v0A92fxYrQFBazwKBRYk/PzNRqNpm9frVav1+vZKKvuuUsArVavLy197jmhEGesLMV4WerfcM4RLCCYuxtg06bbDyzEiSEmdgbAecyzz/Ll520BNJrSUp1OLMYS0a6dWCwSYXLPO8nLQ3viBF8OV439+519U1JiMOj19vlEXVOmBggEgYFms9VqtQYH33u0c/582ZLVULh8GS1LHWFfi9LrjUaTqVkzvjy7LQC6o1bj+NlZ6nD+x81Vg+XKzM6+81OBgC1/l00rWpfcFqBiWYTLXzqon7Aae7f/LNc8X57dUQMEAqGwvKSDbJGsoYHZ7AFcXR2/4bj7LxvWNrcFwB2q3Fxcf9fp2JpKWdiUv6EREIDW15d9UnZfITeXL89uC4AbG7m5CoVUKpMlJ7PFrLJ06IBrL2WTk9d/HnnE8RObDVdNlUq5XC7nbz5z1zzAw0OlcnH5+2+z2Wq1WBy/Zeuf/fvz5XDVGDz4rge/tUPn5qZUKpV//cWXZ3cJ4OXl6urqun07wP1y+k6ZwpfDFQVranAwHj3/PPvcYrFarVYArOlFRV5earVaffgwX37eJUBgoKenl9fBg2q1QiGXp6WZTLjlV5b27fEBX3mFL8crBpux46xGIGB9HYCfn7u7h8d338lkEolUajDw5aHT1dDGjX19/f3nzjUYcD393p3yN9+U3bHiH/TnjTfwaMAA9jkr+TKZVCqR4PP5+S1dyre/TgUIC/P19fPbsMHbW61Wq2NjS0uNRoPBcSNGoUB7/Dg+uLc3Xw+C9+/VC4+++459znFYgKxWpVKpBGjdul279u3fflulksvlcv4nluVmU23dOiQkNHToUJsNF+XYDlPZGsE2z//+GwPRpk1dPQDeLyoKjw4eZJ9zHJZ4qTQ4ODgYwGC4fPnyZQCN5ueft21jPwbgnwrvCd+8mZubk/P66+fOJSUlJHz/vUqFW5M4jnZcNWX/mjcP7dq1uIbElgSqDgY8MhKP5s9HO3So/c6sqQkKCgoCsFgKCvLzAWJjhwx55RUAgyEpKSnJYOjR49NPP/100KAOHaKioqJ++63eC8BISsrOzsr63/9iYm7cSE5es4ZtVdp3zO41r8zPR/vzz2jZ6mRMTNnvWXevVKL180PbpQvavn3RDhp0y/3b/uMPGgHk8tDQ0FAAkykrKysLICnpf/8bPx7AYIiLu3YNgOPUarUaoLQ0Nzc3F6B793nz5s176aVHH50wYcKEHTvqvQCMtLT8/Ly8QYNQiO+/N5stFqtVoWBbf2w19f6TfBZw9jshtlrJljyYAPdw/FZfxH6GYrFgAdDrY2IuXQIoKPj00zVrsMQnJwPIZNgUMdFMJq1WqwXQ6bKzs7MBnnxywYIFC158sXPn8ePHj9+1q64EqHJG7aAgLy9v7x07nniiRYvWrVu3Dgjw8PDw2LULN/MBSkqw02YzznvD8gWz8TrrS5wHno1mNJrS0tJSAI4TCoVCgyEyMjAwKGj2bKXyyJE//9yyJT09Ojo6GkAqDQnBq3Mc9mOsb3BxcXEBUKl8fX19AY4cmTNnzpydO8+f//rrr79+6aW6EqDGf5ybmVlYWFDQu3daWl5eXt5bbxUUlJRotX37Yuctk7G+gq3Hs87csaawpoz9BJHNXFUqqVQmy8ry8XFzc3P7+efQUB8fP7/Vq/FX1ikp7O9/+WX06NGj9+27fPmHH3744bnnvLwiIiIi7Dti7PoCAdsh02g0GgCDobi4uBigT59PPvnkkzFjWrceOnTo0C+/bDACOKLR6PWlpWFhhYVarVb7xBMlJQaDwdC5M/5aulkzDIS7O2tS8HcMNhvuRWdlYZN27RoG+ORJT0+1Wq0+ehR/LKDVlnf/AwcmTpw4ccuWs2fXr1+//tVXvb0jIyMjAYRC3PFjQrDj0tKCgoICex/Rv/9XX3311ZgxrVsPGTJkSM0LUef/P4AvDh6cMmXKlE2bTp/+7LPPPhs2zMenRYsWLe4WQiDAY4OhsLCwEECny8nJyQHo12/9+vXrx45t0+bll19+ef36mvKryn1AQ6N37xUrVqx4441Ond555513Nm/OzY2NjY0FsFpxqYU1RayPUCg8PDw87H3E/v0TJkyY8MUXWJOmTq0pv/4zAjBQiGHDunadPHny5G++KShISEhIALBYDAac6bP/t4BCyOUohELh6enpCXDw4KRJkyYtWxYdvXLlypXvv19df/5zAjCefvqDDz74YNSoxx6bOXPmzE8/tQuBozjHGiGT4fzBzS0sLCwM4OjR+fPnz1+4EIWYO7eqfvxn+oDyOHZs0aJFi9asOXHio48++uh///PwaNy4cWMAsVihUCjsEz0mjNms0+l0AFotTvi6dZs+ffr0BQsef3zmzJkz2Qy9fEgAB44f/+CDDz745JO//lq8ePHiCRNYiZdKVSqV6m4hLBa9Xq8HKCq6cePGDYCHHho9evToTz559tmVK1eunDixvPuRAE44ffrzzz///P33Dx2aNm3atIUL3dxCQkJC7BO4u4XAPsQuxKhRo0atWYNCTJjg7D7/2T6gPDp1evvtt99etKhXr+XLly+fO1ejSU9PTwcwmbDpsfcRKIRYjEswHh5YY86eXbdu3brx42NitmzZsmXcOGf3IQHKoWPHcePGjVu0qGfPjz/++ON584qKkpOTk+0zZzZvYPMIkQiFYE3W1avbt2/fPn68s+uTABWkY8exY8eOXbiwX78vvvjii8mT2QTNYMCZM5vQsRm91YpbnyhIaSnf/j9wXL68devWrWPGLF3q6enpyXFLlqhUKpXdss9TUo4ePXqULaPfDXXC1eTmzejo6OjevS9c2LBhw4a33mKfd+gwYsSIEV9+GRzcpUuXLvadOoIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgiEpQY++Mi41NTb15s2lTtVqhUKmaNJHLpVKJRKGwWKxWi8VkSkzMysrKSklxcVEo5PLk5HbtwsKaNGmo6XFrjioLcP16RkZ6upubTmc0Go29emFChiefxKxKERESiVgsFstkVqvVarWazRqNXq/XJyS4u6tUSuWpU5hIeffujh2bNYuIqH52pYZKhQWIjU1PT00VCjEnzDvvZGTk5+fnT55ss3EcQFgYy76K+S/uTBCNSXMwI4Y9FQl+mp6O53z5ZUiIt7ePz8cfR0QEBgYH85dasK4pV4Bjx65cuXw5MNBqtdkslp07MUlPp05SqVgsFmMuGJGInc3y8rL0sCw9lVqNAW/bFmXx88NUJQBmMyaGwyYrNrZRIw8PL6/hwyMjg4KCg0+f5jtAtY1TAS5cSE5OSvL1xaQ8hw5hyW7bFnO3AOA7YmNj8ZW9LGnmzz9jwjYWeDuYgM3DA4/69sX3y06ciLXh4YexCQMQiUQikSg3t1WrkJDQ0MceCwnx8vLxiY/nO1C1hVMB/vzz8uWYmL//1ukMBr2+c2elUiqVy1nGvC++wLMmTcKAV73JQGGWLMGsSrNnY5Iflm725s2OHcPDw8Pbt3d1VSiUygevr7jr3dGJiVlZGRljxxYV6XQlJZ07KxRSqVTKAv/llxjwceOqG3gGXue99zBd1eLFLBGcVqvXl5aGhCQmZmZmZFQ9Q0V953YNKC7W6UpK1OqzZxMTr19PSMDMeL6+mKIwPr5HjzZt2rWLiKhth44ciYm5cOHwYcw79vTT+KnF0rFjeHjz5k2aeHmp1a6uqal8B66mEGZmFhbm54tE2NY/95zBYDZbLL6+OIxkeb2WL68rh7CTnjdPKsXUhEaj2Ww2i8WFhSUlJSUvvsh3wGoaIY7bGzfW681ms/mpp3Dczr5mbS5LwllXREfjqCk2ViQSi0UigLw8rba4uHt3vgNW0wix7W3cGHM0NmtWNmHzhQvYRms0deUQ3o/NIi5fZikPjUaz2WIJDT17NiEhPt4+8G3oCPEBVSqRSCAQCuXysl8XFPDrXk5O2cTRmIsS4AESwGKx2TjOaLRaOc5mY+lkGSytLF94epY9tlhwjm1vJBs6QoPBZDKZkpI4zmbjuOTksk1Qhw44Tlep6tox9KFNG6sVlzikUpFILMZ5QUTEAyQAhjslRamUy+XykydFIlyrQXx90T77bF05hIK3a4dNTatWFovVarMBeHqq1S4u0dF8B6ymEYaF+fr6+RmNmCZ2504cfhYV4TyAJaWZPbuuHML7zZ9vMplMJpNAgK09x/n7e3h4edV9yvHa5vZMuFEjDw9Pz8JCDw8XF7V61SqDwWw2mVhT8NBDWDLnzastR/7449KlixfHjrXZjEaT6YUXbDaVSqkEaNasbdu2bT//3M1NqVQqr1/nO2A1zV1LEU2a+Pr6+S1d6uHh4qJSXbtWXIyp+jAT9fz5KMTChTXlAF5vzBibzWAwGNatE4sbNfL3BxCJSkv1eptNJDp16u+/ay+jNd84XYzLyCgoyM9v1+7ixRs3kpOPHbNYLBar1c3NxUUuZ4tyAAcO4Goomyn/9ReO4x1HU3Yw4F27YlMzfrzNZjKZTC+/LJUGBQUFAYjFbm6urgCXLvXu3acPx5nNV65cvXrhwkMPzZw5c+aAAV27Tp06dWpaGt+Bq3UBGCkpOTnZ2eHhyck5OVlZu3drtaWlBkPLllKpWCwUAkilYrFEwtruK1dQmGvX8K8zM9F6eWFTFhGB33foYDJhImWOUyqVSgCBQKPRagFSU+fMef99AJMpJubSJQC9HmfCcrlarVbn5HTqNH78+PG9emGqwYsX+Q5grQvAKCjQarVaT8/ExKyszMxZs3C1dMwYvd5kMpnUapFIJBIKcYNGeKthE9xxdbbEwXbOZDKRSCw2mcLCWrVq1WrNmuzszz77/PO4uJMnp0yZOvWrr9RqTDnu4uLn5+cHkJ8fFxcXByCXe3p6et68+fTTS5YsWfL00y1aDBw4cGBCAt+BrHUBHElKysrKzGzWzGCwWMzmZ58tKSkt1esff1yvN5tNpqZN8SyFAq3RiFuSN296e7u5ubqePKlUSiQSyW+/BQV5e/v6XrnCrrtz5+DBQ4YMHJia+u+/58/v3Mk2N11dsYnKz4+Pj48HUCp9fHx8ioqefHL+/Pnz+/Rp2fLFF1988e+/+Q5onQngDFyrEYttNgAANqew2Tp2bNaseXOLpaLXOXBg0qRJkwYPjovbvXv37p9+wuylQiETIjf3ypUrVwDU6sDAwMCcnK5dp0+fPv2ZZ9q1e+211167dInvwFaUep/K8NChGTNmzOjT5+rVHTt27Ni3z2azWCwWgcDDIzQ0NBQgLw9TkWMfodU+/PC4cePGDRzYpcu777777h9/8O1/edT7bKo9ey5dunTp/v1t277++uuvv/CCSCSRSCQmE0uc7OUVHh4eDmAwFBcXF6vV586tX79+/a5dJ0+uXLlyZefOfPtfHvW+Bjhy4sTSpUuX9uhx/vxXX3311f79ZrNer9fLZJ6ezZo1awZQXIzCYBpZna5Jk549e/Z8+eW+fdeuXbv211/59t+Rel8DHHnssRkzZsz488+OHcePHz++f3+ZzNXV1bWkpKAgMTExEcDNDZsmq9VgMBhUqmvXfvnll1927jxzZt26deu6dePbf0canAAMbOMPHerWbfr06dOffhozWGs0ubmxsbGxAJ6ezZs3bw6AA2CJ5OLFTZs2bdq4kW+/HWmwAjA6dIiKioo6ffrxx2fPnj17wAC12t/f37+wMD393Llz5wBKSoqKiooAJBKlUqnU6fj294EnPv633377LSJi8+Z+/fr1279/8+b+/fv337//xo3jx48fDw/n2z+CIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC4J11665ePXbskUdiYgoKMjLUar79+c9w8mR2dnJyWBjAokU9e3Kcp+cXX4waFRt74UJ+flqaqyvf/jnS4F5d7IzERK02L08qbdly48bJkxMSjEazWa8PDgYwm41GAIXCxcXTMzl5+/Z+/SZP7t+/b9/Q0LZt7a/N54sG/+JWxoABv/yyfPmhQ0ZjSUl+fnAwgFrt7Q0A4OkZGAig1xuNOl3jxn37bt06f/6FC3Pm/PPPrl0jR/Ltd4MX4Kmnfvll2bIvvrhyJTn5/PknngDw8goOBgDATB126+aGWdF0usJCsXj79qSks2dHjODb/wYrwIQJJ0/+9NO77x45cuXKn3+OGQPg4xMSAsAybtzxiLdy3ufm3rwJ0KhRcHDr1gkJZ84MGjRnTs+efD9HgxPgq6/i4k6c6Nnz00+PHPnmm9Wr7SWbBZpleGLHGk1uLoBIJJe7uBgMR4++9NL773fvrlZLpQpFaSnfz9NgBNiz58aNmJimTUeP3rt3xYoDBwBcXTHwEgnmgGUlXyDAJEJ6vVYLAGAy6fUA+/a99NL77z/1VPPmbm6+vhkZfD8PQ8y3A+WRkqLV5udLJC1afP/91KnHjwOwECuVOKhkbTxLQmqxYBaz4uLsbIBPPx04cNasUaOefTYoqGXLU6f4fh5H6n1e3q1bw8MNhj//LCwsLMzMbN0awMMjIADAHnhHcnNTUgDeeqt79zfeWLFi8eJOnV54YelSvp/DGfW2CerVa8+e5cvXr8/IyMpKSHjiCeeBt3eyKSkA3bu3afP007/99uWX3bu/8cbUqXw/R3k4FWDDhri4kycffbSuHRo37vjxzZsnTvz99/Pn9+176y0AL6/AQADWtd7h+q3A5+enpgKEhDRqFBkZH3/s2MCBs2b17VvXfleVuwTYsiUx8cyZbt2ion788b33Tp2KjNy0acqU33+vbUdWrbp8+ciR3r3XrYuO/umnVasAfHxCQwHsneq9RzcCgVzu4mI0Hj8+ePC8ed278x3QynJbgFOncnKSkxs1eu21nTs//PDQIQAPD39/gLi49PTY2J49g4K+/XbChNOno6Ozs5OSsDGoCfC+TZtOmvTrr6tWHTiAGcEAAKRSZ6MbjQaALTEcPDh48Lx5PXqEhanVXl5ZWXwHtLII4+OLirKyFIqBA/fsWbbs6FF8ZIUCQKXy8AAA8PYODQVIS8vPT03t2LFr182bp0+/cGHLlvj4U6ceeaSqN46PLy7OzpbJevXavn3RomPHAMRiqRQAQKVydwcAsNkwG5/j6KaoKDsbYPXqvn0nTRoxolevwMAWLerf6KbCAnTsuGPH4sWHD2dlpaZevRoebm9zHafy7u5+fgCYWdjX97XX9uxZtuzMmfff/+efnTtfeaWyNx4wYO/eVav++EOrLSrKzAwMtE+oHDtZVgPy8m7cABg37skn33xz2bKJE9u0eeqpDRv4DmB1ES5Z0qnTCy9s3IijDJsNIC8Ps/XaZ5YIK5EuLl5eAAAymVIJsGjRoUNffPHDD6NG/fHH11+/9155N+zZc8+eFSu++iou7saNCxe6dQPw9sYlBOejmxs3AJ54onXrZ57Zt2/duieeGDZs+nS+A1dT3F6OPnUqOzspqU2b55/fvfujj/bsycnJz09NDQtjTdCdayxl22SrFZuG/Py0NIDHHouIeOyxTZtOnBg8eO7cN99k1582LTp669ZJk5YtO3Lkm29WrgTw9sZFM5Y33rGTzctLTQUIDPTza9Lk2rX09BEjPv00MpLvgNWaAIysLL1eq3Vz69Nn587Fi/fu/fffpKTz5x9/HMDHJywMA4SBt3eOLGMq1pCiosxMgO7dIyMff/znn3v0aNQoImL//vnz//pry5aNGwHkcpUKAEAikcnuvI59dJOTAyAWi8UymV4fFxcV9cknTZs2a+bq6uPDEkQ/OJS7ITN06L59q1d/883PP5879+uvI0bY+wiJBLMFcxwGniVwZmmcdbqiIgAAqxWT2LLOVSSSSO78O1aTDAZcuyktLS4GOHx42LAVKzp3fuaZwMCIiNOn+Q5UbVHuTPjnn/v2nThx5Mjp0596asSIOXMAiopycgAA9PriYoC7VyFZiWZrNS4unp53nmcPPBvdGI0AAMXFubkAa9f27z91alTUgx54RqW3JDdsuHr1+PGhQ6Oi9u1bufKnn+wl2M3N3x8AwGareNpmAIDs7KQkHN1ERX388bp1Tzzx2mszZvAdmLqiynvCR49mZFy71rHjgAG7dn344b59Gk1xcU6Oj499Y4T1CY6wmpCdnZgI0KNH69ZPP713759/vvDCjBkDBvAdkLqm2pvyKSklJQUFfn79+u3YsWTJr79evpyaeunSI4/YO23W1LCagqObsDB//2bNYmNTUqKiVq9u2ZLvQPBFjf8qok+f3bs/+mjbtv37Y2IOH37pJQBfXxQCO1ehUCSSSPT6lJSRIz/7LCwsJMTFxcMDexWiBpk06dixTZs++ADg/fcff5zjAJYs6d2b4/74Iz09Lq7+pxp/YJgx48SJH36YM2fBgnPn9u2bNIlvfwiCIIjb/B/7w7TJ1Po+fAAAAABJRU5ErkJggg==);\n        background-size: 24px 352px;\n    }\n}\n\n.jsgrid .jsgrid-mode-button {\n    width: 24px;\n    height: 24px;\n}\n\n.jsgrid-mode-on-button {\n    opacity: .5;\n}\n\n.jsgrid-cancel-edit-button { background-position: 0 0; width: 16px; height: 16px; }\n.jsgrid-clear-filter-button { background-position: 0 -40px; width: 16px; height: 16px; }\n.jsgrid-delete-button { background-position: 0 -80px; width: 16px; height: 16px; }\n.jsgrid-edit-button { background-position: 0 -120px; width: 16px; height: 16px; }\n.jsgrid-insert-mode-button { background-position: 0 -160px; width: 24px; height: 24px; }\n.jsgrid-insert-button { background-position: 0 -208px; width: 16px; height: 16px; }\n.jsgrid-search-mode-button { background-position: 0 -248px; width: 24px; height: 24px; }\n.jsgrid-search-button { background-position: 0 -296px; width: 16px; height: 16px; }\n.jsgrid-update-button { background-position: 0 -336px; width: 16px; height: 16px; }\n\n\n.jsgrid-load-shader {\n    background: #ddd;\n    opacity: .5;\n    filter: alpha(opacity=50);\n}\n\n.jsgrid-load-panel {\n    width: 15em;\n    height: 5em;\n    background: #fff;\n    border: 1px solid #e9e9e9;\n    padding-top: 3em;\n    text-align: center;\n}\n\n.jsgrid-load-panel:before {\n    content: ' ';\n    position: absolute;\n    top: .5em;\n    left: 50%;\n    margin-left: -1em;\n    width: 2em;\n    height: 2em;\n    border: 2px solid #009a67;\n    border-right-color: transparent;\n    border-radius: 50%;\n    -webkit-animation: indicator 1s linear infinite;\n    animation: indicator 1s linear infinite;\n}\n\n@-webkit-keyframes indicator\n{\n    from { -webkit-transform: rotate(0deg); }\n    50%  { -webkit-transform: rotate(180deg); }\n    to   { -webkit-transform: rotate(360deg); }\n}\n\n@keyframes indicator\n{\n    from { transform: rotate(0deg); }\n    50%  { transform: rotate(180deg); }\n    to   { transform: rotate(360deg); }\n}\n\n/* old IE */\n.jsgrid-load-panel {\n    padding-top: 1.5em\\9;\n}\n.jsgrid-load-panel:before {\n    display: none\\9;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jsgrid/css/jsgrid.css",
    "content": "/*\n * jsGrid v1.5.1 (http://js-grid.com)\n * (c) 2016 Artem Tabalin\n * Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)\n */\n\n.jsgrid {\n    position: relative;\n    overflow: hidden;\n    font-size: 1em;\n}\n\n.jsgrid, .jsgrid *, .jsgrid *:before, .jsgrid *:after {\n    box-sizing: border-box;\n}\n\n.jsgrid input,\n.jsgrid textarea,\n.jsgrid select {\n    font-size: 1em;\n}\n\n.jsgrid-grid-header {\n    overflow-x: hidden;\n    overflow-y: scroll;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    -o-user-select: none;\n    user-select: none;\n}\n\n.jsgrid-grid-body {\n    overflow-x: auto;\n    overflow-y: scroll;\n    -webkit-overflow-scrolling: touch;\n}\n\n.jsgrid-table {\n    width: 100%;\n    table-layout: fixed;\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n.jsgrid-cell {\n    padding: 0.5em 0.5em;\n}\n\n.jsgrid-сell,\n.jsgrid-header-cell {\n    box-sizing: border-box;\n}\n\n.jsgrid-align-left {\n    text-align: left;\n}\n\n.jsgrid-align-center,\n.jsgrid-align-center input,\n.jsgrid-align-center textarea,\n.jsgrid-align-center select {\n    text-align: center;\n}\n\n.jsgrid-align-right,\n.jsgrid-align-right input,\n.jsgrid-align-right textarea,\n.jsgrid-align-right select {\n    text-align: right;\n}\n\n.jsgrid-header-cell {\n    padding: .5em .5em;\n}\n\n.jsgrid-filter-row input,\n.jsgrid-filter-row textarea,\n.jsgrid-filter-row select,\n.jsgrid-edit-row input,\n.jsgrid-edit-row textarea,\n.jsgrid-edit-row select,\n.jsgrid-insert-row input,\n.jsgrid-insert-row textarea,\n.jsgrid-insert-row select {\n    width: 100%;\n    padding: .3em .5em;\n}\n\n.jsgrid-filter-row input[type='checkbox'],\n.jsgrid-edit-row input[type='checkbox'],\n.jsgrid-insert-row input[type='checkbox'] {\n    width: auto;\n}\n\n\n.jsgrid-selected-row .jsgrid-cell {\n    cursor: pointer;\n}\n\n.jsgrid-nodata-row .jsgrid-cell {\n    padding: .5em 0;\n    text-align: center;\n}\n\n.jsgrid-header-sort {\n    cursor: pointer;\n}\n\n.jsgrid-pager {\n    padding: .5em 0;\n}\n\n.jsgrid-pager-nav-button {\n    padding: .2em .6em;\n}\n\n.jsgrid-pager-nav-inactive-button {\n    display: none;\n    pointer-events: none;\n}\n\n.jsgrid-pager-page {\n    padding: .2em .6em;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jsgrid/js/jsgrid.js",
    "content": "/*\n * jsGrid v1.5.1 (http://js-grid.com)\n * (c) 2016 Artem Tabalin\n * Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)\n */\n\n(function(window, $, undefined) {\n\n    var JSGRID = \"JSGrid\",\n        JSGRID_DATA_KEY = JSGRID,\n        JSGRID_ROW_DATA_KEY = \"JSGridItem\",\n        JSGRID_EDIT_ROW_DATA_KEY = \"JSGridEditRow\",\n\n        SORT_ORDER_ASC = \"asc\",\n        SORT_ORDER_DESC = \"desc\",\n\n        FIRST_PAGE_PLACEHOLDER = \"{first}\",\n        PAGES_PLACEHOLDER = \"{pages}\",\n        PREV_PAGE_PLACEHOLDER = \"{prev}\",\n        NEXT_PAGE_PLACEHOLDER = \"{next}\",\n        LAST_PAGE_PLACEHOLDER = \"{last}\",\n        PAGE_INDEX_PLACEHOLDER = \"{pageIndex}\",\n        PAGE_COUNT_PLACEHOLDER = \"{pageCount}\",\n        ITEM_COUNT_PLACEHOLDER = \"{itemCount}\",\n\n        EMPTY_HREF = \"javascript:void(0);\";\n\n    var getOrApply = function(value, context) {\n        if($.isFunction(value)) {\n            return value.apply(context, $.makeArray(arguments).slice(2));\n        }\n        return value;\n    };\n\n    var normalizePromise = function(promise) {\n        var d = $.Deferred();\n\n        if(promise && promise.then) {\n            promise.then(function() {\n                d.resolve.apply(d, arguments);\n            }, function() {\n                d.reject.apply(d, arguments);\n            });\n        } else {\n            d.resolve(promise);\n        }\n\n        return d.promise();\n    };\n\n    var defaultController = {\n        loadData: $.noop,\n        insertItem: $.noop,\n        updateItem: $.noop,\n        deleteItem: $.noop\n    };\n\n\n    function Grid(element, config) {\n        var $element = $(element);\n\n        $element.data(JSGRID_DATA_KEY, this);\n\n        this._container = $element;\n\n        this.data = [];\n        this.fields = [];\n\n        this._editingRow = null;\n        this._sortField = null;\n        this._sortOrder = SORT_ORDER_ASC;\n        this._firstDisplayingPage = 1;\n\n        this._init(config);\n        this.render();\n    }\n\n    Grid.prototype = {\n        width: \"auto\",\n        height: \"auto\",\n        updateOnResize: true,\n\n        rowClass: $.noop,\n        rowRenderer: null,\n\n        rowClick: function(args) {\n            if(this.editing) {\n                this.editItem($(args.event.target).closest(\"tr\"));\n            }\n        },\n        rowDoubleClick: $.noop,\n\n        noDataContent: \"Not found\",\n        noDataRowClass: \"jsgrid-nodata-row\",\n\n        heading: true,\n        headerRowRenderer: null,\n        headerRowClass: \"jsgrid-header-row\",\n        headerCellClass: \"jsgrid-header-cell\",\n\n        filtering: false,\n        filterRowRenderer: null,\n        filterRowClass: \"jsgrid-filter-row\",\n\n        inserting: false,\n        insertRowRenderer: null,\n        insertRowClass: \"jsgrid-insert-row\",\n\n        editing: false,\n        editRowRenderer: null,\n        editRowClass: \"jsgrid-edit-row\",\n\n        confirmDeleting: true,\n        deleteConfirm: \"Are you sure?\",\n\n        selecting: true,\n        selectedRowClass: \"jsgrid-selected-row\",\n        oddRowClass: \"jsgrid-row\",\n        evenRowClass: \"jsgrid-alt-row\",\n        cellClass: \"jsgrid-cell\",\n\n        sorting: false,\n        sortableClass: \"jsgrid-header-sortable\",\n        sortAscClass: \"jsgrid-header-sort jsgrid-header-sort-asc\",\n        sortDescClass: \"jsgrid-header-sort jsgrid-header-sort-desc\",\n\n        paging: false,\n        pagerContainer: null,\n        pageIndex: 1,\n        pageSize: 20,\n        pageButtonCount: 15,\n        pagerFormat: \"Pages: {first} {prev} {pages} {next} {last} &nbsp;&nbsp; {pageIndex} of {pageCount}\",\n        pagePrevText: \"Prev\",\n        pageNextText: \"Next\",\n        pageFirstText: \"First\",\n        pageLastText: \"Last\",\n        pageNavigatorNextText: \"...\",\n        pageNavigatorPrevText: \"...\",\n        pagerContainerClass: \"jsgrid-pager-container\",\n        pagerClass: \"jsgrid-pager\",\n        pagerNavButtonClass: \"jsgrid-pager-nav-button\",\n        pagerNavButtonInactiveClass: \"jsgrid-pager-nav-inactive-button\",\n        pageClass: \"jsgrid-pager-page\",\n        currentPageClass: \"jsgrid-pager-current-page\",\n\n        customLoading: false,\n        pageLoading: false,\n\n        autoload: false,\n        controller: defaultController,\n\n        loadIndication: true,\n        loadIndicationDelay: 500,\n        loadMessage: \"Please, wait...\",\n        loadShading: true,\n\n        invalidMessage: \"Invalid data entered!\",\n\n        invalidNotify: function(args) {\n            var messages = $.map(args.errors, function(error) {\n                return error.message || null;\n            });\n\n            window.alert([this.invalidMessage].concat(messages).join(\"\\n\"));\n        },\n\n        onInit: $.noop,\n        onRefreshing: $.noop,\n        onRefreshed: $.noop,\n        onPageChanged: $.noop,\n        onItemDeleting: $.noop,\n        onItemDeleted: $.noop,\n        onItemInserting: $.noop,\n        onItemInserted: $.noop,\n        onItemEditing: $.noop,\n        onItemUpdating: $.noop,\n        onItemUpdated: $.noop,\n        onItemInvalid: $.noop,\n        onDataLoading: $.noop,\n        onDataLoaded: $.noop,\n        onOptionChanging: $.noop,\n        onOptionChanged: $.noop,\n        onError: $.noop,\n\n        invalidClass: \"jsgrid-invalid\",\n\n        containerClass: \"jsgrid\",\n        tableClass: \"jsgrid-table\",\n        gridHeaderClass: \"jsgrid-grid-header\",\n        gridBodyClass: \"jsgrid-grid-body\",\n\n        _init: function(config) {\n            $.extend(this, config);\n            this._initLoadStrategy();\n            this._initController();\n            this._initFields();\n            this._attachWindowLoadResize();\n            this._attachWindowResizeCallback();\n            this._callEventHandler(this.onInit)\n        },\n\n        loadStrategy: function() {\n            return this.pageLoading\n                ? new jsGrid.loadStrategies.PageLoadingStrategy(this)\n                : new jsGrid.loadStrategies.DirectLoadingStrategy(this);\n        },\n\n        _initLoadStrategy: function() {\n            this._loadStrategy = getOrApply(this.loadStrategy, this);\n        },\n\n        _initController: function() {\n            this._controller = $.extend({}, defaultController, getOrApply(this.controller, this));\n        },\n\n        renderTemplate: function(source, context, config) {\n            args = [];\n            for(var key in config) {\n                args.push(config[key]);\n            }\n\n            args.unshift(source, context);\n\n            source = getOrApply.apply(null, args);\n            return (source === undefined || source === null) ? \"\" : source;\n        },\n\n        loadIndicator: function(config) {\n            return new jsGrid.LoadIndicator(config);\n        },\n\n        validation: function(config) {\n            return jsGrid.Validation && new jsGrid.Validation(config);\n        },\n\n        _initFields: function() {\n            var self = this;\n            self.fields = $.map(self.fields, function(field) {\n                if($.isPlainObject(field)) {\n                    var fieldConstructor = (field.type && jsGrid.fields[field.type]) || jsGrid.Field;\n                    field = new fieldConstructor(field);\n                }\n                field._grid = self;\n                return field;\n            });\n        },\n\n        _attachWindowLoadResize: function() {\n            $(window).on(\"load\", $.proxy(this._refreshSize, this));\n        },\n\n        _attachWindowResizeCallback: function() {\n            if(this.updateOnResize) {\n                $(window).on(\"resize\", $.proxy(this._refreshSize, this));\n            }\n        },\n\n        _detachWindowResizeCallback: function() {\n            $(window).off(\"resize\", this._refreshSize);\n        },\n\n        option: function(key, value) {\n            var optionChangingEventArgs,\n                optionChangedEventArgs;\n\n            if(arguments.length === 1)\n                return this[key];\n\n            optionChangingEventArgs = {\n                option: key,\n                oldValue: this[key],\n                newValue: value\n            };\n            this._callEventHandler(this.onOptionChanging, optionChangingEventArgs);\n\n            this._handleOptionChange(optionChangingEventArgs.option, optionChangingEventArgs.newValue);\n\n            optionChangedEventArgs = {\n                option: optionChangingEventArgs.option,\n                value: optionChangingEventArgs.newValue\n            };\n            this._callEventHandler(this.onOptionChanged, optionChangedEventArgs);\n        },\n\n        fieldOption: function(field, key, value) {\n            field = this._normalizeField(field);\n\n            if(arguments.length === 2)\n                return field[key];\n\n            field[key] = value;\n            this._renderGrid();\n        },\n\n        _handleOptionChange: function(name, value) {\n            this[name] = value;\n\n            switch(name) {\n                case \"width\":\n                case \"height\":\n                    this._refreshSize();\n                    break;\n                case \"rowClass\":\n                case \"rowRenderer\":\n                case \"rowClick\":\n                case \"rowDoubleClick\":\n                case \"noDataRowClass\":\n                case \"noDataContent\":\n                case \"selecting\":\n                case \"selectedRowClass\":\n                case \"oddRowClass\":\n                case \"evenRowClass\":\n                    this._refreshContent();\n                    break;\n                case \"pageButtonCount\":\n                case \"pagerFormat\":\n                case \"pagePrevText\":\n                case \"pageNextText\":\n                case \"pageFirstText\":\n                case \"pageLastText\":\n                case \"pageNavigatorNextText\":\n                case \"pageNavigatorPrevText\":\n                case \"pagerClass\":\n                case \"pagerNavButtonClass\":\n                case \"pageClass\":\n                case \"currentPageClass\":\n                case \"pagerRenderer\":\n                    this._refreshPager();\n                    break;\n                case \"fields\":\n                    this._initFields();\n                    this.render();\n                    break;\n                case \"data\":\n                case \"editing\":\n                case \"heading\":\n                case \"filtering\":\n                case \"inserting\":\n                case \"paging\":\n                    this.refresh();\n                    break;\n                case \"loadStrategy\":\n                case \"pageLoading\":\n                    this._initLoadStrategy();\n                    this.search();\n                    break;\n                case \"pageIndex\":\n                    this.openPage(value);\n                    break;\n                case \"pageSize\":\n                    this.refresh();\n                    this.search();\n                    break;\n                case \"editRowRenderer\":\n                case \"editRowClass\":\n                    this.cancelEdit();\n                    break;\n                case \"updateOnResize\":\n                    this._detachWindowResizeCallback();\n                    this._attachWindowResizeCallback();\n                    break;\n                case \"invalidNotify\":\n                case \"invalidMessage\":\n                    break;\n                default:\n                    this.render();\n                    break;\n            }\n        },\n\n        destroy: function() {\n            this._detachWindowResizeCallback();\n            this._clear();\n            this._container.removeData(JSGRID_DATA_KEY);\n        },\n\n        render: function() {\n            this._renderGrid();\n            return this.autoload ? this.loadData() : $.Deferred().resolve().promise();\n        },\n\n        _renderGrid: function() {\n            this._clear();\n\n            this._container.addClass(this.containerClass)\n                .css(\"position\", \"relative\")\n                .append(this._createHeader())\n                .append(this._createBody());\n\n            this._pagerContainer = this._createPagerContainer();\n            this._loadIndicator = this._createLoadIndicator();\n            this._validation = this._createValidation();\n\n            this.refresh();\n        },\n\n        _createLoadIndicator: function() {\n            return getOrApply(this.loadIndicator, this, {\n                message: this.loadMessage,\n                shading: this.loadShading,\n                container: this._container\n            });\n        },\n\n        _createValidation: function() {\n            return getOrApply(this.validation, this);\n        },\n\n        _clear: function() {\n            this.cancelEdit();\n\n            clearTimeout(this._loadingTimer);\n\n            this._pagerContainer && this._pagerContainer.empty();\n\n            this._container.empty()\n                .css({ position: \"\", width: \"\", height: \"\" });\n        },\n\n        _createHeader: function() {\n            var $headerRow = this._headerRow = this._createHeaderRow(),\n                $filterRow = this._filterRow = this._createFilterRow(),\n                $insertRow = this._insertRow = this._createInsertRow();\n\n            var $headerGrid = this._headerGrid = $(\"<table>\").addClass(this.tableClass)\n                .append($headerRow)\n                .append($filterRow)\n                .append($insertRow);\n\n            var $header = this._header = $(\"<div>\").addClass(this.gridHeaderClass)\n                .addClass(this._scrollBarWidth() ? \"jsgrid-header-scrollbar\" : \"\")\n                .append($headerGrid);\n\n            return $header;\n        },\n\n        _createBody: function() {\n            var $content = this._content = $(\"<tbody>\");\n\n            var $bodyGrid = this._bodyGrid = $(\"<table>\").addClass(this.tableClass)\n                .append($content);\n\n            var $body = this._body = $(\"<div>\").addClass(this.gridBodyClass)\n                .append($bodyGrid)\n                .on(\"scroll\", $.proxy(function(e) {\n                    this._header.scrollLeft(e.target.scrollLeft);\n                }, this));\n\n            return $body;\n        },\n\n        _createPagerContainer: function() {\n            var pagerContainer = this.pagerContainer || $(\"<div>\").appendTo(this._container);\n            return $(pagerContainer).addClass(this.pagerContainerClass);\n        },\n\n        _eachField: function(callBack) {\n            var self = this;\n            $.each(this.fields, function(index, field) {\n                if(field.visible) {\n                    callBack.call(self, field, index);\n                }\n            });\n        },\n\n        _createHeaderRow: function() {\n            if($.isFunction(this.headerRowRenderer))\n                return $(this.renderTemplate(this.headerRowRenderer, this));\n\n            var $result = $(\"<tr>\").addClass(this.headerRowClass);\n\n            this._eachField(function(field, index) {\n                var $th = this._prepareCell(\"<th>\", field, \"headercss\", this.headerCellClass)\n                    .append(this.renderTemplate(field.headerTemplate, field))\n                    .appendTo($result);\n\n                if(this.sorting && field.sorting) {\n                    $th.addClass(this.sortableClass)\n                        .on(\"click\", $.proxy(function() {\n                            this.sort(index);\n                        }, this));\n                }\n            });\n\n            return $result;\n        },\n\n        _prepareCell: function(cell, field, cssprop, cellClass) {\n            return $(cell).css(\"width\", field.width)\n                .addClass(cellClass || this.cellClass)\n                .addClass((cssprop && field[cssprop]) || field.css)\n                .addClass(field.align ? (\"jsgrid-align-\" + field.align) : \"\");\n        },\n\n        _createFilterRow: function() {\n            if($.isFunction(this.filterRowRenderer))\n                return $(this.renderTemplate(this.filterRowRenderer, this));\n\n            var $result = $(\"<tr>\").addClass(this.filterRowClass);\n\n            this._eachField(function(field) {\n                this._prepareCell(\"<td>\", field, \"filtercss\")\n                    .append(this.renderTemplate(field.filterTemplate, field))\n                    .appendTo($result);\n            });\n\n            return $result;\n        },\n\n        _createInsertRow: function() {\n            if($.isFunction(this.insertRowRenderer))\n                return $(this.renderTemplate(this.insertRowRenderer, this));\n\n            var $result = $(\"<tr>\").addClass(this.insertRowClass);\n\n            this._eachField(function(field) {\n                this._prepareCell(\"<td>\", field, \"insertcss\")\n                    .append(this.renderTemplate(field.insertTemplate, field))\n                    .appendTo($result);\n            });\n\n            return $result;\n        },\n\n        _callEventHandler: function(handler, eventParams) {\n            handler.call(this, $.extend(eventParams, {\n                grid: this\n            }));\n\n            return eventParams;\n        },\n\n        reset: function() {\n            this._resetSorting();\n            this._resetPager();\n            return this._loadStrategy.reset();\n        },\n\n        _resetPager: function() {\n            this._firstDisplayingPage = 1;\n            this._setPage(1);\n        },\n\n        _resetSorting: function() {\n            this._sortField = null;\n            this._sortOrder = SORT_ORDER_ASC;\n            this._clearSortingCss();\n        },\n\n        refresh: function() {\n            this._callEventHandler(this.onRefreshing);\n\n            this.cancelEdit();\n\n            this._refreshHeading();\n            this._refreshFiltering();\n            this._refreshInserting();\n            this._refreshContent();\n            this._refreshPager();\n            this._refreshSize();\n\n            this._callEventHandler(this.onRefreshed);\n        },\n\n        _refreshHeading: function() {\n            this._headerRow.toggle(this.heading);\n        },\n\n        _refreshFiltering: function() {\n            this._filterRow.toggle(this.filtering);\n        },\n\n        _refreshInserting: function() {\n            this._insertRow.toggle(this.inserting);\n        },\n\n        _refreshContent: function() {\n            var $content = this._content;\n            $content.empty();\n\n            if(!this.data.length) {\n                $content.append(this._createNoDataRow());\n                return this;\n            }\n\n            var indexFrom = this._loadStrategy.firstDisplayIndex();\n            var indexTo = this._loadStrategy.lastDisplayIndex();\n\n            for(var itemIndex = indexFrom; itemIndex < indexTo; itemIndex++) {\n                var item = this.data[itemIndex];\n                $content.append(this._createRow(item, itemIndex));\n            }\n        },\n\n        _createNoDataRow: function() {\n            var amountOfFields = 0;\n            this._eachField(function() {\n                amountOfFields++;\n            });\n\n            return $(\"<tr>\").addClass(this.noDataRowClass)\n                .append($(\"<td>\").attr(\"colspan\", amountOfFields)\n                    .append(this.renderTemplate(this.noDataContent, this)));\n        },\n\n        _createRow: function(item, itemIndex) {\n            var $result;\n\n            if($.isFunction(this.rowRenderer)) {\n                $result = this.renderTemplate(this.rowRenderer, this, { item: item, itemIndex: itemIndex });\n            } else {\n                $result = $(\"<tr>\");\n                this._renderCells($result, item);\n            }\n\n            $result.addClass(this._getRowClasses(item, itemIndex))\n                .data(JSGRID_ROW_DATA_KEY, item)\n                .on(\"click\", $.proxy(function(e) {\n                    this.rowClick({\n                        item: item,\n                        itemIndex: itemIndex,\n                        event: e\n                    });\n                }, this))\n                .on(\"dblclick\", $.proxy(function(e) {\n                    this.rowDoubleClick({\n                        item: item,\n                        itemIndex: itemIndex,\n                        event: e\n                    });\n                }, this));\n\n            if(this.selecting) {\n                this._attachRowHover($result);\n            }\n\n            return $result;\n        },\n\n        _getRowClasses: function(item, itemIndex) {\n            var classes = [];\n            classes.push(((itemIndex + 1) % 2) ? this.oddRowClass : this.evenRowClass);\n            classes.push(getOrApply(this.rowClass, this, item, itemIndex));\n            return classes.join(\" \");\n        },\n\n        _attachRowHover: function($row) {\n            var selectedRowClass = this.selectedRowClass;\n            $row.hover(function() {\n                    $(this).addClass(selectedRowClass);\n                },\n                function() {\n                    $(this).removeClass(selectedRowClass);\n                }\n            );\n        },\n\n        _renderCells: function($row, item) {\n            this._eachField(function(field) {\n                $row.append(this._createCell(item, field));\n            });\n            return this;\n        },\n\n        _createCell: function(item, field) {\n            var $result;\n            var fieldValue = this._getItemFieldValue(item, field);\n\n            var args = { value: fieldValue, item : item };\n            if($.isFunction(field.cellRenderer)) {\n                $result = this.renderTemplate(field.cellRenderer, field, args);\n            } else {\n                $result = $(\"<td>\").append(this.renderTemplate(field.itemTemplate || fieldValue, field, args));\n            }\n\n            return this._prepareCell($result, field);\n        },\n\n        _getItemFieldValue: function(item, field) {\n            var props = field.name.split('.');\n            var result = item[props.shift()];\n\n            while(result && props.length) {\n                result = result[props.shift()];\n            }\n\n            return result;\n        },\n\n        _setItemFieldValue: function(item, field, value) {\n            var props = field.name.split('.');\n            var current = item;\n            var prop = props[0];\n\n            while(current && props.length) {\n                item = current;\n                prop = props.shift();\n                current = item[prop];\n            }\n\n            if(!current) {\n                while(props.length) {\n                    item = item[prop] = {};\n                    prop = props.shift();\n                }\n            }\n\n            item[prop] = value;\n        },\n\n        sort: function(field, order) {\n            if($.isPlainObject(field)) {\n                order = field.order;\n                field = field.field;\n            }\n\n            this._clearSortingCss();\n            this._setSortingParams(field, order);\n            this._setSortingCss();\n            return this._loadStrategy.sort();\n        },\n\n        _clearSortingCss: function() {\n            this._headerRow.find(\"th\")\n                .removeClass(this.sortAscClass)\n                .removeClass(this.sortDescClass);\n        },\n\n        _setSortingParams: function(field, order) {\n            field = this._normalizeField(field);\n            order = order || ((this._sortField === field) ? this._reversedSortOrder(this._sortOrder) : SORT_ORDER_ASC);\n\n            this._sortField = field;\n            this._sortOrder = order;\n        },\n\n        _normalizeField: function(field) {\n            if($.isNumeric(field)) {\n                return this.fields[field];\n            }\n\n            if(typeof field === \"string\") {\n                return $.grep(this.fields, function(f) {\n                    return f.name === field;\n                })[0];\n            }\n\n            return field;\n        },\n\n        _reversedSortOrder: function(order) {\n            return (order === SORT_ORDER_ASC ? SORT_ORDER_DESC : SORT_ORDER_ASC);\n        },\n\n        _setSortingCss: function() {\n            var fieldIndex = this._visibleFieldIndex(this._sortField);\n\n            this._headerRow.find(\"th\").eq(fieldIndex)\n                .addClass(this._sortOrder === SORT_ORDER_ASC ? this.sortAscClass : this.sortDescClass);\n        },\n\n        _visibleFieldIndex: function(field) {\n            return $.inArray(field, $.grep(this.fields, function(f) { return f.visible; }));\n        },\n\n        _sortData: function() {\n            var sortFactor = this._sortFactor(),\n                sortField = this._sortField;\n\n            if(sortField) {\n                this.data.sort(function(item1, item2) {\n                    return sortFactor * sortField.sortingFunc(item1[sortField.name], item2[sortField.name]);\n                });\n            }\n        },\n\n        _sortFactor: function() {\n            return this._sortOrder === SORT_ORDER_ASC ? 1 : -1;\n        },\n\n        _itemsCount: function() {\n            return this._loadStrategy.itemsCount();\n        },\n\n        _pagesCount: function() {\n            var itemsCount = this._itemsCount(),\n                pageSize = this.pageSize;\n            return Math.floor(itemsCount / pageSize) + (itemsCount % pageSize ? 1 : 0);\n        },\n\n        _refreshPager: function() {\n            var $pagerContainer = this._pagerContainer;\n            $pagerContainer.empty();\n\n            if(this.paging) {\n                $pagerContainer.append(this._createPager());\n            }\n\n            var showPager = this.paging && this._pagesCount() > 1;\n            $pagerContainer.toggle(showPager);\n        },\n\n        _createPager: function() {\n            var $result;\n\n            if($.isFunction(this.pagerRenderer)) {\n                $result = $(this.pagerRenderer({\n                    pageIndex: this.pageIndex,\n                    pageCount: this._pagesCount()\n                }));\n            } else {\n                $result = $(\"<div>\").append(this._createPagerByFormat());\n            }\n\n            $result.addClass(this.pagerClass);\n\n            return $result;\n        },\n\n        _createPagerByFormat: function() {\n            var pageIndex = this.pageIndex,\n                pageCount = this._pagesCount(),\n                itemCount = this._itemsCount(),\n                pagerParts = this.pagerFormat.split(\" \");\n\n            return $.map(pagerParts, $.proxy(function(pagerPart) {\n                var result = pagerPart;\n\n                if(pagerPart === PAGES_PLACEHOLDER) {\n                    result = this._createPages();\n                } else if(pagerPart === FIRST_PAGE_PLACEHOLDER) {\n                    result = this._createPagerNavButton(this.pageFirstText, 1, pageIndex > 1);\n                } else if(pagerPart === PREV_PAGE_PLACEHOLDER) {\n                    result = this._createPagerNavButton(this.pagePrevText, pageIndex - 1, pageIndex > 1);\n                } else if(pagerPart === NEXT_PAGE_PLACEHOLDER) {\n                    result = this._createPagerNavButton(this.pageNextText, pageIndex + 1, pageIndex < pageCount);\n                } else if(pagerPart === LAST_PAGE_PLACEHOLDER) {\n                    result = this._createPagerNavButton(this.pageLastText, pageCount, pageIndex < pageCount);\n                } else if(pagerPart === PAGE_INDEX_PLACEHOLDER) {\n                    result = pageIndex;\n                } else if(pagerPart === PAGE_COUNT_PLACEHOLDER) {\n                    result = pageCount;\n                } else if(pagerPart === ITEM_COUNT_PLACEHOLDER) {\n                    result = itemCount;\n                }\n\n                return $.isArray(result) ? result.concat([\" \"]) : [result, \" \"];\n            }, this));\n        },\n\n        _createPages: function() {\n            var pageCount = this._pagesCount(),\n                pageButtonCount = this.pageButtonCount,\n                firstDisplayingPage = this._firstDisplayingPage,\n                pages = [];\n\n            if(firstDisplayingPage > 1) {\n                pages.push(this._createPagerPageNavButton(this.pageNavigatorPrevText, this.showPrevPages));\n            }\n\n            for(var i = 0, pageNumber = firstDisplayingPage; i < pageButtonCount && pageNumber <= pageCount; i++, pageNumber++) {\n                pages.push(pageNumber === this.pageIndex\n                    ? this._createPagerCurrentPage()\n                    : this._createPagerPage(pageNumber));\n            }\n\n            if((firstDisplayingPage + pageButtonCount - 1) < pageCount) {\n                pages.push(this._createPagerPageNavButton(this.pageNavigatorNextText, this.showNextPages));\n            }\n\n            return pages;\n        },\n\n        _createPagerNavButton: function(text, pageIndex, isActive) {\n            return this._createPagerButton(text, this.pagerNavButtonClass + (isActive ? \"\" : \" \" + this.pagerNavButtonInactiveClass),\n                isActive ? function() { this.openPage(pageIndex); } : $.noop);\n        },\n\n        _createPagerPageNavButton: function(text, handler) {\n            return this._createPagerButton(text, this.pagerNavButtonClass, handler);\n        },\n\n        _createPagerPage: function(pageIndex) {\n            return this._createPagerButton(pageIndex, this.pageClass, function() {\n                this.openPage(pageIndex);\n            });\n        },\n\n        _createPagerButton: function(text, css, handler) {\n            var $link = $(\"<a>\").attr(\"href\", EMPTY_HREF)\n                .html(text)\n                .on(\"click\", $.proxy(handler, this));\n\n            return $(\"<span>\").addClass(css).append($link);\n        },\n\n        _createPagerCurrentPage: function() {\n            return $(\"<span>\")\n                .addClass(this.pageClass)\n                .addClass(this.currentPageClass)\n                .text(this.pageIndex);\n        },\n\n        _refreshSize: function() {\n            this._refreshHeight();\n            this._refreshWidth();\n        },\n\n        _refreshWidth: function() {\n            var $headerGrid = this._headerGrid,\n                $bodyGrid = this._bodyGrid,\n                width = this.width;\n\n            if(width === \"auto\") {\n                $headerGrid.width(\"auto\");\n                width = $headerGrid.outerWidth();\n            }\n\n            $headerGrid.width(\"\");\n            $bodyGrid.width(\"\");\n            this._container.width(width);\n            width = $headerGrid.outerWidth();\n            $bodyGrid.width(width);\n        },\n\n        _scrollBarWidth: (function() {\n            var result;\n\n            return function() {\n                if(result === undefined) {\n                    var $ghostContainer = $(\"<div style='width:50px;height:50px;overflow:hidden;position:absolute;top:-10000px;left:-10000px;'></div>\");\n                    var $ghostContent = $(\"<div style='height:100px;'></div>\");\n                    $ghostContainer.append($ghostContent).appendTo(\"body\");\n                    var width = $ghostContent.innerWidth();\n                    $ghostContainer.css(\"overflow-y\", \"auto\");\n                    var widthExcludingScrollBar = $ghostContent.innerWidth();\n                    $ghostContainer.remove();\n                    result = width - widthExcludingScrollBar;\n                }\n                return result;\n            };\n        })(),\n\n        _refreshHeight: function() {\n            var container = this._container,\n                pagerContainer = this._pagerContainer,\n                height = this.height,\n                nonBodyHeight;\n\n            container.height(height);\n\n            if(height !== \"auto\") {\n                height = container.height();\n\n                nonBodyHeight = this._header.outerHeight(true);\n                if(pagerContainer.parents(container).length) {\n                    nonBodyHeight += pagerContainer.outerHeight(true);\n                }\n\n                this._body.outerHeight(height - nonBodyHeight);\n            }\n        },\n\n        showPrevPages: function() {\n            var firstDisplayingPage = this._firstDisplayingPage,\n                pageButtonCount = this.pageButtonCount;\n\n            this._firstDisplayingPage = (firstDisplayingPage > pageButtonCount) ? firstDisplayingPage - pageButtonCount : 1;\n\n            this._refreshPager();\n        },\n\n        showNextPages: function() {\n            var firstDisplayingPage = this._firstDisplayingPage,\n                pageButtonCount = this.pageButtonCount,\n                pageCount = this._pagesCount();\n\n            this._firstDisplayingPage = (firstDisplayingPage + 2 * pageButtonCount > pageCount)\n                ? pageCount - pageButtonCount + 1\n                : firstDisplayingPage + pageButtonCount;\n\n            this._refreshPager();\n        },\n\n        openPage: function(pageIndex) {\n            if(pageIndex < 1 || pageIndex > this._pagesCount())\n                return;\n\n            this._setPage(pageIndex);\n            this._loadStrategy.openPage(pageIndex);\n        },\n\n        _setPage: function(pageIndex) {\n            var firstDisplayingPage = this._firstDisplayingPage,\n                pageButtonCount = this.pageButtonCount;\n\n            this.pageIndex = pageIndex;\n\n            if(pageIndex < firstDisplayingPage) {\n                this._firstDisplayingPage = pageIndex;\n            }\n\n            if(pageIndex > firstDisplayingPage + pageButtonCount - 1) {\n                this._firstDisplayingPage = pageIndex - pageButtonCount + 1;\n            }\n\n            this._callEventHandler(this.onPageChanged, {\n                pageIndex: pageIndex\n            });\n        },\n\n        _controllerCall: function(method, param, isCanceled, doneCallback) {\n            if(isCanceled)\n                return $.Deferred().reject().promise();\n\n            this._showLoading();\n\n            var controller = this._controller;\n            if(!controller || !controller[method]) {\n                throw Error(\"controller has no method '\" + method + \"'\");\n            }\n\n            return normalizePromise(controller[method](param))\n                .done($.proxy(doneCallback, this))\n                .fail($.proxy(this._errorHandler, this))\n                .always($.proxy(this._hideLoading, this));\n        },\n\n        _errorHandler: function() {\n            this._callEventHandler(this.onError, {\n                args: $.makeArray(arguments)\n            });\n        },\n\n        _showLoading: function() {\n            if(!this.loadIndication)\n                return;\n\n            clearTimeout(this._loadingTimer);\n\n            this._loadingTimer = setTimeout($.proxy(function() {\n                this._loadIndicator.show();\n            }, this), this.loadIndicationDelay);\n        },\n\n        _hideLoading: function() {\n            if(!this.loadIndication)\n                return;\n\n            clearTimeout(this._loadingTimer);\n            this._loadIndicator.hide();\n        },\n\n        search: function(filter) {\n            this._resetSorting();\n            this._resetPager();\n            return this.loadData(filter);\n        },\n\n        loadData: function(filter) {\n            filter = filter || (this.filtering ? this.getFilter() : {});\n\n            $.extend(filter, this._loadStrategy.loadParams(), this._sortingParams());\n\n            var args = this._callEventHandler(this.onDataLoading, {\n                filter: filter\n            });\n\n            return this._controllerCall(\"loadData\", filter, args.cancel, function(loadedData) {\n                if(!loadedData)\n                    return;\n\n                this._loadStrategy.finishLoad(loadedData);\n\n                this._callEventHandler(this.onDataLoaded, {\n                    data: loadedData\n                });\n            });\n        },\n\n        getFilter: function() {\n            var result = {};\n            this._eachField(function(field) {\n                if(field.filtering) {\n                    this._setItemFieldValue(result, field, field.filterValue());\n                }\n            });\n            return result;\n        },\n\n        _sortingParams: function() {\n            if(this.sorting && this._sortField) {\n                return {\n                    sortField: this._sortField.name,\n                    sortOrder: this._sortOrder\n                };\n            }\n            return {};\n        },\n\n        getSorting: function() {\n            var sortingParams = this._sortingParams();\n            return {\n                field: sortingParams.sortField,\n                order: sortingParams.sortOrder\n            };\n        },\n\n        clearFilter: function() {\n            var $filterRow = this._createFilterRow();\n            this._filterRow.replaceWith($filterRow);\n            this._filterRow = $filterRow;\n            return this.search();\n        },\n\n        insertItem: function(item) {\n            var insertingItem = item || this._getValidatedInsertItem();\n\n            if(!insertingItem)\n                return $.Deferred().reject().promise();\n\n            var args = this._callEventHandler(this.onItemInserting, {\n                item: insertingItem\n            });\n\n            return this._controllerCall(\"insertItem\", insertingItem, args.cancel, function(insertedItem) {\n                insertedItem = insertedItem || insertingItem;\n                this._loadStrategy.finishInsert(insertedItem);\n\n                this._callEventHandler(this.onItemInserted, {\n                    item: insertedItem\n                });\n            });\n        },\n\n        _getValidatedInsertItem: function() {\n            var item = this._getInsertItem();\n            return this._validateItem(item, this._insertRow) ? item : null;\n        },\n\n        _getInsertItem: function() {\n            var result = {};\n            this._eachField(function(field) {\n                if(field.inserting) {\n                    this._setItemFieldValue(result, field, field.insertValue());\n                }\n            });\n            return result;\n        },\n\n        _validateItem: function(item, $row) {\n            var validationErrors = [];\n\n            var args = {\n                item: item,\n                itemIndex: this._rowIndex($row),\n                row: $row\n            };\n\n            this._eachField(function(field) {\n                if(!field.validate)\n                    return;\n\n                var fieldValue = this._getItemFieldValue(item, field);\n\n                if(fieldValue === undefined)\n                    return;\n\n                var errors = this._validation.validate($.extend({\n                    value: fieldValue,\n                    rules: field.validate\n                }, args));\n\n                this._setCellValidity($row.children().eq(this._visibleFieldIndex(field)), errors);\n\n                if(!errors.length)\n                    return;\n\n                validationErrors.push.apply(validationErrors,\n                    $.map(errors, function(message) {\n                        return { field: field, message: message };\n                    }));\n            });\n\n            if(!validationErrors.length)\n                return true;\n\n            var invalidArgs = $.extend({\n                errors: validationErrors\n            }, args);\n            this._callEventHandler(this.onItemInvalid, invalidArgs);\n            this.invalidNotify(invalidArgs);\n\n            return false;\n        },\n\n        _setCellValidity: function($cell, errors) {\n            $cell\n                .toggleClass(this.invalidClass, !!errors.length)\n                .attr(\"title\", errors.join(\"\\n\"));\n        },\n\n        clearInsert: function() {\n            var insertRow = this._createInsertRow();\n            this._insertRow.replaceWith(insertRow);\n            this._insertRow = insertRow;\n            this.refresh();\n        },\n\n        editItem: function(item) {\n            var $row = this.rowByItem(item);\n            if($row.length) {\n                this._editRow($row);\n            }\n        },\n\n        rowByItem: function(item) {\n            if(item.jquery || item.nodeType)\n                return $(item);\n\n            return this._content.find(\"tr\").filter(function() {\n                return $.data(this, JSGRID_ROW_DATA_KEY) === item;\n            });\n        },\n\n        _editRow: function($row) {\n            if(!this.editing)\n                return;\n\n            var item = $row.data(JSGRID_ROW_DATA_KEY);\n\n            var args = this._callEventHandler(this.onItemEditing, {\n                row: $row,\n                item: item,\n                itemIndex: this._itemIndex(item)\n            });\n\n            if(args.cancel)\n                return;\n\n            if(this._editingRow) {\n                this.cancelEdit();\n            }\n\n            var $editRow = this._createEditRow(item);\n\n            this._editingRow = $row;\n            $row.hide();\n            $editRow.insertBefore($row);\n            $row.data(JSGRID_EDIT_ROW_DATA_KEY, $editRow);\n        },\n\n        _createEditRow: function(item) {\n            if($.isFunction(this.editRowRenderer)) {\n                return $(this.renderTemplate(field.editRowRenderer, field, { item: item, itemIndex: this._itemIndex(item) }));\n            }\n\n            var $result = $(\"<tr>\").addClass(this.editRowClass);\n\n            this._eachField(function(field) {\n                var fieldValue = this._getItemFieldValue(item, field);\n\n                this._prepareCell(\"<td>\", field, \"editcss\")\n                    .append(this.renderTemplate(field.editTemplate || \"\", field, { value: fieldValue, item: item }))\n                    .appendTo($result);\n            });\n\n            return $result;\n        },\n\n        updateItem: function(item, editedItem) {\n            if(arguments.length === 1) {\n                editedItem = item;\n            }\n\n            var $row = item ? this.rowByItem(item) : this._editingRow;\n            editedItem = editedItem || this._getValidatedEditedItem();\n\n            if(!editedItem)\n                return;\n\n            return this._updateRow($row, editedItem);\n        },\n\n        _getValidatedEditedItem: function() {\n            var item = this._getEditedItem();\n            return this._validateItem(item, this._getEditRow()) ? item : null;\n        },\n\n        _updateRow: function($updatingRow, editedItem) {\n            var updatingItem = $updatingRow.data(JSGRID_ROW_DATA_KEY),\n                updatingItemIndex = this._itemIndex(updatingItem),\n                previousItem = $.extend(true, {}, updatingItem);\n\n            $.extend(true, updatingItem, editedItem);\n\n            var args = this._callEventHandler(this.onItemUpdating, {\n                row: $updatingRow,\n                item: updatingItem,\n                itemIndex: updatingItemIndex,\n                previousItem: previousItem\n            });\n\n            return this._controllerCall(\"updateItem\", updatingItem, args.cancel, function(updatedItem) {\n                updatedItem = updatedItem || updatingItem;\n                var $updatedRow = this._finishUpdate($updatingRow, updatedItem, updatingItemIndex);\n\n                this._callEventHandler(this.onItemUpdated, {\n                    row: $updatedRow,\n                    item: updatedItem,\n                    itemIndex: updatingItemIndex,\n                    previousItem: previousItem\n                });\n            });\n        },\n\n        _rowIndex: function(row) {\n            return this._content.children().index($(row));\n        },\n\n        _itemIndex: function(item) {\n            return $.inArray(item, this.data);\n        },\n\n        _finishUpdate: function($updatingRow, updatedItem, updatedItemIndex) {\n            this.cancelEdit();\n            this.data[updatedItemIndex] = updatedItem;\n\n            var $updatedRow = this._createRow(updatedItem, updatedItemIndex);\n            $updatingRow.replaceWith($updatedRow);\n            return $updatedRow;\n        },\n\n        _getEditedItem: function() {\n            var result = {};\n            this._eachField(function(field) {\n                if(field.editing) {\n                    this._setItemFieldValue(result, field, field.editValue());\n                }\n            });\n            return result;\n        },\n\n        cancelEdit: function() {\n            if(!this._editingRow)\n                return;\n\n            this._getEditRow().remove();\n            this._editingRow.show();\n            this._editingRow = null;\n        },\n\n        _getEditRow: function() {\n            return this._editingRow.data(JSGRID_EDIT_ROW_DATA_KEY);\n        },\n\n        deleteItem: function(item) {\n            var $row = this.rowByItem(item);\n\n            if(!$row.length)\n                return;\n\n            if(this.confirmDeleting && !window.confirm(getOrApply(this.deleteConfirm, this, $row.data(JSGRID_ROW_DATA_KEY))))\n                return;\n\n            return this._deleteRow($row);\n        },\n\n        _deleteRow: function($row) {\n            var deletingItem = $row.data(JSGRID_ROW_DATA_KEY),\n                deletingItemIndex = this._itemIndex(deletingItem);\n\n            var args = this._callEventHandler(this.onItemDeleting, {\n                row: $row,\n                item: deletingItem,\n                itemIndex: deletingItemIndex\n            });\n\n            return this._controllerCall(\"deleteItem\", deletingItem, args.cancel, function() {\n                this._loadStrategy.finishDelete(deletingItem, deletingItemIndex);\n\n                this._callEventHandler(this.onItemDeleted, {\n                    row: $row,\n                    item: deletingItem,\n                    itemIndex: deletingItemIndex\n                });\n            });\n        }\n    };\n\n    $.fn.jsGrid = function(config) {\n        var args = $.makeArray(arguments),\n            methodArgs = args.slice(1),\n            result = this;\n\n        this.each(function() {\n            var $element = $(this),\n                instance = $element.data(JSGRID_DATA_KEY),\n                methodResult;\n\n            if(instance) {\n                if(typeof config === \"string\") {\n                    methodResult = instance[config].apply(instance, methodArgs);\n                    if(methodResult !== undefined && methodResult !== instance) {\n                        result = methodResult;\n                        return false;\n                    }\n                } else {\n                    instance._detachWindowResizeCallback();\n                    instance._init(config);\n                    instance.render();\n                }\n            } else {\n                new Grid($element, config);\n            }\n        });\n\n        return result;\n    };\n\n    var fields = {};\n\n    var setDefaults = function(config) {\n        var componentPrototype;\n\n        if($.isPlainObject(config)) {\n            componentPrototype = Grid.prototype;\n        } else {\n            componentPrototype = fields[config].prototype;\n            config = arguments[1] || {};\n        }\n\n        $.extend(componentPrototype, config);\n    };\n\n    var locales = {};\n\n    var locale = function(lang) {\n        var localeConfig = $.isPlainObject(lang) ? lang : locales[lang];\n\n        if(!localeConfig)\n            throw Error(\"unknown locale \" + lang);\n\n        setLocale(jsGrid, localeConfig);\n    };\n\n    var setLocale = function(obj, localeConfig) {\n        $.each(localeConfig, function(field, value) {\n            if($.isPlainObject(value)) {\n                setLocale(obj[field] || obj[field[0].toUpperCase() + field.slice(1)], value);\n                return;\n            }\n\n            if(obj.hasOwnProperty(field)) {\n                obj[field] = value;\n            } else {\n                obj.prototype[field] = value;\n            }\n        });\n    };\n\n    window.jsGrid = {\n        Grid: Grid,\n        fields: fields,\n        setDefaults: setDefaults,\n        locales: locales,\n        locale: locale,\n        version: '1.5.1'\n    };\n\n}(window, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    function LoadIndicator(config) {\n        this._init(config);\n    }\n\n    LoadIndicator.prototype = {\n\n        container: \"body\",\n        message: \"Loading...\",\n        shading: true,\n\n        zIndex: 1000,\n        shaderClass: \"jsgrid-load-shader\",\n        loadPanelClass: \"jsgrid-load-panel\",\n\n        _init: function(config) {\n            $.extend(true, this, config);\n\n            this._initContainer();\n            this._initShader();\n            this._initLoadPanel();\n        },\n\n        _initContainer: function() {\n            this._container = $(this.container);\n        },\n\n        _initShader: function() {\n            if(!this.shading)\n                return;\n\n            this._shader = $(\"<div>\").addClass(this.shaderClass)\n                .hide()\n                .css({\n                    position: \"absolute\",\n                    top: 0,\n                    right: 0,\n                    bottom: 0,\n                    left: 0,\n                    zIndex: this.zIndex\n                })\n                .appendTo(this._container);\n        },\n\n        _initLoadPanel: function() {\n            this._loadPanel = $(\"<div>\").addClass(this.loadPanelClass)\n                .text(this.message)\n                .hide()\n                .css({\n                    position: \"absolute\",\n                    top: \"50%\",\n                    left: \"50%\",\n                    zIndex: this.zIndex\n                })\n                .appendTo(this._container);\n        },\n\n        show: function() {\n            var $loadPanel = this._loadPanel.show();\n\n            var actualWidth = $loadPanel.outerWidth();\n            var actualHeight = $loadPanel.outerHeight();\n\n            $loadPanel.css({\n                marginTop: -actualHeight / 2,\n                marginLeft: -actualWidth / 2\n            });\n\n            this._shader.show();\n        },\n\n        hide: function() {\n            this._loadPanel.hide();\n            this._shader.hide();\n        }\n\n    };\n\n    jsGrid.LoadIndicator = LoadIndicator;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    function DirectLoadingStrategy(grid) {\n        this._grid = grid;\n    }\n\n    DirectLoadingStrategy.prototype = {\n\n        firstDisplayIndex: function() {\n            var grid = this._grid;\n            return grid.option(\"paging\") ? (grid.option(\"pageIndex\") - 1) * grid.option(\"pageSize\") : 0;\n        },\n\n        lastDisplayIndex: function() {\n            var grid = this._grid;\n            var itemsCount = grid.option(\"data\").length;\n\n            return grid.option(\"paging\")\n                ? Math.min(grid.option(\"pageIndex\") * grid.option(\"pageSize\"), itemsCount)\n                : itemsCount;\n        },\n\n        itemsCount: function() {\n            return this._grid.option(\"data\").length;\n        },\n\n        openPage: function(index) {\n            this._grid.refresh();\n        },\n\n        loadParams: function() {\n            return {};\n        },\n\n        sort: function() {\n            this._grid._sortData();\n            this._grid.refresh();\n            return $.Deferred().resolve().promise();\n        },\n\n        reset: function() {\n            this._grid.refresh();\n            return $.Deferred().resolve().promise();\n        },\n\n        finishLoad: function(loadedData) {\n            this._grid.option(\"data\", loadedData);\n        },\n\n        finishInsert: function(insertedItem) {\n            var grid = this._grid;\n            grid.option(\"data\").push(insertedItem);\n            grid.refresh();\n        },\n\n        finishDelete: function(deletedItem, deletedItemIndex) {\n            var grid = this._grid;\n            grid.option(\"data\").splice(deletedItemIndex, 1);\n            grid.reset();\n        }\n    };\n\n\n    function PageLoadingStrategy(grid) {\n        this._grid = grid;\n        this._itemsCount = 0;\n    }\n\n    PageLoadingStrategy.prototype = {\n\n        firstDisplayIndex: function() {\n            return 0;\n        },\n\n        lastDisplayIndex: function() {\n            return this._grid.option(\"data\").length;\n        },\n\n        itemsCount: function() {\n            return this._itemsCount;\n        },\n\n        openPage: function(index) {\n            this._grid.loadData();\n        },\n\n        loadParams: function() {\n            var grid = this._grid;\n            return {\n                pageIndex: grid.option(\"pageIndex\"),\n                pageSize: grid.option(\"pageSize\")\n            };\n        },\n\n        reset: function() {\n            return this._grid.loadData();\n        },\n\n        sort: function() {\n            return this._grid.loadData();\n        },\n\n        finishLoad: function(loadedData) {\n            this._itemsCount = loadedData.itemsCount;\n            this._grid.option(\"data\", loadedData.data);\n        },\n\n        finishInsert: function(insertedItem) {\n            this._grid.search();\n        },\n\n        finishDelete: function(deletedItem, deletedItemIndex) {\n            this._grid.search();\n        }\n    };\n\n    jsGrid.loadStrategies = {\n        DirectLoadingStrategy: DirectLoadingStrategy,\n        PageLoadingStrategy: PageLoadingStrategy\n    };\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var isDefined = function(val) {\n        return typeof(val) !== \"undefined\" && val !== null;\n    };\n\n    var sortStrategies = {\n        string: function(str1, str2) {\n            if(!isDefined(str1) && !isDefined(str2))\n                return 0;\n\n            if(!isDefined(str1))\n                return -1;\n\n            if(!isDefined(str2))\n                return 1;\n\n            return (\"\" + str1).localeCompare(\"\" + str2);\n        },\n\n        number: function(n1, n2) {\n            return n1 - n2;\n        },\n\n        date: function(dt1, dt2) {\n            return dt1 - dt2;\n        },\n\n        numberAsString: function(n1, n2) {\n            return parseFloat(n1) - parseFloat(n2);\n        }\n    };\n\n    jsGrid.sortStrategies = sortStrategies;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    function Validation(config) {\n        this._init(config);\n    }\n\n    Validation.prototype = {\n\n        _init: function(config) {\n            $.extend(true, this, config);\n        },\n\n        validate: function(args) {\n            var errors = [];\n\n            $.each(this._normalizeRules(args.rules), function(_, rule) {\n                if(rule.validator(args.value, args.item, rule.param))\n                    return;\n\n                var errorMessage = $.isFunction(rule.message) ? rule.message(args.value, args.item) : rule.message;\n                errors.push(errorMessage);\n            });\n\n            return errors;\n        },\n\n        _normalizeRules: function(rules) {\n            if(!$.isArray(rules))\n                rules = [rules];\n\n            return $.map(rules, $.proxy(function(rule) {\n                return this._normalizeRule(rule);\n            }, this));\n        },\n\n        _normalizeRule: function(rule) {\n            if(typeof rule === \"string\")\n                rule = { validator: rule };\n\n            if($.isFunction(rule))\n                rule = { validator: rule };\n\n            if($.isPlainObject(rule))\n                rule = $.extend({}, rule);\n            else\n                throw Error(\"wrong validation config specified\");\n\n            if($.isFunction(rule.validator))\n                return rule;\n\n            return this._applyNamedValidator(rule, rule.validator);\n        },\n\n        _applyNamedValidator: function(rule, validatorName) {\n            delete rule.validator;\n\n            var validator = validators[validatorName];\n            if(!validator)\n                throw Error(\"unknown validator \\\"\" + validatorName + \"\\\"\");\n\n            if($.isFunction(validator)) {\n                validator = { validator: validator };\n            }\n\n            return $.extend({}, validator, rule);\n        }\n    };\n\n    jsGrid.Validation = Validation;\n\n\n    var validators = {\n        required: {\n            message: \"Field is required\",\n            validator: function(value) {\n                return value !== undefined && value !== null && value !== \"\";\n            }\n        },\n\n        rangeLength: {\n            message: \"Field value length is out of the defined range\",\n            validator: function(value, _, param) {\n                return value.length >= param[0] && value.length <= param[1];\n            }\n        },\n\n        minLength: {\n            message: \"Field value is too short\",\n            validator: function(value, _, param) {\n                return value.length >= param;\n            }\n        },\n\n        maxLength: {\n            message: \"Field value is too long\",\n            validator: function(value, _, param) {\n                return value.length <= param;\n            }\n        },\n\n        pattern: {\n            message: \"Field value is not matching the defined pattern\",\n            validator: function(value, _, param) {\n                if(typeof param === \"string\") {\n                    param = new RegExp(\"^(?:\" + param + \")$\");\n                }\n                return param.test(value);\n            }\n        },\n\n        range: {\n            message: \"Field value is out of the defined range\",\n            validator: function(value, _, param) {\n                return value >= param[0] && value <= param[1];\n            }\n        },\n\n        min: {\n            message: \"Field value is too small\",\n            validator: function(value, _, param) {\n                return value >= param;\n            }\n        },\n\n        max: {\n            message: \"Field value is too large\",\n            validator: function(value, _, param) {\n                return value <= param;\n            }\n        }\n    };\n\n    jsGrid.validators = validators;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    function Field(config) {\n        $.extend(true, this, config);\n        this.sortingFunc = this._getSortingFunc();\n    }\n\n    Field.prototype = {\n        name: \"\",\n        title: null,\n        css: \"\",\n        align: \"\",\n        width: 100,\n\n        visible: true,\n        filtering: true,\n        inserting: true,\n        editing: true,\n        sorting: true,\n        sorter: \"string\", // name of SortStrategy or function to compare elements\n\n        headerTemplate: function() {\n            return (this.title === undefined || this.title === null) ? this.name : this.title;\n        },\n\n        itemTemplate: function(value, item) {\n            return value;\n        },\n\n        filterTemplate: function() {\n            return \"\";\n        },\n\n        insertTemplate: function() {\n            return \"\";\n        },\n\n        editTemplate: function(value, item) {\n            this._value = value;\n            return this.itemTemplate(value, item);\n        },\n\n        filterValue: function() {\n            return \"\";\n        },\n\n        insertValue: function() {\n            return \"\";\n        },\n\n        editValue: function() {\n            return this._value;\n        },\n\n        _getSortingFunc: function() {\n            var sorter = this.sorter;\n\n            if($.isFunction(sorter)) {\n                return sorter;\n            }\n\n            if(typeof sorter === \"string\") {\n                return jsGrid.sortStrategies[sorter];\n            }\n\n            throw Error(\"wrong sorter for the field \\\"\" + this.name + \"\\\"!\");\n        }\n    };\n\n    jsGrid.Field = Field;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var Field = jsGrid.Field;\n\n    function TextField(config) {\n        Field.call(this, config);\n    }\n\n    TextField.prototype = new Field({\n\n        autosearch: true,\n\t\treadOnly: false,\n\n        filterTemplate: function() {\n            if(!this.filtering)\n                return \"\";\n\n            var grid = this._grid,\n                $result = this.filterControl = this._createTextBox();\n\n            if(this.autosearch) {\n                $result.on(\"keypress\", function(e) {\n                    if(e.which === 13) {\n                        grid.search();\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            return $result;\n        },\n\n        insertTemplate: function() {\n            if(!this.inserting)\n                return \"\";\n\n            return this.insertControl = this._createTextBox();\n        },\n\n        editTemplate: function(value) {\n            if(!this.editing)\n                return this.itemTemplate(value);\n\n            var $result = this.editControl = this._createTextBox();\n            $result.val(value);\n            return $result;\n        },\n\n        filterValue: function() {\n            return this.filterControl.val();\n        },\n\n        insertValue: function() {\n            return this.insertControl.val();\n        },\n\n        editValue: function() {\n            return this.editControl.val();\n        },\n\n        _createTextBox: function() {\n            return $(\"<input>\").attr(\"type\", \"text\")\n                .prop(\"readonly\", !!this.readOnly);\n        }\n    });\n\n    jsGrid.fields.text = jsGrid.TextField = TextField;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var TextField = jsGrid.TextField;\n\n    function NumberField(config) {\n        TextField.call(this, config);\n    }\n\n    NumberField.prototype = new TextField({\n\n        sorter: \"number\",\n        align: \"right\",\n\t\treadOnly: false,\n\n        filterValue: function() {\n            return parseInt(this.filterControl.val() || 0, 10);\n        },\n\n        insertValue: function() {\n            return parseInt(this.insertControl.val() || 0, 10);\n        },\n\n        editValue: function() {\n            return parseInt(this.editControl.val() || 0, 10);\n        },\n\n        _createTextBox: function() {\n\t\t\treturn $(\"<input>\").attr(\"type\", \"number\")\n                .prop(\"readonly\", !!this.readOnly);\n        }\n    });\n\n    jsGrid.fields.number = jsGrid.NumberField = NumberField;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var TextField = jsGrid.TextField;\n\n    function TextAreaField(config) {\n        TextField.call(this, config);\n    }\n\n    TextAreaField.prototype = new TextField({\n\n        insertTemplate: function() {\n            if(!this.inserting)\n                return \"\";\n\n            return this.insertControl = this._createTextArea();\n        },\n\n        editTemplate: function(value) {\n            if(!this.editing)\n                return this.itemTemplate(value);\n\n            var $result = this.editControl = this._createTextArea();\n            $result.val(value);\n            return $result;\n        },\n\n        _createTextArea: function() {\n            return $(\"<textarea>\").prop(\"readonly\", !!this.readOnly);\n        }\n    });\n\n    jsGrid.fields.textarea = jsGrid.TextAreaField = TextAreaField;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var NumberField = jsGrid.NumberField;\n    var numberValueType = \"number\";\n    var stringValueType = \"string\";\n\n    function SelectField(config) {\n        this.items = [];\n        this.selectedIndex = -1;\n        this.valueField = \"\";\n        this.textField = \"\";\n\n        if(config.valueField && config.items.length) {\n            var firstItemValue = config.items[0][config.valueField];\n            this.valueType = (typeof firstItemValue) === numberValueType ? numberValueType : stringValueType;\n        }\n\n        this.sorter = this.valueType;\n\n        NumberField.call(this, config);\n    }\n\n    SelectField.prototype = new NumberField({\n\n        align: \"center\",\n        valueType: numberValueType,\n\n        itemTemplate: function(value) {\n            var items = this.items,\n                valueField = this.valueField,\n                textField = this.textField,\n                resultItem;\n\n            if(valueField) {\n                resultItem = $.grep(items, function(item, index) {\n                    return item[valueField] === value;\n                })[0] || {};\n            }\n            else {\n                resultItem = items[value];\n            }\n\n            var result = (textField ? resultItem[textField] : resultItem);\n\n            return (result === undefined || result === null) ? \"\" : result;\n        },\n\n        filterTemplate: function() {\n            if(!this.filtering)\n                return \"\";\n\n            var grid = this._grid,\n                $result = this.filterControl = this._createSelect();\n\n            if(this.autosearch) {\n                $result.on(\"change\", function(e) {\n                    grid.search();\n                });\n            }\n\n            return $result;\n        },\n\n        insertTemplate: function() {\n            if(!this.inserting)\n                return \"\";\n\n            return this.insertControl = this._createSelect();\n        },\n\n        editTemplate: function(value) {\n            if(!this.editing)\n                return this.itemTemplate(value);\n\n            var $result = this.editControl = this._createSelect();\n            (value !== undefined) && $result.val(value);\n            return $result;\n        },\n\n        filterValue: function() {\n            var val = this.filterControl.val();\n            return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;\n        },\n\n        insertValue: function() {\n            var val = this.insertControl.val();\n            return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;\n        },\n\n        editValue: function() {\n            var val = this.editControl.val();\n            return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;\n        },\n\n        _createSelect: function() {\n            var $result = $(\"<select>\"),\n                valueField = this.valueField,\n                textField = this.textField,\n                selectedIndex = this.selectedIndex;\n\n            $.each(this.items, function(index, item) {\n                var value = valueField ? item[valueField] : index,\n                    text = textField ? item[textField] : item;\n\n                var $option = $(\"<option>\")\n                    .attr(\"value\", value)\n                    .text(text)\n                    .appendTo($result);\n\n                $option.prop(\"selected\", (selectedIndex === index));\n            });\n\n            $result.prop(\"disabled\", !!this.readOnly);\n\n            return $result;\n        }\n    });\n\n    jsGrid.fields.select = jsGrid.SelectField = SelectField;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var Field = jsGrid.Field;\n\n    function CheckboxField(config) {\n        Field.call(this, config);\n    }\n\n    CheckboxField.prototype = new Field({\n\n        sorter: \"number\",\n        align: \"center\",\n        autosearch: true,\n\n        itemTemplate: function(value) {\n            return this._createCheckbox().prop({\n                checked: value,\n                disabled: true\n            });\n        },\n\n        filterTemplate: function() {\n            if(!this.filtering)\n                return \"\";\n\n            var grid = this._grid,\n                $result = this.filterControl = this._createCheckbox();\n\n            $result.prop({\n                readOnly: true,\n                indeterminate: true\n            });\n\n            $result.on(\"click\", function() {\n                var $cb = $(this);\n\n                if($cb.prop(\"readOnly\")) {\n                    $cb.prop({\n                        checked: false,\n                        readOnly: false\n                    });\n                }\n                else if(!$cb.prop(\"checked\")) {\n                    $cb.prop({\n                        readOnly: true,\n                        indeterminate: true\n                    });\n                }\n            });\n\n            if(this.autosearch) {\n                $result.on(\"click\", function() {\n                    grid.search();\n                });\n            }\n\n            return $result;\n        },\n\n        insertTemplate: function() {\n            if(!this.inserting)\n                return \"\";\n\n            return this.insertControl = this._createCheckbox();\n        },\n\n        editTemplate: function(value) {\n            if(!this.editing)\n                return this.itemTemplate(value);\n\n            var $result = this.editControl = this._createCheckbox();\n            $result.prop(\"checked\", value);\n            return $result;\n        },\n\n        filterValue: function() {\n            return this.filterControl.get(0).indeterminate\n                ? undefined\n                : this.filterControl.is(\":checked\");\n        },\n\n        insertValue: function() {\n            return this.insertControl.is(\":checked\");\n        },\n\n        editValue: function() {\n            return this.editControl.is(\":checked\");\n        },\n\n        _createCheckbox: function() {\n            return $(\"<input>\").attr(\"type\", \"checkbox\");\n        }\n    });\n\n    jsGrid.fields.checkbox = jsGrid.CheckboxField = CheckboxField;\n\n}(jsGrid, jQuery));\n\n(function(jsGrid, $, undefined) {\n\n    var Field = jsGrid.Field;\n\n    function ControlField(config) {\n        Field.call(this, config);\n        this._configInitialized = false;\n    }\n\n    ControlField.prototype = new Field({\n        css: \"jsgrid-control-field\",\n        align: \"center\",\n        width: 50,\n        filtering: false,\n        inserting: false,\n        editing: false,\n        sorting: false,\n\n        buttonClass: \"jsgrid-button\",\n        modeButtonClass: \"jsgrid-mode-button\",\n\n        modeOnButtonClass: \"jsgrid-mode-on-button\",\n        searchModeButtonClass: \"jsgrid-search-mode-button\",\n        insertModeButtonClass: \"jsgrid-insert-mode-button\",\n        editButtonClass: \"jsgrid-edit-button\",\n        deleteButtonClass: \"jsgrid-delete-button\",\n        searchButtonClass: \"jsgrid-search-button\",\n        clearFilterButtonClass: \"jsgrid-clear-filter-button\",\n        insertButtonClass: \"jsgrid-insert-button\",\n        updateButtonClass: \"jsgrid-update-button\",\n        cancelEditButtonClass: \"jsgrid-cancel-edit-button\",\n\n        searchModeButtonTooltip: \"Switch to searching\",\n        insertModeButtonTooltip: \"Switch to inserting\",\n        editButtonTooltip: \"Edit\",\n        deleteButtonTooltip: \"Delete\",\n        searchButtonTooltip: \"Search\",\n        clearFilterButtonTooltip: \"Clear filter\",\n        insertButtonTooltip: \"Insert\",\n        updateButtonTooltip: \"Update\",\n        cancelEditButtonTooltip: \"Cancel edit\",\n\n        editButton: true,\n        deleteButton: true,\n        clearFilterButton: true,\n        modeSwitchButton: true,\n\n        _initConfig: function() {\n            this._hasFiltering = this._grid.filtering;\n            this._hasInserting = this._grid.inserting;\n\n            if(this._hasInserting && this.modeSwitchButton) {\n                this._grid.inserting = false;\n            }\n\n            this._configInitialized = true;\n        },\n\n        headerTemplate: function() {\n            if(!this._configInitialized) {\n                this._initConfig();\n            }\n\n            var hasFiltering = this._hasFiltering;\n            var hasInserting = this._hasInserting;\n\n            if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))\n                return \"\";\n\n            if(hasFiltering && !hasInserting)\n                return this._createFilterSwitchButton();\n\n            if(hasInserting && !hasFiltering)\n                return this._createInsertSwitchButton();\n\n            return this._createModeSwitchButton();\n        },\n\n        itemTemplate: function(value, item) {\n            var $result = $([]);\n\n            if(this.editButton) {\n                $result = $result.add(this._createEditButton(item));\n            }\n\n            if(this.deleteButton) {\n                $result = $result.add(this._createDeleteButton(item));\n            }\n\n            return $result;\n        },\n\n        filterTemplate: function() {\n            var $result = this._createSearchButton();\n            return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;\n        },\n\n        insertTemplate: function() {\n            return this._createInsertButton();\n        },\n\n        editTemplate: function() {\n            return this._createUpdateButton().add(this._createCancelEditButton());\n        },\n\n        _createFilterSwitchButton: function() {\n            return this._createOnOffSwitchButton(\"filtering\", this.searchModeButtonClass, true);\n        },\n\n        _createInsertSwitchButton: function() {\n            return this._createOnOffSwitchButton(\"inserting\", this.insertModeButtonClass, false);\n        },\n\n        _createOnOffSwitchButton: function(option, cssClass, isOnInitially) {\n            var isOn = isOnInitially;\n\n            var updateButtonState = $.proxy(function() {\n                $button.toggleClass(this.modeOnButtonClass, isOn);\n            }, this);\n\n            var $button = this._createGridButton(this.modeButtonClass + \" \" + cssClass, \"\", function(grid) {\n                isOn = !isOn;\n                grid.option(option, isOn);\n                updateButtonState();\n            });\n\n            updateButtonState();\n\n            return $button;\n        },\n\n        _createModeSwitchButton: function() {\n            var isInserting = false;\n\n            var updateButtonState = $.proxy(function() {\n                $button.attr(\"title\", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)\n                    .toggleClass(this.insertModeButtonClass, !isInserting)\n                    .toggleClass(this.searchModeButtonClass, isInserting);\n            }, this);\n\n            var $button = this._createGridButton(this.modeButtonClass, \"\", function(grid) {\n                isInserting = !isInserting;\n                grid.option(\"inserting\", isInserting);\n                grid.option(\"filtering\", !isInserting);\n                updateButtonState();\n            });\n\n            updateButtonState();\n\n            return $button;\n        },\n\n        _createEditButton: function(item) {\n            return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {\n                grid.editItem(item);\n                e.stopPropagation();\n            });\n        },\n\n        _createDeleteButton: function(item) {\n            return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {\n                grid.deleteItem(item);\n                e.stopPropagation();\n            });\n        },\n\n        _createSearchButton: function() {\n            return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {\n                grid.search();\n            });\n        },\n\n        _createClearFilterButton: function() {\n            return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {\n                grid.clearFilter();\n            });\n        },\n\n        _createInsertButton: function() {\n            return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {\n                grid.insertItem().done(function() {\n                    grid.clearInsert();\n                });\n            });\n        },\n\n        _createUpdateButton: function() {\n            return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {\n                grid.updateItem();\n                e.stopPropagation();\n            });\n        },\n\n        _createCancelEditButton: function() {\n            return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {\n                grid.cancelEdit();\n                e.stopPropagation();\n            });\n        },\n\n        _createGridButton: function(cls, tooltip, clickHandler) {\n            var grid = this._grid;\n\n            return $(\"<input>\").addClass(this.buttonClass)\n                .addClass(cls)\n                .attr({\n                    type: \"button\",\n                    title: tooltip\n                })\n                .on(\"click\", function(e) {\n                    clickHandler(grid, e);\n                });\n        },\n\n        editValue: function() {\n            return \"\";\n        }\n\n    });\n\n    jsGrid.fields.control = jsGrid.ControlField = ControlField;\n\n}(jsGrid, jQuery));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jstree/ajax_children.json",
    "content": "[\"Child 1\", { \"text\" : \"Child 2\", \"children\" : [\"One more\"] }]"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jstree/ajax_roots.json",
    "content": "[\n  { \"text\" : \"Root 1\", \"children\" : true },\n  { \"text\" : \"Root 2\", \"children\" : true },\n  { \"text\" : \"Root 3\", \"children\" : true },\n  { \"text\" : \"Root 4\", \"children\" : true },\n  { \"text\" : \"Root 5\", \"children\" : true },\n  { \"text\" : \"Root 6\", \"children\" : false }\n]"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jstree/jstree.js",
    "content": "/*globals jQuery, define, module, exports, require, window, document, postMessage */\n(function (factory) {\n\t\"use strict\";\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery'], factory);\n\t}\n\telse if(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = factory(require('jquery'));\n\t}\n\telse {\n\t\tfactory(jQuery);\n\t}\n}(function ($, undefined) {\n\t\"use strict\";\n/*!\n * jsTree 3.2.1\n * http://jstree.com/\n *\n * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)\n *\n * Licensed same as jquery - under the terms of the MIT License\n *   http://www.opensource.org/licenses/mit-license.php\n */\n/*!\n * if using jslint please allow for the jQuery global and use following options:\n * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true\n */\n/*jshint -W083 */\n\n\t// prevent another load? maybe there is a better way?\n\tif($.jstree) {\n\t\treturn;\n\t}\n\n\t/**\n\t * ### jsTree core functionality\n\t */\n\n\t// internal variables\n\tvar instance_counter = 0,\n\t\tccp_node = false,\n\t\tccp_mode = false,\n\t\tccp_inst = false,\n\t\tthemes_loaded = [],\n\t\tsrc = $('script:last').attr('src'),\n\t\tdocument = window.document, // local variable is always faster to access then a global\n\t\t_node = document.createElement('LI'), _temp1, _temp2;\n\n\t_node.setAttribute('role', 'treeitem');\n\t_temp1 = document.createElement('I');\n\t_temp1.className = 'jstree-icon jstree-ocl';\n\t_temp1.setAttribute('role', 'presentation');\n\t_node.appendChild(_temp1);\n\t_temp1 = document.createElement('A');\n\t_temp1.className = 'jstree-anchor';\n\t_temp1.setAttribute('href','#');\n\t_temp1.setAttribute('tabindex','-1');\n\t_temp2 = document.createElement('I');\n\t_temp2.className = 'jstree-icon jstree-themeicon';\n\t_temp2.setAttribute('role', 'presentation');\n\t_temp1.appendChild(_temp2);\n\t_node.appendChild(_temp1);\n\t_temp1 = _temp2 = null;\n\n\n\t/**\n\t * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.\n\t * @name $.jstree\n\t */\n\t$.jstree = {\n\t\t/**\n\t\t * specifies the jstree version in use\n\t\t * @name $.jstree.version\n\t\t */\n\t\tversion : '3.2.1',\n\t\t/**\n\t\t * holds all the default options used when creating new instances\n\t\t * @name $.jstree.defaults\n\t\t */\n\t\tdefaults : {\n\t\t\t/**\n\t\t\t * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`\n\t\t\t * @name $.jstree.defaults.plugins\n\t\t\t */\n\t\t\tplugins : []\n\t\t},\n\t\t/**\n\t\t * stores all loaded jstree plugins (used internally)\n\t\t * @name $.jstree.plugins\n\t\t */\n\t\tplugins : {},\n\t\tpath : src && src.indexOf('/') !== -1 ? src.replace(/\\/[^\\/]+$/,'') : '',\n\t\tidregex : /[\\\\:&!^|()\\[\\]<>@*'+~#\";.,=\\- \\/${}%?`]/g,\n\t\troot : '#'\n\t};\n\t/**\n\t * creates a jstree instance\n\t * @name $.jstree.create(el [, options])\n\t * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector\n\t * @param {Object} options options for this instance (extends `$.jstree.defaults`)\n\t * @return {jsTree} the new instance\n\t */\n\t$.jstree.create = function (el, options) {\n\t\tvar tmp = new $.jstree.core(++instance_counter),\n\t\t\topt = options;\n\t\toptions = $.extend(true, {}, $.jstree.defaults, options);\n\t\tif(opt && opt.plugins) {\n\t\t\toptions.plugins = opt.plugins;\n\t\t}\n\t\t$.each(options.plugins, function (i, k) {\n\t\t\tif(i !== 'core') {\n\t\t\t\ttmp = tmp.plugin(k, options[k]);\n\t\t\t}\n\t\t});\n\t\t$(el).data('jstree', tmp);\n\t\ttmp.init(el, options);\n\t\treturn tmp;\n\t};\n\t/**\n\t * remove all traces of jstree from the DOM and destroy all instances\n\t * @name $.jstree.destroy()\n\t */\n\t$.jstree.destroy = function () {\n\t\t$('.jstree:jstree').jstree('destroy');\n\t\t$(document).off('.jstree');\n\t};\n\t/**\n\t * the jstree class constructor, used only internally\n\t * @private\n\t * @name $.jstree.core(id)\n\t * @param {Number} id this instance's index\n\t */\n\t$.jstree.core = function (id) {\n\t\tthis._id = id;\n\t\tthis._cnt = 0;\n\t\tthis._wrk = null;\n\t\tthis._data = {\n\t\t\tcore : {\n\t\t\t\tthemes : {\n\t\t\t\t\tname : false,\n\t\t\t\t\tdots : false,\n\t\t\t\t\ticons : false\n\t\t\t\t},\n\t\t\t\tselected : [],\n\t\t\t\tlast_error : {},\n\t\t\t\tworking : false,\n\t\t\t\tworker_queue : [],\n\t\t\t\tfocused : null\n\t\t\t}\n\t\t};\n\t};\n\t/**\n\t * get a reference to an existing instance\n\t *\n\t * __Examples__\n\t *\n\t *\t// provided a container with an ID of \"tree\", and a nested node with an ID of \"branch\"\n\t *\t// all of there will return the same instance\n\t *\t$.jstree.reference('tree');\n\t *\t$.jstree.reference('#tree');\n\t *\t$.jstree.reference($('#tree'));\n\t *\t$.jstree.reference(document.getElementByID('tree'));\n\t *\t$.jstree.reference('branch');\n\t *\t$.jstree.reference('#branch');\n\t *\t$.jstree.reference($('#branch'));\n\t *\t$.jstree.reference(document.getElementByID('branch'));\n\t *\n\t * @name $.jstree.reference(needle)\n\t * @param {DOMElement|jQuery|String} needle\n\t * @return {jsTree|null} the instance or `null` if not found\n\t */\n\t$.jstree.reference = function (needle) {\n\t\tvar tmp = null,\n\t\t\tobj = null;\n\t\tif(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }\n\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $(needle); } catch (ignore) { }\n\t\t}\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $('#' + needle.replace($.jstree.idregex,'\\\\$&')); } catch (ignore) { }\n\t\t}\n\t\tif(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {\n\t\t\ttmp = obj;\n\t\t}\n\t\telse {\n\t\t\t$('.jstree').each(function () {\n\t\t\t\tvar inst = $(this).data('jstree');\n\t\t\t\tif(inst && inst._model.data[needle]) {\n\t\t\t\t\ttmp = inst;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn tmp;\n\t};\n\t/**\n\t * Create an instance, get an instance or invoke a command on a instance.\n\t *\n\t * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).\n\t *\n\t * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).\n\t *\n\t * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).\n\t *\n\t * In any other case - nothing is returned and chaining is not broken.\n\t *\n\t * __Examples__\n\t *\n\t *\t$('#tree1').jstree(); // creates an instance\n\t *\t$('#tree2').jstree({ plugins : [] }); // create an instance with some options\n\t *\t$('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments\n\t *\t$('#tree2').jstree(); // get an existing instance (or create an instance)\n\t *\t$('#tree2').jstree(true); // get an existing instance (will not create new instance)\n\t *\t$('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)\n\t *\n\t * @name $().jstree([arg])\n\t * @param {String|Object} arg\n\t * @return {Mixed}\n\t */\n\t$.fn.jstree = function (arg) {\n\t\t// check for string argument\n\t\tvar is_method\t= (typeof arg === 'string'),\n\t\t\targs\t\t= Array.prototype.slice.call(arguments, 1),\n\t\t\tresult\t\t= null;\n\t\tif(arg === true && !this.length) { return false; }\n\t\tthis.each(function () {\n\t\t\t// get the instance (if there is one) and method (if it exists)\n\t\t\tvar instance = $.jstree.reference(this),\n\t\t\t\tmethod = is_method && instance ? instance[arg] : null;\n\t\t\t// if calling a method, and method is available - execute on the instance\n\t\t\tresult = is_method && method ?\n\t\t\t\tmethod.apply(instance, args) :\n\t\t\t\tnull;\n\t\t\t// if there is no instance and no method is being called - create one\n\t\t\tif(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {\n\t\t\t\t$.jstree.create(this, arg);\n\t\t\t}\n\t\t\t// if there is an instance and no method is called - return the instance\n\t\t\tif( (instance && !is_method) || arg === true ) {\n\t\t\t\tresult = instance || false;\n\t\t\t}\n\t\t\t// if there was a method call which returned a result - break and return the value\n\t\t\tif(result !== null && result !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t// if there was a method call with a valid return value - return that, otherwise continue the chain\n\t\treturn result !== null && result !== undefined ?\n\t\t\tresult : this;\n\t};\n\t/**\n\t * used to find elements containing an instance\n\t *\n\t * __Examples__\n\t *\n\t *\t$('div:jstree').each(function () {\n\t *\t\t$(this).jstree('destroy');\n\t *\t});\n\t *\n\t * @name $(':jstree')\n\t * @return {jQuery}\n\t */\n\t$.expr[':'].jstree = $.expr.createPseudo(function(search) {\n\t\treturn function(a) {\n\t\t\treturn $(a).hasClass('jstree') &&\n\t\t\t\t$(a).data('jstree') !== undefined;\n\t\t};\n\t});\n\n\t/**\n\t * stores all defaults for the core\n\t * @name $.jstree.defaults.core\n\t */\n\t$.jstree.defaults.core = {\n\t\t/**\n\t\t * data configuration\n\t\t *\n\t\t * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).\n\t\t *\n\t\t * You can also pass in a HTML string or a JSON array here.\n\t\t *\n\t\t * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.\n\t\t * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.\n\t\t *\n\t\t * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t// AJAX\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : {\n\t\t *\t\t\t\t'url' : '/get/children/',\n\t\t *\t\t\t\t'data' : function (node) {\n\t\t *\t\t\t\t\treturn { 'id' : node.id };\n\t\t *\t\t\t\t}\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t *\t// direct data\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : [\n\t\t *\t\t\t\t'Simple root node',\n\t\t *\t\t\t\t{\n\t\t *\t\t\t\t\t'id' : 'node_2',\n\t\t *\t\t\t\t\t'text' : 'Root node with options',\n\t\t *\t\t\t\t\t'state' : { 'opened' : true, 'selected' : true },\n\t\t *\t\t\t\t\t'children' : [ { 'text' : 'Child 1' }, 'Child 2']\n\t\t *\t\t\t\t}\n\t\t *\t\t\t]\n\t\t *\t\t});\n\t\t *\n\t\t *\t// function\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : function (obj, callback) {\n\t\t *\t\t\t\tcallback.call(this, ['Root 1', 'Root 2']);\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.data\n\t\t */\n\t\tdata\t\t\t: false,\n\t\t/**\n\t\t * configure the various strings used throughout the tree\n\t\t *\n\t\t * You can use an object where the key is the string you need to replace and the value is your replacement.\n\t\t * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.\n\t\t * If left as `false` no replacement is made.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'strings' : {\n\t\t *\t\t\t\t'Loading ...' : 'Please wait ...'\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.strings\n\t\t */\n\t\tstrings\t\t\t: false,\n\t\t/**\n\t\t * determines what happens when a user tries to modify the structure of the tree\n\t\t * If left as `false` all operations like create, rename, delete, move or copy are prevented.\n\t\t * You can set this to `true` to allow all interactions or use a function to have better control.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'check_callback' : function (operation, node, node_parent, node_position, more) {\n\t\t *\t\t\t\t// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'\n\t\t *\t\t\t\t// in case of 'rename_node' node_position is filled with the new node name\n\t\t *\t\t\t\treturn operation === 'rename_node' ? true : false;\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.check_callback\n\t\t */\n\t\tcheck_callback\t: false,\n\t\t/**\n\t\t * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)\n\t\t * @name $.jstree.defaults.core.error\n\t\t */\n\t\terror\t\t\t: $.noop,\n\t\t/**\n\t\t * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)\n\t\t * @name $.jstree.defaults.core.animation\n\t\t */\n\t\tanimation\t\t: 200,\n\t\t/**\n\t\t * a boolean indicating if multiple nodes can be selected\n\t\t * @name $.jstree.defaults.core.multiple\n\t\t */\n\t\tmultiple\t\t: true,\n\t\t/**\n\t\t * theme configuration object\n\t\t * @name $.jstree.defaults.core.themes\n\t\t */\n\t\tthemes\t\t\t: {\n\t\t\t/**\n\t\t\t * the name of the theme to use (if left as `false` the default theme is used)\n\t\t\t * @name $.jstree.defaults.core.themes.name\n\t\t\t */\n\t\t\tname\t\t\t: false,\n\t\t\t/**\n\t\t\t * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.\n\t\t\t * @name $.jstree.defaults.core.themes.url\n\t\t\t */\n\t\t\turl\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * the location of all jstree themes - only used if `url` is set to `true`\n\t\t\t * @name $.jstree.defaults.core.themes.dir\n\t\t\t */\n\t\t\tdir\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean indicating if connecting dots are shown\n\t\t\t * @name $.jstree.defaults.core.themes.dots\n\t\t\t */\n\t\t\tdots\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if node icons are shown\n\t\t\t * @name $.jstree.defaults.core.themes.icons\n\t\t\t */\n\t\t\ticons\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if the tree background is striped\n\t\t\t * @name $.jstree.defaults.core.themes.stripes\n\t\t\t */\n\t\t\tstripes\t\t\t: false,\n\t\t\t/**\n\t\t\t * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)\n\t\t\t * @name $.jstree.defaults.core.themes.variant\n\t\t\t */\n\t\t\tvariant\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.\n\t\t\t * @name $.jstree.defaults.core.themes.responsive\n\t\t\t */\n\t\t\tresponsive\t\t: false\n\t\t},\n\t\t/**\n\t\t * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)\n\t\t * @name $.jstree.defaults.core.expand_selected_onload\n\t\t */\n\t\texpand_selected_onload : true,\n\t\t/**\n\t\t * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.worker\n\t\t */\n\t\tworker : true,\n\t\t/**\n\t\t * Force node text to plain text (and escape HTML). Defaults to `false`\n\t\t * @name $.jstree.defaults.core.force_text\n\t\t */\n\t\tforce_text : false,\n\t\t/**\n\t\t * Should the node should be toggled if the text is double clicked . Defaults to `true`\n\t\t * @name $.jstree.defaults.core.dblclick_toggle\n\t\t */\n\t\tdblclick_toggle : true\n\t};\n\t$.jstree.core.prototype = {\n\t\t/**\n\t\t * used to decorate an instance with a plugin. Used internally.\n\t\t * @private\n\t\t * @name plugin(deco [, opts])\n\t\t * @param  {String} deco the plugin to decorate with\n\t\t * @param  {Object} opts options for the plugin\n\t\t * @return {jsTree}\n\t\t */\n\t\tplugin : function (deco, opts) {\n\t\t\tvar Child = $.jstree.plugins[deco];\n\t\t\tif(Child) {\n\t\t\t\tthis._data[deco] = {};\n\t\t\t\tChild.prototype = this;\n\t\t\t\treturn new Child(opts, this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t/**\n\t\t * initialize the instance. Used internally.\n\t\t * @private\n\t\t * @name init(el, optons)\n\t\t * @param {DOMElement|jQuery|String} el the element we are transforming\n\t\t * @param {Object} options options for this instance\n\t\t * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree\n\t\t */\n\t\tinit : function (el, options) {\n\t\t\tthis._model = {\n\t\t\t\tdata : {},\n\t\t\t\tchanged : [],\n\t\t\t\tforce_full_redraw : false,\n\t\t\t\tredraw_timeout : false,\n\t\t\t\tdefault_state : {\n\t\t\t\t\tloaded : true,\n\t\t\t\t\topened : false,\n\t\t\t\t\tselected : false,\n\t\t\t\t\tdisabled : false\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\n\t\t\tthis.element = $(el).addClass('jstree jstree-' + this._id);\n\t\t\tthis.settings = options;\n\n\t\t\tthis._data.core.ready = false;\n\t\t\tthis._data.core.loaded = false;\n\t\t\tthis._data.core.rtl = (this.element.css(\"direction\") === \"rtl\");\n\t\t\tthis.element[this._data.core.rtl ? 'addClass' : 'removeClass'](\"jstree-rtl\");\n\t\t\tthis.element.attr('role','tree');\n\t\t\tif(this.settings.core.multiple) {\n\t\t\t\tthis.element.attr('aria-multiselectable', true);\n\t\t\t}\n\t\t\tif(!this.element.attr('tabindex')) {\n\t\t\t\tthis.element.attr('tabindex','0');\n\t\t\t}\n\n\t\t\tthis.bind();\n\t\t\t/**\n\t\t\t * triggered after all events are bound\n\t\t\t * @event\n\t\t\t * @name init.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"init\");\n\n\t\t\tthis._data.core.original_container_html = this.element.find(\" > ul > li\").clone(true);\n\t\t\tthis._data.core.original_container_html\n\t\t\t\t.find(\"li\").addBack()\n\t\t\t\t.contents().filter(function() {\n\t\t\t\t\treturn this.nodeType === 3 && (!this.nodeValue || /^\\s+$/.test(this.nodeValue));\n\t\t\t\t})\n\t\t\t\t.remove();\n\t\t\tthis.element.html(\"<\"+\"ul class='jstree-container-ul jstree-children' role='group'><\"+\"li id='j\"+this._id+\"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\tthis.element.attr('aria-activedescendant','j' + this._id + '_loading');\n\t\t\tthis._data.core.li_height = this.get_container_ul().children(\"li\").first().height() || 24;\n\t\t\t/**\n\t\t\t * triggered after the loading text is shown and before loading starts\n\t\t\t * @event\n\t\t\t * @name loading.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"loading\");\n\t\t\tthis.load_node($.jstree.root);\n\t\t},\n\t\t/**\n\t\t * destroy an instance\n\t\t * @name destroy()\n\t\t * @param  {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact\n\t\t */\n\t\tdestroy : function (keep_html) {\n\t\t\tif(this._wrk) {\n\t\t\t\ttry {\n\t\t\t\t\twindow.URL.revokeObjectURL(this._wrk);\n\t\t\t\t\tthis._wrk = null;\n\t\t\t\t}\n\t\t\t\tcatch (ignore) { }\n\t\t\t}\n\t\t\tif(!keep_html) { this.element.empty(); }\n\t\t\tthis.teardown();\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name teardown()\n\t\t */\n\t\tteardown : function () {\n\t\t\tthis.unbind();\n\t\t\tthis.element\n\t\t\t\t.removeClass('jstree')\n\t\t\t\t.removeData('jstree')\n\t\t\t\t.find(\"[class^='jstree']\")\n\t\t\t\t\t.addBack()\n\t\t\t\t\t.attr(\"class\", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });\n\t\t\tthis.element = null;\n\t\t},\n\t\t/**\n\t\t * bind all events. Used internally.\n\t\t * @private\n\t\t * @name bind()\n\t\t */\n\t\tbind : function () {\n\t\t\tvar word = '',\n\t\t\t\ttout = null,\n\t\t\t\twas_click = 0;\n\t\t\tthis.element\n\t\t\t\t.on(\"dblclick.jstree\", function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(document.selection && document.selection.empty) {\n\t\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif(window.getSelection) {\n\t\t\t\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\t\t\t\t\tsel.collapse();\n\t\t\t\t\t\t\t\t} catch (ignore) { }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on(\"mousedown.jstree\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target === this.element[0]) {\n\t\t\t\t\t\t\te.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)\n\t\t\t\t\t\t\twas_click = +(new Date()); // ie does not allow to prevent losing focus\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mousedown.jstree\", \".jstree-ocl\", function (e) {\n\t\t\t\t\t\te.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"dblclick.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(this.settings.core.dblclick_toggle) {\n\t\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }\n\t\t\t\t\t\tthis.activate_node(e.currentTarget, e);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(e.which !== 32 && e.which !== 13 && (e.shiftKey || e.ctrlKey || e.altKey || e.metaKey)) { return true; }\n\t\t\t\t\t\tvar o = null;\n\t\t\t\t\t\tif(this._data.core.rtl) {\n\t\t\t\t\t\t\tif(e.which === 37) { e.which = 39; }\n\t\t\t\t\t\t\telse if(e.which === 39) { e.which = 37; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch(e.which) {\n\t\t\t\t\t\t\tcase 32: // aria defines space only with Ctrl\n\t\t\t\t\t\t\t\tif(e.ctrlKey) {\n\t\t\t\t\t\t\t\t\te.type = \"click\";\n\t\t\t\t\t\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 13: // enter\n\t\t\t\t\t\t\t\te.type = \"click\";\n\t\t\t\t\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 37: // right\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif(this.is_open(e.currentTarget)) {\n\t\t\t\t\t\t\t\t\tthis.close_node(e.currentTarget);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\to = this.get_parent(e.currentTarget);\n\t\t\t\t\t\t\t\t\tif(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 38: // up\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\to = this.get_prev_dom(e.currentTarget);\n\t\t\t\t\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 39: // left\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif(this.is_closed(e.currentTarget)) {\n\t\t\t\t\t\t\t\t\tthis.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (this.is_open(e.currentTarget)) {\n\t\t\t\t\t\t\t\t\to = this.get_node(e.currentTarget, true).children('.jstree-children')[0];\n\t\t\t\t\t\t\t\t\tif(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 40: // down\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\to = this.get_next_dom(e.currentTarget);\n\t\t\t\t\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 106: // aria defines * on numpad as open_all - not very common\n\t\t\t\t\t\t\t\tthis.open_all();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 36: // home\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\to = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\t\t\t\t\tif(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 35: // end\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.element.find('.jstree-anchor').filter(':visible').last().focus();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 113: // f2 - safe to include - if check_callback is false it will fail\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.edit(e.currentTarget);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t/*!\n\t\t\t\t\t\t\t// delete\n\t\t\t\t\t\t\tcase 46:\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\to = this.get_node(e.currentTarget);\n\t\t\t\t\t\t\t\tif(o && o.id && o.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to = this.is_selected(o) ? this.get_selected() : o;\n\t\t\t\t\t\t\t\t\tthis.delete_node(o);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"load_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(data.status) {\n\t\t\t\t\t\t\tif(data.node.id === $.jstree.root && !this._data.core.loaded) {\n\t\t\t\t\t\t\t\tthis._data.core.loaded = true;\n\t\t\t\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t * triggered after the root node is loaded for the first time\n\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t * @name loaded.jstree\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\tthis.trigger(\"loaded\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!this._data.core.ready) {\n\t\t\t\t\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\t\t\t\t\tif(this.element && !this.get_container_ul().find('.jstree-loading').length) {\n\t\t\t\t\t\t\t\t\t\tthis._data.core.ready = true;\n\t\t\t\t\t\t\t\t\t\tif(this._data.core.selected.length) {\n\t\t\t\t\t\t\t\t\t\t\tif(this.settings.core.expand_selected_onload) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar tmp = [], i, j;\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ttmp = $.vakata.array_unique(tmp);\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.open_node(tmp[i], false, 0);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t\t * triggered after all nodes are finished loading\n\t\t\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t\t\t * @name ready.jstree\n\t\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t\tthis.trigger(\"ready\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// quick searching when the tree is focused\n\t\t\t\t.on('keypress.jstree', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(tout) { clearTimeout(tout); }\n\t\t\t\t\t\ttout = setTimeout(function () {\n\t\t\t\t\t\t\tword = '';\n\t\t\t\t\t\t}, 500);\n\n\t\t\t\t\t\tvar chr = String.fromCharCode(e.which).toLowerCase(),\n\t\t\t\t\t\t\tcol = this.element.find('.jstree-anchor').filter(':visible'),\n\t\t\t\t\t\t\tind = col.index(document.activeElement) || 0,\n\t\t\t\t\t\t\tend = false;\n\t\t\t\t\t\tword += chr;\n\n\t\t\t\t\t\t// match for whole word from current node down (including the current node)\n\t\t\t\t\t\tif(word.length > 1) {\n\t\t\t\t\t\t\tcol.slice(ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// match for whole word from the beginning of the tree\n\t\t\t\t\t\t\tcol.slice(0, ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// list nodes that start with that letter (only if word consists of a single char)\n\t\t\t\t\t\tif(new RegExp('^' + chr.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '+$').test(word)) {\n\t\t\t\t\t\t\t// search for the next node starting with that letter\n\t\t\t\t\t\t\tcol.slice(ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// search from the beginning\n\t\t\t\t\t\t\tcol.slice(0, ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// THEME RELATED\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tvar s = this.settings.core.themes;\n\t\t\t\t\t\tthis._data.core.themes.dots\t\t\t= s.dots;\n\t\t\t\t\t\tthis._data.core.themes.stripes\t\t= s.stripes;\n\t\t\t\t\t\tthis._data.core.themes.icons\t\t= s.icons;\n\t\t\t\t\t\tthis.set_theme(s.name || \"default\", s.url);\n\t\t\t\t\t\tthis.set_theme_variant(s.variant);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.core.themes.dots ? \"show_dots\" : \"hide_dots\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.icons ? \"show_icons\" : \"hide_icons\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.stripes ? \"show_stripes\" : \"hide_stripes\" ]();\n\t\t\t\t\t}, this))\n\t\t\t\t.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t\t\t$(e.currentTarget).filter('.jstree-hovered').mouseleave();\n\t\t\t\t\t\tthis.element.attr('tabindex', '0');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tvar tmp = this.get_node(e.currentTarget);\n\t\t\t\t\t\tif(tmp && tmp.id) {\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.element.find('.jstree-hovered').not(e.currentTarget).mouseleave();\n\t\t\t\t\t\t$(e.currentTarget).mouseenter();\n\t\t\t\t\t\tthis.element.attr('tabindex', '-1');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', $.proxy(function () {\n\t\t\t\t\t\tif(+(new Date()) - was_click > 500 && !this._data.core.focused) {\n\t\t\t\t\t\t\twas_click = 0;\n\t\t\t\t\t\t\tvar act = this.get_node(this.element.attr('aria-activedescendant'), true);\n\t\t\t\t\t\t\tif(act) {\n\t\t\t\t\t\t\t\tact.find('> .jstree-anchor').focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name unbind()\n\t\t */\n\t\tunbind : function () {\n\t\t\tthis.element.off('.jstree');\n\t\t\t$(document).off('.jstree-' + this._id);\n\t\t},\n\t\t/**\n\t\t * trigger an event. Used internally.\n\t\t * @private\n\t\t * @name trigger(ev [, data])\n\t\t * @param  {String} ev the name of the event to trigger\n\t\t * @param  {Object} data additional data to pass with the event\n\t\t */\n\t\ttrigger : function (ev, data) {\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tdata.instance = this;\n\t\t\tthis.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended instance container\n\t\t * @name get_container()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container : function () {\n\t\t\treturn this.element;\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended main UL node inside the instance container. Used internally.\n\t\t * @private\n\t\t * @name get_container_ul()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container_ul : function () {\n\t\t\treturn this.element.children(\".jstree-children\").first();\n\t\t},\n\t\t/**\n\t\t * gets string replacements (localization). Used internally.\n\t\t * @private\n\t\t * @name get_string(key)\n\t\t * @param  {String} key\n\t\t * @return {String}\n\t\t */\n\t\tget_string : function (key) {\n\t\t\tvar a = this.settings.core.strings;\n\t\t\tif($.isFunction(a)) { return a.call(this, key); }\n\t\t\tif(a && a[key]) { return a[key]; }\n\t\t\treturn key;\n\t\t},\n\t\t/**\n\t\t * gets the first child of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _firstChild(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_firstChild : function (dom) {\n\t\t\tdom = dom ? dom.firstChild : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the next sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _nextSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_nextSibling : function (dom) {\n\t\t\tdom = dom ? dom.nextSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the previous sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _previousSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_previousSibling : function (dom) {\n\t\t\tdom = dom ? dom.previousSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.previousSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)\n\t\t * @name get_node(obj [, as_dom])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} as_dom\n\t\t * @return {Object|jQuery}\n\t\t */\n\t\tget_node : function (obj, as_dom) {\n\t\t\tif(obj && obj.id) {\n\t\t\t\tobj = obj.id;\n\t\t\t}\n\t\t\tvar dom;\n\t\t\ttry {\n\t\t\t\tif(this._model.data[obj]) {\n\t\t\t\t\tobj = this._model.data[obj];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && this._model.data[obj.replace(/^#/, '')]) {\n\t\t\t\t\tobj = this._model.data[obj.replace(/^#/, '')];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && (dom = $('#' + obj.replace($.jstree.idregex,'\\\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = $(obj, this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) {\n\t\t\t\t\tobj = this._model.data[$.jstree.root];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif(as_dom) {\n\t\t\t\t\tobj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t} catch (ex) { return false; }\n\t\t},\n\t\t/**\n\t\t * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)\n\t\t * @name get_path(obj [, glue, ids])\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned\n\t\t * @param  {Boolean} ids if set to true build the path using ID, otherwise node text is used\n\t\t * @return {mixed}\n\t\t */\n\t\tget_path : function (obj, glue, ids) {\n\t\t\tobj = obj.parents ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root || !obj.parents) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = [];\n\t\t\tp.push(ids ? obj.id : obj.text);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tp.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));\n\t\t\t}\n\t\t\tp = p.reverse().slice(1);\n\t\t\treturn glue ? p.join(glue) : p;\n\t\t},\n\t\t/**\n\t\t * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_next_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_next_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(obj.hasClass(\"jstree-open\")) {\n\t\t\t\ttmp = this._firstChild(obj.children('.jstree-children')[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\tif(tmp !== null) {\n\t\t\t\t\treturn $(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\treturn $(tmp);\n\t\t\t}\n\t\t\treturn obj.parentsUntil(\".jstree\",\".jstree-node\").nextAll(\".jstree-node:visible\").first();\n\t\t},\n\t\t/**\n\t\t * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_prev_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_prev_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this.get_container_ul()[0].lastChild;\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\tobj = $(tmp);\n\t\t\t\twhile(obj.hasClass(\"jstree-open\")) {\n\t\t\t\t\tobj = obj.children(\".jstree-children\").first().children(\".jstree-node:visible:last\");\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\ttmp = obj[0].parentNode.parentNode;\n\t\t\treturn tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;\n\t\t},\n\t\t/**\n\t\t * get the parent ID of a node\n\t\t * @name get_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.parent;\n\t\t},\n\t\t/**\n\t\t * get a jQuery collection of all the children of a node (node must be rendered)\n\t\t * @name get_children_dom(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_children_dom : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\treturn this.get_container_ul().children(\".jstree-node\");\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.children(\".jstree-children\").children(\".jstree-node\");\n\t\t},\n\t\t/**\n\t\t * checks if a node has children\n\t\t * @name is_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && (obj.state.loaded === false || obj.children.length > 0);\n\t\t},\n\t\t/**\n\t\t * checks if a node is loaded (its children are available)\n\t\t * @name is_loaded(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loaded : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.loaded;\n\t\t},\n\t\t/**\n\t\t * check if a node is currently loading (fetching children)\n\t\t * @name is_loading(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loading : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.loading;\n\t\t},\n\t\t/**\n\t\t * check if a node is opened\n\t\t * @name is_open(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_open : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node is in a closed state\n\t\t * @name is_closed(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_closed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && this.is_parent(obj) && !obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node has no children\n\t\t * @name is_leaf(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_leaf : function (obj) {\n\t\t\treturn !this.is_parent(obj);\n\t\t},\n\t\t/**\n\t\t * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.\n\t\t * @name load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status\n\t\t * @return {Boolean}\n\t\t * @trigger load_node.jstree\n\t\t */\n\t\tload_node : function (obj, callback) {\n\t\t\tvar k, l, i, j, c;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tthis._load_nodes(obj.slice(), callback);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) {\n\t\t\t\tif(callback) { callback.call(this, obj, false); }\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?\n\t\t\tif(obj.state.loaded) {\n\t\t\t\tobj.state.loaded = false;\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor(k = 0, l = obj.children_d.length; k < l; k++) {\n\t\t\t\t\tif(this._model.data[obj.children_d[k]].state.selected) {\n\t\t\t\t\t\tc = true;\n\t\t\t\t\t}\n\t\t\t\t\tdelete this._model.data[obj.children_d[k]];\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tobj.children = [];\n\t\t\t\tobj.children_d = [];\n\t\t\t\tif(c) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.state.failed = false;\n\t\t\tobj.state.loading = true;\n\t\t\tthis.get_node(obj, true).addClass(\"jstree-loading\").attr('aria-busy',true);\n\t\t\tthis._load_node(obj, $.proxy(function (status) {\n\t\t\t\tobj = this._model.data[obj.id];\n\t\t\t\tobj.state.loading = false;\n\t\t\t\tobj.state.loaded = status;\n\t\t\t\tobj.state.failed = !obj.state.loaded;\n\t\t\t\tvar dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {\n\t\t\t\t\t\thas_children = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(obj.state.loaded && dom && dom.length) {\n\t\t\t\t\tdom.removeClass('jstree-closed jstree-open jstree-leaf');\n\t\t\t\t\tif (!has_children) {\n\t\t\t\t\t\tdom.addClass('jstree-leaf');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t/**\n\t\t\t\t * triggered after a node is loaded\n\t\t\t\t * @event\n\t\t\t\t * @name load_node.jstree\n\t\t\t\t * @param {Object} node the node that was loading\n\t\t\t\t * @param {Boolean} status was the node loaded successfully\n\t\t\t\t */\n\t\t\t\tthis.trigger('load_node', { \"node\" : obj, \"status\" : status });\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, status);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally.\n\t\t * @private\n\t\t * @name _load_nodes(nodes [, callback])\n\t\t * @param  {array} nodes\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes\n\t\t */\n\t\t_load_nodes : function (nodes, callback, is_callback) {\n\t\t\tvar r = true,\n\t\t\t\tc = function () { this._load_nodes(nodes, callback, true); },\n\t\t\t\tm = this._model.data, i, j, tmp = [];\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\tif(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || !is_callback)) {\n\t\t\t\t\tif(!this.is_loading(nodes[i])) {\n\t\t\t\t\t\tthis.load_node(nodes[i], c);\n\t\t\t\t\t}\n\t\t\t\t\tr = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(r) {\n\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\tif(m[nodes[i]] && m[nodes[i]].state.loaded) {\n\t\t\t\t\t\ttmp.push(nodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(callback && !callback.done) {\n\t\t\t\t\tcallback.call(this, tmp);\n\t\t\t\t\tcallback.done = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * loads all unloaded nodes\n\t\t * @name load_all([obj, callback])\n\t\t * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree\n\t\t * @param {function} callback a function to be executed once loading all the nodes is complete,\n\t\t * @trigger load_all.jstree\n\t\t */\n\t\tload_all : function (obj, callback) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar to_load = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tc = m[obj.id].children_d,\n\t\t\t\ti, j;\n\t\t\tif(obj.state && !obj.state.loaded) {\n\t\t\t\tto_load.push(obj.id);\n\t\t\t}\n\t\t\tfor(i = 0, j = c.length; i < j; i++) {\n\t\t\t\tif(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {\n\t\t\t\t\tto_load.push(c[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(to_load.length) {\n\t\t\t\tthis._load_nodes(to_load, function () {\n\t\t\t\t\tthis.load_all(obj, callback);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/**\n\t\t\t\t * triggered after a load_all call completes\n\t\t\t\t * @event\n\t\t\t\t * @name load_all.jstree\n\t\t\t\t * @param {Object} node the recursively loaded node\n\t\t\t\t */\n\t\t\t\tif(callback) { callback.call(this, obj); }\n\t\t\t\tthis.trigger('load_all', { \"node\" : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * handles the actual loading of a node. Used only internally.\n\t\t * @private\n\t\t * @name _load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status\n\t\t * @return {Boolean}\n\t\t */\n\t\t_load_node : function (obj, callback) {\n\t\t\tvar s = this.settings.core.data, t;\n\t\t\t// use original HTML\n\t\t\tif(!s) {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t// return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);\n\t\t\t}\n\t\t\tif($.isFunction(s)) {\n\t\t\t\treturn s.call(this, obj, $.proxy(function (d) {\n\t\t\t\t\tif(d === false) {\n\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(function () { return this.nodeType !== 3; }) : d, function (status) {\n\t\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(typeof s === 'object') {\n\t\t\t\tif(s.url) {\n\t\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\t\ts.url = s.url.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\t\ts.data = s.data.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t\t.done($.proxy(function (d,t,x) {\n\t\t\t\t\t\t\t\tvar type = x.getResponseHeader('Content-Type');\n\t\t\t\t\t\t\t\tif((type && type.indexOf('json') !== -1) || typeof d === \"object\") {\n\t\t\t\t\t\t\t\t\treturn this._append_json_data(obj, d, function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t//return callback.call(this, this._append_json_data(obj, d));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif((type && type.indexOf('html') !== -1) || typeof d === \"string\") {\n\t\t\t\t\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(d)).filter(function () { return this.nodeType !== 3; }), function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t// return callback.call(this, this._append_html_data(obj, $(d)));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t\tt = ($.isArray(s) || $.isPlainObject(s)) ? JSON.parse(JSON.stringify(s)) : s;\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_json_data(obj, t, function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );\n\t\t\t}\n\t\t\tif(typeof s === 'string') {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(s)).filter(function () { return this.nodeType !== 3; }), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );\n\t\t\t}\n\t\t\treturn callback.call(this, false);\n\t\t},\n\t\t/**\n\t\t * adds a node to the list of nodes to redraw. Used only internally.\n\t\t * @private\n\t\t * @name _node_changed(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t */\n\t\t_node_changed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(obj) {\n\t\t\t\tthis._model.changed.push(obj.id);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * appends HTML content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_html_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the HTML string to parse and append\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_html_data : function (dom, data, cb) {\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\tvar dat = data.is('ul') ? data.children() : data,\n\t\t\t\tpar = dom.id,\n\t\t\t\tchd = [],\n\t\t\t\tdpc = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tp = m[par],\n\t\t\t\ts = this._data.core.selected.length,\n\t\t\t\ttmp, i, j;\n\t\t\tdat.each($.proxy(function (i, v) {\n\t\t\t\ttmp = this._parse_model_from_html($(v), par, p.parents.concat());\n\t\t\t\tif(tmp) {\n\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tp.children = chd;\n\t\t\tp.children_d = dpc;\n\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when new data is inserted to the tree model\n\t\t\t * @event\n\t\t\t * @name model.jstree\n\t\t\t * @param {Array} nodes an array of node IDs\n\t\t\t * @param {String} parent the parent ID of the nodes\n\t\t\t */\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, 'parent' : par });\n\t\t\tif(par !== $.jstree.root) {\n\t\t\t\tthis._node_changed(par);\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\tthis.redraw(true);\n\t\t\t}\n\t\t\tif(this._data.core.selected.length !== s) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t}\n\t\t\tcb.call(this, true);\n\t\t},\n\t\t/**\n\t\t * appends JSON content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_json_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the JSON object to parse and append\n\t\t * @param  {Boolean} force_processing internal param - do not set\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_json_data : function (dom, data, cb, force_processing) {\n\t\t\tif(this.element === null) { return; }\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\t// *%$@!!!\n\t\t\tif(data.d) {\n\t\t\t\tdata = data.d;\n\t\t\t\tif(typeof data === \"string\") {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!$.isArray(data)) { data = [data]; }\n\t\t\tvar w = null,\n\t\t\t\targs = {\n\t\t\t\t\t'df'\t: this._model.default_state,\n\t\t\t\t\t'dat'\t: data,\n\t\t\t\t\t'par'\t: dom.id,\n\t\t\t\t\t'm'\t\t: this._model.data,\n\t\t\t\t\t't_id'\t: this._id,\n\t\t\t\t\t't_cnt'\t: this._cnt,\n\t\t\t\t\t'sel'\t: this._data.core.selected\n\t\t\t\t},\n\t\t\t\tfunc = function (data, undefined) {\n\t\t\t\t\tif(data.data) { data = data.data; }\n\t\t\t\t\tvar dat = data.dat,\n\t\t\t\t\t\tpar = data.par,\n\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\tdpc = [],\n\t\t\t\t\t\tadd = [],\n\t\t\t\t\t\tdf = data.df,\n\t\t\t\t\t\tt_id = data.t_id,\n\t\t\t\t\t\tt_cnt = data.t_cnt,\n\t\t\t\t\t\tm = data.m,\n\t\t\t\t\t\tp = m[par],\n\t\t\t\t\t\tsel = data.sel,\n\t\t\t\t\t\ttmp, i, j, rslt,\n\t\t\t\t\t\tparse_flat = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = d.id.toString(),\n\t\t\t\t\t\t\t\ti, j, c, e,\n\t\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\tc = parse_flat(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\ttmp.children_d.push(c);\n\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\tm[tmp.id].original = d;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparse_nest = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = false, i, j, c, e, tmp;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttid = 'j' + t_id + '_' + (++t_cnt);\n\t\t\t\t\t\t\t} while(m[tid]);\n\n\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\t\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\tchildren\t: [],\n\t\t\t\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\t\t\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc = parse_nest(d.children[i], tmp.id, ps);\n\t\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(tmp.children);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\ttmp.original = d;\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {\n\t\t\t\t\t\t// Flat JSON support (for easy import from DB):\n\t\t\t\t\t\t// 1) convert to object (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tif(!dat[i].children) {\n\t\t\t\t\t\t\t\tdat[i].children = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dat[i].id.toString()] = dat[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 2) populate children (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tm[dat[i].parent.toString()].children.push(dat[i].id.toString());\n\t\t\t\t\t\t\t// populate parent.children_d\n\t\t\t\t\t\t\tp.children_d.push(dat[i].id.toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 3) normalize && populate parents and children_d with recursion\n\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_flat(m[p.children[i]], par, p.parents.concat());\n\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_nest(dat[i], par, p.parents.concat());\n\t\t\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.children = chd;\n\t\t\t\t\t\tp.children_d = dpc;\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof window === 'undefined' || typeof window.document === 'undefined') {\n\t\t\t\t\t\tpostMessage(rslt);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn rslt;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trslt = function (rslt, worker) {\n\t\t\t\t\tif(this.element === null) { return; }\n\t\t\t\t\tthis._cnt = rslt.cnt;\n\t\t\t\t\tthis._model.data = rslt.mod; // breaks the reference in load_node - careful\n\n\t\t\t\t\tif(worker) {\n\t\t\t\t\t\tvar i, j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice(), m = this._model.data;\n\t\t\t\t\t\t// if selection was changed while calculating in worker\n\t\t\t\t\t\tif(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {\n\t\t\t\t\t\t\t// deselect nodes that are no longer selected\n\t\t\t\t\t\t\tfor(i = 0, j = r.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {\n\t\t\t\t\t\t\t\t\tm[r[i]].state.selected = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// select nodes that were selected in the mean time\n\t\t\t\t\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(s[i], r) === -1) {\n\t\t\t\t\t\t\t\t\tm[s[i]].state.selected = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis._data.core.selected = this._data.core.selected.concat(rslt.add);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.trigger('model', { \"nodes\" : rslt.dpc, 'parent' : rslt.par });\n\n\t\t\t\t\tif(rslt.par !== $.jstree.root) {\n\t\t\t\t\t\tthis._node_changed(rslt.par);\n\t\t\t\t\t\tthis.redraw();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// this.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t\t\t}\n\t\t\t\t\tcb.call(this, true);\n\t\t\t\t};\n\t\t\tif(this.settings.core.worker && window.Blob && window.URL && window.Worker) {\n\t\t\t\ttry {\n\t\t\t\t\tif(this._wrk === null) {\n\t\t\t\t\t\tthis._wrk = window.URL.createObjectURL(\n\t\t\t\t\t\t\tnew window.Blob(\n\t\t\t\t\t\t\t\t['self.onmessage = ' + func.toString()],\n\t\t\t\t\t\t\t\t{type:\"text/javascript\"}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif(!this._data.core.working || force_processing) {\n\t\t\t\t\t\tthis._data.core.working = true;\n\t\t\t\t\t\tw = new window.Worker(this._wrk);\n\t\t\t\t\t\tw.onmessage = $.proxy(function (e) {\n\t\t\t\t\t\t\trslt.call(this, e.data, true);\n\t\t\t\t\t\t\ttry { w.terminate(); w = null; } catch(ignore) { }\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t\tif(!args.par) {\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tw.postMessage(args);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.worker_queue.push([dom, data, cb, true]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\trslt.call(this, func(args), false);\n\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\trslt.call(this, func(args), false);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_html(d [, p, ps])\n\t\t * @param  {jQuery} d the jQuery object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_html : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = [].concat(ps); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar c, e, m = this._model.data,\n\t\t\t\tdata = {\n\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\ttext\t\t: false,\n\t\t\t\t\ticon\t\t: true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: [],\n\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t}, i, tmp, tid;\n\t\t\tfor(i in this._model.default_state) {\n\t\t\t\tif(this._model.default_state.hasOwnProperty(i)) {\n\t\t\t\t\tdata.state[i] = this._model.default_state[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = $.vakata.attributes(d, true);\n\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\tv = $.trim(v);\n\t\t\t\tif(!v.length) { return true; }\n\t\t\t\tdata.li_attr[i] = v;\n\t\t\t\tif(i === 'id') {\n\t\t\t\t\tdata.id = v.toString();\n\t\t\t\t}\n\t\t\t});\n\t\t\ttmp = d.children('a').first();\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp = $.vakata.attributes(tmp, true);\n\t\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\t\tv = $.trim(v);\n\t\t\t\t\tif(v.length) {\n\t\t\t\t\t\tdata.a_attr[i] = v;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").first().length ? d.children(\"a\").first().clone() : d.clone();\n\t\t\ttmp.children(\"ins, i, ul\").remove();\n\t\t\ttmp = tmp.html();\n\t\t\ttmp = $('<div />').html(tmp);\n\t\t\tdata.text = this.settings.core.force_text ? tmp.text() : tmp.html();\n\t\t\ttmp = d.data();\n\t\t\tdata.data = tmp ? $.extend(true, {}, tmp) : null;\n\t\t\tdata.state.opened = d.hasClass('jstree-open');\n\t\t\tdata.state.selected = d.children('a').hasClass('jstree-clicked');\n\t\t\tdata.state.disabled = d.children('a').hasClass('jstree-disabled');\n\t\t\tif(data.data && data.data.jstree) {\n\t\t\t\tfor(i in data.data.jstree) {\n\t\t\t\t\tif(data.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\tdata.state[i] = data.data.jstree[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").children(\".jstree-themeicon\");\n\t\t\tif(tmp.length) {\n\t\t\t\tdata.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');\n\t\t\t}\n\t\t\tif(data.state.icon !== undefined) {\n\t\t\t\tdata.icon = data.state.icon;\n\t\t\t}\n\t\t\tif(data.icon === undefined || data.icon === null || data.icon === \"\") {\n\t\t\t\tdata.icon = true;\n\t\t\t}\n\t\t\ttmp = d.children(\"ul\").children(\"li\");\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\t\t\tdata.id = data.li_attr.id ? data.li_attr.id.toString() : tid;\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp.each($.proxy(function (i, v) {\n\t\t\t\t\tc = this._parse_model_from_html($(v), data.id, ps);\n\t\t\t\t\te = this._model.data[c];\n\t\t\t\t\tdata.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\tdata.children_d = data.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t\tdata.children_d = data.children_d.concat(data.children);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(d.hasClass('jstree-closed')) {\n\t\t\t\t\tdata.state.loaded = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(data.li_attr['class']) {\n\t\t\t\tdata.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');\n\t\t\t}\n\t\t\tif(data.a_attr['class']) {\n\t\t\t\tdata.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');\n\t\t\t}\n\t\t\tm[data.id] = data;\n\t\t\tif(data.state.selected) {\n\t\t\t\tthis._data.core.selected.push(data.id);\n\t\t\t}\n\t\t\treturn data.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_flat_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_flat_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = d.id.toString(),\n\t\t\t\tm = this._model.data,\n\t\t\t\tdf = this._model.default_state,\n\t\t\t\ti, j, c, e,\n\t\t\t\ttmp = {\n\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tm[tmp.id] = tmp;\n\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\tc = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\te = m[c];\n\t\t\t\ttmp.children_d.push(c);\n\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\tm[tmp.id].original = d;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\n\t\t\ttmp = {\n\t\t\t\tid\t\t\t: false,\n\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\tparent\t\t: p,\n\t\t\t\tparents\t\t: ps,\n\t\t\t\tchildren\t: [],\n\t\t\t\tchildren_d\t: [],\n\t\t\t\tdata\t\t: null,\n\t\t\t\tstate\t\t: { },\n\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\toriginal\t: false\n\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t}\n\t\t\tif(!tmp.id) {\n\t\t\t\ttmp.id = tid;\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\tc = this._parse_model_from_json(d.children[i], tmp.id, ps);\n\t\t\t\t\te = m[c];\n\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttmp.children_d = tmp.children_d.concat(tmp.children);\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\ttmp.original = d;\n\t\t\tm[tmp.id] = tmp;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn. Used internally.\n\t\t * @private\n\t\t * @name _redraw()\n\t\t * @trigger redraw.jstree\n\t\t */\n\t\t_redraw : function () {\n\t\t\tvar nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),\n\t\t\t\tf = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\ttmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);\n\t\t\t\tif(tmp && this._model.force_full_redraw) {\n\t\t\t\t\tf.appendChild(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(this._model.force_full_redraw) {\n\t\t\t\tf.className = this.get_container_ul()[0].className;\n\t\t\t\tf.setAttribute('role','group');\n\t\t\t\tthis.element.empty().append(f);\n\t\t\t\t//this.get_container_ul()[0].appendChild(f);\n\t\t\t}\n\t\t\tif(fe !== null) {\n\t\t\t\ttmp = this.get_node(fe, true);\n\t\t\t\tif(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {\n\t\t\t\t\ttmp.children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = false;\n\t\t\tthis._model.changed = [];\n\t\t\t/**\n\t\t\t * triggered after nodes are redrawn\n\t\t\t * @event\n\t\t\t * @name redraw.jstree\n\t\t\t * @param {array} nodes the redrawn nodes\n\t\t\t */\n\t\t\tthis.trigger('redraw', { \"nodes\" : nodes });\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn or optionally - the whole tree\n\t\t * @name redraw([full])\n\t\t * @param {Boolean} full if set to `true` all nodes are redrawn.\n\t\t */\n\t\tredraw : function (full) {\n\t\t\tif(full) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\t//if(this._model.redraw_timeout) {\n\t\t\t//\tclearTimeout(this._model.redraw_timeout);\n\t\t\t//}\n\t\t\t//this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);\n\t\t\tthis._redraw();\n\t\t},\n\t\t/**\n\t\t * redraws a single node's children. Used internally.\n\t\t * @private\n\t\t * @name draw_children(node)\n\t\t * @param {mixed} node the node whose children will be redrawn\n\t\t */\n\t\tdraw_children : function (node) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\td = document;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) { return this.redraw(true); }\n\t\t\tnode = this.get_node(node, true);\n\t\t\tif(!node || !node.length) { return false; } // TODO: quick toggle\n\n\t\t\tnode.children('.jstree-children').remove();\n\t\t\tnode = node[0];\n\t\t\tif(obj.children.length && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], true, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * redraws a single node. Used internally.\n\t\t * @private\n\t\t * @name redraw_node(node, deep, is_callback, force_render)\n\t\t * @param {mixed} node the node to redraw\n\t\t * @param {Boolean} deep should child nodes be redrawn too\n\t\t * @param {Boolean} is_callback is this a recursion call\n\t\t * @param {Boolean} force_render should children of closed parents be drawn anyway\n\t\t */\n\t\tredraw_node : function (node, deep, is_callback, force_render) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\tpar = false,\n\t\t\t\tind = false,\n\t\t\t\told = false,\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\tc = '',\n\t\t\t\td = document,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = false,\n\t\t\t\ts = false,\n\t\t\t\ttmp = null,\n\t\t\t\tt = 0,\n\t\t\t\tl = 0,\n\t\t\t\thas_children = false,\n\t\t\t\tlast_sibling = false;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) {  return this.redraw(true); }\n\t\t\tdeep = deep || obj.children.length === 0;\n\t\t\tnode = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + (\"0123456789\".indexOf(obj.id[0]) !== -1 ? '\\\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\\\$&') : obj.id.replace($.jstree.idregex,'\\\\$&')) ); //, this.element);\n\t\t\tif(!node) {\n\t\t\t\tdeep = true;\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\\\$&'), this.element)[0] : null;\n\t\t\t\t\tif(par !== null && (!par || !m[obj.parent].state.opened)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode = $(node);\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = node.parent().parent()[0];\n\t\t\t\t\tif(par === this.element[0]) {\n\t\t\t\t\t\tpar = null;\n\t\t\t\t\t}\n\t\t\t\t\tind = node.index();\n\t\t\t\t}\n\t\t\t\t// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage\n\t\t\t\tif(!deep && obj.children.length && !node.children('.jstree-children').length) {\n\t\t\t\t\tdeep = true;\n\t\t\t\t}\n\t\t\t\tif(!deep) {\n\t\t\t\t\told = node.children('.jstree-children')[0];\n\t\t\t\t}\n\t\t\t\tf = node.children('.jstree-anchor')[0] === document.activeElement;\n\t\t\t\tnode.remove();\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\t//node = node[0];\n\t\t\t}\n\t\t\tnode = _node.cloneNode(true);\n\t\t\t// node is DOM, deep is boolean\n\n\t\t\tc = 'jstree-node ';\n\t\t\tfor(i in obj.li_attr) {\n\t\t\t\tif(obj.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\tif(i === 'id') { continue; }\n\t\t\t\t\tif(i !== 'class') {\n\t\t\t\t\t\tnode.setAttribute(i, obj.li_attr[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += obj.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!obj.a_attr.id) {\n\t\t\t\tobj.a_attr.id = obj.id + '_anchor';\n\t\t\t}\n\t\t\tnode.setAttribute('aria-selected', !!obj.state.selected);\n\t\t\tnode.setAttribute('aria-level', obj.parents.length);\n\t\t\tnode.setAttribute('aria-labelledby', obj.a_attr.id);\n\t\t\tif(obj.state.disabled) {\n\t\t\t\tnode.setAttribute('aria-disabled', true);\n\t\t\t}\n\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tif(!m[obj.children[i]].state.hidden) {\n\t\t\t\t\thas_children = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {\n\t\t\t\ti = $.inArray(obj.id, m[obj.parent].children);\n\t\t\t\tlast_sibling = obj.id;\n\t\t\t\tif(i !== -1) {\n\t\t\t\t\ti++;\n\t\t\t\t\tfor(j = m[obj.parent].children.length; i < j; i++) {\n\t\t\t\t\t\tif(!m[m[obj.parent].children[i]].state.hidden) {\n\t\t\t\t\t\t\tlast_sibling = m[obj.parent].children[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(last_sibling !== obj.id) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tc += ' jstree-hidden';\n\t\t\t}\n\t\t\tif(obj.state.loaded && !has_children) {\n\t\t\t\tc += ' jstree-leaf';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tc += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';\n\t\t\t\tnode.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );\n\t\t\t}\n\t\t\tif(last_sibling === obj.id) {\n\t\t\t\tc += ' jstree-last';\n\t\t\t}\n\t\t\tnode.id = obj.id;\n\t\t\tnode.className = c;\n\t\t\tc = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');\n\t\t\tfor(j in obj.a_attr) {\n\t\t\t\tif(obj.a_attr.hasOwnProperty(j)) {\n\t\t\t\t\tif(j === 'href' && obj.a_attr[j] === '#') { continue; }\n\t\t\t\t\tif(j !== 'class') {\n\t\t\t\t\t\tnode.childNodes[1].setAttribute(j, obj.a_attr[j]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += ' ' + obj.a_attr[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(c.length) {\n\t\t\t\tnode.childNodes[1].className = 'jstree-anchor ' + c;\n\t\t\t}\n\t\t\tif((obj.icon && obj.icon !== true) || obj.icon === false) {\n\t\t\t\tif(obj.icon === false) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';\n\t\t\t\t}\n\t\t\t\telse if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundImage = 'url('+obj.icon+')';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundSize = 'auto';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.settings.core.force_text) {\n\t\t\t\tnode.childNodes[1].appendChild(d.createTextNode(obj.text));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode.childNodes[1].innerHTML += obj.text;\n\t\t\t}\n\n\n\t\t\tif(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], deep, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t\tif(old) {\n\t\t\t\tnode.appendChild(old);\n\t\t\t}\n\t\t\tif(!is_callback) {\n\t\t\t\t// append back using par / ind\n\t\t\t\tif(!par) {\n\t\t\t\t\tpar = this.element[0];\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = par.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {\n\t\t\t\t\t\ttmp = par.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!tmp) {\n\t\t\t\t\ttmp = d.createElement('UL');\n\t\t\t\t\ttmp.setAttribute('role', 'group');\n\t\t\t\t\ttmp.className = 'jstree-children';\n\t\t\t\t\tpar.appendChild(tmp);\n\t\t\t\t}\n\t\t\t\tpar = tmp;\n\n\t\t\t\tif(ind < par.childNodes.length) {\n\t\t\t\t\tpar.insertBefore(node, par.childNodes[ind]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpar.appendChild(node);\n\t\t\t\t}\n\t\t\t\tif(f) {\n\t\t\t\t\tt = this.element[0].scrollTop;\n\t\t\t\t\tl = this.element[0].scrollLeft;\n\t\t\t\t\tnode.childNodes[1].focus();\n\t\t\t\t\tthis.element[0].scrollTop = t;\n\t\t\t\t\tthis.element[0].scrollLeft = l;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.state.opened && !obj.state.loaded) {\n\t\t\t\tobj.state.opened = false;\n\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\tthis.open_node(obj.id, false, 0);\n\t\t\t\t}, this), 0);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\t/**\n\t\t * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_node(obj [, callback, animation])\n\t\t * @param {mixed} obj the node to open\n\t\t * @param {Function} callback a function to execute once the node is opened\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger open_node.jstree, after_open.jstree, before_open.jstree\n\t\t */\n\t\topen_node : function (obj, callback, animation) {\n\t\t\tvar t1, t2, d, t;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.open_node(obj[t1], callback, animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tif(!this.is_closed(obj)) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, false);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!this.is_loaded(obj)) {\n\t\t\t\tif(this.is_loading(obj)) {\n\t\t\t\t\treturn setTimeout($.proxy(function () {\n\t\t\t\t\t\tthis.open_node(obj, callback, animation);\n\t\t\t\t\t}, this), 500);\n\t\t\t\t}\n\t\t\t\tthis.load_node(obj, function (o, ok) {\n\t\t\t\t\treturn ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\td = this.get_node(obj, true);\n\t\t\t\tt = this;\n\t\t\t\tif(d.length) {\n\t\t\t\t\tif(animation && d.children(\".jstree-children\").length) {\n\t\t\t\t\t\td.children(\".jstree-children\").stop(true, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {\n\t\t\t\t\t\tthis.draw_children(obj);\n\t\t\t\t\t\t//d = this.get_node(obj, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(!animation) {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td[0].className = d[0].className.replace('jstree-closed', 'jstree-open');\n\t\t\t\t\t\td[0].setAttribute(\"aria-expanded\", true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td\n\t\t\t\t\t\t\t.children(\".jstree-children\").css(\"display\",\"none\").end()\n\t\t\t\t\t\t\t.removeClass(\"jstree-closed\").addClass(\"jstree-open\").attr(\"aria-expanded\", true)\n\t\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true)\n\t\t\t\t\t\t\t\t.slideDown(animation, function () {\n\t\t\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\t\t\tt.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tobj.state.opened = true;\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, true);\n\t\t\t\t}\n\t\t\t\tif(!d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name before_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is opened (if there is an animation it will not be completed yet)\n\t\t\t\t * @event\n\t\t\t\t * @name open_node.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_node', { \"node\" : obj });\n\t\t\t\tif(!animation || !d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is opened and the animation is complete\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name after_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens every parent of a node (node should be loaded)\n\t\t * @name _open_to(obj)\n\t\t * @param {mixed} obj the node to reveal\n\t\t * @private\n\t\t */\n\t\t_open_to : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = obj.parents;\n\t\t\tfor(i = 0, j = p.length; i < j; i+=1) {\n\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\tthis.open_node(p[i], false, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t},\n\t\t/**\n\t\t * closes a node, hiding its children\n\t\t * @name close_node(obj [, animation])\n\t\t * @param {mixed} obj the node to close\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger close_node.jstree, after_close.jstree\n\t\t */\n\t\tclose_node : function (obj, animation) {\n\t\t\tvar t1, t2, t, d;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.close_node(obj[t1], animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tt = this;\n\t\t\td = this.get_node(obj, true);\n\n\t\t\tobj.state.opened = false;\n\t\t\t/**\n\t\t\t * triggered when a node is closed (if there is an animation it will not be complete yet)\n\t\t\t * @event\n\t\t\t * @name close_node.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_node',{ \"node\" : obj });\n\t\t\tif(!d.length) {\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is closed and the animation is complete\n\t\t\t\t * @event\n\t\t\t\t * @name after_close.jstree\n\t\t\t\t * @param {Object} node the closed node\n\t\t\t\t */\n\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(!animation) {\n\t\t\t\t\td[0].className = d[0].className.replace('jstree-open', 'jstree-closed');\n\t\t\t\t\td.attr(\"aria-expanded\", false).children('.jstree-children').remove();\n\t\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td\n\t\t\t\t\t\t.children(\".jstree-children\").attr(\"style\",\"display:block !important\").end()\n\t\t\t\t\t\t.removeClass(\"jstree-open\").addClass(\"jstree-closed\").attr(\"aria-expanded\", false)\n\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true).slideUp(animation, function () {\n\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\td.children('.jstree-children').remove();\n\t\t\t\t\t\t\tt.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * toggles a node - closing it if it is open, opening it if it is closed\n\t\t * @name toggle_node(obj)\n\t\t * @param {mixed} obj the node to toggle\n\t\t */\n\t\ttoggle_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.toggle_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn this.open_node(obj);\n\t\t\t}\n\t\t\tif(this.is_open(obj)) {\n\t\t\t\treturn this.close_node(obj);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_all([obj, animation, original_obj])\n\t\t * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation\n\t\t * @param {jQuery} reference to the node that started the process (internal use)\n\t\t * @trigger open_all.jstree\n\t\t */\n\t\topen_all : function (obj, animation, original_obj) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;\n\t\t\tif(!dom.length) {\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tif(this.is_closed(this._model.data[obj.children_d[i]])) {\n\t\t\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.trigger('open_all', { \"node\" : obj });\n\t\t\t}\n\t\t\toriginal_obj = original_obj || dom;\n\t\t\t_this = this;\n\t\t\tdom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');\n\t\t\tdom.each(function () {\n\t\t\t\t_this.open_node(\n\t\t\t\t\tthis,\n\t\t\t\t\tfunction(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },\n\t\t\t\t\tanimation || 0\n\t\t\t\t);\n\t\t\t});\n\t\t\tif(original_obj.find('.jstree-closed').length === 0) {\n\t\t\t\t/**\n\t\t\t\t * triggered when an `open_all` call completes\n\t\t\t\t * @event\n\t\t\t\t * @name open_all.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_all', { \"node\" : this.get_node(original_obj) });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * closes all nodes within a node (or the tree), revaling their children\n\t\t * @name close_all([obj, animation])\n\t\t * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation\n\t\t * @trigger close_all.jstree\n\t\t */\n\t\tclose_all : function (obj, animation) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),\n\t\t\t\t_this = this, i, j;\n\t\t\tif(dom.length) {\n\t\t\t\tdom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');\n\t\t\t\t$(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = false;\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an `close_all` call completes\n\t\t\t * @event\n\t\t\t * @name close_all.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_all', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * checks if a node is disabled (not selectable)\n\t\t * @name is_disabled(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_disabled : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.disabled;\n\t\t},\n\t\t/**\n\t\t * enables a node - so that it can be selected\n\t\t * @name enable_node(obj)\n\t\t * @param {mixed} obj the node to enable\n\t\t * @trigger enable_node.jstree\n\t\t */\n\t\tenable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = false;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);\n\t\t\t/**\n\t\t\t * triggered when an node is enabled\n\t\t\t * @event\n\t\t\t * @name enable_node.jstree\n\t\t\t * @param {Object} node the enabled node\n\t\t\t */\n\t\t\tthis.trigger('enable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * disables a node - so that it can not be selected\n\t\t * @name disable_node(obj)\n\t\t * @param {mixed} obj the node to disable\n\t\t * @trigger disable_node.jstree\n\t\t */\n\t\tdisable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = true;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);\n\t\t\t/**\n\t\t\t * triggered when an node is disabled\n\t\t\t * @event\n\t\t\t * @name disable_node.jstree\n\t\t\t * @param {Object} node the disabled node\n\t\t\t */\n\t\t\tthis.trigger('disable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * hides a node - it is still in the structure but will not be visible\n\t\t * @name hide_node(obj)\n\t\t * @param {mixed} obj the node to hide\n\t\t * @param {Boolean} redraw internal parameter controlling if redraw is called\n\t\t * @trigger hide_node.jstree\n\t\t */\n\t\thide_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.hidden) {\n\t\t\t\tobj.state.hidden = true;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is hidden\n\t\t\t\t * @event\n\t\t\t\t * @name hide_node.jstree\n\t\t\t\t * @param {Object} node the hidden node\n\t\t\t\t */\n\t\t\t\tthis.trigger('hide_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * shows a node\n\t\t * @name show_node(obj)\n\t\t * @param {mixed} obj the node to show\n\t\t * @param {Boolean} skip_redraw internal parameter controlling if redraw is called\n\t\t * @trigger show_node.jstree\n\t\t */\n\t\tshow_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tobj.state.hidden = false;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is shown\n\t\t\t\t * @event\n\t\t\t\t * @name show_node.jstree\n\t\t\t\t * @param {Object} node the shown node\n\t\t\t\t */\n\t\t\t\tthis.trigger('show_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * hides all nodes\n\t\t * @name hide_all()\n\t\t * @trigger hide_all.jstree\n\t\t */\n\t\thide_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = true;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are hidden\n\t\t\t * @event\n\t\t\t * @name hide_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all hidden nodes\n\t\t\t */\n\t\t\tthis.trigger('hide_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * shows all nodes\n\t\t * @name show_all()\n\t\t * @trigger show_all.jstree\n\t\t */\n\t\tshow_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = false;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are shown\n\t\t\t * @event\n\t\t\t * @name show_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all shown nodes\n\t\t\t */\n\t\t\tthis.trigger('show_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * called when a node is selected by the user. Used internally.\n\t\t * @private\n\t\t * @name activate_node(obj, e)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Object} e the related event\n\t\t * @trigger activate_node.jstree, changed.jstree\n\t\t */\n\t\tactivate_node : function (obj, e) {\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!e || typeof e !== 'object') {\n\t\t\t\te = {};\n\t\t\t}\n\n\t\t\t// ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node\n\t\t\tthis._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;\n\t\t\tif(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }\n\t\t\tif(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }\n\n\t\t\tif(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {\n\t\t\t\tif(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {\n\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.deselect_all(true);\n\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\tthis._data.core.last_clicked = this.get_node(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(e.shiftKey) {\n\t\t\t\t\tvar o = this.get_node(obj).id,\n\t\t\t\t\t\tl = this._data.core.last_clicked.id,\n\t\t\t\t\t\tp = this.get_node(this._data.core.last_clicked.parent).children,\n\t\t\t\t\t\tc = false,\n\t\t\t\t\t\ti, j;\n\t\t\t\t\tfor(i = 0, j = p.length; i < j; i += 1) {\n\t\t\t\t\t\t// separate IFs work whem o and l are the same\n\t\t\t\t\t\tif(p[i] === o) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(p[i] === l) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {\n\t\t\t\t\t\t\tthis.select_node(p[i], true, false, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.deselect_node(p[i], true, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(!this.is_selected(obj)) {\n\t\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an node is clicked or intercated with by the user\n\t\t\t * @event\n\t\t\t * @name activate_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)\n\t\t\t */\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });\n\t\t},\n\t\t/**\n\t\t * applies the hover state on a node, called when a node is hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name hover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger hover_node.jstree\n\t\t */\n\t\thover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar o = this.element.find('.jstree-hovered'), t = this.element;\n\t\t\tif(o && o.length) { this.dehover_node(o); }\n\n\t\t\tobj.children('.jstree-anchor').addClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is hovered\n\t\t\t * @event\n\t\t\t * @name hover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('hover_node', { 'node' : this.get_node(obj) });\n\t\t\tsetTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);\n\t\t},\n\t\t/**\n\t\t * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name dehover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger dehover_node.jstree\n\t\t */\n\t\tdehover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || !obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.children('.jstree-anchor').removeClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is no longer hovered\n\t\t\t * @event\n\t\t\t * @name dehover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('dehover_node', { 'node' : this.get_node(obj) });\n\t\t},\n\t\t/**\n\t\t * select a node\n\t\t * @name select_node(obj [, supress_event, prevent_open])\n\t\t * @param {mixed} obj an array can be used to select multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened\n\t\t * @trigger select_node.jstree, changed.jstree\n\t\t */\n\t\tselect_node : function (obj, supress_event, prevent_open, e) {\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.select_node(obj[t1], supress_event, prevent_open, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.selected) {\n\t\t\t\tobj.state.selected = true;\n\t\t\t\tthis._data.core.selected.push(obj.id);\n\t\t\t\tif(!prevent_open) {\n\t\t\t\t\tdom = this._open_to(obj);\n\t\t\t\t}\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is selected\n\t\t\t\t * @event\n\t\t\t\t * @name select_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this select_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when selection changes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name changed.jstree\n\t\t\t\t\t * @param {Object} node\n\t\t\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect a node\n\t\t * @name deselect_node(obj [, supress_event])\n\t\t * @param {mixed} obj an array can be used to deselect multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_node.jstree, changed.jstree\n\t\t */\n\t\tdeselect_node : function (obj, supress_event, e) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.deselect_node(obj[t1], supress_event, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.selected) {\n\t\t\t\tobj.state.selected = false;\n\t\t\t\tthis._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is deselected\n\t\t\t\t * @event\n\t\t\t\t * @name deselect_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this deselect_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * select all nodes in the tree\n\t\t * @name select_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger select_all.jstree, changed.jstree\n\t\t */\n\t\tselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tthis._data.core.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are selected\n\t\t\t * @event\n\t\t\t * @name select_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('select_all', { 'selected' : this._data.core.selected });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect all selected nodes\n\t\t * @name deselect_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_all.jstree, changed.jstree\n\t\t */\n\t\tdeselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);\n\t\t\t/**\n\t\t\t * triggered when all nodes are deselected\n\t\t\t * @event\n\t\t\t * @name deselect_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * checks if a node is selected\n\t\t * @name is_selected(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_selected : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.state.selected;\n\t\t},\n\t\t/**\n\t\t * get an array of all selected nodes\n\t\t * @name get_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_selected : function (full) {\n\t\t\treturn full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();\n\t\t},\n\t\t/**\n\t\t * get an array of all top level selected nodes (ignoring children of selected nodes)\n\t\t * @name get_top_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_top_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t},\n\t\t/**\n\t\t * get an array of all bottom level selected nodes (ignoring selected parents)\n\t\t * @name get_bottom_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_bottom_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t},\n\t\t/**\n\t\t * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.\n\t\t * @name get_state()\n\t\t * @private\n\t\t * @return {Object}\n\t\t */\n\t\tget_state : function () {\n\t\t\tvar state\t= {\n\t\t\t\t'core' : {\n\t\t\t\t\t'open' : [],\n\t\t\t\t\t'scroll' : {\n\t\t\t\t\t\t'left' : this.element.scrollLeft(),\n\t\t\t\t\t\t'top' : this.element.scrollTop()\n\t\t\t\t\t},\n\t\t\t\t\t/*!\n\t\t\t\t\t'themes' : {\n\t\t\t\t\t\t'name' : this.get_theme(),\n\t\t\t\t\t\t'icons' : this._data.core.themes.icons,\n\t\t\t\t\t\t'dots' : this._data.core.themes.dots\n\t\t\t\t\t},\n\t\t\t\t\t*/\n\t\t\t\t\t'selected' : []\n\t\t\t\t}\n\t\t\t}, i;\n\t\t\tfor(i in this._model.data) {\n\t\t\t\tif(this._model.data.hasOwnProperty(i)) {\n\t\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\t\tif(this._model.data[i].state.opened) {\n\t\t\t\t\t\t\tstate.core.open.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this._model.data[i].state.selected) {\n\t\t\t\t\t\t\tstate.core.selected.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn state;\n\t\t},\n\t\t/**\n\t\t * sets the state of the tree. Used internally.\n\t\t * @name set_state(state [, callback])\n\t\t * @private\n\t\t * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.\n\t\t * @param {Function} callback an optional function to execute once the state is restored.\n\t\t * @trigger set_state.jstree\n\t\t */\n\t\tset_state : function (state, callback) {\n\t\t\tif(state) {\n\t\t\t\tif(state.core) {\n\t\t\t\t\tvar res, n, t, _this, i;\n\t\t\t\t\tif(state.core.open) {\n\t\t\t\t\t\tif(!$.isArray(state.core.open) || !state.core.open.length) {\n\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._load_nodes(state.core.open, function (nodes) {\n\t\t\t\t\t\t\t\tthis.open_node(nodes, false, 0);\n\t\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t\t}, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.scroll) {\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.left !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollLeft(state.core.scroll.left);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.top !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollTop(state.core.scroll.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete state.core.scroll;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.selected) {\n\t\t\t\t\t\t_this = this;\n\t\t\t\t\t\tthis.deselect_all();\n\t\t\t\t\t\t$.each(state.core.selected, function (i, v) {\n\t\t\t\t\t\t\t_this.select_node(v, false, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdelete state.core.selected;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(i in state) {\n\t\t\t\t\t\tif(state.hasOwnProperty(i) && i !== \"core\" && $.inArray(i, this.settings.plugins) === -1) {\n\t\t\t\t\t\t\tdelete state[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif($.isEmptyObject(state.core)) {\n\t\t\t\t\t\tdelete state.core;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif($.isEmptyObject(state)) {\n\t\t\t\t\tstate = null;\n\t\t\t\t\tif(callback) { callback.call(this); }\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a `set_state` call completes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name set_state.jstree\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('set_state');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t/**\n\t\t * refreshes the tree - all nodes are reloaded with calls to `load_node`.\n\t\t * @name refresh()\n\t\t * @param {Boolean} skip_loading an option to skip showing the loading indicator\n\t\t * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state\n\t\t * @trigger refresh.jstree\n\t\t */\n\t\trefresh : function (skip_loading, forget_state) {\n\t\t\tthis._data.core.state = forget_state === true ? {} : this.get_state();\n\t\t\tif(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }\n\t\t\tthis._cnt = 0;\n\t\t\tthis._model.data = {};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis._data.core.last_clicked = null;\n\t\t\tthis._data.core.focused = null;\n\n\t\t\tvar c = this.get_container_ul()[0].className;\n\t\t\tif(!skip_loading) {\n\t\t\t\tthis.element.html(\"<\"+\"ul class='\"+c+\"' role='group'><\"+\"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j\"+this._id+\"_loading'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\t\tthis.element.attr('aria-activedescendant','j'+this._id+'_loading');\n\t\t\t}\n\t\t\tthis.load_node($.jstree.root, function (o, s) {\n\t\t\t\tif(s) {\n\t\t\t\t\tthis.get_container_ul()[0].className = c;\n\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.set_state($.extend(true, {}, this._data.core.state), function () {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered when a `refresh` call completes\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @name refresh.jstree\n\t\t\t\t\t\t */\n\t\t\t\t\t\tthis.trigger('refresh');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._data.core.state = null;\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.\n\t\t * @name refresh_node(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @trigger refresh_node.jstree\n\t\t */\n\t\trefresh_node : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar opened = [], to_load = [], s = this._data.core.selected.concat([]);\n\t\t\tto_load.push(obj.id);\n\t\t\tif(obj.state.opened === true) { opened.push(obj.id); }\n\t\t\tthis.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });\n\t\t\tthis._load_nodes(to_load, $.proxy(function (nodes) {\n\t\t\t\tthis.open_node(opened, false, 0);\n\t\t\t\tthis.select_node(s);\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is refreshed\n\t\t\t\t * @event\n\t\t\t\t * @name refresh_node.jstree\n\t\t\t\t * @param {Object} node - the refreshed node\n\t\t\t\t * @param {Array} nodes - an array of the IDs of the nodes that were reloaded\n\t\t\t\t */\n\t\t\t\tthis.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });\n\t\t\t}, this));\n\t\t},\n\t\t/**\n\t\t * set (change) the ID of a node\n\t\t * @name set_id(obj, id)\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} id the new ID\n\t\t * @return {Boolean}\n\t\t * @trigger set_id.jstree\n\t\t */\n\t\tset_id : function (obj, id) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar i, j, m = this._model.data, old = obj.id;\n\t\t\tid = id.toString();\n\t\t\t// update parents (replace current ID with new one in children and children_d)\n\t\t\tm[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tm[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;\n\t\t\t}\n\t\t\t// update children (replace current ID with new one in parent and parents)\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tm[obj.children[i]].parent = id;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tm[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;\n\t\t\t}\n\t\t\ti = $.inArray(obj.id, this._data.core.selected);\n\t\t\tif(i !== -1) { this._data.core.selected[i] = id; }\n\t\t\t// update model and obj itself (obj.id, this._model.data[KEY])\n\t\t\ti = this.get_node(obj.id, true);\n\t\t\tif(i) {\n\t\t\t\ti.attr('id', id).children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');\n\t\t\t\tif(this.element.attr('aria-activedescendant') === obj.id) {\n\t\t\t\t\tthis.element.attr('aria-activedescendant', id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete m[obj.id];\n\t\t\tobj.id = id;\n\t\t\tobj.li_attr.id = id;\n\t\t\tm[id] = obj;\n\t\t\t/**\n\t\t\t * triggered when a node id value is changed\n\t\t\t * @event\n\t\t\t * @name set_id.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} old the old id\n\t\t\t */\n\t\t\tthis.trigger('set_id',{ \"node\" : obj, \"new\" : obj.id, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the text value of a node\n\t\t * @name get_text(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @return {String}\n\t\t */\n\t\tget_text : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.text;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node. Used internally, please use `rename_node(obj, val)`.\n\t\t * @private\n\t\t * @name set_text(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to set the text on multiple nodes\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger set_text.jstree\n\t\t */\n\t\tset_text : function (obj, val) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_text(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tobj.text = val;\n\t\t\tif(this.get_node(obj, true).length) {\n\t\t\t\tthis.redraw_node(obj.id);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node text value is changed\n\t\t\t * @event\n\t\t\t * @name set_text.jstree\n\t\t\t * @param {Object} obj\n\t\t\t * @param {String} text the new value\n\t\t\t */\n\t\t\tthis.trigger('set_text',{ \"obj\" : obj, \"text\" : val });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * gets a JSON representation of a node (or the whole tree)\n\t\t * @name get_json([obj, options])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Object} options\n\t\t * @param  {Boolean} options.no_state do not return state information\n\t\t * @param  {Boolean} options.no_id do not return ID\n\t\t * @param  {Boolean} options.no_children do not include children\n\t\t * @param  {Boolean} options.no_data do not include node data\n\t\t * @param  {Boolean} options.flat return flat JSON instead of nested\n\t\t * @return {Object}\n\t\t */\n\t\tget_json : function (obj, options, flat) {\n\t\t\tobj = this.get_node(obj || $.jstree.root);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(options && options.flat && !flat) { flat = []; }\n\t\t\tvar tmp = {\n\t\t\t\t'id' : obj.id,\n\t\t\t\t'text' : obj.text,\n\t\t\t\t'icon' : this.get_icon(obj),\n\t\t\t\t'li_attr' : $.extend(true, {}, obj.li_attr),\n\t\t\t\t'a_attr' : $.extend(true, {}, obj.a_attr),\n\t\t\t\t'state' : {},\n\t\t\t\t'data' : options && options.no_data ? false : $.extend(true, {}, obj.data)\n\t\t\t\t//( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),\n\t\t\t}, i, j;\n\t\t\tif(options && options.flat) {\n\t\t\t\ttmp.parent = obj.parent;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.children = [];\n\t\t\t}\n\t\t\tif(!options || !options.no_state) {\n\t\t\t\tfor(i in obj.state) {\n\t\t\t\t\tif(obj.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = obj.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(options && options.no_id) {\n\t\t\t\tdelete tmp.id;\n\t\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t\t}\n\t\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(options && options.flat && obj.id !== $.jstree.root) {\n\t\t\t\tflat.push(tmp);\n\t\t\t}\n\t\t\tif(!options || !options.no_children) {\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(options && options.flat) {\n\t\t\t\t\t\tthis.get_json(obj.children[i], options, flat);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp.children.push(this.get_json(obj.children[i], options));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);\n\t\t},\n\t\t/**\n\t\t * create a new node (do not confuse with load_node)\n\t\t * @name create_node([par, node, pos, callback, is_loaded])\n\t\t * @param  {mixed}   par       the parent node (to create a root node use either \"#\" (string) or `null`)\n\t\t * @param  {mixed}   node      the data for the new node (a valid JSON object, or a simple string with the name)\n\t\t * @param  {mixed}   pos       the index at which to insert the node, \"first\" and \"last\" are also supported, default is \"last\"\n\t\t * @param  {Function} callback a function to be called once the node is created\n\t\t * @param  {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded\n\t\t * @return {String}            the ID of the newly create node\n\t\t * @trigger model.jstree, create_node.jstree\n\t\t */\n\t\tcreate_node : function (par, node, pos, callback, is_loaded) {\n\t\t\tif(par === null) { par = $.jstree.root; }\n\t\t\tpar = this.get_node(par);\n\t\t\tif(!par) { return false; }\n\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });\n\t\t\t}\n\t\t\tif(!node) { node = { \"text\" : this.get_string('New node') }; }\n\t\t\tif(typeof node === \"string\") { node = { \"text\" : node }; }\n\t\t\tif(node.text === undefined) { node.text = this.get_string('New node'); }\n\t\t\tvar tmp, dpc, i, j;\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children);\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children) + 1;\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > par.children.length) { pos = par.children.length; }\n\t\t\tif(!node.id) { node.id = true; }\n\t\t\tif(!this.check(\"create_node\", node, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, par.id, par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : par.id });\n\n\t\t\tpar.children_d = par.children_d.concat(dpc);\n\t\t\tfor(i = 0, j = par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tnode = tmp;\n\t\t\ttmp = [];\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\ttmp[i >= pos ? i+1 : i] = par.children[i];\n\t\t\t}\n\t\t\ttmp[pos] = node.id;\n\t\t\tpar.children = tmp;\n\n\t\t\tthis.redraw_node(par, true);\n\t\t\tif(callback) { callback.call(this, this.get_node(node)); }\n\t\t\t/**\n\t\t\t * triggered when a node is created\n\t\t\t * @event\n\t\t\t * @name create_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the new node among the parent's children\n\t\t\t */\n\t\t\tthis.trigger('create_node', { \"node\" : this.get_node(node), \"parent\" : par.id, \"position\" : pos });\n\t\t\treturn node.id;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node\n\t\t * @name rename_node(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to rename multiple nodes to the same name\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger rename_node.jstree\n\t\t */\n\t\trename_node : function (obj, val) {\n\t\t\tvar t1, t2, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.rename_node(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.text;\n\t\t\tif(!this.check(\"rename_node\", obj, this.get_parent(obj), val)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))\n\t\t\t/**\n\t\t\t * triggered when a node is renamed\n\t\t\t * @event\n\t\t\t * @name rename_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} text the new value\n\t\t\t * @param {String} old the old value\n\t\t\t */\n\t\t\tthis.trigger('rename_node', { \"node\" : obj, \"text\" : val, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * remove a node\n\t\t * @name delete_node(obj)\n\t\t * @param  {mixed} obj the node, you can pass an array to delete multiple nodes\n\t\t * @return {Boolean}\n\t\t * @trigger delete_node.jstree, changed.jstree\n\t\t */\n\t\tdelete_node : function (obj) {\n\t\t\tvar t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.delete_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tpar = this.get_node(obj.parent);\n\t\t\tpos = $.inArray(obj.id, par.children);\n\t\t\tc = false;\n\t\t\tif(!this.check(\"delete_node\", obj, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(pos !== -1) {\n\t\t\t\tpar.children = $.vakata.array_remove(par.children, pos);\n\t\t\t}\n\t\t\ttmp = obj.children_d.concat([]);\n\t\t\ttmp.push(obj.id);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tif(this._model.data[tmp[k]].state.selected) {\n\t\t\t\t\tc = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (c) {\n\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node is deleted\n\t\t\t * @event\n\t\t\t * @name delete_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t */\n\t\t\tthis.trigger('delete_node', { \"node\" : obj, \"parent\" : par.id });\n\t\t\tif(c) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tdelete this._model.data[tmp[k]];\n\t\t\t}\n\t\t\tif($.inArray(this._data.core.focused, tmp) !== -1) {\n\t\t\t\tthis._data.core.focused = null;\n\t\t\t\ttop = this.element[0].scrollTop;\n\t\t\t\tlft = this.element[0].scrollLeft;\n\t\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\t\tif (this._model.data[$.jstree.root].children[0]) {\n\t\t\t\t\t\tthis.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.get_node(par, true).children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\tthis.element[0].scrollTop  = top;\n\t\t\t\tthis.element[0].scrollLeft = lft;\n\t\t\t}\n\t\t\tthis.redraw_node(par, true);\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * check if an operation is premitted on the tree. Used internally.\n\t\t * @private\n\t\t * @name check(chk, obj, par, pos)\n\t\t * @param  {String} chk the operation to check, can be \"create_node\", \"rename_node\", \"delete_node\", \"copy_node\" or \"move_node\"\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {mixed} par the parent\n\t\t * @param  {mixed} pos the position to insert at, or if \"rename_node\" - the new name\n\t\t * @param  {mixed} more some various additional information, for example if a \"move_node\" operations is triggered by DND this will be the hovered node\n\t\t * @return {Boolean}\n\t\t */\n\t\tcheck : function (chk, obj, par, pos, more) {\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,\n\t\t\t\tchc = this.settings.core.check_callback;\n\t\t\tif(chk === \"move_node\" || chk === \"copy_node\") {\n\t\t\t\tif((!more || !more.is_multi) && (obj.id === par.id || (chk === \"move_node\" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp && tmp.data) { tmp = tmp.data; }\n\t\t\tif(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {\n\t\t\t\tif(tmp.functions[chk] === false) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t}\n\t\t\t\treturn tmp.functions[chk];\n\t\t\t}\n\t\t\tif(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {\n\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the last error\n\t\t * @name last_error()\n\t\t * @return {Object}\n\t\t */\n\t\tlast_error : function () {\n\t\t\treturn this._data.core.last_error;\n\t\t},\n\t\t/**\n\t\t * move a node to a new parent\n\t\t * @name move_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to move, pass an array to move multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger move_node.jstree\n\t\t */\n\t\tmove_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\t\t\told_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(is_multi) {\n\t\t\t\tif((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\tif(old_ins) { old_ins.delete_node(obj); }\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//var m = this._model.data;\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"move_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.parent === new_par.id) {\n\t\t\t\tdpc = new_par.children.concat();\n\t\t\t\ttmp = $.inArray(obj.id, dpc);\n\t\t\t\tif(tmp !== -1) {\n\t\t\t\t\tdpc = $.vakata.array_remove(dpc, tmp);\n\t\t\t\t\tif(pos > tmp) { pos--; }\n\t\t\t\t}\n\t\t\t\ttmp = [];\n\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\ttmp[i >= pos ? i+1 : i] = dpc[i];\n\t\t\t\t}\n\t\t\t\ttmp[pos] = obj.id;\n\t\t\t\tnew_par.children = tmp;\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// clean old parent and up\n\t\t\t\ttmp = obj.children_d.concat();\n\t\t\t\ttmp.push(obj.id);\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tdpc = [];\n\t\t\t\t\tp = old_ins._model.data[obj.parents[i]].children_d;\n\t\t\t\t\tfor(k = 0, l = p.length; k < l; k++) {\n\t\t\t\t\t\tif($.inArray(p[k], tmp) === -1) {\n\t\t\t\t\t\t\tdpc.push(p[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\told_ins._model.data[obj.parents[i]].children_d = dpc;\n\t\t\t\t}\n\t\t\t\told_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);\n\n\t\t\t\t// insert into new parent and up\n\t\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);\n\t\t\t\t}\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t\t}\n\t\t\t\tdpc[pos] = obj.id;\n\t\t\t\tnew_par.children = dpc;\n\t\t\t\tnew_par.children_d.push(obj.id);\n\t\t\t\tnew_par.children_d = new_par.children_d.concat(obj.children_d);\n\n\t\t\t\t// update object\n\t\t\t\tobj.parent = new_par.id;\n\t\t\t\ttmp = new_par.parents.concat();\n\t\t\t\ttmp.unshift(new_par.id);\n\t\t\t\tp = obj.parents.length;\n\t\t\t\tobj.parents = tmp;\n\n\t\t\t\t// update object children\n\t\t\t\ttmp = tmp.concat();\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);\n\t\t\t\t\tArray.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);\n\t\t\t\t}\n\n\t\t\t\tif(old_par === $.jstree.root || new_par.id === $.jstree.root) {\n\t\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t\t}\n\t\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\t\tthis._node_changed(old_par);\n\t\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\t}\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, obj, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is moved\n\t\t\t * @event\n\t\t\t * @name move_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the old position of the node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('move_node', { \"node\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn obj.id;\n\t\t},\n\t\t/**\n\t\t * copy a node to a new parent\n\t\t * @name copy_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to copy, pass an array to copy multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger model.jstree copy_node.jstree\n\t\t */\n\t\tcopy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"copy_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tnode = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;\n\t\t\tif(!node) { return false; }\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tif(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : new_par.id });\n\n\t\t\t// insert into new parent and up\n\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tdpc = [];\n\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t}\n\t\t\tdpc[pos] = tmp.id;\n\t\t\tnew_par.children = dpc;\n\t\t\tnew_par.children_d.push(tmp.id);\n\t\t\tnew_par.children_d = new_par.children_d.concat(tmp.children_d);\n\n\t\t\tif(new_par.id === $.jstree.root) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t}\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, tmp, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is copied\n\t\t\t * @event\n\t\t\t * @name copy_node.jstree\n\t\t\t * @param {Object} node the copied node\n\t\t\t * @param {Object} original the original node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the position of the original node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('copy_node', { \"node\" : tmp, \"original\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * cut a node (a later call to `paste(obj)` would move the node)\n\t\t * @name cut(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger cut.jstree\n\t\t */\n\t\tcut : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'move_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for moving\n\t\t\t * @event\n\t\t\t * @name cut.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('cut', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * copy a node (a later call to `paste(obj)` would copy the node)\n\t\t * @name copy(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger copy.jstree\n\t\t */\n\t\tcopy : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'copy_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for copying\n\t\t\t * @event\n\t\t\t * @name copy.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('copy', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * get the current buffer (any nodes that are waiting for a paste operation)\n\t\t * @name get_buffer()\n\t\t * @return {Object} an object consisting of `mode` (\"copy_node\" or \"move_node\"), `node` (an array of objects) and `inst` (the instance)\n\t\t */\n\t\tget_buffer : function () {\n\t\t\treturn { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };\n\t\t},\n\t\t/**\n\t\t * check if there is something in the buffer to paste\n\t\t * @name can_paste()\n\t\t * @return {Boolean}\n\t\t */\n\t\tcan_paste : function () {\n\t\t\treturn ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];\n\t\t},\n\t\t/**\n\t\t * copy or move the previously cut or copied nodes to a new parent\n\t\t * @name paste(obj [, pos])\n\t\t * @param  {mixed} obj the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer, \"first\" and \"last\" are supported), defaults to integer `0`\n\t\t * @trigger paste.jstree\n\t\t */\n\t\tpaste : function (obj, pos) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }\n\t\t\tif(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {\n\t\t\t\t/**\n\t\t\t\t * triggered when paste is invoked\n\t\t\t\t * @event\n\t\t\t\t * @name paste.jstree\n\t\t\t\t * @param {String} parent the ID of the receiving node\n\t\t\t\t * @param {Array} node the nodes in the buffer\n\t\t\t\t * @param {String} mode the performed operation - \"copy_node\" or \"move_node\"\n\t\t\t\t */\n\t\t\t\tthis.trigger('paste', { \"parent\" : obj.id, \"node\" : ccp_node, \"mode\" : ccp_mode });\n\t\t\t}\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t},\n\t\t/**\n\t\t * clear the buffer of previously copied or cut nodes\n\t\t * @name clear_buffer()\n\t\t * @trigger clear_buffer.jstree\n\t\t */\n\t\tclear_buffer : function () {\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t\t/**\n\t\t\t * triggered when the copy / cut buffer is cleared\n\t\t\t * @event\n\t\t\t * @name clear_buffer.jstree\n\t\t\t */\n\t\t\tthis.trigger('clear_buffer');\n\t\t},\n\t\t/**\n\t\t * put a node in edit mode (input field to rename the node)\n\t\t * @name edit(obj [, default_text, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)\n\t\t * @param  {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text\n\t\t */\n\t\tedit : function (obj, default_text, callback) {\n\t\t\tvar rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(this.settings.core.check_callback === false) {\n\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Could not edit node because of check_callback' };\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttmp = obj;\n\t\t\tdefault_text = typeof default_text === 'string' ? default_text : obj.text;\n\t\t\tthis.set_text(obj, \"\");\n\t\t\tobj = this._open_to(obj);\n\t\t\ttmp.text = default_text;\n\n\t\t\trtl = this._data.core.rtl;\n\t\t\tw  = this.element.width();\n\t\t\tthis._data.core.focused = tmp.id;\n\t\t\ta  = obj.children('.jstree-anchor').focus();\n\t\t\ts  = $('<span>');\n\t\t\t/*!\n\t\t\toi = obj.children(\"i:visible\"),\n\t\t\tai = a.children(\"i:visible\"),\n\t\t\tw1 = oi.width() * oi.length,\n\t\t\tw2 = ai.width() * ai.length,\n\t\t\t*/\n\t\t\tt  = default_text;\n\t\t\th1 = $(\"<\"+\"div />\", { css : { \"position\" : \"absolute\", \"top\" : \"-200px\", \"left\" : (rtl ? \"0px\" : \"-1000px\"), \"visibility\" : \"hidden\" } }).appendTo(\"body\");\n\t\t\th2 = $(\"<\"+\"input />\", {\n\t\t\t\t\t\t\"value\" : t,\n\t\t\t\t\t\t\"class\" : \"jstree-rename-input\",\n\t\t\t\t\t\t// \"size\" : t.length,\n\t\t\t\t\t\t\"css\" : {\n\t\t\t\t\t\t\t\"padding\" : \"0\",\n\t\t\t\t\t\t\t\"border\" : \"1px solid silver\",\n\t\t\t\t\t\t\t\"box-sizing\" : \"border-box\",\n\t\t\t\t\t\t\t\"display\" : \"inline-block\",\n\t\t\t\t\t\t\t\"height\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"lineHeight\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"width\" : \"150px\" // will be set a bit further down\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"blur\" : $.proxy(function (e) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tvar i = s.children(\".jstree-rename-input\"),\n\t\t\t\t\t\t\t\tv = i.val(),\n\t\t\t\t\t\t\t\tf = this.settings.core.force_text,\n\t\t\t\t\t\t\t\tnv;\n\t\t\t\t\t\t\tif(v === \"\") { v = t; }\n\t\t\t\t\t\t\th1.remove();\n\t\t\t\t\t\t\ts.replaceWith(a);\n\t\t\t\t\t\t\ts.remove();\n\t\t\t\t\t\t\tt = f ? t : $('<div></div>').append($.parseHTML(t)).html();\n\t\t\t\t\t\t\tthis.set_text(obj, t);\n\t\t\t\t\t\t\tnv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());\n\t\t\t\t\t\t\tif(!nv) {\n\t\t\t\t\t\t\t\tthis.set_text(obj, t); // move this up? and fix #483\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\t\t\t\tvar node = this.get_node(tmp.id, true);\n\t\t\t\t\t\t\t\tif(node.length) {\n\t\t\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\t\t\tnode.children('.jstree-anchor').focus();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\tif(callback) {\n\t\t\t\t\t\t\t\tcallback.call(this, tmp, nv, cancel);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th2 = null;\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\"keydown\" : function (e) {\n\t\t\t\t\t\t\tvar key = e.which;\n\t\t\t\t\t\t\tif(key === 27) {\n\t\t\t\t\t\t\t\tcancel = true;\n\t\t\t\t\t\t\t\tthis.value = t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {\n\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.blur();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"click\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"mousedown\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"keyup\" : function (e) {\n\t\t\t\t\t\t\th2.width(Math.min(h1.text(\"pW\" + this.value).width(),w));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"keypress\" : function(e) {\n\t\t\t\t\t\t\tif(e.which === 13) { return false; }\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tfn = {\n\t\t\t\t\t\tfontFamily\t\t: a.css('fontFamily')\t\t|| '',\n\t\t\t\t\t\tfontSize\t\t: a.css('fontSize')\t\t\t|| '',\n\t\t\t\t\t\tfontWeight\t\t: a.css('fontWeight')\t\t|| '',\n\t\t\t\t\t\tfontStyle\t\t: a.css('fontStyle')\t\t|| '',\n\t\t\t\t\t\tfontStretch\t\t: a.css('fontStretch')\t\t|| '',\n\t\t\t\t\t\tfontVariant\t\t: a.css('fontVariant')\t\t|| '',\n\t\t\t\t\t\tletterSpacing\t: a.css('letterSpacing')\t|| '',\n\t\t\t\t\t\twordSpacing\t\t: a.css('wordSpacing')\t\t|| ''\n\t\t\t\t};\n\t\t\ts.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);\n\t\t\ta.replaceWith(s);\n\t\t\th1.css(fn);\n\t\t\th2.css(fn).width(Math.min(h1.text(\"pW\" + h2[0].value).width(),w))[0].select();\n\t\t\t$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {\n\t\t\t\tif (h2 && e.target !== h2) {\n\t\t\t\t\t$(h2).blur();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * changes the theme\n\t\t * @name set_theme(theme_name [, theme_url])\n\t\t * @param {String} theme_name the name of the new theme to apply\n\t\t * @param {mixed} theme_url  the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.\n\t\t * @trigger set_theme.jstree\n\t\t */\n\t\tset_theme : function (theme_name, theme_url) {\n\t\t\tif(!theme_name) { return false; }\n\t\t\tif(theme_url === true) {\n\t\t\t\tvar dir = this.settings.core.themes.dir;\n\t\t\t\tif(!dir) { dir = $.jstree.path + '/themes'; }\n\t\t\t\ttheme_url = dir + '/' + theme_name + '/style.css';\n\t\t\t}\n\t\t\tif(theme_url && $.inArray(theme_url, themes_loaded) === -1) {\n\t\t\t\t$('head').append('<'+'link rel=\"stylesheet\" href=\"' + theme_url + '\" type=\"text/css\" />');\n\t\t\t\tthemes_loaded.push(theme_url);\n\t\t\t}\n\t\t\tif(this._data.core.themes.name) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name);\n\t\t\t}\n\t\t\tthis._data.core.themes.name = theme_name;\n\t\t\tthis.element.addClass('jstree-' + theme_name);\n\t\t\tthis.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');\n\t\t\t/**\n\t\t\t * triggered when a theme is set\n\t\t\t * @event\n\t\t\t * @name set_theme.jstree\n\t\t\t * @param {String} theme the new theme\n\t\t\t */\n\t\t\tthis.trigger('set_theme', { 'theme' : theme_name });\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme name\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme : function () { return this._data.core.themes.name; },\n\t\t/**\n\t\t * changes the theme variant (if the theme has variants)\n\t\t * @name set_theme_variant(variant_name)\n\t\t * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)\n\t\t */\n\t\tset_theme_variant : function (variant_name) {\n\t\t\tif(this._data.core.themes.variant) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t\tthis._data.core.themes.variant = variant_name;\n\t\t\tif(variant_name) {\n\t\t\t\tthis.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme variant\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme_variant : function () { return this._data.core.themes.variant; },\n\t\t/**\n\t\t * shows a striped background on the container (if the theme supports it)\n\t\t * @name show_stripes()\n\t\t */\n\t\tshow_stripes : function () { this._data.core.themes.stripes = true; this.get_container_ul().addClass(\"jstree-striped\"); },\n\t\t/**\n\t\t * hides the striped background on the container\n\t\t * @name hide_stripes()\n\t\t */\n\t\thide_stripes : function () { this._data.core.themes.stripes = false; this.get_container_ul().removeClass(\"jstree-striped\"); },\n\t\t/**\n\t\t * toggles the striped background on the container\n\t\t * @name toggle_stripes()\n\t\t */\n\t\ttoggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },\n\t\t/**\n\t\t * shows the connecting dots (if the theme supports it)\n\t\t * @name show_dots()\n\t\t */\n\t\tshow_dots : function () { this._data.core.themes.dots = true; this.get_container_ul().removeClass(\"jstree-no-dots\"); },\n\t\t/**\n\t\t * hides the connecting dots\n\t\t * @name hide_dots()\n\t\t */\n\t\thide_dots : function () { this._data.core.themes.dots = false; this.get_container_ul().addClass(\"jstree-no-dots\"); },\n\t\t/**\n\t\t * toggles the connecting dots\n\t\t * @name toggle_dots()\n\t\t */\n\t\ttoggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },\n\t\t/**\n\t\t * show the node icons\n\t\t * @name show_icons()\n\t\t */\n\t\tshow_icons : function () { this._data.core.themes.icons = true; this.get_container_ul().removeClass(\"jstree-no-icons\"); },\n\t\t/**\n\t\t * hide the node icons\n\t\t * @name hide_icons()\n\t\t */\n\t\thide_icons : function () { this._data.core.themes.icons = false; this.get_container_ul().addClass(\"jstree-no-icons\"); },\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_icons()\n\t\t */\n\t\ttoggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },\n\t\t/**\n\t\t * set the node icon for a node\n\t\t * @name set_icon(obj, icon)\n\t\t * @param {mixed} obj\n\t\t * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t */\n\t\tset_icon : function (obj, icon) {\n\t\t\tvar t1, t2, dom, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_icon(obj[t1], icon);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.icon;\n\t\t\tobj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;\n\t\t\tdom = this.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\");\n\t\t\tif(icon === false) {\n\t\t\t\tthis.hide_icon(obj);\n\t\t\t}\n\t\t\telse if(icon === true || icon === null || icon === undefined || icon === '') {\n\t\t\t\tdom.removeClass('jstree-themeicon-custom ' + old).css(\"background\",\"\").removeAttr(\"rel\");\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse if(icon.indexOf(\"/\") === -1 && icon.indexOf(\".\") === -1) {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass(icon + ' jstree-themeicon-custom').attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass('jstree-themeicon-custom').css(\"background\", \"url('\" + icon + \"') center center no-repeat\").attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the node icon for a node\n\t\t * @name get_icon(obj)\n\t\t * @param {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_icon : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.icon;\n\t\t},\n\t\t/**\n\t\t * hide the icon on an individual node\n\t\t * @name hide_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\thide_icon : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tobj.icon = false;\n\t\t\tthis.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\").addClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * show the icon on an individual node\n\t\t * @name show_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\tshow_icon : function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tobj.icon = dom.length ? dom.children(\".jstree-anchor\").children(\".jstree-themeicon\").attr('rel') : true;\n\t\t\tif(!obj.icon) { obj.icon = true; }\n\t\t\tdom.children(\".jstree-anchor\").children(\".jstree-themeicon\").removeClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t// helpers\n\t$.vakata = {};\n\t// collect attributes\n\t$.vakata.attributes = function(node, with_values) {\n\t\tnode = $(node)[0];\n\t\tvar attr = with_values ? {} : [];\n\t\tif(node && node.attributes) {\n\t\t\t$.each(node.attributes, function (i, v) {\n\t\t\t\tif($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }\n\t\t\t\tif(v.value !== null && $.trim(v.value) !== '') {\n\t\t\t\t\tif(with_values) { attr[v.name] = v.value; }\n\t\t\t\t\telse { attr.push(v.name); }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn attr;\n\t};\n\t$.vakata.array_unique = function(array) {\n\t\tvar a = [], i, j, l, o = {};\n\t\tfor(i = 0, l = array.length; i < l; i++) {\n\t\t\tif(o[array[i]] === undefined) {\n\t\t\t\ta.push(array[i]);\n\t\t\t\to[array[i]] = true;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove = function(array, from) {\n\t\tarray.splice(from, 1);\n\t\treturn array;\n\t\t//var rest = array.slice((to || from) + 1 || array.length);\n\t\t//array.length = from < 0 ? array.length + from : from;\n\t\t//array.push.apply(array, rest);\n\t\t//return array;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove_item = function(array, item) {\n\t\tvar tmp = $.inArray(item, array);\n\t\treturn tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;\n\t};\n\t$.vakata.array_filter = function(c,a,b,d,e) {\n\t\tif (c.filter) {\n\t\t\treturn c.filter(a, b);\n\t\t}\n\t\td=[];\n\t\tfor (e in c) {\n\t\t\tif (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {\n\t\t\t\td.push(c[e]);\n\t\t\t}\n\t\t}\n\t\treturn d;\n\t};\n\n\n/**\n * ### Changed plugin\n *\n * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.\n */\n\n\t$.jstree.plugins.changed = function (options, parent) {\n\t\tvar last = [];\n\t\tthis.trigger = function (ev, data) {\n\t\t\tvar i, j;\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif(ev.replace('.jstree','') === 'changed') {\n\t\t\t\tdata.changed = { selected : [], deselected : [] };\n\t\t\t\tvar tmp = {};\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\ttmp[last[i]] = 1;\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\tif(!tmp[data.selected[i]]) {\n\t\t\t\t\t\tdata.changed.selected.push(data.selected[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp[data.selected[i]] = 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\tif(tmp[last[i]] === 1) {\n\t\t\t\t\t\tdata.changed.deselected.push(last[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlast = data.selected.slice();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when selection changes (the \"changed\" plugin enhances the original event with more data)\n\t\t\t * @event\n\t\t\t * @name changed.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event\n\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t * @plugin changed\n\t\t\t */\n\t\t\tparent.trigger.call(this, ev, data);\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tlast = [];\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n/**\n * ### Checkbox plugin\n *\n * This plugin renders checkbox icons in front of each node, making multiple selection much easier.\n * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.\n */\n\n\tvar _i = document.createElement('I');\n\t_i.className = 'jstree-icon jstree-checkbox';\n\t_i.setAttribute('role', 'presentation');\n\t/**\n\t * stores all defaults for the checkbox plugin\n\t * @name $.jstree.defaults.checkbox\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.checkbox = {\n\t\t/**\n\t\t * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.visible\n\t\t * @plugin checkbox\n\t\t */\n\t\tvisible\t\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.three_state\n\t\t * @plugin checkbox\n\t\t */\n\t\tthree_state\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.whole_node\n\t\t * @plugin checkbox\n\t\t */\n\t\twhole_node\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.keep_selected_style\n\t\t * @plugin checkbox\n\t\t */\n\t\tkeep_selected_style\t: true,\n\t\t/**\n\t\t * This setting controls how cascading and undetermined nodes are applied.\n\t\t * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.\n\t\t * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.\n\t\t * @name $.jstree.defaults.checkbox.cascade\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade\t\t\t\t: '',\n\t\t/**\n\t\t * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.\n\t\t * @name $.jstree.defaults.checkbox.tie_selection\n\t\t * @plugin checkbox\n\t\t */\n\t\ttie_selection\t\t: true\n\t};\n\t$.jstree.plugins.checkbox = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis._data.checkbox.uto = false;\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tif(this.settings.checkbox.three_state) {\n\t\t\t\tthis.settings.checkbox.cascade = 'up+down+undetermined';\n\t\t\t}\n\t\t\tthis.element\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis._data.checkbox.visible = this.settings.checkbox.visible;\n\t\t\t\t\t\tif(!this.settings.checkbox.keep_selected_style) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-no-clicked');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.settings.checkbox.tie_selection) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-selection');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();\n\t\t\t\t\t}, this));\n\t\t\tif(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {\n\t\t\t\t\t\t\t// only if undetermined is in setting\n\t\t\t\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\ti, j;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tm[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);\n\t\t\t\t\t\t\tif(m[dpc[i]].state.checked) {\n\t\t\t\t\t\t\t\tthis._data.checkbox.selected.push(dpc[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\t\t\tc, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;\n\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tm[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tif(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\t\tfor(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\tm[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tif(!m[p.children_d[i]].children.length) {\n\t\t\t\t\t\t\t\t\t\tchd.push(m[p.children_d[i]].parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchd = $.vakata.array_unique(chd);\n\t\t\t\t\t\t\t\tfor(k = 0, l = chd.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tp = m[chd[k]];\n\t\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar obj = data.node,\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tpar = this.get_node(obj.parent),\n\t\t\t\t\t\t\t\tdom = this.get_node(obj, true),\n\t\t\t\t\t\t\t\ti, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));\n\t\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\ttmp = m[obj.children_d[i]];\n\t\t\t\t\t\t\t\t\ttmp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\twhile(par && par.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[par.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\tpar.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(par, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply down (process .children separately?)\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1 && dom.length) {\n\t\t\t\t\t\t\t\tdom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar obj = this.get_node($.jstree.root),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\ttmp = m[obj.children_d[i]];\n\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar obj = data.node,\n\t\t\t\t\t\t\t\tdom = this.get_node(obj, true),\n\t\t\t\t\t\t\t\ti, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\tif(obj && obj.original && obj.original.state && obj.original.state.undetermined) {\n\t\t\t\t\t\t\t\tobj.original.state.undetermined = false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\ttmp = this._model.data[obj.children_d[i]];\n\t\t\t\t\t\t\t\t\ttmp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\ttmp = this._model.data[obj.parents[i]];\n\t\t\t\t\t\t\t\t\ttmp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(obj.parents[i], true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttmp = [];\n\t\t\t\t\t\t\tfor(i = 0, j = this._data[ t ? 'core' : 'checkbox' ].selected.length; i < j; i++) {\n\t\t\t\t\t\t\t\t// apply down + apply up\n\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\t(s.indexOf('down') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.children_d) === -1) &&\n\t\t\t\t\t\t\t\t\t(s.indexOf('up') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.parents) === -1)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\ttmp.push(this._data[ t ? 'core' : 'checkbox' ].selected[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(tmp);\n\n\t\t\t\t\t\t\t// apply down (process .children separately?)\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1 && dom.length) {\n\t\t\t\t\t\t\t\tdom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('delete_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar p = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, c, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on('move_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar is_multi = data.is_multi,\n\t\t\t\t\t\t\t\told_par = data.old_parent,\n\t\t\t\t\t\t\t\tnew_par = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tp, c, i, j, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\tif(!is_multi) {\n\t\t\t\t\t\t\t\tp = this.get_node(old_par);\n\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = new_par;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\tif(!p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * set the undetermined state where and if necessary. Used internally.\n\t\t * @private\n\t\t * @name _undetermined()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis._undetermined = function () {\n\t\t\tif(this.element === null) { return; }\n\t\t\tvar i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this;\n\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\tif(m[s[i]] && m[s[i]].parents) {\n\t\t\t\t\tfor(k = 0, l = m[s[i]].parents.length; k < l; k++) {\n\t\t\t\t\t\tif(o[m[s[i]].parents[k]] === undefined && m[s[i]].parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\to[m[s[i]].parents[k]] = true;\n\t\t\t\t\t\t\tp.push(m[s[i]].parents[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt for server side undetermined state\n\t\t\tthis.element.find('.jstree-closed').not(':has(.jstree-children)')\n\t\t\t\t.each(function () {\n\t\t\t\t\tvar tmp = tt.get_node(this), tmp2;\n\t\t\t\t\tif(!tmp.state.loaded) {\n\t\t\t\t\t\tif(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {\n\t\t\t\t\t\t\tif(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\to[tmp.id] = true;\n\t\t\t\t\t\t\t\tp.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(k = 0, l = tmp.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\tif(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp.parents[k]] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp.parents[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = tmp.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp2 = m[tmp.children_d[i]];\n\t\t\t\t\t\t\tif(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {\n\t\t\t\t\t\t\t\tif(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp2.id] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp2.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor(k = 0, l = tmp2.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tif(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\to[tmp2.parents[k]] = true;\n\t\t\t\t\t\t\t\t\t\tp.push(tmp2.parents[k]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tthis.element.find('.jstree-undetermined').removeClass('jstree-undetermined');\n\t\t\tfor(i = 0, j = p.length; i < j; i++) {\n\t\t\t\tif(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\ts = this.get_node(p[i], true);\n\t\t\t\t\tif(s && s.length) {\n\t\t\t\t\t\ts.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, is_callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar i, j, tmp = null, icon = null;\n\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(tmp) {\n\t\t\t\t\tif(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }\n\t\t\t\t\ticon = _i.cloneNode(false);\n\t\t\t\t\tif(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }\n\t\t\t\t\ttmp.insertBefore(icon, tmp.childNodes[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t\t/**\n\t\t * show the node checkbox icons\n\t\t * @name show_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * hide the node checkbox icons\n\t\t * @name hide_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };\n\t\t/**\n\t\t * checks if a node is in an undetermined state\n\t\t * @name is_undetermined(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tthis.is_undetermined = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tvar s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;\n\t\t\tif(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.loaded && obj.original.state.undetermined === true) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tif($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * disable a node's checkbox\n\t\t * @name disable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger disable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.disable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = true;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is disabled\n\t\t\t\t * @event\n\t\t\t\t * @name disable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('disable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * enable a node's checkbox\n\t\t * @name disable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger enable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.enable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = false;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is enabled\n\t\t\t\t * @event\n\t\t\t\t * @name enable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('enable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif($(e.target).hasClass('jstree-checkbox-disabled')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\te.ctrlKey = true;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\treturn parent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_checked(obj)) {\n\t\t\t\tthis.uncheck_node(obj, e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.check_node(obj, e);\n\t\t\t}\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj) });\n\t\t};\n\n\t\t/**\n\t\t * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)\n\t\t * @name check_node(obj)\n\t\t * @param {mixed} obj an array can be used to check multiple nodes\n\t\t * @trigger check_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.check_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checked) {\n\t\t\t\tobj.state.checked = true;\n\t\t\t\tthis._data.checkbox.selected.push(obj.id);\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').addClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is checked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name check_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this check_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)\n\t\t * @name uncheck_node(obj)\n\t\t * @param {mixed} obj an array can be used to uncheck multiple nodes\n\t\t * @trigger uncheck_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.uncheck_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checked) {\n\t\t\t\tobj.state.checked = false;\n\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').removeClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name uncheck_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this uncheck_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)\n\t\t * @name check_all()\n\t\t * @trigger check_all.jstree, changed.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tthis._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name check_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('check_all', { 'selected' : this._data.checkbox.selected });\n\t\t};\n\t\t/**\n\t\t * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)\n\t\t * @name uncheck_all()\n\t\t * @trigger uncheck_all.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tthis.element.find('.jstree-checked').removeClass('jstree-checked');\n\t\t\t/**\n\t\t\t * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name uncheck_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });\n\t\t};\n\t\t/**\n\t\t * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)\n\t\t * @name is_checked(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.is_checked = function (obj) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\treturn obj.state.checked;\n\t\t};\n\t\t/**\n\t\t * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)\n\t\t * @name get_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_selected(full); }\n\t\t\treturn full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;\n\t\t};\n\t\t/**\n\t\t * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)\n\t\t * @name get_top_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_top_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t};\n\t\t/**\n\t\t * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)\n\t\t * @name get_bottom_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_bottom_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t};\n\t\tthis.load_node = function (obj, callback) {\n\t\t\tvar k, l, i, j, c, tmp;\n\t\t\tif(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {\n\t\t\t\ttmp = this.get_node(obj);\n\t\t\t\tif(tmp && tmp.state.loaded) {\n\t\t\t\t\tfor(k = 0, l = tmp.children_d.length; k < l; k++) {\n\t\t\t\t\t\tif(this._model.data[tmp.children_d[k]].state.checked) {\n\t\t\t\t\t\t\tc = true;\n\t\t\t\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent.load_node.apply(this, arguments);\n\t\t};\n\t\tthis.get_state = function () {\n\t\t\tvar state = parent.get_state.apply(this, arguments);\n\t\t\tif(this.settings.checkbox.tie_selection) { return state; }\n\t\t\tstate.checkbox = this._data.checkbox.selected.slice();\n\t\t\treturn state;\n\t\t};\n\t\tthis.set_state = function (state, callback) {\n\t\t\tvar res = parent.set_state.apply(this, arguments);\n\t\t\tif(res && state.checkbox) {\n\t\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\t\tthis.uncheck_all();\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t$.each(state.checkbox, function (i, v) {\n\t\t\t\t\t\t_this.check_node(v);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tdelete state.checkbox;\n\t\t\t\tthis.set_state(state, callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\tthis._data.checkbox.selected = [];\n\t\t\t}\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n\t// include the checkbox plugin by default\n\t// $.jstree.defaults.plugins.push(\"checkbox\");\n\n/**\n * ### Conditionalselect plugin\n *\n * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).\n */\n\n\t/**\n\t * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.\n\t * @name $.jstree.defaults.checkbox.visible\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.conditionalselect = function () { return true; };\n\t$.jstree.plugins.conditionalselect = function (options, parent) {\n\t\t// own function\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {\n\t\t\t\tparent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t};\n\t};\n\n\n/**\n * ### Contextmenu plugin\n *\n * Shows a context menu when a node is right-clicked.\n */\n\n\t/**\n\t * stores all defaults for the contextmenu plugin\n\t * @name $.jstree.defaults.contextmenu\n\t * @plugin contextmenu\n\t */\n\t$.jstree.defaults.contextmenu = {\n\t\t/**\n\t\t * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.\n\t\t * @name $.jstree.defaults.contextmenu.select_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tselect_node : true,\n\t\t/**\n\t\t * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.\n\t\t * @name $.jstree.defaults.contextmenu.show_at_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tshow_at_node : true,\n\t\t/**\n\t\t * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).\n\t\t *\n\t\t * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required):\n\t\t *\n\t\t * * `separator_before` - a boolean indicating if there should be a separator before this item\n\t\t * * `separator_after` - a boolean indicating if there should be a separator after this item\n\t\t * * `_disabled` - a boolean indicating if this action should be disabled\n\t\t * * `label` - a string - the name of the action (could be a function returning a string)\n\t\t * * `action` - a function to be executed if this item is chosen\n\t\t * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)\n\t\t * * `shortcut_label` - shortcut label (like for example `F2` for rename)\n\t\t * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered\n\t\t *\n\t\t * @name $.jstree.defaults.contextmenu.items\n\t\t * @plugin contextmenu\n\t\t */\n\t\titems : function (o, cb) { // Could be an object directly\n\t\t\treturn {\n\t\t\t\t\"create\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: true,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"create_node\", data.reference, {}, \"last\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Create\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.create_node(obj, {}, \"last\", function (new_node) {\n\t\t\t\t\t\t\tsetTimeout(function () { inst.edit(new_node); },0);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"rename\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"rename_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Rename\",\n\t\t\t\t\t/*!\n\t\t\t\t\t\"shortcut\"\t\t\t: 113,\n\t\t\t\t\t\"shortcut_label\"\t: 'F2',\n\t\t\t\t\t\"icon\"\t\t\t\t: \"glyphicon glyphicon-leaf\",\n\t\t\t\t\t*/\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.edit(obj);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"remove\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"delete_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Delete\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\tinst.delete_node(inst.get_selected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tinst.delete_node(obj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"ccp\" : {\n\t\t\t\t\t\"separator_before\"\t: true,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"label\"\t\t\t\t: \"Edit\",\n\t\t\t\t\t\"action\"\t\t\t: false,\n\t\t\t\t\t\"submenu\" : {\n\t\t\t\t\t\t\"cut\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Cut\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.cut(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.cut(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"copy\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Copy\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.copy(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.copy(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"paste\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"_disabled\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\treturn !$.jstree.reference(data.reference).can_paste();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Paste\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tinst.paste(obj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\n\t$.jstree.plugins.contextmenu = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tvar last_ts = 0, cto = null, ex, ey;\n\t\t\tthis.element\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-anchor\", $.proxy(function (e, data) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tlast_ts = e.ctrlKey ? +new Date() : 0;\n\t\t\t\t\t\tif(data || cto) {\n\t\t\t\t\t\t\tlast_ts = (+new Date()) + 10000;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_loading(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click\n\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_ts = 0;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"touchstart.jstree\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tif(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tex = e.pageX;\n\t\t\t\t\t\tey = e.pageY;\n\t\t\t\t\t\tcto = setTimeout(function () {\n\t\t\t\t\t\t\t$(e.currentTarget).trigger('contextmenu', true);\n\t\t\t\t\t\t}, 750);\n\t\t\t\t\t})\n\t\t\t\t.on('touchmove.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.pageX) > 50 || Math.abs(ey - e.pageY) > 50)) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('touchend.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t/*!\n\t\t\tif(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {\n\t\t\t\tvar el = null, tm = null;\n\t\t\t\tthis.element\n\t\t\t\t\t.on(\"touchstart\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tel = e.currentTarget;\n\t\t\t\t\t\ttm = +new Date();\n\t\t\t\t\t\t$(document).one(\"touchend\", function (e) {\n\t\t\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);\n\t\t\t\t\t\t\te.currentTarget = e.target;\n\t\t\t\t\t\t\ttm = ((+(new Date())) - tm);\n\t\t\t\t\t\t\tif(e.target === el && tm > 600 && tm < 1000) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(el).trigger('contextmenu', e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tel = null;\n\t\t\t\t\t\t\ttm = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t*/\n\t\t\t$(document).on(\"context_hide.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tthis._data.contextmenu.visible = false;\n\t\t\t\tdata.reference.removeClass('jstree-context');\n\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this._data.contextmenu.visible) {\n\t\t\t\t$.vakata.context.hide();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\n\t\t/**\n\t\t * prepare and show the context menu for a node\n\t\t * @name show_contextmenu(obj [, x, y])\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Object} e the event if available that triggered the contextmenu\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t */\n\t\tthis.show_contextmenu = function (obj, x, y, e) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar s = this.settings.contextmenu,\n\t\t\t\td = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\"),\n\t\t\t\to = false,\n\t\t\t\ti = false;\n\t\t\tif(s.show_at_node || x === undefined || y === undefined) {\n\t\t\t\to = a.offset();\n\t\t\t\tx = o.left;\n\t\t\t\ty = o.top + this._data.core.li_height;\n\t\t\t}\n\t\t\tif(this.settings.contextmenu.select_node && !this.is_selected(obj)) {\n\t\t\t\tthis.activate_node(obj, e);\n\t\t\t}\n\n\t\t\ti = s.items;\n\t\t\tif($.isFunction(i)) {\n\t\t\t\ti = i.call(this, obj, $.proxy(function (i) {\n\t\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif($.isPlainObject(i)) {\n\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * show the prepared context menu for a node\n\t\t * @name _show_contextmenu(obj, x, y, i)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Number} i the object of items to show\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t * @private\n\t\t */\n\t\tthis._show_contextmenu = function (obj, x, y, i) {\n\t\t\tvar d = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\");\n\t\t\t$(document).one(\"context_show.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tvar cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';\n\t\t\t\t$(data.element).addClass(cls);\n\t\t\t\ta.addClass('jstree-context');\n\t\t\t}, this));\n\t\t\tthis._data.contextmenu.visible = true;\n\t\t\t$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);\n\t\t\t/**\n\t\t\t * triggered when the contextmenu is shown for a node\n\t\t\t * @event\n\t\t\t * @name show_contextmenu.jstree\n\t\t\t * @param {Object} node the node\n\t\t\t * @param {Number} x the x-coordinate of the menu relative to the document\n\t\t\t * @param {Number} y the y-coordinate of the menu relative to the document\n\t\t\t * @plugin contextmenu\n\t\t\t */\n\t\t\tthis.trigger('show_contextmenu', { \"node\" : obj, \"x\" : x, \"y\" : y });\n\t\t};\n\t};\n\n\t// contextmenu helper\n\t(function ($) {\n\t\tvar right_to_left = false,\n\t\t\tvakata_context = {\n\t\t\t\telement\t\t: false,\n\t\t\t\treference\t: false,\n\t\t\t\tposition_x\t: 0,\n\t\t\t\tposition_y\t: 0,\n\t\t\t\titems\t\t: [],\n\t\t\t\thtml\t\t: \"\",\n\t\t\t\tis_visible\t: false\n\t\t\t};\n\n\t\t$.vakata.context = {\n\t\t\tsettings : {\n\t\t\t\thide_onmouseleave\t: 0,\n\t\t\t\ticons\t\t\t\t: true\n\t\t\t},\n\t\t\t_trigger : function (event_name) {\n\t\t\t\t$(document).triggerHandler(\"context_\" + event_name + \".vakata\", {\n\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t_execute : function (i) {\n\t\t\t\ti = vakata_context.items[i];\n\t\t\t\treturn i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }))) && i.action ? i.action.call(null, {\n\t\t\t\t\t\t\t\"item\"\t\t: i,\n\t\t\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) : false;\n\t\t\t},\n\t\t\t_parse : function (o, is_callback) {\n\t\t\t\tif(!o) { return false; }\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tvakata_context.html\t\t= \"\";\n\t\t\t\t\tvakata_context.items\t= [];\n\t\t\t\t}\n\t\t\t\tvar str = \"\",\n\t\t\t\t\tsep = false,\n\t\t\t\t\ttmp;\n\n\t\t\t\tif(is_callback) { str += \"<\"+\"ul>\"; }\n\t\t\t\t$.each(o, function (i, val) {\n\t\t\t\t\tif(!val) { return true; }\n\t\t\t\t\tvakata_context.items.push(val);\n\t\t\t\t\tif(!sep && val.separator_before) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t}\n\t\t\t\t\tsep = false;\n\t\t\t\t\tstr += \"<\"+\"li class='\" + (val._class || \"\") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ \"item\" : val, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element })) ? \" vakata-contextmenu-disabled \" : \"\") + \"' \"+(val.shortcut?\" data-shortcut='\"+val.shortcut+\"' \":'')+\">\";\n\t\t\t\t\tstr += \"<\"+\"a href='#' rel='\" + (vakata_context.items.length - 1) + \"'>\";\n\t\t\t\t\tif($.vakata.context.settings.icons) {\n\t\t\t\t\t\tstr += \"<\"+\"i \";\n\t\t\t\t\t\tif(val.icon) {\n\t\t\t\t\t\t\tif(val.icon.indexOf(\"/\") !== -1 || val.icon.indexOf(\".\") !== -1) { str += \" style='background:url(\\\"\" + val.icon + \"\\\") center center no-repeat' \"; }\n\t\t\t\t\t\t\telse { str += \" class='\" + val.icon + \"' \"; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += \"><\"+\"/i><\"+\"span class='vakata-contextmenu-sep'>&#160;<\"+\"/span>\";\n\t\t\t\t\t}\n\t\t\t\t\tstr += ($.isFunction(val.label) ? val.label({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }) : val.label) + (val.shortcut?' <span class=\"vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'\">'+ (val.shortcut_label || '') +'</span>':'') + \"<\"+\"/a>\";\n\t\t\t\t\tif(val.submenu) {\n\t\t\t\t\t\ttmp = $.vakata.context._parse(val.submenu, true);\n\t\t\t\t\t\tif(tmp) { str += tmp; }\n\t\t\t\t\t}\n\t\t\t\t\tstr += \"<\"+\"/li>\";\n\t\t\t\t\tif(val.separator_after) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t\tsep = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstr  = str.replace(/<li class\\='vakata-context-separator'\\><\\/li\\>$/,\"\");\n\t\t\t\tif(is_callback) { str += \"</ul>\"; }\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when the contextmenu is parsed (HTML is built)\n\t\t\t\t * @event\n\t\t\t\t * @plugin contextmenu\n\t\t\t\t * @name context_parse.vakata\n\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t */\n\t\t\t\tif(!is_callback) { vakata_context.html = str; $.vakata.context._trigger(\"parse\"); }\n\t\t\t\treturn str.length > 10 ? str : false;\n\t\t\t},\n\t\t\t_show_submenu : function (o) {\n\t\t\t\to = $(o);\n\t\t\t\tif(!o.length || !o.children(\"ul\").length) { return; }\n\t\t\t\tvar e = o.children(\"ul\"),\n\t\t\t\t\txl = o.offset().left,\n\t\t\t\t\tx = xl + o.outerWidth(),\n\t\t\t\t\ty = o.offset().top,\n\t\t\t\t\tw = e.width(),\n\t\t\t\t\th = e.height(),\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft(),\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t// може да се спести е една проверка - дали няма някой от класовете вече нагоре\n\t\t\t\tif(right_to_left) {\n\t\t\t\t\to[x - (w + 10 + o.outerWidth()) < 0 ? \"addClass\" : \"removeClass\"](\"vakata-context-left\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to[x + w > dw  && xl > dw - x ? \"addClass\" : \"removeClass\"](\"vakata-context-right\");\n\t\t\t\t}\n\t\t\t\tif(y + h + 10 > dh) {\n\t\t\t\t\te.css(\"bottom\",\"-1px\");\n\t\t\t\t}\n\n\t\t\t\t//if does not fit - stick it to the side\n\t\t\t\tif (o.hasClass('vakata-context-right')) {\n\t\t\t\t\tif (xl < w) {\n\t\t\t\t\t\te.css(\"margin-right\", xl - w);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (dw - x < w) {\n\t\t\t\t\t\te.css(\"margin-left\", dw - x - w);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\te.show();\n\t\t\t},\n\t\t\tshow : function (reference, position, data) {\n\t\t\t\tvar o, e, x, y, w, h, dw, dh, cond = true;\n\t\t\t\tif(vakata_context.element && vakata_context.element.length) {\n\t\t\t\t\tvakata_context.element.width('');\n\t\t\t\t}\n\t\t\t\tswitch(cond) {\n\t\t\t\t\tcase (!position && !reference):\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase (!!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\to = reference.offset();\n\t\t\t\t\t\tvakata_context.position_x\t= o.left + reference.outerHeight();\n\t\t\t\t\t\tvakata_context.position_y\t= o.top;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!!position && !reference):\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!!reference && !data && $(reference).data('vakata_contextmenu')) {\n\t\t\t\t\tdata = $(reference).data('vakata_contextmenu');\n\t\t\t\t}\n\t\t\t\tif($.vakata.context._parse(data)) {\n\t\t\t\t\tvakata_context.element.html(vakata_context.html);\n\t\t\t\t}\n\t\t\t\tif(vakata_context.items.length) {\n\t\t\t\t\tvakata_context.element.appendTo(\"body\");\n\t\t\t\t\te = vakata_context.element;\n\t\t\t\t\tx = vakata_context.position_x;\n\t\t\t\t\ty = vakata_context.position_y;\n\t\t\t\t\tw = e.width();\n\t\t\t\t\th = e.height();\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft();\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tx -= (e.outerWidth() - $(reference).outerWidth());\n\t\t\t\t\t\tif(x < $(window).scrollLeft() + 20) {\n\t\t\t\t\t\t\tx = $(window).scrollLeft() + 20;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(x + w + 20 > dw) {\n\t\t\t\t\t\tx = dw - (w + 20);\n\t\t\t\t\t}\n\t\t\t\t\tif(y + h + 20 > dh) {\n\t\t\t\t\t\ty = dh - (h + 20);\n\t\t\t\t\t}\n\n\t\t\t\t\tvakata_context.element\n\t\t\t\t\t\t.css({ \"left\" : x, \"top\" : y })\n\t\t\t\t\t\t.show()\n\t\t\t\t\t\t.find('a').first().focus().parent().addClass(\"vakata-context-hover\");\n\t\t\t\t\tvakata_context.is_visible = true;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is shown\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_show.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"show\");\n\t\t\t\t}\n\t\t\t},\n\t\t\thide : function () {\n\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\tvakata_context.element.hide().find(\"ul\").hide().end().find(':focus').blur().end().detach();\n\t\t\t\t\tvakata_context.is_visible = false;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is hidden\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_hide.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"hide\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t$(function () {\n\t\t\tright_to_left = $(\"body\").css(\"direction\") === \"rtl\";\n\t\t\tvar to = false;\n\n\t\t\tvakata_context.element = $(\"<ul class='vakata-context'></ul>\");\n\t\t\tvakata_context.element\n\t\t\t\t.on(\"mouseenter\", \"li\", function (e) {\n\t\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) {\n\t\t\t\t\t\t// премахнато заради delegate mouseleave по-долу\n\t\t\t\t\t\t// $(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end();\n\n\t\t\t\t\t$(this)\n\t\t\t\t\t\t.siblings().find(\"ul\").hide().end().end()\n\t\t\t\t\t\t.parentsUntil(\".vakata-context\", \"li\").addBack().addClass(\"vakata-context-hover\");\n\t\t\t\t\t$.vakata.context._show_submenu(this);\n\t\t\t\t})\n\t\t\t\t// тестово - дали не натоварва?\n\t\t\t\t.on(\"mouseleave\", \"li\", function (e) {\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) { return; }\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").addBack().removeClass(\"vakata-context-hover\");\n\t\t\t\t})\n\t\t\t\t.on(\"mouseleave\", function (e) {\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\tif($.vakata.context.settings.hide_onmouseleave) {\n\t\t\t\t\t\tto = setTimeout(\n\t\t\t\t\t\t\t(function (t) {\n\t\t\t\t\t\t\t\treturn function () { $.vakata.context.hide(); };\n\t\t\t\t\t\t\t}(this)), $.vakata.context.settings.hide_onmouseleave);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"click\", \"a\", function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t//})\n\t\t\t\t//.on(\"mouseup\", \"a\", function (e) {\n\t\t\t\t\tif(!$(this).blur().parent().hasClass(\"vakata-context-disabled\") && $.vakata.context._execute($(this).attr(\"rel\")) !== false) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown', 'a', function (e) {\n\t\t\t\t\t\tvar o = null;\n\t\t\t\t\t\tswitch(e.which) {\n\t\t\t\t\t\t\tcase 13:\n\t\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\t\te.type = \"mouseup\";\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().closest(\"li\").first().find(\"ul\").hide().find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end().end().children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").prevAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").last(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().children(\"ul\").show().children(\"li:not(.vakata-context-separator)\").removeClass(\"vakata-context-hover\").first().addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").nextAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").first(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 27:\n\t\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t//console.log(e.which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('keydown', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();\n\t\t\t\t\tif(a.parent().not('.vakata-context-disabled')) {\n\t\t\t\t\t\ta.click();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t$(document)\n\t\t\t\t.on(\"mousedown.vakata.jstree\", function (e) {\n\t\t\t\t\tif(vakata_context.is_visible && !$.contains(vakata_context.element[0], e.target)) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"context_show.vakata.jstree\", function (e, data) {\n\t\t\t\t\tvakata_context.element.find(\"li:has(ul)\").children(\"a\").addClass(\"vakata-context-parent\");\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tvakata_context.element.addClass(\"vakata-context-rtl\").css(\"direction\", \"rtl\");\n\t\t\t\t\t}\n\t\t\t\t\t// also apply a RTL class?\n\t\t\t\t\tvakata_context.element.find(\"ul\").hide().end();\n\t\t\t\t});\n\t\t});\n\t}($));\n\t// $.jstree.defaults.plugins.push(\"contextmenu\");\n\n\n/**\n * ### Drag'n'drop plugin\n *\n * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.\n */\n\n\t/**\n\t * stores all defaults for the drag'n'drop plugin\n\t * @name $.jstree.defaults.dnd\n\t * @plugin dnd\n\t */\n\t$.jstree.defaults.dnd = {\n\t\t/**\n\t\t * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.\n\t\t * @name $.jstree.defaults.dnd.copy\n\t\t * @plugin dnd\n\t\t */\n\t\tcopy : true,\n\t\t/**\n\t\t * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.\n\t\t * @name $.jstree.defaults.dnd.open_timeout\n\t\t * @plugin dnd\n\t\t */\n\t\topen_timeout : 500,\n\t\t/**\n\t\t * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging\n\t\t * @name $.jstree.defaults.dnd.is_draggable\n\t\t * @plugin dnd\n\t\t */\n\t\tis_draggable : true,\n\t\t/**\n\t\t * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`\n\t\t * @name $.jstree.defaults.dnd.check_while_dragging\n\t\t * @plugin dnd\n\t\t */\n\t\tcheck_while_dragging : true,\n\t\t/**\n\t\t * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`\n\t\t * @name $.jstree.defaults.dnd.always_copy\n\t\t * @plugin dnd\n\t\t */\n\t\talways_copy : false,\n\t\t/**\n\t\t * when dropping a node \"inside\", this setting indicates the position the node should go to - it can be an integer or a string: \"first\" (same as 0) or \"last\", default is `0`\n\t\t * @name $.jstree.defaults.dnd.inside_pos\n\t\t * @plugin dnd\n\t\t */\n\t\tinside_pos : 0,\n\t\t/**\n\t\t * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node\n\t\t * @name $.jstree.defaults.dnd.drag_selection\n\t\t * @plugin dnd\n\t\t */\n\t\tdrag_selection : true,\n\t\t/**\n\t\t * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string \"selected\" which means only selected nodes can be dragged on touch devices.\n\t\t * @name $.jstree.defaults.dnd.touch\n\t\t * @plugin dnd\n\t\t */\n\t\ttouch : true,\n\t\t/**\n\t\t * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.\n\t\t * @name $.jstree.defaults.dnd.large_drop_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drop_target : false,\n\t\t/**\n\t\t * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to \"selected\".\n\t\t * @name $.jstree.defaults.dnd.large_drag_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drag_target : false\n\t};\n\t// TODO: now check works by checking for each node individually, how about max_children, unique, etc?\n\t$.jstree.plugins.dnd = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on('mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\tif(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif(e.type === \"touchstart\" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tvar obj = this.get_node(e.target),\n\t\t\t\t\t\tmlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,\n\t\t\t\t\t\ttxt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));\n\t\t\t\t\tif(this.settings.core.force_text) {\n\t\t\t\t\t\ttxt = $.vakata.html.escape(txt);\n\t\t\t\t\t}\n\t\t\t\t\tif(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === \"touchstart\") &&\n\t\t\t\t\t\t(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.element.trigger('mousedown.jstree');\n\t\t\t\t\t\treturn $.vakata.dnd.start(e, { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] }, '<div id=\"jstree-dnd\" class=\"jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '\"><i class=\"jstree-icon jstree-er\"></i>' + txt + '<ins class=\"jstree-copy\" style=\"display:none;\">+</ins></div>');\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t};\n\t};\n\n\t$(function() {\n\t\t// bind only once for all instances\n\t\tvar lastmv = false,\n\t\t\tlaster = false,\n\t\t\tlastev = false,\n\t\t\topento = false,\n\t\t\tmarker = $('<div id=\"jstree-marker\">&#160;</div>').hide(); //.appendTo('body');\n\n\t\t$(document)\n\t\t\t.on('dnd_start.vakata.jstree', function (e, data) {\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.appendTo('body'); //.show();\n\t\t\t})\n\t\t\t.on('dnd_move.vakata.jstree', function (e, data) {\n\t\t\t\tif(opento) { clearTimeout(opento); }\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\n\t\t\t\t// if we are hovering the marker image do nothing (can happen on \"inside\" drags)\n\t\t\t\tif(data.event.target.id && data.event.target.id === 'jstree-marker') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastev = data.event;\n\n\t\t\t\tvar ins = $.jstree.reference(data.event.target),\n\t\t\t\t\tref = false,\n\t\t\t\t\toff = false,\n\t\t\t\t\trel = false,\n\t\t\t\t\ttmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm;\n\t\t\t\t// if we are over an instance\n\t\t\t\tif(ins && ins._data && ins._data.dnd) {\n\t\t\t\t\tmarker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));\n\t\t\t\t\tdata.helper\n\t\t\t\t\t\t.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))\n\t\t\t\t\t\t.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'show' : 'hide' ]();\n\n\n\t\t\t\t\t// if are hovering the container itself add a new root node\n\t\t\t\t\tif( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {\n\t\t\t\t\t\tok = true;\n\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\tok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? \"copy_node\" : \"move_node\"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });\n\t\t\t\t\t\t\tif(!ok) { break; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };\n\t\t\t\t\t\t\tmarker.hide();\n\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// if we are hovering a tree node\n\t\t\t\t\t\tref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');\n\t\t\t\t\t\tif(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {\n\t\t\t\t\t\t\toff = ref.offset();\n\t\t\t\t\t\t\trel = data.event.pageY - off.top;\n\t\t\t\t\t\t\th = ref.outerHeight();\n\t\t\t\t\t\t\tif(rel < h / 3) {\n\t\t\t\t\t\t\t\to = ['b', 'i', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(rel > h - h / 3) {\n\t\t\t\t\t\t\t\to = ['a', 'i', 'b'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\to = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$.each(o, function (j, v) {\n\t\t\t\t\t\t\t\tswitch(v) {\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\t\t\t\tip = ins.settings.dnd.inside_pos;\n\t\t\t\t\t\t\t\t\t\ttm = ins.get_node(ref.parent());\n\t\t\t\t\t\t\t\t\t\tl = off.left - 2;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h / 2 + 1;\n\t\t\t\t\t\t\t\t\t\tp = tm.id;\n\t\t\t\t\t\t\t\t\t\ti = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index() + 1;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\t\t\top = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? \"copy_node\" : \"move_node\";\n\t\t\t\t\t\t\t\t\tps = i;\n\t\t\t\t\t\t\t\t\tif(op === \"move_node\" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {\n\t\t\t\t\t\t\t\t\t\tpr = ins.get_node(p);\n\t\t\t\t\t\t\t\t\t\tif(ps > $.inArray(data.data.nodes[t1], pr.children)) {\n\t\t\t\t\t\t\t\t\t\t\tps -= 1;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );\n\t\t\t\t\t\t\t\t\tif(!ok) {\n\t\t\t\t\t\t\t\t\t\tif(ins && ins.last_error) { laster = ins.last_error(); }\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {\n\t\t\t\t\t\t\t\t\topento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };\n\t\t\t\t\t\t\t\t\tmarker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();\n\t\t\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\t\t\tlaster = {};\n\t\t\t\t\t\t\t\t\to = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif(o === true) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastmv = false;\n\t\t\t\tdata.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t\tmarker.hide();\n\t\t\t})\n\t\t\t.on('dnd_scroll.vakata.jstree', function (e, data) {\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide();\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t})\n\t\t\t.on('dnd_stop.vakata.jstree', function (e, data) {\n\t\t\t\tif(opento) { clearTimeout(opento); }\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide().detach();\n\t\t\t\tvar i, j, nodes = [];\n\t\t\t\tif(lastmv) {\n\t\t\t\t\tfor(i = 0, j = data.data.nodes.length; i < j; i++) {\n\t\t\t\t\t\tnodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];\n\t\t\t\t\t}\n\t\t\t\t\tlastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ti = $(data.event.target).closest('.jstree');\n\t\t\t\t\tif(i.length && laster && laster.error && laster.error === 'check') {\n\t\t\t\t\t\ti = i.jstree(true);\n\t\t\t\t\t\tif(i) {\n\t\t\t\t\t\t\ti.settings.core.error.call(this, laster);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastev = false;\n\t\t\t\tlastmv = false;\n\t\t\t})\n\t\t\t.on('keyup.jstree keydown.jstree', function (e, data) {\n\t\t\t\tdata = $.vakata.dnd._get();\n\t\t\t\tif(data && data.data && data.data.jstree) {\n\t\t\t\t\tdata.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();\n\t\t\t\t\tif(lastev) {\n\t\t\t\t\t\tlastev.metaKey = e.metaKey;\n\t\t\t\t\t\tlastev.ctrlKey = e.ctrlKey;\n\t\t\t\t\t\t$.vakata.dnd._trigger('move', lastev);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\t// helpers\n\t(function ($) {\n\t\t$.vakata.html = {\n\t\t\tdiv : $('<div />'),\n\t\t\tescape : function (str) {\n\t\t\t\treturn $.vakata.html.div.text(str).html();\n\t\t\t},\n\t\t\tstrip : function (str) {\n\t\t\t\treturn $.vakata.html.div.empty().append($.parseHTML(str)).text();\n\t\t\t}\n\t\t};\n\t\t// private variable\n\t\tvar vakata_dnd = {\n\t\t\telement\t: false,\n\t\t\ttarget\t: false,\n\t\t\tis_down\t: false,\n\t\t\tis_drag\t: false,\n\t\t\thelper\t: false,\n\t\t\thelper_w: 0,\n\t\t\tdata\t: false,\n\t\t\tinit_x\t: 0,\n\t\t\tinit_y\t: 0,\n\t\t\tscroll_l: 0,\n\t\t\tscroll_t: 0,\n\t\t\tscroll_e: false,\n\t\t\tscroll_i: false,\n\t\t\tis_touch: false\n\t\t};\n\t\t$.vakata.dnd = {\n\t\t\tsettings : {\n\t\t\t\tscroll_speed\t\t: 10,\n\t\t\t\tscroll_proximity\t: 20,\n\t\t\t\thelper_left\t\t\t: 5,\n\t\t\t\thelper_top\t\t\t: 10,\n\t\t\t\tthreshold\t\t\t: 5,\n\t\t\t\tthreshold_touch\t\t: 50\n\t\t\t},\n\t\t\t_trigger : function (event_name, e) {\n\t\t\t\tvar data = $.vakata.dnd._get();\n\t\t\t\tdata.event = e;\n\t\t\t\t$(document).triggerHandler(\"dnd_\" + event_name + \".vakata\", data);\n\t\t\t},\n\t\t\t_get : function () {\n\t\t\t\treturn {\n\t\t\t\t\t\"data\"\t\t: vakata_dnd.data,\n\t\t\t\t\t\"element\"\t: vakata_dnd.element,\n\t\t\t\t\t\"helper\"\t: vakata_dnd.helper\n\t\t\t\t};\n\t\t\t},\n\t\t\t_clean : function () {\n\t\t\t\tif(vakata_dnd.helper) { vakata_dnd.helper.remove(); }\n\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\tvakata_dnd = {\n\t\t\t\t\telement\t: false,\n\t\t\t\t\ttarget\t: false,\n\t\t\t\t\tis_down\t: false,\n\t\t\t\t\tis_drag\t: false,\n\t\t\t\t\thelper\t: false,\n\t\t\t\t\thelper_w: 0,\n\t\t\t\t\tdata\t: false,\n\t\t\t\t\tinit_x\t: 0,\n\t\t\t\t\tinit_y\t: 0,\n\t\t\t\t\tscroll_l: 0,\n\t\t\t\t\tscroll_t: 0,\n\t\t\t\t\tscroll_e: false,\n\t\t\t\t\tscroll_i: false,\n\t\t\t\t\tis_touch: false\n\t\t\t\t};\n\t\t\t\t$(document).off(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).off(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t},\n\t\t\t_scroll : function (init_only) {\n\t\t\t\tif(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {\n\t\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.scroll_i) {\n\t\t\t\t\tvakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(init_only === true) { return false; }\n\n\t\t\t\tvar i = vakata_dnd.scroll_e.scrollTop(),\n\t\t\t\t\tj = vakata_dnd.scroll_e.scrollLeft();\n\t\t\t\tvakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tvakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tif(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag causes an element to scroll\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_scroll.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {jQuery} event the element that is scrolling\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.dnd._trigger(\"scroll\", vakata_dnd.scroll_e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tstart : function (e, data, html) {\n\t\t\t\tif(e.type === \"touchstart\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }\n\t\t\t\ttry {\n\t\t\t\t\te.currentTarget.unselectable = \"on\";\n\t\t\t\t\te.currentTarget.onselectstart = function() { return false; };\n\t\t\t\t\tif(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = \"none\"; }\n\t\t\t\t} catch(ignore) { }\n\t\t\t\tvakata_dnd.init_x\t= e.pageX;\n\t\t\t\tvakata_dnd.init_y\t= e.pageY;\n\t\t\t\tvakata_dnd.data\t\t= data;\n\t\t\t\tvakata_dnd.is_down\t= true;\n\t\t\t\tvakata_dnd.element\t= e.currentTarget;\n\t\t\t\tvakata_dnd.target\t= e.target;\n\t\t\t\tvakata_dnd.is_touch\t= e.type === \"touchstart\";\n\t\t\t\tif(html !== false) {\n\t\t\t\t\tvakata_dnd.helper = $(\"<div id='vakata-dnd'></div>\").html(html).css({\n\t\t\t\t\t\t\"display\"\t\t: \"block\",\n\t\t\t\t\t\t\"margin\"\t\t: \"0\",\n\t\t\t\t\t\t\"padding\"\t\t: \"0\",\n\t\t\t\t\t\t\"position\"\t\t: \"absolute\",\n\t\t\t\t\t\t\"top\"\t\t\t: \"-2000px\",\n\t\t\t\t\t\t\"lineHeight\"\t: \"16px\",\n\t\t\t\t\t\t\"zIndex\"\t\t: \"10000\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$(document).on(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).on(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tdrag : function (e) {\n\t\t\t\tif(e.type === \"touchmove\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.is_down) { return; }\n\t\t\t\tif(!vakata_dnd.is_drag) {\n\t\t\t\t\tif(\n\t\t\t\t\t\tMath.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||\n\t\t\t\t\t\tMath.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\t\t\tvakata_dnd.helper.appendTo(\"body\");\n\t\t\t\t\t\t\tvakata_dnd.helper_w = vakata_dnd.helper.outerWidth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvakata_dnd.is_drag = true;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered on the document when a drag starts\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t\t * @name dnd_start.vakata\n\t\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t\t * @param {Object} event the event that caused the start (probably mousemove)\n\t\t\t\t\t\t */\n\t\t\t\t\t\t$.vakata.dnd._trigger(\"start\", e);\n\t\t\t\t\t}\n\t\t\t\t\telse { return; }\n\t\t\t\t}\n\n\t\t\t\tvar d  = false, w  = false,\n\t\t\t\t\tdh = false, wh = false,\n\t\t\t\t\tdw = false, ww = false,\n\t\t\t\t\tdt = false, dl = false,\n\t\t\t\t\tht = false, hl = false;\n\n\t\t\t\tvakata_dnd.scroll_t = 0;\n\t\t\t\tvakata_dnd.scroll_l = 0;\n\t\t\t\tvakata_dnd.scroll_e = false;\n\t\t\t\t$($(e.target).parentsUntil(\"body\").addBack().get().reverse())\n\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\treturn\t(/^auto|scroll$/).test($(this).css(\"overflow\")) &&\n\t\t\t\t\t\t\t\t(this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);\n\t\t\t\t\t})\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tvar t = $(this), o = t.offset();\n\t\t\t\t\t\tif(this.scrollHeight > this.offsetHeight) {\n\t\t\t\t\t\t\tif(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\t\t\tif(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_t = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.scrollWidth > this.offsetWidth) {\n\t\t\t\t\t\t\tif(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\t\t\tif(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\t\tvakata_dnd.scroll_e = $(this);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tif(!vakata_dnd.scroll_e) {\n\t\t\t\t\td  = $(document); w = $(window);\n\t\t\t\t\tdh = d.height(); wh = w.height();\n\t\t\t\t\tdw = d.width(); ww = w.width();\n\t\t\t\t\tdt = d.scrollTop(); dl = d.scrollLeft();\n\t\t\t\t\tif(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_t = -1;  }\n\t\t\t\t\tif(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\tif(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\tif(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\tvakata_dnd.scroll_e = d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }\n\n\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\tht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);\n\t\t\t\t\thl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);\n\t\t\t\t\tif(dh && ht + 25 > dh) { ht = dh - 50; }\n\t\t\t\t\tif(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }\n\t\t\t\t\tvakata_dnd.helper.css({\n\t\t\t\t\t\tleft\t: hl + \"px\",\n\t\t\t\t\t\ttop\t\t: ht + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when a drag is in progress\n\t\t\t\t * @event\n\t\t\t\t * @plugin dnd\n\t\t\t\t * @name dnd_move.vakata\n\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t * @param {Object} event the event that caused this to trigger (most likely mousemove)\n\t\t\t\t */\n\t\t\t\t$.vakata.dnd._trigger(\"move\", e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tstop : function (e) {\n\t\t\t\tif(e.type === \"touchend\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag stops (the dragged element is dropped)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_stop.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {Object} event the event that caused the stop\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.dnd._trigger(\"stop\", e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(e.type === \"touchend\" && e.target === vakata_dnd.target) {\n\t\t\t\t\t\tvar to = setTimeout(function () { $(e.target).click(); }, 100);\n\t\t\t\t\t\t$(e.target).one('click', function() { if(to) { clearTimeout(to); } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.vakata.dnd._clean();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\t}($));\n\n\t// include the dnd plugin by default\n\t// $.jstree.defaults.plugins.push(\"dnd\");\n\n\n/**\n * ### Massload plugin\n *\n * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).\n */\n\n\t/**\n\t * massload configuration\n\t *\n\t * It is possible to set this to a standard jQuery-like AJAX config.\n\t * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.\n\t *\n\t * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.\n\t *\n\t * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.\n\t *\n\t *\t{\n\t *\t\t\"id1\" : [{ \"text\" : \"Child of ID1\", \"id\" : \"c1\" }, { \"text\" : \"Another child of ID1\", \"id\" : \"c2\" }],\n\t *\t\t\"id2\" : [{ \"text\" : \"Child of ID2\", \"id\" : \"c3\" }]\n\t *\t}\n\t * \n\t * @name $.jstree.defaults.massload\n\t * @plugin massload\n\t */\n\t$.jstree.defaults.massload = null;\n\t$.jstree.plugins.massload = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis._data.massload = {};\n\t\t};\n\t\tthis._load_nodes = function (nodes, callback, is_callback) {\n\t\t\tvar s = this.settings.massload;\n\t\t\tif(is_callback && !$.isEmptyObject(this._data.massload)) {\n\t\t\t\treturn parent._load_nodes.call(this, nodes, callback, is_callback);\n\t\t\t}\n\t\t\tif($.isFunction(s)) {\n\t\t\t\treturn s.call(this, nodes, $.proxy(function (data) {\n\t\t\t\t\tif(data) {\n\t\t\t\t\t\tfor(var i in data) {\n\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback);\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(typeof s === 'object' && s && s.url) {\n\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\ts.url = s.url.call(this, nodes);\n\t\t\t\t}\n\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\ts.data = s.data.call(this, nodes);\n\t\t\t\t}\n\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t.done($.proxy(function (data,t,x) {\n\t\t\t\t\t\t\tif(data) {\n\t\t\t\t\t\t\t\tfor(var i in data) {\n\t\t\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback);\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\treturn parent._load_nodes.call(this, nodes, callback, is_callback);\n\t\t};\n\t\tthis._load_node = function (obj, callback) {\n\t\t\tvar d = this._data.massload[obj.id];\n\t\t\tif(d) {\n\t\t\t\treturn this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(function () { return this.nodeType !== 3; }) : d, function (status) {\n\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\tdelete this._data.massload[obj.id];\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn parent._load_node.call(this, obj, callback);\n\t\t};\n\t};\n\n/**\n * ### Search plugin\n *\n * Adds search functionality to jsTree.\n */\n\n\t/**\n\t * stores all defaults for the search plugin\n\t * @name $.jstree.defaults.search\n\t * @plugin search\n\t */\n\t$.jstree.defaults.search = {\n\t\t/**\n\t\t * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.\n\t\t *\n\t\t * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.\n\t\t * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to\n\t\t * @name $.jstree.defaults.search.ajax\n\t\t * @plugin search\n\t\t */\n\t\tajax : false,\n\t\t/**\n\t\t * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.\n\t\t * @name $.jstree.defaults.search.fuzzy\n\t\t * @plugin search\n\t\t */\n\t\tfuzzy : false,\n\t\t/**\n\t\t * Indicates if the search should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.search.case_sensitive\n\t\t * @plugin search\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches : false,\n\t\t/**\n\t\t * Indicates if the children of matched element are shown (when show_only_matches is true)\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches_children\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches_children : false,\n\t\t/**\n\t\t * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.\n\t\t * @name $.jstree.defaults.search.close_opened_onclear\n\t\t * @plugin search\n\t\t */\n\t\tclose_opened_onclear : true,\n\t\t/**\n\t\t * Indicates if only leaf nodes should be included in search results. Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_leaves_only\n\t\t * @plugin search\n\t\t */\n\t\tsearch_leaves_only : false,\n\t\t/**\n\t\t * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).\n\t\t * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_callback\n\t\t * @plugin search\n\t\t */\n\t\tsearch_callback : false\n\t};\n\n\t$.jstree.plugins.search = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.dom = $();\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.som = false;\n\t\t\tthis._data.search.smc = false;\n\t\t\tthis._data.search.hdn = [];\n\n\t\t\tthis.element\n\t\t\t\t.on(\"search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tvar m = this._model.data, i, j, p = [];\n\t\t\t\t\t\t\tfor(i = 0, j = data.res.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif(m[data.res[i]] && !m[data.res[i]].state.hidden) {\n\t\t\t\t\t\t\t\t\tp.push(data.res[i]);\n\t\t\t\t\t\t\t\t\tp = p.concat(m[data.res[i]].parents);\n\t\t\t\t\t\t\t\t\tif(this._data.search.smc) {\n\t\t\t\t\t\t\t\t\t\tp = p.concat(m[data.res[i]].children_d);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);\n\t\t\t\t\t\t\tthis._data.search.hdn = this.hide_all(true);\n\t\t\t\t\t\t\tthis.show_node(p, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"clear_search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tthis.show_node(this._data.search.hdn, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to search the tree nodes for a given string\n\t\t * @name search(str [, skip_async])\n\t\t * @param {String} str the search string\n\t\t * @param {Boolean} skip_async if set to true server will not be queried even if configured\n\t\t * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)\n\t\t * @param {mixed} inside an optional node to whose children to limit the search\n\t\t * @param {Boolean} append if set to true the results of this search are appended to the previous search\n\t\t * @plugin search\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {\n\t\t\tif(str === false || $.trim(str.toString()) === \"\") {\n\t\t\t\treturn this.clear_search();\n\t\t\t}\n\t\t\tinside = this.get_node(inside);\n\t\t\tinside = inside && inside.id ? inside.id : null;\n\t\t\tstr = str.toString();\n\t\t\tvar s = this.settings.search,\n\t\t\t\ta = s.ajax ? s.ajax : false,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = null,\n\t\t\t\tr = [],\n\t\t\t\tp = [], i, j;\n\t\t\tif(this._data.search.res.length && !append) {\n\t\t\t\tthis.clear_search();\n\t\t\t}\n\t\t\tif(show_only_matches === undefined) {\n\t\t\t\tshow_only_matches = s.show_only_matches;\n\t\t\t}\n\t\t\tif(show_only_matches_children === undefined) {\n\t\t\t\tshow_only_matches_children = s.show_only_matches_children;\n\t\t\t}\n\t\t\tif(!skip_async && a !== false) {\n\t\t\t\tif($.isFunction(a)) {\n\t\t\t\t\treturn a.call(this, str, $.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append);\n\t\t\t\t\t\t\t}, true);\n\t\t\t\t\t\t}, this), inside);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ta = $.extend({}, a);\n\t\t\t\t\tif(!a.data) { a.data = {}; }\n\t\t\t\t\ta.data.str = str;\n\t\t\t\t\tif(inside) {\n\t\t\t\t\t\ta.data.inside = inside;\n\t\t\t\t\t}\n\t\t\t\t\treturn $.ajax(a)\n\t\t\t\t\t\t.fail($.proxy(function () {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };\n\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.done($.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append);\n\t\t\t\t\t\t\t}, true);\n\t\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!append) {\n\t\t\t\tthis._data.search.str = str;\n\t\t\t\tthis._data.search.dom = $();\n\t\t\t\tthis._data.search.res = [];\n\t\t\t\tthis._data.search.opn = [];\n\t\t\t\tthis._data.search.som = show_only_matches;\n\t\t\t\tthis._data.search.smc = show_only_matches_children;\n\t\t\t}\n\n\t\t\tf = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });\n\t\t\t$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {\n\t\t\t\tvar v = m[i];\n\t\t\t\tif(v.text && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {\n\t\t\t\t\tr.push(i);\n\t\t\t\t\tp = p.concat(v.parents);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(r.length) {\n\t\t\t\tp = $.vakata.array_unique(p);\n\t\t\t\tfor(i = 0, j = p.length; i < j; i++) {\n\t\t\t\t\tif(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {\n\t\t\t\t\t\tthis._data.search.opn.push(p[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!append) {\n\t\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #')));\n\t\t\t\t\tthis._data.search.res = r;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #'))));\n\t\t\t\t\tthis._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));\n\t\t\t\t}\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").addClass('jstree-search');\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes\n\t\t\t * @param {String} str the search string\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });\n\t\t};\n\t\t/**\n\t\t * used to clear the last search (removes classes and shows all nodes if filtering is on)\n\t\t * @name clear_search()\n\t\t * @plugin search\n\t\t * @trigger clear_search.jstree\n\t\t */\n\t\tthis.clear_search = function () {\n\t\t\tif(this.settings.search.close_opened_onclear) {\n\t\t\t\tthis.close_node(this._data.search.opn, 0);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name clear_search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)\n\t\t\t * @param {String} str the search string (the last search string)\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });\n\t\t\tif(this._data.search.res.length) {\n\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {\n\t\t\t\t\treturn \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&');\n\t\t\t\t}).join(', #')));\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").removeClass(\"jstree-search\");\n\t\t\t}\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.dom = $();\n\t\t};\n\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tif($.inArray(obj.id, this._data.search.res) !== -1) {\n\t\t\t\t\tvar i, j, tmp = null;\n\t\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\ttmp.className += ' jstree-search';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\n\t// helpers\n\t(function ($) {\n\t\t// from http://kiro.me/projects/fuse.html\n\t\t$.vakata.search = function(pattern, txt, options) {\n\t\t\toptions = options || {};\n\t\t\toptions = $.extend({}, $.vakata.search.defaults, options);\n\t\t\tif(options.fuzzy !== false) {\n\t\t\t\toptions.fuzzy = true;\n\t\t\t}\n\t\t\tpattern = options.caseSensitive ? pattern : pattern.toLowerCase();\n\t\t\tvar MATCH_LOCATION\t= options.location,\n\t\t\t\tMATCH_DISTANCE\t= options.distance,\n\t\t\t\tMATCH_THRESHOLD\t= options.threshold,\n\t\t\t\tpatternLen = pattern.length,\n\t\t\t\tmatchmask, pattern_alphabet, match_bitapScore, search;\n\t\t\tif(patternLen > 32) {\n\t\t\t\toptions.fuzzy = false;\n\t\t\t}\n\t\t\tif(options.fuzzy) {\n\t\t\t\tmatchmask = 1 << (patternLen - 1);\n\t\t\t\tpattern_alphabet = (function () {\n\t\t\t\t\tvar mask = {},\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] = 0;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);\n\t\t\t\t\t}\n\t\t\t\t\treturn mask;\n\t\t\t\t}());\n\t\t\t\tmatch_bitapScore = function (e, x) {\n\t\t\t\t\tvar accuracy = e / patternLen,\n\t\t\t\t\t\tproximity = Math.abs(MATCH_LOCATION - x);\n\t\t\t\t\tif(!MATCH_DISTANCE) {\n\t\t\t\t\t\treturn proximity ? 1.0 : accuracy;\n\t\t\t\t\t}\n\t\t\t\t\treturn accuracy + (proximity / MATCH_DISTANCE);\n\t\t\t\t};\n\t\t\t}\n\t\t\tsearch = function (text) {\n\t\t\t\ttext = options.caseSensitive ? text : text.toLowerCase();\n\t\t\t\tif(pattern === text || text.indexOf(pattern) !== -1) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: true,\n\t\t\t\t\t\tscore: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif(!options.fuzzy) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: false,\n\t\t\t\t\t\tscore: 1\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tvar i, j,\n\t\t\t\t\ttextLen = text.length,\n\t\t\t\t\tscoreThreshold = MATCH_THRESHOLD,\n\t\t\t\t\tbestLoc = text.indexOf(pattern, MATCH_LOCATION),\n\t\t\t\t\tbinMin, binMid,\n\t\t\t\t\tbinMax = patternLen + textLen,\n\t\t\t\t\tlastRd, start, finish, rd, charMatch,\n\t\t\t\t\tscore = 1,\n\t\t\t\t\tlocations = [];\n\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\tbestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);\n\t\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbestLoc = -1;\n\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\tbinMin = 0;\n\t\t\t\t\tbinMid = binMax;\n\t\t\t\t\twhile (binMin < binMid) {\n\t\t\t\t\t\tif (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {\n\t\t\t\t\t\t\tbinMin = binMid;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbinMid = Math.floor((binMax - binMin) / 2 + binMin);\n\t\t\t\t\t}\n\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\tstart = Math.max(1, MATCH_LOCATION - binMid + 1);\n\t\t\t\t\tfinish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;\n\t\t\t\t\trd = new Array(finish + 2);\n\t\t\t\t\trd[finish + 1] = (1 << i) - 1;\n\t\t\t\t\tfor (j = finish; j >= start; j--) {\n\t\t\t\t\t\tcharMatch = pattern_alphabet[text.charAt(j - 1)];\n\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rd[j] & matchmask) {\n\t\t\t\t\t\t\tscore = match_bitapScore(i, j - 1);\n\t\t\t\t\t\t\tif (score <= scoreThreshold) {\n\t\t\t\t\t\t\t\tscoreThreshold = score;\n\t\t\t\t\t\t\t\tbestLoc = j - 1;\n\t\t\t\t\t\t\t\tlocations.push(bestLoc);\n\t\t\t\t\t\t\t\tif (bestLoc > MATCH_LOCATION) {\n\t\t\t\t\t\t\t\t\tstart = Math.max(1, 2 * MATCH_LOCATION - bestLoc);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlastRd = rd;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tisMatch: bestLoc >= 0,\n\t\t\t\t\tscore: score\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn txt === true ? { 'search' : search } : search(txt);\n\t\t};\n\t\t$.vakata.search.defaults = {\n\t\t\tlocation : 0,\n\t\t\tdistance : 100,\n\t\t\tthreshold : 0.6,\n\t\t\tfuzzy : false,\n\t\t\tcaseSensitive : false\n\t\t};\n\t}($));\n\n\t// include the search plugin by default\n\t// $.jstree.defaults.plugins.push(\"search\");\n\n\n/**\n * ### Sort plugin\n *\n * Automatically sorts all siblings in the tree according to a sorting function.\n */\n\n\t/**\n\t * the settings function used to sort the nodes.\n\t * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.\n\t * @name $.jstree.defaults.sort\n\t * @plugin sort\n\t */\n\t$.jstree.defaults.sort = function (a, b) {\n\t\t//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);\n\t\treturn this.get_text(a) > this.get_text(b) ? 1 : -1;\n\t};\n\t$.jstree.plugins.sort = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis.element\n\t\t\t\t.on(\"model.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"rename_node.jstree create_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent || data.node.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent || data.node.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"move_node.jstree copy_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent, true);\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to sort a node's children\n\t\t * @private\n\t\t * @name sort(obj [, deep])\n\t\t * @param  {mixed} obj the node\n\t\t * @param {Boolean} deep if set to `true` nodes are sorted recursively.\n\t\t * @plugin sort\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.sort = function (obj, deep) {\n\t\t\tvar i, j;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(obj && obj.children && obj.children.length) {\n\t\t\t\tobj.children.sort($.proxy(this.settings.sort, this));\n\t\t\t\tif(deep) {\n\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\tthis.sort(obj.children_d[i], false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t};\n\n\t// include the sort plugin by default\n\t// $.jstree.defaults.plugins.push(\"sort\");\n\n/**\n * ### State plugin\n *\n * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)\n */\n\n\tvar to = false;\n\t/**\n\t * stores all defaults for the state plugin\n\t * @name $.jstree.defaults.state\n\t * @plugin state\n\t */\n\t$.jstree.defaults.state = {\n\t\t/**\n\t\t * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.\n\t\t * @name $.jstree.defaults.state.key\n\t\t * @plugin state\n\t\t */\n\t\tkey\t\t: 'jstree',\n\t\t/**\n\t\t * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.\n\t\t * @name $.jstree.defaults.state.events\n\t\t * @plugin state\n\t\t */\n\t\tevents\t: 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',\n\t\t/**\n\t\t * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.\n\t\t * @name $.jstree.defaults.state.ttl\n\t\t * @plugin state\n\t\t */\n\t\tttl\t\t: false,\n\t\t/**\n\t\t * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.\n\t\t * @name $.jstree.defaults.state.filter\n\t\t * @plugin state\n\t\t */\n\t\tfilter\t: false\n\t};\n\t$.jstree.plugins.state = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tvar bind = $.proxy(function () {\n\t\t\t\tthis.element.on(this.settings.state.events, $.proxy(function () {\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tto = setTimeout($.proxy(function () { this.save_state(); }, this), 100);\n\t\t\t\t}, this));\n\t\t\t\t/**\n\t\t\t\t * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).\n\t\t\t\t * @event\n\t\t\t\t * @name state_ready.jstree\n\t\t\t\t * @plugin state\n\t\t\t\t */\n\t\t\t\tthis.trigger('state_ready');\n\t\t\t}, this);\n\t\t\tthis.element\n\t\t\t\t.on(\"ready.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.one(\"restore_state.jstree\", bind);\n\t\t\t\t\t\tif(!this.restore_state()) { bind(); }\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * save the state\n\t\t * @name save_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.save_state = function () {\n\t\t\tvar st = { 'state' : this.get_state(), 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };\n\t\t\t$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));\n\t\t};\n\t\t/**\n\t\t * restore the state from the user's computer\n\t\t * @name restore_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.restore_state = function () {\n\t\t\tvar k = $.vakata.storage.get(this.settings.state.key);\n\t\t\tif(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }\n\t\t\tif(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }\n\t\t\tif(!!k && k.state) { k = k.state; }\n\t\t\tif(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }\n\t\t\tif(!!k) {\n\t\t\t\tthis.element.one(\"set_state.jstree\", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });\n\t\t\t\tthis.set_state(k);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * clear the state on the user's computer\n\t\t * @name clear_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.clear_state = function () {\n\t\t\treturn $.vakata.storage.del(this.settings.state.key);\n\t\t};\n\t};\n\n\t(function ($, undefined) {\n\t\t$.vakata.storage = {\n\t\t\t// simply specifying the functions in FF throws an error\n\t\t\tset : function (key, val) { return window.localStorage.setItem(key, val); },\n\t\t\tget : function (key) { return window.localStorage.getItem(key); },\n\t\t\tdel : function (key) { return window.localStorage.removeItem(key); }\n\t\t};\n\t}($));\n\n\t// include the state plugin by default\n\t// $.jstree.defaults.plugins.push(\"state\");\n\n/**\n * ### Types plugin\n *\n * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.\n */\n\n\t/**\n\t * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).\n\t *\n\t * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.\n\t * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.\n\t * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.\n\t * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.\n\t * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)\n\t * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)\n\t *\n\t * There are two predefined types:\n\t *\n\t * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.\n\t * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.\n\t *\n\t * @name $.jstree.defaults.types\n\t * @plugin types\n\t */\n\t$.jstree.defaults.types = {\n\t\t'default' : {}\n\t};\n\t$.jstree.defaults.types[$.jstree.root] = {};\n\n\t$.jstree.plugins.types = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tvar i, j;\n\t\t\tif(options && options.types && options.types['default']) {\n\t\t\t\tfor(i in options.types) {\n\t\t\t\t\tif(i !== \"default\" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {\n\t\t\t\t\t\tfor(j in options.types['default']) {\n\t\t\t\t\t\t\tif(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {\n\t\t\t\t\t\t\t\toptions.types[i][j] = options.types['default'][j];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tparent.refresh.call(this, skip_loading, forget_state);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.bind = function () {\n\t\t\tthis.element\n\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\tt = this.settings.types,\n\t\t\t\t\t\t\ti, j, c = 'default', k;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tc = 'default';\n\t\t\t\t\t\t\tif(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].original.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].data.jstree.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dpc[i]].type = c;\n\t\t\t\t\t\t\tif(m[dpc[i]].icon === true && t[c].icon !== undefined) {\n\t\t\t\t\t\t\t\tm[dpc[i]].icon = t[c].icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].li_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].li_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr[k] = t[c].li_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].a_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].a_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr[k] = t[c].a_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['href'] = t[c].a_attr['href'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm[$.jstree.root].type = $.jstree.root;\n\t\t\t\t\t}, this));\n\t\t\tparent.bind.call(this);\n\t\t};\n\t\tthis.get_json = function (obj, options, flat) {\n\t\t\tvar i, j,\n\t\t\t\tm = this._model.data,\n\t\t\t\topt = options ? $.extend(true, {}, options, {no_id:false}) : {},\n\t\t\t\ttmp = parent.get_json.call(this, obj, opt, flat);\n\t\t\tif(tmp === false) { return false; }\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : \"default\";\n\t\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\t\tdelete tmp[i].id;\n\t\t\t\t\t\tif(tmp[i].li_attr && tmp[i].li_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].li_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp[i].a_attr && tmp[i].a_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].a_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : \"default\";\n\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\ttmp = this._delete_ids(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis._delete_ids = function (tmp) {\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(var i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i] = this._delete_ids(tmp[i]);\n\t\t\t\t}\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\tdelete tmp.id;\n\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t}\n\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t}\n\t\t\tif(tmp.children && $.isArray(tmp.children)) {\n\t\t\t\ttmp.children = this._delete_ids(tmp.children);\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;\n\t\t\tm = m && m._model && m._model.data ? m._model.data : null;\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"create_node\":\n\t\t\t\tcase \"move_node\":\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\tif(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {\n\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\tif(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(m && obj.children_d && obj.parents) {\n\t\t\t\t\t\t\td = 0;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\td = Math.max(d, m[obj.children_d[i]].parents.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td = d - obj.parents.length + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(d <= 0 || d === undefined) { d = 1; }\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\t\td++;\n\t\t\t\t\t\t} while(par);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type settings object for a node\n\t\t * @name get_rules(obj)\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @return {Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_rules = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar tmp = this.get_type(obj, true);\n\t\t\tif(tmp.max_depth === undefined) { tmp.max_depth = -1; }\n\t\t\tif(tmp.max_children === undefined) { tmp.max_children = -1; }\n\t\t\tif(tmp.valid_children === undefined) { tmp.valid_children = -1; }\n\t\t\treturn tmp;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type string or settings object for a node\n\t\t * @name get_type(obj [, rules])\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned\n\t\t * @return {String|Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_type = function (obj, rules) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);\n\t\t};\n\t\t/**\n\t\t * used to change a node's type\n\t\t * @name set_type(obj, type)\n\t\t * @param {mixed} obj the node to change\n\t\t * @param {String} type the new type\n\t\t * @plugin types\n\t\t */\n\t\tthis.set_type = function (obj, type) {\n\t\t\tvar m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_type(obj[t1], type);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tt = this.settings.types;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!t[type] || !obj) { return false; }\n\t\t\td = this.get_node(obj, true);\n\t\t\tif (d && d.length) {\n\t\t\t\ta = d.children('.jstree-anchor');\n\t\t\t}\n\t\t\told_type = obj.type;\n\t\t\told_icon = this.get_icon(obj);\n\t\t\tobj.type = type;\n\t\t\tif(old_icon === true || (t[old_type] && t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {\n\t\t\t\tthis.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);\n\t\t\t}\n\n\t\t\t// remove old type props\n\t\t\tif(t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].li_attr) {\n\t\t\t\t\tif (t[old_type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');\n\t\t\t\t\t\t\tif (d) { d.removeClass(t[old_type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = null;\n\t\t\t\t\t\t\tif (d) { d.removeAttr(k); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].a_attr) {\n\t\t\t\t\tif (t[old_type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');\n\t\t\t\t\t\t\tif (a) { a.removeClass(t[old_type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {\n\t\t\t\t\t\t\tif (k === 'href') {\n\t\t\t\t\t\t\t\tm[obj.id].a_attr[k] = '#';\n\t\t\t\t\t\t\t\tif (a) { a.attr('href', '#'); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdelete m[obj.id].a_attr[k];\n\t\t\t\t\t\t\t\tif (a) { a.removeAttr(k); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add new props\n\t\t\tif(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {\n\t\t\t\tfor (k in t[type].li_attr) {\n\t\t\t\t\tif (t[type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = t[type].li_attr[k];\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\td.addClass(t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\td.attr(k, t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];\n\t\t\t\t\t\t\tif (d) { d.addClass(t[type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {\n\t\t\t\tfor (k in t[type].a_attr) {\n\t\t\t\t\tif (t[type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].a_attr[k] = t[type].a_attr[k];\n\t\t\t\t\t\t\tif (a) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\ta.addClass(t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\ta.attr(k, t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'href' && m[obj.id].a_attr[k] === '#') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['href'] = t[type].a_attr['href'];\n\t\t\t\t\t\t\tif (a) { a.attr('href', t[type].a_attr['href']); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];\n\t\t\t\t\t\t\tif (a) { a.addClass(t[type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t};\n\t// include the types plugin by default\n\t// $.jstree.defaults.plugins.push(\"types\");\n\n\n/**\n * ### Unique plugin\n *\n * Enforces that no nodes with the same name can coexist as siblings.\n */\n\n\t/**\n\t * stores all defaults for the unique plugin\n\t * @name $.jstree.defaults.unique\n\t * @plugin unique\n\t */\n\t$.jstree.defaults.unique = {\n\t\t/**\n\t\t * Indicates if the comparison should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.unique.case_sensitive\n\t\t * @plugin unique\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.\n\t\t * @name $.jstree.defaults.unique.duplicate\n\t\t * @plugin unique\n\t\t */\n\t\tduplicate : function (name, counter) {\n\t\t\treturn name + ' (' + counter + ')';\n\t\t}\n\t};\n\n\t$.jstree.plugins.unique = function (options, parent) {\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tif(!par || !par.children) { return true; }\n\t\t\tvar n = chk === \"rename_node\" ? pos : obj.text,\n\t\t\t\tc = [],\n\t\t\t\ts = this.settings.unique.case_sensitive,\n\t\t\t\tm = this._model.data, i, j;\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\tc.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());\n\t\t\t}\n\t\t\tif(!s) { n = n.toLowerCase(); }\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"delete_node\":\n\t\t\t\t\treturn true;\n\t\t\t\tcase \"rename_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1 || (obj.text && obj.text[ s ? 'toString' : 'toLowerCase']() === n));\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"create_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"move_node\":\n\t\t\t\t\ti = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tthis.create_node = function (par, node, pos, callback, is_loaded) {\n\t\t\tif(!node || node.text === undefined) {\n\t\t\t\tif(par === null) {\n\t\t\t\t\tpar = $.jstree.root;\n\t\t\t\t}\n\t\t\t\tpar = this.get_node(par);\n\t\t\t\tif(!par) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tif(!node) { node = {}; }\n\t\t\t\tvar tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, cb = this.settings.unique.duplicate;\n\t\t\t\tn = tmp = this.get_string('New node');\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\tdpc.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());\n\t\t\t\t}\n\t\t\t\ti = 1;\n\t\t\t\twhile($.inArray(s ? n : n.toLowerCase(), dpc) !== -1) {\n\t\t\t\t\tn = cb.call(this, tmp, (++i)).toString();\n\t\t\t\t}\n\t\t\t\tnode.text = n;\n\t\t\t}\n\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t};\n\t};\n\n\t// include the unique plugin by default\n\t// $.jstree.defaults.plugins.push(\"unique\");\n\n\n/**\n * ### Wholerow plugin\n *\n * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.\n */\n\n\tvar div = document.createElement('DIV');\n\tdiv.setAttribute('unselectable','on');\n\tdiv.setAttribute('role','presentation');\n\tdiv.className = 'jstree-wholerow';\n\tdiv.innerHTML = '&#160;';\n\t$.jstree.plugins.wholerow = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on('ready.jstree set_state.jstree', $.proxy(function () {\n\t\t\t\t\t\tthis.hide_dots();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"init.jstree loading.jstree ready.jstree\", $.proxy(function () {\n\t\t\t\t\t\t//div.style.height = this._data.core.li_height + 'px';\n\t\t\t\t\t\tthis.get_container_ul().addClass('jstree-wholerow-ul');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"deselect_all.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"changed.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t\tvar tmp = false, i, j;\n\t\t\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = this.get_node(data.selected[i], true);\n\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\ttmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"open_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"hover_node.jstree dehover_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(e.type === \"hover_node\" && this.is_disabled(data.node)) { return; }\n\t\t\t\t\t\tthis.get_node(data.node, true).children('.jstree-wholerow')[e.type === \"hover_node\"?\"addClass\":\"removeClass\"]('jstree-wholerow-hovered');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-wholerow\", $.proxy(function (e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tvar tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp);\n\t\t\t\t\t}, this))\n\t\t\t\t/*!\n\t\t\t\t.on(\"mousedown.jstree touchstart.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\tif(e.target === e.currentTarget) {\n\t\t\t\t\t\t\tvar a = $(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\");\n\t\t\t\t\t\t\te.target = a[0];\n\t\t\t\t\t\t\ta.trigger(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t*/\n\t\t\t\t.on(\"click.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-leaf > .jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseover.jstree\", \".jstree-wholerow, .jstree-icon\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tif(!this.is_disabled(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseleave.jstree\", \".jstree-node\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this.settings.wholerow) {\n\t\t\t\tthis.element.find(\".jstree-wholerow\").remove();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar tmp = div.cloneNode(true);\n\t\t\t\t//tmp.style.height = this._data.core.li_height + 'px';\n\t\t\t\tif($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }\n\t\t\t\tif(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }\n\t\t\t\tobj.insertBefore(tmp, obj.childNodes[0]);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\t// include the wholerow plugin by default\n\t// $.jstree.defaults.plugins.push(\"wholerow\");\n\tif(document.registerElement && Object && Object.create) {\n\t\tvar proto = Object.create(HTMLElement.prototype);\n\t\tproto.createdCallback = function () {\n\t\t\tvar c = { core : {}, plugins : [] }, i;\n\t\t\tfor(i in $.jstree.plugins) {\n\t\t\t\tif($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.plugins.push(i);\n\t\t\t\t\tif(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {\n\t\t\t\t\t\tc[i] = JSON.parse(this.getAttribute(i));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(i in $.jstree.defaults.core) {\n\t\t\t\tif($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this).jstree(c);\n\t\t};\n\t\t// proto.attributeChangedCallback = function (name, previous, value) { };\n\t\ttry {\n\t\t\tdocument.registerElement(\"vakata-jstree\", { prototype: proto });\n\t\t} catch(ignore) { }\n\t}\n\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jstree/style.css",
    "content": "/* jsTree default theme */\n.jstree-node,\n.jstree-children,\n.jstree-container-ul {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  list-style-image: none;\n}\n.jstree-node {\n  white-space: nowrap;\n}\n.jstree-anchor {\n  display: inline-block;\n  color: black;\n  white-space: nowrap;\n  padding: 0 4px 0 1px;\n  margin: 0;\n  vertical-align: top;\n}\n.jstree-anchor:focus {\n  outline: 0;\n}\n.jstree-anchor,\n.jstree-anchor:link,\n.jstree-anchor:visited,\n.jstree-anchor:hover,\n.jstree-anchor:active {\n  text-decoration: none;\n  color: inherit;\n}\n.jstree-icon {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-icon:empty {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-ocl {\n  cursor: pointer;\n}\n.jstree-leaf > .jstree-ocl {\n  cursor: default;\n}\n.jstree .jstree-open > .jstree-children {\n  display: block;\n}\n.jstree .jstree-closed > .jstree-children,\n.jstree .jstree-leaf > .jstree-children {\n  display: none;\n}\n.jstree-anchor > .jstree-themeicon {\n  margin-right: 2px;\n}\n.jstree-no-icons .jstree-themeicon,\n.jstree-anchor > .jstree-themeicon-hidden {\n  display: none;\n}\n.jstree-hidden,\n.jstree-node.jstree-hidden {\n  display: none;\n}\n.jstree-rtl .jstree-anchor {\n  padding: 0 1px 0 4px;\n}\n.jstree-rtl .jstree-anchor > .jstree-themeicon {\n  margin-left: 2px;\n  margin-right: 0;\n}\n.jstree-rtl .jstree-node {\n  margin-left: 0;\n}\n.jstree-rtl .jstree-container-ul > .jstree-node {\n  margin-right: 0;\n}\n.jstree-wholerow-ul {\n  position: relative;\n  display: inline-block;\n  min-width: 100%;\n}\n.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {\n  cursor: pointer;\n}\n.jstree-wholerow-ul .jstree-anchor,\n.jstree-wholerow-ul .jstree-icon {\n  position: relative;\n}\n.jstree-wholerow-ul .jstree-wholerow {\n  width: 100%;\n  cursor: pointer;\n  position: absolute;\n  left: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.vakata-context {\n  display: none;\n}\n.vakata-context,\n.vakata-context ul {\n  margin: 0;\n  padding: 2px;\n  position: absolute;\n  background: #f5f5f5;\n  border: 1px solid #979797;\n  box-shadow: 2px 2px 2px #999999;\n}\n.vakata-context ul {\n  list-style: none;\n  left: 100%;\n  margin-top: -2.7em;\n  margin-left: -4px;\n}\n.vakata-context .vakata-context-right ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context li {\n  list-style: none;\n}\n.vakata-context li > a {\n  display: block;\n  padding: 0 2em 0 2em;\n  text-decoration: none;\n  width: auto;\n  color: black;\n  white-space: nowrap;\n  line-height: 2.4em;\n  text-shadow: 1px 1px 0 white;\n  border-radius: 1px;\n}\n.vakata-context li > a:hover {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==\");\n  background-position: right center;\n  background-repeat: no-repeat;\n}\n.vakata-context li > a:focus {\n  outline: 0;\n}\n.vakata-context .vakata-context-hover > a {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context .vakata-context-separator > a,\n.vakata-context .vakata-context-separator > a:hover {\n  background: white;\n  border: 0;\n  border-top: 1px solid #e2e3e3;\n  height: 1px;\n  min-height: 1px;\n  max-height: 1px;\n  padding: 0;\n  margin: 0 0 0 2.4em;\n  border-left: 1px solid #e0e0e0;\n  text-shadow: 0 0 0 transparent;\n  box-shadow: 0 0 0 transparent;\n  border-radius: 0;\n}\n.vakata-context .vakata-contextmenu-disabled a,\n.vakata-context .vakata-contextmenu-disabled a:hover {\n  color: silver;\n  background-color: transparent;\n  border: 0;\n  box-shadow: 0 0 0;\n}\n.vakata-context li > a > i {\n  text-decoration: none;\n  display: inline-block;\n  width: 2.4em;\n  height: 2.4em;\n  background: transparent;\n  margin: 0 0 0 -2em;\n  vertical-align: top;\n  text-align: center;\n  line-height: 2.4em;\n}\n.vakata-context li > a > i:empty {\n  width: 2.4em;\n  line-height: 2.4em;\n}\n.vakata-context li > a .vakata-contextmenu-sep {\n  display: inline-block;\n  width: 1px;\n  height: 2.4em;\n  background: white;\n  margin: 0 0.5em 0 0;\n  border-left: 1px solid #e2e3e3;\n}\n.vakata-context .vakata-contextmenu-shortcut {\n  font-size: 0.8em;\n  color: silver;\n  opacity: 0.5;\n  display: none;\n}\n.vakata-context-rtl ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context-rtl li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7\");\n  background-position: left center;\n  background-repeat: no-repeat;\n}\n.vakata-context-rtl .vakata-context-separator > a {\n  margin: 0 2.4em 0 0;\n  border-left: 0;\n  border-right: 1px solid #e2e3e3;\n}\n.vakata-context-rtl .vakata-context-left ul {\n  right: auto;\n  left: 100%;\n  margin-left: -4px;\n  margin-right: auto;\n}\n.vakata-context-rtl li > a > i {\n  margin: 0 -2em 0 0;\n}\n.vakata-context-rtl li > a .vakata-contextmenu-sep {\n  margin: 0 0 0 0.5em;\n  border-left-color: white;\n  background: #e2e3e3;\n}\n#jstree-marker {\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin: -5px 0 0 0;\n  padding: 0;\n  border-right: 0;\n  border-top: 5px solid transparent;\n  border-bottom: 5px solid transparent;\n  border-left: 5px solid;\n  width: 0;\n  height: 0;\n  font-size: 0;\n  line-height: 0;\n}\n#jstree-dnd {\n  line-height: 16px;\n  margin: 0;\n  padding: 4px;\n}\n#jstree-dnd .jstree-icon,\n#jstree-dnd .jstree-copy {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0 2px 0 0;\n  padding: 0;\n  width: 16px;\n  height: 16px;\n}\n#jstree-dnd .jstree-ok {\n  background: green;\n}\n#jstree-dnd .jstree-er {\n  background: red;\n}\n#jstree-dnd .jstree-copy {\n  margin: 0 2px 0 2px;\n}\n.jstree-default .jstree-node,\n.jstree-default .jstree-icon {\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n.jstree-default .jstree-anchor,\n.jstree-default .jstree-wholerow {\n  transition: background-color 0.15s, box-shadow 0.15s;\n}\n.jstree-default .jstree-hovered {\n  background: #e7f4f9;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #cccccc;\n}\n.jstree-default .jstree-context {\n  background: #e7f4f9;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #cccccc;\n}\n.jstree-default .jstree-clicked {\n  background: #beebff;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #999999;\n}\n.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {\n  display: none;\n}\n.jstree-default .jstree-disabled {\n  background: transparent;\n  color: #666666;\n}\n.jstree-default .jstree-disabled.jstree-hovered {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default .jstree-disabled > .jstree-icon {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default .jstree-search {\n  font-style: italic;\n  color: #8b0000;\n  font-weight: bold;\n}\n.jstree-default .jstree-no-checkboxes .jstree-checkbox {\n  display: none !important;\n}\n.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {\n  background: #e7f4f9;\n}\n.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {\n  background: transparent;\n}\n.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {\n  background: #e7f4f9;\n}\n.jstree-default > .jstree-striped {\n  min-width: 100%;\n  display: inline-block;\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==\") left top repeat;\n}\n.jstree-default > .jstree-wholerow-ul .jstree-hovered,\n.jstree-default > .jstree-wholerow-ul .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n  border-radius: 0;\n}\n.jstree-default .jstree-wholerow {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.jstree-default .jstree-wholerow-hovered {\n  background: #e7f4f9;\n}\n.jstree-default .jstree-wholerow-clicked {\n  background: #beebff;\n  background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);\n  background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);\n}\n.jstree-default .jstree-node {\n  min-height: 24px;\n  line-height: 24px;\n  margin-left: 24px;\n  min-width: 24px;\n}\n.jstree-default .jstree-anchor {\n  line-height: 24px;\n  height: 24px;\n}\n.jstree-default .jstree-icon {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default .jstree-icon:empty {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default.jstree-rtl .jstree-node {\n  margin-right: 24px;\n}\n.jstree-default .jstree-wholerow {\n  height: 24px;\n}\n.jstree-default .jstree-node,\n.jstree-default .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default .jstree-node {\n  background-position: -292px -4px;\n  background-repeat: repeat-y;\n}\n.jstree-default .jstree-last {\n  background: transparent;\n}\n.jstree-default .jstree-open > .jstree-ocl {\n  background-position: -132px -4px;\n}\n.jstree-default .jstree-closed > .jstree-ocl {\n  background-position: -100px -4px;\n}\n.jstree-default .jstree-leaf > .jstree-ocl {\n  background-position: -68px -4px;\n}\n.jstree-default .jstree-themeicon {\n  background-position: -260px -4px;\n}\n.jstree-default > .jstree-no-dots .jstree-node,\n.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -4px;\n}\n.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -4px;\n}\n.jstree-default .jstree-disabled {\n  background: transparent;\n}\n.jstree-default .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default .jstree-checkbox {\n  background-position: -164px -4px;\n}\n.jstree-default .jstree-checkbox:hover {\n  background-position: -164px -36px;\n}\n.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default .jstree-checked > .jstree-checkbox {\n  background-position: -228px -4px;\n}\n.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default .jstree-checked > .jstree-checkbox:hover {\n  background-position: -228px -36px;\n}\n.jstree-default .jstree-anchor > .jstree-undetermined {\n  background-position: -196px -4px;\n}\n.jstree-default .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -196px -36px;\n}\n.jstree-default .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default > .jstree-striped {\n  background-size: auto 48px;\n}\n.jstree-default.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -132px -36px;\n}\n.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -100px -36px;\n}\n.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -68px -36px;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -36px;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -36px;\n}\n.jstree-default .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default .jstree-file {\n  background: url(\"32px.png\") -100px -68px no-repeat;\n}\n.jstree-default .jstree-folder {\n  background: url(\"32px.png\") -260px -4px no-repeat;\n}\n.jstree-default > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default {\n  line-height: 24px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default .jstree-ok,\n#jstree-dnd.jstree-default .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default i {\n  background: transparent;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n#jstree-dnd.jstree-default .jstree-ok {\n  background-position: -4px -68px;\n}\n#jstree-dnd.jstree-default .jstree-er {\n  background-position: -36px -68px;\n}\n.jstree-default.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n}\n.jstree-default.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-small .jstree-node {\n  min-height: 18px;\n  line-height: 18px;\n  margin-left: 18px;\n  min-width: 18px;\n}\n.jstree-default-small .jstree-anchor {\n  line-height: 18px;\n  height: 18px;\n}\n.jstree-default-small .jstree-icon {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-small .jstree-icon:empty {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  margin-right: 18px;\n}\n.jstree-default-small .jstree-wholerow {\n  height: 18px;\n}\n.jstree-default-small .jstree-node,\n.jstree-default-small .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-small .jstree-node {\n  background-position: -295px -7px;\n  background-repeat: repeat-y;\n}\n.jstree-default-small .jstree-last {\n  background: transparent;\n}\n.jstree-default-small .jstree-open > .jstree-ocl {\n  background-position: -135px -7px;\n}\n.jstree-default-small .jstree-closed > .jstree-ocl {\n  background-position: -103px -7px;\n}\n.jstree-default-small .jstree-leaf > .jstree-ocl {\n  background-position: -71px -7px;\n}\n.jstree-default-small .jstree-themeicon {\n  background-position: -263px -7px;\n}\n.jstree-default-small > .jstree-no-dots .jstree-node,\n.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -7px;\n}\n.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -7px;\n}\n.jstree-default-small .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-small .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-small .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-small .jstree-checkbox {\n  background-position: -167px -7px;\n}\n.jstree-default-small .jstree-checkbox:hover {\n  background-position: -167px -39px;\n}\n.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-small .jstree-checked > .jstree-checkbox {\n  background-position: -231px -7px;\n}\n.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-small .jstree-checked > .jstree-checkbox:hover {\n  background-position: -231px -39px;\n}\n.jstree-default-small .jstree-anchor > .jstree-undetermined {\n  background-position: -199px -7px;\n}\n.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -199px -39px;\n}\n.jstree-default-small .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-small > .jstree-striped {\n  background-size: auto 36px;\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -135px -39px;\n}\n.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -103px -39px;\n}\n.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -71px -39px;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -39px;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -39px;\n}\n.jstree-default-small .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-small .jstree-file {\n  background: url(\"32px.png\") -103px -71px no-repeat;\n}\n.jstree-default-small .jstree-folder {\n  background: url(\"32px.png\") -263px -7px no-repeat;\n}\n.jstree-default-small > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-small {\n  line-height: 18px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-small .jstree-ok,\n#jstree-dnd.jstree-default-small .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-small i {\n  background: transparent;\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n#jstree-dnd.jstree-default-small .jstree-ok {\n  background-position: -7px -71px;\n}\n#jstree-dnd.jstree-default-small .jstree-er {\n  background-position: -39px -71px;\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==\");\n}\n.jstree-default-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-large .jstree-node {\n  min-height: 32px;\n  line-height: 32px;\n  margin-left: 32px;\n  min-width: 32px;\n}\n.jstree-default-large .jstree-anchor {\n  line-height: 32px;\n  height: 32px;\n}\n.jstree-default-large .jstree-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-large .jstree-icon:empty {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  margin-right: 32px;\n}\n.jstree-default-large .jstree-wholerow {\n  height: 32px;\n}\n.jstree-default-large .jstree-node,\n.jstree-default-large .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-large .jstree-node {\n  background-position: -288px 0px;\n  background-repeat: repeat-y;\n}\n.jstree-default-large .jstree-last {\n  background: transparent;\n}\n.jstree-default-large .jstree-open > .jstree-ocl {\n  background-position: -128px 0px;\n}\n.jstree-default-large .jstree-closed > .jstree-ocl {\n  background-position: -96px 0px;\n}\n.jstree-default-large .jstree-leaf > .jstree-ocl {\n  background-position: -64px 0px;\n}\n.jstree-default-large .jstree-themeicon {\n  background-position: -256px 0px;\n}\n.jstree-default-large > .jstree-no-dots .jstree-node,\n.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px 0px;\n}\n.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px 0px;\n}\n.jstree-default-large .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-large .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-large .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-large .jstree-checkbox {\n  background-position: -160px 0px;\n}\n.jstree-default-large .jstree-checkbox:hover {\n  background-position: -160px -32px;\n}\n.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-large .jstree-checked > .jstree-checkbox {\n  background-position: -224px 0px;\n}\n.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-large .jstree-checked > .jstree-checkbox:hover {\n  background-position: -224px -32px;\n}\n.jstree-default-large .jstree-anchor > .jstree-undetermined {\n  background-position: -192px 0px;\n}\n.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -192px -32px;\n}\n.jstree-default-large .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-large > .jstree-striped {\n  background-size: auto 64px;\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -128px -32px;\n}\n.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -96px -32px;\n}\n.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -64px -32px;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px -32px;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px -32px;\n}\n.jstree-default-large .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-large .jstree-file {\n  background: url(\"32px.png\") -96px -64px no-repeat;\n}\n.jstree-default-large .jstree-folder {\n  background: url(\"32px.png\") -256px 0px no-repeat;\n}\n.jstree-default-large > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-large {\n  line-height: 32px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-large .jstree-ok,\n#jstree-dnd.jstree-default-large .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-large i {\n  background: transparent;\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n#jstree-dnd.jstree-default-large .jstree-ok {\n  background-position: 0px -64px;\n}\n#jstree-dnd.jstree-default-large .jstree-er {\n  background-position: -32px -64px;\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==\");\n}\n.jstree-default-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n@media (max-width: 768px) {\n  #jstree-dnd.jstree-dnd-responsive {\n    line-height: 40px;\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  #jstree-dnd.jstree-dnd-responsive > i {\n    background: transparent;\n    width: 40px;\n    height: 40px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {\n    background-image: url(\"40px.png\");\n    background-position: 0 -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-er {\n    background-image: url(\"40px.png\");\n    background-position: -40px -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-marker.jstree-dnd-responsive {\n    border-left-width: 10px;\n    border-top-width: 10px;\n    border-bottom-width: 10px;\n    margin-top: -10px;\n  }\n}\n@media (max-width: 768px) {\n  .jstree-default-responsive {\n    /*\n\t.jstree-open > .jstree-ocl,\n\t.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }\n\t*/\n  }\n  .jstree-default-responsive .jstree-icon {\n    background-image: url(\"40px.png\");\n  }\n  .jstree-default-responsive .jstree-node,\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-node {\n    min-height: 40px;\n    line-height: 40px;\n    margin-left: 40px;\n    min-width: 40px;\n    white-space: nowrap;\n  }\n  .jstree-default-responsive .jstree-anchor {\n    line-height: 40px;\n    height: 40px;\n  }\n  .jstree-default-responsive .jstree-icon,\n  .jstree-default-responsive .jstree-icon:empty {\n    width: 40px;\n    height: 40px;\n    line-height: 40px;\n  }\n  .jstree-default-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-node {\n    margin-left: 0;\n    margin-right: 40px;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {\n    margin-right: 0;\n  }\n  .jstree-default-responsive .jstree-ocl,\n  .jstree-default-responsive .jstree-themeicon,\n  .jstree-default-responsive .jstree-checkbox {\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-open > .jstree-ocl {\n    background-position: 0 0px !important;\n  }\n  .jstree-default-responsive .jstree-closed > .jstree-ocl {\n    background-position: 0 -40px !important;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {\n    background-position: -40px 0px !important;\n  }\n  .jstree-default-responsive .jstree-themeicon {\n    background-position: -40px -40px;\n  }\n  .jstree-default-responsive .jstree-checkbox,\n  .jstree-default-responsive .jstree-checkbox:hover {\n    background-position: -40px -80px;\n  }\n  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n  .jstree-default-responsive .jstree-checked > .jstree-checkbox,\n  .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {\n    background-position: 0 -80px;\n  }\n  .jstree-default-responsive .jstree-anchor > .jstree-undetermined,\n  .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {\n    background-position: 0 -120px;\n  }\n  .jstree-default-responsive .jstree-anchor {\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  .jstree-default-responsive > .jstree-striped {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-wholerow {\n    border-top: 1px solid rgba(255, 255, 255, 0.7);\n    border-bottom: 1px solid rgba(64, 64, 64, 0.2);\n    background: #ebebeb;\n    height: 40px;\n  }\n  .jstree-default-responsive .jstree-wholerow-hovered {\n    background: #e7f4f9;\n  }\n  .jstree-default-responsive .jstree-wholerow-clicked {\n    background: #beebff;\n  }\n  .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {\n    box-shadow: inset 0 -6px 3px -5px #666666;\n  }\n  .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {\n    box-shadow: inset 0 6px 3px -5px #666666;\n    border-top: 0;\n  }\n  .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {\n    box-shadow: none;\n  }\n  .jstree-default-responsive .jstree-node,\n  .jstree-default-responsive .jstree-icon,\n  .jstree-default-responsive .jstree-node > .jstree-ocl,\n  .jstree-default-responsive .jstree-themeicon,\n  .jstree-default-responsive .jstree-checkbox {\n    background-image: url(\"40px.png\");\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-node {\n    background-position: -80px 0;\n    background-repeat: repeat-y;\n  }\n  .jstree-default-responsive .jstree-last {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl {\n    background-position: -40px -120px;\n  }\n  .jstree-default-responsive .jstree-last > .jstree-ocl {\n    background-position: -40px -160px;\n  }\n  .jstree-default-responsive .jstree-themeicon-custom {\n    background-color: transparent;\n    background-image: none;\n    background-position: 0 0;\n  }\n  .jstree-default-responsive .jstree-file {\n    background: url(\"40px.png\") 0 -160px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-folder {\n    background: url(\"40px.png\") -40px -40px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jstree/themes/dark/style.css",
    "content": "/* jsTree default dark theme */\n.jstree-node,\n.jstree-children,\n.jstree-container-ul {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  list-style-image: none;\n}\n.jstree-node {\n  white-space: nowrap;\n}\n.jstree-anchor {\n  display: inline-block;\n  color: black;\n  white-space: nowrap;\n  padding: 0 4px 0 1px;\n  margin: 0;\n  vertical-align: top;\n}\n.jstree-anchor:focus {\n  outline: 0;\n}\n.jstree-anchor,\n.jstree-anchor:link,\n.jstree-anchor:visited,\n.jstree-anchor:hover,\n.jstree-anchor:active {\n  text-decoration: none;\n  color: inherit;\n}\n.jstree-icon {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-icon:empty {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-ocl {\n  cursor: pointer;\n}\n.jstree-leaf > .jstree-ocl {\n  cursor: default;\n}\n.jstree .jstree-open > .jstree-children {\n  display: block;\n}\n.jstree .jstree-closed > .jstree-children,\n.jstree .jstree-leaf > .jstree-children {\n  display: none;\n}\n.jstree-anchor > .jstree-themeicon {\n  margin-right: 2px;\n}\n.jstree-no-icons .jstree-themeicon,\n.jstree-anchor > .jstree-themeicon-hidden {\n  display: none;\n}\n.jstree-hidden,\n.jstree-node.jstree-hidden {\n  display: none;\n}\n.jstree-rtl .jstree-anchor {\n  padding: 0 1px 0 4px;\n}\n.jstree-rtl .jstree-anchor > .jstree-themeicon {\n  margin-left: 2px;\n  margin-right: 0;\n}\n.jstree-rtl .jstree-node {\n  margin-left: 0;\n}\n.jstree-rtl .jstree-container-ul > .jstree-node {\n  margin-right: 0;\n}\n.jstree-wholerow-ul {\n  position: relative;\n  display: inline-block;\n  min-width: 100%;\n}\n.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {\n  cursor: pointer;\n}\n.jstree-wholerow-ul .jstree-anchor,\n.jstree-wholerow-ul .jstree-icon {\n  position: relative;\n}\n.jstree-wholerow-ul .jstree-wholerow {\n  width: 100%;\n  cursor: pointer;\n  position: absolute;\n  left: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.vakata-context {\n  display: none;\n}\n.vakata-context,\n.vakata-context ul {\n  margin: 0;\n  padding: 2px;\n  position: absolute;\n  background: #f5f5f5;\n  border: 1px solid #979797;\n  box-shadow: 2px 2px 2px #999999;\n}\n.vakata-context ul {\n  list-style: none;\n  left: 100%;\n  margin-top: -2.7em;\n  margin-left: -4px;\n}\n.vakata-context .vakata-context-right ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context li {\n  list-style: none;\n}\n.vakata-context li > a {\n  display: block;\n  padding: 0 2em 0 2em;\n  text-decoration: none;\n  width: auto;\n  color: black;\n  white-space: nowrap;\n  line-height: 2.4em;\n  text-shadow: 1px 1px 0 white;\n  border-radius: 1px;\n}\n.vakata-context li > a:hover {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==\");\n  background-position: right center;\n  background-repeat: no-repeat;\n}\n.vakata-context li > a:focus {\n  outline: 0;\n}\n.vakata-context .vakata-context-hover > a {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context .vakata-context-separator > a,\n.vakata-context .vakata-context-separator > a:hover {\n  background: white;\n  border: 0;\n  border-top: 1px solid #e2e3e3;\n  height: 1px;\n  min-height: 1px;\n  max-height: 1px;\n  padding: 0;\n  margin: 0 0 0 2.4em;\n  border-left: 1px solid #e0e0e0;\n  text-shadow: 0 0 0 transparent;\n  box-shadow: 0 0 0 transparent;\n  border-radius: 0;\n}\n.vakata-context .vakata-contextmenu-disabled a,\n.vakata-context .vakata-contextmenu-disabled a:hover {\n  color: silver;\n  background-color: transparent;\n  border: 0;\n  box-shadow: 0 0 0;\n}\n.vakata-context li > a > i {\n  text-decoration: none;\n  display: inline-block;\n  width: 2.4em;\n  height: 2.4em;\n  background: transparent;\n  margin: 0 0 0 -2em;\n  vertical-align: top;\n  text-align: center;\n  line-height: 2.4em;\n}\n.vakata-context li > a > i:empty {\n  width: 2.4em;\n  line-height: 2.4em;\n}\n.vakata-context li > a .vakata-contextmenu-sep {\n  display: inline-block;\n  width: 1px;\n  height: 2.4em;\n  background: white;\n  margin: 0 0.5em 0 0;\n  border-left: 1px solid #e2e3e3;\n}\n.vakata-context .vakata-contextmenu-shortcut {\n  font-size: 0.8em;\n  color: silver;\n  opacity: 0.5;\n  display: none;\n}\n.vakata-context-rtl ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context-rtl li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7\");\n  background-position: left center;\n  background-repeat: no-repeat;\n}\n.vakata-context-rtl .vakata-context-separator > a {\n  margin: 0 2.4em 0 0;\n  border-left: 0;\n  border-right: 1px solid #e2e3e3;\n}\n.vakata-context-rtl .vakata-context-left ul {\n  right: auto;\n  left: 100%;\n  margin-left: -4px;\n  margin-right: auto;\n}\n.vakata-context-rtl li > a > i {\n  margin: 0 -2em 0 0;\n}\n.vakata-context-rtl li > a .vakata-contextmenu-sep {\n  margin: 0 0 0 0.5em;\n  border-left-color: white;\n  background: #e2e3e3;\n}\n#jstree-marker {\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin: -5px 0 0 0;\n  padding: 0;\n  border-right: 0;\n  border-top: 5px solid transparent;\n  border-bottom: 5px solid transparent;\n  border-left: 5px solid;\n  width: 0;\n  height: 0;\n  font-size: 0;\n  line-height: 0;\n}\n#jstree-dnd {\n  line-height: 16px;\n  margin: 0;\n  padding: 4px;\n}\n#jstree-dnd .jstree-icon,\n#jstree-dnd .jstree-copy {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0 2px 0 0;\n  padding: 0;\n  width: 16px;\n  height: 16px;\n}\n#jstree-dnd .jstree-ok {\n  background: green;\n}\n#jstree-dnd .jstree-er {\n  background: red;\n}\n#jstree-dnd .jstree-copy {\n  margin: 0 2px 0 2px;\n}\n.jstree-default-dark .jstree-node,\n.jstree-default-dark .jstree-icon {\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n.jstree-default-dark .jstree-anchor,\n.jstree-default-dark .jstree-wholerow {\n  transition: background-color 0.15s, box-shadow 0.15s;\n}\n.jstree-default-dark .jstree-hovered {\n  background: #555555;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #555555;\n}\n.jstree-default-dark .jstree-context {\n  background: #555555;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #555555;\n}\n.jstree-default-dark .jstree-clicked {\n  background: #5fa2db;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #666666;\n}\n.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon {\n  display: none;\n}\n.jstree-default-dark .jstree-disabled {\n  background: transparent;\n  color: #666666;\n}\n.jstree-default-dark .jstree-disabled.jstree-hovered {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default-dark .jstree-disabled.jstree-clicked {\n  background: #333333;\n}\n.jstree-default-dark .jstree-disabled > .jstree-icon {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-dark .jstree-search {\n  font-style: italic;\n  color: #ffffff;\n  font-weight: bold;\n}\n.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox {\n  display: none !important;\n}\n.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {\n  background: #555555;\n}\n.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {\n  background: transparent;\n}\n.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {\n  background: #555555;\n}\n.jstree-default-dark > .jstree-striped {\n  min-width: 100%;\n  display: inline-block;\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==\") left top repeat;\n}\n.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered,\n.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n  border-radius: 0;\n}\n.jstree-default-dark .jstree-wholerow {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.jstree-default-dark .jstree-wholerow-hovered {\n  background: #555555;\n}\n.jstree-default-dark .jstree-wholerow-clicked {\n  background: #5fa2db;\n  background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);\n  background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%);\n}\n.jstree-default-dark .jstree-node {\n  min-height: 24px;\n  line-height: 24px;\n  margin-left: 24px;\n  min-width: 24px;\n}\n.jstree-default-dark .jstree-anchor {\n  line-height: 24px;\n  height: 24px;\n}\n.jstree-default-dark .jstree-icon {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default-dark .jstree-icon:empty {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default-dark.jstree-rtl .jstree-node {\n  margin-right: 24px;\n}\n.jstree-default-dark .jstree-wholerow {\n  height: 24px;\n}\n.jstree-default-dark .jstree-node,\n.jstree-default-dark .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-dark .jstree-node {\n  background-position: -292px -4px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark .jstree-open > .jstree-ocl {\n  background-position: -132px -4px;\n}\n.jstree-default-dark .jstree-closed > .jstree-ocl {\n  background-position: -100px -4px;\n}\n.jstree-default-dark .jstree-leaf > .jstree-ocl {\n  background-position: -68px -4px;\n}\n.jstree-default-dark .jstree-themeicon {\n  background-position: -260px -4px;\n}\n.jstree-default-dark > .jstree-no-dots .jstree-node,\n.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -4px;\n}\n.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -4px;\n}\n.jstree-default-dark .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-dark .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-dark .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-dark .jstree-checkbox {\n  background-position: -164px -4px;\n}\n.jstree-default-dark .jstree-checkbox:hover {\n  background-position: -164px -36px;\n}\n.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-dark .jstree-checked > .jstree-checkbox {\n  background-position: -228px -4px;\n}\n.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-dark .jstree-checked > .jstree-checkbox:hover {\n  background-position: -228px -36px;\n}\n.jstree-default-dark .jstree-anchor > .jstree-undetermined {\n  background-position: -196px -4px;\n}\n.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -196px -36px;\n}\n.jstree-default-dark .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-dark > .jstree-striped {\n  background-size: auto 48px;\n}\n.jstree-default-dark.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -132px -36px;\n}\n.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -100px -36px;\n}\n.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -68px -36px;\n}\n.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -36px;\n}\n.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -36px;\n}\n.jstree-default-dark .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-dark .jstree-file {\n  background: url(\"32px.png\") -100px -68px no-repeat;\n}\n.jstree-default-dark .jstree-folder {\n  background: url(\"32px.png\") -260px -4px no-repeat;\n}\n.jstree-default-dark > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-dark {\n  line-height: 24px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-dark .jstree-ok,\n#jstree-dnd.jstree-default-dark .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-dark i {\n  background: transparent;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n#jstree-dnd.jstree-default-dark .jstree-ok {\n  background-position: -4px -68px;\n}\n#jstree-dnd.jstree-default-dark .jstree-er {\n  background-position: -36px -68px;\n}\n.jstree-default-dark.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-small .jstree-node {\n  min-height: 18px;\n  line-height: 18px;\n  margin-left: 18px;\n  min-width: 18px;\n}\n.jstree-default-dark-small .jstree-anchor {\n  line-height: 18px;\n  height: 18px;\n}\n.jstree-default-dark-small .jstree-icon {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-dark-small .jstree-icon:empty {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-node {\n  margin-right: 18px;\n}\n.jstree-default-dark-small .jstree-wholerow {\n  height: 18px;\n}\n.jstree-default-dark-small .jstree-node,\n.jstree-default-dark-small .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-dark-small .jstree-node {\n  background-position: -295px -7px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark-small .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-small .jstree-open > .jstree-ocl {\n  background-position: -135px -7px;\n}\n.jstree-default-dark-small .jstree-closed > .jstree-ocl {\n  background-position: -103px -7px;\n}\n.jstree-default-dark-small .jstree-leaf > .jstree-ocl {\n  background-position: -71px -7px;\n}\n.jstree-default-dark-small .jstree-themeicon {\n  background-position: -263px -7px;\n}\n.jstree-default-dark-small > .jstree-no-dots .jstree-node,\n.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -7px;\n}\n.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -7px;\n}\n.jstree-default-dark-small .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-dark-small .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-dark-small .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-dark-small .jstree-checkbox {\n  background-position: -167px -7px;\n}\n.jstree-default-dark-small .jstree-checkbox:hover {\n  background-position: -167px -39px;\n}\n.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-dark-small .jstree-checked > .jstree-checkbox {\n  background-position: -231px -7px;\n}\n.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover {\n  background-position: -231px -39px;\n}\n.jstree-default-dark-small .jstree-anchor > .jstree-undetermined {\n  background-position: -199px -7px;\n}\n.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -199px -39px;\n}\n.jstree-default-dark-small .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-dark-small > .jstree-striped {\n  background-size: auto 36px;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -135px -39px;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -103px -39px;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -71px -39px;\n}\n.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -39px;\n}\n.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -39px;\n}\n.jstree-default-dark-small .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-dark-small .jstree-file {\n  background: url(\"32px.png\") -103px -71px no-repeat;\n}\n.jstree-default-dark-small .jstree-folder {\n  background: url(\"32px.png\") -263px -7px no-repeat;\n}\n.jstree-default-dark-small > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-dark-small {\n  line-height: 18px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-dark-small .jstree-ok,\n#jstree-dnd.jstree-default-dark-small .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-dark-small i {\n  background: transparent;\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n#jstree-dnd.jstree-default-dark-small .jstree-ok {\n  background-position: -7px -71px;\n}\n#jstree-dnd.jstree-default-dark-small .jstree-er {\n  background-position: -39px -71px;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-large .jstree-node {\n  min-height: 32px;\n  line-height: 32px;\n  margin-left: 32px;\n  min-width: 32px;\n}\n.jstree-default-dark-large .jstree-anchor {\n  line-height: 32px;\n  height: 32px;\n}\n.jstree-default-dark-large .jstree-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-dark-large .jstree-icon:empty {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-node {\n  margin-right: 32px;\n}\n.jstree-default-dark-large .jstree-wholerow {\n  height: 32px;\n}\n.jstree-default-dark-large .jstree-node,\n.jstree-default-dark-large .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-dark-large .jstree-node {\n  background-position: -288px 0px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark-large .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-large .jstree-open > .jstree-ocl {\n  background-position: -128px 0px;\n}\n.jstree-default-dark-large .jstree-closed > .jstree-ocl {\n  background-position: -96px 0px;\n}\n.jstree-default-dark-large .jstree-leaf > .jstree-ocl {\n  background-position: -64px 0px;\n}\n.jstree-default-dark-large .jstree-themeicon {\n  background-position: -256px 0px;\n}\n.jstree-default-dark-large > .jstree-no-dots .jstree-node,\n.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px 0px;\n}\n.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px 0px;\n}\n.jstree-default-dark-large .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-dark-large .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-dark-large .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-dark-large .jstree-checkbox {\n  background-position: -160px 0px;\n}\n.jstree-default-dark-large .jstree-checkbox:hover {\n  background-position: -160px -32px;\n}\n.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-dark-large .jstree-checked > .jstree-checkbox {\n  background-position: -224px 0px;\n}\n.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover {\n  background-position: -224px -32px;\n}\n.jstree-default-dark-large .jstree-anchor > .jstree-undetermined {\n  background-position: -192px 0px;\n}\n.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -192px -32px;\n}\n.jstree-default-dark-large .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-dark-large > .jstree-striped {\n  background-size: auto 64px;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -128px -32px;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -96px -32px;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -64px -32px;\n}\n.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px -32px;\n}\n.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px -32px;\n}\n.jstree-default-dark-large .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-dark-large .jstree-file {\n  background: url(\"32px.png\") -96px -64px no-repeat;\n}\n.jstree-default-dark-large .jstree-folder {\n  background: url(\"32px.png\") -256px 0px no-repeat;\n}\n.jstree-default-dark-large > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-dark-large {\n  line-height: 32px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-dark-large .jstree-ok,\n#jstree-dnd.jstree-default-dark-large .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-dark-large i {\n  background: transparent;\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n#jstree-dnd.jstree-default-dark-large .jstree-ok {\n  background-position: 0px -64px;\n}\n#jstree-dnd.jstree-default-dark-large .jstree-er {\n  background-position: -32px -64px;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n@media (max-width: 768px) {\n  #jstree-dnd.jstree-dnd-responsive {\n    line-height: 40px;\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  #jstree-dnd.jstree-dnd-responsive > i {\n    background: transparent;\n    width: 40px;\n    height: 40px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {\n    background-image: url(\"40px.png\");\n    background-position: 0 -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-er {\n    background-image: url(\"40px.png\");\n    background-position: -40px -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-marker.jstree-dnd-responsive {\n    border-left-width: 10px;\n    border-top-width: 10px;\n    border-bottom-width: 10px;\n    margin-top: -10px;\n  }\n}\n@media (max-width: 768px) {\n  .jstree-default-dark-responsive {\n    /*\n\t.jstree-open > .jstree-ocl,\n\t.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }\n\t*/\n  }\n  .jstree-default-dark-responsive .jstree-icon {\n    background-image: url(\"40px.png\");\n  }\n  .jstree-default-dark-responsive .jstree-node,\n  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-dark-responsive .jstree-node {\n    min-height: 40px;\n    line-height: 40px;\n    margin-left: 40px;\n    min-width: 40px;\n    white-space: nowrap;\n  }\n  .jstree-default-dark-responsive .jstree-anchor {\n    line-height: 40px;\n    height: 40px;\n  }\n  .jstree-default-dark-responsive .jstree-icon,\n  .jstree-default-dark-responsive .jstree-icon:empty {\n    width: 40px;\n    height: 40px;\n    line-height: 40px;\n  }\n  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n  }\n  .jstree-default-dark-responsive.jstree-rtl .jstree-node {\n    margin-left: 0;\n    margin-right: 40px;\n  }\n  .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node {\n    margin-right: 0;\n  }\n  .jstree-default-dark-responsive .jstree-ocl,\n  .jstree-default-dark-responsive .jstree-themeicon,\n  .jstree-default-dark-responsive .jstree-checkbox {\n    background-size: 120px 240px;\n  }\n  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-dark-responsive .jstree-open > .jstree-ocl {\n    background-position: 0 0px !important;\n  }\n  .jstree-default-dark-responsive .jstree-closed > .jstree-ocl {\n    background-position: 0 -40px !important;\n  }\n  .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl {\n    background-position: -40px 0px !important;\n  }\n  .jstree-default-dark-responsive .jstree-themeicon {\n    background-position: -40px -40px;\n  }\n  .jstree-default-dark-responsive .jstree-checkbox,\n  .jstree-default-dark-responsive .jstree-checkbox:hover {\n    background-position: -40px -80px;\n  }\n  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n  .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox,\n  .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover {\n    background-position: 0 -80px;\n  }\n  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined,\n  .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover {\n    background-position: 0 -120px;\n  }\n  .jstree-default-dark-responsive .jstree-anchor {\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  .jstree-default-dark-responsive > .jstree-striped {\n    background: transparent;\n  }\n  .jstree-default-dark-responsive .jstree-wholerow {\n    border-top: 1px solid #666666;\n    border-bottom: 1px solid #000000;\n    background: #333333;\n    height: 40px;\n  }\n  .jstree-default-dark-responsive .jstree-wholerow-hovered {\n    background: #555555;\n  }\n  .jstree-default-dark-responsive .jstree-wholerow-clicked {\n    background: #5fa2db;\n  }\n  .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow {\n    box-shadow: inset 0 -6px 3px -5px #111111;\n  }\n  .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow {\n    box-shadow: inset 0 6px 3px -5px #111111;\n    border-top: 0;\n  }\n  .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open {\n    box-shadow: none;\n  }\n  .jstree-default-dark-responsive .jstree-node,\n  .jstree-default-dark-responsive .jstree-icon,\n  .jstree-default-dark-responsive .jstree-node > .jstree-ocl,\n  .jstree-default-dark-responsive .jstree-themeicon,\n  .jstree-default-dark-responsive .jstree-checkbox {\n    background-image: url(\"40px.png\");\n    background-size: 120px 240px;\n  }\n  .jstree-default-dark-responsive .jstree-node {\n    background-position: -80px 0;\n    background-repeat: repeat-y;\n  }\n  .jstree-default-dark-responsive .jstree-last {\n    background: transparent;\n  }\n  .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {\n    background-position: -40px -120px;\n  }\n  .jstree-default-dark-responsive .jstree-last > .jstree-ocl {\n    background-position: -40px -160px;\n  }\n  .jstree-default-dark-responsive .jstree-themeicon-custom {\n    background-color: transparent;\n    background-image: none;\n    background-position: 0 0;\n  }\n  .jstree-default-dark-responsive .jstree-file {\n    background: url(\"40px.png\") 0 -160px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-dark-responsive .jstree-folder {\n    background: url(\"40px.png\") -40px -40px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n.jstree-default-dark {\n  background: #333;\n}\n.jstree-default-dark .jstree-anchor {\n  color: #999;\n  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);\n}\n.jstree-default-dark .jstree-clicked,\n.jstree-default-dark .jstree-checked {\n  color: white;\n}\n.jstree-default-dark .jstree-hovered {\n  color: white;\n}\n#jstree-marker.jstree-default-dark {\n  border-left-color: #999;\n  background: transparent;\n}\n.jstree-default-dark .jstree-anchor > .jstree-icon {\n  opacity: 0.75;\n}\n.jstree-default-dark .jstree-clicked > .jstree-icon,\n.jstree-default-dark .jstree-hovered > .jstree-icon,\n.jstree-default-dark .jstree-checked > .jstree-icon {\n  opacity: 1;\n}\n.jstree-default-dark.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-dark-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==\");\n}\n.jstree-default-dark-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/justgage-toorshia/justgage.js",
    "content": "/**\n * JustGage - this is work-in-progress, unreleased, unofficial code, so it might not work top-notch :)\n * Check http://www.justgage.com for official releases\n * Licensed under MIT.\n * @author Bojan Djuricic (@Toorshia)\n *\n * LATEST UPDATES\n *\n * -----------------------------\n * March 16, 2014.\n * -----------------------------\n     * fix - https://github.com/toorshia/justgage/issues/112\n * \n * -----------------------------\n * February 16, 2014.\n * -----------------------------\n     * fix - https://github.com/toorshia/justgage/issues/102\n\n * -----------------------------\n * April 25, 2013.\n * -----------------------------\n     * use HTML5 data-* attributes of the DOM Element to render the gauge (which overrides the constructor options).\n\n * -----------------------------\n * April 18, 2013.\n * -----------------------------\n     * parentNode - use this instead of id, to attach gauge to node which is outside of DOM tree - https://github.com/toorshia/justgage/issues/48\n     * width - force gauge width\n     * height - force gauge height\n\n * -----------------------------\n * April 17, 2013.\n * -----------------------------\n     * fix - https://github.com/toorshia/justgage/issues/49\n\n * -----------------------------\n * April 01, 2013.\n * -----------------------------\n     * fix - https://github.com/toorshia/justgage/issues/46\n\n * -----------------------------\n * March 26, 2013.\n * -----------------------------\n     * customSectors - define specific color for value range (0-10 : red, 10-30 : blue etc.)\n\n * -----------------------------\n * March 23, 2013.\n * -----------------------------\n     * counter - option to animate value  in counting fashion\n     * fix - https://github.com/toorshia/justgage/issues/45\n\n * -----------------------------\n * March 13, 2013.\n * -----------------------------\n     * refresh method - added optional 'max' parameter to use when you need to update max value\n\n * -----------------------------\n * February 26, 2013.\n * -----------------------------\n     * decimals - option to define/limit number of decimals when not using humanFriendly or customRenderer to display value\n     * fixed a missing parameters bug when calling generateShadow()  for IE < 9\n\n * -----------------------------\n * December 31, 2012.\n * -----------------------------\n     * fixed text y-position for hidden divs - workaround for Raphael <tspan> 'dy' bug - https://github.com/DmitryBaranovskiy/raphael/issues/491\n     * 'show' parameters, like showMinMax are now 'hide' because I am lame developer - please update these in your setups\n     * Min and Max labels are now auto-off when in donut mode\n     * Start angle in donut mode is now 90\n     * donutStartAngle - option to define start angle for donut\n\n * -----------------------------\n * November 25, 2012.\n * -----------------------------\n     * Option to define custom rendering function for displayed value\n\n * -----------------------------\n * November 19, 2012.\n * -----------------------------\n     * Config.value is now updated after gauge refresh\n\n * -----------------------------\n * November 13, 2012.\n * -----------------------------\n     * Donut display mode added\n     * Option to hide value label\n     * Option to enable responsive gauge size\n     * Removed default title attribute\n     * Option to accept min and max defined as string values\n     * Option to configure value symbol\n     * Fixed bad aspect ratio calculations\n     * Option to configure minimum font size for all texts\n     * Option to show shorthand big numbers (human friendly)\n     */\n\n JustGage = function(config) {\n\n  var obj = this;\n\n  // Helps in case developer wants to debug it. unobtrusive\n  if (config === null || config ===  undefined) {\n      console.log('* justgage: Make sure to pass options to the constructor!');\n      return false;\n  }\n\n  var node;\n\n  if (config.id !== null && config.id !== undefined) {\n    node= document.getElementById(config.id);\n      if (!node) {\n        console.log('* justgage: No element with id : %s found', config.id);\n        return false;\n    }\n  } else if (config.parentNode !== null && config.parentNode !== undefined) {\n    node = config.parentNode;\n  } else {\n      console.log('* justgage: Make sure to pass the existing element id or parentNode to the constructor.');\n      return false;\n  }\n\n  var dataset = node.dataset ? node.dataset : {};\n\n  // configurable parameters\n  obj.config =\n  {\n    // id : string\n    // this is container element id\n    id : config.id,\n\n    // parentNode : node object\n    // this is container element\n    parentNode : obj.kvLookup('parentNode', config, dataset, null),\n\n    // width : int\n    // gauge width\n    width : obj.kvLookup('width', config, dataset, null),\n\n    // height : int\n    // gauge height\n    height : obj.kvLookup('height', config, dataset, null),\n\n    // title : string\n    // gauge title\n    title : obj.kvLookup('title', config, dataset, \"\"),\n\n    // titleFontColor : string\n    // color of gauge title\n    titleFontColor : obj.kvLookup('titleFontColor', config, dataset,  \"#999999\"),\n\n    // value : float\n    // value gauge is showing\n    value : obj.kvLookup('value', config, dataset, 0, 'float'),\n\n    // valueFontColor : string\n    // color of label showing current value\n    valueFontColor : obj.kvLookup('valueFontColor', config, dataset, \"#010101\"),\n\n    // symbol : string\n    // special symbol to show next to value\n    symbol : obj.kvLookup('symbol', config, dataset, ''),\n\n    // min : float\n    // min value\n    min : obj.kvLookup('min', config, dataset, 0, 'float'),\n\n    // max : float\n    // max value\n    max : obj.kvLookup('max', config, dataset, 100, 'float'),\n\n    // humanFriendlyDecimal : int\n    // number of decimal places for our human friendly number to contain\n    humanFriendlyDecimal : obj.kvLookup('humanFriendlyDecimal', config, dataset, 0),\n\n    // textRenderer: func\n    // function applied before rendering text\n    textRenderer  : obj.kvLookup('textRenderer', config, dataset, null),\n\n    // gaugeWidthScale : float\n    // width of the gauge element\n    gaugeWidthScale : obj.kvLookup('gaugeWidthScale', config, dataset, 1.0),\n\n    // gaugeColor : string\n    // background color of gauge element\n    gaugeColor : obj.kvLookup('gaugeColor', config, dataset, \"#edebeb\"),\n\n    // label : string\n    // text to show below value\n    label : obj.kvLookup('label', config, dataset, ''),\n\n    // labelFontColor : string\n    // color of label showing label under value\n    labelFontColor : obj.kvLookup('labelFontColor', config, dataset, \"#b3b3b3\"),\n\n    // shadowOpacity : int\n    // 0 ~ 1\n    shadowOpacity : obj.kvLookup('shadowOpacity', config, dataset, 0.2),\n\n    // shadowSize: int\n    // inner shadow size\n    shadowSize : obj.kvLookup('shadowSize', config, dataset, 5),\n\n    // shadowVerticalOffset : int\n    // how much shadow is offset from top\n    shadowVerticalOffset : obj.kvLookup('shadowVerticalOffset', config, dataset, 3),\n\n    // levelColors : string[]\n    // colors of indicator, from lower to upper, in RGB format\n    levelColors : obj.kvLookup('levelColors', config, dataset, [ \"#a9d70b\", \"#f9c802\", \"#ff0000\" ], 'array', ','),\n\n    // startAnimationTime : int\n    // length of initial animation\n    startAnimationTime : obj.kvLookup('startAnimationTime', config, dataset, 700),\n\n    // startAnimationType : string\n    // type of initial animation (linear, >, <,  <>, bounce)\n    startAnimationType : obj.kvLookup('startAnimationType', config, dataset, '>'),\n\n    // refreshAnimationTime : int\n    // length of refresh animation\n    refreshAnimationTime : obj.kvLookup('refreshAnimationTime', config, dataset, 700),\n\n    // refreshAnimationType : string\n    // type of refresh animation (linear, >, <,  <>, bounce)\n    refreshAnimationType : obj.kvLookup('refreshAnimationType', config, dataset, '>'),\n\n    // donutStartAngle : int\n    // angle to start from when in donut mode\n    donutStartAngle : obj.kvLookup('donutStartAngle', config, dataset, 90),\n\n    // valueMinFontSize : int\n    // absolute minimum font size for the value\n    valueMinFontSize : obj.kvLookup('valueMinFontSize', config, dataset, 16),\n\n    // titleMinFontSize\n    // absolute minimum font size for the title\n    titleMinFontSize : obj.kvLookup('titleMinFontSize', config, dataset, 10),\n\n    // labelMinFontSize\n    // absolute minimum font size for the label\n    labelMinFontSize : obj.kvLookup('labelMinFontSize', config, dataset, 10),\n\n    // minLabelMinFontSize\n    // absolute minimum font size for the minimum label\n    minLabelMinFontSize : obj.kvLookup('minLabelMinFontSize', config, dataset, 10),\n\n    // maxLabelMinFontSize\n    // absolute minimum font size for the maximum label\n    maxLabelMinFontSize : obj.kvLookup('maxLabelMinFontSize', config, dataset, 10),\n\n    // hideValue : bool\n    // hide value text\n    hideValue : obj.kvLookup('hideValue', config, dataset, false),\n\n    // hideMinMax : bool\n    // hide min and max values\n    hideMinMax : obj.kvLookup('hideMinMax', config, dataset, false),\n\n    // hideInnerShadow : bool\n    // hide inner shadow\n    hideInnerShadow : obj.kvLookup('hideInnerShadow', config, dataset, false),\n\n    // humanFriendly : bool\n    // convert large numbers for min, max, value to human friendly (e.g. 1234567 -> 1.23M)\n    humanFriendly : obj.kvLookup('humanFriendly', config, dataset, false),\n\n    // noGradient : bool\n    // whether to use gradual color change for value, or sector-based\n    noGradient : obj.kvLookup('noGradient', config, dataset, false),\n\n    // donut : bool\n    // show full donut gauge\n    donut : obj.kvLookup('donut', config, dataset, false),\n\n    // relativeGaugeSize : bool\n    // whether gauge size should follow changes in container element size\n    relativeGaugeSize : obj.kvLookup('relativeGaugeSize', config, dataset, false),\n\n    // counter : bool\n    // animate level number change\n    counter : obj.kvLookup('counter', config, dataset, false),\n\n    // decimals : int\n    // number of digits after floating point\n    decimals : obj.kvLookup('decimals', config, dataset, 0),\n\n    // customSectors : [] of objects\n    // number of digits after floating point\n    customSectors : obj.kvLookup('customSectors', config, dataset, []),\n\n    // formatNumber: boolean\n    // formats numbers with commas where appropriate\n    formatNumber : obj.kvLookup('formatNumber', config, dataset, false)\n  };\n\n  // variables\n  var\n  canvasW,\n  canvasH,\n  widgetW,\n  widgetH,\n  aspect,\n  dx,\n  dy,\n  titleFontSize,\n  titleX,\n  titleY,\n  valueFontSize,\n  valueX,\n  valueY,\n  labelFontSize,\n  labelX,\n  labelY,\n  minFontSize,\n  minX,\n  minY,\n  maxFontSize,\n  maxX,\n  maxY;\n\n  // overflow values\n  if (obj.config.value > obj.config.max) obj.config.value = obj.config.max;\n  if (obj.config.value < obj.config.min) obj.config.value = obj.config.min;\n  obj.originalValue = obj.kvLookup('value', config, dataset, -1, 'float');\n\n  // create canvas\n  if (obj.config.id !== null && (document.getElementById(obj.config.id)) !== null) {\n    obj.canvas = Raphael(obj.config.id, \"100%\", \"100%\");\n  } else if (obj.config.parentNode !== null) {\n    obj.canvas = Raphael(obj.config.parentNode, \"100%\", \"100%\");\n  }\n\n  if (obj.config.relativeGaugeSize === true) {\n    obj.canvas.setViewBox(0, 0, 200, 150, true);\n  }\n\n  // canvas dimensions\n  if (obj.config.relativeGaugeSize === true) {\n    canvasW = 200;\n    canvasH = 150;\n  } else if (obj.config.width !== null && obj.config.height !== null) {\n    canvasW = obj.config.width;\n    canvasH = obj.config.height;\n  } else if (obj.config.parentNode !== null) {\n    obj.canvas.setViewBox(0, 0, 200, 150, true);\n    canvasW = 200;\n    canvasH = 150;\n  } else {\n    canvasW = getStyle(document.getElementById(obj.config.id), \"width\").slice(0, -2) * 1;\n    canvasH = getStyle(document.getElementById(obj.config.id), \"height\").slice(0, -2) * 1;\n  }\n\n  // widget dimensions\n  if (obj.config.donut === true) {\n\n    // DONUT *******************************\n\n    // width more than height\n    if(canvasW > canvasH) {\n      widgetH = canvasH;\n      widgetW = widgetH;\n    // width less than height\n  } else if (canvasW < canvasH) {\n    widgetW = canvasW;\n    widgetH = widgetW;\n      // if height don't fit, rescale both\n      if(widgetH > canvasH) {\n        aspect = widgetH / canvasH;\n        widgetH = widgetH / aspect;\n        widgetW = widgetH / aspect;\n      }\n    // equal\n  } else {\n    widgetW = canvasW;\n    widgetH = widgetW;\n  }\n\n    // delta\n    dx = (canvasW - widgetW)/2;\n    dy = (canvasH - widgetH)/2;\n\n    // title\n    titleFontSize = ((widgetH / 8) > 10) ? (widgetH / 10) : 10;\n    titleX = dx + widgetW / 2;\n    titleY = dy + widgetH / 11;\n\n    // value\n    valueFontSize = ((widgetH / 6.4) > 16) ? (widgetH / 5.4) : 18;\n    valueX = dx + widgetW / 2;\n    if(obj.config.label !== '') {\n      valueY = dy + widgetH / 1.85;\n    } else {\n      valueY = dy + widgetH / 1.7;\n    }\n\n    // label\n    labelFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10;\n    labelX = dx + widgetW / 2;\n    labelY = valueY + labelFontSize;\n\n    // min\n    minFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10;\n    minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2 ;\n    minY = labelY;\n\n    // max\n    maxFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10;\n    maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2 ;\n    maxY = labelY;\n\n  } else {\n    // HALF *******************************\n\n    // width more than height\n    if(canvasW > canvasH) {\n      widgetH = canvasH;\n      widgetW = widgetH * 1.25;\n      //if width doesn't fit, rescale both\n      if(widgetW > canvasW) {\n        aspect = widgetW / canvasW;\n        widgetW = widgetW / aspect;\n        widgetH = widgetH / aspect;\n      }\n    // width less than height\n  } else if (canvasW < canvasH) {\n    widgetW = canvasW;\n    widgetH = widgetW / 1.25;\n      // if height don't fit, rescale both\n      if(widgetH > canvasH) {\n        aspect = widgetH / canvasH;\n        widgetH = widgetH / aspect;\n        widgetW = widgetH / aspect;\n      }\n    // equal\n  } else {\n    widgetW = canvasW;\n    widgetH = widgetW * 0.75;\n  }\n\n    // delta\n    dx = (canvasW - widgetW)/2;\n    dy = (canvasH - widgetH)/2;\n\n    // title\n    titleFontSize = ((widgetH / 8) > obj.config.titleMinFontSize) ? (widgetH / 10) : obj.config.titleMinFontSize;\n    titleX = dx + widgetW / 2;\n    titleY = dy + widgetH / 6.4;\n\n    // value\n    valueFontSize = ((widgetH / 6.5) > obj.config.valueMinFontSize) ? (widgetH / 6.5) : obj.config.valueMinFontSize;\n    valueX = dx + widgetW / 2;\n    valueY = dy + widgetH / 1.275;\n\n    // label\n    labelFontSize = ((widgetH / 16) > obj.config.labelMinFontSize) ? (widgetH / 16) : obj.config.labelMinFontSize;\n    labelX = dx + widgetW / 2;\n    labelY = valueY + valueFontSize / 2 + 5;\n\n    // min\n    minFontSize = ((widgetH / 16) > obj.config.minLabelMinFontSize) ? (widgetH / 16) : obj.config.minLabelMinFontSize;\n    minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2 ;\n    minY = labelY;\n\n    // max\n    maxFontSize = ((widgetH / 16) > obj.config.maxLabelMinFontSize) ? (widgetH / 16) : obj.config.maxLabelMinFontSize;\n    maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2 ;\n    maxY = labelY;\n  }\n\n  // parameters\n  obj.params  = {\n    canvasW : canvasW,\n    canvasH : canvasH,\n    widgetW : widgetW,\n    widgetH : widgetH,\n    dx : dx,\n    dy : dy,\n    titleFontSize : titleFontSize,\n    titleX : titleX,\n    titleY : titleY,\n    valueFontSize : valueFontSize,\n    valueX : valueX,\n    valueY : valueY,\n    labelFontSize : labelFontSize,\n    labelX : labelX,\n    labelY : labelY,\n    minFontSize : minFontSize,\n    minX : minX,\n    minY : minY,\n    maxFontSize : maxFontSize,\n    maxX : maxX,\n    maxY : maxY\n  };\n\n  // var clear\n  canvasW, canvasH, widgetW, widgetH, aspect, dx, dy, titleFontSize, titleX, titleY, valueFontSize, valueX, valueY, labelFontSize, labelX, labelY, minFontSize, minX, minY, maxFontSize, maxX, maxY = null;\n\n  // pki - custom attribute for generating gauge paths\n  obj.canvas.customAttributes.pki = function (value, min, max, w, h, dx, dy, gws, donut) {\n\n    var alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, path;\n\n    if (donut) {\n      alpha = (1 - 2 * (value - min) / (max - min)) * Math.PI;\n      Ro = w / 2 - w / 7;\n      Ri = Ro - w / 6.666666666666667 * gws;\n\n      Cx = w / 2 + dx;\n      Cy = h / 1.95 + dy;\n\n      Xo = w / 2 + dx + Ro * Math.cos(alpha);\n      Yo = h - (h - Cy) - Ro * Math.sin(alpha);\n      Xi = w / 2 + dx + Ri * Math.cos(alpha);\n      Yi = h - (h - Cy) - Ri * Math.sin(alpha);\n\n      path = \"M\" + (Cx - Ri) + \",\" + Cy + \" \";\n      path += \"L\" + (Cx - Ro) + \",\" + Cy + \" \";\n      if (value > ((max - min) / 2)) {\n        path += \"A\" + Ro + \",\" + Ro + \" 0 0 1 \" + (Cx + Ro) + \",\" + Cy + \" \";\n      }\n      path += \"A\" + Ro + \",\" + Ro + \" 0 0 1 \" + Xo + \",\" + Yo + \" \";\n      path += \"L\" + Xi + \",\" + Yi + \" \";\n      if (value > ((max - min) / 2)) {\n        path += \"A\" + Ri + \",\" + Ri + \" 0 0 0 \" + (Cx + Ri) + \",\" + Cy + \" \";\n      }\n      path += \"A\" + Ri + \",\" + Ri + \" 0 0 0 \" + (Cx - Ri) + \",\" + Cy + \" \";\n      path += \"Z \";\n\n      return { path: path };\n\n    } else {\n      alpha = (1 - (value - min) / (max - min)) * Math.PI;\n      Ro = w / 2 - w / 10;\n      Ri = Ro - w / 6.666666666666667 * gws;\n\n      Cx = w / 2 + dx;\n      Cy = h / 1.25 + dy;\n\n      Xo = w / 2 + dx + Ro * Math.cos(alpha);\n      Yo = h - (h - Cy) - Ro * Math.sin(alpha);\n      Xi = w / 2 + dx + Ri * Math.cos(alpha);\n      Yi = h - (h - Cy) - Ri * Math.sin(alpha);\n\n      path = \"M\" + (Cx - Ri) + \",\" + Cy + \" \";\n      path += \"L\" + (Cx - Ro) + \",\" + Cy + \" \";\n      path += \"A\" + Ro + \",\" + Ro + \" 0 0 1 \" + Xo + \",\" + Yo + \" \";\n      path += \"L\" + Xi + \",\" + Yi + \" \";\n      path += \"A\" + Ri + \",\" + Ri + \" 0 0 0 \" + (Cx - Ri) + \",\" + Cy + \" \";\n      path += \"Z \";\n\n      return { path: path };\n    }\n\n    // var clear\n    alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, path = null;\n  };\n\n  // gauge\n  obj.gauge = obj.canvas.path().attr({\n      \"stroke\": \"none\",\n      \"fill\": obj.config.gaugeColor,\n      pki: [\n        obj.config.max,\n        obj.config.min,\n        obj.config.max,\n        obj.params.widgetW,\n        obj.params.widgetH,\n        obj.params.dx,\n        obj.params.dy,\n        obj.config.gaugeWidthScale,\n        obj.config.donut\n      ]\n  });\n\n  // level\n  obj.level = obj.canvas.path().attr({\n    \"stroke\": \"none\",\n    \"fill\": getColor(obj.config.value, (obj.config.value - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors),\n    pki: [\n      obj.config.min,\n      obj.config.min,\n      obj.config.max,\n      obj.params.widgetW,\n      obj.params.widgetH,\n      obj.params.dx,\n      obj.params.dy,\n      obj.config.gaugeWidthScale,\n      obj.config.donut\n    ]\n  });\n  if(obj.config.donut) {\n    obj.level.transform(\"r\" + obj.config.donutStartAngle + \", \" + (obj.params.widgetW/2 + obj.params.dx) + \", \" + (obj.params.widgetH/1.95 + obj.params.dy));\n  }\n\n  // title\n  obj.txtTitle = obj.canvas.text(obj.params.titleX, obj.params.titleY, obj.config.title);\n  obj.txtTitle.attr({\n    \"font-size\":obj.params.titleFontSize,\n    \"font-weight\":\"bold\",\n    \"font-family\":\"Arial\",\n    \"fill\":obj.config.titleFontColor,\n    \"fill-opacity\":\"1\"\n  });\n  setDy(obj.txtTitle, obj.params.titleFontSize, obj.params.titleY);\n\n  // value\n  obj.txtValue = obj.canvas.text(obj.params.valueX, obj.params.valueY, 0);\n  obj.txtValue.attr({\n    \"font-size\":obj.params.valueFontSize,\n    \"font-weight\":\"bold\",\n    \"font-family\":\"Arial\",\n    \"fill\":obj.config.valueFontColor,\n    \"fill-opacity\":\"0\"\n  });\n  setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY);\n\n  // label\n  obj.txtLabel = obj.canvas.text(obj.params.labelX, obj.params.labelY, obj.config.label);\n  obj.txtLabel.attr({\n    \"font-size\":obj.params.labelFontSize,\n    \"font-weight\":\"normal\",\n    \"font-family\":\"Arial\",\n    \"fill\":obj.config.labelFontColor,\n    \"fill-opacity\":\"0\"\n  });\n  setDy(obj.txtLabel, obj.params.labelFontSize, obj.params.labelY);\n\n  // min\n  obj.txtMinimum = obj.config.min;\n  if( obj.config.humanFriendly ) {\n    obj.txtMinimum = humanFriendlyNumber( obj.config.min, obj.config.humanFriendlyDecimal );\n  } else if ( obj.config.formatNumber ) {\n    obj.txtMinimum = formatNumber( obj.config.min );\n  }\n  obj.txtMin = obj.canvas.text(obj.params.minX, obj.params.minY, obj.txtMinimum);\n  obj.txtMin.attr({\n    \"font-size\":obj.params.minFontSize,\n    \"font-weight\":\"normal\",\n    \"font-family\":\"Arial\",\n    \"fill\":obj.config.labelFontColor,\n    \"fill-opacity\": (obj.config.hideMinMax || obj.config.donut)? \"0\" : \"1\"\n  });\n  setDy(obj.txtMin, obj.params.minFontSize, obj.params.minY);\n\n  // max\n  obj.txtMaximum = obj.config.max;\n  if( obj.config.formatNumber ) {\n    obj.txtMaximum = formatNumber( obj.txtMaximum );\n  } else if( obj.config.humanFriendly ) {\n    obj.txtMaximum = humanFriendlyNumber( obj.config.max, obj.config.humanFriendlyDecimal );\n  }\n  obj.txtMax = obj.canvas.text(obj.params.maxX, obj.params.maxY, obj.txtMaximum);\n  obj.txtMax.attr({\n    \"font-size\":obj.params.maxFontSize,\n    \"font-weight\":\"normal\",\n    \"font-family\":\"Arial\",\n    \"fill\":obj.config.labelFontColor,\n    \"fill-opacity\": (obj.config.hideMinMax || obj.config.donut)? \"0\" : \"1\"\n  });\n  setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY);\n\n  var defs = obj.canvas.canvas.childNodes[1];\n  var svg = \"http://www.w3.org/2000/svg\";\n\n  if (ie !== 'undefined' && ie < 9 ) {\n    // VML mode - no SVG & SVG filter support\n  }\n  else if (ie !== 'undefined') {\n    onCreateElementNsReady(function() {\n      obj.generateShadow(svg, defs);\n    });\n  } else {\n    obj.generateShadow(svg, defs);\n  }\n\n  // var clear\n  defs, svg = null;\n\n  // set value to display\n  if(obj.config.textRenderer) {\n    obj.originalValue = obj.config.textRenderer(obj.originalValue);\n  } else if(obj.config.humanFriendly) {\n    obj.originalValue = humanFriendlyNumber( obj.originalValue, obj.config.humanFriendlyDecimal ) + obj.config.symbol;\n  } else if(obj.config.formatNumber) {\n    obj.originalValue = formatNumber(obj.originalValue) + obj.config.symbol;\n  } else {\n    obj.originalValue = (obj.originalValue * 1).toFixed(obj.config.decimals) + obj.config.symbol;\n  }\n\n  if(obj.config.counter === true) {\n    //on each animation frame\n    eve.on(\"raphael.anim.frame.\" + (obj.level.id), function() {\n      var currentValue = obj.level.attr(\"pki\");\n      if(obj.config.textRenderer) {\n        obj.txtValue.attr(\"text\", obj.config.textRenderer(Math.floor(currentValue[0])));\n      } else if(obj.config.humanFriendly) {\n        obj.txtValue.attr(\"text\", humanFriendlyNumber( Math.floor(currentValue[0]), obj.config.humanFriendlyDecimal ) + obj.config.symbol);\n      } else if(obj.config.formatNumber) {\n        obj.txtValue.attr(\"text\", formatNumber(Math.floor(currentValue[0])) + obj.config.symbol);\n      } else {\n        obj.txtValue.attr(\"text\", (currentValue[0] * 1).toFixed(obj.config.decimals) + obj.config.symbol);\n      }\n      setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY);\n      currentValue = null;\n    });\n    //on animation end\n    eve.on(\"raphael.anim.finish.\" + (obj.level.id), function() {\n      obj.txtValue.attr({\"text\" : obj.originalValue});\n      setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY);\n    });\n  } else {\n    //on animation start\n    eve.on(\"raphael.anim.start.\" + (obj.level.id), function() {\n      obj.txtValue.attr({\"text\" : obj.originalValue});\n      setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY);\n    });\n  }\n\n  // animate gauge level, value & label\n  obj.level.animate({\n    pki: [\n      obj.config.value,\n      obj.config.min,\n      obj.config.max,\n      obj.params.widgetW,\n      obj.params.widgetH,\n      obj.params.dx,\n      obj.params.dy,\n      obj.config.gaugeWidthScale,\n      obj.config.donut\n    ]\n  }, obj.config.startAnimationTime, obj.config.startAnimationType);\n  obj.txtValue.animate({\"fill-opacity\":(obj.config.hideValue)?\"0\":\"1\"}, obj.config.startAnimationTime, obj.config.startAnimationType);\n  obj.txtLabel.animate({\"fill-opacity\":\"1\"}, obj.config.startAnimationTime, obj.config.startAnimationType);\n};\n\n//\n// tiny helper function to lookup value of a key from two hash tables\n// if none found, return defaultvalue\n//\n// key: string\n// tablea: object\n// tableb: DOMStringMap|object\n// defval: string|integer|float|null\n// datatype: return datatype\n// delimiter: delimiter to be used in conjunction with datatype formatting\n//\nJustGage.prototype.kvLookup = function(key, tablea, tableb, defval, datatype, delimiter) {\n  var val = defval;\n  var canConvert = false;\n  if (!(key === null || key === undefined)) {\n      if (tableb !== null && tableb !== undefined && typeof tableb === \"object\" && key in tableb) {\n          val = tableb[key];\n          canConvert = true;\n      } else if (tablea !== null && tablea !== undefined && typeof tablea === \"object\" && key in tablea) {\n          val = tablea[key];\n          canConvert = true;\n      } else {\n          val = defval;\n      }\n      if (canConvert === true) {\n          if (datatype !== null && datatype !== undefined) {\n              switch(datatype) {\n                  case 'int':\n                    val = parseInt(val, 10);\n                    break;\n                  case 'float':\n                    val = parseFloat(val);\n                    break;\n                  default:\n                    break;\n              }\n          }\n      }\n  }\n  return val;\n};\n\n/** Refresh gauge level */\nJustGage.prototype.refresh = function(val, max) {\n\n  var obj = this;\n  var displayVal, color, max = max || null;\n\n  // set new max\n  if(max !== null) {\n    obj.config.max = max;\n\n    obj.txtMaximum = obj.config.max;\n    if( obj.config.humanFriendly ) {\n      obj.txtMaximum = humanFriendlyNumber( obj.config.max, obj.config.humanFriendlyDecimal );\n    } else if( obj.config.formatNumber ) {\n      obj.txtMaximum = formatNumber( obj.config.max );\n    }\n    obj.txtMax.attr({\"text\" : obj.txtMaximum});\n    setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY);\n  }\n\n  // overflow values\n  displayVal = val;\n  if ((val * 1) > (obj.config.max * 1)) {val = (obj.config.max * 1);}\n  if ((val * 1) < (obj.config.min * 1)) {val = (obj.config.min * 1);}\n\n  color = getColor(val, (val - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors);\n\n  if(obj.config.textRenderer) {\n    displayVal = obj.config.textRenderer(displayVal);\n  } else if( obj.config.humanFriendly ) {\n    displayVal = humanFriendlyNumber( displayVal, obj.config.humanFriendlyDecimal ) + obj.config.symbol;\n  } else if( obj.config.formatNumber ) {\n    displayVal = formatNumber((displayVal * 1).toFixed(obj.config.decimals)) + obj.config.symbol;\n  } else {\n    displayVal = (displayVal * 1).toFixed(obj.config.decimals) + obj.config.symbol;\n  }\n  obj.originalValue = displayVal;\n  obj.config.value = val * 1;\n\n  if(!obj.config.counter) {\n    obj.txtValue.attr({\"text\":displayVal});\n    setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY);\n  }\n\n  obj.level.animate({\n    pki: [\n      obj.config.value,\n      obj.config.min,\n      obj.config.max,\n      obj.params.widgetW,\n      obj.params.widgetH,\n      obj.params.dx,\n      obj.params.dy,\n      obj.config.gaugeWidthScale,\n      obj.config.donut\n    ],\n    \"fill\":color\n  },  obj.config.refreshAnimationTime, obj.config.refreshAnimationType);\n\n  // var clear\n  obj, displayVal, color, max = null;\n};\n\n/** Generate shadow */\nJustGage.prototype.generateShadow = function(svg, defs) {\n\n  var obj = this;\n  var gaussFilter, feOffset, feGaussianBlur, feComposite1, feFlood, feComposite2, feComposite3;\n\n  // FILTER\n  gaussFilter = document.createElementNS(svg,\"filter\");\n  gaussFilter.setAttribute(\"id\",\"inner-shadow\");\n  defs.appendChild(gaussFilter);\n\n  // offset\n  feOffset = document.createElementNS(svg,\"feOffset\");\n  feOffset.setAttribute(\"dx\", 0);\n  feOffset.setAttribute(\"dy\", obj.config.shadowVerticalOffset);\n  gaussFilter.appendChild(feOffset);\n\n  // blur\n  feGaussianBlur = document.createElementNS(svg,\"feGaussianBlur\");\n  feGaussianBlur.setAttribute(\"result\",\"offset-blur\");\n  feGaussianBlur.setAttribute(\"stdDeviation\", obj.config.shadowSize);\n  gaussFilter.appendChild(feGaussianBlur);\n\n  // composite 1\n  feComposite1 = document.createElementNS(svg,\"feComposite\");\n  feComposite1.setAttribute(\"operator\",\"out\");\n  feComposite1.setAttribute(\"in\", \"SourceGraphic\");\n  feComposite1.setAttribute(\"in2\",\"offset-blur\");\n  feComposite1.setAttribute(\"result\",\"inverse\");\n  gaussFilter.appendChild(feComposite1);\n\n  // flood\n  feFlood = document.createElementNS(svg,\"feFlood\");\n  feFlood.setAttribute(\"flood-color\",\"black\");\n  feFlood.setAttribute(\"flood-opacity\", obj.config.shadowOpacity);\n  feFlood.setAttribute(\"result\",\"color\");\n  gaussFilter.appendChild(feFlood);\n\n  // composite 2\n  feComposite2 = document.createElementNS(svg,\"feComposite\");\n  feComposite2.setAttribute(\"operator\",\"in\");\n  feComposite2.setAttribute(\"in\", \"color\");\n  feComposite2.setAttribute(\"in2\",\"inverse\");\n  feComposite2.setAttribute(\"result\",\"shadow\");\n  gaussFilter.appendChild(feComposite2);\n\n  // composite 3\n  feComposite3 = document.createElementNS(svg,\"feComposite\");\n  feComposite3.setAttribute(\"operator\",\"over\");\n  feComposite3.setAttribute(\"in\", \"shadow\");\n  feComposite3.setAttribute(\"in2\",\"SourceGraphic\");\n  gaussFilter.appendChild(feComposite3);\n\n  // set shadow\n  if (!obj.config.hideInnerShadow) {\n    obj.canvas.canvas.childNodes[2].setAttribute(\"filter\", \"url(#inner-shadow)\");\n    obj.canvas.canvas.childNodes[3].setAttribute(\"filter\", \"url(#inner-shadow)\");\n  }\n\n  // var clear\n  gaussFilter, feOffset, feGaussianBlur, feComposite1, feFlood, feComposite2, feComposite3 = null;\n\n};\n\n/** Get color for value */\nfunction getColor(val, pct, col, noGradient, custSec) {\n\n  var no, inc, colors, percentage, rval, gval, bval, lower, upper, range, rangePct, pctLower, pctUpper, color;\n  var noGradient = noGradient || custSec.length > 0;\n\n  if(custSec.length > 0) {\n    for(var i = 0; i < custSec.length; i++) {\n      if(val > custSec[i].lo && val <= custSec[i].hi) {\n        return custSec[i].color;\n      }\n    }\n  }\n\n  no = col.length;\n  if (no === 1) return col[0];\n  inc = (noGradient) ? (1 / no) : (1 / (no - 1));\n  colors = [];\n  for (i = 0; i < col.length; i++) {\n    percentage = (noGradient) ? (inc * (i + 1)) : (inc * i);\n    rval = parseInt((cutHex(col[i])).substring(0,2),16);\n    gval = parseInt((cutHex(col[i])).substring(2,4),16);\n    bval = parseInt((cutHex(col[i])).substring(4,6),16);\n    colors[i] = { pct: percentage, color: { r: rval, g: gval, b: bval  } };\n  }\n\n  if(pct === 0) {\n    return 'rgb(' + [colors[0].color.r, colors[0].color.g, colors[0].color.b].join(',') + ')';\n  }\n\n  for (var j = 0; j < colors.length; j++) {\n    if (pct <= colors[j].pct) {\n      if (noGradient) {\n        return 'rgb(' + [colors[j].color.r, colors[j].color.g, colors[j].color.b].join(',') + ')';\n      } else {\n        lower = colors[j - 1];\n        upper = colors[j];\n        range = upper.pct - lower.pct;\n        rangePct = (pct - lower.pct) / range;\n        pctLower = 1 - rangePct;\n        pctUpper = rangePct;\n        color = {\n          r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),\n          g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),\n          b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)\n        };\n        return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';\n      }\n    }\n  }\n\n}\n\n/** Fix Raphael display:none tspan dy attribute bug */\nfunction setDy(elem, fontSize, txtYpos) {\n  if ((!ie || ie > 9) && elem.node.firstChild.attributes.dy) {\n    elem.node.firstChild.attributes.dy.value = 0;\n  }\n}\n\n/** Random integer  */\nfunction getRandomInt (min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/**  Cut hex  */\nfunction cutHex(str) {\n  return (str.charAt(0)==\"#\") ? str.substring(1,7):str;\n}\n\n/**  Human friendly number suffix - From: http://stackoverflow.com/questions/2692323/code-golf-friendly-number-abbreviator */\nfunction humanFriendlyNumber( n, d ) {\n  var p, d2, i, s;\n\n  p = Math.pow;\n  d2 = p(10, d);\n  i = 7;\n  while( i ) {\n    s = p(10,i--*3);\n    if( s <= n ) {\n     n = Math.round(n*d2/s)/d2+\"KMGTPE\"[i];\n   }\n }\n return n;\n}\n\n/** Format numbers with commas - From: http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript */\nfunction formatNumber(x) {\n    var parts = x.toString().split(\".\");\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    return parts.join(\".\");\n}\n\n/**  Get style  */\nfunction getStyle(oElm, strCssRule){\n  var strValue = \"\";\n  if(document.defaultView && document.defaultView.getComputedStyle){\n    strValue = document.defaultView.getComputedStyle(oElm, \"\").getPropertyValue(strCssRule);\n  }\n  else if(oElm.currentStyle){\n    strCssRule = strCssRule.replace(/\\-(\\w)/g, function (strMatch, p1){\n      return p1.toUpperCase();\n    });\n    strValue = oElm.currentStyle[strCssRule];\n  }\n  return strValue;\n}\n\n/**  Create Element NS Ready  */\nfunction onCreateElementNsReady(func) {\n  if (document.createElementNS !== undefined) {\n    func();\n  } else {\n    setTimeout(function() { onCreateElementNsReady(func); }, 100);\n  }\n}\n\n/**  Get IE version  */\n// ----------------------------------------------------------\n// A short snippet for detecting versions of IE in JavaScript\n// without resorting to user-agent sniffing\n// ----------------------------------------------------------\n// If you're not in IE (or IE version is less than 5) then:\n// ie === undefined\n// If you're in IE (>=5) then you can determine which version:\n// ie === 7; // IE7\n// Thus, to detect IE:\n// if (ie) {}\n// And to detect the version:\n// ie === 6 // IE6\n// ie > 7 // IE8, IE9 ...\n// ie < 9 // Anything less than IE9\n// ----------------------------------------------------------\n// UPDATE: Now using Live NodeList idea from @jdalton\nvar ie = (function(){\n\n  var undef,\n  v = 3,\n  div = document.createElement('div'),\n  all = div.getElementsByTagName('i');\n\n  while (\n    div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',\n    all[0]\n    );\n    return v > 4 ? v : undef;\n}());\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/gdp-data.js",
    "content": "var gdpData = {\n  \"AF\": 16.63,\n  \"AL\": 11.58,\n  \"DZ\": 158.97,\n  \"AO\": 85.81,\n  \"AG\": 1.1,\n  \"AR\": 351.02,\n  \"AM\": 8.83,\n  \"AU\": 1219.72,\n  \"AT\": 366.26,\n  \"AZ\": 52.17,\n  \"BS\": 7.54,\n  \"BH\": 21.73,\n  \"BD\": 105.4,\n  \"BB\": 3.96,\n  \"BY\": 52.89,\n  \"BE\": 461.33,\n  \"BZ\": 1.43,\n  \"BJ\": 6.49,\n  \"BT\": 1.4,\n  \"BO\": 19.18,\n  \"BA\": 16.2,\n  \"BW\": 12.5,\n  \"BR\": 2023.53,\n  \"BN\": 11.96,\n  \"BG\": 44.84,\n  \"BF\": 8.67,\n  \"BI\": 1.47,\n  \"KH\": 11.36,\n  \"CM\": 21.88,\n  \"CA\": 1563.66,\n  \"CV\": 1.57,\n  \"CF\": 2.11,\n  \"TD\": 7.59,\n  \"CL\": 199.18,\n  \"CN\": 5745.13,\n  \"CO\": 283.11,\n  \"KM\": 0.56,\n  \"CD\": 12.6,\n  \"CG\": 11.88,\n  \"CR\": 35.02,\n  \"CI\": 22.38,\n  \"HR\": 59.92,\n  \"CY\": 22.75,\n  \"CZ\": 195.23,\n  \"DK\": 304.56,\n  \"DJ\": 1.14,\n  \"DM\": 0.38,\n  \"DO\": 50.87,\n  \"EC\": 61.49,\n  \"EG\": 216.83,\n  \"SV\": 21.8,\n  \"GQ\": 14.55,\n  \"ER\": 2.25,\n  \"EE\": 19.22,\n  \"ET\": 30.94,\n  \"FJ\": 3.15,\n  \"FI\": 231.98,\n  \"FR\": 2555.44,\n  \"GA\": 12.56,\n  \"GM\": 1.04,\n  \"GE\": 11.23,\n  \"DE\": 3305.9,\n  \"GH\": 18.06,\n  \"GR\": 305.01,\n  \"GD\": 0.65,\n  \"GT\": 40.77,\n  \"GN\": 4.34,\n  \"GW\": 0.83,\n  \"GY\": 2.2,\n  \"HT\": 6.5,\n  \"HN\": 15.34,\n  \"HK\": 226.49,\n  \"HU\": 132.28,\n  \"IS\": 12.77,\n  \"IN\": 1430.02,\n  \"ID\": 695.06,\n  \"IR\": 337.9,\n  \"IQ\": 84.14,\n  \"IE\": 204.14,\n  \"IL\": 201.25,\n  \"IT\": 2036.69,\n  \"JM\": 13.74,\n  \"JP\": 5390.9,\n  \"JO\": 27.13,\n  \"KZ\": 129.76,\n  \"KE\": 32.42,\n  \"KI\": 0.15,\n  \"KR\": 986.26,\n  \"UNDEFINED\": 5.73,\n  \"KW\": 117.32,\n  \"KG\": 4.44,\n  \"LA\": 6.34,\n  \"LV\": 23.39,\n  \"LB\": 39.15,\n  \"LS\": 1.8,\n  \"LR\": 0.98,\n  \"LY\": 77.91,\n  \"LT\": 35.73,\n  \"LU\": 52.43,\n  \"MK\": 9.58,\n  \"MG\": 8.33,\n  \"MW\": 5.04,\n  \"MY\": 218.95,\n  \"MV\": 1.43,\n  \"ML\": 9.08,\n  \"MT\": 7.8,\n  \"MR\": 3.49,\n  \"MU\": 9.43,\n  \"MX\": 1004.04,\n  \"MD\": 5.36,\n  \"MN\": 5.81,\n  \"ME\": 3.88,\n  \"MA\": 91.7,\n  \"MZ\": 10.21,\n  \"MM\": 35.65,\n  \"NA\": 11.45,\n  \"NP\": 15.11,\n  \"NL\": 770.31,\n  \"NZ\": 138,\n  \"NI\": 6.38,\n  \"NE\": 5.6,\n  \"NG\": 206.66,\n  \"NO\": 413.51,\n  \"OM\": 53.78,\n  \"PK\": 174.79,\n  \"PA\": 27.2,\n  \"PG\": 8.81,\n  \"PY\": 17.17,\n  \"PE\": 153.55,\n  \"PH\": 189.06,\n  \"PL\": 438.88,\n  \"PT\": 223.7,\n  \"QA\": 126.52,\n  \"RO\": 158.39,\n  \"RU\": 1476.91,\n  \"RW\": 5.69,\n  \"WS\": 0.55,\n  \"ST\": 0.19,\n  \"SA\": 434.44,\n  \"SN\": 12.66,\n  \"RS\": 38.92,\n  \"SC\": 0.92,\n  \"SL\": 1.9,\n  \"SG\": 217.38,\n  \"SK\": 86.26,\n  \"SI\": 46.44,\n  \"SB\": 0.67,\n  \"ZA\": 354.41,\n  \"ES\": 1374.78,\n  \"LK\": 48.24,\n  \"KN\": 0.56,\n  \"LC\": 1,\n  \"VC\": 0.58,\n  \"SD\": 65.93,\n  \"SR\": 3.3,\n  \"SZ\": 3.17,\n  \"SE\": 444.59,\n  \"CH\": 522.44,\n  \"SY\": 59.63,\n  \"TW\": 426.98,\n  \"TJ\": 5.58,\n  \"TZ\": 22.43,\n  \"TH\": 312.61,\n  \"TL\": 0.62,\n  \"TG\": 3.07,\n  \"TO\": 0.3,\n  \"TT\": 21.2,\n  \"TN\": 43.86,\n  \"TR\": 729.05,\n  \"TM\": 0,\n  \"UG\": 17.12,\n  \"UA\": 136.56,\n  \"AE\": 239.65,\n  \"GB\": 2258.57,\n  \"US\": 14624.18,\n  \"UY\": 40.71,\n  \"UZ\": 37.72,\n  \"VU\": 0.72,\n  \"VE\": 285.21,\n  \"VN\": 101.99,\n  \"YE\": 30.02,\n  \"ZM\": 15.69,\n  \"ZW\": 5.57\n};"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-2.0.2.css",
    "content": ".jvectormap-container {\n    width: 100%;\n    height: 100%;\n    position: relative;\n    overflow: hidden;\n}\n\n.jvectormap-tip {\n    position: absolute;\n    display: none;\n    border: solid 1px #CDCDCD;\n    border-radius: 3px;\n    background: #292929;\n    color: white;\n    font-family: sans-serif, Verdana;\n    font-size: smaller;\n    padding: 3px;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback {\n    position: absolute;\n    left: 10px;\n    border-radius: 3px;\n    background: #292929;\n    padding: 5px;\n    color: white;\n    cursor: pointer;\n    line-height: 20px;\n    text-align: center;\n    box-sizing: content-box;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n    width: 20px;\n    height: 20px;\n}\n\n.jvectormap-zoomin {\n    top: 10px;\n}\n\n.jvectormap-zoomout {\n    top: 50px;\n}\n\n.jvectormap-goback {\n    bottom: 10px;\n    z-index: 1000;\n    padding: 6px;\n}\n\n.jvectormap-spinner {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: center no-repeat url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==);\n}\n\n.jvectormap-legend-title {\n    font-weight: bold;\n    font-size: 14px;\n    text-align: center;\n}\n\n.jvectormap-legend-cnt {\n    position: absolute;\n}\n\n.jvectormap-legend-cnt-h {\n    bottom: 0;\n    right: 0;\n}\n\n.jvectormap-legend-cnt-v {\n    top: 0;\n    right: 0;\n}\n\n.jvectormap-legend {\n    background: black;\n    color: white;\n    border-radius: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend {\n    float: left;\n    margin: 0 10px 10px 0;\n    padding: 3px 3px 1px 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {\n    float: left;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend {\n    margin: 10px 10px 0 0;\n    padding: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick {\n    width: 40px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {\n    height: 15px;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {\n    height: 20px;\n    width: 20px;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.jvectormap-legend-tick-text {\n    font-size: 12px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-text {\n    text-align: center;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-text {\n    display: inline-block;\n    vertical-align: middle;\n    line-height: 20px;\n    padding-left: 3px;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-asia-mill.js",
    "content": "jQuery.fn.vectorMap('addMap', 'asia_mill',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 555.5409752358405, \"bbox\": [{\"y\": -6895749.143810256, \"x\": 2858903.2260101754}, {\"y\": 1365383.966806244, \"x\": 16242290.106516164}], \"left\": 0}], \"paths\": {\"BD\": {\"path\": \"M468.23,273.61l0.71,0.28l0.58,-0.17l1.03,-2.27l3.07,-0.06l0.75,-0.99l-1.01,-0.97l-0.42,-1.03l-2.11,-0.48l-1.82,-1.98l-1.04,-0.37l0.36,-1.52l2.2,-2.38l-0.03,-0.74l-0.59,-0.55l1.28,0.98l0.67,1.23l1.03,0.3l1.31,0.04l0.39,-0.56l-0.29,-0.74l1.12,2.32l1.6,0.95l1.55,0.0l0.55,-0.72l0.06,-0.94l0.91,1.84l-0.18,4.52l0.45,0.95l4.71,1.15l12.05,-0.09l2.87,1.64l-1.68,-0.08l-1.11,3.94l-1.09,0.36l-0.53,1.16l-0.92,-0.13l-1.3,0.83l-1.65,0.27l-1.04,1.45l-0.55,2.17l1.25,4.63l0.87,0.36l0.23,-0.76l0.39,0.99l1.03,0.54l1.43,-0.82l0.06,-1.92l1.33,-1.61l-0.02,-1.25l1.1,-0.2l0.56,0.3l0.57,2.45l0.21,3.12l0.98,1.98l0.95,10.27l-1.52,-0.91l-0.91,0.13l-0.83,1.18l0.19,1.46l-0.37,-0.53l-0.38,-4.02l-1.31,-4.1l0.26,-0.9l-0.55,-0.43l-0.24,0.13l-1.76,-2.79l-0.59,-1.56l-2.33,1.96l-1.63,0.27l-1.96,-3.12l-0.37,-4.39l-0.56,-0.29l-0.45,0.36l-0.06,0.92l-1.76,-0.24l-0.44,0.23l0.12,0.48l0.92,0.7l1.01,0.22l0.34,0.42l0.02,0.68l-0.97,0.9l0.32,0.89l-0.51,0.67l-0.05,0.75l0.49,1.55l0.74,1.1l-0.04,1.05l-1.67,1.56l-1.04,1.67l-0.41,-0.63l0.95,-1.34l0.03,-0.48l-0.94,-0.02l-1.11,0.67l-0.25,-1.52l0.63,-1.15l-0.09,-0.5l-0.51,-0.01l-0.91,0.83l-0.49,3.08l-1.12,0.91l-0.6,-3.09l-0.39,-0.32l-0.5,0.81l0.23,2.33l-0.91,1.25l-0.47,0.01l-0.88,-0.99l-0.34,-3.13l-0.94,-2.74l-0.52,-3.11l0.52,-1.04l-0.11,-0.49l-1.5,-0.56l0.17,-1.34l-1.2,-1.65l0.96,-2.52l0.18,-2.32l-0.78,-0.65l-1.19,-0.22l-1.51,-1.02l-0.65,0.08l-0.78,-0.54l-0.29,-0.57l0.77,-1.7ZM492.82,292.48l0.02,0.04l-0.02,-0.03l0.0,-0.01ZM490.12,294.53l0.06,-0.71l0.06,0.24l-0.11,0.47ZM486.34,295.46l0.98,-1.76l-0.25,-1.76l-0.63,-0.69l-0.22,-1.31l1.7,2.68l-0.27,2.27l-0.25,0.35l-1.07,0.23Z\", \"name\": \"Bangladesh\"}, \"MN\": {\"path\": \"M465.38,65.23l0.89,-0.91l-0.34,-1.28l0.62,-0.06l1.36,-0.89l0.63,-1.89l2.96,-0.29l1.6,0.36l0.59,-0.65l0.58,0.39l1.04,-0.28l0.59,-0.33l0.38,-0.81l1.04,0.09l2.05,-1.05l0.37,-0.57l-0.19,-1.38l2.27,-0.66l0.58,-1.07l4.59,-1.32l0.78,-0.78l1.87,-1.05l2.78,-0.49l3.01,-2.22l2.88,-0.07l1.04,-1.55l2.11,1.67l0.67,-0.01l0.8,-0.92l0.67,0.01l0.42,1.04l1.07,0.72l8.35,0.44l0.71,3.17l2.29,2.08l2.21,-0.2l1.29,1.02l2.11,-0.02l1.12,0.3l2.16,-0.99l1.09,0.49l0.76,-0.36l1.92,0.95l4.87,0.16l1.67,1.45l1.56,-0.13l1.37,-1.0l0.41,-0.68l1.71,-0.25l1.36,-0.75l0.85,-0.75l1.1,-2.2l0.25,-2.54l-1.91,-1.23l-0.53,-1.95l-0.94,-1.28l0.05,-0.46l0.57,-1.2l0.23,-1.64l0.63,-0.95l1.29,-0.51l0.99,-2.1l2.22,-0.91l1.25,-1.62l0.49,-1.34l0.6,0.61l2.94,1.23l2.31,0.52l1.62,1.19l4.13,0.3l6.74,2.7l1.5,-0.12l3.88,1.08l0.63,4.99l0.71,1.02l-0.09,1.5l0.6,0.53l0.85,0.15l1.69,1.38l3.6,0.96l1.12,0.89l2.42,0.6l1.42,-0.35l2.09,0.2l0.92,-0.22l2.0,-1.27l4.65,-0.82l2.11,-0.81l3.62,0.66l2.55,0.98l3.66,-0.08l3.83,3.12l5.14,0.45l-0.06,2.11l0.27,0.58l3.44,2.64l1.66,0.76l4.72,-0.1l7.17,1.59l1.72,-0.47l1.38,0.73l0.9,-0.0l4.66,-2.03l5.53,-0.68l3.09,-1.04l1.45,0.23l1.07,-0.2l1.83,-0.89l0.96,-1.85l2.96,-1.98l5.22,-2.55l3.2,0.36l1.84,0.88l2.02,1.84l1.38,0.6l2.35,0.12l3.03,-1.24l1.43,0.3l1.44,0.54l0.71,0.62l-4.84,9.93l-1.54,2.03l-0.25,2.98l-1.78,1.03l-0.19,0.39l0.24,1.78l0.55,0.9l2.15,1.83l1.08,-0.17l1.76,-1.38l1.99,0.18l1.85,-0.29l2.16,0.57l2.17,1.49l3.44,-3.22l2.57,-0.35l2.54,0.41l1.8,2.03l2.38,0.99l0.65,1.24l0.93,0.52l1.8,2.04l1.36,0.99l0.52,1.52l0.76,1.05l-0.01,1.06l-1.13,0.84l-2.67,-0.08l-3.79,-1.36l-0.93,0.6l-2.89,-0.2l-1.99,0.49l-1.2,0.45l-1.18,0.92l-1.41,-0.65l-1.01,0.08l-0.42,0.37l-0.4,1.72l-3.39,-0.28l-2.33,0.96l-2.4,3.23l-0.39,0.71l-0.06,1.29l-1.88,0.99l-1.87,1.53l-3.74,0.61l-1.74,0.11l-1.43,-0.38l-1.43,0.3l-1.21,1.84l-2.52,2.13l-3.44,1.97l-6.46,-1.24l-2.32,-1.64l-3.93,-0.05l-1.35,1.02l-0.99,1.34l-1.71,4.41l0.96,1.92l2.38,2.38l0.66,1.54l-1.14,0.39l-1.55,1.43l-4.17,1.53l-4.52,5.09l-7.72,2.96l-4.84,0.2l-3.84,-0.28l-10.6,1.44l-11.84,4.97l-1.46,1.22l-0.95,-0.4l-2.3,-0.1l0.0,-1.59l-0.48,-0.39l-5.77,1.1l-4.75,-2.26l-6.83,-1.36l-1.26,-0.48l-2.32,-2.54l-1.39,-0.42l-3.06,-0.12l-8.31,-1.14l-3.92,0.98l-16.87,-2.0l-6.05,0.61l-0.42,-1.63l-3.28,-3.13l-0.15,-1.01l-2.38,-5.24l-1.45,-0.72l0.29,-1.8l-0.2,-0.51l-2.52,0.02l-2.39,-0.79l-2.56,-1.53l-1.19,-1.11l-1.93,-0.36l-2.15,-2.01l-1.23,-0.49l-5.48,-0.85l-2.76,0.24l-2.97,-0.55l-3.26,-0.07l-1.18,-0.45l-0.88,0.06l-1.89,-0.9l-1.14,0.11l-1.48,-2.67l0.33,-1.69l2.14,-2.77l0.03,-0.89l-0.63,-1.57l0.87,-2.78l-0.36,-1.84l-0.87,-1.94l-1.26,-0.64l-1.54,-2.5l-0.52,-2.03l-0.88,-1.72l-1.6,-0.72l-0.81,-1.38l-0.52,-0.08l-1.29,0.57l-1.61,-1.67l-1.89,-0.23l-1.51,0.36l-3.73,-2.07l-0.11,-0.9l-0.63,-0.83l-3.77,-1.57l0.57,-0.74l-0.01,-0.67l-1.71,-0.88l-0.5,-0.67Z\", \"name\": \"Mongolia\"}, \"BN\": {\"path\": \"M669.68,427.4l0.73,0.87l0.54,2.47l-0.75,-0.21l-0.52,-3.13ZM663.3,429.66l2.55,-1.0l3.15,-2.12l-2.11,1.53l0.21,2.24l0.34,0.55l-0.41,1.43l-0.75,0.81l-1.24,-1.48l-0.84,-0.24l-0.9,-1.73Z\", \"name\": \"Brunei\"}, \"BH\": {\"path\": \"M186.05,263.08l0.03,-0.01l0.0,0.12l-0.03,-0.12ZM186.08,263.2l0.33,0.5l-0.01,1.54l-0.25,-0.46l-0.07,-1.59Z\", \"name\": \"Bahrain\"}, \"BT\": {\"path\": \"M479.26,258.41l-0.68,-0.6l-1.59,-0.42l-1.49,0.21l-0.67,-0.33l-1.21,-0.69l-0.18,-0.78l-0.61,-0.7l0.98,-0.78l0.47,-1.27l1.11,-1.01l0.49,-1.02l2.35,-2.77l2.96,-1.79l1.35,-0.05l1.57,0.4l-0.19,0.88l0.51,0.52l2.68,0.07l2.39,0.83l1.8,-0.86l2.35,0.97l-0.39,2.29l0.21,0.81l1.39,1.06l1.61,-0.11l0.49,0.91l-0.62,1.49l0.57,1.2l-0.19,0.44l-2.46,0.43l-0.91,-0.03l-0.85,-0.49l-1.14,0.61l-4.0,0.16l-3.09,-0.93l-1.21,0.46l-0.53,0.64l-3.27,0.27Z\", \"name\": \"Bhutan\"}, \"HK\": {\"path\": \"M661.58,292.96l0.56,-0.57l0.79,-0.15l0.37,0.12l0.23,0.69l-0.18,0.38l-1.77,-0.47Z\", \"name\": \"Hong Kong\"}, \"JO\": {\"path\": \"M73.44,221.31l0.32,-1.94l0.71,-1.81l-0.18,-2.7l0.4,-4.54l0.81,-0.34l0.91,0.11l1.09,1.36l1.36,0.46l1.2,0.92l3.65,0.53l14.19,-8.55l1.88,6.47l-0.46,0.56l0.45,1.39l0.49,0.26l1.18,-0.3l0.12,0.32l-2.13,1.8l-14.99,4.17l-0.18,0.66l7.3,7.79l-2.14,1.24l-1.23,2.64l-5.25,1.04l-0.54,0.35l-1.77,2.81l-2.92,2.3l-7.72,-1.2l0.79,-4.67l0.53,-1.3l0.03,-2.42l2.2,-5.75l-0.11,-1.66Z\", \"name\": \"Jordan\"}, \"PS\": {\"path\": \"M69.37,220.61l0.5,-1.44l1.93,-1.52l-0.75,-0.82l-0.89,-0.22l-0.2,-2.28l0.38,-1.39l0.34,-0.86l0.71,-0.46l1.04,0.19l1.21,0.91l0.0,4.78l-0.74,2.04l-2.36,0.96l-1.18,0.1ZM64.36,221.37l0.26,-0.24l-0.2,0.39l-0.05,-0.15Z\", \"name\": \"Palestine\"}, \"LB\": {\"path\": \"M71.41,206.16l3.41,-7.3l0.31,-1.87l1.06,-1.44l1.32,-0.97l0.1,-0.56l2.44,-0.29l-0.58,1.07l1.36,0.72l0.51,1.51l-0.27,0.54l-1.73,1.43l-0.21,0.89l-1.1,0.06l-1.03,0.79l-0.41,0.85l0.43,0.87l-1.83,1.74l-1.46,0.66l-0.46,1.19l-0.37,0.22l-1.46,-0.12Z\", \"name\": \"Lebanon\"}, \"LA\": {\"path\": \"M558.12,308.97l0.8,-2.48l0.9,-0.56l1.21,-0.03l0.58,-0.32l0.14,-0.59l-0.68,-0.32l0.06,-0.31l0.54,-0.46l0.92,-1.8l1.27,-0.46l1.32,-0.98l0.33,1.83l0.41,0.49l2.23,-0.25l1.45,0.64l0.79,-0.52l0.23,-0.51l-0.59,-0.81l0.09,-3.9l-1.05,-1.43l-0.46,-1.67l1.09,-1.67l0.5,0.65l1.96,-0.09l2.85,3.44l0.75,0.49l0.74,1.87l0.55,0.12l0.79,-0.61l0.59,0.27l-0.72,3.25l2.08,3.11l4.25,1.55l3.34,-1.92l3.23,2.09l-1.48,1.18l0.07,0.59l1.87,0.54l0.4,1.12l1.34,0.22l0.42,0.91l-1.29,1.97l-1.05,0.95l-2.28,-0.55l-2.03,0.27l-0.16,0.6l0.32,1.04l-1.08,0.87l-0.12,0.82l6.31,4.01l3.0,0.99l-0.42,1.03l0.28,0.95l1.72,1.75l0.92,0.28l0.85,1.15l0.86,2.02l2.37,2.5l1.98,1.54l1.67,1.97l0.28,2.13l0.96,1.49l0.83,0.4l0.66,-0.34l0.63,1.05l3.36,2.31l-1.56,1.09l-0.2,0.64l0.94,1.54l2.13,1.74l0.53,0.81l-1.24,1.92l0.26,2.05l-0.64,0.9l-0.88,-0.18l-1.3,1.28l-0.72,0.04l-0.59,0.63l-0.63,0.09l-2.18,-1.88l-0.59,0.03l-0.89,0.79l-0.78,-0.14l-0.68,0.79l-1.22,0.15l-0.43,0.59l1.04,2.11l-0.26,0.59l-0.82,-0.02l-1.24,-1.21l-1.56,-0.54l-1.34,0.34l-0.62,-0.55l-0.32,-0.6l1.56,-0.89l0.71,-1.11l0.39,-2.8l-0.42,-2.39l0.93,-1.73l0.17,-1.54l-0.28,-0.5l-1.57,-0.92l-0.05,-1.29l-2.57,-1.25l-0.75,-1.37l-0.96,-0.96l-0.46,-1.25l-0.05,-1.74l0.51,-3.38l-0.65,-1.35l-2.34,-1.84l-3.57,-4.78l-1.35,-0.09l-2.3,-0.79l-1.67,0.07l-0.48,0.38l-0.07,0.74l-1.19,1.15l-0.3,0.82l-1.62,0.51l-1.04,0.72l-0.47,-0.8l-1.53,-0.65l-1.54,-1.23l-0.79,-0.06l-1.18,1.01l-1.29,0.38l-0.67,1.12l-2.05,1.33l-1.8,1.65l-1.16,-0.32l1.6,-4.28l-0.05,-1.21l-0.67,-1.09l0.86,-1.3l0.92,-2.92l-0.66,-2.72l0.1,-1.75l-0.63,-0.53l-1.54,-0.29l-1.85,0.75l-0.71,0.09l-0.67,-0.33l-0.57,-0.57l-0.12,-0.62l1.05,-2.53l-0.19,-0.97l-1.62,-1.77l-0.72,-0.02l-0.52,0.36Z\", \"name\": \"Lao PDR\"}, \"TW\": {\"path\": \"M709.3,291.82l-1.83,-4.59l0.51,-1.89l-0.08,-2.0l3.67,-6.43l3.03,-4.34l3.7,-1.83l2.14,1.56l0.09,0.35l-0.77,1.26l0.06,2.28l-1.59,3.77l-1.03,5.01l-0.91,2.74l-2.57,3.52l-0.85,1.94l-0.35,3.19l-0.44,-0.46l-0.11,-1.02l-0.74,-1.59l-1.92,-1.47Z\", \"name\": \"Taiwan\"}, \"TR\": {\"path\": \"M7.99,161.66l1.03,0.22l1.78,-0.37l0.63,-0.86l-1.88,-0.41l-0.87,-1.59l0.93,-0.42l0.78,-0.97l-0.38,-0.84l-1.04,-0.26l0.22,-1.4l-1.11,-1.38l1.53,-1.64l-0.01,-0.66l-0.98,-0.39l-5.01,0.73l0.43,-1.17l0.14,-2.62l0.96,-0.37l3.02,-3.17l1.89,0.03l0.94,-0.5l0.88,-0.02l0.41,0.66l1.26,0.53l2.03,-0.11l0.96,-0.5l0.06,-0.48l0.2,0.52l0.44,0.12l2.4,-0.29l5.37,0.12l0.62,-0.4l-0.05,-0.64l-1.48,-0.65l0.7,-0.47l6.52,-0.93l0.35,-0.33l-0.36,-0.66l-4.21,-0.72l-1.38,-1.17l0.51,-1.42l5.55,0.63l3.22,-0.4l3.54,0.99l3.33,-0.2l1.01,-0.65l0.77,-1.35l4.6,-2.35l1.66,-1.26l7.24,-2.43l10.86,0.44l1.96,-0.93l0.54,0.16l-0.03,1.2l1.48,1.59l2.21,0.87l2.62,-0.69l0.67,0.19l0.96,2.25l1.79,1.43l0.93,0.16l1.2,-0.81l0.79,-0.08l1.41,0.69l0.74,0.89l5.19,0.94l1.14,0.69l3.53,0.69l7.87,-1.6l2.82,1.08l2.54,0.35l1.02,-0.16l6.24,-2.71l2.51,-1.47l0.64,-0.71l2.14,0.68l0.98,-0.56l3.85,0.49l1.25,-1.25l0.91,0.03l0.44,0.73l2.22,1.53l0.02,0.52l0.51,0.51l1.61,0.31l0.22,0.85l1.28,1.16l0.57,2.17l-1.04,1.78l0.93,2.48l-0.04,0.84l2.19,0.95l2.59,-0.14l2.28,1.66l-1.27,0.98l-0.54,2.14l-2.31,0.12l-0.46,0.66l0.51,1.54l0.64,0.58l-0.24,1.25l0.2,0.53l0.71,0.9l0.23,3.83l1.0,0.49l-1.64,3.72l0.43,0.51l0.73,0.06l1.56,1.01l-0.24,0.46l0.21,1.92l1.62,1.39l-0.23,0.51l-0.93,-0.02l-2.34,1.61l-0.2,-2.01l-0.87,-0.72l-0.84,-0.11l-1.42,0.77l-1.09,-0.03l-4.28,-1.2l-1.3,0.34l-1.32,-0.37l-2.72,2.18l-0.63,-1.23l-0.91,-0.31l-1.16,0.82l-3.93,0.97l-6.05,-0.08l-5.27,2.36l-4.83,1.22l-4.33,-0.1l-2.35,-1.43l-1.98,-0.36l-5.77,2.22l-2.57,-0.08l-0.96,-0.89l-2.18,-0.39l-0.64,0.48l-0.7,2.82l0.69,1.64l-1.76,0.56l-0.32,1.45l-0.99,0.56l-0.34,0.73l-1.01,-0.55l0.15,-0.53l-1.01,-2.49l2.77,-3.03l-0.16,-1.54l-1.04,-0.94l-0.43,-0.04l-2.94,1.62l-0.88,1.05l-0.89,0.15l-4.31,-1.91l-1.02,-0.13l-3.12,1.87l-2.57,2.64l-1.88,0.93l-5.61,0.72l-1.03,0.48l-1.75,-0.5l-1.08,-0.65l-2.65,-2.99l-5.1,-2.34l-5.46,-0.6l-0.89,0.96l-0.17,2.23l-0.71,2.0l-1.51,-0.37l-3.86,1.25l-3.28,-1.34l-0.48,-0.5l-0.77,-2.47l-0.76,-0.44l-1.22,0.32l-2.38,-1.06l-1.51,-0.11l-1.53,1.41l0.18,-0.25l-0.34,-0.64l-0.34,0.02l1.78,-1.56l0.13,-0.28l-0.36,-0.57l-7.0,0.23l0.11,-0.26l1.71,-0.35l0.29,-0.44l-0.31,-1.03l-2.07,-1.09l-0.87,-2.1l0.93,-0.51l0.06,-2.34l-2.86,-1.01l-1.45,-1.17l-1.04,0.34l-1.56,-0.72l0.81,-0.68l0.07,-0.85l-0.38,-1.15l0.83,0.48l0.08,1.22l0.49,0.71l0.25,0.15l0.66,-0.5ZM15.22,175.57l-0.41,0.2l-0.33,-0.03l0.31,-0.13l0.43,-0.04ZM16.6,143.61l0.01,-0.05l-0.46,-0.47l0.7,0.08l-0.24,0.44ZM3.34,140.98l2.15,-2.44l-0.15,-2.09l1.72,-0.87l0.46,-0.67l-0.31,-2.04l-1.93,-1.23l1.34,-0.44l0.56,-1.08l2.01,-0.26l1.03,-0.61l1.74,-0.22l1.82,1.43l3.3,-0.46l-0.1,0.85l0.47,1.13l1.24,1.74l1.18,0.83l5.0,2.06l-0.52,1.31l-1.07,0.25l-4.52,-0.94l-1.96,0.79l-1.34,-0.18l-1.86,0.36l-1.98,2.61l-3.22,1.51l0.3,-0.41l-0.33,-0.64l-4.89,0.12l-0.18,-0.41ZM7.44,143.02l-1.73,1.59l-1.03,1.2l0.09,-1.2l1.25,-0.99l1.41,-0.61ZM0.74,145.85l0.89,-0.3l0.19,0.13l-1.08,0.17Z\", \"name\": \"Turkey\"}, \"LK\": {\"path\": \"M405.27,403.82l0.63,-0.48l0.31,-2.67l0.69,-2.19l-0.1,-1.45l1.26,-2.36l0.05,-2.28l1.32,0.61l0.71,-0.1l0.29,-0.53l1.52,1.26l1.62,2.89l0.68,0.41l1.3,1.94l0.18,1.09l1.12,0.66l0.37,2.11l1.82,2.76l1.26,2.7l0.27,0.91l-0.09,2.77l-1.05,2.78l-2.37,1.92l-4.81,1.92l-1.57,0.21l-1.55,-0.41l-1.15,-0.96l-1.7,-4.93l-1.0,-8.59ZM409.2,391.24l-1.76,-0.39l-0.41,-0.44l1.57,0.08l0.6,0.76Z\", \"name\": \"Sri Lanka\"}, \"TL\": {\"path\": \"M743.75,531.36l1.77,-2.37l1.4,-0.5l3.12,-0.62l6.11,-0.25l2.56,-1.05l1.81,0.43l-2.38,1.79l-1.88,0.51l-1.38,1.0l-2.37,0.62l-1.6,0.93l-4.02,1.15l-2.18,1.48l-0.65,-1.32l0.98,-0.19l0.44,-1.35l-0.59,-0.65l-1.14,0.38ZM737.32,534.04l0.79,-0.42l1.17,-0.31l-0.74,0.83l-1.22,-0.09Z\", \"name\": \"Timor-Leste\"}, \"TM\": {\"path\": \"M203.1,134.81l-0.97,-1.38l-0.75,-1.96l2.58,-2.29l1.35,-0.76l-1.16,0.96l-1.2,2.45l0.48,0.84l-0.32,2.14ZM206.04,128.16l3.88,-1.05l3.1,-0.34l5.29,3.23l2.91,4.49l1.91,1.78l0.68,0.13l2.88,-0.54l8.07,0.54l1.16,-1.25l-0.76,-0.98l-0.26,-2.09l0.85,0.12l1.5,1.43l2.63,-0.58l1.07,-0.61l0.51,-0.81l-0.12,-0.87l-1.1,-0.81l-0.57,-1.62l1.36,-0.37l1.43,-2.54l1.56,0.47l0.76,1.14l1.07,0.04l0.16,-0.96l-2.22,-2.29l2.06,-0.02l0.81,-0.77l1.85,1.68l2.07,0.43l0.74,1.24l0.76,0.47l3.79,0.28l0.85,0.67l-0.35,2.11l1.55,0.99l-0.65,0.67l0.44,1.43l-0.5,1.54l0.38,0.61l2.88,1.63l3.07,-0.24l2.91,0.53l0.65,-0.05l1.18,-0.72l1.0,0.29l1.8,1.21l1.39,3.57l2.06,3.05l0.85,3.23l7.75,5.38l1.95,1.91l3.03,1.84l1.19,-0.12l2.24,1.84l7.43,4.52l2.76,-0.01l3.1,1.66l1.36,0.35l0.19,0.22l-0.77,1.34l-0.06,3.42l-2.52,-0.56l-2.87,-1.32l-1.09,1.01l-0.59,1.71l-3.23,0.11l-2.21,0.96l-2.42,6.9l-1.05,0.9l-1.93,0.94l-0.56,0.81l-1.11,0.03l-4.14,1.3l-1.34,0.12l-0.43,0.76l0.37,0.94l-0.74,1.84l-2.56,1.51l-1.65,0.02l-1.01,0.51l-0.49,-0.76l-1.74,-1.33l-2.84,0.04l-1.86,-1.54l-0.71,-0.1l0.1,-1.7l-0.68,-1.07l0.38,-0.89l-0.32,-4.03l-0.44,-0.84l-6.02,-0.15l-1.99,-2.71l-4.53,-2.48l-0.55,-0.59l-0.67,-1.69l-3.71,-1.53l-1.3,0.25l-0.99,-0.27l-1.02,0.41l-0.75,-0.21l-2.17,-1.45l-4.57,-1.19l-0.25,-1.22l-1.0,-0.91l-5.86,-0.35l-1.13,0.6l-0.29,0.89l-5.02,-0.19l-1.6,0.44l-3.74,2.45l-1.46,2.63l-3.62,1.13l-1.71,-0.08l-0.61,-4.69l0.33,-8.95l-1.59,-2.61l-2.68,-1.14l-1.3,0.25l0.55,-1.59l1.9,0.43l0.79,-0.12l0.32,-0.51l-0.29,-0.73l-0.73,-0.5l0.06,-2.12l-0.93,-0.58l-3.08,-0.24l-0.51,0.58l-0.94,-2.3l-0.07,-1.47l1.32,-4.71l1.22,1.25l1.6,0.4l1.86,-0.34l0.99,1.22l1.24,0.3l2.26,-0.61l1.46,0.23l0.32,-0.57l-0.35,-0.92l1.37,0.24l1.14,-0.41l0.37,-0.43l0.06,-1.24l-0.39,-1.08l-0.65,-0.72l-2.36,-1.57l-1.3,-1.27l-1.97,-5.25l-1.88,-0.49l-3.37,0.39Z\", \"name\": \"Turkmenistan\"}, \"TJ\": {\"path\": \"M312.6,153.86l0.49,-1.67l0.75,-0.73l1.15,-0.49l4.28,0.72l1.47,-0.06l0.98,-0.92l0.43,-1.72l0.68,-0.04l1.02,-0.65l0.05,-0.52l-0.48,-0.67l1.1,-0.28l0.2,-0.47l-0.55,-0.7l2.53,0.2l0.5,-1.43l-0.62,-2.01l0.6,-0.54l0.29,-1.15l0.59,0.04l1.33,0.95l0.68,0.04l4.34,-2.09l0.69,-1.18l1.41,1.4l0.16,0.81l0.48,0.2l-2.49,2.0l-0.24,0.95l0.31,0.46l1.01,0.36l0.69,1.04l0.79,0.09l-0.57,0.34l-0.55,1.08l-0.56,-0.81l-3.63,-1.35l-3.51,0.92l-0.7,0.87l0.01,0.65l-0.71,-0.36l-0.52,0.2l-0.23,0.5l-0.38,1.42l0.51,2.2l0.44,0.36l2.29,-0.43l2.59,0.18l1.71,-0.22l0.58,0.29l1.77,-0.37l0.57,0.13l0.89,1.24l0.85,0.31l1.54,-0.15l0.69,-0.8l2.64,-0.87l0.14,1.01l1.56,0.42l-0.06,0.72l0.58,0.64l0.59,0.04l1.42,-0.63l1.34,1.18l0.41,0.04l0.98,-1.13l1.43,-0.33l4.05,0.14l2.7,-0.86l0.79,0.04l-0.15,1.79l1.41,2.05l-0.78,0.93l0.93,2.59l1.55,0.72l0.72,-0.27l0.58,-0.82l0.9,0.0l3.72,1.57l-0.34,2.11l1.2,3.66l-0.24,1.67l1.57,1.55l-1.23,0.9l-1.56,-1.23l-3.22,-0.24l-0.9,0.78l-2.94,0.8l0.31,-0.94l-0.4,-0.66l-2.66,-0.38l-3.85,1.77l-1.04,0.82l-0.75,1.19l-2.16,0.4l-4.14,2.46l-0.73,-0.02l-0.79,-1.05l-0.7,-2.31l1.11,-6.72l-0.64,-0.61l-1.63,0.26l0.38,-1.82l-0.6,-1.47l-1.67,-1.13l-1.62,-0.38l-1.22,0.38l-0.9,0.77l-1.53,2.3l-1.6,1.44l0.26,2.26l-0.36,0.54l-0.71,0.2l-0.83,-0.46l-0.97,-0.08l-2.56,0.51l-0.8,0.87l-0.03,2.31l-0.63,0.6l-2.15,-1.75l-0.7,-0.14l-0.87,0.62l-0.93,0.03l-2.25,1.1l-0.9,0.97l-1.34,0.56l-0.57,-0.13l-1.25,-1.25l0.38,-2.72l3.53,-4.61l0.49,-1.81l-1.99,-2.39l-0.27,-1.51l0.72,-1.85l-0.39,-1.0l-0.72,-0.35l-2.42,-0.06l-0.36,-1.16l-2.04,-0.68Z\", \"name\": \"Tajikistan\"}, \"TH\": {\"path\": \"M537.74,324.01l2.04,-0.59l0.45,-0.42l-0.28,-2.76l0.73,-1.57l0.08,-2.38l1.18,-1.35l0.27,-0.79l1.75,0.63l4.69,-0.67l0.85,-0.91l0.34,-1.57l0.78,-0.19l1.13,0.28l1.04,-0.35l0.57,-0.75l-0.14,-0.95l1.52,0.11l1.48,-0.7l0.99,0.61l0.38,0.69l0.44,-0.05l0.96,-0.98l1.39,1.65l-1.06,2.91l0.28,1.07l0.7,0.71l1.17,0.53l1.0,-0.15l1.15,-0.68l1.82,0.3l-0.13,1.56l0.65,2.57l-0.87,2.67l-0.9,1.41l0.67,1.48l0.03,0.9l-1.74,4.23l0.45,0.78l1.2,0.54l0.78,-0.12l4.07,-3.13l0.69,-1.12l1.14,-0.27l1.06,-0.94l1.58,1.2l1.52,0.65l0.32,0.84l0.8,0.31l1.15,-1.0l1.89,-0.68l0.79,-1.54l0.91,-0.51l0.04,-0.84l1.24,-0.05l2.26,0.78l1.17,0.08l2.58,3.67l3.09,2.7l0.49,1.06l-0.52,3.18l0.05,1.82l0.54,1.52l1.05,1.09l0.81,1.45l2.36,1.1l-0.1,0.63l0.34,0.79l1.66,1.09l-0.17,1.07l-0.78,1.05l-0.17,0.77l0.4,2.55l-0.48,2.9l-2.18,1.37l-0.64,0.74l-0.46,-1.02l-1.49,-0.49l-6.07,0.52l-2.88,-0.48l-3.04,0.68l-1.37,0.65l-1.02,0.96l-1.4,2.3l-1.3,1.31l-0.09,0.53l-1.54,0.29l-0.11,2.45l0.98,2.09l0.27,2.51l1.86,1.89l-0.26,1.54l-0.86,-0.06l-0.14,0.32l-1.06,-0.8l-0.59,-1.02l-0.56,0.06l-1.2,-1.2l-2.43,-1.27l-2.27,0.49l-2.58,-0.4l-1.21,0.26l0.58,-5.56l-0.62,-0.66l-2.72,-0.77l-0.4,0.33l-3.09,0.59l-1.02,0.94l-0.2,0.84l0.71,1.59l-0.91,2.64l0.19,3.93l-1.05,1.63l-0.35,1.5l-1.27,2.17l-1.08,4.38l-1.47,2.35l-0.92,2.27l-0.07,4.25l0.92,2.45l-0.22,1.06l0.22,0.41l1.15,0.42l2.57,-0.74l0.54,0.13l1.06,5.07l1.12,1.35l0.69,-0.03l1.1,4.65l-0.71,-0.32l-0.96,0.72l0.38,1.87l1.85,2.56l1.25,0.14l3.14,2.29l2.99,-0.24l1.37,0.96l1.45,2.16l1.99,1.54l-0.2,0.8l-1.73,2.19l-0.57,0.01l-0.62,-0.83l-0.58,-0.14l-2.26,0.9l-0.77,1.07l-0.71,-0.69l0.68,-1.21l-0.18,-2.32l-0.75,-0.38l-0.78,0.05l-0.54,-1.24l-0.66,-0.46l-0.85,0.18l-1.85,-0.67l-0.86,-1.07l-1.03,0.3l-0.26,1.05l-1.38,-1.7l-1.18,-0.89l0.16,-1.5l-1.21,-0.97l0.27,-0.83l-0.53,-0.49l-1.31,-0.03l-0.73,-1.83l-0.6,-0.75l-0.9,-0.15l-0.12,-1.17l-1.94,-1.31l-0.71,-1.5l-1.29,-0.72l-0.59,0.2l-0.76,0.98l-0.68,-1.48l0.03,-2.42l0.63,-1.55l0.33,-2.39l2.81,-8.01l0.09,-2.34l3.14,-3.22l3.28,-5.36l-1.16,-3.29l-0.48,-2.8l-1.36,-1.43l-0.7,-2.18l0.42,-1.38l-0.33,-3.85l-1.57,-2.62l-2.74,-2.39l-2.36,-3.38l-0.3,-1.14l-0.11,-1.46l2.77,-1.37l0.24,-5.08l1.99,-1.43l0.23,-1.3l-0.53,-0.67l-0.48,0.01l-0.77,0.61l-1.26,-2.81l-0.32,-1.92l-5.49,-6.4l0.28,-0.94l-0.82,-2.56l-0.24,-0.48l-0.82,-0.09l-0.57,-0.75ZM559.45,406.63l0.01,0.05l-0.04,-0.01l0.03,-0.04ZM556.62,392.44l0.03,-0.28l0.21,0.01l-0.06,0.19l-0.18,0.08ZM544.21,404.66l-0.1,-0.43l0.18,-0.99l0.21,0.06l-0.29,1.36Z\", \"name\": \"Thailand\"}, \"XC\": {\"path\": \"M54.11,189.32l0.71,-1.69l3.58,0.38l4.65,-1.22l-1.47,1.07l-0.12,1.43l-1.57,0.62l-1.16,-0.11l-0.33,-0.76l-0.7,-0.35l-1.48,-0.08l-2.13,0.7Z\", \"name\": \"N. Cyprus\"}, \"NP\": {\"path\": \"M410.28,243.11l-2.55,-1.76l0.5,-1.57l0.84,-0.96l0.17,-1.86l0.43,-1.13l1.67,-2.57l2.53,-2.12l0.36,0.0l0.71,0.97l1.05,0.04l0.69,-0.55l1.13,-1.86l1.45,-0.35l2.74,0.45l1.31,2.1l2.04,1.05l2.81,2.14l1.2,0.53l1.08,0.07l3.06,3.39l1.08,0.07l1.86,-0.7l0.91,0.36l1.07,2.57l4.26,2.86l2.43,-0.32l-0.44,1.39l0.29,0.76l0.99,0.39l3.39,0.13l2.33,2.94l1.09,-0.49l0.13,-1.05l0.41,0.62l1.7,0.81l1.0,-0.37l0.52,-1.03l3.86,2.13l3.7,0.19l1.83,-0.58l1.62,0.11l-1.18,5.52l0.99,1.89l0.33,1.4l-0.85,2.37l-1.11,-0.4l-1.63,0.3l-1.53,-0.18l-1.06,0.47l-1.13,-0.44l-0.63,-1.02l-2.53,0.89l-2.42,-1.08l-2.71,-0.61l-1.59,0.35l-0.56,-1.32l-0.61,-0.49l-0.81,-0.06l-2.2,0.7l-0.76,-0.85l-3.21,-1.41l-0.5,-1.97l-1.16,-0.57l-2.9,-1.14l-1.72,0.42l-0.54,0.41l-2.88,-0.65l-1.06,0.69l-3.82,-1.07l-0.63,-1.31l-1.72,-0.01l-3.45,-1.93l-1.06,0.34l-3.87,-2.4l-1.13,-1.33l-4.32,-2.53l-0.65,-0.19l-0.62,0.45Z\", \"name\": \"Nepal\"}, \"PK\": {\"path\": \"M269.48,270.83l0.52,-4.2l0.67,-0.75l0.57,-2.85l2.01,-1.0l0.97,-0.08l0.52,-1.04l0.77,-0.46l2.52,-0.65l2.87,-0.06l0.36,-0.47l0.11,-1.17l0.45,-0.39l-0.03,-1.58l0.47,-0.86l-0.52,-0.74l-0.77,-0.41l-2.77,0.13l0.39,-1.76l-0.54,-4.07l0.04,-2.2l-1.6,-0.09l-1.51,-1.37l-3.47,-1.08l-1.91,-1.91l-2.05,-3.71l-0.19,-0.94l-2.65,-2.99l10.89,3.26l8.22,-0.72l3.87,0.84l2.43,-1.24l5.25,-0.12l8.22,-2.31l1.17,-1.25l-0.51,-1.27l0.49,-1.74l-0.13,-2.39l0.42,-1.5l0.32,-0.75l1.44,-0.87l1.7,-1.97l1.13,-0.25l0.74,0.48l1.28,0.21l1.43,-0.15l2.17,-0.92l0.23,-0.41l-0.28,-0.62l-0.84,-0.53l0.92,-0.14l2.08,-1.08l1.11,-1.01l1.85,0.42l1.11,-0.38l1.19,1.17l1.06,0.19l1.7,-0.92l1.54,-1.71l-0.18,-4.32l1.19,-1.99l0.71,-2.75l2.97,-0.66l2.75,-1.73l0.12,-0.99l-1.13,-2.12l-1.89,-2.23l0.09,-0.52l0.46,-0.22l2.4,0.73l2.52,0.08l1.59,-0.27l1.74,-0.77l0.34,-0.78l0.03,-2.08l-0.91,-1.17l2.28,-2.78l1.25,-0.9l1.26,-1.87l-0.52,-1.21l0.4,-0.97l-0.21,-1.16l-1.35,-2.98l-1.47,-1.22l2.92,-2.92l1.05,0.02l3.08,-2.38l3.32,-1.04l8.46,-0.5l2.11,0.54l4.23,-1.81l1.89,0.66l1.45,-0.23l1.96,0.57l0.66,1.53l1.84,-0.02l1.15,0.7l0.89,2.05l-0.04,1.63l-0.48,0.91l0.16,0.54l1.26,0.65l0.79,1.44l0.87,0.06l1.8,-0.54l0.21,0.8l1.45,0.92l1.99,4.42l-0.25,0.7l-1.59,0.77l-1.22,1.27l-1.07,-0.14l-2.06,0.72l-1.13,0.04l-2.35,1.35l-1.72,-0.27l-2.12,-0.88l-1.69,-0.06l-5.08,-0.99l-2.74,1.13l-1.28,2.39l0.11,0.68l1.22,0.82l-0.53,0.92l0.26,0.83l0.45,0.32l1.89,0.13l-1.7,1.09l-0.33,0.76l0.06,0.8l1.21,1.19l-0.19,0.79l-0.96,1.3l0.16,0.78l1.0,1.03l1.2,0.61l0.09,1.56l0.37,0.35l2.14,0.21l0.01,1.64l0.32,0.43l1.07,0.42l1.4,-0.03l1.71,0.69l0.54,0.53l-0.41,0.71l-3.79,1.57l-1.57,1.26l-0.36,1.18l0.6,1.91l-0.55,2.25l0.18,0.66l0.63,0.48l-2.05,1.08l-3.26,3.73l-0.26,0.91l0.35,1.04l-0.24,0.33l-0.5,0.49l-3.35,1.5l-1.12,3.11l-2.36,4.12l-4.24,2.31l-1.61,3.3l-1.4,1.47l-0.56,1.59l-2.17,0.66l-2.71,0.32l-2.75,0.97l-0.54,-0.33l-0.39,-1.18l-0.59,-0.61l-0.85,-0.41l-0.84,0.03l-2.03,1.49l-1.89,3.07l-2.77,2.99l-0.51,2.6l0.37,0.82l1.92,1.06l2.4,0.39l0.41,0.36l-0.14,2.08l-0.42,1.24l0.25,1.53l1.41,1.76l2.65,0.16l0.04,1.91l2.84,5.54l-0.51,1.0l0.38,1.32l-1.88,0.98l-0.72,-0.22l-0.2,-0.99l-0.83,-0.16l-3.03,1.01l-0.66,0.78l-1.39,0.17l-1.84,-0.86l-5.29,0.01l-0.66,-0.31l-0.65,0.61l-0.06,2.13l-3.01,0.31l-1.21,1.0l-0.25,-0.26l-0.77,0.04l-0.58,-0.5l-1.41,0.59l-0.05,-0.45l-0.57,-0.33l-0.36,0.17l-0.45,-0.88l-1.14,-1.08l-1.04,-4.6l-0.84,-0.57l-2.73,-0.5l-0.04,-2.81l-1.28,-2.11l-0.79,-0.73l-0.95,-0.3l-1.12,0.15l-0.56,0.45l-0.14,0.63l-3.17,0.73l-1.97,-0.15l-2.65,0.5l-2.1,0.03l-0.99,0.92l-3.43,-1.07l-0.78,-0.57l-1.09,0.44l-1.53,-0.33l-1.4,0.26l-0.65,0.55l-0.13,0.54l-5.86,-0.39l-2.45,0.99l-1.15,-0.64l-0.84,0.54l-1.21,0.17l-1.92,-0.28Z\", \"name\": \"Pakistan\"}, \"PH\": {\"path\": \"M728.0,406.82l-0.36,-1.38l-0.85,-0.45l-0.93,0.16l-1.15,1.02l-2.46,5.15l-0.73,-0.16l-0.33,-0.59l0.11,-0.69l0.93,-1.32l0.61,-3.27l0.76,-0.92l0.9,-0.65l4.06,-0.9l0.64,-0.48l0.18,-1.27l0.58,-0.71l1.78,-0.64l0.67,-0.86l1.5,0.51l1.05,1.19l0.18,1.61l-0.78,0.77l0.18,0.69l0.35,0.07l3.3,-1.43l1.49,-2.74l1.27,0.56l1.14,-0.29l0.99,-3.03l1.85,0.74l0.43,-0.17l0.47,-1.0l1.03,0.24l0.92,-0.17l0.58,-1.41l-0.86,-3.85l0.23,-0.35l2.55,1.76l0.99,1.46l0.61,0.45l0.63,0.02l0.02,0.82l0.91,1.89l-1.33,1.93l0.36,0.57l1.35,0.53l0.09,1.0l0.58,1.01l-0.17,2.72l1.02,1.26l0.13,2.5l-1.03,2.12l-1.88,1.25l0.29,1.17l-0.14,1.8l-0.55,-2.81l-1.64,-3.69l-0.84,-0.17l-0.91,0.67l-0.34,1.13l-1.8,2.36l-0.19,0.91l0.45,0.91l1.14,1.03l0.58,1.69l-0.02,1.68l-1.46,2.17l-0.55,0.33l-0.44,-1.09l0.26,-1.7l-0.39,-0.57l-0.86,0.04l-1.06,1.35l-0.53,-0.03l-5.2,-2.61l-0.91,-1.16l-0.67,-4.15l1.48,-1.94l0.23,-0.75l-0.31,-1.0l-1.65,-1.77l-2.44,-1.24l-0.93,-0.12l-0.84,0.47l-0.61,2.56l-1.07,-0.63l-0.58,-1.24l-0.67,0.04l-0.67,0.99l-0.69,0.09ZM751.98,389.95l-0.18,-0.26l0.18,-0.69l0.14,0.94l-0.14,0.0ZM745.51,369.73l0.42,0.49l0.16,1.05l1.39,0.75l-0.5,1.78l0.06,1.37l0.32,1.81l0.73,1.51l-0.22,0.62l0.63,0.5l-2.56,-0.11l-0.47,-0.75l-0.93,-0.6l-0.74,-1.33l0.4,-0.56l0.14,-1.09l-0.98,-0.39l-1.49,-1.79l-1.73,-1.01l-0.94,-2.42l1.55,0.24l4.29,-0.34l0.49,0.25ZM748.54,386.17l-0.11,0.68l0.34,1.55l-0.61,-0.86l0.39,-1.37ZM739.46,377.82l1.66,1.21l0.85,-0.07l0.75,-0.56l0.45,0.12l0.62,1.05l-0.07,3.26l1.13,1.12l0.7,2.2l-0.69,0.15l-0.74,-0.82l-0.65,0.35l0.22,1.71l-0.96,-0.38l0.05,-1.08l-0.37,-0.87l0.42,-1.7l-0.12,-1.02l-0.99,-1.46l-0.64,-0.13l-0.92,0.39l-0.72,-3.46ZM741.83,394.7l0.21,0.21l0.02,0.05l-0.32,-0.14l0.09,-0.12ZM738.84,387.8l1.52,0.83l0.11,1.43l-0.73,0.19l-0.69,0.75l-1.65,0.22l-1.56,-0.43l-0.3,-0.72l0.22,-0.29l1.36,-0.84l0.84,-1.0l0.88,-0.14ZM740.7,376.89l-0.46,0.02l-0.5,-0.74l0.4,0.01l0.56,0.71ZM738.03,358.15l1.13,1.2l-0.08,1.14l-1.32,0.79l-0.56,-0.45l0.53,-0.81l0.29,-1.86ZM705.26,340.87l2.47,2.04l1.41,-0.15l0.67,-0.97l-0.6,-3.01l0.11,-1.65l0.63,-1.44l0.12,-1.17l0.03,-2.73l-0.49,-1.5l1.77,-6.46l1.32,-0.62l2.0,-0.1l3.6,1.82l2.76,0.73l1.03,-0.47l0.93,-1.16l0.42,0.95l-1.01,1.96l-0.19,3.22l0.71,1.92l0.97,0.75l0.23,1.08l0.76,0.5l-2.68,6.69l-2.48,0.82l-1.67,1.35l-0.26,0.82l0.33,1.21l-1.44,2.23l-0.12,1.02l2.1,3.92l-0.4,0.52l0.02,0.84l1.09,3.29l1.19,1.24l2.47,0.77l0.97,-1.01l-0.57,-0.9l1.81,-1.08l0.87,0.03l2.06,0.87l0.92,1.55l-0.08,1.24l0.44,0.57l1.57,-0.04l0.57,-0.88l-0.17,-1.26l0.65,0.61l2.8,0.96l-1.64,0.38l-0.5,0.9l1.98,2.8l-0.23,0.96l0.4,0.54l1.09,0.06l1.14,0.57l-0.03,1.33l-0.44,1.29l-0.68,-0.57l0.47,-1.43l-0.11,-0.49l-0.54,-0.26l-1.98,0.22l-2.2,-0.99l-0.07,-1.15l-1.0,-1.74l-2.27,-1.38l-2.18,-2.32l-0.91,-0.19l-0.54,0.57l0.27,1.97l1.2,2.03l-0.11,0.92l-1.4,-2.27l-2.36,-2.11l-2.3,-1.17l-1.29,0.2l-1.17,0.64l-0.51,1.04l-1.37,0.37l-1.88,-0.91l-0.84,-0.94l-1.27,0.09l-0.06,-1.93l2.25,-2.25l0.18,-1.37l-0.61,-0.85l-1.39,-0.49l-0.76,-0.67l-0.69,0.13l-0.29,1.08l0.3,1.96l-0.52,-0.01l-1.22,-2.35l-1.29,-0.55l-1.08,-4.3l-0.32,-3.15l-0.92,-1.36l0.09,-1.8ZM730.9,372.85l0.47,-2.32l-0.19,-0.94l1.67,0.72l2.65,2.11l0.94,1.95l-1.57,-0.81l-0.13,-0.48l-2.08,-1.69l-0.86,0.3l-0.91,1.16ZM731.8,392.09l0.51,-3.17l2.34,-3.7l1.75,-4.53l0.06,3.43l-0.31,1.27l-2.26,2.03l-1.54,4.05l-0.54,0.62ZM733.28,394.82l0.52,-0.32l0.02,0.02l0.03,0.32l-0.57,-0.03ZM729.86,395.26l-0.73,0.04l-0.95,-1.93l-2.17,-1.16l-1.04,-1.46l-0.07,-0.78l0.39,-0.76l1.78,-0.22l1.23,-0.96l0.09,-1.64l-0.32,-1.54l0.97,-1.36l0.18,-1.36l1.68,-0.66l1.65,0.46l0.3,0.71l-3.01,6.84l-0.11,2.09l1.29,2.24l-0.6,1.16l-0.53,0.31ZM721.54,384.46l0.08,-2.36l0.65,-1.73l0.41,-4.26l-0.36,-0.84l-1.14,-0.42l0.2,-0.25l2.11,0.9l2.44,1.59l1.7,-0.22l0.29,0.21l-0.12,0.52l0.57,0.41l1.39,-0.68l-0.56,1.97l-1.94,1.45l-0.31,1.24l-1.72,0.97l-2.45,0.54l-1.25,0.95ZM725.79,384.74l0.1,-0.57l0.69,-0.72l-0.33,1.11l-0.47,0.17ZM725.34,370.08l0.51,0.0l0.32,0.32l-0.09,0.37l-0.74,-0.68ZM720.66,414.08l1.28,-0.48l1.17,0.52l-0.4,0.68l-1.29,0.41l-0.76,-1.13ZM721.62,371.25l-0.28,-0.34l0.74,-1.88l-0.26,1.6l-0.2,0.62ZM720.72,362.06l1.2,0.4l0.06,0.49l-0.5,0.8l-0.89,-0.63l0.12,-1.06ZM720.92,351.28l-0.31,-0.65l0.56,-0.04l0.08,0.05l-0.33,0.63ZM709.61,362.34l0.4,-0.1l2.09,0.38l1.26,-0.21l1.33,0.83l0.82,-0.23l2.08,2.06l-0.43,1.29l0.47,2.2l-1.03,2.1l-0.97,0.66l-0.4,-0.1l-1.19,-1.44l-0.47,-1.51l-0.77,-0.79l-0.21,-1.61l-0.66,-1.28l-1.3,-1.01l-0.48,-1.08l-0.55,-0.15ZM714.98,418.53l0.26,0.35l-0.6,0.22l-1.1,-0.11l0.83,-0.57l0.6,0.1ZM716.05,419.0l0.09,-0.02l0.4,0.07l-0.27,0.16l-0.22,-0.21ZM705.98,371.66l1.18,0.87l0.96,-0.01l0.47,0.43l-1.79,0.03l-0.83,-1.33ZM705.87,425.31l0.15,-0.09l-0.05,0.07l-0.1,0.02ZM707.64,424.35l0.2,-0.16l0.09,0.18l-0.07,0.15l-0.22,-0.17ZM706.04,374.1l0.59,0.45l-0.2,0.86l-0.04,-0.42l-0.35,-0.89ZM705.7,384.54l-0.46,0.12l-0.04,-0.14l0.31,-0.32l0.42,0.15l-0.23,0.19ZM686.27,399.97l0.72,-1.41l1.79,-1.9l2.11,-1.98l0.99,-0.21l0.79,-0.65l6.81,-7.61l1.57,-1.03l0.72,-1.72l-0.35,-1.29l1.36,-3.0l-0.17,2.33l1.17,3.14l-0.52,0.53l-1.72,0.64l-0.72,0.68l-0.59,1.28l-3.03,1.1l-0.35,0.57l0.08,0.83l-2.38,3.62l-2.22,1.15l-1.14,1.74l-2.96,1.68l-0.61,0.88l-1.33,0.63ZM684.24,404.1l0.0,0.29l-0.02,-0.03l0.01,-0.26Z\", \"name\": \"Philippines\"}, \"-99\": {\"path\": \"M383.52,185.67l4.19,1.15l0.92,0.04l-3.62,2.11l-1.48,-3.3Z\", \"name\": \"Siachen Glacier\"}, \"AE\": {\"path\": \"M194.39,278.76l0.73,0.08l0.22,1.31l1.15,0.87l2.69,-0.08l2.96,-1.26l9.41,0.59l3.95,-1.73l2.56,-4.17l2.65,-1.86l3.18,-3.64l3.09,-2.34l1.07,-2.06l-0.1,2.81l0.48,0.5l1.07,0.36l0.03,1.78l-0.57,-0.2l-0.39,0.23l-0.21,0.84l0.56,0.47l0.63,-0.33l0.03,1.52l-1.79,1.71l-0.31,-0.4l0.09,-0.97l-0.49,-0.37l-1.04,0.15l-0.73,0.82l-0.26,3.17l0.28,1.09l-0.3,0.77l0.18,0.5l1.19,0.25l0.25,0.52l-2.94,0.49l-0.73,0.46l0.14,1.92l-2.3,5.42l-0.13,2.62l-0.3,0.38l-18.8,-2.42l-7.07,-8.89l-0.12,-0.91ZM210.56,279.01l0.06,-0.02l-0.04,0.02l-0.02,-0.0ZM210.81,278.92l0.07,-0.02l0.01,0.01l-0.07,0.02Z\", \"name\": \"United Arab Emirates\"}, \"CN\": {\"path\": \"M365.41,172.16l1.93,-0.79l0.8,0.45l0.58,-0.03l1.6,-1.06l0.43,-0.78l-0.29,-0.77l-1.35,-1.08l0.27,-1.56l-1.1,-2.86l-0.11,-1.26l0.45,-1.34l-0.29,-0.65l-2.33,-1.28l-1.95,-0.56l-1.36,0.09l-0.9,1.0l-0.98,-0.49l-0.3,-0.68l-0.39,-1.26l0.69,-0.6l0.09,-0.46l-1.45,-2.26l0.19,-1.53l1.3,-0.4l0.68,-0.85l0.11,-0.56l-0.57,-1.51l1.04,-1.95l2.98,-0.74l2.05,-1.55l1.31,-0.33l-0.07,-1.23l1.05,0.36l1.84,-0.28l2.1,-1.29l0.52,2.3l0.55,0.54l1.46,0.02l2.76,-1.01l0.79,0.52l1.36,-1.01l1.34,-2.89l1.67,-2.04l4.86,0.3l1.85,-0.56l2.31,-0.19l1.9,-1.96l0.18,-0.83l2.68,-1.58l4.03,-1.95l3.58,-1.07l0.68,-0.91l2.92,-0.44l0.25,-0.55l-0.22,-0.96l0.32,-0.57l-0.71,-3.75l0.51,-0.97l2.29,-0.97l-0.24,-0.77l-0.99,-0.5l1.46,-0.67l1.2,0.13l0.41,-0.8l-0.89,-1.63l0.26,-0.97l-0.41,-1.27l-2.18,-4.85l-0.02,-3.97l0.89,-1.82l-0.41,-0.45l-1.46,-0.56l-2.01,0.06l-0.52,-0.32l1.06,-0.83l4.21,-1.09l1.68,-0.04l6.15,-1.96l0.53,1.0l1.26,0.66l2.52,-0.51l1.4,0.82l0.8,-0.08l0.85,-1.74l-0.07,-1.41l-2.19,-1.08l-0.03,-0.33l1.78,-5.22l3.14,-7.6l0.39,-1.94l4.63,1.67l2.32,0.49l2.47,-0.24l2.33,0.22l0.45,0.9l0.68,0.43l1.8,-0.78l1.62,-1.17l2.02,-0.37l1.39,-2.04l0.08,-0.98l-0.6,-1.42l-0.45,-3.93l1.19,-3.6l0.77,-0.73l3.25,-0.45l2.36,-0.85l1.29,-1.65l0.29,-3.02l0.79,-0.62l2.36,-0.13l1.58,0.27l2.52,-0.84l0.3,1.27l-0.63,0.38l-0.25,0.6l0.94,1.34l1.39,0.54l-0.65,1.04l0.38,0.7l2.38,0.77l1.49,0.83l0.5,1.57l3.63,2.12l1.18,0.22l2.09,-0.46l2.1,1.87l0.74,0.07l1.12,-0.53l0.57,1.23l1.53,0.67l1.28,3.58l1.64,2.65l1.19,0.55l0.79,1.76l0.33,1.76l-0.89,2.6l0.67,2.13l-2.13,2.76l-0.41,2.07l1.63,3.21l0.63,0.31l0.99,-0.22l1.89,0.9l1.02,-0.03l1.13,0.44l3.3,0.07l3.02,0.55l2.72,-0.24l5.34,0.82l0.96,0.37l2.24,2.07l1.85,0.32l1.15,1.07l2.73,1.63l2.56,0.85l1.99,-0.13l-0.13,2.0l1.51,0.81l2.29,5.05l0.18,1.08l3.31,3.2l0.69,1.92l6.41,-0.51l16.91,2.0l3.94,-0.98l8.21,1.13l3.03,0.12l1.08,0.31l2.26,2.49l1.52,0.61l6.88,1.38l4.74,2.27l5.67,-1.01l0.0,1.47l0.37,0.4l2.66,0.14l1.13,0.41l1.7,-1.31l11.66,-4.91l10.41,-1.41l3.86,0.28l4.94,-0.21l7.99,-3.04l4.65,-5.2l4.07,-1.44l1.61,-1.47l0.83,-0.18l0.58,-0.54l-0.07,-1.24l-0.79,-1.18l-2.28,-2.25l-0.82,-1.48l1.58,-3.99l1.88,-2.0l3.55,0.07l1.21,1.17l1.03,0.45l6.82,1.27l3.8,-2.14l2.62,-2.22l0.93,-1.63l1.11,-0.23l1.42,0.38l1.82,-0.11l4.12,-0.73l1.86,-1.53l2.09,-1.18l0.37,-0.81l-0.17,-0.73l0.97,-1.75l1.14,-1.01l0.39,-0.77l1.9,-0.8l3.64,0.23l0.44,-0.45l0.38,-1.65l2.28,0.62l2.45,-1.39l1.7,-0.45l3.01,0.22l0.98,-0.62l2.2,1.09l1.38,0.27l2.89,0.08l1.36,-0.66l0.42,-0.79l-0.01,-1.52l-0.83,-1.16l-0.58,-1.61l-1.47,-1.11l-1.85,-2.1l-0.88,-0.45l-0.64,-1.25l-2.39,-0.99l-1.95,-2.14l-2.92,-0.51l-2.87,0.4l-3.15,3.15l-1.88,-1.41l-2.46,-0.62l-1.86,0.29l-2.09,-0.18l-2.41,1.59l-1.87,-1.6l-0.37,-0.56l-0.2,-1.43l1.92,-1.29l0.24,-3.01l1.51,-1.96l4.75,-9.76l3.9,1.76l1.78,0.17l3.07,0.94l4.54,-3.28l2.18,-1.11l2.92,-0.5l1.09,-0.71l0.55,-1.02l0.15,-1.22l-0.37,-0.95l-0.7,-0.36l0.55,-1.35l1.21,-1.37l0.54,-1.66l1.7,-2.34l0.5,-1.58l1.13,-1.51l0.76,-1.79l4.55,-3.66l0.6,-1.37l-0.01,-1.26l-0.61,-1.07l0.23,-1.97l-0.32,-0.74l-1.34,-0.73l-2.61,0.11l-0.48,-0.19l-0.1,-0.51l4.76,-4.34l1.99,-1.08l3.13,-0.33l6.78,-1.67l1.46,0.26l1.76,-0.12l3.07,-0.78l3.35,0.02l3.91,1.85l0.58,-0.06l1.7,1.35l1.37,0.23l1.22,0.74l0.7,0.1l0.53,-0.55l0.9,-0.2l3.43,1.55l0.68,0.02l0.53,1.46l1.13,0.28l1.21,1.21l-0.23,1.29l1.31,0.91l1.03,1.41l1.33,4.47l1.4,2.18l0.09,1.43l0.69,0.57l0.23,1.91l0.73,2.23l2.84,3.84l0.26,1.27l-0.31,1.03l0.33,1.29l1.69,1.29l-0.63,2.16l0.49,1.84l1.34,1.43l2.23,1.04l1.9,0.12l3.44,-0.39l0.69,1.23l1.5,0.44l0.48,0.5l2.05,0.2l1.04,-0.33l0.28,0.55l1.11,0.51l2.6,2.84l1.28,0.86l2.66,0.35l0.27,0.48l-0.44,1.57l1.87,2.66l-0.63,1.79l0.12,1.26l0.95,1.05l0.8,2.01l0.48,0.35l2.6,-0.29l1.75,0.43l1.71,0.01l5.1,-0.34l0.97,-0.59l0.99,-1.59l1.3,-0.37l1.9,-1.17l2.51,0.05l2.79,-1.68l3.24,-0.92l1.8,0.44l0.68,0.74l-0.82,1.93l1.31,2.75l-1.38,1.91l-1.77,0.61l-1.07,1.16l0.13,1.79l-0.94,1.69l-0.37,2.24l-1.12,1.92l0.19,1.39l-0.26,1.0l-1.13,0.94l-0.42,1.75l-1.06,0.82l-0.49,2.38l-1.96,1.19l-0.56,1.69l-0.04,1.63l-0.95,0.67l-0.5,-0.19l-0.1,-0.71l-0.73,-0.85l-2.53,-0.96l-1.5,0.01l-1.59,0.8l-1.29,-0.76l-1.5,1.14l-1.57,2.05l-2.71,0.69l-0.86,0.69l-0.15,0.9l0.85,1.78l1.22,4.66l-0.58,3.36l0.06,1.87l0.53,0.57l0.03,0.49l-0.58,2.05l-0.7,1.11l-0.07,0.94l-4.14,1.05l-0.65,0.58l-0.03,0.7l-0.59,-0.73l-0.01,-1.18l-0.31,-0.41l-1.13,-0.73l-1.86,-0.14l-0.96,2.12l-0.46,2.74l-0.99,0.52l-0.82,-0.43l-1.06,0.26l-0.85,1.04l-0.2,0.87l-1.83,1.42l-4.49,0.11l-2.3,0.6l-0.07,1.14l1.87,2.53l-0.82,1.45l-0.79,-0.53l-2.49,0.07l-3.67,-0.8l-0.72,-1.27l-1.0,-0.87l-0.72,-0.04l-1.3,0.54l-1.1,0.89l-0.72,2.33l-3.69,4.02l-2.02,0.41l-2.24,1.77l-2.61,1.03l-0.65,0.71l-0.77,0.09l-3.8,3.18l-0.88,1.57l-1.07,0.65l-2.36,0.15l-0.71,-0.45l-0.52,0.08l-0.5,0.75l-1.65,0.2l-0.91,0.64l-1.3,0.1l-1.6,0.69l-3.78,2.06l-2.63,2.74l-0.86,0.47l-1.56,0.08l-0.33,0.43l0.11,0.72l-2.19,0.42l-0.92,0.53l-0.13,-0.29l-0.07,-0.57l4.01,-1.54l0.22,-0.52l-0.31,-0.79l1.22,-1.18l-0.06,-0.68l-0.47,-0.17l-3.25,0.2l-0.06,-0.93l1.74,-0.99l-0.29,-1.01l0.19,-0.48l2.16,-1.03l2.89,-3.56l0.71,-1.79l-1.18,-1.72l-1.96,-1.27l-0.15,-1.0l-0.5,-0.33l-0.86,1.13l-4.24,-0.41l-3.06,2.81l-2.15,3.11l-6.55,2.87l-1.62,1.4l-1.06,1.8l-0.29,1.35l-1.66,1.8l-2.61,0.05l-2.19,0.87l-0.95,-0.95l-1.18,-0.38l-1.31,0.31l-0.87,0.71l-1.75,3.93l0.04,0.86l0.74,1.75l0.99,1.17l1.99,1.17l3.96,0.77l1.87,-0.27l0.87,0.6l0.96,2.56l-0.66,0.56l-0.29,2.76l1.44,1.5l2.65,0.69l2.41,-0.26l1.17,-0.95l0.09,-0.91l3.1,-2.29l0.03,-0.55l2.97,-1.14l2.03,0.85l1.23,1.04l1.38,0.26l1.86,1.0l2.57,0.17l0.84,-0.7l0.59,0.59l1.26,0.44l1.79,-0.09l-0.29,0.5l0.08,0.95l-0.94,0.91l-0.01,0.5l0.48,0.56l-1.09,0.82l-1.15,-1.08l-1.81,-0.01l-6.7,3.02l-1.68,-0.21l-0.45,0.45l0.75,1.29l-0.79,-0.14l-0.62,0.55l-0.37,2.19l-1.61,0.56l-0.14,-1.17l-0.39,-0.27l-1.33,0.32l-0.74,0.8l0.02,0.46l0.97,1.03l-1.13,0.58l-0.68,1.11l-0.81,0.79l-1.15,0.53l-1.43,1.93l-0.66,0.44l-0.69,1.69l-1.07,1.0l-0.38,1.38l0.27,1.08l0.38,0.28l1.03,-0.01l1.65,1.37l2.88,1.15l2.1,1.34l1.78,5.33l2.69,5.12l0.01,3.15l1.12,0.84l2.52,1.12l0.31,0.31l0.11,1.46l0.69,0.76l1.93,1.05l0.68,1.25l0.04,0.49l-0.31,0.01l-3.09,-1.32l-2.66,-0.06l-1.4,-1.34l-2.11,-0.64l-3.93,1.47l0.15,0.72l1.17,0.25l2.43,-0.92l1.32,0.24l0.62,1.36l2.02,0.84l2.18,1.92l2.25,1.33l0.86,1.19l0.56,1.61l-3.15,0.91l-0.86,0.76l-2.29,1.14l-1.2,1.61l-2.92,-0.2l-1.6,0.91l-0.46,0.83l1.46,0.15l1.0,-0.36l1.22,1.3l2.19,-0.28l1.82,-1.1l1.07,0.13l2.4,2.39l2.18,0.81l-3.43,2.67l-0.11,0.47l0.43,0.23l1.38,-0.22l1.47,-0.89l-0.17,3.07l-1.0,-0.86l-1.54,0.12l-0.7,0.55l-0.3,0.5l0.27,0.6l1.37,0.93l-0.97,0.15l0.14,0.48l0.67,0.48l-1.27,1.36l0.88,2.44l-1.79,0.73l-0.3,-0.73l-1.02,-0.07l-0.61,0.52l-0.97,1.92l-1.31,0.12l-0.34,0.56l0.6,0.64l-1.69,2.36l0.04,1.5l-1.57,1.94l-0.86,0.57l-1.09,1.77l-0.4,1.67l-0.76,0.38l-0.45,-0.81l0.02,-0.72l-0.56,-0.43l-0.78,0.86l-0.61,-0.34l-0.62,0.35l0.39,1.4l1.15,0.72l0.58,1.26l-2.78,2.07l-2.21,-0.53l-0.42,0.18l0.03,0.46l1.09,1.3l1.33,0.19l1.18,-0.41l-0.7,2.87l0.55,1.27l-1.1,-0.57l-2.04,0.21l-0.33,0.69l0.86,1.11l-1.36,-0.12l-0.71,0.28l-0.47,0.66l0.03,1.46l-1.86,0.71l-0.31,0.44l0.55,0.71l-0.3,0.65l-2.35,0.26l-1.61,-0.4l-0.83,0.65l-0.15,0.55l-0.9,0.02l-0.35,0.45l0.13,0.53l0.5,0.44l0.87,0.1l0.09,0.53l-1.42,1.61l-0.81,0.11l-0.79,1.15l-1.32,0.28l-0.25,1.38l-0.67,-0.56l-1.52,1.02l-1.31,-0.48l-0.47,0.3l-0.34,1.39l-1.77,0.94l0.48,0.64l-1.03,0.52l-0.45,1.76l-1.73,-0.15l-0.55,0.62l-2.18,0.65l-1.7,-0.36l-0.59,0.23l-0.53,0.81l-2.2,-0.75l-2.07,1.04l-0.44,0.51l-0.39,-0.04l-0.21,-0.64l-0.71,-0.39l-0.84,0.55l-0.46,1.11l-1.09,-0.4l-0.68,0.36l-1.01,-0.14l-1.26,0.3l-2.13,-2.38l-0.23,-1.15l0.2,-0.62l-0.46,-0.57l-0.87,0.25l-0.56,0.37l-0.12,0.91l-0.62,0.17l-0.28,0.49l1.65,2.52l0.24,1.88l-0.75,0.82l-1.87,0.83l-0.33,-0.77l-0.67,-0.1l-0.7,0.91l-0.26,1.4l-1.03,-0.33l-1.55,1.19l-0.69,-0.45l-0.17,-0.81l-0.8,-0.23l-0.35,0.51l0.19,1.14l-0.28,0.19l-2.61,-0.83l-0.77,1.07l-0.81,0.08l-1.15,1.15l-1.48,0.18l-0.61,0.37l-2.15,-0.19l-0.49,0.72l-1.63,0.37l-1.41,1.26l-0.31,-0.01l-0.52,-0.93l-0.57,0.3l-0.23,1.14l-1.23,0.94l-0.45,1.17l0.53,0.96l1.17,0.14l-0.41,0.45l0.04,0.79l1.36,1.09l-0.39,0.78l-0.62,0.37l-1.52,0.22l-1.17,-0.21l0.5,-0.6l-0.12,-0.35l-0.9,-0.7l-0.38,-0.62l0.04,-0.8l-1.0,-1.46l0.15,-1.56l0.65,-1.38l1.11,-0.59l0.07,-0.82l-0.39,-0.44l-0.58,-0.02l-0.41,-0.47l-0.65,0.09l-0.66,-1.03l-0.75,-0.24l-0.42,0.45l0.13,0.95l-2.47,0.67l0.17,-0.72l-0.39,-0.5l-0.73,-0.33l-1.8,-0.04l-0.98,-0.95l0.02,-0.73l-0.49,-0.43l-0.85,-0.03l-0.41,0.4l0.28,1.81l-1.09,-0.56l-0.72,1.04l-1.76,0.38l-1.62,-1.11l-2.08,0.41l-0.94,-0.16l-0.4,-0.55l-1.64,-0.72l-0.67,-1.01l-2.21,-0.67l-0.05,-1.66l-0.85,-1.11l0.23,-1.03l0.85,-0.53l0.68,-1.22l-0.12,-0.55l-1.84,-1.05l-2.07,0.36l-0.61,-0.73l-1.03,-0.2l-1.55,0.41l-2.03,-1.1l-0.83,-1.24l-1.34,-0.95l-3.55,1.72l-0.4,0.52l-0.2,1.34l-0.59,0.51l-1.18,0.15l-1.14,0.75l-1.15,-0.81l-1.33,0.5l-0.71,1.62l-2.1,-1.83l-0.89,0.42l-0.34,0.84l-0.66,-0.95l-0.63,-0.28l-2.47,2.5l-0.96,-1.02l-2.81,-1.34l-0.72,0.28l-1.91,2.51l-0.8,-0.35l-1.25,0.29l-0.63,-0.68l-0.72,0.09l-1.52,2.27l0.6,2.11l0.99,1.28l-0.12,3.86l0.49,0.66l-0.21,0.19l-1.25,-0.61l-1.95,0.36l-0.72,-3.85l-0.68,-0.58l-2.1,0.82l-1.69,1.42l-1.7,-0.24l-1.38,0.2l-0.21,-1.14l-1.18,-0.84l0.08,-1.61l-0.3,-0.58l-2.69,-0.64l-2.81,-0.24l1.23,-2.56l0.32,-2.41l0.95,-1.33l-0.39,-0.85l-0.53,-0.32l-3.83,-0.86l0.06,-1.37l-0.58,-1.01l0.2,-0.92l-1.13,-2.02l1.18,-1.77l-0.43,-0.41l-1.68,0.35l-0.79,-0.3l-2.18,0.04l-1.61,0.4l-2.81,1.32l0.84,-1.22l0.22,-0.96l-0.41,-1.54l-0.9,-0.73l-0.01,-0.93l0.33,-0.93l1.19,-0.86l-0.14,-1.39l0.61,-1.38l0.71,0.03l0.73,-0.48l0.79,-1.13l0.31,-1.17l1.26,-0.02l1.09,-1.65l1.23,-0.37l0.32,-0.55l-0.67,-1.69l0.86,-0.76l0.43,-4.22l-0.66,-7.13l-1.8,-1.02l-0.57,0.17l-0.4,0.7l-1.44,-4.65l-1.61,-1.77l-0.96,-0.11l-0.91,-1.15l-1.37,0.09l-1.35,2.06l-1.61,-1.06l-0.9,0.21l-1.36,-0.21l-1.36,-0.76l-1.94,0.67l0.2,-0.69l1.76,-1.77l0.1,-0.45l-1.17,-2.46l-1.06,0.09l-1.05,0.71l-0.08,-0.57l1.44,-0.92l0.25,-0.5l-0.29,-0.57l-0.99,-0.04l-1.3,-1.5l-1.5,0.45l-2.8,1.52l-0.86,1.33l-4.2,-1.08l-0.75,-0.94l-0.89,-0.16l-2.52,1.41l-1.3,1.3l-0.57,0.11l-1.02,1.34l-1.01,0.57l-3.9,0.88l-1.06,1.91l-3.46,2.48l0.09,1.15l-1.65,0.89l-1.35,-0.09l-1.97,0.85l-2.08,-0.24l-0.06,-1.23l-2.85,-1.31l-0.73,0.08l-1.25,0.75l-2.26,-0.8l-2.52,-0.06l0.13,-0.91l-0.36,-0.43l-1.9,-0.49l-1.67,0.07l-3.31,1.99l-2.43,2.86l-0.47,0.99l-1.06,0.94l-0.36,0.83l-0.47,-0.95l0.7,-3.01l-0.46,-1.27l-1.45,-0.74l-3.94,1.17l-0.48,0.51l-1.46,-0.05l-1.76,0.57l-3.44,-0.17l-0.89,-0.71l-1.94,-0.74l-0.44,-0.54l-0.79,-0.17l-0.62,0.16l-0.51,1.14l-0.41,0.1l-1.18,-0.63l-0.68,-0.79l-0.42,-0.01l-0.64,0.58l-0.21,0.98l-0.87,-1.65l-1.27,-1.21l-4.14,-0.33l0.41,-1.76l-0.28,-0.52l-0.91,-0.15l-1.8,0.4l-4.06,-2.75l-1.11,-2.6l-1.55,-0.5l-2.33,0.75l-3.12,-3.41l-2.3,-0.61l-2.71,-2.08l-2.01,-1.02l-1.48,-2.22l-3.04,-0.5l-1.83,0.42l-1.42,2.12l-0.6,0.33l-0.93,-1.59l-2.82,-1.74l-2.92,-0.99l0.03,-1.27l-0.49,-0.51l-0.64,-0.03l-2.05,-1.46l-1.84,0.08l-1.16,-0.84l-2.21,-2.86l-0.78,-0.2l-0.62,0.71l-1.06,0.34l-0.1,-1.14l0.46,-0.91l-0.04,-0.48l-0.73,-0.9l0.3,-1.79l-1.83,-2.23l-0.67,-2.27l1.73,-0.24l0.39,0.91l1.42,1.02l1.21,-0.27l1.4,-1.33l-0.13,-3.73l-0.73,-0.85l0.2,-1.15l-2.48,-2.76l-0.55,-4.19l1.72,-1.52l0.09,-0.95l-0.44,-0.7l-1.95,-1.37l-2.81,-1.04l-1.98,-4.96l0.26,-1.64l-0.3,-0.58l-1.28,0.21l-0.77,-0.36l-2.5,0.16l-2.61,-0.64l-3.32,-1.46l-0.35,-0.26l-0.07,-0.79l-0.48,-0.35l-2.59,0.64l-0.62,-1.33l-1.12,-0.49l0.45,-0.83l0.03,-1.94l-0.34,-1.28l-0.81,-1.23l-1.46,-0.87l-1.58,0.1l-0.77,-1.56l-2.25,-0.65l-1.24,0.26l-1.4,-0.66l-1.17,0.05l-0.72,-0.59ZM784.71,123.62l0.4,0.07l0.21,0.23l-0.36,-0.13l-0.25,-0.17ZM723.42,232.07l-1.54,-0.41l-0.17,-0.27l0.52,0.01l1.19,0.67ZM716.28,217.72l0.89,0.27l0.35,0.57l1.35,0.76l-2.09,-1.02l-0.5,-0.58ZM715.46,247.46l0.02,-0.03l0.0,0.02l-0.02,0.01ZM704.67,268.77l-0.0,-0.09l0.08,-0.21l0.02,0.22l-0.1,0.07ZM704.8,268.19l-0.02,-0.24l-0.07,-0.11l0.19,0.14l-0.1,0.2ZM626.1,313.41l0.45,-0.31l1.5,-0.02l0.99,-0.61l1.85,0.16l1.43,-0.24l0.73,-0.47l0.93,0.1l0.73,0.49l0.25,-0.45l0.9,0.43l0.57,-0.36l0.13,-0.8l1.76,1.26l0.46,1.85l-1.34,0.72l-1.36,2.07l-0.57,1.05l-0.86,3.16l-2.89,1.77l-0.1,0.61l-1.5,0.17l-1.06,1.16l-1.01,0.2l-3.6,-1.12l-2.23,-1.17l-0.45,-2.39l0.16,-3.13l4.5,-3.46l0.1,-0.45l-0.47,-0.24Z\", \"name\": \"China\"}, \"AF\": {\"path\": \"M263.13,194.66l1.33,-0.91l1.1,-1.84l0.56,-2.35l-0.33,-1.15l0.64,-0.51l0.68,-2.24l2.02,1.52l2.71,-0.08l1.58,1.21l0.79,1.07l1.38,-0.62l1.85,-0.09l2.97,-1.9l0.83,-2.18l-0.38,-0.98l1.1,-0.05l4.17,-1.31l1.19,-0.03l0.71,-0.9l1.92,-0.94l1.23,-1.03l2.34,-6.82l1.81,-0.8l3.41,-0.11l1.57,-2.69l2.48,1.27l2.72,0.6l2.73,-0.22l1.64,0.29l0.86,0.78l1.11,0.31l1.4,-0.46l1.44,0.32l0.85,1.3l0.93,0.79l0.99,0.28l1.84,-0.67l0.82,-0.97l2.16,-1.04l1.07,-0.09l0.54,-0.51l2.73,1.92l1.42,-1.18l-0.1,-1.72l0.51,-0.98l2.24,-0.43l2.22,0.57l0.76,-0.4l0.65,-1.03l-0.33,-2.03l1.5,-1.31l1.47,-2.23l0.78,-0.67l0.88,-0.24l1.13,0.29l1.38,0.87l0.46,0.95l-0.35,1.35l0.2,1.16l0.51,0.18l1.53,-0.27l-1.09,6.68l0.76,2.5l0.5,0.96l0.78,0.52l1.31,-0.02l4.09,-2.44l2.19,-0.39l1.93,-2.11l3.52,-1.63l2.11,0.32l-0.71,0.81l0.06,0.5l1.16,0.37l3.23,-0.85l0.78,-0.74l3.04,0.38l-2.53,1.09l-0.19,0.6l0.87,0.8l-3.12,1.43l-1.91,-0.55l-8.59,0.51l-3.63,1.14l-2.93,2.3l-1.2,0.04l-2.87,2.67l-0.48,0.82l0.3,0.78l1.32,1.02l1.26,2.8l0.16,0.92l-0.39,1.09l0.52,0.89l-1.08,1.56l-1.15,0.81l-2.41,2.82l-0.1,0.83l0.86,1.05l-0.03,1.85l-0.18,0.37l-2.73,0.74l-2.35,-0.07l-2.43,-0.75l-1.31,0.69l-0.06,1.27l1.94,2.25l1.04,1.99l-0.09,0.34l-2.33,1.35l-2.61,0.41l-0.64,0.44l-0.88,3.06l-1.19,2.0l0.24,4.16l-0.58,0.69l-0.74,0.79l-1.38,0.76l-1.78,-1.33l-1.45,0.33l-2.07,-0.39l-1.26,1.1l-3.3,1.43l0.0,0.89l0.73,0.66l-0.53,0.31l-2.14,0.46l-1.14,-0.18l-0.79,-0.49l-1.68,0.34l-1.85,2.08l-1.41,0.83l-0.55,1.09l-0.47,1.65l0.12,2.44l-0.5,1.81l0.43,1.28l-0.65,0.55l-7.99,2.23l-4.32,-0.04l-1.96,0.48l-1.27,0.86l-3.88,-0.8l-8.12,0.73l-11.54,-3.48l6.64,-7.54l0.32,-2.24l-0.46,-1.86l-1.04,-1.1l-5.98,-0.83l-0.21,-2.89l0.3,-3.19l-1.99,-7.16l2.65,-3.31l-0.38,-0.57l-2.37,-0.37l-0.45,-0.7l0.29,-1.15l-0.29,-1.99l0.97,-1.49l1.66,-0.09l0.29,-0.64l-0.98,-1.34Z\", \"name\": \"Afghanistan\"}, \"IQ\": {\"path\": \"M125.37,172.77l1.95,-1.22l0.78,-0.94l1.16,0.37l1.24,-0.35l4.35,1.19l1.2,0.03l1.46,-0.77l0.5,0.07l0.44,0.53l0.09,1.72l0.79,0.56l2.58,-1.7l0.69,0.07l0.9,2.88l1.07,0.96l0.23,1.88l0.57,0.71l0.86,0.33l1.15,3.11l1.42,0.29l1.68,1.36l3.14,0.13l-1.41,0.56l-0.54,1.37l0.08,0.71l0.99,1.29l0.2,1.22l-1.54,0.83l-1.82,1.95l-0.25,1.77l-0.74,-0.06l-0.45,0.37l-0.45,1.3l0.76,1.82l-1.02,2.28l2.56,3.1l1.08,-0.0l-0.11,0.57l0.29,0.52l0.85,0.46l0.87,1.45l-0.48,1.1l0.35,1.36l2.11,0.33l5.49,3.81l1.79,0.29l1.01,2.18l2.3,2.86l-1.06,3.07l-0.02,3.42l0.38,0.4l2.1,0.09l0.03,3.94l1.72,1.49l0.78,0.29l0.81,2.06l-1.95,-0.76l-1.42,0.35l-2.08,-0.8l-2.62,0.13l-0.97,0.37l-0.93,0.76l-1.6,3.52l-2.66,3.43l-1.13,0.23l-12.17,-1.05l-19.68,-15.44l-12.8,-7.12l-8.45,-1.44l0.59,-0.87l-0.34,-0.89l-0.45,-0.25l-1.2,0.28l-0.2,-0.63l0.45,-0.55l-2.04,-7.04l14.03,-7.89l1.79,-0.45l0.56,-0.45l1.68,-3.13l0.16,-4.4l1.03,-3.03l-0.03,-1.6l-0.78,-2.18l0.35,-2.43l0.73,-0.93l2.85,-0.77l4.37,-4.38Z\", \"name\": \"Iraq\"}, \"JP\": {\"path\": \"M869.1,98.66l1.75,-0.84l3.26,3.32l3.55,4.25l6.71,5.04l2.54,0.27l2.9,1.4l1.9,0.2l1.33,-0.56l3.0,-2.78l-1.69,3.31l-0.21,1.25l1.8,4.23l1.68,0.42l-1.41,0.23l-3.12,1.57l-2.16,0.49l-3.23,-0.24l-1.9,0.92l-2.95,2.59l-1.18,1.68l-1.26,3.56l-5.13,-2.24l-4.91,-2.89l-3.56,0.24l-3.12,1.79l-1.8,-1.77l-2.05,-0.12l-1.27,1.37l-0.29,0.99l0.17,0.69l1.58,1.52l1.6,0.19l2.73,2.36l-1.19,0.22l-2.17,-0.56l-1.32,1.32l-0.75,1.34l-1.78,0.69l-0.46,-0.91l0.82,-3.12l-0.47,-1.54l-1.58,-1.77l0.18,-2.51l0.16,-0.42l2.41,-1.29l1.69,-1.6l0.38,-1.25l-0.63,-1.01l-0.05,-0.81l0.91,0.01l1.81,0.98l2.53,0.25l1.29,-0.2l0.83,-0.99l0.3,-1.08l-0.11,-2.27l1.83,-3.39l0.14,-2.29l0.75,-2.08l0.15,-2.27l-0.5,-2.16l-0.97,-1.91l0.52,-1.84ZM797.15,199.72l-2.57,-1.61l-2.21,0.27l-1.69,0.57l-1.02,-0.53l-1.02,0.12l-0.16,-1.76l0.63,-0.77l2.7,-0.24l1.86,-1.68l1.91,-0.98l3.04,-2.52l2.67,-2.39l0.63,-0.98l1.51,-0.69l2.29,-0.37l1.09,0.82l1.69,-0.43l2.79,0.03l1.83,-0.29l1.79,-0.74l3.12,-0.29l2.19,-0.7l0.26,0.06l-0.18,1.1l0.85,0.68l2.74,0.22l1.11,-0.42l2.39,-1.97l-0.57,-2.1l0.4,-0.94l2.14,-2.04l2.55,-3.28l0.45,-1.95l-0.2,-2.13l0.78,-1.34l3.05,-1.07l-1.26,1.28l-1.65,0.92l-0.36,0.67l0.73,1.13l0.3,1.76l0.95,0.6l1.0,0.19l1.03,-0.3l1.18,-1.46l6.0,-2.29l1.79,-1.56l1.26,-1.52l1.25,-2.38l2.64,-1.4l1.29,-1.28l0.94,-3.21l2.1,-3.3l0.85,-3.08l0.92,-1.59l0.24,-1.99l-0.07,-1.16l-0.49,-1.08l-0.5,-0.42l-0.89,-0.06l0.74,-0.65l0.81,-2.26l-0.66,-2.93l0.62,-0.94l1.24,-0.36l0.75,-0.77l0.52,-1.54l-0.08,-1.59l1.48,0.12l0.32,2.43l0.68,0.84l0.91,-0.09l0.69,-0.8l1.64,0.42l0.94,-1.16l0.28,-1.02l-0.12,-1.08l-0.8,-0.68l-2.52,0.82l0.41,-1.91l0.27,-0.42l2.22,1.27l1.07,-0.21l-0.29,2.18l0.24,3.4l0.32,1.16l1.4,1.26l1.05,1.5l1.42,4.28l-0.1,3.09l-0.56,2.58l-1.66,1.14l-0.97,2.0l-0.54,2.99l-2.66,0.62l-1.2,1.82l-0.27,1.84l0.81,4.19l-0.25,2.97l-0.22,0.85l-1.25,1.25l-0.55,1.12l-0.77,1.97l-0.42,2.39l0.41,1.75l1.51,2.46l-1.28,0.42l-1.4,1.32l-0.76,2.79l-3.37,2.17l0.16,-2.7l1.76,-1.96l0.18,-0.57l-0.98,-1.12l-0.81,-0.07l-0.86,0.22l-0.46,0.57l-0.11,0.87l-0.77,0.64l0.28,2.04l-1.35,-1.19l-1.76,0.18l-0.84,0.66l-0.47,1.16l-0.21,2.14l-1.23,1.57l-0.41,-0.3l0.29,-2.03l0.55,-0.31l0.08,-0.64l-1.53,-0.93l-1.49,0.44l-2.44,3.02l-0.4,0.92l-2.16,-0.39l-4.01,0.1l0.08,-0.5l-0.5,-0.63l-1.57,0.08l-0.59,-0.56l-0.49,0.08l0.01,-1.77l-1.08,-0.14l-1.03,0.73l-1.2,2.64l0.69,1.14l1.89,1.24l-0.11,0.44l-2.17,0.49l-1.78,0.83l-3.03,5.07l-1.4,0.53l-1.55,-0.48l-2.28,-3.54l-0.16,-2.19l1.06,-0.6l0.93,-1.05l0.29,-0.62l-0.14,-0.95l-0.68,-0.38l-2.31,0.19l-2.27,-1.13l-3.88,0.47l-2.11,1.59l-3.9,0.79l-2.17,1.03l-0.97,-0.18l-2.53,0.68l-1.6,-0.83l-1.15,0.19l-0.84,1.15l-0.63,2.77ZM865.75,100.56l-0.16,0.02l-0.34,-0.3l0.21,-0.05l0.29,0.33ZM852.34,128.05l-0.01,-0.06l0.07,-0.12l-0.06,0.17ZM843.87,165.83l0.27,-1.03l-0.54,-0.64l0.99,-1.22l-0.26,1.06l0.73,0.5l-0.33,0.78l-0.86,0.54ZM817.81,195.39l0.11,0.97l-0.91,0.42l-0.18,-0.21l0.98,-1.19ZM799.43,203.31l2.14,-1.59l1.03,-2.45l0.92,-0.71l1.41,1.39l3.48,-0.79l0.56,-0.72l0.01,-1.08l2.1,-0.96l0.82,-0.08l3.06,1.19l0.79,-0.04l0.42,2.93l-2.28,1.59l-1.02,1.44l-0.37,1.1l-1.12,-1.23l-0.91,-0.46l-2.01,-0.15l-2.79,1.49l-1.02,2.25l-0.9,0.74l-0.38,1.27l-0.61,0.55l-0.91,-0.13l0.24,-0.55l-0.3,-0.55l-1.28,-0.14l-0.37,-0.85l0.5,-1.92l-0.78,-0.48l0.04,-0.61l-0.46,-0.44ZM806.3,180.01l-0.4,0.05l-0.11,-0.36l0.22,-0.13l0.29,0.44ZM779.3,207.59l0.61,0.97l1.43,0.4l0.37,-0.57l-0.55,-1.19l-2.44,-2.04l0.11,-0.44l1.3,0.29l0.51,-0.3l-0.03,-0.87l1.56,-0.56l0.61,-0.58l1.53,-0.34l1.02,-1.74l1.24,-0.61l1.69,0.3l0.71,1.52l1.14,0.82l1.52,0.28l1.66,-0.66l0.51,0.26l0.05,0.4l-1.27,1.89l0.29,0.6l2.08,0.18l-0.1,0.69l0.71,0.75l-0.05,0.84l0.5,0.31l-1.93,2.27l-0.62,1.2l-1.5,4.83l-0.01,1.79l-0.79,1.89l-1.25,-0.29l-0.84,0.25l-0.28,0.85l0.34,0.72l-1.19,0.96l-0.58,0.29l0.35,-1.29l-0.62,-2.27l0.59,-0.38l0.08,-0.63l-0.47,-0.69l-1.31,0.06l-0.77,1.34l-0.24,1.11l0.7,1.77l-2.46,-0.77l-0.16,-0.39l0.94,-0.5l0.22,-1.32l-0.96,-1.54l0.01,-2.43l0.83,-0.31l0.6,-0.67l1.88,-3.4l-0.33,-0.56l-0.48,-0.05l0.3,-0.59l-0.17,-0.81l-1.26,-2.24l-1.27,-0.93l-1.28,0.67l0.23,2.45l0.36,0.37l0.9,-0.08l-0.06,0.75l-1.61,-0.78l-1.42,0.81l-1.2,-2.07ZM788.9,226.85l0.01,-0.11l0.07,-0.14l-0.02,0.14l-0.05,0.1ZM785.8,229.65l-0.74,0.03l-0.25,-0.58l0.36,-0.28l0.79,0.45l-0.17,0.38ZM781.9,213.3l-0.19,-0.64l0.25,-1.01l0.49,-0.07l0.06,1.08l-0.6,0.64ZM776.05,246.41l0.46,-0.51l1.07,-0.27l-0.66,0.48l-0.27,0.75l-0.59,-0.45ZM776.4,195.67l0.0,0.07l-0.02,-0.02l0.02,-0.04ZM776.72,194.79l0.02,-0.76l0.3,-0.22l0.03,0.45l-0.35,0.53ZM775.75,197.51l0.11,-0.75l0.18,0.13l-0.28,0.62ZM774.64,207.53l0.05,-0.12l0.05,0.07l-0.1,0.05ZM773.52,250.21l0.09,0.15l-0.02,0.05l-0.05,-0.02l-0.03,-0.18ZM771.75,209.72l0.65,-0.12l0.16,0.27l-0.66,0.42l-0.16,-0.58ZM764.44,262.78l0.09,0.4l-0.31,0.21l0.02,-0.29l0.2,-0.32ZM764.79,261.99l0.01,-0.59l0.25,-0.07l0.06,0.35l-0.31,0.3ZM766.32,260.11l-0.04,-0.54l0.94,0.06l-0.09,0.16l-0.81,0.33ZM767.58,259.28l0.76,-0.83l0.14,-0.26l-0.37,0.82l-0.53,0.27ZM737.71,277.3l0.12,0.01l0.12,-0.02l-0.11,0.13l-0.12,-0.12ZM734.91,277.92l0.11,-0.19l0.44,0.15l-0.29,0.11l-0.26,-0.06Z\", \"name\": \"Japan\"}, \"IR\": {\"path\": \"M137.98,152.91l1.82,0.03l0.6,-0.28l0.67,-2.32l0.59,-0.59l1.55,0.95l2.35,3.38l2.65,2.25l5.45,1.21l1.03,-0.36l1.99,-0.04l2.17,-2.07l1.11,-0.37l1.44,-1.36l4.32,-2.67l1.33,-0.27l2.06,2.03l-1.19,0.63l-0.3,0.88l0.19,0.73l1.15,0.75l0.06,0.33l-1.67,0.54l-0.47,0.49l0.0,0.74l2.41,2.2l0.82,0.23l1.45,1.6l1.81,-0.16l0.68,4.4l1.03,2.14l2.34,1.36l5.61,0.96l1.48,2.17l4.46,2.95l1.55,0.63l4.82,1.1l3.39,-0.06l10.69,-2.45l0.21,0.44l0.67,0.3l1.71,0.03l0.55,-0.35l0.21,-0.71l-0.72,-3.44l1.67,0.06l3.89,-1.22l0.54,-0.48l1.08,-2.26l3.46,-2.28l1.38,-0.39l4.89,0.22l0.66,-0.25l0.51,-1.1l2.06,-0.24l1.77,0.38l2.05,-0.02l0.63,0.56l0.52,1.51l4.7,1.24l2.54,1.59l3.86,-0.27l3.36,1.38l0.49,1.51l0.66,0.7l4.56,2.51l2.11,2.82l5.87,0.06l0.51,3.54l-0.43,1.67l0.74,1.14l-0.1,1.69l0.31,1.07l-0.64,1.6l-0.71,0.64l0.34,1.44l-0.5,1.97l-0.93,1.56l-1.67,1.22l0.81,1.48l-1.39,0.22l-1.2,1.82l0.15,4.16l1.31,0.92l1.52,0.1l-2.39,2.82l-0.07,0.91l2.0,6.8l-0.31,3.03l0.25,3.24l0.59,0.43l5.89,0.81l0.55,0.62l0.38,2.82l-0.16,0.53l-6.99,7.93l0.0,0.53l3.52,3.93l0.14,0.86l2.14,3.86l2.05,2.06l3.58,1.15l1.47,1.37l1.37,-0.01l-0.16,1.7l0.53,3.99l-0.38,2.1l0.61,0.45l0.9,0.12l1.9,-0.26l0.6,0.48l-0.4,0.47l0.03,1.5l-0.45,0.44l-0.12,1.22l-2.53,-0.02l-2.68,0.69l-1.06,0.62l-0.58,0.96l-0.53,-0.06l-2.39,1.21l-0.42,0.76l-0.4,2.49l-0.69,0.76l-0.48,4.16l-1.09,0.73l-5.32,-1.37l-0.4,-0.8l-0.83,-0.45l-1.11,0.94l-2.58,-0.53l-0.97,0.15l-2.07,-0.31l-1.4,-0.61l-2.88,0.49l-1.9,-1.09l-4.44,-0.29l-1.86,-0.74l-1.13,0.19l-0.55,-0.51l-2.79,-0.5l-0.83,-1.7l-0.06,-1.04l-0.7,-1.65l-0.54,-3.52l-1.01,-1.66l-1.57,-1.19l-2.93,-0.59l-1.84,0.47l-1.36,0.86l-2.28,0.55l-1.54,1.56l-1.04,-0.07l-3.01,1.85l-1.55,0.34l-3.03,-1.5l-1.33,-0.29l-2.66,0.07l-1.33,-0.91l-0.5,-0.81l-3.55,-1.61l-2.09,-1.4l-0.66,-1.36l-1.1,-1.09l-2.08,-0.8l-1.34,-0.91l-2.73,-0.17l-0.9,-0.43l-1.66,-1.66l-0.08,-0.75l-1.31,-2.27l-0.3,-1.86l-1.47,-1.22l-0.02,-1.62l-1.45,-0.7l-0.17,-2.14l-3.57,-4.08l-1.03,-2.45l-0.88,-0.06l-2.97,1.37l-3.63,-2.19l0.69,0.2l0.8,-0.36l0.15,-0.46l-0.39,-0.73l-1.84,-0.31l-0.29,0.69l-0.72,0.48l-0.21,0.77l0.19,1.5l-0.24,0.32l-1.22,0.16l-0.84,0.51l-0.58,-0.43l-0.21,-1.14l-0.59,-0.91l-2.27,-1.56l-0.03,-3.98l-0.38,-0.4l-2.1,-0.09l0.0,-2.84l1.05,-3.56l-2.38,-2.97l-1.03,-2.21l-0.83,-0.6l-1.27,0.02l-5.5,-3.8l-1.96,-0.28l0.44,-1.85l-1.0,-1.8l-0.91,-0.72l-0.27,-1.04l-1.1,-0.07l-2.2,-2.72l0.96,-1.89l-0.74,-1.81l0.4,-0.91l1.01,-0.19l0.31,-1.89l1.71,-1.83l1.74,-1.07l0.13,-0.86l-0.38,-1.15l-0.94,-1.18l0.13,-0.84l0.21,-0.37l1.58,-0.58l0.3,-0.49l-0.2,-0.48l-0.95,-0.45l-3.11,-0.08l-1.23,-1.19l-1.38,-0.31l-0.92,-2.84l-1.37,-0.93l-0.23,-1.89l-1.06,-0.97l-0.82,-2.74l0.21,-1.31l-1.65,-1.47l-0.19,-1.57l0.23,-0.78l-1.97,-1.48l-0.74,-0.13l1.74,-3.57l-0.44,-0.59l-0.74,-0.15l-0.16,-3.61l-0.8,-1.09l0.1,-1.67l-0.76,-0.8l-0.29,-1.01ZM225.11,258.62l0.64,-0.41l0.16,-0.69l0.73,0.1l1.56,-0.62l-1.41,1.46l-0.78,-0.16l-0.9,0.32Z\", \"name\": \"Iran\"}, \"AM\": {\"path\": \"M133.7,137.72l5.31,-0.87l4.6,0.01l0.35,-0.5l0.62,-0.08l0.81,0.74l-1.29,0.59l0.3,0.87l0.61,0.07l0.36,-0.45l2.27,0.69l1.11,1.07l-1.31,0.9l-0.18,1.02l1.58,2.09l2.78,1.54l-0.52,1.31l-1.74,0.0l-0.63,0.66l4.82,3.73l1.1,-0.1l0.87,0.4l-0.9,0.95l0.15,0.5l1.2,1.02l-0.8,0.03l-0.28,0.45l0.61,0.92l0.05,1.15l-2.11,0.32l-1.07,-2.31l0.02,-0.85l-1.37,-0.97l0.06,-1.45l-0.44,-0.43l-0.76,-0.06l-1.65,0.57l-1.24,-0.74l-0.65,-0.01l-0.29,-0.86l-0.79,-0.69l-1.99,0.45l-1.49,-1.5l-2.11,-1.4l-2.29,0.19l-1.95,-0.72l-0.84,-2.96l0.94,-1.34l0.1,-0.93l-0.76,-2.01l-1.14,-1.0Z\", \"name\": \"Armenia\"}, \"SY\": {\"path\": \"M76.3,209.24l0.78,-1.3l-0.28,-1.24l0.26,-0.62l-0.51,-1.46l0.2,-0.69l1.24,-1.34l-0.07,-0.47l-0.54,-0.44l0.11,-0.31l0.73,-0.65l2.14,-0.14l0.12,-0.49l-0.59,-0.51l1.79,-1.52l0.45,-1.13l-0.6,-1.78l-1.0,-0.69l0.39,-0.45l-0.39,-0.91l-0.84,-0.28l-0.58,0.38l-1.63,0.02l-0.56,-2.32l0.4,-2.21l-0.29,-1.85l-0.99,-1.32l0.72,-2.42l1.8,0.68l0.65,-1.04l1.15,-0.75l0.19,-1.28l1.65,-0.36l0.34,-0.34l-0.72,-2.03l0.63,-2.49l1.73,0.32l1.19,0.96l2.75,0.08l5.74,-2.21l1.65,0.3l2.47,1.47l4.61,0.11l4.99,-1.25l5.14,-2.33l4.7,0.24l4.18,-0.76l1.3,-0.43l0.93,-0.75l0.49,0.36l0.27,1.06l-1.9,1.93l-2.13,1.89l-2.86,0.78l-1.02,1.32l-0.39,2.74l0.81,2.35l0.01,1.26l-1.03,3.02l-0.16,4.36l-1.75,2.99l-1.84,0.48l-14.35,8.07l-14.53,8.74l-3.06,-0.53l-1.12,-0.87l-1.17,-0.34l-0.76,-1.06l-1.01,-0.56Z\", \"name\": \"Syria\"}, \"VN\": {\"path\": \"M576.93,298.51l-0.51,-1.64l-0.78,-0.54l-2.47,-2.91l1.98,-2.57l2.48,1.12l1.27,1.17l1.55,-0.8l1.17,-1.62l1.09,1.31l0.65,-0.23l0.5,-1.12l1.92,1.68l0.6,0.06l0.44,-0.27l0.57,-1.49l0.49,-0.28l1.54,0.77l1.39,-0.82l1.27,-0.19l0.96,-0.95l0.37,-1.53l2.86,-1.51l1.3,1.08l0.6,0.99l2.08,1.11l2.44,-0.29l0.92,0.86l2.07,-0.36l1.29,0.73l-0.37,0.74l-0.94,0.61l-0.37,1.51l0.14,0.59l0.74,0.75l0.07,2.04l2.56,0.79l0.53,0.89l0.93,0.65l0.72,0.11l0.48,0.65l1.26,0.24l2.14,-0.43l0.58,0.42l-3.39,1.7l-0.6,1.9l-1.14,0.67l-0.66,-0.37l-1.43,0.37l-1.44,-0.38l-0.4,0.33l0.48,2.03l-1.38,1.48l0.04,1.26l-0.31,0.6l-2.5,2.19l-0.82,0.09l-0.73,0.54l-1.27,2.74l-0.21,2.38l-1.13,1.84l-0.08,0.98l2.05,3.67l4.39,4.08l-0.15,1.1l-0.77,0.02l0.12,0.62l1.13,0.7l1.67,2.29l2.79,2.32l0.58,1.32l2.52,1.78l2.47,2.7l1.33,-0.09l1.66,1.84l2.36,3.76l1.82,1.62l0.84,2.77l1.06,2.16l0.03,1.23l1.48,4.85l-0.3,0.38l0.19,4.34l1.14,2.62l-0.02,1.22l-0.47,-0.11l-0.95,0.87l0.34,1.63l-0.52,0.39l0.13,2.81l-0.5,1.52l0.29,0.85l-0.32,0.62l-0.86,0.38l-0.33,1.65l-1.2,0.23l-3.99,2.79l-1.28,0.28l-0.85,1.36l-1.1,0.17l-4.12,2.16l-1.15,-0.64l-0.46,-1.04l-0.71,-0.02l-0.4,1.85l-1.03,-0.97l-0.51,-0.09l-0.91,0.54l-0.19,0.4l0.3,0.33l0.82,0.08l0.14,0.43l-1.8,-0.07l-0.52,0.39l0.22,0.41l2.1,0.89l-0.78,0.82l-0.25,0.82l-3.09,-2.61l-0.52,-0.02l-0.09,0.51l0.35,0.6l2.45,2.47l0.4,0.99l-0.92,0.37l-3.22,-2.94l-0.84,-0.39l-0.48,0.13l0.02,0.49l2.41,3.01l0.28,0.55l-0.16,0.45l-4.87,2.23l-1.49,2.3l-1.45,1.2l-1.48,0.31l0.36,-0.57l-0.07,-0.58l-0.42,-0.3l0.2,-5.8l0.38,-1.4l1.47,-0.88l-0.07,-0.82l-0.63,-0.81l-1.13,-0.38l-0.44,-0.54l-1.28,0.05l-1.11,-1.3l0.48,-0.48l2.26,-0.26l1.53,-1.37l-0.09,-1.32l1.55,0.42l0.51,-0.11l0.48,-0.65l2.3,-0.3l0.84,0.96l0.69,-0.1l1.72,0.63l0.4,-0.5l-0.03,-1.85l-2.26,-1.96l-0.13,-2.15l0.54,-0.17l0.52,-0.66l2.19,0.55l0.8,-0.12l0.28,-1.97l1.77,-0.16l0.63,-0.58l1.29,-0.26l2.0,-1.65l0.57,-0.1l0.87,0.38l0.99,-0.95l0.4,-1.53l-0.59,-3.65l0.97,-3.21l-2.04,-5.21l0.23,-1.67l0.6,-0.64l0.66,-1.54l-0.36,-2.67l1.06,-1.4l0.15,-0.9l-0.78,-1.17l-2.07,-1.68l-0.7,-1.11l1.52,-0.9l0.14,-1.1l-3.61,-2.58l-0.66,-1.29l-1.33,0.28l-0.77,-1.14l-0.47,-2.49l-1.68,-1.97l-2.01,-1.57l-2.31,-2.43l-0.76,-1.89l-0.98,-1.33l-1.09,-0.41l-1.47,-1.51l0.18,-1.98l-3.34,-1.26l-4.49,-3.01l-1.41,-0.59l1.2,-1.11l-0.22,-1.32l1.3,-0.05l2.58,0.51l1.41,-1.22l1.32,-1.98l0.14,-0.79l-0.44,-0.98l-0.67,-0.44l-0.82,0.04l-0.47,-1.14l-1.38,-0.48l1.04,-0.77l0.02,-0.94l-1.79,-1.39l-1.94,-1.01l-1.95,0.68l-1.62,1.22l-3.75,-1.41l-1.74,-2.66l0.78,-2.71l-0.18,-0.78l-1.48,-1.06l-0.68,1.05ZM612.85,302.64l0.02,-0.06l0.03,0.02l-0.05,0.04ZM586.24,386.06l0.57,-0.22l-0.01,1.11l-0.18,-0.47l-0.38,-0.42Z\", \"name\": \"Vietnam\"}, \"GE\": {\"path\": \"M119.33,133.54l1.55,-2.34l0.06,-1.52l-2.13,-6.46l-0.7,-0.85l-2.04,-0.77l-0.55,-0.94l-1.69,-1.2l-2.83,-0.77l-3.29,-2.29l0.5,-0.74l2.93,0.42l1.01,-0.17l3.16,1.41l2.05,0.38l1.79,1.06l3.52,0.26l2.68,-0.31l1.23,0.63l1.39,-0.12l1.41,0.57l0.93,1.03l5.02,2.11l-0.32,1.13l0.82,0.54l1.12,0.07l4.19,-1.65l1.05,0.25l0.55,0.78l0.68,-0.05l0.49,-0.97l1.9,0.63l1.55,1.34l2.19,0.09l0.23,0.11l-0.65,2.11l0.22,0.56l2.45,1.57l1.94,0.42l1.21,0.63l-0.59,0.69l-0.95,0.41l-0.11,1.25l1.02,1.29l2.55,1.75l-0.26,0.81l-0.91,0.61l-1.98,-1.08l-1.24,0.22l-1.58,-0.46l-0.45,-0.31l-0.17,-0.72l-3.31,-1.02l-2.5,1.54l-1.15,0.15l-0.35,0.43l-4.03,-0.02l-3.27,0.74l-2.21,0.14l-0.49,-0.52l-1.43,-0.2l-0.32,-0.87l-3.2,-2.55l-1.35,0.05l-0.97,1.16l-3.92,-0.47l-0.86,0.54l-1.57,-0.52Z\", \"name\": \"Georgia\"}, \"IL\": {\"path\": \"M66.48,219.04l1.37,-2.38l3.17,-9.66l2.15,0.04l0.79,-0.61l0.24,-0.89l0.53,-0.01l1.02,-0.76l0.48,1.35l-0.25,0.5l0.28,1.14l-0.8,1.43l-1.61,0.91l-0.2,1.83l-0.83,-0.82l-1.7,-0.23l-1.12,0.8l-0.83,2.52l0.04,3.07l0.41,0.3l1.09,0.02l-1.48,1.09l-0.64,2.32l0.63,0.44l1.45,-0.12l2.1,-0.83l-0.28,1.47l0.26,0.89l-2.2,5.75l-0.02,2.36l-1.23,4.69l-4.6,-13.31l1.92,-2.46l-0.14,-0.82Z\", \"name\": \"Israel\"}, \"IN\": {\"path\": \"M322.9,278.6l0.38,0.21l5.32,-0.07l1.27,0.8l1.68,0.01l0.94,-0.3l0.53,-0.69l2.75,-0.92l0.43,1.03l1.13,0.35l2.74,-1.35l0.18,-0.55l-0.52,-0.57l-0.04,-0.58l0.56,-1.05l-1.29,-3.03l-1.64,-2.78l-0.04,-1.94l-0.86,-0.61l-2.16,0.04l-1.11,-1.47l-0.14,-1.05l0.41,-1.17l0.1,-2.48l-0.84,-0.83l-2.48,-0.42l-1.61,-0.88l0.35,-2.6l2.65,-2.76l1.84,-3.01l1.72,-1.27l1.22,0.52l0.56,1.44l1.1,0.59l2.99,-1.0l2.67,-0.31l2.47,-0.76l0.79,-1.89l1.73,-2.0l1.14,-2.58l4.28,-2.34l2.48,-4.31l1.09,-3.03l3.16,-1.31l0.98,-1.11l-0.21,-1.77l3.1,-3.58l2.24,-1.23l-0.01,-1.1l-0.66,-0.51l0.54,-2.18l-0.6,-2.16l0.25,-0.62l1.24,-0.97l3.79,-1.56l0.7,-0.74l0.09,-1.02l-0.92,-0.91l-1.85,-0.75l-2.18,-0.23l-0.22,-2.22l-2.33,-0.13l-0.3,-1.78l-1.32,-0.69l-0.82,-0.85l0.89,-1.3l0.26,-1.1l-1.3,-1.79l0.56,-0.69l1.19,-0.57l0.31,-0.72l-0.28,-0.71l-2.31,-0.44l0.48,-0.63l0.03,-0.68l-1.31,-1.12l1.1,-2.01l2.31,-0.86l4.75,0.99l1.75,0.07l1.98,0.85l2.17,0.26l2.44,-1.38l1.0,-0.01l2.0,-0.7l1.22,0.1l0.88,-0.54l0.56,-0.86l1.6,-0.77l0.5,-1.08l5.25,-3.06l0.64,0.29l0.82,-0.26l-0.18,1.74l2.41,5.55l2.69,0.85l2.04,1.59l-0.17,0.52l-1.42,0.96l-0.24,0.93l0.64,4.48l2.39,2.53l-0.22,1.03l0.75,0.99l0.1,3.18l-0.99,0.98l-0.73,0.16l-0.9,-0.75l-0.54,-1.09l-0.42,-0.13l-2.1,0.32l-0.52,0.68l0.83,2.72l1.35,1.61l-0.09,0.54l0.34,0.47l-0.15,1.2l0.72,1.02l-0.45,1.05l0.16,1.56l0.34,0.35l0.83,0.02l1.28,-0.47l0.37,-0.43l1.67,2.36l1.26,1.02l0.84,0.43l1.54,-0.15l2.02,1.45l0.71,0.09l-0.05,1.4l0.35,0.35l3.03,0.96l2.35,1.5l-2.46,1.88l-1.66,1.96l-1.12,2.54l-0.17,1.84l-1.11,1.66l-0.1,1.64l2.76,1.95l0.62,0.12l0.69,-0.39l4.26,2.5l1.1,1.3l4.1,2.53l1.21,-0.31l3.26,1.89l1.59,-0.04l0.61,1.31l4.11,1.18l1.39,-0.72l2.72,0.69l2.05,-0.86l3.61,1.43l0.49,1.96l3.51,1.64l0.5,0.74l1.03,0.2l2.34,-0.71l0.48,1.29l0.77,0.54l1.62,-0.34l2.57,0.56l2.67,1.13l2.21,-0.87l0.46,0.84l1.56,0.62l1.12,-0.47l1.56,0.17l1.58,-0.3l1.31,0.4l0.67,-0.62l0.82,-2.52l-0.4,-1.75l-0.92,-1.53l0.29,-2.13l0.92,-2.77l0.03,-0.85l-0.34,-0.44l2.12,-0.51l1.16,-0.64l1.2,0.53l0.28,0.95l-0.73,2.81l0.22,0.95l0.65,0.67l-0.76,0.6l-0.14,0.72l1.05,1.87l2.18,1.17l1.5,-0.2l1.71,0.47l0.4,0.55l1.23,0.14l2.71,-0.43l0.77,-0.78l0.82,-0.28l1.5,0.71l1.43,0.22l4.09,-0.15l1.16,-0.6l0.6,0.46l1.15,0.04l2.62,-0.46l0.58,-0.34l0.23,-0.55l-0.59,-1.48l0.63,-1.69l-0.97,-1.51l-1.82,0.06l-0.5,-0.33l-0.44,-0.65l0.28,-0.8l2.3,0.24l1.06,-0.64l2.23,-0.13l1.16,-0.49l1.04,-0.73l0.18,-1.47l2.52,-1.5l0.73,-0.75l0.82,-1.63l3.81,-0.83l1.13,-0.65l0.98,-1.24l0.63,-0.2l1.29,-1.3l2.31,-1.27l0.96,1.07l4.73,1.13l1.16,-0.99l0.17,-0.56l3.46,-1.75l1.52,1.58l-1.24,1.01l0.31,1.59l0.61,0.08l1.68,-1.02l0.74,1.78l-1.74,1.79l-0.44,1.09l0.18,0.4l1.05,0.43l1.61,-0.73l1.24,0.74l1.5,0.23l0.76,-0.22l1.42,0.99l0.16,1.89l-2.66,1.8l-0.78,1.08l0.23,1.55l1.41,2.08l-0.95,-0.48l-0.57,-0.88l-0.78,-0.46l-4.19,0.57l-1.17,0.47l-1.14,1.34l-3.26,2.32l-2.65,1.43l-0.51,0.98l-0.11,1.18l0.58,2.4l-0.76,0.85l-0.54,1.73l-1.12,1.36l-0.94,0.54l-0.72,1.21l-0.19,1.18l1.11,1.09l-0.87,2.1l-2.18,3.55l-1.16,3.34l-2.89,-1.02l-1.55,0.22l-0.79,-0.68l-0.86,0.21l-0.16,0.59l0.79,2.67l-0.36,4.18l-0.29,0.55l-0.89,-0.06l-0.42,0.54l0.05,0.78l-0.61,1.6l0.57,3.58l-0.72,0.29l-0.7,1.4l-1.45,-1.11l-0.57,0.22l-0.23,0.52l-0.5,-4.73l-0.99,-2.06l-0.2,-3.04l-0.66,-2.83l-1.11,-0.62l-1.71,0.29l-0.35,0.4l0.05,1.35l-1.33,1.63l0.0,1.78l-0.68,0.4l-0.43,-0.23l-0.76,-1.47l-0.87,0.09l-0.91,-2.82l0.47,-2.4l0.92,-1.22l1.06,0.04l1.44,-0.89l1.27,0.01l0.59,-1.27l1.19,-0.51l1.03,-3.6l1.2,0.25l0.62,-0.44l-0.19,-1.02l-2.02,-1.36l-1.38,-0.52l-12.03,0.09l-4.39,-1.08l0.12,-4.95l-1.2,-2.28l-0.97,-0.04l-0.36,0.44l-0.14,1.2l-0.96,-0.05l-1.22,-0.71l-0.47,-0.63l-0.34,-1.43l-0.48,-0.42l-1.07,0.08l-0.22,0.73l0.2,0.33l-0.52,0.04l-0.76,-0.22l-0.54,-1.04l-0.89,-0.81l-1.01,-0.48l-0.67,0.31l-0.15,0.89l0.69,0.62l-2.11,2.2l-0.56,2.02l0.59,0.77l0.85,0.23l0.71,0.63l1.1,1.34l0.92,0.42l1.12,0.03l0.31,0.89l0.81,0.56l-1.06,0.32l-2.19,-0.15l-0.38,0.27l-0.89,2.16l-0.8,-0.29l-0.59,0.27l-0.98,2.39l1.18,1.58l1.15,0.1l0.7,0.65l2.25,0.79l-0.21,1.8l-0.98,2.86l1.24,1.83l-0.23,0.96l0.19,0.58l1.36,0.51l-0.45,1.06l0.55,3.31l0.94,2.74l-0.12,2.18l-0.58,0.61l0.67,1.68l-0.38,-0.01l-0.68,-0.76l-0.73,1.06l0.28,-2.83l-1.13,-1.2l-0.38,0.3l-0.56,2.28l0.19,1.14l-0.63,0.22l-1.33,-1.07l-0.47,1.03l-0.53,-0.06l-0.19,-0.18l0.97,-3.34l-2.42,-2.28l-0.28,0.45l0.15,0.94l1.34,1.05l-1.35,2.0l-1.85,1.23l-4.35,1.21l-1.97,2.2l-0.18,1.39l0.89,3.07l-1.45,1.96l-0.07,0.76l-1.77,1.04l-0.81,1.11l-0.9,-0.24l-0.28,0.68l0.35,0.38l-0.41,0.19l-4.39,1.43l-0.28,-1.19l-0.79,-0.25l-1.88,1.14l-0.76,1.19l0.01,0.43l0.52,0.37l-3.38,2.95l-0.65,1.3l-4.35,5.15l-3.35,1.73l-3.41,3.56l-4.46,2.54l-1.82,1.41l-0.7,1.18l0.53,1.54l-0.64,1.44l-3.49,1.65l-2.6,-0.26l-1.0,0.23l-0.64,0.82l-0.76,2.21l-1.11,1.39l-0.62,-0.14l-0.45,-0.67l-1.08,-0.23l-2.16,0.81l-0.81,0.71l-1.53,3.09l-0.39,2.01l0.93,4.64l-0.49,2.1l0.99,3.49l-0.57,-0.03l-0.71,0.82l-0.03,0.48l2.01,1.74l-0.82,4.92l-0.62,1.73l-2.16,3.59l-0.79,3.19l0.26,0.98l-0.61,0.79l-0.06,0.48l0.93,0.07l0.18,0.65l-0.07,6.26l-1.97,-0.13l-1.06,0.18l-0.82,0.53l-0.53,0.87l0.03,0.92l-2.37,3.6l-0.11,1.12l0.64,0.82l-4.13,1.22l-1.23,0.94l-0.76,0.97l-0.5,2.85l-0.41,0.79l-2.04,1.38l-1.79,0.76l-1.36,-0.42l-1.69,-1.23l-3.75,-4.35l-1.66,-4.01l0.77,-0.17l0.23,-0.48l-0.84,-2.92l-1.12,-1.22l-0.01,-0.98l-2.05,-4.35l-1.49,-4.39l-1.57,-2.72l-2.42,-2.65l-1.84,-3.76l-1.3,-3.86l-0.75,-4.53l-1.29,-2.91l-0.9,-3.48l-3.22,-4.41l-0.58,-1.89l0.38,-0.67l-0.96,-1.15l0.25,-0.36l-0.34,-0.63l-0.8,-0.21l-1.49,-2.59l-1.02,-3.05l-1.38,-9.0l-1.2,-3.62l-0.89,-4.27l0.97,-2.9l-0.6,-1.33l-0.85,1.12l-0.06,-0.21l-0.03,-1.21l0.96,0.12l0.44,-0.29l-0.22,-0.47l-1.36,-0.6l0.04,-1.22l-0.43,-0.36l-0.4,-1.77l1.68,-6.59l-0.61,-3.55l-0.95,-0.59l-0.4,-1.19l0.62,-0.56l0.12,-0.49l-0.26,-0.13l2.93,-1.55l0.16,-0.51l-0.5,-0.21l-1.93,0.47l-1.69,-0.06l0.22,-0.85l0.82,-1.06l-1.25,-0.23l0.14,-0.86l1.66,-0.45l0.29,-0.38l-0.29,-0.39l-1.7,-0.37l-1.07,0.22l-2.04,-0.16l-0.39,0.32l0.86,0.84l-0.16,0.52l-1.7,1.97l0.13,0.63l0.93,0.36l0.47,0.66l-0.02,0.8l-1.63,2.72l-7.28,3.2l-2.07,-0.01l-1.67,-0.74l-3.29,-2.58l-2.17,-2.59l-4.15,-3.8l-1.53,-2.11l0.29,-0.67l1.05,0.94l0.71,0.17l1.95,-0.92l0.69,0.03l0.69,-0.46l0.75,0.03l1.32,-0.72l1.25,-0.2l2.15,-3.21l0.45,-0.21l0.23,-0.4l-0.21,-0.79l-0.88,-0.15l-0.75,1.0l-1.63,0.03l-3.3,1.46l-3.07,-0.68l-3.05,-1.58l-1.24,-1.01l-1.52,-2.74l2.46,-1.91l0.13,-0.51l-0.49,-0.2l-1.04,0.36l-2.61,1.58l-0.36,-1.42l1.25,-0.53l2.48,-0.1l0.41,-0.39l0.03,-2.19ZM510.38,409.89l0.46,1.53l-0.26,0.91l-0.96,-1.53l0.07,-0.64l0.69,-0.26ZM502.0,376.41l-0.73,-2.04l0.46,-0.43l0.48,-1.76l0.55,-0.06l-0.74,1.46l0.36,0.73l-0.38,2.09ZM502.93,370.91l-0.34,-0.32l0.01,-1.24l0.16,-1.82l0.51,-0.85l0.37,0.44l0.17,2.11l-0.94,0.92l0.06,0.77ZM503.37,365.59l0.26,-2.41l0.75,-0.98l-0.3,1.27l0.32,0.54l-1.03,1.58ZM500.23,384.16l-0.24,-0.02l-0.13,-1.21l0.57,-0.59l0.25,0.86l-0.45,0.96Z\", \"name\": \"India\"}, \"AZ\": {\"path\": \"M146.29,137.61l0.31,-0.42l-0.14,-0.46l-1.19,-0.85l1.66,-1.14l2.69,0.83l0.36,0.77l1.56,0.71l0.87,0.19l1.08,-0.25l2.09,1.1l0.96,-0.25l0.8,-0.8l0.28,-1.52l-2.74,-1.99l-0.84,-1.11l0.05,-0.36l0.72,-0.2l0.89,-1.05l0.62,0.68l1.35,-0.09l2.92,2.63l0.77,1.61l0.58,0.49l3.73,0.81l0.9,-0.29l1.4,-2.1l2.48,-1.29l1.21,-1.93l3.16,3.87l1.28,3.05l1.8,2.12l2.06,1.78l3.01,0.66l1.38,1.34l-2.81,-0.15l-3.0,1.27l-0.6,1.06l-1.13,4.18l0.28,2.16l-0.7,0.7l-0.48,1.73l-0.85,-0.64l-0.9,0.58l-0.89,2.3l0.09,3.19l-1.31,0.29l-1.44,-1.56l-0.89,-0.28l-0.7,-0.92l-1.38,-0.93l1.64,-0.6l0.54,-0.51l-0.11,-1.04l-1.24,-1.09l1.48,-1.09l0.08,-0.54l-2.77,-2.68l-1.81,0.33l-2.3,1.36l-2.2,1.41l-1.46,1.36l-1.09,0.35l-2.04,1.96l-0.32,-1.72l0.88,-0.3l0.06,-0.59l-1.44,-1.33l0.73,-0.52l0.03,-0.84l-1.43,-0.86l-0.97,0.13l-3.58,-2.86l1.32,-0.16l0.78,-1.51l0.01,-0.7l-3.09,-1.91l-0.78,-0.93l0.78,-0.43l-0.1,-0.73l-0.66,-0.19l0.95,-0.7l-0.04,-0.82l-1.37,-1.31l-1.8,-0.5ZM148.08,141.25l-0.07,0.14l0.0,-0.02l0.07,-0.12ZM143.77,150.11l1.2,-0.38l0.53,0.63l0.19,0.87l0.88,0.02l1.49,0.8l2.24,-0.57l-0.06,1.5l1.4,1.03l-0.08,0.63l0.93,1.93l-3.87,-0.93l-2.44,-2.08l-2.4,-3.44Z\", \"name\": \"Azerbaijan\"}, \"ID\": {\"path\": \"M789.33,474.14l1.38,-1.54l0.5,-1.3l-0.0,-0.92l3.92,-1.03l2.44,-1.87l1.87,-0.69l3.25,0.45l4.58,2.3l3.81,0.16l0.65,0.47l-0.17,1.23l1.36,2.55l-1.13,2.76l0.68,4.46l2.0,3.96l0.4,0.23l0.59,-1.18l-0.04,-0.97l0.35,-0.17l0.49,2.77l0.33,0.3l0.81,0.01l0.32,1.91l1.81,1.2l2.12,0.2l1.17,-0.34l2.83,-2.66l1.11,-1.9l1.81,-1.25l0.97,-2.14l3.21,-0.53l1.82,-0.72l0.99,-0.93l-0.34,-1.22l4.78,-2.47l6.06,2.27l1.21,0.95l7.33,3.23l2.8,0.05l0.74,0.46l2.75,0.25l1.04,1.22l1.3,0.02l0.01,27.59l-0.84,2.98l0.84,1.43l0.01,15.75l-2.99,-3.29l-3.59,-3.15l0.9,-1.62l-0.14,-0.51l-0.53,0.08l-1.2,1.2l-3.92,0.65l-1.0,-1.54l-2.46,2.02l0.42,-1.96l0.52,-0.65l0.64,-1.89l-0.34,-0.77l-0.85,-0.46l-1.09,-1.32l1.83,0.12l0.86,-0.28l0.27,-0.48l-2.71,-0.68l-1.41,-1.08l1.45,-0.24l0.25,-0.65l-3.14,-3.8l-1.0,-2.81l0.55,-0.88l-1.13,-0.38l0.86,-0.89l-0.44,-0.28l-1.59,0.29l-0.05,-1.54l-2.46,-1.85l-3.26,-1.75l-0.15,-0.38l-0.61,-0.18l-0.32,0.21l-0.69,-0.41l-3.54,-0.8l-4.86,-2.18l-3.99,-0.66l-1.85,0.06l-3.13,-1.82l-0.43,-0.67l0.08,-0.46l1.09,-0.1l0.36,-0.39l-0.35,-0.4l-1.06,-0.12l-1.47,0.42l-1.05,-0.47l-1.01,0.18l-1.02,-1.07l-1.09,0.17l-1.99,-2.23l0.11,-1.47l1.05,-1.42l-0.28,-0.61l-0.83,-0.02l-0.83,0.78l-0.2,1.78l-0.6,0.13l-0.41,0.49l0.16,0.67l-0.93,1.58l-0.06,1.1l-0.99,1.07l-2.04,0.03l-1.03,-2.27l0.81,-1.34l-0.94,-2.03l-3.11,-2.49l-2.21,-0.48l-0.28,-0.36l1.45,-0.65l3.86,0.73l2.32,-2.25l0.92,-0.29l2.94,0.8l0.71,0.55l0.57,-0.31l0.3,-1.04l1.11,-0.47l0.09,-0.97l-0.4,-0.37l0.57,-1.11l-0.55,-0.38l-1.54,0.64l-3.61,0.19l-1.92,0.42l-3.32,-0.4l-1.43,0.17l-1.92,-1.74l-0.62,-2.99l-0.39,-0.38l-1.41,-0.13l-3.25,-1.1l-1.9,0.36ZM839.2,526.43l1.24,-2.99l1.27,-2.13l1.22,-1.0l2.52,-0.81l1.51,0.07l1.22,1.28l0.14,0.58l-1.4,2.52l-1.81,1.56l-1.64,0.91l-4.26,0.02ZM846.09,526.2l0.98,-0.72l0.56,0.91l-1.54,-0.19ZM825.18,476.4l2.6,0.11l1.48,0.5l2.3,0.09l-3.37,0.37l-3.0,-1.07ZM822.33,469.12l1.47,0.16l0.45,0.26l-0.52,0.3l-1.4,-0.73ZM824.31,469.56l1.05,-0.04l3.09,2.59l-1.2,0.32l-1.42,-0.3l-1.0,-2.39l-0.52,-0.18ZM818.29,471.77l-0.21,-0.04l-0.17,-0.42l0.16,-0.02l0.22,0.48ZM813.05,509.18l0.58,0.0l0.41,-0.43l0.29,-1.17l-0.44,-0.67l1.84,-2.07l0.83,1.72l-0.21,1.93l0.3,1.44l-0.27,0.81l-0.38,0.3l-1.15,-0.18l-1.79,-1.67ZM812.51,512.73l0.68,-0.38l-0.5,-0.69l-0.07,-1.13l2.32,1.74l-1.23,2.35l-0.79,0.47l-0.67,-0.65l0.27,-1.71ZM801.88,507.73l-0.08,-0.13l0.08,-0.65l0.16,0.53l-0.16,0.25ZM791.1,523.43l-0.89,-0.08l-0.19,-0.61l0.31,-1.04l0.85,-1.69l0.66,-0.35l1.27,-1.43l0.18,-0.61l0.39,-0.12l0.2,0.11l-0.55,0.73l0.32,1.17l-0.44,1.23l-1.78,1.74l-0.35,0.94ZM785.68,465.9l-0.54,-0.57l-1.3,-0.15l0.15,-0.41l1.73,-0.18l0.72,0.99l-0.75,0.32ZM787.02,466.29l0.59,0.08l0.14,0.13l-0.57,0.11l-0.15,-0.32ZM787.04,464.3l2.01,0.13l1.67,0.73l0.19,0.68l-0.29,0.25l-0.91,-0.29l-0.96,0.12l-1.72,-1.62ZM789.08,524.99l0.05,-0.05l0.02,0.01l-0.07,0.04ZM786.92,471.18l1.16,-0.36l0.96,0.27l-0.49,2.26l-0.95,-0.47l-0.68,-1.7ZM766.27,488.64l-0.3,-0.69l2.11,-2.36l5.81,-0.26l0.94,0.8l1.35,-0.39l1.07,-0.71l0.68,0.0l3.32,1.4l2.85,0.08l1.28,0.95l0.69,1.82l0.9,0.44l0.47,0.8l-0.29,1.53l-5.37,-2.63l-1.33,-1.11l-2.56,-0.1l-0.53,0.55l0.05,0.41l-3.38,-0.88l-0.29,-0.67l-0.42,-0.11l-1.12,0.34l-1.17,1.21l-0.72,0.09l-0.48,-0.16l-1.4,-1.59l-0.89,-0.41l-0.85,0.41l-0.42,1.23ZM780.17,477.84l3.58,-1.0l0.41,0.54l-0.24,0.82l-1.38,0.56l-2.37,-0.92ZM778.8,522.63l0.94,0.13l-0.18,0.93l-0.79,-0.7l0.03,-0.36ZM763.29,456.66l-0.79,-2.23l0.82,-1.51l0.7,-2.8l2.1,-2.2l-0.75,1.07l-0.18,0.98l0.94,1.15l0.0,2.49l-0.83,1.09l-1.69,1.08l-0.32,0.87ZM763.89,457.48l0.97,0.44l0.99,-0.17l0.68,-1.6l1.34,-0.77l0.14,-1.37l0.36,-0.47l1.41,-0.82l1.5,-0.35l0.03,2.9l-2.85,1.55l-0.49,0.89l0.2,0.84l2.85,1.59l0.21,0.87l-1.41,-0.63l-3.46,-0.6l-0.67,0.3l-0.37,0.77l-0.08,2.61l0.69,2.29l1.8,3.22l-0.66,-0.29l-1.13,-2.05l-1.42,-1.29l0.15,-3.72l-1.16,-1.71l-0.12,-0.79l0.52,-1.65ZM769.72,447.96l-0.89,0.1l-0.34,-1.46l0.71,-1.09l1.54,-0.83l0.41,0.59l-0.43,1.63l-0.48,0.8l-0.53,0.26ZM770.98,517.22l0.07,-0.02l-0.01,0.06l-0.06,-0.04ZM766.39,491.38l0.34,-0.3l0.21,-0.03l-0.29,0.14l-0.26,0.19ZM767.55,490.94l0.67,-0.35l-0.17,0.61l-0.49,-0.27ZM766.43,525.21l0.01,0.0l0.11,-0.0l-0.03,0.03l-0.08,-0.03ZM767.16,475.96l-3.99,0.3l-0.88,-0.4l0.4,-0.99l1.11,-0.75l3.36,1.84ZM761.78,466.79l0.31,0.27l0.62,-0.11l0.26,-0.47l0.61,0.79l-0.45,0.83l0.4,0.98l-0.85,0.24l0.16,-0.66l-1.25,-1.34l0.2,-0.52ZM764.02,469.29l0.79,0.03l0.27,0.36l-0.41,0.22l-0.64,-0.6ZM760.63,469.19l0.05,-0.12l0.05,0.15l-0.09,-0.02ZM760.49,467.14l-0.3,0.09l-0.05,-0.4l0.25,-0.77l0.11,1.08ZM757.75,487.23l1.12,0.53l1.5,1.99l-0.08,0.85l-1.95,0.95l-1.71,0.4l-0.93,-0.35l-2.61,-1.35l-0.99,-1.48l0.06,-1.37l0.81,0.26l2.66,-0.6l2.11,0.14ZM757.21,433.23l0.01,-0.01l-0.0,0.01l-0.01,0.0ZM757.81,431.67l-0.55,-0.64l0.14,-0.88l0.5,1.37l-0.1,0.14ZM750.41,523.01l1.0,-1.32l1.73,0.26l2.79,-0.97l0.69,0.53l-1.13,0.53l-0.7,0.9l-2.53,-0.45l-1.85,0.52ZM747.5,477.65l0.38,-0.04l1.32,0.09l-1.63,0.15l-0.07,-0.2ZM750.49,477.62l1.14,-0.09l0.2,0.02l-0.72,0.12l-0.62,-0.06ZM750.92,479.55l-0.08,-0.27l0.13,-0.24l-0.06,0.52ZM748.22,437.51l0.03,0.04l-0.03,-0.01l0.0,-0.03ZM743.62,476.88l0.82,0.28l0.59,-0.2l0.46,0.47l-1.5,0.42l-1.42,-0.31l-2.24,0.81l-0.5,-0.01l-0.45,-0.75l0.3,-0.99l0.47,-0.16l1.27,-0.06l2.21,0.5ZM745.7,477.42l0.14,-0.02l0.02,0.01l-0.16,0.01ZM704.86,464.54l0.67,-0.32l0.35,-0.64l-0.38,-1.56l0.7,-1.38l0.9,-0.91l0.22,-1.01l1.46,-1.75l0.61,0.71l0.88,0.3l0.92,-0.29l1.28,-1.46l0.85,-1.63l0.55,-0.33l0.65,-0.1l0.97,0.48l1.35,0.12l0.78,1.0l0.7,0.33l2.14,-0.14l4.23,0.52l2.94,1.27l1.84,-0.7l5.9,0.77l3.32,-1.42l1.09,-1.24l1.03,-0.48l0.49,-1.14l1.28,-0.5l1.4,-1.67l0.9,0.27l0.37,0.77l-0.72,0.71l-1.14,2.23l-2.02,1.93l-1.35,1.98l-0.59,0.59l-1.4,0.6l-5.09,0.6l-1.77,-0.16l-1.34,-1.15l-0.84,-0.13l-8.69,0.42l-2.46,-0.46l-3.77,0.42l-3.29,-0.64l-1.86,0.64l-1.29,1.45l-1.42,3.65l0.37,2.87l1.43,2.52l2.03,1.25l0.64,1.6l0.81,1.04l2.66,0.26l1.16,-0.55l1.08,-1.76l1.97,-1.99l1.09,0.7l1.85,0.06l2.35,-1.32l4.52,-0.01l0.37,-0.44l-0.16,-0.5l1.88,-0.43l1.27,0.47l0.28,0.68l-0.26,1.25l-0.33,0.19l-1.76,-1.11l-1.42,0.24l-0.83,0.58l-2.23,2.84l-1.83,1.48l-2.87,1.01l-1.54,1.51l-1.64,-0.44l-0.46,0.1l-0.39,0.56l0.2,0.92l1.67,1.53l1.36,0.61l2.3,3.75l1.54,1.18l0.08,0.97l0.62,0.86l-0.56,0.67l-0.39,2.87l2.47,2.01l0.76,1.42l0.7,0.29l0.61,-0.26l0.18,1.66l-0.74,-0.33l-0.61,0.56l-1.54,0.02l-2.74,0.91l-0.68,0.93l0.08,1.25l-0.69,0.09l-2.23,-0.59l-0.59,-1.03l0.39,-2.11l0.54,-1.02l-0.07,-0.81l-0.6,-0.58l-1.72,-0.75l-3.0,-2.79l1.22,-2.49l-0.1,-3.4l-0.7,-0.76l-0.83,-0.19l-1.98,0.21l-2.36,1.53l-0.78,0.9l-0.02,0.97l1.01,2.13l0.32,2.63l-0.55,2.79l0.43,4.03l-1.05,3.95l1.04,2.72l-3.1,0.14l-1.67,0.86l-1.69,-1.16l-0.56,-0.63l-0.09,-0.63l1.15,-3.15l0.0,-1.13l0.72,-2.42l0.09,-2.92l-1.08,-2.37l0.04,-1.47l-1.22,-0.88l-2.77,0.54l-0.33,-0.25l-0.58,-1.33l0.17,-2.69l-0.53,-1.3l2.28,-1.74l0.6,-2.56l1.14,-1.64l0.2,-0.97l-0.28,-2.97l1.44,-3.6l1.14,-1.35l0.69,1.01l0.45,0.18l0.3,-0.38l-0.89,-5.64ZM736.59,534.43l0.65,0.46l1.5,0.02l1.11,-0.94l0.32,-0.91l2.8,-1.45l0.68,0.57l1.03,-0.38l-0.17,0.55l-0.73,0.03l-0.51,0.53l0.75,2.11l-2.51,2.9l-2.0,1.7l-1.75,0.24l-2.44,1.21l-0.67,0.02l-0.7,-0.31l0.76,-1.13l-0.16,-0.53l-0.73,-0.47l0.54,-1.87l2.23,-2.34ZM739.69,526.62l0.3,-0.38l-0.09,-0.61l0.49,-0.44l0.74,0.46l1.0,-0.28l2.39,0.23l0.02,0.44l-4.84,0.58ZM738.25,526.06l-0.87,1.35l-0.81,-0.7l1.04,0.05l0.63,-0.7ZM731.61,527.45l1.11,-0.79l0.05,-0.48l0.71,0.19l1.02,-0.53l-0.5,0.72l-0.64,0.17l-0.4,0.77l-0.89,0.22l-0.47,-0.27ZM733.01,475.86l0.15,0.17l-0.02,0.09l-0.13,-0.02l0.01,-0.25ZM728.24,475.03l-0.26,-0.63l0.5,-1.4l1.79,-0.17l-2.03,2.2ZM730.66,474.31l0.09,0.01l-0.08,0.05l-0.01,-0.07ZM731.28,474.11l0.47,-0.63l0.45,-0.08l0.46,0.35l-0.47,0.81l-0.91,-0.45ZM728.06,545.35l0.04,-0.38l1.57,-0.49l1.76,-1.46l0.19,0.55l-1.26,1.05l-2.31,0.73ZM729.8,526.35l0.37,-0.31l0.87,0.03l-0.08,0.29l-1.15,-0.01ZM726.57,505.77l-0.28,-0.74l1.35,-2.24l0.65,-4.35l0.9,-1.29l0.76,0.85l0.09,0.81l-1.0,0.33l-0.65,3.17l0.07,0.35l0.84,0.13l0.74,0.68l-0.7,0.43l-0.85,0.03l-0.97,1.82l-0.95,-0.0ZM729.17,494.09l1.2,-0.03l0.04,0.33l-0.68,0.62l-0.57,-0.92ZM705.88,527.5l2.53,-1.18l2.61,-0.3l1.0,0.55l1.9,0.32l3.37,1.63l4.0,-0.89l1.97,1.18l0.65,0.09l1.14,-0.33l0.87,-1.23l2.69,-1.32l-1.25,1.05l0.03,0.87l-2.49,0.92l-0.98,0.08l-1.0,-0.06l-0.77,0.11l-3.09,1.08l-0.63,-0.51l-1.32,-0.05l-0.8,0.74l-0.94,-0.13l-1.11,0.29l-3.54,-1.0l-1.78,0.13l-1.63,-0.31l-1.31,0.48l-0.52,-0.79l0.4,-1.43ZM728.29,525.01l-0.42,-0.09l0.33,0.02l0.09,0.07ZM724.05,503.6l0.27,-1.16l0.54,-0.75l-0.3,-1.92l2.04,-0.94l0.18,1.77l-1.01,1.42l0.03,1.48l-0.38,0.24l-0.79,-0.36l-0.58,0.23ZM720.93,502.15l0.62,0.76l-0.12,1.31l-0.94,-1.15l0.45,-0.92ZM720.23,543.0l0.44,-0.43l0.34,-0.02l-0.55,0.41l-0.23,0.04ZM706.07,534.07l1.84,1.37l0.47,0.99l1.4,0.16l0.62,0.43l1.7,1.8l0.11,0.63l-0.67,0.63l-1.69,0.55l-1.31,-0.32l-1.32,-0.78l-0.92,-1.19l-2.54,-1.52l-3.9,-0.54l-0.69,-0.98l1.35,-0.7l3.1,-0.23l1.3,0.2l1.15,-0.51ZM702.37,528.21l0.22,-0.47l0.21,0.05l-0.06,0.15l-0.36,0.27ZM693.04,526.41l0.72,0.45l1.53,-0.65l0.67,0.05l0.64,0.92l0.65,-0.13l0.38,-0.6l0.71,-0.04l1.18,2.42l-1.95,-0.07l-0.56,0.18l-0.25,0.54l-1.8,0.36l-0.09,-0.98l-0.75,-0.28l-1.32,1.18l-2.33,0.64l-1.08,-0.05l-1.64,0.65l-2.17,0.19l-1.07,0.47l-1.71,-0.58l0.33,-2.98l2.29,-1.13l1.29,0.44l1.51,-0.01l1.57,1.98l1.43,0.27l2.25,-0.78l0.15,-0.9l-1.07,-0.93l-0.98,-0.17l-1.11,-0.8l-0.4,-0.87l0.92,-0.34l1.29,0.22l0.79,1.34ZM624.73,453.92l0.32,-1.2l1.4,-1.48l0.79,-1.6l0.57,-0.24l0.23,0.98l0.47,0.31l0.21,1.21l0.61,0.69l4.36,3.97l1.76,1.11l4.44,-1.41l2.81,0.41l2.57,-0.14l0.92,-0.77l1.34,-0.42l0.81,-2.15l1.88,-0.75l3.35,-0.06l0.1,0.67l0.44,0.33l4.78,1.45l2.12,-1.48l3.43,-0.44l1.13,0.3l1.1,-1.45l0.44,-1.58l0.82,-0.52l0.22,-0.91l-0.41,-1.57l2.94,-2.09l-0.01,-0.9l-0.63,-0.47l0.22,-1.45l0.71,-0.74l1.04,0.04l0.82,-0.43l0.87,-3.2l0.01,-3.59l0.74,-1.77l1.17,-1.05l0.92,0.4l1.13,-0.45l1.83,0.33l0.96,-0.41l4.28,0.22l1.22,0.26l1.37,0.81l-0.09,0.78l2.13,2.46l-0.52,0.13l-0.74,-0.59l-0.66,0.21l-0.19,0.44l-2.01,-0.06l-0.87,0.12l-0.34,0.39l2.26,1.73l-0.23,0.93l0.24,0.77l1.88,0.96l-0.32,0.83l0.66,0.44l0.04,0.65l0.97,0.48l0.77,1.52l1.29,1.56l-0.09,0.39l-1.72,1.31l-0.07,0.72l2.13,2.4l4.18,2.87l2.38,2.1l-1.34,0.78l-1.57,0.18l-2.4,-0.43l-1.29,-1.21l-0.78,-0.45l-0.48,0.07l0.3,1.69l-1.62,1.18l-1.71,3.82l-0.45,4.24l0.8,3.1l-2.33,1.11l-2.24,2.13l-0.51,-0.17l-0.74,-1.17l-0.38,0.3l0.13,2.03l-1.38,0.97l-0.34,0.98l-1.85,1.46l0.38,0.6l0.71,-0.03l0.17,0.7l-0.16,0.71l-0.71,0.57l0.12,0.69l1.44,0.48l0.05,1.1l-0.1,0.51l-0.99,-0.02l-0.65,0.55l-0.07,0.39l0.49,0.41l-0.28,1.72l-0.35,0.31l-0.29,-0.21l-0.62,0.23l-0.07,0.63l0.5,0.77l-1.21,1.63l-0.68,1.71l-9.18,4.19l-0.25,-3.08l-0.6,-2.47l-0.29,-0.35l-0.87,0.73l-0.51,-0.29l0.29,-0.99l-0.2,-0.48l-0.51,0.12l-0.63,0.76l-0.92,-0.59l-1.23,0.91l-1.59,0.4l-0.66,-1.92l-0.54,-0.16l-1.55,0.4l-2.09,-2.12l-0.67,0.19l-0.43,1.75l-1.45,0.92l-1.04,0.52l-2.45,-0.55l-1.19,0.45l-1.71,1.25l-0.04,-3.42l-1.1,-1.47l-0.52,0.04l-0.45,0.52l-1.8,-0.3l-3.15,1.01l-0.34,-0.21l0.41,-0.79l-0.48,-0.19l-1.4,0.72l-0.99,-0.86l-2.02,0.63l-1.1,-7.06l-0.99,-1.09l0.56,-2.28l-0.43,-2.1l-0.89,-1.4l-1.51,-1.24l-2.88,-0.7l-0.03,-0.39l0.77,-0.78l-1.83,-1.67l-0.05,-1.14l0.99,-2.44l-2.34,-2.49l-0.27,-3.07l0.36,-2.36l1.15,-0.76l0.16,-0.42l-0.77,-0.31ZM689.33,432.89l1.07,-0.1l0.09,0.26l-0.8,0.22l-0.36,-0.38ZM688.52,438.39l0.19,-0.01l-0.04,0.25l-0.08,-0.07l-0.06,-0.17ZM688.18,525.84l-0.09,-0.44l0.43,-0.1l-0.34,0.54ZM676.77,529.94l0.76,-0.55l-0.1,-2.16l1.02,-0.92l1.12,-0.58l2.02,0.78l-1.52,3.24l0.09,0.45l-0.76,0.16l-2.62,-0.43ZM677.43,493.41l0.1,-1.05l-0.41,-1.51l0.63,-1.84l0.39,-0.25l0.37,3.12l-0.14,0.7l-0.94,0.84ZM665.5,525.06l3.09,0.52l1.84,-0.9l2.51,0.99l0.95,1.06l-2.63,1.44l-0.74,1.27l-0.04,-0.59l-0.76,-1.07l-1.72,-1.15l-1.67,-0.38l-0.83,-1.18ZM671.74,515.64l-0.41,0.09l-0.2,-0.1l0.96,-0.2l-0.35,0.21ZM596.42,514.63l0.11,-0.17l0.13,-0.12l0.08,0.21l-0.32,0.08ZM598.18,514.76l1.14,-1.95l1.0,-0.35l0.73,-2.71l1.15,-1.24l5.69,1.33l1.0,-0.27l0.85,-1.03l1.75,0.39l0.99,1.02l1.54,0.76l3.59,0.62l1.25,-0.16l1.32,1.32l0.6,1.81l0.87,0.74l4.61,0.57l1.64,-0.38l2.33,0.65l2.82,-0.05l1.94,0.34l1.32,-1.19l1.09,-2.43l1.31,-0.19l1.72,1.9l1.29,0.09l1.34,-0.38l1.51,0.93l1.77,0.23l0.81,0.67l3.18,0.2l0.76,2.06l1.03,0.6l0.02,1.75l1.86,1.11l1.83,0.48l1.96,0.06l4.21,-0.69l2.22,0.99l0.26,1.37l-0.42,3.1l0.54,1.37l0.91,0.84l-1.69,-1.01l-2.59,-0.38l-5.27,-2.14l-4.31,0.92l-4.16,-0.64l-4.53,-0.14l-6.69,-1.16l-4.26,-1.95l-5.75,-1.42l-4.09,-0.29l-1.47,0.35l-0.85,0.62l-3.75,-0.53l-2.7,-1.34l-2.03,-0.56l-6.08,-0.73l-0.14,-0.52l0.74,-1.34l-0.22,-0.54l-4.35,-1.48l-3.17,-0.03ZM654.92,517.5l-2.42,-0.71l0.79,-0.92l1.33,-0.13l6.62,-0.05l0.29,0.26l-0.93,0.28l-0.47,0.51l-1.37,0.03l-1.21,0.72l-2.63,0.02ZM651.59,507.15l0.02,-0.02l-0.0,0.02l-0.01,-0.0ZM629.22,472.23l-1.34,0.69l-0.13,-0.04l0.21,-1.38l1.22,0.14l0.23,0.38l-0.19,0.23ZM618.17,435.89l0.02,-0.02l0.08,-0.01l-0.1,0.03ZM618.38,435.83l0.47,-0.55l-0.28,-0.49l-1.07,-0.29l-0.43,-0.7l1.13,-1.07l1.0,1.28l0.01,0.85l-0.47,0.88l-0.36,0.1ZM613.87,485.59l0.62,-2.31l0.83,-0.17l1.71,0.45l0.91,0.65l0.42,0.73l-0.67,1.89l-0.81,0.66l-1.12,-1.0l-1.46,0.78l-0.43,-1.68ZM601.61,476.32l0.87,1.51l0.39,2.48l1.18,2.07l2.78,0.8l-0.96,2.1l0.31,1.02l-2.53,-1.29l-1.77,-0.49l-0.5,-1.02l0.14,-1.35l-0.58,-0.6l-0.68,-1.84l-1.77,-0.78l-1.76,0.29l-1.15,-0.49l1.64,-1.12l0.11,-1.3l0.47,-0.44l0.59,-0.22l0.69,1.26l0.66,0.02l0.4,-0.54l-0.09,-0.9l0.29,-0.08l0.93,0.17l0.35,0.75ZM530.39,424.92l2.72,-0.33l2.48,0.49l2.53,-0.04l2.62,2.37l0.68,1.61l1.82,1.83l-0.03,1.66l0.5,0.76l2.69,1.32l0.98,1.31l2.78,1.33l4.3,2.95l5.9,7.42l1.3,0.61l1.52,1.27l0.6,-0.39l-0.48,-1.94l0.42,-0.2l0.65,0.22l1.77,1.7l0.75,1.83l0.64,0.64l2.38,0.59l1.69,1.29l0.93,1.25l0.63,2.04l1.23,1.23l0.72,0.54l3.47,0.81l0.66,0.9l-0.25,0.33l-3.29,1.42l-0.26,0.47l0.44,0.31l2.65,-0.48l3.25,-1.74l0.79,0.19l1.35,1.33l0.7,1.44l-2.59,1.79l-0.16,1.25l0.67,0.82l-0.37,0.32l-0.08,0.69l0.83,1.57l1.47,1.03l2.67,1.06l2.12,0.17l1.02,5.6l0.54,0.93l1.88,1.11l-0.1,0.7l-1.34,1.48l0.01,1.56l0.96,0.2l1.38,-1.36l0.89,-0.36l2.6,0.15l1.24,0.75l3.36,4.47l0.08,0.58l-1.14,1.39l-0.45,1.58l0.05,1.0l0.58,0.85l-0.73,2.28l0.4,3.06l0.0,3.37l-0.52,4.94l-0.35,0.75l-0.52,-0.09l-0.7,-0.92l-1.3,-0.93l-0.74,0.12l-1.53,1.25l-3.08,-1.61l-0.57,0.22l-0.16,0.5l0.41,2.14l-3.87,-3.78l-1.82,-2.35l-6.85,-4.58l-2.81,-2.35l-3.04,-4.11l-4.1,-3.23l-1.59,-2.69l-1.88,-1.68l-1.65,-2.44l-0.27,-2.38l-2.75,-4.74l-1.36,-3.58l-3.35,-3.83l-1.51,-2.78l-2.58,-1.27l-1.15,-0.94l-2.67,-8.45l-1.56,-2.88l-3.96,-2.61l-2.73,-1.1l-0.8,-3.58l-1.59,-1.11l-3.15,-4.48l-1.34,-1.07l-2.6,-0.77l-1.59,-1.89l-5.47,-5.13l-2.06,-3.75l0.28,-0.92l-0.16,-0.88l0.93,-0.33l2.34,0.34l2.94,2.12l2.82,0.53ZM599.87,441.75l-0.0,-0.09l-0.01,-0.06l0.07,0.03l-0.06,0.12ZM590.63,465.03l0.37,-0.91l0.85,0.78l-0.91,0.24l-0.31,-0.11ZM593.0,465.4l0.03,-0.01l0.04,0.04l-0.06,-0.03ZM588.93,455.69l0.63,-0.44l1.15,-0.05l0.48,0.5l-0.01,0.7l-0.48,0.59l-0.37,-1.29l-0.46,-0.23l-0.95,0.22ZM589.16,467.04l1.01,-0.3l0.43,0.45l-0.4,0.65l-0.62,-0.01l-0.43,-0.79ZM586.69,455.6l0.28,-0.16l0.2,0.1l-0.19,0.32l-0.3,-0.26ZM583.2,466.09l0.26,-0.26l0.73,0.22l-0.47,0.13l-0.51,-0.09ZM580.69,459.3l0.04,-0.25l0.07,-0.11l0.18,0.35l-0.29,0.01ZM577.43,455.57l0.12,-0.16l1.43,0.67l0.68,0.71l-1.09,-0.85l-1.14,-0.36ZM575.86,455.84l3.0,1.71l0.05,0.24l-3.31,-0.81l0.26,-1.13ZM572.44,452.08l1.35,0.36l-0.78,-0.08l-0.57,-0.28ZM573.94,452.48l0.99,0.27l0.07,0.32l-0.4,-0.32l-0.66,-0.27ZM573.82,453.77l0.81,0.9l-0.12,1.3l-0.51,-0.94l-0.18,-1.26ZM573.27,503.85l0.97,0.44l-0.04,0.13l-0.23,0.01l-0.7,-0.58ZM569.22,448.44l0.36,0.65l-0.35,0.99l-0.59,0.37l-0.51,-0.09l-0.49,-0.96l0.03,-0.67l1.55,-0.3ZM558.51,485.09l1.28,1.34l-0.14,0.64l-1.01,-1.14l-0.13,-0.84ZM556.91,483.15l0.93,0.83l-0.3,0.47l-0.45,-0.01l-0.18,-1.3ZM553.83,479.28l0.22,0.16l0.51,1.03l-0.84,-0.6l0.11,-0.59ZM550.38,476.64l-0.51,0.03l-1.55,-1.07l-1.64,-2.92l0.45,-1.36l1.25,-0.2l1.51,3.63l0.96,1.31l0.02,0.4l-0.48,0.18ZM544.85,467.45l-0.26,0.08l0.72,-1.91l-0.06,0.84l-0.4,0.99ZM537.07,452.74l3.73,3.74l-0.54,2.57l-0.49,-0.11l-0.75,-1.78l-1.43,-0.9l-0.76,-1.62l-1.06,-1.18l0.55,-0.07l0.75,-0.64ZM529.81,445.7l-2.67,-1.77l-1.57,-0.47l-0.46,-0.71l0.65,-0.33l3.82,2.73l0.22,0.54Z\", \"name\": \"Indonesia\"}, \"OM\": {\"path\": \"M223.78,281.06l3.38,-0.67l0.29,-0.3l-0.45,-1.47l-1.1,-0.27l0.26,-4.83l0.69,-0.3l-0.25,0.67l1.14,1.14l2.12,-1.71l1.76,3.66l2.12,2.65l1.62,1.38l3.75,1.45l3.82,0.7l1.61,0.75l1.8,-0.16l1.27,0.87l1.96,3.07l2.97,3.68l1.01,0.78l1.88,0.47l-0.19,1.8l-3.17,5.6l-2.23,1.61l-1.3,1.38l-3.11,5.43l-1.27,0.02l0.2,-1.11l-0.45,-0.45l-0.63,0.09l-0.72,0.31l-1.78,2.51l-1.2,4.67l0.69,4.92l-4.45,0.72l-2.69,1.19l-1.36,1.35l-0.86,3.35l-1.11,1.22l-5.59,0.74l-1.26,0.47l-1.68,1.99l-0.21,0.8l0.41,1.01l-1.54,2.31l-1.94,0.51l-1.56,-0.49l-3.77,0.2l-3.53,1.9l-3.58,0.74l-1.98,-4.43l-0.59,-0.39l-5.4,-12.58l22.31,-7.89l4.97,-15.7l-3.38,-5.75l0.09,-2.41l2.31,-5.46l0.18,-0.91l-0.28,-0.81ZM247.35,309.88l0.0,-0.41l0.54,-0.61l-0.3,0.79l-0.24,0.24ZM248.53,308.01l0.2,-0.4l0.07,0.18l-0.27,0.22ZM228.41,263.74l0.31,-0.57l0.82,-0.1l0.38,-0.43l-0.33,3.33l-0.56,1.17l-0.36,-0.22l0.15,-2.76l-0.42,-0.43Z\", \"name\": \"Oman\"}, \"KG\": {\"path\": \"M333.84,133.42l1.81,-1.22l1.29,-1.33l1.2,-0.39l0.51,-0.99l2.75,-1.2l0.24,-0.51l-0.33,-0.57l-1.37,-0.73l-0.83,-0.02l0.93,-1.66l1.6,-1.66l3.59,-0.75l3.76,0.58l3.43,1.04l0.93,0.74l3.01,0.46l1.0,0.76l0.75,0.15l0.44,-0.52l-0.5,-1.57l0.95,-3.48l2.24,-1.01l0.53,-0.54l1.34,-0.0l0.6,-0.3l4.25,2.23l4.21,1.31l2.21,0.17l1.38,-1.08l5.05,0.16l3.55,-0.49l1.82,0.55l5.94,0.5l3.66,-0.07l2.7,0.81l1.83,0.02l0.38,0.88l1.76,1.69l3.68,0.64l1.99,1.86l0.2,0.82l-2.73,0.34l-0.69,0.92l-3.46,1.02l-4.15,2.01l-2.87,1.7l-0.29,0.97l-1.48,1.63l-2.25,0.18l-1.64,0.53l-4.35,-0.4l-0.86,0.18l-0.77,0.51l-1.24,1.84l-0.61,1.77l-1.46,1.67l-0.76,-0.52l-2.82,1.09l-1.14,-0.02l-0.54,-2.38l-0.56,-0.45l-3.42,1.52l-1.94,-0.32l-0.64,0.57l0.07,0.85l-0.9,0.24l-1.97,1.51l-3.29,0.96l-1.18,2.16l0.52,1.92l-0.49,0.68l-2.52,0.22l-2.64,0.86l-4.11,-0.13l-1.78,0.47l-0.72,0.87l-1.36,-1.13l-1.83,0.66l-0.31,-1.25l-1.47,-0.33l-0.05,-0.87l-0.65,-0.43l-3.16,1.0l-0.52,0.7l-1.26,0.12l-1.35,-1.46l-0.85,-0.22l-1.88,0.33l-0.56,-0.29l-1.73,0.26l-2.68,-0.18l-1.89,0.39l-0.45,-1.69l0.33,-1.19l1.21,0.22l0.53,-1.61l3.03,-0.86l0.66,0.22l2.71,1.05l0.49,0.78l-0.25,0.76l0.56,0.68l0.65,0.16l0.89,-0.38l0.19,-0.59l-0.27,-0.32l-1.06,-0.21l0.68,-0.5l0.21,-0.75l1.71,-0.69l0.01,0.93l0.46,0.52l-0.18,0.53l0.29,0.52l1.63,0.02l0.33,-0.32l-0.17,-0.81l0.26,-0.43l-0.29,-0.61l-0.9,-0.2l-0.78,-0.86l2.17,-0.26l1.43,0.63l0.91,0.01l0.78,0.5l1.93,-0.92l1.38,-1.61l1.76,0.26l0.46,-0.69l-0.19,-0.66l1.48,0.32l1.4,-1.17l2.73,-1.47l-0.24,-0.8l-3.56,-0.38l-2.13,-1.51l-1.14,0.14l-0.4,-1.32l-1.91,-0.17l-0.64,-1.78l-0.65,-0.42l-0.48,-0.9l-0.93,0.42l-0.15,1.53l-0.73,-0.17l-0.58,0.33l-0.07,1.45l-1.73,-0.13l-1.82,-0.62l-0.41,-0.24l-0.38,-1.21l-0.54,-0.58l-1.68,0.27l-1.78,-0.81ZM345.71,147.85l0.12,-0.51l-0.43,-0.47l-1.23,0.66l0.09,0.46l0.8,0.44l0.65,-0.58Z\", \"name\": \"Kyrgyzstan\"}, \"UZ\": {\"path\": \"M235.01,135.19l-0.38,0.4l-7.22,-0.5l-0.01,-32.71l18.68,-5.07l-1.24,2.18l-1.29,3.39l0.43,2.39l-0.39,1.23l0.7,1.14l0.78,0.02l1.18,-0.62l1.48,-2.22l0.55,-0.33l-0.18,-1.56l0.55,-1.23l-0.28,-0.48l-0.7,0.18l0.81,-1.1l-0.46,-0.93l-0.05,-1.12l4.44,2.62l-1.62,3.88l0.88,1.36l2.38,2.12l-0.8,1.35l0.51,0.69l2.08,-0.32l1.06,-0.65l0.04,-0.74l0.85,-0.92l-0.25,-2.44l0.36,-1.11l6.56,3.85l1.11,2.04l6.47,6.3l9.14,-1.24l9.21,0.7l3.4,-1.45l2.55,2.56l1.67,0.98l2.24,3.85l0.51,0.16l1.6,-0.74l-0.63,8.25l0.39,0.41l3.32,0.08l1.24,6.2l0.32,0.86l0.57,0.44l8.82,-0.28l1.03,1.2l-0.43,1.73l0.59,0.83l2.42,1.29l1.4,-0.01l0.52,-0.77l-0.32,-0.99l0.15,-0.68l1.09,-1.4l1.89,-1.48l0.64,-1.48l2.02,-0.94l2.24,-1.63l3.29,-1.36l2.33,-2.27l1.37,0.3l1.01,-1.21l2.11,-0.91l0.93,0.49l-2.53,1.07l-0.44,0.94l-1.23,0.44l-1.34,1.36l-2.01,1.35l-0.2,0.57l0.26,0.52l2.11,0.99l1.62,-0.31l0.55,1.44l0.77,0.57l2.02,0.69l2.03,0.24l0.65,-0.47l0.06,-1.22l1.11,-0.24l0.4,-1.1l0.62,0.37l0.89,2.05l1.85,0.11l0.32,1.36l1.44,-0.1l2.12,1.51l2.97,0.22l-2.11,1.0l-1.2,1.07l-1.66,-0.38l-0.4,0.63l0.2,0.8l-0.82,-0.42l-0.88,0.16l-1.5,1.67l-1.55,0.74l-0.4,-0.41l-0.89,0.03l-1.76,-0.69l-4.82,0.75l-0.78,-1.06l-0.95,-0.31l2.37,-2.04l0.47,-0.8l-0.25,-0.53l-0.5,-0.2l-0.31,-0.85l0.28,-0.59l-0.77,-0.87l-0.64,0.33l-0.71,-0.45l-0.47,0.06l-0.75,1.28l-4.15,1.99l-2.01,-1.2l-0.79,0.29l-0.44,0.45l-0.08,0.91l-0.78,0.89l0.66,1.91l-0.54,0.61l0.12,0.23l-1.83,-0.23l-2.24,0.35l-0.48,0.4l0.13,0.72l1.32,0.17l-0.28,0.55l0.25,0.62l-0.42,0.55l-0.95,0.33l-0.38,1.71l-0.49,0.52l-0.55,0.2l-5.24,-0.78l-1.43,0.63l-0.99,0.99l-0.57,1.96l0.25,0.69l2.09,0.69l0.1,0.82l0.46,0.48l2.06,0.03l0.94,0.36l-0.68,2.1l0.3,1.76l1.99,2.53l-0.76,1.55l-2.87,3.49l-0.41,0.88l-0.12,2.0l-1.76,-0.47l-1.47,0.47l-0.7,-0.17l-1.07,-0.89l-1.91,-0.32l-1.89,0.16l0.06,-3.23l0.78,-1.43l-0.54,-0.95l-1.52,-0.43l-3.17,-1.69l-0.85,-0.21l-1.77,0.28l-7.35,-4.47l-2.31,-1.91l-1.29,0.09l-2.83,-1.72l-1.93,-1.9l-7.31,-4.97l-0.51,-0.65l-0.49,-2.55l-0.61,-1.3l-0.87,-0.74l-0.64,-1.16l-1.1,-3.16l-1.28,-1.31l-2.48,-1.06l-1.9,0.77l-2.81,-0.53l-2.94,0.25l-2.59,-1.5l0.47,-1.53l-0.46,-1.25l0.64,-0.07l0.29,-0.56l-0.78,-1.1l-1.03,-0.46l0.27,-2.1l-1.15,-0.98l-3.9,-0.33l-1.34,-1.62l-2.16,-0.49l-2.12,-1.93l-0.62,0.13l-0.54,0.81l-1.74,-0.18l-0.89,0.6l-0.12,0.44l1.2,1.15l-1.99,-0.33l-0.69,0.68l-0.89,1.97l-1.02,0.19l-0.54,-0.82l-1.18,-0.67l-1.43,0.42l-1.4,3.21l-0.97,1.06l0.41,3.65l0.6,0.81ZM339.66,146.55l0.91,0.56l0.05,0.74l-0.49,-0.01l0.12,-0.53l-0.59,-0.76Z\", \"name\": \"Uzbekistan\"}, \"MM\": {\"path\": \"M501.87,308.34l-2.26,-2.73l-1.05,-3.71l0.63,-0.77l1.51,1.13l0.9,0.03l0.33,-0.59l-0.38,-5.03l0.64,-0.95l0.86,0.88l1.08,0.06l0.8,-1.56l0.88,-0.54l0.09,-1.09l-0.62,-2.76l0.58,-1.39l-0.03,-0.73l0.87,-0.01l0.58,-0.69l0.33,-2.1l0.18,-2.73l-0.73,-2.47l0.78,0.52l1.48,-0.24l3.04,1.06l0.73,-0.28l1.24,-3.53l2.17,-3.53l0.94,-2.27l-0.28,-1.07l-0.85,-0.49l0.17,-0.6l0.54,-0.94l0.93,-0.53l1.22,-1.47l0.58,-1.77l0.83,-0.97l-0.54,-2.69l0.49,-1.72l2.44,-1.24l3.25,-2.3l1.21,-1.39l0.86,-0.31l3.81,-0.56l1.57,1.55l1.42,0.2l0.31,-0.38l-0.06,-0.62l-1.47,-2.17l-0.16,-0.97l0.5,-0.65l2.83,-1.98l-0.02,-2.36l1.48,-2.18l0.46,0.06l0.7,1.04l1.0,0.12l1.42,1.56l1.51,4.79l0.65,0.32l0.41,-0.14l0.5,-0.79l1.08,0.52l0.63,6.78l-0.41,4.04l-0.56,0.28l-0.34,0.65l0.68,1.61l-1.38,0.54l-0.91,1.5l-0.85,-0.14l-0.57,0.27l-1.0,2.23l-1.52,0.44l-0.83,1.9l0.14,1.26l-1.1,0.7l-0.4,1.14l-0.01,1.25l1.02,1.05l0.29,1.08l-0.09,0.56l-0.85,1.05l-0.12,0.85l0.97,0.6l2.95,-1.43l1.39,-0.34l2.03,-0.04l0.79,0.35l0.91,-0.25l-0.5,0.55l-0.18,1.14l1.11,1.71l-0.19,1.0l0.59,1.0l-0.14,1.34l0.27,0.45l3.62,0.77l0.88,0.49l-0.78,1.01l-0.41,1.19l-0.02,1.49l-1.22,2.41l0.2,0.88l5.52,0.9l0.07,1.97l0.5,0.62l0.65,0.23l0.22,1.16l0.92,0.49l1.14,-0.27l1.21,0.31l0.84,-0.13l1.79,-1.47l1.57,-0.69l0.12,0.86l-0.39,0.69l-2.43,1.24l-0.4,0.48l-0.39,1.03l-0.95,1.18l0.11,1.06l-1.42,0.17l-0.71,0.59l-0.99,2.9l-1.37,-0.61l-1.41,0.77l-2.17,-0.17l-0.16,0.52l0.31,1.19l-0.81,0.38l-1.0,-0.28l-1.17,0.21l-0.5,0.57l-0.59,1.91l-3.95,0.64l-0.85,-0.01l-1.03,-0.56l-0.98,0.16l-0.33,0.86l-1.35,1.68l-0.11,2.5l-0.72,1.6l0.34,2.47l-1.49,0.55l-0.93,-0.17l-0.39,0.51l0.69,1.42l0.55,0.49l0.63,0.07l0.73,1.76l0.01,2.02l5.42,6.28l0.27,1.82l1.46,3.22l0.73,0.21l0.84,-0.59l-0.39,0.92l-1.82,1.25l-0.22,5.02l-0.66,0.03l-2.01,1.22l-0.22,0.78l0.18,1.31l0.4,1.41l2.42,3.46l2.76,2.42l1.43,2.38l0.28,3.46l-0.48,0.95l0.1,0.8l0.73,2.25l1.35,1.44l0.46,2.72l1.12,3.05l-0.96,1.03l-2.14,3.82l-3.26,3.39l0.03,1.89l-0.44,1.56l-0.67,0.72l0.06,-1.69l-0.4,-2.26l1.49,-2.26l0.57,-2.2l-0.01,-2.49l0.82,-0.74l-0.02,-0.69l-0.92,-0.45l-0.71,0.36l0.44,-1.37l0.03,-1.9l-0.53,-0.52l0.37,-0.74l-0.31,-0.53l0.25,-1.66l-0.66,-3.84l-1.23,-2.64l-1.24,-1.8l-0.14,-1.67l-0.29,-0.35l-0.7,0.2l-0.05,0.34l0.04,-1.87l-0.73,-1.27l-0.52,-1.99l0.6,-0.05l0.02,-0.49l-1.47,-1.44l-0.76,-7.75l-0.91,-1.16l0.39,-1.7l-0.05,-1.47l0.64,-1.12l-0.47,-0.2l-2.21,0.33l-1.14,-2.55l-0.24,-1.78l-1.72,-1.71l-0.89,-0.65l-0.49,0.01l-0.12,0.47l0.32,0.63l-0.34,0.87l0.38,1.18l-0.96,2.24l-0.99,1.04l-1.18,0.38l-0.79,-0.51l-0.41,-1.44l-0.79,-0.04l-0.23,0.5l0.87,2.31l-1.72,0.47l-0.36,0.71l-1.73,0.6l-0.85,1.65l-1.91,1.73l-0.12,-0.68l0.43,-0.98l-0.13,-0.86l-0.39,-0.34l-1.43,2.06l-1.33,0.03l-0.25,-2.39l-0.34,-0.35l-0.43,0.25l-0.35,1.13l-0.66,0.53l0.47,-3.19l-0.13,-0.93l-0.38,-0.31l-0.4,0.29l-0.28,1.27l-1.6,1.76l-0.96,0.53l0.36,-3.3l0.61,-0.99l0.91,-3.82l0.66,-1.3l0.21,-2.27l-0.71,-2.01l-0.47,-2.85l-1.68,-3.76l0.29,-0.25l-0.15,-0.42l-1.16,-0.97l-0.18,-2.93l-0.62,-0.3l0.17,-1.18l-1.22,-0.77l-0.64,-1.12l-0.81,-0.55l0.51,-0.72l-0.32,-0.65l-0.8,0.02l-1.26,-0.97l-1.31,-0.28l-0.87,0.25l-0.16,0.86l-0.41,-0.72l0.51,-0.56l-0.36,-0.73l0.26,-0.99l-0.35,-0.61l-0.66,0.19l-0.12,0.44l-0.32,0.57l-0.2,-1.16l-1.2,-1.37l-0.61,0.47l0.15,0.71ZM511.54,317.64l-0.59,1.02l0.13,1.32l-1.21,-0.74l-1.27,-2.11l0.87,0.82l0.88,0.31l1.18,-0.61ZM503.54,309.93l-0.24,0.32l-0.03,-0.02l0.15,-0.21l0.13,-0.09ZM545.29,376.32l-0.21,-0.96l0.34,-0.03l-0.06,1.01l-0.07,-0.02ZM544.52,369.1l0.3,0.29l-0.24,0.63l0.04,-0.45l-0.1,-0.47ZM538.23,340.2l-0.05,-0.68l0.11,-0.08l0.04,0.12l-0.1,0.65ZM509.61,315.91l1.12,0.49l0.2,0.28l-0.64,0.23l-0.68,-1.0ZM509.32,321.7l-0.47,-0.39l-0.2,-0.27l0.82,0.06l-0.15,0.6Z\", \"name\": \"Myanmar\"}, \"SG\": {\"path\": \"M585.95,453.53l-0.64,0.28l-0.67,-0.24l0.65,-0.28l0.66,0.24Z\", \"name\": \"Singapore\"}, \"KH\": {\"path\": \"M574.51,361.92l1.66,-0.41l0.12,-0.61l3.37,-4.31l3.71,-1.2l3.21,0.46l5.93,-0.52l1.08,0.34l0.57,1.07l0.57,0.1l0.63,-0.48l1.18,1.3l1.61,-0.24l1.3,0.45l1.26,1.22l1.44,0.1l0.37,-0.24l0.45,-1.27l-0.97,-1.85l1.11,-0.15l0.48,-0.66l0.95,0.03l0.88,-0.67l2.44,1.8l2.36,-0.87l1.16,-1.19l0.89,0.17l-0.8,1.05l-0.24,1.95l2.04,5.15l-0.97,3.16l0.51,2.51l-0.03,1.91l-0.66,0.91l-0.49,-0.33l-1.01,0.13l-2.18,1.73l-1.13,0.17l-0.63,0.58l-2.02,0.22l-0.32,0.43l-0.03,1.57l-2.6,-0.56l-1.56,1.19l0.08,2.96l2.22,1.94l-0.12,1.13l-0.94,-0.53l-0.65,0.09l-0.64,-0.81l-0.81,-0.16l-2.31,0.37l-0.59,0.64l-2.19,-0.27l-0.28,0.53l0.26,1.06l-1.38,1.2l-1.93,0.08l-0.92,0.75l-1.07,-0.86l-2.44,-0.4l-0.61,-0.53l-1.67,1.04l-0.56,-0.58l1.05,-0.75l0.31,-1.0l-0.63,-1.7l-0.96,-0.7l-0.49,0.05l-1.25,1.62l-1.01,0.05l-0.36,-1.87l0.15,-2.16l-0.77,-0.87l-0.14,-1.03l-0.42,-0.48l-0.35,0.04l-1.16,-2.31l-0.2,-1.12l0.28,-1.55l-1.85,-1.81l-0.28,-2.48l-0.98,-2.09l-0.07,-1.62Z\", \"name\": \"Cambodia\"}, \"CY\": {\"path\": \"M52.44,189.37l1.85,0.77l2.04,-0.71l1.37,0.09l0.52,1.29l1.4,-0.11l-1.77,1.53l-2.23,0.47l-0.92,0.87l-0.57,-0.55l-1.44,0.04l-1.81,-0.89l-0.72,-1.76l2.3,-1.04ZM61.14,190.36l0.36,-0.24l0.39,0.2l-0.02,0.0l-0.74,0.04Z\", \"name\": \"Cyprus\"}, \"QA\": {\"path\": \"M191.62,275.3l-1.7,0.32l-0.94,-0.72l-0.29,-0.65l0.27,-0.89l-0.68,-3.97l1.8,-4.45l1.49,-1.1l1.85,1.74l0.16,0.7l-0.61,2.21l0.9,3.61l-1.28,2.84l-0.98,0.35Z\", \"name\": \"Qatar\"}, \"KR\": {\"path\": \"M753.99,193.32l1.41,0.11l0.77,-1.18l-0.16,-0.67l-1.06,0.07l-0.87,-2.37l1.33,-2.74l0.95,-0.67l-0.16,-0.61l-0.43,-0.18l1.23,-0.79l0.46,-1.12l-0.69,-0.79l0.15,-0.9l-1.0,-1.05l0.03,-2.59l-0.46,-1.89l-0.52,-0.32l-0.69,0.31l-1.16,-0.29l-0.06,-0.26l0.32,-0.64l1.87,-1.06l1.8,0.49l0.69,1.02l0.63,-0.26l0.75,-0.88l-0.05,-0.43l-0.86,-0.41l-0.49,-0.88l-0.24,-0.71l0.21,-1.04l-0.97,-1.25l-0.02,-0.95l-0.61,-1.14l0.73,-0.78l0.02,-0.84l2.94,-3.01l7.06,-0.2l1.16,-0.57l1.11,-1.88l1.63,3.45l3.24,4.33l2.09,3.42l0.59,1.76l0.4,2.63l-0.59,3.62l0.08,2.32l0.41,0.65l0.8,-0.05l-1.07,3.98l-1.43,2.52l-1.54,0.6l-3.68,0.07l-0.8,0.84l0.15,1.0l-1.97,-0.42l-0.36,-0.62l-0.82,-0.17l-2.72,1.01l-0.15,0.64l0.66,0.86l-0.22,0.18l-0.9,-1.18l-1.06,0.16l-0.38,0.99l0.54,1.03l-0.65,0.91l-0.63,-0.39l0.57,-0.75l0.01,-0.74l-0.76,-0.42l-1.62,1.25l-0.93,1.29l-0.72,-0.54l-0.43,0.06l-1.2,1.11l-0.35,-0.97l-1.31,-1.11ZM771.49,190.93l0.08,1.06l-0.29,0.22l-0.66,-0.49l0.86,-0.78ZM765.7,192.18l0.1,-0.56l0.61,0.23l0.08,0.65l-0.79,-0.32ZM753.88,205.05l-0.4,0.13l-0.34,-0.44l1.03,-0.9l2.57,-0.72l1.17,0.22l-0.17,0.82l-1.1,0.52l-2.75,0.38ZM754.66,166.8l0.29,0.31l-0.02,0.58l-0.05,-0.07l-0.22,-0.82ZM752.75,195.37l0.75,-0.75l0.33,0.12l-0.79,0.68l-0.29,-0.06Z\", \"name\": \"Korea\"}, \"KP\": {\"path\": \"M739.6,147.16l0.14,-0.66l3.53,-2.94l0.73,-0.05l0.7,-0.77l2.64,-1.04l1.79,-1.14l0.46,-0.63l2.08,-0.45l3.82,-4.13l0.8,-2.45l0.81,-0.6l1.35,-0.45l1.79,2.16l2.94,0.69l2.65,-0.05l1.43,0.64l0.6,-0.11l1.12,-1.65l0.03,-0.6l-1.93,-3.06l6.28,-0.39l2.31,-1.74l0.26,-0.98l0.6,-0.76l0.46,-0.12l0.94,0.46l1.56,-0.74l1.33,-4.79l1.16,0.23l0.9,0.63l0.05,1.25l0.9,1.09l1.06,0.61l1.01,1.58l0.03,0.25l-1.33,-0.07l-1.59,1.03l-0.54,0.84l-1.29,0.97l-1.02,1.7l-0.93,0.9l-0.57,1.22l-0.03,0.9l0.62,1.68l-0.39,1.55l0.05,2.17l-2.69,1.16l-1.75,2.08l-2.92,1.48l-1.5,1.69l-1.47,0.78l-2.52,0.37l-0.87,0.93l-2.36,1.18l-0.33,0.96l0.16,1.96l-0.92,0.66l-0.24,1.65l3.07,1.36l1.43,1.65l2.59,1.82l-0.83,1.83l-0.7,0.63l-7.56,0.36l-0.78,0.49l-2.53,2.77l-0.15,0.99l-1.95,-0.73l-1.25,0.43l-0.37,0.46l-0.62,-0.84l-0.69,-0.03l-1.57,-0.95l-0.56,0.2l-1.0,1.37l-0.98,0.69l-0.68,-1.04l-1.65,-0.42l1.24,-0.68l0.08,-0.69l-0.74,-0.38l-2.63,-0.13l0.57,-0.37l0.23,-1.18l1.23,-1.65l1.71,-0.89l1.78,-0.17l0.16,-0.72l-1.08,-0.59l-0.97,0.01l-0.74,-0.65l1.87,-3.69l-0.37,-2.17l-0.26,-0.33l-1.97,-0.58l-2.32,-1.41l-0.69,0.12l-0.28,0.95l-0.54,-1.23l-1.46,-0.96l0.07,-0.75Z\", \"name\": \"Dem. Rep. Korea\"}, \"KW\": {\"path\": \"M167.69,235.06l-0.94,-0.06l-1.81,1.62l-0.16,0.46l0.3,0.43l2.23,0.19l0.93,2.92l1.65,3.04l-4.92,0.07l-1.91,-3.71l-5.99,-0.78l2.32,-3.08l1.56,-3.47l0.65,-0.51l3.13,-0.41l1.92,0.77l1.03,2.52ZM168.51,233.33l0.2,-0.32l0.75,1.05l-0.02,0.41l-0.58,0.53l-0.55,-1.16l0.2,-0.51Z\", \"name\": \"Kuwait\"}, \"KZ\": {\"path\": \"M172.6,48.91l0.9,0.03l3.88,-2.48l1.29,-2.26l2.33,-0.47l3.78,-1.94l3.63,-3.95l2.37,0.74l0.63,0.42l0.18,0.79l0.68,0.55l2.22,-0.14l2.95,-1.86l1.41,-0.32l0.62,0.21l1.14,1.57l0.7,0.43l1.96,-0.09l1.71,0.31l2.14,-0.2l1.31,0.73l1.23,1.52l2.02,0.91l1.27,1.11l2.02,2.46l0.45,2.04l0.86,0.61l0.55,-0.18l0.52,-0.7l0.01,-2.02l-0.64,-1.53l0.32,-0.24l2.51,1.3l2.63,2.04l2.58,0.87l1.09,-0.23l1.92,-1.12l0.81,-1.36l2.35,-1.56l1.04,0.32l2.77,-0.8l1.08,0.25l2.19,1.49l1.71,-0.39l1.32,-1.6l3.67,0.24l1.29,0.84l2.53,2.74l4.39,0.81l0.18,0.98l0.58,0.27l2.31,-0.95l1.57,-2.53l1.48,1.33l1.19,0.33l1.74,0.16l2.36,-0.33l2.13,-0.78l1.45,-1.06l1.44,-3.61l-0.18,-1.24l-1.75,-1.46l-2.4,-0.46l-0.47,-0.47l-3.68,-1.1l-0.59,-1.19l-2.45,-1.29l2.68,-1.56l1.87,-0.28l2.52,-1.96l-0.1,-1.05l-1.45,-2.62l1.84,-2.62l2.4,-0.21l4.25,0.52l1.19,-0.76l0.08,-0.8l-0.76,-0.88l-2.56,-1.18l-3.42,-0.64l0.2,-0.91l1.93,-0.37l0.51,-0.66l-0.13,-0.57l-0.65,-0.52l-1.74,0.28l-1.53,-0.53l0.84,-0.91l0.25,-2.16l0.51,-0.45l0.58,-0.23l4.51,1.03l0.91,-0.57l3.3,-0.1l1.14,-0.59l3.19,-0.36l0.96,-0.67l3.77,-0.75l1.12,0.06l2.66,-1.15l1.79,-0.35l1.52,0.31l1.98,-0.42l1.43,0.51l0.73,-0.49l0.53,-1.42l1.64,-0.98l1.56,0.04l1.46,-0.68l0.42,0.25l2.01,-0.08l4.05,-0.74l7.0,-1.39l1.13,-0.75l2.4,-0.34l0.91,-0.99l-0.15,-1.07l1.96,-0.31l1.56,-1.14l1.81,-0.78l3.75,0.33l5.15,2.03l1.1,-0.26l1.4,-1.0l1.59,-0.2l1.09,1.6l2.0,5.33l-0.22,2.29l-0.68,0.98l0.51,1.11l1.97,0.57l4.11,-0.64l0.78,0.15l0.73,-0.32l0.6,-0.87l1.2,1.76l0.14,1.58l0.48,0.49l0.43,0.03l1.22,-0.77l-0.04,-1.15l1.95,0.25l1.45,1.23l1.06,0.33l1.3,-0.08l1.86,-1.02l-0.1,0.73l-1.95,1.12l-0.92,1.37l-0.1,1.36l0.6,1.33l0.56,0.4l0.83,-0.3l1.25,-1.06l1.43,-0.39l2.39,0.39l1.44,0.92l0.59,-0.38l0.33,-1.35l2.69,-1.72l1.54,0.01l1.42,-0.75l1.17,-0.78l0.38,-1.17l1.89,-0.27l4.3,-2.03l1.77,-0.27l1.82,-0.97l-0.98,2.17l-1.56,-0.06l-0.41,0.4l0.55,1.55l0.79,0.92l8.43,5.75l1.1,1.06l4.59,6.36l5.04,7.73l6.5,11.03l0.6,0.16l0.5,-0.35l0.09,-0.58l0.86,-0.62l1.5,-0.34l0.42,-0.72l-0.09,-1.71l1.85,-0.96l0.89,0.1l0.79,0.91l0.93,0.01l-0.46,1.28l0.16,0.85l0.65,0.27l1.62,-0.15l0.32,1.74l0.56,0.45l3.42,-0.26l1.35,0.54l3.1,-0.2l0.97,-0.49l0.98,-1.1l1.82,-0.04l1.15,-0.91l1.29,-0.05l2.57,1.01l1.58,1.03l1.67,2.39l0.61,2.25l0.59,0.64l2.26,0.45l1.67,1.05l0.97,0.21l0.07,1.51l1.98,2.96l5.14,0.63l0.59,0.53l1.47,0.0l3.64,-2.68l-0.67,0.96l0.01,0.79l1.47,0.91l1.45,1.98l2.0,1.07l-2.66,0.15l-1.2,0.9l-0.36,3.14l-1.13,1.45l-6.08,1.5l-0.96,1.82l-0.76,2.8l0.45,4.09l0.61,1.53l-0.07,0.57l-1.1,1.62l-1.93,0.31l-2.97,1.82l-0.39,-0.9l-0.63,-0.4l-2.48,-0.23l-2.39,0.24l-2.17,-0.46l-4.68,-1.78l-0.74,0.25l-0.61,2.3l-3.13,7.56l-1.83,5.41l0.31,1.09l1.95,0.76l0.03,0.93l-0.52,1.22l-1.62,-0.86l-2.46,0.52l-0.88,-0.45l-0.34,-0.87l-0.92,-0.39l-6.12,1.99l-1.69,0.04l-4.31,1.11l-1.6,1.24l0.06,0.82l0.97,0.62l2.04,-0.05l1.07,0.43l-0.38,0.34l-0.41,2.18l0.14,3.17l2.24,5.03l0.35,1.1l-0.24,1.1l0.87,1.41l-1.02,-0.13l-1.69,0.77l-0.34,0.96l0.72,0.7l-1.42,0.56l-0.57,0.78l-0.33,1.2l0.71,3.27l-2.01,-1.79l-3.53,-0.57l-2.33,-2.68l-1.92,-0.03l-2.75,-0.82l-3.74,0.06l-5.84,-0.49l-1.92,-0.56l-3.62,0.5l-5.04,-0.17l-0.64,0.18l-0.91,0.93l-1.89,-0.19l-4.02,-1.25l-4.54,-2.38l-0.73,0.39l-1.36,-0.01l-3.25,1.86l-1.12,3.91l0.33,1.19l-0.86,-0.69l-3.16,-0.51l-0.81,-0.69l-3.56,-1.08l-3.49,-0.6l-2.34,0.48l-0.84,-0.12l-1.24,0.45l-1.88,1.87l-1.05,1.86l0.09,0.95l-1.3,0.47l-0.89,1.12l-0.6,-0.38l-0.76,0.09l-2.43,2.34l-3.9,1.67l-1.56,1.26l-2.24,1.13l-0.61,1.47l-1.85,1.44l-1.2,1.53l-0.29,1.22l0.32,0.85l-0.38,0.14l-1.35,-0.38l-1.57,-1.14l0.45,-1.71l-1.39,-1.84l-9.18,0.12l-1.51,-7.1l-0.39,-0.35l-3.27,-0.08l0.67,-8.49l-0.57,-0.39l-1.9,0.88l-2.11,-3.62l-1.8,-1.1l-2.72,-2.7l-1.13,0.14l-2.67,1.26l-9.15,-0.69l-8.97,1.25l-6.08,-6.05l-1.18,-2.1l-7.01,-4.12l0.16,-4.09l-0.32,-2.03l-0.55,-0.81l-1.7,-0.05l0.79,-2.36l4.16,0.6l3.04,-2.59l2.71,-1.03l0.78,-1.31l0.09,-0.76l-0.31,-0.59l-3.08,-0.71l-0.31,-1.74l-0.64,-0.6l-0.91,-0.15l-0.5,0.03l-0.32,0.58l1.13,0.99l-0.33,0.23l-1.16,-0.19l-0.4,0.28l-0.45,-0.86l-0.82,-0.28l-1.65,0.88l-0.66,1.3l0.28,0.84l0.66,0.56l2.26,-0.05l1.37,0.79l1.08,-0.56l0.53,1.15l-0.81,0.93l-4.22,-0.5l-1.77,0.48l-0.37,-2.0l-2.18,-0.48l-0.35,0.74l1.13,1.75l0.17,0.88l-0.58,1.96l-0.93,0.41l-0.51,-0.21l-0.53,0.4l-0.13,-0.6l0.7,-1.38l-0.33,-0.61l-0.63,-0.13l-0.95,0.42l-1.25,-0.14l-2.13,1.31l-0.9,2.61l-19.46,5.2l-0.29,0.39l0.01,32.99l-2.83,0.53l-0.57,-0.2l-1.35,-1.41l-2.96,-4.54l-1.41,-1.09l-4.37,-2.37l-3.36,0.36l-4.75,1.36l-1.5,0.85l-2.33,2.04l-0.09,-2.01l1.15,-2.89l0.17,-1.24l-0.41,-2.16l-0.95,-0.67l-1.69,0.1l-0.71,-0.56l-1.98,0.04l-2.08,-2.59l-2.26,-0.17l0.03,-2.63l-1.79,-2.47l-1.73,-4.01l-1.3,-0.88l-2.65,-0.56l-0.35,-0.85l0.23,-0.83l0.64,-0.3l3.16,-0.04l2.45,1.17l3.15,-0.49l-0.43,-0.87l-1.43,-0.45l-2.03,-1.99l0.08,-0.75l1.54,-1.3l1.11,-2.04l0.9,0.09l1.37,-0.5l5.13,-0.05l3.59,0.79l2.3,-0.12l0.16,-0.7l-2.99,-1.97l1.93,-3.52l0.7,-2.09l-0.18,-2.25l-0.32,-0.62l0.75,-1.88l-0.81,-1.87l-1.25,-1.02l-3.38,-0.4l-2.67,1.51l-1.0,-0.67l-1.73,-0.26l-1.03,-0.92l-3.56,-0.77l-2.01,0.69l-2.49,1.47l-1.33,0.11l-3.84,2.59l-4.01,0.71l-0.31,0.81l-0.94,0.66l-4.0,-1.89l-0.55,-0.56l0.02,-0.42l0.32,-0.14l1.13,0.48l1.1,0.05l0.75,-0.51l0.02,-0.71l-3.06,-5.19l-2.97,-3.78l-0.64,-0.44l-4.69,-0.56l-1.42,0.55l-1.14,-1.56l0.18,-1.65l-0.51,-1.3l-0.62,-0.61l-2.35,-1.11l-0.32,-1.28l0.65,-2.06l1.91,-2.2l0.57,-1.21l-0.2,-0.85l-1.49,-1.44l0.62,-2.97l0.71,-1.41l2.29,-2.06l0.24,-2.1l1.15,-1.1l1.13,0.2l3.84,4.33l0.94,0.79l1.03,0.29l2.46,-0.98l0.83,-1.02l-1.33,-5.63ZM248.32,97.54l1.41,-1.65l0.64,-0.08l0.28,-0.6l1.51,1.9l0.45,2.98l-4.3,-2.54ZM201.9,97.61l0.06,0.13l-0.08,-0.1l0.02,-0.02Z\", \"name\": \"Kazakhstan\"}, \"SA\": {\"path\": \"M67.56,247.08l1.06,-2.61l1.21,-6.57l8.14,1.18l3.22,-2.48l1.76,-2.79l5.69,-1.31l1.39,-2.79l2.37,-1.31l0.11,-0.62l-7.19,-7.71l14.36,-3.99l1.39,-1.04l8.92,1.5l12.67,7.05l19.68,15.46l12.58,1.15l1.36,-0.26l6.48,0.83l0.99,2.68l0.74,0.93l5.85,0.06l1.24,3.08l1.36,1.9l0.02,1.54l0.92,0.84l1.96,0.85l-0.09,0.58l1.74,2.09l1.07,0.33l1.25,1.48l2.47,1.51l-0.38,0.48l0.15,1.27l1.23,1.15l0.15,0.54l-0.3,1.16l-0.68,-0.02l-0.35,0.56l1.61,4.02l1.62,1.6l0.79,2.71l2.88,4.0l1.44,0.3l1.24,-0.31l0.58,0.29l-0.56,1.24l0.27,0.54l1.64,0.42l0.26,1.52l7.21,9.07l19.35,2.6l0.62,-0.35l3.01,4.88l-4.85,15.33l-22.24,7.7l-22.07,3.25l-6.65,3.39l-4.44,5.48l-1.05,2.59l-1.98,1.12l-0.97,-0.04l-2.04,-2.41l-3.15,0.26l-5.76,-0.54l-2.94,-0.97l-7.47,0.22l-1.72,0.54l-1.36,-0.25l-1.4,-1.05l-1.17,-0.12l-1.94,1.53l0.2,0.75l-0.46,0.41l-0.3,2.08l0.52,1.22l-0.09,0.47l-2.09,2.0l-0.74,-2.32l-2.34,-2.97l-0.72,-2.45l-4.07,-3.48l-1.74,-2.75l-0.63,-1.61l-1.43,-1.65l-0.88,-3.14l-2.67,-5.22l-1.18,-0.68l-1.03,-1.34l-3.01,-2.12l-1.56,-0.27l-1.05,-0.68l-3.32,-4.48l-1.26,-2.42l0.36,-1.64l-1.18,-2.86l0.78,-3.89l-0.25,-1.73l-0.41,-1.31l-0.77,-0.8l0.17,-0.38l-1.0,-1.2l-0.69,-2.03l-1.87,-3.31l-1.37,-1.63l-2.72,-2.14l-0.88,-0.15l-0.94,-0.69l-1.05,-0.1l-2.46,-3.84l0.54,-1.19l-0.93,-2.77l-1.71,-2.8l-1.2,-0.94l-0.59,-2.11l-1.27,-0.76l-1.95,-3.81l-3.0,-3.86l-0.72,-1.58l-1.32,-1.36l-1.19,-2.44l-1.82,-2.44l-1.05,-0.58l-2.95,-0.27ZM121.15,336.6l0.4,-0.33l0.04,0.83l-0.42,-0.42l-0.03,-0.07Z\", \"name\": \"Saudi Arabia\"}, \"MY\": {\"path\": \"M641.05,446.05l0.71,0.36l0.8,-0.15l0.31,-0.63l-0.05,-1.52l1.13,-1.14l8.26,-1.87l2.45,-1.08l3.07,-4.07l3.61,-3.82l0.56,-2.37l1.04,0.65l0.74,1.61l0.77,0.18l1.45,1.69l0.83,-0.12l1.04,-1.16l0.49,-1.72l-0.65,-2.41l1.27,-0.83l0.6,3.28l1.34,0.6l0.79,-0.16l0.23,-0.69l-1.05,-3.38l1.72,-0.53l1.0,-0.99l0.28,-0.89l-0.2,-0.46l-0.76,-0.4l-0.24,-0.75l0.85,-0.95l1.6,0.28l0.86,-0.69l1.46,-2.15l0.59,-1.82l2.63,-2.91l1.82,-3.25l0.07,1.03l-0.4,1.27l0.42,0.49l1.23,-0.56l1.41,-2.12l0.39,0.11l0.49,1.95l2.54,1.44l0.3,1.12l-0.58,0.84l0.21,1.26l-1.06,1.1l0.45,0.27l2.37,-0.42l1.26,-0.69l0.4,0.75l-1.28,0.7l0.39,0.84l0.8,0.12l1.71,-0.81l0.54,0.09l1.09,0.52l0.73,1.09l2.73,1.23l1.7,0.01l0.25,0.23l-0.17,1.1l-2.14,0.94l-1.73,0.42l-2.17,-0.4l-1.23,0.45l-0.5,1.64l1.11,1.27l1.74,1.22l-0.31,0.37l-3.61,0.82l-2.24,-0.68l-0.65,0.38l-0.47,0.91l-1.98,-0.95l-1.4,-0.29l-4.28,-0.24l-0.9,0.41l-1.26,-0.36l-1.67,0.49l-0.93,-0.39l-0.65,0.17l-1.34,1.23l-0.86,2.06l-0.01,3.59l-0.75,2.89l-1.52,0.08l-1.28,1.48l-0.09,1.78l0.74,0.64l-2.9,2.03l-0.23,0.94l0.5,1.26l-0.87,0.78l-1.12,2.74l-1.0,-0.3l-3.61,0.49l-1.97,1.43l-0.64,-0.42l-3.69,-1.0l-0.07,-0.54l-0.57,-0.44l-3.66,0.03l-2.38,0.96l-0.86,2.2l-1.16,0.28l-0.79,0.7l-2.19,0.08l-3.0,-0.4l-4.31,1.39l-5.53,-4.81l-0.52,-0.59l-0.12,-1.09l-0.67,-0.63l0.15,-0.41l0.53,0.81l2.05,1.09l2.87,0.04l2.35,1.25l1.7,0.14l1.46,0.96l1.09,0.05l0.35,-0.32l-0.2,-0.43l-1.23,-0.89l0.83,-1.07l0.2,-1.39l0.73,-1.77l-0.46,-0.71l0.0,-1.02ZM684.91,409.61l0.41,-0.56l0.41,-0.05l-0.11,0.45l-0.71,0.16ZM560.8,415.59l1.25,-0.03l0.88,1.55l1.37,0.16l0.1,1.64l-0.72,1.49l1.08,1.33l0.76,0.04l0.91,-1.13l1.92,-0.77l0.73,0.88l1.24,0.0l0.78,-0.51l0.47,-1.13l0.82,-0.81l0.26,-0.92l1.31,0.38l1.47,2.32l4.16,3.36l2.32,4.07l0.27,1.27l0.11,2.01l-0.8,4.74l0.67,1.89l-0.05,4.51l0.79,1.27l2.02,1.44l3.01,6.32l0.41,2.01l-0.51,-0.09l-0.34,-0.92l-1.12,-0.76l-0.17,1.27l-1.91,0.01l-1.28,0.88l-0.97,-1.56l-4.68,-2.31l-1.38,-1.41l-2.98,-1.53l-2.64,-2.36l-2.02,-0.89l-1.43,-1.29l0.34,-0.91l-0.49,-2.0l-4.16,-5.01l0.43,-0.68l-1.32,-2.52l-0.02,-2.17l-1.05,-2.92l-0.88,-3.99l-0.08,-3.02l-1.65,-3.37l0.29,-1.42l0.84,0.97l1.64,0.62ZM558.59,423.72l0.04,-0.52l0.15,0.07l-0.19,0.45ZM554.87,416.01l0.61,-0.22l0.15,0.23l-0.64,0.21l-0.12,-0.22Z\", \"name\": \"Malaysia\"}, \"YE\": {\"path\": \"M210.22,368.93l3.31,-0.15l1.6,0.56l-2.1,0.96l-2.93,0.3l-0.74,-0.15l-1.64,-1.15l1.07,-0.91l1.43,0.54ZM128.17,348.79l0.44,-0.21l0.08,-0.52l-0.6,-2.52l0.88,-2.78l-0.26,-2.55l2.7,-2.53l0.16,-1.06l-0.5,-1.03l0.13,-1.2l0.71,-1.07l-0.29,-0.74l0.95,-0.8l1.11,-0.07l1.35,1.04l1.75,0.31l1.77,-0.56l7.3,-0.22l2.88,0.97l5.8,0.55l2.98,-0.27l1.72,2.26l1.74,0.18l2.31,-1.32l1.14,-2.71l4.35,-5.36l7.46,-3.52l20.53,-2.86l5.51,12.84l0.6,0.39l1.9,4.24l-3.44,1.26l-1.95,1.39l-0.81,1.14l-0.47,1.65l0.32,2.18l-4.38,2.32l-4.33,1.48l-3.64,0.78l-2.72,1.43l-1.96,0.18l-4.21,1.47l-2.35,1.44l-0.94,1.48l-1.79,1.54l-2.77,0.39l-2.36,-0.34l-2.76,1.51l-1.63,1.45l-4.57,1.47l-6.42,0.52l-2.01,0.43l-2.12,2.11l-1.79,0.61l-0.9,1.3l-1.82,0.34l-1.28,-0.34l-2.53,1.26l-1.88,0.27l-2.61,-1.01l-0.88,0.19l-0.1,-0.73l-1.76,-3.14l0.35,-3.27l-0.45,-1.43l-0.97,-1.04l0.01,-1.45l-1.28,-4.7l0.07,-0.99l-0.57,-1.41l-0.93,-0.61Z\", \"name\": \"Yemen\"}}, \"height\": 555.5409752358405, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-au-mill.js",
    "content": "jQuery.fn.vectorMap('addMap', 'au_mill',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 825.8587272481366, \"bbox\": [{\"y\": 1031999.3824222308, \"x\": 12576510.61983689}, {\"y\": 5192718.429891739, \"x\": 17110757.239958208}], \"left\": 0}], \"paths\": {\"AU-ACT\": {\"path\": \"M794.2,620.06l-0.74,-0.7l-0.09,-0.95l-0.36,-0.43l0.22,-1.71l-0.27,-2.16l0.77,-2.93l-0.05,-0.84l6.7,-4.73l1.06,0.71l0.19,1.03l1.04,0.47l0.25,0.8l3.09,1.34l-0.61,0.33l-1.7,-0.25l-0.96,0.77l-0.84,-0.15l-1.45,1.71l-0.17,1.19l0.29,1.03l-0.43,1.37l-0.65,0.31l-0.33,0.73l0.4,2.65l-0.21,1.28l0.21,1.77l-1.05,1.68l-2.23,-1.11l-0.91,-3.56l-0.69,-0.11l-0.47,0.47Z\", \"name\": \"Australian Capital Territory\"}, \"AU-WA\": {\"path\": \"M6.6,387.61l0.55,0.12l0.14,0.51l-0.53,-0.45l-0.17,-0.19ZM7.72,388.83l0.24,0.12l0.33,-0.36l0.25,-1.88l0.27,3.72l0.73,1.63l0.65,0.38l0.49,-0.49l-0.61,-1.76l0.15,-1.63l0.33,-1.03l0.82,-0.4l1.14,4.7l-0.39,2.66l0.63,0.22l0.46,-0.25l0.41,-2.32l0.3,1.37l-0.02,2.86l0.4,0.42l0.65,-0.13l0.68,-1.56l-0.23,1.81l0.19,0.65l0.56,0.11l0.06,0.77l0.36,0.43l0.8,-0.35l0.09,-0.63l1.3,-0.42l1.02,0.13l0.38,-0.38l0.02,-0.62l0.79,-0.46l0.79,-1.28l-0.06,-3.96l-2.55,-2.57l0.59,-0.23l1.75,-3.47l0.09,1.5l0.71,0.53l-0.18,0.96l0.76,3.32l2.34,2.72l0.6,0.35l0.68,-0.11l1.16,-1.26l1.23,-0.64l0.55,-1.29l-0.87,-3.09l0.79,-2.79l-0.6,-1.51l1.07,-0.16l0.39,-0.55l-0.72,-1.27l0.61,-1.46l-0.09,-0.7l-2.36,-1.46l-0.59,-1.71l-0.86,-1.09l-0.91,-0.56l-0.72,-1.77l-1.89,-2.76l-2.79,-6.56l-2.47,-1.63l-0.96,-2.54l0.46,-1.39l-0.29,-0.67l-0.94,-0.51l-0.1,-1.02l0.34,-0.94l-0.39,-1.7l-3.69,-4.68l-0.99,-2.6l-0.13,-3.78l1.02,-1.7l-0.38,-2.91l0.9,-1.39l0.08,-1.79l0.92,-1.34l0.55,-2.07l0.74,-0.57l0.93,-2.6l1.74,-1.11l0.34,-0.63l0.87,-0.58l0.77,-1.85l0.3,-3.12l-0.75,-3.77l0.15,-0.79l0.68,-0.52l0.55,-1.19l-0.08,-2.98l-1.15,-3.51l-1.11,-1.18l-0.87,-0.35l0.15,-0.99l-0.54,-2.12l0.86,-0.68l0.97,-1.48l0.35,-1.79l1.25,-1.66l2.07,-6.51l1.07,-2.22l1.85,-2.53l2.4,-0.92l-1.0,2.44l-1.13,5.93l1.02,2.36l-0.31,1.28l0.57,0.54l0.46,-0.14l-0.86,1.23l0.16,0.89l-0.28,1.09l0.26,0.61l0.71,0.57l0.92,0.08l1.18,-1.3l1.16,-0.48l0.43,0.82l0.88,0.29l0.88,-0.62l0.55,-2.78l1.61,-3.41l0.04,-0.73l0.69,-0.42l0.53,-1.79l-0.15,-0.93l0.75,0.01l1.66,-2.9l0.37,-1.55l6.15,-3.44l0.76,-0.23l0.99,0.21l1.63,-0.84l0.55,0.16l2.6,-1.52l5.65,-2.27l3.32,-4.19l4.26,-2.22l1.39,-2.65l1.19,-1.18l4.84,-2.14l0.57,-0.74l0.37,-1.99l1.79,0.42l1.38,-0.8l2.39,-0.36l1.33,-0.87l0.35,-0.65l1.38,-0.34l2.48,-1.75l1.91,-2.38l-0.64,2.17l1.93,1.5l1.15,-0.13l3.54,-1.96l0.71,0.36l1.03,-0.58l0.03,0.65l0.9,0.94l3.62,1.08l3.66,-0.5l1.93,-1.1l0.72,0.35l0.69,-0.25l0.25,0.21l3.82,-1.38l0.8,-1.12l0.99,-0.34l0.45,-1.39l4.47,-3.05l1.79,0.35l1.89,-0.8l0.46,0.55l0.59,0.05l5.29,-1.21l1.72,0.31l1.29,-0.73l1.57,-0.32l3.44,-4.12l0.42,-1.3l1.61,-0.78l0.77,-0.93l1.12,0.81l0.66,-0.31l0.01,-0.69l0.27,-0.02l5.32,1.25l0.65,-0.24l1.19,1.12l1.69,0.33l1.26,-0.64l0.55,-0.64l1.19,-0.22l0.27,-0.88l1.45,0.07l9.6,-1.35l2.98,-0.94l12.97,-5.37l3.91,-2.63l4.15,-3.91l4.61,-6.55l2.78,-6.06l0.16,-0.96l-0.59,-0.89l1.85,-0.34l1.36,-1.24l0.25,-1.19l-0.7,-0.78l1.33,-2.4l0.89,0.33l1.23,-0.22l2.53,-1.88l0.84,-1.42l1.75,-0.93l0.78,-0.98l0.56,-0.1l0.41,-0.79l2.22,-1.04l0.69,-0.86l0.53,-1.49l-0.29,-1.71l-0.51,-0.49l-1.39,-0.44l-1.67,0.13l0.3,-0.95l-0.32,-2.43l0.26,-2.08l-1.37,-3.46l0.13,-4.93l0.49,-1.81l2.26,-2.58l0.08,-0.48l-0.34,-0.4l0.2,-0.27l3.14,-2.71l0.37,0.37l0.63,-0.05l0.44,-0.52l-0.01,-0.87l0.86,0.93l1.26,0.27l0.42,-0.19l-1.46,-2.73l0.52,-0.37l0.51,-1.1l0.37,0.39l0.78,0.12l1.55,-0.36l0.76,-0.55l1.48,0.41l0.49,-0.16l-0.08,-0.51l-1.52,-1.56l0.28,-2.05l0.4,-0.61l1.18,-0.11l1.21,-1.29l0.56,-1.93l1.32,-0.62l0.06,0.74l1.01,0.47l-1.13,-0.08l-0.41,0.46l0.05,1.19l-0.57,0.97l0.44,1.38l0.38,0.29l0.6,-0.16l0.44,1.47l0.72,0.04l0.51,0.48l-0.1,1.21l1.3,1.11l-0.29,1.94l1.09,0.71l1.57,1.83l0.23,1.56l2.13,3.26l0.03,1.14l0.4,0.82l1.11,0.8l1.39,1.81l0.3,1.05l0.87,0.99l0.35,1.71l0.6,0.16l0.56,-0.89l-0.04,-1.49l-0.57,-1.36l0.14,-1.79l0.59,-1.07l0.38,-2.16l0.72,-0.46l0.02,-0.43l-1.44,-2.22l-0.05,-1.29l0.21,-0.41l0.91,-0.06l0.38,1.21l1.32,0.36l0.79,1.32l1.15,0.72l0.82,1.17l0.72,0.33l0.86,-0.07l0.34,-0.38l-0.07,-0.53l-1.38,-0.9l-1.13,-3.09l0.76,0.51l0.63,-0.19l0.07,-0.85l-0.6,-0.82l0.92,-1.1l1.21,-0.72l0.4,-1.02l-0.11,-0.61l-0.58,-0.46l-0.58,0.27l-0.46,1.06l-2.16,0.65l-1.01,-1.49l-0.65,-1.78l-2.2,-1.59l-1.36,-0.36l0.41,-0.29l0.04,-0.63l0.92,-0.55l0.15,-0.71l0.42,-0.07l0.36,-1.69l-2.18,-1.12l1.74,0.57l1.52,0.07l0.38,-0.25l-0.53,-0.86l0.53,-0.24l0.14,-0.63l-0.4,-0.99l-1.17,-0.14l-0.8,-0.75l-0.77,0.21l-0.4,-0.25l0.44,-0.85l-0.27,-1.05l0.66,-0.01l0.16,-0.44l1.56,-0.12l1.68,0.32l-0.36,0.61l0.41,0.63l-0.85,0.15l-0.15,0.72l1.62,1.15l1.19,0.38l-0.69,0.76l0.66,1.48l1.31,-0.13l0.16,-1.68l1.35,0.91l0.65,-0.19l0.08,-0.51l-0.78,-1.4l0.69,-0.47l-0.28,-0.55l1.02,0.44l1.45,0.03l1.14,0.64l0.67,1.69l0.8,0.63l2.76,0.27l0.99,-1.26l1.81,0.94l2.67,0.18l3.74,-0.37l0.83,0.75l0.93,0.18l1.61,-0.6l-0.17,-0.71l-1.41,0.05l-3.15,-1.36l-2.8,-0.43l-2.09,0.45l-1.36,-0.2l-0.35,-0.9l0.24,-1.11l-0.29,-0.4l0.22,-0.73l0.81,-0.76l0.06,-1.74l0.29,1.37l0.92,1.21l0.73,-0.03l0.52,-0.98l0.71,-0.17l0.46,-0.5l-0.23,-2.61l0.66,-0.55l-0.12,-1.5l0.5,-0.5l0.62,0.37l0.51,-0.25l0.47,-1.23l0.44,-0.27l-0.07,-0.72l-0.79,-0.28l-1.94,0.09l-1.63,1.96l-0.73,1.65l-1.22,-2.82l-0.47,-0.15l-0.27,0.69l-0.39,-1.68l-0.07,-1.69l0.79,-0.36l0.21,-0.61l-0.02,-0.79l-0.57,-0.58l0.05,-0.8l0.96,-0.39l0.39,-1.11l2.59,0.94l0.84,-0.14l0.25,-0.74l0.9,0.04l0.43,-0.57l-0.37,-0.71l0.19,-0.74l2.14,-1.98l0.43,0.33l-0.2,0.37l0.37,0.6l1.67,-0.08l1.03,1.17l0.66,0.23l-0.35,1.04l0.43,0.44l0.64,-0.13l0.81,0.58l0.5,-0.26l0.1,-0.77l2.34,1.45l0.49,-0.11l-0.29,-0.85l-2.1,-1.81l0.32,-1.24l1.25,-0.84l-0.42,-0.54l-1.09,-0.63l-0.38,0.43l-0.95,-0.51l-2.49,1.29l-0.37,-0.86l0.73,-0.53l0.15,-0.48l1.65,-0.1l1.14,-1.4l-0.16,-0.59l-0.94,-0.32l-0.62,0.57l-0.57,-0.18l-1.7,1.46l-0.33,-0.2l0.27,-0.82l-0.42,-0.52l0.19,-0.45l0.64,-0.19l1.16,0.64l0.64,-0.04l0.55,-0.82l0.56,-0.03l0.25,-1.09l-0.43,-1.22l0.44,-0.06l-0.14,0.65l0.32,0.74l0.64,0.24l0.28,-0.23l1.15,2.49l0.72,-0.13l0.21,-1.1l-0.33,-1.19l1.25,0.5l0.57,0.56l0.01,0.62l0.91,0.57l1.18,-0.28l1.31,0.28l0.63,-0.36l-0.06,-0.99l-1.14,-0.17l0.35,-0.31l-0.16,-0.64l1.1,-0.9l-0.23,-0.54l-0.6,-0.19l-0.61,0.22l-1.21,-0.62l-0.74,0.15l-0.21,-0.81l0.48,-0.27l0.35,-1.16l-0.43,-0.53l-2.05,-0.52l-0.22,-1.39l-0.85,-0.45l1.1,-0.65l0.19,-0.8l0.94,0.13l1.09,-0.92l-0.16,-0.69l-1.16,-0.06l0.49,-0.53l0.87,-0.0l0.49,-0.49l-0.24,0.72l0.2,0.5l1.34,-1.02l0.92,1.77l0.44,-0.25l0.63,-1.93l0.4,0.02l0.08,-1.27l0.55,0.25l-0.43,0.48l0.38,0.71l1.47,-0.14l0.57,-1.32l0.29,-2.21l-0.59,-1.27l-0.1,-1.27l0.39,-1.07l1.75,1.65l-1.12,-0.02l-0.21,1.02l0.57,3.16l-1.0,1.96l-0.03,1.02l0.66,0.29l0.44,-0.45l1.29,-3.41l0.19,0.24l1.23,-0.37l0.29,0.17l0.27,2.61l2.1,1.41l0.51,-0.36l0.14,-1.12l-0.36,-0.51l0.21,-0.71l1.18,0.58l1.5,-1.0l-0.16,-1.36l-0.98,-1.42l1.61,-0.85l0.35,-1.31l-0.29,-1.24l0.8,-0.16l0.81,-0.62l0.28,-1.62l0.33,0.84l0.77,0.46l0.03,0.75l0.53,0.26l0.65,-0.19l0.56,0.38l0.54,-0.89l0.95,-0.52l-0.07,-0.49l-0.84,-0.85l0.69,-1.42l0.91,-0.33l0.25,-0.73l0.57,-0.42l1.1,0.19l-0.95,1.4l0.08,0.52l0.88,0.2l0.01,0.61l0.63,0.78l0.95,-0.09l0.14,1.36l1.12,0.66l0.33,-1.33l0.86,-0.53l0.12,-1.12l0.21,0.4l0.66,0.07l0.83,-1.13l0.41,-1.62l-0.22,-0.25l0.25,-0.26l1.39,0.21l0.58,-0.4l-0.08,-0.36l0.46,-0.58l-0.48,-0.55l-0.7,-0.17l-0.98,-2.29l0.73,-0.22l0.18,0.71l0.49,0.16l1.25,-0.85l-0.61,-0.82l1.15,0.43l0.41,-0.14l0.18,-0.68l1.25,0.98l0.0,0.86l1.03,0.64l-0.24,0.59l0.41,0.56l0.38,-0.05l0.36,1.28l0.63,0.51l0.49,-0.03l0.62,-0.85l0.3,0.47l0.51,0.01l0.78,-1.13l0.78,0.87l1.08,0.57l0.55,-0.4l-0.03,-0.36l1.09,0.83l0.47,-0.23l0.32,0.79l-0.01,1.32l0.76,0.62l0.65,-0.16l3.37,2.34l0.76,1.31l1.26,1.11l0.69,1.74l0.77,0.4l0.04,1.14l0.66,0.43l0.01,0.58l0.83,0.1l1.09,0.92l-0.09,0.63l0.35,0.66l0.65,0.17l0.81,-0.33l1.18,1.52l0.94,0.26l1.86,1.3l-0.5,0.86l0.32,1.32l-1.52,0.56l0.18,1.17l-1.43,4.84l0.35,1.61l-0.19,2.18l-0.71,0.57l0.63,2.33l-1.21,1.75l0.27,0.69l0.44,0.08l1.06,-0.62l0.87,-1.27l0.39,-2.13l-0.34,-2.22l0.16,-0.65l1.99,1.7l1.02,2.74l0.53,0.34l0.4,-0.37l0.05,-2.62l-1.59,-1.99l0.14,-0.96l-0.65,-2.18l1.77,-1.88l0.36,-0.97l0.66,2.67l0.33,0.2l0.6,-0.41l-0.06,-0.32l0.74,0.63l1.15,-0.11l0.27,-1.18l-1.18,-2.63l0.7,-0.6l-0.03,-0.36l-0.81,-0.66l2.56,-0.91l1.22,0.54l2.57,0.41l0.71,0.59l3.98,0.4l1.43,0.58l0.0,392.84l-4.85,2.15l-2.57,1.66l-9.6,4.19l-4.41,1.62l-5.58,0.97l-4.45,1.52l-0.78,0.66l-5.27,1.49l-5.2,0.74l-5.02,0.17l-0.9,-0.21l-2.3,0.36l-6.68,-0.82l-4.07,-1.22l-1.3,0.3l-1.25,0.84l-1.68,-0.14l-3.12,1.51l-7.31,5.26l-4.35,1.29l-5.37,2.74l-2.1,0.61l-2.3,2.44l-1.41,0.79l-2.7,0.87l-8.75,1.55l-3.46,2.6l-1.63,2.26l-0.58,2.46l-1.34,2.47l-1.19,5.16l-1.3,0.51l-0.74,1.13l-2.26,2.02l-0.58,1.27l-0.02,0.96l-1.69,0.89l-0.58,0.8l-1.25,0.24l-0.9,1.3l-1.2,-0.97l-1.88,-0.21l-1.03,0.41l-1.67,2.02l-2.03,0.47l-0.81,-2.47l-0.75,-0.73l-1.62,-0.47l-4.0,1.06l-1.45,-0.67l-0.92,0.34l-2.8,0.1l-0.86,0.44l-0.1,1.0l-0.71,-0.51l-0.71,0.3l-2.24,-0.69l-1.12,-0.02l-1.76,0.89l-0.41,0.77l0.03,0.84l-0.83,-0.54l-0.67,0.64l-1.7,-0.03l0.46,-0.91l-0.72,-2.02l-1.7,-1.96l-1.87,0.19l-1.35,1.06l-1.59,0.59l-1.02,-0.69l-1.12,-0.29l-1.4,0.48l-0.59,-0.63l-1.68,-0.78l-4.4,-0.11l-2.49,0.58l-1.26,0.68l-1.56,-0.58l-2.76,0.64l-2.24,-0.3l-2.76,0.86l-4.06,0.06l-0.63,0.47l-0.26,0.65l-2.63,0.86l-2.66,-0.85l-2.32,-0.18l-1.61,0.51l-1.25,-0.64l-1.03,0.0l-1.7,0.93l-2.81,0.61l-1.68,1.58l-1.98,0.91l-0.61,0.45l-0.02,0.51l-0.92,0.48l-0.81,1.76l-0.93,0.76l-0.53,1.29l-0.07,1.51l0.52,0.74l0.62,0.23l-0.46,0.11l-0.88,-0.71l-1.04,-0.04l-0.67,0.59l-0.19,0.67l0.31,1.19l-0.35,0.28l-0.33,-0.71l-0.54,-0.22l-0.9,0.23l-0.5,0.49l-0.2,1.33l-0.27,0.1l-0.49,-0.74l-1.27,-0.17l-0.75,-0.54l-4.09,-0.66l-0.86,0.31l-1.24,-0.14l-0.29,0.68l0.69,0.71l-1.63,0.29l-1.52,1.06l-0.19,0.97l0.4,0.67l-0.27,0.31l-2.33,1.17l-2.95,0.78l-1.01,0.71l-1.27,2.23l0.23,1.8l-2.62,0.09l-2.43,0.89l-0.27,0.58l0.92,1.25l-1.16,-0.76l-0.72,-0.02l-1.65,0.63l-2.26,-0.17l-0.51,0.36l-1.24,0.13l-0.52,0.43l0.05,0.76l-1.57,-0.57l-1.88,-0.05l-0.83,0.48l-0.53,1.53l-1.3,-0.92l-1.68,-0.38l-2.83,-1.5l-0.58,0.34l-2.82,-0.58l-0.63,0.28l-0.54,0.88l-1.7,-0.77l-1.12,0.12l-1.2,-0.37l-1.63,1.03l-2.96,-1.15l-0.7,0.48l-1.18,0.0l-0.6,0.46l-0.97,-0.63l-2.59,-0.53l-0.99,-0.9l1.58,0.35l0.47,-0.33l-0.0,-0.6l-1.47,-0.84l-1.24,-1.2l-0.73,0.18l-0.12,0.53l0.33,0.73l-5.98,-1.94l-2.35,-0.16l0.07,-0.55l-1.11,-2.05l-4.18,-4.58l-3.04,-2.43l-1.83,-0.74l-0.52,-0.75l-3.81,-1.8l-1.71,-0.43l-1.98,0.12l-1.12,1.25l-2.13,-2.39l-0.01,-1.99l-0.85,-2.0l-0.22,-5.5l0.57,-1.79l-0.66,-2.54l1.04,-1.72l-0.3,-1.87l0.58,0.25l1.59,1.93l1.82,0.78l2.08,0.17l2.04,-0.52l1.55,-0.93l1.93,-2.17l1.31,-2.16l1.07,-2.85l0.74,0.15l0.79,-0.31l0.39,-0.9l-0.11,-2.11l-0.44,-0.33l-0.33,0.13l0.1,-3.93l-1.62,-8.86l0.05,-0.2l1.18,3.03l0.69,0.42l0.53,-0.19l0.22,-0.68l-1.0,-2.68l1.42,-0.02l0.6,-1.09l-0.14,-0.76l-0.9,-0.58l-0.16,-0.43l0.67,-1.84l0.02,-1.0l-0.65,-1.26l0.41,-1.0l-0.66,-0.94l0.67,-0.5l0.48,-2.05l-0.61,-2.81l0.32,-3.54l-0.5,-3.84l-0.93,-3.11l-5.0,-8.45l-3.12,-7.6l-1.67,-2.77l-1.25,-1.25l-0.4,-1.98l-1.36,-2.69l-0.88,-2.66l-0.13,-1.79l-0.97,-3.04l0.27,-1.39l-1.05,-1.19l0.28,-1.7l-1.0,-2.68l0.54,-3.15l-0.44,-1.78l-0.03,-4.05l0.72,-4.4l-3.04,-9.05l-4.22,-4.79l-1.05,-1.7l-0.47,-1.24l0.31,-0.76l-0.13,-2.3l-1.36,-3.36l-2.41,-2.93l-2.49,-4.08l-1.48,-0.95l-1.68,-1.98l-1.46,-5.67l0.08,-1.38l0.93,-2.82l-1.54,-5.78l-1.41,-3.24l-5.49,-9.45l-3.84,-5.76l-6.42,-6.53l-0.03,-1.48l-1.01,-1.96ZM18.62,388.27l-1.37,-0.34l-0.1,-0.79l-0.71,-1.09l-0.84,-1.02l-0.71,-0.25l-0.39,-3.13l-0.81,-0.76l-0.21,-1.48l-2.02,-3.0l0.06,-1.45l1.39,-2.42l0.33,1.67l1.16,0.5l1.01,2.29l0.68,0.39l0.46,0.8l0.87,0.32l-0.05,1.44l0.82,0.76l-0.54,0.85l0.08,1.03l-0.4,1.0l-0.34,2.79l0.5,1.28l1.15,0.61ZM234.66,163.67l-0.3,0.64l-0.77,-0.62l0.41,-0.38l0.66,0.36ZM261.01,136.67l-0.34,-0.12l-0.02,-0.78l0.64,0.2l-0.29,0.7ZM273.13,127.84l-0.42,0.17l-0.69,-0.31l0.41,-0.28l0.71,0.42ZM305.17,106.76l-0.04,0.05l-0.04,-0.08l0.08,0.03ZM109.27,603.92l0.79,0.2l0.39,-0.35l0.55,0.47l-1.04,-0.02l-0.7,-0.3ZM292.84,109.4l-0.33,-0.77l-0.77,-0.53l-2.33,-0.08l-0.2,-0.42l0.81,0.08l0.31,-0.45l0.5,0.41l0.49,-0.02l0.21,-0.39l0.21,0.2l0.91,-0.47l0.42,0.37l-0.52,0.25l-0.1,0.92l0.49,0.46l0.39,-0.09l-0.48,0.53ZM291.55,106.2l-0.7,-0.84l0.13,-0.19l0.8,0.3l0.11,0.39l-0.33,0.36ZM26.98,297.37l0.2,-0.34l0.08,-0.28l-0.06,0.51l-0.23,0.12ZM21.38,383.22l-0.18,-0.67l-0.18,-0.36l0.44,0.37l-0.08,0.65ZM13.72,391.1l-0.26,-0.73l0.04,-0.18l0.04,0.12l0.18,0.8ZM341.51,126.92l1.04,1.78l0.15,0.53l-1.03,-1.19l-0.16,-1.12ZM336.53,131.41l0.66,0.52l0.17,0.83l-0.81,-0.64l-0.03,-0.71ZM269.49,120.11l0.09,-0.78l0.7,0.28l0.22,-0.4l0.03,-1.03l-0.43,-0.42l0.6,-0.44l0.52,0.32l-0.59,1.06l0.41,1.1l-1.03,0.54l-0.52,-0.22ZM262.85,135.22l0.12,-0.23l0.38,0.09l-0.18,0.26l-0.32,-0.13ZM255.73,137.28l0.07,-0.48l0.59,0.11l0.06,-0.65l0.36,-0.71l-0.06,0.67l1.33,1.26l-1.55,-0.44l-0.81,0.24ZM258.19,137.67l0.27,0.47l-1.17,0.44l0.67,-0.53l0.23,-0.38ZM53.11,262.46l0.49,-1.25l2.09,-2.25l0.28,1.38l-0.66,1.42l-1.06,1.08l-0.68,-0.48l-0.46,0.09ZM0.84,371.32l0.69,0.09l0.02,1.16l0.81,1.8l0.22,2.15l1.81,3.79l-0.45,1.63l-0.79,-0.61l-0.71,-2.12l-1.2,-1.51l-0.06,-1.91l-0.77,-1.59l0.01,-2.34l0.42,-0.54ZM4.36,382.54l0.68,0.06l0.9,1.27l0.4,1.24l-0.08,0.73l-0.66,-1.7l-1.23,-1.6Z\", \"name\": \"Western Australia\"}, \"AU-TAS\": {\"path\": \"M775.91,740.14l0.18,-0.61l1.22,-0.64l1.25,-0.12l1.53,0.42l0.39,-0.62l1.32,-0.18l1.0,-0.68l2.65,2.6l-1.26,1.25l-0.74,0.14l-0.31,-1.09l-0.36,-0.27l-0.9,0.01l-1.1,0.55l-0.88,-0.41l-0.59,0.32l-1.94,0.01l-1.47,-0.67ZM701.14,755.61l0.52,-1.09l-0.33,-0.65l0.57,-0.67l0.83,-0.3l0.33,-0.7l-0.19,-5.32l1.08,1.86l0.75,-0.25l2.11,0.73l1.93,0.0l2.0,1.61l0.93,0.36l0.66,-0.06l0.44,-0.64l2.09,-0.07l1.83,1.37l2.36,0.65l1.45,-0.42l0.27,0.79l0.97,0.7l3.26,0.66l0.35,0.94l1.55,1.44l2.31,0.39l0.34,0.5l1.11,0.15l2.21,1.29l3.03,1.09l4.8,0.32l2.54,-0.79l0.44,0.94l0.73,0.19l0.32,-0.12l-0.04,-0.84l1.35,-1.38l1.75,-0.64l0.77,0.49l0.27,0.68l-0.23,0.57l0.45,0.63l1.1,0.29l0.87,-0.33l1.15,0.25l0.28,-0.12l0.09,-0.69l-0.92,-0.79l-1.21,-0.24l-0.51,-0.42l0.22,-1.11l1.99,-0.53l1.7,-0.99l0.39,0.28l3.17,0.4l2.23,-1.47l0.49,0.19l0.75,-0.28l0.29,0.65l0.71,0.2l0.53,0.68l1.09,0.07l1.75,-1.55l1.63,-2.69l1.25,-0.47l0.9,0.96l1.04,-0.13l1.33,0.89l0.91,-0.09l1.76,-1.17l0.89,-2.58l0.96,-0.06l0.58,0.69l0.85,0.08l1.11,1.53l1.47,0.19l1.65,2.06l0.86,1.75l-1.21,1.02l0.23,0.6l0.43,0.18l-0.66,1.47l-0.06,2.17l1.06,1.68l-1.37,1.26l-0.01,0.86l0.66,0.24l0.87,-0.75l-1.05,3.2l0.04,2.27l0.74,1.84l-0.63,2.15l0.4,1.59l-0.95,1.52l0.62,1.91l0.75,1.17l-0.54,3.44l1.31,1.62l-0.18,0.19l-0.27,-0.37l-0.76,-0.1l-1.07,-1.0l-0.79,-0.26l1.03,-0.6l0.27,-1.03l-0.77,-0.66l-0.34,-0.9l-0.81,0.02l-0.24,0.42l0.25,0.75l-0.49,0.01l-0.51,0.56l0.14,0.98l-0.51,0.58l0.23,0.5l-1.0,0.44l-0.4,2.54l-0.83,0.82l-1.59,2.96l-0.0,0.49l0.47,0.12l0.78,-0.66l0.15,0.18l-0.57,0.81l0.04,3.77l-0.76,0.73l-0.64,-0.78l-0.92,0.67l-0.21,0.65l1.01,1.15l0.41,1.57l-0.11,1.59l-1.37,1.06l-0.12,1.59l-0.71,0.78l-0.13,0.95l-3.03,-0.02l-0.51,-0.6l-0.73,-0.21l-0.31,-0.85l-0.56,-0.3l-1.58,0.46l-0.74,0.53l-0.14,1.02l1.18,2.55l-0.47,0.72l-0.66,0.3l0.32,-0.9l-0.38,-0.7l0.23,-1.15l-0.5,-0.48l-0.85,0.37l-0.27,-0.85l-1.2,-0.7l-1.6,-2.32l-0.99,0.38l-0.1,0.55l1.29,1.49l0.85,1.82l-0.62,1.39l-0.01,1.29l-0.65,-0.58l-0.56,0.03l-0.38,0.43l0.12,0.87l0.76,0.85l-1.12,1.22l0.21,3.32l-0.68,0.54l-0.77,-0.36l-0.23,-0.83l-1.02,-0.08l0.44,-0.88l-0.64,-1.36l-0.9,1.09l-0.56,-0.14l-0.15,-1.76l-0.31,-0.31l-0.63,-0.0l-0.73,0.62l-0.34,1.4l0.2,0.98l2.15,1.5l0.65,0.83l-0.42,0.39l-0.5,-0.35l-1.03,0.11l-0.98,0.78l0.34,0.64l1.49,-0.02l-1.02,1.53l-1.77,0.35l0.11,0.45l0.84,0.52l-0.64,0.82l0.34,0.86l-1.11,0.16l-0.17,0.7l0.39,0.63l0.67,0.28l-0.18,0.3l-1.5,0.71l-0.95,-0.81l-2.01,0.44l-0.68,-1.02l-1.51,-0.82l-0.37,-1.5l-0.76,-0.85l-0.58,0.18l-0.13,1.16l-0.58,0.36l-2.72,-0.16l-0.69,-0.53l-0.57,0.01l-0.68,0.59l-0.51,-1.02l-0.79,-0.24l-0.82,0.25l-0.31,0.65l-0.92,-0.32l-1.0,0.36l-0.25,0.56l-0.96,0.17l-0.06,-2.24l-1.17,-1.47l0.7,-0.49l-0.18,-0.38l1.98,0.39l1.05,1.35l0.66,-0.17l0.28,-0.99l0.67,0.67l0.55,-0.15l0.22,-0.49l-0.2,-1.84l-1.28,-1.21l-0.64,-0.18l-1.07,1.44l-0.33,-0.95l-0.5,-0.38l-0.68,0.25l-0.29,0.86l-0.87,-0.89l-0.31,-1.59l-1.06,-0.88l-0.69,0.22l0.01,1.14l-0.71,0.21l-0.33,0.71l0.52,0.55l-0.5,-0.09l-0.66,-1.28l-0.09,-1.02l-1.0,-0.88l-0.55,-0.98l-0.02,-0.8l-0.58,-0.43l-0.72,0.08l0.36,-0.97l-0.22,-0.46l-1.06,-0.56l-0.89,-1.49l-1.88,-0.34l-0.77,-1.06l-1.6,-3.63l-0.62,-0.54l0.38,-0.91l-0.76,-1.87l-0.75,-0.35l-0.3,-0.76l-0.71,-0.36l0.48,-0.63l-0.05,-0.54l-1.02,-1.32l-0.25,-0.92l0.17,-1.07l-0.76,-2.4l-0.12,-2.02l0.23,0.5l1.4,0.51l0.46,0.92l2.3,1.52l0.31,2.21l0.53,1.36l0.51,0.12l0.37,-0.39l0.07,-1.86l0.82,-0.31l0.84,-2.24l-0.45,-0.51l-0.51,0.16l-0.62,-0.76l-0.64,0.3l-2.04,-2.31l-0.63,-2.52l-0.92,-0.08l-1.11,1.12l-0.06,0.68l-0.19,-0.18l0.74,-1.88l-0.37,-2.3l-1.05,-2.07l-3.16,-3.02l-0.17,-0.78l-2.1,-2.85l-0.86,-0.29l-0.11,-1.3l-1.06,-2.82l-1.6,-2.62l-0.86,-0.71l0.62,-0.58l-0.05,-0.83l-2.13,-3.69l0.17,-1.34l-0.51,-1.38l0.11,-1.12l-1.25,-1.88ZM728.8,816.42l0.31,-0.04l-0.13,0.05l-0.17,-0.01ZM763.12,809.37l-0.0,0.0l-0.0,-0.0l0.0,0.0ZM772.39,806.05l1.04,0.09l0.62,-0.56l0.72,-0.08l0.4,0.7l-0.24,0.67l0.42,0.77l-0.78,0.52l-0.48,2.66l0.54,0.76l-0.24,0.63l0.31,0.61l0.49,0.06l-0.55,1.1l-1.07,-1.0l-0.3,-1.05l-0.59,-0.09l-0.67,0.76l-0.06,1.04l-0.94,0.9l-1.74,-1.75l-0.04,-0.31l1.01,-0.75l-0.16,-0.65l-2.06,-0.8l-0.47,-1.06l1.17,-0.68l0.13,-1.22l0.29,0.02l-0.14,1.72l1.08,0.91l1.32,0.46l1.6,-0.38l0.9,-1.06l-0.92,-0.28l-0.52,-0.57l0.38,-0.85l-0.62,-0.47l0.17,-0.77ZM773.75,805.05l-0.3,-0.1l0.19,-0.13l0.11,0.23ZM782.69,786.98l0.48,0.4l-0.65,1.33l-0.64,-0.37l0.81,-1.36ZM715.42,748.93l-0.01,-0.04l0.02,0.03l-0.02,0.01ZM770.83,726.2l0.73,-0.69l1.05,-0.4l0.54,-1.75l1.33,-0.92l4.41,5.45l1.15,0.56l1.6,0.24l-0.18,2.53l-1.31,1.2l0.19,0.61l0.47,0.17l1.26,-0.51l0.3,0.87l-0.78,0.1l0.09,1.04l-1.61,-0.36l-0.44,0.32l-0.23,0.9l-1.13,0.45l-1.34,-0.62l0.15,-1.04l-0.85,-0.83l-0.31,-1.65l-1.1,-0.56l-0.4,-1.1l-0.91,-0.37l0.39,-1.15l-0.64,-2.15l-0.82,-0.26l-0.84,0.45l-0.79,-0.49ZM781.82,734.78l0.24,0.18l0.21,0.1l-0.15,-0.02l-0.3,-0.26ZM778.3,743.36l0.29,-0.21l1.68,-0.45l-0.58,1.72l-1.39,-1.06ZM776.58,800.95l0.06,-0.14l0.21,-0.74l0.35,0.76l-0.62,0.12ZM776.83,799.75l-0.62,-0.54l0.18,-0.67l1.04,-0.69l0.77,0.14l0.52,1.28l-1.61,0.04l-0.28,0.44ZM760.43,812.89l0.88,-0.13l0.26,-0.64l-0.5,-0.41l0.15,-0.41l0.63,0.7l0.81,2.88l-1.09,0.08l0.75,-0.82l-0.05,-0.55l-1.82,-0.69ZM760.67,715.79l0.04,-0.13l0.16,-0.03l-0.03,0.13l-0.17,0.03ZM756.56,820.97l0.74,0.3l-0.31,0.42l-0.25,-0.25l-0.17,-0.47ZM757.82,819.58l-0.12,-0.84l0.42,0.52l0.64,-0.12l0.38,-0.87l-0.24,-0.7l1.13,-1.29l1.05,2.76l-1.03,2.78l-1.1,-0.5l0.22,-0.21l-0.27,-1.27l-0.49,-0.39l-0.61,0.12ZM706.76,746.86l0.78,-0.8l1.66,1.11l-2.38,0.79l-0.05,-1.1ZM706.24,740.79l0.67,-0.6l0.05,-0.52l0.96,0.27l-0.23,0.91l-0.83,0.35l-0.61,-0.41ZM703.28,742.17l0.9,-0.24l-0.57,1.61l-0.03,-0.9l-0.3,-0.46ZM684.28,723.01l0.13,-1.18l1.05,-0.44l0.81,-0.82l-0.21,-1.8l0.62,-0.16l1.94,1.27l0.55,1.1l-0.15,1.17l0.45,2.18l-0.45,2.24l0.82,0.76l-0.08,1.46l-0.52,1.11l-1.26,1.06l-2.69,1.29l-0.56,-1.28l0.39,-0.73l-0.15,-1.84l-1.05,-0.93l0.11,-1.58l0.53,-1.27l-0.27,-1.63Z\", \"name\": \"Tasmania\"}, \"AU-VIC\": {\"path\": \"M620.45,577.42l1.14,1.21l2.11,0.1l1.28,0.63l1.04,-0.33l1.31,0.86l0.48,0.73l1.59,-0.13l1.38,0.83l1.13,0.1l0.3,0.79l0.52,0.35l0.9,-0.21l1.36,-1.59l1.53,-0.9l0.81,-0.15l2.05,0.67l4.47,-0.38l1.21,1.38l1.09,-0.3l0.97,0.8l0.72,-0.01l0.4,1.77l1.11,1.26l0.98,0.72l1.06,-0.11l-0.66,1.79l0.3,2.79l1.84,1.86l-0.01,0.73l1.19,2.11l0.03,0.84l0.72,0.68l1.65,0.56l0.83,-0.12l0.24,-0.55l-0.29,-0.75l1.09,-0.03l0.31,-0.33l0.0,-1.14l0.6,-1.85l1.08,-0.42l1.15,0.8l0.5,1.34l0.55,0.23l0.87,-0.49l0.98,0.75l0.75,-0.41l0.95,0.51l2.0,0.17l2.56,1.29l0.22,0.75l0.43,0.3l0.81,-0.22l0.43,0.31l-0.01,1.33l-0.46,0.63l0.14,0.86l-0.29,1.01l0.76,3.74l1.34,2.19l3.48,1.42l0.17,1.13l-0.33,0.72l0.34,0.84l1.51,0.96l2.75,0.72l2.73,1.85l1.7,0.73l0.54,0.89l2.13,0.73l1.75,2.29l2.17,1.78l1.11,0.21l0.52,0.48l1.51,3.4l0.72,0.91l0.94,0.38l2.46,2.69l1.74,0.45l1.49,1.34l1.81,-0.16l1.55,-1.29l1.47,0.55l0.73,-0.25l0.26,-0.74l-1.1,-1.82l0.6,-1.22l0.18,-1.4l0.56,-0.43l4.47,-0.4l2.54,0.62l1.02,-0.07l2.63,-1.11l1.48,0.31l3.76,3.03l1.04,0.44l1.21,0.1l2.18,-0.42l1.01,1.2l1.69,0.07l3.41,0.96l0.78,-0.49l2.89,0.41l0.54,-0.29l0.98,-1.52l0.71,0.19l0.62,-0.31l0.89,0.48l1.64,0.0l1.32,1.16l1.46,0.14l0.51,0.55l0.87,0.07l0.57,0.57l0.98,-0.08l1.15,0.68l0.89,-0.08l0.73,-0.57l0.49,0.25l0.22,2.17l1.02,1.1l0.68,0.29l1.98,-0.53l0.24,-0.6l-0.41,-0.45l-1.39,-0.25l-0.42,-0.55l-0.29,-1.39l0.9,-1.28l0.91,0.58l2.34,-0.36l0.93,0.56l0.64,-0.1l0.87,-2.36l0.44,-0.39l1.53,-0.31l1.45,1.23l3.55,-1.41l4.11,1.58l0.72,0.95l1.16,0.39l-0.17,1.25l1.14,1.35l-0.28,1.57l1.02,2.77l-0.39,0.99l0.17,0.76l1.43,1.31l0.43,2.62l0.47,0.55l0.64,0.17l0.28,0.6l-0.18,1.14l-1.8,2.76l0.17,0.69l2.14,0.37l38.27,17.79l-1.13,0.44l-1.87,0.14l0.15,-0.62l-0.54,-0.48l-0.57,0.34l-1.36,-0.04l0.97,1.9l-0.85,0.83l-0.97,1.7l-1.18,0.37l-0.58,0.67l-1.79,0.52l-0.6,0.74l-3.0,0.02l-1.42,0.64l-0.53,-0.57l-1.73,0.02l-1.01,-0.34l-0.88,0.33l-6.71,0.22l-1.4,0.64l-2.64,-0.31l-6.65,0.32l-3.93,0.87l-4.73,1.57l-3.56,1.73l-3.8,2.5l-4.29,3.58l-11.72,11.33l-0.6,-0.24l-3.07,0.64l-1.59,-0.02l-1.04,0.63l-2.53,0.18l-0.98,0.62l-1.35,-1.02l-2.17,0.19l-0.9,0.45l-0.92,1.07l0.02,0.55l1.16,1.54l0.51,0.19l0.39,1.91l0.46,0.44l0.92,-0.1l0.93,-1.06l1.12,-0.28l0.84,-1.48l-0.12,1.49l0.31,1.25l-0.62,0.69l-0.43,1.89l0.26,0.57l0.64,0.12l0.1,0.34l-0.88,0.51l-0.09,1.09l-0.47,0.24l-1.19,-0.75l0.43,-1.13l-1.3,-0.97l-0.5,-0.74l-0.35,-1.56l-1.63,-1.92l-2.27,-1.31l-1.65,0.31l-0.49,0.61l-0.14,1.18l-1.15,0.18l-0.47,-1.82l-1.59,-2.78l0.63,-0.55l-1.05,-1.4l-2.06,-0.39l-2.73,1.05l-1.72,-2.48l-2.3,-0.94l0.53,-0.49l-0.04,-2.03l1.39,0.16l1.46,-1.45l-0.13,-0.61l-0.76,-0.68l-0.0,-0.98l-1.39,-1.91l-0.89,-0.23l-2.3,0.4l-1.26,-0.23l-0.53,0.27l-0.08,0.66l-1.3,1.82l0.5,1.79l-2.19,-0.08l-0.59,0.81l-0.77,0.32l-0.56,1.11l-2.03,0.27l-2.71,-2.43l1.96,-0.16l2.41,-1.1l0.13,-0.91l2.7,-3.61l0.3,-1.01l-0.49,-2.25l-0.66,-0.81l-1.1,-0.51l-1.1,-2.62l-1.38,-0.92l-0.52,0.05l-0.41,0.71l-1.6,0.05l-0.64,1.2l-1.45,0.61l-1.35,1.24l-2.57,0.83l-0.7,0.73l-0.2,0.78l-0.67,-0.31l-1.8,0.21l-0.86,0.58l-0.23,0.72l0.58,0.74l3.26,0.58l1.03,-0.15l1.96,-1.15l0.87,0.42l0.25,0.27l-0.16,0.86l-0.94,0.68l-0.45,1.12l-2.31,0.05l-0.88,0.33l-1.09,-0.33l-1.12,0.35l-3.29,2.52l-0.88,0.21l-0.56,0.67l-1.15,0.37l-0.39,0.49l-1.44,0.48l-1.25,1.29l-0.16,0.88l-1.16,0.49l-0.78,1.47l-1.23,1.14l-3.04,0.93l-0.96,1.56l-1.16,0.49l-1.4,1.26l-1.7,-1.48l-2.17,-1.05l-2.9,-0.03l-2.26,-2.27l-1.38,-0.84l-2.55,-0.47l-2.95,-1.02l-3.41,-2.67l-3.03,-1.75l-0.51,-0.86l-0.75,0.09l-0.36,0.55l-1.1,-0.8l-2.03,-0.03l-1.98,0.99l-0.94,-0.16l-1.79,-0.82l-3.21,-2.13l-4.33,-0.58l-2.06,0.6l-0.98,0.67l-0.46,1.21l0.66,1.07l-0.84,-0.15l-0.94,0.99l-0.63,-1.04l-0.79,-0.4l-1.21,-0.03l-0.63,0.72l-0.2,-0.13l0.47,-0.83l0.03,-0.8l-0.65,-1.02l-3.6,-3.06l-5.25,-2.81l-0.02,-101.54ZM742.48,697.34l0.55,0.15l0.64,-0.09l-0.38,0.36l-0.82,-0.42ZM716.12,685.94l1.1,0.42l1.64,-0.19l0.63,0.66l-1.27,0.18l-1.26,1.21l-1.1,-0.5l-0.23,-0.8l0.5,-0.98ZM712.85,690.71l0.94,-0.82l1.89,-0.13l0.14,1.03l-0.84,-0.19l-1.24,0.42l-0.89,-0.32ZM716.43,691.14l0.01,0.0l0.0,0.01l-0.01,-0.01Z\", \"name\": \"Victoria\"}, \"AU-NT\": {\"path\": \"M355.89,126.72l1.43,0.54l0.66,1.11l1.18,0.57l-0.2,1.55l0.52,1.31l-1.0,2.33l0.41,0.54l0.8,-0.37l0.55,0.68l0.36,-0.31l0.6,-2.58l0.49,-0.44l-0.78,-4.9l0.52,0.33l0.64,-0.59l1.03,0.3l0.51,0.66l2.19,0.62l0.78,1.64l1.18,0.87l0.52,1.27l-0.27,1.14l0.63,0.38l1.17,-0.69l0.13,1.03l0.59,0.39l1.08,-0.12l0.42,-0.62l-0.27,-0.77l-1.39,-1.58l-0.59,-1.47l-0.31,-1.57l0.64,-2.04l0.84,0.36l2.26,0.15l1.69,-0.58l1.08,-1.02l1.02,0.33l0.59,-0.38l0.23,-1.7l-0.3,-0.67l-0.72,0.13l-0.4,0.77l-3.15,1.24l0.23,-0.64l-0.39,-0.44l-1.53,0.59l-0.95,-0.69l-0.06,-0.78l-1.33,-1.03l-0.31,-0.85l2.52,-0.26l1.78,-1.56l0.08,-0.44l-0.95,-0.2l-2.08,0.94l-2.74,-0.62l-3.7,-2.86l0.28,-1.52l0.77,-0.95l0.26,-1.19l1.44,-1.63l0.21,-2.05l0.6,0.53l1.35,0.04l0.46,-1.19l2.27,-0.41l0.59,-0.67l0.37,-1.68l-0.73,-1.26l2.12,-2.22l-0.63,-1.84l0.96,-2.36l0.18,-1.48l0.8,-0.81l0.24,0.82l1.41,0.58l1.88,-0.59l1.47,-1.14l0.69,0.07l2.55,-3.01l1.48,0.53l0.46,-0.5l-0.51,-1.03l-1.59,-0.69l-1.78,-2.36l-0.83,-0.24l0.25,-4.55l0.71,-0.34l0.44,0.51l0.63,0.11l2.3,-0.95l0.81,-1.58l0.19,-2.26l-0.27,-1.21l0.75,0.16l1.04,-1.19l1.41,0.56l0.41,-0.13l0.45,0.72l0.98,0.63l0.59,0.15l1.83,-0.39l0.2,-0.41l-0.27,-0.49l-1.82,-0.53l-0.17,0.19l-0.29,-0.43l0.83,-0.72l-0.25,-0.76l-0.54,-0.16l0.51,-1.4l-0.28,-1.0l0.59,-0.71l-0.49,-0.57l3.22,0.87l0.28,3.32l0.36,0.29l0.4,-0.24l0.18,-0.68l1.09,1.52l0.95,0.59l0.17,-0.86l0.96,0.54l0.47,-0.03l0.12,-0.45l-0.37,-0.8l-1.57,-1.29l1.43,0.6l0.52,-0.51l-0.45,-0.84l-1.66,-1.32l-1.04,0.07l0.11,-0.54l1.38,-1.41l2.94,0.86l0.58,-0.35l-0.55,-1.6l-0.05,-1.64l-0.6,-0.88l0.37,-0.57l0.86,0.42l0.75,-0.33l0.46,0.58l0.73,-0.0l1.37,1.27l0.88,0.07l0.28,-0.64l-0.37,-0.52l0.4,-0.52l0.38,-2.28l0.44,2.5l0.46,0.88l2.48,1.77l1.15,0.19l1.81,-0.3l0.89,0.27l3.76,-0.58l2.28,-1.2l0.73,0.99l2.99,1.03l1.51,-0.79l1.15,-1.14l1.17,-0.47l0.35,-0.92l0.29,1.26l0.42,0.3l1.53,-0.59l0.35,0.15l0.82,1.76l-0.72,0.87l0.27,1.2l0.44,-0.13l1.4,-1.85l-0.53,-1.81l0.28,-1.37l2.47,-1.29l2.47,1.0l1.84,-0.08l0.33,-0.34l-0.23,-0.41l-0.97,-0.17l-1.35,-0.9l-0.34,-0.63l0.55,-4.39l-0.29,-0.79l-0.93,-0.66l1.2,-1.36l0.3,-0.8l0.69,-0.52l-0.25,-0.52l-2.48,-0.89l-0.42,-0.42l0.04,-0.79l-1.36,-1.68l-2.0,-0.99l-1.7,-0.07l-0.85,0.51l-1.48,-0.13l-2.67,1.45l-0.56,-0.01l-0.89,-0.88l0.45,-0.33l-0.06,-0.59l-0.72,-0.45l-0.75,0.12l-0.39,-0.49l0.26,-0.48l-0.26,-0.6l-0.93,-0.07l-0.29,-0.65l-1.67,-0.4l0.19,-0.67l-0.29,-0.59l0.65,0.12l0.31,-0.44l1.12,1.2l1.11,-0.64l0.22,-1.89l1.18,1.08l0.09,0.61l0.63,0.31l-0.02,1.95l0.97,0.59l0.15,0.87l0.72,0.6l0.65,0.09l0.45,-0.41l-0.1,-0.68l0.54,-0.1l0.28,-0.54l-0.24,-0.71l-0.69,-0.59l-0.1,-1.82l-0.92,-1.49l1.29,1.37l0.52,1.33l0.61,0.42l0.59,-0.26l-0.27,-2.08l0.23,-0.17l0.88,-0.06l0.54,1.12l-0.12,1.35l0.48,0.6l0.85,-0.35l0.36,-1.13l0.55,0.15l0.8,1.44l0.09,0.82l0.74,0.13l0.51,0.82l0.92,0.65l1.56,2.4l0.92,0.18l0.77,-0.25l2.29,-2.34l0.84,0.39l0.51,-0.27l0.02,-1.42l0.27,0.12l0.45,0.85l1.12,0.89l0.7,1.32l0.71,0.41l-0.02,1.13l2.08,3.26l0.6,0.4l1.73,0.29l0.68,-0.22l0.54,-0.63l-0.36,0.83l0.49,0.69l1.49,-0.16l1.87,0.84l1.16,-0.57l-0.37,1.57l0.25,0.59l0.63,-0.08l0.51,-1.11l0.36,-0.16l0.6,0.69l1.22,-0.31l0.56,-0.94l1.39,-0.13l1.2,-1.22l2.01,0.54l-0.37,0.46l-0.54,-0.01l-0.67,0.49l-0.28,0.88l0.36,0.71l2.24,1.34l1.74,-0.71l0.61,-0.85l0.61,0.7l0.04,0.97l0.65,0.15l0.77,-0.71l0.56,0.98l-0.21,0.48l0.48,1.02l-0.13,1.22l0.48,0.48l0.44,-0.08l1.39,-1.4l0.25,-0.92l2.1,1.59l3.19,0.51l1.95,-0.17l2.34,-2.22l0.91,-0.21l0.08,0.87l0.76,1.16l0.66,0.04l0.26,1.33l0.42,0.57l2.25,0.41l0.74,1.27l1.63,1.31l1.69,-0.34l1.21,1.09l0.66,0.15l0.64,-0.73l-0.84,-0.85l0.78,-0.1l0.95,0.75l1.48,-0.58l0.14,-0.51l-0.55,-0.37l-0.71,0.11l-0.79,-0.46l1.35,-0.85l-0.07,-0.65l0.9,-0.46l0.5,0.03l0.55,0.53l0.9,-0.0l1.12,-0.38l0.33,-0.43l1.32,0.46l3.01,-2.03l1.74,-0.44l-3.61,3.27l-0.08,1.18l0.41,0.91l1.39,1.68l0.72,-0.01l0.41,-0.85l0.82,-0.29l0.36,-0.87l1.49,-1.33l0.23,0.5l0.51,0.03l-0.02,0.65l0.67,1.14l0.62,0.18l1.11,-0.48l-1.36,2.32l0.96,2.34l0.69,0.3l0.64,-0.59l0.57,0.2l1.04,-0.26l0.7,0.59l1.87,-0.49l0.8,-0.63l1.99,-4.17l-0.64,-1.1l-0.92,-0.24l-1.54,0.19l-0.5,-0.45l1.88,-2.33l0.91,-0.13l2.26,-1.98l0.44,1.01l1.05,-0.28l0.53,1.73l0.51,0.32l0.17,1.83l2.36,2.63l1.07,-0.01l1.13,-0.95l-0.14,-0.74l-0.99,-0.54l0.7,-0.31l1.14,0.95l1.2,0.29l0.59,0.76l0.39,0.54l0.21,1.46l-2.14,2.06l-0.64,-0.57l-1.36,0.71l-0.27,1.06l0.23,1.17l-1.02,1.14l-0.49,1.24l0.13,0.5l-1.11,0.01l-0.58,0.49l-0.14,0.7l0.42,0.7l0.02,0.88l-0.82,-1.83l-0.94,0.06l-0.39,0.77l-0.38,-0.31l-0.7,0.18l0.33,2.22l1.2,0.82l0.42,0.78l1.56,0.74l-0.78,0.36l-0.25,-0.55l-0.63,-0.24l-1.42,0.59l0.09,1.04l1.24,1.19l-0.47,1.3l-0.65,0.1l-0.48,0.57l-0.13,1.09l-0.36,-0.15l-0.87,0.49l-0.41,-0.69l0.03,-3.0l-0.34,-0.4l-0.87,-0.21l-1.0,1.24l0.14,1.41l-0.73,-0.8l-0.5,0.09l-0.49,0.62l0.23,0.98l-0.51,0.16l-0.24,0.52l-0.65,0.18l0.24,-1.9l-0.2,-0.55l-0.73,-0.19l-0.98,0.98l-0.43,1.25l-0.63,0.29l-0.78,-0.49l-0.55,0.18l-0.51,0.85l-1.04,0.28l-0.86,1.28l-0.12,1.22l0.92,0.53l-0.04,0.67l-0.69,-0.17l-0.67,0.42l0.16,2.52l-0.53,1.2l0.61,1.41l0.53,0.45l-0.17,0.94l0.55,0.75l1.0,0.26l0.88,-0.25l0.96,-0.9l-0.77,1.64l0.12,0.68l-0.45,1.68l-1.53,1.44l-0.36,4.83l-0.97,0.3l-2.22,1.56l-2.03,3.61l-0.95,0.14l-0.36,0.51l-1.73,2.95l-0.27,1.53l-1.29,0.63l-0.46,0.76l-0.98,-0.21l-0.54,0.36l0.71,2.49l1.55,3.17l1.87,1.66l1.5,0.65l0.72,-0.09l1.3,1.43l1.12,0.22l2.19,1.33l1.95,1.96l2.1,0.89l1.25,1.01l2.72,1.38l0.57,1.19l0.45,2.19l1.76,1.3l1.49,0.19l2.44,2.16l0.71,0.19l0.72,-0.29l0.3,0.79l2.35,2.35l-0.34,0.98l0.27,0.76l0.97,0.22l0.93,-0.81l1.73,0.17l0.76,0.59l0.64,0.01l0.37,-0.38l0.03,-0.66l0.85,-0.47l1.18,1.18l3.37,1.42l3.66,3.14l1.02,0.16l0.39,0.47l0.56,0.0l0.88,0.62l1.38,-0.11l4.14,1.73l2.62,4.12l2.88,2.37l0.0,218.24l-198.16,0.0l0.0,-255.87ZM418.04,45.87l-0.23,0.1l-0.15,0.02l0.09,-0.18l0.29,0.07ZM509.0,65.5l0.07,-0.13l0.12,0.01l-0.17,0.1l-0.02,0.01ZM518.27,90.23l-0.04,0.06l-0.02,-0.06l0.06,-0.0ZM508.38,93.8l0.1,0.07l0.23,0.03l-0.17,0.11l-0.16,-0.21ZM511.01,67.43l0.01,-0.01l0.26,-0.13l0.02,0.05l-0.29,0.08ZM503.74,61.54l-1.64,0.29l-0.96,0.68l-0.1,-0.28l0.55,-1.12l0.88,0.27l1.23,-0.79l0.91,0.15l-0.88,0.81ZM504.85,60.62l0.64,-0.4l1.03,-0.82l-0.72,0.91l-0.94,0.3ZM507.15,58.75l0.0,-0.01l0.01,-0.0l-0.01,0.01ZM508.1,57.51l-0.08,-0.33l-0.22,-0.51l0.56,0.19l-0.26,0.65ZM360.85,126.32l-0.01,-0.05l0.0,0.0l0.01,0.05ZM531.38,144.9l0.16,-0.53l0.78,0.13l0.28,-0.96l1.18,0.72l-0.1,2.04l0.58,0.62l-0.44,0.97l-0.38,-0.82l-0.77,-0.33l-0.36,-1.55l-0.93,-0.28ZM519.62,110.65l0.67,-1.43l-0.59,-2.65l0.45,-2.65l-0.49,-1.1l0.57,0.5l0.52,0.03l0.81,-0.04l0.61,-0.56l1.0,0.01l1.31,-0.97l-0.58,-1.12l1.09,-0.48l-0.09,1.06l0.61,0.43l0.35,1.43l0.7,0.41l1.89,0.08l0.69,-0.78l-0.08,-1.25l0.9,-0.01l0.28,0.61l-1.0,1.11l-0.35,0.98l-1.33,0.18l-0.66,0.72l-0.21,1.5l0.63,0.59l-1.78,0.75l-0.15,1.47l0.7,1.77l1.56,0.02l0.23,-0.67l1.76,1.19l0.89,-0.75l0.31,0.76l-0.25,0.83l-0.63,0.22l-3.49,-0.79l-1.31,0.64l-0.73,-0.09l-4.86,-1.92ZM530.8,110.51l0.0,-0.0l0.0,0.0l-0.0,0.0ZM525.21,99.98l0.36,-0.67l0.3,-0.02l-0.13,0.45l-0.53,0.24ZM526.86,145.61l0.13,-1.36l0.19,0.01l0.16,1.06l-0.48,0.29ZM521.53,48.5l1.34,-0.94l0.27,-0.41l-0.18,0.37l-1.05,1.19l-0.37,-0.21ZM523.47,46.55l0.74,-1.75l0.73,-0.99l0.79,-0.33l-0.83,0.67l-1.43,2.39ZM524.86,146.25l-0.6,-0.87l0.65,-0.55l0.64,0.38l-0.68,1.04ZM521.92,143.29l-0.09,-0.72l0.45,-0.92l1.05,-0.36l-0.3,1.81l-1.11,0.18ZM521.59,100.37l0.08,0.24l-0.17,0.69l-0.53,-0.6l0.62,-0.34ZM515.68,53.56l0.24,-0.31l0.44,-0.74l0.23,0.26l-0.91,0.8ZM513.57,62.92l0.86,-0.42l0.25,0.2l-0.47,0.35l-0.65,-0.13ZM513.21,101.75l-0.01,-0.69l0.26,0.12l-0.25,0.57ZM513.21,102.21l0.03,0.18l-0.03,-0.01l-0.0,-0.16ZM514.23,100.99l0.75,-1.56l1.22,0.82l-0.83,0.48l-0.1,0.34l0.57,0.61l-0.6,1.18l-0.51,-1.48l-0.5,-0.4ZM513.43,94.67l0.2,-0.63l0.02,-0.22l0.27,0.43l-0.48,0.42ZM510.12,54.83l-0.51,-0.07l1.07,-0.63l-0.28,0.32l-0.27,0.38ZM504.39,126.47l0.07,-0.33l-0.1,-0.23l0.32,0.37l-0.29,0.19ZM486.98,62.49l0.03,-0.0l0.0,0.0l-0.02,0.01l-0.02,-0.01ZM485.63,63.39l0.54,0.1l-0.02,0.34l-0.25,0.04l-0.27,-0.47ZM454.09,50.17l0.13,-0.09l0.08,0.14l-0.16,-0.03l-0.06,-0.01ZM452.27,53.38l0.03,-0.01l0.17,0.41l-0.06,0.02l-0.14,-0.42ZM434.46,54.14l1.26,0.02l0.01,0.07l-0.28,0.6l-1.14,0.18l-0.82,-0.99l0.32,-0.17l0.65,0.3ZM433.13,40.66l1.23,-0.46l0.58,1.41l-0.66,1.05l0.78,0.6l0.2,1.54l-0.51,1.34l-0.44,-1.53l-1.17,-1.68l0.52,-0.78l-0.53,-1.5ZM429.88,63.81l0.68,0.02l-0.03,0.45l-0.01,0.0l-0.63,-0.47ZM388.46,45.73l0.19,0.38l0.6,0.14l0.66,-0.5l0.49,0.43l-0.85,1.52l0.48,0.81l0.76,-0.08l0.9,-0.83l0.91,1.53l0.73,0.07l0.54,-0.96l2.48,-0.49l1.11,-1.08l0.48,-0.06l1.6,0.78l0.31,1.27l0.36,0.27l0.52,-0.53l0.42,-1.83l1.74,-1.16l0.4,1.46l0.88,1.42l0.64,0.26l0.41,-0.56l-0.33,-2.1l-0.35,-0.37l0.11,-0.61l0.43,-0.68l0.66,-0.29l0.31,0.62l-0.3,0.71l0.45,0.57l0.63,-0.08l0.43,-0.65l0.71,0.3l0.93,-0.24l0.87,2.86l0.3,0.4l1.03,-0.21l0.11,1.3l-0.91,-0.0l-0.5,0.59l-0.34,1.72l0.24,0.65l-1.67,-0.59l-2.12,3.28l-1.32,0.44l-5.74,4.16l-1.26,-1.19l-4.49,-1.99l-0.23,-0.57l-2.11,-1.43l-0.51,-0.67l-1.33,-0.4l-0.24,-2.15l-1.15,-1.39l-0.81,-3.26l0.19,-1.08l-0.71,-0.87l0.22,-1.47l2.09,2.41ZM378.38,56.74l0.59,0.01l0.56,-0.49l-0.1,-1.47l1.5,0.55l0.63,-0.24l0.82,-0.95l-0.3,-2.5l0.3,-1.02l-0.8,-0.9l1.34,-1.21l0.85,-1.31l1.2,-0.18l1.05,2.05l-0.33,0.97l0.13,1.09l1.61,1.53l-0.32,2.31l0.53,0.38l0.69,-0.27l1.36,0.32l1.54,1.16l-0.09,0.49l-0.94,0.42l-1.6,0.14l-3.8,-1.49l-4.6,1.28l-1.27,-0.09l-0.56,-0.61ZM378.62,87.87l0.0,-0.0l0.01,0.0l-0.01,-0.0ZM367.78,126.07l0.13,0.18l0.18,0.5l-0.31,-0.69Z\", \"name\": \"Northern Territory\"}, \"AU-QLD\": {\"path\": \"M895.23,423.61l0.32,-1.8l-0.29,-0.7l0.29,-1.4l-0.28,-1.26l0.7,-1.19l0.05,-0.87l0.74,0.6l0.78,0.04l-1.73,6.51l-0.57,0.07ZM554.86,165.23l3.44,2.77l2.03,0.68l0.53,0.48l1.77,0.01l2.58,1.08l3.56,-0.34l0.63,0.65l3.52,1.44l3.63,0.53l0.49,0.35l0.63,1.47l1.83,1.13l-0.24,0.58l0.28,2.45l1.29,2.74l0.79,0.98l1.78,0.88l2.7,0.36l4.52,3.58l3.59,0.83l2.55,1.15l0.62,1.04l1.23,0.96l2.68,0.21l2.72,-0.31l3.72,-0.8l0.9,-0.6l1.39,-0.12l2.27,-1.21l1.74,-1.36l1.12,-0.24l0.69,-1.05l1.85,-0.78l0.86,-2.2l0.47,-2.74l1.0,-2.05l0.24,-1.48l-0.27,-1.25l2.19,-2.8l0.73,-1.92l0.72,-0.18l1.9,-2.19l0.78,-2.97l0.58,-0.25l0.71,-1.51l0.27,-1.3l-0.32,-0.86l0.63,-0.93l0.74,-3.24l1.75,-3.53l-1.15,-3.05l0.58,-0.8l0.77,-5.54l1.03,-3.8l1.85,-4.36l0.22,-1.52l1.22,-1.66l-0.02,-0.91l0.52,-0.51l0.07,-2.3l-1.28,-2.59l-1.81,-8.81l0.24,-1.73l1.5,-4.45l-0.05,-2.16l-0.39,-1.04l-2.14,-2.82l-0.35,-1.73l0.13,-1.92l1.15,-4.54l2.21,-4.67l0.84,-0.18l-0.02,-0.89l0.67,-1.62l-0.26,-1.01l-1.28,-1.73l-0.44,-2.83l-0.42,-0.4l0.88,-1.4l2.39,-1.5l1.32,-3.23l0.29,0.19l0.47,-0.42l0.46,0.54l0.34,2.91l0.94,1.4l0.46,0.19l0.29,-0.4l-0.02,-1.38l-0.54,-1.78l1.52,-0.52l0.55,-0.8l-2.09,-0.35l-1.54,-1.02l1.81,-1.02l0.67,0.02l0.42,-0.32l-0.25,-0.46l-1.1,-0.46l-0.79,0.35l-1.99,0.0l-1.55,-1.5l0.63,-0.5l-0.12,-0.73l-2.18,-0.29l1.55,-4.06l1.35,0.27l0.84,-0.5l-0.85,-1.22l-0.3,0.09l0.93,-2.82l1.39,-1.79l0.46,2.78l0.3,0.39l0.45,-0.2l0.7,-1.28l0.99,0.66l0.6,-0.2l0.24,-0.69l-0.05,-0.51l-0.91,-1.09l-0.87,-0.35l-0.04,-1.38l0.41,-1.79l0.97,-1.31l0.0,-1.15l2.67,-8.19l0.05,-2.32l0.58,-1.99l-0.21,-4.27l4.04,-1.23l1.49,-1.76l0.87,-2.14l1.02,0.04l0.68,-0.39l1.37,0.86l-0.91,0.75l-0.39,0.82l-0.87,0.54l-0.26,2.04l0.47,0.57l0.46,-0.14l0.62,-0.55l0.46,-1.07l0.61,-0.03l0.27,1.1l0.71,0.42l0.0,1.25l0.73,0.07l0.54,-0.55l0.48,0.02l0.75,1.63l0.61,2.49l-0.3,1.02l0.18,1.43l0.91,0.79l0.63,1.46l-1.09,2.0l0.4,0.8l-0.02,1.44l0.42,0.82l0.11,5.23l3.08,2.43l2.6,-0.66l1.8,1.36l-2.54,3.71l-0.2,4.07l0.86,0.7l1.74,-0.02l1.41,0.98l0.91,3.25l2.89,1.58l-1.13,2.55l-0.44,3.25l0.21,0.47l0.72,-0.43l0.58,0.19l0.76,-0.36l1.25,0.1l-0.48,1.25l0.32,0.66l-0.18,2.7l0.54,2.73l-0.01,3.02l1.49,2.25l-0.28,1.49l0.27,0.74l-0.64,1.4l-0.76,3.6l1.49,3.02l0.34,1.5l1.65,1.49l0.45,4.35l0.9,2.94l0.81,1.53l1.52,1.57l2.6,0.91l2.63,-1.21l2.22,-1.88l0.52,-0.99l0.07,-1.39l0.58,0.08l0.48,0.72l1.37,0.3l3.11,-1.46l0.92,-1.77l0.24,0.07l1.31,1.75l-0.23,1.73l0.22,0.63l1.08,0.19l-0.4,0.79l0.16,1.66l1.36,1.78l0.64,0.28l1.26,-0.19l0.94,1.06l2.19,0.28l0.62,1.11l0.28,1.52l1.87,1.59l0.89,-0.1l2.1,0.96l0.96,-0.02l0.25,0.86l1.26,1.49l1.18,0.07l-1.93,2.95l-0.18,2.12l0.56,1.48l0.9,0.53l-0.52,0.9l0.11,1.09l-0.63,0.42l-0.31,1.12l0.58,0.57l0.19,0.72l-0.29,0.83l1.1,1.17l0.15,0.53l-0.31,0.79l1.27,2.62l-0.15,1.42l0.3,0.56l-0.38,0.7l0.01,0.86l1.7,2.15l0.65,1.41l-0.61,3.05l0.63,0.65l0.12,0.68l-1.15,1.58l-0.34,2.77l0.58,0.93l0.88,0.08l0.37,1.08l2.2,3.25l2.04,1.44l0.35,0.96l0.77,0.51l1.1,1.68l-0.53,0.22l-0.24,0.53l1.0,1.98l0.98,-0.24l-0.16,-1.28l0.85,-0.75l0.78,0.41l1.3,-0.85l-1.39,2.61l-0.21,1.48l1.56,2.34l0.34,1.8l1.41,2.7l0.92,0.86l-0.1,2.71l1.7,2.45l-0.89,1.14l-0.02,1.82l-0.44,0.59l0.53,1.74l-0.28,1.49l-2.0,4.73l0.11,2.47l2.14,2.73l1.68,0.54l0.55,2.79l0.51,0.46l2.34,0.23l-0.16,1.57l-0.87,2.29l-0.47,3.29l0.21,0.74l1.34,2.03l1.67,1.14l1.22,1.54l1.26,0.48l1.04,1.03l2.03,0.99l1.1,0.23l0.98,-0.38l1.1,1.35l2.27,1.57l1.56,-0.19l1.55,-1.64l0.11,1.9l1.72,2.27l0.99,-0.1l2.07,0.56l0.71,-0.3l2.89,0.04l0.76,-0.38l0.48,1.13l1.28,1.55l0.87,2.51l0.12,1.08l-0.71,0.35l2.73,3.17l2.51,0.3l0.38,-0.55l-0.64,-1.51l-0.05,-1.08l0.97,0.31l0.32,0.31l0.64,2.73l1.38,1.17l2.09,0.36l0.48,-0.54l0.78,-0.16l1.03,1.18l3.01,0.73l0.44,1.0l-0.38,0.17l0.01,1.55l2.86,2.03l0.22,0.64l0.98,0.03l0.89,-0.66l-0.19,-0.6l0.45,-0.79l-0.83,-1.17l0.85,0.54l1.2,-0.37l0.18,1.53l0.69,0.91l0.17,0.77l0.75,0.12l0.45,-0.3l0.32,1.38l0.56,0.33l1.79,-0.78l0.12,0.93l1.19,1.26l-0.19,0.86l0.29,0.93l-1.03,-0.29l-0.66,0.88l-1.18,-0.75l-0.5,0.45l0.37,1.64l-0.96,0.57l-0.41,0.51l0.11,0.39l0.82,1.41l0.63,0.29l-0.29,0.43l0.62,1.3l0.67,0.4l0.53,0.89l1.1,0.08l0.18,1.03l-0.53,1.6l0.82,0.13l0.71,-0.78l0.92,0.53l0.87,-0.14l1.12,0.83l0.18,0.56l-0.24,0.51l0.3,0.53l1.33,-0.14l0.55,0.53l0.75,0.07l1.56,1.91l0.0,0.59l-0.78,1.38l0.06,1.09l0.9,1.51l0.81,-0.2l0.52,0.36l-0.12,0.57l0.51,1.15l-0.37,0.14l-0.22,0.64l0.74,0.46l-0.68,0.66l-0.01,1.33l0.44,0.32l1.07,-0.53l0.74,0.3l0.09,0.84l0.59,0.81l0.89,0.15l-0.5,1.04l0.79,1.89l-0.81,0.52l-0.13,1.09l0.91,1.52l-0.02,1.8l1.04,1.93l0.16,1.45l0.87,1.7l-0.35,0.7l1.16,1.46l-0.4,0.7l0.14,0.41l1.27,0.56l0.5,0.84l0.64,0.27l-0.07,1.67l-0.78,1.08l0.42,0.58l0.8,-0.16l1.62,-1.04l0.88,-1.37l1.17,1.87l1.79,1.5l1.37,2.34l0.58,0.34l0.58,-0.45l-0.56,-2.19l-2.01,-4.4l0.42,-0.47l-0.53,-0.9l1.08,-2.64l1.23,-0.52l0.38,0.2l0.88,1.95l0.73,0.51l1.0,2.68l4.64,2.23l0.88,0.91l1.62,0.56l2.03,1.68l0.56,-0.04l0.13,-0.7l-0.63,-0.91l-0.17,-1.35l-0.68,-0.53l-0.2,-1.05l0.47,-1.8l0.99,0.13l-0.03,1.25l2.74,1.43l-0.55,0.73l-0.76,-0.4l-0.6,0.73l0.31,0.58l-0.16,0.35l0.46,0.56l0.4,-0.1l0.33,1.49l0.56,0.1l0.48,-0.36l0.11,0.65l0.6,0.32l0.32,0.76l-0.88,4.8l-0.86,0.16l-0.21,0.59l0.77,0.77l0.14,1.49l-0.34,2.86l0.72,0.62l0.2,1.19l0.7,0.35l-1.1,1.41l0.59,2.38l1.41,1.63l-1.01,0.01l-0.42,0.56l1.12,0.59l0.52,1.05l0.46,0.2l1.18,-0.64l1.31,0.52l0.47,0.85l1.91,1.55l0.64,1.95l0.74,1.09l2.02,0.6l0.35,0.65l0.71,0.14l2.65,3.41l0.99,-0.35l1.07,0.69l-0.2,0.9l0.49,0.73l0.48,0.21l0.55,-0.31l0.17,-0.69l0.55,-0.05l1.42,1.03l0.58,-0.44l-0.18,-0.78l0.74,0.43l0.62,-0.51l0.81,2.27l0.97,0.74l0.91,-0.05l0.78,0.89l1.5,4.58l1.21,2.43l1.49,1.92l4.11,3.16l2.23,0.61l1.28,1.19l0.6,1.87l0.15,2.58l1.97,2.99l0.86,0.53l-1.12,-0.01l-0.36,0.48l0.19,0.46l1.17,0.31l1.71,1.42l2.6,0.75l0.6,-0.32l1.48,0.38l0.28,2.58l-0.89,0.56l-0.42,0.84l0.52,0.51l1.1,-0.56l-0.07,0.4l0.39,0.43l-1.18,1.26l0.07,2.35l-0.48,0.66l0.86,0.82l0.16,0.81l1.26,0.62l0.72,1.25l0.27,1.61l-0.3,1.64l0.4,0.39l0.51,-0.22l0.78,-2.09l0.6,1.29l1.41,0.43l-1.0,2.23l-1.52,6.21l0.4,1.37l0.95,0.43l-0.48,1.51l-0.08,4.49l0.29,0.9l0.57,0.28l-0.06,4.71l1.39,4.22l-1.72,0.02l-0.91,0.55l-0.89,1.13l-0.27,1.18l0.67,0.58l1.04,0.01l-0.03,0.43l-1.12,1.21l0.13,0.82l0.68,0.62l1.59,0.65l0.55,2.06l1.48,0.78l0.98,2.09l0.24,1.98l1.01,1.82l0.99,1.07l0.0,0.89l0.67,0.18l-0.2,1.63l-0.46,0.33l-0.22,1.1l0.46,0.76l0.54,-0.07l0.15,2.27l1.08,1.52l-2.88,2.07l-0.64,-0.16l-2.92,0.43l-1.96,2.26l-5.27,-0.75l-2.4,0.85l-3.04,-1.56l-0.44,0.11l-0.65,0.85l-0.65,-1.23l-0.72,-0.45l-0.61,0.05l-1.34,1.09l-0.88,1.36l-2.08,0.48l-1.31,1.17l-1.54,0.06l-4.59,2.63l-0.06,0.97l0.55,0.56l0.4,1.15l1.32,1.47l-0.38,0.65l-0.67,3.73l-1.65,0.52l-1.61,-0.2l-0.76,1.19l-0.91,-0.27l-0.73,-1.38l-0.59,-0.26l-1.59,0.95l-2.03,0.64l-1.01,1.61l-0.14,1.21l-2.09,2.1l-0.72,0.3l-0.28,-0.06l-0.14,-0.93l-0.53,-0.45l-0.61,-4.24l-3.0,-2.06l-2.04,-0.35l-0.13,-1.66l-0.43,-0.7l-1.44,-0.27l-0.92,-0.81l-3.22,-1.32l-3.95,0.55l-3.62,-0.27l-3.37,-2.67l-1.53,0.48l-1.77,-0.03l-3.11,1.1l-5.66,0.15l-1.12,0.39l-1.62,-0.28l-0.6,-1.0l-2.77,0.35l-0.64,0.48l-1.09,1.93l-3.13,1.35l-2.08,1.92l-1.85,0.71l-0.82,2.25l-1.85,1.35l-175.66,0.0l0.0,-71.14l-0.4,-0.4l-65.92,0.0l0.0,-217.36ZM634.98,72.13l0.07,1.52l-0.75,0.25l-0.0,-0.27l0.68,-1.5ZM794.18,253.26l0.98,0.76l0.04,0.74l-0.87,-0.5l-0.16,-1.0ZM857.22,337.03l-0.47,-0.71l-0.74,-0.46l0.64,0.02l0.73,0.67l-0.16,0.48ZM808.2,279.27l0.01,-0.03l0.0,0.01l-0.01,0.01ZM894.45,408.27l1.55,-0.69l-1.09,4.97l-0.28,-0.55l-0.17,-3.73ZM886.84,364.36l3.44,-2.59l1.5,-2.35l0.17,-1.15l-0.25,-1.08l-1.78,-2.48l2.02,-1.81l0.03,3.73l0.45,1.38l1.48,1.63l-4.67,10.55l-1.71,4.78l0.38,1.54l-0.03,0.65l-0.47,0.56l-0.97,-1.28l-0.27,-2.41l-0.88,-0.96l0.03,-0.5l0.83,-0.7l0.33,-2.12l0.73,-0.78l0.75,-1.69l-0.23,-1.4l0.21,-0.83l-1.09,-0.71ZM842.74,323.55l0.45,-0.06l0.34,0.55l1.96,0.73l0.16,0.55l0.92,-0.1l-0.13,1.06l0.28,1.24l1.28,1.66l0.04,0.62l-0.42,0.5l-0.86,0.08l-0.82,-0.93l-0.54,-1.35l-3.32,-3.96l0.65,-0.58ZM830.57,296.15l0.43,-0.69l0.69,0.74l-0.8,0.78l-0.32,-0.83ZM817.53,293.83l-0.31,-0.73l0.24,-1.22l0.32,0.61l-0.26,1.34ZM813.87,298.45l-0.07,-0.18l0.14,-0.5l0.02,0.02l-0.09,0.67ZM796.93,249.38l0.39,-0.61l-0.26,-0.51l0.15,-0.74l0.2,1.17l0.86,0.91l-0.31,0.45l-0.56,-0.05l0.0,-0.38l-0.46,-0.25ZM795.44,246.36l0.61,-1.24l0.25,-0.0l-0.29,0.78l0.26,0.48l-0.83,-0.02ZM749.09,223.31l0.73,-0.21l0.41,0.11l-0.82,0.53l-0.33,-0.44ZM744.59,213.75l0.15,0.18l0.24,0.43l-0.63,0.03l0.24,-0.64ZM736.61,202.99l0.82,0.06l-0.34,1.45l1.2,1.37l-0.24,0.47l0.52,0.45l-0.84,1.33l-1.16,-0.41l-0.49,-1.93l-0.63,-1.0l-1.67,-1.4l2.22,0.7l0.49,-0.26l0.11,-0.83ZM659.42,3.33l-0.8,0.47l-1.97,-0.24l0.39,-0.17l2.38,-0.05ZM647.59,21.5l0.41,-0.9l0.53,-0.17l1.05,0.16l0.38,0.57l-0.85,1.1l-1.23,-0.35l-0.29,-0.41ZM649.38,30.72l-0.54,-0.03l0.07,-0.46l0.67,0.13l-0.2,0.37ZM645.89,31.65l1.45,-1.0l1.33,1.91l-1.38,0.41l-0.5,0.65l-0.85,-1.0l-0.05,-0.97ZM646.88,0.56l0.57,-0.14l1.03,0.3l-0.66,0.02l-0.94,-0.18ZM646.3,20.63l-0.86,-0.94l0.77,-1.18l0.64,0.62l-0.55,1.5ZM580.08,168.21l-0.09,-0.42l0.25,-0.33l0.0,0.68l-0.16,0.08ZM580.47,166.56l0.24,-0.86l0.98,-1.02l0.14,-0.7l1.68,-1.28l3.93,-0.62l2.03,-0.85l1.14,0.89l0.93,0.16l0.41,0.52l-0.13,0.45l-0.86,0.0l-0.88,0.44l-1.12,-1.25l-0.92,0.65l-0.86,0.13l-0.15,0.84l-0.47,0.41l0.06,1.06l-0.45,1.02l-0.41,-0.43l-0.64,-0.04l-0.67,1.13l-1.29,0.67l-1.31,-0.01l-0.83,-1.11l-0.54,-0.22ZM585.94,176.86l0.11,-0.05l-0.09,0.11l-0.03,-0.05ZM586.42,176.57l1.36,-1.68l0.73,0.61l-0.07,0.48l0.39,0.53l-1.23,0.38l-0.42,-0.42l-0.77,0.11Z\", \"name\": \"Queensland\"}, \"AU-SA\": {\"path\": \"M431.55,527.42l-1.49,-0.08l-2.09,0.56l-1.63,-0.43l-2.53,-2.65l-3.47,-2.09l-3.13,-2.37l-5.49,-3.01l-8.05,-3.16l-1.12,-0.04l-3.16,1.95l-4.34,1.28l-5.33,-0.55l-8.64,-0.29l-1.79,0.5l-2.99,-0.12l-4.19,0.64l-4.76,0.16l-1.91,0.52l-5.56,0.32l-1.42,0.52l-2.56,0.22l-0.0,-135.9l264.47,0.0l0.01,192.75l-0.73,0.25l0.02,102.26l-5.65,0.36l-1.96,-0.81l-3.05,-2.44l-1.21,-0.45l-0.81,-0.88l-0.5,-1.66l-2.15,-3.86l-2.64,-2.2l0.33,-0.45l-0.52,-1.2l-1.96,-1.04l-0.89,0.19l-4.18,-5.46l-1.04,-2.0l0.78,-0.66l0.12,-0.95l-1.03,-1.69l-0.25,-1.37l-1.16,-0.94l2.27,-1.2l1.38,-1.6l0.49,-2.08l-0.15,-3.5l-4.41,-9.9l0.32,-0.37l-0.14,-1.11l-1.68,-4.28l-2.66,-3.23l-1.32,-0.67l-4.12,-3.71l1.64,0.15l0.9,-0.69l0.38,-2.51l-1.7,-1.57l-0.92,-0.37l0.68,-0.38l1.58,0.28l0.67,-0.53l0.08,-0.8l-0.48,-0.67l0.29,-1.03l-0.21,-0.6l-0.68,-0.18l-0.4,0.27l-1.12,-1.29l-2.07,-0.42l-0.21,0.84l-1.63,1.03l-1.66,-0.11l-1.7,0.98l-0.21,0.73l0.2,0.92l1.5,0.75l-1.9,-0.46l-0.89,-0.77l-1.83,0.11l-0.47,0.31l-0.04,0.53l0.5,0.56l2.45,0.44l-0.82,0.3l-1.79,-0.65l-1.18,0.1l-2.42,0.73l-0.53,0.86l-1.04,0.77l-2.75,0.62l-3.66,-0.27l-1.52,0.61l-0.73,-0.23l-0.99,-0.86l0.59,-1.49l2.61,-1.25l2.2,-2.66l1.93,-1.26l0.16,-2.0l0.61,-1.01l-0.29,-1.1l0.15,-1.71l1.06,-1.96l-0.6,-4.09l0.16,-1.97l0.88,0.56l0.38,-0.94l-0.36,-1.15l-2.05,-1.46l-0.22,-1.14l-1.51,-1.26l-0.8,-1.66l-0.85,-0.5l-1.43,-4.48l-0.62,-0.95l-0.92,-0.56l0.01,-1.24l-1.85,-2.15l-0.8,0.39l-1.35,2.67l0.04,0.8l0.53,0.83l-2.33,2.68l-0.86,2.79l-0.13,1.87l0.46,0.65l-0.6,1.54l-0.2,2.07l-1.21,2.11l-0.92,2.98l-0.08,1.38l-0.51,0.62l0.06,1.72l-1.33,1.08l-2.41,-1.23l-3.09,-0.32l-2.07,1.34l-2.13,0.03l-1.57,1.74l-2.73,-0.37l-2.84,1.74l-0.6,-0.03l-0.65,-0.82l0.32,-0.75l1.68,-1.41l0.7,-1.41l0.07,-0.64l-0.45,-1.12l0.73,-0.78l-0.01,-0.85l0.9,-1.25l1.21,0.53l1.14,0.06l2.77,-0.52l2.66,1.19l0.87,-0.21l0.79,-0.81l0.35,-3.05l1.2,-4.58l-0.7,-2.47l-0.05,-1.51l-0.52,-0.66l-0.54,-0.07l0.77,-0.69l0.59,-3.05l-0.21,-1.82l-0.66,-1.33l0.73,0.22l0.7,-0.52l0.81,-1.83l-0.43,-1.42l2.03,-2.2l-0.31,-1.14l2.22,-2.12l1.17,-2.04l0.68,-0.1l1.53,-2.08l0.67,0.43l0.77,-0.57l0.11,-2.42l-1.61,-3.19l0.11,-1.0l-1.24,-2.17l0.79,-1.47l1.98,-1.06l0.9,-0.19l0.54,0.25l0.63,-0.3l0.29,-0.62l-0.08,-1.17l-0.74,-1.61l-1.1,-0.4l-1.2,-5.24l0.59,-0.47l0.06,-0.66l-1.86,-1.38l-0.02,-1.02l-0.94,-1.23l0.27,-0.88l-0.75,-0.37l-0.28,-0.79l-0.7,0.0l-0.46,1.47l0.01,3.08l0.85,0.66l0.32,1.47l0.04,1.79l-0.42,0.94l-0.6,0.14l-0.21,0.45l0.5,1.46l-0.58,-0.02l-1.56,-0.96l-0.8,0.28l-0.95,0.87l-0.12,1.06l-1.64,1.75l-1.33,0.77l-0.52,2.18l-1.04,1.84l-0.39,2.91l-1.39,2.08l-1.75,3.75l-1.45,1.21l-2.78,0.55l-0.94,-1.04l-0.93,-0.06l-0.66,1.13l-0.88,0.73l0.41,0.91l-1.89,0.34l-1.79,0.93l-0.41,0.53l-2.27,0.91l-0.56,0.54l-0.15,0.69l-1.72,1.36l-1.39,0.45l-1.45,1.2l-0.45,1.42l-2.63,4.47l-2.1,1.18l-0.51,0.72l0.12,0.62l-0.28,0.48l0.31,0.88l-0.16,1.29l-0.3,-0.76l-0.44,-0.23l-2.68,0.99l-0.47,0.45l-0.5,1.43l0.36,0.96l-0.85,-0.0l-0.62,1.15l-0.15,1.26l0.54,0.94l-0.98,0.07l-0.92,1.39l0.34,0.51l1.14,0.15l1.02,-0.27l1.17,-1.01l0.71,0.34l0.42,-0.29l-1.02,1.78l0.75,2.95l-0.58,0.25l-0.52,-1.14l-1.36,-0.68l-0.91,-1.3l-0.99,-0.51l-1.35,0.15l-0.95,0.94l-0.35,1.26l-0.67,0.0l-0.44,-1.6l-3.3,-3.8l-2.66,-1.26l0.18,-0.76l1.14,0.5l2.0,-0.5l0.43,-0.54l-0.25,-0.54l-1.15,-0.26l-0.03,-1.13l-0.51,-0.26l-0.68,0.52l-0.16,-0.75l0.41,-1.23l-0.76,-1.68l-0.73,-4.68l-0.64,-1.12l-1.29,-0.58l0.66,-0.59l-0.25,-3.24l-1.67,-2.82l-1.12,-0.59l-2.95,-3.05l-3.3,-2.65l0.4,-2.08l-0.17,-1.71l-1.11,-3.27l-2.61,-2.42l0.55,-0.08l0.31,-0.45l-0.59,-1.44l-2.56,-0.92l-0.87,0.23l-0.22,1.05l-1.53,-0.88l-0.86,-0.14l-1.29,0.51l-0.45,-0.43l-0.57,0.1l-0.22,0.97l-0.89,-0.77l-1.0,-2.83l-0.9,-0.34l0.48,-1.02l-0.55,-1.15l-0.68,-0.36l-0.68,0.26l-1.34,-0.37l1.17,-1.14l0.32,-0.99l-1.35,-2.51l2.15,0.19l-0.14,1.6l0.88,0.47l1.49,-2.04l0.57,-1.3l-0.51,-2.53l-1.08,-1.77l-1.8,-1.64l-0.96,-0.22l-0.76,0.4l-0.56,-0.22l-0.71,0.19l-0.78,0.93l-1.26,-0.1l-0.94,1.09l-0.4,0.06l0.28,-2.26l0.15,-0.27l0.47,0.25l0.98,-0.43l0.16,-1.0l-2.67,-3.51l-0.76,-0.16l-0.55,0.42l-0.19,-1.0l-1.4,-0.59l-0.06,-0.61l-0.49,-0.36l0.19,-0.78l-0.89,-0.63l-1.14,-0.19l-0.59,0.23l-0.5,1.64l-1.04,-0.57l-0.35,-0.8l-0.58,-0.01l-1.43,0.75l-0.01,0.79l0.6,0.39l-0.39,0.42l-2.14,-0.45l-0.95,0.59l-1.62,-0.77l-0.85,0.26l-2.55,-2.36l-1.17,0.15l-0.35,-0.75l-4.27,-3.03l-2.64,-0.05l-1.63,-0.36l-1.65,0.17l-1.37,0.67l-0.32,0.6l0.09,0.62ZM576.07,616.55l-0.02,-0.01l-0.01,-0.01l0.03,0.02ZM479.63,556.89l0.06,-0.0l0.03,0.09l-0.07,-0.07l-0.02,-0.01ZM495.39,591.75l-0.33,-0.3l0.35,0.13l-0.01,0.17ZM494.74,591.17l-1.57,-0.76l-1.37,0.31l-0.82,0.54l1.46,-2.42l0.54,0.82l1.6,0.4l0.17,1.1ZM581.2,618.92l-3.37,-2.32l0.8,-0.43l0.16,-0.82l0.83,-0.73l1.77,1.06l-0.23,1.61l0.49,0.67l-0.44,0.45l-0.02,0.52ZM522.49,624.47l1.16,-3.41l2.05,-0.29l2.47,-0.93l5.97,-0.92l1.54,-0.69l2.96,-0.68l1.15,-0.84l2.39,0.69l3.08,-0.68l-0.44,1.1l0.24,0.41l0.96,0.19l-1.11,1.21l0.02,0.57l0.46,0.43l2.16,0.45l1.88,-0.39l0.11,1.3l0.83,0.44l1.48,-0.53l0.82,-1.56l0.95,0.04l1.95,0.72l0.31,1.07l0.92,0.39l0.08,0.44l-0.73,0.37l-0.79,0.98l-2.27,-1.07l-2.59,-0.31l-1.5,0.2l-2.84,0.98l-0.78,1.13l0.32,1.29l-0.27,0.52l-1.05,0.26l-1.78,1.06l-1.92,-1.72l-3.31,-0.8l-1.08,0.4l-0.45,1.03l-0.43,0.14l-2.78,-0.48l-2.02,0.66l-1.39,-0.52l-2.98,0.82l-1.16,-2.05l-1.54,-0.53l-1.05,-0.92ZM513.98,602.42l0.31,0.26l0.09,0.32l-0.28,-0.05l-0.11,-0.53ZM477.12,570.12l0.01,-0.29l0.58,-0.16l0.04,0.23l-0.63,0.22ZM457.09,534.55l-0.67,0.27l-0.1,-0.04l0.96,-0.87l-0.19,0.64Z\", \"name\": \"South Australia\"}, \"AU-NSW\": {\"path\": \"M632.87,581.75l-0.6,-1.08l-1.24,-0.13l-1.42,-0.85l-1.36,0.22l-0.45,-0.7l-1.48,-0.95l-1.22,0.28l-1.26,-0.62l-1.94,-0.05l-0.72,-0.81l0.0,-122.14l175.84,-0.01l2.32,-1.66l0.68,-2.09l1.81,-0.7l1.96,-1.82l3.25,-1.45l1.47,-2.29l2.21,-0.36l0.51,0.92l2.18,0.44l1.05,-0.44l5.79,-0.17l3.11,-1.1l2.15,-0.03l0.82,-0.4l3.27,2.64l3.86,0.31l3.76,-0.57l2.98,1.22l0.96,0.83l1.4,0.26l0.45,2.26l2.24,0.47l2.6,1.67l0.62,4.22l0.57,0.54l0.22,1.06l1.01,0.32l1.03,-0.39l2.33,-2.34l0.23,-1.41l0.63,-1.18l1.97,-0.61l1.27,-0.83l0.83,1.41l1.64,0.59l0.79,-1.38l1.48,0.24l2.03,-0.7l0.38,-0.66l0.93,-4.49l-1.45,-1.76l-0.88,-1.8l4.24,-2.33l1.5,-0.05l1.39,-1.2l2.11,-0.5l0.69,-0.56l0.37,-0.93l1.13,-0.95l0.5,0.39l0.24,0.9l0.74,0.42l0.69,-0.11l0.54,-0.76l0.67,0.57l2.23,0.89l1.23,-0.13l1.34,-0.71l1.67,0.44l3.68,0.3l0.79,-0.45l1.31,-1.81l2.67,-0.41l0.86,0.15l3.14,-2.21l0.31,0.38l0.72,0.11l0.49,2.97l-0.62,4.55l0.32,2.13l1.15,1.62l-0.62,2.34l0.11,2.42l-1.8,1.74l-1.52,2.26l-0.44,1.36l0.2,1.4l-0.47,0.26l-1.61,2.99l-0.23,1.18l0.62,1.63l-0.27,0.75l0.13,1.05l-0.83,2.49l-0.07,2.91l-0.74,1.85l0.13,1.34l-0.43,0.64l-0.29,2.04l-1.31,2.06l0.02,2.57l-0.29,1.01l-1.13,1.97l0.13,0.87l-0.26,0.75l-1.98,4.17l-1.23,5.87l0.41,2.75l0.78,1.28l1.03,0.25l-0.02,0.44l-0.91,1.6l-0.13,1.1l0.43,0.82l-1.7,2.16l-0.48,1.86l0.33,1.97l-1.29,1.95l0.41,1.94l-1.93,2.09l-0.13,1.97l-1.11,1.32l0.21,0.76l-1.21,1.43l-0.17,1.31l-2.75,2.36l-1.48,2.5l0.1,0.78l-0.52,0.59l-0.42,1.66l0.17,0.6l1.06,0.81l-0.88,1.57l0.03,0.83l0.41,0.36l-0.55,1.92l0.11,0.7l-3.66,1.64l-1.3,1.1l-0.26,0.7l-1.07,0.5l-1.16,1.67l-0.61,-0.37l-1.94,0.84l-0.13,0.7l0.57,0.44l2.14,0.18l-0.01,0.4l-0.65,-0.03l-0.76,0.64l-1.16,-0.2l-1.71,0.35l-2.45,1.08l-1.78,1.34l-0.06,0.77l-1.36,1.23l-0.12,0.99l-1.33,1.17l-1.06,3.32l-0.74,0.6l-0.66,1.27l-0.85,-0.34l-1.45,1.12l-0.34,1.36l0.37,0.56l0.62,0.22l-0.9,1.2l-0.41,2.19l-0.97,0.03l-1.98,0.72l-0.33,-0.74l-0.66,-0.15l-0.45,0.55l0.24,1.33l-0.36,0.57l0.45,0.4l0.53,-0.07l0.71,-0.67l-0.14,1.43l0.61,0.18l-0.41,1.57l0.28,0.67l-0.26,1.55l-0.78,0.13l-0.53,0.97l0.28,0.71l0.7,0.15l-0.26,1.52l-0.31,0.67l-0.77,-0.83l-0.77,0.04l-0.52,0.95l-1.07,-0.03l-0.56,0.5l0.24,0.63l1.23,0.46l-0.64,0.85l0.74,0.48l-2.97,2.13l-1.38,1.61l-1.03,1.77l-0.52,3.14l0.27,0.81l-0.44,0.62l-0.55,-0.28l-0.58,0.12l-0.86,0.95l0.18,0.81l0.91,0.19l0.67,0.58l-1.05,4.26l-1.25,0.72l-0.52,1.16l-0.65,0.56l0.73,0.92l-0.26,0.54l0.78,0.56l-0.1,1.05l-1.81,0.65l-0.44,1.36l0.51,0.87l-1.24,0.6l-0.6,1.1l-1.35,0.76l-1.22,1.93l-0.37,0.98l0.12,1.27l-1.72,2.18l-0.09,2.02l-1.63,2.33l-0.84,1.99l-1.22,-0.29l-0.85,0.32l-0.16,0.66l0.52,0.53l0.42,1.75l-1.0,0.51l-0.92,1.05l0.25,1.68l-0.24,2.19l-0.87,-0.18l-0.6,0.93l-0.05,0.46l0.85,0.11l0.43,0.46l-0.45,1.48l0.53,2.11l-0.27,0.67l0.2,0.91l-1.0,0.99l-0.55,1.09l0.05,1.52l-0.44,0.92l0.25,1.7l-1.51,2.92l-0.37,2.16l-1.0,1.39l0.02,1.14l-0.57,0.96l-0.07,0.89l0.62,0.52l-0.3,1.28l0.49,1.04l-0.71,0.28l-0.74,1.08l0.68,0.81l1.16,0.03l0.93,0.68l0.67,2.12l-1.32,0.25l-0.51,0.76l0.43,1.38l-0.29,2.05l0.53,1.8l-38.44,-17.87l-1.68,-0.2l1.63,-2.53l0.23,-1.66l-0.41,-0.9l-1.04,-0.56l-0.04,-1.48l-0.44,-1.24l-1.37,-1.22l0.3,-1.22l-1.03,-3.06l0.26,-1.65l-1.15,-1.38l0.09,-1.46l-1.58,-0.75l-0.58,-0.85l-4.35,-1.66l-3.6,1.39l-0.61,-0.89l-1.14,-0.34l-2.08,0.62l-0.86,1.13l-0.26,1.2l-1.34,-0.37l-1.91,0.38l-1.08,-0.62l-1.18,0.99l-0.5,1.13l-1.23,-0.85l-0.83,0.14l-0.45,0.54l-1.34,-0.7l-0.76,0.14l-0.67,-0.58l-0.88,-0.09l-0.5,-0.55l-1.41,-0.1l-1.39,-1.19l-1.85,-0.05l-0.86,-0.48l-1.92,0.28l-1.23,1.68l-2.23,-0.44l-1.35,0.41l-3.11,-0.85l-1.57,-0.04l-0.55,-0.93l-1.05,-0.38l-2.87,0.4l-0.83,-0.34l-3.84,-3.07l-1.91,-0.4l-2.72,1.11l-3.38,-0.55l-2.21,0.01l-2.59,0.45l-0.99,0.84l-0.24,1.55l-0.63,1.35l1.06,2.04l-1.8,-0.52l-1.74,1.37l-1.26,0.08l-1.31,-1.28l-1.62,-0.38l-2.39,-2.64l-0.96,-0.39l-2.14,-4.22l-0.8,-0.68l-0.98,-0.14l-2.07,-1.69l-1.82,-2.34l-2.15,-0.75l-0.49,-0.84l-1.83,-0.81l-2.72,-1.85l-2.8,-0.75l-1.27,-0.79l0.21,-1.41l-0.33,-1.2l-0.87,-0.68l-2.77,-0.91l-1.07,-1.85l-0.69,-3.46l0.29,-0.88l-0.15,-0.77l0.46,-0.66l0.04,-1.56l-0.88,-0.94l-0.94,0.05l-0.46,-0.86l-2.81,-1.38l-2.04,-0.18l-1.22,-0.58l-0.55,0.38l-0.92,-0.66l-1.02,0.41l-0.47,-1.24l-1.77,-1.05l-1.7,0.74l-0.74,2.23l0.08,0.81l-1.18,0.06l-0.3,0.31l0.06,0.85l-1.32,-0.26l-1.52,-3.04l-0.1,-1.01l-1.76,-1.66l-0.28,-2.52l0.72,-1.6l-0.23,-0.79l-0.6,-0.28l-0.83,0.16l-0.68,-0.51l-0.96,-1.06l-0.53,-1.99l-1.03,-0.17l-1.06,-0.82l-1.13,0.19l-1.11,-1.26l-4.67,0.36l-2.0,-0.67l-1.09,0.17l-1.82,1.04l-1.62,1.64ZM792.63,618.74l0.12,1.0l0.94,0.94l0.7,0.22l0.45,-0.33l0.36,2.31l0.59,1.09l2.49,1.19l0.65,-0.1l1.39,-2.2l-0.2,-1.96l0.2,-1.32l-0.4,-2.53l0.85,-0.6l0.55,-1.65l-0.13,-2.1l0.95,-1.27l0.93,0.17l0.59,-0.73l2.29,0.12l0.9,-0.74l0.06,-0.55l-3.48,-1.67l-0.23,-0.81l-0.93,-0.31l-0.26,-1.11l-1.37,-0.94l-0.99,0.17l-6.11,4.19l-0.62,0.81l-0.81,4.35l0.29,1.95l-0.21,1.8l0.41,0.63ZM837.5,602.24l0.66,0.16l-0.16,1.07l-0.36,0.37l-0.26,-0.26l0.11,-1.35ZM754.78,629.71l0.49,1.8l1.03,0.83l-0.46,0.12l-0.95,-0.95l-0.11,-1.8Z\", \"name\": \"New South Wales\"}}, \"height\": 825.8587272481366, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-ca-lcc.js",
    "content": "jQuery.fn.vectorMap('addMap', 'ca_lcc',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 867.2308867877657, \"bbox\": [{\"y\": -10408206.406521406, \"x\": -2874590.5560752777}, {\"y\": -4979679.615160916, \"x\": 2759058.0911967773}], \"left\": 0}], \"paths\": {\"CA-NT\": {\"path\": \"M340.43,125.99l5.05,-2.26l0.92,-0.14l1.84,0.57l2.33,-0.98l0.54,-0.9l1.17,-1.01l2.46,-0.96l1.23,0.01l1.01,1.79l0.53,0.4l-1.93,8.61l-1.55,0.59l-2.09,-1.15l-0.06,-0.73l-1.16,-1.56l-1.32,0.13l-0.23,1.13l-0.75,0.07l-0.24,1.09l-1.34,-0.24l-0.23,-1.68l-1.46,-1.53l-3.25,0.54l-0.46,0.38l-1.74,0.41l-0.1,-1.27l0.65,-0.58l0.17,-0.74ZM104.46,307.55l0.14,-0.94l0.91,-1.34l0.08,-0.7l1.08,-0.38l1.14,-1.29l0.69,-1.67l-0.23,-0.84l1.2,-1.51l0.56,-2.12l-0.07,-0.85l-0.74,-0.92l0.49,-1.16l11.83,-21.1l1.9,1.44l0.78,1.18l0.44,2.04l1.02,1.11l0.02,1.76l1.01,0.5l0.65,0.95l0.67,-0.55l-0.52,-1.74l0.25,-1.06l-0.44,-1.05l1.06,0.36l0.07,-0.5l-1.28,-1.24l0.06,-1.24l-1.48,-0.63l-0.42,-0.86l0.56,-0.17l0.07,-1.17l0.48,1.3l0.75,0.48l1.01,0.1l1.05,-0.56l-0.29,-0.39l-0.98,-0.28l0.02,-0.91l-0.75,-1.17l0.91,-2.19l0.82,3.03l1.3,1.4l0.43,-0.74l-0.92,-1.52l-0.27,-2.64l0.29,-0.58l0.65,0.02l-0.28,2.19l0.81,0.07l0.59,-1.89l0.54,0.43l0.23,1.25l1.1,1.25l0.63,-0.49l-0.11,-0.99l0.85,-2.21l1.62,-0.07l0.43,0.47l0.75,0.05l1.3,0.93l0.72,1.27l0.44,0.09l0.73,-0.37l0.45,-0.82l-0.22,-0.8l1.83,-2.02l0.7,0.3l-0.05,0.59l-1.04,0.83l0.39,1.34l1.04,1.47l0.86,0.25l-2.7,1.23l-1.24,1.17l-1.1,0.22l-1.67,1.68l-0.26,0.8l0.9,0.19l1.58,-1.41l2.09,0.22l0.77,-0.72l1.23,0.52l0.71,-0.84l1.16,0.21l1.48,1.15l1.16,-0.3l0.26,0.24l1.67,-1.31l0.74,-1.04l0.08,-0.68l0.93,-0.64l0.18,0.58l0.47,0.3l0.66,-0.09l0.71,0.91l1.31,0.19l0.55,-0.26l0.39,-0.67l0.78,0.93l0.89,-0.58l2.37,-0.04l1.07,-0.91l1.14,-0.33l1.48,0.09l0.6,-0.85l0.47,0.33l0.04,0.46l-0.7,1.79l0.73,0.45l0.61,-0.9l0.73,-0.09l1.56,-1.89l0.67,-0.18l0.03,-0.74l1.1,-0.2l0.29,0.66l0.93,-0.19l0.39,-0.56l0.33,0.91l1.18,-0.31l-0.38,1.09l0.76,0.43l-0.12,0.41l0.54,0.43l0.58,-0.35l1.12,0.71l1.2,-0.6l1.31,-1.78l0.48,-0.01l-0.43,1.39l0.64,0.69l-0.36,0.67l0.25,0.54l-0.99,0.13l-0.14,0.6l-0.58,0.26l-4.41,0.77l-1.71,-0.24l-0.99,0.6l-1.08,0.04l-1.03,1.21l-1.62,-0.04l-1.6,1.4l-0.18,-0.34l0.28,-0.83l-0.34,-0.45l-1.04,-0.22l-0.59,0.3l-0.57,-0.27l-0.48,0.2l-2.83,-0.93l-1.21,0.17l-0.7,-0.27l-2.29,1.84l-0.29,1.06l-2.52,0.0l-0.5,0.34l-0.53,-0.63l-1.66,0.06l-1.27,0.73l-0.17,0.49l-1.1,0.9l-0.12,0.66l-0.76,0.22l-0.47,-0.62l-1.16,0.22l-1.4,1.59l-0.26,0.73l-0.29,0.05l-0.26,-0.55l-1.06,0.01l-0.96,1.13l-0.25,1.27l0.56,1.44l1.19,1.93l1.0,0.53l0.66,-0.08l0.11,-0.38l-0.23,-0.69l-1.04,-0.58l0.38,-0.94l0.7,0.04l0.57,0.64l0.56,-0.31l0.06,-0.47l0.4,1.43l0.52,0.32l0.5,-0.48l0.99,1.02l1.61,-0.85l0.13,-0.44l-0.58,-1.64l-0.52,-0.17l-1.0,0.36l-0.35,-0.72l0.45,0.44l0.68,-0.28l-0.6,-1.73l0.72,-1.38l1.23,0.44l1.05,-0.46l0.45,0.71l0.75,-0.18l0.71,-0.64l0.65,0.9l1.17,-1.23l1.44,0.08l1.83,-0.69l1.41,-1.24l0.1,-0.41l0.78,-0.23l0.04,-0.44l0.67,0.77l-1.27,1.34l-0.23,0.67l0.81,0.22l-0.39,0.95l0.99,-0.0l1.07,-0.65l0.41,0.07l0.21,0.13l-0.46,0.86l0.88,0.61l-1.32,1.5l-0.51,1.19l0.07,0.7l0.58,0.3l0.61,-0.28l1.03,-2.43l1.66,-0.94l0.16,-0.62l1.48,-0.47l0.48,-0.61l-0.1,-0.43l2.35,-1.13l0.49,-0.85l1.42,-0.99l1.05,0.28l3.79,-0.03l1.01,-0.38l2.58,0.65l-1.07,2.79l1.07,1.23l0.82,0.1l0.27,-1.09l1.23,0.05l2.37,-1.56l2.78,-0.96l1.22,-3.31l1.85,-0.43l0.55,0.37l1.09,-0.16l2.12,0.3l0.7,0.51l0.27,-0.41l-0.24,-0.91l-2.64,-2.29l0.11,-0.52l0.3,0.3l0.53,-0.08l0.77,-1.23l-0.54,-0.44l-1.31,-0.01l1.01,-1.83l1.46,-1.04l1.82,4.77l0.72,3.82l-0.37,5.36l0.33,0.97l-0.74,1.57l-0.33,3.92l1.05,5.2l1.21,3.11l0.72,1.01l0.88,0.26l1.06,2.07l0.85,0.12l0.6,-0.52l0.05,-0.65l1.59,0.69l1.22,-1.47l-0.31,-0.47l0.38,-0.46l-0.67,-1.16l0.72,-1.05l-0.85,-0.79l-0.04,-0.56l0.56,-0.7l0.61,0.38l1.75,-0.43l-0.33,1.7l0.42,0.47l0.37,-0.09l1.3,-1.37l-0.48,-1.18l-1.07,-0.69l0.82,-0.42l0.51,-0.93l1.18,-0.99l2.01,0.05l0.56,-0.74l0.29,0.27l-0.34,0.03l-0.23,0.62l0.44,0.52l-0.71,0.35l0.09,1.35l-0.94,1.01l-0.57,1.34l1.06,1.48l0.76,0.13l0.57,-0.34l0.54,0.45l-0.13,0.38l-1.56,0.75l-0.73,1.21l-1.89,0.99l-0.47,0.95l-0.59,0.04l-0.25,0.44l0.29,1.05l0.86,0.84l1.12,0.58l0.72,0.01l0.23,0.41l0.53,0.01l0.32,-0.52l1.93,1.27l2.46,-0.33l0.26,-1.48l0.87,-0.15l1.02,0.51l0.3,-0.25l0.81,-1.37l0.11,-0.97l0.88,-1.02l0.45,-1.87l1.23,-0.68l0.86,1.2l0.75,-0.28l1.55,0.99l3.12,0.8l3.72,2.51l3.19,4.28l0.37,1.46l-10.78,31.16l10.4,16.31l12.52,18.3l13.34,18.03l12.32,15.52l14.94,3.76l6.82,13.72l2.18,2.36l1.96,1.15l30.79,11.84l26.18,8.95l-10.8,81.07l-27.95,-4.19l-23.5,-4.25l-29.2,-6.22l-23.2,-5.69l-28.76,-8.01l-22.8,-7.12l-28.52,-9.89l-16.81,-6.36l-0.18,-0.73l-0.43,-0.33l-0.96,0.05l0.81,-1.02l-0.28,-4.88l0.73,-2.33l-0.28,-0.79l-1.31,-0.57l0.24,-1.49l-0.61,-2.47l1.97,-1.43l0.22,-3.72l-2.24,-1.11l-1.04,0.62l-0.48,1.05l-2.45,-0.87l-2.01,0.56l-1.21,-1.31l-1.29,-0.74l-0.59,-1.26l-0.72,-0.6l-0.78,0.07l-1.01,1.06l-0.29,-0.29l0.24,-0.75l-0.52,-0.5l-1.06,-0.17l-0.38,0.32l-0.1,0.76l-0.41,0.1l-0.86,-0.35l-0.75,-1.07l-0.52,-0.06l-1.36,0.61l-0.34,-0.8l-0.94,-0.1l1.63,-5.05l-0.31,-0.69l-0.98,-0.18l1.04,-0.41l0.63,-1.24l0.92,-3.44l-0.25,-0.84l0.26,-1.46l-1.07,-1.73l-2.01,-0.66l-0.66,-0.99l-0.05,-0.94l-0.68,-0.72l-0.34,-1.54l-0.44,-0.46l0.4,-1.41l-0.03,-1.72l-0.37,-0.58l-0.73,-0.1l0.25,-1.73l-0.53,-1.26l0.32,-0.68l-0.79,-2.47l-1.51,-0.56l-1.12,0.7l-0.11,-1.18l-0.94,-0.95l-1.25,-0.18l-0.47,-0.89l0.84,-0.58l0.0,-2.28l0.95,-0.43l0.28,-0.54l-0.39,-0.69l0.37,-0.3l0.75,0.06l0.49,-0.54l-0.03,-0.8l-1.6,-2.55l0.39,-1.47l-0.5,-1.07l0.27,-0.98l-0.25,-2.15l0.4,0.06l0.76,-1.19l1.64,-1.3l0.21,-0.71l-0.47,-0.62l-0.8,-0.15l-0.3,-0.58l0.26,-2.13l-0.48,-0.59l-0.05,-1.15l-0.63,-0.54l0.74,-0.4l1.57,-0.07l0.77,-1.24l1.11,-0.59l0.08,-3.19l-0.8,-0.68l0.35,-1.33l-0.42,-0.38l-1.1,0.18l-0.14,-0.44l1.9,-0.06l0.56,-1.03l-1.49,-1.53l-0.71,-2.56l-0.55,-0.3l-0.74,-1.16l0.5,-1.17l-0.6,-0.74l-0.13,-1.41l0.94,-0.65l-0.02,-2.0l-0.29,-0.55l0.6,-0.72l-0.24,-2.3l-1.89,-2.03l-0.92,0.77l-0.7,0.12l-0.75,-0.01l-0.36,-0.61l-0.72,-0.22l1.94,-1.43l0.12,-0.41l-0.28,-0.82l-0.72,-0.5l-0.29,-0.98l-0.01,-2.24l-0.78,-0.71l-0.72,-1.79l-1.02,-0.87l-0.65,-0.13l0.0,-0.66l1.38,-0.32l0.62,-1.63l1.7,-0.39l0.34,-0.37l0.1,-1.36l-1.06,-0.79l0.65,-0.87l-0.01,-0.71l-0.29,-0.49l-0.9,-0.02l0.19,-0.45l0.87,-0.55l0.71,0.18l1.01,-1.21l2.29,-0.75l1.42,-1.78l1.31,-0.69l0.15,-4.09l-0.81,-1.96l0.67,-0.54l1.76,-0.15l0.42,-0.65l0.01,-0.78l-0.56,-0.46l-0.6,0.02l0.1,-0.75l-0.44,-0.59l-1.0,-0.06l-2.28,1.16l-0.4,-0.16l1.28,-1.17l0.11,-0.45l-0.33,-0.59l-1.96,-0.69l-1.63,-0.05l-0.64,0.46l-1.07,-0.82l0.77,-1.25l-0.44,-0.84l1.7,-0.84l1.09,-2.06l0.16,-0.66l-0.32,-0.69l-1.15,-0.51l1.43,-1.81l0.18,0.29l0.73,0.08l0.45,-1.72l0.97,-0.32l0.28,-0.51l-0.44,-0.81l-0.09,-1.21l0.41,-0.5l-0.11,-1.08l0.63,-0.31l0.59,-0.96l-0.12,-2.62l-0.75,-1.25l1.56,0.55l0.46,-0.15l0.06,-0.73l-16.24,-8.77ZM212.99,287.11l-0.0,-0.01l-0.45,-0.39l0.6,0.28l-0.15,0.13ZM212.05,286.55l-0.11,0.01l-0.06,-0.14l0.18,0.13ZM180.17,279.08l0.22,-0.13l-0.03,0.22l-0.19,-0.09ZM142.41,285.87l-0.69,-0.85l0.05,-0.26l0.51,-0.01l0.13,1.12ZM142.96,264.87l0.0,-0.21l0.23,0.0l-0.16,0.1l-0.07,0.11ZM156.61,271.56l-0.26,-0.16l-0.02,-0.28l0.35,0.17l-0.07,0.26ZM155.74,270.75l-0.15,0.03l0.11,-0.14l0.03,0.11ZM160.01,281.13l0.4,-0.64l0.34,-0.13l0.07,0.65l-0.81,0.12ZM202.48,297.51l-0.11,-0.08l0.06,-0.02l0.05,0.1ZM201.89,297.32l-0.66,-0.04l0.07,-0.32l0.01,-0.01l0.59,0.37ZM211.17,288.3l-0.48,-0.11l-0.4,0.32l-0.21,-0.52l1.07,-0.1l0.02,0.4ZM208.14,287.7l-0.36,0.28l-0.26,0.01l0.62,-0.56l-0.0,0.27ZM335.17,145.92l1.0,-0.91l-0.43,-1.22l0.64,-1.86l-0.24,-1.59l1.26,-2.2l0.25,0.64l0.45,0.13l0.76,-0.79l3.51,-1.13l0.74,0.23l1.64,-0.35l0.71,0.43l1.24,-0.7l1.27,-0.2l1.05,0.14l0.29,0.54l0.59,0.26l1.22,-0.62l3.04,0.79l-0.79,3.54l-1.13,0.52l-3.24,-0.04l-0.82,0.7l-0.06,0.82l0.87,1.98l2.92,0.26l-0.45,1.5l-0.01,1.69l-0.82,0.85l0.14,1.08l-0.89,0.91l-1.88,0.72l-1.37,0.04l-0.52,0.59l-1.94,-0.92l-0.98,0.55l-3.89,0.96l-1.46,-1.4l-0.3,-2.44l-0.41,-0.24l-0.64,0.19l-0.54,-0.49l-0.03,-1.17l-0.89,-0.46l0.16,-1.34ZM343.19,180.35l0.39,-0.57l0.14,-1.89l1.48,-0.35l-0.86,3.83l-1.15,-1.03ZM297.77,196.61l-2.26,-1.86l-0.55,-1.22l0.38,-0.82l0.76,-0.32l0.24,-0.76l2.05,-1.76l0.55,-0.25l6.65,1.88l3.36,-1.6l1.84,0.21l0.67,-1.17l1.68,-0.67l0.17,-0.56l-0.66,-0.53l-2.08,0.6l-1.88,-0.19l-1.9,0.31l-1.11,0.5l-5.82,-1.7l0.31,-0.79l2.82,-2.79l6.28,0.76l0.48,-0.28l0.79,0.65l4.2,0.37l0.7,-0.36l0.28,-0.91l-0.5,-0.5l-4.76,-0.77l-0.49,-0.35l-2.68,-0.05l-2.24,-1.68l0.21,-0.61l1.35,0.12l0.37,-0.43l0.07,-1.43l-0.97,-0.43l0.79,-1.37l0.84,-0.74l2.07,-0.37l2.45,1.3l1.29,0.19l3.33,1.91l1.21,-0.14l0.02,-0.84l-1.49,-0.63l-0.23,-0.8l-1.14,-1.05l-2.82,-0.86l-0.3,-0.94l0.64,-0.8l-0.1,-0.61l2.58,-1.59l2.72,0.22l1.32,-0.67l0.16,0.75l1.65,0.26l1.13,1.18l-0.07,1.46l-0.72,0.79l0.44,2.55l-0.57,0.6l0.33,1.25l2.02,0.22l2.23,-0.84l1.08,0.55l0.85,-0.19l0.3,1.16l1.82,1.55l-0.7,1.1l0.22,1.97l0.35,0.65l1.2,0.8l1.56,2.3l-1.85,0.28l-0.97,0.54l-0.56,1.29l0.4,0.38l0.83,-0.16l0.79,0.5l0.52,-0.36l1.19,0.13l-0.09,0.43l0.56,0.69l-0.19,1.08l0.36,0.37l-0.82,2.31l0.43,2.83l1.72,0.27l1.16,-0.38l1.83,0.08l0.43,0.89l2.08,0.36l-3.46,15.46l-0.59,0.13l-1.01,-0.67l-0.79,0.44l-0.17,0.72l-1.49,-0.26l-0.41,0.8l0.12,1.27l-2.4,1.0l-0.25,0.41l-1.6,0.27l-0.55,0.48l-0.67,-0.2l-1.85,1.17l-3.69,0.32l-1.41,0.46l-3.52,-0.48l-1.07,-0.47l-2.46,-1.54l-2.23,-3.46l-0.83,-2.35l0.38,-0.84l2.93,-1.35l0.8,0.07l0.73,-0.33l1.31,0.27l1.04,-0.25l0.62,0.52l0.49,-0.13l0.19,-0.89l0.89,-0.99l1.85,-0.47l4.43,0.55l1.47,0.89l1.64,-0.19l0.99,-1.0l1.23,-0.45l0.51,-0.83l1.59,-0.92l0.09,-0.52l1.0,-0.88l-0.22,-0.82l-0.77,-0.71l-1.12,-0.14l-1.02,1.34l-1.06,0.63l-0.85,-0.15l-0.16,-0.58l-0.45,-0.2l-1.17,0.94l-0.87,-0.44l-1.62,0.22l-0.26,-0.33l1.23,-0.9l-0.09,-0.91l-0.35,-0.68l-0.46,-0.1l-0.62,0.58l-0.13,0.67l-0.26,-0.06l0.48,-1.27l-0.3,-0.89l-0.59,-0.2l-0.98,1.81l-0.08,1.28l-0.92,0.5l-0.8,0.07l-0.1,-1.12l-0.35,-0.31l-0.9,1.31l-3.84,-0.33l0.32,-1.39l1.77,-0.52l0.23,-0.6l-0.46,-0.42l-1.17,0.31l1.46,-2.76l3.51,-1.68l-0.97,-0.99l-2.7,0.74l-0.38,-2.37l-0.69,-0.02l-0.22,0.35l-0.36,2.28l-1.44,2.63l-0.13,-1.23l-1.14,-1.28l-1.05,0.74l-0.08,0.77l0.95,0.5l0.21,1.76l-1.36,2.08l-3.46,1.29l-0.36,-0.05l-0.39,-0.67l0.23,-1.39l0.63,-1.29l-0.11,-1.68l-0.42,-0.25l-1.34,1.5l-0.77,-1.27l-0.59,-0.09l-0.29,0.56l0.11,2.33l-0.93,1.06l-2.19,-2.46l0.89,-0.36l0.57,-0.73l-0.26,-0.63l-1.29,0.17l0.63,-0.76l0.26,-1.45l-2.29,-0.11l-1.24,1.13l-0.81,-1.06l-0.74,-0.14ZM328.08,134.65l1.49,-0.41l0.93,-1.05l1.49,-0.48l-0.42,0.64l0.17,1.23l0.84,0.29l0.26,1.88l1.08,1.0l-0.13,1.05l0.28,0.68l-0.86,0.82l-2.45,0.83l-0.42,-0.22l-0.69,-1.15l0.02,-0.72l-1.13,-2.38l-0.46,-2.01ZM321.15,163.02l0.27,-0.55l1.37,-0.86l1.02,-0.17l0.95,0.34l2.18,0.1l1.23,1.73l-0.05,1.16l-1.23,1.11l-0.66,-0.6l-3.08,-0.94l-2.0,-1.32ZM323.52,255.67l3.92,1.28l-0.95,4.27l-0.31,-0.07l-0.4,-1.5l-1.62,-0.83l-0.69,-2.28l0.06,-0.87ZM325.57,263.35l0.07,-0.72l0.09,0.01l0.37,0.29l-0.13,0.59l-0.39,-0.16ZM261.06,269.52l0.42,-3.04l1.57,-3.05l1.05,-0.92l1.78,-0.91l0.8,-1.49l0.97,-0.67l0.88,0.18l2.34,-0.29l0.56,-0.55l0.36,-1.5l-0.12,-0.87l-0.52,-0.56l-1.2,-0.42l-0.42,-0.6l0.04,-1.02l0.95,-1.39l2.28,-1.24l0.66,-0.77l2.37,-0.69l2.57,-1.65l2.03,-1.97l0.89,0.17l2.38,-0.35l2.61,-1.39l0.63,0.1l5.36,-1.34l1.37,0.01l1.28,-0.38l0.6,-0.51l0.67,0.14l0.85,-0.48l1.59,-0.19l1.66,-0.82l0.38,0.01l1.58,1.5l0.76,4.13l-2.16,5.66l0.16,1.56l-1.74,-0.03l-1.07,0.84l-0.27,1.63l-2.29,1.2l0.2,1.21l1.64,0.68l0.59,-0.7l2.44,-0.63l0.2,0.37l0.74,0.2l-0.08,0.49l0.37,0.37l0.67,-0.09l1.89,-1.23l0.41,-0.92l0.07,-0.89l-0.92,-0.59l2.08,-2.47l1.62,-1.35l0.96,-0.15l2.61,1.86l1.36,1.71l1.28,0.45l2.21,2.46l0.69,0.37l0.24,1.29l1.27,0.82l-0.93,2.75l-1.69,1.01l0.02,0.76l-3.52,1.88l-0.22,0.43l0.3,0.81l0.71,0.42l-0.88,1.61l0.18,0.88l0.68,-0.03l0.87,-1.47l2.69,-1.14l0.94,2.06l0.72,-0.16l0.21,-2.62l0.87,-0.72l0.04,-0.5l0.91,0.33l0.54,-0.43l-0.08,-0.87l0.72,-0.65l0.55,0.58l-0.56,0.44l0.05,0.88l1.35,1.71l0.75,-0.09l0.09,-0.57l-1.02,-1.51l0.87,-0.51l1.37,2.93l-11.47,51.41l-17.46,-4.16l-0.48,0.29l-0.35,1.39l-1.14,0.12l0.0,0.67l1.45,0.6l-1.3,-0.38l-0.5,0.41l-0.91,-0.23l0.76,-2.9l-0.37,-0.69l-29.82,-8.44l-0.5,0.24l-0.86,2.55l1.84,5.57l-0.46,-0.2l-0.66,-1.15l-0.8,-0.68l-0.68,-1.43l0.13,-4.89l0.67,-0.69l1.4,-0.58l1.73,-0.24l3.39,0.25l3.67,-0.18l11.18,1.07l2.11,0.57l0.9,1.01l2.68,1.14l1.35,-0.09l2.98,1.9l0.67,-0.2l2.43,1.71l0.51,-0.14l0.14,-0.67l0.71,0.47l0.77,-0.34l-0.01,-0.27l0.91,0.22l0.56,-0.27l1.17,0.76l3.05,0.53l0.77,-0.31l0.11,-0.56l-0.29,-0.32l0.27,-0.48l-0.57,-0.96l-1.79,-0.31l-0.91,-0.68l-0.84,-3.09l-0.67,-0.2l-1.08,-0.99l-0.79,0.15l-1.03,-1.36l-0.64,-0.28l-0.62,0.15l-0.92,-1.37l-0.63,-0.24l-0.19,-0.8l-1.01,-0.25l-0.69,-0.96l-0.46,-0.05l-0.39,0.5l-0.67,-1.05l-1.73,-1.01l-1.72,0.58l-1.18,-0.69l-1.38,0.56l-2.51,-0.34l-1.32,0.15l-3.15,-0.78l-0.6,0.23l-1.02,-0.84l-2.18,-0.06l-0.63,-0.48l0.18,-0.65l-0.56,-0.52l-2.45,-0.59l-0.91,0.29l-2.02,-0.49l-1.54,-0.86l-0.61,0.03l-0.43,-0.55l-1.39,0.06l-0.5,-1.05l0.38,-0.76l-0.22,-0.93l-2.44,-4.15l-0.27,-2.19l0.33,-0.6l4.75,-1.74l2.29,0.35l2.83,-0.41l1.41,0.46l0.88,-0.42l0.18,-0.46l3.98,-0.43l0.61,0.62l0.81,-0.17l1.81,0.45l0.73,-0.44l-0.03,-0.61l-1.86,-1.16l1.71,-0.55l0.31,0.35l0.7,-0.0l0.31,0.56l1.18,0.74l1.71,-0.3l1.18,-0.56l0.16,-0.64l-0.7,-0.44l-1.42,0.43l-0.78,-0.08l-0.21,-0.12l0.61,-0.47l-0.15,-0.44l-1.08,-0.72l-1.49,-0.27l-2.81,0.29l-2.53,-0.28l-2.19,0.43l-1.56,-0.54l-1.22,0.36l-0.84,-0.12l0.4,-1.13l-1.05,-1.55l-1.28,0.93l0.11,0.7l0.6,0.3l-0.39,0.69l-0.78,-0.88l-0.84,0.41l-0.55,-0.45l-1.68,-0.36l-0.42,-1.04l0.66,-1.04l0.9,-0.41l2.39,0.85l0.28,-0.38l0.75,-0.09l0.25,-0.72l-1.15,-1.3l1.24,-0.2l0.19,-0.81l-2.72,-0.71l-0.79,0.27l-0.68,0.84l-0.48,-0.03l-0.46,-1.51l-0.75,-0.64l-1.98,-0.51l-0.99,0.87l-0.25,-0.31ZM315.48,268.17l-0.79,0.04l-0.04,-0.21l1.17,-0.51l-0.34,0.67ZM272.81,162.81l0.83,-0.98l0.4,0.17l1.08,-0.8l0.89,-1.79l1.46,-0.77l2.3,0.16l0.97,0.64l1.33,0.17l0.56,-0.22l1.24,-1.44l0.32,-0.92l1.48,-1.14l0.49,-1.02l0.58,0.19l1.16,-0.28l0.78,-0.61l1.48,-0.1l1.56,-0.97l0.35,-1.57l1.23,-0.32l0.64,-1.04l0.68,-0.38l0.26,-0.76l0.98,-0.09l1.12,-1.54l1.02,-0.11l0.51,-0.71l1.48,-0.62l1.35,-2.17l0.75,-0.51l1.03,0.44l1.58,-0.55l2.55,0.93l1.07,-0.28l-0.04,0.4l0.84,0.27l0.14,0.7l1.17,0.65l1.07,1.51l1.58,0.18l0.36,-0.74l0.35,0.46l0.67,0.06l0.37,-0.75l1.09,-0.81l-0.22,-0.81l-1.45,-0.48l-0.12,-0.94l0.79,-0.07l1.21,-0.74l0.09,-0.67l1.38,0.07l1.15,1.83l-0.1,0.87l1.46,1.39l1.01,2.22l-0.02,0.53l-0.69,0.76l-1.45,0.12l-0.9,0.65l-1.94,-0.05l-0.62,0.98l-0.64,0.2l0.11,2.98l1.96,2.78l-0.93,0.62l-1.65,-1.71l-0.48,0.02l-0.45,0.49l-0.12,0.76l0.52,1.85l0.62,0.63l-0.08,2.78l-0.62,0.28l-0.74,1.04l-1.46,0.65l-1.07,0.01l-1.18,-0.48l-0.84,0.41l-0.52,-0.36l-0.55,0.11l-0.74,0.87l0.06,1.54l-0.44,2.45l-1.34,0.94l-1.23,0.3l-0.84,-0.49l-0.11,-1.27l-0.95,-0.47l-0.42,-2.07l0.76,-1.8l0.88,-0.73l0.15,-1.62l0.62,-0.74l0.28,-1.2l1.64,-1.76l0.07,-1.13l-0.45,-0.66l-0.59,0.04l-1.03,0.98l-1.49,-0.63l-0.55,0.27l-0.13,1.02l-0.51,-0.31l-0.61,0.32l-0.14,0.98l0.37,1.03l-0.31,1.73l-0.91,0.0l-0.48,0.74l-0.29,-0.17l-0.19,-1.11l-0.79,-0.43l-0.42,0.57l-0.7,0.24l-0.39,1.07l0.58,0.56l0.06,0.56l0.6,0.37l-0.17,2.29l-0.72,0.92l-0.84,-0.26l-0.74,0.3l-0.8,2.2l-0.6,0.78l-0.74,0.29l-0.37,-0.38l0.36,-1.66l-0.29,-1.71l0.52,-2.6l-0.49,-0.23l-0.55,0.61l-0.44,-0.35l-0.66,0.27l0.04,0.99l-0.56,0.72l0.12,2.13l-0.47,-0.14l-0.42,0.38l0.02,0.74l-0.41,-0.17l-0.55,0.41l1.08,2.04l-0.1,0.91l-0.51,-0.34l-0.35,0.13l-0.82,1.1l0.04,0.39l-1.36,1.08l-0.71,0.02l0.1,-0.78l-0.48,-0.68l-2.02,1.61l0.77,-2.24l0.75,-0.9l0.0,-1.44l-0.38,-0.3l-0.92,0.11l0.1,-0.99l0.73,-0.78l0.03,-0.56l-0.3,-0.17l0.66,-0.56l-0.72,-1.92l-0.52,-0.12l-1.12,0.76l-1.06,2.34l-0.03,1.09l-1.31,0.08l-0.93,0.92l-0.14,-1.26l-1.81,-2.34l-1.81,-0.41l-0.67,1.27l-1.44,0.51l-0.88,-0.46l-0.12,-0.41l0.71,-0.41l1.49,-2.04l0.36,-1.31l-0.84,-1.36l-1.28,0.23ZM299.65,310.08l0.53,0.27l0.45,0.46l-0.39,-0.06l-0.6,-0.66ZM287.73,182.36l0.69,-0.85l4.73,-3.33l1.13,-1.26l1.85,-0.54l1.07,0.16l0.92,-1.24l1.31,-0.42l0.79,-0.83l0.46,-0.05l0.46,0.38l0.14,0.3l-1.31,2.19l-2.18,2.12l-0.18,0.62l-1.06,1.07l-0.32,1.05l-2.69,2.15l-0.04,0.48l-2.56,1.32l-0.81,-0.98l0.09,-0.48l-0.29,-0.32l-1.56,-0.66l-0.65,-0.89ZM219.97,246.31l1.41,-1.91l0.11,-1.2l0.58,-0.36l1.1,-0.08l-0.32,-0.78l0.18,-0.7l0.48,0.19l0.98,-0.52l0.27,-1.09l0.89,-0.57l1.76,-2.13l1.99,-0.91l0.69,0.17l0.33,-0.36l0.17,-0.64l-0.47,-0.74l1.39,-1.18l-0.11,-0.61l0.47,-0.8l0.25,-1.52l-0.23,-0.7l0.67,0.55l1.19,-0.31l0.51,0.29l0.98,-0.1l1.04,-0.37l0.42,-1.4l-0.51,-0.63l-0.15,-0.96l-0.68,-0.17l-0.06,-1.13l0.71,-0.76l0.69,0.02l0.56,-0.39l0.08,-0.6l2.32,-2.69l0.8,-0.47l0.23,-1.17l1.24,-0.65l0.8,0.03l0.34,-0.54l0.77,-0.34l0.67,-1.15l0.29,-1.31l1.55,-0.35l1.1,-1.28l0.25,-1.97l-0.31,-0.53l-1.33,-0.8l-0.1,-0.5l0.42,-1.09l-0.23,-3.55l0.64,-1.27l0.5,-3.11l-0.51,-0.66l0.56,-0.75l-0.26,-0.41l2.51,0.32l0.51,0.35l0.43,0.02l0.38,-0.41l3.46,0.81l1.3,-0.08l4.09,1.2l3.23,0.37l3.44,-0.17l2.16,1.86l0.32,0.91l-0.08,1.29l3.74,4.85l1.04,0.62l0.62,1.06l0.81,0.25l-0.47,1.0l-1.5,1.46l-0.24,1.04l0.36,0.8l0.74,-0.05l0.38,-1.36l0.97,-0.5l1.31,-1.55l1.19,0.38l0.28,0.38l-0.47,1.34l0.08,1.01l-0.57,0.34l-0.89,1.63l0.34,0.56l1.91,-0.18l1.59,-1.69l0.28,-0.77l-0.19,-1.06l0.98,-0.4l4.16,-0.06l3.39,2.19l2.27,4.11l1.8,5.75l0.49,0.47l1.16,3.45l1.44,1.82l0.81,3.18l-0.08,1.01l-3.31,1.88l-4.92,0.78l-6.1,2.78l-1.26,-0.07l-5.26,2.35l-1.45,0.23l-1.65,0.71l-0.85,0.83l-1.62,-0.12l-1.32,0.83l-2.03,0.7l-0.96,2.07l-1.6,1.95l-0.47,1.5l-0.93,0.52l-2.88,1.16l-1.62,-0.74l0.17,-0.63l-0.24,-0.33l-0.93,-0.17l-0.55,0.71l0.19,1.09l-0.34,1.5l-3.38,3.51l0.05,1.25l-1.16,2.65l-0.16,1.27l-1.86,2.66l-1.02,0.7l-2.7,0.45l-3.04,-0.02l-0.44,-0.37l0.33,-0.56l-0.21,-1.0l-1.09,-0.53l-4.34,3.08l-3.99,0.69l-1.69,1.33l-1.8,-0.62l-0.51,-1.09l-0.25,-2.74l0.46,-4.89l-0.17,-1.56l-0.39,-0.61l0.01,-2.66l-0.5,-1.41l-2.97,-3.64l-2.15,-3.79l1.11,0.8l0.52,-0.4l-0.02,-0.67l-0.4,-0.56l-1.67,-0.72l-3.23,-0.72ZM278.89,175.73l-0.49,-0.42l1.55,-0.55l-0.56,0.63l-0.51,0.34ZM280.89,173.14l-0.05,-0.52l0.37,-0.4l-0.17,0.44l-0.15,0.48ZM265.98,295.52l0.41,0.33l-0.56,-0.18l0.16,-0.15ZM192.19,266.74l0.3,-0.36l0.16,0.54l-0.24,0.16l-0.22,-0.33ZM134.49,262.69l0.12,-0.19l0.63,-0.37l-0.53,0.46l-0.22,0.1ZM133.01,267.08l0.28,0.07l0.02,0.08l-0.15,0.11l-0.14,-0.25ZM125.45,269.42l0.35,-0.18l0.08,0.44l-0.34,-0.04l-0.09,-0.22Z\", \"name\": \"Northwest Territories\"}, \"CA-NU\": {\"path\": \"M694.57,496.77l1.45,-0.41l0.98,0.82l0.52,0.93l-1.78,-0.16l-1.15,-0.84l-0.03,-0.34ZM682.9,477.17l0.06,-0.73l3.09,-1.55l2.28,-0.08l0.16,0.84l0.97,-0.11l-0.26,0.99l0.67,0.87l0.04,0.63l-0.57,0.8l-0.1,1.41l-0.48,-0.03l0.2,-0.37l-0.27,-0.55l-1.47,0.05l0.01,-0.29l-0.54,-0.36l-0.45,0.12l-0.52,-0.72l-1.64,-0.3l-1.18,-0.63ZM458.86,294.89l0.69,-1.03l0.12,-1.87l1.28,-0.97l0.41,0.23l0.46,-0.24l0.63,-1.06l-0.01,-0.62l-0.42,-0.41l-1.24,0.36l-0.49,-0.37l-0.34,-2.89l1.12,-2.11l-0.36,-0.48l0.36,-0.77l0.19,-2.79l0.15,-0.21l0.4,0.29l0.51,-0.11l0.34,-0.95l0.36,-0.14l0.13,-0.53l-0.73,-1.03l0.18,-0.83l1.18,0.54l0.58,-0.22l0.23,-0.85l-0.26,-0.58l-0.78,-0.45l0.74,-1.97l-0.38,-1.61l0.2,-0.36l0.16,0.26l0.43,-0.14l0.13,-0.38l-0.61,-0.85l0.51,-1.54l0.66,-0.7l-0.26,-0.44l0.45,-0.65l1.17,-0.06l0.12,-0.59l-0.94,-0.51l0.61,-0.81l1.41,0.47l0.55,-0.15l-0.1,-0.83l-1.25,-0.66l0.98,-1.74l1.16,-0.95l0.58,-1.42l4.02,-4.37l3.91,-2.04l3.49,-1.3l3.4,-0.13l1.76,0.44l3.97,0.22l1.49,1.34l-0.09,0.41l-0.39,0.92l-3.07,3.29l-0.74,0.43l-2.77,4.99l-1.59,4.49l-0.2,1.53l-2.06,4.52l-0.33,3.11l0.51,1.79l2.87,3.81l0.14,1.36l-1.11,2.75l0.04,3.45l0.38,2.71l0.54,0.48l1.61,4.19l1.24,1.26l0.91,1.49l0.64,0.41l0.25,0.78l1.1,1.03l0.66,1.16l1.93,0.96l0.28,0.43l1.59,0.27l0.08,1.57l0.55,0.31l0.2,0.65l-2.26,-0.26l-0.56,0.35l0.02,0.82l-0.69,-0.12l-0.57,0.29l-0.32,1.27l-1.2,-0.52l-1.85,0.77l-2.42,2.82l-3.42,1.32l-0.38,0.55l0.31,0.43l1.16,0.27l2.86,-0.76l2.85,-2.34l0.68,-0.95l1.5,-0.2l0.49,-0.42l2.28,0.52l0.56,-0.55l1.03,-0.26l-0.01,0.92l-0.51,-0.15l-1.13,0.39l-0.26,0.55l0.37,0.38l0.72,0.05l-0.06,0.67l0.58,0.71l-0.13,1.79l0.47,0.27l1.12,-0.17l0.37,-0.35l0.27,-1.15l-0.68,-2.37l0.1,-2.05l0.82,-0.76l-0.04,-0.5l-0.91,-1.17l0.13,-2.54l1.28,-0.72l0.23,-0.74l-0.35,-1.93l-0.72,-1.15l0.29,-0.96l-0.4,-0.73l-0.68,-0.22l-1.26,0.21l-0.31,0.48l0.13,0.39l-2.62,-0.82l-1.39,-1.79l0.48,-0.3l0.08,-0.55l-1.02,-2.06l-1.5,-1.05l-1.25,-0.46l-0.18,-0.49l1.72,0.19l-0.23,-0.81l1.12,-0.21l0.48,-0.51l-0.02,-1.02l0.65,-0.24l0.14,-0.45l-0.74,-1.32l0.52,-0.49l-0.09,-0.29l0.52,-0.18l0.32,0.44l0.63,-0.18l0.36,0.3l0.76,-0.34l1.93,1.98l1.21,0.53l0.72,1.21l1.02,0.76l0.34,1.5l0.53,0.49l0.54,-0.31l0.08,-1.28l-0.27,-1.08l-1.09,-0.87l-0.64,-1.52l-1.33,-0.47l-0.71,-0.9l-0.0,-0.81l-1.53,-0.76l0.54,-1.17l1.87,-0.1l0.64,-0.59l-0.05,-0.63l-0.67,-0.07l-0.38,0.35l-1.49,-0.13l0.33,-1.4l-0.35,-0.45l-1.12,0.68l-0.92,1.29l-1.61,-0.64l-1.12,-1.0l-0.66,-1.5l0.66,-0.27l0.24,-0.59l-1.19,-0.53l-0.44,-0.77l-0.08,-5.9l0.49,-1.27l2.32,0.46l1.67,1.04l3.06,1.1l1.54,1.13l2.18,0.68l0.2,-0.85l-2.01,-0.88l-2.6,-2.11l-2.93,-1.53l-1.19,-2.97l0.69,0.09l1.09,0.74l2.84,0.74l3.94,0.35l1.4,0.94l0.52,0.05l-0.06,-0.89l-1.15,-1.13l-5.25,-1.25l-2.97,-1.77l-0.82,-0.05l0.2,-2.03l1.57,-1.49l0.77,1.62l0.99,0.68l0.83,1.15l0.84,-0.07l0.18,-0.55l-1.66,-2.02l-0.49,-1.37l2.49,-1.67l2.45,0.71l0.73,2.42l0.51,0.6l0.49,-0.02l0.26,-0.97l-0.7,-3.07l-2.15,-1.0l1.91,-1.63l2.87,-1.83l0.38,0.28l0.57,-0.11l1.13,-1.93l4.82,-0.43l3.3,0.19l0.59,1.49l1.44,2.07l0.89,6.25l0.6,0.57l3.37,1.48l0.54,1.24l-0.42,2.62l0.28,1.36l1.2,2.0l1.25,0.59l0.49,1.29l-0.61,0.42l-1.06,1.94l0.18,1.18l-1.25,1.2l-1.39,2.04l-0.34,1.34l-0.79,1.18l-0.04,1.01l-1.07,1.14l0.38,0.63l1.13,-0.55l2.05,-4.19l1.74,-1.68l0.11,2.17l-1.34,1.85l-0.46,2.25l-0.79,0.26l0.13,0.45l1.94,1.39l-1.92,0.38l-0.11,0.75l-0.36,0.26l-0.03,0.63l0.44,0.31l0.83,0.03l0.58,-0.33l-0.06,1.88l-0.86,1.26l0.58,0.45l1.15,-0.69l0.47,-0.93l-0.06,-0.85l2.28,-1.73l0.25,-0.81l-0.16,-0.79l-0.82,-1.04l0.64,-0.06l0.77,-0.91l-0.47,-1.72l0.91,1.53l1.09,1.07l2.0,0.71l0.49,-0.54l-0.57,-0.78l-1.4,-0.66l-1.82,-2.49l0.53,-1.32l1.11,-0.88l1.33,1.64l-0.92,2.02l0.13,0.74l0.38,0.31l0.78,-0.26l0.43,-1.15l0.58,1.55l0.67,0.07l0.1,-0.87l-0.64,-1.52l0.82,-2.03l1.77,2.05l0.46,0.15l-0.07,0.8l0.33,0.72l-0.27,2.67l-1.03,2.24l0.12,0.44l0.62,0.44l0.84,-0.43l2.21,0.77l1.42,1.23l0.72,-0.44l-0.01,-0.5l-0.63,-0.54l-0.3,-0.94l-1.23,-0.3l-0.95,-0.84l-0.11,-2.89l2.0,1.09l1.2,3.33l1.53,2.41l1.42,0.81l1.14,0.25l0.37,-0.6l-0.59,-0.47l0.48,0.2l0.58,1.0l0.46,0.13l0.31,-2.04l-1.44,-0.54l-1.99,-2.7l-0.61,-0.18l-0.64,0.23l-1.18,-2.89l-1.97,-0.89l-1.13,-0.9l0.56,-1.27l-0.33,-0.73l0.81,-0.64l0.44,2.37l1.08,1.41l0.7,-0.56l-0.73,-1.43l-0.1,-1.29l2.36,0.65l0.59,0.63l0.45,-0.3l0.77,0.27l0.81,0.75l0.4,1.14l-0.15,0.87l0.61,0.29l0.53,-0.9l-0.22,-0.98l1.64,-0.35l2.11,0.9l0.48,-0.21l-0.13,-0.5l-1.12,-0.76l-1.2,-0.4l-1.69,0.17l-2.01,-1.39l-2.94,-1.01l-2.16,-1.59l-0.28,-1.48l0.49,-1.71l1.39,-1.61l1.28,-1.14l1.2,-0.39l1.06,-1.18l4.48,-0.37l1.22,0.71l0.16,0.89l0.52,0.5l3.11,0.45l0.56,2.06l0.61,0.47l0.66,-0.47l-0.32,-1.5l0.42,-0.69l1.2,0.0l1.93,0.9l1.73,0.36l0.53,1.58l1.91,3.11l-0.46,1.49l-0.95,1.37l-1.27,-0.25l-1.24,0.22l-2.91,2.14l-0.33,2.1l-0.75,1.09l-0.57,1.79l0.33,0.81l0.78,-0.31l0.47,-1.7l0.92,-1.46l0.26,-1.54l1.99,-1.69l0.77,-0.14l1.76,0.58l-1.7,1.0l-0.48,0.63l-0.21,3.99l-0.7,2.19l-1.44,0.77l-0.11,0.52l0.48,0.33l1.63,-0.52l0.55,-0.64l0.71,-2.62l0.15,-3.33l0.29,-0.42l1.09,-0.08l0.82,-0.68l0.54,-2.42l0.9,0.32l3.87,-0.17l0.92,0.9l0.57,1.21l-0.42,1.07l0.42,1.07l-0.26,0.8l-0.87,0.45l-1.1,-0.35l-0.33,0.65l0.18,0.36l-0.7,1.29l-1.15,0.73l-0.96,-0.09l-1.97,0.84l-0.39,0.52l-0.05,0.38l0.57,0.42l1.94,-0.92l0.63,0.31l-2.65,3.27l0.23,0.7l0.55,-0.1l1.21,-0.98l0.84,-1.22l1.01,-0.72l0.43,-1.33l0.28,-0.26l0.18,0.33l-0.06,1.06l-0.66,1.24l-1.41,0.53l-0.65,1.37l-0.05,0.52l0.56,0.41l0.74,-1.25l0.85,-0.18l-0.53,1.24l1.43,0.31l0.32,0.72l-1.98,4.49l0.25,0.66l0.85,-0.17l2.17,-4.95l-0.15,-0.96l-1.06,-1.78l-0.01,-0.47l0.68,-0.48l0.26,-2.28l0.65,-0.31l0.66,-1.43l0.52,-0.2l-0.53,2.66l0.36,1.13l0.93,0.59l0.43,-0.58l-0.72,-1.5l0.55,-0.76l0.39,-2.23l0.37,-0.41l0.92,-0.21l0.43,0.98l-0.74,1.09l0.06,0.68l-0.45,0.44l-0.42,3.14l-1.76,1.59l0.33,0.71l1.37,-0.82l0.2,1.52l-0.65,0.95l0.69,0.42l-0.72,1.87l0.74,0.32l1.26,-3.14l-0.2,-1.04l0.42,-1.9l-0.07,-1.72l0.6,-1.12l0.55,0.31l-0.13,2.41l0.61,1.05l-0.18,0.66l0.58,0.46l0.39,-0.16l-0.77,1.79l0.2,3.3l-0.07,0.44l-0.93,0.89l0.27,0.63l0.51,-0.04l1.23,-1.01l-0.01,-3.42l0.96,-2.35l0.28,-0.01l1.43,0.77l-1.0,1.14l0.48,1.6l-0.11,1.13l-0.87,1.71l0.76,1.2l0.46,0.19l0.29,-0.41l-0.38,-1.22l0.66,-0.72l0.42,-2.32l-0.23,-1.02l0.78,-0.18l0.33,-0.81l-0.04,-1.56l-0.52,-1.67l0.81,-0.19l0.58,-0.61l-0.16,-0.92l-0.54,-0.67l1.11,-1.15l-0.11,-2.23l7.09,1.89l0.97,0.79l0.12,0.55l1.23,0.9l1.53,1.97l-1.07,2.38l-0.26,2.06l-2.63,-0.48l-1.51,1.0l-0.44,0.82l0.19,0.87l-0.24,1.05l-0.77,0.74l-0.04,1.35l-2.72,1.93l0.03,0.47l0.46,0.12l2.02,-0.83l1.04,-0.93l0.6,0.28l-0.84,1.94l0.09,1.23l-1.54,1.42l0.08,0.57l0.75,0.44l1.6,-1.56l0.59,-2.29l1.55,-0.85l2.23,-2.28l1.62,-0.61l0.77,0.51l0.62,-0.2l-0.0,-0.67l-0.92,-0.84l0.25,-2.25l1.7,-2.06l0.62,-0.05l0.53,0.36l1.43,3.01l-0.98,1.81l-0.07,2.43l-1.64,1.47l-0.4,2.01l-2.14,-0.37l-0.75,0.42l0.12,1.53l-0.72,1.26l0.05,0.94l-1.08,0.39l-0.32,0.54l0.45,0.64l1.24,-0.56l0.08,1.68l-0.36,0.59l0.22,0.65l0.57,-0.05l0.49,-0.64l0.37,-1.45l-0.25,-2.22l0.65,-1.71l0.81,-0.31l0.9,0.23l-0.19,4.5l0.55,1.12l-0.83,5.47l0.79,0.17l0.98,-2.69l0.33,-2.96l-0.27,-0.77l0.11,-3.1l0.14,-1.62l0.4,-0.4l-0.53,-0.75l0.08,-1.34l0.93,-0.58l2.43,-3.47l1.07,-0.64l1.83,-2.13l0.44,0.09l-0.04,0.76l-0.62,1.81l-1.33,1.96l-1.69,1.01l-0.07,0.82l0.88,1.5l-0.46,1.01l0.42,0.5l0.61,-0.15l0.97,-1.17l-1.02,-1.74l1.0,-0.35l1.13,0.25l0.37,-0.3l0.18,-1.3l0.55,-0.62l1.35,-0.47l0.09,-1.77l0.66,-0.58l0.5,0.19l1.08,-0.36l1.09,1.02l6.27,2.05l0.21,0.76l-0.55,2.69l-0.45,-1.59l-0.83,-0.0l-0.46,1.29l0.45,1.34l-0.14,0.57l-1.12,0.77l-0.93,0.17l-0.42,0.53l-0.79,0.14l-1.61,1.16l-0.33,0.68l-0.72,0.38l-1.14,1.37l-0.3,1.67l-1.25,0.89l-0.46,1.36l0.34,0.34l0.58,-0.1l0.52,-1.07l0.8,0.15l0.37,0.45l-1.04,0.07l-0.98,0.85l-0.5,0.68l0.03,0.85l-1.2,1.16l-0.21,0.6l0.46,0.49l0.96,-0.26l1.65,-2.93l0.65,-0.22l0.65,0.21l0.88,-0.75l0.06,-0.98l-0.74,-1.23l0.4,-1.35l2.94,-1.79l1.3,0.24l0.4,-0.8l1.63,-0.58l0.37,0.72l-0.53,0.89l0.08,1.44l-1.99,1.87l-1.36,3.53l-2.35,0.15l-0.71,1.11l-0.46,3.71l0.27,0.82l0.83,-0.16l0.05,-1.1l0.57,-1.29l0.07,-1.59l0.78,-0.3l0.92,0.36l1.01,-0.3l0.83,-2.49l0.58,-0.83l0.91,-0.9l1.8,0.0l0.48,-0.43l-0.19,-0.89l0.56,-1.42l1.19,-0.79l0.79,-1.54l-0.18,-0.51l-0.74,-0.16l-0.35,-0.46l0.18,-0.37l-0.26,-0.41l0.75,-2.17l0.49,0.45l1.52,0.28l3.74,3.23l0.67,1.14l1.26,1.04l1.76,3.93l-1.12,0.47l-3.27,-0.62l-1.87,0.61l-1.42,1.94l-0.35,1.64l-2.6,0.34l-3.44,3.23l-3.28,-0.02l-0.74,0.27l-1.66,1.03l-0.02,0.7l1.31,0.42l1.62,-1.27l2.97,0.23l1.92,-1.07l0.42,-0.83l1.07,-0.73l1.13,-0.24l4.87,1.63l0.88,-0.06l0.8,-0.75l3.89,-0.64l3.67,1.66l1.14,1.21l0.41,1.1l-0.24,1.15l-1.47,-0.47l-1.54,0.17l-0.56,0.6l-1.08,-0.35l-0.87,0.88l-1.11,-0.02l-4.61,-1.81l-1.08,0.52l-5.37,0.06l-1.45,2.21l0.35,0.67l0.58,-0.07l1.48,-1.85l4.11,0.37l1.46,-0.52l0.8,0.68l-3.61,0.22l-1.14,0.71l-1.28,0.14l-0.3,0.6l0.9,0.45l2.07,-0.62l-0.61,0.96l-2.12,0.83l-0.53,0.55l-0.09,0.5l0.49,0.46l0.8,-0.48l0.07,2.84l0.71,-0.2l0.37,-0.69l0.01,-2.02l2.87,-2.49l1.64,0.27l3.38,1.33l-1.21,0.42l-0.35,0.82l-1.72,-0.31l-1.14,0.25l-1.16,0.76l-0.11,0.8l0.63,0.33l1.37,-0.73l1.95,0.49l0.07,0.67l-2.9,0.05l-0.35,0.3l0.51,0.66l0.61,0.03l-1.58,0.41l-0.14,0.41l0.52,0.48l-0.14,0.2l-0.81,-0.28l-1.59,0.31l-0.85,-0.53l-2.17,-0.21l-0.71,0.41l-0.15,0.52l0.74,1.32l2.91,-0.38l-0.17,0.83l0.48,0.36l0.89,-0.69l1.43,0.15l0.92,-0.36l3.0,0.22l-1.22,1.14l-2.02,-0.24l-1.06,0.51l-0.38,0.94l-0.57,0.4l0.31,0.64l0.92,0.07l0.4,0.37l2.29,-0.4l0.45,-0.89l1.59,0.19l0.47,0.56l1.29,-0.08l0.56,2.64l0.45,-0.14l0.34,-0.74l-0.22,-2.22l1.09,-0.75l0.63,0.18l-0.53,0.96l0.8,2.28l-1.1,0.65l-0.51,0.76l-0.03,0.89l0.34,0.61l0.69,-0.03l0.43,-1.26l0.67,-0.18l0.14,0.43l-0.73,0.86l0.47,0.42l0.32,-0.1l0.96,-0.69l-0.06,-1.12l0.61,-0.89l0.58,0.43l0.56,-0.92l0.88,0.18l-0.89,0.38l-0.58,1.2l0.12,1.99l-1.14,-0.14l-0.59,0.34l0.1,0.64l0.48,0.23l1.36,0.22l0.58,-0.3l0.47,-1.62l-0.32,-0.9l1.34,-1.3l1.77,0.49l-0.19,1.15l0.27,0.98l-0.64,1.3l0.17,1.06l0.41,0.45l0.55,-0.08l0.1,-1.17l0.73,-1.16l0.3,0.93l-0.13,1.2l0.15,0.43l0.45,0.01l0.62,-0.83l-0.17,-2.76l1.41,-0.1l-0.74,0.51l-0.22,0.63l1.11,0.26l0.72,-0.6l0.55,0.95l-0.69,0.91l-0.07,2.22l-1.92,-0.02l-0.56,0.43l0.09,0.64l2.05,0.54l0.72,-0.18l0.32,0.77l0.47,0.14l0.42,-0.47l-0.33,-1.25l0.0,-2.22l1.35,-1.57l-0.2,1.04l1.08,1.38l0.16,3.19l0.5,1.59l0.65,0.46l0.41,-0.68l-0.7,-3.48l0.87,-1.12l0.11,-0.9l-0.49,-1.05l0.62,-0.77l1.07,-0.25l0.15,2.93l-0.33,1.24l0.53,0.72l1.28,0.62l1.09,1.89l0.65,0.25l0.41,-0.64l-0.92,-2.03l-1.79,-1.22l0.3,-2.6l1.38,-1.36l0.02,-1.16l0.51,-0.86l2.04,0.52l-0.69,0.76l-0.86,0.09l-0.59,0.55l0.16,0.62l0.72,0.08l-0.19,0.72l-0.71,0.32l0.09,1.47l0.5,0.36l0.55,-0.57l-0.9,2.0l0.42,1.53l0.37,0.23l0.54,-0.3l-0.09,-1.47l0.59,-0.57l0.05,-0.77l0.46,-0.59l0.38,0.45l-0.09,1.22l0.5,0.27l0.58,-0.27l0.26,-0.7l-0.35,-1.86l0.48,-0.44l1.86,0.93l-1.5,1.87l0.5,0.54l1.95,-1.32l0.24,-0.55l0.64,0.87l-0.19,1.03l0.5,0.16l1.03,-0.39l0.25,1.77l-0.68,0.8l-1.33,0.11l-0.36,0.33l0.23,0.43l1.32,0.31l1.94,-0.85l1.02,1.54l-0.3,0.73l-5.62,0.57l-0.51,0.47l0.32,0.64l3.99,-0.1l-0.41,0.42l-1.21,0.14l-1.79,1.38l-0.28,0.52l0.3,0.55l0.68,0.01l1.27,-1.17l2.68,-1.09l-2.83,2.39l-0.4,0.71l-0.09,1.02l0.38,1.42l0.39,0.36l0.78,-0.41l-0.06,-1.81l0.36,-0.86l1.17,-0.53l1.27,-1.21l1.42,-0.48l0.36,-1.11l0.95,0.13l0.52,-0.56l1.08,-0.44l0.37,0.8l-0.23,1.29l-1.16,1.76l-0.17,1.27l0.52,0.87l0.49,0.08l0.04,-1.63l1.16,-1.2l0.61,-1.4l-0.25,-2.7l0.37,0.19l0.65,-0.46l0.26,-0.66l-0.17,-0.83l0.79,0.36l0.48,1.0l-0.21,1.05l-1.18,1.04l-0.24,0.75l1.15,2.57l-0.16,0.48l-1.81,1.45l0.05,1.54l-1.36,0.35l-0.27,0.35l0.46,0.73l1.96,-0.42l0.72,-0.73l0.3,2.11l0.53,0.34l0.37,-0.19l0.23,-2.4l-0.53,-1.52l2.68,-2.39l1.05,2.86l0.25,3.22l0.61,0.48l0.64,-1.37l-0.29,-0.87l0.22,-1.52l-0.93,-2.78l0.9,-0.23l1.02,1.69l0.75,0.3l1.17,1.39l0.85,-0.11l-0.18,-1.16l-1.5,-1.3l-0.35,-0.7l0.01,-0.4l0.88,-0.85l-0.59,-1.65l0.99,-0.64l0.34,0.06l-0.0,2.25l0.25,0.44l0.75,0.09l0.21,0.46l0.45,0.11l0.51,-0.57l1.97,-0.44l-0.69,0.81l0.27,0.36l0.85,0.23l1.05,-0.23l2.61,2.39l0.07,0.53l-0.74,0.62l-0.1,0.59l-0.67,0.16l-0.62,-0.81l-1.02,-0.6l-1.28,0.03l-1.19,-0.43l-0.45,0.2l-0.05,1.01l-0.88,0.62l-0.15,0.45l0.34,0.4l0.77,0.13l0.56,-0.29l0.29,-0.8l1.16,-0.0l2.51,1.93l-0.79,0.38l-0.26,0.53l-0.94,0.21l-0.77,1.17l0.32,0.4l0.56,0.05l0.67,-0.53l2.09,-0.67l0.46,0.39l-0.13,0.23l-0.45,0.05l-0.34,0.53l-0.95,0.19l-0.36,1.09l-0.33,0.13l-1.31,-0.42l-0.75,0.49l-0.37,-1.07l-0.57,-0.48l-3.33,0.22l-0.77,0.93l0.09,0.59l1.19,0.3l0.67,-0.67l0.31,0.6l1.23,0.69l-0.19,0.37l-1.47,1.5l-0.57,-0.21l-1.12,-1.43l-0.84,0.01l-0.31,0.51l1.33,1.68l1.21,0.78l0.64,-0.08l0.73,-0.72l1.88,0.66l1.22,-0.23l0.27,0.77l0.7,0.14l0.04,0.78l0.47,0.13l-0.85,0.26l-0.63,0.76l-0.72,-0.45l-1.16,-0.01l-0.87,0.35l-0.62,-0.19l-0.59,0.4l-0.99,-1.4l-0.91,-0.43l-1.15,1.0l0.32,0.7l0.94,-0.35l1.44,1.67l2.47,-0.39l0.45,0.44l0.57,-0.05l-0.09,0.93l0.73,0.34l0.7,0.91l-0.79,0.63l-0.35,-0.32l-0.85,0.4l-1.78,-1.23l-0.7,-0.08l-0.18,0.94l0.63,0.72l2.55,1.16l-1.81,-0.21l-0.36,0.52l-0.82,0.15l1.03,2.77l-0.49,-0.42l-1.44,0.23l-2.78,-3.16l-0.84,-1.54l-0.5,-0.23l-0.52,0.4l0.32,1.56l1.97,2.25l0.15,0.61l-2.48,0.81l-0.08,0.55l0.87,0.62l0.76,-0.35l0.71,0.3l0.93,-0.36l0.34,0.34l0.03,0.84l-0.51,0.28l-0.81,-0.86l-0.68,-0.1l-0.31,0.51l0.26,1.11l0.97,0.67l-0.85,0.57l0.22,0.54l1.41,0.54l-0.12,0.47l0.51,0.46l1.03,0.41l-0.42,0.7l0.62,1.36l-0.54,0.45l0.71,1.05l0.88,-0.01l-0.39,0.45l0.28,2.2l-0.28,0.51l-0.72,-0.48l-0.97,0.83l0.81,-0.76l-0.09,-0.71l-0.28,-0.1l-0.91,0.15l-0.35,0.55l-0.37,-0.89l0.29,-1.65l-0.41,-0.45l-0.88,0.34l-0.39,1.72l-0.85,-0.15l-0.04,1.3l-0.79,-0.78l0.87,-1.93l-0.86,-0.2l-1.53,1.14l-0.49,-2.36l0.44,-1.52l-0.09,-0.98l-0.54,-0.34l-0.57,0.35l-0.21,1.79l-0.5,0.64l0.46,3.9l-0.35,-0.23l-0.25,-0.91l-0.71,-0.18l0.32,-0.69l-1.21,-0.53l-0.46,0.34l-0.08,0.5l-0.2,-0.12l-0.13,-0.62l0.76,-0.15l0.51,-0.78l-0.4,-0.58l-0.62,0.07l1.07,-1.21l1.3,-0.26l0.14,-1.53l-0.67,-0.44l-0.45,0.73l-1.47,0.31l-0.2,0.66l-1.39,0.65l-0.79,1.14l-0.68,-0.57l-0.39,-0.92l1.43,-0.95l0.34,-1.28l0.29,-0.01l0.24,-0.63l-0.5,-0.51l0.75,-0.49l0.05,-0.53l-0.45,-0.29l-1.35,0.38l-0.53,2.51l-1.2,0.35l-0.18,-0.92l0.55,-0.48l-0.03,-0.73l0.68,-0.76l1.26,-0.6l-0.05,-0.89l-0.6,-0.08l-1.44,0.68l-0.69,0.69l-0.34,0.97l-1.71,0.12l0.07,-1.83l-0.26,-0.33l-0.64,0.13l0.37,-2.25l2.59,-2.46l1.07,0.37l0.82,-0.31l-0.14,-0.66l-0.98,-0.6l-0.07,-3.39l0.88,-1.88l1.13,-1.23l0.17,-0.62l-0.43,-0.52l-1.04,0.55l-1.7,1.85l-0.54,2.08l0.28,1.6l-0.49,0.74l-0.53,0.21l-1.05,1.26l-0.61,-0.13l-0.68,1.47l-3.63,1.59l-0.61,-1.34l0.16,-0.77l1.74,-2.36l0.51,-2.99l-0.49,-1.87l-0.63,-0.04l-0.19,0.3l-0.42,4.19l-1.06,1.41l-0.79,0.5l-0.92,-0.13l-1.04,-1.14l0.36,-1.37l-0.28,-0.43l-0.47,0.19l-0.44,0.81l-1.47,-0.11l-0.31,-0.53l0.09,-0.6l-0.8,-0.16l0.76,-0.76l-0.28,-0.66l-0.57,-0.04l-1.29,1.36l-0.01,-1.4l-0.56,-0.34l-0.51,0.52l-0.5,-1.59l0.51,-0.99l-0.3,-0.45l-1.13,0.24l-1.9,-0.65l-0.33,0.65l1.6,1.05l-0.31,0.34l-1.32,0.44l-0.96,-0.27l-0.44,-0.62l-1.0,0.37l-0.97,-0.57l-0.35,0.72l-0.41,0.04l-0.88,0.98l0.65,0.65l2.65,-0.4l0.67,0.17l0.43,0.79l0.92,0.48l0.1,0.44l-1.41,-0.44l-0.43,0.14l-0.2,0.59l0.75,0.81l1.79,0.67l-0.75,0.54l-0.54,-0.39l-0.26,0.21l-0.91,-1.3l-1.66,-0.97l-0.49,0.25l-0.72,-0.19l-0.62,-1.05l-1.11,0.17l-0.48,0.54l0.16,0.52l1.09,0.64l0.41,0.86l0.93,0.76l0.75,1.19l-0.05,1.05l3.15,1.69l1.16,0.19l1.0,1.25l-0.47,0.3l-0.05,0.71l0.77,0.63l-0.39,0.18l-0.74,-0.28l-0.37,0.99l-0.95,0.19l-1.16,-0.82l-0.63,0.35l0.43,1.06l-0.27,0.32l-0.63,-0.16l-1.24,-1.61l-0.02,-1.8l-2.32,-0.81l-0.78,-1.44l-0.63,-0.01l-0.45,0.44l-0.58,-1.04l-0.78,-0.51l-0.46,0.21l-0.07,0.49l0.68,1.2l-2.72,1.06l0.31,0.64l1.36,0.11l1.7,-0.77l1.93,1.66l0.6,0.1l0.38,-0.45l-0.28,-0.56l0.87,0.64l0.01,0.33l-0.54,0.04l-0.39,0.57l-0.64,-0.57l-0.57,0.19l-0.0,0.66l0.71,0.87l-0.18,1.0l0.76,0.68l0.89,-0.25l0.01,0.91l0.43,0.29l-0.42,0.73l0.54,0.41l1.6,-0.08l0.54,-0.43l-0.36,0.54l0.05,1.05l0.82,0.33l0.16,0.5l-0.66,0.16l0.09,0.71l-0.45,0.82l0.21,0.56l0.59,0.06l-0.25,1.07l0.52,0.44l0.48,-0.36l0.63,-1.97l0.54,-0.28l0.22,-1.04l1.25,-0.75l0.34,0.18l0.51,-0.36l-0.01,-0.43l1.0,0.28l0.17,0.33l-0.46,0.83l0.21,0.36l-0.75,1.49l1.43,0.98l1.73,-0.66l0.42,0.5l-0.07,0.64l-1.38,0.37l-0.81,0.55l-0.19,0.59l0.48,0.5l0.61,0.1l0.61,-0.72l0.74,0.38l0.35,1.8l0.85,0.37l0.46,-0.4l0.55,0.1l0.19,1.06l-0.71,0.4l-0.23,1.29l0.55,0.26l0.7,-0.62l0.72,0.5l0.95,-0.02l0.51,0.75l-0.6,0.81l1.04,0.41l-0.1,0.9l1.14,2.04l0.78,-0.07l0.29,-0.88l-0.6,-0.62l-0.38,-2.84l-0.48,-0.75l0.52,0.19l0.2,0.82l0.71,0.45l1.39,0.04l0.33,0.84l0.58,-0.07l0.19,-0.62l0.31,0.19l0.21,1.48l-0.91,0.24l-0.16,0.68l1.08,0.23l0.57,1.18l0.44,0.07l0.46,-0.4l-0.13,-1.23l0.04,-0.29l0.53,1.04l0.72,-0.24l1.34,1.16l0.43,0.03l0.32,-0.41l-0.12,-0.55l-1.12,-1.21l0.19,-0.62l-0.72,-0.54l0.08,-0.66l-0.29,-0.39l0.28,-0.12l0.38,1.13l0.64,-0.23l-0.13,1.01l0.57,1.12l0.5,0.15l0.28,-0.49l-0.19,-1.12l0.42,0.49l0.19,1.22l-0.28,0.81l-0.75,0.64l0.96,2.23l0.44,0.16l1.17,-0.56l0.27,0.32l0.64,-0.18l0.3,0.54l0.57,-0.17l0.21,-0.59l0.53,-0.02l0.26,-0.45l0.94,-0.02l0.08,0.44l-1.15,0.7l-0.12,0.55l0.92,0.72l-0.06,0.57l-2.62,0.09l-0.89,0.66l-0.13,0.65l0.51,0.23l1.18,-0.44l-0.61,0.48l0.09,0.63l0.62,0.14l1.03,-0.41l0.67,0.31l-0.54,1.3l0.48,0.28l0.61,-0.22l0.29,-0.59l0.32,0.21l0.6,0.66l-0.19,0.32l0.26,0.52l-0.3,0.64l0.37,0.4l2.23,-0.34l0.04,0.74l0.46,0.02l0.61,-0.53l0.29,-0.81l0.34,0.24l0.56,-0.38l0.18,0.22l-1.53,1.95l0.09,0.7l-0.52,0.44l-0.03,0.88l0.95,0.96l1.69,0.18l0.45,-0.24l1.74,1.04l0.2,0.48l-0.47,0.7l0.53,0.51l1.11,2.71l-0.7,-0.07l-0.27,0.71l0.43,0.55l0.85,0.13l0.2,0.39l-0.88,0.25l0.13,0.61l0.9,0.27l-0.51,0.23l-1.11,-0.91l-1.52,-3.1l-1.23,-1.15l-0.37,-1.05l-1.5,-0.75l-1.36,-1.84l-1.5,-0.2l-0.37,0.51l2.03,1.66l0.73,1.05l1.02,0.59l-0.64,0.99l0.77,1.77l-0.59,0.67l0.78,0.94l0.8,-0.19l0.98,1.22l-0.73,-0.32l-0.46,0.27l0.06,0.47l-0.32,0.02l-0.27,0.66l0.9,0.88l0.37,0.84l0.53,0.26l0.95,-0.38l0.41,0.63l0.73,-0.1l-0.41,0.25l0.02,0.64l0.6,0.27l0.38,0.75l-0.06,1.3l1.26,0.59l-0.07,0.52l-0.77,0.16l-1.95,-0.91l-0.65,-0.89l-0.62,0.28l-0.04,0.62l-0.58,-0.65l-0.66,0.31l0.13,0.75l1.08,0.83l0.25,0.9l2.55,2.45l0.58,1.08l-1.04,1.6l-0.51,-0.36l-1.04,-1.83l-0.26,0.05l0.42,-1.04l-0.23,-0.6l-0.58,-0.02l0.44,-0.38l-0.29,-0.64l-0.56,0.01l-0.36,-1.34l-0.79,0.23l0.01,1.36l-1.22,0.77l-0.71,-1.25l-0.78,-0.08l0.19,-1.27l-0.76,-1.4l-0.61,0.13l-0.18,0.73l-0.45,-0.23l-0.42,0.2l-0.71,1.16l-0.47,-1.12l-0.77,0.16l-0.45,-0.76l-1.37,-0.58l-0.46,0.33l0.1,0.53l0.81,0.59l0.39,0.91l1.11,0.62l-0.01,0.38l-1.22,-0.65l-1.0,0.15l-1.14,-0.99l0.1,-0.36l-0.96,-1.06l-0.25,-1.14l-1.39,-0.99l0.13,-1.28l-0.27,-0.63l-0.71,0.03l-0.26,2.36l-0.41,-0.2l-0.42,0.46l0.11,0.93l0.59,0.94l-1.38,-1.03l0.36,-0.84l-0.65,-0.78l-0.28,-1.63l-0.55,-0.11l-0.39,0.37l0.37,2.04l-0.91,-0.42l-0.28,0.26l-1.34,-1.03l-0.81,-1.45l-0.68,0.04l-0.09,0.29l-0.63,-1.12l-0.82,-0.47l-0.87,-1.14l0.03,-0.36l-0.6,-0.38l-0.47,0.39l-0.36,-0.77l-1.44,-1.18l-0.47,0.04l0.07,0.87l1.36,1.69l0.37,1.43l1.98,3.03l-0.7,-0.34l-1.51,-1.66l-1.45,-0.62l-0.54,-0.85l-0.79,0.11l-1.1,-1.62l-0.52,0.0l-0.2,0.94l-0.57,-0.9l-0.72,-0.44l-0.63,-0.06l-0.22,0.29l-1.62,-0.51l-0.41,0.53l0.22,0.44l-1.37,-0.23l-0.86,0.53l0.28,0.7l1.76,1.39l-0.23,0.39l0.17,0.49l0.68,0.2l0.91,1.08l2.22,1.24l2.37,2.05l0.24,0.75l0.79,0.39l0.03,0.8l1.12,0.68l1.56,-0.11l-0.1,0.91l0.36,0.54l0.7,-0.17l0.29,-0.85l1.0,0.23l-0.45,0.99l0.92,1.52l0.5,-0.1l0.68,0.63l0.75,-1.18l0.81,-0.52l0.2,0.78l0.61,-0.08l0.53,0.41l-0.52,0.84l0.87,0.23l0.76,-0.65l-0.25,1.11l1.32,-0.23l-0.1,0.7l1.05,0.37l-0.12,0.95l0.64,0.13l0.45,0.65l1.61,-0.83l0.0,0.32l0.98,0.54l0.57,-0.07l0.86,0.74l0.78,0.84l0.17,1.5l0.47,0.27l0.64,-0.59l0.44,0.48l-0.91,0.86l0.36,0.76l1.38,0.89l0.73,-0.19l0.97,0.4l1.26,-0.01l0.43,-0.41l0.32,0.26l-0.68,1.24l0.31,0.86l-0.75,-0.65l-0.59,0.21l-0.04,0.81l1.15,0.98l0.1,0.93l0.59,0.08l1.36,1.14l-2.31,1.17l-1.19,-0.02l-1.96,-0.5l-0.18,-0.64l-0.76,0.1l-0.74,-0.72l-0.98,0.11l-0.95,-0.31l-1.0,0.15l-0.36,0.42l-1.57,-0.92l-0.43,0.51l-0.19,-0.76l-0.37,-0.24l-1.45,0.23l-1.14,-0.4l-0.65,0.6l-0.58,0.05l-0.88,-0.71l-0.48,0.37l-1.37,0.08l-0.3,-0.27l-4.39,0.62l-1.38,-0.54l-0.35,-0.62l-0.83,-0.02l-0.59,-0.69l-1.57,0.4l-1.67,-0.82l-0.9,-0.67l-0.37,-0.78l0.01,-1.34l-0.41,-0.53l-0.69,0.38l0.03,0.7l-0.84,-0.79l-0.43,0.1l-0.06,0.34l-0.5,-0.52l0.54,-0.05l0.56,-0.86l-0.33,-0.54l0.56,-0.63l-0.41,-0.62l-1.57,0.32l-0.59,-0.3l-0.84,0.31l-0.99,-0.56l-0.6,0.13l-0.08,0.55l0.4,0.55l-0.43,-0.42l-0.69,0.11l-0.75,1.07l-1.42,0.12l-2.52,-1.63l-2.54,0.01l0.2,-0.45l-0.42,-0.29l-1.26,-0.11l-0.19,-1.13l-0.44,-0.35l0.09,-0.64l0.92,-1.25l-1.32,-0.83l-0.81,0.48l-0.15,1.58l-1.2,-0.09l-0.26,1.25l-1.15,-0.07l-0.18,-1.19l-1.64,0.01l-0.98,-0.46l0.16,-0.38l-0.55,-0.5l0.38,-0.78l-0.43,-0.4l-0.72,0.02l-0.4,-2.19l1.07,-0.27l0.43,-1.0l1.14,-0.67l0.04,-0.69l0.85,-1.06l0.17,-1.27l-1.84,-0.43l-0.49,0.48l-0.77,-0.38l0.15,-1.01l-1.4,-0.33l-0.26,-0.37l-0.69,0.23l-1.64,-1.22l-0.78,0.57l-0.18,1.32l-0.58,0.16l-0.56,-0.73l-0.58,-0.07l0.18,-1.23l0.67,-0.43l0.15,-1.02l-1.09,0.32l-0.3,-0.9l-0.73,0.09l-0.09,1.16l-0.29,0.12l-0.5,1.5l-1.46,-0.6l-0.29,-0.72l0.3,-0.52l-0.12,-1.52l-0.29,-0.44l-0.46,0.04l-0.14,-0.85l-0.61,-0.22l-0.3,0.38l0.07,1.25l-0.64,-0.07l-0.3,-0.49l-0.38,-0.02l0.36,-0.74l-0.74,-1.53l-1.28,-0.25l-0.15,-0.78l-0.54,-0.29l-0.09,-0.5l-0.94,-0.22l-0.64,-0.63l-0.1,-0.62l-1.13,-0.55l0.59,-0.94l-0.47,-0.58l1.2,-2.13l-0.2,-0.61l-0.64,-0.11l-0.19,0.29l-0.44,-0.98l-0.45,-0.19l-0.61,0.96l0.68,1.51l-0.77,-1.17l-0.6,-0.01l-0.38,0.42l-0.59,-0.93l-0.67,-0.23l-0.44,0.46l0.28,1.74l-0.36,0.2l-1.32,-0.94l-0.59,0.55l-0.62,-0.56l-0.09,-1.88l-0.72,-0.6l-0.54,0.23l0.09,1.16l-0.44,0.47l-0.63,-0.22l-0.48,0.18l-0.14,0.48l-0.66,-0.0l0.04,0.68l-0.35,0.24l-0.37,-0.75l-1.23,-1.03l0.67,-1.75l0.44,0.01l0.34,-0.68l-1.19,-1.24l-0.75,0.01l-0.43,0.26l-0.01,0.6l-0.54,0.34l0.21,1.06l-0.35,-0.12l-0.46,0.42l-1.02,-0.08l-0.31,0.63l0.52,0.68l0.87,0.22l0.66,0.94l0.67,0.18l2.29,1.83l-0.87,0.05l-0.38,0.54l0.62,1.27l0.61,0.28l-1.02,1.15l-0.58,-0.18l-0.27,0.34l-0.81,-0.66l-0.63,0.17l-1.87,-1.07l-0.56,0.74l-1.02,-0.83l-1.61,-0.36l-0.69,-0.54l-0.47,0.19l-1.45,-0.83l-0.42,0.13l-0.24,0.53l0.31,1.11l0.3,0.69l0.95,0.49l-1.44,-0.25l-0.25,0.79l0.76,0.38l0.57,0.88l-1.41,-0.29l-0.61,0.68l-0.48,-0.21l-1.39,0.98l-0.7,-0.03l-0.16,0.85l-1.87,0.48l-0.17,0.38l-0.81,-0.01l-0.13,0.84l0.38,1.0l-1.71,-1.01l-0.65,0.23l-1.0,-0.62l-1.67,1.18l-0.35,-1.07l-0.42,-0.32l-0.55,0.21l-0.31,-0.61l-1.4,-0.53l-0.54,0.33l-0.11,0.67l-1.01,-0.4l0.3,-0.51l-0.13,-0.45l-1.38,0.16l0.23,-0.61l-1.02,-0.96l-0.17,-0.72l-0.74,-0.26l0.25,-0.48l-0.71,-1.26l0.18,-0.51l-0.36,-1.21l0.78,-1.48l-0.02,-0.51l-0.63,-0.89l-0.31,-1.18l1.12,-1.37l0.09,-0.51l1.93,-1.4l0.53,-0.81l1.09,-0.13l1.43,-1.19l0.04,-0.68l-1.92,-2.13l0.17,-0.67l0.89,0.2l0.6,-0.67l-0.27,-0.66l-0.98,-0.8l1.41,0.15l1.07,0.66l1.04,-0.06l0.45,-0.49l0.53,-0.05l0.56,0.41l0.84,-0.19l7.68,2.38l0.82,1.41l1.83,0.64l0.68,0.6l0.41,1.5l-0.5,0.55l-1.05,-0.06l-0.33,0.78l0.52,0.45l0.49,1.17l0.99,0.07l-0.49,0.9l0.31,0.61l0.65,0.05l0.66,0.87l0.44,0.03l0.79,-0.44l0.11,-0.67l-0.95,-1.79l-0.05,-1.5l-0.68,-0.39l0.15,-0.29l0.71,0.28l0.39,-0.55l-0.32,-0.58l0.51,-1.52l-0.13,-0.91l-0.6,-0.33l-0.65,0.41l-0.15,1.57l-1.94,-2.57l-1.32,-0.45l-0.48,-0.65l-1.23,-0.36l-0.25,-0.41l1.27,-0.02l0.51,-0.38l0.8,0.76l3.17,0.01l1.07,-0.93l0.1,-1.11l-0.32,-0.89l0.62,0.17l0.8,-0.53l0.54,0.15l0.59,-0.33l0.55,0.78l1.37,0.15l1.54,-1.96l0.16,-1.33l1.1,-0.55l0.05,-0.78l1.06,0.43l0.77,-0.72l0.75,0.05l0.97,1.1l0.83,-0.3l0.89,0.2l0.39,-0.27l-0.26,-1.16l-1.44,-2.04l-0.09,-0.93l-0.73,-0.35l0.12,-0.99l-0.68,-0.93l-1.2,-0.81l-1.56,-0.46l-2.13,-2.36l-1.97,-1.59l-0.53,-0.93l0.68,-1.51l1.82,-1.83l4.2,-6.04l0.47,-2.31l1.53,-1.58l1.19,-0.4l0.14,-0.56l-0.7,-1.39l0.54,-2.21l0.16,-2.48l0.69,-0.74l2.1,-0.9l0.84,-1.86l-0.22,-1.08l0.38,-0.95l-0.16,-0.63l-1.36,-0.67l-1.07,-2.69l-0.58,-0.53l0.34,-0.96l-0.93,-1.74l-0.87,-0.24l-0.62,-0.6l-0.11,-0.45l0.44,-0.66l-0.32,-1.05l-1.63,-1.76l-0.77,0.29l-0.32,-0.47l-0.38,-2.29l-1.67,-4.46l-0.46,-0.24l-0.81,0.54l-0.62,-0.91l-0.94,-0.19l0.26,-0.39l-0.17,-0.72l0.62,-0.33l-0.15,-0.42l-0.7,-0.39l-0.47,0.04l-0.49,0.94l0.06,0.55l-0.73,0.33l-0.21,0.76l-2.05,-0.67l-0.84,-1.08l0.22,-1.54l0.88,-0.77l-0.12,-0.73l-0.36,-0.28l0.16,-1.79l-0.79,-1.05l-3.03,-0.48l-0.5,0.19l-0.27,0.58l2.86,3.0l-0.06,0.55l-0.47,-0.39l-1.3,0.49l-1.25,-0.17l-0.57,-0.73l-0.57,-0.2l-0.41,-1.24l-1.53,-1.09l-0.07,-0.41l0.81,-0.62l0.17,-1.14l-0.42,-0.46l-0.73,-0.12l-0.42,-1.6l-0.71,-0.12l-0.51,0.29l-0.0,-0.54l-0.73,-0.08l0.55,-0.29l0.4,0.27l1.02,-0.53l0.24,-0.48l-0.4,-0.87l-1.32,-0.65l-0.99,0.48l-1.02,1.51l-0.14,2.43l-2.3,-2.24l-0.78,0.0l-0.62,0.99l0.62,1.23l-0.47,0.78l-1.31,1.23l-0.97,0.45l-0.55,1.14l-1.93,1.88l-1.75,0.63l-0.45,-1.23l0.57,-1.24l0.12,-1.44l-0.97,-0.74l-0.22,-1.81l1.19,-0.86l1.8,0.01l0.84,0.62l0.73,-0.12l1.19,-1.21l0.2,-0.69l1.15,-0.16l0.37,-0.54l0.02,-1.27l-0.53,-1.86l-0.96,-1.14l-2.45,-1.54l-1.7,-0.62l-1.39,0.45l-0.59,-1.14l-1.49,-1.35l-0.04,-0.67l0.74,-1.28l1.85,0.5l0.34,-1.26l-0.4,-0.58l-1.22,0.13l-0.53,-0.6l-1.73,0.58l-0.26,0.56l0.46,0.5l0.4,-0.08l-0.69,0.58l-0.11,1.06l-0.82,-0.16l0.33,-0.57l-0.16,-0.5l-0.93,0.3l-0.45,0.57l-0.34,-0.58l-0.92,-0.04l1.0,-0.68l0.53,0.26l0.58,-0.25l0.62,-1.2l-0.21,-0.88l-0.74,-0.19l0.81,-0.68l-0.14,-0.82l-0.48,-0.18l-1.25,0.55l0.09,-0.34l-0.49,-0.48l-0.69,0.29l-0.36,0.55l-0.66,-0.06l1.88,-1.51l0.2,-0.52l-0.5,-0.52l-3.53,2.22l-0.73,0.8l-1.32,-7.62l-0.89,-1.06l-0.81,-0.25l-0.68,0.2l-0.56,0.69l-1.16,-0.49l-0.31,0.65l-0.65,0.39l-1.01,-1.45l0.72,-0.54l-0.2,-0.6l-0.89,-0.28l-0.77,0.25l-1.43,-2.18l-0.46,0.15l-0.16,-0.38l-0.63,-0.11l-0.21,0.51l-0.39,0.0l0.02,-0.94l0.69,-0.19l0.23,-0.7l0.65,0.38l0.67,-0.32l-1.17,-2.05l-0.24,-0.18l-0.69,0.3l-0.48,-1.0l-0.73,0.09l-0.82,1.32l0.23,0.67l0.74,0.04l-0.47,1.38l-0.55,-0.77l-0.72,0.44l0.03,1.14l-0.75,0.13l0.01,0.65l-0.55,0.17l-0.47,0.63l-0.06,0.83l1.16,1.13l0.61,0.2l0.43,-0.39l1.24,1.09l0.8,-0.07l0.41,-0.55l0.33,0.25l1.65,2.55l0.39,2.11l0.69,1.33l-0.08,1.72l-0.52,0.66l-4.35,0.59l-1.6,0.86l-1.74,-2.45l-0.55,-0.05l-0.35,0.45l-0.46,-0.8l-1.34,-0.07l-0.86,0.48l-1.6,-1.01l-1.92,0.03l-0.77,-0.32l-0.65,0.27l-0.31,-0.61l-0.8,0.21l-2.96,-0.16l-1.17,-0.45l-0.6,0.18l-0.19,0.63l0.72,1.13l0.95,0.16l1.16,1.27l0.47,-0.07l0.5,-0.6l0.69,0.48l0.61,1.42l2.84,2.71l-0.04,0.5l-0.53,0.47l-1.01,-0.79l-0.79,-1.21l-0.86,-0.35l-1.72,-1.57l-0.61,-0.06l-0.07,-0.83l-0.56,-0.19l-0.79,0.22l-2.88,-2.78l-3.45,-1.36l-3.58,-2.36l-0.7,0.21l0.08,0.45l2.03,2.2l0.69,-0.04l3.53,1.7l1.43,1.03l1.4,1.69l1.11,0.35l-0.83,1.43l-0.97,-0.26l-0.92,1.2l-1.07,-0.71l-0.99,0.26l-1.64,-1.29l-0.67,0.01l-0.98,-0.6l-1.1,-1.1l-1.17,-0.16l-1.0,0.22l-0.47,0.65l-2.09,0.89l-3.02,-0.68l-2.06,0.14l-1.18,-0.39l-1.18,0.11l-0.91,-0.58l-0.1,-0.31l0.49,-0.65l-0.36,-0.74l-0.5,0.06l-0.78,1.02l-2.79,-0.72l-3.39,0.36l-0.74,0.52l0.03,1.0l-2.42,-1.57l-2.06,-2.53l-0.29,-2.53l0.45,-1.09l0.92,-0.54l0.59,-0.83l-0.18,-0.85l-0.58,-0.55l-0.52,0.04l-0.17,0.59l0.3,0.44l-1.61,1.29l-0.54,1.08l-0.07,-0.35l-0.83,-0.11l-0.42,-0.63l0.14,-0.5l-0.63,-0.54l-0.68,0.08l-0.91,0.67l-0.12,0.72l-0.56,0.29l-0.16,0.74l0.33,0.31l1.43,-0.04l0.14,1.23l-3.28,-0.82l-2.11,-0.01l-0.46,0.4l-3.84,-2.75l-2.22,-0.36l-1.4,-1.55l-0.77,-2.5l-2.1,-2.54l-0.99,-2.59l1.3,-0.38l0.48,-1.01l-2.06,-2.13l1.08,0.15l0.09,0.48l0.89,0.54l1.49,-0.44l0.64,0.29l1.33,-0.38l1.43,0.48l0.66,1.5l3.26,0.51l1.56,-0.59l2.27,0.19l0.39,-0.25l0.31,-1.1l1.65,0.38l0.43,-0.25l-0.01,-0.62l-2.26,-0.87l-3.09,-2.1l-0.64,-0.98l0.1,-1.55l-0.33,-0.37l-0.98,0.11l-0.93,1.12l-2.87,-0.63l-0.8,0.19l-8.42,-2.04l-0.92,-2.4l0.28,-1.64l-0.49,-1.28l1.6,-3.77l-0.7,-0.74l0.04,-0.56l-0.44,-0.27l-0.06,-0.61l-1.0,-1.53ZM474.89,330.28l0.28,0.24l0.75,0.17l-1.05,0.62l-0.53,-0.59l0.54,-0.44ZM473.1,330.1l-0.24,-0.03l-0.02,-0.02l0.2,-0.03l0.05,0.07ZM482.98,328.72l0.11,0.5l-0.87,0.03l-0.03,-0.17l0.79,-0.36ZM489.76,335.68l1.57,-0.65l1.38,0.68l-1.06,-0.2l-1.35,0.52l-0.55,-0.35ZM516.89,338.24l0.08,0.2l-0.05,0.1l-0.02,-0.01l0.0,-0.29ZM550.53,335.08l0.41,-0.09l-0.17,0.82l-0.12,-0.36l-0.11,-0.37ZM574.57,352.21l0.32,0.6l-0.22,0.09l-0.34,-0.24l0.25,-0.45ZM587.4,361.26l-0.15,0.27l-0.05,0.15l0.03,-0.41l0.16,-0.01ZM582.66,432.03l-0.03,0.04l0.02,-0.03l0.02,-0.01ZM595.94,436.99l0.4,0.28l0.14,0.44l-0.7,-0.42l0.16,-0.3ZM596.67,437.96l0.17,0.24l-0.2,0.4l-0.6,0.52l-0.32,-0.49l0.66,0.03l0.28,-0.7ZM596.17,440.05l0.05,1.42l-0.31,0.11l-0.08,-0.87l0.34,-0.66ZM595.8,441.61l-0.03,-0.02l0.04,-0.0l-0.01,0.02ZM601.28,436.5l-0.0,0.18l-0.07,0.04l0.01,-0.01l0.06,-0.21ZM601.6,439.23l-0.21,0.44l-0.21,-0.16l0.05,-0.3l0.37,0.02ZM602.6,440.59l-0.02,0.19l-0.36,0.35l-0.06,-0.15l0.44,-0.39ZM602.33,441.58l0.22,0.2l0.05,0.16l-0.23,-0.16l-0.03,-0.2ZM611.97,449.62l0.04,0.02l-0.04,0.01l0.01,-0.03ZM613.64,450.53l0.12,0.98l-0.1,0.01l-0.22,-0.97l0.21,-0.02ZM615.77,450.38l0.09,-0.01l-0.03,0.11l-0.01,-0.03l-0.04,-0.08ZM616.5,450.11l0.17,-0.03l-0.0,0.12l-0.01,0.01l-0.15,-0.11ZM620.7,451.92l0.0,0.12l-0.28,0.07l-0.0,-0.12l0.28,-0.07ZM662.94,449.05l1.26,0.8l0.05,0.79l0.54,0.66l0.04,0.32l-0.31,-0.09l-0.41,0.59l-0.41,-1.74l-0.76,-1.32ZM672.48,451.57l0.27,0.56l-0.74,0.85l0.19,-0.89l0.28,-0.52ZM677.96,454.27l-0.21,0.16l-0.02,-0.11l0.23,-0.04ZM650.02,390.37l0.52,0.43l0.09,0.2l-0.45,-0.05l-0.16,-0.58ZM680.59,409.03l0.0,0.01l-0.0,0.01l-0.0,-0.02ZM680.54,409.32l0.0,0.21l0.09,0.25l-0.18,-0.29l0.09,-0.18ZM678.47,399.02l0.0,-0.0l0.01,0.0l-0.01,-0.0ZM682.18,392.84l0.95,-0.04l0.73,0.46l-0.59,0.39l-0.21,0.76l-0.88,-1.57ZM630.85,349.97l0.11,-0.9l-0.31,-0.9l0.96,0.08l0.27,-0.33l0.26,0.38l-0.18,0.75l-1.1,0.92ZM634.0,348.94l0.23,-1.09l0.75,0.21l-0.06,0.86l-0.92,0.02ZM635.37,347.66l0.31,-0.27l0.31,-0.07l-0.19,0.29l-0.43,0.04ZM624.08,340.79l0.03,0.01l-0.01,-0.0l-0.02,-0.01ZM522.91,287.92l0.09,0.04l0.15,0.16l-0.08,-0.03l-0.17,-0.18ZM490.83,269.21l-0.1,0.22l-1.54,-0.13l0.29,-1.42l1.36,1.32ZM527.94,279.44l-0.04,-0.23l0.12,0.06l-0.09,0.17ZM541.95,291.93l-1.03,-0.78l-1.11,-1.72l0.33,-0.2l1.8,2.69ZM574.55,296.29l-0.01,-0.14l0.08,0.1l-0.07,0.04ZM622.27,341.79l0.57,-0.05l0.37,0.23l-0.06,0.02l-0.88,-0.2ZM621.25,347.63l0.29,-0.42l0.66,0.04l-0.11,0.11l-0.85,0.26ZM662.77,365.97l0.84,-0.66l-0.06,0.71l-0.78,-0.04ZM681.57,367.03l0.1,-0.68l0.41,0.51l0.69,-0.27l-0.11,0.28l-1.08,0.17ZM663.48,400.23l-0.06,0.03l-0.14,0.26l-0.08,-0.23l0.27,-0.06ZM653.19,413.28l0.02,-0.07l0.01,0.04l-0.03,0.03ZM663.75,417.21l0.03,-0.16l0.0,-0.05l0.04,0.06l-0.07,0.15ZM656.01,454.5l0.2,-0.08l0.01,0.01l-0.0,0.01l-0.21,0.05ZM656.44,456.3l0.17,-0.67l0.69,-0.27l0.05,0.1l-0.91,0.84ZM672.11,466.42l-0.48,-0.52l-0.04,-0.18l0.99,0.26l0.03,0.26l-0.5,0.19ZM626.92,462.69l-0.05,0.04l-0.35,0.13l0.03,-0.16l0.37,-0.02ZM618.61,456.15l-0.06,0.22l-0.83,-0.15l0.45,-0.09l0.44,0.02ZM539.29,319.83l-0.1,-0.03l0.05,-0.09l0.05,0.11l0.0,0.0ZM537.02,321.59l0.12,0.78l-0.07,0.39l-0.29,-0.51l0.24,-0.67ZM685.15,391.57l0.47,0.18l0.41,-0.3l0.22,0.37l1.2,0.21l-1.42,0.29l-0.89,-0.74ZM683.06,459.74l0.95,-0.38l0.19,-0.69l-0.69,-0.33l0.15,-0.41l0.86,0.39l1.28,-0.46l0.26,-0.4l0.66,0.36l-0.47,0.62l0.38,1.23l-0.58,0.69l-2.73,-0.08l-0.27,-0.54ZM683.43,471.03l0.28,-0.59l0.59,0.1l0.69,1.09l0.6,0.06l0.22,0.47l0.7,-0.01l0.58,0.61l-0.16,0.39l-2.13,-0.41l-0.78,-0.57l-0.58,-1.14ZM680.85,436.57l0.47,-0.31l1.46,3.68l-1.98,-3.03l0.04,-0.33ZM683.04,440.33l1.1,0.65l0.41,0.66l-0.53,-0.25l-0.98,-1.06ZM683.89,436.94l0.21,0.16l-0.01,0.29l-0.01,-0.01l-0.19,-0.44ZM681.52,458.42l0.32,-0.72l0.69,-0.02l-0.6,0.62l-0.41,0.12ZM681.24,433.57l-0.29,-1.01l0.41,-0.1l0.22,0.23l-0.35,0.88ZM677.29,433.02l0.03,-0.85l0.54,0.28l-0.04,0.5l0.66,0.32l-0.37,0.59l0.38,0.45l-0.62,-0.42l-0.88,0.54l-0.63,-0.2l-0.22,-0.27l0.18,-0.53l0.98,0.49l-0.01,-0.9ZM678.64,434.4l0.26,0.02l0.11,0.08l-0.11,-0.06l-0.26,-0.04ZM679.82,434.77l0.32,-0.34l0.23,0.91l-0.36,-0.42l-0.19,-0.15ZM677.96,474.7l0.38,-0.71l0.73,0.08l0.13,0.28l-0.56,0.47l-0.68,-0.12ZM674.37,366.72l0.0,-0.0l0.0,0.01l-0.01,-0.0ZM674.51,366.15l-0.12,-0.36l0.97,-1.19l-0.06,-0.72l0.92,-0.55l-1.2,2.63l-0.51,0.19ZM672.23,425.21l0.0,0.0l-0.0,0.01l-0.0,-0.01ZM672.34,425.47l0.06,0.1l-0.03,-0.05l-0.02,-0.05ZM672.48,425.69l0.47,0.19l0.17,0.69l-0.4,-0.49l-0.25,-0.39ZM665.91,422.18l0.01,-0.79l0.82,-1.94l0.42,0.21l0.54,-0.31l0.04,-0.39l0.41,0.37l-1.19,1.04l0.24,0.64l-0.74,0.27l-0.09,0.62l-0.45,0.28ZM665.53,363.97l0.62,-1.05l0.09,0.46l0.55,0.27l-1.26,0.31ZM666.87,363.64l0.66,-0.69l0.48,0.21l-0.28,0.26l-0.87,0.22ZM664.04,502.78l0.64,-0.0l0.65,0.75l1.14,0.57l0.12,0.96l-0.61,1.68l0.07,0.58l-0.8,0.31l-0.8,0.86l-0.19,0.67l-1.13,0.8l-0.48,-0.7l0.33,-6.17l1.05,-0.31ZM662.27,358.38l1.11,0.82l0.23,0.27l-1.19,0.41l-0.15,-1.5ZM639.48,351.75l0.24,-0.63l1.19,-0.11l0.22,0.76l-1.65,-0.02ZM626.89,465.68l0.24,0.01l-0.19,0.0l-0.05,-0.01ZM627.92,465.72l2.0,0.07l2.76,0.84l0.68,0.41l0.97,1.31l0.69,-0.06l0.94,1.07l-1.05,0.85l-1.68,0.11l-0.77,-0.35l-0.48,0.24l-1.03,-0.81l-0.22,-0.97l-0.56,-0.72l0.68,-0.55l-0.2,-0.75l-0.51,-0.21l-0.81,0.28l-1.42,-0.76ZM625.88,343.48l0.72,0.13l-0.17,0.02l-0.55,-0.16ZM624.15,326.73l0.98,-1.23l0.48,-0.09l0.38,0.33l-1.04,0.31l-0.41,0.62l-0.4,0.06ZM619.93,326.41l0.75,-1.58l0.99,0.23l0.78,-0.44l-0.08,-0.26l0.21,0.17l-0.66,1.38l-0.09,0.97l-1.9,-0.45ZM610.78,452.57l0.01,-0.01l0.0,0.02l-0.02,-0.01ZM597.11,474.23l0.51,-0.32l0.72,0.34l0.21,0.46l-0.8,-0.03l-0.64,-0.45ZM598.89,474.9l2.06,-0.45l1.01,0.13l0.33,0.51l-0.8,0.22l-2.61,-0.41ZM599.04,437.65l0.38,-0.55l0.19,-0.09l-0.03,0.69l-0.54,-0.05ZM599.87,438.39l0.12,0.08l0.02,0.12l-0.07,-0.09l-0.06,-0.1ZM599.82,439.43l0.16,1.13l-0.14,0.22l-0.37,-1.33l0.35,-0.02ZM585.61,305.0l0.49,-0.07l0.4,-0.5l-0.14,-2.55l0.52,-0.43l2.67,0.65l0.91,-0.13l-0.02,1.53l-1.36,0.55l-1.7,1.42l-0.5,0.98l-0.28,0.03l-0.2,-0.69l-0.77,-0.8ZM580.19,367.11l0.33,-1.37l0.49,0.37l-0.3,0.82l0.31,0.74l1.17,-0.11l2.88,1.01l0.66,-0.53l1.83,0.03l0.71,2.5l0.42,0.4l-0.04,0.79l-7.4,1.27l-1.1,-0.39l-2.06,-2.68l-0.25,-1.55l0.43,-0.5l1.6,-0.02l0.32,-0.8ZM579.32,359.58l1.96,2.07l-0.27,1.41l-0.22,-0.53l0.31,-0.6l-1.14,-0.8l-0.64,-1.55ZM575.3,680.75l0.71,-0.09l0.76,-0.89l1.39,-0.92l0.34,0.08l-0.66,2.13l-2.24,0.45l-0.3,-0.76ZM578.38,289.95l0.39,0.85l-0.26,1.18l-1.22,-0.22l-0.25,-0.33l0.39,-1.2l0.96,-0.29ZM575.01,293.4l0.88,-0.93l0.29,0.29l-0.34,1.92l-0.83,-1.28ZM575.89,294.88l0.04,0.13l-0.04,-0.01l-0.01,-0.11ZM576.25,295.51l0.29,0.14l0.49,-0.38l-0.04,-0.63l0.52,-1.05l0.6,0.68l-1.02,0.9l0.3,1.54l-1.02,-0.28l-0.11,-0.92ZM577.71,297.2l0.02,0.04l-0.01,0.07l-0.02,-0.0l0.0,-0.1ZM570.15,460.77l0.38,-0.61l-0.43,-0.34l-0.62,0.04l0.31,-0.59l1.82,0.42l0.62,-0.18l3.09,1.4l0.74,0.76l-0.23,0.36l0.17,0.58l0.75,0.13l-0.55,0.43l0.0,0.91l-0.96,-0.13l-0.54,-0.41l-0.77,0.13l-2.65,-2.31l-1.12,-0.6ZM576.82,357.19l-1.38,0.21l-0.52,-0.78l0.33,-0.71l0.51,0.07l0.41,0.98l0.65,0.23ZM560.26,382.27l0.11,-0.65l-1.23,-3.19l0.23,-2.62l1.91,-6.94l1.01,-2.27l2.5,-1.76l0.52,0.49l1.28,-0.04l1.21,-1.15l2.26,0.23l0.93,0.51l2.75,0.49l1.19,1.62l-0.56,4.02l0.68,1.8l0.66,0.84l0.13,1.72l0.65,2.21l-0.39,2.68l-0.44,1.07l-0.71,0.56l-0.35,1.08l-0.91,0.18l-0.45,1.05l-0.76,0.24l-1.47,1.26l-2.69,0.15l-0.82,0.68l-1.27,0.08l-0.77,0.51l-2.57,0.08l-0.66,-0.58l-1.19,-2.69l-0.61,-0.51l-0.18,-1.16ZM571.3,358.81l-0.19,-1.46l0.43,-1.64l0.63,0.35l1.03,-0.0l0.86,2.03l1.45,1.5l-0.81,0.96l0.08,0.44l0.56,0.32l-0.21,0.34l0.32,0.47l-0.51,0.17l-0.44,-0.99l-2.98,-1.7l-0.23,-0.79ZM574.04,604.16l0.73,-2.32l-0.16,-1.61l0.69,-1.52l0.45,2.41l-0.07,1.86l-0.87,0.26l-0.77,0.92ZM570.75,628.39l0.13,-0.06l0.12,-0.02l-0.25,0.08ZM564.25,610.37l-0.85,-0.98l2.24,-4.31l1.24,-1.58l-0.61,1.2l0.3,0.88l-2.31,4.8ZM567.46,604.71l1.4,-1.13l0.64,-4.24l-0.08,-1.98l0.95,0.11l0.62,1.43l1.16,0.56l-0.62,0.83l-0.22,2.21l-0.47,0.0l-0.39,0.59l-1.2,4.58l-1.11,2.0l-1.02,-0.49l1.41,-3.88l-0.43,-0.5l-0.62,-0.09ZM572.72,599.43l-0.23,-0.07l0.17,-0.06l0.06,0.13ZM451.74,52.32l0.69,-2.07l0.87,-1.1l0.71,0.31l1.18,-0.2l0.09,-0.56l-0.42,-0.79l0.2,-0.57l1.49,-0.25l0.44,-0.98l1.27,-0.56l1.13,0.37l0.59,-0.57l1.03,1.9l1.14,0.89l0.97,-2.42l-0.13,-0.8l0.36,0.02l0.47,-0.74l-0.15,-2.05l1.2,-1.41l1.7,-0.66l0.72,-0.65l0.67,0.63l1.12,-0.29l0.59,0.26l0.73,1.43l-0.5,1.08l0.12,0.63l2.5,2.18l0.46,0.04l0.18,-0.43l-0.18,-0.75l-0.41,-0.63l-1.05,-0.65l1.06,-0.68l-0.66,-1.47l1.06,-0.2l1.69,0.29l0.71,0.7l2.7,4.64l0.59,-0.18l0.12,-0.51l-1.58,-3.63l1.35,0.04l0.83,2.15l0.69,0.92l0.49,0.25l0.47,-0.07l0.05,-0.34l0.69,0.11l0.13,-0.43l-1.0,-3.09l-8.1,-3.86l-0.59,-1.77l0.89,-0.61l0.85,0.23l2.74,-0.54l0.65,-1.04l0.68,-0.19l0.14,-0.81l-0.52,-0.77l0.23,-0.71l-0.46,-0.49l0.04,-1.2l-0.21,-0.46l-1.37,-0.5l0.33,-0.48l3.71,-0.62l0.13,0.41l-1.0,0.36l0.04,0.88l1.63,0.69l0.67,1.21l0.65,0.08l0.39,-0.44l1.77,0.48l0.96,1.15l0.51,2.15l1.36,1.64l0.38,1.19l-0.14,0.89l-0.47,0.55l0.41,0.55l4.05,0.0l1.0,0.66l0.49,-0.54l-0.35,-1.06l-0.84,-0.9l-2.02,0.14l-1.84,-3.62l-0.12,-1.14l1.22,0.99l0.75,0.05l1.17,1.49l2.41,1.91l4.1,2.57l0.35,0.62l0.86,-0.19l1.45,0.79l2.48,3.92l1.54,0.16l0.34,-0.63l-2.22,-3.17l-0.22,-0.8l-0.88,-0.55l0.23,-0.64l-0.18,-0.59l-4.63,-1.93l-0.16,-0.54l0.33,-0.73l-0.41,-0.5l-1.54,0.07l-6.03,-5.79l0.48,-3.29l3.63,0.0l0.43,-0.38l-0.14,-0.58l-1.68,-0.41l-1.62,-1.6l-0.39,-1.53l0.72,-0.58l2.38,0.96l2.28,2.63l1.59,-0.26l0.26,-0.49l-0.18,-0.58l-2.24,-3.2l-0.35,-1.25l-1.46,-1.54l-0.34,-1.23l4.14,0.81l0.76,1.61l0.19,1.42l1.43,1.1l0.51,-0.09l0.22,-0.48l-0.81,-1.5l2.82,1.01l2.43,-0.47l0.41,-0.66l-0.27,-0.5l-5.43,-1.64l-0.3,-1.04l0.71,-0.14l0.3,-0.65l-0.29,-0.34l-2.51,-0.68l-0.23,-0.59l0.79,-1.16l2.42,-1.2l1.35,2.63l0.78,-0.03l0.59,-2.17l0.39,0.43l0.27,2.33l0.8,-0.12l1.24,0.61l0.34,-0.45l-0.34,-0.48l0.53,-0.41l-0.43,-1.1l0.49,-0.48l2.57,1.25l0.9,1.59l0.13,0.98l0.81,0.54l1.15,2.21l2.82,2.06l-0.64,1.76l-0.16,2.01l0.28,0.62l0.64,0.14l1.54,-4.56l0.82,-0.53l0.09,-0.91l-3.57,-2.25l-0.47,-1.1l0.86,-0.46l0.21,-0.66l-0.44,-0.52l-1.29,0.2l-1.4,-2.41l-3.04,-2.83l0.09,-0.45l0.51,0.21l3.22,-1.24l0.4,-0.6l2.24,0.0l0.84,0.42l0.87,-0.67l2.99,0.6l2.12,3.85l5.6,4.08l0.5,-0.02l0.35,-1.06l-0.25,-0.5l-2.6,-1.39l-1.16,-1.46l-0.66,-1.55l-0.82,-0.55l0.93,-2.75l0.94,-0.86l0.21,-0.66l-0.31,-0.32l0.66,-0.73l0.33,0.42l0.58,-0.12l0.55,-0.94l1.89,-0.25l-0.21,2.37l1.45,2.23l3.17,1.29l0.44,-0.09l0.08,-0.44l-0.32,-0.67l-2.17,-2.21l-0.72,-0.33l1.07,-2.17l0.76,-0.32l-0.02,-0.64l3.36,-0.89l0.25,0.77l-0.16,0.79l1.08,0.42l-0.26,1.14l0.82,0.44l1.53,-1.47l0.36,1.0l0.44,0.19l1.01,-0.24l0.54,-0.91l0.9,-0.0l0.12,1.19l0.42,0.61l0.63,-0.02l0.36,-0.73l1.05,-0.69l1.62,0.66l0.58,-0.43l0.83,0.39l0.41,-0.76l0.99,-0.16l0.25,0.88l-1.1,2.19l-0.01,0.58l-0.88,0.78l-0.27,0.81l-3.71,3.57l-0.63,1.19l0.04,0.97l0.69,0.28l4.24,-1.92l1.08,-2.01l0.53,-0.42l0.63,0.14l0.48,-0.34l-0.23,-1.32l2.08,-3.05l0.9,-0.26l0.01,0.92l0.38,0.63l0.51,0.26l1.13,-0.08l0.28,-0.66l-0.86,-0.58l0.4,-1.87l-0.55,-0.45l0.07,-0.42l0.32,-0.16l-0.04,0.76l0.89,0.38l0.38,1.03l1.55,1.42l0.62,-0.25l-0.07,-0.8l0.49,-1.52l2.18,-0.33l0.41,1.66l-1.15,1.1l-0.11,0.47l1.02,0.15l0.62,0.95l1.31,0.44l-0.36,0.73l0.51,0.63l1.45,0.06l0.29,3.25l-0.55,0.42l-0.1,0.83l0.64,0.3l1.14,-0.84l0.21,-1.24l0.48,0.03l0.3,-0.55l-0.29,-0.57l0.83,-0.34l0.18,0.89l0.7,0.19l0.38,-0.7l2.02,-0.25l1.13,0.69l1.62,2.11l0.87,2.8l-0.16,1.77l-2.15,2.42l0.02,0.55l0.73,0.42l-0.64,2.61l-0.85,0.33l0.11,1.15l-3.8,6.68l-1.76,-0.44l-0.22,0.57l1.28,1.46l-0.55,1.01l-1.28,0.23l-0.76,-0.54l-0.72,0.36l-1.27,-0.01l-0.3,0.67l0.18,0.31l-2.31,1.76l0.2,0.86l1.88,-0.26l-0.64,0.83l-0.79,-0.44l-0.64,1.01l-5.84,2.51l-1.85,1.28l-5.33,-3.26l-0.5,0.06l-0.04,0.5l0.48,0.66l4.34,2.87l-1.55,0.25l-0.34,0.49l0.3,0.49l1.32,0.48l5.23,-2.85l2.62,0.55l-4.8,5.09l-1.88,2.75l-1.32,1.21l-1.66,-0.02l-0.39,0.31l-0.02,0.82l0.35,0.28l-0.42,0.58l-1.26,0.96l-1.26,0.35l0.08,0.9l0.72,0.36l1.09,-0.38l-0.72,1.2l0.2,0.69l0.44,-0.06l1.45,-1.28l0.41,-1.48l6.21,-5.33l2.03,-2.24l4.49,-3.81l0.72,-1.07l4.02,-2.71l0.76,1.57l-0.35,2.33l-1.26,2.03l-0.71,2.08l-2.19,1.91l-1.19,3.4l-0.3,2.47l-1.61,3.14l-1.55,0.46l0.34,2.05l-0.77,0.57l-0.36,1.83l-0.98,1.24l-1.43,3.84l-0.67,0.72l0.32,1.06l-0.68,1.93l-0.1,3.45l-0.92,1.26l-2.31,0.46l0.03,-1.44l-0.89,-1.49l-2.64,-2.17l-0.38,-0.08l-0.38,0.36l0.14,0.81l1.88,1.85l0.82,1.29l-0.16,0.8l0.3,1.23l2.67,1.65l-0.45,1.72l-2.6,0.08l-1.58,0.99l-1.44,2.04l-0.7,0.21l-1.47,-1.63l-0.86,-0.0l-0.83,-0.69l-0.85,0.3l0.07,0.86l2.62,1.9l-0.48,0.51l-1.19,0.12l-0.35,0.47l0.77,1.03l0.96,-0.01l3.07,-1.02l2.02,-1.9l1.19,-0.7l0.66,0.72l0.23,0.78l-0.54,0.66l-0.02,1.17l-2.68,1.86l-0.36,1.03l0.33,1.04l0.6,0.04l0.84,-0.84l0.83,0.22l-0.4,2.42l-1.3,1.67l-2.93,2.44l-0.9,-0.33l-0.94,0.36l-1.35,-0.56l-0.77,-1.75l0.47,-0.44l-0.2,-0.64l-2.66,-0.1l-1.42,0.59l0.2,-0.41l-0.47,-0.57l-2.3,-0.44l-0.42,0.2l-0.3,0.53l-2.21,1.01l0.32,1.26l0.78,0.8l1.63,-0.58l3.73,0.62l0.69,-0.13l0.33,0.96l1.12,1.3l0.21,1.43l0.41,0.69l-0.5,1.48l-1.61,0.49l-0.93,-1.22l-0.33,-0.19l-0.59,0.3l0.45,2.43l-0.12,0.34l-0.89,0.37l-0.66,-0.18l-1.24,0.25l-1.1,-0.74l-0.31,-0.62l-0.62,0.0l-0.44,1.08l1.15,1.79l-0.21,0.79l-2.15,-0.19l-0.9,-0.82l-0.44,0.2l-0.53,-0.65l-0.64,0.63l-1.33,-1.41l-4.05,-0.14l-0.46,-0.58l-0.51,0.03l-0.28,1.22l0.64,0.86l-0.3,0.42l-0.86,-0.02l-0.22,0.67l1.3,2.66l-3.18,-0.69l-0.6,0.26l-0.39,0.65l0.22,0.47l1.21,0.71l1.1,-0.14l1.12,0.66l-0.49,0.59l0.08,0.44l0.44,0.09l3.25,-1.28l1.45,0.26l1.49,-0.62l1.32,0.83l4.41,-0.55l1.2,-0.53l1.11,0.11l-1.26,0.66l-0.1,0.75l0.31,0.47l0.67,0.07l0.02,0.42l0.59,0.44l0.77,1.4l-1.46,0.01l-1.23,0.59l-2.09,-0.73l-1.12,-0.06l-0.58,-0.48l-0.38,-1.44l-1.52,-0.97l-4.31,1.01l-1.15,-0.07l-4.77,0.77l-0.62,0.97l0.35,0.65l0.46,0.1l0.7,-0.57l6.41,-0.13l2.72,0.21l0.19,0.48l-2.7,0.07l-2.24,0.88l-1.48,1.32l-0.61,-0.12l-0.72,-0.81l-1.56,-0.2l-4.06,0.92l-0.19,0.66l0.5,0.31l4.62,-0.44l0.75,0.49l-0.94,1.6l-1.1,4.15l-0.03,0.51l0.54,0.79l0.8,-0.47l0.39,-2.12l1.23,-2.94l4.43,-2.33l4.73,0.72l-0.13,0.73l-2.01,0.85l-0.9,1.13l-0.08,0.88l0.29,0.32l0.63,-0.12l0.61,-0.84l1.87,-0.31l0.54,-0.49l2.04,-0.04l1.87,0.43l0.48,0.77l-0.26,0.33l0.16,0.57l0.54,0.13l-0.16,0.7l0.43,0.62l-0.38,0.68l0.23,1.43l1.14,0.67l-0.57,0.26l-0.76,1.35l-0.89,0.07l-0.87,0.75l-5.59,0.06l-1.11,0.86l0.08,0.94l2.26,-0.43l0.52,0.16l0.48,0.94l5.31,1.54l0.39,0.75l-0.13,0.36l-1.23,0.14l-0.8,2.86l-2.93,-0.69l-0.95,0.47l-1.44,-0.34l-1.6,1.33l0.25,1.1l1.78,0.65l1.58,0.05l0.82,0.41l2.64,-0.49l0.16,0.51l-0.99,2.88l-1.15,-0.73l-0.79,-0.01l-1.1,0.94l-0.29,1.21l-0.88,0.38l-0.63,0.78l-0.6,-0.06l-0.88,-0.8l-3.65,0.65l-1.84,-1.19l-0.57,0.14l-0.24,0.43l-0.02,0.42l0.34,0.23l-0.73,0.72l-0.18,1.02l0.75,1.01l0.95,0.24l1.04,0.92l0.27,1.05l-0.42,0.63l0.39,0.9l-0.39,0.57l0.16,0.44l1.02,0.12l0.38,0.87l0.56,0.18l-1.13,1.17l0.25,1.39l-0.2,0.81l-1.26,1.22l0.24,1.16l-1.23,0.63l-0.77,1.11l0.11,-1.32l-0.64,-0.26l-0.6,0.36l-1.19,2.16l-2.82,-0.37l-1.05,0.38l-0.61,0.81l-2.98,-0.37l-1.27,-0.5l-1.63,-1.58l-1.3,-0.54l-0.68,-1.26l-1.01,-0.6l-0.31,-1.56l-1.32,-1.07l-0.43,-1.42l-0.29,-0.22l-0.64,0.24l0.24,2.06l0.71,0.66l0.76,1.53l-0.06,2.42l1.63,1.42l1.5,-0.02l0.09,0.52l-3.2,1.07l-1.6,-0.46l-0.46,0.18l-0.12,0.9l1.53,0.94l0.27,1.65l0.43,0.54l1.08,-0.09l3.07,-3.13l5.01,1.29l-1.18,2.84l0.37,0.61l0.48,0.01l1.7,-3.12l1.38,-1.38l1.27,-0.05l1.22,0.52l0.91,0.89l0.32,1.24l-1.49,3.21l-0.19,0.79l0.27,0.89l1.89,-0.04l0.82,-0.37l-0.27,1.92l0.35,0.4l1.41,0.19l0.44,-0.3l-0.08,-1.12l0.68,-0.6l0.01,-1.33l0.73,-0.62l-0.09,-0.72l1.05,-0.56l1.16,1.38l0.04,0.8l0.39,0.52l-0.13,0.77l0.99,0.85l-0.07,2.9l0.31,0.97l-0.24,0.38l-1.04,0.33l-0.69,1.97l0.33,0.71l-0.92,0.7l-0.21,0.86l-0.61,-0.43l0.05,-1.71l-0.45,-0.35l-1.51,0.15l-0.69,3.59l-1.14,0.94l-0.29,2.39l-0.75,-0.32l-0.7,0.12l-2.66,2.3l-0.96,-0.18l-1.13,1.23l-0.98,0.15l-0.3,0.82l-1.1,-0.08l-0.18,-0.54l-0.48,-0.19l1.24,-4.05l-0.16,-1.17l-1.33,-1.41l-1.21,-0.5l-0.2,-1.19l-0.72,-0.08l-0.51,1.42l-0.87,0.76l-2.11,-0.3l-0.59,-0.37l0.35,-1.3l-0.28,-0.78l0.99,-1.03l0.15,-1.15l-0.47,-0.25l-2.08,1.67l-0.32,-0.04l-1.84,-3.27l-0.95,-0.99l-0.75,0.15l0.03,0.65l1.23,1.88l0.4,1.57l0.88,1.07l1.52,0.9l-0.52,1.16l0.66,1.67l-0.1,0.44l-0.44,0.49l-2.56,0.43l-1.64,-1.42l0.12,-0.88l-0.45,-2.08l-1.7,-2.06l-0.03,-2.0l-0.59,-0.34l-0.9,1.19l-0.1,0.63l1.8,3.15l0.5,1.84l-0.26,0.84l0.29,0.94l-2.22,-0.38l-0.42,-0.91l-0.57,-0.29l-1.04,-1.39l-0.45,-2.01l-1.12,-0.83l-0.73,0.15l-0.19,0.33l0.17,0.66l0.59,0.48l-0.19,1.8l0.47,1.2l-0.07,0.66l-1.88,0.31l-0.76,-0.7l-0.82,-2.14l-0.74,-0.65l-0.59,0.24l-0.18,1.75l0.76,2.51l3.36,2.1l-4.05,0.78l-0.17,-0.53l-0.43,-0.17l-0.86,0.21l-1.64,-0.98l-3.61,-0.7l-0.25,-1.66l0.81,-0.57l0.3,-0.93l-0.3,-0.71l-1.67,-1.83l-0.79,-0.43l-0.46,0.74l1.83,2.29l-1.82,1.26l-0.29,2.61l-1.72,-0.52l0.05,-1.03l-0.5,-0.56l-1.19,-0.11l0.11,-1.0l-0.59,-0.78l0.12,-1.27l-0.75,-0.92l-0.57,0.19l-0.14,0.44l-0.02,1.75l0.58,0.84l-0.25,1.32l0.65,0.8l-0.75,1.5l-1.01,-1.89l-0.62,0.25l-0.18,0.98l-2.32,-0.55l0.33,-0.54l-0.25,-0.93l0.28,-1.21l-0.99,-2.63l0.2,-0.93l-0.41,-1.49l0.36,-1.33l-0.23,-1.36l-0.79,0.13l-0.92,2.26l-0.1,0.53l0.67,2.07l-0.79,0.78l-0.49,2.29l0.22,1.08l-0.57,0.84l-0.11,-0.66l-0.58,-0.23l-0.42,0.57l-1.18,-1.48l0.11,-1.05l-0.38,-0.97l-0.57,-0.07l-0.37,0.33l0.17,-1.09l1.01,-1.13l-0.1,-1.25l0.32,-0.56l-0.45,-0.66l-0.35,-2.19l2.79,-2.17l0.25,-0.78l1.25,-0.68l1.04,-1.49l0.61,-0.15l0.32,-0.85l-0.2,-0.17l0.75,-0.3l0.28,0.5l0.43,0.05l1.28,-0.65l0.92,0.02l0.48,0.85l1.2,-0.21l0.63,-0.4l-0.14,-0.62l-0.41,-0.19l0.25,-0.54l1.25,-0.33l0.81,1.11l0.73,0.3l0.53,-0.34l-0.18,-0.78l0.93,-0.14l0.2,-0.7l-0.84,-0.43l-0.64,0.28l-1.51,-0.68l1.15,-0.62l0.08,-0.67l-0.57,-0.43l-1.12,-0.06l0.7,-0.83l0.75,0.04l0.55,-0.36l0.01,-0.73l-1.82,-0.26l-1.32,0.87l-1.48,-0.35l-0.47,-1.74l0.7,-1.17l-0.37,-1.65l-0.66,-0.37l-0.04,-0.64l-2.09,-1.62l0.29,-1.71l-0.14,-1.8l0.3,-0.38l4.54,-2.14l1.61,0.28l0.92,0.79l1.21,0.46l1.2,0.95l1.33,1.91l1.61,5.77l-0.33,1.08l0.42,0.53l1.03,-0.76l0.8,1.14l2.38,0.43l1.44,1.48l1.65,0.4l0.48,-0.5l-0.84,-2.1l1.03,0.34l1.46,-0.41l3.23,1.12l0.52,-0.45l-0.4,-1.35l-1.63,-0.75l-0.14,-0.42l0.98,-0.16l1.27,-1.23l1.88,-4.33l1.83,-6.33l0.09,-1.34l-0.47,-1.28l0.71,-0.25l0.53,-1.09l-0.41,-0.77l-0.98,0.14l-0.92,0.61l-0.61,1.05l-0.12,1.19l0.37,1.62l-0.9,1.02l-0.23,1.38l-0.6,1.09l-0.27,1.99l-0.61,1.04l-0.37,1.56l-1.97,2.55l-2.33,-0.54l-2.31,0.4l-0.26,-0.33l-0.08,-0.66l1.0,-1.0l0.92,-1.92l0.14,-1.11l-0.61,-0.9l-0.49,0.09l-0.15,1.91l-1.62,1.74l-1.72,-1.12l0.15,-0.94l-0.35,-0.58l0.6,-0.59l0.05,-0.81l0.62,-0.08l0.44,-0.46l1.34,-2.16l1.84,0.19l0.09,-0.86l-1.56,-0.74l-3.62,0.66l-0.97,0.87l-0.23,-0.84l-0.7,-0.2l2.79,-2.91l0.61,0.43l1.16,0.11l1.01,-1.06l0.9,0.03l0.58,-0.48l-0.36,-0.64l-1.58,0.15l-1.19,0.65l-1.0,-0.8l0.37,-1.3l0.65,-0.03l0.95,-0.82l2.33,0.9l1.11,-0.92l-0.44,-0.55l-0.9,0.06l-1.19,-0.63l-1.72,-0.03l-0.72,0.5l0.57,-2.56l0.98,-0.44l0.28,-0.54l-0.23,-0.79l-0.52,-0.12l-0.5,0.68l-0.25,-0.33l0.2,-3.37l0.68,-2.02l-0.18,-0.67l-0.66,0.0l-0.89,2.18l-0.59,2.68l0.15,1.9l-0.32,1.44l-1.81,4.32l-3.63,1.45l0.11,-1.87l0.67,-0.4l0.83,-1.75l0.41,-2.83l-0.04,-1.03l-0.37,-0.4l-0.67,0.41l-0.04,0.9l-0.73,1.09l-0.08,1.26l-0.67,1.11l-1.08,-0.3l-0.42,0.23l-1.1,2.26l-3.45,-0.05l0.31,-0.81l1.65,-0.52l0.28,-0.39l-1.13,-0.98l-1.15,0.28l-0.09,-5.02l1.57,-2.69l1.32,-0.03l0.39,-0.42l-0.33,-1.08l-1.04,0.08l0.62,-1.47l0.17,-1.64l1.42,-2.27l0.48,0.12l2.35,-0.99l1.53,-0.01l2.37,-2.21l0.85,-0.16l1.72,1.18l4.75,0.51l0.97,1.03l1.21,0.5l0.89,1.13l1.99,0.73l1.18,2.03l1.53,1.04l0.79,-0.62l0.15,-0.65l-1.92,-2.43l0.37,-0.4l1.19,-0.01l0.16,-0.57l-0.27,-0.62l-0.92,-0.38l-1.93,0.76l-1.58,-1.52l-0.61,-0.09l-0.1,-0.39l0.91,-0.22l2.98,0.45l1.97,-1.17l0.79,-0.05l0.09,0.45l0.67,0.02l0.5,-1.52l-0.55,-0.91l0.17,-1.61l0.84,-1.58l-0.1,-0.59l-0.67,-0.51l-1.85,1.66l-0.92,2.69l-1.66,0.83l-2.17,-1.17l-3.6,0.4l-1.43,-0.61l-1.58,0.21l-1.1,-1.32l-1.26,-0.6l-0.08,-0.74l1.05,-1.47l1.34,0.33l1.16,2.03l2.71,0.4l0.56,-0.33l0.25,-0.68l-0.33,-0.64l-0.61,0.03l-0.26,0.34l-0.56,-0.39l-0.26,-0.71l-1.22,-0.78l-0.23,-0.41l0.4,-1.06l-0.47,-1.01l-0.67,0.16l-0.43,0.84l-0.35,-0.07l-1.21,-5.65l-2.04,-1.92l-0.91,-2.61l-0.03,-0.89l-1.66,-1.68l-1.51,-0.72l-1.23,0.27l-2.7,-1.32l-0.09,-1.12l0.47,-0.6l-0.48,-1.66l0.37,-1.78l1.97,0.75l1.45,0.08l1.1,0.9l0.6,-0.29l0.24,-0.72l-1.65,-1.5l-4.23,-0.93l-0.35,-0.46l-0.61,-2.66l0.47,-4.47l2.35,-0.75l2.91,1.75l3.14,-0.45l2.65,0.1l1.03,0.35l3.45,4.54l4.84,5.13l1.18,2.97l0.03,0.75l0.56,0.75l0.96,0.24l0.19,1.07l-0.32,0.05l-0.22,0.65l0.89,0.78l0.73,-0.24l0.62,-1.11l3.9,1.55l0.52,-0.5l-0.27,-0.54l2.17,-1.37l0.92,-0.09l0.79,-1.85l-0.48,-0.53l-3.05,0.8l-0.37,0.49l-1.68,0.64l-2.12,-1.46l-0.81,0.08l0.02,-0.58l-0.53,-0.6l0.04,-1.36l-0.62,-2.0l0.96,-0.54l0.09,-0.76l-0.49,-0.5l-2.52,-0.73l-0.85,-0.65l-4.01,-5.71l-0.43,-1.05l-0.86,-0.81l5.09,-2.31l1.74,-0.36l5.59,-2.27l0.43,-0.66l-0.13,-0.55l0.89,-0.45l2.37,-0.55l0.44,-0.45l1.58,-0.11l1.62,-0.76l2.99,-0.42l0.23,-1.01l-0.41,-0.5l-3.52,-0.08l-4.6,0.68l1.16,-0.88l0.71,-1.03l1.4,-0.6l0.84,-0.99l1.04,-0.52l0.29,-0.62l0.83,-0.21l0.63,-0.71l2.75,-1.12l4.08,-0.95l0.42,-0.47l-0.0,-1.14l-0.91,-0.71l-1.88,0.69l-1.65,-0.24l-2.68,0.32l-0.66,0.63l-2.82,1.14l-0.11,-0.19l0.15,-1.32l-0.46,-1.97l1.55,-3.08l0.19,-1.3l-0.32,-0.5l1.14,-0.81l0.99,-2.7l0.8,-1.14l0.91,-0.61l0.61,-1.09l0.66,-0.3l1.11,-1.9l-0.06,-0.53l-0.48,-0.43l-0.63,0.05l-5.09,5.04l-1.84,3.71l0.04,2.02l-0.39,0.13l-2.57,-2.19l-0.49,-0.02l-0.14,0.47l0.33,0.8l1.88,2.04l-0.64,0.51l-0.25,1.54l0.06,0.71l0.78,0.53l-0.04,0.27l-0.2,0.65l-0.64,0.52l-0.02,1.11l-0.5,1.46l-1.21,0.92l-0.55,1.08l-1.23,0.78l-2.11,2.37l-1.33,1.04l-1.55,0.35l-3.58,2.05l-2.23,0.67l-0.65,-0.11l0.06,-2.17l0.77,-0.31l0.27,-0.76l2.99,-1.51l0.87,-1.09l0.66,-1.95l-0.54,-0.45l-1.04,-0.18l-2.27,2.07l-0.25,0.82l-2.99,1.38l-0.58,-0.01l-0.11,-0.89l0.76,-0.46l0.95,-1.9l-0.9,-0.83l-0.52,0.12l-1.54,2.61l-0.89,-0.11l0.15,1.78l0.62,2.07l-0.34,2.24l-2.15,0.9l-1.2,-0.45l-1.25,0.08l-0.92,0.72l-2.09,-0.77l-0.76,0.11l1.15,-1.99l-0.12,-0.47l-0.48,-0.02l-0.98,0.69l-1.13,1.77l-2.57,-1.54l0.71,-2.8l3.06,-6.53l0.63,-0.86l1.13,-0.52l0.72,-0.77l4.09,-1.21l0.43,-0.47l5.84,-2.19l1.42,-0.97l0.37,-0.58l-0.12,-0.6l-0.48,-0.14l-7.58,3.06l-4.34,1.05l-0.43,0.42l-0.62,-0.07l-1.71,0.85l-1.49,1.33l-1.05,1.9l-1.09,2.68l-1.81,2.83l-0.77,2.67l-1.52,-0.28l-0.8,-0.73l-1.03,-0.23l-2.28,-2.31l-1.42,-0.85l-1.98,-2.17l-0.26,-0.87l0.64,-0.61l0.91,-0.11l0.88,-0.71l1.83,-0.49l2.43,-0.05l1.09,0.46l2.12,-0.29l0.58,-0.47l1.5,-0.1l1.16,-0.81l0.66,-1.08l1.94,-0.42l-0.13,-1.51l2.72,-2.98l1.56,-0.98l0.47,-0.95l-0.22,-0.57l-1.33,-0.38l-1.3,0.38l-2.72,1.87l-1.35,1.52l-0.41,1.09l-0.82,0.68l-1.81,0.49l-1.83,1.16l-2.07,-0.21l-8.45,1.96l-1.29,-1.35l-0.66,-2.33l0.14,-0.8l1.09,-1.27l0.58,-0.03l0.69,0.86l0.67,0.17l2.71,-1.17l0.19,-0.56l-0.72,-0.69l-1.46,0.36l-2.15,-1.84l1.2,-0.55l0.75,-1.22l0.98,-0.29l0.81,-1.29l0.85,0.04l-0.24,-1.23l3.25,-0.87l0.58,0.55l1.55,-0.19l0.94,0.76l0.75,-0.39l-0.28,-0.99l-3.36,-1.64l-0.6,0.23l-0.4,-0.66l-0.6,-0.13l-1.12,1.08l-1.62,0.45l-2.23,1.52l-3.74,3.32l0.07,-0.73l-1.39,-1.38l2.95,-2.81l0.64,-0.09l0.27,-0.74l1.23,-0.42l0.23,-0.89l-0.39,-0.5l-1.5,0.07l-0.97,-1.81l-0.7,-0.3l-0.36,0.31l-0.09,0.95l-0.78,-0.45l-0.56,0.06l-0.44,1.08l-0.91,0.69l0.02,1.51l-1.09,0.35l-0.29,-1.24l-1.85,-0.94l0.27,-0.49ZM467.33,187.3l-0.02,0.69l0.08,0.54l-0.23,-0.5l0.17,-0.74ZM511.49,194.25l-0.08,0.23l-0.06,0.04l0.07,-0.21l0.07,-0.07ZM521.85,108.29l4.22,-0.05l-0.03,0.87l0.41,0.88l1.07,0.74l-3.95,0.26l-0.99,-1.01l-0.38,-1.53l-0.36,-0.16ZM462.51,44.67l-0.48,-0.1l0.11,-0.42l0.37,0.52ZM480.09,42.55l-0.16,-0.42l0.09,0.02l0.07,0.4ZM553.84,2.1l0.09,-0.04l0.0,0.03l-0.09,0.01ZM486.09,154.14l-1.65,1.09l-0.22,-0.13l0.52,-1.19l1.39,0.02l-0.04,0.21ZM569.87,660.89l-0.05,-0.21l0.07,-0.55l0.68,0.7l-0.69,0.06ZM569.08,481.26l0.24,0.11l-0.12,0.21l-0.05,-0.02l-0.08,-0.31ZM566.15,517.71l0.13,-0.53l1.96,-0.83l-0.06,0.3l-2.04,1.06ZM560.64,465.59l0.03,-1.29l0.44,0.78l0.6,0.12l1.39,-0.87l0.93,0.26l0.4,-0.27l1.43,-0.03l0.32,0.76l1.55,0.15l0.21,0.92l1.3,1.46l-0.31,1.54l-1.35,1.44l-1.17,0.57l-5.6,-4.82l-0.17,-0.72ZM567.82,657.04l0.59,-0.24l0.46,0.97l-0.38,0.0l-0.67,-0.73ZM567.16,481.62l0.8,-0.2l0.12,0.15l-0.37,0.09l-0.54,-0.03ZM563.99,454.06l0.28,-0.52l2.0,-0.55l-0.62,1.38l-1.66,-0.31ZM561.83,604.34l0.36,-1.75l1.39,-0.34l0.4,-0.87l1.27,-0.11l-2.77,2.78l-0.66,0.28ZM562.7,590.99l0.29,-0.1l0.15,0.19l-0.33,-0.12l-0.11,0.03ZM561.98,579.11l0.03,-0.21l0.16,-0.38l0.23,0.82l-0.42,-0.23ZM562.3,593.73l-0.14,-1.09l0.27,-0.29l0.22,0.48l-0.34,0.91ZM546.88,664.64l1.55,-2.5l0.88,0.0l1.25,-0.62l2.53,-0.61l3.06,0.13l4.08,4.11l1.48,3.29l-0.27,0.47l-0.49,-0.29l-2.64,-0.26l-2.99,-1.37l-2.11,-0.14l-5.37,-1.55l-0.96,-0.65ZM555.56,342.89l0.84,0.24l1.8,-0.44l0.34,1.06l-1.68,2.76l0.27,1.37l-1.29,0.66l-0.59,-0.32l-0.89,-1.38l-0.39,-3.32l0.49,-0.73l0.64,-0.27l0.47,0.38ZM551.05,487.28l1.41,0.39l0.98,-0.93l0.84,0.47l0.29,0.72l1.57,1.7l0.16,1.7l-0.27,2.48l-0.46,0.4l-1.52,6.75l-1.08,1.59l-1.24,-1.95l-1.17,-1.08l-1.25,-0.58l-0.94,-2.41l0.21,-4.01l1.63,-3.39l0.33,-1.37l0.54,-0.47ZM554.2,536.67l0.54,-0.67l0.8,0.1l-0.82,1.01l-0.52,-0.44ZM553.29,539.35l0.02,-0.17l0.05,0.01l0.01,0.12l-0.07,0.05ZM518.48,254.45l0.35,-1.71l-0.33,-1.57l1.93,-0.65l2.02,1.4l0.68,-0.02l0.3,-0.5l2.2,0.64l1.61,0.91l3.05,-0.36l0.81,-0.81l0.5,0.18l3.87,-0.8l1.86,1.09l2.86,0.73l0.78,0.87l0.71,0.07l0.33,0.39l0.94,1.57l0.34,1.25l0.99,0.64l1.02,-0.04l0.14,0.78l1.1,1.16l-0.17,0.91l0.28,0.48l1.0,0.89l1.32,0.27l-0.19,0.55l0.09,0.86l0.4,0.53l-0.16,0.98l0.84,0.64l0.74,-0.07l0.16,1.42l-1.02,0.76l-6.43,0.08l-0.92,-0.51l-5.12,0.35l-2.97,1.43l-3.27,2.62l-1.23,0.4l-1.03,-0.23l-2.95,-1.96l-1.55,-3.7l0.17,-1.66l-0.46,-0.82l0.3,-1.05l-0.47,-0.9l-0.74,-0.47l-0.91,0.24l-2.6,-0.56l-0.48,-0.67l-0.23,-3.22l0.77,-0.0l0.12,-0.63l-1.13,-1.22l-0.26,-0.96ZM542.49,343.15l1.11,-1.78l0.59,-1.7l1.13,-0.13l0.28,-0.54l0.91,-0.09l0.19,-0.59l-0.34,-0.9l0.25,-0.24l0.81,0.38l0.67,1.17l-0.8,1.23l-1.28,0.61l-1.46,1.61l-1.05,-0.25l-1.03,1.24ZM539.92,355.26l1.02,-3.29l1.77,-0.72l0.71,-1.13l-0.07,-1.13l0.47,-1.08l0.9,-0.14l0.14,-0.57l-0.89,-1.04l1.48,-1.21l0.9,-0.01l0.67,1.28l-0.6,1.55l-0.94,0.07l0.01,1.35l-0.55,0.73l0.12,0.8l-0.94,1.77l0.0,1.01l-0.47,0.5l-0.2,0.85l-2.02,0.99l-0.53,0.83l-0.81,-0.38l-0.16,-1.02ZM544.47,363.7l0.59,-0.78l0.44,-0.07l0.03,0.55l0.56,0.11l-0.77,0.79l-0.86,-0.6ZM546.32,361.77l-0.26,-0.61l-1.1,-0.61l2.08,0.52l-0.0,0.9l-0.72,-0.19ZM543.1,367.65l1.19,-0.44l0.95,0.97l-0.24,0.84l-0.95,1.27l-0.69,-0.65l-0.26,-1.98ZM491.6,444.1l0.6,-0.54l-0.26,-1.28l0.32,-1.1l-0.63,-1.23l0.66,-2.2l-0.44,-3.51l0.51,-1.23l-0.42,-0.97l0.42,-3.32l0.43,-0.97l-0.05,-1.17l0.6,-1.86l2.47,-2.98l0.48,-0.2l-0.15,1.45l0.49,1.08l0.82,-0.21l0.33,-0.69l1.19,0.7l-0.03,1.27l1.17,1.97l-0.29,0.44l-1.52,0.56l-0.23,0.9l0.81,0.97l1.34,0.7l0.53,0.65l-0.03,1.26l1.03,2.84l0.96,0.12l0.61,-0.39l0.52,-1.62l-0.04,-1.12l1.02,-2.43l0.72,0.33l-0.01,0.75l0.77,0.69l1.56,0.67l-0.42,1.38l1.36,1.37l1.5,0.21l0.63,0.62l0.85,-0.28l2.96,0.46l0.59,1.9l1.5,1.86l2.76,1.13l0.93,1.41l0.67,0.45l0.85,-0.02l0.66,0.61l1.7,-0.47l1.37,1.36l0.75,-0.07l2.34,2.78l0.66,0.36l0.28,3.89l1.81,2.28l-0.08,0.86l-2.81,1.51l-0.34,1.27l0.33,0.67l2.02,-0.2l1.22,-0.66l1.25,-0.19l0.59,-0.32l0.19,-0.61l0.65,-0.12l3.48,1.37l0.51,-0.57l-0.64,-1.28l0.26,-0.65l1.47,1.65l1.47,0.59l0.11,1.01l-1.42,-0.11l0.39,1.02l2.73,0.65l0.87,0.66l0.71,-0.04l0.09,0.37l-2.32,0.89l-0.92,1.85l-1.96,2.17l-0.72,0.34l-0.37,1.42l-0.79,-0.13l-3.55,-1.9l-1.25,0.09l-1.1,-1.13l-1.27,0.12l-1.57,-0.9l-1.68,0.2l-0.83,0.61l-0.91,-0.33l-0.6,-1.02l0.16,-0.59l1.17,-0.74l0.21,-0.8l-0.27,-1.3l-1.9,-1.28l-2.92,-0.04l-1.67,0.69l-0.24,-0.42l1.14,-2.21l0.1,-0.8l-0.5,-0.96l-0.43,-0.25l-0.73,0.12l-0.66,0.48l-0.31,0.78l-0.84,-0.15l-0.73,0.53l-0.52,-0.15l-0.94,0.53l-1.17,2.31l0.77,1.5l-0.29,1.2l0.41,0.83l-0.05,0.66l-0.67,-0.06l-0.56,0.37l-1.21,1.67l-0.65,0.42l-0.51,1.12l-0.85,-0.31l-0.98,0.2l-1.1,1.81l-0.45,3.06l-0.81,1.47l-0.8,0.38l-3.37,2.9l-1.45,0.7l-1.78,0.02l-0.58,-0.67l-0.59,-1.83l-0.22,-3.12l0.33,-1.21l-0.24,-1.47l0.26,-1.16l-0.27,-1.02l-0.84,-0.56l-0.08,-1.26l-0.32,-0.37l-0.44,0.22l-0.66,1.2l-1.18,0.2l-2.19,1.03l-2.41,-0.32l-1.34,0.23l-1.91,2.06l-1.94,0.07l-0.64,-0.91l0.24,-1.85l2.24,-3.9l3.46,-1.99l1.07,-0.94l1.19,-0.37l0.38,-0.61l-0.1,-1.44l-0.99,-1.14l0.06,-0.61l-0.61,-0.96l-0.15,-1.17l0.24,-0.73l-0.5,-0.71l0.07,-2.05l-0.31,-0.97l1.24,-4.08ZM537.12,125.64l0.14,-0.6l1.15,0.28l0.61,0.75l-0.27,0.43l-1.64,-0.85ZM528.13,339.23l0.71,0.43l0.53,-0.06l0.11,0.47l-1.79,0.18l0.44,-1.02ZM530.47,340.7l0.27,-1.09l-0.86,-1.08l0.03,-0.55l0.81,0.3l0.63,-0.45l0.4,0.44l-0.08,0.88l0.61,0.2l0.41,-0.54l0.84,0.27l1.61,-0.81l0.44,-1.19l1.15,0.08l0.29,0.86l0.7,0.66l-1.6,1.72l-1.98,0.49l-0.78,-0.68l-0.76,0.12l-0.17,0.63l1.17,2.24l-1.35,-0.46l-0.17,-1.79l-0.78,0.0l-0.15,0.27l-0.66,-0.53ZM532.8,452.93l0.06,-0.06l0.37,-0.01l-0.25,0.1l-0.18,-0.03ZM516.63,485.78l0.87,-1.45l0.09,-2.41l0.75,-1.27l0.74,-0.59l0.54,0.17l0.88,1.11l0.77,0.19l3.24,-2.28l2.59,0.08l1.19,-1.35l3.08,0.71l-0.52,1.61l0.24,2.58l-1.45,1.72l-1.8,1.19l-0.63,1.91l-1.56,1.53l-1.03,1.81l-2.6,2.52l-0.26,0.11l-0.58,-0.84l-1.09,-0.43l-1.39,0.44l-1.96,1.8l-0.27,-2.41l-1.84,-2.06l-0.26,-0.92l1.85,-2.17l0.41,-1.27ZM224.65,339.19l10.41,-29.67l1.43,2.96l1.64,2.0l1.52,0.57l0.36,0.5l3.12,1.81l3.61,2.71l0.69,2.27l2.5,3.21l4.41,3.07l1.14,1.59l2.02,0.19l0.43,0.79l2.55,1.27l0.89,-0.13l0.67,1.23l1.73,1.08l0.62,-0.07l0.17,-0.63l-0.85,-1.03l0.21,-0.64l-1.13,-1.74l0.59,0.14l1.77,1.79l0.95,0.0l0.47,-0.5l1.0,0.18l2.14,2.28l0.61,1.1l0.35,0.19l0.53,-0.22l0.79,1.3l0.41,1.51l1.35,1.18l0.3,2.21l1.24,1.35l-0.05,0.74l0.46,0.89l-0.07,0.62l-0.6,0.52l0.03,0.54l0.26,0.49l0.71,0.24l-1.13,1.23l-0.01,1.08l-1.03,-0.63l-0.84,0.22l-0.68,-0.89l-1.55,-0.09l-2.39,-1.42l-0.42,0.7l0.81,1.53l-0.59,0.64l-2.27,-1.38l-0.61,0.37l0.19,0.98l-1.03,1.69l0.38,0.97l-2.87,0.38l-0.52,0.95l0.32,0.62l1.43,0.7l1.04,1.98l1.06,0.54l1.96,0.14l0.6,0.93l0.85,0.09l1.0,1.43l1.4,0.13l2.17,1.57l4.2,0.81l1.85,1.27l1.7,0.16l3.18,0.9l0.95,-0.24l0.25,-0.72l0.94,0.49l1.06,-0.09l0.07,1.09l0.81,0.42l0.54,-0.25l0.08,-1.19l2.05,1.3l0.62,-0.31l0.42,0.25l1.94,-1.54l-0.35,0.83l0.24,0.61l0.99,-0.18l0.59,0.43l1.74,-0.54l1.01,-0.94l1.23,-0.17l1.5,-0.92l0.57,0.14l0.31,-0.29l0.65,1.06l0.47,0.09l0.44,-0.66l-0.3,-0.8l0.49,-0.26l0.42,0.71l-0.66,2.38l0.7,0.76l0.69,-0.72l0.52,1.18l-0.55,1.52l0.22,0.56l1.6,1.08l0.63,-0.33l0.33,-0.67l0.76,0.69l0.6,-0.12l1.0,0.42l0.28,0.85l0.0,2.79l-0.84,0.67l-0.12,0.8l0.98,1.49l0.07,1.06l0.49,0.24l0.68,-0.59l1.36,-4.64l0.36,0.04l-0.29,5.31l0.36,0.56l0.58,-0.02l0.67,-1.63l0.27,1.18l1.69,2.4l0.33,2.6l-0.33,0.29l0.04,1.02l-0.6,-0.47l-1.1,-0.12l-0.9,0.77l-1.36,-1.6l-0.54,-1.27l-0.48,-0.27l-0.55,0.44l0.28,2.54l0.33,0.43l0.59,-0.14l0.48,1.31l1.17,0.7l0.19,0.49l-0.23,1.01l-0.74,0.08l-0.16,0.66l1.74,0.69l0.16,3.35l0.73,0.24l0.29,-0.67l0.32,0.86l-0.15,0.65l0.75,2.08l0.66,0.37l0.18,1.47l0.96,2.27l0.74,0.41l0.48,-0.37l0.09,-0.75l-1.28,-2.85l-0.03,-0.89l-0.66,-0.99l-0.31,-2.38l-0.49,-0.66l0.48,-0.61l0.21,-2.19l0.49,0.43l-0.24,0.61l0.34,0.52l1.24,0.59l0.36,-0.6l-0.23,-0.74l0.57,-0.39l0.1,-0.95l0.64,0.96l0.49,1.67l0.49,0.32l0.53,-0.3l-0.3,-1.18l0.18,-0.47l-1.35,-3.35l0.9,-0.19l0.69,-0.85l0.05,-0.56l-1.44,-0.84l-0.69,-1.3l-0.43,-3.54l1.13,-2.31l-0.93,-2.27l-1.45,-2.39l0.26,-1.42l0.68,-1.28l2.24,-0.89l0.39,-1.05l-0.68,-0.64l0.69,-0.93l0.63,-0.21l0.86,0.6l0.74,0.1l1.65,-1.03l0.38,0.48l1.37,0.09l0.35,-0.46l0.93,0.57l0.62,-0.25l0.21,-1.44l0.26,0.42l0.57,-0.05l0.32,-0.89l0.43,1.38l0.69,0.24l0.69,-0.43l0.2,-0.67l-0.81,-1.03l0.71,-1.1l-0.12,-0.76l0.66,0.1l0.79,-0.65l0.8,0.72l1.59,-0.83l1.84,0.07l0.67,-1.61l-0.38,-1.27l1.23,-1.54l-0.22,-0.61l-0.74,-0.11l-0.53,0.38l-0.5,-0.59l-0.62,-0.1l-1.0,0.3l-0.34,0.5l-3.61,0.81l-0.52,0.97l-0.46,0.02l-0.28,0.38l0.2,1.07l0.66,0.53l-0.65,0.65l-0.46,-0.26l-0.34,-1.25l-0.49,-0.21l-0.5,0.58l-1.46,0.06l-1.41,1.66l-0.4,0.01l-0.33,-0.98l-1.25,-0.36l-0.53,-0.78l-1.51,0.09l-0.61,-0.36l-0.61,0.42l-0.6,1.52l0.93,1.49l-0.84,-0.05l-0.45,0.47l-0.33,-0.56l-1.33,-0.27l-1.07,0.49l0.27,-1.24l-0.47,-0.78l0.26,-0.86l-0.41,-0.83l-0.72,0.05l-1.0,0.75l-1.04,-0.05l0.58,-0.56l0.09,-0.69l1.44,-0.98l2.1,-3.01l0.98,-0.9l4.1,0.27l2.59,-0.6l1.16,0.09l3.15,-1.45l1.86,0.02l0.96,-0.62l2.17,-0.6l0.67,-0.76l1.17,1.06l1.42,0.59l1.74,3.52l-0.61,0.66l-0.14,0.69l0.7,3.02l-1.32,0.92l-0.26,0.97l0.52,0.49l1.0,-0.0l0.03,1.25l1.53,2.14l0.88,0.27l0.31,0.77l0.57,0.13l0.53,-0.37l1.16,0.24l-0.79,1.66l1.16,2.86l1.21,0.24l0.46,-0.19l1.07,0.69l1.32,-0.25l1.27,0.71l0.79,-0.27l0.41,-0.52l1.12,0.26l0.39,-0.42l0.19,-1.07l0.57,-0.48l-0.19,3.16l0.81,0.99l0.63,0.16l0.49,0.92l0.95,0.25l1.11,2.33l2.42,1.12l1.52,2.07l0.7,-0.17l-0.01,-0.87l0.36,-0.2l0.59,0.33l0.8,-0.29l0.82,1.22l0.68,0.04l0.28,0.41l1.29,0.55l1.18,-0.11l0.52,-0.62l0.64,0.15l0.55,-0.67l2.28,0.29l0.53,-0.76l1.37,-0.67l0.83,0.87l1.38,-0.92l1.71,0.31l0.54,0.61l1.44,0.15l0.6,0.42l0.77,-0.34l0.56,0.6l0.81,-0.12l1.67,1.07l0.52,0.98l1.97,0.13l0.21,0.38l0.58,0.14l0.45,-1.05l1.12,0.08l0.53,-0.78l0.56,0.3l1.55,0.02l0.61,-0.35l0.04,-0.64l-0.7,-1.42l-0.64,-0.13l-1.2,-1.65l0.07,-1.92l0.73,-0.05l2.04,3.21l1.0,3.57l0.85,0.32l0.5,1.26l0.89,0.26l1.78,2.05l1.65,-0.25l0.72,-0.84l0.28,0.6l0.67,-0.0l0.26,-0.78l0.73,-0.1l0.33,-0.55l-0.93,-1.05l0.67,-1.15l-0.81,-2.97l-0.64,-0.18l-0.52,0.86l-2.33,-3.23l-0.49,0.13l-0.27,0.64l-0.92,0.16l-0.57,0.49l-0.73,-0.22l-0.74,1.82l-0.41,-1.4l-1.23,-1.62l-0.18,-1.05l0.64,-0.33l0.37,-0.68l0.14,-1.19l-1.3,-1.23l0.07,-0.69l-0.36,-0.38l-0.66,-1.26l0.41,0.48l1.06,-0.68l1.19,1.44l0.43,0.11l0.47,-0.36l0.5,0.06l0.4,-0.68l0.79,0.34l0.56,-0.34l0.03,-0.46l0.72,0.42l0.51,-0.4l-0.15,-0.84l-0.96,-0.64l-0.64,-1.74l1.71,0.28l0.32,1.42l0.89,0.92l0.47,-0.05l0.35,-0.56l-0.24,-0.7l-0.5,-0.1l0.11,-0.26l0.79,0.01l0.99,0.7l0.68,1.19l0.03,0.84l1.08,0.66l-0.74,0.93l0.24,0.88l1.23,0.6l1.74,-0.66l-0.22,1.11l0.61,0.85l-0.35,0.88l-1.14,0.69l-0.38,0.64l0.03,0.7l0.42,0.48l1.07,0.06l0.37,-0.73l0.61,0.48l0.73,-0.14l0.31,-0.74l-0.45,-1.02l0.19,-0.25l1.55,-1.15l1.76,-0.78l-0.79,1.52l0.35,0.84l-1.82,5.69l0.01,2.01l-0.25,0.57l-0.9,0.08l-0.14,1.8l-0.91,0.95l-0.32,1.8l0.09,0.3l0.62,0.07l0.44,0.78l0.98,0.47l0.57,-0.12l-1.02,1.79l-0.33,1.54l0.46,0.47l0.47,-0.08l0.23,0.52l0.87,0.02l2.55,-2.56l0.6,0.59l0.53,-0.36l-2.48,3.23l0.46,0.54l1.33,-0.73l0.96,-0.12l-0.02,1.16l0.74,0.27l-0.27,1.34l0.61,1.06l-0.69,0.79l-0.87,0.03l0.12,-0.28l-0.45,-0.53l-2.25,0.7l-0.31,-1.15l0.38,-0.72l-0.29,-0.74l-0.73,0.33l-0.69,1.35l-0.98,-0.04l0.01,-1.45l-0.95,-0.71l-0.57,-0.04l-0.69,0.9l0.38,1.53l0.81,0.62l0.4,1.02l0.7,0.58l0.31,1.37l1.83,1.52l0.46,1.9l-0.39,1.29l0.13,0.48l0.5,-0.01l0.78,-1.17l0.96,-0.63l-0.09,-1.39l-0.49,-0.51l-0.53,0.65l-2.24,-4.1l0.51,-0.24l0.77,0.55l0.55,-0.22l0.47,0.8l1.82,0.12l0.73,-0.39l0.97,0.56l0.65,-0.4l0.57,-1.26l-0.84,-2.43l0.07,-1.43l0.7,-1.15l0.14,-0.87l0.71,-0.58l-0.14,-0.51l-1.05,-1.02l-0.44,-2.43l0.7,-0.87l-0.06,-0.95l-1.04,-2.12l-0.56,-0.29l-1.07,-1.42l1.36,-1.41l0.21,-0.93l-0.27,-1.18l1.24,-2.11l0.03,-0.92l0.63,-0.02l-0.22,0.42l0.57,0.39l1.08,-0.91l0.6,0.73l0.62,-0.1l0.82,0.61l0.65,-0.2l1.99,-2.51l2.93,-2.25l0.13,-2.08l0.63,-0.95l4.43,-2.67l0.26,-0.93l1.2,-0.67l0.06,-0.55l-1.85,0.31l-0.69,-0.28l0.28,-2.13l1.01,-2.08l-0.54,-1.2l0.06,-1.53l-1.1,-0.49l-0.47,0.16l0.2,-0.46l-0.32,-0.34l0.51,-0.56l-0.3,-0.73l-0.68,0.15l-0.7,0.78l-0.1,1.2l-1.12,1.89l-0.02,1.06l0.74,0.43l-0.87,0.88l-1.18,-0.03l-0.94,0.55l-1.22,-0.72l0.65,-2.28l-0.3,-1.43l0.72,0.73l0.33,-0.14l0.85,-1.72l1.24,-0.38l0.29,-0.39l-0.14,-0.89l1.26,-1.02l0.09,-0.46l-0.41,-0.23l-1.1,0.54l-0.6,0.05l-0.26,-0.32l0.56,-2.25l-0.16,-0.9l1.73,-0.7l1.06,0.47l0.5,-0.21l-1.04,1.68l0.19,2.01l0.66,0.2l2.1,-2.7l1.62,-1.46l-0.12,-0.8l-1.22,0.19l0.93,-1.77l0.02,-0.59l-1.2,-1.18l-0.99,0.12l-1.53,0.77l-0.3,1.01l-1.59,-0.04l-1.05,-0.37l-1.24,-2.45l-0.29,-1.53l-0.95,-1.18l-1.12,0.56l0.07,1.25l-0.59,0.55l-0.93,-1.15l-0.89,-0.01l-1.88,-1.41l-1.82,-2.33l-0.83,-0.12l-0.36,-0.39l-1.17,0.24l-0.59,-1.11l0.09,-2.18l-0.52,-0.53l-0.65,-0.09l-1.65,-3.41l-0.15,-2.09l0.34,-2.13l0.71,-1.18l0.85,-0.31l0.59,-2.41l0.75,0.08l0.47,-1.04l1.74,1.3l0.65,-0.46l-0.1,-0.52l-1.67,-1.17l0.04,-0.59l1.59,-1.2l0.19,-0.58l-1.22,-0.06l-2.0,1.53l-0.98,-1.14l-0.42,-1.41l-0.87,-0.86l1.19,-5.03l0.89,-1.31l-0.23,-0.76l-0.55,-0.21l-0.27,0.29l-0.14,-0.24l0.31,-0.26l0.85,0.13l0.12,-0.27l-0.49,-1.01l0.28,-1.34l-0.37,-0.46l1.13,-0.1l1.07,-2.14l0.99,-0.1l1.95,2.72l1.27,0.08l0.33,-1.37l0.76,-0.66l-0.68,-1.12l1.26,-2.02l-0.42,-0.25l-1.02,0.41l-1.72,-0.58l-0.59,-0.77l0.38,-0.56l-0.25,-0.28l1.28,-0.41l1.53,-1.72l1.55,0.02l0.34,-0.47l-0.12,-0.73l0.38,-1.08l0.84,-0.27l1.45,0.12l1.05,0.27l0.34,1.88l0.61,-0.01l0.76,-1.04l-0.31,2.51l0.32,0.45l0.51,-0.17l1.16,-2.14l0.4,0.3l0.63,-0.34l0.72,0.63l1.19,-0.48l0.0,0.99l-0.76,1.43l1.3,1.82l2.72,2.41l0.45,1.94l1.1,0.69l0.25,2.85l0.47,1.29l-0.08,2.48l-0.38,3.5l-0.66,-0.38l-0.44,0.47l0.1,0.49l0.69,1.08l1.05,0.33l0.69,0.64l-0.25,0.89l0.35,0.34l0.1,0.92l1.7,0.3l0.78,0.68l-0.29,0.6l0.79,1.63l-0.37,0.43l0.2,0.64l0.86,0.41l-0.09,0.39l1.05,1.48l-0.12,0.79l-0.65,0.57l0.7,0.38l0.22,0.75l0.7,0.16l0.82,-1.44l-0.19,-0.33l0.6,0.07l-0.26,0.55l0.2,2.13l0.6,0.35l0.28,-0.25l0.44,0.78l-3.08,0.37l-0.52,-0.86l-0.83,-0.4l-0.57,-1.55l-1.17,0.57l0.43,0.71l-1.34,0.59l0.57,0.61l-0.46,0.85l-0.77,0.42l-0.0,0.65l0.72,0.68l0.59,0.01l0.24,-0.49l0.78,-0.38l1.26,0.14l0.86,0.98l-0.74,0.34l-1.66,2.15l0.12,0.41l-2.03,1.16l-0.22,0.56l-0.65,0.01l-0.24,0.73l-1.93,1.83l0.19,0.52l2.03,0.54l0.79,-0.66l1.1,0.04l2.12,2.77l2.21,1.48l2.11,-2.04l0.1,-0.83l0.81,-0.86l1.28,0.51l-0.97,1.2l-1.68,0.68l0.02,0.7l0.44,0.23l1.49,-0.21l1.04,-0.74l0.63,0.96l1.39,-0.16l0.36,0.69l1.02,0.01l0.53,-1.03l1.52,0.89l0.09,0.25l-0.69,0.38l-0.48,-0.53l-0.61,-0.01l-0.41,0.4l0.45,0.62l-1.08,0.99l-0.25,1.61l-0.61,-0.4l0.37,-0.81l-0.42,-0.4l-0.47,0.11l-1.25,1.31l-1.69,-1.37l-0.67,0.29l0.54,1.02l1.59,1.16l3.04,3.5l0.72,0.43l-0.39,1.34l0.27,0.55l0.49,0.15l0.16,0.54l-0.27,0.74l1.3,0.85l-1.1,1.36l0.2,0.58l0.42,0.08l-0.15,0.92l0.34,0.75l-0.48,1.34l0.34,0.89l-0.25,0.79l0.36,0.47l-0.94,1.83l0.26,0.55l1.56,0.97l-0.66,0.52l-0.1,0.51l0.49,0.18l0.7,-0.25l0.29,1.8l0.46,0.61l0.83,-0.07l0.65,-0.63l-0.22,-1.21l1.21,-1.33l0.04,-1.2l0.65,-0.41l0.63,-1.78l-0.72,-0.82l-0.16,-0.8l0.66,-1.17l-0.11,0.74l0.35,0.5l0.54,-0.2l0.31,-0.62l0.2,-3.6l-0.48,-2.78l0.31,-1.38l1.95,-2.78l0.76,-1.95l0.81,-0.47l0.93,0.17l0.54,0.53l0.76,1.96l0.94,1.23l3.7,3.18l1.73,2.49l0.75,2.41l-0.07,2.09l1.18,3.88l0.07,1.43l-0.33,1.43l-0.41,0.53l-1.47,-0.53l0.0,-2.23l-0.28,-0.54l-0.57,0.02l-0.75,1.43l-0.66,0.47l-0.22,0.77l0.64,1.37l0.36,1.85l-0.72,1.8l0.07,1.19l0.8,3.46l0.92,1.49l0.26,1.46l0.61,0.85l1.03,0.56l2.33,3.5l1.5,1.53l0.14,1.62l0.55,0.42l-0.88,0.97l-0.09,1.63l0.52,0.42l0.28,-0.12l0.67,-1.15l0.35,1.43l0.77,-0.01l0.44,-2.43l0.17,0.71l0.65,0.14l0.43,-1.33l0.76,-0.29l-0.28,-1.39l0.74,-1.69l0.46,-0.2l0.65,0.81l1.18,0.53l0.87,-0.85l-0.27,-1.29l0.42,-0.51l0.1,-3.05l-0.63,-1.65l1.23,-3.16l1.2,-1.55l0.47,-1.25l1.64,-1.83l-0.14,-1.24l0.37,-0.46l-0.24,-1.07l0.4,-0.09l0.33,-0.65l-0.43,-0.61l0.05,-1.52l1.03,-2.63l-0.5,-0.76l-0.17,-3.02l0.49,-2.13l0.77,0.12l0.63,-0.55l0.3,0.42l1.19,0.27l0.47,-0.33l0.01,-0.4l1.54,-0.23l1.32,0.5l0.47,-0.39l0.12,-1.02l-0.57,-0.98l-0.96,-0.26l-0.63,0.3l-1.06,-0.4l0.51,0.1l0.69,-0.59l-0.1,-1.13l1.13,0.19l0.47,-0.25l-0.18,-1.05l-0.94,-0.34l0.68,-0.31l1.87,0.46l0.54,-0.81l-0.44,-0.59l-1.29,-0.2l-0.34,-0.92l-1.18,0.19l-0.77,-2.03l-1.4,0.16l-0.45,-0.44l-0.8,-0.13l-0.82,-1.5l0.81,-0.1l0.0,-0.83l-0.73,-0.45l0.12,-0.35l-0.34,-0.42l0.55,-0.16l0.45,-1.01l-0.72,-0.74l-0.72,0.27l0.02,-1.04l0.33,-0.57l0.63,-0.15l-1.18,-2.09l0.63,-0.72l-0.04,-1.08l0.77,-0.79l-0.07,-0.77l1.71,0.98l0.43,-0.68l0.88,-0.22l0.49,-0.61l3.23,-0.54l0.37,0.46l0.88,0.11l1.22,1.29l2.32,1.02l2.79,0.38l0.9,-0.59l1.61,0.41l1.0,-0.32l1.52,0.13l0.48,-0.34l0.15,0.26l-0.65,0.87l0.25,0.5l-0.91,0.6l0.36,0.36l0.88,0.07l0.55,0.68l-5.0,-0.84l-0.65,0.42l0.17,0.76l6.94,1.74l-0.26,0.19l0.21,0.47l1.55,1.36l-0.4,0.23l-0.32,1.25l0.49,0.56l1.98,-0.41l0.2,-0.61l1.62,0.05l2.08,1.18l0.9,-0.0l0.36,1.29l-1.11,0.95l-0.49,1.44l-0.68,0.07l-0.43,1.13l-2.03,1.16l-0.43,1.03l0.48,0.12l1.55,-0.74l0.91,-0.06l0.65,0.54l0.22,0.76l0.47,0.18l0.96,-0.97l1.12,1.62l0.07,2.62l-2.43,2.77l-1.12,-0.34l-0.42,0.56l0.02,0.92l-0.79,0.69l-0.64,-1.43l-1.22,-0.48l-0.47,-0.09l-0.46,0.43l0.73,1.2l-1.29,-0.23l-1.57,-1.04l-0.43,0.26l-0.18,0.63l0.8,0.9l-0.48,-0.02l-0.29,0.73l0.35,0.74l1.0,-0.01l1.03,0.92l-0.87,0.27l-0.13,0.58l0.6,0.71l0.78,0.37l0.54,-0.28l-0.48,2.01l0.5,0.77l1.45,0.33l0.14,0.4l-0.5,1.79l0.93,2.29l2.14,1.89l1.82,2.29l1.57,1.09l1.69,2.53l0.22,0.52l-0.41,1.74l-0.28,5.75l-0.53,0.8l0.05,0.96l-1.02,0.03l-0.28,0.58l-1.06,-0.37l-1.34,0.86l-0.5,1.2l0.16,0.41l-0.46,0.91l0.08,0.5l-0.63,1.14l0.07,0.98l-1.52,0.1l-0.06,0.63l-0.59,0.4l-0.65,1.2l-0.23,1.08l-1.73,0.03l-1.48,0.55l-0.36,1.57l-2.25,2.59l-0.38,0.05l-0.41,-0.12l-0.13,-0.75l-0.94,-1.23l-0.35,-1.01l-1.56,-0.52l-1.22,-1.46l0.84,-0.02l0.3,-0.94l-0.88,-1.37l0.48,-1.38l-0.41,-1.56l-0.42,-0.2l-0.33,0.34l-0.11,1.16l-0.7,0.65l-0.47,1.48l-0.76,-0.18l0.05,-1.01l-0.3,-0.35l0.54,-0.56l-1.46,-1.06l-0.06,-2.04l-3.54,-0.91l-0.73,-0.56l-0.69,0.1l-0.05,1.03l0.57,0.63l-0.96,0.18l-1.62,1.09l-0.24,1.14l0.19,0.5l0.92,0.71l1.52,-0.57l0.86,-1.83l0.42,-0.12l0.25,0.31l-0.33,0.39l0.98,0.58l-0.37,0.78l0.37,0.41l2.33,0.87l-0.55,0.56l-0.01,0.63l1.17,0.78l1.2,-0.25l-0.39,1.76l2.5,2.69l0.45,0.81l0.25,1.95l0.7,0.44l0.56,1.17l-1.31,0.22l-1.3,-0.9l-0.32,-0.92l-0.59,-0.46l-1.33,0.72l-0.35,-1.24l-1.17,-0.96l-0.48,0.19l-0.76,1.63l2.26,2.97l-1.28,-0.84l-1.45,-0.18l-0.77,-0.79l-1.0,0.26l-1.07,-1.4l-0.6,0.07l-0.34,1.21l-0.78,-4.09l-0.84,-1.71l-0.66,-0.37l-0.86,0.23l-1.97,1.36l-0.9,-0.22l-1.74,0.35l-1.03,-0.32l-0.59,-0.68l-0.45,0.07l-0.33,0.62l-1.44,-0.65l-0.35,0.93l-0.6,-0.32l-0.75,0.2l-0.14,0.54l0.61,0.87l-0.56,0.05l-0.22,0.59l1.71,2.75l2.48,0.54l3.71,1.93l-0.76,1.22l-0.06,1.4l-0.48,0.53l-1.03,0.33l-0.22,1.04l-1.73,0.86l-0.59,2.04l0.31,1.26l-0.58,1.19l-1.1,0.64l-1.09,1.77l-1.33,0.59l-0.29,0.88l-0.53,0.25l-0.28,0.57l0.29,1.02l-2.17,1.42l-4.42,0.04l-1.02,-0.44l-1.24,-0.93l-0.92,-1.6l-1.21,-1.3l-1.96,-1.11l1.98,0.37l0.47,-0.37l-0.12,-0.47l-3.93,-1.49l-0.91,0.15l-1.03,-0.58l-0.37,-0.92l-1.22,-0.74l-0.92,-1.12l-0.79,-0.14l-1.45,-1.41l-2.52,-0.27l-0.57,0.23l0.01,0.69l1.88,1.05l0.14,0.7l-2.03,-1.36l-1.24,0.26l0.05,-0.62l-0.46,-0.37l-1.47,0.42l-6.35,-0.91l-1.26,-0.56l-1.67,0.63l0.02,0.64l3.84,2.87l0.66,-0.16l0.12,-0.54l-0.83,-1.67l4.33,0.96l4.62,1.73l1.79,1.3l1.04,1.58l1.15,0.81l0.64,2.1l1.78,1.27l1.28,2.27l1.01,-0.19l0.6,0.41l6.81,0.99l1.16,-0.43l1.53,0.37l0.72,-0.68l1.26,0.62l1.23,-0.17l2.44,0.59l-0.02,0.57l0.92,0.98l-0.42,0.83l0.18,0.8l-1.03,1.03l0.2,0.74l-0.68,0.55l-0.63,1.25l-0.46,2.22l-0.67,0.57l-0.74,-0.22l-0.3,0.43l0.01,2.02l-0.48,1.22l-1.97,1.13l-0.52,3.2l-1.35,1.99l-0.11,0.53l0.4,0.72l-0.74,0.93l-0.94,-0.04l-2.19,1.87l-1.48,0.78l-0.44,0.77l-1.35,-0.65l-0.63,0.19l-1.4,-1.05l-1.02,-2.09l-0.48,0.02l-0.39,0.58l1.13,2.58l-0.8,-0.25l-0.43,-0.5l-0.74,0.08l-0.86,-0.94l-0.48,0.08l-0.22,0.53l-0.47,-0.49l-0.61,-0.01l-0.37,-0.42l0.39,-0.09l0.34,-0.6l-0.14,-1.56l-0.38,-0.69l-0.64,0.01l-0.79,1.51l-0.87,0.09l-1.12,0.66l-0.05,0.72l0.93,0.65l0.44,-0.18l0.48,1.07l-0.19,0.66l-0.41,-0.19l-0.73,0.47l-0.86,-0.9l-0.72,0.05l-0.46,0.46l1.37,1.56l0.33,1.12l1.01,1.2l-0.95,0.21l-0.29,0.68l0.41,0.36l-0.92,1.77l-0.74,-0.24l-0.59,0.62l-0.56,0.01l-0.23,-0.94l-1.65,-0.78l-0.76,0.87l-0.04,0.64l0.69,0.29l0.5,-0.22l0.07,0.37l-1.46,0.62l-1.33,0.1l-1.96,-1.32l-0.77,0.03l-1.06,-1.28l-1.28,-0.65l-1.21,0.15l0.04,-0.54l-0.47,-0.6l-0.51,0.06l-0.35,0.5l-1.27,-0.1l0.67,-0.57l-0.27,-0.54l-1.23,-0.2l-0.67,1.26l-2.38,-0.59l-0.99,-0.97l-1.95,-0.67l-0.56,-0.85l-1.09,-0.11l-0.4,-0.69l-0.98,0.04l-0.68,-0.73l-2.44,-1.09l-1.31,-1.52l-0.1,-1.25l-0.75,-0.16l-0.38,-0.56l-0.65,0.04l-0.08,0.58l0.7,0.89l0.13,1.06l0.71,1.09l-0.06,0.3l-1.2,-0.06l-0.41,0.49l-0.05,0.4l0.61,0.58l0.54,1.53l2.55,1.43l1.53,-0.47l0.27,-0.5l-1.31,-0.78l-0.63,-1.04l0.13,-0.26l2.22,1.83l1.8,0.9l1.13,0.19l1.16,0.98l0.55,0.05l0.82,-0.64l0.64,1.4l1.31,0.07l0.51,0.42l-0.34,1.0l-0.74,-0.38l-0.82,1.21l-1.45,0.8l0.07,0.56l0.82,0.62l1.5,-0.61l0.41,0.38l0.63,-0.18l0.29,-1.37l1.35,-0.48l0.53,-0.63l1.38,-0.66l1.17,1.1l0.19,1.32l1.74,1.14l-0.1,0.55l0.37,0.42l1.93,-0.08l0.94,0.83l0.59,-0.3l0.22,0.25l-0.31,0.34l0.34,0.65l2.0,0.84l-0.34,0.61l0.51,1.75l-0.36,0.9l0.41,0.47l-0.04,1.6l0.25,0.32l-0.84,0.97l-0.23,0.91l-2.1,-0.17l-1.55,1.08l-0.28,0.73l-0.67,0.49l-1.01,0.17l-0.08,0.61l-6.01,-1.84l-0.48,0.42l0.11,0.84l-1.42,-0.68l-1.4,0.44l-0.18,1.01l1.52,1.96l-0.01,0.45l1.0,0.46l2.05,0.27l0.42,0.21l-0.02,0.44l-0.74,0.94l-0.91,-0.27l-0.08,-0.97l-0.79,-0.23l-0.79,0.25l-0.1,0.46l-0.81,0.57l-0.29,-0.1l-0.11,-0.96l-0.66,0.08l-0.71,-0.69l-0.56,0.33l0.62,1.7l-0.15,1.0l-1.28,0.07l-0.16,1.92l-0.88,0.18l-0.01,0.68l1.78,0.63l-0.08,0.63l-0.47,-0.64l-0.62,-0.04l-0.47,-0.48l-3.58,-1.19l-0.51,0.14l0.08,0.53l0.58,0.48l3.52,2.17l-0.17,0.39l-0.49,-0.41l-0.97,-0.02l-0.42,0.2l0.01,0.34l-0.95,0.34l-0.3,0.85l0.81,0.74l-0.33,0.5l-0.6,0.02l-0.24,0.51l-1.17,-0.68l-0.29,0.48l-0.38,-0.11l-0.51,0.37l0.15,0.47l0.91,0.72l-0.58,0.06l-0.12,0.57l-1.72,-0.71l-0.48,0.61l0.55,0.71l-0.52,0.41l0.0,0.75l1.48,0.65l0.15,0.47l-0.35,0.17l-0.06,0.59l0.5,0.75l-0.94,0.27l-2.33,2.14l-0.8,0.09l-1.42,2.04l0.19,1.66l0.96,0.33l0.02,0.67l-0.63,0.23l-1.46,-0.58l-0.43,0.57l0.86,1.7l-0.83,1.09l0.32,1.46l-0.9,0.8l-1.03,2.78l-1.06,0.83l-0.64,1.83l0.06,0.76l-0.95,1.43l-0.28,1.75l-1.44,-0.29l-0.49,0.23l-0.08,0.62l-0.78,0.49l1.17,0.74l0.47,1.38l-1.03,2.38l0.22,1.29l-0.39,0.88l0.08,1.0l-0.53,0.41l-0.4,1.05l-33.99,-2.48l-33.79,-3.8l10.54,-78.34l0.16,-3.27l-1.13,-0.63l-11.88,-3.86l-18.57,-6.61l-25.7,-9.97l-1.81,-1.05l-2.03,-2.19l-7.01,-13.93l-14.83,-3.67l-12.27,-15.45l-13.32,-18.01l-12.5,-18.28l-10.27,-16.15ZM431.55,497.53l0.31,-0.12l0.17,0.01l-0.2,0.26l-0.28,-0.15ZM459.97,461.11l0.41,0.12l0.06,0.53l-0.42,-0.04l-0.04,-0.61ZM466.33,460.55l0.16,0.24l-0.01,0.0l-0.15,-0.24ZM457.44,422.81l-0.21,0.13l-0.28,-0.01l0.49,-0.12ZM510.55,414.28l0.09,0.15l-0.04,0.09l-0.06,-0.23ZM452.71,352.12l0.03,0.15l-0.01,0.1l-0.08,-0.08l0.07,-0.17ZM410.05,384.51l0.12,0.01l-0.05,0.33l-0.07,-0.28l-0.01,-0.06ZM408.32,373.23l-0.03,-0.49l0.36,-0.47l-0.09,0.57l-0.23,0.4ZM318.64,387.32l0.17,-0.15l0.1,-0.2l-0.02,0.64l-0.25,-0.3ZM318.94,386.46l-0.03,-0.21l0.0,-0.15l0.04,0.09l-0.01,0.27ZM321.06,364.45l0.05,-0.18l0.03,-0.08l0.11,0.08l-0.19,0.18ZM329.96,363.12l-0.02,-0.07l0.05,-0.02l-0.02,0.09ZM343.89,363.99l-0.01,-0.29l0.6,-0.07l-0.05,0.13l-0.54,0.22ZM393.29,373.56l-0.08,-0.14l0.13,-0.03l-0.03,0.08l-0.02,0.08ZM393.36,373.34l0.07,-0.35l0.01,-0.02l-0.02,0.16l-0.07,0.2ZM431.18,350.11l0.25,-0.55l0.38,-0.32l-0.44,0.76l-0.19,0.11ZM427.74,295.54l-0.28,-0.5l-1.09,0.54l-2.24,-0.49l-0.57,0.24l-0.05,-0.78l0.27,-0.75l4.16,-0.81l0.19,0.78l0.47,0.35l-0.54,0.32l0.1,1.06l-0.41,0.05ZM524.18,151.95l-0.31,-0.7l1.09,-0.68l0.05,0.73l-0.83,0.65ZM520.3,200.25l0.21,-1.47l1.52,-2.11l0.89,-2.29l0.45,0.01l0.45,0.38l-0.01,0.52l-1.54,2.07l-0.21,0.77l0.31,1.0l0.68,0.66l-1.45,0.22l-0.62,0.7l0.01,0.56l-0.7,-1.0ZM420.43,181.62l0.62,-0.87l-0.12,-0.26l0.61,1.02l0.74,-0.23l0.77,0.53l0.67,-0.11l0.25,-0.84l-0.59,-0.28l0.66,-0.4l-0.11,-0.59l-1.42,-0.84l-0.59,-0.77l-0.57,-0.08l-0.08,-0.91l0.74,-0.14l0.39,-0.81l0.69,0.51l0.79,-0.67l0.42,0.07l0.53,-0.75l-0.33,-0.56l1.43,-0.16l1.18,-0.54l0.61,0.36l1.21,0.1l1.1,1.39l1.08,0.31l0.38,0.43l2.24,0.35l0.31,1.19l0.93,0.15l0.49,0.77l1.0,-0.0l0.77,-1.07l1.13,0.45l0.38,1.24l1.53,1.97l0.6,1.46l-0.84,3.95l-2.07,2.49l0.7,1.8l0.78,-0.03l0.3,-0.47l-0.59,-0.65l1.22,-0.88l1.63,-2.96l-0.03,-0.57l1.81,0.83l1.15,-0.54l0.96,0.52l1.39,-0.57l0.88,-1.01l2.88,-0.6l2.66,1.15l0.56,1.25l1.55,0.93l0.21,1.53l-0.52,0.16l-1.29,-0.61l-0.43,-0.79l-0.69,0.17l-0.29,0.65l-1.37,-0.9l-1.24,0.23l-0.33,0.39l1.0,1.43l2.43,0.35l1.98,0.83l0.76,0.64l0.58,-0.43l6.3,2.56l0.54,1.01l-0.8,1.13l-6.11,0.17l-0.27,0.43l-3.55,-0.91l-0.51,-0.68l-2.16,-1.05l-0.47,0.09l0.11,0.74l1.8,1.17l-0.87,1.04l0.22,0.54l0.63,0.1l0.57,-0.36l2.53,0.82l-0.13,0.53l-0.68,0.38l0.4,0.61l-1.39,-0.03l-0.63,0.45l0.06,0.61l0.45,0.23l-0.04,0.35l0.66,0.74l-1.13,0.97l0.03,1.86l0.32,0.37l0.54,-0.31l0.36,-1.43l1.24,-1.45l0.61,0.3l0.94,-0.69l-0.48,1.34l0.07,0.44l0.69,0.2l1.1,-1.51l0.31,0.54l0.62,0.17l0.44,-0.38l0.16,-0.85l0.75,0.45l0.75,1.32l-0.52,1.8l0.14,0.99l0.86,0.09l1.06,-1.42l0.76,0.96l0.76,0.34l0.09,0.43l-0.48,2.76l-0.64,0.38l-1.29,-0.1l-0.85,1.01l-0.08,0.71l0.79,0.81l0.97,-0.17l0.63,-0.76l0.88,0.04l0.58,2.19l1.33,1.51l1.1,-0.18l0.32,-0.42l0.04,-1.11l-0.83,-2.81l0.71,-0.81l0.06,-0.55l1.86,2.58l0.66,0.4l-0.56,0.98l0.98,0.87l1.65,-1.92l1.04,-0.67l1.11,1.8l-0.58,0.81l0.39,0.39l1.01,-0.17l0.45,-1.42l-0.54,-1.26l0.93,-1.27l0.7,0.48l0.36,1.04l1.75,1.74l1.38,0.04l0.9,0.88l-1.19,1.0l-0.12,0.48l0.43,0.23l1.29,-0.23l1.3,-1.0l1.02,-0.18l2.85,0.31l0.41,-0.42l-0.27,-0.56l-1.61,-0.38l-0.79,-0.85l-1.13,-0.39l0.55,-0.49l1.65,-0.56l0.47,-0.54l0.83,0.38l0.6,-0.27l0.78,0.21l0.5,-0.41l-0.36,-0.56l1.46,-1.38l0.81,-0.05l1.7,0.61l0.43,-0.3l0.0,-0.65l-0.7,-0.24l-0.07,-0.44l1.79,-0.55l0.71,-1.27l1.02,-0.43l0.51,-0.91l0.4,-0.06l0.8,0.56l0.66,-0.16l0.98,1.09l1.24,-0.18l0.48,0.26l2.88,-2.17l1.62,-0.66l6.9,0.84l-0.86,2.39l0.34,0.6l1.83,0.38l2.8,-0.86l0.35,0.42l0.67,0.03l1.39,0.89l-0.02,0.68l0.38,0.41l-1.7,1.15l-0.16,0.44l0.43,0.53l3.83,-0.52l0.4,1.14l0.81,0.46l-0.08,0.99l-0.45,0.8l0.23,0.56l0.68,0.19l-0.62,1.94l-1.15,0.29l-0.61,0.94l-0.12,0.99l-2.38,1.5l-0.22,0.7l1.13,1.01l0.06,0.7l-0.74,0.86l0.17,0.93l1.8,1.16l0.1,0.54l-0.72,0.82l0.74,1.02l-0.36,0.53l0.43,1.62l-0.33,0.76l-1.04,-0.02l-0.56,0.57l-3.59,0.03l-1.4,0.66l-2.42,2.46l-1.63,-0.24l-1.11,-0.67l-0.68,-0.05l-0.22,-1.01l-0.56,-0.28l-0.45,0.28l-0.09,0.71l-0.43,0.48l-0.82,-0.18l-1.04,-0.65l-1.16,-2.26l-0.11,-1.45l0.42,-1.04l-0.51,-1.31l-0.9,-0.15l-0.82,-0.5l-0.89,-1.16l-0.53,-0.06l-0.57,0.68l0.32,1.3l1.36,1.75l-0.71,4.18l-0.5,0.52l-2.57,0.31l-1.28,0.93l-2.03,0.15l-0.77,-0.44l-0.91,0.47l-0.44,-1.19l0.03,-2.55l-0.49,-0.71l-0.63,0.38l-0.32,1.27l0.34,2.55l-0.53,0.71l-0.65,-0.02l-0.94,-3.83l-0.66,-0.63l-0.53,0.61l0.54,3.14l-0.46,0.77l-2.58,0.37l0.09,-1.23l-0.56,-0.82l-0.08,-0.83l-0.51,-0.24l-0.56,0.5l0.04,1.45l-0.61,1.23l-1.4,-0.97l-0.61,-1.79l-0.72,-0.27l-0.32,0.41l0.07,1.69l0.93,1.46l-1.06,0.13l-0.41,-0.89l-0.68,-0.07l-0.22,0.84l-0.85,0.11l-0.38,-0.69l0.36,-0.58l-0.42,-0.53l-0.88,0.34l-0.4,1.26l-0.87,0.51l-0.26,-1.09l-0.49,-0.31l-0.81,0.91l-0.89,0.1l-0.26,-0.49l-0.7,-0.14l-0.33,0.53l-1.38,-0.34l-0.03,-2.5l0.74,-3.07l0.68,-0.64l-0.28,-0.42l-0.88,-0.1l0.12,-1.14l-0.49,-1.32l-0.43,-0.3l-0.59,0.36l0.09,0.81l-0.57,0.3l-0.69,3.45l-0.18,-1.92l-1.09,-1.3l-0.58,-0.11l-0.18,0.41l0.52,1.38l-0.13,0.8l-0.77,-0.66l-0.59,0.1l0.33,1.26l0.65,0.72l-0.25,1.63l-0.31,0.33l-1.04,0.01l-0.32,0.75l-0.91,-0.11l-0.58,0.47l-1.14,0.13l-0.42,-1.29l-0.5,-0.03l-0.45,0.65l-1.0,-0.68l0.06,-0.86l-1.62,0.41l-0.83,-1.03l0.07,-1.6l-0.41,-0.39l-0.98,0.32l-0.43,0.66l1.62,-2.82l-0.06,-1.44l-0.53,-0.32l-0.68,0.4l-1.44,2.73l-0.63,0.11l-0.39,0.88l-0.56,-0.03l-0.27,0.39l0.02,1.25l-0.45,-0.04l-0.69,-0.52l0.31,-0.55l-0.34,-0.72l-0.89,-0.22l-1.44,-1.47l0.36,-2.51l-0.31,-1.34l-0.84,-1.55l0.0,-0.83l0.9,-0.12l0.26,-0.31l-0.42,-0.95l0.21,-0.77l-0.59,-0.3l-0.96,0.39l-0.97,-1.66l0.42,-2.58l0.6,-0.73l-0.15,-0.58l-0.45,-0.11l0.38,-1.33l1.06,-2.19l0.66,-0.34l0.58,-0.83l-0.38,-0.83l0.34,-1.07l-0.84,-1.92l0.44,-1.44l-0.1,-1.55l-0.43,-0.71l-1.28,-0.76l-0.21,-0.78l-0.45,-0.32l-0.48,-1.12l-0.14,-2.73l-0.53,-0.76l-0.27,-1.33l-0.7,-0.59l-0.62,-1.36l-0.06,-1.36l-0.58,-0.68l-0.69,-0.15l-1.98,1.44l-0.45,-0.4l-0.45,0.11l-0.65,1.31l-1.32,0.09l-0.78,-0.57l-2.24,0.12l-0.43,-1.01l-0.43,-0.02l-0.41,-0.61l-2.91,-1.03l-0.33,-0.64l-0.99,0.32l-1.26,-0.4l-0.71,-0.86l-0.49,-1.5l1.28,0.15l0.56,-0.27l1.17,-2.1l-0.46,-0.51l-1.06,1.03l-0.91,0.17l-0.01,-0.56l-0.86,-0.18l-0.62,-1.38l-0.77,-0.19l-0.41,-1.23l-1.13,-0.56l-1.03,0.14l-0.19,-0.33ZM451.64,232.47l0.2,0.49l-0.18,-0.03l-0.02,-0.46ZM519.52,222.67l0.67,0.01l0.3,-0.74l1.12,-1.04l0.93,0.21l0.91,1.92l0.6,0.41l-2.49,1.36l-0.4,0.49l-1.28,-0.76l0.02,-1.18l-0.38,-0.68ZM455.43,199.69l0.61,-0.68l1.56,0.5l-0.2,0.22l-1.97,-0.04ZM431.2,193.09l-1.37,1.01l-1.29,-0.29l0.02,-0.49l1.44,-0.32l0.43,-0.6l0.46,0.03l0.32,0.66ZM521.01,346.84l0.26,0.12l-0.6,-0.0l-0.32,0.78l-0.2,-0.77l0.85,-0.13ZM521.4,347.02l0.93,0.01l0.12,0.67l-0.68,-0.07l-0.37,-0.61ZM519.42,369.27l0.08,-0.17l0.17,0.21l-0.24,-0.04ZM514.49,412.03l0.0,-0.0l0.0,0.0l-0.0,-0.0ZM514.67,412.23l0.25,0.63l0.65,0.04l0.46,0.43l0.54,-0.1l-0.22,0.67l-1.73,-1.07l0.07,-0.61ZM505.16,417.47l-0.03,-0.82l2.73,1.32l0.45,-0.06l0.16,0.55l2.41,1.63l0.11,1.35l-0.63,0.61l-0.0,0.58l-1.02,0.94l-1.01,-0.16l0.22,-0.72l-0.29,-1.85l-0.69,-1.45l-1.07,-0.84l-0.77,-0.06l-0.57,-1.01ZM512.09,423.78l0.53,0.2l-0.02,0.3l-0.57,0.11l-0.35,0.62l-0.41,-0.06l-0.04,-0.46l0.86,-0.71ZM512.96,424.68l0.64,-0.22l1.49,-0.08l-0.08,0.85l-0.44,0.51l-0.87,-0.66l-0.86,0.02l0.12,-0.43ZM512.86,421.59l0.72,-0.05l-0.36,0.47l-0.37,-0.42ZM512.54,339.29l0.85,-0.28l0.88,0.7l-0.13,0.13l-1.6,-0.55ZM509.23,194.49l0.2,-0.25l0.21,-0.1l-0.34,0.37l-0.08,-0.02ZM505.41,340.75l-0.75,-0.57l0.04,-0.62l1.46,0.3l-0.75,0.43l-0.0,0.46ZM499.85,419.2l0.52,0.39l0.5,-0.13l0.35,0.5l-0.05,0.68l1.48,2.0l1.39,3.84l-0.75,1.32l-0.63,-0.38l-0.43,-1.69l-1.54,-0.95l-0.49,-0.74l-0.75,-3.59l0.0,-0.77l0.39,-0.49ZM493.31,188.08l0.28,0.32l-0.08,0.36l-0.23,-0.13l0.04,-0.54ZM483.52,380.65l0.67,-0.83l0.13,-0.81l-0.21,-0.83l-0.81,-0.49l-0.21,-0.47l0.58,-0.94l0.02,-1.25l1.29,-2.23l1.7,1.75l-0.11,2.22l0.6,2.9l-0.21,2.26l-1.11,2.16l-1.73,-1.43l-0.61,-2.01ZM484.26,162.01l0.42,-0.54l1.29,0.04l0.41,1.15l0.59,0.47l-1.04,0.74l-0.12,-1.24l-0.73,-0.56l-0.81,-0.06ZM479.18,334.69l0.76,0.01l0.72,-0.57l1.82,0.89l1.27,-0.58l0.97,2.02l-1.78,0.37l-1.64,-0.88l-0.73,0.52l-0.98,-0.67l-0.41,-1.12ZM427.77,94.98l0.27,-1.04l1.22,0.23l1.58,2.02l1.66,0.75l2.27,0.53l1.49,-0.22l1.8,1.72l0.71,-0.12l-0.07,-1.04l-1.53,-2.32l1.04,-1.26l2.04,-0.47l0.28,-0.54l-0.32,-0.43l-1.53,-0.55l-0.51,-0.62l-0.49,0.02l-0.67,1.12l-1.16,1.05l-1.73,0.26l-0.95,-1.25l1.76,-0.53l0.36,-0.72l-0.13,-0.61l-0.59,-0.16l-0.52,0.52l-0.38,-0.02l-0.17,-0.43l-0.59,-0.06l-1.26,1.09l-1.42,-1.64l-0.89,-0.42l0.39,-1.21l0.99,0.11l0.05,-1.01l0.58,-0.25l1.6,0.63l1.03,0.79l0.57,-0.4l-0.16,-1.39l-0.97,-0.57l-0.46,-1.38l-1.04,-0.82l0.5,-0.41l0.24,-0.89l-0.35,-0.92l2.83,0.12l1.34,-0.35l1.75,1.38l1.46,-0.18l1.09,0.47l0.43,0.81l0.49,0.02l0.68,-0.57l-0.98,-1.99l-1.81,-0.95l-0.65,0.14l-0.37,-0.98l0.08,-0.59l2.29,-0.25l0.33,-0.54l-0.22,-0.59l-0.79,-0.19l-0.09,-0.47l-0.43,-0.24l-0.89,0.57l-0.53,-0.18l-1.14,-0.9l0.69,-0.71l-0.44,-0.87l-1.26,0.54l-1.23,-0.4l0.12,-0.39l1.22,-0.53l0.4,-0.53l-0.3,-0.6l-1.05,-0.2l0.81,-1.06l0.41,-1.84l1.29,-1.0l1.27,1.08l-0.15,1.11l0.69,0.56l0.53,-0.28l0.4,-0.76l1.71,-0.79l-0.15,-1.22l-1.04,-0.57l1.28,-0.11l1.29,0.95l1.89,-0.69l0.35,-0.73l0.17,-1.89l-0.74,-1.46l-1.56,-0.33l-1.47,0.36l-0.94,-0.39l-0.74,-0.85l0.69,-1.58l0.01,-0.89l1.83,0.73l0.57,1.15l0.83,-0.76l-0.19,-1.48l0.65,0.25l4.27,3.47l1.67,2.64l0.03,1.58l-0.54,0.38l0.08,0.45l1.58,2.67l0.05,1.18l1.5,3.26l0.33,2.1l1.72,1.38l0.43,1.3l-0.69,1.44l0.13,1.03l3.34,0.83l1.0,2.0l0.82,-0.11l-0.26,-1.63l1.61,-0.09l1.03,1.58l-0.84,1.74l0.33,0.58l0.36,-0.03l-0.07,1.31l-0.63,0.9l0.51,2.05l0.66,1.22l2.62,2.67l0.66,-0.16l0.3,-0.53l0.72,0.66l0.52,-0.32l0.36,0.98l0.48,0.39l1.0,-0.56l1.79,0.15l0.33,1.45l0.75,1.34l-0.86,0.65l-0.4,1.26l-0.74,0.59l-0.15,0.63l0.41,0.46l0.79,-0.18l1.22,-1.54l-0.58,6.24l-1.43,2.18l-0.05,0.94l0.36,0.77l0.79,0.39l0.5,-0.31l0.55,-1.76l0.49,-0.46l0.36,0.13l0.08,1.12l0.63,0.08l0.72,-0.98l-0.53,-1.25l0.22,-0.34l1.53,-0.13l1.13,1.76l-0.41,1.03l0.43,1.1l-0.44,0.91l0.63,0.75l0.63,-0.04l0.77,-2.0l0.25,-2.81l1.45,4.01l2.55,4.05l-0.0,0.59l-1.1,0.7l-0.56,1.1l-0.88,0.74l-4.99,2.97l-0.41,2.41l-0.29,0.19l-0.82,-2.36l-0.31,-0.23l-0.51,0.23l-0.12,2.12l0.35,1.83l-0.38,1.01l-1.35,1.8l-1.23,3.93l-0.88,-1.19l-0.62,-3.1l-0.01,-3.36l0.86,-1.09l0.2,-2.51l-0.74,-0.07l-0.73,1.99l-1.25,0.49l-0.29,1.37l0.01,3.91l0.52,2.92l-0.6,0.11l-0.47,0.64l0.43,0.7l0.56,-0.32l0.79,0.09l0.54,1.32l0.01,0.98l-0.55,1.68l-0.53,0.24l-1.61,-3.56l-1.26,-0.29l-0.63,0.4l0.24,1.93l1.14,3.26l-1.23,6.18l-0.61,-0.32l-1.0,-1.97l-0.59,-2.02l-2.34,-4.18l-0.79,-2.67l-0.53,-0.43l-0.56,0.18l-0.33,0.62l0.12,2.33l0.44,1.87l1.02,1.16l1.11,3.98l-1.18,-0.05l-0.09,-0.94l-1.2,-1.69l-1.01,-0.29l-1.17,0.31l-1.2,-0.15l-0.27,0.75l0.37,0.58l1.69,0.52l-0.14,0.89l0.49,1.36l-0.15,0.61l-1.23,-0.2l-1.35,0.21l-1.56,-0.79l-2.05,-0.4l-1.24,-1.3l-0.48,-0.07l-0.78,0.58l-0.64,-1.58l0.37,-0.7l-0.22,-0.44l-0.47,-0.21l-0.89,0.54l-0.63,-0.45l-0.1,-0.8l-1.3,-1.2l-0.38,-1.65l0.28,-0.21l1.46,0.33l0.74,-0.73l2.95,-0.62l0.86,0.49l0.55,-0.29l0.05,-1.03l-0.43,-0.4l-0.49,0.13l-4.38,-1.38l-0.81,-0.7l-0.67,0.1l-0.6,0.73l-1.14,0.23l-0.67,-1.1l0.51,-0.55l-0.11,-0.64l-0.97,-0.04l-1.04,-1.94l0.67,-0.03l2.14,1.28l0.87,-0.29l0.09,-1.05l-2.64,-2.05l-1.57,0.05l-0.31,-1.14l-1.48,-2.49l1.63,-1.14l1.69,-0.35l1.33,-2.87l2.16,0.72l0.8,-0.47l2.17,0.38l2.04,-0.23l2.53,-0.78l4.18,-0.63l1.03,-0.73l0.06,-0.6l-0.62,-0.54l-3.01,0.21l-1.66,0.56l-3.52,0.53l-2.43,-1.02l0.26,-0.96l3.07,0.27l1.37,-0.86l2.42,-0.48l0.39,-0.39l-0.05,-1.33l-0.59,-0.13l-2.79,0.77l-0.44,0.49l-3.09,-0.65l1.69,-1.4l-0.35,-0.85l-1.91,-0.0l-1.26,0.94l-0.56,-1.7l-0.52,-0.28l-0.54,0.36l-0.09,0.64l-0.81,0.08l-0.89,2.24l-0.39,-0.2l-0.46,0.22l0.02,1.27l-1.24,1.27l-0.63,-0.47l0.05,-0.83l1.68,-1.95l-0.44,-0.41l-1.11,0.12l-1.74,-0.96l-0.65,0.26l-0.05,1.36l0.28,0.17l-0.39,0.47l-2.34,1.55l-0.47,-0.19l0.35,-1.57l-0.51,-0.45l-0.28,-1.3l-0.7,0.05l-0.3,0.43l-1.03,-0.62l0.5,-0.81l-0.32,-0.72l0.18,-1.43l4.91,-1.61l2.03,-2.07l0.3,-2.61l-0.32,-0.52l-0.56,0.01l-0.34,0.87l-0.87,0.4l-0.19,0.68l-0.74,0.75l-1.95,0.74l-2.78,-0.29l-1.1,-2.17l-0.49,-0.32l-0.01,-1.33l-0.75,-1.13l0.17,-0.75l0.45,-0.45l0.71,-0.08l0.23,-0.63l-0.53,-0.83l-1.52,-0.59l-0.23,-1.34l1.14,-0.5l0.25,-0.41l-0.33,-0.35l-1.22,-0.01l-0.27,-0.93ZM443.8,113.87l0.28,0.85l-0.7,0.52l0.38,-0.96l0.04,-0.42ZM461.48,146.36l0.13,0.3l0.04,0.32l-0.12,-0.23l-0.04,-0.39ZM467.94,95.1l-0.47,-0.95l0.29,-0.52l-0.28,-0.92l-1.08,-0.44l-0.75,-1.59l0.06,-2.29l0.7,-1.35l3.12,0.6l0.09,0.38l0.55,5.34l-0.36,0.49l-1.5,0.62l-0.38,0.64ZM428.65,100.85l-0.38,0.08l-0.0,-0.39l0.24,-0.06l0.14,0.37ZM467.95,144.5l0.1,-1.31l0.38,-0.62l-0.14,0.96l-0.34,0.97ZM468.78,140.89l0.02,-0.58l0.13,-0.05l0.0,0.05l-0.16,0.58ZM453.23,161.28l0.5,-0.07l0.77,-0.83l2.87,0.68l2.74,3.45l0.26,0.55l0.03,2.25l0.38,0.77l-0.72,1.38l-1.41,1.41l-1.23,0.17l-0.11,-0.75l-2.86,-1.81l-0.9,-1.33l-0.47,-0.99l0.15,-4.88ZM459.14,188.77l-0.7,-0.78l-2.16,-5.38l0.28,-0.78l1.01,-0.69l1.58,-0.38l1.42,1.91l0.07,0.95l-0.73,0.85l-0.28,1.43l0.25,1.75l0.62,0.81l-0.54,-0.39l-0.59,0.06l-0.23,0.64ZM457.58,356.16l0.14,0.07l-0.06,0.19l-0.08,-0.25l-0.0,-0.01ZM455.83,351.11l0.05,-0.55l0.96,-0.9l0.46,0.74l0.43,-0.01l-1.07,2.13l-0.1,-0.72l-0.73,-0.7ZM421.83,269.74l0.48,-0.7l-0.15,-1.2l0.22,-0.51l0.89,-0.23l-0.3,-1.11l0.12,-2.99l-0.26,-0.6l0.3,-1.27l-0.42,-1.81l0.32,-0.7l-0.08,-1.33l0.69,-0.26l0.16,-0.47l-0.96,-1.52l0.29,-1.54l1.24,-0.77l0.17,0.34l0.72,-0.1l1.47,2.21l1.38,0.57l1.36,-0.07l0.32,-0.59l-0.37,-0.69l-1.14,-0.38l-1.36,-2.16l0.98,-0.76l-0.17,-0.53l-0.59,-0.51l-0.85,0.35l-0.54,-0.66l-0.12,-0.73l0.47,-1.74l2.55,-0.98l0.77,-0.82l1.73,0.05l0.55,-0.74l2.57,-0.04l0.41,1.09l0.68,0.41l0.56,-0.37l0.06,-1.69l2.47,-0.16l1.5,0.85l1.37,0.29l0.39,1.11l0.71,-0.28l1.18,0.83l0.76,1.32l-0.39,0.98l0.42,0.52l1.3,-0.14l0.39,-0.31l0.08,-0.66l1.43,-0.69l0.46,0.18l1.18,-0.33l3.56,0.65l4.04,2.08l0.38,-0.17l0.33,0.23l-0.07,0.27l-0.72,0.01l-0.29,0.45l-0.0,1.59l-2.62,5.22l-1.34,0.04l0.33,1.6l-1.65,3.1l-0.55,1.82l-1.86,0.4l-0.55,0.4l0.19,0.66l1.32,0.34l-3.2,7.7l-1.06,1.11l-0.52,1.08l-1.63,0.64l-5.37,-1.84l-0.78,-0.76l-0.72,0.49l-1.32,0.19l-3.56,0.14l-0.95,-0.24l-0.56,0.5l-0.05,1.51l0.48,0.21l0.64,-0.4l1.16,0.6l1.13,-0.0l-0.14,1.38l1.23,1.05l0.93,2.98l-0.58,0.61l-0.52,1.41l-1.34,0.93l-1.65,3.59l-0.43,1.79l-0.69,0.16l-0.4,0.84l-0.42,-0.29l-2.74,0.09l-2.11,0.69l-0.62,-0.41l0.13,-0.97l0.67,-0.66l0.02,-0.57l1.89,-0.52l0.29,-0.35l-0.84,-0.59l-1.68,0.45l-0.24,-0.64l0.46,-3.7l-0.36,-1.51l0.5,-0.08l0.15,-1.05l-0.45,-1.57l-0.64,-0.36l0.07,-1.37l-0.3,-0.76l-0.77,-1.19l-0.61,-0.21l0.04,-0.31l0.43,-0.08l0.02,-0.5l-0.22,-1.02l-0.66,-0.35l0.45,-2.58l-0.49,-1.85ZM431.01,292.59l0.04,-0.02l0.01,0.07l-0.05,-0.05ZM454.76,352.74l-0.33,-0.41l0.26,-1.19l0.62,1.43l-0.04,0.91l-0.26,0.07l-0.25,-0.82ZM453.11,471.02l0.19,0.06l0.17,0.16l-0.28,-0.02l-0.08,-0.2ZM447.02,341.38l0.79,-0.49l0.19,0.79l-0.27,0.56l-0.72,-0.86ZM446.66,468.82l0.04,0.02l-0.03,0.04l-0.0,-0.0l-0.01,-0.06ZM446.04,340.0l0.11,-0.11l0.26,-0.0l-0.36,0.11ZM425.5,160.21l0.49,-2.25l1.81,-1.24l1.48,-0.31l0.54,-0.62l0.02,1.13l0.51,0.52l1.76,-0.4l0.66,-0.74l2.7,0.52l0.3,0.41l1.57,-0.09l0.37,0.57l1.03,0.19l0.47,-0.77l0.65,-0.21l1.66,1.12l0.5,1.38l-1.11,0.32l-0.29,0.39l-0.09,1.16l-0.63,1.11l-0.21,2.13l-1.31,-0.35l-0.34,0.35l-0.52,-0.45l-0.63,0.21l-1.22,-0.71l-8.83,-0.54l-1.35,-2.81ZM419.43,222.82l0.2,-1.65l0.75,-1.77l0.4,0.08l0.22,-0.29l-0.03,-0.66l2.31,-0.56l0.07,-0.68l0.55,-0.3l0.08,-0.54l-0.75,-0.37l0.27,-0.52l0.23,0.14l0.84,-0.46l0.24,-0.64l0.7,-0.46l-0.08,-0.71l-0.69,-0.49l0.23,-0.91l1.79,-1.27l0.28,0.25l0.54,-0.2l0.25,-0.76l0.83,0.15l1.57,-1.09l2.61,0.99l2.17,3.93l1.14,1.59l0.64,0.37l0.05,0.47l-0.45,-0.01l-0.44,0.54l1.78,1.21l-0.53,1.41l0.6,1.82l-0.25,0.98l-0.86,0.8l0.17,0.58l0.6,0.02l0.4,1.35l-0.24,4.58l-0.78,0.52l0.6,0.57l-0.13,0.64l-0.56,0.6l-3.39,0.25l-0.81,-0.49l-1.09,0.57l-1.25,-0.11l-0.52,-1.16l-1.47,-0.02l0.15,-1.12l-1.59,-1.93l-2.06,-0.33l-0.25,-0.62l-0.56,-0.15l-0.37,0.45l0.06,-0.28l-1.44,-1.78l0.6,-0.63l-0.38,-0.86l0.3,-0.92l-0.31,-0.32l-0.73,0.08l-0.28,0.41l-0.55,2.09l-0.32,-0.23l0.55,-1.11l-0.12,-0.78l-1.46,-0.23ZM423.67,213.82l-0.12,-0.05l0.05,-0.1l0.03,0.01l0.04,0.14ZM433.58,79.03l2.22,0.14l0.49,1.16l-0.62,0.41l-1.02,-0.43l-0.89,-0.87l-1.79,-0.23l1.6,-0.17ZM416.34,136.36l0.3,-0.35l1.26,0.04l0.49,-0.68l-0.1,-0.97l-0.82,-0.91l-0.38,-1.02l0.11,-2.87l0.9,-0.83l3.13,0.78l0.51,0.65l1.75,1.11l0.41,0.91l0.93,0.51l0.7,-0.02l0.95,1.65l0.71,0.19l-0.63,1.81l0.15,0.41l1.8,1.36l0.6,-0.03l0.79,-0.78l0.94,0.36l2.76,3.08l-0.08,1.03l-2.91,2.52l0.37,0.9l1.07,0.6l0.11,0.78l0.87,1.3l-0.07,0.95l-0.9,2.19l-1.57,-0.19l-0.44,0.55l-1.95,1.05l-2.63,0.71l-0.06,-0.7l-0.92,-0.34l-0.69,0.61l-0.65,0.08l-0.05,1.0l-0.78,0.91l-0.66,-0.34l-0.0,-1.2l0.75,-1.23l-0.18,-0.48l-1.67,-0.96l-0.47,-0.94l-1.21,-0.97l0.27,-0.99l3.77,0.54l0.55,-0.78l-0.01,-1.08l-2.74,-2.31l-0.91,0.02l-0.92,-0.39l-0.2,-1.24l-1.04,-0.99l0.29,-0.59l-0.28,-0.89l0.23,-0.89l-0.93,-0.57l-0.56,-0.87l-0.07,-1.19ZM432.67,201.01l0.19,2.46l0.62,2.14l-1.67,0.27l-0.48,-0.62l-0.05,-2.39l-0.41,-1.08l1.79,-0.78ZM430.12,501.31l0.96,-0.01l0.44,0.57l-0.36,0.42l-0.49,-0.85l-0.56,-0.13ZM423.39,233.69l0.63,-0.4l0.07,-0.68l0.56,-0.1l0.61,0.53l0.83,1.95l-0.18,0.21l-2.0,-0.89l-0.51,-0.62ZM417.6,212.21l-0.01,-0.76l1.61,-1.09l0.76,-0.04l-0.24,0.78l0.18,1.15l-1.18,0.75l0.15,0.81l-0.6,0.23l-0.36,-0.28l-0.31,-1.56ZM421.46,209.34l0.11,-1.05l1.96,1.73l-0.02,0.39l-0.55,0.26l-0.77,1.3l-0.81,-1.09l0.37,-1.08l-0.28,-0.46ZM421.74,297.82l0.27,-0.12l0.0,0.05l-0.27,0.08ZM422.35,296.54l-0.3,-0.28l0.46,-0.16l-0.15,0.44ZM389.32,351.88l0.51,0.4l1.44,0.15l1.01,-0.75l1.02,0.07l0.81,-0.73l0.32,-1.55l0.58,0.4l0.61,-0.56l0.91,-0.16l0.14,-1.27l-1.28,-2.05l0.07,-0.19l0.61,0.31l0.66,-0.29l-0.03,-0.64l-1.01,-0.85l0.13,-0.8l0.88,0.34l0.57,1.52l1.06,0.88l0.08,0.65l0.59,0.28l0.66,-0.31l0.18,-0.77l-2.25,-3.41l0.79,-2.88l0.5,-0.74l0.8,-0.26l0.81,-1.47l0.31,-0.08l1.31,0.89l0.27,1.08l1.42,0.84l0.46,1.11l-0.54,0.13l-0.38,0.69l0.66,1.71l0.24,0.2l0.6,-0.23l0.58,-1.54l0.87,2.19l1.32,1.95l0.85,0.26l0.47,0.8l1.2,0.59l2.15,2.52l0.23,0.86l-0.68,1.93l-0.02,2.57l0.77,0.85l0.75,-0.36l-0.16,-1.17l0.38,-2.07l0.53,2.02l-0.4,1.12l0.81,1.59l0.1,2.03l0.36,0.29l0.71,-0.21l0.18,0.86l0.49,0.36l0.8,-0.15l1.41,-1.22l0.64,0.63l-0.43,0.92l-1.47,1.44l-0.42,-0.7l-0.44,-0.09l-1.61,0.33l-0.77,2.34l-0.47,-0.21l-0.57,0.2l-2.45,2.86l-1.47,0.43l-2.91,-1.81l-1.27,-1.48l-0.32,-0.06l-0.46,0.51l0.24,0.89l-0.23,0.15l-1.46,-0.8l-0.66,0.12l-2.02,-2.6l-2.0,-1.12l-0.64,0.25l-0.51,-0.54l-0.37,-0.76l0.39,-1.34l-1.03,-1.12l-0.32,-0.11l-0.64,0.41l0.01,1.38l-0.33,0.51l-0.47,-0.99l-0.44,-0.24l-0.6,0.16l-0.84,-0.83l0.57,-1.76l-1.34,-1.01l-0.45,0.01l-0.37,0.63l-0.84,0.05l0.3,1.29l-0.62,0.2l-1.39,-1.1l-0.1,-1.13l-0.77,-1.73l1.01,-1.65l0.72,0.14l0.43,-0.42ZM414.79,346.68l0.44,-0.57l0.05,-0.57l0.3,-1.06l1.01,-0.52l0.15,0.42l0.6,0.06l1.43,1.8l-0.36,2.41l-0.8,1.03l-0.84,0.08l0.04,-0.75l0.51,-0.5l0.04,-2.23l-0.18,-0.91l-0.59,-0.67l-0.75,-0.06l-0.43,0.52l0.26,1.87l-0.55,1.17l-0.32,-1.5ZM415.07,348.28l-0.2,0.62l0.01,0.28l-0.08,-0.53l0.28,-0.37ZM411.44,98.32l0.33,-1.33l-0.06,-1.8l0.73,-1.46l1.24,-1.13l0.58,0.21l0.71,0.96l1.52,-0.38l0.76,1.21l0.4,2.99l-0.44,1.72l0.3,3.01l-0.67,1.82l-1.8,-1.46l0.27,-2.18l-1.22,-1.67l-2.43,0.15l-0.23,-0.65ZM374.78,271.19l0.15,-1.85l1.27,-1.98l0.55,-1.94l0.48,-0.66l2.36,-0.71l1.55,1.82l-0.34,0.83l0.39,1.03l0.68,0.99l0.56,0.12l0.22,1.9l0.49,0.66l-0.18,0.65l0.47,0.74l1.29,0.49l0.49,0.52l1.58,0.06l0.68,-0.72l0.01,-0.4l1.14,-0.03l1.2,0.51l1.05,-1.22l0.12,-1.68l1.82,-0.35l0.03,-0.82l0.38,-0.53l-0.5,-1.09l0.18,-0.82l-0.41,-0.96l0.14,-0.49l-0.57,-0.66l0.24,-0.76l-0.97,-0.3l-0.87,0.71l-0.41,-0.77l0.78,-0.72l0.06,-0.81l0.52,-0.73l0.47,0.0l0.27,0.73l1.42,1.47l1.64,-0.08l0.32,-0.32l-0.07,-0.62l-1.04,-0.25l-0.62,-0.65l-1.19,-2.97l-0.71,-0.9l-0.08,-0.74l-0.83,-1.12l0.58,-2.35l-1.21,-1.14l-0.87,0.1l0.29,-0.74l-0.33,-0.49l-0.85,-0.27l0.61,-2.28l0.62,-0.18l0.9,0.24l0.62,-0.74l1.09,0.32l1.89,1.7l0.23,0.85l0.69,0.01l0.58,-1.72l0.83,-0.9l0.31,0.43l1.15,0.47l1.58,2.23l-0.29,0.59l0.71,0.75l0.58,-0.42l0.18,-0.95l1.36,-0.09l0.52,0.63l0.91,-0.84l3.77,-0.59l1.14,-0.84l0.26,-0.54l0.62,0.59l1.21,-0.69l0.81,0.75l1.16,0.18l1.5,2.73l-0.26,1.97l-1.21,0.85l-0.35,0.67l-1.17,-0.78l-0.51,0.4l0.01,0.85l-0.96,-0.32l-0.62,1.66l0.6,1.01l1.15,-0.71l0.5,0.55l0.9,-0.05l-0.5,0.73l0.51,0.57l-0.16,0.49l-0.57,-0.08l-3.06,1.19l-3.76,4.71l-2.05,1.75l0.35,0.67l-0.23,2.58l0.36,0.6l0.59,-0.24l0.22,-0.91l0.95,-1.48l1.76,-1.18l1.87,0.33l2.34,1.76l-0.22,1.33l-0.72,0.08l-0.36,0.52l0.31,0.42l1.02,0.38l0.34,1.35l0.49,0.18l0.18,0.67l-1.14,1.5l-0.13,1.04l0.33,0.62l1.04,-0.04l1.12,-1.36l1.35,-0.67l0.38,-0.02l0.74,1.45l0.17,1.66l-0.21,0.46l0.63,1.16l0.09,1.39l-0.44,0.09l-0.52,0.87l-1.34,0.98l-1.3,-0.26l-0.36,0.62l1.76,1.4l0.5,2.45l-0.19,1.19l-2.27,0.61l-0.18,0.67l1.48,0.8l0.92,-0.26l-0.21,0.9l-0.63,-0.1l-1.17,1.13l0.45,0.76l1.41,-0.51l-0.71,1.85l-0.1,-0.74l-0.63,-0.17l-0.83,0.85l-1.07,0.25l-1.03,2.19l-0.76,0.59l-1.69,0.9l-1.31,-0.13l-0.61,-0.66l-1.31,-0.44l-1.27,0.17l-0.48,-0.37l-0.54,-1.24l1.3,-3.44l-0.79,-0.72l-0.29,0.11l-0.16,0.76l-1.24,1.51l-0.62,1.81l0.09,0.41l0.55,0.21l0.08,1.18l1.9,2.92l-1.02,1.91l-2.48,2.43l-0.91,-0.15l-0.38,0.34l-1.19,-2.37l-0.67,-0.1l-1.09,0.67l-0.7,-3.87l0.18,-1.2l-1.18,-0.97l-0.52,-3.21l-0.82,-1.07l-0.16,-1.16l-1.32,-0.51l-0.32,-0.47l-1.7,-3.7l0.07,-1.02l-0.42,-0.23l-0.03,-0.65l-0.85,-1.42l-1.04,-0.68l-0.87,-0.1l-0.5,0.37l0.07,-1.82l-1.28,-1.57l-0.91,0.21l-0.89,0.94l-0.86,-0.95l-1.09,-0.07l-0.38,-0.95l0.82,-0.69l-0.35,-0.7l-0.46,-0.11l0.0,-1.42l-1.24,-1.46l-1.58,-1.23l-1.76,-3.24ZM390.55,268.8l-0.03,-0.05l0.05,-0.05l0.03,0.02l-0.05,0.08ZM391.26,258.16l-0.13,1.15l-2.76,1.04l-0.5,-0.37l-0.53,-1.17l-1.27,-0.83l-0.04,-0.89l-0.77,-0.56l-0.6,-1.14l0.9,-1.31l1.09,-0.01l0.35,-0.89l1.65,0.33l1.12,3.12l0.65,0.37l0.36,0.93l0.47,0.23ZM395.86,246.94l-1.15,1.05l-0.61,-0.19l-0.16,-0.44l0.27,-0.56l0.84,-0.53l1.19,0.17l-0.38,0.51ZM383.77,205.23l0.5,0.09l0.47,-0.44l-0.1,-1.22l0.74,-0.18l0.18,-0.7l1.21,0.25l1.04,0.8l0.89,-0.46l-1.01,-1.33l0.62,-0.42l0.02,-0.79l-0.44,-0.25l-0.96,0.16l0.59,-1.18l2.2,-0.44l0.19,0.67l1.47,1.59l0.06,1.16l1.11,0.73l0.42,-0.02l0.74,-0.76l1.12,-0.16l0.51,-0.52l0.08,-0.45l-0.4,-0.23l-2.14,0.59l-0.0,-1.51l-0.29,-0.43l-0.65,-0.12l-0.09,-1.13l1.71,-1.64l0.21,-0.41l-0.29,-0.55l-2.37,0.42l-0.43,-0.71l-0.17,-1.33l0.32,-0.87l0.79,-1.06l1.24,-0.51l1.04,-0.92l0.09,-0.48l-0.44,-0.21l-2.22,0.5l-0.43,-0.28l-1.14,0.02l0.38,-0.39l0.29,-1.99l0.64,-0.46l-0.4,-0.93l1.17,-0.93l1.9,0.7l0.46,0.6l1.07,1.88l-0.53,2.31l1.53,1.03l0.93,1.78l-0.66,0.57l-0.02,0.46l2.18,1.08l1.1,2.81l-0.34,0.81l0.87,0.32l0.08,0.68l0.35,0.29l0.91,-0.75l2.34,-1.06l0.37,-0.86l-0.68,-0.41l-1.87,0.53l0.14,-0.38l-1.03,-1.91l-0.27,-1.66l0.3,-0.33l2.01,1.03l1.72,-0.63l0.33,-0.78l-0.43,-0.19l-1.45,0.33l-1.45,-1.62l-1.17,0.14l-1.42,-1.07l0.11,-0.5l3.22,0.42l0.33,-0.21l-0.05,-0.7l-0.36,-0.16l0.13,-0.62l-0.82,-0.32l-0.61,-1.44l-0.45,0.17l-0.51,-0.44l-1.8,-0.04l-1.23,-2.57l1.37,-0.44l0.53,-1.09l2.08,-1.34l2.12,1.16l0.39,0.02l0.59,-0.55l0.16,0.01l-0.2,0.83l0.76,0.32l1.32,2.38l-0.15,1.12l0.46,0.94l0.63,0.43l0.54,-0.33l-0.22,-0.93l0.86,0.61l0.69,-0.38l-0.07,-1.17l-0.76,-1.67l0.23,-1.16l0.36,-0.21l0.41,0.93l0.62,0.04l0.27,-0.55l0.75,-0.03l0.34,-0.33l0.26,1.46l1.67,1.11l1.4,0.51l0.5,0.54l-0.07,1.37l-0.88,2.32l0.33,1.55l0.98,1.91l-0.05,1.08l-1.22,3.87l0.26,2.81l-0.65,1.32l-1.67,1.18l0.25,0.77l2.72,1.22l0.11,0.51l-0.58,3.27l-1.37,-1.71l-2.28,2.1l-0.15,1.14l1.02,0.43l-1.01,0.13l-0.97,2.26l0.38,1.16l1.4,0.73l0.43,0.59l-0.34,0.65l0.12,0.42l0.54,0.28l0.41,0.74l-0.73,0.28l-0.94,-1.01l0.01,-1.37l-0.71,-0.43l-0.87,1.75l0.3,0.88l0.67,0.69l-0.02,1.48l-4.23,0.38l0.0,-0.4l-0.46,-0.22l-0.03,-0.96l-0.5,-0.29l-0.71,0.3l-0.14,1.04l-1.93,0.15l0.86,-2.32l-0.15,-0.74l-0.84,0.16l-1.17,1.92l-0.24,1.09l-4.37,-1.23l-0.14,-0.34l0.29,-2.82l-0.76,-1.01l0.47,-0.31l2.3,0.38l0.55,-0.3l0.08,-0.47l-1.72,-0.92l0.36,-0.69l-0.45,-0.55l-1.4,0.3l-0.45,-0.63l1.35,-0.74l0.01,-0.51l-0.56,-0.86l3.07,-0.16l0.54,-0.85l-0.09,-0.7l-0.56,-0.21l1.3,-0.09l0.3,-0.63l-0.2,-0.21l0.89,-0.23l0.48,-0.64l-0.75,-0.88l4.91,-0.17l0.58,-0.46l-0.25,-0.89l-3.61,0.21l-0.41,-0.32l-5.51,0.71l-0.52,-0.2l-3.1,0.47l-1.04,0.48l-1.31,-0.58l-3.7,0.92l-0.9,-0.24l-1.18,0.17l-1.18,0.6l-0.43,-0.81l0.21,-0.63l-0.24,-0.45ZM414.36,266.83l0.45,0.33l0.47,-0.16l0.16,1.43l-0.9,1.89l-1.18,0.2l-0.67,-1.27l-0.07,-2.15l0.62,-1.15l1.01,-0.67l0.38,0.38l-0.27,1.17ZM414.02,274.95l-0.9,-0.23l-0.15,-0.37l0.49,-0.5l0.1,-0.82l0.81,-0.84l-0.26,0.71l0.39,1.28l-0.49,0.75ZM411.43,235.03l-0.36,-0.31l0.19,-0.46l0.86,-0.66l0.9,-1.59l0.33,0.01l0.4,0.46l-0.71,1.5l-0.64,0.12l-0.97,0.93ZM410.06,345.07l1.51,0.05l0.61,0.71l0.95,-0.39l0.17,1.41l-0.45,1.89l-0.93,-1.78l-1.28,-0.8l-0.58,-1.09ZM382.97,135.74l-0.59,-2.3l0.01,-1.42l0.39,-0.64l0.86,-0.74l0.61,0.01l2.71,2.01l1.67,0.22l0.66,0.66l0.55,0.07l0.67,-0.79l0.05,-1.1l0.58,-0.39l0.01,-1.18l-0.45,-0.41l-2.55,-0.27l0.4,-0.4l2.02,0.24l0.44,-0.45l-0.09,-0.73l0.84,-0.11l0.34,-0.94l-0.42,-1.23l-0.52,-0.32l-0.83,0.28l-0.01,-0.67l-0.5,-0.27l-0.61,-0.22l-0.47,0.23l-0.37,0.97l-0.54,-0.55l2.05,-1.88l0.29,-0.74l-0.83,-1.4l-0.08,-1.1l-0.98,-0.62l-1.67,0.95l-1.01,2.32l-1.24,1.23l-0.45,0.0l0.1,-0.62l0.88,-1.09l1.46,-2.92l-0.0,-0.8l-1.31,-1.09l-2.53,0.6l-0.45,-0.29l0.45,-3.63l0.53,-1.4l0.88,-1.2l-0.07,-0.85l1.1,0.94l6.94,-0.52l1.44,1.75l0.65,0.01l0.49,0.41l0.69,1.58l-0.09,1.48l1.06,2.6l-0.57,2.15l-0.72,1.05l0.33,0.63l0.61,-0.07l-0.36,0.76l0.38,1.11l0.7,-0.12l0.87,-1.41l0.25,-1.95l1.49,-0.62l0.89,-0.97l0.93,0.3l1.44,2.91l1.25,0.73l-1.32,2.83l0.06,0.88l0.78,0.34l0.19,0.56l0.46,0.26l1.07,-0.57l0.72,0.1l1.01,-0.62l0.22,1.34l1.35,1.15l0.29,0.76l-0.77,0.86l-0.14,0.89l0.78,0.56l0.5,-0.14l0.4,0.76l0.72,0.04l-0.64,1.05l0.21,0.33l-0.5,1.14l-1.11,1.04l0.43,1.71l-0.46,1.99l0.47,0.65l0.88,0.07l0.33,1.97l0.66,0.82l1.4,3.18l-0.19,1.25l-0.82,1.09l0.24,1.78l-0.76,0.83l-3.18,0.26l-0.72,0.75l-3.03,-2.19l0.06,-0.78l-0.78,-2.96l0.56,-1.61l-1.09,-1.69l-0.14,-1.87l-0.46,-0.22l-0.92,0.33l-0.96,-1.37l-3.26,-1.74l-2.35,0.82l-0.76,-0.98l0.11,-0.74l0.74,-0.74l-0.29,-1.0l-3.53,0.22l-0.99,0.46l-0.9,0.01l-1.38,0.96l-0.37,0.67l-2.15,-1.04l-1.32,-2.23ZM402.3,245.78l0.83,-0.17l0.64,-0.53l1.52,0.08l2.32,-1.24l2.75,-0.09l-0.31,1.26l-0.78,1.12l-1.31,0.76l-0.9,1.24l-2.94,0.62l-0.22,-0.46l-0.67,-0.08l-0.2,0.26l-0.48,-0.32l-2.29,-0.19l-0.71,-0.52l0.06,-0.4l1.73,-0.52l0.87,0.11l0.12,-0.96ZM404.64,335.96l0.28,0.24l-0.19,0.49l-0.18,-0.17l0.08,-0.57ZM400.12,384.21l0.18,-0.59l0.82,-0.41l-0.03,0.27l-0.97,0.73ZM393.8,182.29l0.81,-0.68l1.53,-0.23l1.01,-0.86l0.46,-0.91l1.76,-0.32l1.38,0.5l-5.02,2.71l-0.88,0.31l-1.05,-0.51ZM393.1,153.37l0.12,-0.43l-0.41,-0.98l0.08,-1.05l0.43,-0.8l3.57,0.04l2.26,1.78l1.09,2.26l-2.23,-0.06l-0.62,-0.32l-1.53,1.08l-1.75,-0.58l-1.01,-0.95ZM390.55,142.8l-0.47,-0.22l0.1,-0.79l1.29,-1.78l0.47,-0.09l0.13,1.23l-1.53,1.65ZM381.06,200.78l0.49,-0.39l0.1,-0.71l1.3,-0.07l-0.34,-0.8l0.48,-0.76l4.85,-1.31l0.73,0.88l-2.31,0.72l-0.98,2.08l-0.55,0.45l-0.5,-0.27l-0.34,0.28l-0.66,-0.1l-0.22,0.31l-2.06,-0.3ZM378.25,196.4l1.13,-0.61l1.41,0.02l2.27,-1.2l3.84,-0.41l0.31,0.33l-0.14,0.8l-7.87,1.78l-0.94,-0.39l-0.01,-0.32ZM376.08,190.42l0.51,-0.09l0.37,-0.74l0.96,0.03l1.65,-0.6l1.35,0.13l5.02,-0.61l0.58,1.84l-0.32,1.29l-0.74,0.97l-0.9,0.66l-2.34,0.44l-3.2,-0.16l-0.2,-0.51l-2.69,-0.94l-0.05,-1.71ZM383.08,318.64l0.75,-0.08l0.69,0.85l-0.37,0.89l0.52,0.79l0.07,0.8l-0.72,-0.23l-1.1,-1.19l0.16,-1.82ZM376.48,180.64l0.14,-0.82l1.71,-1.08l1.59,0.1l0.19,0.43l-0.93,1.4l0.03,0.52l0.66,0.24l0.6,-0.21l0.59,-0.72l0.65,1.08l0.05,1.03l0.98,0.89l0.62,0.1l0.21,0.64l0.85,0.33l0.05,0.64l-1.9,1.61l-2.86,-0.1l-2.5,-0.58l0.38,-0.74l-0.37,-0.87l0.38,-1.61l-0.3,-0.9l-0.57,-0.15l0.14,-0.53l-0.41,-0.71ZM382.87,351.88l0.5,1.7l-0.24,1.27l-0.56,-0.41l-0.39,-0.96l0.19,-1.09l0.5,-0.51ZM378.76,357.87l0.32,-2.26l0.42,-0.71l-0.17,-1.01l0.44,-0.58l0.86,0.43l0.19,1.04l0.98,1.16l-0.5,1.2l0.11,0.66l-0.35,0.55l-0.68,0.19l-0.41,0.77l-0.05,-1.51l-0.61,-0.22l-0.56,0.3ZM380.85,368.37l0.1,-0.05l-0.02,0.19l-0.08,-0.14ZM374.14,155.27l0.21,-2.42l-0.8,-2.01l0.8,-0.65l0.99,0.44l0.58,0.86l1.89,4.93l0.03,1.06l-0.4,0.64l-0.16,1.45l1.37,0.18l1.17,2.66l-0.18,0.71l0.34,0.43l-0.01,0.7l-0.85,1.86l-0.9,0.06l-0.5,0.4l-0.78,-1.62l-1.22,-0.12l0.13,-0.76l-0.71,-1.63l0.21,-0.27l-0.64,-0.77l0.21,-1.55l-0.35,-0.63l0.01,-1.53l-0.33,-0.43l0.58,-1.2l-0.67,-0.8ZM262.47,316.27l0.34,-0.22l1.12,0.46l0.61,-0.39l-1.96,-6.32l0.67,-1.78l29.24,8.27l-0.78,3.03l0.33,0.57l1.6,0.39l0.47,-0.27l1.21,0.25l0.57,-0.32l0.28,-0.67l-0.55,-0.7l0.35,-1.4l17.48,4.16l0.48,-0.3l11.63,-52.12l1.02,0.72l0.45,-0.55l-0.42,-0.8l0.69,-0.71l-0.54,-1.4l-0.24,-1.55l0.18,-0.81l0.81,0.54l0.91,-1.42l-0.36,-0.62l-0.9,-0.56l0.84,-3.76l0.49,0.81l0.68,-0.14l0.16,0.09l-0.66,0.45l-0.02,0.46l1.77,2.72l0.22,0.8l1.31,0.03l-0.22,0.72l0.89,1.23l-0.65,1.01l-0.12,1.31l1.49,0.42l0.49,-0.38l0.61,0.57l-0.0,1.22l-1.19,3.5l0.19,3.2l-0.22,1.41l0.7,0.67l-0.61,2.61l0.7,0.59l-0.36,0.57l0.2,0.65l0.53,-0.06l-0.76,0.93l0.12,1.0l-0.43,0.87l0.57,1.07l-0.58,0.75l0.71,0.62l0.63,-0.14l0.24,1.97l0.89,0.76l0.73,-0.02l0.66,-0.57l-0.5,-1.35l0.11,-0.47l0.57,0.49l0.46,-0.1l0.95,-1.25l2.02,-0.19l0.34,-0.55l-0.93,-1.07l0.96,-0.16l0.34,-0.89l-0.87,-0.81l-0.05,-1.22l-1.01,-0.89l-0.03,-1.0l0.38,-0.81l-0.2,-0.86l-0.61,-0.33l0.22,-2.55l0.4,-0.02l0.4,-0.69l-0.45,-1.3l0.23,-0.62l-0.26,-0.84l0.67,-0.65l-0.92,-1.26l0.65,-0.41l0.21,-1.11l-0.5,-1.17l0.21,-1.86l-0.25,-1.13l0.28,-1.02l-0.12,-1.87l0.37,-0.58l-0.2,-1.1l0.32,-0.72l-0.25,-0.96l0.41,-0.63l-0.51,-1.77l0.88,-1.09l1.54,0.68l0.58,-0.44l-1.25,-2.02l0.07,-0.53l0.29,0.08l0.47,-0.7l0.88,0.63l0.88,0.17l1.07,1.06l1.44,2.45l0.78,0.6l0.86,-0.52l-0.4,-1.36l0.32,-0.64l1.15,-0.22l0.52,1.8l1.16,0.69l1.15,3.08l1.46,1.27l0.95,-0.04l-0.08,0.98l1.0,1.42l0.39,1.62l-0.25,0.32l0.71,0.92l0.14,0.68l-0.45,-0.14l-0.38,0.59l0.3,0.98l-0.17,0.88l0.84,1.07l-0.49,0.76l-0.05,1.17l0.44,1.05l-0.06,0.9l-0.51,0.11l-0.15,0.45l1.27,6.09l-0.75,1.49l-0.03,0.87l0.63,1.99l-0.0,3.18l0.86,1.04l1.18,5.51l-0.52,1.49l0.4,1.04l-0.28,0.91l0.13,0.89l-0.7,-0.16l-0.58,0.46l-0.33,3.04l-1.42,1.39l-0.22,0.73l0.27,1.13l2.57,3.54l0.53,3.8l1.04,0.58l1.58,3.35l1.99,0.55l0.86,1.98l1.46,0.57l0.59,-0.41l1.2,0.86l1.63,1.49l1.31,2.18l0.55,0.1l1.0,1.5l1.19,0.26l0.48,-0.79l0.39,0.02l0.35,0.54l-0.46,0.82l-0.08,1.02l0.58,1.75l1.49,-0.09l0.39,-0.62l0.4,0.54l0.48,0.08l1.21,-0.95l-0.15,1.9l0.29,1.38l-0.44,2.07l0.43,0.9l-0.09,1.65l-0.72,1.31l-0.15,1.26l-1.32,-0.65l-0.67,0.31l-0.66,-3.2l0.48,-1.61l-0.57,-0.42l-0.55,0.52l-1.63,3.9l-0.92,-1.31l-0.6,-0.05l-0.31,-2.12l-0.58,-0.38l-0.43,0.24l-0.04,-1.44l-0.73,-0.32l-0.41,0.42l-0.06,0.89l-0.59,0.26l-0.22,0.59l-1.04,0.38l-0.53,0.69l-0.48,-0.51l-0.55,0.22l0.26,1.51l0.78,0.74l-0.26,1.54l-0.39,0.73l-0.94,-0.2l-0.6,0.2l-2.17,-1.88l-0.77,-1.75l-0.7,-0.11l-0.5,-0.54l-0.75,0.27l-0.57,1.77l0.21,0.51l1.76,1.56l0.29,2.37l0.48,0.31l0.4,-0.29l0.06,0.36l-0.47,1.0l-0.33,2.26l-1.53,1.25l-0.23,1.27l0.19,0.67l0.83,0.07l3.22,-5.13l2.26,-0.4l0.69,-1.2l1.16,-0.27l1.41,0.46l0.57,1.19l-0.6,0.74l-0.6,-0.16l-0.61,0.35l-0.19,0.91l0.88,0.86l-0.73,-0.42l-0.47,0.19l-0.23,1.51l0.79,1.13l0.6,0.1l1.0,-1.4l0.8,1.26l-0.15,1.22l-0.9,1.48l0.22,1.0l-0.75,0.25l-0.33,-0.59l-0.49,-0.14l-0.9,0.89l-0.99,0.11l-0.83,-0.36l-0.29,0.99l-0.81,0.73l-0.57,-0.08l-0.73,-0.79l-0.54,0.06l-0.25,0.47l0.21,0.79l-1.58,0.48l-1.41,-1.13l-1.54,0.16l-0.46,0.75l-0.83,-1.04l-0.68,0.11l-2.23,-1.32l-1.04,-0.01l-0.64,-0.67l-0.13,-1.19l-0.49,-0.23l-0.48,0.33l-1.02,-0.36l-1.12,1.34l-3.67,-1.26l-0.44,-0.87l0.42,-0.51l0.84,0.21l0.39,-0.59l0.89,-0.46l0.07,-1.33l-1.14,-0.77l-0.63,0.07l-0.18,0.42l-1.9,-0.84l-0.64,-1.26l-2.42,-0.91l-0.98,0.41l-0.62,-0.34l-0.85,0.03l-1.13,-0.9l0.18,-0.56l1.13,-0.89l0.18,-2.67l-1.17,-2.34l-0.63,-0.51l-0.57,0.07l-1.24,1.02l-0.36,1.29l-1.64,0.17l-0.44,0.87l0.03,2.26l-1.95,1.24l-1.64,2.04l-1.04,0.42l-3.64,0.38l-1.98,-0.24l-0.74,-0.56l-1.6,-0.22l-0.57,0.31l-0.2,1.17l-3.95,2.3l-2.46,0.08l-2.36,0.7l-4.52,-0.72l-1.13,0.66l-0.42,-0.66l-1.03,-0.4l-0.99,0.46l-0.8,-0.06l-0.15,-0.53l-0.49,-0.28l-1.77,0.25l-2.42,-0.49l-0.27,0.61l0.33,0.46l-0.96,-0.57l-5.64,-0.97l-0.98,0.22l-1.61,-0.49l-1.27,0.6l-1.79,-0.57l0.13,-0.55l-0.32,-0.87l-1.54,-1.6l-0.33,-1.07l0.21,-1.24l-0.95,-2.35l0.51,-0.81l-0.15,-1.07l1.06,-1.01l0.32,-1.61l0.35,-0.3l-0.49,-1.01l0.3,-1.25l-0.2,-0.28l1.27,0.35l-0.11,-0.95l-2.26,-1.51l-0.3,-0.67l-1.49,-0.29l-0.78,-0.94l-1.12,-0.4l-3.35,-0.19l-0.29,-0.58l-0.83,-0.38l-1.01,0.57l-0.4,-0.07l-5.16,-2.72l-0.36,-0.87l-2.9,-2.59l-0.34,-0.9l0.7,-0.64l-0.02,-1.81l-1.35,-0.46l-0.43,-0.47ZM296.56,348.77l0.63,0.22l-0.45,-0.1l-0.19,-0.12ZM366.43,318.73l-0.64,-0.33l-0.41,-0.68l0.04,-1.63l1.15,1.7l-0.13,0.94ZM282.87,346.74l-0.62,-0.06l-0.07,-0.11l0.28,-0.07l0.41,0.24ZM375.09,341.57l0.15,-0.39l0.23,0.67l0.99,0.31l0.56,1.07l-0.52,0.08l-0.53,1.04l-0.26,-0.31l0.57,-0.88l-0.05,-0.43l-1.15,-1.16ZM370.58,212.41l0.63,-0.81l-0.25,-0.62l0.65,-1.25l1.74,-1.62l1.28,0.15l1.48,1.77l-0.02,2.98l0.67,1.48l-1.81,1.97l-2.25,0.64l-1.81,-0.94l-1.43,-1.88l1.13,-1.86ZM372.31,349.42l-0.69,-0.62l0.14,-0.26l0.41,-0.04l0.14,0.92ZM365.73,358.82l1.94,-1.29l0.43,-1.11l1.72,1.01l-0.26,2.28l-0.91,-0.23l-0.19,1.24l-2.73,-1.91ZM369.18,337.84l-0.03,-0.16l0.09,-0.51l-0.05,0.67ZM337.82,214.18l3.33,-14.86l4.92,2.08l0.83,0.69l0.52,-0.53l-0.01,-1.39l0.62,-0.25l-0.09,-0.68l0.49,-0.66l-0.15,-1.21l0.44,-0.26l-0.04,-0.72l-0.58,-0.34l-0.72,-1.28l-1.49,-0.97l0.19,-0.28l-0.28,-0.37l-1.02,-0.32l0.17,-1.39l-0.27,-0.41l-0.58,-0.18l-0.95,0.31l-0.1,-0.24l0.12,-0.51l1.89,-0.36l3.0,-2.09l-0.44,-0.87l0.4,-0.22l0.13,-0.66l-0.81,-1.27l-0.09,-0.89l-0.7,-0.39l0.04,-0.55l-0.83,-0.78l-0.79,0.02l1.18,-5.28l1.03,-0.03l0.84,-0.79l0.07,-0.44l-0.35,-0.41l0.3,-0.53l0.72,-0.25l0.05,-0.45l0.7,-0.4l0.77,-1.99l0.91,-0.57l0.33,-0.78l0.74,-0.49l0.74,0.03l0.54,0.4l0.98,-0.45l-0.22,1.63l1.01,0.5l-0.04,1.06l-0.74,0.83l-0.6,-0.1l-0.57,0.55l0.04,0.99l0.62,1.21l-0.62,0.59l0.16,1.74l-0.64,0.93l0.44,0.66l1.12,0.41l0.69,2.61l-0.87,0.53l-0.03,0.6l0.38,0.45l-1.58,0.69l-0.77,1.54l0.06,0.6l-0.65,0.89l0.43,0.58l3.42,0.05l0.8,1.47l-0.08,0.42l-0.97,0.79l-0.07,0.52l-0.72,0.11l-0.88,1.26l-0.45,0.83l0.12,0.99l0.67,0.27l0.49,-0.25l1.48,-1.92l1.96,-0.34l0.7,0.21l0.47,0.48l-0.35,1.03l0.36,1.12l-0.23,0.63l0.31,0.56l-0.13,2.25l0.32,0.54l0.6,-0.22l0.57,-2.72l1.25,-0.28l0.36,-0.61l-1.34,-0.99l0.58,-2.78l1.65,-1.78l1.33,0.24l2.88,2.18l0.61,1.29l0.46,1.92l-0.43,4.97l-0.94,1.77l-1.11,0.48l-0.57,0.8l-0.04,0.53l0.65,0.45l-0.78,0.99l0.13,1.24l-1.86,2.23l-0.44,0.99l0.28,0.91l-0.23,0.57l-0.69,0.17l-0.65,0.83l0.24,0.93l-4.44,0.4l-1.89,1.54l-1.09,-0.14l-1.52,-0.82l-0.69,-0.88l0.37,-2.12l-0.6,-1.0l-0.56,0.23l-0.2,1.4l-0.41,0.27l-0.57,-0.29l-0.45,0.3l-0.02,1.12l-0.37,0.42l-2.11,0.0l-0.5,-0.85l0.43,-0.31l-0.27,-1.67l-0.39,-0.58l-1.31,-0.64l-0.96,0.5l-0.65,1.08l-2.33,0.72l-1.36,1.53l-2.16,-0.53ZM353.07,252.53l-0.18,-0.64l-1.02,-0.65l-0.84,-1.21l-1.37,-0.46l3.4,-4.11l5.53,0.43l1.12,-0.43l1.11,0.01l1.15,0.48l1.47,2.13l0.1,0.62l1.03,0.62l0.77,1.33l-0.89,2.33l-0.41,2.7l-1.52,2.31l-0.12,0.8l-1.88,1.94l-0.41,1.43l-1.39,1.24l-0.29,-0.36l-0.77,0.15l-0.06,1.2l-0.11,-1.26l-2.04,-4.53l0.12,-0.68l-0.91,-0.66l0.22,-0.81l-0.61,-1.05l0.34,-0.68l-1.54,-2.22ZM356.38,131.25l0.61,-2.73l1.07,-4.77l0.81,1.78l0.66,0.28l0.31,0.67l0.28,1.9l-1.49,3.66l-1.82,0.06l-0.43,-0.84ZM354.22,140.9l0.72,-3.2l0.99,0.25l0.23,0.79l-0.87,1.71l-1.07,0.45ZM344.51,358.33l0.94,-0.21l1.34,0.38l0.66,0.56l0.64,1.22l-0.21,1.16l-1.07,0.09l-0.69,-0.57l-0.82,-0.81l-0.78,-1.83ZM343.45,246.05l0.34,-0.35l0.86,-0.03l1.16,0.72l-2.21,0.24l-0.15,-0.58ZM319.66,383.43l0.58,1.04l0.11,0.1l-0.52,-0.1l-0.16,-1.05ZM317.77,367.13l0.19,-0.56l0.63,-0.35l-0.4,1.1l-0.43,-0.19ZM317.48,374.25l-0.13,-0.78l0.25,-1.06l0.35,1.97l-0.46,-0.13ZM317.12,377.88l0.04,-0.85l0.65,-0.18l-0.58,1.35l-0.12,-0.32ZM314.41,374.19l0.57,0.24l-0.14,0.63l-0.37,0.19l-0.06,-1.06ZM311.1,365.02l0.9,-0.17l0.05,1.27l-0.95,-1.11ZM308.9,362.27l0.31,0.24l0.02,0.64l-0.44,-0.71l0.11,-0.16ZM305.06,360.24l0.09,-0.06l-0.03,0.05l-0.06,0.02ZM299.0,350.45l1.55,-0.48l0.33,0.64l-1.15,0.07l-0.73,-0.23ZM292.58,354.28l-0.15,-0.28l0.45,-0.29l-0.16,0.44l-0.15,0.13Z\", \"name\": \"Nunavut\"}, \"CA-NS\": {\"path\": \"M806.14,740.09l0.6,-1.1l-0.19,-1.16l1.53,-2.49l0.42,-2.61l0.6,-1.53l-0.03,-2.56l0.54,-3.5l1.51,-3.01l0.15,-1.97l0.16,-0.35l1.13,0.17l0.58,-0.23l-0.36,1.59l1.07,0.72l1.38,-0.48l0.25,0.69l0.19,1.88l-0.37,0.37l0.03,0.59l0.78,0.69l-0.34,1.48l0.1,1.93l-0.48,4.15l0.66,0.61l-0.35,0.83l-0.42,0.47l-0.53,0.06l-0.41,0.74l-0.44,0.35l-0.86,0.06l-0.71,1.87l-1.26,1.0l-0.2,0.83l0.56,0.34l0.4,-0.18l-0.21,0.92l0.5,0.44l0.95,-0.7l0.24,0.03l-1.43,1.75l0.15,1.53l1.35,0.03l1.28,-1.57l0.61,-0.21l0.72,0.25l-0.26,0.86l-0.98,0.93l-0.57,0.09l-0.98,1.27l-1.15,-0.45l-1.0,1.26l-1.85,-1.48l-1.42,-2.29l-0.27,-1.03l-1.36,-1.87ZM816.61,744.13l1.05,-1.41l-0.51,-1.54l2.33,-3.96l0.31,-1.02l-0.19,-0.41l-0.45,0.02l-2.83,2.93l-0.59,-0.45l2.36,-3.35l0.82,-2.08l0.74,-0.69l-0.04,-0.59l-0.69,-0.2l-1.08,0.73l-0.44,1.08l0.12,-0.58l0.95,-1.72l0.31,-0.23l1.11,0.83l0.0,0.01l-0.5,1.38l0.14,0.46l0.77,-0.36l0.46,0.32l0.48,-0.32l-0.25,-1.23l0.25,-0.6l0.28,-0.06l-0.09,0.39l0.46,0.2l1.39,-0.32l0.44,0.58l0.8,-0.47l0.17,1.41l-0.68,0.84l0.12,0.42l0.59,0.46l1.08,-0.34l0.3,0.34l-1.47,1.09l-0.16,0.62l-1.5,0.75l-0.17,0.84l0.9,0.39l-0.87,0.89l-0.13,0.94l-1.5,1.69l-1.05,0.32l-1.77,1.89l-1.76,0.09ZM816.46,732.7l0.05,-0.34l0.15,-0.22l-0.19,0.56ZM816.79,731.83l0.24,-0.63l0.0,-0.0l-0.04,0.32l-0.2,0.32ZM812.99,739.44l0.88,-1.79l0.6,-0.25l0.0,1.22l-0.51,0.54l-0.97,0.27ZM759.65,789.33l0.16,-4.68l1.0,-2.32l1.2,-1.76l-0.25,-0.79l-0.76,-0.03l0.79,-1.21l0.55,1.16l1.15,-0.48l2.56,-4.02l-0.39,-0.25l-0.53,0.16l-2.38,2.22l8.34,-9.82l1.48,-1.36l2.68,-1.68l0.64,-0.83l0.18,-0.86l0.15,2.95l0.79,0.75l0.56,-0.3l0.09,-0.56l0.83,0.28l1.02,0.66l0.21,0.95l0.41,0.32l0.85,-0.63l-0.2,-1.37l-1.52,-0.96l0.48,-1.27l2.17,-1.72l0.87,-0.31l0.38,-0.71l0.77,-0.16l0.09,-0.31l2.0,-0.77l0.57,0.44l0.62,-0.38l0.08,-0.73l0.87,-0.87l-0.76,-0.39l-2.62,0.32l-2.84,0.85l-0.61,0.66l-0.49,-0.31l-1.16,0.39l-1.2,-0.1l-2.3,0.94l-1.0,0.8l-0.82,-0.25l-1.64,0.19l-1.2,0.97l-0.22,1.24l-1.05,-0.26l-0.99,0.29l0.05,-0.87l0.87,-0.88l-0.09,-0.5l1.3,-1.3l0.28,-0.94l1.72,-2.26l0.02,-1.13l0.39,-0.53l0.26,0.4l0.97,-0.59l0.19,-0.62l-0.26,-0.25l-0.04,-1.31l0.51,-1.57l1.15,-0.65l0.29,-0.58l1.43,0.15l1.08,0.9l0.83,0.12l0.3,0.65l0.75,-0.22l0.73,0.19l0.2,-0.77l1.23,-0.68l-0.11,1.13l1.96,-0.28l-0.19,0.41l0.35,0.35l1.32,0.28l0.39,-0.54l0.8,-0.03l1.26,-0.83l0.38,-0.58l-0.15,-0.29l4.41,-0.24l-0.95,0.78l-0.21,0.93l0.34,0.38l0.28,-0.17l0.75,0.36l0.21,-0.58l0.48,0.15l0.41,-0.34l-0.28,-0.68l0.28,-0.19l1.02,0.2l0.3,0.67l0.82,-0.21l1.04,-1.74l0.93,-0.59l1.93,-2.56l0.71,-1.41l1.1,2.31l0.51,0.48l2.23,0.56l1.34,-0.18l0.72,-1.54l0.48,-0.23l1.15,0.56l1.2,1.12l1.39,0.45l-0.06,0.51l-0.81,0.8l-0.41,0.03l-0.92,1.13l0.04,0.62l0.47,0.31l5.15,-1.32l0.05,1.13l-0.76,-0.45l-0.75,0.77l-1.09,0.18l-0.75,1.02l-0.03,0.9l-1.95,0.93l-1.75,0.09l0.05,0.82l0.49,0.37l-1.67,0.55l-0.41,1.09l-1.6,0.89l-0.18,1.04l-2.05,0.97l-0.63,0.9l-1.1,0.64l-0.16,0.64l-0.47,-0.39l-0.48,0.9l-0.61,0.33l-0.02,0.42l-2.39,1.6l-0.16,1.04l-0.99,0.14l-0.47,0.43l-0.41,-0.68l-1.07,0.28l-0.59,-0.19l-0.35,0.33l0.23,0.92l-0.47,0.47l-0.85,-0.13l0.17,1.15l-0.23,0.62l-0.81,0.12l0.04,-0.31l-0.57,-0.29l-0.81,0.54l0.56,0.97l-2.57,-1.19l-0.58,0.05l-0.2,0.6l0.63,0.75l1.0,0.32l1.01,2.07l-0.36,-0.1l-1.55,0.84l-0.83,-0.89l-1.51,0.95l-0.47,-1.54l0.14,-1.54l-0.33,-0.32l-2.22,1.84l0.21,1.14l0.74,0.7l-0.28,0.68l-0.39,-0.94l-0.88,-0.46l-0.75,0.3l-0.14,0.61l-0.71,-0.17l-0.42,0.24l0.33,1.73l-0.39,0.59l0.87,0.89l-0.35,0.59l0.25,0.46l-1.07,-0.03l0.05,0.5l1.06,0.58l-1.02,2.27l-1.11,0.2l-0.41,0.8l0.37,0.35l0.69,-0.04l-0.01,0.26l-1.54,0.73l-0.15,0.68l0.77,0.39l-0.57,0.78l-1.04,0.65l-0.13,0.86l0.52,0.57l-0.9,-0.21l-0.93,0.87l0.68,1.28l-0.79,-0.83l-0.46,0.02l-0.13,0.45l0.65,1.21l-0.27,-0.23l-1.28,0.61l-0.79,-0.88l-0.66,0.32l0.49,1.99l-0.34,-0.13l-0.39,-1.23l-0.48,0.02l-0.52,0.61l0.82,2.23l-0.19,0.69l-0.61,-0.3l-0.5,0.49l0.27,0.42l-0.09,0.81l-0.81,-0.86l-0.55,0.12l-0.8,1.34l-0.39,0.07l-0.33,-0.88l-0.54,-0.21l-0.38,-1.47l-0.63,-0.19l-0.98,-1.55l-0.47,-0.22l-0.91,-0.14l-0.32,0.25l-0.3,-0.4l-0.66,0.27l0.1,0.85l0.62,0.96l-0.76,-0.45l-0.53,0.1l-0.02,-0.99l-0.93,-0.59l-0.33,-2.18l-1.14,-1.44ZM815.34,751.71l-0.03,0.02l0.02,-0.1l0.01,0.08ZM814.13,746.52l0.43,-0.47l0.76,-0.29l-0.16,0.85l-1.03,-0.09Z\", \"name\": \"Nova Scotia\"}, \"CA-BC\": {\"path\": \"M13.63,416.0l18.57,10.78l19.97,10.92l20.25,10.4l20.52,9.86l20.77,9.32l21.0,8.77l21.26,8.24l21.12,7.55l-37.33,108.91l0.0,0.84l0.61,0.53l-0.38,0.97l1.06,0.85l0.3,1.12l-1.39,-0.67l-0.62,0.14l0.03,1.15l-0.43,0.73l0.21,0.59l0.57,0.21l0.19,2.02l0.84,1.3l0.35,0.17l0.53,-0.25l0.98,0.72l0.76,0.05l-0.13,1.32l0.58,2.06l2.09,1.93l0.8,-0.25l0.46,-1.15l0.77,1.04l0.58,1.33l-0.59,0.93l0.97,0.98l-0.37,0.82l0.11,1.89l0.47,0.41l0.99,-0.09l0.34,1.0l-0.39,0.83l0.57,1.04l0.1,1.29l-0.75,0.67l0.47,2.99l-0.56,0.69l0.13,1.58l2.27,0.12l0.46,-0.24l0.44,-0.87l0.64,1.11l1.28,0.79l-0.19,0.8l-1.23,0.79l0.3,1.88l0.88,0.69l0.54,1.17l1.29,0.11l1.2,0.66l0.54,-0.1l-0.09,1.84l1.68,3.03l0.03,3.14l0.31,0.86l1.36,0.39l1.23,-1.23l0.58,0.0l0.08,2.89l0.77,0.86l0.09,0.87l0.49,0.56l-0.05,1.03l0.7,0.9l-0.38,1.12l0.14,1.48l0.93,0.66l0.11,0.73l0.87,0.66l-0.2,1.52l0.36,0.88l0.76,0.81l1.17,0.52l0.03,0.67l1.16,1.63l0.03,0.84l-0.77,0.41l-0.02,0.81l0.62,0.43l0.21,0.75l1.08,1.17l0.17,0.76l0.69,0.1l0.14,0.68l-0.43,0.58l0.68,2.09l0.58,0.31l0.91,-0.51l0.95,0.57l0.82,3.1l0.57,0.99l-0.49,4.19l0.35,1.34l-0.15,1.29l-0.5,0.22l-0.33,1.01l0.11,2.26l-1.05,1.89l-0.99,0.67l-0.26,0.71l0.45,0.95l1.24,0.51l-0.71,1.24l-0.02,1.23l0.9,1.34l0.56,2.72l1.65,0.84l0.45,0.63l-0.19,0.8l0.44,1.02l0.56,0.37l-0.22,0.27l-27.35,-7.82l-27.2,-8.56l-22.07,-7.54l-20.36,-7.43l-0.15,-0.39l-0.8,-0.35l0.21,-1.16l-0.6,-0.44l-1.81,0.1l-0.47,0.32l-0.12,-0.4l1.21,-0.59l0.34,-0.89l-1.81,-0.14l0.27,-0.72l0.53,0.32l0.3,-0.37l-0.62,-1.25l1.53,0.24l0.97,0.62l0.85,-0.09l0.77,-0.61l1.17,-2.04l-0.35,-0.56l-0.52,0.1l-0.39,0.88l-0.95,0.93l-0.73,-0.02l-2.26,-1.49l0.81,-0.83l0.52,-1.68l1.28,-1.89l0.77,-0.45l0.02,-0.73l-0.57,-0.2l-0.96,0.34l-0.64,1.13l-3.29,0.49l-0.35,1.52l-0.4,0.28l-2.22,-2.35l0.35,0.09l0.6,-0.57l0.23,-1.06l2.11,-0.04l1.12,-0.75l0.05,-0.46l-0.41,-0.2l-1.67,0.26l-1.17,-0.27l-0.59,-2.27l0.96,-0.94l0.39,-1.03l-0.25,-1.64l1.82,-0.18l1.09,-0.9l-0.39,-1.65l-1.48,-1.88l-0.67,0.31l0.24,1.15l0.69,0.8l0.18,0.72l-2.3,0.5l-0.61,1.32l-0.59,0.03l-0.7,0.73l-0.05,0.48l-0.99,0.51l-1.16,-0.38l-0.47,0.15l-1.25,-0.65l-0.63,-0.72l0.13,-0.64l-0.32,-1.0l-1.12,-1.86l0.42,0.2l0.32,-0.36l0.74,-1.86l1.0,-0.73l0.78,-1.13l0.03,-1.27l-0.42,-0.72l0.66,-0.64l1.06,0.45l1.62,-0.21l1.19,-0.55l0.37,-0.56l-0.53,-0.58l-1.92,0.55l-2.01,-0.55l-1.36,0.98l-0.8,0.21l-0.86,-0.52l0.32,-0.78l-0.13,-0.94l-0.31,-0.35l-0.54,0.21l0.31,-0.57l1.04,0.0l0.5,-0.55l0.71,-0.01l0.52,-0.47l0.7,-1.52l0.9,-1.07l-0.54,-1.17l1.94,-1.18l-0.12,-1.14l-0.81,-0.31l-1.32,1.2l-0.98,0.31l-0.12,1.24l0.33,0.57l-0.79,1.69l-2.82,1.23l-0.55,0.81l-0.42,0.11l0.16,-1.29l-0.25,-0.42l-0.88,0.25l0.2,-0.94l-0.42,-0.46l-1.2,0.93l-1.01,-0.17l1.36,-2.4l1.52,-0.77l0.06,-0.63l-0.27,-0.25l-2.03,0.51l-1.03,1.83l-0.73,0.39l-0.15,0.67l-0.43,0.25l-0.44,-0.76l0.35,-0.16l0.05,-0.62l-0.51,-0.46l-0.72,-0.2l-1.57,0.34l-1.87,-1.12l0.32,-0.73l2.46,0.25l0.57,-0.43l1.19,0.03l1.37,0.45l0.9,-0.85l0.82,-0.19l0.38,-0.6l-0.05,-1.03l0.94,0.18l1.31,-1.41l0.17,-2.17l-0.49,-1.27l-0.73,0.05l-0.14,0.4l-0.08,2.77l-1.67,0.34l-0.51,0.84l0.1,0.68l-1.26,0.7l-1.22,-0.44l-0.69,0.2l-0.41,-0.77l-2.04,-0.08l2.1,-0.61l0.26,-0.46l-0.72,-0.59l-0.93,-0.03l0.58,-1.2l-0.82,-0.57l0.97,-0.06l0.51,-0.79l-0.42,-0.46l-0.72,0.14l-1.89,-1.2l0.34,-1.92l-0.21,-0.53l-0.53,0.08l-0.59,0.69l-0.43,1.42l-0.53,0.35l-1.09,0.02l-1.26,-1.83l-1.03,0.28l-1.03,-0.44l-1.12,-1.04l-0.63,-0.09l-0.27,0.62l0.24,0.44l-0.35,-0.26l-0.23,-0.92l-0.6,-0.16l-0.73,-0.75l0.18,-0.81l-0.87,-0.64l1.18,-1.24l0.02,-0.47l-0.42,-0.45l-1.61,-0.27l-0.56,-1.45l0.22,-0.72l2.39,-0.07l1.79,1.27l1.94,0.48l1.27,-0.28l0.88,-1.35l-0.14,-0.43l-0.45,-0.02l-0.93,0.7l-1.16,0.1l-1.52,-0.85l-0.02,-0.89l-1.42,-0.1l-1.64,-0.71l1.26,0.01l1.14,-0.71l0.59,0.01l1.02,-0.91l0.43,-1.1l0.48,-0.22l1.69,0.22l2.83,0.98l3.66,2.02l1.21,-0.42l0.57,-0.77l-0.02,-1.8l-0.37,-0.36l-0.42,0.3l-0.36,1.43l-0.61,0.31l-3.57,-2.25l-1.84,-0.45l-0.7,-0.84l-0.79,0.4l0.26,-0.75l0.87,-0.15l0.93,-1.27l0.03,-0.56l-0.63,-0.27l-1.08,1.17l-0.74,0.01l-0.65,0.85l-1.13,-0.6l-0.81,0.22l0.07,0.61l0.78,0.73l-1.19,0.97l-0.01,0.66l-0.42,0.34l-0.3,-0.87l-0.76,-0.34l0.24,-0.89l-0.18,-1.6l1.21,-2.97l0.59,-0.66l0.81,-0.17l1.32,0.33l0.75,-1.05l1.21,-0.43l1.23,0.4l0.58,-0.17l0.26,-1.47l0.99,-0.36l1.17,0.12l1.46,-0.73l1.19,0.83l0.04,2.29l1.36,4.54l0.45,-0.23l0.46,-1.2l-0.26,-1.8l-0.88,-1.68l0.26,-1.89l0.72,-0.2l1.29,0.29l0.56,-0.4l-0.51,-0.96l-2.81,-0.06l-1.1,-0.71l-0.09,-0.5l0.44,-2.15l2.24,-0.84l0.99,-0.04l1.43,-1.41l0.28,-2.14l-0.81,-1.58l-0.65,0.29l-0.22,3.03l-0.98,0.61l-2.77,0.76l-0.68,0.64l-0.16,0.77l-2.05,0.08l-0.99,0.71l-2.28,0.14l0.49,-0.43l-0.46,-0.73l-1.92,1.47l-0.07,-1.06l0.98,-0.32l0.34,-0.46l-0.16,-1.5l0.77,-0.56l0.01,-0.74l0.57,-0.66l-0.35,-0.64l-1.85,-0.06l-1.04,0.34l-1.92,1.56l0.91,-1.04l0.47,-1.59l2.56,-2.56l0.76,-1.92l1.15,-0.09l0.32,-0.53l-0.19,-0.4l-0.77,-0.17l-0.3,-0.38l-2.19,1.52l-1.33,-1.01l-0.09,-1.12l0.94,-3.09l1.01,-1.4l-0.84,-0.43l-0.19,-1.93l-0.43,-0.19l-0.45,0.32l-0.66,-1.45l-0.01,-0.71l0.54,-0.39l0.2,-1.31l0.91,-0.63l-0.08,-0.66l-0.94,-0.13l0.11,-0.47l0.5,0.37l0.78,-0.2l-0.12,1.24l0.4,0.92l0.61,0.23l0.57,1.55l-0.23,0.75l0.41,0.43l0.51,-0.33l0.44,-1.04l1.38,-0.01l1.82,1.11l0.06,0.69l-0.69,0.76l-0.01,0.52l0.94,-0.15l0.34,0.67l-0.3,1.58l0.52,0.74l0.71,-0.13l-0.15,-1.33l0.33,-1.0l-0.62,-1.12l-0.37,-2.46l-1.72,-0.67l-0.55,-0.65l-0.51,-0.03l-0.67,0.57l-0.82,-0.23l-1.33,-3.84l0.95,-1.11l0.29,-1.09l0.41,-0.39l0.68,0.09l0.51,-0.48l1.48,1.12l0.49,-0.05l0.05,-1.0l-0.79,-0.39l-0.62,-0.84l1.48,-1.45l0.1,-0.72l-0.99,-0.1l-3.25,1.95l-0.57,-1.39l-0.8,0.05l-0.29,1.7l-0.47,-0.69l-0.45,0.22l-0.2,0.96l-2.69,1.13l-1.28,1.81l-0.16,1.0l-0.72,0.81l-1.64,-5.17l0.13,-1.57l-1.14,-2.66l-0.13,-0.95l0.31,-0.84l-0.66,-0.17l-0.12,-0.39l-0.02,-0.68l1.08,-2.11l0.75,-0.75l0.41,0.1l0.16,2.49l0.53,1.74l0.59,0.45l0.43,-1.42l-0.45,-1.17l-0.05,-2.35l0.91,0.01l1.75,1.57l1.64,-0.27l0.58,-0.39l-0.37,-0.7l-1.5,0.3l-1.83,-1.67l-3.38,-0.01l-0.21,-0.73l-0.68,-0.52l0.67,0.0l0.5,-0.5l-0.21,-0.46l0.8,-1.92l-0.16,-0.48l-0.5,0.07l-0.51,0.6l-0.69,0.02l-0.64,-0.71l0.52,-0.88l0.82,0.14l0.35,-0.52l-0.08,-1.1l0.72,-0.27l0.81,5.21l0.46,0.67l0.85,0.22l0.24,-0.48l-0.5,-0.59l-0.17,-0.94l0.7,-1.06l0.93,-0.09l0.32,-0.67l-0.55,-0.45l-0.75,0.04l-0.83,0.73l-0.5,-4.19l1.16,-0.05l0.95,1.09l0.34,1.33l1.09,0.78l0.67,-0.06l0.26,-0.34l-0.14,-0.42l-1.06,-0.71l-0.18,-1.2l-0.69,-1.14l0.83,-0.81l1.4,-0.59l0.1,-0.88l0.54,-0.4l0.23,-0.01l-0.41,0.33l0.27,0.72l2.0,-0.48l0.45,0.51l1.69,0.25l0.42,-0.72l-3.37,-1.69l3.35,-2.84l0.88,-0.25l2.11,-1.94l0.79,0.46l1.18,-0.33l0.19,-0.51l-0.4,-0.44l-0.76,0.18l-0.72,-0.46l-0.55,0.02l0.42,-3.12l-0.63,-0.43l-0.38,0.34l-0.63,2.46l-1.19,1.08l-0.25,0.6l0.17,0.34l-0.61,0.89l-4.38,3.54l0.19,-1.23l3.65,-2.46l0.01,-1.21l0.72,-2.25l0.03,-1.69l1.16,-2.12l-0.07,-1.07l3.08,-2.49l-0.27,-0.65l0.46,-1.28l0.06,-1.38l-0.37,-0.78l-1.14,-0.25l-1.35,-1.24l0.24,-1.83l-1.34,-1.53l-0.43,-1.97l-0.62,-0.93l-2.03,-1.66l-2.71,-5.17l-2.36,-1.11l0.5,-1.02l0.09,-1.44l0.61,-0.94l-1.5,-2.18l1.9,-2.25l-0.03,-0.55l-2.03,-1.95l1.76,-1.48l-0.68,-17.44l0.4,-2.73l-0.61,-4.17l0.83,-1.22l-0.82,-3.51l-0.3,-3.87l-2.29,-3.88l-0.25,-1.33l0.41,-1.01l-0.35,-0.6l0.5,-0.87l-0.0,-1.39l-0.96,-1.57l0.08,-2.0l-1.83,-1.91l0.0,-0.97l0.57,-0.96l-0.39,-0.8l0.97,-0.53l0.86,-1.58l-1.69,-5.99l-0.52,-0.45l-4.82,0.06l-3.19,-0.8l-1.16,0.04l-0.33,0.59l0.29,1.15l-0.97,0.61l-0.87,-0.59l-0.65,0.07l-1.58,2.84l-1.77,1.29l-2.42,-0.92l-5.25,0.52l-2.15,0.6l0.9,-1.15l1.29,-4.82l-3.3,-13.32l0.53,-2.9l-1.35,-2.31ZM73.47,652.52l0.29,0.56l-0.5,0.41l0.15,-0.35l0.07,-0.62ZM65.69,639.61l-0.05,0.24l-0.09,0.16l-0.03,0.01l0.17,-0.41ZM47.11,622.29l0.58,0.56l0.35,0.24l-0.42,0.17l-0.51,-0.97ZM45.72,609.76l-0.16,0.0l-0.36,-0.19l0.3,0.13l0.23,0.05ZM50.07,591.83l-0.48,0.83l0.04,0.6l-0.78,0.64l0.16,-1.83l0.64,-0.61l0.4,0.37ZM46.52,592.11l-0.73,0.75l-0.66,0.39l0.64,-1.17l0.75,0.03ZM51.62,599.75l0.12,-0.02l0.32,0.0l-0.13,0.19l-0.3,-0.17ZM56.1,626.07l-1.59,-0.43l-1.14,0.16l-0.32,-0.43l0.61,-0.51l2.44,1.22ZM55.38,630.91l-0.22,-0.02l-0.62,-0.24l0.1,0.01l0.73,0.25ZM72.83,659.99l-0.63,-0.33l-0.52,-1.02l-0.28,-2.05l0.99,-1.2l0.28,0.06l0.38,2.07l-0.22,2.46ZM77.14,661.77l0.07,-0.32l0.41,-0.02l0.04,0.63l-0.52,-0.29ZM76.5,664.01l0.11,-0.16l0.39,-0.19l-0.22,0.27l-0.28,0.08ZM71.52,674.1l-0.21,-0.6l0.4,-0.58l-0.16,-0.8l0.09,-0.03l0.54,1.27l-0.43,-0.06l-0.24,0.8ZM70.39,655.37l-0.06,-0.38l0.7,-0.3l-0.51,0.61l-0.13,0.07ZM32.85,620.93l0.68,-0.17l0.02,-0.64l-0.76,-0.43l0.22,-1.3l2.37,-0.03l0.56,0.28l0.8,-0.21l1.61,0.7l3.39,3.27l-0.22,0.7l0.2,0.9l0.6,-0.15l1.66,2.64l1.83,1.44l0.03,0.48l1.01,0.5l0.02,0.63l1.12,0.19l1.45,1.91l0.75,0.06l0.74,0.68l1.02,0.21l1.66,1.03l1.93,2.25l1.25,0.68l0.78,0.91l1.79,0.49l0.86,0.93l-0.31,3.68l0.62,1.55l-0.05,2.74l1.84,4.7l-0.04,0.28l-0.93,-0.48l-0.43,0.57l0.38,1.07l0.32,3.28l0.82,0.58l1.32,2.19l3.72,2.74l-0.4,0.16l-0.02,0.74l2.04,1.19l-0.28,0.35l0.02,1.26l1.09,0.83l0.1,1.41l-0.7,-0.1l-0.38,0.64l1.57,3.71l-0.33,0.62l-0.81,0.32l0.85,1.83l-0.4,0.62l0.04,0.77l-0.62,0.94l0.44,0.45l1.05,-0.34l0.71,-1.07l-0.07,3.71l-0.4,0.04l-0.51,-0.91l-0.52,-0.17l-2.12,1.49l-0.76,-0.26l-1.02,-1.27l-1.22,-0.57l-4.51,-4.68l0.34,-0.65l-0.2,-0.23l-0.58,-0.29l-0.68,0.18l-1.54,-1.14l-1.15,-1.88l-2.45,-2.57l-0.31,-1.19l1.25,-0.56l0.85,0.03l0.53,-0.84l1.63,-0.27l1.28,-0.98l1.13,-1.58l0.3,-1.62l-0.53,-0.48l-0.6,0.5l-0.62,1.63l-1.35,1.41l-1.99,-0.34l-0.65,-0.59l-1.1,0.36l-0.45,-0.34l0.86,-0.46l-0.95,-1.1l-2.45,1.38l-0.88,-1.16l-0.73,-2.0l-0.55,-0.46l2.18,-0.5l0.91,-0.99l-0.46,-0.57l-1.28,0.35l0.61,-1.06l-0.55,-0.56l0.9,-1.32l-0.21,-0.54l-0.44,-0.0l-1.12,1.18l-0.61,-0.19l-0.84,0.41l-0.13,-0.38l1.04,-0.37l1.26,-1.45l0.06,-0.62l-0.7,-0.23l-1.4,1.27l-0.07,-0.69l0.65,-0.95l-0.29,-0.52l-1.77,0.02l-0.03,-0.74l-0.47,-0.28l-0.8,1.05l-0.81,-2.22l-1.16,0.39l-0.16,0.81l-0.28,-0.45l1.23,-2.55l1.21,-0.2l1.13,0.59l2.92,0.63l0.42,-0.31l-0.06,-0.7l-1.2,-0.58l-1.67,-0.08l-0.98,-0.86l1.24,-1.08l-0.63,-1.0l-0.61,0.12l-0.58,0.93l-0.49,-0.08l0.63,-3.12l-0.28,-0.49l-0.71,0.06l-0.6,-2.02l-0.77,0.21l-0.23,-0.72l-0.45,0.1l-0.81,1.52l-1.65,-0.66l-0.32,-1.71l0.85,-0.49l0.55,-0.81l1.06,-0.3l0.4,-1.05l-0.59,-0.35l-1.01,0.48l-0.47,-1.23l-0.55,-0.1l-0.66,1.5l-0.63,0.06l-0.46,-0.99l0.8,-0.46l-0.23,-0.43l0.38,-0.76l-0.33,-0.31l-2.03,0.4l0.58,-0.85l-0.33,-0.3l-1.14,0.05l-1.37,0.68l-0.68,-0.62l2.5,-1.18l0.04,-0.56l-0.65,-0.37l0.41,-0.24l0.12,-0.65l-0.63,-0.79l-0.87,-0.23l1.07,-1.19l1.81,0.27l1.47,0.66l0.35,2.01l0.36,0.42l0.68,-0.27l-0.22,-2.73l1.49,-0.17l0.6,-0.54l-0.27,-0.6l-1.46,-0.13l-0.39,-0.67l-2.99,-1.74l-0.22,0.68l0.38,0.79l1.9,1.18l-2.18,-0.17l-0.43,-0.36l-1.45,-0.06l-0.38,-0.57l-0.68,0.11l-0.69,-1.33l0.08,-1.33l-0.53,-0.59ZM42.94,638.71l0.18,0.66l-0.39,0.25l0.21,-0.91ZM48.37,658.01l-0.18,-0.13l-0.04,-0.06l0.11,0.01l0.12,0.19ZM65.71,652.19l0.14,-0.21l0.29,0.73l1.84,1.59l0.58,2.49l-1.31,-1.65l-0.19,-1.3l-1.35,-1.65ZM68.25,643.72l-0.05,0.24l-0.39,0.41l0.11,-0.31l0.33,-0.33ZM67.21,657.84l0.25,0.09l0.46,0.37l-0.41,-0.15l-0.3,-0.32ZM65.77,642.5l0.43,-0.25l0.47,0.39l-0.27,0.67l-0.55,-0.11l-0.08,-0.69ZM66.61,644.25l0.09,0.18l-0.5,0.24l-0.01,-0.2l0.41,-0.22ZM64.09,645.3l-0.21,-0.95l0.93,-0.53l-0.29,1.49l-0.43,-0.01ZM63.71,655.75l-0.0,-0.0l0.0,0.0l-0.0,0.0ZM61.57,639.47l0.04,-0.17l0.14,0.12l-0.07,0.05l-0.11,0.0ZM62.7,639.33l0.42,-0.95l0.59,0.96l0.17,3.08l-0.26,-2.27l-0.92,-0.82ZM61.44,643.0l-0.21,-0.5l0.24,-1.24l0.33,-0.58l0.41,-0.02l0.33,1.46l-1.11,0.88ZM60.76,637.89l0.47,-0.38l1.13,-0.03l-0.83,0.65l-0.77,-0.24ZM59.74,636.88l0.18,-0.02l0.48,0.11l-0.61,-0.06l-0.05,-0.04ZM56.9,635.18l0.86,0.09l0.09,0.38l-0.33,-0.07l-0.61,-0.4ZM47.25,600.57l1.72,-2.5l0.8,-0.67l0.72,-0.33l0.86,0.23l1.96,-0.24l1.42,-0.89l1.65,0.05l-0.51,1.31l-4.2,0.56l-1.27,0.61l-1.38,1.32l-0.25,0.68l-1.53,-0.13ZM51.46,628.21l0.59,-0.54l2.0,-0.54l1.2,0.15l0.11,0.27l0.04,0.85l-0.66,0.22l-0.62,0.73l-1.4,-0.87l-0.51,0.21l-0.75,-0.48ZM51.4,630.8l1.84,0.02l0.23,0.32l-0.39,0.14l-1.68,-0.47ZM49.37,624.62l0.01,0.01l0.0,0.06l-0.02,-0.07ZM50.29,625.12l0.07,-0.07l0.64,0.3l-0.56,-0.01l-0.15,-0.22ZM49.87,623.87l0.03,0.01l0.01,0.0l-0.01,0.0l-0.03,-0.01ZM48.61,586.85l0.14,-1.17l0.6,0.19l-0.53,0.81l-0.2,0.17ZM45.49,570.28l0.29,-0.57l0.16,-0.22l-0.2,0.65l-0.25,0.13ZM46.01,569.39l1.12,-1.94l1.14,-0.24l1.27,0.43l-0.72,1.13l-0.97,-0.27l-1.84,0.9ZM48.58,656.68l-0.36,-0.84l0.5,-0.17l0.3,0.29l-0.44,0.72ZM46.18,597.25l0.63,-0.09l0.89,0.46l-0.56,0.43l-0.94,-0.3l-0.02,-0.5ZM46.94,596.03l1.01,-0.32l-0.03,-0.58l-0.46,-0.3l0.72,0.24l-0.14,1.53l-1.1,-0.57ZM44.61,591.15l1.02,-0.72l0.85,-3.1l1.13,-2.06l-0.16,1.5l-1.04,3.3l-0.66,0.74l-1.14,0.33ZM41.34,582.69l0.24,-0.26l-0.19,-1.84l0.67,0.54l0.48,-0.46l-0.11,-0.42l1.76,-1.19l1.07,-0.04l0.41,-0.42l-0.98,-2.79l-0.6,0.02l1.1,-2.33l1.04,0.82l1.06,2.78l0.64,0.6l-0.19,2.48l-0.45,1.43l-2.7,3.9l-0.21,0.8l-0.83,-0.37l0.76,-1.87l2.26,-2.34l0.42,-0.85l-0.14,-0.58l-0.73,-0.14l-0.33,0.74l-0.59,-0.23l-2.15,3.48l-0.91,0.15l-0.83,-1.63ZM44.7,586.19l0.0,0.03l-0.02,-0.02l0.02,-0.01ZM43.79,576.47l0.01,0.55l0.41,0.22l0.25,0.72l-2.45,1.26l-0.46,-0.61l0.42,-1.1l0.58,-0.58l0.33,0.23l0.91,-0.68ZM43.19,586.9l1.52,0.5l-0.57,2.32l-0.91,-1.6l-0.04,-1.22ZM43.67,542.2l-0.02,-0.54l3.49,-1.73l-0.29,0.57l-1.88,1.35l-1.29,0.35ZM47.09,655.52l-0.0,-0.0l0.0,0.0l-0.0,0.0ZM45.06,572.22l0.01,-0.26l1.32,-0.96l0.54,-0.79l-0.02,2.09l-0.45,0.54l-0.48,-0.44l-0.92,-0.18ZM45.54,652.69l0.48,-1.03l0.67,0.05l-0.21,1.74l-0.94,-0.76ZM42.91,600.73l0.86,-0.48l0.0,-0.68l1.03,-0.85l1.62,0.26l-0.41,0.91l-1.8,1.9l-0.26,1.2l-0.45,-0.18l0.48,-1.52l-0.25,-0.39l-0.83,-0.19ZM44.17,597.56l0.09,-1.02l1.12,-0.67l-0.62,1.32l-0.6,0.37ZM42.93,594.98l-0.27,-0.29l0.66,-0.51l1.36,0.6l-0.74,0.66l-1.01,-0.46ZM40.85,642.26l1.08,-0.1l0.35,-0.5l-0.76,-0.86l1.66,-0.07l0.6,0.8l-0.16,1.46l-0.84,2.36l-1.12,-1.08l-0.81,-1.99ZM41.8,608.09l0.21,-2.76l1.49,-0.67l-0.54,4.43l-0.27,0.14l-0.31,-0.88l-0.58,-0.25ZM41.66,575.26l-0.17,-0.45l0.43,-0.95l1.15,-0.67l0.48,-0.66l-0.96,3.17l-0.92,-0.42ZM41.46,591.43l0.36,-2.24l0.32,-0.39l0.56,0.41l-1.24,2.22ZM41.74,542.16l0.92,-0.2l0.04,0.0l-0.38,0.77l-0.43,-0.06l-0.15,-0.52ZM37.53,560.61l0.55,-1.25l-0.44,-0.75l0.81,-0.37l1.97,4.36l0.42,3.01l0.52,1.5l-0.36,-0.15l-0.56,0.32l0.21,0.68l1.21,0.77l0.49,2.16l-1.85,-0.28l-0.47,1.41l-0.33,-0.08l0.08,-2.41l-0.67,-0.3l-0.01,-0.77l-0.39,-0.29l0.51,-1.15l-0.55,-0.61l0.65,-1.04l-0.07,-1.15l0.49,0.07l0.29,-0.54l-0.67,-0.96l-1.34,-0.25l0.25,-1.11l-0.75,-0.82ZM38.34,563.69l-0.21,0.15l-0.18,-0.06l0.16,-0.11l0.23,0.02ZM40.27,619.3l0.43,0.03l0.07,0.55l-0.36,-0.48l-0.14,-0.1ZM40.3,551.24l0.12,-0.25l0.34,-0.21l-0.2,0.34l-0.26,0.12ZM39.08,583.26l0.32,-0.4l-0.37,-1.6l0.38,-0.35l1.34,4.3l-0.73,1.53l0.04,-0.56l-0.52,-0.33l-0.24,-0.74l0.25,-0.48l-0.48,-1.36ZM40.19,553.88l0.01,-0.26l0.12,-0.15l0.17,0.38l-0.3,0.03ZM39.62,574.23l-0.2,-0.65l0.25,-0.22l0.56,2.86l-0.15,0.8l-0.46,-2.8ZM39.02,635.94l0.02,-0.04l0.01,0.01l0.01,0.02l-0.04,0.01ZM36.21,544.7l1.15,-1.7l0.93,0.78l-0.43,0.41l-1.65,0.51ZM33.6,556.26l0.03,-0.04l0.04,0.11l-0.07,-0.07ZM35.18,554.73l1.69,-0.53l1.0,0.03l0.49,1.68l-0.08,0.84l-1.9,1.13l-0.24,-0.64l0.9,-0.73l1.05,-0.05l0.12,-0.89l-1.57,-0.46l-0.97,1.11l-0.49,-1.49ZM37.4,573.38l0.12,0.1l0.17,0.59l-0.22,-0.3l-0.08,-0.39ZM36.87,545.99l0.21,-0.1l0.08,0.57l-0.17,-0.08l-0.13,-0.39ZM33.01,562.11l0.45,-0.71l0.44,0.35l2.97,4.84l0.38,1.23l0.13,3.3l-0.25,0.6l-0.43,-0.49l-0.68,0.22l-0.32,-0.23l-0.16,-1.77l-0.4,-0.51l0.19,-1.05l-0.74,-1.58l-0.88,-0.66l-0.14,-1.69l0.83,0.06l0.05,-0.47l-0.38,-0.48l-0.81,-0.17l-0.26,-0.79ZM35.28,560.82l1.21,-0.39l-0.0,0.61l0.71,0.77l-0.5,1.33l-1.33,-1.39l-0.08,-0.93ZM35.19,550.83l0.11,-0.11l0.25,0.66l0.06,0.42l-0.02,0.03l-0.4,-0.99ZM34.15,557.75l0.07,-0.0l0.18,0.16l-0.1,-0.01l-0.15,-0.16ZM9.84,550.6l0.56,-0.73l-0.34,-1.08l0.55,-0.31l-0.19,-0.75l0.35,-0.76l-0.16,-0.44l-0.84,-0.46l0.61,-0.4l-0.14,-1.49l1.11,-1.19l1.07,-0.61l0.26,-1.37l0.58,-0.41l0.48,0.21l0.85,1.24l1.68,0.51l0.52,0.74l-0.59,1.0l-1.51,0.56l-0.15,0.93l0.45,0.24l1.2,-0.21l0.91,-0.87l1.59,-0.25l0.82,0.23l-0.08,1.47l0.46,0.65l-0.55,1.2l-0.03,0.89l-1.04,0.24l-0.77,0.6l-1.16,-0.38l-1.19,0.26l-1.88,-0.55l-0.69,0.16l-0.22,0.72l0.48,0.25l-0.34,0.68l0.37,0.25l0.64,-0.2l0.41,0.47l-0.58,0.53l0.12,0.66l1.16,-0.18l1.19,0.41l0.59,-0.22l-0.01,-0.33l0.42,0.39l1.12,-0.49l0.42,-0.55l0.03,-0.95l2.06,-1.36l0.52,-2.22l1.91,0.69l2.51,-0.26l-1.47,1.94l-2.71,1.83l-1.05,1.61l-1.12,1.05l-0.97,1.7l-0.98,2.73l-1.3,1.07l-2.45,-0.68l-1.45,0.19l-0.26,0.35l-0.76,-0.09l0.12,-0.64l-0.62,-0.26l-0.03,-1.19l-0.55,-0.7l0.58,-0.16l0.29,0.34l0.67,-0.29l0.49,1.19l0.47,-0.1l0.52,-0.81l-0.54,-1.31l0.03,-0.74l-1.03,-0.96l0.24,-0.95l-0.5,-0.14l-0.15,-0.89l-0.81,0.17l-0.01,-0.71l-0.41,-0.21l0.23,-0.49ZM9.85,555.26l-0.19,-0.06l0.1,-0.07l0.09,0.13ZM9.44,560.12l0.24,-0.21l1.31,0.75l0.85,-0.12l2.31,1.14l2.04,-0.47l1.05,0.28l-0.5,0.93l0.59,1.0l0.25,1.28l-1.54,-1.24l-1.76,-0.62l-0.57,0.44l0.37,0.62l-0.2,0.95l0.68,0.28l0.86,-0.5l1.49,1.66l-0.45,0.79l-0.76,0.28l-0.9,-0.41l-0.18,-1.12l-0.63,-0.6l-0.48,-0.02l-0.27,0.61l-0.8,0.34l0.23,0.56l0.9,0.22l-0.5,0.59l0.23,0.86l-0.5,0.27l0.18,0.46l-0.4,0.34l0.15,0.65l0.73,0.48l-0.01,0.77l-0.39,0.59l0.2,0.99l-0.33,0.71l0.48,0.81l0.85,0.61l0.26,0.91l-0.47,0.44l-0.27,-0.82l-0.63,-0.34l-0.04,-0.94l-1.42,-2.66l0.04,-1.57l-0.69,-1.7l0.25,0.6l0.93,0.52l0.5,-1.36l-0.8,-2.18l-0.42,-0.18l-0.44,1.1l-0.51,0.25l-0.27,-1.27l0.33,-0.73l-0.53,-1.08l0.47,0.02l0.37,0.75l0.75,0.24l1.15,-1.14l0.01,-0.46l-0.77,-0.42l-0.27,-0.67l-1.12,-0.88l-1.25,-0.42l0.01,-0.97ZM13.9,576.84l0.45,1.27l-0.16,1.27l0.48,0.48l-0.35,0.26l-0.21,-0.49l-0.51,0.1l0.0,-1.11l-0.43,-1.2l0.19,-0.51l0.54,-0.07ZM15.24,580.53l0.03,0.01l-0.01,0.03l-0.01,-0.04ZM15.34,580.96l0.09,0.21l-0.08,0.07l0.01,-0.07l-0.02,-0.2ZM16.25,581.78l0.28,0.15l0.16,-0.01l-0.23,0.19l-0.21,-0.33ZM15.76,580.3l0.02,-0.36l0.45,-0.11l0.18,0.59l-0.65,-0.13ZM13.22,576.78l-0.13,-0.08l0.01,-0.05l0.07,0.08l0.04,0.06ZM14.76,571.47l0.03,0.04l0.11,0.01l-0.16,0.04l0.02,-0.08ZM15.47,571.73l0.28,0.02l0.58,-0.26l-0.53,0.92l-0.33,-0.67ZM15.38,583.56l0.03,-0.12l0.17,-0.25l0.1,0.28l-0.3,0.09Z\", \"name\": \"British Columbia\"}, \"CA-SK\": {\"path\": \"M225.69,715.55l44.18,-197.52l18.32,3.88l18.79,3.56l18.86,3.14l18.53,2.67l-10.31,77.69l-4.77,62.93l-4.14,60.98l-24.87,-3.43l-25.58,-4.15l-25.48,-4.77l-23.53,-4.98Z\", \"name\": \"Saskatchewan\"}, \"CA-QC\": {\"path\": \"M567.62,485.44l0.69,-0.35l1.22,-1.38l0.77,-0.25l0.36,-0.96l0.97,-0.76l0.27,-0.74l0.58,0.53l2.0,-0.0l0.62,0.3l1.01,-0.12l0.29,-0.35l0.52,0.33l1.36,0.02l1.33,0.78l4.43,0.81l0.54,0.69l1.41,-0.28l1.21,0.56l1.62,0.15l-2.04,2.18l-0.04,0.45l0.41,0.2l0.89,-0.29l1.91,-1.82l0.65,-1.14l1.15,-0.5l1.34,0.24l0.05,0.73l0.58,0.36l0.59,-0.85l0.34,-0.05l1.02,0.44l1.5,1.4l2.15,0.56l0.33,-0.61l-1.98,-1.25l0.01,-0.69l2.64,-0.51l0.86,-0.91l0.26,-0.75l0.94,-0.12l1.32,-1.11l0.87,-2.05l1.31,-0.53l1.15,1.47l1.19,0.35l0.52,-0.22l0.64,0.65l0.96,0.14l0.29,0.88l1.68,1.33l1.17,0.26l-0.17,0.57l0.4,0.22l1.41,-0.03l0.47,-0.47l-0.15,-0.37l0.81,0.4l-0.2,0.61l0.51,0.53l0.3,1.1l-0.56,0.47l0.08,1.04l-0.66,1.38l0.44,0.57l0.83,-0.56l0.79,0.64l0.53,-0.47l-0.63,-1.88l3.32,0.52l0.44,0.74l-0.33,0.83l0.18,0.7l0.58,0.3l0.9,-0.37l0.72,0.84l-0.4,1.12l-1.28,-0.01l-0.5,0.49l-0.18,0.9l0.26,0.43l0.87,-0.75l1.25,-0.02l1.04,-0.53l0.24,-1.94l1.99,0.45l0.69,0.44l0.2,0.37l-0.4,0.55l-1.78,0.57l-0.14,0.57l0.97,0.88l-0.76,0.45l-0.18,0.55l0.32,0.31l1.45,0.09l-0.94,0.39l0.28,0.79l1.22,0.1l-0.28,0.74l1.22,0.54l-0.03,0.8l0.66,0.28l0.18,0.79l0.8,-0.09l0.33,-0.64l1.12,0.98l0.99,-0.79l0.6,0.52l1.4,-0.43l0.74,0.15l0.5,0.74l0.71,-0.18l0.81,0.24l0.43,-0.47l0.47,0.74l1.44,0.04l0.35,-0.56l0.58,0.08l0.35,-0.57l-0.15,-0.4l0.41,0.03l0.32,-0.57l0.55,0.26l0.57,-0.38l0.07,1.05l0.81,0.83l0.16,0.92l-0.39,0.69l2.73,1.17l0.45,-0.16l0.4,-0.75l0.08,-0.41l-0.34,-0.21l0.4,-0.68l0.66,0.54l0.86,-0.68l-0.68,-2.21l0.06,-0.99l0.33,-0.34l1.51,2.44l0.52,0.3l0.4,1.74l-1.41,1.11l-1.13,1.65l0.92,2.18l-1.1,0.78l-0.09,0.74l0.87,0.87l0.02,0.89l0.62,0.66l-0.12,1.26l1.77,1.39l-0.18,0.58l0.53,0.46l0.08,1.44l-0.54,0.35l-0.99,-0.08l-0.3,0.57l0.18,0.81l-4.27,0.38l-0.4,0.62l-1.76,0.56l-0.74,-0.34l-3.44,-0.33l-0.61,0.35l-0.13,0.45l5.04,1.01l3.25,-0.87l1.86,0.27l2.59,-0.97l-0.3,0.59l0.22,0.42l1.77,0.38l0.01,1.39l0.52,0.47l-0.55,0.91l0.16,0.57l1.33,0.37l-1.61,2.91l0.06,0.7l1.1,0.62l0.39,1.15l-0.82,0.74l0.18,0.82l0.46,0.28l1.17,-0.26l1.62,-1.44l0.55,0.66l0.56,-0.01l0.34,-0.36l-0.03,0.58l0.45,0.63l-0.8,-0.28l-0.46,0.51l-0.53,0.06l-0.81,1.55l0.26,1.09l0.79,0.46l-0.25,0.37l1.14,2.89l-0.58,0.4l0.05,1.35l-0.49,0.33l-0.49,-0.84l0.22,-0.95l-0.66,-1.13l-0.57,-0.43l-0.48,0.12l-0.91,-1.17l-0.58,0.12l0.06,2.25l0.87,0.28l0.21,0.84l-0.57,-0.02l-0.26,0.58l0.23,0.42l-0.29,0.25l-2.52,1.17l-0.21,0.87l0.94,-0.12l1.69,0.39l0.53,-0.37l0.36,0.88l0.63,0.06l0.18,0.98l1.09,0.56l0.4,-0.44l0.42,-1.7l0.54,-0.43l0.13,-1.06l1.01,-0.85l0.68,-1.61l0.85,-0.69l2.19,-0.57l0.33,0.32l0.95,-0.15l0.89,-0.97l1.52,0.08l1.32,0.78l0.88,0.01l0.51,0.48l0.04,1.21l0.72,0.68l0.12,1.31l0.33,0.36l0.51,-0.0l0.16,0.94l0.7,0.12l0.37,1.11l-0.21,3.72l0.23,2.19l-1.06,1.95l-1.79,0.76l-2.23,1.57l-0.7,1.09l-0.84,0.55l-1.72,2.92l0.14,0.52l0.53,-0.1l2.0,-2.81l1.3,-1.2l4.27,-2.54l0.58,-0.65l0.7,-1.85l-0.28,-1.57l0.36,-0.98l-0.29,-4.95l1.07,-0.41l0.69,0.21l0.1,1.64l1.01,1.56l-0.09,0.85l-1.33,2.38l-0.05,1.72l0.8,0.14l0.86,-1.54l0.16,-1.47l0.76,-0.94l0.25,-1.37l0.18,0.62l0.59,-0.02l0.28,0.44l-0.08,1.85l0.62,1.26l-0.06,2.52l0.55,0.49l0.46,-0.09l0.17,-0.53l-0.29,-0.92l0.35,-1.3l-0.49,-1.15l0.31,-1.98l0.61,-1.14l0.91,-0.3l0.35,-0.94l0.9,-0.54l0.29,-0.59l0.5,0.12l0.47,-0.31l0.04,-1.07l0.39,-0.47l0.2,-1.13l0.04,0.46l1.0,0.7l0.33,-0.34l0.21,-1.22l1.61,-0.49l-0.07,-0.59l-0.37,-0.26l-0.06,-2.48l0.18,-0.83l0.73,-0.52l-0.43,-1.82l0.35,-0.31l2.75,1.46l0.75,1.14l1.4,0.34l-0.27,1.87l0.65,1.73l-0.65,1.08l0.58,0.91l0.6,-0.1l0.1,-1.07l0.51,-0.52l0.2,-1.18l-0.72,-0.62l0.36,-1.47l0.51,-0.25l-0.14,-0.64l-1.71,-1.57l-0.68,-0.02l-0.34,-0.94l-0.56,-0.26l0.14,-0.8l1.69,-0.26l0.57,-0.67l-0.23,-0.75l-1.62,-0.02l0.72,-0.57l0.04,-0.9l1.36,0.75l0.56,-0.32l-0.22,-0.92l-0.88,-0.47l0.13,-0.44l0.74,0.42l1.38,0.14l0.2,-0.65l-1.0,-0.55l1.84,-0.07l0.57,-0.69l-0.61,-0.52l-0.82,0.16l-1.08,-0.38l-0.63,0.1l-0.23,0.69l-0.95,-1.14l-0.01,-0.81l0.84,0.46l0.2,-0.45l-0.24,-0.65l0.85,-0.88l-1.22,-1.3l1.63,1.03l0.55,-0.07l0.1,-0.59l-1.2,-1.2l-0.05,-0.28l0.48,-0.3l-0.16,-0.44l-0.91,-0.42l0.54,-0.42l1.03,-0.08l2.03,1.08l1.18,-0.2l-0.25,-0.68l-0.92,-0.24l-1.33,-0.96l-2.27,-0.15l-2.07,-3.34l1.18,-2.17l2.75,0.77l0.74,-0.15l0.3,-0.5l-0.46,-0.43l-0.62,0.05l-1.47,-0.61l0.56,-0.4l-0.37,-1.02l0.63,-0.24l0.02,-0.27l-0.36,-0.54l0.15,-0.35l-0.71,-0.61l0.57,-0.58l0.06,-0.53l-0.34,-0.44l0.35,-0.19l0.07,-1.44l0.58,-0.41l0.89,0.4l0.89,-0.34l0.39,0.53l-1.02,0.44l0.27,0.84l-0.4,0.38l-0.84,-0.14l-0.37,0.57l1.18,1.74l1.8,0.19l-0.78,0.63l0.2,0.82l-0.36,0.51l0.87,2.23l-0.75,0.93l0.47,2.03l2.65,1.87l0.66,-0.24l1.57,-1.91l0.5,0.0l-1.08,1.6l0.23,0.51l-0.15,0.85l0.38,0.4l-0.08,0.78l0.52,0.83l0.04,1.04l1.29,1.97l1.23,0.09l0.68,0.63l-0.81,0.42l-2.04,-0.22l-0.84,-0.51l-0.77,0.2l-0.59,0.81l-0.17,0.88l0.35,0.78l-0.07,0.91l1.07,0.25l0.82,-0.83l1.66,0.6l2.33,-0.62l0.77,1.65l1.34,0.35l0.65,-0.29l0.91,-1.59l1.27,-0.51l0.48,-1.09l1.59,0.27l1.03,0.92l-0.89,0.81l-2.37,0.8l-1.68,1.44l0.04,1.65l0.55,0.89l0.98,0.39l1.01,-0.96l0.71,0.98l-0.14,0.45l-1.12,0.52l-0.29,1.21l-0.96,0.91l0.08,2.13l-1.14,0.87l-0.33,0.66l0.25,2.27l0.5,0.37l1.8,-0.09l0.3,1.0l2.7,3.39l0.56,-0.0l0.58,-0.81l0.57,0.97l1.02,0.63l0.76,-0.34l0.6,0.55l0.41,-0.14l-0.62,0.77l-0.13,0.97l0.59,1.97l0.91,1.19l-0.87,1.11l0.05,1.7l0.3,1.0l0.42,0.3l0.5,-0.32l0.29,0.98l-0.57,1.26l0.37,1.37l-0.09,1.2l0.45,0.67l-0.83,0.91l0.33,1.16l-0.69,0.61l-0.13,1.26l0.51,0.91l2.2,1.68l0.45,1.27l0.6,0.23l-2.46,0.56l-0.19,0.75l0.85,0.7l0.19,1.47l0.64,0.58l0.6,0.17l0.75,-0.34l0.9,0.25l-0.99,1.19l0.5,1.88l0.58,0.09l0.63,-0.75l1.2,0.69l1.14,-0.35l1.0,0.23l-2.1,2.25l1.47,2.03l0.77,0.2l0.02,2.05l0.99,0.42l0.36,1.7l-0.62,1.08l0.27,0.57l0.66,0.38l1.05,-0.03l2.92,-0.53l-2.12,1.18l0.07,0.69l-0.64,0.99l0.65,0.88l1.04,0.04l-0.05,2.55l0.73,1.52l0.13,1.13l-1.66,-0.28l-0.67,0.59l0.03,1.27l0.42,0.78l-0.49,1.16l2.22,1.59l-0.85,0.47l-0.3,0.56l-1.32,0.31l-0.54,-0.17l-1.23,-1.25l-2.72,-0.77l-1.01,0.33l-0.68,1.32l-1.58,0.36l-0.16,-1.07l-0.49,-0.52l-0.72,-0.12l-1.42,-1.13l-2.0,-0.07l-0.79,0.82l-0.24,1.58l-1.25,0.77l-0.89,-0.08l-0.42,0.43l0.62,1.64l-1.32,0.02l-0.53,0.59l-1.52,-1.14l-0.99,-1.61l-1.43,-0.05l-0.64,0.43l-0.99,-0.62l-1.36,-0.25l-4.27,-3.5l-0.61,-0.23l-0.64,0.17l-0.47,-0.73l-1.18,-0.43l-0.73,0.29l-0.13,0.78l1.96,1.57l-0.33,0.61l0.16,1.5l1.48,1.67l-0.4,0.37l0.0,0.74l1.8,2.02l-0.78,0.36l-0.09,0.75l-2.18,-0.7l-1.04,-1.33l-3.24,-1.24l0.21,-0.69l-0.37,-0.47l-1.37,-0.14l-0.77,0.94l0.53,1.47l2.45,2.55l2.18,1.29l0.17,0.64l-0.33,1.07l-0.93,1.21l0.43,1.21l-2.53,-1.23l-0.58,0.72l0.43,1.34l-1.2,0.47l-0.92,1.29l0.35,1.81l0.81,0.68l0.94,1.62l-1.07,1.38l0.14,2.16l0.93,0.8l1.58,0.7l0.42,0.94l0.89,0.37l-0.55,0.67l0.11,0.46l2.28,1.12l0.45,0.99l1.09,1.0l3.48,0.25l1.45,1.05l-0.51,0.43l-0.26,0.85l0.81,1.19l0.55,3.0l-0.44,-0.3l-0.56,0.14l-0.51,-0.32l-1.25,-0.05l-0.57,0.34l-0.85,1.35l1.34,3.66l0.69,0.73l1.96,0.6l0.65,-1.08l0.53,1.3l1.29,0.57l1.21,1.09l0.65,-0.53l0.66,0.04l0.3,-0.4l-0.32,-1.38l0.47,-0.18l0.52,-0.84l-0.32,-2.27l1.05,-0.72l0.36,-1.36l0.41,0.21l1.24,1.77l-0.61,-0.09l-0.45,0.41l0.02,0.51l1.73,2.71l-0.57,0.1l-0.27,0.72l1.77,4.37l-0.82,0.29l-0.25,1.19l2.25,3.25l1.07,-0.02l0.54,-0.72l-0.7,-1.91l0.45,0.59l1.47,0.59l0.23,1.26l1.38,0.53l1.88,-1.27l1.03,0.07l0.4,-0.31l-0.01,0.83l0.47,0.85l0.72,-0.11l0.22,-0.71l0.47,-0.13l0.38,-0.63l0.96,0.97l0.54,0.12l0.06,1.28l0.97,1.21l0.43,0.14l0.35,-0.88l0.95,0.41l0.4,0.8l1.35,0.12l0.48,-0.26l0.86,0.35l0.68,-0.28l0.41,-0.93l0.77,-0.07l0.95,0.4l1.82,1.61l1.03,0.12l1.75,-2.13l0.33,-1.42l-0.4,-1.03l-0.64,-0.53l-0.98,-2.33l0.8,0.1l0.37,-0.37l-0.72,-2.43l0.81,-0.28l0.1,-0.35l-1.38,-2.34l0.39,-1.72l-0.28,-1.5l1.51,1.38l1.13,0.13l0.97,-0.31l0.05,0.48l1.12,0.98l1.44,2.53l-1.28,-0.17l-0.48,0.73l0.86,0.91l0.81,0.19l35.0,-11.1l35.06,-12.54l3.42,9.02l-0.66,0.13l-0.44,-0.94l-0.67,-0.15l-1.97,1.23l-0.78,1.05l-0.46,-0.27l-0.62,0.77l-0.72,-0.49l-2.68,4.19l-1.64,1.25l-0.33,-0.76l-0.67,0.01l-0.29,0.38l0.18,0.75l-1.43,-0.17l-1.06,1.39l-0.66,-0.03l-0.6,1.15l1.14,1.19l-3.26,3.83l0.13,0.45l0.55,0.21l0.66,1.48l0.15,1.62l-0.21,0.42l-0.41,-1.85l-0.81,-0.1l-0.06,1.92l-0.36,0.95l-0.77,0.21l0.1,0.68l-0.54,1.09l-0.77,0.56l-0.1,1.51l0.82,0.48l-0.9,0.18l-0.48,1.41l-2.17,1.52l-0.5,1.77l0.65,0.77l-1.2,1.54l-0.92,0.48l-0.19,-0.56l-0.52,-0.21l-0.83,0.61l-0.45,-0.29l-0.34,0.3l0.03,0.63l-2.0,0.63l-0.71,0.9l-0.41,-0.49l-0.86,0.79l-1.54,-0.22l-0.9,1.3l-1.2,0.11l-1.38,1.11l-1.59,0.4l-2.2,1.67l-0.63,-0.58l-1.77,1.59l-0.17,-0.43l-1.33,-0.85l-3.94,1.02l-1.36,-0.41l-0.92,0.13l-0.55,0.57l-2.59,0.63l-0.63,-0.4l-2.2,1.18l-1.14,-0.17l-0.36,0.63l-1.34,0.39l-0.01,0.84l-1.47,0.35l-0.61,0.76l-0.93,-0.54l-1.25,0.49l-1.4,-0.41l-1.32,0.12l-2.04,0.78l-1.49,1.15l-2.1,0.27l-1.44,-0.27l-1.88,1.28l-2.61,0.93l-0.5,-0.13l-3.04,0.83l-1.08,-0.29l-4.94,2.56l-1.0,0.22l-1.65,-0.17l-0.78,1.42l-0.61,-0.13l-0.27,0.96l-1.18,-0.13l-1.06,0.6l-0.93,-0.98l-0.82,0.24l-0.65,1.05l0.01,1.01l-0.52,-0.18l-0.47,0.48l0.13,0.41l-0.84,2.13l-1.39,0.87l-0.47,0.69l-0.22,2.67l-0.62,0.01l-0.53,0.64l-0.24,1.65l0.46,1.24l-0.35,2.17l0.49,1.83l-0.9,2.3l-3.83,1.33l-0.72,0.8l-2.58,0.41l-0.47,0.63l-0.65,0.25l-0.13,1.04l-1.18,0.45l-0.43,0.49l0.89,0.68l0.68,-0.07l-0.1,0.23l-1.15,0.54l-0.93,-1.34l-0.63,-0.14l-0.38,0.24l0.64,1.28l-1.75,1.61l-0.34,0.95l0.1,0.8l-0.4,0.33l-0.04,0.54l-0.9,0.37l-1.58,2.08l-0.07,0.56l-0.93,0.62l-0.27,3.11l-1.0,0.53l-0.2,2.46l-1.09,3.18l-1.31,1.32l-0.7,1.78l-1.29,0.07l-2.38,-1.59l-1.96,0.45l-3.06,-1.17l-0.79,0.36l-2.96,0.12l-0.98,-0.53l-2.8,0.0l-1.08,0.61l-0.17,0.52l0.51,0.2l0.91,-0.32l1.95,0.32l-0.74,0.24l-0.2,0.65l0.77,0.75l1.42,-0.87l2.94,-0.67l1.57,0.19l2.55,0.95l0.86,-0.0l0.74,-0.43l0.87,0.13l1.43,1.22l1.11,0.06l-0.84,6.13l-0.83,1.47l-1.18,1.08l-0.46,1.37l-0.01,1.67l-2.8,1.65l-0.56,3.67l-0.87,2.54l-2.49,2.27l-2.19,3.43l-0.38,1.32l-0.97,1.01l-1.31,0.36l-2.8,1.73l-2.2,0.19l-1.25,1.7l-2.41,1.49l-0.16,1.61l-2.13,1.58l-1.37,2.11l-2.7,1.13l-1.71,1.34l-0.11,1.93l-1.55,0.98l-0.71,3.28l-0.88,1.17l-0.56,1.5l-0.69,0.71l-2.07,0.72l-0.98,0.8l-1.49,2.83l-1.29,1.09l-1.0,0.07l-0.96,-0.57l-1.35,0.32l-1.09,-0.65l-3.72,-0.87l-1.32,0.65l-2.06,0.27l-1.33,0.98l-2.82,0.84l-3.47,2.28l-1.13,0.4l-0.89,1.45l-0.7,0.24l-2.82,-1.86l-1.12,-0.09l-1.21,0.37l-0.91,1.01l-1.48,-0.68l-2.37,-0.38l-1.36,-2.43l-0.7,-0.56l-0.56,-1.82l-0.58,-0.48l-0.97,-0.11l-0.77,0.39l-0.17,0.53l0.27,0.96l-0.43,0.18l-2.91,-1.28l-0.7,-0.73l-0.29,-1.03l-1.0,-0.93l-4.14,-1.81l-3.41,-0.5l-1.54,0.14l-0.92,-0.32l-2.43,0.26l-0.44,-0.35l-4.48,-0.36l-0.53,-0.87l-1.89,-1.07l-0.93,-0.91l-0.79,-1.71l-1.17,-1.1l-1.06,-2.0l-1.81,-1.73l-1.98,-2.57l-0.54,-3.25l-1.96,-2.87l0.5,-2.68l-6.88,-58.56l1.67,2.7l0.76,-0.3l-0.21,-1.21l-2.42,-2.91l-1.05,-9.24l-0.4,-0.97l1.8,-2.07l0.51,0.3l-0.23,0.86l0.18,0.89l0.51,0.29l1.45,-0.36l1.17,0.94l1.18,3.03l-0.22,0.62l0.21,0.67l0.85,0.87l1.17,0.02l-0.03,-0.46l-0.89,-0.97l-0.02,-0.97l0.72,-1.43l-0.66,-0.48l0.75,-1.26l0.88,-0.26l0.24,-0.67l-0.67,-0.43l-0.75,0.08l0.06,-1.28l-0.27,-0.56l-1.49,-0.66l-0.25,-0.73l-0.98,-0.95l0.9,-0.11l1.02,-1.09l0.05,-0.63l-0.75,-1.16l1.4,-0.7l0.51,-1.39l0.54,-0.46l-0.09,-0.35l0.52,-0.43l0.47,-1.86l-0.26,-0.68l1.06,0.09l0.47,-0.44l-0.67,-0.78l-0.95,-0.09l0.35,-0.97l-0.4,-0.71l-0.02,-1.5l-0.67,-1.13l-0.57,-0.36l-1.4,-0.03l0.3,-0.73l-0.41,-0.8l-0.52,-0.15l-0.21,-1.16l-0.4,-0.45l0.77,-0.58l-0.29,-0.88l0.45,-0.68l-0.35,-0.62l-1.54,0.32l-0.13,-0.75l0.56,-0.12l0.27,-0.63l-1.0,-0.9l-0.91,0.22l0.28,-0.57l-0.53,-0.64l0.46,-2.68l-0.15,-0.59l-0.61,-0.4l-0.31,-2.06l-0.59,-0.93l-0.48,-0.2l0.67,-0.5l-0.08,-0.59l0.39,-0.84l-1.06,-1.01l-0.2,-1.12l-0.42,-0.26l-0.19,-0.72l0.14,-1.17l1.02,0.28l0.35,-0.65l-0.54,-0.57l-1.21,-0.13l0.54,-0.95l-0.65,-1.0l0.45,0.02l0.34,-0.63l-1.92,-1.3l0.6,-1.33l-0.13,-0.66l-0.87,-0.07l-1.12,0.54l-0.95,-0.41l0.44,-0.49l-0.07,-0.54l-1.53,-0.25l0.1,-0.3l-0.97,-1.33l0.4,-0.7l-0.53,-0.38l-0.9,-1.95l0.19,-0.91l-1.37,-0.81l-0.23,-0.46l1.54,-1.19l5.33,-2.46l0.81,-1.11l4.85,-2.88l2.24,-2.4l3.59,-2.98l0.9,-1.87l4.86,-6.16l0.42,-1.3l-0.39,-0.24l2.32,-4.01l0.23,-1.05l1.12,-1.18l0.75,-4.99l-0.05,-2.28l-0.87,-6.87l-1.23,-4.49l0.01,-1.63l-2.06,-5.25l-2.04,-3.63l-0.28,-1.28l-4.3,-5.9l-1.39,-1.17l-0.78,-0.16l-1.14,-0.88l-0.4,-0.99l-1.54,-1.0l-1.03,-0.16l-3.19,-1.36l-0.2,-0.78l-2.67,-1.45l-1.67,-1.88l-1.36,0.49l-0.0,-0.63l0.73,-0.62l0.04,-0.39l-0.65,-0.92l0.23,-0.9l-0.81,-1.89l0.57,0.26l0.39,-0.48l0.6,0.38l0.49,-0.32l0.62,-1.55l-0.37,-0.94l0.62,-0.27l0.02,-0.5l0.62,-0.7l-0.09,-0.62l0.36,-0.61l-0.21,-0.71l2.29,-1.62l0.54,-1.13l-0.19,-0.69l0.75,-0.42l-0.01,-0.71l-1.56,-0.39l-0.32,-0.57l1.18,-1.28l-0.12,-1.72l-0.72,-0.58l0.21,-0.23l0.57,0.33l0.79,-0.25l0.67,0.46l0.31,0.97l0.49,0.39l1.39,0.04l0.36,-0.45l-0.36,-0.46l-0.94,-0.2l-0.33,-1.13l-0.7,-0.94l0.5,-0.95l1.08,-0.14l0.32,-0.38l-1.09,-2.19l0.03,-0.71l1.09,-1.12l-0.29,-0.33l0.53,-0.69l-0.47,-0.56l-0.98,0.55l-0.62,-0.45l-0.68,0.43l-1.06,-0.02l-0.01,-0.6l1.22,-0.14l0.38,-0.57l-1.31,-0.85l0.4,-0.29l-0.01,-0.58l-0.77,-0.7l-0.01,-0.46l-0.57,-0.12l-0.65,-1.3l-0.95,-0.49l0.22,-0.81l0.9,-0.89l0.26,-0.75l0.98,-0.13l0.22,-0.69l-1.49,-0.49l-1.22,0.52l-1.2,-1.06l1.53,-2.14l0.06,-0.6l-0.31,-0.29l0.94,-0.68l0.15,-0.5l-0.49,-0.33l-0.46,0.11l-2.27,1.59l-0.48,-0.97l-0.38,-0.1l-2.14,0.94l0.57,-1.71l1.68,-2.74l0.64,-0.51l-0.06,-1.78l0.69,-0.82l-1.13,-4.31l0.44,-0.09l0.26,-0.6l1.05,-0.69l-0.19,-0.58l-0.8,-0.32l-0.14,-0.28l1.27,0.24l0.34,-0.62l-1.23,-1.2l-1.15,-0.05l-0.92,-1.42l-0.4,-0.2l-1.2,0.32l-0.39,-0.41l-1.11,-2.83l-0.33,-1.76l-0.47,-0.63l-0.63,-2.88l-0.22,-2.36l0.82,-1.83ZM578.66,653.17l-0.12,0.05l-0.03,-0.04l0.16,-0.0ZM653.23,787.08l0.57,0.5l3.84,0.59l0.65,0.96l-1.84,0.63l-0.63,1.13l-1.28,0.94l-1.51,-1.14l0.21,-3.62ZM655.71,541.57l0.05,-0.09l0.04,0.01l-0.05,0.06l-0.03,0.02ZM627.44,494.8l0.16,-0.06l-0.08,0.05l-0.09,0.01ZM639.87,499.16l-0.07,-0.04l0.04,-0.08l0.0,0.0l0.03,0.12ZM657.55,533.31l0.42,-0.03l0.38,-0.21l-0.29,0.53l-0.52,-0.29ZM677.38,543.7l-0.22,-0.37l-0.25,-1.11l0.12,-0.83l0.33,0.21l0.01,2.1ZM692.95,521.88l-0.28,-0.07l-0.05,-0.23l0.17,0.12l0.17,0.18ZM695.38,499.78l-0.07,-0.73l1.02,0.21l-0.33,0.12l-0.61,0.4ZM696.49,499.23l0.14,-0.3l0.34,0.14l-0.21,0.11l-0.26,0.05ZM721.26,553.36l-0.0,-0.22l-0.06,-0.42l0.12,0.17l-0.05,0.47ZM742.73,637.67l-0.85,-1.13l0.13,-0.56l-0.38,-1.24l0.31,-0.77l3.61,-2.12l0.56,-0.95l0.65,0.74l1.75,0.43l0.64,0.45l-4.79,2.12l-1.11,1.37l-0.52,1.66ZM572.37,551.69l-0.04,-0.14l0.05,-0.08l-0.01,0.22ZM809.57,639.69l0.11,-0.18l0.38,-0.14l-0.2,0.29l-0.28,0.03ZM794.09,718.58l-0.04,-0.31l0.4,-0.4l-0.02,0.55l-0.34,0.16ZM794.11,720.88l0.12,0.06l0.23,0.03l-0.4,0.14l0.05,-0.23ZM752.09,684.41l2.22,-1.3l0.33,-0.48l0.8,-0.2l2.39,0.31l9.66,-0.79l1.99,0.19l0.97,0.49l4.51,0.38l2.02,1.34l1.7,0.1l1.03,0.67l2.25,-0.21l0.97,0.38l0.65,-0.24l3.15,2.43l-0.18,0.63l-0.76,0.74l-0.8,0.01l-3.99,1.56l-3.11,-0.31l-2.11,0.44l-4.99,-0.03l-2.56,-0.78l-3.42,-0.22l-1.45,-1.91l-1.85,-1.13l-2.25,-0.76l-4.73,-0.57l-1.03,-0.61l-0.56,0.46l-0.85,-0.6ZM652.77,796.2l1.34,-1.08l0.39,-1.15l0.65,-0.66l1.25,-0.55l0.72,-0.75l1.87,-0.62l1.13,-1.84l1.23,-1.03l0.36,-0.7l0.42,-0.27l1.68,-0.02l0.58,-0.4l0.23,-0.76l-0.52,-1.46l0.53,-1.33l-0.16,-1.71l2.17,-3.82l0.22,-2.72l1.14,-0.54l1.06,-1.39l1.11,-0.26l1.41,-0.99l0.62,-0.82l-0.01,-0.71l1.62,-2.24l2.48,-1.6l0.65,-2.03l1.89,-1.12l1.43,-2.03l1.02,0.35l0.9,-0.13l4.53,-3.0l1.05,-1.01l0.42,-1.1l1.5,-0.46l1.15,-1.15l0.63,-0.03l0.89,-0.57l0.51,-0.89l2.15,-1.52l1.37,-2.26l1.5,-3.92l1.24,-1.36l0.34,-2.36l1.01,-1.11l2.88,-5.88l-0.06,-1.18l0.74,-1.92l1.24,-0.99l2.35,-4.3l2.12,-2.93l1.07,-0.44l1.94,-2.19l0.49,-1.23l1.02,-0.65l1.4,-1.96l0.8,-0.4l0.61,-0.88l1.14,-0.46l4.04,-3.95l1.4,-0.62l7.96,-6.62l4.17,-2.69l3.7,-1.3l3.37,-1.7l6.91,-1.06l1.71,0.07l1.4,0.5l2.0,0.2l3.47,1.52l1.16,0.82l0.25,0.86l-3.4,-0.34l-0.76,0.51l0.72,0.48l-0.21,0.46l0.39,0.43l1.21,-0.43l0.13,0.75l1.3,0.11l1.86,1.14l-0.66,0.55l-0.03,1.06l1.11,0.79l-0.8,0.71l-0.09,0.96l-2.1,1.13l-1.87,1.54l0.22,0.72l-0.3,1.78l-1.19,0.78l-0.79,0.12l-0.01,1.14l-2.76,2.81l-1.46,0.58l-1.02,-0.61l-3.52,-0.21l-1.24,-0.56l-0.26,-0.76l-0.44,-0.22l-0.88,1.05l-0.73,1.72l-2.23,0.29l-0.47,0.51l-2.04,0.13l-0.59,0.63l-0.03,0.61l-3.97,2.56l-0.27,0.53l0.12,0.86l-1.26,-0.06l-1.13,1.05l-1.76,0.33l-0.23,0.65l-2.65,-0.67l-0.29,-0.8l-0.46,-0.22l-5.82,1.45l-0.29,0.48l0.2,0.82l-2.69,0.66l-0.29,0.48l1.44,6.32l-1.36,2.4l-2.11,1.81l-2.77,1.73l-0.24,-1.66l-0.38,-0.42l-2.14,-0.15l-0.61,0.32l-6.09,15.23l0.29,5.14l-1.15,1.5l-0.55,2.85l0.72,1.19l-0.55,0.98l0.29,1.98l0.87,0.77l-1.38,2.38l0.31,1.46l-1.62,1.31l-1.12,2.01l-0.21,1.82l1.32,1.03l-1.1,-0.43l-0.86,0.3l-0.28,0.85l0.29,1.45l-0.3,0.49l-0.57,-0.85l-0.81,-0.24l-1.42,1.3l-0.39,0.92l-1.68,-0.48l-0.78,0.32l-1.19,1.38l0.52,0.71l-0.6,3.08l-37.01,7.26ZM688.69,755.58l1.98,-2.71l0.28,-0.13l-0.38,1.07l-1.88,1.77ZM678.73,541.82l0.47,0.85l0.01,0.82l-0.46,-0.42l-0.01,-1.24ZM659.52,786.99l0.49,-0.72l1.79,-0.99l0.73,-1.75l0.81,-0.99l-0.31,2.22l0.19,1.04l-0.4,0.6l-2.32,-0.04l-0.98,0.62ZM662.23,534.23l0.01,-0.03l0.04,-0.02l-0.01,0.02l-0.04,0.03ZM659.87,785.06l1.03,-1.6l0.72,-0.51l-0.63,1.6l-1.12,0.51ZM659.17,532.29l1.64,-0.18l0.38,0.44l-1.32,2.15l0.08,-1.38l-0.78,-1.02ZM657.0,790.9l0.16,-0.25l0.88,-0.1l-0.46,0.23l-0.58,0.13Z\", \"name\": \"Qu\\u00e9bec\"}, \"CA-PE\": {\"path\": \"M771.47,732.39l0.78,1.7l-0.78,1.88l0.13,0.82l0.7,0.47l0.77,-0.11l1.39,1.0l0.16,0.9l0.72,0.15l-0.07,0.8l-0.55,0.52l0.16,0.77l0.73,-0.04l0.43,-0.45l0.61,0.64l1.57,-0.16l0.33,-0.53l-0.67,-1.6l0.46,-0.19l1.51,0.13l0.16,0.47l1.06,0.44l0.4,-0.34l0.06,-0.62l0.61,-0.01l0.57,0.69l1.37,0.46l0.37,-0.51l3.75,-1.24l0.36,0.19l0.78,-0.8l2.11,-0.31l0.32,-0.51l-0.27,-0.27l0.62,-0.28l3.82,-1.4l1.87,-0.25l-1.8,2.01l-0.64,-0.34l-0.48,0.1l-0.02,0.49l-0.53,0.01l-0.31,0.51l0.32,0.48l-0.52,0.2l0.22,0.56l-1.05,0.36l0.24,0.7l0.64,0.06l-1.37,0.0l-0.4,0.32l-0.04,0.89l0.32,0.64l0.6,-0.02l0.16,0.53l0.44,0.19l0.71,-0.13l0.01,0.35l-0.58,0.3l-0.49,0.84l1.06,0.39l-2.58,1.13l-0.78,0.02l-0.99,-0.6l0.09,-0.49l-0.46,-0.25l0.36,-1.16l-0.25,-0.3l-0.71,-0.03l-0.92,-0.59l-0.52,0.49l-0.71,-0.1l1.06,-1.86l-0.51,-0.53l-0.94,0.65l-0.69,1.16l-1.06,0.01l0.29,0.75l-0.86,1.0l0.76,0.51l-2.98,-0.56l-1.4,0.5l-0.82,-0.15l-0.7,-0.68l-0.92,-0.25l0.82,-0.41l-0.92,-1.1l-1.18,0.33l-1.26,-0.1l-0.64,0.6l-1.36,0.25l0.2,-0.26l-0.39,-1.49l0.35,-0.94l-0.78,-1.42l-0.79,0.92l-1.22,-0.25l-1.58,0.61l-0.34,-0.51l0.16,-1.21l0.8,-1.45l0.1,-1.5l1.48,-2.6Z\", \"name\": \"Prince Edward Island\"}, \"CA-MB\": {\"path\": \"M325.95,732.99l4.14,-61.02l4.77,-62.91l10.31,-77.66l33.82,3.81l33.89,2.47l0.12,3.64l-0.6,2.66l0.36,1.51l-0.19,0.95l0.53,1.44l-0.02,2.2l-0.6,0.92l-0.31,3.26l-1.34,-0.06l-0.7,0.81l0.06,0.47l1.76,-0.06l0.29,0.93l0.76,0.46l0.02,0.76l-0.66,1.78l0.17,0.48l1.42,-0.82l0.96,1.03l0.53,2.0l0.68,0.28l1.11,-0.56l0.27,0.59l-0.57,0.66l-0.54,1.46l0.08,2.65l-0.51,0.99l-0.4,3.24l0.38,0.24l0.36,-0.27l1.44,-3.28l0.06,-3.8l0.85,-1.47l0.24,-1.36l2.39,0.3l1.61,-0.55l1.33,0.57l0.49,-0.15l0.27,1.01l0.73,0.31l1.0,-1.02l0.84,-0.08l0.28,0.31l0.16,4.18l1.69,5.63l0.69,1.0l0.49,1.81l0.25,4.64l0.43,0.18l1.03,2.86l0.47,2.27l0.56,0.64l0.43,1.27l0.27,1.71l-0.38,2.25l-1.47,3.14l-1.12,1.66l-1.62,0.59l-0.12,0.73l0.53,0.19l1.46,-0.36l2.43,-1.98l1.57,-0.33l-1.98,1.87l0.57,0.37l1.28,-0.39l1.33,-1.17l2.64,-0.65l9.39,-3.63l4.27,0.65l1.73,0.78l0.4,0.66l3.05,1.73l1.07,1.04l5.02,1.58l0.98,-0.09l3.56,1.54l-49.25,55.9l-17.57,16.1l-4.09,69.07l-36.0,-2.67l-36.08,-3.9Z\", \"name\": \"Manitoba\"}, \"CA-YT\": {\"path\": \"M2.99,403.6l-2.51,-3.38l99.63,-158.54l0.21,0.56l0.59,0.12l2.17,2.22l1.13,0.76l0.8,-0.0l1.33,0.76l0.84,1.67l1.71,1.75l0.18,0.8l0.9,0.66l-0.07,2.09l0.76,2.03l-0.1,2.95l1.12,0.86l0.58,-0.27l-0.01,1.69l0.41,1.39l3.81,6.94l1.36,0.79l1.09,2.36l0.71,0.44l0.6,-0.15l0.59,0.28l-11.85,21.13l-0.58,1.5l0.84,1.37l-0.55,2.17l-1.23,1.62l0.21,0.92l-0.57,1.44l-0.9,1.03l-1.33,0.65l-0.13,0.76l-0.92,1.4l-0.22,1.31l0.22,0.46l14.41,7.82l-0.45,0.78l0.79,1.4l0.09,2.32l-1.18,1.06l0.08,1.17l-0.46,0.61l0.47,1.99l-0.93,0.4l-0.31,1.21l-0.91,0.0l-1.74,2.16l0.11,0.88l1.21,0.53l-0.01,0.56l-0.91,1.75l-0.98,0.23l-0.87,0.83l-0.04,0.65l0.36,0.38l-0.74,1.47l0.3,0.57l1.49,1.0l0.94,-0.39l1.38,-0.03l1.52,0.54l-1.27,1.1l-0.08,0.74l0.43,0.46l1.31,0.21l0.7,-0.73l1.51,-0.49l0.27,1.26l1.01,0.21l-0.11,0.35l-2.02,0.3l-0.77,0.87l0.78,2.27l-0.08,3.66l-1.05,0.38l-1.32,1.63l-2.41,0.94l-0.74,0.99l-0.74,-0.1l-0.75,0.49l-0.62,-0.17l-0.32,0.4l0.05,0.31l-0.45,0.35l0.12,0.71l0.48,0.56l1.11,-0.05l-0.7,1.31l0.47,0.8l0.7,0.35l-0.12,0.55l-1.75,0.48l-0.7,1.7l-1.2,0.2l-0.48,0.64l0.08,1.28l0.92,0.26l0.9,0.76l0.63,1.68l0.7,0.59l-0.01,2.15l0.36,1.15l0.86,0.91l-1.67,1.12l-0.58,0.81l0.17,0.6l1.11,0.22l0.54,0.79l1.97,-0.15l0.59,-0.58l1.23,1.28l0.19,2.0l-0.66,0.42l-0.05,0.59l0.42,0.43l-0.02,1.43l-0.84,0.83l0.15,1.37l-0.3,0.52l0.24,0.53l0.45,0.07l-0.34,1.28l0.97,1.72l0.43,0.17l0.51,2.07l0.96,1.36l0.59,0.27l-1.75,0.01l-0.68,0.79l0.29,1.13l1.16,0.11l-0.17,1.18l0.85,0.52l-0.24,0.43l0.35,0.78l-0.17,1.41l-0.92,0.4l-0.57,1.09l-2.07,0.18l-0.81,0.97l0.09,0.6l0.72,0.23l0.01,1.12l0.49,0.51l-0.28,2.33l0.67,0.92l0.88,0.18l-2.93,2.76l0.2,2.37l-0.35,1.22l0.54,0.92l-0.16,0.9l-0.8,0.25l-0.14,0.66l0.35,0.36l0.86,-0.02l1.19,2.39l-0.76,-0.12l-0.79,0.74l0.13,0.99l-1.0,0.81l-0.09,2.31l-0.77,0.19l-0.34,0.6l1.1,1.56l1.26,0.18l0.72,0.74l-0.12,0.81l0.63,0.7l0.68,-0.03l0.86,-0.64l0.77,0.31l0.61,1.96l-0.31,0.78l0.52,1.18l-0.24,1.87l0.43,0.56l0.66,0.07l0.03,1.48l-0.41,1.6l0.51,0.73l0.33,1.51l0.7,0.77l0.06,0.96l0.76,1.13l1.44,0.78l0.74,0.03l0.74,1.3l-0.3,1.16l0.27,0.71l-0.88,3.32l-0.53,1.02l-0.84,0.25l-0.34,0.51l0.21,1.0l1.01,0.01l-0.47,1.93l-0.85,1.61l0.11,0.5l-0.38,0.94l0.32,0.94l0.58,0.12l0.32,-0.28l0.2,0.69l0.55,0.36l1.68,-0.65l0.57,0.95l1.3,0.52l1.0,-0.29l0.28,-0.9l0.4,0.12l-0.02,1.03l1.01,0.6l1.48,-1.19l0.97,1.64l1.38,0.82l1.51,1.46l2.18,-0.54l2.61,0.89l0.53,-0.31l0.8,-1.34l1.56,0.69l-0.24,3.01l-1.54,0.79l-0.48,0.84l0.61,2.61l-0.27,1.75l1.61,0.99l-0.73,2.35l0.23,4.91l-0.86,1.08l-31.4,-13.07l-24.81,-11.37l-28.47,-14.24l-20.01,-10.81l-23.54,-13.6l-0.23,-1.48l3.03,-3.02l0.42,-0.84l-0.17,-0.52l-5.13,-2.69l-3.74,0.81l-2.48,-3.89l-0.63,-0.21l-1.12,0.73ZM110.73,248.92l1.12,-0.26l0.66,1.18l-0.77,-0.34l-0.9,0.49l-0.12,-1.07Z\", \"name\": \"Yukon\"}, \"CA-NB\": {\"path\": \"M711.48,743.21l4.88,-3.44l1.67,-2.57l0.18,-1.28l-1.33,-5.56l2.7,-0.66l0.29,-0.48l-0.2,-0.82l5.1,-1.27l0.53,0.94l2.39,0.41l0.8,0.58l0.47,-0.21l0.15,-0.93l1.52,-0.21l1.16,-1.07l1.52,0.15l0.31,-0.53l-0.28,-0.79l0.29,-0.55l1.78,-0.33l3.5,-2.52l0.93,0.83l6.82,0.46l2.26,2.96l-0.07,0.63l0.62,0.47l0.61,-0.23l0.36,-0.92l1.13,-0.52l0.93,-1.68l1.46,-1.45l1.26,-0.71l-0.15,0.55l0.56,0.45l2.56,-1.38l0.18,0.13l-0.47,0.17l-0.22,0.6l0.36,0.29l0.68,-0.06l0.18,0.35l-0.05,1.32l-0.62,1.42l0.01,0.67l0.32,0.28l-0.22,1.07l0.35,0.36l0.21,-0.13l-0.4,1.59l0.21,0.82l-0.7,0.42l-0.69,1.63l-2.18,2.49l-0.16,0.57l0.45,0.29l1.52,-0.31l0.68,0.45l1.67,-1.33l0.89,0.36l0.53,-0.7l0.76,-0.22l0.54,1.22l-0.66,1.4l0.02,0.78l0.73,1.41l0.99,0.87l-0.1,1.13l0.5,0.3l0.38,-0.48l1.0,0.13l0.34,1.71l0.66,0.61l-0.24,0.5l0.52,0.57l0.52,-0.05l0.45,0.39l0.13,0.89l-0.66,0.54l-0.06,0.5l0.85,0.13l1.11,-0.59l0.23,1.66l0.68,0.13l3.34,-1.09l0.8,0.2l0.6,0.61l2.16,-0.91l2.12,0.21l-0.9,0.93l-2.04,0.58l-0.16,1.18l0.45,0.3l-0.94,0.55l-0.72,2.11l-0.62,-0.3l-0.6,0.17l-0.53,2.15l-1.32,-1.94l-0.41,0.29l-1.5,-1.18l-0.75,-1.2l-0.75,-0.36l-0.5,0.13l0.0,0.7l0.78,0.43l0.31,0.82l2.11,1.76l-1.03,4.22l-0.55,-0.06l-1.15,0.56l-0.78,1.52l-3.32,2.75l-2.08,2.39l-0.16,0.67l-1.49,1.15l-0.37,0.73l-0.76,-0.01l-1.1,1.21l-0.67,-0.03l-0.51,-0.64l-1.07,-0.28l0.9,-1.59l-0.53,-1.41l-0.67,0.26l-0.52,1.78l-1.1,0.95l0.5,0.88l1.02,0.38l-0.32,0.86l-0.25,0.32l-0.66,-0.3l-0.87,0.23l-0.34,0.51l0.4,0.56l-0.93,1.21l-0.64,-0.76l-0.61,0.02l-1.86,1.85l-0.3,-0.18l-0.47,0.38l-0.44,-0.36l-0.7,0.47l0.01,-0.72l-1.71,-0.72l-1.11,0.89l-0.08,0.97l-0.82,-1.35l-0.99,-0.5l-0.4,0.72l-0.82,0.25l-0.21,0.76l-1.91,-1.39l0.1,-1.92l-1.18,-1.54l0.51,-0.73l-0.05,-0.9l-1.13,-2.02l-0.43,-0.24l-0.52,0.42l0.0,0.8l-0.82,0.1l-0.88,-0.24l-0.84,-0.76l-0.33,0.08l-0.57,-0.77l0.12,-0.88l-0.46,-0.63l0.25,-0.98l-0.49,-0.6l-5.26,-19.48l-1.95,-1.12l-0.85,-0.87l-3.83,-1.73l-1.37,0.38l-0.46,1.23l-1.34,0.2l-1.27,1.39l-1.3,0.46l-1.31,1.15l-1.79,-0.77ZM746.76,774.42l-0.04,0.04l-0.08,0.14l-0.05,-0.07l0.17,-0.12ZM759.75,722.25l-0.02,-0.05l-0.0,-0.01l0.06,0.02l-0.04,0.04ZM768.61,745.97l0.01,-0.09l0.03,0.05l-0.05,0.04ZM759.95,720.22l0.52,-0.55l0.13,0.24l0.67,-0.23l-0.55,1.43l-0.78,-0.88ZM760.94,717.95l0.09,-0.3l0.01,-0.4l0.08,0.22l-0.18,0.48ZM748.75,781.92l0.08,-1.46l0.26,-0.59l0.82,1.56l-1.16,0.48Z\", \"name\": \"New Brunswick\"}, \"CA-NL\": {\"path\": \"M818.51,688.98l0.02,-0.65l1.55,-2.42l0.25,0.55l0.81,0.32l0.32,0.49l-1.34,0.44l-1.61,1.27ZM822.14,686.92l0.09,-0.28l0.2,0.08l-0.17,0.14l-0.11,0.06ZM824.06,685.7l-0.48,-2.57l0.46,-2.92l-0.33,-2.45l0.29,-1.53l0.64,0.39l1.83,-0.8l1.87,1.03l1.74,-0.31l0.54,-0.42l-0.17,-0.68l-0.33,-0.09l-1.27,0.39l-0.99,-0.34l-0.8,-1.03l2.21,-0.76l0.51,-1.4l-0.15,-0.42l-1.2,0.28l-0.06,-1.04l-0.46,0.04l-0.9,0.85l-1.88,0.14l-0.72,-2.27l0.34,-1.43l0.85,-1.64l0.57,0.11l0.56,1.16l0.85,0.46l0.4,-0.21l-0.55,-1.14l1.54,0.3l0.73,-0.53l-0.21,-0.41l-1.37,-0.41l-0.81,-0.81l-0.39,0.46l-0.48,-0.37l-0.65,-0.73l-0.22,-0.95l0.7,-9.03l-0.38,-4.88l0.34,-3.49l1.45,-0.26l0.59,-0.82l-0.37,-0.63l-0.77,0.32l-1.17,-0.57l1.93,-2.2l0.89,-2.81l-0.04,-0.49l-0.83,-0.7l0.51,-0.65l-0.28,-0.74l0.12,-1.13l0.56,-0.76l-0.31,-0.81l0.31,-0.71l-0.58,-0.44l0.1,-1.04l1.77,-2.59l0.98,-0.65l0.55,-1.03l1.96,-2.1l1.26,-2.08l0.7,1.99l1.55,-0.57l1.29,0.01l0.54,-0.36l-0.19,-0.69l-0.68,0.01l-0.53,-0.64l1.05,-0.21l0.4,-0.84l0.83,0.67l-0.69,0.24l-0.09,0.7l0.95,0.36l0.12,1.05l-0.54,0.02l-0.23,0.43l0.17,0.57l-0.32,0.4l-1.78,0.19l-0.8,0.48l-0.87,-0.17l-0.09,0.38l-0.71,-0.26l-0.76,0.5l-0.18,0.5l0.23,0.79l1.02,0.19l-0.16,0.91l0.29,0.62l1.83,0.78l0.39,-0.72l-0.17,-0.2l0.64,-0.8l0.68,-0.1l0.33,0.14l0.57,1.72l-0.65,0.48l0.44,0.67l-0.13,2.25l-0.35,0.55l-0.42,2.53l-0.34,0.07l-0.49,-2.17l-0.61,-0.28l-0.62,0.97l1.07,2.9l0.9,0.67l-0.65,1.64l0.04,0.86l-0.52,0.2l-0.23,0.52l0.66,0.38l-0.55,1.91l-0.98,0.27l0.0,0.67l0.86,0.21l0.12,0.69l-0.14,2.05l-0.45,1.24l-0.66,0.34l0.38,0.68l-0.47,1.24l0.06,1.84l0.16,0.63l0.56,0.14l0.13,1.13l-0.97,1.75l0.39,0.54l1.22,-0.07l0.47,3.3l0.69,-0.49l1.16,-6.05l0.4,-0.71l0.41,0.36l0.66,-0.23l-0.28,-0.85l0.56,-0.14l-0.01,-0.46l-0.46,-0.58l0.05,-1.26l0.95,-2.77l0.79,0.59l-0.18,3.42l0.93,-0.5l0.35,-1.41l0.27,0.39l0.79,-0.35l-0.0,-1.09l2.77,0.99l0.52,-0.3l0.2,-0.82l1.5,-0.94l0.12,0.59l-0.79,0.7l-0.99,1.9l-1.97,2.24l-0.69,0.29l0.06,0.6l-0.91,2.21l0.11,0.9l0.23,0.31l0.67,-0.13l0.71,-2.13l0.29,-0.41l0.38,0.14l0.48,-0.37l-0.26,1.38l0.59,0.25l-1.46,2.03l-0.14,0.97l0.53,0.67l1.61,-2.04l1.09,-0.82l0.49,0.19l0.28,0.84l0.7,-0.29l0.98,0.89l0.59,-0.38l0.01,-0.84l0.32,0.99l0.71,-0.1l0.19,-1.95l0.14,0.34l0.64,0.15l-0.35,0.84l0.22,0.44l0.59,-0.23l0.39,0.34l0.4,-0.34l0.79,0.24l0.11,-0.88l0.52,1.06l-0.54,0.71l-0.39,1.61l1.03,0.85l-0.38,1.05l0.16,0.44l0.47,-0.01l1.02,-0.97l0.76,-1.31l-0.03,-0.45l-0.62,-0.17l-0.51,0.55l-0.18,-1.15l1.57,-2.16l-0.03,-0.34l0.08,0.26l-0.25,0.67l0.57,0.54l0.48,-0.42l0.22,-1.1l1.67,-0.42l0.54,-1.2l0.62,-3.99l0.28,1.33l0.59,-0.52l0.13,0.21l-0.03,0.91l0.61,0.59l0.21,1.34l0.63,0.12l0.57,-1.64l-0.32,-0.61l0.02,-0.96l0.85,-0.12l0.79,0.7l0.31,-0.71l0.44,-0.22l-0.06,-1.2l0.32,-0.27l0.74,0.28l0.93,-0.73l5.77,0.89l0.22,0.12l-0.4,0.97l0.1,0.98l-0.49,0.24l-0.08,0.56l0.81,0.8l-2.57,1.49l0.26,0.54l-0.46,0.33l0.09,0.67l0.91,0.29l-0.86,0.34l-0.29,0.46l0.16,1.13l-1.86,1.47l0.0,1.05l0.58,0.19l1.41,-1.37l0.14,0.84l1.0,0.06l0.81,1.47l0.56,0.03l-0.39,1.08l0.37,0.5l0.57,-0.21l0.18,-0.47l0.9,-0.32l0.19,0.33l-0.99,0.74l-0.86,1.43l-1.08,0.56l-0.4,0.85l0.24,0.61l0.68,0.47l0.61,-1.3l0.97,-0.42l0.54,-1.1l0.13,0.97l0.7,0.34l0.5,-0.39l-0.16,-0.43l0.31,-1.17l0.25,0.35l0.59,-0.13l0.5,-0.63l0.27,0.58l0.47,-0.2l0.67,-1.31l0.2,-1.29l-0.28,-1.66l0.91,0.0l0.34,0.73l1.22,0.06l0.94,-3.37l0.86,0.75l0.3,2.82l-0.8,1.71l-0.96,-0.15l-1.06,0.49l0.22,1.79l-1.26,1.56l-0.53,1.5l-1.45,0.06l-0.71,0.35l-1.06,-0.39l-0.47,0.35l0.06,0.97l1.35,1.88l2.18,-0.61l-1.93,0.8l-0.05,0.78l0.26,0.14l1.9,-0.22l1.17,-1.04l-0.06,1.61l-0.81,0.3l-0.23,0.53l0.85,0.23l0.02,1.22l-1.26,-0.75l-0.46,0.03l-0.38,0.51l1.88,1.64l0.16,0.78l1.51,0.96l1.58,0.42l0.29,0.84l1.71,-1.1l-0.32,-1.21l0.06,-1.67l-0.57,-0.88l0.05,-2.14l0.64,-0.69l-0.26,-0.35l0.09,-2.07l0.87,-1.15l1.04,-0.21l0.44,-0.84l0.28,-1.77l0.43,0.3l-0.37,0.49l0.02,1.96l-0.43,1.39l0.36,1.31l-0.62,2.4l0.77,1.14l-0.53,1.03l0.11,0.6l0.39,0.29l0.12,0.67l0.88,-0.04l0.12,0.97l0.54,0.75l0.8,-0.16l0.23,0.23l0.42,-0.3l0.19,-1.05l1.35,-2.65l0.07,-1.31l-0.52,-2.42l0.56,0.06l0.51,1.46l0.77,0.05l0.18,1.36l0.28,0.41l0.86,0.2l-0.46,0.7l0.54,0.67l-0.09,1.98l-0.49,0.38l0.6,3.82l-0.59,0.45l0.34,0.65l0.58,-0.04l0.26,0.34l-0.14,0.63l0.45,0.87l0.46,2.59l-0.57,1.29l0.07,1.4l-0.47,0.74l-0.67,-0.01l-0.83,-1.05l-0.69,-0.11l-0.33,0.68l-0.63,-0.3l-0.68,1.86l-0.83,1.01l-0.73,-0.66l-0.37,-1.76l0.15,-1.33l0.5,-0.85l-0.23,-0.4l-0.58,0.22l-0.01,-0.84l-0.4,-0.27l-0.25,0.21l-0.84,-0.22l0.05,-1.36l0.49,-1.07l-1.62,-1.32l-0.34,0.41l0.02,0.96l-0.33,-0.14l-0.27,0.39l-0.02,1.71l-0.56,0.67l-0.05,1.51l-0.38,0.42l-0.36,1.88l-0.68,1.14l-1.16,0.24l-0.47,-0.99l-0.17,-1.61l0.02,-4.34l0.67,-0.26l-0.1,-0.72l-0.82,-0.24l0.6,-0.51l0.23,-1.22l-0.41,-0.34l0.61,-0.71l0.06,-0.57l-0.72,-0.23l-0.68,0.24l-0.13,-1.19l-0.59,-1.2l-0.83,-0.46l-1.16,-1.94l-0.54,-0.14l-0.55,-0.83l-0.47,0.24l-0.91,-0.8l-0.33,0.87l-0.53,-0.45l-1.3,-0.03l-0.4,0.25l0.12,0.46l0.99,0.27l0.23,1.41l-0.06,1.15l-0.64,0.45l0.37,0.72l0.0,0.98l-0.69,0.17l-0.99,4.53l-0.43,-0.07l-0.29,0.77l-0.95,-0.73l-0.76,0.59l-0.92,4.35l-0.55,0.39l-0.21,0.76l0.74,0.35l0.45,0.78l-0.11,0.53l-0.72,-0.18l-0.34,0.36l0.47,1.39l-0.02,1.18l-0.43,0.51l-0.74,0.19l-0.02,0.81l-0.52,-0.04l-0.1,-0.43l-1.25,-0.24l-1.26,2.06l-1.9,0.6l-1.19,-0.1l-0.43,-0.32l0.46,-2.27l0.88,-0.9l0.97,-0.15l2.04,-1.75l0.09,-0.86l1.22,-2.28l-0.44,-2.39l0.42,-1.17l2.27,-1.82l0.82,-1.47l-0.27,-0.9l1.23,-1.84l-0.4,-0.26l-1.19,0.33l-0.89,1.52l-1.26,0.84l0.4,-2.8l-0.47,-0.74l-0.65,1.09l-0.31,2.16l-0.31,-0.33l-0.67,0.71l-1.79,0.09l-0.18,-0.55l-0.78,-0.22l-0.73,0.71l0.13,1.82l1.21,0.81l0.24,1.37l-1.1,0.92l-0.3,-0.1l0.04,-0.89l-1.08,-0.43l-0.8,1.48l-0.02,-0.52l-0.43,-0.31l0.06,-0.78l-0.47,-0.05l1.23,-1.4l0.05,-0.44l-0.83,-0.14l-1.53,1.71l-0.77,-0.1l0.47,-1.23l-0.08,-1.5l-0.38,-0.39l0.25,-1.59l-0.4,-0.79l-0.66,-0.19l-0.47,1.48l0.31,1.95l-1.11,1.09l-0.38,1.01l0.17,-0.88l-0.28,-0.45l-0.54,0.35l-0.79,-0.88l-0.46,-0.04l-0.13,0.71l0.63,0.81l-0.1,0.83l0.37,0.4l-0.54,1.27l-0.84,-1.65l-0.47,-0.24l-0.3,0.44l0.03,1.02l0.55,0.59l0.02,0.54l-3.57,1.08l-0.41,0.46l-0.25,-0.2l-0.62,0.22l0.13,0.75l0.6,0.46l-0.21,0.36l-1.15,0.21l-1.33,-0.26l-1.5,0.92l-0.14,-0.52l-0.61,-0.41l-0.53,0.36l-0.02,0.51l-0.92,0.57l-0.17,-0.69l-0.46,-0.16l-1.88,0.89l-0.5,-0.13l-0.77,1.11l-1.38,-0.43l-0.81,0.72l-0.79,-0.15l-0.02,-0.49l-0.44,-0.12l-0.56,0.26l-0.17,0.46l-0.9,-0.11l-0.81,0.33l-1.22,1.15l-0.87,0.03l0.41,-1.32l-0.5,-0.16l-1.15,0.85l-0.09,1.71l-1.35,0.05l-0.62,1.11l-0.56,0.12l-0.42,0.57l-2.33,0.82l-1.98,1.48l-1.19,0.13l-0.86,-0.32l-0.49,-2.11l-2.24,-2.02l0.77,-0.74l0.91,-2.53l1.76,-2.24l0.33,-1.2l1.47,-2.58l0.19,-1.52l1.72,-1.6l0.36,-1.23l1.28,-0.84l0.14,-0.68l-0.91,-0.21l-2.2,1.29l-0.93,-0.35l-1.05,0.22ZM875.13,662.15l0.01,-0.05l0.03,0.05l-0.03,0.0ZM877.64,662.72l0.01,0.0l-0.0,0.01l-0.0,-0.01ZM877.66,662.95l0.18,0.25l-0.68,1.05l-0.32,0.16l0.81,-1.47ZM877.92,687.46l0.03,0.05l-0.04,0.02l0.01,-0.07ZM861.06,691.62l-0.07,0.12l-0.12,0.06l0.18,-0.18ZM860.09,692.51l-0.48,0.59l-0.29,-0.1l0.05,-0.05l0.72,-0.44ZM879.41,666.37l0.09,-0.58l0.24,-0.6l0.19,0.13l-0.51,1.05ZM875.09,662.02l-0.1,-0.13l0.04,0.02l0.06,0.11ZM856.72,657.08l-0.75,-1.19l0.46,-0.02l0.19,-0.64l0.34,0.61l-0.23,1.24ZM855.6,655.59l-0.04,-0.03l0.02,-0.02l0.02,0.05ZM854.13,657.17l0.0,-0.25l0.09,-0.07l-0.09,0.32ZM880.24,671.96l0.93,-0.43l1.21,0.01l1.03,-1.19l0.17,0.15l0.06,0.96l-1.69,0.33l-1.01,0.54l-0.41,0.04l-0.3,-0.41ZM880.32,686.11l0.4,-1.02l-0.02,0.88l-0.39,0.14ZM880.62,683.25l-0.08,-0.03l0.05,-0.13l0.03,0.15ZM865.39,648.04l0.38,0.42l0.68,-0.29l0.06,-1.23l0.98,0.8l-1.68,1.99l-0.42,-0.78l0.29,-0.24l-0.3,-0.67ZM859.7,652.85l0.19,-0.17l0.32,0.44l-0.25,-0.18l-0.25,-0.09ZM860.59,653.19l0.24,-0.05l0.02,0.23l-0.08,0.03l-0.18,-0.21ZM861.93,651.82l-0.05,-0.37l0.49,-0.4l0.03,0.24l-0.48,0.53ZM862.01,654.42l0.02,0.04l-0.01,0.11l-0.04,-0.08l0.03,-0.06ZM859.28,690.2l0.8,-0.57l0.4,0.51l-0.91,0.12l-0.29,-0.06ZM850.54,655.73l0.16,0.11l-0.16,0.24l-0.04,-0.3l0.04,-0.05ZM850.65,657.07l0.03,-0.01l-0.01,0.06l-0.01,-0.05ZM843.73,636.57l0.01,-0.34l0.77,-0.76l-0.19,0.87l-0.6,0.23ZM838.16,616.02l0.06,-0.8l0.21,-0.21l-0.04,0.83l-0.22,0.19ZM696.03,500.29l-0.19,0.36l0.37,0.59l0.59,-0.17l0.69,-0.86l0.89,0.17l-0.49,0.97l0.49,0.51l0.6,-0.2l0.44,-0.59l0.13,0.27l-0.65,0.85l0.07,0.57l-0.32,0.09l-0.24,-0.83l-0.68,-0.71l-1.19,0.27l-0.74,-0.45l-0.13,-0.43l0.35,-0.4ZM697.84,503.41l-0.02,0.02l-0.01,-0.01l0.03,-0.01ZM697.69,505.53l1.21,-1.47l1.28,-0.58l0.14,0.33l-1.01,0.24l-0.3,0.44l0.4,0.35l1.15,0.15l0.07,0.3l-0.82,0.92l0.28,0.56l0.53,-0.01l1.02,-0.87l0.17,-0.72l0.96,0.23l-0.44,0.91l0.49,0.27l0.45,-0.14l0.19,0.94l-0.7,0.47l0.16,0.63l1.68,1.31l1.17,-0.26l-0.32,2.55l0.34,0.66l0.43,-0.19l0.54,-1.08l-0.12,-1.02l0.48,0.08l-0.4,1.24l0.15,0.56l0.69,0.11l0.53,-1.32l1.06,0.31l-0.12,1.5l-2.03,0.86l-0.29,0.46l0.21,0.67l3.15,-0.37l0.01,1.37l-0.41,0.6l0.59,0.39l0.97,-0.82l0.15,-1.71l0.59,-0.14l0.26,1.19l-0.58,1.28l1.1,0.04l0.62,-0.88l-0.04,0.62l0.48,0.37l0.27,-0.15l-0.12,0.81l-0.67,0.47l-0.28,0.63l-1.18,0.73l-2.49,0.28l-0.46,1.71l0.57,0.27l0.62,-0.56l0.67,1.05l0.66,0.02l0.23,-0.46l-0.46,-0.94l1.05,0.08l0.71,-0.62l1.2,-0.33l0.42,-0.72l0.62,-0.27l0.13,-0.68l0.27,-0.01l0.57,0.35l-0.5,0.14l-0.28,0.5l0.44,0.41l0.58,-0.02l-0.22,0.99l0.25,0.41l0.66,-0.37l0.35,0.16l-0.84,1.07l0.06,0.67l0.65,0.1l0.66,-0.36l0.73,0.45l0.4,-0.35l0.12,-0.76l1.44,0.52l0.21,0.76l-0.92,1.11l0.53,0.58l1.41,-0.58l0.12,0.47l-0.41,0.55l0.04,0.61l-1.06,1.02l-0.67,1.25l-1.48,0.58l-0.62,-0.22l-0.6,0.4l-0.46,1.24l0.53,0.15l1.22,-0.6l-1.46,3.18l-0.05,0.31l0.52,0.44l0.57,-0.34l0.91,-1.39l0.93,-2.23l1.0,-0.4l-0.29,1.33l0.62,0.69l0.61,-1.64l0.69,-0.01l0.43,-0.88l0.55,-0.31l0.96,-0.01l0.21,-0.69l1.05,-0.57l-0.44,1.25l0.84,1.88l-0.67,0.73l-1.34,0.68l-0.14,1.17l0.37,0.5l-1.45,0.73l0.01,0.72l0.31,0.11l-1.25,1.46l0.46,0.55l-1.25,1.18l0.44,0.58l2.18,-1.11l0.09,-1.23l0.86,-0.89l0.16,-0.72l0.77,-0.03l1.16,-0.66l0.72,0.04l0.34,-0.45l0.3,0.01l0.37,1.03l0.55,0.25l0.4,-0.75l0.95,0.44l-0.18,0.32l-1.47,0.33l-0.95,1.54l-0.01,0.73l0.73,-0.07l0.49,-0.71l0.78,-0.42l0.74,1.54l0.56,0.1l1.0,-1.67l0.35,0.37l0.62,-0.39l0.02,-0.85l0.6,0.72l-0.34,1.3l0.43,0.73l0.35,0.27l1.01,-0.06l0.69,0.78l0.0,0.5l1.04,0.58l-1.38,1.23l-0.03,0.93l-1.56,0.45l-0.27,1.54l-2.01,-0.32l-0.25,0.64l0.19,0.24l2.15,0.88l0.91,-0.28l1.09,-1.06l1.22,-0.19l1.37,0.3l0.32,0.13l-0.52,0.68l0.65,0.3l0.26,0.8l-0.99,0.53l-0.19,0.63l0.33,0.32l1.36,0.18l0.3,0.5l0.46,0.19l0.41,-0.24l0.29,0.29l0.55,-0.51l0.62,0.17l1.44,-0.59l1.45,0.33l0.47,1.67l-0.97,0.45l-0.38,0.54l-0.62,1.94l0.28,1.04l-1.07,0.77l-0.71,-0.04l-0.49,0.33l0.61,2.02l-0.36,0.42l-4.73,-0.44l1.24,-0.79l2.21,-0.68l0.25,-0.4l-0.81,-0.5l-2.68,0.68l-0.55,0.44l-1.09,-0.08l-0.49,0.41l-0.22,0.99l0.36,0.64l5.05,0.99l-0.89,0.22l-0.25,0.62l0.41,0.27l2.62,-0.18l1.27,-0.49l0.93,0.2l0.56,-0.25l0.51,0.28l-0.61,0.54l-2.81,0.49l-0.54,0.59l-0.28,1.41l0.28,0.15l3.06,-0.22l-0.02,0.33l0.96,0.46l-1.37,0.94l-1.09,-0.04l-0.34,0.31l0.16,0.76l1.04,0.73l1.03,0.18l0.56,-0.43l1.61,-0.1l0.97,-0.6l0.76,0.2l1.48,-0.96l-0.21,1.32l0.55,0.37l-0.55,0.77l0.19,0.56l-0.32,1.03l1.47,0.69l1.52,-0.61l0.48,0.14l0.6,-0.57l0.58,0.38l-0.9,0.49l-0.01,0.65l1.33,0.47l1.7,-0.86l1.74,-0.31l0.19,0.44l-0.41,0.75l-1.47,0.65l0.21,0.67l0.56,0.25l1.92,-0.77l0.6,-1.24l0.51,0.98l-0.38,0.75l0.46,0.66l-0.14,1.23l0.53,0.45l0.76,-1.77l-0.15,-3.1l0.55,0.28l0.58,-0.15l0.03,1.06l-0.91,0.91l0.04,1.48l0.37,0.32l0.88,-0.92l0.01,1.78l0.23,0.41l0.67,-0.3l-0.55,1.03l0.37,0.82l-0.09,0.75l0.19,0.41l0.45,-0.03l0.38,-0.45l-0.04,0.62l-0.71,1.04l0.03,1.21l-0.46,0.73l0.1,0.53l0.54,-0.05l0.6,-0.86l-0.04,1.0l-1.17,1.98l0.49,1.28l0.46,-0.28l0.75,-1.92l0.56,-0.54l0.07,-1.09l0.71,-0.41l0.51,-1.51l0.42,-0.38l0.23,0.96l0.46,-0.14l0.34,-0.75l-1.12,3.19l0.36,1.06l0.43,-0.19l1.32,-2.78l0.27,-1.92l0.88,-0.36l0.44,-1.72l0.57,0.65l0.15,0.72l-0.78,1.12l-1.06,0.4l0.32,1.13l0.6,0.06l0.26,-0.54l0.49,0.27l0.7,-0.11l0.51,-0.9l1.02,-0.03l0.78,-1.05l0.58,0.28l-0.89,2.37l-0.9,1.04l0.17,0.63l-0.8,1.49l0.45,1.26l-0.65,1.0l0.16,0.62l0.34,0.14l0.59,-0.18l0.88,-1.1l0.11,-0.44l-0.51,-1.33l1.2,-1.77l0.91,-2.17l0.7,0.94l0.65,-0.15l0.89,-1.39l0.02,-0.96l1.26,-0.4l0.1,-0.99l0.4,0.04l-0.18,2.03l0.4,0.39l0.53,-0.33l0.65,0.29l-0.61,1.49l0.48,0.25l0.67,-0.26l0.5,0.69l1.28,-0.46l0.4,0.59l0.5,-0.01l0.19,-0.47l1.24,-0.04l0.63,0.43l0.66,-0.44l0.75,0.44l0.57,-0.32l-0.19,-0.82l1.25,-0.48l0.78,0.67l1.47,-0.42l0.48,0.28l1.19,-0.94l1.0,0.75l0.52,-0.08l0.79,0.49l1.29,-0.43l0.73,-0.65l0.99,0.79l-0.17,0.61l0.69,0.2l-0.04,0.32l-2.3,0.88l-0.54,0.51l0.43,0.75l1.45,-0.47l-0.65,1.12l-2.36,0.59l-2.86,1.73l-0.63,1.34l0.44,0.77l-1.94,1.14l-2.0,2.4l-1.59,0.57l-4.59,3.5l-1.34,0.21l-0.64,0.52l0.02,0.77l1.19,0.5l2.35,-1.12l2.03,-1.52l-0.03,0.33l0.48,0.25l0.63,-0.16l-0.41,0.6l-1.83,1.13l-2.0,2.67l-3.76,0.96l-0.45,0.5l0.12,0.58l-1.41,1.11l-0.58,-0.13l-0.44,0.59l1.0,0.75l0.06,1.7l0.69,1.02l-2.41,-0.59l-0.94,-0.59l-4.79,-0.39l-0.75,-0.8l-0.69,0.12l0.27,1.24l-0.38,0.97l0.35,0.59l3.26,-0.69l2.18,0.3l2.27,0.89l2.17,0.4l-2.62,2.84l-0.04,0.56l0.42,0.43l1.55,-0.45l-1.4,0.94l-0.16,0.6l0.52,0.24l1.28,-0.51l1.07,-0.9l0.83,0.15l0.31,-0.75l-0.36,-0.5l0.63,-0.65l1.03,-2.52l0.66,-0.33l0.1,-0.42l-0.29,-0.31l2.55,-1.52l1.37,-2.76l2.28,-1.07l0.51,-1.11l-0.06,-0.62l-0.83,-0.68l1.21,-2.08l0.03,-0.87l1.65,-1.1l3.13,-2.92l0.65,-0.2l0.71,-0.92l3.25,-0.59l0.5,-0.7l-0.75,-0.57l-1.61,0.39l-0.9,-0.18l-1.58,0.38l-0.92,1.24l-0.95,-0.28l0.12,-0.9l0.83,-0.25l0.42,-0.75l1.74,-0.64l1.03,0.17l3.07,-0.76l0.56,0.29l1.2,-0.93l0.61,0.24l2.07,2.23l1.09,0.59l0.42,1.18l1.26,0.49l0.19,1.3l-2.9,3.24l-0.18,0.91l0.21,0.41l0.46,-0.06l0.59,-0.61l0.22,0.2l0.93,-0.29l-0.02,0.42l0.6,0.43l-0.23,1.53l0.2,0.42l1.35,-0.49l-0.04,-1.08l0.95,-1.53l-0.33,-1.29l0.42,-0.53l0.28,-1.75l1.09,-0.23l1.33,-0.99l0.54,0.16l-0.82,0.48l0.48,0.52l3.41,-0.05l0.69,-0.42l0.14,0.42l0.98,-0.09l0.42,0.67l2.36,0.28l0.81,0.69l-0.23,0.59l0.4,0.5l0.62,-0.17l0.39,-0.76l0.32,0.03l0.39,1.44l0.81,-0.21l-0.26,0.48l0.62,0.6l-0.11,0.35l1.23,0.68l-0.27,0.64l-1.18,0.06l-0.27,0.53l0.93,0.4l-0.08,0.69l-1.31,0.15l-1.04,0.54l-0.19,0.5l0.8,0.26l-0.06,0.62l0.53,0.27l0.46,-0.21l0.28,-0.66l1.23,-0.2l0.16,0.52l0.76,0.12l0.73,0.83l-1.35,1.01l-0.27,0.56l-1.53,0.04l-0.22,0.59l0.6,0.55l1.24,0.16l1.33,0.9l-1.49,0.4l-0.08,0.83l1.44,-0.22l-0.31,0.65l-1.3,1.06l-0.9,-0.23l-1.9,0.25l-0.72,0.58l1.1,0.55l1.07,-0.29l1.16,0.14l1.45,-0.77l1.42,0.1l1.44,-0.55l0.41,0.23l0.54,-0.28l0.55,0.73l0.79,-0.3l0.34,0.7l-0.59,-0.18l-0.89,0.32l-0.04,0.72l-3.99,-0.27l-0.33,0.07l-0.2,0.68l0.76,0.49l1.66,-0.13l3.09,0.67l-0.07,0.54l0.86,0.9l0.62,0.06l0.47,0.89l-0.87,0.56l0.07,0.61l0.36,0.2l-0.14,0.29l-0.46,0.42l-0.96,0.1l-0.08,0.73l0.85,0.4l0.06,0.39l-1.6,1.97l-0.54,1.51l-1.26,0.78l-0.15,0.74l-0.6,0.22l-0.16,0.9l-0.71,1.15l-0.99,0.55l0.07,1.34l-0.68,1.28l0.03,0.76l-1.14,0.3l0.15,1.24l-0.9,0.27l-3.54,-9.36l-0.52,-0.23l-35.41,12.67l-33.8,10.74l0.05,-0.71l-1.71,-2.85l-0.93,-0.79l0.17,-0.44l-0.26,-0.43l-0.57,-0.17l-2.03,0.31l-1.48,-1.45l0.43,-1.47l0.91,-1.14l5.09,-2.36l-0.1,-0.81l-0.51,-0.48l-2.37,-0.8l-0.52,-1.28l-0.71,-0.03l-0.65,1.67l-3.72,2.2l-0.52,1.08l0.25,2.29l0.94,1.3l0.63,1.63l-0.34,2.5l1.11,1.86l-0.71,0.77l0.46,1.83l-0.26,-0.16l-0.61,0.33l-0.03,0.86l1.07,2.64l0.95,1.12l-0.28,1.2l-1.36,1.67l-2.01,-1.64l-1.2,-0.53l-1.37,0.13l-0.6,0.43l-0.11,0.65l-0.7,-0.33l-1.5,0.25l-0.26,-0.68l-1.34,-0.66l-0.91,0.41l-0.65,-2.06l-0.56,-0.04l-1.76,-1.75l-0.47,1.36l-0.62,0.28l-0.14,-1.04l-0.55,-0.3l-0.78,0.57l-1.11,-0.03l-1.48,1.15l-0.74,-0.14l-0.37,-1.35l-1.5,-0.62l-1.48,-1.26l-0.59,0.71l0.97,2.25l-0.39,0.26l-1.9,-2.81l0.14,-0.41l0.65,0.06l0.45,-0.5l-1.85,-4.51l0.79,0.47l0.52,-0.62l-2.23,-3.68l0.93,0.01l0.19,-0.47l-0.3,-0.96l-1.31,-1.69l-0.94,-0.54l-0.71,0.24l-0.33,1.54l-1.2,0.9l0.32,2.45l-0.99,0.76l0.12,0.82l-0.46,-0.14l-0.4,0.68l-1.6,-0.89l-0.58,-1.5l-0.53,-0.23l-0.83,0.6l-0.18,0.61l-1.19,-0.46l-0.46,-0.49l-1.24,-3.1l0.86,-1.04l1.84,0.33l0.27,0.57l0.51,0.13l0.73,-0.59l-0.62,-3.99l-0.75,-0.9l0.86,-1.08l-0.07,-0.6l-1.94,-1.38l-3.37,-0.19l-0.94,-0.86l-0.61,-1.14l-1.84,-0.88l0.38,-0.32l-0.13,-0.89l-0.91,-0.33l-0.67,-1.14l-2.25,-1.26l-0.04,-1.47l1.12,-1.64l-0.29,-0.92l-1.56,-1.71l-0.31,-1.14l0.71,-0.9l1.24,-0.55l0.24,-0.41l-0.29,-1.34l2.27,1.18l0.51,-0.25l0.16,-1.0l-0.42,-0.67l0.84,-0.98l0.41,-1.56l-0.43,-1.17l-2.25,-1.33l-2.3,-2.41l-0.36,-0.8l0.26,-0.35l0.6,0.08l-0.17,0.56l0.35,0.57l3.3,1.27l0.58,0.94l0.85,0.58l2.47,0.67l0.61,-0.26l0.01,-0.8l0.55,-0.25l0.23,-0.92l-1.85,-2.05l0.48,-0.97l-1.58,-1.83l-0.09,-1.14l0.41,-0.65l-0.39,-0.66l0.69,-0.18l4.57,3.66l1.4,0.26l1.2,0.7l0.87,-0.48l0.92,0.0l0.76,1.43l2.24,1.56l0.63,-0.76l0.84,0.15l0.8,-0.4l0.36,-0.71l-0.49,-1.05l1.58,-0.47l0.57,-0.59l0.63,-2.12l1.49,0.03l1.4,1.15l0.66,0.07l0.18,0.96l0.59,0.71l2.31,-0.49l0.85,-1.46l0.41,-0.06l2.36,0.71l1.03,1.13l0.93,0.34l1.77,-0.35l0.82,-0.97l0.55,0.1l0.47,-0.4l-0.12,-0.72l-0.96,-0.96l-1.38,-0.65l0.52,-0.98l-0.48,-0.98l0.04,-0.82l1.45,0.33l0.84,-0.52l-0.13,-1.6l-0.86,-2.36l0.09,-1.19l0.78,-0.5l0.29,-0.69l-0.05,-0.51l-0.56,-0.32l-1.26,0.84l-0.77,-0.14l0.82,-0.63l0.01,-0.71l1.65,-0.79l0.19,-0.89l-0.24,-0.56l-0.47,-0.2l-3.07,0.68l-1.07,-0.12l0.58,-1.08l-0.44,-2.05l-0.27,-0.45l-0.62,-0.18l-0.16,-1.95l-0.87,-0.34l-1.22,-1.39l1.23,-0.85l0.84,-1.18l1.0,-0.54l0.24,-0.48l-0.23,-0.57l-0.51,-0.1l-1.3,0.63l-1.02,-0.23l-1.02,0.35l-0.43,-0.32l0.01,-0.64l-0.54,-0.29l-1.12,1.1l-0.15,-0.79l0.91,-0.83l-0.03,-1.01l-1.08,-0.55l-1.33,0.31l-0.42,-0.42l-0.02,-0.84l-0.5,-0.95l1.38,-0.28l0.91,-1.01l-0.23,-0.5l-0.76,-0.29l-0.48,-1.3l-2.4,-2.03l0.07,-0.83l0.74,-0.66l-0.33,-1.27l0.95,-0.56l0.16,-0.48l-0.74,-0.94l0.17,-1.17l-0.42,-1.05l0.57,-0.95l-0.31,-1.24l0.09,-1.36l-1.39,-1.2l0.94,-1.54l-0.99,-1.39l-0.53,-1.77l0.91,-1.89l0.01,-1.33l-0.65,-0.67l-0.76,0.39l-0.1,0.77l-0.5,-0.48l-1.2,0.29l-0.4,-0.8l-0.56,-0.35l-0.9,-0.04l-0.36,0.57l-2.06,-2.73l-0.44,-1.22l-2.15,-0.07l-0.15,-1.73l1.09,-0.79l0.36,-0.66l-0.1,-2.05l0.86,-0.71l0.29,-1.2l1.13,-0.54l0.26,-0.9l-1.33,-1.84l-0.49,0.02l-0.81,0.98l-0.34,-0.16l-0.39,-0.85l0.05,-0.9l1.24,-0.91l0.82,-0.13l2.45,-1.25l0.42,-0.66l-0.07,-0.7l-1.4,-1.26l-1.94,-0.37l-0.78,0.53l-0.25,0.8l-1.29,0.52l-1.01,1.64l-0.81,-0.16l-0.3,-1.21l-0.89,-0.63l-2.56,0.63l-1.66,-0.61l-0.97,0.85l0.1,-0.63l-0.36,-0.43l0.45,-1.16l0.96,0.46l2.31,0.23l1.22,-0.56l0.29,-0.88l-1.03,-1.09l-1.22,-0.08l-0.99,-1.57l-0.88,-4.18l1.03,-1.31l-0.19,-0.83l-0.59,-0.35l-0.9,0.2l-1.77,2.04l-0.73,-0.95l-1.3,-0.55l-0.36,-1.4l0.81,-1.28l-0.85,-1.96l0.39,-0.6l-0.17,-0.45l0.67,-0.48l-0.02,-0.65l-0.49,-0.78l-1.06,-0.15ZM749.43,644.67l-0.21,0.06l-0.38,-0.16l0.32,0.07l0.27,0.03ZM827.52,605.46l1.17,-0.58l0.2,0.18l-0.04,0.35l-0.71,0.3l-0.62,-0.26ZM813.86,589.78l0.16,-0.56l0.66,-0.26l0.12,0.19l-0.94,0.63ZM742.78,556.73l0.27,-0.15l0.42,0.38l0.74,0.05l-1.11,0.28l-0.32,-0.55ZM743.07,555.94l0.11,-0.16l0.77,-0.06l-0.64,0.05l-0.24,0.16ZM725.03,532.72l0.15,-0.75l1.74,-0.61l-0.23,0.87l-1.66,0.49ZM716.21,518.51l0.26,-0.13l0.06,0.04l-0.32,0.09ZM701.98,503.42l-0.06,0.03l-0.14,-0.01l0.18,-0.05l0.02,0.03ZM746.33,561.6l1.29,-0.12l1.03,-0.44l-0.04,0.65l-2.28,-0.08ZM765.04,574.52l-0.09,-0.09l0.07,-0.12l0.12,0.1l-0.09,0.11ZM766.11,573.29l-0.2,-0.4l-0.0,-0.06l0.04,0.0l0.17,0.45ZM777.44,577.1l0.21,-2.19l0.71,0.01l-0.44,0.65l-0.49,1.53ZM788.01,592.75l1.22,-1.14l0.8,-0.31l1.1,-1.65l0.44,-0.22l-1.08,2.63l-2.49,0.7ZM779.46,607.1l0.03,-0.02l0.01,0.02l-0.04,0.0ZM820.61,590.82l0.0,0.0l-0.0,0.0l-0.0,-0.01ZM701.88,596.17l-0.57,-0.35l-0.42,-0.33l0.73,0.21l0.27,0.47ZM825.79,598.33l0.24,-0.16l0.14,-0.18l-0.36,0.57l-0.02,-0.23ZM821.86,591.85l1.18,-0.3l0.11,0.43l-1.18,0.08l-0.11,-0.21ZM809.43,590.34l0.28,0.04l-0.13,0.1l-0.15,-0.14ZM808.53,593.04l-0.01,-0.07l0.06,-0.23l0.07,0.28l-0.11,0.02ZM801.05,579.04l0.02,-0.15l-0.02,-0.2l0.27,0.24l-0.27,0.12ZM790.5,576.74l1.36,-1.34l0.14,0.95l0.53,0.49l-0.39,0.57l-0.93,0.16l-0.71,-0.82ZM757.4,566.9l0.54,-0.08l0.35,0.26l-0.22,0.16l-0.67,-0.34ZM753.32,565.66l0.39,-0.32l0.08,-0.97l1.15,0.24l-0.22,1.06l-1.41,-0.01ZM748.73,558.73l-0.2,-0.17l0.27,-0.02l-0.08,0.19ZM747.96,558.45l-0.96,0.19l-0.02,-0.12l0.72,-0.16l0.26,0.09ZM750.06,555.65l0.07,-0.3l0.2,-0.06l0.02,0.17l-0.29,0.18ZM744.69,552.98l0.63,-1.08l0.02,-0.72l0.75,0.24l-0.13,0.41l0.44,0.61l-0.83,0.06l-0.16,0.95l-0.37,0.33l-0.35,-0.8ZM745.53,555.04l0.78,-0.94l0.61,-0.02l0.44,1.15l-0.05,0.83l-1.79,-1.02ZM739.57,542.24l0.1,-0.7l0.05,-0.02l0.14,0.64l-0.29,0.08ZM737.12,536.75l0.17,-0.49l0.37,0.18l0.66,1.05l-0.18,0.15l-1.02,-0.9ZM737.02,541.9l0.57,-0.02l0.36,-0.73l0.61,0.38l-0.67,1.26l-0.88,-0.88ZM734.6,536.57l0.49,-1.0l0.84,0.73l-0.23,0.65l-1.11,-0.37ZM704.55,508.2l0.25,-0.58l0.82,0.14l-0.81,0.77l-0.26,-0.33ZM704.52,507.29l-0.04,-0.66l0.08,0.11l-0.04,0.55Z\", \"name\": \"Newfoundland and Labrador\"}, \"CA-ON\": {\"path\": \"M399.18,732.97l3.61,-62.03l17.48,-16.01l50.17,-56.68l2.38,2.85l1.41,0.72l2.09,2.16l3.34,1.59l0.32,0.93l2.49,3.6l0.21,0.78l1.14,1.35l-0.34,0.82l0.41,0.83l0.93,-0.9l0.33,0.57l1.19,0.13l-0.12,0.67l0.59,0.42l0.37,-0.21l4.38,0.75l6.3,3.23l3.98,0.98l2.15,0.97l2.94,3.12l3.19,1.18l0.02,0.41l-0.73,0.42l-1.87,3.35l-0.2,2.26l0.59,0.29l0.53,-0.6l0.5,-1.93l1.17,-2.2l0.8,-0.71l1.45,-0.24l3.65,0.71l3.97,-1.2l1.6,0.26l1.47,-0.99l1.54,0.65l0.54,1.07l1.21,-0.17l0.13,1.07l0.43,0.57l0.68,-0.28l-0.38,-1.86l3.24,0.33l0.69,0.35l1.97,-0.84l0.55,0.68l-0.33,1.5l0.67,-0.0l0.48,-0.78l1.18,0.14l1.11,-0.61l0.85,0.4l0.9,-0.04l0.79,0.99l1.11,0.18l0.24,2.22l0.89,1.67l-1.85,8.93l0.53,3.1l0.67,1.51l0.69,0.04l0.76,0.78l1.61,4.42l-0.68,3.75l1.63,5.71l-1.28,1.28l-0.38,3.56l0.34,1.55l2.94,1.95l1.54,2.72l1.27,0.85l1.71,2.1l1.35,0.88l-0.11,0.68l0.43,1.19l-2.0,1.21l-0.77,0.15l-0.57,0.56l-0.12,0.8l0.39,0.6l0.27,-0.03l1.21,-0.98l2.42,-0.18l1.79,2.17l4.33,1.42l0.88,1.65l1.7,0.86l2.17,2.18l1.19,3.1l1.0,0.99l0.31,1.74l-2.02,1.29l-1.13,2.06l-1.21,0.9l-0.45,0.98l-0.86,0.68l-0.29,0.63l0.81,0.81l0.63,0.0l0.95,-2.17l1.62,-0.81l1.32,-2.12l1.59,-1.41l3.03,0.45l0.5,0.44l0.92,0.13l2.89,1.98l0.59,1.04l2.24,1.83l7.01,59.67l-0.5,2.75l0.48,1.12l1.53,1.9l0.61,3.39l2.03,2.63l1.76,1.66l1.07,2.0l1.14,1.05l1.33,2.35l2.44,1.53l0.44,0.79l0.64,0.34l4.21,0.28l0.6,0.39l2.46,-0.27l0.96,0.32l1.48,-0.15l3.27,0.47l2.39,0.86l2.13,1.35l0.58,1.44l0.77,0.72l2.97,1.37l1.25,-0.14l0.4,-0.74l-0.27,-1.02l0.78,-0.05l0.75,1.94l0.75,0.63l1.26,2.41l0.84,0.43l2.11,0.29l1.11,0.66l1.08,-0.1l0.74,-0.95l0.94,-0.29l1.1,0.16l2.36,1.74l1.37,-0.21l1.06,-1.56l1.04,-0.35l3.5,-2.3l2.72,-0.79l1.29,-0.96l2.06,-0.26l1.36,-0.65l1.31,0.6l1.64,0.2l-0.25,4.37l1.74,1.53l-1.12,0.9l-0.49,1.45l-1.92,1.85l-2.34,0.31l-4.21,3.29l-4.61,5.87l-0.78,1.45l-0.74,0.45l-1.02,1.74l-0.62,0.48l-2.83,1.26l-3.3,2.3l-1.55,0.2l-2.37,1.7l-0.49,-0.59l-0.62,-0.03l-0.35,0.38l-0.54,-0.59l-2.13,1.15l-0.76,-0.34l-0.64,0.55l-0.69,-0.07l-2.68,1.44l-0.39,1.13l0.45,0.24l-1.75,0.25l-0.41,0.48l-1.86,0.83l-4.68,1.11l-2.57,1.33l-1.36,-0.07l-3.16,1.34l-1.55,0.25l-1.68,1.0l-0.33,0.71l-2.62,2.68l-1.39,0.28l-0.34,0.81l-1.15,0.96l-0.11,1.25l-1.66,3.08l0.19,1.1l0.59,0.56l2.05,0.62l2.58,-0.18l0.9,0.25l2.09,-1.5l0.99,-0.29l0.21,3.11l0.44,0.35l0.11,0.95l1.64,0.99l-0.31,0.36l-1.64,0.78l-1.28,-0.28l-3.23,0.38l-0.52,0.46l-1.81,0.41l-1.14,-0.22l-1.42,0.76l-4.47,1.21l-1.73,1.55l-0.19,0.66l-0.35,-0.07l-0.52,0.45l-0.51,0.79l0.06,0.86l-6.1,-1.03l-3.85,0.33l-1.74,0.54l-2.51,1.81l-2.89,3.12l-0.52,1.54l-1.15,1.04l-1.8,0.33l-3.66,2.49l-1.43,1.98l-0.09,0.9l-1.16,-0.92l-0.76,-0.11l-2.24,1.16l-0.93,0.09l-2.5,-1.04l0.23,-3.72l1.37,-0.67l2.31,0.39l1.92,-0.15l2.07,-0.47l0.67,-0.49l0.34,-1.28l-0.4,-2.01l-2.62,-0.26l0.8,-0.66l0.5,-1.21l0.33,-2.5l-0.23,-0.88l0.63,-3.06l3.6,-1.93l1.28,-2.02l1.53,-0.91l1.19,-1.36l0.79,-2.06l-0.83,-9.21l-0.61,-2.59l0.88,-1.1l0.46,-1.2l0.15,-2.05l1.0,-1.44l1.1,-0.63l0.26,-1.3l1.06,-1.69l0.17,-0.89l-0.41,-0.98l-0.04,-1.96l-1.18,-1.48l0.03,-1.32l-0.37,-0.69l-0.93,-0.06l-1.97,-2.46l0.08,-0.46l-1.7,-0.54l0.08,-0.2l0.76,0.18l3.63,-0.35l-0.43,1.17l0.89,1.12l0.3,1.84l1.72,0.67l-0.25,0.6l0.56,0.33l0.39,-0.17l0.33,0.24l0.54,-0.36l0.13,0.47l-0.32,0.56l-1.12,1.02l0.07,0.86l0.59,0.2l1.53,-1.22l0.73,0.18l-0.2,3.37l0.73,0.14l1.19,-1.81l1.46,-0.74l1.29,1.87l0.94,0.06l0.86,0.64l4.81,1.08l1.27,-1.37l-0.05,-2.95l-0.3,-0.56l-1.36,-0.75l-0.09,-0.5l0.51,-0.04l0.4,-0.74l0.59,-0.17l-0.15,0.59l0.83,0.32l0.43,0.71l2.82,-0.09l0.24,-0.64l-0.74,-0.45l0.41,-0.84l-0.27,-0.96l-0.6,-0.04l-0.53,0.62l-0.98,-1.51l-0.99,-0.12l-0.32,-0.95l-0.65,-0.11l-0.26,-0.61l-0.79,-0.33l0.6,-0.32l0.2,-0.76l-0.48,-0.81l-1.23,-0.51l0.92,-1.39l-0.63,-1.56l-0.47,-0.33l-0.88,0.01l-0.69,0.43l-0.15,0.59l-0.7,-0.07l-0.23,-1.09l-0.96,-0.31l-0.07,-1.59l-0.5,-1.17l-0.72,-0.28l-0.21,0.75l-0.38,0.04l-0.16,-0.7l-0.64,-0.22l-0.89,-1.17l-0.14,-0.96l-0.88,-1.39l-0.43,-0.07l-0.38,-1.02l-1.01,-0.62l-0.57,0.46l-0.54,-0.33l-2.99,0.52l0.06,-0.75l-0.56,-0.51l-0.86,0.29l-0.36,0.68l-2.42,-0.2l-0.32,-0.34l0.11,-0.32l-0.55,-0.23l-0.27,-0.88l-1.22,-0.45l-0.72,0.76l-0.35,-0.3l-5.57,0.15l-1.54,-0.49l-0.07,-0.38l-0.48,-0.19l-1.21,0.19l-0.29,-0.21l-1.97,0.69l0.13,-0.33l-0.57,-0.46l-0.86,0.46l-3.28,0.67l-6.33,-0.98l-0.68,0.14l-0.73,-0.55l-1.19,0.24l-1.58,-0.28l-0.96,-0.63l-1.61,0.25l-0.66,-0.22l-0.44,-0.69l0.33,-2.01l-0.21,-0.47l-0.62,-0.28l-0.88,0.03l-1.05,0.73l-1.2,-0.16l-1.02,0.74l-0.89,-0.94l1.63,-2.22l0.19,-0.7l-0.71,-1.01l-0.82,0.15l-0.03,-0.84l0.56,-0.31l1.05,0.17l0.62,-1.12l-0.19,-0.53l-1.22,-0.9l-1.71,0.01l-0.56,0.46l-0.37,-0.55l-1.24,-0.32l0.1,-0.97l0.63,-0.88l-0.18,-0.72l0.27,-0.75l1.18,-1.73l0.06,-0.58l-0.65,-1.21l-0.75,-0.24l-0.57,-1.16l-2.32,-1.17l-0.59,-0.99l-0.68,-0.41l0.48,-1.35l-0.17,-0.52l0.99,-1.39l-0.56,-0.9l0.99,-1.16l-0.1,-1.08l-1.36,-0.44l-4.18,0.47l-1.75,0.64l-1.21,0.08l-3.76,-0.81l-2.61,-2.94l-1.38,-3.12l-0.08,-1.08l-0.46,-0.45l-0.69,-2.88l-1.15,-1.48l-0.4,-1.33l-0.8,-0.6l-1.4,0.31l-0.27,0.35l-0.25,-0.04l-0.15,-0.74l-1.25,-0.46l-1.76,1.04l-1.53,-0.93l-1.41,0.65l-1.97,0.21l-0.21,-0.45l-1.66,-0.77l-1.13,0.12l-0.46,-0.75l-0.83,0.19l-0.75,-0.69l-2.8,-0.59l-1.39,-1.42l-1.64,1.0l-1.12,-0.34l-0.29,0.52l0.37,1.13l-0.18,0.81l1.8,1.59l0.03,1.28l-0.74,1.13l-0.76,0.21l-0.6,-0.51l0.42,-1.45l-0.66,-1.82l-1.23,-0.38l-0.78,0.2l-0.8,1.37l-0.0,2.41l-0.88,0.55l-0.15,1.63l-0.55,0.23l-0.51,2.34l-1.08,0.6l0.52,-2.06l0.92,-1.46l-0.04,-0.53l-0.43,-0.37l-5.21,2.26l-0.74,1.43l0.37,1.11l-1.51,3.72l-1.04,0.36l-0.33,0.8l-1.45,0.94l-2.12,-0.31l-1.54,0.55l-0.74,-0.45l-0.91,-1.45l-0.86,-0.4l-5.03,0.53l-0.6,-0.37l-1.81,0.36l-0.87,-1.51l0.09,-0.61l-0.87,-0.58l-2.52,1.18l-2.39,1.81l-1.71,0.43l-1.39,-0.23l-0.36,-0.67l-1.14,-0.19l0.07,-0.57l-0.7,-0.89l-2.68,-1.04l-0.66,-1.62l-0.66,-0.48l-2.73,0.25l-0.49,0.74l0.11,0.94l-0.39,0.19l-0.83,-1.63l-0.03,-1.17l-0.45,-0.95l-0.59,-0.29l-1.87,-0.0l0.82,-0.28l0.26,-0.4l-0.3,-0.8l-2.92,-1.0l-1.16,-0.73l-3.39,-0.36l-1.63,0.22l-0.83,0.29l-0.54,0.96l-3.01,0.33l-0.49,-1.51l-0.59,-0.6l-4.31,-0.55l-0.17,-0.66l-0.57,-0.45l-2.28,0.08l-1.11,-0.46l-1.15,-1.26l0.09,-1.93l-0.93,-4.52l-0.23,-2.72l-1.22,-0.94l-2.44,-0.45ZM472.71,752.99l-0.12,0.04l-0.06,-0.0l0.02,-0.03l0.17,-0.01ZM478.59,747.88l0.15,0.64l-0.47,0.42l-0.49,-0.12l0.81,-0.94ZM477.23,749.43l-0.4,0.46l-0.17,0.72l0.06,-0.73l0.51,-0.46ZM617.39,818.97l1.96,-1.47l0.57,-0.1l0.18,0.8l0.76,0.04l0.5,-0.3l-0.01,-0.69l1.66,-0.66l-0.41,1.69l0.39,0.57l1.51,-0.3l-0.57,1.2l0.09,0.52l0.4,0.19l-1.15,0.86l-0.53,-0.19l0.4,-0.95l-0.17,-0.45l-0.93,0.43l-0.54,-0.54l-0.8,0.06l-1.84,0.67l-0.64,-0.34l-0.07,-0.75l-0.75,-0.29ZM624.98,820.15l0.01,-0.01l0.01,0.0l-0.02,0.01ZM625.55,816.29l-0.88,0.97l-0.46,0.08l0.55,-0.73l0.8,-0.31ZM540.65,627.23l-0.07,-0.12l0.08,-0.1l0.01,0.05l-0.02,0.17ZM631.49,815.38l-0.36,-0.28l0.23,-0.45l0.55,-0.02l-0.42,0.76ZM627.3,816.03l0.76,-0.4l0.07,-0.04l-0.19,0.32l-0.64,0.12ZM581.92,801.51l0.01,-0.5l0.57,0.08l-0.37,0.17l-0.22,0.24ZM582.54,809.21l0.08,-0.02l-0.04,0.08l-0.05,-0.06ZM575.98,691.9l1.12,-1.08l0.85,7.33l-1.08,-0.7l-0.91,-1.5l0.4,-2.7l-0.38,-1.35ZM544.08,793.09l0.64,0.68l0.69,-0.74l0.82,0.42l0.64,-0.7l0.82,-0.2l0.0,1.02l0.75,0.43l0.23,0.62l0.6,0.21l0.7,-0.36l0.45,0.45l0.58,-0.27l0.5,0.81l-1.53,-0.59l-2.46,0.08l-0.84,-0.54l-3.09,-0.53l0.04,-0.61l0.44,-0.17ZM551.8,795.48l0.54,-0.33l0.22,-1.0l-0.92,-0.74l0.51,-0.53l0.2,0.27l0.44,-0.15l0.37,-0.71l1.04,-0.37l0.21,0.71l0.84,0.06l1.09,1.55l0.72,-0.51l0.42,-1.47l1.23,-0.76l0.44,0.27l-0.0,1.0l1.05,0.28l-0.19,1.49l1.03,1.15l-0.71,0.35l-2.15,2.25l-0.45,-0.55l-1.03,-0.07l-0.86,-0.45l-0.34,-0.52l-2.37,-0.45l-1.33,-0.75ZM561.38,795.5l0.14,-1.12l0.31,-0.89l0.37,-0.6l-0.5,1.08l0.43,0.57l1.05,-0.18l-0.09,0.36l-2.12,3.83l-0.58,0.22l-0.22,-0.27l1.92,-2.1l-0.14,-0.72l-0.57,-0.18ZM561.46,799.85l0.39,-0.41l0.14,-0.08l-0.3,0.47l-0.22,0.02ZM559.12,790.23l0.46,-0.13l0.58,0.12l-0.77,0.13l-0.27,-0.12ZM549.83,792.88l0.11,-0.31l0.76,-0.11l-0.14,0.31l-0.72,0.11ZM540.38,793.88l0.61,-1.05l0.4,-0.17l0.82,0.55l-0.62,1.12l-1.21,-0.46ZM532.26,787.83l1.6,-0.01l1.59,1.01l-0.18,0.7l-0.88,0.31l-0.15,0.99l-1.53,-1.95l-0.45,-1.06ZM508.42,762.98l0.75,-0.68l1.29,-0.13l1.11,0.39l-0.97,0.41l-2.18,0.01ZM486.18,744.42l0.13,-0.01l0.53,0.92l-0.33,0.05l-0.33,-0.95ZM482.14,744.75l1.2,-0.66l1.87,0.08l-0.46,1.02l-1.2,-0.05l-1.18,0.8l-0.23,-1.19ZM469.8,755.19l0.19,-0.21l0.18,-0.01l-0.36,0.23Z\", \"name\": \"Ontario\"}, \"CA-AB\": {\"path\": \"M139.75,606.41l0.38,-0.39l-0.02,-0.65l1.18,0.57l0.81,-0.56l-0.36,-1.98l-0.93,-0.51l0.38,-1.01l-0.68,-0.55l0.01,-0.33l37.32,-108.88l22.35,7.31l22.92,6.81l23.1,6.18l22.87,5.45l-44.18,197.52l-23.74,-5.6l-21.73,-5.63l0.08,-0.8l-0.96,-1.24l0.17,-0.95l-0.81,-1.03l-1.42,-0.63l0.23,-0.86l-0.52,-0.39l-0.17,-1.26l-0.89,-1.31l0.8,-2.77l-1.36,-0.54l-0.36,-0.46l0.84,-0.39l1.4,-2.48l-0.07,-2.44l0.13,-0.54l0.67,-0.45l0.24,-1.71l-0.41,-1.28l0.52,-4.26l-0.64,-1.2l-0.83,-3.13l-1.24,-1.02l-1.26,0.24l-0.48,-1.21l0.36,-0.7l-0.28,-1.21l-0.72,-0.4l-1.19,-1.57l-0.23,-0.8l-0.55,-0.38l0.84,-0.16l-0.02,-1.71l-1.21,-1.73l-0.1,-0.81l-1.92,-1.32l-0.23,-0.43l0.28,-1.29l-0.17,-0.62l-0.92,-0.74l-0.13,-0.8l-0.83,-0.44l-0.08,-1.12l0.37,-1.35l-0.74,-1.03l0.08,-0.91l-0.53,-0.7l-0.09,-0.87l-0.74,-0.79l0.15,-1.06l-0.35,-2.08l-1.26,-0.33l-1.17,0.69l-0.24,0.56l-0.62,-0.25l-0.14,-3.71l-1.62,-3.01l0.14,-2.56l-0.41,-0.29l-0.84,0.64l-1.09,-0.63l-1.03,-0.0l-0.4,-1.01l-0.81,-0.6l-0.28,-1.09l1.11,-0.63l0.48,-1.28l-0.31,-0.63l-1.56,-1.12l-0.59,-1.12l-0.67,0.05l-0.69,1.15l-1.39,-0.1l-0.07,-0.72l0.77,-0.54l-0.52,-1.06l0.22,-0.72l-0.41,-1.19l0.77,-0.81l-0.14,-1.64l-0.53,-0.78l0.37,-1.01l-0.53,-1.4l-1.3,-0.18l-0.07,-1.34l0.38,-1.17l-0.69,-1.05l0.31,-0.71l-0.69,-1.67l-1.29,-1.58l-0.74,0.2l-0.57,1.02l-1.63,-1.38l-0.38,-1.59l0.04,-1.64l-2.21,-1.16l-0.68,0.12l-0.5,-0.76l-0.25,-2.18l-0.69,-0.43Z\", \"name\": \"Alberta\"}}, \"height\": 867.2308867877657, \"projection\": {\"type\": \"lcc\", \"centralMeridian\": -90.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-de-mill.js",
    "content": "jQuery.fn.vectorMap('addMap', 'de_mill',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 1013.8952766123396, \"bbox\": [{\"y\": -6845388.062206638, \"x\": 651826.6317576179}, {\"y\": -5694876.55460837, \"x\": 1673096.1659230748}], \"left\": 0}], \"paths\": {\"DE-BE\": {\"path\": \"M710.94,355.66l1.16,-1.31l0.31,-1.0l0.98,-0.97l-0.74,-2.05l0.47,-2.19l1.42,-0.94l2.79,-2.88l-0.08,-0.98l-1.47,-2.18l0.73,-6.66l-0.34,-1.33l0.64,-1.38l4.96,1.6l1.09,-0.07l0.35,-0.78l-0.73,-1.75l1.04,-2.7l2.87,-0.39l1.06,-0.5l1.18,-0.91l1.37,-2.19l0.63,0.01l0.3,2.64l0.85,0.92l1.79,0.65l3.7,0.21l1.86,-0.49l0.87,-1.38l2.02,-1.38l1.68,0.91l0.97,-0.04l0.86,-1.18l2.39,-1.71l0.8,1.09l1.68,1.32l-0.23,3.06l0.52,1.47l6.52,6.23l4.25,2.44l3.3,0.77l0.05,0.57l-2.28,4.44l-0.17,0.98l0.34,0.75l0.38,0.19l3.64,-0.35l1.11,0.49l1.94,1.99l3.86,1.43l1.24,1.07l-1.08,1.15l-0.45,2.45l-2.59,2.1l-0.44,1.05l0.23,1.98l-0.26,1.22l-0.52,0.43l-2.57,0.78l-1.68,2.53l-0.48,-0.04l-0.58,-4.22l-1.2,-1.24l-1.76,0.03l-2.4,-0.66l-5.7,-2.14l-1.45,0.18l-1.06,0.71l-1.67,-0.06l-1.51,-1.94l-1.09,-0.45l-2.61,0.59l-0.84,0.51l-0.39,0.91l0.23,2.67l-2.7,-0.01l-1.66,-0.65l-2.96,-2.75l-3.67,0.8l-1.15,-1.62l-0.5,-0.23l-4.07,1.35l-2.3,-1.43l-1.43,-0.19l-4.21,1.59l-1.43,1.07l-3.65,-0.65l-2.32,-1.38Z\", \"name\": \"Berlin\"}, \"DE-ST\": {\"path\": \"M511.75,377.7l-0.19,-1.91l-0.72,-0.39l-1.04,0.12l-2.74,-3.18l1.67,-1.48l0.22,-0.86l-1.19,-2.29l-1.94,-0.96l-0.25,-1.3l1.62,-0.63l4.58,-0.76l0.66,-0.85l0.34,-2.05l-0.72,-1.15l-2.88,-1.99l-1.7,-0.49l-0.89,-0.61l-6.9,-7.59l0.2,-1.63l0.97,-2.19l1.6,-0.58l2.71,0.33l0.63,-0.68l-0.8,-1.54l-3.95,-4.79l-0.65,-2.15l0.15,-3.19l2.52,-2.52l0.37,-0.71l-0.07,-0.65l-0.59,-0.69l-1.69,-0.45l-1.06,0.31l-1.12,0.88l-0.5,-0.05l-4.12,-4.8l-4.69,-7.76l-1.68,-0.93l-1.1,-0.03l-0.74,-0.64l-0.72,-3.4l-1.93,-1.84l-1.63,-3.11l0.32,-1.91l-0.33,-2.2l0.36,-1.11l-0.14,-1.09l3.24,-1.17l4.55,-0.28l4.29,0.17l5.6,-1.61l1.86,-0.81l1.06,-1.12l1.88,-1.23l0.47,-0.71l0.51,-2.5l1.3,-0.62l3.41,-0.05l5.48,1.55l5.8,-0.35l4.62,0.71l1.08,0.85l1.26,0.44l0.9,1.23l0.82,0.36l1.17,-0.2l1.85,-1.0l0.81,0.26l2.14,-0.1l5.95,-2.08l3.49,-0.77l6.06,-4.61l2.59,-0.21l0.65,-0.44l-0.46,-3.58l0.53,-2.9l0.67,-1.42l1.25,-0.47l1.34,0.35l1.48,-0.07l1.14,-0.76l1.83,-4.18l4.01,-0.91l0.66,0.36l0.03,0.89l-0.49,1.1l-0.74,0.63l0.1,0.67l1.49,0.6l3.15,0.11l0.93,0.56l0.82,2.89l0.78,0.98l1.88,0.24l3.52,-1.46l1.24,-0.22l2.83,3.53l1.47,0.99l3.2,0.18l0.8,0.39l-0.39,1.13l-1.2,1.54l0.04,1.04l6.37,3.52l2.86,0.5l3.91,1.7l1.79,0.32l1.6,-0.49l2.44,0.06l7.12,-0.65l1.23,1.43l-0.1,1.4l0.36,0.43l2.52,0.11l3.74,-0.88l2.6,0.83l0.88,1.31l1.94,5.74l-0.37,1.25l-3.08,2.11l-0.33,0.54l0.12,1.74l1.16,1.92l-1.63,1.6l-0.18,0.67l0.35,1.19l1.01,1.4l0.66,2.01l1.7,1.56l-0.22,2.11l-0.95,2.48l-0.99,1.47l-1.64,0.62l-1.93,-0.09l-0.74,0.32l-0.52,2.14l-0.57,5.23l-2.55,3.23l-0.17,0.61l0.33,0.55l0.59,0.18l2.86,-0.07l-1.32,1.38l-0.23,0.64l0.35,1.76l0.9,0.76l1.4,0.29l2.26,-0.57l1.13,-1.04l0.55,-1.93l0.31,-0.22l1.44,0.6l1.93,2.54l0.8,0.55l3.31,-0.37l-0.45,1.01l-0.12,2.75l-2.0,3.63l-1.86,1.68l-0.03,0.56l0.98,1.84l-0.76,2.32l-1.74,3.01l0.16,1.04l-0.4,1.46l0.55,2.31l-1.32,2.13l-1.56,4.21l0.39,3.28l1.16,1.2l1.26,0.31l1.26,1.89l-2.46,2.36l-2.25,5.35l1.74,3.68l2.91,2.5l1.02,2.21l2.48,1.24l1.76,1.58l6.03,6.74l0.45,2.41l1.41,1.2l4.18,2.62l1.15,0.31l1.94,-0.2l1.12,-1.25l0.72,0.02l2.52,2.54l6.33,3.8l4.95,0.78l1.34,-1.09l2.5,-1.17l0.81,-1.47l0.8,0.01l12.49,6.29l4.9,0.63l1.31,0.76l1.17,2.76l0.67,0.48l5.45,0.26l2.91,0.68l2.89,2.9l5.51,3.2l1.89,0.62l6.6,-0.62l2.67,1.69l0.47,-0.13l1.62,-2.09l3.58,0.12l1.37,0.49l-0.61,1.17l-3.36,3.14l-3.61,5.02l0.11,5.5l2.2,4.24l-0.27,1.33l-2.63,2.98l-6.68,4.5l-1.95,2.91l-1.38,-0.29l-2.04,-1.77l-1.47,-0.69l-3.02,1.13l-1.33,-1.29l-2.19,-0.93l-2.66,-0.63l-1.11,-0.64l-1.4,-2.03l-2.85,0.23l-1.12,1.22l-5.05,3.48l-1.7,0.67l-2.83,-1.01l-3.84,-0.38l-1.6,0.82l-1.73,2.63l-1.87,1.34l-0.75,0.06l-0.41,-0.49l-0.79,-0.24l-9.31,1.35l-1.31,-0.74l-7.91,-0.26l-1.23,0.64l-0.39,2.49l-0.58,0.97l-7.21,0.61l-5.74,2.15l-2.88,-0.27l-3.12,-1.14l-0.61,0.23l-0.85,2.22l-2.97,2.3l0.0,6.04l-0.39,1.31l-1.64,1.66l-1.61,1.1l-0.2,0.6l0.24,2.8l0.87,1.54l0.25,5.08l1.44,3.13l-0.02,2.43l-0.59,1.0l-1.79,0.18l-1.27,0.88l-1.0,1.56l-0.47,1.62l0.78,2.41l0.13,2.63l1.93,2.3l0.33,1.19l0.33,3.69l-0.41,1.19l-0.97,1.12l-0.06,1.28l0.27,0.36l2.72,0.71l-0.36,3.43l1.04,1.66l2.05,1.61l0.34,2.07l0.4,0.6l0.69,0.46l3.84,0.63l0.12,0.58l-1.66,2.49l-0.51,2.75l0.48,0.84l2.2,1.1l0.4,1.34l-2.24,3.48l-3.39,3.59l-0.3,1.27l0.3,1.03l-1.41,0.98l-0.47,-0.03l-0.73,-1.06l-2.49,-1.93l-0.83,-0.28l-2.78,1.17l-5.63,-1.52l-6.69,0.89l-0.46,-1.34l-3.15,-1.42l-0.72,-0.72l-0.68,-1.61l-1.48,-1.16l-4.85,-1.85l-2.26,-1.41l-1.28,-0.19l-8.75,0.64l-1.28,0.77l-0.49,-0.17l-1.14,-0.87l-0.49,-1.71l-2.27,-3.62l-0.38,-3.14l-0.61,-0.65l-2.18,-1.18l-4.08,0.63l-4.52,-0.07l-4.62,-0.52l-2.95,1.42l-5.76,-0.36l-1.48,-0.74l-0.67,-1.44l-0.29,-1.31l0.88,-0.48l0.21,-1.0l-0.82,-3.64l-2.1,-3.0l-1.06,-0.99l-2.23,-0.75l-2.12,-1.15l-0.92,-1.2l1.06,-1.26l4.82,-0.76l2.6,-1.21l1.3,-1.0l1.78,-2.78l-0.04,-0.44l-5.62,-6.96l-2.67,-4.19l-5.25,-3.49l-2.66,-0.77l-9.16,-1.13l-4.19,0.07l-15.09,-1.54l-2.43,-1.15l-0.67,-1.06l0.66,-5.07l-2.54,-4.24l0.09,-3.13l-2.01,-2.26l-1.36,-3.22l-0.05,-0.57l0.43,-0.34l2.32,0.5l1.1,-0.74l-0.05,-1.59l-0.9,-1.75l-0.74,-0.44l-1.25,-0.03l-3.13,-1.09l-1.44,-1.06l-2.81,-0.05l-4.44,-1.92l-8.84,0.18l-1.37,-0.72l-2.68,-4.06l-0.08,-3.65l-0.75,-1.81l-1.67,-1.39l-1.38,-2.21l-1.09,-2.65l-1.67,-1.02l-1.66,-1.53l-0.2,-0.68l-0.45,-2.63l0.23,-5.1l0.49,-0.55l1.7,-0.71l1.03,-1.32l1.38,-0.67l1.26,-1.81l0.13,-1.21l-0.61,-2.73l-2.14,-1.55l0.46,-2.26l2.22,-1.17l0.47,-0.99l-0.41,-0.45l-1.4,0.06l-1.36,-1.31l-2.26,-0.93l-0.26,-1.14l-1.7,-2.38l0.64,-0.28l2.89,0.27l1.38,-0.38l2.94,-2.56l0.12,-1.6l0.65,-0.27l5.49,-0.71l13.01,-0.0l2.63,-0.85l1.89,-0.24l5.82,0.07l0.95,-0.32l0.84,-1.41l0.02,-1.82l-0.42,-0.7l-1.69,-1.11l-0.01,-0.35l0.69,-0.48l3.37,-0.88l2.18,-1.02l2.45,-1.72l1.9,-2.44l0.15,-1.3l-0.45,-1.63l-0.96,-0.73l-1.5,-0.32l-0.88,-1.48l0.88,-1.92l0.69,-0.6l3.37,-0.95l1.23,-0.98l0.29,-2.18l-0.33,-1.2l-0.96,-0.68l-0.59,0.22l-0.37,0.6Z\", \"name\": \"Sachsen-Anhalt\"}, \"DE-RP\": {\"path\": \"M24.7,661.09l1.01,-4.92l0.64,-1.76l0.83,-0.82l0.38,-1.02l-0.36,-1.07l-0.88,-0.68l0.56,-2.05l0.64,-0.33l1.87,-0.13l0.89,-0.45l0.8,-1.55l0.04,-1.6l-0.55,-1.46l-1.12,-1.1l0.71,-0.78l2.17,-1.29l1.01,-1.26l1.91,-0.76l4.19,-0.99l1.96,-1.44l0.13,-0.46l-0.4,-1.06l0.18,-1.13l1.48,-2.03l1.17,-0.57l3.39,0.63l2.73,-0.4l1.43,-1.19l0.07,-0.88l2.15,-0.04l2.75,-1.22l0.26,-0.53l-0.14,-0.58l-3.3,-4.51l0.21,-0.78l0.67,0.02l0.63,0.43l0.83,1.31l2.25,1.19l0.81,1.92l0.82,0.49l2.38,-0.73l4.61,-2.84l4.25,-0.62l1.26,-0.47l3.26,1.3l-0.47,1.61l0.43,0.48l0.55,0.08l1.22,-0.02l2.7,-1.49l0.56,-0.02l1.58,0.98l1.21,1.29l1.85,0.39l7.79,-1.85l0.63,-0.64l0.18,-0.79l-0.35,-1.34l-1.6,-2.52l-0.39,-4.03l-0.58,-0.71l-1.84,-0.88l0.81,-2.09l-0.08,-1.91l5.26,-1.85l1.3,2.03l1.31,0.92l1.52,0.34l1.44,-0.2l0.96,-0.9l0.76,-1.32l0.23,-2.63l-0.46,-3.09l2.61,-0.83l1.55,-1.58l0.97,-1.64l5.73,-1.48l6.08,-3.37l3.16,0.86l1.4,-0.54l1.08,-1.76l2.26,0.63l1.29,-0.27l2.46,-2.13l0.85,-0.38l1.1,-2.19l1.41,0.53l0.57,1.23l0.52,0.34l5.6,0.33l5.78,-1.33l3.39,-2.17l0.2,-1.77l0.88,-1.5l0.09,-3.33l-0.32,-0.56l0.36,-0.33l2.21,-0.55l3.74,0.25l8.22,-1.92l3.88,-1.81l2.82,0.16l1.83,-2.44l4.31,-1.56l1.43,-1.83l1.04,0.55l1.03,-0.5l0.37,-1.1l-0.11,-1.22l-1.9,-2.05l3.19,-1.64l2.37,-2.16l2.49,0.71l0.86,-0.57l0.06,-2.37l-1.22,-2.58l-0.36,-3.12l0.28,-1.24l2.88,-2.32l1.1,-0.27l5.23,1.22l-1.35,4.44l0.11,1.04l1.47,1.02l2.59,0.75l3.7,3.3l1.88,1.21l2.66,-0.65l1.19,4.08l-0.21,3.99l1.05,1.68l4.13,4.5l1.6,2.36l0.67,2.23l1.11,0.27l2.96,-0.98l3.41,1.51l-0.33,1.81l-1.02,2.5l2.01,4.18l0.37,1.99l0.67,1.17l1.16,0.89l-2.47,5.41l-2.08,1.52l-1.78,0.13l-2.49,-2.33l-1.61,-0.07l-1.86,0.64l-1.53,1.74l-1.72,1.16l-0.43,1.63l-0.09,5.6l0.44,0.71l1.39,0.79l-1.7,1.6l-1.22,3.55l-1.13,0.8l-0.32,0.85l0.96,1.07l4.36,0.93l0.5,1.36l1.78,0.8l2.91,5.16l2.07,1.46l0.59,0.97l1.41,3.87l-0.08,1.13l-2.1,0.73l-5.08,-0.12l-0.86,0.67l-0.57,1.56l0.12,0.66l0.84,0.9l-1.7,2.25l-0.83,-0.2l-1.56,-1.3l-0.62,-0.04l-1.31,1.16l-5.75,2.53l-1.27,1.54l-1.17,2.26l-0.26,1.37l0.16,1.15l0.76,0.85l2.47,1.42l-0.8,3.06l-2.12,-1.58l-3.93,0.35l-1.32,1.69l-0.7,2.73l-6.56,3.92l-0.04,0.64l1.41,0.69l6.26,4.76l0.64,0.92l0.36,1.7l2.08,2.34l4.06,-0.13l4.26,-1.18l4.75,-2.1l3.81,-2.44l12.19,-3.48l3.65,0.15l1.38,0.75l10.44,9.97l1.84,4.14l-1.41,4.58l0.79,1.68l2.23,2.78l0.94,1.72l0.91,3.46l1.88,2.97l0.7,1.92l1.15,1.53l3.75,-0.47l0.94,0.31l-0.18,0.85l-1.21,1.66l-2.02,2.09l-3.21,0.55l-2.81,1.66l-1.73,2.69l-0.17,3.38l1.52,3.21l2.4,3.89l1.58,3.79l-0.74,3.29l1.87,2.64l2.18,5.43l1.29,2.32l0.0,0.5l-1.82,0.77l-0.24,1.24l0.27,0.38l1.67,0.56l3.25,0.62l0.75,1.05l-1.25,2.64l0.73,4.29l-3.48,6.65l-0.23,1.19l0.28,0.45l1.96,0.59l-0.25,1.12l-6.64,6.64l-1.28,0.59l-1.18,1.11l-0.67,2.23l-1.87,12.05l-0.41,1.21l-7.19,12.57l-2.03,2.67l-3.08,2.82l-2.62,0.81l-1.18,-0.88l-9.6,-1.69l-15.64,-7.06l-1.85,-0.17l-5.52,0.49l-8.1,-1.99l-4.7,1.56l-4.03,-0.89l-3.62,0.88l-1.19,-0.23l-0.77,-0.56l-1.82,-2.5l-2.28,-0.99l-4.22,-0.63l-2.02,-1.09l-3.43,-4.36l-1.23,-1.1l1.05,-1.13l-0.91,-2.08l-1.87,-0.57l-3.96,-0.23l-0.7,-1.43l-1.91,-0.14l-1.76,0.43l-0.43,-0.31l-1.83,0.04l-5.12,-4.44l-0.72,-3.11l0.1,-0.97l0.63,-1.08l2.04,-0.24l1.38,-1.65l0.75,-2.82l1.47,-1.42l0.58,-2.29l1.93,-1.43l0.92,-1.29l0.11,-0.76l-0.41,-0.97l0.64,-1.69l-0.53,-1.14l-1.2,-0.68l-2.44,-0.77l-5.36,-0.97l0.23,-0.69l-0.31,-0.68l-3.97,-4.06l-0.52,-1.64l0.26,-0.34l0.94,-0.54l1.88,-2.04l2.63,-1.5l0.44,-1.24l-0.36,-1.78l-1.18,-0.55l-0.24,-3.37l-1.16,-1.98l-0.56,-1.53l-0.01,-1.85l-0.47,-0.49l-0.69,-0.08l-2.81,1.53l-2.73,0.22l-4.63,-2.83l-2.24,-1.82l-7.08,-0.5l-6.52,-3.12l-2.78,1.32l-0.84,-0.58l-2.17,-0.57l-8.19,4.3l-14.41,5.61l-1.73,0.29l-2.48,-0.16l-6.27,2.41l-11.26,-0.46l-13.35,1.03l0.12,-4.73l0.51,-1.28l3.97,-4.55l2.07,-3.33l-0.2,-1.32l-1.19,-0.9l1.32,-1.56l7.15,-3.91l0.14,-0.58l-0.7,-0.78l0.12,-0.23l1.36,-0.0l-1.32,-3.0l0.06,-0.9l0.96,-0.88l-0.21,-1.96l0.73,-4.43l-0.78,-0.59l-3.33,-0.76l-4.76,-0.01l-1.62,-0.37l-1.58,-0.85l-2.85,-2.28l-1.84,-0.93l-1.05,0.02l-1.76,0.67l-1.68,-3.31l-4.74,-2.03l-1.42,-1.21l-3.23,-6.53l-1.68,-2.3l-0.67,0.03l-0.74,1.23l-1.88,-4.14l-1.71,-2.22l-0.36,-0.88l0.25,-1.47l-0.61,-2.68l-0.69,-1.17l-0.84,-0.48l1.01,-1.48l-0.25,-0.66l-0.57,-0.01Z\", \"name\": \"Rheinland-Pfalz\"}, \"DE-BB\": {\"path\": \"M532.83,262.93l6.91,0.27l2.22,0.8l1.92,0.23l0.44,-0.36l0.41,-3.06l1.26,-0.51l3.04,0.0l5.26,2.45l2.98,-0.23l1.98,-1.24l0.85,-2.35l-0.99,-4.37l-1.3,-1.51l-0.19,-0.75l0.51,-1.09l4.24,-3.19l1.87,-1.0l5.26,-1.62l3.25,-0.16l1.03,0.3l2.97,2.0l1.17,2.19l0.54,0.17l1.95,-1.02l2.04,-0.6l5.11,0.21l0.42,-0.46l-0.31,-1.87l-1.57,-1.18l0.96,-0.35l2.95,0.42l2.23,-2.22l5.22,-1.82l2.14,0.54l3.55,-2.62l1.44,-0.2l1.23,-2.31l0.17,-1.79l2.41,-1.35l1.44,-2.09l3.01,-1.03l2.53,-0.42l1.88,1.46l0.8,0.19l3.07,-1.7l1.07,-0.25l0.91,0.3l2.34,3.19l6.9,1.55l4.13,1.99l2.89,1.84l1.73,1.54l2.81,1.31l1.58,1.72l1.67,0.3l3.5,-0.21l2.97,-0.63l10.88,2.19l1.22,0.48l2.77,2.25l7.11,1.35l0.38,3.34l1.27,0.92l1.33,0.11l4.27,-0.77l1.3,0.08l1.24,0.36l1.45,0.99l1.62,0.34l3.88,-0.72l2.7,-0.03l1.77,-0.58l0.24,0.59l-1.32,1.13l0.25,1.02l3.0,1.28l2.7,-0.34l4.68,-4.1l2.85,-1.48l2.25,-1.6l0.85,-0.96l0.63,-1.75l2.1,-1.21l0.96,-0.92l0.67,-0.19l1.12,0.29l2.25,2.71l1.35,0.48l2.75,-0.0l0.39,-0.3l0.58,-2.63l1.22,-2.32l1.51,-1.43l1.48,-0.61l2.46,-0.19l1.97,0.33l3.98,1.73l1.99,0.37l1.84,-0.55l5.11,-3.36l1.11,-0.34l2.54,-2.43l3.16,-6.27l0.57,-2.58l0.68,-1.37l1.26,-0.97l1.71,-0.74l3.64,-0.2l2.31,-1.78l1.79,-2.64l5.81,-4.06l3.38,-0.4l3.32,0.21l3.06,-1.06l0.25,-0.48l-0.46,-1.66l-2.44,-3.76l0.14,-1.93l1.1,0.14l2.53,3.13l4.32,1.37l0.21,2.84l2.8,4.16l0.58,1.9l1.86,2.02l6.85,-0.41l5.77,0.34l4.55,1.1l2.26,-2.31l2.19,-0.37l3.58,1.44l4.08,-0.21l1.93,0.35l0.14,3.17l-0.44,2.39l-1.48,2.82l-3.44,4.48l-8.18,4.5l-0.3,2.96l0.35,0.39l7.84,1.28l6.71,0.45l1.55,-1.05l0.55,-1.69l2.56,-1.06l2.7,-2.85l6.15,-3.1l0.53,2.01l0.52,4.87l0.66,0.99l2.96,2.61l-2.35,3.78l-0.64,0.78l-1.1,0.53l-0.97,1.19l-0.76,1.72l-0.3,2.0l1.13,5.86l-3.18,8.56l-1.26,2.29l-2.94,2.52l-5.73,3.73l-5.94,2.54l-4.8,2.91l-0.19,1.17l0.61,1.47l1.4,6.23l-0.38,2.37l-0.93,1.47l-2.54,1.81l-0.11,0.53l1.13,1.86l1.83,1.23l2.18,0.58l2.2,0.14l1.83,0.66l3.26,3.12l2.65,1.16l10.37,6.27l1.45,1.4l3.42,5.49l1.13,0.87l1.78,0.68l2.93,3.21l5.79,1.88l6.19,5.72l2.79,1.89l-2.56,4.42l-0.8,3.17l0.15,0.42l1.72,1.3l0.37,1.13l-1.53,2.92l-2.32,3.03l-5.2,4.02l0.57,5.35l2.33,5.75l2.0,3.74l-0.44,2.64l2.32,2.11l3.33,1.41l2.84,0.55l2.59,0.93l1.38,2.1l-0.03,2.42l-1.92,2.25l0.08,1.06l1.31,1.69l-0.33,1.66l-1.07,2.44l-0.56,3.66l1.13,2.04l5.96,3.68l-2.25,2.67l-0.94,3.67l-2.09,3.13l-0.56,1.34l-0.37,8.09l-0.8,2.46l-1.47,2.29l-1.77,1.96l-5.61,4.73l-1.43,2.62l0.38,2.98l1.61,2.04l1.83,1.09l1.23,1.37l0.39,3.4l1.12,3.5l2.26,2.19l4.69,3.23l1.2,2.14l0.94,3.23l0.16,3.3l-1.1,2.49l-1.94,2.59l-0.8,2.54l0.09,0.64l-3.68,-0.14l-4.14,-1.43l-2.43,-1.19l-2.34,-0.38l-2.13,0.08l-4.25,1.0l-12.98,5.4l-3.61,0.69l-3.27,-1.81l-3.59,-1.09l-4.83,-0.51l-6.2,1.26l-3.95,1.81l-1.29,0.97l-3.89,4.23l-0.68,1.23l-0.17,1.94l-1.45,2.85l-7.14,8.87l-0.65,0.19l-2.27,-0.54l-16.84,1.74l-14.86,-0.95l-5.83,-1.43l-2.12,0.31l-0.98,-0.34l-1.65,-2.02l-2.5,-1.41l-2.15,-1.77l-4.82,-1.95l-2.41,0.23l-1.05,0.89l-1.37,0.6l-10.59,2.94l-1.25,-1.65l-2.07,-0.6l-0.75,0.79l-1.16,0.02l-1.41,1.38l-0.62,-1.08l-0.19,-1.14l1.62,-1.55l0.77,-1.93l0.17,-3.34l-0.18,-1.13l-0.84,-1.12l1.62,-1.1l0.44,-0.88l-0.76,-3.69l-0.72,-1.45l-2.14,-1.14l-0.81,-0.96l0.6,-2.51l-0.62,-1.27l-2.96,-1.84l-1.61,0.4l-0.6,-0.2l-1.27,-0.72l-2.7,-2.76l-0.78,-0.3l1.7,-2.55l6.61,-4.44l2.82,-3.17l0.38,-2.0l-1.67,-2.84l-0.69,-2.27l0.05,-4.22l3.44,-4.71l3.42,-3.22l0.85,-1.63l-0.22,-0.56l-1.97,-0.69l-3.9,-0.1l-0.87,0.57l-0.99,1.56l-1.68,-1.39l-0.92,-0.24l-6.51,0.63l-1.69,-0.55l-5.44,-3.16l-1.64,-1.95l-1.34,-1.0l-3.16,-0.75l-5.2,-0.19l-1.54,-3.01l-1.62,-1.0l-4.91,-0.63l-12.52,-6.31l-1.37,-0.04l-1.02,1.63l-2.4,1.11l-1.29,1.05l-4.29,-0.78l-1.62,-0.78l-4.54,-2.93l-1.94,-2.14l-1.2,-0.68l-1.05,0.26l-0.91,1.14l-1.57,0.16l-0.91,-0.24l-5.29,-3.58l-0.45,-2.39l-6.14,-6.86l-1.83,-1.64l-2.35,-1.12l-1.04,-2.24l-2.57,-2.1l-1.1,-1.78l-0.78,-1.94l0.18,-0.53l0.75,-1.03l1.24,-3.22l2.18,-1.89l0.42,-0.85l-1.58,-2.49l-1.43,-0.44l-0.82,-0.87l-0.22,-3.42l1.41,-3.34l1.39,-2.35l-0.54,-2.49l0.4,-1.41l-0.17,-0.9l1.67,-2.79l0.84,-2.57l-0.06,-0.8l-0.92,-1.47l1.04,-0.59l0.71,-0.89l2.03,-3.68l0.29,-1.11l-0.07,-1.93l0.62,-1.6l-0.69,-0.46l-1.22,0.42l-2.11,0.12l-2.5,-2.97l-0.82,-0.54l-1.17,-0.23l-0.88,0.53l-0.57,1.95l-0.64,0.66l-2.14,0.61l-1.09,-0.25l-0.6,-0.7l-0.12,-0.96l1.52,-1.8l-0.03,-0.65l-1.0,-0.56l-2.71,0.1l2.65,-3.43l1.0,-7.16l2.12,0.06l2.08,-0.84l1.13,-1.67l1.02,-2.67l0.18,-2.6l-1.77,-1.68l-0.61,-1.91l-1.27,-1.95l0.04,-0.55l1.77,-1.93l-0.24,-0.97l-0.97,-1.29l-0.14,-1.2l3.23,-2.38l0.6,-1.83l-0.1,-0.97l-2.51,-6.15l-0.71,-0.68l-2.9,-0.88l-3.81,0.88l-1.98,-0.07l0.04,-1.32l-0.51,-0.97l-0.8,-0.75l-0.87,-0.31l-6.99,0.71l-2.43,-0.07l-1.52,0.49l-1.52,-0.26l-4.0,-1.73l-2.72,-0.45l-6.05,-3.35l1.24,-1.7l0.53,-1.54l-0.2,-0.49l-1.36,-0.62l-2.96,-0.11l-1.23,-0.81l-2.94,-3.67l-1.9,0.13l-3.46,1.45l-1.45,-0.21l-1.37,-3.72l-1.32,-0.74l-3.18,-0.11l-0.68,-0.29l0.99,-1.68l-0.01,-1.39l-1.2,-0.88l-4.52,0.93l-4.71,-1.53l-4.01,-0.79l-2.86,-2.43l-2.42,-0.67l-2.37,0.43l-3.15,1.8l-1.69,0.39l-1.97,-0.29l-1.51,-0.76l-3.52,-3.4l-1.27,-1.94ZM712.51,352.17l-2.13,2.83l-0.24,0.84l0.49,0.59l2.72,1.47l3.86,0.55l1.44,-1.1l3.96,-1.53l1.03,0.13l2.59,1.49l4.07,-1.29l0.78,1.4l0.65,0.35l0.6,0.08l3.06,-0.87l2.86,2.7l1.94,0.73l3.1,0.02l0.39,-0.32l0.19,-1.0l-0.28,-2.36l0.63,-0.46l2.24,-0.55l0.71,0.29l1.11,1.71l0.74,0.37l1.99,0.05l1.22,-0.76l1.06,-0.11l5.52,2.1l2.54,0.69l1.57,-0.07l0.77,0.85l0.5,3.96l0.6,0.76l1.26,-0.25l1.55,-2.46l2.57,-0.77l0.7,-0.63l0.4,-1.04l-0.21,-2.54l0.65,-1.13l2.22,-1.63l0.44,-0.98l0.1,-1.6l0.96,-0.76l0.18,-0.9l-1.61,-1.58l-3.92,-1.47l-1.78,-1.88l-1.41,-0.65l-3.7,0.31l0.05,-0.91l2.27,-4.37l-0.05,-1.23l-0.35,-0.36l-2.02,-0.24l-1.35,-0.5l-4.13,-2.37l-6.4,-6.13l-0.3,-0.98l0.18,-3.28l-3.1,-2.94l-0.74,0.12l-2.3,1.8l-0.69,1.04l-2.54,-0.92l-2.28,1.57l-0.89,1.39l-1.32,0.29l-3.59,-0.21l-1.51,-0.55l-0.47,-0.46l-0.28,-3.06l-1.65,-0.12l-0.75,0.48l-1.01,1.99l-0.99,0.74l-0.78,0.37l-2.79,0.34l-0.59,0.41l-1.16,3.09l0.7,1.81l-5.25,-1.72l-0.67,0.17l-1.1,2.14l0.34,1.33l-0.73,6.75l1.54,2.43l0.01,0.51l-4.11,3.6l-0.55,2.59l0.67,1.81Z\", \"name\": \"Brandenburg\"}, \"DE-NI\": {\"path\": \"M115.46,378.55l-1.27,-3.35l0.06,-2.28l2.67,-5.76l0.81,-5.02l-1.43,-3.48l-5.97,-7.99l-1.08,0.11l-1.56,1.6l-2.34,0.56l-2.5,0.14l-2.7,-0.36l-5.11,-1.6l-7.72,-0.9l-2.47,-0.99l-1.81,-1.73l-0.55,-1.82l-0.49,-4.67l-0.94,-1.66l1.11,-0.1l5.45,-2.26l0.07,-0.7l-3.17,-2.2l-0.57,-0.7l0.61,-3.17l-0.67,-1.31l3.07,-1.83l3.18,-0.81l9.21,-0.12l5.15,1.28l4.89,-0.57l4.92,1.39l0.44,-0.17l1.79,-2.83l0.78,-4.85l0.91,-14.28l0.84,-4.36l1.72,-3.95l8.07,-10.41l2.13,-4.45l0.93,-4.33l0.16,-4.89l-0.91,-9.52l-1.22,-2.76l-0.07,-1.46l2.3,-6.28l0.31,-2.15l-0.36,-5.66l1.96,-1.4l1.78,-2.46l0.39,-1.72l-0.65,-1.5l2.25,-2.78l1.17,-0.49l2.15,-0.03l2.03,0.44l3.4,1.75l1.85,0.61l0.46,-0.16l-0.02,-0.48l-2.36,-2.83l-4.08,-1.29l-22.38,-0.66l-3.4,-1.37l-1.35,-3.49l-0.03,-9.79l0.41,-2.17l1.88,-4.01l0.44,-2.0l0.65,-0.98l5.6,0.72l0.43,-0.22l0.46,-0.95l0.99,-0.52l0.71,-1.31l-0.23,-2.15l-1.01,-1.06l-2.81,-1.15l-1.11,-0.93l-0.17,-1.42l1.22,-1.3l3.18,-1.82l3.53,-3.21l1.94,-1.1l3.58,-3.03l7.63,-2.42l14.93,-1.37l2.11,1.74l2.47,0.45l14.46,-2.45l29.37,-3.34l7.48,1.77l-0.59,4.64l2.75,4.86l4.1,4.31l3.18,1.83l-0.79,2.11l0.21,0.55l3.61,1.09l0.91,1.16l-0.27,2.14l-0.82,1.08l-2.03,1.25l-1.68,0.71l-3.8,0.28l-1.88,0.92l-0.19,0.51l1.79,4.46l0.92,1.72l1.42,1.28l2.69,-0.78l1.49,0.05l1.02,0.45l3.3,2.65l1.97,2.6l1.57,0.6l1.65,-0.04l2.49,-0.83l1.28,-1.04l2.07,-2.81l2.26,-4.79l0.53,-4.59l-2.97,-3.03l-4.15,0.72l-1.61,-0.22l0.15,-1.52l0.84,-2.23l0.69,-4.5l0.77,-1.77l1.18,-1.02l1.53,-0.5l3.96,-0.16l1.71,0.64l3.93,4.81l4.05,1.68l8.34,1.33l3.5,1.38l0.0,0.51l-2.23,1.57l-2.16,2.13l-1.7,3.11l-0.6,3.95l0.12,7.57l0.62,3.43l1.33,2.46l0.43,0.2l0.32,-0.36l0.29,-3.39l-1.03,-8.32l0.08,-3.82l1.4,-2.72l4.03,-2.71l1.35,2.04l0.82,0.41l0.67,-0.14l0.87,1.2l0.75,0.15l2.39,-1.76l1.52,-1.93l0.36,-1.37l0.0,-1.94l-0.66,-2.81l-1.46,-3.59l1.02,-1.68l0.0,-0.68l-0.94,-0.41l-3.99,0.14l-2.08,-0.3l-4.64,-1.39l-1.09,-3.47l-1.37,-3.0l-0.3,-2.13l0.21,-2.17l0.58,-1.91l3.68,-7.48l2.6,-8.07l1.65,-3.52l1.35,-1.64l1.85,-1.44l2.09,-1.01l2.12,-0.4l1.94,0.11l1.04,0.37l2.4,2.2l3.55,2.43l3.79,1.59l7.76,1.55l4.28,-0.11l7.08,-1.43l3.88,0.25l2.06,-1.78l7.65,-1.52l7.72,0.06l1.68,-0.91l1.28,0.74l1.61,0.24l3.29,-0.12l2.8,2.62l9.59,13.75l3.95,3.77l2.77,1.85l1.26,1.32l1.39,4.1l6.74,8.07l1.67,1.23l5.35,1.36l5.81,3.25l6.45,1.19l0.53,5.24l0.83,0.75l0.54,1.1l1.04,0.79l1.06,2.44l1.22,1.71l4.04,3.28l1.17,-0.02l1.34,-1.59l1.38,-0.43l0.72,0.77l0.36,2.98l0.47,0.57l1.03,0.08l2.4,-0.92l2.11,1.06l0.92,0.1l3.61,-1.01l1.68,-0.82l0.46,-0.52l0.05,-1.32l4.58,-1.24l2.69,2.2l2.0,0.47l2.17,2.24l1.6,0.94l1.86,0.35l5.4,-0.3l2.63,-2.81l1.7,-0.67l6.27,0.08l3.44,1.07l13.9,6.86l4.11,1.16l3.3,-1.05l7.18,-0.24l3.19,0.68l1.97,2.0l0.29,3.96l0.69,2.03l1.7,0.76l1.8,0.34l3.11,3.24l3.13,2.07l8.94,4.23l10.75,8.24l4.89,2.99l1.4,-0.58l0.98,-0.99l3.25,-2.19l1.04,-0.13l0.63,0.31l3.15,4.06l0.99,-0.04l1.99,-1.5l1.34,1.35l1.51,0.74l3.41,4.98l3.6,3.47l1.72,0.88l2.23,0.35l1.97,-0.42l3.25,-1.84l1.92,-0.36l2.08,0.54l2.99,2.5l4.12,0.82l4.35,1.42l-1.68,3.84l-0.77,0.46l-2.47,-0.34l-1.12,0.2l-1.04,0.89l-0.56,1.38l-0.56,3.09l0.53,3.24l-2.91,0.34l-5.93,4.56l-3.45,0.76l-5.91,2.07l-3.37,-0.06l-1.5,0.92l-0.84,0.15l-1.33,-1.47l-1.3,-0.46l-1.27,-0.93l-4.82,-0.73l-5.72,0.35l-2.46,-0.91l-2.96,-0.63l-3.66,0.05l-1.29,0.44l-0.55,0.51l-0.87,3.09l-1.82,1.17l-0.98,1.06l-1.75,0.76l-5.41,1.56l-4.22,-0.17l-4.63,0.28l-3.37,1.07l-0.53,0.57l0.1,1.29l-0.37,1.23l0.33,2.15l-0.3,2.12l1.73,3.36l1.89,1.78l0.78,3.5l1.13,0.95l1.14,0.05l1.28,0.66l4.69,7.75l4.3,4.98l0.94,0.24l2.18,-1.25l1.53,0.6l-0.19,0.62l-2.61,2.68l-0.2,3.61l0.79,2.52l1.27,1.25l3.25,4.51l-2.52,-0.34l-2.02,0.75l-1.23,2.54l-0.26,2.01l7.18,8.09l1.1,0.74l1.63,0.46l2.76,1.91l0.46,0.76l-0.67,1.99l-5.37,0.98l-1.02,0.57l-0.16,0.6l0.42,1.71l1.99,1.01l0.29,0.99l0.68,0.86l-1.72,1.63l-0.06,1.01l2.97,3.43l1.55,0.07l0.12,1.84l0.44,0.57l0.57,-0.08l0.71,-0.9l0.41,0.68l0.05,1.57l-0.5,0.99l-4.02,1.27l-0.93,0.84l-0.85,1.67l-0.1,1.23l0.83,1.31l2.6,1.13l0.31,1.8l-0.86,1.53l-3.27,2.63l-1.99,0.93l-3.46,0.91l-1.05,0.78l0.03,1.25l1.94,1.35l0.02,1.63l-0.49,0.91l-6.4,0.12l-2.04,0.26l-2.48,0.82l-12.98,0.0l-5.61,0.73l-1.14,0.51l-0.11,1.63l-2.74,2.39l-1.03,0.26l-2.99,-0.26l-1.25,0.79l0.09,0.97l1.68,2.07l0.45,1.4l2.39,0.99l1.4,1.33l0.88,0.11l-1.44,0.6l-0.63,0.61l-0.61,2.7l0.4,0.91l1.85,1.1l0.42,3.24l-1.01,1.48l-1.41,0.7l-0.96,1.26l-2.27,1.25l-0.47,5.79l0.76,3.7l1.88,1.76l1.54,0.91l0.81,2.15l1.56,2.58l1.95,1.85l0.47,1.72l0.05,3.22l2.55,3.87l-4.37,2.1l-1.93,1.89l-0.17,1.13l2.41,2.9l-0.28,1.58l-0.66,-0.13l-1.34,-1.22l-0.91,-0.14l-5.99,2.2l-4.05,0.05l-3.45,-2.38l-4.79,-2.12l-1.12,-0.13l-4.61,0.8l-0.33,0.78l0.52,1.1l-0.13,0.92l-1.26,3.01l-2.25,1.73l-0.56,0.95l-3.3,1.84l-0.96,2.03l-5.65,2.71l-1.08,-0.06l-1.01,-1.16l-2.25,0.27l-0.95,0.96l-0.19,0.79l0.23,0.63l-0.88,1.42l-2.15,0.83l-0.44,0.51l0.07,0.79l-4.27,-0.14l-1.56,0.26l-1.43,1.41l-2.09,-1.47l-0.61,-0.1l-1.18,1.11l-2.01,0.97l-1.17,1.15l-4.75,3.28l-3.87,-2.56l-0.25,-1.82l-1.11,-0.36l-1.26,1.02l-1.8,0.12l-0.56,0.44l0.01,1.23l1.21,2.13l-1.09,1.14l-0.79,-0.44l-1.69,-2.82l-2.48,-1.28l-1.37,-0.18l-0.39,0.67l0.45,1.17l-0.62,0.54l-2.41,0.65l-5.53,3.1l-0.02,0.88l0.65,1.14l3.25,2.63l0.78,0.04l1.49,-1.24l0.85,0.04l-1.09,1.29l-0.31,1.41l-4.09,3.01l-1.1,-0.09l-2.86,-3.04l-1.29,-0.6l-1.4,-0.02l-8.42,-2.95l-2.76,-2.13l1.84,0.52l1.0,-0.1l0.41,-0.79l-0.87,-2.39l1.42,-1.62l1.48,0.17l3.54,-0.51l0.61,-0.48l0.32,-0.8l-0.35,-3.43l0.22,-1.72l-0.67,-1.45l0.79,-1.08l-0.0,-0.55l-2.2,-1.92l-2.03,-4.2l1.15,-0.18l0.53,-0.45l0.52,-3.49l1.48,0.51l1.18,-0.55l-0.94,-1.81l0.05,-0.77l3.23,1.7l0.81,-0.37l0.85,-1.46l-0.08,-0.5l-1.86,-1.65l-1.21,-3.05l-0.5,-0.51l-1.86,-0.75l-0.72,-1.56l-0.56,-0.31l-3.39,0.67l-1.85,-0.52l-0.82,-1.0l-0.88,-0.35l-2.24,1.51l-2.53,-0.16l-0.61,-0.59l-0.1,-1.76l-1.06,-0.89l-1.84,0.04l-1.55,1.24l-0.93,-0.53l-4.49,1.16l-1.27,-0.04l-0.33,-0.6l0.14,-2.05l1.1,-0.82l0.42,-0.92l-0.26,-1.61l0.62,-1.44l-0.35,-2.27l0.09,-1.97l0.97,-1.1l0.45,-1.29l1.54,-0.82l1.19,-1.09l1.83,-4.09l0.1,-3.07l0.87,-1.01l-0.0,-0.49l-2.09,-1.12l1.52,-1.85l0.52,-1.31l-0.12,-0.43l-0.96,-0.45l-2.14,0.73l-2.17,0.28l-4.42,-0.14l-3.68,0.78l1.21,-2.96l0.24,-1.56l-0.82,-2.63l-0.65,-0.77l-2.46,-0.96l-3.71,0.26l1.38,-1.61l1.11,-3.64l-0.01,-1.25l-4.14,-1.68l-1.96,0.4l-0.87,1.33l-4.09,-1.65l0.35,-1.29l1.55,-1.13l0.61,-1.57l-2.17,-5.31l1.26,-2.23l-0.13,-1.54l-1.36,-1.61l-2.66,-0.94l-0.67,-0.58l0.56,-2.1l-0.42,-0.74l-0.99,-0.53l-7.02,-0.81l-3.33,0.12l-2.84,0.49l0.93,-1.56l0.05,-1.05l-1.75,-3.98l2.55,-0.61l2.71,-0.03l0.42,-0.72l-0.88,-2.83l0.24,-0.48l3.03,-2.05l-0.37,-0.75l-2.65,-0.59l-5.42,-1.94l-0.31,-0.92l1.2,-6.89l1.09,-1.98l3.88,-0.02l2.7,-1.32l2.14,-3.59l3.22,-4.3l-1.8,-5.79l1.98,-1.61l0.46,-1.66l-0.36,-0.48l-1.9,-0.68l-1.64,-1.87l-1.76,-0.31l-5.64,2.47l-3.2,2.9l-2.43,5.57l-0.6,0.76l-6.47,1.19l-3.46,1.17l-3.1,0.29l-11.05,-1.16l-0.34,-1.5l0.39,-2.62l-0.58,-1.49l0.25,-2.87l-0.36,-2.11l-2.87,-4.32l-1.71,-1.2l-1.77,-0.58l-1.21,0.05l-4.82,1.94l-1.5,0.25l-4.82,-0.13l-2.27,0.32l-3.29,2.31l-1.15,4.18l-0.92,0.77l-1.62,0.63l-5.46,0.59l-1.93,-0.59l-2.26,-0.0l-2.14,-0.66l-0.49,0.52l1.95,5.39l1.3,1.69l6.51,2.58l2.76,1.65l1.18,1.57l0.83,2.02l1.01,4.38l0.09,11.88l0.43,1.49l3.2,1.97l-0.55,1.26l-1.48,1.81l-4.92,2.75l-0.82,1.03l-1.0,2.34l-0.51,0.29l-0.57,0.12l-12.68,-2.85l-3.2,2.34l-2.29,2.56l-2.84,1.69l-6.78,2.13l-3.58,-1.05l-3.66,0.55l-1.61,0.66l-4.65,3.55l-2.3,-1.12l-3.31,-1.03l-1.95,-4.25l0.09,-0.44l1.01,-0.92l1.66,-1.09l2.38,-0.91l4.44,-0.76l1.34,-3.69l1.36,-2.54l-0.13,-1.03l-2.75,-1.05l-4.25,0.24l-0.58,-0.37l-0.63,-1.57l-2.6,-0.46l-0.47,-0.59l1.57,-1.68l0.83,-1.43l0.02,-0.69l-0.9,-1.99l2.07,-1.89l0.88,-1.35l-0.05,-0.6l-1.31,-1.82l-0.28,-1.23l3.7,-0.71l0.46,-0.33l0.02,-0.85l-3.03,-4.39l-3.79,-4.04l-1.29,-0.17l-6.88,2.01l-1.96,-1.62l-6.64,-3.45l-2.38,-0.72l-0.49,-0.57l-1.06,-5.25l-0.47,-0.81l-0.94,-0.61l-7.02,-1.79l-1.14,0.23l-0.82,1.0l-1.19,4.42l0.45,1.23l1.48,1.15l-1.05,0.79l-1.37,3.44l-1.33,1.45l-2.55,-0.26l-2.1,0.49l-4.64,3.18l-4.97,4.25l-1.66,0.81l-3.05,0.66l-6.57,4.03l-3.97,0.72l-13.48,0.46l-2.82,1.87l-3.94,1.38l-2.32,-0.08ZM267.32,254.66l3.32,0.02l0.42,0.3l1.31,2.15l0.22,2.67l0.49,1.35l1.59,1.98l4.61,4.16l0.05,4.06l0.58,0.68l1.55,0.22l5.01,-0.89l5.07,2.57l2.07,0.29l2.05,-0.57l0.52,-1.0l4.53,2.68l4.27,-2.41l1.66,-1.57l0.62,-3.85l1.06,-1.85l-0.49,-1.03l-2.34,-2.04l-0.27,-0.6l1.56,-1.38l0.07,-0.82l-3.71,-3.45l-0.75,-0.19l-0.77,0.38l-1.49,2.82l-1.38,0.03l-3.32,-1.36l-3.71,-2.54l-4.35,-0.27l-2.53,-1.4l-0.19,-0.99l-0.64,-0.48l-3.51,-0.02l-1.93,0.44l-6.98,-2.15l-2.86,-1.43l-2.49,0.47l-3.4,-1.71l-1.19,-0.2l-2.22,0.28l-0.3,0.59l1.66,3.23l4.26,1.53l2.28,1.29ZM227.51,180.96l-1.99,1.47l-1.87,-0.53l-0.68,0.29l1.08,-1.64l1.72,-0.61l2.03,0.27l0.75,0.44l-1.04,0.33ZM203.67,172.73l0.94,0.46l-4.32,-0.76l-1.77,0.08l-0.38,0.36l-0.09,0.99l-1.02,-0.6l0.18,-0.36l1.55,-0.47l1.98,-0.18l2.93,0.48ZM191.01,174.13l-5.02,2.07l-2.65,0.13l-2.31,-1.24l-0.49,0.09l-1.57,1.43l-0.87,-0.22l2.08,-2.12l3.95,-0.72l7.87,0.44l-1.0,0.13ZM173.77,177.67l-7.37,-0.07l-3.4,0.67l-0.32,0.35l-0.23,2.01l-2.39,0.1l-0.64,-0.46l-0.29,-1.55l0.41,-1.29l0.99,-0.5l11.55,-0.15l1.69,0.9ZM150.2,180.57l2.02,-0.32l1.74,0.31l0.88,0.58l-0.86,0.38l-3.78,-0.95ZM146.19,181.41l-4.62,1.49l-11.88,1.28l-2.78,-0.63l3.4,-1.62l5.2,-0.71l10.68,0.19ZM118.67,186.33l-15.74,1.45l1.05,-0.42l13.24,-1.39l1.45,0.37ZM104.4,192.52l-2.3,2.1l-1.24,-0.42l-1.0,-0.75l0.02,-1.31l0.81,-0.46l1.59,0.01l2.12,0.83ZM86.49,201.05l-1.79,-0.07l-1.97,0.75l-1.55,-0.63l-1.22,-1.42l-0.29,-1.2l0.84,-0.53l7.38,-1.84l3.39,-0.21l0.85,1.36l-1.66,0.21l-5.17,1.55l-0.32,0.39l0.0,0.82l0.28,0.38l1.22,0.43ZM87.0,201.35l0.07,0.04l0.19,0.21l-0.26,-0.25Z\", \"name\": \"Niedersachsen\"}, \"DE-MV\": {\"path\": \"M481.88,178.09l1.27,-5.8l-0.83,-3.75l-1.13,-2.45l0.29,-1.56l0.83,-1.66l4.68,-2.26l4.85,-3.67l2.24,-1.2l1.72,0.43l-0.12,1.14l0.99,0.72l3.24,-0.41l1.7,-0.93l0.16,-0.56l-0.33,-0.33l-3.9,-1.01l-0.81,-0.48l-0.52,-0.73l0.03,-3.3l1.59,-0.26l4.11,-3.22l3.45,-0.82l5.17,-2.25l11.79,-1.27l0.68,0.21l0.55,0.62l0.61,1.82l0.75,1.05l3.59,0.9l0.34,0.43l-0.43,2.9l0.44,1.82l1.39,0.62l3.84,-0.01l3.92,-2.68l0.43,0.23l0.95,1.8l0.72,0.58l3.97,0.08l3.88,4.15l1.03,0.52l1.12,0.0l0.4,-0.36l0.12,-1.35l1.74,-4.84l-0.39,-2.18l0.58,-0.78l1.57,-0.67l0.3,-0.51l-0.53,-2.5l3.15,-2.59l0.06,-1.4l2.37,0.48l2.19,-1.25l1.85,-3.64l2.07,-0.97l1.22,-1.54l0.55,-1.83l-0.73,-0.73l0.25,-0.95l3.14,-4.29l2.97,-1.67l3.7,-0.43l8.27,1.17l23.4,-4.06l3.29,-1.69l0.42,3.25l-0.36,3.7l0.21,3.25l2.42,2.44l0.52,0.02l0.1,-0.51l-0.91,-1.57l-0.48,-3.42l-0.47,-1.21l0.85,-1.3l2.72,-1.25l1.04,-2.02l-0.33,-0.57l-1.1,-0.09l-1.94,0.39l3.27,-3.47l2.05,-1.51l2.28,-3.09l9.96,-4.23l3.84,-2.6l1.52,-1.45l3.52,-5.52l1.05,-1.22l-0.59,1.13l0.6,1.49l-0.41,1.37l-1.07,1.02l-1.5,0.28l-0.3,0.53l1.67,4.2l-0.96,0.92l0.08,0.64l4.28,2.4l2.76,0.51l2.1,-1.06l0.21,-0.46l-0.4,-0.3l-1.44,0.05l-1.04,-0.41l-1.72,-1.22l0.5,-1.24l0.86,-1.09l2.41,-1.89l2.2,-1.01l0.58,-2.84l1.52,-1.04l6.33,-2.46l0.06,-0.72l-1.75,-0.91l0.0,-0.3l1.47,-0.44l1.21,0.48l0.61,-0.48l1.52,0.93l3.01,-0.65l5.35,-2.46l0.19,-0.54l-0.53,-1.6l1.75,-0.75l1.13,-0.12l0.84,0.07l0.0,0.31l-1.37,0.36l-1.07,1.21l-0.6,1.63l-0.24,1.69l0.25,0.43l0.47,-0.14l1.82,-3.02l1.44,1.83l1.27,0.53l1.27,-0.9l0.88,0.63l1.3,0.04l1.61,-1.19l1.23,2.28l2.15,2.08l3.54,-0.17l1.13,-0.3l1.19,-0.87l2.71,-4.6l2.43,-1.94l3.83,-2.0l3.76,-1.13l1.58,0.38l-0.75,0.77l-0.02,1.78l0.74,1.72l1.22,1.43l4.35,1.86l0.83,0.64l-1.7,2.66l0.47,2.25l2.74,3.57l0.27,2.86l0.51,1.42l1.24,0.49l3.99,0.0l-2.46,1.08l-0.2,0.46l0.41,0.29l3.11,-0.24l5.03,2.31l3.47,0.68l2.36,1.04l3.17,5.26l2.26,1.65l-2.2,1.58l-0.12,0.44l0.38,0.26l2.45,-0.02l3.67,-1.49l1.35,0.42l-0.96,1.68l-0.73,0.52l0.06,0.68l1.5,0.58l1.28,-0.7l0.58,0.13l3.09,5.62l1.6,1.75l2.0,1.01l2.31,0.03l0.41,-0.4l-0.16,-1.24l-2.58,-2.64l0.0,-0.38l11.86,-1.89l2.96,-1.11l4.97,-2.74l2.47,-0.67l0.11,0.58l-1.67,0.89l0.25,1.2l2.96,1.24l7.58,5.14l0.0,0.58l-1.4,1.99l-0.8,2.57l-1.13,2.22l-2.54,1.27l-0.03,0.7l1.14,0.71l3.92,4.35l3.93,1.64l0.96,2.37l0.13,1.83l0.62,0.29l1.32,-0.1l3.52,1.43l0.11,0.95l-0.54,1.35l-1.02,1.17l-7.11,4.79l-1.03,2.12l1.08,1.82l4.32,1.47l0.64,1.45l1.44,1.69l1.65,1.21l1.2,-0.08l7.09,4.81l3.28,0.64l2.2,1.94l2.93,-0.02l3.77,1.62l7.89,0.48l2.88,-0.69l1.36,-1.95l0.53,-0.3l1.33,0.21l1.2,0.95l0.24,1.85l-0.62,0.81l-4.53,2.63l0.03,0.71l2.74,1.01l2.06,0.16l0.11,3.31l-0.35,2.31l1.47,2.6l2.03,5.14l-0.01,9.18l0.78,2.91l2.34,2.95l1.05,2.83l2.0,2.75l1.02,6.87l1.97,7.47l-6.36,3.2l-2.8,2.92l-2.51,1.0l-0.8,1.97l-1.14,0.69l-6.32,-0.5l-7.49,-1.23l0.07,-1.99l8.07,-4.44l3.64,-4.68l1.56,-2.97l0.5,-2.61l-0.15,-3.62l-0.33,-0.38l-2.38,-0.42l-4.03,0.2l-3.65,-1.45l-2.68,0.55l-1.84,2.12l-4.36,-1.07l-5.89,-0.35l-6.67,0.4l-1.35,-1.65l-0.55,-1.85l-2.78,-4.12l-0.15,-2.8l-0.28,-0.36l-4.46,-1.42l-2.37,-3.03l-1.95,-0.36l-0.45,0.37l-0.11,2.73l2.43,3.71l0.34,1.25l-2.47,0.89l-3.35,-0.2l-3.69,0.49l-5.95,4.16l-1.9,2.75l-2.07,1.57l-3.36,0.12l-2.06,0.87l-1.49,1.2l-0.78,1.6l-0.52,2.46l-3.14,6.23l-2.25,2.12l-1.08,0.32l-5.11,3.37l-1.58,0.46l-1.65,-0.34l-4.03,-1.74l-2.16,-0.35l-2.69,0.23l-1.67,0.7l-1.73,1.64l-1.31,2.48l-0.54,2.42l-2.37,0.0l-1.05,-0.39l-2.24,-2.7l-1.49,-0.38l-0.95,0.24l-3.38,2.33l-0.75,1.93l-0.63,0.7l-5.62,3.47l-3.89,3.57l-2.31,0.33l-2.6,-1.06l1.35,-1.58l-0.23,-0.9l-0.71,-0.49l-2.07,0.58l-2.65,0.02l-3.83,0.71l-1.26,-0.27l-1.45,-0.99l-1.48,-0.42l-1.47,-0.08l-4.28,0.77l-1.03,-0.09l-0.84,-0.76l-0.44,-3.33l-1.02,-0.5l-2.4,-0.1l-3.98,-0.9l-2.57,-2.14l-1.45,-0.6l-11.0,-2.21l-3.17,0.63l-3.42,0.2l-1.36,-0.24l-1.39,-1.6l-2.87,-1.35l-1.69,-1.51l-3.01,-1.91l-4.27,-2.04l-6.72,-1.48l-2.18,-3.07l-1.48,-0.52l-1.36,0.31l-2.9,1.65l-1.67,-1.38l-0.83,-0.27l-2.73,0.44l-3.4,1.19l-1.37,2.07l-2.51,1.41l-0.35,2.12l-0.8,1.81l-1.46,0.23l-3.54,2.59l-1.86,-0.59l-5.53,1.92l-2.27,2.22l-2.68,-0.5l-1.8,0.75l-0.04,0.69l1.83,1.19l0.2,1.19l-4.83,-0.16l-3.84,1.51l-1.16,-2.07l-3.11,-2.09l-1.4,-0.41l-3.47,0.18l-5.42,1.68l-1.98,1.07l-4.34,3.27l-0.73,1.46l0.23,1.27l1.3,1.5l0.92,3.96l-0.59,1.85l-1.78,1.11l-2.39,0.19l-5.25,-2.44l-3.37,-0.04l-1.92,0.94l-0.43,2.95l-1.38,-0.16l-2.38,-0.84l-3.17,0.0l-2.36,-0.41l-1.94,0.19l-1.7,-2.33l-1.63,-0.83l-1.49,-1.47l-0.43,-0.03l-2.56,1.58l-2.84,-3.85l-0.96,-0.51l-1.64,0.19l-5.08,3.67l-4.62,-2.83l-10.76,-8.25l-8.97,-4.25l-3.06,-2.02l-3.18,-3.29l-3.42,-1.07l-0.41,-1.54l-0.3,-4.04l-2.26,-2.41l-3.66,-0.83l-6.36,0.22l1.87,-2.81l0.96,-6.46l0.4,-0.57l2.56,-1.02l2.21,0.2l0.63,-0.57l0.84,-2.19l5.35,-1.32l6.28,-3.89l0.24,-2.17l0.93,-2.22l-0.43,-2.79l0.74,-0.1l1.67,0.49l5.12,-0.46l0.7,0.9l0.38,1.6l0.94,0.58l1.03,-0.62l1.68,-1.92l-0.45,-0.76l0.36,-0.4l-0.03,-1.53l-1.19,-3.64l-0.06,-1.97l1.42,-1.15l0.2,-2.07l-1.01,-2.08l-0.06,-1.48l-0.36,-0.71l-1.78,-1.65l-1.19,-0.66l-2.83,-0.7l-2.05,0.25l-0.63,-0.29l-5.03,-5.16l-4.54,-0.84ZM642.03,96.75l2.68,-3.13l-0.63,2.04l0.39,1.75l-1.9,-0.76l-0.53,0.09ZM646.29,91.77l5.12,-7.49l1.57,-3.56l1.02,-1.06l0.94,-0.38l-0.15,0.3l2.09,2.72l4.42,1.54l22.39,0.02l3.61,1.41l2.46,-1.0l2.55,0.51l0.89,1.08l-2.02,1.51l-2.37,0.42l-10.42,-0.72l-4.15,-1.26l-2.84,-0.27l-0.94,0.39l-1.41,1.42l-4.37,-0.38l-1.18,0.46l-0.54,1.22l-0.68,-0.41l-1.93,0.97l-0.31,0.45l0.18,1.16l0.46,0.67l-0.88,-0.33l-2.27,0.21l-1.77,0.96l-0.78,1.25l-1.36,-1.34l-2.06,-0.82l-3.55,-0.27l-1.75,0.64ZM798.18,135.23l2.91,1.47l17.21,15.3l1.48,0.9l-1.46,3.17l-1.53,0.57l-0.19,0.67l1.65,1.65l0.58,1.53l-10.57,0.99l-2.07,-0.25l-1.58,-0.9l-0.47,0.05l-2.24,2.05l-2.77,1.31l-5.55,1.2l-6.12,0.08l-3.28,-0.8l-1.29,-1.44l2.73,-1.47l3.19,-0.58l3.4,-1.59l1.13,-1.09l0.66,-4.18l-3.57,-5.48l0.22,-2.93l4.5,0.22l1.2,0.4l-0.38,0.56l0.15,0.98l-0.76,2.6l-0.13,2.14l0.27,0.4l0.46,-0.15l1.47,-2.12l1.08,-0.47l2.68,0.0l-0.52,1.44l0.29,0.47l3.34,0.84l0.46,-0.55l-0.72,-1.6l1.22,-3.31l-0.18,-3.59l-1.42,-2.43l-0.47,-0.17l-1.9,0.64l-1.77,-3.7l-1.46,-1.56l-1.7,-1.06l-1.94,-0.38l-2.1,0.34l-1.22,1.15l0.76,2.71l-1.6,1.17l-1.07,2.06l-0.41,0.19l-2.81,0.86l0.13,-1.11l1.42,-1.77l0.37,-1.03l-0.51,-1.88l-1.02,-0.45l-4.22,1.64l-2.77,2.59l-1.39,-0.44l0.66,-2.18l2.64,-4.4l0.59,-3.89l-0.97,-2.23l-3.98,-3.38l-1.02,-1.27l0.73,-1.23l1.4,-1.19l1.62,-0.51l1.59,0.54l2.75,5.55l1.2,1.8l2.68,2.23l6.55,3.11l3.73,1.16ZM717.1,70.94l0.86,-0.33l7.41,-0.88l1.4,0.26l0.65,0.83l2.08,0.95l0.91,2.64l0.59,0.17l0.92,-0.75l0.37,-1.54l-0.73,-2.11l2.98,-2.84l2.59,-1.34l-0.78,1.96l-1.6,2.28l1.38,0.3l0.56,0.55l-1.27,2.45l0.34,0.57l1.55,0.06l1.3,-0.43l0.97,-0.99l0.59,-1.5l-0.15,-0.28l2.04,2.68l-0.5,2.26l1.94,2.26l2.76,0.85l5.06,-0.1l0.32,-0.63l-0.58,-0.81l0.81,-1.53l1.19,-1.21l0.0,-1.0l-0.82,-2.08l-1.25,-1.71l0.0,-0.53l2.07,-1.24l0.0,-0.83l-0.42,-0.4l-1.44,0.13l-2.04,1.73l-4.14,-0.01l-1.71,-2.32l-2.38,-0.69l-2.79,-4.19l-0.59,-0.19l-2.12,1.56l-1.57,1.74l-2.23,1.09l-3.33,2.46l-1.56,-0.4l-0.27,-1.27l0.66,-2.36l1.21,-2.17l1.43,-1.1l0.74,-1.91l0.19,-1.57l-0.73,-0.79l-4.39,0.92l-1.58,0.74l0.04,-1.14l0.47,-0.77l2.06,-1.48l13.37,-3.12l2.61,-0.03l2.27,0.99l0.0,0.36l-5.15,3.06l-0.91,2.1l0.3,2.72l0.9,2.03l1.37,1.57l1.77,1.18l4.26,1.13l12.66,-1.96l4.19,0.74l2.78,2.47l0.59,3.18l-2.4,3.07l-4.28,2.3l-2.21,1.72l-1.07,2.36l0.38,2.35l0.86,2.37l2.2,3.34l2.24,0.98l4.58,0.9l1.91,1.1l2.56,3.78l1.72,1.82l1.71,0.59l-1.88,1.65l-1.04,1.84l-0.61,4.97l-1.03,-0.15l0.56,-0.37l0.42,-1.18l-0.4,-1.44l-0.39,-0.29l-0.93,0.1l-0.94,0.82l-1.37,0.42l-1.45,0.02l-0.87,-0.32l0.0,-0.35l3.37,-1.17l1.59,-1.01l0.95,-1.69l-0.38,-0.59l-4.86,0.27l2.95,-1.26l0.27,-0.38l0.0,-0.92l-0.37,-0.4l-2.64,-0.2l-1.61,0.16l-2.18,1.69l-1.33,-1.1l-1.32,-0.55l-9.78,0.92l-1.95,0.97l-5.19,3.7l-2.26,3.44l-2.3,0.4l-2.4,1.24l-0.38,3.61l0.62,0.37l1.34,-0.92l0.17,-1.07l4.01,-0.37l0.65,2.8l-0.16,1.11l-1.24,0.49l-2.67,-0.34l-3.04,-0.87l-2.94,-1.56l0.47,-0.5l1.52,-3.61l-0.08,-0.46l-0.46,-0.08l-1.52,0.75l-1.29,1.29l0.11,0.63l-2.2,0.09l-1.51,0.81l-2.31,-1.61l-3.15,-0.9l-0.85,-0.92l0.48,-1.51l-0.29,-0.51l-1.67,-0.33l-3.63,1.23l-0.4,-0.62l0.38,-0.57l1.05,-0.32l1.37,0.46l0.53,-0.38l0.0,-0.85l-5.97,-3.92l1.18,-2.54l1.83,-2.27l2.22,-0.81l2.84,1.5l0.51,-0.12l0.43,-0.59l1.12,0.72l1.49,-0.24l2.92,-1.61l0.2,-0.43l-0.36,-0.32l-1.42,-0.13l-0.98,-0.77l-0.39,-1.08l0.43,-2.25l-0.37,-0.4l-1.21,-0.09l-1.21,-1.26l-1.17,-0.47l-3.67,0.72l1.81,-2.6l2.61,-0.53l2.92,-1.24l1.96,-0.29l0.34,-0.4l0.0,-0.64l1.22,-0.93l-0.17,-0.66l-3.75,-1.4l-0.54,-0.84l0.67,-0.9l-0.06,-1.13l-0.52,-0.34l-2.85,0.91l-1.55,0.14l-1.67,-1.29l-0.34,-2.16l-0.75,-0.98ZM739.74,70.67l-2.16,-0.9l0.0,-0.41l0.82,-0.62l1.34,1.93ZM708.19,76.74l0.04,-0.44l3.06,-8.86l0.66,-3.4l0.57,-0.76l1.43,-0.3l2.19,0.07l0.42,1.09l-0.55,0.2l0.0,-0.75l-0.62,-0.33l-2.57,1.82l-0.58,2.3l-0.09,2.57l-0.9,2.68l-2.11,1.75l-0.95,2.35ZM557.96,136.39l-0.46,-2.08l0.42,-0.96l5.48,-2.14l-4.16,3.09l-1.28,2.09ZM553.57,141.62l-2.73,6.57l-0.88,1.07l-0.66,0.02l0.62,-2.98l-0.43,-1.56l-0.38,-0.29l-1.19,0.21l-0.56,1.41l0.38,1.58l-1.1,0.75l-1.36,-0.06l-2.68,-1.57l1.26,-2.66l3.41,-2.37l3.87,-1.03l2.42,0.91Z\", \"name\": \"Mecklenburg-Vorpommern\"}, \"DE-TH\": {\"path\": \"M402.19,500.97l-0.34,-2.77l-0.3,-0.79l-0.99,-0.96l-0.56,-2.07l0.55,-1.65l6.77,-4.71l1.13,-1.12l2.04,-0.99l0.85,-0.94l2.62,1.57l0.6,-0.21l1.05,-1.24l1.28,-0.22l4.86,0.16l0.38,-0.56l-0.28,-0.79l1.43,-0.39l1.04,-0.73l0.98,-1.6l-0.07,-1.35l0.65,-0.63l1.64,-0.18l0.79,1.07l1.57,0.18l6.05,-2.87l1.05,-2.11l3.21,-1.76l0.66,-1.04l1.54,-0.93l0.78,-0.87l1.55,-4.04l-0.52,-1.57l4.31,-0.69l0.76,0.13l4.61,2.05l3.63,2.45l4.38,-0.05l5.91,-2.19l0.4,0.03l1.34,1.21l1.03,0.34l0.96,-0.74l0.27,-1.47l-0.34,-0.93l-2.2,-2.53l0.14,-0.48l1.6,-1.55l4.54,-2.19l1.57,0.77l8.78,-0.19l4.35,1.9l2.91,0.08l1.24,1.0l3.26,1.13l1.32,0.05l0.57,0.58l0.58,1.96l-0.87,0.4l-1.43,-0.5l-1.0,0.14l-0.62,0.69l0.01,0.96l1.46,3.53l1.96,2.16l-0.13,3.01l1.55,2.97l1.0,1.28l-0.69,4.97l1.02,1.61l2.73,1.27l15.19,1.55l4.18,-0.07l9.05,1.11l2.46,0.7l5.01,3.28l2.66,4.18l5.47,6.78l-1.54,2.38l-1.08,0.84l-2.39,1.13l-4.99,0.81l-1.09,1.07l-0.46,1.08l1.3,1.73l2.21,1.21l2.1,0.68l2.95,3.75l0.58,1.98l0.11,1.7l-0.76,0.33l-0.32,0.76l0.72,2.5l1.11,1.21l1.82,0.66l5.38,0.23l3.04,-1.43l4.46,0.52l4.62,0.07l3.81,-0.66l2.3,1.43l0.38,3.14l2.26,3.58l0.55,1.81l1.51,1.17l1.05,0.21l1.16,-0.75l8.67,-0.64l1.0,0.16l2.15,1.36l4.75,1.79l1.31,1.02l1.12,2.12l3.5,1.74l0.3,1.17l0.5,0.32l4.04,-0.32l2.76,-0.57l5.71,1.52l2.69,-1.18l2.88,2.04l0.67,1.03l1.11,0.24l2.04,-1.3l-0.04,-2.32l3.36,-3.56l2.39,-3.77l0.0,-1.02l-0.57,-1.06l-2.48,-1.48l0.46,-2.42l1.68,-2.53l-0.08,-0.8l5.81,-0.49l14.88,3.75l0.76,3.76l3.0,4.34l1.01,1.97l1.5,1.27l5.45,2.39l2.27,2.99l2.01,3.61l-0.01,0.58l-1.47,0.71l-1.8,2.03l-1.16,-0.94l-1.6,0.27l-3.12,-0.36l-2.17,0.21l-1.81,-0.61l-0.53,0.3l-0.51,1.26l-3.79,1.75l-3.72,4.11l-1.56,-0.62l-3.6,0.37l-3.95,2.55l-7.1,1.78l-0.3,0.35l0.0,1.64l1.2,1.13l1.63,0.6l0.19,0.36l-1.43,1.5l-1.21,0.18l-1.11,0.78l-1.02,2.57l0.45,0.77l1.65,-0.12l0.77,0.47l-0.39,2.08l0.66,1.89l0.83,1.11l1.25,0.51l2.56,0.08l-1.69,2.45l-1.06,0.98l-3.48,2.13l-2.33,0.11l-1.91,-0.31l-2.41,0.29l-2.8,2.95l0.04,2.82l-0.63,1.84l-0.58,0.56l-2.5,0.69l-1.98,-0.8l-1.73,0.25l-2.42,3.17l-0.87,0.66l-1.37,-0.15l-1.26,-1.39l-0.83,-0.39l-1.1,-0.22l-1.39,0.41l-2.02,2.36l-2.37,1.54l-1.75,2.54l-0.15,1.46l1.69,1.39l0.34,0.72l0.04,0.98l-1.0,1.15l-0.21,1.27l-2.17,0.76l-1.15,0.83l-0.38,1.07l0.56,0.9l-2.8,1.41l-4.3,1.44l0.13,-0.82l-0.29,-0.38l-1.85,-0.74l-0.87,-0.92l-1.28,-0.1l-2.37,0.36l-0.59,0.74l-1.51,0.38l-11.5,2.04l-2.9,-0.97l-2.23,-0.02l-0.59,0.29l-0.89,1.32l-2.68,0.4l-3.61,-2.17l-0.41,-3.07l-0.58,-0.88l-0.89,-0.36l-1.59,0.22l-2.97,-1.89l-0.23,-0.91l0.23,-4.07l1.39,-0.87l0.39,-0.74l-1.2,-2.34l-1.95,-0.62l-6.26,-0.29l-1.14,0.98l-1.37,0.65l-0.75,1.83l-1.9,1.04l-1.91,0.37l-2.72,1.1l-0.23,0.5l0.76,2.05l-0.2,0.97l0.79,2.65l-0.32,3.29l0.49,0.89l0.15,1.3l1.12,1.57l0.29,1.85l-1.11,0.62l0.16,1.51l-1.11,2.58l0.66,2.07l-1.03,2.08l0.1,1.55l-0.77,0.14l-2.12,-0.55l-1.66,-0.95l-0.7,0.37l-0.74,1.15l-4.43,-3.51l-0.53,-0.72l1.74,-1.68l0.17,-1.07l-1.9,-2.81l-0.85,-0.47l-0.79,-0.03l-0.44,-1.11l-0.51,-0.41l-1.68,0.2l-1.36,1.17l-3.38,0.82l-2.23,-1.68l-2.91,-0.35l-0.56,0.27l-0.37,1.38l-4.23,-4.7l-1.66,-0.09l-3.02,0.73l-1.15,-1.23l-1.0,-0.32l-1.56,0.61l-2.29,-0.2l-2.55,1.14l-1.97,-0.51l-1.29,0.82l-2.04,2.91l-2.43,-0.51l-1.13,0.6l-0.51,0.98l-0.29,3.91l0.92,1.07l2.66,1.32l1.94,1.68l2.96,0.17l1.26,1.79l2.78,0.9l0.48,1.34l-0.13,1.2l-0.37,0.4l-0.87,0.11l-2.93,-0.93l-4.01,0.63l-1.94,-0.58l-1.1,1.02l-0.69,4.16l-3.21,-1.63l-2.42,-0.56l-4.35,0.01l-1.01,-1.19l0.26,-1.78l-1.24,-2.29l0.56,-3.11l-0.96,-4.55l-2.51,-1.79l-1.27,-2.36l-0.4,-0.21l-1.63,0.19l-1.03,0.67l-2.44,-0.21l-0.35,-1.35l-2.71,-1.97l-1.63,-2.41l-2.71,0.46l-1.78,-0.14l-0.59,-0.35l-0.4,-0.87l0.92,-1.29l-0.27,-0.77l-2.71,-1.88l-1.71,-1.89l-1.39,-0.95l-0.29,-2.27l-0.56,-1.23l-0.59,-0.48l-9.35,-2.99l-1.01,-2.63l-1.92,-1.77l-1.6,-0.4l-5.19,0.34l-0.36,-0.42l-0.04,-1.3l-0.69,-0.32l-1.69,1.01l-5.23,4.9l-0.39,-0.03l1.12,-4.39l-0.84,-2.13l0.09,-3.09l-0.34,-1.33l1.08,-1.22l1.45,-0.22l0.44,-0.82l-0.26,-3.13l-1.09,-2.35l-0.69,-0.73l-4.95,-1.16l-1.23,0.01l-4.98,2.12l-0.22,1.34l1.26,1.57l-0.67,1.18l-1.42,0.01l-2.79,-1.22l-1.93,0.53l-0.34,-0.26l-0.11,-2.38l0.27,-1.16l1.07,-1.52l2.01,-1.69l0.03,-1.7l2.03,-3.64l0.22,-2.52l-1.38,-1.69l0.34,-0.79l0.93,-0.33l0.62,0.24l0.49,-0.5l-0.35,-2.72l0.73,-2.34l1.94,-0.9l2.0,-0.22l3.05,-0.99l0.51,-0.82l-0.05,-2.64l2.87,-3.0l-0.0,-0.57l-1.08,-1.18l-0.85,-1.76l-1.5,-1.31l-1.4,-0.75l-0.98,-0.04l-0.98,0.49l-1.32,1.37l-0.26,-2.69l-0.89,-0.28l-0.75,0.57l0.01,-1.24l0.99,-0.34l0.99,0.48l3.6,0.32l3.02,-0.64l0.54,-1.23l-0.29,-1.78l-1.9,-2.62l0.22,-1.48l2.22,-1.33l3.94,-0.18l1.16,0.34l1.46,-0.39l0.02,1.12l1.77,0.81l4.9,-0.22l0.64,-0.26l1.77,-3.22l0.11,-0.78l-1.85,-2.88l-2.06,-0.27l-1.26,-0.8l-1.49,-0.22l0.54,-2.9l1.76,-2.79l0.4,-1.79l-0.68,-0.65l-2.26,-0.47l-1.06,-1.66l2.43,-0.68l1.45,0.0l0.97,1.08l0.0,1.01l0.79,0.65l0.29,0.84l0.68,0.13l0.69,-0.82l0.56,-3.98l0.5,-1.2l1.43,-1.46l0.47,-1.12l-0.53,-1.03l-3.17,-1.31l-2.4,-1.49l-2.48,-0.15l-1.5,-0.78l-2.08,-0.34l-3.25,-1.14l-0.67,-2.29l-2.01,-1.77l0.5,-1.75l-0.55,-0.88l-4.8,-1.34l-1.77,0.02l-1.79,-1.79l-1.64,-0.49Z\", \"name\": \"Th\\u00fcringen\"}, \"DE-BW\": {\"path\": \"M174.35,977.77l0.94,-0.09l1.04,-0.87l1.4,-3.28l-0.41,-0.55l-2.22,0.2l-4.37,1.12l0.43,-1.22l-0.29,-1.37l-1.72,-1.74l-2.19,-3.76l-1.37,-1.65l-1.49,-0.71l-0.28,-0.42l-0.55,-3.8l2.54,-3.12l0.04,-2.16l-1.19,-4.29l0.25,-1.61l1.36,-3.94l1.92,-1.37l0.21,-1.54l-0.52,-3.81l1.96,-2.97l0.08,-2.67l0.47,-1.5l2.54,-2.3l1.06,-1.83l-0.28,-4.11l-4.18,-6.31l-0.29,-5.0l0.6,-2.37l0.64,-1.85l1.87,-2.86l0.23,-1.89l0.6,-1.42l6.17,-7.39l1.08,-1.88l1.5,-7.27l3.36,-1.95l1.43,-2.06l0.11,-1.9l-1.14,-3.28l-0.3,-1.43l0.11,-1.57l1.19,-4.65l1.82,-3.25l0.23,-2.45l0.44,-1.0l3.7,-2.92l-0.03,-1.02l-1.12,-2.6l0.01,-4.26l0.81,-3.99l4.04,-5.37l2.73,-1.12l1.5,-1.11l2.7,-2.74l2.48,-1.74l1.1,-1.24l0.5,-1.1l0.15,-2.47l0.41,-0.89l4.58,-0.59l0.7,-0.62l0.42,-1.85l0.96,-1.12l0.81,-0.06l4.36,-2.22l1.26,-1.82l4.44,-10.4l3.02,-4.86l1.91,-1.87l3.04,-0.98l3.22,-2.96l2.09,-2.77l7.22,-12.62l0.48,-1.41l1.87,-12.06l0.61,-2.04l2.24,-1.43l6.88,-6.97l0.35,-1.6l-0.28,-0.47l-1.97,-0.59l3.62,-7.35l0.04,-1.46l-0.71,-3.04l1.32,-2.87l-1.26,-1.62l-4.76,-1.12l0.0,-0.31l1.82,-0.77l0.24,-1.24l-1.36,-2.54l-2.19,-5.45l-1.84,-2.6l0.73,-2.7l2.97,-1.04l2.18,0.3l2.26,1.53l7.02,5.94l4.3,-1.55l0.92,-0.98l0.02,-1.21l-1.85,-6.88l7.12,-1.49l0.11,0.81l1.31,2.01l-0.6,1.53l0.48,1.6l1.45,2.99l1.28,1.26l4.79,2.38l1.73,0.23l2.4,-0.19l1.16,1.97l0.98,0.67l5.86,-0.39l-0.1,1.47l-1.21,1.67l-0.7,-0.17l-0.89,-0.93l-0.58,-0.14l-2.19,1.89l-0.55,1.38l0.33,3.57l-1.88,1.43l-0.23,1.76l0.53,1.07l3.21,0.91l0.87,-0.12l1.04,-0.64l2.98,-3.01l0.87,-2.61l0.41,0.93l0.75,0.22l2.83,-1.41l0.56,-1.31l-0.67,-1.77l-1.09,-1.36l2.51,-2.51l5.29,-0.11l2.5,0.35l1.07,-0.38l2.19,-1.78l0.64,-0.05l2.42,0.05l1.28,1.23l1.37,0.08l0.34,-0.7l-0.27,-0.91l-2.56,-3.92l-2.42,-2.72l1.27,0.87l0.87,0.15l0.51,-0.21l0.65,-0.94l1.08,0.39l5.51,-1.02l1.46,0.22l6.52,-0.22l1.17,-1.17l0.67,-1.78l1.37,-1.24l-0.23,-2.22l0.53,-0.57l2.02,-0.87l3.16,-0.22l2.78,-1.04l1.67,1.25l1.06,0.06l2.01,-1.51l0.12,-0.46l-0.71,-1.51l1.15,-5.53l-0.13,-0.44l-0.7,-0.62l-2.58,-0.69l-0.78,0.55l-0.77,1.84l-0.89,0.17l0.35,-1.91l-0.59,-0.97l-4.04,-0.75l-1.03,-0.49l-0.04,-0.61l0.69,-1.6l-0.71,-1.85l1.35,-1.35l2.12,-0.87l4.72,0.28l3.66,-1.1l5.15,-0.4l5.34,2.11l1.32,0.08l1.6,-0.49l2.78,1.41l2.75,-0.74l1.57,-0.88l0.24,0.13l0.13,0.5l-0.7,1.2l0.32,1.94l-0.55,1.29l0.2,1.35l-0.81,0.71l0.07,1.15l-0.88,2.04l0.69,1.02l1.74,0.8l1.59,0.16l1.24,-0.5l0.55,-2.17l1.24,-0.56l0.76,-1.11l0.29,1.95l0.94,1.81l0.7,0.53l0.88,-0.26l3.12,-2.95l2.71,-1.0l3.42,3.79l-0.03,3.37l0.31,1.69l3.91,3.76l0.64,1.01l-0.31,0.88l-1.67,1.84l-0.28,0.94l0.08,1.66l-1.98,2.03l0.01,0.88l1.23,0.86l0.82,0.05l0.85,-0.38l0.55,-0.64l0.51,-1.5l1.26,-0.44l1.21,-1.44l0.91,-0.32l0.4,0.54l-0.6,1.42l1.68,1.44l0.42,2.72l-0.21,2.83l0.43,3.16l0.42,0.43l1.1,0.21l7.07,-0.13l0.97,-0.4l3.91,-3.5l0.15,-1.23l-0.84,-1.28l0.17,-0.27l2.11,-1.41l1.27,0.67l-0.61,1.34l0.09,0.66l1.04,0.84l1.49,0.2l0.57,0.44l-0.81,2.13l1.08,2.45l-0.68,1.9l-1.08,1.37l-0.03,0.82l2.74,1.19l2.9,5.97l-1.57,-0.51l-1.19,0.15l-2.06,2.16l-0.26,3.55l0.28,0.98l1.14,1.35l2.01,0.94l-0.71,2.21l1.08,2.44l0.14,1.21l-0.42,0.11l-1.89,-0.85l-0.61,0.29l-0.25,0.8l0.37,1.08l1.37,1.29l0.09,2.58l0.53,1.04l0.99,0.99l-1.22,0.55l-0.06,0.68l1.22,1.14l2.14,1.28l2.35,2.75l1.39,1.16l0.78,0.12l1.66,-0.72l1.83,1.44l0.04,2.34l-0.95,1.98l-0.46,0.34l-1.51,0.1l-0.4,0.9l0.69,0.69l2.45,0.87l-0.21,1.54l1.79,1.53l-0.39,1.61l0.15,0.54l2.69,1.1l1.9,0.12l1.91,0.96l1.45,0.05l1.11,2.72l4.69,3.56l0.78,1.3l1.62,1.6l0.61,1.39l1.23,1.13l0.83,2.66l-1.94,0.8l-0.27,0.67l1.04,0.98l-0.28,4.6l-0.48,1.5l1.08,2.33l-0.47,1.99l-1.17,1.07l-0.28,0.72l0.02,3.22l-0.71,1.13l-0.08,1.39l0.26,1.1l0.77,0.88l2.06,0.96l0.86,0.03l0.58,1.51l1.57,2.49l-5.03,3.67l-0.19,-0.91l0.5,-0.96l-0.02,-0.89l0.57,-0.43l0.07,-0.58l-0.7,-0.76l-1.15,-0.1l-5.56,5.04l-1.96,-3.02l-3.03,-0.16l-2.05,-1.63l-0.93,0.08l-2.24,2.61l-0.28,1.89l1.85,3.16l4.41,2.87l-0.26,0.73l-1.5,0.64l-0.4,0.64l0.12,1.11l0.98,1.84l0.19,1.19l-0.14,1.29l-1.13,2.82l0.19,0.81l-4.23,0.38l-1.51,1.42l-0.39,1.58l-9.25,4.8l-0.75,-0.36l-0.51,-1.82l-0.62,-0.49l-0.81,-0.12l-2.79,1.54l-3.46,0.66l-1.4,1.2l-1.01,1.61l0.17,1.69l-6.03,6.88l-0.03,0.47l0.88,1.4l1.4,0.27l1.82,3.45l3.09,4.45l1.54,4.46l3.86,15.17l2.64,5.14l0.29,1.53l-0.17,4.59l-0.71,2.69l-2.83,6.77l-1.22,0.8l-0.36,0.66l0.2,1.44l2.23,3.13l-0.36,4.33l-0.43,0.61l-0.46,2.19l-0.97,0.93l-0.14,0.54l0.45,0.71l1.34,0.14l2.31,5.03l-0.66,0.29l-0.88,1.27l-2.25,0.27l-0.98,1.58l0.2,0.77l1.27,1.05l0.59,1.08l1.44,0.35l0.21,0.37l0.54,6.42l0.83,2.5l-0.49,1.58l-3.29,-0.55l-0.57,1.1l-0.13,1.76l-0.51,0.56l-1.24,-2.81l-1.02,-0.68l-1.91,-0.04l-2.51,0.59l-2.18,1.03l-3.26,0.94l-2.28,0.02l-2.3,-0.48l-4.2,-1.44l-3.11,1.28l-7.24,5.55l-4.24,1.86l-3.56,-0.78l-1.54,0.64l-0.96,1.29l-3.38,0.68l-1.16,0.76l-1.15,-0.49l-4.02,-0.65l-1.38,-0.64l-1.47,-1.59l-1.45,-3.71l-0.9,-0.99l-1.1,-0.57l-3.16,-0.36l-5.3,-2.32l-6.08,-0.37l-1.75,-0.45l-9.28,-5.3l-1.64,-4.39l-0.84,-0.41l-2.61,-0.39l-10.32,-6.38l-3.9,-0.52l-0.39,0.61l0.85,1.29l3.3,2.99l7.36,3.46l1.19,1.48l2.06,5.28l2.2,2.82l0.05,0.63l-7.24,0.21l-10.93,-1.06l-2.02,0.65l-1.63,1.48l-3.44,0.94l-3.75,0.3l-2.28,-0.51l-4.07,-2.89l-0.0,-0.35l1.48,-0.3l0.17,-0.7l-2.61,-2.11l-3.21,-1.6l-2.8,-0.15l-0.39,0.26l-0.88,2.45l0.2,0.52l-3.89,0.05l-0.36,-1.46l-1.15,-1.75l1.81,-2.78l-0.64,-1.64l-1.25,-0.37l-1.94,0.03l-2.36,-3.55l-1.48,-0.5l-1.27,0.89l-0.6,2.77l-0.84,0.47l-0.62,-0.4l-0.8,-4.17l-1.94,-0.73l-2.44,-0.12l-1.76,0.81l-0.19,0.53l0.74,1.6l-1.06,0.46l-6.26,0.86l-1.09,0.55l-1.37,1.75l-1.19,3.35l-3.35,1.88l-1.07,1.02l-0.23,1.16l0.64,1.98l-0.57,1.23l0.24,0.55l2.01,0.55l4.7,2.66l1.89,-0.1l4.23,-2.09l4.66,-0.68l3.36,0.79l-0.35,1.88l-0.15,-0.7l-0.38,-0.23l-1.05,0.2l-0.61,0.52l-0.23,0.92l0.39,1.05l-0.04,2.04l-0.6,1.57l-0.94,0.27l-2.12,-2.69l-1.8,-1.31l-3.1,0.31l-3.0,1.71l-1.41,2.72l-2.72,0.39l-6.21,-0.03l-3.62,-0.83l-0.82,-0.46l-1.14,-2.27l-0.86,-0.78l-3.62,-0.76l-1.88,-0.01l-5.49,0.82l-1.66,1.49l-1.77,0.46l-2.99,1.55l-1.71,2.02l-0.83,0.49l-4.31,0.83l-12.49,0.0l-0.63,-2.57l-0.72,-0.73l-6.5,-0.43l-1.31,-0.58l-0.48,0.13l-3.26,3.92l-1.73,0.85l-8.06,1.44l-2.04,-0.23l-3.3,-1.5Z\", \"name\": \"Baden-W\\u00fcrttemberg\"}, \"DE-HH\": {\"path\": \"M382.17,201.49l1.03,-4.25l1.01,-1.1l0.43,-1.53l1.53,0.25l1.9,1.12l-0.31,2.69l0.56,0.58l0.89,0.21l1.29,-0.59l9.63,-6.45l2.35,-0.59l3.23,0.43l1.08,-0.69l1.02,-2.14l0.79,-0.68l1.76,-0.41l1.82,0.19l1.03,-0.46l0.68,-0.62l1.26,-4.23l0.66,-0.65l5.87,0.76l2.92,-1.83l1.14,0.05l-0.19,0.95l-2.1,2.91l-0.53,1.56l0.61,0.99l3.39,2.06l0.35,2.25l1.08,0.81l0.23,0.58l-0.72,2.55l-0.38,3.79l-3.08,0.95l-0.69,0.69l0.75,3.35l0.24,2.74l0.57,0.79l2.65,0.87l3.34,4.02l2.89,1.46l3.39,3.0l0.77,-0.01l0.52,2.29l-3.7,0.0l-1.1,0.29l-1.09,0.58l-2.35,2.62l-5.14,0.28l-1.52,-0.28l-1.48,-0.87l-2.17,-2.25l-2.1,-0.52l-2.94,-2.3l-5.11,1.36l-0.52,0.74l0.02,1.1l-4.04,1.6l-1.45,0.08l-2.33,-1.12l-3.08,0.96l-0.5,-3.1l-0.71,-0.98l-1.08,-0.39l-0.95,0.26l-1.87,1.9l-0.36,0.03l-3.85,-3.12l-1.12,-1.56l-1.12,-2.55l-1.1,-0.86l-0.5,-1.05l-0.81,-0.75l-0.35,-4.61l4.86,0.88l1.48,-0.45l0.2,-0.61l-1.22,-1.74l-3.84,-1.89l-3.7,-0.37Z\", \"name\": \"Hamburg\"}, \"DE-SH\": {\"path\": \"M521.78,88.19l-2.9,0.15l-2.4,-0.32l-0.89,-0.89l0.18,-2.57l-0.74,-1.47l-1.51,-0.44l-2.57,-0.07l-1.16,0.28l-1.07,0.79l-0.94,-1.55l-1.39,0.36l-0.17,-1.2l2.65,-5.28l3.69,-2.91l4.54,-0.62l8.23,2.86l3.15,2.45l6.78,10.31l-11.47,-1.56l-2.02,0.86l0.01,0.81ZM297.93,104.64l0.36,-1.02l-0.4,-0.57l-2.98,0.29l-5.15,1.27l-2.94,0.28l-3.64,-0.47l-1.64,0.55l-3.2,2.49l-0.96,0.26l-2.44,-0.71l-2.68,-1.98l-1.93,-2.83l-0.26,-3.23l1.2,-1.2l2.57,-0.94l2.93,-0.48l2.27,0.09l0.42,-0.4l0.0,-0.92l-0.33,-0.39l-1.67,-0.32l-1.27,-0.98l-1.44,-0.4l-1.58,1.41l-0.5,-0.88l0.25,-1.31l1.64,-2.22l2.06,0.68l7.91,-1.75l10.74,0.0l2.58,-0.55l2.22,-1.11l4.11,-2.93l3.74,-1.49l1.7,-1.04l0.85,-2.54l-0.08,-3.53l-2.55,-3.16l-7.98,-6.94l-1.08,-1.36l-0.61,-1.58l-1.14,-0.7l-2.02,0.05l-3.03,0.96l-0.23,-0.34l2.98,-1.65l0.17,-0.52l-3.43,-7.38l-1.3,-1.95l-2.95,-1.54l-5.28,-3.73l-3.16,-1.27l0.51,-3.29l-1.28,-2.77l-3.21,-5.04l-0.54,-3.45l0.43,-3.06l1.2,-3.56l3.17,0.78l3.62,0.13l6.78,-2.02l2.21,-0.27l7.75,1.07l7.73,2.54l20.73,3.93l1.46,1.04l0.71,3.18l0.72,1.62l2.1,0.8l8.69,-0.2l1.08,-0.82l1.3,-0.29l1.15,-0.79l1.51,-0.28l2.04,1.47l1.66,0.15l3.06,-0.45l5.85,-2.38l1.92,-1.88l2.51,-0.89l1.19,-1.71l0.64,-0.42l0.28,4.22l0.29,0.36l4.85,1.43l5.97,0.25l3.99,1.42l6.45,3.17l1.04,2.34l1.49,1.4l2.63,-0.37l4.47,-1.38l0.28,-0.44l-0.33,-2.4l1.78,-0.1l3.03,1.51l2.13,2.18l1.31,4.55l0.66,1.17l2.4,2.37l-0.68,0.42l-3.25,-0.76l-2.58,1.84l-1.55,0.47l-0.33,0.53l-0.05,1.25l0.38,0.41l1.44,0.08l2.64,-0.63l2.34,-0.11l1.35,1.46l0.52,0.06l0.96,-0.67l0.78,-0.05l0.31,0.47l-0.63,1.72l0.47,2.08l0.06,2.62l-1.04,7.93l-1.55,3.35l-1.19,1.39l-3.09,2.32l-3.88,1.74l-4.19,1.1l-4.08,0.37l-0.36,0.4l0.0,0.93l0.24,0.37l4.47,1.81l23.6,-4.54l1.68,0.48l5.45,3.83l-1.69,1.55l0.03,1.65l1.24,3.65l-0.51,1.63l-1.3,1.58l-1.67,1.14l-1.62,0.4l-0.21,0.65l0.53,0.59l-0.55,0.77l0.06,0.53l0.96,0.84l0.24,0.91l-0.33,1.1l-0.92,1.24l-0.01,0.47l0.44,0.15l2.32,-0.74l1.7,-1.71l2.31,-4.21l1.32,-4.52l0.63,-1.0l0.82,-0.44l3.76,-0.35l1.47,-0.73l1.95,-2.12l0.98,-0.26l4.04,0.29l2.06,0.82l5.99,3.86l15.42,5.52l8.7,6.62l4.2,0.89l4.76,-0.7l3.37,-1.69l5.58,-4.2l3.18,-1.66l3.31,-1.13l3.58,-0.38l0.18,0.51l1.7,0.62l1.78,-0.4l2.53,1.22l6.75,-3.35l2.25,0.69l-3.98,3.91l-1.86,-0.76l-0.43,0.11l-0.06,0.44l1.04,2.16l0.89,5.33l0.74,2.47l-0.7,1.74l0.07,2.35l0.65,3.82l-0.39,2.14l-1.78,1.95l-0.49,1.18l-11.26,5.92l-3.99,4.11l-1.62,0.85l-4.58,1.06l-0.87,0.53l-1.3,-0.92l-0.88,-0.07l-0.99,0.45l-5.4,6.39l0.04,1.02l1.34,2.69l1.43,1.94l1.98,1.36l2.8,0.75l3.85,-0.3l0.74,0.24l0.58,1.17l0.48,2.85l1.69,0.61l0.03,3.92l0.76,0.99l0.95,0.56l3.23,0.85l-0.73,0.48l-2.99,0.39l-0.34,-0.34l0.07,-1.26l-1.81,-0.67l-0.89,0.03l-2.4,1.29l-4.79,3.63l-4.49,2.09l-1.24,1.91l-0.47,1.93l1.17,2.93l0.79,3.5l-1.22,5.47l0.1,0.82l0.48,0.35l4.31,0.71l3.87,4.28l1.12,0.84l0.86,0.41l2.17,-0.23l2.65,0.66l2.18,1.53l0.62,0.86l0.1,1.61l0.97,1.86l-0.24,1.9l-1.39,1.01l0.1,2.43l1.27,4.35l-0.04,0.34l-0.84,0.4l-0.14,0.63l0.84,0.33l-1.79,1.8l-0.86,-2.34l-1.15,-0.78l-5.04,0.52l-1.59,-0.49l-1.38,0.31l-0.31,0.71l0.5,2.57l-0.9,2.1l-0.2,2.0l-5.86,3.54l-5.51,1.41l-1.3,2.66l-1.42,-0.26l-1.38,0.17l-2.21,1.08l-0.64,0.97l-0.81,4.25l-0.01,1.64l-0.43,1.23l-1.94,2.42l-2.9,0.99l-3.88,-1.09l-13.96,-6.88l-3.53,-1.09l-2.0,-0.09l-0.67,-2.82l-1.09,-0.23l-3.27,-2.89l-2.93,-1.5l-3.3,-3.99l-2.68,-0.89l-1.2,-5.99l2.97,-0.89l0.67,-0.51l0.5,-4.11l0.73,-2.63l-0.2,-0.87l-1.19,-0.93l-0.42,-2.39l-3.56,-2.2l-0.3,-0.51l1.39,-2.57l1.34,-1.74l0.2,-0.88l-0.56,-0.81l-1.75,-0.07l-2.78,1.79l-5.89,-0.78l-1.24,1.16l-1.24,4.18l-0.36,0.28l-0.63,0.34l-1.89,-0.17l-2.03,0.49l-1.08,0.92l-0.97,2.08l-0.72,0.45l-3.1,-0.46l-2.63,0.69l-10.73,6.95l-0.54,-0.41l0.41,-2.01l-0.17,-0.77l-2.24,-1.36l-1.88,-0.31l-0.6,0.29l-0.47,1.62l-0.96,0.96l-1.21,4.74l-4.38,-0.41l-3.52,-1.14l-7.0,-3.69l-3.1,-2.85l-1.11,-4.13l-0.67,-5.99l-1.21,-1.03l-6.07,-2.52l-2.27,-1.69l-2.23,-3.93l-1.52,-4.25l-0.14,-2.63l-0.28,-0.36l-3.52,-1.13l-6.15,-4.31l-3.86,-1.9l-3.73,-0.71l-12.4,-0.23l-3.67,-1.38l-2.55,-0.58l-1.41,0.63l-1.0,1.28l-1.96,-0.53l-3.36,-2.08l-3.22,-3.23l-7.84,-12.88l3.27,-1.22l1.73,-0.11l2.24,0.5l3.81,2.07l2.2,0.6l2.4,-0.84l0.96,-1.67l0.83,-2.74l0.55,-2.93l-0.02,-2.16l-1.23,-1.63l-3.04,-2.57l0.25,-2.25l-0.3,-0.39l-2.55,-0.6l-3.43,0.51l-3.28,1.27l-2.08,1.57l-4.26,-6.58l-0.21,-0.51l0.74,-2.51l2.52,-4.46l-0.66,-2.92l0.96,-0.59l5.72,-1.08l1.23,-0.75l3.16,-3.93l1.02,-2.09l-0.42,-0.57l-2.24,0.35l-3.82,2.63l-1.25,0.45ZM505.27,92.96l1.41,-0.15l0.0,0.09l-1.41,0.06ZM297.84,80.79l-4.13,0.26l-1.82,-0.53l-0.72,-1.01l0.85,-0.54l0.14,-1.05l-0.95,-1.26l2.66,-2.06l3.33,-1.23l3.77,-0.18l3.41,0.73l-0.11,1.55l-1.7,1.34l-2.58,3.1l-2.15,0.89ZM276.26,76.33l-2.63,1.21l-1.99,-0.03l-1.07,-0.76l-0.89,-1.73l0.52,-1.88l3.0,-1.63l5.83,-2.0l0.12,0.91l-0.75,3.16l-2.15,2.75ZM278.04,137.9l-0.16,0.39l-0.79,-0.21l-1.19,-1.75l0.24,-1.51l0.94,-0.79l0.28,-0.0l0.13,1.76l0.87,0.87l-0.32,1.25ZM248.66,23.66l4.99,1.03l5.58,-0.23l-3.34,1.97l-1.38,0.32l-6.64,0.0l-1.42,-1.42l-1.93,-0.32l-4.34,2.32l-0.85,4.57l0.33,7.4l-0.75,4.1l-0.46,-1.36l-0.08,-3.51l1.13,-14.71l0.91,-2.83l7.39,-16.61l1.52,-1.52l0.16,0.48l2.49,0.21l0.62,1.29l-0.73,1.57l-4.0,1.85l-1.92,2.34l-1.02,2.74l0.83,2.71l-0.56,4.74l3.48,2.89ZM250.3,1.86l1.38,-1.39l2.81,1.2l-4.19,0.18ZM264.77,24.24l8.78,-0.35l-1.1,0.7l-7.68,-0.34ZM266.78,50.31l-0.69,0.79l-1.15,0.3l-1.55,-0.15l-2.54,-1.02l-2.45,0.75l-3.03,-0.75l-5.27,-2.63l1.64,-2.42l2.11,-1.64l2.57,-0.82l3.21,-0.22l5.36,0.26l2.06,1.01l1.62,2.25l0.0,0.67l-0.78,1.07l-1.09,2.55ZM245.09,48.48l-1.98,1.85l-0.04,0.5l4.9,7.42l1.39,0.69l-0.71,0.49l-3.09,0.9l-2.09,-1.53l-1.81,-2.65l-1.77,-1.95l2.64,-4.0l1.65,-1.46l0.9,-0.27ZM203.59,118.61l-0.73,0.18l-0.01,-0.01l0.73,-0.17ZM200.05,118.64l0.62,0.33l0.13,0.51l-0.19,-0.05l-0.56,-0.79Z\", \"name\": \"Schleswig-Holstein\"}, \"DE-NW\": {\"path\": \"M55.93,626.7l-2.43,1.05l-2.02,0.01l-0.12,-0.64l-3.35,-4.89l-0.11,-1.32l1.36,-4.73l0.08,-2.23l-0.47,-0.71l-0.78,-0.22l-0.72,-0.99l-0.76,-2.27l0.19,-0.81l1.12,-1.25l-0.36,-0.27l-5.94,-0.89l-1.95,-0.84l-3.93,1.09l-0.8,-0.03l-2.0,-2.3l0.56,-0.8l-0.3,-0.63l-1.62,-0.26l0.61,-1.03l-0.03,-0.52l-1.4,-1.48l1.56,-2.05l3.02,-2.1l2.17,-1.08l1.97,-2.9l-0.18,-1.09l-0.38,-0.29l-6.7,-0.14l-1.83,-0.8l-0.86,-1.39l0.93,-0.5l0.13,-0.6l-5.97,-7.63l-1.95,-1.64l-1.98,-0.21l-3.82,0.88l-0.98,-0.1l-0.26,-0.73l0.3,-2.6l-1.78,-1.06l0.34,-2.53l-1.65,-1.41l-0.9,-1.92l1.19,0.11l1.54,-1.29l0.53,-1.74l-0.29,-2.13l0.72,-1.09l1.15,-0.55l2.11,0.15l1.49,-1.33l0.63,-1.48l0.01,-1.16l-0.8,-2.56l0.85,-1.92l-0.26,-0.52l-3.17,-0.92l-2.85,-1.74l-0.35,-2.63l0.95,-2.34l-0.63,-0.96l-3.45,0.35l-4.06,-0.85l-4.74,1.51l-0.12,-2.95l-1.5,-3.69l-0.49,-2.68l2.29,-1.01l1.12,0.53l2.47,2.25l2.32,-0.18l1.28,-1.2l1.86,-3.25l1.25,-1.2l9.02,-5.89l5.56,-2.51l1.59,-1.71l-0.05,-0.58l-1.63,-1.26l2.52,-1.57l0.22,-0.39l-0.29,-0.35l-2.56,-0.61l-4.71,2.69l-1.95,-0.9l-0.63,-2.15l0.27,-2.78l0.81,-2.49l3.05,-3.5l5.0,-7.67l3.42,-2.21l1.08,-1.23l0.62,-1.84l0.3,-2.78l0.54,-1.08l-0.08,-0.46l-1.35,-1.34l0.12,-2.18l1.1,-5.36l-1.18,-6.76l-4.06,-4.01l-6.46,-7.37l-0.37,-1.41l1.63,-4.65l-0.24,-0.52l-6.56,-2.39l-2.02,-2.13l1.24,-3.47l-1.09,-1.27l-3.43,-1.89l-3.55,-0.18l0.05,-0.93l2.19,-1.97l0.17,-2.64l-1.35,-2.74l-2.12,-1.41l0.21,-0.73l1.43,-0.84l3.93,-0.58l1.97,-0.69l3.43,-1.87l3.87,-0.86l7.0,1.5l0.42,-0.18l-0.02,-0.46l-1.37,-1.78l-4.3,-3.59l2.5,-1.12l2.97,1.16l3.21,2.14l3.32,1.13l3.85,-0.47l2.11,2.52l3.93,0.58l1.34,0.65l0.26,1.83l0.49,0.33l3.97,-1.12l0.41,-1.53l-0.62,-2.3l5.63,1.38l2.23,-0.01l1.7,-0.65l4.78,-3.04l9.66,-2.73l8.64,-0.23l2.81,-1.22l2.45,-2.4l2.21,-3.32l1.99,-1.19l0.24,-1.89l-0.26,-1.01l-3.26,-3.11l-9.91,-4.28l-0.17,-1.68l0.56,-1.13l3.09,-0.94l0.86,-0.93l1.26,-2.32l1.58,-1.36l1.46,-0.67l6.5,-0.66l1.34,-1.05l2.14,-3.6l1.8,-1.56l4.24,-1.55l2.04,-1.52l3.27,-4.01l4.31,-2.16l0.46,-0.99l2.13,0.05l4.05,-1.42l2.66,-1.82l13.4,-0.46l4.12,-0.75l6.73,-4.09l2.95,-0.61l1.84,-0.9l5.03,-4.3l4.49,-3.08l1.76,-0.41l2.87,0.2l1.62,-1.66l1.44,-3.57l1.19,-0.82l-0.18,-0.83l-1.47,-1.15l-0.31,-0.85l1.14,-4.04l0.83,-0.74l7.55,2.02l0.72,1.36l0.83,4.52l0.4,0.68l2.91,1.13l6.57,3.41l1.49,1.44l1.55,0.32l6.37,-2.07l0.76,0.12l3.51,3.8l2.76,3.96l0.09,0.4l-3.29,0.46l-0.78,0.57l-0.12,0.76l0.36,1.19l1.3,1.98l-2.86,2.97l-0.04,0.87l0.86,1.97l-0.7,1.17l-1.65,1.64l-0.05,0.79l0.94,1.08l2.43,0.39l0.46,1.39l0.97,0.63l4.31,-0.22l2.16,0.72l0.15,0.34l-1.33,2.47l-1.17,3.41l-4.06,0.57l-2.52,0.96l-2.97,2.23l-0.27,0.92l2.18,4.83l6.27,2.39l0.81,-0.34l4.22,-3.35l1.41,-0.56l3.43,-0.5l3.67,1.05l6.98,-2.19l3.06,-1.83l2.3,-2.57l2.98,-2.17l12.26,2.9l0.96,-0.18l0.88,-0.59l1.67,-3.2l4.88,-2.72l1.7,-2.05l0.55,-1.04l0.05,-0.96l-3.34,-2.18l-0.25,-1.08l-0.08,-11.85l-1.04,-4.5l-0.89,-2.15l-1.37,-1.81l-2.9,-1.75l-6.35,-2.47l-1.11,-1.42l-1.66,-4.59l1.55,0.46l2.19,-0.01l2.08,0.6l5.68,-0.63l2.55,-1.25l0.65,-1.03l0.93,-3.65l3.06,-2.06l6.74,-0.07l1.67,-0.29l4.8,-1.93l0.89,-0.01l1.52,0.51l1.54,1.11l2.61,3.94l0.32,1.87l-0.24,2.96l0.57,1.39l-0.38,3.23l0.55,1.42l1.51,0.5l10.16,0.9l3.26,-0.31l3.47,-1.18l6.68,-1.27l0.88,-1.06l1.47,-3.79l1.4,-2.26l2.54,-2.16l5.36,-2.34l1.15,0.22l1.6,1.84l1.89,0.68l-0.64,1.47l-1.45,0.96l-0.33,0.56l0.21,1.35l1.64,4.23l-3.1,4.14l-1.73,3.09l-2.63,1.5l-2.96,-0.18l-1.1,0.27l-0.85,1.0l-0.65,1.5l-1.24,7.23l0.46,1.22l0.86,0.67l7.25,2.04l-2.58,1.61l-0.45,0.82l0.82,3.08l-2.42,-0.06l-3.08,0.73l-0.27,0.55l1.88,4.18l-0.01,0.68l-1.06,2.04l0.64,0.61l6.37,-0.63l6.9,0.79l0.59,0.31l0.09,0.59l-0.49,1.24l0.2,0.95l0.95,0.8l2.63,0.93l0.95,1.12l0.1,0.66l-1.26,2.95l2.16,5.18l-0.45,1.13l-1.6,1.2l-0.52,2.01l1.43,0.94l3.48,1.21l0.64,-0.15l0.73,-1.32l1.1,-0.28l3.87,1.35l-1.17,4.15l-1.82,1.87l0.06,0.61l0.98,0.23l3.76,-0.28l2.16,0.87l0.73,1.16l0.34,1.49l-0.2,1.35l-1.37,3.36l0.29,0.54l1.15,0.2l3.23,-0.87l4.42,0.14l4.48,-0.92l-2.0,3.15l0.49,0.92l1.58,0.46l-0.82,1.1l-0.09,3.0l-1.71,3.84l-2.65,1.82l-0.57,1.45l-0.99,1.14l-0.21,1.53l0.39,3.02l-0.62,1.5l0.26,1.49l-1.42,1.45l-0.29,1.32l0.22,1.73l0.79,0.79l1.58,0.03l3.52,-0.91l-1.46,1.85l-6.96,1.91l-1.4,0.8l0.05,0.8l1.94,1.48l-1.81,4.72l-2.41,2.34l-1.13,2.03l-3.45,2.21l-2.98,1.29l-0.92,0.77l-1.12,3.88l-1.78,0.03l-3.78,2.34l-4.23,-0.58l-1.75,-1.22l-0.39,-0.49l0.21,-1.95l-0.2,-1.25l-0.68,-0.91l-0.54,-0.45l-1.13,-0.09l-1.28,-0.55l-2.82,-1.58l-0.89,-0.15l-1.53,0.67l-4.08,0.89l-5.1,2.13l-0.71,0.78l-0.32,0.99l0.13,0.92l1.31,1.81l0.43,3.76l0.57,0.43l2.07,0.26l0.53,0.46l-0.92,2.1l-4.29,0.32l-3.68,1.96l-4.52,-0.9l-3.64,0.83l-4.4,0.3l-4.62,1.48l-0.91,1.32l-1.85,1.04l-0.61,1.29l-3.19,2.69l-2.19,2.38l-1.57,2.64l-0.29,1.01l0.37,0.76l1.55,1.08l0.72,1.81l1.85,0.58l1.2,-0.27l1.16,-1.42l4.44,-0.76l2.24,-1.35l0.97,-0.06l-0.32,1.61l1.16,0.77l1.92,7.63l0.05,1.51l-0.13,0.47l-3.13,2.91l-2.22,2.6l-0.02,0.84l0.96,1.42l0.08,0.89l-4.12,2.16l-3.3,-0.7l-10.05,0.04l-0.37,0.26l-0.38,1.43l1.62,2.74l-0.25,1.65l0.95,3.65l-1.63,1.87l-1.69,3.16l-1.23,0.36l-0.72,0.72l-2.1,3.88l-0.3,3.39l-1.85,-0.11l-1.89,1.03l-3.03,2.64l-0.16,1.73l-2.81,1.64l-2.63,0.22l-1.48,-0.23l-1.64,-2.29l-2.24,0.01l-5.82,4.69l-0.86,1.01l-1.94,1.17l-1.02,2.04l-5.33,4.17l0.01,0.86l0.82,0.66l0.15,0.95l2.49,1.68l0.6,0.89l-0.77,4.27l-1.87,0.89l-1.11,1.82l-2.37,-1.24l-1.31,-0.31l-3.45,0.99l-0.58,-2.08l-1.67,-2.47l-4.17,-4.54l-0.94,-1.51l0.28,-3.74l-0.72,-3.13l-0.67,-1.41l-0.97,-0.23l-2.0,0.68l-1.67,-1.08l-3.78,-3.35l-2.68,-0.79l-1.08,-0.66l0.12,-1.17l0.94,-2.34l0.32,-1.85l-0.3,-0.46l-5.7,-1.33l-1.46,0.32l-3.2,2.53l-0.33,0.85l-0.16,0.97l0.37,3.2l1.24,2.68l-0.11,1.93l-2.86,-0.64l-2.5,2.24l-3.62,1.85l-0.08,0.66l2.14,2.17l-0.19,1.53l-0.5,0.14l-0.47,-0.49l-0.78,0.01l-1.51,1.89l-4.36,1.59l-1.46,2.23l-2.87,-0.08l-3.94,1.83l-8.12,1.89l-3.63,-0.26l-2.5,0.6l-0.95,1.15l0.41,0.64l-0.09,3.01l-0.85,1.41l-0.16,1.67l-2.95,1.78l-5.57,1.28l-5.38,-0.32l-0.92,-1.54l-1.91,-0.55l-0.55,0.4l-1.0,2.06l-0.69,0.25l-2.29,2.03l-0.86,0.22l-2.56,-0.62l-0.61,0.43l-0.88,1.56l-0.88,0.29l-1.85,-0.75l-1.42,-0.09l-6.19,3.41l-5.82,1.52l-1.24,1.89l-1.38,1.39l-2.22,0.55l-0.62,0.52l0.38,3.52l-0.22,2.44l-1.21,1.62l-1.13,0.16l-1.73,-0.55l-2.11,-2.71l-0.75,-0.03l-3.73,1.23l-1.67,0.82l-0.25,0.48l0.11,1.88l-0.83,2.32l0.33,0.6l2.15,1.22l0.36,3.93l1.67,2.69l0.26,1.05l-0.22,0.56l-7.54,1.84l-1.41,-0.24l-1.2,-1.27l-2.0,-1.16l-0.97,0.09l-2.6,1.46l-0.91,0.0l-0.24,-0.03l0.54,-1.3l-0.35,-0.63l-2.4,-1.2l-1.42,-0.31l-1.39,0.49l-4.43,0.67l-4.67,2.88l-2.0,0.62l-1.1,-2.2l-2.26,-1.19l-0.74,-1.22l-0.82,-0.6l-1.29,-0.14l-0.81,0.92l0.05,0.93l3.4,4.77Z\", \"name\": \"Nordrhein-Westfalen\"}, \"DE-SN\": {\"path\": \"M613.55,628.95l-0.88,-1.11l-2.79,-0.68l-2.12,0.03l-5.21,-2.72l-0.56,-2.5l0.23,-1.42l-0.35,-0.59l-2.13,-1.24l-2.07,-2.7l-1.04,-0.33l-2.37,0.21l-0.57,-0.77l1.09,-1.06l2.37,-0.89l0.4,-1.53l1.03,-1.22l-0.26,-2.05l-1.83,-1.59l0.74,-1.97l0.98,-1.16l2.32,-1.5l2.34,-2.48l1.81,0.24l1.6,1.61l1.88,0.2l1.29,-0.93l2.1,-2.93l1.3,-0.22l2.18,0.8l2.82,-0.78l0.93,-0.93l0.69,-2.02l-0.13,-2.55l2.56,-2.72l6.43,0.02l3.7,-2.24l1.2,-1.11l2.03,-2.95l-0.19,-0.6l-1.1,-0.37l-2.13,0.07l-0.86,-0.36l-1.17,-2.45l0.48,-1.71l-0.19,-0.66l-0.87,-0.75l-1.92,-0.08l0.8,-1.92l0.8,-0.57l1.42,-0.29l1.72,-1.87l-0.37,-1.2l-1.73,-0.68l-1.0,-0.94l0.08,-0.84l6.95,-1.75l3.87,-2.52l3.34,-0.33l1.12,0.65l0.76,-0.09l3.91,-4.23l3.73,-1.71l0.52,-0.45l0.24,-0.86l1.56,0.49l2.21,-0.21l3.23,0.36l1.42,-0.28l0.89,0.87l0.5,0.1l1.04,-0.77l1.12,-1.44l1.51,-0.7l0.31,-0.91l-0.06,-0.64l-2.07,-3.72l-2.37,-3.13l-5.65,-2.53l-1.2,-1.0l-3.96,-6.22l-0.75,-3.81l-0.29,-0.31l-15.19,-3.83l-6.4,0.51l-3.97,-0.65l-0.55,-0.56l-0.44,-2.26l-2.18,-1.75l-0.81,-1.35l0.44,-3.4l-0.31,-0.44l-2.72,-0.67l-0.03,-0.55l0.97,-1.14l0.45,-1.13l-0.27,-4.27l-0.46,-1.54l-1.79,-2.02l-0.13,-2.54l-0.78,-2.33l0.4,-1.27l1.39,-1.81l2.24,-0.4l0.73,-0.59l0.54,-2.67l-0.19,-1.2l-1.41,-3.02l-0.25,-5.06l-0.88,-1.57l-0.22,-2.52l3.36,-3.03l0.47,-1.66l0.0,-5.89l2.77,-1.98l0.82,-2.16l2.95,1.1l3.18,0.29l5.79,-2.16l7.22,-0.61l0.73,-0.41l0.85,-3.47l0.61,-0.21l7.64,0.27l1.43,0.76l9.37,-1.36l0.83,0.68l1.29,-0.04l2.24,-1.57l1.73,-2.62l1.25,-0.6l3.46,0.4l3.12,1.02l1.97,-0.78l5.13,-3.55l0.86,-1.06l2.42,-0.19l0.95,1.69l1.4,0.87l2.76,0.67l2.07,0.88l1.63,1.4l1.25,-0.19l1.72,-0.96l0.48,0.16l2.71,2.18l2.92,0.78l2.67,2.73l1.44,0.84l1.07,0.29l1.24,-0.44l2.87,1.9l-0.34,3.35l1.09,1.24l1.96,0.98l1.28,3.93l-0.21,1.01l-1.82,1.38l1.0,2.59l-0.17,3.23l-0.63,1.53l-1.33,1.1l-0.42,0.82l0.24,1.5l0.99,1.5l0.84,0.06l1.39,-1.45l0.88,0.11l0.74,-0.78l1.46,0.43l1.22,1.68l0.42,0.15l10.91,-3.01l1.5,-0.66l0.96,-0.85l2.02,-0.19l4.49,1.83l2.18,1.79l2.41,1.35l1.59,1.98l1.37,0.54l2.21,-0.3l5.81,1.42l14.92,0.95l16.88,-1.74l2.3,0.55l1.01,-0.3l7.43,-9.17l1.51,-2.95l0.22,-2.1l0.51,-0.86l3.79,-4.12l1.15,-0.88l3.86,-1.78l6.0,-1.21l4.61,0.5l3.44,1.06l3.56,1.87l3.87,-0.75l12.93,-5.38l4.18,-0.98l4.02,0.25l2.45,1.2l4.22,1.46l4.07,0.17l0.38,1.3l2.33,1.96l6.36,1.78l4.3,2.3l4.65,1.15l2.16,0.86l3.22,2.48l0.87,1.55l-0.78,1.66l1.39,11.49l0.33,1.01l1.82,2.65l2.23,2.2l1.34,2.38l-0.49,3.64l0.64,0.9l-1.54,2.53l-1.35,3.52l-0.8,3.65l-0.31,4.88l-1.95,2.47l-0.47,5.19l-9.27,18.97l-3.44,3.19l-1.44,1.97l-0.09,2.56l-1.51,3.37l-1.73,2.24l-1.42,0.32l-2.05,-0.06l-3.54,-0.66l-5.13,-3.01l-3.3,-0.79l-0.34,-0.69l0.32,-2.13l2.23,-4.98l-0.53,-1.73l-0.37,-0.26l-1.32,0.0l-5.24,1.82l-0.7,-0.46l2.4,-4.8l0.18,-1.95l-0.31,-1.4l-2.04,-2.41l-1.27,-0.84l-2.72,-0.6l-1.1,-0.64l-0.84,-0.97l-1.1,-2.63l-0.72,0.01l-0.79,1.66l-0.89,0.39l-3.47,-0.16l-2.84,1.01l-1.84,-0.43l-2.03,-2.05l-3.65,-1.0l-3.28,0.4l-2.68,2.26l-1.36,3.67l-1.05,1.27l0.12,0.61l1.3,0.68l3.27,0.36l1.27,0.43l-0.61,0.56l0.05,1.69l2.51,2.07l3.74,0.96l2.31,1.11l-0.5,2.77l-2.63,1.86l-7.56,-0.5l-3.63,0.62l-4.19,4.12l-15.18,5.82l-5.35,-0.28l-2.16,0.4l-3.49,2.82l-3.17,0.05l-1.0,1.08l-0.42,1.26l0.29,2.65l-0.51,0.61l-1.12,0.18l-2.78,1.45l-1.65,0.28l-4.52,-0.42l-2.2,0.2l-5.54,1.45l-8.78,-0.04l-4.64,0.74l-4.02,2.03l-0.17,0.56l1.06,1.85l-0.33,1.49l-1.2,1.3l-1.59,1.01l-0.14,0.53l0.51,0.92l-0.06,0.52l-4.72,3.92l-1.62,0.34l-2.0,-0.82l-2.51,-3.07l-1.67,-0.42l-0.96,1.18l-3.78,2.29l-1.57,3.35l-1.76,0.75l-3.18,-1.51l-1.91,-0.15l-0.4,0.24l-3.25,7.28l-1.34,2.04l-2.23,1.4l-5.05,-0.25l-4.63,1.08l-3.43,-0.9l-1.76,0.69l-1.43,7.74l-4.1,3.6l-3.12,-0.15l-9.01,-4.6l-1.07,-0.24l-2.84,1.1l-3.31,-0.12l-1.7,0.5l-1.46,1.18l-2.14,2.78l-0.96,0.78l-1.11,0.1l-5.28,-0.79l-7.34,0.46l-4.03,0.99l-3.7,2.69l-0.82,1.89l0.06,1.54l-1.51,0.27l-1.2,0.89l-2.84,1.34l-1.14,0.93l-3.09,4.69l-2.22,1.64l-0.8,1.0l-0.33,2.11l-1.85,1.99l-0.63,1.43l-0.3,2.41l0.86,3.81l-1.06,0.65l-1.37,-0.15l-0.85,-1.11l-1.85,-5.77l-2.4,-2.27l1.22,-1.33l0.11,-0.76l-0.4,-0.73l-1.02,-0.5l-2.77,-0.06l-1.31,-0.34l-0.94,-0.69l-0.32,-0.82l0.03,-2.13l-0.62,-1.37l-2.04,-1.29l-4.69,-0.34Z\", \"name\": \"Sachsen\"}, \"DE-HB\": {\"path\": \"M265.62,250.29l0.77,0.14l2.23,-0.47l2.69,1.38l7.16,2.2l2.11,-0.44l3.26,0.01l0.47,1.29l2.72,1.52l4.48,0.32l3.54,2.47l4.4,1.6l1.36,-0.49l1.23,-2.55l0.76,-0.22l3.33,3.07l-1.4,1.14l-0.28,0.91l0.47,0.95l2.35,2.05l0.26,0.56l-1.01,1.53l-0.59,3.76l-1.36,1.22l-3.97,2.26l-4.58,-2.93l-0.59,0.2l-0.14,1.16l-1.67,0.47l-1.73,-0.22l-5.32,-2.63l-5.13,0.89l-1.22,-0.18l-0.19,-4.35l-4.75,-4.35l-1.5,-1.88l-0.64,-3.9l-1.4,-2.3l-0.98,-0.62l-3.09,0.05l-2.31,-1.3l-3.92,-1.3l-1.3,-2.58l2.51,-0.02l2.99,1.58ZM261.84,196.51l4.03,1.21l2.2,0.32l4.13,-0.11l-0.95,1.95l0.35,1.49l1.13,2.28l0.64,2.7l-0.11,2.44l-1.57,2.18l-1.95,1.5l-1.06,-1.31l-1.38,-0.15l-1.41,-2.21l0.74,-3.74l-2.97,-5.84l-1.83,-2.72Z\", \"name\": \"Bremen\"}, \"DE-SL\": {\"path\": \"M65.93,746.0l-0.23,-1.93l-0.65,-1.16l-1.78,-1.49l-9.11,-3.87l-1.37,-0.17l-2.68,1.35l-1.34,0.11l-0.3,-4.41l0.59,-3.76l13.51,-1.05l11.44,0.43l6.27,-2.41l2.29,0.18l1.97,-0.33l14.47,-5.63l7.96,-4.23l2.89,1.17l0.89,-0.17l1.79,-1.14l7.05,3.24l6.38,0.31l2.11,1.74l4.12,2.71l0.79,0.23l1.21,0.11l1.89,-0.35l2.95,-1.49l0.05,1.82l1.71,3.48l0.25,3.41l0.57,0.68l0.74,0.13l0.16,1.73l-2.72,1.68l-1.93,2.1l-0.92,0.5l-0.54,0.98l0.61,1.93l4.08,4.23l-0.04,1.37l1.09,0.55l4.87,0.7l2.32,0.74l0.81,0.39l0.38,0.81l-0.64,1.56l0.39,1.37l-0.74,1.05l-2.08,1.61l-0.56,2.26l-1.52,1.52l-0.72,2.75l-1.14,1.4l-2.18,0.34l-0.95,1.98l0.91,4.25l5.38,4.66l1.21,0.05l-1.12,0.59l-1.6,3.08l-3.65,0.82l-2.07,2.79l-3.13,-1.11l-8.41,-0.07l-2.96,-1.08l-3.73,-2.3l-0.7,-0.12l-1.33,1.19l0.29,1.69l-2.64,1.41l-1.85,-1.23l-1.07,-3.29l0.05,-4.41l-0.38,-0.4l-2.04,-0.09l-6.05,-2.9l-1.21,-0.17l-2.89,0.23l-4.04,-0.78l-1.14,0.2l-0.86,2.29l1.06,3.9l-1.48,1.66l-1.02,0.2l-3.73,-1.17l-4.42,-0.05l-0.97,-0.35l-1.09,-1.54l0.73,-2.95l-0.62,-2.25l-0.78,-0.28l-1.53,0.75l-1.61,-4.5l-2.21,-1.07l0.12,-1.66l-0.28,-0.74l-6.51,-5.32l-1.57,-1.62l-0.52,-1.25l0.36,-0.78l1.85,-0.31l0.42,-1.34l-0.43,-0.9l-5.19,-4.82Z\", \"name\": \"Saarland\"}, \"DE-BY\": {\"path\": \"M307.24,662.75l0.86,-0.85l0.92,0.01l0.77,-0.48l0.41,-3.68l0.81,-1.04l3.72,-0.82l5.12,-2.0l2.55,1.34l1.32,0.36l-0.83,1.47l0.4,0.46l0.46,-0.03l2.16,-1.19l1.78,-1.75l0.49,-2.09l3.29,-0.87l9.69,0.58l4.61,1.99l0.68,0.67l0.77,1.74l1.59,1.62l2.33,0.32l1.62,-0.2l6.17,-2.23l0.81,-0.71l0.31,-0.73l-0.49,-3.2l1.7,-3.26l-0.64,-0.92l-2.32,-0.46l0.95,-3.62l-0.18,-3.43l1.88,0.4l1.07,-0.46l1.62,1.38l2.27,-0.43l1.71,0.66l1.51,-0.04l4.99,-1.4l0.46,-0.63l-0.67,-1.37l0.04,-0.77l0.65,-1.65l0.73,-0.82l0.6,-0.5l4.05,-1.4l1.68,-0.95l1.08,-1.11l0.12,-1.5l-0.59,-4.05l2.29,-6.91l1.08,-1.41l1.88,-0.6l2.59,2.37l1.15,0.36l2.03,-0.12l5.96,-1.94l6.14,-3.03l2.02,-1.47l1.25,-1.69l3.15,-4.7l1.02,-2.47l5.27,-4.94l1.17,-0.69l0.08,1.25l0.81,0.65l5.41,-0.31l1.16,0.29l1.63,1.47l0.74,2.27l0.54,0.65l9.39,3.01l0.77,1.25l0.03,1.8l0.44,0.78l1.44,1.0l1.71,1.89l2.58,1.75l-0.8,1.6l0.11,0.62l0.93,1.11l2.6,0.42l2.27,-0.53l0.56,1.24l0.9,1.03l2.62,1.88l0.23,1.17l0.56,0.48l2.81,0.21l1.06,-0.67l1.25,-0.14l1.25,2.28l2.44,1.7l0.83,4.11l-0.62,2.8l1.31,2.75l-0.33,1.46l0.63,1.21l1.07,0.93l4.39,-0.02l2.31,0.54l3.38,1.67l0.63,-0.1l0.41,-0.53l0.49,-4.06l0.51,-0.49l1.78,0.58l3.89,-0.64l3.02,0.94l1.19,-0.17l0.81,-0.86l0.12,-1.97l-0.74,-1.51l-2.78,-0.9l-0.75,-1.34l-0.65,-0.53l-2.94,-0.17l-1.83,-1.61l-2.67,-1.32l-0.59,-0.61l0.29,-3.55l0.33,-0.63l0.53,-0.32l1.93,0.55l0.91,-0.15l2.26,-3.1l0.7,-0.52l2.07,0.49l2.62,-1.16l2.08,0.23l1.63,-0.61l1.98,1.54l3.25,-0.73l1.24,0.05l3.26,4.0l1.12,0.8l0.76,-0.31l0.41,-1.39l2.52,0.3l1.03,0.66l0.58,0.81l0.94,0.27l3.67,-0.89l1.28,-1.14l1.14,-0.21l0.8,1.45l1.46,0.33l1.75,2.56l-1.95,2.16l-0.04,0.53l0.85,1.12l4.81,3.81l0.59,-0.1l1.09,-1.49l1.27,0.86l2.3,0.6l1.35,-0.24l0.41,-0.8l-0.17,-1.28l1.04,-2.16l-0.67,-2.01l1.11,-2.55l-0.17,-1.39l0.9,-0.32l0.25,-0.59l-0.33,-2.13l-1.14,-1.63l-0.11,-1.2l-0.5,-0.91l0.35,-3.12l-0.78,-2.67l0.16,-1.09l-0.65,-1.75l2.34,-0.94l1.98,-0.4l2.01,-1.11l0.52,-0.59l0.42,-1.4l1.23,-0.51l0.79,-0.82l6.04,0.28l1.44,0.39l0.99,1.7l-1.77,1.46l-0.24,4.31l0.32,1.33l3.45,2.23l1.36,-0.2l0.85,0.2l0.31,0.45l0.24,2.83l0.33,0.58l3.94,2.39l0.86,0.11l2.4,-0.52l1.34,-1.56l1.94,0.02l3.06,0.99l11.65,-2.06l1.71,-0.43l0.59,-0.74l2.05,-0.29l0.95,0.07l0.72,0.83l1.73,0.68l0.04,1.1l0.84,0.31l4.45,-1.52l3.2,-1.58l2.44,-0.21l0.65,0.23l2.01,2.64l1.96,1.08l0.37,4.11l0.46,0.54l5.42,2.83l2.27,0.01l2.57,0.63l0.21,0.31l-1.66,-0.1l-0.39,0.25l0.11,0.45l2.22,1.95l0.72,1.03l0.34,1.69l-0.16,1.44l-1.61,1.1l-1.23,1.55l-0.02,0.47l1.16,1.66l4.8,2.52l3.4,3.53l0.71,1.43l0.26,1.79l-0.67,2.84l0.08,2.18l0.97,2.1l4.34,2.83l0.78,1.13l0.55,3.29l15.17,6.93l1.41,1.16l3.71,0.4l1.43,1.15l0.22,1.61l-0.67,1.74l0.11,1.78l5.34,2.42l0.45,0.69l-0.28,2.29l-0.76,1.87l-2.24,3.49l-0.64,1.71l-1.62,-0.42l-0.48,0.26l-0.62,1.92l-0.34,4.58l-1.39,1.19l-3.99,1.43l-1.4,2.43l1.54,3.06l2.13,2.57l2.95,1.97l4.55,1.89l0.69,1.16l0.06,1.48l-0.78,1.47l0.13,0.52l0.72,0.37l-0.28,1.38l1.12,1.11l2.29,1.06l0.94,0.87l0.63,1.26l0.87,4.35l1.27,2.71l0.81,1.02l1.28,1.08l2.14,0.19l0.44,0.3l0.41,6.2l0.53,2.18l1.12,1.84l2.11,1.51l4.46,1.78l1.87,1.64l3.18,6.03l1.79,1.56l2.02,0.61l5.88,0.72l1.84,-0.21l0.34,-0.5l-0.33,-1.25l0.87,-0.23l3.62,0.84l1.6,0.72l4.11,3.4l1.69,0.63l1.12,3.4l3.2,3.22l1.21,0.59l9.1,10.48l1.3,2.51l1.71,2.25l2.78,1.38l6.04,0.27l1.85,0.61l1.11,0.81l2.99,3.39l4.11,3.55l1.02,2.05l0.06,3.46l1.49,2.17l2.89,2.32l3.15,1.92l2.35,0.96l0.51,-0.2l1.85,-3.44l1.14,-0.44l2.08,0.37l5.02,2.79l1.6,-0.1l0.24,2.12l1.04,2.3l1.58,2.05l1.73,1.48l1.97,0.81l3.69,0.51l1.23,0.58l2.21,2.93l4.73,8.01l1.76,1.57l-2.77,4.98l-0.27,1.32l0.72,0.39l0.98,1.59l1.19,0.69l-0.93,0.88l-0.25,1.51l0.51,4.16l-0.36,3.82l-0.59,1.59l-2.07,3.59l-1.4,0.86l-2.62,0.4l-0.87,1.54l-0.73,2.83l-3.74,-1.44l-1.54,-1.97l-3.43,-1.85l-10.31,-2.43l-3.36,0.39l-3.33,1.09l-0.98,0.8l-0.59,1.14l0.75,3.31l0.93,1.31l0.18,0.93l-0.24,1.09l-1.8,3.62l-0.19,5.97l-0.88,1.53l-0.74,3.27l-1.29,1.84l-9.51,7.1l-3.21,1.53l-13.46,2.01l-10.24,3.47l-1.71,1.03l-3.61,2.97l-3.18,1.52l-1.61,1.35l-5.06,0.84l-1.58,0.71l-4.05,4.56l-3.86,2.32l-1.84,2.3l-1.73,0.34l-0.82,1.06l-0.24,2.03l0.53,1.74l0.9,1.55l0.97,1.3l6.85,6.14l1.41,2.68l0.83,2.85l0.85,1.09l2.44,1.29l4.33,3.43l3.29,6.55l2.39,2.99l-6.14,8.46l-0.58,1.08l-0.38,2.35l-2.42,3.25l0.06,0.54l1.8,1.49l5.47,0.87l1.68,-0.24l2.39,-0.9l1.33,0.18l2.26,1.91l1.88,2.76l0.75,1.73l0.26,1.51l-0.25,2.82l-1.47,3.08l-1.87,1.89l0.16,2.88l-1.16,2.39l0.08,2.98l0.81,2.91l-3.21,3.13l-0.82,0.03l-2.2,-1.25l-1.18,0.06l-1.46,0.57l-5.65,-3.39l-5.34,-4.83l-2.51,-0.56l-2.21,-1.53l-0.47,-2.8l1.09,-2.63l2.53,-1.08l0.1,-0.68l-2.01,-1.66l-2.49,-1.41l-1.31,-1.38l0.9,-1.93l-0.41,-0.57l-1.62,0.18l-5.53,-1.21l-3.58,0.01l-3.5,0.72l-1.94,0.83l-4.41,3.37l-1.44,0.55l-3.9,0.29l-1.27,-0.54l-3.58,-2.72l-1.52,-3.59l-0.76,-0.97l-1.8,-0.26l-3.82,1.26l-1.56,0.22l-5.73,-1.03l-2.14,0.26l-3.1,1.1l-0.75,-0.58l-0.44,-1.13l0.9,-1.48l0.88,-2.83l-0.42,-0.58l-2.65,1.08l-2.36,1.68l-1.5,0.52l-0.26,0.45l0.6,1.9l2.2,2.3l0.16,3.24l-0.39,1.75l-2.66,2.94l-23.2,-0.73l-8.35,1.48l-1.11,0.57l-1.09,2.14l-0.75,0.21l-5.44,-0.96l-8.03,-0.03l-6.12,-0.79l-3.44,2.62l-1.92,5.31l-1.66,1.59l-2.01,0.69l-4.49,0.64l-4.61,-0.88l-2.36,0.46l-4.83,4.69l0.19,0.67l2.05,0.77l0.24,0.6l-0.65,0.95l-1.41,0.52l-4.19,0.09l-1.92,0.52l-2.04,1.59l-2.66,2.76l-1.98,0.78l-1.87,-0.18l0.19,-3.0l-0.27,-0.4l-2.32,-0.75l-2.59,0.63l-6.36,3.79l-1.81,0.48l-10.09,-0.13l-1.18,-0.59l-0.71,-1.19l0.59,-1.65l-0.45,-1.68l-4.9,-4.54l-5.06,-2.05l-0.36,-0.53l2.8,-1.64l0.91,-0.92l-0.07,-0.61l-3.34,-1.99l-1.63,-0.11l-5.35,1.9l-2.77,0.29l-0.65,-0.17l-1.31,-1.65l-12.95,-4.21l-2.49,-0.05l-1.67,0.96l-1.95,2.34l-1.13,0.78l-1.01,0.15l-4.07,-0.53l-1.45,-0.57l-1.12,-0.88l-0.13,-0.83l0.94,-1.84l-0.6,-1.59l-0.7,-0.28l-2.39,0.51l-1.47,0.5l-0.27,0.43l0.2,1.23l1.43,2.63l-1.1,5.97l0.22,0.44l2.06,1.33l0.48,1.0l0.38,1.46l0.02,2.56l-0.86,2.7l-1.39,2.45l-1.56,1.79l-3.99,1.77l-2.78,4.56l-1.72,1.99l-1.86,1.46l-4.33,2.29l-2.07,0.69l-7.6,0.8l1.04,-1.69l1.51,-0.48l0.76,-0.68l0.26,-0.97l-0.25,-1.51l1.75,-4.61l0.07,-2.24l-0.23,-0.38l-2.04,-0.87l-4.31,0.67l-1.64,1.38l-1.84,-0.58l-2.6,1.03l-0.76,-0.64l-0.46,-1.04l-0.36,-2.61l-0.84,-0.94l1.83,-1.22l0.61,-1.51l-0.9,-1.8l-4.86,-6.13l-0.46,-0.12l-2.68,1.35l-0.75,-0.39l-0.18,-1.4l-0.89,-1.68l-2.22,-2.21l-0.26,-1.94l-0.62,-0.28l-1.11,0.77l-1.35,0.23l-2.83,-0.19l-3.12,-0.93l-2.33,0.82l-1.74,-0.77l-0.3,-1.06l0.18,-1.57l-0.44,-1.68l-1.15,-1.08l-1.54,-0.52l-1.76,0.16l-1.54,0.73l-2.14,2.14l-1.14,2.09l-3.79,-0.83l-4.02,-2.5l-2.2,-0.96l4.11,-1.04l1.04,-1.33l1.35,-0.56l3.53,0.8l4.42,-1.94l7.33,-5.6l2.8,-1.14l3.86,1.42l2.37,0.49l2.45,-0.02l3.49,-0.99l2.12,-1.01l2.36,-0.56l1.69,0.03l0.49,0.32l1.53,3.25l0.63,0.05l1.06,-1.28l0.32,-2.33l2.77,0.72l0.95,-0.65l0.45,-1.9l-0.84,-2.57l-0.57,-6.54l-0.51,-0.77l-1.25,-0.17l-0.63,-1.11l-1.28,-1.18l0.73,-1.09l2.32,-0.31l0.78,-1.2l0.87,-0.35l0.19,-0.55l-2.55,-5.48l-0.46,-0.42l-1.19,-0.07l0.99,-0.98l0.52,-2.31l0.43,-0.62l0.41,-4.61l-0.21,-0.8l-1.3,-1.23l-0.94,-2.04l0.15,-0.59l1.32,-0.92l2.91,-6.98l0.74,-2.83l0.16,-4.81l-0.34,-1.72l-2.62,-5.07l-3.85,-15.14l-1.57,-4.54l-3.15,-4.58l-1.91,-3.58l-0.58,-0.34l-0.85,0.02l-0.61,-0.97l5.26,-6.27l0.65,-0.36l0.18,-0.49l-0.29,-1.44l0.86,-1.38l1.22,-1.05l3.32,-0.59l2.26,-1.41l0.64,-0.05l0.52,0.41l0.5,1.82l0.68,0.43l0.85,0.06l9.54,-4.95l0.53,-1.77l1.16,-1.12l5.1,-0.59l-0.07,-0.71l-0.53,-0.48l1.09,-2.68l0.18,-1.6l-0.23,-1.4l-0.9,-1.6l-0.18,-0.94l1.66,-0.87l0.43,-0.45l0.1,-0.83l-0.62,-0.92l-4.02,-2.53l-1.63,-2.66l0.12,-1.36l2.05,-2.42l2.29,1.65l2.94,0.13l1.54,2.66l0.82,0.44l0.86,-0.45l4.95,-4.66l0.73,0.33l-0.54,0.39l-0.02,1.02l-0.58,1.71l0.38,0.92l0.51,0.34l1.7,-0.72l4.25,-3.37l0.09,-0.53l-1.73,-2.74l-0.67,-1.65l-2.99,-1.08l-0.6,-0.67l-0.17,-0.81l0.06,-1.09l0.73,-1.24l-0.03,-3.13l1.39,-1.63l0.55,-2.26l-1.07,-2.44l0.47,-1.36l0.33,-4.38l-0.19,-0.8l-0.75,-0.6l1.86,-0.82l0.18,-1.17l-0.92,-2.48l-1.26,-1.18l-0.71,-1.52l-1.57,-1.53l-0.85,-1.38l-4.06,-2.83l-0.5,-0.58l-1.1,-2.75l-0.54,-0.32l-1.35,-0.01l-2.3,-1.07l-1.55,-0.02l-2.24,-0.82l0.39,-1.87l-1.89,-1.74l0.2,-1.55l-3.01,-1.34l1.83,-0.24l1.04,-1.59l0.6,-2.59l-0.35,-1.51l-2.28,-1.74l-0.95,0.09l-1.23,0.62l-3.67,-3.85l-3.02,-1.98l0.92,-0.35l0.31,-0.87l-1.55,-2.1l-0.17,-2.79l-1.4,-1.31l-0.23,-0.65l0.06,-0.21l2.18,0.83l0.87,-0.6l0.1,-1.15l-1.24,-2.85l0.7,-2.29l-0.29,-0.62l-2.05,-0.88l-0.86,-1.0l-0.22,-0.72l0.25,-3.33l1.56,-1.58l0.84,-0.1l1.86,0.55l0.62,-0.68l-3.12,-6.63l-2.65,-1.08l1.1,-1.43l0.77,-2.15l-1.08,-2.6l0.77,-1.6l-0.13,-1.06l-0.64,-0.52l-1.45,-0.17l-0.84,-0.48l0.52,-1.56l-0.13,-0.62l-1.08,-0.74l-1.14,-0.28l-2.36,1.58l-0.49,0.71l0.01,0.44l0.8,0.92l0.02,0.91l-3.59,3.2l-0.7,0.32l-7.69,0.0l-0.45,-3.4l0.24,-2.35l-0.43,-2.82l-0.44,-0.74l-1.19,-0.83l0.57,-1.19l-0.7,-1.14l-1.22,-0.12l-1.73,1.79l-1.44,0.57l-0.95,2.06l-0.66,0.3l-1.11,-0.51l1.98,-2.18l0.04,-2.29l1.77,-2.05l0.43,-1.48l-0.83,-1.39l-3.8,-3.59l-0.24,-4.98l-3.88,-4.3l-0.65,-0.13l-2.79,1.25l-3.39,3.08l-1.09,-1.87l-0.26,-1.92l-0.37,-0.42l-0.69,-0.04l-0.95,1.22l-1.44,0.77l-0.45,2.03l-0.73,0.27l-1.28,-0.13l-1.86,-1.01l0.85,-1.87l-0.08,-1.09l0.84,-0.79l-0.2,-1.41l0.56,-1.34l-0.32,-1.95l0.7,-1.47l-0.22,-0.68l-0.62,-0.5l-0.52,-0.04l-1.67,0.91l-2.47,0.68l-2.58,-1.4l-1.93,0.5l-1.07,-0.08l-5.23,-2.09l-1.95,-0.07l-3.63,0.46l-3.49,1.08l-4.71,-0.28l-1.32,0.34l-1.28,0.7l-1.63,1.68l0.67,2.26l-0.68,1.36l0.15,1.16l1.52,0.85l3.77,0.63l0.26,0.43l-0.4,1.79l0.49,0.74l0.92,0.08l0.9,-0.42l1.16,-2.18l2.28,0.8l-1.01,5.79l0.66,1.44l-1.49,1.17l-0.6,-0.04l-1.11,-1.02l-0.8,-0.27l-2.96,1.06l-3.2,0.23l-2.21,0.94l-0.91,1.03l0.29,2.08l-1.32,1.17l-0.69,1.82l-0.76,0.83l-6.21,0.17l-1.56,-0.21l-5.51,1.02l-0.81,-0.43l-1.36,-1.97l-1.97,-1.61l-0.28,-0.55l3.13,-2.68l0.61,-0.96l-1.14,-5.85l2.13,-0.38l1.38,-1.37l-0.23,-2.35l1.6,-3.44l-0.49,-0.75l-2.19,-0.91l-0.2,-0.63l1.53,-1.91l0.54,-1.57l-1.04,-1.29l-2.07,0.2l-1.03,-0.66l-0.76,-1.74l0.22,-3.05l-0.25,-0.72l-1.03,-0.1l-1.19,1.58l-0.64,-0.99l-3.46,-8.98l0.19,-8.9l1.56,0.51l0.63,-0.19l0.26,-0.5l-1.22,-2.34l0.03,-1.65l-0.89,-1.16l-0.52,-2.77l-0.62,-0.81l-1.3,-0.26l-1.47,0.54l-1.3,-0.69Z\", \"name\": \"Bayern\"}, \"DE-HE\": {\"path\": \"M189.06,662.8l6.22,-3.72l0.46,-0.72l0.37,-2.21l1.03,-1.35l1.72,0.1l1.59,-0.34l1.56,1.35l0.71,0.28l0.56,-0.14l1.0,-3.2l0.01,-0.9l-0.54,-0.58l-2.12,-1.09l-0.61,-0.67l-0.06,-0.76l0.19,-1.05l1.13,-2.19l1.06,-1.29l5.64,-2.46l1.19,-1.1l1.97,1.5l1.1,0.01l2.15,-2.8l-0.16,-0.7l-0.79,-0.83l0.65,-1.58l5.18,0.04l1.71,-0.39l1.12,-1.08l0.01,-1.4l-1.48,-4.04l-0.77,-1.2l-1.95,-1.33l-2.99,-5.25l-1.77,-0.79l-0.33,-1.2l-0.43,-0.34l-4.82,-1.27l1.32,-1.24l1.23,-3.58l1.88,-1.97l-0.26,-0.58l-1.68,-1.09l0.1,-5.36l0.34,-1.28l1.56,-1.0l1.46,-1.69l1.46,-0.49l1.42,0.13l2.34,2.22l1.53,0.16l0.9,-0.33l2.37,-1.77l2.65,-5.78l-0.4,-0.95l-0.99,-0.56l-0.54,-0.95l-0.35,-1.95l-1.97,-4.04l0.97,-2.07l0.42,-2.19l0.87,-1.67l0.55,-0.5l1.34,-0.37l0.43,-0.57l0.8,-4.78l-0.87,-1.26l-2.35,-1.53l-0.08,-0.85l-0.76,-0.58l0.0,-0.35l5.11,-3.82l0.98,-2.01l1.94,-1.17l0.84,-1.0l5.61,-4.56l1.55,-0.06l0.97,1.8l0.86,0.57l1.74,0.25l2.76,-0.24l3.21,-1.88l0.37,-0.79l-0.07,-1.12l2.78,-2.36l1.56,-0.88l2.12,0.06l0.52,-1.07l0.13,-2.84l2.01,-3.69l0.51,-0.49l1.34,-0.46l1.66,-3.08l1.9,-2.43l-0.97,-3.82l0.23,-1.74l-1.61,-2.78l0.25,-0.65l9.73,-0.04l3.41,0.7l4.7,-2.49l0.13,-1.34l-1.08,-1.92l2.08,-2.41l3.15,-2.93l0.33,-0.95l-0.07,-1.74l-1.95,-7.73l-1.12,-0.81l0.39,-1.08l-0.17,-0.64l-0.62,-0.46l-0.83,0.01l-2.71,1.53l-4.44,0.76l-1.35,1.51l-0.75,0.14l-1.38,-0.44l-0.54,-1.6l-1.74,-1.31l0.16,-0.72l1.5,-2.53l2.08,-2.26l3.23,-2.73l0.6,-1.27l1.72,-0.95l1.16,-1.45l4.72,-1.37l3.75,-0.17l3.54,-0.82l4.62,0.89l3.74,-1.97l4.02,-0.17l0.55,-0.29l1.0,-1.67l0.25,-1.18l-1.05,-1.11l-2.21,-0.32l-0.38,-3.62l-1.42,-2.11l0.62,-1.45l5.0,-2.08l4.02,-0.87l1.52,-0.65l3.17,1.66l2.7,0.9l0.5,0.61l0.17,1.06l-0.15,2.25l2.49,2.08l3.82,0.67l1.33,-0.08l3.58,-2.32l1.97,-0.15l0.56,-1.04l0.64,-2.92l7.03,-3.95l1.49,-2.4l2.0,-1.81l0.9,-1.62l1.49,-4.22l-0.27,-0.71l-1.68,-1.12l7.81,-2.32l0.86,-0.74l1.31,-1.93l0.99,0.39l1.68,-1.34l1.57,0.14l0.46,2.42l1.75,0.9l2.24,-0.07l1.99,-1.46l1.18,1.16l1.43,0.54l1.66,0.17l2.57,-0.67l0.82,1.66l2.26,1.14l1.16,2.98l1.77,1.61l-0.91,1.14l-2.57,-1.6l-0.99,0.03l-0.47,0.52l-0.05,0.71l0.99,1.75l-1.64,-0.47l-0.7,0.14l-0.31,0.51l-0.39,3.23l-1.24,0.25l-0.51,0.49l0.18,1.27l1.92,3.63l1.22,1.37l0.91,0.41l-0.82,1.44l0.67,1.4l-0.22,1.74l0.37,3.21l-0.37,0.67l-5.26,0.47l-1.71,1.99l0.1,1.18l0.7,1.56l-3.19,-0.74l-0.45,0.48l0.72,1.25l2.98,2.22l8.44,2.96l1.4,0.03l1.12,0.52l2.78,2.99l1.71,0.24l0.99,-0.41l3.57,-2.85l0.4,-0.61l0.05,-1.02l0.91,-0.92l0.25,-0.83l-0.71,-0.75l-0.63,-0.06l-2.27,1.39l-2.96,-2.41l-0.52,-1.13l5.21,-2.78l2.45,-0.67l0.99,-0.94l-0.43,-1.37l2.91,1.36l1.54,2.67l0.81,0.67l1.3,-0.11l0.91,-0.89l0.29,-0.97l-1.31,-2.87l1.9,-0.18l1.4,-1.02l0.32,1.9l3.81,2.58l-1.46,1.07l-0.75,1.73l0.64,2.78l1.28,1.69l0.21,2.45l0.43,0.75l1.62,0.46l0.82,1.1l1.15,0.78l1.9,0.02l4.46,1.18l0.25,0.35l-0.49,1.09l0.04,0.85l0.56,0.87l1.52,1.05l0.38,1.85l0.52,0.68l3.5,1.25l2.03,0.33l1.52,0.78l2.41,0.13l2.32,1.45l3.23,1.4l-0.24,0.85l-1.43,1.46l-0.63,1.44l-0.64,4.09l-0.9,-1.05l-0.05,-1.06l-1.42,-1.4l-1.74,-0.02l-2.24,0.52l-1.07,0.82l1.54,2.44l2.61,0.65l-0.33,1.29l-1.77,2.83l-0.63,3.16l0.4,0.72l1.69,0.29l1.23,0.8l1.93,0.22l1.12,1.6l0.27,1.05l-1.58,2.94l-5.34,0.22l-0.77,-0.42l0.07,-1.0l-0.63,-0.47l-1.56,0.41l-1.13,-0.34l-4.22,0.2l-2.58,1.51l-0.45,2.05l0.29,0.98l1.64,1.88l0.26,1.48l-0.27,0.7l-2.54,0.46l-3.39,-0.3l-1.58,-0.48l-0.99,0.34l-0.44,0.87l0.21,1.67l0.93,0.27l0.72,-0.49l-0.07,1.56l0.45,1.2l0.86,0.09l1.69,-1.65l1.02,-0.15l2.22,1.43l1.99,3.1l-2.73,2.91l-0.27,0.57l0.31,1.21l-0.24,1.38l-2.81,0.88l-2.01,0.22l-1.52,0.55l-0.92,0.75l-0.79,2.63l0.37,2.31l-1.66,0.35l-0.79,1.45l1.44,1.95l-0.21,2.08l-2.03,3.63l0.06,1.51l-1.9,1.56l-1.21,1.72l-0.4,3.33l0.25,0.99l0.53,0.55l0.64,0.09l1.67,-0.53l2.71,1.2l1.5,0.1l0.86,-0.45l0.74,-1.59l-1.3,-1.8l0.22,-0.79l4.97,-1.71l4.58,0.88l0.84,0.67l1.02,2.21l0.21,2.8l-1.57,0.46l-1.0,0.94l-0.37,0.8l0.33,1.49l-0.08,3.19l0.81,1.99l-1.2,4.17l0.37,0.84l0.48,0.17l-0.79,1.94l-4.23,6.19l-1.88,1.37l-6.08,3.01l-5.77,1.88l-1.85,0.11l-0.86,-0.29l-2.75,-2.43l-2.62,0.79l-1.26,1.68l-2.34,7.08l0.55,5.34l-2.41,1.72l-4.04,1.39l-0.82,0.67l-0.87,1.02l-0.73,1.9l-0.03,1.05l0.51,1.18l-4.68,1.27l-1.31,0.02l-1.71,-0.66l-2.15,0.43l-1.62,-1.37l-1.32,0.45l-1.62,-0.4l-0.79,0.27l-0.3,1.28l0.31,2.57l-0.98,3.73l0.55,0.82l2.43,0.55l-1.67,3.05l-0.14,0.8l0.59,2.64l-0.76,0.76l-5.86,2.1l-1.42,0.19l-2.14,-0.3l-1.19,-1.32l-0.89,-1.92l-0.71,-0.64l-4.87,-2.13l-10.04,-0.61l-3.71,1.06l-0.56,2.17l-1.63,1.62l-1.41,0.86l0.51,-0.78l-0.2,-0.69l-4.5,-1.94l-5.38,2.04l-3.79,0.85l-0.88,0.74l-0.36,0.83l-0.26,3.37l-1.59,0.36l-1.25,1.35l0.13,0.59l1.66,0.94l0.5,0.1l1.48,-0.57l0.77,0.12l0.34,0.4l0.51,2.75l0.93,1.28l-0.09,1.47l1.05,1.97l-1.77,-0.58l-0.52,0.37l-0.2,9.52l3.53,9.26l0.81,1.24l0.73,0.23l1.47,-1.73l-0.18,3.35l0.87,2.03l1.2,0.94l2.28,-0.17l0.56,0.73l-2.08,3.19l0.05,0.77l0.48,0.63l2.33,1.07l-1.56,3.17l-0.13,1.17l0.33,1.26l-0.96,0.79l-1.87,0.26l-0.66,0.5l0.08,1.81l1.07,4.11l-0.39,0.63l-2.41,1.88l-0.97,1.27l0.48,1.19l1.95,1.59l1.21,1.76l-0.66,0.9l-2.0,-1.11l-0.72,0.41l-0.06,0.94l2.49,2.72l2.67,4.35l-0.53,-0.08l-1.27,-1.24l-2.83,-0.14l-1.03,0.15l-2.22,1.81l-0.82,0.27l-2.29,-0.37l-5.77,0.21l-2.88,3.09l1.56,2.62l0.21,0.73l-0.38,0.71l-2.29,1.12l-0.74,-1.11l-0.8,0.1l-1.03,2.77l-3.65,3.39l-3.34,-0.68l-0.21,-0.48l0.2,-1.48l1.57,-0.92l0.38,-0.8l-0.38,-3.0l0.18,-1.13l1.84,-1.85l1.51,1.25l1.11,-0.21l1.61,-2.44l0.13,-1.04l-0.34,-0.85l-0.4,-0.23l-5.94,0.42l-1.96,-2.58l-4.29,-0.09l-4.48,-2.24l-1.09,-1.05l-1.37,-2.83l-0.42,-1.33l0.56,-1.04l-0.1,-1.22l-1.11,-1.39l-0.19,-0.98l-0.45,-0.46l-0.7,-0.06l-7.39,1.79l-0.14,0.84l1.89,7.33l-0.58,0.7l-3.94,1.43l-6.51,-5.73l-2.49,-1.66l-2.58,-0.34l-2.96,1.03l-1.5,-3.6l-3.84,-6.83l0.16,-3.16l1.55,-2.32l2.53,-1.45l3.36,-0.63l3.44,-3.99l0.34,-1.44l-0.27,-0.46l-1.38,-0.46l-3.7,0.45l-1.35,-3.01l-1.84,-2.89l-0.93,-3.51l-1.02,-1.85l-2.22,-2.77l-0.65,-1.41l1.41,-4.57l-1.93,-4.35l-10.62,-10.19l-1.57,-0.86l-1.32,-0.28l-2.83,0.07l-12.29,3.51l-3.89,2.47l-4.64,2.05l-4.18,1.16l-3.72,0.11l-1.57,-1.95l-0.28,-1.51l-0.88,-1.29l-6.36,-4.84l-0.86,-0.31Z\", \"name\": \"Hessen\"}}, \"height\": 1013.8952766123396, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-europe-mill-en.js",
    "content": "$.fn.vectorMap('addMap', 'europe_mill_en',{\"insets\": [{\"width\": 900.0, \"top\": 0, \"height\": 790.3366477906968, \"bbox\": [{\"y\": -9690294.156947838, \"x\": -4159649.2860909165}, {\"y\": -3201145.6268246886, \"x\": 3229902.613642692}], \"left\": 0}], \"paths\": {\"BE\": {\"path\": \"M400.73,433.08l-0.52,-2.25l-0.56,-0.57l-1.77,-0.48l-2.13,-0.14l-0.38,-0.28l-0.52,-2.3l-0.72,-1.23l-1.11,-0.96l-1.47,0.14l-1.43,0.73l-0.9,0.22l-0.92,-0.59l-2.1,-2.12l-0.16,-0.43l0.22,-0.99l-0.84,-1.6l-0.09,-0.51l5.63,-2.88l3.56,-1.53l1.28,-0.35l0.35,1.28l0.4,0.6l0.61,0.41l0.8,0.0l1.32,-0.72l1.22,0.17l0.87,0.33l1.05,0.77l1.13,0.14l2.05,-0.73l1.86,-1.11l0.78,-1.23l1.7,0.4l0.63,-0.24l0.21,-0.45l-0.2,-0.84l1.02,-0.55l1.09,0.83l0.82,0.06l1.67,-1.16l0.35,0.38l0.35,0.92l0.55,0.19l1.3,-0.08l1.17,-1.0l0.54,1.83l1.68,1.4l1.62,0.43l2.18,-0.42l1.56,1.44l2.54,0.82l0.24,0.29l-0.08,0.46l-0.9,1.69l-0.1,0.88l-1.21,1.2l-0.17,0.9l0.73,1.23l0.43,0.19l1.64,-0.55l0.11,0.13l-0.41,-0.01l-0.41,0.39l0.39,0.41l2.43,0.07l1.66,1.17l0.54,0.79l0.69,0.45l-0.57,0.57l-0.1,0.41l0.2,0.53l0.57,0.56l1.13,0.22l0.42,0.41l0.27,2.03l-2.32,1.34l-0.73,1.47l-1.68,-0.36l-0.37,0.11l-1.48,1.5l-1.13,2.23l-0.65,0.89l-0.26,2.02l2.04,2.91l-0.89,1.46l-1.0,-0.01l-2.56,0.49l-3.15,-2.93l-1.99,-0.73l-1.61,-1.01l-1.76,-0.23l-0.27,-1.86l-0.65,-0.86l0.89,-2.91l-0.19,-0.47l-0.91,-0.33l-0.73,0.31l-1.0,0.88l-0.65,1.57l-1.29,0.64l-2.28,0.26l-2.49,-0.26l-0.25,-0.23l0.63,-0.96l0.11,-0.73l-0.73,-1.1l0.42,-1.16l-0.09,-0.82l-1.77,-1.33l-1.44,-0.33l-2.31,-0.2l-0.79,0.17l-0.45,0.42Z\", \"name\": \"Belgium\"}, \"FR\": {\"path\": \"M467.41,568.7l0.77,-0.77l0.95,-1.92l1.23,-0.85l3.09,-0.88l1.24,-1.13l0.62,0.05l1.09,0.51l0.48,-0.04l0.35,-0.3l0.45,-1.04l-0.18,-0.96l0.1,-2.01l0.33,-0.92l0.26,-0.03l0.39,0.4l0.24,2.71l-0.35,2.37l0.28,0.9l0.7,0.99l0.4,6.29l-0.06,0.38l-2.01,3.28l-0.12,3.28l-0.24,0.74l-0.6,0.88l-1.03,2.66l-0.66,0.88l-3.62,-1.94l-0.93,-0.91l0.77,-0.94l0.22,-0.73l-0.25,-0.45l-2.03,-0.85l0.51,-1.36l-0.22,-1.18l-0.41,-0.29l-1.25,-0.03l1.06,-1.23l0.08,-1.13l-0.23,-0.35l-0.75,-0.34l-0.61,-0.58l-0.2,-0.63l0.36,-0.41l0.84,-0.38l0.16,-0.59l-0.67,-0.97l-0.55,-0.18ZM313.21,482.01l0.65,-0.84l-0.12,-0.59l-0.73,-0.41l-2.57,0.36l-1.17,-0.3l-1.49,-1.3l-1.38,0.14l-0.87,-0.45l-1.52,-0.0l-0.86,-0.67l-5.41,-1.47l-2.3,-0.18l-2.17,0.65l-0.93,-0.18l-0.72,-0.8l-0.92,-1.74l-2.86,-1.03l0.2,-0.24l1.5,-0.19l1.83,-0.56l0.83,-0.83l-0.09,-0.62l-1.43,-0.83l-1.1,-0.24l-0.48,-0.52l1.77,0.19l2.26,-0.18l0.24,-0.69l-0.82,-0.75l-1.49,-0.46l-4.19,0.09l-0.42,-1.11l0.47,-1.3l2.39,-1.3l6.29,-1.5l2.69,0.22l2.0,-0.28l2.39,-0.99l1.02,-0.82l3.06,-0.46l2.9,0.82l2.77,3.22l1.41,1.17l0.45,0.04l3.24,-1.89l4.69,0.05l0.91,0.97l0.66,-0.11l0.39,-0.87l0.65,-0.76l1.04,1.03l5.25,-0.19l0.91,-0.2l0.3,-0.33l-0.2,-0.4l-1.32,-0.73l-1.04,-1.7l-0.24,-6.84l-1.52,-2.15l-1.65,-3.07l-0.74,-1.78l0.1,-1.05l3.43,0.27l2.91,-0.67l1.05,0.35l-0.06,1.26l0.44,1.82l1.34,2.03l0.33,0.16l2.38,-0.09l2.65,0.59l3.28,0.09l5.0,1.0l2.17,-0.63l1.94,-1.22l3.74,-0.81l0.55,-0.6l-0.36,-0.63l-2.1,0.17l-1.75,-0.69l-0.18,-0.57l0.94,-2.27l5.65,-2.74l4.18,-0.84l4.36,-1.56l2.29,-1.65l1.52,-2.13l0.98,-0.76l0.11,-0.58l-0.47,-0.63l0.37,-7.74l0.38,-1.32l0.77,-1.06l1.22,-0.85l1.89,-0.95l7.18,-1.35l0.7,-0.34l0.89,1.98l-0.23,0.88l0.24,0.64l1.05,1.27l1.31,1.16l1.4,0.75l1.2,-0.31l1.32,-0.69l0.9,-0.18l0.82,0.69l0.65,1.1l0.2,1.26l0.46,1.27l0.79,0.51l2.14,0.14l1.48,0.36l0.25,0.21l0.52,2.23l0.39,0.51l0.52,0.06l0.75,-0.61l0.36,-0.04l2.15,0.19l1.16,0.24l1.51,1.13l-0.49,1.57l0.74,1.06l-0.07,0.45l-0.63,0.95l-0.03,0.44l0.24,0.46l0.49,0.31l2.77,0.32l2.61,-0.31l1.51,-0.75l0.83,-1.78l1.17,-0.81l0.11,0.06l-0.86,2.81l0.08,0.38l0.61,0.7l0.35,2.16l0.4,0.31l1.75,0.15l1.55,0.99l2.02,0.76l3.1,2.91l0.72,0.08l1.01,-0.31l2.15,-0.17l0.56,0.58l1.0,0.26l0.85,0.63l0.7,0.16l1.01,-0.16l0.74,-0.57l0.67,-0.2l0.66,0.06l1.34,0.7l0.67,-0.05l0.86,0.22l0.9,0.74l0.57,1.33l2.4,2.92l0.83,0.07l1.01,-0.82l0.33,-0.06l1.18,0.37l0.34,0.99l0.66,0.25l0.87,-0.21l1.22,0.23l3.14,-0.67l0.9,1.02l1.32,0.54l5.32,0.9l1.54,0.57l0.05,1.07l-4.07,4.38l-0.61,1.63l-0.4,2.35l-0.78,2.19l-1.23,2.2l-0.44,1.6l0.31,1.21l-0.19,1.55l-0.73,2.24l-0.14,1.82l0.62,1.44l-1.04,0.58l-0.92,1.44l-0.88,0.32l-1.65,0.02l-0.4,-0.65l-0.67,-0.35l-1.31,0.06l-1.26,0.7l-0.92,1.02l-0.06,0.45l0.57,0.78l0.73,0.14l-0.57,0.84l-3.55,3.55l-0.31,0.55l-2.89,1.4l-0.3,0.56l-0.35,2.71l-3.37,2.5l-1.41,3.23l0.11,0.36l0.71,0.7l-0.3,1.32l-0.67,0.58l-0.84,0.37l-0.24,0.37l0.02,1.08l0.28,0.37l0.63,0.17l1.24,-0.12l1.53,-0.78l1.1,-1.08l0.06,-0.49l-0.55,-0.89l1.09,-0.96l1.33,-0.57l1.91,-0.11l2.25,0.34l0.17,1.45l0.39,0.63l-0.55,1.68l0.07,0.37l1.71,1.93l0.78,0.61l0.73,1.16l-0.84,0.75l-1.8,0.89l-0.41,0.81l0.03,0.94l0.36,0.71l0.96,0.63l1.82,2.88l1.7,1.48l-0.43,0.65l-0.47,1.66l-1.22,0.37l-1.74,1.24l-1.95,-0.12l-1.05,0.48l-0.22,0.4l0.1,0.84l0.84,0.96l0.72,1.77l0.97,0.7l2.2,0.58l0.6,1.76l-0.88,0.55l-1.6,2.79l0.02,0.38l0.6,1.15l-0.2,0.75l0.43,1.08l1.01,1.0l4.78,2.37l0.96,0.2l3.04,-0.67l0.22,0.03l0.38,0.96l-1.06,1.72l-1.48,1.7l0.06,1.58l-1.05,-0.07l-0.48,0.65l-2.48,1.14l-4.33,3.67l-1.97,1.05l-0.55,0.79l-0.41,1.18l-1.06,0.92l-0.94,0.45l-2.59,0.52l-2.42,1.03l-1.16,-0.44l-2.87,0.05l-1.9,-1.3l-3.43,-0.8l-1.08,-1.78l-0.31,-0.19l-2.66,-0.07l-0.38,-0.17l-0.12,-1.01l-0.5,-0.38l-2.08,0.32l-0.81,0.45l-0.79,-0.06l-0.3,0.4l-0.61,0.05l-4.45,-1.35l-2.06,-0.39l-0.69,-0.33l-0.61,-0.89l-0.94,-0.61l-2.23,0.45l-1.85,1.74l-7.11,4.41l-1.44,2.0l-1.51,2.72l-0.16,1.53l0.65,4.05l1.42,2.15l-2.56,-0.58l-1.25,0.17l-2.7,0.83l-0.6,0.45l-0.23,0.58l-5.69,-1.28l-2.44,1.08l-0.33,-0.04l-0.81,-1.08l-2.69,-1.15l0.28,-0.4l0.06,-0.56l-0.7,-0.84l-2.87,-0.64l-0.99,0.54l-0.97,-1.3l-0.9,-0.35l-1.09,-0.05l-2.66,-1.07l-3.39,-0.98l-1.12,-0.09l-0.58,0.37l-0.27,0.7l-0.12,1.46l-3.16,-0.18l-1.59,0.11l-0.9,-0.43l-3.18,0.48l-2.06,-1.5l-1.46,-0.72l-0.73,-0.03l-0.76,0.32l-1.03,0.13l-1.28,-0.01l-2.47,-2.29l-2.3,-0.16l-4.56,-1.73l-0.08,-0.34l-0.5,-0.41l-0.46,0.19l-0.66,0.89l-0.39,-0.03l-0.36,-0.23l0.64,-1.0l0.26,-0.92l-0.03,-0.84l-0.21,-0.32l-0.96,-0.5l-2.09,-0.24l-1.08,-0.38l-0.43,-0.23l-0.42,-0.74l2.08,-0.55l2.09,-2.26l1.89,-7.6l1.35,-8.91l0.9,-1.51l1.14,-0.42l0.17,-0.63l-1.03,-1.24l-0.59,-0.03l-0.43,0.42l0.62,-6.75l0.54,-3.01l0.77,-2.65l2.93,2.2l0.74,1.02l1.11,3.82l1.99,1.61l0.49,-0.04l0.08,-0.49l-0.46,-0.85l-0.79,-0.69l-1.22,-4.82l-0.82,-1.5l-1.35,-1.33l-3.86,-2.45l-0.26,-0.35l-0.07,-0.37l0.72,0.02l1.05,0.44l0.54,-0.47l-0.98,-3.09l-0.57,-6.56l-0.32,-0.32l-2.25,-0.27l-1.0,-0.36l-5.23,-2.74l-1.77,-2.81l-1.87,-2.15l-0.38,-0.8l0.02,-0.77l0.93,-1.93l-0.03,-0.4l-0.86,-1.27l-1.37,-0.73l0.46,-0.73l0.44,-0.53l0.88,-0.15l1.32,0.2l1.31,0.58l1.17,0.19l0.44,-0.27l-0.2,-0.48l-3.38,-1.67l-5.06,0.54l-1.01,-0.19l-0.72,-0.28l-0.23,-0.74l0.6,-0.47l0.66,-1.0l-0.06,-0.51l-0.75,-0.7l-1.24,-0.37l-2.76,0.2ZM332.31,508.21l0.62,0.36l1.26,1.45l-0.15,0.48l-1.62,-1.85l-0.11,-0.43Z\", \"name\": \"France\"}, \"BG\": {\"path\": \"M662.06,585.16l0.29,-3.94l0.71,-1.75l-0.05,-0.72l-0.34,-0.45l-0.52,-0.23l-1.48,-3.54l-0.69,-0.61l-1.51,-0.53l-1.29,-0.71l-1.09,-0.94l-1.64,-1.9l0.66,-0.27l1.35,-1.8l0.2,-0.83l-0.23,-0.74l-0.63,-0.58l-0.41,-1.19l0.35,-1.29l0.03,-0.68l-0.31,-0.71l0.24,-0.54l0.99,-0.47l1.96,-0.09l0.3,-0.16l1.23,-1.62l0.8,-0.57l1.21,-1.38l0.5,-1.61l-0.17,-0.4l-1.52,-1.02l-1.32,-1.73l-2.83,-1.63l-0.66,-0.92l-0.35,-1.39l-1.06,-1.73l-0.32,-1.13l-0.05,-1.22l0.63,-2.12l2.3,-1.11l0.53,-2.08l0.71,-0.5l3.99,2.37l-0.39,0.49l-1.07,0.56l-0.68,0.84l-0.16,0.81l0.16,0.75l1.15,0.79l4.1,-0.65l4.13,0.33l5.62,1.1l3.78,0.39l2.81,-0.5l9.82,1.78l4.63,0.26l2.69,-0.69l1.88,-0.94l1.63,-1.76l3.74,-2.22l3.65,-1.25l4.82,-1.02l3.06,-0.33l4.53,2.38l1.97,0.05l1.33,0.33l0.99,0.7l1.96,-0.44l2.27,2.66l2.33,0.82l2.12,0.48l2.5,0.06l-0.28,3.44l-1.08,1.52l-1.9,-0.54l-2.52,0.52l-1.56,2.22l-1.43,1.35l-0.55,2.99l-0.1,4.22l-1.73,0.67l-3.65,3.91l0.11,0.63l2.06,1.07l0.86,0.77l1.53,2.31l2.14,2.56l0.2,0.58l-1.3,-0.19l-0.64,0.09l-0.5,0.38l-1.76,-0.06l-1.68,0.63l-0.63,-0.33l-2.39,-2.11l-0.84,-0.32l-3.33,0.55l-1.81,1.11l-3.72,0.47l-0.65,0.45l-0.8,1.79l-2.11,0.49l-0.45,0.47l-0.23,0.66l-1.29,-0.3l-1.48,0.43l-0.64,1.22l0.24,0.7l0.41,0.45l0.4,1.29l0.14,1.28l-0.19,0.57l-0.77,0.47l-1.8,0.58l-1.96,-0.27l-0.78,0.24l-2.65,0.25l-3.6,0.88l-1.54,-1.11l-1.96,-0.82l-1.99,-0.47l-1.13,0.51l-2.12,-1.23l-0.94,-1.63l-0.73,-0.26l-1.48,0.51l-4.43,-0.06l-0.37,0.27l-0.37,0.84l-1.79,0.08l-1.58,0.68l-1.65,0.41l-2.63,-0.19l-2.7,0.22l-1.27,1.01l-2.52,-0.16Z\", \"name\": \"Bulgaria\"}, \"DK\": {\"path\": \"M554.98,347.03l-0.27,0.17l-2.04,-0.48l-2.42,-1.16l0.34,-2.19l0.45,-0.72l4.46,2.58l0.04,0.75l-0.57,1.04ZM521.14,336.77l-0.22,-0.59l0.73,-0.83l0.32,0.89l-0.83,0.53ZM520.72,332.89l0.03,1.74l-0.25,0.39l-3.02,1.28l-1.05,0.95l-0.5,1.54l0.08,0.36l0.82,0.99l1.45,0.59l0.29,1.42l-0.97,0.73l-3.08,0.9l-0.28,0.33l-0.33,2.23l0.1,1.82l-0.27,2.73l-2.01,0.63l-1.43,-2.33l-0.04,-1.11l-1.16,-4.03l-0.3,-0.26l-2.46,-0.47l-1.06,-0.05l-1.28,0.26l-1.42,-2.13l0.24,-2.45l-0.86,-1.5l-0.07,-1.09l-0.84,-0.87l-0.75,-0.28l-0.25,-0.91l0.53,-0.2l2.37,0.16l1.44,-0.44l2.06,-2.53l0.14,-1.11l1.62,-0.2l0.65,0.66l-0.16,1.38l0.12,1.92l0.25,0.35l1.84,0.62l0.44,-0.26l0.83,-1.98l0.58,-0.6l0.15,-1.49l-0.3,-0.79l-0.37,-0.4l1.92,-1.31l2.33,-1.22l1.27,-0.06l1.35,0.3l1.87,0.72l0.2,0.29l-0.75,1.19l-0.29,0.87l0.58,2.72ZM517.34,347.25l1.62,0.28l1.26,0.71l-1.94,-0.19l-2.4,1.26l-0.36,-0.17l0.32,-0.61l0.82,-0.4l0.68,-0.88ZM504.49,350.08l2.48,1.22l1.72,-0.02l0.86,0.38l0.26,1.85l-0.8,0.33l-1.36,-0.13l-1.59,0.57l-5.33,-2.52l0.22,-2.53l2.27,-0.18l1.27,1.03ZM500.25,304.31l-0.34,0.28l-1.08,-0.37l0.33,-0.36l1.93,-0.37l-0.83,0.82ZM495.95,352.06l-0.81,-1.41l0.87,-0.91l0.6,-1.06l1.48,-1.56l-2.13,4.94ZM468.6,349.15l-0.42,-2.39l-0.69,-1.33l0.85,-0.26l0.28,-0.41l-0.25,-3.27l-0.49,-1.78l-6.52,-3.55l0.92,-7.01l-1.09,-3.15l0.55,-8.59l1.14,-0.12l2.54,0.96l1.02,0.11l0.64,0.76l1.02,0.47l0.49,-0.15l0.69,-1.1l0.23,-1.47l1.93,-1.94l2.11,-1.0l1.52,1.58l0.43,0.13l0.28,-0.35l0.79,-5.97l-0.27,-0.44l-1.96,-0.62l-1.84,0.54l-1.79,2.66l-1.35,2.98l-2.07,0.26l-1.77,0.83l-2.33,-1.48l-0.02,-0.92l0.2,-0.59l1.88,-2.48l2.46,-2.33l2.46,0.02l2.01,-0.79l1.05,-0.09l3.53,0.17l2.07,-0.61l1.73,-1.22l3.52,-4.77l1.89,-1.89l4.04,-0.74l3.41,-2.12l-0.98,1.01l-0.52,1.77l1.22,2.37l-0.24,1.3l0.08,2.5l-1.14,1.36l-1.29,2.84l-0.65,0.68l-0.18,7.31l0.13,0.32l1.37,1.27l1.55,0.73l4.81,0.01l0.84,1.17l-0.84,2.52l-1.27,0.93l-1.68,0.72l-0.87,0.03l-1.4,-1.34l-0.5,-0.05l-0.79,0.52l-0.85,0.91l-1.25,3.97l-0.56,2.54l-0.66,-0.32l-1.22,-0.03l-1.7,0.66l-0.08,0.69l1.36,1.25l-1.45,0.7l-1.2,1.08l-0.53,0.82l-1.54,1.01l-0.95,1.22l-0.07,0.36l1.05,4.17l-0.31,0.95l-1.8,1.6l-0.79,1.57l0.37,0.57l1.54,-0.02l1.37,0.66l0.38,0.38l-0.27,0.76l0.33,1.37l-1.23,-0.49l-3.7,0.92l-0.99,-0.03l-0.97,-0.68l-3.84,-0.98l-2.88,-0.13ZM494.78,336.56l2.16,5.08l-0.38,0.82l0.26,1.43l-0.26,1.07l-1.97,1.37l-2.27,0.06l-2.47,-0.72l-3.42,-1.35l-0.23,-0.63l-0.55,-0.54l-0.9,-2.27l0.02,-2.6l1.55,-0.33l3.85,-1.39l0.72,0.18l1.12,0.77l1.1,0.04l1.67,-1.0ZM494.14,332.71l-0.34,-0.12l-0.07,-0.92l0.3,-1.04l-0.31,-1.07l1.07,1.5l-0.65,1.64ZM490.95,349.9l0.79,0.15l0.49,0.27l-0.27,0.06l-1.01,-0.48ZM483.63,346.94l2.33,1.33l0.69,1.28l-0.87,0.16l-0.75,-0.43l-1.03,-0.14l-0.36,-2.2Z\", \"name\": \"Denmark\"}, \"HR\": {\"path\": \"M540.52,517.06l1.22,0.46l4.0,-0.1l0.92,-0.53l1.59,-2.35l0.23,0.62l0.59,0.68l1.14,1.06l0.98,0.61l1.03,0.14l1.21,-0.48l2.01,0.79l1.9,0.18l1.48,-0.45l0.26,-0.49l-0.74,-1.79l0.05,-0.31l0.75,-0.46l0.19,-0.41l-0.17,-0.47l-0.81,-0.72l2.04,-0.93l2.28,-0.61l0.65,-0.75l0.33,-2.14l-0.13,-1.17l-0.95,-1.16l0.13,-0.69l0.25,-0.33l1.9,-0.54l3.0,-1.24l0.95,-1.14l2.19,-0.05l0.5,-0.65l-0.2,-1.45l0.85,-0.55l1.23,0.15l1.87,0.65l2.36,1.14l1.59,1.24l0.96,1.48l1.26,1.13l1.63,0.83l1.18,1.01l1.03,1.44l1.3,0.76l1.77,0.21l0.88,0.39l0.48,0.77l0.9,0.7l1.44,0.67l2.28,0.38l4.39,0.1l1.06,0.19l2.52,-0.79l1.72,-1.78l0.65,0.1l1.95,-0.35l-0.04,0.3l-0.59,0.4l-0.11,0.55l0.73,1.13l0.64,1.69l-0.34,0.78l0.04,0.38l0.68,0.87l0.9,0.34l-0.43,0.82l0.1,1.43l1.31,1.12l3.14,1.15l0.78,0.85l-2.14,0.07l-0.85,-0.43l-0.57,0.26l-0.1,0.53l-0.62,0.17l-0.29,0.46l0.49,2.66l-0.15,0.57l-0.99,0.12l-0.22,0.72l-0.35,0.03l-1.27,-0.27l-0.47,-0.38l-0.13,-1.02l-0.45,-0.83l-1.46,-1.06l-2.32,-0.14l-2.74,-0.81l-2.1,0.23l-1.83,-0.36l-1.83,1.07l-0.59,-0.01l-1.56,-1.26l-0.68,-0.17l-2.04,0.71l-2.45,-0.72l-0.89,-0.11l-0.73,0.22l-0.97,-0.22l-2.75,-1.73l-0.46,0.02l-1.61,1.24l-3.67,-0.22l-1.05,0.92l-1.24,1.77l-0.76,0.65l-0.57,-0.2l-0.92,-0.7l-1.72,-1.94l-1.03,-0.46l-1.26,-0.1l-0.89,0.22l-0.64,0.48l-0.82,5.66l-0.02,1.56l0.17,0.33l1.91,1.38l2.27,2.38l0.73,0.32l1.41,4.88l1.27,1.68l3.93,3.5l1.7,2.26l5.03,4.33l2.25,0.81l0.18,0.21l0.02,1.54l0.34,0.88l1.53,1.81l2.97,2.53l0.33,0.7l-0.53,0.3l-3.22,-2.75l-2.74,-1.61l-3.2,-3.05l-4.08,-1.17l-2.77,-1.3l-1.91,0.16l-1.87,0.41l-1.68,-0.17l-0.41,-0.57l0.07,-0.58l-0.25,-1.08l-1.64,-1.31l-2.27,-1.27l-2.07,-1.58l-4.2,-4.32l-0.57,-0.94l1.66,-0.36l1.04,-0.01l1.33,0.28l0.45,-0.22l-0.12,-0.48l-2.73,-1.86l-3.85,-3.6l-1.08,-1.61l-0.13,-1.72l0.28,-2.53l-0.73,-2.03l-3.12,-2.53l-1.26,-1.35l-2.23,-0.75l-1.15,0.05l-0.31,0.18l-0.65,1.06l-0.42,1.98l-3.53,5.22l-0.94,-0.0l-1.52,-2.44l-1.51,-1.92l-0.34,-2.0l-1.09,-3.94l0.28,-0.2l0.5,0.51l3.57,0.81l1.03,-0.39l0.69,-0.9ZM587.08,559.57l2.86,1.2l-0.65,-0.13l-2.21,-1.07ZM591.3,561.05l0.02,-0.53l-0.29,-0.29l0.24,-0.07l0.56,0.15l0.73,1.02l-1.27,-0.27ZM599.03,565.39l1.29,0.47l0.05,0.42l-0.83,-0.52l-0.5,-0.37ZM574.06,555.07l0.67,-0.09l1.62,0.23l0.72,0.66l0.71,0.07l-0.87,-0.02l-1.68,-0.33l-1.18,-0.53ZM577.18,558.94l1.74,0.32l1.9,-0.2l1.59,0.28l-1.61,-0.19l-1.63,0.5l-1.35,-0.25l-0.64,-0.46ZM578.24,553.5l-2.04,0.04l-1.75,-0.28l-0.61,-0.34l0.18,-0.53l1.76,0.07l3.03,0.49l0.29,0.22l-0.86,0.32ZM552.42,532.01l1.48,1.22l1.43,1.62l1.21,1.01l-0.28,0.25l-3.01,-2.61l-0.34,-0.88l-0.49,-0.61ZM551.01,528.89l-1.01,-0.23l0.11,-0.55l0.35,0.02l0.55,0.76ZM547.01,523.61l0.87,-0.6l0.52,-0.96l2.47,3.21l-0.92,0.2l-1.06,-1.14l-1.25,-0.15l-0.64,-0.56ZM545.04,522.83l0.07,0.67l-0.21,-0.6l0.14,-0.08ZM545.54,524.84l0.91,0.95l-0.18,1.58l0.2,2.41l0.24,0.81l-1.56,-3.9l-0.09,-0.44l0.42,-0.52l0.06,-0.9Z\", \"name\": \"Croatia\"}, \"DE\": {\"path\": \"M430.54,420.84l0.92,-0.06l2.69,-2.09l0.09,-0.31l-0.19,-0.46l-0.62,-0.26l-0.01,-0.35l1.21,-2.32l0.46,-1.8l-0.14,-0.96l-1.33,-1.91l-0.18,-0.88l-0.45,-0.34l-1.3,-1.73l0.0,-0.39l0.58,-0.41l1.97,-0.79l2.73,0.97l0.9,-0.57l1.27,0.05l3.04,-1.03l0.66,-0.66l0.43,-0.93l-0.14,-0.35l-1.06,-0.91l0.08,-0.38l1.63,-0.89l1.69,-1.29l0.69,-1.23l0.26,-2.25l-0.57,-1.0l-0.78,-0.57l-1.72,0.03l-0.99,-0.35l-0.56,-0.77l0.32,-0.81l-0.14,-0.63l0.26,-0.15l3.48,0.01l0.58,-0.47l0.32,-1.87l0.87,-2.53l0.87,-1.53l0.25,-5.88l-0.69,-1.09l-1.23,-0.85l0.66,-2.97l1.24,-1.67l0.91,-0.42l4.57,-0.29l4.95,0.12l1.86,2.37l-0.66,1.17l0.16,0.55l1.25,0.65l0.93,-0.22l0.23,-0.23l0.88,-2.61l1.28,0.81l0.43,0.53l0.03,2.08l0.36,0.39l0.43,-0.32l0.59,-3.01l-0.42,-2.2l0.28,-1.9l1.0,-1.44l3.67,0.69l4.06,-0.37l1.41,0.7l3.63,3.98l1.33,0.69l1.5,0.2l0.44,-0.29l-0.24,-0.47l-1.99,-0.81l-4.4,-4.83l-1.43,-0.63l-1.94,-0.18l-1.12,-0.42l-0.65,-0.61l-0.17,-0.49l-0.08,-5.08l-0.75,-0.72l-1.14,-0.35l-0.81,0.32l-0.82,0.0l-0.16,-0.68l0.19,-0.5l2.27,-0.51l1.72,-0.78l0.23,-0.34l0.07,-1.33l-3.74,-4.94l-0.12,-1.54l2.65,0.11l3.74,0.96l1.1,0.72l1.31,0.02l3.51,-0.89l0.63,0.37l0.82,0.16l0.3,0.35l1.88,0.47l1.57,1.79l0.07,1.44l-2.01,1.88l-0.12,0.46l0.4,0.25l3.46,-0.28l0.85,1.3l0.43,0.15l1.87,-0.51l4.9,2.22l3.72,-1.12l0.53,1.41l-0.66,1.61l-2.59,1.91l-0.12,0.5l0.59,1.22l1.1,0.48l2.61,-0.23l4.21,1.16l0.93,-0.43l3.21,-2.73l1.19,-0.54l4.21,-0.42l0.28,-0.16l0.73,-1.01l1.74,-1.1l1.1,-1.17l2.52,-2.12l5.8,1.01l1.62,2.36l4.08,2.65l3.73,-0.15l1.18,2.22l0.71,3.25l2.21,1.63l3.05,0.68l0.49,3.01l1.55,4.98l-0.04,1.42l-0.54,1.61l-0.94,1.33l-1.28,0.77l-0.85,1.0l-0.23,1.2l0.11,0.33l1.7,1.75l3.53,2.51l1.27,1.91l-0.62,1.66l-0.19,1.49l0.34,0.97l0.67,0.75l0.76,0.44l0.24,0.54l-0.16,0.92l0.17,0.88l0.57,0.56l-0.95,2.9l-0.95,1.25l-0.07,0.35l0.34,1.21l1.36,1.97l0.13,0.43l-0.35,1.38l0.22,0.65l2.57,1.24l0.28,0.36l1.05,3.13l-0.68,2.68l-0.61,1.5l-1.87,3.2l-0.35,0.04l-1.11,-0.52l0.11,-0.81l-0.9,-0.95l-0.36,-0.87l-0.65,-0.33l-2.72,-0.49l-0.7,0.29l-0.37,0.5l-0.03,0.43l0.63,0.95l0.68,0.47l-4.56,1.61l-1.4,0.72l-2.6,0.78l-2.07,0.25l-0.58,0.38l-0.68,1.25l-0.24,0.14l-0.94,-0.31l-0.99,0.65l-1.05,0.3l-0.67,1.03l-2.06,0.33l-0.98,1.46l-2.31,-0.41l-0.98,0.41l-2.21,0.32l-1.39,0.85l-1.28,1.36l-0.74,1.21l-0.42,-0.72l-1.35,-1.21l-0.72,-0.08l-0.44,0.32l-0.04,1.02l0.52,0.98l0.62,0.67l0.52,1.47l1.03,1.06l2.35,1.46l0.63,0.91l-1.57,2.39l-0.04,0.42l1.52,1.82l1.75,3.09l0.71,0.89l1.87,1.57l1.49,0.06l1.32,1.12l1.64,1.83l1.18,0.82l0.85,0.28l0.58,0.55l0.92,1.52l0.79,0.46l1.3,-0.06l1.73,1.35l1.56,1.65l-0.15,2.44l-0.13,0.43l-0.7,0.66l-0.5,0.23l-2.35,-0.94l-0.41,0.07l-0.49,0.51l-0.66,2.87l-0.38,0.46l-0.61,0.46l-3.2,0.95l-2.56,1.26l-1.17,0.77l-0.83,1.02l-0.01,1.03l2.54,3.11l0.01,1.17l-0.74,1.46l0.24,0.51l1.68,0.35l0.18,0.48l-0.4,2.61l-1.38,-0.46l-0.88,-0.57l-0.23,-0.24l0.13,-0.78l-0.34,-0.56l-1.34,-0.68l-2.77,0.52l-0.64,-0.47l-0.98,-0.38l-2.1,-0.53l-0.57,0.25l-0.13,1.46l-6.22,0.62l-1.94,0.58l-2.46,1.08l-0.43,0.56l-0.87,0.51l-0.93,0.15l-0.52,-0.15l-1.9,0.52l-0.6,-0.06l-1.07,-1.12l-0.58,-1.0l-1.72,-0.06l-1.22,-0.4l-2.32,0.09l-0.53,-0.15l-0.56,0.34l-0.41,2.23l-0.42,0.78l-0.69,0.81l-1.08,0.46l0.2,-0.9l-0.26,-0.48l-1.5,-0.34l0.01,-0.59l-0.68,-0.92l-2.74,-1.4l-1.22,-0.4l-1.53,0.83l-1.64,-0.01l-4.44,-2.42l-4.11,0.18l-0.69,-0.77l-0.81,-0.23l-0.59,0.27l-1.41,-1.07l-0.75,-0.23l-1.16,0.2l-1.14,0.75l-0.48,1.07l0.38,0.69l0.72,0.21l-0.22,0.19l-3.28,-0.22l-1.51,0.54l-2.18,0.2l-3.02,-0.1l-1.57,-0.55l-0.38,-0.91l0.11,-1.58l0.74,-2.31l0.21,-1.68l-0.31,-1.12l0.4,-1.44l1.21,-2.16l0.81,-2.26l0.41,-2.41l0.54,-1.43l4.05,-4.32l0.04,-1.82l-0.29,-0.36l-1.85,-0.66l-5.27,-0.89l-1.02,-0.38l-1.24,-1.21l-0.76,0.01l-2.64,0.66l-1.15,-0.23l-0.94,0.14l-0.44,-1.02l-1.73,-0.51l-0.56,0.1l-0.99,0.81l-0.26,-0.05l-2.04,-2.62l-0.66,-1.44l-1.19,-0.93l-1.22,-0.27l0.41,-1.96l0.35,-0.73l1.11,-1.26l0.04,-1.7l-0.32,-0.35l-2.1,-0.66l-0.85,-0.55l-1.51,-1.71l-0.34,-0.93l-0.02,-0.94l0.82,-2.22l2.46,-1.42l0.19,-0.42l-0.31,-2.35l-0.75,-0.87l-1.3,-0.32l-0.2,-0.25l0.7,-0.85l-0.06,-0.62l-1.03,-0.68l-0.56,-0.8l-1.49,-0.97l0.7,-2.62l-0.06,-0.33l-0.69,-0.92l-1.52,-0.63l-0.25,-0.31ZM538.5,364.74l4.43,2.81l-0.02,0.85l-1.71,0.2l-1.36,-0.24l-0.22,-0.77l0.24,-0.97l-0.09,-0.36l-1.21,-1.13l-0.06,-0.38ZM536.24,359.59l0.19,1.05l-1.4,-0.89l-1.53,0.01l-0.35,0.21l-0.81,1.46l-0.34,0.03l-2.16,-1.36l-0.36,-1.05l0.29,-2.61l0.72,-0.83l0.1,-0.89l1.09,-0.91l0.75,-0.03l0.34,0.79l0.56,0.64l2.04,0.8l0.23,0.34l-0.77,0.76l-0.35,0.83l0.47,0.93l1.31,0.71ZM503.18,358.27l-1.43,0.03l-0.68,-0.64l-0.5,-0.17l0.48,-0.55l1.69,0.5l0.45,0.83ZM463.5,350.42l0.05,-0.86l0.24,-0.46l0.12,0.59l0.37,0.32l0.99,0.04l-1.45,0.14l-0.32,0.22ZM466.66,353.0l-0.22,0.19l-1.03,-0.04l-0.32,-0.19l0.93,-0.31l0.57,0.14l0.06,0.21Z\", \"name\": \"Germany\"}, \"BA\": {\"path\": \"M580.15,520.99l2.69,1.66l1.16,0.26l0.79,-0.22l0.76,0.1l2.52,0.74l0.74,-0.07l1.34,-0.63l2.1,1.42l1.04,-0.04l1.56,-1.0l1.73,0.34l2.04,-0.24l2.68,0.79l2.34,0.15l0.97,0.73l0.36,0.66l0.27,1.25l0.82,0.61l1.42,0.3l1.48,-0.1l1.29,-0.48l1.3,-0.22l1.2,0.42l-0.24,1.29l-0.55,1.34l-1.93,2.88l-0.28,0.84l-0.18,2.19l0.51,1.08l1.24,0.5l1.38,0.86l3.17,2.88l-0.23,0.39l-1.2,0.13l-2.07,-0.23l-0.97,0.57l-0.08,0.45l0.23,0.46l1.43,1.62l1.61,2.23l0.08,0.83l-0.17,0.65l-0.21,0.29l-1.06,-0.49l-0.87,0.03l-0.84,0.24l-0.68,0.71l-1.4,0.25l-1.35,-0.37l-0.66,0.34l-0.25,0.99l1.25,2.21l-0.08,0.64l-0.78,-0.82l-0.66,-0.16l-0.82,0.11l-2.53,2.08l-0.73,1.8l0.01,1.34l-1.64,0.26l-0.54,0.41l-0.22,0.48l0.27,3.36l1.05,1.76l0.02,0.34l-1.02,0.97l-1.68,-0.57l-2.39,-1.46l-3.77,-2.49l-0.73,-1.04l-0.84,-0.22l-1.03,0.25l-0.31,-0.19l0.47,-0.54l-0.1,-0.84l-0.43,-0.7l-2.99,-2.55l-1.42,-1.68l-0.19,-0.5l-0.12,-1.87l-0.52,-0.52l-2.14,-0.74l-4.93,-4.25l-1.71,-2.26l-3.91,-3.48l-1.1,-1.42l-1.12,-4.23l-0.39,-0.85l-0.87,-0.45l-2.23,-2.34l-1.83,-1.33l0.67,-6.52l0.28,-0.24l0.73,-0.18l0.89,0.07l0.74,0.3l1.74,1.95l1.0,0.77l0.96,0.36l0.39,-0.07l0.97,-0.83l1.24,-1.78l0.88,-0.77l3.36,0.32l1.8,-1.25Z\", \"name\": \"Bosnia and Herzegovina\"}, \"HU\": {\"path\": \"M574.1,479.74l1.22,-0.94l0.33,-0.03l0.63,0.16l1.3,0.87l0.65,0.19l0.72,-0.26l3.25,-0.23l0.32,-0.51l-0.46,-2.16l0.08,-0.38l0.54,-0.63l0.13,-0.94l0.82,-0.63l1.72,0.33l2.14,1.72l2.13,1.37l1.92,0.75l5.23,0.12l7.85,-0.41l0.31,-0.18l0.73,-1.14l0.01,-0.42l-0.34,-0.59l0.02,-0.6l0.46,-0.86l1.48,-0.78l4.68,-0.38l2.8,-0.66l0.65,-1.04l0.77,-0.75l0.61,-0.13l2.4,1.14l1.47,0.41l5.93,-2.86l2.25,-4.04l1.81,-0.35l2.94,0.07l2.8,0.69l1.75,-0.08l2.56,-0.74l0.75,0.02l1.4,0.91l1.11,1.58l1.03,0.99l0.79,0.23l4.84,-0.96l0.35,-0.21l1.17,-0.1l0.81,1.93l0.52,0.64l2.34,0.93l0.97,1.3l1.37,0.54l1.12,-0.08l0.79,0.7l0.31,1.75l-2.4,2.19l-0.83,0.51l-0.46,0.09l-1.05,-0.21l-2.92,0.86l-2.41,2.67l-1.56,1.2l-0.17,1.98l-1.62,1.48l-1.18,2.9l-1.73,1.75l-0.13,1.34l-2.12,2.95l-0.24,0.62l0.18,0.84l-2.28,1.58l-0.95,2.12l0.13,1.13l-0.94,0.47l-0.53,1.42l-1.26,0.87l-2.62,-0.28l-1.17,0.24l-0.9,1.34l-0.99,0.54l-1.52,-0.54l-3.08,0.58l-0.47,0.31l-1.03,-0.47l-3.08,-0.33l-1.29,0.26l-3.03,-0.38l-1.28,0.24l-1.63,1.6l-1.88,1.0l-0.83,0.27l-0.67,-0.03l-1.07,-0.47l-0.49,0.29l-0.55,0.69l-1.05,0.42l-2.71,0.54l-0.7,-0.13l-0.37,0.13l-1.68,1.79l-2.19,0.68l-0.9,-0.18l-4.42,-0.1l-2.04,-0.33l-1.28,-0.58l-0.81,-0.62l-0.59,-0.87l-1.18,-0.5l-1.58,-0.16l-1.15,-0.67l-0.95,-1.37l-1.34,-1.13l-1.54,-0.77l-1.18,-1.05l-0.99,-1.51l-1.75,-1.36l-3.01,-1.38l-1.73,-2.2l-0.02,-0.77l-0.66,-0.74l-0.33,-1.64l-0.4,-0.66l-0.32,-0.18l-1.57,-0.06l1.35,-1.16l0.93,-0.45l1.33,0.05l0.62,-0.39l0.55,-2.06l-0.16,-0.54l-0.64,-0.29l-0.2,-0.9l0.58,-1.02l-0.33,-1.71l0.8,-0.09l1.52,-0.76l0.87,-1.68l-0.48,-1.59l-0.26,-0.24l-2.35,-0.68Z\", \"name\": \"Hungary\"}, \"JO\": {\"path\": \"M831.52,741.12l0.58,-3.53l0.44,-1.58l0.83,-1.6l-0.37,-3.27l0.04,-1.71l0.5,-2.13l-0.27,-2.34l0.23,-3.33l0.4,-0.65l1.56,-0.66l0.59,-0.08l1.29,0.28l0.72,0.61l1.37,1.97l2.34,0.73l2.13,1.65l1.5,0.4l4.87,0.61l26.07,-15.69l3.6,12.43l-0.66,0.2l-0.27,0.51l0.81,2.52l0.49,0.26l2.43,-0.61l0.4,1.04l-3.75,3.33l-0.39,0.16l-27.16,7.55l-0.18,0.66l7.05,7.23l6.45,7.19l-4.15,2.37l-2.33,4.88l-9.58,1.9l-0.86,0.58l-3.16,5.04l-5.4,4.25l-0.55,0.11l-13.95,-2.33l0.34,-1.53l-0.11,-1.11l1.27,-6.18l0.98,-2.39l0.03,-4.28l4.02,-10.51l-0.48,-1.65l0.27,-1.3Z\", \"name\": \"Jordan\"}, \"DZ\": {\"path\": \"M466.68,655.77l0.2,0.96l-1.89,1.01l-1.15,2.09l-1.8,1.3l-0.48,0.75l0.24,0.71l1.18,0.57l0.48,1.05l-1.38,7.63l0.01,1.14l0.98,2.38l0.14,1.02l-0.17,2.72l1.02,3.04l-1.02,1.68l-0.52,1.71l-0.43,3.76l-1.55,2.44l-3.79,2.29l-1.33,2.46l-2.56,1.92l-0.62,0.75l-0.33,1.78l0.06,2.27l0.5,1.91l2.35,5.34l0.37,1.56l0.53,0.63l4.21,2.17l0.43,0.43l1.29,1.88l1.24,3.4l0.55,2.52l9.25,6.57l0.26,0.37l6.35,27.2l-2.58,1.56l-0.13,0.55l3.2,4.74l1.25,2.33l1.41,3.9l1.0,3.71l0.29,2.12l-0.36,6.01l0.62,7.8l-250.75,0.0l0.0,-8.71l0.21,-1.15l1.33,-0.71l3.96,-3.12l3.6,-2.24l4.25,-3.2l0.73,-0.34l1.98,-0.3l3.41,-2.71l1.14,-0.61l3.73,0.27l2.99,0.49l0.68,-0.16l1.26,-1.34l0.32,-2.21l3.51,0.13l2.92,-0.31l3.15,-0.57l4.43,-1.3l2.22,-1.57l1.59,-1.64l2.87,-4.42l2.45,-1.23l6.17,-2.18l4.58,-3.19l3.74,-0.45l0.72,-0.41l0.66,-0.82l-0.08,-1.26l-0.77,-0.77l-1.93,-1.01l0.22,-1.48l0.36,-0.93l-0.1,-1.13l-0.72,-1.93l0.22,-1.11l1.41,-0.46l1.34,0.19l2.32,-0.29l5.73,-1.95l0.65,-0.87l0.73,-2.38l0.67,-0.35l5.55,-0.82l15.9,0.62l0.83,-0.3l0.25,-0.37l-0.02,-0.98l-0.46,-1.49l0.23,-0.78l2.27,-1.88l0.11,-0.49l-0.72,-1.4l-3.29,-2.3l-1.25,-1.16l-0.75,-1.29l-0.59,-3.03l-0.99,-1.63l-0.68,-1.92l0.63,-3.67l-0.98,-2.46l-0.14,-0.91l0.29,-3.17l-0.19,-2.84l-1.11,-2.88l0.75,-1.62l-0.21,-0.67l-1.0,-0.89l-0.33,-0.56l0.7,-1.54l-0.0,-0.67l-0.16,-0.28l-4.53,-3.34l-0.72,-0.81l-0.16,-0.47l2.11,0.23l1.5,-0.14l3.37,-1.4l2.62,-1.87l2.1,-1.03l1.75,-2.0l1.55,-1.24l2.27,-1.36l6.57,-2.94l0.88,-0.02l2.29,0.68l2.12,-0.3l1.4,-1.16l1.36,-2.44l2.09,-1.47l2.71,-1.52l3.72,-1.46l2.46,-1.36l3.79,-1.15l9.69,-0.74l4.98,-0.66l3.36,0.15l3.64,-2.19l1.61,-0.67l7.35,-0.16l3.58,-1.57l13.13,-0.0l1.53,0.5l1.54,0.82l2.81,2.08l1.57,0.45l1.83,-0.45l4.04,-1.91l4.64,-1.02l2.5,-1.15l1.16,-1.7l1.77,-0.51l1.23,1.22l4.77,1.3l3.08,-0.36l1.35,-0.41l0.27,-0.48l-0.32,-1.35l2.46,0.41l2.29,0.89l2.45,1.83l1.76,0.44l3.1,-0.83l5.75,-0.4Z\", \"name\": \"Algeria\"}, \"_1\": {\"path\": \"M795.55,683.21l1.17,-0.26l0.28,-0.24l0.63,-1.5l0.18,-1.41l4.61,0.68l2.05,0.09l2.09,-0.28l6.24,-1.86l1.81,-1.13l3.1,-1.32l-6.89,4.53l-0.62,1.84l0.66,1.4l-0.75,-0.24l-0.36,0.09l-0.89,0.63l-1.5,0.43l-1.88,-0.3l-0.56,0.28l-0.14,-1.09l-0.43,-0.61l-0.67,-0.45l-1.97,0.03l-0.73,-0.23l-1.8,0.42l-2.09,0.87l-1.53,-0.37Z\", \"name\": \"Northern Cyprus\"}, \"JE\": {\"path\": \"M322.87,452.86l-0.06,0.38l-0.56,-0.27l-1.49,0.09l0.08,-0.64l1.42,0.15l0.61,0.3Z\", \"name\": \"Jersey\"}, \"FI\": {\"path\": \"M642.77,218.25l0.76,-0.02l0.36,-0.26l0.17,-0.8l-0.71,-1.51l-0.11,-0.8l-2.19,-4.45l-1.66,-1.51l1.26,-4.66l-0.13,-1.29l-0.44,-1.65l-2.0,-1.41l-0.81,-4.2l0.5,-2.29l0.65,-0.99l3.52,-3.35l0.3,-1.68l2.07,-0.11l0.31,-0.63l-1.08,-1.53l-0.27,-1.43l3.0,-0.62l1.43,0.56l3.05,-0.72l2.8,-1.45l0.21,-0.38l-0.05,-0.75l-0.91,-1.85l0.81,0.19l0.43,-0.16l0.0,-0.46l-0.36,-0.6l0.63,0.17l0.4,-0.12l1.76,-1.91l0.16,-1.41l2.91,-0.77l3.47,-2.96l3.21,-1.64l3.23,-2.91l1.29,-0.13l0.34,-0.26l0.7,-1.93l2.7,-2.58l0.99,-0.5l1.28,-2.37l3.5,-2.87l2.18,-3.57l1.19,-1.25l0.4,-1.27l1.08,-0.09l1.37,-1.04l2.49,-0.66l2.47,0.18l1.24,0.48l1.0,-0.15l0.34,-0.43l-0.1,-1.23l-0.59,-0.75l0.3,-0.38l1.28,-0.52l0.25,-0.42l-0.14,-1.23l-0.33,-0.84l-1.07,-0.98l0.51,-1.97l0.15,-2.48l0.54,-2.78l-0.1,-0.35l-1.56,-1.58l-5.46,-2.54l-1.15,0.05l-1.0,-0.26l-1.07,-1.64l0.59,-2.18l-0.41,-0.44l-0.76,0.14l-0.76,0.77l-1.54,0.82l-2.1,-0.66l-0.96,0.1l-1.35,-3.86l-1.94,-3.6l-2.2,-1.08l-0.31,-0.41l-0.6,-3.55l0.1,-1.33l0.2,-0.66l0.88,-0.58l1.4,-1.77l0.4,-2.96l0.56,-1.45l0.63,-0.74l0.08,-0.36l-0.7,-1.67l-3.55,-4.29l-0.46,-1.32l-0.24,-1.18l0.04,-1.0l0.33,-0.61l1.33,-0.93l0.33,-0.58l-0.54,-2.44l-0.24,-0.27l-1.09,-0.42l-2.46,-0.23l0.14,-1.03l0.92,-1.59l0.12,-0.74l-0.56,-2.01l-0.16,-2.25l0.17,-1.62l1.64,-1.24l0.23,-0.75l-0.18,-0.4l-2.2,-1.44l-1.54,-1.59l-0.47,-0.92l-0.32,-0.22l-1.6,-0.13l-1.17,-2.76l-3.36,-2.61l-1.06,-0.59l-5.7,-1.72l-2.28,-0.33l-2.6,-0.97l-5.19,-3.08l-1.95,-0.89l-0.62,-0.81l-2.18,-1.47l-1.1,-1.02l-3.42,-1.76l-0.16,-1.37l-0.37,-0.48l-3.13,-1.15l0.2,-0.21l2.66,-0.04l2.65,0.65l0.68,-0.47l0.33,-0.96l-0.97,-2.39l0.11,-0.4l0.9,-0.68l1.55,-0.59l4.54,0.04l9.08,9.74l1.07,1.8l0.37,1.29l0.39,0.29l1.19,-0.01l7.61,1.06l1.17,0.77l2.44,-0.15l5.27,-1.54l2.05,-2.15l1.69,0.15l4.54,2.05l4.94,1.36l1.47,1.13l2.14,0.27l2.15,-1.3l1.15,-2.92l0.96,-1.23l1.35,-0.9l3.04,-0.64l1.03,-0.82l1.38,-1.69l0.36,-2.25l-0.26,-3.73l0.23,-1.11l1.13,-2.04l1.5,-5.3l0.64,-1.46l0.73,-0.83l1.14,-0.57l2.06,-1.62l2.93,-3.19l0.65,-0.22l2.04,-0.16l2.57,0.12l2.75,0.52l1.18,-0.33l5.21,-2.98l2.0,-0.52l1.71,0.07l2.06,2.1l3.01,2.43l1.98,1.21l5.33,2.23l4.51,1.41l2.41,4.42l-1.13,1.66l-2.89,2.52l-2.42,2.65l-0.24,1.85l0.8,1.39l0.57,0.55l-4.78,2.02l-2.03,0.56l-0.22,0.62l0.84,0.92l3.36,0.16l0.61,0.39l0.04,0.39l-0.3,0.87l-3.67,5.48l-0.16,1.52l2.92,7.03l0.24,0.22l8.82,2.95l2.4,3.04l4.03,4.07l2.07,1.48l0.06,0.23l-0.59,2.59l-4.94,5.07l-4.47,5.24l-2.13,2.89l-0.36,2.03l0.45,1.23l2.7,3.48l2.31,3.68l1.06,2.05l0.65,1.92l1.09,1.82l3.13,4.14l2.47,6.75l0.12,1.92l-2.63,0.33l-2.15,0.65l-0.35,0.42l0.09,0.48l1.16,1.03l-1.13,2.02l-0.17,2.9l-1.24,1.48l-0.21,0.7l0.17,0.51l0.45,0.36l2.25,0.39l0.09,0.91l-0.16,0.59l-1.12,0.56l-1.47,1.1l-0.29,0.83l0.02,0.9l0.51,1.43l0.87,1.45l1.19,1.01l3.95,0.91l0.37,0.52l0.12,1.59l-1.73,1.8l-0.07,1.16l0.76,1.8l1.08,1.86l3.8,1.8l1.2,0.91l0.47,1.84l-0.02,1.31l-0.27,1.1l-3.85,4.54l-2.72,1.17l-0.35,0.41l0.03,0.48l0.92,1.04l4.93,3.98l7.58,4.38l2.72,1.92l2.09,2.95l2.32,2.38l0.3,0.58l-0.02,0.57l-1.26,2.24l-2.05,4.4l-1.3,1.77l-3.37,3.29l-5.05,4.15l-3.52,3.41l-8.33,8.7l-2.68,2.11l-3.26,3.24l-6.92,4.7l-1.08,1.18l-3.43,2.16l-8.21,7.34l-1.68,0.75l-1.87,0.16l-0.84,0.47l-2.79,-1.41l-0.76,-0.13l-1.89,0.43l-1.61,1.04l-3.07,0.33l-2.14,0.65l-0.1,-0.57l0.38,-1.37l0.65,-0.96l0.13,-0.85l-0.45,-0.44l-0.5,0.07l-1.28,1.66l-0.55,1.73l-0.89,0.73l-2.1,0.32l-2.16,-1.32l-1.3,-0.04l-0.33,0.63l0.66,0.97l0.39,1.08l-1.03,-0.03l-1.36,0.65l-1.16,0.92l-0.21,0.0l-0.68,-1.14l-0.5,-0.16l-1.47,0.63l-1.24,0.82l-2.64,0.33l-1.46,1.06l-2.56,0.71l-1.53,-0.0l-3.37,0.9l-1.27,1.45l-0.76,0.39l-1.42,-0.39l-8.4,1.55l-3.69,-0.35l-1.89,1.25l-1.9,1.58l-1.98,0.53l0.12,-0.35l1.47,-0.93l0.99,-1.21l0.22,-1.21l-0.19,-0.4l-0.83,-0.45l-0.8,-0.11l-1.02,-0.91l-1.08,-2.19l-0.28,-0.21l-0.61,-0.12l-0.44,0.21l-0.34,0.7l-0.33,1.65l-0.77,0.71l-1.25,0.53l-2.16,-0.02l-0.21,-0.77l0.42,-1.08l-0.25,-0.53l0.12,-0.29l1.1,-0.12l0.67,-0.88l-0.03,-0.56l-0.34,-0.38l-0.65,-0.1l0.93,-1.95l-0.28,-0.49l-1.01,0.06l-3.41,-0.48l-4.34,-2.0l-0.96,-0.12l-0.58,-1.58l-0.46,-0.25l-1.2,0.29l-1.32,0.91l-2.1,-1.16l-0.25,-0.6l-0.09,-2.63l-0.59,-4.08l0.21,-1.74l0.94,-1.32l0.42,-0.97l0.49,-2.37l0.11,-2.75l-0.24,-1.14l0.43,0.0l0.38,-0.53l-0.17,-0.52l-0.59,-0.68ZM687.44,144.29l-1.79,0.65l-1.22,-0.34l-0.02,-0.9l0.76,-0.51l1.66,-0.25l1.7,0.47l-0.56,0.21l-0.52,0.68ZM651.46,242.91l1.58,0.43l0.67,-0.11l0.37,0.48l-0.95,0.46l-0.22,0.31l-0.1,0.84l0.63,0.93l-0.71,-0.0l-0.48,-0.46l-0.37,-0.89l-1.17,-0.85l0.4,-0.98l0.37,-0.17ZM646.99,242.06l0.34,-0.58l-0.11,-0.24l0.48,0.41l-0.15,0.7l0.64,0.51l-1.2,-0.79ZM646.46,246.89l-1.07,0.55l-0.05,-0.02l0.07,-0.67l0.56,-0.37l0.66,-0.03l-0.18,0.54ZM643.72,247.48l-0.79,0.13l-0.32,-0.25l0.67,-0.43l0.51,0.04l-0.07,0.51ZM641.16,239.43l-0.06,0.33l-1.37,0.07l-0.55,-0.69l-0.31,-1.48l0.11,-0.07l0.39,0.64l1.81,1.2ZM638.04,182.53l0.17,0.59l0.43,0.26l0.96,-0.17l0.89,-0.6l0.3,0.13l-0.03,0.32l-0.56,-0.04l-0.83,0.92l-0.38,0.11l-1.18,-0.84l-0.53,-1.0l0.8,-0.0l-0.05,0.32Z\", \"name\": \"Finland\"}, \"BY\": {\"path\": \"M670.47,410.28l-0.13,-0.27l0.06,-1.46l1.09,-1.98l-0.23,-1.17l0.56,-1.59l-0.0,-1.53l-0.91,-1.32l-1.27,-0.65l-0.66,-0.57l-3.4,-1.52l-0.13,-0.47l3.0,-3.66l0.86,-0.6l4.91,-2.04l0.89,-0.8l0.33,-2.4l-0.4,-3.89l-0.39,-1.6l-0.97,-2.99l-2.57,-6.03l-1.36,-5.56l2.79,0.28l1.97,-0.44l1.86,0.07l2.26,-0.33l0.59,0.52l1.39,0.52l4.06,-1.59l1.9,0.09l0.64,-0.62l0.52,-2.25l0.36,-0.3l2.44,0.18l1.03,-0.51l0.87,-1.04l1.25,-0.61l1.3,-0.06l0.98,-0.62l0.29,0.25l0.21,0.66l-0.32,0.59l0.01,0.4l0.36,0.45l1.01,0.4l1.46,-0.01l1.05,-0.33l0.49,-0.81l-0.02,-0.89l-0.33,-0.88l-0.8,-0.73l-1.79,-0.34l0.92,-2.21l1.46,-2.06l-0.02,-2.89l0.75,-2.06l0.97,-1.47l1.27,-0.47l1.71,-0.28l1.28,-0.84l0.66,-1.01l0.45,-1.32l0.33,-0.17l4.09,0.17l0.38,-0.23l0.88,-1.63l1.39,-0.94l0.08,-0.49l-0.47,-0.58l-3.51,-0.46l-0.23,-0.2l1.4,-3.61l0.38,-2.21l2.08,-0.33l0.79,-0.32l1.83,-1.99l1.15,-0.29l3.4,0.5l3.66,0.1l0.32,-0.14l0.92,-2.18l3.35,-3.06l1.75,-1.04l1.25,-0.18l1.76,1.58l0.64,0.16l1.24,-0.67l2.07,-0.07l0.81,0.47l1.37,1.98l0.92,0.38l3.4,-1.49l0.62,0.01l2.58,0.99l1.12,0.5l0.17,0.31l-0.57,2.22l0.06,0.34l0.81,1.13l1.01,0.84l0.47,0.03l2.62,-1.56l0.87,-0.04l1.08,-0.47l0.83,-0.72l0.59,-0.19l1.42,0.16l2.51,-0.16l2.83,1.04l2.24,2.21l1.47,0.96l1.07,0.4l0.96,0.01l0.22,0.33l-0.08,3.01l-1.07,1.29l-0.11,1.14l1.99,2.8l0.22,1.35l-1.98,2.56l-0.54,2.11l0.11,0.59l2.68,1.88l2.12,1.17l-0.92,1.65l-0.14,0.59l0.22,0.44l1.4,0.68l0.74,1.02l0.77,1.92l1.42,1.79l5.35,2.69l0.34,0.34l-0.04,1.47l-0.94,2.24l0.22,0.55l1.06,0.37l2.3,-0.09l2.73,0.28l3.1,1.5l-0.32,1.27l0.64,1.39l2.97,1.9l0.19,0.36l0.0,1.08l-1.48,0.41l-1.53,0.8l-0.7,1.17l-2.27,1.44l-1.38,0.64l-3.72,-0.26l-0.83,-0.63l-0.6,-0.8l-1.18,-0.32l-3.43,0.09l-0.75,0.46l-0.31,0.81l-1.39,2.18l0.04,0.52l3.71,3.98l0.32,0.56l-0.61,1.04l0.17,1.42l0.95,1.23l-0.22,0.34l-0.11,4.04l0.39,0.72l0.71,0.49l0.49,0.67l0.82,1.53l-5.16,-0.05l-1.77,0.96l-1.99,-0.42l-1.46,0.63l-3.05,2.73l-1.3,1.6l-1.83,3.95l0.37,1.45l0.56,1.08l0.34,1.84l-0.66,0.63l-0.32,0.69l-0.92,-0.12l-1.36,-0.79l-0.44,-1.39l-2.23,-1.49l-1.42,-0.07l-2.09,0.43l-4.78,0.42l-2.69,0.89l-0.44,-0.37l-1.68,-3.01l-0.52,-0.66l-0.8,-0.34l-0.77,0.12l-1.1,0.93l-1.76,0.6l-0.87,0.66l-0.7,1.15l-0.62,-0.26l-0.83,-1.64l-0.91,-0.36l-1.57,-0.05l-3.18,-0.78l-0.9,0.17l-0.78,0.59l-0.75,0.08l-1.99,-0.57l-0.33,0.05l-0.52,0.39l-1.07,1.55l-0.23,0.03l0.15,-1.24l-0.24,-0.41l-1.34,-0.56l-2.02,-0.08l-1.97,0.17l-2.18,-2.8l-1.02,-0.16l-1.61,0.12l-2.38,-0.3l-4.26,-0.76l-0.91,-0.58l-1.7,-0.19l-4.61,-1.05l-1.94,-0.19l-7.05,-0.25l-2.76,0.13l-2.74,0.57l-5.02,0.29l-1.84,0.28l-0.74,0.64l-0.63,1.19l-2.0,1.92l-1.94,1.27l-1.28,-0.61l-2.2,-0.32l-1.06,0.29l-0.52,0.33l-0.18,0.37Z\", \"name\": \"Belarus\"}, \"FO\": {\"path\": \"M263.24,203.54l-0.39,0.92l-0.69,-0.21l-0.02,-1.73l1.1,1.03ZM260.24,213.24l-2.12,-1.39l-0.34,-0.59l2.22,0.79l0.37,0.54l-0.11,0.65ZM259.07,209.25l-0.6,-0.28l-2.67,-2.36l-1.87,-3.49l2.24,-0.5l1.97,0.99l2.09,0.72l-0.25,2.13l-0.93,-0.7l-0.9,-0.24l-0.43,0.2l-0.23,0.42l-0.01,0.73l1.6,2.39ZM257.22,217.52l1.57,0.48l0.05,0.71l0.46,0.75l0.04,0.71l-1.8,-1.85l-0.31,-0.8ZM252.95,206.27l1.28,0.96l-0.31,0.25l-0.69,0.12l-0.92,-0.12l-1.48,-0.53l-0.27,-0.64l1.89,-0.23l0.51,0.19Z\", \"name\": \"Faroe Islands\"}, \"PS\": {\"path\": \"M825.41,733.18l0.24,-1.0l-0.44,-3.65l1.39,-4.27l1.49,-0.96l2.08,0.37l0.47,0.8l1.11,0.74l0.77,0.12l0.23,1.98l-0.5,2.05l-0.04,1.83l0.36,3.17l-0.78,1.38l-0.61,2.57l-0.41,0.02l-1.77,0.89l-2.31,0.82l-2.56,0.12l0.96,-3.05l1.02,-0.96l2.18,-1.1l0.26,-0.46l-0.26,-0.66l-1.05,-0.65l-1.0,-0.32l-0.82,0.19Z\", \"name\": \"West Bank\"}, \"LB\": {\"path\": \"M833.54,711.49l-0.47,-0.12l-0.63,0.32l-0.7,2.08l-0.87,0.52l-3.3,-0.17l0.95,-2.04l0.65,-2.01l1.15,-1.71l2.36,-5.7l1.36,-2.3l0.53,-3.34l2.01,-2.74l1.51,-0.81l0.87,-0.91l0.09,-1.12l3.51,-0.06l0.61,-0.64l0.8,0.21l0.33,0.34l-1.19,1.23l-0.06,0.59l0.35,0.31l1.54,0.46l0.53,0.41l1.0,2.95l-0.58,1.13l-0.93,1.05l-1.39,0.72l-0.91,0.95l-0.27,0.51l0.02,0.71l0.47,0.45l-2.72,0.06l-1.67,1.33l-0.32,0.45l-0.32,1.32l0.4,0.68l0.72,0.44l-0.7,0.41l-0.56,0.52l-0.23,0.59l-1.64,1.38l-2.27,1.56Z\", \"name\": \"Lebanon\"}, \"PT\": {\"path\": \"M226.07,631.38l0.09,-1.3l-0.52,-1.53l0.61,-0.3l1.28,-0.22l1.05,-0.88l0.66,-1.19l-0.29,-1.44l0.72,-1.29l1.9,-1.22l0.16,-0.48l-0.45,-0.25l-1.03,0.19l-1.33,0.85l-1.97,2.99l-0.57,1.34l-2.69,0.63l-1.22,-0.39l0.0,-1.58l0.59,-1.75l0.23,-2.35l0.81,-2.11l-0.23,-1.47l0.56,-0.63l0.99,-0.63l1.45,-1.94l4.21,-9.14l-0.16,-0.87l-0.43,-0.47l0.16,-1.05l1.34,-5.47l0.56,-0.76l0.66,-1.76l0.34,-5.43l-0.23,-1.23l-0.85,-2.07l-0.9,-4.39l-0.06,-1.28l0.63,-0.63l-0.25,-0.68l-1.03,-0.09l-0.39,-0.67l0.1,-0.85l1.28,-1.65l1.22,-1.05l1.86,-0.94l3.64,-1.08l0.35,0.03l0.97,1.44l-1.0,1.31l-0.22,0.63l0.7,1.49l0.68,0.39l0.93,-0.07l2.18,-1.03l0.39,0.15l2.67,-0.28l2.4,0.83l1.69,0.04l1.83,-0.5l0.91,-0.55l0.37,-1.15l0.26,-0.16l1.58,0.47l2.24,0.09l0.56,-0.29l1.51,0.44l1.18,-0.08l0.37,0.3l0.18,0.47l-0.02,2.66l0.26,0.7l0.3,0.23l2.05,0.12l1.01,0.33l0.74,0.55l0.28,0.69l-0.88,1.17l-1.46,1.22l-2.17,1.14l-1.76,1.49l-1.17,1.72l-1.44,0.74l-0.44,0.39l-0.28,0.62l0.95,2.37l0.29,1.56l0.23,1.9l-0.23,2.7l-0.22,0.76l0.52,1.45l-2.57,1.96l-0.37,0.82l0.17,0.84l1.45,1.32l0.19,0.38l-0.18,1.19l-0.84,2.14l-0.78,1.27l-0.86,0.37l-4.59,0.03l-1.11,0.3l-0.24,0.59l1.23,2.01l1.47,1.18l0.41,1.96l1.81,3.22l1.87,0.6l0.43,0.57l-0.09,0.91l-0.49,1.13l-1.01,1.18l-1.24,0.86l-0.9,0.94l-0.94,4.28l3.28,4.65l0.37,0.16l1.45,-0.17l-0.66,1.6l-2.21,0.66l-1.45,1.57l-1.2,1.91l-0.94,1.02l-0.83,2.42l1.24,5.98l-0.9,0.16l-4.53,2.49l-1.25,0.0l-2.72,-1.12l-4.69,-0.36l-1.51,-0.33l-2.07,0.72l-1.41,-0.02l-1.27,0.89l-0.2,-0.06l2.33,-5.99l-0.06,-2.49l0.35,-2.3l-0.42,-2.18l-0.73,-1.34l1.01,-3.52l-0.12,-1.83l-0.72,-1.81l2.21,0.27l0.41,-0.22l-0.07,-0.46l-0.89,-0.92l-1.23,-0.68l-1.65,0.12l-3.49,1.12ZM117.56,718.32l1.56,0.67l1.81,-0.33l2.3,1.05l-1.16,1.04l-2.21,-0.2l-1.95,-0.84l-0.62,-0.56l-0.11,-0.32l0.37,-0.5ZM10.64,654.82l-1.1,0.02l-0.19,-0.31l0.92,-0.12l0.37,0.41ZM2.49,641.55l1.09,0.16l4.29,-0.23l0.73,0.11l-0.06,0.57l-0.57,0.32l-2.41,0.29l-3.86,-0.72l-1.16,-0.85l-0.14,-0.53l0.41,-0.13l1.67,1.01Z\", \"name\": \"Portugal\"}, \"NO\": {\"path\": \"M728.73,12.13l0.23,0.63l1.37,0.34l2.91,-0.91l0.43,0.5l-0.87,2.15l-0.16,3.33l-0.34,2.0l0.03,1.92l0.37,0.95l0.39,0.26l0.37,-0.28l1.54,-4.63l1.79,-1.59l0.63,-2.84l1.64,-3.37l1.81,-1.92l0.96,-0.48l3.49,0.08l1.42,0.68l1.34,1.62l1.13,0.75l3.32,0.75l0.97,0.77l0.49,0.69l1.05,0.06l2.14,-1.24l1.18,-0.17l2.0,1.7l-0.39,1.45l0.14,0.47l0.4,0.29l2.78,-0.09l2.24,0.55l4.31,2.89l0.39,1.18l-0.18,1.35l-6.19,1.79l-2.83,1.78l-4.44,0.67l-15.48,-1.19l-0.42,0.49l0.31,1.29l0.29,0.29l10.68,2.78l0.42,0.55l-0.32,1.58l-0.01,1.35l0.21,1.01l1.07,1.15l1.47,0.42l2.61,-0.21l1.25,0.43l0.37,-0.06l1.06,-0.95l0.31,-2.12l0.45,-0.29l1.13,0.5l0.61,2.27l0.6,0.49l0.57,-0.18l0.65,-1.49l2.86,-0.04l1.79,0.25l0.66,2.86l-0.02,1.0l-0.31,0.94l-0.35,0.39l-0.8,0.19l-2.23,-0.09l-3.11,-1.22l-2.04,-1.17l-1.03,-0.06l-0.28,0.14l-0.18,0.51l0.46,1.08l-0.11,0.77l-0.69,1.76l-0.55,0.68l-1.18,0.9l-2.11,0.74l-6.01,1.49l-0.74,0.88l-1.92,4.09l-1.08,0.98l-1.79,0.57l-0.79,-0.72l-0.7,-1.22l0.15,-1.12l2.32,-2.54l2.91,-2.55l1.33,-1.95l0.02,-0.42l-2.6,-4.77l-4.84,-1.63l-5.23,-2.18l-1.89,-1.15l-2.97,-2.4l-2.12,-2.17l-2.31,-0.18l-2.22,0.59l-3.29,1.99l-1.88,0.98l-1.0,0.28l-2.52,-0.53l-2.63,-0.12l-2.16,0.16l-0.9,0.29l-3.09,3.3l-2.0,1.58l-1.22,0.63l-0.89,1.04l-0.68,1.54l-1.52,5.34l-1.15,2.08l-0.26,1.33l0.26,3.66l-0.25,1.89l-1.28,1.56l-0.85,0.66l-2.9,0.58l-1.59,1.03l-1.19,1.51l-1.11,2.84l-1.73,0.96l-1.64,-0.27l-1.4,-1.1l-5.01,-1.38l-4.52,-2.05l-2.06,-0.21l-0.32,0.12l-1.93,2.1l-5.05,1.49l-2.23,0.14l-1.05,-0.74l-8.72,-1.08l-0.34,-1.14l-1.17,-1.94l-9.21,-9.88l-2.44,-0.28l-2.67,0.09l-1.9,0.71l-1.2,1.0l-0.17,0.92l0.95,2.35l-0.45,0.52l-2.35,-0.67l-2.9,0.05l-0.9,0.78l-6.7,0.37l-0.25,0.69l2.88,2.76l0.13,1.02l-0.37,2.12l-1.03,1.82l-1.19,1.48l-2.37,1.5l0.06,0.71l3.06,1.26l-3.0,2.32l-1.17,-0.12l-8.25,-2.41l-2.82,-0.65l-3.88,-0.18l-5.25,-1.45l-1.26,0.17l-1.91,0.64l-0.27,0.32l-0.22,1.5l0.39,6.19l-0.64,1.44l-2.61,3.64l-7.75,-3.12l-0.4,0.06l-2.07,1.7l-5.22,3.13l-2.94,6.47l-1.5,1.49l-3.45,1.03l-0.27,0.21l-0.9,1.83l0.05,0.43l3.13,3.96l0.93,2.08l-0.36,2.0l-2.18,1.74l-4.8,4.73l-4.43,4.91l-1.79,1.39l-0.15,0.39l0.78,3.92l-1.25,1.03l-4.43,1.86l-6.68,0.85l-0.35,0.48l1.24,6.33l-0.01,1.03l-1.15,3.32l-0.93,7.54l-0.7,0.82l-0.99,2.05l-3.2,4.92l-6.29,7.99l0.14,0.61l3.03,1.49l2.63,1.03l0.5,1.45l0.37,2.7l-0.09,1.74l-1.0,1.6l-1.2,1.56l-8.77,-1.29l-1.36,-0.01l-3.0,0.54l-2.79,1.15l-1.83,1.34l-4.9,5.82l-1.7,1.6l-0.12,0.38l0.46,2.06l-2.78,4.15l-0.03,0.38l1.88,4.32l0.95,1.67l-1.39,1.81l0.42,4.16l-0.34,2.72l2.56,6.56l-0.15,2.34l-1.85,9.33l0.15,0.4l1.88,1.42l2.64,1.67l1.47,0.66l2.12,1.93l1.53,1.77l-0.65,2.4l-0.7,1.0l-0.95,2.3l-2.9,0.2l-1.62,0.39l-0.9,0.46l-0.21,0.4l0.31,2.38l3.23,7.09l0.44,1.8l-0.45,1.82l-0.52,1.14l-0.38,3.87l-2.51,2.69l-1.57,1.04l-2.34,0.41l-0.95,0.63l-1.44,3.47l-2.02,2.05l-0.04,1.14l1.51,5.23l-1.14,5.29l-0.86,1.68l-1.08,0.53l-0.66,-0.22l-1.02,-2.3l-0.32,-1.4l-0.28,-0.25l-7.05,-1.56l-1.16,-2.08l-1.3,-1.84l-0.16,-0.66l0.03,-3.56l-0.4,-1.53l-0.12,-1.67l-0.31,-0.36l-0.44,0.18l-0.83,1.39l0.39,2.25l-0.79,0.71l-1.22,0.42l-0.27,0.42l0.12,1.28l0.55,0.47l0.09,1.05l-0.3,1.84l-2.48,4.24l-0.73,0.84l-1.36,-0.24l-1.59,1.15l-1.18,0.14l-0.57,-1.25l-2.24,-1.81l-1.35,0.02l-0.24,0.69l1.66,1.78l-0.34,0.49l-0.42,0.4l-4.15,1.77l-0.09,0.66l0.87,0.76l-0.63,0.74l-1.2,0.24l-0.61,0.54l-0.29,0.77l-3.32,2.06l-5.48,5.29l-2.79,1.48l-1.93,1.51l-1.6,-0.04l-2.35,1.35l-5.42,1.13l-3.62,-0.52l-2.54,0.44l-1.12,-0.74l-0.11,-0.39l0.24,-0.59l-0.23,-0.57l-0.48,-0.15l-1.42,0.03l-0.43,0.44l-0.3,1.11l-1.65,-0.49l-0.19,-0.21l0.48,-0.73l1.13,-0.9l0.02,-0.61l-0.66,-0.86l-2.33,0.06l-1.29,-0.16l-4.41,-2.06l-1.12,-1.16l-3.58,-1.77l-1.55,-1.81l-0.87,-1.97l0.07,-1.8l0.43,-2.89l0.5,-0.49l3.02,0.98l3.54,1.8l0.77,-0.24l0.99,-1.33l1.95,-1.08l-0.0,-0.7l-0.92,-0.33l-2.81,1.2l-2.49,-1.9l0.0,-0.39l0.79,-0.82l0.27,-1.01l-0.4,-1.12l0.16,-1.06l1.23,-1.27l1.98,-1.38l1.46,-1.36l1.45,-0.81l0.15,-0.54l-0.16,-0.28l-0.47,-0.19l-1.78,0.56l-1.68,0.94l-1.89,1.49l-2.26,1.19l-3.78,1.24l-1.46,1.82l-1.27,0.66l-2.2,0.07l-0.41,-0.93l0.7,-4.41l0.75,-2.16l0.75,-1.38l1.39,-0.37l0.82,-1.01l0.45,0.0l0.74,0.53l2.61,0.52l0.38,-0.13l1.19,-1.36l1.65,-0.23l3.06,-1.49l0.15,-0.72l-0.45,-0.3l-5.05,0.73l-0.67,-0.19l-0.29,-0.73l0.56,-0.79l2.85,-2.37l1.03,-1.09l0.62,-1.06l-0.03,-0.83l0.41,-1.2l2.7,-2.33l1.96,-0.95l0.44,0.56l-0.61,2.9l0.01,1.23l0.32,0.39l0.45,-0.24l1.8,-4.31l0.74,-0.96l0.8,-0.64l2.32,-0.59l0.62,-0.69l0.06,-0.45l-0.39,-0.22l-2.64,0.24l-6.23,1.67l-2.72,1.52l-0.82,1.24l-1.78,1.68l-0.9,1.16l-0.42,1.66l-0.85,0.74l-1.49,0.42l-1.92,2.07l-0.87,1.66l-3.07,2.3l-1.18,1.31l-0.25,-0.31l-0.07,-1.13l0.18,-1.94l0.87,-1.4l0.48,-1.55l-0.55,-1.47l0.23,-0.46l2.09,0.41l1.6,-0.06l2.77,-1.1l0.18,-0.59l-0.72,-0.8l-3.19,-0.01l-1.6,-0.94l-1.29,-1.95l-0.58,-2.58l0.3,-0.57l5.03,-2.8l1.46,-1.36l-0.21,-0.69l-1.12,-0.04l-1.87,1.53l-2.49,0.88l-1.51,-1.18l-0.83,-1.34l-0.5,-2.97l0.18,-1.63l-0.19,-1.84l0.81,-0.47l2.52,0.47l3.01,-0.18l6.47,-1.26l4.11,0.74l1.79,-0.06l2.68,-1.09l2.11,-0.1l1.55,0.76l0.78,0.8l0.21,1.37l0.79,0.85l0.48,0.08l0.53,-0.28l0.18,-0.51l-0.4,-0.94l-0.07,-1.17l6.53,-1.69l0.97,-0.77l-0.22,-0.7l-2.49,-0.22l-0.59,-1.23l1.33,-2.27l0.02,-0.36l-0.13,-0.32l-0.63,-0.15l-1.62,1.45l-0.74,1.82l0.25,1.56l-0.17,0.37l-1.16,0.26l-3.03,0.11l-3.76,-0.93l-0.35,-0.26l0.16,-0.79l-0.18,-0.42l-0.35,-0.21l-0.52,0.09l-0.77,0.93l-0.68,1.78l-1.2,0.35l-4.09,-0.68l-5.91,0.41l-2.68,0.93l-1.55,-0.11l-2.82,-1.56l-1.03,-1.16l-0.4,-2.46l0.12,-0.82l1.98,-0.42l1.33,-0.02l1.09,-0.62l-0.04,-0.72l-2.18,-1.12l-0.87,-1.51l-1.48,-0.65l-0.81,-1.18l-0.22,-1.9l0.22,-1.2l0.47,-0.29l1.73,0.29l4.65,-0.24l7.55,2.28l6.23,-0.44l3.58,-1.3l0.06,-0.73l-0.93,-0.4l-3.85,0.75l-3.51,-0.03l-8.9,-1.94l-2.82,0.2l-1.23,-0.38l-0.7,-1.19l0.55,-2.45l0.89,-0.41l0.79,0.65l0.87,0.05l0.34,-0.16l0.85,-1.13l0.92,-0.79l0.61,-1.39l2.32,-1.33l1.09,-0.14l1.41,-0.61l0.72,0.14l1.38,1.17l2.02,-0.0l5.03,-1.15l1.71,-1.38l0.08,-0.46l-0.41,-0.22l-3.19,0.42l-2.67,0.67l-1.34,0.15l-0.09,-0.31l1.55,-1.5l0.43,-1.2l0.86,-0.45l3.55,-0.22l1.7,-0.35l2.87,0.23l4.31,0.51l2.77,1.23l1.27,-0.08l1.2,-0.35l0.66,-0.54l-0.17,-0.69l-1.96,-0.46l0.08,-0.64l3.4,-0.97l3.9,-0.23l0.29,-0.65l-0.68,-0.84l-0.37,-0.14l-8.54,1.25l-2.16,-0.82l-1.92,-0.02l-1.28,0.5l-3.12,0.56l-0.21,-0.14l0.48,-1.11l1.95,-2.36l0.2,-0.59l0.74,-0.46l5.1,-1.38l2.53,-1.63l3.76,-0.26l3.04,0.43l1.55,2.02l5.56,3.15l0.45,-0.02l0.15,-0.42l-0.3,-0.92l-3.67,-3.44l-1.39,-0.85l-0.91,-1.47l0.3,-1.32l0.99,-0.9l4.07,-0.56l0.95,-0.71l0.22,-1.35l-0.74,-1.02l-1.78,-0.1l-1.01,-0.36l-0.24,-0.78l0.35,-0.54l2.3,-1.35l3.43,-0.91l3.72,1.05l0.11,0.21l-0.96,1.21l0.03,1.1l0.36,0.34l0.98,0.09l0.33,-0.12l2.17,-2.28l2.53,-0.31l2.2,-0.78l1.72,2.01l1.34,0.96l0.53,1.63l0.31,0.27l0.57,0.1l0.36,-0.13l0.74,-0.82l1.33,-0.43l1.97,-0.3l3.34,0.47l1.63,-0.34l0.7,0.05l0.39,-0.56l-1.06,-1.99l0.54,-1.1l0.62,-0.47l2.27,-0.98l2.34,-0.5l1.44,-0.94l1.94,-0.87l0.2,-0.52l-0.89,-1.59l-0.32,-0.18l-1.15,-0.06l3.35,-1.94l0.12,-0.61l-0.57,-0.59l-1.9,-0.53l-3.19,1.34l-2.23,1.48l0.02,0.68l0.66,0.39l0.81,0.9l-1.23,1.3l-7.99,4.24l-3.74,1.22l-1.44,-0.16l-0.34,-0.94l-0.86,-0.96l-0.85,-1.73l-0.37,-0.22l-1.5,0.05l-0.69,0.28l-0.08,-0.13l0.56,-1.66l1.17,-1.4l2.19,-1.22l1.06,-1.46l0.91,-2.09l3.05,-2.1l4.41,-5.13l3.56,-1.63l1.42,-1.85l2.14,-0.82l1.74,-1.35l1.46,-0.17l2.61,-1.28l1.59,-1.61l-0.25,-0.68l-0.97,-0.09l-3.2,1.24l0.06,-1.0l0.57,-1.52l1.77,-1.44l8.82,-4.35l1.74,1.84l0.35,0.14l2.74,-0.3l3.33,-2.63l2.45,-2.81l0.03,-0.49l-0.47,-0.15l-1.3,0.48l-1.5,1.17l-2.68,1.52l-1.12,0.22l-0.44,-0.12l-0.57,-1.09l-0.96,-0.34l-0.9,0.17l-0.6,-0.5l-0.14,-1.58l1.98,-4.43l0.94,-1.33l3.82,-3.91l0.87,-2.16l1.51,-0.99l2.11,0.24l0.9,-0.37l0.18,-0.55l-0.77,-1.41l-2.49,-1.33l7.75,-1.75l3.85,0.06l1.35,-0.96l2.16,-0.63l1.61,-1.13l-0.02,-0.67l-1.14,-0.54l-6.37,1.52l-1.08,-0.02l-0.96,0.36l-2.74,0.12l-0.62,-4.09l0.41,-2.05l0.84,0.04l0.41,-0.35l0.25,-2.21l1.17,-1.2l1.9,-0.34l2.23,-1.72l2.18,0.26l2.33,-0.27l0.24,-0.68l-0.58,-0.57l-2.91,-0.8l-0.45,-0.8l1.71,-0.96l1.18,-0.24l1.91,-2.45l1.01,-0.91l1.39,0.11l1.69,-1.01l1.64,0.34l1.93,-0.72l2.3,-0.46l8.65,-0.18l0.38,-0.3l0.26,-1.02l-0.34,-0.5l-1.86,-0.24l-6.45,-0.26l-3.31,0.02l-1.29,0.24l-0.17,-0.12l0.03,-0.21l1.08,-0.87l0.65,-1.14l2.32,-2.53l2.62,-1.62l1.91,0.4l2.4,1.68l1.53,0.19l0.6,0.42l1.14,2.2l0.3,0.21l0.56,0.07l0.45,-0.44l-0.23,-2.02l1.45,-1.66l0.01,-0.52l-0.41,-0.49l-0.41,-0.13l-2.24,0.61l-1.61,-0.6l-1.3,-1.22l-0.31,-0.94l0.73,-1.0l0.79,-0.58l0.08,-0.57l-0.57,-0.72l-0.5,-0.1l-3.51,1.89l-2.37,0.42l-0.51,-0.14l0.42,-1.34l-0.25,-1.37l3.16,-3.18l0.99,-0.33l1.73,0.25l1.89,0.97l1.52,-0.17l1.56,-0.51l0.26,-0.47l-0.21,-0.92l-0.35,-0.31l-3.25,-0.35l-0.56,-0.49l0.13,-0.32l2.23,-0.78l2.23,-1.39l2.56,-0.4l2.05,-1.03l0.41,0.39l0.79,4.05l1.9,3.28l0.98,0.31l0.45,-0.5l-0.68,-2.59l1.33,-1.19l0.41,-0.88l-0.28,-0.53l-0.85,-0.2l-0.68,-0.84l-1.07,-2.98l0.28,-0.58l2.33,-1.59l2.94,-0.37l3.25,1.17l1.3,0.04l2.06,-0.34l3.26,-0.98l1.87,-0.36l0.97,0.0l0.36,-0.22l0.25,-0.5l-0.23,-0.56l-2.0,-0.82l-3.16,0.52l-8.22,-0.17l-0.57,-0.4l-0.1,-0.67l0.77,-1.23l0.88,-0.71l3.04,-1.36l3.48,-0.26l3.52,-2.5l1.5,-2.1l0.74,-2.81l2.0,-2.19l5.27,-1.31l0.28,-0.25l0.2,-0.9l-0.53,-1.14l0.04,-2.02l1.39,-2.44l0.86,-0.79l0.17,-0.04l0.97,0.7l1.52,1.87l2.21,1.03l3.04,0.21l1.01,-0.57l-0.05,-0.7l-2.21,-1.0l-1.53,-1.21l-0.1,-0.98l0.53,-0.47l2.73,-0.08l1.64,-0.97l0.77,-2.5l2.01,-1.97l6.3,-1.3l0.22,0.25l-0.34,3.86l-0.77,2.7l0.02,1.91l0.29,0.38l0.45,-0.16l1.34,-2.01l1.72,-5.22l1.26,-2.39l1.36,-1.31l0.96,-0.29l1.1,-0.76l1.04,-0.33l0.59,1.45l-0.72,4.51l0.07,1.44l-0.77,1.81l-3.14,4.28l0.08,0.89l0.5,0.28l0.81,-0.24l1.32,-0.78l3.78,-3.95l3.22,0.49l0.46,-0.35l-0.06,-0.66l-2.39,-2.32l-0.35,-1.26l0.17,-3.66l0.84,-1.24l2.74,0.15l1.67,-0.19l0.96,0.67l1.78,-0.05l0.35,-0.24l1.13,-2.54l2.03,-0.2l2.09,1.77l2.52,1.2l2.02,1.73l0.51,0.0l0.58,-0.48l0.13,-0.41l-1.11,-4.11l-1.29,-1.65l-2.78,-0.9l-2.72,-1.79l-0.53,-0.8l2.15,-0.51l3.46,0.62l2.73,-1.45l0.94,0.35l2.03,-0.74l1.22,0.95l0.39,0.06l1.09,-0.57l0.42,-1.26l3.24,-0.82l2.1,0.78l1.07,0.76l1.38,4.8l1.87,1.95l1.31,0.98l1.3,0.24l0.4,-0.16l0.63,-0.88l-0.06,-0.53l-1.14,-0.99l-0.26,-0.79l0.54,-2.31l0.62,-0.89l3.76,-3.66l3.08,-1.86l2.11,-0.31l3.33,-4.31l0.84,-0.7l0.78,-0.16l0.31,-0.47l-0.22,-1.07l-0.25,-0.29l-1.59,-0.58l-0.04,-0.83l2.28,-1.52l2.84,-2.62l1.15,-0.15l0.87,0.7l2.81,1.2l1.71,1.37l1.32,0.74l1.09,-0.1l0.9,-1.15l0.62,-0.37l1.59,0.24l1.01,0.63l0.94,0.14l0.53,0.28l0.09,0.44l-1.4,0.88l-2.7,2.61l-2.64,2.94l-0.92,1.62l-0.88,4.07l-2.09,2.72l-0.04,2.12l0.83,0.85l0.4,0.1l2.43,-0.75l2.81,-2.41l0.8,-2.66l6.95,-6.9l3.3,-3.87l3.66,-3.14l1.68,-0.53l0.78,1.67l-0.73,2.55l-1.53,1.7l0.07,0.6l0.98,0.68l-0.19,1.82l-0.61,2.47l0.02,1.07l0.5,0.38l1.18,-0.32l4.39,-2.2l2.31,-4.33l0.49,-1.52l1.51,-1.3l3.07,-0.01l0.39,-0.32l0.12,-0.58l-0.21,-0.44l-3.77,-1.98l-0.27,-0.54l1.07,-1.0l3.45,-2.24l1.64,0.23l1.19,0.54l4.36,0.4l3.1,1.53l-0.11,2.24l-0.67,0.96l-0.67,0.6l-4.3,1.95l-0.87,1.1ZM756.79,33.48l-2.19,0.6l-0.05,-0.09l1.06,-2.35l0.65,0.05l1.44,1.11l-0.91,0.68ZM694.5,3.24l1.2,-0.9l2.04,-1.03l3.48,0.91l1.18,-0.0l1.68,1.66l0.74,0.04l-0.05,0.28l-1.54,0.44l-2.79,0.31l-0.46,0.21l-2.15,-0.15l-1.48,-1.46l-1.84,-0.29ZM676.11,14.77l-2.25,0.85l-1.26,-0.71l-0.51,-0.7l-0.08,-1.73l0.28,-0.94l0.87,-0.43l0.91,0.75l1.34,0.34l1.34,0.98l-0.64,1.59ZM670.58,15.65l0.31,1.83l-1.1,1.19l-2.87,1.76l-0.12,0.61l-0.64,0.29l-1.35,0.3l-0.41,-0.17l0.09,-1.25l-0.29,-0.67l-0.54,-0.17l-0.94,0.5l-0.82,-0.53l0.24,-1.01l0.99,-0.93l1.66,-0.64l1.41,0.18l3.74,-2.54l0.64,1.25ZM668.13,9.06l-0.57,1.15l-1.09,0.79l-3.14,3.06l-1.79,0.48l-1.29,0.76l-2.24,-0.41l-1.54,1.06l-1.55,0.15l-0.89,-0.12l-2.48,-1.11l-1.76,-1.58l1.56,0.01l0.88,-0.25l1.51,0.21l0.36,-0.13l0.83,-0.96l1.94,0.11l3.8,-0.75l1.34,0.4l0.36,-0.07l3.15,-2.48l1.07,0.02l1.3,-0.61l0.25,0.27ZM632.13,26.52l-0.54,0.42l-0.88,0.18l-1.43,-0.54l-0.88,0.07l-0.57,-0.73l0.06,-0.58l0.93,-1.0l2.01,-0.61l1.59,0.25l0.17,0.13l-0.47,2.42ZM618.46,23.91l0.85,0.4l0.8,-0.12l0.36,0.16l1.08,1.22l1.16,0.66l-0.83,0.46l-1.35,0.17l-1.33,-0.18l-0.82,-1.91l-1.32,-1.37l-0.11,-0.62l0.52,-0.08l0.99,1.21ZM611.42,27.32l1.31,1.58l0.34,0.13l1.07,-0.13l0.53,-0.56l0.44,-0.15l1.05,0.5l-0.13,0.73l-2.0,1.5l-1.38,2.01l-1.62,0.43l-1.14,-0.16l-1.71,1.26l-2.75,2.92l-0.3,1.36l-4.83,0.6l-1.79,0.4l-1.74,-0.48l-0.67,-0.77l0.08,-0.15l1.74,-0.21l0.35,-0.37l0.05,-0.86l1.11,-0.95l0.4,-1.1l0.5,-0.21l1.32,0.28l0.36,-0.1l1.11,-0.91l0.51,0.57l0.68,-0.15l0.32,-1.04l-0.29,-1.09l0.11,-0.41l1.77,-1.6l0.83,-1.23l0.97,-0.66l0.97,0.11l0.43,-0.29l0.33,-1.16l-0.3,-1.32l0.1,-0.63l0.85,-1.63l0.54,-0.04l0.39,1.32l0.08,2.67ZM588.18,39.32l1.24,1.04l0.46,0.04l0.66,-0.38l1.25,-0.14l0.91,0.41l0.82,0.82l1.09,0.15l0.51,0.89l0.28,1.25l-0.6,0.87l-1.19,0.73l-0.29,1.47l0.32,1.44l-2.0,0.52l-2.59,0.26l-0.96,-0.77l-0.48,-0.01l-2.23,1.59l-2.19,2.45l-0.49,0.13l-0.3,-0.65l-1.59,-0.54l-1.71,-0.05l0.22,-0.25l1.65,-0.57l0.25,-0.27l0.35,-1.26l-0.3,-2.33l0.35,-1.67l0.84,-0.67l3.6,0.4l0.4,-0.21l0.46,-0.84l-0.29,-0.91l-1.77,-0.93l1.26,-0.6l1.27,-0.07l0.35,-0.24l0.44,-1.11ZM564.03,63.2l0.26,0.57l0.59,-0.03l1.78,-2.18l1.94,-0.67l0.26,-0.31l0.11,-0.66l0.82,-0.99l-0.08,-1.16l0.3,-0.74l1.55,-0.58l0.51,-0.13l1.1,0.7l0.66,0.82l0.85,1.88l-0.32,1.68l-2.27,1.42l-2.04,0.76l-1.97,1.76l-0.98,1.4l-0.62,0.23l-0.99,-0.45l-1.0,-0.0l-1.33,1.3l-3.11,0.95l-0.9,-0.2l-0.05,-0.94l-0.45,-0.38l-0.78,0.1l-1.44,1.55l-1.76,0.57l-1.4,-0.52l-0.35,0.04l-3.97,2.48l-3.63,0.45l-0.87,-0.2l-0.0,-1.04l4.21,-3.17l6.82,-0.95l4.52,-4.21l1.14,-4.61l0.98,-1.56l0.02,-0.4l-0.48,-0.92l-1.13,-0.33l-0.05,-0.99l0.54,-1.38l2.17,-2.04l1.31,-0.96l2.0,-2.51l0.83,-0.49l0.9,0.0l0.78,0.48l-0.15,1.02l-1.58,2.35l-2.41,2.07l-0.13,0.38l0.3,1.51l0.98,1.32l0.28,3.88l-1.79,2.64l-0.46,1.42ZM556.54,54.46l2.5,3.67l-0.58,2.34l-1.51,1.17l-2.5,0.22l-1.74,-0.1l-0.93,-0.5l-0.11,-0.53l-0.27,-0.3l-0.68,-0.21l-2.02,0.91l-1.06,0.11l-1.32,-0.6l-0.27,-0.72l1.46,-1.25l0.71,-1.0l1.51,0.08l0.53,0.34l1.05,0.22l0.44,-0.22l0.64,-1.34l-0.09,-1.0l0.22,-0.3l1.99,0.41l0.48,-0.39l0.0,-2.2l0.64,-0.04l0.51,0.42l0.39,0.83ZM538.67,70.65l0.96,0.42l1.95,-0.11l-0.84,0.76l-1.83,0.42l-1.04,1.19l-0.46,0.28l-1.55,0.0l-1.08,0.27l-1.11,0.86l-0.71,-0.54l-0.6,0.13l-0.45,1.35l-1.52,0.4l-0.29,-1.54l1.17,-1.47l1.83,-0.2l1.4,-1.9l1.85,-0.52l1.21,-0.06l1.1,0.23ZM526.33,79.08l-1.04,0.64l1.42,-3.36l1.2,-1.04l0.24,0.17l-0.27,0.93l0.01,0.96l-1.57,1.71ZM520.21,124.0l-0.58,0.03l0.0,-0.36l0.49,-0.66l0.84,-0.48l2.38,-0.19l-3.14,1.65ZM519.02,120.83l-0.67,0.08l0.07,-0.32l0.99,-0.94l0.6,-1.36l0.56,-0.36l0.86,0.5l0.02,0.92l-0.5,0.9l-1.93,0.59ZM512.64,130.29l-0.68,0.52l-1.25,-0.15l-0.06,-0.2l0.37,-0.91l0.78,-0.38l1.04,0.08l0.15,0.18l-0.35,0.85ZM502.61,147.16l-0.44,0.38l-1.54,-0.44l-3.0,0.37l-0.68,-0.32l0.6,-0.7l2.65,-1.15l1.27,0.05l1.27,1.24l-0.12,0.58ZM465.49,173.05l-1.51,-0.0l1.42,-0.61l3.46,-0.91l0.49,-0.61l0.39,0.44l0.05,0.69l-0.19,0.24l-4.1,0.75ZM460.35,180.13l-1.1,0.01l-1.46,-0.3l-0.84,-0.71l1.48,-0.62l1.58,-0.39l0.58,0.58l0.05,1.08l-0.3,0.36ZM418.13,241.28l0.63,1.0l0.45,1.55l0.03,1.89l-0.6,-0.09l-0.57,-1.19l0.09,-1.33l-0.26,-1.41l0.22,-0.42ZM417.53,227.52l-0.84,0.18l-0.51,-0.12l0.25,-1.42l0.69,-0.25l0.54,0.73l-0.13,0.88ZM229.04,8.0l-1.01,0.13l-0.19,-0.14l1.39,-1.15l5.97,-2.82l2.44,-2.71l4.12,-0.83l0.21,1.05l-0.26,1.57l-3.83,1.4l-4.49,1.0l-4.36,2.51Z\", \"name\": \"Norway\"}, \"TR\": {\"path\": \"M718.26,643.94l1.78,-0.53l0.28,-0.32l0.41,-2.61l-0.3,-1.51l-0.34,-0.32l-0.95,-0.12l-2.87,-1.18l-0.86,0.07l-0.95,-1.23l-1.69,-0.95l-0.35,-0.02l-1.3,0.7l-3.08,-1.38l-0.3,-0.28l0.47,-0.97l0.73,0.03l0.41,-0.34l0.15,-1.36l-0.74,-1.83l0.05,-0.62l0.51,-0.16l0.74,0.14l0.84,0.97l0.27,0.93l-0.14,1.27l0.63,1.04l0.59,0.4l0.59,-0.24l0.28,-0.94l0.56,0.4l1.4,0.24l3.22,-0.67l0.81,-0.67l0.1,-0.44l-0.38,-0.25l-2.24,0.06l-0.7,-0.43l-0.87,-1.11l-0.88,-2.11l1.82,-0.87l1.42,-1.76l-0.05,-0.55l-0.59,-0.51l-0.8,-0.31l-0.76,0.12l-0.42,-0.36l-0.06,-0.52l0.54,-0.78l-0.03,-1.21l-2.15,-2.63l2.92,-3.25l-0.08,-0.89l-0.3,-0.27l-1.12,-0.22l-4.65,0.67l-1.83,0.58l-2.85,0.24l-0.07,-1.08l0.73,-1.52l-0.07,-3.4l0.37,-1.6l1.76,-0.62l2.18,-2.73l3.42,-3.13l3.56,0.06l1.61,-0.9l1.87,-0.04l0.7,1.24l1.94,0.9l3.61,-0.11l1.83,-0.91l0.07,-0.62l-1.29,-1.3l1.32,-0.12l1.19,0.29l-0.77,1.25l0.21,0.57l0.46,0.17l4.57,-0.5l4.59,0.42l1.54,-0.23l3.61,0.02l0.91,-0.65l-0.05,-0.64l-1.1,-0.69l-1.16,-0.28l-0.86,-0.45l1.76,-1.18l7.34,-1.23l4.57,-0.48l0.35,-0.33l0.06,-0.35l-0.39,-0.47l-6.47,-0.78l-1.33,-0.57l-1.92,-1.42l-0.76,-0.91l0.59,-2.44l0.55,-0.53l2.17,-0.1l8.06,1.24l5.8,-0.73l6.36,1.8l6.03,-0.37l1.57,-1.01l1.45,-2.52l8.42,-4.31l3.0,-2.28l3.12,-1.22l5.51,-1.4l4.54,-1.82l1.22,-0.2l10.96,0.87l7.59,0.11l3.52,-1.71l1.47,0.43l-0.45,0.92l0.19,1.27l1.18,1.57l1.36,1.2l3.79,1.55l4.82,-1.27l1.47,0.41l1.74,4.11l1.44,1.54l1.87,1.05l1.41,0.2l2.03,-1.46l1.58,-0.16l2.71,1.33l1.19,1.55l4.95,1.14l4.49,0.57l2.02,1.25l6.39,1.25l2.59,-0.21l3.98,-1.3l7.65,-1.41l5.14,1.98l1.4,0.26l1.25,-0.16l1.65,0.52l2.13,-0.31l2.63,-1.08l0.0,62.86l-6.31,3.02l-4.43,1.35l-4.41,0.88l-7.91,-0.18l-0.93,-0.3l-3.39,-2.31l-1.91,-0.5l-1.6,-0.13l-10.36,4.02l-4.82,-0.15l-0.93,-0.66l-0.79,-0.98l-2.24,-0.53l-1.66,-0.16l-0.82,0.65l-0.44,1.24l-0.81,3.82l1.39,3.18l-1.94,0.18l-0.75,0.27l-0.74,0.56l-0.49,2.61l-1.11,0.4l-0.76,0.62l-0.67,1.53l-2.05,-1.15l-0.5,-0.08l0.49,-0.7l0.04,-0.37l-1.9,-4.65l0.83,-1.27l2.0,-1.79l2.24,-2.4l-0.21,-2.57l-1.83,-1.66l-0.43,-0.04l-1.96,0.98l-1.4,1.07l-0.95,0.25l-0.99,0.62l-0.59,1.19l-1.03,0.75l-1.77,0.31l-2.83,-0.89l-3.11,-1.39l-1.91,-1.19l-1.67,-0.26l-1.48,0.55l-4.09,2.81l-3.79,4.13l-0.87,0.66l-3.46,1.72l-2.22,0.56l-1.14,-0.13l-4.62,0.77l-2.28,0.11l-1.85,0.9l-3.34,-0.95l-2.03,-1.23l-1.22,-1.25l-2.06,-2.79l-1.53,-1.4l-3.42,-1.28l-5.75,-2.92l-1.66,-0.36l-8.11,-0.69l-0.34,0.15l-0.93,1.28l-0.31,4.13l-0.66,1.08l-0.34,2.23l-0.39,0.48l-0.53,0.28l-1.12,-0.61l-1.16,-0.29l-1.99,0.89l-3.93,1.24l-1.23,0.16l-4.49,-1.54l-1.61,-0.97l-0.97,-1.01l-0.35,-1.79l-0.69,-1.15l-0.37,-1.59l-1.18,-0.6l-0.36,0.04l-0.9,0.58l-0.89,-0.02l-1.26,-0.37l-3.14,-1.59l-2.6,-0.17l-0.34,0.16l-1.41,1.89l-1.0,0.55l-0.77,0.11l0.84,-1.12l-0.34,-0.64l-3.8,0.23l-2.06,0.95l-2.05,-0.37l1.88,-0.57l4.06,-0.35l1.07,-0.38l1.19,-1.45l1.86,-1.15l0.4,-0.68l-0.36,-0.57l-7.79,0.34l-4.31,-0.19l-0.83,0.62l-0.11,-1.02l0.43,-0.47l0.87,0.04l2.26,-0.65l0.29,-0.44l-0.2,-1.33l-0.2,-0.29l-1.53,-0.85l-0.57,-0.63l-1.08,-0.11l-0.72,-0.48l-0.21,-1.53l-0.76,-1.76l-0.99,-0.84ZM721.52,574.59l1.54,1.29l0.89,0.47l1.98,-0.61l1.79,0.08l0.63,-0.42l0.45,-0.06l1.36,0.21l-0.26,1.68l0.9,2.12l2.0,2.84l2.18,1.56l8.14,3.53l1.17,0.24l-0.71,2.23l-0.43,0.68l-2.13,0.49l-6.49,-1.55l-1.72,-0.16l-1.4,0.36l-2.06,1.08l-2.42,-0.34l-3.36,0.65l-0.29,0.23l-0.91,2.08l-2.24,2.36l-3.76,1.94l-2.85,1.13l-4.12,3.8l-1.86,2.19l-0.86,0.44l0.53,-1.22l-0.05,-1.79l2.43,-1.92l3.66,-1.58l1.14,-1.46l-0.33,-0.64l-2.94,0.03l-2.91,0.29l-1.81,-0.18l-1.4,0.09l-0.6,-1.28l0.72,-0.29l0.93,-1.22l2.12,-2.16l0.35,-0.85l-0.0,-0.64l-0.35,-1.0l0.02,-2.03l2.55,-1.54l0.83,-0.16l0.29,-0.25l0.3,-0.77l-0.18,-1.98l-0.4,-1.5l-1.3,-0.72l-1.17,-1.03l-1.08,-0.32l0.07,-0.4l0.29,-0.3l2.17,-0.53l0.91,-1.93l0.28,-0.16l2.46,-0.17l1.19,-0.28l1.22,-0.6l0.58,-0.49l2.99,-0.52l0.46,0.15l0.86,0.82ZM702.55,604.46l-2.7,0.43l-0.36,-0.18l0.51,-0.51l2.02,-0.6l0.54,0.66l-0.03,0.2Z\", \"name\": \"Turkey\"}, \"GE\": {\"path\": \"M899.6,555.54l-3.56,-2.65l-2.58,-1.59l1.15,-1.72l0.67,-0.21l4.32,0.81l0.0,5.36Z\", \"name\": \"Georgia\"}, \"LI\": {\"path\": \"M479.66,489.8l0.02,-1.42l0.15,-0.43l0.74,1.46l-0.19,0.45l-0.72,-0.06Z\", \"name\": \"Liechtenstein\"}, \"LV\": {\"path\": \"M693.81,289.47l3.55,1.99l1.99,0.57l1.08,0.9l2.53,0.56l0.49,0.96l3.62,3.6l2.41,1.22l1.17,0.26l4.94,-1.5l0.71,-0.01l0.89,0.57l2.08,0.79l3.86,0.3l0.33,0.18l0.5,1.6l3.78,2.51l0.01,1.64l-0.16,0.4l-0.74,0.71l-0.62,1.56l-0.11,1.55l-0.95,2.51l0.29,0.53l0.22,0.05l2.08,-0.43l0.37,0.17l0.31,0.4l0.24,1.72l1.27,1.73l0.34,1.03l1.18,0.95l0.88,2.95l0.42,2.29l-0.59,1.84l-1.52,0.28l-1.91,1.15l-3.42,3.12l-0.81,2.06l-3.43,-0.09l-3.6,-0.5l-1.55,0.46l-1.71,1.91l-2.96,0.71l-2.36,-0.64l-1.52,-0.83l-2.67,-2.8l-5.8,-4.02l-1.15,-0.52l-6.83,-1.31l-1.59,-2.24l-0.54,-1.35l-1.1,-0.49l-2.14,0.57l-2.38,1.65l-0.63,0.2l-4.67,0.37l-1.48,-0.58l-2.72,-0.66l-2.72,-0.09l-5.63,-0.64l-1.22,0.71l-0.75,0.09l-1.07,-1.05l-1.26,-0.31l-1.54,0.36l-2.45,0.04l-6.91,-0.6l-5.95,1.81l-4.6,2.42l-3.13,1.94l-0.35,-2.96l0.22,-7.21l0.52,-3.44l2.41,-2.01l1.33,-1.71l0.8,-2.32l0.24,-2.08l0.48,-1.58l3.52,-4.67l2.8,-0.51l3.91,-1.34l4.08,-1.05l1.23,2.38l5.26,3.95l1.27,1.26l2.21,4.68l4.89,2.3l4.09,-0.7l4.9,-3.24l1.55,-1.77l0.28,-1.57l-0.55,-6.25l-0.82,-2.71l0.2,-1.21l0.43,-0.03l1.27,-0.8l4.21,-1.49l1.88,-0.39l2.54,-1.08l1.64,1.26l0.73,-0.15l0.24,-0.81Z\", \"name\": \"Latvia\"}, \"EE\": {\"path\": \"M681.02,292.17l1.82,-4.13l0.34,-3.01l0.49,-0.32l0.34,-0.6l-0.26,-1.25l-0.26,-0.27l-1.86,-0.63l-0.93,0.07l-1.54,1.86l-1.37,0.39l-1.34,-0.75l-3.16,-1.02l-0.72,-1.23l-0.33,-1.62l-1.67,-1.33l-0.63,-1.43l0.21,-0.83l1.41,-0.67l0.61,-0.79l-0.35,-0.63l-2.02,0.06l-0.86,-2.23l0.67,-0.72l0.34,-0.77l-0.08,-0.44l-0.49,-0.5l0.62,-1.45l-0.25,-1.46l3.54,-1.43l4.03,-0.33l0.36,-0.5l-0.28,-1.14l1.37,-0.12l2.65,-1.86l2.78,0.31l3.93,-1.31l7.61,0.02l1.29,-0.85l0.15,-0.41l-0.16,-1.04l1.08,0.16l2.37,-0.14l9.0,1.62l2.2,0.01l2.99,1.6l1.75,0.46l4.98,0.02l7.53,0.73l1.76,-1.2l1.2,1.24l0.05,0.35l-0.81,0.25l-0.7,0.83l-0.89,0.08l-0.74,0.46l-2.01,4.63l-1.78,2.06l-1.52,1.22l-0.71,0.99l-0.41,1.08l-0.11,1.31l1.4,5.86l-0.02,0.96l-0.57,2.18l0.2,1.13l0.96,1.74l0.97,2.4l0.39,1.53l1.41,1.24l-3.15,1.13l-0.66,1.42l-1.29,1.24l-0.65,2.49l-1.76,-0.23l-2.0,-0.76l-1.1,-0.64l-1.03,0.03l-4.85,1.48l-0.81,-0.22l-2.13,-1.06l-3.53,-3.51l-0.22,-0.58l-0.57,-0.62l-2.57,-0.57l-0.91,-0.82l-2.12,-0.63l-3.1,-1.88l-0.9,-0.23l-0.43,0.19l-0.22,0.83l-1.53,-1.25l-0.39,-0.04l-2.69,1.15l-1.83,0.38l-4.3,1.52l-1.26,0.77ZM666.97,278.74l-0.76,0.14l-2.16,-1.14l0.32,-0.5l0.53,-0.26l1.89,0.49l0.18,1.27ZM647.68,284.33l0.65,-0.34l0.55,-0.65l0.33,-0.88l-0.06,-0.37l-1.34,-1.77l1.14,-0.04l1.0,0.59l0.42,-0.01l1.45,-0.78l0.72,0.23l0.47,-0.18l0.75,-1.3l1.82,-0.44l0.95,-0.42l0.77,0.1l1.15,0.49l1.76,-0.47l1.78,0.29l4.32,2.36l-2.29,0.37l-1.11,1.14l-0.83,0.23l-1.26,1.02l-1.71,0.98l-0.38,0.54l-2.91,-0.1l-1.98,0.46l-1.39,1.11l-0.69,2.3l-0.93,1.54l-0.87,0.51l-0.69,0.06l-0.04,-0.64l2.18,-2.28l0.52,-0.84l-0.22,-0.59l-1.05,-0.32l-0.98,-0.83l-2.01,-1.06ZM661.53,273.2l-1.11,0.89l-0.64,-0.61l-0.66,0.02l-1.35,2.09l-1.32,0.31l-0.56,-0.26l0.03,-0.74l-1.12,-2.39l-1.41,-0.64l-2.02,-0.09l-0.37,-0.23l4.37,-0.49l0.31,-0.21l0.54,-0.99l0.98,-0.96l0.62,-0.09l0.4,0.14l0.14,0.74l0.46,0.54l2.34,0.45l0.84,1.22l0.26,1.21l-0.72,0.09Z\", \"name\": \"Estonia\"}, \"LT\": {\"path\": \"M639.02,342.33l-0.39,-1.13l0.47,-2.2l-0.92,-3.13l-1.46,-3.66l-0.19,-4.61l3.42,-2.12l4.53,-2.39l5.74,-1.75l6.79,0.61l2.53,-0.04l1.39,-0.36l1.04,0.26l0.93,1.0l0.34,0.12l1.22,-0.19l0.91,-0.62l5.51,0.62l2.7,0.09l4.28,1.25l4.87,-0.4l0.86,-0.29l2.26,-1.59l1.75,-0.52l0.54,0.16l0.53,1.3l1.95,2.56l6.97,1.34l0.97,0.45l5.67,3.93l2.72,2.84l1.7,0.92l2.31,0.66l-0.34,1.84l-1.48,3.87l0.12,0.41l0.74,0.57l3.29,0.4l-1.48,1.08l-0.6,1.26l-4.13,-0.12l-0.74,0.49l-0.47,1.39l-0.48,0.77l-0.97,0.67l-1.73,0.29l-1.62,0.68l-1.11,1.7l-0.79,2.17l0.04,2.82l-1.39,1.93l-1.03,2.49l0.14,0.65l0.37,0.27l1.76,0.29l0.47,0.48l0.18,0.57l-0.1,0.81l-0.72,0.24l-1.31,0.01l-0.64,-0.28l0.32,-0.85l-0.3,-0.93l-0.72,-0.7l-0.47,-0.04l-1.13,0.71l-1.24,0.04l-1.41,0.69l-1.0,1.14l-0.71,0.32l-2.58,-0.13l-0.73,0.71l-0.6,2.36l-1.96,-0.05l-3.92,1.55l-1.77,-1.04l-2.45,0.34l-1.86,-0.07l-1.89,0.43l-2.25,-0.13l-0.76,-0.28l0.02,-2.29l-0.39,-1.31l-1.24,-1.24l-2.8,-1.58l-1.61,-0.43l-0.45,-0.8l-1.72,-0.82l-1.06,-0.12l-0.74,0.5l-0.85,-1.99l0.06,-1.19l0.32,-1.24l1.64,-3.84l-0.06,-0.83l-1.32,-1.32l-1.45,-0.78l-0.76,-1.55l-0.35,-0.22l-6.66,-0.08l-2.63,-0.68l-4.3,-1.77l-1.38,-0.7l-0.74,-0.73l-0.35,-0.11l-1.68,0.21Z\", \"name\": \"Lithuania\"}, \"LU\": {\"path\": \"M433.15,437.03l-0.05,1.41l0.48,1.32l1.68,1.88l1.01,0.65l1.98,0.66l-0.04,1.05l-1.0,1.07l-0.43,0.87l-0.47,2.14l-0.98,-0.51l-0.83,-0.08l-0.98,0.26l-0.69,0.55l-0.66,0.13l-2.45,-1.16l1.02,-1.75l-0.02,-0.42l-1.3,-2.07l-0.74,-0.75l0.23,-1.64l0.58,-0.74l1.03,-2.07l1.29,-1.3l1.16,0.19l0.17,0.33Z\", \"name\": \"Luxembourg\"}, \"RO\": {\"path\": \"M631.66,512.33l-0.58,-0.56l-1.04,-1.59l-2.98,-1.78l-1.3,-1.89l3.0,-0.64l1.59,0.53l0.76,-0.26l0.69,-0.51l0.67,-1.16l0.82,-0.18l2.69,0.29l1.42,-0.78l0.52,-0.55l0.46,-1.28l0.82,-0.3l0.26,-0.39l-0.15,-1.22l0.78,-1.78l1.18,-0.67l1.2,-0.98l0.13,-0.43l-0.23,-0.7l0.16,-0.43l2.13,-2.96l0.14,-1.37l1.69,-1.68l1.11,-2.8l1.64,-1.49l0.18,-2.0l1.41,-1.04l2.32,-2.6l2.53,-0.74l0.89,0.21l0.91,-0.16l0.99,-0.61l2.71,-2.55l2.29,-0.96l1.16,-1.36l0.58,0.03l2.92,1.64l3.47,-0.04l4.49,0.97l0.86,-0.12l1.63,0.64l1.41,-0.09l1.41,-0.47l1.29,-0.14l1.11,0.24l4.5,3.72l2.52,-0.5l1.41,-1.38l3.87,-1.47l9.43,-1.41l1.84,-2.27l0.38,-1.46l3.99,-0.91l1.2,-0.06l0.89,0.12l1.43,0.72l0.99,0.89l2.29,3.34l1.04,1.97l0.64,2.13l0.83,1.42l1.57,1.55l2.19,3.59l2.1,1.97l1.18,1.95l2.93,2.32l1.02,3.08l1.19,2.52l-0.22,2.16l0.27,1.0l-1.66,5.2l-0.28,2.9l0.21,2.54l0.55,1.94l0.04,0.88l-1.04,0.73l0.01,0.55l1.84,2.47l1.43,1.74l1.94,1.03l4.29,1.01l0.58,-0.12l0.27,-0.29l-0.23,-0.85l1.39,0.33l1.88,-0.54l2.6,-1.35l2.27,-0.26l2.07,0.76l1.65,1.62l-0.91,4.49l-0.93,2.04l-5.84,1.21l-0.37,-2.16l0.52,-0.66l-0.24,-0.64l-1.85,-0.24l-0.79,0.56l-0.53,0.79l0.37,1.96l-0.97,1.47l-0.07,1.37l-0.45,0.66l-0.09,0.63l0.45,0.45l0.39,-0.06l-0.18,0.42l-2.08,2.23l-0.78,1.52l0.18,5.12l-0.96,3.66l-2.42,-0.04l-2.03,-0.45l-2.21,-0.78l-2.16,-2.64l-0.42,-0.14l-1.86,0.48l-0.84,-0.66l-1.58,-0.38l-1.75,-0.01l-4.73,-2.44l-3.28,0.36l-4.86,1.03l-3.76,1.29l-3.9,2.3l-1.6,1.74l-1.7,0.86l-2.46,0.65l-4.49,-0.25l-9.87,-1.78l-2.85,0.5l-3.67,-0.38l-5.67,-1.11l-4.2,-0.34l-4.08,0.63l-0.45,-0.32l0.03,-0.96l0.46,-0.51l0.94,-0.46l0.63,-0.57l0.18,-0.76l-0.16,-0.37l-4.48,-2.72l-0.15,-0.7l-0.62,-0.59l-0.83,-0.34l-0.59,-0.56l-0.4,-0.79l0.08,-0.67l0.56,-0.68l0.71,-0.29l0.99,0.1l0.68,-0.28l0.2,-0.47l-0.33,-0.8l-1.13,-0.79l-2.23,-0.95l-1.99,0.5l-2.13,1.95l-1.09,0.23l-0.9,-1.21l-1.6,-0.77l-2.38,-0.28l-1.25,-0.44l-0.58,-0.76l-1.0,-0.58l-2.03,-0.57l1.83,-0.2l0.48,-0.55l0.05,-0.47l-0.23,-0.38l-2.12,-0.97l0.62,-0.23l0.36,-0.88l0.63,-0.63l0.18,-0.36l-0.11,-0.67l-0.98,-0.88l-2.71,-0.8l-1.0,-0.8l-0.8,-0.11l-0.93,-0.43l-3.06,-2.42l-0.13,-0.14l0.17,-0.72l-0.27,-1.04l0.17,-1.09l-0.06,-1.47l-0.37,-0.46l-0.49,0.03l-0.31,0.25Z\", \"name\": \"Romania\"}, \"EG\": {\"path\": \"M765.21,739.26l-0.4,0.48l0.36,0.35l1.86,0.2l4.19,-0.89l0.68,-0.86l0.41,-1.23l1.34,0.21l4.58,1.95l1.25,0.02l3.66,-1.23l0.28,0.16l-0.58,0.2l-0.2,0.94l-1.36,1.74l0.15,0.61l1.78,0.78l1.38,0.29l1.14,1.74l0.46,0.19l1.62,-0.52l1.02,-1.22l0.01,-0.5l-0.37,-0.48l3.21,2.54l1.24,0.57l1.18,-0.09l2.22,-0.63l0.72,0.08l2.8,-0.77l0.76,1.04l0.42,0.13l2.44,-0.68l3.95,-0.0l3.29,-0.79l3.67,-1.82l3.73,10.31l0.56,2.29l1.74,3.77l3.24,10.33l-0.62,0.57l-1.57,2.52l-1.61,7.53l-2.3,5.87l-0.29,3.76l-0.35,1.23l-7.32,0.0l-0.69,-0.58l-2.22,-3.01l-2.46,-2.02l-2.21,-2.53l-0.57,-1.74l0.0,-1.28l-1.02,-3.02l-0.79,-1.48l-2.75,-3.11l-0.77,-1.63l-1.21,-1.78l-1.01,-4.1l-1.1,-2.6l-0.57,-0.19l-1.26,0.72l-0.19,0.43l0.19,0.93l-1.04,1.47l-0.66,1.76l0.51,1.71l2.32,2.29l0.41,0.85l0.51,1.97l-0.08,2.75l0.46,1.22l1.67,2.05l1.59,3.32l1.67,1.79l2.46,3.47l2.38,2.38l-113.23,0.0l-0.01,-17.07l-1.55,-5.76l-0.86,-4.72l-1.23,-3.6l-0.1,-0.89l2.33,-3.72l1.16,-3.4l0.16,-1.61l-1.3,-4.24l-0.32,-3.88l3.52,-4.32l0.79,1.4l0.29,0.2l2.13,0.32l6.99,-1.61l18.22,3.61l4.0,2.48l1.2,0.33l2.7,-0.05l1.96,1.46l7.37,0.7l3.88,1.58l2.23,1.27l1.57,0.45l1.29,-0.08l1.61,-0.48l2.11,-0.94l2.25,-1.28l4.54,-3.2l1.48,-0.52l2.32,0.1l0.33,-0.19l2.2,-2.81l2.08,-0.2ZM783.73,738.59l0.24,0.14l0.29,0.3l-0.53,-0.44Z\", \"name\": \"Egypt\"}, \"PL\": {\"path\": \"M543.65,368.02l2.24,0.2l4.48,-1.73l7.75,-2.26l8.26,-2.12l3.9,-0.68l1.66,-1.47l1.11,-1.38l2.39,-2.09l4.31,-0.78l1.76,-1.08l3.39,-1.43l7.82,-1.63l3.25,-0.36l3.12,-0.04l2.21,1.0l-0.57,-0.04l-0.39,0.57l2.05,4.35l1.16,1.6l2.41,1.27l2.0,0.42l5.97,-0.69l2.69,-1.31l0.46,0.17l7.66,0.49l26.59,1.14l7.65,0.18l0.75,-0.23l0.65,-0.6l0.71,0.07l1.04,0.42l0.41,0.26l0.28,0.66l0.32,0.28l1.65,0.4l1.47,0.74l1.14,0.71l1.03,0.96l0.33,1.05l-0.04,2.27l1.64,6.67l2.6,6.11l1.31,4.41l0.39,3.77l-0.18,1.9l-0.61,0.58l-4.89,2.03l-1.01,0.69l-2.89,3.33l-0.47,1.1l0.51,0.99l3.51,1.58l0.61,0.54l1.24,0.64l0.6,0.91l-0.02,1.06l-0.57,1.63l0.2,1.32l-1.03,1.7l-0.08,2.01l1.61,3.05l0.23,0.8l-0.27,0.83l0.18,0.97l2.67,3.26l0.99,2.34l0.69,1.01l1.47,1.21l-0.27,0.34l-0.84,0.18l-0.48,0.6l0.04,0.47l0.87,1.06l0.61,1.75l-0.05,1.28l-0.44,0.36l-1.02,1.62l-3.57,0.67l-2.75,2.59l-1.34,1.01l-5.08,4.9l-4.48,5.17l-0.81,1.23l0.09,1.25l0.96,3.26l-0.36,2.22l1.95,1.75l-0.24,0.41l-2.87,-0.93l-1.5,-0.09l-5.93,-2.17l-0.67,-1.45l-1.17,-0.92l-2.5,-0.73l-1.1,-0.55l-3.95,-0.3l-3.67,0.18l-0.33,0.16l-1.01,1.31l-0.57,0.31l-0.92,0.04l-0.8,-0.21l-1.04,-0.75l-1.53,-0.38l-1.2,0.17l-1.5,-0.19l-0.82,0.12l-3.01,1.33l-0.84,0.92l-0.53,1.22l-1.56,-0.57l-1.82,0.42l0.34,-0.9l-0.2,-1.86l-0.81,-0.59l-1.18,-0.23l-2.06,-2.91l-0.63,-0.5l-0.48,0.01l-1.81,1.23l-0.87,0.37l-1.25,1.8l-1.91,0.05l-0.36,-1.5l-0.32,-0.28l-1.12,-0.17l-0.45,-1.77l-2.8,-2.47l-0.28,-0.84l0.08,-0.51l-0.37,-0.9l-0.76,-0.46l-2.28,-0.49l-0.66,0.22l-1.24,-0.83l-1.3,-0.45l-0.68,-0.67l-0.47,-0.14l-0.89,0.68l-1.27,0.41l-0.83,-0.47l-0.64,-0.91l-0.89,-0.78l-0.78,-0.32l-0.18,-0.17l1.22,-0.48l0.56,-0.84l-0.17,-1.46l-0.42,-0.42l-0.43,0.0l-0.59,0.37l-1.27,0.34l-1.7,0.16l-3.57,-2.18l-2.32,-0.67l-1.42,-0.21l-0.39,0.18l-0.17,0.62l1.62,2.71l-1.85,0.82l-1.61,1.27l-0.46,0.24l-0.33,-0.05l-0.43,-0.26l-1.49,-2.24l-2.01,-2.01l-1.46,-0.59l-0.1,-0.19l0.71,-0.74l1.08,-0.38l0.91,-1.37l-0.16,-0.72l-1.84,-1.31l-3.19,0.41l-0.65,0.25l-0.82,-0.97l-0.67,-0.11l-2.18,-1.1l-5.03,-1.25l-0.92,-1.11l-0.23,-1.26l-0.26,-0.31l-3.64,-1.01l-0.42,0.18l-0.19,0.43l0.01,1.78l-1.35,0.36l1.18,-2.06l0.65,-1.6l0.72,-3.12l-1.08,-3.23l-0.48,-0.66l-2.48,-1.15l0.28,-1.67l-0.27,-0.78l-1.3,-1.86l-0.24,-0.87l0.94,-1.3l1.05,-3.19l-0.13,-0.43l-0.54,-0.43l-0.12,-0.51l0.13,-1.2l-0.35,-0.77l-0.98,-0.65l-0.47,-0.55l-0.21,-0.66l0.18,-1.17l0.66,-1.74l-0.04,-0.36l-1.53,-2.24l-3.5,-2.48l-1.54,-1.59l0.1,-0.7l0.63,-0.77l1.41,-0.89l1.02,-1.45l0.65,-1.93l0.03,-1.7l-1.57,-5.02l-0.4,-2.51l3.71,1.43l0.56,-0.46l-0.4,-1.21l0.16,-0.84l-0.09,-1.29l-0.31,-0.36l-4.44,-0.86l-0.11,-0.47ZM603.72,353.39l0.65,0.34l-0.2,-0.07l-0.45,-0.27Z\", \"name\": \"Poland\"}, \"LY\": {\"path\": \"M507.02,713.68l1.65,0.75l2.05,0.37l6.38,3.57l2.05,0.45l4.43,0.42l5.33,-1.46l1.84,-0.24l3.38,1.34l1.59,0.4l2.5,0.1l4.28,1.22l1.03,0.4l2.49,1.94l1.38,0.67l8.88,1.79l1.1,1.07l1.17,2.15l0.07,2.86l1.82,4.75l1.39,1.96l1.62,1.68l1.77,1.01l3.95,1.45l4.54,0.58l4.47,0.19l7.64,1.98l6.46,2.28l1.67,1.15l3.2,1.09l6.52,5.39l3.62,1.86l2.67,0.4l2.5,-0.36l4.04,-1.87l1.73,-1.14l4.15,-4.73l1.38,-2.51l0.57,-1.79l-0.12,-1.9l-0.52,-1.66l-1.16,-1.71l-0.76,-2.09l-0.46,-3.81l0.61,-2.62l0.75,-1.56l1.18,-1.61l3.33,-3.15l3.35,-2.22l5.88,-2.9l3.39,-0.03l1.52,-0.33l2.92,-2.09l0.97,-0.07l1.66,0.51l4.66,-0.14l1.98,0.55l2.53,1.31l3.11,0.8l4.33,1.74l0.47,2.27l-0.25,0.77l-0.06,0.99l0.16,0.35l2.63,1.85l6.89,0.83l1.27,0.44l1.96,1.38l1.34,0.44l4.75,0.19l2.77,-0.29l2.53,0.46l0.86,0.41l0.91,0.96l1.52,3.1l-2.8,3.27l-1.13,1.65l0.34,4.12l1.3,4.24l-0.16,1.35l-1.1,3.18l-2.03,3.05l-0.38,1.0l0.13,1.12l1.23,3.6l0.85,4.69l1.54,5.69l0.0,16.96l-204.27,0.0l-0.63,-7.84l0.36,-6.05l-0.51,-3.13l-0.82,-2.88l-1.45,-3.99l-1.32,-2.44l-2.98,-4.38l2.47,-1.47l3.87,-1.66l1.34,-0.78l4.43,-6.01l0.54,-1.22l0.04,-1.35l-0.2,-1.42l-1.7,-6.3l0.52,-1.06l1.51,-2.02l2.74,-0.78l0.98,-1.07l0.88,-1.86l2.06,-1.28l0.81,-0.93l9.31,-5.16l0.42,-0.9l0.01,-0.96l-1.08,-1.87l0.07,-3.71l0.56,-3.74Z\", \"name\": \"Libya\"}, \"CH\": {\"path\": \"M479.62,482.62l1.14,0.8l-0.18,1.0l-1.08,2.02l-0.61,1.74l0.03,2.1l0.41,0.33l1.74,0.08l2.81,0.78l0.54,1.22l1.69,0.93l1.85,0.58l1.02,-0.27l2.12,-1.93l0.51,0.2l0.43,0.88l-0.64,2.62l-0.12,1.27l0.56,0.97l-0.02,0.65l-1.65,-0.23l-1.29,-0.99l-0.87,0.13l-0.92,0.48l-0.68,2.2l0.1,0.6l0.55,0.63l0.33,0.87l0.41,1.65l-0.69,0.02l-0.88,-1.43l-0.7,-0.74l-0.91,-0.09l-3.29,1.21l-1.21,-0.13l-0.52,-0.58l-0.68,-2.14l-0.42,-0.32l-1.84,-0.17l-0.6,0.35l-0.2,0.34l-0.12,3.09l-0.58,1.03l-2.45,2.84l-0.31,0.71l-0.07,0.81l0.58,1.67l-0.72,0.36l-0.41,-0.33l-0.34,-1.03l-1.21,-1.09l0.49,-0.82l-0.08,-0.63l-0.28,-0.24l-2.31,-0.55l-2.33,-2.15l-0.21,-0.48l-0.03,-2.52l-0.6,-0.57l-0.93,0.09l-1.05,0.77l-0.87,1.01l-1.9,1.26l-0.23,0.68l0.55,1.27l-1.71,2.33l-2.51,1.44l-3.29,-0.92l-3.01,1.12l-2.56,0.51l-0.83,-0.33l-0.34,-0.27l-0.91,-1.53l-2.35,-2.36l0.54,-1.67l-0.64,-1.73l0.1,-0.55l-0.18,-0.41l-0.4,-0.21l-2.44,-0.37l-2.11,0.11l-1.59,0.66l-1.5,1.42l-0.04,0.36l0.53,0.94l-0.73,0.74l-1.4,0.72l-1.06,0.03l-0.01,-0.52l0.75,-0.35l0.93,-0.9l0.38,-1.74l-0.82,-1.03l1.24,-2.71l3.31,-2.41l0.66,-3.3l2.81,-1.33l0.39,-0.64l3.54,-3.54l0.68,-0.97l0.09,-0.55l-0.34,-0.51l-0.94,-0.37l0.69,-0.76l1.01,-0.54l0.9,-0.01l0.3,0.54l0.48,0.36l1.14,0.2l1.14,-0.15l1.04,-0.38l1.17,-1.66l1.37,-0.65l1.08,0.36l3.11,0.1l2.31,-0.21l1.45,-0.53l1.63,0.0l1.13,0.29l0.71,-0.11l0.42,-0.3l1.0,-0.18l0.42,-0.42l0.01,-0.53l-0.38,-0.39l-1.52,0.06l-0.27,-0.16l0.3,-0.51l0.85,-0.52l0.69,-0.12l0.45,0.12l1.64,1.17l0.36,0.03l0.55,-0.29l0.28,0.12l0.63,0.75l0.33,0.13l3.96,-0.25l4.54,2.48Z\", \"name\": \"Switzerland\"}, \"GR\": {\"path\": \"M728.08,670.66l-0.79,0.26l-0.27,-0.4l0.51,-1.56l-0.52,-1.53l0.72,-0.63l0.51,-0.91l1.23,-0.97l3.7,-1.26l-0.01,0.43l-1.11,2.37l-1.0,1.2l0.08,0.93l-1.45,0.33l-1.6,1.75ZM727.96,660.69l0.31,-0.19l-0.05,0.46l-0.26,-0.27ZM717.45,657.54l2.45,-1.2l0.79,0.06l-1.35,0.58l-0.57,0.47l-1.31,0.09ZM718.65,675.52l0.9,2.17l-0.39,0.1l-0.45,0.53l0.1,-1.01l-0.52,-1.15l0.37,-0.64ZM711.88,642.87l0.32,-0.37l1.26,-0.4l0.98,-0.02l1.6,0.5l1.03,0.08l0.06,0.28l-0.73,0.12l-1.68,0.81l-0.54,-0.13l-1.08,-0.79l-1.23,-0.07ZM716.41,654.11l0.54,0.48l-0.03,0.04l-0.63,0.1l0.12,-0.63ZM708.43,617.81l-0.18,0.72l0.13,0.4l1.83,1.52l0.65,1.19l-0.81,-0.3l-0.49,0.49l0.43,0.99l-0.37,0.12l-0.95,-0.02l-2.94,-0.78l-0.36,-0.44l1.51,-1.07l0.47,-0.63l-0.34,-0.63l-1.6,0.18l-1.24,1.38l-1.92,-0.59l-0.59,-0.58l0.65,-1.02l1.36,0.04l0.99,-0.34l1.05,-0.45l0.25,-0.65l1.92,-0.12l0.56,0.56ZM623.87,612.82l0.81,0.1l0.84,-0.47l0.47,-0.56l0.3,-1.23l0.8,-0.02l0.42,-0.51l-0.08,-0.84l-0.89,-1.74l0.81,-0.52l0.37,-0.52l2.5,-0.46l0.86,-0.64l0.93,-2.94l1.11,-2.31l1.85,-0.75l0.87,-1.26l0.42,-1.01l0.03,-0.73l-1.01,-1.95l0.07,-0.75l4.52,-0.26l1.18,-0.64l2.45,0.55l2.71,-1.28l2.13,-2.58l0.71,-0.31l1.91,-0.15l0.66,-0.28l2.77,0.55l1.44,0.08l3.19,-0.98l0.25,-0.3l0.38,-2.03l0.18,-0.14l4.88,0.17l1.31,-1.02l2.47,-0.21l2.83,0.18l1.72,-0.42l1.59,-0.68l1.16,0.05l0.71,-0.17l0.49,-0.38l0.23,-0.68l4.19,0.07l1.53,-0.5l1.02,1.67l2.5,1.47l0.48,-0.04l0.77,-0.49l1.82,0.43l1.82,0.77l1.87,1.21l3.75,-0.91l2.61,-0.24l0.83,-0.24l1.97,0.27l1.94,-0.63l1.02,-0.61l0.46,-1.18l-0.17,-1.48l-0.44,-1.41l-0.57,-0.89l0.35,-0.54l1.04,-0.24l2.68,0.72l1.11,1.0l1.06,0.53l0.5,2.84l-0.19,0.48l-0.81,0.19l-2.79,1.69l-0.19,0.32l-0.07,1.58l0.1,1.3l0.29,0.52l0.0,0.43l-0.24,0.54l-2.03,2.03l-0.89,1.16l-0.56,0.18l-0.34,-0.5l-2.25,-1.26l-4.82,-0.7l-2.28,-0.88l-1.1,0.12l-2.16,-0.96l-1.44,0.48l-2.75,1.7l-1.32,-0.16l-1.58,-1.02l-1.46,-0.22l-1.39,0.65l-1.98,1.99l-1.88,0.91l-1.8,-0.37l-2.49,0.01l-0.39,0.31l-0.22,1.44l0.54,0.87l1.13,1.12l-0.47,0.74l-0.02,0.38l0.47,1.01l0.99,0.39l-1.39,-0.11l-1.3,0.61l-0.32,1.0l0.12,0.35l1.4,1.3l1.87,1.38l0.37,1.18l-0.35,0.48l-1.18,-0.71l-2.27,-3.16l-3.48,-0.8l-0.39,0.14l-0.54,0.67l-0.06,0.39l0.64,1.71l0.62,0.86l2.45,1.61l-2.93,-0.93l-0.8,-1.4l-0.21,-1.94l-0.22,-0.32l-5.5,-2.86l-0.45,-1.08l0.46,-0.5l0.4,-1.07l-0.43,-0.54l-1.68,0.27l-0.91,0.65l-1.49,0.64l-0.24,0.34l-0.06,1.08l0.22,1.0l-0.48,1.39l-0.49,2.52l0.31,1.49l3.35,3.9l1.1,2.68l0.86,1.13l1.73,1.2l1.71,2.07l0.7,1.04l0.44,1.49l-1.16,0.88l-0.56,0.03l-0.15,-0.15l0.57,-1.22l-0.31,-1.06l-2.29,-1.17l-1.37,0.42l-1.12,0.76l-0.14,0.5l0.64,1.41l0.72,0.95l0.34,1.2l0.45,0.29l-0.74,0.57l-1.61,0.68l-2.76,0.18l-0.61,0.48l0.16,0.67l1.6,0.3l1.19,0.76l3.27,0.91l1.74,1.2l1.38,0.09l1.7,2.15l2.57,0.54l1.7,2.19l2.02,0.42l1.63,0.73l0.41,0.6l0.24,1.26l0.11,2.87l0.38,2.18l-0.07,1.48l-0.27,0.28l-0.29,0.01l-1.21,-1.49l-4.01,-3.64l-0.66,-0.41l-0.66,-0.09l-1.28,0.69l-3.11,0.54l-1.92,0.86l-0.41,0.62l0.17,0.49l0.62,0.37l0.68,0.75l0.04,1.25l0.68,1.51l1.09,0.59l1.24,0.0l0.4,0.17l0.21,0.58l0.95,1.03l-2.89,0.89l-1.09,0.62l-0.47,-0.26l-0.04,-0.98l-0.2,-0.33l-2.13,-1.2l-1.23,-0.26l-0.95,-0.77l-0.53,0.03l-0.67,0.67l-0.11,0.37l0.54,2.33l1.21,1.72l1.93,4.24l0.87,2.48l0.16,1.11l-0.37,2.26l1.29,2.3l-1.48,-1.02l-1.97,-2.38l-0.69,-1.49l-0.31,-0.23l-0.85,-0.12l-1.59,0.22l-0.3,0.22l-1.62,3.29l-0.04,1.39l-0.21,-0.11l-0.53,-0.44l-0.06,-2.98l-1.96,-2.81l-0.93,-0.41l-1.11,-1.88l-0.41,-0.16l-1.04,0.23l-0.97,0.71l-0.29,2.85l-0.28,0.5l-1.68,-1.57l-2.02,-3.26l-0.05,-1.6l1.43,-1.58l0.1,-0.33l-0.24,-1.37l-1.56,-2.52l-2.1,-1.55l-1.1,-0.44l-0.63,-1.66l-1.13,-0.85l-0.83,-0.37l-0.07,-0.24l2.41,-2.02l1.21,-2.49l0.32,-0.06l1.42,0.61l1.49,-0.17l1.46,-1.68l0.88,-0.72l1.5,0.09l3.86,2.05l4.28,1.21l2.03,1.0l1.29,1.08l1.71,0.38l0.46,-0.42l-0.23,-1.23l0.38,-0.17l2.18,0.02l0.74,-0.53l0.42,-0.59l0.0,-0.46l-0.47,-0.67l-1.03,-0.49l-1.47,-0.29l-0.73,0.18l-1.18,-0.46l-1.13,-0.88l-2.27,-0.86l-2.15,-1.45l-0.57,0.13l-0.44,0.74l-0.71,0.36l-1.11,0.06l-3.72,-0.92l-2.15,0.71l-2.11,0.21l-2.13,0.47l-0.94,-1.15l-0.45,-1.01l-0.49,-0.38l-0.6,0.34l-0.02,0.91l-0.25,0.55l-1.28,0.35l-0.68,-0.45l-1.66,-4.25l-1.61,-1.93l-1.24,-0.53l-0.08,-0.77l0.07,-0.5l1.17,-0.16l2.36,0.85l0.88,-0.23l0.55,-0.41l0.16,-0.37l-0.11,-0.91l-0.39,-0.92l-0.34,-0.24l-2.63,-0.11l-1.94,0.42l-0.66,-0.31l-0.34,-0.52l-1.59,-1.25l-1.38,-1.68l-2.27,-1.18l-1.43,-3.35l-1.02,-1.26ZM675.17,600.88l1.34,-0.04l2.3,1.22l1.04,1.37l-1.41,-1.3l-1.36,-0.37l-1.91,-0.87ZM707.89,661.28l-0.16,0.18l-0.36,-0.26l0.41,0.1l0.11,-0.02ZM708.79,660.68l0.03,-0.08l0.05,0.06l-0.08,0.03ZM703.69,645.69l0.95,-0.85l2.02,-0.19l-0.73,0.47l-2.24,0.58ZM672.76,675.97l0.47,1.17l1.83,0.46l1.71,-0.13l0.86,-0.89l0.55,-0.01l0.13,0.28l-0.96,0.59l0.02,0.55l1.05,0.63l0.84,-0.04l0.28,0.97l0.84,0.59l1.91,-0.04l3.7,-0.9l3.66,0.22l1.49,0.98l2.58,0.12l2.39,0.5l3.4,-0.62l-0.19,2.06l0.14,0.77l0.84,0.58l0.89,-0.12l0.88,-0.75l1.68,-0.51l1.84,0.0l1.35,-1.09l-0.21,1.46l-0.45,1.56l-0.8,0.3l-4.51,-0.1l-8.47,1.01l-5.41,0.37l-0.4,-0.13l-0.14,-1.43l-0.43,-0.64l-3.49,-1.22l-7.93,-1.34l-2.54,0.18l-0.77,-0.02l-0.45,-0.25l-0.31,-0.42l-0.17,-1.69l0.27,-1.65l0.87,0.49l0.43,-0.08l0.58,-0.56l0.16,-1.18ZM702.17,634.63l0.83,-0.47l0.53,-0.8l0.03,-0.38l-0.51,-1.11l-1.37,-1.35l-0.04,-0.53l1.75,-0.34l1.57,0.89l-0.12,0.39l0.19,2.78l-0.62,0.53l-0.14,0.76l-0.95,0.65l-1.15,-1.03ZM698.48,599.9l-0.88,0.24l-0.94,-0.74l0.76,-0.25l1.05,0.74ZM696.85,654.58l-0.82,0.4l-0.56,-0.58l-0.35,-1.01l1.84,-1.64l0.35,0.34l-0.04,1.56l-0.43,0.92ZM695.75,663.45l0.09,0.3l-0.33,0.43l0.19,-0.35l0.05,-0.38ZM695.08,647.43l-0.75,0.06l0.03,-0.54l0.14,-0.09l0.93,0.36l-0.36,0.21ZM690.86,607.38l1.89,-0.07l0.57,0.64l0.49,0.09l1.51,-1.04l-0.52,0.64l-0.38,0.93l-0.18,1.09l-0.59,-0.12l-0.12,-0.88l-0.43,-0.38l-0.69,0.27l-0.36,0.77l-0.51,0.04l-0.54,-0.26l-0.14,-1.72ZM694.65,659.11l-0.68,-0.65l-0.17,-0.27l0.96,0.71l-0.11,0.21ZM693.06,653.23l-0.77,0.86l-0.51,-0.07l-0.15,-0.21l0.4,-0.81l0.94,-0.5l0.09,0.74ZM690.94,644.63l1.66,0.25l0.15,0.17l-0.25,0.51l-0.46,-0.08l-1.09,-0.84ZM689.21,642.46l-0.12,0.31l-0.69,-0.78l-1.09,-0.79l-0.39,-0.66l-0.69,-0.49l-0.1,-0.51l0.59,-0.25l0.74,1.01l1.24,0.26l-0.02,0.55l0.53,1.35ZM686.25,596.85l-1.26,0.42l-1.41,-0.87l0.01,-0.29l1.17,-1.42l0.98,0.08l0.69,0.96l-0.17,1.13ZM685.69,654.47l0.32,0.59l-0.13,0.1l-0.14,-0.27l-0.05,-0.42ZM682.97,623.8l0.51,0.29l0.25,0.93l-0.86,-0.54l0.1,-0.68ZM684.19,625.48l0.31,0.27l-0.27,0.07l-0.05,-0.35ZM661.66,625.04l3.1,-1.8l1.96,-0.47l1.2,1.04l0.73,1.64l0.92,0.78l1.51,0.69l0.76,0.11l2.51,1.21l3.0,0.27l1.17,1.85l0.09,0.35l-0.28,0.78l0.44,1.97l0.77,1.93l1.43,1.15l1.41,0.27l1.25,-0.03l-0.01,1.43l-0.63,0.53l-1.01,-0.67l-0.75,-0.06l-0.54,-0.6l-1.34,-0.84l-0.34,-1.37l-2.27,-3.04l-3.76,-0.18l-1.21,-0.55l-0.6,-1.8l-1.43,-0.89l-1.93,-1.94l-1.56,-1.08l-1.52,-0.72l-1.62,-0.47l-1.46,0.5ZM681.22,658.91l0.47,0.25l-0.55,0.09l0.08,-0.34ZM682.33,659.06l0.37,-0.41l0.36,-0.09l0.0,0.38l-0.73,0.12ZM682.94,652.14l-0.52,-0.06l0.1,-0.37l0.26,-0.16l0.24,0.11l-0.07,0.48ZM681.96,648.45l-0.28,-0.62l0.24,-0.28l0.32,0.46l-0.27,0.44ZM680.69,645.1l-0.29,0.25l-0.04,-0.3l0.43,-0.89l0.31,-0.03l-0.41,0.98ZM672.52,621.17l-0.6,-0.11l-0.2,-0.37l0.8,0.47ZM668.93,639.82l0.26,-0.51l0.33,0.09l0.1,0.32l-0.19,0.14l-0.5,-0.04ZM661.94,664.62l1.47,1.53l-0.51,0.98l-0.83,-0.28l-0.27,-0.48l-0.06,-1.34l0.2,-0.41ZM633.7,642.06l0.48,0.52l-1.17,0.88l-1.26,-1.0l-0.97,-1.4l0.5,-0.6l0.61,0.8l1.24,0.33l0.56,0.47ZM627.1,635.32l0.7,-1.67l0.38,0.34l0.43,0.08l0.52,-0.22l0.62,-1.27l0.25,1.95l0.26,0.34l0.85,0.3l1.1,1.42l-0.07,0.54l-1.85,-0.68l-0.97,0.24l-0.29,-1.09l-0.71,-0.88l-0.52,0.0l-0.69,0.6ZM630.95,631.66l0.08,0.09l-0.0,0.18l-0.08,-0.27ZM629.87,628.81l0.45,-1.93l0.49,-0.77l0.35,-0.18l0.06,2.57l-0.21,0.26l-1.14,0.06ZM620.81,615.41l-0.15,-0.1l-1.04,-1.97l-2.06,-2.14l-0.01,-0.26l0.56,-0.34l1.58,-0.31l0.9,0.56l-1.09,1.26l0.07,0.47l0.65,0.65l0.33,1.74l0.26,0.44Z\", \"name\": \"Greece\"}, \"RU\": {\"path\": \"M726.15,312.03l0.75,-1.97l0.11,-1.54l0.56,-1.41l0.63,-0.55l0.32,-0.69l0.13,-1.14l-0.13,-0.99l-0.62,-0.75l-3.35,-2.1l-0.53,-1.63l-0.74,-0.36l-1.19,-0.06l0.57,-2.1l1.17,-1.07l0.68,-1.42l2.7,-0.77l0.49,-0.4l0.15,-0.53l-0.31,-0.63l-1.16,-0.88l-0.38,-1.49l-0.99,-2.45l-0.92,-1.63l-0.17,-0.82l0.55,-2.09l0.03,-1.17l-1.41,-5.94l0.09,-0.96l0.37,-0.97l0.6,-0.81l1.49,-1.19l1.84,-2.14l1.93,-4.52l0.36,-0.26l1.24,-0.24l0.55,-0.74l0.77,-0.24l0.48,-0.45l0.07,-0.43l-0.32,-0.69l-1.43,-1.46l0.6,-1.35l-0.65,-3.35l0.43,-0.81l0.57,-0.06l1.12,1.2l1.66,0.65l0.37,-0.04l1.21,-0.84l0.54,-1.72l0.56,-0.46l1.07,0.55l1.95,0.23l1.69,-0.1l1.18,-0.36l0.64,-0.64l1.32,-2.14l0.76,-0.64l6.88,0.87l6.12,1.65l0.42,-0.15l0.47,-0.62l0.29,-1.23l-0.19,-0.42l-2.61,-1.39l-1.44,-1.91l-2.05,-1.51l-2.27,-0.21l-2.75,0.52l-3.91,-0.3l-3.38,-2.77l-2.3,-0.91l-1.57,-2.17l0.85,0.47l0.58,-0.26l0.39,-2.49l-0.14,-0.34l-0.99,-0.85l-0.94,-0.55l-0.37,-0.01l-4.47,2.15l-3.82,0.53l7.28,-6.51l3.44,-2.16l1.07,-1.18l6.97,-4.75l3.26,-3.23l2.7,-2.13l8.35,-8.72l3.51,-3.4l5.0,-4.11l3.43,-3.34l1.42,-1.93l2.06,-4.41l1.3,-2.3l0.09,-0.95l-0.47,-1.0l-2.34,-2.4l-2.18,-3.05l-2.83,-1.99l-7.52,-4.34l-4.87,-3.94l-0.6,-0.69l2.72,-1.22l4.0,-4.72l0.38,-1.46l-0.17,-2.73l-0.38,-0.9l-1.51,-1.2l-3.71,-1.77l-1.54,-3.23l-0.01,-0.49l1.82,-2.02l0.07,-1.07l-0.28,-1.12l-0.75,-0.87l-3.83,-0.84l-0.98,-0.81l-0.82,-1.36l-0.42,-1.16l-0.04,-0.6l0.22,-0.63l2.4,-1.41l0.44,-1.18l-0.01,-0.89l-0.25,-0.6l-0.29,-0.22l-2.33,-0.4l-0.08,-0.15l1.34,-1.73l0.27,-3.17l1.19,-2.04l-0.08,-0.5l-1.02,-0.91l1.69,-0.51l2.92,-0.41l0.29,-0.35l0.1,-1.0l-0.21,-1.45l-2.56,-6.99l-3.15,-4.16l-1.06,-1.77l-0.64,-1.89l-1.11,-2.13l-2.34,-3.73l-2.68,-3.45l-0.31,-0.84l0.25,-1.57l2.07,-2.8l4.43,-5.2l5.01,-5.15l0.73,-3.16l-0.28,-0.7l-2.11,-1.5l-3.99,-4.03l-2.62,-3.21l-8.77,-2.94l-2.79,-6.73l0.1,-0.97l3.69,-5.53l0.35,-1.0l-0.04,-0.79l-0.49,-0.63l-0.66,-0.31l-3.36,-0.18l-0.09,-0.13l1.57,-0.44l4.49,-1.92l2.96,-0.95l0.82,-0.57l0.66,-0.76l2.3,-4.62l5.89,-1.46l2.34,-0.84l1.33,-1.04l1.09,-1.73l0.48,-2.01l-0.34,-0.97l2.29,1.18l3.2,1.25l2.48,0.12l1.09,-0.25l0.77,-0.81l0.37,-1.19l0.01,-1.2l-0.61,-2.61l1.82,0.26l5.43,1.91l1.54,-0.18l1.81,-0.72l1.58,-2.18l0.98,-0.31l1.48,0.49l0.45,-0.15l0.44,-0.61l0.04,-0.39l-0.78,-1.78l0.08,-0.38l5.05,1.88l2.44,1.53l5.02,1.3l0.69,0.55l0.05,1.01l-0.19,0.84l-0.82,0.45l-2.04,-0.09l-7.8,-1.64l-0.34,0.09l-1.16,1.0l-0.01,0.6l1.05,0.93l2.14,0.95l0.58,1.64l0.41,0.27l3.46,-0.24l3.3,0.68l1.42,-0.18l-0.88,1.41l0.08,0.55l0.89,0.44l3.73,-1.44l1.6,-0.36l0.6,0.25l0.09,0.86l-0.58,1.41l-0.09,1.2l-1.07,2.55l-1.81,0.91l-0.75,1.15l0.01,0.45l0.43,0.15l2.61,-0.7l1.48,-0.8l2.69,-3.85l0.61,-0.4l7.25,-0.07l1.62,0.24l6.91,1.78l2.04,0.17l2.33,-0.23l0.96,-0.88l0.56,-0.17l7.57,1.96l10.28,4.47l15.04,7.36l8.43,6.46l1.18,1.5l3.08,0.79l0.85,-0.48l1.46,0.4l10.12,5.95l3.45,0.31l0.41,-0.54l-0.6,-1.55l0.93,0.68l1.94,2.34l2.29,1.69l2.34,2.53l1.51,0.78l0.0,30.64l-5.15,3.01l-10.98,3.76l-8.56,1.41l-3.42,0.1l-6.69,-0.7l-3.63,-0.75l-4.48,-2.13l-4.29,-1.1l-2.98,-0.49l-5.35,-0.2l-11.6,-2.1l-1.96,-0.72l-7.29,-4.12l-0.35,-0.02l-2.86,1.15l-1.46,0.18l-0.78,-0.94l0.53,-0.72l-0.24,-0.58l-4.14,-1.18l-3.43,-0.09l-1.8,-0.99l-2.23,-0.77l-1.59,0.44l-4.38,-1.76l-1.93,-1.41l-1.89,-2.33l0.92,-1.16l-0.19,-0.68l-7.27,-1.52l-6.84,-0.2l-0.4,0.29l0.18,0.46l1.19,0.72l3.05,0.43l3.73,2.29l-0.44,1.73l0.17,0.43l3.0,1.97l2.18,1.77l0.29,0.74l1.0,0.42l3.18,0.51l0.44,1.29l-0.42,0.51l-0.05,0.43l0.67,1.15l2.55,1.07l2.94,0.78l-0.52,0.8l-1.44,0.78l-1.53,0.38l-0.3,0.36l0.24,0.4l0.93,0.34l1.98,-0.12l7.3,2.13l3.81,2.13l3.89,3.9l1.2,1.84l0.08,0.92l-0.2,0.97l-2.15,5.68l-0.9,1.1l-1.83,1.32l-0.1,0.55l3.58,5.02l1.76,3.94l0.31,1.54l0.07,2.44l0.19,0.33l1.05,0.63l-0.89,1.1l0.25,3.45l2.37,2.71l3.37,1.69l2.28,0.38l2.79,-0.66l1.95,0.87l4.57,3.12l2.06,3.28l1.09,0.86l8.27,2.02l5.37,1.99l1.05,0.1l2.82,-1.76l4.45,-1.19l1.69,-2.08l-0.15,-1.55l-1.13,-2.46l-0.48,-2.68l-1.49,-1.01l-1.45,-0.7l-4.41,0.47l-1.79,-0.09l-1.31,-0.61l-1.88,-1.7l-3.66,-4.27l-1.98,-1.45l-0.57,-0.81l-0.62,-1.12l0.06,-1.49l1.44,-0.01l1.8,-1.14l1.41,-4.09l2.0,-0.46l1.11,0.03l5.14,1.86l6.58,5.08l1.56,0.56l3.82,-0.04l0.42,0.59l1.34,0.79l7.02,1.73l7.13,3.16l2.59,-0.14l0.32,-0.2l1.02,-1.74l0.21,-0.69l2.64,-1.63l1.82,-0.27l2.7,0.62l0.38,-0.11l0.56,-0.8l0.0,400.08l-4.46,-0.79l-1.09,0.42l-1.26,1.88l-1.04,-0.64l-4.8,-4.18l-2.57,-2.84l-8.3,-6.49l-1.27,-0.57l-4.36,-0.93l-1.66,-0.71l-4.42,-4.6l-0.41,-0.1l-1.91,0.6l-1.66,-0.15l-0.97,-0.38l-1.06,-0.62l-0.72,-0.8l-0.9,-1.9l-1.27,-1.31l-3.61,-1.66l-3.84,-0.92l-0.2,-0.37l3.1,-1.0l1.03,-0.69l-0.05,-0.69l-2.45,-1.01l1.22,-0.52l1.34,0.65l1.67,1.33l1.61,0.58l0.4,-0.09l0.61,-0.57l5.08,-1.09l0.29,-0.24l0.35,-0.88l0.01,-1.14l-0.43,-0.39l-0.41,0.0l0.02,-0.79l0.7,-1.38l2.37,-2.55l1.21,-3.3l0.78,-0.55l0.38,0.25l0.1,1.27l0.32,0.31l0.41,-0.18l1.33,-2.52l1.44,-0.01l1.3,0.26l1.25,-0.18l0.24,-0.67l-2.44,-2.61l-3.22,-2.59l-1.55,0.09l-0.65,-0.3l-1.32,-2.0l-0.39,-1.18l2.35,0.25l2.55,-1.22l0.82,-0.15l3.64,0.63l0.44,-0.46l-0.18,-1.17l-0.52,-1.11l2.18,-0.86l2.35,-0.58l4.37,-1.99l1.9,-0.35l0.28,-0.2l0.29,-0.61l0.03,-0.79l-0.68,-1.65l-0.66,-1.19l-0.34,-0.21l-2.33,-0.06l-0.33,0.15l-1.2,1.53l-3.33,0.51l-0.55,-0.04l0.44,-0.37l1.36,-0.51l0.35,-0.44l0.03,-0.45l-0.41,-0.19l-2.51,0.39l-1.4,1.14l-3.14,1.23l-0.09,-0.82l0.19,-0.44l0.63,-0.48l0.26,-0.87l-0.27,-0.38l-0.79,-0.35l0.71,-1.44l0.05,-1.27l0.34,-1.2l0.91,-0.72l1.93,-0.23l1.85,-0.8l1.15,-0.93l1.32,-2.0l0.85,-0.25l6.6,0.37l4.71,-0.19l0.87,-0.89l0.05,-1.5l1.42,-3.4l0.99,-1.16l0.05,-0.83l-0.24,-0.34l-1.24,-0.38l0.56,-0.88l-0.11,-1.1l-0.64,-2.15l-1.15,-0.75l-1.32,-0.29l0.66,-2.07l0.97,-0.98l1.32,0.21l1.24,-0.24l0.46,-0.36l0.09,-0.43l-0.46,-0.76l-3.06,-1.04l-0.67,-1.1l2.56,-0.9l2.44,-2.39l0.59,-0.98l0.31,-1.08l-0.01,-1.2l-0.93,-1.24l0.0,-0.89l0.48,-1.04l-0.19,-0.6l-1.1,-0.63l-1.07,0.13l-1.03,0.38l-1.12,-0.07l-4.23,-2.7l-2.19,-0.27l-1.68,-1.96l-0.37,-0.07l-1.93,0.64l-1.31,-0.1l-3.56,-2.2l-2.76,-0.26l-2.76,-1.58l-0.96,0.15l-0.52,0.67l-0.27,1.26l-1.02,0.25l-4.44,-3.21l-1.26,-1.76l-0.43,-1.51l-2.37,-2.21l-1.25,-0.09l-2.83,1.16l-1.96,0.22l-3.11,0.85l-1.8,1.39l-1.55,-1.19l-1.78,-0.29l-0.86,0.24l-0.63,-0.41l-0.78,-1.02l-1.17,-0.8l-3.28,-0.48l-1.33,0.59l-1.5,0.96l-0.78,-0.28l-0.55,-1.12l-0.87,-0.5l-0.93,-1.27l-0.22,-1.05l0.59,-1.13l0.05,-1.0l-0.34,-0.87l-0.47,-0.59l-0.48,-1.8l-0.42,-0.83l0.2,-1.4l-0.59,-0.57l-1.49,-0.01l-0.34,-0.19l-0.8,-1.97l-0.48,-0.57l-1.35,-0.09l-3.1,0.57l-0.52,-0.04l-2.96,-1.15l-3.32,-0.13l0.6,-0.53l0.05,-0.87l-0.67,-0.61l-0.25,-0.82l-0.08,-2.4l-1.12,-1.88l3.23,-0.64l0.55,-0.61l0.0,-0.97l-3.92,-3.8l-1.29,-3.12l-1.31,-1.82l-1.47,-1.24l-1.22,-0.59l-3.98,0.16l-2.32,-0.36l-1.88,0.24l-3.42,1.53l-1.13,0.06l-3.97,-1.0l-1.1,0.01l-0.73,0.25l-0.54,0.52l-1.12,2.88l-1.96,1.03l-1.84,0.07l-2.57,-0.94l-1.02,-2.05l-1.46,-1.55l0.1,-3.66l0.23,-0.14l0.11,-0.59l-1.15,-1.49l-0.07,-0.9l0.58,-0.74l-0.03,-0.72l-0.48,-0.81l-3.5,-3.76l1.74,-2.86l3.23,-0.09l0.87,0.25l0.43,0.66l1.18,0.83l2.79,0.31l1.39,-0.07l1.52,-0.71l2.38,-1.51l0.67,-1.14l1.34,-0.7l1.62,-0.42l0.33,-0.34l0.03,-1.61l-0.47,-0.85l-2.85,-1.78l-0.46,-0.98l0.32,-0.71l-0.01,-0.73l-0.23,-0.35l-3.52,-1.68l-2.83,-0.29l-2.3,0.09l-0.42,-0.16l0.81,-2.04l0.17,-1.22l-0.27,-0.89l-0.58,-0.55l-5.18,-2.56l-1.33,-1.67l-0.7,-1.81l-0.87,-1.24l-1.36,-0.72l0.98,-1.81l-0.1,-0.74l-0.53,-0.52l-1.84,-0.88l-2.36,-1.54l0.42,-2.01l2.06,-2.77l-0.01,-0.81l-0.31,-1.06l-1.9,-2.6l0.05,-0.61l1.13,-1.47l0.02,-3.52l-0.82,-0.83l-0.91,0.05l-0.92,-0.34l-1.26,-0.82l-2.4,-2.34l-3.02,-1.11l-2.72,0.14l-1.57,-0.15l-0.75,0.25l-0.88,0.75l-0.95,0.41l-0.89,0.05l-0.74,0.35l-1.8,1.14l-0.67,-0.55l-0.67,-0.93l0.54,-1.63l-0.05,-0.93l-0.47,-0.67l-1.25,-0.56l-2.67,-1.03l-0.89,-0.04l-1.34,0.43l-1.92,1.05l-0.45,-0.15l-1.32,-1.91l-1.12,-0.71l-2.42,0.01l-1.4,0.65l-1.56,-1.4l0.66,-2.19l-0.45,-2.46l-0.89,-3.03l-1.34,-1.21l-0.23,-0.86l-1.31,-1.81l-0.13,-1.47l-0.53,-0.78l-0.98,-0.41l-1.57,0.36ZM899.6,149.08l-0.91,-2.51l-1.31,-2.3l-1.94,-1.53l-3.3,-4.18l-1.3,-2.04l-0.62,-2.02l0.83,-3.03l6.79,-3.36l1.76,-1.43l0.0,22.4ZM836.19,140.74l0.33,0.65l0.12,1.25l-0.38,0.82l0.11,0.76l-0.3,0.19l-1.12,-1.49l-0.96,-0.18l-0.66,-0.6l-0.26,-0.83l0.79,0.0l1.49,-0.81l0.85,0.25ZM617.41,357.73l1.54,-1.2l1.4,-1.73l1.16,-2.18l0.41,-3.11l1.52,-0.56l4.03,0.06l1.68,-0.82l1.35,-1.25l-0.8,0.85l0.13,0.64l1.12,0.5l1.36,0.19l1.62,0.72l1.47,0.13l2.74,-0.62l0.31,-0.33l0.62,-5.87l1.57,-0.18l0.74,0.71l1.5,0.76l4.31,1.78l2.75,0.72l6.56,0.09l0.88,1.63l1.44,0.77l1.05,0.95l0.05,0.36l-1.6,3.77l-0.37,1.44l-0.04,1.47l0.9,2.13l-34.03,-1.32l-7.35,-0.47Z\", \"name\": \"Russia\"}, \"IQ\": {\"path\": \"M899.6,732.04l-1.3,-0.59l-15.78,-2.66l1.38,-1.24l0.11,-0.44l-0.61,-1.62l-0.45,-0.25l-2.45,0.58l-0.57,-1.76l0.64,-0.19l0.27,-0.49l-3.77,-13.0l22.55,-12.68l0.0,34.33Z\", \"name\": \"Iraq\"}, \"IS\": {\"path\": \"M31.07,119.93l0.41,-0.27l0.37,-0.88l0.71,-0.26l0.9,-0.01l0.94,0.31l3.13,1.76l0.35,0.38l0.11,0.48l-0.12,0.97l0.13,0.33l0.46,0.24l1.15,-0.26l0.9,0.31l0.71,-0.08l1.28,-1.18l0.53,0.18l0.52,0.85l-0.08,2.46l0.67,0.18l0.76,-0.74l1.34,-0.06l0.35,-0.24l0.23,-0.58l0.04,-1.63l-0.12,-1.34l-0.22,-0.45l-5.08,-2.02l-1.59,-1.09l0.78,-0.38l1.36,-0.15l3.31,0.02l0.54,-0.25l0.04,-0.67l-0.81,-0.55l-1.45,-0.29l-0.34,-0.57l-0.44,-0.27l-1.8,0.29l-1.98,0.01l-1.51,-0.25l2.03,-1.36l0.62,-0.21l2.25,0.17l2.17,-0.28l1.66,0.32l3.37,2.7l2.76,1.15l4.63,3.74l2.86,1.41l-1.29,0.66l-0.13,0.64l0.46,0.4l1.39,0.34l0.89,0.81l-0.88,3.03l-0.82,0.74l-2.59,-0.53l-0.41,0.17l0.0,0.45l0.8,1.09l1.88,0.98l0.23,0.3l-0.17,0.33l0.15,0.53l0.58,0.16l0.43,-0.18l-0.35,1.33l-0.45,0.57l0.1,0.7l0.4,0.21l1.27,0.05l0.95,0.72l1.35,3.36l0.72,-0.03l0.75,-2.67l0.28,-0.71l0.75,-0.57l0.78,-2.62l1.71,-1.48l0.77,-0.43l0.63,-0.08l1.72,1.83l1.05,0.29l0.7,-0.3l0.61,-1.18l0.77,-2.27l0.17,-2.52l-0.4,-2.63l0.22,-1.76l0.73,-0.96l0.91,-0.28l1.25,0.39l0.94,0.63l2.01,2.62l3.17,2.98l0.89,0.55l1.58,0.24l0.6,-0.25l0.32,-0.5l0.13,-0.71l-0.3,-3.74l0.35,-1.06l0.47,-0.67l2.45,-0.49l1.46,-0.57l1.32,-0.85l1.02,-0.43l0.74,-0.05l0.79,0.29l0.9,0.69l1.47,1.41l1.88,2.38l2.41,1.8l1.51,3.25l0.57,0.25l0.7,-0.5l0.27,-0.64l0.06,-1.56l-0.69,-1.71l-2.22,-4.14l0.12,-0.95l1.31,-0.06l3.59,0.38l1.06,0.59l2.5,2.56l1.27,0.86l2.2,-1.44l3.52,-3.91l0.88,0.12l1.88,1.21l1.36,0.43l1.36,-0.19l1.64,-0.88l1.85,-0.54l0.89,-1.48l0.16,-0.68l-1.46,-3.81l0.41,-0.5l3.14,-0.9l2.77,-0.07l0.53,0.2l3.52,3.35l0.29,1.8l0.83,0.66l1.57,0.72l1.69,0.07l2.54,-0.77l1.17,-0.56l2.56,-1.73l1.42,-0.45l1.92,0.1l-1.26,0.29l-1.68,1.06l-1.69,2.48l-1.27,1.44l0.2,0.85l1.53,0.97l1.58,0.53l1.58,-0.44l0.4,0.12l0.46,0.56l0.33,1.12l-0.24,1.28l-0.81,1.31l-1.14,1.15l-0.08,0.45l0.17,0.37l0.29,0.23l1.09,0.19l4.66,-0.73l0.41,1.5l0.38,0.52l-0.07,0.28l-1.88,1.77l-0.05,0.52l0.51,0.13l2.27,-1.14l1.71,-0.31l3.01,0.56l1.14,0.59l0.69,1.09l0.47,0.16l1.26,-0.35l0.48,0.46l0.02,0.45l-0.47,0.93l-0.19,0.89l-1.5,0.63l-0.29,0.32l-0.05,0.48l1.16,1.48l1.0,0.19l-0.24,0.7l-1.16,0.7l0.08,0.68l2.27,1.05l0.19,0.64l-0.48,1.12l-0.53,0.32l-1.6,0.07l-1.19,0.49l-0.2,0.53l0.32,0.68l-0.02,0.83l-0.28,1.02l-1.26,1.62l-1.18,0.86l-1.1,0.53l-2.03,-0.19l-1.14,-0.44l-0.54,0.41l0.11,1.26l-1.04,0.78l-0.14,0.44l0.23,0.76l0.37,0.41l-0.15,0.69l-0.53,0.88l-0.9,0.98l-1.02,0.6l-2.25,0.82l-1.83,1.28l-1.16,0.47l-3.2,-0.01l-3.29,0.86l-4.61,1.78l-3.14,1.45l-2.41,1.63l-3.11,2.58l-2.25,1.06l-3.96,0.53l-2.17,0.7l-7.28,1.32l-2.51,0.73l-1.63,1.96l-0.06,0.36l0.49,0.61l-0.73,0.94l-1.63,0.77l-0.64,-0.01l-0.93,-0.66l-0.7,-0.05l-0.55,0.49l0.36,0.92l-5.26,1.22l-8.0,-0.75l-7.17,-2.03l-2.4,-0.34l-3.23,-0.08l-2.63,-1.67l-1.15,-0.98l0.22,-0.77l1.09,-0.13l0.43,-0.31l-0.0,-0.49l-0.69,-0.87l-0.47,-0.12l-2.39,1.47l-0.55,-0.03l-0.77,-0.45l-0.03,-0.38l-0.35,-0.37l-1.96,-0.22l-1.67,-0.71l-1.64,-1.01l0.52,-0.39l0.0,-0.65l-0.33,-0.19l-0.75,-0.1l-1.27,0.2l-2.05,1.39l-0.72,0.27l-12.47,0.31l-3.6,0.27l-0.35,-0.56l-0.64,-3.09l0.36,-0.95l0.82,0.55l0.68,0.93l0.97,0.46l4.37,-1.03l1.83,-0.71l0.87,-0.73l0.9,-1.12l0.98,-0.63l1.93,-3.05l1.4,-0.87l1.88,-0.27l0.34,-0.36l-0.28,-0.41l-1.27,-0.41l-1.34,-0.02l-4.22,1.83l-0.51,0.0l1.48,-0.95l0.18,-0.44l-0.36,-0.3l-0.82,-0.06l-0.17,-0.18l-0.03,-0.6l0.62,-1.17l3.21,-1.73l1.31,-0.36l0.35,-0.36l-0.06,-0.61l-0.57,-0.35l-0.99,-0.14l-3.34,1.84l-2.33,0.61l-0.58,-0.1l-1.19,-0.67l-0.77,-0.91l1.13,-1.61l0.02,-0.47l-0.19,-0.28l-0.99,-0.3l-2.11,-1.31l-3.64,0.07l-8.59,-0.77l-1.83,0.35l-2.86,1.14l-1.62,0.35l-0.63,-0.2l-0.64,-0.54l-1.11,-1.62l0.13,-0.38l1.65,-0.51l2.39,0.23l2.79,-0.72l2.34,-0.27l1.5,-0.94l1.31,0.76l2.88,-0.83l0.97,-0.41l0.45,-0.48l1.23,0.38l1.26,0.03l1.48,-0.31l8.37,-0.29l0.85,-0.67l0.53,-0.78l0.5,-1.5l-0.28,-0.67l-0.47,-0.14l-3.45,1.35l-4.68,-0.73l-1.02,-0.58l2.26,-1.62l2.19,-1.13l3.34,-1.27l0.77,-0.48l0.26,-0.86l-0.23,-0.42l-2.19,-1.02l-4.15,0.23l-1.15,-1.19l-3.44,-0.72l-2.3,0.42l-1.42,-0.69l-2.96,1.01l-6.52,1.47l-3.87,1.32l-1.54,-0.79l-2.78,-0.94l-3.0,-0.29l1.48,-1.5l1.08,-0.27l1.12,0.14l2.43,1.18l1.66,0.37l0.45,-0.21l-0.1,-0.48l-1.92,-1.6l-0.12,-1.55l-0.74,-0.65l-0.44,-0.83l0.57,-0.09l1.55,0.35l4.18,1.93l1.95,-0.34l1.18,-0.74l1.42,-0.51l0.08,-0.71l-0.41,-0.27l-3.61,-0.1l-1.73,-0.37l-0.81,-0.49l-0.57,-0.68l0.81,-0.36l2.86,0.1l0.39,-0.25l-0.11,-0.45l-3.2,-2.57l-0.08,-0.24l0.21,-0.7l3.27,0.93l0.74,0.04l0.39,-0.24l-0.1,-0.45l-0.68,-0.63l-1.26,-0.8Z\", \"name\": \"Iceland\"}, \"AL\": {\"path\": \"M613.48,601.02l0.69,0.32l0.52,-0.17l0.25,-0.48l-0.24,-1.33l-1.29,-2.46l-0.07,-0.51l0.6,-1.93l1.08,-2.45l-0.07,-2.75l0.32,-2.07l-0.52,-3.06l0.7,-2.05l0.66,-0.59l0.41,-0.71l0.08,-2.58l-0.16,-0.32l-1.48,-1.12l-1.53,-0.24l0.21,-3.06l-0.41,-0.98l-0.56,-0.62l1.45,-2.47l1.94,-2.42l1.45,-2.18l0.37,-0.18l0.14,1.73l0.35,0.61l0.46,0.34l1.33,-0.11l2.5,-1.0l0.4,0.28l1.06,1.54l0.73,1.4l1.64,0.67l0.76,0.51l0.98,0.79l0.44,0.74l0.69,2.49l0.08,1.45l-1.02,3.38l0.14,2.01l-0.48,0.33l-0.42,0.87l0.57,2.03l-0.01,2.05l1.13,2.44l1.16,1.07l0.79,2.19l0.74,0.47l1.68,-0.2l0.64,0.18l0.26,0.54l-0.07,1.35l0.98,1.82l-0.0,0.39l-0.97,1.82l-2.03,0.9l-1.22,2.51l-0.81,2.73l-0.5,0.4l-1.88,0.25l-0.78,0.29l-0.48,0.6l-0.87,0.53l-0.22,0.36l0.04,0.62l0.92,1.95l-0.59,-0.06l-0.36,0.16l-0.49,1.55l-0.64,0.55l-0.79,-0.1l-1.52,-0.78l-0.08,-1.2l-0.42,-1.14l-1.56,-2.8l-5.09,-2.79l-1.09,-1.11l-0.61,-1.18Z\", \"name\": \"Albania\"}, \"IT\": {\"path\": \"M460.72,503.99l1.78,-1.15l0.96,-1.1l0.84,-0.61l0.38,-0.01l0.0,2.36l0.39,0.92l2.52,2.32l2.27,0.58l-0.51,0.84l0.07,0.5l1.37,1.23l0.36,1.05l1.03,0.61l0.95,-0.26l0.54,-0.68l0.03,-0.36l-0.61,-1.7l0.04,-0.4l0.84,-1.33l1.79,-1.97l0.7,-1.22l0.17,-3.17l0.27,-0.16l1.28,0.23l0.68,1.99l0.92,0.97l1.6,0.19l2.15,-0.87l1.21,-0.34l0.5,0.07l1.26,1.94l0.98,0.35l0.85,-0.3l0.3,-0.66l-0.49,-1.87l-0.93,-1.88l0.56,-1.7l1.03,-0.25l1.08,0.92l1.23,0.3l1.03,-0.04l0.36,-0.29l0.12,-1.32l-0.53,-0.86l0.59,-2.76l2.77,0.16l0.85,0.81l1.18,0.42l2.32,-0.03l0.73,-0.56l1.38,-2.23l1.33,-0.6l3.78,-0.37l3.34,0.19l5.15,-1.58l-0.68,0.99l0.28,1.2l3.4,4.2l1.31,0.54l9.36,1.7l4.39,0.3l2.39,0.51l-0.11,0.38l-1.47,0.78l-2.25,1.68l-0.42,1.14l0.31,0.91l0.41,0.37l1.07,-0.01l1.62,0.59l-1.85,1.75l-0.19,0.73l0.11,0.54l0.43,0.44l1.22,0.01l-0.54,1.93l0.36,0.78l-0.38,0.09l-1.1,0.89l-3.31,-0.98l-0.32,0.04l-0.67,0.42l-0.59,0.9l-1.1,0.92l-1.64,0.43l-2.0,1.15l-3.31,1.29l0.7,-0.64l0.1,-0.43l-0.36,-0.26l-0.79,0.02l-1.93,0.95l-1.23,1.0l-0.67,3.49l0.17,0.39l0.74,0.51l1.39,2.73l1.66,1.19l-0.66,1.62l-0.77,0.56l-0.89,-0.5l-0.55,0.02l-0.38,0.31l-0.41,1.84l0.76,5.04l1.32,3.62l1.28,1.54l2.77,2.32l2.99,1.26l5.23,3.87l2.91,1.25l0.66,0.58l1.71,2.92l1.49,3.41l1.62,5.38l1.23,2.79l2.39,3.05l4.89,4.31l4.41,3.13l4.29,2.0l3.27,0.34l7.54,-0.42l1.24,0.17l1.16,0.43l0.24,0.98l-0.38,0.67l-1.55,0.92l-1.63,1.3l-0.33,2.04l0.14,0.35l1.61,1.3l7.32,3.29l7.47,2.74l2.27,1.37l2.76,2.21l6.43,2.94l1.11,1.44l3.92,3.08l1.71,2.29l0.3,1.65l-1.72,4.11l-1.31,-0.39l-1.79,-1.26l-2.84,-5.41l-0.31,-0.21l-5.22,-0.55l-1.02,-0.38l-1.67,-0.84l-0.59,-1.34l-0.79,-0.46l-2.02,-0.17l-1.65,0.95l-1.77,2.24l-1.89,3.09l-1.89,4.44l-0.14,1.92l1.31,2.14l3.02,0.95l2.29,1.49l1.42,1.46l0.11,3.72l0.65,2.1l-0.75,0.9l-1.95,-0.28l-2.66,0.79l-2.01,1.48l-0.94,1.69l0.2,3.43l-0.33,1.13l-3.55,2.53l-1.88,2.57l-1.09,2.11l-4.07,0.04l-0.87,-1.22l-0.03,-1.99l0.65,-1.15l1.75,-0.82l1.12,-2.85l-0.3,-2.11l0.54,-0.76l0.52,-0.55l2.91,-0.7l0.32,-0.37l0.18,-2.88l-0.12,-0.32l-1.31,-1.23l-1.14,-5.21l-2.28,-4.31l-1.22,-3.85l-0.99,-1.98l-1.82,-1.22l-2.59,0.01l-1.2,-0.26l-4.54,-2.64l-0.19,-0.24l0.02,-0.45l0.7,-0.99l0.05,-0.36l-1.08,-2.88l-1.08,-1.38l-1.28,-0.67l-2.82,0.66l-1.23,-0.09l-0.59,0.23l0.89,-1.13l-0.02,-0.51l-0.44,-0.49l-1.89,-0.99l-2.76,-0.23l-0.43,0.22l-0.03,-0.73l-2.55,-4.19l-1.92,-1.88l-1.09,-0.32l-1.46,0.34l-2.52,-0.72l-1.63,-0.18l-2.16,0.68l-0.35,-0.2l-0.31,-0.6l-2.37,-1.75l-2.99,-1.02l-5.69,-5.49l-1.76,-2.07l-3.66,-2.33l-2.37,-3.39l-1.97,-1.27l-2.74,-0.99l-2.14,0.48l0.62,-0.27l0.26,-0.45l-0.33,-1.49l-3.12,-3.34l-1.85,-1.11l-1.41,-2.23l-0.87,-0.34l-1.5,-0.12l0.22,-2.46l-0.17,-1.25l-0.99,-2.76l-1.72,-2.37l-1.03,-5.63l-0.93,-1.74l-1.9,-1.2l-4.34,-1.38l-5.95,-3.6l-1.39,-0.12l-3.64,-1.41l-2.23,-0.24l-3.23,1.38l-3.52,3.49l-2.85,3.6l-0.94,0.63l-3.61,1.2l-2.78,0.5l-0.11,-1.05l2.2,-2.66l0.39,-0.9l-0.55,-1.68l-0.32,-0.23l-0.64,-0.05l-3.01,0.66l-0.58,-0.14l-4.66,-2.31l-0.81,-0.82l-0.26,-0.71l0.2,-0.75l-0.61,-1.26l1.42,-2.43l0.7,-0.31l0.31,-0.46l-0.46,-2.18l-0.92,-0.78l-1.88,-0.41l-0.68,-0.51l-0.19,-0.83l-0.45,-0.83l-0.74,-0.76l-0.05,-0.42l0.54,-0.27l2.17,0.07l1.81,-1.29l1.33,-0.43l1.23,-2.96l-0.1,-0.39l-1.86,-1.65l-0.69,-1.33l-1.1,-1.51l-1.02,-0.7l-0.15,-0.86l0.13,-0.36l1.7,-0.84l0.93,-0.81l1.53,0.64l2.74,-0.55l2.8,-1.08l3.49,0.9l2.81,-1.61l1.89,-2.55l0.07,-0.89l-0.5,-0.93ZM518.47,542.68l-0.02,0.45l0.4,0.67l0.4,0.19l0.8,-0.12l0.3,-0.23l0.42,-1.12l-0.15,-0.61l-0.45,-0.3l-1.11,0.28l-0.6,0.79ZM536.34,512.54l1.58,1.41l0.32,0.86l-0.4,0.08l0.05,-0.55l-1.56,-1.8ZM561.64,634.95l-1.42,2.54l-3.32,4.46l-0.94,3.04l-0.89,2.07l0.22,2.17l1.35,1.25l-0.42,0.3l-0.08,0.57l1.5,1.71l0.07,0.48l-0.01,0.44l-2.03,1.93l-0.54,1.75l0.13,1.17l-1.05,-0.07l-1.49,-0.45l-1.61,0.18l-3.5,-1.28l-1.85,-2.71l-1.47,-1.15l-1.62,-0.93l-3.36,-0.01l-1.3,-0.5l-2.86,-1.83l-3.08,-1.49l-2.59,-2.04l-1.81,-0.46l-1.7,-1.03l-2.3,0.05l-1.38,-0.37l-1.44,-1.1l-1.12,-2.08l1.41,-3.4l1.55,-0.85l0.7,-0.8l1.24,1.47l1.07,0.59l0.85,-0.14l1.27,-0.67l0.29,-0.86l1.15,-0.77l1.62,-0.02l0.59,0.12l0.56,0.87l1.47,0.38l2.51,1.57l1.64,0.37l2.13,-0.69l1.45,-0.24l3.17,0.37l1.84,-0.4l1.18,-0.04l1.89,-0.65l1.42,-1.06l0.61,-0.22l4.5,0.21l0.95,-0.35l0.59,-0.62l0.55,-0.22l0.99,0.14l2.07,-1.12l1.04,0.08l-0.37,0.35ZM539.33,595.34l-0.19,0.04l-0.15,-0.08l0.02,-0.06l0.31,0.09ZM512.96,657.33l0.48,0.16l0.18,0.38l-0.64,-0.31l-0.02,-0.23ZM491.6,561.34l0.11,0.25l-0.27,0.63l-0.71,-0.33l-1.66,0.38l-0.75,-0.06l-0.12,-0.3l2.0,-0.33l0.9,0.09l0.5,-0.33ZM462.39,592.89l0.87,0.72l2.19,0.38l1.61,-0.28l1.72,-0.73l1.8,-0.98l2.33,-2.52l1.52,-0.57l0.76,-0.68l0.32,-0.92l0.17,-0.07l0.83,0.82l0.84,0.09l1.28,0.67l1.05,1.45l0.73,0.55l-0.54,1.02l0.07,0.46l1.06,0.81l0.61,0.92l1.5,4.14l0.13,0.78l-0.26,0.8l-1.93,2.99l0.22,1.75l0.56,1.14l0.07,1.06l-1.21,10.52l-0.69,2.78l-0.7,0.28l-2.83,-1.16l-0.97,0.01l-0.75,0.24l-1.03,-0.57l-0.63,0.27l-0.45,3.03l-0.67,1.12l-0.99,0.69l-0.92,0.04l-1.97,-0.27l-0.55,-0.46l-2.33,-3.7l-0.25,-4.19l0.64,-1.31l0.19,-1.35l-0.1,-1.03l0.53,0.16l0.4,-0.16l0.25,-0.39l0.1,-1.66l-0.78,-1.22l-1.15,-0.39l0.02,-1.42l0.64,-0.73l0.21,-0.85l0.02,-2.69l-0.87,-1.15l-0.3,-1.35l-0.52,-1.1l-2.13,-2.32l-0.11,-1.75l0.39,-1.75ZM464.42,621.63l0.71,0.35l-0.34,0.68l-0.36,-0.48l-0.02,-0.54ZM462.96,589.81l0.1,-0.19l0.15,-0.08l-0.06,0.11l-0.19,0.16Z\", \"name\": \"Italy\"}, \"GG\": {\"path\": \"M315.47,448.51l0.52,-0.25l-0.15,0.36l-0.37,-0.12Z\", \"name\": \"Guernsey\"}, \"CZ\": {\"path\": \"M515.02,433.92l1.19,1.02l0.6,1.08l0.65,0.07l1.12,-1.65l1.21,-1.29l1.17,-0.7l2.1,-0.28l0.78,-0.37l2.52,0.38l0.49,-0.33l0.61,-1.16l2.02,-0.32l0.92,-1.17l0.85,-0.2l0.76,-0.56l0.75,0.3l0.81,-0.32l0.83,-1.4l0.23,-0.12l1.96,-0.22l2.67,-0.8l4.14,-1.8l2.24,-0.66l0.37,-0.51l-0.15,-0.48l-1.0,-0.66l-0.39,-0.55l0.14,-0.19l2.98,0.56l0.21,0.67l0.75,0.81l-0.09,0.68l0.17,0.38l0.69,0.46l1.07,0.34l0.83,-0.18l0.54,-0.62l1.07,-0.06l1.18,-0.45l0.25,-0.32l0.04,-1.87l2.95,0.83l0.28,1.28l1.19,1.4l0.71,0.32l0.89,0.04l2.39,0.79l1.19,0.17l2.13,1.08l0.68,0.13l0.78,0.97l0.42,0.08l0.76,-0.31l2.74,-0.43l0.9,0.52l0.57,0.52l-0.42,0.79l-1.24,0.53l-0.57,0.5l-0.47,0.61l-0.03,0.43l0.46,0.7l1.33,0.49l2.03,2.0l1.45,2.2l0.85,0.53l0.79,0.04l0.72,-0.4l0.69,-0.69l2.79,-1.37l0.22,-0.31l-0.02,-0.68l-1.44,-2.28l3.1,0.77l3.73,2.23l1.99,-0.18l1.8,-0.62l0.13,0.75l-0.22,0.41l-1.49,0.59l-0.24,0.49l0.62,0.9l0.8,0.34l2.0,2.05l0.71,0.26l1.73,-0.47l0.64,-0.55l0.67,0.66l1.38,0.48l1.35,0.89l0.83,-0.21l2.07,0.44l0.44,0.29l0.05,0.96l0.35,1.06l2.9,2.63l0.27,1.24l-0.78,0.26l-2.19,0.09l-2.55,1.84l-0.7,0.94l-2.65,1.33l-0.88,1.57l-0.32,1.96l-0.32,0.34l-1.86,0.68l-0.38,0.57l-1.71,1.36l-1.71,0.77l-1.83,0.23l-3.9,-0.57l-0.98,0.38l-1.15,1.21l-1.28,2.46l-0.71,-1.3l-2.27,-0.52l-2.33,-1.09l-1.21,-0.03l-1.45,1.01l-3.92,-0.26l-3.07,-1.87l-1.85,0.01l-3.92,-1.65l-1.33,-0.32l-1.92,0.46l-0.31,-0.35l-0.99,-0.5l-1.15,-0.1l-0.71,0.65l-0.56,3.35l-1.36,0.07l-1.6,1.82l-0.23,1.07l-2.5,-0.4l-0.95,0.24l-0.75,0.61l-2.23,-0.04l-1.69,-0.37l-0.86,-1.54l-2.34,-1.31l-0.59,-0.81l-3.04,-2.53l-1.58,-0.02l-0.34,-0.24l-0.83,-1.41l-0.74,-0.71l-0.92,-0.32l-1.09,-0.75l-1.55,-1.75l-1.49,-1.28l-1.53,-0.08l-1.63,-1.37l-0.62,-0.77l-1.79,-3.14l-1.35,-1.5l1.34,-1.87l0.24,-0.61l-0.08,-0.55l-0.82,-1.14l-2.46,-1.54l-0.83,-0.87l-0.4,-1.25l-0.7,-0.82l-0.44,-1.1Z\", \"name\": \"Czech Republic\"}, \"CY\": {\"path\": \"M794.04,683.04l0.24,0.41l0.92,0.48l1.16,0.41l0.8,0.05l3.69,-1.29l0.77,0.23l1.78,-0.07l0.67,0.66l0.1,1.37l0.4,0.41l0.42,-0.07l0.53,-0.46l2.08,0.26l1.62,-0.48l0.92,-0.61l1.06,0.48l0.57,-0.04l0.2,0.42l-2.51,0.25l-1.71,-0.06l-2.73,2.59l-1.27,0.8l-1.53,0.49l-2.52,0.36l-0.72,0.32l-0.65,0.68l-0.17,0.87l-0.38,-0.04l-0.44,-0.88l-0.64,-0.39l-2.5,0.12l-3.11,-1.14l-1.67,-3.23l-0.14,-1.25l0.94,0.23l1.22,-0.68l1.03,-0.95l1.12,-0.35l0.47,0.1Z\", \"name\": \"Cyprus\"}, \"GB\": {\"path\": \"M268.15,314.94l0.76,-0.51l2.22,-0.36l1.99,-1.42l-0.04,-0.68l-1.33,-0.72l1.39,-0.78l1.97,-2.75l0.47,-2.7l-1.51,-2.4l-1.71,-0.79l-0.23,-0.82l0.15,-0.42l0.5,-0.5l2.26,-0.88l0.28,-0.37l-0.26,-0.39l-1.22,-0.45l-0.39,-0.45l-0.34,-1.05l0.65,-2.06l1.01,-1.76l3.3,0.06l0.77,-0.52l1.74,0.44l0.45,-0.58l-0.35,-0.6l-3.02,-2.91l0.78,-1.43l0.07,-1.57l0.7,-0.19l2.79,0.02l0.84,-0.27l0.23,-0.54l-0.97,-1.62l-0.1,-0.61l0.29,-2.53l0.57,-0.77l0.99,-0.34l1.4,0.28l0.47,0.29l0.64,0.82l0.37,0.15l0.63,-0.11l2.18,-1.0l0.64,0.89l0.43,0.15l3.29,-0.87l4.43,-0.39l2.7,-0.58l2.8,-0.21l2.64,-0.65l2.45,0.26l-0.8,1.82l-0.05,2.13l-1.24,1.58l-2.68,1.6l-4.92,3.69l-3.05,1.99l-0.43,0.98l-0.22,1.22l0.34,0.47l1.91,0.38l-2.81,2.5l-0.76,1.94l0.39,0.55l1.98,-0.07l1.71,-0.38l6.29,-2.1l1.36,-0.04l3.54,0.74l1.29,-0.33l1.17,-0.06l8.29,0.22l2.29,-0.41l1.34,0.44l1.17,1.15l1.11,2.32l-0.65,0.94l-1.38,1.36l-1.17,1.82l-0.97,3.09l-2.28,4.57l-2.22,2.52l-1.04,1.85l-1.19,1.38l-1.13,0.86l-1.19,0.56l-3.73,0.67l-2.27,1.26l-1.24,0.38l-0.28,0.45l0.41,0.33l1.52,-0.05l1.56,-0.45l2.59,-0.15l2.77,1.34l-0.19,0.79l-1.06,0.82l-2.98,0.24l-2.66,2.16l-1.14,0.63l-1.17,0.3l-1.51,-0.09l-2.84,-0.57l-1.23,-0.59l-0.51,0.14l0.07,0.52l1.15,1.0l1.42,0.59l7.67,1.25l0.71,-0.17l2.33,-1.25l3.05,-0.02l5.98,2.32l4.24,4.35l2.33,1.89l0.57,1.27l2.55,8.93l1.78,4.76l0.84,1.39l1.25,1.09l5.33,2.11l1.12,0.66l4.06,4.18l1.87,1.66l1.58,1.06l-0.61,0.48l-0.71,1.43l0.53,1.56l3.18,5.0l-1.41,-0.05l-2.86,-1.74l-2.54,0.37l-2.7,-0.14l-0.39,0.36l0.31,0.43l2.37,0.55l2.55,0.05l5.58,4.04l1.86,2.36l1.07,3.0l-0.66,1.22l-2.32,1.99l-1.09,1.24l0.11,0.61l3.4,1.83l1.62,-0.4l2.3,-2.51l1.81,-0.17l3.23,0.43l1.5,-0.09l2.84,0.61l1.43,0.54l3.61,2.48l0.73,1.27l0.35,1.71l0.04,1.89l-1.31,3.37l-0.74,2.85l-2.29,2.13l-1.08,0.57l-0.58,-0.25l-0.59,0.04l-0.37,0.34l0.01,0.7l0.55,0.75l0.0,0.68l-0.93,0.61l-1.03,0.28l-2.15,-0.35l-2.75,1.41l0.04,0.73l1.83,0.67l0.25,0.48l-0.38,1.04l-1.05,0.51l-2.77,0.33l-1.17,0.33l-1.21,0.68l-0.17,0.49l0.47,0.24l1.3,-0.31l0.72,0.22l0.53,0.99l0.71,0.48l2.88,0.54l5.07,-0.27l1.73,0.09l-0.22,2.81l-0.29,0.32l-4.28,1.91l-1.06,1.5l-0.21,0.62l-2.49,-0.05l-1.14,0.82l-2.03,0.57l-3.14,1.37l-1.16,0.21l-5.55,-0.91l-3.41,0.08l-4.48,0.79l-1.05,-0.12l-3.54,-1.28l-2.08,-0.23l-1.73,-0.69l-0.47,0.14l0.01,0.49l0.8,0.98l-1.99,1.06l-4.61,0.55l-2.19,-0.18l-0.41,0.53l0.75,1.52l-0.44,0.12l-4.2,-0.6l-0.74,0.12l-0.59,0.52l-1.26,-0.25l-1.51,-0.95l-1.68,-0.66l-1.68,-0.3l-1.51,0.11l-5.71,1.65l-1.16,1.64l-0.54,2.11l-0.76,1.8l-1.15,1.29l-1.24,0.15l-1.4,-0.96l-2.7,-1.09l-0.89,-0.71l-0.49,-0.13l-1.51,0.61l-2.85,0.32l-3.11,0.94l-3.9,2.36l-0.62,0.57l-0.86,1.54l-1.08,0.22l-1.33,-1.05l-1.51,-0.38l-1.78,0.37l-0.8,0.46l-0.13,-0.77l0.97,-0.96l3.15,-0.92l2.75,-2.3l1.87,-2.16l0.53,-0.4l1.04,-0.38l0.41,-0.8l3.82,-3.57l0.34,-0.89l0.44,-2.54l3.09,-1.03l1.42,-2.79l4.41,-0.65l3.12,0.04l3.18,0.57l1.68,0.05l1.79,-0.25l1.38,-0.88l2.17,-2.81l3.94,-3.66l2.13,-2.39l0.01,-0.52l-0.51,-0.1l-1.44,0.82l-2.73,2.04l-3.23,0.78l-4.11,2.62l-3.45,-0.4l-2.63,-2.2l-1.94,-1.02l-0.92,-0.09l-2.22,0.53l-0.78,-0.02l0.28,-0.36l1.05,-0.55l0.21,-0.42l-0.33,-0.33l-2.46,-0.4l-1.59,-1.07l-1.97,-0.13l-1.04,0.2l-1.69,1.01l-2.31,0.96l-2.79,-1.33l-0.43,-0.46l-0.02,-1.23l-0.45,-0.97l-0.54,-0.33l0.67,-0.79l1.19,-0.78l2.84,-0.84l4.29,-1.97l2.4,-0.84l2.33,-1.5l1.06,-1.03l1.34,-2.7l0.92,-1.18l-0.2,-0.63l-0.75,-0.24l-0.29,-0.65l0.5,-1.84l-1.03,-2.09l0.21,-1.57l-0.4,-0.48l-3.51,0.34l-3.15,1.52l-0.81,0.1l0.49,-0.83l3.19,-2.29l1.04,-1.67l0.73,-0.65l2.07,-1.33l4.53,-1.59l1.66,0.17l1.58,-0.23l1.42,-0.56l1.2,-0.1l3.0,1.55l0.45,-0.06l0.11,-0.44l-0.79,-2.12l0.75,-0.33l1.97,2.14l0.94,0.25l1.56,-0.32l0.31,-0.32l-0.18,-0.41l-0.6,-0.38l-1.62,-0.37l-0.67,-0.62l-1.2,-2.13l0.06,-1.14l1.75,-2.6l-0.2,-0.62l-1.2,-0.59l-0.15,-1.07l0.2,-0.91l1.75,-1.15l0.53,-1.62l0.19,-1.89l-0.29,-0.78l-0.41,-0.26l-1.82,0.15l-1.55,0.79l-0.49,-0.02l-1.98,-1.77l-3.27,-4.34l-0.27,-1.6l1.65,-3.73l2.54,-2.39l3.05,-0.85l0.29,-0.39l-0.29,-0.39l-0.71,-0.18l-4.79,-0.03l-1.66,0.32l-1.58,1.06l-1.72,0.45l-2.24,1.6l-2.19,0.01l-1.01,-1.05l-0.84,-0.18l-3.47,1.62l-3.9,-1.59l-0.43,0.06l-0.55,0.51l-0.51,1.0l-0.21,1.0l-1.09,-0.89l-1.34,-1.73l-0.42,-1.02l-0.03,-0.98l0.37,-0.24l0.61,0.34l0.56,-0.2l1.22,-3.01l3.27,-5.08l0.68,-1.8l-0.1,-1.0l-0.6,-1.02l-2.21,-1.89l0.26,-3.02l0.63,-1.0l2.88,0.03l0.39,-0.31l-0.22,-0.45l-1.15,-0.53l-2.13,-1.45l0.55,-1.71l-0.12,-0.45l-0.46,-0.04l-0.88,0.94l-0.94,1.61l-0.45,0.3l-1.59,0.38l-0.28,0.25l-0.26,0.71l-1.04,0.34l-0.02,-1.11l0.3,-1.14l0.57,-0.88l2.4,-2.2l0.05,-0.53l-0.52,-0.11l-1.23,0.72l-2.72,2.09l-1.84,1.98l-0.11,1.04l0.6,2.29l-0.16,0.98l-2.29,7.16l-0.67,0.9l-1.14,-0.06l-0.3,-0.32l0.0,-0.41l1.15,-4.26l0.39,-0.89l1.93,-2.38l0.08,-0.39l-0.54,-0.36l-0.8,0.27l-0.24,-0.14l0.17,-4.38l0.74,-1.58l0.27,-2.18l1.9,-4.94l0.89,-0.94l0.21,-1.12l1.66,-2.66l-0.05,-0.45l-0.43,-0.12l-0.51,0.2l-4.68,3.56l-1.06,0.58l-1.47,-0.16l-1.13,-0.36l-0.82,-0.71l-0.4,-1.51l-0.37,-0.3l-1.52,-0.14ZM339.59,233.48l0.13,0.14l-0.7,2.04l-0.53,-0.03l-0.18,-0.83l0.12,-0.91l0.74,-0.02l0.42,-0.4ZM336.19,239.14l-0.93,-1.46l0.79,-1.93l0.63,0.04l0.08,0.26l-0.75,0.66l0.18,2.42ZM329.81,239.86l0.8,-0.37l1.06,-1.32l0.87,-0.15l-0.06,1.13l0.28,1.44l0.58,0.28l0.4,-0.21l0.85,1.11l0.32,0.16l0.92,-0.16l-1.6,5.89l-0.26,2.06l-0.62,0.77l-0.43,1.4l-0.23,-0.2l1.02,-3.91l-0.25,-1.08l-0.43,-0.71l-0.33,-0.19l-1.17,-0.02l-0.79,0.24l-0.04,-0.52l-0.39,-0.48l-1.48,-0.05l-0.32,-0.39l0.78,-0.21l1.26,0.07l1.63,-0.82l0.19,-0.49l-1.02,-2.77l-0.3,-0.25l-1.22,-0.24ZM330.39,426.85l1.55,-0.47l0.95,-0.66l2.03,0.61l0.51,0.38l-0.75,0.49l-0.48,0.83l-0.59,0.15l-0.6,0.0l-2.6,-1.33ZM315.95,265.12l-0.68,0.01l0.29,-0.44l0.72,-0.23l0.87,0.07l-1.2,0.59ZM309.8,263.74l0.37,-0.11l1.34,1.02l-1.51,-0.67l-0.2,-0.25ZM312.25,265.65l1.03,0.29l-0.03,0.18l-0.75,0.32l-0.18,-0.15l-0.06,-0.64ZM308.85,269.28l-0.26,0.62l0.38,0.54l0.97,-0.01l2.32,0.46l0.39,0.27l-0.24,0.56l-0.56,0.19l-1.93,-0.96l-2.24,0.39l-0.45,-0.22l-0.26,-1.2l-0.58,-0.1l-0.7,0.53l-0.1,-0.1l0.01,-1.32l0.41,-1.09l0.57,-0.18l1.09,0.13l1.3,0.68l0.27,0.34l-0.41,0.45ZM310.59,274.73l-0.03,-0.02l-0.47,-0.75l0.7,-0.11l-0.21,0.88ZM306.77,274.1l-0.45,-0.01l-1.04,-1.0l-0.33,-0.85l1.05,0.14l0.78,1.72ZM293.4,379.3l0.66,0.42l0.9,0.03l-3.55,2.22l-0.41,-0.54l-0.84,-0.13l-0.91,-1.28l-0.16,-1.93l1.09,-0.46l1.73,0.03l1.49,1.64ZM281.03,338.84l-1.32,0.01l-1.07,-0.49l-0.75,-2.35l0.24,-0.74l0.54,-0.62l0.65,-0.11l0.96,0.74l0.71,1.66l0.05,1.88ZM243.78,353.56l1.04,-0.15l1.03,0.12l2.55,-1.09l1.48,-2.17l0.71,-2.43l0.24,-0.34l1.78,-1.01l0.58,0.54l1.34,0.1l1.08,-0.74l1.04,-1.76l1.47,0.06l1.71,-0.24l3.04,-0.9l1.25,-0.01l1.86,0.46l1.35,0.0l1.09,1.18l0.71,2.2l1.58,2.14l2.0,1.81l0.06,0.77l-2.05,1.18l-0.22,0.36l0.01,0.81l0.55,0.37l1.78,-0.56l1.9,0.16l0.59,0.65l0.71,2.04l-0.07,0.41l-0.62,-0.99l-1.5,-0.75l-0.51,0.48l0.32,1.28l-0.13,1.73l0.21,0.38l0.95,0.23l-0.41,1.14l-3.01,0.79l-1.46,2.65l-0.91,0.58l-1.17,-0.12l-1.4,-0.56l-1.16,-0.11l-1.47,0.62l-2.99,0.05l0.16,-1.49l-0.39,-0.71l-1.48,-0.34l-0.36,-0.26l-0.68,-0.91l-0.33,-1.22l-0.88,-0.91l-1.16,-0.67l-0.85,0.07l-2.1,2.02l-0.04,0.49l0.49,0.85l-1.8,1.33l-0.45,0.53l-0.73,-0.26l-1.78,0.07l-0.7,-0.16l-1.07,-0.82l-2.16,-0.48l-0.53,-1.29l-3.04,-2.34l-0.21,-0.43l1.07,-0.79l3.35,-1.09l0.67,-0.52l0.24,-0.59l-0.22,-0.47l-1.93,-1.02ZM261.43,298.81l2.77,-0.68l0.29,-0.3l0.22,-0.97l0.3,-0.04l0.62,0.31l0.98,1.15l0.26,1.42l-0.24,1.95l0.37,1.77l0.24,0.33l1.02,0.63l2.54,0.4l2.31,-0.1l0.21,0.31l-3.17,2.99l-0.35,0.25l-0.38,-0.02l-0.24,-2.65l-0.48,-0.35l-1.69,0.36l-1.27,-0.04l-0.61,-0.28l-1.79,-2.5l-3.04,-0.66l-0.76,-0.83l-0.17,-0.38l0.46,-0.56l0.82,0.18l0.51,-0.16l0.48,-0.43l0.11,-0.55l-0.29,-0.54ZM269.34,332.0l-0.57,-0.07l-0.12,-1.03l0.29,-0.43l1.67,-0.89l-0.03,-0.72l-0.51,-0.21l0.28,-0.48l1.95,-1.22l-0.68,1.5l-2.29,3.56ZM271.87,321.81l-5.06,1.0l-1.54,-0.08l1.53,-0.44l0.3,-0.3l0.62,-2.57l-0.21,-0.45l-2.19,-1.11l0.09,-0.39l1.46,-0.69l0.8,-0.06l0.87,0.6l1.09,1.4l1.68,0.37l0.74,0.44l-0.19,2.27ZM263.06,333.89l0.29,-1.39l0.53,-0.68l0.58,-0.27l0.32,0.24l0.47,0.0l1.95,-1.18l0.87,3.48l0.02,0.34l-0.31,0.5l-2.16,0.88l0.34,-0.95l-0.39,-0.99l0.18,-0.72l-0.36,-0.57l-0.93,0.13l-1.39,1.16ZM255.41,289.78l0.69,-0.49l-0.15,-0.72l-1.04,-0.51l-0.13,-0.82l0.1,-0.64l0.69,-0.72l0.6,0.15l0.79,0.64l0.35,0.08l0.93,-0.25l1.09,0.12l0.46,-0.5l-0.77,-1.87l6.87,-3.75l0.3,0.92l-0.05,1.26l-1.59,3.18l-0.74,0.23l-0.54,0.78l-1.75,0.9l-0.21,0.45l0.38,0.31l1.48,0.02l0.19,0.46l-0.19,0.24l-1.99,1.51l-1.52,0.67l-1.42,1.52l-0.92,0.18l-0.73,0.99l-0.48,0.34l-0.38,-0.15l-0.57,-0.61l1.29,-0.75l0.3,-0.63l1.03,-0.51l0.17,-0.55l-0.29,-0.36l-2.26,-1.13ZM265.16,309.88l-0.49,0.1l-0.68,-0.67l0.84,-0.35l0.47,0.45l-0.13,0.47ZM261.42,316.68l0.29,-0.28l0.09,-0.02l-0.03,0.04l-0.35,0.26ZM249.11,297.53l0.35,-0.38l1.04,0.14l0.81,-0.31l0.88,0.05l0.67,-0.37l1.01,0.73l-0.88,1.33l-1.56,-0.01l-2.31,-1.17ZM251.9,306.91l-0.8,-0.04l-0.28,-0.18l-0.4,-1.03l0.09,-3.19l1.15,0.03l0.25,4.42ZM248.75,309.98l0.12,-0.28l0.57,-0.15l0.37,0.2l-1.06,0.23Z\", \"name\": \"United Kingdom\"}, \"IM\": {\"path\": \"M286.48,364.63l0.75,-2.12l1.13,-0.81l1.38,-1.97l0.93,-0.46l0.23,0.08l0.45,1.97l-0.6,0.66l-0.31,0.78l-2.48,2.14l-0.89,-0.34l-0.59,0.07Z\", \"name\": \"Isle of Man\"}, \"AT\": {\"path\": \"M481.0,482.58l0.71,0.01l1.26,-0.76l2.73,1.11l1.06,0.84l0.22,1.08l0.57,0.29l0.97,0.14l-0.16,1.17l0.45,0.42l0.92,-0.13l0.98,-0.5l0.89,-1.0l0.56,-1.07l0.32,-1.9l2.68,-0.0l1.17,0.4l1.39,0.05l0.35,0.68l1.21,1.28l1.22,0.23l1.88,-0.49l0.4,0.14l1.17,-0.19l1.17,-0.66l0.33,-0.47l2.34,-1.04l1.86,-0.56l6.32,-0.62l0.56,-0.68l-0.02,-0.91l1.71,0.39l1.72,0.89l0.75,-0.01l1.97,-0.53l0.93,0.41l0.14,0.23l-0.1,0.78l0.54,0.69l2.21,1.18l0.81,-0.01l0.34,-0.23l0.26,-0.61l0.29,-2.74l-0.54,-1.0l-1.45,-0.25l0.66,-1.25l-0.01,-1.43l-2.62,-3.34l0.0,-0.26l0.61,-0.78l3.51,-1.91l3.25,-0.97l0.81,-0.58l0.62,-0.8l0.74,-2.89l2.33,0.93l1.08,-0.42l0.94,-0.96l0.2,-0.72l0.05,-2.03l1.82,1.08l1.04,1.69l1.99,0.43l2.41,0.04l1.04,-0.73l0.6,-0.12l2.7,0.45l0.45,-0.33l0.19,-1.16l1.34,-1.55l1.2,0.04l0.39,-0.27l0.35,-1.06l0.39,-2.67l0.73,0.04l1.42,0.91l2.0,-0.47l1.12,0.26l4.05,1.69l1.7,-0.05l3.21,1.91l2.2,0.27l2.05,0.01l1.59,-1.06l1.42,0.28l1.56,0.85l2.14,0.49l0.79,1.59l-0.07,0.6l-1.06,1.86l0.03,1.3l1.48,3.33l1.26,1.95l0.23,0.71l0.58,0.5l-0.55,0.63l-0.13,0.95l-0.53,0.59l-0.13,0.62l0.38,2.0l-2.83,0.16l-0.51,0.24l-1.61,-0.95l-1.03,-0.27l-0.78,0.17l-1.67,1.19l-0.17,0.52l0.4,0.53l2.63,0.76l0.36,0.9l-0.61,1.28l-1.24,0.62l-0.91,0.08l-0.36,0.32l-0.11,0.73l0.34,1.42l-0.57,1.05l0.29,1.33l0.33,0.31l0.38,0.06l-0.38,1.52l-0.2,0.17l-1.36,-0.04l-1.08,0.52l-2.2,1.87l-0.81,0.36l-0.95,1.05l-0.06,1.65l-2.43,-0.52l-1.83,0.22l-1.3,0.78l-1.31,0.39l-3.01,-0.22l-2.94,0.29l-1.48,0.35l-0.86,0.49l-1.18,1.41l-2.07,1.02l-0.51,0.54l-1.7,-0.42l-4.3,-0.57l-3.66,-0.84l-1.21,-0.06l-3.4,-0.7l-4.38,-0.3l-9.29,-1.69l-1.1,-0.46l-1.58,-2.21l-1.49,-1.64l-0.22,-0.59l0.9,-1.44l-0.32,-0.53l-0.38,-0.12l-2.94,0.72l-2.6,0.91l-3.29,-0.2l-4.01,0.41l-1.66,0.81l-1.47,2.36l-0.28,0.22l-0.74,0.11l-1.24,-0.09l-0.81,-0.27l-1.13,-0.95l-2.83,-0.17l-0.03,-0.51l-0.54,-1.11l-1.1,-0.55l-0.42,0.08l-2.23,2.03l-0.42,0.12l-1.7,-0.53l-1.43,-0.79l-0.64,-1.3l-3.07,-0.87l0.13,-0.58l-0.74,-1.34l-0.33,-1.34l1.01,-1.91l0.27,-1.41l-0.15,-0.38l-0.45,-0.35Z\", \"name\": \"Austria\"}, \"NL\": {\"path\": \"M408.11,413.92l-1.22,-0.28l-1.76,-0.74l-2.63,0.56l-1.62,-0.68l-1.47,-0.1l-1.43,-1.16l0.86,-0.49l2.54,-0.12l1.81,0.37l3.4,2.1l1.09,0.04l1.03,-0.28l0.2,-0.64l-0.47,-0.58l-2.47,-1.12l1.44,-0.15l0.27,-0.65l-0.68,-1.17l-2.31,-2.26l1.63,-2.96l1.7,-1.22l2.27,-2.5l1.52,-2.15l1.1,-2.5l1.57,-6.68l1.04,-2.07l1.58,0.52l2.35,-0.96l4.09,-2.53l1.29,-2.25l1.06,-0.92l4.54,-1.93l2.49,-0.57l10.02,-0.62l2.06,2.07l1.3,0.52l1.54,0.27l-0.08,4.83l-0.97,1.98l-0.9,2.61l-0.24,1.67l-3.48,0.08l-0.91,0.62l0.09,0.93l-0.34,0.86l0.25,0.74l0.62,0.64l1.41,0.52l1.71,-0.01l0.65,0.86l-0.19,1.84l-0.5,0.96l-1.57,1.2l-1.5,0.72l-0.42,0.48l-0.14,0.98l1.13,1.12l-0.6,0.77l-2.87,0.97l-1.44,-0.0l-0.68,0.49l-0.71,-0.41l-2.0,-0.55l-2.28,0.91l-0.8,0.57l-0.17,0.32l0.08,0.97l1.84,2.22l0.1,0.74l1.31,1.88l0.06,0.56l-0.41,1.55l-1.26,2.5l0.11,0.92l0.53,0.33l-2.24,1.64l-0.78,-0.07l-0.53,0.48l0.1,0.74l0.47,0.55l1.53,0.64l0.41,0.58l-0.61,2.28l-2.95,-0.15l-0.55,-0.2l-0.58,-0.97l1.24,-1.33l0.21,-1.07l0.91,-1.71l0.16,-0.82l-0.5,-0.82l-0.8,-0.42l-1.87,-0.5l-0.81,-0.64l-0.39,-0.59l-0.61,-0.33l-2.38,0.42l-1.15,-0.3l-1.39,-1.09l-0.5,-1.77l-0.54,-0.52l-0.49,0.01l-1.11,1.02l-1.05,0.07l-0.27,-0.74l-0.84,-0.78l-0.46,0.02l-1.54,1.17l-0.36,-0.0l-0.96,-0.8l-0.43,-0.13l-0.97,0.33l-0.76,0.58l-0.15,0.41l0.17,0.79l-0.77,-0.08l-1.01,-0.43ZM416.5,383.47l-1.03,1.0l-0.51,-0.26l0.29,-0.71l1.25,-1.07l-0.0,1.04ZM407.31,414.89l-0.37,0.52l-1.7,1.02l-1.75,0.66l-0.79,-0.07l-1.0,-0.74l-1.0,-0.37l-1.46,-0.21l-1.62,0.77l-0.28,-0.03l-0.5,-0.59l-0.29,-1.12l2.71,-0.27l1.73,0.54l2.26,0.26l1.77,-0.71l1.2,0.56l1.09,-0.22ZM401.26,408.39l0.8,-0.2l1.99,0.12l1.27,0.97l-1.02,0.24l-1.65,-1.11l-1.25,0.17l-0.14,-0.18Z\", \"name\": \"Netherlands\"}, \"AD\": {\"path\": \"M373.44,566.17l-1.46,0.73l-1.49,0.29l-0.26,-1.45l0.13,-0.56l0.71,-0.55l2.52,0.57l0.23,0.31l-0.38,0.67Z\", \"name\": \"Andorra\"}, \"IE\": {\"path\": \"M245.03,355.16l-0.33,0.27l-3.42,1.12l-1.01,0.66l-0.44,0.52l-0.05,0.43l0.47,0.87l3.09,2.41l0.35,1.12l0.29,0.27l2.3,0.51l1.07,0.82l0.95,0.2l1.74,-0.07l1.0,0.25l2.79,-2.26l0.09,-0.46l-0.49,-0.95l1.71,-1.63l0.3,0.02l0.84,0.52l0.68,0.72l0.25,1.06l0.9,1.22l0.66,0.42l1.26,0.31l-0.18,1.51l0.2,0.49l0.36,0.25l3.32,-0.04l1.44,-0.63l0.91,0.09l0.42,0.48l0.07,0.19l-0.49,0.12l-1.28,-0.03l-0.65,0.73l-0.03,0.85l0.37,1.24l0.72,0.86l0.99,3.59l0.72,1.21l0.15,3.22l-0.29,0.63l1.44,5.06l0.23,2.86l-1.36,2.13l-0.52,1.27l-0.43,1.48l-0.23,2.1l-1.65,2.45l-0.66,0.57l-0.81,0.37l-0.11,0.65l1.47,1.41l-0.98,0.51l-1.53,0.23l-1.77,-0.43l-1.27,0.04l-1.49,0.84l-0.62,-1.32l-0.39,-0.23l-0.36,0.27l-0.45,1.35l-0.82,0.37l-1.8,-0.09l-3.05,0.4l-1.26,0.45l-1.41,1.96l-3.3,1.03l-1.16,1.3l-1.31,0.67l-0.96,0.18l-1.89,-1.34l-1.79,-0.0l-0.38,0.32l0.85,0.97l0.14,0.84l-0.14,0.73l-0.57,0.35l-1.04,0.15l-1.42,0.95l-1.89,0.26l-1.2,0.96l-6.42,1.53l-2.25,-0.55l-1.05,0.14l-2.66,0.85l-0.55,-0.07l1.21,-1.55l2.34,-1.17l0.24,-0.3l-0.24,-0.64l-0.89,-0.15l-4.33,0.76l-2.09,0.72l2.01,-1.51l1.75,-0.96l0.67,-0.74l1.97,-0.87l0.21,-0.5l-0.49,-0.25l-6.51,1.85l-1.48,-0.2l-0.69,-0.54l-1.03,0.19l-0.29,-0.71l1.78,-1.71l1.09,-0.77l2.7,-1.09l0.66,-0.93l-0.19,-0.58l-0.79,-0.28l-3.96,0.2l-1.45,-0.13l0.29,-0.66l1.81,-1.08l0.94,-0.17l0.86,0.1l1.81,0.7l2.24,-0.23l0.34,-0.28l-0.13,-0.43l-0.81,-0.65l-0.15,-1.37l-0.45,-0.48l1.55,-0.82l1.69,-1.42l3.96,-0.54l3.73,-0.77l3.73,-1.08l0.29,-0.38l-0.28,-0.39l-1.82,-0.57l-0.85,-0.74l-0.56,0.03l-1.42,1.55l-0.93,0.54l-2.83,0.31l-2.44,-0.63l-0.85,0.59l-2.09,0.75l3.98,-3.0l0.75,-0.85l0.97,-1.34l0.03,-0.41l-0.3,-0.6l-0.37,-0.28l1.87,-2.34l0.63,-0.41l1.31,-0.07l2.03,-0.63l1.03,-0.9l-0.13,-0.67l-1.4,-0.53l-1.52,-0.29l-5.04,0.23l-0.67,-0.44l-0.24,-0.84l-0.5,-0.44l-1.23,-0.06l-1.05,0.29l-0.66,-0.1l0.68,-0.6l-0.2,-0.69l-1.41,-0.23l-1.46,0.18l-0.83,-0.2l0.42,-0.63l-0.05,-0.58l-0.59,-0.48l-0.06,-0.28l0.36,-0.17l0.88,0.09l1.63,-0.53l2.1,-0.26l0.35,-0.37l-0.29,-0.42l-1.78,-0.51l-0.51,-0.31l0.06,-0.78l1.91,-0.9l2.21,-0.43l0.31,-0.49l-0.14,-0.57l0.14,-0.63l-0.35,-0.48l-2.29,-0.21l-1.8,0.38l0.68,-2.04l-0.0,-1.8l-0.53,-0.33l-0.58,0.2l-0.12,-0.88l-0.45,-0.85l-0.49,-0.19l-1.01,0.38l0.02,-0.42l0.33,-0.58l0.59,-0.24l2.28,0.12l1.55,-0.6l2.01,-0.14l3.21,0.18l2.21,1.59l0.41,0.03l0.59,-0.3l1.2,-1.12l3.36,0.44l2.13,0.6l0.81,-0.19l0.26,-0.48l-0.31,-1.17l-0.59,-0.71l0.66,-0.75l1.06,-0.67l2.41,-0.77l0.86,-0.46l0.67,-1.53l0.78,-1.1l-0.38,-0.63l-4.29,0.58l-3.57,-1.16l0.31,-0.44l0.76,-0.47l1.46,-0.4l0.38,-0.61l1.96,-1.47l0.12,-0.43l-0.43,-1.32l0.19,-0.79l0.94,-0.8l0.56,-1.44l1.75,-0.25l1.7,-0.64l2.64,-0.09l0.63,0.24l0.54,-0.43l-0.11,-0.78l0.78,-0.09l0.23,0.11l0.29,0.85l0.49,0.45l0.13,0.66l-0.29,0.52l-0.6,0.5l-0.02,0.6l0.31,0.29l-0.67,0.73l-0.03,0.5l0.48,0.14l1.08,-0.47l1.44,-1.0l0.17,-0.36l-0.08,-0.82l-0.63,-1.97l0.14,-0.76l0.61,-0.48l2.02,-0.31l0.26,-0.64l-0.46,-0.62l0.71,0.2l1.23,0.89l2.08,1.04l-0.77,0.67l-1.53,0.76l-0.72,0.9l-2.2,1.29l-0.39,0.57l-0.68,2.35l-1.25,1.91l-2.31,0.96l-1.79,-0.12l-0.73,0.44l-0.17,0.36l0.13,0.52l0.4,0.4l1.58,0.8ZM212.65,366.62l-0.13,-0.02l0.03,-0.02l0.09,0.04ZM213.87,366.77l1.05,0.02l0.27,0.15l0.07,0.94l-0.8,-0.9l-0.59,-0.21Z\", \"name\": \"Ireland\"}, \"ES\": {\"path\": \"M408.55,609.24l-3.95,-1.75l-1.35,-0.22l-0.04,-0.91l2.43,-0.17l2.05,0.62l1.1,1.67l-0.24,0.75ZM392.9,610.25l0.24,0.47l1.3,0.53l1.55,-0.44l0.59,0.12l0.47,0.17l0.11,0.64l-2.21,3.38l-0.63,1.38l-2.01,1.18l-2.18,-0.99l-1.33,-0.27l-0.23,-0.23l-0.3,-1.47l-0.91,-0.82l-1.18,-0.19l-1.55,1.01l-0.31,-0.47l-0.97,-0.3l-0.17,-0.26l0.01,-0.32l5.42,-3.73l1.57,-0.82l3.07,-0.89l-0.06,0.57l0.37,0.41l-0.48,0.58l-0.18,0.74ZM246.2,546.17l1.24,0.54l1.33,-0.16l1.25,0.65l2.0,1.73l2.73,0.67l2.32,-0.51l3.77,-0.11l1.99,0.22l3.37,-0.41l1.91,0.14l3.17,-0.81l2.44,1.01l4.71,0.48l2.86,0.85l7.97,1.43l2.93,0.01l4.03,-0.8l1.66,-0.58l1.66,0.32l2.22,-0.66l0.92,0.12l1.48,0.98l5.05,1.32l0.36,-0.08l1.26,-1.06l0.81,-0.2l3.51,0.67l3.75,1.41l1.98,0.1l2.79,-0.38l2.24,-0.92l0.61,1.08l0.69,0.42l1.22,0.43l2.11,0.25l0.57,0.31l-0.15,1.09l-0.77,1.27l0.05,0.44l0.81,0.66l1.09,0.03l0.6,-0.74l0.3,0.36l4.79,1.82l2.22,0.15l2.37,2.24l1.74,0.09l2.29,-0.44l1.21,0.62l2.26,1.59l3.37,-0.44l0.82,0.42l1.65,-0.12l1.86,0.22l1.61,-0.05l0.53,-0.55l0.13,-1.57l0.27,-0.42l4.06,1.05l2.69,1.08l1.2,0.07l0.59,0.24l0.9,1.31l-0.14,0.61l0.17,1.5l0.36,0.64l0.29,0.16l1.32,-0.09l2.19,-0.97l2.73,1.14l1.03,1.21l0.88,0.03l2.11,-1.03l4.84,1.2l1.21,0.1l0.43,-0.35l0.17,-0.63l0.24,-0.14l2.56,-0.78l0.93,-0.16l3.02,0.58l0.29,0.77l0.69,0.52l0.11,0.39l-1.45,0.37l-0.36,0.34l-0.22,1.53l0.42,0.73l0.66,0.43l0.11,0.29l0.12,2.0l-3.11,2.69l-9.38,4.87l-2.31,2.4l-0.75,0.47l-6.93,1.47l-7.25,2.16l-4.47,3.93l0.14,0.7l1.0,0.28l0.97,0.99l-1.94,1.07l-0.67,0.23l-0.56,-0.11l-0.64,0.29l-3.14,4.73l-2.76,3.37l-1.59,1.52l-1.6,2.21l-3.44,5.71l-0.07,1.96l1.73,5.74l1.03,1.55l1.35,1.24l2.56,1.08l0.41,0.67l-0.65,0.73l-2.51,1.72l-4.44,2.36l-1.99,1.94l-0.48,1.83l-1.34,0.98l-0.48,2.47l-0.93,2.19l-0.87,1.38l-0.11,0.92l0.13,0.34l1.03,0.95l-0.27,0.21l-2.08,0.34l-5.27,0.16l-4.46,2.79l-2.28,2.59l-1.9,4.42l-2.24,2.53l-0.75,0.35l-1.61,-1.09l-2.0,-0.18l-2.05,0.39l-1.14,0.96l-1.39,0.45l-1.51,-0.42l-3.39,-0.24l-1.6,0.06l-2.23,0.71l-1.96,-0.48l-3.38,-0.25l-7.46,0.61l-1.12,0.41l-0.89,1.08l-2.19,1.79l-3.54,0.09l-3.2,1.22l-1.0,0.94l-1.35,2.14l-0.35,1.21l-0.47,-0.2l-0.49,0.13l-0.29,0.3l-0.21,0.99l-1.83,0.61l-2.33,-0.91l-2.03,-1.42l-1.1,-0.16l-1.63,-2.09l-0.73,-1.38l-0.49,-1.43l0.08,-0.68l-0.15,-0.5l-0.23,-0.25l-1.38,-0.55l-0.29,-1.07l1.02,-1.66l1.35,-0.91l0.24,-0.46l-0.41,-0.31l-1.41,0.08l-0.96,0.94l-1.11,-1.59l-5.06,-3.56l0.23,-0.57l-0.03,-0.66l-0.7,-0.22l-0.83,0.93l-0.44,0.19l-2.71,-0.15l-2.76,0.4l-1.23,-5.85l0.75,-2.07l0.87,-0.92l1.16,-1.85l1.34,-1.45l1.45,-0.35l0.91,-0.44l0.91,-2.31l-0.46,-0.59l-1.76,0.15l-2.97,-4.04l0.48,-1.54l0.33,-2.25l0.71,-0.75l1.32,-0.94l1.08,-1.27l0.63,-1.46l0.03,-1.41l-0.83,-0.95l-1.59,-0.4l-1.69,-3.02l-0.39,-1.96l-1.57,-1.32l-0.92,-1.49l0.55,-0.15l4.66,-0.04l1.22,-0.59l0.9,-1.43l0.9,-2.28l0.23,-1.44l-0.4,-0.92l-1.43,-1.44l0.17,-0.44l2.07,-1.45l0.66,-0.68l0.1,-0.39l-0.54,-1.45l0.21,-0.67l0.23,-2.81l-0.24,-1.99l-0.33,-1.74l-0.89,-1.96l0.41,-0.51l1.56,-0.84l1.13,-1.68l1.61,-1.38l2.17,-1.14l1.61,-1.34l1.17,-1.66l-0.43,-1.19l-1.01,-0.82l-1.25,-0.43l-1.89,-0.09l-0.11,-3.06l-0.36,-0.8l-0.88,-0.56l-1.06,0.12l-1.76,-0.47l-0.61,0.3l-2.06,-0.08l-1.78,-0.47l-0.82,0.53l-0.24,0.98l-0.62,0.39l-1.72,0.47l-1.37,-0.04l-2.55,-0.85l-2.62,0.28l-0.62,-0.15l-2.26,1.08l-0.62,0.03l-0.62,-1.02l1.17,-1.69l0.06,-0.38l-1.12,-1.88l-0.35,-0.27l-0.72,-0.06l-4.57,1.41l-1.38,0.79l-1.2,1.03l-0.72,0.16l-0.18,-2.32l2.53,-2.61l-0.12,-0.66l-0.68,-0.24l-0.72,0.02l1.06,-1.45l-0.13,-0.55l-0.92,-0.75l0.15,-1.9l-0.16,-0.84l-0.53,-0.28l-2.47,0.81l-0.02,-0.67l1.24,-1.6l0.21,-0.67l-0.32,-0.5l-1.46,-0.24l-1.05,-0.76l-1.33,-1.66l-0.01,-0.78l0.71,-2.07l2.0,-1.02l1.92,-1.48l2.78,0.27l1.74,-0.34l1.62,-0.82l0.94,-0.2l1.45,-0.7l0.22,-0.38l-0.05,-0.95l-0.41,-0.69l0.23,-0.35l3.27,-1.81l2.1,-0.23l1.93,-0.88ZM370.1,623.83l-0.59,0.91l-1.82,-0.41l0.26,-0.64l0.39,-0.09l0.31,-0.37l0.03,-0.66l0.46,-0.58l2.6,-0.57l0.4,0.32l0.08,0.41l-1.53,1.47l-0.58,0.19ZM370.18,627.26l0.43,0.46l-0.55,0.0l0.12,-0.46ZM164.44,776.55l-0.91,0.89l-0.45,-0.15l0.39,-1.69l0.37,-0.49l1.75,-0.87l1.52,-0.36l0.83,-1.23l-0.52,2.63l-0.85,0.56l-2.14,0.71ZM155.44,788.95l0.69,-0.19l1.68,-1.26l1.2,-2.96l1.67,-3.08l0.34,-1.27l0.46,-0.35l0.91,0.01l0.27,0.45l-0.01,1.42l-0.47,2.52l-0.8,2.08l-3.47,1.18l-1.83,1.61l-0.64,-0.14ZM141.28,788.62l0.11,1.32l-4.04,0.0l0.39,-0.4l0.41,-1.04l3.13,0.12ZM128.81,784.44l-1.25,3.48l-0.98,1.21l-0.52,0.36l-1.26,0.29l-1.66,-1.86l-1.25,-2.48l0.36,-0.23l1.2,0.08l2.71,-0.47l0.66,-0.25l2.6,-2.07l2.13,-0.21l-2.74,2.13ZM117.34,789.64l-0.31,0.07l-0.43,-0.24l-0.52,-0.88l0.58,-0.83l1.31,0.57l0.26,0.48l-0.88,0.82ZM108.62,782.6l-0.21,-0.75l-1.48,-2.62l0.7,-0.91l1.39,-0.03l0.54,0.67l0.18,0.66l-0.31,0.63l0.09,1.0l-0.14,0.53l-0.76,0.82Z\", \"name\": \"Spain\"}, \"ME\": {\"path\": \"M601.12,565.85l1.19,-0.97l0.28,-0.68l-0.09,-0.72l-1.0,-1.62l-0.28,-2.93l0.34,-0.41l1.75,-0.24l0.34,-0.4l0.06,-1.92l0.56,-1.18l2.2,-1.75l0.74,0.07l0.51,0.77l0.4,0.17l0.65,-0.12l0.33,-0.34l0.08,-1.33l-1.22,-2.13l0.14,-0.28l1.2,0.35l1.26,-0.26l0.09,0.61l0.46,0.74l2.58,1.71l1.83,2.12l0.92,0.7l0.86,0.21l1.56,0.91l2.14,0.45l5.15,2.95l0.06,0.52l-1.49,0.41l-0.45,0.68l-1.62,-0.06l-0.33,0.16l-0.34,0.46l-0.01,0.45l0.73,1.46l-0.2,0.93l-1.58,0.72l-1.8,0.45l-0.38,-0.47l0.04,-1.24l-0.35,-0.8l-0.73,-0.25l-0.81,0.44l-1.5,2.24l-1.98,2.47l-1.63,2.79l0.07,0.46l0.63,0.65l0.34,0.8l-0.21,2.52l-1.44,-0.88l-0.9,-1.83l-3.09,-3.08l-3.53,-2.11l0.23,-0.58l-0.34,-0.59l-1.53,0.19l-0.92,-1.43Z\", \"name\": \"Montenegro\"}, \"MD\": {\"path\": \"M712.53,469.11l2.31,-1.33l0.67,0.22l4.47,0.01l1.53,-1.02l1.05,0.19l1.72,-0.95l2.18,0.42l1.32,0.53l0.98,0.89l0.99,0.55l1.04,0.24l0.37,0.29l0.35,0.83l1.09,0.35l1.68,-0.01l0.39,0.23l-0.18,0.59l0.23,0.62l0.51,0.15l0.45,-0.22l0.17,0.1l0.57,0.96l0.6,-0.0l0.78,-0.88l2.88,0.47l1.16,1.99l0.96,0.93l0.99,0.32l1.65,-0.6l0.82,1.24l0.21,1.74l-0.32,1.87l-0.84,2.17l0.18,1.06l0.34,0.59l2.44,1.48l0.73,0.86l0.98,0.61l1.0,0.26l-0.01,1.14l-0.39,0.93l0.02,0.82l0.67,0.88l0.19,1.52l0.46,0.52l1.66,0.96l2.08,0.9l0.74,1.53l-0.24,3.06l0.17,0.37l2.44,1.72l-0.33,0.32l-2.9,0.38l-1.0,-1.27l-0.81,-0.32l-1.41,0.82l-0.63,-0.12l-1.4,-0.8l-0.6,0.02l-0.41,0.25l-0.87,-0.4l-0.6,0.12l-0.62,1.15l-0.1,-1.82l-0.5,-0.51l-0.54,-0.05l-2.77,1.21l-0.63,0.95l0.04,1.05l0.21,1.4l0.77,1.72l-0.41,0.75l-0.3,1.2l-1.2,1.09l-1.45,0.68l-0.23,0.33l-0.12,1.31l-0.72,0.85l-1.47,1.03l-0.96,1.18l0.21,1.78l-0.17,0.7l-2.33,0.22l-1.08,0.59l-1.37,-1.89l0.81,-0.53l0.15,-0.33l-0.06,-1.18l-0.55,-1.9l-0.21,-2.41l0.26,-2.73l1.68,-5.26l-0.27,-1.14l0.22,-2.18l-1.24,-2.78l-1.05,-3.16l-3.05,-2.49l-1.16,-1.93l-2.06,-1.92l-2.23,-3.64l-1.53,-1.5l-0.75,-1.27l-0.65,-2.15l-1.07,-2.03l-2.41,-3.5l-1.17,-1.03l-1.54,-0.78l-1.64,-0.15Z\", \"name\": \"Moldova\"}, \"SY\": {\"path\": \"M844.08,692.68l1.05,-1.15l-0.02,-0.54l-0.85,-0.79l-1.19,-0.32l-0.44,0.17l-0.33,0.53l-3.37,0.05l-0.95,-3.1l-0.15,-1.42l0.03,-1.64l0.71,-2.46l-0.54,-3.21l-1.83,-2.36l0.96,-4.03l0.54,-0.79l0.7,0.07l2.09,1.17l0.59,0.01l0.33,-0.25l0.62,-1.51l0.51,-0.43l1.27,-0.45l0.26,-0.32l0.36,-2.44l1.08,-0.58l2.15,-0.21l0.34,-0.34l0.03,-0.68l-1.36,-2.9l0.78,-3.62l0.59,-1.27l3.45,0.63l0.6,0.85l1.34,0.85l5.0,0.15l6.53,-2.38l3.79,-1.63l1.43,0.12l1.76,0.45l3.25,2.24l1.18,0.4l8.13,0.2l4.56,-0.9l4.5,-1.37l6.04,-2.91l0.0,42.23l-23.22,13.06l-26.4,15.89l-4.44,-0.64l-1.34,-0.36l-2.04,-1.61l-2.15,-0.6l-1.38,-1.96l-0.84,-0.71l-1.22,-0.32l1.56,-2.75l-0.55,-2.19l0.5,-0.94l-0.93,-2.17l0.0,-0.61l0.39,-1.38l0.52,-0.43l0.26,-0.62l1.15,-0.82l0.33,-0.52l-0.11,-0.56l-0.81,-0.5l-0.24,-0.41l0.27,-0.75l1.48,-1.32l1.29,-0.1l1.98,0.19l0.54,-0.28l0.11,-0.6l-1.14,-0.94l0.89,-1.08l1.44,-0.74l1.05,-1.18l0.73,-1.41l-1.07,-3.54l-0.8,-0.7l-1.3,-0.53Z\", \"name\": \"Syria\"}, \"TN\": {\"path\": \"M462.37,661.98l2.02,-1.56l1.07,-2.02l2.03,-1.09l0.2,-0.37l-0.22,-1.31l3.08,-0.9l3.17,-2.45l1.06,-0.57l7.28,-2.24l1.49,0.34l-0.56,1.05l-0.02,0.4l0.63,1.19l0.6,0.12l0.9,-0.72l0.11,-0.48l-0.21,-0.58l2.34,0.05l1.17,0.56l-0.09,2.42l1.91,2.7l-0.46,1.1l0.2,0.52l1.62,0.77l0.39,-0.02l1.44,-0.93l0.78,-1.37l2.62,-0.82l2.43,-1.94l0.9,-0.13l0.24,1.27l0.54,1.19l-0.74,0.43l-1.21,1.53l-2.27,3.84l-2.01,1.09l-1.67,1.56l-0.6,1.18l-0.19,1.36l0.44,2.44l1.22,2.34l1.33,1.36l1.39,0.5l2.77,1.97l-0.03,1.17l0.41,1.47l0.16,1.79l0.95,1.43l-2.07,2.95l-1.23,2.31l-2.34,3.11l-2.07,2.0l-4.51,3.02l-1.16,1.04l-0.84,1.22l-0.35,1.24l0.16,1.42l1.49,3.14l2.07,1.98l2.34,1.11l3.02,-0.35l-0.07,0.82l0.25,1.45l0.41,0.33l2.46,-0.3l0.87,-1.25l1.23,0.69l0.85,2.79l1.37,0.98l-0.54,0.42l0.06,0.66l1.93,0.64l0.91,-0.2l1.03,0.47l-0.59,4.02l-0.07,3.89l1.09,1.9l0.02,0.58l-0.32,0.69l-9.1,4.96l-0.81,0.93l-2.17,1.36l-0.98,2.0l-0.8,0.87l-2.18,0.44l-0.67,0.46l-1.59,2.14l-0.64,1.5l1.74,6.45l0.17,2.33l-0.49,1.11l-4.26,5.78l-4.58,2.09l-6.38,-27.21l-0.45,-0.6l-9.16,-6.5l-0.39,-2.22l-1.27,-3.49l-1.38,-2.04l-0.66,-0.65l-2.67,-1.25l-1.47,-0.88l-0.32,-0.41l-0.3,-1.39l-1.11,-2.83l-1.26,-2.57l-0.44,-1.66l-0.06,-2.11l0.23,-1.44l0.45,-0.56l2.59,-1.95l1.28,-2.42l3.8,-2.32l1.06,-1.39l0.76,-1.5l0.42,-3.72l0.45,-1.54l1.09,-1.79l0.04,-0.33l-1.03,-3.01l0.17,-2.68l-0.15,-1.2l-0.96,-2.29l-0.02,-0.96l1.38,-7.84l-0.2,-0.78l-0.49,-0.72l-1.2,-0.63ZM502.62,689.18l0.61,-0.51l-0.01,0.2l-0.6,0.32ZM499.09,704.5l-1.13,0.49l-1.48,-0.57l0.19,-1.69l1.96,-0.06l1.28,1.1l-0.82,0.72Z\", \"name\": \"Tunisia\"}, \"MA\": {\"path\": \"M184.0,789.94l4.2,-1.13l5.88,-2.66l1.71,-1.08l1.85,-2.18l2.91,-2.72l5.49,-3.3l2.57,-1.88l3.97,-4.76l2.57,-3.84l2.13,-2.47l1.51,-2.25l1.1,-2.4l0.59,-3.62l-0.4,-1.58l-1.69,-2.44l-1.08,-0.65l-0.22,-0.82l0.57,-1.94l-0.01,-3.31l0.33,-5.23l1.77,-4.18l4.47,-5.71l0.85,-2.4l0.55,-4.88l5.44,-5.15l3.27,-4.05l1.08,-0.95l2.81,-1.81l10.02,-4.04l5.67,-2.89l3.44,-2.22l2.01,-2.55l5.46,-9.84l5.39,-13.98l0.39,-1.42l3.92,-0.64l1.43,-0.55l1.55,-0.96l0.73,0.19l-0.38,0.52l0.05,1.92l1.2,2.08l2.05,2.32l3.73,2.93l2.92,1.18l4.05,0.69l4.84,-1.26l2.59,-0.02l1.25,-0.49l1.38,0.75l2.66,0.25l2.66,-0.42l2.08,-1.26l0.83,-0.9l0.15,0.86l1.5,2.82l0.38,0.2l1.4,-0.11l1.34,0.34l2.86,-0.16l2.48,0.27l0.39,1.04l0.8,0.91l4.48,3.31l-0.73,1.88l0.04,0.32l0.45,0.77l1.06,1.12l-0.75,1.72l1.13,2.87l0.19,2.73l-0.28,3.25l0.18,1.09l0.93,2.17l-0.61,3.86l0.73,2.05l1.01,1.67l0.54,2.9l0.86,1.53l1.4,1.32l3.22,2.24l0.44,0.9l-2.25,1.97l-0.29,1.23l0.47,2.08l-0.34,0.14l-15.87,-0.61l-5.67,0.84l-1.23,0.75l-1.05,2.93l-5.56,1.89l-2.14,0.26l-1.37,-0.19l-0.92,0.16l-0.91,0.45l-0.45,0.83l-0.07,0.94l0.21,1.01l0.52,1.06l0.08,0.95l-0.34,0.82l-0.19,1.92l0.29,0.47l1.99,0.94l0.48,0.51l-0.02,0.65l-0.4,0.4l-0.36,0.22l-3.94,0.52l-4.54,3.18l-6.13,2.16l-2.62,1.31l-3.01,4.56l-1.49,1.55l-2.02,1.45l-4.34,1.28l-3.07,0.55l-2.84,0.3l-3.75,-0.09l-0.47,0.41l-0.26,2.16l-0.86,0.99l-0.35,0.1l-6.16,-0.82l-0.74,0.08l-1.45,0.74l-3.3,2.64l-1.8,0.24l-1.01,0.45l-4.25,3.21l-3.61,2.24l-3.96,3.12l-1.51,0.86l-0.3,0.61l-0.07,1.01l-0.0,8.75l-48.43,0.0Z\", \"name\": \"Morocco\"}, \"RS\": {\"path\": \"M607.42,509.85l1.42,-0.57l0.68,-0.8l0.8,0.44l0.99,0.02l0.95,-0.31l2.06,-1.11l1.45,-1.49l0.91,-0.19l3.1,0.39l1.26,-0.26l2.96,0.32l0.57,0.23l1.1,1.16l0.91,1.39l2.91,1.72l0.93,1.46l0.83,0.82l0.78,-0.01l-0.13,1.99l0.27,1.3l-0.19,0.44l0.4,0.79l3.18,2.52l1.09,0.5l0.67,0.06l1.1,0.84l2.71,0.8l0.59,0.54l-0.68,0.82l-0.21,0.68l-0.59,0.16l-0.38,0.59l0.16,0.51l0.36,0.36l1.89,0.81l-2.09,0.34l-0.26,0.39l0.03,0.59l0.29,0.37l2.16,0.6l0.88,0.51l0.67,0.83l1.5,0.52l2.22,0.24l1.44,0.7l0.84,1.21l0.41,0.16l1.66,-0.41l1.96,-1.86l1.75,-0.44l1.8,0.85l0.93,0.66l-0.01,0.18l-0.97,-0.1l-1.09,0.4l-0.95,1.17l-0.06,1.13l0.49,0.96l0.77,0.77l0.94,0.41l0.32,0.34l0.06,0.53l-0.82,0.68l-0.34,0.88l-0.07,1.0l-2.37,1.2l-0.78,2.48l0.05,1.46l0.35,1.3l1.09,1.79l0.39,1.47l0.75,1.06l2.94,1.73l1.3,1.71l1.38,0.92l-0.36,1.07l-1.1,1.24l-0.82,0.59l-1.16,1.52l-1.91,0.1l-1.5,0.81l-0.37,0.83l0.32,0.93l-0.37,2.03l0.49,1.41l0.79,0.91l-0.09,0.47l-1.25,1.65l-0.79,0.18l-0.83,-0.56l-0.77,-0.12l-2.39,0.83l-2.13,-0.25l-1.29,0.34l-0.98,0.55l-1.52,0.39l-0.47,-0.06l-0.42,-0.94l1.19,-0.89l0.11,-0.53l1.52,-2.84l0.31,-1.03l-0.21,-0.67l-0.58,-0.24l-0.77,0.01l-3.31,-1.03l0.13,-0.98l-0.18,-0.39l-2.13,-1.28l-0.24,-0.7l-2.28,-2.26l-1.31,-0.46l-1.52,-0.86l-0.29,-1.04l-0.31,-0.38l-0.34,-0.14l-0.68,0.1l-2.04,1.13l-0.19,0.7l0.58,1.17l-0.07,0.27l-0.26,0.47l-2.08,1.44l-0.22,0.83l0.25,0.57l-1.01,0.3l-0.25,-0.85l-0.97,-0.7l-1.42,-0.58l-3.01,-1.84l-2.27,-0.5l-1.44,-0.86l-0.8,-0.19l-0.75,-0.56l-1.89,-2.18l-2.6,-1.74l-0.26,-0.89l0.64,-0.67l1.1,-0.11l0.62,0.42l0.7,0.09l0.38,-0.16l0.39,-0.55l0.28,-1.06l-0.17,-1.2l-3.14,-4.01l0.35,-0.14l1.91,0.24l1.44,-0.15l0.68,-0.49l0.14,-0.84l-0.61,-0.78l-2.83,-2.54l-1.52,-0.96l-1.04,-0.36l-0.2,-0.3l0.08,-2.31l0.22,-0.62l1.92,-2.86l0.6,-1.47l0.3,-1.51l-0.3,-0.61l-1.61,-0.6l-1.79,0.3l0.22,-0.99l-0.44,-2.38l0.55,-0.15l0.3,-0.53l0.63,0.27l2.51,-0.09l0.48,-0.45l0.05,-0.63l-0.33,-0.54l-0.94,-0.77l-3.09,-1.11l-1.01,-0.88l0.03,-0.83l0.55,-0.59l0.16,-0.56l-0.33,-0.37l-1.26,-0.47l-0.29,-0.44l0.32,-1.03l-0.72,-1.88l-0.58,-0.91l0.59,-0.56l0.11,-0.78Z\", \"name\": \"Republic of Serbia\"}, \"_2\": {\"path\": \"M623.28,565.63l0.23,-1.37l-0.65,-1.57l1.63,0.09l0.41,-0.24l0.23,-0.55l3.48,-1.07l0.27,-0.76l-0.29,-0.57l0.09,-0.19l1.93,-1.27l0.5,-0.84l0.09,-0.76l-0.53,-1.12l1.95,-0.93l0.57,1.38l1.67,0.95l1.21,0.41l2.08,2.07l0.37,0.86l2.01,1.19l-0.14,1.07l0.28,0.43l3.69,1.15l0.93,0.05l-1.88,4.12l-1.1,0.71l-0.15,0.66l0.36,0.88l-1.97,0.42l-0.92,0.69l-0.55,1.2l-1.39,-1.12l-1.41,-0.04l-3.96,1.67l-0.58,1.07l-0.11,1.91l-0.39,0.51l-1.14,-0.15l0.02,-2.13l-0.71,-2.58l-0.55,-0.95l-1.98,-1.52l-1.41,-0.49l-0.69,-1.32l-1.49,-1.91Z\", \"name\": \"Kosovo\"}, \"MK\": {\"path\": \"M629.75,577.29l1.84,0.12l0.78,-0.95l0.13,-1.95l0.28,-0.64l3.61,-1.54l0.89,-0.05l1.45,1.15l0.66,0.06l0.37,-0.28l0.54,-1.26l0.63,-0.43l2.18,-0.43l0.86,0.07l1.64,-0.42l1.06,-0.58l1.14,-0.29l2.05,0.27l2.48,-0.84l1.15,0.64l2.02,2.35l1.19,1.03l1.42,0.79l1.52,0.54l0.42,0.4l1.43,3.5l0.73,0.43l0.06,0.28l-0.73,1.84l-0.29,3.95l-1.62,0.11l-0.61,0.4l-0.51,2.19l-2.82,0.86l-4.13,-0.64l-0.75,0.3l-1.9,0.15l-1.15,0.53l-1.97,2.46l-2.56,1.2l-1.39,-0.49l-0.86,-0.08l-1.24,0.65l-4.44,0.26l-0.63,-0.83l-1.01,-0.25l-1.58,0.18l-0.21,-0.18l-0.69,-2.05l-1.24,-1.16l-1.01,-2.21l0.03,-1.94l-0.54,-1.92l0.88,-0.94l-0.14,-2.11l0.57,-2.22Z\", \"name\": \"Macedonia\"}, \"_0\": {\"path\": \"M628.45,248.96l0.16,-0.05l0.84,0.08l0.31,0.32l-0.63,0.06l-0.68,-0.41ZM621.69,243.28l1.25,-0.06l0.94,0.68l0.42,0.54l0.66,0.27l-0.63,0.99l-0.8,-0.15l-1.25,0.46l-0.32,0.82l0.0,0.92l-2.69,0.2l-0.49,-0.23l-0.9,-2.45l0.11,-0.4l0.54,-0.21l0.06,1.05l0.47,0.37l0.85,-0.15l0.32,-0.29l0.34,-1.72l-0.3,-0.6l-0.75,-0.51l0.26,-0.39l0.49,-0.18l0.58,0.76l0.84,0.28ZM616.9,246.18l-0.55,0.17l-0.39,0.42l-0.14,-0.48l0.3,-0.83l0.49,-0.02l0.28,0.74Z\", \"name\": \"Aland\"}, \"SK\": {\"path\": \"M655.85,455.69l-1.87,2.97l-1.26,3.23l-2.02,2.0l-0.31,2.96l-4.5,0.92l-0.43,-0.1l-0.87,-0.84l-1.18,-1.67l-1.8,-1.11l-1.06,-0.01l-2.48,0.73l-1.65,0.08l-2.74,-0.69l-3.03,-0.07l-2.16,0.4l-0.3,0.25l-2.03,3.85l-5.08,2.53l-0.54,0.2l-2.43,-1.14l-1.36,-0.42l-1.02,0.28l-0.9,0.88l-0.42,0.83l-2.52,0.6l-4.73,0.38l-1.81,0.92l-0.78,1.39l-0.02,0.81l0.33,0.69l-0.48,0.75l-7.63,0.4l-5.12,-0.11l-1.61,-0.65l-2.05,-1.31l-2.2,-1.77l-0.76,-0.32l-1.73,-0.07l-0.57,-0.4l-0.25,-0.72l-1.27,-1.96l-1.41,-3.18l-0.03,-0.76l1.03,-1.78l0.6,-2.25l1.01,-1.74l0.9,-0.97l0.53,-0.25l3.99,0.56l2.05,-0.28l1.81,-0.81l1.92,-1.52l0.31,-0.5l1.68,-0.56l0.66,-0.61l0.43,-2.19l0.57,-1.15l2.67,-1.34l0.77,-1.01l2.29,-1.67l2.02,-0.05l1.07,-0.29l1.14,0.17l0.33,1.5l0.41,0.33l2.46,-0.07l0.32,-0.17l1.29,-1.85l0.66,-0.23l1.69,-1.12l2.4,3.23l1.74,0.5l0.15,1.45l-0.41,1.13l0.26,0.48l0.62,0.21l1.69,-0.45l1.76,0.65l0.5,-0.22l0.65,-1.5l0.65,-0.68l2.55,-1.15l0.83,-0.12l1.48,0.18l1.02,-0.17l1.37,0.34l1.03,0.74l1.05,0.26l1.07,-0.04l1.03,-0.56l0.94,-1.22l3.47,-0.19l3.82,0.29l0.99,0.52l2.34,0.66l0.92,0.68l0.88,1.68l6.68,2.35Z\", \"name\": \"Slovakia\"}, \"MT\": {\"path\": \"M547.69,672.17l-1.11,0.1l-0.87,-0.6l-0.01,-0.92l0.72,0.18l1.27,1.23ZM543.86,669.2l0.21,-0.04l0.18,0.07l-0.23,0.07l-0.16,-0.09Z\", \"name\": \"Malta\"}, \"SI\": {\"path\": \"M558.41,514.15l-0.58,0.36l-0.28,0.83l0.1,0.77l0.56,0.93l-0.87,0.29l-1.65,-0.15l-2.27,-0.83l-0.74,0.12l-0.72,0.39l-0.51,-0.13l-1.82,-1.48l-0.49,-0.57l-0.2,-0.62l-0.57,-0.36l-0.96,0.41l-1.36,2.21l-0.59,0.31l-3.71,0.06l-1.44,-0.5l-0.3,0.1l-0.59,0.96l-0.57,0.27l-3.3,-0.75l-0.11,-0.14l1.41,-0.95l0.72,0.07l1.13,-0.28l0.41,-0.37l0.08,-0.48l-0.67,-1.21l-1.49,-1.37l-0.84,-0.56l-1.03,-0.34l0.48,-2.4l-0.56,-0.5l-1.08,0.09l-0.11,-0.21l0.05,-0.3l1.73,-1.57l0.25,-0.42l0.02,-0.57l-0.29,-0.34l-1.94,-0.68l-1.0,-0.0l-0.2,-0.4l0.21,-0.69l2.08,-1.55l1.52,-0.79l0.41,-0.89l2.74,0.31l2.33,0.62l6.38,1.01l0.69,-0.64l2.11,-1.05l1.22,-1.44l0.57,-0.35l1.4,-0.33l2.86,-0.28l3.12,0.21l1.44,-0.43l1.21,-0.75l1.66,-0.2l2.53,0.56l0.43,-0.19l0.29,-0.45l0.04,-1.7l0.63,-0.57l0.61,-0.25l2.29,0.09l0.53,2.01l0.65,0.7l0.07,0.9l1.15,1.33l-1.93,-0.14l-0.74,0.39l-0.47,0.55l0.08,1.71l-1.48,-0.14l-0.71,0.2l-1.02,1.18l-0.8,0.41l-4.21,1.44l-0.67,1.32l0.16,0.75l0.85,0.93l0.11,0.93l-0.28,1.86l-0.24,0.31l-2.25,0.6l-2.4,1.1l-0.28,0.53l0.12,0.38l0.87,0.78Z\", \"name\": \"Slovenia\"}, \"SM\": {\"path\": \"M519.71,543.1l-0.32,0.05l-0.12,-0.21l0.34,-0.45l0.33,-0.05l-0.22,0.65Z\", \"name\": \"San Marino\"}, \"SA\": {\"path\": \"M828.42,789.94l-0.39,-0.46l-1.54,-0.81l-3.38,-0.31l-1.41,-0.32l-1.07,0.62l-0.04,-0.41l0.88,-1.65l1.31,-3.58l0.28,-3.22l1.97,-8.95l14.07,2.35l0.87,-0.15l5.7,-4.43l3.14,-5.02l0.56,-0.41l9.78,-1.99l0.4,-0.39l2.08,-4.63l4.38,-2.44l0.11,-0.62l-6.8,-7.58l-6.6,-6.77l26.53,-7.38l0.63,-0.27l1.87,-1.64l16.36,2.75l1.49,0.7l0.0,57.01l-71.18,0.0Z\", \"name\": \"Saudi Arabia\"}, \"UA\": {\"path\": \"M653.07,467.62l-0.19,-0.74l-0.28,-0.28l-1.33,-0.03l0.12,-2.22l2.03,-2.04l1.29,-3.29l1.79,-2.7l0.18,-0.58l3.27,0.94l0.74,-0.39l0.29,-0.58l-0.19,-0.78l-1.79,-1.47l0.38,-2.04l-1.1,-4.13l0.67,-1.03l4.45,-5.14l5.02,-4.84l1.33,-1.0l2.72,-2.55l3.41,-0.56l1.93,-2.52l0.04,-1.69l-0.66,-1.89l-0.81,-1.03l0.88,-0.25l0.6,-0.46l0.14,-0.42l-0.13,-0.5l-1.58,-1.38l-0.59,-0.85l-1.06,-2.46l-2.62,-3.21l-0.07,-0.55l0.27,-0.93l-0.32,-1.06l-0.61,-1.04l-0.01,-1.46l0.96,-0.37l1.05,0.07l0.89,0.22l1.45,0.71l2.54,-1.53l2.08,-1.99l1.03,-1.59l6.71,-0.55l2.72,-0.57l2.65,-0.13l8.86,0.43l4.61,1.05l1.67,0.19l0.89,0.57l4.32,0.77l2.46,0.31l2.38,0.0l2.07,2.74l0.92,0.15l1.48,-0.21l1.91,0.08l0.86,0.38l-0.14,1.19l0.17,0.38l0.6,0.28l0.82,-0.23l1.34,-1.79l2.04,0.55l0.94,-0.1l1.34,-0.76l1.41,0.45l1.8,0.33l1.45,0.03l0.68,0.27l0.77,1.59l1.26,0.46l0.41,-0.19l0.8,-1.31l0.65,-0.46l1.65,-0.54l1.17,-0.96l0.35,-0.02l0.7,0.66l1.69,3.01l0.73,0.65l0.37,0.08l2.78,-0.93l4.78,-0.42l2.08,-0.43l1.16,0.07l1.78,1.25l0.48,1.45l1.58,0.92l1.44,0.22l0.41,-0.23l0.4,-0.88l0.69,-0.61l0.12,-0.42l-0.44,-2.15l-0.87,-2.05l0.63,-1.52l1.11,-2.22l1.14,-1.4l2.99,-2.68l1.16,-0.48l2.04,0.41l1.65,-0.95l2.97,-0.05l2.74,0.15l2.68,0.97l2.06,-0.07l2.35,-1.21l1.22,-3.0l0.71,-0.46l0.85,-0.02l4.12,1.02l1.41,-0.1l3.32,-1.51l1.76,-0.22l2.24,0.36l2.19,0.02l1.59,-0.21l0.98,0.46l1.32,1.1l1.21,1.66l1.4,3.3l3.75,3.5l-0.11,0.61l-3.32,0.63l-0.34,0.35l-0.02,0.88l1.11,1.58l0.07,2.25l0.33,1.15l0.62,0.53l-0.82,1.11l0.12,0.5l0.5,0.29l3.42,0.12l3.05,1.17l0.78,0.04l1.45,-0.35l2.41,-0.24l1.25,2.5l0.76,0.36l1.36,0.04l-0.27,0.63l0.08,0.66l0.45,0.92l0.49,1.84l0.76,1.25l0.0,0.63l-0.65,1.46l0.27,1.27l1.11,1.57l0.8,0.42l0.78,1.34l1.12,0.41l0.35,-0.04l2.77,-1.54l2.87,0.48l0.86,0.63l0.8,1.04l0.85,0.56l1.11,-0.21l1.55,0.25l0.81,0.78l0.81,0.46l0.41,-0.01l1.88,-1.45l2.98,-0.81l1.98,-0.22l2.8,-1.15l0.83,0.08l0.96,1.14l1.05,0.84l0.34,1.37l1.43,1.96l3.34,2.57l1.35,0.81l1.16,-0.09l0.72,-0.35l0.3,-0.45l0.18,-1.14l0.23,-0.25l0.39,-0.01l2.67,1.56l2.59,0.2l1.69,1.17l2.08,1.1l1.64,0.09l1.78,-0.6l0.78,1.16l0.77,0.7l1.07,0.3l1.25,0.05l4.21,2.69l1.5,0.14l2.03,-0.5l0.42,0.22l0.09,0.27l-0.46,0.86l0.0,1.15l0.93,1.25l0.02,0.88l-0.71,1.68l-2.33,2.28l-1.74,0.48l-0.99,0.5l-0.2,0.47l0.33,0.98l0.8,0.9l3.08,1.14l-0.89,0.19l-1.76,-0.14l-1.31,1.36l-0.82,2.61l0.3,0.5l1.58,0.33l0.75,0.4l0.65,2.74l-0.39,0.36l-0.16,0.77l0.38,0.56l1.14,0.33l-0.98,1.32l-1.48,3.53l0.0,1.35l-0.38,0.48l-4.48,0.18l-6.63,-0.37l-1.19,0.33l-1.59,2.23l-0.97,0.76l-1.66,0.71l-2.07,0.29l-1.24,1.08l-0.39,1.37l-0.04,1.26l-0.72,1.43l0.07,0.65l0.26,0.29l0.68,0.23l-0.74,0.67l-0.27,0.64l0.1,1.34l-4.76,-0.22l-3.93,0.37l-2.89,2.7l-1.6,0.01l-2.4,0.74l-1.66,0.94l-1.64,1.67l-1.38,-0.75l-1.76,0.02l-1.92,0.57l-2.01,1.22l-1.01,0.2l-2.4,-0.34l-2.68,0.72l-5.92,4.2l-0.85,1.26l-0.06,-0.98l-0.84,-1.19l-0.64,-0.01l-2.18,2.85l-1.23,0.42l-1.63,0.89l-0.21,0.34l-0.08,2.04l0.21,1.55l0.69,1.89l1.61,3.06l3.22,4.28l1.58,1.61l1.23,0.7l1.53,0.14l2.77,-1.34l0.99,-0.18l2.36,0.49l0.37,-0.11l0.81,-0.82l1.12,-0.43l1.51,-0.06l3.32,0.89l-1.5,2.39l-0.7,2.57l-1.95,0.58l-2.39,-0.07l-2.35,0.4l-1.41,-1.04l-1.2,-0.55l-1.47,-0.29l-1.5,0.36l-1.72,2.08l-2.67,1.34l-0.94,1.5l-2.45,-0.32l-2.42,0.27l-3.46,1.46l-2.67,3.13l-2.71,1.84l-2.1,0.57l-1.96,-0.18l-1.26,-0.53l-2.53,-1.83l1.01,-1.84l1.11,-3.8l-0.15,-1.47l-0.78,-2.16l-2.21,-1.51l-1.96,0.2l-0.87,-0.35l-3.8,-2.62l-2.11,-0.17l-2.05,0.49l-0.58,-0.27l-0.32,-0.49l4.02,-2.95l4.18,-2.58l1.9,-0.29l2.58,-1.26l2.69,-1.85l0.16,-0.43l-0.38,-1.45l-0.61,-1.16l-0.44,-0.2l-2.12,0.61l-2.04,-1.04l-0.78,-0.8l-0.38,-0.11l-3.47,0.87l-2.0,-0.12l-4.23,0.79l-1.86,-0.74l-4.05,-2.24l-1.5,-0.45l-1.23,0.07l-0.17,-0.18l0.26,-0.11l1.0,-0.05l1.25,-0.41l0.37,-0.66l-0.06,-0.73l-0.3,-0.35l-2.07,-0.55l-1.91,-0.16l-1.14,-0.62l1.01,-0.01l2.22,0.57l3.41,0.21l3.09,0.58l2.9,-2.06l0.42,-0.47l0.03,-0.48l-0.45,-0.17l-2.95,0.84l-2.9,-0.52l-1.01,-0.69l-0.86,-1.03l-0.34,-1.11l0.24,-1.25l-0.37,-2.3l-1.35,-2.95l-1.18,-1.12l-0.51,-0.02l-0.12,0.49l1.04,2.12l0.38,1.4l0.62,1.3l-0.14,3.34l-0.31,0.96l-0.98,0.24l-2.85,-0.46l0.34,-1.53l-0.17,-0.42l-0.46,0.01l-1.0,0.76l-1.19,1.74l-0.91,0.23l-2.56,-0.19l-4.62,1.23l-0.29,0.29l-0.98,3.07l-0.88,1.69l-1.92,2.66l-3.91,3.98l-4.21,1.88l-0.96,0.3l-1.74,-0.36l-1.2,0.75l-0.41,0.86l-0.01,1.39l0.97,1.2l0.72,3.13l-0.1,0.48l-1.51,-1.33l-2.41,-0.84l-2.58,0.32l-2.62,1.37l-1.64,0.47l-0.83,-0.31l-0.73,-0.0l-0.55,0.61l0.02,0.59l-3.8,-0.88l-1.69,-0.86l-1.12,-1.36l0.85,-0.48l2.12,-0.14l0.52,-0.22l0.43,-1.31l-0.26,-1.46l0.79,-0.97l1.38,-0.95l0.92,-1.05l0.2,-1.44l1.39,-0.67l1.45,-1.41l0.77,-2.41l-0.83,-1.85l-0.2,-2.07l0.28,-0.4l1.14,-0.6l1.45,-0.44l0.09,2.09l0.34,0.39l0.54,-0.02l0.42,-0.27l0.59,-0.99l0.99,0.29l0.82,-0.29l1.27,0.75l0.93,0.19l0.91,-0.33l0.51,-0.46l0.27,0.08l1.09,1.38l0.43,0.14l3.15,-0.45l1.01,-0.9l-0.07,-0.59l-2.61,-1.84l0.21,-3.09l-0.33,-1.0l-0.6,-0.9l-2.29,-1.05l-1.8,-1.18l-0.11,-1.31l-0.67,-0.88l0.48,-2.47l-0.27,-0.76l-0.39,-0.34l-0.89,-0.13l-0.84,-0.52l-0.72,-0.85l-2.31,-1.37l-0.23,-0.4l-0.12,-0.51l0.82,-2.15l0.34,-1.26l0.02,-0.85l-0.29,-2.08l-1.12,-1.57l-0.78,-0.17l-1.42,0.65l-1.15,-0.9l-1.22,-2.1l-0.27,-0.19l-3.33,-0.54l-0.34,0.13l-0.59,0.67l-0.37,-0.7l-0.48,-0.26l-0.5,0.06l0.14,-0.47l-0.18,-0.46l-0.76,-0.44l-1.93,-0.04l-0.67,-0.23l-0.22,-0.69l-0.57,-0.44l-1.12,-0.28l-0.89,-0.5l-1.04,-0.93l-1.53,-0.6l-2.47,-0.45l-1.85,1.0l-1.08,-0.18l-1.37,0.99l-2.85,0.05l-2.39,-0.27l-2.8,1.62l-0.38,0.61l-4.06,0.91l-0.29,0.29l-0.37,1.5l-1.39,1.88l-9.4,1.42l-4.0,1.52l-1.37,1.36l-2.09,0.42l-4.14,-3.56l-1.48,-0.38l-1.53,0.15l-1.38,0.47l-1.27,0.08l-1.51,-0.63l-0.93,0.12l-4.48,-0.97l-3.48,0.03l-2.69,-1.58l-1.04,-0.1l-0.97,0.78l-0.47,0.69l-2.08,0.84l0.02,-1.1l-0.38,-0.65l-0.84,-0.78l-0.35,-0.17l-1.15,0.09l-1.1,-0.44l-0.93,-1.27l-1.31,-0.66l-0.96,-0.23l-0.94,-1.63Z\", \"name\": \"Ukraine\"}, \"SE\": {\"path\": \"M520.76,323.75l2.31,0.87l0.76,-0.19l0.66,-0.42l0.14,-0.52l-0.81,-1.59l-0.71,-0.77l-0.24,-0.55l1.04,-0.19l1.1,0.06l0.35,-0.17l0.9,-1.54l-0.49,-1.97l-1.44,-0.87l-0.95,-0.25l-1.88,-2.97l-2.08,-1.66l-3.6,-6.12l-1.32,-4.24l-0.51,-0.26l-0.86,0.28l-0.9,-3.2l-0.08,-1.27l-0.26,-0.35l-1.72,-0.66l-0.41,-4.77l-0.3,-0.35l-1.93,-0.51l-1.22,-2.08l-0.24,-4.28l-0.2,-0.32l-1.38,-0.8l-0.89,0.07l0.29,-1.68l-0.64,-4.03l-0.21,-3.69l-0.54,-1.23l-0.27,-1.18l0.49,-1.42l0.99,-0.13l1.05,0.84l1.08,2.44l1.23,0.55l1.65,-0.68l1.12,-2.03l1.2,-5.71l-1.57,-5.83l2.05,-2.13l1.28,-3.25l0.59,-0.43l2.52,-0.49l1.73,-1.15l2.66,-2.86l0.48,-2.89l0.02,-1.31l0.49,-1.01l0.49,-1.96l-0.5,-2.21l-3.21,-7.03l-0.24,-1.94l1.98,-0.63l2.88,-0.11l0.56,-0.36l1.04,-2.45l0.74,-1.06l0.73,-2.76l-0.09,-0.33l-1.67,-1.94l-2.22,-2.02l-1.56,-0.72l-4.24,-2.89l1.8,-9.09l0.16,-2.55l-2.56,-6.53l0.33,-2.73l-0.41,-4.04l1.37,-1.57l0.05,-0.47l-1.07,-1.87l-1.79,-4.1l2.76,-4.11l-0.39,-2.32l1.58,-1.5l4.88,-5.8l1.66,-1.2l2.57,-1.06l2.85,-0.52l1.24,0.01l8.94,1.31l0.91,-0.69l0.88,-1.26l1.06,-1.69l0.15,-2.08l-0.38,-2.85l-0.59,-1.74l-5.55,-2.58l6.02,-7.64l3.22,-4.96l1.0,-2.06l0.79,-1.0l0.94,-7.63l1.16,-3.36l0.0,-1.23l-1.16,-5.96l6.39,-0.83l4.58,-1.92l1.56,-1.27l0.14,-0.39l-0.78,-3.91l1.68,-1.31l4.43,-4.91l4.77,-4.71l2.37,-1.99l0.4,-2.56l-1.05,-2.31l-3.01,-3.8l0.7,-1.43l3.43,-1.05l1.77,-1.7l2.84,-6.36l5.14,-3.08l1.96,-1.6l7.81,3.15l0.47,-0.13l2.84,-3.95l0.73,-1.63l-0.37,-6.41l0.17,-1.15l1.64,-0.55l0.91,-0.15l5.22,1.44l3.88,0.18l2.76,0.64l8.28,2.42l1.69,0.08l3.69,-2.87l-0.1,-0.68l-2.97,-1.22l1.87,-1.21l1.29,-1.61l1.12,-2.04l0.39,-2.24l-0.15,-1.32l-0.84,-1.04l-1.57,-1.44l5.83,-0.32l3.49,1.28l0.2,1.48l0.21,0.29l3.54,1.83l1.05,0.98l2.15,1.45l0.7,0.87l2.01,0.92l5.16,3.06l2.76,1.04l2.32,0.34l5.63,1.69l0.91,0.52l3.19,2.48l1.11,2.74l0.34,0.25l1.62,0.13l0.47,0.87l1.61,1.66l2.08,1.38l-1.82,1.61l-0.19,1.9l0.17,2.33l0.55,1.9l-0.04,0.38l-0.97,1.73l-0.15,1.45l0.57,0.59l2.52,0.22l0.75,0.3l0.47,1.84l-1.41,1.11l-0.54,0.92l-0.09,1.32l0.26,1.35l0.56,1.56l3.57,4.33l0.53,1.22l-0.61,0.75l-0.61,1.57l-0.38,2.92l-1.22,1.48l-0.86,0.53l-0.43,1.07l-0.12,1.6l0.36,2.86l0.3,0.93l0.47,0.66l2.15,1.04l1.83,3.4l1.28,3.65l-3.01,0.43l-2.89,-1.0l-1.28,0.49l-2.34,0.03l-2.67,0.41l-1.55,1.09l-2.27,-1.04l-2.31,-1.86l-0.51,0.01l-1.64,1.38l-0.76,0.19l-1.06,-1.24l-0.87,-0.21l-0.37,0.1l-0.57,0.59l-0.39,1.1l-0.68,0.98l-0.35,3.09l-1.94,-0.26l-0.44,0.48l0.14,0.6l0.53,0.47l-0.38,0.23l-2.14,-0.05l-0.38,0.24l-0.23,0.53l0.05,0.4l0.47,0.62l-0.61,0.64l-2.57,0.44l-1.83,0.02l-0.55,0.67l-0.09,0.87l0.29,0.61l0.77,0.46l0.08,0.6l-1.88,-1.4l-0.5,0.08l-0.3,0.57l0.37,0.76l0.98,0.92l0.49,0.78l0.41,0.89l-0.06,0.55l-1.93,2.38l-3.11,2.99l-0.85,1.59l0.1,0.49l1.82,1.74l1.54,3.91l1.61,1.71l-0.59,1.44l-2.79,1.72l-3.32,2.76l-3.43,6.64l-1.04,0.81l-2.98,1.11l-1.22,1.15l-2.17,1.25l-4.05,1.19l-1.79,1.55l-0.81,1.54l-0.53,0.07l-0.85,-0.58l-1.19,-0.47l-0.54,0.31l-0.16,1.14l-1.25,-0.75l-0.51,0.08l-0.97,1.16l-0.66,1.65l-2.53,2.16l-2.77,-0.4l-0.7,0.56l0.17,0.62l0.24,0.09l-0.68,0.01l-1.18,0.44l-0.74,-0.03l-0.39,0.27l-0.94,2.25l-2.29,0.6l-0.72,0.96l0.32,0.59l2.05,0.13l-0.3,1.29l-2.74,0.93l-1.07,1.24l-0.71,-0.02l0.17,-0.42l-0.38,-0.55l-1.69,0.04l-0.49,-0.91l-0.6,-0.13l-0.37,0.29l-0.14,0.41l0.22,0.91l1.02,2.21l-0.33,0.64l-0.45,0.38l-0.03,0.58l0.55,0.51l0.92,0.28l-0.87,0.37l-1.41,1.48l-1.42,0.04l-1.13,1.05l-0.71,-0.0l-0.83,-0.64l-1.34,-0.55l-0.52,0.21l-0.43,0.96l-0.1,0.89l0.78,2.12l1.53,1.63l0.68,0.36l-1.12,1.3l-1.84,6.3l0.33,1.97l0.58,1.46l-0.97,-0.08l-1.82,-0.67l-0.53,0.45l0.23,1.26l-1.12,1.82l0.44,2.39l-0.34,1.5l0.12,0.38l0.46,0.43l0.2,0.66l-0.42,0.9l0.19,0.54l0.44,5.34l-0.11,0.85l0.99,2.76l-0.36,2.22l0.14,0.35l1.48,1.23l2.8,0.05l0.33,0.2l0.85,1.75l0.4,0.25l1.24,-0.12l1.71,-0.81l0.79,-0.14l0.7,1.43l2.09,2.15l1.35,1.02l1.94,0.48l1.89,1.5l-0.27,1.82l0.15,0.38l1.01,0.75l2.41,0.77l1.86,2.64l0.72,2.14l-0.21,1.13l-3.27,1.95l-1.93,1.86l-2.32,1.47l-0.98,0.35l-0.79,0.74l-0.61,0.26l-0.88,-0.13l-2.58,1.36l-1.58,-0.34l-0.53,-0.48l0.43,-2.78l-0.37,-1.02l-0.35,-0.45l-0.48,-0.12l-1.2,0.52l-0.23,0.45l0.12,0.6l-1.5,0.03l-1.87,-0.87l-0.56,0.31l-0.18,1.3l-3.74,-1.32l-1.27,0.33l-1.72,-0.69l-0.39,0.05l-1.05,0.78l-1.13,-0.25l-0.91,-0.97l-0.61,0.04l-1.28,1.73l-5.63,0.79l-0.35,0.33l0.23,0.43l1.53,0.65l6.27,-0.12l1.89,0.46l2.17,-0.28l1.93,1.37l1.52,0.39l1.68,1.6l0.46,0.07l0.8,-0.41l1.24,0.06l1.39,0.48l4.15,-0.06l1.52,-1.15l2.06,0.22l1.06,-0.31l0.88,-0.73l1.74,-0.07l1.3,-0.7l0.43,0.17l0.49,0.84l-1.13,0.49l-1.07,0.03l-0.38,0.3l-0.54,2.14l-1.03,1.23l-2.47,0.91l-1.74,1.22l-1.82,0.88l-1.06,-0.11l-1.26,0.94l-2.84,1.13l-1.56,1.59l-3.24,1.35l-1.66,1.1l-4.46,0.06l-4.37,-0.25l-1.55,0.56l-0.25,0.42l0.35,0.35l1.33,0.16l0.92,0.49l1.39,-0.17l4.0,0.51l1.35,1.35l-0.8,0.39l-2.29,0.49l-0.3,0.52l1.51,4.14l-0.88,1.13l-0.06,4.42l-0.96,0.07l-0.36,0.29l-0.56,1.98l0.4,1.19l-0.03,2.25l0.28,1.52l0.62,1.3l-0.25,1.17l-2.12,3.38l0.05,1.51l0.64,2.28l-2.37,6.77l-1.76,2.26l-0.93,1.78l-2.08,5.31l-0.95,0.97l-1.03,0.66l-1.28,-0.67l-1.43,-0.43l-1.67,0.06l-2.42,0.6l-3.73,-0.4l-3.83,0.25l-0.92,0.53l-0.19,0.46l0.43,1.51l-0.8,0.15l-1.2,-0.5l-0.35,0.02l-2.2,1.42l-1.9,1.7l-0.71,1.14l-0.17,2.38l1.76,3.55l-2.0,2.18l-1.06,0.07l-3.83,-0.68l-6.49,1.54l-5.29,-1.1l0.53,-1.06l-0.02,-0.93l0.53,-3.04l-0.08,-1.23l-0.52,-1.24l-1.43,-1.42l-3.24,-4.83l-1.03,-2.15ZM610.35,291.1l-0.27,0.3l-0.17,0.86l-0.16,-0.02l-0.35,-0.49l0.95,-1.01l0.99,0.04l-0.99,0.33ZM608.6,293.08l-0.69,0.4l-0.58,1.21l-1.69,0.68l-0.21,0.33l-0.31,4.36l1.23,1.47l-1.23,0.69l-0.63,0.84l-0.52,1.41l-2.03,0.82l-0.98,0.77l-1.3,1.61l-0.6,1.99l-1.05,0.77l-0.55,0.09l0.48,-1.02l1.04,-1.38l-0.04,-0.53l-0.96,-0.91l-0.59,-1.44l-0.71,-1.05l0.57,-1.33l-0.31,-2.11l0.09,-1.92l1.91,-1.83l1.63,-1.96l1.69,-1.37l2.27,-0.59l0.99,0.53l0.56,-0.21l0.42,-1.14l0.49,-0.18l1.6,1.03ZM602.8,260.19l0.1,-0.33l0.6,-0.21l-0.46,0.3l-0.23,0.24ZM600.15,269.23l0.11,-0.28l0.27,-0.3l-0.36,0.57l-0.02,0.01ZM574.47,322.99l-0.65,0.71l-0.31,-0.99l-0.09,-3.23l0.23,-1.55l2.86,-5.75l1.39,-0.63l1.86,-3.66l0.51,-1.66l1.27,-2.75l0.2,-0.26l0.38,0.11l-0.59,0.73l0.06,1.24l-2.27,4.27l-0.62,2.77l-0.83,0.77l-3.37,9.86Z\", \"name\": \"Sweden\"}, \"IL\": {\"path\": \"M818.82,737.12l2.59,-4.48l1.71,-4.57l1.6,-6.28l2.09,-5.29l0.38,-1.55l1.22,-0.1l2.77,0.19l1.29,-0.9l0.49,-1.81l0.95,0.09l0.28,-0.44l2.27,-1.55l-0.11,1.21l0.91,2.08l-0.48,0.82l0.2,1.43l0.36,0.65l-1.57,2.88l-2.23,0.79l-0.69,0.76l-0.34,3.5l-0.4,-0.04l-0.91,-0.61l-0.17,-0.51l-0.49,-0.42l-2.73,-0.41l-1.89,1.3l-0.74,1.84l-0.75,2.7l0.43,3.83l-0.38,0.84l0.02,0.67l0.55,0.34l1.08,-0.28l1.47,0.67l-1.93,1.04l-1.21,1.12l-1.16,3.23l0.09,0.66l0.79,0.56l2.62,-0.22l2.48,-0.87l1.76,-0.87l-0.6,3.28l0.49,1.55l-2.7,6.71l-1.31,3.79l-0.02,4.22l-0.98,2.42l-1.26,6.16l-0.43,0.53l-3.09,-9.92l-1.74,-3.78l-0.55,-2.25l-3.23,-8.89l1.2,-1.09l0.15,-1.18l2.27,-2.33l0.09,-0.55l-0.52,-0.66Z\", \"name\": \"Israel\"}}, \"height\": 790.3366477906968, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 11.5}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-in-mill.js",
    "content": "jQuery.fn.vectorMap('addMap', 'in_mill',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 932.9661457393942, \"bbox\": [{\"y\": -4125883.782575976, \"x\": 7589536.343670783}, {\"y\": -752405.3962423205, \"x\": 10843813.641475728}], \"left\": 0}], \"paths\": {\"IN-BR\": {\"path\": \"M484.32,277.67l0.73,-0.96l-0.3,-0.93l-0.88,-0.99l2.18,-0.33l2.83,0.22l2.64,-2.44l0.65,0.88l1.12,0.53l0.73,1.16l1.44,0.13l0.88,1.39l0.78,0.52l8.92,1.6l1.49,1.54l0.75,2.31l-0.09,2.43l-1.0,2.2l0.17,0.95l0.56,0.5l3.94,1.04l1.49,-0.43l1.1,0.93l2.15,0.84l0.79,1.78l1.96,0.85l0.04,0.75l0.36,0.35l0.96,0.04l2.23,-0.69l0.89,0.36l0.08,1.86l1.02,1.19l3.03,0.83l1.86,-0.39l1.41,-1.3l1.63,-0.0l2.51,-1.3l2.45,-0.81l2.64,1.62l0.21,0.97l-0.22,2.39l0.42,1.46l2.16,1.84l1.01,-0.0l0.22,0.89l0.54,0.28l1.3,-0.5l2.57,-2.01l1.7,-0.38l3.07,1.67l1.2,0.08l1.34,0.59l2.79,-0.96l0.36,0.09l0.11,0.57l0.46,0.36l1.14,-0.05l4.28,1.79l1.88,1.41l4.91,2.34l0.65,-0.32l0.42,-0.67l1.5,0.42l1.07,-0.27l0.84,-0.55l0.93,-1.39l2.89,-1.18l1.56,-1.41l0.73,3.4l1.29,2.14l1.24,0.5l2.44,-0.41l0.71,1.14l2.25,0.92l0.7,-0.4l0.94,-1.66l1.64,-0.68l1.77,0.1l2.15,1.18l1.43,0.3l2.71,-1.46l0.9,0.58l0.74,0.03l0.64,-0.42l0.39,-1.06l1.69,0.41l1.28,-0.84l0.78,0.58l1.04,1.56l1.36,0.93l1.28,-0.0l1.4,-1.3l0.98,-1.67l0.32,-2.54l1.11,0.19l1.81,-0.54l-0.25,1.26l2.57,2.21l-0.61,0.46l-0.14,0.71l1.31,0.93l0.18,0.65l-0.99,0.12l-1.4,1.13l-1.21,0.45l-3.14,3.08l-1.92,1.35l-1.46,0.45l-1.05,1.31l-3.05,2.6l-0.73,2.89l-0.66,0.33l-0.26,0.54l0.49,1.44l1.99,1.18l1.38,2.54l1.16,1.11l1.88,0.79l1.0,0.91l0.39,1.89l-0.42,2.19l0.68,1.39l-1.31,-0.23l-0.83,-0.82l-1.07,-0.2l-2.31,1.07l-0.91,0.98l-2.54,1.15l-0.86,1.17l-0.03,0.52l1.06,1.26l0.71,0.03l1.1,2.34l-1.16,1.61l-1.13,-0.8l-2.11,0.07l-2.4,-0.65l-0.85,-1.16l-1.55,-0.73l-2.09,1.48l-1.42,3.04l-1.75,-0.38l-1.94,0.54l-0.7,1.28l-0.53,2.54l-1.11,-0.28l-1.23,0.43l-1.15,1.08l-0.95,1.56l-0.02,4.14l-1.58,2.6l0.22,1.29l-0.25,2.5l-0.67,2.32l-3.65,-0.85l-1.11,1.73l-0.08,0.78l-1.8,-0.56l-1.86,-1.14l-0.7,0.13l-0.57,0.88l-0.58,0.3l-1.44,0.17l-1.24,-0.58l-1.1,0.08l-2.84,2.71l-0.35,2.31l-0.66,0.61l-0.34,1.45l-4.74,-2.95l0.93,-1.5l-0.46,-2.24l-2.49,-0.71l-1.39,0.5l-1.2,-0.75l-0.53,-2.93l-0.94,-1.11l-1.16,-0.27l0.25,-0.54l-0.25,-0.67l-1.15,0.06l-1.82,1.29l-1.16,0.12l-1.33,-1.63l-1.34,-0.72l-2.71,0.04l-1.03,0.64l-0.64,1.13l-0.35,1.75l-1.32,0.86l0.46,1.43l-0.08,1.26l-2.09,-0.13l-1.88,1.89l-1.05,-0.3l-2.8,-0.01l-3.56,0.74l-0.45,0.74l-3.09,1.2l-0.45,0.51l-0.04,0.72l-1.53,1.38l0.11,-1.07l-0.45,-0.39l-3.33,1.32l-1.97,-0.04l-0.37,-0.38l-0.39,-2.05l-0.44,-0.37l-0.85,0.15l-0.38,-1.56l-1.06,-0.48l-3.69,2.24l-0.86,1.72l-2.29,-0.51l-1.24,1.5l-0.27,0.79l-0.51,0.49l-0.76,0.1l-1.39,-1.35l-2.08,-1.34l-1.51,-1.71l0.38,-0.69l-0.02,-1.06l-0.71,-1.19l-0.78,-0.19l-0.66,0.49l-0.73,-0.27l-1.47,0.23l-0.36,0.39l-0.0,1.03l-0.3,-0.98l-0.78,-0.09l-0.53,1.26l-0.76,-0.87l-1.6,-3.93l-0.85,-0.67l-0.69,0.16l-0.72,1.49l-2.03,1.42l-2.05,0.28l-1.37,-0.23l-0.86,0.31l-0.55,0.68l-1.94,0.19l-4.92,-0.81l0.03,-2.88l-0.43,-1.19l0.61,-1.14l-0.28,-1.64l-0.55,-0.62l-2.0,-0.71l-2.6,-2.78l0.35,-1.72l-0.05,-2.24l-1.27,-2.58l0.34,-3.02l0.62,-1.14l1.7,-1.27l11.06,-6.27l0.86,-0.66l0.44,-0.81l2.19,-0.92l3.62,-3.02l1.7,-2.16l2.53,-1.98l0.88,-0.25l0.74,0.43l-0.04,1.29l0.37,0.92l0.82,0.61l1.2,0.16l1.16,-0.32l0.69,-0.62l0.03,-1.0l-0.41,-1.1l0.17,-0.52l1.25,-0.49l1.93,1.49l1.54,0.6l1.32,0.01l2.29,-1.37l0.73,-1.81l-0.34,-0.78l-2.28,-2.05l-2.42,-0.33l-1.18,-0.71l-0.5,-0.92l-0.82,-0.67l-3.49,0.28l-0.93,-0.9l-0.59,-1.69l-0.97,-0.39l-0.91,-1.45l-2.52,-1.19l-1.28,-2.57l-1.04,-0.81l0.41,-0.8l2.49,-0.34l0.91,-0.6l1.31,0.19l0.82,-0.39l0.25,-0.57l-0.78,-1.52l0.71,-1.33l0.02,-0.66l-0.45,-0.55l-2.83,-0.73l-2.18,-1.58l-1.33,0.6l-1.31,-0.25l0.0,-2.11l0.43,0.93l0.6,0.15l0.88,-1.02l1.95,-0.62l1.34,-2.77l8.58,0.29l0.57,-0.33l0.16,-0.55l-0.47,-0.95l-2.41,-2.3l-0.79,-0.41l-1.03,-0.04l0.16,-2.85l-0.51,-1.31l-1.39,-0.46l-1.37,0.64l-2.26,-1.46l-1.22,-2.32l-0.19,-2.14l-0.79,-0.77l-0.57,-1.24l-1.11,-1.03l0.06,-2.11l-0.66,-1.12l-1.11,-0.96l0.19,-1.5l-0.52,-0.38l-0.62,0.03Z\", \"name\": \"Bihar\"}, \"IN-PY\": {\"path\": \"M432.94,621.28l0.12,-0.11l0.06,0.17l-0.03,-0.0l-0.16,-0.05ZM434.43,621.71l0.34,-0.0l0.03,0.12l-0.21,-0.03l-0.16,-0.08ZM355.48,770.41l0.24,-0.33l0.83,0.78l1.19,-0.08l-0.49,1.07l1.07,0.9l0.61,-0.12l1.09,-0.94l-0.97,2.81l-1.98,-0.18l-0.66,-0.53l0.23,-1.51l-1.16,-1.87ZM356.86,803.07l0.79,-0.26l-0.03,-0.93l0.92,0.32l0.8,-0.45l0.68,0.07l0.07,4.51l-0.78,-0.6l0.25,-0.69l-0.28,-0.5l-2.69,-0.99l0.29,-0.48ZM218.44,768.85l0.02,-2.05l1.16,0.12l1.63,-1.29l0.73,0.2l-0.37,0.3l-0.72,-0.09l-0.44,0.41l-0.27,1.66l-1.25,1.09l-0.5,-0.37Z\", \"name\": \"Puducherry\"}, \"IN-DD\": {\"path\": \"M144.48,504.35l0.06,-0.81l0.49,-1.24l0.48,0.6l0.06,1.15l-1.09,0.3Z\", \"name\": \"Daman and Diu\"}, \"IN-DN\": {\"path\": \"M146.62,508.98l1.49,0.02l0.64,-1.32l0.96,0.1l1.81,-1.3l0.0,1.2l1.42,0.47l-2.51,1.64l-0.2,0.71l0.26,1.36l0.63,0.79l1.15,0.12l0.71,-0.32l0.3,-1.06l1.1,0.26l-0.01,2.67l-0.38,1.21l-1.24,-0.9l-1.12,0.47l-0.96,-0.54l-0.98,0.61l-1.35,-2.56l-0.26,-1.86l-1.39,-1.3l-0.07,-0.48Z\", \"name\": \"Dadra and Nagar Haveli\"}, \"IN-DL\": {\"path\": \"M269.18,237.92l-1.09,-1.45l1.02,-1.35l1.39,-0.53l0.24,-1.0l0.78,-0.87l-0.35,-3.41l0.21,-0.9l1.59,-0.79l1.2,-0.05l0.91,-0.88l2.3,0.67l1.4,-0.39l0.27,0.61l-0.2,0.97l0.58,1.16l2.51,2.23l0.25,0.66l0.62,2.22l-0.95,1.04l-0.26,0.81l0.7,1.44l-2.32,0.75l-0.66,0.79l0.48,1.01l-0.98,0.25l-2.63,-1.33l-0.89,-1.75l-2.19,-1.1l-0.66,0.01l-0.48,0.79l-2.76,0.39Z\", \"name\": \"Delhi\"}, \"IN-NL\": {\"path\": \"M779.92,344.86l0.24,-2.48l-0.5,-1.53l-1.51,-1.38l-1.72,-2.41l5.61,-4.5l1.79,-2.48l3.84,-3.32l0.18,-0.6l-0.86,-1.43l1.99,-1.01l0.92,0.2l0.22,1.55l-1.05,1.7l0.18,0.61l0.39,0.2l3.95,-0.86l1.52,-1.07l1.37,-2.13l-0.58,-1.75l0.0,-0.99l1.01,-1.64l0.11,-3.4l2.88,-3.87l2.12,-1.95l0.79,-3.49l2.04,-2.58l0.89,2.11l0.8,0.16l0.76,-0.33l1.67,-1.57l0.74,-1.09l0.25,-1.63l1.49,-1.74l1.12,-0.19l0.86,-0.7l1.24,0.02l2.52,-1.07l3.03,-1.88l1.13,-0.97l1.92,-2.9l1.52,-1.46l1.31,0.78l1.78,-0.04l4.5,-2.81l1.45,1.13l0.13,1.9l-0.88,1.28l-0.18,0.95l0.32,0.93l0.81,0.73l-0.26,2.06l0.63,1.74l-1.12,0.02l-0.96,1.1l-1.61,0.79l-0.48,2.09l-2.17,2.74l0.78,2.22l-0.69,2.6l0.11,2.79l0.48,1.15l0.9,0.47l-0.42,0.83l0.3,2.22l0.56,0.6l1.14,0.39l0.23,0.64l-2.48,2.95l-2.14,1.25l-0.24,1.45l0.63,3.47l-0.08,1.03l-1.42,0.62l-3.3,4.31l-0.08,0.67l-0.92,0.26l-1.66,2.11l-2.18,0.49l-1.29,0.92l-0.79,-0.14l-2.19,-1.69l1.06,-3.49l0.1,-2.14l-0.72,-0.37l-2.49,2.12l-1.72,0.98l-1.48,1.73l-1.75,0.89l-3.83,0.5l-1.34,-0.81l-1.99,0.08l-1.96,-1.16l-6.95,0.35l-1.1,0.4l-0.54,1.41l0.25,0.38l1.19,0.4l0.13,0.77l-3.93,3.81l-0.97,2.24l-1.16,1.64l-1.08,-1.27l-1.34,-0.42l-1.8,-1.16Z\", \"name\": \"Nagaland\"}, \"IN-WB\": {\"path\": \"M545.45,405.85l-0.5,-0.98l0.56,-0.42l5.08,-0.89l0.31,-0.72l-0.47,-1.55l0.74,-0.53l1.67,0.87l0.84,0.07l-0.32,2.17l0.35,0.57l1.81,0.66l1.35,0.95l1.69,-0.33l1.95,-1.65l0.58,-2.23l1.76,-1.44l7.16,-2.58l3.6,-0.58l1.37,-0.52l0.56,-0.8l0.21,-1.04l-0.38,-1.28l0.13,-0.59l1.64,-2.23l2.89,1.56l1.05,0.13l2.02,1.46l1.68,0.42l1.24,-0.23l0.42,-0.94l-0.98,-1.3l1.48,0.29l0.47,0.6l0.77,0.13l0.6,-0.83l0.08,-1.2l0.67,-0.26l0.38,-0.66l-0.04,-1.15l-1.61,-2.24l1.91,-0.48l0.42,1.44l0.56,0.34l1.97,-0.7l1.91,0.1l1.22,-1.17l-0.03,-2.65l0.4,-0.06l1.12,0.83l0.64,-0.01l0.71,-0.96l0.29,-1.21l1.52,0.03l0.69,-0.57l0.01,-0.7l-0.45,-0.74l-0.74,-0.19l-0.01,-0.67l2.93,-1.81l1.74,-3.39l0.04,-1.52l0.75,-1.33l-0.41,-1.07l0.04,-1.25l-0.42,-0.42l1.37,0.59l1.07,-0.12l0.94,-0.6l0.46,-0.93l-0.2,-0.47l-0.58,-0.24l0.58,-0.51l0.08,-0.51l-0.69,-2.04l-0.63,-1.08l-1.12,-0.31l-0.14,-0.29l0.68,0.28l0.62,-0.34l0.26,-2.07l0.61,-1.34l-0.14,-1.71l-1.05,-3.44l-2.07,-1.79l-0.21,-1.92l0.46,-1.62l0.97,-1.02l0.74,-1.55l-0.87,-2.23l-0.57,-0.72l-0.74,-0.08l-0.57,-0.84l0.56,-0.79l2.33,-1.03l0.96,-1.0l2.16,-0.97l1.4,1.03l1.9,0.33l0.47,-0.45l-0.11,-1.05l-0.63,-0.84l0.41,-2.35l-0.5,-2.1l-1.25,-1.16l-1.89,-0.81l-1.11,-1.14l-1.2,-2.32l-1.92,-1.09l-0.39,-1.0l0.85,-0.61l0.64,-2.73l2.92,-2.46l1.08,-1.34l1.42,-0.41l1.96,-1.39l2.66,-2.74l1.56,-0.7l1.28,-1.06l1.18,-0.21l0.32,-0.73l-0.46,-1.15l-1.07,-0.55l0.79,-0.66l-0.12,-0.71l-1.34,-1.38l-1.14,-0.68l0.23,-1.51l-0.57,-0.35l-2.11,0.6l-0.78,-0.16l2.21,-5.06l0.16,-2.07l-0.51,-3.36l-1.72,-3.31l-1.28,-1.98l-1.44,-0.95l-1.12,-1.75l0.87,-4.21l1.51,1.11l0.39,1.54l0.74,0.73l4.09,0.21l3.92,1.74l2.29,-0.56l2.85,-2.48l2.71,0.28l1.59,-0.16l0.79,0.57l1.28,0.26l2.69,1.54l0.46,1.37l0.19,3.46l0.29,0.34l1.63,-1.15l0.76,1.97l0.84,0.27l1.26,-0.33l0.64,0.28l1.07,0.92l0.7,1.54l0.63,0.6l3.73,0.29l1.04,-0.28l0.94,-0.75l1.87,-0.3l3.01,1.82l2.09,-0.18l2.3,0.6l0.6,0.46l-0.29,1.59l0.63,0.37l2.22,-0.41l1.68,0.7l2.49,0.24l0.75,-0.98l0.75,2.6l0.28,3.28l-0.9,2.05l-0.46,2.89l-0.88,0.81l0.31,0.9l-1.25,0.59l-0.72,1.5l-0.86,0.56l0.04,1.22l-1.55,0.49l-0.18,-0.8l-0.86,-0.37l-1.27,0.64l-0.02,1.22l-0.94,0.39l-0.42,1.08l0.57,0.68l-0.48,0.58l0.23,0.75l1.09,0.15l-1.54,1.52l-0.38,1.81l-1.38,-1.31l-2.29,0.18l-0.73,-0.75l-1.31,0.6l-0.84,-0.27l-1.33,-1.22l-1.01,-0.45l-0.8,-1.36l-2.47,-1.14l-0.46,-0.78l-0.28,-2.06l-1.01,-1.97l-0.01,-0.39l0.84,-0.04l0.09,-1.08l-1.36,-0.64l-0.24,-0.96l-1.33,-0.55l-1.96,-1.58l-0.57,-0.06l-0.99,0.67l-0.74,1.31l-0.01,0.73l0.75,0.92l1.61,0.68l0.49,1.17l0.62,0.23l0.34,0.57l0.65,0.14l-0.29,0.34l-1.18,0.29l-0.68,-0.22l-1.29,-1.25l-1.04,-0.25l-0.91,0.46l-0.72,1.18l-0.91,-1.51l-1.33,-0.61l-1.97,0.6l0.81,-0.62l0.24,-1.27l-1.29,-0.96l-0.66,-1.82l-1.2,-0.43l-0.74,-1.07l-1.95,-0.46l-2.01,-1.77l-1.53,-0.53l-0.33,-2.09l-0.46,-0.49l-0.9,0.45l-0.68,1.2l-1.21,3.24l0.06,0.87l0.87,0.76l0.58,-0.35l0.14,-0.78l2.98,0.87l0.96,2.56l-1.84,-0.15l-3.0,2.73l-0.3,2.13l-3.15,1.09l-1.89,1.47l-0.78,1.93l0.51,1.07l-0.12,0.57l-0.79,0.64l-1.63,3.72l0.4,2.48l1.35,2.12l1.02,0.06l2.3,-0.88l0.79,0.4l1.81,2.04l2.96,2.25l0.25,2.15l1.56,0.98l1.71,2.04l2.13,0.28l2.25,1.05l0.73,-0.2l0.76,-0.76l1.66,-0.37l1.12,1.2l-0.48,1.96l1.4,2.3l1.33,0.44l0.8,0.66l2.14,0.08l-0.15,0.49l-1.45,1.22l-0.04,1.1l-0.32,0.07l-0.24,0.62l-2.61,-0.88l-0.47,0.18l-0.58,0.98l-1.64,-0.16l-2.86,-0.85l-1.23,-0.01l-1.12,0.71l-2.46,-0.78l-1.5,0.37l-0.35,0.76l-0.17,3.89l-0.99,1.68l-0.5,1.66l-1.59,2.27l-1.78,-0.3l-0.37,-1.1l-1.21,-1.04l-1.33,0.16l-1.59,0.83l-0.21,0.5l0.78,2.11l-0.83,1.08l-0.67,0.34l-0.28,1.04l-0.9,0.53l-0.14,1.33l-0.83,2.23l0.28,0.45l0.9,0.3l0.73,1.05l0.07,1.91l1.05,1.48l0.84,0.18l8.01,4.07l2.42,1.81l5.01,0.7l1.0,-1.38l1.17,0.59l0.6,0.78l0.3,2.04l-0.42,0.68l-1.42,0.76l-0.3,0.7l-0.09,2.48l0.81,1.21l0.65,0.38l-0.58,0.9l0.35,2.32l-1.67,1.6l-1.68,0.07l-0.85,0.66l-0.02,1.23l-0.76,1.49l0.25,1.1l-0.6,3.39l0.72,0.51l-0.1,0.68l0.41,0.56l1.25,0.21l1.1,1.66l1.75,1.33l0.39,0.76l0.88,0.04l0.61,-0.71l-1.51,4.2l-1.03,1.81l-0.01,0.88l0.44,0.92l2.58,1.08l1.56,-0.51l3.8,1.0l-2.85,2.89l-0.46,0.98l-0.39,3.23l1.78,3.39l1.51,0.97l-0.23,1.76l-0.92,1.57l1.48,4.98l-0.13,0.51l-0.56,0.36l0.08,0.71l1.11,0.51l0.92,3.0l-0.39,1.34l0.91,2.85l-0.27,0.58l1.66,2.45l0.42,1.62l-1.03,0.69l-0.22,1.48l0.63,1.91l0.14,2.67l-1.18,0.15l-0.44,0.52l-1.34,-0.77l-0.36,-1.32l-0.38,-0.28l-0.81,0.22l-0.3,0.82l0.64,1.51l2.25,1.42l0.54,0.87l0.86,3.85l1.27,1.9l-0.01,1.43l-0.48,0.14l-0.33,-0.52l-0.69,-0.07l-0.64,0.78l-1.89,-1.22l-1.24,-0.27l-0.7,-3.49l-0.61,-0.28l-0.4,0.34l-0.62,2.07l0.63,2.03l-0.94,0.29l0.5,-1.05l-0.26,-0.97l-0.39,-0.27l-1.42,1.86l0.48,2.23l-0.61,0.28l-1.15,-0.41l0.33,-1.07l-1.1,-2.67l0.57,-3.6l-0.26,-0.99l0.59,-1.77l0.2,-2.12l1.06,-1.02l0.23,-0.74l-0.27,-0.9l-1.35,-1.0l1.61,-2.01l-1.14,-0.17l-1.44,1.2l-0.31,1.39l1.07,0.87l-0.15,0.5l-0.98,2.08l-1.2,-0.05l0.8,-2.06l-0.43,-2.86l1.34,-2.58l-0.1,-0.63l-0.99,-0.36l-1.64,3.33l0.18,2.1l-0.71,1.31l-0.13,2.49l-0.97,2.58l-0.07,2.69l0.46,0.46l1.46,-0.37l0.16,0.55l-0.31,1.14l-0.55,-0.13l-0.4,0.44l0.23,2.14l-0.66,0.46l-0.07,1.76l-0.47,-0.41l-0.69,0.01l-0.11,1.32l-0.51,-0.09l0.07,-1.06l0.6,-0.74l0.46,-2.03l-0.73,-2.54l0.85,-1.8l-0.11,-1.1l-0.98,-1.56l0.53,-1.9l-0.75,-0.79l-0.46,-0.03l-0.08,0.85l-0.75,1.52l0.64,2.32l-0.63,0.42l-0.66,1.98l0.48,3.04l-0.28,0.49l-1.35,0.68l-0.22,-1.85l0.28,-0.81l-0.46,-0.52l-1.07,0.39l-0.38,-0.84l-0.84,0.2l-0.44,-2.18l-0.57,-0.66l-0.63,-0.16l-0.42,0.44l0.08,0.75l1.01,3.85l-0.42,1.45l0.66,1.05l-0.95,0.35l-0.35,-1.27l-0.51,-0.52l-0.6,0.03l-0.58,-1.49l0.87,-2.47l-0.23,-0.94l0.2,-0.63l-1.67,-3.15l-0.24,-2.24l0.24,-0.83l2.02,-2.79l-0.71,-3.23l-3.61,-1.75l-0.09,-0.54l-0.61,-0.27l-0.84,0.43l-0.77,-0.39l-1.03,-1.26l-0.97,-4.14l-0.49,-0.54l-0.92,-0.13l-0.41,0.6l0.54,0.86l0.74,3.83l0.6,1.16l1.56,1.46l3.72,0.8l0.73,0.61l0.32,1.05l-0.22,0.69l-1.51,1.64l-2.08,0.56l0.04,1.33l-2.0,4.07l-2.48,1.79l-1.01,1.44l-4.96,3.02l-2.47,0.14l-4.13,1.11l-1.25,-2.09l0.04,-2.21l-0.26,-0.62l-0.76,-0.57l-4.7,-1.12l-0.64,-1.11l-0.35,-2.0l-0.83,-1.17l-2.44,-0.78l-2.21,2.36l-0.3,-0.07l-0.94,-1.35l0.28,-2.14l-0.68,-1.6l-1.45,-1.03l-1.64,-0.67l-1.74,-0.15l-2.08,-1.48l-1.77,-0.61l-0.33,-0.57l0.32,-0.22l0.61,-0.36l1.19,0.03l0.28,-1.32l2.26,-0.3l0.3,-0.79l-1.52,-1.54l-0.47,-2.23l-2.14,-1.64l-0.14,-0.58l0.98,0.03l0.45,-0.53l-0.69,-1.9l-1.33,-1.0l-2.63,-0.5l-0.79,-2.5l-1.98,-1.62l-0.94,-0.49l-1.31,-0.05l-1.46,-1.14l0.13,-2.51l0.41,-1.21l-0.13,-0.83l0.77,-0.68l1.92,-0.56l0.18,-0.83l-1.95,-0.64l-4.23,-0.15l-1.7,-0.37l-1.31,-0.0l-1.19,0.45l-5.28,-5.12l-1.99,-0.54l-1.51,0.49l-0.33,-1.19l-1.25,-1.57l0.38,-1.25l1.12,-1.59l0.49,-2.12l-0.57,-0.72l-1.16,-0.03ZM621.37,462.65l0.62,0.85l-0.48,1.24l-0.1,-0.46l-0.03,-1.63ZM639.28,467.29l-1.47,0.01l-0.03,-1.73l1.33,0.75l0.17,0.97ZM630.2,458.45l-0.18,-0.62l0.39,-0.95l1.22,-1.6l0.22,0.26l-0.7,3.21l-0.96,-0.3ZM615.62,464.13l-1.95,-0.31l-0.34,-0.61l1.43,-4.38l1.08,-1.59l0.53,2.85l-0.1,1.69l-0.79,0.55l-0.14,0.48l0.28,1.31ZM614.23,456.85l0.15,-1.15l0.64,-1.08l0.26,0.49l-0.18,0.81l-0.87,0.92Z\", \"name\": \"West Bengal\"}, \"IN-HR\": {\"path\": \"M197.67,196.54l-1.92,0.66l-0.68,-0.19l-0.12,-0.33l0.58,-1.74l1.54,-0.71l0.56,-0.71l0.04,-0.87l-1.03,-1.19l0.03,-0.46l3.74,1.02l2.05,-1.87l3.05,-0.56l0.68,0.68l2.25,0.52l0.65,1.26l1.95,1.36l2.44,-0.58l0.57,-1.17l-0.41,1.39l0.24,1.61l1.61,1.38l0.49,-0.02l0.38,-1.05l0.49,-0.25l0.24,0.89l0.89,1.26l-0.77,0.21l-0.05,1.32l-0.89,0.47l-0.18,0.49l2.26,4.51l0.68,0.02l1.72,-0.75l-0.08,-1.9l0.4,-0.66l1.05,-0.42l0.07,-0.72l1.15,-1.12l1.84,-2.76l4.54,1.48l1.87,-0.35l1.18,0.2l0.81,-0.43l0.25,-1.03l1.84,-0.6l1.45,0.72l0.68,1.43l0.66,0.57l2.19,0.36l1.5,-0.6l1.29,-0.08l1.38,-1.54l2.31,-0.92l2.19,-1.64l-0.08,-0.61l-0.99,-0.75l-0.42,-1.25l0.77,-2.4l0.6,-0.91l-0.16,-0.9l0.93,-0.28l0.17,-0.47l-1.41,-0.86l0.04,-0.31l1.21,0.8l1.17,0.28l1.1,-0.22l0.28,-0.67l0.98,0.56l0.49,-0.29l0.43,-0.88l0.03,-1.16l0.63,1.85l0.67,0.93l1.52,0.62l1.31,-0.04l3.08,-2.2l0.45,-2.11l-1.11,-0.83l-0.74,-1.06l1.96,-0.97l2.75,-2.1l0.15,-0.69l-0.67,-0.42l0.18,-0.95l0.62,-0.28l0.94,0.26l1.29,-0.13l1.11,2.15l0.94,0.05l0.48,-0.5l0.29,-1.07l-0.34,-3.0l0.44,-1.02l-0.52,-1.05l0.23,-1.9l-0.5,-1.28l-0.77,-0.38l-0.31,-1.22l-0.78,-0.13l0.06,-1.77l-0.44,-1.16l0.68,-1.4l0.01,-0.71l-0.29,-0.49l-0.85,-0.37l-0.78,-1.44l0.75,-0.5l0.96,1.15l1.8,0.0l0.72,0.82l0.49,1.43l1.37,0.91l0.34,0.94l3.46,1.85l0.71,0.88l0.16,2.59l-0.5,1.22l0.09,0.78l2.08,1.94l0.25,0.78l0.44,0.23l0.93,-0.4l1.76,0.9l1.62,0.31l0.93,0.77l1.26,-0.33l0.59,0.71l2.07,-0.23l2.03,1.34l-0.49,3.0l-4.77,4.22l-0.4,1.32l-2.42,1.67l-0.2,0.66l-0.96,0.19l-0.26,0.72l-1.47,1.42l-0.66,1.71l-0.89,4.15l-0.47,0.9l-0.85,0.28l0.03,1.48l-0.81,0.56l-0.03,0.91l-0.63,0.62l-0.17,1.53l0.38,1.01l-0.82,0.38l-0.38,0.67l0.4,1.11l-0.1,1.06l0.71,0.51l0.71,-0.06l-1.49,1.77l0.33,0.56l2.21,0.16l-0.49,1.16l0.06,1.19l0.44,0.83l-0.56,1.13l0.32,4.99l-0.22,0.57l1.83,3.91l-0.49,0.52l-0.07,0.59l1.38,1.81l-0.48,0.8l-1.19,0.43l-2.62,-0.68l-1.12,0.96l-1.76,0.23l-1.23,0.79l-0.42,1.42l0.38,3.16l-0.71,0.77l-0.21,0.93l-1.26,0.39l-1.28,1.97l1.21,2.02l0.49,0.29l3.29,-0.53l0.51,-0.79l1.96,0.95l0.92,1.77l2.96,1.49l1.17,-0.15l0.67,-0.44l0.11,-0.6l-0.47,-0.68l0.36,-0.34l2.21,-0.63l1.36,1.03l-0.01,0.77l0.51,0.3l0.72,-0.35l0.65,1.19l0.96,-0.1l-0.04,0.82l0.65,0.59l-0.7,2.07l0.67,0.83l0.27,1.32l1.0,0.34l-0.17,0.55l-0.64,0.25l-0.17,0.47l0.74,0.72l-0.77,0.85l0.01,1.32l-0.24,-0.15l-0.61,0.36l0.19,1.33l-0.23,0.73l0.1,0.41l1.03,0.81l0.7,1.8l-0.54,0.3l-1.08,1.73l-1.24,-0.14l-1.14,1.02l-2.4,0.84l-0.96,0.82l-1.05,0.03l-0.37,0.47l-0.86,-0.73l-0.59,0.56l-0.3,-0.44l-0.52,-0.11l-0.85,0.76l-1.92,-0.54l-0.95,0.12l-0.53,1.25l0.42,0.62l0.78,0.36l-1.77,0.36l-1.03,1.64l-1.71,0.27l-0.23,-0.17l0.72,-0.3l0.15,-0.38l-0.57,-0.95l0.43,-2.47l0.88,-1.72l-0.19,-3.96l-0.52,-2.28l0.64,-2.88l-0.31,-0.93l-2.2,-2.22l-0.95,-0.48l-1.46,0.62l-1.38,1.94l-3.45,2.5l-0.25,0.95l0.49,1.35l-1.85,0.43l-0.89,0.93l-0.83,-2.12l-1.96,-0.59l0.71,-0.57l-0.55,-0.72l0.54,-0.08l0.22,-0.4l-0.98,-1.7l-0.96,-0.35l-1.98,0.38l-0.71,-1.02l-1.24,-0.44l-0.56,0.44l-0.0,0.81l1.23,1.18l-0.83,0.3l-0.23,0.52l0.19,0.51l1.05,0.65l-0.19,0.59l-0.5,0.06l-1.74,-1.05l-0.94,0.38l-1.54,-0.12l-0.66,0.79l-0.18,1.38l0.66,2.16l0.02,1.52l0.69,0.96l0.29,1.5l-0.62,0.44l-1.77,-1.38l-3.88,0.2l-0.48,-1.45l-1.14,-0.82l-0.09,-0.38l1.1,-0.25l0.59,-0.56l0.14,-0.71l-0.49,-0.68l0.63,-1.33l1.08,-1.16l0.14,-0.82l-0.76,-0.63l-0.7,0.22l-0.51,0.59l-0.74,-0.62l1.69,-0.98l0.71,-0.94l0.81,0.77l0.71,0.05l0.34,-1.01l-1.72,-2.96l-2.17,-2.79l-2.33,-2.11l-2.17,-0.91l-1.14,0.06l-0.05,-1.25l-2.28,-1.69l-3.18,-4.01l-3.25,-9.33l1.03,-1.13l-0.06,-1.08l-0.44,-0.58l-1.68,-0.7l-1.73,-2.58l0.02,-0.98l-0.52,-1.06l0.81,-0.33l0.22,-0.76l-0.73,-2.06l-0.71,-0.18l-1.11,0.73l0.1,-1.56l-0.26,-0.42l-0.65,-0.14l-1.3,0.6l-0.77,0.84l-0.86,0.08l-1.19,-0.66l-1.07,0.71l-1.9,0.54l-1.12,-1.64l-0.56,-0.19l-1.59,0.27l-1.1,-2.41l-0.82,-0.74l-2.52,-0.92l-0.97,0.26l-1.36,1.06l-1.48,-0.23l-1.78,0.2l-0.51,0.37l-0.23,0.76l-0.28,-0.03l-2.1,-3.33l0.28,-0.41l1.47,-0.13l0.47,-0.84l0.07,-1.62l-1.13,-1.94l0.92,-5.58l-0.73,-0.83l-1.02,0.44ZM259.41,180.33l-0.42,0.53l-0.13,0.09l0.07,-0.25l0.48,-0.37Z\", \"name\": \"Haryana\"}, \"IN-HP\": {\"path\": \"M229.45,117.96l1.78,-1.92l0.71,-1.52l-0.42,-0.79l-1.07,0.13l-0.02,-1.36l3.39,-1.15l1.65,-1.71l4.23,-3.05l-0.07,-0.68l-1.73,-2.9l0.38,-1.22l1.73,-1.98l0.07,-1.31l-0.71,-1.74l0.32,-2.08l-1.4,-2.4l-1.75,-1.91l-0.13,-0.95l1.18,-0.43l1.48,0.51l0.94,0.92l0.79,-0.09l4.49,-3.83l4.22,-1.75l0.9,-0.95l0.55,-1.64l2.1,-1.4l1.27,-0.58l3.51,-0.66l0.95,-0.52l2.35,1.47l3.95,-0.18l5.58,5.42l4.66,2.96l1.53,0.84l6.68,2.06l0.97,-0.1l0.54,-0.69l2.55,-0.39l2.39,-0.78l1.97,-1.57l2.83,-1.51l4.08,4.65l1.07,2.36l1.06,1.32l0.31,2.34l2.3,3.1l1.48,0.01l1.99,-1.8l2.17,-0.84l2.03,-0.16l0.85,-0.83l1.36,-0.66l0.22,-1.01l0.92,0.01l0.38,1.9l-0.26,1.58l-2.3,2.04l-0.82,2.5l0.0,1.13l0.76,0.84l0.89,0.12l1.87,-1.75l1.92,3.19l-0.51,1.13l0.86,3.58l-0.14,1.8l1.83,1.02l4.14,5.78l2.59,1.76l0.19,0.99l-0.67,1.45l-0.59,2.7l-0.94,1.85l0.75,1.03l-0.01,1.01l0.96,1.57l1.22,0.41l1.58,1.69l-3.62,3.17l0.06,1.16l1.86,1.29l-0.72,3.51l0.1,0.8l0.49,0.69l1.22,0.56l2.79,-0.26l1.58,1.74l1.69,2.52l0.03,0.64l-1.52,0.33l-1.82,-0.11l-0.93,-0.71l-1.48,-2.18l-4.35,-0.29l-1.49,-0.5l-3.2,0.35l-2.0,-1.63l-0.97,-0.01l-1.04,-0.74l-1.82,-0.16l-1.0,0.16l-1.58,1.0l-1.51,0.46l-4.45,2.55l-3.03,-0.02l-4.59,4.61l0.1,1.68l-1.55,0.35l-0.07,0.87l1.2,1.32l0.08,0.92l-0.09,0.37l-0.57,-0.32l-0.55,0.2l-1.49,3.28l0.05,1.22l0.89,0.92l0.27,1.62l0.79,1.6l-0.76,0.85l-0.03,0.51l0.97,1.5l1.17,0.3l-0.02,0.5l-4.31,2.33l-2.78,0.6l-0.54,1.0l-1.24,-0.9l-1.78,0.25l0.35,-0.76l-0.47,-0.5l-2.06,0.86l-0.62,-0.66l-1.76,-0.37l-1.86,-0.95l-0.96,0.35l-0.19,-0.67l-1.61,-1.27l-0.4,-0.67l0.53,-1.47l0.06,-1.86l-0.36,-1.18l-0.9,-1.08l-3.39,-1.8l-0.27,-0.87l-1.32,-0.83l-0.45,-1.35l-0.95,-1.09l-1.97,-0.09l-1.17,-1.21l-1.44,0.74l-4.03,-3.4l-0.52,-1.32l0.49,-1.87l-0.67,-0.63l0.08,-1.55l0.76,-1.11l-0.03,-0.41l-0.37,-0.37l-0.92,-0.05l-0.01,-0.8l-0.54,-0.83l-0.54,-0.15l-0.51,0.57l-0.55,-0.83l-1.05,0.02l-0.81,-0.71l-0.55,0.31l-2.49,-4.37l-1.8,0.74l-0.04,1.86l-0.67,0.19l-0.54,1.21l-0.85,-0.29l-1.23,0.33l-0.44,-0.26l-0.89,-1.09l-2.37,-7.15l-4.5,-8.19l0.07,-0.38l1.15,-0.14l0.15,-0.7l-2.74,-4.52l-5.6,-2.94l-3.59,-0.7Z\", \"name\": \"Himachal Pradesh\"}, \"IN-AS\": {\"path\": \"M663.07,316.48l0.01,-0.33l2.23,-0.81l0.27,-0.58l-0.2,-0.73l0.78,-0.56l0.58,-1.33l1.61,-0.9l-0.43,-0.98l0.82,-0.66l0.51,-3.03l0.94,-2.19l-0.3,-3.5l-0.71,-2.22l1.37,0.07l6.69,-1.16l1.04,-0.91l0.73,-1.87l0.84,-0.52l2.26,-0.19l1.89,-1.28l0.86,0.13l2.83,1.94l3.6,1.77l4.05,0.43l8.94,-0.5l1.75,-0.74l0.81,-0.01l3.25,0.08l2.45,0.93l1.24,-0.17l1.11,-0.58l1.4,-2.16l0.7,-0.32l1.42,0.14l0.88,1.73l0.8,0.57l2.17,-0.43l1.87,0.42l1.57,-0.18l3.68,-1.8l0.91,1.59l0.76,0.22l0.63,-0.55l-0.09,-1.07l0.42,-0.45l-0.02,-0.62l1.9,1.21l2.1,-0.24l1.36,-1.2l0.28,-0.99l3.65,0.29l3.76,-0.78l8.62,-2.47l2.73,-1.83l3.43,0.48l3.48,1.5l0.3,0.71l0.71,0.55l1.88,0.49l10.99,-1.18l1.14,0.32l1.27,0.98l0.87,0.01l1.48,-0.64l3.25,-0.5l1.99,-0.77l4.25,-3.13l0.32,-0.77l-0.24,-1.72l0.51,-0.89l4.15,-4.24l8.09,-6.65l0.47,-1.11l-1.32,-1.97l0.7,-0.82l1.01,1.03l2.02,0.77l3.03,-0.68l1.08,0.66l1.54,-0.32l4.22,-2.16l4.21,-1.1l4.59,-2.26l9.18,-3.21l1.71,-0.97l1.72,0.75l1.48,0.08l4.22,-1.06l4.0,-2.54l1.27,-0.38l7.37,-0.1l-2.08,3.62l-3.49,4.12l-0.39,1.22l0.72,3.03l2.67,2.25l0.25,1.82l-0.48,1.35l0.33,0.7l-0.05,1.3l0.79,0.26l1.3,-1.47l0.92,-0.12l0.74,0.97l-0.03,1.23l-1.02,0.66l-0.4,0.89l-1.02,0.43l-0.42,0.76l-0.96,-0.32l-2.26,0.04l-4.83,1.83l-2.47,-1.34l-1.74,0.34l-0.89,0.84l-0.76,2.13l-1.08,1.05l-2.06,0.87l-2.93,2.18l-2.33,0.23l-1.17,1.42l-3.92,2.33l-1.33,0.03l-1.25,-0.77l-0.62,0.03l-1.42,1.26l-2.28,3.32l-0.98,0.83l-2.89,1.8l-2.43,1.03l-1.31,-0.0l-0.86,0.71l-1.1,0.15l-1.9,2.12l-0.28,1.68l-0.66,0.97l-1.47,1.38l-0.68,0.17l-0.59,-1.92l-0.66,-0.39l-0.54,0.12l-2.29,2.96l-0.75,3.42l-2.08,1.89l-2.98,4.02l-0.17,3.6l-1.03,1.73l0.01,1.2l0.57,1.47l-1.16,1.72l-1.19,0.85l-3.43,0.81l1.09,-1.91l-0.08,-1.11l-0.43,-0.8l-1.57,-0.43l-2.36,1.15l-0.41,1.0l0.9,1.2l-3.78,3.26l-1.75,2.44l-5.74,4.65l0.02,1.06l1.74,2.27l1.43,1.25l0.42,1.24l-0.09,1.81l-1.83,2.72l-2.5,5.47l-0.88,0.27l-0.67,0.79l-0.14,1.08l0.51,1.11l-1.1,0.82l0.37,1.06l-1.35,2.11l-0.19,0.93l-1.4,-0.34l-0.76,0.41l-0.42,0.68l-0.98,3.15l0.15,0.92l0.37,0.32l-0.7,1.62l0.54,1.23l-1.03,0.63l-0.78,4.46l-0.49,0.04l-0.71,1.05l-1.92,-0.33l-2.5,0.78l-1.72,-3.21l-0.61,-0.53l-0.52,-0.02l-0.53,0.59l-1.18,3.26l-2.61,2.91l0.05,1.31l-0.98,0.5l-3.21,2.95l-0.74,-0.22l-0.53,-0.84l-0.23,-0.86l0.42,-1.1l-0.34,-0.48l-4.04,-0.06l-1.99,-0.48l0.99,-2.26l0.18,-1.77l-0.74,-1.72l-0.3,-1.98l-2.13,-1.46l0.78,-3.19l1.58,-4.31l0.04,-1.65l-0.52,-1.57l0.67,-0.52l0.99,0.32l2.9,1.82l3.14,-0.9l0.81,-1.3l-0.35,-1.35l-0.87,-0.64l-0.1,-0.43l-1.9,-1.24l3.56,-3.27l1.3,-0.42l0.35,-0.75l2.67,-0.27l0.89,-0.99l3.76,-1.27l0.46,-0.64l-0.78,-1.58l0.37,-1.38l-0.38,-1.05l-2.72,-2.53l-2.06,-0.78l-0.47,-0.7l-0.81,-0.43l1.34,-1.1l1.33,-1.73l0.23,-0.63l-0.27,-0.67l-1.06,-0.16l-1.61,0.87l-3.56,-3.68l-2.01,-1.75l-1.09,-0.46l-2.26,1.22l-2.7,0.45l-1.34,0.75l0.18,-1.73l-0.23,-1.9l1.48,-3.54l-0.29,-0.86l-0.88,-0.3l-0.05,-0.67l2.62,-2.44l0.29,-0.89l-0.27,-0.45l-3.49,-0.3l-3.33,1.02l-1.08,-0.05l-2.93,0.66l-0.79,-0.14l-2.03,-1.5l-0.88,0.03l-1.87,1.45l-1.06,2.67l-1.17,1.02l-0.79,-0.11l0.48,-1.79l-0.31,-1.05l-0.62,-0.43l-1.23,-0.02l-3.89,4.8l0.26,0.86l-1.79,0.13l-1.8,0.55l-1.04,0.78l-1.85,2.29l-1.11,0.57l-0.36,-0.65l-0.11,-3.58l-0.9,-0.34l-2.65,0.99l-0.98,-0.4l-0.72,0.37l0.17,-1.18l-0.25,-0.83l-1.14,-0.53l-0.7,-0.86l-3.36,-0.26l-1.72,0.28l-0.87,0.55l-0.12,-0.83l-0.79,-0.34l-3.3,0.94l-0.24,-0.8l-0.65,-0.4l-0.61,0.19l-1.3,1.31l0.29,-0.71l-0.11,-0.76l-1.17,-0.96l-1.09,-0.45l-2.78,-0.18l-0.9,0.14l-1.44,0.94l-5.77,0.82l-3.11,2.52l-1.92,2.43l-0.44,1.79l-0.72,1.25l0.16,2.24l1.61,1.92l-0.05,0.49l-0.77,0.48l-2.0,0.28l-0.42,0.72l-0.22,2.1l-1.52,0.65l0.59,-5.87l-1.02,-2.98l-0.55,-2.85l0.1,-0.67l1.34,-2.33l0.13,-0.78l-0.68,-0.66l0.5,-0.89l-0.56,-0.92l-0.84,0.15l-0.91,-1.29l-0.12,-1.51l-1.12,-2.31l-0.58,-0.37l-1.15,-0.04Z\", \"name\": \"Assam\"}, \"IN-UT\": {\"path\": \"M290.95,175.24l-0.31,-0.45l0.16,-0.23l3.37,-0.85l3.64,-1.92l0.42,-0.6l-0.06,-1.2l-1.32,-0.46l-0.68,-1.08l0.48,-0.37l0.27,-0.91l-0.22,-0.97l-0.63,-0.85l-0.26,-1.61l-0.89,-0.91l-0.01,-0.76l1.22,-2.78l0.89,0.28l0.59,-1.05l-0.14,-1.41l-1.18,-1.28l0.81,0.08l0.67,-0.49l0.3,-0.73l-0.32,-1.05l3.9,-4.07l0.54,-0.28l2.79,0.1l4.5,-2.57l3.73,-1.55l1.69,0.15l0.85,0.68l1.03,0.03l1.2,1.2l0.94,0.46l2.61,-0.37l2.11,0.53l4.18,0.25l1.13,1.91l1.22,0.95l3.16,0.05l1.25,-0.6l0.0,-1.27l-1.82,-2.75l-1.58,-1.74l0.87,-1.39l0.96,0.85l1.0,-0.03l1.1,-3.41l1.16,-0.22l2.08,1.39l0.62,1.44l1.05,0.36l-0.03,1.25l0.74,0.86l0.04,1.22l1.46,0.85l0.54,2.52l0.53,0.57l2.26,0.97l1.08,2.47l2.17,0.27l1.63,2.04l1.6,0.58l1.91,-0.81l3.23,-0.54l3.15,0.76l1.58,2.12l3.25,1.54l1.81,2.14l1.15,0.36l1.78,-0.62l0.99,1.35l0.94,0.56l-0.58,1.06l-0.99,0.19l-0.34,0.48l0.09,0.66l0.95,1.13l0.08,0.47l-0.68,1.46l0.45,0.55l2.1,-0.18l2.17,0.6l5.67,2.86l2.65,0.07l3.78,2.21l1.84,2.43l5.1,1.78l0.86,0.44l0.68,1.13l-2.12,0.8l-0.8,-0.96l-0.55,-0.09l-0.49,0.35l-1.01,1.05l0.22,1.15l-0.44,0.64l-2.27,1.77l-1.2,1.7l-2.2,1.62l-2.18,0.57l-0.85,1.97l-2.18,2.84l-0.56,0.44l-1.9,0.52l-0.92,0.77l-0.45,0.93l-0.04,1.03l0.96,3.25l-1.75,1.83l-0.16,1.01l-1.64,1.45l-0.25,0.68l-1.2,0.53l-0.28,0.84l1.3,3.62l0.76,0.26l-0.56,2.85l-0.47,-0.21l-0.86,0.34l-0.15,0.75l0.5,1.37l-0.14,0.51l-1.7,0.08l-1.15,0.63l-0.63,1.38l-0.35,2.99l-1.44,0.97l-0.65,1.28l0.08,2.75l1.04,0.9l-1.16,1.58l-1.43,0.55l-0.87,-0.37l-0.04,-1.04l-0.44,-0.24l-0.79,0.2l0.08,-0.94l-0.38,-0.4l-1.62,0.37l0.3,-1.52l-1.13,-0.87l-2.18,-0.29l-0.6,0.22l-0.26,0.74l-0.54,0.19l-1.94,-0.41l-1.16,0.47l-0.67,-0.89l-1.55,-0.1l-2.32,0.86l-0.71,-2.13l-1.46,-1.68l-2.4,-0.13l-3.8,-2.61l-0.66,-0.74l-0.55,-1.37l-2.39,-1.3l-0.84,-0.11l-3.42,1.35l-0.4,-1.87l-1.03,-1.41l-4.38,-2.28l0.11,-0.62l0.69,-0.26l1.19,0.27l0.76,-1.03l0.69,0.21l0.69,-0.27l1.77,-1.76l0.03,-1.29l-3.55,-1.07l-4.97,-2.81l-1.61,-1.38l-2.29,-3.67l-1.11,-1.1l-3.59,-1.79l-2.29,-3.9l-2.23,-2.17l-1.68,0.04l-0.85,1.12l0.16,1.82l1.13,4.27l-0.23,1.21l-0.92,0.93l-1.27,0.59l-0.53,-0.16l-3.81,-2.16l-3.95,2.04l-1.26,-2.37l-1.0,-3.95l-0.15,-3.69l1.35,-2.08l1.34,-3.04l3.16,-2.75l0.2,-1.02l-0.65,-0.63l-5.42,-2.71l-2.87,-2.4l-1.41,-0.26l-0.93,0.49Z\", \"name\": \"Uttaranchal\"}, \"IN-JH\": {\"path\": \"M485.62,401.35l-2.2,-0.83l-1.66,0.13l-0.64,-0.47l-0.92,-2.18l0.46,-1.96l-0.75,-2.15l-5.31,-5.13l-0.45,-1.24l-0.28,-2.67l-2.23,-1.57l-3.11,-0.55l0.74,-1.85l1.39,-1.87l0.17,-1.31l1.15,-1.83l-0.17,-0.87l-1.63,-2.76l0.11,-0.69l0.93,-0.61l2.97,-0.32l4.77,0.81l1.87,-0.08l1.71,-1.09l1.28,0.23l2.91,-0.51l1.72,-1.44l0.63,-1.37l1.28,2.2l0.99,2.58l0.91,0.66l0.71,-0.13l0.37,-0.54l0.48,0.46l0.71,-0.09l0.31,-0.39l0.0,-0.99l1.13,-0.14l0.85,0.26l0.77,-0.44l0.4,0.65l0.01,0.81l-0.37,0.6l0.15,0.73l1.64,1.83l3.74,2.84l1.49,-0.24l1.96,-2.6l1.54,0.48l0.78,-0.11l0.96,-1.83l3.19,-2.01l0.37,0.18l0.47,1.68l1.14,0.05l0.36,1.93l0.73,0.76l1.93,0.23l3.38,-1.36l-0.14,0.95l0.71,0.62l2.29,-1.85l0.34,-1.09l2.75,-1.0l0.7,-0.85l3.22,-0.65l2.72,-0.0l1.15,0.31l2.07,-1.87l1.74,0.23l0.61,-0.3l0.36,-0.71l0.0,-1.21l-0.39,-1.16l1.12,-0.67l0.91,-2.77l0.59,-0.38l2.49,-0.03l0.87,0.51l1.73,1.86l1.65,-0.22l1.97,-1.34l-0.19,1.0l1.95,0.69l0.56,2.96l0.66,1.0l1.38,0.68l1.57,-0.48l1.85,0.5l0.24,1.48l-0.96,1.25l0.15,0.88l5.46,3.3l0.78,-0.54l0.24,-1.39l0.74,-0.75l0.22,-2.08l2.61,-2.45l1.79,0.61l1.64,-0.17l0.97,-0.45l0.63,-0.86l1.69,1.09l2.36,0.74l0.49,-0.24l0.04,-1.06l0.79,-1.32l2.54,0.86l1.25,-0.22l0.91,-2.73l0.27,-2.7l-0.24,-0.98l1.59,-2.79l-0.02,-3.96l1.79,-2.25l0.83,-0.3l1.16,0.31l0.51,-0.24l1.12,-3.76l1.51,-0.38l1.41,0.51l0.77,-0.28l1.6,-3.24l1.37,-1.12l1.1,0.52l1.08,1.31l2.68,0.7l1.93,-0.1l0.67,0.49l0.1,0.59l-0.46,1.42l0.24,2.13l2.17,2.01l1.05,3.9l-0.72,3.72l-1.0,-0.18l-0.39,1.06l0.51,0.67l1.0,0.23l0.43,0.82l0.61,1.83l-0.66,0.58l-0.05,0.67l0.77,0.42l-1.14,0.75l-2.41,-0.72l-0.85,0.38l0.07,0.8l1.03,0.5l-0.1,1.01l0.4,0.96l-0.7,1.06l-0.04,1.52l-1.26,2.69l-3.44,2.56l0.02,1.36l0.28,0.36l0.67,-0.02l0.2,0.56l-1.83,0.11l-0.91,2.13l-1.27,-0.85l-1.16,0.28l-0.22,0.53l0.12,2.26l-0.83,0.87l-1.67,-0.16l-1.77,0.66l-0.38,-1.37l-0.75,-0.37l-2.33,0.63l-0.38,0.95l1.58,2.04l0.13,0.85l-0.99,0.74l-0.22,1.61l-0.67,-0.67l-1.24,-0.31l-1.18,0.26l-0.11,0.83l0.9,1.18l-0.74,0.16l-1.48,-0.36l-1.99,-1.45l-1.11,-0.15l-2.74,-1.55l-0.75,0.01l-2.05,2.64l-0.2,0.99l0.37,1.17l-0.54,1.3l-4.61,0.89l-7.31,2.64l-2.04,1.68l-0.42,2.01l-1.8,1.61l-1.1,0.29l-1.25,-0.91l-1.7,-0.6l0.37,-1.76l-0.17,-0.83l-3.17,-1.24l-0.91,0.23l-0.6,0.76l0.27,2.08l-4.66,0.65l-1.05,0.72l-0.09,0.97l0.72,1.07l1.45,0.25l-0.37,1.69l-1.12,1.59l-0.47,1.62l0.4,0.99l0.91,0.9l0.58,1.59l0.42,0.13l1.6,-0.54l1.56,0.43l4.28,4.41l1.21,0.8l2.64,-0.43l6.48,0.73l-1.12,0.37l-1.06,1.04l-0.38,5.19l1.78,1.49l1.55,0.14l2.47,1.85l0.25,1.52l0.66,1.08l0.97,0.46l1.88,0.17l1.02,0.78l0.5,1.15l-1.24,0.06l-0.21,0.5l0.21,1.04l2.24,1.83l0.38,2.09l1.43,1.35l-2.14,0.24l-0.34,0.37l-0.06,1.01l-0.83,-0.19l-1.36,0.84l-5.58,-3.66l-3.08,0.44l-0.93,-0.27l-2.33,-2.54l-5.72,-2.93l-1.38,-1.66l-0.96,-0.22l-0.63,0.3l-0.7,0.93l-1.56,0.42l-0.49,0.53l0.14,1.26l1.25,1.79l0.31,2.33l-0.08,0.94l-0.78,1.36l0.01,0.75l0.7,1.68l-0.43,2.63l-1.68,2.46l-1.06,0.74l-1.12,0.27l-1.32,-0.84l-0.04,-1.41l0.7,-1.51l-0.5,-0.78l-3.63,1.66l-3.84,-0.98l-3.16,-1.78l-1.39,-0.0l-2.85,1.24l-2.91,3.01l-0.82,-0.88l-2.85,-1.79l-1.6,-0.26l-1.46,0.46l1.5,-2.94l1.65,-2.4l0.39,-1.42l-0.54,-3.97l-0.68,-1.83l-0.62,-0.17l-2.32,1.61l-1.27,0.2l-0.95,0.73l-3.4,-0.9l-1.07,0.16l-1.02,0.58l-6.68,0.19l-0.58,0.37l-0.42,1.49l-2.34,1.14l-2.91,0.15l-2.41,-1.06l-1.51,-0.19l-0.86,-0.65l-2.56,-3.71l-2.65,-1.24l0.21,-0.7l2.1,-1.9l1.68,-0.16l2.55,-1.92l1.17,-2.68l0.95,-0.49l2.7,-2.47l0.21,-1.44l-0.78,-2.37l-1.27,-0.8l-2.38,0.04l-2.05,-0.95l-0.44,0.2l-0.1,0.88l-0.34,-0.13l-0.73,-2.68l-1.84,-1.99l-0.24,-1.17l0.56,-3.95l-0.52,-2.22l-1.03,-0.81l-1.27,0.92l-0.09,-0.36l0.24,-2.83l1.54,-1.82l0.43,-1.07l-0.96,-2.79l-0.87,-0.33l-1.62,0.72l-0.34,0.71l0.12,1.14Z\", \"name\": \"Jharkhand\"}, \"IN-JK\": {\"path\": \"M176.08,35.04l2.37,-2.36l-0.15,-2.71l0.72,-0.56l5.27,-0.96l3.12,-1.98l1.87,-0.7l1.84,-0.15l1.87,0.3l7.81,2.66l10.87,2.04l5.97,-0.52l1.57,1.55l2.54,1.46l8.19,2.07l5.87,-0.33l2.57,-2.29l3.11,-1.82l1.42,-1.8l0.86,-0.17l1.84,0.74l1.27,-0.01l3.39,-0.84l5.27,-2.66l0.99,0.15l1.97,1.12l3.39,-0.56l3.4,-2.92l0.32,-0.85l0.08,-2.41l0.59,-0.43l1.96,-0.39l1.61,0.69l0.77,0.01l2.91,-2.36l0.56,-0.77l0.2,-1.26l-0.34,-1.59l0.44,-0.53l22.94,-13.34l0.94,1.29l1.66,0.81l1.15,-0.36l2.19,-1.83l1.4,0.07l0.25,0.97l-1.39,3.65l-0.24,2.94l1.11,2.66l2.85,4.79l0.56,3.9l0.5,1.32l1.45,1.99l1.9,6.57l0.74,1.28l1.29,1.15l1.47,0.62l7.06,1.14l1.68,0.66l2.57,1.86l1.66,2.01l3.68,1.47l0.79,0.71l0.72,1.3l0.34,1.43l-0.32,1.36l-2.12,1.93l-2.99,1.23l-2.52,1.81l-0.26,3.11l1.51,4.2l0.72,4.34l-0.37,6.71l0.6,2.02l0.76,1.24l2.91,2.63l1.83,2.73l2.61,1.09l0.44,1.63l0.42,0.49l2.17,-0.32l3.4,1.53l2.5,0.11l0.76,0.38l0.07,0.93l-1.15,2.16l-0.31,3.79l0.76,1.2l1.74,1.47l1.04,2.98l1.58,1.74l-0.13,2.04l-1.78,2.45l-2.99,2.26l-1.28,1.37l-2.29,-0.49l-2.63,0.8l-0.83,0.67l-1.0,3.25l-1.34,-0.22l-2.55,1.01l-0.76,-0.22l-4.17,-3.55l-0.99,-2.71l0.36,-2.45l-0.62,-0.72l-0.73,-0.26l-0.88,0.28l-1.95,1.75l-6.89,0.7l-0.72,0.37l-0.3,0.78l-1.91,1.79l-0.48,-0.21l-0.24,-0.53l0.84,-2.71l2.04,-1.64l0.41,-0.81l0.1,-2.61l-0.35,-1.18l-0.52,-0.44l-1.59,0.09l-0.31,0.35l-0.01,0.78l-1.28,0.59l-0.52,0.64l-1.76,0.13l-2.36,0.83l-1.87,1.76l-1.16,0.19l-1.94,-2.71l-0.28,-2.27l-1.13,-1.48l-1.11,-2.41l-4.43,-4.94l-0.7,-0.03l-1.02,0.5l-3.7,2.62l-4.93,1.16l-0.67,0.74l-0.48,-0.0l-6.46,-2.01l-1.4,-0.78l-4.53,-2.86l-5.76,-5.55l-4.11,0.12l-1.88,-1.36l-0.71,-0.13l-1.11,0.56l-3.58,0.69l-3.2,1.74l-0.74,0.87l-0.39,1.36l-0.68,0.71l-4.17,1.72l-4.44,3.8l-1.01,-0.85l-1.7,-0.58l-1.74,0.49l-0.44,0.98l0.29,1.07l3.0,3.83l-0.27,2.22l0.73,1.87l-0.04,0.89l-1.7,1.9l-0.05,0.61l-0.99,1.43l-2.76,1.28l-0.43,1.18l-0.85,0.7l-2.45,0.3l-1.37,0.77l-2.13,2.4l-1.29,-0.76l0.03,-0.69l-0.42,-0.49l-1.71,0.82l-2.67,0.07l-3.04,-2.13l-2.21,-0.52l-3.16,-1.86l-3.66,0.69l-2.22,-1.01l-3.41,0.48l-0.92,-0.3l-0.7,-0.79l-0.95,-2.82l0.8,-1.82l-0.19,-2.8l1.2,-2.89l-0.26,-1.2l-0.74,-0.4l-0.76,0.21l-0.63,0.65l-0.62,1.67l-1.02,0.49l-2.05,0.22l-2.05,-1.37l-2.17,0.76l-0.5,-0.09l-0.91,-1.05l0.73,-1.21l0.13,-0.85l-0.81,-4.48l-1.14,-0.74l-2.8,-0.45l-1.0,-0.55l-1.7,-2.2l-2.9,-2.45l-0.36,-0.9l0.31,-1.78l2.08,-1.05l0.87,-1.05l1.26,-3.13l0.67,-2.87l-0.65,-2.12l-5.01,-3.36l-0.4,-1.27l0.28,-1.74l1.77,-2.59l3.3,-0.55l2.28,-1.26l1.59,-1.84l0.35,-1.48l-0.54,-1.32l-1.2,-0.71l-3.32,0.36l-2.29,-0.58l-2.14,0.5l-0.78,-0.15l-1.4,-1.35l-0.24,-0.86l0.22,-0.85l3.05,-2.05l0.2,-1.12l-1.36,-3.16l-0.58,-0.7l-2.81,-0.24l-1.92,-1.19l-0.07,-1.35l1.86,-1.69l0.23,-1.76Z\", \"name\": \"Jammu and Kashmir\"}, \"IN-UP\": {\"path\": \"M275.34,205.39l0.08,-0.87l-0.4,-0.81l0.98,-0.64l0.26,-0.62l-0.39,-1.02l0.09,-1.08l0.63,-0.63l-0.03,-0.78l0.85,-0.74l-0.12,-1.31l0.85,-0.26l0.57,-1.11l1.48,-5.73l1.43,-1.37l0.17,-0.58l0.94,-0.1l0.3,-0.86l2.37,-1.61l0.44,-1.41l4.79,-4.24l0.56,-1.76l0.08,-1.88l0.69,-0.43l1.01,0.2l2.73,2.32l5.75,3.03l-3.25,2.91l-1.42,3.18l-1.4,2.22l0.14,4.1l1.02,4.01l1.5,2.84l0.53,0.17l3.93,-2.12l4.27,2.33l1.87,-0.79l1.16,-1.27l0.27,-1.53l-1.31,-5.86l0.44,-0.6l0.93,-0.03l1.97,1.95l2.37,3.99l3.63,1.83l1.01,1.0l2.3,3.68l1.72,1.49l5.15,2.91l3.22,0.87l-0.29,0.67l-1.36,1.2l-1.25,-0.03l-0.74,1.01l-0.97,-0.35l-0.89,0.33l-0.75,1.13l0.36,0.82l4.44,2.28l0.82,1.11l0.45,2.3l0.61,0.28l1.07,-0.68l2.94,-0.83l2.2,1.17l0.37,1.16l0.83,0.95l3.93,2.71l1.56,0.36l0.81,-0.24l1.2,1.39l0.83,2.42l0.51,0.21l2.48,-0.94l0.99,-0.02l0.51,0.84l0.69,0.17l1.07,-0.46l2.12,0.39l0.81,-0.28l0.49,-0.86l1.92,0.26l0.58,0.43l-0.37,1.25l0.26,0.54l0.61,0.21l1.18,-0.4l0.11,1.23l0.97,0.05l0.34,0.98l1.38,0.56l1.93,-0.72l0.97,-1.03l0.5,-1.07l2.2,2.05l1.78,0.44l1.1,1.2l1.02,0.42l1.36,2.19l0.82,0.27l1.64,-0.21l2.4,2.1l0.56,-0.22l0.15,-0.44l-0.17,-2.69l0.63,-0.53l0.74,0.02l0.4,1.04l2.24,0.66l1.17,1.65l1.64,0.62l1.64,1.48l0.65,0.35l2.05,0.21l0.35,1.28l0.73,0.61l1.33,0.34l1.04,-0.11l0.72,1.29l5.03,1.12l0.53,0.65l1.04,2.88l2.01,2.4l-0.35,0.91l0.75,0.97l1.19,0.06l0.59,-0.34l0.52,-0.97l0.76,0.17l1.08,0.92l0.65,1.65l0.59,0.53l2.77,1.38l1.6,1.47l2.32,0.63l1.89,1.78l3.25,1.95l1.27,0.05l1.97,-1.88l0.73,-0.31l1.44,0.14l0.64,0.2l1.19,1.09l1.86,0.8l3.63,2.88l2.4,1.17l1.78,1.68l1.35,0.37l2.68,-0.3l3.76,-0.93l0.61,0.23l0.78,1.86l0.64,3.77l1.05,1.07l3.78,0.24l2.16,1.0l1.95,0.46l3.79,-0.02l1.0,0.38l1.46,1.18l1.22,1.83l0.87,0.34l1.01,-0.06l1.26,-0.95l0.95,-1.56l-0.43,-1.73l0.64,-0.32l6.11,0.45l7.74,3.44l-0.08,0.57l0.44,0.31l0.89,-0.1l-0.14,1.46l1.68,1.8l-0.02,2.27l2.55,3.19l0.12,2.0l1.36,2.56l2.76,1.74l1.3,-0.6l0.85,0.05l0.44,0.97l-0.19,2.57l0.25,0.77l1.93,0.52l2.54,2.63l-8.75,-0.21l-0.69,0.64l-0.89,2.26l-1.87,0.57l-0.58,0.71l-0.53,-0.86l-1.04,0.3l-0.27,2.29l0.45,0.95l1.56,0.43l1.39,-0.63l2.0,1.49l2.85,0.74l-0.75,1.75l0.72,1.59l-1.71,-0.01l-0.98,0.62l-2.56,0.37l-0.78,0.73l-0.02,1.17l1.57,1.59l0.8,1.89l2.75,1.4l0.66,1.24l1.01,0.41l0.56,1.63l1.2,1.16l0.84,0.22l2.77,-0.43l1.0,1.36l1.44,0.91l2.29,0.25l2.18,1.96l0.09,0.43l-0.43,1.02l-1.48,1.05l-1.13,0.16l-1.72,-0.61l-1.57,-1.34l-1.31,-0.02l-1.48,0.93l0.37,2.52l-1.19,0.43l-1.3,-0.47l-0.42,-2.32l-1.02,-0.59l-1.43,0.28l-2.76,2.12l-1.74,2.2l-3.5,2.93l-2.15,0.89l-1.31,1.48l-12.02,6.86l-1.28,1.31l-0.44,1.05l-0.35,3.14l0.15,0.85l1.12,1.85l-0.29,4.03l2.54,2.96l2.69,1.36l0.21,1.11l-0.62,1.25l0.43,1.32l-0.04,2.89l-2.45,0.3l-1.39,1.1l-0.01,1.49l1.65,3.07l-0.95,1.29l-0.26,1.5l-1.39,1.86l-1.72,4.05l-1.53,1.2l-0.32,1.67l-0.84,1.34l-3.39,1.26l-4.96,-0.24l-1.19,-0.65l-1.66,-1.53l-1.22,-0.35l-0.94,-1.34l-0.99,-0.75l0.07,-1.48l-1.86,-1.99l0.85,-0.12l0.85,-0.74l0.33,-2.2l0.73,-1.76l-0.05,-2.43l-0.94,-0.86l0.33,-2.55l-0.28,-1.36l0.21,-0.26l0.93,0.28l0.92,-0.26l0.51,-1.09l-1.52,-2.87l-1.63,-0.31l-0.22,-1.37l-0.98,-0.12l-2.9,1.04l-1.34,-0.13l-2.9,-0.97l-1.02,0.1l-0.38,0.54l0.07,1.74l-0.34,0.46l-2.48,0.03l0.46,-0.94l-0.09,-0.81l-0.63,-0.61l-1.13,-0.04l0.05,-2.17l-0.46,-0.58l-0.5,0.11l-0.69,1.01l-0.23,-0.11l0.34,-1.13l-0.43,-1.53l-0.75,-0.06l-2.07,1.15l-2.62,-1.65l-2.34,-0.36l-2.44,-1.83l0.1,-1.46l-1.19,-1.84l-1.25,-0.33l-1.65,0.49l-0.55,-0.18l-0.66,-1.21l-3.93,-0.58l0.12,-0.94l-1.36,-2.79l-0.44,-0.15l-3.52,1.18l-0.04,0.71l1.17,0.85l-1.17,0.38l-1.22,-0.17l0.17,-0.95l-0.6,-0.6l-1.6,-0.5l-2.36,0.14l-0.44,0.65l0.07,2.14l-1.89,2.61l0.26,1.6l-1.41,0.32l-0.94,1.06l-2.61,-1.77l-1.96,0.4l-1.39,-1.0l-2.12,0.47l-1.76,-0.18l0.84,-1.31l0.15,-0.88l0.88,-0.9l0.2,-1.29l0.88,-2.03l-0.08,-0.99l-0.92,-0.55l-1.39,0.37l-0.83,1.53l-3.3,0.4l-0.04,0.77l1.71,1.4l-2.08,0.3l-0.9,-0.82l-0.8,-1.5l-0.89,-0.3l-0.66,0.44l0.01,1.06l-2.31,-0.37l-0.6,0.3l0.4,1.75l1.24,0.71l-0.82,0.53l-0.4,0.04l-1.56,-1.55l-0.56,0.43l0.22,1.27l-1.38,-0.38l-1.63,0.37l-0.51,-0.7l-0.17,-0.93l1.06,-0.2l1.53,-1.78l2.0,-1.08l0.21,-0.73l-0.78,-2.05l-0.88,-0.18l-0.5,-0.7l-0.94,-0.49l-0.28,-2.59l-0.93,-1.59l-0.79,-0.28l-1.27,0.27l-0.88,-0.25l-2.49,2.19l-1.13,-0.36l-2.27,1.05l-3.01,2.29l-2.37,0.66l-0.35,0.48l0.02,0.73l1.03,1.63l-1.68,0.65l-0.98,-0.78l-3.65,0.23l-3.08,-0.97l-0.92,0.48l-1.43,1.94l-0.32,-0.02l-0.21,-0.76l-0.47,-0.4l-1.47,0.02l-0.45,0.65l0.08,1.56l-0.7,0.07l-0.49,-0.55l0.21,-1.36l0.89,-0.87l1.71,-2.67l0.6,-1.48l-0.19,-0.47l-0.47,-0.14l-1.16,0.86l-0.87,-0.19l-0.77,0.28l-0.81,0.96l-0.37,-0.96l1.04,-2.22l-0.64,-0.78l-0.75,0.11l-1.26,2.01l-0.04,1.23l0.78,3.19l-3.22,-0.57l-1.29,1.21l-0.23,-1.37l-0.3,-0.28l-0.87,-0.01l-1.75,0.66l-0.09,-0.73l1.1,-1.71l-0.97,-0.87l-0.86,-0.22l-0.71,0.35l-0.16,1.32l-1.22,0.43l-1.02,1.15l-0.59,0.21l-0.12,-0.99l0.32,-0.89l1.91,-1.82l-0.03,-1.44l0.63,-1.25l0.16,-1.42l-0.55,-0.91l-1.06,0.13l0.35,-1.08l-0.08,-1.1l-0.23,-0.57l-0.88,-0.52l-0.72,0.25l-0.62,0.73l-0.32,0.9l0.03,1.77l-0.3,0.25l-0.55,-0.02l-0.1,-2.28l-0.54,-0.97l-0.57,-0.09l-1.75,1.02l-0.19,1.54l0.75,0.94l-0.52,0.98l0.19,1.26l-2.07,-2.02l-1.41,-0.23l-1.13,0.35l-0.36,0.65l0.12,0.74l-1.48,1.74l-0.57,1.6l0.32,0.71l1.59,1.5l1.08,2.41l1.2,6.41l2.31,3.04l0.36,3.85l-0.65,1.88l0.4,1.02l1.03,0.66l2.06,-0.54l1.03,0.19l1.85,3.2l-0.17,1.52l0.39,0.4l1.51,0.37l-0.16,1.09l-0.47,0.87l-1.67,1.57l-1.07,2.4l-1.57,1.53l-0.99,-0.36l-0.45,-1.43l-2.96,-0.6l-3.64,-3.03l-1.66,-0.82l-1.14,0.44l-0.61,1.98l-0.56,0.69l-0.97,0.47l-0.88,-0.44l-0.41,-0.83l0.63,-1.22l-0.08,-0.85l-2.21,-1.45l-0.19,-0.65l-0.85,-0.52l-0.49,-0.89l1.35,-2.51l0.03,-0.97l-0.38,-0.52l0.07,-1.6l-0.96,-1.46l-0.21,-2.0l-0.83,-1.48l-0.83,-0.73l0.24,-0.53l2.34,-1.55l2.17,-2.14l0.53,-1.55l-0.31,-1.12l1.1,-3.45l-0.18,-1.0l-1.96,-3.91l-1.39,-2.03l2.35,-2.06l0.58,-0.87l0.55,-1.89l3.26,-0.78l2.42,0.06l1.81,-1.06l2.97,-0.59l1.28,-0.74l0.27,-0.98l-0.81,-2.2l0.14,-1.22l0.38,-0.7l1.92,-1.49l0.81,-2.07l1.37,-1.68l1.06,-2.84l1.2,-1.91l-0.03,-0.77l-0.96,-0.97l0.0,-0.62l1.1,-0.89l-0.56,-1.88l0.59,-0.57l1.79,-0.57l1.29,-1.72l0.13,-0.63l-0.6,-0.73l0.33,-1.15l-0.1,-1.04l-0.67,-1.92l-2.1,-3.28l-0.72,-3.17l-0.59,-0.68l-1.97,0.16l-2.0,-1.93l-0.9,-0.14l-0.36,-0.7l-0.99,0.05l-0.56,-0.52l-1.79,0.76l-1.18,-0.01l-0.74,0.63l-0.64,-0.02l-1.43,-0.82l-1.72,-0.3l-1.05,-1.0l-1.16,-0.1l-0.54,-0.83l-0.76,-0.27l-2.23,0.18l-0.93,1.15l-1.2,-0.18l-0.62,-0.89l0.78,-0.3l1.09,-1.02l0.27,-0.71l-0.74,-0.73l-1.94,-0.48l-2.22,0.1l-1.26,1.15l-1.17,0.12l-0.39,0.59l-0.88,-0.48l-2.81,-0.37l-1.09,0.33l-0.92,-0.47l-3.28,-0.47l-2.51,1.71l-3.97,1.63l-1.26,-0.07l-0.91,1.46l-0.86,0.49l0.13,-2.17l0.57,-0.69l6.23,-2.89l2.25,-0.54l0.72,-0.58l0.09,-0.67l-0.84,-0.74l-0.84,0.58l-0.62,-1.04l-0.47,-0.22l-0.8,0.55l-1.65,-0.21l-0.65,-1.0l-0.85,-0.27l0.11,-0.38l2.42,-0.72l0.53,-1.05l1.15,-0.65l0.56,-1.2l-1.43,-2.52l-0.3,-1.75l-1.54,-0.43l-3.64,-2.12l-0.61,-1.8l-2.26,-2.94l0.03,-1.53l-0.68,-0.68l0.5,-0.81l-0.04,-0.86l-0.47,-1.19l-0.72,-0.53l-0.37,-2.72l0.75,-0.66l2.6,-0.95l0.83,-0.85l0.99,0.2l0.51,-0.21l1.14,-1.79l0.79,-0.67l-0.81,-2.35l-1.02,-0.86l0.1,-1.29l0.34,0.21l0.6,-0.43l-0.26,-1.77l1.08,-0.7l0.18,-0.62l-0.76,-0.58l0.74,-1.51l-1.42,-0.68l-0.05,-0.97l-0.62,-0.65l0.87,-2.29l-0.41,-0.56l-0.44,0.04l-0.11,-1.16l-0.36,-0.26l-0.88,0.17l-0.49,-1.15l-0.94,0.01l-0.29,-0.67l-1.11,-0.66l-1.05,-1.92l1.12,-1.48l-0.06,-1.04l-0.85,-2.6l-2.48,-2.18l-0.53,-1.11l0.23,-0.83l-0.41,-0.93l0.54,-1.42l-1.35,-1.66l0.54,-1.2l-1.8,-3.7l-0.14,-5.52l0.56,-1.3l-0.47,-0.92l-0.03,-0.89l0.47,-1.5l-0.93,-0.73l-1.3,0.03l1.29,-1.31l-0.05,-0.56l-0.46,-0.39l-0.95,-0.01Z\", \"name\": \"Uttar Pradesh\"}, \"IN-SK\": {\"path\": \"M624.09,256.17l1.74,-1.11l1.5,0.04l2.71,-2.5l1.43,1.15l2.65,0.52l2.31,1.81l-0.23,2.08l1.28,1.8l0.06,0.92l-1.46,6.18l-1.76,3.15l-0.24,1.13l0.49,0.78l-0.09,1.51l0.63,1.96l3.56,3.09l-0.14,0.55l-0.53,0.4l-1.78,0.44l-1.01,0.67l-1.42,2.94l-1.56,-0.85l-4.67,-0.11l-3.06,2.58l-1.78,0.44l-3.84,-1.72l-3.55,-0.05l-0.65,-0.3l-0.58,-1.87l-1.79,-1.32l0.79,-2.13l-0.61,-1.91l0.81,-1.92l-0.56,-1.88l2.65,-4.71l1.54,-4.54l-0.12,-1.42l0.29,-1.16l-0.51,-0.51l-1.07,-0.3l-0.48,-1.12l0.06,-0.62l0.47,-0.48l1.19,0.1l6.6,-1.18l0.74,-0.55Z\", \"name\": \"Sikkim\"}, \"IN-MZ\": {\"path\": \"M743.96,392.77l0.71,0.19l0.37,-0.45l-0.14,-2.85l0.55,-1.85l-0.42,-1.43l0.33,-2.14l-0.11,-2.89l-0.65,-1.18l2.99,-0.03l-0.38,1.02l0.75,1.88l1.11,0.72l1.07,-0.2l3.08,-2.92l1.24,-0.79l-0.05,-1.35l2.53,-2.77l1.3,-3.49l2.32,3.71l1.02,0.04l1.89,-0.78l1.44,0.32l0.94,-0.24l0.11,0.82l0.68,0.79l-0.94,1.59l0.08,1.22l-0.6,3.47l-0.55,0.59l0.12,0.67l2.91,1.14l1.2,0.91l1.31,-0.55l0.72,0.69l0.62,0.01l1.32,-0.83l0.11,1.34l0.61,0.24l0.97,-0.45l0.25,1.53l1.46,2.27l0.56,5.39l1.62,1.71l0.15,1.2l-0.99,6.3l0.22,3.39l-0.91,1.69l-0.09,5.36l-1.22,2.4l-1.63,1.33l-0.58,0.03l-1.4,-1.49l-0.78,-0.25l-0.99,0.29l-0.58,0.74l0.04,2.05l0.88,1.94l0.12,0.97l-1.74,2.48l-1.23,1.16l-0.27,2.69l1.21,3.12l-0.33,2.8l0.6,1.65l1.1,1.18l0.34,1.19l0.24,3.97l-1.47,0.77l-0.09,0.62l0.38,0.78l-2.29,-0.79l-1.1,0.42l-0.08,2.78l-1.0,0.47l-0.71,1.34l0.31,2.1l-0.63,-0.79l-0.82,-0.32l-0.71,0.4l-0.47,1.47l-0.37,-1.67l-0.66,-0.91l-2.03,-1.9l-1.96,-1.42l-0.88,-0.27l-0.8,0.54l0.01,1.48l-0.37,0.18l-0.18,0.63l-0.08,1.63l-0.92,0.25l-0.78,0.79l-1.04,-4.15l0.88,-0.24l0.27,-1.25l-1.83,-11.1l-0.51,-1.55l-0.17,-4.45l-0.52,-1.11l-1.15,-1.14l-0.55,-3.59l-0.61,-0.67l-0.91,-0.36l-0.68,-1.66l0.02,-2.29l-0.78,-4.56l0.13,-1.61l0.79,-1.88l-0.27,-2.46l-0.7,-0.81l-0.08,-0.97l-0.71,-0.88l-1.55,-6.66l0.55,-2.59l-0.21,-1.75l0.23,-1.48l0.46,-0.67Z\", \"name\": \"Mizoram\"}, \"IN-CT\": {\"path\": \"M376.2,561.12l-0.76,-1.04l-0.54,-2.04l-1.09,-0.57l-0.15,-0.57l0.27,-0.65l2.07,-1.28l0.36,-0.85l-0.24,-0.79l-1.82,-2.18l-0.32,-1.59l0.51,-1.14l2.36,-3.16l1.16,-4.17l1.21,-0.64l1.08,-1.84l1.03,-0.48l0.89,-1.14l0.61,-0.26l1.07,2.14l2.07,0.07l0.93,1.63l0.73,0.22l1.24,-1.17l2.22,-1.2l0.11,-0.81l-0.84,-1.42l2.23,-0.73l0.65,-1.58l-0.64,-1.49l-1.37,-1.28l-4.18,-1.73l-0.94,-2.81l-2.92,-1.34l-1.24,-2.7l-0.75,-0.22l-0.84,0.27l-0.46,0.55l-0.09,0.78l-1.61,-0.42l1.75,-0.9l0.59,-1.0l-0.24,-0.9l-1.6,-0.51l0.5,-0.9l1.91,0.56l0.81,-0.33l0.83,-4.19l-1.06,-3.19l-3.34,-0.41l0.3,-2.29l0.6,-0.47l2.53,-0.4l2.93,-1.99l0.18,-0.75l-0.42,-1.42l0.05,-2.41l0.61,-1.47l-0.41,-1.1l-0.13,-2.2l-1.6,-0.59l-2.16,0.82l0.34,-0.93l1.82,-1.1l0.25,-1.05l-0.49,-2.64l-0.19,-4.61l-0.89,-0.79l-1.73,0.09l-0.93,-1.74l0.73,-4.2l0.63,-0.84l4.35,-2.42l1.73,-2.04l0.06,-1.69l1.3,-3.97l-0.11,-3.65l0.64,-4.84l1.91,-0.95l0.61,-1.04l0.55,-1.62l-0.09,-3.28l2.01,-4.15l0.85,-0.2l1.2,1.46l0.55,-0.07l0.46,-0.5l0.09,-0.85l-0.42,-0.87l0.8,-0.52l0.42,-2.56l1.99,-1.5l0.72,-1.23l0.16,-3.55l1.21,-1.92l0.5,-0.43l0.46,0.94l1.05,0.27l3.57,-1.69l1.2,1.52l0.79,0.43l1.06,-0.45l2.76,-2.24l3.2,-1.03l0.92,-1.95l2.97,-1.77l-0.02,-1.86l0.73,-1.05l-0.19,-2.83l0.19,-0.37l2.32,-0.91l2.35,-2.12l0.23,-0.95l-0.31,-1.56l0.29,-0.66l3.67,-1.75l1.99,-0.03l0.88,-1.76l1.03,-4.6l-0.16,-1.02l-2.37,-2.04l-2.34,0.08l-0.36,-0.7l-0.98,-0.37l-2.06,-3.14l-0.79,-0.36l-1.44,-0.08l-3.16,-1.17l-0.65,0.1l-2.65,1.78l-0.44,0.01l-0.97,-2.0l0.65,-0.89l0.15,-1.17l1.07,-0.61l1.02,-1.6l-0.17,-1.22l-1.75,-3.33l0.06,-1.2l1.2,-0.2l1.84,1.89l1.03,0.75l1.08,0.3l1.09,-0.04l3.01,-1.44l1.96,0.13l2.28,1.14l3.87,0.03l1.87,0.48l8.34,0.33l1.27,-0.98l2.41,-1.15l0.77,-1.85l3.07,-1.14l0.59,-0.82l0.3,-1.29l0.83,0.21l1.66,1.52l1.43,0.77l5.35,0.26l3.78,-1.46l1.03,-1.62l0.25,-1.54l1.45,-1.09l0.74,-1.65l3.19,0.58l1.86,1.28l0.24,2.82l0.99,1.75l4.75,4.36l0.66,1.82l-0.44,2.11l1.35,2.8l1.06,0.48l1.68,-0.12l2.34,0.83l0.55,-0.55l-0.05,-1.51l1.36,-0.48l0.76,2.35l-1.89,2.51l-0.29,3.17l0.54,1.11l0.6,0.01l0.99,-0.91l0.48,0.7l0.3,1.5l-0.56,4.03l0.33,1.47l1.84,1.98l0.9,2.89l1.12,0.31l0.52,-0.4l0.04,-0.52l1.65,0.8l2.21,-0.09l0.9,0.49l0.71,2.65l-0.72,0.97l-2.99,2.18l-1.13,2.64l-2.36,1.79l-1.78,0.21l-2.14,1.78l-0.72,2.26l0.72,1.48l0.15,1.18l-1.13,1.76l-3.47,0.93l-3.65,3.0l-3.05,1.37l-2.17,2.82l-0.35,1.32l0.73,1.02l-1.48,0.97l-0.33,1.95l0.41,0.86l1.39,0.93l-0.35,1.31l0.13,0.75l-0.12,0.3l-0.98,0.13l-0.29,0.89l-1.06,-0.2l-0.46,0.37l-0.32,1.8l-3.28,5.47l-0.78,2.64l0.11,1.7l1.58,1.75l0.07,1.4l-2.14,-0.68l-0.99,0.11l-0.68,0.98l-0.1,1.33l-0.9,1.29l-0.91,2.51l-1.44,1.46l-2.01,0.14l-3.31,-2.01l-4.53,0.66l-0.98,0.41l-1.12,-0.49l-3.11,0.28l-0.56,0.45l-0.04,1.31l-2.46,4.73l-1.43,0.95l-1.59,2.2l-1.09,0.56l0.01,-0.76l-0.55,-0.52l-1.36,-0.25l-0.68,0.54l-0.09,4.18l0.72,2.52l-0.83,4.18l0.61,1.45l0.67,0.17l0.4,1.27l0.79,0.22l-0.29,3.71l0.48,1.12l0.27,3.76l-0.69,2.58l0.08,0.98l2.58,1.62l2.3,0.07l1.42,1.1l1.33,-0.5l1.05,0.06l-0.41,3.09l0.82,1.35l-3.43,2.25l0.01,-2.29l-1.81,-0.32l-1.56,-0.7l-3.66,-0.37l-0.86,0.54l-0.78,1.34l-2.46,-4.66l-0.59,-0.31l-1.08,0.07l-0.43,-0.79l-2.26,-1.77l-0.81,0.21l-0.92,1.26l-0.28,-0.91l-2.18,-2.08l-0.5,0.09l-1.32,1.38l-0.97,0.56l-1.53,2.64l-0.2,1.29l0.69,1.16l3.02,1.8l0.98,1.71l2.17,0.75l-0.29,2.12l0.41,1.88l-0.25,4.24l0.5,0.47l0.99,0.22l0.95,1.7l1.38,0.51l0.36,0.45l-0.98,1.25l0.11,0.61l0.97,0.86l-0.71,1.75l-0.07,1.21l0.69,1.82l-0.2,1.59l1.06,0.93l0.17,1.09l0.72,1.28l0.08,2.46l-1.85,1.77l-0.79,3.73l-0.61,-0.56l-0.52,-0.03l-0.99,1.69l-2.34,0.54l-1.59,1.62l-1.01,0.36l-0.27,0.97l1.23,1.04l0.02,0.59l-1.55,1.0l-3.02,2.84l-1.83,2.83l-1.7,0.58l-0.96,1.18l-3.23,1.04l-0.99,2.18l0.33,1.34l-0.54,2.23l-0.74,1.15l-0.25,2.85l-0.67,1.16l-0.18,1.23l-0.74,-0.38l-0.78,0.41l-0.23,2.18l-4.04,0.11l-2.81,-1.08l-3.48,1.96l-0.54,-0.18l-0.8,-1.55l-0.22,-3.95l-1.15,-2.66l-0.11,-1.07l0.7,-1.59l-0.22,-0.76l-1.09,-0.27l-1.63,0.55l-0.57,-2.01l-0.9,-0.47l-0.7,0.29l-0.43,1.22l-1.37,0.06l-0.16,-0.75l1.24,-0.83l0.07,-0.8l-2.14,-4.79l-2.4,-3.04l-2.13,-2.27l-1.92,-1.33l-1.32,-0.24l-1.74,0.54l-1.0,-0.81l-0.58,0.42Z\", \"name\": \"Chhattisgarh\"}, \"IN-CH\": {\"path\": \"M266.15,165.51l-2.24,-2.23l-0.12,-0.55l1.16,-0.55l1.66,0.15l0.44,1.34l-0.16,1.56l-0.74,0.28Z\", \"name\": \"Chandigarh\"}, \"IN-GA\": {\"path\": \"M171.13,653.34l0.82,-0.49l2.2,-0.25l0.84,-1.12l0.38,0.84l1.86,0.75l0.72,2.4l1.25,1.01l1.01,0.17l2.17,-0.81l2.03,0.13l1.31,-0.56l1.58,0.8l0.64,3.06l-0.59,1.24l0.03,0.83l0.59,0.86l0.06,1.41l1.19,1.5l0.15,1.34l-0.25,0.39l-1.24,0.3l-0.42,0.49l0.16,0.93l1.4,1.13l-1.01,2.75l0.15,2.34l-1.02,2.28l-0.76,0.39l-1.33,0.04l-1.82,1.18l-1.4,-0.88l0.06,-1.67l-0.32,-0.72l-0.99,-0.43l-1.0,-1.7l-1.34,-0.43l0.32,-0.82l0.93,-0.77l0.11,-0.61l-0.54,-0.55l-1.62,-5.41l-0.52,-0.65l-1.65,-0.3l-0.6,-0.51l2.08,0.23l0.62,-0.25l0.78,0.3l0.93,0.96l0.63,-0.35l-0.02,-0.58l-1.35,-1.45l-3.77,-1.12l0.45,-0.68l1.85,-0.72l-0.19,-0.91l-0.59,-0.35l-2.36,1.34l-0.55,-0.34l0.05,-0.87l-0.54,-1.54l0.59,-0.89l2.24,-0.65l0.3,-0.6l-0.39,-0.4l-1.74,0.07l-1.67,1.11l-0.87,-2.2Z\", \"name\": \"Goa\"}, \"IN-GJ\": {\"path\": \"M0.5,399.96l0.7,-0.07l0.65,-0.85l1.21,0.35l1.42,-0.85l0.14,-0.66l-0.59,-0.43l-0.93,0.34l-0.77,-0.57l-0.51,-2.68l-0.67,0.36l0.47,-2.07l0.64,-0.96l1.64,-0.62l-0.08,-1.16l0.42,0.58l0.75,0.19l1.26,-1.22l0.45,0.24l0.9,-0.64l10.29,-0.14l0.4,-0.4l0.04,-10.49l0.51,-1.05l1.13,0.05l0.45,2.22l0.74,0.73l0.91,-0.37l1.29,-2.29l1.82,2.06l0.74,0.04l2.52,-1.05l3.13,1.14l3.52,-0.99l8.54,0.22l0.76,0.33l2.36,2.42l1.6,0.78l7.98,0.11l1.43,-0.3l1.28,-1.0l1.64,-3.28l4.06,-0.84l1.74,-1.07l2.27,-0.31l1.43,-0.97l4.1,-0.7l0.18,0.38l-0.74,0.64l-0.12,0.58l0.81,3.24l1.9,1.14l4.26,0.3l3.16,-1.22l0.2,-0.72l-0.41,-0.77l2.11,-1.57l2.5,0.12l0.86,-0.95l1.84,-0.89l-0.41,-1.47l-2.81,-0.83l0.18,-2.07l-0.72,-0.83l-0.07,-0.71l0.57,-1.53l2.65,-1.55l1.66,0.93l2.93,0.8l0.95,0.0l2.15,-0.83l2.27,0.43l1.81,-1.1l2.8,-0.18l1.22,0.17l1.61,0.83l3.68,-0.64l0.6,1.02l1.38,0.34l0.62,-0.37l0.1,-0.96l0.5,-0.3l0.41,0.01l0.74,0.75l1.17,0.13l1.71,-1.24l1.73,-0.39l1.37,1.61l2.36,0.79l1.19,0.15l3.43,-0.47l-2.31,0.59l-0.18,0.93l1.37,1.15l1.47,0.26l0.66,0.97l1.68,0.05l0.11,1.14l1.25,1.86l1.07,-0.16l0.95,-2.34l0.8,-0.05l1.64,0.97l1.95,0.54l0.81,1.65l0.86,0.74l5.67,1.0l1.08,-0.16l1.04,-0.81l0.65,-2.67l0.5,-0.68l2.52,-0.5l-0.24,2.59l0.32,0.65l2.29,0.98l1.23,-0.39l0.06,0.28l-0.47,0.73l-1.64,-0.01l-1.21,1.67l-0.94,2.61l0.78,2.06l0.54,0.75l2.28,1.54l0.5,1.22l1.44,1.4l0.56,-0.04l1.5,-1.02l1.08,-1.87l1.13,1.79l0.1,1.35l0.71,1.7l-1.66,1.34l-0.33,3.86l0.52,0.44l1.25,0.07l1.17,1.92l1.59,0.55l0.03,3.2l1.07,0.14l1.29,-1.03l1.02,0.87l0.0,2.34l0.46,1.2l-0.33,1.36l0.26,0.43l1.46,0.1l1.41,0.86l2.79,-0.78l2.48,3.21l1.08,0.17l1.17,-0.81l2.08,1.91l1.71,0.9l0.52,0.58l0.09,1.77l0.56,0.94l1.07,0.46l1.24,-0.62l0.32,0.13l0.75,0.47l1.19,2.04l1.06,0.7l1.04,2.54l0.7,3.74l0.67,0.28l0.99,-0.26l1.0,1.07l0.15,0.89l-2.47,4.86l-0.69,0.73l-2.4,0.5l-3.97,3.3l-2.47,-0.52l-1.06,0.61l-0.17,1.4l2.3,2.09l0.7,0.27l2.5,-0.14l1.17,0.57l-0.52,0.85l-1.21,0.63l-1.38,0.14l-0.87,-0.73l-0.66,-0.14l-0.64,0.34l-0.43,0.83l0.19,3.95l0.98,1.17l0.6,2.21l0.72,1.01l-0.37,1.38l-0.01,2.02l-1.86,0.34l-2.66,1.26l-0.98,0.85l-1.36,0.17l-2.94,1.25l-0.44,1.12l0.24,2.28l1.08,1.72l-0.69,1.24l-1.5,0.35l-0.49,0.63l0.39,1.13l1.62,2.41l0.55,0.29l5.43,-1.52l3.48,0.09l1.05,-0.57l1.48,0.8l2.63,-0.9l0.24,0.98l-1.57,1.06l-3.99,1.1l-1.51,-0.44l-0.73,0.2l-2.61,2.26l-1.23,3.23l-2.07,0.72l-0.67,-0.54l-0.58,-0.03l-0.41,0.34l-0.93,2.34l-2.01,1.14l-0.89,-0.22l-0.84,0.23l-2.12,-1.04l-0.82,0.35l0.24,1.02l1.22,1.18l1.38,0.77l2.01,-0.03l1.03,1.36l1.56,0.58l2.32,2.59l0.99,2.76l0.19,3.31l-0.49,0.92l-2.42,2.07l-0.13,1.4l-0.42,0.84l-2.66,1.32l-1.84,0.02l-1.33,-1.63l-3.25,-1.89l-1.11,-1.53l-0.78,0.14l-0.93,1.49l-1.29,0.62l-0.04,0.76l1.28,0.48l0.25,1.12l0.99,0.4l0.28,1.19l-2.99,5.31l0.78,1.33l0.23,1.97l-0.49,1.57l0.17,0.94l-3.44,-0.35l-0.69,0.66l-0.27,1.36l-1.1,0.52l-0.38,-0.06l-0.01,-1.51l-0.72,-0.56l-1.37,-0.12l-0.43,0.32l-0.21,0.95l-0.95,0.04l-0.36,-1.68l2.24,-1.3l0.45,-0.95l-0.35,-0.68l-1.23,-0.09l0.08,-1.11l-0.81,-0.47l-2.07,1.39l-1.14,-0.0l-0.65,1.29l-1.14,-0.15l-0.55,0.41l-0.11,0.95l1.46,1.36l0.23,1.61l-1.88,0.66l-1.35,-0.06l-0.65,0.32l-1.02,-0.24l-1.45,0.83l0.73,-2.93l0.57,-1.06l-0.41,-0.59l0.18,-1.49l0.99,-2.09l0.98,-0.77l1.51,-0.17l0.65,-0.65l-0.08,-1.64l-0.77,-1.03l0.99,-1.77l-0.03,-2.84l0.62,-1.11l-0.07,-2.45l1.33,-1.05l-0.21,-0.59l-0.63,-0.42l-0.03,-1.1l-0.67,-0.08l-0.38,0.46l-0.11,-0.45l0.53,-1.02l-0.21,-0.61l-1.26,0.33l0.35,-1.15l-0.63,-0.76l1.16,-0.71l0.28,-0.98l-0.44,-0.43l-1.52,0.3l-0.45,-0.77l-1.18,-0.59l1.25,0.19l0.67,-0.14l0.43,-0.53l-1.08,-2.77l-0.57,-0.44l-1.51,0.57l-0.74,-0.19l0.11,-0.83l-0.45,-0.52l-0.52,-0.03l1.22,-0.68l-0.09,-0.44l-1.49,-0.75l-1.09,-0.93l-0.03,-0.45l-0.63,-0.3l-0.58,0.41l-0.15,-0.32l-0.44,-1.87l1.42,-0.28l0.28,-0.74l-0.56,-0.42l-1.68,0.12l1.8,-0.54l2.67,-1.74l0.35,0.25l0.59,-0.15l0.08,-1.13l-0.83,-0.39l-2.31,0.85l-1.68,1.13l0.77,-1.49l2.09,-1.65l2.56,-1.29l1.44,-1.98l1.44,0.24l2.03,-0.72l0.96,-0.67l4.65,-1.88l0.51,-0.51l0.13,-0.73l-0.86,-0.4l-3.05,1.6l-2.75,0.95l-2.09,-0.31l-1.84,0.69l-1.99,-0.44l-1.81,0.3l-1.83,-0.23l-2.19,0.51l-0.03,-0.91l0.75,-1.97l0.26,-2.24l0.6,-0.39l1.0,-2.09l0.74,-0.36l1.38,-0.01l0.52,-0.51l0.26,-0.88l0.74,-0.47l-0.31,-0.63l-1.03,0.01l-0.6,0.71l-2.18,0.28l-2.07,1.63l-0.98,-1.7l1.19,-5.61l0.93,-1.11l0.97,-0.45l1.83,0.91l0.97,-0.07l1.05,0.62l0.56,-0.08l1.83,-2.13l0.87,-0.16l1.4,0.83l0.95,-0.34l0.39,-1.48l-0.64,-1.05l-0.97,0.51l-1.22,-0.43l-0.84,0.08l-1.89,0.94l-2.79,-0.93l-1.08,0.05l-1.68,-0.54l-0.77,0.2l-1.65,1.38l-0.67,0.2l0.15,-0.47l-0.39,-0.52l-1.99,0.41l-0.25,-1.46l0.75,-0.74l0.1,-0.66l-0.41,-0.73l-0.48,-0.12l-1.3,0.92l-0.97,2.53l-1.14,-0.05l-0.41,-1.1l-0.83,-0.23l-1.09,0.05l-0.53,0.76l-1.33,-0.02l-0.2,0.66l0.68,0.67l1.07,0.28l0.85,-0.5l0.31,0.91l0.9,0.39l1.02,-0.03l0.24,1.05l-0.28,3.28l-1.38,1.94l-1.79,0.18l-0.67,0.89l-0.99,-0.87l-1.35,-0.09l-0.31,0.32l0.18,0.41l0.66,0.43l-0.97,-0.27l-0.45,0.17l0.18,0.63l-1.59,0.61l0.15,0.67l1.89,0.64l1.44,-0.1l0.69,0.88l-0.18,0.92l-1.97,-1.61l-0.75,-0.2l-0.45,0.23l-0.2,1.02l1.11,0.46l0.3,0.48l-2.34,-0.84l-0.76,0.39l0.16,2.39l0.61,0.07l0.52,0.59l1.44,-0.43l1.41,0.38l1.26,-0.46l0.97,1.2l0.7,1.57l0.66,0.39l0.82,0.02l0.65,0.95l0.03,0.91l-0.66,0.75l-1.0,3.65l-2.24,2.74l-0.51,1.07l-1.35,1.36l-0.58,2.43l0.41,1.27l-3.25,1.99l-2.05,0.24l-4.99,3.12l-1.45,0.04l-2.41,1.15l-1.67,1.19l0.07,-0.5l-1.13,0.05l-1.81,1.46l-0.9,1.36l-4.4,1.16l-5.39,2.64l-1.52,0.13l-0.92,0.73l-2.44,0.05l-0.65,0.93l-3.65,0.22l-0.99,-0.18l-0.85,-0.59l-1.16,0.23l-1.21,-0.86l-4.8,-1.96l-2.71,-1.5l-1.64,-1.54l-1.94,-0.78l-8.52,-7.09l-3.03,-3.95l-3.49,-3.74l-0.87,-1.33l-0.17,-0.96l-1.73,-1.02l-3.88,-4.04l-1.94,-1.14l-2.67,-3.2l-1.63,-1.0l-0.84,-1.01l-0.18,-1.89l-0.66,-0.19l-0.63,0.59l-0.54,-0.17l-4.18,-3.73l-1.45,-1.96l-1.46,-1.14l-1.7,-2.63l-1.65,-1.48l-1.47,-2.81l0.88,-3.29l0.5,-0.76l1.32,-0.83l-0.26,0.75l1.01,1.24l0.67,0.08l1.02,-0.44l0.83,0.17l0.94,-0.69l0.25,0.21l-1.03,2.68l0.24,0.84l1.52,1.23l2.4,-0.38l1.52,-0.7l0.65,-0.71l2.26,-0.04l1.51,-0.42l1.45,-1.37l0.19,-0.7l-0.34,-1.28l0.36,-0.06l0.3,2.26l1.88,0.7l0.59,-0.29l0.11,-0.39l0.69,-0.13l0.66,-0.9l0.59,0.21l0.46,-0.2l0.83,-2.0l1.53,1.64l0.7,-0.0l0.95,-1.43l1.58,-0.33l2.54,-2.09l2.6,-0.59l2.59,0.34l1.25,-0.49l4.5,-7.15l0.16,-1.52l1.55,-2.48l2.22,-1.93l1.09,0.04l0.73,-0.69l0.69,-1.43l0.07,-0.9l-0.87,-2.13l-1.25,-0.94l-2.24,1.56l-0.43,0.78l0.33,1.53l-0.31,2.26l-1.2,0.23l-0.53,-0.37l-0.68,0.08l-0.97,-0.5l-1.1,-1.31l-0.65,0.29l-0.22,1.03l-1.45,0.21l-0.85,-0.55l-0.06,-0.82l-0.53,0.16l-0.65,1.13l0.61,0.91l-1.78,0.22l-2.05,0.8l-5.13,1.18l-2.35,1.7l-1.17,1.86l-1.81,-0.42l-2.04,-0.02l-0.85,-0.55l-1.78,-0.11l-5.03,-1.67l-4.08,-0.59l-4.99,-3.19l-5.31,-2.24l-6.42,-4.41l-0.28,-0.83l-0.74,-0.31l-0.42,-0.6l0.49,-0.71l0.1,-0.83l-0.57,-0.36l-1.75,0.26l-0.15,-0.25l0.45,-0.89l1.3,-0.27l0.19,-0.55l-1.43,-1.28l-1.29,-0.24l-0.08,-0.55l0.78,-0.72l-0.27,-0.47l-1.15,-0.11l-0.95,0.55l-0.06,-1.22l-1.08,0.26l1.83,-2.32l-0.14,-0.36l-0.86,-0.1l-0.56,-0.78l-0.49,-0.1l-0.21,0.45l0.29,1.18l-0.41,0.11l-0.0,-3.49l2.18,0.23l0.39,-0.38l0.04,-0.61l-0.48,-0.5l1.61,-0.59l1.53,-1.82l1.55,-0.78l1.08,-1.78l1.61,-0.09l3.07,-2.0l-0.09,-0.69l-0.8,-0.19l-1.32,0.28l-1.37,1.12l-2.52,0.25l-0.62,0.52l-0.65,1.24l-5.16,2.14l-2.79,3.05l0.2,0.67l-0.49,0.4l-4.27,-0.24l-0.75,-0.44ZM141.04,481.24l-0.02,0.35l-0.14,0.07l0.03,-0.2l0.13,-0.22ZM139.1,480.22l0.01,0.97l-0.7,0.34l-0.26,-0.5l0.95,-0.81ZM28.19,437.73l0.34,-0.24l-0.1,0.14l-0.23,0.1Z\", \"name\": \"Gujarat\"}, \"IN-RJ\": {\"path\": \"M113.16,366.39l-0.79,-0.19l-0.82,-1.14l-3.88,0.61l-1.37,-0.78l-1.49,-0.21l-3.05,0.21l-1.75,1.08l-2.15,-0.45l-2.94,0.83l-2.75,-0.76l-1.27,-0.83l-0.91,-0.2l-1.55,-3.64l-2.68,-4.47l-2.06,-7.11l-3.54,-3.49l-0.79,-2.29l-1.64,-1.88l-0.21,-1.01l0.33,-6.6l-0.19,-1.6l-0.91,-1.04l-1.23,-0.24l-3.67,1.06l-3.52,0.09l-2.79,-0.74l-0.75,-0.92l-0.69,-1.91l-3.03,-3.12l-0.94,-1.52l-0.54,-1.56l0.29,-3.26l1.77,-3.12l0.63,-2.52l-0.28,-1.98l0.55,-1.87l-0.16,-5.57l-1.0,-1.17l-2.36,-0.91l-7.44,0.28l-1.19,-0.44l-3.46,-2.72l-4.77,-1.9l-0.82,-0.89l-0.21,-1.18l1.29,-7.93l0.8,-2.43l1.22,-2.0l8.35,-7.32l1.89,-2.92l2.65,-2.47l0.77,-1.08l2.56,-6.91l7.24,-6.53l3.37,-0.9l2.19,0.73l2.89,2.68l0.22,2.51l0.96,2.12l1.23,1.73l1.86,1.21l2.15,0.28l2.76,-0.58l7.27,-3.47l2.28,-0.75l5.18,-0.75l5.05,-0.01l9.45,-2.8l0.73,-1.01l0.37,-4.13l0.46,-1.13l2.41,-3.02l5.04,-4.28l1.5,-3.1l1.81,-6.71l0.69,-1.31l2.22,-2.6l16.76,-8.5l1.03,-0.96l1.04,-2.37l2.71,-3.73l5.61,-10.36l4.24,-13.14l5.55,-2.7l5.67,-1.24l1.25,-0.68l5.27,-4.38l0.01,1.53l-2.58,4.47l0.0,0.93l0.33,0.34l15.39,0.72l3.64,0.48l0.02,0.94l0.94,0.93l0.04,0.52l-2.13,1.4l-0.59,2.13l0.48,0.91l1.08,0.31l2.26,-0.71l0.48,-0.41l0.19,0.23l-0.67,2.55l-0.26,2.85l0.37,1.18l0.79,0.98l-0.07,1.22l-0.19,0.37l-1.73,0.3l-0.34,0.95l2.48,3.97l1.17,-0.0l0.51,-1.04l3.42,-0.01l1.87,-1.25l2.62,1.15l1.36,2.74l1.0,0.28l1.28,-0.27l0.65,1.25l0.71,0.48l2.28,-0.55l0.86,-0.67l1.03,0.64l1.26,-0.12l1.93,-1.4l-0.21,1.19l0.37,0.73l0.69,0.23l1.08,-0.74l0.54,1.48l-0.83,0.46l-0.2,0.49l0.54,1.33l0.0,1.06l1.94,2.91l1.92,0.98l-0.02,0.67l-0.77,0.56l-0.22,0.85l3.34,9.56l3.35,4.22l2.17,1.57l-0.14,0.74l0.33,0.67l1.41,0.08l2.09,0.88l2.08,1.93l2.08,2.67l1.58,2.67l-0.7,-0.71l-0.52,-0.07l-1.05,1.15l-1.53,0.73l-0.43,0.67l0.27,0.88l0.98,0.7l0.61,-0.02l0.86,-0.7l-1.13,1.37l-0.82,1.64l0.59,0.99l-0.48,0.39l-0.91,-0.04l-0.45,0.81l0.15,0.87l1.22,0.93l0.58,1.57l0.74,0.31l3.48,-0.31l1.76,1.41l1.39,-0.66l0.29,-1.0l-0.42,-1.48l-0.6,-0.68l-0.03,-1.56l-0.65,-2.07l0.15,-1.09l0.22,-0.27l1.06,0.2l1.09,-0.39l1.6,1.04l1.18,-0.25l0.39,-0.55l0.02,-0.94l-1.13,-0.83l0.85,-0.33l0.02,-0.98l0.68,0.29l2.29,-0.31l0.49,0.72l-0.59,-0.08l-0.38,0.31l0.06,0.73l0.66,0.56l-0.57,0.47l0.03,0.51l1.42,0.83l0.92,0.06l0.52,1.73l0.97,0.65l1.15,-1.04l2.04,-0.52l0.28,-0.58l-0.44,-1.85l3.39,-2.44l1.36,-1.92l1.01,-0.38l2.42,2.36l0.15,0.52l-0.65,2.79l0.52,2.35l0.19,3.84l-0.86,1.6l-0.46,2.44l0.4,1.04l-0.58,0.37l-0.03,0.84l0.72,0.56l2.1,-0.25l1.27,-1.76l2.05,-0.4l0.26,-0.81l-1.3,-0.89l0.24,-0.53l1.97,0.6l0.71,-0.1l0.6,-0.56l0.81,0.49l0.58,-0.41l0.82,0.59l0.81,-0.67l0.38,0.07l0.36,2.7l0.84,0.78l0.33,0.85l0.04,0.6l-0.52,1.02l0.73,0.91l0.01,1.61l2.3,3.01l0.95,2.22l1.87,0.74l1.89,1.31l1.14,0.19l0.15,1.49l0.75,1.73l0.61,0.61l-0.36,0.58l-1.2,0.7l-0.31,0.83l-2.57,0.82l-0.37,0.89l0.3,0.66l0.88,0.32l0.64,1.0l2.23,0.36l0.7,-0.5l0.87,1.25l-1.42,0.37l-6.42,3.0l-0.85,1.15l-0.02,2.84l0.73,0.32l0.77,-0.2l1.26,-1.79l1.15,0.07l4.09,-1.67l2.33,-1.65l2.98,0.47l0.85,0.51l1.05,-0.35l2.89,0.35l1.09,1.2l0.67,-0.29l0.09,-1.11l1.09,-0.08l1.28,-1.16l1.69,-0.04l2.02,0.57l-0.98,0.92l-1.12,0.42l-0.05,0.72l0.66,0.88l-0.85,0.24l-0.1,0.82l-1.0,-0.26l-0.95,0.2l-0.54,3.52l-0.93,0.02l-0.98,-0.46l-1.99,0.86l-1.51,0.22l-0.57,0.55l-0.21,0.79l-1.71,0.58l-0.26,0.53l0.27,0.69l-2.38,1.08l-0.92,1.0l-2.98,0.75l-3.21,2.22l-2.11,0.06l-0.56,0.59l-0.11,0.9l-2.76,0.32l-1.52,2.06l-2.32,1.81l-2.65,0.18l-0.91,0.72l-0.32,0.96l-1.97,0.47l-0.92,1.2l-1.56,1.0l-1.05,0.28l-0.68,1.19l-2.24,1.52l-0.52,1.68l-0.79,0.35l-0.93,1.01l-2.88,0.01l-0.79,1.22l-0.84,0.14l-1.36,1.03l-1.09,1.85l-0.12,1.68l-1.03,0.59l1.24,6.15l1.02,3.16l1.64,0.79l1.23,1.75l2.04,0.43l1.85,1.25l0.57,0.11l1.26,-0.41l1.39,0.2l1.84,1.04l0.77,-0.39l1.71,0.0l2.77,-1.21l2.19,0.5l1.34,-0.62l0.88,-1.95l0.69,-0.54l1.52,-0.36l0.69,0.22l0.38,0.55l-0.47,1.46l0.69,1.45l-0.15,1.82l1.16,1.77l-0.39,1.97l-1.43,1.01l-1.76,-0.7l-1.13,0.24l-1.06,-0.21l-3.5,1.17l-2.7,0.19l-4.12,1.59l-0.88,1.16l-0.03,0.67l0.99,2.1l0.11,1.21l-0.8,0.67l-1.8,0.4l-0.46,0.59l0.01,0.63l2.21,2.47l1.07,0.57l2.33,0.03l1.64,1.33l0.87,1.46l0.43,2.21l-0.59,0.95l-3.32,1.33l-0.31,-0.01l-0.09,-0.98l-0.76,-1.19l-1.72,-0.45l-0.99,0.55l0.19,7.02l0.56,1.52l1.87,2.64l-0.75,1.42l-2.66,0.44l-2.87,-1.98l-0.29,-0.38l0.59,-1.58l-0.65,-0.89l-1.49,0.26l-1.32,0.66l-0.62,0.81l-0.38,1.25l-0.93,0.27l-0.8,-1.35l-0.81,-0.46l-2.36,0.15l-2.37,-0.75l-2.62,0.03l-0.56,-0.65l-0.06,-1.39l-0.91,-0.21l-1.44,0.8l-0.41,0.77l-0.22,5.75l-0.91,1.03l-3.07,2.04l-0.18,0.86l0.58,0.69l-0.36,0.8l-2.54,1.42l-3.18,1.16l-1.39,-1.09l-0.78,0.05l-0.42,0.67l0.21,1.39l-0.75,1.99l-1.04,-0.67l-1.53,-0.23l-0.54,-1.73l-2.26,-1.43l-0.39,-0.57l-0.11,-1.38l0.73,-1.34l0.34,-0.08l2.56,1.5l0.99,-0.14l1.03,-0.78l1.53,0.76l2.78,-3.75l-0.19,-0.69l-1.38,-0.85l-0.38,-0.73l0.33,-1.04l1.14,-1.39l0.31,-1.44l-0.35,-1.02l-1.31,-0.83l-0.49,-2.5l0.29,-1.27l0.46,-0.6l2.12,0.79l0.87,-0.42l0.54,-0.87l-0.12,-3.35l-1.72,-2.18l-0.08,-1.9l-1.45,-1.82l-0.93,-0.39l-1.02,0.2l-2.12,1.19l-6.1,1.13l-1.71,-0.05l-2.46,-0.66l-2.71,0.12l-0.69,-0.28l-0.43,-0.95l1.0,-1.04l0.14,-0.7l-0.82,-1.9l1.39,1.33l1.73,0.45l2.43,-0.55l1.29,-1.43l-0.03,-0.57l-0.61,-0.38l-3.06,0.55l-1.27,-0.53l0.04,-0.32l1.57,0.36l0.71,-0.62l-0.09,-0.83l-0.78,-1.15l0.96,-1.84l-0.38,-0.68l-2.77,0.61l-2.39,-0.18l-0.87,0.22l-1.43,2.29l0.29,1.74l-0.19,0.81l-1.27,-0.2l-1.56,1.09l-2.66,-1.04l-1.24,-1.01l-1.28,-0.2l-0.46,0.24l-0.21,0.62l0.68,2.0l-0.19,1.6l0.21,0.59l3.12,0.55l1.1,-0.15l0.1,0.39l-0.55,2.44l-0.6,0.36l-1.68,0.1l-1.61,-1.83l-0.62,-1.83l-0.6,-0.15l-0.56,0.47l-0.19,2.47l0.42,1.11l-2.09,4.22l-0.12,0.98l0.53,0.75l3.35,1.05l0.25,0.61l-2.43,2.42l-0.39,1.79l-0.73,1.25l0.16,0.52l0.56,0.3l2.45,-0.12l1.2,0.69l0.89,3.8l2.05,2.4l-0.64,1.04l-1.18,3.43l-0.18,1.43l0.11,2.2l0.8,1.33l0.19,1.94l-2.53,4.99l-0.87,0.81l-5.89,2.59l-2.01,1.8l-1.52,2.59l0.02,1.08l0.6,0.72l2.45,0.79l1.39,0.05l1.5,1.36l-2.98,1.57l-1.93,0.47l-2.21,1.15l-2.7,-0.33l-1.68,0.98l-0.59,-0.97l-0.83,-0.47l-1.34,-2.19l-1.43,-0.75l-1.43,0.61l-0.48,-0.26l-0.72,-2.86l-2.18,-1.34l-2.15,-1.97l-0.91,-0.2l-0.73,0.85l-0.66,-0.04l-2.15,-2.97l-0.57,-0.34l-2.93,0.76l-1.14,-0.82l-1.17,0.04l0.32,-1.25l-0.46,-1.22l0.13,-1.76l-0.24,-0.9l-1.4,-1.24l-0.65,0.06l-1.41,1.07l0.32,-2.39l-0.31,-0.73l-1.75,-0.71l-1.19,-1.94l-1.47,-0.23l0.28,-3.15l1.47,-1.08l0.28,-0.53l-0.77,-1.97l-0.12,-1.42l-1.32,-2.1l-0.38,-0.24l-0.65,0.19l-1.13,1.93l-1.34,0.87l-0.98,-1.08l-0.62,-1.36l-2.63,-2.03l-0.7,-1.62l0.87,-2.35l0.88,-1.21l1.13,0.05l0.78,-0.31l0.62,-1.27l-0.18,-0.76l-0.43,-0.3l-1.27,0.38l-1.91,-0.74l0.23,-2.35l-0.43,-1.01l-1.21,-0.11l-2.26,0.63l-0.78,1.08l-0.46,2.35l-0.86,0.68l-0.6,0.06l-1.89,-0.53l-3.52,-0.4l-1.51,-2.29l-2.14,-0.65l-1.84,-1.02l-1.46,0.26l-0.78,2.15l-0.36,0.2l-0.92,-1.62l-0.24,-1.27l-1.85,-0.15l-0.62,-0.94l-1.53,-0.29l-0.97,-0.75l2.33,-0.44l0.22,-0.89l-0.68,-0.67l-4.54,0.35l-2.17,-0.71l-1.13,-1.44l-0.59,-0.29l-2.11,0.47l-1.51,1.18l-0.76,-0.09l-0.9,-0.81l-0.82,0.05l-0.91,0.64l-0.15,0.93ZM294.16,288.97l0.26,-0.35l0.11,-0.1l-0.05,0.3l-0.31,0.15ZM252.61,250.52l-0.88,-0.6l-0.15,-0.41l0.59,0.24l0.44,0.77Z\", \"name\": \"Rajasthan\"}, \"IN-MP\": {\"path\": \"M191.91,423.84l-0.52,-3.36l-0.53,-1.39l0.74,-0.61l0.77,-0.34l2.88,0.29l2.23,-1.16l1.99,-0.5l3.36,-1.88l-0.0,-0.75l-1.53,-1.53l-4.03,-0.93l-0.42,-0.88l1.39,-2.39l1.85,-1.66l5.83,-2.55l1.04,-0.94l1.49,-3.12l1.15,-1.64l0.11,-1.95l-0.24,-1.12l-0.77,-1.25l-0.08,-1.88l0.16,-1.29l1.86,-4.79l-2.14,-2.67l-0.45,-2.8l-0.59,-1.21l-1.63,-0.91l-2.47,0.1l0.66,-1.0l0.32,-1.64l1.74,-1.48l0.81,-1.32l-0.17,-0.87l-0.45,-0.45l-3.45,-1.11l-0.08,-0.37l2.2,-4.61l-0.4,-1.42l0.1,-1.99l0.36,1.48l0.95,0.81l0.7,1.18l0.53,0.26l1.56,-0.03l1.01,-0.34l0.72,-0.72l0.5,-2.94l-0.75,-0.84l-1.19,0.14l-2.6,-0.34l0.17,-1.7l-0.66,-1.97l0.84,0.14l1.09,0.93l2.15,1.06l1.16,0.09l1.62,-1.1l1.02,0.31l0.63,-0.38l0.36,-1.3l-0.29,-1.62l1.1,-1.75l2.84,0.09l2.19,-0.57l-0.84,1.67l0.9,1.76l-1.84,-0.24l-0.48,0.64l0.06,0.81l0.84,0.71l1.12,0.24l2.91,-0.55l-1.3,1.1l-1.61,0.23l-1.34,-0.35l-1.47,-1.38l-0.77,0.01l-0.33,0.88l0.81,1.84l-0.85,0.94l-0.32,0.92l0.8,1.39l1.08,0.43l2.69,-0.13l2.41,0.65l1.95,0.06l6.25,-1.16l2.89,-1.35l0.81,0.55l0.9,1.26l0.02,1.76l1.69,2.09l0.14,2.99l-0.72,0.67l-1.35,-0.77l-1.15,0.13l-0.74,0.98l-0.34,1.56l0.56,2.82l1.31,0.91l0.28,0.62l-0.23,1.1l-1.45,2.03l-0.07,0.88l0.25,0.76l1.62,1.36l-2.15,2.93l-1.36,-0.75l-1.75,0.95l-3.0,-1.53l-0.78,0.44l-0.86,1.74l0.13,1.58l0.39,0.76l2.43,1.6l0.49,1.72l0.33,0.26l1.63,0.23l0.86,0.6l0.71,0.05l0.53,-0.62l0.69,-1.91l-0.18,-1.56l1.04,0.97l0.88,0.15l3.38,-1.22l2.74,-1.55l0.62,-1.43l-0.58,-1.02l2.89,-1.87l1.22,-1.46l0.23,-5.8l1.25,-0.97l0.03,1.13l0.96,1.07l0.65,0.22l2.18,-0.18l2.45,0.76l2.27,-0.16l0.37,0.22l0.5,1.22l0.8,0.37l1.54,-0.47l0.94,-2.01l2.1,-0.79l-0.46,2.16l2.85,2.18l0.96,0.53l3.22,-0.59l1.09,-2.16l-2.28,-3.57l-0.43,-4.0l0.27,-1.37l-0.24,-1.82l1.59,0.28l0.46,1.83l1.11,0.44l3.72,-1.46l0.82,-0.85l0.14,-0.79l-0.48,-2.47l-1.05,-1.74l-1.9,-1.51l-2.48,-0.08l-0.78,-0.44l-1.9,-2.1l0.23,-0.33l1.92,-0.41l0.89,-0.95l-0.08,-1.74l-0.97,-2.28l0.51,-0.72l3.91,-1.51l2.67,-0.19l3.37,-1.16l1.06,0.21l0.95,-0.26l1.95,0.71l1.88,-1.18l0.37,-0.58l0.33,-2.13l-1.25,-2.17l0.23,-1.44l-0.69,-1.42l0.48,-1.43l-0.97,-1.29l-1.87,-0.11l-1.6,0.8l-0.94,1.95l-0.61,0.55l-2.56,-0.43l-2.91,1.24l-1.6,-0.03l-0.73,0.39l-1.59,-1.02l-1.63,-0.22l-1.33,0.41l-1.98,-1.3l-1.68,-0.23l-1.39,-1.83l-1.51,-0.67l-0.88,-2.84l-1.3,-5.49l1.02,-0.67l0.31,-2.18l0.62,-1.04l1.1,-0.9l1.23,-0.38l0.55,-1.06l2.42,0.18l0.59,-0.28l0.95,-1.02l0.89,-0.44l0.58,-1.75l2.19,-1.47l0.56,-1.08l0.9,-0.2l1.61,-1.02l0.91,-1.21l2.0,-0.48l0.62,-1.26l0.58,-0.41l2.55,-0.13l2.61,-2.01l1.39,-1.95l2.46,-0.14l0.69,-0.61l0.16,-0.98l2.14,-0.08l3.22,-2.23l3.09,-0.81l0.88,-0.97l2.69,-1.32l-0.1,-1.03l1.58,-0.6l0.61,-1.23l1.4,-0.18l1.79,-0.82l1.11,0.48l1.32,-0.23l0.74,-2.26l-0.13,-1.3l1.54,0.32l0.58,-0.57l0.06,-0.52l1.15,-0.19l1.1,0.21l1.15,-1.25l2.21,0.06l0.6,0.87l1.21,0.11l1.07,1.0l1.77,0.32l1.5,0.84l1.12,-0.0l0.65,-0.6l1.15,0.01l1.42,-0.73l0.31,0.53l0.62,0.09l0.33,-0.27l0.47,0.74l0.85,0.09l2.08,1.98l1.97,-0.15l0.92,3.46l2.47,4.19l0.31,1.69l-0.36,1.13l0.63,0.93l-1.09,1.53l-1.67,0.49l-0.96,0.95l-0.03,1.06l0.54,0.96l-0.96,0.59l-0.16,1.24l1.03,1.32l-1.17,1.84l-1.04,2.8l-1.41,1.74l-0.79,2.01l-2.15,1.79l-0.42,1.83l0.82,2.19l-0.08,0.67l-0.87,0.47l-3.09,0.63l-2.0,1.1l-2.01,-0.16l-3.47,0.83l-0.72,0.75l-0.3,1.66l-0.43,0.6l-2.48,2.28l0.14,1.03l1.3,1.67l2.05,4.43l-1.1,3.43l0.3,1.25l-0.41,1.16l-1.97,1.91l-2.39,1.59l-0.5,1.2l1.73,2.46l0.18,1.91l0.95,1.42l-0.09,1.58l0.4,0.6l-0.05,0.55l-1.41,2.68l0.63,1.3l0.81,0.48l0.33,0.83l2.13,1.35l-0.66,2.0l1.03,1.4l1.2,0.28l1.31,-0.64l0.68,-0.76l0.44,-1.78l0.54,-0.38l1.29,0.66l3.7,3.07l1.13,0.44l1.71,0.11l0.29,1.21l0.51,0.5l1.39,0.24l2.0,-1.84l1.09,-2.43l1.6,-1.48l0.61,-1.1l0.21,-1.63l-0.77,-0.66l-1.18,-0.2l0.18,-1.5l-0.89,-1.24l-0.76,-1.86l-1.56,-0.8l-2.6,0.54l-0.4,-0.6l-0.1,-0.69l0.64,-1.42l-0.4,-4.14l-2.32,-3.07l-0.93,-5.45l-1.38,-3.44l-1.82,-1.91l0.46,-1.11l1.51,-1.78l-0.04,-0.98l0.34,-0.29l1.63,0.2l1.78,1.89l1.0,-0.11l0.24,-0.64l-0.22,-1.03l0.54,-1.16l-0.8,-1.21l0.38,-1.0l1.02,-0.28l0.21,2.56l0.28,0.42l0.67,0.24l1.06,-0.34l0.39,-0.55l0.01,-2.04l0.8,-1.02l0.43,0.73l-0.35,2.05l0.5,0.45l1.11,-0.0l-0.13,1.21l-0.65,1.35l0.06,1.31l-1.51,1.2l-0.74,1.59l0.05,1.24l0.86,0.77l1.08,-0.45l0.92,-1.08l1.46,-0.63l0.23,-1.37l0.95,0.5l-1.07,1.61l0.14,0.88l0.53,0.5l2.51,-0.66l0.27,1.38l0.64,0.34l0.66,-0.28l0.8,-0.96l3.2,0.58l0.73,-0.83l-0.57,-2.42l0.54,0.56l0.59,0.1l1.28,-1.19l1.03,0.15l0.67,-0.35l-1.84,2.96l-0.99,1.04l-0.22,2.1l0.69,0.76l1.57,0.06l0.34,-0.27l0.21,-2.05l0.73,0.13l0.64,1.13l0.95,-0.04l2.13,-2.35l2.82,0.98l3.59,-0.24l0.55,0.59l0.71,0.2l2.3,-1.07l-0.01,-0.76l-0.98,-1.46l0.31,-0.53l1.98,-0.41l3.08,-2.33l2.01,-0.92l1.31,0.28l1.46,-1.05l0.73,-1.06l0.9,0.24l1.34,-0.26l0.81,1.27l0.36,2.78l1.13,0.71l0.62,0.83l0.69,-0.02l0.56,1.65l-1.97,1.05l-1.44,1.71l-0.96,-0.01l-0.34,0.31l0.1,1.75l0.99,1.21l1.85,-0.32l1.64,0.37l0.55,-0.44l0.02,-0.69l0.89,0.96l1.03,-0.11l1.14,-0.73l0.14,-0.7l-1.44,-0.98l-0.23,-0.67l1.41,0.35l0.98,-0.14l0.49,-0.56l-0.02,-0.89l0.91,1.49l1.19,1.06l2.66,-0.26l0.57,-0.45l-0.02,-0.8l-1.53,-1.17l2.9,-0.26l0.82,-1.55l0.76,-0.22l0.37,0.5l-0.88,2.05l-0.17,1.21l-0.87,0.88l-0.27,1.12l-0.71,0.9l-0.01,0.88l0.65,0.49l1.01,0.13l2.85,-0.5l1.42,1.01l1.82,-0.42l2.77,1.85l0.48,-0.11l0.95,-1.14l1.13,-0.17l0.55,-0.44l-0.19,-1.79l1.86,-2.5l0.21,-1.01l-0.21,-1.35l1.88,-0.09l1.44,0.45l0.14,1.38l1.85,0.38l1.28,-0.26l0.5,-0.44l-0.0,-0.94l-0.92,-0.68l2.58,-0.76l1.08,2.35l-0.2,0.73l0.3,0.56l2.82,0.72l1.28,-0.01l0.48,1.09l0.94,0.37l1.83,-0.48l0.75,0.19l0.86,1.37l-0.24,1.06l0.26,0.65l2.72,2.08l2.45,0.41l2.82,1.69l0.96,-0.18l1.48,-1.0l-0.13,2.39l0.86,0.49l0.92,-0.62l0.09,1.92l0.52,0.37l0.8,-0.12l0.35,0.24l-0.59,1.47l0.13,0.65l3.0,0.17l0.76,-0.21l0.66,-0.93l-0.07,-1.74l4.89,1.07l3.33,-1.1l0.09,1.22l0.4,0.33l1.39,0.15l0.54,1.49l0.68,0.8l-0.36,0.47l-1.52,-0.19l-0.64,0.68l0.2,2.3l-0.31,2.05l0.32,0.63l0.66,0.4l0.01,2.03l-0.73,1.7l-0.24,1.96l-0.48,0.42l-0.99,0.18l-0.36,0.6l0.51,1.13l1.45,1.26l-0.08,1.5l1.94,2.08l-0.51,1.73l-3.3,1.36l-0.49,0.55l-0.31,1.33l-2.3,1.07l-1.01,0.87l-0.88,0.08l-7.25,-0.43l-1.86,-0.49l-3.75,-0.02l-2.21,-1.13l-2.21,-0.16l-3.22,1.48l-0.71,0.02l-1.74,-0.88l-1.97,-1.98l-1.49,-0.09l-0.93,0.68l0.04,1.82l1.74,3.3l0.13,0.87l-0.82,1.16l-1.16,0.74l-0.2,1.29l-0.68,0.92l1.15,2.78l0.98,0.35l3.34,-1.97l2.94,1.13l2.03,0.35l1.91,3.02l1.05,0.45l0.42,0.74l2.45,-0.02l2.02,1.71l-0.93,5.0l-0.6,1.3l-1.71,-0.05l-4.13,2.09l-0.4,0.98l0.22,2.14l-2.16,1.95l-2.51,1.09l-0.4,1.44l0.25,2.13l-0.72,1.02l0.15,1.54l-2.9,1.71l-0.81,1.84l-3.11,0.97l-3.42,2.57l-1.2,-1.63l-0.76,-0.29l-2.59,0.93l-1.23,0.78l-0.33,-0.11l-0.37,-0.87l-0.55,-0.26l-1.18,0.75l-1.36,2.21l-0.12,3.42l-0.63,1.08l-2.01,1.52l-0.47,2.63l-0.86,0.45l-0.09,0.55l0.46,1.25l-1.05,-1.17l-0.71,-0.26l-0.67,0.17l-1.14,1.39l-1.27,2.61l-0.33,1.02l0.08,3.35l-0.46,1.29l-0.84,1.13l-1.17,0.26l-0.81,1.51l-0.42,4.31l0.2,2.79l-0.79,3.1l-0.5,1.32l-1.2,0.7l-4.35,-2.38l-2.47,0.26l0.66,-1.14l-0.53,-1.51l-2.06,-1.52l-0.86,-1.78l-1.97,-0.57l-1.82,-1.32l-2.9,1.1l-0.95,1.06l-2.08,0.67l-1.29,-0.44l-1.59,0.81l-1.72,0.26l-1.05,-1.58l-1.84,-0.51l-3.21,0.31l-2.72,1.46l-0.66,-2.26l-1.15,-0.86l-0.48,-0.84l-1.97,-0.81l-2.96,-0.11l-2.32,-0.77l-0.87,0.22l-0.62,1.76l-4.01,1.3l-2.67,0.31l-2.03,0.7l-0.54,0.74l0.27,1.26l-0.51,0.33l-6.33,1.11l-4.0,-0.66l-1.57,-1.01l-0.97,-0.01l-1.3,0.64l-0.55,-3.04l-0.83,-0.67l-1.23,-0.09l-0.76,0.24l-0.93,1.06l-3.57,1.12l-1.56,1.75l-1.72,1.11l-5.31,1.96l-1.03,0.07l-2.53,-0.84l-2.73,1.48l-0.66,-0.51l-1.65,-0.17l-1.51,0.48l-1.41,-1.01l-0.7,0.0l-0.39,0.34l-1.68,-3.06l0.14,-0.72l3.36,0.16l0.93,-0.48l-0.89,-5.48l-1.4,-0.87l-0.32,-0.69l-0.8,-0.52l-4.42,-0.24l-0.78,0.24l-0.86,0.87l-1.11,0.34l-0.85,0.92l-1.1,-0.81l-2.12,0.08l-2.74,1.01l-3.44,2.43l-2.09,0.11l-1.09,0.46l-0.85,1.04l-0.3,2.63l-1.62,2.5l-2.88,2.12l-0.14,0.51l0.61,1.53l0.02,1.19l-0.72,1.14l-3.85,0.87l-1.98,2.37l-1.61,0.61l-2.78,0.38l-2.94,-0.34l-1.16,-0.59l-1.08,-1.5l0.86,-0.25l0.29,-0.6l-0.36,-2.94l-1.17,-2.7l-0.64,-0.52l-1.32,0.08l-2.71,-0.81l-2.23,-0.27l-2.14,0.52l-3.25,0.17l-2.54,-0.23l-3.15,0.44l-6.44,-0.32l-3.07,-0.67l-2.27,-1.01l-1.93,-3.14l-1.84,-1.33l-1.81,-0.18l-1.57,-0.99l-1.27,-0.25l-4.77,0.17l-1.46,-1.1l-2.02,-0.68l-2.12,-1.56l-0.9,-2.61l0.18,-3.47l-0.27,-1.11l-2.52,-2.68l-1.03,0.05l-1.18,1.1l-1.83,0.63l-0.3,0.75l-0.91,0.4l-1.79,0.03l-1.41,-0.68l0.36,-3.59l-0.75,-1.1l-0.65,-2.31l-0.92,-1.03l-0.2,-3.47l0.42,-0.63l1.49,0.91l2.06,-0.4l1.35,-0.99l0.42,-1.19l-0.17,-0.49l-0.87,-0.58l-3.69,-0.2l-2.05,-1.99l0.61,-0.64l1.89,0.55l1.15,-0.22l3.77,-3.23l1.72,-0.16l1.38,-0.98l2.78,-5.33l0.07,-0.76l-1.19,-1.96l-0.93,-0.37l-0.9,0.29ZM342.94,345.9l-0.07,-0.47l0.06,-0.58l0.99,-1.54l-0.98,2.59Z\", \"name\": \"Madhya Pradesh\"}, \"IN-OR\": {\"path\": \"M408.6,584.62l0.87,0.38l0.7,-0.57l0.17,-1.23l0.78,-1.54l0.14,-2.48l0.72,-1.11l0.53,-2.11l-0.29,-1.58l0.84,-1.84l0.76,0.02l2.17,-0.82l1.07,-1.24l1.83,-0.69l1.82,-2.82l4.8,-4.17l-0.13,-1.22l-1.17,-0.95l0.98,-0.36l1.48,-1.56l2.18,-0.42l1.07,-1.66l0.73,0.55l0.81,-0.24l0.83,-3.98l0.54,-0.67l1.08,-0.58l0.29,-0.71l-0.1,-2.84l-0.74,-1.34l-0.25,-1.24l-0.98,-0.82l0.26,-1.36l-0.7,-1.85l0.8,-2.84l-0.22,-0.61l-0.86,-0.66l0.89,-0.73l0.05,-0.95l-0.72,-0.89l-1.26,-0.42l-0.99,-1.74l-1.27,-0.51l0.35,-3.73l-0.41,-1.94l0.27,-2.32l-0.75,-0.79l-1.7,-0.38l-0.94,-1.68l-2.97,-1.76l-0.47,-0.78l0.14,-0.74l1.38,-2.44l0.97,-0.56l1.15,-1.25l1.66,1.78l0.44,1.11l1.07,-0.03l0.97,-1.34l1.85,1.55l0.52,0.87l1.61,0.18l2.16,4.28l0.64,0.59l0.76,-0.22l1.26,-1.7l3.32,0.37l1.51,0.69l1.33,0.07l-0.14,2.05l0.48,0.54l0.74,-0.1l3.64,-2.46l0.2,-0.83l-0.84,-1.09l0.5,-2.36l-0.44,-1.37l-1.49,-0.16l-1.2,0.53l-1.26,-1.05l-2.25,-0.06l-2.22,-1.3l0.69,-3.13l-0.27,-3.86l-0.48,-1.12l0.27,-3.95l-0.1,-0.42l-0.55,-0.27l-0.35,0.21l-0.3,-1.32l-0.82,-0.26l-0.35,-0.87l0.85,-4.04l-0.72,-2.56l-0.04,-3.65l0.23,-0.22l0.93,0.25l0.06,0.91l0.5,0.38l1.85,-0.78l1.59,-2.19l1.54,-1.08l2.51,-4.8l0.2,-1.41l2.78,-0.21l1.21,0.48l1.08,-0.43l4.28,-0.65l3.13,1.97l2.46,-0.12l1.12,-0.71l0.83,-1.15l0.91,-2.52l0.94,-1.38l-0.0,-1.07l0.48,-0.85l2.25,0.71l0.98,-0.23l0.33,-0.74l-0.12,-1.25l-1.59,-1.85l-0.16,-1.47l0.71,-2.42l3.3,-5.53l0.24,-1.66l1.26,0.23l0.4,-1.1l0.9,-0.08l0.47,-0.83l0.2,-2.45l-1.77,-1.6l0.22,-1.51l1.57,-1.15l-0.05,-0.68l-0.65,-1.0l2.18,-3.06l2.99,-1.33l3.65,-3.0l2.69,-0.52l0.96,-0.56l1.06,-1.28l0.29,-0.96l-0.2,-1.52l-0.66,-1.22l2.36,1.1l2.44,3.59l1.03,0.81l1.71,0.29l2.63,1.1l3.55,-0.27l2.45,-1.4l0.45,-1.5l6.57,-0.18l2.05,-0.74l3.38,0.91l1.21,-0.78l1.34,-0.23l2.05,-1.36l0.86,2.95l0.13,1.93l-0.32,1.19l-1.6,2.32l-1.72,3.41l0.2,0.71l0.42,0.13l1.79,-0.54l1.28,0.22l4.01,2.74l3.34,-3.21l2.5,-1.08l0.99,-0.02l3.14,1.77l3.92,1.01l2.38,-0.82l1.13,-0.8l-0.69,1.35l0.07,1.78l0.31,0.54l1.81,0.87l1.44,-0.37l1.24,-0.87l1.91,-2.83l0.46,-2.86l-0.71,-2.31l0.76,-1.24l0.11,-1.23l-0.34,-2.49l-1.3,-1.91l-0.08,-0.67l1.7,-0.51l0.76,-0.96l0.5,-0.16l1.56,1.77l5.7,2.91l2.44,2.6l1.27,0.35l2.8,-0.49l5.68,3.71l0.66,0.99l1.88,0.67l2.06,1.47l1.92,0.22l2.3,1.14l0.67,0.67l0.2,0.8l-0.24,2.33l1.32,1.8l1.16,0.01l1.78,-2.16l0.87,0.07l1.39,0.85l0.72,2.92l0.74,1.0l5.27,1.5l0.12,2.57l1.25,2.13l-3.71,1.5l-4.33,0.33l-2.84,1.48l-1.58,1.12l-4.5,4.76l-1.65,2.44l-0.94,2.78l0.21,2.98l3.72,8.83l-0.15,0.33l-2.19,0.13l-0.26,0.6l0.52,0.68l0.66,0.26l2.2,0.07l0.33,0.76l-0.94,-0.18l-0.86,0.63l0.29,0.63l1.57,0.73l-2.3,1.0l-5.38,4.36l-0.87,1.94l-0.14,2.13l0.59,0.38l1.32,-0.93l0.32,0.19l-0.66,0.93l-2.07,1.29l-0.17,0.9l-1.96,1.18l-3.56,1.2l-0.62,0.5l-0.99,3.01l-2.18,2.22l0.07,0.88l-3.15,-2.37l-2.09,-0.05l-0.98,-0.98l-0.43,-1.27l-0.55,-0.22l-0.38,0.27l-0.24,0.91l0.53,1.5l1.8,1.31l2.24,0.53l0.58,1.03l1.33,0.59l-2.46,1.35l-5.48,2.09l-1.05,-0.38l-0.74,0.47l-5.64,1.45l-1.8,0.97l-1.66,0.07l-2.84,1.15l-0.84,-0.01l-2.11,1.23l-2.56,0.82l-0.12,-0.91l1.47,-0.48l0.08,0.59l0.46,0.02l1.85,-1.08l0.04,-4.51l-0.63,-0.57l-2.59,-0.65l-1.42,0.22l-3.64,3.22l-1.69,0.52l-2.08,2.43l0.02,0.78l-1.97,2.76l0.13,1.11l-0.98,0.61l-0.34,0.66l0.22,0.87l0.6,0.2l-0.13,0.36l0.47,0.55l0.96,-0.7l0.74,-0.13l-3.75,3.53l-6.09,4.87l-2.33,2.95l-0.87,-1.1l-2.14,-0.04l-0.56,0.34l0.14,1.16l-0.34,0.71l-0.9,-0.27l-2.35,1.12l-1.26,1.04l-1.69,0.08l-0.26,0.34l0.17,0.89l-0.33,0.72l0.05,0.87l-1.0,1.23l-1.18,0.2l-0.74,1.7l-1.32,1.09l-4.68,0.75l-2.81,-1.03l-5.13,0.38l-1.2,-1.49l-1.61,-4.45l-1.01,-0.54l-1.01,0.18l-0.5,0.86l0.2,1.32l-0.8,-2.26l-2.99,-3.94l-0.88,0.3l-0.51,1.45l-1.24,0.87l-0.57,1.24l-0.56,-1.57l-1.12,-0.44l-0.41,0.64l0.3,1.21l-0.52,0.7l0.12,0.82l-3.07,-1.25l-1.04,0.21l-0.61,0.54l-0.01,0.6l0.92,1.68l0.72,0.88l0.72,0.22l0.53,0.86l-1.83,0.9l-2.19,1.79l-1.56,0.69l-1.43,-0.77l-1.03,0.31l-3.19,3.91l-0.17,2.09l0.81,1.42l1.02,0.22l-1.53,2.04l0.32,1.52l-0.23,0.78l-0.89,0.07l-1.43,0.66l-1.31,0.07l-0.23,-0.16l0.01,-1.09l-0.37,-0.38l-2.06,-0.8l-0.93,0.12l-0.62,0.52l0.12,1.64l-0.33,0.6l-3.15,1.78l-0.71,1.76l-1.31,-0.43l0.47,-2.32l-0.48,-0.89l-2.17,-2.19l-0.29,-2.87l-2.46,-0.5l-2.38,3.46l-0.09,1.68l-0.5,1.42l0.29,1.04l-1.51,2.72l0.14,0.92l1.34,1.18l-0.86,0.75l0.1,2.0l-1.65,0.16l-0.93,1.4l-1.59,-0.19l-1.48,-1.2l-1.32,-0.39l-1.7,0.2l-1.56,1.08l-2.27,0.35l-3.0,1.96l-2.65,1.29l-1.11,1.17l-1.46,0.31l-2.23,1.63l-1.94,-0.89l-0.68,0.23l-0.52,1.0l-2.17,-0.55l0.13,-1.87ZM525.81,532.38l-0.05,-0.65l0.8,-0.25l0.04,-0.71l-0.49,-0.28l1.13,-1.12l-0.4,-0.64l0.3,-0.48l1.49,0.43l1.55,-1.12l1.08,-0.07l0.05,0.45l-1.37,1.35l-0.86,-0.66l-0.66,0.66l-0.63,0.11l0.75,1.39l-2.7,1.6Z\", \"name\": \"Orissa\"}, \"IN-TN\": {\"path\": \"M249.84,785.28l-0.33,-0.95l0.1,-1.86l1.6,0.49l1.48,-0.2l1.11,-1.27l1.32,-0.6l0.3,-1.05l1.07,-0.88l1.68,0.16l0.34,0.48l0.05,1.28l0.84,0.64l5.71,-0.26l2.06,0.51l0.81,-0.69l0.4,-2.03l2.08,-2.99l2.57,-0.44l2.02,1.94l0.79,0.31l0.61,-0.27l0.51,-1.19l2.74,-0.17l1.14,-0.44l2.26,1.02l2.41,-0.26l1.0,-0.81l1.68,-3.48l0.65,-0.34l3.83,-0.43l1.03,-0.61l3.07,-4.27l0.07,-0.85l-1.01,-1.75l-1.33,-0.89l-1.06,-0.22l-5.49,-0.07l-0.44,-1.25l2.84,-2.25l1.44,-2.2l0.47,-2.63l-0.45,-0.65l-0.84,0.03l0.12,-0.69l-0.38,-1.02l1.14,-3.22l2.33,-0.11l2.46,-1.36l-0.16,-1.26l1.0,-1.73l0.33,-1.31l1.11,-0.38l1.66,-0.0l1.7,1.66l1.0,0.45l0.79,-0.3l0.66,-1.11l0.44,0.08l2.35,1.72l2.91,0.96l1.35,1.89l2.47,1.79l2.53,0.3l0.89,-0.42l1.33,-1.4l0.29,-1.48l0.98,0.03l1.45,-1.18l1.06,-2.6l1.03,-4.37l0.4,-0.53l1.29,-0.38l0.6,-0.96l3.87,-0.67l0.65,1.17l0.79,0.15l0.91,-0.67l0.3,-1.05l0.55,-0.02l0.97,0.23l0.51,0.92l2.1,0.65l2.72,-0.3l0.76,-0.54l2.09,-2.71l1.31,0.59l0.57,-0.08l2.15,-2.17l1.18,-0.62l0.42,-0.71l-0.07,-0.91l0.47,-1.75l0.53,-0.28l1.75,0.15l1.06,1.37l0.63,0.35l2.87,-0.38l0.18,1.3l1.04,0.76l2.31,-0.02l0.42,-0.96l-1.05,-0.98l-0.01,-0.36l1.61,0.07l4.38,-2.25l0.44,-0.72l0.05,-1.3l2.65,-1.83l-0.01,-0.75l-0.67,-0.64l1.64,0.69l-0.38,1.1l0.47,0.56l3.19,0.35l1.48,-0.39l1.4,1.36l0.73,-0.21l0.37,2.77l-0.32,2.03l-0.47,0.24l-0.18,1.0l0.58,0.53l-0.78,1.59l0.16,1.33l-0.83,1.23l-1.04,9.49l-2.92,8.93l-1.83,3.47l-1.09,0.85l-1.06,1.81l-2.53,1.85l0.16,0.59l0.84,0.04l-3.55,5.53l-0.05,1.49l-0.3,0.47l-1.72,1.18l-0.44,-0.37l0.52,-1.02l-0.5,-0.57l-1.34,0.11l-1.1,-0.87l-0.45,0.2l-0.56,0.93l0.7,1.08l0.11,0.84l0.4,0.31l-0.32,1.19l0.17,0.58l1.13,0.75l2.01,0.21l-0.67,1.5l-1.05,6.13l1.05,4.71l0.4,0.35l0.61,-0.29l0.1,0.95l-2.0,0.22l-2.44,2.58l0.36,0.58l0.4,-0.05l2.7,-2.02l1.33,0.48l0.06,2.28l0.62,3.2l-0.18,5.1l-0.92,-0.09l-0.81,0.43l-1.49,-0.42l-0.49,0.56l0.19,0.5l-0.54,-0.02l-0.42,0.61l0.15,1.36l1.28,0.83l1.44,0.41l0.03,0.97l1.52,1.03l0.49,13.03l-0.26,2.66l-1.42,0.34l-0.31,-0.79l-0.71,-0.39l-3.95,-0.65l-0.57,0.16l-0.15,-0.37l-0.92,-0.24l-1.62,0.14l-0.37,0.6l-1.79,0.33l-2.01,-0.48l-3.57,2.3l-0.57,0.81l-0.07,0.98l-0.83,0.53l-0.21,0.7l0.26,2.63l0.76,1.39l-2.05,1.82l-1.8,2.46l-1.51,2.81l-1.66,1.67l-1.79,2.49l-0.15,0.98l-1.21,1.73l-0.77,3.4l0.09,0.95l0.61,1.22l3.32,3.21l1.25,0.55l2.2,0.29l-1.72,0.32l-1.86,-0.59l-2.21,-0.03l-1.0,0.68l-2.02,0.14l-2.57,0.91l-1.52,0.99l-1.66,0.14l-1.25,1.21l-5.65,0.86l-2.39,1.3l-4.3,3.53l-1.8,2.81l-0.65,3.87l0.32,0.48l-1.12,2.25l-0.31,0.0l-0.34,0.62l0.79,1.81l-0.42,3.13l-1.41,1.59l-0.66,2.01l-1.71,0.61l-5.96,3.6l-1.22,1.49l-5.3,1.31l-1.05,0.76l-0.09,0.97l-1.21,0.15l-1.8,-0.34l-4.2,-1.29l-0.71,-0.71l-1.86,-0.93l-2.94,-2.68l1.1,-0.45l0.27,-1.46l1.29,-1.9l-0.16,-1.64l1.05,-0.34l1.18,-1.84l-0.4,-1.16l-2.42,-2.44l-0.23,-1.72l1.65,-2.45l0.62,-2.26l-0.4,-0.73l-1.24,-0.88l-1.07,-2.96l1.19,-0.85l0.75,-1.07l2.53,-7.34l0.84,-1.38l0.92,-2.56l1.1,-1.19l-0.19,-1.38l-1.73,-2.54l-1.26,-0.19l-1.8,0.71l-1.71,-0.93l1.56,-5.5l-0.33,-2.9l1.03,-2.56l-1.11,-3.46l1.54,-3.34l0.06,-1.34l-0.72,-0.72l-0.37,-1.59l-0.96,-1.63l-0.72,-0.66l-1.08,0.13l-2.94,1.32l-3.15,2.41l-1.14,-0.38l-2.36,-2.12l-0.06,-1.8l-0.9,-1.93l0.55,-3.53l-0.17,-2.56l1.09,-0.6l0.57,-0.74l0.43,-3.33l-0.23,-0.65l-0.94,-0.6l-0.87,-1.77l-3.86,-1.64l-0.66,-0.88l-0.13,-0.87l0.37,-1.13l1.9,0.19l0.65,-0.91l-0.74,-0.92l-0.83,-2.15l-0.87,-0.98l0.45,-1.93l-0.71,-0.36l-1.63,0.94l-2.99,0.25l-1.41,-0.46l-1.27,0.3l0.6,-1.1l2.2,-1.72l0.28,-0.77l-0.18,-0.49l-0.71,-0.39l-1.01,-1.28l-1.19,-0.47l-1.21,-0.95l-4.71,-1.32l-0.24,-0.32ZM341.41,854.52l0.89,-0.01l1.99,-1.02l0.32,0.12l-0.32,0.93l0.54,1.1l-1.22,-0.66l-2.2,-0.45ZM352.97,822.23l0.25,0.38l-0.78,-0.16l0.52,-0.21ZM353.99,822.77l0.71,0.09l0.49,0.17l-1.19,-0.25Z\", \"name\": \"Tamil Nadu\"}, \"IN-AN\": {\"path\": \"M786.03,923.93l0.01,-2.47l0.71,-1.66l1.1,-0.13l0.59,-0.57l1.24,-0.26l1.04,-0.8l0.96,0.7l0.57,1.41l0.32,2.29l1.27,2.41l0.03,1.46l-1.11,2.56l-0.1,1.29l0.41,0.66l-1.31,0.13l-0.67,1.5l0.01,-1.41l-0.81,-0.89l0.05,-0.68l-0.44,-0.46l-0.29,-1.55l-0.7,-0.41l-0.89,-2.01l-1.06,-0.91l-0.92,-0.2ZM785.02,916.8l-0.54,-1.41l0.47,-1.37l1.32,-0.39l0.58,-0.69l0.93,0.88l-0.04,0.59l-2.72,2.39ZM782.63,894.17l0.29,0.95l-0.0,0.53l-1.15,-1.01l0.86,-0.47ZM780.5,891.72l-0.4,-0.52l-0.31,-1.96l1.06,-1.6l0.69,-0.13l0.06,0.48l-0.79,1.64l0.65,1.74l-0.29,-0.16l-0.66,0.5ZM781.79,892.53l-0.6,0.48l-0.41,0.67l-0.01,-0.52l1.02,-0.63ZM777.4,894.02l0.09,1.05l1.22,0.8l0.7,1.14l-0.03,0.45l-0.93,-0.4l-1.7,0.32l-0.12,-1.23l-1.17,-0.29l0.37,-1.49l1.57,-0.36ZM770.19,887.29l-1.18,-0.38l-0.98,-1.26l-0.11,-1.42l0.4,-0.73l0.16,2.27l0.42,0.72l1.29,0.81ZM768.4,766.2l-0.53,-0.93l0.37,-1.58l0.2,0.17l-0.27,1.01l0.23,1.33ZM751.49,774.12l0.88,-1.81l1.07,1.76l0.79,-0.06l0.11,-0.27l0.28,-2.36l-0.24,-1.3l0.63,-1.54l-0.05,-3.07l0.91,-2.0l0.45,0.12l0.42,-0.38l-0.13,0.98l0.73,0.48l1.83,-0.55l0.47,-0.81l-0.31,-1.49l-0.55,-0.41l0.77,-0.26l0.05,-0.92l-0.62,-0.6l-1.27,-0.21l-0.37,-1.1l0.12,-7.3l0.85,-1.29l0.61,-0.06l0.41,-0.65l-0.14,-0.45l-0.94,-0.64l-0.3,-3.47l0.61,-0.75l0.78,-0.04l0.52,-0.68l0.41,-1.58l0.01,-1.58l0.64,-1.33l-0.17,-0.58l-0.62,-0.37l0.62,-2.2l0.77,-1.37l-0.52,-0.97l0.18,-1.42l0.66,-0.54l-0.55,-3.24l1.34,-1.74l0.16,-1.78l1.42,-1.61l0.17,-1.04l1.5,0.01l0.36,-0.57l0.61,-0.13l0.39,0.69l-0.32,1.01l0.14,3.07l0.36,0.22l-0.97,1.23l-0.37,0.19l-0.32,-0.4l-0.65,-0.09l-0.59,0.8l0.51,1.08l1.25,0.22l1.33,1.3l-0.64,1.07l-0.13,2.9l-0.46,2.09l-0.32,0.53l-0.73,-0.2l-0.43,0.42l0.01,-1.38l-0.39,-0.32l-1.19,0.78l-0.29,1.52l0.64,1.07l-0.98,-0.16l-0.37,0.28l-0.91,2.21l0.36,0.65l0.53,0.22l0.74,-0.35l1.04,1.19l0.14,1.72l-0.24,0.98l0.95,1.63l-0.54,2.9l0.5,1.29l0.04,2.05l-1.01,1.21l0.24,0.65l-0.74,0.57l-0.86,-0.65l-0.46,0.06l-0.03,0.59l-1.15,-0.04l-0.43,0.4l0.65,1.8l1.06,0.71l0.12,0.47l-0.83,0.84l0.68,1.2l-0.59,0.69l0.3,1.14l-1.88,2.04l0.04,0.7l-0.77,0.79l-1.34,0.41l-0.13,0.54l0.54,0.76l-1.11,1.91l-0.1,3.33l0.4,0.4l0.63,-0.35l0.24,-1.5l0.24,-0.04l0.31,0.28l0.02,1.58l-1.11,4.78l-1.06,0.35l-1.07,1.13l-0.28,0.88l0.14,1.02l1.12,0.1l0.35,-0.4l0.06,-0.84l0.63,-0.36l0.09,-0.39l0.16,1.37l-0.54,0.66l-0.51,2.56l-1.5,-1.08l-0.07,-0.68l-0.92,-0.79l-0.1,-0.4l0.72,-0.38l0.02,-0.66l-0.9,-0.46l-0.4,-1.88l-0.33,-0.31l-0.95,-0.05l0.1,-3.11l-1.16,-0.79ZM766.4,766.0l0.11,0.62l0.39,0.73l-0.4,-0.42l-0.1,-0.93ZM766.14,717.57l0.26,-0.08l0.11,0.23l-0.14,-0.04l-0.24,-0.1ZM764.5,769.92l0.71,-0.98l0.67,-0.02l1.15,3.22l-0.42,-0.93l-2.11,-1.29ZM758.46,855.43l1.65,1.52l-0.05,1.49l-0.73,0.79l-1.73,-0.53l-0.46,-1.12l-0.04,-0.78l0.91,-0.49l0.44,-0.89ZM756.86,735.74l-0.0,-0.0l0.0,0.0l-0.0,0.0ZM756.0,743.21l0.29,-3.46l0.53,-0.59l0.3,0.45l-0.2,2.01l-0.92,1.58ZM754.65,789.3l-1.08,-0.41l0.1,-0.42l0.79,-0.21l0.37,-0.63l-0.25,-1.63l0.26,-0.56l1.0,1.26l-0.55,1.24l0.54,0.89l-1.17,0.46ZM746.83,808.06l1.1,-0.64l0.47,-1.64l1.46,-0.96l1.09,-0.24l0.89,1.13l0.95,5.03l-1.65,1.72l-0.03,1.18l0.75,0.47l-1.33,1.68l-0.74,-0.18l-1.27,-0.94l-0.69,-0.03l-0.86,0.53l0.62,-0.89l0.47,-1.76l-0.28,-0.78l-0.88,-0.81l-0.09,-2.85ZM751.89,783.09l0.03,-0.27l0.15,0.08l-0.18,0.2ZM742.26,782.71l0.82,0.26l-0.03,0.97l-0.62,-0.14l-0.17,-1.09Z\", \"name\": \"Andaman and Nicobar\"}, \"IN-AP\": {\"path\": \"M264.69,675.87l0.59,-0.76l0.07,-1.39l0.36,-0.6l2.8,1.59l2.62,0.61l1.43,-0.37l0.97,0.82l0.73,-0.01l1.54,-1.37l1.31,-2.8l0.15,-1.56l-0.84,-4.18l-0.77,-0.9l-1.69,-0.61l-0.35,-2.03l-1.24,-2.4l0.68,0.17l0.39,-0.54l-0.25,-3.31l0.26,-0.71l0.58,-0.39l1.35,0.21l0.43,-0.69l-1.06,-2.44l-0.71,-0.66l0.22,-3.36l1.07,-1.31l2.59,-1.37l1.85,-0.28l2.42,0.6l4.32,0.13l1.56,-1.78l-0.11,-5.3l0.29,-2.68l1.74,-1.65l0.23,-0.94l-0.19,-0.53l-0.65,-0.77l-1.33,-0.57l-3.05,-0.09l-2.95,-0.77l-0.81,-0.99l3.28,-2.1l0.59,-1.33l1.2,-0.69l0.63,-1.85l-0.17,-0.57l-0.53,-0.26l0.62,-0.61l0.01,-0.5l-1.05,-1.21l0.15,-1.25l0.6,-1.07l0.04,-4.5l0.99,-2.39l-1.06,-2.3l-0.29,-1.52l-1.7,-0.89l0.14,-1.28l3.71,-4.76l0.84,-1.7l1.36,-0.46l0.8,-1.28l1.71,-0.45l1.19,-2.36l-0.1,-0.48l-0.75,-0.34l-2.14,0.93l-0.19,-0.69l-0.45,-0.3l-2.59,0.04l-2.16,-1.31l1.48,-2.39l1.78,-0.93l0.36,-0.49l-0.05,-1.04l-0.88,-1.04l0.17,-0.39l3.37,-2.8l0.33,-0.72l-0.5,-2.65l-1.6,-2.0l1.29,-0.9l-0.29,-2.04l-0.67,-1.77l0.45,-1.86l-0.92,-0.71l0.14,-0.69l-0.41,-0.76l-1.22,-0.85l1.13,-1.1l0.45,-2.51l1.0,-1.27l2.52,-0.58l0.7,-0.58l0.49,-1.38l0.0,-1.97l0.53,-0.34l1.61,-0.16l1.72,-3.28l2.15,-0.78l0.23,-0.36l-0.34,-1.09l-1.84,-1.47l-0.22,-1.32l-0.91,-0.24l-0.46,-1.07l-0.79,-0.01l-0.36,-1.59l2.55,-2.32l-0.08,-1.17l0.67,-2.12l1.1,-1.47l-0.09,-0.62l-0.52,-0.3l1.17,-0.67l1.93,0.21l0.99,1.37l0.94,0.51l3.82,0.06l0.7,-0.84l-0.2,-2.94l1.1,-2.01l0.66,-0.49l1.6,-0.35l0.53,-0.52l0.29,-3.48l0.9,-2.06l1.51,-1.08l0.48,-1.2l-0.25,-0.8l-1.04,-0.7l-1.01,-2.43l-0.11,-1.01l1.12,0.56l0.9,1.36l2.14,0.86l1.88,-0.79l1.03,0.35l1.4,-0.06l2.99,1.32l2.05,-0.07l1.73,1.25l1.07,2.89l1.36,0.62l0.25,0.68l1.79,1.04l1.99,-0.29l0.95,-1.2l1.14,-0.51l2.17,-0.33l0.97,0.36l0.92,1.25l3.18,0.53l1.67,1.34l4.21,0.15l0.63,0.59l0.8,0.23l0.8,-0.43l0.38,-1.24l0.6,-0.33l2.94,-1.04l1.61,0.26l2.07,2.63l1.96,0.76l0.99,1.71l-0.24,3.47l-0.86,1.68l0.37,2.75l-1.36,0.99l-1.06,2.07l0.34,1.38l2.14,0.09l0.69,3.21l-0.02,1.49l-0.09,0.45l-1.23,1.17l-0.02,0.58l2.7,1.38l1.76,1.5l0.97,1.3l2.69,0.3l2.3,-0.25l1.3,-0.53l0.65,2.12l1.01,1.62l0.57,0.07l0.54,-0.54l0.85,0.72l2.42,-0.54l2.78,1.95l3.43,4.07l2.24,4.82l0.1,0.39l-1.3,0.98l0.21,1.46l0.85,0.41l1.52,-0.16l0.8,-1.46l0.32,0.3l0.19,1.39l0.64,0.71l2.5,-0.43l-0.56,1.11l-0.13,1.27l1.26,3.31l0.2,3.88l0.99,1.96l0.73,0.43l0.68,-0.01l3.28,-1.92l2.72,1.08l4.53,-0.1l2.71,0.61l0.54,-0.36l0.41,-0.86l2.25,0.87l2.32,-1.68l1.53,-0.34l1.16,-1.21l2.62,-1.27l2.95,-1.92l2.16,-0.31l1.52,-1.07l1.35,-0.19l1.09,0.31l1.49,1.22l2.48,0.09l0.83,-1.36l1.55,-0.1l0.49,-0.61l-0.17,-1.85l0.74,-0.51l0.17,-0.52l-1.52,-1.91l1.52,-2.75l-0.28,-1.1l0.48,-1.33l0.06,-1.57l1.95,-3.0l1.51,0.29l0.18,2.62l2.61,2.97l-0.52,1.6l0.12,0.91l0.46,0.47l1.33,0.37l0.44,0.03l0.56,-0.48l0.51,-1.52l3.2,-1.82l0.51,-1.01l0.02,-1.54l0.74,0.0l1.56,0.66l0.07,1.24l0.76,0.46l1.63,-0.08l1.47,-0.67l0.98,-0.1l0.56,-0.58l0.14,-0.85l-0.35,-1.36l1.58,-2.2l-0.21,-0.73l-1.06,-0.17l-0.66,-1.2l0.16,-1.29l2.94,-3.66l0.7,-0.12l0.81,0.62l0.73,0.08l1.77,-0.8l2.21,-1.8l1.98,-1.03l0.06,-1.12l-0.63,-0.87l-0.79,-0.25l-1.37,-2.23l0.86,-0.26l3.12,1.32l0.82,-0.81l-0.07,-0.7l0.43,-0.9l-0.25,-0.94l0.63,1.68l0.95,0.15l0.99,-1.63l1.13,-0.74l0.49,-1.38l2.55,3.51l0.75,2.17l0.48,0.59l0.48,0.05l0.47,-0.47l-0.04,-1.94l0.98,0.08l1.57,4.35l1.49,1.81l3.28,0.09l2.2,-0.35l2.93,1.04l5.54,-1.07l1.09,-1.13l0.62,-1.56l0.98,-0.06l1.31,-1.51l0.42,-1.9l-0.15,-0.67l1.43,-0.02l1.38,-1.1l2.15,-1.02l0.56,0.31l0.53,-0.11l0.65,-0.92l-0.09,-1.22l0.85,-0.03l-0.54,1.48l0.68,1.11l0.49,0.03l-0.47,1.04l-2.23,3.0l-1.15,0.57l-2.77,4.48l-2.82,2.96l-0.73,1.38l-1.6,1.1l-1.15,1.5l-1.5,0.86l-1.27,0.17l-0.2,0.99l0.68,0.39l-3.6,3.35l-1.01,2.48l-0.96,0.74l-9.31,4.2l-5.02,3.04l-1.05,0.92l-0.79,1.44l-2.3,1.96l-0.27,-0.36l-0.72,0.17l0.02,1.59l-0.64,0.52l-0.41,1.5l-2.25,2.68l-1.09,0.75l-0.71,-0.8l-1.21,0.21l0.09,1.05l1.36,0.64l-1.18,0.69l-0.95,-0.02l-0.33,0.64l0.63,0.87l-4.38,1.88l-5.68,3.7l-0.6,-0.27l-1.36,0.9l-3.72,1.43l-7.5,4.53l-1.63,2.1l-1.66,1.0l-2.23,2.57l-1.51,3.41l0.08,1.5l0.46,0.72l1.58,0.79l1.39,-0.02l-0.85,4.85l-0.72,1.56l-0.34,-0.21l-0.64,0.36l0.4,1.35l-1.04,0.36l-1.68,1.64l-3.44,1.81l-1.69,0.26l-1.26,1.15l-1.04,0.04l-0.51,0.6l-2.47,0.43l-3.09,1.68l-1.37,0.3l-1.56,-0.75l-2.35,-0.2l-0.15,-0.58l-0.72,-0.39l-0.52,-0.02l-0.33,0.68l-1.09,-0.27l-1.67,0.39l-0.14,-0.58l-0.74,-0.5l-1.17,0.41l-1.79,0.07l-1.92,1.15l-0.53,0.79l0.21,1.29l-0.76,0.97l-2.28,6.46l-0.11,1.95l-3.74,2.84l-0.92,1.13l-0.06,0.8l0.57,1.13l-2.57,-2.06l0.0,-4.01l-0.39,-1.55l-0.36,-0.29l-0.5,0.52l-0.41,-0.01l-0.14,0.47l0.47,1.18l-0.03,2.41l-1.75,4.39l-0.16,-2.66l-0.88,-1.48l-0.76,-0.46l-2.81,-0.47l-0.67,0.59l-1.07,0.05l-1.2,0.52l-0.67,-0.32l-3.79,2.32l-1.37,0.39l-3.56,3.09l-2.52,5.95l0.09,0.92l-2.32,3.04l-1.15,2.69l-0.28,3.27l-0.91,3.59l0.05,2.53l1.66,9.47l0.36,0.68l1.24,1.01l0.53,1.67l-0.88,0.68l-0.09,0.67l0.52,0.29l0.92,-0.16l-0.53,2.8l-0.02,3.74l-1.28,2.53l-1.34,0.32l-1.03,0.97l-0.28,0.8l0.6,0.58l0.7,-0.18l1.35,-1.13l-0.31,1.02l0.08,1.41l0.74,3.85l3.06,7.11l-0.1,1.25l-0.75,1.85l0.88,2.52l-2.65,-3.71l-0.68,0.29l-0.0,1.53l-1.2,-0.83l-0.32,1.26l-1.21,1.55l0.16,0.9l1.44,1.97l-1.28,-0.67l-0.81,0.14l-0.23,0.82l0.76,0.9l-1.54,0.67l-0.98,0.96l-0.37,0.8l-0.0,1.1l-4.14,2.13l-1.51,-0.11l-0.43,0.24l-0.2,1.13l0.99,1.03l-1.6,-0.04l-0.56,-0.31l-0.13,-1.26l-0.58,-0.5l-2.98,0.35l-1.45,-1.63l-2.26,-0.23l-1.14,0.77l-0.55,3.0l-1.21,0.66l-1.92,2.04l-0.89,-0.53l-1.16,0.1l-2.64,3.15l-2.32,0.28l-1.86,-0.57l-0.43,-0.86l-1.41,-0.39l-1.2,0.29l-0.34,1.11l-0.43,0.35l-0.49,-0.96l-0.74,-0.38l-4.19,0.72l-0.84,1.11l-1.18,0.3l-0.67,0.81l-1.1,4.55l-0.94,2.36l-1.21,0.96l-0.58,-0.31l-0.63,0.22l-0.3,1.75l-1.22,1.28l-1.26,0.29l-1.25,-0.27l-2.28,-1.65l-1.18,-1.67l0.49,-1.04l-0.22,-1.64l1.12,0.41l1.29,-0.57l0.58,-0.55l0.25,-1.16l2.34,1.53l1.22,-0.06l0.18,-0.61l-0.23,-0.64l-0.55,-0.73l-0.93,-0.53l1.23,-1.78l0.45,-1.4l1.33,-1.04l0.36,-1.9l1.04,-1.54l0.39,-2.6l-0.23,-1.04l-0.44,-0.45l-1.33,0.66l-1.64,-1.13l-1.52,-0.39l-0.68,0.28l-0.85,-1.4l0.29,-1.11l0.25,-5.76l-2.41,-0.54l-1.07,0.43l-1.06,-0.1l-1.4,-0.36l-1.79,-1.79l-1.64,0.09l-0.25,-0.55l1.04,0.02l0.45,-0.71l-0.69,-1.44l0.46,-1.37l-0.59,-2.04l-2.02,-1.06l-0.89,0.52l-1.23,-0.07l-0.99,0.93l-0.07,-0.92l0.96,-1.22l-0.02,-1.23l-0.48,-0.53l-1.02,0.4l-0.82,1.05l-0.97,-0.53l-1.68,-0.25l-0.5,0.21l-0.53,0.99l0.57,1.25l-1.57,1.32l-1.31,0.57l-0.59,1.23l-0.75,-0.55l-1.23,0.19l-0.52,0.4l-0.14,0.76l-1.03,0.09l-1.67,1.05l-1.15,0.02l-0.52,-2.73l-1.41,-1.75l-2.98,-0.12l-1.04,-0.57l-1.02,-0.01l-0.97,-0.78l-0.94,0.37l-0.52,-0.92l-0.7,0.21l-0.38,1.14l-0.84,0.61l0.15,0.54l0.66,0.48l0.16,1.57l-1.79,-0.15l-0.65,0.76l-1.27,-1.08l-0.39,0.07l-0.3,0.59l-0.17,-1.78l1.47,-2.02l0.17,-0.7l-2.33,-3.22l0.13,-1.79l-2.1,-2.47l1.13,-0.73l1.21,0.58l0.81,3.14l2.72,1.07l0.99,0.93l2.32,-0.02l1.96,-0.48l1.11,0.29l1.12,2.0l0.1,1.09l2.11,0.75l0.59,-0.3l0.14,-0.59l-0.49,-1.0l0.03,-1.08l-0.98,-0.86l-0.78,-1.6l0.98,-1.6l-0.1,-0.47l-0.56,-0.36l0.9,-0.86l2.24,-0.25l0.65,-0.42l0.16,-0.69l-0.4,-1.48l0.3,-1.18l-0.34,-0.55l-1.16,-0.23l-0.64,-0.92l-1.06,-0.27l-0.62,0.36l-0.25,0.64l0.8,2.01l-1.15,-1.29l-1.73,-0.59l-0.11,-0.7l-0.49,-0.42l-2.21,0.23l-1.61,-0.55l-0.95,0.55l-0.84,1.16l-0.27,1.81l-4.51,-0.75l0.44,-1.18l-1.73,-1.24l-0.23,-1.08l0.27,-0.48l1.22,-0.27l0.76,-1.39l-0.09,-0.76l-0.92,-0.84l-1.56,-0.07l-0.81,0.33l-1.0,-1.83l-1.09,-0.58l-0.47,-1.96l0.82,-2.71l-0.07,-1.53l0.79,-0.32l0.34,-0.53l0.68,-4.44l-0.77,-0.97l-2.24,-0.88ZM433.84,620.88l0.17,-0.38l-0.47,-0.55l-1.43,0.9l-0.23,0.47l0.64,0.66l2.25,0.65l0.99,-0.27l0.73,-1.0l-0.06,-0.69l-0.49,-0.46l-0.91,0.66l-1.19,0.01ZM368.9,723.15l3.01,0.37l0.36,0.27l-3.63,-0.13l0.26,-0.51ZM392.61,649.39l1.24,0.72l1.36,1.23l-0.92,0.46l-0.54,-0.32l-1.33,-1.56l0.2,-0.53Z\", \"name\": \"Andhra Pradesh\"}, \"IN-TR\": {\"path\": \"M717.67,412.64l-0.65,-0.93l-0.85,-0.54l-0.68,0.03l-0.65,0.63l-0.23,2.44l0.57,2.74l-0.06,0.54l-0.45,-0.12l-0.61,-0.81l-0.37,-1.24l-1.03,-5.9l0.59,-1.13l-0.93,-0.66l-0.88,-2.95l-1.06,-0.99l-1.73,-4.15l0.05,-0.4l0.82,-0.19l0.29,-0.86l-0.43,-0.72l-0.77,-0.33l-0.07,-0.39l0.16,-0.36l1.69,-0.62l0.97,-2.38l-0.28,-2.65l1.62,-2.42l1.36,0.06l0.65,-0.3l0.79,-3.37l4.46,0.5l2.13,-0.37l1.01,-1.0l0.52,-2.43l0.74,1.43l1.5,0.46l1.08,-0.84l-0.14,-2.07l1.8,0.37l0.24,1.14l1.12,1.01l0.62,0.15l0.7,-0.29l1.07,-3.6l-0.23,-2.31l1.73,0.78l0.54,-0.4l-0.61,-1.47l3.03,0.1l1.08,-0.51l0.67,-0.99l0.07,-3.38l0.92,-0.64l2.0,1.31l0.19,1.75l0.72,1.63l-0.16,1.4l-1.03,2.69l0.62,0.74l1.84,0.3l0.73,1.3l0.1,2.73l-0.33,2.19l0.42,1.35l-0.55,1.87l0.21,2.41l-0.73,0.03l-0.79,1.0l-0.32,1.9l0.2,1.67l-0.69,-0.15l-0.51,0.3l-0.6,1.69l-0.45,-1.43l-0.61,-0.91l-0.46,-0.16l-1.47,0.55l-1.5,1.91l-0.91,0.48l-2.28,-2.56l-1.1,0.12l-0.24,2.55l0.81,3.79l-0.04,1.12l-0.97,1.4l-2.69,1.48l-1.81,2.75l-0.6,1.79l1.57,5.86l-1.05,0.63l-0.6,1.26l-0.91,0.89l-1.59,0.51l-1.08,-0.01l-0.53,0.84l-0.37,-0.53l-1.18,-0.4l-0.36,-0.51l-0.1,-1.09l-0.43,-0.32l-1.19,-4.38l-0.54,-0.55l-0.07,-0.63l-0.43,-0.22Z\", \"name\": \"Tripura\"}, \"IN-AR\": {\"path\": \"M727.36,274.74l-0.62,-1.27l-2.25,-0.75l-1.77,-2.04l-0.63,-2.3l0.17,-1.09l1.38,-1.87l0.22,-1.28l3.95,-0.13l2.71,1.1l3.56,0.14l1.39,-0.61l1.72,-1.71l1.01,-0.5l3.83,-0.02l0.37,-0.53l-0.09,-1.07l1.06,2.04l0.62,0.37l0.5,-0.13l0.54,-0.87l0.59,0.49l0.55,-0.04l0.85,-1.64l0.39,0.72l0.65,0.34l3.1,-1.35l1.28,-1.18l1.97,-0.69l1.9,-1.8l0.51,-2.58l-0.5,-0.64l-1.47,-0.43l1.15,-1.82l2.62,-1.84l1.03,0.45l1.55,-0.52l1.69,-1.95l1.76,-0.71l1.24,-1.28l2.81,-1.91l1.46,-2.07l0.6,-2.32l1.84,-1.44l6.87,-4.3l3.12,-0.23l2.29,0.22l1.58,-0.99l0.71,0.3l0.81,-0.14l2.24,-1.87l3.52,-1.53l0.33,-1.17l1.78,-0.1l1.59,-0.97l3.25,-1.09l1.23,-1.08l2.5,-0.23l2.96,-3.02l0.01,-0.58l-2.19,-2.29l0.36,-1.16l1.48,-0.19l1.11,-1.53l0.6,-0.3l2.38,-0.12l1.39,-0.42l2.54,-3.14l0.72,-0.07l2.06,1.06l1.8,2.16l-0.17,1.17l0.66,0.67l2.54,-0.06l4.07,1.52l0.43,-0.15l-0.23,-0.8l1.58,0.39l2.15,1.1l2.51,0.45l0.72,1.13l1.93,0.3l0.45,-0.44l-0.2,-1.79l0.72,-0.57l1.81,-0.09l1.12,0.28l0.48,-0.28l0.36,-1.24l0.67,1.6l2.25,-0.39l0.22,-1.1l-0.31,-1.27l1.15,-0.39l0.21,-0.82l0.66,-0.09l1.65,0.69l2.17,0.34l0.42,-0.22l0.93,-1.86l-0.03,-2.09l1.15,-0.32l2.24,0.9l2.73,-1.16l5.47,-0.31l0.94,2.55l1.97,1.67l1.4,-0.02l2.08,-1.11l0.36,0.57l-1.13,2.01l-3.49,1.07l-0.63,0.41l-0.65,1.26l0.64,2.74l0.61,0.25l2.59,-1.66l1.71,-0.53l0.58,1.89l2.46,1.23l0.08,0.91l1.18,0.7l0.56,2.05l2.02,2.58l0.6,2.92l-2.74,2.04l-2.04,1.1l-0.15,0.56l0.83,1.34l-1.06,1.29l0.04,0.55l1.03,0.95l0.99,2.16l0.53,0.2l0.76,-0.58l0.45,-3.4l0.84,-1.52l1.46,-0.72l2.38,0.61l2.09,2.27l2.2,1.38l1.28,1.55l0.59,2.63l2.37,0.85l3.42,-1.46l0.92,0.23l2.0,1.66l0.8,0.21l0.66,1.15l2.77,1.85l0.1,0.6l-0.87,1.91l-0.18,1.48l0.49,0.95l1.42,1.47l0.17,0.72l-0.79,1.9l0.03,1.18l-0.7,0.34l-0.46,-0.84l-0.74,-0.19l-1.48,0.51l-2.77,2.73l-2.06,1.44l-0.27,0.83l-2.08,0.81l-1.02,1.26l-2.24,1.7l-0.77,1.39l-0.0,0.98l0.8,2.32l-0.35,1.45l0.18,0.76l6.72,8.57l0.2,1.05l0.81,0.73l-0.34,0.96l-1.06,-0.38l-1.09,0.3l-0.98,-0.87l-4.19,-1.87l-0.52,-0.42l0.5,-1.38l-0.22,-0.64l-1.04,-0.87l-1.45,-1.95l-2.32,-1.06l-1.15,0.12l-0.8,0.69l-2.05,-0.49l-1.22,1.56l-0.94,0.38l-3.16,-0.19l-8.17,1.35l-2.27,0.98l-1.97,1.39l-2.32,3.7l-1.42,1.63l-3.49,1.13l-2.36,3.2l-2.21,0.47l-1.16,1.96l-1.65,0.03l-1.5,0.46l-2.38,3.54l-4.38,1.68l-0.65,-2.41l0.28,-2.02l-1.15,-1.62l0.08,-0.57l0.86,-1.12l0.18,-1.79l-0.4,-1.17l-1.3,-0.89l0.03,-0.74l2.24,-0.17l3.03,-2.24l2.08,-0.89l1.32,-1.31l0.89,-2.35l1.07,-0.6l3.2,1.39l4.93,-1.84l2.11,-0.03l1.11,0.35l0.89,-1.03l1.04,-0.45l0.4,-0.9l1.19,-0.94l0.02,-1.73l-1.11,-1.43l-1.54,0.04l-1.04,1.08l-0.29,-1.15l0.49,-1.32l-0.31,-2.08l-0.56,-0.76l-2.03,-1.4l-0.74,-3.0l4.9,-6.49l1.13,-2.28l-0.47,-0.76l-7.92,0.07l-1.46,0.45l-3.93,2.51l-4.03,1.0l-1.16,-0.06l-2.12,-0.75l-1.82,1.0l-9.17,3.2l-4.61,2.27l-4.21,1.1l-4.11,2.12l-1.45,0.25l-0.95,-0.65l-2.82,0.73l-1.84,-0.68l-0.97,-1.0l-0.65,-0.12l-0.98,0.82l-0.31,0.87l1.19,1.68l-0.16,0.82l-7.98,6.54l-4.22,4.3l-0.72,1.32l0.11,2.07l-3.97,2.93l-1.86,0.72l-3.28,0.5l-1.4,0.62l-0.37,0.04l-1.8,-1.22l-0.99,-0.14l-10.87,1.18l-1.55,-0.38l-0.87,-1.17l-3.78,-1.66l-3.69,-0.53l-0.9,0.25l-2.12,1.63l-8.52,2.44l-1.58,0.13l-1.99,0.63l-3.48,-0.28l-1.08,-3.29l-1.55,-1.52l-0.32,-0.92l0.42,-2.0l0.73,-0.89l0.31,-1.23l1.41,-1.35l0.22,-0.83l-2.85,-5.27l-1.16,-0.97l-1.6,0.88l-1.97,0.08l-3.01,0.86Z\", \"name\": \"Arunachal Pradesh\"}, \"IN-KA\": {\"path\": \"M183.76,654.66l1.17,-1.76l1.58,-1.17l0.11,0.99l0.66,0.4l1.93,-0.14l1.67,-1.1l1.39,-2.47l-0.57,-1.14l2.3,-3.92l0.01,-1.78l-1.37,-0.64l0.65,-0.48l1.42,-0.09l0.56,-0.68l0.21,-3.0l-0.24,-1.26l-0.69,-0.68l-2.69,-1.26l-1.19,0.3l-0.47,-2.4l1.24,-0.28l0.35,-0.84l-1.1,-0.79l-0.36,-1.12l-1.04,-0.15l-0.39,-1.08l-0.95,0.09l0.31,-0.89l0.87,0.52l0.75,-0.34l0.34,-0.8l0.72,0.63l0.63,-0.14l1.85,-1.63l0.52,-1.51l2.28,0.61l0.64,1.97l0.55,0.41l0.87,-0.23l1.48,-1.21l1.3,-0.31l0.44,-0.89l-0.63,-0.9l0.68,-0.64l0.32,-1.0l0.9,-0.17l0.61,-0.68l1.67,-0.79l2.05,0.17l0.41,-0.88l-0.66,-2.45l2.16,-0.78l0.95,-0.97l0.35,-1.04l0.96,0.29l1.32,-0.24l0.43,0.85l1.57,1.28l1.74,0.56l2.56,-1.13l0.32,-1.76l2.11,-0.15l1.37,-0.65l1.59,-0.01l0.78,0.64l0.73,0.05l1.58,-0.66l0.84,-0.95l1.47,1.12l1.13,-0.06l0.56,-1.31l-0.58,-1.4l0.66,-0.66l0.08,-0.53l-1.28,-2.2l0.49,-2.65l-0.42,-1.11l-0.82,-0.58l-0.88,-2.78l0.83,-0.73l1.1,-1.81l0.67,0.2l0.76,1.43l1.88,0.29l1.02,1.25l0.74,0.0l1.18,-1.12l0.68,0.28l0.52,-0.31l0.52,1.7l1.37,1.03l2.4,-0.79l1.12,0.08l2.15,-1.02l1.3,0.35l1.64,-0.57l1.62,0.97l2.17,0.25l0.88,-0.29l0.98,-1.09l-0.17,-0.54l-0.94,-0.76l-0.84,-1.71l0.71,-1.31l-0.11,-1.65l-0.73,-1.08l2.27,-0.76l0.96,-1.31l1.3,-0.71l0.19,-1.02l0.84,-0.4l0.57,-0.91l0.9,0.33l1.1,-0.13l2.11,1.92l0.94,-0.21l0.83,-2.54l1.63,-1.28l-0.43,-2.03l2.59,0.52l1.11,-0.85l0.65,-1.76l0.44,-6.2l1.3,-0.6l1.67,0.06l2.75,-0.68l0.94,-1.82l3.43,-2.24l0.12,-2.6l0.97,-1.48l0.81,-0.16l0.82,0.6l0.26,2.57l2.49,1.24l0.14,0.8l0.46,0.46l1.07,-0.06l1.25,-0.96l1.87,0.57l-0.46,1.64l0.98,3.56l-0.97,0.35l-0.34,0.81l0.3,0.72l1.16,1.08l0.66,2.67l-1.93,2.03l-1.65,1.2l-0.31,0.97l0.86,1.02l0.13,0.63l-2.0,1.18l-1.66,3.11l0.54,0.74l2.14,1.1l2.63,0.05l0.62,0.92l2.4,-0.87l-0.85,1.7l-1.86,0.54l-0.68,1.22l-1.41,0.5l-0.93,1.81l-3.8,4.92l-0.3,1.05l0.18,0.89l1.75,0.99l0.21,1.34l1.01,2.06l-0.98,2.22l-0.04,4.51l-0.57,0.94l-0.19,1.47l0.2,0.87l0.84,0.59l-0.7,0.62l-0.29,0.74l0.33,0.43l0.72,-0.12l-0.46,1.4l-1.11,0.6l-0.57,1.31l-3.6,2.5l0.04,0.43l1.33,1.5l3.15,0.82l2.99,0.08l1.46,0.98l-0.05,0.65l-1.49,1.1l-0.35,0.85l-0.3,2.77l0.14,5.08l-0.92,1.2l-4.11,-0.1l-2.41,-0.6l-2.16,0.31l-2.83,1.49l-1.33,1.59l-0.27,3.92l0.26,0.61l0.54,0.3l0.92,1.92l-1.1,-0.21l-1.05,0.68l-0.44,1.23l0.31,2.89l-0.61,-0.36l-0.47,0.14l-0.26,0.54l1.49,3.11l0.45,2.23l2.35,1.26l0.79,5.01l-1.29,2.89l-1.27,1.08l-0.98,-0.83l-1.9,0.28l-2.26,-0.55l-2.7,-1.55l-0.83,0.05l-0.64,1.13l-0.05,1.31l-0.76,1.17l0.34,0.49l2.58,1.0l0.24,0.53l-0.67,3.87l-0.92,0.48l-0.24,0.51l0.09,1.46l-0.65,1.58l-0.11,1.87l0.53,1.82l1.15,0.65l1.13,1.95l2.75,-0.11l0.28,0.38l-0.58,1.33l-0.75,-0.03l-0.6,0.43l-0.33,1.18l0.67,1.5l1.34,0.7l-0.5,1.06l0.38,0.63l5.22,0.79l0.57,-0.66l0.04,-1.35l1.22,-1.48l1.49,0.54l2.05,-0.25l0.35,0.98l1.75,0.6l0.81,1.07l0.71,0.37l0.61,-0.09l0.42,-0.71l-0.87,-2.14l0.63,0.06l0.57,0.9l1.2,0.25l-0.29,1.29l0.4,1.46l-2.57,0.43l-1.69,1.64l0.17,0.52l0.77,0.22l-0.9,1.3l-0.01,0.61l0.89,1.82l0.88,0.68l-0.09,0.84l0.46,1.04l-1.36,-0.46l-0.12,-1.15l-1.33,-2.11l-1.58,-0.4l-2.02,0.49l-1.93,0.06l-0.86,-0.87l-2.53,-0.91l-0.68,-2.95l-0.45,-0.49l-1.65,-0.55l-1.55,0.95l-0.26,0.99l2.22,2.42l-0.16,1.73l2.27,3.02l-1.7,2.74l0.13,1.43l0.5,1.1l0.7,0.06l0.45,-0.65l1.18,0.94l0.5,-0.15l0.37,-0.63l1.31,0.24l0.78,-0.26l0.35,-1.0l-0.25,-1.5l-0.54,-0.55l0.64,-0.79l0.65,0.55l0.97,-0.55l0.77,0.74l1.09,0.02l1.04,0.57l2.88,0.1l1.0,1.31l0.76,3.18l1.76,0.02l1.87,-1.1l1.4,-0.17l0.29,-1.09l0.84,-0.13l0.54,0.58l0.75,-0.06l0.7,-1.41l1.23,-0.5l1.78,-1.55l0.13,-0.72l-0.57,-0.89l0.16,-0.39l1.51,0.14l1.31,0.55l0.69,-0.36l0.76,-1.03l-0.06,0.91l-0.96,1.22l0.45,1.84l0.61,0.04l1.08,-1.14l1.08,0.1l0.98,-0.51l1.13,0.68l0.47,1.62l-0.46,1.45l0.68,1.33l-0.98,-0.09l-0.43,0.33l-0.05,0.66l0.46,0.93l0.44,0.26l1.43,-0.19l1.73,1.76l1.63,0.44l1.35,0.11l0.84,-0.42l0.8,0.37l1.06,-0.13l-0.34,1.19l-0.06,3.99l-0.34,1.2l1.1,1.98l0.69,0.23l0.59,-0.29l1.3,0.36l1.75,1.15l1.21,-0.5l-0.05,2.1l-0.32,1.1l-0.91,1.18l-0.34,1.83l-1.24,0.9l-0.54,1.55l-1.32,2.03l0.1,0.59l1.12,0.65l0.48,0.78l-2.19,-1.45l-1.12,-0.16l-0.49,0.39l-0.35,1.35l-1.07,0.42l-1.03,-0.36l-0.62,0.37l0.11,2.05l-0.34,0.59l-2.6,-0.85l-2.48,-1.78l-0.99,-0.1l-1.2,1.37l-2.15,-1.97l-2.37,-0.1l-1.63,0.75l-0.34,1.39l-1.03,1.8l0.24,1.06l-2.02,1.05l-1.7,-0.11l-1.04,0.49l-1.29,3.66l0.38,1.14l-0.1,1.1l1.28,0.34l-0.45,2.16l-2.18,2.84l-1.81,1.11l-0.33,1.06l0.88,1.69l6.59,0.29l1.01,0.65l0.87,1.65l-3.17,4.34l-4.19,0.64l-1.02,0.5l-1.01,1.52l-0.85,2.18l-0.54,0.46l-2.0,0.25l-2.48,-1.04l-1.24,0.45l-2.9,0.22l-0.46,0.31l-0.39,1.08l-1.99,-1.91l-1.21,-0.41l-2.06,0.44l-0.92,0.51l-1.97,3.01l-0.52,2.22l-2.05,-0.47l-5.1,0.34l-0.7,-0.25l-0.01,-1.16l-0.76,-0.99l-1.01,-0.34l-1.28,0.14l-1.47,1.17l-0.23,-1.51l-0.53,-0.66l-2.29,-0.05l-1.56,-1.76l-1.37,-0.01l-1.51,-1.78l-0.98,-0.16l-1.05,0.26l-0.38,-0.58l0.08,-2.01l-0.53,-0.63l-0.84,-0.04l-2.77,1.07l-2.93,-0.54l-1.33,-0.58l-1.09,-1.2l-0.6,-1.99l-1.88,-0.3l-1.33,-0.81l-0.81,0.09l-0.76,-1.06l-2.07,-1.0l-3.42,-3.85l-1.12,-0.12l-0.54,-1.89l-0.87,-1.28l0.04,-0.64l0.75,-0.81l0.05,-0.7l-0.69,-0.48l-1.29,0.25l-1.68,-1.95l0.67,-1.64l-0.28,-0.5l-1.53,-0.38l-1.26,0.46l-0.83,-1.04l-1.18,0.1l-0.21,-1.49l-1.02,-0.68l-0.95,-0.16l-0.98,0.44l-0.22,-0.85l-1.23,-0.36l-0.55,-1.43l-0.97,-0.23l-1.59,0.31l-0.32,-0.91l0.99,-0.81l1.53,-0.55l0.39,-0.51l-0.4,-0.61l-3.41,0.56l-1.36,-5.58l0.26,-1.33l-0.35,-0.37l-0.6,-2.16l-1.04,-5.01l-0.74,-1.48l0.06,-0.6l0.43,-0.2l-0.18,-1.85l-0.72,-1.98l-0.17,-2.91l1.43,-0.43l0.51,-0.72l-0.79,-0.24l-0.74,-1.69l-0.59,-0.04l-0.59,0.82l-1.04,-4.59l-0.98,-2.21l-2.65,-3.83l0.0,-1.22l-0.63,-1.13l-0.24,-2.4l-1.15,-1.8l2.13,0.13l0.18,-0.69l-2.5,-1.07l-0.26,-0.37l-0.08,-1.26l-1.06,-3.28l0.48,0.02l0.27,-0.5l0.73,-0.16l-0.05,-0.45l-1.48,-1.63l-0.14,-0.62l-0.98,-0.84l-0.71,0.54l-0.06,1.03l-0.4,0.04l-0.22,-1.61l1.0,-0.33l0.35,-0.61l-0.72,-0.56l-1.25,0.35l-0.23,-0.18l0.24,-0.61l-0.84,-2.65l-1.14,-0.68l-0.83,0.38l-0.42,-0.63l-0.7,-0.13l-1.41,-0.99l0.54,-0.99l1.17,0.17l0.75,-0.99l1.08,0.02l0.47,-0.37l-0.08,-0.75l-1.37,-0.74l-2.36,1.62l-0.46,-0.72l1.61,-1.08l1.69,-0.19l1.18,-0.91l0.82,-2.53l-0.14,-2.48l0.94,-2.43l-0.25,-0.71l-1.34,-1.11l1.61,-0.57l0.34,-0.87l-0.21,-1.62l-1.2,-1.53l-0.04,-1.34l-0.58,-0.86l0.59,-1.77l-0.66,-3.34l-0.5,-0.59l-1.53,-0.72l-1.74,0.51l-0.43,-0.07l-0.12,-0.46Z\", \"name\": \"Karnataka\"}, \"IN-PB\": {\"path\": \"M176.07,176.63l0.49,-0.66l0.91,-0.18l0.37,-0.76l0.93,-0.37l1.98,-2.76l1.11,-0.3l0.6,-0.54l0.35,-2.73l1.22,-1.08l1.65,-0.66l0.97,-1.89l2.26,-2.34l-0.1,-1.02l1.19,-0.74l0.5,-1.77l2.56,-0.03l1.17,-1.73l2.45,-0.6l1.36,-1.41l0.49,-1.31l2.35,-1.33l0.12,-0.61l-1.4,-1.16l-2.43,0.02l-0.78,-1.72l0.77,-4.21l2.63,-5.48l-0.15,-0.82l-0.89,-1.3l-0.91,-3.26l-1.88,-3.18l1.28,-1.9l0.42,-1.8l3.6,-2.55l0.85,-1.45l1.71,0.33l1.05,-0.31l1.2,-2.56l1.09,0.37l0.83,-0.6l2.02,-0.13l1.02,-1.1l1.11,-0.02l0.36,-0.49l-0.14,-0.56l1.94,0.66l1.17,-0.5l1.03,0.2l0.93,-1.49l3.2,-0.92l0.63,-2.0l1.01,-1.12l0.35,-0.94l-0.27,-0.94l-1.12,-1.22l1.94,0.13l1.25,-0.69l0.47,1.04l1.62,0.83l0.46,-0.14l2.1,-2.45l1.07,-0.64l2.7,-0.39l1.07,-0.89l0.4,-1.14l1.66,-0.59l1.42,-1.04l1.5,2.65l-3.97,2.7l-1.59,1.66l-3.57,1.31l-0.33,1.08l0.28,1.2l0.7,0.45l0.63,-0.16l-0.52,1.03l-1.81,1.94l-0.05,0.85l0.87,0.49l3.03,0.5l5.38,2.71l2.54,4.11l-1.07,0.21l-0.18,1.25l4.53,8.24l2.34,7.11l1.09,1.36l0.75,0.46l1.42,-0.32l1.34,0.16l0.65,-1.28l0.84,-0.38l-0.02,-1.78l0.92,-0.36l2.27,4.24l0.98,-0.15l0.78,0.72l0.73,-0.2l0.39,0.92l0.53,0.22l0.69,-0.62l0.06,1.28l0.34,0.31l0.96,-0.04l-0.73,1.33l-0.03,1.58l0.68,0.74l-0.51,1.25l0.31,1.59l1.02,1.2l3.79,3.11l1.0,1.7l0.95,0.53l-0.41,1.04l-2.24,-0.16l-1.46,0.74l-0.24,0.82l0.32,0.8l2.49,2.48l2.18,-0.11l0.28,1.06l0.84,0.47l0.29,0.86l-0.26,1.77l0.52,0.95l-0.43,1.01l0.34,3.05l-0.33,0.84l-1.25,-2.16l-2.78,-0.23l-1.08,0.49l-0.44,1.63l0.52,0.73l-2.37,1.72l-3.57,1.91l-0.22,0.62l0.44,0.79l0.82,-0.04l0.76,-0.82l0.42,0.84l0.87,0.45l-0.38,1.5l-2.73,1.89l-1.97,-0.49l-1.02,-2.47l-0.61,-0.47l-0.6,0.06l-0.49,0.47l0.18,1.05l-0.33,0.74l-0.93,-0.81l-0.57,0.13l-0.15,0.98l-0.26,0.08l-1.13,-0.23l-1.27,-0.87l-0.79,0.13l-0.49,1.0l0.9,0.83l-0.46,0.56l0.17,0.85l-0.56,0.83l-0.83,2.76l0.55,1.64l0.95,0.71l-2.16,1.34l-1.95,0.72l-1.28,1.49l-1.16,0.03l-1.39,0.58l-1.91,-0.35l-1.01,-1.8l-1.91,-0.93l-2.34,0.7l-0.72,1.35l-1.13,-0.2l-1.76,0.35l-4.86,-1.45l-3.42,4.21l-0.13,0.69l-0.95,0.4l-0.7,1.35l0.37,1.21l-1.34,0.48l-0.53,-1.63l-0.78,-0.89l0.03,-0.68l-0.47,-0.53l0.89,-0.62l-0.01,-1.11l0.84,-0.15l0.16,-0.58l-1.61,-2.94l-1.18,0.18l-0.57,0.76l-0.91,-0.57l-0.12,-1.21l0.35,-1.46l-0.53,-0.88l-0.81,0.2l-0.42,1.1l-1.94,0.49l-1.47,-1.09l-0.81,-1.4l-2.41,-0.6l-0.88,-0.73l-3.48,0.62l-1.31,0.92l-0.55,0.88l-3.88,-1.1l-4.07,-0.54l-15.05,-0.66l0.36,-1.18l2.21,-3.51l0.25,-1.48l-0.23,-0.77l-0.66,-0.4l-1.19,-3.33l-0.77,-1.0l-1.17,-0.6Z\", \"name\": \"Punjab\"}, \"IN-ML\": {\"path\": \"M692.14,323.41l0.36,0.99l0.49,0.26l3.48,-1.0l0.19,0.86l0.64,0.35l1.2,-0.63l1.49,-0.23l3.08,0.24l0.52,0.77l0.96,0.42l-0.17,1.66l0.43,0.66l1.1,-0.39l0.55,0.36l0.64,-0.07l2.66,-0.96l0.05,3.31l0.27,0.81l0.85,0.45l1.66,-0.78l2.72,-2.95l3.5,-0.63l1.66,-0.86l0.37,-0.68l-0.38,-0.52l-1.21,0.62l3.21,-4.23l0.7,0.03l0.35,0.35l-0.47,2.0l0.21,0.69l1.52,0.36l1.37,-0.91l0.76,-1.27l0.44,-1.6l1.65,-1.4l0.96,0.24l1.41,1.21l1.05,0.19l3.13,-0.68l1.07,0.06l3.34,-1.03l2.77,0.13l-2.86,2.99l0.12,1.26l1.06,0.72l-1.5,3.63l0.24,1.32l-0.13,2.9l0.69,0.35l1.64,-0.98l2.82,-0.49l1.83,-1.14l2.64,2.02l3.7,3.79l0.62,0.07l1.88,-0.9l-1.34,1.9l-1.55,1.24l-0.1,0.59l1.68,1.57l2.05,0.77l2.62,2.44l0.18,0.48l-0.36,1.54l0.66,1.41l-3.66,1.24l-1.0,1.03l-2.75,0.23l-0.26,0.76l-1.33,0.48l-3.41,3.12l-1.72,-0.99l-0.78,-0.86l-2.26,-0.4l-1.74,-1.46l-1.79,-0.29l-0.79,-0.85l-1.94,-0.58l-2.44,0.38l-1.73,-0.24l-5.25,0.33l-0.64,0.7l-0.94,-0.21l-0.65,0.86l-0.55,0.08l-1.11,-0.13l-1.08,-1.05l-0.72,-0.01l-2.03,0.82l-1.34,-0.09l-4.49,-1.33l-1.65,-0.78l-12.73,1.95l-2.04,-0.82l-0.72,-0.02l-0.73,0.49l-2.6,-0.6l-1.28,0.3l-2.57,-0.21l-4.05,0.61l-2.4,-0.98l-4.8,-1.03l-6.8,-2.79l-2.64,0.4l-0.59,-2.56l0.35,-1.85l2.3,-0.94l0.38,-0.8l0.21,-2.01l1.81,-0.2l1.28,-1.0l0.04,-0.93l-1.52,-1.7l-0.34,-1.72l0.88,-1.75l0.26,-1.36l2.26,-2.72l2.31,-1.91l5.74,-0.81l1.82,-1.05l3.24,0.21l1.4,0.87l-0.56,1.9l0.39,0.49l1.72,-0.91l0.85,-1.0Z\", \"name\": \"Meghalaya\"}, \"IN-MN\": {\"path\": \"M765.49,384.0l0.47,-0.68l0.61,-3.47l-0.09,-1.17l0.96,-1.67l-0.13,-0.68l-0.62,-0.57l-0.09,-1.32l0.56,-0.31l0.28,-0.98l0.55,-3.63l1.0,-0.49l0.14,-0.43l-0.57,-1.42l0.73,-1.43l-0.56,-1.21l0.91,-2.88l0.63,-0.62l0.88,0.47l0.98,-0.44l0.27,-1.08l1.36,-2.09l-0.23,-1.11l1.0,-0.91l-0.44,-2.02l1.51,-0.98l3.35,-6.82l0.5,-0.52l1.87,1.18l1.29,0.39l1.16,1.32l0.79,-0.03l1.42,-1.94l0.99,-2.22l3.94,-3.86l-0.04,-1.41l-1.34,-0.76l0.16,-0.53l4.57,-0.6l2.93,0.03l1.7,1.1l2.18,-0.03l1.33,0.81l4.11,-0.51l2.05,-1.03l1.5,-1.74l1.68,-0.96l1.91,-1.65l-0.05,1.34l-1.04,3.76l0.67,0.94l2.42,1.37l-0.87,1.31l-1.78,4.9l0.08,1.52l0.99,1.35l3.31,1.08l0.64,2.0l-0.15,1.25l-1.08,1.72l-0.56,2.75l-1.73,2.55l-0.49,2.59l-0.58,0.52l-1.44,0.34l-1.22,3.42l-1.79,1.31l-0.65,2.06l-1.03,1.02l-0.12,1.37l-1.01,1.13l0.08,0.9l-1.09,1.03l-0.39,2.16l-1.51,3.48l-1.33,5.32l-1.69,2.49l-0.11,2.01l-0.25,0.27l-1.49,-1.41l-1.93,-1.02l-3.52,-0.92l-2.47,0.28l-1.62,-1.76l-1.26,-0.49l-3.11,-0.12l-0.94,0.51l-0.51,0.86l-0.79,-0.43l-1.46,0.7l-0.87,-0.01l-0.47,-1.06l-2.13,-2.65l-0.75,-0.47l-1.33,0.4l-0.63,1.3l-0.8,0.38l-0.15,-0.87l-0.68,-0.58l-1.63,0.9l-1.15,-0.71l-1.16,0.57l-1.01,-0.83l-2.54,-0.88Z\", \"name\": \"Manipur\"}, \"IN-MH\": {\"path\": \"M140.02,524.29l0.06,-1.24l-0.89,-1.35l0.45,-1.03l-0.02,-2.02l0.58,-0.43l0.77,-1.67l0.01,-1.67l1.8,-0.88l1.02,0.27l0.61,-0.35l2.1,-0.11l1.26,-0.53l1.63,2.69l1.38,-0.59l0.87,0.56l1.01,-0.49l0.85,0.82l0.58,0.11l0.82,-0.93l0.21,-1.81l0.82,-0.04l1.23,-0.66l0.57,-1.77l3.01,0.37l0.95,-0.4l-0.07,-1.27l0.49,-1.74l-0.34,-2.56l-0.66,-0.58l2.42,-3.82l0.56,-1.66l-0.48,-1.67l-0.94,-0.32l-0.37,-1.27l-0.99,-0.24l0.99,-0.38l0.9,-1.46l0.9,1.35l3.28,1.92l1.77,1.83l2.49,-0.21l2.88,-1.69l0.39,-0.98l-0.0,-1.07l2.33,-1.97l0.71,-1.34l-0.19,-3.58l-0.9,-2.69l-2.67,-3.15l-1.52,-0.55l-1.15,-1.45l-0.83,-0.24l-1.49,0.14l-2.13,-1.69l1.87,0.97l2.29,-0.02l2.26,-1.34l1.02,-2.45l1.02,0.6l2.51,-0.87l1.4,-3.41l2.42,-2.08l1.87,0.38l4.14,-1.13l1.72,-0.97l0.43,-1.02l-0.34,-1.17l-0.46,-0.42l-2.95,0.88l-1.44,-0.8l-1.14,0.58l-3.52,-0.08l-5.22,1.49l-1.82,-2.89l1.68,-0.47l0.65,-0.69l0.32,-1.01l-0.15,-0.9l-0.83,-0.77l-0.29,-2.57l0.27,-0.56l2.56,-0.97l1.38,-0.19l1.13,-0.92l2.52,-1.2l1.96,-0.35l2.37,0.85l2.05,-0.37l0.72,-0.45l0.19,-0.59l1.73,-0.61l1.41,-1.13l2.18,2.28l0.21,0.76l-0.17,3.62l0.77,2.62l3.13,2.41l1.63,0.45l1.6,1.13l4.83,-0.16l1.07,0.2l1.64,1.01l1.69,0.14l1.58,1.14l2.36,3.5l2.18,0.87l3.21,0.71l6.95,0.32l2.77,-0.44l2.5,0.23l3.35,-0.17l1.94,-0.51l2.2,0.26l2.69,0.81l1.26,-0.08l1.24,2.54l0.36,2.7l-1.11,0.57l0.15,0.97l1.09,1.49l0.87,0.53l3.81,0.66l4.02,-0.74l0.95,-0.46l1.82,-2.26l4.01,-0.99l0.96,-1.64l-0.02,-1.37l-0.56,-1.56l2.52,-1.7l1.81,-2.57l0.52,-3.12l0.5,-0.59l0.75,-0.35l2.31,-0.17l3.51,-2.47l2.54,-0.93l1.74,-0.08l0.77,0.73l0.74,0.08l1.15,-1.07l0.99,-0.26l1.28,-1.01l4.16,0.21l0.84,1.07l1.22,0.67l0.36,3.83l0.44,0.85l-3.7,-0.1l-0.72,0.76l0.04,1.29l1.97,3.68l0.53,0.02l0.58,-0.76l1.39,0.99l0.88,0.02l1.05,-0.43l1.38,0.13l0.82,0.55l2.93,-1.48l2.94,0.87l4.44,-1.33l3.05,-1.56l2.07,-2.14l3.51,-1.08l1.4,-1.22l1.25,0.34l0.42,2.93l0.32,0.47l0.78,0.04l1.24,-0.64l0.62,0.01l1.47,0.98l2.09,0.55l2.14,0.15l6.99,-1.28l0.7,-0.93l-0.15,-1.32l1.82,-0.62l2.66,-0.31l4.17,-1.36l0.59,-0.54l0.29,-1.34l1.77,0.62l3.23,0.14l1.66,0.54l0.8,1.02l0.92,0.57l0.58,2.17l0.81,0.57l1.25,-0.33l1.75,-1.17l2.95,-0.27l1.39,0.37l0.77,1.38l0.58,0.33l1.6,-0.12l2.05,-0.95l0.35,0.4l0.86,0.06l2.42,-0.77l0.92,-1.07l2.29,-0.91l1.67,1.15l1.92,0.55l0.2,1.01l0.5,0.63l2.02,1.48l0.35,0.91l-0.73,1.25l0.43,0.65l0.81,0.15l1.85,-0.32l4.3,2.41l1.39,-0.57l-0.01,0.89l-1.13,1.42l-2.68,1.41l-2.67,1.98l-0.97,4.16l0.16,1.64l0.77,1.33l1.09,0.52l1.28,-0.23l0.35,0.63l0.06,4.02l0.45,3.05l-1.84,1.2l-0.47,0.89l-0.02,0.79l0.38,0.48l0.66,0.16l1.78,-0.88l1.02,0.27l0.01,1.81l0.39,0.89l-0.58,1.41l-0.1,2.11l0.45,2.13l-1.09,0.47l-1.52,1.28l-2.81,0.5l-0.75,0.81l-0.36,2.4l0.18,0.72l3.49,0.54l0.73,2.48l-0.7,3.76l-2.02,-0.7l-1.12,1.16l-0.04,1.18l1.69,0.75l-0.51,0.69l-1.68,0.86l-0.09,0.89l0.85,0.59l1.62,0.25l0.63,-0.44l0.13,-0.95l0.77,-0.12l1.15,2.63l2.81,1.23l0.47,2.03l0.58,0.9l4.26,1.79l1.18,1.1l0.48,0.98l-0.64,1.2l-1.62,0.32l-0.53,0.42l-0.01,0.81l0.78,1.35l-1.97,0.98l-0.97,0.87l-1.04,-1.54l-2.0,-0.01l-0.88,-1.94l-0.71,-0.42l-0.85,0.24l-1.13,1.33l-1.18,0.61l-1.0,1.75l-1.36,0.8l-1.22,4.29l-2.27,3.01l-0.64,1.37l-0.01,1.37l2.24,3.09l-0.09,0.72l-2.24,1.45l-0.28,0.71l0.24,1.15l-0.3,0.22l-2.34,0.29l-2.31,-0.22l-0.58,-0.96l-2.01,-1.76l-2.23,-1.06l0.99,-0.99l0.21,-0.84l0.02,-1.59l-0.72,-3.35l-0.74,-0.8l-1.66,0.26l-0.06,-0.71l0.87,-1.58l1.42,-0.93l0.21,-0.5l-0.44,-2.8l0.57,-0.64l0.28,-0.94l0.23,-3.74l-1.23,-2.15l-1.96,-0.77l-2.06,-2.64l-2.29,-0.45l-3.08,1.08l-0.91,0.51l-0.3,1.12l-0.39,0.32l-1.26,-0.82l-4.24,-0.18l-1.47,-1.27l-3.01,-0.45l-0.87,-1.21l-1.35,-0.51l-2.56,0.37l-1.33,0.62l-0.81,1.12l-1.3,0.27l-1.56,-0.84l-0.34,-0.77l-1.28,-0.55l-0.99,-2.79l-2.09,-1.54l-2.16,0.04l-2.92,-1.29l-1.56,0.02l-1.1,-0.35l-1.07,0.25l-0.61,0.57l-1.9,-0.74l-1.36,-1.66l-1.24,-0.52l-0.54,0.27l-0.23,0.9l0.26,1.04l1.09,2.59l1.15,1.04l-0.25,0.64l-1.24,0.79l-0.61,0.83l-0.91,2.35l-0.06,2.8l-2.01,0.66l-0.77,0.68l-1.2,2.21l0.22,2.5l-0.2,0.74l-3.33,-0.06l-0.9,-0.6l-0.87,-1.24l-2.11,-0.28l-1.27,0.34l-0.99,0.93l0.11,0.69l0.53,0.26l-1.01,1.36l-0.7,2.23l0.12,1.03l-2.39,2.03l-0.22,0.63l0.57,2.11l1.03,0.18l0.28,0.94l0.86,0.22l0.16,1.21l2.03,1.81l-2.16,0.84l-1.71,3.25l-1.27,-0.02l-0.95,0.63l-0.33,0.77l0.19,1.51l-0.52,1.27l-2.57,0.53l-1.5,1.72l-0.5,2.61l-1.3,1.55l1.51,1.29l0.1,0.66l-1.31,-0.1l-1.69,1.02l-0.3,-1.06l-2.38,-1.06l-0.11,-2.21l-0.63,-0.91l-1.3,-0.5l-1.15,0.41l-1.16,1.82l-0.03,2.41l-1.43,0.66l-1.86,1.41l-0.68,0.82l-0.31,1.03l-1.26,0.02l-1.02,0.42l-1.68,-0.05l-1.83,0.93l-0.27,0.64l0.14,1.57l-0.48,2.32l0.04,2.02l-0.55,1.47l-0.5,0.44l-3.0,-0.44l-0.32,0.42l0.47,2.13l-1.5,1.02l-0.86,2.44l-2.06,-1.89l-2.52,-0.23l-0.88,1.08l-0.94,0.5l-0.2,1.02l-1.14,0.56l-0.95,1.3l-2.46,0.92l-0.17,0.5l0.77,1.23l0.09,1.48l-0.71,1.34l1.01,2.17l0.92,0.74l-0.6,0.51l-2.45,-0.08l-1.78,-0.99l-1.68,0.57l-1.38,-0.34l-2.26,1.05l-0.94,-0.14l-2.15,0.79l-0.87,-0.67l-0.28,-1.22l-0.68,-0.84l-0.88,0.28l-0.74,-0.28l-1.46,1.22l-0.85,-1.16l-1.9,-0.32l-0.65,-1.35l-0.88,-0.45l-0.63,0.12l-2.43,3.16l0.98,3.28l0.92,0.73l0.24,0.71l-0.5,2.6l1.28,2.16l-0.74,1.05l0.55,1.29l-0.2,0.88l-2.2,-1.25l-1.22,1.13l-1.28,0.53l-1.19,-0.68l-1.83,-0.01l-1.52,0.68l-2.02,0.12l-0.77,0.53l-0.02,1.43l-2.01,0.92l-1.23,-0.4l-1.49,-1.22l-0.67,-1.03l-1.68,0.2l-1.2,-0.27l-1.49,2.14l-2.45,1.04l0.56,3.05l-1.89,-0.24l-1.82,0.86l-0.57,0.65l-1.08,0.31l-0.5,1.26l-0.78,0.59l-0.04,0.6l0.64,0.85l-1.22,0.28l-1.77,1.34l-0.89,-2.23l-2.91,-0.76l-0.53,0.3l-0.53,1.56l-1.66,1.42l-0.93,-0.68l-0.61,0.31l-0.37,0.87l-0.8,-0.53l-0.65,0.1l-0.76,2.26l0.62,0.38l0.81,-0.38l0.26,0.87l1.12,0.26l0.23,0.93l0.78,0.55l-0.95,0.16l-0.48,0.69l0.62,2.98l0.63,0.32l0.91,-0.41l2.9,1.47l0.22,0.97l-0.19,2.82l-1.77,0.32l-0.86,0.93l0.13,0.7l1.32,0.54l0.03,0.51l-0.3,1.18l-2.16,3.44l0.6,1.18l-1.19,2.09l-1.32,0.88l-1.54,0.11l-0.16,-1.09l-1.05,-0.25l-2.28,1.88l-0.4,0.99l-0.63,0.47l0.15,0.72l-0.91,0.04l-2.08,0.78l-1.43,-0.79l-1.0,-2.75l-1.76,-0.62l-0.53,-1.11l-0.79,0.21l-0.89,1.14l-1.83,0.13l-0.71,0.34l-1.25,-0.26l0.03,-1.62l-1.31,-2.88l-3.48,-3.53l0.79,-0.83l-0.41,-0.4l-0.8,-0.07l-0.82,-0.82l0.33,-0.64l0.06,-2.16l0.71,-0.87l-0.01,-0.47l-0.44,-0.14l-0.95,0.42l-0.17,-1.06l-0.71,-0.29l-1.12,-4.25l-0.51,-0.32l0.58,-0.47l-0.03,-0.73l-1.12,-0.76l-0.68,-2.42l-0.45,-0.54l1.06,0.74l0.82,0.06l0.41,-0.32l-0.74,-0.71l0.5,-0.8l-1.26,-0.43l-0.4,-0.57l0.51,-0.22l0.18,0.36l0.66,0.09l0.32,-0.64l-0.15,-0.76l-0.57,-0.46l-0.98,0.18l0.18,-1.71l-0.97,-1.49l0.42,-2.29l-0.5,-0.3l-0.41,-0.93l-0.12,-0.62l0.28,-0.53l-0.31,-1.31l0.56,-1.5l-0.17,-0.55l-0.76,-0.39l0.59,-1.37l-0.03,-0.91l-0.58,-1.34l0.09,-1.05l-1.37,-3.59l0.76,-0.16l0.19,-0.63l-1.62,-2.66l-0.76,-0.65l-0.09,-0.38l0.56,-0.85l-0.28,-0.75l0.12,-0.77l-1.59,-2.24l2.03,-0.65l-0.02,-0.73l-1.83,-0.43l-0.38,-0.57l0.05,-1.09l-0.52,-0.83l0.53,-1.46l-0.55,-1.76l-0.81,-1.2l-0.45,-1.72l-1.42,-2.31l0.42,-0.88l-0.28,-0.67l-0.53,-0.26l0.98,-0.85l0.18,-0.85l-0.51,-0.41l-0.94,0.54l-0.34,-0.37l-0.61,-4.09l-0.38,-0.69l-0.67,-0.29l0.19,-0.69l0.62,0.73l1.75,0.17l0.54,0.38l-0.31,0.81l0.58,0.48l0.45,-0.14l0.51,-0.78l-0.02,-2.09l-0.62,-0.75l-1.94,-0.11l-0.55,-0.53l0.14,-0.36l-0.36,-0.54l-1.6,-0.94l-0.01,-1.02l-0.62,-1.29l0.45,-2.33l0.71,-0.18l1.81,2.51l0.68,-0.15l0.19,-0.62l-0.86,-1.02l-0.88,-2.03l-0.71,-0.34l-0.82,0.14l-1.64,-3.67l-0.09,-2.7l0.29,-0.7l1.18,0.09l0.55,-0.62l0.88,0.95l0.04,1.25l0.91,0.59l0.53,-0.48l-0.1,-1.31l0.64,-0.91l-0.12,-0.67l-0.88,-0.45l-0.18,-1.43l-0.6,-0.05l-0.65,0.44l-1.04,-0.76l0.14,-0.26l0.68,-0.01l0.31,-1.08l1.2,-0.1l0.34,-0.51l-0.2,-0.37l2.02,-0.66l0.31,-0.64l-0.31,-0.57l-0.52,-0.07l-1.35,0.42l0.13,-1.87l-0.65,-0.58l0.22,-2.19l-0.4,-0.44l-0.59,0.23l-1.02,1.69l-0.22,1.38l0.37,0.69l-0.13,0.31l-0.7,0.72l-0.08,-0.33l-0.66,-0.2l-0.49,0.46l-1.25,2.43l-0.6,-0.82l0.51,-1.73l0.36,-0.09l0.25,-0.76l-0.32,-0.73l0.29,-1.17l-0.39,-1.12l0.4,-0.71l-0.24,-0.49l-0.7,-0.1l1.07,-1.85l-0.27,-0.66l-0.46,-0.04l-0.91,0.92l0.19,-2.07l2.08,-0.09l0.63,0.65l1.46,0.32l1.18,-0.24l1.53,2.69l0.5,0.1l0.71,-0.39l-0.01,-0.7l-0.42,-0.22l-0.17,-1.08l-1.36,-1.37l-2.73,-0.21l-1.89,-1.29l-1.07,0.49l-1.01,-1.35l-0.33,-2.78l3.69,-1.53l0.25,-0.37l-0.25,-0.37l-0.94,-0.31l-1.71,0.45l-0.95,-1.4l-1.01,-0.32l-0.28,0.39l0.16,-0.89l-0.58,-2.49l0.85,-0.61l-0.33,-1.12l0.55,-0.55l-0.18,-1.26l-0.69,-0.14l-0.89,1.09Z\", \"name\": \"Maharashtra\"}, \"IN-KL\": {\"path\": \"M207.32,745.98l1.92,-0.19l0.39,1.27l1.23,0.49l0.41,0.89l0.63,0.19l0.89,-0.52l0.47,0.08l0.64,0.37l-0.1,0.79l0.5,0.89l0.57,0.23l0.78,-0.21l0.85,1.04l0.65,0.11l0.96,-0.48l0.95,0.25l-0.62,1.55l0.94,1.35l1.25,1.27l1.53,-0.21l-0.72,0.78l-0.15,1.13l0.93,1.53l0.64,2.08l1.3,0.28l3.32,3.77l2.15,1.07l0.78,1.07l1.13,0.04l1.41,0.84l1.39,0.08l0.46,1.8l1.32,1.45l1.59,0.7l3.14,0.56l3.3,-1.08l0.01,2.3l0.65,0.82l2.2,-0.0l1.26,1.62l1.5,0.11l1.64,1.8l1.14,0.25l1.17,-0.18l0.27,1.6l0.54,0.81l-1.2,0.5l-1.02,1.21l-0.98,0.1l-1.84,-0.51l-0.38,0.17l-0.33,0.69l-0.03,2.0l0.9,1.74l4.83,1.38l1.12,0.9l1.17,0.45l1.49,1.54l-2.87,2.82l-0.17,0.89l0.34,0.48l0.86,0.17l0.99,-0.3l1.57,0.46l3.34,-0.37l0.94,-0.61l-0.36,1.61l0.94,1.09l0.8,2.1l0.59,0.57l-1.64,-0.24l-0.64,0.35l-0.59,1.61l0.2,1.28l0.98,1.23l3.74,1.55l0.74,1.63l1.03,0.92l-0.41,2.95l-1.35,0.7l-0.35,0.83l0.17,2.6l-0.55,3.61l0.93,2.08l0.11,1.93l2.58,2.4l1.39,0.59l1.1,-0.31l2.7,-2.22l3.3,-1.4l1.27,1.82l0.4,1.65l0.73,0.77l-1.69,4.21l1.1,3.48l-1.02,2.47l0.32,2.94l-1.56,5.71l0.29,0.53l1.83,1.05l2.88,-0.69l1.58,2.31l0.11,0.81l-1.01,1.01l-0.96,2.65l-0.84,1.39l-2.5,7.28l-1.99,1.95l1.13,3.67l1.53,1.25l-0.52,1.84l-1.71,2.58l0.21,2.15l0.35,0.76l1.72,1.46l0.73,1.15l-0.92,1.3l-0.26,0.16l-0.49,-0.36l-0.56,0.34l0.28,1.93l-1.34,2.06l-0.32,1.41l-1.22,0.16l-3.21,-2.34l-3.51,-4.66l-1.64,-1.53l-0.43,-1.0l-3.63,-4.29l-1.58,-2.45l-2.39,-2.02l1.57,-0.71l0.15,-0.44l-0.37,-0.28l-1.08,0.1l0.47,-0.7l1.68,0.13l0.44,-0.23l-0.2,-0.71l0.54,-0.49l-0.28,-0.62l-0.95,-0.03l-0.85,0.6l-1.25,-0.25l-1.31,0.82l-1.58,-3.84l0.32,-0.33l0.19,-1.64l-0.19,-0.41l-0.65,0.2l-0.86,-2.3l-0.74,-0.28l-0.21,0.22l-1.05,-2.39l-1.56,-5.16l-1.24,-10.4l0.63,-0.17l0.66,4.3l0.62,0.34l0.41,-0.52l0.65,0.91l-0.63,1.46l-0.6,2.77l0.13,0.65l0.86,0.47l2.79,0.53l0.73,-0.32l0.81,-0.97l-0.14,-0.62l-1.15,-0.68l-1.47,-0.14l0.28,-0.66l-0.17,-2.85l-0.66,-1.06l-0.37,-2.02l0.45,-1.0l-0.04,-0.85l-1.08,-2.32l-1.52,-1.72l-0.77,0.08l-0.45,-1.39l0.12,-0.52l-0.61,-0.7l-0.27,-1.52l-1.31,-1.45l-0.38,0.26l-0.25,0.92l0.66,1.82l-0.66,-1.68l-0.14,-1.7l1.71,-1.2l0.21,-1.28l-0.71,-0.22l-0.54,-0.77l-0.8,-0.12l0.31,1.86l-0.42,0.47l-0.54,-0.68l-1.44,-5.09l-1.12,-1.55l-0.55,-2.53l-1.35,-1.65l-0.27,-1.2l-2.36,-4.94l0.51,-0.56l-0.14,-0.64l-0.79,-0.34l-0.43,-1.07l-1.9,-7.73l-3.14,-7.29l0.34,-0.6l-0.24,-0.72l-0.61,-0.15l-1.63,-2.78l-1.62,-0.56l-2.42,-6.52l-0.81,-1.13l-3.92,-4.33l-0.84,-0.02l-1.08,-1.51l2.17,0.47l0.48,-0.39l-0.52,-0.81l0.19,-1.18l-0.45,-0.08l-1.02,0.74l-0.61,0.02l-1.17,-1.08l1.13,-0.11l0.25,-0.56l-0.73,-0.93l0.1,-1.21l0.73,-0.02l1.61,-0.9l0.41,-0.84l-0.76,-0.53l-0.97,0.34l-0.9,-0.22l-1.68,1.27l-0.82,-0.2l-0.83,0.31l-0.37,2.56l-1.86,-5.57l0.26,-1.27l-0.48,-0.39l-0.64,0.24l-0.68,-1.84l-3.92,-7.22l-2.86,-6.72ZM250.45,836.37l-0.0,-0.01l0.01,-0.0l-0.0,0.02ZM249.88,834.43l-0.08,-0.57l-0.05,-0.2l0.67,0.8l-0.54,-0.03Z\", \"name\": \"Kerala\"}}, \"height\": 932.9661457393942, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-uk-mill-en.js",
    "content": "$.fn.vectorMap('addMap', 'uk_mill_en',{\"insets\": [{\"width\": 900.0, \"top\": 0, \"height\": 1327.4309048516907, \"bbox\": [{\"y\": -7779500.901678679, \"x\": -960179.9157639837}, {\"y\": -6072371.201528781, \"x\": 197256.3956247182}], \"left\": 0}], \"paths\": {\"UKN\": {\"path\": \"M39.46,798.85l8.25,-2.8l5.96,-6.64l9.96,1.3l3.45,-1.11l8.56,-6.56l3.51,-0.94l-0.25,-3.18l-1.21,-0.15l-2.61,1.29l-5.14,-2.93l-2.73,0.92l-1.52,-2.07l-3.56,-1.42l-0.56,-0.97l0.6,-1.63l-1.48,-1.25l3.59,-1.44l2.96,-2.36l6.42,2.99l3.07,-0.2l7.41,-4.43l2.83,0.63l2.66,-0.62l1.64,0.71l2.19,-0.38l0.28,-0.62l-0.75,-1.38l0.67,-4.34l6.21,-6.21l1.42,-2.19l0.96,-2.8l-0.08,-5.54l3.12,-2.24l-0.29,-4.27l0.9,-0.93l-0.18,-1.28l3.12,-3.61l0.92,-0.59l5.44,-0.67l3.21,-2.62l-0.61,1.63l0.36,0.54l5.36,-0.89l5.25,1.71l6.06,0.0l4.49,-3.7l0.6,-3.58l3.06,-4.12l0.97,-6.8l0.99,-0.06l5.55,2.56l11.2,-0.44l9.94,-3.68l6.12,-0.41l4.44,-3.54l3.53,-0.91l5.18,2.01l3.42,-1.7l2.01,0.4l9.83,4.15l7.0,-1.63l3.29,0.48l1.58,0.6l4.59,4.03l0.77,1.12l-0.29,6.56l-1.8,4.86l0.97,1.25l4.35,0.24l2.19,1.1l0.54,0.93l-0.15,2.0l-1.54,4.42l0.16,1.04l5.03,1.57l3.67,3.49l1.47,3.63l4.17,4.24l1.94,6.69l4.71,1.94l1.98,2.41l0.85,0.15l0.34,-0.61l-1.57,-2.58l-5.34,-4.59l1.03,-1.54l2.26,0.5l4.1,3.68l1.01,3.65l-0.23,3.21l-1.17,2.52l-1.82,1.64l-10.0,3.25l-4.06,3.56l-3.2,4.77l1.06,1.06l0.62,2.57l1.73,0.25l4.79,-5.33l7.68,-3.6l2.67,1.24l1.9,0.14l10.3,-1.35l1.51,2.02l1.61,0.61l1.88,7.01l1.02,1.73l2.01,1.6l0.89,6.33l3.14,3.78l-0.45,1.04l0.32,1.57l-2.62,4.26l0.57,2.14l-0.29,1.78l-2.41,2.7l0.93,1.35l-1.92,2.02l-0.84,0.13l-0.82,-0.68l-1.63,-3.92l-1.16,-0.62l-1.39,-2.18l0.38,-2.39l1.94,-2.0l0.53,-1.99l-0.31,-3.85l-1.0,-2.93l-1.58,-2.12l-6.02,-4.64l-2.41,-1.13l-2.76,-0.15l-0.42,1.22l0.42,2.18l-1.58,2.04l3.96,1.83l3.32,0.35l-3.25,1.12l0.12,0.65l2.31,1.05l-0.33,2.61l0.58,1.2l1.01,0.41l-0.54,1.15l0.54,1.02l-2.94,6.99l-3.08,2.01l-1.05,1.82l11.4,-3.6l2.27,1.95l0.81,4.31l-1.01,3.26l-4.99,4.95l-1.71,-0.02l-0.82,2.56l-1.06,0.48l-1.93,-1.94l-5.03,-0.35l-3.83,0.31l-7.16,1.91l-0.8,1.84l-0.04,6.73l-2.12,6.57l-1.47,1.49l-3.56,1.47l-6.38,4.58l-4.34,0.63l-2.5,-0.94l2.09,-0.93l0.05,-0.78l-7.59,-2.07l-1.15,-2.18l-6.73,-1.43l-0.77,0.63l-1.26,-0.74l-3.56,0.85l-2.42,-1.49l-1.6,1.93l0.1,2.63l-0.68,1.09l-4.62,0.92l-1.59,-1.55l-2.39,0.09l-7.43,2.22l-2.72,-0.4l-1.79,1.75l-0.99,-0.43l-3.35,-2.97l1.22,-2.62l0.11,-1.36l-0.81,-1.35l1.73,-1.8l0.9,-2.32l-0.6,-2.55l-4.81,-3.64l-1.38,-0.11l-2.24,1.77l-4.37,-2.22l-3.03,-3.38l-1.28,-3.45l-3.1,-1.71l1.58,-1.89l-0.18,-1.86l-1.94,-4.22l-2.22,-0.88l-1.49,-2.86l-5.37,-3.63l-3.18,-1.28l-2.94,0.29l-2.53,2.0l-4.23,5.38l-2.69,1.64l-2.06,-0.21l-1.04,0.57l0.57,2.31l-0.88,1.06l-1.03,-0.03l-0.1,1.74l2.8,1.33l-0.25,1.75l2.71,1.86l-0.99,1.4l0.47,1.64l-6.21,1.8l-1.87,1.3l-1.15,2.12l1.25,1.56l-1.4,0.57l-0.07,2.62l-1.27,1.56l-0.87,0.27l0.42,-4.15l-0.85,-0.77l-3.48,2.23l1.71,3.79l-4.86,-1.07l-1.46,0.21l-0.78,-1.43l-1.41,-0.31l0.17,-1.14l-2.4,-0.09l-3.49,2.24l-1.71,0.28l-9.1,-1.73l-0.82,-0.49l-1.16,-2.88l-6.24,-3.79l-6.89,-0.02l-4.65,-0.51l-1.52,-0.76l-1.03,-1.65l-0.34,-5.17l-0.76,-2.23l-1.44,-0.84l-4.67,-0.82l-2.48,-2.92l-1.82,-3.72l-2.8,-0.23l-2.05,-0.88l-7.71,-7.68l-1.89,-3.34ZM210.69,701.07l0.25,-1.43l-2.0,-1.36l-5.47,-0.16l3.05,-1.05l5.02,0.79l0.16,0.97l-1.01,2.25Z\", \"name\": \"Northern Ireland\"}, \"UKM\": {\"path\": \"M671.7,36.17l-1.39,-0.25l-1.78,-2.0l-2.82,-4.84l9.63,0.0l0.64,0.26l0.55,2.41l2.22,-0.87l1.84,0.8l-0.18,2.09l-1.88,1.33l-4.69,-1.5l-2.62,0.03l-0.39,1.37l0.88,1.16ZM663.73,17.05l1.1,0.14l0.5,-1.26l-0.68,-3.15l1.29,-0.56l0.87,-1.95l-0.01,-1.98l-1.09,-1.74l2.92,-1.85l1.18,-1.52l0.7,-2.4l1.24,0.77l0.31,1.59l-0.31,1.26l-2.61,2.62l0.69,0.99l3.18,-1.87l2.43,-5.51l4.06,1.58l0.78,2.01l-2.06,0.81l-0.0,0.73l1.65,0.76l-3.52,2.28l0.45,2.48l-1.7,0.41l1.7,1.07l0.0,0.57l-4.1,3.43l0.54,1.99l1.71,2.5l-1.55,0.88l-2.15,-1.05l-6.79,-0.02l-1.04,-0.58l0.31,-3.42ZM661.91,65.94l-3.17,0.75l-1.1,-0.53l2.04,-3.24l1.95,-0.44l1.38,-1.09l4.25,-0.69l-5.36,5.23ZM652.83,15.13l0.83,2.02l0.7,0.07l0.92,-1.39l4.91,-0.17l-0.65,3.2l1.04,0.94l-0.73,1.24l0.02,1.48l1.46,2.55l-0.87,2.07l-3.92,-3.09l-2.29,-0.0l4.02,6.26l-1.83,0.68l-2.21,-0.87l-0.59,0.45l0.56,1.65l1.19,0.91l2.17,0.44l-0.25,0.75l1.35,1.2l0.02,1.28l-0.84,1.05l-1.53,0.31l-0.27,0.59l1.27,2.21l0.5,2.48l-0.57,1.51l-4.11,-0.56l-1.91,-1.27l-0.94,1.65l0.92,1.25l-2.32,-0.4l-1.87,-1.48l-1.13,-2.73l-1.05,-12.17l0.66,-2.47l2.17,-0.32l-0.2,2.11l0.95,1.55l1.48,1.03l1.32,-0.3l-1.5,-6.19l1.02,-2.66l-0.74,-2.2l1.35,-3.56l1.49,-1.1ZM615.13,86.2l-0.37,-0.81l0.44,-1.12l4.56,-1.59l0.06,-0.72l-3.11,-3.29l-0.69,0.11l-1.7,3.79l-0.54,0.1l-1.35,-2.38l-3.9,1.62l-2.43,0.03l-0.77,-1.71l-2.97,-1.04l-1.47,-6.22l2.36,-1.87l3.13,-1.01l1.26,0.1l3.15,2.64l1.73,0.04l-0.01,-1.57l2.25,0.66l0.51,-1.27l-0.65,-0.52l3.55,-0.34l0.93,0.81l0.1,3.7l0.52,0.37l1.92,-1.05l-0.8,-2.57l1.14,0.0l0.36,-0.57l-0.47,-1.43l1.54,-0.52l2.07,0.51l1.76,1.61l0.86,2.79l0.69,0.13l2.38,-2.63l-0.03,-0.61l-2.15,-1.65l1.39,-2.71l2.27,0.56l0.35,-0.64l-0.74,-0.99l5.59,-0.45l-2.28,-1.56l-4.44,-1.34l-0.48,-2.61l-0.66,-0.23l-2.39,1.82l-1.44,-0.93l-0.27,-1.07l1.22,-3.09l-4.7,-1.13l0.06,-3.74l-1.03,-4.51l-3.07,4.49l-0.95,-0.32l-0.21,-0.73l1.48,-1.84l-0.26,-0.71l-4.34,0.3l-1.31,-1.1l-2.38,1.92l-2.64,-0.14l0.3,-1.69l1.31,-1.96l2.85,-0.24l0.66,-3.58l1.67,-2.06l0.77,-0.09l2.15,4.07l2.87,2.21l3.4,0.94l3.12,-1.31l0.05,-0.7l-0.97,-0.6l-3.56,-0.35l-2.28,-2.31l-0.95,-0.24l1.83,-3.01l3.6,-1.73l-0.84,-1.41l0.77,-1.36l-0.24,-0.99l1.63,-0.6l2.21,0.25l4.91,2.16l0.49,-1.45l-1.34,-1.13l1.59,-3.12l0.59,1.79l-0.16,3.65l-1.34,0.97l0.61,2.87l-2.93,3.98l0.34,0.61l0.99,0.0l-1.38,0.5l1.61,1.28l-1.59,3.91l1.26,0.41l2.18,-1.14l-1.36,2.66l0.26,1.57l-1.63,0.68l-2.01,4.45l-1.67,1.39l0.36,1.36l2.35,-0.04l2.0,-0.99l0.08,-2.46l2.08,-1.18l5.41,-0.74l0.14,-0.74l-4.97,-3.23l1.93,-1.07l0.12,1.93l0.68,0.26l3.42,-4.16l2.26,1.69l-0.47,1.22l2.63,2.37l0.32,1.25l-0.52,0.8l0.78,0.97l-2.47,-0.42l-3.28,2.6l-0.1,0.63l2.02,0.1l0.56,1.19l2.77,-1.21l0.65,0.34l0.55,2.67l2.78,-2.01l1.36,-3.19l0.54,1.56l2.4,-3.72l2.4,-0.71l-0.88,1.59l-6.65,6.53l0.07,1.29l1.22,0.46l1.94,-2.24l1.77,-0.56l0.39,1.07l-0.64,3.08l-8.59,1.42l-0.12,0.7l1.78,1.34l4.46,0.87l1.68,0.99l-5.11,3.85l0.54,2.36l1.37,-0.41l1.94,0.49l-4.32,2.61l-1.18,-0.26l-1.53,-2.56l-1.13,-0.23l-0.99,1.17l1.2,2.37l-2.96,1.3l0.4,1.21l2.76,0.0l-1.26,3.57l2.99,-2.38l-2.1,3.64l-0.27,2.38l3.38,-2.02l0.51,0.34l-0.9,2.48l2.77,1.92l-2.02,0.0l-0.4,1.25l-0.63,-0.08l-1.72,1.47l-1.77,0.29l1.14,1.23l-0.28,0.75l-2.06,0.97l0.32,1.2l1.79,0.62l-1.13,1.5l0.82,1.72l2.28,1.47l-0.31,1.22l-1.11,0.85l-2.68,-0.19l-0.51,0.47l2.25,5.38l-0.52,1.03l-3.58,-1.39l-0.58,0.41l0.18,5.27l-1.53,3.55l-0.84,-0.47l-0.14,0.5l0.93,2.77l-0.93,3.08l1.13,2.16l-0.62,1.01l-1.59,-2.28l-1.35,1.08l0.89,-1.81l-0.17,-1.21l-1.61,-0.98l-2.61,0.5l-1.17,-0.48l-0.8,-1.22l1.34,-1.44l-0.38,-2.23l0.58,-0.84l2.94,-1.0l-0.13,-1.02l-2.18,-2.04l1.91,0.0l0.39,-0.48l-0.47,-2.17l2.22,-4.17l1.3,-6.12l2.17,-5.11l-0.43,-3.69l-0.55,-0.73l-0.98,-0.05l-0.29,-0.98l1.64,-3.63l-1.26,-0.54l-1.77,1.13l-0.63,-0.2l1.48,-4.29l2.21,-2.83l0.16,-1.21l-2.35,-0.41l-3.3,4.82l-2.29,-4.62l-1.97,-1.43l-2.83,-0.53l-0.47,1.36l3.15,2.04l2.14,3.25l-0.36,1.13l-2.09,-1.47l-1.28,-0.11l-0.9,4.19l-1.13,-1.46l-1.05,0.74l-1.28,3.68l-3.71,-1.74l-2.36,-1.93ZM653.14,86.91l0.42,2.38l1.68,0.08l-0.18,1.78l-2.28,5.27l-2.93,-2.03l0.24,-4.04l-1.41,-1.77l0.05,-0.89l3.02,0.39l1.14,-1.46l0.28,0.31ZM629.03,103.58l0.15,-0.16l-0.1,0.12l-0.05,0.04ZM629.47,103.08l1.66,-4.82l-0.71,-1.57l1.87,-0.73l-0.66,3.0l0.68,0.36l0.74,-0.63l-0.23,1.72l-1.69,3.68l0.28,-3.65l-0.77,0.1l-1.17,2.54ZM607.04,168.59l-0.29,1.2l1.18,0.78l-3.55,2.05l-0.37,-1.39l0.6,-1.92l1.44,-1.18l3.1,-0.5l-2.1,0.97ZM242.7,441.55l1.02,-1.11l-1.16,-1.99l-0.03,-1.53l0.98,-2.08l-3.94,-1.21l-1.14,-4.81l1.73,-3.66l0.35,-4.1l1.44,-0.52l-0.52,-2.17l2.45,-0.13l1.4,0.72l4.68,3.75l1.47,0.85l0.87,-0.31l1.37,1.61l4.45,2.15l0.41,-0.62l-0.94,-2.0l5.66,-0.77l5.61,0.43l0.72,-1.06l-2.78,-2.23l-4.07,-0.76l-3.95,0.42l-2.32,1.52l-2.39,-2.19l0.92,-1.44l-0.29,-0.6l-2.73,-0.4l-4.11,-6.28l-3.71,-1.12l-0.37,-1.25l0.43,-1.3l1.68,-1.46l-0.36,-2.11l4.33,-1.35l2.43,2.12l1.39,-0.02l1.91,-2.55l-4.21,-3.51l-7.05,-1.28l0.27,-6.85l-0.84,-3.96l1.74,-3.34l3.12,-1.33l2.17,-0.02l3.99,1.46l-0.01,4.01l1.26,4.46l2.11,2.43l1.59,0.6l1.78,-0.3l-1.49,-2.49l2.77,0.92l0.57,-0.45l-0.54,-2.37l0.44,-3.58l-1.29,-2.05l-4.19,-3.56l0.73,-1.02l-1.04,-1.06l3.14,-3.7l1.95,1.45l2.91,0.04l-0.32,3.31l2.59,2.62l3.54,1.47l2.89,0.3l1.95,-5.75l0.67,-1.09l0.81,0.01l3.83,1.3l3.64,3.03l2.92,1.41l6.76,1.78l-2.33,-3.07l-2.58,-0.94l-3.86,-3.08l-6.02,-2.32l-0.09,-1.6l1.49,0.61l0.79,-1.34l3.53,3.26l2.03,0.91l3.69,-0.82l4.79,2.11l3.13,2.39l3.66,1.33l2.43,3.36l2.39,0.92l-2.37,-5.32l-8.67,-5.88l-1.93,-0.43l1.62,-0.35l0.76,-1.2l-1.08,-3.32l-7.66,-2.61l-3.49,-3.43l-1.8,-0.36l0.26,-0.75l-1.49,-1.55l-4.69,-0.33l0.91,-2.22l-2.75,-4.0l1.26,-1.31l2.9,0.64l2.53,3.28l1.75,-1.11l3.98,0.53l2.17,-2.48l-0.81,-3.74l0.84,-0.4l0.0,-0.86l-1.35,-0.95l4.36,-1.62l-0.41,-1.34l-2.82,0.1l-2.0,-0.66l0.32,-0.97l-2.73,-1.71l0.52,-2.26l-2.1,-0.91l-3.84,-4.6l0.05,-1.65l1.0,-0.26l7.2,2.92l6.68,-2.58l4.01,1.15l3.47,-2.4l5.21,2.55l5.63,-0.0l6.4,3.42l-0.89,-1.93l-2.83,-1.88l3.04,-0.71l1.17,-0.65l-0.13,-0.75l-7.27,-0.86l-1.9,1.52l-1.4,-0.03l-3.93,-2.08l-3.34,-3.54l-2.1,-2.68l-0.97,-2.8l1.23,0.0l0.34,-0.62l-0.77,-2.28l1.42,-2.62l0.02,-2.13l7.06,3.39l4.2,-0.35l-3.17,-2.57l0.17,-1.12l-0.59,-0.94l-3.49,0.8l1.13,-0.59l0.0,-0.86l-1.4,-0.85l4.05,-1.84l5.04,1.96l-9.46,-6.85l-0.01,-2.05l0.67,-1.37l4.54,-2.08l1.47,-1.27l1.02,-1.94l-0.43,-0.59l1.4,-6.77l1.22,-1.13l10.89,1.87l1.93,0.98l1.38,1.38l1.22,4.41l-1.1,4.35l2.08,-0.94l0.82,-1.29l0.55,-4.5l1.2,-1.69l-0.2,-1.45l3.47,3.27l5.65,2.62l-0.58,2.52l-4.11,3.4l-4.03,7.29l0.41,0.57l1.82,-0.29l5.86,-4.72l0.76,-2.08l4.65,-2.69l2.39,-6.26l1.87,-0.64l7.16,1.76l4.01,2.3l-0.03,2.37l-1.95,1.78l-1.28,2.3l-2.66,5.37l0.48,0.57l3.13,-1.75l2.37,-2.68l0.08,-1.64l4.33,-3.49l3.25,-1.76l3.0,-0.91l1.57,0.4l2.68,1.92l1.96,0.42l0.33,-0.71l-0.76,-0.58l1.87,-2.17l3.59,0.72l1.0,-0.42l0.79,-1.72l0.74,-0.29l5.99,0.44l1.1,-0.59l2.46,-3.33l0.59,-0.11l2.17,2.88l2.17,-0.23l7.46,0.94l7.5,-0.96l3.8,-1.39l5.91,-3.45l3.26,-1.2l5.32,-0.78l3.93,0.52l-0.61,1.06l2.36,1.58l7.32,-1.49l4.7,1.65l2.51,0.0l1.51,-2.77l-0.24,-0.54l-2.93,-1.32l-2.08,-2.63l2.87,-2.37l1.11,0.15l0.78,2.72l1.02,0.78l11.73,-1.64l4.6,2.51l8.54,-0.86l2.49,0.84l-2.5,6.34l-2.98,4.31l-2.93,2.56l-1.02,2.56l-0.04,2.19l0.98,1.73l2.21,1.07l2.7,-0.66l0.69,1.71l-0.32,0.93l-1.72,1.08l-0.79,4.39l-3.7,5.59l-7.76,7.95l-14.27,5.19l-4.6,3.6l-3.11,5.4l-3.57,3.11l-18.97,12.07l-6.49,2.59l-1.69,1.35l-2.06,4.74l-2.74,1.44l-2.81,0.53l-6.36,3.39l-1.15,2.86l-0.89,-0.41l0.18,-1.07l-6.37,-1.75l-0.48,0.84l1.18,2.4l1.48,0.82l3.82,0.55l2.13,2.65l-1.67,2.22l-0.18,2.43l-4.75,-0.77l-3.12,2.57l-2.22,-0.05l-7.38,-2.5l-7.0,1.4l-6.19,-5.13l-2.31,-0.36l4.6,5.81l3.0,1.93l3.52,0.55l5.05,-1.5l4.98,3.61l1.61,0.01l0.09,-1.73l4.77,2.55l3.15,0.67l5.04,-3.01l2.5,0.45l1.22,1.25l-0.98,1.35l0.24,0.63l3.03,0.61l3.32,-1.19l3.1,-2.28l3.66,-3.86l0.67,0.09l0.43,0.91l-0.82,2.82l-17.02,16.72l-2.58,-0.16l-0.31,-0.89l0.88,-2.31l-2.67,-1.81l-3.16,0.94l-7.69,5.04l-7.79,1.33l-3.08,-0.18l-1.53,3.31l-2.46,1.17l-6.45,5.3l-1.5,3.31l1.01,0.57l3.82,-1.59l4.43,-4.6l3.88,-1.85l3.37,-2.72l3.59,-1.45l1.39,0.24l1.29,1.17l6.33,0.72l2.7,-1.84l4.57,-1.92l0.28,1.06l-1.67,2.41l-5.04,3.99l-3.05,3.79l0.56,1.63l-3.12,0.24l-1.8,0.8l-1.58,1.57l0.43,1.19l-1.92,-0.45l-5.13,0.4l0.41,1.33l4.18,0.52l-3.29,4.67l0.2,0.68l4.92,0.71l1.95,-0.81l2.18,-2.46l2.68,-0.5l2.94,-2.85l4.09,-1.52l0.18,-0.61l-0.99,-1.37l-2.2,-1.58l9.0,-0.92l8.28,0.63l2.79,-0.65l13.27,-7.68l4.34,-0.78l-1.3,2.37l1.38,0.78l3.64,-0.73l0.28,-0.58l-1.34,-2.52l4.07,0.8l1.9,-0.31l2.78,-2.25l0.82,-1.59l-0.4,-1.56l0.64,-0.97l2.58,0.44l4.38,-1.69l10.64,0.36l6.46,3.3l11.38,3.07l3.88,0.12l3.7,-0.92l6.66,-3.36l13.53,0.0l2.3,1.77l2.39,-0.73l1.18,0.72l2.82,-1.07l7.28,1.97l2.64,-0.09l1.67,1.7l2.41,-1.7l5.41,1.74l0.95,-0.86l2.13,0.88l3.3,-1.75l3.08,0.85l1.3,-1.91l1.31,-0.66l7.44,2.54l2.38,-0.42l5.12,-3.01l10.48,0.01l2.4,3.42l3.44,-0.85l1.47,2.11l7.26,6.34l1.52,6.47l1.32,2.02l-0.28,2.43l2.74,3.02l-1.2,1.15l0.03,1.32l1.64,1.03l-5.76,5.42l-1.55,2.29l-0.26,1.72l-8.92,6.52l-2.35,2.87l-5.58,11.53l-2.1,6.54l-0.25,4.95l1.88,1.97l-9.14,11.98l-2.74,4.61l-1.14,4.64l1.18,4.02l-1.97,2.24l-0.89,2.87l-4.19,3.18l-4.41,5.52l-1.34,1.26l-4.83,2.43l-3.11,2.57l-1.28,2.17l-0.94,5.33l-3.08,4.55l0.54,3.45l-1.99,2.12l-0.87,2.06l-9.32,5.8l-1.58,2.65l-5.1,2.33l-2.4,4.13l-2.99,-0.84l-25.7,2.97l-6.42,3.08l-9.02,7.25l-3.45,1.14l-4.08,-0.77l1.09,1.63l1.7,0.57l5.69,-0.39l24.34,-9.33l1.82,-2.04l3.61,-1.13l3.07,1.95l2.87,0.18l0.87,1.28l-0.46,4.23l-2.54,3.4l2.32,0.26l0.93,2.49l2.25,0.68l0.82,0.94l7.85,0.48l1.78,0.73l6.6,4.89l-4.46,3.46l-1.6,2.42l-6.15,1.5l-5.45,2.96l-3.82,0.14l-5.42,-2.23l-6.34,0.41l-1.77,2.12l-4.58,2.59l-4.76,4.32l-3.26,1.25l-3.09,7.15l-1.1,0.6l-6.1,0.28l-8.12,3.51l-6.62,0.27l-13.97,-3.27l-7.74,0.11l-3.24,-0.87l-3.0,-1.69l-6.23,-4.91l-2.36,0.31l0.21,1.11l6.56,4.13l3.33,4.95l3.18,0.21l1.66,2.19l1.22,0.32l6.71,-0.83l14.85,3.32l6.35,-0.52l2.55,2.02l15.63,1.01l2.55,2.48l1.28,0.25l5.62,-0.46l6.65,-2.34l2.11,-1.47l2.79,-3.26l2.01,-0.19l0.34,-0.52l-0.92,-2.3l3.78,-3.27l1.61,-0.57l14.38,0.83l1.51,0.54l3.77,3.35l-0.84,2.84l3.46,0.04l1.18,0.68l2.04,-1.48l4.58,2.86l3.34,0.86l5.44,3.64l3.79,1.64l14.57,2.42l0.9,3.07l2.53,0.98l1.56,1.41l4.62,7.25l-4.5,1.79l-1.19,4.06l-6.5,4.51l-1.24,2.29l-5.23,6.15l-6.48,0.82l-1.16,1.52l0.42,1.59l2.04,1.23l1.91,2.74l1.91,4.81l3.44,4.92l0.37,2.25l2.44,2.97l-0.32,1.63l-3.61,2.74l-3.53,0.81l-2.02,1.58l-2.59,0.96l-2.94,4.29l-2.21,0.83l-2.13,-1.14l-3.59,0.16l-8.71,5.98l-6.32,5.93l-0.27,1.52l0.61,1.49l-0.51,1.66l-3.11,1.76l-4.89,5.39l-8.96,3.86l-5.29,6.24l-3.88,1.85l-2.15,3.22l-1.75,0.11l-3.8,-1.5l-0.89,0.4l-0.64,4.34l-1.47,3.93l-7.0,1.52l-27.49,-1.64l-4.04,-1.28l-1.46,0.41l0.17,1.04l-0.99,0.37l-3.6,-2.1l-0.61,0.2l-1.13,3.28l1.26,6.39l-1.02,3.6l-1.22,0.57l-10.31,-0.34l-2.0,2.5l-5.8,-0.74l-0.05,-1.77l-1.01,-0.47l-2.29,2.31l0.28,1.75l-1.43,0.84l-0.04,0.65l2.53,2.04l-4.89,1.89l-6.72,4.09l-3.99,0.44l-2.29,-0.13l-0.26,-0.89l-0.78,-0.3l0.61,-3.73l-0.19,-1.22l-1.22,-0.96l-0.63,-0.3l-1.27,0.89l-1.11,1.85l-0.34,2.19l0.65,1.63l-2.73,0.38l-4.23,-2.21l-2.89,-3.87l0.72,-4.65l-0.57,-0.42l-3.44,2.82l-2.37,0.38l-7.3,-3.06l-2.52,-4.64l-1.99,-0.35l-1.3,1.88l-0.86,2.89l0.82,3.04l1.29,2.64l3.82,1.05l1.14,2.28l-1.15,2.77l1.14,1.88l-1.01,1.78l0.7,4.67l-2.58,2.29l-3.61,-0.85l-3.05,-1.65l-3.1,0.04l-5.6,-6.54l-2.99,-2.36l-10.2,-5.12l-5.65,-1.76l-1.78,-3.47l-1.99,-0.67l-3.42,0.07l-2.15,0.78l-3.75,2.76l-2.14,2.67l-0.52,1.56l0.65,3.48l1.58,1.85l2.91,6.87l2.46,1.77l-0.46,4.13l0.77,1.93l-6.37,-2.17l-1.16,-2.4l0.07,-1.76l0.92,-1.0l-0.91,-1.9l0.0,-2.05l-2.6,-0.66l-1.39,-4.38l-2.62,-1.37l-8.14,-7.9l-2.45,-3.56l-1.56,-4.17l-0.44,-4.71l0.8,-6.29l1.0,-0.77l2.92,-0.14l0.77,-1.4l3.36,4.97l0.82,6.7l2.83,2.52l1.86,0.11l1.59,-1.38l0.64,-2.13l-3.1,-5.0l-2.22,-5.92l0.22,-3.34l2.48,-5.58l0.93,-4.6l5.2,-3.19l5.59,-6.07l1.42,-0.62l0.23,-2.32l2.31,-5.15l-0.13,-3.93l0.53,-1.63l5.12,-4.61l2.08,-5.37l2.68,-1.95l5.87,-2.27l2.18,-2.58l0.74,-3.3l-0.89,-3.29l-2.08,-2.1l-2.73,-0.8l1.5,-2.04l-0.5,-2.87l-1.87,-2.53l-2.72,-1.83l-4.73,-1.66l-3.18,-0.31l0.28,-2.23l-4.99,-2.62l-4.15,-3.62l3.52,-2.98l1.46,-2.95l-0.39,-4.22l-1.48,-3.7l-0.85,-8.62l0.51,-3.14l1.16,-2.0l1.85,-1.26l4.17,-1.13l6.61,2.17l2.47,-0.12l1.83,0.88l14.43,1.8l2.55,-1.59l-13.11,-2.51l-3.65,-1.84l-4.37,-4.41l-3.61,-1.14l-1.5,-1.21l-2.27,-3.08l-1.15,-4.11l-1.6,-0.61l-0.92,1.34l0.61,2.85l4.13,5.01l0.87,1.98l-0.36,0.64l-1.36,0.21l-3.84,-0.66l-1.07,-3.63l-0.01,-5.54l3.33,-6.93l6.11,-7.81l0.47,-1.92l-1.0,-0.9l-2.25,1.98l-6.06,9.46l-1.46,0.06l-0.45,-0.67l0.13,-3.72l-1.33,-3.06l-1.39,-0.49l-1.55,1.22l2.85,11.0l-0.22,1.59l-1.13,0.57l-0.22,0.92l0.91,7.74l-0.72,0.3l-4.07,-1.29l-0.49,0.39l0.26,1.21l2.13,0.99l1.15,2.06l-0.28,1.57l-2.54,3.18l-1.86,4.96l-1.93,1.09l-2.55,-0.44l-1.24,-1.2l-2.5,-9.06l-5.08,-6.31l-1.51,1.44l4.63,8.56l0.6,2.36l-0.48,0.78l-6.87,-3.99l-0.69,-1.39l0.0,-2.45l-0.69,-0.28l-1.72,2.64l-1.11,3.78l-2.5,2.9l3.32,7.35l-7.54,-2.54l-0.74,-0.78l-0.66,-3.17l-2.02,-2.0l0.0,-3.25l1.23,-3.43l-1.17,-4.44l2.0,-1.82l9.37,-12.98l4.9,-1.63l3.76,-2.32l5.29,-7.92l8.89,-4.27l1.78,-3.86l-1.99,0.76l-3.23,2.83l-6.47,1.36l-1.4,1.06l-3.75,6.58l-10.27,5.54l-7.23,8.73l-2.94,0.8l-1.01,3.76l-1.05,1.34l-1.65,0.4l-3.37,-0.47l-0.26,-2.2l-1.38,0.23l-0.95,8.92l2.19,1.29l1.5,5.7l1.04,0.89l-0.59,1.39l0.92,0.74l-0.79,1.22l4.76,4.09l2.09,2.8l0.73,2.91l-0.5,1.44l-5.32,2.21l-4.08,3.65l-2.47,4.11l-0.63,4.05l-1.89,1.51l0.66,1.39l-0.01,2.98l1.85,1.03l0.5,0.92l-0.41,1.23l-2.46,1.59l0.52,2.11l-2.3,3.97l-0.11,3.69l-1.07,0.44l-3.2,5.56l-2.16,1.31l0.45,1.15l1.71,0.12l1.45,1.44l2.33,3.91l-0.71,1.48l-4.18,4.32l-3.5,1.8l-1.93,0.31l-3.53,-0.89l-3.94,1.73l-3.74,-0.44l-0.8,-1.29l-1.18,-7.75l0.42,-2.16l2.34,-1.57l4.27,-4.63l-0.54,-7.94l1.19,-3.79l-1.17,-2.43l4.19,-9.17l0.34,-2.43l-0.85,-1.6l4.39,-2.97l1.31,-3.22l2.67,-3.74l3.61,-1.59l3.05,-2.32l2.7,-3.2l1.67,-3.76l-0.63,-0.46l-8.36,7.54l-3.96,2.29l-0.48,0.02l0.12,-1.54l-3.43,-1.24l-1.08,-1.09l-1.06,-5.61l3.52,-4.25l1.1,-2.59l4.17,-4.27l-2.43,0.65l-3.03,2.79l-3.76,2.19l-0.9,-0.59l-0.66,-2.44l9.38,-11.58l1.19,-3.75l-1.41,-0.37l-3.62,1.99l-0.71,2.42l-3.65,3.36l-0.06,2.88l-1.5,2.23l-0.58,-0.56l0.93,-4.65l3.11,-4.92l6.49,-7.49l0.62,-1.46l2.95,1.33l1.12,-0.25l0.09,-0.98l-1.78,-1.8l-0.64,-2.68l3.07,-4.14l1.15,-2.83l-0.47,-0.51l-2.82,0.7l-4.82,4.74l1.43,-3.98l3.06,-4.23l-0.61,-1.82l0.84,-1.03l4.45,-1.54l0.4,-1.19l-0.81,-1.33l-1.39,-0.42l-3.68,0.94l-2.83,1.67l-0.18,-2.0l1.98,-7.09l2.18,-2.7l1.57,0.68l2.34,-0.21l4.7,-1.79l-0.42,-1.16l-5.82,1.1l-1.33,-0.24l2.13,-4.42l2.72,-1.5l-0.17,-1.22l1.97,-2.17l2.75,-1.07l8.61,-0.6l6.94,1.55l3.2,-0.62l2.39,-1.64l5.49,-5.91l2.87,-5.07l1.8,-1.98l-0.45,-0.64l-2.09,0.98l-3.36,5.82l-3.49,2.48l-2.89,3.37l-3.52,0.33l-9.16,-1.68l-2.51,1.64l-1.04,-0.59l-1.37,-4.55l-0.53,-0.26l-1.33,0.55l-2.5,3.46l-0.53,-0.34l3.25,-6.81l1.72,1.32l4.33,0.61l8.01,-3.92l2.1,-1.8l-0.48,-0.62l-2.86,1.39l-3.02,0.18l-5.2,2.65l-3.11,-1.69l4.41,-6.98l4.24,-3.3l1.17,-1.67l-1.6,-1.81l2.39,-1.52l3.46,0.03l2.44,-1.73l5.46,0.91l1.98,-0.41l3.44,-1.79l7.04,-1.3l1.67,-1.3l-14.61,2.2l-6.38,-2.42l1.29,-2.51l7.46,-7.1l1.46,-2.46l-0.57,-0.53l-5.13,3.6l-1.99,2.46l-2.68,1.03l-0.93,3.19l-2.13,2.69l-3.49,0.78l-0.93,1.15l-1.86,0.61l-4.1,4.61l-3.97,1.5l-1.34,2.32l-2.9,1.37l-10.11,10.35l-6.15,3.84l-1.69,-2.03l-3.97,-1.14l-2.2,-1.49l1.52,-2.77l-0.21,-1.76l-0.94,0.13l-3.08,3.36l-4.95,-0.83l-12.76,-8.3l-0.32,-2.45l1.82,-1.07l4.23,-0.23l2.9,0.47l5.62,2.83l0.53,-1.48l-2.75,-1.98l-0.02,-0.81l8.88,-4.7l1.95,-0.18l7.72,2.59l7.21,-0.8l1.93,-1.0l-0.23,-0.75l-7.99,0.84l-1.79,-0.25l-4.39,-2.19l-3.56,-0.75l-9.65,4.12l-4.01,0.74l-4.15,-1.67l-6.06,0.35l-6.44,-1.38l-2.4,0.24l-3.11,2.05l-1.96,-0.33l-2.96,-1.67l-0.99,-1.9l0.04,-1.55l1.48,-0.12l2.98,-3.06l13.2,-1.12l5.34,-2.59l1.27,0.25l2.96,2.28l5.31,2.07l0.61,-0.37l-0.53,-2.74l-2.43,-1.54l1.65,0.0l1.82,0.88l3.44,-1.7l4.31,0.57l-6.67,-2.99l-1.48,-1.39l-0.02,-0.99l0.94,-0.75l8.85,-1.01l3.65,-1.26l2.92,-2.3l-0.11,-0.69l-3.04,-0.29l-1.61,0.74l-1.25,1.89l-1.49,-0.04l-2.83,-0.59l3.82,-3.64l-0.2,-0.7l-4.03,-0.57l-8.09,1.42l-2.1,-0.45l4.46,-0.77l-0.22,-1.28l-2.0,-1.44l1.29,-1.28l2.64,-7.77l3.76,-2.75l2.54,-0.71l2.04,0.31l3.44,4.12l2.82,1.38l2.97,0.35l4.7,-0.89l4.49,-2.04l-0.49,-1.23l-4.05,1.29l-1.38,-0.41l-1.81,1.0l-1.68,-0.38l-4.59,-2.02l0.42,-3.05l-2.1,-1.46l-3.65,0.79l-3.12,-1.65l-0.64,-0.63l1.11,-1.74l5.07,-5.34l3.45,0.13l2.47,-1.27l7.56,3.57l8.52,0.08l1.29,-1.29l3.27,0.48l0.99,-0.4l-0.22,-1.28l-1.94,-0.88l-10.28,1.75l-3.69,-3.29l-7.27,-1.77l-0.85,-1.01l0.53,-1.82l4.15,-5.1l-1.42,-2.31l1.81,-2.04l3.5,-1.76l2.79,-0.48l8.31,5.87l3.69,-0.81l-0.02,-1.63l-3.52,-0.65l-4.25,-4.1l2.91,-3.18l2.01,-0.62l0.01,-1.69l-2.47,-0.66l-3.51,3.29l-6.12,2.51l-6.7,-1.68l-5.31,0.86l-0.56,-1.25l2.22,-4.05l3.78,-2.45l1.28,1.55l2.37,-0.16l9.87,-3.68l4.02,-3.05l0.42,-3.98l-1.79,-0.19l-6.28,6.22l-2.08,1.24l-5.18,-1.16l1.89,-1.73l-1.53,-3.76l-2.0,1.2l-5.77,5.95l-2.05,0.81l-4.37,0.5l-1.74,-0.68l-1.27,-4.2ZM416.76,749.91l-0.38,1.31l-1.09,-0.91l0.66,-0.99l0.81,0.59ZM568.84,93.59l-1.01,1.14l-1.76,-0.59l-1.51,-1.07l-0.33,-1.23l1.69,-1.12l2.58,-0.06l0.34,2.93ZM513.82,213.94l0.37,-2.67l0.46,-0.51l1.99,-0.99l2.9,-3.51l2.67,-1.09l0.39,-1.78l-1.27,-1.52l6.45,-1.72l-4.61,3.82l0.18,0.68l1.51,0.73l3.86,-1.19l2.2,-1.86l3.91,-0.47l3.17,-3.11l0.93,3.31l-3.63,0.14l-1.78,0.68l-4.04,5.9l-0.81,-2.47l-1.7,0.23l-2.62,2.39l0.15,-1.26l-0.57,-0.36l-1.57,0.72l-1.56,-0.63l-4.8,4.65l-1.81,0.02l-0.37,1.88ZM517.81,224.99l-1.26,1.05l0.19,1.66l-1.34,0.37l-0.86,-0.62l1.47,-1.99l1.79,-0.47ZM519.02,224.7l0.87,-0.54l0.34,-1.82l-3.41,-3.11l3.22,-0.57l-0.49,1.12l0.36,0.59l2.62,-0.0l-1.07,1.95l1.1,1.48l1.44,0.34l2.06,-0.68l-0.48,1.76l2.52,1.81l-0.98,0.83l-5.08,1.08l-0.25,-2.53l-1.29,-1.45l-1.48,-0.26ZM473.1,221.12l2.94,2.29l3.35,-0.42l0.73,0.44l1.65,1.7l-1.12,0.47l-0.2,0.7l1.74,1.48l4.05,1.76l-0.5,0.69l0.64,0.93l-5.4,1.32l-0.7,1.96l-1.62,1.78l-3.37,1.66l-0.12,0.72l3.08,1.46l3.34,0.35l4.15,-3.23l3.36,2.24l3.48,-1.51l3.05,2.47l1.07,-0.37l-0.03,2.22l1.78,0.29l3.14,-1.66l3.34,-0.55l0.88,0.68l-0.43,0.97l-4.75,2.96l0.97,2.28l2.88,1.52l1.85,-0.32l0.29,-0.56l-1.43,-3.05l5.16,-1.76l1.4,1.22l0.08,3.13l-2.07,1.31l-4.53,1.24l-2.08,2.94l-1.18,0.71l-8.55,-2.85l-5.04,-7.13l-1.32,0.27l-2.42,2.19l-5.1,-0.28l-0.38,0.62l0.77,1.14l-3.08,0.35l-0.53,1.26l-1.91,-0.59l-5.05,0.65l-1.95,-1.46l-0.85,-2.63l0.26,-2.61l2.42,-4.24l-0.09,-1.04l-2.25,-3.59l-1.78,1.33l0.42,1.87l-1.25,-0.32l-1.57,0.63l1.41,4.47l-0.6,0.96l-2.18,2.13l-2.3,-0.67l-2.47,-3.1l-1.11,-4.05l1.94,-4.74l-0.52,-5.62l2.16,-3.56l3.7,-1.97l4.07,-0.61l6.28,0.76ZM506.85,207.27l-0.4,1.27l2.4,0.34l1.1,1.4l-2.86,3.98l0.26,3.92l0.68,1.04l1.38,0.46l-3.55,0.78l-1.53,-3.22l-2.4,-1.09l0.0,-1.62l1.62,0.3l2.19,-0.96l-0.5,-5.19l0.3,-1.11l1.32,-0.3ZM489.01,203.03l-1.38,1.35l-1.84,-0.86l-2.14,-4.74l-3.01,-2.17l3.98,0.47l1.6,-0.48l3.6,-3.36l1.21,0.73l-1.39,1.18l0.05,1.65l-2.23,0.38l0.31,1.26l7.79,2.07l2.08,3.97l2.89,0.93l0.59,0.91l-1.54,0.05l-2.32,1.98l0.95,-2.74l-4.27,-3.18l-2.42,-1.08l-2.49,-0.27l-0.44,0.4l0.41,1.56ZM486.82,263.79l3.02,-0.69l0.2,-1.29l-5.91,-0.51l6.77,-1.62l5.55,0.86l-0.09,1.01l-2.97,1.94l0.42,2.61l-0.99,1.07l1.26,3.67l-0.46,1.06l-1.56,0.79l-3.79,-3.1l1.12,-1.85l-2.57,-3.95ZM482.27,214.17l1.38,1.75l4.84,-0.53l2.0,0.41l-2.01,1.99l0.07,3.74l-2.22,0.64l-5.08,-0.69l-4.02,-2.98l-0.43,-2.02l1.36,-1.52l2.28,-0.87l1.82,0.07ZM465.25,252.46l4.23,5.0l-0.85,0.54l-0.19,1.28l1.91,0.77l1.1,1.4l-3.51,0.76l-1.84,1.08l-1.16,1.86l0.37,0.6l2.59,-0.14l5.08,-1.86l1.59,0.13l-1.54,1.81l-4.12,0.94l-7.84,-0.01l-2.41,-4.89l-2.61,-1.85l-1.69,-2.47l0.44,-1.54l-0.48,-1.12l-0.84,-0.35l-1.2,0.68l-2.42,-0.58l-0.19,-0.88l1.39,-2.77l1.86,-1.42l3.67,-1.02l0.91,-0.02l4.14,2.82l3.59,1.25ZM312.36,645.88l-1.06,0.44l-1.81,-3.12l-5.58,-4.18l-2.01,-6.8l-3.1,-1.88l-2.18,-4.67l0.09,-1.54l2.39,-1.01l5.1,4.01l2.03,0.81l0.58,2.81l2.14,1.35l2.37,4.72l0.87,3.69l-1.53,2.82l1.69,2.55ZM288.44,647.14l2.26,0.02l5.53,2.21l3.18,3.28l2.85,8.32l-0.82,2.0l3.61,2.99l0.17,2.28l-1.86,0.33l-0.99,0.89l0.64,1.84l3.5,1.47l-1.37,1.04l1.26,5.27l-0.99,0.92l-6.0,1.31l-4.58,-0.37l-3.89,-1.09l-6.9,-4.13l-1.18,-5.66l1.08,-2.6l-3.68,-4.74l-0.73,-2.78l0.42,-3.79l3.15,-5.04l2.55,-1.79l2.84,-0.42l-0.06,-1.76ZM268.84,562.64l-1.89,2.02l-3.42,0.6l1.91,-2.56l3.41,-0.06ZM262.3,573.88l-1.5,2.64l0.43,1.56l-1.47,0.72l-1.28,-0.65l-0.47,-1.65l1.06,-2.2l0.85,-0.53l2.37,0.11ZM260.24,581.78l0.07,0.69l-2.18,6.67l-1.8,-3.28l1.72,-3.9l0.7,-0.62l1.48,0.45ZM206.26,572.45l4.73,0.41l2.84,-1.65l5.87,-0.97l5.74,-3.67l-0.87,-1.31l-6.84,2.6l-4.11,0.83l-1.99,-0.11l-1.49,-1.05l-0.33,-1.06l1.02,-1.8l2.81,-1.23l2.6,-4.99l3.83,0.02l5.17,-1.92l1.27,-0.9l0.53,-1.37l-0.32,-2.36l-1.32,-0.98l-9.36,3.53l-3.97,-5.13l-1.9,-0.85l-8.06,-1.09l-3.7,-2.0l3.78,-2.71l-2.8,-3.63l2.77,-0.22l2.58,-1.35l1.38,1.24l1.2,-0.03l0.79,-0.81l0.2,-2.18l2.33,-1.42l5.96,-1.07l4.86,1.56l-0.43,2.04l0.36,0.51l2.52,0.18l2.0,2.31l4.24,9.09l9.54,0.25l1.85,1.56l3.14,-0.66l3.18,3.22l3.12,0.07l0.87,0.55l2.02,2.41l0.62,1.7l2.52,0.35l-0.29,1.58l-3.07,-0.39l2.53,4.29l-0.75,0.53l-3.52,-0.29l-0.51,-1.87l-2.11,-0.36l-0.1,1.91l-3.69,3.19l-0.17,1.24l0.61,0.34l2.82,-1.33l3.13,-0.36l0.94,0.39l-0.39,0.88l-1.4,1.35l-7.58,4.1l-3.22,0.61l-2.04,-1.08l1.84,-1.95l0.19,-1.32l-0.83,-1.01l-1.37,-0.03l-2.35,0.7l-1.52,2.11l-10.51,3.66l-2.4,1.91l-3.18,-1.07l-3.84,1.73l-7.96,0.0l-2.41,2.5l-4.96,-1.61l-2.68,-3.06l-0.47,-2.07l0.68,-1.49l1.69,-0.91l3.59,-0.11l2.44,3.0l1.67,1.11l1.79,-1.22l-0.32,-1.23l-0.99,-0.34ZM186.8,444.56l0.45,-0.68l-1.49,-2.17l0.39,-1.3l-0.46,-0.51l-1.29,0.27l-2.0,1.81l-0.17,-2.62l-0.89,-1.1l-4.16,3.48l-0.2,1.84l0.92,2.17l-0.14,1.12l-1.12,0.76l-7.75,-2.08l-3.46,-2.42l-1.43,-4.9l-3.65,-2.3l-0.7,-2.12l5.14,-0.26l-1.96,-2.7l-0.14,-1.31l0.57,-1.41l1.7,-1.48l6.48,7.45l1.78,1.08l1.15,0.19l0.45,-0.52l-0.48,-1.99l1.01,-1.35l-2.66,-3.42l1.49,-1.21l3.83,1.03l0.51,-0.52l-0.96,-2.41l-2.2,-1.98l-4.29,-1.76l1.68,-2.8l0.19,-1.79l-1.0,-1.65l1.25,0.01l3.93,2.95l0.65,2.8l0.93,0.96l4.7,2.18l3.08,2.82l3.4,-0.53l-1.64,3.09l0.26,0.58l1.24,0.09l1.86,-1.86l0.96,-2.21l7.67,7.13l0.25,-1.22l-1.23,-1.84l-0.04,-1.82l-4.18,-4.33l-1.33,-2.42l2.51,-4.84l-0.42,-0.55l-3.0,-0.6l0.3,-1.72l-1.59,-2.5l-0.09,-1.3l4.68,-2.55l1.79,-3.71l1.08,0.3l1.08,-0.48l4.09,3.79l2.49,3.48l5.44,4.15l1.21,2.08l1.77,14.03l-1.17,6.27l-2.7,2.57l-0.74,1.66l2.92,-1.53l2.41,-0.11l0.57,0.96l-1.88,3.02l0.43,2.05l3.05,3.04l-4.64,3.46l7.77,-0.51l1.7,0.38l0.21,0.58l-0.79,0.88l-2.36,1.15l0.43,1.25l5.87,-1.11l2.67,1.97l4.58,0.41l2.18,3.05l1.52,0.02l1.69,-1.79l3.68,0.03l2.4,-1.89l2.29,-0.66l2.31,0.02l1.62,1.57l5.83,0.0l-1.2,2.7l0.4,2.14l-2.6,3.78l-3.08,2.03l-4.88,0.93l-1.57,5.24l-4.42,2.53l-5.8,6.58l-2.85,1.89l-4.45,0.68l-0.97,-0.34l-0.7,-1.37l0.24,-1.89l2.26,-2.61l-0.14,-1.96l3.49,-5.27l1.64,-1.47l8.28,-3.29l0.25,-1.22l-0.56,-0.37l-4.7,1.56l-7.22,0.1l-0.61,-2.46l-2.09,-2.76l-2.27,-1.61l-0.54,0.48l1.71,4.14l-2.17,3.07l0.33,1.17l-2.33,3.37l-0.94,0.39l-0.82,-0.71l-1.07,-6.66l-1.32,-0.95l-1.27,0.67l-2.12,-1.45l-1.29,0.32l0.93,1.71l-0.91,0.48l-11.69,2.4l3.49,-3.54l0.11,-1.05l-2.09,-0.45l-4.19,1.62l-2.46,-3.58l2.13,-1.38l0.6,-1.12l-0.38,-0.58l-5.18,-0.01l-3.98,-4.14l-2.16,-3.81l5.26,-2.6l1.75,0.25l4.96,3.84l2.32,0.42l0.4,-0.62l-1.24,-1.75l-7.12,-5.0l-3.62,0.4l0.12,-1.14l-1.73,-0.84ZM250.72,592.71l-1.34,0.14l0.6,-1.29l3.89,-2.71l0.91,2.13l-1.48,1.05l-2.58,0.68ZM245.68,610.27l-7.29,11.45l-1.79,4.61l-0.96,-0.07l-4.25,3.76l-1.44,6.5l-1.96,1.1l-3.18,-0.17l-2.9,-1.52l-1.28,-2.91l-0.75,-5.76l0.93,-3.74l6.56,-4.25l6.7,-1.04l3.16,-2.43l-2.43,-0.34l-5.92,0.8l-1.05,-1.61l0.97,-2.54l2.38,-3.1l4.29,-3.57l2.72,-0.7l10.99,-8.73l2.45,-1.29l1.5,0.56l0.4,3.85l-4.38,4.34l-3.46,6.79ZM233.0,453.64l-2.42,0.75l-2.08,-0.67l-1.83,-1.51l-0.4,-1.28l1.65,-0.79l2.74,0.45l2.08,1.63l0.25,1.43ZM229.08,420.1l1.07,-1.33l-0.81,6.39l-1.08,-1.34l1.16,-2.96l-0.36,-0.76ZM227.18,427.36l0.9,1.02l-0.33,1.71l-2.69,8.1l0.08,3.82l2.3,4.82l-5.16,2.35l-1.05,-0.52l0.53,-1.37l-0.91,-1.41l-0.14,-1.91l0.69,-7.94l0.59,-1.9l3.95,-1.48l-0.12,-1.14l-1.54,-2.16l1.26,-0.55l1.66,0.81l0.58,-0.36l-0.59,-1.88ZM217.73,633.63l0.84,4.94l3.68,3.03l-0.63,2.98l2.31,1.7l-0.12,2.59l0.76,2.62l-2.68,2.02l-0.78,-0.27l-3.44,3.23l-4.55,1.59l-3.81,-0.43l-1.34,0.74l-0.92,2.85l-2.9,2.08l-2.03,0.6l-1.78,-0.5l-1.08,-2.42l0.46,-2.49l1.75,-1.6l4.84,-2.65l-1.96,-4.42l-1.19,-1.12l-3.84,-1.39l0.27,-1.63l6.01,-5.15l-0.1,-0.69l-1.98,-0.78l-5.21,0.05l-1.9,1.34l-3.18,6.1l-2.79,1.58l-3.71,4.15l-2.1,0.28l-0.83,-0.89l0.09,-1.72l1.07,-2.08l-1.06,-1.29l4.56,-6.11l-0.11,-0.61l-2.35,-1.34l1.48,-1.4l0.7,-4.55l3.57,-2.55l7.01,-2.99l-1.42,4.92l1.35,3.19l1.3,0.4l0.49,-1.22l-0.62,-2.32l1.71,-2.51l2.71,-2.15l3.18,-1.52l2.1,-2.29l3.57,-1.43l1.84,-1.48l1.22,1.1l1.55,11.92ZM215.01,599.17l-2.73,3.74l-1.0,2.44l0.19,2.11l-3.71,1.38l-3.28,-0.49l0.86,-0.62l1.84,-4.45l2.29,-2.53l2.66,-0.41l-0.35,-1.58l2.97,-0.59l0.27,1.0ZM135.93,362.62l5.04,-1.07l5.46,-2.81l-10.52,1.44l0.7,-0.99l2.1,-0.33l-0.4,-1.19l-1.02,0.0l1.29,-2.55l-4.52,2.06l-2.98,-4.46l0.3,-1.64l-1.52,-1.32l1.18,-3.57l1.65,-1.73l-1.66,-1.54l6.13,-0.31l2.15,-1.0l-3.23,-1.73l-0.32,-1.3l0.17,-1.39l1.84,-2.04l4.44,2.06l1.53,-0.27l4.28,1.52l-2.15,0.05l-0.4,0.52l0.58,1.78l2.85,3.16l-0.08,1.9l0.92,2.69l1.37,2.46l1.61,1.35l0.23,-3.83l-2.31,-4.09l0.74,-0.53l0.54,-1.94l5.9,-1.57l2.07,0.8l3.61,3.33l2.36,-2.65l-0.13,-0.63l-2.74,-1.59l-1.22,-3.4l-2.39,-0.15l-2.17,-3.79l1.61,-1.2l-1.5,-1.9l6.07,-4.18l1.72,-1.87l1.14,0.36l1.82,-1.31l5.25,-0.54l5.62,-2.31l2.97,-2.82l15.34,-9.13l6.69,-6.11l1.81,0.11l1.6,1.37l4.71,9.55l-2.13,1.43l-1.91,5.65l1.79,1.5l2.25,0.62l-5.6,2.96l-1.41,1.25l0.21,2.04l-2.57,0.95l-0.97,1.82l-2.39,0.74l-0.3,3.14l-1.43,0.71l-2.34,0.04l-0.31,0.65l1.82,2.18l3.31,0.78l3.46,-0.19l2.63,-0.92l4.15,-3.48l2.79,-0.95l-1.0,3.36l0.5,1.31l-2.73,1.18l-1.79,2.16l-1.4,0.58l-5.04,-1.88l-3.93,0.37l-3.88,-1.64l-1.52,-0.07l-0.38,0.56l2.79,5.77l-0.89,1.2l0.34,1.38l-1.19,0.73l-4.3,0.75l-4.21,3.42l-2.83,-0.85l-2.58,1.74l-6.15,1.23l0.39,1.26l3.38,0.07l11.26,-2.11l3.67,-1.39l1.72,1.66l0.32,3.05l1.01,0.99l-2.78,1.53l1.21,0.99l2.18,0.43l-3.22,3.07l-1.88,0.39l-10.39,-1.71l-0.88,1.14l0.85,1.06l3.36,1.73l2.96,0.68l1.03,1.09l-2.81,3.73l-1.39,0.8l-3.6,-0.88l-0.48,1.33l1.18,1.52l-1.58,0.62l-2.62,-1.09l-2.26,-3.66l-1.02,-0.42l-0.95,1.14l1.83,3.68l-3.4,-1.22l-3.3,-5.85l-0.78,-3.24l1.2,-3.09l2.34,-1.72l6.24,-0.92l0.38,-1.19l-8.74,-0.4l-0.74,2.4l-6.12,5.12l2.99,5.2l2.23,1.25l2.24,2.61l-1.56,1.28l2.39,1.64l0.47,2.76l-6.5,-1.25l-2.97,-1.34l-1.16,0.42l-1.74,2.41l0.12,0.61l3.52,1.51l2.19,3.27l-0.32,0.69l-3.93,0.62l-0.44,0.4l0.28,1.13l-5.54,-2.29l-0.46,1.5l1.42,1.35l-3.85,3.09l0.76,1.23l-8.08,5.09l-11.67,-10.15l-0.96,-2.05l2.41,0.38l0.74,2.43l0.63,0.24l7.1,-5.13l1.08,-1.38l5.88,-0.34l0.22,-0.74l-4.0,-2.75l4.14,-1.88l2.47,-0.44l4.61,1.35l-2.67,-2.47l1.81,-0.7l0.34,-1.25l-5.36,-0.4l-4.7,-2.63l-5.07,0.17l-2.03,-0.6l-0.65,-1.81l-2.11,0.44l-3.42,-2.03l2.91,-2.3l1.59,0.06l0.42,-0.4l-0.36,-1.38ZM212.42,555.14l-5.84,-0.08l-1.85,-1.32l1.52,-1.58l1.96,-0.44l4.21,3.42ZM203.39,487.59l0.22,1.65l1.79,0.0l-1.02,3.94l-1.58,2.41l-2.22,1.05l-3.14,0.24l-1.32,-0.57l-1.52,-3.0l-6.33,-3.83l7.3,-5.89l3.17,-0.34l4.37,2.2l1.48,1.32l-1.21,0.82ZM177.88,539.32l-4.43,2.83l-1.27,0.35l-3.13,-0.7l-0.99,2.08l-1.29,-2.32l2.05,-0.36l2.28,-1.77l4.92,-6.03l7.33,-4.08l3.9,-0.54l-2.99,5.48l-1.21,1.15l-2.02,0.51l-3.16,3.4ZM182.21,483.43l-2.71,0.37l-3.97,-0.32l4.83,-1.97l3.36,1.28l-1.52,0.65ZM150.14,558.23l-6.46,-1.86l-1.9,-4.86l7.33,-1.42l5.17,-2.22l6.32,-1.69l1.89,0.08l0.87,1.71l-0.96,1.21l-5.07,0.5l-0.5,2.23l-1.49,1.02l-3.97,1.09l-1.57,2.16l0.33,2.04ZM152.21,333.9l2.73,2.41l1.1,-0.27l0.55,0.45l1.31,2.12l-6.13,0.0l0.84,-0.06l0.35,-1.18l-1.24,-0.81l-1.05,-2.27l0.34,-0.81l1.21,0.41ZM134.01,378.91l3.3,-2.63l1.7,-0.62l1.21,0.66l0.02,2.21l-0.64,0.3l-2.89,-1.48l-1.36,2.28l-1.34,0.36l0.0,-1.09ZM111.36,422.72l1.61,-0.84l0.4,0.95l6.24,0.0l5.11,-1.16l3.02,0.63l0.64,0.91l-1.82,2.99l-3.46,-0.19l-3.17,1.06l-1.42,-0.76l-4.41,-0.08l-2.73,-3.51ZM113.08,421.29l-3.0,-0.39l-5.16,-2.64l-2.77,-0.56l-1.48,1.42l-0.94,0.1l-6.13,-3.44l1.9,-1.1l3.76,-6.4l1.75,0.7l5.45,-0.75l-2.13,0.89l-0.12,0.64l2.09,1.65l5.83,-5.5l-0.66,2.25l6.65,1.73l0.44,-1.25l-1.24,-0.75l5.11,-2.74l2.08,-0.28l1.14,1.87l-1.82,1.54l0.01,0.71l1.74,0.69l2.44,-0.99l5.67,1.33l0.57,1.13l-2.58,3.02l-0.89,-0.13l-1.47,-1.78l-3.51,-2.24l-4.11,-0.08l-0.4,1.33l1.66,0.62l-0.47,1.01l0.42,1.33l2.88,0.26l1.24,3.0l3.32,-0.45l-1.11,1.78l-1.94,1.08l-4.97,0.35l-2.26,0.84l-1.99,-2.53l-4.99,2.74ZM125.46,400.77l-2.35,0.84l-1.03,-0.11l2.88,-2.45l1.27,-0.22l0.48,0.81l-1.25,1.13ZM109.72,439.85l7.05,3.87l-2.1,-0.41l-0.51,0.38l0.34,1.25l1.81,0.27l2.64,1.97l1.76,0.49l-2.0,0.82l-1.65,-0.62l-5.14,-2.89l-3.82,-3.36l-1.98,0.85l-0.08,0.69l1.46,1.44l0.67,1.8l4.15,1.04l1.32,1.65l1.48,0.63l3.99,0.35l2.71,2.51l1.15,0.02l-0.28,1.16l-2.85,2.13l-1.95,4.51l-1.44,0.53l-6.54,-1.36l-0.48,0.39l0.31,1.16l5.48,1.32l1.38,1.08l1.09,4.29l-0.18,2.33l-0.72,1.09l-2.97,-0.86l-3.41,0.12l-0.38,1.25l1.88,0.62l4.35,-0.23l3.44,3.22l1.62,0.22l-1.73,1.62l-6.97,-1.13l-2.7,1.2l-2.27,-2.1l-2.93,-7.69l0.1,-4.47l-3.01,-2.49l1.3,-1.49l1.75,-4.78l1.54,-1.01l0.64,-1.72l-3.2,-9.37l5.91,-2.32ZM114.76,430.09l1.97,0.5l0.69,1.21l2.46,-0.44l2.43,1.4l-1.39,-0.23l-3.74,1.95l0.63,1.43l3.98,0.86l0.45,1.03l-7.15,1.64l-2.14,-0.39l-6.6,-3.16l-0.84,-1.22l1.47,-3.9l1.53,-1.07l1.8,-0.07l2.09,0.86l2.36,-0.42ZM101.81,483.27l2.19,1.32l-1.55,2.26l0.12,0.67l3.39,1.59l0.99,2.68l-2.36,0.47l-2.67,2.05l0.18,1.44l-0.49,0.55l-1.2,0.44l-7.81,-1.1l0.86,-1.78l2.6,-1.32l0.44,-1.47l-0.85,-2.15l5.39,-2.4l0.78,-3.25ZM4.32,389.19l-1.63,0.29l-1.46,-0.85l-0.48,-1.35l4.5,0.99l-0.93,0.91Z\", \"name\": \"Scotland\"}, \"UKL\": {\"path\": \"M288.06,1103.72l-0.21,-2.02l1.0,-0.8l-0.59,-2.09l5.18,-1.12l3.72,-2.72l6.33,-1.5l2.89,-2.27l0.23,-2.62l1.27,-0.4l-0.17,-1.04l-0.84,-0.6l0.8,-0.82l4.49,0.12l4.74,2.08l4.29,-0.87l-0.11,-1.47l6.45,1.43l0.98,-0.87l-0.5,-3.21l5.04,-1.71l4.92,-5.57l0.92,-0.01l2.76,1.8l0.62,-0.36l-0.17,-3.15l2.96,-1.2l11.76,-0.01l1.66,-2.11l4.25,-1.64l4.32,-3.86l6.03,-1.49l10.35,-7.38l5.03,-5.92l2.59,-4.13l1.21,-2.78l1.48,-7.51l1.91,-3.98l-0.6,-2.7l0.52,-1.99l3.35,0.89l6.06,-3.22l-0.21,-1.61l-2.46,0.04l-6.61,1.61l-5.05,-5.2l-0.9,-1.63l0.26,-2.7l1.36,-2.79l3.62,-3.39l0.63,-2.04l4.7,-2.68l1.26,-1.7l-2.69,0.01l-2.78,1.22l-6.42,-6.45l-1.97,-3.72l2.72,-2.21l-1.29,-4.44l0.17,-2.14l5.54,-3.38l-1.04,-1.42l-2.39,1.25l-1.71,-1.38l-2.15,1.33l-7.26,-0.51l-6.25,1.59l-3.17,1.58l-6.07,-0.02l-3.5,1.99l-3.12,2.96l0.3,0.9l-1.2,0.67l-0.89,1.54l-0.03,1.51l0.89,1.22l-1.85,1.23l-6.8,-3.18l-2.82,1.61l-6.59,-0.02l-2.74,1.88l-1.73,-0.01l0.67,-0.9l-0.17,-1.23l1.61,-2.29l11.94,-11.39l6.23,-1.85l6.98,-4.45l1.77,-2.42l5.59,-2.99l1.29,-3.92l0.39,-6.11l0.46,-0.15l0.56,1.42l0.68,0.08l1.54,-2.84l3.35,-3.31l2.56,-1.17l4.84,-6.25l4.66,-1.79l2.62,-0.19l2.29,0.66l5.06,-1.82l2.92,-2.01l9.36,-3.18l2.88,0.0l0.37,-0.55l-0.88,-2.15l-2.91,-2.93l2.48,0.47l2.49,1.76l2.01,-0.61l1.67,0.45l4.55,3.79l10.07,-0.18l3.6,-0.69l16.41,-6.62l3.46,-0.1l4.9,2.39l1.87,2.18l11.09,5.9l2.96,3.22l0.88,-0.55l0.06,-1.99l4.98,1.15l5.5,3.62l3.17,2.98l0.42,1.88l-3.35,1.89l-0.42,1.59l5.13,4.88l2.25,4.16l1.39,5.14l3.29,4.03l4.42,0.99l3.34,1.66l0.85,2.27l-0.03,2.53l-4.99,2.23l-6.28,-4.49l-2.24,-0.28l-4.15,0.92l-3.05,-2.13l-2.76,-0.15l-7.77,4.2l-1.78,2.46l-2.35,1.51l0.37,3.56l-2.65,3.09l1.17,4.26l2.48,1.42l3.0,0.3l1.76,1.83l4.53,0.86l1.85,2.01l1.83,0.91l-0.97,1.34l-3.56,1.07l-1.32,2.63l-0.61,4.22l-2.38,1.45l-1.45,4.15l-3.72,2.41l-0.16,1.98l1.36,2.54l-0.59,1.79l0.77,0.62l2.25,-0.27l1.45,-1.73l4.67,-2.81l2.94,2.7l-4.49,4.82l-6.67,0.36l-7.23,2.96l-2.1,2.3l-0.23,1.66l1.48,3.23l8.32,5.22l2.88,2.5l9.73,0.68l-0.04,0.94l-2.85,2.05l-0.86,1.88l1.04,2.59l2.68,0.97l-4.52,0.85l-3.5,2.62l-1.47,2.84l-3.6,4.39l0.02,1.19l0.8,0.93l1.91,0.3l-0.73,1.0l-3.42,1.53l0.12,0.93l1.71,1.28l-0.87,1.04l-0.88,3.5l3.15,2.67l0.6,3.9l2.6,4.07l4.64,4.35l1.31,2.62l1.91,1.4l2.64,0.27l5.04,-2.28l8.33,6.16l3.17,3.83l3.33,0.47l4.19,2.32l-2.14,3.16l-0.47,1.8l0.91,3.18l-1.2,2.69l1.96,5.51l-1.93,1.37l1.58,5.06l-2.23,2.2l-1.58,1.04l-4.15,0.82l-4.8,2.76l-3.57,1.06l-7.21,0.41l-2.98,-2.29l-3.61,3.64l-7.72,3.93l-2.39,2.06l-1.12,2.26l-2.3,0.75l0.88,2.84l-0.55,2.21l-1.28,1.24l-2.97,-0.53l-6.02,2.1l-21.48,-1.63l-1.44,-0.69l-4.11,-4.67l-5.07,-3.51l-3.02,0.44l-3.36,-2.08l-0.82,-1.06l0.55,-0.79l-2.5,-6.44l-6.43,-6.88l-11.97,1.15l-2.01,1.4l-0.22,1.34l1.87,2.84l-2.88,0.0l-0.67,0.9l-0.48,-0.85l-1.99,-0.76l-1.6,1.54l-4.38,-1.17l-3.95,2.67l-2.54,-0.76l-0.66,1.21l-7.22,-1.91l-0.41,-1.0l1.59,-1.29l-1.0,-4.1l2.66,-0.71l1.32,-1.7l0.19,0.8l1.5,0.9l11.21,-1.85l2.07,-2.75l0.04,-1.84l-1.1,-0.46l-1.58,1.35l-4.17,-0.22l-4.63,-2.15l-1.55,0.69l-6.65,0.84l-1.74,-0.56l-2.26,-1.49l-2.75,-3.36l4.47,0.15l1.1,-1.17l-0.33,-0.65l-3.01,-0.22l-1.19,-0.72l-0.59,-1.02l1.07,-3.23l-0.67,-1.04l-1.09,0.26l-2.23,2.73l-2.37,-1.56l-1.67,0.23l-0.59,1.41l1.57,1.87l-2.32,1.04l-9.77,-0.62l-6.33,1.09l-2.84,1.7l-0.36,2.85l-0.89,0.4l-1.71,4.39l-1.95,-0.92l-2.04,1.59l-8.97,0.1l-6.66,5.46l-6.81,-2.2l-1.69,-1.01l0.58,-1.28l-1.26,-2.24l-4.43,-1.07l-1.12,-1.58l6.42,0.76l0.41,-0.57l-0.36,-1.09l4.26,0.79l4.13,-1.65l4.13,-0.71l2.18,-1.22l1.72,0.32l0.57,-1.08l-2.51,-2.26l-0.44,-2.5l1.27,-2.07l3.14,-0.65l0.32,-1.25l-0.6,-0.35l-3.4,1.39l-6.04,0.96l0.18,0.76l2.14,0.37l0.3,0.77l-0.46,1.57l1.16,1.19l-1.34,1.91l-8.4,1.33l-12.2,-1.33l-1.54,0.49l0.5,2.17l-1.3,0.65l-0.06,-1.92l-3.93,-2.5l2.0,-0.79l2.21,-2.13l4.37,-1.02l1.48,-1.23l0.41,-1.47l-0.94,-6.55l-2.03,-2.49l-0.92,0.56l-1.41,-0.95l-3.33,-0.39l-1.47,-0.82l-6.55,1.52ZM357.65,950.37l-0.34,-3.45l-1.83,-1.51l-4.34,-6.08l1.07,-10.14l-0.95,-3.36l1.16,-0.7l11.0,-3.05l8.56,0.85l3.9,2.02l0.98,3.88l2.65,1.32l0.03,2.03l1.69,1.84l1.27,3.17l5.38,-0.51l1.79,-1.65l1.88,0.83l4.26,0.48l-4.39,5.83l-6.28,2.15l-2.11,1.33l-2.13,2.07l-0.32,2.41l-10.33,5.85l-3.91,-0.73l-1.56,0.8l0.24,-2.64l2.17,-2.81l-1.1,-1.01l-1.65,0.52l-2.76,2.54l-2.99,-2.23l-1.06,-0.03ZM343.24,934.63l2.62,-0.08l2.89,2.57l2.66,5.07l-0.33,0.93l-1.08,-0.06l-1.67,-1.22l-2.62,-3.52l-3.84,-0.29l-1.36,-2.36l1.95,-1.42l0.79,0.38Z\", \"name\": \"Wales\"}, \"UKK\": {\"path\": \"M253.14,1305.23l-0.55,-2.93l2.56,-3.4l14.3,-6.14l1.65,-0.04l2.57,2.07l2.17,0.77l1.92,-1.04l2.42,-4.13l3.1,-0.04l3.21,-1.5l9.99,-8.79l4.24,-2.14l0.65,-2.26l-0.63,-3.53l2.64,-0.43l6.24,-2.97l1.01,-2.22l1.16,-8.62l0.76,-1.42l1.54,-1.03l1.86,-0.06l2.05,-1.52l0.94,4.38l0.58,0.33l1.04,-0.7l1.46,0.72l5.31,0.6l-1.08,-2.13l-4.33,-1.65l-1.15,-1.25l0.52,-1.71l-0.43,-1.59l8.22,-0.07l2.78,-0.83l3.75,-5.62l-0.21,-2.9l1.95,-0.19l6.14,-4.42l1.8,-3.53l5.23,-3.84l2.41,-4.2l-0.41,-10.03l0.94,-4.62l1.82,-3.83l-0.46,-4.58l7.43,0.0l3.54,1.62l5.24,0.46l3.24,-1.34l8.07,-7.82l-1.88,-6.28l-1.7,-2.24l2.94,-0.07l0.8,-1.45l-0.16,-1.6l-1.55,-1.74l6.28,-2.09l15.79,-1.24l4.87,-1.26l6.3,-0.01l6.12,-1.63l11.15,2.43l7.02,-0.19l10.7,2.07l4.44,2.73l9.9,-0.37l9.35,-1.98l9.14,-0.16l2.31,-1.29l-0.66,2.24l1.74,0.66l1.52,-2.45l0.47,-2.39l-1.36,-9.67l1.98,-0.43l0.41,-2.85l2.4,-3.11l-1.06,-1.33l1.39,-1.21l2.89,0.35l10.55,-10.11l7.18,-1.99l1.82,-1.58l7.6,-10.85l2.31,-1.26l2.16,-4.74l7.86,-7.64l5.08,-1.71l1.66,-1.27l0.67,-1.33l-0.18,-1.56l-1.42,-1.27l-0.64,0.24l-0.35,1.99l-1.37,1.07l-5.45,1.27l-3.44,4.17l-5.17,2.87l-6.8,6.99l-0.55,-2.96l-0.88,-1.4l1.92,-1.29l-1.96,-5.74l1.19,-2.51l-0.87,-2.53l0.38,-2.23l1.89,-2.49l1.44,-5.0l1.37,1.78l1.77,-0.96l0.95,0.2l0.95,-1.19l2.19,-0.76l2.58,0.31l1.51,-2.46l3.0,-0.34l3.29,-1.82l0.07,-2.4l-1.84,-1.81l-0.63,-2.19l-1.62,-1.05l1.58,-6.41l1.16,0.51l1.18,2.25l1.42,0.58l2.14,-0.69l2.02,-1.94l2.0,-0.27l3.01,4.75l5.0,1.27l1.8,-0.32l2.12,-2.9l2.65,0.32l1.55,-0.89l-1.21,-1.91l0.8,-3.32l3.37,-0.15l-2.08,3.52l1.2,1.75l2.51,-1.32l6.57,0.85l5.13,-2.99l2.34,-0.45l5.32,0.23l2.97,2.29l1.27,0.05l0.93,-1.56l-0.18,-1.95l-1.89,-2.39l-1.21,-0.61l1.47,-1.0l2.74,0.32l3.02,-3.41l1.44,-0.65l1.61,1.69l1.81,0.57l0.78,2.18l2.99,4.11l1.67,0.5l3.28,-0.23l-3.28,4.17l-0.43,3.45l3.44,2.01l0.39,1.03l-2.76,2.39l0.52,2.02l-1.63,1.22l-1.6,3.37l-0.28,6.56l-2.49,2.46l1.37,1.94l1.38,6.5l2.72,2.79l-2.87,-0.21l-0.75,1.39l0.37,2.55l2.37,1.99l-0.39,2.03l-1.6,1.56l0.22,3.11l1.01,0.91l1.66,-0.05l3.68,5.38l1.58,0.44l0.71,3.18l2.24,3.16l1.92,1.19l0.51,2.35l-2.63,0.68l-0.91,1.42l2.6,3.99l3.01,1.36l0.97,3.22l-3.46,0.76l0.55,2.99l-1.59,2.97l0.87,2.73l-0.53,0.5l-3.63,-1.38l-1.76,0.6l-2.36,2.07l-4.43,-0.66l-1.82,0.88l1.02,3.72l2.58,3.83l0.59,2.3l-0.42,2.62l2.63,2.18l-0.77,2.6l0.95,3.6l-0.14,2.22l2.09,1.83l-2.01,2.55l1.77,2.26l-0.74,1.56l-3.55,1.0l-3.71,-2.81l-3.62,-0.34l-6.01,-1.66l-2.59,-1.89l-1.08,0.39l-0.77,1.21l-0.83,-1.23l-4.98,0.72l-2.2,1.34l-0.11,0.57l3.71,5.08l2.43,2.24l1.96,0.28l2.09,-1.17l2.22,0.38l-0.44,2.17l-2.44,1.94l0.55,2.92l2.42,0.14l0.73,3.61l-0.89,1.46l-0.21,2.12l2.04,3.92l4.68,-0.86l0.18,2.66l4.65,0.0l0.17,0.84l-3.26,0.49l-4.82,1.77l-7.51,-0.76l-3.49,1.27l-3.38,2.67l-0.89,-2.38l-6.15,-0.75l-1.03,-1.9l-0.92,-0.32l-3.87,4.75l0.36,0.63l1.14,-0.12l2.79,-1.34l2.71,3.39l4.33,0.59l0.39,0.59l-0.56,1.75l1.44,1.14l-2.58,2.66l0.04,1.71l-1.26,0.49l-6.94,0.12l-7.98,-2.84l-15.97,-1.51l-2.91,-1.52l-2.08,0.18l-3.5,1.04l-2.16,3.64l-0.44,2.83l1.02,1.25l1.93,0.53l0.16,1.06l-1.86,2.99l-0.06,-3.84l-2.19,-3.16l-18.13,-11.66l-14.99,-4.71l-8.68,1.18l-3.12,1.71l-1.9,0.19l-3.4,-0.76l-5.66,3.17l-3.55,-0.84l-8.11,2.08l-3.26,4.27l-6.11,2.27l-3.15,-0.44l-1.05,-0.84l-2.19,-4.39l-1.8,-1.31l-0.77,0.56l-0.01,1.21l1.12,1.18l1.75,5.1l-4.02,4.64l-2.15,5.53l0.08,2.47l1.37,4.26l-3.55,0.56l-1.49,0.93l-0.76,1.84l0.83,2.39l5.11,0.77l-0.89,2.12l-1.87,1.12l-0.62,2.84l-0.74,0.44l-2.46,-1.26l-0.62,0.23l-0.58,2.36l-3.54,1.26l-1.12,1.22l-1.93,7.13l0.59,2.68l-0.96,0.42l-4.81,0.95l-4.85,-1.2l-1.35,1.07l-7.97,-7.52l-6.75,-4.79l-4.2,1.5l-2.21,1.56l-1.61,-0.54l-1.08,-0.79l0.12,-1.74l-3.62,-1.52l-0.75,-1.44l1.08,-1.94l-0.37,-0.59l-3.97,0.02l-0.97,-0.56l-1.5,-2.68l-0.6,-1.7l2.63,-5.03l-2.09,0.58l-1.53,-0.64l-1.5,2.04l-2.08,0.69l1.6,2.58l-0.88,1.73l-5.07,-0.04l-0.34,0.66l1.83,1.89l4.78,-0.64l1.02,0.64l-2.08,0.49l-0.31,1.16l2.07,0.33l0.11,0.92l2.02,0.0l-1.55,1.16l0.37,1.89l-1.22,-0.07l-1.6,-2.79l-1.68,-0.95l-7.61,-1.67l-4.14,0.41l-6.25,3.3l-3.31,1.08l-14.19,0.7l-0.89,0.78l-1.09,-2.85l-0.94,-0.34l-5.16,1.5l-1.14,1.03l0.56,2.39l-2.08,2.03l-0.33,0.96l0.59,1.77l-1.78,3.22l-4.29,-0.52l-4.77,2.96l-3.8,1.1l-4.54,5.87l-0.64,-0.87l-0.65,-4.18l-1.44,-0.91l-1.72,0.4l-0.23,2.55l-1.08,1.37l0.18,1.04l1.07,0.89l-2.43,1.35l-0.52,2.65l-3.62,1.89l4.88,1.03l1.09,2.91l-3.38,4.89l-3.43,-0.03l-0.83,0.54l-2.57,2.56l-1.23,3.05l-4.13,-3.56l-0.64,-3.9l-4.54,-6.03l-7.05,-3.23l-3.54,-0.55l-4.48,-2.02l-4.16,0.77l-1.94,1.55l0.51,3.46l-0.81,1.3l-2.68,1.51l-7.52,1.32l-2.99,-0.98l-0.73,-2.77l1.72,-1.11l-0.71,-1.87ZM341.93,1181.83l0.36,1.42l-0.13,1.34l-0.34,-0.39l0.11,-2.37ZM201.75,1326.67l-1.1,0.06l0.55,-1.68l0.75,0.97l-0.19,0.65ZM198.3,1322.87l-0.56,0.28l-0.52,-1.44l1.0,0.64l0.09,0.53Z\", \"name\": \"South West\"}, \"UKJ\": {\"path\": \"M584.61,1203.25l0.11,1.08l1.34,-0.02l1.32,-1.43l2.34,1.83l6.12,1.69l3.54,0.34l2.26,2.22l1.51,0.6l4.1,-1.07l1.19,-2.18l-1.77,-2.29l2.03,-2.71l-0.69,-1.19l-1.44,-0.77l0.12,-2.16l-0.93,-3.55l0.75,-2.76l-0.76,-1.18l-1.81,-0.92l0.38,-2.58l-0.63,-2.45l-2.64,-3.96l-0.84,-3.15l5.59,0.38l2.51,-2.13l1.51,-0.52l3.87,1.33l1.01,-1.29l-0.92,-2.48l1.57,-2.93l-0.46,-2.96l3.0,-0.28l0.46,-1.68l-1.3,-2.95l-2.94,-1.26l-2.36,-3.63l3.48,-1.58l-0.57,-3.09l-2.03,-1.33l-2.14,-3.03l-0.69,-3.2l-1.73,-0.6l-3.71,-5.43l-2.42,-0.45l-0.19,-2.74l1.54,-1.41l0.46,-2.4l-2.56,-2.42l-0.21,-1.91l0.18,-0.66l2.58,0.49l0.89,-1.21l-2.76,-2.96l-1.42,-6.58l-1.26,-1.32l2.43,-2.55l0.29,-6.63l1.48,-3.04l1.67,-1.2l-0.5,-2.07l2.81,-2.61l-0.63,-1.81l-3.16,-1.61l0.25,-1.89l3.95,3.0l1.24,-0.33l0.52,-1.1l2.92,-0.21l0.67,-1.86l2.11,-0.37l0.99,-1.34l1.31,-7.29l2.08,-3.02l2.5,-0.3l0.45,-1.92l0.58,-0.09l1.45,0.11l2.34,1.77l2.2,-0.31l0.75,-1.76l-1.54,-1.27l2.34,-1.57l1.52,-2.91l6.74,7.04l-5.63,1.78l-0.06,0.7l0.91,0.58l-0.22,3.53l2.76,7.01l1.24,0.65l6.16,-0.21l2.0,-1.13l1.98,-0.19l2.98,-2.66l-2.57,-1.15l1.49,-1.5l1.82,-0.97l5.15,-1.12l1.24,-1.27l2.78,0.16l3.42,-1.22l3.84,6.17l1.4,0.03l3.1,-2.45l0.19,-2.07l2.46,-1.02l-0.18,-1.21l-2.01,-1.53l-2.2,-2.94l4.43,-1.34l1.52,-2.7l2.4,0.56l1.52,-1.79l2.85,0.04l6.22,-3.46l2.45,1.74l-0.7,3.43l3.71,3.25l1.06,2.1l-3.63,2.45l-0.02,1.41l-1.89,0.76l-1.59,1.96l0.26,0.65l1.58,0.2l0.51,0.72l-0.35,2.49l-1.7,2.21l1.0,2.81l-2.39,2.92l-1.54,3.86l5.54,3.52l2.09,-0.31l3.41,2.75l2.27,3.35l-1.44,-0.07l-2.21,2.17l-2.85,-0.91l-3.31,-0.19l-1.65,-1.74l0.07,-1.65l-2.77,-1.04l-1.29,0.34l-1.44,2.84l1.76,2.15l1.27,0.26l1.42,1.27l0.44,3.06l1.16,1.37l2.8,1.15l3.53,-0.03l1.97,1.85l2.3,-0.67l0.96,0.36l-1.78,1.5l-0.35,1.43l0.95,1.66l0.18,2.06l3.46,0.13l-2.23,3.5l-0.21,2.21l0.72,2.17l2.11,1.87l1.83,4.53l-1.1,6.22l-1.01,2.32l2.04,2.18l2.7,0.63l0.08,1.52l0.83,1.13l2.83,0.71l4.62,3.08l2.96,0.61l1.02,2.18l-1.42,2.73l0.24,2.65l0.53,0.34l1.86,-0.73l2.12,-3.68l1.82,-1.14l1.83,2.0l-0.11,2.67l0.58,0.38l3.14,-1.22l2.25,3.96l2.09,1.71l2.59,-0.33l1.67,-2.16l3.32,-0.56l1.6,-1.63l1.99,0.13l1.2,1.07l0.51,3.18l2.5,-0.22l2.03,1.37l2.16,-0.67l0.51,-2.78l5.08,-5.11l1.2,-3.89l-0.67,-3.32l5.13,-5.91l4.18,1.29l4.0,-0.79l1.25,1.95l2.05,0.41l8.05,-1.59l1.84,-2.34l5.48,-1.26l13.71,1.67l2.09,2.13l-0.52,1.21l-6.11,-0.35l-2.9,2.22l-4.76,1.51l-0.09,0.64l1.88,2.12l8.51,0.42l3.5,0.77l0.44,-0.57l-1.02,-2.73l0.28,-0.73l1.2,0.04l1.13,3.4l2.47,2.89l18.43,1.74l10.82,-2.77l27.82,-2.15l1.75,0.88l-0.72,3.42l-1.09,1.79l-3.38,0.27l-0.87,0.85l3.06,11.95l-0.7,4.26l-1.71,3.55l-2.24,2.25l-5.68,1.63l-2.4,1.51l-3.86,0.27l-2.35,2.13l-1.58,0.55l-5.69,0.13l-3.6,1.44l-3.48,2.67l-5.32,6.78l1.03,7.34l-2.55,0.84l-12.26,-3.38l-3.66,0.95l-8.58,6.96l-3.4,1.3l-18.73,3.34l-3.89,1.31l-2.0,2.7l-2.94,1.65l-3.11,3.68l-3.01,0.04l-5.63,-1.46l-3.97,-0.11l-2.29,-1.61l-5.32,-0.68l-17.94,-5.47l-2.94,-0.25l-2.39,1.01l-3.27,-1.02l-11.02,3.32l-14.78,0.0l-14.19,3.95l-2.34,-1.09l-1.52,1.47l0.22,3.21l-1.37,0.64l-9.6,-4.67l-0.42,-0.45l0.34,-0.81l3.46,-1.48l0.27,-1.09l-3.78,-2.77l-1.63,0.8l0.4,-1.57l-1.75,-0.81l-2.9,-0.46l-4.43,0.4l-3.23,6.93l-1.91,0.2l-1.42,-1.34l2.3,-3.72l0.33,-2.05l-1.78,-0.74l-6.77,0.72l-0.12,0.71l3.39,2.65l-0.07,3.06l-1.84,0.67l-2.81,-1.17l-1.27,-1.82l-4.77,-2.7l-4.0,-1.35l-3.32,-3.35l-11.04,-5.19l-0.57,0.36l0.25,1.08l3.5,1.36l8.74,8.35l0.48,2.36l-8.54,1.29l-0.1,0.72l1.0,0.87l-3.66,0.57l-3.23,1.33l-3.02,-0.4l-3.32,4.76l-3.38,-1.41l-5.86,-0.94l-0.66,-1.66l-4.53,0.0l0.22,-1.97l-0.48,-0.63l-4.55,0.92l-1.75,-3.42l1.14,-3.39l-0.83,-4.12l-2.41,-0.14l-0.44,-2.3l2.36,-1.73l0.55,-2.73l-3.09,-0.95l-2.35,1.21l-1.24,-0.19l-2.26,-2.08l-3.43,-4.7l1.61,-1.01l4.69,-0.68ZM827.4,1160.64l-1.9,0.67l-11.56,-1.21l-3.32,-3.92l1.03,-2.91l1.38,-0.74l10.58,3.06l3.43,2.55l0.72,1.47l-0.37,1.04ZM664.91,1227.89l0.0,0.18l-6.3,-0.89l1.85,-0.72l2.13,-3.1l0.76,0.03l0.76,0.88l-1.02,1.84l1.83,1.78ZM623.05,1234.61l0.16,1.25l2.31,-0.29l5.0,-4.47l2.03,-1.19l1.79,-0.1l13.05,4.47l3.03,0.11l0.83,0.53l-0.03,1.37l1.39,0.28l1.62,2.45l-0.93,0.81l-4.57,1.36l-2.54,1.89l-0.81,1.25l-0.22,4.07l-9.32,2.31l-2.99,-0.72l-14.78,-9.13l-1.16,-0.36l-5.03,0.97l1.22,-1.87l3.31,-2.39l6.66,-2.62Z\", \"name\": \"South East\"}, \"UKI\": {\"path\": \"M716.63,1157.39l-4.59,-3.04l-2.59,-0.57l-0.98,-2.75l-2.67,-0.55l-1.75,-1.87l1.0,-1.78l1.13,-6.4l-1.84,-4.72l0.92,-2.61l1.69,0.65l7.27,-0.4l4.73,-2.32l5.72,-1.12l1.36,-3.15l1.96,1.94l3.87,-1.44l2.15,-2.5l11.33,1.31l0.02,3.15l2.81,1.42l0.95,1.9l4.85,2.34l1.22,-0.31l1.34,-1.36l11.26,-1.41l1.94,3.76l1.43,1.29l1.87,0.52l2.08,3.92l-4.35,1.35l-0.72,1.12l-2.34,-0.02l-0.45,2.28l-2.05,1.65l0.25,1.71l-0.82,1.43l-4.39,4.59l0.63,3.51l-1.13,3.67l-4.97,4.94l-0.38,2.63l-1.72,0.53l-1.95,-1.38l-1.81,0.49l-0.59,-3.11l-1.65,-1.36l-2.31,-0.15l-1.92,1.75l-3.27,0.54l-1.59,2.11l-1.93,0.35l-1.79,-1.43l-2.64,-4.28l-3.16,0.99l-0.01,-2.45l-2.17,-2.36l-2.69,1.3l-2.22,3.77l-1.01,0.34l-0.18,-2.02l1.42,-2.94l-1.41,-2.73l-3.12,-0.71Z\", \"name\": \"London\"}, \"UKH\": {\"path\": \"M700.34,1109.67l0.41,-1.29l-2.37,-3.36l-3.74,-3.06l-2.11,0.3l-2.94,-2.2l-2.04,-0.67l1.35,-3.4l2.43,-2.94l-0.93,-3.19l1.65,-1.93l0.38,-2.77l-0.77,-1.28l-1.32,-0.3l1.07,-1.32l2.06,-0.76l-0.23,-1.33l4.04,-3.15l-1.34,-2.6l-3.58,-3.14l0.68,-3.49l-2.57,-1.83l1.59,-2.66l-0.8,-4.17l0.12,-0.46l4.06,-0.75l2.72,2.08l1.51,0.26l1.06,-0.5l0.78,-1.6l0.0,-2.5l1.74,-2.07l4.02,-1.09l-0.3,-1.9l-2.01,-2.79l0.08,-1.57l4.83,-1.88l0.98,-1.65l2.9,-1.92l3.73,-4.11l0.45,-1.31l-1.29,-4.27l-4.83,-2.4l0.68,-2.67l-1.43,-1.75l0.11,-1.67l-0.45,-0.42l-3.93,0.46l-0.79,-0.5l0.61,-4.74l-1.77,-2.89l1.37,-0.52l2.68,0.75l2.91,-0.03l7.53,-3.08l4.67,1.84l5.18,-0.98l1.63,1.63l1.88,-0.28l1.88,0.65l3.33,-1.52l1.68,0.19l2.6,-0.93l4.33,1.23l3.13,-0.12l1.49,-1.15l0.79,-1.62l-0.32,-3.52l0.4,-0.36l3.21,-0.31l4.41,-1.97l4.49,0.35l6.64,-4.06l0.3,-1.33l-1.25,-1.37l1.22,-2.96l3.67,0.24l1.26,0.6l2.52,2.9l1.27,0.54l0.56,-0.37l-0.42,-2.53l5.02,-5.7l1.62,-6.08l2.45,-4.76l2.89,-2.46l4.17,-1.61l4.58,-0.73l4.16,0.14l0.03,-1.05l1.12,-0.34l5.6,1.38l7.42,0.01l11.46,3.15l4.16,-1.5l-0.09,-0.81l22.41,4.44l10.44,4.4l21.43,13.49l4.45,5.09l4.3,12.21l-0.54,2.37l0.53,1.95l0.05,6.42l2.02,5.48l-1.4,2.02l-2.18,6.03l-0.13,2.26l-3.81,8.27l-4.64,6.46l0.02,8.2l-3.74,12.98l-7.0,2.78l-1.37,1.26l-1.59,-0.5l-0.73,2.43l-3.29,3.77l-7.6,6.96l-5.71,-6.1l-2.68,-0.78l-4.41,-2.89l-2.36,-0.4l-0.47,0.39l0.15,1.1l4.94,3.53l4.83,1.14l0.08,2.12l-1.61,-0.32l-3.83,0.71l-3.55,-1.57l-8.71,1.93l2.66,1.34l14.43,0.76l1.24,-0.56l-0.18,1.26l-6.71,5.71l0.04,0.64l1.18,0.74l4.6,0.9l1.63,-1.53l0.08,1.44l-0.93,1.66l-4.85,3.74l-4.4,2.46l-2.74,0.96l-7.44,0.55l-6.02,-7.7l-0.54,2.4l-1.15,1.1l-3.12,1.26l-3.32,2.37l-1.22,4.02l-3.13,1.54l-3.66,-0.85l-2.33,0.21l-5.99,2.26l0.02,0.73l4.25,1.27l1.53,1.82l2.38,-1.94l5.5,-1.01l5.16,-2.61l1.26,-0.2l1.09,0.93l-0.66,3.02l1.07,3.02l-1.06,1.61l-0.24,3.17l-2.07,1.76l3.39,0.65l-2.18,3.04l-4.35,3.27l-4.87,2.53l-3.78,0.99l-10.49,-0.85l-2.47,1.61l-3.46,0.6l-1.08,0.82l-1.41,-0.99l-8.45,1.43l-1.5,3.45l-1.03,1.04l-6.03,2.3l-1.4,-0.23l-1.53,-2.13l-4.12,0.79l-4.6,-1.74l2.18,-2.25l0.4,-2.05l1.78,0.32l0.97,-1.24l4.7,-1.46l0.21,-0.61l-2.36,-4.38l-3.34,-1.82l-2.2,-4.05l-11.85,1.37l-2.37,1.65l-4.35,-2.18l-0.93,-1.89l-2.68,-1.38l0.41,-1.74l-0.71,-1.57l-11.85,-1.37l-2.41,2.65l-3.51,1.22l-0.94,-1.47l-1.27,-0.36l-1.42,3.19l-5.53,1.08l-4.61,2.3l-7.17,0.38l-0.81,-0.65l-1.3,0.08l-1.03,2.71l-1.78,-1.58l-0.55,-1.81l0.13,-1.67l2.17,-2.98l0.17,-1.09l-1.31,-0.85l-2.22,0.4l-1.11,-3.47l2.15,-1.88l-0.1,-1.24l-1.51,-0.73l-2.08,0.71l-2.18,-1.89l-3.6,0.03l-2.48,-1.05l-0.86,-1.06l-0.55,-3.2l-1.59,-1.41l-1.19,-0.21l-1.47,-1.8l1.22,-1.98l0.73,-0.11l2.05,0.68l-0.14,1.56l1.95,2.05l6.61,1.26l2.64,-2.29l1.39,0.22Z\", \"name\": \"East\"}, \"UKG\": {\"path\": \"M474.94,995.46l-0.97,-3.61l2.62,-2.95l-0.45,-3.38l2.25,-1.38l1.66,-2.35l6.55,-3.73l3.25,-0.23l3.27,2.18l4.24,-0.92l1.98,0.25l4.91,4.04l1.52,0.48l5.75,-2.6l0.21,-2.68l-0.88,-2.51l8.61,-2.13l2.6,0.94l1.4,2.81l1.59,-0.3l2.57,1.03l1.55,-1.6l2.67,0.8l2.72,-0.31l1.76,-1.0l0.73,-1.62l3.7,-1.23l1.25,-1.37l-0.54,-4.55l0.57,-1.45l2.62,-0.53l2.47,-2.57l2.85,0.16l2.39,-0.85l7.58,-7.38l2.18,-0.56l0.31,-1.22l-0.68,-1.33l2.86,0.98l2.89,0.0l3.41,-2.23l2.31,-0.27l2.42,-2.43l1.75,-0.64l1.76,2.12l6.51,2.18l2.74,1.52l1.69,1.62l0.37,3.51l2.31,3.19l-0.36,2.25l0.6,3.42l1.88,2.41l0.15,2.32l-0.95,1.84l-4.6,2.42l-0.58,3.82l-2.06,0.85l-0.05,2.31l1.22,1.83l0.25,1.66l3.52,1.38l2.67,0.06l2.96,2.4l7.86,0.52l1.76,1.13l1.26,1.92l-1.92,1.45l-1.17,2.86l-3.78,1.71l-2.33,4.28l1.78,1.41l2.85,0.87l0.81,2.61l1.56,0.16l1.21,-0.99l0.74,0.77l1.15,0.05l4.14,4.81l-0.17,0.96l-1.91,1.45l1.37,2.31l-0.01,2.63l2.32,0.72l2.06,2.13l6.66,2.44l1.91,2.67l8.78,3.81l4.46,6.12l2.58,1.27l3.88,7.41l-1.14,0.93l-5.95,2.19l0.82,1.73l2.94,0.73l-1.66,1.94l1.23,1.61l0.06,2.19l-4.78,2.47l-0.17,1.18l1.69,1.85l-0.19,0.79l-4.65,1.66l-2.66,3.36l-0.72,2.09l-2.68,1.79l-0.03,0.64l1.7,1.4l-0.33,0.61l-1.52,0.31l-2.29,-1.73l-1.92,-0.2l-1.32,0.57l-0.01,1.53l-2.47,0.25l-2.53,3.61l-0.05,2.3l-1.77,5.74l-2.2,0.39l-0.63,1.82l-2.85,0.2l-0.86,1.34l-4.44,-3.06l3.41,-4.54l-0.13,-0.56l-1.03,-0.5l-3.04,0.4l-1.28,-0.41l-2.68,-3.81l-0.78,-2.23l-1.99,-0.74l-2.18,-1.91l-1.91,0.9l-2.93,3.31l-2.6,-0.38l-1.93,1.47l0.17,0.94l1.25,0.54l1.67,2.02l-0.24,2.5l-3.73,-2.32l-5.63,-0.26l-2.6,0.53l-5.05,2.95l-3.38,-0.86l-3.06,-0.01l-2.03,1.32l-0.72,-0.8l2.31,-3.9l-0.36,-0.6l-4.32,0.19l-0.88,1.11l-0.5,3.07l1.18,1.43l-0.75,0.49l-3.11,-0.17l-2.16,2.94l-1.27,0.14l-4.6,-1.19l-3.27,-4.85l-2.36,0.32l-2.27,2.08l-1.49,0.53l-1.13,-0.46l-1.17,-2.24l-1.69,-0.74l-1.52,2.83l0.34,1.3l-0.94,1.37l-0.22,1.97l1.87,1.48l0.56,2.11l1.71,1.58l0.0,1.69l-2.91,1.5l-3.0,0.31l-1.4,2.41l-2.57,-0.26l-2.43,0.84l-0.68,1.05l-1.07,-0.13l-1.52,0.82l-0.64,-1.43l-0.94,-0.24l-0.9,1.07l-0.45,2.68l-0.66,0.32l-3.64,-2.33l-3.09,-0.34l-3.16,-3.83l-8.48,-6.27l-2.18,0.34l-3.98,1.97l-1.44,-0.25l-1.77,-1.3l-1.26,-2.56l-2.72,-2.12l-4.38,-6.06l-0.69,-4.09l-3.04,-2.41l0.84,-2.98l1.08,-1.56l-2.02,-1.72l3.1,-1.14l1.1,-1.57l-0.43,-0.87l-1.78,-0.17l-0.57,-1.23l3.49,-4.19l1.31,-2.67l3.28,-2.49l3.76,-0.35l1.17,-0.81l-0.33,-1.33l-2.83,-1.0l-0.45,-1.63l0.64,-1.36l2.91,-2.11l0.15,-1.84l-10.11,-0.99l-2.81,-2.45l-8.25,-5.16l-0.92,-1.39l-0.26,-2.12l1.58,-2.17l6.56,-2.81l7.58,-0.66l4.83,-4.9l-0.39,-1.91l-2.15,-2.04l-1.16,-0.21l-5.06,2.97l-1.3,1.64l-1.77,0.2l0.46,-1.82l-1.4,-3.52l3.73,-2.65l1.55,-4.26l2.39,-1.46l0.69,-4.41l1.2,-2.39l3.29,-0.84l1.4,-1.97l-3.67,-3.5l-5.04,-1.11l-1.73,-1.81l-3.12,-0.34l-2.11,-1.19Z\", \"name\": \"West Midlands\"}, \"UKF\": {\"path\": \"M649.51,1087.36l-1.67,1.84l-2.08,0.24l-1.75,1.06l-6.13,0.21l-3.15,-6.94l0.23,-3.62l-0.65,-0.66l4.65,-1.19l0.8,-1.32l-7.11,-7.43l0.22,-0.75l1.11,-1.06l4.63,-1.62l0.44,-1.88l-1.65,-2.03l4.99,-2.83l-0.07,-2.61l-1.16,-1.19l1.62,-2.41l-3.81,-1.76l5.47,-1.89l1.66,-1.57l-0.23,-1.42l-3.83,-6.6l-2.64,-1.33l-4.63,-6.26l-8.74,-3.79l-2.01,-2.72l-6.65,-2.43l-1.91,-2.03l-2.28,-0.76l0.21,-2.25l-1.23,-2.06l1.76,-1.07l0.14,-1.71l-4.53,-5.18l-1.25,-0.05l-1.19,-0.87l-1.09,1.07l-1.08,-0.11l-0.72,-2.54l-3.0,-0.92l-1.3,-1.07l2.15,-3.35l3.64,-1.58l1.4,-3.13l2.0,-1.43l-1.42,-2.85l-2.23,-1.42l-7.74,-0.48l-3.06,-2.44l-2.71,-0.06l-1.16,-0.81l-1.76,-0.2l-0.29,-1.63l-1.12,-1.55l0.04,-1.8l1.31,-0.16l0.71,-0.77l0.44,-3.55l4.66,-2.53l1.1,-2.26l-0.17,-2.61l-1.89,-2.37l-0.58,-3.31l0.3,-2.52l-2.33,-3.22l-0.49,-3.68l-4.67,-3.33l-6.5,-2.18l-1.68,-2.12l-1.9,0.4l0.39,-2.0l-1.73,-1.64l-0.63,-10.94l-0.35,-1.52l-1.4,-1.76l3.1,-4.27l-2.64,-2.25l2.64,-2.81l1.51,-5.67l3.78,-0.75l1.89,-3.76l2.01,0.09l4.57,1.84l1.64,2.09l0.75,3.36l4.77,3.26l-0.45,2.19l0.52,1.58l2.65,0.8l1.23,1.97l3.45,1.14l-0.62,1.93l0.54,1.1l5.61,2.31l-2.36,1.48l-0.27,1.33l2.49,0.74l1.49,-0.29l3.57,1.76l6.28,-2.03l2.37,-1.95l3.09,-0.18l0.64,0.29l0.39,1.83l2.0,0.81l2.5,0.13l1.9,-1.77l1.84,-0.31l0.45,2.05l1.69,0.09l1.55,0.87l5.97,-0.2l3.79,-3.96l-0.53,-1.53l1.64,-0.73l0.81,-1.43l-0.29,-2.69l2.48,-2.68l1.7,-1.12l3.01,-0.09l1.31,0.62l1.11,-0.48l2.44,-2.69l0.73,-3.4l3.99,-2.63l2.08,1.6l-1.42,0.72l0.36,1.01l9.56,0.72l4.62,-4.15l0.7,-3.08l10.21,0.97l0.35,1.57l-0.97,3.01l1.74,1.59l3.24,0.22l5.33,-1.29l3.78,-1.5l-0.32,-1.76l0.89,-1.7l4.97,-0.69l1.38,-1.22l-0.25,-1.23l-1.28,-0.87l-6.03,-0.33l4.69,-2.95l5.4,1.18l2.52,-0.36l3.18,-2.95l0.23,-2.73l3.87,1.97l2.45,2.73l3.19,0.28l-2.34,3.18l1.15,3.94l-0.53,2.72l6.8,6.35l1.52,-0.05l2.5,-1.77l-1.52,-2.56l2.86,-5.47l0.97,-0.53l1.77,0.3l3.87,-1.29l6.21,4.15l4.85,1.49l1.26,1.21l0.77,3.24l3.44,1.97l-0.25,1.03l1.45,0.89l2.2,3.34l7.45,17.51l1.2,4.37l0.03,4.91l-2.18,6.68l-4.03,1.35l-7.76,6.42l-2.81,1.33l-6.88,8.3l-1.73,1.52l-3.5,1.57l-1.18,1.63l0.07,1.7l3.01,0.52l4.49,-0.86l6.55,3.46l6.55,7.75l2.42,-0.89l-1.15,2.78l1.23,2.16l-6.39,3.9l-4.24,-0.4l-4.62,2.02l-3.39,0.39l-0.78,0.93l0.37,3.39l-1.89,2.3l-2.6,0.06l-4.64,-1.24l-2.63,0.94l-1.75,-0.18l-2.98,1.48l-1.81,-0.63l-1.94,0.24l-1.66,-1.64l-5.3,1.0l-4.79,-1.84l-7.46,3.08l-2.77,0.03l-2.64,-0.76l-2.33,0.8l-0.14,0.66l1.99,2.96l-0.47,5.08l1.39,0.77l3.6,-0.42l0.03,1.67l1.3,1.33l-0.5,3.22l4.95,2.46l1.0,3.71l-3.93,4.76l-2.87,1.88l-0.88,1.57l-5.19,2.27l-0.02,2.22l2.04,2.82l0.16,1.24l-3.69,0.74l-1.92,2.29l-0.09,2.82l-1.05,1.38l-1.24,-0.21l-1.54,-1.7l-1.33,-0.41l-4.57,0.8l-0.54,1.13l0.8,4.16l-1.61,2.54l-6.26,3.48l-2.75,-0.09l-1.42,1.75l-2.78,-0.41l-1.56,2.77l-4.44,1.29l-0.24,1.56l4.35,4.57l-2.12,0.53l-0.37,2.29l-2.69,2.19l-0.59,0.1l-3.26,-5.93l-1.3,-0.41l-3.46,1.23l-2.73,-0.19l-1.39,1.32l-5.07,1.1l-2.03,1.06l-2.07,2.07l0.16,0.66l1.9,0.65Z\", \"name\": \"East Midlands\"}, \"UKE\": {\"path\": \"M668.83,917.65l1.01,-0.71l-0.13,-0.85l-2.93,-1.92l-4.37,2.88l-0.82,3.52l-2.25,2.49l-5.09,-0.19l-2.04,1.28l-2.72,2.91l0.24,2.85l-0.5,1.01l-1.92,0.86l0.49,1.69l-2.44,2.07l-0.84,1.49l-5.42,0.24l-3.01,-0.98l0.09,-1.62l-1.07,-0.47l-2.14,0.36l-1.83,1.76l-2.14,-0.15l-1.6,-0.67l-0.14,-1.5l-1.36,-0.79l-3.32,0.19l-2.51,2.01l-6.04,1.95l-3.24,-1.72l-3.49,-0.15l2.45,-1.67l0.15,-1.09l-1.07,-0.97l-4.81,-1.61l0.19,-2.95l-3.75,-1.31l-1.1,-1.89l-2.58,-0.78l0.14,-3.58l-4.77,-3.19l-0.73,-3.32l-1.78,-2.26l-4.9,-2.03l-2.24,-0.12l-6.76,-7.03l-0.93,-2.37l-2.55,-0.66l-0.54,-2.21l-0.92,-0.95l0.19,-2.05l-1.21,-2.28l-2.02,-0.25l-2.79,1.35l-1.54,-1.19l-1.22,-0.0l-1.45,-1.54l-0.72,-3.08l3.15,-3.34l0.18,-4.39l2.0,-2.09l4.26,-1.73l1.35,-2.92l-3.04,-2.19l-2.61,-2.94l-0.86,-3.28l-5.79,-2.45l-0.35,-1.99l-1.12,-1.5l-2.87,-0.4l-0.79,-1.74l-3.95,1.48l-0.82,-0.1l-1.33,-2.17l-2.87,-0.22l-0.81,-0.99l0.65,-2.17l-1.68,-2.96l-2.39,-0.36l-3.95,0.88l-1.67,-0.2l-0.63,-0.65l-0.09,-2.75l-0.81,-1.19l-4.55,-2.18l-2.11,-1.84l-0.49,-1.56l0.3,-2.4l2.48,-1.2l5.61,-6.68l0.5,-1.41l3.76,0.22l1.79,-1.65l2.36,-0.95l2.1,1.11l1.71,-0.3l0.75,-0.77l0.39,-2.18l-0.92,-2.01l0.38,-4.83l-0.73,-1.28l-2.66,-1.96l5.24,-3.67l0.14,-1.9l-0.98,-2.54l1.44,-1.88l2.6,-1.4l4.51,0.09l2.05,-1.44l2.72,1.08l3.34,-2.16l4.53,-1.35l3.2,0.83l4.36,2.14l2.55,-0.02l6.9,-3.09l0.33,-1.73l0.96,-1.06l3.82,2.6l0.63,-0.2l1.68,-3.73l0.09,-1.64l1.13,-0.17l2.0,0.64l1.23,-0.78l4.21,0.09l1.51,0.78l0.79,1.72l3.1,-0.29l1.78,2.63l3.92,2.92l1.36,-0.09l0.02,-1.64l1.93,0.17l1.78,3.45l1.54,1.0l0.96,-0.33l0.51,-1.05l-1.76,-4.01l0.35,-1.38l1.55,0.77l0.59,1.28l1.32,0.41l1.08,-1.67l1.42,0.35l0.7,-0.45l0.64,0.34l1.01,2.68l2.3,0.0l0.92,0.6l6.78,-3.02l1.23,-1.48l2.68,-0.68l7.5,0.92l3.46,-0.81l4.03,1.47l4.52,-0.88l3.87,1.58l4.37,-1.07l3.58,1.0l0.51,-0.38l0.05,-3.34l0.66,-1.55l1.16,-1.14l2.2,-0.77l0.83,-1.08l18.34,9.39l2.36,1.89l0.95,1.52l0.29,3.37l5.0,3.72l1.25,1.82l2.49,5.72l0.36,3.26l1.94,1.78l-0.35,1.73l2.33,2.55l0.85,0.71l3.47,0.76l3.75,2.12l1.36,4.69l2.41,2.13l10.67,3.5l2.52,1.86l-7.15,3.22l-2.75,2.63l-2.13,5.06l1.88,3.29l4.06,11.43l24.61,30.35l1.31,3.71l-1.01,3.61l-0.95,0.72l1.22,-2.37l0.22,-2.42l-7.01,-3.66l-1.88,-0.57l-1.89,0.32l-5.14,2.08l-5.64,-1.36l-9.66,-9.67l-3.28,-1.96l-4.04,-0.5l-10.85,3.0l-6.82,0.0l-2.91,0.56l-3.0,-2.18l-5.15,-0.46l-1.93,0.51l-6.12,3.63l3.09,1.87l1.82,-1.84l4.72,-1.0l1.9,0.42l6.01,3.61l3.8,-1.99l15.33,-2.31l2.19,0.77l7.8,10.16l3.95,1.72l4.19,3.49l4.25,0.8l5.39,5.02l-3.2,0.99l-1.94,-0.27l-1.36,0.82l-2.98,5.7l0.25,1.33l1.18,1.11l-2.77,1.47l-2.45,-2.78l-3.9,-2.96l0.49,-2.75l-1.12,-3.82l2.23,-2.43l0.06,-1.14l-3.49,-0.54l-2.51,-2.75l-4.26,-2.17l-1.0,0.9l0.05,2.25l-2.94,2.74l-1.97,0.24l-5.79,-1.15l-5.22,3.28l0.24,1.2l6.44,0.35l0.88,1.17l-0.77,0.59l-5.07,0.71l-1.38,2.27l0.42,1.51l-3.33,1.17l-5.21,1.26l-2.85,-0.19l-1.21,-1.1l0.99,-2.67l-0.66,-2.3l-10.99,-1.15l-1.06,3.41l-4.1,3.84l-8.61,-0.59Z\", \"name\": \"Yorkshire and the Humber\"}, \"UKD\": {\"path\": \"M482.88,736.0l1.41,-3.57l0.48,-4.03l3.91,1.37l2.29,-0.18l2.35,-3.37l3.82,-1.8l5.24,-6.2l6.51,-2.49l2.45,-1.36l2.74,-2.59l2.29,5.33l1.23,1.46l3.72,1.1l1.0,2.5l2.72,1.59l0.62,1.05l3.92,-0.62l1.12,0.58l-0.52,0.52l0.02,2.13l0.93,1.91l-6.54,3.21l-0.69,0.98l-0.07,2.23l-1.99,2.23l0.13,0.63l2.16,0.99l0.62,2.26l1.13,1.51l-1.32,0.86l-0.89,2.6l-2.05,1.66l2.35,2.98l-0.34,2.57l0.58,1.54l2.74,2.06l3.1,0.4l8.54,-5.0l3.24,4.27l4.69,3.14l-1.83,6.37l-2.26,4.79l0.95,1.16l5.34,2.74l-0.43,1.67l-1.75,1.85l1.8,4.85l6.62,4.38l1.49,2.42l2.45,0.54l0.41,4.77l0.65,1.51l-0.3,1.47l-1.08,-0.25l-2.12,1.49l-4.45,-0.11l-2.77,1.49l-1.82,2.62l1.03,3.83l-5.36,3.76l0.4,1.48l2.5,1.55l0.48,0.94l-0.43,4.43l0.92,2.13l-0.27,1.75l-1.76,0.68l-2.22,-1.11l-2.62,1.06l-1.55,1.55l-3.88,-0.22l-6.51,8.43l-2.58,1.35l-0.32,2.88l0.67,1.93l2.24,1.95l4.45,2.1l0.59,0.78l0.09,2.78l0.95,1.13l2.11,0.35l4.08,-0.88l2.01,0.32l1.24,2.69l-0.7,1.98l1.08,1.32l3.09,0.36l1.31,2.16l1.32,0.11l3.47,-1.3l0.6,1.43l2.82,0.37l1.47,3.51l5.8,2.46l0.7,3.08l2.72,3.06l2.75,1.72l-1.06,2.23l-4.09,1.61l-2.31,2.37l-0.18,4.39l-3.21,3.41l0.62,3.63l1.76,1.99l1.4,0.1l1.89,1.29l4.11,-1.42l1.2,2.17l-0.28,1.76l1.0,1.17l0.57,2.34l2.6,0.72l0.99,2.41l6.66,6.9l-1.7,3.51l-3.92,0.85l-1.64,5.94l-2.65,2.88l0.35,1.4l2.27,1.32l-3.11,4.03l1.53,2.15l0.46,9.67l0.43,2.64l1.66,1.44l-0.45,2.33l-2.29,2.31l-2.21,0.22l-3.17,2.15l-2.66,0.0l-1.94,-1.03l-1.36,0.09l-0.5,0.71l0.54,2.1l-1.98,0.4l-7.61,7.41l-2.07,0.7l-2.81,-0.19l-2.82,2.74l-2.8,0.68l-0.72,1.96l0.62,4.15l-0.88,1.03l-3.77,1.25l-0.82,1.7l-1.42,0.83l-2.39,0.31l-2.85,-0.86l-1.5,1.59l-2.39,-0.96l-1.6,0.24l-1.13,-2.65l-2.88,-1.04l-9.18,2.21l-3.46,-1.72l-4.17,-0.84l-3.13,-3.81l-1.37,-5.08l-2.31,-4.27l-5.11,-4.84l3.77,-2.73l-0.49,-2.72l-3.35,-3.16l-5.56,-3.67l-5.38,-1.32l-0.08,-1.94l-4.39,-6.83l-4.27,-5.05l-0.08,-1.57l0.78,-0.98l6.91,-1.67l3.11,-2.02l1.69,0.1l1.86,1.85l5.17,10.97l3.73,3.3l2.76,1.01l2.68,-0.09l1.2,-1.6l2.66,0.72l2.8,-0.43l2.37,-1.14l-0.24,-1.89l0.79,-1.6l0.55,-0.5l1.57,0.09l1.62,-1.13l-0.24,-0.7l-1.25,-0.06l-4.46,0.86l-1.25,0.75l-0.55,1.55l-1.25,0.52l-3.67,-0.33l-3.62,-1.12l-3.25,-1.89l-4.74,-4.94l-10.41,-19.31l1.17,-3.25l5.67,-7.66l6.05,-6.5l4.58,-3.27l-0.3,-0.66l-7.37,-0.08l-3.01,-1.09l-2.25,-2.64l-0.6,-3.81l0.99,-8.89l-0.97,-3.25l1.22,-1.82l1.88,-0.94l7.88,-2.44l1.25,-0.12l1.76,0.9l2.92,-2.56l-0.58,-1.64l2.71,-2.26l0.52,-2.15l-0.6,-0.42l-2.9,1.34l-2.45,0.22l-1.65,-3.28l4.91,-5.31l2.89,-1.02l2.71,-4.4l-4.92,-8.12l3.66,-2.18l1.31,-2.09l0.0,-2.51l-0.99,-0.39l-1.83,3.31l-7.22,4.03l-1.46,3.1l-1.42,0.72l-3.69,0.22l-0.98,-0.65l-1.56,-3.28l0.73,-1.45l-0.66,-1.45l-1.91,-1.79l-1.5,0.45l-0.13,3.57l-1.1,3.73l-4.84,6.22l-2.51,1.32l0.05,3.38l-3.26,-3.39l-2.68,-0.4l-1.57,-1.12l0.65,-5.46l-1.32,-1.4l2.87,-0.96l0.73,-3.57l-0.06,-6.4l-0.57,-0.38l-1.36,0.64l-0.89,1.41l-0.87,3.09l0.65,2.2l-5.89,1.04l-1.66,-1.35l-6.77,-8.6l-0.43,-1.75l0.75,-2.89l-0.93,-3.27l-2.32,-1.08l-2.88,-4.86l-2.1,-1.57l-8.12,-9.2l-1.83,-1.0l-1.6,-2.36l1.79,-1.81l1.83,-4.16l2.31,-9.37l4.12,-8.38l1.15,-1.38l2.93,-1.21l2.56,-3.29l0.74,-2.28l-0.75,-2.16l4.42,-10.09l1.9,-1.85l1.42,-0.27l3.46,1.94l4.61,-1.67l0.05,-0.71l-1.1,-0.69l-3.79,-1.56l2.94,-2.28l5.29,-1.29l2.8,1.62l5.05,0.98l7.43,-1.79l1.72,-1.33l-5.95,-0.3l3.92,-1.36l1.53,0.49l0.52,-0.38l-0.26,-1.27l-2.17,-0.79Z\", \"name\": \"North West\"}, \"UKC\": {\"path\": \"M620.17,725.93l3.72,8.4l3.75,3.08l0.58,1.16l-0.02,4.58l0.8,1.66l-0.17,1.05l5.12,14.95l1.87,3.83l3.18,3.38l5.72,2.39l-1.37,0.21l-0.38,0.95l2.28,4.42l-1.21,1.21l-2.01,0.73l0.06,1.49l2.15,0.92l0.71,-0.79l0.88,1.68l1.04,-0.16l0.84,-0.95l0.59,-2.63l2.64,2.19l5.33,0.91l4.23,2.26l18.1,4.64l-4.17,2.97l-0.75,1.85l-0.04,2.9l-3.18,-0.89l-4.51,1.05l-1.83,-1.2l-1.96,-0.36l-4.62,0.88l-3.82,-1.45l-3.61,0.8l-7.65,-0.91l-2.88,0.73l-1.31,1.52l-6.43,2.87l-0.68,-0.55l-2.17,0.0l-0.59,-2.26l-1.27,-0.81l-2.83,0.33l-0.58,1.42l-0.77,-0.24l-1.35,-1.96l-1.32,-0.2l-1.09,0.94l0.06,1.52l1.71,3.64l-0.73,0.66l-2.79,-4.29l-2.9,-0.35l-0.42,0.5l0.34,1.26l-0.45,0.07l-3.71,-2.76l-1.09,-2.18l-0.98,-0.63l-2.73,0.43l-0.91,-1.74l-1.73,-0.9l-4.62,-0.14l-1.06,0.75l-1.88,-0.6l-1.74,0.22l-1.92,5.33l-3.91,-2.43l-1.58,1.45l-0.19,1.53l-6.61,2.96l-2.03,0.03l-4.31,-2.11l-3.42,-0.89l-4.91,1.4l-3.3,2.12l-0.93,-0.47l0.36,-1.78l-0.67,-1.68l-0.43,-5.01l-2.63,-0.73l-1.57,-2.46l-6.48,-4.23l-1.61,-4.35l2.19,-2.65l-0.18,-1.35l-6.17,-3.73l2.22,-4.25l1.76,-7.14l-4.88,-3.27l-3.64,-4.47l-8.67,5.02l-2.68,-0.3l-2.41,-1.74l-0.48,-1.26l0.56,-1.36l-0.26,-1.37l-2.24,-2.71l1.72,-1.05l1.06,-2.81l1.53,-1.39l-1.3,-1.67l-0.65,-2.37l-2.06,-1.1l1.73,-1.93l0.63,-3.06l6.68,-3.24l-0.85,-2.66l0.57,-2.9l-2.01,-0.94l-3.35,0.77l-0.67,-1.03l-2.69,-1.57l-1.11,-2.59l-3.61,-1.0l-3.55,-6.81l1.77,-2.27l3.48,-2.34l0.35,-1.7l-0.62,-2.21l0.44,-0.65l5.85,-5.4l7.61,-5.53l2.93,-0.62l4.29,1.22l2.51,-1.51l2.19,-3.64l2.5,-0.9l2.04,-1.59l3.51,-0.8l3.87,-2.95l0.41,-2.5l-2.45,-2.98l-0.37,-2.24l-3.44,-4.91l-1.91,-4.82l-2.05,-2.94l-1.96,-1.12l-0.22,-1.49l7.28,-1.34l5.37,-6.3l1.18,-2.22l6.57,-4.59l1.19,-4.04l4.31,-1.59l12.42,13.25l2.14,4.3l1.91,1.13l1.32,2.17l1.19,-0.1l1.29,-1.43l0.74,0.08l1.92,1.3l0.49,1.12l-1.56,0.4l0.23,1.11l1.31,0.52l4.7,-0.5l5.64,3.23l-0.32,2.34l1.25,1.59l-0.74,0.47l-0.19,1.16l2.42,1.86l-0.65,1.92l1.88,1.49l0.33,1.28l0.31,8.05l-0.68,4.95l0.59,2.78l2.08,3.05l0.23,1.97l-1.2,2.9l0.14,1.03l1.1,3.15l2.9,2.95l-0.56,1.68l1.76,2.46l-1.18,3.09l0.36,1.51l1.89,2.71l1.4,5.98l1.82,0.93l0.28,0.91Z\", \"name\": \"North East\"}}, \"height\": 1327.4309048516907, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-us-aea-en.js",
    "content": "$.fn.vectorMap('addMap', 'us_aea_en',{\"insets\": [{\"width\": 220, \"top\": 440, \"height\": 146.9158157558812, \"bbox\": [{\"y\": -8441281.712315228, \"x\": -5263934.893342895}, {\"y\": -6227992.545028123, \"x\": -1949631.2950683108}], \"left\": 0}, {\"width\": 80, \"top\": 460, \"height\": 129.05725678001465, \"bbox\": [{\"y\": -4207380.690946597, \"x\": -5958501.652314129}, {\"y\": -3658201.4570359783, \"x\": -5618076.48127754}], \"left\": 245}, {\"width\": 900.0, \"top\": 0, \"height\": 550.2150229714246, \"bbox\": [{\"y\": -5490839.2352678, \"x\": -2029243.6460439637}, {\"y\": -2690044.485299302, \"x\": 2552083.9617675776}], \"left\": 0}], \"paths\": {\"US-VA\": {\"path\": \"M682.42,290.04l1.61,-0.93l1.65,-0.48l1.12,-0.95l3.57,-1.69l0.74,-2.33l0.82,-0.19l2.32,-1.54l0.05,-1.81l2.04,-1.86l-0.13,-1.58l0.26,-0.42l5.0,-4.09l4.76,-6.0l0.09,0.63l0.96,0.54l0.33,1.37l1.32,0.74l0.71,0.81l1.46,0.09l0.79,0.65l1.3,0.48l1.41,-0.09l0.79,-0.41l0.76,-1.22l1.17,-0.57l0.53,-1.38l2.72,1.49l1.42,-1.1l2.25,-0.99l0.76,0.06l1.08,-0.97l0.33,-0.82l-0.48,-0.96l0.23,-0.42l1.9,0.58l3.26,-2.62l0.3,-0.1l0.51,0.73l0.66,-0.07l2.38,-2.34l0.17,-0.85l-0.49,-0.51l0.99,-1.12l0.1,-0.6l-0.28,-0.51l-1.0,-0.46l0.71,-3.03l2.6,-4.8l0.55,-2.15l-0.01,-1.91l1.61,-2.55l-0.22,-0.94l0.24,-0.84l0.5,-0.48l0.39,-1.7l-0.0,-3.18l1.23,0.19l1.18,1.73l3.8,0.43l0.59,-0.28l1.05,-2.52l0.2,-2.36l0.71,-1.05l-0.04,-1.61l0.76,-2.31l1.78,0.75l0.65,-0.17l1.3,-3.3l0.57,0.05l0.59,-0.39l0.52,-1.2l0.81,-0.68l0.44,-1.8l1.38,-2.43l-0.35,-2.57l0.54,-1.76l-0.3,-2.01l9.18,4.58l0.59,-0.29l0.63,-4.0l2.6,-0.07l0.63,0.57l1.05,0.23l-0.5,1.74l0.6,0.88l1.61,0.85l2.52,-0.04l1.03,1.18l1.64,0.12l1.94,1.52l0.57,2.53l-0.94,0.78l-0.45,0.02l-0.3,0.43l0.13,0.71l-0.61,-0.05l-0.49,0.59l-0.37,2.5l0.07,2.29l-0.43,0.25l0.01,0.6l1.05,0.77l-0.36,0.14l-0.17,0.6l0.44,0.3l1.64,-0.08l1.38,-0.61l1.77,-1.61l0.39,0.58l-0.58,0.35l0.02,0.58l1.9,1.07l0.64,1.08l1.69,0.35l1.37,-0.11l0.95,0.49l0.82,-0.65l1.05,-0.08l0.33,0.56l1.26,0.63l-0.1,0.55l0.36,0.55l0.94,-0.23l0.41,0.56l3.96,0.88l0.25,1.12l-0.85,-0.41l-0.57,0.44l0.89,1.74l-0.35,0.57l0.62,0.78l-0.44,0.89l0.24,0.59l-1.36,-0.36l-0.59,-0.72l-0.67,0.18l-0.1,0.43l-2.44,-2.3l-0.56,0.05l-0.38,-0.56l-0.52,0.32l-1.36,-1.51l-1.23,-0.43l-2.86,-2.72l-1.34,-0.12l-1.11,-0.81l-1.17,0.05l-0.39,0.52l0.47,0.71l1.1,-0.01l0.63,0.68l1.33,0.07l0.6,0.43l0.62,1.4l1.46,1.11l1.13,0.34l1.53,1.8l2.55,0.94l1.4,1.89l2.14,-0.02l0.56,0.41l0.72,0.06l-0.61,0.7l0.3,0.49l2.03,0.34l0.26,0.72l0.55,0.1l0.13,1.67l-1.0,-0.75l-0.39,0.21l-1.13,-1.0l-0.58,0.29l0.1,0.82l-0.31,0.68l0.7,0.7l-0.18,0.6l1.12,0.32l-0.86,0.44l-2.12,-0.73l-1.39,-1.38l-0.83,-0.32l-2.23,-1.87l-0.58,0.11l-0.22,0.53l0.26,0.81l0.64,0.21l3.81,3.15l2.69,1.12l1.28,-0.33l0.45,1.07l1.27,0.26l-0.44,0.67l0.3,0.56l0.93,-0.19l0.0,1.24l-0.92,0.41l-0.57,0.73l-0.71,-0.93l-3.2,-1.58l-0.29,-1.16l-0.59,-0.59l-0.87,-0.11l-1.2,0.67l-1.71,-0.44l-0.36,-1.15l-0.71,-0.05l-0.05,1.32l-0.33,0.41l-1.43,-1.32l-0.51,0.09l-0.48,0.57l-0.65,-0.4l-0.99,0.45l-2.23,-0.1l-0.37,0.94l0.34,0.46l1.9,0.22l1.4,-0.31l0.85,0.24l0.56,-0.69l0.63,0.88l1.34,0.43l1.95,-0.31l1.5,0.71l0.67,-0.63l0.94,2.47l3.16,1.23l0.37,0.91l-0.57,1.03l0.56,0.44l1.72,-1.32l0.88,-0.02l0.83,0.65l0.8,-0.26l-0.61,-0.9l-0.2,-1.17l3.78,0.08l1.13,-0.44l1.89,3.23l-0.46,0.71l0.65,3.09l-1.19,-0.58l-0.02,0.88l-30.95,7.83l-37.19,8.41l-19.52,3.35l-7.08,0.85l-0.46,-0.26l-4.24,0.64l-0.82,0.62l-28.2,5.01ZM781.15,223.32l0.14,0.09l-0.06,0.07l-0.01,-0.03l-0.07,-0.12ZM808.05,244.59l0.53,-1.14l-0.26,-0.54l-0.36,-0.08l0.58,-0.98l-0.39,-0.71l-0.03,-0.49l0.44,-0.35l-0.17,-0.73l0.62,-0.3l0.23,-0.6l0.14,-2.33l1.01,-0.39l-0.12,-0.9l0.48,-0.14l-0.26,-1.53l-0.79,-0.4l0.87,-0.57l0.1,-1.03l2.69,-1.11l0.36,2.48l-1.08,4.2l-0.22,2.38l0.33,1.09l-0.34,0.97l-0.6,-0.79l-0.81,0.15l-0.39,0.95l0.27,0.37l-0.65,0.46l-0.3,0.85l0.17,1.05l-0.31,1.46l0.38,2.47l-0.6,0.6l0.07,1.33l-1.37,-1.9l0.23,-0.94l-0.33,-1.57l0.28,-0.97l-0.38,-0.3Z\", \"name\": \"Virginia\"}, \"US-PA\": {\"path\": \"M716.46,159.99l0.63,-0.19l4.3,-3.73l1.13,5.2l0.48,0.31l34.84,-7.93l34.28,-8.64l1.42,0.58l0.71,1.39l0.64,0.13l0.77,-0.33l1.24,0.59l0.14,0.85l0.81,0.41l-0.16,0.58l0.89,2.69l1.9,2.07l2.12,0.75l2.21,-0.2l0.72,0.79l-0.89,0.87l-0.73,1.49l-0.17,2.25l-1.41,3.35l-1.37,1.58l0.04,0.79l1.79,1.72l-0.31,1.65l-0.84,0.43l-0.22,0.66l0.14,1.48l1.04,2.87l0.52,0.25l1.2,-0.18l1.18,2.39l0.95,0.58l0.66,-0.26l0.6,0.9l4.23,2.75l0.12,0.41l-1.29,0.93l-3.71,4.22l-0.23,0.76l0.17,0.9l-1.36,1.13l-0.84,0.15l-1.33,1.08l-0.33,0.66l-1.72,-0.12l-2.03,0.84l-1.15,1.37l-0.41,1.39l-37.23,9.21l-39.1,8.66l-10.03,-48.21l1.92,-1.22l3.08,-3.04Z\", \"name\": \"Pennsylvania\"}, \"US-TN\": {\"path\": \"M571.72,341.09l0.86,-0.84l0.29,-1.37l1.0,0.04l0.65,-0.79l-0.99,-4.89l1.41,-1.93l0.06,-1.32l1.18,-0.46l0.36,-0.48l-0.63,-1.31l0.53,-0.65l0.05,-0.56l-0.89,-1.33l2.55,-1.57l1.09,-1.13l-0.14,-0.84l-0.85,-0.53l0.14,-0.19l0.34,-0.16l0.85,0.37l0.46,-0.33l-0.27,-1.31l-0.85,-0.9l0.06,-0.71l0.51,-1.43l1.0,-1.11l-1.35,-2.06l1.37,-0.21l0.61,-0.55l-0.13,-0.64l-1.17,-0.82l0.82,-0.15l0.58,-0.54l0.13,-0.69l-0.59,-1.38l0.02,-0.36l0.37,0.53l0.47,0.08l0.58,-0.29l0.6,-0.86l23.67,-2.81l0.35,-0.41l-0.1,-1.35l-0.84,-2.39l2.98,-0.08l0.82,0.58l22.79,-3.55l7.64,-0.46l7.5,-0.86l8.82,-1.42l24.01,-3.1l1.11,-0.6l29.3,-5.2l0.73,-0.6l3.56,-0.54l-0.4,1.44l0.43,0.85l-0.4,2.0l0.36,0.82l-1.15,-0.03l-1.71,1.79l-1.21,3.89l-0.55,0.7l-0.56,0.08l-0.63,-0.74l-1.44,-0.02l-2.66,1.73l-1.42,2.73l-0.96,0.89l-0.34,-0.34l-0.13,-1.05l-0.73,-0.54l-0.53,0.15l-2.3,1.81l-0.29,1.32l-0.93,-0.24l-0.9,0.48l-0.16,0.77l0.32,0.73l-0.85,2.18l-1.29,0.06l-1.75,1.14l-1.28,1.24l-0.61,1.06l-0.78,0.27l-2.28,2.46l-4.04,0.78l-2.58,1.7l-0.49,1.09l-0.88,0.55l-0.55,0.81l-0.18,2.88l-0.35,0.6l-1.65,0.52l-0.89,-0.16l-1.06,1.14l0.21,5.24l-20.21,3.32l-21.62,3.04l-25.56,2.95l-0.34,0.31l-7.39,0.9l-28.73,3.17Z\", \"name\": \"Tennessee\"}, \"US-ID\": {\"path\": \"M132.38,121.39l-0.34,-0.44l0.08,-1.99l0.53,-1.74l1.42,-1.22l2.11,-3.59l1.68,-0.92l1.39,-1.53l1.08,-2.15l0.05,-1.22l2.21,-2.41l1.43,-2.7l0.37,-1.37l2.04,-2.26l1.89,-2.81l0.03,-1.01l-0.79,-2.95l-2.13,-1.94l-0.87,-0.36l-0.85,-1.61l-0.41,-3.02l-0.59,-1.19l0.94,-1.19l-0.12,-2.35l-1.04,-2.69l0.46,-0.98l9.67,-54.45l13.39,2.35l-3.54,20.72l1.29,2.89l1.0,1.27l0.27,1.55l1.17,1.76l-0.12,0.83l0.39,1.14l-0.99,0.95l0.83,1.76l-0.83,0.11l-0.28,0.71l1.93,1.68l1.03,2.04l2.24,1.22l0.54,1.58l1.09,1.33l1.49,2.79l0.08,0.68l1.64,1.81l0.01,1.88l1.79,1.71l-0.07,1.35l0.74,0.19l0.9,-0.58l0.36,0.46l-0.36,0.55l0.07,0.54l1.11,0.96l1.61,0.15l1.81,-0.36l-0.63,2.61l-0.99,0.54l0.25,1.14l-1.83,3.73l0.06,1.72l-0.81,0.07l-0.37,0.54l0.6,1.33l-0.62,0.9l-0.03,1.16l0.97,0.93l-0.37,0.81l0.28,1.01l-1.57,0.43l-1.21,1.41l0.1,1.11l0.46,0.77l-0.13,0.74l-0.83,0.77l-0.2,1.52l1.48,0.63l1.38,1.79l0.78,0.27l1.08,-0.35l0.56,-0.8l1.85,-0.41l1.21,-1.28l0.81,-0.29l0.15,-0.76l0.78,0.81l0.23,0.71l1.06,0.64l-0.42,1.23l0.73,0.95l-0.34,1.38l0.57,1.34l-0.21,1.61l1.54,2.64l0.31,1.73l0.82,0.37l0.67,2.08l-0.18,0.98l-0.76,0.64l0.51,1.9l1.24,1.16l0.3,0.79l0.81,0.08l0.86,-0.37l1.04,0.93l1.06,2.79l-0.5,0.81l0.89,1.83l-0.28,0.6l0.11,0.98l2.29,2.41l0.97,-0.14l-0.01,-1.14l1.07,-0.89l0.93,-0.22l4.53,1.62l0.69,-0.32l0.67,-1.35l1.19,-0.39l2.25,0.93l3.3,-0.1l0.96,0.88l2.29,-0.58l3.23,0.78l0.45,-0.49l-0.67,-0.76l0.26,-1.06l0.74,-0.48l-0.07,-0.96l1.23,-0.51l0.48,0.37l1.07,2.11l0.12,1.11l1.36,1.95l0.73,0.45l-6.27,53.86l-47.48,-6.32l-46.97,-7.73l6.88,-39.17l1.12,-1.18l1.07,-2.67l-0.21,-1.75l0.74,-0.15l0.77,-1.62l-0.9,-1.27l-0.18,-1.2l-1.24,-0.08l-0.64,-0.81l-0.88,0.29Z\", \"name\": \"Idaho\"}, \"US-NV\": {\"path\": \"M139.36,329.2l-12.7,-16.93l-36.59,-51.1l-25.35,-34.52l13.7,-64.19l46.89,9.24l46.99,7.74l-18.72,125.83l-0.9,1.16l-0.99,2.19l-0.44,0.17l-1.34,-0.22l-0.98,-2.24l-0.7,-0.63l-1.41,0.22l-1.95,-1.02l-1.6,0.23l-1.78,0.96l-0.76,2.48l0.88,2.59l-0.6,0.97l-0.24,1.31l0.38,3.12l-0.76,2.54l0.77,3.71l-0.13,3.07l-0.3,1.07l-1.04,0.31l-0.12,0.51l0.32,0.8l-0.52,0.62Z\", \"name\": \"Nevada\"}, \"US-TX\": {\"path\": \"M276.16,412.59l33.07,1.99l32.79,1.35l0.41,-0.39l3.6,-98.71l25.86,0.61l26.29,0.22l0.05,42.09l0.44,0.4l1.02,-0.13l0.78,0.28l3.74,3.82l1.66,0.21l0.88,-0.58l2.49,0.64l0.6,-0.68l0.11,-1.05l0.6,0.76l0.92,0.22l0.38,0.93l0.77,0.78l-0.01,1.64l0.52,0.83l2.85,0.42l1.25,-0.2l1.38,0.89l2.78,0.69l1.82,-0.56l0.63,0.1l1.89,1.8l1.4,-0.11l1.25,-1.43l2.43,0.26l1.67,-0.46l0.1,2.28l0.91,0.67l1.62,0.4l-0.04,2.09l1.56,0.79l1.82,-0.66l1.57,-1.68l1.02,-0.65l0.41,0.19l0.45,1.64l2.01,0.2l0.24,1.05l0.72,0.48l1.47,-0.21l0.88,-0.93l0.39,0.33l0.59,-0.08l0.61,-0.99l0.26,0.41l-0.45,1.23l0.14,0.76l0.67,1.14l0.78,0.42l0.57,-0.04l0.6,-0.5l0.68,-2.36l0.91,-0.65l0.35,-1.54l0.57,-0.14l0.4,0.14l0.29,0.99l0.57,0.64l1.21,0.02l0.83,0.5l1.26,-0.2l0.68,-1.34l0.48,0.15l-0.13,0.7l0.49,0.69l1.21,0.45l0.49,0.72l1.52,-0.05l1.49,1.74l0.52,0.02l0.63,-0.62l0.08,-0.71l1.49,-0.1l0.93,-1.43l1.88,-0.41l1.66,-1.13l1.52,0.83l1.51,-0.22l0.29,-0.83l2.29,-0.73l0.53,-0.55l0.5,0.32l0.38,0.88l1.82,0.42l1.69,-0.06l1.86,-1.14l0.41,-1.05l1.06,0.31l2.24,1.56l1.16,0.17l1.79,2.08l2.14,0.41l1.04,0.92l0.76,-0.11l2.48,0.85l1.04,0.04l0.37,0.79l1.38,0.97l1.45,-0.12l0.39,-0.72l0.8,0.36l0.88,-0.4l0.92,0.35l0.76,-0.15l0.64,0.36l2.23,34.03l1.51,1.67l1.3,0.82l1.25,1.87l0.57,1.63l-0.1,2.64l1.0,1.21l0.85,0.4l-0.12,0.85l0.75,0.54l0.28,0.87l0.65,0.7l-0.19,1.17l1.0,1.02l0.59,1.63l0.5,0.34l0.55,-0.1l-0.16,1.71l0.81,1.22l-0.64,0.25l-0.35,0.68l0.77,1.27l-0.55,0.89l0.19,1.39l-0.75,2.69l-0.74,0.85l-0.36,1.54l-0.79,1.13l0.64,2.0l-0.83,2.28l0.17,1.07l0.83,1.2l-0.19,1.01l0.49,1.6l-0.24,1.41l-1.13,1.67l-1.02,0.2l-1.76,3.37l-0.04,1.06l1.79,2.37l-3.43,0.08l-7.37,3.78l-0.02,-0.43l-2.19,-0.46l-3.24,1.07l1.09,-3.51l-0.3,-1.21l-0.8,-0.76l-0.62,-0.07l-1.52,0.85l-0.99,2.0l-1.56,-0.96l-1.64,0.12l-0.07,0.63l0.89,0.62l0.0,1.06l0.56,0.39l-0.47,0.69l0.07,1.02l1.63,0.64l-0.62,0.71l0.49,0.97l0.91,0.23l0.28,0.37l-0.4,1.25l-0.45,-0.12l-0.97,0.81l-1.72,2.25l-1.18,-0.4l-0.49,0.12l0.32,1.0l0.08,2.55l-1.85,1.49l-1.91,2.11l-0.96,0.37l-4.1,2.9l-3.3,0.45l-2.54,1.06l-0.2,1.12l-0.75,-0.34l-2.04,0.89l-0.33,-0.34l-1.11,0.18l0.43,-0.87l-0.52,-0.6l-1.43,0.22l-1.22,1.08l-0.6,-0.62l-0.11,-1.2l-1.38,-0.81l-0.5,0.44l0.65,1.44l0.01,1.12l-0.71,0.09l-0.54,-0.44l-0.75,-0.0l-0.55,-1.34l-1.46,-0.37l-0.58,0.39l0.04,0.54l0.94,1.7l0.03,1.24l0.58,0.37l0.36,-0.16l1.13,0.78l-0.75,0.37l-0.27,0.54l0.15,0.36l0.7,0.23l1.08,-0.54l0.96,0.6l-4.27,2.42l-0.57,-0.13l-0.37,-1.44l-0.5,-0.18l-1.13,-1.46l-0.49,-0.03l-0.48,0.51l0.1,0.63l-0.62,0.34l-0.05,0.51l1.18,1.61l-0.31,1.04l0.33,0.85l-1.66,1.79l-0.37,0.2l0.37,-0.64l-0.18,-0.72l0.25,-0.73l-0.46,-0.67l-0.52,0.17l-0.71,1.1l0.26,0.72l-0.39,0.95l-0.07,-1.13l-0.52,-0.55l-1.95,1.29l-0.78,-0.33l-0.7,0.52l0.07,0.75l-0.81,0.99l0.02,0.49l1.25,0.64l0.03,0.56l0.78,0.28l0.7,-1.41l0.86,-0.41l0.01,0.62l-2.82,4.36l-1.23,-1.0l-1.36,0.38l-0.32,-0.34l-2.4,0.39l-0.46,-0.31l-0.65,0.16l-0.18,0.58l0.41,0.61l0.55,0.38l1.53,0.03l-0.01,0.91l0.55,0.64l2.07,1.03l-2.7,7.63l-0.2,0.1l-0.38,-0.54l-0.34,0.1l0.18,-0.76l-0.57,-0.43l-2.35,1.95l-1.72,-2.36l-1.19,-0.91l-0.61,0.4l0.09,0.52l1.44,2.0l-0.11,0.82l-0.93,-0.09l-0.33,0.63l0.51,0.56l1.88,0.07l2.14,0.72l2.08,-0.72l-0.43,1.75l0.24,0.77l-0.98,0.7l0.37,1.59l-1.12,0.14l-0.43,0.41l0.4,2.11l-0.33,1.6l0.45,0.64l0.84,0.24l0.87,2.86l0.71,2.81l-0.91,0.82l0.62,0.49l-0.08,1.28l0.72,0.3l0.18,0.61l0.58,0.29l0.4,1.79l0.68,0.31l0.45,3.22l1.46,0.62l-0.52,1.1l0.31,1.07l-0.63,0.77l-0.84,-0.05l-0.53,0.44l0.08,1.31l-0.49,-0.33l-0.49,0.25l-0.39,-0.67l-1.49,-0.45l-2.92,-2.53l-2.2,-0.18l-0.81,-0.51l-4.2,0.09l-0.9,0.42l-0.78,-0.63l-1.06,0.25l-1.25,-0.2l-1.45,-0.7l-0.72,-0.97l-0.6,-0.14l-0.21,-0.72l-1.17,-0.49l-0.99,-0.02l-1.98,-0.87l-1.45,0.39l-0.83,-1.09l-0.6,-0.21l-1.43,-1.38l-1.96,0.01l-1.47,-0.64l-0.86,0.12l-1.62,-0.41l0.28,-1.26l-0.54,-1.01l-0.96,-0.35l-1.65,-6.03l-2.77,-3.02l-0.29,-1.12l-1.08,-0.75l0.35,-0.77l-0.24,-0.76l0.34,-2.18l-0.45,-0.96l-1.04,-1.01l0.65,-1.99l0.05,-1.19l-0.18,-0.7l-0.54,-0.33l-0.15,-1.81l-1.85,-1.44l-0.85,0.21l-0.29,-0.41l-0.81,-0.11l-0.74,-1.31l-2.22,-1.71l0.01,-0.69l-0.51,-0.58l0.12,-0.86l-0.97,-0.92l-0.08,-0.75l-1.12,-0.61l-1.3,-2.88l-2.66,-1.48l-0.38,-0.91l-1.13,-0.59l-0.06,-1.16l-0.82,-1.19l-0.59,-1.95l0.41,-0.22l-0.04,-0.73l-1.03,-0.49l-0.26,-1.29l-0.81,-0.57l-0.94,-1.74l-0.61,-2.38l-1.85,-2.36l-0.87,-4.24l-1.81,-1.34l0.05,-0.7l-0.75,-1.21l-3.96,-2.67l-0.71,-1.86l-1.82,-0.62l-1.44,-0.99l-0.01,-1.63l-0.6,-0.39l-0.88,0.24l-0.12,-0.77l-0.98,-0.33l-0.8,-2.08l-0.57,-0.47l-0.46,0.12l-0.46,-0.44l-0.86,0.27l-0.14,-0.6l-0.44,-0.31l-0.47,0.15l-0.25,0.61l-1.05,0.16l-2.89,-0.47l-0.39,-0.38l-1.48,-0.03l-0.79,0.29l-0.77,-0.44l-2.67,0.27l-3.92,-2.08l-1.35,0.86l-0.64,1.61l-1.98,-0.17l-0.52,0.44l-0.49,-0.17l-1.05,0.49l-1.33,0.14l-3.22,6.4l-0.18,1.77l-0.76,0.67l-0.38,1.8l0.35,0.59l-1.99,1.01l-0.72,1.3l-1.11,0.65l-1.12,2.0l-2.67,-0.46l-1.04,-0.87l-0.55,0.3l-1.69,-1.21l-1.31,-1.63l-2.9,-0.85l-1.15,-0.95l-0.02,-0.67l-0.42,-0.41l-2.75,-0.51l-2.28,-1.03l-1.89,-1.75l-0.91,-1.53l-0.96,-0.91l-1.53,-0.29l-1.77,-1.26l-0.22,-0.56l-1.31,-1.18l-0.65,-2.68l-0.86,-1.01l-0.24,-1.1l-0.76,-1.28l-0.26,-2.34l0.52,-3.05l-3.01,-5.07l-0.06,-1.94l-1.26,-2.51l-0.99,-0.44l-0.43,-1.24l-1.43,-0.81l-2.15,-2.18l-1.02,-0.1l-2.01,-1.25l-3.18,-3.35l-0.59,-1.55l-3.13,-2.55l-1.59,-2.45l-1.19,-0.95l-0.61,-1.05l-4.42,-2.6l-1.19,-2.19l-1.21,-3.23l-1.37,-1.08l-1.12,-0.08l-1.75,-1.67l-0.79,-3.05ZM502.09,468.18l-0.33,0.17l0.18,-0.16l0.15,-0.02ZM498.69,470.85l-0.09,0.12l-0.04,0.02l0.13,-0.14ZM497.79,472.33l0.15,0.05l-0.2,0.18l0.04,-0.11l0.01,-0.12ZM497.02,473.23l-0.13,0.12l0.03,-0.09l0.09,-0.03ZM467.54,489.19l0.03,0.02l-0.02,0.01l-0.0,-0.03ZM453.94,547.19l0.75,-0.5l0.25,-0.68l0.11,1.08l-1.1,0.1ZM460.89,499.8l-0.14,-0.59l1.22,-0.36l-0.28,0.33l-0.79,0.63ZM463.51,497.84l0.1,-0.23l1.27,-0.88l-0.92,0.85l-0.45,0.26ZM465.8,496.12l0.28,-0.24l0.47,-0.04l-0.25,0.13l-0.5,0.15ZM457.96,502.92l0.71,-1.64l0.64,-0.71l-0.02,0.75l-1.33,1.6ZM451.06,515.13l0.06,-0.22l0.07,-0.15l-0.13,0.37ZM451.5,513.91l0.16,-0.35l0.02,-0.02l-0.18,0.37ZM452.44,511.95l-0.01,-0.04l0.05,-0.04l-0.04,0.08Z\", \"name\": \"Texas\"}, \"US-NH\": {\"path\": \"M829.94,105.42l0.2,-1.33l-1.43,-5.38l0.53,-1.45l-0.28,-2.22l1.0,-1.86l-0.13,-2.3l0.64,-2.28l-0.44,-0.62l0.29,-2.31l-0.93,-3.8l0.08,-0.7l0.3,-0.45l1.83,-0.8l0.7,-1.39l1.43,-1.62l0.74,-1.8l-0.25,-1.13l0.52,-0.62l-2.34,-3.49l0.87,-3.26l-0.11,-0.78l-0.81,-1.29l0.27,-0.59l-0.23,-0.7l0.48,-3.2l-0.36,-0.82l0.91,-1.49l2.44,0.33l0.65,-0.88l13.0,34.89l0.84,3.65l2.6,2.21l0.88,0.34l0.36,1.6l1.72,1.31l0.0,0.35l0.77,0.23l-0.06,0.58l-0.46,3.09l-1.57,0.24l-1.32,1.19l-0.51,0.94l-0.96,0.37l-0.5,1.68l-1.1,1.44l-17.61,4.74l-1.7,-1.43l-0.41,-0.89l-0.1,-2.0l0.54,-0.59l0.03,-0.52l-1.02,-5.18Z\", \"name\": \"New Hampshire\"}, \"US-NY\": {\"path\": \"M821.38,166.44l0.69,-2.05l0.62,-0.02l0.55,-0.75l0.76,0.15l0.54,-0.41l-0.04,-0.31l0.57,-0.03l0.28,-0.66l0.66,-0.02l0.2,-0.55l-0.42,-0.83l0.22,-0.53l0.61,-0.37l1.34,0.22l0.54,-0.59l1.45,-0.18l0.21,-0.8l1.85,0.02l1.08,-0.91l0.11,-0.78l0.62,0.24l0.43,-0.61l4.83,-1.29l2.26,-1.3l1.99,-2.91l-0.2,1.16l-0.98,0.86l-1.22,2.31l0.55,0.46l1.6,-0.35l0.28,0.63l-0.43,0.49l-1.37,0.87l-0.51,-0.07l-2.26,0.92l-0.08,0.93l-0.87,-0.0l-2.73,1.72l-1.01,0.15l-0.17,0.8l-1.24,0.09l-2.24,1.91l-4.44,2.17l-0.2,0.71l-0.29,0.08l-0.45,-0.83l-1.41,-0.06l-0.73,0.42l-0.42,0.8l0.23,0.32l-0.92,0.69l-0.76,-0.84l0.32,-1.05ZM828.05,159.06l-0.02,-0.01l0.02,-0.06l-0.01,0.08ZM845.16,149.05l0.06,-0.06l0.18,-0.06l-0.11,0.19l-0.13,-0.07ZM844.3,154.94l0.1,-0.89l0.74,-1.16l1.65,-1.52l1.01,0.31l0.05,-0.82l0.79,0.67l-3.36,3.21l-0.67,0.45l-0.31,-0.25ZM850.39,150.14l0.02,-0.03l0.07,-0.07l-0.09,0.1ZM722.09,155.56l3.76,-3.85l1.27,-2.19l1.76,-1.86l1.16,-0.78l1.28,-3.35l1.56,-1.3l0.53,-0.83l-0.21,-1.83l-1.61,-2.42l0.43,-1.13l-0.17,-0.78l-0.83,-0.53l-2.11,-0.0l0.04,-0.99l-0.57,-2.22l4.99,-2.94l4.49,-1.8l2.38,-0.19l1.84,-0.74l5.64,-0.24l3.13,1.25l3.16,-1.68l5.49,-1.06l0.58,0.45l0.68,-0.2l0.12,-0.98l1.45,-0.72l1.03,-0.93l0.75,-0.2l0.69,-2.05l1.87,-1.76l0.79,-1.26l1.12,0.03l1.13,-0.52l1.07,-1.63l-0.46,-0.7l0.36,-1.2l-0.25,-0.51l-0.64,0.02l-0.17,-1.17l-0.94,-1.59l-1.01,-0.62l0.12,-0.18l0.59,0.39l0.53,-0.27l0.75,-1.44l-0.01,-0.91l0.81,-0.65l-0.01,-0.97l-0.93,-0.19l-0.6,0.7l-0.28,0.12l0.56,-1.3l-0.81,-0.62l-1.26,0.05l-0.87,0.77l-0.92,-0.41l-0.06,-0.29l2.05,-2.5l1.78,-1.47l1.67,-2.64l0.7,-0.56l0.11,-0.59l0.78,-0.95l0.07,-0.56l-0.5,-0.95l0.78,-1.89l4.82,-7.61l4.77,-4.5l2.84,-0.51l19.67,-5.66l0.41,0.88l-0.08,2.01l1.02,1.22l0.43,3.8l2.29,3.25l-0.09,1.89l0.85,2.42l-0.59,1.07l-0.0,3.41l0.71,0.9l1.32,2.76l0.19,1.09l0.62,0.84l0.12,3.92l0.55,0.85l0.54,0.07l0.53,-0.61l0.06,-0.87l0.33,-0.07l1.05,1.12l3.97,15.58l0.74,1.2l0.22,15.32l0.6,0.62l3.57,16.23l1.26,1.34l-2.82,3.18l0.03,0.54l1.52,1.31l0.19,0.6l-0.78,0.88l-0.64,1.8l-0.41,0.39l0.15,0.69l-1.25,0.64l0.04,-4.02l-0.57,-2.28l-0.74,-1.62l-1.46,-1.1l-0.17,-1.13l-0.7,-0.1l-0.42,1.33l0.68,1.27l1.05,0.83l0.97,2.85l-13.75,-4.06l-1.28,-1.47l-2.39,0.24l-0.63,-0.43l-1.06,-0.15l-1.74,-1.91l-0.75,-2.33l0.12,-0.72l-0.36,-0.63l-0.56,-0.21l0.09,-0.46l-0.35,-0.42l-1.64,-0.68l-1.08,0.32l-0.53,-1.22l-1.92,-0.93l-34.6,8.73l-34.44,7.84l-1.11,-5.15ZM818.84,168.69l1.08,-0.48l0.14,0.63l-1.17,1.53l-0.05,-1.68ZM730.07,136.63l0.03,-0.69l0.78,-0.07l-0.38,1.09l-0.43,-0.33Z\", \"name\": \"New York\"}, \"US-HI\": {\"path\": \"M295.5,583.17l0.06,-1.75l4.12,-4.97l1.03,-3.4l-0.33,-0.64l0.94,-2.43l-0.05,-3.52l0.39,-0.78l2.47,-0.7l1.55,0.23l4.45,-1.4l0.51,-0.7l-0.17,-2.69l0.4,-1.66l1.78,-1.16l1.74,2.15l-0.15,0.94l1.88,3.6l0.94,0.35l5.13,7.65l0.86,3.93l-1.52,3.14l0.22,0.58l1.47,0.95l-0.68,2.07l0.35,1.51l1.6,3.0l-1.39,0.86l-2.28,-0.2l-3.27,0.51l-4.56,-1.32l-2.15,-1.34l-6.66,-0.15l-1.59,0.26l-1.56,1.19l-1.63,0.58l-1.14,0.02l-0.7,-2.54l-2.09,-2.18ZM306.33,530.7l1.6,0.08l0.51,2.07l-0.3,2.25l0.37,0.59l2.33,0.88l1.38,0.1l1.55,1.39l0.27,1.55l0.93,0.97l-0.13,1.05l1.83,2.52l-0.13,0.66l-0.61,0.48l-1.82,0.38l-1.84,-0.18l-1.47,-1.19l-2.21,-0.24l-2.69,-1.48l0.01,-1.23l1.15,-1.86l0.41,-2.07l-1.76,-1.28l-1.08,-1.75l-0.1,-2.61l1.79,-1.08ZM297.2,518.01l0.71,0.31l0.38,1.05l2.64,2.0l0.9,1.11l0.92,0.08l0.8,1.67l1.56,1.05l0.72,0.06l1.07,1.11l-1.31,0.41l-2.75,-0.66l-3.23,-3.93l-3.16,-2.01l-1.39,-0.44l-0.05,-0.7l1.58,-0.43l0.62,-0.67ZM301.59,541.55l-2.09,-0.98l-0.28,-0.51l2.92,0.34l-0.56,1.15ZM298.23,532.36l-0.92,-0.29l-0.72,-0.89l0.92,-2.06l-0.49,-1.73l2.6,1.38l0.61,2.08l0.14,1.06l-2.15,0.45ZM281.13,503.64l0.57,-1.85l-0.38,-0.9l-0.16,-2.84l0.75,-0.92l-0.12,-1.22l2.74,1.9l2.9,-0.62l1.56,0.15l0.38,1.01l-0.33,2.17l0.29,1.5l-0.69,0.6l-0.19,1.55l0.38,1.54l0.86,0.51l0.29,1.07l-0.52,1.14l0.53,1.28l-1.18,-0.0l-0.2,-0.48l-2.04,-0.86l-0.77,-2.83l-1.27,-0.38l0.8,-0.11l0.32,-0.46l-0.08,-0.66l-0.63,-0.68l-1.75,-0.32l0.23,1.82l-2.28,-1.1ZM259.66,469.47l-0.24,-2.03l-0.91,-0.69l-0.68,-1.23l0.08,-1.2l0.08,-0.34l2.39,-0.81l4.6,0.53l0.67,1.04l2.51,1.09l0.69,1.25l-0.15,1.9l-2.3,1.32l-0.74,1.3l-0.79,0.34l-2.78,0.09l-0.92,-1.53l-1.52,-1.0ZM245.78,462.61l-0.23,-0.74l1.03,-0.75l4.32,-0.72l0.43,0.3l-0.92,0.4l-0.68,0.94l-1.66,-0.5l-1.36,0.34l-0.94,0.72Z\", \"name\": \"Hawaii\"}, \"US-VT\": {\"path\": \"M805.56,72.69l26.03,-7.97l0.89,1.85l-0.74,2.37l-0.03,1.54l2.22,2.75l-0.51,0.58l0.26,1.13l-0.67,1.6l-1.35,1.49l-0.64,1.32l-1.72,0.7l-0.62,0.92l-0.1,0.98l0.93,3.74l-0.29,2.44l0.4,0.54l-0.6,2.11l0.15,2.19l-1.0,1.87l0.27,2.36l-0.53,1.54l1.43,5.44l-0.22,1.22l1.05,5.3l-0.58,0.85l0.11,2.31l0.6,1.26l1.51,1.1l-11.44,2.89l-0.57,-0.85l-4.02,-15.75l-1.72,-1.59l-0.91,0.25l-0.3,1.19l-0.12,-0.26l-0.11,-3.91l-0.68,-1.0l-0.14,-0.98l-1.37,-2.85l-0.63,-0.68l0.01,-3.15l0.6,-1.15l-0.86,-2.57l0.08,-1.93l-0.39,-0.91l-1.55,-1.63l-0.38,-0.81l-0.41,-3.71l-1.03,-1.27l0.11,-1.87l-0.43,-1.01Z\", \"name\": \"Vermont\"}, \"US-NM\": {\"path\": \"M230.86,422.88l11.82,-123.66l25.67,2.24l26.1,1.86l26.12,1.45l25.74,1.02l-0.31,10.24l-0.74,0.39l-3.59,98.69l-32.38,-1.34l-33.53,-2.02l-0.44,0.76l0.54,2.31l0.44,1.26l0.99,0.76l-30.55,-2.46l-0.43,0.36l-0.82,9.46l-14.63,-1.33Z\", \"name\": \"New Mexico\"}, \"US-NC\": {\"path\": \"M826.87,289.49l0.07,-0.05l-0.02,0.03l-0.04,0.02ZM819.58,272.4l0.2,0.23l-0.05,0.01l-0.16,-0.24ZM821.84,276.68l0.19,0.15l-0.02,0.18l-0.05,-0.08l-0.12,-0.25ZM676.72,321.77l0.92,0.17l1.52,-0.39l0.42,-0.39l0.52,-0.97l0.13,-2.7l1.34,-1.19l0.47,-1.05l2.24,-1.47l2.12,-0.52l0.76,0.18l1.32,-0.52l2.36,-2.52l0.78,-0.25l1.84,-2.29l1.48,-1.0l1.55,-0.19l1.15,-2.65l-0.28,-1.22l1.66,0.06l0.51,-1.65l0.93,-0.77l1.08,-0.77l0.51,1.52l1.07,0.33l1.34,-1.17l1.35,-2.64l2.49,-1.59l0.79,0.08l0.82,0.8l1.06,-0.21l0.84,-1.07l1.47,-4.18l1.08,-1.1l1.47,0.09l0.44,-0.31l-0.69,-1.26l0.4,-2.0l-0.42,-0.9l0.38,-1.25l7.42,-0.86l19.54,-3.36l37.22,-8.42l31.12,-7.87l0.4,1.21l3.54,3.24l1.0,1.53l-1.21,-1.0l-0.16,-0.63l-0.92,-0.4l-0.52,0.05l-0.24,0.65l0.66,0.54l0.59,1.56l-0.53,0.01l-0.91,-0.75l-2.31,-0.8l-0.4,-0.48l-0.55,0.13l-0.31,0.69l0.14,0.64l1.37,0.44l1.69,1.38l-1.11,0.66l-2.48,-1.2l-0.36,0.51l0.14,0.42l1.6,1.18l-1.84,-0.33l-2.23,-0.87l-0.46,0.14l0.01,0.48l0.6,0.7l1.71,0.83l-0.97,0.58l0.0,0.6l-0.43,0.53l-1.48,0.74l-0.89,-0.77l-0.61,0.22l-0.1,0.35l-0.2,-0.13l-1.32,-2.32l0.21,-2.63l-0.42,-0.48l-0.89,-0.22l-0.37,0.64l0.62,0.71l-0.43,0.99l-0.02,1.04l0.49,1.73l1.6,2.2l-0.31,1.28l0.48,0.29l2.97,-0.59l2.1,-1.49l0.27,0.01l0.37,0.79l0.76,-0.34l1.56,0.05l0.16,-0.71l-0.57,-0.32l1.29,-0.76l2.04,-0.46l-0.1,1.19l0.64,0.29l-0.6,0.88l0.89,1.19l-0.84,0.1l-0.19,0.66l1.38,0.46l0.26,0.94l-1.21,0.05l-0.19,0.66l0.66,0.59l1.25,-0.16l0.52,0.26l0.4,-0.38l0.18,-1.95l-0.75,-3.33l0.41,-0.48l0.56,0.43l0.94,0.06l0.28,-0.57l-0.29,-0.44l0.48,-0.57l1.71,1.84l-0.0,1.41l0.62,0.9l-0.53,0.18l-0.25,0.47l0.9,1.14l-0.08,0.37l-0.42,0.55l-0.78,0.09l-0.91,-0.86l-0.32,0.33l0.13,1.26l-1.08,1.61l0.2,0.57l-0.32,0.22l-0.15,0.98l-0.74,0.55l0.1,0.91l-0.9,0.96l-1.06,0.21l-0.59,-0.37l-0.52,0.52l-0.93,-0.81l-0.86,0.1l-0.4,-0.82l-0.59,-0.21l-0.52,0.38l0.08,0.94l-0.52,0.22l-1.42,-1.25l1.31,-0.4l0.23,-0.88l-0.57,-0.42l-2.02,0.31l-1.14,1.01l0.29,0.67l0.44,0.16l0.09,0.82l0.35,0.25l-0.03,0.12l-0.57,-0.34l-1.69,0.83l-1.12,-0.43l-1.45,0.06l-3.32,-0.7l0.42,1.08l0.97,0.45l0.36,0.64l0.63,0.11l0.87,-0.32l1.68,0.63l2.35,0.39l3.51,0.11l0.47,0.42l-0.06,0.52l-0.99,0.05l-0.38,0.5l0.13,0.23l-1.62,1.44l0.32,0.58l1.85,0.01l-2.55,3.5l-1.67,0.04l-1.59,-0.98l-0.9,-0.19l-1.21,-1.02l-1.12,0.07l0.07,0.47l1.04,1.14l2.32,2.09l2.68,0.26l1.31,0.49l1.71,-2.16l0.51,0.47l1.17,0.33l0.4,-0.57l-0.55,-0.9l0.87,0.16l0.19,0.57l0.66,0.24l1.63,-1.2l-0.18,0.61l0.29,0.57l-0.29,0.38l-0.43,-0.2l-0.41,0.37l0.03,0.9l-0.97,1.72l0.01,0.78l-0.71,-0.07l-0.06,-0.74l-1.12,-0.61l-0.42,0.47l0.27,1.45l-0.52,-1.1l-0.65,-0.16l-1.22,1.08l-0.21,0.52l0.25,0.27l-2.03,0.32l-2.75,1.84l-0.67,-1.04l-0.75,-0.29l-0.37,0.49l0.43,1.26l-0.57,-0.01l-0.09,0.82l-0.94,1.73l-0.91,0.85l-0.59,-0.26l0.49,-0.69l-0.02,-0.77l-1.06,-0.93l-0.08,-0.52l-1.69,-0.41l-0.16,0.47l0.43,1.16l0.2,0.33l0.58,0.07l0.3,0.61l-0.88,0.37l-0.08,0.71l0.65,0.64l0.77,0.18l-0.01,0.37l-2.12,1.67l-1.92,2.65l-2.0,4.31l-0.34,2.13l0.12,1.34l-0.15,-1.03l-1.01,-1.59l-0.55,-0.17l-0.3,0.48l1.17,3.95l-0.63,2.27l-3.9,0.19l-1.43,0.65l-0.35,-0.52l-0.58,-0.18l-0.54,1.07l-1.9,1.14l-0.61,-0.02l-23.25,-15.36l-1.05,-0.02l-18.68,3.49l-0.65,-2.77l-3.25,-2.84l-0.47,0.08l-1.23,1.31l-0.01,-1.29l-0.82,-0.54l-22.82,3.35l-0.64,-0.27l-0.62,0.46l-0.25,0.65l-3.98,1.93l-0.89,1.23l-1.01,0.08l-4.78,2.66l-20.95,3.93l-0.34,-4.55l0.7,-0.95ZM817.0,271.48l0.19,0.35l0.24,0.39l-0.45,-0.41l0.02,-0.32ZM807.53,290.29l0.2,0.32l-0.16,-0.09l-0.03,-0.23ZM815.31,299.15l0.16,-0.36l0.16,0.07l-0.13,0.29l-0.19,0.01ZM812.76,299.11l-0.06,-0.28l-0.03,-0.11l0.3,0.26l-0.21,0.13ZM812.97,264.02l0.37,-0.24l0.15,0.42l-0.42,0.07l-0.1,-0.25ZM791.92,329.4l0.04,-0.08l0.22,0.03l-0.0,0.09l-0.26,-0.05Z\", \"name\": \"North Carolina\"}, \"US-ND\": {\"path\": \"M438.54,42.78l2.06,6.9l-0.73,2.53l0.57,2.36l-0.27,1.17l0.47,1.99l0.01,3.26l1.42,3.95l0.45,0.54l-0.08,0.97l0.39,1.52l0.62,0.74l1.48,3.74l-0.06,3.9l0.42,0.7l0.5,8.35l0.51,1.54l0.51,0.25l-0.47,2.64l0.36,1.63l-0.14,1.75l0.69,1.1l0.2,2.16l0.49,1.13l1.8,2.56l0.15,2.2l0.51,1.08l0.17,1.39l-0.24,1.36l0.28,1.74l-27.89,0.73l-28.38,0.19l-28.38,-0.37l-28.49,-0.93l2.75,-65.47l23.08,0.78l25.57,0.42l25.57,-0.06l24.11,-0.49Z\", \"name\": \"North Dakota\"}, \"US-NE\": {\"path\": \"M422.58,174.02l3.92,2.71l3.93,1.9l1.34,-0.22l0.51,-0.47l0.36,-1.08l0.48,-0.2l2.49,0.34l1.32,-0.47l1.58,0.25l3.45,-0.65l2.37,1.98l1.4,0.14l1.55,0.77l1.45,0.08l0.88,1.1l1.49,0.17l-0.06,0.98l1.68,2.08l3.32,0.6l0.19,0.68l-0.22,1.87l1.13,1.94l0.01,2.29l1.15,1.08l0.34,1.72l1.73,1.46l0.07,1.88l1.5,2.11l-0.49,2.33l0.44,3.09l0.52,0.54l0.94,-0.2l-0.04,1.25l1.21,0.5l-0.41,2.36l0.21,0.44l1.12,0.4l-0.6,0.77l-0.09,1.01l0.13,0.59l0.82,0.5l0.16,1.45l-0.26,0.92l0.26,1.27l0.55,0.61l0.3,1.93l-0.22,1.33l0.23,0.72l-0.57,0.92l0.02,0.79l0.45,0.88l1.23,0.63l0.25,2.5l1.1,0.51l0.03,0.79l1.18,2.75l-0.23,0.96l1.16,0.21l0.8,0.99l1.1,0.24l-0.15,0.96l1.31,1.68l-0.21,1.12l0.51,0.91l-26.15,1.05l-27.83,0.63l-27.84,0.14l-27.89,-0.35l0.46,-21.66l-0.39,-0.41l-32.36,-1.04l1.85,-43.24l43.36,1.22l44.67,-0.04Z\", \"name\": \"Nebraska\"}, \"US-LA\": {\"path\": \"M508.97,412.97l-1.33,-21.76l51.44,-4.07l0.34,0.83l1.48,0.66l-0.92,1.35l-0.25,2.13l0.49,0.72l1.18,0.31l-1.21,0.47l-0.45,0.78l0.45,1.36l1.05,0.84l0.08,2.15l0.46,0.54l1.51,0.74l0.45,1.05l1.42,0.44l-0.87,1.22l-0.85,2.34l-0.75,0.04l-0.52,0.51l-0.02,0.73l0.63,0.72l-0.22,1.16l-1.35,0.96l-1.08,1.89l-1.37,0.67l-0.68,0.83l-0.79,2.42l-0.25,3.52l-1.55,1.74l0.13,1.21l0.62,0.96l-0.35,2.38l-1.61,0.29l-0.6,0.57l0.28,0.97l0.64,0.59l-0.26,1.41l0.98,1.51l-1.18,1.18l-0.08,0.45l0.4,0.23l6.18,-0.55l29.23,-2.92l-0.68,3.47l-0.52,1.02l-0.2,2.24l0.69,0.98l-0.09,0.66l0.6,1.0l1.31,0.7l1.22,1.42l0.14,0.88l0.89,1.39l0.14,1.05l1.11,1.84l-1.85,0.39l-0.38,-0.08l-0.01,-0.56l-0.53,-0.57l-1.28,0.28l-1.18,-0.59l-1.51,0.17l-0.61,-0.98l-1.24,-0.86l-2.84,-0.47l-1.24,0.63l-1.39,2.3l-1.3,1.42l-0.42,0.91l0.07,1.2l0.55,0.89l0.82,0.57l4.25,0.82l3.35,-1.0l1.32,-1.19l0.68,-1.19l0.34,0.59l1.08,0.43l0.59,-0.4l0.81,0.03l0.51,-0.46l-0.76,1.21l-1.12,-0.12l-0.57,0.32l-0.38,0.62l0.0,0.83l0.77,1.22l1.48,-0.02l0.65,0.89l1.1,0.48l0.94,-0.21l0.51,-0.45l0.46,-1.11l-0.02,-1.37l0.93,-0.58l0.42,-0.99l0.23,0.05l0.1,1.16l-0.24,0.25l0.18,0.57l0.43,0.15l-0.07,0.75l1.34,1.08l0.34,-0.16l-0.48,0.59l0.18,0.63l-0.35,0.13l-0.52,-0.57l-0.92,-0.19l-1.0,1.89l-0.85,0.14l-0.46,0.53l0.16,1.19l-1.6,-0.61l-0.43,0.19l0.04,0.46l1.14,1.06l-1.17,-0.14l-0.92,0.61l0.68,0.43l1.26,2.04l2.74,0.97l-0.08,1.2l0.34,0.41l2.07,-0.32l0.77,0.17l0.17,0.53l0.73,0.32l1.35,-0.34l0.53,0.78l1.08,-0.46l1.13,0.74l0.14,0.3l-0.4,0.62l1.54,0.86l-0.39,0.65l0.39,0.58l-0.18,0.62l-0.95,1.49l-1.3,-1.56l-0.68,0.34l0.1,0.66l-0.38,0.12l0.41,-1.88l-1.33,-0.76l-0.5,0.5l0.2,1.18l-0.54,0.45l-0.27,-1.02l-0.57,-0.25l-0.89,-1.27l0.03,-0.77l-0.96,-0.14l-0.47,0.5l-1.41,-0.17l-0.41,-0.61l0.14,-0.63l-0.39,-0.46l-0.45,-0.02l-0.81,0.73l-1.18,0.02l0.12,-1.23l-0.46,-0.88l-0.91,0.04l0.09,-0.96l-0.37,-0.36l-0.91,-0.03l-0.22,0.58l-0.85,-0.38l-0.48,0.27l-2.61,-1.26l-1.24,-0.03l-0.67,-0.64l-0.61,0.19l-0.3,0.56l-0.05,1.25l1.72,0.94l1.67,0.35l-0.16,0.92l0.28,0.39l-0.34,0.35l0.23,0.68l-0.76,0.95l-0.02,0.66l0.81,0.97l-0.95,1.43l-1.33,0.94l-0.76,-1.15l0.22,-1.5l-0.35,-0.92l-0.49,-0.18l-0.4,0.36l-1.15,-1.08l-0.59,0.42l-0.76,-1.05l-0.62,-0.2l-0.64,1.33l-0.85,0.26l-0.88,-0.53l-0.86,0.53l-0.1,0.62l0.48,0.41l-0.68,0.56l-0.13,1.44l-0.46,0.13l-0.39,0.83l-0.92,0.08l-0.11,-0.68l-1.6,-0.4l-0.77,0.97l-1.92,-0.93l-0.3,-0.54l-0.99,0.01l-0.35,0.6l-1.16,-0.51l0.42,-0.4l0.01,-1.46l-0.38,-0.57l-1.9,-1.19l-0.08,-0.54l-0.83,-0.72l-0.09,-0.91l0.73,-1.15l-0.34,-1.14l-0.87,-0.19l-0.34,0.57l0.16,0.43l-0.59,0.81l0.04,0.91l-1.8,-0.4l0.07,-0.39l-0.47,-0.54l-1.97,0.76l-0.7,-2.22l-1.32,0.23l-0.18,-2.12l-1.31,-0.35l-1.89,0.3l-1.09,0.65l-0.21,-0.71l0.84,-0.26l-0.05,-0.8l-0.6,-0.58l-1.03,-0.1l-0.85,0.42l-0.95,-0.15l-0.4,0.8l-2.0,1.11l-0.63,-0.31l-1.29,0.71l0.54,1.37l0.8,0.31l0.97,1.51l-1.39,0.19l-1.83,1.03l-3.69,-0.4l-1.24,0.21l-3.09,-0.45l-1.99,-0.68l-1.81,-1.07l-3.7,-1.1l-3.19,-0.48l-2.53,0.58l-5.62,0.45l-1.0,0.26l-1.82,1.25l-0.59,-0.63l-0.26,-1.08l1.59,-0.47l0.7,-1.76l-0.02,-1.55l-0.39,-0.56l1.11,-1.54l0.23,-1.59l-0.5,-1.83l0.07,-1.46l-0.66,-0.7l-0.21,-1.04l0.83,-2.22l-0.64,-1.95l0.76,-0.84l0.3,-1.49l0.78,-0.94l0.79,-2.83l-0.18,-1.42l0.58,-0.97l-0.75,-1.33l0.84,-0.39l0.2,-0.44l-0.89,-1.36l0.03,-2.13l-1.07,-0.23l-0.57,-1.57l-0.92,-0.84l0.28,-1.27l-0.81,-0.76l-0.33,-0.95l-0.64,-0.34l0.22,-0.98l-1.16,-0.58l-0.81,-0.93l0.16,-2.46l-0.68,-1.93l-1.33,-1.98l-2.63,-2.21ZM607.49,467.45l-0.03,-0.03l-0.07,-0.04l0.13,-0.01l-0.03,0.08ZM607.51,465.85l-0.02,-0.01l0.03,-0.01l-0.02,0.02ZM567.04,468.98l-2.0,-0.42l-0.66,-0.5l0.73,-0.43l0.35,-0.76l0.39,0.49l0.83,0.21l-0.15,0.61l0.5,0.81ZM550.39,463.0l1.73,-1.05l3.34,1.07l-0.69,0.56l-0.17,0.81l-0.68,0.17l-3.53,-1.57Z\", \"name\": \"Louisiana\"}, \"US-SD\": {\"path\": \"M336.37,128.84l0.3,-0.53l0.75,-19.93l28.5,0.93l28.4,0.37l28.4,-0.19l27.78,-0.73l-0.18,1.71l-0.73,1.71l-2.9,2.46l-0.42,1.27l1.59,2.13l1.06,2.06l0.55,0.36l1.74,0.24l1.01,0.84l0.57,1.02l1.45,38.83l-1.84,0.09l-0.42,0.56l0.24,1.44l0.88,1.14l0.01,1.45l-0.65,0.36l0.17,1.48l0.48,0.43l1.09,0.04l0.34,1.68l-0.16,0.91l-0.62,0.83l0.02,1.73l-0.68,2.45l-0.49,0.44l-0.67,1.88l0.5,1.1l1.33,1.08l-0.16,0.62l0.64,0.66l0.35,1.15l-1.65,-0.28l-0.34,-0.94l-0.85,-0.73l0.19,-0.61l-0.28,-0.59l-1.58,-0.23l-1.03,-1.18l-1.57,-0.11l-1.51,-0.75l-1.34,-0.12l-2.38,-1.99l-3.78,0.6l-1.65,-0.25l-1.19,0.46l-2.62,-0.33l-0.98,0.48l-0.76,1.45l-0.72,0.05l-3.67,-1.82l-4.13,-2.8l-44.83,0.05l-43.33,-1.22l1.79,-43.2Z\", \"name\": \"South Dakota\"}, \"US-DC\": {\"path\": \"M781.25,216.97l0.45,-0.77l2.04,1.26l-0.66,1.14l-0.55,-1.05l-1.28,-0.58Z\", \"name\": \"District of Columbia\"}, \"US-DE\": {\"path\": \"M798.52,195.11l0.42,-1.51l0.92,-1.11l1.72,-0.71l1.12,0.06l-0.33,0.56l-0.08,1.38l-1.13,1.92l0.1,1.09l1.11,1.1l-0.07,1.52l2.29,2.48l1.25,0.6l0.93,1.52l0.99,3.35l1.72,1.57l0.57,1.32l3.06,1.99l1.44,-0.09l0.45,1.25l-1.06,0.56l0.16,1.32l0.36,0.19l-0.83,0.57l-0.08,1.21l0.66,0.21l0.85,-0.73l0.71,0.34l0.3,-0.21l0.75,1.55l-10.19,2.82l-8.12,-26.12Z\", \"name\": \"Delaware\"}, \"US-FL\": {\"path\": \"M630.28,423.69l47.19,-6.86l1.53,1.91l0.87,2.72l1.47,1.0l48.79,-5.11l1.03,1.38l0.03,1.09l0.55,1.05l1.04,0.48l1.64,-0.28l0.85,-0.75l-0.14,-4.57l-0.98,-1.49l-0.22,-1.77l0.28,-0.74l0.62,-0.3l0.12,-0.7l5.6,0.96l4.03,-0.16l0.14,1.24l-0.75,-0.12l-0.33,0.43l0.25,1.54l2.11,1.81l0.22,1.01l0.42,0.38l0.29,1.92l1.87,3.29l1.7,4.87l0.73,0.84l0.51,1.5l1.64,2.46l0.64,1.57l2.79,3.71l1.93,3.18l2.29,2.77l0.16,0.6l0.63,0.36l6.82,7.53l-0.48,-0.03l-0.27,0.61l-1.35,-0.02l-0.34,-0.65l0.38,-1.38l-0.16,-0.56l-2.3,-0.92l-0.46,0.53l1.0,2.8l0.78,0.97l2.14,4.77l9.92,13.71l1.37,3.11l3.66,5.34l-1.38,-0.35l-0.43,0.74l0.8,0.65l0.85,0.24l0.56,-0.22l1.46,0.94l2.05,3.05l-0.5,0.34l-0.12,0.53l1.16,0.53l0.89,1.83l-0.08,1.06l0.59,0.95l0.61,2.64l-0.27,0.75l0.93,8.98l-0.31,1.07l0.46,0.67l0.5,3.1l-0.81,1.46l0.07,2.23l-0.84,0.74l-0.22,1.8l-0.48,0.85l0.21,1.47l-0.3,1.75l0.54,1.74l0.45,0.23l-1.15,1.8l-0.39,1.28l-0.94,0.24l-0.53,-0.22l-1.37,0.45l-0.35,1.06l-0.89,0.3l-0.18,0.58l-0.85,0.67l-1.44,0.14l-0.27,-0.32l-1.23,-0.1l-0.9,1.05l-3.17,1.13l-1.06,-0.59l-0.7,-1.04l0.06,-1.79l1.0,0.84l1.64,0.47l0.26,0.63l0.52,0.07l1.35,-0.72l0.2,-0.69l-0.26,-0.64l-1.58,-1.11l-2.4,-0.26l-0.91,-0.46l-0.85,-1.67l-0.89,-0.72l0.22,-0.98l-0.48,-0.28l-0.53,0.15l-1.38,-2.51l-0.44,-0.3l-0.64,0.07l-0.44,-0.61l0.22,-0.89l-0.7,-0.65l-1.21,-0.6l-1.06,-0.08l-0.75,-0.54l-0.57,0.18l-2.8,-0.59l-0.5,0.64l0.25,-0.91l-0.46,-0.42l-0.87,0.12l-0.26,-0.72l-0.88,-0.65l-0.61,-1.41l-0.55,-0.11l-0.72,-2.94l-0.77,-1.0l-0.16,-1.52l-0.44,-0.83l-0.71,-0.89l-0.49,-0.15l-0.12,0.93l-1.29,-0.26l1.06,-1.3l0.3,-0.75l-0.12,-0.63l0.86,-1.46l0.65,-0.34l0.28,-0.83l-0.61,-0.38l-1.42,0.93l-0.89,1.29l-0.42,2.17l-1.37,0.35l-0.21,-1.33l-0.79,-1.33l-0.27,-4.04l-0.86,-0.6l1.63,-1.33l0.22,-0.97l-0.58,-0.42l-3.06,1.92l-0.75,-0.66l-0.4,0.26l-1.27,-0.89l-0.37,0.74l1.13,1.09l0.52,0.1l1.26,2.0l-1.04,0.23l-1.42,-0.38l-0.84,-1.6l-1.13,-0.6l-1.94,-2.55l-1.04,-2.28l-1.28,-0.87l0.1,-0.87l-0.97,-1.8l-1.77,-0.98l0.09,-0.67l0.99,-0.41l-0.35,-0.49l0.44,-0.73l-0.39,-0.35l0.4,-1.21l2.47,-4.47l-1.05,-2.41l-0.68,-0.46l-0.92,0.42l-0.28,0.93l0.29,1.2l-0.24,0.03l-0.73,-2.44l-0.99,-0.28l-1.19,-0.87l-1.52,-0.31l0.29,1.95l-0.48,0.61l0.27,0.59l2.21,0.56l0.25,0.97l-0.37,2.46l-0.31,-0.58l-0.8,-0.22l-2.13,-1.53l-0.41,0.2l-0.29,-0.63l0.59,-2.11l0.07,-2.97l-0.66,-1.97l0.42,-0.51l0.48,-1.91l-0.24,-0.54l0.66,-3.04l-0.35,-5.26l-0.71,-1.7l0.35,-0.47l-0.47,-2.18l-2.1,-1.33l-0.05,-0.52l-0.55,-0.43l-0.1,-1.01l-0.92,-0.73l-0.55,-1.51l-0.64,-0.25l-1.44,0.32l-1.03,-0.2l-1.57,0.54l-1.14,-1.74l-1.51,-0.48l-0.19,-0.6l-1.35,-1.51l-0.87,-0.59l-0.62,0.07l-1.52,-1.16l-0.8,-0.21l-0.51,-2.75l-3.06,-1.13l-0.65,-0.59l-0.52,-1.23l-2.15,-1.93l-2.19,-1.09l-1.45,-0.12l-3.44,-1.68l-2.85,0.98l-1.0,-0.4l-1.05,0.42l-0.35,0.68l-1.33,0.68l-0.5,0.7l0.03,0.64l-0.73,-0.22l-0.59,0.6l0.67,0.94l1.51,0.08l0.41,0.21l-3.03,0.23l-1.58,1.51l-0.91,0.45l-1.3,1.56l-1.56,1.03l-0.32,0.13l0.2,-0.48l-0.26,-0.54l-0.66,-0.04l-0.96,0.75l-1.12,1.5l-2.2,0.23l-2.11,1.06l-0.78,0.03l-0.27,-2.03l-1.71,-2.23l-2.21,-1.0l-0.18,-0.41l-2.51,-1.5l2.79,1.33l1.21,-0.74l0.0,-0.74l-1.32,-0.34l-0.36,0.55l-0.21,-1.01l-0.34,-0.1l0.13,-0.52l-0.49,-0.33l-1.39,0.61l-2.3,-0.76l0.65,-1.08l0.83,-0.1l1.03,-1.45l-0.91,-0.95l-0.46,0.12l-0.49,1.02l-0.44,-0.04l-0.81,0.56l-0.72,-0.9l-0.7,0.09l-0.17,0.38l-1.34,0.73l-0.14,0.68l0.29,0.46l-3.95,-1.35l-5.05,-0.71l0.12,-0.24l1.27,0.29l0.61,-0.53l2.1,0.39l0.23,-0.78l-0.94,-1.02l0.09,-0.7l-0.63,-0.28l-0.5,0.32l-0.28,-0.47l-1.9,0.19l-2.25,1.1l0.3,-0.63l-0.41,-0.58l-0.96,0.35l-0.58,-0.25l-0.23,0.44l0.2,0.71l-1.45,0.8l-0.4,0.63l-5.18,0.97l0.32,-0.52l-0.4,-0.52l-1.35,-0.28l-0.72,-0.53l0.69,-0.53l0.01,-0.78l-0.68,-0.13l-0.81,-0.66l-0.46,0.11l0.14,0.76l-0.42,1.77l-1.05,-1.39l-0.69,-0.45l-0.55,0.07l-0.3,0.71l0.82,1.77l-0.25,0.79l-1.39,0.99l-0.05,1.04l-0.6,0.22l-0.17,0.57l-1.48,0.56l0.28,-0.65l-0.21,-0.46l1.14,-1.03l0.07,-0.74l-0.4,-0.58l-1.19,-0.24l-0.41,-0.84l0.3,-1.7l-0.18,-1.61l-2.17,-1.12l-2.39,-2.46l0.32,-1.44l-0.15,-1.04ZM767.29,490.44l0.48,1.07l0.9,0.39l0.78,-0.15l1.41,1.67l0.91,0.58l1.86,0.69l1.61,0.07l0.55,-0.44l-0.08,-0.87l0.55,-0.65l-0.16,-1.21l0.76,-1.36l0.09,-1.81l-0.64,-1.62l-1.46,-2.01l-1.74,-1.32l-1.19,-0.13l-1.12,0.83l-1.83,3.16l-2.12,1.94l-0.13,0.77l0.57,0.41ZM644.36,434.13l-0.94,0.26l0.41,-0.44l0.53,0.18ZM665.13,435.7l0.98,-0.28l0.35,0.32l0.09,0.72l-1.42,-0.75ZM770.56,455.01l0.42,0.56l-0.43,0.75l0.0,-1.31ZM788.88,525.23l0.01,-0.07l0.01,0.03l-0.03,0.04ZM789.47,522.87l-0.22,-0.23l0.49,-0.32l-0.27,0.55ZM768.83,453.61l0.21,0.76l-0.31,2.33l0.28,1.79l-1.38,-3.23l1.19,-1.65ZM679.81,445.61l0.22,-0.2l0.36,0.02l-0.11,0.42l-0.47,-0.25Z\", \"name\": \"Florida\"}, \"US-WA\": {\"path\": \"M38.52,55.26l0.46,-1.32l0.18,0.45l0.65,0.3l1.04,-0.74l0.43,0.59l0.7,-0.03l0.17,-0.77l-0.92,-1.56l0.79,-0.74l-0.09,-1.36l0.49,-0.39l-0.1,-1.03l0.81,-0.27l0.05,0.5l0.48,0.41l0.95,-0.31l-0.09,-0.68l-1.35,-1.65l-0.9,0.15l-1.88,-0.56l0.17,-1.98l0.66,0.53l0.52,-0.07l0.29,-0.56l-0.16,-0.67l3.3,-0.52l0.26,-0.69l-1.7,-0.96l-0.86,-0.14l-0.37,-1.51l-0.7,-0.42l-0.81,-0.02l0.32,-4.73l-0.49,-1.28l0.1,-0.69l-0.4,-0.34l0.76,-5.74l-0.13,-2.46l-0.45,-0.62l-0.16,-1.36l-0.65,-1.33l-0.73,-0.57l-0.32,-2.45l0.35,-2.27l-0.15,-1.11l1.74,-3.3l-0.52,-1.23l4.59,3.9l1.19,0.38l0.92,0.75l0.81,1.3l1.86,1.08l3.24,0.91l0.84,0.77l1.42,0.11l1.73,1.02l2.33,0.73l1.46,-0.47l0.52,0.29l0.55,0.69l-0.03,1.09l0.55,0.74l0.31,0.11l0.49,-0.35l0.07,-0.75l0.45,0.03l0.63,1.39l-0.4,0.58l0.34,0.49l0.56,-0.04l0.72,-0.84l-0.38,-1.7l1.03,-0.24l-0.44,0.23l-0.21,0.69l1.27,4.41l-0.46,0.1l-1.67,1.73l0.22,-1.29l-0.22,-0.41l-1.31,0.31l-0.38,0.81l0.09,0.95l-1.37,1.7l-1.98,1.38l-1.06,1.41l-0.96,0.69l-1.1,1.67l-0.06,0.71l0.62,0.6l0.96,0.12l2.77,-0.48l1.22,-0.58l-0.03,-0.7l-0.64,-0.23l-2.94,0.79l-0.35,-0.3l3.23,-3.42l3.06,-0.88l0.89,-1.51l1.73,-1.54l0.53,0.57l0.54,-0.19l0.22,-1.81l-0.06,2.25l0.26,0.91l-0.99,-0.21l-0.64,0.77l-0.41,-0.73l-0.52,-0.19l-0.39,0.64l0.3,0.71l0.02,1.63l-0.21,-1.07l-0.67,-0.21l-0.47,0.69l-0.07,0.75l0.46,0.66l-0.63,0.58l-0.0,0.45l0.42,0.17l1.68,-0.57l0.25,1.09l-1.08,1.79l-0.08,1.05l-0.83,0.7l0.13,1.0l-0.85,-0.68l1.12,-1.44l-0.23,-0.96l-1.96,1.08l-0.38,0.64l-0.05,-2.11l-0.52,0.02l-1.03,1.59l-1.26,0.53l-1.14,1.87l-1.51,0.3l-0.46,0.43l-0.21,1.18l1.11,-0.03l-0.25,0.36l0.27,0.37l0.93,0.02l0.06,0.68l0.53,0.47l0.52,-0.27l0.35,-1.76l0.14,0.42l0.83,-0.15l1.11,1.48l1.31,-0.61l1.65,-1.48l0.98,-1.56l0.63,0.78l0.73,0.14l0.44,-0.23l-0.06,-0.86l1.56,-0.55l0.35,-0.94l-0.33,-1.27l0.22,-1.19l-0.18,-1.36l0.83,0.2l0.3,-0.92l-0.19,-0.75l-0.72,-0.63l0.89,-1.13l0.07,-1.75l1.24,-1.24l0.61,-1.37l1.61,-0.49l0.78,-1.16l-0.45,-0.66l-0.51,-0.02l-0.86,-1.3l0.16,-2.09l-0.26,-0.87l0.49,-0.79l0.06,-0.84l-1.15,-1.73l-0.63,-0.4l-0.17,-0.64l0.18,-0.5l0.59,0.23l0.53,-0.33l0.24,-1.8l0.79,-0.24l0.3,-1.0l-0.61,-2.32l0.44,-0.53l-0.03,-0.86l-0.96,-0.88l-0.95,0.3l-1.09,-2.66l0.93,-1.83l41.31,9.4l38.96,7.65l-9.66,54.39l-0.47,1.02l1.04,3.0l0.13,2.0l-1.0,1.3l0.73,1.88l-31.18,-5.92l-1.67,0.79l-7.24,-1.02l-1.68,0.92l-4.19,-0.12l-3.18,0.45l-1.64,0.75l-0.88,-0.26l-1.2,0.3l-1.51,-0.23l-2.43,-0.94l-0.91,0.46l-3.45,0.51l-2.11,-0.71l-1.65,0.3l-0.31,-1.36l-1.09,-0.88l-4.34,-1.46l-2.32,-0.11l-1.15,-0.51l-1.27,0.21l-1.89,0.86l-4.5,0.58l-1.11,-0.71l-1.15,-0.3l-1.61,-1.15l-1.84,-0.51l-0.63,-0.81l0.64,-6.82l-0.47,-0.95l-0.22,-1.9l-0.98,-1.35l-1.96,-1.67l-2.82,-0.11l-1.03,-1.31l-0.15,-1.05l-0.56,-0.63l-2.36,-0.31l-0.56,-0.3l-0.24,-0.79l-0.5,-0.18l-0.97,0.35l-0.84,-0.26l-1.1,0.4l-0.97,-1.47l-0.89,-0.22ZM61.85,39.78l0.16,0.74l-0.42,0.49l0.0,-0.91l0.26,-0.31ZM71.27,20.38l-0.61,0.87l-0.15,0.52l0.11,-1.01l0.65,-0.38ZM71.14,15.62l-0.09,-0.05l0.05,-0.04l0.04,0.1ZM70.37,15.48l-0.77,0.39l0.37,-0.68l-0.07,-0.6l0.22,-0.07l0.25,0.97ZM57.56,42.45l0.05,-0.02l-0.01,0.01l-0.04,0.02ZM67.75,19.23l1.73,-2.1l0.47,-0.02l0.53,1.71l-0.35,-0.55l-0.51,-0.12l-0.55,0.44l-0.35,-0.09l-0.35,0.73l-0.63,-0.01ZM67.87,20.4l0.44,0.0l0.61,0.5l0.08,0.35l-0.79,-0.2l-0.33,-0.65ZM68.84,23.16l-0.1,0.51l-0.0,0.0l-0.02,-0.24l0.12,-0.28ZM69.15,25.42l0.08,0.04l0.12,-0.04l-0.16,0.11l-0.05,-0.1ZM69.52,25.33l0.48,-0.93l1.02,1.21l0.11,1.12l-0.34,0.36l-0.34,-0.09l-0.27,-1.55l-0.67,-0.12ZM66.34,9.97l0.48,-0.34l0.18,1.51l-0.22,-0.05l-0.44,-1.12ZM68.04,9.66l0.83,0.8l-0.65,0.31l-0.18,-1.11ZM66.69,38.03l0.34,-1.07l0.21,-0.25l-0.03,1.07l-0.52,0.26ZM66.99,33.31l0.1,-1.04l0.35,-0.34l-0.23,1.56l-0.22,-0.18ZM66.51,14.27l-0.41,-0.4l0.6,-0.75l-0.18,0.61l-0.01,0.55ZM66.68,14.62l0.4,0.2l-0.08,0.12l-0.29,-0.12l-0.03,-0.2ZM66.74,12.96l-0.01,-0.1l0.05,-0.12l-0.04,0.23ZM64.36,13.12l-1.06,-0.82l0.19,-1.81l1.33,1.92l-0.35,0.18l-0.11,0.54ZM62.18,42.55l0.23,-0.25l0.02,0.01l-0.13,0.31l-0.12,-0.07ZM60.04,40.3l-0.09,-0.19l0.04,-0.07l0.0,0.13l0.05,0.14Z\", \"name\": \"Washington\"}, \"US-KS\": {\"path\": \"M477.9,239.67l0.44,0.63l0.76,0.18l1.04,0.8l2.19,-1.08l-0.0,0.75l1.08,0.79l0.23,1.44l-0.95,-0.15l-0.6,0.31l-0.17,0.97l-1.14,1.37l-0.06,1.14l-0.79,0.5l0.04,0.64l1.56,2.1l2.0,1.49l0.2,1.13l0.42,0.86l0.74,0.56l0.32,1.11l1.89,0.91l1.54,0.26l2.67,46.82l-31.55,1.48l-31.97,0.88l-31.98,0.26l-32.05,-0.37l1.21,-65.47l27.9,0.35l27.86,-0.14l27.85,-0.64l27.68,-1.12l1.65,1.23Z\", \"name\": \"Kansas\"}, \"US-WI\": {\"path\": \"M598.7,107.43l0.83,-0.15l-0.13,0.81l-0.56,0.01l-0.14,-0.68ZM594.22,116.05l0.47,-0.41l0.26,-2.36l0.95,-0.25l0.64,-0.69l0.22,-1.4l0.41,-0.63l0.63,-0.03l0.06,0.38l-0.76,0.06l-0.18,0.51l0.17,1.27l-0.38,0.17l-0.11,0.58l0.56,0.57l-0.24,0.65l-0.5,0.33l-0.69,1.91l0.07,1.23l-1.05,2.28l-0.41,0.15l-0.86,-0.97l-0.19,-0.72l0.31,-1.57l0.62,-1.05ZM510.06,124.08l0.41,-0.27l0.28,-0.9l-0.45,-1.48l0.04,-1.91l0.7,-1.16l0.53,-2.25l-1.61,-2.91l-0.83,-0.36l-1.28,-0.01l-0.21,-2.31l1.67,-2.26l-0.05,-0.77l0.77,-1.55l1.95,-1.09l0.48,-0.75l0.97,-0.25l0.45,-0.75l1.16,-0.14l1.04,-1.56l-0.97,-12.11l1.03,-0.35l0.22,-1.1l0.73,-0.97l0.78,0.69l1.68,0.64l2.61,-0.56l3.28,-1.57l2.65,-0.82l2.21,-2.12l0.31,0.29l1.39,-0.11l1.25,-1.48l0.79,-0.58l1.04,-0.1l0.4,-0.52l1.07,0.99l-0.48,1.68l-0.67,1.01l0.23,1.61l-1.21,2.21l0.64,0.66l2.5,-1.09l0.72,-0.86l2.16,1.22l2.34,0.47l0.44,0.54l0.86,-0.13l1.6,0.7l2.23,3.54l15.48,2.52l4.65,1.96l1.68,-0.17l1.63,0.42l1.33,-0.59l3.17,0.71l2.18,0.09l0.85,0.41l0.56,0.89l-0.42,1.09l0.41,0.77l3.4,0.63l1.41,1.13l-0.16,0.71l0.59,1.11l-0.36,0.81l0.43,1.25l-0.78,1.25l-0.03,1.76l0.91,0.63l1.38,-0.26l1.02,-0.72l0.2,0.26l-0.79,2.44l0.04,1.31l1.32,1.46l0.84,0.35l-0.24,2.02l-2.42,1.2l-0.51,0.79l0.04,1.26l-1.61,3.49l-0.4,3.5l1.11,0.82l0.92,-0.04l0.5,-0.36l0.49,-1.37l1.82,-1.47l0.66,-2.53l1.06,-1.7l0.14,0.25l0.45,-0.07l0.57,-0.7l0.88,-0.4l1.12,1.12l0.59,0.19l-0.29,2.21l-1.18,2.82l-0.56,5.58l0.23,1.11l0.8,0.93l0.07,0.52l-0.51,0.98l-1.3,1.34l-0.86,3.89l0.15,2.57l0.72,1.2l0.06,1.24l-1.07,3.22l0.12,2.12l-0.73,2.11l-0.28,2.47l0.59,2.02l-0.04,1.32l0.49,0.54l-0.21,1.7l0.92,0.78l0.54,2.43l1.2,1.54l0.08,1.69l-0.33,1.45l0.47,2.95l-44.2,4.6l-0.19,-0.79l-1.56,-2.19l-4.94,-0.84l-1.06,-1.35l-0.36,-1.69l-0.9,-1.21l-0.86,-4.9l1.04,-2.62l-0.09,-0.99l-0.71,-0.79l-1.44,-0.48l-0.71,-1.76l-0.47,-6.02l-0.7,-1.4l-0.52,-2.56l-1.15,-0.6l-1.1,-1.56l-0.93,-0.11l-1.17,-0.75l-1.71,0.09l-2.67,-1.79l-2.3,-3.5l-2.64,-2.1l-2.94,-0.53l-0.73,-1.24l-1.12,-1.0l-3.12,-0.45l-3.53,-2.74l0.45,-1.24l-0.12,-1.61l0.25,-0.81l-0.88,-3.11ZM541.58,78.25l0.05,-0.28l0.03,0.16l-0.08,0.12ZM537.91,83.72l0.28,-0.21l0.05,0.08l-0.33,0.12Z\", \"name\": \"Wisconsin\"}, \"US-OR\": {\"path\": \"M10.69,140.12l0.01,-1.77l0.5,-0.84l0.32,-1.95l1.12,-1.91l0.24,-1.9l-0.72,-2.57l-0.33,-0.15l-0.12,-1.81l3.04,-3.82l2.5,-5.98l0.01,0.77l0.52,0.52l0.49,-0.28l0.6,-1.6l0.47,-0.48l0.31,0.98l1.12,0.41l0.33,-0.54l-0.45,-1.76l0.27,-0.87l-0.45,-0.14l-0.79,0.32l1.74,-3.16l1.13,-0.96l0.89,0.3l0.49,-0.29l-0.47,-1.08l-0.81,-0.4l1.77,-4.63l0.47,-0.57l0.02,-0.99l1.08,-2.67l0.62,-2.6l1.04,-1.92l0.33,0.28l0.66,-0.33l-0.04,-0.6l-0.76,-0.62l1.06,-2.6l0.32,0.22l0.59,-0.19l0.13,-0.35l-0.04,-0.51l-0.57,-0.32l0.85,-3.84l1.23,-1.8l0.83,-3.04l1.14,-1.76l0.83,-2.45l0.26,-1.21l-0.18,-0.5l1.19,-1.08l-0.32,-1.64l0.96,0.57l0.78,-0.63l-0.39,-0.75l0.2,-0.65l-0.77,-0.77l0.51,-1.07l1.3,-0.86l0.06,-0.46l-0.93,-0.34l-0.33,-1.25l0.97,-2.14l-0.04,-1.48l0.86,-0.53l0.58,-1.33l0.18,-1.96l-0.21,-1.45l0.83,1.17l0.6,0.18l-0.11,0.89l0.55,0.53l0.83,-0.96l-0.27,-0.99l0.21,-0.07l0.24,0.56l0.69,0.32l1.51,0.04l0.37,-0.36l1.37,-0.19l0.99,2.08l2.43,0.92l1.25,-0.64l0.78,0.04l1.72,1.51l0.77,1.04l0.21,1.9l0.43,0.78l-0.03,2.05l-0.39,1.24l0.19,0.93l-0.43,1.74l0.26,1.45l0.79,0.85l1.94,0.56l1.44,1.05l1.36,0.41l1.04,0.69l4.98,-0.53l2.9,-1.06l1.14,0.51l2.23,0.09l4.24,1.43l0.69,0.54l0.19,1.15l0.57,0.58l1.86,-0.27l2.11,0.71l3.79,-0.55l0.69,-0.42l2.19,0.93l1.64,0.24l1.2,-0.3l0.88,0.26l1.89,-0.78l3.07,-0.43l4.16,0.13l1.61,-0.91l7.17,1.02l0.96,-0.19l0.79,-0.58l31.27,5.93l0.23,1.81l0.93,1.82l1.16,0.63l1.96,1.86l0.57,2.45l-0.16,1.0l-3.69,4.55l-0.4,1.41l-1.39,2.63l-2.21,2.42l-0.65,2.68l-1.49,1.84l-2.23,1.5l-1.92,3.35l-1.49,1.27l-0.62,2.02l-0.12,1.87l0.28,0.92l0.56,0.61l0.54,0.04l0.39,-0.35l0.63,0.76l0.89,-0.05l0.07,0.88l0.81,0.95l-0.46,1.0l-0.65,0.06l-0.33,0.4l0.21,1.8l-1.03,2.56l-1.22,1.41l-6.86,39.16l-26.21,-4.99l-28.9,-6.05l-28.8,-6.61l-28.95,-7.24l-1.48,-2.59l0.2,-2.36l-0.23,-0.89Z\", \"name\": \"Oregon\"}, \"US-KY\": {\"path\": \"M583.02,306.59l0.35,-2.18l1.13,0.96l0.72,0.2l0.75,-0.36l0.46,-0.88l0.87,-3.55l-0.54,-1.75l0.38,-0.86l-0.1,-1.88l-1.27,-2.04l1.79,-3.21l1.24,-0.51l0.73,0.06l7.03,2.56l0.81,-0.2l0.65,-0.72l0.24,-1.93l-1.49,-2.14l-0.24,-1.44l0.2,-0.87l0.4,-0.52l1.1,-0.18l1.24,-0.83l3.0,-0.95l0.64,-0.51l0.15,-1.13l-1.53,-2.05l-0.08,-0.68l1.33,-1.97l0.14,-1.16l1.25,0.42l1.12,-1.33l-0.68,-2.0l1.92,0.9l1.72,-0.84l0.03,1.18l1.0,0.46l0.99,-0.94l0.02,-1.36l0.51,0.16l1.9,-0.96l4.41,1.52l0.64,0.94l0.86,0.18l0.59,-0.59l0.73,-2.53l1.38,-0.55l1.39,-1.34l0.86,1.29l0.77,0.42l1.16,-0.13l0.11,0.75l0.95,0.19l0.67,-0.62l0.03,-1.01l0.84,-0.38l0.26,-0.48l-0.25,-2.09l0.84,-0.4l0.34,-0.56l-0.06,-0.69l1.25,-0.56l0.34,-0.72l0.38,1.47l0.61,0.6l1.46,0.64l1.25,-0.0l1.11,0.81l0.53,-0.11l0.26,-0.55l1.1,-0.46l0.53,-0.69l0.04,-3.48l0.85,-2.18l1.02,0.18l1.55,-1.19l0.75,-3.46l1.04,-0.37l1.65,-2.23l0.0,-0.81l-1.18,-2.88l2.78,-0.59l1.54,0.81l3.85,-2.82l2.23,-0.46l-0.18,-1.07l0.36,-1.47l-0.32,-0.36l-1.22,-0.04l0.58,-1.39l-1.09,-1.54l1.65,-1.83l1.81,1.18l0.92,-0.11l1.93,-1.01l0.78,0.88l1.76,0.54l0.57,1.28l0.94,0.92l0.79,1.84l2.6,0.67l1.87,-0.57l1.63,0.27l2.18,1.85l0.96,0.43l1.28,-0.18l0.61,-1.31l0.99,-0.54l1.35,0.5l1.34,0.04l1.33,1.09l1.26,-0.69l1.41,-0.15l1.81,-2.55l1.72,-1.03l0.92,2.35l0.7,0.83l2.45,0.81l1.35,0.97l0.75,1.05l0.93,3.35l-0.37,0.45l0.09,0.72l-0.44,0.61l0.02,0.53l2.24,2.62l1.35,0.92l-0.08,0.89l1.34,0.97l0.58,1.36l1.55,1.2l0.98,1.62l2.14,0.84l1.09,1.12l2.14,0.25l-4.86,6.13l-5.06,4.16l-0.42,0.86l0.22,1.25l-2.07,1.93l0.04,1.64l-3.06,1.63l-0.8,2.38l-1.71,0.6l-2.7,1.83l-1.66,0.48l-3.39,2.42l-23.95,3.09l-8.8,1.42l-7.47,0.86l-7.68,0.46l-22.71,3.52l-0.64,-0.56l-3.63,0.09l-0.41,0.6l1.03,3.57l-23.0,2.73ZM580.9,306.78l-0.59,0.08l-0.06,-0.55l0.47,-0.01l0.18,0.49Z\", \"name\": \"Kentucky\"}, \"US-CO\": {\"path\": \"M364.18,239.57l-1.22,65.87l-29.29,-0.9l-29.38,-1.43l-29.35,-1.95l-32.17,-2.75l8.33,-87.15l27.79,2.4l28.23,1.92l29.58,1.46l27.95,0.87l-0.46,21.66Z\", \"name\": \"Colorado\"}, \"US-OH\": {\"path\": \"M664.99,178.81l1.67,0.47l1.04,-0.3l1.74,1.07l2.07,0.26l1.47,1.18l1.71,0.23l-2.19,1.18l-0.12,0.47l0.42,0.24l2.46,0.19l1.39,-1.1l1.77,-0.25l3.39,0.96l0.92,-0.08l1.48,-1.29l1.74,-0.6l1.15,-0.96l1.91,-0.97l2.62,-0.03l1.09,-0.62l1.24,-0.06l1.07,-0.8l4.24,-5.46l4.53,-3.47l6.92,-4.36l5.83,28.05l-0.51,0.54l-1.28,0.43l-0.41,0.95l1.65,2.24l0.02,2.11l0.41,0.26l0.31,0.94l-0.04,0.76l-0.54,0.83l-0.5,4.08l0.18,3.21l-0.58,0.41l0.34,1.11l-0.35,1.74l-0.39,0.54l0.76,1.23l-0.25,1.87l-2.41,2.65l-0.82,1.86l-1.37,1.5l-1.24,0.67l-0.6,0.7l-0.87,-0.92l-1.18,0.14l-1.32,1.74l-0.09,1.32l-1.78,0.85l-0.78,2.25l0.28,1.58l-0.94,0.85l0.3,0.67l0.63,0.41l0.27,1.3l-0.8,0.17l-0.5,1.6l0.06,-0.93l-0.91,-1.26l-1.53,-0.55l-1.07,0.71l-0.82,1.98l-0.34,2.69l-0.53,0.82l1.22,3.58l-1.27,0.39l-0.28,0.42l-0.25,3.12l-2.66,1.2l-1.0,0.05l-0.76,-1.06l-1.51,-1.1l-2.34,-0.73l-1.17,-1.92l-0.31,-1.14l-0.42,-0.33l-0.73,0.13l-1.84,1.17l-1.1,1.29l-0.4,1.05l-1.43,0.15l-0.87,0.61l-1.11,-1.0l-3.14,-0.59l-1.37,0.72l-0.53,1.25l-0.71,0.05l-3.04,-2.26l-1.93,-0.29l-1.77,0.56l-2.14,-0.52l-0.55,-1.54l-0.96,-0.97l-0.63,-1.38l-2.03,-0.76l-1.14,-1.01l-0.97,0.26l-1.31,0.89l-0.46,0.03l-1.79,-1.23l-0.61,0.2l-0.6,0.71l-8.53,-55.69l20.43,-4.26ZM675.61,181.34l0.53,-0.79l0.67,0.41l-0.48,0.35l-0.72,0.03ZM677.31,180.77l0.01,-0.0l0.01,-0.0l-0.02,0.0Z\", \"name\": \"Ohio\"}, \"US-OK\": {\"path\": \"M399.06,359.31l-0.05,-42.03l-0.39,-0.4l-26.69,-0.22l-25.13,-0.6l0.31,-10.23l36.7,0.74l36.0,-0.07l35.99,-0.86l35.56,-1.62l0.6,10.68l4.55,24.34l1.41,37.88l-1.2,-0.22l-0.29,-0.36l-2.13,-0.21l-0.82,-0.79l-2.11,-0.39l-1.77,-2.05l-1.23,-0.22l-2.25,-1.57l-1.5,-0.4l-0.8,0.46l-0.23,0.88l-0.82,0.24l-0.46,0.62l-2.47,-0.14l-0.47,-0.19l-0.27,-0.68l-1.05,-0.61l-2.3,1.29l-1.17,0.2l-0.19,0.56l-0.63,0.28l-2.12,-0.77l-1.7,1.18l-1.17,0.08l-0.89,0.42l-0.83,1.37l-1.48,0.06l-0.57,1.25l-1.26,-1.55l-1.7,-0.1l-0.32,-0.58l-1.21,-0.46l-0.02,-0.96l-0.44,-0.5l-1.24,-0.18l-0.73,1.38l-0.66,0.11l-0.84,-0.5l-0.97,0.07l-0.71,-1.51l-1.09,-0.35l-1.17,0.57l-0.45,1.7l-0.7,-0.08l-0.49,0.43l0.29,0.73l-0.51,1.68l-0.43,0.19l-0.55,-0.55l-0.3,-0.91l0.39,-1.65l-0.75,-0.86l-0.8,0.18l-0.49,0.76l-0.84,-0.18l-0.92,0.98l-1.07,0.13l-0.53,-1.36l-1.99,-0.19l-0.3,-1.48l-1.19,-0.53l-0.82,0.33l-2.12,2.15l-1.21,0.51l-0.97,-0.38l0.19,-1.25l-0.28,-1.13l-2.33,-0.68l-0.07,-2.18l-0.43,-0.55l-2.11,0.39l-2.52,-0.25l-0.64,0.26l-0.81,1.21l-0.95,0.06l-1.77,-1.77l-0.97,-0.12l-1.5,0.56l-2.68,-0.63l-1.86,-1.0l-1.05,0.25l-2.46,-0.3l-0.17,-2.12l-0.85,-0.87l-0.44,-1.02l-1.16,-0.41l-0.7,-0.83l-0.83,0.08l-0.44,1.64l-2.22,-0.68l-1.07,0.6l-0.96,-0.09l-3.79,-3.78l-1.12,-0.43l-0.8,0.08Z\", \"name\": \"Oklahoma\"}, \"US-WV\": {\"path\": \"M693.03,248.42l3.95,-1.54l0.35,-0.71l0.12,-2.77l1.15,-0.22l0.4,-0.61l-0.57,-2.49l-0.61,-1.24l0.49,-0.64l0.36,-2.77l0.68,-1.66l0.45,-0.39l1.24,0.55l0.41,0.71l-0.14,1.13l0.71,0.46l0.78,-0.44l0.48,-1.42l0.49,0.21l0.57,-0.2l0.2,-0.44l-0.63,-2.09l-0.75,-0.55l0.81,-0.79l-0.26,-1.71l0.74,-2.0l1.65,-0.51l0.17,-1.6l1.02,-1.42l0.43,-0.08l0.65,0.79l0.67,0.19l2.28,-1.59l1.5,-1.64l0.79,-1.83l2.45,-2.67l0.37,-2.41l-0.73,-1.0l0.71,-2.33l-0.25,-0.76l0.59,-0.58l-0.27,-3.43l0.47,-3.93l0.53,-0.8l0.08,-1.11l-0.38,-1.21l-0.39,-0.33l-0.04,-2.01l-1.57,-1.91l0.44,-0.54l0.85,-0.1l0.3,-0.33l4.03,19.34l0.47,0.31l16.6,-3.55l2.17,10.68l0.5,0.37l2.06,-2.5l0.97,-0.56l0.34,-1.03l1.63,-1.99l0.25,-1.05l0.52,-0.4l1.19,0.45l0.74,-0.32l1.32,-2.6l0.6,-0.46l-0.04,-0.85l0.42,0.59l1.81,0.52l3.2,-0.57l0.78,-0.86l0.07,-1.46l2.0,-0.74l1.02,-1.69l0.67,-0.1l3.16,1.5l1.81,-0.71l-0.45,1.02l0.56,0.92l1.27,0.42l0.09,0.96l1.13,0.43l0.09,1.2l0.33,0.42l-0.58,3.64l-9.0,-4.48l-0.64,0.24l-0.31,1.14l0.38,1.61l-0.52,1.62l0.41,2.28l-1.36,2.4l-0.42,1.76l-0.72,0.53l-0.42,1.11l-0.27,0.21l-0.61,-0.23l-0.37,0.33l-1.25,3.28l-1.84,-0.78l-0.64,0.25l-0.94,2.77l0.08,1.47l-0.73,1.14l-0.19,2.33l-0.89,2.2l-3.25,-0.36l-1.44,-1.76l-1.71,-0.24l-0.5,0.41l-0.26,2.17l0.19,1.3l-0.32,1.45l-0.49,0.45l-0.31,1.04l0.23,0.92l-1.58,2.44l-0.04,2.1l-0.52,2.0l-2.58,4.73l-0.75,3.16l0.14,0.76l1.14,0.55l-1.08,1.38l0.06,0.6l0.45,0.4l-2.16,2.13l-0.55,-0.7l-0.84,0.15l-3.12,2.53l-1.03,-0.56l-1.32,0.26l-0.44,0.91l0.45,1.17l-0.91,0.91l-0.73,-0.05l-2.27,1.0l-1.21,0.96l-2.18,-1.36l-0.73,-0.01l-0.82,1.58l-1.1,0.49l-1.22,1.46l-1.08,0.08l-1.98,-1.09l-1.31,-0.01l-0.61,-0.74l-1.19,-0.6l-0.31,-1.33l-0.89,-0.55l0.36,-0.67l-0.3,-0.81l-0.85,-0.37l-0.84,0.25l-1.33,-0.17l-1.26,-1.19l-2.06,-0.79l-0.76,-1.43l-1.58,-1.24l-0.7,-1.49l-1.0,-0.6l-0.12,-1.09l-1.38,-0.95l-2.0,-2.27l0.71,-2.03l-0.25,-1.62l-0.66,-1.46Z\", \"name\": \"West Virginia\"}, \"US-WY\": {\"path\": \"M218.53,207.02l10.1,-86.6l25.46,2.74l26.8,2.4l26.83,1.91l27.85,1.46l-3.67,87.11l-27.32,-1.41l-28.21,-1.97l-29.69,-2.63l-28.14,-3.02Z\", \"name\": \"Wyoming\"}, \"US-UT\": {\"path\": \"M178.67,180.38l41.53,5.44l-2.51,21.5l0.35,0.45l32.24,3.43l-8.33,87.15l-42.54,-4.67l-42.41,-5.77l16.08,-108.34l5.58,0.82ZM187.74,191.46l-0.3,0.04l-0.25,0.62l0.74,3.68l-0.81,0.19l-0.5,1.31l1.15,0.59l0.35,-0.84l0.37,-0.18l0.92,1.14l0.83,1.68l-0.25,1.0l0.16,1.45l-0.4,0.77l0.4,0.52l-0.05,0.56l1.58,1.84l0.02,0.59l1.13,1.92l0.71,-0.1l0.83,-1.74l0.08,2.28l0.53,0.94l0.06,1.8l0.99,0.47l1.65,-0.67l2.48,-1.77l0.37,-1.25l3.32,-1.44l0.17,-0.54l-0.52,-1.02l-0.68,-0.84l-1.36,-0.7l-1.87,-4.59l-0.87,-0.46l0.87,-0.92l1.3,0.6l1.33,-0.15l0.92,-0.83l-0.06,-1.12l-1.55,-0.5l-0.81,0.42l-1.17,-0.12l0.27,-0.76l-0.58,-0.79l-1.86,-0.22l-0.56,1.13l0.28,0.78l-0.35,0.69l0.55,2.44l-0.91,0.32l-0.34,-0.42l0.22,-1.8l-0.42,-0.69l-0.06,-1.74l-0.68,-0.6l-1.32,-0.11l-1.07,-1.55l-0.19,-0.69l0.64,-0.55l0.36,-1.29l-0.83,-1.38l-1.23,-0.28l-0.99,0.81l-2.73,0.2l-0.35,0.63l0.62,0.83l-0.28,0.43ZM199.13,204.0l0.03,0.02l0.04,0.11l-0.07,-0.13ZM199.17,204.81l0.31,0.91l-0.18,0.9l-0.39,-0.93l0.25,-0.88Z\", \"name\": \"Utah\"}, \"US-IN\": {\"path\": \"M600.86,189.63l1.43,0.87l2.1,0.14l1.52,-0.38l2.63,-1.39l2.73,-2.1l32.3,-4.83l8.81,57.45l-0.66,1.15l0.3,0.92l0.81,0.79l-0.66,1.14l0.49,0.8l1.12,0.04l-0.36,1.14l0.18,0.51l-1.81,0.29l-3.18,2.55l-0.43,0.17l-1.4,-0.81l-3.46,0.91l-0.09,0.78l1.19,3.1l-1.4,1.88l-1.18,0.49l-0.45,0.89l-0.31,2.6l-1.11,0.88l-1.06,-0.24l-0.47,0.47l-0.85,1.95l0.05,3.14l-0.39,1.0l-1.38,0.85l-0.93,-0.68l-1.24,0.01l-1.48,-0.69l-0.62,-1.84l-1.89,-0.73l-0.44,0.3l-0.04,0.5l0.83,0.68l-0.62,0.31l-0.89,-0.35l-0.36,0.29l-0.04,0.48l0.54,0.93l-1.08,0.68l0.14,2.37l-1.06,0.65l-0.0,0.83l-0.16,0.37l0.08,-0.5l-0.33,-0.51l-1.6,0.18l-1.4,-1.69l-0.5,-0.08l-1.67,1.5l-1.57,0.69l-1.07,2.89l-0.81,-1.07l-2.79,-0.77l-1.11,-0.61l-1.08,-0.18l-1.76,0.92l-0.64,-1.02l-0.58,-0.18l-0.53,0.56l0.64,1.86l-0.34,0.84l-0.28,0.09l-0.02,-1.18l-0.42,-0.4l-0.58,0.01l-1.46,0.79l-1.41,-0.84l-0.85,0.0l-0.48,0.95l0.71,1.55l-0.49,0.74l-1.15,-0.39l-0.07,-0.54l-0.53,-0.44l0.55,-0.63l-0.35,-3.09l0.96,-0.78l-0.07,-0.58l-0.44,-0.23l0.69,-0.46l0.25,-0.61l-1.17,-1.47l0.46,-1.16l0.32,0.19l1.39,-0.55l0.33,-1.8l0.55,-0.4l0.44,-0.92l-0.06,-0.83l1.52,-1.07l0.06,-0.69l-0.41,-0.93l0.57,-0.86l0.14,-1.29l0.87,-0.51l0.4,-1.91l-1.08,-2.54l0.22,-0.8l-0.16,-1.11l-0.93,-0.91l-0.61,-1.5l-1.05,-0.78l-0.04,-0.59l0.92,-1.39l-0.63,-2.25l1.27,-1.31l-6.5,-50.68Z\", \"name\": \"Indiana\"}, \"US-IL\": {\"path\": \"M540.07,225.55l0.86,-0.35l0.37,-0.67l-0.23,-2.33l-0.73,-0.93l0.15,-0.41l0.72,-0.69l2.42,-0.98l0.71,-0.65l0.63,-1.68l0.17,-2.11l1.65,-2.47l0.27,-0.94l-0.03,-1.22l-0.59,-1.95l-2.23,-1.88l-0.11,-1.77l0.67,-2.38l0.45,-0.37l4.6,-0.85l0.81,-0.41l0.82,-1.12l2.55,-1.0l1.43,-1.56l-0.01,-1.57l0.4,-1.71l1.42,-1.46l0.29,-0.74l0.33,-4.37l-0.76,-2.14l-4.02,-2.47l-0.28,-1.5l-0.48,-0.82l-3.64,-2.48l44.58,-4.64l-0.01,2.66l0.57,2.59l1.37,2.49l1.31,0.95l0.76,2.6l1.26,2.71l1.42,1.84l6.6,51.49l-1.22,1.13l-0.1,0.69l0.67,1.76l-0.84,1.09l-0.03,1.11l1.19,1.09l0.56,1.41l0.89,0.82l-0.1,1.8l1.06,2.31l-0.28,1.49l-0.87,0.56l-0.21,1.47l-0.59,0.93l0.34,1.2l-1.48,1.13l-0.23,0.41l0.28,0.7l-0.93,1.17l-0.31,1.19l-1.64,0.67l-0.63,1.67l0.15,0.8l0.97,0.83l-1.27,1.15l0.42,0.76l-0.49,0.23l-0.13,0.54l0.43,2.94l-1.15,0.19l0.08,0.45l0.92,0.78l-0.48,0.17l-0.03,0.64l0.83,0.29l0.04,0.42l-1.31,1.97l-0.25,1.19l0.59,1.22l0.7,0.64l0.37,1.08l-3.31,1.22l-1.19,0.82l-1.24,0.24l-0.77,1.01l-0.18,2.04l0.3,0.88l1.4,1.93l0.07,0.54l-0.53,1.19l-0.96,0.03l-6.3,-2.43l-1.08,-0.08l-1.57,0.64l-0.68,0.72l-1.44,2.95l0.06,0.66l-1.18,-1.2l-0.79,0.14l-0.35,0.47l0.59,1.13l-1.24,-0.79l-0.01,-0.68l-1.6,-2.21l-0.4,-1.12l-0.76,-0.37l-0.05,-0.49l0.94,-1.35l0.2,-1.03l-0.32,-1.01l-1.44,-2.02l-0.47,-3.18l-2.26,-0.99l-1.55,-2.14l-1.95,-0.82l-1.72,-1.34l-1.56,-0.14l-1.82,-0.96l-2.32,-1.78l-2.34,-2.44l-0.36,-1.95l2.37,-6.85l-0.25,-2.32l0.98,-2.06l-0.38,-0.84l-2.66,-1.45l-2.59,-0.67l-1.29,0.45l-0.86,1.45l-0.46,0.28l-0.44,-0.13l-1.3,-1.9l-0.43,-1.52l0.16,-0.87l-0.54,-0.91l-0.29,-1.65l-0.83,-1.36l-0.94,-0.9l-4.11,-2.52l-1.01,-1.64l-4.53,-3.53l-0.73,-1.9l-1.04,-1.21l-0.04,-1.6l-0.96,-1.48l-0.75,-3.54l0.1,-2.94l0.6,-1.28ZM585.52,295.52l0.05,0.05l0.04,0.04l-0.05,-0.0l-0.04,-0.09Z\", \"name\": \"Illinois\"}, \"US-AK\": {\"path\": \"M89.36,517.03l0.84,0.08l0.09,0.36l-0.3,0.32l-0.64,0.3l-0.15,-0.15l0.25,-0.4l-0.12,-0.31l0.04,-0.2ZM91.79,517.2l0.42,-0.02l0.19,-0.11l0.26,-0.56l1.74,-0.37l2.26,0.07l1.57,0.63l0.84,0.69l0.02,1.85l0.32,0.18l0.0,0.34l0.25,0.27l-0.35,0.09l-0.25,-0.16l-0.23,0.08l-0.41,-0.33l-0.29,-0.04l-0.69,0.23l-0.91,-0.21l-0.07,-0.26l-0.24,-0.17l0.27,-0.21l0.74,0.72l0.46,-0.02l0.2,-0.48l-0.28,-0.44l-0.03,-0.3l-0.31,-0.67l-0.96,-0.52l-1.05,0.27l-0.57,0.69l-1.04,0.3l-0.44,-0.3l-0.48,0.12l-0.06,0.12l-0.63,-0.14l-0.26,0.06l-0.22,0.24l0.2,-0.3l-0.1,-0.55l0.12,-0.79ZM99.83,520.19l0.3,-0.07l0.29,-0.28l-0.03,-0.55l0.31,0.2l-0.06,0.45l0.83,0.92l-0.93,-0.51l-0.44,0.41l-0.13,-0.54l-0.13,-0.04ZM100.07,520.81l0.0,0.04l-0.03,0.0l0.02,-0.04ZM102.01,520.78l0.05,-0.34l0.33,-0.2l0.01,-0.12l-0.58,-1.24l0.1,-0.2l0.59,-0.24l0.29,-0.3l0.65,-0.34l0.62,-0.01l0.41,-0.13l0.81,0.1l1.42,-0.06l0.64,0.15l0.49,0.27l0.88,0.11l0.27,0.15l0.23,-0.22l0.27,-0.05l0.39,0.09l0.2,0.21l0.26,-0.05l0.2,0.38l0.44,0.31l0.1,0.23l0.7,-0.06l0.3,-0.77l0.44,-0.61l0.47,-0.21l1.78,-0.45l0.5,0.04l0.37,0.23l1.13,-0.38l0.66,0.04l-0.11,0.41l0.43,0.51l0.42,0.26l0.62,0.06l0.42,-0.43l0.14,-0.42l-0.34,-0.29l-0.31,-0.03l0.15,-0.44l-0.15,-0.38l1.04,-1.0l0.83,-0.99l0.12,-0.08l0.34,0.17l0.38,-0.02l0.32,0.3l0.19,0.37l0.66,-0.29l-0.1,-0.57l-0.43,-0.58l-0.46,-0.24l0.15,-0.44l0.77,-0.47l0.36,0.04l0.68,-0.2l0.8,-0.08l0.58,0.18l0.45,-0.16l-0.12,-0.52l0.66,-0.6l0.4,0.06l0.26,-0.11l0.43,-0.52l0.34,-0.12l0.23,-0.46l-0.42,-0.3l-0.38,0.03l-0.33,0.15l-0.36,0.39l-0.51,-0.09l-0.5,0.27l-2.19,-0.52l-1.69,-0.24l-0.71,-0.26l-0.12,-0.2l0.17,-0.32l0.04,-0.44l-0.28,-0.56l0.45,-0.35l0.43,-0.13l0.36,0.38l0.04,0.25l-0.15,0.44l0.07,0.39l0.56,0.12l0.32,-0.15l-0.03,-0.3l0.16,-0.35l-0.05,-0.75l-0.84,-1.05l0.01,-0.7l-0.67,-0.19l-0.19,0.24l-0.06,0.48l-0.41,0.22l-0.09,0.03l-0.26,-0.56l-0.34,-0.09l-0.51,0.41l-0.02,0.26l-0.15,0.15l-0.38,-0.02l-0.48,0.27l-0.24,0.54l-0.22,1.13l-0.13,0.32l-0.19,0.05l-0.31,-0.31l0.1,-2.67l-0.23,-0.99l0.19,-0.33l0.02,-0.27l-0.16,-0.29l-0.53,-0.27l-0.46,0.26l-0.1,-0.07l-0.35,0.13l-0.01,-0.54l-0.54,-0.61l0.19,-0.22l0.08,-0.65l-0.16,-0.37l-0.55,-0.26l-1.89,-0.01l-0.58,-0.34l-1.01,-0.12l-0.16,-0.12l-0.07,-0.22l-0.23,-0.07l-1.06,0.53l-0.75,-0.16l-0.12,-0.44l0.3,0.09l0.48,-0.08l0.31,-0.44l-0.21,-0.49l0.37,-0.49l0.83,0.04l0.43,-0.16l0.12,-0.35l-0.14,-0.42l-1.11,-0.64l0.09,-0.27l0.34,-0.17l0.38,-0.44l1.12,-0.0l0.23,-0.09l0.19,-0.32l0.03,-0.95l0.22,-0.54l0.07,-1.42l0.25,-0.45l-0.08,-0.58l0.07,-0.2l0.88,-0.74l0.02,-0.1l-0.09,-0.02l0.19,-0.16l-0.31,-0.35l-0.27,0.05l-0.04,-0.25l-0.09,-0.04l0.57,-0.22l0.33,-0.25l0.51,-0.1l0.24,-0.25l0.42,-0.0l0.19,0.18l0.41,0.08l0.29,-0.08l0.44,-0.55l-0.3,-0.34l-0.39,-0.07l-0.05,-0.33l-0.27,-0.31l-0.6,0.4l-0.43,-0.07l-1.12,0.62l-1.04,0.06l-0.34,0.18l-0.48,-0.03l-0.12,0.5l0.4,0.64l-0.26,0.19l-0.29,0.45l-0.19,-0.09l-0.17,-0.27l-0.76,-0.04l-1.16,-0.25l-0.81,-0.4l-1.05,-0.59l-0.78,-0.61l-0.52,-0.69l0.01,-0.21l0.6,-0.1l-0.06,-0.4l0.1,-0.24l-0.51,-1.06l0.1,-0.78l-0.18,-0.52l0.33,-0.54l-0.4,-0.34l-0.23,0.0l-0.44,-0.69l-0.01,-0.2l0.59,-0.14l0.3,-0.37l-0.05,-0.44l-0.36,-0.26l0.72,0.04l0.29,-0.13l0.18,-0.25l0.63,0.01l0.08,0.51l0.56,0.51l0.32,0.49l-0.03,0.09l-0.79,0.11l-0.53,0.51l0.31,0.45l0.94,-0.08l0.4,0.24l0.26,-0.01l0.39,-0.22l0.29,0.03l0.08,0.07l-0.51,0.6l-0.05,0.38l0.22,0.43l0.46,0.24l1.42,0.07l0.28,-0.17l0.16,-0.35l0.19,-0.08l-0.2,-0.74l0.35,-0.35l-0.02,-0.33l-0.18,-0.25l0.15,-0.43l-0.08,-0.13l-0.52,-0.26l-0.77,-0.01l-0.34,0.1l-1.51,-1.2l-0.01,-0.53l-0.35,-0.39l-0.26,-0.12l-0.15,-0.38l0.55,0.15l0.53,-0.4l-0.17,-0.41l-0.7,-0.51l0.4,-0.45l-0.14,-0.5l0.31,-0.15l0.27,0.08l0.44,-0.1l0.45,0.27l0.75,-0.04l0.67,-0.44l-0.08,-0.48l-0.18,-0.19l-0.48,-0.03l-0.51,0.16l-0.43,-0.19l-1.02,-0.02l-0.26,0.14l-0.44,0.04l-0.36,0.29l-0.62,0.09l-0.15,0.12l-0.15,0.42l-0.13,-0.19l0.27,-0.52l0.36,-0.24l-0.1,-0.44l-0.48,-0.6l0.03,-0.1l0.37,0.1l0.4,-0.18l0.16,-0.22l0.07,-0.36l-0.22,-0.6l0.55,0.23l0.42,-0.5l-0.44,-0.59l0.38,0.32l0.94,0.37l0.2,-0.44l0.14,0.01l-0.04,-0.54l0.12,-0.36l0.48,-0.28l0.49,0.01l1.96,-0.47l0.8,-0.03l0.3,0.25l-0.01,0.44l0.19,0.27l-0.27,0.16l0.13,0.47l0.35,0.15l0.74,0.01l0.29,-0.39l-0.13,-0.45l0.08,-0.34l1.21,-0.11l0.29,-0.63l-0.31,-0.24l-0.93,-0.04l0.03,-0.08l0.41,-0.03l0.15,-0.63l0.72,-0.27l0.86,0.88l0.32,0.11l0.38,-0.28l0.08,-0.27l-0.04,-0.41l-0.18,-0.26l0.34,0.0l0.69,0.32l0.35,0.31l0.54,0.81l-0.06,0.29l-0.38,-0.09l-0.52,0.21l-0.13,0.47l0.43,0.24l1.07,0.06l0.05,0.52l0.31,0.3l0.91,0.49l1.02,0.09l0.53,-0.18l0.41,0.17l0.49,-0.0l1.61,-0.32l0.1,0.49l1.67,0.97l0.28,0.31l0.53,0.32l1.06,0.37l1.81,-0.2l0.56,-0.21l0.47,-0.49l0.2,-0.57l0.15,-0.95l0.61,-1.1l0.01,-0.29l-0.24,-0.88l0.14,-0.05l-0.03,-0.19l0.58,0.25l0.2,-0.1l0.86,0.0l0.36,-0.17l0.41,-0.47l0.07,-0.93l-0.19,-0.43l0.22,-0.03l0.11,-0.44l-0.23,-0.32l-0.73,-0.39l-0.29,0.12l-0.43,-0.04l-0.52,0.2l-0.21,-0.12l-0.29,-0.6l-0.31,-0.29l-0.51,0.0l-0.02,0.1l-0.52,-0.04l-0.43,-0.31l-0.56,-0.02l-0.32,0.1l-1.04,-0.24l-0.48,0.03l-0.33,0.16l0.04,-0.42l-0.29,-0.71l-0.21,-0.97l-0.49,-0.23l-0.55,-0.08l-0.29,0.09l-0.47,-0.64l-0.48,-0.4l-0.5,-0.25l-1.14,-1.02l-0.95,-0.24l-0.2,-0.27l-0.49,-0.27l-0.11,-0.23l-0.63,-0.01l-0.04,0.13l-0.9,-1.22l-1.86,-2.14l-0.25,-0.55l-0.0,-0.32l0.07,-0.19l0.27,0.06l0.27,-0.13l0.35,-0.76l-0.41,-1.02l0.05,-0.11l0.4,0.19l0.51,-0.05l0.41,-0.17l0.51,0.66l0.43,0.23l0.48,-0.4l-0.02,-0.33l-0.32,-0.66l-0.48,-0.41l-0.46,-0.78l-0.84,-0.88l-0.12,-0.02l-0.98,-1.16l-0.33,-0.52l-0.04,-0.3l-0.46,-0.96l0.41,0.03l0.54,0.45l0.34,0.15l0.44,-0.1l0.12,-0.17l0.2,0.03l0.06,-0.15l0.18,0.03l0.17,0.41l0.2,0.18l1.09,0.35l1.08,-0.18l1.53,0.45l0.14,0.13l-0.06,0.06l0.19,0.45l0.88,0.89l1.03,0.47l0.56,-0.36l-0.06,-0.35l-0.37,-0.64l1.48,0.48l0.36,0.26l0.11,0.4l0.61,0.16l1.2,0.07l0.48,0.24l1.49,0.99l0.18,0.45l-0.34,0.04l-0.1,0.06l-0.4,0.34l-0.16,0.3l-0.6,-0.28l-0.52,-0.06l-0.12,0.69l0.62,0.52l0.02,0.52l0.16,0.37l0.28,0.32l0.91,0.59l0.18,0.29l0.46,0.4l0.69,0.3l0.39,0.29l-0.14,0.25l0.02,0.32l0.38,0.24l0.2,-0.05l0.26,0.12l0.44,0.49l0.56,0.16l0.39,0.46l-0.08,0.39l0.24,0.31l0.41,0.19l0.41,-0.15l0.03,-0.15l1.39,-0.46l0.24,0.52l0.24,0.25l-0.25,0.06l0.01,0.5l0.38,0.29l0.43,0.02l0.5,-0.24l0.36,-0.41l-0.05,-0.98l-0.45,-0.65l0.19,0.01l0.65,1.54l0.23,0.25l1.6,0.95l0.53,-0.01l0.29,-0.27l0.34,-0.59l-0.02,-0.44l0.3,-0.38l-0.16,-0.23l-0.72,-0.38l-0.44,-0.04l-0.49,-0.92l-0.89,-0.53l-0.42,-0.12l-0.61,0.21l-0.32,-0.28l-0.0,-0.43l-0.16,-0.19l-0.23,-0.71l0.64,-0.39l0.29,-0.02l0.35,0.29l0.32,0.05l0.37,-0.41l-0.0,-0.15l-0.75,-1.21l-1.13,-0.68l-0.06,-0.29l0.18,-0.28l-0.15,-0.48l-0.43,-0.23l-0.43,0.29l-0.42,0.07l-0.25,-0.44l-0.53,-0.4l-0.31,-0.1l-0.25,-0.41l-1.35,-1.4l0.59,-1.11l0.15,-1.07l-0.1,-1.05l-0.51,-1.13l-0.29,-1.11l-0.36,-0.48l-0.85,-2.25l-1.06,-1.45l-0.08,-0.73l-0.38,-0.89l0.17,-0.17l0.91,-0.32l1.04,-1.04l1.08,1.08l1.75,1.29l0.84,0.44l1.33,0.95l1.37,0.54l1.36,0.24l1.49,-0.09l0.3,0.11l0.42,-0.05l0.4,-0.16l0.23,-0.26l0.3,-0.14l0.42,-0.5l0.56,-0.03l0.17,-0.31l1.66,0.14l0.96,-0.29l0.5,0.12l0.03,0.15l0.87,0.52l0.35,0.13l0.52,-0.01l0.77,0.56l0.91,0.33l0.1,0.2l0.28,-0.04l0.42,0.16l1.99,0.27l-0.05,0.31l0.11,0.18l-0.18,0.06l-0.15,0.66l0.44,0.21l0.04,0.83l0.28,0.36l0.44,-0.14l0.1,-0.13l0.05,-0.46l0.22,-0.51l1.1,0.62l0.73,0.1l0.29,-0.35l-0.22,-0.39l-0.74,-0.5l-0.43,-0.14l-0.07,-0.18l0.03,-0.25l0.76,-0.07l0.26,0.1l0.01,0.3l0.27,0.62l0.54,0.33l0.14,-0.17l0.45,0.24l0.16,-0.08l0.63,0.55l1.13,0.63l0.13,-0.03l0.81,0.55l0.59,0.22l1.21,0.25l1.27,0.12l1.06,-0.17l1.19,0.0l0.01,0.22l0.26,0.49l0.68,0.48l0.08,0.62l0.56,0.17l0.57,0.45l-0.61,-0.02l-0.77,-0.42l-0.42,0.03l-0.44,0.21l0.1,0.48l0.23,0.26l-0.19,0.32l0.18,0.59l0.33,0.11l0.33,-0.12l0.64,0.36l0.3,0.06l0.31,-0.08l0.23,-0.23l0.33,-0.02l0.39,0.36l0.26,0.01l0.25,0.18l0.33,0.02l0.27,-0.16l0.13,0.09l0.16,0.38l-0.54,-0.04l-0.29,0.34l0.21,0.4l0.2,0.11l0.07,0.35l0.89,0.58l-0.04,0.13l0.18,0.3l0.49,0.21l0.94,-0.04l0.96,0.68l0.58,0.26l0.32,0.03l0.37,0.42l0.23,0.1l0.1,0.31l0.34,0.26l0.21,0.38l0.34,0.08l0.26,-0.12l0.25,0.23l-0.55,0.05l-0.29,0.34l-0.41,0.04l-0.18,0.63l0.35,0.33l1.4,0.72l-0.08,0.69l1.48,0.96l0.49,0.67l0.27,0.15l0.49,-0.16l1.05,0.48l0.24,-0.05l0.38,0.32l0.16,0.58l1.1,0.42l0.72,0.06l0.21,0.19l0.85,0.38l0.32,0.34l0.31,0.09l0.59,0.53l0.2,0.37l0.73,0.47l0.25,0.29l0.1,0.53l0.48,0.29l0.55,0.03l0.31,0.44l0.56,0.33l-0.11,0.34l0.39,0.41l1.66,1.19l0.76,0.36l0.16,-0.03l1.78,1.0l0.42,0.4l0.69,0.34l0.47,0.65l0.08,-0.08l-0.02,0.25l0.22,0.06l0.5,0.55l0.02,0.21l0.5,0.23l0.54,0.42l1.19,0.58l0.8,0.03l0.63,0.31l0.03,0.31l0.43,0.12l0.33,-0.2l0.19,-0.0l0.43,0.12l1.02,0.51l0.05,0.25l0.41,0.27l0.22,-0.19l0.58,0.53l0.31,0.09l0.53,0.55l-0.01,0.24l0.49,0.42l0.02,0.24l0.27,0.43l0.55,0.34l0.18,0.4l0.42,0.15l0.58,0.51l0.56,0.96l0.35,0.26l0.53,0.01l0.15,0.11l-23.69,51.51l0.09,0.46l1.53,1.4l0.52,0.02l0.19,-0.15l1.17,1.29l0.41,0.12l1.37,-0.4l1.79,0.68l-0.86,0.96l-0.08,0.38l0.35,1.01l0.91,0.92l-0.08,0.65l0.1,0.44l2.43,4.76l-0.2,1.48l-0.29,0.38l0.19,0.62l0.58,0.12l0.83,-0.25l0.54,-0.07l0.07,0.08l0.03,0.1l-0.66,0.3l-0.33,0.34l0.29,0.54l0.35,-0.0l0.37,-0.18l0.25,0.12l0.02,0.21l0.44,0.11l0.09,0.11l0.26,1.19l-0.17,0.03l-0.1,0.51l0.24,0.32l0.94,0.22l0.04,0.16l-0.27,0.18l0.01,0.12l0.21,0.32l0.21,0.09l-0.05,0.37l-0.24,-0.02l-0.1,-0.46l-0.35,-0.31l-0.11,0.06l-0.28,-0.47l-0.47,-0.03l-0.26,0.35l-0.45,0.01l-0.08,0.13l-0.26,-0.63l-0.14,0.01l-0.35,-0.41l-0.47,-0.12l-0.89,-1.43l0.11,-0.01l0.32,-0.49l-0.08,-0.26l-0.34,-0.28l-0.51,0.01l-0.47,-0.93l-0.05,-0.15l0.12,-0.53l-0.08,-0.41l-0.52,-1.06l-0.46,-0.7l-0.19,-0.07l0.1,-0.61l-0.29,-0.28l-0.72,-0.14l-1.24,-1.44l-0.27,-0.47l-0.01,-0.21l-0.32,-0.23l-0.24,-0.34l-0.28,-0.11l-0.49,-0.63l0.39,-0.11l0.12,-0.23l0.05,0.05l0.59,-0.3l-0.02,0.13l-0.16,0.06l-0.16,0.55l0.3,0.41l0.38,0.07l0.43,-0.3l0.25,-1.03l0.15,-0.22l0.42,0.2l0.36,0.46l0.36,0.04l0.35,-0.35l-0.47,-0.83l-0.69,-0.39l-0.27,-0.91l-0.35,-0.63l-0.4,-0.17l-0.67,0.44l-0.39,0.06l-0.79,0.37l-1.9,-0.05l-1.0,-0.5l-0.45,-0.34l-1.46,-1.5l0.23,-0.14l0.21,-0.32l0.16,-0.74l-0.43,-0.94l-0.52,-0.09l-0.33,0.19l-0.12,0.52l-0.6,-0.04l-0.85,-0.89l-2.81,-1.97l-1.68,-0.48l-1.62,-0.65l-1.13,-0.19l-0.1,-0.53l-0.27,-0.5l0.13,-0.25l-0.02,-0.26l-0.22,-0.25l-0.8,-0.28l-0.36,-0.35l-0.17,-0.01l-0.13,-0.55l-0.2,-0.34l-0.2,-0.12l0.7,-0.5l0.09,-0.27l-0.09,-0.08l0.21,-0.27l0.23,-0.09l0.38,0.08l0.38,-0.17l0.18,-0.32l-0.03,-0.34l-0.35,-0.22l-0.55,-0.07l-0.81,0.27l-0.24,0.2l-0.57,0.02l-0.56,0.35l-0.61,0.15l-0.2,-0.13l-0.19,-0.59l-0.58,-0.63l0.77,-0.37l0.19,-0.38l-0.32,-0.45l-0.53,-0.01l-0.15,-0.48l-0.19,-0.17l0.09,-0.49l-0.16,-0.25l0.04,-0.22l-0.31,-0.55l-0.43,-0.22l-0.53,0.17l-0.07,-0.2l-0.27,-0.03l-0.09,-0.14l0.22,-0.56l0.26,0.03l0.08,-0.09l0.65,0.37l0.38,0.07l0.42,-0.49l-0.14,-0.42l-0.27,-0.26l-1.05,-0.52l-1.54,0.27l-0.1,-0.21l-0.41,-0.3l-0.42,-0.01l-0.08,-0.23l-0.47,0.02l-0.21,-0.16l0.21,-0.26l-0.05,-0.39l0.14,-0.4l-0.28,-0.27l-0.25,-0.05l0.21,-0.77l-0.33,-0.28l-0.29,0.02l-1.36,0.57l0.02,-0.11l-0.34,-0.35l-1.19,-0.19l-0.14,0.25l-0.55,0.26l0.08,0.49l0.21,0.14l-0.01,0.1l-0.83,-0.27l-0.63,-0.03l-0.23,0.49l-0.51,0.38l0.12,0.52l0.31,0.16l0.46,-0.02l-0.05,0.11l-0.98,0.16l-0.3,0.14l-0.16,0.16l-0.05,0.46l0.37,0.28l0.83,-0.12l0.12,0.14l-0.04,0.25l0.31,0.21l-0.27,0.12l-0.15,0.24l-0.51,-0.02l-0.23,0.34l-0.3,0.12l0.05,0.54l-0.3,0.32l-0.12,-0.14l-0.66,0.24l-0.32,-0.27l-0.44,-0.13l-0.32,-0.39l0.11,-0.5l-0.38,-0.29l-0.64,0.04l0.13,-0.4l-0.05,-0.34l-0.23,-0.26l-0.26,-0.07l-0.4,0.16l-0.47,0.73l-0.25,-0.01l-0.23,-0.49l-0.46,-0.07l-0.37,0.4l-0.4,-0.06l-0.16,0.33l-0.29,-0.31l-0.42,-0.03l-0.26,0.25l-0.01,0.21l-0.31,-0.08l-0.11,-0.32l-0.12,-0.03l-0.37,0.06l-0.72,0.4l-0.01,-0.27l-0.13,-0.08l-0.8,-0.04l-0.38,0.2l-0.0,0.45l-0.09,0.05l-1.16,0.08l-0.3,0.13l-0.87,-0.77l-0.22,-0.05l-0.29,0.29l-0.4,-0.28l-1.02,-0.03l0.03,-0.13l-0.35,-0.39l-0.01,-0.13l0.45,0.02l0.16,-0.37l0.53,0.01l0.43,0.3l0.3,0.45l0.49,-0.04l0.2,-0.43l0.23,0.09l0.44,-0.04l0.48,-0.17l0.06,-0.15l0.45,-0.23l0.46,-0.08l0.32,-0.52l-0.21,-0.37l-0.49,-0.19l-1.84,0.04l-0.57,-0.71l-0.07,-0.28l1.28,-0.98l1.62,-0.44l0.37,-0.26l0.33,-0.45l0.46,-0.1l0.65,-0.89l0.14,-1.04l0.36,-0.03l0.74,0.3l1.54,-0.17l1.4,0.03l0.01,0.5l0.23,0.42l0.56,0.48l1.06,0.16l0.14,0.1l0.28,0.41l0.4,0.26l1.19,1.07l0.2,0.34l0.25,0.13l0.5,-0.37l0.0,-0.44l-0.13,-0.39l-0.42,-0.46l-0.43,-0.13l-0.32,-0.52l-0.43,-0.35l-0.69,-1.19l0.45,-0.11l0.44,-0.3l0.35,0.02l0.33,-0.17l1.56,0.33l0.37,-0.06l0.15,-0.62l-0.09,-0.11l-0.67,-0.46l-0.84,-0.3l-0.61,-0.04l-0.74,0.14l-0.37,0.19l-0.29,0.35l-0.76,-0.52l-0.11,-0.24l-0.42,-0.02l-0.16,-0.12l0.14,-0.2l-0.17,-0.67l-0.09,-0.02l-1.07,0.27l-0.85,-0.19l-0.49,0.0l-0.85,0.41l-0.65,-0.15l-0.6,-0.29l-1.18,0.04l-0.71,0.35l-0.19,0.5l-0.35,-0.15l-0.65,0.04l-0.5,0.24l-0.62,0.03l-0.54,0.15l-0.41,0.33l-0.12,0.36l-0.49,0.22l-0.59,-0.02l-0.4,-0.27l-0.26,-0.68l-0.43,-0.32l-0.3,-0.11l-0.42,0.02l-0.3,0.28l0.16,0.51l0.31,0.08l0.01,0.37l0.37,0.61l0.21,0.72l-0.38,0.08l-0.35,0.26l-0.33,-0.06l-0.56,-0.39l-0.98,-0.37l-0.58,0.21l0.02,0.44l-0.07,-0.38l-0.32,-0.34l-0.42,0.19l-0.23,0.4l-0.2,-0.38l-0.81,0.14l-0.08,0.05l-0.02,0.41l-0.37,-0.32l-0.33,-0.04l-0.36,0.28l0.13,0.39l-1.49,-0.27l-0.16,0.49l-0.25,0.14l-0.28,0.36l-0.51,0.04l-0.02,0.17l-0.2,0.09l0.03,0.42l-0.16,0.27l-0.01,0.39l0.33,0.34l0.59,-0.05l0.39,0.38l0.56,0.31l0.08,0.49l0.23,0.34l0.3,0.19l0.03,0.3l-0.64,0.54l-0.5,-0.05l-0.44,0.18l-0.88,-0.46l-0.37,0.02l-0.48,0.41l-0.2,-0.12l-0.45,-0.01l-0.34,0.59l-0.75,-0.12l-0.4,0.05l-0.27,0.3l-0.1,-0.02l0.07,0.06l-0.11,0.01l0.0,0.1l-0.42,-0.28l-0.36,0.33l-0.19,-0.1l-0.32,0.19l-0.3,-0.11l-0.37,0.07l-0.53,-0.44l-0.45,-0.15l-0.9,0.53l-0.18,-0.15l-0.71,-0.02l-0.45,0.28l-0.15,-0.37l-0.41,-0.28l-0.42,0.1l-0.43,0.49l-0.37,-0.15l-0.28,0.31l-0.47,-0.08l-0.4,-0.43l-0.4,0.07l-0.3,0.24l-0.14,-0.11l-0.43,-0.05l-0.14,0.08l-1.45,-0.04l-0.31,0.12l-0.22,0.28l0.24,0.95l-0.31,-0.03l-0.15,0.18l-0.69,-0.24l-0.41,-0.28l-0.26,0.05l-0.26,0.26l-0.2,-0.24l-0.49,0.22l-0.65,0.09l-0.32,-0.22l-0.27,0.2l-0.19,-0.65l-0.39,-0.22l-0.43,0.08l-0.28,0.31l-0.44,0.09l-0.26,-0.07l-0.14,0.34l-0.06,-0.31l-0.26,-0.25l-0.54,-0.14l-1.29,-0.05l-0.62,0.31l-0.42,-0.34l-0.51,-0.04l-0.84,0.27l-0.73,0.11l-0.16,0.12l-0.11,0.56l-0.26,-0.07l-0.44,0.3l-0.03,0.21l-0.23,0.15l-0.26,-0.25l-0.37,-0.03l-0.36,0.17l-0.6,-0.33l-0.87,-0.22l-0.41,-0.18l-0.09,-0.37l-0.55,-0.15l-0.25,0.15l-0.71,-0.67l-0.41,0.02l-0.78,-0.24l-0.4,0.21ZM111.25,502.71l-0.44,0.21l-0.03,-0.02l0.24,-0.26l0.23,0.07ZM128.45,468.26l-0.1,0.14l-0.06,0.02l0.02,-0.15l0.14,-0.02ZM191.55,470.09l-0.0,0.04l-0.02,-0.04l0.03,-0.01ZM191.85,541.2l-0.08,-0.21l0.06,-0.51l0.25,-0.06l0.08,0.39l-0.31,0.39ZM165.84,518.29l-0.19,0.37l-0.34,0.04l-0.07,0.31l-0.27,-0.07l-0.45,0.06l-0.04,-0.09l0.46,-0.29l0.06,-0.15l0.84,-0.19ZM162.12,521.34l0.09,0.0l-0.06,0.02l-0.02,-0.03ZM162.26,521.34l0.08,-0.02l0.01,0.04l-0.04,0.04l-0.05,-0.05ZM141.64,514.73l0.19,0.06l0.26,0.22l-0.46,0.03l-0.07,-0.12l0.08,-0.19ZM132.07,521.13l-0.0,0.0l0.0,-0.0l0.0,0.0ZM132.06,520.84l-0.02,-0.07l0.06,-0.01l-0.03,0.08ZM109.91,522.38l0.07,-0.02l0.05,0.12l-0.03,0.01l-0.09,-0.11ZM107.83,523.67l0.01,0.02l-0.02,0.0l0.0,-0.02l0.01,-0.01ZM136.02,515.64l-0.01,-0.04l0.07,0.01l-0.06,0.03ZM199.71,549.76l0.43,-0.06l0.87,0.3l0.36,-0.05l0.76,-0.54l0.39,-0.87l0.67,-0.03l0.47,-0.34l0.17,-0.49l0.96,0.19l1.89,-0.14l0.49,0.7l0.06,0.43l0.38,0.59l-0.1,0.26l-0.29,0.17l-0.1,0.55l0.11,0.16l-0.11,0.33l0.13,0.53l0.17,0.24l0.69,0.46l0.02,0.37l0.3,0.56l0.35,0.24l0.08,0.34l-0.15,0.26l0.26,1.28l1.33,1.5l0.24,0.78l-0.64,-0.19l-0.38,0.04l-0.33,0.37l-0.51,0.26l-0.01,0.29l-0.38,0.15l-0.21,0.29l-0.52,-0.98l-0.84,-0.64l0.11,-0.44l-0.27,-1.06l0.14,-0.11l0.26,-1.09l-0.26,-0.26l0.04,-0.09l-0.12,-0.01l0.04,-0.06l-0.09,0.05l-0.1,-0.1l-0.04,0.1l-0.12,-0.01l-0.03,-0.07l0.24,-0.92l0.1,-1.07l-0.15,-1.05l0.51,-0.94l0.02,-0.37l-0.66,-0.25l-0.5,0.69l-0.24,-0.13l-0.45,0.11l0.01,0.55l-0.32,0.35l0.3,1.04l-0.34,0.85l0.13,1.32l-0.11,0.36l0.04,0.39l-0.27,0.34l0.03,1.86l-0.28,0.29l-0.27,-0.31l0.02,-1.36l-0.28,-0.43l-0.53,0.1l-0.08,0.1l-0.88,-0.14l0.22,-0.05l0.2,-0.25l0.2,-0.91l-0.12,-0.1l-0.13,-1.06l0.88,0.13l0.45,-0.45l-0.11,-0.33l-0.74,-0.45l-0.23,0.1l0.0,-0.84l-0.33,-0.34l-0.31,-0.01l-0.29,0.56l-0.24,0.06l-0.27,0.41l0.12,0.13l-0.5,-0.23l0.24,-0.5l-0.28,-0.54l-0.29,-0.02l-0.18,-0.5l-0.47,-0.15l-0.19,0.31l-0.22,-0.47ZM201.64,551.89l0.21,0.2l-0.19,0.19l-0.03,-0.38ZM210.83,558.1l0.42,0.83l-0.23,0.38l0.09,0.66l0.47,1.27l0.06,1.07l0.15,0.48l-0.33,-0.38l-1.31,-0.73l-0.26,-0.05l0.19,-0.2l-0.17,-0.39l0.14,-0.1l0.31,-0.63l-0.47,-0.31l-0.27,0.01l-0.75,0.68l-0.11,-0.36l0.09,-0.18l-0.03,-0.41l0.26,-0.33l0.36,-0.19l0.16,-0.56l0.43,-0.42l0.36,0.09l0.44,-0.23ZM211.88,563.05l1.25,5.46l-0.54,0.45l0.03,0.64l0.81,0.55l-0.47,0.67l0.05,0.52l0.58,0.54l-0.08,0.3l0.06,0.48l-0.14,0.55l0.15,0.3l0.2,0.13l0.9,0.26l1.46,1.84l1.18,0.8l0.34,0.76l0.55,0.42l-0.01,0.53l0.1,0.24l0.78,0.58l0.49,0.11l0.03,0.16l-0.16,0.69l-0.68,0.46l-0.31,0.4l-0.04,0.78l-0.31,0.67l0.11,0.99l-0.15,0.54l0.03,0.33l-0.4,0.17l-1.34,1.4l-0.41,0.31l-0.48,0.16l-0.2,-0.13l-0.28,0.01l0.12,-0.5l-0.16,-0.42l-0.64,0.07l-0.08,0.17l-0.1,-0.51l0.24,-0.03l0.12,0.14l0.5,0.14l1.27,-0.81l0.75,-0.65l-0.23,-0.63l-0.48,0.07l0.01,-0.13l-0.37,-0.36l-0.54,0.12l0.59,-1.72l0.0,-0.38l0.15,-0.3l-0.06,-0.43l0.09,-0.51l-0.36,-0.24l-0.06,-0.35l-0.27,-0.49l0.49,-0.15l0.35,-0.35l0.18,-0.48l-0.43,-0.27l-0.43,0.08l-0.61,0.31l-0.45,0.04l-0.55,-0.29l-1.43,0.28l-0.59,-0.05l0.17,-0.09l0.2,-0.36l0.21,-0.85l0.32,0.02l0.81,0.41l0.31,0.03l0.71,-0.34l-0.07,-0.49l-0.33,-0.19l-0.4,0.02l-0.88,-0.43l0.03,-0.84l-0.23,-0.29l-0.46,-0.26l0.02,-0.43l-0.43,-0.61l0.27,-0.3l-0.16,-0.68l-0.35,-0.03l0.1,-0.07l0.01,-0.21l0.42,-0.17l0.22,-0.62l-0.38,-0.26l-0.67,0.18l-0.27,-0.29l-0.2,-0.32l-0.06,-0.35l0.33,-0.21l0.18,-1.04l-0.39,-0.3l-0.47,0.16l-0.17,-0.08l-0.29,-0.36l0.13,-0.2l-0.14,-0.35l-0.45,-0.27l1.08,-0.08l0.35,-0.42l-0.28,-0.52l-0.49,0.08l-0.44,-0.14l0.18,-0.32l-0.03,-0.32l-0.51,-0.26l0.04,-0.13l0.64,0.01l0.41,0.72l0.28,0.23l0.31,0.02l0.28,-0.15l0.04,-0.52l-0.24,-0.23l-0.1,-0.4l-0.37,-0.63l-0.78,-0.91l0.12,-0.39l1.23,0.83l0.52,-0.45ZM214.19,585.45l-0.17,0.68l-0.05,-0.01l0.09,-0.42l0.13,-0.25ZM215.44,583.76l-0.46,0.24l-0.25,-0.22l-0.63,0.14l0.05,-0.14l0.52,-0.28l0.76,0.25ZM211.63,577.78l-0.08,0.43l0.26,0.27l-0.46,0.4l-0.51,-0.23l-0.26,0.45l0.06,0.32l-0.15,-0.2l0.08,-0.67l0.25,-0.15l0.49,-0.04l0.32,-0.57ZM209.08,567.17l-0.25,-0.24l0.08,-0.14l0.49,0.2l-0.32,0.18ZM138.39,458.34l-0.47,-0.44l0.06,-0.45l0.41,0.27l0.0,0.62ZM108.63,500.59l-0.13,0.01l0.09,-0.03l0.04,0.02ZM211.75,580.86l0.58,-0.24l-0.2,0.44l0.02,0.52l-0.22,-0.23l-0.18,-0.5ZM212.61,580.43l0.18,-0.49l-0.1,-0.18l0.52,-0.05l0.31,-0.26l0.18,-0.36l0.14,-0.03l0.14,-0.52l0.57,-0.03l0.29,1.05l0.12,1.09l-0.15,0.19l0.03,0.12l-0.16,0.04l-0.27,0.73l-0.28,0.21l-0.2,-0.36l0.13,-1.47l-0.39,-0.42l-0.41,0.19l-0.18,0.46l-0.46,0.07ZM211.52,574.36l0.23,0.31l0.37,0.12l0.01,0.48l-0.14,0.07l-0.12,-0.08l-0.4,-0.44l-0.11,-0.22l0.15,-0.24ZM209.53,575.0l0.17,-0.21l0.28,-0.04l-0.06,0.38l0.09,0.09l0.27,0.14l0.34,0.0l0.41,0.28l0.04,0.12l-0.35,0.14l0.09,0.38l-0.06,0.17l-0.28,0.08l0.14,-0.47l-0.34,-0.41l-0.06,-0.25l-0.69,-0.39ZM210.36,574.41l0.1,-0.07l0.07,0.06l-0.0,0.01l-0.16,-0.0ZM209.54,571.91l0.03,-0.1l0.32,-0.15l0.14,-0.29l-0.04,-0.37l0.05,-0.1l0.34,1.01l-0.09,-0.09l-0.52,-0.06l-0.15,0.21l-0.08,-0.04ZM206.97,580.16l0.1,-0.52l-0.42,-0.36l0.1,-0.03l-0.05,-0.5l-0.28,-0.2l0.14,-0.17l0.28,-0.1l0.36,0.03l0.21,-0.67l-0.39,-0.23l-1.18,-0.03l-0.2,-0.17l0.19,-0.17l0.46,-0.05l0.67,-0.52l0.19,-0.54l-0.08,-0.32l-0.26,-0.01l0.23,-0.63l0.14,0.22l0.53,0.22l0.24,0.31l0.4,0.27l0.42,1.0l0.12,0.56l-0.14,0.62l-0.17,-0.03l-0.11,0.19l-0.32,0.19l0.02,0.34l-0.75,0.25l-0.08,0.43l0.07,0.45l0.56,-0.01l-0.02,0.13l0.38,0.45l0.22,-0.01l0.23,0.23l0.25,-0.06l0.21,0.38l-0.39,-0.07l-0.32,0.43l-0.06,0.32l0.22,0.37l0.41,0.04l0.21,0.09l-0.2,-0.03l-0.41,0.47l-0.47,0.15l0.11,0.7l0.38,0.27l-0.13,0.2l0.18,0.53l-0.2,0.06l-0.06,0.23l-0.22,-0.08l0.18,-0.35l-0.4,-1.09l0.11,-0.08l0.05,-0.73l-0.28,-0.13l-0.15,-0.32l0.01,-0.81l-0.21,-0.78l-0.46,-0.01l-0.11,0.08l-0.05,-0.39ZM207.26,574.01l-0.02,-0.27l-0.21,-0.27l0.29,-0.14l0.03,0.3l0.15,0.15l-0.04,0.21l-0.2,0.0ZM206.9,573.41l-0.43,-0.14l-0.38,-0.35l0.21,-0.11l0.28,0.14l0.04,0.28l0.27,0.18ZM208.72,573.09l0.26,-0.17l0.43,0.23l0.25,-0.0l-0.15,0.15l-0.09,0.37l-0.14,0.04l-0.23,-0.02l-0.33,-0.6ZM206.49,567.38l1.0,0.59l0.81,0.7l0.06,0.4l-0.46,0.04l-0.19,0.76l0.03,0.31l0.19,0.26l-0.17,0.31l0.43,0.76l-0.15,0.1l-0.85,-0.57l-0.44,0.12l-0.01,0.16l-0.22,-0.06l0.24,-0.51l-0.06,-0.27l0.08,0.03l0.08,-0.27l-0.06,-0.29l0.42,-0.7l0.08,-0.44l-0.28,-0.43l0.06,-0.22l-0.32,-0.31l-0.25,-0.5ZM208.6,569.24l0.34,0.07l0.2,-0.33l0.2,0.07l0.2,0.44l-0.0,0.19l-0.3,0.2l-0.13,0.86l-0.14,-0.44l-0.01,-0.6l-0.07,-0.17l-0.2,-0.03l-0.09,-0.25ZM209.57,569.66l0.0,-0.0l0.03,-0.02l-0.04,0.02ZM204.29,565.52l0.44,-0.15l-0.03,-0.36l0.29,-0.2l0.29,0.26l0.51,-0.3l-0.08,0.47l-0.15,0.23l-0.33,-0.04l-0.36,0.3l-0.27,-0.06l-0.16,0.09l0.02,0.12l-0.36,0.07l0.19,-0.44ZM206.36,564.27l-0.49,0.31l-0.02,-0.59l-0.46,-0.14l-0.02,-0.1l0.53,-0.05l0.24,-0.65l-0.35,-0.23l-0.51,-0.03l-0.1,-0.28l0.09,-0.84l0.2,-0.34l0.16,-0.72l0.07,-1.03l0.34,-0.33l0.69,0.17l0.26,0.31l-0.04,0.27l-0.16,0.12l0.03,0.24l-0.13,0.05l-0.05,0.65l-0.22,0.57l0.02,0.09l0.33,0.11l0.23,1.01l-0.15,0.27l0.43,0.45l-0.08,0.23l-0.57,-0.12l-0.09,0.19l-0.15,0.04l-0.01,0.39ZM206.15,574.28l-0.13,-0.03l0.0,-0.02l0.15,-0.04l-0.02,0.09ZM205.18,574.32l-0.02,0.0l0.01,-0.01l0.01,0.0ZM204.96,570.25l-0.05,-0.24l0.09,0.22l-0.04,0.01ZM205.25,569.02l-0.25,0.19l-0.3,-0.19l-0.18,-0.37l-0.42,-0.07l0.04,-0.08l0.41,0.09l0.15,-0.2l0.31,0.17l0.28,-0.13l0.03,0.52l-0.07,0.07ZM198.99,558.2l0.09,-0.07l0.23,0.49l-0.21,-0.07l-0.11,-0.35ZM199.36,558.71l0.38,0.44l0.56,-0.45l-0.44,-1.09l0.59,0.02l0.03,-0.77l0.24,0.32l0.51,0.01l0.2,-0.29l0.29,-0.06l0.19,0.34l0.24,0.12l0.18,0.27l-0.28,0.14l-0.69,-0.17l-0.13,0.26l-0.17,-0.1l-0.57,0.26l0.08,0.42l0.27,0.54l0.56,0.48l0.25,0.5l0.39,0.36l-0.12,0.15l0.09,0.44l-0.94,-1.32l-0.28,-0.2l-0.61,0.35l0.06,0.34l-0.2,0.14l0.2,0.7l0.21,0.07l-0.14,0.51l0.2,0.13l0.05,0.18l-0.28,0.06l-0.12,-0.56l-0.37,-0.57l0.25,-0.15l-0.16,-0.49l-0.21,-0.17l-0.02,-0.33l-0.28,-0.49l-0.01,-0.31ZM202.27,558.92l0.38,-0.28l0.43,-0.1l0.76,0.39l0.05,0.17l0.43,0.38l-0.11,0.18l-0.41,-0.45l-0.58,-0.11l-0.2,0.41l0.19,0.59l-0.97,-1.19ZM202.11,560.96l0.33,0.1l0.14,0.21l0.26,0.09l0.85,-0.01l-0.23,1.25l-0.31,-0.14l-1.03,-1.5ZM201.29,562.69l0.18,0.07l0.33,-0.09l0.0,0.25l0.48,0.21l0.22,0.28l-0.11,0.08l0.12,0.52l-0.05,0.29l0.23,0.34l-0.06,0.8l0.13,0.32l-0.1,0.03l-0.14,0.56l-0.14,0.99l0.02,0.73l-0.25,0.74l-0.22,-0.02l-0.19,0.34l-0.01,0.5l-0.44,1.06l-0.2,-0.86l-0.08,-0.92l0.3,-0.02l0.63,-0.49l-0.06,-0.73l-0.22,-0.05l0.02,-0.45l-0.19,-0.26l-0.25,-0.01l-0.16,-0.59l-0.47,-0.03l0.24,-0.17l0.01,-0.27l0.65,-0.05l0.22,-0.32l-0.13,-0.51l-0.53,-0.24l0.57,-0.27l-0.34,-1.16l-0.33,-0.12l0.28,-0.19l0.04,-0.3ZM199.27,560.14l0.0,0.0l-0.01,0.0l0.0,-0.0ZM199.1,564.31l0.25,-0.07l0.1,-0.06l-0.12,0.15l-0.23,-0.02ZM199.63,563.32l0.06,-0.2l-0.05,-0.13l0.09,0.13l-0.1,0.2ZM162.15,525.49l0.25,-0.21l0.11,-0.0l-0.2,0.31l-0.16,-0.1ZM136.7,524.68l0.22,0.25l0.59,-0.1l0.04,-0.44l0.61,0.38l0.29,-0.23l0.18,-0.67l0.1,-0.05l0.25,0.13l0.16,-0.06l-0.14,0.5l0.39,0.72l-0.5,0.38l-0.19,-0.72l-0.36,-0.02l-0.69,0.57l-0.12,-0.24l-0.46,0.06l-0.15,0.16l-0.22,-0.52l-0.13,-0.04l0.04,-0.14l0.07,0.07ZM139.88,525.13l-0.03,-0.01l0.02,-0.02l0.01,0.03ZM127.78,528.13l0.49,-0.13l0.09,0.05l-0.34,0.29l-0.18,0.01l-0.06,-0.22ZM128.01,526.82l0.09,-0.93l-0.34,-0.41l0.27,-0.06l0.19,-0.29l0.22,-0.02l0.24,-0.25l0.44,0.22l0.16,-0.11l0.5,0.1l0.1,-0.23l0.15,-0.03l0.38,0.09l0.25,0.25l-0.43,0.12l0.02,0.5l0.44,0.31l-0.25,0.64l0.13,1.11l0.36,0.59l0.43,0.15l-0.37,0.07l-0.19,0.39l-0.11,-0.05l0.03,-0.41l-0.23,-0.36l-0.69,-0.05l-0.43,-0.59l-0.47,-0.4l-0.65,-0.34l-0.26,-0.01ZM131.4,528.57l0.28,-0.39l-0.19,-0.6l0.07,-0.55l0.15,-0.28l0.3,0.13l0.31,-0.27l0.44,0.14l0.52,-0.02l0.3,-0.22l0.26,0.17l0.23,-0.03l0.19,0.33l0.66,-0.29l0.18,-0.29l0.28,0.22l-0.13,0.25l-0.0,0.39l0.26,0.35l0.46,-0.02l0.28,-0.39l0.28,0.18l0.44,-0.16l0.31,0.17l0.08,-0.05l-0.05,0.23l-0.73,0.21l-0.21,0.41l0.22,0.27l-0.07,0.65l0.3,0.23l0.29,0.05l-0.5,0.18l-0.19,-0.24l-0.3,-0.08l-0.09,-0.22l-0.26,-0.17l-0.13,-0.32l-0.96,-0.67l-0.23,0.18l-0.65,0.18l-0.19,0.27l0.12,0.28l-0.38,-0.39l-0.44,0.12l-0.19,0.46l-0.91,-0.26l-0.07,0.08l-0.35,-0.23ZM134.19,529.01l0.07,-0.02l0.09,0.03l-0.15,-0.01l-0.01,0.0ZM134.4,529.04l0.27,0.1l0.23,0.58l-0.25,-0.11l0.04,-0.1l-0.29,-0.47ZM135.83,526.14l0.09,-0.06l0.01,0.01l-0.11,0.04ZM132.89,525.47l-0.57,-0.58l0.11,-0.17l0.27,-0.08l0.34,0.07l0.08,0.37l-0.22,0.39ZM98.14,450.76l0.34,-0.44l0.56,-0.16l0.06,0.49l-0.13,0.02l0.1,0.29l0.7,0.54l0.29,0.6l0.36,0.4l-0.66,-0.36l-1.21,-0.26l-0.45,-0.8l0.04,-0.32ZM100.81,452.78l1.01,0.2l0.26,0.2l0.38,0.11l0.3,0.33l0.23,0.8l-0.26,0.19l-0.26,0.4l0.43,0.51l0.28,0.71l0.39,0.33l-0.09,0.31l0.05,0.32l0.21,0.31l0.5,0.32l0.0,0.35l-0.82,-0.26l-0.09,0.09l-0.51,-0.1l-0.33,0.07l-0.08,-0.93l-0.57,-1.1l0.12,-0.48l-0.3,-0.98l-0.39,-0.84l-0.28,-0.35l-0.01,-0.23l-0.17,-0.28ZM104.84,458.76l0.28,0.01l0.41,0.53l-0.25,0.05l-0.44,-0.59ZM96.98,478.79l0.06,-0.22l1.37,1.26l0.38,-0.0l0.32,-0.21l0.21,0.06l0.2,0.25l0.72,-0.01l-0.01,0.32l0.69,0.19l0.2,0.27l-0.05,0.32l0.09,0.16l0.27,0.29l0.49,0.19l0.07,0.2l-0.23,0.33l-0.32,0.22l-0.42,1.13l-0.7,-0.22l-0.36,-0.42l-0.19,0.11l-0.26,-0.08l-0.29,-0.35l-0.42,-0.13l-0.26,-0.41l-0.51,-0.41l-0.61,-1.56l0.07,-0.19l-0.47,-0.5l0.04,-0.31l-0.09,-0.3ZM97.68,522.17l0.05,-0.07l0.04,-0.11l0.07,0.18l-0.15,-0.01ZM98.03,522.39l0.04,0.02l-0.0,0.03l-0.03,-0.05ZM80.23,514.88l0.08,-0.15l0.69,0.24l0.38,-0.02l1.55,-0.69l0.18,0.0l0.16,0.37l0.44,0.39l0.27,0.08l0.4,-0.16l0.54,0.24l0.6,-0.01l0.53,0.26l0.44,0.41l0.03,0.72l-0.26,0.4l-0.13,0.44l-0.31,0.06l-0.22,0.21l-0.27,0.01l-0.3,-0.08l-0.46,-0.58l-1.38,-0.93l-0.45,-0.11l-0.76,0.03l-0.42,0.3l-0.21,0.03l-0.91,-0.42l-0.33,-0.34l0.14,-0.67ZM74.26,514.0l0.03,-0.25l0.32,0.05l0.02,0.35l-0.37,-0.15ZM64.81,513.23l0.09,-0.01l0.13,0.09l-0.17,0.0l-0.05,-0.08ZM70.29,514.35l-0.12,-0.05l-0.16,0.39l-0.25,-0.27l-0.36,0.08l0.24,-0.12l0.32,0.02l0.41,-0.61l-0.31,-0.35l-0.31,-0.63l-0.3,-0.24l0.05,-0.29l0.13,-0.06l0.67,0.13l0.43,0.28l0.16,0.24l-0.29,0.4l0.11,0.51l-0.06,0.17l-0.33,0.11l-0.04,0.31ZM68.8,514.2l-0.28,0.32l-0.09,-0.1l0.24,-0.29l-0.1,-0.27l0.19,-0.02l0.04,0.36ZM59.97,511.71l0.2,-0.13l0.18,-0.38l0.48,-0.06l0.27,0.03l0.13,0.21l0.36,0.14l0.1,0.15l-0.09,0.12l-0.23,-0.03l-0.61,0.18l-0.41,-0.22l-0.36,0.0ZM62.67,511.56l0.07,-0.35l0.28,-0.32l0.75,-0.02l0.67,0.35l0.17,0.49l-0.28,0.29l-1.25,-0.24l-0.41,-0.2ZM37.79,498.38l0.07,-0.23l-0.1,-0.23l0.32,0.03l0.09,0.49l-0.29,0.05l-0.1,-0.11ZM36.41,498.87l-0.02,0.01l0.01,-0.02l0.01,0.01ZM36.85,498.71l-0.0,-0.07l-0.0,-0.01l0.02,0.01l-0.01,0.07ZM30.2,493.17l-0.02,-0.03l0.04,-0.04l0.0,0.08l-0.02,-0.0ZM26.76,492.74l0.41,-0.33l0.12,0.35l-0.02,0.08l-0.25,0.01l-0.26,-0.12ZM25.01,490.83l0.02,0.0l-0.01,0.01l-0.02,-0.01ZM23.18,488.38l-0.09,0.01l0.05,-0.17l0.04,0.08l0.01,0.08ZM23.19,487.9l-0.06,0.1l-0.14,-0.54l0.19,0.18l0.0,0.26ZM15.95,478.85l0.25,0.07l-0.02,0.19l-0.14,-0.01l-0.09,-0.25ZM1.23,449.67l0.23,0.17l0.21,0.66l0.47,0.45l-0.25,0.16l0.12,0.39l-0.24,-0.38l-0.54,-0.19l-0.11,-0.3l0.19,-0.08l0.2,-0.42l-0.28,-0.47Z\", \"name\": \"Alaska\"}, \"US-NJ\": {\"path\": \"M801.67,165.24l1.31,-1.55l0.48,-1.57l0.5,-0.62l0.54,-1.45l0.11,-2.05l0.68,-1.35l0.92,-0.71l14.12,4.17l-0.3,5.66l-0.51,0.83l-0.13,-0.3l-0.65,-0.07l-0.34,0.44l-0.56,1.46l-0.46,2.72l0.26,1.55l0.63,0.61l1.06,0.15l1.23,-0.43l2.46,0.29l0.66,1.87l-0.2,4.55l0.29,0.47l-0.54,0.44l0.27,0.81l-0.72,0.74l0.03,0.35l0.43,0.22l-0.21,0.6l0.48,0.6l-0.17,3.8l0.59,0.52l-0.36,1.36l-1.14,1.82l-0.11,0.94l-1.36,0.07l0.09,1.21l0.64,0.83l-0.82,0.56l-0.18,1.15l1.05,0.77l-0.31,0.29l-0.17,-0.44l-0.53,-0.18l-0.5,0.22l-0.44,1.51l-1.28,0.61l-0.2,0.45l0.46,0.55l0.8,0.06l-0.66,1.26l-0.26,1.5l-0.68,0.65l0.19,0.48l0.4,0.04l-0.89,1.57l0.07,0.95l-1.56,1.66l-0.17,-1.65l0.33,-2.07l-0.11,-0.87l-0.58,-0.82l-0.89,-0.28l-1.11,0.34l-0.81,-0.35l-1.51,0.88l-0.31,-0.71l-1.62,-0.96l-1.0,0.04l-0.65,-0.71l-0.7,0.07l-3.24,-2.03l-0.06,-1.72l-1.02,-0.94l0.48,-0.68l0.0,-0.88l0.43,-0.83l-0.12,-0.73l0.51,-1.19l1.2,-1.16l2.6,-1.49l0.54,-0.86l-0.38,-0.85l0.5,-0.37l0.47,-1.44l1.24,-1.7l2.52,-2.22l0.18,-0.67l-0.47,-0.82l-4.26,-2.78l-0.75,-1.05l-0.9,0.24l-0.48,-0.33l-1.24,-2.46l-1.62,-0.02l-1.0,-3.45l1.02,-1.03l0.36,-2.23l-1.87,-1.91Z\", \"name\": \"New Jersey\"}, \"US-ME\": {\"path\": \"M837.04,56.27l0.86,-1.15l1.42,1.7l0.84,0.04l0.39,-2.12l-0.46,-2.19l1.7,0.36l0.73,-0.42l0.21,-0.52l-0.32,-0.7l-1.18,-0.47l-0.44,-0.62l0.19,-1.43l0.86,-2.02l2.08,-2.25l0.01,-0.98l-0.52,-0.93l1.02,-1.64l0.39,-1.51l-0.22,-0.91l-1.02,-0.35l-0.07,-1.42l-0.4,-0.43l0.55,-0.96l-0.04,-0.63l-1.0,-1.26l0.13,-1.73l0.37,-0.63l-0.15,-0.97l1.22,-1.93l-0.96,-6.17l5.58,-18.88l2.25,-0.23l1.15,3.18l0.55,0.43l2.54,0.56l1.83,-1.73l1.68,-0.83l1.24,-1.72l1.25,-0.12l0.64,-0.47l0.25,-1.43l0.42,-0.3l1.36,0.04l3.68,1.41l1.14,0.96l2.36,1.05l8.38,22.7l0.64,0.65l-0.25,0.95l0.72,1.02l-0.1,1.41l0.54,1.3l0.67,0.47l1.05,-0.12l1.12,0.58l0.97,0.1l2.47,-0.53l0.4,0.95l-0.59,1.42l1.69,1.86l0.28,2.69l2.72,1.68l0.98,-0.1l0.47,-0.74l-0.06,-0.5l1.21,0.25l2.95,2.8l0.04,0.47l-0.52,-0.14l-0.38,0.41l0.18,0.77l-0.76,-0.15l-0.35,0.4l0.15,0.63l1.84,1.62l0.16,-0.88l0.39,-0.17l0.8,0.32l0.27,-0.83l0.33,0.41l-0.31,0.85l-0.53,0.19l-1.21,3.24l-0.62,-0.04l-0.31,0.44l-0.55,-1.05l-0.72,0.03l-0.3,0.5l-0.56,0.06l-0.02,0.49l0.58,0.85l-0.91,-0.45l-0.32,0.63l0.26,0.52l-1.2,-0.28l-0.37,0.3l-0.37,0.78l0.08,0.45l0.44,0.08l0.07,1.21l-0.37,-0.57l-0.54,-0.06l-0.39,0.45l-0.2,1.09l-0.48,-1.53l-1.14,0.01l-0.68,0.75l-0.36,1.48l0.59,0.63l-0.83,0.63l-0.7,-0.46l-0.73,1.04l0.1,0.64l0.99,0.63l-0.35,0.21l-0.1,0.82l-0.45,-0.2l-0.85,-1.82l-1.03,-0.46l-0.39,0.22l-0.45,-0.41l-0.57,0.63l-1.25,-0.19l-0.26,0.86l0.78,0.4l0.01,0.37l-0.51,-0.06l-0.56,0.4l-0.09,0.69l-0.49,-1.02l-1.17,-0.02l-0.16,0.64l0.52,0.87l-1.44,0.96l0.84,1.11l0.08,1.06l0.53,0.65l-0.96,-0.41l-0.96,0.22l-1.2,-0.42l-0.17,-0.91l0.74,-0.28l-0.08,-0.55l-0.43,-0.5l-0.67,-0.12l-0.3,0.33l-0.23,-2.37l-0.37,-0.22l-1.1,0.26l0.04,1.96l-1.85,1.92l0.02,0.49l1.25,1.47l-0.64,0.96l-0.19,3.87l0.77,1.41l-0.57,0.53l0.0,0.63l-0.51,0.55l-0.8,-0.19l-0.45,0.93l-0.62,-0.06l-0.41,-1.15l-0.73,-0.21l-0.52,1.03l0.11,0.69l-0.45,0.59l0.12,2.41l-0.95,-1.01l0.14,-1.28l-0.24,-0.59l-0.81,0.29l-0.08,2.01l-0.44,-0.25l0.15,-1.55l-0.48,-0.4l-0.68,0.49l-0.76,3.04l-0.75,-1.84l0.07,-1.51l-0.77,0.05l-1.06,2.76l0.51,0.55l0.73,-0.25l0.91,2.04l-0.28,-0.59l-0.52,-0.23l-0.66,0.3l-0.07,0.64l-1.38,-0.1l-2.16,3.18l-0.53,1.86l0.29,0.6l-0.68,0.65l0.51,0.43l0.91,-0.21l0.37,0.92l-0.77,0.3l-0.2,0.39l-0.4,-0.04l-0.51,0.57l-0.14,1.03l0.67,1.37l-0.08,0.68l-0.79,1.29l-0.94,0.61l-0.41,1.07l-0.1,1.28l0.44,0.9l-0.4,2.81l-0.8,-0.33l-0.41,0.6l-1.02,-0.76l-0.57,-1.86l-0.93,-0.37l-2.36,-1.99l-0.76,-3.45l-13.25,-35.55ZM863.92,80.85l0.09,0.26l-0.08,0.23l0.03,-0.29l-0.04,-0.2ZM865.33,81.07l0.47,0.7l-0.04,0.47l-0.32,-0.25l-0.1,-0.93ZM867.67,77.93l0.43,0.83l-0.16,0.14l-0.42,-0.19l0.16,-0.77ZM877.04,64.5l-0.14,0.2l-0.03,-0.24l0.17,0.04ZM873.08,74.84l0.01,0.02l-0.03,0.03l0.01,-0.06ZM882.73,63.41l0.04,-1.17l0.41,-0.66l-0.18,-0.44l0.4,-0.5l0.62,-0.11l1.54,1.36l-0.49,0.65l-1.08,0.04l-0.27,0.43l0.57,1.3l-0.99,-0.18l-0.14,-0.57l-0.44,-0.16ZM879.31,65.98l0.61,0.41l-0.35,0.29l0.15,0.96l-0.39,-0.63l0.19,-0.53l-0.21,-0.5ZM878.07,70.51l0.09,-0.01l0.48,-0.08l-0.25,0.46l-0.32,-0.37Z\", \"name\": \"Maine\"}, \"US-MD\": {\"path\": \"M740.69,219.66l-2.04,-10.06l19.85,-4.49l-0.66,1.29l-0.94,0.08l-1.55,0.81l0.16,0.7l-0.42,0.49l0.23,0.78l-1.04,0.09l-0.72,0.41l-1.48,0.03l-1.14,-0.39l0.21,-0.36l-0.3,-0.49l-1.11,-0.31l-0.47,1.8l-1.63,2.85l-1.37,-0.39l-1.03,0.62l-0.41,1.26l-1.6,1.93l-0.36,1.04l-0.88,0.45l-1.3,1.87ZM760.76,204.58l37.02,-9.15l8.22,26.4l0.48,0.26l8.48,-2.22l0.24,0.71l0.6,0.03l0.38,0.95l0.52,-0.05l-0.38,1.96l-0.12,-0.26l-0.47,0.06l-0.73,0.86l-0.17,2.7l-0.6,0.19l-0.36,0.71l-0.02,1.47l-3.64,1.51l-0.37,0.76l-2.25,0.43l-0.56,0.65l-0.3,-1.09l0.5,-0.31l0.87,-1.85l-0.4,-0.51l-0.45,0.12l0.08,-0.5l-0.44,-0.42l-2.29,0.63l0.3,-0.6l1.15,-0.83l-0.17,-0.69l-1.36,-0.18l0.38,-2.24l-0.18,-1.02l-0.91,0.16l-0.53,1.76l-0.34,-0.69l-0.62,-0.07l-0.44,0.47l-0.5,1.39l0.53,1.02l-2.87,-2.14l-0.43,-0.19l-0.61,0.36l-0.73,-0.76l0.37,-0.84l-0.04,-0.84l0.76,-0.6l-0.08,-1.35l2.08,0.1l0.89,-0.45l0.36,-0.9l-0.32,-1.42l-0.43,-0.05l-0.54,1.31l-0.39,0.09l-1.05,-0.72l0.06,-0.4l-0.52,-0.28l-0.55,0.23l-0.22,-0.68l-0.73,0.1l-0.12,0.28l0.07,-0.74l0.65,-0.01l0.49,-0.37l0.22,-1.04l-0.54,-0.55l-0.57,0.71l-0.2,-0.53l0.88,-0.87l-0.25,-0.65l-0.54,-0.08l-0.09,-0.48l-0.42,-0.27l-0.35,0.15l-0.66,-0.53l0.89,-0.8l-0.24,-1.03l0.94,-2.38l-0.17,-0.43l-0.46,0.02l-0.66,0.66l-0.56,-0.16l-0.61,0.95l-0.74,-0.6l0.49,-3.59l0.6,-0.52l0.06,-0.61l4.22,-1.21l0.12,-0.7l-0.51,-0.3l-2.38,0.43l0.76,-1.27l1.42,-0.05l0.35,-0.5l-0.99,-0.67l0.44,-1.9l-0.63,-0.32l-1.2,1.82l0.05,-1.5l-0.59,-0.34l-0.68,1.1l-1.62,0.67l-0.31,1.65l0.39,0.54l0.65,0.12l-1.45,1.92l-0.2,-1.64l-0.64,-0.42l-0.61,0.73l0.07,1.45l-0.85,-0.29l-1.16,0.64l0.02,0.71l1.01,0.27l-0.37,0.54l-0.83,0.22l-0.05,0.34l-0.44,-0.04l-0.35,0.64l1.15,1.2l-1.88,-0.67l-1.21,0.59l0.16,0.69l1.56,0.58l0.91,0.93l0.72,-0.12l0.56,0.75l-0.98,-0.07l-1.15,1.36l0.32,0.77l1.57,0.92l-0.67,0.12l-0.21,0.41l0.8,1.08l-0.32,0.56l0.32,0.97l0.58,0.45l-0.52,1.09l0.99,1.25l0.96,3.54l0.61,0.84l2.07,1.63l0.42,0.81l-0.58,0.17l-0.64,-0.75l-1.45,-0.31l-1.64,-1.26l-1.33,-3.16l-0.73,-0.68l-0.3,0.37l0.11,0.7l1.28,3.54l1.14,1.31l2.05,0.74l1.03,1.11l0.64,0.14l0.91,-0.36l-0.03,1.11l1.66,1.54l0.1,1.1l-0.89,-0.35l-0.51,-1.29l-0.63,-0.45l-0.45,0.04l-0.13,0.44l0.27,0.79l-0.67,0.09l-0.65,-0.82l-1.41,-0.67l-2.39,0.63l-0.7,-0.67l-0.71,-1.49l-1.26,-0.71l-0.46,0.14l0.01,0.48l1.13,1.84l-0.22,-0.08l-1.62,-1.2l-1.66,-2.28l-0.45,-0.02l-0.37,1.44l-0.32,-0.79l-0.74,0.2l-0.21,0.27l0.33,0.72l-0.11,0.56l-0.76,0.53l-0.94,-1.5l0.07,-1.68l0.76,-0.6l-0.19,-0.74l0.78,-0.47l0.21,-1.61l1.07,-1.03l-0.0,-1.03l-0.46,-0.86l1.27,-2.19l-0.14,-0.54l-2.72,-1.68l-0.56,0.14l-0.63,1.08l-1.87,-0.26l-0.52,-0.83l-1.11,-0.51l-2.41,0.07l-1.25,-0.91l0.61,-1.35l-0.4,-0.97l-1.19,-0.3l-0.89,-0.66l-2.69,0.07l-0.36,-0.23l-0.11,-1.26l-1.04,-0.6l0.09,-1.2l-0.51,-0.29l-0.49,0.19l-0.23,-0.64l-0.52,-0.13l0.26,-0.83l-0.45,-0.58l-0.69,-0.12l-1.81,0.67l-2.24,-1.27ZM790.04,212.1l1.14,0.18l0.3,0.17l-0.52,0.29l-0.93,-0.63ZM803.05,225.67l-0.02,0.33l-0.21,-0.15l0.23,-0.19ZM807.02,229.13l-0.16,0.3l-0.13,0.07l0.02,-0.24l0.26,-0.12ZM797.57,220.61l-0.06,0.01l-0.09,0.03l0.12,-0.07l0.03,0.02ZM797.24,220.74l-0.26,0.56l-0.18,0.12l0.15,-0.61l0.29,-0.07ZM795.94,216.76l-0.29,0.29l-0.72,-0.27l0.02,-0.33l0.26,-0.36l0.72,0.67ZM794.58,212.85l-0.34,0.78l-0.59,0.23l0.02,-1.48l0.92,0.47ZM802.18,228.89l0.1,-0.11l0.12,0.08l-0.22,0.03Z\", \"name\": \"Maryland\"}, \"US-AR\": {\"path\": \"M498.73,376.99l-1.42,-38.01l-4.48,-23.98l37.68,-2.58l39.02,-3.58l0.8,1.6l1.01,0.7l0.11,1.77l-0.77,0.57l-0.22,0.94l-1.42,0.93l-0.29,1.04l-0.83,0.54l-1.19,2.59l0.02,0.7l0.53,0.26l10.94,-1.46l0.86,0.93l-1.18,0.37l-0.52,0.96l0.25,0.49l0.84,0.41l-3.6,2.7l0.02,0.84l0.83,1.04l-0.6,1.15l0.62,0.97l-1.42,0.74l-0.11,1.44l-1.45,2.09l0.12,1.64l0.91,3.1l-0.15,0.27l-1.08,-0.01l-0.33,0.26l-0.51,1.73l-1.52,0.95l-0.04,0.51l0.79,0.91l0.05,0.65l-1.11,1.21l-2.02,1.13l-0.21,0.62l0.43,1.0l-0.19,0.27l-1.23,0.03l-0.42,0.67l-0.32,1.89l0.47,1.57l0.02,3.08l-1.27,1.09l-1.54,0.13l0.23,1.49l-0.21,0.48l-0.93,0.25l-0.59,1.77l-1.49,1.19l-0.02,0.93l1.39,0.76l-0.03,0.7l-1.23,0.3l-2.24,1.23l0.03,0.67l0.99,0.82l-0.45,1.14l0.53,1.38l-1.09,0.62l-1.9,2.57l0.52,0.7l1.0,0.49l0.01,0.58l-0.98,0.29l-0.42,0.64l0.51,0.84l1.63,1.01l0.06,1.77l-0.59,0.98l-0.09,0.84l0.29,0.4l1.05,0.39l0.5,2.17l-1.09,1.01l0.06,2.11l-51.46,4.07l-0.83,-11.53l-1.18,-0.85l-0.9,0.16l-0.83,-0.35l-0.93,0.39l-1.22,-0.33l-0.57,0.72l-0.47,0.01l-0.49,-0.48l-0.82,-0.15l-0.63,-1.0Z\", \"name\": \"Arkansas\"}, \"US-MA\": {\"path\": \"M877.65,135.84l1.07,-0.19l0.85,-1.13l0.45,0.58l-1.06,0.64l-1.31,0.1ZM831.87,132.65l-0.46,-0.28l-10.4,2.53l-0.25,-0.18l-0.27,-14.8l29.99,-7.86l1.53,-1.8l0.34,-1.48l0.95,-0.35l0.61,-1.04l1.3,-1.08l1.23,-0.08l-0.44,1.05l1.36,0.55l-0.16,0.61l0.44,0.83l1.0,0.36l-0.06,0.32l0.39,0.28l1.31,0.19l-0.16,0.56l-2.52,1.87l-0.05,1.07l0.45,0.16l-1.11,1.41l0.23,1.08l-1.01,0.96l0.58,1.41l1.4,0.45l0.5,0.63l1.36,-0.57l0.33,-0.59l1.2,0.09l0.79,0.47l0.23,0.68l1.78,1.37l-0.07,1.25l-0.36,0.29l0.11,0.61l1.58,0.82l1.19,-0.14l0.68,1.2l0.22,1.14l0.89,0.68l1.33,0.41l1.48,-0.12l0.43,0.38l1.05,-0.23l3.35,-2.76l0.39,-0.69l0.54,0.02l0.56,1.86l-3.32,1.52l-0.94,0.82l-2.75,0.98l-0.49,1.65l-1.94,1.27l-0.81,-2.53l0.11,-1.35l-0.55,-0.31l-0.5,0.39l-0.93,-0.11l-0.3,0.51l0.25,0.92l-0.26,0.79l-0.4,0.06l-0.63,1.1l-0.6,-0.2l-0.5,0.48l0.22,1.86l-0.9,0.87l-0.63,-0.8l-0.47,0.01l-0.11,0.55l-0.26,0.03l-0.7,-2.02l-1.02,-0.35l0.44,-2.5l-0.21,-0.4l-0.77,0.4l-0.29,1.47l-0.69,0.2l-1.4,-0.64l-0.78,-2.12l-0.8,-0.22l-0.78,-2.15l-0.49,-0.24l-6.13,2.0l-0.3,-0.15l-14.84,4.19l-0.28,0.5ZM860.89,110.08l-0.02,-0.37l-0.14,-0.48l0.51,0.23l-0.35,0.62ZM876.37,122.8l-0.42,-0.66l0.06,-0.05l0.44,0.67l-0.09,0.05ZM875.46,121.25l-0.86,-0.11l-0.94,-1.42l1.44,1.0l0.36,0.54ZM871.54,119.46l-0.06,0.25l-0.35,-0.2l0.13,0.02l0.29,-0.07ZM871.87,135.18l0.01,-0.02l0.01,0.04l-0.02,-0.02ZM867.18,137.63l0.78,-0.56l0.28,-1.17l0.84,-1.19l0.17,0.26l0.46,-0.11l0.34,0.52l0.71,-0.01l0.19,0.38l-2.11,0.73l-1.34,1.31l-0.33,-0.17Z\", \"name\": \"Massachusetts\"}, \"US-AL\": {\"path\": \"M608.66,337.47l25.17,-2.91l19.4,-2.75l14.04,43.3l0.79,1.4l0.22,1.05l1.17,1.59l0.59,1.87l2.24,2.5l0.92,1.8l-0.11,2.13l1.8,1.13l-0.17,0.74l-0.63,0.1l-0.16,0.7l-0.98,0.84l-0.22,2.29l0.25,1.48l-0.77,2.3l-0.14,1.84l1.1,2.94l1.21,1.52l0.53,1.6l-0.08,5.02l-0.25,0.81l0.48,2.03l1.35,1.16l1.14,2.07l-47.65,6.92l-0.42,0.61l-0.08,2.99l2.64,2.75l2.0,0.97l-0.34,2.7l0.56,1.6l0.43,0.39l-0.94,1.69l-1.24,1.0l-1.13,-0.75l-0.34,0.49l0.66,1.46l-2.82,1.05l0.29,-0.64l-0.45,-0.86l-0.99,-0.77l-0.1,-1.11l-0.57,-0.22l-0.53,0.61l-0.32,-0.1l-0.89,-1.53l0.41,-1.67l-0.97,-2.21l-0.46,-0.45l-0.86,-0.2l-0.3,-0.89l-0.56,-0.17l-0.37,0.61l0.14,0.35l-0.77,3.1l-0.01,5.08l-0.59,0.0l-0.24,-0.71l-2.22,-0.44l-1.65,0.31l-5.46,-31.99l-0.99,-66.49l-0.02,-0.37l-1.07,-0.63l-0.69,-1.02Z\", \"name\": \"Alabama\"}, \"US-MO\": {\"path\": \"M468.68,225.54l24.71,-0.73l18.94,-1.43l22.11,-2.58l0.42,0.35l0.39,0.91l2.43,1.65l0.29,0.74l1.21,0.87l-0.51,1.37l-0.1,3.21l0.78,3.65l0.95,1.44l0.03,1.59l1.11,1.37l0.46,1.55l4.96,4.1l1.06,1.69l4.93,3.31l0.7,1.15l0.27,1.62l0.5,0.82l-0.18,0.69l0.47,1.8l0.97,1.63l0.77,0.73l1.04,0.16l0.83,-0.56l0.84,-1.4l0.57,-0.19l2.41,0.61l1.68,0.76l0.84,0.77l-0.97,1.95l0.26,2.28l-2.37,6.86l0.01,1.02l0.7,1.92l4.67,4.05l1.99,1.05l1.46,0.09l1.66,1.31l1.91,0.8l1.51,2.11l2.04,0.83l0.42,2.96l1.72,2.9l-1.1,1.94l0.18,1.38l0.75,0.33l2.31,4.25l1.94,0.92l0.55,-0.32l0.0,-0.65l0.87,1.1l1.07,-0.08l0.14,1.85l-0.37,1.07l0.53,1.6l-1.07,3.86l-0.51,0.07l-1.37,-1.13l-0.65,0.13l-0.78,3.34l-0.52,0.74l0.13,-1.06l-0.56,-1.09l-0.97,-0.2l-0.74,0.63l0.02,1.05l0.53,0.66l-0.04,0.7l0.58,1.34l-0.2,0.4l-1.2,0.39l-0.17,0.41l0.15,0.55l0.86,0.84l-1.71,0.37l-0.14,0.62l1.53,1.97l-0.89,0.75l-0.63,2.13l-10.61,1.42l1.06,-2.28l0.87,-0.61l0.18,-0.87l1.44,-0.96l0.25,-0.96l0.63,-0.37l0.29,-0.59l-0.22,-2.28l-1.05,-0.75l-0.2,-0.77l-1.09,-1.18l-39.24,3.61l-37.72,2.58l-3.21,-58.2l-1.03,-0.63l-1.2,-0.02l-1.52,-0.73l-0.19,-0.93l-0.76,-0.59l-0.34,-0.71l-0.36,-1.55l-0.55,-0.09l-0.3,-0.56l-1.13,-0.66l-1.4,-1.84l0.73,-0.51l0.09,-1.24l1.12,-1.27l0.09,-0.79l1.01,0.16l0.56,-0.43l-0.2,-2.24l-1.02,-0.74l-0.32,-1.1l-1.17,-0.01l-1.31,0.96l-0.81,-0.7l-0.73,-0.17l-2.67,-2.35l-1.05,-0.28l0.13,-1.6l-1.32,-1.72l0.1,-1.02l-0.37,-0.36l-1.01,-0.18l-0.59,-0.85l-0.84,-0.26l0.07,-0.53l-1.24,-2.88l-0.0,-0.74l-0.4,-0.49l-0.85,-0.29l-0.05,-0.54ZM583.77,294.59l-0.1,-0.1l-0.08,-0.15l0.11,-0.01l0.07,0.26Z\", \"name\": \"Missouri\"}, \"US-MN\": {\"path\": \"M439.34,42.76l26.81,-1.05l0.34,1.46l1.28,0.84l1.79,-0.5l1.05,-1.43l0.78,-0.31l2.13,2.19l1.71,0.28l0.31,1.2l1.83,1.4l1.79,0.48l2.64,-0.41l0.39,0.85l0.67,0.4l5.12,0.01l0.37,0.23l0.54,1.59l0.71,0.61l4.27,-0.78l0.77,-0.65l0.07,-0.69l2.43,-0.79l3.97,-0.02l1.42,0.7l3.39,0.66l-1.01,0.79l0.0,0.82l1.18,0.54l2.23,-0.16l0.52,2.08l1.58,2.29l0.71,0.05l1.03,-0.78l-0.04,-1.73l2.67,-0.46l1.43,2.17l2.01,0.79l1.54,0.18l0.54,0.57l-0.03,0.83l0.58,0.35l1.32,0.06l0.38,0.83l1.43,-0.19l1.12,0.22l2.22,-0.85l2.78,-2.55l2.49,-1.54l1.24,2.52l0.96,0.51l2.23,-0.66l0.87,0.36l5.98,-1.3l0.56,0.18l1.32,1.64l1.24,0.59l0.62,-0.01l1.61,-0.83l1.35,0.08l-0.93,1.03l-4.69,3.07l-6.35,2.82l-3.68,2.48l-2.15,2.49l-0.95,0.58l-6.63,8.66l-0.95,0.61l-1.08,1.56l-1.96,1.96l-4.17,3.55l-0.86,1.79l-0.55,0.44l-0.14,0.96l-0.78,-0.01l-0.46,0.51l0.98,12.22l-0.79,1.2l-1.05,0.08l-0.52,0.82l-0.83,0.15l-0.61,0.83l-2.06,1.19l-0.94,1.86l0.06,0.72l-1.69,2.39l-0.01,2.06l0.38,0.91l2.15,0.39l1.42,2.49l-0.52,1.92l-0.71,1.25l-0.05,2.12l0.45,1.32l-0.71,1.23l0.91,3.14l-0.51,4.08l3.95,3.03l3.02,0.4l1.89,2.25l2.87,0.5l2.45,1.93l2.39,3.59l2.64,1.8l2.09,0.09l1.07,0.71l0.88,0.1l0.82,1.36l1.03,0.45l0.23,0.39l0.28,2.03l0.68,1.3l0.39,4.82l-40.63,3.2l-40.63,2.09l-1.46,-38.98l-0.7,-1.27l-0.83,-0.78l-2.57,-0.79l-0.94,-1.91l-1.46,-1.79l0.21,-0.68l2.83,-2.34l0.97,-2.12l0.4,-2.44l-0.35,-1.58l0.23,-1.58l-0.18,-1.79l-0.5,-1.03l-0.18,-2.33l-1.81,-2.59l-0.47,-1.13l-0.21,-2.16l-0.66,-0.98l0.15,-1.66l-0.35,-1.52l0.53,-2.69l-1.08,-1.85l-0.49,-8.33l-0.42,-0.79l0.06,-3.92l-1.58,-3.96l-0.53,-0.65l-0.4,-1.37l0.05,-1.19l-0.48,-0.53l-1.36,-3.77l0.0,-3.22l-0.47,-1.97l0.27,-1.12l-0.57,-2.32l0.73,-2.56l-2.06,-6.9ZM468.97,33.61l1.22,0.46l0.99,-0.2l0.33,0.45l-0.05,1.72l-1.78,1.12l-0.15,-0.47l-0.4,-0.14l-0.16,-2.95Z\", \"name\": \"Minnesota\"}, \"US-CA\": {\"path\": \"M2.95,175.4l0.78,-1.24l0.46,0.46l0.59,-0.08l0.52,-1.18l0.8,-0.86l1.3,-0.26l0.56,-0.53l-0.15,-0.71l-0.93,-0.32l1.53,-2.79l-0.3,-1.58l0.14,-0.87l2.04,-3.3l1.31,-3.03l0.36,-2.12l-0.28,-1.0l0.16,-3.11l-1.36,-2.16l1.18,-1.38l0.67,-2.53l32.73,8.13l32.58,7.34l-13.67,64.68l25.45,34.66l36.6,51.1l13.3,17.72l-0.19,2.73l0.73,0.94l0.21,1.71l0.85,0.63l0.81,2.56l-0.07,0.91l0.63,1.46l-0.16,1.36l3.8,3.82l0.01,0.5l-1.95,1.53l-3.11,1.26l-1.2,1.99l-1.72,1.14l-0.33,0.81l0.38,1.03l-0.51,0.51l-0.1,0.9l0.08,2.29l-0.6,0.72l-0.64,2.44l-2.02,2.47l-1.6,0.14l-0.42,0.51l0.33,0.89l-0.59,1.34l0.54,1.12l-0.01,1.19l-0.78,2.68l0.57,1.02l2.74,1.13l0.34,0.83l-0.19,2.4l-1.18,0.78l-0.42,1.37l-2.27,-0.62l-1.25,0.6l-43.38,-3.34l0.17,-1.15l0.67,-0.51l-0.17,-1.06l-1.17,-1.38l-1.04,-0.15l0.23,-1.2l-0.28,-1.07l0.78,-1.33l-0.3,-4.25l-0.6,-2.3l-1.92,-4.07l-3.56,-4.07l-1.29,-1.98l-2.42,-2.11l-2.04,-3.01l-2.22,-0.89l-0.94,0.3l-0.39,0.96l-0.62,-0.73l-0.88,-0.22l-0.15,-0.31l0.61,-0.76l0.17,-1.57l-0.44,-2.06l-1.01,-1.95l-1.0,-0.74l-4.44,-0.19l-3.33,-1.81l-1.36,-1.26l-0.7,-0.12l-1.02,-1.19l-0.44,-2.6l-0.97,-0.47l-1.68,-2.31l-2.19,-1.73l-1.24,-0.41l-1.66,0.37l-1.15,-1.01l-1.25,0.03l-2.48,-1.83l-1.06,0.01l-1.49,-0.69l-4.91,-0.52l-1.12,-2.35l-1.43,-0.76l1.34,-2.45l-0.25,-1.36l0.74,-1.99l-0.63,-1.35l1.27,-2.45l0.33,-2.44l-0.99,-1.24l-1.26,-0.23l-1.4,-1.28l0.41,-1.62l0.79,-0.09l0.25,-0.45l-0.47,-2.2l-0.65,-0.77l-1.47,-0.84l-1.78,-3.97l-1.82,-1.25l-0.36,-2.75l-1.61,-2.58l0.07,-1.39l-0.33,-1.26l-1.16,-0.94l-0.74,-2.95l-2.41,-2.69l-0.55,-1.25l-0.02,-4.63l0.59,-0.57l-0.59,-1.14l0.51,-0.59l0.53,0.61l0.78,-0.02l0.84,-0.81l0.56,-1.33l0.8,0.04l0.21,-0.88l-0.43,-0.27l0.47,-1.19l-1.22,-3.68l-0.62,-0.48l-1.05,0.08l-1.93,-0.51l-1.04,-1.06l-1.89,-3.21l-0.8,-2.28l0.86,-2.39l0.09,-1.11l-0.27,-2.38l-0.32,-0.64l-0.54,-0.24l0.25,-1.19l0.69,-1.07l0.24,-2.71l0.47,-0.64l0.88,0.13l0.18,0.94l-0.7,2.13l0.05,1.15l1.18,1.32l0.55,0.1l0.58,1.28l1.16,0.78l0.4,1.01l0.89,0.41l0.83,-0.21l-0.21,-1.45l-0.65,-0.43l-0.18,-0.58l-0.24,-3.57l-0.56,-0.71l0.26,-0.69l-1.48,-1.06l0.5,-1.07l0.09,-1.06l-1.2,-1.58l0.78,-0.74l0.79,0.06l1.24,-0.73l1.25,1.02l1.87,-0.32l5.55,2.41l0.61,-0.09l0.64,-1.38l0.69,-0.04l1.92,2.53l0.25,0.18l0.63,-0.24l0.02,-0.38l-0.39,-0.93l-1.57,-1.89l-1.66,-0.32l0.27,-0.62l-0.28,-0.54l-0.48,0.09l-1.05,1.01l-1.84,-0.22l-0.43,0.28l-0.15,-0.51l-1.05,-0.4l0.24,-1.05l-0.85,-0.47l-1.0,0.28l-0.6,0.84l-1.09,0.4l-1.35,-0.9l-0.39,-0.88l-1.51,-1.44l-0.58,0.03l-0.64,0.61l-0.92,-0.12l-0.48,0.36l-0.33,1.88l0.21,0.78l-0.76,1.36l0.36,0.65l-0.47,0.59l-0.04,0.69l-2.16,-2.89l-0.44,-0.15l-0.25,0.32l-0.73,-1.0l-0.21,-1.03l-1.2,-1.17l-0.4,-1.05l-0.61,-0.18l0.65,-1.48l0.11,0.95l0.76,1.49l0.44,0.25l0.33,-0.38l-1.45,-5.21l-1.08,-1.42l-0.31,-2.68l-2.5,-2.87l-1.8,-4.48l-3.05,-5.54l1.09,-1.7l0.25,-1.97l-0.46,-2.11l-0.14,-3.61l1.34,-2.92l0.7,-0.74l-0.07,-1.54l0.42,-1.53l-0.41,-1.63l0.11,-1.96l-1.41,-4.06l-0.97,-1.15l0.06,-0.8l-0.42,-1.19l-2.91,-4.03l0.51,-1.35l-0.21,-2.69l2.23,-3.44ZM31.5,240.45l-0.06,0.1l-0.34,0.04l0.21,-0.05l0.19,-0.09ZM64.32,351.64l0.27,0.13l0.19,0.18l-0.31,-0.18l-0.15,-0.13ZM65.92,352.88l1.32,0.84l0.76,1.73l-0.89,-0.66l-1.14,0.03l-0.05,-1.94ZM62.72,363.08l1.36,2.08l0.57,0.53l-0.46,0.06l-0.83,-0.79l-0.65,-1.88ZM43.54,333.81l0.88,0.73l1.37,0.36l1.36,1.0l-2.82,-0.18l-0.71,-0.58l0.24,-0.66l-0.32,-0.67ZM47.89,335.89l0.94,-0.5l0.32,0.36l-0.37,0.14l-0.88,-0.0ZM46.05,352.4l0.29,-0.06l0.95,0.92l-0.61,-0.17l-0.64,-0.69ZM37.57,334.04l2.57,0.16l0.2,0.74l0.6,0.45l-1.21,0.64l-1.17,-0.1l-0.49,-0.44l-0.5,-1.44ZM34.94,332.37l0.06,-0.02l0.05,0.06l-0.01,-0.0l-0.1,-0.04Z\", \"name\": \"California\"}, \"US-IA\": {\"path\": \"M452.9,162.25l42.83,-2.19l40.56,-3.19l0.96,2.52l2.0,1.0l0.08,0.59l-0.9,1.8l-0.16,1.04l0.9,5.09l0.92,1.26l0.39,1.75l1.46,1.72l4.95,0.85l1.27,2.03l-0.3,1.03l0.29,0.66l3.61,2.37l0.85,2.41l3.84,2.31l0.62,1.68l-0.31,4.21l-1.64,1.98l-0.5,1.94l0.13,1.28l-1.26,1.36l-2.51,0.97l-0.89,1.18l-0.55,0.25l-4.56,0.83l-0.89,0.73l-0.61,1.71l-0.15,2.56l0.4,1.08l2.01,1.47l0.54,2.65l-1.87,3.25l-0.22,2.24l-0.53,1.42l-2.88,1.39l-1.02,1.02l-0.2,0.99l0.72,0.87l0.2,2.15l-0.58,0.23l-1.34,-0.82l-0.31,-0.76l-1.29,-0.82l-0.29,-0.51l-0.88,-0.36l-0.3,-0.82l-0.95,-0.68l-22.3,2.61l-15.13,1.17l-7.59,0.51l-20.78,0.47l-0.22,-1.06l-1.3,-0.73l-0.33,-0.67l0.58,-1.16l-0.21,-0.95l0.22,-1.39l-0.36,-2.19l-0.6,-0.73l0.07,-3.65l-1.05,-0.5l0.05,-0.91l0.71,-1.02l-0.05,-0.44l-1.31,-0.56l0.33,-2.54l-0.41,-0.45l-0.89,-0.16l0.23,-0.8l-0.3,-0.58l-0.51,-0.25l-0.74,0.23l-0.42,-2.81l0.5,-2.36l-0.2,-0.67l-1.36,-1.71l-0.08,-1.92l-1.78,-1.54l-0.36,-1.74l-1.09,-0.94l0.03,-2.18l-1.1,-1.87l0.21,-1.7l-0.27,-1.08l-1.38,-0.67l-0.42,-1.58l-0.45,-0.59l0.05,-0.63l-1.81,-1.82l0.56,-1.61l0.54,-0.47l0.73,-2.68l0.0,-1.68l0.55,-0.69l0.21,-1.19l-0.51,-2.24l-1.33,-0.29l-0.05,-0.73l0.45,-0.56l-0.0,-1.71l-0.95,-1.42l-0.05,-0.87Z\", \"name\": \"Iowa\"}, \"US-MI\": {\"path\": \"M612.24,185.84l1.83,-2.17l0.7,-1.59l1.18,-4.4l1.43,-3.04l1.01,-5.05l0.09,-5.37l-0.86,-5.54l-2.4,-5.18l0.61,-0.51l0.3,-0.79l-0.57,-0.42l-1.08,0.55l-3.82,-7.04l-0.21,-1.11l1.13,-2.69l-0.01,-0.97l-0.74,-3.13l-1.28,-1.65l-0.05,-0.62l1.73,-2.73l1.22,-4.14l-0.21,-5.34l-0.77,-1.6l1.09,-1.15l0.81,-0.02l0.56,-0.47l-0.27,-3.49l1.08,-0.11l0.67,-1.43l1.19,0.48l0.65,-0.33l0.76,-2.59l0.82,-1.2l0.56,-1.68l0.55,-0.18l-0.58,0.87l0.6,1.65l-0.71,1.8l0.71,0.42l-0.48,2.61l0.88,1.42l0.73,-0.06l0.52,0.56l0.65,-0.24l0.89,-2.26l0.66,-3.52l-0.08,-2.07l-0.76,-3.42l0.58,-1.02l2.13,-1.64l2.74,-0.54l0.98,-0.63l0.28,-0.64l-0.25,-0.54l-1.76,-0.1l-0.96,-0.86l-0.52,-1.99l1.85,-2.98l-0.11,-0.73l1.72,-0.23l0.74,-0.94l4.16,2.0l0.83,0.13l1.98,-0.4l1.37,0.39l1.19,1.04l0.53,1.14l0.77,0.49l2.41,-0.29l1.7,1.02l1.92,0.09l0.8,0.64l3.27,0.45l1.1,0.78l-0.01,1.12l1.04,1.31l0.64,0.21l0.38,0.92l-0.16,0.54l-0.66,-0.25l-0.94,0.57l-0.23,1.83l0.81,1.29l1.6,0.99l0.69,1.37l0.65,2.26l-0.12,1.73l0.77,5.57l-0.14,0.6l-0.57,0.2l-0.48,0.96l-0.75,0.08l-0.79,0.81l-0.17,4.47l-1.12,0.49l-0.18,0.82l-1.86,0.43l-0.73,0.6l-0.58,2.61l0.26,0.45l-0.21,0.52l0.25,2.58l1.38,1.31l2.9,0.84l0.91,-0.07l1.08,-1.23l0.6,-1.44l0.62,0.19l0.38,-0.24l1.01,-3.59l0.6,-1.06l-0.08,-0.52l0.97,-1.45l1.39,-0.39l1.07,-0.69l0.83,-1.1l0.87,-0.44l2.06,0.59l1.13,0.7l1.0,1.09l1.21,2.16l2.0,5.91l0.82,1.6l1.03,3.71l1.49,3.63l1.27,1.73l-0.33,3.93l0.45,2.49l-0.48,2.79l-0.34,0.44l-0.24,-0.33l-0.31,-1.71l-1.46,-0.52l-0.47,0.08l-1.48,1.36l-0.06,0.83l0.55,0.67l-0.83,0.57l-0.29,0.79l0.28,2.94l-0.49,0.75l-1.62,0.92l-1.06,1.85l-0.43,3.73l0.27,1.55l-0.33,0.93l-0.42,0.19l0.02,0.91l-0.64,0.3l-0.37,1.08l-0.52,0.52l-0.5,1.28l-0.02,1.05l-0.52,0.78l-20.37,4.25l-0.14,-0.86l-0.46,-0.33l-31.6,4.74ZM621.47,115.87l0.0,-0.07l0.12,-0.12l-0.01,0.03l-0.11,0.16ZM621.73,114.95l-0.07,-0.16l0.07,-0.14l-0.0,0.3ZM543.48,88.04l4.87,-2.38l3.55,-3.62l5.77,-1.36l1.39,-0.84l2.36,-2.71l0.97,0.04l1.52,-0.73l1.0,-2.25l2.82,-2.84l0.23,1.72l1.85,0.59l0.05,1.45l0.66,0.14l0.51,0.6l-0.17,3.14l0.44,0.95l-0.34,0.47l0.2,0.47l0.74,-0.02l1.08,-2.21l1.08,-0.9l-0.42,1.15l0.59,0.45l0.82,-0.67l0.52,-1.22l1.0,-0.43l3.09,-0.25l1.51,0.21l1.18,0.93l1.54,0.44l0.47,1.05l2.31,2.58l1.17,0.55l0.53,1.55l0.73,0.34l1.87,0.07l0.73,-0.4l1.07,-0.06l0.52,-0.65l0.88,-0.43l1.0,1.11l1.1,0.64l1.02,-0.25l0.68,-0.82l1.87,1.06l0.64,-0.34l1.65,-2.59l2.81,-1.89l1.7,-1.65l0.91,0.11l3.27,-1.21l5.17,-0.25l4.49,-2.72l2.56,-0.37l-0.01,3.24l0.29,0.71l-0.36,1.1l0.67,0.85l0.66,0.11l0.71,-0.39l2.2,0.7l1.14,-0.43l1.03,-0.87l0.66,0.48l0.21,0.71l0.85,0.22l1.27,-0.8l0.95,-1.55l0.66,-0.02l0.84,0.75l1.98,3.78l-0.86,1.04l0.48,0.89l0.47,0.36l1.37,-0.42l0.58,0.46l0.64,0.04l0.18,1.2l0.98,0.87l1.53,0.52l-1.17,0.68l-4.96,-0.14l-0.53,0.29l-1.35,-0.17l-0.88,0.41l-0.66,-0.76l-1.63,-0.07l-0.59,0.47l-0.07,1.22l-0.49,0.75l0.38,2.05l-0.92,-0.22l-0.89,-0.92l-0.77,-0.13l-1.96,-1.65l-2.41,-0.6l-1.6,0.04l-1.04,-0.5l-2.89,0.47l-0.61,0.45l-1.18,2.52l-3.48,0.73l-0.58,0.77l-2.06,-0.34l-2.82,0.93l-0.68,0.83l-0.56,2.51l-0.78,0.28l-0.81,0.87l-0.65,0.28l0.16,-1.96l-0.75,-0.91l-1.02,0.34l-0.76,0.92l-0.97,-0.39l-0.68,0.17l-0.37,0.4l0.1,0.83l-0.73,2.01l-1.2,0.59l-0.11,-1.38l-0.46,-1.06l0.34,-1.69l-0.17,-0.37l-0.66,-0.17l-0.45,0.58l-0.6,2.12l-0.22,2.57l-1.12,0.91l-1.26,3.02l-0.62,2.66l-2.56,5.33l-0.69,0.74l0.12,0.91l-1.4,-1.28l0.18,-1.75l0.63,-1.69l-0.41,-0.81l-0.62,-0.31l-1.36,0.85l-1.16,0.09l0.04,-1.29l0.81,-1.45l-0.41,-1.34l0.3,-1.09l-0.58,-0.98l0.15,-0.83l-1.9,-1.55l-1.1,-0.06l-0.59,-0.44l-0.86,0.2l-0.62,-0.2l0.3,-1.36l-0.94,-1.45l-1.13,-0.51l-2.23,-0.1l-3.2,-0.71l-1.55,0.59l-1.43,-0.42l-1.62,0.17l-4.56,-1.94l-15.37,-2.5l-2.0,-3.4l-1.88,-0.96l-0.76,0.26l-0.1,-0.3ZM603.38,98.65l-0.01,0.52l-0.46,0.32l-0.7,1.39l0.08,0.57l-0.65,-0.58l0.91,-2.16l0.83,-0.06ZM643.87,87.47l1.99,-1.52l0.17,-0.57l-0.27,-0.64l1.05,0.16l0.8,1.24l0.81,0.19l-0.27,1.08l-0.36,0.19l-1.5,-0.34l-0.77,0.45l-1.63,-0.24ZM635.6,77.64l0.56,-0.83l0.52,0.05l-0.37,1.32l0.11,0.71l-0.35,-0.9l-0.46,-0.35ZM636.53,79.17l0.09,0.14l0.01,0.01l-0.02,-0.01l-0.08,-0.14ZM637.39,81.25l0.4,0.45l0.22,0.61l-0.63,-0.71l0.01,-0.34ZM633.73,93.13l1.41,0.25l0.36,-0.18l0.4,0.21l-0.17,0.52l-0.75,0.11l-1.24,-0.9ZM618.85,96.77l0.62,2.25l-0.8,0.78l-0.39,-0.27l0.56,-2.76ZM613.26,110.83l0.47,0.3l-0.09,0.57l-0.45,-0.69l0.06,-0.17ZM612.23,113.57l0.0,-0.03l0.02,-0.04l-0.03,0.07ZM599.41,82.64l-0.23,-0.37l0.03,-0.4l0.37,0.32l-0.17,0.45ZM570.51,72.75l-0.51,-0.27l-1.16,0.06l-0.04,-1.56l1.0,-1.03l1.17,-2.09l1.84,-1.49l0.63,-0.0l0.53,-0.58l2.08,-0.89l3.34,-0.42l1.1,0.66l-0.54,0.38l-1.31,-0.12l-2.27,0.78l-0.15,0.29l0.3,0.59l0.71,0.13l-1.19,0.98l-1.4,1.89l-0.7,0.29l-0.36,1.45l-1.15,1.37l-0.66,2.04l-0.67,-0.87l0.75,-0.97l0.14,-1.95l-0.63,-0.37l-0.21,0.15l-0.6,0.92l-0.05,0.67ZM558.28,58.21l0.75,-0.98l-0.39,-0.33l0.56,-0.53l4.62,-2.98l1.97,-1.72l0.62,-0.18l-0.45,0.65l0.1,0.79l-0.43,0.49l-4.25,2.56l-0.86,0.99l0.24,0.36l-1.87,1.17l-0.61,-0.28Z\", \"name\": \"Michigan\"}, \"US-GA\": {\"path\": \"M654.05,331.71l22.02,-3.57l20.65,-3.86l-1.48,1.42l-0.51,1.68l-0.66,0.82l-0.41,1.73l0.11,1.23l0.82,0.78l1.84,0.8l1.03,0.12l2.7,2.03l0.84,0.24l1.9,-0.37l0.6,0.25l0.8,1.64l1.51,1.6l1.04,2.5l1.33,0.82l0.84,1.16l0.56,0.26l1.0,1.77l1.07,0.3l1.17,0.99l3.81,1.85l2.41,3.16l2.25,0.58l2.53,1.67l0.5,2.34l1.25,1.02l0.47,-0.16l0.31,0.49l-0.1,0.62l0.79,0.73l0.79,0.09l0.56,1.21l4.99,1.89l0.4,1.78l1.54,1.73l1.02,2.01l-0.07,0.81l0.49,0.69l0.11,1.24l1.04,0.79l1.17,0.17l1.25,0.62l0.28,0.53l0.57,0.23l1.12,2.56l0.76,0.57l0.08,2.68l0.77,1.48l1.38,0.9l1.52,-0.27l1.44,0.76l1.45,0.11l-0.59,0.78l-0.56,-0.35l-0.47,0.28l-0.4,0.99l0.62,0.91l-0.38,0.48l-1.38,-0.16l-0.77,-0.55l-0.65,0.44l0.26,0.71l-0.49,0.52l0.36,0.61l0.94,-0.04l0.5,0.29l-0.58,1.35l-1.43,0.27l-1.33,-0.44l-0.44,0.39l0.34,0.85l1.23,0.35l-0.5,0.87l0.23,0.35l-0.2,0.64l0.83,0.64l-0.33,0.44l-0.72,-0.13l-0.96,0.51l-0.1,0.62l1.09,0.45l0.05,0.95l0.48,-0.07l1.2,-1.17l-0.92,2.31l-0.31,-0.58l-0.59,-0.08l-0.44,0.72l0.29,0.7l0.98,0.83l-2.32,0.04l-0.92,-0.28l-0.63,0.3l0.06,0.63l0.55,0.34l2.76,0.24l1.07,0.66l-0.02,0.34l-0.56,0.22l-0.88,1.95l-0.5,-1.41l-0.45,-0.13l-0.6,0.33l-0.15,0.84l0.34,0.96l-0.6,0.11l-0.03,0.84l-0.3,0.16l0.07,0.46l1.33,1.15l-1.09,1.03l0.32,0.47l0.77,0.07l-0.39,0.92l0.06,0.88l-0.46,0.51l1.1,1.66l0.03,0.76l-0.79,0.33l-2.64,-0.17l-4.06,-0.96l-1.31,0.35l-0.18,0.74l-0.68,0.26l-0.35,1.25l0.28,2.08l0.95,1.36l0.13,4.25l-1.97,0.4l-0.54,-0.92l-0.12,-1.3l-1.33,-1.82l-49.22,5.14l-0.72,-0.56l-0.86,-2.7l-0.94,-1.51l-0.56,-0.38l0.16,-0.68l-0.73,-1.51l-1.82,-1.81l-0.43,-1.75l0.25,-0.8l0.06,-5.18l-0.6,-1.81l-1.19,-1.47l-1.03,-2.65l0.12,-1.65l0.78,-2.36l-0.25,-1.53l0.19,-2.11l1.62,-1.33l0.46,-1.47l-0.55,-0.61l-1.42,-0.69l0.09,-2.15l-0.97,-1.87l-2.18,-2.42l-1.03,-2.81l-0.75,-0.68l-0.17,-0.96l-0.77,-1.37l-13.99,-43.12ZM745.21,389.83l0.7,-0.26l-0.07,0.82l-0.29,-0.33l-0.34,-0.24ZM743.75,406.73l0.05,0.87l-0.01,0.46l-0.34,-0.56l0.3,-0.76Z\", \"name\": \"Georgia\"}, \"US-AZ\": {\"path\": \"M128.39,384.21l0.44,-1.81l1.29,-1.29l0.54,-1.11l0.48,-0.25l1.66,0.62l0.96,-0.03l0.52,-0.46l0.28,-1.17l1.31,-1.0l0.24,-2.73l-0.46,-1.24l-0.84,-0.66l-2.07,-0.67l-0.3,-0.61l0.8,-2.4l0.0,-1.39l-0.52,-1.2l0.57,-0.86l-0.2,-0.87l1.57,-0.27l2.29,-2.81l0.65,-2.43l0.65,-0.81l0.02,-3.17l0.55,-0.62l-0.29,-1.43l1.71,-1.14l1.03,-1.85l3.16,-1.29l2.03,-1.58l0.26,-0.53l-0.13,-1.04l-3.25,-3.49l-0.51,-0.22l0.22,-1.26l-0.66,-1.46l0.07,-0.91l-0.88,-2.76l-0.84,-0.56l-0.19,-1.65l-0.69,-0.8l0.19,-3.54l0.58,-0.87l-0.3,-0.86l1.04,-0.4l0.4,-1.42l0.14,-3.2l-0.76,-3.66l0.47,-0.88l0.29,-1.67l-0.4,-3.0l0.85,-2.56l-0.8,-1.87l-0.03,-0.92l0.43,-0.52l0.34,-1.35l2.54,-0.63l1.75,0.99l1.43,-0.19l0.96,2.24l0.79,0.71l1.54,0.14l1.01,-0.5l1.02,-2.27l0.94,-1.19l2.57,-16.95l42.43,5.78l42.56,4.67l-11.82,123.66l-36.89,-4.05l-36.34,-18.98l-28.44,-15.56Z\", \"name\": \"Arizona\"}, \"US-MT\": {\"path\": \"M166.3,57.31l0.69,-0.1l0.33,-0.38l-0.9,-1.99l0.83,-0.96l-0.39,-1.3l0.09,-0.96l-1.24,-1.93l-0.24,-1.49l-1.03,-1.33l-1.19,-2.44l3.53,-20.65l43.66,6.71l43.06,5.23l42.75,3.84l43.15,2.53l-3.53,86.06l-28.11,-1.47l-26.82,-1.91l-26.78,-2.4l-25.84,-2.79l-0.44,0.35l-1.22,10.41l-1.51,-2.01l-0.03,-0.91l-1.19,-2.35l-1.25,-0.74l-1.8,0.92l0.03,1.05l-0.72,0.42l-0.34,1.56l-2.42,-0.41l-1.91,0.57l-0.92,-0.85l-3.36,0.09l-2.38,-0.96l-1.68,0.58l-0.84,1.49l-4.66,-1.6l-1.3,0.37l-1.12,0.9l-0.31,0.67l-1.65,-1.4l0.22,-1.43l-0.9,-1.71l0.4,-0.36l0.07,-0.62l-1.17,-3.08l-1.45,-1.25l-1.44,0.36l-0.21,-0.64l-1.08,-0.9l-0.41,-1.37l0.68,-0.61l0.2,-1.41l-0.77,-2.38l-0.77,-0.35l-0.31,-1.58l-1.51,-2.54l0.23,-1.51l-0.56,-1.26l0.34,-1.4l-0.73,-0.86l0.48,-0.98l-0.21,-0.74l-1.14,-0.75l-0.13,-0.59l-0.85,-0.91l-0.8,-0.4l-0.51,0.37l-0.07,0.74l-0.7,0.27l-1.13,1.22l-1.75,0.37l-1.21,1.07l-1.08,-0.85l-0.64,-1.01l-1.06,-0.44l0.02,-0.86l0.74,-0.63l0.24,-1.06l-0.61,-1.6l0.9,-1.09l1.07,-0.08l0.83,-0.8l-0.26,-1.14l0.38,-1.07l-0.95,-0.81l-0.04,-0.81l0.66,-1.28l-0.59,-1.07l0.74,-0.07l0.38,-0.42l-0.04,-1.77l1.83,-3.73l-0.14,-1.05l0.89,-0.62l0.6,-3.17l-0.78,-0.5l-1.8,0.37l-1.33,-0.11l-0.64,-0.55l0.37,-0.83l-0.62,-0.97l-0.66,-0.23l-0.72,0.35l-0.07,-0.95l-1.74,-1.63l0.04,-1.84l-1.68,-1.82l-0.08,-0.69l-1.55,-2.88l-1.07,-1.29l-0.57,-1.63l-2.35,-1.34l-0.95,-1.95l-1.44,-1.19Z\", \"name\": \"Montana\"}, \"US-MS\": {\"path\": \"M555.49,431.1l0.67,-0.97l-1.05,-1.76l0.18,-1.63l-0.81,-0.87l1.69,-0.25l0.47,-0.54l0.4,-2.74l-0.77,-1.82l1.56,-1.79l0.25,-3.58l0.74,-2.26l1.89,-1.25l1.15,-1.97l1.4,-1.04l0.34,-0.78l-0.04,-0.99l-0.63,-0.96l1.14,-0.28l0.96,-2.59l0.91,-1.31l-0.16,-0.86l-1.54,-0.43l-0.35,-0.96l-1.83,-1.04l-0.07,-2.14l-0.93,-0.74l-0.45,-0.84l-0.02,-0.37l1.14,-0.29l0.47,-0.69l-0.26,-0.89l-1.41,-0.49l0.23,-1.77l0.98,-1.54l-0.77,-1.06l-1.08,-0.31l-0.15,-2.82l0.9,-0.54l0.23,-0.8l-0.62,-2.52l-1.25,-0.66l0.7,-1.33l-0.07,-2.22l-2.02,-1.52l1.14,-0.47l0.12,-1.41l-1.34,-0.89l1.58,-2.04l0.93,-0.31l0.36,-0.69l-0.52,-1.56l0.42,-1.35l-0.9,-0.89l1.6,-0.83l1.24,-0.27l0.59,-0.77l-0.09,-1.07l-1.41,-0.95l1.39,-1.08l0.62,-1.77l0.5,0.11l0.45,-0.28l0.34,-0.98l-0.2,-0.77l1.48,-0.43l1.22,-1.21l0.07,-3.53l-0.46,-1.53l0.36,-1.78l0.73,0.09l0.68,-0.33l0.42,-0.87l-0.41,-1.06l2.72,-1.71l0.58,-1.06l-0.29,-1.28l36.45,-4.1l0.86,1.26l0.85,0.45l0.99,66.5l5.52,32.95l-0.73,0.69l-1.53,-0.3l-0.91,-0.94l-1.32,1.06l-1.23,0.17l-2.17,-1.26l-1.85,-0.19l-0.83,0.36l-0.34,0.44l0.32,0.41l-0.56,0.36l-3.96,1.66l-0.05,-0.5l-0.96,-0.52l-1.0,0.04l-0.59,1.0l0.76,0.61l-1.59,1.21l-0.32,1.28l-0.69,0.3l-1.34,-0.06l-1.16,-1.86l-0.08,-0.89l-0.92,-1.47l-0.21,-1.01l-1.4,-1.63l-1.16,-0.54l-0.47,-0.78l0.1,-0.62l-0.69,-0.92l0.21,-1.99l0.5,-0.93l0.66,-2.98l-0.06,-1.23l-0.43,-0.29l-34.66,3.41Z\", \"name\": \"Mississippi\"}, \"US-SC\": {\"path\": \"M697.56,324.11l4.86,-2.69l1.02,-0.05l1.11,-1.38l3.93,-1.9l0.45,-0.88l0.63,0.22l22.71,-3.36l0.07,1.22l0.42,0.57l0.71,0.01l1.21,-1.3l2.82,2.54l0.46,2.48l0.55,0.52l19.74,-3.49l22.74,15.07l0.02,0.55l-2.48,2.18l-2.44,3.67l-2.41,5.72l-0.09,2.74l-1.08,-0.21l0.85,-2.73l-0.64,-0.23l-0.76,0.87l-0.56,1.38l-0.11,1.55l0.84,0.95l1.05,0.23l0.44,0.91l-0.75,0.08l-0.41,0.56l-0.87,0.02l-0.24,0.68l0.94,0.45l-1.1,1.13l-0.07,1.02l-1.34,0.63l-0.5,-0.61l-0.5,-0.08l-1.07,0.87l-0.56,1.76l0.43,0.87l-1.2,1.23l-0.61,1.44l-1.2,1.01l-0.9,-0.4l0.27,-0.6l-0.53,-0.74l-1.38,0.31l-0.11,0.43l0.36,0.77l-0.52,0.03l0.05,0.76l0.72,0.58l1.3,0.43l-0.12,0.39l-0.88,0.94l-1.22,0.23l-0.25,0.51l0.33,0.45l-2.3,1.34l-1.42,-0.85l-0.56,0.11l-0.11,0.67l1.19,0.78l-1.54,1.57l-0.72,-0.75l-0.5,0.52l-0.0,0.74l-0.69,-0.37l-0.85,-0.0l-1.34,-0.84l-0.45,0.5l0.16,0.53l-1.73,0.17l-0.44,0.37l-0.06,0.77l0.65,0.23l1.43,-0.17l-0.26,0.55l0.42,0.25l1.91,-0.15l0.11,0.22l-0.97,0.86l-0.32,0.78l0.57,0.49l0.94,-0.53l0.03,0.21l-1.12,1.09l-0.99,0.43l-0.21,-2.04l-0.69,-0.27l-0.22,-1.55l-0.88,-0.15l-0.31,0.58l0.86,2.7l-1.12,-0.66l-0.63,-1.0l-0.4,-1.76l-0.65,-0.2l-0.52,-0.63l-0.69,0.0l-0.27,0.6l0.84,1.02l0.01,0.68l1.11,1.83l-0.02,0.86l1.22,1.17l-0.62,0.35l0.03,0.98l-1.2,3.56l-1.52,-0.78l-1.52,0.26l-0.97,-0.68l-0.54,-1.03l-0.17,-2.93l-0.86,-0.75l-1.06,-2.47l-1.04,-0.95l-3.23,-1.33l-0.49,-2.65l-1.12,-2.17l-1.43,-1.58l-0.06,-1.07l-0.76,-1.21l-4.82,-1.69l-0.58,-1.27l-1.21,-0.37l0.02,-0.7l-0.53,-0.87l-0.87,0.0l-0.73,-0.61l0.03,-1.21l-0.66,-1.26l-2.7,-1.78l-2.16,-0.52l-2.36,-3.12l-3.93,-1.93l-1.22,-1.03l-0.83,-0.12l-1.05,-1.81l-0.51,-0.22l-0.91,-1.21l-1.18,-0.68l-0.99,-2.42l-1.54,-1.65l-1.02,-1.87l-1.06,-0.37l-1.93,0.37l-0.46,-0.16l-2.75,-2.19l-1.06,0.02l-1.7,-0.74l-0.52,-0.53l0.36,-2.22l0.64,-0.78l0.34,-1.39l1.36,-1.23l0.4,-0.98ZM750.38,375.27l0.73,-0.08l0.51,0.45l-1.23,1.9l0.28,-1.22l-0.3,-1.06Z\", \"name\": \"South Carolina\"}, \"US-RI\": {\"path\": \"M859.15,133.1l0.33,0.01l1.02,2.65l-0.31,0.56l-1.04,-3.22ZM858.41,136.77l-0.28,-0.34l0.24,-1.5l0.41,1.53l-0.37,0.31ZM851.13,141.49l0.22,-0.46l-0.53,-2.22l-3.14,-10.0l5.61,-1.84l0.76,2.06l0.8,0.25l0.19,0.73l0.08,0.41l-0.77,0.25l0.03,0.29l0.51,1.45l0.59,0.5l-0.6,0.15l-0.46,0.73l0.87,0.97l-0.14,1.22l0.94,2.18l-0.32,2.08l-1.33,0.23l-3.15,2.19l-0.16,-1.21ZM855.93,131.57l0.26,0.1l0.01,0.09l-0.17,-0.08l-0.1,-0.11ZM857.32,132.24l0.23,0.48l-0.2,0.31l-0.04,-0.39l0.01,-0.4ZM855.92,145.03l0.11,0.11l-0.18,0.1l-0.03,-0.14l0.11,-0.07Z\", \"name\": \"Rhode Island\"}, \"US-CT\": {\"path\": \"M823.44,156.54l2.83,-3.23l-0.07,-0.54l-1.31,-1.25l-3.5,-15.89l9.81,-2.41l0.6,0.46l0.65,-0.26l0.23,-0.58l14.16,-4.0l3.2,10.18l0.47,1.96l-0.04,1.69l-1.65,0.32l-0.91,0.81l-0.69,-0.36l-0.5,0.11l-0.18,0.91l-1.15,0.07l-1.27,1.27l-0.62,-0.14l-0.56,-1.02l-0.89,-0.09l-0.21,0.67l0.75,0.64l0.08,0.54l-0.89,-0.02l-1.02,0.87l-1.65,0.07l-1.15,0.94l-0.86,-0.09l-2.05,0.82l-0.4,-0.68l-0.61,0.11l-0.89,2.12l-0.59,0.29l-0.83,1.29l-0.79,-0.05l-0.94,0.74l-0.2,0.63l-0.53,0.05l-0.88,0.75l-2.77,3.07l-0.96,0.27l-1.24,-1.04Z\", \"name\": \"Connecticut\"}}, \"height\": 589.0572567800147, \"projection\": {\"type\": \"aea\", \"centralMeridian\": -100.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-us-il-chicago-mill-en.js",
    "content": "$.fn.vectorMap('addMap', 'us-il-chicago_mill_en',{\"insets\": [{\"width\": 900.0, \"top\": 0, \"height\": 981.6642077705183, \"bbox\": [{\"y\": -4974623.06756953, \"x\": -9794413.94204009}, {\"y\": -4924089.35877946, \"x\": -9748084.109953867}], \"left\": 0}], \"paths\": {\"30\": {\"path\": \"M434.84,460.98l36.68,-9.71l0.3,-0.39l-0.1,-5.36l20.97,-0.32l2.81,-0.75l0.3,-0.42l-0.11,-3.59l15.66,-0.18l2.05,-0.51l0.29,-0.4l-0.1,-3.87l15.13,-0.27l0.51,0.69l15.82,-4.25l0.49,21.81l0.5,9.27l0.23,25.68l-18.77,7.05l-0.82,-0.42l-8.12,3.3l-9.08,2.89l-0.32,0.4l0.05,1.49l-20.38,7.69l-0.54,-0.54l-51.84,19.56l-0.14,-7.94l0.35,-0.36l-0.71,-37.88l-0.27,-0.26l-0.11,-4.47l-0.27,-0.26l-0.45,-17.67Z\", \"name\": \"SOUTH LAWNDALE\"}, \"42\": {\"path\": \"M702.83,648.78l-0.66,-32.42l62.7,-1.14l0.5,-0.66l1.56,0.3l1.02,1.13l17.07,-0.71l2.46,6.49l6.42,3.82l6.0,2.05l-5.94,2.09l-0.23,0.51l0.25,0.7l-2.29,0.68l-1.48,1.19l-1.26,3.45l0.09,2.02l1.35,2.52l-0.71,0.12l-0.21,0.84l2.1,0.93l1.55,0.1l0.41,0.34l0.47,-0.55l2.88,-0.87l0.49,-1.57l-0.05,-0.88l-1.26,-1.88l-0.85,-0.22l-0.17,-0.63l-1.11,-1.39l0.14,-1.94l1.24,-0.25l0.46,0.19l0.72,1.51l4.23,4.18l2.34,1.53l4.68,6.55l-84.35,1.23l-0.39,0.41l0.35,17.92l-20.5,-17.67Z\", \"name\": \"WOODLAWN\"}, \"29\": {\"path\": \"M433.41,408.21l0.45,-0.42l-0.26,-7.5l14.87,-4.96l0.14,4.61l0.41,0.39l15.38,-0.23l0.02,1.07l0.4,0.39l10.98,-0.16l0.39,-0.41l-0.08,-2.93l4.67,-0.17l25.79,-0.3l0.06,2.01l0.4,0.39l31.11,-0.42l0.26,3.65l0.5,1.81l0.56,0.86l-0.32,0.56l5.51,9.03l-0.07,9.07l0.31,0.69l0.1,5.58l-15.52,4.17l-0.39,-0.57l-0.38,-0.02l-15.57,0.28l-0.39,0.41l0.1,3.97l-1.55,0.4l-16.02,0.16l-0.44,0.41l0.1,3.73l-2.42,0.65l-21.26,0.32l-0.39,0.41l0.11,5.44l-36.2,9.59l-1.4,-51.95Z\", \"name\": \"NORTH LAWNDALE\"}, \"60\": {\"path\": \"M604.34,460.52l0.42,0.11l4.45,-3.9l2.33,0.23l14.05,-2.95l2.99,-0.24l8.14,-2.55l3.73,-0.28l1.58,2.39l0.44,0.11l1.88,-0.89l0.84,1.17l-1.12,0.02l-0.32,0.63l1.36,1.93l-0.17,0.55l0.52,1.99l0.41,0.39l4.47,-0.18l2.14,0.42l0.14,6.34l0.4,0.39l3.45,-0.06l0.17,18.51l0.41,0.39l0.68,-0.01l0.08,3.93l-0.99,0.02l-0.39,0.36l-0.1,1.03l0.35,17.46l0.03,0.49l0.44,0.38l0.08,4.34l0.35,0.8l3.8,3.46l-46.76,0.76l-1.98,-1.67l-0.91,-10.68l0.28,-7.78l-6.4,-8.38l-2.07,-1.34l-3.8,-4.99l-0.75,-2.49l-2.35,-4.49l-0.02,-2.88l-0.9,-2.41l1.4,-2.94l1.09,-3.72l6.14,-3.76Z\", \"name\": \"BRIDGEPORT\"}, \"61\": {\"path\": \"M553.61,557.46l0.78,0.0l0.4,-0.41l-0.78,-37.41l52.09,-0.54l51.22,-0.97l0.17,13.69l0.34,0.33l0.31,3.94l-0.92,0.38l0.0,10.74l-0.47,3.31l0.4,0.48l0.72,-0.02l0.15,4.17l-0.27,0.68l0.98,36.99l-93.0,1.56l-1.29,-7.82l-0.29,-14.14l0.31,-6.13l-0.4,-0.38l-10.34,0.32l-0.11,-8.77Z\", \"name\": \"NEW CITY\"}, \"62\": {\"path\": \"M437.9,591.49l5.04,-0.45l0.32,-0.53l-0.18,-2.82l15.48,-0.19l0.39,-0.41l-0.08,-3.58l10.24,-4.85l0.22,-0.81l0.65,-0.05l7.65,-4.06l9.05,-4.22l1.56,-1.61l1.04,-1.67l1.07,38.88l-0.42,0.41l0.2,9.02l-51.66,0.78l-0.59,-23.85Z\", \"name\": \"WEST ELSDON\"}, \"63\": {\"path\": \"M490.11,569.1l5.9,-0.57l15.15,-0.17l0.39,-0.69l20.34,-0.4l0.43,0.6l21.03,-0.38l0.39,-0.45l1.07,-0.18l8.88,-0.14l-0.33,5.71l0.29,14.17l1.3,8.76l-0.82,0.01l-0.39,0.37l-0.63,9.82l-0.01,7.8l-72.13,1.2l-0.19,-8.64l0.42,-0.41l-0.73,-28.01l0.23,-0.27l-0.44,-0.65l-0.14,-7.47Z\", \"name\": \"GAGE PARK\"}, \"64\": {\"path\": \"M300.93,618.97l136.8,-2.83l0.93,37.0l-9.75,0.17l-0.23,-9.09l-0.42,-0.37l-126.47,2.8l-0.86,-27.7Z\", \"name\": \"CLEARING\"}, \"65\": {\"path\": \"M429.25,671.43l-0.33,-17.3l10.15,-0.18l0.39,-0.43l-0.94,-37.38l52.64,-0.8l0.37,18.03l-0.44,0.41l1.11,47.05l-0.24,8.14l-1.96,-0.73l-5.38,-3.11l-0.26,0.14l-4.46,-2.12l-6.28,-3.8l-2.21,-0.96l-0.53,0.39l0.52,20.58l-21.41,0.53l-0.47,-0.4l-8.88,0.7l-0.31,-0.3l-5.46,0.12l-4.76,-0.46l-0.87,-28.13Z\", \"name\": \"WEST LAWN\"}, \"66\": {\"path\": \"M491.91,634.16l0.46,-0.43l-0.4,-18.4l72.31,-1.2l0.31,13.91l1.06,4.7l-0.72,8.47l0.02,0.84l0.56,0.39l0.41,8.6l-0.77,0.41l0.21,9.41l0.53,0.39l-0.17,3.88l0.21,2.07l-0.43,3.0l0.02,2.42l0.82,15.63l-62.64,1.35l-0.29,-0.32l-7.72,0.24l-2.94,-0.36l0.05,-7.88l0.2,-0.25l-1.1,-46.86Z\", \"name\": \"CHICAGO LAWN\"}, \"67\": {\"path\": \"M564.51,596.15l0.85,-0.01l0.39,-0.42l-0.01,-0.54l51.0,-0.79l2.02,93.26l-33.25,0.66l-0.45,-0.39l-17.92,0.32l-0.82,-15.64l-0.02,-2.32l0.43,-3.02l-0.21,-2.15l0.2,-4.23l-0.58,-0.43l-0.19,-8.61l0.78,-0.42l-0.45,-9.4l-0.55,-0.38l-0.01,-0.43l0.72,-8.52l-1.06,-4.79l-0.32,-14.18l-0.41,-0.39l-0.78,0.01l0.01,-7.75l0.61,-9.43Z\", \"name\": \"WEST ENGLEWOOD\"}, \"68\": {\"path\": \"M617.55,594.41l56.14,-1.11l0.65,28.85l-1.17,0.03l-0.39,0.41l0.16,7.13l0.28,0.63l-2.6,0.03l-0.39,0.41l0.38,18.46l-1.91,0.03l-0.39,0.35l-0.47,3.41l-0.22,5.68l-4.35,0.1l-0.39,0.41l0.08,4.32l-2.22,0.05l-0.39,0.41l0.15,7.45l-0.43,1.79l0.84,0.54l-0.34,1.04l0.16,7.62l-2.23,0.04l-0.39,0.41l0.09,4.32l-7.34,0.2l-0.38,0.4l-0.1,4.33l-9.73,0.19l-0.1,-4.96l-0.57,-0.35l-20.42,0.33l-2.02,-92.95Z\", \"name\": \"ENGLEWOOD\"}, \"69\": {\"path\": \"M650.23,706.26l-0.29,-13.3l0.83,-0.02l0.39,-0.37l0.13,-4.38l7.34,-0.18l0.39,-0.41l-0.09,-4.32l2.23,-0.04l0.39,-0.41l-0.17,-7.98l0.38,-1.2l-0.15,-0.39l-0.69,-0.31l0.4,-1.47l-0.14,-7.1l2.14,-0.04l0.39,-0.33l-0.0,-4.4l4.33,-0.1l0.39,-0.38l0.23,-6.03l0.41,-3.02l2.0,-0.03l0.39,-0.44l-0.41,-18.44l3.08,-0.04l0.37,-0.53l-0.74,-0.86l-0.15,-6.76l6.91,-0.14l0.06,7.75l0.4,0.41l9.33,0.03l11.37,-0.49l0.5,18.74l21.34,18.41l0.66,-0.32l-0.38,-18.43l28.68,-0.34l-1.33,7.7l0.02,0.65l0.76,0.39l0.22,9.28l-1.79,0.01l-0.4,0.37l-0.06,9.09l-2.32,0.02l-0.39,0.33l-1.66,9.14l-0.58,0.26l0.11,0.44l4.76,4.01l-4.87,0.05l-0.39,0.33l-0.9,4.75l0.4,0.47l0.95,-0.01l0.21,8.65l-94.99,1.75Z\", \"name\": \"GREATER GRAND CROSSING\"}, \"34\": {\"path\": \"M642.27,450.39l1.54,-0.89l1.12,-1.24l6.01,-9.9l4.09,-2.66l2.87,-2.51l1.53,-1.79l0.67,-1.81l9.97,-0.14l0.35,12.34l0.4,0.37l1.15,-0.01l0.37,18.2l-1.31,0.02l-0.4,0.41l0.87,37.81l0.4,0.38l0.81,-0.0l0.17,8.08l-0.36,0.98l0.26,9.06l-10.24,0.17l-4.3,-3.92l-0.3,-5.07l-0.46,-0.49l-0.34,-17.42l0.06,-0.61l1.03,-0.02l0.4,-0.41l-0.06,-3.33l-0.03,-1.4l-0.4,-0.39l-0.68,0.01l-0.17,-18.51l-0.41,-0.39l-3.45,0.06l-0.13,-6.26l-0.32,-0.38l-2.53,-0.5l-4.17,0.18l-0.5,-1.65l0.16,-0.73l-1.08,-1.52l0.97,-0.01l0.39,-0.38l-0.06,-0.44l-1.36,-1.91l-0.53,-0.11l-1.82,0.92l-1.19,-1.84l1.02,-0.34Z\", \"name\": \"ARMOUR SQUARE\"}, \"24\": {\"path\": \"M504.77,293.64l10.7,-0.15l0.4,-0.41l-0.24,-9.32l9.6,-0.22l0.56,0.26l12.83,-0.14l0.46,0.24l0.31,-0.25l16.42,-0.25l1.48,1.15l0.64,-0.33l-0.05,-2.29l9.78,-0.23l0.02,1.01l0.4,0.39l21.88,-0.29l3.18,-0.7l5.14,-2.73l1.34,0.27l3.28,-1.64l0.79,-0.07l4.96,3.64l1.2,1.5l0.72,1.64l1.85,6.84l-0.1,0.3l-4.18,1.67l-0.84,2.29l0.39,0.5l3.22,-0.04l-0.42,1.39l-1.16,8.79l0.33,1.46l1.44,2.41l2.2,2.54l1.27,3.76l1.3,1.1l1.89,0.74l5.61,1.32l2.16,1.51l3.16,2.86l1.42,0.64l8.35,1.02l0.87,1.01l0.39,1.43l0.4,6.64l1.25,1.68l2.34,1.7l1.85,2.08l1.94,3.62l2.53,3.48l-10.14,0.07l-0.4,0.41l0.02,0.77l-6.22,0.03l-0.02,-0.86l-0.41,-0.39l-84.41,1.08l-0.45,0.59l-3.64,0.61l-6.28,-0.05l-0.15,-9.25l-0.27,-1.45l-10.59,-5.08l-0.07,-3.19l-0.4,-0.39l-11.51,0.15l-0.04,-1.45l0.75,-0.29l-0.15,-7.31l-0.4,-0.4l-9.83,0.11l-0.68,-27.54Z\", \"name\": \"WEST TOWN\"}, \"25\": {\"path\": \"M290.08,259.39l5.85,2.07l25.4,11.33l8.48,3.39l2.62,0.72l3.4,0.29l43.85,-0.6l11.57,1.53l7.25,1.77l0.28,-0.22l1.5,0.06l29.4,4.03l-0.16,13.22l0.53,20.49l-0.37,0.38l-0.0,2.02l0.49,3.01l0.2,5.53l-0.3,1.69l1.22,11.22l-0.32,0.35l1.16,37.75l0.41,0.39l1.12,-0.01l0.12,3.8l0.13,4.86l-1.11,0.03l-0.39,0.41l0.67,18.51l-73.55,1.29l-3.16,-113.25l-0.41,-0.39l-64.83,1.06l-1.03,-36.75Z\", \"name\": \"AUSTIN\"}, \"26\": {\"path\": \"M432.09,351.48l27.58,-0.48l6.51,0.45l0.4,-0.5l7.13,-0.05l0.67,31.01l0.6,4.18l0.41,14.53l-10.17,0.15l-0.03,-1.07l-0.4,-0.39l-15.38,0.22l-0.15,-4.6l-0.57,-0.5l-15.14,5.05l-0.36,-10.18l1.1,-0.03l0.39,-0.41l-0.14,-5.27l-0.13,-4.19l-0.39,-0.39l-1.13,-0.0l-0.81,-27.52Z\", \"name\": \"WEST GARFIELD PARK\"}, \"27\": {\"path\": \"M474.52,350.85l36.25,-0.62l0.37,0.36l15.58,-0.3l3.18,0.33l11.76,-0.07l-2.08,0.98l-1.53,1.59l-0.89,2.24l0.13,4.15l-1.1,0.05l-0.38,0.42l0.26,8.57l0.4,0.36l1.03,-0.01l0.74,25.31l-0.25,0.43l0.08,4.12l-30.63,0.41l-0.06,-2.0l-0.39,-0.38l-0.53,-0.02l-30.36,0.48l-0.39,-12.4l-0.53,-2.99l-0.67,-31.01Z\", \"name\": \"EAST GARFIELD PARK\"}, \"20\": {\"path\": \"M428.67,218.94l14.37,-0.24l16.16,37.43l0.37,0.24l1.63,-0.02l0.05,2.65l0.46,1.31l-0.78,0.01l-0.37,0.56l0.79,1.89l0.17,7.44l0.4,0.39l3.5,-0.05l1.69,3.92l-0.41,0.47l0.35,4.67l0.41,0.39l1.71,-0.02l1.41,3.74l-31.2,0.43l-8.92,-1.02l-1.8,-64.18Z\", \"name\": \"HERMOSA\"}, \"21\": {\"path\": \"M443.91,218.68l16.78,-0.27l0.4,-0.41l-0.46,-18.49l66.73,-0.83l1.97,9.9l3.64,6.68l1.9,1.98l2.74,1.83l0.88,1.34l1.4,3.47l0.65,0.64l0.66,0.33l2.97,0.4l0.93,0.72l0.19,9.6l-93.59,1.14l-7.79,-18.03Z\", \"name\": \"AVONDALE\"}, \"48\": {\"path\": \"M746.57,743.14l63.35,-1.06l42.56,36.54l-41.79,0.5l-0.08,-2.97l-0.46,-0.38l-6.35,0.85l-40.38,0.79l-2.94,-7.75l-9.04,-18.23l-4.88,-8.28Z\", \"name\": \"CALUMET HEIGHTS\"}, \"49\": {\"path\": \"M662.47,745.29l0.65,-0.39l-0.14,-5.55l2.05,4.32l-0.23,0.07l-0.03,1.38l3.39,3.31l4.54,5.14l7.61,9.69l14.05,-0.26l0.39,-0.41l-0.01,-0.57l3.44,1.13l6.32,2.87l0.25,2.58l5.81,3.48l2.09,0.05l2.18,1.21l0.3,0.22l0.23,1.38l5.73,3.29l4.64,1.69l0.01,1.01l0.4,0.4l2.33,0.0l-17.74,94.02l-65.7,0.92l-1.46,-55.76l20.58,-0.32l0.39,-0.41l-1.32,-59.27l-0.79,-15.24Z\", \"name\": \"ROSELAND\"}, \"46\": {\"path\": \"M856.04,697.11l-0.29,0.82l1.35,3.75l0.65,1.24l0.9,0.82l5.86,0.32l18.1,8.45l2.31,1.36l1.91,16.04l0.33,0.82l-1.38,0.4l-19.8,0.27l-0.39,0.41l0.05,1.34l0.4,0.39l21.23,-0.28l1.83,17.4l-0.5,1.59l-21.87,10.88l-2.23,1.36l-2.11,1.8l-1.18,1.28l-0.79,1.53l-1.62,6.63l-0.37,2.7l-4.9,0.09l-85.49,-73.5l71.05,-1.08l8.05,-5.75l1.76,-0.95l2.73,1.61l3.44,-1.44l1.17,-1.02l-0.22,0.74Z\", \"name\": \"SOUTH CHICAGO\"}, \"23\": {\"path\": \"M430.46,318.24l0.38,-0.4l-0.52,-20.9l0.16,-12.98l5.08,0.74l4.5,0.24l33.27,-0.53l9.92,0.09l0.24,0.23l20.83,-0.3l0.59,-0.29l9.58,-0.11l0.35,-0.27l0.23,8.93l-10.61,0.15l-0.42,0.38l0.64,28.37l0.41,0.39l9.81,-0.11l0.14,6.27l-0.75,0.29l0.06,2.5l0.4,0.39l11.51,-0.15l0.06,3.02l0.23,0.37l10.58,5.07l0.21,10.1l-7.4,0.1l-3.21,-0.33l-15.21,0.3l-0.38,-0.37l-44.92,0.68l-0.43,0.54l-1.85,0.01l-0.41,-0.41l-3.85,-0.05l-27.61,0.49l-0.29,-8.72l0.33,-0.37l-1.26,-11.53l0.31,-1.55l-0.69,-10.28Z\", \"name\": \"HUMBOLDT PARK\"}, \"44\": {\"path\": \"M650.84,711.05l0.14,-4.0l90.44,-1.7l-0.29,1.52l0.59,0.55l-1.56,9.32l0.4,0.48l0.72,-0.01l-0.62,6.3l-0.6,0.42l0.05,6.15l0.82,3.39l4.36,8.9l-10.29,0.18l-0.39,0.35l-1.6,8.98l-1.52,0.21l-0.39,0.33l-2.71,14.19l0.66,0.47l-0.83,4.26l0.54,0.47l-0.96,5.08l-1.57,-0.39l-0.51,0.37l0.01,2.23l-4.26,-1.57l-5.48,-3.14l-0.11,-1.19l-0.6,-0.51l-2.39,-1.3l-1.98,-0.02l-5.53,-3.32l-0.26,-2.59l-3.09,-1.59l-6.14,-2.35l-1.45,-0.38l-0.5,0.4l0.02,0.69l-13.42,0.25l-7.45,-9.61l-4.34,-4.97l-3.27,-3.17l0.34,-1.33l-2.22,-4.6l-0.92,-3.31l-0.21,-10.13l-0.34,-0.39l-3.86,-1.69l-0.53,0.19l-1.0,1.45l-5.24,0.19l0.18,-13.69l-0.83,-0.37Z\", \"name\": \"CHATHAM\"}, \"45\": {\"path\": \"M740.88,724.3l0.54,-0.37l0.72,-7.06l-0.4,-0.47l-0.71,0.01l1.54,-9.2l-0.59,-0.55l0.25,-1.32l3.39,-0.04l0.39,-0.41l-0.23,-9.45l-0.4,-0.39l-0.85,0.01l0.75,-3.95l5.44,-0.06l15.41,13.28l0.39,0.65l2.07,1.48l40.42,34.82l-62.84,1.05l-4.82,-10.11l-0.48,-2.63l0.0,-5.31Z\", \"name\": \"AVALON PARK\"}, \"28\": {\"path\": \"M538.05,356.48l-0.08,-0.9l0.55,-1.68l1.71,-1.84l3.88,-1.48l4.35,-0.61l0.39,-0.53l83.68,-1.13l0.02,0.86l0.4,0.39l7.02,-0.04l0.4,-0.41l-0.02,-0.77l10.06,-0.09l1.24,4.75l0.87,1.21l1.55,1.15l-1.3,10.13l-0.12,4.95l0.36,3.12l1.51,6.56l0.83,1.78l1.64,2.11l0.47,1.31l2.14,12.22l0.83,8.25l0.38,19.04l-1.24,2.99l-0.1,0.97l-7.45,0.14l-0.16,-5.71l-0.41,-0.39l-76.31,1.23l-3.84,0.33l-5.47,0.98l-13.52,1.13l-1.71,0.39l-0.04,-1.97l-0.41,-0.39l-4.72,0.07l0.05,-9.26l-5.31,-8.77l0.31,-0.51l-0.98,-1.85l-0.42,-2.11l-0.79,-33.6l-0.41,-0.39l-1.05,0.02l-0.19,-7.77l1.08,-0.05l0.38,-0.41l-0.05,-3.41Z\", \"name\": \"NEAR WEST SIDE\"}, \"43\": {\"path\": \"M746.13,686.14l1.79,-9.24l2.39,-0.02l0.4,-0.41l0.03,-9.06l1.83,-0.01l0.4,-0.41l-0.24,-10.07l-0.77,-0.62l1.34,-7.73l53.38,-0.71l1.01,-0.02l0.73,-0.46l0.07,0.55l1.44,1.47l3.45,2.12l0.88,0.12l0.76,4.22l2.1,3.71l1.81,1.0l2.32,0.64l0.9,-0.36l0.94,-1.23l0.22,5.14l-0.3,0.46l-1.13,0.28l-0.9,0.83l-0.31,1.2l0.26,1.21l0.92,1.29l1.03,0.45l-0.26,0.9l0.45,0.63l1.25,1.1l0.5,0.09l0.85,-0.51l1.48,1.81l0.15,1.06l3.37,2.63l1.27,0.69l1.46,-0.46l0.8,1.54l0.9,0.98l6.47,3.25l5.31,2.11l3.88,-0.15l3.19,-1.57l2.55,-2.07l0.92,0.17l2.37,2.37l-0.1,1.06l2.12,2.37l1.16,0.15l0.9,0.98l-6.56,4.6l-2.54,2.43l-3.26,1.37l-2.78,-1.6l-2.09,1.13l-7.68,5.59l-72.03,1.08l-20.81,-18.07Z\", \"name\": \"SOUTH SHORE\"}, \"40\": {\"path\": \"M673.93,580.24l0.04,-5.88l47.65,-0.9l0.79,41.65l-20.65,0.45l-0.39,0.41l0.29,13.76l-11.38,0.49l-8.91,-0.03l-0.07,-7.77l-0.41,-0.39l-5.74,0.12l-0.94,-41.62l-0.28,-0.27Z\", \"name\": \"WASHINGTON PARK\"}, \"41\": {\"path\": \"M759.48,614.47l-36.28,0.63l-0.79,-41.67l48.46,-0.71l4.65,0.25l1.4,-0.5l0.94,0.15l-0.13,4.3l0.4,3.01l0.96,2.83l-0.13,0.61l1.34,1.56l2.51,2.05l1.93,0.45l2.1,-0.5l1.08,0.17l1.09,0.78l0.18,0.79l-0.51,1.71l-1.32,0.83l-3.19,0.27l-1.61,0.74l-1.44,1.24l-0.8,1.81l-0.12,2.75l-0.66,1.41l2.78,5.48l3.89,3.51l-2.07,0.22l-0.57,0.6l0.41,0.6l0.63,0.12l-0.12,2.43l0.31,2.06l-9.5,0.21l-5.86,0.51l-1.21,-0.03l-0.85,-0.99l-1.33,-0.41l-1.22,-0.02l-0.39,0.66l-4.97,0.05Z\", \"name\": \"HYDE PARK\"}, \"1\": {\"path\": \"M553.15,9.64l24.52,0.25l0.37,-0.25l-0.09,-0.44l-6.72,-6.57l-1.37,-2.23l24.43,0.22l0.1,0.8l1.15,1.41l0.11,1.05l1.44,1.1l0.33,1.79l-0.42,0.75l0.38,1.85l-0.33,0.97l0.65,1.06l0.86,0.65l-0.27,0.77l0.57,1.23l0.17,2.23l0.62,0.59l0.6,2.74l2.02,4.68l-0.1,1.09l1.35,2.63l-0.02,0.77l1.7,1.88l-0.07,0.45l0.34,0.45l1.97,1.94l0.48,1.04l5.09,5.87l2.51,2.08l-0.64,0.57l-3.2,0.07l-0.38,0.32l0.03,2.49l0.91,2.55l-0.71,0.4l-0.01,0.75l0.94,3.78l0.97,1.35l0.9,2.32l-0.03,1.12l0.79,2.79l1.99,3.2l-4.32,-0.16l-42.85,0.7l-10.91,-28.54l-4.76,-16.23l-1.07,-10.34Z\", \"name\": \"ROGERS PARK\"}, \"35\": {\"path\": \"M671.44,461.17l25.83,-0.47l2.6,0.21l0.66,1.13l0.69,0.3l13.97,-0.45l1.3,4.6l1.62,2.79l0.17,2.66l1.09,2.01l0.51,2.2l1.7,1.6l0.62,1.13l0.13,3.31l0.52,2.35l1.22,2.06l1.54,1.7l-1.03,1.39l0.4,1.73l1.22,1.68l2.25,0.65l0.58,0.49l0.58,0.89l-0.05,2.06l-16.7,0.41l-0.39,0.32l-4.25,18.61l-34.64,0.53l-0.26,-9.04l0.36,-0.94l-0.16,-8.51l-0.41,-0.42l-0.83,0.01l-0.85,-37.0Z\", \"name\": \"DOUGLAS\"}, \"3\": {\"path\": \"M575.29,122.31l49.71,-0.92l5.11,-1.14l0.28,-0.44l3.22,-1.72l1.0,0.57l0.52,1.05l0.25,9.09l0.45,2.3l2.29,4.83l2.29,3.27l2.05,2.25l-0.53,0.48l0.04,0.53l0.99,0.81l0.95,-0.4l4.15,3.24l6.72,2.36l5.09,1.3l4.56,0.47l2.05,0.73l0.48,2.41l1.26,1.39l0.13,1.33l-1.28,1.28l-5.48,2.48l-4.51,4.36l-2.28,0.8l-2.66,-0.08l-3.0,-0.71l-1.23,-0.67l-0.24,-0.94l0.34,-0.59l0.62,-0.2l2.13,1.31l1.53,0.32l2.24,-0.35l1.43,-0.56l2.19,-1.55l1.51,-2.09l0.17,-1.25l-0.79,-1.26l-1.25,-0.49l-1.68,-0.0l-9.55,1.4l-1.51,0.73l-0.87,1.22l-0.18,1.47l0.26,0.79l1.38,1.85l-0.47,4.7l1.46,8.83l-5.94,0.36l-39.25,0.71l-4.68,-9.05l-3.18,-9.48l-0.39,-0.3l-16.96,0.27l-0.91,-37.05Z\", \"name\": \"UPTOWN\"}, \"2\": {\"path\": \"M496.88,67.66l-0.04,-0.57l2.21,-0.05l0.39,-0.4l-0.05,-18.52l0.99,-37.58l40.77,-1.02l11.18,0.12l1.1,10.52l5.16,17.37l10.65,27.77l0.38,0.26l3.56,-0.08l0.34,17.98l-31.68,0.67l-0.39,0.41l0.47,18.63l-37.05,0.22l-1.9,-7.32l0.11,-1.22l-0.44,-0.31l-0.4,-1.14l-0.72,-3.81l-2.95,-11.18l-1.06,-5.4l-0.64,-5.36Z\", \"name\": \"WEST RIDGE\"}, \"5\": {\"path\": \"M527.54,194.92l-0.8,-5.77l2.31,-5.01l2.46,-3.93l0.41,-2.44l0.39,-6.25l-0.23,-0.38l0.07,-1.85l-0.78,-8.46l44.06,-0.64l1.31,74.96l-19.73,0.28l-1.52,-3.02l-4.46,-1.04l-0.92,-0.55l-3.62,-4.76l-1.79,-1.41l-3.6,-0.71l-0.51,-0.47l-1.35,-3.38l-0.97,-1.51l-2.88,-1.97l-1.73,-1.8l-3.55,-6.48l-2.56,-13.41Z\", \"name\": \"NORTH CENTER\"}, \"4\": {\"path\": \"M505.06,104.19l37.28,-0.22l0.4,-0.41l-0.47,-18.64l31.58,-0.67l0.22,9.83l-0.21,0.77l1.55,64.53l-44.24,0.64l-2.2,-5.26l-8.2,-9.93l-3.29,-3.48l-1.0,-1.75l-2.19,-2.67l-1.39,-2.57l-0.73,-1.78l-1.56,-6.01l-2.44,-10.73l-3.1,-11.65Z\", \"name\": \"LINCOLN SQUARE\"}, \"7\": {\"path\": \"M557.28,236.22l96.18,-1.81l7.26,0.33l1.47,-0.54l0.29,0.27l2.17,-0.06l0.8,0.85l1.17,0.0l0.4,0.41l1.09,0.08l0.97,1.11l-0.63,2.95l0.14,3.62l0.96,2.98l-0.27,0.58l1.78,2.4l0.37,1.11l-0.04,0.73l-0.49,0.1l-0.92,1.2l0.41,4.62l0.43,1.57l1.79,1.77l-0.77,0.42l-0.16,0.43l1.99,3.53l-0.61,0.23l-0.12,0.77l0.8,1.62l1.16,1.36l-0.86,0.42l-0.04,0.64l2.21,2.87l-1.06,0.63l-0.03,0.58l2.49,2.9l-0.06,0.6l1.12,1.35l1.12,0.66l3.85,3.52l3.16,1.53l2.46,0.2l1.84,-0.65l-0.16,0.67l-1.2,0.6l-3.69,0.87l-3.29,2.83l-3.8,0.47l-0.22,-0.5l-0.69,-0.07l-0.93,0.93l-63.96,1.21l-2.11,-7.57l-1.82,-2.51l-1.34,-1.2l-4.19,-2.71l-1.09,0.16l-3.15,1.59l-1.27,-0.34l-1.76,-5.45l-2.43,-2.95l-1.59,-2.83l-1.92,-2.25l-1.75,-3.09l-2.73,-0.99l-3.91,-0.05l-2.13,-0.96l-4.45,-4.04l-0.37,-0.95l-0.2,-3.42l-0.9,-1.5l-3.59,-2.56l-2.77,-1.13l-4.05,-1.12l-2.24,-5.44l-3.01,-2.14l-1.12,-1.46Z\", \"name\": \"LINCOLN PARK\"}, \"6\": {\"path\": \"M576.22,160.16l16.64,-0.27l3.15,9.3l4.82,9.33l0.36,0.21l39.51,-0.72l6.11,-0.37l5.09,13.69l2.37,5.21l2.84,4.4l2.73,3.54l3.96,4.32l0.18,0.71l-0.47,0.18l-0.48,-0.24l-0.55,-1.62l-0.96,-0.78l-1.02,-0.07l-1.46,0.75l-0.84,-0.28l-1.86,-4.43l0.2,-0.65l-1.33,-2.09l-3.34,-1.36l-2.55,-0.31l-0.0,-0.7l-0.52,-0.14l-1.27,-1.81l-2.01,-1.4l-0.95,0.06l-0.24,0.83l1.15,1.58l3.37,3.4l-0.25,1.19l-0.68,0.59l0.03,1.06l1.92,3.28l1.1,0.67l0.77,1.03l0.41,1.02l0.38,3.24l2.71,3.87l1.22,0.37l1.54,-0.04l0.56,0.36l0.79,-0.36l1.2,-1.29l0.64,-3.28l0.51,-0.55l0.31,0.14l0.22,2.98l0.67,2.73l1.26,3.4l1.37,1.87l-0.17,0.43l0.68,3.41l1.48,2.82l2.12,2.88l-0.13,0.79l-0.58,0.44l-0.95,0.03l-0.5,1.01l-1.73,-0.02l-0.88,-0.89l-2.1,0.06l-0.42,-0.27l-1.69,0.54l-7.18,-0.33l-75.92,1.52l-1.31,-74.97Z\", \"name\": \"LAKE VIEW\"}, \"9\": {\"path\": \"M257.24,67.61l0.32,-36.87l2.91,-0.07l0.39,-0.4l-0.0,-1.42l-0.79,-0.39l0.06,-9.05l-0.41,-0.4l-2.1,0.06l0.04,-7.26l30.92,-0.82l-0.58,60.43l-6.8,-0.06l-0.05,-4.05l-0.4,-0.38l-23.51,0.69Z\", \"name\": \"EDISON PARK\"}, \"8\": {\"path\": \"M608.25,295.54l0.4,-1.32l4.18,-1.67l0.36,-0.65l63.9,-1.21l1.23,-0.69l0.48,0.37l3.32,-0.45l-0.07,1.44l-0.91,1.68l0.15,3.83l0.51,3.14l2.61,8.73l-0.18,0.48l2.46,2.25l1.39,2.07l0.32,1.02l4.3,1.29l1.24,1.05l9.33,16.63l2.66,4.03l0.5,0.14l2.24,-0.7l1.13,0.22l0.39,-0.2l3.92,-7.36l16.29,-0.34l0.1,7.26l-15.89,0.3l-0.39,0.41l0.06,2.4l0.41,0.39l19.52,-0.56l0.41,0.51l4.0,-0.08l0.03,1.34l-4.02,0.08l-0.42,0.91l-0.28,-0.22l-18.71,0.36l-0.39,0.41l0.1,4.0l-3.07,0.01l-0.35,-3.05l-0.41,-0.37l-4.59,0.12l-0.41,0.37l-1.03,0.09l-0.4,-0.38l-4.43,0.31l-2.57,-0.24l-0.83,0.26l-3.97,-0.09l-0.4,0.4l-0.0,0.75l0.41,0.4l15.38,-0.14l0.05,0.99l-2.84,2.93l-8.56,0.25l-10.15,-1.36l-5.18,-0.18l-2.16,1.1l-3.42,2.53l-3.5,0.23l-9.72,-0.3l-4.04,0.22l-0.94,0.36l-3.35,2.63l-1.38,-1.01l-0.7,-0.99l-1.45,-5.35l-2.7,-3.73l-1.83,-3.46l-2.09,-2.39l-2.37,-1.73l-1.05,-1.44l-0.32,-6.42l-0.43,-1.57l-1.02,-1.27l-8.68,-1.21l-1.21,-0.52l-3.14,-2.85l-2.28,-1.59l-5.71,-1.37l-1.82,-0.71l-0.99,-0.83l-1.21,-3.64l-2.25,-2.62l-1.39,-2.34l-0.26,-1.2l1.15,-8.57l0.56,-1.81l-0.39,-0.52l-3.24,0.04Z\", \"name\": \"NEAR NORTH SIDE\"}, \"18\": {\"path\": \"M289.32,233.73l-0.36,-12.47l33.77,-0.62l1.1,49.58l0.15,1.29l0.71,1.62l-10.59,-4.36l-0.24,-0.37l-17.63,-7.69l-6.18,-2.18l-0.74,-24.82Z\", \"name\": \"MONTCLARE\"}, \"39\": {\"path\": \"M752.45,535.38l0.41,1.48l1.22,0.99l1.13,2.3l1.06,1.17l-0.27,0.49l1.11,2.28l1.96,1.81l0.88,1.47l1.09,0.67l1.84,0.38l0.7,1.14l0.21,3.28l3.87,7.58l1.42,1.59l4.91,3.91l2.14,2.1l2.44,0.94l0.12,0.57l-0.89,1.57l0.19,0.72l-1.28,-0.14l-1.2,0.48l-4.66,-0.24l-48.47,0.71l-0.63,-36.95l20.85,-0.29l1.1,0.28l2.45,-0.32l6.3,0.03Z\", \"name\": \"KENWOOD\"}, \"77\": {\"path\": \"M573.99,65.46l38.77,-0.61l4.77,0.16l0.48,4.61l-0.57,0.17l-0.24,0.62l0.39,1.52l-0.25,2.12l0.49,0.4l0.24,0.94l-0.36,0.31l-0.21,1.24l0.9,1.32l-0.64,5.13l0.37,0.45l0.09,1.25l-0.25,0.48l0.24,0.5l-0.25,3.88l1.78,2.48l4.23,3.73l1.38,1.12l2.12,0.71l-1.23,3.3l-0.53,3.05l0.12,5.78l0.85,2.27l-0.43,0.73l4.41,4.68l1.55,0.1l-2.68,1.69l-4.61,0.99l-49.67,0.92l-0.63,-37.68l-0.31,-0.3l-0.34,-18.08Z\", \"name\": \"EDGEWATER\"}, \"76\": {\"path\": \"M0.81,77.14l2.04,-0.09l0.39,-0.34l0.89,-4.25l1.65,-4.75l2.03,-4.01l2.45,-3.72l3.76,-4.17l6.61,-5.78l0.08,4.1l0.42,0.39l10.18,-0.13l0.03,2.75l0.41,0.4l10.67,-0.22l0.56,-0.58l-0.15,-9.35l14.18,-0.31l0.39,-0.4l0.0,-9.05l0.19,-0.01l0.01,5.98l0.6,0.39l0.01,2.65l0.41,0.4l3.67,-0.02l7.92,-0.4l0.38,-0.4l-0.01,-9.16l3.72,-0.16l6.94,2.22l0.28,0.54l8.69,2.91l4.88,2.49l0.42,0.52l0.8,-0.35l0.66,0.3l1.77,-0.07l-0.11,7.36l0.42,0.41l1.73,-0.08l0.38,-0.42l-0.05,-1.15l0.74,-0.43l-0.06,-1.15l2.47,-0.1l3.61,1.74l-0.66,0.81l-0.01,1.05l-18.64,1.02l-6.57,-4.27l0.0,-0.85l-0.42,-0.4l-3.58,0.14l-0.38,0.4l-0.0,1.07l0.33,0.4l1.97,0.35l7.66,5.0l4.36,-0.1l-0.03,2.21l0.33,0.4l17.43,2.97l9.29,2.33l0.29,0.5l0.62,0.18l-0.02,7.74l0.42,0.4l8.75,-0.33l7.36,24.54l0.4,0.28l1.86,-0.07l0.0,6.88l4.46,15.81l-4.14,0.12l-0.39,0.4l-0.02,7.07l0.41,0.4l6.0,-0.18l0.31,0.23l0.87,-0.03l0.13,-0.24l8.05,-0.22l0.4,0.66l1.68,-0.05l0.33,-0.35l0.41,0.57l11.87,-0.35l0.38,-0.43l0.67,-3.67l0.91,-1.62l2.74,-2.55l3.27,-4.34l4.69,-4.64l0.94,-1.77l0.24,-3.03l-1.85,-5.58l-0.01,-0.78l0.71,-3.78l1.58,-4.17l-0.28,-2.81l3.56,0.85l9.35,0.82l27.68,4.9l-0.1,29.44l-10.27,0.21l-0.39,0.4l-0.0,0.79l0.01,1.57l0.42,0.38l7.41,-0.14l-0.04,6.07l0.41,0.4l2.41,-0.05l-0.0,2.16l-9.89,0.21l0.03,-4.35l-0.41,-0.4l-10.66,0.23l-0.46,0.39l-0.08,14.23l0.41,0.41l20.98,-0.48l-0.02,32.17l0.56,24.13l0.41,0.39l2.43,-0.07l0.7,17.93l-31.5,0.75l-2.87,-2.64l-1.67,-2.03l-2.71,-8.8l0.12,-1.99l-0.54,-1.08l-1.21,-5.38l-0.59,-1.93l-1.9,-3.75l0.09,-3.57l1.79,-4.8l15.84,-0.49l0.39,-0.42l0.02,-10.49l-0.41,-0.4l-24.66,0.62l-0.75,-1.2l-0.52,-2.3l0.1,-1.4l2.44,-4.22l3.84,-8.47l0.69,-5.35l1.38,-4.94l0.2,-2.25l-0.54,-3.85l1.51,-4.08l0.42,-2.41l-0.32,-1.27l-0.76,-1.19l-1.9,-1.39l-1.61,-0.17l-1.27,0.34l-1.94,0.83l-2.96,1.84l-1.62,-0.42l-1.39,-0.82l-1.92,-1.71l-1.53,-1.98l-40.83,1.21l-0.39,0.4l-0.04,40.3l-1.42,0.18l-4.9,-0.51l-13.72,-2.04l-5.77,0.11l-0.39,0.4l0.05,18.45l-23.14,0.45l-18.39,-4.54l-0.5,0.39l0.03,1.89l-4.5,-1.32l-0.23,-7.66l-1.03,-4.87l-2.98,-1.5l-7.17,-1.53l-0.34,-0.42l-4.69,-0.6l-0.46,0.39l0.0,11.19l-8.25,-2.34l-0.01,-10.49l-0.32,-0.39l-12.07,-2.34l-0.36,-12.29l-0.4,-0.39l-5.04,-0.0l0.01,-4.86l-0.66,-0.31l-4.42,3.68l-2.77,2.83l-2.88,-0.01l0.01,-36.87l-0.46,-38.2ZM10.86,39.07l2.91,-0.05l0.17,6.72l-0.19,0.97l-1.26,-0.2l-0.46,0.4l0.15,7.84l0.3,0.29l-1.24,1.3l-0.38,-17.28ZM0.59,64.29l-0.18,-6.09l9.52,-0.23l-3.63,5.2l-5.72,1.12Z\", \"name\": \"OHARE\"}, \"75\": {\"path\": \"M528.75,860.07l7.87,-0.28l0.39,-0.41l-0.02,-0.74l1.97,-0.21l0.39,-0.41l-0.48,-16.95l24.21,-0.19l80.2,-1.51l0.97,36.92l-41.68,0.67l-0.39,0.42l0.52,18.43l-11.33,0.27l-0.37,0.28l-1.07,3.46l-1.58,-0.39l0.86,-2.78l-0.39,-0.52l-38.91,0.54l0.88,-2.69l0.32,-2.52l-0.34,-13.21l-0.41,-0.39l-21.03,0.36l-0.61,-18.15Z\", \"name\": \"MORGAN PARK\"}, \"38\": {\"path\": \"M672.76,517.89l48.01,-0.73l0.6,1.09l-0.74,0.57l0.97,53.85l-47.64,0.9l-1.19,-55.68Z\", \"name\": \"GRAND BOULEVARD\"}, \"73\": {\"path\": \"M589.18,760.18l5.34,-0.07l0.39,-0.41l-0.11,-4.39l10.28,-0.5l29.57,-0.63l-2.92,9.4l0.32,0.51l1.38,0.01l2.18,-2.15l2.51,-0.8l0.67,-0.0l0.15,2.64l0.59,0.25l22.95,-0.34l1.28,55.71l-20.58,0.32l-0.4,0.41l0.48,18.44l-33.95,0.5l5.73,-18.49l-0.39,-0.52l-0.47,0.01l-7.71,-18.46l-2.36,-4.39l-4.34,-11.36l-0.28,-2.64l-0.63,-0.52l-8.24,-18.43l0.09,-1.2l-1.52,-2.9Z\", \"name\": \"WASHINGTON HEIGHTS\"}, \"72\": {\"path\": \"M527.57,819.92l10.28,-0.13l0.39,-0.42l-0.46,-16.07l20.98,-0.24l0.41,-0.41l-1.44,-56.25l19.79,-0.33l10.74,14.12l1.66,3.17l-0.09,1.19l8.38,18.73l0.5,0.24l0.27,2.59l4.37,11.43l2.37,4.4l7.81,18.7l0.57,0.24l-5.64,18.21l-45.4,0.99l-34.85,0.33l-0.65,-20.5Z\", \"name\": \"BEVERLY\"}, \"71\": {\"path\": \"M566.33,689.05l18.36,-0.33l0.39,0.39l9.14,-0.11l24.81,-0.56l0.44,-0.29l20.31,-0.27l0.1,4.84l0.35,0.39l8.92,-0.14l0.3,13.71l0.7,0.38l-0.11,4.39l0.41,0.41l0.44,-0.01l-0.21,13.65l0.41,0.42l5.88,-0.22l1.29,-1.55l3.42,1.54l0.29,10.13l-0.22,0.91l0.42,2.36l0.15,5.38l-0.5,0.12l-0.18,0.38l0.85,17.93l-22.82,0.26l-0.06,-2.41l-0.4,-0.39l-1.09,0.0l-2.89,0.9l-2.28,2.16l-0.3,-0.04l2.96,-9.43l-0.37,-0.56l-30.17,0.63l-10.68,0.51l-0.39,0.41l0.11,4.38l-5.44,0.08l-10.19,-13.42l0.31,-0.32l-0.01,-0.63l-0.6,-0.4l-4.95,-7.08l-3.37,-3.64l-1.44,-3.59l-0.71,-2.72l-0.41,-3.4l-0.97,-35.14Z\", \"name\": \"AUBURN GRESHAM\"}, \"70\": {\"path\": \"M430.12,701.56l0.01,-1.19l4.75,0.45l5.18,-0.11l0.34,0.31l8.88,-0.7l0.73,0.38l21.83,-0.54l0.39,-0.41l-0.53,-20.4l7.83,4.51l4.67,2.24l0.25,-0.14l5.4,3.09l1.91,0.7l2.81,0.51l19.3,-0.01l51.66,-1.17l0.67,26.05l0.27,0.46l0.01,7.72l0.49,4.6l0.9,3.25l1.3,3.14l3.49,3.81l5.04,7.17l-146.58,2.92l0.26,-5.66l-1.22,-40.97Z\", \"name\": \"ASHBURN\"}, \"15\": {\"path\": \"M331.68,155.29l0.49,-0.77l0.04,-12.27l40.85,-0.67l0.05,1.96l0.41,0.39l5.81,-0.04l7.4,0.53l1.43,-0.73l27.69,-0.39l0.19,8.74l0.72,2.39l-0.85,-0.13l-0.44,0.29l0.23,0.48l1.62,0.6l0.18,0.54l-0.35,0.95l1.42,1.85l3.48,2.38l-3.11,0.04l-0.36,0.56l8.12,18.86l0.48,0.24l0.52,27.6l-1.13,0.01l-0.4,0.41l0.14,4.77l0.4,0.39l1.21,-0.01l0.09,3.9l-72.99,1.14l-1.2,-37.53l-0.42,-0.39l-20.77,0.36l-0.93,-26.43Z\", \"name\": \"PORTAGE PARK\"}, \"32\": {\"path\": \"M661.08,403.9l-0.93,-8.19l-1.49,-8.75l-0.94,-3.25l-1.7,-2.23l-0.75,-1.63l-1.72,-8.49l0.2,-8.19l1.04,-7.43l0.7,-1.06l3.35,-2.23l3.92,-0.21l9.74,0.3l3.66,-0.24l5.49,-3.61l5.03,0.18l10.19,1.36l8.76,-0.25l3.49,-3.59l-0.3,-1.75l-2.0,-0.32l3.94,-0.1l0.14,2.0l0.29,1.12l0.39,0.3l7.31,-0.16l0.04,1.42l0.4,0.39l4.97,-0.1l0.01,0.55l-5.38,0.02l-4.41,0.56l-0.35,0.4l-0.2,2.25l-0.08,7.44l-5.58,0.05l-0.4,0.4l-0.31,1.64l-1.18,1.14l-1.67,0.71l-3.36,0.41l-0.82,0.5l-0.63,0.87l-0.18,1.6l0.4,0.39l1.22,-0.01l0.04,1.41l-1.19,0.02l-0.43,0.41l0.64,12.68l-0.06,17.56l1.53,1.23l-6.22,0.73l-1.05,1.23l-33.58,0.52ZM704.37,344.47l-1.81,0.03l-0.3,0.0l2.04,-0.1l0.07,0.07ZM698.93,344.56l-0.55,0.01l-1.07,0.02l0.12,-0.13l1.5,0.1Z\", \"name\": \"LOOP\"}, \"58\": {\"path\": \"M490.09,568.3l-1.27,-56.65l20.92,-7.89l0.26,-0.39l-0.05,-1.43l8.87,-2.85l7.94,-3.21l0.77,0.42l18.75,-7.04l0.2,20.61l0.41,0.38l0.69,-0.03l1.46,3.14l-0.92,0.68l-0.06,0.58l1.08,1.31l0.11,3.36l0.4,0.48l3.58,-0.12l0.77,37.01l-0.76,-0.02l-0.43,0.41l0.12,9.63l-20.25,0.35l-0.41,-0.59l-21.13,0.42l-0.39,0.7l-14.76,0.17l-5.89,0.57Z\", \"name\": \"BRIGHTON PARK\"}, \"11\": {\"path\": \"M330.08,104.67l20.58,-0.02l0.41,-0.39l0.47,-28.4l-0.2,-0.4l-10.72,-5.87l0.03,-2.57l5.37,-0.04l0.31,1.06l1.19,0.75l1.52,-0.18l1.1,-0.9l2.15,0.38l1.23,-0.68l1.76,1.51l4.44,-1.03l2.54,0.34l1.53,0.6l0.8,0.57l0.45,0.94l0.1,1.28l-0.4,1.27l-1.73,2.01l-3.0,1.36l-0.37,1.47l0.58,2.02l1.3,1.73l4.26,1.0l-0.02,0.36l-1.26,0.61l-0.61,1.87l0.7,1.79l0.77,0.81l1.79,0.81l5.34,0.7l0.54,-0.18l0.54,-0.79l-0.05,-1.33l1.38,-0.92l2.38,-0.28l3.42,1.99l0.7,-0.28l0.46,-0.66l1.63,-0.32l0.82,-1.09l0.58,0.26l0.97,3.13l-0.24,0.52l-1.18,0.76l-0.06,1.06l1.29,0.98l2.42,-0.55l3.21,7.12l2.03,5.46l0.44,0.25l5.95,13.72l-0.3,0.15l-0.01,0.54l0.3,12.33l0.41,0.39l4.77,-0.07l0.36,11.06l-17.14,0.23l-1.43,0.72l-7.29,-0.52l-5.46,0.03l-0.05,-1.96l-0.41,-0.39l-43.97,0.72l0.6,-36.82Z\", \"name\": \"JEFFERSON PARK\"}, \"10\": {\"path\": \"M224.31,123.55l0.1,-27.89l27.34,4.69l0.88,0.13l0.46,-0.35l2.52,-22.34l1.55,-9.38l23.23,-0.7l0.02,4.02l0.4,0.41l7.61,0.07l0.4,-0.4l0.12,-13.75l2.8,-0.12l0.35,-0.44l0.02,-1.15l8.33,-0.11l-0.01,1.33l0.4,0.4l2.75,0.01l0.33,1.96l0.4,0.33l5.06,-0.05l0.41,-0.41l0.02,-2.02l12.29,-0.1l1.0,1.35l0.51,0.11l0.74,-0.42l4.53,2.38l1.2,0.04l1.53,-0.53l2.76,0.33l0.98,-0.21l1.55,-0.97l2.42,0.43l0.75,-0.25l0.44,-0.8l0.42,-2.29l1.61,-3.77l0.62,-0.53l0.97,0.19l0.62,0.71l0.68,2.29l0.63,6.13l-0.08,4.29l-5.69,0.03l-0.41,0.39l-0.04,3.22l0.21,0.35l10.69,5.85l-0.44,27.82l-20.58,0.03l-0.4,0.39l-0.59,35.99l-31.02,0.3l-0.39,0.39l-0.01,0.84l-9.21,0.06l0.2,-15.35l-0.01,-0.53l-0.4,-0.39l-21.32,0.65l-0.39,0.39l-0.07,9.05l-3.6,0.11l0.04,-6.37l-0.4,-0.4l-0.61,-0.0l0.07,-2.15l-0.41,-0.45l-15.88,0.49l-0.39,0.4l-0.02,1.92l-9.99,0.21l0.01,-1.91l-0.41,-0.4l-3.26,0.07l0.01,-2.18l-0.47,-0.4l0.01,-0.77l-0.41,-0.4l-6.08,0.12ZM227.9,109.21l-0.69,0.01l-0.39,0.4l-0.01,0.88l0.41,0.4l13.09,-0.26l0.36,0.66l0.12,4.15l-1.94,0.03l-1.12,1.36l0.03,1.87l0.94,0.58l-8.3,0.17l-0.39,0.4l-0.01,2.52l0.41,0.4l19.89,-0.41l0.4,-0.36l1.96,-18.23l-0.41,-0.44l-3.85,0.07l-0.39,0.41l0.05,2.47l-5.39,0.1l-0.06,-4.36l-0.61,-0.58l-10.69,0.34l-1.23,0.72l-0.02,1.96l-2.79,-0.03l-0.4,0.4l-0.04,3.96l0.4,0.4l0.68,-0.0Z\", \"name\": \"NORWOOD PARK\"}, \"13\": {\"path\": \"M415.5,102.67l1.34,0.73l0.61,1.65l0.39,0.32l18.8,-0.21l0.38,-0.41l-0.21,-9.13l8.97,-5.03l2.84,-4.58l2.28,-0.22l11.65,-18.4l33.48,-0.29l0.36,3.9l1.4,7.61l3.67,14.98l0.66,1.63l2.56,11.12l2.69,9.7l2.68,11.56l-0.81,-0.5l-5.26,-1.55l-1.92,-0.39l-1.57,0.07l-3.52,1.11l-1.54,0.82l-2.76,3.9l-3.57,1.19l-3.47,0.12l-8.64,-4.89l-6.36,-1.77l-1.85,-1.36l-2.0,-2.04l-3.52,-0.84l-1.62,0.4l-1.42,1.09l-1.83,0.03l-0.39,0.41l0.21,9.07l-7.21,0.09l-0.13,-4.29l-0.5,-0.41l-2.15,0.02l-0.11,-4.36l-0.41,-0.39l-31.68,0.36l-0.55,-20.82Z\", \"name\": \"NORTH PARK\"}, \"12\": {\"path\": \"M325.05,58.33l17.24,-9.81l0.04,-0.66l-2.31,-2.33l-11.71,-16.45l19.7,0.03l0.4,-0.38l0.34,-8.58l3.81,0.13l-0.17,8.45l0.4,0.4l7.74,0.06l6.38,14.73l0.51,0.21l0.55,-0.27l1.68,3.72l7.29,3.98l0.54,-0.12l0.7,-1.06l-0.13,-0.58l-4.29,-2.4l0.16,-8.76l11.74,0.12l-0.41,11.87l-0.2,2.27l-0.67,2.47l0.19,0.46l20.27,11.39l56.74,0.19l-11.25,17.78l-2.29,0.23l-2.75,4.54l-9.08,5.08l-0.21,0.36l0.21,8.97l-18.05,0.2l-0.28,-0.96l-0.8,-1.08l-1.38,-0.65l-0.6,-0.03l-0.42,0.41l0.86,35.68l0.75,3.69l-0.25,0.86l-10.02,0.15l-0.41,-11.45l-0.56,-0.4l-4.58,0.07l-0.29,-11.69l0.44,-0.01l0.12,-0.47l-6.38,-14.72l-0.42,-0.24l-1.93,-5.2l-3.42,-7.6l-0.53,-0.2l-0.95,0.58l-1.34,0.17l-0.67,-0.51l0.06,-0.39l1.19,-0.74l0.3,-0.83l-1.19,-3.8l-1.49,-0.4l-0.94,1.18l-1.58,0.28l-0.77,0.83l-1.22,-1.05l-2.12,-0.96l-2.67,0.32l-1.82,1.23l-0.03,1.49l-0.41,0.48l-5.11,-0.69l-1.42,-0.63l-0.61,-0.61l-0.59,-1.32l0.48,-1.49l1.31,-0.66l0.01,-1.13l-0.84,-0.58l-3.62,-0.65l-1.08,-1.45l-0.51,-2.08l0.26,-0.59l2.82,-1.2l1.62,-1.71l0.85,-2.53l-0.52,-2.06l-1.6,-1.27l-3.34,-0.86l-2.01,0.13l-3.09,0.89l-1.32,-1.33l-0.71,-0.19l-1.06,0.67l-2.21,-0.38l-1.41,0.99l-1.4,0.02l-0.53,-1.38l0.06,-4.67l-0.64,-6.21l-0.68,-2.38l-1.12,-1.24l-1.56,-0.2l-1.14,1.08l-1.54,3.72l-0.71,2.8l-2.32,-0.45l-0.92,0.2l-1.41,0.94l-3.26,-0.26l-2.23,0.56l-4.24,-2.07Z\", \"name\": \"FOREST GLEN\"}, \"59\": {\"path\": \"M547.24,509.44l-0.17,-20.48l14.1,-5.3l2.84,-0.66l18.78,-0.56l0.41,0.54l1.12,-0.02l3.97,-0.47l3.85,-1.43l4.49,-2.9l1.6,2.86l0.79,2.56l1.31,1.82l2.61,3.33l2.05,1.32l6.23,8.1l-0.32,7.54l0.93,10.89l1.56,1.47l-63.36,0.89l-0.15,-3.22l-0.97,-1.31l0.86,-0.62l0.12,-0.53l-1.57,-3.48l-0.44,-0.4l-0.65,0.05Z\", \"name\": \"MCKINLEY PARK\"}, \"22\": {\"path\": \"M452.04,237.51l93.69,-1.15l0.39,-0.43l-0.21,-9.32l3.65,4.8l2.17,1.02l3.3,0.65l1.27,3.2l1.5,1.94l2.89,1.99l2.4,5.64l7.01,2.37l3.33,2.35l0.74,1.19l0.18,3.33l0.5,1.29l4.61,4.21l2.46,1.12l3.93,0.06l2.37,0.82l1.6,2.92l1.91,2.23l1.61,2.85l2.54,3.14l1.64,5.22l-4.67,2.42l-2.19,0.57l-22.19,0.36l-0.01,-1.02l-0.41,-0.4l-10.58,0.25l-0.39,0.41l0.04,1.85l-1.18,-0.81l-29.9,0.39l-0.25,-0.25l-1.21,0.0l-19.92,0.6l-0.43,0.28l-20.54,0.3l-0.24,-0.23l-4.11,-0.08l-7.92,0.08l-1.62,-4.28l-0.38,-0.26l-1.59,0.03l-0.24,-3.93l0.53,-0.59l-2.08,-4.68l-0.37,-0.24l-3.37,0.05l-0.17,-7.11l-0.62,-1.57l0.79,-0.02l0.35,-0.55l-0.61,-1.61l-0.07,-3.01l-0.41,-0.39l-1.75,0.03l-7.79,-18.05Z\", \"name\": \"LOGAN SQUARE\"}, \"14\": {\"path\": \"M416.82,140.37l-0.47,-2.46l-0.26,-13.62l31.26,-0.35l0.11,4.36l0.4,0.39l2.28,-0.03l0.1,4.33l0.41,0.39l8.0,-0.1l0.39,-0.41l-0.21,-9.07l1.6,-0.02l1.4,-1.07l1.01,-0.37l1.06,-0.01l2.58,0.72l1.81,1.91l2.0,1.47l2.02,0.78l2.63,0.36l1.75,0.65l3.53,1.85l4.05,2.63l1.28,0.47l3.7,-0.13l3.32,-1.05l1.24,-0.86l1.88,-3.13l0.57,-0.42l3.8,-1.42l2.52,-0.12l6.43,1.83l1.43,0.93l1.06,4.26l1.95,4.04l2.4,2.99l1.03,1.79l3.28,3.47l7.58,9.06l1.21,1.88l1.35,3.74l-74.88,0.89l-17.4,-14.37l-0.1,-3.95l-0.41,-0.39l-20.58,0.26l0.22,-1.13l-0.31,-0.97Z\", \"name\": \"ALBANY PARK\"}, \"16\": {\"path\": \"M416.66,143.28l20.45,-0.26l0.25,4.04l17.91,14.67l75.29,-0.9l0.93,10.83l-0.6,7.78l-2.6,4.4l-2.35,5.2l0.03,1.51l1.32,7.33l-67.08,0.84l-0.39,0.41l0.46,18.49l-31.49,0.52l-0.09,-4.31l-0.41,-0.39l-1.2,0.02l-0.12,-3.97l1.15,-0.02l0.38,-0.41l-0.54,-28.39l-0.64,-0.39l-7.77,-18.06l3.82,-0.05l0.38,-0.29l-0.17,-0.45l-4.4,-2.95l-1.2,-1.59l0.28,-0.99l-1.37,-3.39l-0.23,-9.23Z\", \"name\": \"IRVING PARK\"}, \"19\": {\"path\": \"M323.53,220.63l104.34,-1.68l1.79,64.01l-29.28,-4.01l-1.96,0.11l-7.04,-1.71l-9.9,-1.4l-5.63,-0.25l-40.82,0.7l-4.13,-0.68l-4.33,-1.81l-1.58,-1.84l-0.36,-1.87l-1.1,-49.57Z\", \"name\": \"BELMONT CRAGIN\"}, \"54\": {\"path\": \"M692.45,965.01l2.15,-5.47l1.67,-6.31l1.67,-9.2l-0.39,-0.48l-0.75,-0.0l12.84,-67.39l16.72,-0.2l3.32,-1.36l2.22,-0.41l-0.53,2.49l-0.09,2.34l0.47,19.3l0.61,3.67l1.19,3.21l1.74,2.98l17.3,24.07l1.06,0.71l23.95,33.42l1.96,3.51l1.63,4.52l1.03,6.43l-83.2,0.29l-0.03,-14.34l-0.36,-0.4l-6.17,-1.41Z\", \"name\": \"RIVERDALE\"}, \"31\": {\"path\": \"M545.72,425.39l4.04,-0.06l0.04,2.07l0.49,0.38l2.11,-0.49l13.51,-1.13l5.47,-0.98l3.79,-0.32l75.89,-1.22l0.16,5.71l0.41,0.39l7.64,-0.15l-0.54,1.41l-1.4,1.62l-2.79,2.44l-3.37,1.97l-0.82,0.79l-6.07,9.98l-0.93,1.05l-1.37,0.8l-1.4,0.46l-6.06,0.76l-6.12,2.11l-2.99,0.24l-13.98,2.94l-2.32,-0.25l-4.61,3.88l-0.35,-0.11l-6.14,3.73l-0.73,0.95l-0.93,3.39l-1.45,3.15l0.92,2.61l0.01,2.83l0.44,1.1l-4.49,2.91l-2.36,1.0l-3.46,0.74l-2.37,0.1l-0.41,-0.54l-19.76,0.64l-2.53,0.62l-13.87,5.21l-0.22,-25.4l-0.5,-9.28l-0.6,-28.05Z\", \"name\": \"LOWER WEST SIDE\"}, \"56\": {\"path\": \"M300.04,584.36l9.27,-3.52l96.12,-2.04l0.37,-0.41l-0.73,-33.74l17.96,-6.78l0.26,-0.38l-0.23,-15.34l12.43,-0.21l2.2,93.4l-136.79,2.83l-0.68,-19.06l-0.18,-14.75Z\", \"name\": \"GARFIELD RIDGE\"}, \"51\": {\"path\": \"M762.47,940.26l-2.61,-0.03l-5.77,-7.97l-0.92,-0.53l-17.24,-23.99l-1.56,-2.62l-1.26,-3.31l-0.56,-3.12l-0.49,-21.1l0.61,-3.25l2.04,-4.95l9.79,-21.62l3.88,-6.85l4.97,-6.66l8.41,-9.15l1.7,-4.83l0.27,-1.91l3.31,-0.27l1.46,-3.28l0.57,-2.13l0.44,-3.8l-0.72,-24.43l-3.74,-4.31l-1.23,-1.94l40.01,-0.79l5.99,-0.79l0.08,2.91l0.41,0.39l48.2,-0.71l0.93,4.94l-0.6,2.81l-0.39,4.64l0.27,2.06l1.34,1.94l0.5,1.95l-0.06,2.56l-0.7,2.86l-0.3,6.61l-2.01,3.83l-3.48,3.24l-1.4,2.39l-0.04,4.45l0.53,2.56l0.01,1.8l-0.08,1.37l-0.5,1.48l0.37,0.56l3.84,0.01l-2.2,3.79l-0.54,2.55l0.63,69.85l-0.38,2.45l-2.41,7.24l-0.52,3.47l3.65,22.38l-11.6,-7.95l-3.41,-2.67l-2.49,-3.58l-7.35,-13.19l-0.65,-0.16l-0.62,0.65l-1.09,0.4l-1.63,1.6l-1.46,-0.1l-1.06,1.21l-0.06,24.13l-47.83,-0.1l-3.72,-0.69l-5.86,-2.02l-3.67,-0.3Z\", \"name\": \"SOUTH DEERING\"}, \"36\": {\"path\": \"M720.94,516.39l-11.9,0.14l4.14,-18.12l16.51,-0.42l0.64,1.5l1.66,1.9l3.61,5.32l4.77,4.08l0.53,1.64l-0.39,3.75l0.86,4.17l0.97,1.78l1.69,2.14l0.84,2.03l1.25,1.47l1.08,0.33l2.5,2.32l1.81,1.15l0.84,1.55l0.05,1.45l-30.67,0.3l-0.32,-15.79l0.66,-0.26l0.2,-0.56l-0.94,-1.71l-0.4,-0.16Z\", \"name\": \"OAKLAND\"}, \"53\": {\"path\": \"M603.01,877.76l105.81,-1.58l-12.84,67.37l-2.11,0.1l0.45,-2.23l-0.27,-1.88l-0.91,-1.19l-4.52,-2.48l-0.02,-0.5l-0.42,-0.39l-2.7,0.04l-2.6,0.4l-4.04,1.54l-3.33,2.88l-2.95,3.23l-3.51,2.72l-0.53,1.05l-0.76,-0.38l-1.77,0.27l-1.61,0.9l-5.45,0.47l-6.46,-0.95l-5.03,-0.16l-0.42,-0.83l-0.79,0.01l-0.38,0.84l-9.28,-0.03l-1.98,0.3l-0.47,-13.43l12.14,-0.22l0.39,-0.41l-0.53,-18.89l-0.41,-0.39l-41.76,0.53l-0.94,-36.73Z\", \"name\": \"WEST PULLMAN\"}, \"52\": {\"path\": \"M853.52,830.48l0.32,-1.17l0.07,-3.29l-0.53,-2.57l0.04,-4.33l1.18,-1.91l3.54,-3.31l2.16,-4.19l0.3,-6.64l0.69,-2.85l0.07,-2.71l-0.59,-2.3l-1.26,-1.75l-0.26,-1.96l0.39,-4.43l0.61,-2.95l-0.58,-2.22l-0.46,-3.79l1.98,-8.8l0.71,-1.35l3.11,-2.88l2.13,-1.3l21.14,-10.51l-0.22,1.08l1.01,0.93l8.84,1.64l0.5,0.62l0.48,23.62l-0.96,0.71l-1.04,1.8l-0.47,4.03l0.6,2.39l1.03,1.45l0.77,0.25l0.08,0.77l-2.57,0.18l-1.06,0.45l-0.74,-0.18l-0.47,0.77l-1.06,0.31l-2.04,1.64l-1.04,1.35l-0.18,1.0l0.34,1.6l1.87,3.8l2.52,2.66l-3.95,3.62l0.03,0.61l2.65,2.03l2.09,0.6l-0.06,0.61l1.7,1.79l0.44,0.18l0.48,-0.28l0.23,0.54l0.68,0.45l-0.21,42.59l-12.0,-0.06l-0.4,0.4l-0.07,18.4l-20.66,0.16l-0.4,0.4l0.03,4.08l-9.94,0.06l-0.27,-45.05l0.46,-1.88l2.52,-4.28l-0.33,-0.62l-3.95,-0.01ZM896.34,812.19l0.14,-0.16l-0.0,-0.42l0.24,0.34l-0.38,0.24Z\", \"name\": \"EAST SIDE\"}, \"33\": {\"path\": \"M660.27,428.78l1.34,-3.91l-0.46,-20.18l33.63,-0.49l1.19,-1.28l10.39,-1.32l1.39,0.28l0.89,0.96l0.08,1.16l-0.7,1.19l0.0,0.56l0.41,0.4l10.69,-0.27l1.09,-0.78l1.04,-0.22l1.28,0.4l0.74,0.97l-0.05,1.15l-0.83,1.14l0.01,1.42l-0.85,-0.65l-1.02,0.34l-1.02,1.11l-0.42,1.4l0.13,1.24l1.26,3.89l0.63,0.65l1.36,0.35l0.11,4.38l-1.66,0.09l-0.73,0.64l1.02,16.76l-4.74,0.4l-1.07,-0.47l-0.56,-0.89l1.26,-7.71l-1.29,-2.27l0.09,-2.52l-0.34,-0.78l-0.93,-0.85l0.24,-1.5l-0.67,-1.67l0.7,-0.83l-0.02,-1.16l0.98,-1.99l0.65,-3.49l-0.63,-2.87l-1.22,-2.35l-0.05,-1.16l-0.4,-0.38l-4.74,0.06l-0.39,0.41l0.03,1.18l-1.18,2.8l-0.51,2.37l0.3,2.47l1.6,3.06l0.02,1.14l0.56,0.72l-0.23,0.49l0.26,0.27l-0.37,0.73l0.58,2.73l0.0,0.7l-0.85,0.26l-0.56,0.82l-0.47,1.58l0.01,1.8l0.97,2.68l3.14,2.88l0.95,4.6l3.17,5.38l0.09,1.24l-0.75,4.62l0.12,1.64l0.4,1.27l1.69,2.72l0.24,0.98l-0.18,1.05l-1.02,1.63l-0.56,-0.83l-14.25,0.45l-1.05,-1.37l-2.57,-0.27l-24.49,0.43l-0.38,-18.6l-0.4,-0.39l-1.17,0.01l-0.33,-12.32l-0.41,-0.39l-10.19,0.15Z\", \"name\": \"NEAR SOUTH SIDE\"}, \"55\": {\"path\": \"M760.45,941.02l5.52,0.32l6.57,2.22l3.15,0.5l48.28,0.08l0.38,-0.4l0.06,-24.34l0.64,-0.63l1.35,0.13l1.84,-1.72l0.76,-0.22l0.63,-0.59l7.15,12.84l2.69,3.82l3.45,2.68l11.99,8.23l0.55,0.1l0.42,-0.46l-3.76,-23.01l0.49,-3.22l2.41,-7.21l0.41,-2.6l-0.34,-24.44l10.33,-0.06l0.4,-0.4l-0.02,-4.08l20.61,-0.15l0.4,-0.36l0.15,-1.51l-0.04,-16.93l11.63,0.06l-1.17,121.58l-114.36,-0.39l-0.97,-6.3l-2.12,-5.69l-2.23,-3.74l-17.25,-24.12Z\", \"name\": \"HEGEWISCH\"}, \"74\": {\"path\": \"M433.94,862.1l6.85,-0.41l34.7,-0.67l0.46,-0.41l-1.74,-56.29l17.68,-0.32l0.12,4.33l0.41,0.39l2.26,-0.04l0.37,13.64l0.41,0.39l21.2,-0.27l0.39,-0.4l-0.09,-1.95l9.82,-0.14l0.67,20.85l0.28,0.31l0.53,27.42l-7.62,0.37l-0.39,0.4l0.14,4.23l-2.23,0.03l-0.4,0.41l0.14,4.45l-10.12,0.19l-0.39,0.42l0.29,8.94l-9.66,0.07l-2.69,0.27l-0.06,-1.76l-0.41,-0.39l-0.02,-0.67l0.38,-0.41l-0.2,-5.85l-0.41,-0.38l-60.06,1.19l-0.6,-17.94Z\", \"name\": \"MOUNT GREENWOOD\"}, \"37\": {\"path\": \"M657.65,550.19l0.38,-2.97l-0.03,-10.33l0.6,-0.01l0.39,-0.44l-0.37,-4.66l-0.32,-0.3l-0.17,-13.37l13.83,-0.22l0.82,31.79l0.1,19.81l0.8,23.0l-14.13,0.3l-0.98,-37.0l0.3,-0.41l-0.19,-4.82l-0.41,-0.39l-0.62,0.01Z\", \"name\": \"FULLER PARK\"}, \"47\": {\"path\": \"M726.5,777.39l1.53,0.35l0.47,-0.32l1.13,-5.97l-0.54,-0.47l0.83,-4.27l-0.65,-0.46l2.56,-13.39l1.59,-0.26l0.32,-0.32l1.62,-8.95l10.32,-0.18l4.6,7.82l2.52,4.96l6.96,14.06l2.42,6.69l1.67,3.16l-37.3,0.71l-0.06,-3.15Z\", \"name\": \"BURNSIDE\"}, \"17\": {\"path\": \"M224.15,165.79l7.97,-0.19l1.78,9.34l0.06,9.14l0.41,0.41l53.05,-1.56l0.4,-0.41l-0.05,-2.61l27.57,-15.77l15.97,-0.55l0.52,18.56l0.41,0.39l20.78,-0.35l1.19,37.12l-65.65,1.17l-0.39,0.41l0.25,8.64l-20.33,0.5l-0.27,-9.02l-0.42,-0.38l-39.12,0.94l-0.72,-18.1l-0.53,-0.64l-2.32,0.07l-0.49,-18.08l-0.07,-19.03Z\", \"name\": \"DUNNING\"}, \"57\": {\"path\": \"M436.54,530.64l51.47,-19.43l0.8,41.46l0.46,10.56l-0.55,2.32l-0.86,1.55l-1.52,1.7l-9.04,4.23l-7.58,4.02l-0.79,0.02l-0.39,0.41l0.01,0.58l-10.24,4.85l-0.23,0.37l0.08,3.43l-15.49,0.19l-0.4,0.41l0.08,3.01l-4.47,0.37l-1.34,-60.05Z\", \"name\": \"ARCHER HEIGHTS\"}, \"50\": {\"path\": \"M725.1,803.29l4.21,-21.97l35.11,-0.7l3.58,4.0l0.72,24.27l-0.43,3.65l-0.9,3.03l-0.93,1.93l-3.13,0.07l-0.39,0.41l-0.23,2.06l-1.54,4.53l-8.42,9.17l-5.05,6.76l-3.91,6.92l-11.6,25.94l-2.3,0.34l-3.62,1.47l-14.71,0.18l13.54,-72.06Z\", \"name\": \"PULLMAN\"}}, \"height\": 981.6642077705183, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 0.0}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/jvectormap/jquery-jvectormap-world-mill-en.js",
    "content": "jQuery.fn.vectorMap('addMap', 'world_mill_en',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 440.70631074413296, \"bbox\": [{\"y\": -12671671.123330014, \"x\": -20004297.151525836}, {\"y\": 6930392.02513512, \"x\": 20026572.39474939}], \"left\": 0}], \"paths\": {\"BD\": {\"path\": \"M651.84,230.21l-0.6,-2.0l-1.36,-1.71l-2.31,-0.11l-0.41,0.48l0.2,0.94l-0.53,0.99l-0.72,-0.36l-0.68,0.35l-1.2,-0.36l-0.37,-2.0l-0.81,-1.86l0.39,-1.46l-0.22,-0.47l-1.14,-0.53l0.29,-0.5l1.48,-0.94l0.03,-0.65l-1.55,-1.22l0.55,-1.14l1.61,0.94l1.04,0.15l0.18,1.54l0.34,0.35l5.64,0.63l-0.84,1.64l-1.22,0.34l-0.77,1.51l0.07,0.47l1.37,1.37l0.67,-0.19l0.42,-1.39l1.21,3.84l-0.03,1.21l-0.33,-0.15l-0.4,0.28Z\", \"name\": \"Bangladesh\"}, \"BE\": {\"path\": \"M429.29,144.05l1.91,0.24l2.1,-0.63l2.63,1.99l-0.21,1.66l-0.69,0.4l-0.18,1.2l-1.66,-1.13l-1.39,0.15l-2.73,-2.7l-1.17,-0.18l-0.16,-0.52l1.54,-0.5Z\", \"name\": \"Belgium\"}, \"BF\": {\"path\": \"M421.42,247.64l-0.11,0.95l0.34,1.16l1.4,1.71l0.07,1.1l0.32,0.37l2.55,0.51l-0.04,1.28l-0.38,0.53l-1.07,0.21l-0.72,1.18l-0.63,0.21l-3.22,-0.25l-0.94,0.39l-5.4,-0.05l-0.39,0.38l0.16,2.73l-1.23,-0.43l-1.17,0.1l-0.89,0.57l-2.27,-1.72l-0.13,-1.11l0.61,-0.96l0.02,-0.93l1.87,-1.98l0.44,-1.81l0.43,-0.39l1.28,0.26l1.05,-0.52l0.47,-0.73l1.84,-1.09l0.55,-0.83l2.2,-1.0l1.15,-0.3l0.72,0.45l1.13,-0.01Z\", \"name\": \"Burkina Faso\"}, \"BG\": {\"path\": \"M491.65,168.18l-0.86,0.88l-0.91,2.17l0.48,1.34l-1.6,-0.24l-2.55,0.95l-0.28,1.51l-1.8,0.22l-2.0,-1.0l-1.92,0.79l-1.42,-0.07l-0.15,-1.63l-1.05,-0.97l0.0,-0.8l1.2,-1.57l0.01,-0.56l-1.14,-1.23l-0.05,-0.94l0.88,0.97l0.88,-0.2l1.91,0.47l3.68,0.16l1.42,-0.81l2.72,-0.66l2.55,1.24Z\", \"name\": \"Bulgaria\"}, \"BA\": {\"path\": \"M463.49,163.65l2.1,0.5l1.72,-0.03l1.52,0.68l-0.36,0.78l0.08,0.45l1.04,1.02l-0.25,0.98l-1.81,1.15l-0.38,1.38l-1.67,-0.87l-0.89,-1.2l-2.11,-1.83l-1.63,-2.22l0.23,-0.57l0.48,0.38l0.55,-0.06l0.43,-0.51l0.94,-0.06Z\", \"name\": \"Bosnia and Herz.\"}, \"BN\": {\"path\": \"M707.48,273.58l0.68,-0.65l1.41,-0.91l-0.15,1.63l-0.81,-0.05l-0.61,0.58l-0.53,-0.6Z\", \"name\": \"Brunei\"}, \"BO\": {\"path\": \"M263.83,340.69l-3.09,-0.23l-0.38,0.23l-0.7,1.52l-1.31,-1.53l-3.28,-0.64l-2.37,2.4l-1.31,0.26l-0.88,-3.26l-1.3,-2.86l0.74,-2.37l-0.13,-0.43l-1.2,-1.01l-0.37,-1.89l-1.08,-1.55l1.45,-2.56l-0.96,-2.33l0.47,-1.06l-0.34,-0.73l0.91,-1.32l0.16,-3.84l0.5,-1.18l-1.81,-3.41l2.46,0.07l0.8,-0.85l3.4,-1.91l2.66,-0.35l-0.19,1.38l0.3,1.07l-0.05,1.97l2.72,2.27l2.88,0.49l0.89,0.86l1.79,0.58l0.98,0.7l1.71,0.05l1.17,0.61l0.6,2.7l-0.7,0.54l0.96,2.99l0.37,0.28l4.3,0.1l-0.25,1.2l0.27,1.02l1.43,0.9l0.5,1.35l-0.41,1.86l-0.65,1.08l0.12,1.35l-2.69,-1.65l-2.4,-0.03l-4.36,0.76l-1.49,2.5l-0.11,1.52l-0.75,2.37Z\", \"name\": \"Bolivia\"}, \"JP\": {\"path\": \"M781.12,166.87l1.81,0.68l1.62,-0.97l0.39,2.42l-3.35,0.75l-2.23,2.88l-3.63,-1.9l-0.56,0.2l-1.26,3.05l-2.16,0.03l-0.29,-2.51l1.08,-2.03l2.45,-0.16l0.37,-0.33l1.25,-5.94l2.47,2.71l2.03,1.12ZM773.56,187.34l-0.91,2.22l0.37,1.52l-1.14,1.75l-3.02,1.26l-4.58,0.27l-3.34,3.01l-1.25,-0.8l-0.09,-1.9l-0.46,-0.38l-4.35,0.62l-3.0,1.32l-2.85,0.05l-0.37,0.27l0.13,0.44l2.32,1.89l-1.54,4.34l-1.26,0.9l-0.79,-0.7l0.56,-2.27l-0.21,-0.45l-1.47,-0.75l-0.74,-1.4l2.12,-0.84l1.26,-1.7l2.45,-1.42l1.83,-1.91l4.78,-0.81l2.6,0.57l0.44,-0.21l2.39,-4.66l1.29,1.06l0.5,0.01l5.1,-4.02l1.69,-3.73l-0.38,-3.4l0.9,-1.61l2.14,-0.44l1.23,3.72l-0.07,2.18l-2.23,2.84l-0.04,3.16ZM757.78,196.26l0.19,0.56l-1.01,1.21l-1.16,-0.68l-1.28,0.65l-0.69,1.45l-1.02,-0.5l0.01,-0.93l1.14,-1.38l1.57,0.14l0.85,-0.98l1.4,0.46Z\", \"name\": \"Japan\"}, \"BI\": {\"path\": \"M495.45,295.49l-1.08,-2.99l1.14,-0.11l0.64,-1.19l0.76,0.09l0.65,1.83l-2.1,2.36Z\", \"name\": \"Burundi\"}, \"BJ\": {\"path\": \"M429.57,255.75l-0.05,0.8l0.5,1.34l-0.42,0.86l0.17,0.79l-1.81,2.12l-0.57,1.76l-0.08,5.42l-1.41,0.2l-0.48,-1.36l0.11,-5.71l-0.52,-0.7l-0.2,-1.35l-1.48,-1.48l0.21,-0.9l0.89,-0.43l0.42,-0.92l1.27,-0.36l1.22,-1.34l0.61,-0.0l1.62,1.24Z\", \"name\": \"Benin\"}, \"BT\": {\"path\": \"M650.32,213.86l0.84,0.71l-0.12,1.1l-3.76,-0.11l-1.57,0.4l-1.93,-0.87l1.48,-1.96l1.13,-0.57l1.63,0.57l1.33,0.08l0.99,0.65Z\", \"name\": \"Bhutan\"}, \"JM\": {\"path\": \"M228.38,239.28l-0.8,0.4l-2.26,-1.06l0.84,-0.23l2.14,0.3l1.17,0.56l-1.08,0.03Z\", \"name\": \"Jamaica\"}, \"BW\": {\"path\": \"M483.92,330.07l2.27,4.01l2.83,2.86l0.96,0.31l0.78,2.43l2.13,0.61l1.02,0.76l-3.0,1.64l-2.32,2.02l-1.54,2.69l-1.52,0.45l-0.64,1.94l-1.34,0.52l-1.85,-0.12l-1.21,-0.74l-1.35,-0.3l-1.22,0.62l-0.75,1.37l-2.31,1.9l-1.4,0.21l-0.35,-0.59l0.16,-1.75l-1.48,-2.54l-0.62,-0.43l-0.0,-7.1l2.08,-0.08l0.39,-0.4l0.07,-8.9l5.19,-0.93l0.8,0.89l0.51,0.07l1.5,-0.95l2.21,-0.49Z\", \"name\": \"Botswana\"}, \"BR\": {\"path\": \"M259.98,275.05l3.24,0.7l0.65,-0.53l4.55,-1.32l1.08,-1.06l-0.02,-0.63l0.55,-0.05l0.28,0.28l-0.26,0.87l0.22,0.48l0.73,0.32l0.4,0.81l-0.62,0.86l-0.4,2.13l0.82,2.56l1.69,1.43l1.43,0.2l3.17,-1.68l3.18,0.3l0.65,-0.75l-0.27,-0.92l1.9,-0.09l2.39,0.99l1.06,-0.61l0.84,0.78l1.2,-0.18l1.18,-1.06l0.84,-1.94l1.36,-2.11l0.37,-0.05l1.89,5.45l1.33,0.59l0.05,1.28l-1.77,1.94l0.02,0.56l1.02,0.87l4.07,0.36l0.08,2.16l0.66,0.29l1.74,-1.5l6.97,2.32l1.02,1.22l-0.35,1.18l0.49,0.5l2.81,-0.74l4.77,1.3l3.75,-0.08l3.57,2.0l3.29,2.86l1.93,0.72l2.12,0.12l0.71,0.62l1.21,4.51l-0.95,3.98l-4.72,5.06l-1.64,2.92l-1.72,2.05l-0.8,0.3l-0.72,2.03l0.18,4.75l-0.94,5.53l-0.81,1.13l-0.43,3.36l-2.55,3.5l-0.4,2.51l-1.86,1.04l-0.67,1.53l-2.54,0.01l-3.94,1.01l-1.83,1.2l-2.87,0.82l-3.03,2.19l-2.2,2.83l-0.36,2.0l0.4,1.58l-0.44,2.6l-0.51,1.2l-1.77,1.54l-2.75,4.78l-3.83,3.42l-1.24,2.74l-1.18,1.15l-0.36,-0.83l0.95,-1.14l0.01,-0.5l-1.52,-1.97l-4.56,-3.32l-1.03,-0.0l-2.38,-2.02l-0.81,-0.0l5.34,-5.45l3.77,-2.58l0.22,-2.46l-1.35,-1.81l-0.91,0.07l0.58,-2.33l0.01,-1.54l-1.11,-0.83l-1.75,0.3l-0.44,-3.11l-0.52,-0.95l-1.88,-0.88l-1.24,0.47l-2.17,-0.41l0.15,-3.21l-0.62,-1.34l0.66,-0.73l-0.22,-1.34l0.66,-1.13l0.44,-2.04l-0.61,-1.83l-1.4,-0.86l-0.2,-0.75l0.34,-1.39l-0.38,-0.5l-4.52,-0.1l-0.72,-2.22l0.59,-0.42l-0.03,-1.1l-0.5,-0.87l-0.32,-1.7l-1.45,-0.76l-1.63,-0.02l-1.05,-0.72l-1.6,-0.48l-1.13,-0.99l-2.69,-0.4l-2.47,-2.06l0.13,-4.35l-0.45,-0.45l-3.46,0.5l-3.44,1.94l-0.6,0.74l-2.9,-0.17l-1.47,0.42l-0.72,-0.18l0.15,-3.52l-0.63,-0.34l-1.94,1.41l-1.87,-0.06l-0.83,-1.18l-1.37,-0.26l0.21,-1.01l-1.35,-1.49l-0.88,-1.91l0.56,-0.6l-0.0,-0.81l1.29,-0.62l0.22,-0.43l-0.22,-1.19l0.61,-0.91l0.15,-0.99l2.65,-1.58l1.99,-0.47l0.42,-0.36l2.06,0.11l0.42,-0.33l1.19,-8.0l-0.41,-1.56l-1.1,-1.0l0.01,-1.33l1.91,-0.42l0.08,-0.96l-0.33,-0.43l-1.14,-0.2l-0.02,-0.83l4.47,0.05l0.82,-0.67l0.82,1.81l0.8,0.07l1.15,1.1l2.26,-0.05l0.71,-0.83l2.78,-0.96l0.48,-1.13l1.6,-0.64l0.24,-0.47l-0.48,-0.82l-1.83,-0.19l-0.36,-3.22Z\", \"name\": \"Brazil\"}, \"BS\": {\"path\": \"M226.4,223.87l-0.48,-1.15l-0.84,-0.75l0.36,-1.11l0.95,1.95l0.01,1.06ZM225.56,216.43l-1.87,0.29l-0.04,-0.22l0.74,-0.14l1.17,0.06Z\", \"name\": \"Bahamas\"}, \"BY\": {\"path\": \"M493.84,128.32l0.29,0.7l0.49,0.23l1.19,-0.38l2.09,0.72l0.19,1.26l-0.45,1.24l1.57,2.26l0.89,0.59l0.17,0.81l1.58,0.56l0.4,0.5l-0.53,0.41l-1.87,-0.11l-0.73,0.38l-0.13,0.52l1.04,2.74l-1.91,0.26l-0.89,0.99l-0.11,1.18l-2.73,-0.04l-0.53,-0.62l-0.52,-0.08l-0.75,0.46l-0.91,-0.42l-1.92,-0.07l-2.75,-0.79l-2.6,-0.28l-2.0,0.07l-1.5,0.92l-0.67,0.07l-0.08,-1.22l-0.59,-1.19l1.36,-0.88l0.01,-1.35l-0.7,-1.41l-0.07,-1.0l2.16,-0.02l2.72,-1.3l0.75,-2.04l1.91,-1.04l0.2,-0.41l-0.19,-1.25l3.8,-1.78l2.3,0.77Z\", \"name\": \"Belarus\"}, \"BZ\": {\"path\": \"M198.03,244.38l0.1,-4.49l0.69,-0.06l0.74,-1.3l0.34,0.28l-0.4,1.3l0.17,0.58l-0.34,2.25l-1.3,1.42Z\", \"name\": \"Belize\"}, \"RU\": {\"path\": \"M491.55,115.25l2.55,-1.85l-0.01,-0.65l-2.2,-1.5l7.32,-6.76l1.03,-2.11l-0.13,-0.49l-3.46,-2.52l0.86,-2.7l-2.11,-2.81l1.56,-3.67l-2.77,-4.52l2.15,-2.99l-0.08,-0.55l-3.65,-2.73l0.3,-2.54l1.81,-0.37l4.26,-1.77l2.42,-1.45l4.06,2.61l6.79,1.04l9.34,4.85l1.78,1.88l0.14,2.46l-2.55,2.02l-3.9,1.06l-11.07,-3.14l-2.06,0.53l-0.13,0.7l3.94,2.94l0.31,5.86l0.26,0.36l5.14,2.24l0.58,-0.29l0.32,-1.94l-1.35,-1.78l1.13,-1.09l6.13,2.42l2.11,-0.98l0.18,-0.56l-1.51,-2.67l5.41,-3.76l2.07,0.22l2.26,1.41l0.57,-0.16l1.46,-2.87l-0.05,-0.44l-1.92,-2.32l1.12,-2.32l-1.32,-2.27l5.87,1.16l1.04,1.75l-2.59,0.43l-0.33,0.4l0.02,2.36l2.46,1.83l3.87,-0.91l0.86,-2.8l13.69,-5.65l0.99,0.11l-1.92,2.06l0.23,0.67l3.11,0.45l2.0,-1.48l4.56,-0.12l3.64,-1.73l2.65,2.44l0.56,-0.01l2.85,-2.88l-0.01,-0.57l-2.35,-2.29l0.9,-1.01l7.14,1.3l3.41,1.36l9.05,4.97l0.51,-0.11l1.67,-2.27l-0.05,-0.53l-2.43,-2.21l-0.06,-0.78l-0.34,-0.36l-2.52,-0.36l0.64,-1.93l-1.32,-3.46l-0.06,-1.21l4.48,-4.06l1.69,-4.29l1.6,-0.81l6.23,1.18l0.44,2.21l-2.29,3.64l0.06,0.5l1.47,1.39l0.76,3.0l-0.56,6.03l2.69,2.82l-0.96,2.57l-4.86,5.95l0.23,0.64l2.86,0.61l0.42,-0.17l0.93,-1.4l2.64,-1.03l0.87,-2.24l2.09,-1.96l0.07,-0.5l-1.36,-2.28l1.09,-2.69l-0.32,-0.55l-2.47,-0.33l-0.5,-2.06l1.94,-4.38l-0.06,-0.42l-2.96,-3.4l4.12,-2.88l0.16,-0.4l-0.51,-2.93l0.54,-0.05l1.13,2.25l-0.96,4.35l0.27,0.47l2.68,0.84l0.5,-0.51l-1.02,-2.99l3.79,-1.66l5.01,-0.24l4.53,2.61l0.48,-0.06l0.07,-0.48l-2.18,-3.82l-0.23,-4.67l3.98,-0.9l5.97,0.21l5.49,-0.64l0.27,-0.65l-1.83,-2.31l2.56,-2.9l2.87,-0.17l4.8,-2.47l6.54,-0.67l1.03,-1.42l6.25,-0.45l2.32,1.11l5.53,-2.7l4.5,0.08l0.39,-0.28l0.66,-2.15l2.26,-2.12l5.69,-2.11l3.21,1.29l-2.46,0.94l-0.25,0.42l0.34,0.35l5.41,0.77l0.61,2.33l0.58,0.25l2.2,-1.22l7.13,0.07l5.51,2.47l1.79,1.72l-0.53,2.24l-9.16,4.15l-1.97,1.52l0.16,0.71l6.77,1.91l2.16,-0.78l1.13,2.74l0.67,0.11l1.01,-1.15l3.81,-0.73l7.7,0.77l0.54,1.99l0.36,0.29l10.47,0.71l0.43,-0.38l0.13,-3.23l4.87,0.78l3.95,-0.02l3.83,2.4l1.03,2.71l-1.35,1.79l0.02,0.5l3.15,3.64l4.07,1.96l0.53,-0.18l2.23,-4.47l3.95,1.93l4.16,-1.21l4.73,1.39l2.05,-1.26l3.94,0.62l0.43,-0.55l-1.68,-4.02l2.89,-1.8l22.31,3.03l2.16,2.75l6.55,3.51l10.29,-0.81l4.82,0.73l1.85,1.66l-0.29,3.08l0.25,0.41l3.08,1.26l3.56,-0.88l4.35,-0.11l4.8,0.87l4.57,-0.47l4.23,3.79l0.43,0.07l3.1,-1.4l0.16,-0.6l-1.88,-2.62l0.85,-1.52l7.71,1.21l5.22,-0.26l7.09,2.09l9.59,5.22l6.35,4.11l-0.2,2.38l1.88,1.41l0.6,-0.42l-0.48,-2.53l6.15,0.57l4.4,3.51l-1.97,1.43l-4.0,0.41l-0.36,0.39l-0.06,3.79l-0.74,0.62l-2.07,-0.11l-1.91,-1.39l-3.14,-1.11l-0.78,-1.85l-2.72,-0.68l-2.63,0.49l-1.04,-1.1l0.46,-1.31l-0.5,-0.51l-3.0,0.98l-0.22,0.58l0.99,1.7l-1.21,1.48l-3.04,1.68l-3.12,-0.28l-0.4,0.23l0.09,0.46l2.2,2.09l1.46,3.2l1.15,1.1l0.24,1.33l-0.42,0.67l-4.63,-0.77l-6.96,2.9l-2.19,0.44l-7.6,5.06l-0.84,1.45l-3.61,-2.37l-6.24,2.82l-0.94,-1.15l-0.53,-0.08l-2.28,1.52l-3.2,-0.49l-0.44,0.27l-0.78,2.37l-3.05,3.78l0.09,1.47l0.29,0.36l2.54,0.72l-0.29,4.53l-1.97,0.11l-0.35,0.26l-1.07,2.94l0.8,1.45l-3.91,1.58l-1.05,3.95l-3.48,0.77l-0.3,0.3l-0.72,3.29l-3.09,2.65l-0.7,-1.74l-2.44,-12.44l1.16,-4.71l2.04,-2.06l0.22,-1.64l3.8,-0.86l4.46,-4.61l4.28,-3.81l4.48,-3.01l2.17,-5.63l-0.42,-0.54l-3.04,0.33l-1.77,3.31l-5.86,3.86l-1.86,-4.25l-0.45,-0.23l-6.46,1.3l-6.47,6.44l-0.01,0.55l1.58,1.74l-8.24,1.17l0.15,-2.2l-0.34,-0.42l-3.89,-0.56l-3.25,1.81l-7.62,-0.62l-8.45,1.19l-17.71,15.41l0.22,0.7l3.74,0.41l1.36,2.17l2.43,0.76l1.88,-1.68l2.4,0.2l3.4,3.54l0.08,2.6l-1.95,3.42l-0.21,3.9l-1.1,5.06l-3.71,4.54l-0.87,2.21l-8.29,8.89l-3.19,1.7l-1.32,0.03l-1.45,-1.36l-0.49,-0.04l-2.27,1.5l0.41,-3.65l-0.59,-2.47l1.75,-0.89l2.91,0.53l0.42,-0.2l1.68,-3.03l0.87,-3.46l0.97,-1.18l1.32,-2.88l-0.45,-0.56l-4.14,0.95l-2.19,1.25l-3.41,-0.0l-1.06,-2.93l-2.97,-2.3l-4.28,-1.06l-1.75,-5.07l-2.66,-5.01l-2.29,-1.29l-3.75,-1.01l-3.44,0.08l-3.18,0.62l-2.24,1.77l0.05,0.66l1.18,0.69l0.02,1.43l-1.33,1.05l-2.26,3.51l-0.04,1.43l-3.16,1.84l-2.82,-1.16l-3.01,0.23l-1.35,-1.07l-1.5,-0.35l-3.9,2.31l-3.22,0.52l-2.27,0.79l-3.05,-0.51l-2.21,0.03l-1.48,-1.6l-2.6,-1.63l-2.63,-0.43l-5.46,1.01l-3.23,-1.25l-0.72,-2.57l-5.2,-1.24l-2.75,-1.36l-0.5,0.12l-2.59,3.45l0.84,2.1l-2.06,1.93l-3.41,-0.77l-2.42,-0.12l-1.83,-1.54l-2.53,-0.05l-2.42,-0.98l-3.86,1.57l-4.72,2.78l-3.3,0.75l-1.55,-1.92l-3.0,0.41l-1.11,-1.33l-1.62,-0.59l-1.31,-1.94l-1.38,-0.6l-3.7,0.79l-3.31,-1.83l-0.51,0.11l-0.99,1.29l-5.29,-8.05l-2.96,-2.48l0.65,-0.77l0.01,-0.51l-0.5,-0.11l-6.2,3.21l-1.84,0.15l0.15,-1.39l-0.26,-0.42l-3.22,-1.17l-2.46,0.7l-0.69,-3.16l-0.32,-0.31l-4.5,-0.75l-2.47,1.47l-6.19,1.27l-1.29,0.86l-9.51,1.3l-1.15,1.17l-0.03,0.53l1.47,1.9l-1.89,0.69l-0.22,0.56l0.31,0.6l-2.11,1.44l0.03,0.68l3.75,2.12l-0.39,0.98l-3.23,-0.13l-0.86,0.86l-3.09,-1.59l-3.97,0.07l-2.66,1.35l-8.32,-3.56l-4.07,0.06l-5.39,3.68l-0.39,2.0l-2.03,-1.5l-0.59,0.13l-2.0,3.59l0.57,0.93l-1.28,2.16l0.06,0.48l2.13,2.17l1.95,0.04l1.37,1.82l-0.23,1.46l0.25,0.43l0.83,0.33l-0.8,1.31l-2.49,0.62l-2.49,3.2l0.0,0.49l2.17,2.78l-0.15,2.18l2.5,3.24l-1.58,1.59l-0.7,-0.13l-1.63,-1.72l-2.29,-0.84l-0.94,-1.31l-2.34,-0.63l-1.48,0.4l-0.43,-0.47l-3.51,-1.48l-5.76,-1.01l-0.45,0.19l-2.89,-2.34l-2.9,-1.2l-1.53,-1.29l1.29,-0.43l2.08,-2.61l-0.05,-0.55l-0.89,-0.79l3.05,-1.06l0.27,-0.42l-0.07,-0.69l-0.49,-0.35l-1.73,0.39l0.04,-0.68l1.04,-0.72l2.66,-0.48l0.4,-1.32l-0.5,-1.6l0.92,-1.54l0.03,-1.17l-0.29,-0.37l-3.69,-1.06l-1.41,0.02l-1.42,-1.41l-2.19,0.38l-2.77,-1.01l-0.03,-0.59l-0.89,-1.43l-2.0,-0.32l-0.11,-0.54l0.49,-0.53l0.01,-0.53l-1.6,-1.9l-3.58,0.02l-0.88,0.73l-0.46,-0.07l-1.0,-2.79l2.22,-0.02l0.97,-0.74l0.07,-0.57l-0.9,-1.04l-1.35,-0.48l-0.11,-0.7l-0.95,-0.58l-1.38,-1.99l0.46,-0.98l-0.51,-1.96l-2.45,-0.84l-1.21,0.3l-0.46,-0.76l-2.46,-0.83l-0.72,-1.87l-0.21,-1.69l-0.99,-0.85l0.85,-1.17l-0.7,-3.21l1.66,-1.97l-0.16,-0.79ZM749.2,170.72l-0.6,0.4l-0.13,0.16l-0.01,-0.51l0.74,-0.05ZM874.85,67.94l-5.63,0.48l-0.26,-0.84l3.15,-1.89l1.94,0.01l3.19,1.16l-2.39,1.09ZM797.39,48.49l-2.0,1.36l-3.8,-0.42l-4.25,-1.8l0.35,-0.97l9.69,1.83ZM783.67,46.12l-1.63,3.09l-8.98,-0.13l-4.09,1.14l-4.54,-2.97l1.16,-3.01l3.05,-0.89l6.5,0.22l8.54,2.56ZM778.2,134.98l-0.56,-0.9l0.27,-0.12l0.29,1.01ZM778.34,135.48l0.94,3.53l-0.05,3.38l1.05,3.39l2.18,5.0l-2.89,-0.83l-0.49,0.26l-1.54,4.65l2.42,3.5l-0.04,1.13l-1.24,-1.24l-0.61,0.06l-1.09,1.61l-0.28,-1.61l0.27,-3.1l-0.28,-3.4l0.58,-2.47l0.11,-4.39l-1.46,-3.36l0.21,-4.32l2.15,-1.46l0.07,-0.34ZM771.95,56.61l1.76,-1.42l2.89,-0.42l3.28,1.71l0.14,0.6l-3.27,0.03l-4.81,-0.5ZM683.76,31.09l-13.01,1.93l4.03,-6.35l1.82,-0.56l1.73,0.34l5.99,2.98l-0.56,1.66ZM670.85,27.93l-5.08,0.64l-6.86,-1.57l-3.99,-2.05l-2.1,-4.16l-2.6,-0.87l5.72,-3.5l5.2,-1.28l4.69,2.85l5.59,5.4l-0.56,4.53ZM564.15,68.94l-0.64,0.17l-7.85,-0.57l-0.86,-2.04l-4.28,-1.17l-0.28,-1.94l2.27,-0.89l0.25,-0.39l-0.08,-2.38l4.81,-3.97l-0.15,-0.7l-1.47,-0.38l5.3,-3.81l0.15,-0.44l-0.58,-1.94l5.28,-2.51l8.21,-3.27l8.28,-0.96l4.35,-1.94l4.6,-0.64l1.36,1.61l-1.34,1.28l-16.43,4.94l-7.97,4.88l-7.74,9.63l0.66,4.14l4.16,3.27ZM548.81,18.48l-5.5,1.18l-0.58,1.02l-2.59,0.84l-2.13,-1.07l1.12,-1.42l-0.3,-0.65l-2.33,-0.07l1.68,-0.36l3.47,-0.06l0.42,1.29l0.66,0.16l1.38,-1.34l2.15,-0.88l2.94,1.01l-0.39,0.36ZM477.37,133.15l-4.08,0.05l-2.56,-0.32l0.33,-0.87l3.17,-1.03l3.24,0.96l-0.09,1.23Z\", \"name\": \"Russia\"}, \"RW\": {\"path\": \"M497.0,288.25l0.71,1.01l-0.11,1.09l-1.63,0.03l-1.04,1.39l-0.83,-0.11l0.51,-1.2l0.08,-1.34l0.42,-0.41l0.7,0.14l1.19,-0.61Z\", \"name\": \"Rwanda\"}, \"RS\": {\"path\": \"M469.4,163.99l0.42,-0.5l-0.01,-0.52l-1.15,-1.63l1.43,-0.62l1.33,0.12l1.17,1.06l0.46,1.13l1.34,0.64l0.35,1.35l1.46,0.9l0.76,-0.29l0.2,0.69l-0.48,0.78l0.22,1.12l1.05,1.22l-0.77,0.8l-0.37,1.52l-1.21,0.08l0.24,-0.64l-0.39,-0.54l-2.08,-1.64l-0.9,0.05l-0.48,0.94l-2.12,-1.37l0.53,-1.6l-1.11,-1.37l0.51,-1.1l-0.41,-0.57Z\", \"name\": \"Serbia\"}, \"LT\": {\"path\": \"M486.93,129.3l0.17,1.12l-1.81,0.98l-0.72,2.02l-2.47,1.18l-2.1,-0.02l-0.73,-1.05l-1.06,-0.3l-0.09,-1.87l-3.56,-1.13l-0.43,-2.36l2.48,-0.94l4.12,0.22l2.25,-0.31l0.52,0.69l1.24,0.21l2.19,1.56Z\", \"name\": \"Lithuania\"}, \"LU\": {\"path\": \"M436.08,149.45l-0.48,-0.07l0.3,-1.28l0.27,0.4l-0.09,0.96Z\", \"name\": \"Luxembourg\"}, \"LR\": {\"path\": \"M399.36,265.97l0.18,1.54l-0.48,0.99l0.08,0.47l2.47,1.8l-0.33,2.8l-2.65,-1.13l-5.78,-4.61l0.58,-1.32l2.1,-2.33l0.86,-0.22l0.77,1.14l-0.14,0.85l0.59,0.87l1.0,0.14l0.76,-0.99Z\", \"name\": \"Liberia\"}, \"RO\": {\"path\": \"M487.53,154.23l0.6,0.24l2.87,3.98l-0.17,2.69l0.45,1.42l1.32,0.81l1.35,-0.42l0.76,0.36l0.02,0.31l-0.83,0.45l-0.59,-0.22l-0.54,0.3l-0.62,3.3l-1.0,-0.22l-2.07,-1.13l-2.95,0.71l-1.25,0.76l-3.51,-0.15l-1.89,-0.47l-0.87,0.16l-0.82,-1.3l0.29,-0.26l-0.06,-0.64l-1.09,-0.34l-0.56,0.5l-1.05,-0.64l-0.39,-1.39l-1.36,-0.65l-0.35,-1.0l-0.83,-0.75l1.54,-0.54l2.66,-4.21l2.4,-1.24l2.96,0.34l1.48,0.73l0.79,-0.45l1.78,-0.3l0.75,-0.74l0.79,0.0Z\", \"name\": \"Romania\"}, \"GW\": {\"path\": \"M386.23,253.6l-0.29,0.84l0.15,0.6l-2.21,0.59l-0.86,0.96l-1.04,-0.83l-1.09,-0.23l-0.54,-1.06l-0.66,-0.49l2.41,-0.48l4.13,0.1Z\", \"name\": \"Guinea-Bissau\"}, \"GT\": {\"path\": \"M195.08,249.77l-2.48,-0.37l-1.03,-0.45l-1.14,-0.89l0.3,-0.99l-0.24,-0.68l0.96,-1.66l2.98,-0.01l0.4,-0.37l-0.19,-1.28l-1.67,-1.4l0.51,-0.4l0.0,-1.05l3.85,0.02l-0.21,4.53l0.4,0.43l1.46,0.38l-1.48,0.98l-0.35,0.7l0.12,0.57l-2.2,1.96Z\", \"name\": \"Guatemala\"}, \"GR\": {\"path\": \"M487.07,174.59l-0.59,1.43l-0.37,0.21l-2.84,-0.35l-3.03,0.77l-0.18,0.68l1.28,1.23l-0.61,0.23l-1.14,0.0l-1.2,-1.39l-0.63,0.03l-0.53,1.01l0.56,1.76l1.03,1.19l-0.56,0.38l-0.05,0.62l2.52,2.12l0.02,0.87l-1.78,-0.59l-0.48,0.56l0.5,1.0l-1.07,0.2l-0.3,0.53l0.75,2.01l-0.98,0.02l-1.84,-1.12l-1.37,-4.2l-2.21,-2.95l-0.11,-0.56l1.04,-1.28l0.2,-0.95l0.85,-0.66l0.03,-0.46l1.32,-0.21l1.01,-0.64l1.22,0.05l0.65,-0.56l2.26,-0.0l1.82,-0.75l1.85,1.0l2.28,-0.28l0.35,-0.39l0.01,-0.77l0.34,0.22ZM480.49,192.16l0.58,0.4l-0.68,-0.12l0.11,-0.28ZM482.52,192.82l2.51,0.06l0.24,0.32l-1.99,0.13l-0.77,-0.51Z\", \"name\": \"Greece\"}, \"GQ\": {\"path\": \"M448.79,279.62l0.02,2.22l-4.09,0.0l0.69,-2.27l3.38,0.05Z\", \"name\": \"Eq. Guinea\"}, \"GY\": {\"path\": \"M277.42,270.07l-0.32,1.83l-1.32,0.57l-0.23,0.46l-0.28,2.0l1.11,1.82l0.83,0.19l0.32,1.25l1.13,1.62l-1.21,-0.19l-1.08,0.71l-1.77,0.5l-0.44,0.46l-0.86,-0.09l-1.32,-1.01l-0.77,-2.27l0.36,-1.9l0.68,-1.23l-0.57,-1.17l-0.74,-0.43l0.12,-1.16l-0.9,-0.69l-1.1,0.09l-1.31,-1.48l0.53,-0.72l-0.04,-0.84l1.99,-0.86l0.05,-0.59l-0.71,-0.78l0.14,-0.57l1.66,-1.24l1.36,0.77l1.41,1.49l0.06,1.15l0.37,0.38l0.8,0.05l2.06,1.86Z\", \"name\": \"Guyana\"}, \"GE\": {\"path\": \"M521.71,168.93l5.29,0.89l4.07,2.01l1.41,-0.44l2.07,0.56l0.68,1.1l1.07,0.55l-0.12,0.59l0.98,1.29l-1.01,-0.13l-1.81,-0.83l-0.94,0.47l-3.23,0.43l-2.29,-1.39l-2.33,0.05l0.21,-0.97l-0.76,-2.26l-1.45,-1.12l-1.43,-0.39l-0.41,-0.42Z\", \"name\": \"Georgia\"}, \"GB\": {\"path\": \"M412.61,118.72l-2.19,3.22l-0.0,0.45l5.13,-0.3l-0.53,2.37l-2.2,3.12l0.29,0.63l2.37,0.21l2.33,4.3l1.76,0.69l2.2,5.12l2.94,0.77l-0.23,1.62l-1.15,0.88l-0.1,0.52l0.82,1.42l-1.86,1.43l-3.3,-0.02l-4.12,0.87l-1.04,-0.58l-0.47,0.06l-1.51,1.41l-2.12,-0.34l-1.86,1.18l-0.6,-0.29l3.19,-3.0l2.16,-0.69l0.28,-0.41l-0.34,-0.36l-3.73,-0.53l-0.4,-0.76l2.2,-0.87l0.17,-0.61l-1.26,-1.67l0.36,-1.7l3.38,0.28l0.43,-0.33l0.37,-1.99l-1.79,-2.49l-3.11,-0.72l-0.38,-0.59l0.79,-1.35l-0.04,-0.46l-0.82,-0.97l-0.61,0.01l-0.68,0.84l-0.1,-2.34l-1.23,-1.88l0.85,-3.47l1.77,-2.68l1.85,0.26l2.17,-0.22ZM406.26,132.86l-1.01,1.77l-1.57,-0.59l-1.16,0.01l0.37,-1.54l-0.39,-1.39l1.45,-0.1l2.3,1.84Z\", \"name\": \"United Kingdom\"}, \"GA\": {\"path\": \"M453.24,279.52l-0.08,0.98l0.7,1.29l2.36,0.24l-0.98,2.63l1.18,1.79l0.25,1.78l-0.29,1.52l-0.6,0.93l-1.84,-0.09l-1.23,-1.11l-0.66,0.23l-0.15,0.84l-1.42,0.26l-1.02,0.7l-0.11,0.52l0.77,1.35l-1.34,0.97l-3.94,-4.3l-1.44,-2.45l0.06,-0.6l0.54,-0.81l1.05,-3.46l4.17,-0.07l0.4,-0.4l-0.02,-2.66l2.39,0.21l1.25,-0.27Z\", \"name\": \"Gabon\"}, \"GN\": {\"path\": \"M391.8,254.11l0.47,0.8l1.11,-0.32l0.98,0.7l1.07,0.2l2.26,-1.22l0.64,0.44l1.13,1.56l-0.48,1.4l0.8,0.3l-0.08,0.48l0.46,0.68l-0.35,1.36l1.05,2.61l-1.0,0.69l0.03,1.41l-0.72,-0.06l-1.08,1.0l-0.24,-0.27l0.07,-1.11l-1.05,-1.54l-1.79,0.21l-0.35,-2.01l-1.6,-2.18l-2.0,-0.0l-1.31,0.54l-1.95,2.18l-1.86,-2.19l-1.2,-0.78l-0.3,-1.11l-0.8,-0.85l0.65,-0.72l0.81,-0.03l1.64,-0.8l0.23,-1.87l2.67,0.64l0.89,-0.3l1.21,0.15Z\", \"name\": \"Guinea\"}, \"GM\": {\"path\": \"M379.31,251.39l0.1,-0.35l2.43,-0.07l0.74,-0.61l0.51,-0.03l0.77,0.49l-1.03,-0.3l-1.87,0.9l-1.65,-0.04ZM384.03,250.91l0.91,0.05l0.75,-0.24l-0.59,0.31l-1.08,-0.13Z\", \"name\": \"Gambia\"}, \"GL\": {\"path\": \"M353.02,1.2l14.69,4.67l-3.68,1.89l-22.97,0.86l-0.36,0.27l0.12,0.43l1.55,1.18l8.79,-0.66l7.48,2.07l4.86,-1.77l1.66,1.73l-2.53,3.19l-0.01,0.48l0.46,0.15l6.35,-2.2l12.06,-2.31l7.24,1.13l1.09,1.99l-9.79,4.01l-1.44,1.32l-7.87,0.98l-0.35,0.41l0.38,0.38l5.07,0.24l-2.53,3.58l-2.07,3.81l0.08,6.05l2.57,3.11l-3.22,0.2l-4.12,1.66l-0.05,0.72l4.45,2.65l0.51,3.75l-2.3,0.4l-0.25,0.64l2.79,3.69l-4.82,0.31l-0.36,0.29l0.16,0.44l2.62,1.8l-0.59,1.22l-3.3,0.7l-3.45,0.01l-0.29,0.68l3.03,3.12l0.02,1.34l-4.4,-1.73l-1.72,1.35l0.15,0.66l3.31,1.15l3.13,2.71l0.81,3.16l-3.85,0.75l-4.89,-4.26l-0.47,-0.03l-0.17,0.44l0.79,2.86l-2.71,2.21l-0.13,0.44l0.37,0.27l8.73,0.34l-12.32,6.64l-7.24,1.48l-2.94,0.08l-2.69,1.75l-3.43,4.41l-5.24,2.84l-1.73,0.18l-7.12,2.1l-2.15,2.52l-0.13,2.99l-1.19,2.45l-4.01,3.09l-0.14,0.44l0.97,2.9l-2.28,6.48l-3.1,0.2l-3.83,-3.07l-4.86,-0.02l-2.25,-1.93l-1.7,-3.79l-4.3,-4.84l-1.21,-2.49l-0.44,-3.8l-3.32,-3.63l0.84,-2.86l-1.56,-1.7l2.28,-4.6l3.83,-1.74l1.03,-1.96l0.52,-3.47l-0.59,-0.41l-4.17,2.21l-2.07,0.58l-2.72,-1.28l-0.15,-2.71l0.85,-2.09l2.01,-0.06l5.06,1.2l0.46,-0.23l-0.14,-0.49l-6.54,-4.47l-2.67,0.55l-1.58,-0.86l2.56,-4.01l-0.03,-0.48l-1.5,-1.74l-4.98,-8.5l-3.13,-1.96l0.03,-1.88l-0.24,-0.37l-6.85,-3.02l-5.36,-0.38l-12.7,0.58l-2.78,-1.57l-3.66,-2.77l5.73,-1.45l5.0,-0.28l0.38,-0.38l-0.35,-0.41l-10.67,-1.38l-5.3,-2.06l0.25,-1.54l18.41,-5.26l1.22,-2.27l-0.25,-0.55l-6.14,-1.86l1.68,-1.77l8.55,-4.03l3.59,-0.63l0.3,-0.54l-0.88,-2.27l5.47,-1.47l7.65,-0.95l7.55,-0.05l3.04,1.85l6.48,-3.27l5.81,2.22l3.56,0.5l5.16,1.94l0.5,-0.21l-0.17,-0.52l-5.71,-3.13l0.28,-2.13l8.12,-3.6l8.7,0.28l3.35,-2.34l8.71,-0.6l19.93,0.8Z\", \"name\": \"Greenland\"}, \"KW\": {\"path\": \"M540.81,207.91l0.37,0.86l-0.17,0.76l0.6,1.53l-0.95,0.04l-0.82,-1.28l-1.57,-0.18l1.31,-1.88l1.22,0.17Z\", \"name\": \"Kuwait\"}, \"GH\": {\"path\": \"M420.53,257.51l-0.01,0.72l0.96,1.2l0.24,3.73l0.59,0.95l-0.51,2.1l0.19,1.41l1.02,2.21l-6.97,2.84l-1.8,-0.57l0.04,-0.89l-1.02,-2.04l0.61,-2.65l1.07,-2.32l-0.96,-6.47l5.01,0.07l0.94,-0.39l0.61,0.11Z\", \"name\": \"Ghana\"}, \"OM\": {\"path\": \"M568.09,230.93l-0.91,1.67l-1.22,0.04l-0.6,0.76l-0.41,1.51l0.27,1.58l-1.16,0.05l-1.56,0.97l-0.76,1.74l-1.62,0.05l-0.98,0.65l-0.17,1.15l-0.89,0.52l-1.49,-0.18l-2.4,0.94l-2.47,-5.4l7.35,-2.71l1.67,-5.23l-1.12,-2.09l0.05,-0.83l0.67,-1.0l0.07,-1.05l0.9,-0.42l-0.05,-2.07l0.7,-0.01l1.0,1.62l1.51,1.08l3.3,0.84l1.73,2.29l0.81,0.37l-1.23,2.35l-0.99,0.79Z\", \"name\": \"Oman\"}, \"_1\": {\"path\": \"M531.15,258.94l1.51,0.12l5.13,-0.95l5.3,-1.48l-0.01,4.4l-2.67,3.39l-1.85,0.01l-8.04,-2.94l-2.55,-3.17l1.12,-1.71l2.04,2.34Z\", \"name\": \"Somaliland\"}, \"_0\": {\"path\": \"M472.77,172.64l-1.08,-1.29l0.96,-0.77l0.29,-0.83l1.98,1.64l-0.36,0.67l-1.79,0.58Z\", \"name\": \"Kosovo\"}, \"JO\": {\"path\": \"M518.64,201.38l-5.14,1.56l-0.19,0.65l2.16,2.39l-0.89,1.14l-1.71,0.34l-1.71,1.8l-2.34,-0.37l1.21,-4.32l0.56,-4.07l2.8,0.94l4.46,-2.71l0.79,2.66Z\", \"name\": \"Jordan\"}, \"HR\": {\"path\": \"M455.59,162.84l1.09,0.07l-0.82,0.94l-0.27,-1.01ZM456.96,162.92l0.62,-0.41l1.73,0.45l0.42,-0.4l-0.01,-0.59l0.86,-0.52l0.2,-1.05l1.63,-0.68l2.57,1.68l2.07,0.6l0.87,-0.31l1.05,1.57l-0.52,0.63l-1.05,-0.56l-1.68,0.04l-2.1,-0.5l-1.29,0.06l-0.57,0.49l-0.59,-0.47l-0.62,0.16l-0.46,1.7l1.79,2.42l2.79,2.75l-1.18,-0.87l-2.21,-0.87l-1.67,-1.78l0.13,-0.63l-1.05,-1.19l-0.32,-1.27l-1.42,-0.43Z\", \"name\": \"Croatia\"}, \"HT\": {\"path\": \"M237.05,238.38l-1.16,0.43l-0.91,-0.55l0.05,-0.2l2.02,0.31ZM237.53,238.43l1.06,0.12l-0.05,0.01l-1.01,-0.12ZM239.25,238.45l0.79,-0.51l0.06,-0.62l-1.02,-1.0l0.02,-0.82l-0.3,-0.4l-0.93,-0.32l3.16,0.45l0.02,1.84l-0.48,0.34l-0.08,0.58l0.54,0.72l-1.78,-0.26Z\", \"name\": \"Haiti\"}, \"HU\": {\"path\": \"M462.08,157.89l0.65,-1.59l-0.09,-0.44l0.64,-0.0l0.39,-0.34l0.1,-0.69l1.75,0.87l2.32,-0.37l0.43,-0.66l3.49,-0.78l0.69,-0.78l0.57,-0.14l2.57,0.93l0.67,-0.23l1.03,0.65l0.08,0.37l-1.42,0.71l-2.59,4.14l-1.8,0.53l-1.68,-0.1l-2.74,1.23l-1.85,-0.54l-2.54,-1.66l-0.66,-1.1Z\", \"name\": \"Hungary\"}, \"HN\": {\"path\": \"M199.6,249.52l-1.7,-1.21l0.06,-0.94l3.04,-2.14l2.37,0.28l1.27,-0.09l1.1,-0.52l1.3,0.28l1.14,-0.25l1.38,0.37l2.23,1.37l-2.36,0.93l-1.23,-0.39l-0.88,1.3l-1.28,0.99l-0.98,-0.22l-0.42,0.52l-0.96,0.05l-0.36,0.41l0.04,0.88l-0.52,0.6l-0.3,0.04l-0.3,-0.55l-0.66,-0.31l0.11,-0.67l-0.48,-0.65l-0.87,-0.26l-0.73,0.2Z\", \"name\": \"Honduras\"}, \"PR\": {\"path\": \"M256.17,238.73l-0.26,0.27l-2.83,0.05l-0.07,-0.55l1.95,-0.1l1.22,0.33Z\", \"name\": \"Puerto Rico\"}, \"PS\": {\"path\": \"M509.21,203.07l0.1,-0.06l-0.02,0.03l-0.09,0.03ZM509.36,202.91l-0.02,-0.63l-0.33,-0.16l0.31,-1.09l0.24,0.1l-0.2,1.78Z\", \"name\": \"Palestine\"}, \"PT\": {\"path\": \"M401.84,187.38l-0.64,0.47l-1.13,-0.35l-0.91,0.17l0.28,-1.78l-0.24,-1.78l-1.25,-0.56l-0.45,-0.84l0.17,-1.66l1.01,-1.18l0.69,-2.92l-0.04,-1.39l-0.59,-1.9l1.3,-0.85l0.84,1.35l3.1,-0.3l0.46,0.99l-1.05,0.94l-0.03,2.16l-0.41,0.57l-0.08,1.1l-0.79,0.18l-0.26,0.59l0.91,1.6l-0.63,1.75l0.76,1.09l-1.1,1.52l0.07,1.05Z\", \"name\": \"Portugal\"}, \"PY\": {\"path\": \"M274.9,336.12l0.74,1.52l-0.16,3.45l0.32,0.41l2.64,0.5l1.11,-0.47l1.4,0.59l0.36,0.6l0.53,3.42l1.27,0.4l0.98,-0.38l0.51,0.27l-0.0,1.18l-1.21,5.32l-2.09,1.9l-1.8,0.4l-4.71,-0.98l2.2,-3.63l-0.32,-1.5l-2.78,-1.28l-3.03,-1.94l-2.07,-0.44l-4.34,-4.06l0.91,-2.9l0.08,-1.42l1.07,-2.04l4.13,-0.72l2.18,0.03l2.05,1.17l0.03,0.59Z\", \"name\": \"Paraguay\"}, \"PA\": {\"path\": \"M213.8,263.68l0.26,-1.52l-0.36,-0.26l-0.01,-0.49l0.44,-0.1l0.93,1.4l1.26,0.03l0.77,0.49l1.38,-0.23l2.51,-1.11l0.86,-0.72l3.45,0.85l1.4,1.18l0.41,1.74l-0.21,0.34l-0.53,-0.12l-0.47,0.29l-0.16,0.6l-0.68,-1.28l0.45,-0.49l-0.19,-0.66l-0.47,-0.13l-0.54,-0.84l-1.5,-0.75l-1.1,0.16l-0.75,0.99l-1.62,0.84l-0.18,0.96l0.85,0.97l-0.58,0.45l-0.69,0.08l-0.34,-1.18l-1.27,0.03l-0.71,-1.05l-2.59,-0.46Z\", \"name\": \"Panama\"}, \"PG\": {\"path\": \"M808.58,298.86l2.54,2.56l-0.13,0.26l-0.33,0.12l-0.87,-0.78l-1.22,-2.16ZM801.41,293.04l0.5,0.29l0.26,0.27l-0.49,-0.35l-0.27,-0.21ZM803.17,294.58l0.59,0.5l0.08,1.06l-0.29,-0.91l-0.38,-0.65ZM796.68,298.41l0.52,0.75l1.43,-0.19l2.27,-1.81l-0.01,-1.43l1.12,0.16l-0.04,1.1l-0.7,1.28l-1.12,0.18l-0.62,0.79l-2.46,1.11l-1.17,-0.0l-3.08,-1.25l3.41,0.0l0.45,-0.68ZM789.15,303.55l2.31,1.8l1.59,2.61l1.34,0.13l-0.06,0.66l0.31,0.43l1.06,0.24l0.06,0.65l2.25,1.05l-1.22,0.13l-0.72,-0.63l-4.56,-0.65l-3.22,-2.87l-1.49,-2.34l-3.27,-1.1l-2.38,0.72l-1.59,0.86l-0.2,0.42l0.27,1.55l-1.55,0.68l-1.36,-0.4l-2.21,-0.09l-0.08,-15.41l8.39,2.93l2.95,2.4l0.6,1.64l4.02,1.49l0.31,0.68l-1.76,0.21l-0.33,0.52l0.55,1.68Z\", \"name\": \"Papua New Guinea\"}, \"PE\": {\"path\": \"M244.96,295.21l-1.26,-0.07l-0.57,0.42l-1.93,0.45l-2.98,1.75l-0.36,1.36l-0.58,0.8l0.12,1.37l-1.24,0.59l-0.22,1.22l-0.62,0.84l1.04,2.27l1.28,1.44l-0.41,0.84l0.32,0.57l1.48,0.13l1.16,1.37l2.21,0.07l1.63,-1.08l-0.13,3.02l0.3,0.4l1.14,0.29l1.31,-0.34l1.9,3.59l-0.48,0.85l-0.17,3.85l-0.94,1.59l0.35,0.75l-0.47,1.07l0.98,1.97l-2.1,3.82l-0.98,0.5l-2.17,-1.28l-0.39,-1.16l-4.95,-2.58l-4.46,-2.79l-1.84,-1.51l-0.91,-1.84l0.3,-0.96l-2.11,-3.33l-4.82,-9.68l-1.04,-1.2l-0.87,-1.94l-3.4,-2.48l0.58,-1.18l-1.13,-2.23l0.66,-1.49l1.45,-1.15l-0.6,0.98l0.07,0.92l0.47,0.36l1.74,0.03l0.97,1.17l0.54,0.07l1.42,-1.03l0.6,-1.84l1.42,-2.02l3.04,-1.04l2.73,-2.62l0.86,-1.74l-0.1,-1.87l1.44,1.02l0.9,1.25l1.06,0.59l1.7,2.73l1.86,0.31l1.45,-0.61l0.96,0.39l1.36,-0.19l1.45,0.89l-1.4,2.21l0.31,0.61l0.59,0.05l0.47,0.5Z\", \"name\": \"Peru\"}, \"PK\": {\"path\": \"M615.09,192.34l-1.83,1.81l-2.6,0.39l-3.73,-0.68l-1.58,1.33l-0.09,0.42l1.77,4.39l1.7,1.23l-1.69,1.27l-0.12,2.14l-2.33,2.64l-1.6,2.8l-2.46,2.67l-3.03,-0.07l-2.76,2.83l0.05,0.6l1.5,1.11l0.26,1.9l1.44,1.5l0.37,1.68l-5.01,-0.01l-1.78,1.7l-1.42,-0.52l-0.76,-1.87l-2.27,-2.15l-11.61,0.86l0.71,-2.34l3.43,-1.32l0.25,-0.44l-0.21,-1.24l-1.2,-0.65l-0.28,-2.46l-2.29,-1.14l-1.28,-1.94l2.82,0.94l2.62,-0.38l1.42,0.33l0.76,-0.56l1.71,0.19l3.25,-1.14l0.27,-0.36l0.08,-2.19l1.18,-1.32l1.68,0.0l0.58,-0.82l1.6,-0.3l1.19,0.16l0.98,-0.78l0.02,-1.88l0.93,-1.47l1.48,-0.66l0.19,-0.55l-0.66,-1.25l2.04,-0.11l0.69,-1.01l-0.02,-1.16l1.11,-1.06l-0.17,-1.78l-0.49,-1.03l1.15,-0.98l5.42,-0.91l2.6,-0.82l1.6,1.16l0.97,2.34l3.45,0.97Z\", \"name\": \"Pakistan\"}, \"PH\": {\"path\": \"M737.01,263.84l0.39,2.97l-0.44,1.18l-0.55,-1.53l-0.67,-0.14l-1.17,1.28l0.65,2.09l-0.42,0.69l-2.48,-1.23l-0.57,-1.49l0.65,-1.03l-0.1,-0.54l-1.59,-1.19l-0.56,0.08l-0.65,0.87l-1.23,0.0l-1.58,0.97l0.83,-1.8l2.56,-1.42l0.65,0.84l0.45,0.13l1.9,-0.69l0.56,-1.11l1.5,-0.06l0.38,-0.43l-0.09,-1.19l1.21,0.71l0.36,2.02ZM733.59,256.58l0.05,0.75l0.08,0.26l-0.8,-0.42l-0.18,-0.71l0.85,0.12ZM734.08,256.1l-0.12,-1.12l-1.0,-1.27l1.36,0.03l0.53,0.73l0.51,2.04l-1.27,-0.4ZM733.76,257.68l0.38,0.98l-0.32,0.15l-0.07,-1.13ZM724.65,238.43l1.46,0.7l0.72,-0.31l-0.32,1.17l0.79,1.71l-0.57,1.84l-1.53,1.04l-0.39,2.25l0.56,2.04l1.63,0.57l1.16,-0.27l2.71,1.23l-0.19,1.08l0.76,0.84l-0.08,0.36l-1.4,-0.9l-0.88,-1.27l-0.66,0.0l-0.38,0.55l-1.6,-1.31l-2.15,0.36l-0.87,-0.39l0.07,-0.61l0.66,-0.55l-0.01,-0.62l-0.75,-0.59l-0.72,0.44l-0.74,-0.87l-0.39,-2.49l0.32,0.27l0.66,-0.28l0.26,-3.97l0.7,-2.02l1.14,0.0ZM731.03,258.87l-0.88,0.85l-1.19,1.94l-1.05,-1.19l0.93,-1.1l0.32,-1.47l0.52,-0.06l-0.27,1.15l0.22,0.45l0.49,-0.12l1.0,-1.32l-0.08,0.85ZM726.83,255.78l0.83,0.38l1.17,-0.0l-0.02,0.48l-2.0,1.4l0.03,-2.26ZM724.81,252.09l-0.38,1.27l-1.42,-1.95l1.2,0.05l0.6,0.63ZM716.55,261.82l1.1,-0.95l0.03,-0.03l-0.28,0.36l-0.85,0.61ZM719.22,259.06l0.04,-0.06l0.8,-1.53l0.16,0.75l-1.0,0.84Z\", \"name\": \"Philippines\"}, \"PL\": {\"path\": \"M468.44,149.42l-1.11,-1.54l-1.86,-0.33l-0.48,-1.05l-1.72,-0.37l-0.65,0.69l-0.72,-0.36l0.11,-0.61l-0.33,-0.46l-1.75,-0.27l-1.04,-0.93l-0.94,-1.94l0.16,-1.22l-0.62,-1.8l-0.78,-1.07l0.57,-1.04l-0.48,-1.43l1.41,-0.83l6.91,-2.71l2.14,0.5l0.52,0.91l5.51,0.44l4.55,-0.05l1.07,0.31l0.48,0.84l0.15,1.58l0.65,1.2l-0.01,0.99l-1.27,0.58l-0.19,0.54l0.73,1.48l0.08,1.55l1.2,2.76l-0.17,0.58l-1.23,0.44l-2.27,2.72l0.18,0.95l-1.97,-1.03l-1.98,0.4l-1.36,-0.28l-1.24,0.58l-1.07,-0.97l-1.16,0.24Z\", \"name\": \"Poland\"}, \"-99\": {\"path\": \"M504.91,192.87l0.34,0.01l0.27,-0.07l-0.29,0.26l-0.31,-0.2Z\", \"name\": \"N. Cyprus\"}, \"ZM\": {\"path\": \"M481.47,313.3l0.39,0.31l2.52,0.14l0.99,1.17l2.01,0.35l1.4,-0.64l0.69,1.17l1.78,0.33l1.84,2.35l2.23,0.18l0.4,-0.43l-0.21,-2.74l-0.62,-0.3l-0.48,0.32l-1.98,-1.17l0.72,-5.29l-0.51,-1.18l0.57,-1.3l3.68,-0.62l0.26,0.63l1.21,0.63l0.9,-0.22l2.16,0.67l1.33,0.71l1.07,1.02l0.56,1.87l-0.88,2.7l0.43,2.09l-0.73,0.87l-0.76,2.37l0.59,0.68l-6.6,1.83l-0.29,0.44l0.19,1.45l-1.68,0.35l-1.43,1.02l-0.38,0.87l-0.87,0.26l-3.48,3.69l-4.16,-0.53l-1.52,-1.0l-1.77,-0.13l-1.83,0.52l-3.04,-3.4l0.11,-7.59l4.82,0.03l0.39,-0.49l-0.18,-0.76l0.33,-0.83l-0.4,-1.36l0.24,-1.05Z\", \"name\": \"Zambia\"}, \"EH\": {\"path\": \"M384.42,230.28l0.25,-0.79l1.06,-1.29l0.8,-3.51l3.38,-2.78l0.7,-1.81l0.06,4.84l-1.98,0.2l-0.94,1.59l0.39,3.56l-3.7,-0.01ZM392.01,218.1l0.7,-1.8l1.77,-0.24l2.09,0.34l0.95,-0.62l1.28,-0.07l-0.0,2.51l-6.79,-0.12Z\", \"name\": \"W. Sahara\"}, \"EE\": {\"path\": \"M485.71,115.04l2.64,0.6l2.56,0.11l-1.6,1.91l0.61,3.54l-0.81,0.87l-1.78,-0.01l-3.22,-1.76l-1.8,0.45l0.21,-1.53l-0.58,-0.41l-0.69,0.34l-1.26,-1.03l-0.17,-1.63l2.83,-0.92l3.05,-0.52Z\", \"name\": \"Estonia\"}, \"EG\": {\"path\": \"M492.06,205.03l1.46,0.42l2.95,-1.64l2.04,-0.21l1.53,0.3l0.59,1.19l0.69,0.04l0.41,-0.64l1.81,0.58l1.95,0.16l1.04,-0.51l1.42,4.08l-2.03,4.54l-1.66,-1.77l-1.76,-3.85l-0.64,-0.12l-0.36,0.67l1.04,2.88l3.44,6.95l1.78,3.04l2.03,2.65l-0.36,0.53l0.23,2.01l2.7,2.19l-28.41,0.0l0.0,-18.96l-0.73,-2.2l0.59,-1.56l-0.32,-1.26l0.68,-0.99l3.06,-0.04l4.82,1.52Z\", \"name\": \"Egypt\"}, \"ZA\": {\"path\": \"M467.14,373.21l-0.13,-1.96l-0.68,-1.56l0.7,-0.68l-0.13,-2.33l-4.56,-8.19l0.77,-0.86l0.6,0.45l0.69,1.31l2.83,0.72l1.5,-0.26l2.24,-1.39l0.19,-9.55l1.35,2.3l-0.21,1.5l0.61,1.2l0.4,0.19l1.79,-0.27l2.6,-2.07l0.69,-1.32l0.96,-0.48l2.19,1.04l2.04,0.13l1.77,-0.65l0.85,-2.12l1.38,-0.33l1.59,-2.76l2.15,-1.89l3.41,-1.87l2.0,0.45l1.02,-0.28l0.99,0.2l1.75,5.29l-0.38,3.25l-0.81,-0.23l-1.0,0.46l-0.87,1.68l-0.05,1.16l1.97,1.84l1.47,-0.29l0.69,-1.18l1.09,0.01l-0.76,3.69l-0.58,1.09l-2.2,1.79l-3.17,4.76l-2.8,2.83l-3.57,2.88l-2.53,1.05l-1.22,0.14l-0.51,0.7l-1.18,-0.32l-1.39,0.5l-2.59,-0.52l-1.61,0.33l-1.18,-0.11l-2.55,1.1l-2.1,0.44l-1.6,1.07l-0.85,0.05l-0.93,-0.89l-0.93,-0.15l-0.97,-1.13l-0.25,0.05ZM491.45,364.19l0.62,-0.93l1.48,-0.59l1.18,-2.19l-0.07,-0.49l-1.99,-1.69l-1.66,0.56l-1.43,1.14l-1.34,1.73l0.02,0.51l1.88,2.11l1.31,-0.16Z\", \"name\": \"South Africa\"}, \"EC\": {\"path\": \"M231.86,285.53l0.29,1.59l-0.69,1.45l-2.61,2.51l-3.13,1.11l-1.53,2.18l-0.49,1.68l-1.0,0.73l-1.02,-1.11l-1.78,-0.16l0.67,-1.15l-0.24,-0.86l1.25,-2.13l-0.54,-1.09l-0.67,-0.08l-0.72,0.87l-0.87,-0.64l0.35,-0.69l-0.36,-1.96l0.81,-0.51l0.45,-1.51l0.92,-1.57l-0.07,-0.97l2.65,-1.33l2.75,1.35l0.77,1.05l2.12,0.35l0.76,-0.32l1.96,1.21Z\", \"name\": \"Ecuador\"}, \"AL\": {\"path\": \"M470.32,171.8l0.74,0.03l0.92,0.89l-0.17,1.95l0.36,1.28l1.01,0.82l-1.82,2.83l-0.19,-0.61l-1.25,-0.89l-0.18,-1.2l0.53,-2.82l-0.54,-1.47l0.6,-0.83Z\", \"name\": \"Albania\"}, \"AO\": {\"path\": \"M461.55,300.03l1.26,3.15l1.94,2.36l2.47,-0.53l1.25,0.32l0.44,-0.18l0.93,-1.92l1.31,-0.08l0.41,-0.44l0.47,-0.0l-0.1,0.41l0.39,0.49l2.65,-0.02l0.03,1.19l0.48,1.01l-0.34,1.52l0.18,1.55l0.83,1.04l-0.13,2.85l0.54,0.39l3.96,-0.41l-0.1,1.79l0.39,1.05l-0.24,1.43l-4.7,-0.03l-0.4,0.39l-0.12,8.13l2.92,3.49l-3.83,0.88l-5.89,-0.36l-1.88,-1.24l-10.47,0.22l-1.3,-1.01l-1.85,-0.16l-2.4,0.77l-0.15,-1.06l0.33,-2.16l1.0,-3.45l1.35,-3.2l2.24,-2.8l0.33,-2.06l-0.13,-1.53l-0.8,-1.08l-1.21,-2.87l0.87,-1.62l-1.27,-4.12l-1.17,-1.53l2.47,-0.63l7.03,0.03ZM451.71,298.87l-0.47,-1.25l1.25,-1.11l0.32,0.3l-0.99,1.03l-0.12,1.03Z\", \"name\": \"Angola\"}, \"KZ\": {\"path\": \"M552.8,172.89l0.46,-1.27l-0.48,-1.05l-2.96,-1.19l-1.06,-2.58l-1.37,-0.87l-0.03,-0.3l1.95,0.23l0.45,-0.38l0.08,-1.96l1.75,-0.41l2.1,0.45l0.48,-0.33l0.45,-3.04l-0.45,-2.09l-0.41,-0.31l-2.42,0.15l-2.36,-0.73l-2.87,1.37l-2.17,0.61l-0.85,-0.34l0.13,-1.61l-1.6,-2.12l-2.02,-0.08l-1.78,-1.82l1.29,-2.18l-0.57,-0.95l1.62,-2.91l2.21,1.63l0.63,-0.27l0.29,-2.22l4.92,-3.43l3.71,-0.08l8.4,3.6l2.92,-1.36l3.77,-0.06l3.11,1.66l0.51,-0.11l0.6,-0.81l3.31,0.13l0.39,-0.25l0.63,-1.57l-0.17,-0.5l-3.5,-1.98l1.87,-1.27l-0.13,-1.03l1.98,-0.72l0.18,-0.62l-1.59,-2.06l0.81,-0.82l9.23,-1.18l1.33,-0.88l6.18,-1.26l2.26,-1.42l4.08,0.68l0.73,3.33l0.51,0.3l2.48,-0.8l2.79,1.02l-0.17,1.56l0.43,0.44l2.55,-0.24l4.89,-2.53l0.03,0.32l3.15,2.61l5.56,8.47l0.65,0.02l1.12,-1.46l3.15,1.74l3.76,-0.78l1.15,0.49l1.14,1.8l1.84,0.76l0.99,1.29l3.35,-0.25l1.02,1.52l-1.6,1.81l-1.93,0.28l-0.34,0.38l-0.11,3.05l-1.13,1.16l-4.75,-1.0l-0.46,0.27l-1.76,5.47l-1.1,0.59l-4.91,1.23l-0.27,0.54l2.1,4.97l-1.37,0.63l-0.23,0.41l0.13,1.13l-0.88,-0.25l-1.42,-1.13l-7.89,-0.4l-0.92,0.31l-3.73,-1.22l-1.42,0.63l-0.53,1.66l-3.72,-0.94l-1.85,0.43l-0.76,1.4l-4.65,2.62l-1.13,2.08l-0.44,0.01l-0.92,-1.4l-2.87,-0.09l-0.45,-2.14l-0.38,-0.32l-0.8,-0.01l0.0,-2.96l-3.0,-2.22l-7.31,0.58l-2.35,-2.68l-6.71,-3.69l-6.45,1.83l-0.29,0.39l0.1,10.85l-0.7,0.08l-1.62,-2.17l-1.83,-0.96l-3.11,0.59l-0.64,0.51Z\", \"name\": \"Kazakhstan\"}, \"ET\": {\"path\": \"M516.04,247.79l1.1,0.84l1.63,-0.45l0.68,0.47l1.63,0.03l2.01,0.94l1.73,1.66l1.64,2.07l-1.52,2.04l0.16,1.72l0.39,0.38l2.05,0.0l-0.36,1.03l2.86,3.58l8.32,3.08l1.31,0.02l-6.32,6.75l-3.1,0.11l-2.36,1.77l-1.47,0.04l-0.86,0.79l-1.38,-0.0l-1.32,-0.81l-2.29,1.05l-0.76,0.98l-3.29,-0.41l-3.07,-2.07l-1.8,-0.07l-0.62,-0.6l0.0,-1.24l-0.28,-0.38l-1.15,-0.37l-1.4,-2.59l-1.19,-0.68l-0.47,-1.0l-1.27,-1.23l-1.16,-0.22l0.43,-0.72l1.45,-0.28l0.41,-0.95l-0.03,-2.21l0.68,-2.44l1.05,-0.63l1.43,-3.06l1.57,-1.37l1.02,-2.51l0.35,-1.88l2.52,0.46l0.44,-0.24l0.58,-1.43Z\", \"name\": \"Ethiopia\"}, \"ZW\": {\"path\": \"M498.91,341.09l-1.11,-0.22l-0.92,0.28l-2.09,-0.44l-1.5,-1.11l-1.89,-0.43l-0.62,-1.4l-0.01,-0.84l-0.3,-0.38l-0.97,-0.25l-2.71,-2.74l-1.92,-3.32l3.83,0.45l3.73,-3.82l1.08,-0.44l0.26,-0.77l1.25,-0.9l1.41,-0.26l0.5,0.89l1.99,-0.05l1.72,1.17l1.11,0.17l1.05,0.66l0.01,2.99l-0.59,3.76l0.38,0.86l-0.23,1.23l-0.39,0.35l-0.63,1.81l-2.43,2.75Z\", \"name\": \"Zimbabwe\"}, \"ES\": {\"path\": \"M416.0,169.21l1.07,1.17l4.61,1.38l1.06,-0.57l2.6,1.26l2.71,-0.3l0.09,1.12l-2.14,1.8l-3.11,0.61l-0.31,0.31l-0.2,0.89l-1.54,1.69l-0.97,2.4l0.84,1.74l-1.32,1.27l-0.48,1.68l-1.88,0.65l-1.66,2.07l-5.36,-0.01l-1.79,1.08l-0.89,0.98l-0.88,-0.17l-0.79,-0.82l-0.68,-1.59l-2.37,-0.63l-0.11,-0.5l1.21,-1.82l-0.77,-1.13l0.61,-1.68l-0.76,-1.62l0.87,-0.49l0.09,-1.25l0.42,-0.6l0.03,-2.11l0.99,-0.69l0.13,-0.5l-1.03,-1.73l-1.46,-0.11l-0.61,0.38l-1.06,0.0l-0.52,-1.23l-0.53,-0.21l-1.32,0.67l-0.01,-1.49l-0.75,-0.96l3.03,-1.88l2.99,0.53l3.32,-0.02l2.63,0.51l6.01,-0.06Z\", \"name\": \"Spain\"}, \"ER\": {\"path\": \"M520.38,246.23l3.42,2.43l3.5,3.77l0.84,0.54l-0.95,-0.01l-3.51,-3.89l-2.33,-1.15l-1.73,-0.07l-0.91,-0.51l-1.26,0.51l-1.34,-1.02l-0.61,0.17l-0.66,1.61l-2.35,-0.43l-0.17,-0.67l1.29,-5.29l0.61,-0.61l1.95,-0.53l0.87,-1.01l1.17,2.41l0.68,2.33l1.49,1.43Z\", \"name\": \"Eritrea\"}, \"ME\": {\"path\": \"M468.91,172.53l-1.22,-1.02l0.47,-1.81l0.89,-0.72l2.26,1.51l-0.5,0.57l-0.75,-0.27l-1.14,1.73Z\", \"name\": \"Montenegro\"}, \"MD\": {\"path\": \"M488.41,153.73l1.4,-0.27l1.72,0.93l1.07,0.15l0.85,0.65l-0.14,0.84l0.96,0.85l1.12,2.47l-1.15,-0.07l-0.66,-0.41l-0.52,0.25l-0.09,0.86l-1.08,1.89l-0.27,-0.86l0.25,-1.34l-0.16,-1.6l-3.29,-4.34Z\", \"name\": \"Moldova\"}, \"MG\": {\"path\": \"M545.91,319.14l0.4,3.03l0.62,1.21l-0.21,1.02l-0.57,-0.8l-0.69,-0.01l-0.47,0.76l0.41,2.12l-0.18,0.87l-0.73,0.78l-0.15,2.14l-4.71,15.2l-1.06,2.88l-3.92,1.64l-3.12,-1.49l-0.6,-1.21l-0.19,-2.4l-0.86,-2.05l-0.21,-1.77l0.38,-1.62l1.21,-0.75l0.01,-0.76l1.19,-2.04l0.23,-1.66l-1.06,-2.99l-0.19,-2.21l0.81,-1.33l0.32,-1.46l4.63,-1.22l3.44,-3.0l0.85,-1.4l-0.08,-0.7l0.78,-0.04l1.38,-1.77l0.13,-1.64l0.45,-0.61l1.16,1.69l0.59,1.6Z\", \"name\": \"Madagascar\"}, \"MA\": {\"path\": \"M378.78,230.02l0.06,-0.59l0.92,-0.73l0.82,-1.37l-0.09,-1.04l0.79,-1.7l1.31,-1.58l0.96,-0.59l0.66,-1.55l0.09,-1.47l0.81,-1.48l1.72,-1.07l1.55,-2.69l1.16,-0.96l2.44,-0.39l1.94,-1.82l1.31,-0.78l2.09,-2.28l-0.51,-3.65l1.24,-3.7l1.5,-1.75l4.46,-2.57l2.37,-4.47l1.44,0.01l1.68,1.21l2.32,-0.19l3.47,0.65l0.8,1.54l0.16,1.71l0.86,2.96l0.56,0.59l-0.26,0.61l-3.05,0.44l-1.26,1.05l-1.33,0.22l-0.33,0.37l-0.09,1.78l-2.68,1.0l-1.07,1.42l-4.47,1.13l-4.04,2.01l-0.54,4.64l-1.15,0.06l-0.92,0.61l-1.96,-0.35l-2.42,0.54l-0.74,1.9l-0.86,0.4l-1.14,3.26l-3.53,3.01l-0.8,3.55l-0.96,1.1l-0.29,0.82l-4.95,0.18Z\", \"name\": \"Morocco\"}, \"UZ\": {\"path\": \"M598.64,172.75l-1.63,1.52l0.06,0.64l1.85,1.12l1.97,-0.64l2.21,1.17l-2.52,1.68l-2.59,-0.22l-0.18,-0.41l0.46,-1.23l-0.45,-0.53l-3.35,0.69l-2.1,3.51l-1.87,-0.12l-1.03,1.51l0.22,0.55l1.64,0.62l0.46,1.83l-1.19,2.49l-2.66,-0.53l0.05,-1.36l-0.26,-0.39l-3.3,-1.23l-2.56,-1.4l-4.4,-3.34l-1.34,-3.14l-1.08,-0.6l-2.58,0.13l-0.69,-0.44l-0.47,-2.52l-3.37,-1.6l-0.43,0.05l-2.07,1.72l-2.1,1.01l-0.21,0.47l0.28,1.01l-1.91,0.03l-0.09,-10.5l5.99,-1.7l6.19,3.54l2.71,2.84l7.05,-0.67l2.71,2.01l-0.17,2.81l0.39,0.42l0.9,0.02l0.44,2.14l0.38,0.32l2.94,0.09l0.95,1.42l1.28,-0.24l1.05,-2.04l4.43,-2.5Z\", \"name\": \"Uzbekistan\"}, \"MM\": {\"path\": \"M673.9,230.21l-1.97,1.57l-0.57,0.96l-1.4,0.6l-1.36,1.05l-1.99,0.36l-1.08,2.66l-0.91,0.4l-0.19,0.55l1.21,2.27l2.52,3.43l-0.79,1.91l-0.74,0.41l-0.17,0.52l0.65,1.37l1.61,1.95l0.25,2.58l0.9,2.13l-1.92,3.57l0.68,-2.25l-0.81,-1.74l0.19,-2.65l-1.05,-1.53l-1.24,-6.17l-1.12,-2.26l-0.6,-0.13l-4.34,3.02l-2.39,-0.65l0.77,-2.84l-0.52,-2.61l-1.91,-2.96l0.25,-0.75l-0.29,-0.51l-1.33,-0.3l-1.61,-1.93l-0.1,-1.3l0.82,-0.24l0.04,-1.64l1.02,-0.52l0.21,-0.45l-0.23,-0.95l0.54,-0.96l0.08,-2.22l1.46,0.45l0.47,-0.2l1.12,-2.19l0.16,-1.35l1.33,-2.16l-0.0,-1.52l2.89,-1.66l1.63,0.44l0.5,-0.44l-0.17,-1.4l0.64,-0.36l0.08,-1.04l0.77,-0.11l0.71,1.35l1.06,0.69l-0.03,3.86l-2.38,2.37l-0.3,3.15l0.46,0.43l2.28,-0.38l0.51,2.08l1.47,0.67l-0.6,1.8l0.19,0.48l2.97,1.48l1.64,-0.55l0.02,0.32Z\", \"name\": \"Myanmar\"}, \"ML\": {\"path\": \"M392.61,254.08l-0.19,-2.37l-0.99,-0.87l-0.44,-1.3l-0.09,-1.28l0.81,-0.58l0.35,-1.24l2.37,0.65l1.31,-0.47l0.86,0.15l0.66,-0.56l9.83,-0.04l0.38,-0.28l0.56,-1.8l-0.44,-0.65l-2.35,-21.95l3.27,-0.04l16.7,11.38l0.74,1.31l2.5,1.09l0.02,1.38l0.44,0.39l2.34,-0.21l0.01,5.38l-1.28,1.61l-0.26,1.49l-5.31,0.57l-1.07,0.92l-2.9,0.1l-0.86,-0.48l-1.38,0.36l-2.4,1.08l-0.6,0.87l-1.85,1.09l-0.43,0.7l-0.79,0.39l-1.44,-0.21l-0.81,0.84l-0.34,1.64l-1.91,2.02l-0.06,1.03l-0.67,1.22l0.13,1.16l-0.97,0.39l-0.23,-0.64l-0.52,-0.24l-1.35,0.4l-0.34,0.55l-2.69,-0.28l-0.37,-0.35l-0.02,-0.9l-0.65,-0.35l0.45,-0.64l-0.03,-0.53l-2.12,-2.44l-0.76,-0.01l-2.0,1.16l-0.78,-0.15l-0.8,-0.67l-1.21,0.23Z\", \"name\": \"Mali\"}, \"MN\": {\"path\": \"M676.61,146.48l3.81,1.68l5.67,-1.0l2.37,0.41l2.34,1.5l1.79,1.75l2.29,-0.03l3.12,0.52l2.47,-0.81l3.41,-0.59l3.53,-2.21l1.25,0.29l1.53,1.13l2.27,-0.21l-2.66,5.01l0.64,1.68l0.47,0.21l1.32,-0.38l2.38,0.48l2.02,-1.11l1.76,0.89l2.06,2.02l-0.13,0.53l-1.72,-0.29l-3.77,0.46l-1.88,0.99l-1.76,1.99l-3.71,1.17l-2.45,1.6l-3.83,-0.87l-0.41,0.17l-1.31,1.99l1.04,2.24l-1.52,0.9l-1.74,1.57l-2.79,1.02l-3.78,0.13l-4.05,1.05l-2.77,1.52l-1.16,-0.85l-2.94,0.0l-3.62,-1.79l-2.58,-0.49l-3.4,0.41l-5.12,-0.67l-2.63,0.06l-1.31,-1.6l-1.4,-3.0l-1.48,-0.33l-3.13,-1.94l-6.16,-0.93l-0.71,-1.06l0.86,-3.82l-1.93,-2.71l-3.5,-1.18l-1.95,-1.58l-0.5,-1.72l2.34,-0.52l4.75,-2.8l3.62,-1.47l2.18,0.97l2.46,0.05l1.81,1.53l2.46,0.12l3.95,0.71l2.43,-2.28l0.08,-0.48l-0.9,-1.72l2.24,-2.98l2.62,1.27l4.94,1.17l0.43,2.24Z\", \"name\": \"Mongolia\"}, \"MK\": {\"path\": \"M472.8,173.98l0.49,-0.71l3.57,-0.71l1.0,0.77l0.13,1.45l-0.65,0.53l-1.15,-0.05l-1.12,0.67l-1.39,0.22l-0.79,-0.55l-0.29,-1.03l0.19,-0.6Z\", \"name\": \"Macedonia\"}, \"MW\": {\"path\": \"M505.5,309.31l0.85,1.95l0.15,2.86l-0.69,1.65l0.71,1.8l0.06,1.28l0.49,0.64l0.07,1.06l0.4,0.55l0.8,-0.23l0.55,0.61l0.69,-0.21l0.34,0.6l0.19,2.94l-1.04,0.62l-0.54,1.25l-1.11,-1.08l-0.16,-1.56l0.51,-1.31l-0.32,-1.3l-0.99,-0.65l-0.82,0.12l-2.36,-1.64l0.63,-1.96l0.82,-1.18l-0.46,-2.01l0.9,-2.86l-0.94,-2.51l0.96,0.18l0.29,0.4Z\", \"name\": \"Malawi\"}, \"MR\": {\"path\": \"M407.36,220.66l-2.58,0.03l-0.39,0.44l2.42,22.56l0.36,0.43l-0.39,1.24l-9.75,0.04l-0.56,0.53l-0.91,-0.11l-1.27,0.45l-1.61,-0.66l-0.97,0.03l-0.36,0.29l-0.38,1.35l-0.42,0.23l-2.93,-3.4l-2.96,-1.52l-1.62,-0.03l-1.27,0.54l-1.12,-0.2l-0.65,0.4l-0.08,-0.49l0.68,-1.29l0.31,-2.43l-0.57,-3.91l0.23,-1.21l-0.69,-1.5l-1.15,-1.02l0.25,-0.39l9.58,0.02l0.4,-0.45l-0.46,-3.68l0.47,-1.04l2.12,-0.21l0.36,-0.4l-0.08,-6.4l7.81,0.13l0.41,-0.4l0.01,-3.31l7.76,5.35Z\", \"name\": \"Mauritania\"}, \"UG\": {\"path\": \"M498.55,276.32l0.7,-0.46l1.65,0.5l1.96,-0.57l1.7,0.01l1.45,-0.98l0.91,1.33l1.33,3.95l-2.57,4.03l-1.46,-0.4l-2.54,0.91l-1.37,1.61l-0.01,0.81l-2.42,-0.01l-2.26,1.01l-0.17,-1.59l0.58,-1.04l0.14,-1.94l1.37,-2.28l1.78,-1.58l-0.17,-0.65l-0.72,-0.24l0.13,-2.43Z\", \"name\": \"Uganda\"}, \"MY\": {\"path\": \"M717.47,273.46l-1.39,0.65l-2.12,-0.41l-2.88,-0.0l-0.38,0.28l-0.84,2.75l-0.99,0.96l-1.21,3.29l-1.73,0.45l-2.45,-0.68l-1.39,0.31l-1.33,1.15l-1.59,-0.14l-1.41,0.44l-1.44,-1.19l-0.18,-0.73l1.34,0.53l1.93,-0.47l0.75,-2.22l4.02,-1.03l2.75,-3.21l0.82,0.94l0.64,-0.05l0.4,-0.65l0.96,0.06l0.42,-0.36l0.24,-2.68l1.81,-1.64l1.21,-1.86l0.63,-0.01l1.07,1.05l0.34,1.28l3.44,1.35l-0.06,0.35l-1.37,0.1l-0.35,0.54l0.32,0.88ZM673.68,269.59l0.17,1.09l0.47,0.33l1.65,-0.3l0.87,-0.94l1.61,1.52l0.98,1.56l-0.12,2.81l0.41,2.29l0.95,0.9l0.88,2.44l-1.27,0.12l-5.1,-3.67l-0.34,-1.29l-1.37,-1.59l-0.33,-1.97l-0.88,-1.4l0.25,-1.68l-0.46,-1.05l1.63,0.84Z\", \"name\": \"Malaysia\"}, \"MX\": {\"path\": \"M133.12,200.41l0.2,0.47l9.63,3.33l6.96,-0.02l0.4,-0.4l0.0,-0.74l3.77,0.0l3.55,2.93l1.39,2.83l1.52,1.04l2.08,0.82l0.47,-0.14l1.46,-2.0l1.73,-0.04l1.59,0.98l2.05,3.35l1.47,1.56l1.26,3.14l2.18,1.02l2.26,0.58l-1.18,3.72l-0.42,5.04l1.79,4.89l1.62,1.89l0.61,1.52l1.2,1.42l2.55,0.66l1.37,1.1l7.54,-1.89l1.86,-1.3l1.14,-4.3l4.1,-1.21l3.57,-0.11l0.32,0.3l-0.06,0.94l-1.26,1.45l-0.67,1.71l0.38,0.7l-0.72,2.27l-0.49,-0.3l-1.0,0.08l-1.0,1.39l-0.47,-0.11l-0.53,0.47l-4.26,-0.02l-0.4,0.4l-0.0,1.06l-1.1,0.26l0.1,0.44l1.82,1.44l0.56,0.91l-3.19,0.21l-1.21,2.09l0.24,0.72l-0.2,0.44l-2.24,-2.18l-1.45,-0.93l-2.22,-0.69l-1.52,0.22l-3.07,1.16l-10.55,-3.85l-2.86,-1.96l-3.78,-0.92l-1.08,-1.19l-2.62,-1.43l-1.18,-1.54l-0.38,-0.81l0.66,-0.63l-0.18,-0.53l0.52,-0.76l0.01,-0.91l-2.0,-3.82l-2.21,-2.63l-2.53,-2.09l-1.19,-1.62l-2.2,-1.17l-0.3,-0.43l0.34,-1.48l-0.21,-0.45l-1.23,-0.6l-1.36,-1.2l-0.59,-1.78l-1.54,-0.47l-2.44,-2.55l-0.16,-0.9l-1.33,-2.03l-0.84,-1.99l-0.16,-1.33l-1.81,-1.1l-0.97,0.05l-1.31,-0.7l-0.57,0.22l-0.4,1.12l0.72,3.77l3.51,3.89l0.28,0.78l0.53,0.26l0.41,1.43l1.33,1.73l1.58,1.41l0.8,2.39l1.43,2.41l0.13,1.32l0.37,0.36l1.04,0.08l1.67,2.28l-0.85,0.76l-0.66,-1.51l-1.68,-1.54l-2.91,-1.87l0.06,-1.82l-0.54,-1.68l-2.91,-2.03l-0.55,0.09l-1.95,-1.1l-0.88,-0.94l0.68,-0.08l0.93,-1.01l0.08,-1.78l-1.93,-1.94l-1.46,-0.77l-3.75,-7.56l4.88,-0.42Z\", \"name\": \"Mexico\"}, \"VU\": {\"path\": \"M839.04,322.8l0.22,1.14l-0.44,0.03l-0.2,-1.45l0.42,0.27Z\", \"name\": \"Vanuatu\"}, \"FR\": {\"path\": \"M444.48,172.62l-0.64,1.78l-0.58,-0.31l-0.49,-1.72l0.4,-0.89l1.0,-0.72l0.3,1.85ZM429.64,147.1l1.78,1.58l1.46,-0.13l2.1,1.42l1.35,0.27l1.23,0.83l3.04,0.5l-1.03,1.85l-0.3,2.12l-0.41,0.32l-0.95,-0.24l-0.5,0.43l0.06,0.61l-1.81,1.92l-0.04,1.42l0.55,0.38l0.88,-0.36l0.61,0.97l-0.03,1.0l0.57,0.91l-0.75,1.09l0.65,2.39l1.27,0.57l-0.18,0.82l-2.01,1.53l-4.77,-0.8l-3.82,1.0l-0.53,1.85l-2.49,0.34l-2.71,-1.31l-1.16,0.57l-4.31,-1.29l-0.72,-0.86l1.19,-1.78l0.39,-6.45l-2.58,-3.3l-1.9,-1.66l-3.72,-1.23l-0.19,-1.72l2.81,-0.61l4.12,0.81l0.47,-0.48l-0.6,-2.77l1.94,0.95l5.83,-2.54l0.92,-2.74l1.6,-0.49l0.24,0.78l1.36,0.33l1.05,1.19ZM289.01,278.39l-0.81,0.8l-0.78,0.12l-0.5,-0.66l-0.56,-0.1l-0.91,0.6l-0.46,-0.22l1.09,-2.96l-0.96,-1.77l-0.17,-1.49l1.07,-1.77l2.32,0.75l2.51,2.01l0.3,0.74l-2.14,3.96Z\", \"name\": \"France\"}, \"FI\": {\"path\": \"M492.17,76.39l-0.23,3.5l3.52,2.63l-2.08,2.88l-0.02,0.44l2.8,4.56l-1.59,3.31l2.16,3.24l-0.94,2.39l0.14,0.47l3.44,2.51l-0.77,1.62l-7.52,6.95l-4.5,0.31l-4.38,1.37l-3.8,0.74l-1.44,-1.96l-2.17,-1.11l0.5,-3.66l-1.16,-3.33l1.09,-2.08l2.21,-2.42l5.67,-4.32l1.64,-0.83l0.21,-0.42l-0.46,-2.02l-3.38,-1.89l-0.75,-1.43l-0.22,-6.74l-6.79,-4.8l0.8,-0.62l2.54,2.12l3.46,-0.12l3.0,0.96l2.51,-2.11l1.17,-3.08l3.55,-1.38l2.76,1.53l-0.95,2.79Z\", \"name\": \"Finland\"}, \"FJ\": {\"path\": \"M871.53,326.34l-2.8,1.05l-0.08,-0.23l2.97,-1.21l-0.1,0.39ZM867.58,329.25l0.43,0.37l-0.27,0.88l-1.24,0.28l-1.04,-0.24l-0.14,-0.66l0.63,-0.58l0.92,0.26l0.7,-0.31Z\", \"name\": \"Fiji\"}, \"FK\": {\"path\": \"M274.36,425.85l1.44,1.08l-0.47,0.73l-3.0,0.89l-0.96,-1.0l-0.52,-0.05l-1.83,1.29l-0.73,-0.88l2.46,-1.64l1.93,0.76l1.67,-1.19Z\", \"name\": \"Falkland Is.\"}, \"NI\": {\"path\": \"M202.33,252.67l0.81,-0.18l1.03,-1.02l-0.04,-0.88l0.68,-0.0l0.63,-0.54l0.97,0.22l1.53,-1.26l0.58,-0.99l1.17,0.34l2.41,-0.94l0.13,1.32l-0.81,1.94l0.1,2.74l-0.36,0.37l-0.11,1.75l-0.47,0.81l0.18,1.14l-1.73,-0.85l-0.71,0.27l-1.47,-0.6l-0.52,0.16l-4.01,-3.81Z\", \"name\": \"Nicaragua\"}, \"NL\": {\"path\": \"M430.31,143.39l0.6,-0.5l2.13,-4.8l3.2,-1.33l1.74,0.08l0.33,0.8l-0.59,2.92l-0.5,0.99l-1.26,0.0l-0.4,0.45l0.33,2.7l-2.2,-1.78l-2.62,0.58l-0.75,-0.11Z\", \"name\": \"Netherlands\"}, \"NO\": {\"path\": \"M491.44,67.41l6.8,2.89l-2.29,0.86l-0.15,0.65l2.33,2.38l-4.98,1.79l0.84,-2.45l-0.18,-0.48l-3.55,-1.8l-3.89,1.52l-1.42,3.38l-2.12,1.72l-2.64,-1.0l-3.11,0.21l-2.66,-2.22l-0.5,-0.01l-1.41,1.1l-1.44,0.17l-0.35,0.35l-0.32,2.47l-4.32,-0.64l-0.44,0.29l-0.58,2.11l-2.45,0.2l-4.15,7.68l-3.88,5.76l0.78,1.62l-0.64,1.16l-2.24,-0.06l-0.38,0.24l-1.66,3.89l0.15,5.17l1.57,2.04l-0.78,4.16l-2.02,2.48l-0.85,1.63l-1.3,-1.75l-0.58,-0.07l-4.87,4.19l-3.1,0.79l-3.16,-1.7l-0.85,-3.77l-0.77,-8.55l2.14,-2.31l6.55,-3.27l5.02,-4.17l10.63,-13.84l10.98,-8.7l5.35,-1.91l4.34,0.12l3.69,-3.64l4.49,0.19l4.37,-0.89ZM484.55,20.04l4.26,1.75l-3.1,2.55l-7.1,0.65l-7.08,-0.9l-0.37,-1.31l-0.37,-0.29l-3.44,-0.1l-2.08,-2.0l6.87,-1.44l3.9,1.31l2.39,-1.64l6.13,1.4ZM481.69,33.93l-4.45,1.74l-3.54,-0.99l1.12,-0.9l0.05,-0.58l-1.06,-1.22l4.22,-0.89l1.09,1.97l2.57,0.87ZM466.44,24.04l7.43,3.77l-5.41,1.86l-1.58,4.08l-2.26,1.2l-1.12,4.11l-2.61,0.18l-4.79,-2.86l1.84,-1.54l-0.1,-0.68l-3.69,-1.53l-4.77,-4.51l-1.73,-3.89l6.11,-1.82l1.54,1.92l3.57,-0.08l1.2,-1.96l3.32,-0.18l3.05,1.92Z\", \"name\": \"Norway\"}, \"NA\": {\"path\": \"M474.26,330.66l-0.97,0.04l-0.38,0.4l-0.07,8.9l-2.09,0.08l-0.39,0.4l-0.0,17.42l-1.98,1.23l-1.17,0.17l-2.44,-0.66l-0.48,-1.13l-0.99,-0.74l-0.54,0.05l-0.9,1.01l-1.53,-1.68l-0.93,-1.88l-1.99,-8.56l-0.06,-3.12l-0.33,-1.52l-2.3,-3.34l-1.91,-4.83l-1.96,-2.43l-0.12,-1.57l2.33,-0.79l1.43,0.07l1.81,1.13l10.23,-0.25l1.84,1.23l5.87,0.35ZM474.66,330.64l6.51,-1.6l1.9,0.39l-1.69,0.4l-1.31,0.83l-1.12,-0.94l-4.29,0.92Z\", \"name\": \"Namibia\"}, \"NC\": {\"path\": \"M838.78,341.24l-0.33,0.22l-2.9,-1.75l-3.26,-3.37l1.65,0.83l4.85,4.07Z\", \"name\": \"New Caledonia\"}, \"NE\": {\"path\": \"M454.75,226.53l1.33,1.37l0.48,0.07l1.27,-0.7l0.53,3.52l0.94,0.83l0.17,0.92l0.81,0.69l-0.44,0.95l-0.96,5.26l-0.13,3.22l-3.04,2.31l-1.22,3.57l1.02,1.24l-0.0,1.46l0.39,0.4l1.13,0.04l-0.9,1.25l-1.47,-2.42l-0.86,-0.29l-2.09,1.37l-1.74,-0.67l-1.45,-0.17l-0.85,0.35l-1.36,-0.07l-1.64,1.09l-1.06,0.05l-2.94,-1.28l-1.44,0.59l-1.01,-0.03l-0.97,-0.94l-2.7,-0.98l-2.69,0.3l-0.87,0.64l-0.47,1.6l-0.75,1.16l-0.12,1.53l-1.57,-1.1l-1.31,0.24l0.03,-0.81l-0.32,-0.41l-2.59,-0.52l-0.15,-1.16l-1.35,-1.6l-0.29,-1.0l0.13,-0.84l1.29,-0.08l1.08,-0.92l3.31,-0.22l2.22,-0.41l0.32,-0.34l0.2,-1.47l1.39,-1.88l-0.01,-5.66l3.36,-1.12l7.24,-5.12l8.42,-4.92l3.69,1.06Z\", \"name\": \"Niger\"}, \"NG\": {\"path\": \"M456.32,253.89l0.64,0.65l-0.28,1.04l-2.11,2.01l-2.03,5.18l-1.37,1.16l-1.15,3.18l-1.33,0.66l-1.46,-0.97l-1.21,0.16l-1.38,1.36l-0.91,0.24l-1.79,4.06l-2.33,0.81l-1.11,-0.07l-0.86,0.5l-1.71,-0.05l-1.19,-1.39l-0.89,-1.89l-1.77,-1.66l-3.95,-0.08l0.07,-5.21l0.42,-1.43l1.95,-2.3l-0.14,-0.91l0.43,-1.18l-0.53,-1.41l0.25,-2.92l0.72,-1.07l0.32,-1.34l0.46,-0.39l2.47,-0.28l2.34,0.89l1.15,1.02l1.28,0.04l1.22,-0.58l3.03,1.27l1.49,-0.14l1.36,-1.0l1.33,0.07l0.82,-0.35l3.45,0.8l1.82,-1.32l1.84,2.67l0.66,0.16Z\", \"name\": \"Nigeria\"}, \"NZ\": {\"path\": \"M857.8,379.65l1.86,3.12l0.44,0.18l0.3,-0.38l0.03,-1.23l0.38,0.27l0.57,2.31l2.02,0.94l1.81,0.27l1.57,-1.06l0.7,0.18l-1.15,3.59l-1.98,0.11l-0.74,1.2l0.2,1.11l-2.42,3.98l-1.49,0.92l-1.04,-0.85l1.21,-2.05l-0.81,-2.01l-2.63,-1.25l0.04,-0.57l1.82,-1.19l0.43,-2.34l-0.16,-2.03l-0.95,-1.82l-0.06,-0.72l-3.11,-3.64l-0.79,-1.52l1.56,1.45l1.76,0.66l0.65,2.34ZM853.83,393.59l0.57,1.24l0.59,0.16l1.42,-0.97l0.46,0.79l0.0,1.03l-2.47,3.48l-1.26,1.2l-0.06,0.5l0.55,0.87l-1.41,0.07l-2.33,1.38l-2.03,5.02l-3.02,2.16l-2.06,-0.06l-1.71,-1.04l-2.47,-0.2l-0.27,-0.73l1.22,-2.1l3.05,-2.94l1.62,-0.59l4.02,-2.82l1.57,-1.67l1.07,-2.16l0.88,-0.7l0.48,-1.75l1.24,-0.97l0.35,0.79Z\", \"name\": \"New Zealand\"}, \"NP\": {\"path\": \"M641.14,213.62l0.01,3.19l-1.74,0.04l-4.8,-0.86l-1.58,-1.39l-3.37,-0.34l-7.65,-3.7l0.8,-2.09l2.33,-1.7l1.77,0.75l2.49,1.76l1.38,0.41l0.99,1.35l1.9,0.52l1.99,1.17l5.49,0.9Z\", \"name\": \"Nepal\"}, \"CI\": {\"path\": \"M407.4,259.27l0.86,0.42l0.56,0.9l1.13,0.53l1.19,-0.61l0.97,-0.08l1.42,0.54l0.6,3.24l-1.03,2.08l-0.65,2.84l1.06,2.33l-0.06,0.53l-2.54,-0.47l-1.66,0.03l-3.06,0.46l-4.11,1.6l0.32,-3.06l-1.18,-1.31l-1.32,-0.66l0.42,-0.85l-0.2,-1.4l0.5,-0.67l0.01,-1.59l0.84,-0.32l0.26,-0.5l-1.15,-3.01l0.12,-0.5l0.51,-0.25l0.66,0.31l1.93,0.02l0.67,-0.71l0.71,-0.14l0.25,0.69l0.57,0.22l1.4,-0.61Z\", \"name\": \"C\\u00f4te d'Ivoire\"}, \"CH\": {\"path\": \"M444.62,156.35l-0.29,0.87l0.18,0.53l1.13,0.58l1.0,0.1l-0.1,0.65l-0.79,0.38l-1.72,-0.37l-0.45,0.23l-0.45,1.04l-0.75,0.06l-0.84,-0.4l-1.32,1.0l-0.96,0.12l-0.88,-0.55l-0.81,-1.3l-0.49,-0.16l-0.63,0.26l0.02,-0.65l1.71,-1.66l0.1,-0.56l0.93,0.08l0.58,-0.46l1.99,0.02l0.66,-0.61l2.19,0.79Z\", \"name\": \"Switzerland\"}, \"CO\": {\"path\": \"M242.07,254.93l-1.7,0.59l-0.59,1.18l-1.7,1.69l-0.38,1.93l-0.67,1.43l0.31,0.57l1.03,0.13l0.25,0.9l0.57,0.64l-0.04,2.34l1.64,1.42l3.16,-0.24l1.26,0.28l1.67,2.06l0.41,0.13l4.09,-0.39l0.45,0.22l-0.92,1.95l-0.2,1.8l0.52,1.83l0.75,1.05l-1.12,1.1l0.07,0.63l0.84,0.51l0.74,1.29l-0.39,-0.45l-0.59,-0.01l-0.71,0.74l-4.71,-0.05l-0.4,0.41l0.03,1.57l0.33,0.39l1.11,0.2l-1.68,0.4l-0.29,0.38l-0.01,1.82l1.16,1.14l0.34,1.25l-1.05,7.05l-1.04,-0.87l1.26,-1.99l-0.13,-0.56l-2.18,-1.23l-1.38,0.2l-1.14,-0.38l-1.27,0.61l-1.55,-0.26l-1.38,-2.46l-1.23,-0.75l-0.85,-1.2l-1.67,-1.19l-0.86,0.13l-2.11,-1.32l-1.01,0.31l-1.8,-0.29l-0.52,-0.91l-3.09,-1.68l0.77,-0.52l-0.1,-1.12l0.41,-0.64l1.34,-0.32l2.0,-2.88l-0.11,-0.57l-0.66,-0.43l0.39,-1.38l-0.52,-2.1l0.49,-0.83l-0.4,-2.13l-0.97,-1.35l0.17,-0.66l0.86,-0.08l0.47,-0.75l-0.46,-1.63l1.41,-0.07l1.8,-1.69l0.93,-0.24l0.3,-0.38l0.45,-2.76l1.22,-1.0l1.44,-0.04l0.45,-0.5l1.91,0.12l2.93,-1.84l1.15,-1.14l0.91,0.46l-0.25,0.45Z\", \"name\": \"Colombia\"}, \"CN\": {\"path\": \"M740.23,148.97l4.57,1.3l2.8,2.17l0.98,2.9l0.38,0.27l3.8,0.0l2.32,-1.28l3.29,-0.75l-0.96,2.09l-1.02,1.28l-0.85,3.4l-1.52,2.73l-2.76,-0.5l-2.4,1.13l-0.21,0.45l0.64,2.57l-0.32,3.2l-0.94,0.06l-0.37,0.89l-0.91,-1.01l-0.64,0.07l-0.92,1.57l-3.73,1.25l-0.26,0.48l0.26,1.06l-1.5,-0.08l-1.09,-0.86l-0.56,0.06l-1.67,2.06l-2.7,1.56l-2.03,1.88l-3.4,0.83l-1.93,1.4l-1.15,0.34l0.33,-0.7l-0.41,-0.89l1.79,-1.79l0.02,-0.54l-1.32,-1.56l-0.48,-0.1l-2.24,1.09l-2.83,2.06l-1.51,1.83l-2.28,0.13l-1.55,1.49l-0.04,0.5l1.32,1.97l2.0,0.58l0.31,1.35l1.98,0.84l3.0,-1.96l2.0,1.02l1.49,0.11l0.22,0.83l-3.37,0.86l-1.12,1.48l-2.5,1.52l-1.29,1.99l0.14,0.56l2.57,1.48l0.97,2.7l3.17,4.63l-0.03,1.66l-1.35,0.65l-0.2,0.51l0.6,1.47l1.4,0.91l-0.89,3.82l-1.43,0.38l-3.85,6.44l-2.27,3.11l-6.78,4.57l-2.73,0.29l-1.45,1.04l-0.62,-0.61l-0.55,-0.01l-1.36,1.25l-3.39,1.27l-2.61,0.4l-1.1,2.79l-0.81,0.09l-0.49,-1.42l0.5,-0.85l-0.25,-0.59l-3.36,-0.84l-1.3,0.4l-2.31,-0.62l-0.94,-0.84l0.33,-1.28l-0.3,-0.49l-2.19,-0.46l-1.13,-0.93l-0.47,-0.02l-2.06,1.36l-4.29,0.28l-2.76,1.05l-0.28,0.43l0.32,2.53l-0.59,-0.03l-0.19,-1.34l-0.55,-0.34l-1.68,0.7l-2.46,-1.23l0.62,-1.87l-0.26,-0.51l-1.37,-0.44l-0.54,-2.22l-0.45,-0.3l-2.13,0.35l0.24,-2.48l2.39,-2.4l0.03,-4.31l-1.19,-0.92l-0.78,-1.49l-0.41,-0.21l-1.41,0.19l-1.98,-0.3l0.46,-1.07l-1.17,-1.7l-0.55,-0.11l-1.63,1.05l-2.25,-0.57l-2.89,1.73l-2.25,1.98l-1.75,0.29l-1.17,-0.71l-3.31,-0.65l-1.48,0.79l-1.04,1.27l-0.12,-1.17l-0.54,-0.34l-1.44,0.54l-5.55,-0.86l-1.98,-1.16l-1.89,-0.54l-0.99,-1.35l-1.34,-0.37l-2.55,-1.79l-2.01,-0.84l-1.21,0.56l-5.57,-3.45l-0.53,-2.31l1.19,0.25l0.48,-0.37l0.08,-1.42l-0.98,-1.56l0.15,-2.44l-2.69,-3.32l-4.12,-1.23l-0.67,-2.0l-1.92,-1.48l-0.38,-0.7l-0.51,-3.01l-1.52,-0.66l-0.7,0.13l-0.48,-2.05l0.55,-0.51l-0.09,-0.82l2.03,-1.19l1.6,-0.54l2.56,0.38l0.42,-0.22l0.85,-1.7l3.0,-0.33l1.1,-1.26l4.05,-1.77l0.39,-0.91l-0.17,-1.44l1.45,-0.67l0.2,-0.52l-2.07,-4.9l4.51,-1.12l1.37,-0.73l1.89,-5.51l4.98,0.86l1.51,-1.7l0.11,-2.87l1.99,-0.38l1.83,-2.06l0.49,-0.13l0.68,2.08l2.23,1.77l3.44,1.16l1.55,2.29l-0.92,3.49l0.96,1.67l6.54,1.13l2.95,1.87l1.47,0.35l1.06,2.62l1.53,1.91l3.05,0.08l5.14,0.67l3.37,-0.41l2.36,0.43l3.65,1.8l3.06,0.04l1.45,0.88l2.87,-1.59l3.95,-1.02l3.83,-0.14l3.06,-1.14l1.77,-1.6l1.72,-1.01l0.17,-0.49l-1.1,-2.05l1.02,-1.54l4.02,0.8l2.45,-1.61l3.76,-1.19l1.96,-2.13l1.63,-0.83l3.51,-0.4l1.92,0.34l0.46,-0.3l0.17,-1.5l-2.27,-2.22l-2.11,-1.09l-2.18,1.11l-2.32,-0.47l-1.29,0.32l-0.4,-0.82l2.73,-5.16l3.02,1.06l3.53,-2.06l0.18,-1.68l2.16,-3.35l1.49,-1.35l-0.03,-1.85l-1.07,-0.85l1.54,-1.26l2.98,-0.59l3.23,-0.09l3.64,0.99l2.04,1.16l3.29,6.71l0.92,3.19ZM696.92,237.31l-1.87,1.08l-1.63,-0.64l-0.06,-1.79l1.03,-0.98l2.58,-0.69l1.16,0.05l0.3,0.54l-0.98,1.06l-0.53,1.37Z\", \"name\": \"China\"}, \"CM\": {\"path\": \"M457.92,257.49l1.05,1.91l-1.4,0.16l-1.05,-0.23l-0.45,0.22l-0.54,1.19l0.08,0.45l1.48,1.47l1.05,0.45l1.01,2.46l-1.52,2.99l-0.68,0.68l-0.13,3.69l2.38,3.84l1.09,0.8l0.24,2.48l-3.67,-1.14l-11.27,-0.13l0.23,-1.79l-0.98,-1.66l-1.19,-0.54l-0.44,-0.97l-0.6,-0.42l1.71,-4.27l0.75,-0.13l1.38,-1.36l0.65,-0.03l1.71,0.99l1.93,-1.12l1.14,-3.18l1.38,-1.17l2.0,-5.14l2.17,-2.13l0.3,-1.64l-0.86,-0.88l0.03,-0.33l0.94,1.28l0.07,3.22Z\", \"name\": \"Cameroon\"}, \"CL\": {\"path\": \"M246.5,429.18l-3.14,1.83l-0.57,3.16l-0.64,0.05l-2.68,-1.06l-2.82,-2.33l-3.04,-1.89l-0.69,-1.85l0.63,-2.14l-1.21,-2.11l-0.31,-5.37l1.01,-2.91l2.57,-2.38l-0.18,-0.68l-3.16,-0.77l2.05,-2.47l0.77,-4.65l2.32,0.9l0.54,-0.29l1.31,-6.31l-0.22,-0.44l-1.68,-0.8l-0.56,0.28l-0.7,3.36l-0.81,-0.22l1.56,-9.41l1.15,-2.24l-0.71,-2.82l-0.18,-2.84l1.01,-0.33l3.26,-9.14l1.07,-4.22l-0.56,-4.21l0.74,-2.34l-0.29,-3.27l1.46,-3.34l2.04,-16.59l-0.66,-7.76l1.03,-0.53l0.54,-0.9l0.79,1.14l0.32,1.78l1.25,1.16l-0.69,2.55l1.33,2.9l0.97,3.59l0.46,0.29l1.5,-0.3l0.11,0.23l-0.76,2.44l-2.57,1.23l-0.23,0.37l0.08,4.33l-0.46,0.77l0.56,1.21l-1.58,1.51l-1.68,2.62l-0.89,2.47l0.2,2.7l-1.48,2.73l1.12,5.09l0.64,0.61l-0.01,2.29l-1.38,2.68l0.01,2.4l-1.89,2.04l0.02,2.75l0.69,2.57l-1.43,1.13l-1.26,5.68l0.39,3.51l-0.97,0.89l0.58,3.5l1.02,1.14l-0.65,1.02l0.15,0.57l1.0,0.53l0.16,0.69l-1.03,0.85l0.26,1.75l-0.89,4.03l-1.31,2.66l0.24,1.75l-0.71,1.83l-1.99,1.7l0.3,3.67l0.88,1.19l1.58,0.01l0.01,2.21l1.04,1.95l5.98,0.63ZM248.69,430.79l0.0,7.33l0.4,0.4l3.52,0.05l-0.44,0.75l-1.94,0.98l-2.49,-0.37l-1.88,-1.06l-2.55,-0.49l-5.59,-3.71l-2.38,-2.63l4.1,2.48l3.32,1.23l0.45,-0.12l1.29,-1.57l0.83,-2.32l2.05,-1.24l1.31,0.29Z\", \"name\": \"Chile\"}, \"CA\": {\"path\": \"M280.06,145.6l-1.67,2.88l0.07,0.49l0.5,0.04l1.46,-0.98l1.0,0.42l-0.56,0.72l0.17,0.62l2.22,0.89l1.35,-0.71l1.95,0.78l-0.66,2.01l0.5,0.51l1.32,-0.42l0.98,3.17l-0.91,2.41l-0.8,0.08l-1.23,-0.45l0.47,-2.25l-0.89,-0.83l-0.48,0.06l-2.78,2.63l-0.34,-0.02l1.02,-0.85l-0.14,-0.69l-2.4,-0.77l-7.4,0.08l-0.17,-0.41l1.3,-0.94l0.02,-0.64l-0.73,-0.58l1.85,-1.74l2.57,-5.16l1.47,-1.79l1.99,-1.05l0.46,0.06l-1.53,2.45ZM68.32,74.16l4.13,0.95l4.02,2.14l2.61,0.4l2.47,-1.89l2.88,-1.31l3.85,0.48l3.71,-1.94l3.82,-1.04l1.56,1.68l0.49,0.08l1.87,-1.04l0.65,-1.98l1.24,0.35l4.16,3.94l0.54,0.01l2.75,-2.49l0.26,2.59l0.49,0.35l3.08,-0.73l1.04,-1.27l2.73,0.23l3.83,1.86l5.86,1.61l3.47,0.75l2.44,-0.26l2.73,1.78l-2.98,1.81l-0.19,0.41l0.31,0.32l4.53,0.92l6.87,-0.5l2.0,-0.69l2.49,2.39l0.53,0.02l2.72,-2.16l-0.02,-0.64l-2.16,-1.54l1.15,-1.06l4.83,-0.61l1.84,0.95l2.48,2.31l3.01,-0.23l4.55,1.92l3.85,-0.67l3.61,0.1l0.41,-0.44l-0.25,-2.36l1.79,-0.61l3.49,1.32l-0.01,3.77l0.31,0.39l0.45,-0.22l1.48,-3.16l1.74,0.1l0.41,-0.3l1.13,-4.37l-2.78,-3.11l-2.8,-1.74l0.19,-4.64l2.71,-3.07l2.98,0.67l2.41,1.95l3.19,4.8l-1.99,1.97l0.21,0.68l4.33,0.84l-0.01,4.15l0.25,0.37l0.44,-0.09l3.07,-3.15l2.54,2.39l-0.61,3.33l2.42,2.88l0.61,0.0l2.61,-3.08l1.88,-3.82l0.17,-4.58l6.72,0.94l3.13,2.04l0.13,1.82l-1.76,2.19l-0.01,0.49l1.66,2.16l-0.26,1.71l-4.68,2.8l-3.28,0.61l-2.47,-1.2l-0.55,0.23l-0.73,2.04l-2.38,3.43l-0.74,1.77l-2.74,2.57l-3.44,0.25l-2.21,1.78l-0.28,2.53l-2.82,0.55l-3.12,3.22l-2.72,4.31l-1.03,3.17l-0.14,4.31l0.33,0.41l3.44,0.57l2.24,5.95l0.45,0.23l3.4,-0.69l4.52,1.51l2.43,1.31l1.91,1.73l3.1,0.96l2.62,1.46l6.6,0.54l-0.35,2.74l0.81,3.53l1.81,3.78l3.83,3.3l0.45,0.04l2.1,-1.28l1.37,-3.69l-1.31,-5.38l-1.45,-1.58l3.57,-1.47l2.84,-2.46l1.52,-2.8l-0.25,-2.55l-1.7,-3.07l-2.85,-2.61l2.8,-3.95l-1.08,-3.37l-0.79,-5.67l1.36,-0.7l6.76,1.41l2.12,-0.96l5.12,3.36l1.05,1.61l4.08,0.26l-0.06,2.87l0.83,4.7l0.3,0.32l2.16,0.54l1.73,2.06l0.5,0.09l3.63,-2.03l2.52,-4.19l1.26,-1.32l7.6,11.72l-0.92,2.04l0.16,0.51l3.3,1.97l2.22,1.98l4.1,0.98l1.43,0.99l0.95,2.79l2.1,0.68l0.84,1.08l0.17,3.45l-3.37,2.26l-4.22,1.24l-3.06,2.63l-4.06,0.51l-5.35,-0.69l-6.39,0.2l-2.3,2.41l-3.26,1.51l-6.47,7.15l-0.06,0.48l0.44,0.19l2.13,-0.52l4.17,-4.24l5.12,-2.62l3.52,-0.3l1.69,1.21l-2.12,2.21l0.81,3.47l1.02,2.61l3.47,1.6l4.14,-0.45l2.15,-2.8l0.26,1.48l1.14,0.8l-2.56,1.69l-5.5,1.82l-2.54,1.27l-2.74,2.15l-1.4,-0.16l-0.07,-2.01l4.14,-2.44l0.18,-0.45l-0.39,-0.29l-6.63,0.45l-1.39,-1.49l-0.14,-4.43l-1.11,-0.91l-1.82,0.39l-0.66,-0.66l-0.6,0.03l-1.91,2.39l-0.82,2.52l-0.8,1.27l-1.67,0.56l-0.46,0.76l-8.31,0.07l-1.21,0.62l-2.35,1.97l-0.71,-0.14l-1.37,0.96l-1.12,-0.48l-4.74,1.26l-0.9,1.17l0.21,0.62l1.73,0.3l-1.81,0.31l-1.85,0.81l-2.11,-0.13l-2.95,1.78l-0.69,-0.09l1.39,-2.1l1.73,-1.21l0.1,-2.29l1.16,-1.99l0.49,0.53l2.03,0.42l1.2,-1.16l0.02,-0.47l-2.66,-3.51l-2.28,-0.61l-5.64,-0.71l-0.4,-0.57l-0.79,0.13l0.2,-0.41l-0.22,-0.55l-0.68,-0.26l0.19,-1.26l-0.78,-0.73l0.31,-0.64l-0.29,-0.57l-2.6,-0.44l-0.75,-1.63l-0.94,-0.66l-4.31,-0.65l-1.13,1.19l-1.48,0.59l-0.85,1.06l-2.83,-0.76l-2.09,0.39l-2.39,-0.97l-4.24,-0.7l-0.57,-0.4l-0.41,-1.63l-0.4,-0.3l-0.85,0.02l-0.39,0.4l-0.01,0.85l-69.13,-0.01l-6.51,-4.52l-4.5,-1.38l-1.26,-2.66l0.33,-1.93l-0.23,-0.43l-3.01,-1.35l-0.55,-2.77l-2.89,-2.38l-0.04,-1.45l1.39,-1.83l-0.28,-2.55l-4.16,-2.2l-4.07,-6.6l-4.02,-3.22l-1.3,-1.88l-0.5,-0.13l-2.51,1.21l-2.23,1.87l-3.85,-3.88l-2.44,-1.04l-2.22,-0.13l0.03,-37.49ZM260.37,148.65l3.04,0.76l2.26,1.2l-3.78,-0.95l-1.53,-1.01ZM249.4,3.81l6.68,0.49l5.32,0.79l4.26,1.57l-0.07,1.1l-5.85,2.53l-6.02,1.21l-2.39,1.39l-0.18,0.45l0.39,0.29l4.01,-0.02l-4.65,2.82l-4.2,1.74l-4.19,4.59l-5.03,0.92l-1.67,1.15l-7.47,0.59l-0.37,0.37l0.32,0.42l2.41,0.49l-0.81,0.47l-0.12,0.59l1.83,2.41l-2.02,1.59l-3.81,1.51l-1.32,2.16l-3.38,1.53l-0.22,0.48l0.35,1.19l0.4,0.29l3.88,-0.18l0.03,0.61l-6.33,2.95l-6.41,-1.4l-7.43,0.79l-3.72,-0.62l-4.4,-0.25l-0.23,-1.83l4.29,-1.11l0.28,-0.51l-1.1,-3.45l1.0,-0.25l6.58,2.28l0.47,-0.16l-0.05,-0.49l-3.41,-3.45l-3.58,-0.98l1.48,-1.55l4.34,-1.29l0.97,-2.19l-0.16,-0.48l-3.42,-2.13l-0.81,-2.26l6.2,0.22l2.24,0.58l3.91,-2.1l0.2,-0.43l-0.35,-0.32l-5.64,-0.67l-8.73,0.36l-4.26,-1.9l-2.12,-2.4l-2.78,-1.66l-0.41,-1.52l3.31,-1.03l2.93,-0.2l4.91,-0.99l3.7,-2.27l2.87,0.3l2.62,1.67l0.56,-0.14l1.82,-3.2l3.13,-0.94l4.44,-0.69l7.53,-0.26l1.48,0.67l7.19,-1.06l10.8,0.79ZM203.85,57.54l0.01,0.42l1.97,2.97l0.68,-0.02l2.24,-3.72l5.95,-1.86l4.01,4.64l-0.35,2.91l0.5,0.43l4.95,-1.36l2.32,-1.8l5.31,2.28l3.27,2.11l0.3,1.84l0.48,0.33l4.42,-0.99l2.64,2.87l5.97,1.77l2.06,1.72l2.11,3.71l-4.19,1.86l-0.01,0.73l5.9,2.83l3.94,0.94l3.78,3.95l3.46,0.25l-0.63,2.37l-4.11,4.47l-2.76,-1.56l-3.9,-3.94l-3.59,0.41l-0.33,0.34l-0.19,2.72l2.63,2.38l3.42,1.89l0.94,0.97l1.55,3.75l-0.7,2.29l-2.74,-0.92l-6.25,-3.15l-0.51,0.13l0.05,0.52l6.07,5.69l0.18,0.59l-6.09,-1.39l-5.31,-2.24l-2.63,-1.66l0.6,-0.77l-0.12,-0.6l-7.39,-4.01l-0.59,0.37l0.03,0.79l-6.73,0.6l-1.69,-1.1l1.36,-2.46l4.51,-0.07l5.15,-0.52l0.31,-0.6l-0.74,-1.3l0.78,-1.84l3.21,-4.05l-0.67,-2.35l-1.11,-1.6l-3.84,-2.1l-4.35,-1.28l0.91,-0.63l0.06,-0.61l-2.65,-2.75l-2.34,-0.36l-1.89,-1.46l-0.53,0.03l-1.24,1.23l-4.36,0.55l-9.04,-0.99l-9.26,-1.98l-1.6,-1.22l2.22,-1.77l0.13,-0.44l-0.38,-0.27l-3.22,-0.02l-0.72,-4.25l1.83,-4.04l2.42,-1.85l5.5,-1.1l-1.39,2.35ZM261.19,159.33l2.07,0.61l1.44,-0.04l-1.15,0.63l-2.94,-1.23l-0.4,-0.68l0.36,-0.37l0.61,1.07ZM230.83,84.39l-2.37,0.18l-0.49,-1.63l0.93,-2.09l1.94,-0.51l1.62,0.99l0.02,1.52l-1.66,1.54ZM229.43,58.25l0.11,0.65l-4.87,-0.21l-2.72,0.62l-3.1,-2.57l0.08,-1.26l0.86,-0.23l5.57,0.51l4.08,2.5ZM222.0,105.02l-0.72,1.49l-0.63,-0.19l-0.48,-0.84l0.81,-0.99l0.65,0.05l0.37,0.46ZM183.74,38.32l2.9,1.7l4.79,-0.01l1.84,1.46l-0.49,1.68l0.23,0.48l2.82,1.14l1.76,1.26l7.01,0.65l4.1,-1.1l5.03,-0.43l3.93,0.35l2.48,1.77l0.46,1.7l-1.3,1.1l-3.56,1.01l-3.23,-0.59l-7.17,0.76l-5.09,0.09l-3.99,-0.6l-6.42,-1.54l-0.79,-2.51l-0.3,-2.49l-2.64,-2.5l-5.32,-0.72l-2.52,-1.4l0.68,-1.57l4.78,0.31ZM207.38,91.35l0.4,1.56l0.56,0.26l1.06,-0.52l1.32,0.96l5.42,2.57l0.2,1.68l0.46,0.35l1.68,-0.28l1.15,0.85l-1.55,0.87l-3.61,-0.88l-1.32,-1.69l-0.57,-0.06l-2.45,2.1l-3.12,1.79l-0.7,-1.87l-0.42,-0.26l-2.16,0.24l1.39,-1.39l0.32,-3.14l0.76,-3.35l1.18,0.22ZM215.49,102.6l-2.67,1.95l-1.4,-0.07l-0.3,-0.58l1.53,-1.48l2.84,0.18ZM202.7,24.12l2.53,1.59l-2.87,1.4l-4.53,4.05l-4.25,0.38l-5.03,-0.68l-2.45,-2.04l0.03,-1.62l1.82,-1.37l0.14,-0.45l-0.38,-0.27l-4.45,0.04l-2.59,-1.76l-1.41,-2.29l1.57,-2.32l1.62,-1.66l2.44,-0.39l0.25,-0.65l-0.6,-0.74l4.86,-0.25l3.24,3.11l8.16,2.3l1.9,3.61ZM187.47,59.2l-2.76,3.49l-2.38,-0.15l-1.44,-3.84l0.04,-2.2l1.19,-1.88l2.3,-1.23l5.07,0.17l4.11,1.02l-3.24,3.72l-2.88,0.89ZM186.07,48.79l-1.08,1.53l-3.34,-0.34l-2.56,-1.1l1.03,-1.75l3.25,-1.23l1.95,1.58l0.75,1.3ZM185.71,35.32l-5.3,-0.2l-0.32,-0.71l4.31,0.07l1.3,0.84ZM180.68,32.48l-3.34,1.0l-1.79,-1.1l-0.98,-1.87l-0.15,-1.73l4.1,0.53l2.67,1.7l-0.51,1.47ZM180.9,76.31l-1.1,1.08l-3.13,-1.23l-2.12,0.43l-2.71,-1.57l1.72,-1.09l1.55,-1.72l3.81,1.9l1.98,2.2ZM169.74,54.87l2.96,0.97l4.17,-0.57l0.41,0.88l-2.14,2.11l0.09,0.64l3.55,1.92l-0.4,3.72l-3.79,1.65l-2.17,-0.35l-1.72,-1.74l-6.02,-3.5l0.03,-0.85l4.68,0.54l0.4,-0.21l-0.05,-0.45l-2.48,-2.81l2.46,-1.95ZM174.45,40.74l1.37,1.73l0.07,2.44l-1.05,3.45l-3.79,0.47l-2.32,-0.69l0.05,-2.64l-0.44,-0.41l-3.68,0.35l-0.12,-3.1l2.45,0.1l3.67,-1.73l3.41,0.29l0.37,-0.26ZM170.05,31.55l0.67,1.56l-3.33,-0.49l-4.22,-1.77l-4.35,-0.16l1.4,-0.94l-0.06,-0.7l-2.81,-1.23l-0.12,-1.39l4.39,0.68l6.62,1.98l1.81,2.47ZM134.5,58.13l-1.02,1.82l0.45,0.58l5.4,-1.39l3.33,2.29l0.49,-0.03l2.6,-2.23l1.94,1.32l2.0,4.5l0.7,0.06l1.3,-2.29l-1.63,-4.46l1.69,-0.54l2.31,0.71l2.65,1.81l2.49,7.92l8.48,4.27l-0.19,1.35l-3.79,0.33l-0.26,0.67l1.4,1.49l-0.58,1.1l-4.23,-0.64l-4.43,-1.19l-3.0,0.28l-4.66,1.47l-10.52,1.04l-1.43,-2.02l-3.42,-1.2l-2.21,0.43l-2.51,-2.86l4.84,-1.05l3.6,0.19l3.27,-0.78l0.31,-0.39l-0.31,-0.39l-4.84,-1.06l-8.79,0.27l-0.85,-1.07l5.26,-1.66l0.27,-0.45l-0.4,-0.34l-3.8,0.06l-3.81,-1.06l1.81,-3.01l1.66,-1.79l6.48,-2.81l1.97,0.71ZM158.7,56.61l-1.7,2.44l-3.2,-2.75l0.37,-0.3l3.11,-0.18l1.42,0.79ZM149.61,42.73l1.01,1.89l0.5,0.18l2.14,-0.82l2.23,0.19l0.36,2.04l-1.33,2.09l-8.28,0.76l-6.35,2.15l-3.41,0.1l-0.19,-0.96l4.9,-2.08l0.23,-0.46l-0.41,-0.31l-11.25,0.59l-2.89,-0.74l3.04,-4.44l2.14,-1.32l6.81,1.69l4.58,3.06l4.37,0.39l0.36,-0.63l-3.36,-4.6l1.85,-1.53l2.18,0.51l0.77,2.26ZM144.76,34.41l-4.36,1.44l-3.0,-1.4l1.46,-1.24l3.47,-0.52l2.96,0.71l-0.52,1.01ZM145.13,29.83l-1.9,0.66l-3.67,-0.0l2.27,-1.61l3.3,0.95ZM118.92,65.79l-6.03,2.02l-1.33,-1.9l-5.38,-2.28l2.59,-5.05l2.16,-3.14l-0.02,-0.48l-1.97,-2.41l7.64,-0.7l3.6,1.02l6.3,0.27l4.42,2.95l-2.53,0.98l-6.24,3.43l-3.1,3.28l-0.11,2.01ZM129.54,35.53l-0.28,3.37l-1.72,1.62l-2.33,0.28l-4.61,2.19l-3.86,0.76l-2.64,-0.87l3.72,-3.4l5.01,-3.34l3.72,0.07l3.0,-0.67ZM111.09,152.69l-0.67,0.24l-3.85,-1.37l-0.83,-1.17l-2.12,-1.07l-0.66,-1.02l-2.4,-0.55l-0.74,-1.71l6.02,1.45l2.0,2.55l2.52,1.39l0.73,1.27ZM87.8,134.64l0.89,0.29l1.86,-0.21l-0.65,3.34l1.69,2.33l-1.31,-1.33l-0.99,-1.62l-1.17,-0.98l-0.33,-1.82Z\", \"name\": \"Canada\"}, \"CG\": {\"path\": \"M466.72,276.48l-0.1,1.03l-1.25,2.97l-0.19,3.62l-0.46,1.78l-0.23,0.63l-1.61,1.19l-1.21,1.39l-1.09,2.43l0.04,2.09l-3.25,3.24l-0.5,-0.24l-0.5,-0.83l-1.36,-0.02l-0.98,0.89l-1.68,-0.99l-1.54,1.24l-1.52,-1.96l1.57,-1.14l0.11,-0.52l-0.77,-1.35l2.1,-0.66l0.39,-0.73l1.05,0.82l2.21,0.11l1.12,-1.37l0.37,-1.81l-0.27,-2.09l-1.13,-1.5l1.0,-2.69l-0.13,-0.45l-0.92,-0.58l-1.6,0.17l-0.51,-0.94l0.1,-0.61l2.75,0.09l3.97,1.24l0.51,-0.33l0.17,-1.28l1.24,-2.21l1.28,-1.14l2.76,0.49Z\", \"name\": \"Congo\"}, \"CF\": {\"path\": \"M461.16,278.2l-0.26,-1.19l-1.09,-0.77l-0.84,-1.17l-0.29,-1.0l-1.04,-1.15l0.08,-3.43l0.58,-0.49l1.16,-2.35l1.85,-0.17l0.61,-0.62l0.97,0.58l3.15,-0.96l2.48,-1.92l0.02,-0.96l2.81,0.02l2.36,-1.17l1.93,-2.85l1.16,-0.93l1.11,-0.3l0.27,0.86l1.34,1.47l-0.39,2.01l0.3,1.01l4.01,2.75l0.17,0.93l2.63,2.31l0.6,1.44l2.08,1.4l-3.84,-0.21l-1.94,0.88l-1.23,-0.49l-2.67,1.2l-1.29,-0.18l-0.51,0.36l-0.6,1.22l-3.35,-0.65l-1.57,-0.91l-2.42,-0.83l-1.45,0.91l-0.97,1.27l-0.26,1.56l-3.22,-0.43l-1.49,1.33l-0.94,1.62Z\", \"name\": \"Central African Rep.\"}, \"CD\": {\"path\": \"M487.01,272.38l2.34,-0.14l1.35,1.84l1.34,0.45l0.86,-0.39l1.21,0.12l1.07,-0.41l0.54,0.89l2.04,1.54l-0.14,2.72l0.7,0.54l-1.38,1.13l-1.53,2.54l-0.17,2.05l-0.59,1.08l-0.02,1.72l-0.72,0.84l-0.66,3.01l0.63,1.32l-0.44,4.26l0.64,1.47l-0.37,1.22l0.86,1.8l1.53,1.41l0.3,1.26l0.44,0.5l-4.08,0.75l-0.92,1.81l0.51,1.34l-0.74,5.43l0.17,0.38l2.45,1.46l0.54,-0.1l0.12,1.62l-1.28,-0.01l-1.85,-2.35l-1.94,-0.45l-0.48,-1.13l-0.55,-0.2l-1.41,0.74l-1.71,-0.3l-1.01,-1.18l-2.49,-0.19l-0.44,-0.77l-1.98,-0.21l-2.88,0.36l0.11,-2.41l-0.85,-1.13l-0.16,-1.36l0.32,-1.73l-0.46,-0.89l-0.04,-1.49l-0.4,-0.39l-2.53,0.02l0.1,-0.41l-0.39,-0.49l-1.28,0.01l-0.43,0.45l-1.62,0.32l-0.83,1.79l-1.09,-0.28l-2.4,0.52l-1.37,-1.91l-1.3,-3.3l-0.38,-0.27l-7.39,-0.03l-2.46,0.42l0.5,-0.45l0.37,-1.47l0.66,-0.38l0.92,0.08l0.73,-0.82l0.87,0.02l0.31,0.68l1.4,0.36l3.59,-3.63l0.01,-2.23l1.02,-2.29l2.69,-2.39l0.43,-0.99l0.49,-1.96l0.17,-3.51l1.25,-2.95l0.36,-3.14l0.86,-1.13l1.1,-0.66l3.57,1.73l3.65,0.73l0.46,-0.21l0.8,-1.46l1.24,0.19l2.61,-1.17l0.81,0.44l1.04,-0.03l0.59,-0.66l0.7,-0.16l1.81,0.25Z\", \"name\": \"Dem. Rep. Congo\"}, \"CZ\": {\"path\": \"M458.46,144.88l1.22,1.01l1.47,0.23l0.13,0.93l1.36,0.68l0.54,-0.2l0.24,-0.55l1.15,0.25l0.53,1.09l1.68,0.18l0.6,0.84l-1.04,0.73l-0.96,1.28l-1.6,0.17l-0.55,0.56l-1.04,-0.46l-1.05,0.15l-2.12,-0.96l-1.05,0.34l-1.2,1.12l-1.56,-0.87l-2.57,-2.1l-0.53,-1.88l4.7,-2.52l0.71,0.26l0.9,-0.28Z\", \"name\": \"Czech Rep.\"}, \"CY\": {\"path\": \"M504.36,193.47l0.43,0.28l-1.28,0.57l-0.92,-0.28l-0.24,-0.46l2.01,-0.13Z\", \"name\": \"Cyprus\"}, \"CR\": {\"path\": \"M211.34,258.05l0.48,0.99l1.6,1.6l-0.54,0.45l0.29,1.42l-0.25,1.19l-1.09,-0.59l-0.05,-1.25l-2.46,-1.42l-0.28,-0.77l-0.66,-0.45l-0.45,-0.0l-0.11,1.04l-1.32,-0.95l0.31,-1.3l-0.36,-0.6l0.31,-0.27l1.42,0.58l1.29,-0.14l0.56,0.56l0.74,0.17l0.55,-0.27Z\", \"name\": \"Costa Rica\"}, \"CU\": {\"path\": \"M221.21,227.25l1.27,1.02l2.19,-0.28l4.43,3.33l2.08,0.43l-0.1,0.38l0.36,0.5l1.75,0.1l1.48,0.84l-3.11,0.51l-4.15,-0.03l0.77,-0.67l-0.04,-0.64l-1.2,-0.74l-1.49,-0.16l-0.7,-0.61l-0.56,-1.4l-0.4,-0.25l-1.34,0.1l-2.2,-0.66l-0.88,-0.58l-3.18,-0.4l-0.27,-0.16l0.58,-0.74l-0.36,-0.29l-2.72,-0.05l-1.7,1.29l-0.91,0.03l-0.61,0.69l-1.01,0.22l1.11,-1.29l1.01,-0.52l3.69,-1.01l3.98,0.21l2.21,0.84Z\", \"name\": \"Cuba\"}, \"SZ\": {\"path\": \"M500.35,351.36l0.5,2.04l-0.38,0.89l-1.05,0.21l-1.23,-1.2l-0.02,-0.64l0.83,-1.57l1.34,0.27Z\", \"name\": \"Swaziland\"}, \"SY\": {\"path\": \"M511.0,199.79l0.05,-1.33l0.54,-1.36l1.28,-0.99l0.13,-0.45l-0.41,-1.11l-1.14,-0.36l-0.19,-1.74l0.52,-1.0l1.29,-1.21l0.2,-1.18l0.59,0.23l2.62,-0.76l1.36,0.52l2.06,-0.01l2.95,-1.08l3.25,-0.26l-0.67,0.94l-1.28,0.66l-0.21,0.4l0.23,2.01l-0.88,3.19l-10.15,5.73l-2.15,-0.85Z\", \"name\": \"Syria\"}, \"KG\": {\"path\": \"M621.35,172.32l-3.87,1.69l-0.96,1.18l-3.04,0.34l-1.13,1.86l-2.36,-0.35l-1.99,0.63l-2.39,1.4l0.06,0.95l-0.4,0.37l-4.52,0.43l-3.02,-0.93l-2.37,0.17l0.11,-0.79l2.32,0.42l1.13,-0.88l1.99,0.2l3.21,-2.14l-0.03,-0.69l-2.97,-1.57l-1.94,0.65l-1.22,-0.74l1.71,-1.58l-0.12,-0.67l-0.36,-0.15l0.32,-0.77l1.36,-0.35l4.02,1.02l0.49,-0.3l0.35,-1.59l1.09,-0.48l3.42,1.22l1.11,-0.31l7.64,0.39l1.16,1.0l1.23,0.39Z\", \"name\": \"Kyrgyzstan\"}, \"KE\": {\"path\": \"M506.26,284.69l1.87,-2.56l0.93,-2.15l-1.38,-4.08l-1.06,-1.6l2.82,-2.75l0.79,0.26l0.12,1.41l0.86,0.83l1.9,0.11l3.28,2.13l3.57,0.44l1.05,-1.12l1.96,-0.9l0.82,0.68l1.16,0.09l-1.78,2.45l0.03,9.12l1.3,1.94l-1.37,0.78l-0.67,1.03l-1.08,0.46l-0.34,1.67l-0.81,1.07l-0.45,1.55l-0.68,0.56l-3.2,-2.23l-0.35,-1.58l-8.86,-4.98l0.14,-1.6l-0.57,-1.04Z\", \"name\": \"Kenya\"}, \"SS\": {\"path\": \"M481.71,263.34l1.07,-0.72l1.2,-3.18l1.36,-0.26l1.61,1.99l0.87,0.34l1.1,-0.41l1.5,0.07l0.57,0.53l2.49,0.0l0.44,-0.63l1.07,-0.4l0.45,-0.84l0.59,-0.33l1.9,1.33l1.6,-0.2l2.83,-3.33l-0.32,-2.21l1.59,-0.52l-0.24,1.6l0.3,1.83l1.35,1.18l0.2,1.87l0.35,0.41l0.02,1.53l-0.23,0.47l-1.42,0.25l-0.85,1.44l0.3,0.6l1.4,0.16l1.11,1.08l0.59,1.13l1.03,0.53l1.28,2.36l-4.41,3.98l-1.74,0.01l-1.89,0.55l-1.47,-0.52l-1.15,0.57l-2.96,-2.62l-1.3,0.49l-1.06,-0.15l-0.79,0.39l-0.82,-0.22l-1.8,-2.7l-1.91,-1.1l-0.66,-1.5l-2.62,-2.32l-0.18,-0.94l-2.37,-1.6Z\", \"name\": \"S. Sudan\"}, \"SR\": {\"path\": \"M283.12,270.19l2.1,0.53l-1.08,1.95l0.2,1.72l0.93,1.49l-0.59,2.03l-0.43,0.71l-1.12,-0.42l-1.32,0.22l-0.93,-0.2l-0.46,0.26l-0.25,0.73l0.33,0.7l-0.89,-0.13l-1.39,-1.97l-0.31,-1.34l-0.97,-0.31l-0.89,-1.47l0.35,-1.61l1.45,-0.82l0.33,-1.87l2.61,0.44l0.57,-0.47l1.75,-0.16Z\", \"name\": \"Suriname\"}, \"KH\": {\"path\": \"M689.52,249.39l0.49,1.45l-0.28,2.74l-4.0,1.86l-0.16,0.6l0.68,0.95l-2.06,0.17l-2.05,0.97l-1.82,-0.32l-2.12,-3.7l-0.55,-2.85l1.4,-1.85l3.02,-0.45l2.23,0.35l2.01,0.98l0.51,-0.14l0.95,-1.48l1.74,0.74Z\", \"name\": \"Cambodia\"}, \"SV\": {\"path\": \"M195.8,250.13l1.4,-1.19l2.24,1.45l0.98,-0.27l0.44,0.2l-0.27,1.05l-1.14,-0.03l-3.64,-1.21Z\", \"name\": \"El Salvador\"}, \"SK\": {\"path\": \"M476.82,151.17l-1.14,1.9l-2.73,-0.92l-0.82,0.2l-0.74,0.8l-3.46,0.73l-0.47,0.69l-1.76,0.33l-1.88,-1.0l-0.18,-0.81l0.38,-0.75l1.87,-0.32l1.74,-1.89l0.83,0.16l0.79,-0.34l1.51,1.04l1.34,-0.63l1.25,0.3l1.65,-0.42l1.81,0.95Z\", \"name\": \"Slovakia\"}, \"KR\": {\"path\": \"M737.51,185.84l0.98,-0.1l0.87,-1.17l2.69,-0.32l0.33,-0.29l1.76,2.79l0.58,1.76l0.02,3.12l-0.8,1.32l-2.21,0.55l-1.93,1.13l-1.8,0.19l-0.2,-1.1l0.43,-2.28l-0.95,-2.56l1.43,-0.37l0.23,-0.62l-1.43,-2.06Z\", \"name\": \"Korea\"}, \"SI\": {\"path\": \"M456.18,162.07l-0.51,-1.32l0.18,-1.05l1.69,0.2l1.42,-0.71l2.09,-0.07l0.62,-0.51l0.21,0.47l-1.61,0.67l-0.44,1.34l-0.66,0.24l-0.26,0.82l-1.22,-0.49l-0.84,0.46l-0.69,-0.04Z\", \"name\": \"Slovenia\"}, \"KP\": {\"path\": \"M736.77,185.16l-0.92,-0.42l-0.88,0.62l-1.21,-0.88l0.96,-1.15l0.59,-2.59l-0.46,-0.74l-2.09,-0.77l1.64,-1.52l2.72,-1.58l1.58,-1.91l1.11,0.78l2.17,0.11l0.41,-0.5l-0.3,-1.22l3.52,-1.18l0.94,-1.4l0.98,1.08l-2.19,2.18l0.01,2.14l-1.06,0.54l-1.41,1.4l-1.7,0.52l-1.25,1.09l-0.14,1.98l0.94,0.45l1.15,1.04l-0.13,0.26l-2.6,0.29l-1.13,1.29l-1.22,0.08Z\", \"name\": \"Dem. Rep. Korea\"}, \"SO\": {\"path\": \"M525.13,288.48l-1.13,-1.57l-0.03,-8.86l2.66,-3.38l1.67,-0.13l2.13,-1.69l3.41,-0.23l7.08,-7.55l2.91,-3.69l0.08,-4.82l2.98,-0.67l1.24,-0.86l0.45,-0.0l-0.2,3.0l-1.21,3.62l-2.73,5.97l-2.13,3.65l-5.03,6.16l-8.56,6.4l-2.78,3.08l-0.8,1.56Z\", \"name\": \"Somalia\"}, \"SN\": {\"path\": \"M390.09,248.21l0.12,1.55l0.49,1.46l0.96,0.82l0.05,1.28l-1.26,-0.19l-0.75,0.33l-1.84,-0.61l-5.84,-0.13l-2.54,0.51l-0.22,-1.03l1.77,0.04l2.01,-0.91l1.03,0.48l1.09,0.04l1.29,-0.62l0.14,-0.58l-0.51,-0.74l-1.81,0.25l-1.13,-0.63l-0.79,0.04l-0.72,0.61l-2.31,0.06l-0.92,-1.77l-0.81,-0.64l0.64,-0.35l2.46,-3.74l1.04,0.19l1.38,-0.56l1.19,-0.02l2.72,1.37l3.03,3.48Z\", \"name\": \"Senegal\"}, \"SL\": {\"path\": \"M394.46,264.11l-1.73,1.98l-0.58,1.33l-2.07,-1.06l-1.22,-1.26l-0.65,-2.39l1.16,-0.96l0.67,-1.17l1.21,-0.52l1.66,0.0l1.03,1.64l0.52,2.41Z\", \"name\": \"Sierra Leone\"}, \"SB\": {\"path\": \"M826.69,311.6l-0.61,0.09l-0.2,-0.33l0.37,0.15l0.44,0.09ZM824.18,307.38l-0.26,-0.3l-0.31,-0.91l0.03,0.0l0.54,1.21ZM823.04,309.33l-1.66,-0.22l-0.2,-0.52l1.16,0.28l0.69,0.46ZM819.28,304.68l1.14,0.65l0.02,0.03l-0.81,-0.44l-0.35,-0.23Z\", \"name\": \"Solomon Is.\"}, \"SA\": {\"path\": \"M537.53,210.34l2.0,0.24l0.9,1.32l1.49,-0.06l0.87,2.08l1.29,0.76l0.51,0.99l1.56,1.03l-0.1,1.9l0.32,0.9l1.58,2.47l0.76,0.53l0.7,-0.04l1.68,4.23l7.53,1.33l0.51,-0.29l0.77,1.25l-1.55,4.87l-7.29,2.52l-7.3,1.03l-2.34,1.17l-1.88,2.74l-0.76,0.28l-0.82,-0.78l-0.91,0.12l-2.88,-0.51l-3.51,0.25l-0.86,-0.56l-0.57,0.15l-0.66,1.27l0.16,1.11l-0.43,0.32l-0.93,-1.4l-0.33,-1.16l-1.23,-0.88l-1.27,-2.06l-0.78,-2.22l-1.73,-1.79l-1.14,-0.48l-1.54,-2.31l-0.21,-3.41l-1.44,-2.93l-1.27,-1.16l-1.33,-0.57l-1.31,-3.37l-0.77,-0.67l-0.97,-1.97l-2.8,-4.03l-1.06,-0.17l0.37,-1.96l0.2,-0.72l2.74,0.3l1.08,-0.84l0.6,-0.94l1.74,-0.35l0.65,-1.03l0.71,-0.4l0.1,-0.62l-2.06,-2.28l4.39,-1.22l0.48,-0.37l2.77,0.69l3.66,1.9l7.03,5.5l4.87,0.3Z\", \"name\": \"Saudi Arabia\"}, \"SE\": {\"path\": \"M480.22,89.3l-4.03,1.17l-2.43,2.86l0.26,2.57l-8.77,6.64l-1.78,5.79l1.78,2.68l2.22,1.96l-2.07,3.77l-2.72,1.13l-0.95,6.04l-1.29,3.01l-2.74,-0.31l-0.4,0.22l-1.31,2.59l-2.34,0.13l-0.75,-3.09l-2.08,-4.03l-1.83,-4.96l1.0,-1.93l2.14,-2.7l0.83,-4.45l-1.6,-2.17l-0.15,-4.94l1.48,-3.39l2.58,-0.15l0.87,-1.59l-0.78,-1.57l3.76,-5.59l4.04,-7.48l2.17,0.01l0.39,-0.29l0.57,-2.07l4.37,0.64l0.46,-0.34l0.33,-2.56l1.1,-0.13l6.94,4.87l0.06,6.32l0.66,1.36Z\", \"name\": \"Sweden\"}, \"SD\": {\"path\": \"M505.98,259.4l-0.34,-0.77l-1.17,-0.9l-0.26,-1.61l0.29,-1.81l-0.34,-0.46l-1.16,-0.17l-0.54,0.59l-1.23,0.11l-0.28,0.65l0.53,0.65l0.17,1.22l-2.44,3.0l-0.96,0.19l-2.39,-1.4l-0.95,0.52l-0.38,0.78l-1.11,0.41l-0.29,0.5l-1.94,0.0l-0.54,-0.52l-1.81,-0.09l-0.95,0.4l-2.45,-2.35l-2.07,0.54l-0.73,1.26l-0.6,2.1l-1.25,0.58l-0.75,-0.62l0.27,-2.65l-1.48,-1.78l-0.22,-1.48l-0.92,-0.96l-0.02,-1.29l-0.57,-1.16l-0.68,-0.16l0.69,-1.29l-0.18,-1.14l0.65,-0.62l0.03,-0.55l-0.36,-0.41l1.55,-2.97l1.91,0.16l0.43,-0.4l-0.1,-10.94l2.49,-0.01l0.4,-0.4l-0.0,-4.82l29.02,0.0l0.64,2.04l-0.49,0.66l0.36,2.69l0.93,3.16l2.12,1.55l-0.89,1.04l-1.72,0.39l-0.98,0.9l-1.43,5.65l0.24,1.15l-0.38,2.06l-0.96,2.38l-1.53,1.31l-1.32,2.91l-1.22,0.86l-0.37,1.34Z\", \"name\": \"Sudan\"}, \"DO\": {\"path\": \"M241.8,239.2l0.05,-0.65l-0.46,-0.73l0.42,-0.44l0.19,-1.0l-0.09,-1.53l1.66,0.01l1.99,0.63l0.33,0.67l1.28,0.19l0.33,0.76l1.0,0.08l0.8,0.62l-0.45,0.51l-1.13,-0.47l-1.88,-0.01l-1.27,0.59l-0.75,-0.55l-1.01,0.54l-0.79,1.4l-0.23,-0.61Z\", \"name\": \"Dominican Rep.\"}, \"DJ\": {\"path\": \"M528.43,256.18l-0.45,0.66l-0.58,-0.25l-1.51,0.13l-0.18,-1.01l1.45,-1.95l0.83,0.17l0.77,-0.44l0.2,1.0l-1.2,0.51l-0.06,0.7l0.73,0.47Z\", \"name\": \"Djibouti\"}, \"DK\": {\"path\": \"M452.28,129.07l-1.19,2.24l-2.13,-1.6l-0.23,-0.95l2.98,-0.95l0.57,1.26ZM447.74,126.31l-0.26,0.57l-0.88,-0.07l-1.8,2.53l0.48,1.69l-1.09,0.36l-1.61,-0.39l-0.89,-1.69l-0.07,-3.43l0.96,-1.73l2.02,-0.2l1.09,-1.07l1.33,-0.67l-0.05,1.06l-0.73,1.41l0.3,1.0l1.2,0.64Z\", \"name\": \"Denmark\"}, \"DE\": {\"path\": \"M453.14,155.55l-0.55,-0.36l-1.2,-0.1l-1.87,0.57l-2.13,-0.13l-0.56,0.63l-0.86,-0.6l-0.96,0.09l-2.57,-0.93l-0.85,0.67l-1.47,-0.02l0.24,-1.75l1.23,-2.14l-0.28,-0.59l-3.52,-0.58l-0.92,-0.66l0.12,-1.2l-0.48,-0.88l0.27,-2.17l-0.37,-3.03l1.41,-0.22l0.63,-1.26l0.66,-3.19l-0.41,-1.18l0.26,-0.39l1.66,-0.15l0.33,0.54l0.62,0.07l1.7,-1.69l-0.54,-3.02l1.37,0.33l1.31,-0.37l0.31,1.18l2.25,0.71l-0.02,0.92l0.5,0.4l2.55,-0.65l1.34,-0.87l2.57,1.24l1.06,0.98l0.48,1.44l-0.57,0.74l-0.0,0.48l0.87,1.15l0.57,1.64l-0.14,1.29l0.82,1.7l-1.5,-0.07l-0.56,0.57l-4.47,2.15l-0.22,0.54l0.68,2.26l2.58,2.16l-0.66,1.11l-0.79,0.36l-0.23,0.43l0.32,1.87Z\", \"name\": \"Germany\"}, \"YE\": {\"path\": \"M528.27,246.72l0.26,-0.42l-0.22,-1.01l0.19,-1.5l0.92,-0.69l-0.07,-1.35l0.39,-0.75l1.01,0.47l3.34,-0.27l3.76,0.41l0.95,0.81l1.36,-0.58l1.74,-2.62l2.18,-1.09l6.86,-0.94l2.48,5.41l-1.64,0.76l-0.56,1.9l-6.23,2.16l-2.29,1.8l-1.93,0.05l-1.41,1.02l-4.24,0.74l-1.72,1.49l-3.28,0.19l-0.52,-1.18l0.02,-1.51l-1.34,-3.29Z\", \"name\": \"Yemen\"}, \"AT\": {\"path\": \"M462.89,152.8l0.04,2.25l-1.07,0.0l-0.33,0.63l0.36,0.51l-1.04,2.13l-2.02,0.07l-1.33,0.7l-5.29,-0.99l-0.47,-0.93l-0.44,-0.21l-2.47,0.55l-0.42,0.51l-3.18,-0.81l0.43,-0.91l1.12,0.78l0.6,-0.17l0.25,-0.58l1.93,0.12l1.86,-0.56l1.0,0.08l0.68,0.57l0.62,-0.15l0.26,-0.77l-0.3,-1.78l0.8,-0.44l0.68,-1.15l1.52,0.85l0.47,-0.06l1.34,-1.25l0.64,-0.17l1.81,0.92l1.28,-0.11l0.7,0.37Z\", \"name\": \"Austria\"}, \"DZ\": {\"path\": \"M441.46,188.44l-0.32,1.07l0.39,2.64l-0.54,2.16l-1.58,1.82l0.37,2.39l1.91,1.55l0.18,0.8l1.42,1.03l1.84,7.23l0.12,1.16l-0.57,5.0l0.2,1.51l-0.87,0.99l-0.02,0.51l1.41,1.86l0.14,1.2l0.89,1.48l0.5,0.16l0.98,-0.41l1.73,1.08l0.82,1.23l-8.22,4.81l-7.23,5.11l-3.43,1.13l-2.3,0.21l-0.28,-1.59l-2.56,-1.09l-0.67,-1.25l-26.12,-17.86l0.01,-3.47l3.77,-1.88l2.44,-0.41l2.12,-0.75l1.08,-1.42l2.81,-1.05l0.35,-2.08l1.33,-0.29l1.04,-0.94l3.47,-0.69l0.46,-1.08l-0.1,-0.45l-0.58,-0.52l-0.82,-2.81l-0.19,-1.83l-0.78,-1.49l2.03,-1.31l2.63,-0.48l1.7,-1.22l2.31,-0.84l8.24,-0.73l1.49,0.38l2.28,-1.1l2.46,-0.02l0.92,0.6l1.35,-0.05Z\", \"name\": \"Algeria\"}, \"US\": {\"path\": \"M892.72,99.2l1.31,0.53l1.41,-0.37l1.89,0.98l1.89,0.42l-1.32,0.58l-2.9,-1.53l-2.08,0.22l-0.26,-0.15l0.07,-0.67ZM183.22,150.47l0.37,1.47l1.12,0.85l4.23,0.7l2.39,0.98l2.17,-0.38l1.85,0.5l-1.55,0.65l-3.49,2.61l-0.16,0.77l0.5,0.39l2.33,-0.61l1.77,1.02l5.15,-2.4l-0.31,0.65l0.25,0.56l1.36,0.38l1.71,1.16l4.7,-0.88l0.67,0.85l1.31,0.21l0.58,0.58l-1.34,0.17l-2.18,-0.32l-3.6,0.89l-2.71,3.25l0.35,0.9l0.59,-0.0l0.55,-0.6l-1.36,4.65l0.29,3.09l0.67,1.58l0.61,0.45l1.77,-0.44l1.6,-1.96l0.14,-2.21l-0.82,-1.96l0.11,-1.13l1.19,-2.37l0.44,-0.33l0.48,0.75l0.4,-0.29l0.4,-1.37l0.6,-0.47l0.24,-0.8l1.69,0.49l1.65,1.08l-0.03,2.37l-1.27,1.13l-0.0,1.13l0.87,0.36l1.66,-1.29l0.5,0.17l0.5,2.6l-2.49,3.75l0.17,0.61l1.54,0.62l1.48,0.17l1.92,-0.44l4.72,-2.15l2.16,-1.8l-0.05,-1.24l0.75,-0.22l3.92,0.36l2.12,-1.05l0.21,-0.4l-0.28,-1.48l3.27,-2.4l8.32,-0.02l0.56,-0.82l1.9,-0.77l0.93,-1.51l0.74,-2.37l1.58,-1.98l0.92,0.62l1.47,-0.47l0.8,0.66l-0.0,4.09l1.96,2.6l-2.34,1.31l-5.37,2.09l-1.83,2.72l0.02,1.79l0.83,1.59l0.54,0.23l-6.19,0.94l-2.2,0.89l-0.23,0.48l0.45,0.29l2.99,-0.46l-2.19,0.56l-1.13,0.0l-0.15,-0.32l-0.48,0.08l-0.76,0.82l0.22,0.67l0.32,0.06l-0.41,1.62l-1.27,1.58l-1.48,-1.07l-0.49,-0.04l-0.16,0.46l0.52,1.58l0.61,0.59l0.03,0.79l-0.95,1.38l-1.21,-1.22l-0.27,-2.27l-0.35,-0.35l-0.42,0.25l-0.48,1.27l0.33,1.41l-0.97,-0.27l-0.48,0.24l0.18,0.5l1.52,0.83l0.1,2.52l0.79,0.51l0.52,3.42l-1.42,1.88l-2.47,0.8l-1.71,1.66l-1.31,0.25l-1.27,1.03l-0.43,0.99l-2.69,1.78l-2.64,3.03l-0.45,2.12l0.45,2.08l0.85,2.38l1.09,1.9l0.04,1.2l1.16,3.06l-0.18,2.69l-0.55,1.43l-0.47,0.21l-0.89,-0.23l-0.49,-1.18l-0.87,-0.56l-2.75,-5.16l0.48,-1.68l-0.72,-1.78l-2.01,-2.38l-1.12,-0.53l-2.72,1.18l-1.47,-1.35l-1.57,-0.68l-2.99,0.31l-2.17,-0.3l-2.0,0.19l-1.15,0.46l-0.19,0.58l0.39,0.63l0.14,1.34l-0.84,-0.2l-0.84,0.46l-1.58,-0.07l-2.08,-1.44l-2.09,0.33l-1.91,-0.62l-3.73,0.84l-2.39,2.07l-2.54,1.22l-1.45,1.41l-0.61,1.38l0.34,3.71l-0.29,0.02l-3.5,-1.33l-1.25,-3.11l-1.44,-1.5l-2.24,-3.56l-1.76,-1.09l-2.27,-0.01l-1.71,2.07l-1.76,-0.69l-1.16,-0.74l-1.52,-2.98l-3.93,-3.16l-4.34,-0.0l-0.4,0.4l-0.0,0.74l-6.5,0.02l-9.02,-3.14l-0.34,-0.71l-5.7,0.49l-0.43,-1.29l-1.62,-1.61l-1.14,-0.38l-0.55,-0.88l-1.28,-0.13l-1.01,-0.77l-2.22,-0.27l-0.43,-0.3l-0.36,-1.58l-2.4,-2.83l-2.01,-3.85l-0.06,-0.9l-2.92,-3.26l-0.33,-2.29l-1.3,-1.66l0.52,-2.37l-0.09,-2.57l-0.78,-2.3l0.95,-2.82l0.61,-5.68l-0.47,-4.27l-1.46,-4.08l3.19,0.79l1.26,2.83l0.69,0.08l0.69,-1.14l-1.1,-4.79l68.76,-0.0l0.4,-0.4l0.14,-0.86ZM32.44,67.52l1.73,1.97l0.55,0.05l0.99,-0.79l3.65,0.24l-0.09,0.62l0.32,0.45l3.83,0.77l2.61,-0.43l5.19,1.4l4.84,0.43l1.89,0.57l3.42,-0.7l6.14,1.87l-0.03,38.06l0.38,0.4l2.39,0.11l2.31,0.98l3.9,3.99l0.55,0.04l2.4,-2.03l2.16,-1.04l1.2,1.71l3.95,3.14l4.09,6.63l4.2,2.29l0.06,1.83l-1.02,1.23l-1.16,-1.08l-2.04,-1.03l-0.67,-2.89l-3.28,-3.03l-1.65,-3.57l-6.35,-0.32l-2.82,-1.01l-5.26,-3.85l-6.77,-2.04l-3.53,0.3l-4.81,-1.69l-3.25,-1.63l-2.78,0.8l-0.28,0.46l0.44,2.21l-3.91,0.96l-2.26,1.27l-2.3,0.65l-0.27,-1.65l1.05,-3.42l2.49,-1.09l0.16,-0.6l-0.69,-0.96l-0.55,-0.1l-3.19,2.12l-1.78,2.56l-3.55,2.61l-0.04,0.61l1.56,1.52l-2.07,2.29l-5.11,2.57l-0.77,1.66l-3.76,1.77l-0.92,1.73l-2.69,1.38l-1.81,-0.22l-6.95,3.32l-3.97,0.91l4.85,-2.5l2.59,-1.86l3.26,-0.52l1.19,-1.4l3.42,-2.1l2.59,-2.27l0.42,-2.68l1.23,-2.1l-0.04,-0.46l-0.45,-0.11l-2.68,1.03l-0.63,-0.49l-0.53,0.03l-1.05,1.04l-1.36,-1.54l-0.66,0.08l-0.32,0.62l-0.58,-1.14l-0.56,-0.16l-2.41,1.42l-1.07,-0.0l-0.17,-1.75l0.3,-1.71l-1.61,-1.33l-3.41,0.59l-1.96,-1.63l-1.57,-0.84l-0.15,-2.21l-1.7,-1.43l0.82,-1.88l1.99,-2.12l0.88,-1.92l1.71,-0.24l2.04,0.51l1.87,-1.77l1.91,0.25l1.91,-1.23l0.17,-0.43l-0.47,-1.82l-1.07,-0.7l1.39,-1.17l0.12,-0.45l-0.39,-0.26l-1.65,0.07l-2.66,0.88l-0.75,0.78l-1.92,-0.8l-3.46,0.44l-3.44,-0.91l-1.06,-1.61l-2.65,-1.99l2.91,-1.43l5.5,-2.0l1.52,0.0l-0.26,1.62l0.41,0.46l5.29,-0.16l0.3,-0.65l-2.03,-2.59l-3.14,-1.68l-1.79,-2.12l-2.4,-1.83l-3.09,-1.24l1.04,-1.69l4.23,-0.14l3.36,-2.07l0.73,-2.27l2.39,-1.99l2.42,-0.52l4.65,-1.97l2.46,0.23l3.71,-2.35l3.5,0.89ZM37.6,123.41l-2.25,1.23l-0.95,-0.69l-0.29,-1.24l3.21,-1.63l1.42,0.21l0.67,0.7l-1.8,1.42ZM31.06,234.03l0.98,0.47l0.74,0.87l-1.77,1.07l-0.44,-1.53l0.49,-0.89ZM29.34,232.07l0.18,0.05l0.08,0.05l-0.16,0.03l-0.11,-0.14ZM25.16,230.17l0.05,-0.03l0.18,0.22l-0.13,-0.01l-0.1,-0.18ZM5.89,113.26l-1.08,0.41l-2.21,-1.12l1.53,-0.4l1.62,0.28l0.14,0.83Z\", \"name\": \"United States\"}, \"LV\": {\"path\": \"M489.16,122.85l0.96,0.66l0.22,1.65l0.68,1.76l-3.65,1.7l-2.23,-1.58l-1.29,-0.26l-0.68,-0.77l-2.42,0.34l-4.16,-0.23l-2.47,0.9l0.06,-1.98l1.13,-2.06l1.95,-1.02l2.12,2.58l2.01,-0.07l0.38,-0.33l0.44,-2.52l1.76,-0.53l3.06,1.7l2.15,0.07Z\", \"name\": \"Latvia\"}, \"UY\": {\"path\": \"M286.85,372.74l-0.92,1.5l-2.59,1.44l-1.69,-0.52l-1.42,0.26l-2.39,-1.19l-1.52,0.08l-1.27,-1.3l0.16,-1.5l0.56,-0.79l-0.02,-2.73l1.21,-4.74l1.19,-0.21l2.37,2.0l1.08,0.03l4.36,3.17l1.22,1.6l-0.96,1.5l0.61,1.4Z\", \"name\": \"Uruguay\"}, \"LB\": {\"path\": \"M510.37,198.01l-0.88,0.51l1.82,-3.54l0.62,0.08l0.22,0.61l-1.13,0.88l-0.65,1.47Z\", \"name\": \"Lebanon\"}, \"LA\": {\"path\": \"M689.54,248.53l-1.76,-0.74l-0.49,0.15l-0.94,1.46l-1.32,-0.64l0.62,-0.98l0.11,-2.17l-2.04,-2.42l-0.25,-2.65l-1.9,-2.1l-2.15,-0.31l-0.78,0.91l-1.12,0.06l-1.05,-0.4l-2.06,1.2l-0.04,-1.59l0.61,-2.68l-0.36,-0.49l-1.35,-0.1l-0.11,-1.23l-0.96,-0.88l1.96,-1.89l0.39,0.36l1.33,0.07l0.42,-0.45l-0.34,-2.66l0.7,-0.21l1.28,1.81l1.11,2.35l0.36,0.23l2.82,0.02l0.71,1.67l-1.39,0.65l-0.72,0.93l0.13,0.6l2.91,1.51l3.6,5.25l1.88,1.78l0.56,1.62l-0.35,1.96Z\", \"name\": \"Lao PDR\"}, \"TW\": {\"path\": \"M724.01,226.68l-0.74,1.48l-0.9,-1.52l-0.25,-1.74l1.38,-2.44l1.73,-1.74l0.64,0.44l-1.85,5.52Z\", \"name\": \"Taiwan\"}, \"TT\": {\"path\": \"M266.64,259.32l0.28,-1.16l1.13,-0.22l-0.06,1.2l-1.35,0.18Z\", \"name\": \"Trinidad and Tobago\"}, \"TR\": {\"path\": \"M513.21,175.47l3.64,1.17l3.05,-0.44l2.1,0.26l3.11,-1.56l2.46,-0.13l2.19,1.33l0.33,0.82l-0.22,1.33l0.25,0.44l2.28,1.13l-1.17,0.57l-0.21,0.45l0.75,3.2l-0.41,1.16l1.13,1.92l-0.55,0.22l-0.9,-0.67l-2.91,-0.37l-1.24,0.46l-4.23,0.41l-2.81,1.05l-1.91,0.01l-1.52,-0.53l-2.58,0.75l-0.66,-0.45l-0.62,0.3l-0.12,1.45l-0.89,0.84l-0.47,-0.67l0.79,-1.3l-0.41,-0.2l-1.43,0.23l-2.0,-0.63l-2.02,1.65l-3.51,0.3l-2.13,-1.53l-2.7,-0.1l-0.86,1.24l-1.38,0.27l-2.29,-1.44l-2.71,-0.01l-1.37,-2.65l-1.68,-1.52l1.07,-1.99l-0.09,-0.49l-1.27,-1.12l2.37,-2.41l3.7,-0.11l1.28,-2.24l4.49,0.37l3.21,-1.97l2.81,-0.82l3.99,-0.06l4.29,2.07ZM488.79,176.72l-1.72,1.31l-0.5,-0.88l1.37,-2.57l-0.7,-0.85l1.7,-0.63l1.8,0.34l0.46,1.17l1.76,0.78l-2.87,0.32l-1.3,1.01Z\", \"name\": \"Turkey\"}, \"LK\": {\"path\": \"M624.16,268.99l-1.82,0.48l-0.99,-1.67l-0.42,-3.46l0.95,-3.43l1.21,0.98l2.26,4.19l-0.34,2.33l-0.85,0.58Z\", \"name\": \"Sri Lanka\"}, \"TN\": {\"path\": \"M448.1,188.24l-1.0,1.27l-0.02,1.32l0.84,0.88l-0.28,2.09l-1.53,1.32l-0.12,0.42l0.48,1.54l1.42,0.32l0.53,1.11l0.9,0.52l-0.11,1.67l-3.54,2.64l-0.1,2.38l-0.58,0.3l-0.96,-4.45l-1.54,-1.25l-0.16,-0.78l-1.92,-1.56l-0.18,-1.76l1.51,-1.62l0.59,-2.34l-0.38,-2.78l0.42,-1.21l2.45,-1.05l1.29,0.26l-0.06,1.11l0.58,0.38l1.47,-0.73Z\", \"name\": \"Tunisia\"}, \"TL\": {\"path\": \"M734.55,307.93l-0.1,-0.97l4.5,-0.86l-2.82,1.28l-1.59,0.55Z\", \"name\": \"Timor-Leste\"}, \"TM\": {\"path\": \"M553.03,173.76l-0.04,0.34l-0.09,-0.22l0.13,-0.12ZM555.87,172.66l0.45,-0.1l1.48,0.74l2.06,2.43l4.07,-0.18l0.38,-0.51l-0.32,-1.19l1.92,-0.94l1.91,-1.59l2.94,1.39l0.43,2.47l1.19,0.67l2.58,-0.13l0.62,0.4l1.32,3.12l4.54,3.44l2.67,1.45l3.06,1.14l-0.04,1.05l-1.33,-0.75l-0.59,0.19l-0.32,0.84l-2.2,0.81l-0.46,2.13l-1.21,0.74l-1.91,0.42l-0.73,1.33l-1.56,0.31l-2.22,-0.94l-0.2,-2.17l-0.38,-0.36l-1.73,-0.09l-2.76,-2.46l-2.14,-0.4l-2.84,-1.48l-1.78,-0.27l-1.24,0.53l-1.57,-0.08l-2.0,1.69l-1.7,0.43l-0.36,-1.58l0.36,-2.98l-0.22,-0.4l-1.65,-0.84l0.54,-1.69l-0.34,-0.52l-1.22,-0.13l0.36,-1.64l2.22,0.59l2.2,-0.95l0.12,-0.65l-1.77,-1.74l-0.66,-1.57Z\", \"name\": \"Turkmenistan\"}, \"TJ\": {\"path\": \"M597.75,178.82l-2.54,-0.44l-0.47,0.34l-0.24,1.7l0.43,0.45l2.64,-0.22l3.18,0.95l4.39,-0.41l0.56,2.37l0.52,0.29l0.67,-0.24l1.11,0.49l0.21,2.13l-3.76,-0.21l-1.8,1.32l-1.76,0.74l-0.61,-0.58l0.21,-2.23l-0.64,-0.49l-0.07,-0.93l-1.36,-0.66l-0.45,0.07l-1.08,1.01l-0.55,1.48l-1.31,-0.05l-0.95,1.16l-0.9,-0.35l-1.86,0.74l1.26,-2.83l-0.54,-2.17l-1.67,-0.82l0.33,-0.66l2.18,-0.04l1.19,-1.63l0.76,-1.79l2.43,-0.5l-0.26,1.0l0.73,1.05Z\", \"name\": \"Tajikistan\"}, \"LS\": {\"path\": \"M491.06,363.48l-0.49,0.15l-1.49,-1.67l1.1,-1.43l2.19,-1.44l1.51,1.27l-0.98,1.82l-1.23,0.38l-0.62,0.93Z\", \"name\": \"Lesotho\"}, \"TH\": {\"path\": \"M670.27,255.86l-1.41,3.87l0.15,2.0l0.38,0.36l1.38,0.07l0.9,2.04l0.55,2.34l1.4,1.44l1.61,0.38l0.96,0.97l-0.5,0.64l-1.1,0.2l-0.34,-1.18l-2.04,-1.1l-0.63,0.23l-0.63,-0.62l-0.48,-1.3l-2.56,-2.63l-0.73,0.41l0.95,-3.89l2.16,-4.22ZM670.67,254.77l-0.92,-2.18l-0.26,-2.61l-2.14,-3.06l0.71,-0.49l0.89,-2.59l-3.61,-5.45l0.87,-0.51l1.05,-2.58l1.74,-0.18l2.6,-1.59l0.76,0.56l0.13,1.39l0.37,0.36l1.23,0.09l-0.51,2.28l0.05,2.42l0.6,0.34l2.43,-1.42l0.77,0.39l1.47,-0.07l0.71,-0.88l1.48,0.14l1.71,1.88l0.25,2.65l1.92,2.11l-0.1,1.89l-0.61,0.86l-2.22,-0.33l-3.5,0.64l-1.6,2.12l0.36,2.58l-1.51,-0.79l-1.84,-0.01l0.28,-1.52l-0.4,-0.47l-2.21,0.01l-0.4,0.37l-0.19,2.74l-0.34,0.93Z\", \"name\": \"Thailand\"}, \"TF\": {\"path\": \"M596.68,420.38l-3.2,0.18l-0.05,-1.26l0.39,-1.41l1.3,0.78l2.08,0.35l-0.52,1.36Z\", \"name\": \"Fr. S. Antarctic Lands\"}, \"TG\": {\"path\": \"M422.7,257.63l-0.09,1.23l1.53,1.52l0.08,1.09l0.5,0.65l-0.11,5.62l0.49,1.47l-1.31,0.35l-1.02,-2.13l-0.18,-1.12l0.53,-2.19l-0.63,-1.16l-0.22,-3.68l-1.01,-1.4l0.07,-0.28l1.37,0.03Z\", \"name\": \"Togo\"}, \"TD\": {\"path\": \"M480.25,235.49l0.12,9.57l-2.1,0.05l-1.14,1.89l-0.69,1.63l0.34,0.73l-0.66,0.91l0.24,0.89l-0.86,1.95l0.45,0.5l0.6,-0.1l0.34,0.64l0.03,1.38l0.9,1.04l-1.45,0.43l-1.27,1.03l-1.83,2.76l-2.16,1.07l-2.31,-0.15l-0.86,0.25l-0.26,0.49l0.17,0.61l-2.11,1.68l-2.85,0.87l-1.09,-0.57l-0.73,0.66l-1.12,0.1l-1.1,-3.12l-1.25,-0.64l-1.22,-1.22l0.29,-0.64l3.01,0.04l0.35,-0.6l-1.3,-2.2l-0.08,-3.31l-0.97,-1.66l0.22,-1.04l-0.38,-0.48l-1.22,-0.04l0.0,-1.25l-0.98,-1.07l0.96,-3.01l3.25,-2.65l0.13,-3.33l0.95,-5.18l0.52,-1.07l-0.1,-0.48l-0.91,-0.78l-0.2,-0.96l-0.8,-0.58l-0.55,-3.65l2.1,-1.2l19.57,9.83Z\", \"name\": \"Chad\"}, \"LY\": {\"path\": \"M483.48,203.15l-0.75,1.1l0.29,1.39l-0.6,1.83l0.73,2.14l0.0,24.12l-2.48,0.01l-0.41,0.85l-19.41,-9.76l-4.41,2.28l-1.37,-1.33l-3.82,-1.1l-1.14,-1.65l-1.98,-1.23l-1.22,0.32l-0.66,-1.11l-0.17,-1.26l-1.28,-1.69l0.87,-1.19l-0.07,-4.34l0.43,-2.27l-0.86,-3.45l1.13,-0.76l0.22,-1.16l-0.2,-1.03l3.48,-2.61l0.29,-1.94l2.45,0.8l1.18,-0.21l1.98,0.44l3.15,1.18l1.37,2.54l5.72,1.67l2.64,1.35l1.61,-0.72l1.29,-1.34l-0.44,-2.34l0.66,-1.13l1.67,-1.21l1.57,-0.35l3.14,0.53l1.08,1.28l3.99,0.78l0.36,0.54Z\", \"name\": \"Libya\"}, \"AE\": {\"path\": \"M550.76,223.97l1.88,-0.4l3.84,0.02l4.78,-4.75l0.19,0.36l0.26,1.58l-0.81,0.01l-0.39,0.35l-0.08,2.04l-0.81,0.63l-0.01,0.96l-0.66,0.99l-0.39,1.41l-7.08,-1.25l-0.7,-1.96Z\", \"name\": \"United Arab Emirates\"}, \"VE\": {\"path\": \"M240.68,256.69l0.53,0.75l-0.02,1.06l-1.07,1.78l0.95,2.0l0.42,0.22l1.4,-0.44l0.56,-1.83l-0.77,-1.17l-0.1,-1.47l2.82,-0.93l0.26,-0.49l-0.28,-0.96l0.3,-0.28l0.66,1.31l1.96,0.26l1.4,1.22l0.08,0.68l0.39,0.35l4.81,-0.22l1.49,1.11l1.92,0.31l1.67,-0.84l0.22,-0.6l3.44,-0.14l-0.17,0.55l0.86,1.19l2.19,0.35l1.67,1.1l0.37,1.86l0.41,0.32l1.55,0.17l-1.66,1.35l-0.22,0.92l0.65,0.97l-1.67,0.54l-0.3,0.4l0.04,0.99l-0.56,0.57l-0.01,0.55l1.85,2.27l-0.66,0.69l-4.47,1.29l-0.72,0.54l-3.69,-0.9l-0.71,0.27l-0.02,0.7l0.91,0.53l-0.08,1.54l0.35,1.58l0.35,0.31l1.66,0.17l-1.3,0.52l-0.48,1.13l-2.68,0.91l-0.6,0.77l-1.57,0.13l-1.17,-1.13l-0.8,-2.52l-1.25,-1.26l1.02,-1.23l-1.29,-2.95l0.18,-1.62l1.0,-2.21l-0.2,-0.49l-1.14,-0.46l-4.02,0.36l-1.82,-2.1l-1.57,-0.33l-2.99,0.22l-1.06,-0.97l0.25,-1.23l-0.2,-1.01l-0.59,-0.69l-0.29,-1.06l-1.08,-0.39l0.78,-2.79l1.9,-2.11Z\", \"name\": \"Venezuela\"}, \"AF\": {\"path\": \"M600.7,188.88l-1.57,1.3l-0.1,0.48l0.8,2.31l-1.09,1.04l-0.03,1.27l-0.48,0.71l-2.16,-0.08l-0.37,0.59l0.78,1.48l-1.38,0.69l-1.06,1.69l0.06,1.7l-0.65,0.52l-0.91,-0.21l-1.91,0.36l-0.48,0.77l-1.88,0.13l-1.4,1.56l-0.18,2.32l-2.91,1.02l-1.65,-0.23l-0.71,0.55l-1.41,-0.3l-2.41,0.39l-3.52,-1.17l1.96,-2.35l-0.21,-1.78l-0.3,-0.34l-1.63,-0.4l-0.19,-1.58l-0.75,-2.03l0.95,-1.36l-0.19,-0.6l-0.73,-0.28l1.47,-4.8l2.14,0.9l2.12,-0.36l0.74,-1.34l1.77,-0.39l1.54,-0.92l0.63,-2.31l1.87,-0.5l0.49,-0.81l0.94,0.56l2.13,0.11l2.55,0.92l1.95,-0.83l0.65,0.43l0.56,-0.13l0.69,-1.12l1.57,-0.08l0.72,-1.66l0.79,-0.74l0.8,0.39l-0.17,0.56l0.71,0.58l-0.08,2.39l1.11,0.95ZM601.37,188.71l1.73,-0.71l1.43,-1.18l4.03,0.35l-2.23,0.74l-4.95,0.8Z\", \"name\": \"Afghanistan\"}, \"IQ\": {\"path\": \"M530.82,187.47l0.79,0.66l1.26,-0.28l1.46,3.08l1.63,0.94l0.14,1.23l-1.22,1.05l-0.53,2.52l1.73,2.67l3.12,1.62l1.15,1.88l-0.38,1.85l0.39,0.48l0.41,-0.0l0.02,1.07l0.76,0.94l-2.47,-0.1l-1.71,2.44l-4.31,-0.2l-7.02,-5.48l-3.73,-1.94l-2.88,-0.73l-0.85,-2.87l5.45,-3.02l0.95,-3.43l-0.19,-1.96l1.27,-0.7l1.22,-1.7l0.87,-0.36l2.69,0.34Z\", \"name\": \"Iraq\"}, \"IS\": {\"path\": \"M384.14,88.06l-0.37,2.61l2.54,2.51l-2.9,2.75l-9.19,3.4l-9.25,-1.66l1.7,-1.22l-0.1,-0.7l-4.05,-1.47l2.96,-0.53l0.33,-0.43l-0.11,-1.2l-0.33,-0.36l-4.67,-0.85l1.28,-2.04l3.45,-0.56l3.77,2.72l0.44,0.02l3.64,-2.16l3.3,1.08l3.98,-2.16l3.58,0.26Z\", \"name\": \"Iceland\"}, \"IR\": {\"path\": \"M533.43,187.16l-1.27,-2.15l0.42,-0.98l-0.71,-3.04l1.03,-0.5l0.33,0.83l1.26,1.35l2.05,0.51l1.11,-0.16l2.89,-2.11l0.62,-0.14l0.39,0.46l-0.72,1.2l0.06,0.49l1.56,1.53l0.65,0.04l0.67,1.81l2.56,0.83l1.87,1.48l3.69,0.49l3.91,-0.76l0.47,-0.73l2.17,-0.6l1.66,-1.54l1.51,0.08l1.18,-0.53l1.59,0.24l2.83,1.48l1.88,0.3l2.77,2.47l1.77,0.18l0.18,1.99l-1.68,5.49l0.24,0.5l0.61,0.23l-0.82,1.48l0.8,2.18l0.19,1.71l0.3,0.34l1.63,0.4l0.15,1.32l-2.15,2.35l-0.01,0.53l2.21,3.03l2.34,1.24l0.06,2.14l1.24,0.72l0.11,0.69l-3.31,1.27l-1.08,3.03l-9.68,-1.68l-0.99,-3.05l-1.43,-0.73l-2.17,0.46l-2.47,1.26l-2.83,-0.82l-2.46,-2.02l-2.41,-0.8l-3.42,-6.06l-0.48,-0.2l-1.18,0.39l-1.44,-0.82l-0.5,0.08l-0.65,0.74l-0.97,-1.01l-0.02,-1.31l-0.71,-0.39l0.26,-1.81l-1.29,-2.11l-3.13,-1.63l-1.58,-2.43l0.5,-1.9l1.31,-1.26l-0.19,-1.66l-1.74,-1.1l-1.57,-3.3Z\", \"name\": \"Iran\"}, \"AM\": {\"path\": \"M536.99,182.33l-0.28,0.03l-1.23,-2.13l-0.93,0.01l-0.62,-0.66l-0.69,-0.07l-0.96,-0.81l-1.56,-0.62l0.19,-1.12l-0.26,-0.79l2.72,-0.36l1.09,1.01l-0.17,0.92l1.02,0.78l-0.47,0.62l0.08,0.56l2.04,1.23l0.04,1.4Z\", \"name\": \"Armenia\"}, \"IT\": {\"path\": \"M451.59,158.63l3.48,0.94l-0.21,1.17l0.3,0.83l-1.49,-0.24l-2.04,1.1l-0.21,0.39l0.13,1.45l-0.25,1.12l0.82,1.57l2.39,1.63l1.31,2.54l2.79,2.43l2.05,0.08l0.21,0.23l-0.39,0.33l0.09,0.67l4.05,1.97l2.17,1.76l-0.16,0.36l-1.17,-1.08l-2.18,-0.49l-0.44,0.2l-1.05,1.91l0.14,0.54l1.57,0.95l-0.19,0.98l-1.06,0.33l-1.25,2.34l-0.37,0.08l0.0,-0.33l1.0,-2.45l-1.73,-3.17l-1.12,-0.51l-0.88,-1.33l-1.51,-0.51l-1.27,-1.25l-1.75,-0.18l-4.12,-3.21l-1.62,-1.65l-1.03,-3.19l-3.53,-1.36l-1.3,0.51l-1.69,1.41l0.16,-0.72l-0.28,-0.47l-1.14,-0.33l-0.53,-1.96l0.72,-0.78l0.04,-0.48l-0.65,-1.17l0.8,0.39l1.4,-0.23l1.11,-0.84l0.52,0.35l1.19,-0.1l0.75,-1.2l1.53,0.33l1.36,-0.56l0.35,-1.14l1.08,0.32l0.68,-0.64l1.98,-0.44l0.42,0.82ZM459.19,184.75l-0.65,1.65l0.32,1.05l-0.31,0.89l-1.5,-0.85l-4.5,-1.67l0.19,-0.82l2.67,0.23l3.78,-0.48ZM443.93,176.05l1.18,1.66l-0.3,3.32l-1.06,-0.01l-0.77,0.73l-0.53,-0.44l-0.1,-3.37l-0.39,-1.22l1.04,0.01l0.92,-0.68Z\", \"name\": \"Italy\"}, \"VN\": {\"path\": \"M690.56,230.25l-2.7,1.82l-2.09,2.46l-0.63,1.95l4.31,6.45l2.32,1.65l1.43,1.94l1.11,4.59l-0.32,4.24l-1.93,1.54l-2.84,1.61l-2.11,2.15l-2.73,2.06l-0.59,-1.05l0.63,-1.53l-0.13,-0.47l-1.34,-1.04l1.51,-0.71l2.55,-0.18l0.3,-0.63l-0.82,-1.14l4.0,-2.07l0.31,-3.05l-0.57,-1.77l0.42,-2.66l-0.73,-1.97l-1.86,-1.76l-3.63,-5.29l-2.72,-1.46l0.36,-0.47l1.5,-0.64l0.21,-0.52l-0.97,-2.27l-0.37,-0.24l-2.83,-0.02l-2.24,-3.9l0.83,-0.4l4.39,-0.29l2.06,-1.31l1.15,0.89l1.88,0.4l-0.17,1.51l1.35,1.16l1.67,0.45Z\", \"name\": \"Vietnam\"}, \"AR\": {\"path\": \"M249.29,428.93l-2.33,-0.52l-5.83,-0.43l-0.89,-1.66l0.05,-2.37l-0.45,-0.4l-1.43,0.18l-0.67,-0.91l-0.2,-3.13l1.88,-1.47l0.79,-2.04l-0.25,-1.7l1.3,-2.68l0.91,-4.15l-0.22,-1.69l0.85,-0.45l0.2,-0.44l-0.27,-1.16l-0.98,-0.68l0.59,-0.92l-0.05,-0.5l-1.04,-1.07l-0.52,-3.1l0.97,-0.86l-0.42,-3.58l1.2,-5.43l1.38,-0.98l0.16,-0.43l-0.75,-2.79l-0.01,-2.43l1.78,-1.75l0.06,-2.57l1.43,-2.85l0.01,-2.58l-0.69,-0.74l-1.09,-4.52l1.47,-2.7l-0.18,-2.79l0.85,-2.35l1.59,-2.46l1.73,-1.64l0.05,-0.52l-0.6,-0.84l0.44,-0.85l-0.07,-4.19l2.7,-1.44l0.86,-2.75l-0.21,-0.71l1.76,-2.01l2.9,0.57l1.38,1.78l0.68,-0.08l0.87,-1.87l2.39,0.09l4.95,4.77l2.17,0.49l3.0,1.92l2.47,1.0l0.25,0.82l-2.37,3.93l0.23,0.59l5.39,1.16l2.12,-0.44l2.45,-2.16l0.5,-2.38l0.76,-0.31l0.98,1.2l-0.04,1.8l-3.67,2.51l-2.85,2.66l-3.43,3.88l-1.3,5.07l0.01,2.72l-0.54,0.73l-0.36,3.28l3.14,2.64l-0.16,2.11l1.4,1.11l-0.1,1.09l-2.29,3.52l-3.55,1.49l-4.92,0.6l-2.71,-0.29l-0.43,0.51l0.5,1.65l-0.49,2.1l0.38,1.42l-1.19,0.83l-2.36,0.38l-2.3,-1.04l-1.38,0.83l0.41,3.64l1.69,0.91l1.4,-0.71l0.36,0.76l-2.04,0.86l-2.01,1.89l-0.97,4.63l-2.34,0.1l-2.09,1.78l-0.61,2.75l2.46,2.31l2.17,0.63l-0.7,2.32l-2.83,1.73l-1.73,3.86l-2.17,1.22l-1.16,1.67l0.75,3.76l1.04,1.28ZM256.71,438.88l-2.0,0.15l-1.4,-1.22l-3.82,-0.1l-0.0,-5.83l1.6,3.05l3.26,2.07l3.08,0.78l-0.71,1.1Z\", \"name\": \"Argentina\"}, \"AU\": {\"path\": \"M705.8,353.26l0.26,0.04l0.17,-0.47l-0.48,-1.42l0.92,1.11l0.45,0.15l0.27,-0.39l-0.1,-1.56l-1.98,-3.63l1.09,-3.31l-0.24,-1.57l0.34,-0.62l0.38,1.06l0.43,-0.19l0.99,-1.7l1.91,-0.83l1.29,-1.15l1.81,-0.91l0.96,-0.17l0.92,0.26l1.92,-0.95l1.47,-0.28l1.03,-0.8l1.43,0.04l2.78,-0.84l1.36,-1.15l0.71,-1.45l1.41,-1.26l0.3,-2.58l1.27,-1.59l0.78,1.65l0.54,0.19l1.07,-0.51l0.15,-0.6l-0.73,-1.0l0.45,-0.71l0.78,0.39l0.58,-0.3l0.28,-1.82l1.87,-2.14l1.12,-0.39l0.28,-0.58l0.62,0.17l0.53,-0.73l1.87,-0.57l1.65,1.05l1.35,1.48l3.39,0.38l0.43,-0.54l-0.46,-1.23l1.05,-1.79l1.04,-0.61l0.14,-0.55l-0.25,-0.41l0.88,-1.17l1.31,-0.77l1.3,0.27l2.1,-0.48l0.31,-0.4l-0.05,-1.3l-0.92,-0.77l1.48,0.56l1.41,1.07l2.11,0.65l0.81,-0.2l1.4,0.7l1.69,-0.66l0.8,0.19l0.64,-0.33l0.71,0.77l-1.33,1.94l-0.71,0.07l-0.35,0.51l0.24,0.86l-1.52,2.35l0.12,1.05l2.15,1.65l1.97,0.85l3.04,2.36l1.97,0.65l0.55,0.88l2.72,0.85l1.84,-1.1l2.07,-5.97l-0.42,-3.59l0.3,-1.73l0.47,-0.87l-0.31,-0.68l1.09,-3.28l0.46,-0.47l0.4,0.71l0.16,1.51l0.65,0.52l0.16,1.04l0.85,1.21l0.12,2.38l0.9,2.0l0.57,0.18l1.3,-0.78l1.69,1.7l-0.2,1.08l0.53,2.2l0.39,1.3l0.68,0.48l0.6,1.95l-0.19,1.48l0.81,1.76l6.01,3.69l-0.11,0.76l1.38,1.58l0.95,2.77l0.58,0.22l0.72,-0.41l0.8,0.9l0.61,0.01l0.46,2.41l4.81,4.71l0.66,2.02l-0.07,3.31l1.14,2.2l-0.13,2.24l-1.1,3.68l0.03,1.64l-0.47,1.89l-1.05,2.4l-1.9,1.47l-1.72,3.51l-2.38,6.09l-0.24,2.82l-1.14,0.8l-2.85,0.15l-2.31,1.19l-2.51,2.25l-3.09,-1.57l0.3,-1.15l-0.54,-0.47l-1.5,0.63l-2.01,1.94l-7.12,-2.18l-1.48,-1.63l-1.14,-3.74l-1.45,-1.26l-1.81,-0.26l0.56,-1.18l-0.61,-2.1l-0.72,-0.1l-1.14,1.82l-0.9,0.21l0.63,-0.82l0.36,-1.55l0.92,-1.31l-0.13,-2.34l-0.7,-0.22l-2.0,2.34l-1.51,0.93l-0.94,2.01l-1.35,-0.81l-0.02,-1.52l-1.57,-2.04l-1.09,-0.88l0.24,-0.33l-0.14,-0.59l-3.21,-1.69l-1.83,-0.12l-2.54,-1.35l-4.58,0.28l-6.02,1.9l-2.53,-0.13l-2.62,1.41l-2.13,0.63l-1.49,2.6l-3.49,0.31l-2.29,-0.5l-3.48,0.43l-1.6,1.47l-0.81,-0.04l-2.37,1.63l-3.26,-0.1l-3.72,-2.21l0.04,-1.05l1.19,-0.46l0.49,-0.89l0.21,-2.97l-0.28,-1.64l-1.34,-2.86l-0.38,-1.47l0.05,-1.72l-0.95,-1.7l-0.18,-0.97l-1.01,-0.99l-0.29,-1.98l-1.13,-1.75ZM784.92,393.44l2.65,1.02l3.23,-0.96l1.09,0.14l0.15,3.06l-0.85,1.13l-0.17,1.63l-0.87,-0.24l-1.57,1.91l-1.68,-0.18l-1.4,-2.36l-0.37,-2.04l-1.39,-2.51l0.04,-0.8l1.15,0.18Z\", \"name\": \"Australia\"}, \"IL\": {\"path\": \"M507.76,203.05l0.4,-0.78l0.18,0.4l-0.33,1.03l0.52,0.44l0.68,-0.22l-0.86,3.6l-1.16,-3.32l0.59,-0.74l-0.03,-0.41ZM508.73,200.34l0.37,-1.02l0.64,0.0l0.52,-0.51l-0.49,1.53l-0.56,-0.24l-0.48,0.23Z\", \"name\": \"Israel\"}, \"IN\": {\"path\": \"M623.34,207.03l-1.24,1.04l-0.97,2.55l0.22,0.51l8.04,3.87l3.42,0.37l1.57,1.38l4.92,0.88l2.18,-0.04l0.38,-0.3l0.29,-1.24l-0.32,-1.64l0.14,-0.87l0.82,-0.31l0.45,2.48l2.28,1.02l1.77,-0.38l4.14,0.1l0.38,-0.36l0.18,-1.66l-0.5,-0.65l1.37,-0.29l2.25,-1.99l2.7,-1.62l1.93,0.62l1.8,-0.98l0.79,1.14l-0.68,0.91l0.26,0.63l2.42,0.36l0.09,0.47l-0.83,0.75l0.13,1.07l-1.52,-0.29l-3.24,1.86l-0.13,1.78l-1.32,2.14l-0.18,1.39l-0.93,1.82l-1.64,-0.5l-0.52,0.37l-0.09,2.63l-0.56,1.11l0.19,0.81l-0.53,0.27l-1.18,-3.73l-1.08,-0.27l-0.38,0.31l-0.24,1.0l-0.66,-0.66l0.54,-1.06l1.22,-0.34l1.15,-2.25l-0.24,-0.56l-1.57,-0.47l-4.34,-0.28l-0.18,-1.56l-0.35,-0.35l-1.11,-0.12l-1.91,-1.12l-0.56,0.17l-0.88,1.82l0.11,0.49l1.36,1.07l-1.09,0.69l-0.69,1.11l0.18,0.56l1.24,0.57l-0.32,1.54l0.85,1.94l0.36,2.01l-0.22,0.59l-4.58,0.52l-0.33,0.42l0.13,1.8l-1.17,1.36l-3.65,1.81l-2.79,3.03l-4.32,3.28l-0.18,1.27l-4.65,1.79l-0.77,2.16l0.64,5.3l-1.06,2.49l-0.01,3.94l-1.24,0.28l-1.14,1.93l0.39,0.84l-1.68,0.53l-1.04,1.83l-0.65,0.47l-2.06,-2.05l-2.1,-6.02l-2.2,-3.64l-1.05,-4.75l-2.29,-3.57l-1.76,-8.2l0.01,-3.11l-0.49,-2.53l-0.55,-0.29l-3.53,1.52l-1.53,-0.27l-2.86,-2.77l0.85,-0.67l0.08,-0.55l-0.74,-1.03l-2.67,-2.06l1.24,-1.32l5.34,0.01l0.39,-0.49l-0.5,-2.29l-1.42,-1.46l-0.27,-1.93l-1.43,-1.2l2.31,-2.37l3.05,0.06l2.62,-2.85l1.6,-2.81l2.4,-2.73l0.07,-2.04l1.97,-1.48l-0.02,-0.65l-1.93,-1.31l-0.82,-1.78l-0.8,-2.21l0.9,-0.89l3.59,0.65l2.92,-0.42l2.33,-2.19l2.31,2.85l-0.24,2.13l0.99,1.59l-0.05,0.82l-1.34,-0.28l-0.47,0.48l0.7,3.06l2.62,1.99l2.99,1.65Z\", \"name\": \"India\"}, \"TZ\": {\"path\": \"M495.56,296.42l2.8,-3.12l-0.02,-0.81l-0.64,-1.3l0.68,-0.52l0.14,-1.47l-0.76,-1.25l0.31,-0.11l2.26,0.03l-0.51,2.76l0.76,1.3l0.5,0.12l1.05,-0.53l1.19,-0.12l0.61,0.24l1.43,-0.62l0.1,-0.67l-0.71,-0.62l1.57,-1.7l8.65,4.86l0.32,1.53l3.34,2.33l-1.05,2.8l0.13,1.61l1.63,1.12l-0.6,1.76l-0.01,2.33l1.89,4.03l0.57,0.43l-1.46,1.08l-2.61,0.94l-1.43,-0.04l-1.06,0.77l-2.29,0.36l-2.87,-0.68l-0.83,0.07l-0.63,-0.75l-0.31,-2.78l-1.32,-1.35l-3.25,-0.77l-3.96,-1.58l-1.18,-2.41l-0.32,-1.75l-1.76,-1.49l0.42,-1.05l-0.44,-0.89l0.08,-0.96l-0.46,-0.58l0.06,-0.56Z\", \"name\": \"Tanzania\"}, \"AZ\": {\"path\": \"M539.29,175.73l1.33,0.32l1.94,-1.8l2.3,3.34l1.43,0.43l-1.26,0.15l-0.35,0.32l-0.8,3.14l-0.99,0.96l0.05,1.11l-1.26,-1.13l0.7,-1.18l-0.04,-0.47l-0.74,-0.86l-1.48,0.15l-2.34,1.71l-0.03,-1.27l-2.03,-1.35l0.47,-0.62l-0.08,-0.56l-1.03,-0.79l0.29,-0.43l-0.14,-0.58l-1.13,-0.86l1.89,0.68l1.69,0.06l0.37,-0.87l-0.81,-1.37l0.42,0.06l1.63,1.72ZM533.78,180.57l0.61,0.46l0.69,-0.0l0.59,1.15l-0.68,-0.15l-1.21,-1.45Z\", \"name\": \"Azerbaijan\"}, \"IE\": {\"path\": \"M405.08,135.42l0.35,2.06l-1.75,2.78l-4.22,1.88l-2.84,-0.4l1.73,-3.0l-1.18,-3.53l4.6,-3.74l0.32,1.15l-0.49,1.74l0.4,0.51l1.47,-0.04l1.6,0.6Z\", \"name\": \"Ireland\"}, \"ID\": {\"path\": \"M756.47,287.89l0.69,4.01l2.79,1.78l0.51,-0.1l2.04,-2.59l2.71,-1.43l2.05,-0.0l3.9,1.73l2.46,0.45l0.08,15.12l-1.75,-1.54l-2.54,-0.51l-0.88,0.71l-2.32,0.06l0.69,-1.33l1.45,-0.64l0.23,-0.46l-0.65,-2.74l-1.24,-2.21l-5.04,-2.29l-2.09,-0.23l-3.68,-2.27l-0.55,0.13l-0.65,1.07l-0.52,0.12l-0.55,-1.89l-1.21,-0.78l1.84,-0.62l1.72,0.05l0.39,-0.52l-0.21,-0.66l-0.38,-0.28l-3.45,-0.0l-1.13,-1.48l-2.1,-0.43l-0.52,-0.6l2.69,-0.48l1.28,-0.78l3.66,0.94l0.3,0.71ZM757.91,300.34l-0.62,0.82l-0.1,-0.8l0.59,-1.12l0.13,1.1ZM747.38,292.98l0.34,0.72l-1.22,-0.57l-4.68,-0.1l0.27,-0.62l2.78,-0.09l2.52,0.67ZM741.05,285.25l-0.67,-2.88l0.64,-2.01l0.41,0.86l1.21,0.18l0.16,0.7l-0.1,1.68l-0.84,-0.16l-0.46,0.3l-0.34,1.34ZM739.05,293.5l-0.5,0.44l-1.34,-0.36l-0.17,-0.37l1.73,-0.08l0.27,0.36ZM721.45,284.51l-0.19,1.97l2.24,2.23l0.54,0.02l1.27,-1.07l2.75,-0.5l-0.9,1.21l-2.11,0.93l-0.16,0.6l2.22,3.01l-0.3,1.07l1.36,1.74l-2.26,0.85l-0.28,-0.31l0.12,-1.19l-1.64,-1.34l0.17,-2.23l-0.56,-0.39l-1.67,0.76l-0.23,0.39l0.3,6.17l-1.1,0.25l-0.69,-0.47l0.64,-2.21l-0.39,-2.42l-0.39,-0.34l-0.8,-0.01l-0.58,-1.29l0.98,-1.6l0.35,-1.96l1.32,-3.87ZM728.59,296.27l0.38,0.49l-0.02,1.28l-0.88,0.49l-0.53,-0.47l1.04,-1.79ZM729.04,286.98l0.27,-0.05l-0.02,0.13l-0.24,-0.08ZM721.68,284.05l0.16,-0.32l1.89,-1.65l1.83,0.68l3.16,0.35l2.94,-0.1l2.39,-1.66l-1.73,2.13l-1.66,0.43l-2.41,-0.48l-4.17,0.13l-2.39,0.51ZM730.55,310.47l1.11,-1.93l2.03,-0.82l0.08,0.62l-1.45,1.67l-1.77,0.46ZM728.12,305.88l-0.1,0.38l-3.46,0.66l-2.91,-0.27l-0.0,-0.25l1.54,-0.41l1.66,0.73l1.67,-0.19l1.61,-0.65ZM722.9,310.24l-0.64,0.03l-2.26,-1.2l1.11,-0.24l1.78,1.41ZM716.26,305.77l0.88,0.51l1.28,-0.17l0.2,0.35l-4.65,0.73l0.39,-0.67l1.15,-0.02l0.75,-0.73ZM711.66,293.84l-0.38,-0.16l-2.54,1.01l-1.12,-1.44l-1.69,-0.13l-1.16,-0.75l-3.04,0.77l-1.1,-1.15l-3.31,-0.11l-0.35,-3.05l-1.35,-0.95l-1.11,-1.98l-0.33,-2.06l0.27,-2.14l0.9,-1.01l0.37,1.15l2.09,1.49l1.53,-0.48l1.82,0.08l1.38,-1.19l1.0,-0.18l2.28,0.67l2.26,-0.53l1.52,-3.64l1.01,-0.99l0.78,-2.57l4.1,0.3l-1.11,1.77l0.02,0.46l1.7,2.2l-0.23,1.39l2.07,1.71l-2.33,0.42l-0.88,1.9l0.1,2.05l-2.4,1.9l-0.06,2.45l-0.7,2.79ZM692.58,302.03l0.35,0.26l4.8,0.25l0.78,-0.97l4.17,1.09l1.13,1.68l3.69,0.45l2.13,1.04l-1.8,0.6l-2.77,-0.99l-4.8,-0.12l-5.24,-1.41l-1.84,-0.25l-1.11,0.3l-4.26,-0.97l-0.7,-1.14l-1.59,-0.13l1.18,-1.65l2.74,0.13l2.87,1.13l0.26,0.68ZM685.53,299.17l-2.22,0.04l-2.06,-2.03l-3.15,-2.01l-2.93,-3.51l-3.11,-5.33l-2.2,-2.12l-1.64,-4.06l-2.32,-1.69l-1.27,-2.07l-1.96,-1.5l-2.51,-2.65l-0.11,-0.66l4.81,0.53l2.15,2.38l3.31,2.74l2.35,2.66l2.7,0.17l1.95,1.59l1.54,2.17l1.59,0.95l-0.84,1.71l0.15,0.52l1.44,0.87l0.79,0.1l0.4,1.58l0.87,1.4l1.96,0.39l1.0,1.31l-0.6,3.01l-0.09,3.5Z\", \"name\": \"Indonesia\"}, \"UA\": {\"path\": \"M492.5,162.44l1.28,-2.49l1.82,0.19l0.66,-0.23l0.09,-0.71l-0.25,-0.75l-0.79,-0.72l-0.33,-1.21l-0.86,-0.62l-0.02,-1.19l-1.13,-0.86l-1.15,-0.19l-2.04,-1.0l-1.66,0.32l-0.66,0.47l-0.92,-0.0l-0.84,0.78l-2.48,0.7l-1.18,-0.71l-3.07,-0.36l-0.89,0.43l-0.24,-0.55l-1.11,-0.7l0.35,-0.93l1.26,-1.02l-0.54,-1.23l2.04,-2.43l1.4,-0.62l0.25,-1.19l-1.04,-2.39l0.83,-0.13l1.28,-0.84l1.8,-0.07l2.47,0.26l2.86,0.81l1.88,0.06l0.86,0.44l1.04,-0.41l0.77,0.66l2.18,-0.15l0.92,0.3l0.52,-0.34l0.15,-1.53l0.56,-0.54l2.85,-0.05l0.84,-0.72l3.04,-0.18l1.23,1.46l-0.48,0.77l0.21,1.03l0.36,0.32l1.8,0.14l0.93,2.08l3.18,1.15l1.94,-0.45l1.67,1.49l1.4,-0.03l3.35,0.96l0.02,0.54l-0.96,1.59l0.47,1.97l-0.26,0.7l-2.36,0.28l-1.29,0.89l-0.23,1.38l-1.83,0.27l-1.58,0.97l-2.41,0.21l-2.16,1.17l-0.21,0.38l0.34,2.26l1.23,0.75l2.13,-0.08l-0.14,0.31l-2.65,0.53l-3.23,1.69l-0.87,-0.39l0.42,-1.1l-0.25,-0.52l-2.21,-0.73l2.35,-1.06l0.12,-0.65l-0.93,-0.82l-3.62,-0.74l-0.13,-0.89l-0.46,-0.34l-2.61,0.59l-0.91,1.69l-1.71,2.04l-0.86,-0.4l-1.62,0.27Z\", \"name\": \"Ukraine\"}, \"QA\": {\"path\": \"M549.33,221.64l-0.76,-0.23l-0.14,-1.64l0.84,-1.29l0.47,0.52l0.04,1.34l-0.45,1.3Z\", \"name\": \"Qatar\"}, \"MZ\": {\"path\": \"M508.58,318.75l-0.34,-2.57l0.51,-2.05l3.55,0.63l2.5,-0.38l1.02,-0.76l1.49,0.01l2.74,-0.98l1.66,-1.2l0.5,9.24l0.41,1.23l-0.68,1.67l-0.93,1.71l-1.5,1.5l-5.16,2.28l-2.78,2.73l-1.02,0.53l-1.71,1.8l-0.98,0.57l-0.35,2.41l1.16,1.94l0.49,2.17l0.43,0.31l-0.06,2.06l-0.39,1.17l0.5,0.72l-0.25,0.73l-0.92,0.83l-5.12,2.39l-1.22,1.36l0.21,1.13l0.58,0.39l-0.11,0.72l-1.22,-0.01l-0.73,-2.97l0.42,-3.09l-1.78,-5.37l2.49,-2.81l0.69,-1.89l0.44,-0.43l0.28,-1.53l-0.39,-0.93l0.59,-3.65l-0.01,-3.26l-1.49,-1.16l-1.2,-0.22l-1.74,-1.17l-1.92,0.01l-0.29,-2.08l7.06,-1.96l1.28,1.09l0.89,-0.1l0.67,0.44l0.1,0.73l-0.51,1.29l0.19,1.81l1.75,1.83l0.65,-0.13l0.71,-1.65l1.17,-0.86l-0.26,-3.47l-1.05,-1.85l-1.04,-0.94Z\", \"name\": \"Mozambique\"}}, \"height\": 440.70631074413296, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 11.5}, \"width\": 900.0});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/magnific-popup/css/magnific-popup.css",
    "content": "/* Magnific Popup CSS */\n.mfp-bg {\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1042;\n  overflow: hidden;\n  position: fixed;\n  background: #0b0b0b;\n  opacity: 0.8;\n  filter: alpha(opacity=80); }\n\n.mfp-wrap {\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1043;\n  position: fixed;\n  outline: none !important;\n  -webkit-backface-visibility: hidden; }\n\n.mfp-container {\n  text-align: center;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  padding: 0 8px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.mfp-container:before {\n  content: '';\n  display: inline-block;\n  height: 100%;\n  vertical-align: middle; }\n\n.mfp-align-top .mfp-container:before {\n  display: none; }\n\n.mfp-content {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0 auto;\n  text-align: left;\n  z-index: 1045; }\n\n.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content {\n  width: 100%;\n  cursor: auto; }\n\n.mfp-ajax-cur {\n  cursor: progress; }\n\n.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {\n  cursor: -moz-zoom-out;\n  cursor: -webkit-zoom-out;\n  cursor: zoom-out; }\n\n.mfp-zoom {\n  cursor: pointer;\n  cursor: -webkit-zoom-in;\n  cursor: -moz-zoom-in;\n  cursor: zoom-in; }\n\n.mfp-auto-cursor .mfp-content {\n  cursor: auto; }\n\n.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none; }\n\n.mfp-loading.mfp-figure {\n  display: none; }\n\n.mfp-hide {\n  display: none !important; }\n\n.mfp-preloader {\n  color: #cccccc;\n  position: absolute;\n  top: 50%;\n  width: auto;\n  text-align: center;\n  margin-top: -0.8em;\n  left: 8px;\n  right: 8px;\n  z-index: 1044; }\n  .mfp-preloader a {\n    color: #cccccc; }\n    .mfp-preloader a:hover {\n      color: white; }\n\n.mfp-s-ready .mfp-preloader {\n  display: none; }\n\n.mfp-s-error .mfp-content {\n  display: none; }\n\nbutton.mfp-close, button.mfp-arrow {\n  overflow: visible;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  display: block;\n  outline: none;\n  padding: 0;\n  z-index: 1046;\n  -webkit-box-shadow: none;\n  box-shadow: none; }\nbutton::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\n.mfp-close {\n  width: 44px;\n  height: 44px;\n  line-height: 44px;\n  position: absolute;\n  right: 0;\n  top: 0;\n  text-decoration: none;\n  text-align: center;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  padding: 0 0 18px 10px;\n  color: white;\n  font-style: normal;\n  font-size: 28px;\n  font-family: Arial, Baskerville, monospace; }\n  .mfp-close:hover, .mfp-close:focus {\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .mfp-close:active {\n    top: 1px; }\n\n.mfp-close-btn-in .mfp-close {\n  color: #333333; }\n\n.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close {\n  color: white;\n  right: -6px;\n  text-align: right;\n  padding-right: 6px;\n  width: 100%; }\n\n.mfp-counter {\n  position: absolute;\n  top: 0;\n  right: 0;\n  color: #cccccc;\n  font-size: 12px;\n  line-height: 18px;\n  white-space: nowrap; }\n\n.mfp-arrow {\n  position: absolute;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  margin: 0;\n  top: 50%;\n  margin-top: -55px;\n  padding: 0;\n  width: 90px;\n  height: 110px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n  .mfp-arrow:active {\n    margin-top: -54px; }\n  .mfp-arrow:hover, .mfp-arrow:focus {\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    position: absolute;\n    left: 0;\n    top: 0;\n    margin-top: 35px;\n    margin-left: 35px;\n    border: medium inset transparent; }\n  .mfp-arrow:after, .mfp-arrow .mfp-a {\n    border-top-width: 13px;\n    border-bottom-width: 13px;\n    top: 8px; }\n  .mfp-arrow:before, .mfp-arrow .mfp-b {\n    border-top-width: 21px;\n    border-bottom-width: 21px;\n    opacity: 0.7; }\n\n.mfp-arrow-left {\n  left: 0; }\n  .mfp-arrow-left:after, .mfp-arrow-left .mfp-a {\n    border-right: 17px solid white;\n    margin-left: 31px; }\n  .mfp-arrow-left:before, .mfp-arrow-left .mfp-b {\n    margin-left: 25px;\n    border-right: 27px solid #3f3f3f; }\n\n.mfp-arrow-right {\n  right: 0; }\n  .mfp-arrow-right:after, .mfp-arrow-right .mfp-a {\n    border-left: 17px solid white;\n    margin-left: 39px; }\n  .mfp-arrow-right:before, .mfp-arrow-right .mfp-b {\n    border-left: 27px solid #3f3f3f; }\n\n.mfp-iframe-holder {\n  padding-top: 40px;\n  padding-bottom: 40px; }\n  .mfp-iframe-holder .mfp-content {\n    line-height: 0;\n    width: 100%;\n    max-width: 900px; }\n  .mfp-iframe-holder .mfp-close {\n    top: -40px; }\n\n.mfp-iframe-scaler {\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  padding-top: 56.25%; }\n  .mfp-iframe-scaler iframe {\n    position: absolute;\n    display: block;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);\n    background: black; }\n\n/* Main image in popup */\nimg.mfp-img {\n  width: auto;\n  max-width: 100%;\n  height: auto;\n  display: block;\n  line-height: 0;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 40px 0 40px;\n  margin: 0 auto; }\n\n/* The shadow behind the image */\n.mfp-figure {\n  line-height: 0; }\n  .mfp-figure:after {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 40px;\n    bottom: 40px;\n    display: block;\n    right: 0;\n    width: auto;\n    height: auto;\n    z-index: -1;\n    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);\n    background: #444444; }\n  .mfp-figure small {\n    color: #bdbdbd;\n    display: block;\n    font-size: 12px;\n    line-height: 14px; }\n  .mfp-figure figure {\n    margin: 0; }\n\n.mfp-bottom-bar {\n  margin-top: -36px;\n  position: absolute;\n  top: 100%;\n  left: 0;\n  width: 100%;\n  cursor: auto; }\n\n.mfp-title {\n  text-align: left;\n  line-height: 18px;\n  color: #f3f3f3;\n  word-wrap: break-word;\n  padding-right: 36px; }\n\n.mfp-image-holder .mfp-content {\n  max-width: 100%; }\n\n.mfp-gallery .mfp-image-holder .mfp-figure {\n  cursor: pointer; }\n\n@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {\n  /**\n       * Remove all paddings around the image on small screen\n       */\n  .mfp-img-mobile .mfp-image-holder {\n    padding-left: 0;\n    padding-right: 0; }\n  .mfp-img-mobile img.mfp-img {\n    padding: 0; }\n  .mfp-img-mobile .mfp-figure:after {\n    top: 0;\n    bottom: 0; }\n  .mfp-img-mobile .mfp-figure small {\n    display: inline;\n    margin-left: 5px; }\n  .mfp-img-mobile .mfp-bottom-bar {\n    background: rgba(0, 0, 0, 0.6);\n    bottom: 0;\n    margin: 0;\n    top: auto;\n    padding: 3px 5px;\n    position: fixed;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box; }\n    .mfp-img-mobile .mfp-bottom-bar:empty {\n      padding: 0; }\n  .mfp-img-mobile .mfp-counter {\n    right: 5px;\n    top: 3px; }\n  .mfp-img-mobile .mfp-close {\n    top: 0;\n    right: 0;\n    width: 35px;\n    height: 35px;\n    line-height: 35px;\n    background: rgba(0, 0, 0, 0.6);\n    position: fixed;\n    text-align: center;\n    padding: 0; } }\n\n@media all and (max-width: 900px) {\n  .mfp-arrow {\n    -webkit-transform: scale(0.75);\n    transform: scale(0.75); }\n  .mfp-arrow-left {\n    -webkit-transform-origin: 0;\n    transform-origin: 0; }\n  .mfp-arrow-right {\n    -webkit-transform-origin: 100%;\n    transform-origin: 100%; }\n  .mfp-container {\n    padding-left: 6px;\n    padding-right: 6px; } }\n\n.mfp-ie7 .mfp-img {\n  padding: 0; }\n.mfp-ie7 .mfp-bottom-bar {\n  width: 600px;\n  left: 50%;\n  margin-left: -300px;\n  margin-top: 5px;\n  padding-bottom: 5px; }\n.mfp-ie7 .mfp-container {\n  padding: 0; }\n.mfp-ie7 .mfp-content {\n  padding-top: 44px; }\n.mfp-ie7 .mfp-close {\n  top: 0;\n  right: 0;\n  padding-top: 0; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/dist/masonry.pkgd.js",
    "content": "/*!\n * Masonry PACKAGED v3.3.1\n * Cascading grid layout library\n * http://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n/**\n * Bridget makes jQuery widgets\n * v1.1.0\n * MIT license\n */\n\n( function( window ) {\n\n\n\n// -------------------------- utils -------------------------- //\n\nvar slice = Array.prototype.slice;\n\nfunction noop() {}\n\n// -------------------------- definition -------------------------- //\n\nfunction defineBridget( $ ) {\n\n// bail if no jQuery\nif ( !$ ) {\n  return;\n}\n\n// -------------------------- addOptionMethod -------------------------- //\n\n/**\n * adds option method -> $().plugin('option', {...})\n * @param {Function} PluginClass - constructor class\n */\nfunction addOptionMethod( PluginClass ) {\n  // don't overwrite original option method\n  if ( PluginClass.prototype.option ) {\n    return;\n  }\n\n  // option setter\n  PluginClass.prototype.option = function( opts ) {\n    // bail out if not an object\n    if ( !$.isPlainObject( opts ) ){\n      return;\n    }\n    this.options = $.extend( true, this.options, opts );\n  };\n}\n\n// -------------------------- plugin bridge -------------------------- //\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar logError = typeof console === 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n/**\n * jQuery plugin bridge, access methods like $elem.plugin('method')\n * @param {String} namespace - plugin name\n * @param {Function} PluginClass - constructor class\n */\nfunction bridge( namespace, PluginClass ) {\n  // add to jQuery fn namespace\n  $.fn[ namespace ] = function( options ) {\n    if ( typeof options === 'string' ) {\n      // call plugin method when first argument is a string\n      // get arguments for method\n      var args = slice.call( arguments, 1 );\n\n      for ( var i=0, len = this.length; i < len; i++ ) {\n        var elem = this[i];\n        var instance = $.data( elem, namespace );\n        if ( !instance ) {\n          logError( \"cannot call methods on \" + namespace + \" prior to initialization; \" +\n            \"attempted to call '\" + options + \"'\" );\n          continue;\n        }\n        if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) {\n          logError( \"no such method '\" + options + \"' for \" + namespace + \" instance\" );\n          continue;\n        }\n\n        // trigger method with arguments\n        var returnValue = instance[ options ].apply( instance, args );\n\n        // break look and return first value if provided\n        if ( returnValue !== undefined ) {\n          return returnValue;\n        }\n      }\n      // return this if no return value\n      return this;\n    } else {\n      return this.each( function() {\n        var instance = $.data( this, namespace );\n        if ( instance ) {\n          // apply options & init\n          instance.option( options );\n          instance._init();\n        } else {\n          // initialize new instance\n          instance = new PluginClass( this, options );\n          $.data( this, namespace, instance );\n        }\n      });\n    }\n  };\n\n}\n\n// -------------------------- bridget -------------------------- //\n\n/**\n * converts a Prototypical class into a proper jQuery plugin\n *   the class must have a ._init method\n * @param {String} namespace - plugin name, used in $().pluginName\n * @param {Function} PluginClass - constructor class\n */\n$.bridget = function( namespace, PluginClass ) {\n  addOptionMethod( PluginClass );\n  bridge( namespace, PluginClass );\n};\n\nreturn $.bridget;\n\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( 'jquery-bridget/jquery.bridget',[ 'jquery' ], defineBridget );\n} else if ( typeof exports === 'object' ) {\n  defineBridget( require('jquery') );\n} else {\n  // get jquery from browser global\n  defineBridget( window.jQuery );\n}\n\n})( window );\n\n/*!\n * eventie v1.0.6\n * event binding helper\n *   eventie.bind( elem, 'click', myFn )\n *   eventie.unbind( elem, 'click', myFn )\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true */\n/*global define: false, module: false */\n\n( function( window ) {\n\n\n\nvar docElem = document.documentElement;\n\nvar bind = function() {};\n\nfunction getIEEvent( obj ) {\n  var event = window.event;\n  // add event.target\n  event.target = event.target || event.srcElement || obj;\n  return event;\n}\n\nif ( docElem.addEventListener ) {\n  bind = function( obj, type, fn ) {\n    obj.addEventListener( type, fn, false );\n  };\n} else if ( docElem.attachEvent ) {\n  bind = function( obj, type, fn ) {\n    obj[ type + fn ] = fn.handleEvent ?\n      function() {\n        var event = getIEEvent( obj );\n        fn.handleEvent.call( fn, event );\n      } :\n      function() {\n        var event = getIEEvent( obj );\n        fn.call( obj, event );\n      };\n    obj.attachEvent( \"on\" + type, obj[ type + fn ] );\n  };\n}\n\nvar unbind = function() {};\n\nif ( docElem.removeEventListener ) {\n  unbind = function( obj, type, fn ) {\n    obj.removeEventListener( type, fn, false );\n  };\n} else if ( docElem.detachEvent ) {\n  unbind = function( obj, type, fn ) {\n    obj.detachEvent( \"on\" + type, obj[ type + fn ] );\n    try {\n      delete obj[ type + fn ];\n    } catch ( err ) {\n      // can't delete window object properties\n      obj[ type + fn ] = undefined;\n    }\n  };\n}\n\nvar eventie = {\n  bind: bind,\n  unbind: unbind\n};\n\n// ----- module definition ----- //\n\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( 'eventie/eventie',eventie );\n} else if ( typeof exports === 'object' ) {\n  // CommonJS\n  module.exports = eventie;\n} else {\n  // browser global\n  window.eventie = eventie;\n}\n\n})( window );\n\n/*!\n * EventEmitter v4.2.11 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function () {\n    \n\n    /**\n     * Class for managing events.\n     * Can be extended to provide event functionality in other classes.\n     *\n     * @class EventEmitter Manages event registering and emitting.\n     */\n    function EventEmitter() {}\n\n    // Shortcuts to improve speed and size\n    var proto = EventEmitter.prototype;\n    var exports = this;\n    var originalGlobalValue = exports.EventEmitter;\n\n    /**\n     * Finds the index of the listener for the event in its storage array.\n     *\n     * @param {Function[]} listeners Array of listeners to search through.\n     * @param {Function} listener Method to look for.\n     * @return {Number} Index of the specified listener, -1 if not found\n     * @api private\n     */\n    function indexOfListener(listeners, listener) {\n        var i = listeners.length;\n        while (i--) {\n            if (listeners[i].listener === listener) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    /**\n     * Alias a method while keeping the context correct, to allow for overwriting of target method.\n     *\n     * @param {String} name The name of the target method.\n     * @return {Function} The aliased method\n     * @api private\n     */\n    function alias(name) {\n        return function aliasClosure() {\n            return this[name].apply(this, arguments);\n        };\n    }\n\n    /**\n     * Returns the listener array for the specified event.\n     * Will initialise the event object and listener arrays if required.\n     * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n     * Each property in the object response is an array of listener functions.\n     *\n     * @param {String|RegExp} evt Name of the event to return the listeners from.\n     * @return {Function[]|Object} All listener functions for the event.\n     */\n    proto.getListeners = function getListeners(evt) {\n        var events = this._getEvents();\n        var response;\n        var key;\n\n        // Return a concatenated array of all matching events if\n        // the selector is a regular expression.\n        if (evt instanceof RegExp) {\n            response = {};\n            for (key in events) {\n                if (events.hasOwnProperty(key) && evt.test(key)) {\n                    response[key] = events[key];\n                }\n            }\n        }\n        else {\n            response = events[evt] || (events[evt] = []);\n        }\n\n        return response;\n    };\n\n    /**\n     * Takes a list of listener objects and flattens it into a list of listener functions.\n     *\n     * @param {Object[]} listeners Raw listener objects.\n     * @return {Function[]} Just the listener functions.\n     */\n    proto.flattenListeners = function flattenListeners(listeners) {\n        var flatListeners = [];\n        var i;\n\n        for (i = 0; i < listeners.length; i += 1) {\n            flatListeners.push(listeners[i].listener);\n        }\n\n        return flatListeners;\n    };\n\n    /**\n     * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n     *\n     * @param {String|RegExp} evt Name of the event to return the listeners from.\n     * @return {Object} All listener functions for an event in an object.\n     */\n    proto.getListenersAsObject = function getListenersAsObject(evt) {\n        var listeners = this.getListeners(evt);\n        var response;\n\n        if (listeners instanceof Array) {\n            response = {};\n            response[evt] = listeners;\n        }\n\n        return response || listeners;\n    };\n\n    /**\n     * Adds a listener function to the specified event.\n     * The listener will not be added if it is a duplicate.\n     * If the listener returns true then it will be removed after it is called.\n     * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to attach the listener to.\n     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addListener = function addListener(evt, listener) {\n        var listeners = this.getListenersAsObject(evt);\n        var listenerIsWrapped = typeof listener === 'object';\n        var key;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n                listeners[key].push(listenerIsWrapped ? listener : {\n                    listener: listener,\n                    once: false\n                });\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of addListener\n     */\n    proto.on = alias('addListener');\n\n    /**\n     * Semi-alias of addListener. It will add a listener that will be\n     * automatically removed after its first execution.\n     *\n     * @param {String|RegExp} evt Name of the event to attach the listener to.\n     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addOnceListener = function addOnceListener(evt, listener) {\n        return this.addListener(evt, {\n            listener: listener,\n            once: true\n        });\n    };\n\n    /**\n     * Alias of addOnceListener.\n     */\n    proto.once = alias('addOnceListener');\n\n    /**\n     * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n     * You need to tell it what event names should be matched by a regex.\n     *\n     * @param {String} evt Name of the event to create.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.defineEvent = function defineEvent(evt) {\n        this.getListeners(evt);\n        return this;\n    };\n\n    /**\n     * Uses defineEvent to define multiple events.\n     *\n     * @param {String[]} evts An array of event names to define.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.defineEvents = function defineEvents(evts) {\n        for (var i = 0; i < evts.length; i += 1) {\n            this.defineEvent(evts[i]);\n        }\n        return this;\n    };\n\n    /**\n     * Removes a listener function from the specified event.\n     * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to remove the listener from.\n     * @param {Function} listener Method to remove from the event.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeListener = function removeListener(evt, listener) {\n        var listeners = this.getListenersAsObject(evt);\n        var index;\n        var key;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key)) {\n                index = indexOfListener(listeners[key], listener);\n\n                if (index !== -1) {\n                    listeners[key].splice(index, 1);\n                }\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of removeListener\n     */\n    proto.off = alias('removeListener');\n\n    /**\n     * Adds listeners in bulk using the manipulateListeners method.\n     * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n     * You can also pass it a regular expression to add the array of listeners to all events that match it.\n     * Yeah, this function does quite a bit. That's probably a bad thing.\n     *\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to add.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.addListeners = function addListeners(evt, listeners) {\n        // Pass through to manipulateListeners\n        return this.manipulateListeners(false, evt, listeners);\n    };\n\n    /**\n     * Removes listeners in bulk using the manipulateListeners method.\n     * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n     * You can also pass it an event name and an array of listeners to be removed.\n     * You can also pass it a regular expression to remove the listeners from all events that match it.\n     *\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to remove.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeListeners = function removeListeners(evt, listeners) {\n        // Pass through to manipulateListeners\n        return this.manipulateListeners(true, evt, listeners);\n    };\n\n    /**\n     * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n     * The first argument will determine if the listeners are removed (true) or added (false).\n     * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n     * You can also pass it an event name and an array of listeners to be added/removed.\n     * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n     *\n     * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n     * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n        var i;\n        var value;\n        var single = remove ? this.removeListener : this.addListener;\n        var multiple = remove ? this.removeListeners : this.addListeners;\n\n        // If evt is an object then pass each of its properties to this method\n        if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n            for (i in evt) {\n                if (evt.hasOwnProperty(i) && (value = evt[i])) {\n                    // Pass the single listener straight through to the singular method\n                    if (typeof value === 'function') {\n                        single.call(this, i, value);\n                    }\n                    else {\n                        // Otherwise pass back to the multiple function\n                        multiple.call(this, i, value);\n                    }\n                }\n            }\n        }\n        else {\n            // So evt must be a string\n            // And listeners must be an array of listeners\n            // Loop over it and pass each one to the multiple method\n            i = listeners.length;\n            while (i--) {\n                single.call(this, evt, listeners[i]);\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Removes all listeners from a specified event.\n     * If you do not specify an event then all listeners will be removed.\n     * That means every event will be emptied.\n     * You can also pass a regex to remove all events that match it.\n     *\n     * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.removeEvent = function removeEvent(evt) {\n        var type = typeof evt;\n        var events = this._getEvents();\n        var key;\n\n        // Remove different things depending on the state of evt\n        if (type === 'string') {\n            // Remove all listeners for the specified event\n            delete events[evt];\n        }\n        else if (evt instanceof RegExp) {\n            // Remove all events matching the regex.\n            for (key in events) {\n                if (events.hasOwnProperty(key) && evt.test(key)) {\n                    delete events[key];\n                }\n            }\n        }\n        else {\n            // Remove all listeners in all events\n            delete this._events;\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of removeEvent.\n     *\n     * Added to mirror the node API.\n     */\n    proto.removeAllListeners = alias('removeEvent');\n\n    /**\n     * Emits an event of your choice.\n     * When emitted, every listener attached to that event will be executed.\n     * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n     * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n     * So they will not arrive within the array on the other side, they will be separate.\n     * You can also pass a regular expression to emit to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n     * @param {Array} [args] Optional array of arguments to be passed to each listener.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.emitEvent = function emitEvent(evt, args) {\n        var listeners = this.getListenersAsObject(evt);\n        var listener;\n        var i;\n        var key;\n        var response;\n\n        for (key in listeners) {\n            if (listeners.hasOwnProperty(key)) {\n                i = listeners[key].length;\n\n                while (i--) {\n                    // If the listener returns true then it shall be removed from the event\n                    // The function is executed either with a basic call or an apply if there is an args array\n                    listener = listeners[key][i];\n\n                    if (listener.once === true) {\n                        this.removeListener(evt, listener.listener);\n                    }\n\n                    response = listener.listener.apply(this, args || []);\n\n                    if (response === this._getOnceReturnValue()) {\n                        this.removeListener(evt, listener.listener);\n                    }\n                }\n            }\n        }\n\n        return this;\n    };\n\n    /**\n     * Alias of emitEvent\n     */\n    proto.trigger = alias('emitEvent');\n\n    /**\n     * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n     * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n     *\n     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n     * @param {...*} Optional additional arguments to be passed to each listener.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.emit = function emit(evt) {\n        var args = Array.prototype.slice.call(arguments, 1);\n        return this.emitEvent(evt, args);\n    };\n\n    /**\n     * Sets the current value to check against when executing listeners. If a\n     * listeners return value matches the one set here then it will be removed\n     * after execution. This value defaults to true.\n     *\n     * @param {*} value The new value to check for when executing listeners.\n     * @return {Object} Current instance of EventEmitter for chaining.\n     */\n    proto.setOnceReturnValue = function setOnceReturnValue(value) {\n        this._onceReturnValue = value;\n        return this;\n    };\n\n    /**\n     * Fetches the current value to check against when executing listeners. If\n     * the listeners return value matches this one then it should be removed\n     * automatically. It will return true by default.\n     *\n     * @return {*|Boolean} The current value to check for or the default, true.\n     * @api private\n     */\n    proto._getOnceReturnValue = function _getOnceReturnValue() {\n        if (this.hasOwnProperty('_onceReturnValue')) {\n            return this._onceReturnValue;\n        }\n        else {\n            return true;\n        }\n    };\n\n    /**\n     * Fetches the events object and creates one if required.\n     *\n     * @return {Object} The events storage object.\n     * @api private\n     */\n    proto._getEvents = function _getEvents() {\n        return this._events || (this._events = {});\n    };\n\n    /**\n     * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n     *\n     * @return {Function} Non conflicting EventEmitter class.\n     */\n    EventEmitter.noConflict = function noConflict() {\n        exports.EventEmitter = originalGlobalValue;\n        return EventEmitter;\n    };\n\n    // Expose the class either via AMD, CommonJS or the global object\n    if (typeof define === 'function' && define.amd) {\n        define('eventEmitter/EventEmitter',[],function () {\n            return EventEmitter;\n        });\n    }\n    else if (typeof module === 'object' && module.exports){\n        module.exports = EventEmitter;\n    }\n    else {\n        exports.EventEmitter = EventEmitter;\n    }\n}.call(this));\n\n/*!\n * getStyleProperty v1.0.4\n * original by kangax\n * http://perfectionkills.com/feature-testing-css-properties/\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true */\n/*global define: false, exports: false, module: false */\n\n( function( window ) {\n\n\n\nvar prefixes = 'Webkit Moz ms Ms O'.split(' ');\nvar docElemStyle = document.documentElement.style;\n\nfunction getStyleProperty( propName ) {\n  if ( !propName ) {\n    return;\n  }\n\n  // test standard property first\n  if ( typeof docElemStyle[ propName ] === 'string' ) {\n    return propName;\n  }\n\n  // capitalize\n  propName = propName.charAt(0).toUpperCase() + propName.slice(1);\n\n  // test vendor specific properties\n  var prefixed;\n  for ( var i=0, len = prefixes.length; i < len; i++ ) {\n    prefixed = prefixes[i] + propName;\n    if ( typeof docElemStyle[ prefixed ] === 'string' ) {\n      return prefixed;\n    }\n  }\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( 'get-style-property/get-style-property',[],function() {\n    return getStyleProperty;\n  });\n} else if ( typeof exports === 'object' ) {\n  // CommonJS for Component\n  module.exports = getStyleProperty;\n} else {\n  // browser global\n  window.getStyleProperty = getStyleProperty;\n}\n\n})( window );\n\n/*!\n * getSize v1.2.2\n * measure size of elements\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n/*global define: false, exports: false, require: false, module: false, console: false */\n\n( function( window, undefined ) {\n\n\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') === -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console === 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0, len = measurements.length; i < len; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n\n\nfunction defineGetSize( getStyleProperty ) {\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar getStyle, boxSizingProp, isBoxSizeOuter;\n\n/**\n * setup vars and functions\n * do it on initial getSize(), rather than on script load\n * For Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  var getComputedStyle = window.getComputedStyle;\n  getStyle = ( function() {\n    var getStyleFn = getComputedStyle ?\n      function( elem ) {\n        return getComputedStyle( elem, null );\n      } :\n      function( elem ) {\n        return elem.currentStyle;\n      };\n\n      return function getStyle( elem ) {\n        var style = getStyleFn( elem );\n        if ( !style ) {\n          logError( 'Style returned ' + style +\n            '. Are you running this code in a hidden iframe on Firefox? ' +\n            'See http://bit.ly/getsizebug1' );\n        }\n        return style;\n      };\n  })();\n\n  // -------------------------- box sizing -------------------------- //\n\n  boxSizingProp = getStyleProperty('boxSizing');\n\n  /**\n   * WebKit measures the outer-width on style.width on border-box elems\n   * IE & Firefox measures the inner-width\n   */\n  if ( boxSizingProp ) {\n    var div = document.createElement('div');\n    div.style.width = '200px';\n    div.style.padding = '1px 2px 3px 4px';\n    div.style.borderStyle = 'solid';\n    div.style.borderWidth = '1px 2px 3px 4px';\n    div.style[ boxSizingProp ] = 'border-box';\n\n    var body = document.body || document.documentElement;\n    body.appendChild( div );\n    var style = getStyle( div );\n\n    isBoxSizeOuter = getStyleSize( style.width ) === 200;\n    body.removeChild( div );\n  }\n\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem === 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem !== 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display === 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = !!( boxSizingProp &&\n    style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' );\n\n  // get all measurements\n  for ( var i=0, len = measurements.length; i < len; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    value = mungeNonPixel( elem, value );\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\n// IE8 returns percent values, not pixels\n// taken from jQuery's curCSS\nfunction mungeNonPixel( elem, value ) {\n  // IE8 and has percent value\n  if ( window.getComputedStyle || value.indexOf('%') === -1 ) {\n    return value;\n  }\n  var style = elem.style;\n  // Remember the original values\n  var left = style.left;\n  var rs = elem.runtimeStyle;\n  var rsLeft = rs && rs.left;\n\n  // Put in the new values to get a computed value out\n  if ( rsLeft ) {\n    rs.left = elem.currentStyle.left;\n  }\n  style.left = value;\n  value = style.pixelLeft;\n\n  // Revert the changed values\n  style.left = left;\n  if ( rsLeft ) {\n    rs.left = rsLeft;\n  }\n\n  return value;\n}\n\nreturn getSize;\n\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD for RequireJS\n  define( 'get-size/get-size',[ 'get-style-property/get-style-property' ], defineGetSize );\n} else if ( typeof exports === 'object' ) {\n  // CommonJS for Component\n  module.exports = defineGetSize( require('desandro-get-style-property') );\n} else {\n  // browser global\n  window.getSize = defineGetSize( window.getStyleProperty );\n}\n\n})( window );\n\n/*!\n * docReady v1.0.4\n * Cross browser DOMContentLoaded event emitter\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true*/\n/*global define: false, require: false, module: false */\n\n( function( window ) {\n\n\n\nvar document = window.document;\n// collection of functions to be triggered on ready\nvar queue = [];\n\nfunction docReady( fn ) {\n  // throw out non-functions\n  if ( typeof fn !== 'function' ) {\n    return;\n  }\n\n  if ( docReady.isReady ) {\n    // ready now, hit it\n    fn();\n  } else {\n    // queue function when ready\n    queue.push( fn );\n  }\n}\n\ndocReady.isReady = false;\n\n// triggered on various doc ready events\nfunction onReady( event ) {\n  // bail if already triggered or IE8 document is not ready just yet\n  var isIE8NotReady = event.type === 'readystatechange' && document.readyState !== 'complete';\n  if ( docReady.isReady || isIE8NotReady ) {\n    return;\n  }\n\n  trigger();\n}\n\nfunction trigger() {\n  docReady.isReady = true;\n  // process queue\n  for ( var i=0, len = queue.length; i < len; i++ ) {\n    var fn = queue[i];\n    fn();\n  }\n}\n\nfunction defineDocReady( eventie ) {\n  // trigger ready if page is ready\n  if ( document.readyState === 'complete' ) {\n    trigger();\n  } else {\n    // listen for events\n    eventie.bind( document, 'DOMContentLoaded', onReady );\n    eventie.bind( document, 'readystatechange', onReady );\n    eventie.bind( window, 'load', onReady );\n  }\n\n  return docReady;\n}\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( 'doc-ready/doc-ready',[ 'eventie/eventie' ], defineDocReady );\n} else if ( typeof exports === 'object' ) {\n  module.exports = defineDocReady( require('eventie') );\n} else {\n  // browser global\n  window.docReady = defineDocReady( window.eventie );\n}\n\n})( window );\n\n/**\n * matchesSelector v1.0.3\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n/*global define: false, module: false */\n\n( function( ElemProto ) {\n\n  \n\n  var matchesMethod = ( function() {\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0, len = prefixes.length; i < len; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  // ----- match ----- //\n\n  function match( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  }\n\n  // ----- appendToFragment ----- //\n\n  function checkParent( elem ) {\n    // not needed if already has parent\n    if ( elem.parentNode ) {\n      return;\n    }\n    var fragment = document.createDocumentFragment();\n    fragment.appendChild( elem );\n  }\n\n  // ----- query ----- //\n\n  // fall back to using QSA\n  // thx @jonathantneal https://gist.github.com/3062955\n  function query( elem, selector ) {\n    // append to fragment if no parent\n    checkParent( elem );\n\n    // match elem with all selected elems of parent\n    var elems = elem.parentNode.querySelectorAll( selector );\n    for ( var i=0, len = elems.length; i < len; i++ ) {\n      // return true if match\n      if ( elems[i] === elem ) {\n        return true;\n      }\n    }\n    // otherwise return false\n    return false;\n  }\n\n  // ----- matchChild ----- //\n\n  function matchChild( elem, selector ) {\n    checkParent( elem );\n    return match( elem, selector );\n  }\n\n  // ----- matchesSelector ----- //\n\n  var matchesSelector;\n\n  if ( matchesMethod ) {\n    // IE9 supports matchesSelector, but doesn't work on orphaned elems\n    // check for that\n    var div = document.createElement('div');\n    var supportsOrphans = match( div, 'div' );\n    matchesSelector = supportsOrphans ? match : matchChild;\n  } else {\n    matchesSelector = query;\n  }\n\n  // transport\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( 'matches-selector/matches-selector',[],function() {\n      return matchesSelector;\n    });\n  } else if ( typeof exports === 'object' ) {\n    module.exports = matchesSelector;\n  }\n  else {\n    // browser global\n    window.matchesSelector = matchesSelector;\n  }\n\n})( Element.prototype );\n\n/**\n * Fizzy UI utils v1.0.1\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false, require: false */\n  \n  // universal module definition\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'fizzy-ui-utils/utils',[\n      'doc-ready/doc-ready',\n      'matches-selector/matches-selector'\n    ], function( docReady, matchesSelector ) {\n      return factory( window, docReady, matchesSelector );\n    });\n  } else if ( typeof exports == 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('doc-ready'),\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.docReady,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, docReady, matchesSelector ) {\n\n\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- isArray ----- //\n  \nvar objToString = Object.prototype.toString;\nutils.isArray = function( obj ) {\n  return objToString.call( obj ) == '[object Array]';\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  var ary = [];\n  if ( utils.isArray( obj ) ) {\n    // use object if already an array\n    ary = obj;\n  } else if ( obj && typeof obj.length == 'number' ) {\n    // convert nodeList to array\n    for ( var i=0, len = obj.length; i < len; i++ ) {\n      ary.push( obj[i] );\n    }\n  } else {\n    // array of single index\n    ary.push( obj );\n  }\n  return ary;\n};\n\n// ----- indexOf ----- //\n\n// index of helper cause IE8\nutils.indexOf = Array.prototype.indexOf ? function( ary, obj ) {\n    return ary.indexOf( obj );\n  } : function( ary, obj ) {\n    for ( var i=0, len = ary.length; i < len; i++ ) {\n      if ( ary[i] === obj ) {\n        return i;\n      }\n    }\n    return -1;\n  };\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = utils.indexOf( ary, obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- isElement ----- //\n\n// http://stackoverflow.com/a/384380/182183\nutils.isElement = ( typeof HTMLElement == 'function' || typeof HTMLElement == 'object' ) ?\n  function isElementDOM2( obj ) {\n    return obj instanceof HTMLElement;\n  } :\n  function isElementQuirky( obj ) {\n    return obj && typeof obj == 'object' &&\n      obj.nodeType == 1 && typeof obj.nodeName == 'string';\n  };\n\n// ----- setText ----- //\n\nutils.setText = ( function() {\n  var setTextProperty;\n  function setText( elem, text ) {\n    // only check setTextProperty once\n    setTextProperty = setTextProperty || ( document.documentElement.textContent !== undefined ? 'textContent' : 'innerText' );\n    elem[ setTextProperty ] = text;\n  }\n  return setText;\n})();\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    // check that elem is an actual element\n    if ( !utils.isElement( elem ) ) {\n      continue;\n    }\n    // filter & find items if we have a selector\n    if ( selector ) {\n      // filter siblings\n      if ( matchesSelector( elem, selector ) ) {\n        ffElems.push( elem );\n      }\n      // find children\n      var childElems = elem.querySelectorAll( selector );\n      // concat childElems to filterFound array\n      for ( var j=0, jLen = childElems.length; j < jLen; j++ ) {\n        ffElems.push( childElems[j] );\n      }\n    } else {\n      ffElems.push( elem );\n    }\n  }\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    if ( timeout ) {\n      clearTimeout( timeout );\n    }\n    var args = arguments;\n\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold || 100 );\n  };\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-option attribute\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var elems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var dataAttr = 'data-' + dashedNamespace + '-options';\n\n    for ( var i=0, len = elems.length; i < len; i++ ) {\n      var elem = elems[i];\n      var attr = elem.getAttribute( dataAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' +\n            elem.nodeName.toLowerCase() + ( elem.id ? '#' + elem.id : '' ) + ': ' +\n            error );\n        }\n        continue;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('layoutname')\n      var jQuery = window.jQuery;\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    }\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n\n/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n  \n  // universal module definition\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( 'outlayer/item',[\n        'eventEmitter/EventEmitter',\n        'get-size/get-size',\n        'get-style-property/get-style-property',\n        'fizzy-ui-utils/utils'\n      ],\n      function( EventEmitter, getSize, getStyleProperty, utils ) {\n        return factory( window, EventEmitter, getSize, getStyleProperty, utils );\n      }\n    );\n  } else if (typeof exports === 'object') {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('wolfy87-eventemitter'),\n      require('get-size'),\n      require('desandro-get-style-property'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Outlayer = {};\n    window.Outlayer.Item = factory(\n      window,\n      window.EventEmitter,\n      window.getSize,\n      window.getStyleProperty,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, EventEmitter, getSize, getStyleProperty, utils ) {\n\n\n// ----- helpers ----- //\n\nvar getComputedStyle = window.getComputedStyle;\nvar getStyle = getComputedStyle ?\n  function( elem ) {\n    return getComputedStyle( elem, null );\n  } :\n  function( elem ) {\n    return elem.currentStyle;\n  };\n\n\nfunction isEmptyObj( obj ) {\n  for ( var prop in obj ) {\n    return false;\n  }\n  prop = null;\n  return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\nvar transitionProperty = getStyleProperty('transition');\nvar transformProperty = getStyleProperty('transform');\nvar supportsCSS3 = transitionProperty && transformProperty;\nvar is3d = !!getStyleProperty('perspective');\n\nvar transitionEndEvent = {\n  WebkitTransition: 'webkitTransitionEnd',\n  MozTransition: 'transitionend',\n  OTransition: 'otransitionend',\n  transition: 'transitionend'\n}[ transitionProperty ];\n\n// properties that could have vendor prefix\nvar prefixableProperties = [\n  'transform',\n  'transition',\n  'transitionDuration',\n  'transitionProperty'\n];\n\n// cache all vendor properties\nvar vendorProperties = ( function() {\n  var cache = {};\n  for ( var i=0, len = prefixableProperties.length; i < len; i++ ) {\n    var prop = prefixableProperties[i];\n    var supportedProp = getStyleProperty( prop );\n    if ( supportedProp && supportedProp !== prop ) {\n      cache[ prop ] = supportedProp;\n    }\n  }\n  return cache;\n})();\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n  if ( !element ) {\n    return;\n  }\n\n  this.element = element;\n  // parent layout class, i.e. Masonry, Isotope, or Packery\n  this.layout = layout;\n  this.position = {\n    x: 0,\n    y: 0\n  };\n\n  this._create();\n}\n\n// inherit EventEmitter\nutils.extend( Item.prototype, EventEmitter.prototype );\n\nItem.prototype._create = function() {\n  // transition objects\n  this._transn = {\n    ingProperties: {},\n    clean: {},\n    onEnd: {}\n  };\n\n  this.css({\n    position: 'absolute'\n  });\n};\n\n// trigger specified handler for event type\nItem.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nItem.prototype.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nItem.prototype.css = function( style ) {\n  var elemStyle = this.element.style;\n\n  for ( var prop in style ) {\n    // use vendor property if available\n    var supportedProp = vendorProperties[ prop ] || prop;\n    elemStyle[ supportedProp ] = style[ prop ];\n  }\n};\n\n // measure position, and sets it\nItem.prototype.getPosition = function() {\n  var style = getStyle( this.element );\n  var layoutOptions = this.layout.options;\n  var isOriginLeft = layoutOptions.isOriginLeft;\n  var isOriginTop = layoutOptions.isOriginTop;\n  var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n  var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n  var x = parseInt( xValue, 10 );\n  var y = parseInt( yValue, 10 );\n  // convert percent to pixels\n  var layoutSize = this.layout.size;\n  x = xValue.indexOf('%') != -1 ? ( x / 100 ) * layoutSize.width : x;\n  y = yValue.indexOf('%') != -1 ? ( y / 100 ) * layoutSize.height : y;\n\n  // clean up 'auto' or other non-integer values\n  x = isNaN( x ) ? 0 : x;\n  y = isNaN( y ) ? 0 : y;\n  // remove padding from measurement\n  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n  this.position.x = x;\n  this.position.y = y;\n};\n\n// set settled position, apply padding\nItem.prototype.layoutPosition = function() {\n  var layoutSize = this.layout.size;\n  var layoutOptions = this.layout.options;\n  var style = {};\n\n  // x\n  var xPadding = layoutOptions.isOriginLeft ? 'paddingLeft' : 'paddingRight';\n  var xProperty = layoutOptions.isOriginLeft ? 'left' : 'right';\n  var xResetProperty = layoutOptions.isOriginLeft ? 'right' : 'left';\n\n  var x = this.position.x + layoutSize[ xPadding ];\n  // set in percentage or pixels\n  style[ xProperty ] = this.getXValue( x );\n  // reset other property\n  style[ xResetProperty ] = '';\n\n  // y\n  var yPadding = layoutOptions.isOriginTop ? 'paddingTop' : 'paddingBottom';\n  var yProperty = layoutOptions.isOriginTop ? 'top' : 'bottom';\n  var yResetProperty = layoutOptions.isOriginTop ? 'bottom' : 'top';\n\n  var y = this.position.y + layoutSize[ yPadding ];\n  // set in percentage or pixels\n  style[ yProperty ] = this.getYValue( y );\n  // reset other property\n  style[ yResetProperty ] = '';\n\n  this.css( style );\n  this.emitEvent( 'layout', [ this ] );\n};\n\nItem.prototype.getXValue = function( x ) {\n  var layoutOptions = this.layout.options;\n  return layoutOptions.percentPosition && !layoutOptions.isHorizontal ?\n    ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nItem.prototype.getYValue = function( y ) {\n  var layoutOptions = this.layout.options;\n  return layoutOptions.percentPosition && layoutOptions.isHorizontal ?\n    ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\n\nItem.prototype._transitionTo = function( x, y ) {\n  this.getPosition();\n  // get current x & y from top/left\n  var curX = this.position.x;\n  var curY = this.position.y;\n\n  var compareX = parseInt( x, 10 );\n  var compareY = parseInt( y, 10 );\n  var didNotMove = compareX === this.position.x && compareY === this.position.y;\n\n  // save end position\n  this.setPosition( x, y );\n\n  // if did not move and not transitioning, just go to layout\n  if ( didNotMove && !this.isTransitioning ) {\n    this.layoutPosition();\n    return;\n  }\n\n  var transX = x - curX;\n  var transY = y - curY;\n  var transitionStyle = {};\n  transitionStyle.transform = this.getTranslate( transX, transY );\n\n  this.transition({\n    to: transitionStyle,\n    onTransitionEnd: {\n      transform: this.layoutPosition\n    },\n    isCleaning: true\n  });\n};\n\nItem.prototype.getTranslate = function( x, y ) {\n  // flip cooridinates if origin on right or bottom\n  var layoutOptions = this.layout.options;\n  x = layoutOptions.isOriginLeft ? x : -x;\n  y = layoutOptions.isOriginTop ? y : -y;\n  x = this.getXValue( x );\n  y = this.getYValue( y );\n\n  if ( is3d ) {\n    return 'translate3d(' + x + ', ' + y + ', 0)';\n  }\n\n  return 'translate(' + x + ', ' + y + ')';\n};\n\n// non transition + transform support\nItem.prototype.goTo = function( x, y ) {\n  this.setPosition( x, y );\n  this.layoutPosition();\n};\n\n// use transition and transforms if supported\nItem.prototype.moveTo = supportsCSS3 ?\n  Item.prototype._transitionTo : Item.prototype.goTo;\n\nItem.prototype.setPosition = function( x, y ) {\n  this.position.x = parseInt( x, 10 );\n  this.position.y = parseInt( y, 10 );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nItem.prototype._nonTransition = function( args ) {\n  this.css( args.to );\n  if ( args.isCleaning ) {\n    this._removeStyles( args.to );\n  }\n  for ( var prop in args.onTransitionEnd ) {\n    args.onTransitionEnd[ prop ].call( this );\n  }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n *   @param {Object} to - style to transition to\n *   @param {Object} from - style to start transition from\n *   @param {Boolean} isCleaning - removes transition styles after transition\n *   @param {Function} onTransitionEnd - callback\n */\nItem.prototype._transition = function( args ) {\n  // redirect to nonTransition if no transition duration\n  if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n    this._nonTransition( args );\n    return;\n  }\n\n  var _transition = this._transn;\n  // keep track of onTransitionEnd callback by css property\n  for ( var prop in args.onTransitionEnd ) {\n    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n  }\n  // keep track of properties that are transitioning\n  for ( prop in args.to ) {\n    _transition.ingProperties[ prop ] = true;\n    // keep track of properties to clean up when transition is done\n    if ( args.isCleaning ) {\n      _transition.clean[ prop ] = true;\n    }\n  }\n\n  // set from styles\n  if ( args.from ) {\n    this.css( args.from );\n    // force redraw. http://blog.alexmaccaw.com/css-transitions\n    var h = this.element.offsetHeight;\n    // hack for JSHint to hush about unused var\n    h = null;\n  }\n  // enable transition\n  this.enableTransition( args.to );\n  // set styles that are transitioning\n  this.css( args.to );\n\n  this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n  return str.replace( /([A-Z])/g, function( $1 ) {\n    return '-' + $1.toLowerCase();\n  });\n}\n\nvar transitionProps = 'opacity,' +\n  toDashedAll( vendorProperties.transform || 'transform' );\n\nItem.prototype.enableTransition = function(/* style */) {\n  // HACK changing transitionProperty during a transition\n  // will cause transition to jump\n  if ( this.isTransitioning ) {\n    return;\n  }\n\n  // make `transition: foo, bar, baz` from style object\n  // HACK un-comment this when enableTransition can work\n  // while a transition is happening\n  // var transitionValues = [];\n  // for ( var prop in style ) {\n  //   // dash-ify camelCased properties like WebkitTransition\n  //   prop = vendorProperties[ prop ] || prop;\n  //   transitionValues.push( toDashedAll( prop ) );\n  // }\n  // enable transition styles\n  this.css({\n    transitionProperty: transitionProps,\n    transitionDuration: this.layout.options.transitionDuration\n  });\n  // listen for transition end event\n  this.element.addEventListener( transitionEndEvent, this, false );\n};\n\nItem.prototype.transition = Item.prototype[ transitionProperty ? '_transition' : '_nonTransition' ];\n\n// ----- events ----- //\n\nItem.prototype.onwebkitTransitionEnd = function( event ) {\n  this.ontransitionend( event );\n};\n\nItem.prototype.onotransitionend = function( event ) {\n  this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n  '-webkit-transform': 'transform',\n  '-moz-transform': 'transform',\n  '-o-transform': 'transform'\n};\n\nItem.prototype.ontransitionend = function( event ) {\n  // disregard bubbled events from children\n  if ( event.target !== this.element ) {\n    return;\n  }\n  var _transition = this._transn;\n  // get property name of transitioned property, convert to prefix-free\n  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n  // remove property that has completed transitioning\n  delete _transition.ingProperties[ propertyName ];\n  // check if any properties are still transitioning\n  if ( isEmptyObj( _transition.ingProperties ) ) {\n    // all properties have completed transitioning\n    this.disableTransition();\n  }\n  // clean style\n  if ( propertyName in _transition.clean ) {\n    // clean up style\n    this.element.style[ event.propertyName ] = '';\n    delete _transition.clean[ propertyName ];\n  }\n  // trigger onTransitionEnd callback\n  if ( propertyName in _transition.onEnd ) {\n    var onTransitionEnd = _transition.onEnd[ propertyName ];\n    onTransitionEnd.call( this );\n    delete _transition.onEnd[ propertyName ];\n  }\n\n  this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nItem.prototype.disableTransition = function() {\n  this.removeTransitionStyles();\n  this.element.removeEventListener( transitionEndEvent, this, false );\n  this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nItem.prototype._removeStyles = function( style ) {\n  // clean up transition styles\n  var cleanStyle = {};\n  for ( var prop in style ) {\n    cleanStyle[ prop ] = '';\n  }\n  this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n  transitionProperty: '',\n  transitionDuration: ''\n};\n\nItem.prototype.removeTransitionStyles = function() {\n  // remove transition\n  this.css( cleanTransitionStyle );\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nItem.prototype.removeElem = function() {\n  this.element.parentNode.removeChild( this.element );\n  // remove display: none\n  this.css({ display: '' });\n  this.emitEvent( 'remove', [ this ] );\n};\n\nItem.prototype.remove = function() {\n  // just remove element if no transition support or no transition\n  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n    this.removeElem();\n    return;\n  }\n\n  // start transition\n  var _this = this;\n  this.once( 'transitionEnd', function() {\n    _this.removeElem();\n  });\n  this.hide();\n};\n\nItem.prototype.reveal = function() {\n  delete this.isHidden;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n  this.transition({\n    from: options.hiddenStyle,\n    to: options.visibleStyle,\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nItem.prototype.onRevealTransitionEnd = function() {\n  // check if still visible\n  // during transition, item may have been hidden\n  if ( !this.isHidden ) {\n    this.emitEvent('reveal');\n  }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nItem.prototype.getHideRevealTransitionEndProperty = function( styleProperty ) {\n  var optionStyle = this.layout.options[ styleProperty ];\n  // use opacity\n  if ( optionStyle.opacity ) {\n    return 'opacity';\n  }\n  // get first property\n  for ( var prop in optionStyle ) {\n    return prop;\n  }\n};\n\nItem.prototype.hide = function() {\n  // set flag\n  this.isHidden = true;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n  this.transition({\n    from: options.visibleStyle,\n    to: options.hiddenStyle,\n    // keep hidden stuff hidden\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nItem.prototype.onHideTransitionEnd = function() {\n  // check if still hidden\n  // during transition, item may have been un-hidden\n  if ( this.isHidden ) {\n    this.css({ display: 'none' });\n    this.emitEvent('hide');\n  }\n};\n\nItem.prototype.destroy = function() {\n  this.css({\n    position: '',\n    left: '',\n    right: '',\n    top: '',\n    bottom: '',\n    transition: '',\n    transform: ''\n  });\n};\n\nreturn Item;\n\n}));\n\n/*!\n * Outlayer v1.4.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n  \n  // universal module definition\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'outlayer/outlayer',[\n        'eventie/eventie',\n        'eventEmitter/EventEmitter',\n        'get-size/get-size',\n        'fizzy-ui-utils/utils',\n        './item'\n      ],\n      function( eventie, EventEmitter, getSize, utils, Item ) {\n        return factory( window, eventie, EventEmitter, getSize, utils, Item);\n      }\n    );\n  } else if ( typeof exports == 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('eventie'),\n      require('wolfy87-eventemitter'),\n      require('get-size'),\n      require('fizzy-ui-utils'),\n      require('./item')\n    );\n  } else {\n    // browser global\n    window.Outlayer = factory(\n      window,\n      window.eventie,\n      window.EventEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      window.Outlayer.Item\n    );\n  }\n\n}( window, function factory( window, eventie, EventEmitter, getSize, utils, Item ) {\n\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for ' + this.constructor.namespace +\n        ': ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // add id for Outlayer.getFromElement\n  var id = ++GUID;\n  this.element.outlayerGUID = id; // expando\n  instances[ id ] = this; // associate via id\n\n  // kick it off\n  this._create();\n\n  if ( this.options.isInitLayout ) {\n    this.layout();\n  }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n  containerStyle: {\n    position: 'relative'\n  },\n  isInitLayout: true,\n  isOriginLeft: true,\n  isOriginTop: true,\n  isResizeBound: true,\n  isResizingContainer: true,\n  // item options\n  transitionDuration: '0.4s',\n  hiddenStyle: {\n    opacity: 0,\n    transform: 'scale(0.001)'\n  },\n  visibleStyle: {\n    opacity: 1,\n    transform: 'scale(1)'\n  }\n};\n\n// inherit EventEmitter\nutils.extend( Outlayer.prototype, EventEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nOutlayer.prototype.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\nOutlayer.prototype._create = function() {\n  // get items from children\n  this.reloadItems();\n  // elements that affect layout, but are not laid out\n  this.stamps = [];\n  this.stamp( this.options.stamp );\n  // set container style\n  utils.extend( this.element.style, this.options.containerStyle );\n\n  // bind resize method\n  if ( this.options.isResizeBound ) {\n    this.bindResize();\n  }\n};\n\n// goes through all children again and gets bricks in proper order\nOutlayer.prototype.reloadItems = function() {\n  // collection of item elements\n  this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nOutlayer.prototype._itemize = function( elems ) {\n\n  var itemElems = this._filterFindItemElements( elems );\n  var Item = this.constructor.Item;\n\n  // create new Outlayer Items for collection\n  var items = [];\n  for ( var i=0, len = itemElems.length; i < len; i++ ) {\n    var elem = itemElems[i];\n    var item = new Item( elem, this );\n    items.push( item );\n  }\n\n  return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nOutlayer.prototype._filterFindItemElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nOutlayer.prototype.getItemElements = function() {\n  var elems = [];\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    elems.push( this.items[i].element );\n  }\n  return elems;\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nOutlayer.prototype.layout = function() {\n  this._resetLayout();\n  this._manageStamps();\n\n  // don't animate first layout\n  var isInstant = this.options.isLayoutInstant !== undefined ?\n    this.options.isLayoutInstant : !this._isLayoutInited;\n  this.layoutItems( this.items, isInstant );\n\n  // flag for initalized\n  this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nOutlayer.prototype._init = Outlayer.prototype.layout;\n\n/**\n * logic before any new layout\n */\nOutlayer.prototype._resetLayout = function() {\n  this.getSize();\n};\n\n\nOutlayer.prototype.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nOutlayer.prototype._getMeasurement = function( measurement, size ) {\n  var option = this.options[ measurement ];\n  var elem;\n  if ( !option ) {\n    // default to 0\n    this[ measurement ] = 0;\n  } else {\n    // use option as an element\n    if ( typeof option === 'string' ) {\n      elem = this.element.querySelector( option );\n    } else if ( utils.isElement( option ) ) {\n      elem = option;\n    }\n    // use size of element, if element\n    this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n  }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nOutlayer.prototype.layoutItems = function( items, isInstant ) {\n  items = this._getItemsForLayout( items );\n\n  this._layoutItems( items, isInstant );\n\n  this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nOutlayer.prototype._getItemsForLayout = function( items ) {\n  var layoutItems = [];\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    if ( !item.isIgnored ) {\n      layoutItems.push( item );\n    }\n  }\n  return layoutItems;\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nOutlayer.prototype._layoutItems = function( items, isInstant ) {\n  this._emitCompleteOnItems( 'layout', items );\n\n  if ( !items || !items.length ) {\n    // no items, emit event with empty array\n    return;\n  }\n\n  var queue = [];\n\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    // get x/y object from method\n    var position = this._getItemLayoutPosition( item );\n    // enqueue\n    position.item = item;\n    position.isInstant = isInstant || item.isLayoutInstant;\n    queue.push( position );\n  }\n\n  this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nOutlayer.prototype._getItemLayoutPosition = function( /* item */ ) {\n  return {\n    x: 0,\n    y: 0\n  };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nOutlayer.prototype._processLayoutQueue = function( queue ) {\n  for ( var i=0, len = queue.length; i < len; i++ ) {\n    var obj = queue[i];\n    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant );\n  }\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nOutlayer.prototype._positionItem = function( item, x, y, isInstant ) {\n  if ( isInstant ) {\n    // if not transition, just set CSS\n    item.goTo( x, y );\n  } else {\n    item.moveTo( x, y );\n  }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nOutlayer.prototype._postLayout = function() {\n  this.resizeContainer();\n};\n\nOutlayer.prototype.resizeContainer = function() {\n  if ( !this.options.isResizingContainer ) {\n    return;\n  }\n  var size = this._getContainerSize();\n  if ( size ) {\n    this._setContainerMeasure( size.width, true );\n    this._setContainerMeasure( size.height, false );\n  }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n *   @param {Number} width\n *   @param {Number} height\n */\nOutlayer.prototype._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nOutlayer.prototype._setContainerMeasure = function( measure, isWidth ) {\n  if ( measure === undefined ) {\n    return;\n  }\n\n  var elemSize = this.size;\n  // add padding and border width if border box\n  if ( elemSize.isBorderBox ) {\n    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n      elemSize.borderLeftWidth + elemSize.borderRightWidth :\n      elemSize.paddingBottom + elemSize.paddingTop +\n      elemSize.borderTopWidth + elemSize.borderBottomWidth;\n  }\n\n  measure = Math.max( measure, 0 );\n  this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nOutlayer.prototype._emitCompleteOnItems = function( eventName, items ) {\n  var _this = this;\n  function onComplete() {\n    _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n  }\n\n  var count = items.length;\n  if ( !items || !count ) {\n    onComplete();\n    return;\n  }\n\n  var doneCount = 0;\n  function tick() {\n    doneCount++;\n    if ( doneCount === count ) {\n      onComplete();\n    }\n  }\n\n  // bind callback\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    item.once( eventName, tick );\n  }\n};\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nOutlayer.prototype.dispatchEvent = function( type, event, args ) {\n  // add original event to arguments\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery ) {\n    // set this.$element\n    this.$element = this.$element || jQuery( this.element );\n    if ( event ) {\n      // create jQuery event\n      var $event = jQuery.Event( event );\n      $event.type = type;\n      this.$element.trigger( $event, args );\n    } else {\n      // just trigger with type if no event available\n      this.$element.trigger( type, args );\n    }\n  }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nOutlayer.prototype.ignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    item.isIgnored = true;\n  }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nOutlayer.prototype.unignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    delete item.isIgnored;\n  }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nOutlayer.prototype.stamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ) {\n    return;\n  }\n\n  this.stamps = this.stamps.concat( elems );\n  // ignore\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    this.ignore( elem );\n  }\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nOutlayer.prototype.unstamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ){\n    return;\n  }\n\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    // filter out removed stamp elements\n    utils.removeFrom( this.stamps, elem );\n    this.unignore( elem );\n  }\n\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nOutlayer.prototype._find = function( elems ) {\n  if ( !elems ) {\n    return;\n  }\n  // if string, use argument as selector string\n  if ( typeof elems === 'string' ) {\n    elems = this.element.querySelectorAll( elems );\n  }\n  elems = utils.makeArray( elems );\n  return elems;\n};\n\nOutlayer.prototype._manageStamps = function() {\n  if ( !this.stamps || !this.stamps.length ) {\n    return;\n  }\n\n  this._getBoundingRect();\n\n  for ( var i=0, len = this.stamps.length; i < len; i++ ) {\n    var stamp = this.stamps[i];\n    this._manageStamp( stamp );\n  }\n};\n\n// update boundingLeft / Top\nOutlayer.prototype._getBoundingRect = function() {\n  // get bounding rect for container element\n  var boundingRect = this.element.getBoundingClientRect();\n  var size = this.size;\n  this._boundingRect = {\n    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n    top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n  };\n};\n\n/**\n * @param {Element} stamp\n**/\nOutlayer.prototype._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nOutlayer.prototype._getElementOffset = function( elem ) {\n  var boundingRect = elem.getBoundingClientRect();\n  var thisRect = this._boundingRect;\n  var size = getSize( elem );\n  var offset = {\n    left: boundingRect.left - thisRect.left - size.marginLeft,\n    top: boundingRect.top - thisRect.top - size.marginTop,\n    right: thisRect.right - boundingRect.right - size.marginRight,\n    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n  };\n  return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nOutlayer.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n/**\n * Bind layout to window resizing\n */\nOutlayer.prototype.bindResize = function() {\n  // bind just one listener\n  if ( this.isResizeBound ) {\n    return;\n  }\n  eventie.bind( window, 'resize', this );\n  this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nOutlayer.prototype.unbindResize = function() {\n  if ( this.isResizeBound ) {\n    eventie.unbind( window, 'resize', this );\n  }\n  this.isResizeBound = false;\n};\n\n// original debounce by John Hann\n// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/\n\n// this fires every resize\nOutlayer.prototype.onresize = function() {\n  if ( this.resizeTimeout ) {\n    clearTimeout( this.resizeTimeout );\n  }\n\n  var _this = this;\n  function delayed() {\n    _this.resize();\n    delete _this.resizeTimeout;\n  }\n\n  this.resizeTimeout = setTimeout( delayed, 100 );\n};\n\n// debounced, layout on resize\nOutlayer.prototype.resize = function() {\n  // don't trigger if size did not change\n  // or if resize was unbound. See #9\n  if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n    return;\n  }\n\n  this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nOutlayer.prototype.needsResizeLayout = function() {\n  var size = getSize( this.element );\n  // check that this.size and size are there\n  // IE8 triggers resize on body size change, so they might not be\n  var hasSizes = this.size && size;\n  return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nOutlayer.prototype.addItems = function( elems ) {\n  var items = this._itemize( elems );\n  // add items to collection\n  if ( items.length ) {\n    this.items = this.items.concat( items );\n  }\n  return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.appended = function( elems ) {\n  var items = this.addItems( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // layout and reveal just the new items\n  this.layoutItems( items, true );\n  this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.prepended = function( elems ) {\n  var items = this._itemize( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // add items to beginning of collection\n  var previousItems = this.items.slice(0);\n  this.items = items.concat( previousItems );\n  // start new layout\n  this._resetLayout();\n  this._manageStamps();\n  // layout new stuff without transition\n  this.layoutItems( items, true );\n  this.reveal( items );\n  // layout previous items\n  this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nOutlayer.prototype.reveal = function( items ) {\n  this._emitCompleteOnItems( 'reveal', items );\n\n  var len = items && items.length;\n  for ( var i=0; len && i < len; i++ ) {\n    var item = items[i];\n    item.reveal();\n  }\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nOutlayer.prototype.hide = function( items ) {\n  this._emitCompleteOnItems( 'hide', items );\n\n  var len = items && items.length;\n  for ( var i=0; len && i < len; i++ ) {\n    var item = items[i];\n    item.hide();\n  }\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nOutlayer.prototype.revealItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nOutlayer.prototype.hideItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nOutlayer.prototype.getItem = function( elem ) {\n  // loop through items to get the one that matches\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    var item = this.items[i];\n    if ( item.element === elem ) {\n      // return item\n      return item;\n    }\n  }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nOutlayer.prototype.getItems = function( elems ) {\n  elems = utils.makeArray( elems );\n  var items = [];\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    var item = this.getItem( elem );\n    if ( item ) {\n      items.push( item );\n    }\n  }\n\n  return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.remove = function( elems ) {\n  var removeItems = this.getItems( elems );\n\n  this._emitCompleteOnItems( 'remove', removeItems );\n\n  // bail if no items to remove\n  if ( !removeItems || !removeItems.length ) {\n    return;\n  }\n\n  for ( var i=0, len = removeItems.length; i < len; i++ ) {\n    var item = removeItems[i];\n    item.remove();\n    // remove item from collection\n    utils.removeFrom( this.items, item );\n  }\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nOutlayer.prototype.destroy = function() {\n  // clean up dynamic styles\n  var style = this.element.style;\n  style.height = '';\n  style.position = '';\n  style.width = '';\n  // destroy items\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    var item = this.items[i];\n    item.destroy();\n  }\n\n  this.unbindResize();\n\n  var id = this.element.outlayerGUID;\n  delete instances[ id ]; // remove reference to instance by id\n  delete this.element.outlayerGUID;\n  // remove data for jQuery\n  if ( jQuery ) {\n    jQuery.removeData( this.element, this.constructor.namespace );\n  }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.outlayerGUID;\n  return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n  // sub-class Outlayer\n  function Layout() {\n    Outlayer.apply( this, arguments );\n  }\n  // inherit Outlayer prototype, use Object.create if there\n  if ( Object.create ) {\n    Layout.prototype = Object.create( Outlayer.prototype );\n  } else {\n    utils.extend( Layout.prototype, Outlayer.prototype );\n  }\n  // set contructor, used for namespace and Item\n  Layout.prototype.constructor = Layout;\n\n  Layout.defaults = utils.extend( {}, Outlayer.defaults );\n  // apply new options\n  utils.extend( Layout.defaults, options );\n  // keep prototype.settings for backwards compatibility (Packery v1.2.0)\n  Layout.prototype.settings = {};\n\n  Layout.namespace = namespace;\n\n  Layout.data = Outlayer.data;\n\n  // sub-class Item\n  Layout.Item = function LayoutItem() {\n    Item.apply( this, arguments );\n  };\n\n  Layout.Item.prototype = new Item();\n\n  // -------------------------- declarative -------------------------- //\n\n  utils.htmlInit( Layout, namespace );\n\n  // -------------------------- jQuery bridge -------------------------- //\n\n  // make into jQuery plugin\n  if ( jQuery && jQuery.bridget ) {\n    jQuery.bridget( namespace, Layout );\n  }\n\n  return Layout;\n};\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n\n\n/*!\n * Masonry v3.3.1\n * Cascading grid layout library\n * http://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n  \n  // universal module definition\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( [\n        'outlayer/outlayer',\n        'get-size/get-size',\n        'fizzy-ui-utils/utils'\n      ],\n      factory );\n  } else if ( typeof exports === 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      require('outlayer'),\n      require('get-size'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Masonry = factory(\n      window.Outlayer,\n      window.getSize,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( Outlayer, getSize, utils ) {\n\n\n\n// -------------------------- masonryDefinition -------------------------- //\n\n  // create an Outlayer layout class\n  var Masonry = Outlayer.create('masonry');\n\n  Masonry.prototype._resetLayout = function() {\n    this.getSize();\n    this._getMeasurement( 'columnWidth', 'outerWidth' );\n    this._getMeasurement( 'gutter', 'outerWidth' );\n    this.measureColumns();\n\n    // reset column Y\n    var i = this.cols;\n    this.colYs = [];\n    while (i--) {\n      this.colYs.push( 0 );\n    }\n\n    this.maxY = 0;\n  };\n\n  Masonry.prototype.measureColumns = function() {\n    this.getContainerWidth();\n    // if columnWidth is 0, default to outerWidth of first item\n    if ( !this.columnWidth ) {\n      var firstItem = this.items[0];\n      var firstItemElem = firstItem && firstItem.element;\n      // columnWidth fall back to item of first element\n      this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n        // if first elem has no width, default to size of container\n        this.containerWidth;\n    }\n\n    var columnWidth = this.columnWidth += this.gutter;\n\n    // calculate columns\n    var containerWidth = this.containerWidth + this.gutter;\n    var cols = containerWidth / columnWidth;\n    // fix rounding errors, typically with gutters\n    var excess = columnWidth - containerWidth % columnWidth;\n    // if overshoot is less than a pixel, round up, otherwise floor it\n    var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n    cols = Math[ mathMethod ]( cols );\n    this.cols = Math.max( cols, 1 );\n  };\n\n  Masonry.prototype.getContainerWidth = function() {\n    // container is parent if fit width\n    var container = this.options.isFitWidth ? this.element.parentNode : this.element;\n    // check that this.size and size are there\n    // IE8 triggers resize on body size change, so they might not be\n    var size = getSize( container );\n    this.containerWidth = size && size.innerWidth;\n  };\n\n  Masonry.prototype._getItemLayoutPosition = function( item ) {\n    item.getSize();\n    // how many columns does this brick span\n    var remainder = item.size.outerWidth % this.columnWidth;\n    var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n    // round if off by 1 pixel, otherwise use ceil\n    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n    colSpan = Math.min( colSpan, this.cols );\n\n    var colGroup = this._getColGroup( colSpan );\n    // get the minimum Y value from the columns\n    var minimumY = Math.min.apply( Math, colGroup );\n    var shortColIndex = utils.indexOf( colGroup, minimumY );\n\n    // position the brick\n    var position = {\n      x: this.columnWidth * shortColIndex,\n      y: minimumY\n    };\n\n    // apply setHeight to necessary columns\n    var setHeight = minimumY + item.size.outerHeight;\n    var setSpan = this.cols + 1 - colGroup.length;\n    for ( var i = 0; i < setSpan; i++ ) {\n      this.colYs[ shortColIndex + i ] = setHeight;\n    }\n\n    return position;\n  };\n\n  /**\n   * @param {Number} colSpan - number of columns the element spans\n   * @returns {Array} colGroup\n   */\n  Masonry.prototype._getColGroup = function( colSpan ) {\n    if ( colSpan < 2 ) {\n      // if brick spans only one column, use all the column Ys\n      return this.colYs;\n    }\n\n    var colGroup = [];\n    // how many different places could this brick fit horizontally\n    var groupCount = this.cols + 1 - colSpan;\n    // for each group potential horizontal position\n    for ( var i = 0; i < groupCount; i++ ) {\n      // make an array of colY values for that one group\n      var groupColYs = this.colYs.slice( i, i + colSpan );\n      // and get the max value of the array\n      colGroup[i] = Math.max.apply( Math, groupColYs );\n    }\n    return colGroup;\n  };\n\n  Masonry.prototype._manageStamp = function( stamp ) {\n    var stampSize = getSize( stamp );\n    var offset = this._getElementOffset( stamp );\n    // get the columns that this stamp affects\n    var firstX = this.options.isOriginLeft ? offset.left : offset.right;\n    var lastX = firstX + stampSize.outerWidth;\n    var firstCol = Math.floor( firstX / this.columnWidth );\n    firstCol = Math.max( 0, firstCol );\n    var lastCol = Math.floor( lastX / this.columnWidth );\n    // lastCol should not go over if multiple of columnWidth #425\n    lastCol -= lastX % this.columnWidth ? 0 : 1;\n    lastCol = Math.min( this.cols - 1, lastCol );\n    // set colYs to bottom of the stamp\n    var stampMaxY = ( this.options.isOriginTop ? offset.top : offset.bottom ) +\n      stampSize.outerHeight;\n    for ( var i = firstCol; i <= lastCol; i++ ) {\n      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n    }\n  };\n\n  Masonry.prototype._getContainerSize = function() {\n    this.maxY = Math.max.apply( Math, this.colYs );\n    var size = {\n      height: this.maxY\n    };\n\n    if ( this.options.isFitWidth ) {\n      size.width = this._getContainerFitWidth();\n    }\n\n    return size;\n  };\n\n  Masonry.prototype._getContainerFitWidth = function() {\n    var unusedCols = 0;\n    // count unused columns\n    var i = this.cols;\n    while ( --i ) {\n      if ( this.colYs[i] !== 0 ) {\n        break;\n      }\n      unusedCols++;\n    }\n    // fit container to columns that have been used\n    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n  };\n\n  Masonry.prototype.needsResizeLayout = function() {\n    var previousWidth = this.containerWidth;\n    this.getContainerWidth();\n    return previousWidth !== this.containerWidth;\n  };\n\n  return Masonry;\n\n}));\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/masonry.js",
    "content": "/*!\n * Masonry v3.3.1\n * Cascading grid layout library\n * http://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n  'use strict';\n  // universal module definition\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( [\n        'outlayer/outlayer',\n        'get-size/get-size',\n        'fizzy-ui-utils/utils'\n      ],\n      factory );\n  } else if ( typeof exports === 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      require('outlayer'),\n      require('get-size'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Masonry = factory(\n      window.Outlayer,\n      window.getSize,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( Outlayer, getSize, utils ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n  // create an Outlayer layout class\n  var Masonry = Outlayer.create('masonry');\n\n  Masonry.prototype._resetLayout = function() {\n    this.getSize();\n    this._getMeasurement( 'columnWidth', 'outerWidth' );\n    this._getMeasurement( 'gutter', 'outerWidth' );\n    this.measureColumns();\n\n    // reset column Y\n    var i = this.cols;\n    this.colYs = [];\n    while (i--) {\n      this.colYs.push( 0 );\n    }\n\n    this.maxY = 0;\n  };\n\n  Masonry.prototype.measureColumns = function() {\n    this.getContainerWidth();\n    // if columnWidth is 0, default to outerWidth of first item\n    if ( !this.columnWidth ) {\n      var firstItem = this.items[0];\n      var firstItemElem = firstItem && firstItem.element;\n      // columnWidth fall back to item of first element\n      this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n        // if first elem has no width, default to size of container\n        this.containerWidth;\n    }\n\n    var columnWidth = this.columnWidth += this.gutter;\n\n    // calculate columns\n    var containerWidth = this.containerWidth + this.gutter;\n    var cols = containerWidth / columnWidth;\n    // fix rounding errors, typically with gutters\n    var excess = columnWidth - containerWidth % columnWidth;\n    // if overshoot is less than a pixel, round up, otherwise floor it\n    var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n    cols = Math[ mathMethod ]( cols );\n    this.cols = Math.max( cols, 1 );\n  };\n\n  Masonry.prototype.getContainerWidth = function() {\n    // container is parent if fit width\n    var container = this.options.isFitWidth ? this.element.parentNode : this.element;\n    // check that this.size and size are there\n    // IE8 triggers resize on body size change, so they might not be\n    var size = getSize( container );\n    this.containerWidth = size && size.innerWidth;\n  };\n\n  Masonry.prototype._getItemLayoutPosition = function( item ) {\n    item.getSize();\n    // how many columns does this brick span\n    var remainder = item.size.outerWidth % this.columnWidth;\n    var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n    // round if off by 1 pixel, otherwise use ceil\n    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n    colSpan = Math.min( colSpan, this.cols );\n\n    var colGroup = this._getColGroup( colSpan );\n    // get the minimum Y value from the columns\n    var minimumY = Math.min.apply( Math, colGroup );\n    var shortColIndex = utils.indexOf( colGroup, minimumY );\n\n    // position the brick\n    var position = {\n      x: this.columnWidth * shortColIndex,\n      y: minimumY\n    };\n\n    // apply setHeight to necessary columns\n    var setHeight = minimumY + item.size.outerHeight;\n    var setSpan = this.cols + 1 - colGroup.length;\n    for ( var i = 0; i < setSpan; i++ ) {\n      this.colYs[ shortColIndex + i ] = setHeight;\n    }\n\n    return position;\n  };\n\n  /**\n   * @param {Number} colSpan - number of columns the element spans\n   * @returns {Array} colGroup\n   */\n  Masonry.prototype._getColGroup = function( colSpan ) {\n    if ( colSpan < 2 ) {\n      // if brick spans only one column, use all the column Ys\n      return this.colYs;\n    }\n\n    var colGroup = [];\n    // how many different places could this brick fit horizontally\n    var groupCount = this.cols + 1 - colSpan;\n    // for each group potential horizontal position\n    for ( var i = 0; i < groupCount; i++ ) {\n      // make an array of colY values for that one group\n      var groupColYs = this.colYs.slice( i, i + colSpan );\n      // and get the max value of the array\n      colGroup[i] = Math.max.apply( Math, groupColYs );\n    }\n    return colGroup;\n  };\n\n  Masonry.prototype._manageStamp = function( stamp ) {\n    var stampSize = getSize( stamp );\n    var offset = this._getElementOffset( stamp );\n    // get the columns that this stamp affects\n    var firstX = this.options.isOriginLeft ? offset.left : offset.right;\n    var lastX = firstX + stampSize.outerWidth;\n    var firstCol = Math.floor( firstX / this.columnWidth );\n    firstCol = Math.max( 0, firstCol );\n    var lastCol = Math.floor( lastX / this.columnWidth );\n    // lastCol should not go over if multiple of columnWidth #425\n    lastCol -= lastX % this.columnWidth ? 0 : 1;\n    lastCol = Math.min( this.cols - 1, lastCol );\n    // set colYs to bottom of the stamp\n    var stampMaxY = ( this.options.isOriginTop ? offset.top : offset.bottom ) +\n      stampSize.outerHeight;\n    for ( var i = firstCol; i <= lastCol; i++ ) {\n      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n    }\n  };\n\n  Masonry.prototype._getContainerSize = function() {\n    this.maxY = Math.max.apply( Math, this.colYs );\n    var size = {\n      height: this.maxY\n    };\n\n    if ( this.options.isFitWidth ) {\n      size.width = this._getContainerFitWidth();\n    }\n\n    return size;\n  };\n\n  Masonry.prototype._getContainerFitWidth = function() {\n    var unusedCols = 0;\n    // count unused columns\n    var i = this.cols;\n    while ( --i ) {\n      if ( this.colYs[i] !== 0 ) {\n        break;\n      }\n      unusedCols++;\n    }\n    // fit container to columns that have been used\n    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n  };\n\n  Masonry.prototype.needsResizeLayout = function() {\n    var previousWidth = this.containerWidth;\n    this.getContainerWidth();\n    return previousWidth !== this.containerWidth;\n  };\n\n  return Masonry;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/basic.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>basic</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n</head>\n<body>\n\n  <h1>basic</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  var container = document.querySelector('#basic');\n  var msnry = new Masonry( container, {\n    columnWidth: 60\n  });\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/bottom-up.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>bottom up</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n  <style>\n    #stamped .stamp1 {\n      width: 30%;\n      height: 100px;\n      left: 30%;\n      bottom: 20px;\n    }\n\n    #stamped .stamp2 {\n      width: 200px;\n      height: 50px;\n      left: 20px;\n      bottom: 50px;\n    }\n  </style>\n\n</head>\n<body>\n\n  <h1>bottom up</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n  <div id=\"stamped\" class=\"container\">\n    <div class=\"stamp stamp1\"></div>\n    <div class=\"stamp stamp2\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  ( function() {\n    var container = document.querySelector('#basic');\n    var msnry = new Masonry( container, {\n      isOriginTop: false,\n      columnWidth: 60\n    });\n  })();\n\n  ( function() {\n    var container = document.querySelector('#stamped');\n    var msnry = new Masonry( container, {\n      itemSelector: '.item',\n      isOriginTop: false,\n      columnWidth: 60,\n      gutter: 10,\n      stamp: '.stamp'\n    });\n  })();\n\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/browserify/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>browserify</title>\n\n  <link rel=\"stylesheet\" href=\"../sandbox.css\" />\n\n</head>\n<body>\n\n  <h1>browserify</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"bundle.js\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/browserify/main.js",
    "content": "// vanilla js\n\nvar Masonry = require('../../masonry');\n\nnew Masonry( '#basic', {\n  columnWidth: 60\n});\n\n// jquery\n\n// var $ = require('jquery');\n// var jQBridget = require('jquery-bridget');\n// var Masonry = require('../../masonry');\n//\n// $.bridget( 'masonry', Masonry );\n//\n// $('#basic').masonry({\n//   columnWidth: 60\n// });\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/element-sizing.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>element sizing</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n  <style>\n/*    #container { width: 501px; }*/\n    .item, .grid-sizer { width: 20%; }\n    .item.w2 { width: 40%; }\n    .item.w3 { width: 60%; }\n  </style>\n</head>\n<body>\n\n  <h1>element sizing</h1>\n\n  <div id=\"container\" class=\"container\">\n    <div class=\"grid-sizer\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  var container = document.querySelector('#container');\n  var msnry = new Masonry( container, {\n    columnWidth: '.grid-sizer',\n    percentPosition: true\n  });\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/fit-width.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>fit width</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n  <style>\n    .container {\n      margin: 0 auto;\n    }\n  </style>\n\n</head>\n<body>\n\n  <h1>fit width</h1>\n\n  <div class=\"container\">\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h3\"></div>\n    <div class=\"item w4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w4\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item w2 h3\"></div>\n    <div class=\"item w4\"></div>\n    <div class=\"item w2\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  var msnry = new Masonry( '.container', {\n    isFitWidth: true,\n    columnWidth: 120\n  });\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/fluid.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>fluid</title>\n\n  <style>\n  * {\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n  }\n\n  .grid {\n    background: #DDD;\n  }\n  \n  /* clearfix */\n  .grid:after {\n    display: block;\n    content: '';\n    clear: both;\n  }\n\n\n  .grid-sizer,\n  .grid-item {\n    width: 25%;\n  }\n\n  .grid-item {\n    border: 1px solid;\n    background: #09F;\n    height: 100px;\n  }\n\n  .grid-item--width2 { width: 50%; }\n\n  .grid-item--height2 { height: 160px; }\n\n  .grid-item--height3 { height: 220px; }\n\n  </style>\n\n</head>\n<body>\n\n  <h1>basic</h1>\n\n  <div class=\"grid\">\n    <div class=\"grid-sizer\"></div>\n    <div class=\"grid-item grid-item--width2\"></div>\n    <div class=\"grid-item\"></div>\n    <div class=\"grid-item grid-item--height3\"></div>\n    <div class=\"grid-item\"></div>\n    <div class=\"grid-item grid-item--width2 grid-item--height2\"></div>\n    <div class=\"grid-item\"></div>\n    <div class=\"grid-item\"></div>\n    <div class=\"grid-item grid-item--width2\"></div>\n    <div class=\"grid-item grid-item--height3\"></div>\n    <div class=\"grid-item\"></div>\n    <div class=\"grid-item\"></div>\n  </div>\n\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  window.msnry = new Masonry( '.grid', {\n    columnWidth: '.grid-sizer',\n    percentPosition: true\n  });\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/jquery.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>jQuery</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n</head>\n<body>\n\n  <h1>jQuery</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/jquery/dist/jquery.min.js\"></script>\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\n$( function() {\n\n  $('#basic').masonry({\n    columnWidth: 60\n  });\n\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/require-js/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>require js</title>\n\n  <link rel=\"stylesheet\" href=\"../sandbox.css\" />\n  <script data-main=\"main\" src=\"//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.5/require.js\"></script>\n\n</head>\n<body>\n\n  <h1>require js</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/require-js/main.js",
    "content": "/*global requirejs: false*/\n\n// -------------------------- pkgd -------------------------- //\n\n/*\nrequirejs( [ '../../dist/masonry.pkgd' ], function( Masonry ) {\n  new Masonry( document.querySelector('#basic') );\n});\n// */\n\n// -------------------------- bower -------------------------- //\n\n/*\nrequirejs.config({\n  baseUrl: '../bower_components'\n});\n\nrequirejs( [ '../masonry' ], function( Masonry ) {\n  new Masonry( document.querySelector('#basic') );\n});\n// */\n\n// -------------------------- pkgd & jQuery -------------------------- //\n\n// /*\nrequirejs.config({\n  paths: {\n    jquery: '../../bower_components/jquery/dist/jquery'\n  }\n});\n\nrequirejs( [ 'require', 'jquery', '../../dist/masonry.pkgd' ],\n  function( require, $, Masonry ) {\n    require( [\n      'jquery-bridget/jquery.bridget'\n    ],\n    function() {\n      $.bridget( 'masonry', Masonry );\n      $('#basic').masonry({\n        columnWidth: 60\n      });\n    }\n  );\n});\n// */\n\n// -------------------------- bower & jQuery -------------------------- //\n\n/*\nrequirejs.config({\n  baseUrl: '../bower_components',\n  paths: {\n    jquery: 'jquery/dist/jquery'\n  }\n});\n\nrequirejs( [\n    'jquery',\n    '../masonry',\n    'jquery-bridget/jquery.bridget'\n  ],\n  function( $, Masonry )  {\n    $.bridget( 'masonry', Masonry );\n    $('#basic').masonry({\n      columnWidth: 60\n    });\n  }\n);\n// */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/right-to-left.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>right to left</title>\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n  <style>\n    #stamped .stamp1 {\n      width: 30%;\n      height: 100px;\n      left: 30%;\n      top: 20px;\n      margin: 10px;\n    }\n\n    #stamped .stamp2 {\n      width: 200px;\n      height: 50px;\n      left: 20px;\n      top: 50px;\n    }\n  </style>\n\n</head>\n<body>\n\n  <h1>right to left</h1>\n\n  <div id=\"basic\" class=\"container\">\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n  <div id=\"stamped\" class=\"container\">\n    <div class=\"stamp stamp1\"></div>\n    <div class=\"stamp stamp2\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item w2 h2\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h4\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h5\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item w2 h5\"></div>\n    <div class=\"item w2\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item w3\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  ( function() {\n    var container = document.querySelector('#basic');\n    var msnry = new Masonry( container, {\n      isOriginLeft: false,\n      columnWidth: 60\n    });\n  })();\n\n  ( function() {\n    var container = document.querySelector('#stamped');\n    var msnry = new Masonry( container, {\n      itemSelector: '.item',\n      isOriginLeft: false,\n      columnWidth: 60,\n      gutter: 10,\n      stamp: '.stamp'\n    });\n  })();\n\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/sandbox.css",
    "content": "* {\n  box-sizing: border-box;\n}\n\n.container {\n  background: #EEE;\n  width: 50%;\n  margin-bottom: 20px;\n}\n\n.item {\n  width:  60px;\n  height: 60px;\n  float: left;\n  border: 1px solid;\n  background: #09F;\n}\n\n.item.w2 { width: 120px; }\n.item.w3 { width: 180px; }\n.item.w4 { width: 240px; }\n\n.item.h2 { height: 100px; }\n.item.h3 { height: 160px; }\n.item.h4 { height: 220px; }\n.item.h5 { height: 280px; }\n\n.stamp {\n  background: red;\n  opacity: 0.75;\n  position: absolute;\n  border: 1px solid;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/masonry/sandbox/stamps.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>stamps</title>\n\n\n  <link rel=\"stylesheet\" href=\"sandbox.css\" />\n\n  <style>\n\n  #alpha .stamp1 {\n    width: 30%;\n    height: 100px;\n    left: 30%;\n    top: 20px;\n  }\n\n  #alpha .stamp2 {\n    width: 200px;\n    height: 50px;\n    left: 20px;\n    top: 50px;\n  }\n\n  #beta {\n    border-style: solid;\n    border-width: 40px 30px 20px 10px;\n    padding: 10px 20px 30px 40px;\n  }\n\n  #beta .stamp1 {\n    width: 30%;\n    height: 100px;\n    left: 10%;\n    top: 20px;\n  }\n\n  #beta .stamp2 {\n    width: 200px;\n    height: 50px;\n    right: 20px;\n    top: 50px;\n  }\n\n  </style>\n\n</head>\n<body>\n\n  <h1>stamps</h1>\n\n  <div id=\"alpha\" class=\"container\">\n    <div class=\"stamp stamp1\"></div>\n    <div class=\"stamp stamp2\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item h2\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n  <div id=\"beta\" class=\"container\">\n    <div class=\"stamp stamp2\"></div>\n    <div class=\"stamp stamp1\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item h2\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h3\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n    <div class=\"item h4\"></div>\n    <div class=\"item\"></div>\n  </div>\n\n<script src=\"../bower_components/eventEmitter/EventEmitter.js\"></script>\n<script src=\"../bower_components/eventie/eventie.js\"></script>\n<script src=\"../bower_components/doc-ready/doc-ready.js\"></script>\n<script src=\"../bower_components/get-style-property/get-style-property.js\"></script>\n<script src=\"../bower_components/get-size/get-size.js\"></script>\n<script src=\"../bower_components/jquery-bridget/jquery.bridget.js\"></script>\n<script src=\"../bower_components/matches-selector/matches-selector.js\"></script>\n<script src=\"../bower_components/fizzy-ui-utils/utils.js\"></script>\n<script src=\"../bower_components/outlayer/item.js\"></script>\n<script src=\"../bower_components/outlayer/outlayer.js\"></script>\n\n<script src=\"../masonry.js\"></script>\n\n<script>\ndocReady( function() {\n  ( function() {\n    var container = document.querySelector('#alpha');\n    var msnry = new Masonry( container, {\n      itemSelector: '.item',\n      columnWidth: 60,\n      gutter: 10,\n      stamp: '.stamp'\n    });\n\n  })();\n  ( function() {\n    var container = document.querySelector('#beta');\n    var msnry = new Masonry( container, {\n      columnWidth: 60,\n      gutter: 10,\n      stamp: '.stamp'\n    });\n\n  })();\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/matches-selector/matches-selector.js",
    "content": "/**\n * matchesSelector v1.0.3\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n/*global define: false, module: false */\n\n( function( ElemProto ) {\n\n  'use strict';\n\n  var matchesMethod = ( function() {\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0, len = prefixes.length; i < len; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  // ----- match ----- //\n\n  function match( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  }\n\n  // ----- appendToFragment ----- //\n\n  function checkParent( elem ) {\n    // not needed if already has parent\n    if ( elem.parentNode ) {\n      return;\n    }\n    var fragment = document.createDocumentFragment();\n    fragment.appendChild( elem );\n  }\n\n  // ----- query ----- //\n\n  // fall back to using QSA\n  // thx @jonathantneal https://gist.github.com/3062955\n  function query( elem, selector ) {\n    // append to fragment if no parent\n    checkParent( elem );\n\n    // match elem with all selected elems of parent\n    var elems = elem.parentNode.querySelectorAll( selector );\n    for ( var i=0, len = elems.length; i < len; i++ ) {\n      // return true if match\n      if ( elems[i] === elem ) {\n        return true;\n      }\n    }\n    // otherwise return false\n    return false;\n  }\n\n  // ----- matchChild ----- //\n\n  function matchChild( elem, selector ) {\n    checkParent( elem );\n    return match( elem, selector );\n  }\n\n  // ----- matchesSelector ----- //\n\n  var matchesSelector;\n\n  if ( matchesMethod ) {\n    // IE9 supports matchesSelector, but doesn't work on orphaned elems\n    // check for that\n    var div = document.createElement('div');\n    var supportsOrphans = match( div, 'div' );\n    matchesSelector = supportsOrphans ? match : matchChild;\n  } else {\n    matchesSelector = query;\n  }\n\n  // transport\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( function() {\n      return matchesSelector;\n    });\n  } else if ( typeof exports === 'object' ) {\n    module.exports = matchesSelector;\n  }\n  else {\n    // browser global\n    window.matchesSelector = matchesSelector;\n  }\n\n})( Element.prototype );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/mjolnic-bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css",
    "content": "/*!\n * Bootstrap Colorpicker\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n */\n\n.colorpicker-saturation {\n  float: left;\n  width: 100px;\n  height: 100px;\n  cursor: crosshair;\n  background-image: url(\"../img/bootstrap-colorpicker/saturation.png\");\n}\n\n.colorpicker-saturation i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 5px;\n  height: 5px;\n  margin: -4px 0 0 -4px;\n  border: 1px solid #000;\n  -webkit-border-radius: 5px;\n     -moz-border-radius: 5px;\n          border-radius: 5px;\n}\n\n.colorpicker-saturation i b {\n  display: block;\n  width: 5px;\n  height: 5px;\n  border: 1px solid #fff;\n  -webkit-border-radius: 5px;\n     -moz-border-radius: 5px;\n          border-radius: 5px;\n}\n\n.colorpicker-hue,\n.colorpicker-alpha {\n  float: left;\n  width: 15px;\n  height: 100px;\n  margin-bottom: 4px;\n  margin-left: 4px;\n  cursor: row-resize;\n}\n\n.colorpicker-hue i,\n.colorpicker-alpha i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 1px;\n  margin-top: -1px;\n  background: #000;\n  border-top: 1px solid #fff;\n}\n\n.colorpicker-hue {\n  background-image: url(\"../img/bootstrap-colorpicker/hue.png\");\n}\n\n.colorpicker-alpha {\n  display: none;\n  background-image: url(\"../img/bootstrap-colorpicker/alpha.png\");\n}\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n  background-size: contain;\n}\n\n.colorpicker {\n  top: 0;\n  left: 0;\n  z-index: 2500;\n  min-width: 130px;\n  padding: 4px;\n  margin-top: 1px;\n  -webkit-border-radius: 4px;\n     -moz-border-radius: 4px;\n          border-radius: 4px;\n  *zoom: 1;\n}\n\n.colorpicker:before,\n.colorpicker:after {\n  display: table;\n  line-height: 0;\n  content: \"\";\n}\n\n.colorpicker:after {\n  clear: both;\n}\n\n.colorpicker:before {\n  position: absolute;\n  top: -7px;\n  left: 6px;\n  display: inline-block;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-left: 7px solid transparent;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  content: '';\n}\n\n.colorpicker:after {\n  position: absolute;\n  top: -6px;\n  left: 7px;\n  display: inline-block;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #ffffff;\n  border-left: 6px solid transparent;\n  content: '';\n}\n\n.colorpicker div {\n  position: relative;\n}\n\n.colorpicker.colorpicker-with-alpha {\n  min-width: 140px;\n}\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n  display: block;\n}\n\n.colorpicker-color {\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n  background-image: url(\"../img/bootstrap-colorpicker/alpha.png\");\n  background-position: 0 100%;\n}\n\n.colorpicker-color div {\n  height: 10px;\n}\n\n.colorpicker-selectors {\n  display: none;\n  height: 10px;\n  margin-top: 5px;\n  clear: both;\n}\n\n.colorpicker-selectors i {\n  float: left;\n  width: 10px;\n  height: 10px;\n  cursor: pointer;\n}\n\n.colorpicker-selectors i + i {\n  margin-left: 3px;\n}\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  vertical-align: text-top;\n  cursor: pointer;\n}\n\n.colorpicker.colorpicker-inline {\n  position: relative;\n  z-index: auto;\n  display: inline-block;\n  float: none;\n}\n\n.colorpicker.colorpicker-horizontal {\n  width: 110px;\n  height: auto;\n  min-width: 110px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n  margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-color {\n  width: 100px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  float: left;\n  width: 100px;\n  height: 15px;\n  margin-bottom: 4px;\n  margin-left: 0;\n  cursor: col-resize;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue i,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha i {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 1px;\n  height: 15px;\n  margin-top: 0;\n  background: #ffffff;\n  border: none;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n  background-image: url(\"../img/bootstrap-colorpicker/hue-horizontal.png\");\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n  background-image: url(\"../img/bootstrap-colorpicker/alpha-horizontal.png\");\n}\n\n.colorpicker.colorpicker-hidden {\n  display: none;\n}\n\n.colorpicker.colorpicker-visible {\n  display: block;\n}\n\n.colorpicker-inline.colorpicker-visible {\n  display: inline-block;\n}\n\n.colorpicker-right:before {\n  right: 6px;\n  left: auto;\n}\n\n.colorpicker-right:after {\n  right: 7px;\n  left: auto;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/mjolnic-bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js",
    "content": "/*!\n * Bootstrap Colorpicker\n * http://mjolnic.github.io/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n * @todo Update DOCS\n */\n\n(function(factory) {\n    \"use strict\";\n    if (typeof exports === 'object') {\n      module.exports = factory(window.jQuery);\n    } else if (typeof define === 'function' && define.amd) {\n      define(['jquery'], factory);\n    } else if (window.jQuery && !window.jQuery.fn.colorpicker) {\n      factory(window.jQuery);\n    }\n  }\n  (function($) {\n    'use strict';\n\n    // Color object\n    var Color = function(val, customColors) {\n      this.value = {\n        h: 0,\n        s: 0,\n        b: 0,\n        a: 1\n      };\n      this.origFormat = null; // original string format\n      if (customColors) {\n        $.extend(this.colors, customColors);\n      }\n      if (val) {\n        if (val.toLowerCase !== undefined) {\n          // cast to string\n          val = val + '';\n          this.setColor(val);\n        } else if (val.h !== undefined) {\n          this.value = val;\n        }\n      }\n    };\n\n    Color.prototype = {\n      constructor: Color,\n      // 140 predefined colors from the HTML Colors spec\n      colors: {\n        \"aliceblue\": \"#f0f8ff\",\n        \"antiquewhite\": \"#faebd7\",\n        \"aqua\": \"#00ffff\",\n        \"aquamarine\": \"#7fffd4\",\n        \"azure\": \"#f0ffff\",\n        \"beige\": \"#f5f5dc\",\n        \"bisque\": \"#ffe4c4\",\n        \"black\": \"#000000\",\n        \"blanchedalmond\": \"#ffebcd\",\n        \"blue\": \"#0000ff\",\n        \"blueviolet\": \"#8a2be2\",\n        \"brown\": \"#a52a2a\",\n        \"burlywood\": \"#deb887\",\n        \"cadetblue\": \"#5f9ea0\",\n        \"chartreuse\": \"#7fff00\",\n        \"chocolate\": \"#d2691e\",\n        \"coral\": \"#ff7f50\",\n        \"cornflowerblue\": \"#6495ed\",\n        \"cornsilk\": \"#fff8dc\",\n        \"crimson\": \"#dc143c\",\n        \"cyan\": \"#00ffff\",\n        \"darkblue\": \"#00008b\",\n        \"darkcyan\": \"#008b8b\",\n        \"darkgoldenrod\": \"#b8860b\",\n        \"darkgray\": \"#a9a9a9\",\n        \"darkgreen\": \"#006400\",\n        \"darkkhaki\": \"#bdb76b\",\n        \"darkmagenta\": \"#8b008b\",\n        \"darkolivegreen\": \"#556b2f\",\n        \"darkorange\": \"#ff8c00\",\n        \"darkorchid\": \"#9932cc\",\n        \"darkred\": \"#8b0000\",\n        \"darksalmon\": \"#e9967a\",\n        \"darkseagreen\": \"#8fbc8f\",\n        \"darkslateblue\": \"#483d8b\",\n        \"darkslategray\": \"#2f4f4f\",\n        \"darkturquoise\": \"#00ced1\",\n        \"darkviolet\": \"#9400d3\",\n        \"deeppink\": \"#ff1493\",\n        \"deepskyblue\": \"#00bfff\",\n        \"dimgray\": \"#696969\",\n        \"dodgerblue\": \"#1e90ff\",\n        \"firebrick\": \"#b22222\",\n        \"floralwhite\": \"#fffaf0\",\n        \"forestgreen\": \"#228b22\",\n        \"fuchsia\": \"#ff00ff\",\n        \"gainsboro\": \"#dcdcdc\",\n        \"ghostwhite\": \"#f8f8ff\",\n        \"gold\": \"#ffd700\",\n        \"goldenrod\": \"#daa520\",\n        \"gray\": \"#808080\",\n        \"green\": \"#008000\",\n        \"greenyellow\": \"#adff2f\",\n        \"honeydew\": \"#f0fff0\",\n        \"hotpink\": \"#ff69b4\",\n        \"indianred\": \"#cd5c5c\",\n        \"indigo\": \"#4b0082\",\n        \"ivory\": \"#fffff0\",\n        \"khaki\": \"#f0e68c\",\n        \"lavender\": \"#e6e6fa\",\n        \"lavenderblush\": \"#fff0f5\",\n        \"lawngreen\": \"#7cfc00\",\n        \"lemonchiffon\": \"#fffacd\",\n        \"lightblue\": \"#add8e6\",\n        \"lightcoral\": \"#f08080\",\n        \"lightcyan\": \"#e0ffff\",\n        \"lightgoldenrodyellow\": \"#fafad2\",\n        \"lightgrey\": \"#d3d3d3\",\n        \"lightgreen\": \"#90ee90\",\n        \"lightpink\": \"#ffb6c1\",\n        \"lightsalmon\": \"#ffa07a\",\n        \"lightseagreen\": \"#20b2aa\",\n        \"lightskyblue\": \"#87cefa\",\n        \"lightslategray\": \"#778899\",\n        \"lightsteelblue\": \"#b0c4de\",\n        \"lightyellow\": \"#ffffe0\",\n        \"lime\": \"#00ff00\",\n        \"limegreen\": \"#32cd32\",\n        \"linen\": \"#faf0e6\",\n        \"magenta\": \"#ff00ff\",\n        \"maroon\": \"#800000\",\n        \"mediumaquamarine\": \"#66cdaa\",\n        \"mediumblue\": \"#0000cd\",\n        \"mediumorchid\": \"#ba55d3\",\n        \"mediumpurple\": \"#9370d8\",\n        \"mediumseagreen\": \"#3cb371\",\n        \"mediumslateblue\": \"#7b68ee\",\n        \"mediumspringgreen\": \"#00fa9a\",\n        \"mediumturquoise\": \"#48d1cc\",\n        \"mediumvioletred\": \"#c71585\",\n        \"midnightblue\": \"#191970\",\n        \"mintcream\": \"#f5fffa\",\n        \"mistyrose\": \"#ffe4e1\",\n        \"moccasin\": \"#ffe4b5\",\n        \"navajowhite\": \"#ffdead\",\n        \"navy\": \"#000080\",\n        \"oldlace\": \"#fdf5e6\",\n        \"olive\": \"#808000\",\n        \"olivedrab\": \"#6b8e23\",\n        \"orange\": \"#ffa500\",\n        \"orangered\": \"#ff4500\",\n        \"orchid\": \"#da70d6\",\n        \"palegoldenrod\": \"#eee8aa\",\n        \"palegreen\": \"#98fb98\",\n        \"paleturquoise\": \"#afeeee\",\n        \"palevioletred\": \"#d87093\",\n        \"papayawhip\": \"#ffefd5\",\n        \"peachpuff\": \"#ffdab9\",\n        \"peru\": \"#cd853f\",\n        \"pink\": \"#ffc0cb\",\n        \"plum\": \"#dda0dd\",\n        \"powderblue\": \"#b0e0e6\",\n        \"purple\": \"#800080\",\n        \"red\": \"#ff0000\",\n        \"rosybrown\": \"#bc8f8f\",\n        \"royalblue\": \"#4169e1\",\n        \"saddlebrown\": \"#8b4513\",\n        \"salmon\": \"#fa8072\",\n        \"sandybrown\": \"#f4a460\",\n        \"seagreen\": \"#2e8b57\",\n        \"seashell\": \"#fff5ee\",\n        \"sienna\": \"#a0522d\",\n        \"silver\": \"#c0c0c0\",\n        \"skyblue\": \"#87ceeb\",\n        \"slateblue\": \"#6a5acd\",\n        \"slategray\": \"#708090\",\n        \"snow\": \"#fffafa\",\n        \"springgreen\": \"#00ff7f\",\n        \"steelblue\": \"#4682b4\",\n        \"tan\": \"#d2b48c\",\n        \"teal\": \"#008080\",\n        \"thistle\": \"#d8bfd8\",\n        \"tomato\": \"#ff6347\",\n        \"turquoise\": \"#40e0d0\",\n        \"violet\": \"#ee82ee\",\n        \"wheat\": \"#f5deb3\",\n        \"white\": \"#ffffff\",\n        \"whitesmoke\": \"#f5f5f5\",\n        \"yellow\": \"#ffff00\",\n        \"yellowgreen\": \"#9acd32\",\n        \"transparent\": \"transparent\"\n      },\n      _sanitizeNumber: function(val) {\n        if (typeof val === 'number') {\n          return val;\n        }\n        if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {\n          return 1;\n        }\n        if (val.toLowerCase !== undefined) {\n          return parseFloat(val);\n        }\n        return 1;\n      },\n      isTransparent: function(strVal) {\n        if (!strVal) {\n          return false;\n        }\n        strVal = strVal.toLowerCase().trim();\n        return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\\(0,0,0,0?\\.?0\\)/));\n      },\n      rgbaIsTransparent: function(rgba) {\n        return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));\n      },\n      //parse a string to HSB\n      setColor: function(strVal) {\n        strVal = strVal.toLowerCase().trim();\n        if (strVal) {\n          if (this.isTransparent(strVal)) {\n            this.value = {\n              h: 0,\n              s: 0,\n              b: 0,\n              a: 0\n            };\n          } else {\n            this.value = this.stringToHSB(strVal) || {\n              h: 0,\n              s: 0,\n              b: 0,\n              a: 1\n            }; // if parser fails, defaults to black\n          }\n        }\n      },\n      stringToHSB: function(strVal) {\n        strVal = strVal.toLowerCase();\n        var alias;\n        if (typeof this.colors[strVal] !== 'undefined') {\n          strVal = this.colors[strVal];\n          alias = 'alias';\n        }\n        var that = this,\n          result = false;\n        $.each(this.stringParsers, function(i, parser) {\n          var match = parser.re.exec(strVal),\n            values = match && parser.parse.apply(that, [match]),\n            format = alias || parser.format || 'rgba';\n          if (values) {\n            if (format.match(/hsla?/)) {\n              result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));\n            } else {\n              result = that.RGBtoHSB.apply(that, values);\n            }\n            that.origFormat = format;\n            return false;\n          }\n          return true;\n        });\n        return result;\n      },\n      setHue: function(h) {\n        this.value.h = 1 - h;\n      },\n      setSaturation: function(s) {\n        this.value.s = s;\n      },\n      setBrightness: function(b) {\n        this.value.b = 1 - b;\n      },\n      setAlpha: function(a) {\n        this.value.a = parseInt((1 - a) * 100, 10) / 100;\n      },\n      toRGB: function(h, s, b, a) {\n        if (!h) {\n          h = this.value.h;\n          s = this.value.s;\n          b = this.value.b;\n        }\n        h *= 360;\n        var R, G, B, X, C;\n        h = (h % 360) / 60;\n        C = b * s;\n        X = C * (1 - Math.abs(h % 2 - 1));\n        R = G = B = b - C;\n\n        h = ~~h;\n        R += [C, X, 0, 0, X, C][h];\n        G += [X, C, C, X, 0, 0][h];\n        B += [0, 0, X, C, C, X][h];\n        return {\n          r: Math.round(R * 255),\n          g: Math.round(G * 255),\n          b: Math.round(B * 255),\n          a: a || this.value.a\n        };\n      },\n      toHex: function(h, s, b, a) {\n        var rgb = this.toRGB(h, s, b, a);\n        if (this.rgbaIsTransparent(rgb)) {\n          return 'transparent';\n        }\n        return '#' + ((1 << 24) | (parseInt(rgb.r) << 16) | (parseInt(rgb.g) << 8) | parseInt(rgb.b)).toString(16).substr(1);\n      },\n      toHSL: function(h, s, b, a) {\n        h = h || this.value.h;\n        s = s || this.value.s;\n        b = b || this.value.b;\n        a = a || this.value.a;\n\n        var H = h,\n          L = (2 - s) * b,\n          S = s * b;\n        if (L > 0 && L <= 1) {\n          S /= L;\n        } else {\n          S /= 2 - L;\n        }\n        L /= 2;\n        if (S > 1) {\n          S = 1;\n        }\n        return {\n          h: isNaN(H) ? 0 : H,\n          s: isNaN(S) ? 0 : S,\n          l: isNaN(L) ? 0 : L,\n          a: isNaN(a) ? 0 : a\n        };\n      },\n      toAlias: function(r, g, b, a) {\n        var rgb = this.toHex(r, g, b, a);\n        for (var alias in this.colors) {\n          if (this.colors[alias] === rgb) {\n            return alias;\n          }\n        }\n        return false;\n      },\n      RGBtoHSB: function(r, g, b, a) {\n        r /= 255;\n        g /= 255;\n        b /= 255;\n\n        var H, S, V, C;\n        V = Math.max(r, g, b);\n        C = V - Math.min(r, g, b);\n        H = (C === 0 ? null :\n          V === r ? (g - b) / C :\n          V === g ? (b - r) / C + 2 :\n          (r - g) / C + 4\n        );\n        H = ((H + 360) % 6) * 60 / 360;\n        S = C === 0 ? 0 : C / V;\n        return {\n          h: this._sanitizeNumber(H),\n          s: S,\n          b: V,\n          a: this._sanitizeNumber(a)\n        };\n      },\n      HueToRGB: function(p, q, h) {\n        if (h < 0) {\n          h += 1;\n        } else if (h > 1) {\n          h -= 1;\n        }\n        if ((h * 6) < 1) {\n          return p + (q - p) * h * 6;\n        } else if ((h * 2) < 1) {\n          return q;\n        } else if ((h * 3) < 2) {\n          return p + (q - p) * ((2 / 3) - h) * 6;\n        } else {\n          return p;\n        }\n      },\n      HSLtoRGB: function(h, s, l, a) {\n        if (s < 0) {\n          s = 0;\n        }\n        var q;\n        if (l <= 0.5) {\n          q = l * (1 + s);\n        } else {\n          q = l + s - (l * s);\n        }\n\n        var p = 2 * l - q;\n\n        var tr = h + (1 / 3);\n        var tg = h;\n        var tb = h - (1 / 3);\n\n        var r = Math.round(this.HueToRGB(p, q, tr) * 255);\n        var g = Math.round(this.HueToRGB(p, q, tg) * 255);\n        var b = Math.round(this.HueToRGB(p, q, tb) * 255);\n        return [r, g, b, this._sanitizeNumber(a)];\n      },\n      toString: function(format) {\n        format = format || 'rgba';\n        var c = false;\n        switch (format) {\n          case 'rgb':\n            {\n              c = this.toRGB();\n              if (this.rgbaIsTransparent(c)) {\n                return 'transparent';\n              }\n              return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';\n            }\n            break;\n          case 'rgba':\n            {\n              c = this.toRGB();\n              return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';\n            }\n            break;\n          case 'hsl':\n            {\n              c = this.toHSL();\n              return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';\n            }\n            break;\n          case 'hsla':\n            {\n              c = this.toHSL();\n              return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';\n            }\n            break;\n          case 'hex':\n            {\n              return this.toHex();\n            }\n            break;\n          case 'alias':\n            return this.toAlias() || this.toHex();\n          default:\n            {\n              return c;\n            }\n            break;\n        }\n      },\n      // a set of RE's that can match strings and generate color tuples.\n      // from John Resig color plugin\n      // https://github.com/jquery/jquery-color/\n      stringParsers: [{\n        re: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*?\\)/,\n        format: 'rgb',\n        parse: function(execResult) {\n          return [\n            execResult[1],\n            execResult[2],\n            execResult[3],\n            1\n          ];\n        }\n      }, {\n        re: /rgb\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*?\\)/,\n        format: 'rgb',\n        parse: function(execResult) {\n          return [\n            2.55 * execResult[1],\n            2.55 * execResult[2],\n            2.55 * execResult[3],\n            1\n          ];\n        }\n      }, {\n        re: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'rgba',\n        parse: function(execResult) {\n          return [\n            execResult[1],\n            execResult[2],\n            execResult[3],\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /rgba\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'rgba',\n        parse: function(execResult) {\n          return [\n            2.55 * execResult[1],\n            2.55 * execResult[2],\n            2.55 * execResult[3],\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /hsl\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*?\\)/,\n        format: 'hsl',\n        parse: function(execResult) {\n          return [\n            execResult[1] / 360,\n            execResult[2] / 100,\n            execResult[3] / 100,\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /hsla\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n        format: 'hsla',\n        parse: function(execResult) {\n          return [\n            execResult[1] / 360,\n            execResult[2] / 100,\n            execResult[3] / 100,\n            execResult[4]\n          ];\n        }\n      }, {\n        re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,\n        format: 'hex',\n        parse: function(execResult) {\n          return [\n            parseInt(execResult[1], 16),\n            parseInt(execResult[2], 16),\n            parseInt(execResult[3], 16),\n            1\n          ];\n        }\n      }, {\n        re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,\n        format: 'hex',\n        parse: function(execResult) {\n          return [\n            parseInt(execResult[1] + execResult[1], 16),\n            parseInt(execResult[2] + execResult[2], 16),\n            parseInt(execResult[3] + execResult[3], 16),\n            1\n          ];\n        }\n      }],\n      colorNameToHex: function(name) {\n        if (typeof this.colors[name.toLowerCase()] !== 'undefined') {\n          return this.colors[name.toLowerCase()];\n        }\n        return false;\n      }\n    };\n\n\n    var defaults = {\n      horizontal: false, // horizontal mode layout ?\n      inline: false, //forces to show the colorpicker as an inline element\n      color: false, //forces a color\n      format: false, //forces a format\n      input: 'input', // children input selector\n      container: false, // container selector\n      component: '.add-on, .input-group-addon', // children component selector\n      sliders: {\n        saturation: {\n          maxLeft: 100,\n          maxTop: 100,\n          callLeft: 'setSaturation',\n          callTop: 'setBrightness'\n        },\n        hue: {\n          maxLeft: 0,\n          maxTop: 100,\n          callLeft: false,\n          callTop: 'setHue'\n        },\n        alpha: {\n          maxLeft: 0,\n          maxTop: 100,\n          callLeft: false,\n          callTop: 'setAlpha'\n        }\n      },\n      slidersHorz: {\n        saturation: {\n          maxLeft: 100,\n          maxTop: 100,\n          callLeft: 'setSaturation',\n          callTop: 'setBrightness'\n        },\n        hue: {\n          maxLeft: 100,\n          maxTop: 0,\n          callLeft: 'setHue',\n          callTop: false\n        },\n        alpha: {\n          maxLeft: 100,\n          maxTop: 0,\n          callLeft: 'setAlpha',\n          callTop: false\n        }\n      },\n      template: '<div class=\"colorpicker dropdown-menu\">' +\n        '<div class=\"colorpicker-saturation\"><i><b></b></i></div>' +\n        '<div class=\"colorpicker-hue\"><i></i></div>' +\n        '<div class=\"colorpicker-alpha\"><i></i></div>' +\n        '<div class=\"colorpicker-color\"><div /></div>' +\n        '<div class=\"colorpicker-selectors\"></div>' +\n        '</div>',\n      align: 'right',\n      customClass: null,\n      colorSelectors: null\n    };\n\n    var Colorpicker = function(element, options) {\n      this.element = $(element).addClass('colorpicker-element');\n      this.options = $.extend(true, {}, defaults, this.element.data(), options);\n      this.component = this.options.component;\n      this.component = (this.component !== false) ? this.element.find(this.component) : false;\n      if (this.component && (this.component.length === 0)) {\n        this.component = false;\n      }\n      this.container = (this.options.container === true) ? this.element : this.options.container;\n      this.container = (this.container !== false) ? $(this.container) : false;\n\n      // Is the element an input? Should we search inside for any input?\n      this.input = this.element.is('input') ? this.element : (this.options.input ?\n        this.element.find(this.options.input) : false);\n      if (this.input && (this.input.length === 0)) {\n        this.input = false;\n      }\n      // Set HSB color\n      this.color = new Color(this.options.color !== false ? this.options.color : this.getValue(), this.options.colorSelectors);\n      this.format = this.options.format !== false ? this.options.format : this.color.origFormat;\n\n      // Setup picker\n      this.picker = $(this.options.template);\n      if (this.options.customClass) {\n        this.picker.addClass(this.options.customClass);\n      }\n      if (this.options.inline) {\n        this.picker.addClass('colorpicker-inline colorpicker-visible');\n      } else {\n        this.picker.addClass('colorpicker-hidden');\n      }\n      if (this.options.horizontal) {\n        this.picker.addClass('colorpicker-horizontal');\n      }\n      if (this.format === 'rgba' || this.format === 'hsla' || this.options.format === false) {\n        this.picker.addClass('colorpicker-with-alpha');\n      }\n      if (this.options.align === 'right') {\n        this.picker.addClass('colorpicker-right');\n      }\n      if (this.options.colorSelectors) {\n        var colorpicker = this;\n        $.each(this.options.colorSelectors, function(name, color) {\n          var $btn = $('<i />').css('background-color', color).data('class', name);\n          $btn.click(function() {\n            colorpicker.setValue($(this).css('background-color'));\n          });\n          colorpicker.picker.find('.colorpicker-selectors').append($btn);\n        });\n        this.picker.find('.colorpicker-selectors').show();\n      }\n      this.picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));\n      this.picker.appendTo(this.container ? this.container : $('body'));\n\n      // Bind events\n      if (this.input !== false) {\n        this.input.on({\n          'keyup.colorpicker': $.proxy(this.keyup, this)\n        });\n        this.input.on({\n          'change.colorpicker': $.proxy(this.change, this)\n        });\n        if (this.component === false) {\n          this.element.on({\n            'focus.colorpicker': $.proxy(this.show, this)\n          });\n        }\n        if (this.options.inline === false) {\n          this.element.on({\n            'focusout.colorpicker': $.proxy(this.hide, this)\n          });\n        }\n      }\n\n      if (this.component !== false) {\n        this.component.on({\n          'click.colorpicker': $.proxy(this.show, this)\n        });\n      }\n\n      if ((this.input === false) && (this.component === false)) {\n        this.element.on({\n          'click.colorpicker': $.proxy(this.show, this)\n        });\n      }\n\n      // for HTML5 input[type='color']\n      if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {\n\n        this.input.on({\n          'click.colorpicker': $.proxy(this.show, this),\n          'focus.colorpicker': $.proxy(this.show, this)\n        });\n      }\n      this.update();\n\n      $($.proxy(function() {\n        this.element.trigger('create');\n      }, this));\n    };\n\n    Colorpicker.Color = Color;\n\n    Colorpicker.prototype = {\n      constructor: Colorpicker,\n      destroy: function() {\n        this.picker.remove();\n        this.element.removeData('colorpicker').off('.colorpicker');\n        if (this.input !== false) {\n          this.input.off('.colorpicker');\n        }\n        if (this.component !== false) {\n          this.component.off('.colorpicker');\n        }\n        this.element.removeClass('colorpicker-element');\n        this.element.trigger({\n          type: 'destroy'\n        });\n      },\n      reposition: function() {\n        if (this.options.inline !== false || this.options.container) {\n          return false;\n        }\n        var type = this.container && this.container[0] !== document.body ? 'position' : 'offset';\n        var element = this.component || this.element;\n        var offset = element[type]();\n        if (this.options.align === 'right') {\n          offset.left -= this.picker.outerWidth() - element.outerWidth();\n        }\n        this.picker.css({\n          top: offset.top + element.outerHeight(),\n          left: offset.left\n        });\n      },\n      show: function(e) {\n        if (this.isDisabled()) {\n          return false;\n        }\n        this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');\n        this.reposition();\n        $(window).on('resize.colorpicker', $.proxy(this.reposition, this));\n        if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {\n          if (e.stopPropagation && e.preventDefault) {\n            e.stopPropagation();\n            e.preventDefault();\n          }\n        }\n        if (this.options.inline === false) {\n          $(window.document).on({\n            'mousedown.colorpicker': $.proxy(this.hide, this)\n          });\n        }\n        this.element.trigger({\n          type: 'showPicker',\n          color: this.color\n        });\n      },\n      hide: function() {\n        this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');\n        $(window).off('resize.colorpicker', this.reposition);\n        $(document).off({\n          'mousedown.colorpicker': this.hide\n        });\n        this.update();\n        this.element.trigger({\n          type: 'hidePicker',\n          color: this.color\n        });\n      },\n      updateData: function(val) {\n        val = val || this.color.toString(this.format);\n        this.element.data('color', val);\n        return val;\n      },\n      updateInput: function(val) {\n        val = val || this.color.toString(this.format);\n        if (this.input !== false) {\n          if (this.options.colorSelectors) {\n            var color = new Color(val, this.options.colorSelectors);\n            var alias = color.toAlias();\n            if (typeof this.options.colorSelectors[alias] !== 'undefined') {\n              val = alias;\n            }\n          }\n          this.input.prop('value', val);\n        }\n        return val;\n      },\n      updatePicker: function(val) {\n        if (val !== undefined) {\n          this.color = new Color(val, this.options.colorSelectors);\n        }\n        var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;\n        var icns = this.picker.find('i');\n        if (icns.length === 0) {\n          return;\n        }\n        if (this.options.horizontal === false) {\n          sl = this.options.sliders;\n          icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()\n            .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));\n        } else {\n          sl = this.options.slidersHorz;\n          icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()\n            .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));\n        }\n        icns.eq(0).css({\n          'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,\n          'left': this.color.value.s * sl.saturation.maxLeft\n        });\n        this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.toHex(this.color.value.h, 1, 1, 1));\n        this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toHex());\n        this.picker.find('.colorpicker-color, .colorpicker-color div').css('backgroundColor', this.color.toString(this.format));\n        return val;\n      },\n      updateComponent: function(val) {\n        val = val || this.color.toString(this.format);\n        if (this.component !== false) {\n          var icn = this.component.find('i').eq(0);\n          if (icn.length > 0) {\n            icn.css({\n              'backgroundColor': val\n            });\n          } else {\n            this.component.css({\n              'backgroundColor': val\n            });\n          }\n        }\n        return val;\n      },\n      update: function(force) {\n        var val;\n        if ((this.getValue(false) !== false) || (force === true)) {\n          // Update input/data only if the current value is not empty\n          val = this.updateComponent();\n          this.updateInput(val);\n          this.updateData(val);\n          this.updatePicker(); // only update picker if value is not empty\n        }\n        return val;\n\n      },\n      setValue: function(val) { // set color manually\n        this.color = new Color(val, this.options.colorSelectors);\n        this.update(true);\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color,\n          value: val\n        });\n      },\n      getValue: function(defaultValue) {\n        defaultValue = (defaultValue === undefined) ? '#000000' : defaultValue;\n        var val;\n        if (this.hasInput()) {\n          val = this.input.val();\n        } else {\n          val = this.element.data('color');\n        }\n        if ((val === undefined) || (val === '') || (val === null)) {\n          // if not defined or empty, return default\n          val = defaultValue;\n        }\n        return val;\n      },\n      hasInput: function() {\n        return (this.input !== false);\n      },\n      isDisabled: function() {\n        if (this.hasInput()) {\n          return (this.input.prop('disabled') === true);\n        }\n        return false;\n      },\n      disable: function() {\n        if (this.hasInput()) {\n          this.input.prop('disabled', true);\n          this.element.trigger({\n            type: 'disable',\n            color: this.color,\n            value: this.getValue()\n          });\n          return true;\n        }\n        return false;\n      },\n      enable: function() {\n        if (this.hasInput()) {\n          this.input.prop('disabled', false);\n          this.element.trigger({\n            type: 'enable',\n            color: this.color,\n            value: this.getValue()\n          });\n          return true;\n        }\n        return false;\n      },\n      currentSlider: null,\n      mousePointer: {\n        left: 0,\n        top: 0\n      },\n      mousedown: function(e) {\n        if (!e.pageX && !e.pageY && e.originalEvent) {\n          e.pageX = e.originalEvent.touches[0].pageX;\n          e.pageY = e.originalEvent.touches[0].pageY;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n\n        var target = $(e.target);\n\n        //detect the slider and set the limits and callbacks\n        var zone = target.closest('div');\n        var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;\n        if (!zone.is('.colorpicker')) {\n          if (zone.is('.colorpicker-saturation')) {\n            this.currentSlider = $.extend({}, sl.saturation);\n          } else if (zone.is('.colorpicker-hue')) {\n            this.currentSlider = $.extend({}, sl.hue);\n          } else if (zone.is('.colorpicker-alpha')) {\n            this.currentSlider = $.extend({}, sl.alpha);\n          } else {\n            return false;\n          }\n          var offset = zone.offset();\n          //reference to guide's style\n          this.currentSlider.guide = zone.find('i')[0].style;\n          this.currentSlider.left = e.pageX - offset.left;\n          this.currentSlider.top = e.pageY - offset.top;\n          this.mousePointer = {\n            left: e.pageX,\n            top: e.pageY\n          };\n          //trigger mousemove to move the guide to the current position\n          $(document).on({\n            'mousemove.colorpicker': $.proxy(this.mousemove, this),\n            'touchmove.colorpicker': $.proxy(this.mousemove, this),\n            'mouseup.colorpicker': $.proxy(this.mouseup, this),\n            'touchend.colorpicker': $.proxy(this.mouseup, this)\n          }).trigger('mousemove');\n        }\n        return false;\n      },\n      mousemove: function(e) {\n        if (!e.pageX && !e.pageY && e.originalEvent) {\n          e.pageX = e.originalEvent.touches[0].pageX;\n          e.pageY = e.originalEvent.touches[0].pageY;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n        var left = Math.max(\n          0,\n          Math.min(\n            this.currentSlider.maxLeft,\n            this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)\n          )\n        );\n        var top = Math.max(\n          0,\n          Math.min(\n            this.currentSlider.maxTop,\n            this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)\n          )\n        );\n        this.currentSlider.guide.left = left + 'px';\n        this.currentSlider.guide.top = top + 'px';\n        if (this.currentSlider.callLeft) {\n          this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);\n        }\n        if (this.currentSlider.callTop) {\n          this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);\n        }\n        // Change format dynamically\n        // Only occurs if user choose the dynamic format by\n        // setting option format to false\n        if (this.currentSlider.callTop === 'setAlpha' && this.options.format === false) {\n\n          // Converting from hex / rgb to rgba\n          if (this.color.value.a !== 1) {\n            this.format = 'rgba';\n            this.color.origFormat = 'rgba';\n          }\n\n          // Converting from rgba to hex\n          else {\n            this.format = 'hex';\n            this.color.origFormat = 'hex';\n          }\n        }\n        this.update(true);\n\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color\n        });\n        return false;\n      },\n      mouseup: function(e) {\n        e.stopPropagation();\n        e.preventDefault();\n        $(document).off({\n          'mousemove.colorpicker': this.mousemove,\n          'touchmove.colorpicker': this.mousemove,\n          'mouseup.colorpicker': this.mouseup,\n          'touchend.colorpicker': this.mouseup\n        });\n        return false;\n      },\n      change: function(e) {\n        this.keyup(e);\n      },\n      keyup: function(e) {\n        if ((e.keyCode === 38)) {\n          if (this.color.value.a < 1) {\n            this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;\n          }\n          this.update(true);\n        } else if ((e.keyCode === 40)) {\n          if (this.color.value.a > 0) {\n            this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;\n          }\n          this.update(true);\n        } else {\n          this.color = new Color(this.input.val(), this.options.colorSelectors);\n          // Change format dynamically\n          // Only occurs if user choose the dynamic format by\n          // setting option format to false\n          if (this.color.origFormat && this.options.format === false) {\n            this.format = this.color.origFormat;\n          }\n          if (this.getValue(false) !== false) {\n            this.updateData();\n            this.updateComponent();\n            this.updatePicker();\n          }\n        }\n        this.element.trigger({\n          type: 'changeColor',\n          color: this.color,\n          value: this.input.val()\n        });\n      }\n    };\n\n    $.colorpicker = Colorpicker;\n\n    $.fn.colorpicker = function(option) {\n      var pickerArgs = arguments,\n        rv;\n\n      var $returnValue = this.each(function() {\n        var $this = $(this),\n          inst = $this.data('colorpicker'),\n          options = ((typeof option === 'object') ? option : {});\n        if ((!inst) && (typeof option !== 'string')) {\n          $this.data('colorpicker', new Colorpicker(this, options));\n        } else {\n          if (typeof option === 'string') {\n            rv = inst[option].apply(inst, Array.prototype.slice.call(pickerArgs, 1));\n          }\n        }\n      });\n      if (option === 'getValue') {\n        return rv;\n      }\n      return $returnValue;\n    };\n\n    $.fn.colorpicker.constructor = Colorpicker;\n\n  }));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/mocha/mocha.css",
    "content": "@charset \"utf-8\";\n\nbody {\n  margin:0;\n}\n\n#mocha {\n  font: 20px/1.5 \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  margin: 60px 50px;\n}\n\n#mocha ul,\n#mocha li {\n  margin: 0;\n  padding: 0;\n}\n\n#mocha ul {\n  list-style: none;\n}\n\n#mocha h1,\n#mocha h2 {\n  margin: 0;\n}\n\n#mocha h1 {\n  margin-top: 15px;\n  font-size: 1em;\n  font-weight: 200;\n}\n\n#mocha h1 a {\n  text-decoration: none;\n  color: inherit;\n}\n\n#mocha h1 a:hover {\n  text-decoration: underline;\n}\n\n#mocha .suite .suite h1 {\n  margin-top: 0;\n  font-size: .8em;\n}\n\n#mocha .hidden {\n  display: none;\n}\n\n#mocha h2 {\n  font-size: 12px;\n  font-weight: normal;\n  cursor: pointer;\n}\n\n#mocha .suite {\n  margin-left: 15px;\n}\n\n#mocha .test {\n  margin-left: 15px;\n  overflow: hidden;\n}\n\n#mocha .test.pending:hover h2::after {\n  content: '(pending)';\n  font-family: arial, sans-serif;\n}\n\n#mocha .test.pass.medium .duration {\n  background: #c09853;\n}\n\n#mocha .test.pass.slow .duration {\n  background: #b94a48;\n}\n\n#mocha .test.pass::before {\n  content: '✓';\n  font-size: 12px;\n  display: block;\n  float: left;\n  margin-right: 5px;\n  color: #00d6b2;\n}\n\n#mocha .test.pass .duration {\n  font-size: 9px;\n  margin-left: 5px;\n  padding: 2px 5px;\n  color: #fff;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);\n  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.2);\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  -ms-border-radius: 5px;\n  -o-border-radius: 5px;\n  border-radius: 5px;\n}\n\n#mocha .test.pass.fast .duration {\n  display: none;\n}\n\n#mocha .test.pending {\n  color: #0b97c4;\n}\n\n#mocha .test.pending::before {\n  content: '◦';\n  color: #0b97c4;\n}\n\n#mocha .test.fail {\n  color: #c00;\n}\n\n#mocha .test.fail pre {\n  color: black;\n}\n\n#mocha .test.fail::before {\n  content: '✖';\n  font-size: 12px;\n  display: block;\n  float: left;\n  margin-right: 5px;\n  color: #c00;\n}\n\n#mocha .test pre.error {\n  color: #c00;\n  max-height: 300px;\n  overflow: auto;\n}\n\n/**\n * (1): approximate for browsers not supporting calc\n * (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border)\n *      ^^ seriously\n */\n#mocha .test pre {\n  display: block;\n  float: left;\n  clear: left;\n  font: 12px/1.5 monaco, monospace;\n  margin: 5px;\n  padding: 15px;\n  border: 1px solid #eee;\n  max-width: 85%; /*(1)*/\n  max-width: calc(100% - 42px); /*(2)*/\n  word-wrap: break-word;\n  border-bottom-color: #ddd;\n  -webkit-border-radius: 3px;\n  -webkit-box-shadow: 0 1px 3px #eee;\n  -moz-border-radius: 3px;\n  -moz-box-shadow: 0 1px 3px #eee;\n  border-radius: 3px;\n}\n\n#mocha .test h2 {\n  position: relative;\n}\n\n#mocha .test a.replay {\n  position: absolute;\n  top: 3px;\n  right: 0;\n  text-decoration: none;\n  vertical-align: middle;\n  display: block;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n  text-align: center;\n  background: #eee;\n  font-size: 15px;\n  -moz-border-radius: 15px;\n  border-radius: 15px;\n  -webkit-transition: opacity 200ms;\n  -moz-transition: opacity 200ms;\n  transition: opacity 200ms;\n  opacity: 0.3;\n  color: #888;\n}\n\n#mocha .test:hover a.replay {\n  opacity: 1;\n}\n\n#mocha-report.pass .test.fail {\n  display: none;\n}\n\n#mocha-report.fail .test.pass {\n  display: none;\n}\n\n#mocha-report.pending .test.pass,\n#mocha-report.pending .test.fail {\n  display: none;\n}\n#mocha-report.pending .test.pass.pending {\n  display: block;\n}\n\n#mocha-error {\n  color: #c00;\n  font-size: 1.5em;\n  font-weight: 100;\n  letter-spacing: 1px;\n}\n\n#mocha-stats {\n  position: fixed;\n  top: 15px;\n  right: 10px;\n  font-size: 12px;\n  margin: 0;\n  color: #888;\n  z-index: 1;\n}\n\n#mocha-stats .progress {\n  float: right;\n  padding-top: 0;\n}\n\n#mocha-stats em {\n  color: black;\n}\n\n#mocha-stats a {\n  text-decoration: none;\n  color: inherit;\n}\n\n#mocha-stats a:hover {\n  border-bottom: 1px solid #eee;\n}\n\n#mocha-stats li {\n  display: inline-block;\n  margin: 0 5px;\n  list-style: none;\n  padding-top: 11px;\n}\n\n#mocha-stats canvas {\n  width: 40px;\n  height: 40px;\n}\n\n#mocha code .comment { color: #ddd; }\n#mocha code .init { color: #2f6fad; }\n#mocha code .string { color: #5890ad; }\n#mocha code .keyword { color: #8a6343; }\n#mocha code .number { color: #2f6fad; }\n\n@media screen and (max-device-width: 480px) {\n  #mocha {\n    margin: 60px 0px;\n  }\n\n  #mocha #stats {\n    position: absolute;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/mocha/mocha.js",
    "content": ";(function(){\n\n// CommonJS require()\n\nfunction require(p){\n    var path = require.resolve(p)\n      , mod = require.modules[path];\n    if (!mod) throw new Error('failed to require \"' + p + '\"');\n    if (!mod.exports) {\n      mod.exports = {};\n      mod.call(mod.exports, mod, mod.exports, require.relative(path));\n    }\n    return mod.exports;\n  }\n\nrequire.modules = {};\n\nrequire.resolve = function (path){\n    var orig = path\n      , reg = path + '.js'\n      , index = path + '/index.js';\n    return require.modules[reg] && reg\n      || require.modules[index] && index\n      || orig;\n  };\n\nrequire.register = function (path, fn){\n    require.modules[path] = fn;\n  };\n\nrequire.relative = function (parent) {\n    return function(p){\n      if ('.' != p.charAt(0)) return require(p);\n\n      var path = parent.split('/')\n        , segs = p.split('/');\n      path.pop();\n\n      for (var i = 0; i < segs.length; i++) {\n        var seg = segs[i];\n        if ('..' == seg) path.pop();\n        else if ('.' != seg) path.push(seg);\n      }\n\n      return require(path.join('/'));\n    };\n  };\n\n\nrequire.register(\"browser/debug.js\", function(module, exports, require){\n\nmodule.exports = function(type){\n  return function(){\n  }\n};\n\n}); // module: browser/debug.js\n\nrequire.register(\"browser/diff.js\", function(module, exports, require){\n/* See LICENSE file for terms of use */\n\n/*\n * Text diff implementation.\n *\n * This library supports the following APIS:\n * JsDiff.diffChars: Character by character diff\n * JsDiff.diffWords: Word (as defined by \\b regex) diff which ignores whitespace\n * JsDiff.diffLines: Line based diff\n *\n * JsDiff.diffCss: Diff targeted at CSS content\n *\n * These methods are based on the implementation proposed in\n * \"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986).\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927\n */\nvar JsDiff = (function() {\n  /*jshint maxparams: 5*/\n  function clonePath(path) {\n    return { newPos: path.newPos, components: path.components.slice(0) };\n  }\n  function removeEmpty(array) {\n    var ret = [];\n    for (var i = 0; i < array.length; i++) {\n      if (array[i]) {\n        ret.push(array[i]);\n      }\n    }\n    return ret;\n  }\n  function escapeHTML(s) {\n    var n = s;\n    n = n.replace(/&/g, '&amp;');\n    n = n.replace(/</g, '&lt;');\n    n = n.replace(/>/g, '&gt;');\n    n = n.replace(/\"/g, '&quot;');\n\n    return n;\n  }\n\n  var Diff = function(ignoreWhitespace) {\n    this.ignoreWhitespace = ignoreWhitespace;\n  };\n  Diff.prototype = {\n      diff: function(oldString, newString) {\n        // Handle the identity case (this is due to unrolling editLength == 0\n        if (newString === oldString) {\n          return [{ value: newString }];\n        }\n        if (!newString) {\n          return [{ value: oldString, removed: true }];\n        }\n        if (!oldString) {\n          return [{ value: newString, added: true }];\n        }\n\n        newString = this.tokenize(newString);\n        oldString = this.tokenize(oldString);\n\n        var newLen = newString.length, oldLen = oldString.length;\n        var maxEditLength = newLen + oldLen;\n        var bestPath = [{ newPos: -1, components: [] }];\n\n        // Seed editLength = 0\n        var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n        if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) {\n          return bestPath[0].components;\n        }\n\n        for (var editLength = 1; editLength <= maxEditLength; editLength++) {\n          for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) {\n            var basePath;\n            var addPath = bestPath[diagonalPath-1],\n                removePath = bestPath[diagonalPath+1];\n            oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n            if (addPath) {\n              // No one else is going to attempt to use this value, clear it\n              bestPath[diagonalPath-1] = undefined;\n            }\n\n            var canAdd = addPath && addPath.newPos+1 < newLen;\n            var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n            if (!canAdd && !canRemove) {\n              bestPath[diagonalPath] = undefined;\n              continue;\n            }\n\n            // Select the diagonal that we want to branch from. We select the prior\n            // path whose position in the new string is the farthest from the origin\n            // and does not pass the bounds of the diff graph\n            if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n              basePath = clonePath(removePath);\n              this.pushComponent(basePath.components, oldString[oldPos], undefined, true);\n            } else {\n              basePath = clonePath(addPath);\n              basePath.newPos++;\n              this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined);\n            }\n\n            var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath);\n\n            if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) {\n              return basePath.components;\n            } else {\n              bestPath[diagonalPath] = basePath;\n            }\n          }\n        }\n      },\n\n      pushComponent: function(components, value, added, removed) {\n        var last = components[components.length-1];\n        if (last && last.added === added && last.removed === removed) {\n          // We need to clone here as the component clone operation is just\n          // as shallow array clone\n          components[components.length-1] =\n            {value: this.join(last.value, value), added: added, removed: removed };\n        } else {\n          components.push({value: value, added: added, removed: removed });\n        }\n      },\n      extractCommon: function(basePath, newString, oldString, diagonalPath) {\n        var newLen = newString.length,\n            oldLen = oldString.length,\n            newPos = basePath.newPos,\n            oldPos = newPos - diagonalPath;\n        while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) {\n          newPos++;\n          oldPos++;\n\n          this.pushComponent(basePath.components, newString[newPos], undefined, undefined);\n        }\n        basePath.newPos = newPos;\n        return oldPos;\n      },\n\n      equals: function(left, right) {\n        var reWhitespace = /\\S/;\n        if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) {\n          return true;\n        } else {\n          return left === right;\n        }\n      },\n      join: function(left, right) {\n        return left + right;\n      },\n      tokenize: function(value) {\n        return value;\n      }\n  };\n\n  var CharDiff = new Diff();\n\n  var WordDiff = new Diff(true);\n  var WordWithSpaceDiff = new Diff();\n  WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) {\n    return removeEmpty(value.split(/(\\s+|\\b)/));\n  };\n\n  var CssDiff = new Diff(true);\n  CssDiff.tokenize = function(value) {\n    return removeEmpty(value.split(/([{}:;,]|\\s+)/));\n  };\n\n  var LineDiff = new Diff();\n  LineDiff.tokenize = function(value) {\n    return value.split(/^/m);\n  };\n\n  return {\n    Diff: Diff,\n\n    diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); },\n    diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); },\n    diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); },\n    diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); },\n\n    diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); },\n\n    createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) {\n      var ret = [];\n\n      ret.push('Index: ' + fileName);\n      ret.push('===================================================================');\n      ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\\t' + oldHeader));\n      ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\\t' + newHeader));\n\n      var diff = LineDiff.diff(oldStr, newStr);\n      if (!diff[diff.length-1].value) {\n        diff.pop();   // Remove trailing newline add\n      }\n      diff.push({value: '', lines: []});   // Append an empty value to make cleanup easier\n\n      function contextLines(lines) {\n        return lines.map(function(entry) { return ' ' + entry; });\n      }\n      function eofNL(curRange, i, current) {\n        var last = diff[diff.length-2],\n            isLast = i === diff.length-2,\n            isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed);\n\n        // Figure out if this is the last line for the given file and missing NL\n        if (!/\\n$/.test(current.value) && (isLast || isLastOfType)) {\n          curRange.push('\\\\ No newline at end of file');\n        }\n      }\n\n      var oldRangeStart = 0, newRangeStart = 0, curRange = [],\n          oldLine = 1, newLine = 1;\n      for (var i = 0; i < diff.length; i++) {\n        var current = diff[i],\n            lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n        current.lines = lines;\n\n        if (current.added || current.removed) {\n          if (!oldRangeStart) {\n            var prev = diff[i-1];\n            oldRangeStart = oldLine;\n            newRangeStart = newLine;\n\n            if (prev) {\n              curRange = contextLines(prev.lines.slice(-4));\n              oldRangeStart -= curRange.length;\n              newRangeStart -= curRange.length;\n            }\n          }\n          curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; }));\n          eofNL(curRange, i, current);\n\n          if (current.added) {\n            newLine += lines.length;\n          } else {\n            oldLine += lines.length;\n          }\n        } else {\n          if (oldRangeStart) {\n            // Close out any changes that have been output (or join overlapping)\n            if (lines.length <= 8 && i < diff.length-2) {\n              // Overlapping\n              curRange.push.apply(curRange, contextLines(lines));\n            } else {\n              // end the range and output\n              var contextSize = Math.min(lines.length, 4);\n              ret.push(\n                  '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize)\n                  + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize)\n                  + ' @@');\n              ret.push.apply(ret, curRange);\n              ret.push.apply(ret, contextLines(lines.slice(0, contextSize)));\n              if (lines.length <= 4) {\n                eofNL(ret, i, current);\n              }\n\n              oldRangeStart = 0;  newRangeStart = 0; curRange = [];\n            }\n          }\n          oldLine += lines.length;\n          newLine += lines.length;\n        }\n      }\n\n      return ret.join('\\n') + '\\n';\n    },\n\n    applyPatch: function(oldStr, uniDiff) {\n      var diffstr = uniDiff.split('\\n');\n      var diff = [];\n      var remEOFNL = false,\n          addEOFNL = false;\n\n      for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) {\n        if(diffstr[i][0] === '@') {\n          var meh = diffstr[i].split(/@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/);\n          diff.unshift({\n            start:meh[3],\n            oldlength:meh[2],\n            oldlines:[],\n            newlength:meh[4],\n            newlines:[]\n          });\n        } else if(diffstr[i][0] === '+') {\n          diff[0].newlines.push(diffstr[i].substr(1));\n        } else if(diffstr[i][0] === '-') {\n          diff[0].oldlines.push(diffstr[i].substr(1));\n        } else if(diffstr[i][0] === ' ') {\n          diff[0].newlines.push(diffstr[i].substr(1));\n          diff[0].oldlines.push(diffstr[i].substr(1));\n        } else if(diffstr[i][0] === '\\\\') {\n          if (diffstr[i-1][0] === '+') {\n            remEOFNL = true;\n          } else if(diffstr[i-1][0] === '-') {\n            addEOFNL = true;\n          }\n        }\n      }\n\n      var str = oldStr.split('\\n');\n      for (var i = diff.length - 1; i >= 0; i--) {\n        var d = diff[i];\n        for (var j = 0; j < d.oldlength; j++) {\n          if(str[d.start-1+j] !== d.oldlines[j]) {\n            return false;\n          }\n        }\n        Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines));\n      }\n\n      if (remEOFNL) {\n        while (!str[str.length-1]) {\n          str.pop();\n        }\n      } else if (addEOFNL) {\n        str.push('');\n      }\n      return str.join('\\n');\n    },\n\n    convertChangesToXML: function(changes){\n      var ret = [];\n      for ( var i = 0; i < changes.length; i++) {\n        var change = changes[i];\n        if (change.added) {\n          ret.push('<ins>');\n        } else if (change.removed) {\n          ret.push('<del>');\n        }\n\n        ret.push(escapeHTML(change.value));\n\n        if (change.added) {\n          ret.push('</ins>');\n        } else if (change.removed) {\n          ret.push('</del>');\n        }\n      }\n      return ret.join('');\n    },\n\n    // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n    convertChangesToDMP: function(changes){\n      var ret = [], change;\n      for ( var i = 0; i < changes.length; i++) {\n        change = changes[i];\n        ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]);\n      }\n      return ret;\n    }\n  };\n})();\n\nif (typeof module !== 'undefined') {\n    module.exports = JsDiff;\n}\n\n}); // module: browser/diff.js\n\nrequire.register(\"browser/events.js\", function(module, exports, require){\n\n/**\n * Module exports.\n */\n\nexports.EventEmitter = EventEmitter;\n\n/**\n * Check if `obj` is an array.\n */\n\nfunction isArray(obj) {\n  return '[object Array]' == {}.toString.call(obj);\n}\n\n/**\n * Event emitter constructor.\n *\n * @api public\n */\n\nfunction EventEmitter(){};\n\n/**\n * Adds a listener.\n *\n * @api public\n */\n\nEventEmitter.prototype.on = function (name, fn) {\n  if (!this.$events) {\n    this.$events = {};\n  }\n\n  if (!this.$events[name]) {\n    this.$events[name] = fn;\n  } else if (isArray(this.$events[name])) {\n    this.$events[name].push(fn);\n  } else {\n    this.$events[name] = [this.$events[name], fn];\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n/**\n * Adds a volatile listener.\n *\n * @api public\n */\n\nEventEmitter.prototype.once = function (name, fn) {\n  var self = this;\n\n  function on () {\n    self.removeListener(name, on);\n    fn.apply(this, arguments);\n  };\n\n  on.listener = fn;\n  this.on(name, on);\n\n  return this;\n};\n\n/**\n * Removes a listener.\n *\n * @api public\n */\n\nEventEmitter.prototype.removeListener = function (name, fn) {\n  if (this.$events && this.$events[name]) {\n    var list = this.$events[name];\n\n    if (isArray(list)) {\n      var pos = -1;\n\n      for (var i = 0, l = list.length; i < l; i++) {\n        if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {\n          pos = i;\n          break;\n        }\n      }\n\n      if (pos < 0) {\n        return this;\n      }\n\n      list.splice(pos, 1);\n\n      if (!list.length) {\n        delete this.$events[name];\n      }\n    } else if (list === fn || (list.listener && list.listener === fn)) {\n      delete this.$events[name];\n    }\n  }\n\n  return this;\n};\n\n/**\n * Removes all listeners for an event.\n *\n * @api public\n */\n\nEventEmitter.prototype.removeAllListeners = function (name) {\n  if (name === undefined) {\n    this.$events = {};\n    return this;\n  }\n\n  if (this.$events && this.$events[name]) {\n    this.$events[name] = null;\n  }\n\n  return this;\n};\n\n/**\n * Gets all listeners for a certain event.\n *\n * @api public\n */\n\nEventEmitter.prototype.listeners = function (name) {\n  if (!this.$events) {\n    this.$events = {};\n  }\n\n  if (!this.$events[name]) {\n    this.$events[name] = [];\n  }\n\n  if (!isArray(this.$events[name])) {\n    this.$events[name] = [this.$events[name]];\n  }\n\n  return this.$events[name];\n};\n\n/**\n * Emits an event.\n *\n * @api public\n */\n\nEventEmitter.prototype.emit = function (name) {\n  if (!this.$events) {\n    return false;\n  }\n\n  var handler = this.$events[name];\n\n  if (!handler) {\n    return false;\n  }\n\n  var args = [].slice.call(arguments, 1);\n\n  if ('function' == typeof handler) {\n    handler.apply(this, args);\n  } else if (isArray(handler)) {\n    var listeners = handler.slice();\n\n    for (var i = 0, l = listeners.length; i < l; i++) {\n      listeners[i].apply(this, args);\n    }\n  } else {\n    return false;\n  }\n\n  return true;\n};\n}); // module: browser/events.js\n\nrequire.register(\"browser/fs.js\", function(module, exports, require){\n\n}); // module: browser/fs.js\n\nrequire.register(\"browser/path.js\", function(module, exports, require){\n\n}); // module: browser/path.js\n\nrequire.register(\"browser/progress.js\", function(module, exports, require){\n/**\n * Expose `Progress`.\n */\n\nmodule.exports = Progress;\n\n/**\n * Initialize a new `Progress` indicator.\n */\n\nfunction Progress() {\n  this.percent = 0;\n  this.size(0);\n  this.fontSize(11);\n  this.font('helvetica, arial, sans-serif');\n}\n\n/**\n * Set progress size to `n`.\n *\n * @param {Number} n\n * @return {Progress} for chaining\n * @api public\n */\n\nProgress.prototype.size = function(n){\n  this._size = n;\n  return this;\n};\n\n/**\n * Set text to `str`.\n *\n * @param {String} str\n * @return {Progress} for chaining\n * @api public\n */\n\nProgress.prototype.text = function(str){\n  this._text = str;\n  return this;\n};\n\n/**\n * Set font size to `n`.\n *\n * @param {Number} n\n * @return {Progress} for chaining\n * @api public\n */\n\nProgress.prototype.fontSize = function(n){\n  this._fontSize = n;\n  return this;\n};\n\n/**\n * Set font `family`.\n *\n * @param {String} family\n * @return {Progress} for chaining\n */\n\nProgress.prototype.font = function(family){\n  this._font = family;\n  return this;\n};\n\n/**\n * Update percentage to `n`.\n *\n * @param {Number} n\n * @return {Progress} for chaining\n */\n\nProgress.prototype.update = function(n){\n  this.percent = n;\n  return this;\n};\n\n/**\n * Draw on `ctx`.\n *\n * @param {CanvasRenderingContext2d} ctx\n * @return {Progress} for chaining\n */\n\nProgress.prototype.draw = function(ctx){\n  try {\n    var percent = Math.min(this.percent, 100)\n      , size = this._size\n      , half = size / 2\n      , x = half\n      , y = half\n      , rad = half - 1\n      , fontSize = this._fontSize;\n  \n    ctx.font = fontSize + 'px ' + this._font;\n  \n    var angle = Math.PI * 2 * (percent / 100);\n    ctx.clearRect(0, 0, size, size);\n  \n    // outer circle\n    ctx.strokeStyle = '#9f9f9f';\n    ctx.beginPath();\n    ctx.arc(x, y, rad, 0, angle, false);\n    ctx.stroke();\n  \n    // inner circle\n    ctx.strokeStyle = '#eee';\n    ctx.beginPath();\n    ctx.arc(x, y, rad - 1, 0, angle, true);\n    ctx.stroke();\n  \n    // text\n    var text = this._text || (percent | 0) + '%'\n      , w = ctx.measureText(text).width;\n  \n    ctx.fillText(\n        text\n      , x - w / 2 + 1\n      , y + fontSize / 2 - 1);\n  } catch (ex) {} //don't fail if we can't render progress\n  return this;\n};\n\n}); // module: browser/progress.js\n\nrequire.register(\"browser/tty.js\", function(module, exports, require){\n\nexports.isatty = function(){\n  return true;\n};\n\nexports.getWindowSize = function(){\n  if ('innerHeight' in global) {\n    return [global.innerHeight, global.innerWidth];\n  } else {\n    // In a Web Worker, the DOM Window is not available.\n    return [640, 480];\n  }\n};\n\n}); // module: browser/tty.js\n\nrequire.register(\"context.js\", function(module, exports, require){\n\n/**\n * Expose `Context`.\n */\n\nmodule.exports = Context;\n\n/**\n * Initialize a new `Context`.\n *\n * @api private\n */\n\nfunction Context(){}\n\n/**\n * Set or get the context `Runnable` to `runnable`.\n *\n * @param {Runnable} runnable\n * @return {Context}\n * @api private\n */\n\nContext.prototype.runnable = function(runnable){\n  if (0 == arguments.length) return this._runnable;\n  this.test = this._runnable = runnable;\n  return this;\n};\n\n/**\n * Set test timeout `ms`.\n *\n * @param {Number} ms\n * @return {Context} self\n * @api private\n */\n\nContext.prototype.timeout = function(ms){\n  this.runnable().timeout(ms);\n  return this;\n};\n\n/**\n * Set test slowness threshold `ms`.\n *\n * @param {Number} ms\n * @return {Context} self\n * @api private\n */\n\nContext.prototype.slow = function(ms){\n  this.runnable().slow(ms);\n  return this;\n};\n\n/**\n * Inspect the context void of `._runnable`.\n *\n * @return {String}\n * @api private\n */\n\nContext.prototype.inspect = function(){\n  return JSON.stringify(this, function(key, val){\n    if ('_runnable' == key) return;\n    if ('test' == key) return;\n    return val;\n  }, 2);\n};\n\n}); // module: context.js\n\nrequire.register(\"hook.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Runnable = require('./runnable');\n\n/**\n * Expose `Hook`.\n */\n\nmodule.exports = Hook;\n\n/**\n * Initialize a new `Hook` with the given `title` and callback `fn`.\n *\n * @param {String} title\n * @param {Function} fn\n * @api private\n */\n\nfunction Hook(title, fn) {\n  Runnable.call(this, title, fn);\n  this.type = 'hook';\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\n\nfunction F(){};\nF.prototype = Runnable.prototype;\nHook.prototype = new F;\nHook.prototype.constructor = Hook;\n\n\n/**\n * Get or set the test `err`.\n *\n * @param {Error} err\n * @return {Error}\n * @api public\n */\n\nHook.prototype.error = function(err){\n  if (0 == arguments.length) {\n    var err = this._error;\n    this._error = null;\n    return err;\n  }\n\n  this._error = err;\n};\n\n}); // module: hook.js\n\nrequire.register(\"interfaces/bdd.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite')\n  , Test = require('../test')\n  , utils = require('../utils');\n\n/**\n * BDD-style interface:\n *\n *      describe('Array', function(){\n *        describe('#indexOf()', function(){\n *          it('should return -1 when not present', function(){\n *\n *          });\n *\n *          it('should return the index when present', function(){\n *\n *          });\n *        });\n *      });\n *\n */\n\nmodule.exports = function(suite){\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha){\n\n    /**\n     * Execute before running tests.\n     */\n\n    context.before = function(fn){\n      suites[0].beforeAll(fn);\n    };\n\n    /**\n     * Execute after running tests.\n     */\n\n    context.after = function(fn){\n      suites[0].afterAll(fn);\n    };\n\n    /**\n     * Execute before each test case.\n     */\n\n    context.beforeEach = function(fn){\n      suites[0].beforeEach(fn);\n    };\n\n    /**\n     * Execute after each test case.\n     */\n\n    context.afterEach = function(fn){\n      suites[0].afterEach(fn);\n    };\n\n    /**\n     * Describe a \"suite\" with the given `title`\n     * and callback `fn` containing nested suites\n     * and/or tests.\n     */\n\n    context.describe = context.context = function(title, fn){\n      var suite = Suite.create(suites[0], title);\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n      return suite;\n    };\n\n    /**\n     * Pending describe.\n     */\n\n    context.xdescribe =\n    context.xcontext =\n    context.describe.skip = function(title, fn){\n      var suite = Suite.create(suites[0], title);\n      suite.pending = true;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n    };\n\n    /**\n     * Exclusive suite.\n     */\n\n    context.describe.only = function(title, fn){\n      var suite = context.describe(title, fn);\n      mocha.grep(suite.fullTitle());\n      return suite;\n    };\n\n    /**\n     * Describe a specification or test-case\n     * with the given `title` and callback `fn`\n     * acting as a thunk.\n     */\n\n    context.it = context.specify = function(title, fn){\n      var suite = suites[0];\n      if (suite.pending) var fn = null;\n      var test = new Test(title, fn);\n      suite.addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.it.only = function(title, fn){\n      var test = context.it(title, fn);\n      var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n      return test;\n    };\n\n    /**\n     * Pending test case.\n     */\n\n    context.xit =\n    context.xspecify =\n    context.it.skip = function(title){\n      context.it(title);\n    };\n  });\n};\n\n}); // module: interfaces/bdd.js\n\nrequire.register(\"interfaces/exports.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite')\n  , Test = require('../test');\n\n/**\n * TDD-style interface:\n *\n *     exports.Array = {\n *       '#indexOf()': {\n *         'should return -1 when the value is not present': function(){\n *\n *         },\n *\n *         'should return the correct index when the value is present': function(){\n *\n *         }\n *       }\n *     };\n *\n */\n\nmodule.exports = function(suite){\n  var suites = [suite];\n\n  suite.on('require', visit);\n\n  function visit(obj) {\n    var suite;\n    for (var key in obj) {\n      if ('function' == typeof obj[key]) {\n        var fn = obj[key];\n        switch (key) {\n          case 'before':\n            suites[0].beforeAll(fn);\n            break;\n          case 'after':\n            suites[0].afterAll(fn);\n            break;\n          case 'beforeEach':\n            suites[0].beforeEach(fn);\n            break;\n          case 'afterEach':\n            suites[0].afterEach(fn);\n            break;\n          default:\n            suites[0].addTest(new Test(key, fn));\n        }\n      } else {\n        var suite = Suite.create(suites[0], key);\n        suites.unshift(suite);\n        visit(obj[key]);\n        suites.shift();\n      }\n    }\n  }\n};\n\n}); // module: interfaces/exports.js\n\nrequire.register(\"interfaces/index.js\", function(module, exports, require){\n\nexports.bdd = require('./bdd');\nexports.tdd = require('./tdd');\nexports.qunit = require('./qunit');\nexports.exports = require('./exports');\n\n}); // module: interfaces/index.js\n\nrequire.register(\"interfaces/qunit.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite')\n  , Test = require('../test')\n  , utils = require('../utils');\n\n/**\n * QUnit-style interface:\n *\n *     suite('Array');\n *\n *     test('#length', function(){\n *       var arr = [1,2,3];\n *       ok(arr.length == 3);\n *     });\n *\n *     test('#indexOf()', function(){\n *       var arr = [1,2,3];\n *       ok(arr.indexOf(1) == 0);\n *       ok(arr.indexOf(2) == 1);\n *       ok(arr.indexOf(3) == 2);\n *     });\n *\n *     suite('String');\n *\n *     test('#length', function(){\n *       ok('foo'.length == 3);\n *     });\n *\n */\n\nmodule.exports = function(suite){\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha){\n\n    /**\n     * Execute before running tests.\n     */\n\n    context.before = function(fn){\n      suites[0].beforeAll(fn);\n    };\n\n    /**\n     * Execute after running tests.\n     */\n\n    context.after = function(fn){\n      suites[0].afterAll(fn);\n    };\n\n    /**\n     * Execute before each test case.\n     */\n\n    context.beforeEach = function(fn){\n      suites[0].beforeEach(fn);\n    };\n\n    /**\n     * Execute after each test case.\n     */\n\n    context.afterEach = function(fn){\n      suites[0].afterEach(fn);\n    };\n\n    /**\n     * Describe a \"suite\" with the given `title`.\n     */\n\n    context.suite = function(title){\n      if (suites.length > 1) suites.shift();\n      var suite = Suite.create(suites[0], title);\n      suites.unshift(suite);\n      return suite;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.suite.only = function(title, fn){\n      var suite = context.suite(title, fn);\n      mocha.grep(suite.fullTitle());\n    };\n\n    /**\n     * Describe a specification or test-case\n     * with the given `title` and callback `fn`\n     * acting as a thunk.\n     */\n\n    context.test = function(title, fn){\n      var test = new Test(title, fn);\n      suites[0].addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.test.only = function(title, fn){\n      var test = context.test(title, fn);\n      var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n    };\n\n    /**\n     * Pending test case.\n     */\n\n    context.test.skip = function(title){\n      context.test(title);\n    };\n  });\n};\n\n}); // module: interfaces/qunit.js\n\nrequire.register(\"interfaces/tdd.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite')\n  , Test = require('../test')\n  , utils = require('../utils');;\n\n/**\n * TDD-style interface:\n *\n *      suite('Array', function(){\n *        suite('#indexOf()', function(){\n *          suiteSetup(function(){\n *\n *          });\n *\n *          test('should return -1 when not present', function(){\n *\n *          });\n *\n *          test('should return the index when present', function(){\n *\n *          });\n *\n *          suiteTeardown(function(){\n *\n *          });\n *        });\n *      });\n *\n */\n\nmodule.exports = function(suite){\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha){\n\n    /**\n     * Execute before each test case.\n     */\n\n    context.setup = function(fn){\n      suites[0].beforeEach(fn);\n    };\n\n    /**\n     * Execute after each test case.\n     */\n\n    context.teardown = function(fn){\n      suites[0].afterEach(fn);\n    };\n\n    /**\n     * Execute before the suite.\n     */\n\n    context.suiteSetup = function(fn){\n      suites[0].beforeAll(fn);\n    };\n\n    /**\n     * Execute after the suite.\n     */\n\n    context.suiteTeardown = function(fn){\n      suites[0].afterAll(fn);\n    };\n\n    /**\n     * Describe a \"suite\" with the given `title`\n     * and callback `fn` containing nested suites\n     * and/or tests.\n     */\n\n    context.suite = function(title, fn){\n      var suite = Suite.create(suites[0], title);\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n      return suite;\n    };\n\n    /**\n     * Pending suite.\n     */\n    context.suite.skip = function(title, fn) {\n      var suite = Suite.create(suites[0], title);\n      suite.pending = true;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.suite.only = function(title, fn){\n      var suite = context.suite(title, fn);\n      mocha.grep(suite.fullTitle());\n    };\n\n    /**\n     * Describe a specification or test-case\n     * with the given `title` and callback `fn`\n     * acting as a thunk.\n     */\n\n    context.test = function(title, fn){\n      var suite = suites[0];\n      if (suite.pending) var fn = null;\n      var test = new Test(title, fn);\n      suite.addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.test.only = function(title, fn){\n      var test = context.test(title, fn);\n      var reString = '^' + utils.escapeRegexp(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n    };\n\n    /**\n     * Pending test case.\n     */\n\n    context.test.skip = function(title){\n      context.test(title);\n    };\n  });\n};\n\n}); // module: interfaces/tdd.js\n\nrequire.register(\"mocha.js\", function(module, exports, require){\n/*!\n * mocha\n * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar path = require('browser/path')\n  , utils = require('./utils');\n\n/**\n * Expose `Mocha`.\n */\n\nexports = module.exports = Mocha;\n\n/**\n * Expose internals.\n */\n\nexports.utils = utils;\nexports.interfaces = require('./interfaces');\nexports.reporters = require('./reporters');\nexports.Runnable = require('./runnable');\nexports.Context = require('./context');\nexports.Runner = require('./runner');\nexports.Suite = require('./suite');\nexports.Hook = require('./hook');\nexports.Test = require('./test');\n\n/**\n * Return image `name` path.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction image(name) {\n  return __dirname + '/../images/' + name + '.png';\n}\n\n/**\n * Setup mocha with `options`.\n *\n * Options:\n *\n *   - `ui` name \"bdd\", \"tdd\", \"exports\" etc\n *   - `reporter` reporter instance, defaults to `mocha.reporters.Dot`\n *   - `globals` array of accepted globals\n *   - `timeout` timeout in milliseconds\n *   - `bail` bail on the first test failure\n *   - `slow` milliseconds to wait before considering a test slow\n *   - `ignoreLeaks` ignore global leaks\n *   - `grep` string or regexp to filter tests with\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Mocha(options) {\n  options = options || {};\n  this.files = [];\n  this.options = options;\n  this.grep(options.grep);\n  this.suite = new exports.Suite('', new exports.Context);\n  this.ui(options.ui);\n  this.bail(options.bail);\n  this.reporter(options.reporter);\n  if (null != options.timeout) this.timeout(options.timeout);\n  this.useColors(options.useColors)\n  if (options.slow) this.slow(options.slow);\n\n  this.suite.on('pre-require', function (context) {\n    exports.afterEach = context.afterEach || context.teardown;\n    exports.after = context.after || context.suiteTeardown;\n    exports.beforeEach = context.beforeEach || context.setup;\n    exports.before = context.before || context.suiteSetup;\n    exports.describe = context.describe || context.suite;\n    exports.it = context.it || context.test;\n    exports.setup = context.setup || context.beforeEach;\n    exports.suiteSetup = context.suiteSetup || context.before;\n    exports.suiteTeardown = context.suiteTeardown || context.after;\n    exports.suite = context.suite || context.describe;\n    exports.teardown = context.teardown || context.afterEach;\n    exports.test = context.test || context.it;\n  });\n}\n\n/**\n * Enable or disable bailing on the first failure.\n *\n * @param {Boolean} [bail]\n * @api public\n */\n\nMocha.prototype.bail = function(bail){\n  if (0 == arguments.length) bail = true;\n  this.suite.bail(bail);\n  return this;\n};\n\n/**\n * Add test `file`.\n *\n * @param {String} file\n * @api public\n */\n\nMocha.prototype.addFile = function(file){\n  this.files.push(file);\n  return this;\n};\n\n/**\n * Set reporter to `reporter`, defaults to \"dot\".\n *\n * @param {String|Function} reporter name or constructor\n * @api public\n */\n\nMocha.prototype.reporter = function(reporter){\n  if ('function' == typeof reporter) {\n    this._reporter = reporter;\n  } else {\n    reporter = reporter || 'dot';\n    var _reporter;\n    try { _reporter = require('./reporters/' + reporter); } catch (err) {};\n    if (!_reporter) try { _reporter = require(reporter); } catch (err) {};\n    if (!_reporter && reporter === 'teamcity')\n      console.warn('The Teamcity reporter was moved to a package named ' +\n        'mocha-teamcity-reporter ' +\n        '(https://npmjs.org/package/mocha-teamcity-reporter).');\n    if (!_reporter) throw new Error('invalid reporter \"' + reporter + '\"');\n    this._reporter = _reporter;\n  }\n  return this;\n};\n\n/**\n * Set test UI `name`, defaults to \"bdd\".\n *\n * @param {String} bdd\n * @api public\n */\n\nMocha.prototype.ui = function(name){\n  name = name || 'bdd';\n  this._ui = exports.interfaces[name];\n  if (!this._ui) try { this._ui = require(name); } catch (err) {};\n  if (!this._ui) throw new Error('invalid interface \"' + name + '\"');\n  this._ui = this._ui(this.suite);\n  return this;\n};\n\n/**\n * Load registered files.\n *\n * @api private\n */\n\nMocha.prototype.loadFiles = function(fn){\n  var self = this;\n  var suite = this.suite;\n  var pending = this.files.length;\n  this.files.forEach(function(file){\n    file = path.resolve(file);\n    suite.emit('pre-require', global, file, self);\n    suite.emit('require', require(file), file, self);\n    suite.emit('post-require', global, file, self);\n    --pending || (fn && fn());\n  });\n};\n\n/**\n * Enable growl support.\n *\n * @api private\n */\n\nMocha.prototype._growl = function(runner, reporter) {\n  var notify = require('growl');\n\n  runner.on('end', function(){\n    var stats = reporter.stats;\n    if (stats.failures) {\n      var msg = stats.failures + ' of ' + runner.total + ' tests failed';\n      notify(msg, { name: 'mocha', title: 'Failed', image: image('error') });\n    } else {\n      notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', {\n          name: 'mocha'\n        , title: 'Passed'\n        , image: image('ok')\n      });\n    }\n  });\n};\n\n/**\n * Add regexp to grep, if `re` is a string it is escaped.\n *\n * @param {RegExp|String} re\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.grep = function(re){\n  this.options.grep = 'string' == typeof re\n    ? new RegExp(utils.escapeRegexp(re))\n    : re;\n  return this;\n};\n\n/**\n * Invert `.grep()` matches.\n *\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.invert = function(){\n  this.options.invert = true;\n  return this;\n};\n\n/**\n * Ignore global leaks.\n *\n * @param {Boolean} ignore\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.ignoreLeaks = function(ignore){\n  this.options.ignoreLeaks = !!ignore;\n  return this;\n};\n\n/**\n * Enable global leak checking.\n *\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.checkLeaks = function(){\n  this.options.ignoreLeaks = false;\n  return this;\n};\n\n/**\n * Enable growl support.\n *\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.growl = function(){\n  this.options.growl = true;\n  return this;\n};\n\n/**\n * Ignore `globals` array or string.\n *\n * @param {Array|String} globals\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.globals = function(globals){\n  this.options.globals = (this.options.globals || []).concat(globals);\n  return this;\n};\n\n/**\n * Emit color output.\n *\n * @param {Boolean} colors\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.useColors = function(colors){\n  this.options.useColors = arguments.length && colors != undefined\n    ? colors\n    : true;\n  return this;\n};\n\n/**\n * Use inline diffs rather than +/-.\n *\n * @param {Boolean} inlineDiffs\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.useInlineDiffs = function(inlineDiffs) {\n  this.options.useInlineDiffs = arguments.length && inlineDiffs != undefined\n  ? inlineDiffs\n  : false;\n  return this;\n};\n\n/**\n * Set the timeout in milliseconds.\n *\n * @param {Number} timeout\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.timeout = function(timeout){\n  this.suite.timeout(timeout);\n  return this;\n};\n\n/**\n * Set slowness threshold in milliseconds.\n *\n * @param {Number} slow\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.slow = function(slow){\n  this.suite.slow(slow);\n  return this;\n};\n\n/**\n * Makes all tests async (accepting a callback)\n *\n * @return {Mocha}\n * @api public\n */\n\nMocha.prototype.asyncOnly = function(){\n  this.options.asyncOnly = true;\n  return this;\n};\n\n/**\n * Run tests and invoke `fn()` when complete.\n *\n * @param {Function} fn\n * @return {Runner}\n * @api public\n */\n\nMocha.prototype.run = function(fn){\n  if (this.files.length) this.loadFiles();\n  var suite = this.suite;\n  var options = this.options;\n  var runner = new exports.Runner(suite);\n  var reporter = new this._reporter(runner);\n  runner.ignoreLeaks = false !== options.ignoreLeaks;\n  runner.asyncOnly = options.asyncOnly;\n  if (options.grep) runner.grep(options.grep, options.invert);\n  if (options.globals) runner.globals(options.globals);\n  if (options.growl) this._growl(runner, reporter);\n  exports.reporters.Base.useColors = options.useColors;\n  exports.reporters.Base.inlineDiffs = options.useInlineDiffs;\n  return runner.run(fn);\n};\n\n}); // module: mocha.js\n\nrequire.register(\"ms.js\", function(module, exports, require){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n  options = options || {};\n  if ('string' == typeof val) return parse(val);\n  return options.long ? longFormat(val) : shortFormat(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  var match = /^((?:\\d+)?\\.?\\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);\n  if (!match) return;\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 's':\n      return n * s;\n    case 'ms':\n      return n;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction shortFormat(ms) {\n  if (ms >= d) return Math.round(ms / d) + 'd';\n  if (ms >= h) return Math.round(ms / h) + 'h';\n  if (ms >= m) return Math.round(ms / m) + 'm';\n  if (ms >= s) return Math.round(ms / s) + 's';\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction longFormat(ms) {\n  return plural(ms, d, 'day')\n    || plural(ms, h, 'hour')\n    || plural(ms, m, 'minute')\n    || plural(ms, s, 'second')\n    || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) return;\n  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n}); // module: ms.js\n\nrequire.register(\"reporters/base.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar tty = require('browser/tty')\n  , diff = require('browser/diff')\n  , ms = require('../ms')\n  , utils = require('../utils');\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date\n  , setTimeout = global.setTimeout\n  , setInterval = global.setInterval\n  , clearTimeout = global.clearTimeout\n  , clearInterval = global.clearInterval;\n\n/**\n * Check if both stdio streams are associated with a tty.\n */\n\nvar isatty = tty.isatty(1) && tty.isatty(2);\n\n/**\n * Expose `Base`.\n */\n\nexports = module.exports = Base;\n\n/**\n * Enable coloring by default.\n */\n\nexports.useColors = isatty || (process.env.MOCHA_COLORS !== undefined);\n\n/**\n * Inline diffs instead of +/-\n */\n\nexports.inlineDiffs = false;\n\n/**\n * Default color map.\n */\n\nexports.colors = {\n    'pass': 90\n  , 'fail': 31\n  , 'bright pass': 92\n  , 'bright fail': 91\n  , 'bright yellow': 93\n  , 'pending': 36\n  , 'suite': 0\n  , 'error title': 0\n  , 'error message': 31\n  , 'error stack': 90\n  , 'checkmark': 32\n  , 'fast': 90\n  , 'medium': 33\n  , 'slow': 31\n  , 'green': 32\n  , 'light': 90\n  , 'diff gutter': 90\n  , 'diff added': 42\n  , 'diff removed': 41\n};\n\n/**\n * Default symbol map.\n */\n\nexports.symbols = {\n  ok: '✓',\n  err: '✖',\n  dot: '․'\n};\n\n// With node.js on Windows: use symbols available in terminal default fonts\nif ('win32' == process.platform) {\n  exports.symbols.ok = '\\u221A';\n  exports.symbols.err = '\\u00D7';\n  exports.symbols.dot = '.';\n}\n\n/**\n * Color `str` with the given `type`,\n * allowing colors to be disabled,\n * as well as user-defined color\n * schemes.\n *\n * @param {String} type\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar color = exports.color = function(type, str) {\n  if (!exports.useColors) return str;\n  return '\\u001b[' + exports.colors[type] + 'm' + str + '\\u001b[0m';\n};\n\n/**\n * Expose term window size, with some\n * defaults for when stderr is not a tty.\n */\n\nexports.window = {\n  width: isatty\n    ? process.stdout.getWindowSize\n      ? process.stdout.getWindowSize(1)[0]\n      : tty.getWindowSize()[1]\n    : 75\n};\n\n/**\n * Expose some basic cursor interactions\n * that are common among reporters.\n */\n\nexports.cursor = {\n  hide: function(){\n    isatty && process.stdout.write('\\u001b[?25l');\n  },\n\n  show: function(){\n    isatty && process.stdout.write('\\u001b[?25h');\n  },\n\n  deleteLine: function(){\n    isatty && process.stdout.write('\\u001b[2K');\n  },\n\n  beginningOfLine: function(){\n    isatty && process.stdout.write('\\u001b[0G');\n  },\n\n  CR: function(){\n    if (isatty) {\n      exports.cursor.deleteLine();\n      exports.cursor.beginningOfLine();\n    } else {\n      process.stdout.write('\\r');\n    }\n  }\n};\n\n/**\n * Outut the given `failures` as a list.\n *\n * @param {Array} failures\n * @api public\n */\n\nexports.list = function(failures){\n  console.error();\n  failures.forEach(function(test, i){\n    // format\n    var fmt = color('error title', '  %s) %s:\\n')\n      + color('error message', '     %s')\n      + color('error stack', '\\n%s\\n');\n\n    // msg\n    var err = test.err\n      , message = err.message || ''\n      , stack = err.stack || message\n      , index = stack.indexOf(message) + message.length\n      , msg = stack.slice(0, index)\n      , actual = err.actual\n      , expected = err.expected\n      , escape = true;\n\n    // uncaught\n    if (err.uncaught) {\n      msg = 'Uncaught ' + msg;\n    }\n\n    // explicitly show diff\n    if (err.showDiff && sameType(actual, expected)) {\n      escape = false;\n      err.actual = actual = stringify(canonicalize(actual));\n      err.expected = expected = stringify(canonicalize(expected));\n    }\n\n    // actual / expected diff\n    if ('string' == typeof actual && 'string' == typeof expected) {\n      fmt = color('error title', '  %s) %s:\\n%s') + color('error stack', '\\n%s\\n');\n      var match = message.match(/^([^:]+): expected/);\n      msg = '\\n      ' + color('error message', match ? match[1] : msg);\n\n      if (exports.inlineDiffs) {\n        msg += inlineDiff(err, escape);\n      } else {\n        msg += unifiedDiff(err, escape);\n      }\n    }\n\n    // indent stack trace without msg\n    stack = stack.slice(index ? index + 1 : index)\n      .replace(/^/gm, '  ');\n\n    console.error(fmt, (i + 1), test.fullTitle(), msg, stack);\n  });\n};\n\n/**\n * Initialize a new `Base` reporter.\n *\n * All other reporters generally\n * inherit from this reporter, providing\n * stats such as test duration, number\n * of tests passed / failed etc.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Base(runner) {\n  var self = this\n    , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }\n    , failures = this.failures = [];\n\n  if (!runner) return;\n  this.runner = runner;\n\n  runner.stats = stats;\n\n  runner.on('start', function(){\n    stats.start = new Date;\n  });\n\n  runner.on('suite', function(suite){\n    stats.suites = stats.suites || 0;\n    suite.root || stats.suites++;\n  });\n\n  runner.on('test end', function(test){\n    stats.tests = stats.tests || 0;\n    stats.tests++;\n  });\n\n  runner.on('pass', function(test){\n    stats.passes = stats.passes || 0;\n\n    var medium = test.slow() / 2;\n    test.speed = test.duration > test.slow()\n      ? 'slow'\n      : test.duration > medium\n        ? 'medium'\n        : 'fast';\n\n    stats.passes++;\n  });\n\n  runner.on('fail', function(test, err){\n    stats.failures = stats.failures || 0;\n    stats.failures++;\n    test.err = err;\n    failures.push(test);\n  });\n\n  runner.on('end', function(){\n    stats.end = new Date;\n    stats.duration = new Date - stats.start;\n  });\n\n  runner.on('pending', function(){\n    stats.pending++;\n  });\n}\n\n/**\n * Output common epilogue used by many of\n * the bundled reporters.\n *\n * @api public\n */\n\nBase.prototype.epilogue = function(){\n  var stats = this.stats;\n  var tests;\n  var fmt;\n\n  console.log();\n\n  // passes\n  fmt = color('bright pass', ' ')\n    + color('green', ' %d passing')\n    + color('light', ' (%s)');\n\n  console.log(fmt,\n    stats.passes || 0,\n    ms(stats.duration));\n\n  // pending\n  if (stats.pending) {\n    fmt = color('pending', ' ')\n      + color('pending', ' %d pending');\n\n    console.log(fmt, stats.pending);\n  }\n\n  // failures\n  if (stats.failures) {\n    fmt = color('fail', '  %d failing');\n\n    console.error(fmt,\n      stats.failures);\n\n    Base.list(this.failures);\n    console.error();\n  }\n\n  console.log();\n};\n\n/**\n * Pad the given `str` to `len`.\n *\n * @param {String} str\n * @param {String} len\n * @return {String}\n * @api private\n */\n\nfunction pad(str, len) {\n  str = String(str);\n  return Array(len - str.length + 1).join(' ') + str;\n}\n\n\n/**\n * Returns an inline diff between 2 strings with coloured ANSI output\n *\n * @param {Error} Error with actual/expected\n * @return {String} Diff\n * @api private\n */\n\nfunction inlineDiff(err, escape) {\n  var msg = errorDiff(err, 'WordsWithSpace', escape);\n\n  // linenos\n  var lines = msg.split('\\n');\n  if (lines.length > 4) {\n    var width = String(lines.length).length;\n    msg = lines.map(function(str, i){\n      return pad(++i, width) + ' |' + ' ' + str;\n    }).join('\\n');\n  }\n\n  // legend\n  msg = '\\n'\n    + color('diff removed', 'actual')\n    + ' '\n    + color('diff added', 'expected')\n    + '\\n\\n'\n    + msg\n    + '\\n';\n\n  // indent\n  msg = msg.replace(/^/gm, '      ');\n  return msg;\n}\n\n/**\n * Returns a unified diff between 2 strings\n *\n * @param {Error} Error with actual/expected\n * @return {String} Diff\n * @api private\n */\n\nfunction unifiedDiff(err, escape) {\n  var indent = '      ';\n  function cleanUp(line) {\n    if (escape) {\n      line = escapeInvisibles(line);\n    }\n    if (line[0] === '+') return indent + colorLines('diff added', line);\n    if (line[0] === '-') return indent + colorLines('diff removed', line);\n    if (line.match(/\\@\\@/)) return null;\n    if (line.match(/\\\\ No newline/)) return null;\n    else return indent + line;\n  }\n  function notBlank(line) {\n    return line != null;\n  }\n  msg = diff.createPatch('string', err.actual, err.expected);\n  var lines = msg.split('\\n').splice(4);\n  return '\\n      '\n         + colorLines('diff added',   '+ expected') + ' '\n         + colorLines('diff removed', '- actual')\n         + '\\n\\n'\n         + lines.map(cleanUp).filter(notBlank).join('\\n');\n}\n\n/**\n * Return a character diff for `err`.\n *\n * @param {Error} err\n * @return {String}\n * @api private\n */\n\nfunction errorDiff(err, type, escape) {\n  var actual   = escape ? escapeInvisibles(err.actual)   : err.actual;\n  var expected = escape ? escapeInvisibles(err.expected) : err.expected;\n  return diff['diff' + type](actual, expected).map(function(str){\n    if (str.added) return colorLines('diff added', str.value);\n    if (str.removed) return colorLines('diff removed', str.value);\n    return str.value;\n  }).join('');\n}\n\n/**\n * Returns a string with all invisible characters in plain text\n *\n * @param {String} line\n * @return {String}\n * @api private\n */\nfunction escapeInvisibles(line) {\n    return line.replace(/\\t/g, '<tab>')\n               .replace(/\\r/g, '<CR>')\n               .replace(/\\n/g, '<LF>\\n');\n}\n\n/**\n * Color lines for `str`, using the color `name`.\n *\n * @param {String} name\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction colorLines(name, str) {\n  return str.split('\\n').map(function(str){\n    return color(name, str);\n  }).join('\\n');\n}\n\n/**\n * Stringify `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api private\n */\n\nfunction stringify(obj) {\n  if (obj instanceof RegExp) return obj.toString();\n  return JSON.stringify(obj, null, 2);\n}\n\n/**\n * Return a new object that has the keys in sorted order.\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\n function canonicalize(obj, stack) {\n   stack = stack || [];\n\n   if (utils.indexOf(stack, obj) !== -1) return obj;\n\n   var canonicalizedObj;\n\n   if ('[object Array]' == {}.toString.call(obj)) {\n     stack.push(obj);\n     canonicalizedObj = utils.map(obj, function(item) {\n       return canonicalize(item, stack);\n     });\n     stack.pop();\n   } else if (typeof obj === 'object' && obj !== null) {\n     stack.push(obj);\n     canonicalizedObj = {};\n     utils.forEach(utils.keys(obj).sort(), function(key) {\n       canonicalizedObj[key] = canonicalize(obj[key], stack);\n     });\n     stack.pop();\n   } else {\n     canonicalizedObj = obj;\n   }\n\n   return canonicalizedObj;\n }\n\n/**\n * Check that a / b have the same type.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Boolean}\n * @api private\n */\n\nfunction sameType(a, b) {\n  a = Object.prototype.toString.call(a);\n  b = Object.prototype.toString.call(b);\n  return a == b;\n}\n\n\n}); // module: reporters/base.js\n\nrequire.register(\"reporters/doc.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , utils = require('../utils');\n\n/**\n * Expose `Doc`.\n */\n\nexports = module.exports = Doc;\n\n/**\n * Initialize a new `Doc` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Doc(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , total = runner.total\n    , indents = 2;\n\n  function indent() {\n    return Array(indents).join('  ');\n  }\n\n  runner.on('suite', function(suite){\n    if (suite.root) return;\n    ++indents;\n    console.log('%s<section class=\"suite\">', indent());\n    ++indents;\n    console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));\n    console.log('%s<dl>', indent());\n  });\n\n  runner.on('suite end', function(suite){\n    if (suite.root) return;\n    console.log('%s</dl>', indent());\n    --indents;\n    console.log('%s</section>', indent());\n    --indents;\n  });\n\n  runner.on('pass', function(test){\n    console.log('%s  <dt>%s</dt>', indent(), utils.escape(test.title));\n    var code = utils.escape(utils.clean(test.fn.toString()));\n    console.log('%s  <dd><pre><code>%s</code></pre></dd>', indent(), code);\n  });\n}\n\n}); // module: reporters/doc.js\n\nrequire.register(\"reporters/dot.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , color = Base.color;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = Dot;\n\n/**\n * Initialize a new `Dot` matrix test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Dot(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , width = Base.window.width * .75 | 0\n    , n = 0;\n\n  runner.on('start', function(){\n    process.stdout.write('\\n  ');\n  });\n\n  runner.on('pending', function(test){\n    process.stdout.write(color('pending', Base.symbols.dot));\n  });\n\n  runner.on('pass', function(test){\n    if (++n % width == 0) process.stdout.write('\\n  ');\n    if ('slow' == test.speed) {\n      process.stdout.write(color('bright yellow', Base.symbols.dot));\n    } else {\n      process.stdout.write(color(test.speed, Base.symbols.dot));\n    }\n  });\n\n  runner.on('fail', function(test, err){\n    if (++n % width == 0) process.stdout.write('\\n  ');\n    process.stdout.write(color('fail', Base.symbols.dot));\n  });\n\n  runner.on('end', function(){\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nDot.prototype = new F;\nDot.prototype.constructor = Dot;\n\n}); // module: reporters/dot.js\n\nrequire.register(\"reporters/html-cov.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar JSONCov = require('./json-cov')\n  , fs = require('browser/fs');\n\n/**\n * Expose `HTMLCov`.\n */\n\nexports = module.exports = HTMLCov;\n\n/**\n * Initialize a new `JsCoverage` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction HTMLCov(runner) {\n  var jade = require('jade')\n    , file = __dirname + '/templates/coverage.jade'\n    , str = fs.readFileSync(file, 'utf8')\n    , fn = jade.compile(str, { filename: file })\n    , self = this;\n\n  JSONCov.call(this, runner, false);\n\n  runner.on('end', function(){\n    process.stdout.write(fn({\n        cov: self.cov\n      , coverageClass: coverageClass\n    }));\n  });\n}\n\n/**\n * Return coverage class for `n`.\n *\n * @return {String}\n * @api private\n */\n\nfunction coverageClass(n) {\n  if (n >= 75) return 'high';\n  if (n >= 50) return 'medium';\n  if (n >= 25) return 'low';\n  return 'terrible';\n}\n}); // module: reporters/html-cov.js\n\nrequire.register(\"reporters/html.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , utils = require('../utils')\n  , Progress = require('../browser/progress')\n  , escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date\n  , setTimeout = global.setTimeout\n  , setInterval = global.setInterval\n  , clearTimeout = global.clearTimeout\n  , clearInterval = global.clearInterval;\n\n/**\n * Expose `HTML`.\n */\n\nexports = module.exports = HTML;\n\n/**\n * Stats template.\n */\n\nvar statsTemplate = '<ul id=\"mocha-stats\">'\n  + '<li class=\"progress\"><canvas width=\"40\" height=\"40\"></canvas></li>'\n  + '<li class=\"passes\"><a href=\"#\">passes:</a> <em>0</em></li>'\n  + '<li class=\"failures\"><a href=\"#\">failures:</a> <em>0</em></li>'\n  + '<li class=\"duration\">duration: <em>0</em>s</li>'\n  + '</ul>';\n\n/**\n * Initialize a new `HTML` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction HTML(runner, root) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , total = runner.total\n    , stat = fragment(statsTemplate)\n    , items = stat.getElementsByTagName('li')\n    , passes = items[1].getElementsByTagName('em')[0]\n    , passesLink = items[1].getElementsByTagName('a')[0]\n    , failures = items[2].getElementsByTagName('em')[0]\n    , failuresLink = items[2].getElementsByTagName('a')[0]\n    , duration = items[3].getElementsByTagName('em')[0]\n    , canvas = stat.getElementsByTagName('canvas')[0]\n    , report = fragment('<ul id=\"mocha-report\"></ul>')\n    , stack = [report]\n    , progress\n    , ctx\n\n  root = root || document.getElementById('mocha');\n\n  if (canvas.getContext) {\n    var ratio = window.devicePixelRatio || 1;\n    canvas.style.width = canvas.width;\n    canvas.style.height = canvas.height;\n    canvas.width *= ratio;\n    canvas.height *= ratio;\n    ctx = canvas.getContext('2d');\n    ctx.scale(ratio, ratio);\n    progress = new Progress;\n  }\n\n  if (!root) return error('#mocha div missing, add it to your document');\n\n  // pass toggle\n  on(passesLink, 'click', function(){\n    unhide();\n    var name = /pass/.test(report.className) ? '' : ' pass';\n    report.className = report.className.replace(/fail|pass/g, '') + name;\n    if (report.className.trim()) hideSuitesWithout('test pass');\n  });\n\n  // failure toggle\n  on(failuresLink, 'click', function(){\n    unhide();\n    var name = /fail/.test(report.className) ? '' : ' fail';\n    report.className = report.className.replace(/fail|pass/g, '') + name;\n    if (report.className.trim()) hideSuitesWithout('test fail');\n  });\n\n  root.appendChild(stat);\n  root.appendChild(report);\n\n  if (progress) progress.size(40);\n\n  runner.on('suite', function(suite){\n    if (suite.root) return;\n\n    // suite\n    var url = self.suiteURL(suite);\n    var el = fragment('<li class=\"suite\"><h1><a href=\"%s\">%s</a></h1></li>', url, escape(suite.title));\n\n    // container\n    stack[0].appendChild(el);\n    stack.unshift(document.createElement('ul'));\n    el.appendChild(stack[0]);\n  });\n\n  runner.on('suite end', function(suite){\n    if (suite.root) return;\n    stack.shift();\n  });\n\n  runner.on('fail', function(test, err){\n    if ('hook' == test.type) runner.emit('test end', test);\n  });\n\n  runner.on('test end', function(test){\n    // TODO: add to stats\n    var percent = stats.tests / this.total * 100 | 0;\n    if (progress) progress.update(percent).draw(ctx);\n\n    // update stats\n    var ms = new Date - stats.start;\n    text(passes, stats.passes);\n    text(failures, stats.failures);\n    text(duration, (ms / 1000).toFixed(2));\n\n    // test\n    if ('passed' == test.state) {\n      var url = self.testURL(test);\n      var el = fragment('<li class=\"test pass %e\"><h2>%e<span class=\"duration\">%ems</span> <a href=\"%s\" class=\"replay\">‣</a></h2></li>', test.speed, test.title, test.duration, url);\n    } else if (test.pending) {\n      var el = fragment('<li class=\"test pass pending\"><h2>%e</h2></li>', test.title);\n    } else {\n      var el = fragment('<li class=\"test fail\"><h2>%e <a href=\"?grep=%e\" class=\"replay\">‣</a></h2></li>', test.title, encodeURIComponent(test.fullTitle()));\n      var str = test.err.stack || test.err.toString();\n\n      // FF / Opera do not add the message\n      if (!~str.indexOf(test.err.message)) {\n        str = test.err.message + '\\n' + str;\n      }\n\n      // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we\n      // check for the result of the stringifying.\n      if ('[object Error]' == str) str = test.err.message;\n\n      // Safari doesn't give you a stack. Let's at least provide a source line.\n      if (!test.err.stack && test.err.sourceURL && test.err.line !== undefined) {\n        str += \"\\n(\" + test.err.sourceURL + \":\" + test.err.line + \")\";\n      }\n\n      el.appendChild(fragment('<pre class=\"error\">%e</pre>', str));\n    }\n\n    // toggle code\n    // TODO: defer\n    if (!test.pending) {\n      var h2 = el.getElementsByTagName('h2')[0];\n\n      on(h2, 'click', function(){\n        pre.style.display = 'none' == pre.style.display\n          ? 'block'\n          : 'none';\n      });\n\n      var pre = fragment('<pre><code>%e</code></pre>', utils.clean(test.fn.toString()));\n      el.appendChild(pre);\n      pre.style.display = 'none';\n    }\n\n    // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.\n    if (stack[0]) stack[0].appendChild(el);\n  });\n}\n\n/**\n * Provide suite URL\n *\n * @param {Object} [suite]\n */\n\nHTML.prototype.suiteURL = function(suite){\n  return '?grep=' + encodeURIComponent(suite.fullTitle());\n};\n\n/**\n * Provide test URL\n *\n * @param {Object} [test]\n */\n\nHTML.prototype.testURL = function(test){\n  return '?grep=' + encodeURIComponent(test.fullTitle());\n};\n\n/**\n * Display error `msg`.\n */\n\nfunction error(msg) {\n  document.body.appendChild(fragment('<div id=\"mocha-error\">%s</div>', msg));\n}\n\n/**\n * Return a DOM fragment from `html`.\n */\n\nfunction fragment(html) {\n  var args = arguments\n    , div = document.createElement('div')\n    , i = 1;\n\n  div.innerHTML = html.replace(/%([se])/g, function(_, type){\n    switch (type) {\n      case 's': return String(args[i++]);\n      case 'e': return escape(args[i++]);\n    }\n  });\n\n  return div.firstChild;\n}\n\n/**\n * Check for suites that do not have elements\n * with `classname`, and hide them.\n */\n\nfunction hideSuitesWithout(classname) {\n  var suites = document.getElementsByClassName('suite');\n  for (var i = 0; i < suites.length; i++) {\n    var els = suites[i].getElementsByClassName(classname);\n    if (0 == els.length) suites[i].className += ' hidden';\n  }\n}\n\n/**\n * Unhide .hidden suites.\n */\n\nfunction unhide() {\n  var els = document.getElementsByClassName('suite hidden');\n  for (var i = 0; i < els.length; ++i) {\n    els[i].className = els[i].className.replace('suite hidden', 'suite');\n  }\n}\n\n/**\n * Set `el` text to `str`.\n */\n\nfunction text(el, str) {\n  if (el.textContent) {\n    el.textContent = str;\n  } else {\n    el.innerText = str;\n  }\n}\n\n/**\n * Listen on `event` with callback `fn`.\n */\n\nfunction on(el, event, fn) {\n  if (el.addEventListener) {\n    el.addEventListener(event, fn, false);\n  } else {\n    el.attachEvent('on' + event, fn);\n  }\n}\n\n}); // module: reporters/html.js\n\nrequire.register(\"reporters/index.js\", function(module, exports, require){\n\nexports.Base = require('./base');\nexports.Dot = require('./dot');\nexports.Doc = require('./doc');\nexports.TAP = require('./tap');\nexports.JSON = require('./json');\nexports.HTML = require('./html');\nexports.List = require('./list');\nexports.Min = require('./min');\nexports.Spec = require('./spec');\nexports.Nyan = require('./nyan');\nexports.XUnit = require('./xunit');\nexports.Markdown = require('./markdown');\nexports.Progress = require('./progress');\nexports.Landing = require('./landing');\nexports.JSONCov = require('./json-cov');\nexports.HTMLCov = require('./html-cov');\nexports.JSONStream = require('./json-stream');\n\n}); // module: reporters/index.js\n\nrequire.register(\"reporters/json-cov.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `JSONCov`.\n */\n\nexports = module.exports = JSONCov;\n\n/**\n * Initialize a new `JsCoverage` reporter.\n *\n * @param {Runner} runner\n * @param {Boolean} output\n * @api public\n */\n\nfunction JSONCov(runner, output) {\n  var self = this\n    , output = 1 == arguments.length ? true : output;\n\n  Base.call(this, runner);\n\n  var tests = []\n    , failures = []\n    , passes = [];\n\n  runner.on('test end', function(test){\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test){\n    passes.push(test);\n  });\n\n  runner.on('fail', function(test){\n    failures.push(test);\n  });\n\n  runner.on('end', function(){\n    var cov = global._$jscoverage || {};\n    var result = self.cov = map(cov);\n    result.stats = self.stats;\n    result.tests = tests.map(clean);\n    result.failures = failures.map(clean);\n    result.passes = passes.map(clean);\n    if (!output) return;\n    process.stdout.write(JSON.stringify(result, null, 2 ));\n  });\n}\n\n/**\n * Map jscoverage data to a JSON structure\n * suitable for reporting.\n *\n * @param {Object} cov\n * @return {Object}\n * @api private\n */\n\nfunction map(cov) {\n  var ret = {\n      instrumentation: 'node-jscoverage'\n    , sloc: 0\n    , hits: 0\n    , misses: 0\n    , coverage: 0\n    , files: []\n  };\n\n  for (var filename in cov) {\n    var data = coverage(filename, cov[filename]);\n    ret.files.push(data);\n    ret.hits += data.hits;\n    ret.misses += data.misses;\n    ret.sloc += data.sloc;\n  }\n\n  ret.files.sort(function(a, b) {\n    return a.filename.localeCompare(b.filename);\n  });\n\n  if (ret.sloc > 0) {\n    ret.coverage = (ret.hits / ret.sloc) * 100;\n  }\n\n  return ret;\n};\n\n/**\n * Map jscoverage data for a single source file\n * to a JSON structure suitable for reporting.\n *\n * @param {String} filename name of the source file\n * @param {Object} data jscoverage coverage data\n * @return {Object}\n * @api private\n */\n\nfunction coverage(filename, data) {\n  var ret = {\n    filename: filename,\n    coverage: 0,\n    hits: 0,\n    misses: 0,\n    sloc: 0,\n    source: {}\n  };\n\n  data.source.forEach(function(line, num){\n    num++;\n\n    if (data[num] === 0) {\n      ret.misses++;\n      ret.sloc++;\n    } else if (data[num] !== undefined) {\n      ret.hits++;\n      ret.sloc++;\n    }\n\n    ret.source[num] = {\n        source: line\n      , coverage: data[num] === undefined\n        ? ''\n        : data[num]\n    };\n  });\n\n  ret.coverage = ret.hits / ret.sloc * 100;\n\n  return ret;\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @param {Object} test\n * @return {Object}\n * @api private\n */\n\nfunction clean(test) {\n  return {\n      title: test.title\n    , fullTitle: test.fullTitle()\n    , duration: test.duration\n  }\n}\n\n}); // module: reporters/json-cov.js\n\nrequire.register(\"reporters/json-stream.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , color = Base.color;\n\n/**\n * Expose `List`.\n */\n\nexports = module.exports = List;\n\n/**\n * Initialize a new `List` test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction List(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , total = runner.total;\n\n  runner.on('start', function(){\n    console.log(JSON.stringify(['start', { total: total }]));\n  });\n\n  runner.on('pass', function(test){\n    console.log(JSON.stringify(['pass', clean(test)]));\n  });\n\n  runner.on('fail', function(test, err){\n    console.log(JSON.stringify(['fail', clean(test)]));\n  });\n\n  runner.on('end', function(){\n    process.stdout.write(JSON.stringify(['end', self.stats]));\n  });\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @param {Object} test\n * @return {Object}\n * @api private\n */\n\nfunction clean(test) {\n  return {\n      title: test.title\n    , fullTitle: test.fullTitle()\n    , duration: test.duration\n  }\n}\n}); // module: reporters/json-stream.js\n\nrequire.register(\"reporters/json.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `JSON`.\n */\n\nexports = module.exports = JSONReporter;\n\n/**\n * Initialize a new `JSON` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction JSONReporter(runner) {\n  var self = this;\n  Base.call(this, runner);\n\n  var tests = []\n    , failures = []\n    , passes = [];\n\n  runner.on('test end', function(test){\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test){\n    passes.push(test);\n  });\n\n  runner.on('fail', function(test){\n    failures.push(test);\n  });\n\n  runner.on('end', function(){\n    var obj = {\n        stats: self.stats\n      , tests: tests.map(clean)\n      , failures: failures.map(clean)\n      , passes: passes.map(clean)\n    };\n\n    process.stdout.write(JSON.stringify(obj, null, 2));\n  });\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @param {Object} test\n * @return {Object}\n * @api private\n */\n\nfunction clean(test) {\n  return {\n      title: test.title\n    , fullTitle: test.fullTitle()\n    , duration: test.duration\n  }\n}\n}); // module: reporters/json.js\n\nrequire.register(\"reporters/landing.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `Landing`.\n */\n\nexports = module.exports = Landing;\n\n/**\n * Airplane color.\n */\n\nBase.colors.plane = 0;\n\n/**\n * Airplane crash color.\n */\n\nBase.colors['plane crash'] = 31;\n\n/**\n * Runway color.\n */\n\nBase.colors.runway = 90;\n\n/**\n * Initialize a new `Landing` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Landing(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , width = Base.window.width * .75 | 0\n    , total = runner.total\n    , stream = process.stdout\n    , plane = color('plane', '✈')\n    , crashed = -1\n    , n = 0;\n\n  function runway() {\n    var buf = Array(width).join('-');\n    return '  ' + color('runway', buf);\n  }\n\n  runner.on('start', function(){\n    stream.write('\\n  ');\n    cursor.hide();\n  });\n\n  runner.on('test end', function(test){\n    // check if the plane crashed\n    var col = -1 == crashed\n      ? width * ++n / total | 0\n      : crashed;\n\n    // show the crash\n    if ('failed' == test.state) {\n      plane = color('plane crash', '✈');\n      crashed = col;\n    }\n\n    // render landing strip\n    stream.write('\\u001b[4F\\n\\n');\n    stream.write(runway());\n    stream.write('\\n  ');\n    stream.write(color('runway', Array(col).join('⋅')));\n    stream.write(plane)\n    stream.write(color('runway', Array(width - col).join('⋅') + '\\n'));\n    stream.write(runway());\n    stream.write('\\u001b[0m');\n  });\n\n  runner.on('end', function(){\n    cursor.show();\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nLanding.prototype = new F;\nLanding.prototype.constructor = Landing;\n\n}); // module: reporters/landing.js\n\nrequire.register(\"reporters/list.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `List`.\n */\n\nexports = module.exports = List;\n\n/**\n * Initialize a new `List` test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction List(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , n = 0;\n\n  runner.on('start', function(){\n    console.log();\n  });\n\n  runner.on('test', function(test){\n    process.stdout.write(color('pass', '    ' + test.fullTitle() + ': '));\n  });\n\n  runner.on('pending', function(test){\n    var fmt = color('checkmark', '  -')\n      + color('pending', ' %s');\n    console.log(fmt, test.fullTitle());\n  });\n\n  runner.on('pass', function(test){\n    var fmt = color('checkmark', '  '+Base.symbols.dot)\n      + color('pass', ' %s: ')\n      + color(test.speed, '%dms');\n    cursor.CR();\n    console.log(fmt, test.fullTitle(), test.duration);\n  });\n\n  runner.on('fail', function(test, err){\n    cursor.CR();\n    console.log(color('fail', '  %d) %s'), ++n, test.fullTitle());\n  });\n\n  runner.on('end', self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nList.prototype = new F;\nList.prototype.constructor = List;\n\n\n}); // module: reporters/list.js\n\nrequire.register(\"reporters/markdown.js\", function(module, exports, require){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , utils = require('../utils');\n\n/**\n * Expose `Markdown`.\n */\n\nexports = module.exports = Markdown;\n\n/**\n * Initialize a new `Markdown` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Markdown(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , level = 0\n    , buf = '';\n\n  function title(str) {\n    return Array(level).join('#') + ' ' + str;\n  }\n\n  function indent() {\n    return Array(level).join('  ');\n  }\n\n  function mapTOC(suite, obj) {\n    var ret = obj;\n    obj = obj[suite.title] = obj[suite.title] || { suite: suite };\n    suite.suites.forEach(function(suite){\n      mapTOC(suite, obj);\n    });\n    return ret;\n  }\n\n  function stringifyTOC(obj, level) {\n    ++level;\n    var buf = '';\n    var link;\n    for (var key in obj) {\n      if ('suite' == key) continue;\n      if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\\n';\n      if (key) buf += Array(level).join('  ') + link;\n      buf += stringifyTOC(obj[key], level);\n    }\n    --level;\n    return buf;\n  }\n\n  function generateTOC(suite) {\n    var obj = mapTOC(suite, {});\n    return stringifyTOC(obj, 0);\n  }\n\n  generateTOC(runner.suite);\n\n  runner.on('suite', function(suite){\n    ++level;\n    var slug = utils.slug(suite.fullTitle());\n    buf += '<a name=\"' + slug + '\"></a>' + '\\n';\n    buf += title(suite.title) + '\\n';\n  });\n\n  runner.on('suite end', function(suite){\n    --level;\n  });\n\n  runner.on('pass', function(test){\n    var code = utils.clean(test.fn.toString());\n    buf += test.title + '.\\n';\n    buf += '\\n```js\\n';\n    buf += code + '\\n';\n    buf += '```\\n\\n';\n  });\n\n  runner.on('end', function(){\n    process.stdout.write('# TOC\\n');\n    process.stdout.write(generateTOC(runner.suite));\n    process.stdout.write(buf);\n  });\n}\n}); // module: reporters/markdown.js\n\nrequire.register(\"reporters/min.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `Min`.\n */\n\nexports = module.exports = Min;\n\n/**\n * Initialize a new `Min` minimal test reporter (best used with --watch).\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Min(runner) {\n  Base.call(this, runner);\n\n  runner.on('start', function(){\n    // clear screen\n    process.stdout.write('\\u001b[2J');\n    // set cursor position\n    process.stdout.write('\\u001b[1;3H');\n  });\n\n  runner.on('end', this.epilogue.bind(this));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nMin.prototype = new F;\nMin.prototype.constructor = Min;\n\n\n}); // module: reporters/min.js\n\nrequire.register(\"reporters/nyan.js\", function(module, exports, require){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , color = Base.color;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = NyanCat;\n\n/**\n * Initialize a new `Dot` matrix test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction NyanCat(runner) {\n  Base.call(this, runner);\n  var self = this\n    , stats = this.stats\n    , width = Base.window.width * .75 | 0\n    , rainbowColors = this.rainbowColors = self.generateColors()\n    , colorIndex = this.colorIndex = 0\n    , numerOfLines = this.numberOfLines = 4\n    , trajectories = this.trajectories = [[], [], [], []]\n    , nyanCatWidth = this.nyanCatWidth = 11\n    , trajectoryWidthMax = this.trajectoryWidthMax = (width - nyanCatWidth)\n    , scoreboardWidth = this.scoreboardWidth = 5\n    , tick = this.tick = 0\n    , n = 0;\n\n  runner.on('start', function(){\n    Base.cursor.hide();\n    self.draw();\n  });\n\n  runner.on('pending', function(test){\n    self.draw();\n  });\n\n  runner.on('pass', function(test){\n    self.draw();\n  });\n\n  runner.on('fail', function(test, err){\n    self.draw();\n  });\n\n  runner.on('end', function(){\n    Base.cursor.show();\n    for (var i = 0; i < self.numberOfLines; i++) write('\\n');\n    self.epilogue();\n  });\n}\n\n/**\n * Draw the nyan cat\n *\n * @api private\n */\n\nNyanCat.prototype.draw = function(){\n  this.appendRainbow();\n  this.drawScoreboard();\n  this.drawRainbow();\n  this.drawNyanCat();\n  this.tick = !this.tick;\n};\n\n/**\n * Draw the \"scoreboard\" showing the number\n * of passes, failures and pending tests.\n *\n * @api private\n */\n\nNyanCat.prototype.drawScoreboard = function(){\n  var stats = this.stats;\n  var colors = Base.colors;\n\n  function draw(color, n) {\n    write(' ');\n    write('\\u001b[' + color + 'm' + n + '\\u001b[0m');\n    write('\\n');\n  }\n\n  draw(colors.green, stats.passes);\n  draw(colors.fail, stats.failures);\n  draw(colors.pending, stats.pending);\n  write('\\n');\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Append the rainbow.\n *\n * @api private\n */\n\nNyanCat.prototype.appendRainbow = function(){\n  var segment = this.tick ? '_' : '-';\n  var rainbowified = this.rainbowify(segment);\n\n  for (var index = 0; index < this.numberOfLines; index++) {\n    var trajectory = this.trajectories[index];\n    if (trajectory.length >= this.trajectoryWidthMax) trajectory.shift();\n    trajectory.push(rainbowified);\n  }\n};\n\n/**\n * Draw the rainbow.\n *\n * @api private\n */\n\nNyanCat.prototype.drawRainbow = function(){\n  var self = this;\n\n  this.trajectories.forEach(function(line, index) {\n    write('\\u001b[' + self.scoreboardWidth + 'C');\n    write(line.join(''));\n    write('\\n');\n  });\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw the nyan cat\n *\n * @api private\n */\n\nNyanCat.prototype.drawNyanCat = function() {\n  var self = this;\n  var startWidth = this.scoreboardWidth + this.trajectories[0].length;\n  var color = '\\u001b[' + startWidth + 'C';\n  var padding = '';\n\n  write(color);\n  write('_,------,');\n  write('\\n');\n\n  write(color);\n  padding = self.tick ? '  ' : '   ';\n  write('_|' + padding + '/\\\\_/\\\\ ');\n  write('\\n');\n\n  write(color);\n  padding = self.tick ? '_' : '__';\n  var tail = self.tick ? '~' : '^';\n  var face;\n  write(tail + '|' + padding + this.face() + ' ');\n  write('\\n');\n\n  write(color);\n  padding = self.tick ? ' ' : '  ';\n  write(padding + '\"\"  \"\" ');\n  write('\\n');\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw nyan cat face.\n *\n * @return {String}\n * @api private\n */\n\nNyanCat.prototype.face = function() {\n  var stats = this.stats;\n  if (stats.failures) {\n    return '( x .x)';\n  } else if (stats.pending) {\n    return '( o .o)';\n  } else if(stats.passes) {\n    return '( ^ .^)';\n  } else {\n    return '( - .-)';\n  }\n}\n\n/**\n * Move cursor up `n`.\n *\n * @param {Number} n\n * @api private\n */\n\nNyanCat.prototype.cursorUp = function(n) {\n  write('\\u001b[' + n + 'A');\n};\n\n/**\n * Move cursor down `n`.\n *\n * @param {Number} n\n * @api private\n */\n\nNyanCat.prototype.cursorDown = function(n) {\n  write('\\u001b[' + n + 'B');\n};\n\n/**\n * Generate rainbow colors.\n *\n * @return {Array}\n * @api private\n */\n\nNyanCat.prototype.generateColors = function(){\n  var colors = [];\n\n  for (var i = 0; i < (6 * 7); i++) {\n    var pi3 = Math.floor(Math.PI / 3);\n    var n = (i * (1.0 / 6));\n    var r = Math.floor(3 * Math.sin(n) + 3);\n    var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);\n    var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);\n    colors.push(36 * r + 6 * g + b + 16);\n  }\n\n  return colors;\n};\n\n/**\n * Apply rainbow to the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nNyanCat.prototype.rainbowify = function(str){\n  var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];\n  this.colorIndex += 1;\n  return '\\u001b[38;5;' + color + 'm' + str + '\\u001b[0m';\n};\n\n/**\n * Stdout helper.\n */\n\nfunction write(string) {\n  process.stdout.write(string);\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nNyanCat.prototype = new F;\nNyanCat.prototype.constructor = NyanCat;\n\n\n}); // module: reporters/nyan.js\n\nrequire.register(\"reporters/progress.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `Progress`.\n */\n\nexports = module.exports = Progress;\n\n/**\n * General progress bar color.\n */\n\nBase.colors.progress = 90;\n\n/**\n * Initialize a new `Progress` bar test reporter.\n *\n * @param {Runner} runner\n * @param {Object} options\n * @api public\n */\n\nfunction Progress(runner, options) {\n  Base.call(this, runner);\n\n  var self = this\n    , options = options || {}\n    , stats = this.stats\n    , width = Base.window.width * .50 | 0\n    , total = runner.total\n    , complete = 0\n    , max = Math.max;\n\n  // default chars\n  options.open = options.open || '[';\n  options.complete = options.complete || '▬';\n  options.incomplete = options.incomplete || Base.symbols.dot;\n  options.close = options.close || ']';\n  options.verbose = false;\n\n  // tests started\n  runner.on('start', function(){\n    console.log();\n    cursor.hide();\n  });\n\n  // tests complete\n  runner.on('test end', function(){\n    complete++;\n    var incomplete = total - complete\n      , percent = complete / total\n      , n = width * percent | 0\n      , i = width - n;\n\n    cursor.CR();\n    process.stdout.write('\\u001b[J');\n    process.stdout.write(color('progress', '  ' + options.open));\n    process.stdout.write(Array(n).join(options.complete));\n    process.stdout.write(Array(i).join(options.incomplete));\n    process.stdout.write(color('progress', options.close));\n    if (options.verbose) {\n      process.stdout.write(color('progress', ' ' + complete + ' of ' + total));\n    }\n  });\n\n  // tests are complete, output some stats\n  // and the failures if any\n  runner.on('end', function(){\n    cursor.show();\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nProgress.prototype = new F;\nProgress.prototype.constructor = Progress;\n\n\n}); // module: reporters/progress.js\n\nrequire.register(\"reporters/spec.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `Spec`.\n */\n\nexports = module.exports = Spec;\n\n/**\n * Initialize a new `Spec` test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Spec(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , indents = 0\n    , n = 0;\n\n  function indent() {\n    return Array(indents).join('  ')\n  }\n\n  runner.on('start', function(){\n    console.log();\n  });\n\n  runner.on('suite', function(suite){\n    ++indents;\n    console.log(color('suite', '%s%s'), indent(), suite.title);\n  });\n\n  runner.on('suite end', function(suite){\n    --indents;\n    if (1 == indents) console.log();\n  });\n\n  runner.on('pending', function(test){\n    var fmt = indent() + color('pending', '  - %s');\n    console.log(fmt, test.title);\n  });\n\n  runner.on('pass', function(test){\n    if ('fast' == test.speed) {\n      var fmt = indent()\n        + color('checkmark', '  ' + Base.symbols.ok)\n        + color('pass', ' %s ');\n      cursor.CR();\n      console.log(fmt, test.title);\n    } else {\n      var fmt = indent()\n        + color('checkmark', '  ' + Base.symbols.ok)\n        + color('pass', ' %s ')\n        + color(test.speed, '(%dms)');\n      cursor.CR();\n      console.log(fmt, test.title, test.duration);\n    }\n  });\n\n  runner.on('fail', function(test, err){\n    cursor.CR();\n    console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);\n  });\n\n  runner.on('end', self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nSpec.prototype = new F;\nSpec.prototype.constructor = Spec;\n\n\n}); // module: reporters/spec.js\n\nrequire.register(\"reporters/tap.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , cursor = Base.cursor\n  , color = Base.color;\n\n/**\n * Expose `TAP`.\n */\n\nexports = module.exports = TAP;\n\n/**\n * Initialize a new `TAP` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction TAP(runner) {\n  Base.call(this, runner);\n\n  var self = this\n    , stats = this.stats\n    , n = 1\n    , passes = 0\n    , failures = 0;\n\n  runner.on('start', function(){\n    var total = runner.grepTotal(runner.suite);\n    console.log('%d..%d', 1, total);\n  });\n\n  runner.on('test end', function(){\n    ++n;\n  });\n\n  runner.on('pending', function(test){\n    console.log('ok %d %s # SKIP -', n, title(test));\n  });\n\n  runner.on('pass', function(test){\n    passes++;\n    console.log('ok %d %s', n, title(test));\n  });\n\n  runner.on('fail', function(test, err){\n    failures++;\n    console.log('not ok %d %s', n, title(test));\n    if (err.stack) console.log(err.stack.replace(/^/gm, '  '));\n  });\n\n  runner.on('end', function(){\n    console.log('# tests ' + (passes + failures));\n    console.log('# pass ' + passes);\n    console.log('# fail ' + failures);\n  });\n}\n\n/**\n * Return a TAP-safe title of `test`\n *\n * @param {Object} test\n * @return {String}\n * @api private\n */\n\nfunction title(test) {\n  return test.fullTitle().replace(/#/g, '');\n}\n\n}); // module: reporters/tap.js\n\nrequire.register(\"reporters/xunit.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base')\n  , utils = require('../utils')\n  , escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date\n  , setTimeout = global.setTimeout\n  , setInterval = global.setInterval\n  , clearTimeout = global.clearTimeout\n  , clearInterval = global.clearInterval;\n\n/**\n * Expose `XUnit`.\n */\n\nexports = module.exports = XUnit;\n\n/**\n * Initialize a new `XUnit` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction XUnit(runner) {\n  Base.call(this, runner);\n  var stats = this.stats\n    , tests = []\n    , self = this;\n\n  runner.on('pending', function(test){\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test){\n    tests.push(test);\n  });\n\n  runner.on('fail', function(test){\n    tests.push(test);\n  });\n\n  runner.on('end', function(){\n    console.log(tag('testsuite', {\n        name: 'Mocha Tests'\n      , tests: stats.tests\n      , failures: stats.failures\n      , errors: stats.failures\n      , skipped: stats.tests - stats.failures - stats.passes\n      , timestamp: (new Date).toUTCString()\n      , time: (stats.duration / 1000) || 0\n    }, false));\n\n    tests.forEach(test);\n    console.log('</testsuite>');\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\n\nfunction F(){};\nF.prototype = Base.prototype;\nXUnit.prototype = new F;\nXUnit.prototype.constructor = XUnit;\n\n\n/**\n * Output tag for the given `test.`\n */\n\nfunction test(test) {\n  var attrs = {\n      classname: test.parent.fullTitle()\n    , name: test.title\n    , time: (test.duration / 1000) || 0\n  };\n\n  if ('failed' == test.state) {\n    var err = test.err;\n    attrs.message = escape(err.message);\n    console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack))));\n  } else if (test.pending) {\n    console.log(tag('testcase', attrs, false, tag('skipped', {}, true)));\n  } else {\n    console.log(tag('testcase', attrs, true) );\n  }\n}\n\n/**\n * HTML tag helper.\n */\n\nfunction tag(name, attrs, close, content) {\n  var end = close ? '/>' : '>'\n    , pairs = []\n    , tag;\n\n  for (var key in attrs) {\n    pairs.push(key + '=\"' + escape(attrs[key]) + '\"');\n  }\n\n  tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;\n  if (content) tag += content + '</' + name + end;\n  return tag;\n}\n\n/**\n * Return cdata escaped CDATA `str`.\n */\n\nfunction cdata(str) {\n  return '<![CDATA[' + escape(str) + ']]>';\n}\n\n}); // module: reporters/xunit.js\n\nrequire.register(\"runnable.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('browser/events').EventEmitter\n  , debug = require('browser/debug')('mocha:runnable')\n  , milliseconds = require('./ms');\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date\n  , setTimeout = global.setTimeout\n  , setInterval = global.setInterval\n  , clearTimeout = global.clearTimeout\n  , clearInterval = global.clearInterval;\n\n/**\n * Object#toString().\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Expose `Runnable`.\n */\n\nmodule.exports = Runnable;\n\n/**\n * Initialize a new `Runnable` with the given `title` and callback `fn`.\n *\n * @param {String} title\n * @param {Function} fn\n * @api private\n */\n\nfunction Runnable(title, fn) {\n  this.title = title;\n  this.fn = fn;\n  this.async = fn && fn.length;\n  this.sync = ! this.async;\n  this._timeout = 2000;\n  this._slow = 75;\n  this.timedOut = false;\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\n\nfunction F(){};\nF.prototype = EventEmitter.prototype;\nRunnable.prototype = new F;\nRunnable.prototype.constructor = Runnable;\n\n\n/**\n * Set & get timeout `ms`.\n *\n * @param {Number|String} ms\n * @return {Runnable|Number} ms or self\n * @api private\n */\n\nRunnable.prototype.timeout = function(ms){\n  if (0 == arguments.length) return this._timeout;\n  if ('string' == typeof ms) ms = milliseconds(ms);\n  debug('timeout %d', ms);\n  this._timeout = ms;\n  if (this.timer) this.resetTimeout();\n  return this;\n};\n\n/**\n * Set & get slow `ms`.\n *\n * @param {Number|String} ms\n * @return {Runnable|Number} ms or self\n * @api private\n */\n\nRunnable.prototype.slow = function(ms){\n  if (0 === arguments.length) return this._slow;\n  if ('string' == typeof ms) ms = milliseconds(ms);\n  debug('timeout %d', ms);\n  this._slow = ms;\n  return this;\n};\n\n/**\n * Return the full title generated by recursively\n * concatenating the parent's full title.\n *\n * @return {String}\n * @api public\n */\n\nRunnable.prototype.fullTitle = function(){\n  return this.parent.fullTitle() + ' ' + this.title;\n};\n\n/**\n * Clear the timeout.\n *\n * @api private\n */\n\nRunnable.prototype.clearTimeout = function(){\n  clearTimeout(this.timer);\n};\n\n/**\n * Inspect the runnable void of private properties.\n *\n * @return {String}\n * @api private\n */\n\nRunnable.prototype.inspect = function(){\n  return JSON.stringify(this, function(key, val){\n    if ('_' == key[0]) return;\n    if ('parent' == key) return '#<Suite>';\n    if ('ctx' == key) return '#<Context>';\n    return val;\n  }, 2);\n};\n\n/**\n * Reset the timeout.\n *\n * @api private\n */\n\nRunnable.prototype.resetTimeout = function(){\n  var self = this;\n  var ms = this.timeout() || 1e9;\n\n  this.clearTimeout();\n  this.timer = setTimeout(function(){\n    self.callback(new Error('timeout of ' + ms + 'ms exceeded'));\n    self.timedOut = true;\n  }, ms);\n};\n\n/**\n * Whitelist these globals for this test run\n *\n * @api private\n */\nRunnable.prototype.globals = function(arr){\n  var self = this;\n  this._allowedGlobals = arr;\n};\n\n/**\n * Run the test and invoke `fn(err)`.\n *\n * @param {Function} fn\n * @api private\n */\n\nRunnable.prototype.run = function(fn){\n  var self = this\n    , ms = this.timeout()\n    , start = new Date\n    , ctx = this.ctx\n    , finished\n    , emitted;\n\n  if (ctx) ctx.runnable(this);\n\n  // timeout\n  if (this.async) {\n    if (ms) {\n      this.timer = setTimeout(function(){\n        done(new Error('timeout of ' + ms + 'ms exceeded'));\n        self.timedOut = true;\n      }, ms);\n    }\n  }\n\n  // called multiple times\n  function multiple(err) {\n    if (emitted) return;\n    emitted = true;\n    self.emit('error', err || new Error('done() called multiple times'));\n  }\n\n  // finished\n  function done(err) {\n    if (self.timedOut) return;\n    if (finished) return multiple(err);\n    self.clearTimeout();\n    self.duration = new Date - start;\n    finished = true;\n    fn(err);\n  }\n\n  // for .resetTimeout()\n  this.callback = done;\n\n  // async\n  if (this.async) {\n    try {\n      this.fn.call(ctx, function(err){\n        if (err instanceof Error || toString.call(err) === \"[object Error]\") return done(err);\n        if (null != err) return done(new Error('done() invoked with non-Error: ' + err));\n        done();\n      });\n    } catch (err) {\n      done(err);\n    }\n    return;\n  }\n\n  if (this.asyncOnly) {\n    return done(new Error('--async-only option in use without declaring `done()`'));\n  }\n\n  // sync\n  try {\n    if (!this.pending) this.fn.call(ctx);\n    this.duration = new Date - start;\n    fn();\n  } catch (err) {\n    fn(err);\n  }\n};\n\n}); // module: runnable.js\n\nrequire.register(\"runner.js\", function(module, exports, require){\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('browser/events').EventEmitter\n  , debug = require('browser/debug')('mocha:runner')\n  , Test = require('./test')\n  , utils = require('./utils')\n  , filter = utils.filter\n  , keys = utils.keys;\n\n/**\n * Non-enumerable globals.\n */\n\nvar globals = [\n  'setTimeout',\n  'clearTimeout',\n  'setInterval',\n  'clearInterval',\n  'XMLHttpRequest',\n  'Date'\n];\n\n/**\n * Expose `Runner`.\n */\n\nmodule.exports = Runner;\n\n/**\n * Initialize a `Runner` for the given `suite`.\n *\n * Events:\n *\n *   - `start`  execution started\n *   - `end`  execution complete\n *   - `suite`  (suite) test suite execution started\n *   - `suite end`  (suite) all tests (and sub-suites) have finished\n *   - `test`  (test) test execution started\n *   - `test end`  (test) test completed\n *   - `hook`  (hook) hook execution started\n *   - `hook end`  (hook) hook complete\n *   - `pass`  (test) test passed\n *   - `fail`  (test, err) test failed\n *   - `pending`  (test) test pending\n *\n * @api public\n */\n\nfunction Runner(suite) {\n  var self = this;\n  this._globals = [];\n  this._abort = false;\n  this.suite = suite;\n  this.total = suite.total();\n  this.failures = 0;\n  this.on('test end', function(test){ self.checkGlobals(test); });\n  this.on('hook end', function(hook){ self.checkGlobals(hook); });\n  this.grep(/.*/);\n  this.globals(this.globalProps().concat(extraGlobals()));\n}\n\n/**\n * Wrapper for setImmediate, process.nextTick, or browser polyfill.\n *\n * @param {Function} fn\n * @api private\n */\n\nRunner.immediately = global.setImmediate || process.nextTick;\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\n\nfunction F(){};\nF.prototype = EventEmitter.prototype;\nRunner.prototype = new F;\nRunner.prototype.constructor = Runner;\n\n\n/**\n * Run tests with full titles matching `re`. Updates runner.total\n * with number of tests matched.\n *\n * @param {RegExp} re\n * @param {Boolean} invert\n * @return {Runner} for chaining\n * @api public\n */\n\nRunner.prototype.grep = function(re, invert){\n  debug('grep %s', re);\n  this._grep = re;\n  this._invert = invert;\n  this.total = this.grepTotal(this.suite);\n  return this;\n};\n\n/**\n * Returns the number of tests matching the grep search for the\n * given suite.\n *\n * @param {Suite} suite\n * @return {Number}\n * @api public\n */\n\nRunner.prototype.grepTotal = function(suite) {\n  var self = this;\n  var total = 0;\n\n  suite.eachTest(function(test){\n    var match = self._grep.test(test.fullTitle());\n    if (self._invert) match = !match;\n    if (match) total++;\n  });\n\n  return total;\n};\n\n/**\n * Return a list of global properties.\n *\n * @return {Array}\n * @api private\n */\n\nRunner.prototype.globalProps = function() {\n  var props = utils.keys(global);\n\n  // non-enumerables\n  for (var i = 0; i < globals.length; ++i) {\n    if (~utils.indexOf(props, globals[i])) continue;\n    props.push(globals[i]);\n  }\n\n  return props;\n};\n\n/**\n * Allow the given `arr` of globals.\n *\n * @param {Array} arr\n * @return {Runner} for chaining\n * @api public\n */\n\nRunner.prototype.globals = function(arr){\n  if (0 == arguments.length) return this._globals;\n  debug('globals %j', arr);\n  this._globals = this._globals.concat(arr);\n  return this;\n};\n\n/**\n * Check for global variable leaks.\n *\n * @api private\n */\n\nRunner.prototype.checkGlobals = function(test){\n  if (this.ignoreLeaks) return;\n  var ok = this._globals;\n\n  var globals = this.globalProps();\n  var isNode = process.kill;\n  var leaks;\n\n  if (test) {\n    ok = ok.concat(test._allowedGlobals || []);\n  }\n\n  if(this.prevGlobalsLength == globals.length) return;\n  this.prevGlobalsLength = globals.length;\n\n  leaks = filterLeaks(ok, globals);\n  this._globals = this._globals.concat(leaks);\n\n  if (leaks.length > 1) {\n    this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + ''));\n  } else if (leaks.length) {\n    this.fail(test, new Error('global leak detected: ' + leaks[0]));\n  }\n};\n\n/**\n * Fail the given `test`.\n *\n * @param {Test} test\n * @param {Error} err\n * @api private\n */\n\nRunner.prototype.fail = function(test, err){\n  ++this.failures;\n  test.state = 'failed';\n\n  if ('string' == typeof err) {\n    err = new Error('the string \"' + err + '\" was thrown, throw an Error :)');\n  }\n\n  this.emit('fail', test, err);\n};\n\n/**\n * Fail the given `hook` with `err`.\n *\n * Hook failures work in the following pattern:\n * - If bail, then exit\n * - Failed `before` hook skips all tests in a suite and subsuites,\n *   but jumps to corresponding `after` hook\n * - Failed `before each` hook skips remaining tests in a\n *   suite and jumps to corresponding `after each` hook,\n *   which is run only once\n * - Failed `after` hook does not alter\n *   execution order\n * - Failed `after each` hook skips remaining tests in a\n *   suite and subsuites, but executes other `after each`\n *   hooks\n *\n * @param {Hook} hook\n * @param {Error} err\n * @api private\n */\n\nRunner.prototype.failHook = function(hook, err){\n  this.fail(hook, err);\n  if (this.suite.bail()) {\n    this.emit('end');\n  }\n};\n\n/**\n * Run hook `name` callbacks and then invoke `fn()`.\n *\n * @param {String} name\n * @param {Function} function\n * @api private\n */\n\nRunner.prototype.hook = function(name, fn){\n  var suite = this.suite\n    , hooks = suite['_' + name]\n    , self = this\n    , timer;\n\n  function next(i) {\n    var hook = hooks[i];\n    if (!hook) return fn();\n    if (self.failures && suite.bail()) return fn();\n    self.currentRunnable = hook;\n\n    hook.ctx.currentTest = self.test;\n\n    self.emit('hook', hook);\n\n    hook.on('error', function(err){\n      self.failHook(hook, err);\n    });\n\n    hook.run(function(err){\n      hook.removeAllListeners('error');\n      var testError = hook.error();\n      if (testError) self.fail(self.test, testError);\n      if (err) {\n        self.failHook(hook, err);\n\n        // stop executing hooks, notify callee of hook err\n        return fn(err);\n      }\n      self.emit('hook end', hook);\n      delete hook.ctx.currentTest;\n      next(++i);\n    });\n  }\n\n  Runner.immediately(function(){\n    next(0);\n  });\n};\n\n/**\n * Run hook `name` for the given array of `suites`\n * in order, and callback `fn(err, errSuite)`.\n *\n * @param {String} name\n * @param {Array} suites\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.hooks = function(name, suites, fn){\n  var self = this\n    , orig = this.suite;\n\n  function next(suite) {\n    self.suite = suite;\n\n    if (!suite) {\n      self.suite = orig;\n      return fn();\n    }\n\n    self.hook(name, function(err){\n      if (err) {\n        var errSuite = self.suite;\n        self.suite = orig;\n        return fn(err, errSuite);\n      }\n\n      next(suites.pop());\n    });\n  }\n\n  next(suites.pop());\n};\n\n/**\n * Run hooks from the top level down.\n *\n * @param {String} name\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.hookUp = function(name, fn){\n  var suites = [this.suite].concat(this.parents()).reverse();\n  this.hooks(name, suites, fn);\n};\n\n/**\n * Run hooks from the bottom up.\n *\n * @param {String} name\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.hookDown = function(name, fn){\n  var suites = [this.suite].concat(this.parents());\n  this.hooks(name, suites, fn);\n};\n\n/**\n * Return an array of parent Suites from\n * closest to furthest.\n *\n * @return {Array}\n * @api private\n */\n\nRunner.prototype.parents = function(){\n  var suite = this.suite\n    , suites = [];\n  while (suite = suite.parent) suites.push(suite);\n  return suites;\n};\n\n/**\n * Run the current test and callback `fn(err)`.\n *\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.runTest = function(fn){\n  var test = this.test\n    , self = this;\n\n  if (this.asyncOnly) test.asyncOnly = true;\n\n  try {\n    test.on('error', function(err){\n      self.fail(test, err);\n    });\n    test.run(fn);\n  } catch (err) {\n    fn(err);\n  }\n};\n\n/**\n * Run tests in the given `suite` and invoke\n * the callback `fn()` when complete.\n *\n * @param {Suite} suite\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.runTests = function(suite, fn){\n  var self = this\n    , tests = suite.tests.slice()\n    , test;\n\n\n  function hookErr(err, errSuite, after) {\n    // before/after Each hook for errSuite failed:\n    var orig = self.suite;\n\n    // for failed 'after each' hook start from errSuite parent,\n    // otherwise start from errSuite itself\n    self.suite = after ? errSuite.parent : errSuite;\n\n    if (self.suite) {\n      // call hookUp afterEach\n      self.hookUp('afterEach', function(err2, errSuite2) {\n        self.suite = orig;\n        // some hooks may fail even now\n        if (err2) return hookErr(err2, errSuite2, true);\n        // report error suite\n        fn(errSuite);\n      });\n    } else {\n      // there is no need calling other 'after each' hooks\n      self.suite = orig;\n      fn(errSuite);\n    }\n  }\n\n  function next(err, errSuite) {\n    // if we bail after first err\n    if (self.failures && suite._bail) return fn();\n\n    if (self._abort) return fn();\n\n    if (err) return hookErr(err, errSuite, true);\n\n    // next test\n    test = tests.shift();\n\n    // all done\n    if (!test) return fn();\n\n    // grep\n    var match = self._grep.test(test.fullTitle());\n    if (self._invert) match = !match;\n    if (!match) return next();\n\n    // pending\n    if (test.pending) {\n      self.emit('pending', test);\n      self.emit('test end', test);\n      return next();\n    }\n\n    // execute test and hook(s)\n    self.emit('test', self.test = test);\n    self.hookDown('beforeEach', function(err, errSuite){\n\n      if (err) return hookErr(err, errSuite, false);\n\n      self.currentRunnable = self.test;\n      self.runTest(function(err){\n        test = self.test;\n\n        if (err) {\n          self.fail(test, err);\n          self.emit('test end', test);\n          return self.hookUp('afterEach', next);\n        }\n\n        test.state = 'passed';\n        self.emit('pass', test);\n        self.emit('test end', test);\n        self.hookUp('afterEach', next);\n      });\n    });\n  }\n\n  this.next = next;\n  next();\n};\n\n/**\n * Run the given `suite` and invoke the\n * callback `fn()` when complete.\n *\n * @param {Suite} suite\n * @param {Function} fn\n * @api private\n */\n\nRunner.prototype.runSuite = function(suite, fn){\n  var total = this.grepTotal(suite)\n    , self = this\n    , i = 0;\n\n  debug('run suite %s', suite.fullTitle());\n\n  if (!total) return fn();\n\n  this.emit('suite', this.suite = suite);\n\n  function next(errSuite) {\n    if (errSuite) {\n      // current suite failed on a hook from errSuite\n      if (errSuite == suite) {\n        // if errSuite is current suite\n        // continue to the next sibling suite\n        return done();\n      } else {\n        // errSuite is among the parents of current suite\n        // stop execution of errSuite and all sub-suites\n        return done(errSuite);\n      }\n    }\n\n    if (self._abort) return done();\n\n    var curr = suite.suites[i++];\n    if (!curr) return done();\n    self.runSuite(curr, next);\n  }\n\n  function done(errSuite) {\n    self.suite = suite;\n    self.hook('afterAll', function(){\n      self.emit('suite end', suite);\n      fn(errSuite);\n    });\n  }\n\n  this.hook('beforeAll', function(err){\n    if (err) return done();\n    self.runTests(suite, next);\n  });\n};\n\n/**\n * Handle uncaught exceptions.\n *\n * @param {Error} err\n * @api private\n */\n\nRunner.prototype.uncaught = function(err){\n  debug('uncaught exception %s', err.message);\n  var runnable = this.currentRunnable;\n  if (!runnable || 'failed' == runnable.state) return;\n  runnable.clearTimeout();\n  err.uncaught = true;\n  this.fail(runnable, err);\n\n  // recover from test\n  if ('test' == runnable.type) {\n    this.emit('test end', runnable);\n    this.hookUp('afterEach', this.next);\n    return;\n  }\n\n  // bail on hooks\n  this.emit('end');\n};\n\n/**\n * Run the root suite and invoke `fn(failures)`\n * on completion.\n *\n * @param {Function} fn\n * @return {Runner} for chaining\n * @api public\n */\n\nRunner.prototype.run = function(fn){\n  var self = this\n    , fn = fn || function(){};\n\n  function uncaught(err){\n    self.uncaught(err);\n  }\n\n  debug('start');\n\n  // callback\n  this.on('end', function(){\n    debug('end');\n    process.removeListener('uncaughtException', uncaught);\n    fn(self.failures);\n  });\n\n  // run suites\n  this.emit('start');\n  this.runSuite(this.suite, function(){\n    debug('finished running');\n    self.emit('end');\n  });\n\n  // uncaught exception\n  process.on('uncaughtException', uncaught);\n\n  return this;\n};\n\n/**\n * Cleanly abort execution\n *\n * @return {Runner} for chaining\n * @api public\n */\nRunner.prototype.abort = function(){\n  debug('aborting');\n  this._abort = true;\n}\n\n/**\n * Filter leaks with the given globals flagged as `ok`.\n *\n * @param {Array} ok\n * @param {Array} globals\n * @return {Array}\n * @api private\n */\n\nfunction filterLeaks(ok, globals) {\n  return filter(globals, function(key){\n    // Firefox and Chrome exposes iframes as index inside the window object\n    if (/^d+/.test(key)) return false;\n\n    // in firefox\n    // if runner runs in an iframe, this iframe's window.getInterface method not init at first\n    // it is assigned in some seconds\n    if (global.navigator && /^getInterface/.test(key)) return false;\n\n    // an iframe could be approached by window[iframeIndex]\n    // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak\n    if (global.navigator && /^\\d+/.test(key)) return false;\n\n    // Opera and IE expose global variables for HTML element IDs (issue #243)\n    if (/^mocha-/.test(key)) return false;\n\n    var matched = filter(ok, function(ok){\n      if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]);\n      return key == ok;\n    });\n    return matched.length == 0 && (!global.navigator || 'onerror' !== key);\n  });\n}\n\n/**\n * Array of globals dependent on the environment.\n *\n * @return {Array}\n * @api private\n */\n\n function extraGlobals() {\n  if (typeof(process) === 'object' &&\n      typeof(process.version) === 'string') {\n\n    var nodeVersion = process.version.split('.').reduce(function(a, v) {\n      return a << 8 | v;\n    });\n\n    // 'errno' was renamed to process._errno in v0.9.11.\n\n    if (nodeVersion < 0x00090B) {\n      return ['errno'];\n    }\n  }\n\n  return [];\n }\n\n}); // module: runner.js\n\nrequire.register(\"suite.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('browser/events').EventEmitter\n  , debug = require('browser/debug')('mocha:suite')\n  , milliseconds = require('./ms')\n  , utils = require('./utils')\n  , Hook = require('./hook');\n\n/**\n * Expose `Suite`.\n */\n\nexports = module.exports = Suite;\n\n/**\n * Create a new `Suite` with the given `title`\n * and parent `Suite`. When a suite with the\n * same title is already present, that suite\n * is returned to provide nicer reporter\n * and more flexible meta-testing.\n *\n * @param {Suite} parent\n * @param {String} title\n * @return {Suite}\n * @api public\n */\n\nexports.create = function(parent, title){\n  var suite = new Suite(title, parent.ctx);\n  suite.parent = parent;\n  if (parent.pending) suite.pending = true;\n  title = suite.fullTitle();\n  parent.addSuite(suite);\n  return suite;\n};\n\n/**\n * Initialize a new `Suite` with the given\n * `title` and `ctx`.\n *\n * @param {String} title\n * @param {Context} ctx\n * @api private\n */\n\nfunction Suite(title, ctx) {\n  this.title = title;\n  this.ctx = ctx;\n  this.suites = [];\n  this.tests = [];\n  this.pending = false;\n  this._beforeEach = [];\n  this._beforeAll = [];\n  this._afterEach = [];\n  this._afterAll = [];\n  this.root = !title;\n  this._timeout = 2000;\n  this._slow = 75;\n  this._bail = false;\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\n\nfunction F(){};\nF.prototype = EventEmitter.prototype;\nSuite.prototype = new F;\nSuite.prototype.constructor = Suite;\n\n\n/**\n * Return a clone of this `Suite`.\n *\n * @return {Suite}\n * @api private\n */\n\nSuite.prototype.clone = function(){\n  var suite = new Suite(this.title);\n  debug('clone');\n  suite.ctx = this.ctx;\n  suite.timeout(this.timeout());\n  suite.slow(this.slow());\n  suite.bail(this.bail());\n  return suite;\n};\n\n/**\n * Set timeout `ms` or short-hand such as \"2s\".\n *\n * @param {Number|String} ms\n * @return {Suite|Number} for chaining\n * @api private\n */\n\nSuite.prototype.timeout = function(ms){\n  if (0 == arguments.length) return this._timeout;\n  if ('string' == typeof ms) ms = milliseconds(ms);\n  debug('timeout %d', ms);\n  this._timeout = parseInt(ms, 10);\n  return this;\n};\n\n/**\n * Set slow `ms` or short-hand such as \"2s\".\n *\n * @param {Number|String} ms\n * @return {Suite|Number} for chaining\n * @api private\n */\n\nSuite.prototype.slow = function(ms){\n  if (0 === arguments.length) return this._slow;\n  if ('string' == typeof ms) ms = milliseconds(ms);\n  debug('slow %d', ms);\n  this._slow = ms;\n  return this;\n};\n\n/**\n * Sets whether to bail after first error.\n *\n * @parma {Boolean} bail\n * @return {Suite|Number} for chaining\n * @api private\n */\n\nSuite.prototype.bail = function(bail){\n  if (0 == arguments.length) return this._bail;\n  debug('bail %s', bail);\n  this._bail = bail;\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` before running tests.\n *\n * @param {Function} fn\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.beforeAll = function(fn){\n  if (this.pending) return this;\n  var hook = new Hook('\"before all\" hook', fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._beforeAll.push(hook);\n  this.emit('beforeAll', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` after running tests.\n *\n * @param {Function} fn\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.afterAll = function(fn){\n  if (this.pending) return this;\n  var hook = new Hook('\"after all\" hook', fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._afterAll.push(hook);\n  this.emit('afterAll', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` before each test case.\n *\n * @param {Function} fn\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.beforeEach = function(fn){\n  if (this.pending) return this;\n  var hook = new Hook('\"before each\" hook', fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._beforeEach.push(hook);\n  this.emit('beforeEach', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` after each test case.\n *\n * @param {Function} fn\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.afterEach = function(fn){\n  if (this.pending) return this;\n  var hook = new Hook('\"after each\" hook', fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._afterEach.push(hook);\n  this.emit('afterEach', hook);\n  return this;\n};\n\n/**\n * Add a test `suite`.\n *\n * @param {Suite} suite\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.addSuite = function(suite){\n  suite.parent = this;\n  suite.timeout(this.timeout());\n  suite.slow(this.slow());\n  suite.bail(this.bail());\n  this.suites.push(suite);\n  this.emit('suite', suite);\n  return this;\n};\n\n/**\n * Add a `test` to this suite.\n *\n * @param {Test} test\n * @return {Suite} for chaining\n * @api private\n */\n\nSuite.prototype.addTest = function(test){\n  test.parent = this;\n  test.timeout(this.timeout());\n  test.slow(this.slow());\n  test.ctx = this.ctx;\n  this.tests.push(test);\n  this.emit('test', test);\n  return this;\n};\n\n/**\n * Return the full title generated by recursively\n * concatenating the parent's full title.\n *\n * @return {String}\n * @api public\n */\n\nSuite.prototype.fullTitle = function(){\n  if (this.parent) {\n    var full = this.parent.fullTitle();\n    if (full) return full + ' ' + this.title;\n  }\n  return this.title;\n};\n\n/**\n * Return the total number of tests.\n *\n * @return {Number}\n * @api public\n */\n\nSuite.prototype.total = function(){\n  return utils.reduce(this.suites, function(sum, suite){\n    return sum + suite.total();\n  }, 0) + this.tests.length;\n};\n\n/**\n * Iterates through each suite recursively to find\n * all tests. Applies a function in the format\n * `fn(test)`.\n *\n * @param {Function} fn\n * @return {Suite}\n * @api private\n */\n\nSuite.prototype.eachTest = function(fn){\n  utils.forEach(this.tests, fn);\n  utils.forEach(this.suites, function(suite){\n    suite.eachTest(fn);\n  });\n  return this;\n};\n\n}); // module: suite.js\n\nrequire.register(\"test.js\", function(module, exports, require){\n\n/**\n * Module dependencies.\n */\n\nvar Runnable = require('./runnable');\n\n/**\n * Expose `Test`.\n */\n\nmodule.exports = Test;\n\n/**\n * Initialize a new `Test` with the given `title` and callback `fn`.\n *\n * @param {String} title\n * @param {Function} fn\n * @api private\n */\n\nfunction Test(title, fn) {\n  Runnable.call(this, title, fn);\n  this.pending = !fn;\n  this.type = 'test';\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\n\nfunction F(){};\nF.prototype = Runnable.prototype;\nTest.prototype = new F;\nTest.prototype.constructor = Test;\n\n\n}); // module: test.js\n\nrequire.register(\"utils.js\", function(module, exports, require){\n/**\n * Module dependencies.\n */\n\nvar fs = require('browser/fs')\n  , path = require('browser/path')\n  , join = path.join\n  , debug = require('browser/debug')('mocha:watch');\n\n/**\n * Ignored directories.\n */\n\nvar ignore = ['node_modules', '.git'];\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {String} html\n * @return {String}\n * @api private\n */\n\nexports.escape = function(html){\n  return String(html)\n    .replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n};\n\n/**\n * Array#forEach (<=IE8)\n *\n * @param {Array} array\n * @param {Function} fn\n * @param {Object} scope\n * @api private\n */\n\nexports.forEach = function(arr, fn, scope){\n  for (var i = 0, l = arr.length; i < l; i++)\n    fn.call(scope, arr[i], i);\n};\n\n/**\n * Array#map (<=IE8)\n *\n * @param {Array} array\n * @param {Function} fn\n * @param {Object} scope\n * @api private\n */\n\nexports.map = function(arr, fn, scope){\n  var result = [];\n  for (var i = 0, l = arr.length; i < l; i++)\n    result.push(fn.call(scope, arr[i], i));\n  return result;\n};\n\n/**\n * Array#indexOf (<=IE8)\n *\n * @parma {Array} arr\n * @param {Object} obj to find index of\n * @param {Number} start\n * @api private\n */\n\nexports.indexOf = function(arr, obj, start){\n  for (var i = start || 0, l = arr.length; i < l; i++) {\n    if (arr[i] === obj)\n      return i;\n  }\n  return -1;\n};\n\n/**\n * Array#reduce (<=IE8)\n *\n * @param {Array} array\n * @param {Function} fn\n * @param {Object} initial value\n * @api private\n */\n\nexports.reduce = function(arr, fn, val){\n  var rval = val;\n\n  for (var i = 0, l = arr.length; i < l; i++) {\n    rval = fn(rval, arr[i], i, arr);\n  }\n\n  return rval;\n};\n\n/**\n * Array#filter (<=IE8)\n *\n * @param {Array} array\n * @param {Function} fn\n * @api private\n */\n\nexports.filter = function(arr, fn){\n  var ret = [];\n\n  for (var i = 0, l = arr.length; i < l; i++) {\n    var val = arr[i];\n    if (fn(val, i, arr)) ret.push(val);\n  }\n\n  return ret;\n};\n\n/**\n * Object.keys (<=IE8)\n *\n * @param {Object} obj\n * @return {Array} keys\n * @api private\n */\n\nexports.keys = Object.keys || function(obj) {\n  var keys = []\n    , has = Object.prototype.hasOwnProperty // for `window` on <=IE8\n\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      keys.push(key);\n    }\n  }\n\n  return keys;\n};\n\n/**\n * Watch the given `files` for changes\n * and invoke `fn(file)` on modification.\n *\n * @param {Array} files\n * @param {Function} fn\n * @api private\n */\n\nexports.watch = function(files, fn){\n  var options = { interval: 100 };\n  files.forEach(function(file){\n    debug('file %s', file);\n    fs.watchFile(file, options, function(curr, prev){\n      if (prev.mtime < curr.mtime) fn(file);\n    });\n  });\n};\n\n/**\n * Ignored files.\n */\n\nfunction ignored(path){\n  return !~ignore.indexOf(path);\n}\n\n/**\n * Lookup files in the given `dir`.\n *\n * @return {Array}\n * @api private\n */\n\nexports.files = function(dir, ret){\n  ret = ret || [];\n\n  fs.readdirSync(dir)\n  .filter(ignored)\n  .forEach(function(path){\n    path = join(dir, path);\n    if (fs.statSync(path).isDirectory()) {\n      exports.files(path, ret);\n    } else if (path.match(/\\.(js|coffee|litcoffee|coffee.md)$/)) {\n      ret.push(path);\n    }\n  });\n\n  return ret;\n};\n\n/**\n * Compute a slug from the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.slug = function(str){\n  return str\n    .toLowerCase()\n    .replace(/ +/g, '-')\n    .replace(/[^-\\w]/g, '');\n};\n\n/**\n * Strip the function definition from `str`,\n * and re-indent for pre whitespace.\n */\n\nexports.clean = function(str) {\n  str = str\n    .replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, \"\\n\").replace(/^\\uFEFF/, '')\n    .replace(/^function *\\(.*\\) *{/, '')\n    .replace(/\\s+\\}$/, '');\n\n  var spaces = str.match(/^\\n?( *)/)[1].length\n    , tabs = str.match(/^\\n?(\\t*)/)[1].length\n    , re = new RegExp('^\\n?' + (tabs ? '\\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm');\n\n  str = str.replace(re, '');\n\n  return exports.trim(str);\n};\n\n/**\n * Escape regular expression characters in `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.escapeRegexp = function(str){\n  return str.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n};\n\n/**\n * Trim the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.trim = function(str){\n  return str.replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Parse the given `qs`.\n *\n * @param {String} qs\n * @return {Object}\n * @api private\n */\n\nexports.parseQuery = function(qs){\n  return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){\n    var i = pair.indexOf('=')\n      , key = pair.slice(0, i)\n      , val = pair.slice(++i);\n\n    obj[key] = decodeURIComponent(val);\n    return obj;\n  }, {});\n};\n\n/**\n * Highlight the given string of `js`.\n *\n * @param {String} js\n * @return {String}\n * @api private\n */\n\nfunction highlight(js) {\n  return js\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\\/\\/(.*)/gm, '<span class=\"comment\">//$1</span>')\n    .replace(/('.*?')/gm, '<span class=\"string\">$1</span>')\n    .replace(/(\\d+\\.\\d+)/gm, '<span class=\"number\">$1</span>')\n    .replace(/(\\d+)/gm, '<span class=\"number\">$1</span>')\n    .replace(/\\bnew *(\\w+)/gm, '<span class=\"keyword\">new</span> <span class=\"init\">$1</span>')\n    .replace(/\\b(function|new|throw|return|var|if|else)\\b/gm, '<span class=\"keyword\">$1</span>')\n}\n\n/**\n * Highlight the contents of tag `name`.\n *\n * @param {String} name\n * @api private\n */\n\nexports.highlightTags = function(name) {\n  var code = document.getElementsByTagName(name);\n  for (var i = 0, len = code.length; i < len; ++i) {\n    code[i].innerHTML = highlight(code[i].innerHTML);\n  }\n};\n\n}); // module: utils.js\n// The global object is \"self\" in Web Workers.\nglobal = (function() { return this; })();\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n\n/**\n * Node shims.\n *\n * These are meant only to allow\n * mocha.js to run untouched, not\n * to allow running node code in\n * the browser.\n */\n\nvar process = {};\nprocess.exit = function(status){};\nprocess.stdout = {};\n\nvar uncaughtExceptionHandlers = [];\n\n/**\n * Remove uncaughtException listener.\n */\n\nprocess.removeListener = function(e, fn){\n  if ('uncaughtException' == e) {\n    global.onerror = function() {};\n    var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn);\n    if (i != -1) { uncaughtExceptionHandlers.splice(i, 1); }\n  }\n};\n\n/**\n * Implements uncaughtException listener.\n */\n\nprocess.on = function(e, fn){\n  if ('uncaughtException' == e) {\n    global.onerror = function(err, url, line){\n      fn(new Error(err + ' (' + url + ':' + line + ')'));\n      return true;\n    };\n    uncaughtExceptionHandlers.push(fn);\n  }\n};\n\n/**\n * Expose mocha.\n */\n\nvar Mocha = global.Mocha = require('mocha'),\n    mocha = global.mocha = new Mocha({ reporter: 'html' });\n\n// The BDD UI is registered by default, but no UI will be functional in the\n// browser without an explicit call to the overridden `mocha.ui` (see below).\n// Ensure that this default UI does not expose its methods to the global scope.\nmocha.suite.removeAllListeners('pre-require');\n\nvar immediateQueue = []\n  , immediateTimeout;\n\nfunction timeslice() {\n  var immediateStart = new Date().getTime();\n  while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) {\n    immediateQueue.shift()();\n  }\n  if (immediateQueue.length) {\n    immediateTimeout = setTimeout(timeslice, 0);\n  } else {\n    immediateTimeout = null;\n  }\n}\n\n/**\n * High-performance override of Runner.immediately.\n */\n\nMocha.Runner.immediately = function(callback) {\n  immediateQueue.push(callback);\n  if (!immediateTimeout) {\n    immediateTimeout = setTimeout(timeslice, 0);\n  }\n};\n\n/**\n * Function to allow assertion libraries to throw errors directly into mocha.\n * This is useful when running tests in a browser because window.onerror will\n * only receive the 'message' attribute of the Error.\n */\nmocha.throwError = function(err) {\n  Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) {\n    fn(err);\n  });\n  throw err;\n};\n\n/**\n * Override ui to ensure that the ui functions are initialized.\n * Normally this would happen in Mocha.prototype.loadFiles.\n */\n\nmocha.ui = function(ui){\n  Mocha.prototype.ui.call(this, ui);\n  this.suite.emit('pre-require', global, null, this);\n  return this;\n};\n\n/**\n * Setup mocha with the given setting options.\n */\n\nmocha.setup = function(opts){\n  if ('string' == typeof opts) opts = { ui: opts };\n  for (var opt in opts) this[opt](opts[opt]);\n  return this;\n};\n\n/**\n * Run mocha, returning the Runner.\n */\n\nmocha.run = function(fn){\n  var options = mocha.options;\n  mocha.globals('location');\n\n  var query = Mocha.utils.parseQuery(global.location.search || '');\n  if (query.grep) mocha.grep(query.grep);\n  if (query.invert) mocha.invert();\n\n  return Mocha.prototype.run.call(mocha, function(){\n    // The DOM Document is not available in Web Workers.\n    if (global.document) {\n      Mocha.utils.highlightTags('code');\n    }\n    if (fn) fn();\n  });\n};\n\n/**\n * Expose the process shim.\n */\n\nMocha.process = process;\n})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/modal-effect/css/component.css",
    "content": "/* General styles for the modal */\n\n/* \nStyles for the html/body for special modal where we want 3d effects\nNote that we need a container wrapping all content on the page for the \nperspective effects (not including the modals and the overlay).\n*/\n.md-perspective,\n.md-perspective body {\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.md-perspective body  {\n\tbackground: #fff;\n\t-webkit-perspective: 600px;\n\t-moz-perspective: 600px;\n\tperspective: 600px;\n}\n\n.container {\n\tmin-height: 100%;\n}\n\n.md-modal {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 50%;\n\tmax-width: 550px;\n\tmin-width: 320px;\n\theight: auto;\n\tz-index: 9999999;\n\tvisibility: hidden;\n\t-webkit-transform: translateX(-50%) translateY(-50%);\n\t-moz-transform: translateX(-50%) translateY(-50%);\n\t-ms-transform: translateX(-50%) translateY(-50%);\n\ttransform: translateX(-50%) translateY(-50%);\n}\n\n.md-show {\n\tvisibility: visible;\n}\n\n.md-overlay {\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\tvisibility: hidden;\n\ttop: 0;\n\tleft: 0;\n\tz-index: 9999995;\n\topacity: 0;\n\tbackground: rgba(1,1,1,0.6);\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show ~ .md-overlay {\n\topacity: 1;\n\tvisibility: visible;\n}\n\n/* Content styles */\n.md-content {\n\tcolor: #5b5b5b;\n\tbackground: #fff;\n\tposition: relative;\n\tborder-radius: 0px;\n\tmargin: 0 auto;\n\tfont-family: 'Nunito', sans-serif !important;\n}\n.md-content .md-close-btn {\n\tposition: absolute;\n\ttop: 10px;\n\tright: 5px;\n\tz-index: 999999;\n}\n.md-content .md-close-btn a{\n\tcolor: #909090;\n\tcursor: pointer;\n}\n.md-content .md-close-btn a:hover{\n\tcolor: #212121;\n}\n.md-content .md-close {\n\tfont-size: 13px;\n\tfont-family: 'Nunito', sans-serif !important;\n}\n\n.md-content h3 {\n\tfont-size: 16px;\n\tfont-weight: 600;\n\tmargin: 0;\n\tpadding: 20px;\n\ttext-align: center;\n\tbackground: #fff;\n\tborder-radius: 0;\n\tcolor: #797979;\n}\n\n.md-content > div {\n\tpadding: 15px 40px 30px;\n\tmargin: 0;\n\tfont-weight: 300;\n\tfont-size: 14px;\n}\n\n.md-content > div p {\n\tmargin: 0;\n\tpadding: 10px 0;\n}\n\n.md-content > div ul {\n\tmargin: 0;\n\tpadding: 0 0 30px 20px;\n}\n\n.md-content > div ul li {\n\tpadding: 5px 0;\n}\n\n\n/* Individual modal styles with animations/transitions */\n\n/* Effect 1: Fade in and scale up */\n.md-effect-1 .md-content {\n\t-webkit-transform: scale(0.7);\n\t-moz-transform: scale(0.7);\n\t-ms-transform: scale(0.7);\n\ttransform: scale(0.7);\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-1 .md-content {\n\t-webkit-transform: scale(1);\n\t-moz-transform: scale(1);\n\t-ms-transform: scale(1);\n\ttransform: scale(1);\n\topacity: 1;\n}\n\n/* Effect 2: Slide from the right */\n.md-effect-2 .md-content {\n\t-webkit-transform: translateX(20%);\n\t-moz-transform: translateX(20%);\n\t-ms-transform: translateX(20%);\n\ttransform: translateX(20%);\n\topacity: 0;\n\t-webkit-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);\n\t-moz-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);\n\ttransition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);\n}\n\n.md-show.md-effect-2 .md-content {\n\t-webkit-transform: translateX(0);\n\t-moz-transform: translateX(0);\n\t-ms-transform: translateX(0);\n\ttransform: translateX(0);\n\topacity: 1;\n}\n\n/* Effect 3: Slide from the bottom */\n.md-effect-3 .md-content {\n\t-webkit-transform: translateY(20%);\n\t-moz-transform: translateY(20%);\n\t-ms-transform: translateY(20%);\n\ttransform: translateY(20%);\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-3 .md-content {\n\t-webkit-transform: translateY(0);\n\t-moz-transform: translateY(0);\n\t-ms-transform: translateY(0);\n\ttransform: translateY(0);\n\topacity: 1;\n}\n\n/* Effect 4: Newspaper */\n.md-effect-4 .md-content {\n\t-webkit-transform: scale(0) rotate(720deg);\n\t-moz-transform: scale(0) rotate(720deg);\n\t-ms-transform: scale(0) rotate(720deg);\n\ttransform: scale(0) rotate(720deg);\n\topacity: 0;\n}\n\n.md-show.md-effect-4 ~ .md-overlay,\n.md-effect-4 .md-content {\n\t-webkit-transition: all 0.5s;\n\t-moz-transition: all 0.5s;\n\ttransition: all 0.5s;\n}\n\n.md-show.md-effect-4 .md-content {\n\t-webkit-transform: scale(1) rotate(0deg);\n\t-moz-transform: scale(1) rotate(0deg);\n\t-ms-transform: scale(1) rotate(0deg);\n\ttransform: scale(1) rotate(0deg);\n\topacity: 1;\n}\n\n/* Effect 5: fall */\n.md-effect-5.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-5 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: translateZ(600px) rotateX(20deg); \n\t-moz-transform: translateZ(600px) rotateX(20deg); \n\t-ms-transform: translateZ(600px) rotateX(20deg); \n\ttransform: translateZ(600px) rotateX(20deg); \n\topacity: 0;\n}\n\n.md-show.md-effect-5 .md-content {\n\t-webkit-transition: all 0.3s ease-in;\n\t-moz-transition: all 0.3s ease-in;\n\ttransition: all 0.3s ease-in;\n\t-webkit-transform: translateZ(0px) rotateX(0deg);\n\t-moz-transform: translateZ(0px) rotateX(0deg);\n\t-ms-transform: translateZ(0px) rotateX(0deg);\n\ttransform: translateZ(0px) rotateX(0deg); \n\topacity: 1;\n}\n\n/* Effect 6: side fall */\n.md-effect-6.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-6 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: translate(30%) translateZ(600px) rotate(10deg); \n\t-moz-transform: translate(30%) translateZ(600px) rotate(10deg);\n\t-ms-transform: translate(30%) translateZ(600px) rotate(10deg);\n\ttransform: translate(30%) translateZ(600px) rotate(10deg); \n\topacity: 0;\n}\n\n.md-show.md-effect-6 .md-content {\n\t-webkit-transition: all 0.3s ease-in;\n\t-moz-transition: all 0.3s ease-in;\n\ttransition: all 0.3s ease-in;\n\t-webkit-transform: translate(0%) translateZ(0) rotate(0deg);\n\t-moz-transform: translate(0%) translateZ(0) rotate(0deg);\n\t-ms-transform: translate(0%) translateZ(0) rotate(0deg);\n\ttransform: translate(0%) translateZ(0) rotate(0deg);\n\topacity: 1;\n}\n\n/* Effect 7:  slide and stick to top */\n.md-effect-7{\n\ttop: 0;\n\t-webkit-transform: translateX(-50%);\n\t-moz-transform: translateX(-50%);\n\t-ms-transform: translateX(-50%);\n\ttransform: translateX(-50%);\n}\n\n.md-effect-7 .md-content {\n\t-webkit-transform: translateY(-200%);\n\t-moz-transform: translateY(-200%);\n\t-ms-transform: translateY(-200%);\n\ttransform: translateY(-200%);\n\t-webkit-transition: all .3s;\n\t-moz-transition: all .3s;\n\ttransition: all .3s;\n\topacity: 0;\n}\n\n.md-show.md-effect-7 .md-content {\n\t-webkit-transform: translateY(0%);\n\t-moz-transform: translateY(0%);\n\t-ms-transform: translateY(0%);\n\ttransform: translateY(0%);\n\tborder-radius: 0 0 3px 3px;\n\topacity: 1;\n}\n\n/* Effect 8: 3D flip horizontal */\n.md-effect-8.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-8 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: rotateY(-70deg);\n\t-moz-transform: rotateY(-70deg);\n\t-ms-transform: rotateY(-70deg);\n\ttransform: rotateY(-70deg);\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n\topacity: 0;\n}\n\n.md-show.md-effect-8 .md-content {\n\t-webkit-transform: rotateY(0deg);\n\t-moz-transform: rotateY(0deg);\n\t-ms-transform: rotateY(0deg);\n\ttransform: rotateY(0deg);\n\topacity: 1;\n}\n\n/* Effect 9: 3D flip vertical */\n.md-effect-9.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-9 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: rotateX(-70deg);\n\t-moz-transform: rotateX(-70deg);\n\t-ms-transform: rotateX(-70deg);\n\ttransform: rotateX(-70deg);\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n\topacity: 0;\n}\n\n.md-show.md-effect-9 .md-content {\n\t-webkit-transform: rotateX(0deg);\n\t-moz-transform: rotateX(0deg);\n\t-ms-transform: rotateX(0deg);\n\ttransform: rotateX(0deg);\n\topacity: 1;\n}\n\n/* Effect 10: 3D sign */\n.md-effect-10.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-10 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: rotateX(-60deg);\n\t-moz-transform: rotateX(-60deg);\n\t-ms-transform: rotateX(-60deg);\n\ttransform: rotateX(-60deg);\n\t-webkit-transform-origin: 50% 0;\n\t-moz-transform-origin: 50% 0;\n\ttransform-origin: 50% 0;\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-10 .md-content {\n\t-webkit-transform: rotateX(0deg);\n\t-moz-transform: rotateX(0deg);\n\t-ms-transform: rotateX(0deg);\n\ttransform: rotateX(0deg);\n\topacity: 1;\n}\n\n/* Effect 11: Super scaled */\n.md-effect-11 .md-content {\n\t-webkit-transform: scale(2);\n\t-moz-transform: scale(2);\n\t-ms-transform: scale(2);\n\ttransform: scale(2);\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-11 .md-content {\n\t-webkit-transform: scale(1);\n\t-moz-transform: scale(1);\n\t-ms-transform: scale(1);\n\ttransform: scale(1);\n\topacity: 1;\n}\n\n/* Effect 12:  Just me */\n.md-effect-12 .md-content {\n\t-webkit-transform: scale(0.8);\n\t-moz-transform: scale(0.8);\n\t-ms-transform: scale(0.8);\n\ttransform: scale(0.8);\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-12 ~ .md-overlay {\n\tbackground: rgba(255,255,255,1);\n} \n\n.md-effect-12 .md-content h3,\n.md-effect-12 .md-content {\n\tbackground: transparent;\n}\n\n.md-show.md-effect-12 .md-content {\n\t-webkit-transform: scale(1);\n\t-moz-transform: scale(1);\n\t-ms-transform: scale(1);\n\ttransform: scale(1);\n\topacity: 1;\n}\n\n/* Effect 13: 3D slit */\n.md-effect-13.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-13 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: translateZ(-3000px) rotateY(90deg);\n\t-moz-transform: translateZ(-3000px) rotateY(90deg);\n\t-ms-transform: translateZ(-3000px) rotateY(90deg);\n\ttransform: translateZ(-3000px) rotateY(90deg);\n\topacity: 0;\n}\n\n.md-show.md-effect-13 .md-content {\n\t-webkit-animation: slit .7s forwards ease-out;\n\t-moz-animation: slit .7s forwards ease-out;\n\tanimation: slit .7s forwards ease-out;\n}\n\n@-webkit-keyframes slit {\n\t50% { -webkit-transform: translateZ(-250px) rotateY(89deg); opacity: .5; -webkit-animation-timing-function: ease-out;}\n\t100% { -webkit-transform: translateZ(0) rotateY(0deg); opacity: 1; }\n}\n\n@-moz-keyframes slit {\n\t50% { -moz-transform: translateZ(-250px) rotateY(89deg); opacity: .5; -moz-animation-timing-function: ease-out;}\n\t100% { -moz-transform: translateZ(0) rotateY(0deg); opacity: 1; }\n}\n\n@keyframes slit {\n\t50% { transform: translateZ(-250px) rotateY(89deg); opacity: 1; animation-timing-function: ease-in;}\n\t100% { transform: translateZ(0) rotateY(0deg); opacity: 1; }\n}\n\n/* Effect 14:  3D Rotate from bottom */\n.md-effect-14.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-14 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: translateY(100%) rotateX(90deg);\n\t-moz-transform: translateY(100%) rotateX(90deg);\n\t-ms-transform: translateY(100%) rotateX(90deg);\n\ttransform: translateY(100%) rotateX(90deg);\n\t-webkit-transform-origin: 0 100%;\n\t-moz-transform-origin: 0 100%;\n\ttransform-origin: 0 100%;\n\topacity: 0;\n\t-webkit-transition: all 0.3s ease-out;\n\t-moz-transition: all 0.3s ease-out;\n\ttransition: all 0.3s ease-out;\n}\n\n.md-show.md-effect-14 .md-content {\n\t-webkit-transform: translateY(0%) rotateX(0deg);\n\t-moz-transform: translateY(0%) rotateX(0deg);\n\t-ms-transform: translateY(0%) rotateX(0deg);\n\ttransform: translateY(0%) rotateX(0deg);\n\topacity: 1;\n}\n\n/* Effect 15:  3D Rotate in from left */\n.md-effect-15.md-modal {\n\t-webkit-perspective: 1300px;\n\t-moz-perspective: 1300px;\n\tperspective: 1300px;\n}\n\n.md-effect-15 .md-content {\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n\t-webkit-transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n\t-moz-transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n\t-ms-transform: translateZ(100px) translateX(-30%) rotateY(90deg);\n\ttransform: translateZ(100px) translateX(-30%) rotateY(90deg);\n\t-webkit-transform-origin: 0 100%;\n\t-moz-transform-origin: 0 100%;\n\ttransform-origin: 0 100%;\n\topacity: 0;\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-15 .md-content {\n\t-webkit-transform: translateZ(0px) translateX(0%) rotateY(0deg);\n\t-moz-transform: translateZ(0px) translateX(0%) rotateY(0deg);\n\t-ms-transform: translateZ(0px) translateX(0%) rotateY(0deg);\n\ttransform: translateZ(0px) translateX(0%) rotateY(0deg);\n\topacity: 1;\n}\n\n/* Effect 16:  Blur */\n.md-show.md-effect-16 ~ .md-overlay {\n\tbackground: rgba(1,1,1,0.6);\n}\n\n.md-show.md-effect-16 ~ .container {\n\t-webkit-filter: blur(3px);\n\t-moz-filter: blur(3px);\n\tfilter: blur(3px);\n}\n\n.md-effect-16 .md-content {\n\t-webkit-transform: translateY(-5%);\n\t-moz-transform: translateY(-5%);\n\t-ms-transform: translateY(-5%);\n\ttransform: translateY(-5%);\n\topacity: 0;\n}\n\n.md-show.md-effect-16 ~ .container,\n.md-effect-16 .md-content {\n\t-webkit-transition: all 0.3s;\n\t-moz-transition: all 0.3s;\n\ttransition: all 0.3s;\n}\n\n.md-show.md-effect-16 .md-content {\n\t-webkit-transform: translateY(0);\n\t-moz-transform: translateY(0);\n\t-ms-transform: translateY(0);\n\ttransform: translateY(0);\n\topacity: 1;\n}\n\n/* Effect 17:  Slide in from bottom with perspective on container */\n.md-show.md-effect-17 ~ .container {\n\theight: 100%;\n\toverflow: hidden;\n\t-webkit-transition: -webkit-transform 0.3s;\n\t-moz-transition: -moz-transform 0.3s;\n\ttransition: transform 0.3s;\n}\t\n\n.md-show.md-effect-17 ~ .container,\n.md-show.md-effect-17 ~ .md-overlay  {\n\t-webkit-transform: rotateX(-2deg);\n\t-moz-transform: rotateX(-2deg);\n\t-ms-transform: rotateX(-2deg);\n\ttransform: rotateX(-2deg);\n\t-webkit-transform-origin: 50% 0%;\n\t-moz-transform-origin: 50% 0%;\n\ttransform-origin: 50% 0%;\n\t-webkit-transform-style: preserve-3d;\n\t-moz-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n\n.md-effect-17 .md-content {\n\topacity: 0;\n\t-webkit-transform: translateY(200%);\n\t-moz-transform: translateY(200%);\n\t-ms-transform: translateY(200%);\n\ttransform: translateY(200%);\n}\n\n.md-show.md-effect-17 .md-content {\n\t-webkit-transform: translateY(0);\n\t-moz-transform: translateY(0);\n\t-ms-transform: translateY(0);\n\ttransform: translateY(0);\n\topacity: 1;\n\t-webkit-transition: all 0.3s 0.2s;\n\t-moz-transition: all 0.3s 0.2s;\n\ttransition: all 0.3s 0.2s;\n}\n\n/* Effect 18:  Slide from right with perspective on container */\n.md-show.md-effect-18 ~ .container {\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.md-show.md-effect-18 ~ .md-overlay {\n\tbackground: rgba(1,1,1,0.6);\n\t-webkit-transition: all 0.5s;\n\t-moz-transition: all 0.5s;\n\ttransition: all 0.5s;\n}\n\n.md-show.md-effect-18 ~ .container,\n.md-show.md-effect-18 ~ .md-overlay {\n\t-webkit-transform-style: preserve-3d;\n\t-webkit-transform-origin: 0% 50%;\n\t-webkit-animation: rotateRightSideFirst 0.5s forwards ease-in;\n\t-moz-transform-style: preserve-3d;\n\t-moz-transform-origin: 0% 50%;\n\t-moz-animation: rotateRightSideFirst 0.5s forwards ease-in;\n\ttransform-style: preserve-3d;\n\ttransform-origin: 0% 50%;\n\tanimation: rotateRightSideFirst 0.5s forwards ease-in;\n}\n\n@-webkit-keyframes rotateRightSideFirst {\n\t50% { -webkit-transform: translateZ(-50px) rotateY(5deg); -webkit-animation-timing-function: ease-out; }\n\t100% { -webkit-transform: translateZ(-200px); }\n}\n\n@-moz-keyframes rotateRightSideFirst {\n\t50% { -moz-transform: translateZ(-50px) rotateY(5deg); -moz-animation-timing-function: ease-out; }\n\t100% { -moz-transform: translateZ(-200px); }\n}\n\n@keyframes rotateRightSideFirst {\n\t50% { transform: translateZ(-50px) rotateY(5deg); animation-timing-function: ease-out; }\n\t100% { transform: translateZ(-200px); }\n}\n\n.md-effect-18 .md-content {\n\t-webkit-transform: translateX(200%);\n\t-moz-transform: translateX(200%);\n\t-ms-transform: translateX(200%);\n\ttransform: translateX(200%);\n\topacity: 0;\n}\n\n.md-show.md-effect-18 .md-content {\n\t-webkit-transform: translateX(0);\n\t-moz-transform: translateX(0);\n\t-ms-transform: translateX(0);\n\ttransform: translateX(0);\n\topacity: 1;\n\t-webkit-transition: all 0.5s 0.1s;\n\t-moz-transition: all 0.5s 0.1s;\n\ttransition: all 0.5s 0.1s;\n}\n\n/* Effect 19:  Slip in from the top with perspective on container */\n.md-show.md-effect-19 ~ .container {\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.md-show.md-effect-19 ~ .md-overlay {\n\t-webkit-transition: all 0.5s;\n\t-moz-transition: all 0.5s;\n\ttransition: all 0.5s;\n}\n\n.md-show.md-effect-19 ~ .container,\n.md-show.md-effect-19 ~ .md-overlay {\n\t-webkit-transform-style: preserve-3d;\n\t-webkit-transform-origin: 50% 100%;\n\t-webkit-animation: OpenTop 0.5s forwards ease-in;\n\t-moz-transform-style: preserve-3d;\n\t-moz-transform-origin: 50% 100%;\n\t-moz-animation: OpenTop 0.5s forwards ease-in;\n\ttransform-style: preserve-3d;\n\ttransform-origin: 50% 100%;\n\tanimation: OpenTop 0.5s forwards ease-in;\n}\n\n@-webkit-keyframes OpenTop {\n\t50% { \n\t\t-webkit-transform: rotateX(10deg); \n\t\t-webkit-animation-timing-function: ease-out; \n\t}\n}\n\n@-moz-keyframes OpenTop {\n\t50% { \n\t\t-moz-transform: rotateX(10deg); \n\t\t-moz-animation-timing-function: ease-out; \n\t}\n}\n\n@keyframes OpenTop {\n\t50% { \n\t\ttransform: rotateX(10deg); \n\t\tanimation-timing-function: ease-out; \n\t}\n}\n\n.md-effect-19 .md-content {\n\t-webkit-transform: translateY(-200%);\n\t-moz-transform: translateY(-200%);\n\t-ms-transform: translateY(-200%);\n\ttransform: translateY(-200%);\n\topacity: 0;\n}\n\n.md-show.md-effect-19 .md-content {\n\t-webkit-transform: translateY(0);\n\t-moz-transform: translateY(0);\n\t-ms-transform: translateY(0);\n\ttransform: translateY(0);\n\topacity: 1;\n\t-webkit-transition: all 0.5s 0.1s;\n\t-moz-transition: all 0.5s 0.1s;\n\ttransition: all 0.5s 0.1s;\n}\n\n@media screen and (max-width: 32em) {\n\tbody { font-size: 75%; }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/modal-effect/js/classie.js",
    "content": "/*!\n * classie - class helper functions\n * from bonzo https://github.com/ded/bonzo\n * \n * classie.has( elem, 'my-class' ) -> true/false\n * classie.add( elem, 'my-new-class' )\n * classie.remove( elem, 'my-unwanted-class' )\n * classie.toggle( elem, 'my-class' )\n */\n\n/*jshint browser: true, strict: true, undef: true */\n/*global define: false */\n\n( function( window ) {\n\n'use strict';\n\n// class helper functions from bonzo https://github.com/ded/bonzo\n\nfunction classReg( className ) {\n  return new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\");\n}\n\n// classList support for class management\n// altho to be fair, the api sucks because it won't accept multiple classes at once\nvar hasClass, addClass, removeClass;\n\nif ( 'classList' in document.documentElement ) {\n  hasClass = function( elem, c ) {\n    return elem.classList.contains( c );\n  };\n  addClass = function( elem, c ) {\n    elem.classList.add( c );\n  };\n  removeClass = function( elem, c ) {\n    elem.classList.remove( c );\n  };\n}\nelse {\n  hasClass = function( elem, c ) {\n    return classReg( c ).test( elem.className );\n  };\n  addClass = function( elem, c ) {\n    if ( !hasClass( elem, c ) ) {\n      elem.className = elem.className + ' ' + c;\n    }\n  };\n  removeClass = function( elem, c ) {\n    elem.className = elem.className.replace( classReg( c ), ' ' );\n  };\n}\n\nfunction toggleClass( elem, c ) {\n  var fn = hasClass( elem, c ) ? removeClass : addClass;\n  fn( elem, c );\n}\n\nvar classie = {\n  // full names\n  hasClass: hasClass,\n  addClass: addClass,\n  removeClass: removeClass,\n  toggleClass: toggleClass,\n  // short names\n  has: hasClass,\n  add: addClass,\n  remove: removeClass,\n  toggle: toggleClass\n};\n\n// transport\nif ( typeof define === 'function' && define.amd ) {\n  // AMD\n  define( classie );\n} else {\n  // browser global\n  window.classie = classie;\n}\n\n})( window );\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/modal-effect/js/modalEffects.js",
    "content": "/**\n * modalEffects.js v1.0.0\n * http://www.codrops.com\n *\n * Licensed under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n * \n * Copyright 2013, Codrops\n * http://www.codrops.com\n */\nvar ModalEffects = (function() {\n\n\tfunction init() {\n\n\t\tvar overlay = document.querySelector( '.md-overlay' );\n\n\t\t[].slice.call( document.querySelectorAll( '.md-trigger' ) ).forEach( function( el, i ) {\n\n\t\t\tvar modal = document.querySelector( '#' + el.getAttribute( 'data-modal' ) ),\n\t\t\t\tclose = modal.querySelector( '.md-close' );\n\n\t\t\tfunction removeModal( hasPerspective ) {\n\t\t\t\tclassie.remove( modal, 'md-show' );\n\n\t\t\t\tif( hasPerspective ) {\n\t\t\t\t\tclassie.remove( document.documentElement, 'md-perspective' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction removeModalHandler() {\n\t\t\t\tremoveModal( classie.has( el, 'md-setperspective' ) ); \n\t\t\t}\n\n\t\t\tel.addEventListener( 'click', function( ev ) {\n\t\t\t\tclassie.add( modal, 'md-show' );\n\t\t\t\toverlay.removeEventListener( 'click', removeModalHandler );\n\t\t\t\toverlay.addEventListener( 'click', removeModalHandler );\n\n\t\t\t\tif( classie.has( el, 'md-setperspective' ) ) {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tclassie.add( document.documentElement, 'md-perspective' );\n\t\t\t\t\t}, 25 );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclose.addEventListener( 'click', function( ev ) {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tremoveModalHandler();\n\t\t\t});\n\n\t\t} );\n\n\t}\n\n\tinit();\n\n})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/moment/moment.js",
    "content": "//! moment.js\n//! version : 2.14.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, function () { 'use strict';\n\n    var hookCallback;\n\n    function utils_hooks__hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        return Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        var k;\n        for (k in obj) {\n            // even if its not own property I'd still call it non-empty\n            return false;\n        }\n        return true;\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function create_utc__createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function valid__isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            m._isValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                m._isValid = m._isValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        return m._isValid;\n    }\n\n    function valid__createInvalid (flags) {\n        var m = create_utc__createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = utils_hooks__hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i in momentProperties) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            utils_hooks__hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (utils_hooks__hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (utils_hooks__hooks.deprecationHandler != null) {\n                utils_hooks__hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (utils_hooks__hooks.deprecationHandler != null) {\n            utils_hooks__hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    utils_hooks__hooks.suppressDeprecationWarnings = false;\n    utils_hooks__hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function locale_set__set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _ordinalParseLenient.\n        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function locale_calendar__calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relative__relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                get_set__set(this, unit, value);\n                utils_hooks__hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get_set__get(this, unit);\n            }\n        };\n    }\n\n    function get_set__get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function get_set__set (mom, unit, value) {\n        if (mom.isValid()) {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (typeof callback === 'number') {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function units_month__handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = create_utc__createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return units_month__handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (typeof value !== 'number') {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            utils_hooks__hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get_set__get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    utils_hooks__hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        //can't just apply() to create a date:\n        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        //the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n\n        //the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        return isArray(this._weekdays) ? this._weekdays[m.day()] :\n            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return this._weekdaysShort[m.day()];\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return this._weekdaysMin[m.day()];\n    }\n\n    function day_of_week__handleStrictParse(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = create_utc__createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return day_of_week__handleStrictParse.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = create_utc__createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = create_utc__createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour he wants. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        ordinalParse: defaultOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                require('./locale/' + name);\n                // because defineLocale currently also sets the global locale, we\n                // want to undo that for lazy loaded locales\n                locale_locales__getSetGlobalLocale(oldLocale);\n            } catch (e) { }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function locale_locales__getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = locale_locales__getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    // treat as if there is no base config\n                    deprecateSimple('parentLocaleUndefined',\n                            'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            // backwards compat for now: also set the locale\n            locale_locales__getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, parentConfig = baseConfig;\n            // MERGE\n            if (locales[name] != null) {\n                parentConfig = locales[name]._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            locale_locales__getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function locale_locales__getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function locale_locales__listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    utils_hooks__hooks.createFromInputFallback = deprecate(\n        'moment construction falls back to js Date. This is ' +\n        'discouraged and will be removed in upcoming major ' +\n        'release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(utils_hooks__hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse)) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);\n            week = defaults(w.w, 1);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    utils_hooks__hooks.ISO_8601 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === utils_hooks__hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!valid__isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || locale_locales__getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return valid__createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!valid__isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (input === undefined) {\n            config._d = new Date(utils_hooks__hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (typeof(input) === 'object') {\n            configFromObject(config);\n        } else if (typeof(input) === 'number') {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            utils_hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (typeof(locale) === 'boolean') {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function local__createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return valid__createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return valid__createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return local__createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = locale_locales__getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = ((string || '').match(matcher) || []);\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            utils_hooks__hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return local__createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    utils_hooks__hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n            } else if (Math.abs(input) < 16) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    utils_hooks__hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm) {\n            this.utcOffset(this._tzm);\n        } else if (typeof this._i === 'string') {\n            this.utcOffset(offsetFromString(matchOffset, this._i));\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? local__createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?\\d*)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\n    function create__createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (typeof input === 'number') {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])        * sign,\n                h  : toInt(match[HOUR])        * sign,\n                m  : toInt(match[MINUTE])      * sign,\n                s  : toInt(match[SECOND])      * sign,\n                ms : toInt(match[MILLISECOND]) * sign\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    create__createDuration.fn = Duration.prototype;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = create__createDuration(val, period);\n            add_subtract__addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (days) {\n            get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);\n        }\n        if (months) {\n            setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);\n        }\n        if (updateOffset) {\n            utils_hooks__hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add_subtract__add      = createAdder(1, 'add');\n    var add_subtract__subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function moment_calendar__calendar (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || local__createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, local__createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : local__createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input,units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input,units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            delta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        if (units === 'year' || units === 'month' || units === 'quarter') {\n            output = monthDiff(this, that);\n            if (units === 'quarter') {\n                output = output / 3;\n            } else if (units === 'year') {\n                output = output / 12;\n            }\n        } else {\n            delta = this - that;\n            output = units === 'second' ? delta / 1e3 : // 1000\n                units === 'minute' ? delta / 6e4 : // 1000 * 60\n                units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n                units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n                units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n                delta;\n        }\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function moment_format__toISOString () {\n        var m = this.clone().utc();\n        if (0 < m.year() && m.year() <= 9999) {\n            if (isFunction(Date.prototype.toISOString)) {\n                // native implementation is ~50x faster, use it when we can\n                return this.toDate().toISOString();\n            } else {\n                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n            }\n        } else {\n            return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 local__createLocal(time).isValid())) {\n            return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(local__createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 local__createLocal(time).isValid())) {\n            return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(local__createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = locale_locales__getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n            case 'year':\n                this.month(0);\n                /* falls through */\n            case 'quarter':\n            case 'month':\n                this.date(1);\n                /* falls through */\n            case 'week':\n            case 'isoWeek':\n            case 'day':\n            case 'date':\n                this.hours(0);\n                /* falls through */\n            case 'hour':\n                this.minutes(0);\n                /* falls through */\n            case 'minute':\n                this.seconds(0);\n                /* falls through */\n            case 'second':\n                this.milliseconds(0);\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n\n        // 'date' is an alias for 'day', so it should be considered as such.\n        if (units === 'date') {\n            units = 'day';\n        }\n\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function to_type__valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function moment_valid__isValid () {\n        return valid__isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = utils_hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIOROITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0], 10);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var momentPrototype__proto = Moment.prototype;\n\n    momentPrototype__proto.add               = add_subtract__add;\n    momentPrototype__proto.calendar          = moment_calendar__calendar;\n    momentPrototype__proto.clone             = clone;\n    momentPrototype__proto.diff              = diff;\n    momentPrototype__proto.endOf             = endOf;\n    momentPrototype__proto.format            = format;\n    momentPrototype__proto.from              = from;\n    momentPrototype__proto.fromNow           = fromNow;\n    momentPrototype__proto.to                = to;\n    momentPrototype__proto.toNow             = toNow;\n    momentPrototype__proto.get               = stringGet;\n    momentPrototype__proto.invalidAt         = invalidAt;\n    momentPrototype__proto.isAfter           = isAfter;\n    momentPrototype__proto.isBefore          = isBefore;\n    momentPrototype__proto.isBetween         = isBetween;\n    momentPrototype__proto.isSame            = isSame;\n    momentPrototype__proto.isSameOrAfter     = isSameOrAfter;\n    momentPrototype__proto.isSameOrBefore    = isSameOrBefore;\n    momentPrototype__proto.isValid           = moment_valid__isValid;\n    momentPrototype__proto.lang              = lang;\n    momentPrototype__proto.locale            = locale;\n    momentPrototype__proto.localeData        = localeData;\n    momentPrototype__proto.max               = prototypeMax;\n    momentPrototype__proto.min               = prototypeMin;\n    momentPrototype__proto.parsingFlags      = parsingFlags;\n    momentPrototype__proto.set               = stringSet;\n    momentPrototype__proto.startOf           = startOf;\n    momentPrototype__proto.subtract          = add_subtract__subtract;\n    momentPrototype__proto.toArray           = toArray;\n    momentPrototype__proto.toObject          = toObject;\n    momentPrototype__proto.toDate            = toDate;\n    momentPrototype__proto.toISOString       = moment_format__toISOString;\n    momentPrototype__proto.toJSON            = toJSON;\n    momentPrototype__proto.toString          = toString;\n    momentPrototype__proto.unix              = unix;\n    momentPrototype__proto.valueOf           = to_type__valueOf;\n    momentPrototype__proto.creationData      = creationData;\n\n    // Year\n    momentPrototype__proto.year       = getSetYear;\n    momentPrototype__proto.isLeapYear = getIsLeapYear;\n\n    // Week Year\n    momentPrototype__proto.weekYear    = getSetWeekYear;\n    momentPrototype__proto.isoWeekYear = getSetISOWeekYear;\n\n    // Quarter\n    momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;\n\n    // Month\n    momentPrototype__proto.month       = getSetMonth;\n    momentPrototype__proto.daysInMonth = getDaysInMonth;\n\n    // Week\n    momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;\n    momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;\n    momentPrototype__proto.weeksInYear    = getWeeksInYear;\n    momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;\n\n    // Day\n    momentPrototype__proto.date       = getSetDayOfMonth;\n    momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;\n    momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;\n    momentPrototype__proto.isoWeekday = getSetISODayOfWeek;\n    momentPrototype__proto.dayOfYear  = getSetDayOfYear;\n\n    // Hour\n    momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;\n\n    // Minute\n    momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;\n\n    // Second\n    momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;\n\n    // Millisecond\n    momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;\n\n    // Offset\n    momentPrototype__proto.utcOffset            = getSetOffset;\n    momentPrototype__proto.utc                  = setOffsetToUTC;\n    momentPrototype__proto.local                = setOffsetToLocal;\n    momentPrototype__proto.parseZone            = setOffsetToParsedOffset;\n    momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    momentPrototype__proto.isDST                = isDaylightSavingTime;\n    momentPrototype__proto.isLocal              = isLocal;\n    momentPrototype__proto.isUtcOffset          = isUtcOffset;\n    momentPrototype__proto.isUtc                = isUtc;\n    momentPrototype__proto.isUTC                = isUtc;\n\n    // Timezone\n    momentPrototype__proto.zoneAbbr = getZoneAbbr;\n    momentPrototype__proto.zoneName = getZoneName;\n\n    // Deprecations\n    momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    var momentPrototype = momentPrototype__proto;\n\n    function moment__createUnix (input) {\n        return local__createLocal(input * 1000);\n    }\n\n    function moment__createInZone () {\n        return local__createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var prototype__proto = Locale.prototype;\n\n    prototype__proto.calendar        = locale_calendar__calendar;\n    prototype__proto.longDateFormat  = longDateFormat;\n    prototype__proto.invalidDate     = invalidDate;\n    prototype__proto.ordinal         = ordinal;\n    prototype__proto.preparse        = preParsePostFormat;\n    prototype__proto.postformat      = preParsePostFormat;\n    prototype__proto.relativeTime    = relative__relativeTime;\n    prototype__proto.pastFuture      = pastFuture;\n    prototype__proto.set             = locale_set__set;\n\n    // Month\n    prototype__proto.months            =        localeMonths;\n    prototype__proto.monthsShort       =        localeMonthsShort;\n    prototype__proto.monthsParse       =        localeMonthsParse;\n    prototype__proto.monthsRegex       = monthsRegex;\n    prototype__proto.monthsShortRegex  = monthsShortRegex;\n\n    // Week\n    prototype__proto.week = localeWeek;\n    prototype__proto.firstDayOfYear = localeFirstDayOfYear;\n    prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;\n\n    // Day of Week\n    prototype__proto.weekdays       =        localeWeekdays;\n    prototype__proto.weekdaysMin    =        localeWeekdaysMin;\n    prototype__proto.weekdaysShort  =        localeWeekdaysShort;\n    prototype__proto.weekdaysParse  =        localeWeekdaysParse;\n\n    prototype__proto.weekdaysRegex       =        weekdaysRegex;\n    prototype__proto.weekdaysShortRegex  =        weekdaysShortRegex;\n    prototype__proto.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    // Hours\n    prototype__proto.isPM = localeIsPM;\n    prototype__proto.meridiem = localeMeridiem;\n\n    function lists__get (format, index, field, setter) {\n        var locale = locale_locales__getLocale();\n        var utc = create_utc__createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (typeof format === 'number') {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return lists__get(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = lists__get(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (typeof format === 'number') {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (typeof format === 'number') {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = locale_locales__getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return lists__get(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = lists__get(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function lists__listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function lists__listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function lists__listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function lists__listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function lists__listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    locale_locales__getSetGlobalLocale('en', {\n        ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n    utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);\n    utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);\n\n    var mathAbs = Math.abs;\n\n    function duration_abs__abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function duration_add_subtract__addSubtract (duration, input, value, direction) {\n        var other = create__createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function duration_add_subtract__add (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function duration_add_subtract__subtract (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function duration_as__valueOf () {\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function duration_get__get (units) {\n        units = normalizeUnits(units);\n        return this[units + 's']();\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this._data[name];\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        s: 45,  // seconds to minute\n        m: 45,  // minutes to hour\n        h: 22,  // hours to day\n        d: 26,  // days to month\n        M: 11   // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {\n        var duration = create__createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds < thresholds.s && ['s', seconds]  ||\n                minutes <= 1           && ['m']           ||\n                minutes < thresholds.m && ['mm', minutes] ||\n                hours   <= 1           && ['h']           ||\n                hours   < thresholds.h && ['hh', hours]   ||\n                days    <= 1           && ['d']           ||\n                days    < thresholds.d && ['dd', days]    ||\n                months  <= 1           && ['M']           ||\n                months  < thresholds.M && ['MM', months]  ||\n                years   <= 1           && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function duration_humanize__getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        var locale = this.localeData();\n        var output = duration_humanize__relativeTime(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var iso_string__abs = Math.abs;\n\n    function iso_string__toISOString() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        var seconds = iso_string__abs(this._milliseconds) / 1000;\n        var days         = iso_string__abs(this._days);\n        var months       = iso_string__abs(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds;\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        return (total < 0 ? '-' : '') +\n            'P' +\n            (Y ? Y + 'Y' : '') +\n            (M ? M + 'M' : '') +\n            (D ? D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? h + 'H' : '') +\n            (m ? m + 'M' : '') +\n            (s ? s + 'S' : '');\n    }\n\n    var duration_prototype__proto = Duration.prototype;\n\n    duration_prototype__proto.abs            = duration_abs__abs;\n    duration_prototype__proto.add            = duration_add_subtract__add;\n    duration_prototype__proto.subtract       = duration_add_subtract__subtract;\n    duration_prototype__proto.as             = as;\n    duration_prototype__proto.asMilliseconds = asMilliseconds;\n    duration_prototype__proto.asSeconds      = asSeconds;\n    duration_prototype__proto.asMinutes      = asMinutes;\n    duration_prototype__proto.asHours        = asHours;\n    duration_prototype__proto.asDays         = asDays;\n    duration_prototype__proto.asWeeks        = asWeeks;\n    duration_prototype__proto.asMonths       = asMonths;\n    duration_prototype__proto.asYears        = asYears;\n    duration_prototype__proto.valueOf        = duration_as__valueOf;\n    duration_prototype__proto._bubble        = bubble;\n    duration_prototype__proto.get            = duration_get__get;\n    duration_prototype__proto.milliseconds   = milliseconds;\n    duration_prototype__proto.seconds        = seconds;\n    duration_prototype__proto.minutes        = minutes;\n    duration_prototype__proto.hours          = hours;\n    duration_prototype__proto.days           = days;\n    duration_prototype__proto.weeks          = weeks;\n    duration_prototype__proto.months         = months;\n    duration_prototype__proto.years          = years;\n    duration_prototype__proto.humanize       = humanize;\n    duration_prototype__proto.toISOString    = iso_string__toISOString;\n    duration_prototype__proto.toString       = iso_string__toISOString;\n    duration_prototype__proto.toJSON         = iso_string__toISOString;\n    duration_prototype__proto.locale         = locale;\n    duration_prototype__proto.localeData     = localeData;\n\n    // Deprecations\n    duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);\n    duration_prototype__proto.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    utils_hooks__hooks.version = '2.14.1';\n\n    setHookCallback(local__createLocal);\n\n    utils_hooks__hooks.fn                    = momentPrototype;\n    utils_hooks__hooks.min                   = min;\n    utils_hooks__hooks.max                   = max;\n    utils_hooks__hooks.now                   = now;\n    utils_hooks__hooks.utc                   = create_utc__createUTC;\n    utils_hooks__hooks.unix                  = moment__createUnix;\n    utils_hooks__hooks.months                = lists__listMonths;\n    utils_hooks__hooks.isDate                = isDate;\n    utils_hooks__hooks.locale                = locale_locales__getSetGlobalLocale;\n    utils_hooks__hooks.invalid               = valid__createInvalid;\n    utils_hooks__hooks.duration              = create__createDuration;\n    utils_hooks__hooks.isMoment              = isMoment;\n    utils_hooks__hooks.weekdays              = lists__listWeekdays;\n    utils_hooks__hooks.parseZone             = moment__createInZone;\n    utils_hooks__hooks.localeData            = locale_locales__getLocale;\n    utils_hooks__hooks.isDuration            = isDuration;\n    utils_hooks__hooks.monthsShort           = lists__listMonthsShort;\n    utils_hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;\n    utils_hooks__hooks.defineLocale          = defineLocale;\n    utils_hooks__hooks.updateLocale          = updateLocale;\n    utils_hooks__hooks.locales               = locale_locales__listLocales;\n    utils_hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;\n    utils_hooks__hooks.normalizeUnits        = normalizeUnits;\n    utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;\n    utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;\n    utils_hooks__hooks.calendarFormat        = getCalendarFormat;\n    utils_hooks__hooks.prototype             = momentPrototype;\n\n    var _moment = utils_hooks__hooks;\n\n    return _moment;\n\n}));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/morris/morris.css",
    "content": ".morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}\n.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/multiselect/css/multi-select.css",
    "content": ".ms-container{\n  background: transparent url('../img/switch.png') no-repeat 50% 50%;\n  width: 370px;\n}\n\n.ms-container:after{\n  content: \".\";\n  display: block;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  clear: both;\n  min-height: 0;\n  visibility: hidden;\n}\n\n.ms-container .ms-selectable, .ms-container .ms-selection{\n  background: #fff;\n  color: #555555;\n  float: left;\n  width: 45%;\n}\n.ms-container .ms-selection{\n  float: right;\n}\n\n.ms-container .ms-list{\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;\n  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;\n  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;\n  -o-transition: border linear 0.2s, box-shadow linear 0.2s;\n  transition: border linear 0.2s, box-shadow linear 0.2s;\n  border: 1px solid #ccc;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n  position: relative;\n  height: 200px;\n  padding: 0;\n  overflow-y: auto;\n}\n\n.ms-container .ms-list.ms-focus{\n  border-color: rgba(82, 168, 236, 0.8);\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n  outline: 0;\n  outline: thin dotted \\9;\n}\n\n.ms-container ul{\n  margin: 0;\n  list-style-type: none;\n  padding: 0;\n}\n\n.ms-container .ms-optgroup-container{\n  width: 100%;\n}\n\n.ms-container .ms-optgroup-label{\n  margin: 0;\n  padding: 5px 0px 0px 5px;\n  cursor: pointer;\n  color: #999;\n}\n\n.ms-container .ms-selectable li.ms-elem-selectable,\n.ms-container .ms-selection li.ms-elem-selection{\n  border-bottom: 1px #eee solid;\n  padding: 2px 10px;\n  color: #555;\n  font-size: 14px;\n}\n\n.ms-container .ms-selectable li.ms-hover,\n.ms-container .ms-selection li.ms-hover{\n  cursor: pointer;\n  color: #fff;\n  text-decoration: none;\n  background-color: #08c;\n}\n\n.ms-container .ms-selectable li.disabled,\n.ms-container .ms-selection li.disabled{\n  background-color: #eee;\n  color: #aaa;\n  cursor: text;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/multiselect/js/jquery.multi-select.js",
    "content": "/*\n* MultiSelect v0.9.12\n* Copyright (c) 2012 Louis Cuny\n*\n* This program is free software. It comes without any warranty, to\n* the extent permitted by applicable law. You can redistribute it\n* and/or modify it under the terms of the Do What The Fuck You Want\n* To Public License, Version 2, as published by Sam Hocevar. See\n* http://sam.zoy.org/wtfpl/COPYING for more details.\n*/\n\n!function ($) {\n\n  \"use strict\";\n\n\n /* MULTISELECT CLASS DEFINITION\n  * ====================== */\n\n  var MultiSelect = function (element, options) {\n    this.options = options;\n    this.$element = $(element);\n    this.$container = $('<div/>', { 'class': \"ms-container\" });\n    this.$selectableContainer = $('<div/>', { 'class': 'ms-selectable' });\n    this.$selectionContainer = $('<div/>', { 'class': 'ms-selection' });\n    this.$selectableUl = $('<ul/>', { 'class': \"ms-list\", 'tabindex' : '-1' });\n    this.$selectionUl = $('<ul/>', { 'class': \"ms-list\", 'tabindex' : '-1' });\n    this.scrollTo = 0;\n    this.elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.'+options.disabledClass+')';\n  };\n\n  MultiSelect.prototype = {\n    constructor: MultiSelect,\n\n    init: function(){\n      var that = this,\n          ms = this.$element;\n\n      if (ms.next('.ms-container').length === 0){\n        ms.css({ position: 'absolute', left: '-9999px' });\n        ms.attr('id', ms.attr('id') ? ms.attr('id') : Math.ceil(Math.random()*1000)+'multiselect');\n        this.$container.attr('id', 'ms-'+ms.attr('id'));\n        this.$container.addClass(that.options.cssClass);\n        ms.find('option').each(function(){\n          that.generateLisFromOption(this);\n        });\n\n        this.$selectionUl.find('.ms-optgroup-label').hide();\n\n        if (that.options.selectableHeader){\n          that.$selectableContainer.append(that.options.selectableHeader);\n        }\n        that.$selectableContainer.append(that.$selectableUl);\n        if (that.options.selectableFooter){\n          that.$selectableContainer.append(that.options.selectableFooter);\n        }\n\n        if (that.options.selectionHeader){\n          that.$selectionContainer.append(that.options.selectionHeader);\n        }\n        that.$selectionContainer.append(that.$selectionUl);\n        if (that.options.selectionFooter){\n          that.$selectionContainer.append(that.options.selectionFooter);\n        }\n\n        that.$container.append(that.$selectableContainer);\n        that.$container.append(that.$selectionContainer);\n        ms.after(that.$container);\n\n        that.activeMouse(that.$selectableUl);\n        that.activeKeyboard(that.$selectableUl);\n\n        var action = that.options.dblClick ? 'dblclick' : 'click';\n\n        that.$selectableUl.on(action, '.ms-elem-selectable', function(){\n          that.select($(this).data('ms-value'));\n        });\n        that.$selectionUl.on(action, '.ms-elem-selection', function(){\n          that.deselect($(this).data('ms-value'));\n        });\n\n        that.activeMouse(that.$selectionUl);\n        that.activeKeyboard(that.$selectionUl);\n\n        ms.on('focus', function(){\n          that.$selectableUl.focus();\n        })\n      }\n\n      var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get();\n      that.select(selectedValues, 'init');\n\n      if (typeof that.options.afterInit === 'function') {\n        that.options.afterInit.call(this, this.$container);\n      }\n    },\n\n    'generateLisFromOption' : function(option, index, $container){\n      var that = this,\n          ms = that.$element,\n          attributes = \"\",\n          $option = $(option);\n\n      for (var cpt = 0; cpt < option.attributes.length; cpt++){\n        var attr = option.attributes[cpt];\n\n        if(attr.name !== 'value' && attr.name !== 'disabled'){\n          attributes += attr.name+'=\"'+attr.value+'\" ';\n        }\n      }\n      var selectableLi = $('<li '+attributes+'><span>'+that.escapeHTML($option.text())+'</span></li>'),\n          selectedLi = selectableLi.clone(),\n          value = $option.val(),\n          elementId = that.sanitize(value);\n\n      selectableLi\n        .data('ms-value', value)\n        .addClass('ms-elem-selectable')\n        .attr('id', elementId+'-selectable');\n\n      selectedLi\n        .data('ms-value', value)\n        .addClass('ms-elem-selection')\n        .attr('id', elementId+'-selection')\n        .hide();\n\n      if ($option.prop('disabled') || ms.prop('disabled')){\n        selectedLi.addClass(that.options.disabledClass);\n        selectableLi.addClass(that.options.disabledClass);\n      }\n\n      var $optgroup = $option.parent('optgroup');\n\n      if ($optgroup.length > 0){\n        var optgroupLabel = $optgroup.attr('label'),\n            optgroupId = that.sanitize(optgroupLabel),\n            $selectableOptgroup = that.$selectableUl.find('#optgroup-selectable-'+optgroupId),\n            $selectionOptgroup = that.$selectionUl.find('#optgroup-selection-'+optgroupId);\n\n        if ($selectableOptgroup.length === 0){\n          var optgroupContainerTpl = '<li class=\"ms-optgroup-container\"></li>',\n              optgroupTpl = '<ul class=\"ms-optgroup\"><li class=\"ms-optgroup-label\"><span>'+optgroupLabel+'</span></li></ul>';\n\n          $selectableOptgroup = $(optgroupContainerTpl);\n          $selectionOptgroup = $(optgroupContainerTpl);\n          $selectableOptgroup.attr('id', 'optgroup-selectable-'+optgroupId);\n          $selectionOptgroup.attr('id', 'optgroup-selection-'+optgroupId);\n          $selectableOptgroup.append($(optgroupTpl));\n          $selectionOptgroup.append($(optgroupTpl));\n          if (that.options.selectableOptgroup){\n            $selectableOptgroup.find('.ms-optgroup-label').on('click', function(){\n              var values = $optgroup.children(':not(:selected, :disabled)').map(function(){ return $(this).val() }).get();\n              that.select(values);\n            });\n            $selectionOptgroup.find('.ms-optgroup-label').on('click', function(){\n              var values = $optgroup.children(':selected:not(:disabled)').map(function(){ return $(this).val() }).get();\n              that.deselect(values);\n            });\n          }\n          that.$selectableUl.append($selectableOptgroup);\n          that.$selectionUl.append($selectionOptgroup);\n        }\n        index = index == undefined ? $selectableOptgroup.find('ul').children().length : index + 1;\n        selectableLi.insertAt(index, $selectableOptgroup.children());\n        selectedLi.insertAt(index, $selectionOptgroup.children());\n      } else {\n        index = index == undefined ? that.$selectableUl.children().length : index;\n\n        selectableLi.insertAt(index, that.$selectableUl);\n        selectedLi.insertAt(index, that.$selectionUl);\n      }\n    },\n\n    'addOption' : function(options){\n      var that = this;\n\n      if (options.value) options = [options];\n      $.each(options, function(index, option){\n        if (option.value && that.$element.find(\"option[value='\"+option.value+\"']\").length === 0){\n          var $option = $('<option value=\"'+option.value+'\">'+option.text+'</option>'),\n              index = parseInt((typeof option.index === 'undefined' ? that.$element.children().length : option.index)),\n              $container = option.nested == undefined ? that.$element : $(\"optgroup[label='\"+option.nested+\"']\")\n\n          $option.insertAt(index, $container);\n          that.generateLisFromOption($option.get(0), index, option.nested);\n        }\n      })\n    },\n\n    'escapeHTML' : function(text){\n      return $(\"<div>\").text(text).html();\n    },\n\n    'activeKeyboard' : function($list){\n      var that = this;\n\n      $list.on('focus', function(){\n        $(this).addClass('ms-focus');\n      })\n      .on('blur', function(){\n        $(this).removeClass('ms-focus');\n      })\n      .on('keydown', function(e){\n        switch (e.which) {\n          case 40:\n          case 38:\n            e.preventDefault();\n            e.stopPropagation();\n            that.moveHighlight($(this), (e.which === 38) ? -1 : 1);\n            return;\n          case 37:\n          case 39:\n            e.preventDefault();\n            e.stopPropagation();\n            that.switchList($list);\n            return;\n          case 9:\n            if(that.$element.is('[tabindex]')){\n              e.preventDefault();\n              var tabindex = parseInt(that.$element.attr('tabindex'), 10);\n              tabindex = (e.shiftKey) ? tabindex-1 : tabindex+1;\n              $('[tabindex=\"'+(tabindex)+'\"]').focus();\n              return;\n            }else{\n              if(e.shiftKey){\n                that.$element.trigger('focus');\n              }\n            }\n        }\n        if($.inArray(e.which, that.options.keySelect) > -1){\n          e.preventDefault();\n          e.stopPropagation();\n          that.selectHighlighted($list);\n          return;\n        }\n      });\n    },\n\n    'moveHighlight': function($list, direction){\n      var $elems = $list.find(this.elemsSelector),\n          $currElem = $elems.filter('.ms-hover'),\n          $nextElem = null,\n          elemHeight = $elems.first().outerHeight(),\n          containerHeight = $list.height(),\n          containerSelector = '#'+this.$container.prop('id');\n\n      $elems.removeClass('ms-hover');\n      if (direction === 1){ // DOWN\n\n        $nextElem = $currElem.nextAll(this.elemsSelector).first();\n        if ($nextElem.length === 0){\n          var $optgroupUl = $currElem.parent();\n\n          if ($optgroupUl.hasClass('ms-optgroup')){\n            var $optgroupLi = $optgroupUl.parent(),\n                $nextOptgroupLi = $optgroupLi.next(':visible');\n\n            if ($nextOptgroupLi.length > 0){\n              $nextElem = $nextOptgroupLi.find(this.elemsSelector).first();\n            } else {\n              $nextElem = $elems.first();\n            }\n          } else {\n            $nextElem = $elems.first();\n          }\n        }\n      } else if (direction === -1){ // UP\n\n        $nextElem = $currElem.prevAll(this.elemsSelector).first();\n        if ($nextElem.length === 0){\n          var $optgroupUl = $currElem.parent();\n\n          if ($optgroupUl.hasClass('ms-optgroup')){\n            var $optgroupLi = $optgroupUl.parent(),\n                $prevOptgroupLi = $optgroupLi.prev(':visible');\n\n            if ($prevOptgroupLi.length > 0){\n              $nextElem = $prevOptgroupLi.find(this.elemsSelector).last();\n            } else {\n              $nextElem = $elems.last();\n            }\n          } else {\n            $nextElem = $elems.last();\n          }\n        }\n      }\n      if ($nextElem.length > 0){\n        $nextElem.addClass('ms-hover');\n        var scrollTo = $list.scrollTop() + $nextElem.position().top - \n                       containerHeight / 2 + elemHeight / 2;\n\n        $list.scrollTop(scrollTo);\n      }\n    },\n\n    'selectHighlighted' : function($list){\n      var $elems = $list.find(this.elemsSelector),\n          $highlightedElem = $elems.filter('.ms-hover').first();\n\n      if ($highlightedElem.length > 0){\n        if ($list.parent().hasClass('ms-selectable')){\n          this.select($highlightedElem.data('ms-value'));\n        } else {\n          this.deselect($highlightedElem.data('ms-value'));\n        }\n        $elems.removeClass('ms-hover');\n      }\n    },\n\n    'switchList' : function($list){\n      $list.blur();\n      this.$container.find(this.elemsSelector).removeClass('ms-hover');\n      if ($list.parent().hasClass('ms-selectable')){\n        this.$selectionUl.focus();\n      } else {\n        this.$selectableUl.focus();\n      }\n    },\n\n    'activeMouse' : function($list){\n      var that = this;\n\n      $('body').on('mouseenter', that.elemsSelector, function(){\n        $(this).parents('.ms-container').find(that.elemsSelector).removeClass('ms-hover');\n        $(this).addClass('ms-hover');\n      });\n    },\n\n    'refresh' : function() {\n      this.destroy();\n      this.$element.multiSelect(this.options);\n    },\n\n    'destroy' : function(){\n      $(\"#ms-\"+this.$element.attr(\"id\")).remove();\n      this.$element.css('position', '').css('left', '')\n      this.$element.removeData('multiselect');\n    },\n\n    'select' : function(value, method){\n      if (typeof value === 'string'){ value = [value]; }\n\n      var that = this,\n          ms = this.$element,\n          msIds = $.map(value, function(val){ return(that.sanitize(val)); }),\n          selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'),\n          selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection').filter(':not(.'+that.options.disabledClass+')'),\n          options = ms.find('option:not(:disabled)').filter(function(){ return($.inArray(this.value, value) > -1); });\n\n      if (method === 'init'){\n        selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),\n        selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection');\n      }\n\n      if (selectables.length > 0){\n        selectables.addClass('ms-selected').hide();\n        selections.addClass('ms-selected').show();\n\n        options.prop('selected', true);\n\n        that.$container.find(that.elemsSelector).removeClass('ms-hover');\n\n        var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');\n        if (selectableOptgroups.length > 0){\n          selectableOptgroups.each(function(){\n            var selectablesLi = $(this).find('.ms-elem-selectable');\n            if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){\n              $(this).find('.ms-optgroup-label').hide();\n            }\n          });\n\n          var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');\n          selectionOptgroups.each(function(){\n            var selectionsLi = $(this).find('.ms-elem-selection');\n            if (selectionsLi.filter('.ms-selected').length > 0){\n              $(this).find('.ms-optgroup-label').show();\n            }\n          });\n        } else {\n          if (that.options.keepOrder && method !== 'init'){\n            var selectionLiLast = that.$selectionUl.find('.ms-selected');\n            if((selectionLiLast.length > 1) && (selectionLiLast.last().get(0) != selections.get(0))) {\n              selections.insertAfter(selectionLiLast.last());\n            }\n          }\n        }\n        if (method !== 'init'){\n          ms.trigger('change');\n          if (typeof that.options.afterSelect === 'function') {\n            that.options.afterSelect.call(this, value);\n          }\n        }\n      }\n    },\n\n    'deselect' : function(value){\n      if (typeof value === 'string'){ value = [value]; }\n\n      var that = this,\n          ms = this.$element,\n          msIds = $.map(value, function(val){ return(that.sanitize(val)); }),\n          selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),\n          selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected').filter(':not(.'+that.options.disabledClass+')'),\n          options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); });\n\n      if (selections.length > 0){\n        selectables.removeClass('ms-selected').show();\n        selections.removeClass('ms-selected').hide();\n        options.prop('selected', false);\n\n        that.$container.find(that.elemsSelector).removeClass('ms-hover');\n\n        var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');\n        if (selectableOptgroups.length > 0){\n          selectableOptgroups.each(function(){\n            var selectablesLi = $(this).find('.ms-elem-selectable');\n            if (selectablesLi.filter(':not(.ms-selected)').length > 0){\n              $(this).find('.ms-optgroup-label').show();\n            }\n          });\n\n          var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');\n          selectionOptgroups.each(function(){\n            var selectionsLi = $(this).find('.ms-elem-selection');\n            if (selectionsLi.filter('.ms-selected').length === 0){\n              $(this).find('.ms-optgroup-label').hide();\n            }\n          });\n        }\n        ms.trigger('change');\n        if (typeof that.options.afterDeselect === 'function') {\n          that.options.afterDeselect.call(this, value);\n        }\n      }\n    },\n\n    'select_all' : function(){\n      var ms = this.$element,\n          values = ms.val();\n\n      ms.find('option:not(\":disabled\")').prop('selected', true);\n      this.$selectableUl.find('.ms-elem-selectable').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').hide();\n      this.$selectionUl.find('.ms-optgroup-label').show();\n      this.$selectableUl.find('.ms-optgroup-label').hide();\n      this.$selectionUl.find('.ms-elem-selection').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').show();\n      this.$selectionUl.focus();\n      ms.trigger('change');\n      if (typeof this.options.afterSelect === 'function') {\n        var selectedValues = $.grep(ms.val(), function(item){\n          return $.inArray(item, values) < 0;\n        });\n        this.options.afterSelect.call(this, selectedValues);\n      }\n    },\n\n    'deselect_all' : function(){\n      var ms = this.$element,\n          values = ms.val();\n\n      ms.find('option').prop('selected', false);\n      this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show();\n      this.$selectionUl.find('.ms-optgroup-label').hide();\n      this.$selectableUl.find('.ms-optgroup-label').show();\n      this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide();\n      this.$selectableUl.focus();\n      ms.trigger('change');\n      if (typeof this.options.afterDeselect === 'function') {\n        this.options.afterDeselect.call(this, values);\n      }\n    },\n\n    sanitize: function(value){\n      var hash = 0, i, character;\n      if (value.length == 0) return hash;\n      var ls = 0;\n      for (i = 0, ls = value.length; i < ls; i++) {\n        character  = value.charCodeAt(i);\n        hash  = ((hash<<5)-hash)+character;\n        hash |= 0; // Convert to 32bit integer\n      }\n      return hash;\n    }\n  };\n\n  /* MULTISELECT PLUGIN DEFINITION\n   * ======================= */\n\n  $.fn.multiSelect = function () {\n    var option = arguments[0],\n        args = arguments;\n\n    return this.each(function () {\n      var $this = $(this),\n          data = $this.data('multiselect'),\n          options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option);\n\n      if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); }\n\n      if (typeof option === 'string'){\n        data[option](args[1]);\n      } else {\n        data.init();\n      }\n    });\n  };\n\n  $.fn.multiSelect.defaults = {\n    keySelect: [32],\n    selectableOptgroup: false,\n    disabledClass : 'disabled',\n    dblClick : false,\n    keepOrder: false,\n    cssClass: ''\n  };\n\n  $.fn.multiSelect.Constructor = MultiSelect;\n\n  $.fn.insertAt = function(index, $parent) {\n    return this.each(function() {\n      if (index === 0) {\n        $parent.prepend(this);\n      } else {\n        $parent.children().eq(index - 1).after(this);\n      }\n    });\n}\n\n}(window.jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/nestable/jquery.nestable.css",
    "content": "/**\n * Nestable\n */\n\n.dd { position: relative; display: block; margin: 0; padding: 0; max-width: 600px; list-style: none; font-size: 13px; line-height: 20px; }\n\n.dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; }\n.dd-list .dd-list { padding-left: 30px; }\n.dd-collapsed .dd-list { display: none; }\n\n.dd-item,\n.dd-empty,\n.dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; }\n\n.dd-handle { display: block; height: 30px; margin: 5px 0; padding: 5px 10px; cursor: move; color: #979898; text-decoration: none; font-weight: bold; border: 1px solid #e5e5e5;\n    background: #fafafa;\n    /*background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);*/\n    /*background:    -moz-linear-gradient(top, #fafafa 0%, #eee 100%);*/\n    /*background:         linear-gradient(top, #fafafa 0%, #eee 100%);*/\n\n    box-sizing: border-box; -moz-box-sizing: border-box;\n}\n.dd-handle:hover { color: #317eeb; background: #fff; }\n\n.dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 25px; height: 20px; margin: 5px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 12px; line-height: 1; text-align: center; font-weight: bold; }\n.dd-item > button:before { content: '+'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; }\n.dd-item > button[data-action=\"collapse\"]:before { content: '-'; }\n\n.dd-placeholder,\n.dd-empty { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; }\n.dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5;\n    background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), \n                      -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-image:    -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), \n                         -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-image:         linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), \n                              linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-size: 60px 60px;\n    background-position: 0 0, 30px 30px;\n}\n\n.dd-dragel { position: absolute; pointer-events: none; z-index: 9999; }\n.dd-dragel > .dd-item .dd-handle { margin-top: 0; }\n.dd-dragel .dd-handle {\n    -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);\n            box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);\n}\n\n\n.dd3-content { display: block; height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #979898; text-decoration: none; font-weight: bold; border: 1px solid #e5e5e5;\n    background: #fafafa;\n    /*background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);*/\n    /*background:    -moz-linear-gradient(top, #fafafa 0%, #eee 100%);*/\n    /*background:         linear-gradient(top, #fafafa 0%, #eee 100%);*/\n\n    box-sizing: border-box; -moz-box-sizing: border-box;\n}\n.dd3-content:hover { color: #317eeb; background: #fff; }\n\n.dd-dragel > .dd3-item > .dd3-content { margin: 0; }\n\n.dd3-item > button { margin-left: 30px; }\n\n.dd3-handle { position: absolute; margin: 0; left: 0; top: 0; cursor: pointer; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden;\n    border: 1px solid #ccc;\n    background: #d5d5d5;\n    /*background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%);*/\n    /*background:    -moz-linear-gradient(top, #ddd 0%, #bbb 100%);*/\n    /*background:         linear-gradient(top, #ddd 0%, #bbb 100%);*/\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n.dd3-handle:before { content: \"\\f0c9\";font-family: FontAwesome; display: block; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 14px; font-weight: normal; }\n.dd3-handle:hover { background: #404040; border:1px solid #404040; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/nestable/jquery.nestable.js",
    "content": "/*!\n * Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/\n * Dual-licensed under the BSD or MIT licenses\n */\n;(function($, window, document, undefined)\n{\n    var hasTouch = 'ontouchstart' in window;\n\n    /**\n     * Detect CSS pointer-events property\n     * events are normally disabled on the dragging element to avoid conflicts\n     * https://github.com/ausi/Feature-detection-technique-for-pointer-events/blob/master/modernizr-pointerevents.js\n     */\n    var hasPointerEvents = (function()\n    {\n        var el    = document.createElement('div'),\n            docEl = document.documentElement;\n        if (!('pointerEvents' in el.style)) {\n            return false;\n        }\n        el.style.pointerEvents = 'auto';\n        el.style.pointerEvents = 'x';\n        docEl.appendChild(el);\n        var supports = window.getComputedStyle && window.getComputedStyle(el, '').pointerEvents === 'auto';\n        docEl.removeChild(el);\n        return !!supports;\n    })();\n\n    var eStart  = hasTouch ? 'touchstart'  : 'mousedown',\n        eMove   = hasTouch ? 'touchmove'   : 'mousemove',\n        eEnd    = hasTouch ? 'touchend'    : 'mouseup';\n        eCancel = hasTouch ? 'touchcancel' : 'mouseup';\n\n    var defaults = {\n            listNodeName    : 'ol',\n            itemNodeName    : 'li',\n            rootClass       : 'dd',\n            listClass       : 'dd-list',\n            itemClass       : 'dd-item',\n            dragClass       : 'dd-dragel',\n            handleClass     : 'dd-handle',\n            collapsedClass  : 'dd-collapsed',\n            placeClass      : 'dd-placeholder',\n            noDragClass     : 'dd-nodrag',\n            emptyClass      : 'dd-empty',\n            expandBtnHTML   : '<button data-action=\"expand\" type=\"button\">Expand</button>',\n            collapseBtnHTML : '<button data-action=\"collapse\" type=\"button\">Collapse</button>',\n            group           : 0,\n            maxDepth        : 5,\n            threshold       : 20\n        };\n\n    function Plugin(element, options)\n    {\n        this.w  = $(window);\n        this.el = $(element);\n        this.options = $.extend({}, defaults, options);\n        this.init();\n    }\n\n    Plugin.prototype = {\n\n        init: function()\n        {\n            var list = this;\n\n            list.reset();\n\n            list.el.data('nestable-group', this.options.group);\n\n            list.placeEl = $('<div class=\"' + list.options.placeClass + '\"/>');\n\n            $.each(this.el.find(list.options.itemNodeName), function(k, el) {\n                list.setParent($(el));\n            });\n\n            list.el.on('click', 'button', function(e) {\n                if (list.dragEl || (!hasTouch && e.button !== 0)) {\n                    return;\n                }\n                var target = $(e.currentTarget),\n                    action = target.data('action'),\n                    item   = target.parent(list.options.itemNodeName);\n                if (action === 'collapse') {\n                    list.collapseItem(item);\n                }\n                if (action === 'expand') {\n                    list.expandItem(item);\n                }\n            });\n\n            var onStartEvent = function(e)\n            {\n                var handle = $(e.target);\n                if (!handle.hasClass(list.options.handleClass)) {\n                    if (handle.closest('.' + list.options.noDragClass).length) {\n                        return;\n                    }\n                    handle = handle.closest('.' + list.options.handleClass);\n                }\n                if (!handle.length || list.dragEl || (!hasTouch && e.button !== 0) || (hasTouch && e.touches.length !== 1)) {\n                    return;\n                }\n                e.preventDefault();\n                list.dragStart(hasTouch ? e.touches[0] : e);\n            };\n\n            var onMoveEvent = function(e)\n            {\n                if (list.dragEl) {\n                    e.preventDefault();\n                    list.dragMove(hasTouch ? e.touches[0] : e);\n                }\n            };\n\n            var onEndEvent = function(e)\n            {\n                if (list.dragEl) {\n                    e.preventDefault();\n                    list.dragStop(hasTouch ? e.touches[0] : e);\n                }\n            };\n\n            if (hasTouch) {\n                list.el[0].addEventListener(eStart, onStartEvent, false);\n                window.addEventListener(eMove, onMoveEvent, false);\n                window.addEventListener(eEnd, onEndEvent, false);\n                window.addEventListener(eCancel, onEndEvent, false);\n            } else {\n                list.el.on(eStart, onStartEvent);\n                list.w.on(eMove, onMoveEvent);\n                list.w.on(eEnd, onEndEvent);\n            }\n\n        },\n\n        serialize: function()\n        {\n            var data,\n                depth = 0,\n                list  = this;\n                step  = function(level, depth)\n                {\n                    var array = [ ],\n                        items = level.children(list.options.itemNodeName);\n                    items.each(function()\n                    {\n                        var li   = $(this),\n                            item = $.extend({}, li.data()),\n                            sub  = li.children(list.options.listNodeName);\n                        if (sub.length) {\n                            item.children = step(sub, depth + 1);\n                        }\n                        array.push(item);\n                    });\n                    return array;\n                };\n            data = step(list.el.find(list.options.listNodeName).first(), depth);\n            return data;\n        },\n\n        serialise: function()\n        {\n            return this.serialize();\n        },\n\n        reset: function()\n        {\n            this.mouse = {\n                offsetX   : 0,\n                offsetY   : 0,\n                startX    : 0,\n                startY    : 0,\n                lastX     : 0,\n                lastY     : 0,\n                nowX      : 0,\n                nowY      : 0,\n                distX     : 0,\n                distY     : 0,\n                dirAx     : 0,\n                dirX      : 0,\n                dirY      : 0,\n                lastDirX  : 0,\n                lastDirY  : 0,\n                distAxX   : 0,\n                distAxY   : 0\n            };\n            this.moving     = false;\n            this.dragEl     = null;\n            this.dragRootEl = null;\n            this.dragDepth  = 0;\n            this.hasNewRoot = false;\n            this.pointEl    = null;\n        },\n\n        expandItem: function(li)\n        {\n            li.removeClass(this.options.collapsedClass);\n            li.children('[data-action=\"expand\"]').hide();\n            li.children('[data-action=\"collapse\"]').show();\n            li.children(this.options.listNodeName).show();\n        },\n\n        collapseItem: function(li)\n        {\n            var lists = li.children(this.options.listNodeName);\n            if (lists.length) {\n                li.addClass(this.options.collapsedClass);\n                li.children('[data-action=\"collapse\"]').hide();\n                li.children('[data-action=\"expand\"]').show();\n                li.children(this.options.listNodeName).hide();\n            }\n        },\n\n        expandAll: function()\n        {\n            var list = this;\n            list.el.find(list.options.itemNodeName).each(function() {\n                list.expandItem($(this));\n            });\n        },\n\n        collapseAll: function()\n        {\n            var list = this;\n            list.el.find(list.options.itemNodeName).each(function() {\n                list.collapseItem($(this));\n            });\n        },\n\n        setParent: function(li)\n        {\n            if (li.children(this.options.listNodeName).length) {\n                li.prepend($(this.options.expandBtnHTML));\n                li.prepend($(this.options.collapseBtnHTML));\n            }\n            li.children('[data-action=\"expand\"]').hide();\n        },\n\n        unsetParent: function(li)\n        {\n            li.removeClass(this.options.collapsedClass);\n            li.children('[data-action]').remove();\n            li.children(this.options.listNodeName).remove();\n        },\n\n        dragStart: function(e)\n        {\n            var mouse    = this.mouse,\n                target   = $(e.target),\n                dragItem = target.closest(this.options.itemNodeName);\n\n            this.placeEl.css('height', dragItem.height());\n\n            mouse.offsetX = e.offsetX !== undefined ? e.offsetX : e.pageX - target.offset().left;\n            mouse.offsetY = e.offsetY !== undefined ? e.offsetY : e.pageY - target.offset().top;\n            mouse.startX = mouse.lastX = e.pageX;\n            mouse.startY = mouse.lastY = e.pageY;\n\n            this.dragRootEl = this.el;\n\n            this.dragEl = $(document.createElement(this.options.listNodeName)).addClass(this.options.listClass + ' ' + this.options.dragClass);\n            this.dragEl.css('width', dragItem.width());\n\n            // fix for zepto.js\n            //dragItem.after(this.placeEl).detach().appendTo(this.dragEl);\n            dragItem.after(this.placeEl);\n            dragItem[0].parentNode.removeChild(dragItem[0]);\n            dragItem.appendTo(this.dragEl);\n\n            $(document.body).append(this.dragEl);\n            this.dragEl.css({\n                'left' : e.pageX - mouse.offsetX,\n                'top'  : e.pageY - mouse.offsetY\n            });\n            // total depth of dragging item\n            var i, depth,\n                items = this.dragEl.find(this.options.itemNodeName);\n            for (i = 0; i < items.length; i++) {\n                depth = $(items[i]).parents(this.options.listNodeName).length;\n                if (depth > this.dragDepth) {\n                    this.dragDepth = depth;\n                }\n            }\n        },\n\n        dragStop: function(e)\n        {\n            // fix for zepto.js\n            //this.placeEl.replaceWith(this.dragEl.children(this.options.itemNodeName + ':first').detach());\n            var el = this.dragEl.children(this.options.itemNodeName).first();\n            el[0].parentNode.removeChild(el[0]);\n            this.placeEl.replaceWith(el);\n\n            this.dragEl.remove();\n            this.el.trigger('change');\n            if (this.hasNewRoot) {\n                this.dragRootEl.trigger('change');\n            }\n            this.reset();\n        },\n\n        dragMove: function(e)\n        {\n            var list, parent, prev, next, depth,\n                opt   = this.options,\n                mouse = this.mouse;\n\n            this.dragEl.css({\n                'left' : e.pageX - mouse.offsetX,\n                'top'  : e.pageY - mouse.offsetY\n            });\n\n            // mouse position last events\n            mouse.lastX = mouse.nowX;\n            mouse.lastY = mouse.nowY;\n            // mouse position this events\n            mouse.nowX  = e.pageX;\n            mouse.nowY  = e.pageY;\n            // distance mouse moved between events\n            mouse.distX = mouse.nowX - mouse.lastX;\n            mouse.distY = mouse.nowY - mouse.lastY;\n            // direction mouse was moving\n            mouse.lastDirX = mouse.dirX;\n            mouse.lastDirY = mouse.dirY;\n            // direction mouse is now moving (on both axis)\n            mouse.dirX = mouse.distX === 0 ? 0 : mouse.distX > 0 ? 1 : -1;\n            mouse.dirY = mouse.distY === 0 ? 0 : mouse.distY > 0 ? 1 : -1;\n            // axis mouse is now moving on\n            var newAx   = Math.abs(mouse.distX) > Math.abs(mouse.distY) ? 1 : 0;\n\n            // do nothing on first move\n            if (!mouse.moving) {\n                mouse.dirAx  = newAx;\n                mouse.moving = true;\n                return;\n            }\n\n            // calc distance moved on this axis (and direction)\n            if (mouse.dirAx !== newAx) {\n                mouse.distAxX = 0;\n                mouse.distAxY = 0;\n            } else {\n                mouse.distAxX += Math.abs(mouse.distX);\n                if (mouse.dirX !== 0 && mouse.dirX !== mouse.lastDirX) {\n                    mouse.distAxX = 0;\n                }\n                mouse.distAxY += Math.abs(mouse.distY);\n                if (mouse.dirY !== 0 && mouse.dirY !== mouse.lastDirY) {\n                    mouse.distAxY = 0;\n                }\n            }\n            mouse.dirAx = newAx;\n\n            /**\n             * move horizontal\n             */\n            if (mouse.dirAx && mouse.distAxX >= opt.threshold) {\n                // reset move distance on x-axis for new phase\n                mouse.distAxX = 0;\n                prev = this.placeEl.prev(opt.itemNodeName);\n                // increase horizontal level if previous sibling exists and is not collapsed\n                if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass)) {\n                    // cannot increase level when item above is collapsed\n                    list = prev.find(opt.listNodeName).last();\n                    // check if depth limit has reached\n                    depth = this.placeEl.parents(opt.listNodeName).length;\n                    if (depth + this.dragDepth <= opt.maxDepth) {\n                        // create new sub-level if one doesn't exist\n                        if (!list.length) {\n                            list = $('<' + opt.listNodeName + '/>').addClass(opt.listClass);\n                            list.append(this.placeEl);\n                            prev.append(list);\n                            this.setParent(prev);\n                        } else {\n                            // else append to next level up\n                            list = prev.children(opt.listNodeName).last();\n                            list.append(this.placeEl);\n                        }\n                    }\n                }\n                // decrease horizontal level\n                if (mouse.distX < 0) {\n                    // we can't decrease a level if an item preceeds the current one\n                    next = this.placeEl.next(opt.itemNodeName);\n                    if (!next.length) {\n                        parent = this.placeEl.parent();\n                        this.placeEl.closest(opt.itemNodeName).after(this.placeEl);\n                        if (!parent.children().length) {\n                            this.unsetParent(parent.parent());\n                        }\n                    }\n                }\n            }\n\n            var isEmpty = false;\n\n            // find list item under cursor\n            if (!hasPointerEvents) {\n                this.dragEl[0].style.visibility = 'hidden';\n            }\n            this.pointEl = $(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop)));\n            if (!hasPointerEvents) {\n                this.dragEl[0].style.visibility = 'visible';\n            }\n            if (this.pointEl.hasClass(opt.handleClass)) {\n                this.pointEl = this.pointEl.parent(opt.itemNodeName);\n            }\n            if (this.pointEl.hasClass(opt.emptyClass)) {\n                isEmpty = true;\n            }\n            else if (!this.pointEl.length || !this.pointEl.hasClass(opt.itemClass)) {\n                return;\n            }\n\n            // find parent list of item under cursor\n            var pointElRoot = this.pointEl.closest('.' + opt.rootClass),\n                isNewRoot   = this.dragRootEl.data('nestable-id') !== pointElRoot.data('nestable-id');\n\n            /**\n             * move vertical\n             */\n            if (!mouse.dirAx || isNewRoot || isEmpty) {\n                // check if groups match if dragging over new root\n                if (isNewRoot && opt.group !== pointElRoot.data('nestable-group')) {\n                    return;\n                }\n                // check depth limit\n                depth = this.dragDepth - 1 + this.pointEl.parents(opt.listNodeName).length;\n                if (depth > opt.maxDepth) {\n                    return;\n                }\n                var before = e.pageY < (this.pointEl.offset().top + this.pointEl.height() / 2);\n                    parent = this.placeEl.parent();\n                // if empty create new list to replace empty placeholder\n                if (isEmpty) {\n                    list = $(document.createElement(opt.listNodeName)).addClass(opt.listClass);\n                    list.append(this.placeEl);\n                    this.pointEl.replaceWith(list);\n                }\n                else if (before) {\n                    this.pointEl.before(this.placeEl);\n                }\n                else {\n                    this.pointEl.after(this.placeEl);\n                }\n                if (!parent.children().length) {\n                    this.unsetParent(parent.parent());\n                }\n                if (!this.dragRootEl.find(opt.itemNodeName).length) {\n                    this.dragRootEl.append('<div class=\"' + opt.emptyClass + '\"/>');\n                }\n                // parent root list has changed\n                if (isNewRoot) {\n                    this.dragRootEl = pointElRoot;\n                    this.hasNewRoot = this.el[0] !== this.dragRootEl[0];\n                }\n            }\n        }\n\n    };\n\n    $.fn.nestable = function(params)\n    {\n        var lists  = this,\n            retval = this;\n\n        lists.each(function()\n        {\n            var plugin = $(this).data(\"nestable\");\n\n            if (!plugin) {\n                $(this).data(\"nestable\", new Plugin(this, params));\n                $(this).data(\"nestable-id\", new Date().getTime());\n            } else {\n                if (typeof params === 'string' && typeof plugin[params] === 'function') {\n                    retval = plugin[params]();\n                }\n            }\n        });\n\n        return retval || lists;\n    };\n\n})(window.jQuery || window.Zepto, window, document);"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/notifications/notification.css",
    "content": ".notifyjs-metro-base {\n\tposition: relative;\n    min-height: 52px;\n    min-width: 250px;\n    color:#444;\n    border-radius: 3px;\n    -webkit-border-radius: 3px;\n    box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\n      -webkit-animation: dropdownOpen 0.3s ease-out;\n  -o-animation: dropdownOpen 0.3s ease-out;\n  animation: dropdownOpen 0.3s ease-out;\n}\n\n.notifyjs-metro-base .image {\n    display: table;\n    position: absolute;\n    height: auto;\n    width: auto;\n    left: 25px;\n    top: 50%;\n    font-size: 24px;\n    -moz-transform: translate(-50%, -50%);\n    -ms-transform: translate(-50%, -50%);\n    -o-transform: translate(-50%, -50%);\n    -webkit-transform: translate(-50%, -50%);\n    transform: translate(-50%, -50%);\n}\n\n.notifyjs-metro-base .text-wrapper {\n    display: inline-block;\n    vertical-align: top;\n    text-align: left;\n    margin: 10px 10px 10px 52px;\n    clear: both;\n\n}\n\n.notifyjs-metro-base .title {\n    font-size: 15px;\n    line-height: 20px;\n    margin-bottom: 5px;\n    font-weight: bold;\n}\n\n.notifyjs-metro-base .text {\n    font-size: 12px;\n    font-weight: normal;\n    max-width: 360px;\n    vertical-align: middle;\n\n}\n.notifyjs-metro-cool {\n    color: #fafafa !important;\n    background-color: #4A525F;\n    border: 1px solid #4A525F;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/notifications/notify-metro.js",
    "content": "$.notify.addStyle(\"metro\", {\n    html:\n        \"<div>\" +\n            \"<div class='image' data-notify-html='image'/>\" +\n            \"<div class='text-wrapper'>\" +\n                \"<div class='title' data-notify-html='title'/>\" +\n                \"<div class='text' data-notify-html='text'/>\" +\n            \"</div>\" +\n        \"</div>\",\n    classes: {\n        default: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#62a3ff\",\n            \"border\": \"1px solid #62a3ff\"\n        },\n        error: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#ff3547\",\n            \"border\": \"1px solid #ff3547\"\n        },\n        custom: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#62a3ff\",\n            \"border\": \"1px solid #62a3ff\"\n        },\n        success: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#2bbbad\",\n            \"border\": \"1px solid #2bbbad\"\n        },\n        info: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#33b5e5\",\n            \"border\": \"1px solid #33b5e5\"\n        },\n        warning: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#ff8800\",\n            \"border\": \"1px solid #ff8800\"\n        },\n        black: {\n            \"color\": \"#fafafa !important\",\n            \"background-color\": \"#4c5667\",\n            \"border\": \"1px solid #212121\"\n        },\n        white: {\n            \"background-color\": \"#e6eaed\",\n            \"border\": \"1px solid #ddd\"\n        }\n    }\n});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/notifyjs/js/notify.js",
    "content": "/* Notify.js - http://notifyjs.com/ Copyright (c) 2015 MIT */\n(function (factory) {\n\t// UMD start\n\t// https://github.com/umdjs/umd/blob/master/jqueryPluginCommonjs.js\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node/CommonJS\n\t\tmodule.exports = function( root, jQuery ) {\n\t\t\tif ( jQuery === undefined ) {\n\t\t\t\t// require('jQuery') returns a factory that requires window to\n\t\t\t\t// build a jQuery instance, we normalize how we use modules\n\t\t\t\t// that require this pattern but the window provided is a noop\n\t\t\t\t// if it's defined (how jquery works)\n\t\t\t\tif ( typeof window !== 'undefined' ) {\n\t\t\t\t\tjQuery = require('jquery');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tjQuery = require('jquery')(root);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfactory(jQuery);\n\t\t\treturn jQuery;\n\t\t};\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\t//IE8 indexOf polyfill\n\tvar indexOf = [].indexOf || function(item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tvar pluginName = \"notify\";\n\tvar pluginClassName = pluginName + \"js\";\n\tvar blankFieldName = pluginName + \"!blank\";\n\n\tvar positions = {\n\t\tt: \"top\",\n\t\tm: \"middle\",\n\t\tb: \"bottom\",\n\t\tl: \"left\",\n\t\tc: \"center\",\n\t\tr: \"right\"\n\t};\n\tvar hAligns = [\"l\", \"c\", \"r\"];\n\tvar vAligns = [\"t\", \"m\", \"b\"];\n\tvar mainPositions = [\"t\", \"b\", \"l\", \"r\"];\n\tvar opposites = {\n\t\tt: \"b\",\n\t\tm: null,\n\t\tb: \"t\",\n\t\tl: \"r\",\n\t\tc: null,\n\t\tr: \"l\"\n\t};\n\n\tvar parsePosition = function(str) {\n\t\tvar pos;\n\t\tpos = [];\n\t\t$.each(str.split(/\\W+/), function(i, word) {\n\t\t\tvar w;\n\t\t\tw = word.toLowerCase().charAt(0);\n\t\t\tif (positions[w]) {\n\t\t\t\treturn pos.push(w);\n\t\t\t}\n\t\t});\n\t\treturn pos;\n\t};\n\n\tvar styles = {};\n\n\tvar coreStyle = {\n\t\tname: \"core\",\n\t\thtml: \"<div class=\\\"\" + pluginClassName + \"-wrapper\\\">\\n\t<div class=\\\"\" + pluginClassName + \"-arrow\\\"></div>\\n\t<div class=\\\"\" + pluginClassName + \"-container\\\"></div>\\n</div>\",\n\t\tcss: \".\" + pluginClassName + \"-corner {\\n\tposition: fixed;\\n\tmargin: 5px;\\n\tz-index: 1050;\\n}\\n\\n.\" + pluginClassName + \"-corner .\" + pluginClassName + \"-wrapper,\\n.\" + pluginClassName + \"-corner .\" + pluginClassName + \"-container {\\n\tposition: relative;\\n\tdisplay: block;\\n\theight: inherit;\\n\twidth: inherit;\\n\tmargin: 3px;\\n}\\n\\n.\" + pluginClassName + \"-wrapper {\\n\tz-index: 1;\\n\tposition: absolute;\\n\tdisplay: inline-block;\\n\theight: 0;\\n\twidth: 0;\\n}\\n\\n.\" + pluginClassName + \"-container {\\n\tdisplay: none;\\n\tz-index: 1;\\n\tposition: absolute;\\n}\\n\\n.\" + pluginClassName + \"-hidable {\\n\tcursor: pointer;\\n}\\n\\n[data-notify-text],[data-notify-html] {\\n\tposition: relative;\\n}\\n\\n.\" + pluginClassName + \"-arrow {\\n\tposition: absolute;\\n\tz-index: 2;\\n\twidth: 0;\\n\theight: 0;\\n}\"\n\t};\n\n\tvar stylePrefixes = {\n\t\t\"border-radius\": [\"-webkit-\", \"-moz-\"]\n\t};\n\n\tvar getStyle = function(name) {\n\t\treturn styles[name];\n\t};\n\n\tvar removeStyle = function(name) {\n\t\tif (!name) {\n\t\t\tthrow \"Missing Style name\";\n\t\t}\n\t\tif (styles[name]) {\n\t\t\tdelete styles[name];\n\t\t}\n\t};\n\n\tvar addStyle = function(name, def) {\n\t\tif (!name) {\n\t\t\tthrow \"Missing Style name\";\n\t\t}\n\t\tif (!def) {\n\t\t\tthrow \"Missing Style definition\";\n\t\t}\n\t\tif (!def.html) {\n\t\t\tthrow \"Missing Style HTML\";\n\t\t}\n\t\t//remove existing style\n\t\tvar existing = styles[name];\n\t\tif (existing && existing.cssElem) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn(pluginName + \": overwriting style '\" + name + \"'\");\n\t\t\t}\n\t\t\tstyles[name].cssElem.remove();\n\t\t}\n\t\tdef.name = name;\n\t\tstyles[name] = def;\n\t\tvar cssText = \"\";\n\t\tif (def.classes) {\n\t\t\t$.each(def.classes, function(className, props) {\n\t\t\t\tcssText += \".\" + pluginClassName + \"-\" + def.name + \"-\" + className + \" {\\n\";\n\t\t\t\t$.each(props, function(name, val) {\n\t\t\t\t\tif (stylePrefixes[name]) {\n\t\t\t\t\t\t$.each(stylePrefixes[name], function(i, prefix) {\n\t\t\t\t\t\t\treturn cssText += \"\t\" + prefix + name + \": \" + val + \";\\n\";\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn cssText += \"\t\" + name + \": \" + val + \";\\n\";\n\t\t\t\t});\n\t\t\t\treturn cssText += \"}\\n\";\n\t\t\t});\n\t\t}\n\t\tif (def.css) {\n\t\t\tcssText += \"/* styles for \" + def.name + \" */\\n\" + def.css;\n\t\t}\n\t\tif (cssText) {\n\t\t\tdef.cssElem = insertCSS(cssText);\n\t\t\tdef.cssElem.attr(\"id\", \"notify-\" + def.name);\n\t\t}\n\t\tvar fields = {};\n\t\tvar elem = $(def.html);\n\t\tfindFields(\"html\", elem, fields);\n\t\tfindFields(\"text\", elem, fields);\n\t\tdef.fields = fields;\n\t};\n\n\tvar insertCSS = function(cssText) {\n\t\tvar e, elem, error;\n\t\telem = createElem(\"style\");\n\t\telem.attr(\"type\", 'text/css');\n\t\t$(\"head\").append(elem);\n\t\ttry {\n\t\t\telem.html(cssText);\n\t\t} catch (_) {\n\t\t\telem[0].styleSheet.cssText = cssText;\n\t\t}\n\t\treturn elem;\n\t};\n\n\tvar findFields = function(type, elem, fields) {\n\t\tvar attr;\n\t\tif (type !== \"html\") {\n\t\t\ttype = \"text\";\n\t\t}\n\t\tattr = \"data-notify-\" + type;\n\t\treturn find(elem, \"[\" + attr + \"]\").each(function() {\n\t\t\tvar name;\n\t\t\tname = $(this).attr(attr);\n\t\t\tif (!name) {\n\t\t\t\tname = blankFieldName;\n\t\t\t}\n\t\t\tfields[name] = type;\n\t\t});\n\t};\n\n\tvar find = function(elem, selector) {\n\t\tif (elem.is(selector)) {\n\t\t\treturn elem;\n\t\t} else {\n\t\t\treturn elem.find(selector);\n\t\t}\n\t};\n\n\tvar pluginOptions = {\n\t\tclickToHide: true,\n\t\tautoHide: true,\n\t\tautoHideDelay: 5000,\n\t\tarrowShow: true,\n\t\tarrowSize: 5,\n\t\tbreakNewLines: true,\n\t\telementPosition: \"bottom\",\n\t\tglobalPosition: \"top right\",\n\t\tstyle: \"bootstrap\",\n\t\tclassName: \"error\",\n\t\tshowAnimation: \"slideDown\",\n\t\tshowDuration: 400,\n\t\thideAnimation: \"slideUp\",\n\t\thideDuration: 200,\n\t\tgap: 5\n\t};\n\n\tvar inherit = function(a, b) {\n\t\tvar F;\n\t\tF = function() {};\n\t\tF.prototype = a;\n\t\treturn $.extend(true, new F(), b);\n\t};\n\n\tvar defaults = function(opts) {\n\t\treturn $.extend(pluginOptions, opts);\n\t};\n\n\tvar createElem = function(tag) {\n\t\treturn $(\"<\" + tag + \"></\" + tag + \">\");\n\t};\n\n\tvar globalAnchors = {};\n\n\tvar getAnchorElement = function(element) {\n\t\tvar radios;\n\t\tif (element.is('[type=radio]')) {\n\t\t\tradios = element.parents('form:first').find('[type=radio]').filter(function(i, e) {\n\t\t\t\treturn $(e).attr(\"name\") === element.attr(\"name\");\n\t\t\t});\n\t\t\telement = radios.first();\n\t\t}\n\t\treturn element;\n\t};\n\n\tvar incr = function(obj, pos, val) {\n\t\tvar opp, temp;\n\t\tif (typeof val === \"string\") {\n\t\t\tval = parseInt(val, 10);\n\t\t} else if (typeof val !== \"number\") {\n\t\t\treturn;\n\t\t}\n\t\tif (isNaN(val)) {\n\t\t\treturn;\n\t\t}\n\t\topp = positions[opposites[pos.charAt(0)]];\n\t\ttemp = pos;\n\t\tif (obj[opp] !== undefined) {\n\t\t\tpos = positions[opp.charAt(0)];\n\t\t\tval = -val;\n\t\t}\n\t\tif (obj[pos] === undefined) {\n\t\t\tobj[pos] = val;\n\t\t} else {\n\t\t\tobj[pos] += val;\n\t\t}\n\t\treturn null;\n\t};\n\n\tvar realign = function(alignment, inner, outer) {\n\t\tif (alignment === \"l\" || alignment === \"t\") {\n\t\t\treturn 0;\n\t\t} else if (alignment === \"c\" || alignment === \"m\") {\n\t\t\treturn outer / 2 - inner / 2;\n\t\t} else if (alignment === \"r\" || alignment === \"b\") {\n\t\t\treturn outer - inner;\n\t\t}\n\t\tthrow \"Invalid alignment\";\n\t};\n\n\tvar encode = function(text) {\n\t\tencode.e = encode.e || createElem(\"div\");\n\t\treturn encode.e.text(text).html();\n\t};\n\n\tfunction Notification(elem, data, options) {\n\t\tif (typeof options === \"string\") {\n\t\t\toptions = {\n\t\t\t\tclassName: options\n\t\t\t};\n\t\t}\n\t\tthis.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {});\n\t\tthis.loadHTML();\n\t\tthis.wrapper = $(coreStyle.html);\n\t\tif (this.options.clickToHide) {\n\t\t\tthis.wrapper.addClass(pluginClassName + \"-hidable\");\n\t\t}\n\t\tthis.wrapper.data(pluginClassName, this);\n\t\tthis.arrow = this.wrapper.find(\".\" + pluginClassName + \"-arrow\");\n\t\tthis.container = this.wrapper.find(\".\" + pluginClassName + \"-container\");\n\t\tthis.container.append(this.userContainer);\n\t\tif (elem && elem.length) {\n\t\t\tthis.elementType = elem.attr(\"type\");\n\t\t\tthis.originalElement = elem;\n\t\t\tthis.elem = getAnchorElement(elem);\n\t\t\tthis.elem.data(pluginClassName, this);\n\t\t\tthis.elem.before(this.wrapper);\n\t\t}\n\t\tthis.container.hide();\n\t\tthis.run(data);\n\t}\n\n\tNotification.prototype.loadHTML = function() {\n\t\tvar style;\n\t\tstyle = this.getStyle();\n\t\tthis.userContainer = $(style.html);\n\t\tthis.userFields = style.fields;\n\t};\n\n\tNotification.prototype.show = function(show, userCallback) {\n\t\tvar args, callback, elems, fn, hidden;\n\t\tcallback = (function(_this) {\n\t\t\treturn function() {\n\t\t\t\tif (!show && !_this.elem) {\n\t\t\t\t\t_this.destroy();\n\t\t\t\t}\n\t\t\t\tif (userCallback) {\n\t\t\t\t\treturn userCallback();\n\t\t\t\t}\n\t\t\t};\n\t\t})(this);\n\t\thidden = this.container.parent().parents(':hidden').length > 0;\n\t\telems = this.container.add(this.arrow);\n\t\targs = [];\n\t\tif (hidden && show) {\n\t\t\tfn = \"show\";\n\t\t} else if (hidden && !show) {\n\t\t\tfn = \"hide\";\n\t\t} else if (!hidden && show) {\n\t\t\tfn = this.options.showAnimation;\n\t\t\targs.push(this.options.showDuration);\n\t\t} else if (!hidden && !show) {\n\t\t\tfn = this.options.hideAnimation;\n\t\t\targs.push(this.options.hideDuration);\n\t\t} else {\n\t\t\treturn callback();\n\t\t}\n\t\targs.push(callback);\n\t\treturn elems[fn].apply(elems, args);\n\t};\n\n\tNotification.prototype.setGlobalPosition = function() {\n\t\tvar p = this.getPosition();\n\t\tvar pMain = p[0];\n\t\tvar pAlign = p[1];\n\t\tvar main = positions[pMain];\n\t\tvar align = positions[pAlign];\n\t\tvar key = pMain + \"|\" + pAlign;\n\t\tvar anchor = globalAnchors[key];\n\t\tif (!anchor || !document.contains(anchor[0])) {\n\t\t\tanchor = globalAnchors[key] = createElem(\"div\");\n\t\t\tvar css = {};\n\t\t\tcss[main] = 0;\n\t\t\tif (align === \"middle\") {\n\t\t\t\tcss.top = '45%';\n\t\t\t} else if (align === \"center\") {\n\t\t\t\tcss.left = '45%';\n\t\t\t} else {\n\t\t\t\tcss[align] = 0;\n\t\t\t}\n\t\t\tanchor.css(css).addClass(pluginClassName + \"-corner\");\n\t\t\t$(\"body\").append(anchor);\n\t\t}\n\t\treturn anchor.prepend(this.wrapper);\n\t};\n\n\tNotification.prototype.setElementPosition = function() {\n\t\tvar arrowColor, arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, gap, j, k, len, len1, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, pos, posFull, position, ref, wrapPos;\n\t\tposition = this.getPosition();\n\t\tpMain = position[0];\n\t\tpAlign = position[1];\n\t\tpArrow = position[2];\n\t\telemPos = this.elem.position();\n\t\telemH = this.elem.outerHeight();\n\t\telemW = this.elem.outerWidth();\n\t\telemIH = this.elem.innerHeight();\n\t\telemIW = this.elem.innerWidth();\n\t\twrapPos = this.wrapper.position();\n\t\tcontH = this.container.height();\n\t\tcontW = this.container.width();\n\t\tmainFull = positions[pMain];\n\t\topp = opposites[pMain];\n\t\toppFull = positions[opp];\n\t\tcss = {};\n\t\tcss[oppFull] = pMain === \"b\" ? elemH : pMain === \"r\" ? elemW : 0;\n\t\tincr(css, \"top\", elemPos.top - wrapPos.top);\n\t\tincr(css, \"left\", elemPos.left - wrapPos.left);\n\t\tref = [\"top\", \"left\"];\n\t\tfor (j = 0, len = ref.length; j < len; j++) {\n\t\t\tpos = ref[j];\n\t\t\tmargin = parseInt(this.elem.css(\"margin-\" + pos), 10);\n\t\t\tif (margin) {\n\t\t\t\tincr(css, pos, margin);\n\t\t\t}\n\t\t}\n\t\tgap = Math.max(0, this.options.gap - (this.options.arrowShow ? arrowSize : 0));\n\t\tincr(css, oppFull, gap);\n\t\tif (!this.options.arrowShow) {\n\t\t\tthis.arrow.hide();\n\t\t} else {\n\t\t\tarrowSize = this.options.arrowSize;\n\t\t\tarrowCss = $.extend({}, css);\n\t\t\tarrowColor = this.userContainer.css(\"border-color\") || this.userContainer.css(\"border-top-color\") || this.userContainer.css(\"background-color\") || \"white\";\n\t\t\tfor (k = 0, len1 = mainPositions.length; k < len1; k++) {\n\t\t\t\tpos = mainPositions[k];\n\t\t\t\tposFull = positions[pos];\n\t\t\t\tif (pos === opp) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcolor = posFull === mainFull ? arrowColor : \"transparent\";\n\t\t\t\tarrowCss[\"border-\" + posFull] = arrowSize + \"px solid \" + color;\n\t\t\t}\n\t\t\tincr(css, positions[opp], arrowSize);\n\t\t\tif (indexOf.call(mainPositions, pAlign) >= 0) {\n\t\t\t\tincr(arrowCss, positions[pAlign], arrowSize * 2);\n\t\t\t}\n\t\t}\n\t\tif (indexOf.call(vAligns, pMain) >= 0) {\n\t\t\tincr(css, \"left\", realign(pAlign, contW, elemW));\n\t\t\tif (arrowCss) {\n\t\t\t\tincr(arrowCss, \"left\", realign(pAlign, arrowSize, elemIW));\n\t\t\t}\n\t\t} else if (indexOf.call(hAligns, pMain) >= 0) {\n\t\t\tincr(css, \"top\", realign(pAlign, contH, elemH));\n\t\t\tif (arrowCss) {\n\t\t\t\tincr(arrowCss, \"top\", realign(pAlign, arrowSize, elemIH));\n\t\t\t}\n\t\t}\n\t\tif (this.container.is(\":visible\")) {\n\t\t\tcss.display = \"block\";\n\t\t}\n\t\tthis.container.removeAttr(\"style\").css(css);\n\t\tif (arrowCss) {\n\t\t\treturn this.arrow.removeAttr(\"style\").css(arrowCss);\n\t\t}\n\t};\n\n\tNotification.prototype.getPosition = function() {\n\t\tvar pos, ref, ref1, ref2, ref3, ref4, ref5, text;\n\t\ttext = this.options.position || (this.elem ? this.options.elementPosition : this.options.globalPosition);\n\t\tpos = parsePosition(text);\n\t\tif (pos.length === 0) {\n\t\t\tpos[0] = \"b\";\n\t\t}\n\t\tif (ref = pos[0], indexOf.call(mainPositions, ref) < 0) {\n\t\t\tthrow \"Must be one of [\" + mainPositions + \"]\";\n\t\t}\n\t\tif (pos.length === 1 || ((ref1 = pos[0], indexOf.call(vAligns, ref1) >= 0) && (ref2 = pos[1], indexOf.call(hAligns, ref2) < 0)) || ((ref3 = pos[0], indexOf.call(hAligns, ref3) >= 0) && (ref4 = pos[1], indexOf.call(vAligns, ref4) < 0))) {\n\t\t\tpos[1] = (ref5 = pos[0], indexOf.call(hAligns, ref5) >= 0) ? \"m\" : \"l\";\n\t\t}\n\t\tif (pos.length === 2) {\n\t\t\tpos[2] = pos[1];\n\t\t}\n\t\treturn pos;\n\t};\n\n\tNotification.prototype.getStyle = function(name) {\n\t\tvar style;\n\t\tif (!name) {\n\t\t\tname = this.options.style;\n\t\t}\n\t\tif (!name) {\n\t\t\tname = \"default\";\n\t\t}\n\t\tstyle = styles[name];\n\t\tif (!style) {\n\t\t\tthrow \"Missing style: \" + name;\n\t\t}\n\t\treturn style;\n\t};\n\n\tNotification.prototype.updateClasses = function() {\n\t\tvar classes, style;\n\t\tclasses = [\"base\"];\n\t\tif ($.isArray(this.options.className)) {\n\t\t\tclasses = classes.concat(this.options.className);\n\t\t} else if (this.options.className) {\n\t\t\tclasses.push(this.options.className);\n\t\t}\n\t\tstyle = this.getStyle();\n\t\tclasses = $.map(classes, function(n) {\n\t\t\treturn pluginClassName + \"-\" + style.name + \"-\" + n;\n\t\t}).join(\" \");\n\t\treturn this.userContainer.attr(\"class\", classes);\n\t};\n\n\tNotification.prototype.run = function(data, options) {\n\t\tvar d, datas, name, type, value;\n\t\tif ($.isPlainObject(options)) {\n\t\t\t$.extend(this.options, options);\n\t\t} else if ($.type(options) === \"string\") {\n\t\t\tthis.options.className = options;\n\t\t}\n\t\tif (this.container && !data) {\n\t\t\tthis.show(false);\n\t\t\treturn;\n\t\t} else if (!this.container && !data) {\n\t\t\treturn;\n\t\t}\n\t\tdatas = {};\n\t\tif ($.isPlainObject(data)) {\n\t\t\tdatas = data;\n\t\t} else {\n\t\t\tdatas[blankFieldName] = data;\n\t\t}\n\t\tfor (name in datas) {\n\t\t\td = datas[name];\n\t\t\ttype = this.userFields[name];\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (type === \"text\") {\n\t\t\t\td = encode(d);\n\t\t\t\tif (this.options.breakNewLines) {\n\t\t\t\t\td = d.replace(/\\n/g, '<br/>');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = name === blankFieldName ? '' : '=' + name;\n\t\t\tfind(this.userContainer, \"[data-notify-\" + type + value + \"]\").html(d);\n\t\t}\n\t\tthis.updateClasses();\n\t\tif (this.elem) {\n\t\t\tthis.setElementPosition();\n\t\t} else {\n\t\t\tthis.setGlobalPosition();\n\t\t}\n\t\tthis.show(true);\n\t\tif (this.options.autoHide) {\n\t\t\tclearTimeout(this.autohideTimer);\n\t\t\tthis.autohideTimer = setTimeout(this.show.bind(this, false), this.options.autoHideDelay);\n\t\t}\n\t};\n\n\tNotification.prototype.destroy = function() {\n\t\tthis.wrapper.data(pluginClassName, null);\n\t\tthis.wrapper.remove();\n\t};\n\n\t$[pluginName] = function(elem, data, options) {\n\t\tif ((elem && elem.nodeName) || elem.jquery) {\n\t\t\t$(elem)[pluginName](data, options);\n\t\t} else {\n\t\t\toptions = data;\n\t\t\tdata = elem;\n\t\t\tnew Notification(null, data, options);\n\t\t}\n\t\treturn elem;\n\t};\n\n\t$.fn[pluginName] = function(data, options) {\n\t\t$(this).each(function() {\n\t\t\tvar prev = getAnchorElement($(this)).data(pluginClassName);\n\t\t\tif (prev) {\n\t\t\t\tprev.destroy();\n\t\t\t}\n\t\t\tvar curr = new Notification($(this), data, options);\n\t\t});\n\t\treturn this;\n\t};\n\n\t$.extend($[pluginName], {\n\t\tdefaults: defaults,\n\t\taddStyle: addStyle,\n\t\tremoveStyle: removeStyle,\n\t\tpluginOptions: pluginOptions,\n\t\tgetStyle: getStyle,\n\t\tinsertCSS: insertCSS\n\t});\n\n\t//always include the default bootstrap style\n\taddStyle(\"bootstrap\", {\n\t\thtml: \"<div>\\n<span data-notify-text></span>\\n</div>\",\n\t\tclasses: {\n\t\t\tbase: {\n\t\t\t\t\"font-weight\": \"bold\",\n\t\t\t\t\"padding\": \"8px 15px 8px 14px\",\n\t\t\t\t\"text-shadow\": \"0 1px 0 rgba(255, 255, 255, 0.5)\",\n\t\t\t\t\"background-color\": \"#fcf8e3\",\n\t\t\t\t\"border\": \"1px solid #fbeed5\",\n\t\t\t\t\"border-radius\": \"4px\",\n\t\t\t\t\"white-space\": \"nowrap\",\n\t\t\t\t\"padding-left\": \"25px\",\n\t\t\t\t\"background-repeat\": \"no-repeat\",\n\t\t\t\t\"background-position\": \"3px 7px\"\n\t\t\t},\n\t\t\terror: {\n\t\t\t\t\"color\": \"#B94A48\",\n\t\t\t\t\"background-color\": \"#F2DEDE\",\n\t\t\t\t\"border-color\": \"#EED3D7\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)\"\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\t\"color\": \"#468847\",\n\t\t\t\t\"background-color\": \"#DFF0D8\",\n\t\t\t\t\"border-color\": \"#D6E9C6\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)\"\n\t\t\t},\n\t\t\tinfo: {\n\t\t\t\t\"color\": \"#3A87AD\",\n\t\t\t\t\"background-color\": \"#D9EDF7\",\n\t\t\t\t\"border-color\": \"#BCE8F1\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)\"\n\t\t\t},\n\t\t\twarn: {\n\t\t\t\t\"color\": \"#C09853\",\n\t\t\t\t\"background-color\": \"#FCF8E3\",\n\t\t\t\t\"border-color\": \"#FBEED5\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)\"\n\t\t\t}\n\t\t}\n\t});\n\n\t$(function() {\n\t\tinsertCSS(coreStyle.css).attr(\"id\", \"core-notify\");\n\t\t$(document).on(\"click\", \".\" + pluginClassName + \"-hidable\", function(e) {\n\t\t\t$(this).trigger(\"notify-hide\");\n\t\t});\n\t\t$(document).on(\"notify-hide\", \".\" + pluginClassName + \"-wrapper\", function(e) {\n\t\t\tvar elem = $(this).data(pluginClassName);\n\t\t\tif(elem) {\n\t\t\t\telem.show(false);\n\t\t\t}\n\t\t});\n\t});\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/outlayer/item.js",
    "content": "/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n  'use strict';\n  // universal module definition\n  if ( typeof define === 'function' && define.amd ) {\n    // AMD\n    define( [\n        'eventEmitter/EventEmitter',\n        'get-size/get-size',\n        'get-style-property/get-style-property',\n        'fizzy-ui-utils/utils'\n      ],\n      function( EventEmitter, getSize, getStyleProperty, utils ) {\n        return factory( window, EventEmitter, getSize, getStyleProperty, utils );\n      }\n    );\n  } else if (typeof exports === 'object') {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('wolfy87-eventemitter'),\n      require('get-size'),\n      require('desandro-get-style-property'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Outlayer = {};\n    window.Outlayer.Item = factory(\n      window,\n      window.EventEmitter,\n      window.getSize,\n      window.getStyleProperty,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, EventEmitter, getSize, getStyleProperty, utils ) {\n'use strict';\n\n// ----- helpers ----- //\n\nvar getComputedStyle = window.getComputedStyle;\nvar getStyle = getComputedStyle ?\n  function( elem ) {\n    return getComputedStyle( elem, null );\n  } :\n  function( elem ) {\n    return elem.currentStyle;\n  };\n\n\nfunction isEmptyObj( obj ) {\n  for ( var prop in obj ) {\n    return false;\n  }\n  prop = null;\n  return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\nvar transitionProperty = getStyleProperty('transition');\nvar transformProperty = getStyleProperty('transform');\nvar supportsCSS3 = transitionProperty && transformProperty;\nvar is3d = !!getStyleProperty('perspective');\n\nvar transitionEndEvent = {\n  WebkitTransition: 'webkitTransitionEnd',\n  MozTransition: 'transitionend',\n  OTransition: 'otransitionend',\n  transition: 'transitionend'\n}[ transitionProperty ];\n\n// properties that could have vendor prefix\nvar prefixableProperties = [\n  'transform',\n  'transition',\n  'transitionDuration',\n  'transitionProperty'\n];\n\n// cache all vendor properties\nvar vendorProperties = ( function() {\n  var cache = {};\n  for ( var i=0, len = prefixableProperties.length; i < len; i++ ) {\n    var prop = prefixableProperties[i];\n    var supportedProp = getStyleProperty( prop );\n    if ( supportedProp && supportedProp !== prop ) {\n      cache[ prop ] = supportedProp;\n    }\n  }\n  return cache;\n})();\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n  if ( !element ) {\n    return;\n  }\n\n  this.element = element;\n  // parent layout class, i.e. Masonry, Isotope, or Packery\n  this.layout = layout;\n  this.position = {\n    x: 0,\n    y: 0\n  };\n\n  this._create();\n}\n\n// inherit EventEmitter\nutils.extend( Item.prototype, EventEmitter.prototype );\n\nItem.prototype._create = function() {\n  // transition objects\n  this._transn = {\n    ingProperties: {},\n    clean: {},\n    onEnd: {}\n  };\n\n  this.css({\n    position: 'absolute'\n  });\n};\n\n// trigger specified handler for event type\nItem.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nItem.prototype.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nItem.prototype.css = function( style ) {\n  var elemStyle = this.element.style;\n\n  for ( var prop in style ) {\n    // use vendor property if available\n    var supportedProp = vendorProperties[ prop ] || prop;\n    elemStyle[ supportedProp ] = style[ prop ];\n  }\n};\n\n // measure position, and sets it\nItem.prototype.getPosition = function() {\n  var style = getStyle( this.element );\n  var layoutOptions = this.layout.options;\n  var isOriginLeft = layoutOptions.isOriginLeft;\n  var isOriginTop = layoutOptions.isOriginTop;\n  var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n  var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n  var x = parseInt( xValue, 10 );\n  var y = parseInt( yValue, 10 );\n  // convert percent to pixels\n  var layoutSize = this.layout.size;\n  x = xValue.indexOf('%') != -1 ? ( x / 100 ) * layoutSize.width : x;\n  y = yValue.indexOf('%') != -1 ? ( y / 100 ) * layoutSize.height : y;\n\n  // clean up 'auto' or other non-integer values\n  x = isNaN( x ) ? 0 : x;\n  y = isNaN( y ) ? 0 : y;\n  // remove padding from measurement\n  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n  this.position.x = x;\n  this.position.y = y;\n};\n\n// set settled position, apply padding\nItem.prototype.layoutPosition = function() {\n  var layoutSize = this.layout.size;\n  var layoutOptions = this.layout.options;\n  var style = {};\n\n  // x\n  var xPadding = layoutOptions.isOriginLeft ? 'paddingLeft' : 'paddingRight';\n  var xProperty = layoutOptions.isOriginLeft ? 'left' : 'right';\n  var xResetProperty = layoutOptions.isOriginLeft ? 'right' : 'left';\n\n  var x = this.position.x + layoutSize[ xPadding ];\n  // set in percentage or pixels\n  style[ xProperty ] = this.getXValue( x );\n  // reset other property\n  style[ xResetProperty ] = '';\n\n  // y\n  var yPadding = layoutOptions.isOriginTop ? 'paddingTop' : 'paddingBottom';\n  var yProperty = layoutOptions.isOriginTop ? 'top' : 'bottom';\n  var yResetProperty = layoutOptions.isOriginTop ? 'bottom' : 'top';\n\n  var y = this.position.y + layoutSize[ yPadding ];\n  // set in percentage or pixels\n  style[ yProperty ] = this.getYValue( y );\n  // reset other property\n  style[ yResetProperty ] = '';\n\n  this.css( style );\n  this.emitEvent( 'layout', [ this ] );\n};\n\nItem.prototype.getXValue = function( x ) {\n  var layoutOptions = this.layout.options;\n  return layoutOptions.percentPosition && !layoutOptions.isHorizontal ?\n    ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nItem.prototype.getYValue = function( y ) {\n  var layoutOptions = this.layout.options;\n  return layoutOptions.percentPosition && layoutOptions.isHorizontal ?\n    ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\n\nItem.prototype._transitionTo = function( x, y ) {\n  this.getPosition();\n  // get current x & y from top/left\n  var curX = this.position.x;\n  var curY = this.position.y;\n\n  var compareX = parseInt( x, 10 );\n  var compareY = parseInt( y, 10 );\n  var didNotMove = compareX === this.position.x && compareY === this.position.y;\n\n  // save end position\n  this.setPosition( x, y );\n\n  // if did not move and not transitioning, just go to layout\n  if ( didNotMove && !this.isTransitioning ) {\n    this.layoutPosition();\n    return;\n  }\n\n  var transX = x - curX;\n  var transY = y - curY;\n  var transitionStyle = {};\n  transitionStyle.transform = this.getTranslate( transX, transY );\n\n  this.transition({\n    to: transitionStyle,\n    onTransitionEnd: {\n      transform: this.layoutPosition\n    },\n    isCleaning: true\n  });\n};\n\nItem.prototype.getTranslate = function( x, y ) {\n  // flip cooridinates if origin on right or bottom\n  var layoutOptions = this.layout.options;\n  x = layoutOptions.isOriginLeft ? x : -x;\n  y = layoutOptions.isOriginTop ? y : -y;\n  x = this.getXValue( x );\n  y = this.getYValue( y );\n\n  if ( is3d ) {\n    return 'translate3d(' + x + ', ' + y + ', 0)';\n  }\n\n  return 'translate(' + x + ', ' + y + ')';\n};\n\n// non transition + transform support\nItem.prototype.goTo = function( x, y ) {\n  this.setPosition( x, y );\n  this.layoutPosition();\n};\n\n// use transition and transforms if supported\nItem.prototype.moveTo = supportsCSS3 ?\n  Item.prototype._transitionTo : Item.prototype.goTo;\n\nItem.prototype.setPosition = function( x, y ) {\n  this.position.x = parseInt( x, 10 );\n  this.position.y = parseInt( y, 10 );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nItem.prototype._nonTransition = function( args ) {\n  this.css( args.to );\n  if ( args.isCleaning ) {\n    this._removeStyles( args.to );\n  }\n  for ( var prop in args.onTransitionEnd ) {\n    args.onTransitionEnd[ prop ].call( this );\n  }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n *   @param {Object} to - style to transition to\n *   @param {Object} from - style to start transition from\n *   @param {Boolean} isCleaning - removes transition styles after transition\n *   @param {Function} onTransitionEnd - callback\n */\nItem.prototype._transition = function( args ) {\n  // redirect to nonTransition if no transition duration\n  if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n    this._nonTransition( args );\n    return;\n  }\n\n  var _transition = this._transn;\n  // keep track of onTransitionEnd callback by css property\n  for ( var prop in args.onTransitionEnd ) {\n    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n  }\n  // keep track of properties that are transitioning\n  for ( prop in args.to ) {\n    _transition.ingProperties[ prop ] = true;\n    // keep track of properties to clean up when transition is done\n    if ( args.isCleaning ) {\n      _transition.clean[ prop ] = true;\n    }\n  }\n\n  // set from styles\n  if ( args.from ) {\n    this.css( args.from );\n    // force redraw. http://blog.alexmaccaw.com/css-transitions\n    var h = this.element.offsetHeight;\n    // hack for JSHint to hush about unused var\n    h = null;\n  }\n  // enable transition\n  this.enableTransition( args.to );\n  // set styles that are transitioning\n  this.css( args.to );\n\n  this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n  return str.replace( /([A-Z])/g, function( $1 ) {\n    return '-' + $1.toLowerCase();\n  });\n}\n\nvar transitionProps = 'opacity,' +\n  toDashedAll( vendorProperties.transform || 'transform' );\n\nItem.prototype.enableTransition = function(/* style */) {\n  // HACK changing transitionProperty during a transition\n  // will cause transition to jump\n  if ( this.isTransitioning ) {\n    return;\n  }\n\n  // make `transition: foo, bar, baz` from style object\n  // HACK un-comment this when enableTransition can work\n  // while a transition is happening\n  // var transitionValues = [];\n  // for ( var prop in style ) {\n  //   // dash-ify camelCased properties like WebkitTransition\n  //   prop = vendorProperties[ prop ] || prop;\n  //   transitionValues.push( toDashedAll( prop ) );\n  // }\n  // enable transition styles\n  this.css({\n    transitionProperty: transitionProps,\n    transitionDuration: this.layout.options.transitionDuration\n  });\n  // listen for transition end event\n  this.element.addEventListener( transitionEndEvent, this, false );\n};\n\nItem.prototype.transition = Item.prototype[ transitionProperty ? '_transition' : '_nonTransition' ];\n\n// ----- events ----- //\n\nItem.prototype.onwebkitTransitionEnd = function( event ) {\n  this.ontransitionend( event );\n};\n\nItem.prototype.onotransitionend = function( event ) {\n  this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n  '-webkit-transform': 'transform',\n  '-moz-transform': 'transform',\n  '-o-transform': 'transform'\n};\n\nItem.prototype.ontransitionend = function( event ) {\n  // disregard bubbled events from children\n  if ( event.target !== this.element ) {\n    return;\n  }\n  var _transition = this._transn;\n  // get property name of transitioned property, convert to prefix-free\n  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n  // remove property that has completed transitioning\n  delete _transition.ingProperties[ propertyName ];\n  // check if any properties are still transitioning\n  if ( isEmptyObj( _transition.ingProperties ) ) {\n    // all properties have completed transitioning\n    this.disableTransition();\n  }\n  // clean style\n  if ( propertyName in _transition.clean ) {\n    // clean up style\n    this.element.style[ event.propertyName ] = '';\n    delete _transition.clean[ propertyName ];\n  }\n  // trigger onTransitionEnd callback\n  if ( propertyName in _transition.onEnd ) {\n    var onTransitionEnd = _transition.onEnd[ propertyName ];\n    onTransitionEnd.call( this );\n    delete _transition.onEnd[ propertyName ];\n  }\n\n  this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nItem.prototype.disableTransition = function() {\n  this.removeTransitionStyles();\n  this.element.removeEventListener( transitionEndEvent, this, false );\n  this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nItem.prototype._removeStyles = function( style ) {\n  // clean up transition styles\n  var cleanStyle = {};\n  for ( var prop in style ) {\n    cleanStyle[ prop ] = '';\n  }\n  this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n  transitionProperty: '',\n  transitionDuration: ''\n};\n\nItem.prototype.removeTransitionStyles = function() {\n  // remove transition\n  this.css( cleanTransitionStyle );\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nItem.prototype.removeElem = function() {\n  this.element.parentNode.removeChild( this.element );\n  // remove display: none\n  this.css({ display: '' });\n  this.emitEvent( 'remove', [ this ] );\n};\n\nItem.prototype.remove = function() {\n  // just remove element if no transition support or no transition\n  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n    this.removeElem();\n    return;\n  }\n\n  // start transition\n  var _this = this;\n  this.once( 'transitionEnd', function() {\n    _this.removeElem();\n  });\n  this.hide();\n};\n\nItem.prototype.reveal = function() {\n  delete this.isHidden;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n  this.transition({\n    from: options.hiddenStyle,\n    to: options.visibleStyle,\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nItem.prototype.onRevealTransitionEnd = function() {\n  // check if still visible\n  // during transition, item may have been hidden\n  if ( !this.isHidden ) {\n    this.emitEvent('reveal');\n  }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nItem.prototype.getHideRevealTransitionEndProperty = function( styleProperty ) {\n  var optionStyle = this.layout.options[ styleProperty ];\n  // use opacity\n  if ( optionStyle.opacity ) {\n    return 'opacity';\n  }\n  // get first property\n  for ( var prop in optionStyle ) {\n    return prop;\n  }\n};\n\nItem.prototype.hide = function() {\n  // set flag\n  this.isHidden = true;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n  this.transition({\n    from: options.visibleStyle,\n    to: options.hiddenStyle,\n    // keep hidden stuff hidden\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nItem.prototype.onHideTransitionEnd = function() {\n  // check if still hidden\n  // during transition, item may have been un-hidden\n  if ( this.isHidden ) {\n    this.css({ display: 'none' });\n    this.emitEvent('hide');\n  }\n};\n\nItem.prototype.destroy = function() {\n  this.css({\n    position: '',\n    left: '',\n    right: '',\n    top: '',\n    bottom: '',\n    transition: '',\n    transform: ''\n  });\n};\n\nreturn Item;\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/outlayer/outlayer.js",
    "content": "/*!\n * Outlayer v1.4.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n  'use strict';\n  // universal module definition\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n        'eventie/eventie',\n        'eventEmitter/EventEmitter',\n        'get-size/get-size',\n        'fizzy-ui-utils/utils',\n        './item'\n      ],\n      function( eventie, EventEmitter, getSize, utils, Item ) {\n        return factory( window, eventie, EventEmitter, getSize, utils, Item);\n      }\n    );\n  } else if ( typeof exports == 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('eventie'),\n      require('wolfy87-eventemitter'),\n      require('get-size'),\n      require('fizzy-ui-utils'),\n      require('./item')\n    );\n  } else {\n    // browser global\n    window.Outlayer = factory(\n      window,\n      window.eventie,\n      window.EventEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      window.Outlayer.Item\n    );\n  }\n\n}( window, function factory( window, eventie, EventEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for ' + this.constructor.namespace +\n        ': ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // add id for Outlayer.getFromElement\n  var id = ++GUID;\n  this.element.outlayerGUID = id; // expando\n  instances[ id ] = this; // associate via id\n\n  // kick it off\n  this._create();\n\n  if ( this.options.isInitLayout ) {\n    this.layout();\n  }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n  containerStyle: {\n    position: 'relative'\n  },\n  isInitLayout: true,\n  isOriginLeft: true,\n  isOriginTop: true,\n  isResizeBound: true,\n  isResizingContainer: true,\n  // item options\n  transitionDuration: '0.4s',\n  hiddenStyle: {\n    opacity: 0,\n    transform: 'scale(0.001)'\n  },\n  visibleStyle: {\n    opacity: 1,\n    transform: 'scale(1)'\n  }\n};\n\n// inherit EventEmitter\nutils.extend( Outlayer.prototype, EventEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nOutlayer.prototype.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\nOutlayer.prototype._create = function() {\n  // get items from children\n  this.reloadItems();\n  // elements that affect layout, but are not laid out\n  this.stamps = [];\n  this.stamp( this.options.stamp );\n  // set container style\n  utils.extend( this.element.style, this.options.containerStyle );\n\n  // bind resize method\n  if ( this.options.isResizeBound ) {\n    this.bindResize();\n  }\n};\n\n// goes through all children again and gets bricks in proper order\nOutlayer.prototype.reloadItems = function() {\n  // collection of item elements\n  this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nOutlayer.prototype._itemize = function( elems ) {\n\n  var itemElems = this._filterFindItemElements( elems );\n  var Item = this.constructor.Item;\n\n  // create new Outlayer Items for collection\n  var items = [];\n  for ( var i=0, len = itemElems.length; i < len; i++ ) {\n    var elem = itemElems[i];\n    var item = new Item( elem, this );\n    items.push( item );\n  }\n\n  return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nOutlayer.prototype._filterFindItemElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nOutlayer.prototype.getItemElements = function() {\n  var elems = [];\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    elems.push( this.items[i].element );\n  }\n  return elems;\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nOutlayer.prototype.layout = function() {\n  this._resetLayout();\n  this._manageStamps();\n\n  // don't animate first layout\n  var isInstant = this.options.isLayoutInstant !== undefined ?\n    this.options.isLayoutInstant : !this._isLayoutInited;\n  this.layoutItems( this.items, isInstant );\n\n  // flag for initalized\n  this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nOutlayer.prototype._init = Outlayer.prototype.layout;\n\n/**\n * logic before any new layout\n */\nOutlayer.prototype._resetLayout = function() {\n  this.getSize();\n};\n\n\nOutlayer.prototype.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nOutlayer.prototype._getMeasurement = function( measurement, size ) {\n  var option = this.options[ measurement ];\n  var elem;\n  if ( !option ) {\n    // default to 0\n    this[ measurement ] = 0;\n  } else {\n    // use option as an element\n    if ( typeof option === 'string' ) {\n      elem = this.element.querySelector( option );\n    } else if ( utils.isElement( option ) ) {\n      elem = option;\n    }\n    // use size of element, if element\n    this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n  }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nOutlayer.prototype.layoutItems = function( items, isInstant ) {\n  items = this._getItemsForLayout( items );\n\n  this._layoutItems( items, isInstant );\n\n  this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nOutlayer.prototype._getItemsForLayout = function( items ) {\n  var layoutItems = [];\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    if ( !item.isIgnored ) {\n      layoutItems.push( item );\n    }\n  }\n  return layoutItems;\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nOutlayer.prototype._layoutItems = function( items, isInstant ) {\n  this._emitCompleteOnItems( 'layout', items );\n\n  if ( !items || !items.length ) {\n    // no items, emit event with empty array\n    return;\n  }\n\n  var queue = [];\n\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    // get x/y object from method\n    var position = this._getItemLayoutPosition( item );\n    // enqueue\n    position.item = item;\n    position.isInstant = isInstant || item.isLayoutInstant;\n    queue.push( position );\n  }\n\n  this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nOutlayer.prototype._getItemLayoutPosition = function( /* item */ ) {\n  return {\n    x: 0,\n    y: 0\n  };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nOutlayer.prototype._processLayoutQueue = function( queue ) {\n  for ( var i=0, len = queue.length; i < len; i++ ) {\n    var obj = queue[i];\n    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant );\n  }\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nOutlayer.prototype._positionItem = function( item, x, y, isInstant ) {\n  if ( isInstant ) {\n    // if not transition, just set CSS\n    item.goTo( x, y );\n  } else {\n    item.moveTo( x, y );\n  }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nOutlayer.prototype._postLayout = function() {\n  this.resizeContainer();\n};\n\nOutlayer.prototype.resizeContainer = function() {\n  if ( !this.options.isResizingContainer ) {\n    return;\n  }\n  var size = this._getContainerSize();\n  if ( size ) {\n    this._setContainerMeasure( size.width, true );\n    this._setContainerMeasure( size.height, false );\n  }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n *   @param {Number} width\n *   @param {Number} height\n */\nOutlayer.prototype._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nOutlayer.prototype._setContainerMeasure = function( measure, isWidth ) {\n  if ( measure === undefined ) {\n    return;\n  }\n\n  var elemSize = this.size;\n  // add padding and border width if border box\n  if ( elemSize.isBorderBox ) {\n    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n      elemSize.borderLeftWidth + elemSize.borderRightWidth :\n      elemSize.paddingBottom + elemSize.paddingTop +\n      elemSize.borderTopWidth + elemSize.borderBottomWidth;\n  }\n\n  measure = Math.max( measure, 0 );\n  this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nOutlayer.prototype._emitCompleteOnItems = function( eventName, items ) {\n  var _this = this;\n  function onComplete() {\n    _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n  }\n\n  var count = items.length;\n  if ( !items || !count ) {\n    onComplete();\n    return;\n  }\n\n  var doneCount = 0;\n  function tick() {\n    doneCount++;\n    if ( doneCount === count ) {\n      onComplete();\n    }\n  }\n\n  // bind callback\n  for ( var i=0, len = items.length; i < len; i++ ) {\n    var item = items[i];\n    item.once( eventName, tick );\n  }\n};\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nOutlayer.prototype.dispatchEvent = function( type, event, args ) {\n  // add original event to arguments\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery ) {\n    // set this.$element\n    this.$element = this.$element || jQuery( this.element );\n    if ( event ) {\n      // create jQuery event\n      var $event = jQuery.Event( event );\n      $event.type = type;\n      this.$element.trigger( $event, args );\n    } else {\n      // just trigger with type if no event available\n      this.$element.trigger( type, args );\n    }\n  }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nOutlayer.prototype.ignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    item.isIgnored = true;\n  }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nOutlayer.prototype.unignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    delete item.isIgnored;\n  }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nOutlayer.prototype.stamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ) {\n    return;\n  }\n\n  this.stamps = this.stamps.concat( elems );\n  // ignore\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    this.ignore( elem );\n  }\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nOutlayer.prototype.unstamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ){\n    return;\n  }\n\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    // filter out removed stamp elements\n    utils.removeFrom( this.stamps, elem );\n    this.unignore( elem );\n  }\n\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nOutlayer.prototype._find = function( elems ) {\n  if ( !elems ) {\n    return;\n  }\n  // if string, use argument as selector string\n  if ( typeof elems === 'string' ) {\n    elems = this.element.querySelectorAll( elems );\n  }\n  elems = utils.makeArray( elems );\n  return elems;\n};\n\nOutlayer.prototype._manageStamps = function() {\n  if ( !this.stamps || !this.stamps.length ) {\n    return;\n  }\n\n  this._getBoundingRect();\n\n  for ( var i=0, len = this.stamps.length; i < len; i++ ) {\n    var stamp = this.stamps[i];\n    this._manageStamp( stamp );\n  }\n};\n\n// update boundingLeft / Top\nOutlayer.prototype._getBoundingRect = function() {\n  // get bounding rect for container element\n  var boundingRect = this.element.getBoundingClientRect();\n  var size = this.size;\n  this._boundingRect = {\n    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n    top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n  };\n};\n\n/**\n * @param {Element} stamp\n**/\nOutlayer.prototype._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nOutlayer.prototype._getElementOffset = function( elem ) {\n  var boundingRect = elem.getBoundingClientRect();\n  var thisRect = this._boundingRect;\n  var size = getSize( elem );\n  var offset = {\n    left: boundingRect.left - thisRect.left - size.marginLeft,\n    top: boundingRect.top - thisRect.top - size.marginTop,\n    right: thisRect.right - boundingRect.right - size.marginRight,\n    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n  };\n  return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nOutlayer.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n/**\n * Bind layout to window resizing\n */\nOutlayer.prototype.bindResize = function() {\n  // bind just one listener\n  if ( this.isResizeBound ) {\n    return;\n  }\n  eventie.bind( window, 'resize', this );\n  this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nOutlayer.prototype.unbindResize = function() {\n  if ( this.isResizeBound ) {\n    eventie.unbind( window, 'resize', this );\n  }\n  this.isResizeBound = false;\n};\n\n// original debounce by John Hann\n// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/\n\n// this fires every resize\nOutlayer.prototype.onresize = function() {\n  if ( this.resizeTimeout ) {\n    clearTimeout( this.resizeTimeout );\n  }\n\n  var _this = this;\n  function delayed() {\n    _this.resize();\n    delete _this.resizeTimeout;\n  }\n\n  this.resizeTimeout = setTimeout( delayed, 100 );\n};\n\n// debounced, layout on resize\nOutlayer.prototype.resize = function() {\n  // don't trigger if size did not change\n  // or if resize was unbound. See #9\n  if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n    return;\n  }\n\n  this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nOutlayer.prototype.needsResizeLayout = function() {\n  var size = getSize( this.element );\n  // check that this.size and size are there\n  // IE8 triggers resize on body size change, so they might not be\n  var hasSizes = this.size && size;\n  return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nOutlayer.prototype.addItems = function( elems ) {\n  var items = this._itemize( elems );\n  // add items to collection\n  if ( items.length ) {\n    this.items = this.items.concat( items );\n  }\n  return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.appended = function( elems ) {\n  var items = this.addItems( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // layout and reveal just the new items\n  this.layoutItems( items, true );\n  this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.prepended = function( elems ) {\n  var items = this._itemize( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // add items to beginning of collection\n  var previousItems = this.items.slice(0);\n  this.items = items.concat( previousItems );\n  // start new layout\n  this._resetLayout();\n  this._manageStamps();\n  // layout new stuff without transition\n  this.layoutItems( items, true );\n  this.reveal( items );\n  // layout previous items\n  this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nOutlayer.prototype.reveal = function( items ) {\n  this._emitCompleteOnItems( 'reveal', items );\n\n  var len = items && items.length;\n  for ( var i=0; len && i < len; i++ ) {\n    var item = items[i];\n    item.reveal();\n  }\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nOutlayer.prototype.hide = function( items ) {\n  this._emitCompleteOnItems( 'hide', items );\n\n  var len = items && items.length;\n  for ( var i=0; len && i < len; i++ ) {\n    var item = items[i];\n    item.hide();\n  }\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nOutlayer.prototype.revealItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nOutlayer.prototype.hideItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nOutlayer.prototype.getItem = function( elem ) {\n  // loop through items to get the one that matches\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    var item = this.items[i];\n    if ( item.element === elem ) {\n      // return item\n      return item;\n    }\n  }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nOutlayer.prototype.getItems = function( elems ) {\n  elems = utils.makeArray( elems );\n  var items = [];\n  for ( var i=0, len = elems.length; i < len; i++ ) {\n    var elem = elems[i];\n    var item = this.getItem( elem );\n    if ( item ) {\n      items.push( item );\n    }\n  }\n\n  return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nOutlayer.prototype.remove = function( elems ) {\n  var removeItems = this.getItems( elems );\n\n  this._emitCompleteOnItems( 'remove', removeItems );\n\n  // bail if no items to remove\n  if ( !removeItems || !removeItems.length ) {\n    return;\n  }\n\n  for ( var i=0, len = removeItems.length; i < len; i++ ) {\n    var item = removeItems[i];\n    item.remove();\n    // remove item from collection\n    utils.removeFrom( this.items, item );\n  }\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nOutlayer.prototype.destroy = function() {\n  // clean up dynamic styles\n  var style = this.element.style;\n  style.height = '';\n  style.position = '';\n  style.width = '';\n  // destroy items\n  for ( var i=0, len = this.items.length; i < len; i++ ) {\n    var item = this.items[i];\n    item.destroy();\n  }\n\n  this.unbindResize();\n\n  var id = this.element.outlayerGUID;\n  delete instances[ id ]; // remove reference to instance by id\n  delete this.element.outlayerGUID;\n  // remove data for jQuery\n  if ( jQuery ) {\n    jQuery.removeData( this.element, this.constructor.namespace );\n  }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.outlayerGUID;\n  return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n  // sub-class Outlayer\n  function Layout() {\n    Outlayer.apply( this, arguments );\n  }\n  // inherit Outlayer prototype, use Object.create if there\n  if ( Object.create ) {\n    Layout.prototype = Object.create( Outlayer.prototype );\n  } else {\n    utils.extend( Layout.prototype, Outlayer.prototype );\n  }\n  // set contructor, used for namespace and Item\n  Layout.prototype.constructor = Layout;\n\n  Layout.defaults = utils.extend( {}, Outlayer.defaults );\n  // apply new options\n  utils.extend( Layout.defaults, options );\n  // keep prototype.settings for backwards compatibility (Packery v1.2.0)\n  Layout.prototype.settings = {};\n\n  Layout.namespace = namespace;\n\n  Layout.data = Outlayer.data;\n\n  // sub-class Item\n  Layout.Item = function LayoutItem() {\n    Item.apply( this, arguments );\n  };\n\n  Layout.Item.prototype = new Item();\n\n  // -------------------------- declarative -------------------------- //\n\n  utils.htmlInit( Layout, namespace );\n\n  // -------------------------- jQuery bridge -------------------------- //\n\n  // make into jQuery plugin\n  if ( jQuery && jQuery.bridget ) {\n    jQuery.bridget( namespace, Layout );\n  }\n\n  return Layout;\n};\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/LICENSE",
    "content": "Copyright (c) 2014 Owl\nModified work Copyright 2016 David Deutsch\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/README.md",
    "content": "# OwlCarousel2 is currently being transferred to a new owner\n\nStay tuned while the new owner sorts through some stuff. (Oh, hi, I'm [David](https://github.com/daviddeutsch)!)\n\n## Owl Carousel 2\n\nTouch enabled [jQuery](https://jquery.com/) plugin that lets you create a beautiful, responsive carousel slider. **To get started, check out https://owlcarousel2.github.io/OwlCarousel2/.**\n\n## Quick start\n\n### Install\n\nThis package can be installed with:\n\n- [npm](https://www.npmjs.com/package/owl.carousel): `npm install --save owl.carousel`\n- [bower](http://bower.io/search/?q=owl.carousel): `bower install --save owl.carousel`\n\nOr download the [latest release](https://github.com/OwlCarousel2/OwlCarousel2/releases).\n\n### Load\n\n#### Webpack\n\nLoad the required stylesheet and JS:\n\n```js\nimport 'owl.carousel/dist/assets/owl.carousel.css';\nimport $ from 'jquery';\nimport 'imports?jQuery=jquery!owl.carousel';\n```\n\n#### Static HTML\n\nPut the required stylesheet at the [top](https://developer.yahoo.com/performance/rules.html#css_top) of your markup:\n\n```html\n<link rel=\"stylesheet\" href=\"/node_modules/owl.carousel/dist/assets/owl.carousel.min.css\" />\n```\n\n```html\n<link rel=\"stylesheet\" href=\"/bower_components/owl.carousel/dist/assets/owl.carousel.min.css\" />\n```\n\n**NOTE:** If you want to use the default navigation styles, you will also need to include `owl.theme.default.css`.\n\n\nPut the script at the [bottom](https://developer.yahoo.com/performance/rules.html#js_bottom) of your markup right after jQuery:\n\n```html\n<script src=\"/node_modules/jquery/dist/jquery.js\"></script>\n<script src=\"/node_modules/owl.carousel/dist/owl.carousel.min.js\"></script>\n```\n\n```html\n<script src=\"/bower_components/jquery/dist/jquery.js\"></script>\n<script src=\"/bower_components/owl.carousel/dist/owl.carousel.min.js\"></script>\n```\n\n### Usage\n\nWrap your items (`div`, `a`, `img`, `span`, `li` etc.) with a container element (`div`, `ul` etc.). Only the class `owl-carousel` is mandatory to apply proper styles:\n\n```html\n<div class=\"owl-carousel owl-theme\">\n  <div> Your Content </div>\n  <div> Your Content </div>\n  <div> Your Content </div>\n  <div> Your Content </div>\n  <div> Your Content </div>\n  <div> Your Content </div>\n  <div> Your Content </div>\n</div>\n```\n**NOTE:** The `owl-theme` class is optional, but without it, you will need to style navigation features on your own.\n\n\nCall the [plugin](https://learn.jquery.com/plugins/) function and your carousel is ready.\n\n```javascript\n$(document).ready(function(){\n  $('.owl-carousel').owlCarousel();\n});\n```\n\n## Documentation\n\nThe documentation, included in this repo in the root directory, is built with [Assemble](http://assemble.io/) and publicly available at https://owlcarousel2.github.io/OwlCarousel2/. The documentation may also be run locally.\n\n## Building\n\nThis package comes with [Grunt](http://gruntjs.com/) and [Bower](http://bower.io/). The following tasks are available:\n\n  * `default` compiles the CSS and JS into `/dist` and builds the doc.\n  * `dist` compiles the CSS and JS into `/dist` only.\n  * `watch` watches source files and builds them automatically whenever you save.\n  * `test` runs [JSHint](http://www.jshint.com/) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/).\n\nTo define which plugins are build into the distribution just edit `/_config.json` to fit your needs.\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nThe code and the documentation are released under the [MIT License](LICENSE).\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/assets/owl.carousel.css",
    "content": "/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under  ()\n */\n/*\n *  Owl Carousel - Core\n */\n.owl-carousel {\n  display: none;\n  width: 100%;\n  -webkit-tap-highlight-color: transparent;\n  /* position relative and z-index fix webkit rendering fonts issue */\n  position: relative;\n  z-index: 1; }\n  .owl-carousel .owl-stage {\n    position: relative;\n    -ms-touch-action: pan-Y;\n    -moz-backface-visibility: hidden;\n    /* fix firefox animation glitch */ }\n  .owl-carousel .owl-stage:after {\n    content: \".\";\n    display: block;\n    clear: both;\n    visibility: hidden;\n    line-height: 0;\n    height: 0; }\n  .owl-carousel .owl-stage-outer {\n    position: relative;\n    overflow: hidden;\n    /* fix for flashing background */\n    -webkit-transform: translate3d(0px, 0px, 0px); }\n  .owl-carousel .owl-wrapper,\n  .owl-carousel .owl-item {\n    -webkit-backface-visibility: hidden;\n    -moz-backface-visibility: hidden;\n    -ms-backface-visibility: hidden;\n    -webkit-transform: translate3d(0, 0, 0);\n    -moz-transform: translate3d(0, 0, 0);\n    -ms-transform: translate3d(0, 0, 0); }\n  .owl-carousel .owl-item {\n    position: relative;\n    min-height: 1px;\n    float: left;\n    -webkit-backface-visibility: hidden;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-touch-callout: none; }\n  .owl-carousel .owl-item img {\n    display: block;\n    width: 100%; }\n  .owl-carousel .owl-nav.disabled,\n  .owl-carousel .owl-dots.disabled {\n    display: none; }\n  .owl-carousel .owl-nav .owl-prev,\n  .owl-carousel .owl-nav .owl-next,\n  .owl-carousel .owl-dot {\n    cursor: pointer;\n    cursor: hand;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n  .owl-carousel.owl-loaded {\n    display: block; }\n  .owl-carousel.owl-loading {\n    opacity: 0;\n    display: block; }\n  .owl-carousel.owl-hidden {\n    opacity: 0; }\n  .owl-carousel.owl-refresh .owl-item {\n    visibility: hidden; }\n  .owl-carousel.owl-drag .owl-item {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n  .owl-carousel.owl-grab {\n    cursor: move;\n    cursor: grab; }\n  .owl-carousel.owl-rtl {\n    direction: rtl; }\n  .owl-carousel.owl-rtl .owl-item {\n    float: right; }\n\n/* No Js */\n.no-js .owl-carousel {\n  display: block; }\n\n/*\n *  Owl Carousel - Animate Plugin\n */\n.owl-carousel .animated {\n  animation-duration: 1000ms;\n  animation-fill-mode: both; }\n\n.owl-carousel .owl-animated-in {\n  z-index: 0; }\n\n.owl-carousel .owl-animated-out {\n  z-index: 1; }\n\n.owl-carousel .fadeOut {\n  animation-name: fadeOut; }\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n/*\n * \tOwl Carousel - Auto Height Plugin\n */\n.owl-height {\n  transition: height 500ms ease-in-out; }\n\n/*\n * \tOwl Carousel - Lazy Load Plugin\n */\n.owl-carousel .owl-item .owl-lazy {\n  opacity: 0;\n  transition: opacity 400ms ease; }\n\n.owl-carousel .owl-item img.owl-lazy {\n  transform-style: preserve-3d; }\n\n/*\n * \tOwl Carousel - Video Plugin\n */\n.owl-carousel .owl-video-wrapper {\n  position: relative;\n  height: 100%;\n  background: #000; }\n\n.owl-carousel .owl-video-play-icon {\n  position: absolute;\n  height: 80px;\n  width: 80px;\n  left: 50%;\n  top: 50%;\n  margin-left: -40px;\n  margin-top: -40px;\n  background: url(\"owl.video.play.png\") no-repeat;\n  cursor: pointer;\n  z-index: 1;\n  -webkit-backface-visibility: hidden;\n  transition: transform 100ms ease; }\n\n.owl-carousel .owl-video-play-icon:hover {\n  -ms-transform: scale(1.3, 1.3);\n      transform: scale(1.3, 1.3); }\n\n.owl-carousel .owl-video-playing .owl-video-tn,\n.owl-carousel .owl-video-playing .owl-video-play-icon {\n  display: none; }\n\n.owl-carousel .owl-video-tn {\n  opacity: 0;\n  height: 100%;\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-size: contain;\n  transition: opacity 400ms ease; }\n\n.owl-carousel .owl-video-frame {\n  position: relative;\n  z-index: 1;\n  height: 100%;\n  width: 100%; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/assets/owl.theme.default.css",
    "content": "/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under  ()\n */\n/*\n * \tDefault theme - Owl Carousel CSS File\n */\n.owl-theme .owl-nav {\n  margin-top: 10px;\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-nav [class*='owl-'] {\n    color: #FFF;\n    font-size: 14px;\n    margin: 5px;\n    padding: 4px 7px;\n    background: #D6D6D6;\n    display: inline-block;\n    cursor: pointer;\n    border-radius: 3px; }\n    .owl-theme .owl-nav [class*='owl-']:hover {\n      background: #869791;\n      color: #FFF;\n      text-decoration: none; }\n  .owl-theme .owl-nav .disabled {\n    opacity: 0.5;\n    cursor: default; }\n\n.owl-theme .owl-nav.disabled + .owl-dots {\n  margin-top: 10px; }\n\n.owl-theme .owl-dots {\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-dots .owl-dot {\n    display: inline-block;\n    zoom: 1;\n    *display: inline; }\n    .owl-theme .owl-dots .owl-dot span {\n      width: 10px;\n      height: 10px;\n      margin: 5px 7px;\n      background: #D6D6D6;\n      display: block;\n      -webkit-backface-visibility: visible;\n      transition: opacity 200ms ease;\n      border-radius: 30px; }\n    .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {\n      background: #869791; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/assets/owl.theme.green.css",
    "content": "/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under  ()\n */\n/*\n * \tGreen theme - Owl Carousel CSS File\n */\n.owl-theme .owl-nav {\n  margin-top: 10px;\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-nav [class*='owl-'] {\n    color: #FFF;\n    font-size: 14px;\n    margin: 5px;\n    padding: 4px 7px;\n    background: #D6D6D6;\n    display: inline-block;\n    cursor: pointer;\n    border-radius: 3px; }\n    .owl-theme .owl-nav [class*='owl-']:hover {\n      background: #4DC7A0;\n      color: #FFF;\n      text-decoration: none; }\n  .owl-theme .owl-nav .disabled {\n    opacity: 0.5;\n    cursor: default; }\n\n.owl-theme .owl-nav.disabled + .owl-dots {\n  margin-top: 10px; }\n\n.owl-theme .owl-dots {\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-dots .owl-dot {\n    display: inline-block;\n    zoom: 1;\n    *display: inline; }\n    .owl-theme .owl-dots .owl-dot span {\n      width: 10px;\n      height: 10px;\n      margin: 5px 7px;\n      background: #D6D6D6;\n      display: block;\n      -webkit-backface-visibility: visible;\n      transition: opacity 200ms ease;\n      border-radius: 30px; }\n    .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {\n      background: #4DC7A0; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/dist/owl.carousel.js",
    "content": "/**\n * Owl Carousel v2.2.1\n * Copyright 2013-2017 David Deutsch\n * Licensed under  ()\n */\n/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\t// TODO: Should be computed from number of min width items in stage\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\t// Switch to only using appended clones\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('<div class=\"' + this.settings.stageOuterClass + '\"/>');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.<String>} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tconsole.warn('Can not detect viewport width.');\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.<String>} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.<String>} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.<jQuery>}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(\"' + url + '\")',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '<div class=\"owl-video-play-icon\"></div>';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '<div class=\"owl-video-tn ' + lazyClass + '\" ' + srcType + '=\"' + path + '\"></div>';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '<div class=\"owl-video-tn\" style=\"opacity:1;background-image:url(' + path + ')\"></div>';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('<div class=\"owl-video-wrapper\"' + dimensions + '></div>');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '<iframe width=\"' + width + '\" height=\"' + height + '\" src=\"//www.youtube.com/embed/' +\n\t\t\t\tvideo.id + '?autoplay=1&rel=0&v=' + video.id + '\" frameborder=\"0\" allowfullscreen></iframe>';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '<iframe src=\"//player.vimeo.com/video/' + video.id +\n\t\t\t\t'?autoplay=1\" width=\"' + width + '\" height=\"' + height +\n\t\t\t\t'\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '<iframe frameborder=\"0\"' + 'height=\"' + height + '\"' + 'width=\"' + width +\n\t\t\t\t'\" allowfullscreen mozallowfullscreen webkitAllowFullScreen ' +\n\t\t\t\t'src=\"//view.vzaar.com/' + video.id + '/player?autoplay=true\"></iframe>';\n\t\t}\n\n\t\t$('<div class=\"owl-video-frame\">' + html + '</div>').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.<String>}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('<div class=\"' + this._core.settings.dotClass + '\">' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('<div>')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($('<span>'))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('<support>').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/css/owl.carousel.css",
    "content": "/*\n *  Owl Carousel - Core\n */\n.owl-carousel {\n  display: none;\n  width: 100%;\n  -webkit-tap-highlight-color: transparent;\n  /* position relative and z-index fix webkit rendering fonts issue */\n  position: relative;\n  z-index: 1; }\n  .owl-carousel .owl-stage {\n    position: relative;\n    -ms-touch-action: pan-Y;\n    -moz-backface-visibility: hidden;\n    /* fix firefox animation glitch */ }\n  .owl-carousel .owl-stage:after {\n    content: \".\";\n    display: block;\n    clear: both;\n    visibility: hidden;\n    line-height: 0;\n    height: 0; }\n  .owl-carousel .owl-stage-outer {\n    position: relative;\n    overflow: hidden;\n    /* fix for flashing background */\n    -webkit-transform: translate3d(0px, 0px, 0px); }\n  .owl-carousel .owl-wrapper,\n  .owl-carousel .owl-item {\n    -webkit-backface-visibility: hidden;\n    -moz-backface-visibility: hidden;\n    -ms-backface-visibility: hidden;\n    -webkit-transform: translate3d(0, 0, 0);\n    -moz-transform: translate3d(0, 0, 0);\n    -ms-transform: translate3d(0, 0, 0); }\n  .owl-carousel .owl-item {\n    position: relative;\n    min-height: 1px;\n    float: left;\n    -webkit-backface-visibility: hidden;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-touch-callout: none; }\n  .owl-carousel .owl-item img {\n    display: block;\n    width: 100%; }\n  .owl-carousel .owl-nav.disabled,\n  .owl-carousel .owl-dots.disabled {\n    display: none; }\n  .owl-carousel .owl-nav .owl-prev,\n  .owl-carousel .owl-nav .owl-next,\n  .owl-carousel .owl-dot {\n    cursor: pointer;\n    cursor: hand;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n  .owl-carousel.owl-loaded {\n    display: block; }\n  .owl-carousel.owl-loading {\n    opacity: 0;\n    display: block; }\n  .owl-carousel.owl-hidden {\n    opacity: 0; }\n  .owl-carousel.owl-refresh .owl-item {\n    visibility: hidden; }\n  .owl-carousel.owl-drag .owl-item {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n  .owl-carousel.owl-grab {\n    cursor: move;\n    cursor: grab; }\n  .owl-carousel.owl-rtl {\n    direction: rtl; }\n  .owl-carousel.owl-rtl .owl-item {\n    float: right; }\n\n/* No Js */\n.no-js .owl-carousel {\n  display: block; }\n\n/*\n *  Owl Carousel - Animate Plugin\n */\n.owl-carousel .animated {\n  animation-duration: 1000ms;\n  animation-fill-mode: both; }\n.owl-carousel .owl-animated-in {\n  z-index: 0; }\n.owl-carousel .owl-animated-out {\n  z-index: 1; }\n.owl-carousel .fadeOut {\n  animation-name: fadeOut; }\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n/*\n * \tOwl Carousel - Auto Height Plugin\n */\n.owl-height {\n  transition: height 500ms ease-in-out; }\n\n/*\n * \tOwl Carousel - Lazy Load Plugin\n */\n.owl-carousel .owl-item .owl-lazy {\n  opacity: 0;\n  transition: opacity 400ms ease; }\n.owl-carousel .owl-item img.owl-lazy {\n  transform-style: preserve-3d; }\n\n/*\n * \tOwl Carousel - Video Plugin\n */\n.owl-carousel .owl-video-wrapper {\n  position: relative;\n  height: 100%;\n  background: #000; }\n.owl-carousel .owl-video-play-icon {\n  position: absolute;\n  height: 80px;\n  width: 80px;\n  left: 50%;\n  top: 50%;\n  margin-left: -40px;\n  margin-top: -40px;\n  background: url(\"owl.video.play.png\") no-repeat;\n  cursor: pointer;\n  z-index: 1;\n  -webkit-backface-visibility: hidden;\n  transition: transform 100ms ease; }\n.owl-carousel .owl-video-play-icon:hover {\n  transform: scale(1.3, 1.3); }\n.owl-carousel .owl-video-playing .owl-video-tn,\n.owl-carousel .owl-video-playing .owl-video-play-icon {\n  display: none; }\n.owl-carousel .owl-video-tn {\n  opacity: 0;\n  height: 100%;\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-size: contain;\n  transition: opacity 400ms ease; }\n.owl-carousel .owl-video-frame {\n  position: relative;\n  z-index: 1;\n  height: 100%;\n  width: 100%; }\n\n/*# sourceMappingURL=owl.carousel.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/css/owl.theme.default.css",
    "content": "/*\n * \tDefault theme - Owl Carousel CSS File\n */\n.owl-theme .owl-nav {\n  margin-top: 10px;\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-nav [class*='owl-'] {\n    color: #FFF;\n    font-size: 14px;\n    margin: 5px;\n    padding: 4px 7px;\n    background: #D6D6D6;\n    display: inline-block;\n    cursor: pointer;\n    border-radius: 3px; }\n    .owl-theme .owl-nav [class*='owl-']:hover {\n      background: #869791;\n      color: #FFF;\n      text-decoration: none; }\n  .owl-theme .owl-nav .disabled {\n    opacity: 0.5;\n    cursor: default; }\n.owl-theme .owl-nav.disabled + .owl-dots {\n  margin-top: 10px; }\n.owl-theme .owl-dots {\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-dots .owl-dot {\n    display: inline-block;\n    zoom: 1;\n    *display: inline; }\n    .owl-theme .owl-dots .owl-dot span {\n      width: 10px;\n      height: 10px;\n      margin: 5px 7px;\n      background: #D6D6D6;\n      display: block;\n      -webkit-backface-visibility: visible;\n      transition: opacity 200ms ease;\n      border-radius: 30px; }\n    .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {\n      background: #869791; }\n\n/*# sourceMappingURL=owl.theme.default.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/css/owl.theme.green.css",
    "content": "/*\n * \tGreen theme - Owl Carousel CSS File\n */\n.owl-theme .owl-nav {\n  margin-top: 10px;\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-nav [class*='owl-'] {\n    color: #FFF;\n    font-size: 14px;\n    margin: 5px;\n    padding: 4px 7px;\n    background: #D6D6D6;\n    display: inline-block;\n    cursor: pointer;\n    border-radius: 3px; }\n    .owl-theme .owl-nav [class*='owl-']:hover {\n      background: #4DC7A0;\n      color: #FFF;\n      text-decoration: none; }\n  .owl-theme .owl-nav .disabled {\n    opacity: 0.5;\n    cursor: default; }\n.owl-theme .owl-nav.disabled + .owl-dots {\n  margin-top: 10px; }\n.owl-theme .owl-dots {\n  text-align: center;\n  -webkit-tap-highlight-color: transparent; }\n  .owl-theme .owl-dots .owl-dot {\n    display: inline-block;\n    zoom: 1;\n    *display: inline; }\n    .owl-theme .owl-dots .owl-dot span {\n      width: 10px;\n      height: 10px;\n      margin: 5px 7px;\n      background: #D6D6D6;\n      display: block;\n      -webkit-backface-visibility: visible;\n      transition: opacity 200ms ease;\n      border-radius: 30px; }\n    .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {\n      background: #4DC7A0; }\n\n/*# sourceMappingURL=owl.theme.green.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/.jscsrc",
    "content": "{\n    \"requireCurlyBraces\": [ \"if\", \"else\", \"for\", \"while\", \"do\" ],\n    \"requireSpaceAfterKeywords\": [ \"if\", \"else\", \"for\", \"while\", \"do\", \"switch\", \"return\" ],\n    \"disallowKeywords\": [ \"with\" ],\n    \"disallowKeywordsOnNewLine\": [ \"else\" ],\n\n    \"requireSpacesInFunctionExpression\": {\n        \"beforeOpeningCurlyBrace\": true\n    },\n    \"disallowSpacesInFunctionExpression\": {\n        \"beforeOpeningRoundBrace\": true\n    },\n\n    \"disallowSpaceAfterObjectKeys\": true,\n\n    \"requireMultipleVarDecl\": \"onevar\",\n    \"disallowMixedSpacesAndTabs\": \"smart\",\n    \"disallowTrailingWhitespace\": true,\n\n    \"requireSpacesInsideObjectBrackets\": \"all\",\n    \"requireSpacesInsideArrayBrackets\": \"all\",\n\n    \"requireSpacesInConditionalExpression\": true,\n    \"requireSpaceBeforeBinaryOperators\": [\n        \"=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"<<=\", \">>=\", \">>>=\",\n        \"&=\", \"|=\", \"^=\", \"+=\",\n\n        \"+\", \"-\", \"*\", \"/\", \"%\", \"<<\", \">>\", \">>>\", \"&\",\n        \"|\", \"^\", \"&&\", \"||\", \"===\", \"==\", \">=\",\n        \"<=\", \"<\", \">\", \"!=\", \"!==\"\n    ],\n    \"requireSpaceAfterBinaryOperators\": [\n        \"=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"<<=\", \">>=\", \">>>=\",\n        \"&=\", \"|=\", \"^=\", \"+=\",\n\n        \"+\", \"-\", \"*\", \"/\", \"%\", \"<<\", \">>\", \">>>\", \"&\",\n        \"|\", \"^\", \"&&\", \"||\", \"===\", \"==\", \">=\",\n        \"<=\", \"<\", \">\", \"!=\", \"!==\"\n    ],\n    \"disallowSpaceAfterPrefixUnaryOperators\": [ \"++\", \"--\" ],\n    \"disallowSpaceBeforePostfixUnaryOperators\": [ \"++\", \"--\" ],\n    \"disallowSpaceBeforeBinaryOperators\": [ \",\", \":\" ],\n\n    \"disallowMultipleLineBreaks\": true,\n    \"requireLineFeedAtFileEnd\": true,\n    \"validateLineBreaks\": \"LF\"\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/.jshintrc",
    "content": "{\n    \"asi\"      : true,\n    \"boss\"     : true,\n    \"browser\"  : true,\n    \"debug\"    : true,\n    \"devel\"    : true,\n    \"eqeqeq\"   : false,\n    \"eqnull\"   : true,\n    \"expr\"     : true,\n    \"laxbreak\" : true,\n    \"unused\"   : false,\n    \"validthis\": true\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.animate.js",
    "content": "/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.autoheight.js",
    "content": "/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.autoplay.js",
    "content": "/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.autorefresh.js",
    "content": "/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.carousel.js",
    "content": "/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\t// TODO: Should be computed from number of min width items in stage\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\t// Switch to only using appended clones\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('<div class=\"' + this.settings.stageOuterClass + '\"/>');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.<String>} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tconsole.warn('Can not detect viewport width.');\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.<String>} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.<String>} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.hash.js",
    "content": "/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.lazyload.js",
    "content": "/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.<jQuery>}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(\"' + url + '\")',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.navigation.js",
    "content": "/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.<String>}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('<div class=\"' + this._core.settings.dotClass + '\">' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('<div>')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($('<span>'))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.support.js",
    "content": "/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('<support>').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.support.modernizr.js",
    "content": "/**\n * Modernizr Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, Modernizr, window, document, undefined) {\n\n\tvar events = {\n\t\ttransition: {\n\t\t\tend: {\n\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\ttransition: 'transitionend'\n\t\t\t}\n\t\t},\n\t\tanimation: {\n\t\t\tend: {\n\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\tanimation: 'animationend'\n\t\t\t}\n\t\t}\n\t};\n\n\tif (!Modernizr) {\n\t\tthrow new Error('Modernizr is not loaded.');\n\t}\n\n\t$.each([ 'cssanimations', 'csstransitions', 'csstransforms', 'csstransforms3d', 'prefixed' ], function(i, property) {\n\t\tif (typeof Modernizr[property] == 'undefined') {\n\t\t\tthrow new Error([ 'Modernizr \"', property, '\" is not loaded.' ].join(''));\n\t\t}\n\t});\n\n\tif (Modernizr.csstransitions) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(Modernizr.prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t\t// fix transitionend support detection, which does not work properly for older Android versions,\n        \t// as it does not give the prefixed event name. here we use Modernizr to ensure the correct event.\n        \t// see:\n        \t// https://github.com/Modernizr/Modernizr/issues/897\n        \t// https://github.com/niksy/modernizr-detects/commit/05d148fc4f3813b1412c836325a9ca78c7a63f4d\n        \tif (/Android 4\\.[123]/.test(navigator.userAgent)) {\n                \t$.support.transition.end = 'webkitTransitionEnd';\n        \t}\n\t}\n\n\tif (Modernizr.cssanimations) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(Modernizr.prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (Modernizr.csstransforms) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(Modernizr.prefixed('transform'));\n\t\t$.support.transform3d = Modernizr.csstransforms3d;\n\t}\n})(window.Zepto || window.jQuery, window.Modernizr, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/js/owl.video.js",
    "content": "/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '<div class=\"owl-video-play-icon\"></div>';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '<div class=\"owl-video-tn ' + lazyClass + '\" ' + srcType + '=\"' + path + '\"></div>';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '<div class=\"owl-video-tn\" style=\"opacity:1;background-image:url(' + path + ')\"></div>';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('<div class=\"owl-video-wrapper\"' + dimensions + '></div>');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '<iframe width=\"' + width + '\" height=\"' + height + '\" src=\"//www.youtube.com/embed/' +\n\t\t\t\tvideo.id + '?autoplay=1&rel=0&v=' + video.id + '\" frameborder=\"0\" allowfullscreen></iframe>';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '<iframe src=\"//player.vimeo.com/video/' + video.id +\n\t\t\t\t'?autoplay=1\" width=\"' + width + '\" height=\"' + height +\n\t\t\t\t'\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '<iframe frameborder=\"0\"' + 'height=\"' + height + '\"' + 'width=\"' + width +\n\t\t\t\t'\" allowfullscreen mozallowfullscreen webkitAllowFullScreen ' +\n\t\t\t\t'src=\"//view.vzaar.com/' + video.id + '/player?autoplay=true\"></iframe>';\n\t\t}\n\n\t\t$('<div class=\"owl-video-frame\">' + html + '</div>').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_animate.scss",
    "content": "/*\n *  Owl Carousel - Animate Plugin\n */\n.owl-carousel{\n\t.animated {\n\t\tanimation-duration: 1000ms;\n\t\tanimation-fill-mode: both;\n\t}\n\t.owl-animated-in {\n\t\tz-index: 0;\n\t}\n\t.owl-animated-out {\n\t\tz-index: 1;\n\t}\n\t.fadeOut {\n\t\tanimation-name: fadeOut;\n\t}\n}\n\n@keyframes fadeOut {\n\t0% {\n\t\topacity: 1;\n\t}\n\n\t100% {\n\t\topacity: 0;\n\t}\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_autoheight.scss",
    "content": "/*\n * \tOwl Carousel - Auto Height Plugin\n */\n\n.owl-height {\n\ttransition: height 500ms ease-in-out;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_core.scss",
    "content": "/*\n *  Owl Carousel - Core\n */\n.owl-carousel {\n\tdisplay: none;\n\twidth: 100%;\n\t-webkit-tap-highlight-color: transparent;\n\t/* position relative and z-index fix webkit rendering fonts issue */\n\tposition: relative;\n\tz-index: 1;\n\n\t.owl-stage {\n\t\tposition: relative;\n\t\t-ms-touch-action: pan-Y;\n\t\t-moz-backface-visibility: hidden; /* fix firefox animation glitch */\n\t}\n\n\t.owl-stage:after {\n\t\tcontent: \".\";\n\t\tdisplay: block;\n\t\tclear: both;\n\t\tvisibility: hidden;\n\t\tline-height: 0;\n\t\theight: 0;\n\t}\n\n\t.owl-stage-outer {\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\t/* fix for flashing background */\n\t\t-webkit-transform: translate3d(0px, 0px, 0px);\n\t}\n\n\t.owl-wrapper,\n\t.owl-item{\n\t\t-webkit-backface-visibility: hidden;\n\t\t-moz-backface-visibility: hidden;\n\t\t-ms-backface-visibility: hidden;\n\t\t-webkit-transform: translate3d(0,0,0);\n\t\t-moz-transform: translate3d(0,0,0);\n\t\t-ms-transform: translate3d(0,0,0);\n\t}\n\n\t.owl-item {\n\t\tposition: relative;\n\t\tmin-height: 1px;\n\t\tfloat: left;\n\t\t-webkit-backface-visibility: hidden;\n\t\t-webkit-tap-highlight-color: transparent;\n\t\t-webkit-touch-callout: none;\n\t}\n\t.owl-item img {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.owl-nav.disabled,\n\t.owl-dots.disabled {\n\t\tdisplay: none;\n\t}\n\n\t.owl-nav .owl-prev,\n\t.owl-nav .owl-next,\n\t.owl-dot {\n\t\tcursor: pointer;\n\t\tcursor: hand;\n\t\t-webkit-user-select: none;\n\t\t-khtml-user-select: none;\n\t\t-moz-user-select: none;\n\t\t-ms-user-select: none;\n\t\tuser-select: none;\n\t}\n\n\t&.owl-loaded {\n\t\tdisplay: block;\n\t}\n\n\t&.owl-loading {\n\t\topacity: 0;\n\t\tdisplay: block;\n\t}\n\n\t&.owl-hidden {\n\t\topacity: 0;\n\t}\n\n\t&.owl-refresh .owl-item {\n\t\tvisibility: hidden;\n\t}\n\n\t&.owl-drag .owl-item {\n\t\t-webkit-user-select: none;\n\t\t-moz-user-select: none;\n\t\t-ms-user-select: none;\n\t\tuser-select: none;\n\t}\n\n\t&.owl-grab {\n\t\tcursor: move;\n\t\tcursor: grab;\n\t}\n\n\t&.owl-rtl {\n\t\tdirection: rtl;\n\t}\n\n\t&.owl-rtl .owl-item {\n\t\tfloat: right;\n\t}\n}\n\n/* No Js */\n.no-js .owl-carousel {\n\tdisplay: block;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_lazyload.scss",
    "content": "/*\n * \tOwl Carousel - Lazy Load Plugin\n */\n\n.owl-carousel {\n\t.owl-item {\n\t\t.owl-lazy {\n\t\t\t\topacity: 0;\n\t\t\t\ttransition: opacity 400ms ease;\n\t\t}\n\n\t\timg.owl-lazy {\n\t\t\ttransform-style: preserve-3d;\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_theme.default.scss",
    "content": "/*\n * \tDefault theme - Owl Carousel CSS File\n */\n\n$color-base:\t\t\t#869791 !default;\n$color-white:\t\t\t#FFF !default;\n$color-gray:\t\t\t#D6D6D6 !default;\n\n//nav\n\n$nav-color: \t\t\t$color-white !default;\n$nav-color-hover:\t\t$color-white !default;\n$nav-font-size: \t\t14px !default;\n$nav-rounded: \t\t\t3px !default;\n$nav-margin: \t\t\t5px !default;\n$nav-padding: \t\t\t4px 7px !default;\n$nav-background: \t\t$color-gray !default;\n$nav-background-hover:\t$color-base !default;\n$nav-disabled-opacity: \t0.5 !default;\n\n//dots\n\n$dot-width:\t\t\t\t10px !default;\n$dot-height:\t\t\t10px !default;\n$dot-rounded:\t\t\t30px !default;\n$dot-margin: \t\t\t5px 7px !default;\n$dot-background:\t\t$color-gray !default;\n$dot-background-active:\t$color-base !default;\n\n@import 'theme';\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_theme.green.scss",
    "content": "/*\n * \tGreen theme - Owl Carousel CSS File\n */\n\n$color-base:\t\t\t#4DC7A0 !default;\n$color-white:\t\t\t#FFF !default;\n$color-gray:\t\t\t#D6D6D6 !default;\n\n//nav\n\n$nav-color: \t\t\t$color-white !default;\n$nav-color-hover:\t\t$color-white !default;\n$nav-font-size: \t\t14px !default;\n$nav-rounded: \t\t\t3px !default;\n$nav-margin: \t\t\t5px !default;\n$nav-padding: \t\t\t4px 7px !default;\n$nav-background: \t\t$color-gray !default;\n$nav-background-hover:\t$color-base !default;\n$nav-disabled-opacity: \t0.5 !default;\n\n//dots\n\n$dot-width:\t\t\t\t10px !default;\n$dot-height:\t\t\t10px !default;\n$dot-rounded:\t\t\t30px !default;\n$dot-margin: \t\t\t5px 7px !default;\n$dot-background:\t\t$color-gray !default;\n$dot-background-active:\t$color-base !default;\n\n@import 'theme';\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_theme.scss",
    "content": "\n.owl-theme {\n\t// Styling Next and Prev buttons\n\t.owl-nav {\n\t\tmargin-top: 10px;\n\t\ttext-align: center;\n\t\t-webkit-tap-highlight-color: transparent;\n\n\t\t[class*='owl-'] {\n\t\t\tcolor: $nav-color;\n\t\t\tfont-size: $nav-font-size;\n\t\t\tmargin: $nav-margin;\n\t\t\tpadding: $nav-padding;\n\t\t\tbackground: $nav-background;\n\t\t\tdisplay: inline-block;\n\t\t\tcursor: pointer;\n\t\t\tborder-radius: 3px;\n\n\t\t\t&:hover {\n\t\t\t\tbackground: $nav-background-hover;\n\t\t\t\tcolor:$nav-color-hover;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t}\n\t\t.disabled {\n\t\t\topacity: $nav-disabled-opacity;\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t// Styling dots\n\t.owl-nav.disabled + .owl-dots {\n\t\tmargin-top: 10px;\n\t}\n\n\t.owl-dots {\n\t\ttext-align: center;\n\t\t-webkit-tap-highlight-color: transparent;\n\n\t\t.owl-dot {\n\t\t\tdisplay: inline-block;\n\t\t\tzoom: 1;\n\t\t\t*display: inline;\n\n\t\t\tspan {\n\t\t\t\twidth: $dot-width;\n\t\t\t\theight: $dot-height;\n\t\t\t\tmargin: $dot-margin;\n\t\t\t\tbackground: $dot-background;\n\t\t\t\tdisplay: block;\n\t\t\t\t-webkit-backface-visibility: visible;\n\t\t\t\ttransition: opacity 200ms ease;\n\t\t\t\tborder-radius: 30px;\n\t\t\t}\n\n\t\t\t&.active,\n\t\t\t&:hover {\n\t\t\t\tspan {\n\t\t\t\t\tbackground: $dot-background-active;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/_video.scss",
    "content": "/*\n * \tOwl Carousel - Video Plugin\n */\n\n.owl-carousel{\n\t.owl-video-wrapper {\n\t\tposition: relative;\n\t\theight: 100%;\n\t\tbackground: #000;\n\t}\n\n\t.owl-video-play-icon {\n\t\tposition: absolute;\n\t\theight: 80px;\n\t\twidth: 80px;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\tmargin-left: -40px;\n\t\tmargin-top: -40px;\n\t\tbackground: url(\"owl.video.play.png\") no-repeat;\n\t\tcursor: pointer;\n\t\tz-index: 1;\n\t\t-webkit-backface-visibility: hidden;\n\t\ttransition: transform 100ms ease;\n\t}\n\n\t.owl-video-play-icon:hover {\n\t\ttransform: scale(1.3, 1.3);\n\t}\n\n\t.owl-video-playing .owl-video-tn,\n\t.owl-video-playing .owl-video-play-icon {\n\t\tdisplay: none;\n\t}\n\n\t.owl-video-tn {\n\t\topacity: 0;\n\t\theight: 100%;\n\t\tbackground-position: center center;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: contain;\n\t\ttransition: opacity 400ms ease;\n\t}\n\n\t.owl-video-frame {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/owl.carousel.scss",
    "content": "@import 'core';\n@import 'animate';\n@import 'autoheight';\n@import 'lazyload';\n@import 'video';\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/owl.theme.default.scss",
    "content": "@import \"theme.default\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/owl.carousel/src/scss/owl.theme.green.scss",
    "content": "@import \"theme.green\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/peity/jquery.peity.js",
    "content": "// Peity jQuery plugin version 3.2.0\n// (c) 2015 Ben Pickles\n//\n// http://benpickles.github.io/peity\n//\n// Released under MIT license.\n(function($, document, Math, undefined) {\n  var peity = $.fn.peity = function(type, options) {\n    if (svgSupported) {\n      this.each(function() {\n        var $this = $(this)\n        var chart = $this.data('_peity')\n\n        if (chart) {\n          if (type) chart.type = type\n          $.extend(chart.opts, options)\n        } else {\n          chart = new Peity(\n            $this,\n            type,\n            $.extend({},\n              peity.defaults[type],\n              $this.data('peity'),\n              options)\n          )\n\n          $this\n            .change(function() { chart.draw() })\n            .data('_peity', chart)\n        }\n\n        chart.draw()\n      });\n    }\n\n    return this;\n  };\n\n  var Peity = function($el, type, opts) {\n    this.$el = $el\n    this.type = type\n    this.opts = opts\n  }\n\n  var PeityPrototype = Peity.prototype\n\n  var svgElement = PeityPrototype.svgElement = function(tag, attrs) {\n    return $(\n      document.createElementNS('http://www.w3.org/2000/svg', tag)\n    ).attr(attrs)\n  }\n\n  // https://gist.github.com/madrobby/3201472\n  var svgSupported = 'createElementNS' in document && svgElement('svg', {})[0].createSVGRect\n\n  PeityPrototype.draw = function() {\n    var opts = this.opts\n    peity.graphers[this.type].call(this, opts)\n    if (opts.after) opts.after.call(this, opts)\n  }\n\n  PeityPrototype.fill = function() {\n    var fill = this.opts.fill\n\n    return $.isFunction(fill)\n      ? fill\n      : function(_, i) { return fill[i % fill.length] }\n  }\n\n  PeityPrototype.prepare = function(width, height) {\n    if (!this.$svg) {\n      this.$el.hide().after(\n        this.$svg = svgElement('svg', {\n          \"class\": \"peity\"\n        })\n      )\n    }\n\n    return this.$svg\n      .empty()\n      .data('peity', this)\n      .attr({\n        height: height,\n        width: width\n      })\n  }\n\n  PeityPrototype.values = function() {\n    return $.map(this.$el.text().split(this.opts.delimiter), function(value) {\n      return parseFloat(value)\n    })\n  }\n\n  peity.defaults = {}\n  peity.graphers = {}\n\n  peity.register = function(type, defaults, grapher) {\n    this.defaults[type] = defaults\n    this.graphers[type] = grapher\n  }\n\n  peity.register(\n    'pie',\n    {\n      fill: ['#ff9900', '#fff4dd', '#ffc66e'],\n      radius: 8\n    },\n    function(opts) {\n      if (!opts.delimiter) {\n        var delimiter = this.$el.text().match(/[^0-9\\.]/)\n        opts.delimiter = delimiter ? delimiter[0] : \",\"\n      }\n\n      var values = $.map(this.values(), function(n) {\n        return n > 0 ? n : 0\n      })\n\n      if (opts.delimiter == \"/\") {\n        var v1 = values[0]\n        var v2 = values[1]\n        values = [v1, Math.max(0, v2 - v1)]\n      }\n\n      var i = 0\n      var length = values.length\n      var sum = 0\n\n      for (; i < length; i++) {\n        sum += values[i]\n      }\n\n      if (!sum) {\n        length = 2\n        sum = 1\n        values = [0, 1]\n      }\n\n      var diameter = opts.radius * 2\n\n      var $svg = this.prepare(\n        opts.width || diameter,\n        opts.height || diameter\n      )\n\n      var width = $svg.width()\n        , height = $svg.height()\n        , cx = width / 2\n        , cy = height / 2\n\n      var radius = Math.min(cx, cy)\n        , innerRadius = opts.innerRadius\n\n      if (this.type == 'donut' && !innerRadius) {\n        innerRadius = radius * 0.5\n      }\n\n      var pi = Math.PI\n      var fill = this.fill()\n\n      var scale = this.scale = function(value, radius) {\n        var radians = value / sum * pi * 2 - pi / 2\n\n        return [\n          radius * Math.cos(radians) + cx,\n          radius * Math.sin(radians) + cy\n        ]\n      }\n\n      var cumulative = 0\n\n      for (i = 0; i < length; i++) {\n        var value = values[i]\n          , portion = value / sum\n          , $node\n\n        if (portion == 0) continue\n\n        if (portion == 1) {\n          if (innerRadius) {\n            var x2 = cx - 0.01\n              , y1 = cy - radius\n              , y2 = cy - innerRadius\n\n            $node = svgElement('path', {\n              d: [\n                'M', cx, y1,\n                'A', radius, radius, 0, 1, 1, x2, y1,\n                'L', x2, y2,\n                'A', innerRadius, innerRadius, 0, 1, 0, cx, y2\n              ].join(' ')\n            })\n          } else {\n            $node = svgElement('circle', {\n              cx: cx,\n              cy: cy,\n              r: radius\n            })\n          }\n        } else {\n          var cumulativePlusValue = cumulative + value\n\n          var d = ['M'].concat(\n            scale(cumulative, radius),\n            'A', radius, radius, 0, portion > 0.5 ? 1 : 0, 1,\n            scale(cumulativePlusValue, radius),\n            'L'\n          )\n\n          if (innerRadius) {\n            d = d.concat(\n              scale(cumulativePlusValue, innerRadius),\n              'A', innerRadius, innerRadius, 0, portion > 0.5 ? 1 : 0, 0,\n              scale(cumulative, innerRadius)\n            )\n          } else {\n            d.push(cx, cy)\n          }\n\n          cumulative += value\n\n          $node = svgElement('path', {\n            d: d.join(\" \")\n          })\n        }\n\n        $node.attr('fill', fill.call(this, value, i, values))\n\n        $svg.append($node)\n      }\n    }\n  )\n\n  peity.register(\n    'donut',\n    $.extend(true, {}, peity.defaults.pie),\n    function(opts) {\n      peity.graphers.pie.call(this, opts)\n    }\n  )\n\n  peity.register(\n    \"line\",\n    {\n      delimiter: \",\",\n      fill: \"#c6d9fd\",\n      height: 16,\n      min: 0,\n      stroke: \"#4d89f9\",\n      strokeWidth: 1,\n      width: 32\n    },\n    function(opts) {\n      var values = this.values()\n      if (values.length == 1) values.push(values[0])\n      var max = Math.max.apply(Math, opts.max == undefined ? values : values.concat(opts.max))\n        , min = Math.min.apply(Math, opts.min == undefined ? values : values.concat(opts.min))\n\n      var $svg = this.prepare(opts.width, opts.height)\n        , strokeWidth = opts.strokeWidth\n        , width = $svg.width()\n        , height = $svg.height() - strokeWidth\n        , diff = max - min\n\n      var xScale = this.x = function(input) {\n        return input * (width / (values.length - 1))\n      }\n\n      var yScale = this.y = function(input) {\n        var y = height\n\n        if (diff) {\n          y -= ((input - min) / diff) * height\n        }\n\n        return y + strokeWidth / 2\n      }\n\n      var zero = yScale(Math.max(min, 0))\n        , coords = [0, zero]\n\n      for (var i = 0; i < values.length; i++) {\n        coords.push(\n          xScale(i),\n          yScale(values[i])\n        )\n      }\n\n      coords.push(width, zero)\n\n      if (opts.fill) {\n        $svg.append(\n          svgElement('polygon', {\n            fill: opts.fill,\n            points: coords.join(' ')\n          })\n        )\n      }\n\n      if (strokeWidth) {\n        $svg.append(\n          svgElement('polyline', {\n            fill: 'none',\n            points: coords.slice(2, coords.length - 2).join(' '),\n            stroke: opts.stroke,\n            'stroke-width': strokeWidth,\n            'stroke-linecap': 'square'\n          })\n        )\n      }\n    }\n  );\n\n  peity.register(\n    'bar',\n    {\n      delimiter: \",\",\n      fill: [\"#4D89F9\"],\n      height: 16,\n      min: 0,\n      padding: 0.1,\n      width: 32\n    },\n    function(opts) {\n      var values = this.values()\n        , max = Math.max.apply(Math, opts.max == undefined ? values : values.concat(opts.max))\n        , min = Math.min.apply(Math, opts.min == undefined ? values : values.concat(opts.min))\n\n      var $svg = this.prepare(opts.width, opts.height)\n        , width = $svg.width()\n        , height = $svg.height()\n        , diff = max - min\n        , padding = opts.padding\n        , fill = this.fill()\n\n      var xScale = this.x = function(input) {\n        return input * width / values.length\n      }\n\n      var yScale = this.y = function(input) {\n        return height - (\n          diff\n            ? ((input - min) / diff) * height\n            : 1\n        )\n      }\n\n      for (var i = 0; i < values.length; i++) {\n        var x = xScale(i + padding)\n          , w = xScale(i + 1 - padding) - x\n          , value = values[i]\n          , valueY = yScale(value)\n          , y1 = valueY\n          , y2 = valueY\n          , h\n\n        if (!diff) {\n          h = 1\n        } else if (value < 0) {\n          y1 = yScale(Math.min(max, 0))\n        } else {\n          y2 = yScale(Math.max(min, 0))\n        }\n\n        h = y2 - y1\n\n        if (h == 0) {\n          h = 1\n          if (max > 0 && diff) y1--\n        }\n\n        $svg.append(\n          svgElement('rect', {\n            fill: fill.call(this, value, i, values),\n            x: x,\n            y: y1,\n            width: w,\n            height: h\n          })\n        )\n      }\n    }\n  );\n})(jQuery, document, Math);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/radial/radial.css",
    "content": "\n/* -------------------------------------\n * Bar container\n * ------------------------------------- */\n.radial-bar {\n  position: relative;\n  display: inline-block;\n  font-size: 16px;\n  border-radius: 50%;\n  border: 2px solid #fafafa;\n  background-color: transparent;\n  margin-bottom: 20px;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  width: 80px;\n  height: 80px;\n  font-size: 18px;\n}\n.radial-bar:after,\n.radial-bar > img {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-radius: 50%;\n  text-align: center;\n  font-weight: bold;\n  color: #a1a2a3;\n}\n.radial-bar:after {\n  content: attr(data-label);\n  background-color: #f0f0f0;\n  z-index: 101;\n}\n.radial-bar > img {\n  z-index: 102;\n}\n.radial-bar:after,\n.radial-bar > img {\n  width: 56px;\n  height: 56px;\n  margin-left: 12px;\n  margin-top: 12px;\n  line-height: 56px;\n}\n\n.radial-bar.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-50 {\n  background-image: linear-gradient(270deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-55 {\n  background-image: linear-gradient(288deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-60 {\n  background-image: linear-gradient(306deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-65 {\n  background-image: linear-gradient(324deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-70 {\n  background-image: linear-gradient(342deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-75 {\n  background-image: linear-gradient(360deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-80 {\n  background-image: linear-gradient(378deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-85 {\n  background-image: linear-gradient(396deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-90 {\n  background-image: linear-gradient(414deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-95 {\n  background-image: linear-gradient(432deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar.radial-bar-100 {\n  background-image: linear-gradient(450deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-50 {\n  background-image: linear-gradient(270deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-55 {\n  background-image: linear-gradient(288deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-60 {\n  background-image: linear-gradient(306deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-65 {\n  background-image: linear-gradient(324deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-70 {\n  background-image: linear-gradient(342deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-75 {\n  background-image: linear-gradient(360deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-80 {\n  background-image: linear-gradient(378deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-85 {\n  background-image: linear-gradient(396deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-90 {\n  background-image: linear-gradient(414deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-95 {\n  background-image: linear-gradient(432deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-primary.radial-bar-100 {\n  background-image: linear-gradient(450deg, #5d9cec 50%, transparent 50%, transparent), linear-gradient(270deg, #5d9cec 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-50 {\n  background-image: linear-gradient(270deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-55 {\n  background-image: linear-gradient(288deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-60 {\n  background-image: linear-gradient(306deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-65 {\n  background-image: linear-gradient(324deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-70 {\n  background-image: linear-gradient(342deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-75 {\n  background-image: linear-gradient(360deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-80 {\n  background-image: linear-gradient(378deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-85 {\n  background-image: linear-gradient(396deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-90 {\n  background-image: linear-gradient(414deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-95 {\n  background-image: linear-gradient(432deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-success.radial-bar-100 {\n  background-image: linear-gradient(450deg, #81c868 50%, transparent 50%, transparent), linear-gradient(270deg, #81c868 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-50 {\n  background-image: linear-gradient(270deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-55 {\n  background-image: linear-gradient(288deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-60 {\n  background-image: linear-gradient(306deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-65 {\n  background-image: linear-gradient(324deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-70 {\n  background-image: linear-gradient(342deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-75 {\n  background-image: linear-gradient(360deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-80 {\n  background-image: linear-gradient(378deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-85 {\n  background-image: linear-gradient(396deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-90 {\n  background-image: linear-gradient(414deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-95 {\n  background-image: linear-gradient(432deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-info.radial-bar-100 {\n  background-image: linear-gradient(450deg, #34d3eb 50%, transparent 50%, transparent), linear-gradient(270deg, #34d3eb 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-50 {\n  background-image: linear-gradient(270deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-55 {\n  background-image: linear-gradient(288deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-60 {\n  background-image: linear-gradient(306deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-65 {\n  background-image: linear-gradient(324deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-70 {\n  background-image: linear-gradient(342deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-75 {\n  background-image: linear-gradient(360deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-80 {\n  background-image: linear-gradient(378deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-85 {\n  background-image: linear-gradient(396deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-90 {\n  background-image: linear-gradient(414deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-95 {\n  background-image: linear-gradient(432deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-warning.radial-bar-100 {\n  background-image: linear-gradient(450deg, #ffbd4a 50%, transparent 50%, transparent), linear-gradient(270deg, #ffbd4a 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-50 {\n  background-image: linear-gradient(270deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-55 {\n  background-image: linear-gradient(288deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-60 {\n  background-image: linear-gradient(306deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-65 {\n  background-image: linear-gradient(324deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-70 {\n  background-image: linear-gradient(342deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-75 {\n  background-image: linear-gradient(360deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-80 {\n  background-image: linear-gradient(378deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-85 {\n  background-image: linear-gradient(396deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-90 {\n  background-image: linear-gradient(414deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-95 {\n  background-image: linear-gradient(432deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-danger.radial-bar-100 {\n  background-image: linear-gradient(450deg, #f05050 50%, transparent 50%, transparent), linear-gradient(270deg, #f05050 50%, #fafafa 50%, #fafafa);\n}\n\n\n/* -- Radial Default -- */\n.radial-bar-default.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-50 {\n  background-image: linear-gradient(270deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-55 {\n  background-image: linear-gradient(288deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-60 {\n  background-image: linear-gradient(306deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-65 {\n  background-image: linear-gradient(324deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-70 {\n  background-image: linear-gradient(342deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-75 {\n  background-image: linear-gradient(360deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-80 {\n  background-image: linear-gradient(378deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-85 {\n  background-image: linear-gradient(396deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-90 {\n  background-image: linear-gradient(414deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-95 {\n  background-image: linear-gradient(432deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-default.radial-bar-100 {\n  background-image: linear-gradient(450deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #5fbeaa 50%, #fafafa 50%, #fafafa);\n}\n\n\n\n/* -- Radial Pink -- */\n.radial-bar-pink.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-50 {\n  background-image: linear-gradient(270deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-55 {\n  background-image: linear-gradient(288deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-60 {\n  background-image: linear-gradient(306deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-65 {\n  background-image: linear-gradient(324deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-70 {\n  background-image: linear-gradient(342deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-75 {\n  background-image: linear-gradient(360deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-80 {\n  background-image: linear-gradient(378deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-85 {\n  background-image: linear-gradient(396deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-90 {\n  background-image: linear-gradient(414deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-95 {\n  background-image: linear-gradient(432deg, #fb6d9d 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-pink.radial-bar-100 {\n  background-image: linear-gradient(450deg, #5fbeaa 50%, transparent 50%, transparent), linear-gradient(270deg, #fb6d9d 50%, #fafafa 50%, #fafafa);\n}\n\n\n\n/* -- Radial Purple -- */\n.radial-bar-purple.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-50 {\n  background-image: linear-gradient(270deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-55 {\n  background-image: linear-gradient(288deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-60 {\n  background-image: linear-gradient(306deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-65 {\n  background-image: linear-gradient(324deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-70 {\n  background-image: linear-gradient(342deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-75 {\n  background-image: linear-gradient(360deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-80 {\n  background-image: linear-gradient(378deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-85 {\n  background-image: linear-gradient(396deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-90 {\n  background-image: linear-gradient(414deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-95 {\n  background-image: linear-gradient(432deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-purple.radial-bar-100 {\n  background-image: linear-gradient(450deg, #7266ba 50%, transparent 50%, transparent), linear-gradient(270deg, #7266ba 50%, #fafafa 50%, #fafafa);\n}\n\n\n\n/* -- Radial Inverse -- */\n.radial-bar-inverse.radial-bar-0 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-5 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-10 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-15 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-20 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-25 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-30 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-35 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-40 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-45 {\n  background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-50 {\n  background-image: linear-gradient(270deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-55 {\n  background-image: linear-gradient(288deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-60 {\n  background-image: linear-gradient(306deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-65 {\n  background-image: linear-gradient(324deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-70 {\n  background-image: linear-gradient(342deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-75 {\n  background-image: linear-gradient(360deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-80 {\n  background-image: linear-gradient(378deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-85 {\n  background-image: linear-gradient(396deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-90 {\n  background-image: linear-gradient(414deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-95 {\n  background-image: linear-gradient(432deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n.radial-bar-inverse.radial-bar-100 {\n  background-image: linear-gradient(450deg, #4c5667 50%, transparent 50%, transparent), linear-gradient(270deg, #4c5667 50%, #fafafa 50%, #fafafa);\n}\n\n.radial-bar-lg {\n  width: 100px;\n  height: 100px;\n  font-size: 20px;\n}\n.radial-bar-lg:after,\n.radial-bar-lg > img {\n  width: 70px;\n  height: 70px;\n  margin-left: 15px;\n  margin-top: 15px;\n  line-height: 70px;\n}\n.radial-bar-sm {\n  width: 50px;\n  height: 50px;\n  font-size: 12px;\n}\n.radial-bar-sm:after,\n.radial-bar-sm > img {\n  width: 35px;\n  height: 35px;\n  margin-left: 7.5px;\n  margin-top: 7.5px;\n  line-height: 35px;\n}\n.radial-bar-xs {\n  width: 30px;\n  height: 30px;\n  font-size: 8px;\n}\n.radial-bar-xs:after,\n.radial-bar-xs > img {\n  width: 20px;\n  height: 20px;\n  margin-left: 5.5px;\n  margin-top: 4.5px;\n  line-height: 21px;\n}\n\n.radial-bar {\n  background-clip: content-box;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/raphael/raphael-min.js",
    "content": "// ┌────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.1.4 - JavaScript Vector Library                          │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\n!function(a){var b,c,d=\"0.4.2\",e=\"hasOwnProperty\",f=/[\\.\\/]/,g=\"*\",h=function(){},i=function(a,b){return a-b},j={n:{}},k=function(a,d){a=String(a);var e,f=c,g=Array.prototype.slice.call(arguments,2),h=k.listeners(a),j=0,l=[],m={},n=[],o=b;b=a,c=0;for(var p=0,q=h.length;q>p;p++)\"zIndex\"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],\"zIndex\"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),\"function\"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp(\"(?:\\\\.|\\\\/|^)\"+a+\"(?:\\\\.|\\\\/|$)\").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return void(k._events=j={n:{}});var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;m<p.length;m+=h.length-2){if(h=[m,1],c=p[m].n,o[i]!=g)c[o[i]]&&h.push(c[o[i]]);else for(d in c)c[e](d)&&h.push(c[d]);p.splice.apply(p,h)}for(i=0,l=p.length;l>i;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return\"You are running Eve \"+d},\"undefined\"!=typeof module&&module.exports?module.exports=k:\"undefined\"!=typeof define?define(\"eve\",[],function(){return k}):a.eve=k}(window||this),function(a,b){\"function\"==typeof define&&define.amd?define([\"eve\"],function(c){return b(a,c)}):b(a,a.eve||\"function\"==typeof require&&require(\"eve\"))}(this,function(a,b){function c(a){if(c.is(a,\"function\"))return u?a():b.on(\"raphael.DOMload\",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],\"function\")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on(\"raphael.DOMload\",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if(\"function\"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join(\"␀\"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push([\"C\",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)<i)){var k,l=1,m=l/2,n=l-m,o=.01;for(k=j(a,b,c,d,e,f,g,h,n);Q(k-i)>o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)<P(e,g)||P(a,c)>O(e,g)||O(b,d)<P(f,h)||P(b,d)>O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?\"y\":\"x\",y=Q(w.x-v.x)<.001?\"y\":\"x\",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if(\"M\"==s[0])e=i=s[1],f=j=s[2];else{\"C\"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if(\"M\"==v[0])g=k=v[1],h=l=v[2];else{\"C\"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+\" × \"+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)<b)return e;if(h=(3*l*e+2*k)*e+j,Q(h)<1e-6)break;e-=f/h}if(c=0,d=1,e=a,c>e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case\"colour\":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case\"path\":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case\"transform\":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case\"csv\":var M=I(i[y])[J](w),N=I(r[y])[J](w);if(\"clip-rect\"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b(\"raphael.anim.start.\"+d.id,d,a)}}function t(a){for(var b=0;b<ic.length;b++)ic[b].el.paper==a&&ic.splice(b--,1)}c.version=\"2.1.2\",c.eve=b;var u,v,w=/[, ]+/,x={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},y=/\\{(\\d+)\\}/g,z=\"hasOwnProperty\",A={doc:document,win:a},B={was:Object.prototype[z].call(A.win,\"Raphael\"),is:A.win.Raphael},C=function(){this.ca=this.customAttributes={}},D=\"apply\",E=\"concat\",F=\"ontouchstart\"in A.win||A.win.DocumentTouch&&A.doc instanceof DocumentTouch,G=\"\",H=\" \",I=String,J=\"split\",K=\"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[J](H),L={mousedown:\"touchstart\",mousemove:\"touchmove\",mouseup:\"touchend\"},M=I.prototype.toLowerCase,N=Math,O=N.max,P=N.min,Q=N.abs,R=N.pow,S=N.PI,T=\"number\",U=\"string\",V=\"array\",W=Object.prototype.toString,X=(c._ISURL=/^url\\(['\"]?(.+?)['\"]?\\)$/i,/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i),Y={NaN:1,Infinity:1,\"-Infinity\":1},Z=/^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,$=N.round,_=parseFloat,ab=parseInt,bb=I.prototype.toUpperCase,cb=c._availableAttrs={\"arrow-end\":\"none\",\"arrow-start\":\"none\",blur:0,\"clip-rect\":\"0 0 1e9 1e9\",cursor:\"default\",cx:0,cy:0,fill:\"#fff\",\"fill-opacity\":1,font:'10px \"Arial\"',\"font-family\":'\"Arial\"',\"font-size\":\"10\",\"font-style\":\"normal\",\"font-weight\":400,gradient:0,height:0,href:\"http://raphaeljs.com/\",\"letter-spacing\":0,opacity:1,path:\"M0,0\",r:0,rx:0,ry:0,src:\"\",stroke:\"#000\",\"stroke-dasharray\":\"\",\"stroke-linecap\":\"butt\",\"stroke-linejoin\":\"butt\",\"stroke-miterlimit\":0,\"stroke-opacity\":1,\"stroke-width\":1,target:\"_blank\",\"text-anchor\":\"middle\",title:\"Raphael\",transform:\"\",width:0,x:0,y:0},db=c._availableAnimAttrs={blur:T,\"clip-rect\":\"csv\",cx:T,cy:T,fill:\"colour\",\"fill-opacity\":T,\"font-size\":T,height:T,opacity:T,path:\"path\",r:T,rx:T,ry:T,stroke:\"colour\",\"stroke-opacity\":T,\"stroke-width\":T,transform:\"transform\",width:T,x:T,y:T},eb=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,fb={hs:1,rg:1},gb=/,?([achlmqrstvxz]),?/gi,hb=/([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,ib=/([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,jb=/(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/gi,kb=(c._radial_gradient=/^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,{}),lb=function(a,b){return _(a)-_(b)},mb=function(){},nb=function(a){return a},ob=c._rectPath=function(a,b,c,d,e){return e?[[\"M\",a+e,b],[\"l\",c-2*e,0],[\"a\",e,e,0,0,1,e,e],[\"l\",0,d-2*e],[\"a\",e,e,0,0,1,-e,e],[\"l\",2*e-c,0],[\"a\",e,e,0,0,1,-e,-e],[\"l\",0,2*e-d],[\"a\",e,e,0,0,1,e,-e],[\"z\"]]:[[\"M\",a,b],[\"l\",c,0],[\"l\",0,d],[\"l\",-c,0],[\"z\"]]},pb=function(a,b,c,d){return null==d&&(d=c),[[\"M\",a,b],[\"m\",0,-d],[\"a\",c,d,0,1,1,0,2*d],[\"a\",c,d,0,1,1,0,-2*d],[\"z\"]]},qb=c._getPath={path:function(a){return a.attr(\"path\")},circle:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)},set:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)}},rb=c.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;for(a=Kb(a),e=0,g=a.length;g>e;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")?\"SVG\":\"VML\",\"VML\"==c.type){var sb,tb=A.doc.createElement(\"div\");if(tb.innerHTML='<v:shape adj=\"1\"/>',sb=tb.firstChild,sb.style.behavior=\"url(#default#VML)\",!sb||\"object\"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml=\"VML\"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),\"finite\"==b?!Y[z](+a):\"array\"==b?a instanceof Array:\"null\"==b&&null===a||b==typeof a&&null!==a||\"object\"==b&&a===Object(a)||\"array\"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return Math.round(180*a/S%360*1e3)/1e3},c.snapTo=function(a,b,d){if(d=c.is(d,\"finite\")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b};c.createUUID=function(a,b){return function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=16*N.random()|0,c=\"x\"==a?b:3&b|8;return c.toString(16)});c.setWindow=function(a){b(\"raphael.setWindow\",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\\s+|\\s+$/g;try{var e=new ActiveXObject(\"htmlfile\");e.write(\"<body>\"),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue(\"ForeColor\");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,\"#\"+(\"000000\"+c.toString(16)).slice(-6)}catch(e){return\"none\"}})}else{var i=A.doc.createElement(\"i\");i.title=\"Raphaël Colour Picker\",i.style.display=\"none\",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue(\"color\")})}return ub(a)},vb=function(){return\"hsb(\"+[this.h,this.s,this.b]+\")\"},wb=function(){return\"hsl(\"+[this.h,this.s,this.l]+\")\"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,\"object\")&&\"r\"in a&&\"g\"in a&&\"b\"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,\"finite\")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"b\"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"l\"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,\"string\")&&(a=c.getRGB(a)),c.is(a,\"object\")&&\"r\"in a&&\"g\"in a&&\"b\"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:\"none\"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"b\"in a&&(c=a.b,b=a.s,d=a.o,a=a.h),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,\"object\")&&\"h\"in a&&\"s\"in a&&\"l\"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(\",\").replace(gb,\"$1\")};c._preload=function(a,b){var c=A.doc.createElement(\"img\");c.style.cssText=\"position:absolute;left:-9999em;top:-9999em\",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a};c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf(\"-\")+1)return{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:g};if(\"none\"==a)return{r:-1,g:-1,b:-1,hex:\"none\",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||\"#\"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),\"%\"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),\"%\"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),\"%\"==i[2].slice(-1)&&(e*=2.55),\"rgba\"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&\"%\"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),\"%\"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),\"%\"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),\"%\"==i[2].slice(-1)&&(e*=2.55),(\"deg\"==i[0].slice(-3)||\"°\"==i[0].slice(-1))&&(b/=360),\"hsba\"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&\"%\"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),\"%\"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),\"%\"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),\"%\"==i[2].slice(-1)&&(e*=2.55),(\"deg\"==i[0].slice(-3)||\"°\"==i[0].slice(-1))&&(b/=360),\"hsla\"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&\"%\"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex=\"#\"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,\"finite\")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return\"#\"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),\"m\"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g=\"l\",b=\"m\"==b?\"l\":\"L\"),\"r\"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){{var e=[];M.call(c)}d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,\"array\")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.x<b.x2&&a.x>b.x||b.x<a.x2&&b.x>a.x)&&(a.y<b.y2&&a.y>b.y||b.y<a.y2&&b.y>a.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&n(a,[[\"M\",b,d],[\"H\",e.x2+10]],1)%2==1},c._removedFactory=function(a){return function(){b(\"raphael.log\",null,\"Raphaël: you are calling to method “\"+a+\"” of removed object\",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],\"M\"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;\"M\"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push([\"M\",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case\"a\":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case\"v\":l[1]=+(m[1]-f).toFixed(3);break;case\"m\":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],\"m\"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case\"z\":e=g,f=h;break;case\"h\":e+=+d[j][r-1];break;case\"v\":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[[\"M\",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;\"M\"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=[\"M\",e,f]);for(var k,l,m=3==a.length&&\"M\"==a[0][0]&&\"R\"==a[1][0].toUpperCase()&&\"Z\"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case\"A\":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case\"V\":k[1]=+l[1]+f;break;case\"H\":k[1]=+l[1]+e;break;case\"R\":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case\"M\":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if(\"R\"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=[\"R\"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case\"Z\":e=g,f=i;break;case\"H\":e=k[1];break;case\"V\":f=k[1];break;case\"M\":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](\",\");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>\"1e12\"&&(m=.5),Q(n)>\"1e12\"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>\"1e12\"&&(m=.5),Q(n)>\"1e12\"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e,f={T:1,Q:1};if(!a)return[\"C\",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in f)&&(b.qx=b.qy=null),a[0]){case\"M\":b.X=a[1],b.Y=a[2];break;case\"A\":a=[\"C\"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case\"S\":\"C\"==c||\"S\"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=[\"C\",d,e][E](a.slice(1));break;case\"T\":\"Q\"==c||\"T\"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=[\"C\"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case\"Q\":b.qx=a[1],b.qy=a[2],a=[\"C\"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case\"L\":a=[\"C\"][E](Fb(b.x,b.y,a[1],a[2]));break;case\"H\":a=[\"C\"][E](Fb(b.x,b.y,a[1],b.y));break;case\"V\":a=[\"C\"][E](Fb(b.x,b.y,b.x,a[1]));break;case\"Z\":a=[\"C\"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)k[b]=\"A\",e&&(l[b]=\"A\"),a.splice(b++,0,[\"C\"][E](c.splice(0,6)));a.splice(b,1),p=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&\"M\"==a[g][0]&&\"M\"!=b[g][0]&&(b.splice(g,0,[\"M\",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],p=O(d.length,e&&e.length||0))},k=[],l=[],m=\"\",n=\"\",o=0,p=O(d.length,e&&e.length||0);p>o;o++){d[o]&&(m=d[o][0]),\"C\"!=m&&(k[o]=m,o&&(n=k[o-1])),d[o]=h(d[o],f,n),\"A\"!=k[o]&&\"C\"==m&&(k[o]=\"C\"),i(d,o),e&&(e[o]&&(m=e[o][0]),\"C\"!=m&&(l[o]=m,o&&(n=l[o-1])),e[o]=h(e[o],g,n),\"A\"!=l[o]&&\"C\"==m&&(l[o]=\"C\"),i(e,o)),j(d,e,f,g,o),j(e,d,g,f,o);var q=d[o],r=e&&e[o],s=q.length,t=e&&r.length;f.x=q[s-2],f.y=q[s-1],f.bx=_(q[s-4])||f.x,f.by=_(q[s-3])||f.y,g.bx=e&&(_(r[t-4])||g.x),g.by=e&&(_(r[t-3])||g.y),g.x=e&&r[t-2],g.y=e&&r[t-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\\d\\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+\"%\"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+\"%\"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\\.{3}|\\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;\"t\"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):\"r\"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):\"s\"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):\"m\"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case\"t\":return[b,0,0];case\"m\":return[b,1,0,0,1,0,0];case\"r\":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case\"s\":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\\.{3}|\\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];\nfor(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||\"r\"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||\"s\"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d])}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,\"object\")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?\"matrix(\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+\")\":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+this.get(0)+\", M12=\"+this.get(2)+\", M21=\"+this.get(1)+\", M22=\"+this.get(3)+\", Dx=\"+this.get(4)+\", Dy=\"+this.get(5)+\", sizingmethod='auto expand')\"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?\"t\"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?\"s\"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?\"r\"+[b.rotate,0,0]:G)):\"m\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\\/(.*?)\\s/)||navigator.userAgent.match(/Chrome\\/(\\d+)/);v.safari=\"Apple Computer, Inc.\"==navigator.vendor&&(Qb&&Qb[1]<4||\"iP\"==navigator.platform.slice(0,2))||\"Google Inc.\"==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:\"none\"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],f,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent(\"on\"+b,e);var f=function(){return a.detachEvent(\"on\"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display=\"none\",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b(\"raphael.drag.over.\"+c.el.id,c.el,k),d+=g,e+=f,b(\"raphael.drag.move.\"+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b(\"raphael.drag.end.\"+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,\"function\")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c[\"un\"+a]=$b[\"un\"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,\"undefined\")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,\"object\")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b(\"raphael.data.get.\"+this.id,this,e[a],a),e[a]}return e[a]=d,b(\"raphael.data.set.\"+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on(\"raphael.drag.start.\"+this.id,d),a&&b.on(\"raphael.drag.move.\"+this.id,a),e&&b.on(\"raphael.drag.end.\"+this.id,e),b(\"raphael.drag.start.\"+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on(\"raphael.drag.over.\"+this.id,a):b.unbind(\"raphael.drag.over.\"+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind(\"raphael.drag.*.\"+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||\"about:blank\",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,\"array\")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type=\"set\",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.getSize=function(){var a=this.canvas.parentNode;return{width:a.offsetWidth,height:a.offsetHeight}},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&\"svg\"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr(\"transform\")&&this.attr(\"transform\").length&&(d=c.transformPath(d,this.attr(\"transform\"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if(\"text\"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr(\"stroke-width\")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||\"#000\"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:\"none\",\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"stroke-width\":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l=\"\",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],\"M\"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=[\"C\"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=[\"M\"+k.x,k.y+\"C\"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if(\"text\"!=this.type&&\"set\"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},\"<\":function(a){return R(a,1.7)},\">\":function(a){return R(a,.48)},\"<>\":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin(2*(a-.075)*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc[\"ease-in\"]=hc[\"<\"],hc.easeOut=hc[\"ease-out\"]=hc[\">\"],hc.easeInOut=hc[\"ease-in-out\"]=hc[\"<>\"],hc[\"back-in\"]=hc.backIn,hc[\"back-out\"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;d<ic.length;d++){var e=ic[d];if(!e.el.removed&&!e.paused){var f,g,h=a-e.start,i=e.ms,j=e.easing,k=e.from,l=e.diff,m=e.to,n=(e.t,e.el),o={},p={};if(e.initstatus?(h=(e.initstatus*e.anim.top-e.prev)/(e.percent-e.prev)*i,e.status=e.initstatus,delete e.initstatus,e.stop&&ic.splice(d--,1)):e.status=(e.prev+(e.percent-e.prev)*(h/i))/e.anim.top,!(0>h))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case\"colour\":f=\"rgb(\"+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(\",\")+\")\";break;case\"path\":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case\"transform\":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[[\"m\",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case\"csv\":if(\"clip-rect\"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b(\"raphael.anim.frame.\"+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b(\"raphael.anim.frame.\"+d.id,d,e),b(\"raphael.anim.finish.\"+d.id,d,e),c.is(a,\"function\")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on(\"raphael.anim.frame.\"+this.id,a):b.unbind(\"raphael.anim.frame.\"+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,\"function\")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+\"%\"!=g&&(f=!0,h[g]=a[g]);if(f)return d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b);if(e){var i=0;for(var j in a){var k=ab(j);a[z](j)&&k>i&&(i=k)}i+=\"%\",!a[i].callback&&(a[i].callback=e)}return new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b(\"raphael.anim.pause.\"+this.id,this,ic[c].anim)!==!1&&(ic[c].paused=!0);return this},$b.resume=function(a){for(var c=0;c<ic.length;c++)if(ic[c].el.id==this.id&&(!a||ic[c].anim==a)){var d=ic[c];b(\"raphael.anim.resume.\"+this.id,this,d.anim)!==!1&&(delete d.paused,this.status(d.anim,d.status))}return this},$b.stop=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b(\"raphael.anim.stop.\"+this.id,this,ic[c].anim)!==!1&&ic.splice(c--,1);return this},b.on(\"raphael.remove\",t),b.on(\"raphael.clear\",t),$b.toString=function(){return\"Raphaël’s object\"};var mc=function(a){if(this.items=[],this.length=0,this.type=\"set\",a)for(var b=0,c=a.length;c>b;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],\"object\"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;c<arguments.length;c++)f.push(arguments[c]);for(c=0;b>c;c++)e.push(this[a+c]);for(;c<this.length-a;c++)d.push(this[a+c]);var g=f.length;for(c=0;c<g+d.length;c++)this.items[a+c]=this[a+c]=g>c?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,\"function\")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return\"Raphaël‘s set\"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face[\"font-family\"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face[\"units-per-em\"]=ab(a.face[\"units-per-em\"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&\"M\"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:\"L\",c:\"C\",x:\"z\",t:\"m\",r:\"l\",v:\"c\"}[a]||\"M\"})+\"z\"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||\"normal\",d=d||\"normal\",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp(\"(^|\\\\s)\"+a.replace(/[^\\w\\d\\s+!~.:_-]/g,G)+\"(\\\\s|$)\",\"i\");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face[\"font-weight\"]!=b||i.face[\"font-style\"]!=d&&i.face[\"font-style\"]||i.face[\"font-stretch\"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||\"middle\",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,\"string\")&&(e=this.getFont(e)),e){j=(f||16)/e.face[\"units-per-em\"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+(\"baseline\"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if(\"\\n\"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,[\"t\",l*j,r*j,\"s\",j,j,p,s,\"t\",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:\"#000\",stroke:\"none\"})},v.add=function(a){if(c.is(a,\"array\"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\\{([^\\}]+)\\}/g,b=/(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),\"function\"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+\"\"};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,b.on(\"raphael.DOMload\",function(){u=!0}),function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve(\"raphael.DOMload\")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState=\"complete\"},!1),a.readyState=\"loading\"),e()}(document,\"DOMContentLoaded\"),function(){if(c.svg){var a=\"hasOwnProperty\",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l=\"\",m=\" \",n=\"http://www.w3.org/1999/xlink\",o={block:\"M5,0 0,2.5 5,5z\",classic:\"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",diamond:\"M2.5,0 5,2.5 2.5,5 0,2.5z\",open:\"M6,1 1,3.5 6,6\",oval:\"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"},p={};c.toString=function(){return\"Your browser supports SVG.\\nYou are running Raphaël \"+this.version};var q=function(d,e){if(e){\"string\"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&(\"xlink:\"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS(\"http://www.w3.org/2000/svg\",d),d.style&&(d.style.webkitTapHighlightColor=\"rgba(0,0,0,0)\");return d},r=function(a,e){var j=\"linear\",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j=\"radial\",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\\s*\\-\\s*/),\"linear\"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\\(\\)\\s,\\xb0#]/g,\"_\"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+\"Gradient\",{id:k}),a.gradient=s,q(s,\"radial\"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q(\"stop\",{offset:w[x].offset?w[x].offset:x?\"100%\":\"0%\",\"stop-color\":w[x].color||\"#fff\"}))}}return q(o,{fill:\"url('\"+document.location+\"#\"+k+\"')\",opacity:1,\"fill-opacity\":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+\" translate(\"+b.x+\",\"+b.y+\")\"})},t=function(d,e,f){if(\"path\"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split(\"-\"),n=d.paper,r=f?\"end\":\"start\",s=d.node,t=d.attrs,u=t[\"stroke-width\"],v=m.length,w=\"classic\",x=3,y=3,z=5;v--;)switch(m[v]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":w=m[v];break;case\"wide\":y=5;break;case\"narrow\":y=2;break;case\"long\":x=5;break;case\"short\":x=2}if(\"open\"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:\"none\",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:\"none\"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},\"none\"!=w){var A=\"raphael-marker-\"+w,B=\"raphael-marker-\"+r+w+x+y+\"-obj\"+d.id;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q(\"path\"),{\"stroke-linecap\":\"round\",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName(\"use\")[0]):(D=q(q(\"marker\"),{id:B,markerHeight:y,markerWidth:x,orient:\"auto\",refX:j,refY:y/2}),C=q(q(\"use\"),{\"xlink:href\":\"#\"+A,transform:(f?\"rotate(180 \"+x/2+\" \"+y/2+\") \":l)+\"scale(\"+x/z+\",\"+y/z+\")\",\"stroke-width\":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*(\"diamond\"!=w&&\"oval\"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k[\"marker-\"+r]=\"url(#\"+B+\")\",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+\"Path\"]=A,d._.arrows[r+\"Marker\"]=B,d._.arrows[r+\"dx\"]=E,d._.arrows[r+\"Type\"]=w,d._.arrows[r+\"String\"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+\"Path\"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+\"Path\"],delete d._.arrows[r+\"Marker\"],delete d._.arrows[r+\"dx\"],delete d._.arrows[r+\"Type\"],delete d._.arrows[r+\"String\"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={\"\":[0],none:[0],\"-\":[3,1],\".\":[1,1],\"-.\":[3,1,1,1],\"-..\":[3,1,1,1,1,1],\". \":[1,3],\"- \":[4,3],\"--\":[8,3],\"- .\":[4,3,1,3],\"--.\":[8,3,1,3],\"--..\":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs[\"stroke-width\"]||\"1\",f={round:e,square:e,butt:0}[a.attrs[\"stroke-linecap\"]||d[\"stroke-linecap\"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{\"stroke-dasharray\":g.join(\",\")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility=\"hidden\";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case\"blur\":d.blur(p);break;case\"title\":var u=i.getElementsByTagName(\"title\");if(u.length&&(u=u[0]))u.firstChild.nodeValue=p;else{u=q(\"title\");var w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u)}break;case\"href\":case\"target\":var x=i.parentNode;if(\"a\"!=x.tagName.toLowerCase()){var z=q(\"a\");x.insertBefore(z,i),z.appendChild(i),x=z}\"target\"==o?x.setAttributeNS(n,\"show\",\"blank\"==p?\"new\":p):x.setAttributeNS(n,o,p);break;case\"cursor\":i.style.cursor=p;break;case\"transform\":d.transform(p);break;case\"arrow-start\":t(d,p);break;case\"arrow-end\":t(d,p,1);break;case\"clip-rect\":var A=b(p).split(j);if(4==A.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var B=q(\"clipPath\"),C=q(\"rect\");B.id=c.createUUID(),q(C,{x:A[0],y:A[1],width:A[2],height:A[3]}),B.appendChild(C),d.paper.defs.appendChild(B),q(i,{\"clip-path\":\"url(#\"+B.id+\")\"}),d.clip=C}if(!p){var D=i.getAttribute(\"clip-path\");if(D){var E=c._g.doc.getElementById(D.replace(/(^url\\(#|\\)$)/g,l));E&&E.parentNode.removeChild(E),q(i,{\"clip-path\":l}),delete d.clip}}break;case\"path\":\"path\"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):\"M0,0\"}),d._.dirty=1,d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case\"width\":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o=\"x\",p=k.x;case\"x\":k.fx&&(p=-k.x-(k.width||0));case\"rx\":if(\"rx\"==o&&\"rect\"==d.type)break;case\"cx\":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case\"height\":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o=\"y\",p=k.y;case\"y\":k.fy&&(p=-k.y-(k.height||0));case\"ry\":if(\"ry\"==o&&\"rect\"==d.type)break;case\"cy\":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case\"r\":\"rect\"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case\"src\":\"image\"==d.type&&i.setAttributeNS(n,\"href\",p);break;case\"stroke-width\":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),i.setAttribute(o,p),k[\"stroke-dasharray\"]&&v(d,k[\"stroke-dasharray\"],f),d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1));break;case\"stroke-dasharray\":v(d,p,f);break;case\"fill\":var F=b(p).match(c._ISURL);if(F){B=q(\"pattern\");var G=q(\"image\");B.id=c.createUUID(),q(B,{x:0,y:0,patternUnits:\"userSpaceOnUse\",height:1,width:1}),q(G,{x:0,y:0,\"xlink:href\":F[1]}),B.appendChild(G),function(a){c._preload(F[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(G,{width:b,height:c}),d.paper.safari()})}(B),d.paper.defs.appendChild(B),q(i,{fill:\"url(#\"+B.id+\")\"}),d.pattern=B,d.pattern&&s(d);break}var H=c.getRGB(p);if(H.error){if((\"circle\"==d.type||\"ellipse\"==d.type||\"r\"!=b(p).charAt())&&r(d,p)){if(\"opacity\"in k||\"fill-opacity\"in k){var I=c._g.doc.getElementById(i.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,l));if(I){var J=I.getElementsByTagName(\"stop\");q(J[J.length-1],{\"stop-opacity\":(\"opacity\"in k?k.opacity:1)*(\"fill-opacity\"in k?k[\"fill-opacity\"]:1)})}}k.gradient=p,k.fill=\"none\";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,\"undefined\")&&c.is(f.opacity,\"undefined\")&&q(i,{opacity:k.opacity}),!c.is(k[\"fill-opacity\"],\"undefined\")&&c.is(f[\"fill-opacity\"],\"undefined\")&&q(i,{\"fill-opacity\":k[\"fill-opacity\"]});H[a](\"opacity\")&&q(i,{\"fill-opacity\":H.opacity>1?H.opacity/100:H.opacity});case\"stroke\":H=c.getRGB(p),i.setAttribute(o,H.hex),\"stroke\"==o&&H[a](\"opacity\")&&q(i,{\"stroke-opacity\":H.opacity>1?H.opacity/100:H.opacity}),\"stroke\"==o&&d._.arrows&&(\"startString\"in d._.arrows&&t(d,d._.arrows.startString),\"endString\"in d._.arrows&&t(d,d._.arrows.endString,1));break;case\"gradient\":(\"circle\"==d.type||\"ellipse\"==d.type||\"r\"!=b(p).charAt())&&r(d,p);break;\ncase\"opacity\":k.gradient&&!k[a](\"stroke-opacity\")&&q(i,{\"stroke-opacity\":p>1?p/100:p});case\"fill-opacity\":if(k.gradient){I=c._g.doc.getElementById(i.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,l)),I&&(J=I.getElementsByTagName(\"stop\"),q(J[J.length-1],{\"stop-opacity\":p}));break}default:\"font-size\"==o&&(p=e(p,10)+\"px\");var K=o.replace(/(\\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[K]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(\"text\"==d.type&&(f[a](\"text\")||f[a](\"font\")||f[a](\"font-size\")||f[a](\"x\")||f[a](\"y\"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue(\"font-size\"),10):10;if(f[a](\"text\")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split(\"\\n\"),m=[],n=0,o=k.length;o>n;n++)j=q(\"tspan\"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName(\"tspan\"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,\"finite\")&&q(m[0],{dy:r})}},z=function(a){return a.parentNode&&\"a\"===a.parentNode.tagName.toLowerCase()?a.parentNode:a},A=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},B=c.el;A.prototype=B,B.constructor=A,c._engine.path=function(a,b){var c=q(\"path\");b.canvas&&b.canvas.appendChild(c);var d=new A(c,b);return d.type=\"path\",w(d,{fill:\"none\",stroke:\"#000\",path:a}),d},B.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([[\"r\",a,c,e]])),this},B.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([[\"s\",a,c,e,f]])),this},B.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([[\"t\",a,c]])),this)},B.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a](\"stroke-width\")?this.attrs[\"stroke-width\"]:1;this.attr({\"stroke-width\":e})}return this},B.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display=\"none\"),this},B.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=\"\"),this},B.remove=function(){var a=z(this.node);if(!this.removed&&a.parentNode){var b=this.paper;b.__set__&&b.__set__.exclude(this),k.unbind(\"raphael.*.*.\"+this.id),this.gradient&&b.defs.removeChild(this.gradient),c._tear(this,b),a.parentNode.removeChild(a),this.removeData();for(var d in this)this[d]=\"function\"==typeof this[d]?c._removedFactory(d):null;this.removed=!0}},B._getBBox=function(){if(\"none\"==this.node.style.display){this.show();var a=!0}var b,c=!1;this.paper.canvas.parentElement?b=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(b=this.paper.canvas.parentNode.style),b&&\"none\"==b.display&&(c=!0,b.display=\"\");var d={};try{d=this.node.getBBox()}catch(e){d={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}}finally{d=d||{},c&&(b.display=\"none\")}return a&&this.hide(),d},B.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&\"none\"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,\"string\")){if(\"fill\"==b&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if(\"transform\"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],\"function\")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,\"array\")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,\"object\")&&(m=b);for(var n in m)k(\"raphael.attr.\"+n+\".\"+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],\"function\")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},B.toFront=function(){if(this.removed)return this;var a=z(this.node);a.parentNode.appendChild(a);var b=this.paper;return b.top!=this&&c._tofront(this,b),this},B.toBack=function(){if(this.removed)return this;var a=z(this.node),b=a.parentNode;b.insertBefore(a,b.firstChild),c._toback(this,this.paper);this.paper;return this},B.insertAfter=function(a){if(this.removed||!a)return this;var b=z(this.node),d=z(a.node||a[a.length-1].node);return d.nextSibling?d.parentNode.insertBefore(b,d.nextSibling):d.parentNode.appendChild(b),c._insertafter(this,a,this.paper),this},B.insertBefore=function(a){if(this.removed||!a)return this;var b=z(this.node),d=z(a.node||a[0].node);return d.parentNode.insertBefore(b,d),c._insertbefore(this,a,this.paper),this},B.blur=function(a){var b=this;if(0!==+a){var d=q(\"filter\"),e=q(\"feGaussianBlur\");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:\"url(#\"+d.id+\")\"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute(\"filter\");return b},c._engine.circle=function(a,b,c,d){var e=q(\"circle\");a.canvas&&a.canvas.appendChild(e);var f=new A(e,a);return f.attrs={cx:b,cy:c,r:d,fill:\"none\",stroke:\"#000\"},f.type=\"circle\",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q(\"rect\");a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:b,y:c,width:d,height:e,rx:f||0,ry:f||0,fill:\"none\",stroke:\"#000\"},h.type=\"rect\",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q(\"ellipse\");a.canvas&&a.canvas.appendChild(f);var g=new A(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:\"none\",stroke:\"#000\"},g.type=\"ellipse\",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q(\"image\");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:\"none\"}),g.setAttributeNS(n,\"href\",b),a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type=\"image\",h},c._engine.text=function(a,b,d,e){var f=q(\"text\");a.canvas&&a.canvas.appendChild(f);var g=new A(f,a);return g.attrs={x:b,y:d,\"text-anchor\":\"middle\",text:e,\"font-family\":c._availableAttrs[\"font-family\"],\"font-size\":c._availableAttrs[\"font-size\"],stroke:\"none\",fill:\"#000\"},g.type=\"text\",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute(\"width\",this.width),this.canvas.setAttribute(\"height\",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error(\"SVG container not found.\");var h,i=q(\"svg\"),j=\"overflow:hidden;\";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}),1==b?(i.style.cssText=j+\"position:absolute;left:\"+d+\"px;top:\"+e+\"px\",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+\"position:relative\",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k(\"raphael.setViewBox\",this,this._viewBox,[a,b,c,d,e]);var f,h,i=this.getSize(),j=g(c/i.width,d/i.height),l=this.top,n=e?\"xMidYMid meet\":\"xMinYMin\";for(null==a?(this._vbSize&&(j=1),delete this._vbSize,f=\"0 0 \"+this.width+m+this.height):(this._vbSize=j,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:n});j&&l;)h=\"stroke-width\"in l.attrs?l.attrs[\"stroke-width\"]:1,l.attr({\"stroke-width\":h}),l._.dirty=1,l._.dirtyT=1,l=l.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+\"px\"),f&&(this._top=(this._top+f)%1,c.top=this._top+\"px\"))},c.prototype.clear=function(){c.eve(\"raphael.clear\",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q(\"desc\")).appendChild(c._g.doc.createTextNode(\"Created with Raphaël \"+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q(\"defs\"))},c.prototype.remove=function(){k(\"raphael.remove\",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=\"function\"==typeof this[a]?c._removedFactory(a):null};var C=c.st;for(var D in B)B[a](D)&&!C[a](D)&&(C[D]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(D))}}(),function(){if(c.vml){var a=\"hasOwnProperty\",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j=\"fill\",k=/[, ]+/,l=c.eve,m=\" progid:DXImageTransform.Microsoft\",n=\" \",o=\"\",p={M:\"m\",L:\"l\",C:\"c\",Z:\"x\",m:\"t\",l:\"r\",c:\"v\",z:\"x\"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\\S+Blur\\([^\\)]+\\)/g,s=/-?[^,\\s-]+/g,t=\"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e=\"m\"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p[\"m\"==b?\"l\":\"L\"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),\"z\"==i&&(i=\"x\");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?\",\":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p=\"\",q=u/b,r=u/c;if(m.visibility=\"hidden\",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+=\"x\"),0>c&&(p+=\" y\")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility=\"visible\"}};c.toString=function(){return\"Your browser doesn’t support SVG. Falling down to VML.\\nYou are running Raphaël \"+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split(\"-\"),f=d?\"end\":\"start\",g=e.length,h=\"classic\",i=\"medium\",j=\"medium\";g--;)switch(e[g]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":h=e[g];break;case\"wide\":case\"narrow\":j=e[g];break;case\"long\":case\"short\":i=e[g]}var k=a.node.getElementsByTagName(\"stroke\")[0];k[f+\"arrow\"]=h,k[f+\"arrowlength\"]=i,k[f+\"arrowwidth\"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),\"blur\"in i&&e.blur(i.blur),(i.path&&\"path\"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf(\"r\")?c._pathToAbsolute(m.path):m.path),e._.dirty=1,\"image\"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),\"transform\"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if(\"clip-rect\"in i){var G=b(i[\"clip-rect\"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement(\"div\"),I=H.style;I.clip=c.format(\"rect({1}px {2}px {3}px {0}px)\",G),l.clipRect||(I.position=\"absolute\",I.top=0,I.left=0,I.width=e.paper.width+\"px\",I.height=e.paper.height+\"px\",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i[\"clip-rect\"]||l.clipRect&&(l.clipRect.style.clip=\"auto\")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i[\"font-family\"]&&(J.fontFamily='\"'+i[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g,o)+'\"'),i[\"font-size\"]&&(J.fontSize=i[\"font-size\"]),i[\"font-weight\"]&&(J.fontWeight=i[\"font-weight\"]),i[\"font-style\"]&&(J.fontStyle=i[\"font-style\"])}if(\"arrow-start\"in i&&A(s,i[\"arrow-start\"]),\"arrow-end\"in i&&A(s,i[\"arrow-end\"],1),null!=i.opacity||null!=i[\"stroke-width\"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i[\"stroke-width\"]||null!=i[\"stroke-opacity\"]||null!=i[\"fill-opacity\"]||null!=i[\"stroke-dasharray\"]||null!=i[\"stroke-miterlimit\"]||null!=i[\"stroke-linejoin\"]||null!=i[\"stroke-linecap\"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),\"image\"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||\"none\"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type=\"tile\";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type=\"solid\",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||\"r\"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill=\"none\",m.gradient=i.fill,K.rotate=!1)}if(\"fill-opacity\"in i||\"opacity\"in i){var O=((+m[\"fill-opacity\"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color=\"none\")}l.appendChild(K);var P=l.getElementsByTagName(\"stroke\")&&l.getElementsByTagName(\"stroke\")[0],Q=!1;!P&&(Q=P=F(\"stroke\")),(i.stroke&&\"none\"!=i.stroke||i[\"stroke-width\"]||null!=i[\"stroke-opacity\"]||i[\"stroke-dasharray\"]||i[\"stroke-miterlimit\"]||i[\"stroke-linejoin\"]||i[\"stroke-linecap\"])&&(P.on=!0),(\"none\"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i[\"stroke-width\"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m[\"stroke-opacity\"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i[\"stroke-width\"])||1);if(O=h(g(O,0),1),null==i[\"stroke-width\"]&&(S=m[\"stroke-width\"]),i[\"stroke-width\"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i[\"stroke-linejoin\"]&&(P.joinstyle=i[\"stroke-linejoin\"]||\"miter\"),P.miterlimit=i[\"stroke-miterlimit\"]||8,i[\"stroke-linecap\"]&&(P.endcap=\"butt\"==i[\"stroke-linecap\"]?\"flat\":\"square\"==i[\"stroke-linecap\"]?\"square\":\"round\"),\"stroke-dasharray\"in i){var T={\"-\":\"shortdash\",\".\":\"shortdot\",\"-.\":\"shortdashdot\",\"-..\":\"shortdashdotdot\",\". \":\"dot\",\"- \":\"dash\",\"--\":\"longdash\",\"- .\":\"dashdot\",\"--.\":\"longdashdot\",\"--..\":\"longdashdotdot\"};P.dashstyle=T[a](i[\"stroke-dasharray\"])?T[i[\"stroke-dasharray\"]]:o}Q&&l.appendChild(P)}if(\"text\"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\\d+(?:\\.\\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m[\"font-family\"]&&(p.fontFamily=m[\"font-family\"]),m[\"font-weight\"]&&(p.fontWeight=m[\"font-weight\"]),m[\"font-style\"]&&(p.fontStyle=m[\"font-style\"]),W=d(m[\"font-size\"]||W&&W[0])||10,p.fontSize=W*V+\"px\",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/</g,\"&#60;\").replace(/&/g,\"&#38;\").replace(/\\n/g,\"<br>\"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,(\"x\"in i||\"y\"in i)&&(s.path.v=c.format(\"m{0},{1}l{2},{1}\",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=[\"x\",\"y\",\"text\",\"font\",\"font-family\",\"font-weight\",\"font-style\",\"font-size\"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m[\"text-anchor\"]){case\"start\":s.textpath.style[\"v-text-align\"]=\"left\",s.bbx=s.W/2;break;case\"end\":s.textpath.style[\"v-text-align\"]=\"right\",s.bbx=-s.W/2;break;default:s.textpath.style[\"v-text-align\"]=\"center\",s.bbx=0}s.textpath.style[\"v-text-kern\"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i=\"linear\",j=\".5 .5\";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i=\"radial\",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\\s*\\-\\s*/),\"linear\"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method=\"none\",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():\"0% \"+g.color,\"radial\"==i?(g.type=\"gradientTitle\",g.focus=\"100%\",g.focussize=\"0 0\",g.focusposition=j,g.angle=0):(g.type=\"gradient\",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?\"s\"+[e.scale,e.scale]+\"-1-1t\"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\\.{3}|\\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf(\"-\"),l=!b(this.attrs.fill).indexOf(\"url(\");if(h.translate(1,1),l||k||\"image\"==this.type)if(i.matrix=\"1 0 0 1\",i.offset=\"0 0\",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return null!==d&&(this._.transform=d,c._extractTransform(this,d)),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([[\"r\",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([[\"t\",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([[\"s\",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display=\"none\"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E.auxGetBBox=c.el.getBBox,E.getBBox=function(){var a=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var b={},c=1/this.paper._viewBoxShift.scale;return b.x=a.x-this.paper._viewBoxShift.dx,b.x*=c,b.y=a.y-this.paper._viewBoxShift.dy,b.y*=c,b.width=a.width*c,b.height=a.height*c,b.x2=b.x+b.width,b.y2=b.y+b.height,b}return a},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind(\"raphael.*.*.\"+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]=\"function\"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&\"none\"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,\"string\")){if(b==j&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],\"function\")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,\"array\")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,\"object\")&&(n=b);for(var o in n)l(\"raphael.attr.\"+o+\".\"+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],\"function\")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&\"text\"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+\".Blur(pixelradius=\"+(+a||1.5)+\")\",b.margin=c.format(\"-{0}px 0 0 -{0}px\",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F(\"shape\");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:\"none\",stroke:\"#000\"};a&&(e.path=a),d.type=\"path\",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F(\"skew\");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type=\"rect\",i},c._engine.ellipse=function(a,b,c,d,e){{var f=a.path();f.attrs}return f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type=\"ellipse\",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){{var e=a.path();e.attrs}return e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type=\"circle\",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:\"none\"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type=\"image\",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type=\"tile\",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F(\"shape\"),i=F(\"path\"),j=F(\"textpath\");d=d||0,e=e||0,g=g||\"\",i.v=c.format(\"m{0},{1}l{2},{1}\",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin=\"0 0\";var k=new D(h,a),l={fill:\"#000\",stroke:\"none\",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type=\"text\",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F(\"skew\");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+=\"px\"),b==+b&&(b+=\"px\"),d.width=a,d.height=b,d.clip=\"rect(0 \"+a+\" \"+b+\" 0)\",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve(\"raphael.setViewBox\",this,this._viewBox,[a,b,d,e,f]);var g,h,i=this.getSize(),j=i.width,k=i.height;return f&&(g=k/e,h=j/d,j>d*g&&(a-=(j-d*g)/2/g),k>e*h&&(b-=(k-e*h)/2/h)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:i},this.forEach(function(a){a.transform(\"...\")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.styleSheets.length<31?b.createStyleSheet().addRule(\".rvml\",\"behavior:url(#default#VML)\"):b.styleSheets[0].addRule(\".rvml\",\"behavior:url(#default#VML)\");try{!b.namespaces.rvml&&b.namespaces.add(\"rvml\",\"urn:schemas-microsoft-com:vml\"),F=function(a){return b.createElement(\"<rvml:\"+a+' class=\"rvml\">')}}catch(c){F=function(a){return b.createElement(\"<\"+a+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error(\"VML container not found.\");var h=new c._Paper,i=h.canvas=c._g.doc.createElement(\"div\"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+=\"px\"),d==+d&&(d+=\"px\"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin=\"0 0\",h.span=c._g.doc.createElement(\"span\"),h.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\",i.appendChild(h.span),j.cssText=c.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+\"px\",j.top=g+\"px\",j.position=\"absolute\"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve(\"raphael.clear\",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement(\"span\"),this.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve(\"raphael.remove\",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=\"function\"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,\"object\"==typeof exports&&(module.exports=c),c});"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/requirejs/require.js",
    "content": "/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 2.1.20 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n//Not using strict: uneven strict support in browsers, #392, and causes\n//problems with requirejs.exec()/transpiler plugins that may not be strict.\n/*jslint regexp: true, nomen: true, sloppy: true */\n/*global window, navigator, document, importScripts, setTimeout, opera */\n\nvar requirejs, require, define;\n(function (global) {\n    var req, s, head, baseElement, dataMain, src,\n        interactiveScript, currentlyAddingScript, mainScript, subPath,\n        version = '2.1.20',\n        commentRegExp = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,\n        cjsRequireRegExp = /[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n        jsSuffixRegExp = /\\.js$/,\n        currDirRegExp = /^\\.\\//,\n        op = Object.prototype,\n        ostring = op.toString,\n        hasOwn = op.hasOwnProperty,\n        ap = Array.prototype,\n        isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),\n        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',\n        //PS3 indicates loaded and complete, but need to wait for complete\n        //specifically. Sequence is 'loading', 'loaded', execution,\n        // then 'complete'. The UA check is unfortunate, but not sure how\n        //to feature test w/o causing perf issues.\n        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?\n                      /^complete$/ : /^(complete|loaded)$/,\n        defContextName = '_',\n        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',\n        contexts = {},\n        cfg = {},\n        globalDefQueue = [],\n        useInteractive = false;\n\n    function isFunction(it) {\n        return ostring.call(it) === '[object Function]';\n    }\n\n    function isArray(it) {\n        return ostring.call(it) === '[object Array]';\n    }\n\n    /**\n     * Helper function for iterating over an array. If the func returns\n     * a true value, it will break out of the loop.\n     */\n    function each(ary, func) {\n        if (ary) {\n            var i;\n            for (i = 0; i < ary.length; i += 1) {\n                if (ary[i] && func(ary[i], i, ary)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Helper function for iterating over an array backwards. If the func\n     * returns a true value, it will break out of the loop.\n     */\n    function eachReverse(ary, func) {\n        if (ary) {\n            var i;\n            for (i = ary.length - 1; i > -1; i -= 1) {\n                if (ary[i] && func(ary[i], i, ary)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    function getOwn(obj, prop) {\n        return hasProp(obj, prop) && obj[prop];\n    }\n\n    /**\n     * Cycles over properties in an object and calls a function for each\n     * property value. If the function returns a truthy value, then the\n     * iteration is stopped.\n     */\n    function eachProp(obj, func) {\n        var prop;\n        for (prop in obj) {\n            if (hasProp(obj, prop)) {\n                if (func(obj[prop], prop)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Simple function to mix in properties from source into target,\n     * but only if target does not already have a property of the same name.\n     */\n    function mixin(target, source, force, deepStringMixin) {\n        if (source) {\n            eachProp(source, function (value, prop) {\n                if (force || !hasProp(target, prop)) {\n                    if (deepStringMixin && typeof value === 'object' && value &&\n                        !isArray(value) && !isFunction(value) &&\n                        !(value instanceof RegExp)) {\n\n                        if (!target[prop]) {\n                            target[prop] = {};\n                        }\n                        mixin(target[prop], value, force, deepStringMixin);\n                    } else {\n                        target[prop] = value;\n                    }\n                }\n            });\n        }\n        return target;\n    }\n\n    //Similar to Function.prototype.bind, but the 'this' object is specified\n    //first, since it is easier to read/figure out what 'this' will be.\n    function bind(obj, fn) {\n        return function () {\n            return fn.apply(obj, arguments);\n        };\n    }\n\n    function scripts() {\n        return document.getElementsByTagName('script');\n    }\n\n    function defaultOnError(err) {\n        throw err;\n    }\n\n    //Allow getting a global that is expressed in\n    //dot notation, like 'a.b.c'.\n    function getGlobal(value) {\n        if (!value) {\n            return value;\n        }\n        var g = global;\n        each(value.split('.'), function (part) {\n            g = g[part];\n        });\n        return g;\n    }\n\n    /**\n     * Constructs an error with a pointer to an URL with more information.\n     * @param {String} id the error ID that maps to an ID on a web page.\n     * @param {String} message human readable error.\n     * @param {Error} [err] the original error, if there is one.\n     *\n     * @returns {Error}\n     */\n    function makeError(id, msg, err, requireModules) {\n        var e = new Error(msg + '\\nhttp://requirejs.org/docs/errors.html#' + id);\n        e.requireType = id;\n        e.requireModules = requireModules;\n        if (err) {\n            e.originalError = err;\n        }\n        return e;\n    }\n\n    if (typeof define !== 'undefined') {\n        //If a define is already in play via another AMD loader,\n        //do not overwrite.\n        return;\n    }\n\n    if (typeof requirejs !== 'undefined') {\n        if (isFunction(requirejs)) {\n            //Do not overwrite an existing requirejs instance.\n            return;\n        }\n        cfg = requirejs;\n        requirejs = undefined;\n    }\n\n    //Allow for a require config object\n    if (typeof require !== 'undefined' && !isFunction(require)) {\n        //assume it is a config object.\n        cfg = require;\n        require = undefined;\n    }\n\n    function newContext(contextName) {\n        var inCheckLoaded, Module, context, handlers,\n            checkLoadedTimeoutId,\n            config = {\n                //Defaults. Do not set a default for map\n                //config to speed up normalize(), which\n                //will run faster if there is no default.\n                waitSeconds: 7,\n                baseUrl: './',\n                paths: {},\n                bundles: {},\n                pkgs: {},\n                shim: {},\n                config: {}\n            },\n            registry = {},\n            //registry of just enabled modules, to speed\n            //cycle breaking code when lots of modules\n            //are registered, but not activated.\n            enabledRegistry = {},\n            undefEvents = {},\n            defQueue = [],\n            defined = {},\n            urlFetched = {},\n            bundlesMap = {},\n            requireCounter = 1,\n            unnormalizedCounter = 1;\n\n        /**\n         * Trims the . and .. from an array of path segments.\n         * It will keep a leading path segment if a .. will become\n         * the first path segment, to help with module name lookups,\n         * which act like paths, but can be remapped. But the end result,\n         * all paths that use this function should look normalized.\n         * NOTE: this method MODIFIES the input array.\n         * @param {Array} ary the array of path segments.\n         */\n        function trimDots(ary) {\n            var i, part;\n            for (i = 0; i < ary.length; i++) {\n                part = ary[i];\n                if (part === '.') {\n                    ary.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        ary.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n        }\n\n        /**\n         * Given a relative module name, like ./something, normalize it to\n         * a real name that can be mapped to a path.\n         * @param {String} name the relative name\n         * @param {String} baseName a real name that the name arg is relative\n         * to.\n         * @param {Boolean} applyMap apply the map config to the value. Should\n         * only be done if this normalization is for a dependency ID.\n         * @returns {String} normalized name\n         */\n        function normalize(name, baseName, applyMap) {\n            var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex,\n                foundMap, foundI, foundStarMap, starI, normalizedBaseParts,\n                baseParts = (baseName && baseName.split('/')),\n                map = config.map,\n                starMap = map && map['*'];\n\n            //Adjust any relative paths.\n            if (name) {\n                name = name.split('/');\n                lastIndex = name.length - 1;\n\n                // If wanting node ID compatibility, strip .js from end\n                // of IDs. Have to do this here, and not in nameToUrl\n                // because node allows either .js or non .js to map\n                // to same file.\n                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                }\n\n                // Starts with a '.' so need the baseName\n                if (name[0].charAt(0) === '.' && baseParts) {\n                    //Convert baseName to array, and lop off the last part,\n                    //so that . matches that 'directory' and not name of the baseName's\n                    //module. For instance, baseName of 'one/two/three', maps to\n                    //'one/two/three.js', but we want the directory, 'one/two' for\n                    //this normalization.\n                    normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                    name = normalizedBaseParts.concat(name);\n                }\n\n                trimDots(name);\n                name = name.join('/');\n            }\n\n            //Apply map config if available.\n            if (applyMap && map && (baseParts || starMap)) {\n                nameParts = name.split('/');\n\n                outerLoop: for (i = nameParts.length; i > 0; i -= 1) {\n                    nameSegment = nameParts.slice(0, i).join('/');\n\n                    if (baseParts) {\n                        //Find the longest baseName segment match in the config.\n                        //So, do joins on the biggest to smallest lengths of baseParts.\n                        for (j = baseParts.length; j > 0; j -= 1) {\n                            mapValue = getOwn(map, baseParts.slice(0, j).join('/'));\n\n                            //baseName segment has config, find if it has one for\n                            //this name.\n                            if (mapValue) {\n                                mapValue = getOwn(mapValue, nameSegment);\n                                if (mapValue) {\n                                    //Match, update name to the new value.\n                                    foundMap = mapValue;\n                                    foundI = i;\n                                    break outerLoop;\n                                }\n                            }\n                        }\n                    }\n\n                    //Check for a star map match, but just hold on to it,\n                    //if there is a shorter segment match later in a matching\n                    //config, then favor over this star map.\n                    if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {\n                        foundStarMap = getOwn(starMap, nameSegment);\n                        starI = i;\n                    }\n                }\n\n                if (!foundMap && foundStarMap) {\n                    foundMap = foundStarMap;\n                    foundI = starI;\n                }\n\n                if (foundMap) {\n                    nameParts.splice(0, foundI, foundMap);\n                    name = nameParts.join('/');\n                }\n            }\n\n            // If the name points to a package's name, use\n            // the package main instead.\n            pkgMain = getOwn(config.pkgs, name);\n\n            return pkgMain ? pkgMain : name;\n        }\n\n        function removeScript(name) {\n            if (isBrowser) {\n                each(scripts(), function (scriptNode) {\n                    if (scriptNode.getAttribute('data-requiremodule') === name &&\n                            scriptNode.getAttribute('data-requirecontext') === context.contextName) {\n                        scriptNode.parentNode.removeChild(scriptNode);\n                        return true;\n                    }\n                });\n            }\n        }\n\n        function hasPathFallback(id) {\n            var pathConfig = getOwn(config.paths, id);\n            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {\n                //Pop off the first array value, since it failed, and\n                //retry\n                pathConfig.shift();\n                context.require.undef(id);\n\n                //Custom require that does not do map translation, since\n                //ID is \"absolute\", already mapped/resolved.\n                context.makeRequire(null, {\n                    skipMap: true\n                })([id]);\n\n                return true;\n            }\n        }\n\n        //Turns a plugin!resource to [plugin, resource]\n        //with the plugin being undefined if the name\n        //did not have a plugin prefix.\n        function splitPrefix(name) {\n            var prefix,\n                index = name ? name.indexOf('!') : -1;\n            if (index > -1) {\n                prefix = name.substring(0, index);\n                name = name.substring(index + 1, name.length);\n            }\n            return [prefix, name];\n        }\n\n        /**\n         * Creates a module mapping that includes plugin prefix, module\n         * name, and path. If parentModuleMap is provided it will\n         * also normalize the name via require.normalize()\n         *\n         * @param {String} name the module name\n         * @param {String} [parentModuleMap] parent module map\n         * for the module name, used to resolve relative names.\n         * @param {Boolean} isNormalized: is the ID already normalized.\n         * This is true if this call is done for a define() module ID.\n         * @param {Boolean} applyMap: apply the map config to the ID.\n         * Should only be true if this map is for a dependency.\n         *\n         * @returns {Object}\n         */\n        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {\n            var url, pluginModule, suffix, nameParts,\n                prefix = null,\n                parentName = parentModuleMap ? parentModuleMap.name : null,\n                originalName = name,\n                isDefine = true,\n                normalizedName = '';\n\n            //If no name, then it means it is a require call, generate an\n            //internal name.\n            if (!name) {\n                isDefine = false;\n                name = '_@r' + (requireCounter += 1);\n            }\n\n            nameParts = splitPrefix(name);\n            prefix = nameParts[0];\n            name = nameParts[1];\n\n            if (prefix) {\n                prefix = normalize(prefix, parentName, applyMap);\n                pluginModule = getOwn(defined, prefix);\n            }\n\n            //Account for relative paths if there is a base name.\n            if (name) {\n                if (prefix) {\n                    if (pluginModule && pluginModule.normalize) {\n                        //Plugin is loaded, use its normalize method.\n                        normalizedName = pluginModule.normalize(name, function (name) {\n                            return normalize(name, parentName, applyMap);\n                        });\n                    } else {\n                        // If nested plugin references, then do not try to\n                        // normalize, as it will not normalize correctly. This\n                        // places a restriction on resourceIds, and the longer\n                        // term solution is not to normalize until plugins are\n                        // loaded and all normalizations to allow for async\n                        // loading of a loader plugin. But for now, fixes the\n                        // common uses. Details in #1131\n                        normalizedName = name.indexOf('!') === -1 ?\n                                         normalize(name, parentName, applyMap) :\n                                         name;\n                    }\n                } else {\n                    //A regular module.\n                    normalizedName = normalize(name, parentName, applyMap);\n\n                    //Normalized name may be a plugin ID due to map config\n                    //application in normalize. The map config values must\n                    //already be normalized, so do not need to redo that part.\n                    nameParts = splitPrefix(normalizedName);\n                    prefix = nameParts[0];\n                    normalizedName = nameParts[1];\n                    isNormalized = true;\n\n                    url = context.nameToUrl(normalizedName);\n                }\n            }\n\n            //If the id is a plugin id that cannot be determined if it needs\n            //normalization, stamp it with a unique ID so two matching relative\n            //ids that may conflict can be separate.\n            suffix = prefix && !pluginModule && !isNormalized ?\n                     '_unnormalized' + (unnormalizedCounter += 1) :\n                     '';\n\n            return {\n                prefix: prefix,\n                name: normalizedName,\n                parentMap: parentModuleMap,\n                unnormalized: !!suffix,\n                url: url,\n                originalName: originalName,\n                isDefine: isDefine,\n                id: (prefix ?\n                        prefix + '!' + normalizedName :\n                        normalizedName) + suffix\n            };\n        }\n\n        function getModule(depMap) {\n            var id = depMap.id,\n                mod = getOwn(registry, id);\n\n            if (!mod) {\n                mod = registry[id] = new context.Module(depMap);\n            }\n\n            return mod;\n        }\n\n        function on(depMap, name, fn) {\n            var id = depMap.id,\n                mod = getOwn(registry, id);\n\n            if (hasProp(defined, id) &&\n                    (!mod || mod.defineEmitComplete)) {\n                if (name === 'defined') {\n                    fn(defined[id]);\n                }\n            } else {\n                mod = getModule(depMap);\n                if (mod.error && name === 'error') {\n                    fn(mod.error);\n                } else {\n                    mod.on(name, fn);\n                }\n            }\n        }\n\n        function onError(err, errback) {\n            var ids = err.requireModules,\n                notified = false;\n\n            if (errback) {\n                errback(err);\n            } else {\n                each(ids, function (id) {\n                    var mod = getOwn(registry, id);\n                    if (mod) {\n                        //Set error on module, so it skips timeout checks.\n                        mod.error = err;\n                        if (mod.events.error) {\n                            notified = true;\n                            mod.emit('error', err);\n                        }\n                    }\n                });\n\n                if (!notified) {\n                    req.onError(err);\n                }\n            }\n        }\n\n        /**\n         * Internal method to transfer globalQueue items to this context's\n         * defQueue.\n         */\n        function takeGlobalQueue() {\n            //Push all the globalDefQueue items into the context's defQueue\n            if (globalDefQueue.length) {\n                each(globalDefQueue, function(queueItem) {\n                    var id = queueItem[0];\n                    if (typeof id === 'string') {\n                        context.defQueueMap[id] = true;\n                    }\n                    defQueue.push(queueItem);\n                });\n                globalDefQueue = [];\n            }\n        }\n\n        handlers = {\n            'require': function (mod) {\n                if (mod.require) {\n                    return mod.require;\n                } else {\n                    return (mod.require = context.makeRequire(mod.map));\n                }\n            },\n            'exports': function (mod) {\n                mod.usingExports = true;\n                if (mod.map.isDefine) {\n                    if (mod.exports) {\n                        return (defined[mod.map.id] = mod.exports);\n                    } else {\n                        return (mod.exports = defined[mod.map.id] = {});\n                    }\n                }\n            },\n            'module': function (mod) {\n                if (mod.module) {\n                    return mod.module;\n                } else {\n                    return (mod.module = {\n                        id: mod.map.id,\n                        uri: mod.map.url,\n                        config: function () {\n                            return getOwn(config.config, mod.map.id) || {};\n                        },\n                        exports: mod.exports || (mod.exports = {})\n                    });\n                }\n            }\n        };\n\n        function cleanRegistry(id) {\n            //Clean up machinery used for waiting modules.\n            delete registry[id];\n            delete enabledRegistry[id];\n        }\n\n        function breakCycle(mod, traced, processed) {\n            var id = mod.map.id;\n\n            if (mod.error) {\n                mod.emit('error', mod.error);\n            } else {\n                traced[id] = true;\n                each(mod.depMaps, function (depMap, i) {\n                    var depId = depMap.id,\n                        dep = getOwn(registry, depId);\n\n                    //Only force things that have not completed\n                    //being defined, so still in the registry,\n                    //and only if it has not been matched up\n                    //in the module already.\n                    if (dep && !mod.depMatched[i] && !processed[depId]) {\n                        if (getOwn(traced, depId)) {\n                            mod.defineDep(i, defined[depId]);\n                            mod.check(); //pass false?\n                        } else {\n                            breakCycle(dep, traced, processed);\n                        }\n                    }\n                });\n                processed[id] = true;\n            }\n        }\n\n        function checkLoaded() {\n            var err, usingPathFallback,\n                waitInterval = config.waitSeconds * 1000,\n                //It is possible to disable the wait interval by using waitSeconds of 0.\n                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),\n                noLoads = [],\n                reqCalls = [],\n                stillLoading = false,\n                needCycleCheck = true;\n\n            //Do not bother if this call was a result of a cycle break.\n            if (inCheckLoaded) {\n                return;\n            }\n\n            inCheckLoaded = true;\n\n            //Figure out the state of all the modules.\n            eachProp(enabledRegistry, function (mod) {\n                var map = mod.map,\n                    modId = map.id;\n\n                //Skip things that are not enabled or in error state.\n                if (!mod.enabled) {\n                    return;\n                }\n\n                if (!map.isDefine) {\n                    reqCalls.push(mod);\n                }\n\n                if (!mod.error) {\n                    //If the module should be executed, and it has not\n                    //been inited and time is up, remember it.\n                    if (!mod.inited && expired) {\n                        if (hasPathFallback(modId)) {\n                            usingPathFallback = true;\n                            stillLoading = true;\n                        } else {\n                            noLoads.push(modId);\n                            removeScript(modId);\n                        }\n                    } else if (!mod.inited && mod.fetched && map.isDefine) {\n                        stillLoading = true;\n                        if (!map.prefix) {\n                            //No reason to keep looking for unfinished\n                            //loading. If the only stillLoading is a\n                            //plugin resource though, keep going,\n                            //because it may be that a plugin resource\n                            //is waiting on a non-plugin cycle.\n                            return (needCycleCheck = false);\n                        }\n                    }\n                }\n            });\n\n            if (expired && noLoads.length) {\n                //If wait time expired, throw error of unloaded modules.\n                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);\n                err.contextName = context.contextName;\n                return onError(err);\n            }\n\n            //Not expired, check for a cycle.\n            if (needCycleCheck) {\n                each(reqCalls, function (mod) {\n                    breakCycle(mod, {}, {});\n                });\n            }\n\n            //If still waiting on loads, and the waiting load is something\n            //other than a plugin resource, or there are still outstanding\n            //scripts, then just try back later.\n            if ((!expired || usingPathFallback) && stillLoading) {\n                //Something is still waiting to load. Wait for it, but only\n                //if a timeout is not already in effect.\n                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n                    checkLoadedTimeoutId = setTimeout(function () {\n                        checkLoadedTimeoutId = 0;\n                        checkLoaded();\n                    }, 50);\n                }\n            }\n\n            inCheckLoaded = false;\n        }\n\n        Module = function (map) {\n            this.events = getOwn(undefEvents, map.id) || {};\n            this.map = map;\n            this.shim = getOwn(config.shim, map.id);\n            this.depExports = [];\n            this.depMaps = [];\n            this.depMatched = [];\n            this.pluginMaps = {};\n            this.depCount = 0;\n\n            /* this.exports this.factory\n               this.depMaps = [],\n               this.enabled, this.fetched\n            */\n        };\n\n        Module.prototype = {\n            init: function (depMaps, factory, errback, options) {\n                options = options || {};\n\n                //Do not do more inits if already done. Can happen if there\n                //are multiple define calls for the same module. That is not\n                //a normal, common case, but it is also not unexpected.\n                if (this.inited) {\n                    return;\n                }\n\n                this.factory = factory;\n\n                if (errback) {\n                    //Register for errors on this module.\n                    this.on('error', errback);\n                } else if (this.events.error) {\n                    //If no errback already, but there are error listeners\n                    //on this module, set up an errback to pass to the deps.\n                    errback = bind(this, function (err) {\n                        this.emit('error', err);\n                    });\n                }\n\n                //Do a copy of the dependency array, so that\n                //source inputs are not modified. For example\n                //\"shim\" deps are passed in here directly, and\n                //doing a direct modification of the depMaps array\n                //would affect that config.\n                this.depMaps = depMaps && depMaps.slice(0);\n\n                this.errback = errback;\n\n                //Indicate this module has be initialized\n                this.inited = true;\n\n                this.ignore = options.ignore;\n\n                //Could have option to init this module in enabled mode,\n                //or could have been previously marked as enabled. However,\n                //the dependencies are not known until init is called. So\n                //if enabled previously, now trigger dependencies as enabled.\n                if (options.enabled || this.enabled) {\n                    //Enable this module and dependencies.\n                    //Will call this.check()\n                    this.enable();\n                } else {\n                    this.check();\n                }\n            },\n\n            defineDep: function (i, depExports) {\n                //Because of cycles, defined callback for a given\n                //export can be called more than once.\n                if (!this.depMatched[i]) {\n                    this.depMatched[i] = true;\n                    this.depCount -= 1;\n                    this.depExports[i] = depExports;\n                }\n            },\n\n            fetch: function () {\n                if (this.fetched) {\n                    return;\n                }\n                this.fetched = true;\n\n                context.startTime = (new Date()).getTime();\n\n                var map = this.map;\n\n                //If the manager is for a plugin managed resource,\n                //ask the plugin to load it now.\n                if (this.shim) {\n                    context.makeRequire(this.map, {\n                        enableBuildCallback: true\n                    })(this.shim.deps || [], bind(this, function () {\n                        return map.prefix ? this.callPlugin() : this.load();\n                    }));\n                } else {\n                    //Regular dependency.\n                    return map.prefix ? this.callPlugin() : this.load();\n                }\n            },\n\n            load: function () {\n                var url = this.map.url;\n\n                //Regular dependency.\n                if (!urlFetched[url]) {\n                    urlFetched[url] = true;\n                    context.load(this.map.id, url);\n                }\n            },\n\n            /**\n             * Checks if the module is ready to define itself, and if so,\n             * define it.\n             */\n            check: function () {\n                if (!this.enabled || this.enabling) {\n                    return;\n                }\n\n                var err, cjsModule,\n                    id = this.map.id,\n                    depExports = this.depExports,\n                    exports = this.exports,\n                    factory = this.factory;\n\n                if (!this.inited) {\n                    // Only fetch if not already in the defQueue.\n                    if (!hasProp(context.defQueueMap, id)) {\n                        this.fetch();\n                    }\n                } else if (this.error) {\n                    this.emit('error', this.error);\n                } else if (!this.defining) {\n                    //The factory could trigger another require call\n                    //that would result in checking this module to\n                    //define itself again. If already in the process\n                    //of doing that, skip this work.\n                    this.defining = true;\n\n                    if (this.depCount < 1 && !this.defined) {\n                        if (isFunction(factory)) {\n                            //If there is an error listener, favor passing\n                            //to that instead of throwing an error. However,\n                            //only do it for define()'d  modules. require\n                            //errbacks should not be called for failures in\n                            //their callbacks (#699). However if a global\n                            //onError is set, use that.\n                            if ((this.events.error && this.map.isDefine) ||\n                                req.onError !== defaultOnError) {\n                                try {\n                                    exports = context.execCb(id, factory, depExports, exports);\n                                } catch (e) {\n                                    err = e;\n                                }\n                            } else {\n                                exports = context.execCb(id, factory, depExports, exports);\n                            }\n\n                            // Favor return value over exports. If node/cjs in play,\n                            // then will not have a return value anyway. Favor\n                            // module.exports assignment over exports object.\n                            if (this.map.isDefine && exports === undefined) {\n                                cjsModule = this.module;\n                                if (cjsModule) {\n                                    exports = cjsModule.exports;\n                                } else if (this.usingExports) {\n                                    //exports already set the defined value.\n                                    exports = this.exports;\n                                }\n                            }\n\n                            if (err) {\n                                err.requireMap = this.map;\n                                err.requireModules = this.map.isDefine ? [this.map.id] : null;\n                                err.requireType = this.map.isDefine ? 'define' : 'require';\n                                return onError((this.error = err));\n                            }\n\n                        } else {\n                            //Just a literal value\n                            exports = factory;\n                        }\n\n                        this.exports = exports;\n\n                        if (this.map.isDefine && !this.ignore) {\n                            defined[id] = exports;\n\n                            if (req.onResourceLoad) {\n                                req.onResourceLoad(context, this.map, this.depMaps);\n                            }\n                        }\n\n                        //Clean up\n                        cleanRegistry(id);\n\n                        this.defined = true;\n                    }\n\n                    //Finished the define stage. Allow calling check again\n                    //to allow define notifications below in the case of a\n                    //cycle.\n                    this.defining = false;\n\n                    if (this.defined && !this.defineEmitted) {\n                        this.defineEmitted = true;\n                        this.emit('defined', this.exports);\n                        this.defineEmitComplete = true;\n                    }\n\n                }\n            },\n\n            callPlugin: function () {\n                var map = this.map,\n                    id = map.id,\n                    //Map already normalized the prefix.\n                    pluginMap = makeModuleMap(map.prefix);\n\n                //Mark this as a dependency for this plugin, so it\n                //can be traced for cycles.\n                this.depMaps.push(pluginMap);\n\n                on(pluginMap, 'defined', bind(this, function (plugin) {\n                    var load, normalizedMap, normalizedMod,\n                        bundleId = getOwn(bundlesMap, this.map.id),\n                        name = this.map.name,\n                        parentName = this.map.parentMap ? this.map.parentMap.name : null,\n                        localRequire = context.makeRequire(map.parentMap, {\n                            enableBuildCallback: true\n                        });\n\n                    //If current map is not normalized, wait for that\n                    //normalized name to load instead of continuing.\n                    if (this.map.unnormalized) {\n                        //Normalize the ID if the plugin allows it.\n                        if (plugin.normalize) {\n                            name = plugin.normalize(name, function (name) {\n                                return normalize(name, parentName, true);\n                            }) || '';\n                        }\n\n                        //prefix and name should already be normalized, no need\n                        //for applying map config again either.\n                        normalizedMap = makeModuleMap(map.prefix + '!' + name,\n                                                      this.map.parentMap);\n                        on(normalizedMap,\n                            'defined', bind(this, function (value) {\n                                this.init([], function () { return value; }, null, {\n                                    enabled: true,\n                                    ignore: true\n                                });\n                            }));\n\n                        normalizedMod = getOwn(registry, normalizedMap.id);\n                        if (normalizedMod) {\n                            //Mark this as a dependency for this plugin, so it\n                            //can be traced for cycles.\n                            this.depMaps.push(normalizedMap);\n\n                            if (this.events.error) {\n                                normalizedMod.on('error', bind(this, function (err) {\n                                    this.emit('error', err);\n                                }));\n                            }\n                            normalizedMod.enable();\n                        }\n\n                        return;\n                    }\n\n                    //If a paths config, then just load that file instead to\n                    //resolve the plugin, as it is built into that paths layer.\n                    if (bundleId) {\n                        this.map.url = context.nameToUrl(bundleId);\n                        this.load();\n                        return;\n                    }\n\n                    load = bind(this, function (value) {\n                        this.init([], function () { return value; }, null, {\n                            enabled: true\n                        });\n                    });\n\n                    load.error = bind(this, function (err) {\n                        this.inited = true;\n                        this.error = err;\n                        err.requireModules = [id];\n\n                        //Remove temp unnormalized modules for this module,\n                        //since they will never be resolved otherwise now.\n                        eachProp(registry, function (mod) {\n                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {\n                                cleanRegistry(mod.map.id);\n                            }\n                        });\n\n                        onError(err);\n                    });\n\n                    //Allow plugins to load other code without having to know the\n                    //context or how to 'complete' the load.\n                    load.fromText = bind(this, function (text, textAlt) {\n                        /*jslint evil: true */\n                        var moduleName = map.name,\n                            moduleMap = makeModuleMap(moduleName),\n                            hasInteractive = useInteractive;\n\n                        //As of 2.1.0, support just passing the text, to reinforce\n                        //fromText only being called once per resource. Still\n                        //support old style of passing moduleName but discard\n                        //that moduleName in favor of the internal ref.\n                        if (textAlt) {\n                            text = textAlt;\n                        }\n\n                        //Turn off interactive script matching for IE for any define\n                        //calls in the text, then turn it back on at the end.\n                        if (hasInteractive) {\n                            useInteractive = false;\n                        }\n\n                        //Prime the system by creating a module instance for\n                        //it.\n                        getModule(moduleMap);\n\n                        //Transfer any config to this other module.\n                        if (hasProp(config.config, id)) {\n                            config.config[moduleName] = config.config[id];\n                        }\n\n                        try {\n                            req.exec(text);\n                        } catch (e) {\n                            return onError(makeError('fromtexteval',\n                                             'fromText eval for ' + id +\n                                            ' failed: ' + e,\n                                             e,\n                                             [id]));\n                        }\n\n                        if (hasInteractive) {\n                            useInteractive = true;\n                        }\n\n                        //Mark this as a dependency for the plugin\n                        //resource\n                        this.depMaps.push(moduleMap);\n\n                        //Support anonymous modules.\n                        context.completeLoad(moduleName);\n\n                        //Bind the value of that module to the value for this\n                        //resource ID.\n                        localRequire([moduleName], load);\n                    });\n\n                    //Use parentName here since the plugin's name is not reliable,\n                    //could be some weird string with no path that actually wants to\n                    //reference the parentName's path.\n                    plugin.load(map.name, localRequire, load, config);\n                }));\n\n                context.enable(pluginMap, this);\n                this.pluginMaps[pluginMap.id] = pluginMap;\n            },\n\n            enable: function () {\n                enabledRegistry[this.map.id] = this;\n                this.enabled = true;\n\n                //Set flag mentioning that the module is enabling,\n                //so that immediate calls to the defined callbacks\n                //for dependencies do not trigger inadvertent load\n                //with the depCount still being zero.\n                this.enabling = true;\n\n                //Enable each dependency\n                each(this.depMaps, bind(this, function (depMap, i) {\n                    var id, mod, handler;\n\n                    if (typeof depMap === 'string') {\n                        //Dependency needs to be converted to a depMap\n                        //and wired up to this module.\n                        depMap = makeModuleMap(depMap,\n                                               (this.map.isDefine ? this.map : this.map.parentMap),\n                                               false,\n                                               !this.skipMap);\n                        this.depMaps[i] = depMap;\n\n                        handler = getOwn(handlers, depMap.id);\n\n                        if (handler) {\n                            this.depExports[i] = handler(this);\n                            return;\n                        }\n\n                        this.depCount += 1;\n\n                        on(depMap, 'defined', bind(this, function (depExports) {\n                            if (this.undefed) {\n                                return;\n                            }\n                            this.defineDep(i, depExports);\n                            this.check();\n                        }));\n\n                        if (this.errback) {\n                            on(depMap, 'error', bind(this, this.errback));\n                        } else if (this.events.error) {\n                            // No direct errback on this module, but something\n                            // else is listening for errors, so be sure to\n                            // propagate the error correctly.\n                            on(depMap, 'error', bind(this, function(err) {\n                                this.emit('error', err);\n                            }));\n                        }\n                    }\n\n                    id = depMap.id;\n                    mod = registry[id];\n\n                    //Skip special modules like 'require', 'exports', 'module'\n                    //Also, don't call enable if it is already enabled,\n                    //important in circular dependency cases.\n                    if (!hasProp(handlers, id) && mod && !mod.enabled) {\n                        context.enable(depMap, this);\n                    }\n                }));\n\n                //Enable each plugin that is used in\n                //a dependency\n                eachProp(this.pluginMaps, bind(this, function (pluginMap) {\n                    var mod = getOwn(registry, pluginMap.id);\n                    if (mod && !mod.enabled) {\n                        context.enable(pluginMap, this);\n                    }\n                }));\n\n                this.enabling = false;\n\n                this.check();\n            },\n\n            on: function (name, cb) {\n                var cbs = this.events[name];\n                if (!cbs) {\n                    cbs = this.events[name] = [];\n                }\n                cbs.push(cb);\n            },\n\n            emit: function (name, evt) {\n                each(this.events[name], function (cb) {\n                    cb(evt);\n                });\n                if (name === 'error') {\n                    //Now that the error handler was triggered, remove\n                    //the listeners, since this broken Module instance\n                    //can stay around for a while in the registry.\n                    delete this.events[name];\n                }\n            }\n        };\n\n        function callGetModule(args) {\n            //Skip modules already defined.\n            if (!hasProp(defined, args[0])) {\n                getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);\n            }\n        }\n\n        function removeListener(node, func, name, ieName) {\n            //Favor detachEvent because of IE9\n            //issue, see attachEvent/addEventListener comment elsewhere\n            //in this file.\n            if (node.detachEvent && !isOpera) {\n                //Probably IE. If not it will throw an error, which will be\n                //useful to know.\n                if (ieName) {\n                    node.detachEvent(ieName, func);\n                }\n            } else {\n                node.removeEventListener(name, func, false);\n            }\n        }\n\n        /**\n         * Given an event from a script node, get the requirejs info from it,\n         * and then removes the event listeners on the node.\n         * @param {Event} evt\n         * @returns {Object}\n         */\n        function getScriptData(evt) {\n            //Using currentTarget instead of target for Firefox 2.0's sake. Not\n            //all old browsers will be supported, but this one was easy enough\n            //to support and still makes sense.\n            var node = evt.currentTarget || evt.srcElement;\n\n            //Remove the listeners once here.\n            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');\n            removeListener(node, context.onScriptError, 'error');\n\n            return {\n                node: node,\n                id: node && node.getAttribute('data-requiremodule')\n            };\n        }\n\n        function intakeDefines() {\n            var args;\n\n            //Any defined modules in the global queue, intake them now.\n            takeGlobalQueue();\n\n            //Make sure any remaining defQueue items get properly processed.\n            while (defQueue.length) {\n                args = defQueue.shift();\n                if (args[0] === null) {\n                    return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' +\n                        args[args.length - 1]));\n                } else {\n                    //args are id, deps, factory. Should be normalized by the\n                    //define() function.\n                    callGetModule(args);\n                }\n            }\n            context.defQueueMap = {};\n        }\n\n        context = {\n            config: config,\n            contextName: contextName,\n            registry: registry,\n            defined: defined,\n            urlFetched: urlFetched,\n            defQueue: defQueue,\n            defQueueMap: {},\n            Module: Module,\n            makeModuleMap: makeModuleMap,\n            nextTick: req.nextTick,\n            onError: onError,\n\n            /**\n             * Set a configuration for the context.\n             * @param {Object} cfg config object to integrate.\n             */\n            configure: function (cfg) {\n                //Make sure the baseUrl ends in a slash.\n                if (cfg.baseUrl) {\n                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {\n                        cfg.baseUrl += '/';\n                    }\n                }\n\n                //Save off the paths since they require special processing,\n                //they are additive.\n                var shim = config.shim,\n                    objs = {\n                        paths: true,\n                        bundles: true,\n                        config: true,\n                        map: true\n                    };\n\n                eachProp(cfg, function (value, prop) {\n                    if (objs[prop]) {\n                        if (!config[prop]) {\n                            config[prop] = {};\n                        }\n                        mixin(config[prop], value, true, true);\n                    } else {\n                        config[prop] = value;\n                    }\n                });\n\n                //Reverse map the bundles\n                if (cfg.bundles) {\n                    eachProp(cfg.bundles, function (value, prop) {\n                        each(value, function (v) {\n                            if (v !== prop) {\n                                bundlesMap[v] = prop;\n                            }\n                        });\n                    });\n                }\n\n                //Merge shim\n                if (cfg.shim) {\n                    eachProp(cfg.shim, function (value, id) {\n                        //Normalize the structure\n                        if (isArray(value)) {\n                            value = {\n                                deps: value\n                            };\n                        }\n                        if ((value.exports || value.init) && !value.exportsFn) {\n                            value.exportsFn = context.makeShimExports(value);\n                        }\n                        shim[id] = value;\n                    });\n                    config.shim = shim;\n                }\n\n                //Adjust packages if necessary.\n                if (cfg.packages) {\n                    each(cfg.packages, function (pkgObj) {\n                        var location, name;\n\n                        pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj;\n\n                        name = pkgObj.name;\n                        location = pkgObj.location;\n                        if (location) {\n                            config.paths[name] = pkgObj.location;\n                        }\n\n                        //Save pointer to main module ID for pkg name.\n                        //Remove leading dot in main, so main paths are normalized,\n                        //and remove any trailing .js, since different package\n                        //envs have different conventions: some use a module name,\n                        //some use a file name.\n                        config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main')\n                                     .replace(currDirRegExp, '')\n                                     .replace(jsSuffixRegExp, '');\n                    });\n                }\n\n                //If there are any \"waiting to execute\" modules in the registry,\n                //update the maps for them, since their info, like URLs to load,\n                //may have changed.\n                eachProp(registry, function (mod, id) {\n                    //If module already has init called, since it is too\n                    //late to modify them, and ignore unnormalized ones\n                    //since they are transient.\n                    if (!mod.inited && !mod.map.unnormalized) {\n                        mod.map = makeModuleMap(id, null, true);\n                    }\n                });\n\n                //If a deps array or a config callback is specified, then call\n                //require with those args. This is useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.deps || cfg.callback) {\n                    context.require(cfg.deps || [], cfg.callback);\n                }\n            },\n\n            makeShimExports: function (value) {\n                function fn() {\n                    var ret;\n                    if (value.init) {\n                        ret = value.init.apply(global, arguments);\n                    }\n                    return ret || (value.exports && getGlobal(value.exports));\n                }\n                return fn;\n            },\n\n            makeRequire: function (relMap, options) {\n                options = options || {};\n\n                function localRequire(deps, callback, errback) {\n                    var id, map, requireMod;\n\n                    if (options.enableBuildCallback && callback && isFunction(callback)) {\n                        callback.__requireJsBuild = true;\n                    }\n\n                    if (typeof deps === 'string') {\n                        if (isFunction(callback)) {\n                            //Invalid call\n                            return onError(makeError('requireargs', 'Invalid require call'), errback);\n                        }\n\n                        //If require|exports|module are requested, get the\n                        //value for them from the special handlers. Caveat:\n                        //this only works while module is being defined.\n                        if (relMap && hasProp(handlers, deps)) {\n                            return handlers[deps](registry[relMap.id]);\n                        }\n\n                        //Synchronous access to one module. If require.get is\n                        //available (as in the Node adapter), prefer that.\n                        if (req.get) {\n                            return req.get(context, deps, relMap, localRequire);\n                        }\n\n                        //Normalize module name, if it contains . or ..\n                        map = makeModuleMap(deps, relMap, false, true);\n                        id = map.id;\n\n                        if (!hasProp(defined, id)) {\n                            return onError(makeError('notloaded', 'Module name \"' +\n                                        id +\n                                        '\" has not been loaded yet for context: ' +\n                                        contextName +\n                                        (relMap ? '' : '. Use require([])')));\n                        }\n                        return defined[id];\n                    }\n\n                    //Grab defines waiting in the global queue.\n                    intakeDefines();\n\n                    //Mark all the dependencies as needing to be loaded.\n                    context.nextTick(function () {\n                        //Some defines could have been added since the\n                        //require call, collect them.\n                        intakeDefines();\n\n                        requireMod = getModule(makeModuleMap(null, relMap));\n\n                        //Store if map config should be applied to this require\n                        //call for dependencies.\n                        requireMod.skipMap = options.skipMap;\n\n                        requireMod.init(deps, callback, errback, {\n                            enabled: true\n                        });\n\n                        checkLoaded();\n                    });\n\n                    return localRequire;\n                }\n\n                mixin(localRequire, {\n                    isBrowser: isBrowser,\n\n                    /**\n                     * Converts a module name + .extension into an URL path.\n                     * *Requires* the use of a module name. It does not support using\n                     * plain URLs like nameToUrl.\n                     */\n                    toUrl: function (moduleNamePlusExt) {\n                        var ext,\n                            index = moduleNamePlusExt.lastIndexOf('.'),\n                            segment = moduleNamePlusExt.split('/')[0],\n                            isRelative = segment === '.' || segment === '..';\n\n                        //Have a file extension alias, and it is not the\n                        //dots from a relative path.\n                        if (index !== -1 && (!isRelative || index > 1)) {\n                            ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n                            moduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n                        }\n\n                        return context.nameToUrl(normalize(moduleNamePlusExt,\n                                                relMap && relMap.id, true), ext,  true);\n                    },\n\n                    defined: function (id) {\n                        return hasProp(defined, makeModuleMap(id, relMap, false, true).id);\n                    },\n\n                    specified: function (id) {\n                        id = makeModuleMap(id, relMap, false, true).id;\n                        return hasProp(defined, id) || hasProp(registry, id);\n                    }\n                });\n\n                //Only allow undef on top level require calls\n                if (!relMap) {\n                    localRequire.undef = function (id) {\n                        //Bind any waiting define() calls to this context,\n                        //fix for #408\n                        takeGlobalQueue();\n\n                        var map = makeModuleMap(id, relMap, true),\n                            mod = getOwn(registry, id);\n\n                        mod.undefed = true;\n                        removeScript(id);\n\n                        delete defined[id];\n                        delete urlFetched[map.url];\n                        delete undefEvents[id];\n\n                        //Clean queued defines too. Go backwards\n                        //in array so that the splices do not\n                        //mess up the iteration.\n                        eachReverse(defQueue, function(args, i) {\n                            if (args[0] === id) {\n                                defQueue.splice(i, 1);\n                            }\n                        });\n                        delete context.defQueueMap[id];\n\n                        if (mod) {\n                            //Hold on to listeners in case the\n                            //module will be attempted to be reloaded\n                            //using a different config.\n                            if (mod.events.defined) {\n                                undefEvents[id] = mod.events;\n                            }\n\n                            cleanRegistry(id);\n                        }\n                    };\n                }\n\n                return localRequire;\n            },\n\n            /**\n             * Called to enable a module if it is still in the registry\n             * awaiting enablement. A second arg, parent, the parent module,\n             * is passed in for context, when this method is overridden by\n             * the optimizer. Not shown here to keep code compact.\n             */\n            enable: function (depMap) {\n                var mod = getOwn(registry, depMap.id);\n                if (mod) {\n                    getModule(depMap).enable();\n                }\n            },\n\n            /**\n             * Internal method used by environment adapters to complete a load event.\n             * A load event could be a script load or just a load pass from a synchronous\n             * load call.\n             * @param {String} moduleName the name of the module to potentially complete.\n             */\n            completeLoad: function (moduleName) {\n                var found, args, mod,\n                    shim = getOwn(config.shim, moduleName) || {},\n                    shExports = shim.exports;\n\n                takeGlobalQueue();\n\n                while (defQueue.length) {\n                    args = defQueue.shift();\n                    if (args[0] === null) {\n                        args[0] = moduleName;\n                        //If already found an anonymous module and bound it\n                        //to this name, then this is some other anon module\n                        //waiting for its completeLoad to fire.\n                        if (found) {\n                            break;\n                        }\n                        found = true;\n                    } else if (args[0] === moduleName) {\n                        //Found matching define call for this script!\n                        found = true;\n                    }\n\n                    callGetModule(args);\n                }\n                context.defQueueMap = {};\n\n                //Do this after the cycle of callGetModule in case the result\n                //of those calls/init calls changes the registry.\n                mod = getOwn(registry, moduleName);\n\n                if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {\n                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {\n                        if (hasPathFallback(moduleName)) {\n                            return;\n                        } else {\n                            return onError(makeError('nodefine',\n                                             'No define call for ' + moduleName,\n                                             null,\n                                             [moduleName]));\n                        }\n                    } else {\n                        //A script that does not call define(), so just simulate\n                        //the call for it.\n                        callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);\n                    }\n                }\n\n                checkLoaded();\n            },\n\n            /**\n             * Converts a module name to a file path. Supports cases where\n             * moduleName may actually be just an URL.\n             * Note that it **does not** call normalize on the moduleName,\n             * it is assumed to have already been normalized. This is an\n             * internal API, not a public one. Use toUrl for the public API.\n             */\n            nameToUrl: function (moduleName, ext, skipExt) {\n                var paths, syms, i, parentModule, url,\n                    parentPath, bundleId,\n                    pkgMain = getOwn(config.pkgs, moduleName);\n\n                if (pkgMain) {\n                    moduleName = pkgMain;\n                }\n\n                bundleId = getOwn(bundlesMap, moduleName);\n\n                if (bundleId) {\n                    return context.nameToUrl(bundleId, ext, skipExt);\n                }\n\n                //If a colon is in the URL, it indicates a protocol is used and it is just\n                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)\n                //or ends with .js, then assume the user meant to use an url and not a module id.\n                //The slash is important for protocol-less URLs as well as full paths.\n                if (req.jsExtRegExp.test(moduleName)) {\n                    //Just a plain path, not module name lookup, so just return it.\n                    //Add extension if it is included. This is a bit wonky, only non-.js things pass\n                    //an extension, this method probably needs to be reworked.\n                    url = moduleName + (ext || '');\n                } else {\n                    //A module that needs to be converted to a path.\n                    paths = config.paths;\n\n                    syms = moduleName.split('/');\n                    //For each module name segment, see if there is a path\n                    //registered for it. Start with most specific name\n                    //and work up from it.\n                    for (i = syms.length; i > 0; i -= 1) {\n                        parentModule = syms.slice(0, i).join('/');\n\n                        parentPath = getOwn(paths, parentModule);\n                        if (parentPath) {\n                            //If an array, it means there are a few choices,\n                            //Choose the one that is desired\n                            if (isArray(parentPath)) {\n                                parentPath = parentPath[0];\n                            }\n                            syms.splice(0, i, parentPath);\n                            break;\n                        }\n                    }\n\n                    //Join the path parts together, then figure out if baseUrl is needed.\n                    url = syms.join('/');\n                    url += (ext || (/^data\\:|\\?/.test(url) || skipExt ? '' : '.js'));\n                    url = (url.charAt(0) === '/' || url.match(/^[\\w\\+\\.\\-]+:/) ? '' : config.baseUrl) + url;\n                }\n\n                return config.urlArgs ? url +\n                                        ((url.indexOf('?') === -1 ? '?' : '&') +\n                                         config.urlArgs) : url;\n            },\n\n            //Delegates to req.load. Broken out as a separate function to\n            //allow overriding in the optimizer.\n            load: function (id, url) {\n                req.load(context, id, url);\n            },\n\n            /**\n             * Executes a module callback function. Broken out as a separate function\n             * solely to allow the build system to sequence the files in the built\n             * layer in the right sequence.\n             *\n             * @private\n             */\n            execCb: function (name, callback, args, exports) {\n                return callback.apply(exports, args);\n            },\n\n            /**\n             * callback for script loads, used to check status of loading.\n             *\n             * @param {Event} evt the event from the browser for the script\n             * that was loaded.\n             */\n            onScriptLoad: function (evt) {\n                //Using currentTarget instead of target for Firefox 2.0's sake. Not\n                //all old browsers will be supported, but this one was easy enough\n                //to support and still makes sense.\n                if (evt.type === 'load' ||\n                        (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {\n                    //Reset interactive script so a script node is not held onto for\n                    //to long.\n                    interactiveScript = null;\n\n                    //Pull out the name of the module and the context.\n                    var data = getScriptData(evt);\n                    context.completeLoad(data.id);\n                }\n            },\n\n            /**\n             * Callback for script errors.\n             */\n            onScriptError: function (evt) {\n                var data = getScriptData(evt);\n                if (!hasPathFallback(data.id)) {\n                    return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id]));\n                }\n            }\n        };\n\n        context.require = context.makeRequire();\n        return context;\n    }\n\n    /**\n     * Main entry point.\n     *\n     * If the only argument to require is a string, then the module that\n     * is represented by that string is fetched for the appropriate context.\n     *\n     * If the first argument is an array, then it will be treated as an array\n     * of dependency string names to fetch. An optional function callback can\n     * be specified to execute when all of those dependencies are available.\n     *\n     * Make a local req variable to help Caja compliance (it assumes things\n     * on a require that are not standardized), and to give a short\n     * name for minification/local scope use.\n     */\n    req = requirejs = function (deps, callback, errback, optional) {\n\n        //Find the right context, use default\n        var context, config,\n            contextName = defContextName;\n\n        // Determine if have config object in the call.\n        if (!isArray(deps) && typeof deps !== 'string') {\n            // deps is a config object\n            config = deps;\n            if (isArray(callback)) {\n                // Adjust args if there are dependencies\n                deps = callback;\n                callback = errback;\n                errback = optional;\n            } else {\n                deps = [];\n            }\n        }\n\n        if (config && config.context) {\n            contextName = config.context;\n        }\n\n        context = getOwn(contexts, contextName);\n        if (!context) {\n            context = contexts[contextName] = req.s.newContext(contextName);\n        }\n\n        if (config) {\n            context.configure(config);\n        }\n\n        return context.require(deps, callback, errback);\n    };\n\n    /**\n     * Support require.config() to make it easier to cooperate with other\n     * AMD loaders on globally agreed names.\n     */\n    req.config = function (config) {\n        return req(config);\n    };\n\n    /**\n     * Execute something after the current tick\n     * of the event loop. Override for other envs\n     * that have a better solution than setTimeout.\n     * @param  {Function} fn function to execute later.\n     */\n    req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {\n        setTimeout(fn, 4);\n    } : function (fn) { fn(); };\n\n    /**\n     * Export require as a global, but only if it does not already exist.\n     */\n    if (!require) {\n        require = req;\n    }\n\n    req.version = version;\n\n    //Used to filter out dependencies that are already paths.\n    req.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n    req.isBrowser = isBrowser;\n    s = req.s = {\n        contexts: contexts,\n        newContext: newContext\n    };\n\n    //Create default context.\n    req({});\n\n    //Exports some context-sensitive methods on global require.\n    each([\n        'toUrl',\n        'undef',\n        'defined',\n        'specified'\n    ], function (prop) {\n        //Reference from contexts instead of early binding to default context,\n        //so that during builds, the latest instance of the default context\n        //with its config gets used.\n        req[prop] = function () {\n            var ctx = contexts[defContextName];\n            return ctx.require[prop].apply(ctx, arguments);\n        };\n    });\n\n    if (isBrowser) {\n        head = s.head = document.getElementsByTagName('head')[0];\n        //If BASE tag is in play, using appendChild is a problem for IE6.\n        //When that browser dies, this can be removed. Details in this jQuery bug:\n        //http://dev.jquery.com/ticket/2709\n        baseElement = document.getElementsByTagName('base')[0];\n        if (baseElement) {\n            head = s.head = baseElement.parentNode;\n        }\n    }\n\n    /**\n     * Any errors that require explicitly generates will be passed to this\n     * function. Intercept/override it if you want custom error handling.\n     * @param {Error} err the error object.\n     */\n    req.onError = defaultOnError;\n\n    /**\n     * Creates the node for the load command. Only used in browser envs.\n     */\n    req.createNode = function (config, moduleName, url) {\n        var node = config.xhtml ?\n                document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :\n                document.createElement('script');\n        node.type = config.scriptType || 'text/javascript';\n        node.charset = 'utf-8';\n        node.async = true;\n        return node;\n    };\n\n    /**\n     * Does the request to load a module for the browser case.\n     * Make this a separate function to allow other environments\n     * to override it.\n     *\n     * @param {Object} context the require context to find state.\n     * @param {String} moduleName the name of the module.\n     * @param {Object} url the URL to the module.\n     */\n    req.load = function (context, moduleName, url) {\n        var config = (context && context.config) || {},\n            node;\n        if (isBrowser) {\n            //In the browser so use a script tag\n            node = req.createNode(config, moduleName, url);\n            if (config.onNodeCreated) {\n                config.onNodeCreated(node, config, moduleName, url);\n            }\n\n            node.setAttribute('data-requirecontext', context.contextName);\n            node.setAttribute('data-requiremodule', moduleName);\n\n            //Set up load listener. Test attachEvent first because IE9 has\n            //a subtle issue in its addEventListener and script onload firings\n            //that do not match the behavior of all other browsers with\n            //addEventListener support, which fire the onload event for a\n            //script right after the script execution. See:\n            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n            //UNFORTUNATELY Opera implements attachEvent but does not follow the script\n            //script execution mode.\n            if (node.attachEvent &&\n                    //Check if node.attachEvent is artificially added by custom script or\n                    //natively supported by browser\n                    //read https://github.com/jrburke/requirejs/issues/187\n                    //if we can NOT find [native code] then it must NOT natively supported.\n                    //in IE8, node.attachEvent does not have toString()\n                    //Note the test for \"[native code\" with no closing brace, see:\n                    //https://github.com/jrburke/requirejs/issues/273\n                    !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&\n                    !isOpera) {\n                //Probably IE. IE (at least 6-8) do not fire\n                //script onload right after executing the script, so\n                //we cannot tie the anonymous define call to a name.\n                //However, IE reports the script as being in 'interactive'\n                //readyState at the time of the define call.\n                useInteractive = true;\n\n                node.attachEvent('onreadystatechange', context.onScriptLoad);\n                //It would be great to add an error handler here to catch\n                //404s in IE9+. However, onreadystatechange will fire before\n                //the error handler, so that does not help. If addEventListener\n                //is used, then IE will fire error before load, but we cannot\n                //use that pathway given the connect.microsoft.com issue\n                //mentioned above about not doing the 'script execute,\n                //then fire the script load event listener before execute\n                //next script' that other browsers do.\n                //Best hope: IE10 fixes the issues,\n                //and then destroys all installs of IE 6-9.\n                //node.attachEvent('onerror', context.onScriptError);\n            } else {\n                node.addEventListener('load', context.onScriptLoad, false);\n                node.addEventListener('error', context.onScriptError, false);\n            }\n            node.src = url;\n\n            //For some cache cases in IE 6-8, the script executes before the end\n            //of the appendChild execution, so to tie an anonymous define\n            //call to the module name (which is stored on the node), hold on\n            //to a reference to this node, but clear after the DOM insertion.\n            currentlyAddingScript = node;\n            if (baseElement) {\n                head.insertBefore(node, baseElement);\n            } else {\n                head.appendChild(node);\n            }\n            currentlyAddingScript = null;\n\n            return node;\n        } else if (isWebWorker) {\n            try {\n                //In a web worker, use importScripts. This is not a very\n                //efficient use of importScripts, importScripts will block until\n                //its script is downloaded and evaluated. However, if web workers\n                //are in play, the expectation that a build has been done so that\n                //only one script needs to be loaded anyway. This may need to be\n                //reevaluated if other use cases become common.\n                importScripts(url);\n\n                //Account for anonymous modules\n                context.completeLoad(moduleName);\n            } catch (e) {\n                context.onError(makeError('importscripts',\n                                'importScripts failed for ' +\n                                    moduleName + ' at ' + url,\n                                e,\n                                [moduleName]));\n            }\n        }\n    };\n\n    function getInteractiveScript() {\n        if (interactiveScript && interactiveScript.readyState === 'interactive') {\n            return interactiveScript;\n        }\n\n        eachReverse(scripts(), function (script) {\n            if (script.readyState === 'interactive') {\n                return (interactiveScript = script);\n            }\n        });\n        return interactiveScript;\n    }\n\n    //Look for a data-main script attribute, which could also adjust the baseUrl.\n    if (isBrowser && !cfg.skipDataMain) {\n        //Figure out baseUrl. Get it from the script tag with require.js in it.\n        eachReverse(scripts(), function (script) {\n            //Set the 'head' where we can append children by\n            //using the script's parent.\n            if (!head) {\n                head = script.parentNode;\n            }\n\n            //Look for a data-main attribute to set main script for the page\n            //to load. If it is there, the path to data main becomes the\n            //baseUrl, if it is not already set.\n            dataMain = script.getAttribute('data-main');\n            if (dataMain) {\n                //Preserve dataMain in case it is a path (i.e. contains '?')\n                mainScript = dataMain;\n\n                //Set final baseUrl if there is not already an explicit one.\n                if (!cfg.baseUrl) {\n                    //Pull off the directory of data-main for use as the\n                    //baseUrl.\n                    src = mainScript.split('/');\n                    mainScript = src.pop();\n                    subPath = src.length ? src.join('/')  + '/' : './';\n\n                    cfg.baseUrl = subPath;\n                }\n\n                //Strip off any trailing .js since mainScript is now\n                //like a module name.\n                mainScript = mainScript.replace(jsSuffixRegExp, '');\n\n                //If mainScript is still a path, fall back to dataMain\n                if (req.jsExtRegExp.test(mainScript)) {\n                    mainScript = dataMain;\n                }\n\n                //Put the data-main script in the files to load.\n                cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];\n\n                return true;\n            }\n        });\n    }\n\n    /**\n     * The function that handles definitions of modules. Differs from\n     * require() in that a string for the module should be the first argument,\n     * and the function to execute after dependencies are loaded should\n     * return a value to define the module corresponding to the first argument's\n     * name.\n     */\n    define = function (name, deps, callback) {\n        var node, context;\n\n        //Allow for anonymous modules\n        if (typeof name !== 'string') {\n            //Adjust args appropriately\n            callback = deps;\n            deps = name;\n            name = null;\n        }\n\n        //This module may not have dependencies\n        if (!isArray(deps)) {\n            callback = deps;\n            deps = null;\n        }\n\n        //If no name, and callback is a function, then figure out if it a\n        //CommonJS thing with dependencies.\n        if (!deps && isFunction(callback)) {\n            deps = [];\n            //Remove comments from the callback string,\n            //look for require calls, and pull them into the dependencies,\n            //but only if there are function args.\n            if (callback.length) {\n                callback\n                    .toString()\n                    .replace(commentRegExp, '')\n                    .replace(cjsRequireRegExp, function (match, dep) {\n                        deps.push(dep);\n                    });\n\n                //May be a CommonJS thing even without require calls, but still\n                //could use exports, and module. Avoid doing exports and module\n                //work though if it just needs require.\n                //REQUIRES the function to expect the CommonJS variables in the\n                //order listed below.\n                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);\n            }\n        }\n\n        //If in IE 6-8 and hit an anonymous define() call, do the interactive\n        //work.\n        if (useInteractive) {\n            node = currentlyAddingScript || getInteractiveScript();\n            if (node) {\n                if (!name) {\n                    name = node.getAttribute('data-requiremodule');\n                }\n                context = contexts[node.getAttribute('data-requirecontext')];\n            }\n        }\n\n        //Always save off evaluating the def call until the script onload handler.\n        //This allows multiple modules to be in a file without prematurely\n        //tracing dependencies, and allows for anonymous module support,\n        //where the module name is not known until the script onload event\n        //occurs. If no context, use the global queue, and get it processed\n        //in the onscript load callback.\n        if (context) {\n            context.defQueue.push([name, deps, callback]);\n            context.defQueueMap[name] = true;\n        } else {\n            globalDefQueue.push([name, deps, callback]);\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n\n    /**\n     * Executes the text. Normally just uses eval, but can be modified\n     * to use a better, environment-specific call. Only used for transpiling\n     * loader plugins, not for plain JS modules.\n     * @param {String} text the text to execute/evaluate.\n     */\n    req.exec = function (text) {\n        /*jslint evil: true */\n        return eval(text);\n    };\n\n    //Set up with config info.\n    req(cfg);\n}(this));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/rickshaw-chart/data/data.json",
    "content": "[\n\t{\n\t\t\"color\": \"blue\",\n\t\t\"name\": \"New York\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 40 }, { \"x\": 1, \"y\": 49 }, { \"x\": 2, \"y\": 38 }, { \"x\": 3, \"y\": 30 }, { \"x\": 4, \"y\": 32 } ]\n\t}, {\n\t\t\"name\": \"London\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 19 }, { \"x\": 1, \"y\": 22 }, { \"x\": 2, \"y\": 29 }, { \"x\": 3, \"y\": 20 }, { \"x\": 4, \"y\": 14 } ]\n\t}, {\n\t\t\"name\": \"Tokyo\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 8 }, { \"x\": 1, \"y\": 12 }, { \"x\": 2, \"y\": 15 }, { \"x\": 3, \"y\": 11 }, { \"x\": 4, \"y\": 10 } ]\n\t}\n]\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/rickshaw-chart/data/data.jsonp",
    "content": "callback([\n\t{\n\t\t'color': 'blue',\n\t\t'name': 'London',\n\t\t'data': [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 } ],\n\t}, {\n\t\t'name': 'New York',\n\t\t'data': [ { x: 0, y: 19 }, { x: 1, y: 22 }, { x: 2, y: 29 }, { x: 3, y: 20 }, { x: 4, y: 14 } ],\n\t}, {\n\t\t'name': 'Tokyo',\n\t\t'data': [ { x: 0, y: 8 }, { x: 1, y: 12 }, { x: 2, y: 15 }, { x: 3, y: 11 }, { x: 4, y: 10 } ],\n\t}\n]);\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/rickshaw-chart/data/data2.json",
    "content": "[\n\t{\n\t\t\"color\": \"blue\",\n\t\t\"name\": \"New York\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 50 }, { \"x\": 1, \"y\": 32 }, { \"x\": 2, \"y\": 38 }, { \"x\": 3, \"y\": 30 }, { \"x\": 4, \"y\": 32 } ]\n\t}, {\n\t\t\"name\": \"London\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 19 }, { \"x\": 1, \"y\": 76 }, { \"x\": 2, \"y\": 28 }, { \"x\": 3, \"y\": 20 }, { \"x\": 4, \"y\": 14 } ]\n\t}, {\n\t\t\"name\": \"Tokyo\",\n\t\t\"data\": [ { \"x\": 0, \"y\": 8 }, { \"x\": 1, \"y\": 12 }, { \"x\": 2, \"y\": 14 }, { \"x\": 3, \"y\": 11 }, { \"x\": 4, \"y\": 28 } ]\n\t}\n]\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/rickshaw-chart/data/status.json",
    "content": "{\"1320630300\":{\"304\":41,\"206\":0,\"502\":0,\"400\":2,\"408\":49,\"401\":32,\"200\":1275,\"302\":13,\"500\":1,\"301\":7,\"404\":1},\"1320629640\":{\"304\":42,\"206\":0,\"502\":0,\"400\":2,\"408\":42,\"401\":29,\"200\":1245,\"302\":10,\"500\":0,\"301\":5,\"404\":0},\"1320627540\":{\"304\":55,\"502\":0,\"400\":2,\"401\":22,\"408\":43,\"200\":1178,\"302\":9,\"301\":8,\"404\":5},\"1320630180\":{\"403\":0,\"304\":39,\"206\":0,\"502\":0,\"400\":2,\"408\":39,\"401\":31,\"200\":1340,\"302\":14,\"500\":1,\"404\":1,\"301\":5},\"1320628200\":{\"304\":37,\"206\":0,\"502\":0,\"400\":2,\"408\":47,\"401\":30,\"200\":1232,\"302\":27,\"301\":8,\"404\":1},\"1320629220\":{\"304\":46,\"206\":0,\"502\":0,\"400\":2,\"408\":42,\"401\":29,\"200\":1212,\"302\":8,\"301\":8,\"404\":0},\"1320627360\":{\"304\":30,\"206\":0,\"502\":0,\"400\":1,\"408\":43,\"401\":27,\"200\":1190,\"302\":10,\"500\":0,\"301\":9,\"404\":1},\"1320630120\":{\"304\":44,\"206\":0,\"502\":0,\"400\":2,\"408\":48,\"401\":31,\"200\":1314,\"302\":11,\"500\":1,\"301\":7,\"404\":0},\"1320629280\":{\"304\":28,\"206\":0,\"502\":0,\"400\":2,\"401\":29,\"408\":43,\"200\":1236,\"302\":9,\"500\":0,\"301\":11},\"1320628380\":{\"304\":56,\"206\":0,\"502\":0,\"400\":4,\"408\":44,\"401\":23,\"200\":1305,\"201\":0,\"302\":16,\"301\":6,\"404\":1},\"1320630480\":{\"304\":60,\"206\":0,\"502\":0,\"400\":3,\"408\":51,\"401\":29,\"200\":1267,\"302\":12,\"500\":0,\"301\":8,\"404\":1},\"1320628920\":{\"304\":38,\"206\":0,\"502\":0,\"400\":2,\"408\":35,\"401\":21,\"200\":1211,\"201\":0,\"302\":9,\"301\":7,\"404\":1},\"1320628320\":{\"304\":46,\"206\":0,\"502\":0,\"400\":4,\"408\":43,\"401\":21,\"200\":1197,\"302\":13,\"500\":0,\"301\":5,\"404\":1},\"1320629460\":{\"304\":40,\"502\":1,\"400\":2,\"401\":27,\"408\":46,\"200\":1179,\"302\":39,\"301\":10,\"404\":1},\"1320628500\":{\"304\":40,\"206\":0,\"502\":0,\"400\":5,\"408\":42,\"401\":31,\"200\":1316,\"302\":10,\"301\":7,\"404\":1},\"1320627300\":{\"304\":34,\"206\":0,\"502\":0,\"400\":1,\"408\":48,\"401\":24,\"200\":1264,\"302\":9,\"301\":7,\"404\":1},\"1320627960\":{\"403\":0,\"304\":59,\"206\":0,\"502\":0,\"400\":2,\"408\":38,\"401\":27,\"200\":1180,\"201\":0,\"302\":7,\"409\":0,\"500\":0,\"404\":0,\"301\":8},\"1320630600\":{\"304\":40,\"206\":0,\"502\":0,\"400\":3,\"408\":46,\"401\":28,\"200\":1297,\"302\":12,\"500\":1,\"301\":7,\"404\":2},\"1320628560\":{\"304\":34,\"206\":0,\"502\":0,\"400\":3,\"408\":41,\"401\":31,\"200\":1275,\"302\":8,\"301\":9,\"404\":1},\"1320628080\":{\"304\":31,\"206\":0,\"502\":0,\"400\":2,\"408\":41,\"401\":27,\"200\":1177,\"201\":0,\"302\":5,\"405\":0,\"301\":7,\"404\":1},\"1320627780\":{\"304\":59,\"502\":0,\"400\":3,\"401\":27,\"408\":39,\"200\":1246,\"302\":14,\"301\":9,\"404\":1},\"1320629940\":{\"304\":42,\"502\":0,\"400\":2,\"401\":34,\"408\":44,\"200\":1297,\"302\":12,\"500\":0,\"301\":4,\"404\":1},\"1320628020\":{\"304\":38,\"502\":0,\"400\":3,\"408\":43,\"401\":27,\"200\":1200,\"302\":6,\"405\":0,\"301\":9,\"404\":0},\"1320630360\":{\"304\":44,\"206\":1,\"502\":0,\"400\":1,\"408\":47,\"401\":25,\"200\":1270,\"302\":11,\"500\":0,\"301\":7,\"404\":1},\"1320629760\":{\"304\":40,\"206\":0,\"502\":0,\"400\":2,\"408\":43,\"401\":29,\"200\":1302,\"302\":9,\"500\":0,\"301\":5,\"404\":1},\"1320627720\":{\"304\":36,\"502\":0,\"400\":3,\"401\":24,\"408\":43,\"200\":1166,\"302\":7,\"301\":9,\"404\":1},\"1320627420\":{\"304\":35,\"206\":0,\"502\":0,\"400\":2,\"408\":41,\"401\":28,\"200\":1220,\"302\":14,\"301\":10,\"404\":1},\"1320629340\":{\"304\":41,\"206\":0,\"502\":0,\"400\":3,\"408\":42,\"401\":33,\"200\":1255,\"302\":39,\"301\":10,\"404\":1},\"1320628860\":{\"304\":27,\"206\":0,\"502\":0,\"400\":2,\"408\":39,\"401\":20,\"200\":1167,\"302\":6,\"301\":7,\"404\":1},\"1320629160\":{\"403\":0,\"304\":43,\"502\":0,\"400\":2,\"408\":43,\"401\":23,\"200\":1214,\"302\":9,\"410\":0,\"301\":7,\"404\":1},\"1320630420\":{\"304\":39,\"206\":0,\"502\":0,\"400\":2,\"408\":46,\"401\":31,\"200\":1318,\"302\":10,\"500\":1,\"301\":9,\"404\":1},\"1320627120\":{\"304\":30,\"206\":0,\"502\":0,\"400\":3,\"408\":42,\"401\":29,\"200\":1166,\"302\":7,\"301\":6,\"404\":0},\"1320630000\":{\"304\":35,\"502\":0,\"400\":2,\"401\":29,\"408\":49,\"200\":1244,\"302\":8,\"500\":0,\"301\":3,\"404\":1},\"1320629880\":{\"304\":41,\"502\":0,\"400\":2,\"401\":30,\"408\":45,\"200\":1282,\"302\":9,\"500\":0,\"301\":5,\"404\":1},\"1320628260\":{\"304\":34,\"204\":0,\"502\":0,\"400\":5,\"408\":44,\"401\":28,\"200\":1205,\"201\":0,\"302\":8,\"500\":0,\"301\":10,\"404\":1},\"1320629400\":{\"304\":42,\"206\":0,\"502\":0,\"400\":2,\"408\":43,\"401\":30,\"200\":1242,\"302\":43,\"301\":10,\"404\":1},\"1320627600\":{\"304\":53,\"206\":0,\"502\":0,\"400\":2,\"408\":39,\"401\":26,\"200\":1190,\"302\":13,\"500\":0,\"301\":8,\"404\":3},\"1320627660\":{\"304\":42,\"206\":0,\"502\":1,\"400\":2,\"408\":42,\"401\":25,\"200\":1199,\"201\":0,\"302\":14,\"301\":7,\"404\":2},\"1320629100\":{\"304\":26,\"502\":0,\"400\":2,\"401\":23,\"408\":45,\"200\":1213,\"302\":9,\"500\":0,\"301\":7,\"404\":2},\"1320627900\":{\"304\":48,\"502\":0,\"400\":2,\"401\":26,\"408\":45,\"200\":1219,\"302\":7,\"301\":9,\"404\":1},\"1320629580\":{\"304\":22,\"206\":0,\"502\":0,\"400\":2,\"408\":37,\"401\":27,\"200\":1184,\"302\":13,\"500\":0,\"301\":8,\"404\":1},\"1320628440\":{\"304\":46,\"206\":0,\"502\":0,\"400\":4,\"408\":45,\"401\":27,\"200\":1320,\"201\":0,\"302\":11,\"500\":0,\"301\":6,\"404\":0},\"1320628680\":{\"304\":60,\"502\":0,\"400\":4,\"408\":45,\"401\":29,\"200\":1269,\"201\":0,\"302\":10,\"301\":9,\"404\":1},\"1320630060\":{\"304\":47,\"502\":0,\"400\":2,\"401\":28,\"408\":49,\"200\":1249,\"302\":8,\"500\":0,\"301\":6,\"404\":1},\"1320627840\":{\"304\":55,\"502\":0,\"400\":1,\"401\":23,\"408\":39,\"200\":1186,\"302\":7,\"301\":9,\"404\":1},\"1320627180\":{\"304\":24,\"206\":0,\"502\":0,\"400\":2,\"408\":38,\"401\":26,\"200\":1163,\"302\":7,\"301\":5,\"404\":1},\"1320628740\":{\"304\":50,\"206\":0,\"502\":0,\"400\":4,\"408\":40,\"401\":28,\"200\":1235,\"302\":10,\"500\":0,\"301\":8,\"404\":1},\"1320630540\":{\"304\":47,\"206\":0,\"502\":0,\"400\":4,\"408\":42,\"401\":28,\"200\":1371,\"302\":12,\"500\":0,\"301\":6,\"404\":1},\"1320629040\":{\"304\":29,\"206\":0,\"502\":1,\"400\":3,\"408\":42,\"401\":25,\"200\":1169,\"302\":7,\"500\":0,\"410\":0,\"301\":7,\"404\":1},\"1320630240\":{\"403\":0,\"304\":27,\"206\":0,\"502\":0,\"400\":1,\"408\":51,\"401\":30,\"200\":1297,\"302\":9,\"500\":0,\"404\":1,\"301\":7},\"1320627480\":{\"304\":34,\"206\":0,\"502\":0,\"400\":2,\"408\":40,\"401\":26,\"200\":1183,\"302\":13,\"301\":10,\"404\":2},\"1320628620\":{\"304\":37,\"502\":0,\"400\":5,\"401\":31,\"408\":45,\"200\":1215,\"302\":9,\"301\":10,\"404\":1},\"1320628140\":{\"304\":49,\"206\":0,\"502\":0,\"400\":2,\"408\":40,\"401\":33,\"200\":1238,\"302\":16,\"301\":8,\"404\":1},\"1320629520\":{\"304\":31,\"502\":0,\"400\":2,\"401\":29,\"408\":38,\"200\":1233,\"302\":32,\"301\":10,\"404\":0},\"1320627240\":{\"304\":40,\"206\":0,\"502\":0,\"400\":1,\"401\":23,\"408\":42,\"200\":1186,\"302\":8,\"301\":6},\"1320629700\":{\"304\":45,\"206\":0,\"502\":0,\"400\":1,\"408\":47,\"401\":26,\"200\":1206,\"302\":7,\"500\":0,\"301\":6,\"404\":1},\"1320628980\":{\"304\":38,\"502\":0,\"400\":2,\"408\":42,\"401\":27,\"200\":1234,\"302\":11,\"405\":0,\"301\":7,\"404\":0},\"1320628800\":{\"304\":32,\"206\":0,\"502\":0,\"400\":2,\"408\":50,\"401\":22,\"200\":1121,\"302\":9,\"500\":0,\"301\":7,\"404\":1},\"1320629820\":{\"304\":41,\"206\":0,\"502\":0,\"400\":2,\"408\":40,\"401\":23,\"200\":1280,\"302\":8,\"301\":5,\"404\":1}}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/css/select2.css",
    "content": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle; }\n  .select2-container .select2-selection--single {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    height: 28px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--single .select2-selection__rendered {\n      display: block;\n      padding-left: 8px;\n      padding-right: 20px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n    .select2-container .select2-selection--single .select2-selection__clear {\n      position: relative; }\n  .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n    padding-right: 8px;\n    padding-left: 20px; }\n  .select2-container .select2-selection--multiple {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    min-height: 32px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--multiple .select2-selection__rendered {\n      display: inline-block;\n      overflow: hidden;\n      padding-left: 8px;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n  .select2-container .select2-search--inline {\n    float: left; }\n    .select2-container .select2-search--inline .select2-search__field {\n      box-sizing: border-box;\n      border: none;\n      font-size: 100%;\n      margin-top: 5px;\n      padding: 0; }\n      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n        -webkit-appearance: none; }\n\n.select2-dropdown {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  z-index: 1051; }\n\n.select2-results {\n  display: block; }\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n.select2-results__option {\n  padding: 6px;\n  user-select: none;\n  -webkit-user-select: none; }\n  .select2-results__option[aria-selected] {\n    cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n  left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px; }\n  .select2-search--dropdown .select2-search__field {\n    padding: 4px;\n    width: 100%;\n    box-sizing: border-box; }\n    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n  .select2-search--dropdown.select2-search--hide {\n    display: none; }\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff;\n  filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  height: 1px !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important; }\n\n.select2-container--default .select2-selection--single {\n  background-color: #fff;\n  border: 1px solid #aaa;\n  border-radius: 4px; }\n  .select2-container--default .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--default .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold; }\n  .select2-container--default .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--default .select2-selection--single .select2-selection__arrow {\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px; }\n    .select2-container--default .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  left: 1px;\n  right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n  background-color: #eee;\n  cursor: default; }\n  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n    display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text; }\n  .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n    box-sizing: border-box;\n    list-style: none;\n    margin: 0;\n    padding: 0 5px;\n    width: 100%; }\n    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n      list-style: none; }\n  .select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n    color: #999;\n    margin-top: 5px;\n    float: left; }\n  .select2-container--default .select2-selection--multiple .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-top: 5px;\n    margin-right: 10px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n    color: #999;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n  float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border: solid black 1px;\n  outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n  background-color: #eee;\n  cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n  display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n  background: transparent;\n  border: none;\n  outline: 0;\n  box-shadow: none;\n  -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999; }\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n  padding-left: 1em; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n    padding-left: 0; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n    margin-left: -1em;\n    padding-left: 2em; }\n    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n      margin-left: -2em;\n      padding-left: 3em; }\n      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n        margin-left: -3em;\n        padding-left: 4em; }\n        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n          margin-left: -4em;\n          padding-left: 5em; }\n          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n            margin-left: -5em;\n            padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #5897fb;\n  color: white; }\n\n.select2-container--default .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n  background-color: #f7f7f7;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  outline: 0;\n  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n  .select2-container--classic .select2-selection--single:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--classic .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-right: 10px; }\n  .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--classic .select2-selection--single .select2-selection__arrow {\n    background-color: #ddd;\n    border: none;\n    border-left: 1px solid #aaa;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px;\n    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n    .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  border: none;\n  border-right: 1px solid #aaa;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  left: 1px;\n  right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n  border: 1px solid #5897fb; }\n  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n    background: transparent;\n    border: none; }\n    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n      border-color: transparent transparent #888 transparent;\n      border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text;\n  outline: 0; }\n  .select2-container--classic .select2-selection--multiple:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n    list-style: none;\n    margin: 0;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n    display: none; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n    color: #888;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  float: right; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n  border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa;\n  outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n  outline: 0;\n  box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n  background-color: white;\n  border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n  border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n  border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n  color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n  background-color: #3875d7;\n  color: white; }\n\n.select2-container--classic .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n  border-color: #5897fb; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ar.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"الرجاء حذف \"+t+\" عناصر\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"الرجاء إضافة \"+t+\" عناصر\";return n},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(e){var t=\"تستطيع إختيار \"+e.maximum+\" بنود فقط\";return t},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/az.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/az\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+\" simvol silin\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+\" simvol daxil edin\"},loadingMore:function(){return\"Daha çox nəticə yüklənir…\"},maximumSelected:function(e){return\"Sadəcə \"+e.maximum+\" element seçə bilərsiniz\"},noResults:function(){return\"Nəticə tapılmadı\"},searching:function(){return\"Axtarılır…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/bg.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Моля въведете с \"+t+\" по-малко символ\";return t>1&&(n+=\"a\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Моля въведете още \"+t+\" символ\";return t>1&&(n+=\"a\"),n},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(e){var t=\"Можете да направите до \"+e.maximum+\" \";return e.maximum>1?t+=\"избора\":t+=\"избор\",t},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ca.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Si us plau, elimina \"+t+\" car\";return t==1?n+=\"àcter\":n+=\"àcters\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Si us plau, introdueix \"+t+\" car\";return t==1?n+=\"àcter\":n+=\"àcters\",n},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var t=\"Només es pot seleccionar \"+e.maximum+\" element\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/cs.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/cs\",[],function(){function e(e,t){switch(e){case 2:return t?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?\"Prosím zadejte o jeden znak méně\":n<=4?\"Prosím zadejte o \"+e(n,!0)+\" znaky méně\":\"Prosím zadejte o \"+n+\" znaků méně\"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?\"Prosím zadejte ještě jeden znak\":n<=4?\"Prosím zadejte ještě další \"+e(n,!0)+\" znaky\":\"Prosím zadejte ještě dalších \"+n+\" znaků\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(t){var n=t.maximum;return n==1?\"Můžete zvolit jen jednu položku\":n<=4?\"Můžete zvolit maximálně \"+e(n,!1)+\" položky\":\"Můžete zvolit maximálně \"+n+\" položek\"},noResults:function(){return\"Nenalezeny žádné položky\"},searching:function(){return\"Vyhledávání…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/da.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Angiv venligst \"+t+\" tegn mindre\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Angiv venligst \"+t+\" tegn mere\";return n},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var t=\"Du kan kun vælge \"+e.maximum+\" emne\";return e.maximum!=1&&(t+=\"r\"),t},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/de.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/de\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Bitte \"+t+\" Zeichen weniger eingeben\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Bitte \"+t+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var t=\"Sie können nur \"+e.maximum+\" Eintr\";return e.maximum===1?t+=\"ag\":t+=\"äge\",t+=\" auswählen\",t},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/el.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Παρακαλώ διαγράψτε \"+t+\" χαρακτήρ\";return t==1&&(n+=\"α\"),t!=1&&(n+=\"ες\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Παρακαλώ συμπληρώστε \"+t+\" ή περισσότερους χαρακτήρες\";return n},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(e){var t=\"Μπορείτε να επιλέξετε μόνο \"+e.maximum+\" επιλογ\";return e.maximum==1&&(t+=\"ή\"),e.maximum!=1&&(t+=\"ές\"),t},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/en.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return t!=1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Please enter \"+t+\" or more characters\";return n},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/es.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"La carga falló\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Por favor, elimine \"+t+\" car\";return t==1?n+=\"ácter\":n+=\"acteres\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Por favor, introduzca \"+t+\" car\";return t==1?n+=\"ácter\":n+=\"acteres\",n},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var t=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return e.maximum!=1&&(t+=\"s\"),t},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/et.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Sisesta \"+t+\" täht\";return t!=1&&(n+=\"e\"),n+=\" vähem\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Sisesta \"+t+\" täht\";return t!=1&&(n+=\"e\"),n+=\" rohkem\",n},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var t=\"Saad vaid \"+e.maximum+\" tulemus\";return e.maximum==1?t+=\"e\":t+=\"t\",t+=\" valida\",t},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/eu.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/eu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Idatzi \";return t==1?n+=\"karaktere bat\":n+=t+\" karaktere\",n+=\" gutxiago\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Idatzi \";return t==1?n+=\"karaktere bat\":n+=t+\" karaktere\",n+=\" gehiago\",n},loadingMore:function(){return\"Emaitza gehiago kargatzen…\"},maximumSelected:function(e){return e.maximum===1?\"Elementu bakarra hauta dezakezu\":e.maximum+\" elementu hauta ditzakezu soilik\"},noResults:function(){return\"Ez da bat datorrenik aurkitu\"},searching:function(){return\"Bilatzen…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/fa.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"لطفاً \"+t+\" کاراکتر را حذف نمایید\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"لطفاً تعداد \"+t+\" کاراکتر یا بیشتر وارد نمایید\";return n},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(e){var t=\"شما تنها می‌توانید \"+e.maximum+\" آیتم را انتخاب نمایید\";return t},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/fi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fi\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Ole hyvä ja anna \"+t+\" merkkiä vähemmän\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Ole hyvä ja anna \"+t+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(e){return\"Voit valita ainoastaan \"+e.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/fr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Supprimez \"+t+\" caractère\";return t!==1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Saisissez \"+t+\" caractère\";return t!==1&&(n+=\"s\"),n},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){var t=\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\";return e.maximum!==1&&(t+=\"s\"),t},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/gl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/gl\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Elimine \";return t===1?n+=\"un carácter\":n+=t+\" caracteres\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Engada \";return t===1?n+=\"un carácter\":n+=t+\" caracteres\",n},loadingMore:function(){return\"Cargando máis resultados…\"},maximumSelected:function(e){var t=\"Só pode \";return e.maximum===1?t+=\"un elemento\":t+=e.maximum+\" elementos\",t},noResults:function(){return\"Non se atoparon resultados\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/he.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/he\",[],function(){return{errorLoading:function(){return\"שגיאה בטעינת התוצאות\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"נא למחוק \";return t===1?n+=\"תו אחד\":n+=t+\" תווים\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"נא להכניס \";return t===1?n+=\"תו אחד\":n+=t+\" תווים\",n+=\" או יותר\",n},loadingMore:function(){return\"טוען תוצאות נוספות…\"},maximumSelected:function(e){var t=\"באפשרותך לבחור עד \";return e.maximum===1?t+=\"פריט אחד\":t+=e.maximum+\" פריטים\",t},noResults:function(){return\"לא נמצאו תוצאות\"},searching:function(){return\"מחפש…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/hi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hi\",[],function(){return{errorLoading:function(){return\"परिणामों को लोड नहीं किया जा सका।\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" अक्षर को हटा दें\";return t>1&&(n=t+\" अक्षरों को हटा दें \"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"कृपया \"+t+\" या अधिक अक्षर दर्ज करें\";return n},loadingMore:function(){return\"अधिक परिणाम लोड हो रहे है...\"},maximumSelected:function(e){var t=\"आप केवल \"+e.maximum+\" आइटम का चयन कर सकते हैं\";return t},noResults:function(){return\"कोई परिणाम नहीं मिला\"},searching:function(){return\"खोज रहा है...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/hr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hr\",[],function(){function e(e){var t=\" \"+e+\" znak\";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+=\"a\"):t+=\"ova\",t}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return\"Unesite \"+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return\"Unesite još \"+e(n)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(e){return\"Maksimalan broj odabranih stavki je \"+e.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/hu.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/hu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Túl hosszú. \"+t+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Túl rövid. Még \"+t+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/id.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Hapuskan \"+t+\" huruf\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Masukkan \"+t+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(e){return\"Anda hanya dapat memilih \"+e.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/is.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/is\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vinsamlegast styttið texta um \"+t+\" staf\";return t<=1?n:n+\"i\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vinsamlegast skrifið \"+t+\" staf\";return t>1&&(n+=\"i\"),n+=\" í viðbót\",n},loadingMore:function(){return\"Sæki fleiri niðurstöður…\"},maximumSelected:function(e){return\"Þú getur aðeins valið \"+e.maximum+\" atriði\"},noResults:function(){return\"Ekkert fannst\"},searching:function(){return\"Leita…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/it.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Per favore cancella \"+t+\" caratter\";return t!==1?n+=\"i\":n+=\"e\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Per favore inserisci \"+t+\" o più caratteri\";return n},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var t=\"Puoi selezionare solo \"+e.maximum+\" element\";return e.maximum!==1?t+=\"i\":t+=\"o\",t},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ja.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" 文字を削除してください\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"少なくとも \"+t+\" 文字を入力してください\";return n},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(e){var t=e.maximum+\" 件しか選択できません\";return t},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/km.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/km\",[],function(){return{errorLoading:function(){return\"មិនអាចទាញយកទិន្នន័យ\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"សូមលុបចេញ  \"+t+\" អក្សរ\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"សូមបញ្ចូល\"+t+\" អក្សរ រឺ ច្រើនជាងនេះ\";return n},loadingMore:function(){return\"កំពុងទាញយកទិន្នន័យបន្ថែម...\"},maximumSelected:function(e){var t=\"អ្នកអាចជ្រើសរើសបានតែ \"+e.maximum+\" ជម្រើសប៉ុណ្ណោះ\";return t},noResults:function(){return\"មិនមានលទ្ធផល\"},searching:function(){return\"កំពុងស្វែងរក...\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ko.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"너무 깁니다. \"+t+\" 글자 지워주세요.\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"너무 짧습니다. \"+t+\" 글자 더 입력해주세요.\";return n},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(e){var t=\"최대 \"+e.maximum+\"개까지만 선택 가능합니다.\";return t},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/lt.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/lt\",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Pašalinkite \"+n+\" simbol\";return r+=e(n,\"į\",\"ius\",\"ių\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Įrašykite dar \"+n+\" simbol\";return r+=e(n,\"į\",\"ius\",\"ių\"),r},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(t){var n=\"Jūs galite pasirinkti tik \"+t.maximum+\" element\";return n+=e(t.maximum,\"ą\",\"us\",\"ų\"),n},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/lv.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/lv\",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Lūdzu ievadiet par  \"+n;return r+=\" simbol\"+e(n,\"iem\",\"u\",\"iem\"),r+\" mazāk\"},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Lūdzu ievadiet vēl \"+n;return r+=\" simbol\"+e(n,\"us\",\"u\",\"us\"),r},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(t){var n=\"Jūs varat izvēlēties ne vairāk kā \"+t.maximum;return n+=\" element\"+e(t.maximum,\"us\",\"u\",\"us\"),n},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/mk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/mk\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Ве молиме внесете \"+e.maximum+\" помалку карактер\";return e.maximum!==1&&(n+=\"и\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Ве молиме внесете уште \"+e.maximum+\" карактер\";return e.maximum!==1&&(n+=\"и\"),n},loadingMore:function(){return\"Вчитување резултати…\"},maximumSelected:function(e){var t=\"Можете да изберете само \"+e.maximum+\" ставк\";return e.maximum===1?t+=\"а\":t+=\"и\",t},noResults:function(){return\"Нема пронајдено совпаѓања\"},searching:function(){return\"Пребарување…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ms.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ms\",[],function(){return{errorLoading:function(){return\"Keputusan tidak berjaya dimuatkan.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Sila hapuskan \"+t+\" aksara\"},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Sila masukkan \"+t+\" atau lebih aksara\"},loadingMore:function(){return\"Sedang memuatkan keputusan…\"},maximumSelected:function(e){return\"Anda hanya boleh memilih \"+e.maximum+\" pilihan\"},noResults:function(){return\"Tiada padanan yang ditemui\"},searching:function(){return\"Mencari…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/nb.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/nb\",[],function(){return{errorLoading:function(){return\"Kunne ikke hente resultater.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Vennligst fjern \"+t+\" tegn\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vennligst skriv inn \";return t>1?n+=\" flere tegn\":n+=\" tegn til\",n},loadingMore:function(){return\"Laster flere resultater…\"},maximumSelected:function(e){return\"Du kan velge maks \"+e.maximum+\" elementer\"},noResults:function(){return\"Ingen treff\"},searching:function(){return\"Søker…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/nl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Gelieve \"+t+\" karakters te verwijderen\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Gelieve \"+t+\" of meer karakters in te voeren\";return n},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var t=e.maximum==1?\"kan\":\"kunnen\",n=\"Er \"+t+\" maar \"+e.maximum+\" item\";return e.maximum!=1&&(n+=\"s\"),n+=\" worden geselecteerd\",n},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/pl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pl\",[],function(){var e=[\"znak\",\"znaki\",\"znaków\"],t=[\"element\",\"elementy\",\"elementów\"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(t){var r=t.input.length-t.maximum;return\"Usuń \"+r+\" \"+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return\"Podaj przynajmniej \"+r+\" \"+n(r,e)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(e){return\"Możesz zaznaczyć tylko \"+e.maximum+\" \"+n(e.maximum,t)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/pt-BR.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pt-BR\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Apague \"+t+\" caracter\";return t!=1&&(n+=\"es\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Digite \"+t+\" ou mais caracteres\";return n},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var t=\"Você só pode selecionar \"+e.maximum+\" ite\";return e.maximum==1?t+=\"m\":t+=\"ns\",t},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/pt.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Por favor apague \"+t+\" \";return n+=t!=1?\"caracteres\":\"carácter\",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Introduza \"+t+\" ou mais caracteres\";return n},loadingMore:function(){return\"A carregar mais resultados…\"},maximumSelected:function(e){var t=\"Apenas pode seleccionar \"+e.maximum+\" \";return t+=e.maximum!=1?\"itens\":\"item\",t},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ro.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return t!==1&&(n+=\"e\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vă rugăm să introduceți \"+t+\"sau mai multe caractere\";return n},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",e.maximum!==1&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/ru.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/ru\",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Пожалуйста, введите на \"+n+\" символ\";return r+=e(n,\"\",\"a\",\"ов\"),r+=\" меньше\",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Пожалуйста, введите еще хотя бы \"+n+\" символ\";return r+=e(n,\"\",\"a\",\"ов\"),r},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(t){var n=\"Вы можете выбрать не более \"+t.maximum+\" элемент\";return n+=e(t.maximum,\"\",\"a\",\"ов\"),n},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/sk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?\"Prosím, zadajte o jeden znak menej\":n>=2&&n<=4?\"Prosím, zadajte o \"+e[n](!0)+\" znaky menej\":\"Prosím, zadajte o \"+n+\" znakov menej\"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?\"Prosím, zadajte ešte jeden znak\":n<=4?\"Prosím, zadajte ešte ďalšie \"+e[n](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+n+\" znakov\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(t){return t.maximum==1?\"Môžete zvoliť len jednu položku\":t.maximum>=2&&t.maximum<=4?\"Môžete zvoliť najviac \"+e[t.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+t.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/sr-Cyrl.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sr-Cyrl\",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return\"Преузимање није успело.\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Обришите \"+n+\" симбол\";return r+=e(n,\"\",\"а\",\"а\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Укуцајте бар још \"+n+\" симбол\";return r+=e(n,\"\",\"а\",\"а\"),r},loadingMore:function(){return\"Преузимање још резултата…\"},maximumSelected:function(t){var n=\"Можете изабрати само \"+t.maximum+\" ставк\";return n+=e(t.maximum,\"у\",\"е\",\"и\"),n},noResults:function(){return\"Ништа није пронађено\"},searching:function(){return\"Претрага…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/sr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sr\",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return\"Preuzimanje nije uspelo.\"},inputTooLong:function(t){var n=t.input.length-t.maximum,r=\"Obrišite \"+n+\" simbol\";return r+=e(n,\"\",\"a\",\"a\"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r=\"Ukucajte bar još \"+n+\" simbol\";return r+=e(n,\"\",\"a\",\"a\"),r},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(t){var n=\"Možete izabrati samo \"+t.maximum+\" stavk\";return n+=e(t.maximum,\"u\",\"e\",\"i\"),n},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/sv.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vänligen sudda ut \"+t+\" tecken\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vänligen skriv in \"+t+\" eller fler tecken\";return n},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(e){var t=\"Du kan max välja \"+e.maximum+\" element\";return t},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/th.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/th\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"โปรดลบออก \"+t+\" ตัวอักษร\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"โปรดพิมพ์เพิ่มอีก \"+t+\" ตัวอักษร\";return n},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(e){var t=\"คุณสามารถเลือกได้ไม่เกิน \"+e.maximum+\" รายการ\";return t},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/tr.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/tr\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+\" karakter daha girmelisiniz\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"En az \"+t+\" karakter daha girmelisiniz\";return n},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(e){var t=\"Sadece \"+e.maximum+\" seçim yapabilirsiniz\";return t},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/uk.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/uk\",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(t){var n=t.input.length-t.maximum;return\"Будь ласка, видаліть \"+n+\" \"+e(t.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Будь ласка, введіть \"+t+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(t){return\"Ви можете вибрати лише \"+t.maximum+\" \"+e(t.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/vi.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/vi\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vui lòng nhập ít hơn \"+t+\" ký tự\";return t!=1&&(n+=\"s\"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Vui lòng nhập nhiều hơn \"+t+' ký tự\"';return n},loadingMore:function(){return\"Đang lấy thêm kết quả…\"},maximumSelected:function(e){var t=\"Chỉ có thể chọn được \"+e.maximum+\" lựa chọn\";return t},noResults:function(){return\"Không tìm thấy kết quả\"},searching:function(){return\"Đang tìm…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/zh-CN.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/zh-CN\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"请删除\"+t+\"个字符\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"请再输入至少\"+t+\"个字符\";return n},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(e){var t=\"最多只能选择\"+e.maximum+\"个项目\";return t},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/i18n/zh-TW.js",
    "content": "/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define(\"select2/i18n/zh-TW\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"請刪掉\"+t+\"個字元\";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"請再輸入\"+t+\"個字元\";return n},loadingMore:function(){return\"載入中…\"},maximumSelected:function(e){var t=\"你只能選擇最多\"+e.maximum+\"項\";return t},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"}}}),{define:e.define,require:e.require}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/select2.full.js",
    "content": "/*!\n * Select2 4.0.3\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    // Node/CommonJS\n    factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n}(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =\n(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name && name.charAt(0) === \".\") {\n            //If have a base name, try to normalize against it,\n            //otherwise, assume it is a top-level require that will\n            //be relative to baseUrl in the end.\n            if (baseName) {\n                name = name.split('/');\n                lastIndex = name.length - 1;\n\n                // Node .js allowance:\n                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                }\n\n                //Lop off the last part of baseParts, so that . matches the\n                //\"directory\" and not name of the baseName's module. For instance,\n                //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n                //want the directory, \"one/two\" for this normalization.\n                name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n                //start trimDots\n                for (i = 0; i < name.length; i += 1) {\n                    part = name[i];\n                    if (part === \".\") {\n                        name.splice(i, 1);\n                        i -= 1;\n                    } else if (part === \"..\") {\n                        if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n                            //End of the line. Keep at least one non-dot\n                            //path segment at the front so it can be mapped\n                            //correctly to disk. Otherwise, there is likely\n                            //no path mapping for a path starting with '..'.\n                            //This can still fail, but catches the most reasonable\n                            //uses of ..\n                            break;\n                        } else if (i > 0) {\n                            name.splice(i - 1, 2);\n                            i -= 2;\n                        }\n                    }\n                }\n                //end trimDots\n\n                name = name.join(\"/\");\n            } else if (name.indexOf('./') === 0) {\n                // No baseName, so this is ID is resolved relative\n                // to baseUrl, pull off the leading dot.\n                name = name.substring(2);\n            }\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relName) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relName));\n            } else {\n                name = normalize(name, relName);\n            }\n        } else {\n            name = normalize(name, relName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relName);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, callback).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n        var superMethod = superMethods[m];\n\n        DecoratedClass.prototype[superMethod] =\n          SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"tree\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"treeitem\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = $.data(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    if (data.disabled) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    $.data(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = $highlighted.data('data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at te top, don't move further\n      if (currentIndex === 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = $this.data('data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = $(this).data('data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (this.$element.data('old-tabindex') != null) {\n      this._tabindex = this.$element.data('old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.focus();\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n    var self = this;\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = $this.data('element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.focus();\n      }\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n    $rendered.prop('title', selection.title || selection.text);\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = $selection.data('data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n      $selection.prop('title', selection.title || selection.text);\n\n      $selection.data('data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys'\n], function ($, KEYS) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = $clear.data('data');\n\n    for (var d = 0; d < data.length; d++) {\n      var unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        return;\n      }\n    }\n\n    this.$element.val(this.placeholder.id).trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\">' +\n        '&times;' +\n      '</span>'\n    );\n    $remove.data('data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      self.$search.attr('aria-activedescendant', params.id);\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = $previousChoice.data('data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.focus();\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').innerWidth();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting'\n    ];\n\n    var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      $.removeData(this, 'data');\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    $.data(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = $.data($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    $.data($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (!$.isPlainObject(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ($request.status && $request.status === '0') {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var checkText = option.text === params.term;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var tag = this._lastTag;\n\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.focus();\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n        decorated.call(self, params, callback);\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implmented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n\n      self.$search.focus();\n\n      window.setTimeout(function () {\n        self.$search.focus();\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n    });\n\n    container.on('focus', function () {\n      if (container.isOpen()) {\n        self.$search.focus();\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', function () {\n      var isLoadMoreVisible = $.contains(\n        document.documentElement,\n        self.$loadingMore[0]\n      );\n\n      if (self.loading || !isLoadMoreVisible) {\n        return;\n      }\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var loadingMoreOffset = self.$loadingMore.offset().top +\n        self.$loadingMore.outerHeight(false);\n\n      if (currentOffset + 50 >= loadingMoreOffset) {\n        self.loadMore();\n      }\n    });\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"treeitem\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = options.get('dropdownParent') || $(document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\n\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      }\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      $(this).data('select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = $(this).data('select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calciulating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positoned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n\n], function () {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = $highlightedResults.data('data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && originalEvent.ctrlKey) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    if (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files.\n            if (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\n    }\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if ($e.data('select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      $e.data('data', $e.data('select2Tags'));\n      $e.data('tags', true);\n    }\n\n    if ($e.data('ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', $e.data('ajaxUrl'));\n      $e.data('ajax--url', $e.data('ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, $e.data());\n    } else {\n      dataset = $e.data();\n    }\n\n    var data = $.extend(true, {}, dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if ($element.data('select2') != null) {\n      $element.data('select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    $element.data('old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex', this.$element.data('old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    $container.data('element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/compat/utils',[\n  'jquery'\n], function ($) {\n  function syncCssClasses ($dest, $src, adapter) {\n    var classes, replacements = [], adapted;\n\n    classes = $.trim($dest.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Save all Select2 classes\n        if (this.indexOf('select2-') === 0) {\n          replacements.push(this);\n        }\n      });\n    }\n\n    classes = $.trim($src.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Only adapt non-Select2 classes\n        if (this.indexOf('select2-') !== 0) {\n          adapted = adapter(this);\n\n          if (adapted != null) {\n            replacements.push(adapted);\n          }\n        }\n      });\n    }\n\n    $dest.attr('class', replacements.join(' '));\n  }\n\n  return {\n    syncCssClasses: syncCssClasses\n  };\n});\n\nS2.define('select2/compat/containerCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _containerAdapter (clazz) {\n    return null;\n  }\n\n  function ContainerCSS () { }\n\n  ContainerCSS.prototype.render = function (decorated) {\n    var $container = decorated.call(this);\n\n    var containerCssClass = this.options.get('containerCssClass') || '';\n\n    if ($.isFunction(containerCssClass)) {\n      containerCssClass = containerCssClass(this.$element);\n    }\n\n    var containerCssAdapter = this.options.get('adaptContainerCssClass');\n    containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n    if (containerCssClass.indexOf(':all:') !== -1) {\n      containerCssClass = containerCssClass.replace(':all:', '');\n\n      var _cssAdapter = containerCssAdapter;\n\n      containerCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var containerCss = this.options.get('containerCss') || {};\n\n    if ($.isFunction(containerCss)) {\n      containerCss = containerCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n\n    $container.css(containerCss);\n    $container.addClass(containerCssClass);\n\n    return $container;\n  };\n\n  return ContainerCSS;\n});\n\nS2.define('select2/compat/dropdownCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _dropdownAdapter (clazz) {\n    return null;\n  }\n\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if ($.isFunction(dropdownCssClass)) {\n      dropdownCssClass = dropdownCssClass(this.$element);\n    }\n\n    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      var _cssAdapter = dropdownCssAdapter;\n\n      dropdownCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var dropdownCss = this.options.get('dropdownCss') || {};\n\n    if ($.isFunction(dropdownCss)) {\n      dropdownCss = dropdownCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n\n    $dropdown.css(dropdownCss);\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/compat/initSelection',[\n  'jquery'\n], function ($) {\n  function InitSelection (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `initSelection` option has been deprecated in favor' +\n        ' of a custom data adapter that overrides the `current` method. ' +\n        'This method is now called multiple times instead of a single ' +\n        'time when the instance is initialized. Support will be removed ' +\n        'for the `initSelection` option in future versions of Select2'\n      );\n    }\n\n    this.initSelection = options.get('initSelection');\n    this._isInitialized = false;\n\n    decorated.call(this, $element, options);\n  }\n\n  InitSelection.prototype.current = function (decorated, callback) {\n    var self = this;\n\n    if (this._isInitialized) {\n      decorated.call(this, callback);\n\n      return;\n    }\n\n    this.initSelection.call(null, this.$element, function (data) {\n      self._isInitialized = true;\n\n      if (!$.isArray(data)) {\n        data = [data];\n      }\n\n      callback(data);\n    });\n  };\n\n  return InitSelection;\n});\n\nS2.define('select2/compat/inputData',[\n  'jquery'\n], function ($) {\n  function InputData (decorated, $element, options) {\n    this._currentData = [];\n    this._valueSeparator = options.get('valueSeparator') || ',';\n\n    if ($element.prop('type') === 'hidden') {\n      if (options.get('debug') && console && console.warn) {\n        console.warn(\n          'Select2: Using a hidden input with Select2 is no longer ' +\n          'supported and may stop working in the future. It is recommended ' +\n          'to use a `<select>` element instead.'\n        );\n      }\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  InputData.prototype.current = function (_, callback) {\n    function getSelected (data, selectedIds) {\n      var selected = [];\n\n      if (data.selected || $.inArray(data.id, selectedIds) !== -1) {\n        data.selected = true;\n        selected.push(data);\n      } else {\n        data.selected = false;\n      }\n\n      if (data.children) {\n        selected.push.apply(selected, getSelected(data.children, selectedIds));\n      }\n\n      return selected;\n    }\n\n    var selected = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      selected.push.apply(\n        selected,\n        getSelected(\n          data,\n          this.$element.val().split(\n            this._valueSeparator\n          )\n        )\n      );\n    }\n\n    callback(selected);\n  };\n\n  InputData.prototype.select = function (_, data) {\n    if (!this.options.get('multiple')) {\n      this.current(function (allData) {\n        $.map(allData, function (data) {\n          data.selected = false;\n        });\n      });\n\n      this.$element.val(data.id);\n      this.$element.trigger('change');\n    } else {\n      var value = this.$element.val();\n      value += this._valueSeparator + data.id;\n\n      this.$element.val(value);\n      this.$element.trigger('change');\n    }\n  };\n\n  InputData.prototype.unselect = function (_, data) {\n    var self = this;\n\n    data.selected = false;\n\n    this.current(function (allData) {\n      var values = [];\n\n      for (var d = 0; d < allData.length; d++) {\n        var item = allData[d];\n\n        if (data.id == item.id) {\n          continue;\n        }\n\n        values.push(item.id);\n      }\n\n      self.$element.val(values.join(self._valueSeparator));\n      self.$element.trigger('change');\n    });\n  };\n\n  InputData.prototype.query = function (_, params, callback) {\n    var results = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      var matches = this.matches(params, data);\n\n      if (matches !== null) {\n        results.push(matches);\n      }\n    }\n\n    callback({\n      results: results\n    });\n  };\n\n  InputData.prototype.addOptions = function (_, $options) {\n    var options = $.map($options, function ($option) {\n      return $.data($option[0], 'data');\n    });\n\n    this._currentData.push.apply(this._currentData, options);\n  };\n\n  return InputData;\n});\n\nS2.define('select2/compat/matcher',[\n  'jquery'\n], function ($) {\n  function oldMatcher (matcher) {\n    function wrappedMatcher (params, data) {\n      var match = $.extend(true, {}, data);\n\n      if (params.term == null || $.trim(params.term) === '') {\n        return match;\n      }\n\n      if (data.children) {\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          // Check if the child object matches\n          // The old matcher returned a boolean true or false\n          var doesMatch = matcher(params.term, child.text, child);\n\n          // If the child didn't match, pop it off\n          if (!doesMatch) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        if (match.children.length > 0) {\n          return match;\n        }\n      }\n\n      if (matcher(params.term, data.text, data)) {\n        return match;\n      }\n\n      return null;\n    }\n\n    return wrappedMatcher;\n  }\n\n  return oldMatcher;\n});\n\nS2.define('select2/compat/query',[\n\n], function () {\n  function Query (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `query` option has been deprecated in favor of a ' +\n        'custom data adapter that overrides the `query` method. Support ' +\n        'will be removed for the `query` option in future versions of ' +\n        'Select2.'\n      );\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Query.prototype.query = function (_, params, callback) {\n    params.callback = callback;\n\n    var query = this.options.get('query');\n\n    query.call(null, params);\n  };\n\n  return Query;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown.addClass('select2-dropdown--below');\n    $container.addClass('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults'\n], function ($, _, Select2, Defaults) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = $(this).data('select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/select2/js/select2.js",
    "content": "/*!\n * Select2 4.0.3\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    // Node/CommonJS\n    factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n}(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =\n(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name && name.charAt(0) === \".\") {\n            //If have a base name, try to normalize against it,\n            //otherwise, assume it is a top-level require that will\n            //be relative to baseUrl in the end.\n            if (baseName) {\n                name = name.split('/');\n                lastIndex = name.length - 1;\n\n                // Node .js allowance:\n                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                }\n\n                //Lop off the last part of baseParts, so that . matches the\n                //\"directory\" and not name of the baseName's module. For instance,\n                //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n                //want the directory, \"one/two\" for this normalization.\n                name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n                //start trimDots\n                for (i = 0; i < name.length; i += 1) {\n                    part = name[i];\n                    if (part === \".\") {\n                        name.splice(i, 1);\n                        i -= 1;\n                    } else if (part === \"..\") {\n                        if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n                            //End of the line. Keep at least one non-dot\n                            //path segment at the front so it can be mapped\n                            //correctly to disk. Otherwise, there is likely\n                            //no path mapping for a path starting with '..'.\n                            //This can still fail, but catches the most reasonable\n                            //uses of ..\n                            break;\n                        } else if (i > 0) {\n                            name.splice(i - 1, 2);\n                            i -= 2;\n                        }\n                    }\n                }\n                //end trimDots\n\n                name = name.join(\"/\");\n            } else if (name.indexOf('./') === 0) {\n                // No baseName, so this is ID is resolved relative\n                // to baseUrl, pull off the leading dot.\n                name = name.substring(2);\n            }\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relName) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relName));\n            } else {\n                name = normalize(name, relName);\n            }\n        } else {\n            name = normalize(name, relName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relName);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, callback).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n        var superMethod = superMethods[m];\n\n        DecoratedClass.prototype[superMethod] =\n          SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"tree\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"treeitem\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = $.data(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    if (data.disabled) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    $.data(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = $highlighted.data('data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at te top, don't move further\n      if (currentIndex === 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = $this.data('data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = $(this).data('data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (this.$element.data('old-tabindex') != null) {\n      this._tabindex = this.$element.data('old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.focus();\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n    var self = this;\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = $this.data('element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.focus();\n      }\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n    $rendered.prop('title', selection.title || selection.text);\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = $selection.data('data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n      $selection.prop('title', selection.title || selection.text);\n\n      $selection.data('data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys'\n], function ($, KEYS) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = $clear.data('data');\n\n    for (var d = 0; d < data.length; d++) {\n      var unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        return;\n      }\n    }\n\n    this.$element.val(this.placeholder.id).trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\">' +\n        '&times;' +\n      '</span>'\n    );\n    $remove.data('data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      self.$search.attr('aria-activedescendant', params.id);\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = $previousChoice.data('data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.focus();\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').innerWidth();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting'\n    ];\n\n    var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      $.removeData(this, 'data');\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    $.data(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = $.data($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    $.data($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (!$.isPlainObject(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ($request.status && $request.status === '0') {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var checkText = option.text === params.term;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var tag = this._lastTag;\n\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.focus();\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n        decorated.call(self, params, callback);\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implmented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"' +\n        ' spellcheck=\"false\" role=\"textbox\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n\n      self.$search.focus();\n\n      window.setTimeout(function () {\n        self.$search.focus();\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n    });\n\n    container.on('focus', function () {\n      if (container.isOpen()) {\n        self.$search.focus();\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', function () {\n      var isLoadMoreVisible = $.contains(\n        document.documentElement,\n        self.$loadingMore[0]\n      );\n\n      if (self.loading || !isLoadMoreVisible) {\n        return;\n      }\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var loadingMoreOffset = self.$loadingMore.offset().top +\n        self.$loadingMore.outerHeight(false);\n\n      if (currentOffset + 50 >= loadingMoreOffset) {\n        self.loadMore();\n      }\n    });\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"treeitem\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = options.get('dropdownParent') || $(document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\n\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      }\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      $(this).data('select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = $(this).data('select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calciulating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positoned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n\n], function () {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = $highlightedResults.data('data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && originalEvent.ctrlKey) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    if (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files.\n            if (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\n    }\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if ($e.data('select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      $e.data('data', $e.data('select2Tags'));\n      $e.data('tags', true);\n    }\n\n    if ($e.data('ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', $e.data('ajaxUrl'));\n      $e.data('ajax--url', $e.data('ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, $e.data());\n    } else {\n      dataset = $e.data();\n    }\n\n    var data = $.extend(true, {}, dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if ($element.data('select2') != null) {\n      $element.data('select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    $element.data('old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex', this.$element.data('old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    $container.data('element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults'\n], function ($, _, Select2, Defaults) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = $(this).data('select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/smoothproducts/css/smoothproducts.css",
    "content": "\n/* CSS for the loading div */\n\n.sp-loading {\n\ttext-align: center;\n\tmax-width: 270px;\n\tpadding: 15px;\n\tborder: 5px solid #eee;\n\tborder-radius: 3px;\n\tfont-size: 12px;\n\tcolor: #888;\n}\n\n/* Element wrapper */\n\n.sp-wrap {\n\tdisplay: none;\n\tline-height: 0;\n\tfont-size: 0;\n\tbackground: #eee;\n\tborder: 5px solid #eee;\n\tborder-radius: 3px;\n\tposition: relative;\n\tmargin: 0 25px 15px 0;\n\tfloat: left;\n\t/**************\n\t  Set max-width to your thumbnail width\n\t***************/\n\t\n\tmax-width: 300px;\n}\n\n/* Thumbnails */\n\n.sp-thumbs {\n\ttext-align: left;\n\tdisplay: inline-block;\n}\n.sp-thumbs img {\n\tmin-height: 50px;\n\tmin-width: 50px;\n\tmax-width: 50px;\n}\n.sp-thumbs a:link, .sp-thumbs a:visited {\n\twidth: 50px;\n\theight: 50px;\n\toverflow: hidden;\n\topacity: .3;\n\tdisplay: inline-block;\n\tbackground-size: cover;\n\tbackground-position: center;\n\t-webkit-transition: all .2s ease-out;\n\t-moz-transition: all .2s ease-out;\n\t-ms-transition: all .2s ease-out;\n\t-o-transition: all .2s ease-out;\n\ttransition: all .2s ease-out;\n}\n.sp-thumbs a:hover {\n\topacity: 1;\n}\n\n/* Styles for the currently selected thumbnail */\n\n.sp-thumbs a:active, .sp-current {\n\topacity: 1!important;\n\tposition: relative;\n}\n\n/* Image currently being viewed */\n\n.sp-large {\n\tposition: relative;\n\toverflow: hidden;\n\ttop: 0;\n\tleft: 0;\n}\n.sp-large a img {\n\tmax-width: 100%;\n\theight: auto;\n}\n.sp-large a {\n\tdisplay: block;\n}\n\n/* Panning Zoomed Image */\n\n.sp-zoom {\n\tposition: absolute;\n\tleft: -50%;\n\ttop: -50%;\n\tcursor: -webkit-zoom-in;\n\tcursor: -moz-zoom-in;\n\tcursor: zoom-in;\n\tdisplay: none;\n}\n/* Lightbox */\n\n.sp-lightbox {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\theight: 100%;\n\twidth: 100%;\n\tbackground: rgb(0, 0, 0);\n\tbackground: rgba(0, 0, 0, .9);\n\tz-index: 500;\n\tdisplay: none;\n\tcursor: pointer;\n}\n.sp-lightbox img {\n\tposition: absolute;\n\tmargin: auto;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 90%;\n\tmax-height: 90%;\n\tborder: 2px solid #fff;\n}\n#sp-prev, #sp-next {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -25px;\n\tz-index: 501;\n\tcolor: #fff;\n\tpadding: 14px;\n\ttext-decoration: none;\n\tbackground: #000;\n\tborder-radius: 25px;\n\tborder: 2px solid #fff;\n\twidth: 50px;\n\theight: 50px;\n\tbox-sizing: border-box;\n\ttransition: .2s;\n}\n#sp-prev {\n\tleft: 10px;\n}\n#sp-prev:before {\n\tcontent: '';\n\tborder: 7px solid transparent;\n\tborder-right: 15px solid #fff;\n\tposition: absolute;\n\ttop: 16px;\n\tleft: 7px;\n}\n#sp-next {\n\tright: 10px;\n}\n#sp-next:before {\n\tcontent: '';\n\tborder: 7px solid transparent;\n\tborder-left: 15px solid white;\n\tposition: absolute;\n\ttop: 16px;\n\tleft: 18px;\n}\n#sp-prev:hover, #sp-next:hover {\n\tbackground: #444;\n}\n\n/* Tweak styles for small viewports */\n\n@media screen and (max-width: 400px) {\n\t.sp-wrap {\n\t\tmargin: 0 0 15px 0;\n\t}\n\t#sp-prev, #sp-next {\n\t\ttop: auto;\n\t\tmargin-top: 0;\n\t\tbottom: 25px;\n\t}\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/smoothproducts/js/smoothproducts.js",
    "content": "/*\n * Smoothproducts version 2.0.2\n * http://kthornbloom.com/smoothproducts.php\n *\n * Copyright 2013, Kevin Thornbloom\n * Free to use and abuse under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n */\n\n(function($) {\n\t$.fn.extend({\n\t\tsmoothproducts: function() {\n\n\t\t\t// Add some markup & set some CSS\n\n\t\t\t$('.sp-loading').hide();\n\t\t\t$('.sp-wrap').each(function() {\n\t\t\t\t$(this).addClass('sp-touch');\n\t\t\t\tvar thumbQty = $('a', this).length;\n\n\t\t\t\t// If more than one image\n\t\t\t\tif (thumbQty > 1) {\n\t\t\t\t\tvar firstLarge,firstThumb,\n\t\t\t\t\t\tdefaultImage = $('a.sp-default', this)[0]?true:false;\n\t\t\t\t\t$(this).append('<div class=\"sp-large\"></div><div class=\"sp-thumbs sp-tb-active\"></div>');\n\t\t\t\t\t$('a', this).each(function(index) {\n\t\t\t\t\t\tvar thumb = $('img', this).attr('src'),\n\t\t\t\t\t\t\tlarge = $(this).attr('href'),\n\t\t\t\t\t\t\tclasses = '';\n\t\t\t\t\t\t//set default image\n\t\t\t\t\t\tif((index === 0 && !defaultImage) || $(this).hasClass('sp-default')){\n\t\t\t\t\t\t\tclasses = ' class=\"sp-current\"';\n\t\t\t\t\t\t\tfirstLarge = large;\n\t\t\t\t\t\t\tfirstThumb = $('img', this)[0].src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(this).parents('.sp-wrap').find('.sp-thumbs').append('<a href=\"' + large + '\" style=\"background-image:url(' + thumb + ')\"'+classes+'></a>');\n\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t});\n\t\t\t\t\t$('.sp-large', this).append('<a href=\"' + firstLarge + '\" class=\"sp-current-big\"><img src=\"' + firstThumb + '\" alt=\"\" /></a>');\n\t\t\t\t\t$('.sp-wrap').css('display', 'inline-block');\n\t\t\t\t// If only one image\n\t\t\t\t} else {\n\t\t\t\t\t$(this).append('<div class=\"sp-large\"></div>');\n\t\t\t\t\t$('a', this).appendTo($('.sp-large', this)).addClass('.sp-current-big');\n\t\t\t\t\t$('.sp-wrap').css('display', 'inline-block');\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// Prevent clicking while things are happening\n\t\t\t$(document.body).on('click', '.sp-thumbs', function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\n\t\t\t// Is this a touch screen or not?\n\t\t\t$(document.body).on('mouseover', function(event) {\n\t\t\t\t$('.sp-wrap').removeClass('sp-touch').addClass('sp-non-touch');\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t\t$(document.body).on('touchstart', function() {\n\t\t\t\t$('.sp-wrap').removeClass('sp-non-touch').addClass('sp-touch');\n\t\t\t});\n\n\t\t\t// Clicking a thumbnail\n\t\t\t$(document.body).on('click', '.sp-tb-active a', function(event) {\n\n\t\t\t\tevent.preventDefault();\n\t\t\t\t$(this).parent().find('.sp-current').removeClass();\n\t\t\t\t$(this).addClass('sp-current');\n\t\t\t\t$(this).parents('.sp-wrap').find('.sp-thumbs').removeClass('sp-tb-active');\n\t\t\t\t$(this).parents('.sp-wrap').find('.sp-zoom').remove();\n\n\t\t\t\tvar currentHeight = $(this).parents('.sp-wrap').find('.sp-large').height(),\n\t\t\t\t\tcurrentWidth = $(this).parents('.sp-wrap').find('.sp-large').width();\n\t\t\t\t$(this).parents('.sp-wrap').find('.sp-large').css({\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\theight: currentHeight + 'px',\n\t\t\t\t\twidth: currentWidth + 'px'\n\t\t\t\t});\n\n\t\t\t\t$(this).addClass('sp-current').parents('.sp-wrap').find('.sp-large a').remove();\n\n\t\t\t\tvar nextLarge = $(this).parent().find('.sp-current').attr('href'),\n\t\t\t\t\tnextThumb = get_url_from_background($(this).parent().find('.sp-current').css('backgroundImage'));\n\n\t\t\t\t$(this).parents('.sp-wrap').find('.sp-large').html('<a href=\"' + nextLarge + '\" class=\"sp-current-big\"><img src=\"' + nextThumb + '\"/></a>');\n\t\t\t\t$(this).parents('.sp-wrap').find('.sp-large').hide().fadeIn(250, function() {\n\n\t\t\t\t\tvar autoHeight = $(this).parents('.sp-wrap').find('.sp-large img').height();\n\n\t\t\t\t\t$(this).parents('.sp-wrap').find('.sp-large').animate({\n\t\t\t\t\t\theight: autoHeight\n\t\t\t\t\t}, 'fast', function() {\n\t\t\t\t\t\t$('.sp-large').css({\n\t\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\t\twidth: 'auto'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t$(this).parents('.sp-wrap').find('.sp-thumbs').addClass('sp-tb-active');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Zoom In non-touch\n\t\t\t$(document.body).on('mouseenter', '.sp-non-touch .sp-large', function(event) {\n\t\t\t\tvar largeUrl = $('a', this).attr('href');\n\t\t\t\t$(this).append('<div class=\"sp-zoom\"><img src=\"' + largeUrl + '\"/></div>');\n\t\t\t\t$(this).find('.sp-zoom').fadeIn(250);\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t\t// Zoom Out non-touch\n\t\t\t$(document.body).on('mouseleave', '.sp-non-touch .sp-large', function(event) {\n\t\t\t\t$(this).find('.sp-zoom').fadeOut(250, function() {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t\t// Open in Lightbox non-touch\n\t\t\t$(document.body).on('click', '.sp-non-touch .sp-zoom', function(event) {\n\t\t\t\tvar currentImg = $(this).html(),\n\t\t\t\t\tthumbAmt = $(this).parents('.sp-wrap').find('.sp-thumbs a').length,\n\t\t\t\t\tcurrentThumb = ($(this).parents('.sp-wrap').find('.sp-thumbs .sp-current').index())+1;\n\t\t\t\t$(this).parents('.sp-wrap').addClass('sp-selected');\n\t\t\t\t$('body').append(\"<div class='sp-lightbox' data-currenteq='\"+currentThumb+\"'>\" + currentImg + \"</div>\");\n\n\t\t\t\tif(thumbAmt > 1){\n\t\t\t\t\t$('.sp-lightbox').append(\"<a href='#' id='sp-prev'></a><a href='#' id='sp-next'></a>\");\n\t\t\t\t\tif(currentThumb == 1) {\n\t\t\t\t\t\t$('#sp-prev').css('opacity','.1');\n\t\t\t\t\t} else if (currentThumb == thumbAmt){\n\t\t\t\t\t\t$('#sp-next').css('opacity','.1');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$('.sp-lightbox').fadeIn();\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t\t// Open in Lightbox touch\n\t\t\t$(document.body).on('click', '.sp-large a', function(event) {\n\t\t\t\tvar currentImg = $(this).attr('href'),\n\t\t\t\t\tthumbAmt = $(this).parents('.sp-wrap').find('.sp-thumbs a').length,\n\t\t\t\t\tcurrentThumb = ($(this).parents('.sp-wrap').find('.sp-thumbs .sp-current').index())+1;\n\n\t\t\t\t$(this).parents('.sp-wrap').addClass('sp-selected');\n\t\t\t\t$('body').append('<div class=\"sp-lightbox\" data-currenteq=\"'+currentThumb+'\"><img src=\"' + currentImg + '\"/></div>');\n\n\t\t\t\tif(thumbAmt > 1){\n\t\t\t\t\t$('.sp-lightbox').append(\"<a href='#' id='sp-prev'></a><a href='#' id='sp-next'></a>\");\n\t\t\t\t\tif(currentThumb == 1) {\n\t\t\t\t\t\t$('#sp-prev').css('opacity','.1');\n\t\t\t\t\t} else if (currentThumb == thumbAmt){\n\t\t\t\t\t\t$('#sp-next').css('opacity','.1');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$('.sp-lightbox').fadeIn();\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t\t// Pagination Forward\n\t\t\t$(document.body).on('click', '#sp-next', function(event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tvar currentEq = $('.sp-lightbox').data('currenteq'),\n\t\t\t\t\ttotalItems = $('.sp-selected .sp-thumbs a').length;\n\n\t\t\t\t\tif(currentEq >= totalItems) {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar nextEq = currentEq + 1,\n\t\t\t\t\t\tnewImg = $('.sp-selected .sp-thumbs').find('a:eq('+currentEq+')').attr('href'),\n\t\t\t\t\t\tnewThumb = get_url_from_background($('.sp-selected .sp-thumbs').find('a:eq('+currentEq+')').css('backgroundImage'));\n\t\t\t\t\t\tif (currentEq == (totalItems - 1)) {\n\t\t\t\t\t\t\t$('#sp-next').css('opacity','.1');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$('#sp-prev').css('opacity','1');\n\t\t\t\t\t\t$('.sp-selected .sp-current').removeClass();\n\t\t\t\t\t\t$('.sp-selected .sp-thumbs a:eq('+currentEq+')').addClass('sp-current');\n\t\t\t\t\t\t$('.sp-selected .sp-large').empty().append('<a href='+newImg+'><img src=\"'+newThumb+'\"/></a>');\n\t\t\t\t\t\t$('.sp-lightbox img').fadeOut(250, function() {\n\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t$('.sp-lightbox').data('currenteq',nextEq).append('<img src=\"'+newImg+'\"/>');\n\t\t\t\t\t\t\t$('.sp-lightbox img').hide().fadeIn(250);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\t\t// Pagination Backward\n\t\t\t$(document.body).on('click', '#sp-prev', function(event) {\n\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tvar currentEq = $('.sp-lightbox').data('currenteq'),\n\t\t\t\t\tcurrentEq = currentEq - 1;\n\t\t\t\t\tif(currentEq <= 0) {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (currentEq == 1) {\n\t\t\t\t\t\t\t$('#sp-prev').css('opacity','.1');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar nextEq = currentEq - 1,\n\t\t\t\t\t\tnewImg = $('.sp-selected .sp-thumbs').find('a:eq('+nextEq+')').attr('href'),\n\t\t\t\t\t\tnewThumb = get_url_from_background($('.sp-selected .sp-thumbs').find('a:eq('+nextEq+')').css('backgroundImage'));\n\t\t\t\t\t\t$('#sp-next').css('opacity','1');\n\t\t\t\t\t\t$('.sp-selected .sp-current').removeClass();\n\t\t\t\t\t\t$('.sp-selected .sp-thumbs a:eq('+nextEq+')').addClass('sp-current');\n\t\t\t\t\t\t$('.sp-selected .sp-large').empty().append('<a href='+newImg+'><img src=\"'+newThumb+'\"/></a>');\n\t\t\t\t\t\t$('.sp-lightbox img').fadeOut(250, function() {\n\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t$('.sp-lightbox').data('currenteq',currentEq).append('<img src=\"'+newImg+'\"/>');\n\t\t\t\t\t\t\t$('.sp-lightbox img').hide().fadeIn(250);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\n\n\t\t\t// Close Lightbox\n\t\t\t$(document.body).on('click', '.sp-lightbox', function() {\n\t\t\t\tcloseModal();\n\t\t\t});\n\n\t\t\t// Close on Esc\n\t\t\t$(document).keydown(function(e) {\n\t\t\t\tif (e.keyCode == 27) {\n\t\t\t\t\tcloseModal();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction closeModal (){\n\t\t\t\t$('.sp-selected').removeClass('sp-selected');\n\t\t\t\t$('.sp-lightbox').fadeOut(function() {\n\t\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\t// Panning zoomed image (non-touch)\n\n\t\t\t$('.sp-large').mousemove(function(e) {\n\t\t\t\tvar viewWidth = $(this).width(),\n\t\t\t\t\tviewHeight = $(this).height(),\n\t\t\t\t\tlargeWidth = $(this).find('.sp-zoom').width(),\n\t\t\t\t\tlargeHeight = $(this).find('.sp-zoom').height(),\n\t\t\t\t\tparentOffset = $(this).parent().offset(),\n\t\t\t\t\trelativeXPosition = (e.pageX - parentOffset.left),\n\t\t\t\t\trelativeYPosition = (e.pageY - parentOffset.top),\n\t\t\t\t\tmoveX = Math.floor((relativeXPosition * (viewWidth - largeWidth) / viewWidth)),\n\t\t\t\t\tmoveY = Math.floor((relativeYPosition * (viewHeight - largeHeight) / viewHeight));\n\n\t\t\t\t$(this).find('.sp-zoom').css({\n\t\t\t\t\tleft: moveX,\n\t\t\t\t\ttop: moveY\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t\tfunction get_url_from_background(bg){\n\t\t\t\treturn bg.match(/url\\([\\\"\\']{0,1}(.+)[\\\"\\']{0,1}\\)+/i)[1];\n\t\t\t}\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ar-AR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ar-AR': {\n      font: {\n        bold: 'عريض',\n        italic: 'مائل',\n        underline: 'تحته خط',\n        clear: 'مسح التنسيق',\n        height: 'إرتفاع السطر',\n        name: 'الخط',\n        strikethrough: 'فى وسطه خط',\n        size: 'الحجم'\n      },\n      image: {\n        image: 'صورة',\n        insert: 'إضافة صورة',\n        resizeFull: 'الحجم بالكامل',\n        resizeHalf: 'تصغير للنصف',\n        resizeQuarter: 'تصغير للربع',\n        floatLeft: 'تطيير لليسار',\n        floatRight: 'تطيير لليمين',\n        floatNone: 'ثابته',\n        dragImageHere: 'إدرج الصورة هنا',\n        selectFromFiles: 'حدد ملف',\n        url: 'رابط الصورة',\n        remove: 'حذف الصورة'\n      },\n      video: {\n        video: 'فيديو',\n        videoLink: 'رابط الفيديو',\n        insert: 'إدراج الفيديو',\n        url: 'رابط الفيديو',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'رابط رابط',\n        insert: 'إدراج',\n        unlink: 'حذف الرابط',\n        edit: 'تعديل',\n        textToDisplay: 'النص',\n        url: 'مسار الرابط',\n        openInNewWindow: 'فتح في نافذة جديدة'\n      },\n      table: {\n        table: 'جدول'\n      },\n      hr: {\n        insert: 'إدراج خط أفقي'\n      },\n      style: {\n        style: 'تنسيق',\n        p: 'عادي',\n        blockquote: 'إقتباس',\n        pre: 'شفيرة',\n        h1: 'عنوان رئيسي 1',\n        h2: 'عنوان رئيسي 2',\n        h3: 'عنوان رئيسي 3',\n        h4: 'عنوان رئيسي 4',\n        h5: 'عنوان رئيسي 5',\n        h6: 'عنوان رئيسي 6'\n      },\n      lists: {\n        unordered: 'قائمة مُنقطة',\n        ordered: 'قائمة مُرقمة'\n      },\n      options: {\n        help: 'مساعدة',\n        fullscreen: 'حجم الشاشة بالكامل',\n        codeview: 'شفيرة المصدر'\n      },\n      paragraph: {\n        paragraph: 'فقرة',\n        outdent: 'محاذاة للخارج',\n        indent: 'محاذاة للداخل',\n        left: 'محاذاة لليسار',\n        center: 'توسيط',\n        right: 'محاذاة لليمين',\n        justify: 'ملئ السطر'\n      },\n      color: {\n        recent: 'تم إستخدامه',\n        more: 'المزيد',\n        background: 'لون الخلفية',\n        foreground: 'لون النص',\n        transparent: 'شفاف',\n        setTransparent: 'بدون خلفية',\n        reset: 'إعادة الضبط',\n        resetToDefault: 'إعادة الضبط'\n      },\n      shortcut: {\n        shortcuts: 'إختصارات',\n        close: 'غلق',\n        textFormatting: 'تنسيق النص',\n        action: 'Action',\n        paragraphFormatting: 'تنسيق الفقرة',\n        documentStyle: 'تنسيق المستند'\n      },\n      history: {\n        undo: 'تراجع',\n        redo: 'إعادة'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-bg-BG.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'bg-BG': {\n      font: {\n        bold: 'Удебелен',\n        italic: 'Наклонен',\n        underline: 'Подчертан',\n        clear: 'Изчисти стиловете',\n        height: 'Височина',\n        name: 'Шрифт',\n        strikethrough: 'Задраскано',\n        subscript: 'Долен индекс',\n        superscript: 'Горен индекс',\n        size: 'Размер на шрифта'\n      },\n      image: {\n        image: 'Изображение',\n        insert: 'Постави картинка',\n        resizeFull: 'Цял размер',\n        resizeHalf: 'Размер на 50%',\n        resizeQuarter: 'Размер на 25%',\n        floatLeft: 'Подравни в ляво',\n        floatRight: 'Подравни в дясно',\n        floatNone: 'Без подравняване',\n        dragImageHere: 'Пуснете изображението тук',\n        selectFromFiles: 'Изберете файл',\n        url: 'URL адрес на изображение',\n        remove: 'Премахни изображение'\n      },\n      link: {\n        link: 'Връзка',\n        insert: 'Добави връзка',\n        unlink: 'Премахни връзка',\n        edit: 'Промени',\n        textToDisplay: 'Текст за показване',\n        url: 'URL адрес',\n        openInNewWindow: 'Отвори в нов прозорец'\n      },\n      table: {\n        table: 'Таблица'\n      },\n      hr: {\n        insert: 'Добави хоризонтална линия'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормален',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавие 1',\n        h2: 'Заглавие 2',\n        h3: 'Заглавие 3',\n        h4: 'Заглавие 4',\n        h5: 'Заглавие 5',\n        h6: 'Заглавие 6'\n      },\n      lists: {\n        unordered: 'Символен списък',\n        ordered: 'Цифров списък'\n      },\n      options: {\n        help: 'Помощ',\n        fullscreen: 'На цял екран',\n        codeview: 'Преглед на код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Намаляване на отстъпа',\n        indent: 'Абзац',\n        left: 'Подравняване в ляво',\n        center: 'Център',\n        right: 'Подравняване в дясно',\n        justify: 'Разтягане по ширина'\n      },\n      color: {\n        recent: 'Последния избран цвят',\n        more: 'Още цветове',\n        background: 'Цвят на фона',\n        foreground: 'Цвят на шрифта',\n        transparent: 'Прозрачен',\n        setTransparent: 'Направете прозрачен',\n        reset: 'Възстанови',\n        resetToDefault: 'Възстанови оригиналните'\n      },\n      shortcut: {\n        shortcuts: 'Клавишни комбинации',\n        close: 'Затвори',\n        textFormatting: 'Форматиране на текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматиране на параграф',\n        documentStyle: 'Стил на документа'\n      },\n      history: {\n        undo: 'Назад',\n        redo: 'Напред'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ca-ES.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ca-ES': {\n      font: {\n        bold: 'Negreta',\n        italic: 'Cursiva',\n        underline: 'Subratllat',\n        clear: 'Treure estil de lletra',\n        height: 'Alçada de línia',\n        name: 'Font',\n        strikethrough: 'Ratllat',\n        subscript: 'Subíndex',\n        superscript: 'Superíndex',\n        size: 'Mida de lletra'\n      },\n      image: {\n        image: 'Imatge',\n        insert: 'Inserir imatge',\n        resizeFull: 'Redimensionar a mida completa',\n        resizeHalf: 'Redimensionar a la meitat',\n        resizeQuarter: 'Redimensionar a un quart',\n        floatLeft: 'Alinear a l\\'esquerra',\n        floatRight: 'Alinear a la dreta',\n        floatNone: 'No alinear',\n        shapeRounded: 'Forma: Arrodonit',\n        shapeCircle: 'Forma: Cercle',\n        shapeThumbnail: 'Forma: Marc',\n        shapeNone: 'Forma: Cap',\n        dragImageHere: 'Arrossegueu una imatge o text aquí',\n        dropImage: 'Deixa anar aquí una imatge o un text',\n        selectFromFiles: 'Seleccioneu des dels arxius',\n        maximumFileSize: 'Mida màxima de l\\'arxiu',\n        maximumFileSizeError: 'La mida màxima de l\\'arxiu s\\'ha superat.',\n        url: 'URL de la imatge',\n        remove: 'Eliminar imatge'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Enllaç del vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL del vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Enllaç',\n        insert: 'Inserir enllaç',\n        unlink: 'Treure enllaç',\n        edit: 'Editar',\n        textToDisplay: 'Text per mostrar',\n        url: 'Cap a quina URL porta l\\'enllaç?',\n        openInNewWindow: 'Obrir en una finestra nova'\n      },\n      table: {\n        table: 'Taula'\n      },\n      hr: {\n        insert: 'Inserir línia horitzontal'\n      },\n      style: {\n        style: 'Estil',\n        p: 'p',\n        blockquote: 'Cita',\n        pre: 'Codi',\n        h1: 'Títol 1',\n        h2: 'Títol 2',\n        h3: 'Títol 3',\n        h4: 'Títol 4',\n        h5: 'Títol 5',\n        h6: 'Títol 6'\n      },\n      lists: {\n        unordered: 'Llista desendreçada',\n        ordered: 'Llista endreçada'\n      },\n      options: {\n        help: 'Ajut',\n        fullscreen: 'Pantalla sencera',\n        codeview: 'Veure codi font'\n      },\n      paragraph: {\n        paragraph: 'Paràgraf',\n        outdent: 'Menys tabulació',\n        indent: 'Més tabulació',\n        left: 'Alinear a l\\'esquerra',\n        center: 'Alinear al mig',\n        right: 'Alinear a la dreta',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Últim color',\n        more: 'Més colors',\n        background: 'Color de fons',\n        foreground: 'Color de lletra',\n        transparent: 'Transparent',\n        setTransparent: 'Establir transparent',\n        reset: 'Restablir',\n        resetToDefault: 'Restablir per defecte'\n      },\n      shortcut: {\n        shortcuts: 'Dreceres de teclat',\n        close: 'Tancar',\n        textFormatting: 'Format de text',\n        action: 'Acció',\n        paragraphFormatting: 'Format de paràgraf',\n        documentStyle: 'Estil del document',\n        extraKeys: 'Tecles adicionals'\n      },\n      help : {\n        'insertParagraph': 'Inserir paràgraf',\n        'undo': 'Desfer l\\'última acció',\n        'redo': 'Refer l\\'última acció',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulació',\n        'bold': 'Establir estil negreta',\n        'italic': 'Establir estil cursiva',\n        'underline': 'Establir estil subratllat',\n        'strikethrough': 'Establir estil ratllat',\n        'removeFormat': 'Netejar estil',\n        'justifyLeft': 'Alinear a l\\'esquerra',\n        'justifyCenter': 'Alinear al centre',\n        'justifyRight': 'Alinear a la dreta',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Inserir llista desendreçada',\n        'insertOrderedList': 'Inserir llista endreçada',\n        'outdent': 'Reduïr tabulació del paràgraf',\n        'indent': 'Augmentar tabulació del paràgraf',\n        'formatPara': 'Canviar l\\'estil del bloc com a un paràgraf (etiqueta P)',\n        'formatH1': 'Canviar l\\'estil del bloc com a un H1',\n        'formatH2': 'Canviar l\\'estil del bloc com a un H2',\n        'formatH3': 'Canviar l\\'estil del bloc com a un H3',\n        'formatH4': 'Canviar l\\'estil del bloc com a un H4',\n        'formatH5': 'Canviar l\\'estil del bloc com a un H5',\n        'formatH6': 'Canviar l\\'estil del bloc com a un H6',\n        'insertHorizontalRule': 'Inserir una línia horitzontal',\n        'linkDialog.show': 'Mostrar panel d\\'enllaços'\n      },\n      history: {\n        undo: 'Desfer',\n        redo: 'Refer'\n      },\n      specialChar: {\n        specialChar: 'CARÀCTERS ESPECIALS',\n        select: 'Selecciona caràcters especials'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-cs-CZ.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'cs-CZ': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podtržené',\n        clear: 'Odstranit styl písma',\n        height: 'Výška řádku',\n        strikethrough: 'Přeškrtnuté',\n        size: 'Velikost písma'\n      },\n      image: {\n        image: 'Obrázek',\n        insert: 'Vložit obrázek',\n        resizeFull: 'Původní velikost',\n        resizeHalf: 'Poloviční velikost',\n        resizeQuarter: 'Čtvrteční velikost',\n        floatLeft: 'Umístit doleva',\n        floatRight: 'Umístit doprava',\n        floatNone: 'Neobtékat textem',\n        dragImageHere: 'Přetáhnout sem obrázek',\n        selectFromFiles: 'Vybrat soubor',\n        url: 'URL obrázku'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložit video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvořit odkaz',\n        unlink: 'Zrušit odkaz',\n        edit: 'Upravit',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na jaké URL má tento odkaz vést?',\n        openInNewWindow: 'Otevřít v novém okně'\n      },\n      table: {\n        table: 'Tabulka'\n      },\n      hr: {\n        insert: 'Vložit vodorovnou čáru'\n      },\n      style: {\n        style: 'Styl',\n        p: 'Normální',\n        blockquote: 'Citace',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový seznam',\n        ordered: 'Číselný seznam'\n      },\n      options: {\n        help: 'Nápověda',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odstavec',\n        outdent: 'Zvětšit odsazení',\n        indent: 'Zmenšit odsazení',\n        left: 'Zarovnat doleva',\n        center: 'Zarovnat na střed',\n        right: 'Zarovnat doprava',\n        justify: 'Zarovnat oboustranně'\n      },\n      color: {\n        recent: 'Aktuální barva',\n        more: 'Další barvy',\n        background: 'Barva pozadí',\n        foreground: 'Barva písma',\n        transparent: 'Průhlednost',\n        setTransparent: 'Nastavit průhlednost',\n        reset: 'Obnovit',\n        resetToDefault: 'Obnovit výchozí'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové zkratky',\n        close: 'Zavřít',\n        textFormatting: 'Formátování textu',\n        action: 'Akce',\n        paragraphFormatting: 'Formátování odstavce',\n        documentStyle: 'Styl dokumentu'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok vpřed'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-da-DK.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'da-DK': {\n      font: {\n        bold: 'Fed',\n        italic: 'Kursiv',\n        underline: 'Understreget',\n        clear: 'Fjern formatering',\n        height: 'Højde',\n        name: 'Skrifttype',\n        strikethrough: 'Gennemstreget',\n        subscript: 'Sænket skrift',\n        superscript: 'Hævet skrift',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Billede',\n        insert: 'Indsæt billede',\n        resizeFull: 'Original størrelse',\n        resizeHalf: 'Halv størrelse',\n        resizeQuarter: 'Kvart størrelse',\n        floatLeft: 'Venstrestillet',\n        floatRight: 'Højrestillet',\n        floatNone: 'Fjern formatering',\n        shapeRounded: 'Form: Runde kanter',\n        shapeCircle: 'Form: Cirkel',\n        shapeThumbnail: 'Form: Miniature',\n        shapeNone: 'Form: Ingen',\n        dragImageHere: 'Træk billede hertil',\n        dropImage: 'Slip billede',\n        selectFromFiles: 'Vælg billed-fil',\n        maximumFileSize: 'Maks fil størrelse',\n        maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!',\n        url: 'Billede URL',\n        remove: 'Fjern billede'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Indsæt Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Indsæt link',\n        unlink: 'Fjern link',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Hvor skal linket pege hen?',\n        openInNewWindow: 'Åbn i nyt vindue'\n      },\n      table: {\n        table: 'Tabel'\n      },\n      hr: {\n        insert: 'Indsæt horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktopstillet liste',\n        ordered: 'Nummereret liste'\n      },\n      options: {\n        help: 'Hjælp',\n        fullscreen: 'Fuld skærm',\n        codeview: 'HTML-Visning'\n      },\n      paragraph: {\n        paragraph: 'Afsnit',\n        outdent: 'Formindsk indryk',\n        indent: 'Forøg indryk',\n        left: 'Venstrestillet',\n        center: 'Centreret',\n        right: 'Højrestillet',\n        justify: 'Blokjuster'\n      },\n      color: {\n        recent: 'Nyligt valgt farve',\n        more: 'Flere farver',\n        background: 'Baggrund',\n        foreground: 'Forgrund',\n        transparent: 'Transparent',\n        setTransparent: 'Sæt transparent',\n        reset: 'Nulstil',\n        resetToDefault: 'Gendan standardindstillinger'\n      },\n      shortcut: {\n        shortcuts: 'Genveje',\n        close: 'Luk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Afsnitsformatering',\n        documentStyle: 'Dokumentstil'\n      },\n      history: {\n        undo: 'Fortryd',\n        redo: 'Annuller fortryd'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-de-DE.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'de-DE': {\n      font: {\n        bold: 'Fett',\n        italic: 'Kursiv',\n        underline: 'Unterstreichen',\n        clear: 'Zurücksetzen',\n        height: 'Zeilenhöhe',\n        strikethrough: 'Durchgestrichen',\n        size: 'Schriftgröße'\n      },\n      image: {\n        image: 'Grafik',\n        insert: 'Grafik einfügen',\n        resizeFull: 'Originalgröße',\n        resizeHalf: 'Größe 1/2',\n        resizeQuarter: 'Größe 1/4',\n        floatLeft: 'Linksbündig',\n        floatRight: 'Rechtsbündig',\n        floatNone: 'Kein Textfluss',\n        shapeRounded: 'Rahmen: Abgerundet',\n        shapeCircle: 'Rahmen: Kreisförmig',\n        shapeThumbnail: 'Rahmen: Thumbnail',\n        shapeNone: 'Kein Rahmen',\n        dragImageHere: 'Ziehen Sie ein Bild mit der Maus hierher',\n        selectFromFiles: 'Wählen Sie eine Datei aus',\n        maximumFileSize: 'Maximale Dateigröße',\n        maximumFileSizeError: 'Maximale Dateigröße überschritten',\n        url: 'Grafik URL',\n        remove: 'Grafik entfernen'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Video einfügen',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link einfügen',\n        unlink: 'Link entfernen',\n        edit: 'Editieren',\n        textToDisplay: 'Anzeigetext',\n        url: 'Ziel des Links?',\n        openInNewWindow: 'In einem neuen Fenster öffnen'\n      },\n      table: {\n        table: 'Tabelle'\n      },\n      hr: {\n        insert: 'Eine horizontale Linie einfügen'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Zitat',\n        pre: 'Quellcode',\n        h1: 'Überschrift 1',\n        h2: 'Überschrift 2',\n        h3: 'Überschrift 3',\n        h4: 'Überschrift 4',\n        h5: 'Überschrift 5',\n        h6: 'Überschrift 6'\n      },\n      lists: {\n        unordered: 'Aufzählung',\n        ordered: 'Nummerierung'\n      },\n      options: {\n        help: 'Hilfe',\n        fullscreen: 'Vollbild',\n        codeview: 'HTML-Code anzeigen'\n      },\n      paragraph: {\n        paragraph: 'Absatz',\n        outdent: 'Einzug vergrößern',\n        indent: 'Einzug verkleinern',\n        left: 'Links ausrichten',\n        center: 'Zentriert ausrichten',\n        right: 'Rechts ausrichten',\n        justify: 'Blocksatz'\n      },\n      color: {\n        recent: 'Letzte Farbe',\n        more: 'Mehr Farben',\n        background: 'Hintergrundfarbe',\n        foreground: 'Schriftfarbe',\n        transparent: 'Transparenz',\n        setTransparent: 'Transparenz setzen',\n        reset: 'Zurücksetzen',\n        resetToDefault: 'Auf Standard zurücksetzen'\n      },\n      shortcut: {\n        shortcuts: 'Tastenkürzel',\n        close: 'Schließen',\n        textFormatting: 'Textformatierung',\n        action: 'Aktion',\n        paragraphFormatting: 'Absatzformatierung',\n        documentStyle: 'Dokumentenstil'\n      },\n      history: {\n        undo: 'Rückgängig',\n        redo: 'Wiederholen'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-es-ES.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'es-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subrayado',\n        clear: 'Quitar estilo de fuente',\n        height: 'Altura de línea',\n        name: 'Fuente',\n        strikethrough: 'Tachado',\n        superscript: 'Superíndice',\n        subscript: 'Subíndice',\n        size: 'Tamaño de la fuente'\n      },\n      image: {\n        image: 'Imagen',\n        insert: 'Insertar imagen',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar a la mitad',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        floatLeft: 'Flotar a la izquierda',\n        floatRight: 'Flotar a la derecha',\n        floatNone: 'No flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Marco',\n        shapeNone: 'Forma: Ninguna',\n        dragImageHere: 'Arrastrar una imagen o texto aquí',\n        dropImage: 'Suelta la imagen o texto',\n        selectFromFiles: 'Seleccionar desde los archivos',\n        maximumFileSize: 'Tamaño máximo del archivo',\n        maximumFileSizeError: 'Has superado el tamaño máximo del archivo.',\n        url: 'URL de la imagen',\n        remove: 'Eliminar imagen'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link del vídeo',\n        insert: 'Insertar vídeo',\n        url: '¿URL del vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Insertar link',\n        unlink: 'Quitar link',\n        edit: 'Editar',\n        textToDisplay: 'Texto para mostrar',\n        url: '¿Hacia que URL lleva el link?',\n        openInNewWindow: 'Abrir en una nueva ventana'\n      },\n      table: {\n        table: 'Tabla'\n      },\n      hr: {\n        insert: 'Insertar línea horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'p',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista desordenada',\n        ordered: 'Lista ordenada'\n      },\n      options: {\n        help: 'Ayuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver código fuente'\n      },\n      paragraph: {\n        paragraph: 'Párrafo',\n        outdent: 'Menos tabulación',\n        indent: 'Más tabulación',\n        left: 'Alinear a la izquierda',\n        center: 'Alinear al centro',\n        right: 'Alinear a la derecha',\n        justify: 'Justificar'\n      },\n      color: {\n        recent: 'Último color',\n        more: 'Más colores',\n        background: 'Color de fondo',\n        foreground: 'Color de fuente',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar por defecto'\n      },\n      shortcut: {\n        shortcuts: 'Atajos de teclado',\n        close: 'Cerrar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de párrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionales'\n      },\n      help : {\n        'insertParagraph': 'Insertar párrafo',\n        'undo': 'Deshacer última acción',\n        'redo': 'Rehacer última acción',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulación',\n        'bold': 'Establecer estilo negrita',\n        'italic': 'Establecer estilo cursiva',\n        'underline': 'Establecer estilo subrayado',\n        'strikethrough': 'Establecer estilo tachado',\n        'removeFormat': 'Limpiar estilo',\n        'justifyLeft': 'Alinear a la izquierda',\n        'justifyCenter': 'Alinear al centro',\n        'justifyRight': 'Alinear a la derecha',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Insertar lista desordenada',\n        'insertOrderedList': 'Insertar lista ordenada',\n        'outdent': 'Reducir tabulación del párrafo',\n        'indent': 'Aumentar tabulación del párrafo',\n        'formatPara': 'Cambiar estilo del bloque a párrafo (etiqueta P)',\n        'formatH1': 'Cambiar estilo del bloque a H1',\n        'formatH2': 'Cambiar estilo del bloque a H2',\n        'formatH3': 'Cambiar estilo del bloque a H3',\n        'formatH4': 'Cambiar estilo del bloque a H4',\n        'formatH5': 'Cambiar estilo del bloque a H5',\n        'formatH6': 'Cambiar estilo del bloque a H6',\n        'insertHorizontalRule': 'Insertar línea horizontal',\n        'linkDialog.show': 'Mostrar panel enlaces'\n      },\n      history: {\n        undo: 'Deshacer',\n        redo: 'Rehacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIALES',\n        select: 'Selecciona Caracteres especiales'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-es-EU.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'es-EU': {\n      font: {\n        bold: 'Lodia',\n        italic: 'Etzana',\n        underline: 'Azpimarratua',\n        clear: 'Estiloa kendu',\n        height: 'Lerro altuera',\n        name: 'Tipografia',\n        strikethrough: 'Marratua',\n        size: 'Letren neurria'\n      },\n      image: {\n        image: 'Irudia',\n        insert: 'Irudi bat txertatu',\n        resizeFull: 'Jatorrizko neurrira aldatu',\n        resizeHalf: 'Neurria erdira aldatu',\n        resizeQuarter: 'Neurria laurdenera aldatu',\n        floatLeft: 'Ezkerrean kokatu',\n        floatRight: 'Eskuinean kokatu',\n        floatNone: 'Kokapenik ez ezarri',\n        dragImageHere: 'Irudi bat ezarri hemen',\n        selectFromFiles: 'Zure fitxategi bat aukeratu',\n        url: 'Irudiaren URL helbidea'\n      },\n      video: {\n        video: 'Bideoa',\n        videoLink: 'Bideorako esteka',\n        insert: 'Bideo berri bat txertatu',\n        url: 'Bideoaren URL helbidea',\n        providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)'\n      },\n      link: {\n        link: 'Esteka',\n        insert: 'Esteka bat txertatu',\n        unlink: 'Esteka ezabatu',\n        edit: 'Editatu',\n        textToDisplay: 'Estekaren testua',\n        url: 'Estekaren URL helbidea',\n        openInNewWindow: 'Leiho berri batean ireki'\n      },\n      table: {\n        table: 'Taula' //Tabla\n      },\n      hr: {\n        insert: 'Marra horizontala txertatu' //Insertar línea horizontal\n      },\n      style: {\n        style: 'Estiloa',\n        p: 'p',\n        blockquote: 'Aipamena',\n        pre: 'Kodea',\n        h1: '1. izenburua',\n        h2: '2. izenburua',\n        h3: '3. izenburua',\n        h4: '4. izenburua',\n        h5: '5. izenburua',\n        h6: '6. izenburua'\n      },\n      lists: {\n        unordered: 'Ordenatu gabeko zerrenda',\n        ordered: 'Zerrenda ordenatua'\n      },\n      options: {\n        help: 'Laguntza',\n        fullscreen: 'Pantaila osoa',\n        codeview: 'Kodea ikusi'\n      },\n      paragraph: {\n        paragraph: 'Paragrafoa',\n        outdent: 'Koska txikiagoa',\n        indent: 'Koska handiagoa',\n        left: 'Ezkerrean kokatu',\n        center: 'Erdian kokatu',\n        right: 'Eskuinean kokatu',\n        justify: 'Justifikatu'\n      },\n      color: {\n        recent: 'Azken kolorea',\n        more: 'Kolore gehiago',\n        background: 'Atzeko planoa',\n        foreground: 'Aurreko planoa',\n        transparent: 'Gardena',\n        setTransparent: 'Gardendu',\n        reset: 'Lehengoratu',\n        resetToDefault: 'Berrezarri lehenetsia'\n      },\n      shortcut: {\n        shortcuts: 'Lasterbideak',\n        close: 'Itxi',\n        textFormatting: 'Testuaren formatua',\n        action: 'Ekintza',\n        paragraphFormatting: 'Paragrafoaren formatua',\n        documentStyle: 'Dokumentuaren estiloa'\n      },\n      history: {\n        undo: 'Desegin',\n        redo: 'Berregin'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-fa-IR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'fa-IR': {\n      font: {\n        bold: 'درشت',\n        italic: 'خمیده',\n        underline: 'میان خط',\n        clear: 'پاک کردن فرمت فونت',\n        height: 'فاصله ی خطی',\n        name: 'اسم فونت',\n        strikethrough: 'Strike',\n        size: 'اندازه ی فونت'\n      },\n      image: {\n        image: 'تصویر',\n        insert: 'وارد کردن تصویر',\n        resizeFull: 'تغییر به اندازه ی کامل',\n        resizeHalf: 'تغییر به اندازه نصف',\n        resizeQuarter: 'تغییر به اندازه یک چهارم',\n        floatLeft: 'چسباندن به چپ',\n        floatRight: 'چسباندن به راست',\n        floatNone: 'بدون چسبندگی',\n        dragImageHere: 'یک تصویر را اینجا بکشید',\n        selectFromFiles: 'فایل ها را انتخاب کنید',\n        url: 'آدرس تصویر',\n        remove: 'حذف تصویر'\n      },\n      video: {\n        video: 'ویدیو',\n        videoLink: 'لینک ویدیو',\n        insert: 'افزودن ویدیو',\n        url: 'آدرس ویدیو ؟',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)'\n      },\n      link: {\n        link: 'لینک',\n        insert: 'اضافه کردن لینک',\n        unlink: 'حذف لینک',\n        edit: 'ویرایش',\n        textToDisplay: 'متن جهت نمایش',\n        url: 'این لینک به چه آدرسی باید برود ؟',\n        openInNewWindow: 'در یک پنجره ی جدید باز شود'\n      },\n      table: {\n        table: 'جدول'\n      },\n      hr: {\n        insert: 'افزودن خط افقی'\n      },\n      style: {\n        style: 'استیل',\n        p: 'نرمال',\n        blockquote: 'نقل قول',\n        pre: 'کد',\n        h1: 'سرتیتر 1',\n        h2: 'سرتیتر 2',\n        h3: 'سرتیتر 3',\n        h4: 'سرتیتر 4',\n        h5: 'سرتیتر 5',\n        h6: 'سرتیتر 6'\n      },\n      lists: {\n        unordered: 'لیست غیر ترتیبی',\n        ordered: 'لیست ترتیبی'\n      },\n      options: {\n        help: 'راهنما',\n        fullscreen: 'نمایش تمام صفحه',\n        codeview: 'مشاهده ی کد'\n      },\n      paragraph: {\n        paragraph: 'پاراگراف',\n        outdent: 'کاهش تو رفتگی',\n        indent: 'افزایش تو رفتگی',\n        left: 'چپ چین',\n        center: 'میان چین',\n        right: 'راست چین',\n        justify: 'بلوک چین'\n      },\n      color: {\n        recent: 'رنگ اخیرا استفاده شده',\n        more: 'رنگ بیشتر',\n        background: 'رنگ پس زمینه',\n        foreground: 'رنگ متن',\n        transparent: 'بی رنگ',\n        setTransparent: 'تنظیم حالت بی رنگ',\n        reset: 'بازنشاندن',\n        resetToDefault: 'حالت پیش فرض'\n      },\n      shortcut: {\n        shortcuts: 'دکمه های میان بر',\n        close: 'بستن',\n        textFormatting: 'فرمت متن',\n        action: 'عملیات',\n        paragraphFormatting: 'فرمت پاراگراف',\n        documentStyle: 'استیل سند'\n      },\n      history: {\n        undo: 'واچیدن',\n        redo: 'بازچیدن'\n      }\n    }\n  });\n})(jQuery);\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-fi-FI.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'fi-FI': {\n      font: {\n        bold: 'Lihavoitu',\n        italic: 'Kursiivi',\n        underline: 'Alleviivaa',\n        clear: 'Tyhjennä muotoilu',\n        height: 'Riviväli',\n        name: 'Kirjasintyyppi',\n        strikethrough: 'Yliviivaus',\n        size: 'Kirjasinkoko'\n      },\n      image: {\n        image: 'Kuva',\n        insert: 'Lisää kuva',\n        resizeFull: 'Koko leveys',\n        resizeHalf: 'Puolikas leveys',\n        resizeQuarter: 'Neljäsosa leveys',\n        floatLeft: 'Sijoita vasemmalle',\n        floatRight: 'Sijoita oikealle',\n        floatNone: 'Ei sijoitusta',\n        dragImageHere: 'Vedä kuva tähän',\n        selectFromFiles: 'Valitse tiedostoista',\n        url: 'URL-osoitteen mukaan',\n        remove: 'Poista kuva'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Linkki videoon',\n        insert: 'Lisää video',\n        url: 'Videon URL-osoite?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)'\n      },\n      link: {\n        link: 'Linkki',\n        insert: 'Lisää linkki',\n        unlink: 'Poista linkki',\n        edit: 'Muokkaa',\n        textToDisplay: 'Näytettävä teksti',\n        url: 'Linkin URL-osoite?',\n        openInNewWindow: 'Avaa uudessa ikkunassa'\n      },\n      table: {\n        table: 'Taulukko'\n      },\n      hr: {\n        insert: 'Lisää vaakaviiva'\n      },\n      style: {\n        style: 'Tyyli',\n        p: 'Normaali',\n        blockquote: 'Lainaus',\n        pre: 'Koodi',\n        h1: 'Otsikko 1',\n        h2: 'Otsikko 2',\n        h3: 'Otsikko 3',\n        h4: 'Otsikko 4',\n        h5: 'Otsikko 5',\n        h6: 'Otsikko 6'\n      },\n      lists: {\n        unordered: 'Luettelomerkitty luettelo',\n        ordered: 'Numeroitu luettelo'\n      },\n      options: {\n        help: 'Ohje',\n        fullscreen: 'Koko näyttö',\n        codeview: 'HTML-näkymä'\n      },\n      paragraph: {\n        paragraph: 'Kappale',\n        outdent: 'Pienennä sisennystä',\n        indent: 'Suurenna sisennystä',\n        left: 'Tasaus vasemmalle',\n        center: 'Keskitä',\n        right: 'Tasaus oikealle',\n        justify: 'Tasaa'\n      },\n      color: {\n        recent: 'Viimeisin väri',\n        more: 'Lisää värejä',\n        background: 'Taustaväri',\n        foreground: 'Tekstin väri',\n        transparent: 'Läpinäkyvä',\n        setTransparent: 'Aseta läpinäkyväksi',\n        reset: 'Palauta',\n        resetToDefault: 'Palauta oletusarvoksi'\n      },\n      shortcut: {\n        shortcuts: 'Pikanäppäimet',\n        close: 'Sulje',\n        textFormatting: 'Tekstin muotoilu',\n        action: 'Toiminto',\n        paragraphFormatting: 'Kappaleen muotoilu',\n        documentStyle: 'Asiakirjan tyyli'\n      },\n      history: {\n        undo: 'Kumoa',\n        redo: 'Toista'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-fr-FR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'fr-FR': {\n      font: {\n        bold: 'Gras',\n        italic: 'Italique',\n        underline: 'Souligné',\n        clear: 'Effacer la mise en forme',\n        height: 'Interligne',\n        name: 'Famille de police',\n        strikethrough: 'Barré',\n        superscript: 'Exposant',\n        subscript: 'Indice',\n        size: 'Taille de police'\n      },\n      image: {\n        image: 'Image',\n        insert: 'Insérer une image',\n        resizeFull: 'Taille originale',\n        resizeHalf: 'Redimensionner à 50 %',\n        resizeQuarter: 'Redimensionner à 25 %',\n        floatLeft: 'Aligné à gauche',\n        floatRight: 'Aligné à droite',\n        floatNone: 'Pas d\\'alignement',\n        shapeRounded: 'Forme: Rectangle arrondie',\n        shapeCircle: 'Forme: Cercle',\n        shapeThumbnail: 'Forme: Vignette',\n        shapeNone: 'Forme: Aucune',\n        dragImageHere: 'Faites glisser une image ou un texte dans ce cadre',\n        dropImage: 'Lachez l\\'image ou le texte',\n        selectFromFiles: 'Choisir un fichier',\n        maximumFileSize: 'Taille de fichier maximale',\n        maximumFileSizeError: 'Taille maximale du fichier dépassée',\n        url: 'URL de l\\'image',\n        remove: 'Supprimer l\\'image'\n      },\n      video: {\n        video: 'Vidéo',\n        videoLink: 'Lien vidéo',\n        insert: 'Insérer une vidéo',\n        url: 'URL de la vidéo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Lien',\n        insert: 'Insérer un lien',\n        unlink: 'Supprimer un lien',\n        edit: 'Modifier',\n        textToDisplay: 'Texte à afficher',\n        url: 'URL du lien',\n        openInNewWindow: 'Ouvrir dans une nouvelle fenêtre'\n      },\n      table: {\n        table: 'Tableau'\n      },\n      hr: {\n        insert: 'Insérer une ligne horizontale'\n      },\n      style: {\n        style: 'Style',\n        p: 'p',\n        blockquote: 'Citation',\n        pre: 'Code source',\n        h1: 'Titre 1',\n        h2: 'Titre 2',\n        h3: 'Titre 3',\n        h4: 'Titre 4',\n        h5: 'Titre 5',\n        h6: 'Titre 6'\n      },\n      lists: {\n        unordered: 'Liste à puces',\n        ordered: 'Liste numérotée'\n      },\n      options: {\n        help: 'Aide',\n        fullscreen: 'Plein écran',\n        codeview: 'Afficher le code HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraphe',\n        outdent: 'Diminuer le retrait',\n        indent: 'Augmenter le retrait',\n        left: 'Aligner à gauche',\n        center: 'Centrer',\n        right: 'Aligner à droite',\n        justify: 'Justifier'\n      },\n      color: {\n        recent: 'Dernière couleur sélectionnée',\n        more: 'Plus de couleurs',\n        background: 'Couleur de fond',\n        foreground: 'Couleur de police',\n        transparent: 'Transparent',\n        setTransparent: 'Définir la transparence',\n        reset: 'Restaurer',\n        resetToDefault: 'Restaurer la couleur par défaut'\n      },\n      shortcut: {\n        shortcuts: 'Raccourcis',\n        close: 'Fermer',\n        textFormatting: 'Mise en forme du texte',\n        action: 'Action',\n        paragraphFormatting: 'Mise en forme des paragraphes',\n        documentStyle: 'Style du document',\n        extraKeys: 'Touches supplémentaires'\n      },\n      history: {\n        undo: 'Annuler la dernière action',\n        redo: 'Restaurer la dernière action annulée'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-gl-ES.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'gl-ES': {\n      font: {\n        bold: 'Negrita',\n        italic: 'Cursiva',\n        underline: 'Subliñado',\n        clear: 'Quitar estilo de fonte',\n        height: 'Altura de liña',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        superscript: 'Superíndice',\n        subscript: 'Subíndice',\n        size: 'Tamaño da fonte'\n      },\n      image: {\n        image: 'Imaxe',\n        insert: 'Inserir imaxe',\n        resizeFull: 'Redimensionar a tamaño completo',\n        resizeHalf: 'Redimensionar á metade',\n        resizeQuarter: 'Redimensionar a un cuarto',\n        floatLeft: 'Flotar á esquerda',\n        floatRight: 'Flotar á dereita',\n        floatNone: 'Non flotar',\n        shapeRounded: 'Forma: Redondeado',\n        shapeCircle: 'Forma: Círculo',\n        shapeThumbnail: 'Forma: Marco',\n        shapeNone: 'Forma: Ningunha',\n        dragImageHere: 'Arrastrar unha imaxe ou texto aquí',\n        dropImage: 'Solta a imaxe ou texto',\n        selectFromFiles: 'Seleccionar desde os arquivos',\n        maximumFileSize: 'Tamaño máximo do arquivo',\n        maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.',\n        url: 'URL da imaxe',\n        remove: 'Eliminar imaxe'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Ligazón do vídeo',\n        insert: 'Insertar vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)'\n      },\n      link: {\n        link: 'Ligazón',\n        insert: 'Inserir Ligazón',\n        unlink: 'Quitar Ligazón',\n        edit: 'Editar',\n        textToDisplay: 'Texto para amosar',\n        url: 'Cara a que URL leva a ligazón?',\n        openInNewWindow: 'Abrir nunha nova xanela'\n      },\n      table: {\n        table: 'Táboa'\n      },\n      hr: {\n        insert: 'Inserir liña horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        normal: 'Normal',\n        blockquote: 'Cita',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista desordenada',\n        ordered: 'Lista ordenada'\n      },\n      options: {\n        help: 'Axuda',\n        fullscreen: 'Pantalla completa',\n        codeview: 'Ver código fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menos tabulación',\n        indent: 'Máis tabulación',\n        left: 'Aliñar á esquerda',\n        center: 'Aliñar ao centro',\n        right: 'Aliñar á dereita',\n        justify: 'Xustificar'\n      },\n      color: {\n        recent: 'Última cor',\n        more: 'Máis cores',\n        background: 'Cor de fondo',\n        foreground: 'Cor de fuente',\n        transparent: 'Transparente',\n        setTransparent: 'Establecer transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar por defecto'\n      },\n      shortcut: {\n        shortcuts: 'Atallos de teclado',\n        close: 'Pechar',\n        textFormatting: 'Formato de texto',\n        action: 'Acción',\n        paragraphFormatting: 'Formato de parágrafo',\n        documentStyle: 'Estilo de documento',\n        extraKeys: 'Teclas adicionais'\n      },\n      help : {\n        'insertParagraph': 'Inserir parágrafo',\n        'undo': 'Desfacer última acción',\n        'redo': 'Refacer última acción',\n        'tab': 'Tabular',\n        'untab': 'Eliminar tabulación',\n        'bold': 'Establecer estilo negrita',\n        'italic': 'Establecer estilo cursiva',\n        'underline': 'Establecer estilo subliñado',\n        'strikethrough': 'Establecer estilo riscado',\n        'removeFormat': 'Limpar estilo',\n        'justifyLeft': 'Aliñar á esquerda',\n        'justifyCenter': 'Aliñar ao centro',\n        'justifyRight': 'Aliñar á dereita',\n        'justifyFull': 'Xustificar',\n        'insertUnorderedList': 'Inserir lista desordenada',\n        'insertOrderedList': 'Inserir lista ordenada',\n        'outdent': 'Reducir tabulación do parágrafo',\n        'indent': 'Aumentar tabulación do parágrafo',\n        'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)',\n        'formatH1': 'Mudar estilo do bloque a H1',\n        'formatH2': 'Mudar estilo do bloque a H2',\n        'formatH3': 'Mudar estilo do bloque a H3',\n        'formatH4': 'Mudar estilo do bloque a H4',\n        'formatH5': 'Mudar estilo do bloque a H5',\n        'formatH6': 'Mudar estilo do bloque a H6',\n        'insertHorizontalRule': 'Inserir liña horizontal',\n        'linkDialog.show': 'Amosar panel ligazóns'\n      },\n      history: {\n        undo: 'Desfacer',\n        redo: 'Refacer'\n      },\n      specialChar: {\n        specialChar: 'CARACTERES ESPECIAIS',\n        select: 'Selecciona Caracteres especiais'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-he-IL.js",
    "content": "﻿(function ($) {\n  $.extend($.summernote.lang, {\n    'he-IL': {\n      font: {\n        bold: 'מודגש',\n        italic: 'נטוי',\n        underline: 'קו תחתון',\n        clear: 'נקה עיצוב',\n        height: 'גובה',\n        name: 'גופן',\n        strikethrough: 'קו חוצה',\n        subscript: 'כתב תחתי',\n        superscript: 'כתב עילי',\n        size: 'גודל גופן'\n      },\n      image: {\n        image: 'תמונה',\n        insert: 'הוסף תמונה',\n        resizeFull: 'גודל מלא',\n        resizeHalf: 'להקטין לחצי',\n        resizeQuarter: 'להקטין לרבע',\n        floatLeft: 'יישור לשמאל',\n        floatRight: 'יישור לימין',\n        floatNone: 'ישר',\n        dragImageHere: 'גרור תמונה לכאן',\n        selectFromFiles: 'בחר מתוך קבצים',\n        url: 'נתיב לתמונה',\n        remove: 'הסר תמונה'\n      },\n      video: {\n        video: 'סרטון',\n        videoLink: 'קישור לסרטון',\n        insert: 'הוסף סרטון',\n        url: 'קישור לסרטון',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)'\n      },\n      link: {\n        link: 'קישור',\n        insert: 'הוסף קישור',\n        unlink: 'הסר קישור',\n        edit: 'ערוך',\n        textToDisplay: 'טקסט להציג',\n        url: 'קישור',\n        openInNewWindow: 'פתח בחלון חדש'\n      },\n      table: {\n        table: 'טבלה'\n      },\n      hr: {\n        insert: 'הוסף קו'\n      },\n      style: {\n        style: 'עיצוב',\n        p: 'טקסט רגיל',\n        blockquote: 'ציטוט',\n        pre: 'קוד',\n        h1: 'כותרת 1',\n        h2: 'כותרת 2',\n        h3: 'כותרת 3',\n        h4: 'כותרת 4',\n        h5: 'כותרת 5',\n        h6: 'כותרת 6'\n      },\n      lists: {\n        unordered: 'רשימת תבליטים',\n        ordered: 'רשימה ממוספרת'\n      },\n      options: {\n        help: 'עזרה',\n        fullscreen: 'מסך מלא',\n        codeview: 'תצוגת קוד'\n      },\n      paragraph: {\n        paragraph: 'פסקה',\n        outdent: 'הקטן כניסה',\n        indent: 'הגדל כניסה',\n        left: 'יישור לשמאל',\n        center: 'יישור למרכז',\n        right: 'יישור לימין',\n        justify: 'מיושר'\n      },\n      color: {\n        recent: 'צבע טקסט אחרון',\n        more: 'עוד צבעים',\n        background: 'צבע רקע',\n        foreground: 'צבע טקסט',\n        transparent: 'שקוף',\n        setTransparent: 'קבע כשקוף',\n        reset: 'איפוס',\n        resetToDefault: 'אפס לברירת מחדל'\n      },\n      shortcut: {\n        shortcuts: 'קיצורי מקלדת',\n        close: 'סגור',\n        textFormatting: 'עיצוב הטקסט',\n        action: 'פעולה',\n        paragraphFormatting: 'סגנונות פסקה',\n        documentStyle: 'עיצוב המסמך',\n        extraKeys: 'קיצורים נוספים'\n      },\n      history: {\n        undo: 'בטל פעולה',\n        redo: 'בצע שוב'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-hr-HR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'hr-HR': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        strikethrough: 'Precrtano',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Ubaci sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Poravnaj lijevo',\n        floatRight: 'Poravnaj desno',\n        floatNone: 'Bez poravnanja',\n        dragImageHere: 'Povuci sliku ovdje',\n        selectFromFiles: 'Izaberi iz datoteke',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza na video',\n        insert: 'Ubaci video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Ubaci vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tablica'\n      },\n      hr: {\n        insert: 'Ubaci horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kôd',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerirana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko cijelog ekrana',\n        codeview: 'Izvorni kôd'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povećaj uvlačenje',\n        left: 'Poravnaj lijevo',\n        center: 'Centrirano',\n        right: 'Poravnaj desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Posljednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Prozirna',\n        setTransparent: 'Prozirna',\n        reset: 'Poništi',\n        resetToDefault: 'Podrazumijevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice s tipkovnice',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-hu-HU.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'hu-HU': {\n      font: {\n        bold: 'Félkövér',\n        italic: 'Dőlt',\n        underline: 'Aláhúzott',\n        clear: 'Formázás törlése',\n        height: 'Sorköz',\n        name: 'Betűtípus',\n        strikethrough: 'Áthúzott',\n        size: 'Betűméret'\n      },\n      image: {\n        image: 'Kép',\n        insert: 'Kép beszúrása',\n        resizeFull: 'Átméretezés teljes méretre',\n        resizeHalf: 'Átméretezés felére',\n        resizeQuarter: 'Átméretezés negyedére',\n        floatLeft: 'Igazítás balra',\n        floatRight: 'Igazítás jobbra',\n        floatNone: 'Igazítás törlése',\n        dragImageHere: 'Ide húzhat képet vagy szöveget',\n        dropImage: 'Engedje el a képet vagy szöveget',\n        selectFromFiles: 'Fájlok kiválasztása',\n        url: 'Kép URL címe',\n        remove: 'Kép törlése'\n      },\n      video: {\n        video: 'Videó',\n        videoLink: 'Videó hivatkozás',\n        insert: 'Videó beszúrása',\n        url: 'Videó URL címe',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)'\n      },\n      link: {\n        link: 'Hivatkozás',\n        insert: 'Hivatkozás beszúrása',\n        unlink: 'Hivatkozás megszüntetése',\n        edit: 'Szerkesztés',\n        textToDisplay: 'Megjelenítendő szöveg',\n        url: 'Milyen URL címre hivatkozzon?',\n        openInNewWindow: 'Megnyitás új ablakban'\n      },\n      table: {\n        table: 'Táblázat'\n      },\n      hr: {\n        insert: 'Elválasztó vonal beszúrása'\n      },\n      style: {\n        style: 'Stílus',\n        p: 'Normál',\n        blockquote: 'Idézet',\n        pre: 'Kód',\n        h1: 'Fejléc 1',\n        h2: 'Fejléc 2',\n        h3: 'Fejléc 3',\n        h4: 'Fejléc 4',\n        h5: 'Fejléc 5',\n        h6: 'Fejléc 6'\n      },\n      lists: {\n        unordered: 'Listajeles lista',\n        ordered: 'Számozott lista'\n      },\n      options: {\n        help: 'Súgó',\n        fullscreen: 'Teljes képernyő',\n        codeview: 'Kód nézet'\n      },\n      paragraph: {\n        paragraph: 'Bekezdés',\n        outdent: 'Behúzás csökkentése',\n        indent: 'Behúzás növelése',\n        left: 'Igazítás balra',\n        center: 'Igazítás középre',\n        right: 'Igazítás jobbra',\n        justify: 'Sorkizárt'\n      },\n      color: {\n        recent: 'Jelenlegi szín',\n        more: 'További színek',\n        background: 'Háttérszín',\n        foreground: 'Betűszín',\n        transparent: 'Átlátszó',\n        setTransparent: 'Átlászóság beállítása',\n        reset: 'Visszaállítás',\n        resetToDefault: 'Alaphelyzetbe állítás'\n      },\n      shortcut: {\n        shortcuts: 'Gyorsbillentyű',\n        close: 'Bezárás',\n        textFormatting: 'Szöveg formázása',\n        action: 'Művelet',\n        paragraphFormatting: 'Bekezdés formázása',\n        documentStyle: 'Dokumentumstílus'\n      },\n      help: {\n        'insertParagraph': 'Új bekezdés',\n        'undo': 'Visszavonás',\n        'redo': 'Újra',\n        'tab': 'Behúzás növelése',\n        'untab': 'Behúzás csökkentése',\n        'bold': 'Félkövérre állítás',\n        'italic': 'Dőltre állítás',\n        'underline': 'Aláhúzás',\n        'strikethrough': 'Áthúzás',\n        'removeFormat': 'Formázás törlése',\n        'justifyLeft': 'Balra igazítás',\n        'justifyCenter': 'Középre igazítás',\n        'justifyRight': 'Jobbra igazítás',\n        'justifyFull': 'Sorkizárt',\n        'insertUnorderedList': 'Számozatlan lista be/ki',\n        'insertOrderedList': 'Számozott lista be/ki',\n        'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése',\n        'indent': 'Jelenlegi bekezdés behúzása',\n        'formatPara': 'Blokk formázása bekezdésként (P tag)',\n        'formatH1': 'Blokk formázása, mint Fejléc 1',\n        'formatH2': 'Blokk formázása, mint Fejléc 2',\n        'formatH3': 'Blokk formázása, mint Fejléc 3',\n        'formatH4': 'Blokk formázása, mint Fejléc 4',\n        'formatH5': 'Blokk formázása, mint Fejléc 5',\n        'formatH6': 'Blokk formázása, mint Fejléc 6',\n        'insertHorizontalRule': 'Vízszintes vonal beszúrása',\n        'linkDialog.show': 'Link párbeszédablak megjelenítése'\n      },\n      history: {\n        undo: 'Visszavonás',\n        redo: 'Újra'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-id-ID.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'id-ID': {\n      font: {\n        bold: 'Tebal',\n        italic: 'Miring',\n        underline: 'Garis bawah',\n        clear: 'Bersihkan gaya',\n        height: 'Jarak baris',\n        strikethrough: 'Coret',\n        size: 'Ukuran font'\n      },\n      image: {\n        image: 'Gambar',\n        insert: 'Sisipkan gambar',\n        resizeFull: 'Ukuran penuh',\n        resizeHalf: 'Ukuran 50%',\n        resizeQuarter: 'Ukuran 25%',\n        floatLeft: 'Rata kiri',\n        floatRight: 'Rata kanan',\n        floatNone: 'Tidak ada perataan',\n        dragImageHere: 'Tarik gambar pada area ini',\n        selectFromFiles: 'Pilih gambar dari berkas',\n        url: 'URL gambar',\n        remove: 'Hapus Gambar'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Sisipkan video',\n        url: 'Tautan video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)'\n      },\n      link: {\n        link: 'Tautan',\n        insert: 'Tambah tautan',\n        unlink: 'Hapus tautan',\n        edit: 'Edit',\n        textToDisplay: 'Tampilan teks',\n        url: 'Tautan tujuan',\n        openInNewWindow: 'Buka di jendela baru'\n      },\n      table: {\n        table: 'Tabel'\n      },\n      hr: {\n        insert: 'Masukkan garis horizontal'\n      },\n      style: {\n        style: 'Gaya',\n        p: 'p',\n        blockquote: 'Kutipan',\n        pre: 'Kode',\n        h1: 'Heading 1',\n        h2: 'Heading 2',\n        h3: 'Heading 3',\n        h4: 'Heading 4',\n        h5: 'Heading 5',\n        h6: 'Heading 6'\n      },\n      lists: {\n        unordered: 'Pencacahan',\n        ordered: 'Penomoran'\n      },\n      options: {\n        help: 'Bantuan',\n        fullscreen: 'Layar penuh',\n        codeview: 'Kode HTML'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Outdent',\n        indent: 'Indent',\n        left: 'Rata kiri',\n        center: 'Rata tengah',\n        right: 'Rata kanan',\n        justify: 'Rata kanan kiri'\n      },\n      color: {\n        recent: 'Warna sekarang',\n        more: 'Selengkapnya',\n        background: 'Warna latar',\n        foreground: 'Warna font',\n        transparent: 'Transparan',\n        setTransparent: 'Atur transparansi',\n        reset: 'Atur ulang',\n        resetToDefault: 'Kembalikan kesemula'\n      },\n      shortcut: {\n        shortcuts: 'Jalan pintas',\n        close: 'Keluar',\n        textFormatting: 'Format teks',\n        action: 'Aksi',\n        paragraphFormatting: 'Format paragraf',\n        documentStyle: 'Gaya dokumen'\n      },\n      history: {\n        undo: 'Kembali',\n        redo: 'Ulang'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-it-IT.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'it-IT': {\n      font: {\n        bold: 'Testo in grassetto',\n        italic: 'Testo in corsivo',\n        underline: 'Testo sottolineato',\n        clear: 'Elimina la formattazione del testo',\n        height: 'Altezza della linea di testo',\n        name: 'Famiglia Font',\n        strikethrough: 'Testo barrato',\n        size: 'Dimensione del carattere'\n      },\n      image: {\n        image: 'Immagine',\n        insert: 'Inserisci Immagine',\n        resizeFull: 'Dimensioni originali',\n        resizeHalf: 'Ridimensiona al 50%',\n        resizeQuarter: 'Ridimensiona al 25%',\n        floatLeft: 'Posiziona a sinistra',\n        floatRight: 'Posiziona a destra',\n        floatNone: 'Nessun posizionamento',\n        dragImageHere: 'Trascina qui un\\'immagine',\n        selectFromFiles: 'Scegli dai Documenti',\n        url: 'URL dell\\'immagine',\n        remove: 'Rimuovi immagine'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Collegamento ad un Video',\n        insert: 'Inserisci Video',\n        url: 'URL del Video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'\n      },\n      link: {\n        link: 'Collegamento',\n        insert: 'Inserisci Collegamento',\n        unlink: 'Elimina collegamento',\n        edit: 'Modifica collegamento',\n        textToDisplay: 'Testo del collegamento',\n        url: 'URL del collegamento',\n        openInNewWindow: 'Apri in una nuova finestra'\n      },\n      table: {\n        table: 'Tabella'\n      },\n      hr: {\n        insert: 'Inserisce una linea di separazione'\n      },\n      style: {\n        style: 'Stili',\n        p: 'pe',\n        blockquote: 'Citazione',\n        pre: 'Codice',\n        h1: 'Titolo 1',\n        h2: 'Titolo 2',\n        h3: 'Titolo 3',\n        h4: 'Titolo 4',\n        h5: 'Titolo 5',\n        h6: 'Titolo 6'\n      },\n      lists: {\n        unordered: 'Elenco non ordinato',\n        ordered: 'Elenco ordinato'\n      },\n      options: {\n        help: 'Aiuto',\n        fullscreen: 'Modalità a tutto schermo',\n        codeview: 'Visualizza codice'\n      },\n      paragraph: {\n        paragraph: 'Paragrafo',\n        outdent: 'Diminuisce il livello di rientro',\n        indent: 'Aumenta il livello di rientro',\n        left: 'Allinea a sinistra',\n        center: 'Centra',\n        right: 'Allinea a destra',\n        justify: 'Giustifica (allinea a destra e sinistra)'\n      },\n      color: {\n        recent: 'Ultimo colore utilizzato',\n        more: 'Altri colori',\n        background: 'Colore di sfondo',\n        foreground: 'Colore',\n        transparent: 'Trasparente',\n        setTransparent: 'Trasparente',\n        reset: 'Reimposta',\n        resetToDefault: 'Reimposta i colori'\n      },\n      shortcut: {\n        shortcuts: 'Scorciatoie da tastiera',\n        close: 'Chiudi',\n        textFormatting: 'Formattazione testo',\n        action: 'Azioni',\n        paragraphFormatting: 'Formattazione paragrafo',\n        documentStyle: 'Stili'\n      },\n      history: {\n        undo: 'Annulla',\n        redo: 'Ripristina'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ja-JP.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ja-JP': {\n      font: {\n        bold: '太字',\n        italic: '斜体',\n        underline: '下線',\n        clear: 'クリア',\n        height: '文字高',\n        name: 'フォント',\n        strikethrough: '取り消し線',\n        size: '大きさ'\n      },\n      image: {\n        image: '画像',\n        insert: '画像挿入',\n        resizeFull: '最大化',\n        resizeHalf: '1/2',\n        resizeQuarter: '1/4',\n        floatLeft: '左寄せ',\n        floatRight: '右寄せ',\n        floatNone: '寄せ解除',\n        dragImageHere: 'ここに画像をドラッグしてください',\n        selectFromFiles: '画像ファイルを選ぶ',\n        url: 'URLから画像を挿入する',\n        remove: '画像を削除する'\n      },\n      video: {\n        video: '動画',\n        videoLink: '動画リンク',\n        insert: '動画挿入',\n        url: '動画のURL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)'\n      },\n      link: {\n        link: 'リンク',\n        insert: 'リンク挿入',\n        unlink: 'リンク解除',\n        edit: '編集',\n        textToDisplay: 'リンク文字列',\n        url: 'URLを入力してください',\n        openInNewWindow: '新しいウィンドウで開く'\n      },\n      table: {\n        table: 'テーブル'\n      },\n      hr: {\n        insert: '水平線の挿入'\n      },\n      style: {\n        style: 'スタイル',\n        p: '標準',\n        blockquote: '引用',\n        pre: 'コード',\n        h1: '見出し1',\n        h2: '見出し2',\n        h3: '見出し3',\n        h4: '見出し4',\n        h5: '見出し5',\n        h6: '見出し6'\n      },\n      lists: {\n        unordered: '通常リスト',\n        ordered: '番号リスト'\n      },\n      options: {\n        help: 'ヘルプ',\n        fullscreen: 'フルスクリーン',\n        codeview: 'コード表示'\n      },\n      paragraph: {\n        paragraph: '文章',\n        outdent: '字上げ',\n        indent: '字下げ',\n        left: '左寄せ',\n        center: '中央寄せ',\n        right: '右寄せ',\n        justify: '均等割付'\n      },\n      color: {\n        recent: '現在の色',\n        more: 'もっと見る',\n        background: '背景色',\n        foreground: '文字色',\n        transparent: '透過率',\n        setTransparent: '透過率を設定',\n        reset: '標準',\n        resetToDefault: '標準に戻す'\n      },\n      shortcut: {\n        shortcuts: 'ショートカット',\n        close: '閉じる',\n        textFormatting: '文字フォーマット',\n        action: 'アクション',\n        paragraphFormatting: '文章フォーマット',\n        documentStyle: 'ドキュメント形式'\n      },\n      history: {\n        undo: '元に戻す',\n        redo: 'やり直す'\n      },\n      help: {\n        'insertParagraph': '改行挿入',\n        'undo': '一旦、行った操作を戻す',\n        'redo': '最後のコマンドをやり直す',\n        'tab': 'Tab',\n        'untab': 'タブ戻し',\n        'bold': '太文字',\n        'italic': '斜体',\n        'underline': '下線',\n        'strikethrough': '取り消し線',\n        'removeFormat': '装飾を戻す',\n        'justifyLeft': '左寄せ',\n        'justifyCenter': '真ん中寄せ',\n        'justifyRight': '右寄せ',\n        'justifyFull': 'すべてを整列',\n        'insertUnorderedList': '行頭に●を挿入',\n        'insertOrderedList': '行頭に番号を挿入',\n        'outdent': '字下げを戻す（アウトデント）',\n        'indent': '字下げする（インデント）',\n        'formatPara': '段落(P tag)指定',\n        'formatH1': 'H1指定',\n        'formatH2': 'H2指定',\n        'formatH3': 'H3指定',\n        'formatH4': 'H4指定',\n        'formatH5': 'H5指定',\n        'formatH6': 'H6指定',\n        'insertHorizontalRule': '&lt;hr /&gt;を挿入',\n        'linkDialog.show': 'リンク挿入'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ko-KR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ko-KR': {\n      font: {\n        bold: '굵게',\n        italic: '기울임꼴',\n        underline: '밑줄',\n        clear: '글자 효과 없애기',\n        height: '줄간격',\n        name: '글꼴',\n        superscript: '위 첨자',\n        subscript: '아래 첨자',\n        strikethrough: '취소선',\n        size: '글자 크기'\n      },\n      image: {\n        image: '사진',\n        insert: '사진 추가',\n        resizeFull: '100% 크기로 변경',\n        resizeHalf: '50% 크기로 변경',\n        resizeQuarter: '25% 크기로 변경',\n        floatLeft: '왼쪽 정렬',\n        floatRight: '오른쪽 정렬',\n        floatNone: '정렬하지 않음',\n        shapeRounded: '스타일: 둥근 모서리',\n        shapeCircle: '스타일: 원형',\n        shapeThumbnail: '스타일: 액자',\n        shapeNone: '스타일: 없음',\n        dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요',\n        dropImage: '텍스트 혹은 사진을 내려놓으세요',\n        selectFromFiles: '파일 선택',\n        url: '사진 URL',\n        remove: '사진 삭제'\n      },\n      video: {\n        video: '동영상',\n        videoLink: '동영상 링크',\n        insert: '동영상 추가',\n        url: '동영상 URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)'\n      },\n      link: {\n        link: '링크',\n        insert: '링크 추가',\n        unlink: '링크 삭제',\n        edit: '수정',\n        textToDisplay: '링크에 표시할 내용',\n        url: '이동할 URL',\n        openInNewWindow: '새창으로 열기'\n      },\n      table: {\n        table: '테이블'\n      },\n      hr: {\n        insert: '구분선 추가'\n      },\n      style: {\n        style: '스타일',\n        p: '본문',\n        blockquote: '인용구',\n        pre: '코드',\n        h1: '제목 1',\n        h2: '제목 2',\n        h3: '제목 3',\n        h4: '제목 4',\n        h5: '제목 5',\n        h6: '제목 6'\n      },\n      lists: {\n        unordered: '글머리 기호',\n        ordered: '번호 매기기'\n      },\n      options: {\n        help: '도움말',\n        fullscreen: '전체 화면',\n        codeview: '코드 보기'\n      },\n      paragraph: {\n        paragraph: '문단 정렬',\n        outdent: '내어쓰기',\n        indent: '들여쓰기',\n        left: '왼쪽 정렬',\n        center: '가운데 정렬',\n        right: '오른쪽 정렬',\n        justify: '양쪽 정렬'\n      },\n      color: {\n        recent: '마지막으로 사용한 색',\n        more: '다른 색 선택',\n        background: '배경색',\n        foreground: '글자색',\n        transparent: '투명',\n        setTransparent: '투명',\n        reset: '취소',\n        resetToDefault: '기본 값으로 변경'\n      },\n      shortcut: {\n        shortcuts: '키보드 단축키',\n        close: '닫기',\n        textFormatting: '글자 스타일 적용',\n        action: '기능',\n        paragraphFormatting: '문단 스타일 적용',\n        documentStyle: '문서 스타일 적용'\n      },\n      history: {\n        undo: '실행 취소',\n        redo: '다시 실행'\n      },\n      specialChar: {\n        specialChar: '특수문자',\n        select: '특수문자를 선택하세요'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-lt-LT.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'lt-LT': {\n      font: {\n        bold: 'Paryškintas',\n        italic: 'Kursyvas',\n        underline: 'Pabrėžtas',\n        clear: 'Be formatavimo',\n        height: 'Eilutės aukštis',\n        name: 'Šrifto pavadinimas',\n        strikethrough: 'Perbrauktas',\n        superscript: 'Viršutinis',\n        subscript: 'Indeksas',\n        size: 'Šrifto dydis'\n      },\n      image: {\n        image: 'Paveikslėlis',\n        insert: 'Įterpti paveikslėlį',\n        resizeFull: 'Pilnas dydis',\n        resizeHalf: 'Sumažinti dydį 50%',\n        resizeQuarter: 'Sumažinti dydį 25%',\n        floatLeft: 'Kairinis lygiavimas',\n        floatRight: 'Dešininis lygiavimas',\n        floatNone: 'Jokio lygiavimo',\n        shapeRounded: 'Forma: apvalūs kraštai',\n        shapeCircle: 'Forma: apskritimas',\n        shapeThumbnail: 'Forma: miniatiūra',\n        shapeNone: 'Forma: jokia',\n        dragImageHere: 'Vilkite paveikslėlį čia',\n        selectFromFiles: 'Pasirinkite failą',\n        maximumFileSize: 'Maskimalus failo dydis',\n        maximumFileSizeError: 'Maskimalus failo dydis viršytas!',\n        url: 'Paveikslėlio URL adresas',\n        remove: 'Ištrinti paveikslėlį'\n      },\n      link: {\n        link: 'Nuoroda',\n        insert: 'Įterpti nuorodą',\n        unlink: 'Pašalinti nuorodą',\n        edit: 'Redaguoti',\n        textToDisplay: 'Rodomas tekstas',\n        url: 'Koks URL adresas yra susietas?',\n        openInNewWindow: 'Atidaryti naujame lange'\n      },\n      table: {\n        table: 'Lentelė'\n      },\n      hr: {\n        insert: 'Įterpti horizontalią liniją'\n      },\n      style: {\n        style: 'Stilius',\n        p: 'pus',\n        blockquote: 'Citata',\n        pre: 'Kodas',\n        h1: 'Antraštė 1',\n        h2: 'Antraštė 2',\n        h3: 'Antraštė 3',\n        h4: 'Antraštė 4',\n        h5: 'Antraštė 5',\n        h6: 'Antraštė 6'\n      },\n      lists: {\n        unordered: 'Suženklintasis sąrašas',\n        ordered: 'Sunumeruotas sąrašas'\n      },\n      options: {\n        help: 'Pagalba',\n        fullscreen: 'Viso ekrano režimas',\n        codeview: 'HTML kodo peržiūra'\n      },\n      paragraph: {\n        paragraph: 'Pastraipa',\n        outdent: 'Sumažinti įtrauką',\n        indent: 'Padidinti įtrauką',\n        left: 'Kairinė lygiuotė',\n        center: 'Centrinė lygiuotė',\n        right: 'Dešininė lygiuotė',\n        justify: 'Abipusis išlyginimas'\n      },\n      color: {\n        recent: 'Paskutinė naudota spalva',\n        more: 'Daugiau spalvų',\n        background: 'Fono spalva',\n        foreground: 'Šrifto spalva',\n        transparent: 'Permatoma',\n        setTransparent: 'Nustatyti skaidrumo intensyvumą',\n        reset: 'Atkurti',\n        resetToDefault: 'Atstatyti numatytąją spalvą'\n      },\n      shortcut: {\n        shortcuts: 'Spartieji klavišai',\n        close: 'Uždaryti',\n        textFormatting: 'Teksto formatavimas',\n        action: 'Veiksmas',\n        paragraphFormatting: 'Pastraipos formatavimas',\n        documentStyle: 'Dokumento stilius',\n        extraKeys: 'Papildomi klavišų deriniai'\n      },\n      history: {\n        undo: 'Anuliuoti veiksmą',\n        redo: 'Perdaryti veiksmą'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-lt-LV.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'lv-LV': {\n      font: {\n        bold: 'Treknraksts',\n        italic: 'Kursīvs',\n        underline: 'Pasvītrots',\n        clear: 'Noņemt formatējumu',\n        height: 'Līnijas augstums',\n        name: 'Fonts',\n        strikethrough: 'Nosvītrots',\n        superscript: 'Augšraksts',\n        subscript: 'Apakšraksts',\n        size: 'Fonta lielums'\n      },\n      image: {\n        image: 'Attēls',\n        insert: 'Ievietot attēlu',\n        resizeFull: 'Pilns izmērts',\n        resizeHalf: 'Samazināt 50%',\n        resizeQuarter: 'Samazināt 25%',\n        floatLeft: 'Līdzināt pa kreisi',\n        floatRight: 'Līdzināt pa labi',\n        floatNone: 'Nelīdzināt',\n        shapeRounded: 'Forma: apaļām malām',\n        shapeCircle: 'Forma: aplis',\n        shapeThumbnail: 'Forma: rāmītis',\n        shapeNone: 'Forma: orģināla',\n        dragImageHere: 'Ievēlciet attēlu šeit',\n        selectFromFiles: 'Izvēlēties failu',\n        maximumFileSize: 'Maksimālais faila izmērs',\n        maximumFileSizeError: 'Faila izmērs pārāk liels!',\n        url: 'Attēla URL',\n        remove: 'Dzēst attēlu'\n      },\n      link: {\n        link: 'Saite',\n        insert: 'Ievietot saiti',\n        unlink: 'Noņemt saiti',\n        edit: 'Rediģēt',\n        textToDisplay: 'Saites saturs',\n        url: 'Koks URL adresas yra susietas?',\n        openInNewWindow: 'Atvērt jaunā logā'\n      },\n      table: {\n        table: 'Tabula'\n      },\n      hr: {\n        insert: 'Ievietot līniju'\n      },\n      style: {\n        style: 'Stils',\n        p: 'Parasts',\n        blockquote: 'Citāts',\n        pre: 'Kods',\n        h1: 'Virsraksts h1',\n        h2: 'Virsraksts h2',\n        h3: 'Virsraksts h3',\n        h4: 'Virsraksts h4',\n        h5: 'Virsraksts h5',\n        h6: 'Virsraksts h6'\n      },\n      lists: {\n        unordered: 'Nenumurēts saraksts',\n        ordered: 'Numurēts saraksts'\n      },\n      options: {\n        help: 'Palīdzība',\n        fullscreen: 'Pa visu ekrānu',\n        codeview: 'HTML kods'\n      },\n      paragraph: {\n        paragraph: 'Paragrāfs',\n        outdent: 'Samazināt atkāpi',\n        indent: 'Palielināt atkāpi',\n        left: 'Līdzināt pa kreisi',\n        center: 'Centrēt',\n        right: 'Līdzināt pa labi',\n        justify: 'Līdzināt gar abām malām'\n      },\n      color: {\n        recent: 'Nesen izmantotās',\n        more: 'Citas krāsas',\n        background: 'Fona krāsa',\n        foreground: 'Fonta krāsa',\n        transparent: 'Caurspīdīgs',\n        setTransparent: 'Iestatīt caurspīdīgumu',\n        reset: 'Atjaunot',\n        resetToDefault: 'Atjaunot noklusējumu'\n      },\n      shortcut: {\n        shortcuts: 'Saīsnes',\n        close: 'Aizvērt',\n        textFormatting: 'Teksta formatēšana',\n        action: 'Darbība',\n        paragraphFormatting: 'Paragrāfa formatēšana',\n        documentStyle: 'Dokumenta stils',\n        extraKeys: 'Citas taustiņu kombinācijas'\n      },\n      history: {\n        undo: 'Atsauks (undo)',\n        redo: 'Atkārtot (redo)'\n      },\n      help: {\n        insertParagraph: 'Ievietot Paragrāfu',\n        undo: 'Atcelt iepriekšējo darbību',\n        redo: 'Atkārtot atcelto darbību',\n        tab: 'Atkāpe',\n        untab: 'Samazināt atkāpi',\n        bold: 'Pārvērst tekstu treknrakstā',\n        italic: 'Pārvērst tekstu slīprakstā (kursīvā)',\n        underline: 'Pasvītrot tekstu',\n        strikethrough: 'Nosvītrot tekstu',\n        removeFormat: 'Notīrīt stilu no teksta',\n        justifyLeft: 'Līdzīnāt saturu pa kreisi',\n        justifyCenter: 'Centrēt saturu',\n        justifyRight: 'Līdzīnāt saturu pa labi',\n        justifyFull: 'Izlīdzināt saturu gar abām malām',\n        insertUnorderedList: 'Ievietot nenumurētu sarakstu',\n        insertOrderedList: 'Ievietot numurētu sarakstu',\n        outdent: 'Samazināt/noņemt atkāpi paragrāfam',\n        indent: 'Uzlikt atkāpi paragrāfam',\n        formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu',\n        formatH1: 'Mainīt bloka tipu uz virsrakstu H1',\n        formatH2: 'Mainīt bloka tipu uz virsrakstu H2',\n        formatH3: 'Mainīt bloka tipu uz virsrakstu H3',\n        formatH4: 'Mainīt bloka tipu uz virsrakstu H4',\n        formatH5: 'Mainīt bloka tipu uz virsrakstu H5',\n        formatH6: 'Mainīt bloka tipu uz virsrakstu H6',\n        insertHorizontalRule: 'Ievietot horizontālu līniju',\n        'linkDialog.show': 'Parādīt saites logu'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-nb-NO.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'nb-NO': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understrek',\n        clear: 'Fjern formatering',\n        height: 'Linjehøyde',\n        name: 'Skrifttype',\n        strikethrough: 'Gjennomstrek',\n        size: 'Skriftstørrelse'\n      },\n      image: {\n        image: 'Bilde',\n        insert: 'Sett inn bilde',\n        resizeFull: 'Sett full størrelse',\n        resizeHalf: 'Sett halv størrelse',\n        resizeQuarter: 'Sett kvart størrelse',\n        floatLeft: 'Flyt til venstre',\n        floatRight: 'Flyt til høyre',\n        floatNone: 'Fjern flyt',\n        dragImageHere: 'Dra et bilde hit',\n        selectFromFiles: 'Velg fra filer',\n        url: 'Bilde-URL',\n        remove: 'Fjern bilde'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Videolenke',\n        insert: 'Sett inn video',\n        url: 'Video-URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Lenke',\n        insert: 'Sett inn lenke',\n        unlink: 'Fjern lenke',\n        edit: 'Rediger',\n        textToDisplay: 'Visningstekst',\n        url: 'Til hvilken URL skal denne lenken peke?',\n        openInNewWindow: 'Åpne i nytt vindu'\n      },\n      table: {\n        table: 'Tabell'\n      },\n      hr: {\n        insert: 'Sett inn horisontal linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Sitat',\n        pre: 'Kode',\n        h1: 'Overskrift 1',\n        h2: 'Overskrift 2',\n        h3: 'Overskrift 3',\n        h4: 'Overskrift 4',\n        h5: 'Overskrift 5',\n        h6: 'Overskrift 6'\n      },\n      lists: {\n        unordered: 'Punktliste',\n        ordered: 'Nummerert liste'\n      },\n      options: {\n        help: 'Hjelp',\n        fullscreen: 'Fullskjerm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Avsnitt',\n        outdent: 'Tilbakerykk',\n        indent: 'Innrykk',\n        left: 'Venstrejustert',\n        center: 'Midtstilt',\n        right: 'Høyrejustert',\n        justify: 'Blokkjustert'\n      },\n      color: {\n        recent: 'Nylig valgt farge',\n        more: 'Flere farger',\n        background: 'Bakgrunnsfarge',\n        foreground: 'Skriftfarge',\n        transparent: 'Gjennomsiktig',\n        setTransparent: 'Sett gjennomsiktig',\n        reset: 'Nullstill',\n        resetToDefault: 'Nullstill til standard'\n      },\n      shortcut: {\n        shortcuts: 'Hurtigtaster',\n        close: 'Lukk',\n        textFormatting: 'Tekstformatering',\n        action: 'Handling',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil'\n      },\n      history: {\n        undo: 'Angre',\n        redo: 'Gjør om'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-nl-NL.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'nl-NL': {\n      font: {\n        bold: 'Vet',\n        italic: 'Cursief',\n        underline: 'Onderstrepen',\n        clear: 'Stijl verwijderen',\n        height: 'Regelhoogte',\n        name: 'Lettertype',\n        strikethrough: 'Doorhalen',\n        size: 'Tekstgrootte'\n      },\n      image: {\n        image: 'Afbeelding',\n        insert: 'Afbeelding invoegen',\n        resizeFull: 'Volledige breedte',\n        resizeHalf: 'Halve breedte',\n        resizeQuarter: 'Kwart breedte',\n        floatLeft: 'Links uitlijnen',\n        floatRight: 'Rechts uitlijnen',\n        floatNone: 'Geen uitlijning',\n        dragImageHere: 'Sleep hier een afbeelding naar toe',\n        selectFromFiles: 'Selecteer een bestand',\n        url: 'URL van de afbeelding',\n        remove: 'Verwijder afbeelding'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video link',\n        insert: 'Video invoegen',\n        url: 'URL van de video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Link invoegen',\n        unlink: 'Link verwijderen',\n        edit: 'Wijzigen',\n        textToDisplay: 'Tekst van link',\n        url: 'Naar welke URL moet deze link verwijzen?',\n        openInNewWindow: 'Open in nieuw venster'\n      },\n      table: {\n        table: 'Tabel'\n      },\n      hr: {\n        insert: 'Horizontale lijn invoegen'\n      },\n      style: {\n        style: 'Stijl',\n        p: 'Normaal',\n        blockquote: 'Quote',\n        pre: 'Code',\n        h1: 'Kop 1',\n        h2: 'Kop 2',\n        h3: 'Kop 3',\n        h4: 'Kop 4',\n        h5: 'Kop 5',\n        h6: 'Kop 6'\n      },\n      lists: {\n        unordered: 'Ongeordende lijst',\n        ordered: 'Geordende lijst'\n      },\n      options: {\n        help: 'Help',\n        fullscreen: 'Volledig scherm',\n        codeview: 'Bekijk Code'\n      },\n      paragraph: {\n        paragraph: 'Paragraaf',\n        outdent: 'Inspringen verkleinen',\n        indent: 'Inspringen vergroten',\n        left: 'Links uitlijnen',\n        center: 'Centreren',\n        right: 'Rechts uitlijnen',\n        justify: 'Uitvullen'\n      },\n      color: {\n        recent: 'Recente kleur',\n        more: 'Meer kleuren',\n        background: 'Achtergrond kleur',\n        foreground: 'Tekst kleur',\n        transparent: 'Transparant',\n        setTransparent: 'Transparant',\n        reset: 'Standaard',\n        resetToDefault: 'Standaard kleur'\n      },\n      shortcut: {\n        shortcuts: 'Toetsencombinaties',\n        close: 'sluiten',\n        textFormatting: 'Tekststijlen',\n        action: 'Acties',\n        paragraphFormatting: 'Paragraafstijlen',\n        documentStyle: 'Documentstijlen'\n      },\n      history: {\n        undo: 'Ongedaan maken',\n        redo: 'Opnieuw doorvoeren'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-pl-PL.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'pl-PL': {\n      font: {\n        bold: 'Pogrubienie',\n        italic: 'Pochylenie',\n        underline: 'Podkreślenie',\n        clear: 'Usuń formatowanie',\n        height: 'Interlinia',\n        name: 'Czcionka',\n        strikethrough: 'Przekreślenie',\n        size: 'Rozmiar'\n      },\n      image: {\n        image: 'Grafika',\n        insert: 'Wstaw grafikę',\n        resizeFull: 'Zmień rozmiar na 100%',\n        resizeHalf: 'Zmień rozmiar na 50%',\n        resizeQuarter: 'Zmień rozmiar na 25%',\n        floatLeft: 'Po lewej',\n        floatRight: 'Po prawej',\n        floatNone: 'Równo z tekstem',\n        shapeRounded: 'Kształt: zaokrąglone',\n        shapeCircle: 'Kształt: okrąg',\n        shapeThumbnail: 'Kształt: miniatura',\n        shapeNone: 'Kształt: brak',\n        dragImageHere: 'Przeciągnij grafikę lub tekst tutaj',\n        dropImage: 'Przeciągnij grafikę lub tekst',\n        selectFromFiles: 'Wybierz z dysku',\n        maximumFileSize: 'Limit wielkości pliku',\n        maximumFileSizeError: 'Przekroczono limit wielkości pliku.',\n        url: 'Adres URL grafiki',\n        remove: 'Usuń grafikę'\n      },\n      video: {\n        video: 'Wideo',\n        videoLink: 'Adres wideo',\n        insert: 'Wstaw wideo',\n        url: 'Adres wideo',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)'\n      },\n      link: {\n        link: 'Odnośnik',\n        insert: 'Wstaw odnośnik',\n        unlink: 'Usuń odnośnik',\n        edit: 'Edytuj',\n        textToDisplay: 'Tekst do wyświetlenia',\n        url: 'Na jaki adres URL powinien przenosić ten odnośnik?',\n        openInNewWindow: 'Otwórz w nowym oknie'\n      },\n      table: {\n        table: 'Tabela'\n      },\n      hr: {\n        insert: 'Wstaw poziomą linię'\n      },\n      style: {\n        style: 'Style',\n        p: 'pny',\n        blockquote: 'Cytat',\n        pre: 'Kod',\n        h1: 'Nagłówek 1',\n        h2: 'Nagłówek 2',\n        h3: 'Nagłówek 3',\n        h4: 'Nagłówek 4',\n        h5: 'Nagłówek 5',\n        h6: 'Nagłówek 6'\n      },\n      lists: {\n        unordered: 'Lista wypunktowana',\n        ordered: 'Lista numerowana'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Pełny ekran',\n        codeview: 'Źródło'\n      },\n      paragraph: {\n        paragraph: 'Akapit',\n        outdent: 'Zmniejsz wcięcie',\n        indent: 'Zwiększ wcięcie',\n        left: 'Wyrównaj do lewej',\n        center: 'Wyrównaj do środka',\n        right: 'Wyrównaj do prawej',\n        justify: 'Wyrównaj do lewej i prawej'\n      },\n      color: {\n        recent: 'Ostani kolor',\n        more: 'Więcej kolorów',\n        background: 'Tło',\n        foreground: 'Czcionka',\n        transparent: 'Przeźroczysty',\n        setTransparent: 'Przeźroczyste',\n        reset: 'Reset',\n        resetToDefault: 'Domyślne'\n      },\n      shortcut: {\n        shortcuts: 'Skróty klawiaturowe',\n        close: 'Zamknij',\n        textFormatting: 'Formatowanie tekstu',\n        action: 'Akcja',\n        paragraphFormatting: 'Formatowanie akapitu',\n        documentStyle: 'Styl dokumentu',\n        extraKeys: 'Dodatkowe klawisze'\n      },\n      history: {\n        undo: 'Cofnij',\n        redo: 'Ponów'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-pt-BR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'pt-BR': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Resize Full',\n        resizeHalf: 'Resize Half',\n        resizeQuarter: 'Resize Quarter',\n        floatLeft: 'Float Left',\n        floatRight: 'Float Right',\n        floatNone: 'Float None',\n        dragImageHere: 'Arraste uma imagem para cá',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        url: 'URL da imagem'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir link',\n        unlink: 'Remover link',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Para qual URL esse link leva?',\n        openInNewWindow: 'Abrir em uma nova janela'\n      },\n      table: {\n        table: 'Tabela'\n      },\n      hr: {\n        insert: 'Inserir linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        normal: 'Normal',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Tela cheia',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      },\n      help: {\n        'insertParagraph': 'Inserir Parágrafo',\n        'undo': 'Desfazer o último comando',\n        'redo': 'Refazer o último comando',\n        'tab': 'Tab',\n        'untab': 'Desfazer tab',\n        'bold': 'Colocar em negrito',\n        'italic': 'Colocar em itálico',\n        'underline': 'Sublinhado',\n        'strikethrough': 'Tachado',\n        'removeFormat': 'Remover estilo',\n        'justifyLeft': 'Alinhar à esquerda',\n        'justifyCenter': 'Centralizar',\n        'justifyRight': 'Alinhar à esquerda',\n        'justifyFull': 'Justificar',\n        'insertUnorderedList': 'Lista não ordenada',\n        'insertOrderedList': 'Lista ordenada',\n        'outdent': 'Recuar parágrafo atual',\n        'indent': 'Avançar parágrafo atual',\n        'formatPara': 'Alterar formato do bloco para parágrafo(tag P)',\n        'formatH1': 'Alterar formato do bloco para H1',\n        'formatH2': 'Alterar formato do bloco para H2',\n        'formatH3': 'Alterar formato do bloco para H3',\n        'formatH4': 'Alterar formato do bloco para H4',\n        'formatH5': 'Alterar formato do bloco para H5',\n        'formatH6': 'Alterar formato do bloco para H6',\n        'insertHorizontalRule': 'Inserir régua horizontal',\n        'linkDialog.show': 'Inserir um Hiperlink'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-pt-PT.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'pt-PT': {\n      font: {\n        bold: 'Negrito',\n        italic: 'Itálico',\n        underline: 'Sublinhado',\n        clear: 'Remover estilo da fonte',\n        height: 'Altura da linha',\n        name: 'Fonte',\n        strikethrough: 'Riscado',\n        size: 'Tamanho da fonte'\n      },\n      image: {\n        image: 'Imagem',\n        insert: 'Inserir imagem',\n        resizeFull: 'Redimensionar Completo',\n        resizeHalf: 'Redimensionar Metade',\n        resizeQuarter: 'Redimensionar Um Quarto',\n        floatLeft: 'Float Esquerda',\n        floatRight: 'Float Direita',\n        floatNone: 'Sem Float',\n        dragImageHere: 'Arraste uma imagem para aqui',\n        selectFromFiles: 'Selecione a partir dos arquivos',\n        url: 'Endereço da imagem'\n      },\n      video: {\n        video: 'Vídeo',\n        videoLink: 'Link para vídeo',\n        insert: 'Inserir vídeo',\n        url: 'URL do vídeo?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserir ligação',\n        unlink: 'Remover ligação',\n        edit: 'Editar',\n        textToDisplay: 'Texto para exibir',\n        url: 'Que endereço esta licação leva?',\n        openInNewWindow: 'Abrir numa nova janela'\n      },\n      table: {\n        table: 'Tabela'\n      },\n      hr: {\n        insert: 'Inserir linha horizontal'\n      },\n      style: {\n        style: 'Estilo',\n        p: 'p',\n        blockquote: 'Citação',\n        pre: 'Código',\n        h1: 'Título 1',\n        h2: 'Título 2',\n        h3: 'Título 3',\n        h4: 'Título 4',\n        h5: 'Título 5',\n        h6: 'Título 6'\n      },\n      lists: {\n        unordered: 'Lista com marcadores',\n        ordered: 'Lista numerada'\n      },\n      options: {\n        help: 'Ajuda',\n        fullscreen: 'Janela Completa',\n        codeview: 'Ver código-fonte'\n      },\n      paragraph: {\n        paragraph: 'Parágrafo',\n        outdent: 'Menor tabulação',\n        indent: 'Maior tabulação',\n        left: 'Alinhar à esquerda',\n        center: 'Alinhar ao centro',\n        right: 'Alinha à direita',\n        justify: 'Justificado'\n      },\n      color: {\n        recent: 'Cor recente',\n        more: 'Mais cores',\n        background: 'Fundo',\n        foreground: 'Fonte',\n        transparent: 'Transparente',\n        setTransparent: 'Fundo transparente',\n        reset: 'Restaurar',\n        resetToDefault: 'Restaurar padrão'\n      },\n      shortcut: {\n        shortcuts: 'Atalhos do teclado',\n        close: 'Fechar',\n        textFormatting: 'Formatação de texto',\n        action: 'Ação',\n        paragraphFormatting: 'Formatação de parágrafo',\n        documentStyle: 'Estilo de documento'\n      },\n      history: {\n        undo: 'Desfazer',\n        redo: 'Refazer'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ro-RO.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ro-RO': {\n      font: {\n        bold: 'Îngroșat',\n        italic: 'Înclinat',\n        underline: 'Subliniat',\n        clear: 'Înlătură formatare font',\n        height: 'Înălțime rând',\n        strikethrough: 'Tăiat',\n        size: 'Dimensiune font'\n      },\n      image: {\n        image: 'Imagine',\n        insert: 'Inserează imagine',\n        resizeFull: 'Redimensionează complet',\n        resizeHalf: 'Redimensionează 1/2',\n        resizeQuarter: 'Redimensionează 1/4',\n        floatLeft: 'Aliniere la stânga',\n        floatRight: 'Aliniere la dreapta',\n        floatNone: 'Fară aliniere',\n        dragImageHere: 'Trage o imagine aici',\n        selectFromFiles: 'Alege din fişiere',\n        url: 'URL imagine'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link video',\n        insert: 'Inserează video',\n        url: 'URL video?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Inserează link',\n        unlink: 'Înlătură link',\n        edit: 'Editează',\n        textToDisplay: 'Text ce va fi afişat',\n        url: 'Deschidere în fereastra nouă?'\n      },\n      table: {\n        table: 'Tabel'\n      },\n      hr: {\n        insert: 'Inserează o linie orizontală'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Preformatat',\n        h1: 'Titlu 1',\n        h2: 'Titlu 2',\n        h3: 'Titlu 3',\n        h4: 'Titlu 4',\n        h5: 'Titlu 5',\n        h6: 'Titlu 6'\n      },\n      lists: {\n        unordered: 'Listă neordonată',\n        ordered: 'Listă ordonată'\n      },\n      options: {\n        help: 'Ajutor',\n        fullscreen: 'Măreşte',\n        codeview: 'Sursă'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Creşte identarea',\n        indent: 'Scade identarea',\n        left: 'Aliniere la stânga',\n        center: 'Aliniere centrală',\n        right: 'Aliniere la dreapta',\n        justify: 'Aliniere în bloc'\n      },\n      color: {\n        recent: 'Culoare recentă',\n        more: 'Mai multe  culori',\n        background: 'Culoarea fundalului',\n        foreground: 'Culoarea textului',\n        transparent: 'Transparent',\n        setTransparent: 'Setează transparent',\n        reset: 'Resetează',\n        resetToDefault: 'Revino la iniţial'\n      },\n      shortcut: {\n        shortcuts: 'Scurtături tastatură',\n        close: 'Închide',\n        textFormatting: 'Formatare text',\n        action: 'Acţiuni',\n        paragraphFormatting: 'Formatare paragraf',\n        documentStyle: 'Stil paragraf'\n      },\n      history: {\n        undo: 'Starea anterioară',\n        redo: 'Starea ulterioară'\n      }\n\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-ru-RU.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'ru-RU': {\n      font: {\n        bold: 'Полужирный',\n        italic: 'Курсив',\n        underline: 'Подчёркнутый',\n        clear: 'Убрать стили шрифта',\n        height: 'Высота линии',\n        name: 'Шрифт',\n        strikethrough: 'Зачёркнутый',\n        subscript: 'Нижний индекс',\n        superscript: 'Верхний индекс',\n        size: 'Размер шрифта'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставить картинку',\n        resizeFull: 'Восстановить размер',\n        resizeHalf: 'Уменьшить до 50%',\n        resizeQuarter: 'Уменьшить до 25%',\n        floatLeft: 'Расположить слева',\n        floatRight: 'Расположить справа',\n        floatNone: 'Расположение по-умолчанию',\n        shapeRounded: 'Форма: Закругленная',\n        shapeCircle: 'Форма: Круг',\n        shapeThumbnail: 'Форма: Миниатюра',\n        shapeNone: 'Форма: Нет',\n        dragImageHere: 'Перетащите сюда картинку',\n        dropImage: 'Перетащите картинку',\n        selectFromFiles: 'Выбрать из файлов',\n        url: 'URL картинки',\n        remove: 'Удалить картинку'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Ссылка на видео',\n        insert: 'Вставить видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Ссылка',\n        insert: 'Вставить ссылку',\n        unlink: 'Убрать ссылку',\n        edit: 'Редактировать',\n        textToDisplay: 'Отображаемый текст',\n        url: 'URL для перехода',\n        openInNewWindow: 'Открывать в новом окне'\n      },\n      table: {\n        table: 'Таблица'\n      },\n      hr: {\n        insert: 'Вставить горизонтальную линию'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальный',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркированный список',\n        ordered: 'Нумерованный список'\n      },\n      options: {\n        help: 'Помощь',\n        fullscreen: 'На весь экран',\n        codeview: 'Исходный код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Уменьшить отступ',\n        indent: 'Увеличить отступ',\n        left: 'Выровнять по левому краю',\n        center: 'Выровнять по центру',\n        right: 'Выровнять по правому краю',\n        justify: 'Растянуть по ширине'\n      },\n      color: {\n        recent: 'Последний цвет',\n        more: 'Еще цвета',\n        background: 'Цвет фона',\n        foreground: 'Цвет шрифта',\n        transparent: 'Прозрачный',\n        setTransparent: 'Сделать прозрачным',\n        reset: 'Сброс',\n        resetToDefault: 'Восстановить умолчания'\n      },\n      shortcut: {\n        shortcuts: 'Сочетания клавиш',\n        close: 'Закрыть',\n        textFormatting: 'Форматирование текста',\n        action: 'Действие',\n        paragraphFormatting: 'Форматирование параграфа',\n        documentStyle: 'Стиль документа',\n        extraKeys: 'Дополнительные комбинации'\n      },\n      history: {\n        undo: 'Отменить',\n        redo: 'Повтор'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-sk-SK.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'sk-SK': {\n      font: {\n        bold: 'Tučné',\n        italic: 'Kurzíva',\n        underline: 'Podčiarknutie',\n        clear: 'Odstrániť štýl písma',\n        height: 'Výška riadku',\n        strikethrough: 'Prečiarknuté',\n        size: 'Veľkosť písma'\n      },\n      image: {\n        image: 'Obrázok',\n        insert: 'Vložiť obrázok',\n        resizeFull: 'Pôvodná veľkosť',\n        resizeHalf: 'Polovičná veľkosť',\n        resizeQuarter: 'Štvrtinová veľkosť',\n        floatLeft: 'Umiestniť doľava',\n        floatRight: 'Umiestniť doprava',\n        floatNone: 'Bez zarovnania',\n        dragImageHere: 'Pretiahnuť sem obrázok',\n        selectFromFiles: 'Vybrať súbor',\n        url: 'URL obrázku'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Odkaz videa',\n        insert: 'Vložiť video',\n        url: 'URL videa?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)'\n      },\n      link: {\n        link: 'Odkaz',\n        insert: 'Vytvoriť odkaz',\n        unlink: 'Zrušiť odkaz',\n        edit: 'Upraviť',\n        textToDisplay: 'Zobrazovaný text',\n        url: 'Na akú URL adresu má tento odkaz viesť?',\n        openInNewWindow: 'Otvoriť v novom okne'\n      },\n      table: {\n        table: 'Tabuľka'\n      },\n      hr: {\n        insert: 'Vložit vodorovnú čiaru'\n      },\n      style: {\n        style: 'Štýl',\n        p: 'Normálny',\n        blockquote: 'Citácia',\n        pre: 'Kód',\n        h1: 'Nadpis 1',\n        h2: 'Nadpis 2',\n        h3: 'Nadpis 3',\n        h4: 'Nadpis 4',\n        h5: 'Nadpis 5',\n        h6: 'Nadpis 6'\n      },\n      lists: {\n        unordered: 'Odrážkový zoznam',\n        ordered: 'Číselný zoznam'\n      },\n      options: {\n        help: 'Pomoc',\n        fullscreen: 'Celá obrazovka',\n        codeview: 'HTML kód'\n      },\n      paragraph: {\n        paragraph: 'Odsek',\n        outdent: 'Zväčšiť odsadenie',\n        indent: 'Zmenšiť odsadenie',\n        left: 'Zarovnať doľava',\n        center: 'Zarovnať na stred',\n        right: 'Zarovnať doprava',\n        justify: 'Zarovnať obojstranne'\n      },\n      color: {\n        recent: 'Aktuálna farba',\n        more: 'Dalšie farby',\n        background: 'Farba pozadia',\n        foreground: 'Farba písma',\n        transparent: 'Priehľadnosť',\n        setTransparent: 'Nastaviť priehľadnosť',\n        reset: 'Obnoviť',\n        resetToDefault: 'Obnoviť prednastavené'\n      },\n      shortcut: {\n        shortcuts: 'Klávesové skratky',\n        close: 'Zavrieť',\n        textFormatting: 'Formátovanie textu',\n        action: 'Akcia',\n        paragraphFormatting: 'Formátovanie odseku',\n        documentStyle: 'Štýl dokumentu'\n      },\n      history: {\n        undo: 'Krok vzad',\n        redo: 'Krok dopredu'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-sl-SI.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'sl-SI': {\n      font: {\n        bold: 'Krepko',\n        italic: 'Ležeče',\n        underline: 'Podčrtano',\n        clear: 'Počisti oblikovanje izbire',\n        height: 'Razmik med vrsticami',\n        name: 'Pisava',\n        strikethrough: 'Prečrtano',\n        subscript: 'Podpisano',\n        superscript: 'Nadpisano',\n        size: 'Velikost pisave'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Vstavi sliko',\n        resizeFull: 'Razširi na polno velikost',\n        resizeHalf: 'Razširi na polovico velikosti',\n        resizeQuarter: 'Razširi na četrtino velikosti',\n        floatLeft: 'Leva poravnava',\n        floatRight: 'Desna poravnava',\n        floatNone: 'Brez poravnave',\n        dragImageHere: 'Sem povlecite sliko',\n        selectFromFiles: 'Izberi sliko za nalaganje',\n        url: 'URL naslov slike',\n        remove: 'Odstrani sliko'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video povezava',\n        insert: 'Vstavi video',\n        url: 'Povezava do videa',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)'\n      },\n      link: {\n        link: 'Povezava',\n        insert: 'Vstavi povezavo',\n        unlink: 'Odstrani povezavo',\n        edit: 'Uredi',\n        textToDisplay: 'Prikazano besedilo',\n        url: 'Povezava',\n        openInNewWindow: 'Odpri v novem oknu'\n      },\n      table: {\n        table: 'Tabela'\n      },\n      hr: {\n        insert: 'Vstavi horizontalno črto'\n      },\n      style: {\n        style: 'Slogi',\n        p: 'Navadno besedilo',\n        blockquote: 'Citat',\n        pre: 'Koda',\n        h1: 'Naslov 1',\n        h2: 'Naslov 2',\n        h3: 'Naslov 3',\n        h4: 'Naslov 4',\n        h5: 'Naslov 5',\n        h6: 'Naslov 6'\n      },\n      lists: {\n        unordered: 'Označen seznam',\n        ordered: 'Oštevilčen seznam'\n      },\n      options: {\n        help: 'Pomoč',\n        fullscreen: 'Celozaslonski način',\n        codeview: 'Pregled HTML kode'\n      },\n      paragraph: {\n        paragraph: 'Slogi odstavka',\n        outdent: 'Zmanjšaj odmik',\n        indent: 'Povečaj odmik',\n        left: 'Leva poravnava',\n        center: 'Desna poravnava',\n        right: 'Sredinska poravnava',\n        justify: 'Obojestranska poravnava'\n      },\n      color: {\n        recent: 'Uporabi zadnjo barvo',\n        more: 'Več barv',\n        background: 'Barva ozadja',\n        foreground: 'Barva besedila',\n        transparent: 'Brez barve',\n        setTransparent: 'Brez barve',\n        reset: 'Ponastavi',\n        resetToDefault: 'Ponastavi na privzeto'\n      },\n      shortcut: {\n        shortcuts: 'Bljižnice',\n        close: 'Zapri',\n        textFormatting: 'Oblikovanje besedila',\n        action: 'Dejanja',\n        paragraphFormatting: 'Oblikovanje odstavka',\n        documentStyle: 'Oblikovanje naslova'\n      },\n      history: {\n        undo: 'Razveljavi',\n        redo: 'Uveljavi'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-sr-RS-Latin.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Podebljano',\n        italic: 'Kurziv',\n        underline: 'Podvučeno',\n        clear: 'Ukloni stilove fonta',\n        height: 'Visina linije',\n        strikethrough: 'Precrtano',\n        size: 'Veličina fonta'\n      },\n      image: {\n        image: 'Slika',\n        insert: 'Umetni sliku',\n        resizeFull: 'Puna veličina',\n        resizeHalf: 'Umanji na 50%',\n        resizeQuarter: 'Umanji na 25%',\n        floatLeft: 'Uz levu ivicu',\n        floatRight: 'Uz desnu ivicu',\n        floatNone: 'Bez ravnanja',\n        dragImageHere: 'Prevuci sliku ovde',\n        selectFromFiles: 'Izaberi iz datoteke',\n        url: 'Adresa slike',\n        remove: 'Ukloni sliku'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Veza ka videu',\n        insert: 'Umetni video',\n        url: 'URL video',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'\n      },\n      link: {\n        link: 'Veza',\n        insert: 'Umetni vezu',\n        unlink: 'Ukloni vezu',\n        edit: 'Uredi',\n        textToDisplay: 'Tekst za prikaz',\n        url: 'Internet adresa',\n        openInNewWindow: 'Otvori u novom prozoru'\n      },\n      table: {\n        table: 'Tabela'\n      },\n      hr: {\n        insert: 'Umetni horizontalnu liniju'\n      },\n      style: {\n        style: 'Stil',\n        p: 'pni',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Zaglavlje 1',\n        h2: 'Zaglavlje 2',\n        h3: 'Zaglavlje 3',\n        h4: 'Zaglavlje 4',\n        h5: 'Zaglavlje 5',\n        h6: 'Zaglavlje 6'\n      },\n      lists: {\n        unordered: 'Obična lista',\n        ordered: 'Numerisana lista'\n      },\n      options: {\n        help: 'Pomoć',\n        fullscreen: 'Preko celog ekrana',\n        codeview: 'Izvorni kod'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Smanji uvlačenje',\n        indent: 'Povečaj uvlačenje',\n        left: 'Poravnaj u levo',\n        center: 'Centrirano',\n        right: 'Poravnaj u desno',\n        justify: 'Poravnaj obostrano'\n      },\n      color: {\n        recent: 'Poslednja boja',\n        more: 'Više boja',\n        background: 'Boja pozadine',\n        foreground: 'Boja teksta',\n        transparent: 'Providna',\n        setTransparent: 'Providna',\n        reset: 'Opoziv',\n        resetToDefault: 'Podrazumevana'\n      },\n      shortcut: {\n        shortcuts: 'Prečice sa tastature',\n        close: 'Zatvori',\n        textFormatting: 'Formatiranje teksta',\n        action: 'Akcija',\n        paragraphFormatting: 'Formatiranje paragrafa',\n        documentStyle: 'Stil dokumenta',\n        extraKeys: 'Dodatne kombinacije'\n      },\n      history: {\n        undo: 'Poništi',\n        redo: 'Ponovi'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-sr-RS.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'sr-RS': {\n      font: {\n        bold: 'Подебљано',\n        italic: 'Курзив',\n        underline: 'Подвучено',\n        clear: 'Уклони стилове фонта',\n        height: 'Висина линије',\n        strikethrough: 'Прецртано',\n        size: 'Величина фонта'\n      },\n      image: {\n        image: 'Слика',\n        insert: 'Уметни слику',\n        resizeFull: 'Пуна величина',\n        resizeHalf: 'Умањи на 50%',\n        resizeQuarter: 'Умањи на 25%',\n        floatLeft: 'Уз леву ивицу',\n        floatRight: 'Уз десну ивицу',\n        floatNone: 'Без равнања',\n        dragImageHere: 'Превуци слику овде',\n        selectFromFiles: 'Изабери из датотеке',\n        url: 'Адреса слике',\n        remove: 'Уклони слику'\n      },\n      video: {\n        video: 'Видео',\n        videoLink: 'Веза ка видеу',\n        insert: 'Уметни видео',\n        url: 'URL видео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'\n      },\n      link: {\n        link: 'Веза',\n        insert: 'Уметни везу',\n        unlink: 'Уклони везу',\n        edit: 'Уреди',\n        textToDisplay: 'Текст за приказ',\n        url: 'Интернет адреса',\n        openInNewWindow: 'Отвори у новом прозору'\n      },\n      table: {\n        table: 'Табела'\n      },\n      hr: {\n        insert: 'Уметни хоризонталну линију'\n      },\n      style: {\n        style: 'Стил',\n        p: 'Нормални',\n        blockquote: 'Цитат',\n        pre: 'Код',\n        h1: 'Заглавље 1',\n        h2: 'Заглавље 2',\n        h3: 'Заглавље 3',\n        h4: 'Заглавље 4',\n        h5: 'Заглавље 5',\n        h6: 'Заглавље 6'\n      },\n      lists: {\n        unordered: 'Обична листа',\n        ordered: 'Нумерисана листа'\n      },\n      options: {\n        help: 'Помоћ',\n        fullscreen: 'Преко целог екрана',\n        codeview: 'Изворни код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Смањи увлачење',\n        indent: 'Повечај увлачење',\n        left: 'Поравнај у лево',\n        center: 'Центрирано',\n        right: 'Поравнај у десно',\n        justify: 'Поравнај обострано'\n      },\n      color: {\n        recent: 'Последња боја',\n        more: 'Више боја',\n        background: 'Боја позадине',\n        foreground: 'Боја текста',\n        transparent: 'Провидна',\n        setTransparent: 'Провидна',\n        reset: 'Опозив',\n        resetToDefault: 'Подразумевана'\n      },\n      shortcut: {\n        shortcuts: 'Пречице са тастатуре',\n        close: 'Затвори',\n        textFormatting: 'Форматирање текста',\n        action: 'Акција',\n        paragraphFormatting: 'Форматирање параграфа',\n        documentStyle: 'Стил документа',\n        extraKeys: 'Додатне комбинације'\n      },\n      history: {\n        undo: 'Поништи',\n        redo: 'Понови'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-sv-SE.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'sv-SE': {\n      font: {\n        bold: 'Fet',\n        italic: 'Kursiv',\n        underline: 'Understruken',\n        clear: 'Radera formatering',\n        height: 'Radavstånd',\n        name: 'Teckensnitt',\n        strikethrough: 'Genomstruken',\n        size: 'Teckenstorlek'\n      },\n      image: {\n        image: 'Bild',\n        insert: 'Infoga bild',\n        resizeFull: 'Full storlek',\n        resizeHalf: 'Halv storlek',\n        resizeQuarter: 'En fjärdedel i storlek',\n        floatLeft: 'Vänsterjusterad',\n        floatRight: 'Högerjusterad',\n        floatNone: 'Ingen justering',\n        dragImageHere: 'Dra en bild hit',\n        selectFromFiles: 'Välj från filer',\n        url: 'Länk till bild',\n        remove: 'Ta bort bild'\n      },\n      video: {\n        video: 'Filmklipp',\n        videoLink: 'Länk till filmklipp',\n        insert: 'Infoga filmklipp',\n        url: 'Länk till filmklipp',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'\n      },\n      link: {\n        link: 'Länk',\n        insert: 'Infoga länk',\n        unlink: 'Ta bort länk',\n        edit: 'Redigera',\n        textToDisplay: 'Visningstext',\n        url: 'Till vilken URL ska denna länk peka?',\n        openInNewWindow: 'Öppna i ett nytt fönster'\n      },\n      table: {\n        table: 'Tabell'\n      },\n      hr: {\n        insert: 'Infoga horisontell linje'\n      },\n      style: {\n        style: 'Stil',\n        p: 'p',\n        blockquote: 'Citat',\n        pre: 'Kod',\n        h1: 'Rubrik 1',\n        h2: 'Rubrik 2',\n        h3: 'Rubrik 3',\n        h4: 'Rubrik 4',\n        h5: 'Rubrik 5',\n        h6: 'Rubrik 6'\n      },\n      lists: {\n        unordered: 'Punktlista',\n        ordered: 'Numrerad lista'\n      },\n      options: {\n        help: 'Hjälp',\n        fullscreen: 'Fullskärm',\n        codeview: 'HTML-visning'\n      },\n      paragraph: {\n        paragraph: 'Justera text',\n        outdent: 'Minska indrag',\n        indent: 'Öka indrag',\n        left: 'Vänsterjusterad',\n        center: 'Centrerad',\n        right: 'Högerjusterad',\n        justify: 'Justera text'\n      },\n      color: {\n        recent: 'Senast använda färg',\n        more: 'Fler färger',\n        background: 'Bakgrundsfärg',\n        foreground: 'Teckenfärg',\n        transparent: 'Genomskinlig',\n        setTransparent: 'Gör genomskinlig',\n        reset: 'Nollställ',\n        resetToDefault: 'Återställ till standard'\n      },\n      shortcut: {\n        shortcuts: 'Kortkommandon',\n        close: 'Stäng',\n        textFormatting: 'Textformatering',\n        action: 'Funktion',\n        paragraphFormatting: 'Avsnittsformatering',\n        documentStyle: 'Dokumentstil'\n      },\n      history: {\n        undo: 'Ångra',\n        redo: 'Gör om'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-th-TH.js",
    "content": "(function ($) {\n\t$.extend($.summernote.lang, {\n\t\t'th-TH': {\n\t\t\tfont: {\n\t\t\t\tbold: 'ตัวหนา',\n\t\t\t\titalic: 'ตัวเอียง',\n\t\t\t\tunderline: 'ขีดเส้นใต้',\n\t\t\t\tclear: 'ล้างรูปแบบตัวอักษร',\n\t\t\t\theight: 'ความสูงบรรทัด',\n\t\t\t\tname: 'แบบตัวอักษร',\n\t\t\t\tstrikethrough: 'ขีดฆ่า',\n\t\t\t\tsubscript: 'ตัวห้อย',\n\t\t\t\tsuperscript: 'ตัวยก',\n\t\t\t\tsize: 'ขนาดตัวอักษร'\n\t\t\t},\n\t\t\timage: {\n\t\t\t\timage: 'รูปภาพ',\n\t\t\t\tinsert: 'แทรกรูปภาพ',\n\t\t\t\tresizeFull: 'ปรับขนาดเท่าจริง',\n\t\t\t\tresizeHalf: 'ปรับขนาดลง 50%',\n\t\t\t\tresizeQuarter: 'ปรับขนาดลง 25%',\n\t\t\t\tfloatLeft: 'ชิดซ้าย',\n\t\t\t\tfloatRight: 'ชิดขวา',\n\t\t\t\tfloatNone: 'ไม่จัดตำแหน่ง',\n\t\t\t\tdragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่',\n\t\t\t\tselectFromFiles: 'เลือกไฟล์รูปภาพ',\n\t\t\t\turl: 'ที่อยู่ URL ของรูปภาพ',\n\t\t\t\tremove: 'ลบรูปภาพ'\n\t\t\t},\n\t\t\tvideo: {\n\t\t\t\tvideo: 'วีดีโอ',\n\t\t\t\tvideoLink: 'ลิงก์ของวีดีโอ',\n\t\t\t\tinsert: 'แทรกวีดีโอ',\n\t\t\t\turl: 'ที่อยู่ URL ของวีดีโอ?',\n\t\t\t\tproviders: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)'\n\t\t\t},\n\t\t\tlink: {\n\t\t\t\tlink: 'ตัวเชื่อมโยง',\n\t\t\t\tinsert: 'แทรกตัวเชื่อมโยง',\n\t\t\t\tunlink: 'ยกเลิกตัวเชื่อมโยง',\n\t\t\t\tedit: 'แก้ไข',\n\t\t\t\ttextToDisplay: 'ข้อความที่ให้แสดง',\n\t\t\t\turl: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?',\n\t\t\t\topenInNewWindow: 'เปิดในหน้าต่างใหม่'\n\t\t\t},\n\t\t\ttable: {\n\t\t\t\ttable: 'ตาราง'\n\t\t\t},\n\t\t\thr: {\n\t\t\t\tinsert: 'แทรกเส้นคั่น'\n\t\t\t},\n\t\t\tstyle: {\n\t\t\t\tstyle: 'รูปแบบ',\n\t\t\t\tp: 'ปกติ',\n\t\t\t\tblockquote: 'ข้อความ',\n\t\t\t\tpre: 'โค้ด',\n\t\t\t\th1: 'หัวข้อ 1',\n\t\t\t\th2: 'หัวข้อ 2',\n\t\t\t\th3: 'หัวข้อ 3',\n\t\t\t\th4: 'หัวข้อ 4',\n\t\t\t\th5: 'หัวข้อ 5',\n\t\t\t\th6: 'หัวข้อ 6'\n\t\t\t},\n\t\t\tlists: {\n\t\t\t\tunordered: 'รายการแบบไม่มีลำดับ',\n\t\t\t\tordered: 'รายการแบบมีลำดับ'\n\t\t\t},\n\t\t\toptions: {\n\t\t\t\thelp: 'ช่วยเหลือ',\n\t\t\t\tfullscreen: 'ขยายเต็มหน้าจอ',\n\t\t\t\tcodeview: 'ซอร์สโค้ด'\n\t\t\t},\n\t\t\tparagraph: {\n\t\t\t\tparagraph: 'ย่อหน้า',\n\t\t\t\toutdent: 'เยื้องซ้าย',\n\t\t\t\tindent: 'เยื้องขวา',\n\t\t\t\tleft: 'จัดหน้าชิดซ้าย',\n\t\t\t\tcenter: 'จัดหน้ากึ่งกลาง',\n\t\t\t\tright: 'จัดหน้าชิดขวา',\n\t\t\t\tjustify: 'จัดบรรทัดเสมอกัน'\n\t\t\t},\n\t\t\tcolor: {\n\t\t\t\trecent: 'สีที่ใช้ล่าสุด',\n\t\t\t\tmore: 'สีอื่นๆ',\n\t\t\t\tbackground: 'สีพื้นหลัง',\n\t\t\t\tforeground: 'สีพื้นหน้า',\n\t\t\t\ttransparent: 'โปร่งแสง',\n\t\t\t\tsetTransparent: 'ตั้งค่าความโปร่งแสง',\n\t\t\t\treset: 'คืนค่า',\n\t\t\t\tresetToDefault: 'คืนค่ามาตรฐาน'\n\t\t\t},\n\t\t\tshortcut: {\n\t\t\t\tshortcuts: 'แป้นลัด',\n\t\t\t\tclose: 'ปิด',\n\t\t\t\ttextFormatting: 'การจัดรูปแบบข้อความ',\n\t\t\t\taction: 'การกระทำ',\n\t\t\t\tparagraphFormatting: 'การจัดรูปแบบย่อหน้า',\n\t\t\t\tdocumentStyle: 'รูปแบบของเอกสาร'\n\t\t\t},\n\t\t\thistory: {\n\t\t\t\tundo: 'ยกเลิกการกระทำ',\n\t\t\t\tredo: 'ทำซ้ำการกระทำ'\n\t\t\t}\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-tr-TR.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'tr-TR': {\n      font: {\n        bold: 'Kalın',\n        italic: 'İtalik',\n        underline: 'Altı çizili',\n        clear: 'Temizle',\n        height: 'Satır yüksekliği',\n        name: 'Yazı Tipi',\n        strikethrough: 'Üstü çizili',\n        subscript: 'Alt Simge',\n        superscript: 'Üst Simge',\n        size: 'Yazı tipi boyutu'\n      },\n      image: {\n        image: 'Resim',\n        insert: 'Resim ekle',\n        resizeFull: 'Orjinal boyut',\n        resizeHalf: '1/2 boyut',\n        resizeQuarter: '1/4 boyut',\n        floatLeft: 'Sola hizala',\n        floatRight: 'Sağa hizala',\n        floatNone: 'Hizalamayı kaldır',\n        shapeRounded: 'Şekil: Yuvarlatılmış Köşe',\n        shapeCircle: 'Şekil: Daire',\n        shapeThumbnail: 'Şekil: K.Resim',\n        shapeNone: 'Şekil: Yok',\n        dragImageHere: 'Buraya sürükleyin',\n        dropImage: 'Resim veya metni bırakın',\n        selectFromFiles: 'Dosya seçin',\n        maximumFileSize: 'Maksimum dosya boyutu',\n        maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.',\n        url: 'Resim bağlantısı',\n        remove: 'Resimi Kaldır'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video bağlantısı',\n        insert: 'Video ekle',\n        url: 'Video bağlantısı?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)'\n      },\n      link: {\n        link: 'Bağlantı',\n        insert: 'Bağlantı ekle',\n        unlink: 'Bağlantıyı kaldır',\n        edit: 'Bağlantıyı düzenle',\n        textToDisplay: 'Görüntülemek için',\n        url: 'Bağlantı adresi?',\n        openInNewWindow: 'Yeni pencerede aç'\n      },\n      table: {\n        table: 'Tablo'\n      },\n      hr: {\n        insert: 'Yatay çizgi ekle'\n      },\n      style: {\n        style: 'Biçim',\n        p: 'p',\n        blockquote: 'Alıntı',\n        pre: 'Önbiçimli',\n        h1: 'Başlık 1',\n        h2: 'Başlık 2',\n        h3: 'Başlık 3',\n        h4: 'Başlık 4',\n        h5: 'Başlık 5',\n        h6: 'Başlık 6'\n      },\n      lists: {\n        unordered: 'Madde işaretli liste',\n        ordered: 'Numaralı liste'\n      },\n      options: {\n        help: 'Yardım',\n        fullscreen: 'Tam ekran',\n        codeview: 'HTML Kodu'\n      },\n      paragraph: {\n        paragraph: 'Paragraf',\n        outdent: 'Girintiyi artır',\n        indent: 'Girintiyi azalt',\n        left: 'Sola hizala',\n        center: 'Ortaya hizala',\n        right: 'Sağa hizala',\n        justify: 'Yasla'\n      },\n      color: {\n        recent: 'Son renk',\n        more: 'Daha fazla renk',\n        background: 'Arka plan rengi',\n        foreground: 'Yazı rengi',\n        transparent: 'Seffaflık',\n        setTransparent: 'Şeffaflığı ayarla',\n        reset: 'Sıfırla',\n        resetToDefault: 'Varsayılanlara sıfırla'\n      },\n      shortcut: {\n        shortcuts: 'Kısayollar',\n        close: 'Kapat',\n        textFormatting: 'Yazı biçimlendirme',\n        action: 'Eylem',\n        paragraphFormatting: 'Paragraf biçimlendirme',\n        documentStyle: 'Biçim',\n        extraKeys: 'İlave anahtarlar'\n      },\n      help: {\n        'insertParagraph': 'Paragraf ekler',\n        'undo': 'Son komudu geri alır',\n        'redo': 'Son komudu yineler',\n        'tab': 'Girintiyi artırır',\n        'untab': 'Girintiyi azaltır',\n        'bold': 'Kalın yazma stilini ayarlar',\n        'italic': 'İtalik yazma stilini ayarlar',\n        'underline': 'Altı çizgili yazma stilini ayarlar',\n        'strikethrough': 'Üstü çizgili yazma stilini ayarlar',\n        'removeFormat': 'Biçimlendirmeyi temizler',\n        'justifyLeft': 'Yazıyı sola hizalar',\n        'justifyCenter': 'Yazıyı ortalar',\n        'justifyRight': 'Yazıyı sağa hizalar',\n        'justifyFull': 'Yazıyı her iki tarafa yazlar',\n        'insertUnorderedList': 'Madde işaretli liste ekler',\n        'insertOrderedList': 'Numaralı liste ekler',\n        'outdent': 'Aktif paragrafın girintisini azaltır',\n        'indent': 'Aktif paragrafın girintisini artırır',\n        'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir',\n        'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir',\n        'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir',\n        'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir',\n        'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir',\n        'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir',\n        'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir',\n        'insertHorizontalRule': 'Yatay çizgi ekler',\n        'linkDialog.show': 'Bağlantı ayar kutusunu gösterir'\n      },\n      history: {\n        undo: 'Geri al',\n        redo: 'Yinele'\n      },\n      specialChar: {\n        specialChar: 'ÖZEL KARAKTERLER',\n        select: 'Özel Karakterleri seçin'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-uk-UA.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'uk-UA': {\n      font: {\n        bold: 'Напівжирний',\n        italic: 'Курсив',\n        underline: 'Підкреслений',\n        clear: 'Прибрати стилі шрифту',\n        height: 'Висота лінії',\n        name: 'Шрифт',\n        strikethrough: 'Закреслений',\n        subscript: 'Нижній індекс',\n        superscript: 'Верхній індекс',\n        size: 'Розмір шрифту'\n      },\n      image: {\n        image: 'Картинка',\n        insert: 'Вставити картинку',\n        resizeFull: 'Відновити розмір',\n        resizeHalf: 'Зменшити до 50%',\n        resizeQuarter: 'Зменшити до 25%',\n        floatLeft: 'Розташувати ліворуч',\n        floatRight: 'Розташувати праворуч',\n        floatNone: 'Початкове розташування',\n        shapeRounded: 'Форма: Заокруглена',\n        shapeCircle: 'Форма: Коло',\n        shapeThumbnail: 'Форма: Мініатюра',\n        shapeNone: 'Форма: Немає',\n        dragImageHere: 'Перетягніть сюди картинку',\n        dropImage: 'Перетягніть картинку',\n        selectFromFiles: 'Вибрати з файлів',\n        url: 'URL картинки',\n        remove: 'Видалити картинку'\n      },\n      video: {\n        video: 'Відео',\n        videoLink: 'Посилання на відео',\n        insert: 'Вставити відео',\n        url: 'URL відео',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)'\n      },\n      link: {\n        link: 'Посилання',\n        insert: 'Вставити посилання',\n        unlink: 'Прибрати посилання',\n        edit: 'Редагувати',\n        textToDisplay: 'Текст, що відображається',\n        url: 'URL для переходу',\n        openInNewWindow: 'Відкривати у новому вікні'\n      },\n      table: {\n        table: 'Таблиця'\n      },\n      hr: {\n        insert: 'Вставити горизонтальну лінію'\n      },\n      style: {\n        style: 'Стиль',\n        p: 'Нормальний',\n        blockquote: 'Цитата',\n        pre: 'Код',\n        h1: 'Заголовок 1',\n        h2: 'Заголовок 2',\n        h3: 'Заголовок 3',\n        h4: 'Заголовок 4',\n        h5: 'Заголовок 5',\n        h6: 'Заголовок 6'\n      },\n      lists: {\n        unordered: 'Маркований список',\n        ordered: 'Нумерований список'\n      },\n      options: {\n        help: 'Допомога',\n        fullscreen: 'На весь екран',\n        codeview: 'Початковий код'\n      },\n      paragraph: {\n        paragraph: 'Параграф',\n        outdent: 'Зменшити відступ',\n        indent: 'Збільшити відступ',\n        left: 'Вирівняти по лівому краю',\n        center: 'Вирівняти по центру',\n        right: 'Вирівняти по правому краю',\n        justify: 'Розтягнути по ширині'\n      },\n      color: {\n        recent: 'Останній колір',\n        more: 'Ще кольори',\n        background: 'Колір фону',\n        foreground: 'Колір шрифту',\n        transparent: 'Прозорий',\n        setTransparent: 'Зробити прозорим',\n        reset: 'Відновити',\n        resetToDefault: 'Відновити початкові'\n      },\n      shortcut: {\n        shortcuts: 'Комбінації клавіш',\n        close: 'Закрити',\n        textFormatting: 'Форматування тексту',\n        action: 'Дія',\n        paragraphFormatting: 'Форматування параграфу',\n        documentStyle: 'Стиль документу'\n      },\n      history: {\n        undo: 'Відмінити',\n        redo: 'Повторити'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-vi-VN.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'vi-VN': {\n      font: {\n        bold: 'In Đậm',\n        italic: 'In Nghiêng',\n        underline: 'Gạch dưới',\n        clear: 'Bỏ định dạng',\n        height: 'Chiều cao dòng',\n        name: 'Phông chữ',\n        strikethrough: 'Gạch ngang',\n        size: 'Cỡ chữ'\n      },\n      image: {\n        image: 'Hình ảnh',\n        insert: 'Chèn',\n        resizeFull: '100%',\n        resizeHalf: '50%',\n        resizeQuarter: '25%',\n        floatLeft: 'Trôi về trái',\n        floatRight: 'Trôi về phải',\n        floatNone: 'Không trôi',\n        dragImageHere: 'Thả Ảnh ở vùng này',\n        selectFromFiles: 'Chọn từ File',\n        url: 'URL',\n        remove: 'Xóa'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Link đến Video',\n        insert: 'Chèn Video',\n        url: 'URL',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Chèn Link',\n        unlink: 'Gỡ Link',\n        edit: 'Sửa',\n        textToDisplay: 'Văn bản hiển thị',\n        url: 'URL',\n        openInNewWindow: 'Mở ở Cửa sổ mới'\n      },\n      table: {\n        table: 'Bảng'\n      },\n      hr: {\n        insert: 'Chèn'\n      },\n      style: {\n        style: 'Kiểu chữ',\n        p: 'Chữ thường',\n        blockquote: 'Đoạn trích',\n        pre: 'Mã Code',\n        h1: 'H1',\n        h2: 'H2',\n        h3: 'H3',\n        h4: 'H4',\n        h5: 'H5',\n        h6: 'H6'\n      },\n      lists: {\n        unordered: 'Liệt kê danh sách',\n        ordered: 'Liệt kê theo thứ tự'\n      },\n      options: {\n        help: 'Trợ giúp',\n        fullscreen: 'Toàn Màn hình',\n        codeview: 'Xem Code'\n      },\n      paragraph: {\n        paragraph: 'Canh lề',\n        outdent: 'Dịch sang trái',\n        indent: 'Dịch sang phải',\n        left: 'Canh trái',\n        center: 'Canh giữa',\n        right: 'Canh phải',\n        justify: 'Canh đều'\n      },\n      color: {\n        recent: 'Màu chữ',\n        more: 'Mở rộng',\n        background: 'Màu nền',\n        foreground: 'Màu chữ',\n        transparent: 'trong suốt',\n        setTransparent: 'Nền trong suốt',\n        reset: 'Thiết lập lại',\n        resetToDefault: 'Trở lại ban đầu'\n      },\n      shortcut: {\n        shortcuts: 'Phím tắt',\n        close: 'Đóng',\n        textFormatting: 'Định dạng Văn bản',\n        action: 'Hành động',\n        paragraphFormatting: 'Định dạng',\n        documentStyle: 'Kiểu văn bản'\n      },\n      history: {\n        undo: 'Lùi lại',\n        redo: 'Làm lại'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-zh-CN.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-CN': {\n      font: {\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        clear: '清除格式',\n        height: '行高',\n        name: '字体',\n        strikethrough: '删除线',\n        subscript: '下标',\n        superscript: '上标',\n        size: '字号'\n      },\n      image: {\n        image: '图片',\n        insert: '插入图片',\n        resizeFull: '缩放至 100%',\n        resizeHalf: '缩放至 50%',\n        resizeQuarter: '缩放至 25%',\n        floatLeft: '靠左浮动',\n        floatRight: '靠右浮动',\n        floatNone: '取消浮动',\n        shapeRounded: '形状: 圆角',\n        shapeCircle: '形状: 圆',\n        shapeThumbnail: '形状: 缩略图',\n        shapeNone: '形状: 无',\n        dragImageHere: '将图片拖拽至此处',\n        selectFromFiles: '从本地上传',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '图片地址',\n        remove: '移除图片'\n      },\n      video: {\n        video: '视频',\n        videoLink: '视频链接',\n        insert: '插入视频',\n        url: '视频地址',\n        providers: '(优酷, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '链接',\n        insert: '插入链接',\n        unlink: '去除链接',\n        edit: '编辑链接',\n        textToDisplay: '显示文本',\n        url: '链接地址',\n        openInNewWindow: '在新窗口打开'\n      },\n      table: {\n        table: '表格'\n      },\n      hr: {\n        insert: '水平线'\n      },\n      style: {\n        style: '样式',\n        p: '普通',\n        blockquote: '引用',\n        pre: '代码',\n        h1: '标题 1',\n        h2: '标题 2',\n        h3: '标题 3',\n        h4: '标题 4',\n        h5: '标题 5',\n        h6: '标题 6'\n      },\n      lists: {\n        unordered: '无序列表',\n        ordered: '有序列表'\n      },\n      options: {\n        help: '帮助',\n        fullscreen: '全屏',\n        codeview: '源代码'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        left: '左对齐',\n        center: '居中对齐',\n        right: '右对齐',\n        justify: '两端对齐'\n      },\n      color: {\n        recent: '最近使用',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重置',\n        resetToDefault: '默认'\n      },\n      shortcut: {\n        shortcuts: '快捷键',\n        close: '关闭',\n        textFormatting: '文本格式',\n        action: '动作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文档样式',\n        extraKeys: '额外按键'\n      },\n      history: {\n        undo: '撤销',\n        redo: '重做'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/lang/summernote-zh-TW.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-TW': {\n      font: {\n        bold: '粗體',\n        italic: '斜體',\n        underline: '底線',\n        clear: '清除格式',\n        height: '行高',\n        name: '字體',\n        strikethrough: '刪除線',\n        subscript: '下標',\n        superscript: '上標',\n        size: '字號'\n      },\n      image: {\n        image: '圖片',\n        insert: '插入圖片',\n        resizeFull: '縮放至100%',\n        resizeHalf: '縮放至 50%',\n        resizeQuarter: '縮放至 25%',\n        floatLeft: '靠左浮動',\n        floatRight: '靠右浮動',\n        floatNone: '取消浮動',\n        shapeRounded: '形狀: 圓角',\n        shapeCircle: '形狀: 圓',\n        shapeThumbnail: '形狀: 縮略圖',\n        shapeNone: '形狀: 無',\n        dragImageHere: '將圖片拖曳至此處',\n        selectFromFiles: '從本機上傳',\n        maximumFileSize: '文件大小最大值',\n        maximumFileSizeError: '文件大小超出最大值。',\n        url: '圖片網址',\n        remove: '移除圖片'\n      },\n      video: {\n        video: '影片',\n        videoLink: '影片連結',\n        insert: '插入影片',\n        url: '影片網址',\n        providers: '(優酷, Instagram, DailyMotion, Youtube等)'\n      },\n      link: {\n        link: '連結',\n        insert: '插入連結',\n        unlink: '取消連結',\n        edit: '編輯連結',\n        textToDisplay: '顯示文字',\n        url: '連結網址',\n        openInNewWindow: '在新視窗開啟'\n      },\n      table: {\n        table: '表格'\n      },\n      hr: {\n        insert: '水平線'\n      },\n      style: {\n        style: '樣式',\n        p: '一般',\n        blockquote: '引用區塊',\n        pre: '程式碼區塊',\n        h1: '標題 1',\n        h2: '標題 2',\n        h3: '標題 3',\n        h4: '標題 4',\n        h5: '標題 5',\n        h6: '標題 6'\n      },\n      lists: {\n        unordered: '項目清單',\n        ordered: '編號清單'\n      },\n      options: {\n        help: '幫助',\n        fullscreen: '全螢幕',\n        codeview: '原始碼'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '取消縮排',\n        indent: '增加縮排',\n        left: '靠右對齊',\n        center: '靠中對齊',\n        right: '靠右對齊',\n        justify: '左右對齊'\n      },\n      color: {\n        recent: '字型顏色',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重設',\n        resetToDefault: '默認'\n      },\n      shortcut: {\n        shortcuts: '快捷鍵',\n        close: '關閉',\n        textFormatting: '文字格式',\n        action: '動作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文件格式',\n        extraKeys: '額外按鍵'\n      },\n      history: {\n        undo: '復原',\n        redo: '取消復原'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/plugin/databasic/summernote-ext-databasic.css",
    "content": ".ext-databasic {\n\tposition: relative;\n\tdisplay: block;\n\tmin-height: 50px;\n\tbackground-color: cyan;\n\ttext-align: center;\n\tpadding: 20px;\n\tborder: 1px solid white;\n\tborder-radius: 10px;\n}\n\n.ext-databasic p {\n\tcolor: white;\n\tfont-size: 1.2em;\n\tmargin: 0;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/plugin/databasic/summernote-ext-databasic.js",
    "content": "(function (factory) {\n  /* global define */\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function ($) {\n\n  // pull in some summernote core functions\n  var ui = $.summernote.ui;\n  var dom = $.summernote.dom;\n\n  // define the popover plugin\n  var DataBasicPlugin = function (context) {\n    var self = this;\n    var options = context.options;\n    var lang = options.langInfo;\n    \n    self.icon = '<i class=\"fa fa-object-group\"/>';\n\n    // add context menu button for dialog\n    context.memo('button.databasic', function () {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.insert,\n        click: context.createInvokeHandler('databasic.showDialog')\n      }).render();\n    });\n\n    // add popover edit button\n    context.memo('button.databasicDialog', function () {\n      return ui.button({\n        contents: self.icon,\n        tooltip: lang.databasic.edit,\n        click: context.createInvokeHandler('databasic.showDialog')\n      }).render();\n    });\n\n    //  add popover size buttons\n    context.memo('button.databasicSize100', function () {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">100%</span>',\n        tooltip: lang.image.resizeFull,\n        click: context.createInvokeHandler('editor.resize', '1')\n      }).render();\n    });\n    context.memo('button.databasicSize50', function () {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">50%</span>',\n        tooltip: lang.image.resizeHalf,\n        click: context.createInvokeHandler('editor.resize', '0.5')\n      }).render();\n    });\n    context.memo('button.databasicSize25', function () {\n      return ui.button({\n        contents: '<span class=\"note-fontsize-10\">25%</span>',\n        tooltip: lang.image.resizeQuarter,\n        click: context.createInvokeHandler('editor.resize', '0.25')\n      }).render();\n    });\n\n    self.events = {\n      'summernote.init': function (we, e) {\n        // update existing containers\n        $('data.ext-databasic', e.editable).each(function () { self.setContent($(this)); });\n        // TODO: make this an undo snapshot...\n      },\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () {\n        self.update();\n      },\n      'summernote.dialog.shown': function () {\n        self.hidePopover();\n      }\n    };\n\n    self.initialize = function () {\n      // create dialog markup\n      var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor;\n\n      var body = '<div class=\"form-group row-fluid\">' +\n          '<label>' + lang.databasic.testLabel + '</label>' +\n          '<input class=\"ext-databasic-test form-control\" type=\"text\" />' +\n          '</div>';\n      var footer = '<button href=\"#\" class=\"btn btn-primary ext-databasic-save\">' + lang.databasic.insert + '</button>';\n\n      self.$dialog = ui.dialog({\n        title: lang.databasic.name,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n      \n      // create popover\n      self.$popover = ui.popover({\n        className: 'ext-databasic-popover'\n      }).render().appendTo('body');\n      var $content = self.$popover.find('.popover-content');\n      \n      context.invoke('buttons.build', $content, options.popover.databasic);\n    };\n\n    self.destroy = function () {\n      self.$popover.remove();\n      self.$popover = null;\n      self.$dialog.remove();\n      self.$dialog = null;\n    };\n    \n    self.update = function () {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!context.invoke('editor.hasFocus')) {\n        self.hidePopover();\n        return;\n      }\n\n      var rng = context.invoke('editor.createRange');\n      var visible = false;\n      \n      if (rng.isOnData())\n      {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n      \n        if ($data.length)\n        {\n          var pos = dom.posFromPlaceholder($data[0]);\n          \n          self.$popover.css({\n            display: 'block',\n            left: pos.left,\n            top: pos.top\n          });\n          \n          // save editor target to let size buttons resize the container\n          context.invoke('editor.saveTarget', $data[0]);\n\n          visible = true;\n        }\n\n      }\n      \n      // hide if not visible\n      if (!visible) {\n        self.hidePopover();\n      }\n\n    };\n\n    self.hidePopover = function () {\n      self.$popover.hide();\n    };\n\n    // define plugin dialog\n    self.getInfo = function () {\n      var rng = context.invoke('editor.createRange');\n      \n      if (rng.isOnData())\n      {\n        var $data = $(rng.sc).closest('data.ext-databasic');\n      \n        if ($data.length)\n        {\n          // Get the first node on range(for edit).\n          return {\n            node: $data,\n            test: $data.attr('data-test')\n          };\n        }\n      }\n      \n      return {};\n    };\n\n    self.setContent = function ($node) {\n      $node.html('<p contenteditable=\"false\">' + self.icon + ' ' + lang.databasic.name + ': ' +\n        $node.attr('data-test') + '</p>');\n    };\n\n    self.updateNode = function (info) {\n      self.setContent(info.node\n        .attr('data-test', info.test));\n    };\n\n    self.createNode = function (info) {\n      var $node = $('<data class=\"ext-databasic\"></data>');\n\n      if ($node) {\n        // save node to info structure\n        info.node = $node;\n        // insert node into editor dom\n        context.invoke('editor.insertNode', $node[0]);\n      }\n\n      return $node;\n    };\n    \n    self.showDialog = function () {\n      var info = self.getInfo();\n      var newNode = !info.node;\n      context.invoke('editor.saveRange');\n      \n      self\n        .openDialog(info)\n        .then(function (dialogInfo) {\n          // [workaround] hide dialog before restore range for IE range focus\n          ui.hideDialog(self.$dialog);\n          context.invoke('editor.restoreRange');\n          \n          // insert a new node\n          if (newNode)\n          {\n            self.createNode(info);\n          }\n          \n          // update info with dialog info\n          $.extend(info, dialogInfo);\n          \n          self.updateNode(info);\n        })\n        .fail(function () {\n          context.invoke('editor.restoreRange');\n        });\n\n    };\n    \n    self.openDialog = function (info) {\n      return $.Deferred(function (deferred) {\n        var $inpTest = self.$dialog.find('.ext-databasic-test');\n        var $saveBtn = self.$dialog.find('.ext-databasic-save');\n        var onKeyup = function (event) {\n            if (event.keyCode === 13)\n            {\n              $saveBtn.trigger('click');\n            }\n          };\n        \n        ui.onDialogShown(self.$dialog, function () {\n          context.triggerEvent('dialog.shown');\n\n          $inpTest.val(info.test).on('input', function () {\n            ui.toggleBtn($saveBtn, $inpTest.val());\n          }).trigger('focus').on('keyup', onKeyup);\n\n          $saveBtn\n            .text(info.node ? lang.databasic.edit : lang.databasic.insert)\n            .click(function (event) {\n              event.preventDefault();\n\n              deferred.resolve({ test: $inpTest.val() });\n            });\n          \n          // init save button\n          ui.toggleBtn($saveBtn, $inpTest.val());\n        });\n\n        ui.onDialogHidden(self.$dialog, function () {\n          $inpTest.off('input keyup');\n          $saveBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      });\n    };\n  };\n\n  // Extends summernote\n  $.extend(true, $.summernote, {\n    plugins: {\n      databasic: DataBasicPlugin\n    },\n    \n    options: {\n      popover: {\n        databasic: [\n          ['databasic', ['databasicDialog', 'databasicSize100', 'databasicSize50', 'databasicSize25']]\n        ]\n      }\n    },\n    \n    // add localization texts\n    lang: {\n      'en-US': {\n        databasic: {\n          name: 'Basic Data Container',\n          insert: 'insert basic data container',\n          edit: 'edit basic data container',\n          testLabel: 'test input'\n        }\n      }\n    }\n    \n  });\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/plugin/hello/summernote-ext-hello.js",
    "content": "(function (factory) {\n  /* global define */\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function ($) {\n\n  // Extends plugins for adding hello.\n  //  - plugin is external module for customizing.\n  $.extend($.summernote.plugins, {\n    /**\n     * @param {Object} context - context object has status of editor.\n     */\n    'hello': function (context) {\n      var self = this;\n\n      // ui has renders to build ui elements.\n      //  - you can create a button with `ui.button`\n      var ui = $.summernote.ui;\n\n      // add hello button\n      context.memo('button.hello', function () {\n        // create button\n        var button = ui.button({\n          contents: '<i class=\"fa fa-child\"/> Hello',\n          tooltip: 'hello',\n          click: function () {\n            self.$panel.show();\n            self.$panel.hide(500);\n            // invoke insertText method with 'hello' on editor module.\n            context.invoke('editor.insertText', 'hello');\n          }\n        });\n\n        // create jQuery object from button instance.\n        var $hello = button.render();\n        return $hello;\n      });\n\n      // This events will be attached when editor is initialized.\n      this.events = {\n        // This will be called after modules are initialized.\n        'summernote.init': function (we, e) {\n          console.log('summernote initialized', we, e);\n        },\n        // This will be called when user releases a key on editable.\n        'summernote.keyup': function (we, e) {\n          console.log('summernote keyup', we, e);\n        }\n      };\n\n      // This method will be called when editor is initialized by $('..').summernote();\n      // You can create elements for plugin\n      this.initialize = function () {\n        this.$panel = $('<div class=\"hello-panel\"/>').css({\n          position: 'absolute',\n          width: 100,\n          height: 100,\n          left: '50%',\n          top: '50%',\n          background: 'red'\n        }).hide();\n\n        this.$panel.appendTo('body');\n      };\n\n      // This methods will be called when editor is destroyed by $('..').summernote('destroy');\n      // You should remove elements on `initialize`.\n      this.destroy = function () {\n        this.$panel.remove();\n        this.$panel = null;\n      };\n    }\n  });\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/plugin/specialchars/summernote-ext-specialchars.js",
    "content": "(function (factory) {\n  /* global define */\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function ($) {\n  $.extend($.summernote.plugins, {\n    'specialchars': function (context) {\n      var self = this;\n      var ui = $.summernote.ui;\n\n      var $editor = context.layoutInfo.editor;\n      var options = context.options;\n      var lang = options.langInfo;\n\n      var KEY = {\n        UP: 38,\n        DOWN: 40,\n        LEFT: 37,\n        RIGHT: 39,\n        ENTER: 13\n      };\n      var COLUMN_LENGTH = 15;\n      var COLUMN_WIDTH = 35;\n\n      var currentColumn, currentRow, totalColumn, totalRow = 0;\n\n      // special characters data set\n      var specialCharDataSet = [\n        '&quot;', '&amp;', '&lt;', '&gt;', '&iexcl;', '&cent;',\n        '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;',\n        '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;',\n        '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;',\n        '&sup3;', '&acute;', '&micro;', '&para;', '&middot;',\n        '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;',\n        '&frac12;', '&frac34;', '&iquest;', '&times;', '&divide;',\n        '&fnof;', '&circ;', '&tilde;', '&ndash;', '&mdash;',\n        '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;',\n        '&bdquo;', '&dagger;', '&Dagger;', '&bull;', '&hellip;',\n        '&permil;', '&prime;', '&Prime;', '&lsaquo;', '&rsaquo;',\n        '&oline;', '&frasl;', '&euro;', '&image;', '&weierp;',\n        '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;',\n        '&rarr;', '&darr;', '&harr;', '&crarr;', '&lArr;',\n        '&uArr;', '&rArr;', '&dArr;', '&hArr;', '&forall;',\n        '&part;', '&exist;', '&empty;', '&nabla;', '&isin;',\n        '&notin;', '&ni;', '&prod;', '&sum;', '&minus;',\n        '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;',\n        '&and;', '&or;', '&cap;', '&cup;', '&int;',\n        '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;',\n        '&equiv;', '&le;', '&ge;', '&sub;', '&sup;',\n        '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;',\n        '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;',\n        '&rfloor;', '&loz;', '&spades;', '&clubs;', '&hearts;',\n        '&diams;'\n      ];\n\n      context.memo('button.specialCharacter', function () {\n        return ui.button({\n          contents: '<i class=\"fa fa-font fa-flip-vertical\">',\n          tooltip: lang.specialChar.specialChar,\n          click: function () {\n            self.show();\n          }\n        }).render();\n      });\n\n      /**\n       * Make Special Characters Table\n       *\n       * @member plugin.specialChar\n       * @private\n       * @return {jQuery}\n       */\n      this.makeSpecialCharSetTable = function () {\n        var $table = $('<table/>');\n        $.each(specialCharDataSet, function (idx, text) {\n          var $td = $('<td/>').addClass('note-specialchar-node');\n          var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last();\n\n          var $button = ui.button({\n            callback: function ($node) {\n              $node.html(text);\n              $node.attr('title', text);\n              $node.attr('data-value', encodeURIComponent(text));\n              $node.css({\n                width: COLUMN_WIDTH,\n                'margin-right': '2px',\n                'margin-bottom': '2px'\n              });\n            }\n          }).render();\n\n          $td.append($button);\n\n          $tr.append($td);\n          if (idx % COLUMN_LENGTH === 0) {\n            $table.append($tr);\n          }\n        });\n\n        totalRow = $table.find('tr').length;\n        totalColumn = COLUMN_LENGTH;\n\n        return $table;\n      };\n\n      this.initialize = function () {\n        var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n        var body = '<div class=\"form-group row-fluid\">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>';\n\n        this.$dialog = ui.dialog({\n          title: lang.specialChar.select,\n          body: body\n        }).render().appendTo($container);\n      };\n\n      this.show = function () {\n        var text = context.invoke('editor.getSelectedText');\n        context.invoke('editor.saveRange');\n        this.showSpecialCharDialog(text).then(function (selectChar) {\n          context.invoke('editor.restoreRange');\n\n          // build node\n          var $node = $('<span></span>').html(selectChar)[0];\n\n          if ($node) {\n            // insert video node\n            context.invoke('editor.insertNode', $node);\n          }\n        }).fail(function () {\n          context.invoke('editor.restoreRange');\n        });\n      };\n\n      /**\n       * show image dialog\n       *\n       * @param {jQuery} $dialog\n       * @return {Promise}\n       */\n      this.showSpecialCharDialog = function (text) {\n        return $.Deferred(function (deferred) {\n          var $specialCharDialog = self.$dialog;\n          var $specialCharNode = $specialCharDialog.find('.note-specialchar-node');\n          var $selectedNode = null;\n          var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT];\n          var ENTER_KEY = KEY.ENTER;\n\n          function addActiveClass($target) {\n            if (!$target) {\n              return;\n            }\n            $target.find('button').addClass('active');\n            $selectedNode = $target;\n          }\n\n          function removeActiveClass($target) {\n            $target.find('button').removeClass('active');\n            $selectedNode = null;\n          }\n\n          // find next node\n          function findNextNode(row, column) {\n            var findNode = null;\n            $.each($specialCharNode, function (idx, $node) {\n              var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH);\n              var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH;\n              if (findRow === row && findColumn === column) {\n                findNode = $node;\n                return false;\n              }\n            });\n            return $(findNode);\n          }\n\n          function arrowKeyHandler(keyCode) {\n            // left, right, up, down key\n            var $nextNode;\n            var lastRowColumnLength = $specialCharNode.length % totalColumn;\n\n            if (KEY.LEFT === keyCode) {\n\n              if (currentColumn > 1) {\n                currentColumn = currentColumn - 1;\n              } else if (currentRow === 1 && currentColumn === 1) {\n                currentColumn = lastRowColumnLength;\n                currentRow = totalRow;\n              } else {\n                currentColumn = totalColumn;\n                currentRow = currentRow - 1;\n              }\n\n            } else if (KEY.RIGHT === keyCode) {\n\n              if (currentRow === totalRow && lastRowColumnLength === currentColumn) {\n                currentColumn = 1;\n                currentRow = 1;\n              } else if (currentColumn < totalColumn) {\n                currentColumn = currentColumn + 1;\n              } else {\n                currentColumn = 1;\n                currentRow = currentRow + 1;\n              }\n\n            } else if (KEY.UP === keyCode) {\n              if (currentRow === 1 && lastRowColumnLength < currentColumn) {\n                currentRow = totalRow - 1;\n              } else {\n                currentRow = currentRow - 1;\n              }\n            } else if (KEY.DOWN === keyCode) {\n              currentRow = currentRow + 1;\n            }\n\n            if (currentRow === totalRow && currentColumn > lastRowColumnLength) {\n              currentRow = 1;\n            } else if (currentRow > totalRow) {\n              currentRow = 1;\n            } else if (currentRow < 1) {\n              currentRow = totalRow;\n            }\n\n            $nextNode = findNextNode(currentRow, currentColumn);\n\n            if ($nextNode) {\n              removeActiveClass($selectedNode);\n              addActiveClass($nextNode);\n            }\n          }\n\n          function enterKeyHandler() {\n            if (!$selectedNode) {\n              return;\n            }\n\n            deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));\n            $specialCharDialog.modal('hide');\n          }\n\n          function keyDownEventHandler(event) {\n            event.preventDefault();\n            var keyCode = event.keyCode;\n            if (keyCode === undefined || keyCode === null) {\n              return;\n            }\n            // check arrowKeys match\n            if (ARROW_KEYS.indexOf(keyCode) > -1) {\n              if ($selectedNode === null) {\n                addActiveClass($specialCharNode.eq(0));\n                currentColumn = 1;\n                currentRow = 1;\n                return;\n              }\n              arrowKeyHandler(keyCode);\n            } else if (keyCode === ENTER_KEY) {\n              enterKeyHandler();\n            }\n            return false;\n          }\n\n          // remove class\n          removeActiveClass($specialCharNode);\n\n          // find selected node\n          if (text) {\n            for (var i = 0; i < $specialCharNode.length; i++) {\n              var $checkNode = $($specialCharNode[i]);\n              if ($checkNode.text() === text) {\n                addActiveClass($checkNode);\n                currentRow = Math.ceil((i + 1) / COLUMN_LENGTH);\n                currentColumn = (i + 1) % COLUMN_LENGTH;\n              }\n            }\n          }\n\n          ui.onDialogShown(self.$dialog, function () {\n\n            $(document).on('keydown', keyDownEventHandler);\n\n            self.$dialog.find('button').tooltip();\n\n            $specialCharNode.on('click', function (event) {\n              event.preventDefault();\n              deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));\n              ui.hideDialog(self.$dialog);\n            });\n\n          });\n\n          ui.onDialogHidden(self.$dialog, function () {\n            $specialCharNode.off('click');\n\n            self.$dialog.find('button').tooltip('destroy');\n\n            $(document).off('keydown', keyDownEventHandler);\n\n            if (deferred.state() === 'pending') {\n              deferred.reject();\n            }\n          });\n\n          ui.showDialog(self.$dialog);\n        });\n      };\n    }\n  });\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/summernote.css",
    "content": "@font-face{font-family:\"summernote\";font-style:normal;font-weight:normal;src:url(\"font/summernote.eot?ad8d7e2d177d2473aecd9b35d16211fb\");src:url(\"font/summernote.eot?#iefix\") format(\"embedded-opentype\"),url(\"font/summernote.woff?ad8d7e2d177d2473aecd9b35d16211fb\") format(\"woff\"),url(\"font/summernote.ttf?ad8d7e2d177d2473aecd9b35d16211fb\") format(\"truetype\")}[class^=\"note-icon-\"]:before,[class*=\" note-icon-\"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before{content:\"\\f101\"}.note-icon-align-indent:before{content:\"\\f102\"}.note-icon-align-justify:before{content:\"\\f103\"}.note-icon-align-left:before{content:\"\\f104\"}.note-icon-align-outdent:before{content:\"\\f105\"}.note-icon-align-right:before{content:\"\\f106\"}.note-icon-align:before{content:\"\\f107\"}.note-icon-arrows-alt:before{content:\"\\f108\"}.note-icon-bold:before{content:\"\\f109\"}.note-icon-caret:before{content:\"\\f10a\"}.note-icon-chain-broken:before{content:\"\\f10b\"}.note-icon-circle:before{content:\"\\f10c\"}.note-icon-close:before{content:\"\\f10d\"}.note-icon-code:before{content:\"\\f10e\"}.note-icon-eraser:before{content:\"\\f10f\"}.note-icon-font:before{content:\"\\f110\"}.note-icon-frame:before{content:\"\\f111\"}.note-icon-italic:before{content:\"\\f112\"}.note-icon-link:before{content:\"\\f113\"}.note-icon-magic:before{content:\"\\f114\"}.note-icon-menu-check:before{content:\"\\f115\"}.note-icon-minus:before{content:\"\\f116\"}.note-icon-orderedlist:before{content:\"\\f117\"}.note-icon-pencil:before{content:\"\\f118\"}.note-icon-picture:before{content:\"\\f119\"}.note-icon-question:before{content:\"\\f11a\"}.note-icon-redo:before{content:\"\\f11b\"}.note-icon-special-character:before{content:\"\\f11c\"}.note-icon-square:before{content:\"\\f11d\"}.note-icon-strikethrough:before{content:\"\\f11e\"}.note-icon-subscript:before{content:\"\\f11f\"}.note-icon-summernote:before{content:\"\\f120\"}.note-icon-superscript:before{content:\"\\f121\"}.note-icon-table:before{content:\"\\f122\"}.note-icon-text-height:before{content:\"\\f123\"}.note-icon-trash:before{content:\"\\f124\"}.note-icon-underline:before{content:\"\\f125\"}.note-icon-undo:before{content:\"\\f126\"}.note-icon-unorderedlist:before{content:\"\\f127\"}.note-icon-video:before{content:\"\\f128\"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:white;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:bold;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable=\"false\"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:white}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:8px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style h1,.panel-heading.note-toolbar .note-style h1,.note-popover .popover-content .note-style h2,.panel-heading.note-toolbar .note-style h2,.note-popover .popover-content .note-style h3,.panel-heading.note-toolbar .note-style h3,.note-popover .popover-content .note-style h4,.panel-heading.note-toolbar .note-style h4,.note-popover .popover-content .note-style h5,.panel-heading.note-toolbar .note-style h5,.note-popover .popover-content .note-style h6,.panel-heading.note-toolbar .note-style h6,.note-popover .popover-content .note-style blockquote,.panel-heading.note-toolbar .note-style blockquote{margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:340px}.note-popover .popover-content .note-color .dropdown-menu .btn-group,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group{margin:0}.note-popover .popover-content .note-color .dropdown-menu .btn-group:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:white;background-color:black;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:white;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/summernote/summernote.js",
    "content": "/**\n * Super simple wysiwyg editor v0.8.2\n * http://summernote.org/\n *\n * summernote.js\n * Copyright 2013-2016 Alan Hong. and other contributors\n * summernote may be freely distributed under the MIT license./\n *\n * Date: 2016-07-18T18:01Z\n */\n(function (factory) {\n  /* global define */\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(window.jQuery);\n  }\n}(function ($) {\n  'use strict';\n\n  /**\n   * @class core.func\n   *\n   * func utils (for high-order func's arg)\n   *\n   * @singleton\n   * @alternateClassName func\n   */\n  var func = (function () {\n    var eq = function (itemA) {\n      return function (itemB) {\n        return itemA === itemB;\n      };\n    };\n\n    var eq2 = function (itemA, itemB) {\n      return itemA === itemB;\n    };\n\n    var peq2 = function (propName) {\n      return function (itemA, itemB) {\n        return itemA[propName] === itemB[propName];\n      };\n    };\n\n    var ok = function () {\n      return true;\n    };\n\n    var fail = function () {\n      return false;\n    };\n\n    var not = function (f) {\n      return function () {\n        return !f.apply(f, arguments);\n      };\n    };\n\n    var and = function (fA, fB) {\n      return function (item) {\n        return fA(item) && fB(item);\n      };\n    };\n\n    var self = function (a) {\n      return a;\n    };\n\n    var invoke = function (obj, method) {\n      return function () {\n        return obj[method].apply(obj, arguments);\n      };\n    };\n\n    var idCounter = 0;\n\n    /**\n     * generate a globally-unique id\n     *\n     * @param {String} [prefix]\n     */\n    var uniqueId = function (prefix) {\n      var id = ++idCounter + '';\n      return prefix ? prefix + id : id;\n    };\n\n    /**\n     * returns bnd (bounds) from rect\n     *\n     * - IE Compatibility Issue: http://goo.gl/sRLOAo\n     * - Scroll Issue: http://goo.gl/sNjUc\n     *\n     * @param {Rect} rect\n     * @return {Object} bounds\n     * @return {Number} bounds.top\n     * @return {Number} bounds.left\n     * @return {Number} bounds.width\n     * @return {Number} bounds.height\n     */\n    var rect2bnd = function (rect) {\n      var $document = $(document);\n      return {\n        top: rect.top + $document.scrollTop(),\n        left: rect.left + $document.scrollLeft(),\n        width: rect.right - rect.left,\n        height: rect.bottom - rect.top\n      };\n    };\n\n    /**\n     * returns a copy of the object where the keys have become the values and the values the keys.\n     * @param {Object} obj\n     * @return {Object}\n     */\n    var invertObject = function (obj) {\n      var inverted = {};\n      for (var key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          inverted[obj[key]] = key;\n        }\n      }\n      return inverted;\n    };\n\n    /**\n     * @param {String} namespace\n     * @param {String} [prefix]\n     * @return {String}\n     */\n    var namespaceToCamel = function (namespace, prefix) {\n      prefix = prefix || '';\n      return prefix + namespace.split('.').map(function (name) {\n        return name.substring(0, 1).toUpperCase() + name.substring(1);\n      }).join('');\n    };\n\n    return {\n      eq: eq,\n      eq2: eq2,\n      peq2: peq2,\n      ok: ok,\n      fail: fail,\n      self: self,\n      not: not,\n      and: and,\n      invoke: invoke,\n      uniqueId: uniqueId,\n      rect2bnd: rect2bnd,\n      invertObject: invertObject,\n      namespaceToCamel: namespaceToCamel\n    };\n  })();\n\n  /**\n   * @class core.list\n   *\n   * list utils\n   *\n   * @singleton\n   * @alternateClassName list\n   */\n  var list = (function () {\n    /**\n     * returns the first item of an array.\n     *\n     * @param {Array} array\n     */\n    var head = function (array) {\n      return array[0];\n    };\n\n    /**\n     * returns the last item of an array.\n     *\n     * @param {Array} array\n     */\n    var last = function (array) {\n      return array[array.length - 1];\n    };\n\n    /**\n     * returns everything but the last entry of the array.\n     *\n     * @param {Array} array\n     */\n    var initial = function (array) {\n      return array.slice(0, array.length - 1);\n    };\n\n    /**\n     * returns the rest of the items in an array.\n     *\n     * @param {Array} array\n     */\n    var tail = function (array) {\n      return array.slice(1);\n    };\n\n    /**\n     * returns item of array\n     */\n    var find = function (array, pred) {\n      for (var idx = 0, len = array.length; idx < len; idx ++) {\n        var item = array[idx];\n        if (pred(item)) {\n          return item;\n        }\n      }\n    };\n\n    /**\n     * returns true if all of the values in the array pass the predicate truth test.\n     */\n    var all = function (array, pred) {\n      for (var idx = 0, len = array.length; idx < len; idx ++) {\n        if (!pred(array[idx])) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    /**\n     * returns index of item\n     */\n    var indexOf = function (array, item) {\n      return $.inArray(item, array);\n    };\n\n    /**\n     * returns true if the value is present in the list.\n     */\n    var contains = function (array, item) {\n      return indexOf(array, item) !== -1;\n    };\n\n    /**\n     * get sum from a list\n     *\n     * @param {Array} array - array\n     * @param {Function} fn - iterator\n     */\n    var sum = function (array, fn) {\n      fn = fn || func.self;\n      return array.reduce(function (memo, v) {\n        return memo + fn(v);\n      }, 0);\n    };\n  \n    /**\n     * returns a copy of the collection with array type.\n     * @param {Collection} collection - collection eg) node.childNodes, ...\n     */\n    var from = function (collection) {\n      var result = [], idx = -1, length = collection.length;\n      while (++idx < length) {\n        result[idx] = collection[idx];\n      }\n      return result;\n    };\n\n    /**\n     * returns whether list is empty or not\n     */\n    var isEmpty = function (array) {\n      return !array || !array.length;\n    };\n  \n    /**\n     * cluster elements by predicate function.\n     *\n     * @param {Array} array - array\n     * @param {Function} fn - predicate function for cluster rule\n     * @param {Array[]}\n     */\n    var clusterBy = function (array, fn) {\n      if (!array.length) { return []; }\n      var aTail = tail(array);\n      return aTail.reduce(function (memo, v) {\n        var aLast = last(memo);\n        if (fn(last(aLast), v)) {\n          aLast[aLast.length] = v;\n        } else {\n          memo[memo.length] = [v];\n        }\n        return memo;\n      }, [[head(array)]]);\n    };\n  \n    /**\n     * returns a copy of the array with all false values removed\n     *\n     * @param {Array} array - array\n     * @param {Function} fn - predicate function for cluster rule\n     */\n    var compact = function (array) {\n      var aResult = [];\n      for (var idx = 0, len = array.length; idx < len; idx ++) {\n        if (array[idx]) { aResult.push(array[idx]); }\n      }\n      return aResult;\n    };\n\n    /**\n     * produces a duplicate-free version of the array\n     *\n     * @param {Array} array\n     */\n    var unique = function (array) {\n      var results = [];\n\n      for (var idx = 0, len = array.length; idx < len; idx ++) {\n        if (!contains(results, array[idx])) {\n          results.push(array[idx]);\n        }\n      }\n\n      return results;\n    };\n\n    /**\n     * returns next item.\n     * @param {Array} array\n     */\n    var next = function (array, item) {\n      var idx = indexOf(array, item);\n      if (idx === -1) { return null; }\n\n      return array[idx + 1];\n    };\n\n    /**\n     * returns prev item.\n     * @param {Array} array\n     */\n    var prev = function (array, item) {\n      var idx = indexOf(array, item);\n      if (idx === -1) { return null; }\n\n      return array[idx - 1];\n    };\n\n    return { head: head, last: last, initial: initial, tail: tail,\n             prev: prev, next: next, find: find, contains: contains,\n             all: all, sum: sum, from: from, isEmpty: isEmpty,\n             clusterBy: clusterBy, compact: compact, unique: unique };\n  })();\n\n  var isSupportAmd = typeof define === 'function' && define.amd;\n\n  /**\n   * returns whether font is installed or not.\n   *\n   * @param {String} fontName\n   * @return {Boolean}\n   */\n  var isFontInstalled = function (fontName) {\n    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    var $tester = $('<div>').css({\n      position: 'absolute',\n      left: '-9999px',\n      top: '-9999px',\n      fontSize: '200px'\n    }).text('mmmmmmmmmwwwwwww').appendTo(document.body);\n\n    var originalWidth = $tester.css('fontFamily', testFontName).width();\n    var width = $tester.css('fontFamily', fontName + ',' + testFontName).width();\n\n    $tester.remove();\n\n    return originalWidth !== width;\n  };\n\n  var userAgent = navigator.userAgent;\n  var isMSIE = /MSIE|Trident/i.test(userAgent);\n  var browserVersion;\n  if (isMSIE) {\n    var matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n    if (matches) {\n      browserVersion = parseFloat(matches[1]);\n    }\n    matches = /Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/.exec(userAgent);\n    if (matches) {\n      browserVersion = parseFloat(matches[1]);\n    }\n  }\n\n  var isEdge = /Edge\\/\\d+/.test(userAgent);\n\n  var hasCodeMirror = !!window.CodeMirror;\n  if (!hasCodeMirror && isSupportAmd && typeof require !== 'undefined') {\n    if (typeof require.resolve !== 'undefined') {\n      try {\n        // If CodeMirror can't be resolved, `require.resolve` will throw an\n        // exception and `hasCodeMirror` won't be set to `true`.\n        require.resolve('codemirror');\n        hasCodeMirror = true;\n      } catch (e) {\n        // Do nothing.\n      }\n    } else if (typeof eval('require').specified !== 'undefined') {\n      hasCodeMirror = eval('require').specified('codemirror');\n    }\n  }\n\n  /**\n   * @class core.agent\n   *\n   * Object which check platform and agent\n   *\n   * @singleton\n   * @alternateClassName agent\n   */\n  var agent = {\n    isMac: navigator.appVersion.indexOf('Mac') > -1,\n    isMSIE: isMSIE,\n    isEdge: isEdge,\n    isFF: !isEdge && /firefox/i.test(userAgent),\n    isPhantom: /PhantomJS/i.test(userAgent),\n    isWebkit: !isEdge && /webkit/i.test(userAgent),\n    isChrome: !isEdge && /chrome/i.test(userAgent),\n    isSafari: !isEdge && /safari/i.test(userAgent),\n    browserVersion: browserVersion,\n    jqueryVersion: parseFloat($.fn.jquery),\n    isSupportAmd: isSupportAmd,\n    hasCodeMirror: hasCodeMirror,\n    isFontInstalled: isFontInstalled,\n    isW3CRangeSupport: !!document.createRange\n  };\n\n\n  var NBSP_CHAR = String.fromCharCode(160);\n  var ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n  /**\n   * @class core.dom\n   *\n   * Dom functions\n   *\n   * @singleton\n   * @alternateClassName dom\n   */\n  var dom = (function () {\n    /**\n     * @method isEditable\n     *\n     * returns whether node is `note-editable` or not.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n    var isEditable = function (node) {\n      return node && $(node).hasClass('note-editable');\n    };\n\n    /**\n     * @method isControlSizing\n     *\n     * returns whether node is `note-control-sizing` or not.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n    var isControlSizing = function (node) {\n      return node && $(node).hasClass('note-control-sizing');\n    };\n\n    /**\n     * @method makePredByNodeName\n     *\n     * returns predicate which judge whether nodeName is same\n     *\n     * @param {String} nodeName\n     * @return {Function}\n     */\n    var makePredByNodeName = function (nodeName) {\n      nodeName = nodeName.toUpperCase();\n      return function (node) {\n        return node && node.nodeName.toUpperCase() === nodeName;\n      };\n    };\n\n    /**\n     * @method isText\n     *\n     *\n     *\n     * @param {Node} node\n     * @return {Boolean} true if node's type is text(3)\n     */\n    var isText = function (node) {\n      return node && node.nodeType === 3;\n    };\n\n    /**\n     * @method isElement\n     *\n     *\n     *\n     * @param {Node} node\n     * @return {Boolean} true if node's type is element(1)\n     */\n    var isElement = function (node) {\n      return node && node.nodeType === 1;\n    };\n\n    /**\n     * ex) br, col, embed, hr, img, input, ...\n     * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n     */\n    var isVoid = function (node) {\n      return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON/.test(node.nodeName.toUpperCase());\n    };\n\n    var isPara = function (node) {\n      if (isEditable(node)) {\n        return false;\n      }\n\n      // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n      return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n    };\n\n    var isHeading = function (node) {\n      return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n    };\n\n    var isPre = makePredByNodeName('PRE');\n\n    var isLi = makePredByNodeName('LI');\n\n    var isPurePara = function (node) {\n      return isPara(node) && !isLi(node);\n    };\n\n    var isTable = makePredByNodeName('TABLE');\n\n    var isData = makePredByNodeName('DATA');\n\n    var isInline = function (node) {\n      return !isBodyContainer(node) &&\n             !isList(node) &&\n             !isHr(node) &&\n             !isPara(node) &&\n             !isTable(node) &&\n             !isBlockquote(node) &&\n             !isData(node);\n    };\n\n    var isList = function (node) {\n      return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n    };\n\n    var isHr = makePredByNodeName('HR');\n\n    var isCell = function (node) {\n      return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n    };\n\n    var isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\n    var isBodyContainer = function (node) {\n      return isCell(node) || isBlockquote(node) || isEditable(node);\n    };\n\n    var isAnchor = makePredByNodeName('A');\n\n    var isParaInline = function (node) {\n      return isInline(node) && !!ancestor(node, isPara);\n    };\n\n    var isBodyInline = function (node) {\n      return isInline(node) && !ancestor(node, isPara);\n    };\n\n    var isBody = makePredByNodeName('BODY');\n\n    /**\n     * returns whether nodeB is closest sibling of nodeA\n     *\n     * @param {Node} nodeA\n     * @param {Node} nodeB\n     * @return {Boolean}\n     */\n    var isClosestSibling = function (nodeA, nodeB) {\n      return nodeA.nextSibling === nodeB ||\n             nodeA.previousSibling === nodeB;\n    };\n\n    /**\n     * returns array of closest siblings with node\n     *\n     * @param {Node} node\n     * @param {function} [pred] - predicate function\n     * @return {Node[]}\n     */\n    var withClosestSiblings = function (node, pred) {\n      pred = pred || func.ok;\n\n      var siblings = [];\n      if (node.previousSibling && pred(node.previousSibling)) {\n        siblings.push(node.previousSibling);\n      }\n      siblings.push(node);\n      if (node.nextSibling && pred(node.nextSibling)) {\n        siblings.push(node.nextSibling);\n      }\n      return siblings;\n    };\n\n    /**\n     * blank HTML for cursor position\n     * - [workaround] old IE only works with &nbsp;\n     * - [workaround] IE11 and other browser works with bogus br\n     */\n    var blankHTML = agent.isMSIE && agent.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n    /**\n     * @method nodeLength\n     *\n     * returns #text's text size or element's childNodes size\n     *\n     * @param {Node} node\n     */\n    var nodeLength = function (node) {\n      if (isText(node)) {\n        return node.nodeValue.length;\n      }\n      \n      if (node) {\n        return node.childNodes.length;\n      }\n      \n      return 0;\n      \n    };\n\n    /**\n     * returns whether node is empty or not.\n     *\n     * @param {Node} node\n     * @return {Boolean}\n     */\n    var isEmpty = function (node) {\n      var len = nodeLength(node);\n\n      if (len === 0) {\n        return true;\n      } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n        // ex) <p><br></p>, <span><br></span>\n        return true;\n      } else if (list.all(node.childNodes, isText) && node.innerHTML === '') {\n        // ex) <p></p>, <span></span>\n        return true;\n      }\n\n      return false;\n    };\n\n    /**\n     * padding blankHTML if node is empty (for cursor position)\n     */\n    var paddingBlankHTML = function (node) {\n      if (!isVoid(node) && !nodeLength(node)) {\n        node.innerHTML = blankHTML;\n      }\n    };\n\n    /**\n     * find nearest ancestor predicate hit\n     *\n     * @param {Node} node\n     * @param {Function} pred - predicate function\n     */\n    var ancestor = function (node, pred) {\n      while (node) {\n        if (pred(node)) { return node; }\n        if (isEditable(node)) { break; }\n\n        node = node.parentNode;\n      }\n      return null;\n    };\n\n    /**\n     * find nearest ancestor only single child blood line and predicate hit\n     *\n     * @param {Node} node\n     * @param {Function} pred - predicate function\n     */\n    var singleChildAncestor = function (node, pred) {\n      node = node.parentNode;\n\n      while (node) {\n        if (nodeLength(node) !== 1) { break; }\n        if (pred(node)) { return node; }\n        if (isEditable(node)) { break; }\n\n        node = node.parentNode;\n      }\n      return null;\n    };\n\n    /**\n     * returns new array of ancestor nodes (until predicate hit).\n     *\n     * @param {Node} node\n     * @param {Function} [optional] pred - predicate function\n     */\n    var listAncestor = function (node, pred) {\n      pred = pred || func.fail;\n\n      var ancestors = [];\n      ancestor(node, function (el) {\n        if (!isEditable(el)) {\n          ancestors.push(el);\n        }\n\n        return pred(el);\n      });\n      return ancestors;\n    };\n\n    /**\n     * find farthest ancestor predicate hit\n     */\n    var lastAncestor = function (node, pred) {\n      var ancestors = listAncestor(node);\n      return list.last(ancestors.filter(pred));\n    };\n\n    /**\n     * returns common ancestor node between two nodes.\n     *\n     * @param {Node} nodeA\n     * @param {Node} nodeB\n     */\n    var commonAncestor = function (nodeA, nodeB) {\n      var ancestors = listAncestor(nodeA);\n      for (var n = nodeB; n; n = n.parentNode) {\n        if ($.inArray(n, ancestors) > -1) { return n; }\n      }\n      return null; // difference document area\n    };\n\n    /**\n     * listing all previous siblings (until predicate hit).\n     *\n     * @param {Node} node\n     * @param {Function} [optional] pred - predicate function\n     */\n    var listPrev = function (node, pred) {\n      pred = pred || func.fail;\n\n      var nodes = [];\n      while (node) {\n        if (pred(node)) { break; }\n        nodes.push(node);\n        node = node.previousSibling;\n      }\n      return nodes;\n    };\n\n    /**\n     * listing next siblings (until predicate hit).\n     *\n     * @param {Node} node\n     * @param {Function} [pred] - predicate function\n     */\n    var listNext = function (node, pred) {\n      pred = pred || func.fail;\n\n      var nodes = [];\n      while (node) {\n        if (pred(node)) { break; }\n        nodes.push(node);\n        node = node.nextSibling;\n      }\n      return nodes;\n    };\n\n    /**\n     * listing descendant nodes\n     *\n     * @param {Node} node\n     * @param {Function} [pred] - predicate function\n     */\n    var listDescendant = function (node, pred) {\n      var descendants = [];\n      pred = pred || func.ok;\n\n      // start DFS(depth first search) with node\n      (function fnWalk(current) {\n        if (node !== current && pred(current)) {\n          descendants.push(current);\n        }\n        for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {\n          fnWalk(current.childNodes[idx]);\n        }\n      })(node);\n\n      return descendants;\n    };\n\n    /**\n     * wrap node with new tag.\n     *\n     * @param {Node} node\n     * @param {Node} tagName of wrapper\n     * @return {Node} - wrapper\n     */\n    var wrap = function (node, wrapperName) {\n      var parent = node.parentNode;\n      var wrapper = $('<' + wrapperName + '>')[0];\n\n      parent.insertBefore(wrapper, node);\n      wrapper.appendChild(node);\n\n      return wrapper;\n    };\n\n    /**\n     * insert node after preceding\n     *\n     * @param {Node} node\n     * @param {Node} preceding - predicate function\n     */\n    var insertAfter = function (node, preceding) {\n      var next = preceding.nextSibling, parent = preceding.parentNode;\n      if (next) {\n        parent.insertBefore(node, next);\n      } else {\n        parent.appendChild(node);\n      }\n      return node;\n    };\n\n    /**\n     * append elements.\n     *\n     * @param {Node} node\n     * @param {Collection} aChild\n     */\n    var appendChildNodes = function (node, aChild) {\n      $.each(aChild, function (idx, child) {\n        node.appendChild(child);\n      });\n      return node;\n    };\n\n    /**\n     * returns whether boundaryPoint is left edge or not.\n     *\n     * @param {BoundaryPoint} point\n     * @return {Boolean}\n     */\n    var isLeftEdgePoint = function (point) {\n      return point.offset === 0;\n    };\n\n    /**\n     * returns whether boundaryPoint is right edge or not.\n     *\n     * @param {BoundaryPoint} point\n     * @return {Boolean}\n     */\n    var isRightEdgePoint = function (point) {\n      return point.offset === nodeLength(point.node);\n    };\n\n    /**\n     * returns whether boundaryPoint is edge or not.\n     *\n     * @param {BoundaryPoint} point\n     * @return {Boolean}\n     */\n    var isEdgePoint = function (point) {\n      return isLeftEdgePoint(point) || isRightEdgePoint(point);\n    };\n\n    /**\n     * returns whether node is left edge of ancestor or not.\n     *\n     * @param {Node} node\n     * @param {Node} ancestor\n     * @return {Boolean}\n     */\n    var isLeftEdgeOf = function (node, ancestor) {\n      while (node && node !== ancestor) {\n        if (position(node) !== 0) {\n          return false;\n        }\n        node = node.parentNode;\n      }\n\n      return true;\n    };\n\n    /**\n     * returns whether node is right edge of ancestor or not.\n     *\n     * @param {Node} node\n     * @param {Node} ancestor\n     * @return {Boolean}\n     */\n    var isRightEdgeOf = function (node, ancestor) {\n      if (!ancestor) {\n        return false;\n      }\n      while (node && node !== ancestor) {\n        if (position(node) !== nodeLength(node.parentNode) - 1) {\n          return false;\n        }\n        node = node.parentNode;\n      }\n\n      return true;\n    };\n\n    /**\n     * returns whether point is left edge of ancestor or not.\n     * @param {BoundaryPoint} point\n     * @param {Node} ancestor\n     * @return {Boolean}\n     */\n    var isLeftEdgePointOf = function (point, ancestor) {\n      return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n    };\n\n    /**\n     * returns whether point is right edge of ancestor or not.\n     * @param {BoundaryPoint} point\n     * @param {Node} ancestor\n     * @return {Boolean}\n     */\n    var isRightEdgePointOf = function (point, ancestor) {\n      return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n    };\n\n    /**\n     * returns offset from parent.\n     *\n     * @param {Node} node\n     */\n    var position = function (node) {\n      var offset = 0;\n      while ((node = node.previousSibling)) {\n        offset += 1;\n      }\n      return offset;\n    };\n\n    var hasChildren = function (node) {\n      return !!(node && node.childNodes && node.childNodes.length);\n    };\n\n    /**\n     * returns previous boundaryPoint\n     *\n     * @param {BoundaryPoint} point\n     * @param {Boolean} isSkipInnerOffset\n     * @return {BoundaryPoint}\n     */\n    var prevPoint = function (point, isSkipInnerOffset) {\n      var node, offset;\n\n      if (point.offset === 0) {\n        if (isEditable(point.node)) {\n          return null;\n        }\n\n        node = point.node.parentNode;\n        offset = position(point.node);\n      } else if (hasChildren(point.node)) {\n        node = point.node.childNodes[point.offset - 1];\n        offset = nodeLength(node);\n      } else {\n        node = point.node;\n        offset = isSkipInnerOffset ? 0 : point.offset - 1;\n      }\n\n      return {\n        node: node,\n        offset: offset\n      };\n    };\n\n    /**\n     * returns next boundaryPoint\n     *\n     * @param {BoundaryPoint} point\n     * @param {Boolean} isSkipInnerOffset\n     * @return {BoundaryPoint}\n     */\n    var nextPoint = function (point, isSkipInnerOffset) {\n      var node, offset;\n\n      if (nodeLength(point.node) === point.offset) {\n        if (isEditable(point.node)) {\n          return null;\n        }\n\n        node = point.node.parentNode;\n        offset = position(point.node) + 1;\n      } else if (hasChildren(point.node)) {\n        node = point.node.childNodes[point.offset];\n        offset = 0;\n      } else {\n        node = point.node;\n        offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n      }\n\n      return {\n        node: node,\n        offset: offset\n      };\n    };\n\n    /**\n     * returns whether pointA and pointB is same or not.\n     *\n     * @param {BoundaryPoint} pointA\n     * @param {BoundaryPoint} pointB\n     * @return {Boolean}\n     */\n    var isSamePoint = function (pointA, pointB) {\n      return pointA.node === pointB.node && pointA.offset === pointB.offset;\n    };\n\n    /**\n     * returns whether point is visible (can set cursor) or not.\n     *\n     * @param {BoundaryPoint} point\n     * @return {Boolean}\n     */\n    var isVisiblePoint = function (point) {\n      if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n        return true;\n      }\n\n      var leftNode = point.node.childNodes[point.offset - 1];\n      var rightNode = point.node.childNodes[point.offset];\n      if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n        return true;\n      }\n\n      return false;\n    };\n\n    /**\n     * @method prevPointUtil\n     *\n     * @param {BoundaryPoint} point\n     * @param {Function} pred\n     * @return {BoundaryPoint}\n     */\n    var prevPointUntil = function (point, pred) {\n      while (point) {\n        if (pred(point)) {\n          return point;\n        }\n\n        point = prevPoint(point);\n      }\n\n      return null;\n    };\n\n    /**\n     * @method nextPointUntil\n     *\n     * @param {BoundaryPoint} point\n     * @param {Function} pred\n     * @return {BoundaryPoint}\n     */\n    var nextPointUntil = function (point, pred) {\n      while (point) {\n        if (pred(point)) {\n          return point;\n        }\n\n        point = nextPoint(point);\n      }\n\n      return null;\n    };\n\n    /**\n     * returns whether point has character or not.\n     *\n     * @param {Point} point\n     * @return {Boolean}\n     */\n    var isCharPoint = function (point) {\n      if (!isText(point.node)) {\n        return false;\n      }\n\n      var ch = point.node.nodeValue.charAt(point.offset - 1);\n      return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n    };\n\n    /**\n     * @method walkPoint\n     *\n     * @param {BoundaryPoint} startPoint\n     * @param {BoundaryPoint} endPoint\n     * @param {Function} handler\n     * @param {Boolean} isSkipInnerOffset\n     */\n    var walkPoint = function (startPoint, endPoint, handler, isSkipInnerOffset) {\n      var point = startPoint;\n\n      while (point) {\n        handler(point);\n\n        if (isSamePoint(point, endPoint)) {\n          break;\n        }\n\n        var isSkipOffset = isSkipInnerOffset &&\n                           startPoint.node !== point.node &&\n                           endPoint.node !== point.node;\n        point = nextPoint(point, isSkipOffset);\n      }\n    };\n\n    /**\n     * @method makeOffsetPath\n     *\n     * return offsetPath(array of offset) from ancestor\n     *\n     * @param {Node} ancestor - ancestor node\n     * @param {Node} node\n     */\n    var makeOffsetPath = function (ancestor, node) {\n      var ancestors = listAncestor(node, func.eq(ancestor));\n      return ancestors.map(position).reverse();\n    };\n\n    /**\n     * @method fromOffsetPath\n     *\n     * return element from offsetPath(array of offset)\n     *\n     * @param {Node} ancestor - ancestor node\n     * @param {array} offsets - offsetPath\n     */\n    var fromOffsetPath = function (ancestor, offsets) {\n      var current = ancestor;\n      for (var i = 0, len = offsets.length; i < len; i++) {\n        if (current.childNodes.length <= offsets[i]) {\n          current = current.childNodes[current.childNodes.length - 1];\n        } else {\n          current = current.childNodes[offsets[i]];\n        }\n      }\n      return current;\n    };\n\n    /**\n     * @method splitNode\n     *\n     * split element or #text\n     *\n     * @param {BoundaryPoint} point\n     * @param {Object} [options]\n     * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n     * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n     * @return {Node} right node of boundaryPoint\n     */\n    var splitNode = function (point, options) {\n      var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n      var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n\n      // edge case\n      if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n        if (isLeftEdgePoint(point)) {\n          return point.node;\n        } else if (isRightEdgePoint(point)) {\n          return point.node.nextSibling;\n        }\n      }\n\n      // split #text\n      if (isText(point.node)) {\n        return point.node.splitText(point.offset);\n      } else {\n        var childNode = point.node.childNodes[point.offset];\n        var clone = insertAfter(point.node.cloneNode(false), point.node);\n        appendChildNodes(clone, listNext(childNode));\n\n        if (!isSkipPaddingBlankHTML) {\n          paddingBlankHTML(point.node);\n          paddingBlankHTML(clone);\n        }\n\n        return clone;\n      }\n    };\n\n    /**\n     * @method splitTree\n     *\n     * split tree by point\n     *\n     * @param {Node} root - split root\n     * @param {BoundaryPoint} point\n     * @param {Object} [options]\n     * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n     * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n     * @return {Node} right node of boundaryPoint\n     */\n    var splitTree = function (root, point, options) {\n      // ex) [#text, <span>, <p>]\n      var ancestors = listAncestor(point.node, func.eq(root));\n\n      if (!ancestors.length) {\n        return null;\n      } else if (ancestors.length === 1) {\n        return splitNode(point, options);\n      }\n\n      return ancestors.reduce(function (node, parent) {\n        if (node === point.node) {\n          node = splitNode(point, options);\n        }\n\n        return splitNode({\n          node: parent,\n          offset: node ? dom.position(node) : nodeLength(parent)\n        }, options);\n      });\n    };\n\n    /**\n     * split point\n     *\n     * @param {Point} point\n     * @param {Boolean} isInline\n     * @return {Object}\n     */\n    var splitPoint = function (point, isInline) {\n      // find splitRoot, container\n      //  - inline: splitRoot is a child of paragraph\n      //  - block: splitRoot is a child of bodyContainer\n      var pred = isInline ? isPara : isBodyContainer;\n      var ancestors = listAncestor(point.node, pred);\n      var topAncestor = list.last(ancestors) || point.node;\n\n      var splitRoot, container;\n      if (pred(topAncestor)) {\n        splitRoot = ancestors[ancestors.length - 2];\n        container = topAncestor;\n      } else {\n        splitRoot = topAncestor;\n        container = splitRoot.parentNode;\n      }\n\n      // if splitRoot is exists, split with splitTree\n      var pivot = splitRoot && splitTree(splitRoot, point, {\n        isSkipPaddingBlankHTML: isInline,\n        isNotSplitEdgePoint: isInline\n      });\n\n      // if container is point.node, find pivot with point.offset\n      if (!pivot && container === point.node) {\n        pivot = point.node.childNodes[point.offset];\n      }\n\n      return {\n        rightNode: pivot,\n        container: container\n      };\n    };\n\n    var create = function (nodeName) {\n      return document.createElement(nodeName);\n    };\n\n    var createText = function (text) {\n      return document.createTextNode(text);\n    };\n\n    /**\n     * @method remove\n     *\n     * remove node, (isRemoveChild: remove child or not)\n     *\n     * @param {Node} node\n     * @param {Boolean} isRemoveChild\n     */\n    var remove = function (node, isRemoveChild) {\n      if (!node || !node.parentNode) { return; }\n      if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n      var parent = node.parentNode;\n      if (!isRemoveChild) {\n        var nodes = [];\n        var i, len;\n        for (i = 0, len = node.childNodes.length; i < len; i++) {\n          nodes.push(node.childNodes[i]);\n        }\n\n        for (i = 0, len = nodes.length; i < len; i++) {\n          parent.insertBefore(nodes[i], node);\n        }\n      }\n\n      parent.removeChild(node);\n    };\n\n    /**\n     * @method removeWhile\n     *\n     * @param {Node} node\n     * @param {Function} pred\n     */\n    var removeWhile = function (node, pred) {\n      while (node) {\n        if (isEditable(node) || !pred(node)) {\n          break;\n        }\n\n        var parent = node.parentNode;\n        remove(node);\n        node = parent;\n      }\n    };\n\n    /**\n     * @method replace\n     *\n     * replace node with provided nodeName\n     *\n     * @param {Node} node\n     * @param {String} nodeName\n     * @return {Node} - new node\n     */\n    var replace = function (node, nodeName) {\n      if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n        return node;\n      }\n\n      var newNode = create(nodeName);\n\n      if (node.style.cssText) {\n        newNode.style.cssText = node.style.cssText;\n      }\n\n      appendChildNodes(newNode, list.from(node.childNodes));\n      insertAfter(newNode, node);\n      remove(node);\n\n      return newNode;\n    };\n\n    var isTextarea = makePredByNodeName('TEXTAREA');\n\n    /**\n     * @param {jQuery} $node\n     * @param {Boolean} [stripLinebreaks] - default: false\n     */\n    var value = function ($node, stripLinebreaks) {\n      var val = isTextarea($node[0]) ? $node.val() : $node.html();\n      if (stripLinebreaks) {\n        return val.replace(/[\\n\\r]/g, '');\n      }\n      return val;\n    };\n\n    /**\n     * @method html\n     *\n     * get the HTML contents of node\n     *\n     * @param {jQuery} $node\n     * @param {Boolean} [isNewlineOnBlock]\n     */\n    var html = function ($node, isNewlineOnBlock) {\n      var markup = value($node);\n\n      if (isNewlineOnBlock) {\n        var regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n        markup = markup.replace(regexTag, function (match, endSlash, name) {\n          name = name.toUpperCase();\n          var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n                                       !!endSlash;\n          var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n          return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n        });\n        markup = $.trim(markup);\n      }\n\n      return markup;\n    };\n\n    var posFromPlaceholder = function (placeholder) {\n      var $placeholder = $(placeholder);\n      var pos = $placeholder.offset();\n      var height = $placeholder.outerHeight(true); // include margin\n\n      return {\n        left: pos.left,\n        top: pos.top + height\n      };\n    };\n\n    var attachEvents = function ($node, events) {\n      Object.keys(events).forEach(function (key) {\n        $node.on(key, events[key]);\n      });\n    };\n\n    var detachEvents = function ($node, events) {\n      Object.keys(events).forEach(function (key) {\n        $node.off(key, events[key]);\n      });\n    };\n\n    return {\n      /** @property {String} NBSP_CHAR */\n      NBSP_CHAR: NBSP_CHAR,\n      /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n      ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,\n      /** @property {String} blank */\n      blank: blankHTML,\n      /** @property {String} emptyPara */\n      emptyPara: '<p>' + blankHTML + '</p>',\n      makePredByNodeName: makePredByNodeName,\n      isEditable: isEditable,\n      isControlSizing: isControlSizing,\n      isText: isText,\n      isElement: isElement,\n      isVoid: isVoid,\n      isPara: isPara,\n      isPurePara: isPurePara,\n      isHeading: isHeading,\n      isInline: isInline,\n      isBlock: func.not(isInline),\n      isBodyInline: isBodyInline,\n      isBody: isBody,\n      isParaInline: isParaInline,\n      isPre: isPre,\n      isList: isList,\n      isTable: isTable,\n      isData: isData,\n      isCell: isCell,\n      isBlockquote: isBlockquote,\n      isBodyContainer: isBodyContainer,\n      isAnchor: isAnchor,\n      isDiv: makePredByNodeName('DIV'),\n      isLi: isLi,\n      isBR: makePredByNodeName('BR'),\n      isSpan: makePredByNodeName('SPAN'),\n      isB: makePredByNodeName('B'),\n      isU: makePredByNodeName('U'),\n      isS: makePredByNodeName('S'),\n      isI: makePredByNodeName('I'),\n      isImg: makePredByNodeName('IMG'),\n      isTextarea: isTextarea,\n      isEmpty: isEmpty,\n      isEmptyAnchor: func.and(isAnchor, isEmpty),\n      isClosestSibling: isClosestSibling,\n      withClosestSiblings: withClosestSiblings,\n      nodeLength: nodeLength,\n      isLeftEdgePoint: isLeftEdgePoint,\n      isRightEdgePoint: isRightEdgePoint,\n      isEdgePoint: isEdgePoint,\n      isLeftEdgeOf: isLeftEdgeOf,\n      isRightEdgeOf: isRightEdgeOf,\n      isLeftEdgePointOf: isLeftEdgePointOf,\n      isRightEdgePointOf: isRightEdgePointOf,\n      prevPoint: prevPoint,\n      nextPoint: nextPoint,\n      isSamePoint: isSamePoint,\n      isVisiblePoint: isVisiblePoint,\n      prevPointUntil: prevPointUntil,\n      nextPointUntil: nextPointUntil,\n      isCharPoint: isCharPoint,\n      walkPoint: walkPoint,\n      ancestor: ancestor,\n      singleChildAncestor: singleChildAncestor,\n      listAncestor: listAncestor,\n      lastAncestor: lastAncestor,\n      listNext: listNext,\n      listPrev: listPrev,\n      listDescendant: listDescendant,\n      commonAncestor: commonAncestor,\n      wrap: wrap,\n      insertAfter: insertAfter,\n      appendChildNodes: appendChildNodes,\n      position: position,\n      hasChildren: hasChildren,\n      makeOffsetPath: makeOffsetPath,\n      fromOffsetPath: fromOffsetPath,\n      splitTree: splitTree,\n      splitPoint: splitPoint,\n      create: create,\n      createText: createText,\n      remove: remove,\n      removeWhile: removeWhile,\n      replace: replace,\n      html: html,\n      value: value,\n      posFromPlaceholder: posFromPlaceholder,\n      attachEvents: attachEvents,\n      detachEvents: detachEvents\n    };\n  })();\n\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   * @return {Context}\n   */\n  var Context = function ($note, options) {\n    var self = this;\n\n    var ui = $.summernote.ui;\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = options;\n\n    /**\n     * create layout and initialize modules and other resources\n     */\n    this.initialize = function () {\n      this.layoutInfo = ui.createLayout($note, options);\n      this._initialize();\n      $note.hide();\n      return this;\n    };\n\n    /**\n     * destroy modules and other resources and remove layout\n     */\n    this.destroy = function () {\n      this._destroy();\n      $note.removeData('summernote');\n      ui.removeLayout($note, this.layoutInfo);\n    };\n\n    /**\n     * destory modules and other resources and initialize it again\n     */\n    this.reset = function () {\n      var disabled = self.isDisabled();\n      this.code(dom.emptyPara);\n      this._destroy();\n      this._initialize();\n\n      if (disabled) {\n        self.disable();\n      }\n    };\n\n    this._initialize = function () {\n      // add optional buttons\n      var buttons = $.extend({}, this.options.buttons);\n      Object.keys(buttons).forEach(function (key) {\n        self.memo('button.' + key, buttons[key]);\n      });\n\n      var modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n      // add and initialize modules\n      Object.keys(modules).forEach(function (key) {\n        self.module(key, modules[key], true);\n      });\n\n      Object.keys(this.modules).forEach(function (key) {\n        self.initializeModule(key);\n      });\n    };\n\n    this._destroy = function () {\n      // destroy modules with reversed order\n      Object.keys(this.modules).reverse().forEach(function (key) {\n        self.removeModule(key);\n      });\n\n      Object.keys(this.memos).forEach(function (key) {\n        self.removeMemo(key);\n      });\n    };\n\n    this.code = function (html) {\n      var isActivated = this.invoke('codeview.isActivated');\n\n      if (html === undefined) {\n        this.invoke('codeview.sync');\n        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n      } else {\n        if (isActivated) {\n          this.layoutInfo.codable.val(html);\n        } else {\n          this.layoutInfo.editable.html(html);\n        }\n        $note.val(html);\n        this.triggerEvent('change', html);\n      }\n    };\n\n    this.isDisabled = function () {\n      return this.layoutInfo.editable.attr('contenteditable') === 'false';\n    };\n\n    this.enable = function () {\n      this.layoutInfo.editable.attr('contenteditable', true);\n      this.invoke('toolbar.activate', true);\n    };\n\n    this.disable = function () {\n      // close codeview if codeview is opend\n      if (this.invoke('codeview.isActivated')) {\n        this.invoke('codeview.deactivate');\n      }\n      this.layoutInfo.editable.attr('contenteditable', false);\n      this.invoke('toolbar.deactivate', true);\n    };\n\n    this.triggerEvent = function () {\n      var namespace = list.head(arguments);\n      var args = list.tail(list.from(arguments));\n\n      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n      if (callback) {\n        callback.apply($note[0], args);\n      }\n      $note.trigger('summernote.' + namespace, args);\n    };\n\n    this.initializeModule = function (key) {\n      var module = this.modules[key];\n      module.shouldInitialize = module.shouldInitialize || func.ok;\n      if (!module.shouldInitialize()) {\n        return;\n      }\n\n      // initialize module\n      if (module.initialize) {\n        module.initialize();\n      }\n\n      // attach events\n      if (module.events) {\n        dom.attachEvents($note, module.events);\n      }\n    };\n\n    this.module = function (key, ModuleClass, withoutIntialize) {\n      if (arguments.length === 1) {\n        return this.modules[key];\n      }\n\n      this.modules[key] = new ModuleClass(this);\n\n      if (!withoutIntialize) {\n        this.initializeModule(key);\n      }\n    };\n\n    this.removeModule = function (key) {\n      var module = this.modules[key];\n      if (module.shouldInitialize()) {\n        if (module.events) {\n          dom.detachEvents($note, module.events);\n        }\n\n        if (module.destroy) {\n          module.destroy();\n        }\n      }\n\n      delete this.modules[key];\n    };\n\n    this.memo = function (key, obj) {\n      if (arguments.length === 1) {\n        return this.memos[key];\n      }\n      this.memos[key] = obj;\n    };\n\n    this.removeMemo = function (key) {\n      if (this.memos[key] && this.memos[key].destroy) {\n        this.memos[key].destroy();\n      }\n\n      delete this.memos[key];\n    };\n\n    this.createInvokeHandler = function (namespace, value) {\n      return function (event) {\n        event.preventDefault();\n        self.invoke(namespace, value || $(event.target).closest('[data-value]').data('value'));\n      };\n    };\n\n    this.invoke = function () {\n      var namespace = list.head(arguments);\n      var args = list.tail(list.from(arguments));\n\n      var splits = namespace.split('.');\n      var hasSeparator = splits.length > 1;\n      var moduleName = hasSeparator && list.head(splits);\n      var methodName = hasSeparator ? list.last(splits) : list.head(splits);\n\n      var module = this.modules[moduleName || 'editor'];\n      if (!moduleName && this[methodName]) {\n        return this[methodName].apply(this, args);\n      } else if (module && module[methodName] && module.shouldInitialize()) {\n        return module[methodName].apply(module, args);\n      }\n    };\n\n    return this.initialize();\n  };\n\n  $.fn.extend({\n    /**\n     * Summernote API\n     *\n     * @param {Object|String}\n     * @return {this}\n     */\n    summernote: function () {\n      var type = $.type(list.head(arguments));\n      var isExternalAPICalled = type === 'string';\n      var hasInitOptions = type === 'object';\n\n      var options = hasInitOptions ? list.head(arguments) : {};\n\n      options = $.extend({}, $.summernote.options, options);\n      options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n      options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n\n      this.each(function (idx, note) {\n        var $note = $(note);\n        if (!$note.data('summernote')) {\n          var context = new Context($note, options);\n          $note.data('summernote', context);\n          $note.data('summernote').triggerEvent('init', context.layoutInfo);\n        }\n      });\n\n      var $note = this.first();\n      if ($note.length) {\n        var context = $note.data('summernote');\n        if (isExternalAPICalled) {\n          return context.invoke.apply(context, list.from(arguments));\n        } else if (options.focus) {\n          context.invoke('editor.focus');\n        }\n      }\n\n      return this;\n    }\n  });\n\n\n  var Renderer = function (markup, children, options, callback) {\n    this.render = function ($parent) {\n      var $node = $(markup);\n\n      if (options && options.contents) {\n        $node.html(options.contents);\n      }\n\n      if (options && options.className) {\n        $node.addClass(options.className);\n      }\n\n      if (options && options.data) {\n        $.each(options.data, function (k, v) {\n          $node.attr('data-' + k, v);\n        });\n      }\n\n      if (options && options.click) {\n        $node.on('click', options.click);\n      }\n\n      if (children) {\n        var $container = $node.find('.note-children-container');\n        children.forEach(function (child) {\n          child.render($container.length ? $container : $node);\n        });\n      }\n\n      if (callback) {\n        callback($node, options);\n      }\n\n      if (options && options.callback) {\n        options.callback($node);\n      }\n\n      if ($parent) {\n        $parent.append($node);\n      }\n\n      return $node;\n    };\n  };\n\n  var renderer = {\n    create: function (markup, callback) {\n      return function () {\n        var children = $.isArray(arguments[0]) ? arguments[0] : [];\n        var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n        if (options && options.children) {\n          children = options.children;\n        }\n        return new Renderer(markup, children, options, callback);\n      };\n    }\n  };\n\n  var editor = renderer.create('<div class=\"note-editor note-frame panel panel-default\"/>');\n  var toolbar = renderer.create('<div class=\"note-toolbar panel-heading\"/>');\n  var editingArea = renderer.create('<div class=\"note-editing-area\"/>');\n  var codable = renderer.create('<textarea class=\"note-codable\"/>');\n  var editable = renderer.create('<div class=\"note-editable panel-body\" contentEditable=\"true\"/>');\n  var statusbar = renderer.create([\n    '<div class=\"note-statusbar\">',\n    '  <div class=\"note-resizebar\">',\n    '    <div class=\"note-icon-bar\"/>',\n    '    <div class=\"note-icon-bar\"/>',\n    '    <div class=\"note-icon-bar\"/>',\n    '  </div>',\n    '</div>'\n  ].join(''));\n\n  var airEditor = renderer.create('<div class=\"note-editor\"/>');\n  var airEditable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\"/>');\n\n  var buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\">');\n  var button = renderer.create('<button type=\"button\" class=\"note-btn btn btn-default btn-sm\" tabindex=\"-1\">', function ($node, options) {\n    if (options && options.tooltip) {\n      $node.attr({\n        title: options.tooltip\n      }).tooltip({\n        container: 'body',\n        trigger: 'hover',\n        placement: 'bottom'\n      });\n    }\n  });\n\n  var dropdown = renderer.create('<div class=\"dropdown-menu\">', function ($node, options) {\n    var markup = $.isArray(options.items) ? options.items.map(function (item) {\n      var value = (typeof item === 'string') ? item : (item.value || '');\n      var content = options.template ? options.template(item) : item;\n      return '<li><a href=\"#\" data-value=\"' + value + '\">' + content + '</a></li>';\n    }).join('') : options.items;\n\n    $node.html(markup);\n  });\n\n  var dropdownCheck = renderer.create('<div class=\"dropdown-menu note-check\">', function ($node, options) {\n    var markup = $.isArray(options.items) ? options.items.map(function (item) {\n      var value = (typeof item === 'string') ? item : (item.value || '');\n      var content = options.template ? options.template(item) : item;\n      return '<li><a href=\"#\" data-value=\"' + value + '\">' + icon(options.checkClassName) + ' ' + content + '</a></li>';\n    }).join('') : options.items;\n    $node.html(markup);\n  });\n\n  var palette = renderer.create('<div class=\"note-color-palette\"/>', function ($node, options) {\n    var contents = [];\n    for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n      var eventName = options.eventName;\n      var colors = options.colors[row];\n      var buttons = [];\n      for (var col = 0, colSize = colors.length; col < colSize; col++) {\n        var color = colors[col];\n        buttons.push([\n          '<button type=\"button\" class=\"note-color-btn\"',\n          'style=\"background-color:', color, '\" ',\n          'data-event=\"', eventName, '\" ',\n          'data-value=\"', color, '\" ',\n          'title=\"', color, '\" ',\n          'data-toggle=\"button\" tabindex=\"-1\"></button>'\n        ].join(''));\n      }\n      contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n    }\n    $node.html(contents.join(''));\n\n    $node.find('.note-color-btn').tooltip({\n      container: 'body',\n      trigger: 'hover',\n      placement: 'bottom'\n    });\n  });\n\n  var dialog = renderer.create('<div class=\"modal\" aria-hidden=\"false\" tabindex=\"-1\"/>', function ($node, options) {\n    if (options.fade) {\n      $node.addClass('fade');\n    }\n    $node.html([\n      '<div class=\"modal-dialog\">',\n      '  <div class=\"modal-content\">',\n      (options.title ?\n      '    <div class=\"modal-header\">' +\n      '      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\n      '      <h4 class=\"modal-title\">' + options.title + '</h4>' +\n      '    </div>' : ''\n      ),\n      '    <div class=\"modal-body\">' + options.body + '</div>',\n      (options.footer ?\n      '    <div class=\"modal-footer\">' + options.footer + '</div>' : ''\n      ),\n      '  </div>',\n      '</div>'\n    ].join(''));\n  });\n\n  var popover = renderer.create([\n    '<div class=\"note-popover popover in\">',\n    '  <div class=\"arrow\"/>',\n    '  <div class=\"popover-content note-children-container\"/>',\n    '</div>'\n  ].join(''), function ($node, options) {\n    var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n    $node.addClass(direction);\n\n    if (options.hideArrow) {\n      $node.find('.arrow').hide();\n    }\n  });\n\n  var icon = function (iconClassName, tagName) {\n    tagName = tagName || 'i';\n    return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n  };\n\n  var ui = {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    button: button,\n    dropdown: dropdown,\n    dropdownCheck: dropdownCheck,\n    palette: palette,\n    dialog: dialog,\n    popover: popover,\n    icon: icon,\n\n    toggleBtn: function ($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n\n    toggleBtnActive: function ($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n\n    onDialogShown: function ($dialog, handler) {\n      $dialog.one('shown.bs.modal', handler);\n    },\n\n    onDialogHidden: function ($dialog, handler) {\n      $dialog.one('hidden.bs.modal', handler);\n    },\n\n    showDialog: function ($dialog) {\n      $dialog.modal('show');\n    },\n\n    hideDialog: function ($dialog) {\n      $dialog.modal('hide');\n    },\n\n    createLayout: function ($note, options) {\n      var $editor = (options.airMode ? ui.airEditor([\n        ui.editingArea([\n          ui.airEditable()\n        ])\n      ]) : ui.editor([\n        ui.toolbar(),\n        ui.editingArea([\n          ui.codable(),\n          ui.editable()\n        ]),\n        ui.statusbar()\n      ])).render();\n\n      $editor.insertAfter($note);\n\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar')\n      };\n    },\n\n    removeLayout: function ($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.show();\n    }\n  };\n\n  $.summernote = $.summernote || {\n    lang: {}\n  };\n\n  $.extend($.summernote.lang, {\n    'en-US': {\n      font: {\n        bold: 'Bold',\n        italic: 'Italic',\n        underline: 'Underline',\n        clear: 'Remove Font Style',\n        height: 'Line Height',\n        name: 'Font Family',\n        strikethrough: 'Strikethrough',\n        subscript: 'Subscript',\n        superscript: 'Superscript',\n        size: 'Font Size'\n      },\n      image: {\n        image: 'Picture',\n        insert: 'Insert Image',\n        resizeFull: 'Resize Full',\n        resizeHalf: 'Resize Half',\n        resizeQuarter: 'Resize Quarter',\n        floatLeft: 'Float Left',\n        floatRight: 'Float Right',\n        floatNone: 'Float None',\n        shapeRounded: 'Shape: Rounded',\n        shapeCircle: 'Shape: Circle',\n        shapeThumbnail: 'Shape: Thumbnail',\n        shapeNone: 'Shape: None',\n        dragImageHere: 'Drag image or text here',\n        dropImage: 'Drop image or Text',\n        selectFromFiles: 'Select from files',\n        maximumFileSize: 'Maximum file size',\n        maximumFileSizeError: 'Maximum file size exceeded.',\n        url: 'Image URL',\n        remove: 'Remove Image'\n      },\n      video: {\n        video: 'Video',\n        videoLink: 'Video Link',\n        insert: 'Insert Video',\n        url: 'Video URL?',\n        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n      },\n      link: {\n        link: 'Link',\n        insert: 'Insert Link',\n        unlink: 'Unlink',\n        edit: 'Edit',\n        textToDisplay: 'Text to display',\n        url: 'To what URL should this link go?',\n        openInNewWindow: 'Open in new window'\n      },\n      table: {\n        table: 'Table'\n      },\n      hr: {\n        insert: 'Insert Horizontal Rule'\n      },\n      style: {\n        style: 'Style',\n        normal: 'Normal',\n        blockquote: 'Quote',\n        pre: 'Code',\n        h1: 'Header 1',\n        h2: 'Header 2',\n        h3: 'Header 3',\n        h4: 'Header 4',\n        h5: 'Header 5',\n        h6: 'Header 6'\n      },\n      lists: {\n        unordered: 'Unordered list',\n        ordered: 'Ordered list'\n      },\n      options: {\n        help: 'Help',\n        fullscreen: 'Full Screen',\n        codeview: 'Code View'\n      },\n      paragraph: {\n        paragraph: 'Paragraph',\n        outdent: 'Outdent',\n        indent: 'Indent',\n        left: 'Align left',\n        center: 'Align center',\n        right: 'Align right',\n        justify: 'Justify full'\n      },\n      color: {\n        recent: 'Recent Color',\n        more: 'More Color',\n        background: 'Background Color',\n        foreground: 'Foreground Color',\n        transparent: 'Transparent',\n        setTransparent: 'Set transparent',\n        reset: 'Reset',\n        resetToDefault: 'Reset to default'\n      },\n      shortcut: {\n        shortcuts: 'Keyboard shortcuts',\n        close: 'Close',\n        textFormatting: 'Text formatting',\n        action: 'Action',\n        paragraphFormatting: 'Paragraph formatting',\n        documentStyle: 'Document Style',\n        extraKeys: 'Extra keys'\n      },\n      help: {\n        'insertParagraph': 'Insert Paragraph',\n        'undo': 'Undoes the last command',\n        'redo': 'Redoes the last command',\n        'tab': 'Tab',\n        'untab': 'Untab',\n        'bold': 'Set a bold style',\n        'italic': 'Set a italic style',\n        'underline': 'Set a underline style',\n        'strikethrough': 'Set a strikethrough style',\n        'removeFormat': 'Clean a style',\n        'justifyLeft': 'Set left align',\n        'justifyCenter': 'Set center align',\n        'justifyRight': 'Set right align',\n        'justifyFull': 'Set full align',\n        'insertUnorderedList': 'Toggle unordered list',\n        'insertOrderedList': 'Toggle ordered list',\n        'outdent': 'Outdent on current paragraph',\n        'indent': 'Indent on current paragraph',\n        'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n        'formatH1': 'Change current block\\'s format as H1',\n        'formatH2': 'Change current block\\'s format as H2',\n        'formatH3': 'Change current block\\'s format as H3',\n        'formatH4': 'Change current block\\'s format as H4',\n        'formatH5': 'Change current block\\'s format as H5',\n        'formatH6': 'Change current block\\'s format as H6',\n        'insertHorizontalRule': 'Insert horizontal rule',\n        'linkDialog.show': 'Show Link Dialog'\n      },\n      history: {\n        undo: 'Undo',\n        redo: 'Redo'\n      },\n      specialChar: {\n        specialChar: 'SPECIAL CHARACTERS',\n        select: 'Select Special characters'\n      }\n    }\n  });\n\n\n  /**\n   * @class core.key\n   *\n   * Object for keycodes.\n   *\n   * @singleton\n   * @alternateClassName key\n   */\n  var key = (function () {\n    var keyMap = {\n      'BACKSPACE': 8,\n      'TAB': 9,\n      'ENTER': 13,\n      'SPACE': 32,\n\n      // Arrow\n      'LEFT': 37,\n      'UP': 38,\n      'RIGHT': 39,\n      'DOWN': 40,\n\n      // Number: 0-9\n      'NUM0': 48,\n      'NUM1': 49,\n      'NUM2': 50,\n      'NUM3': 51,\n      'NUM4': 52,\n      'NUM5': 53,\n      'NUM6': 54,\n      'NUM7': 55,\n      'NUM8': 56,\n\n      // Alphabet: a-z\n      'B': 66,\n      'E': 69,\n      'I': 73,\n      'J': 74,\n      'K': 75,\n      'L': 76,\n      'R': 82,\n      'S': 83,\n      'U': 85,\n      'V': 86,\n      'Y': 89,\n      'Z': 90,\n\n      'SLASH': 191,\n      'LEFTBRACKET': 219,\n      'BACKSLASH': 220,\n      'RIGHTBRACKET': 221\n    };\n\n    return {\n      /**\n       * @method isEdit\n       *\n       * @param {Number} keyCode\n       * @return {Boolean}\n       */\n      isEdit: function (keyCode) {\n        return list.contains([\n          keyMap.BACKSPACE,\n          keyMap.TAB,\n          keyMap.ENTER,\n          keyMap.SPACE\n        ], keyCode);\n      },\n      /**\n       * @method isMove\n       *\n       * @param {Number} keyCode\n       * @return {Boolean}\n       */\n      isMove: function (keyCode) {\n        return list.contains([\n          keyMap.LEFT,\n          keyMap.UP,\n          keyMap.RIGHT,\n          keyMap.DOWN\n        ], keyCode);\n      },\n      /**\n       * @property {Object} nameFromCode\n       * @property {String} nameFromCode.8 \"BACKSPACE\"\n       */\n      nameFromCode: func.invertObject(keyMap),\n      code: keyMap\n    };\n  })();\n\n  var range = (function () {\n\n    /**\n     * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n     *\n     * @param {TextRange} textRange\n     * @param {Boolean} isStart\n     * @return {BoundaryPoint}\n     *\n     * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n     */\n    var textRangeToPoint = function (textRange, isStart) {\n      var container = textRange.parentElement(), offset;\n  \n      var tester = document.body.createTextRange(), prevContainer;\n      var childNodes = list.from(container.childNodes);\n      for (offset = 0; offset < childNodes.length; offset++) {\n        if (dom.isText(childNodes[offset])) {\n          continue;\n        }\n        tester.moveToElementText(childNodes[offset]);\n        if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n          break;\n        }\n        prevContainer = childNodes[offset];\n      }\n  \n      if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n        var textRangeStart = document.body.createTextRange(), curTextNode = null;\n        textRangeStart.moveToElementText(prevContainer || container);\n        textRangeStart.collapse(!prevContainer);\n        curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n  \n        var pointTester = textRange.duplicate();\n        pointTester.setEndPoint('StartToStart', textRangeStart);\n        var textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n  \n        while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n          textCount -= curTextNode.nodeValue.length;\n          curTextNode = curTextNode.nextSibling;\n        }\n  \n        /* jshint ignore:start */\n        var dummy = curTextNode.nodeValue; // enforce IE to re-reference curTextNode, hack\n        /* jshint ignore:end */\n  \n        if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n            textCount === curTextNode.nodeValue.length) {\n          textCount -= curTextNode.nodeValue.length;\n          curTextNode = curTextNode.nextSibling;\n        }\n  \n        container = curTextNode;\n        offset = textCount;\n      }\n  \n      return {\n        cont: container,\n        offset: offset\n      };\n    };\n    \n    /**\n     * return TextRange from boundary point (inspired by google closure-library)\n     * @param {BoundaryPoint} point\n     * @return {TextRange}\n     */\n    var pointToTextRange = function (point) {\n      var textRangeInfo = function (container, offset) {\n        var node, isCollapseToStart;\n  \n        if (dom.isText(container)) {\n          var prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n          var prevContainer = list.last(prevTextNodes).previousSibling;\n          node =  prevContainer || container.parentNode;\n          offset += list.sum(list.tail(prevTextNodes), dom.nodeLength);\n          isCollapseToStart = !prevContainer;\n        } else {\n          node = container.childNodes[offset] || container;\n          if (dom.isText(node)) {\n            return textRangeInfo(node, 0);\n          }\n  \n          offset = 0;\n          isCollapseToStart = false;\n        }\n  \n        return {\n          node: node,\n          collapseToStart: isCollapseToStart,\n          offset: offset\n        };\n      };\n  \n      var textRange = document.body.createTextRange();\n      var info = textRangeInfo(point.node, point.offset);\n  \n      textRange.moveToElementText(info.node);\n      textRange.collapse(info.collapseToStart);\n      textRange.moveStart('character', info.offset);\n      return textRange;\n    };\n    \n    /**\n     * Wrapped Range\n     *\n     * @constructor\n     * @param {Node} sc - start container\n     * @param {Number} so - start offset\n     * @param {Node} ec - end container\n     * @param {Number} eo - end offset\n     */\n    var WrappedRange = function (sc, so, ec, eo) {\n      this.sc = sc;\n      this.so = so;\n      this.ec = ec;\n      this.eo = eo;\n  \n      // nativeRange: get nativeRange from sc, so, ec, eo\n      var nativeRange = function () {\n        if (agent.isW3CRangeSupport) {\n          var w3cRange = document.createRange();\n          w3cRange.setStart(sc, so);\n          w3cRange.setEnd(ec, eo);\n\n          return w3cRange;\n        } else {\n          var textRange = pointToTextRange({\n            node: sc,\n            offset: so\n          });\n\n          textRange.setEndPoint('EndToEnd', pointToTextRange({\n            node: ec,\n            offset: eo\n          }));\n\n          return textRange;\n        }\n      };\n\n      this.getPoints = function () {\n        return {\n          sc: sc,\n          so: so,\n          ec: ec,\n          eo: eo\n        };\n      };\n\n      this.getStartPoint = function () {\n        return {\n          node: sc,\n          offset: so\n        };\n      };\n\n      this.getEndPoint = function () {\n        return {\n          node: ec,\n          offset: eo\n        };\n      };\n\n      /**\n       * select update visible range\n       */\n      this.select = function () {\n        var nativeRng = nativeRange();\n        if (agent.isW3CRangeSupport) {\n          var selection = document.getSelection();\n          if (selection.rangeCount > 0) {\n            selection.removeAllRanges();\n          }\n          selection.addRange(nativeRng);\n        } else {\n          nativeRng.select();\n        }\n        \n        return this;\n      };\n\n      /**\n       * Moves the scrollbar to start container(sc) of current range\n       *\n       * @return {WrappedRange}\n       */\n      this.scrollIntoView = function (container) {\n        var height = $(container).height();\n        if (container.scrollTop + height < this.sc.offsetTop) {\n          container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n        }\n\n        return this;\n      };\n\n      /**\n       * @return {WrappedRange}\n       */\n      this.normalize = function () {\n\n        /**\n         * @param {BoundaryPoint} point\n         * @param {Boolean} isLeftToRight\n         * @return {BoundaryPoint}\n         */\n        var getVisiblePoint = function (point, isLeftToRight) {\n          if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) ||\n              (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) ||\n              (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) ||\n              (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n            return point;\n          }\n\n          // point on block's edge\n          var block = dom.ancestor(point.node, dom.isBlock);\n          if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) ||\n              ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) {\n\n            // returns point already on visible point\n            if (dom.isVisiblePoint(point)) {\n              return point;\n            }\n            // reverse direction \n            isLeftToRight = !isLeftToRight;\n          }\n\n          var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) :\n                                          dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n          return nextPoint || point;\n        };\n\n        var endPoint = getVisiblePoint(this.getEndPoint(), false);\n        var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n        return new WrappedRange(\n          startPoint.node,\n          startPoint.offset,\n          endPoint.node,\n          endPoint.offset\n        );\n      };\n\n      /**\n       * returns matched nodes on range\n       *\n       * @param {Function} [pred] - predicate function\n       * @param {Object} [options]\n       * @param {Boolean} [options.includeAncestor]\n       * @param {Boolean} [options.fullyContains]\n       * @return {Node[]}\n       */\n      this.nodes = function (pred, options) {\n        pred = pred || func.ok;\n\n        var includeAncestor = options && options.includeAncestor;\n        var fullyContains = options && options.fullyContains;\n\n        // TODO compare points and sort\n        var startPoint = this.getStartPoint();\n        var endPoint = this.getEndPoint();\n\n        var nodes = [];\n        var leftEdgeNodes = [];\n\n        dom.walkPoint(startPoint, endPoint, function (point) {\n          if (dom.isEditable(point.node)) {\n            return;\n          }\n\n          var node;\n          if (fullyContains) {\n            if (dom.isLeftEdgePoint(point)) {\n              leftEdgeNodes.push(point.node);\n            }\n            if (dom.isRightEdgePoint(point) && list.contains(leftEdgeNodes, point.node)) {\n              node = point.node;\n            }\n          } else if (includeAncestor) {\n            node = dom.ancestor(point.node, pred);\n          } else {\n            node = point.node;\n          }\n\n          if (node && pred(node)) {\n            nodes.push(node);\n          }\n        }, true);\n\n        return list.unique(nodes);\n      };\n\n      /**\n       * returns commonAncestor of range\n       * @return {Element} - commonAncestor\n       */\n      this.commonAncestor = function () {\n        return dom.commonAncestor(sc, ec);\n      };\n\n      /**\n       * returns expanded range by pred\n       *\n       * @param {Function} pred - predicate function\n       * @return {WrappedRange}\n       */\n      this.expand = function (pred) {\n        var startAncestor = dom.ancestor(sc, pred);\n        var endAncestor = dom.ancestor(ec, pred);\n\n        if (!startAncestor && !endAncestor) {\n          return new WrappedRange(sc, so, ec, eo);\n        }\n\n        var boundaryPoints = this.getPoints();\n\n        if (startAncestor) {\n          boundaryPoints.sc = startAncestor;\n          boundaryPoints.so = 0;\n        }\n\n        if (endAncestor) {\n          boundaryPoints.ec = endAncestor;\n          boundaryPoints.eo = dom.nodeLength(endAncestor);\n        }\n\n        return new WrappedRange(\n          boundaryPoints.sc,\n          boundaryPoints.so,\n          boundaryPoints.ec,\n          boundaryPoints.eo\n        );\n      };\n\n      /**\n       * @param {Boolean} isCollapseToStart\n       * @return {WrappedRange}\n       */\n      this.collapse = function (isCollapseToStart) {\n        if (isCollapseToStart) {\n          return new WrappedRange(sc, so, sc, so);\n        } else {\n          return new WrappedRange(ec, eo, ec, eo);\n        }\n      };\n\n      /**\n       * splitText on range\n       */\n      this.splitText = function () {\n        var isSameContainer = sc === ec;\n        var boundaryPoints = this.getPoints();\n\n        if (dom.isText(ec) && !dom.isEdgePoint(this.getEndPoint())) {\n          ec.splitText(eo);\n        }\n\n        if (dom.isText(sc) && !dom.isEdgePoint(this.getStartPoint())) {\n          boundaryPoints.sc = sc.splitText(so);\n          boundaryPoints.so = 0;\n\n          if (isSameContainer) {\n            boundaryPoints.ec = boundaryPoints.sc;\n            boundaryPoints.eo = eo - so;\n          }\n        }\n\n        return new WrappedRange(\n          boundaryPoints.sc,\n          boundaryPoints.so,\n          boundaryPoints.ec,\n          boundaryPoints.eo\n        );\n      };\n\n      /**\n       * delete contents on range\n       * @return {WrappedRange}\n       */\n      this.deleteContents = function () {\n        if (this.isCollapsed()) {\n          return this;\n        }\n\n        var rng = this.splitText();\n        var nodes = rng.nodes(null, {\n          fullyContains: true\n        });\n\n        // find new cursor point\n        var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {\n          return !list.contains(nodes, point.node);\n        });\n\n        var emptyParents = [];\n        $.each(nodes, function (idx, node) {\n          // find empty parents\n          var parent = node.parentNode;\n          if (point.node !== parent && dom.nodeLength(parent) === 1) {\n            emptyParents.push(parent);\n          }\n          dom.remove(node, false);\n        });\n\n        // remove empty parents\n        $.each(emptyParents, function (idx, node) {\n          dom.remove(node, false);\n        });\n\n        return new WrappedRange(\n          point.node,\n          point.offset,\n          point.node,\n          point.offset\n        ).normalize();\n      };\n      \n      /**\n       * makeIsOn: return isOn(pred) function\n       */\n      var makeIsOn = function (pred) {\n        return function () {\n          var ancestor = dom.ancestor(sc, pred);\n          return !!ancestor && (ancestor === dom.ancestor(ec, pred));\n        };\n      };\n  \n      // isOnEditable: judge whether range is on editable or not\n      this.isOnEditable = makeIsOn(dom.isEditable);\n      // isOnList: judge whether range is on list node or not\n      this.isOnList = makeIsOn(dom.isList);\n      // isOnAnchor: judge whether range is on anchor node or not\n      this.isOnAnchor = makeIsOn(dom.isAnchor);\n      // isOnCell: judge whether range is on cell node or not\n      this.isOnCell = makeIsOn(dom.isCell);\n      // isOnData: judge whether range is on data node or not\n      this.isOnData = makeIsOn(dom.isData);\n\n      /**\n       * @param {Function} pred\n       * @return {Boolean}\n       */\n      this.isLeftEdgeOf = function (pred) {\n        if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n          return false;\n        }\n\n        var node = dom.ancestor(this.sc, pred);\n        return node && dom.isLeftEdgeOf(this.sc, node);\n      };\n\n      /**\n       * returns whether range was collapsed or not\n       */\n      this.isCollapsed = function () {\n        return sc === ec && so === eo;\n      };\n\n      /**\n       * wrap inline nodes which children of body with paragraph\n       *\n       * @return {WrappedRange}\n       */\n      this.wrapBodyInlineWithPara = function () {\n        if (dom.isBodyContainer(sc) && dom.isEmpty(sc)) {\n          sc.innerHTML = dom.emptyPara;\n          return new WrappedRange(sc.firstChild, 0, sc.firstChild, 0);\n        }\n\n        /**\n         * [workaround] firefox often create range on not visible point. so normalize here.\n         *  - firefox: |<p>text</p>|\n         *  - chrome: <p>|text|</p>\n         */\n        var rng = this.normalize();\n        if (dom.isParaInline(sc) || dom.isPara(sc)) {\n          return rng;\n        }\n\n        // find inline top ancestor\n        var topAncestor;\n        if (dom.isInline(rng.sc)) {\n          var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n          topAncestor = list.last(ancestors);\n          if (!dom.isInline(topAncestor)) {\n            topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n          }\n        } else {\n          topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n        }\n\n        // siblings not in paragraph\n        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n        // wrap with paragraph\n        if (inlineSiblings.length) {\n          var para = dom.wrap(list.head(inlineSiblings), 'p');\n          dom.appendChildNodes(para, list.tail(inlineSiblings));\n        }\n\n        return this.normalize();\n      };\n\n      /**\n       * insert node at current cursor\n       *\n       * @param {Node} node\n       * @return {Node}\n       */\n      this.insertNode = function (node) {\n        var rng = this.wrapBodyInlineWithPara().deleteContents();\n        var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n        if (info.rightNode) {\n          info.rightNode.parentNode.insertBefore(node, info.rightNode);\n        } else {\n          info.container.appendChild(node);\n        }\n\n        return node;\n      };\n\n      /**\n       * insert html at current cursor\n       */\n      this.pasteHTML = function (markup) {\n        var contentsContainer = $('<div></div>').html(markup)[0];\n        var childNodes = list.from(contentsContainer.childNodes);\n\n        var rng = this.wrapBodyInlineWithPara().deleteContents();\n\n        return childNodes.reverse().map(function (childNode) {\n          return rng.insertNode(childNode);\n        }).reverse();\n      };\n  \n      /**\n       * returns text in range\n       *\n       * @return {String}\n       */\n      this.toString = function () {\n        var nativeRng = nativeRange();\n        return agent.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n      };\n\n      /**\n       * returns range for word before cursor\n       *\n       * @param {Boolean} [findAfter] - find after cursor, default: false\n       * @return {WrappedRange}\n       */\n      this.getWordRange = function (findAfter) {\n        var endPoint = this.getEndPoint();\n\n        if (!dom.isCharPoint(endPoint)) {\n          return this;\n        }\n\n        var startPoint = dom.prevPointUntil(endPoint, function (point) {\n          return !dom.isCharPoint(point);\n        });\n\n        if (findAfter) {\n          endPoint = dom.nextPointUntil(endPoint, function (point) {\n            return !dom.isCharPoint(point);\n          });\n        }\n\n        return new WrappedRange(\n          startPoint.node,\n          startPoint.offset,\n          endPoint.node,\n          endPoint.offset\n        );\n      };\n  \n      /**\n       * create offsetPath bookmark\n       *\n       * @param {Node} editable\n       */\n      this.bookmark = function (editable) {\n        return {\n          s: {\n            path: dom.makeOffsetPath(editable, sc),\n            offset: so\n          },\n          e: {\n            path: dom.makeOffsetPath(editable, ec),\n            offset: eo\n          }\n        };\n      };\n\n      /**\n       * create offsetPath bookmark base on paragraph\n       *\n       * @param {Node[]} paras\n       */\n      this.paraBookmark = function (paras) {\n        return {\n          s: {\n            path: list.tail(dom.makeOffsetPath(list.head(paras), sc)),\n            offset: so\n          },\n          e: {\n            path: list.tail(dom.makeOffsetPath(list.last(paras), ec)),\n            offset: eo\n          }\n        };\n      };\n\n      /**\n       * getClientRects\n       * @return {Rect[]}\n       */\n      this.getClientRects = function () {\n        var nativeRng = nativeRange();\n        return nativeRng.getClientRects();\n      };\n    };\n\n  /**\n   * @class core.range\n   *\n   * Data structure\n   *  * BoundaryPoint: a point of dom tree\n   *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n   *\n   * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n   *\n   * @singleton\n   * @alternateClassName range\n   */\n    return {\n      /**\n       * create Range Object From arguments or Browser Selection\n       *\n       * @param {Node} sc - start container\n       * @param {Number} so - start offset\n       * @param {Node} ec - end container\n       * @param {Number} eo - end offset\n       * @return {WrappedRange}\n       */\n      create: function (sc, so, ec, eo) {\n        if (arguments.length === 4) {\n          return new WrappedRange(sc, so, ec, eo);\n        } else if (arguments.length === 2) { //collapsed\n          ec = sc;\n          eo = so;\n          return new WrappedRange(sc, so, ec, eo);\n        } else {\n          var wrappedRange = this.createFromSelection();\n          if (!wrappedRange && arguments.length === 1) {\n            wrappedRange = this.createFromNode(arguments[0]);\n            return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML);\n          }\n          return wrappedRange;\n        }\n      },\n\n      createFromSelection: function () {\n        var sc, so, ec, eo;\n        if (agent.isW3CRangeSupport) {\n          var selection = document.getSelection();\n          if (!selection || selection.rangeCount === 0) {\n            return null;\n          } else if (dom.isBody(selection.anchorNode)) {\n            // Firefox: returns entire body as range on initialization.\n            // We won't never need it.\n            return null;\n          }\n\n          var nativeRng = selection.getRangeAt(0);\n          sc = nativeRng.startContainer;\n          so = nativeRng.startOffset;\n          ec = nativeRng.endContainer;\n          eo = nativeRng.endOffset;\n        } else { // IE8: TextRange\n          var textRange = document.selection.createRange();\n          var textRangeEnd = textRange.duplicate();\n          textRangeEnd.collapse(false);\n          var textRangeStart = textRange;\n          textRangeStart.collapse(true);\n\n          var startPoint = textRangeToPoint(textRangeStart, true),\n          endPoint = textRangeToPoint(textRangeEnd, false);\n\n          // same visible point case: range was collapsed.\n          if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n              dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n              endPoint.node.nextSibling === startPoint.node) {\n            startPoint = endPoint;\n          }\n\n          sc = startPoint.cont;\n          so = startPoint.offset;\n          ec = endPoint.cont;\n          eo = endPoint.offset;\n        }\n\n        return new WrappedRange(sc, so, ec, eo);\n      },\n\n      /**\n       * @method \n       * \n       * create WrappedRange from node\n       *\n       * @param {Node} node\n       * @return {WrappedRange}\n       */\n      createFromNode: function (node) {\n        var sc = node;\n        var so = 0;\n        var ec = node;\n        var eo = dom.nodeLength(ec);\n\n        // browsers can't target a picture or void node\n        if (dom.isVoid(sc)) {\n          so = dom.listPrev(sc).length - 1;\n          sc = sc.parentNode;\n        }\n        if (dom.isBR(ec)) {\n          eo = dom.listPrev(ec).length - 1;\n          ec = ec.parentNode;\n        } else if (dom.isVoid(ec)) {\n          eo = dom.listPrev(ec).length;\n          ec = ec.parentNode;\n        }\n\n        return this.create(sc, so, ec, eo);\n      },\n\n      /**\n       * create WrappedRange from node after position\n       *\n       * @param {Node} node\n       * @return {WrappedRange}\n       */\n      createFromNodeBefore: function (node) {\n        return this.createFromNode(node).collapse(true);\n      },\n\n      /**\n       * create WrappedRange from node after position\n       *\n       * @param {Node} node\n       * @return {WrappedRange}\n       */\n      createFromNodeAfter: function (node) {\n        return this.createFromNode(node).collapse();\n      },\n\n      /**\n       * @method \n       * \n       * create WrappedRange from bookmark\n       *\n       * @param {Node} editable\n       * @param {Object} bookmark\n       * @return {WrappedRange}\n       */\n      createFromBookmark: function (editable, bookmark) {\n        var sc = dom.fromOffsetPath(editable, bookmark.s.path);\n        var so = bookmark.s.offset;\n        var ec = dom.fromOffsetPath(editable, bookmark.e.path);\n        var eo = bookmark.e.offset;\n        return new WrappedRange(sc, so, ec, eo);\n      },\n\n      /**\n       * @method \n       *\n       * create WrappedRange from paraBookmark\n       *\n       * @param {Object} bookmark\n       * @param {Node[]} paras\n       * @return {WrappedRange}\n       */\n      createFromParaBookmark: function (bookmark, paras) {\n        var so = bookmark.s.offset;\n        var eo = bookmark.e.offset;\n        var sc = dom.fromOffsetPath(list.head(paras), bookmark.s.path);\n        var ec = dom.fromOffsetPath(list.last(paras), bookmark.e.path);\n\n        return new WrappedRange(sc, so, ec, eo);\n      }\n    };\n  })();\n\n  /**\n   * @class core.async\n   *\n   * Async functions which returns `Promise`\n   *\n   * @singleton\n   * @alternateClassName async\n   */\n  var async = (function () {\n    /**\n     * @method readFileAsDataURL\n     *\n     * read contents of file as representing URL\n     *\n     * @param {File} file\n     * @return {Promise} - then: dataUrl\n     */\n    var readFileAsDataURL = function (file) {\n      return $.Deferred(function (deferred) {\n        $.extend(new FileReader(), {\n          onload: function (e) {\n            var dataURL = e.target.result;\n            deferred.resolve(dataURL);\n          },\n          onerror: function () {\n            deferred.reject(this);\n          }\n        }).readAsDataURL(file);\n      }).promise();\n    };\n  \n    /**\n     * @method createImage\n     *\n     * create `<image>` from url string\n     *\n     * @param {String} url\n     * @return {Promise} - then: $image\n     */\n    var createImage = function (url) {\n      return $.Deferred(function (deferred) {\n        var $img = $('<img>');\n\n        $img.one('load', function () {\n          $img.off('error abort');\n          deferred.resolve($img);\n        }).one('error abort', function () {\n          $img.off('load').detach();\n          deferred.reject($img);\n        }).css({\n          display: 'none'\n        }).appendTo(document.body).attr('src', url);\n      }).promise();\n    };\n\n    return {\n      readFileAsDataURL: readFileAsDataURL,\n      createImage: createImage\n    };\n  })();\n\n  /**\n   * @class editing.History\n   *\n   * Editor History\n   *\n   */\n  var History = function ($editable) {\n    var stack = [], stackOffset = -1;\n    var editable = $editable[0];\n\n    var makeSnapshot = function () {\n      var rng = range.create(editable);\n      var emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}};\n\n      return {\n        contents: $editable.html(),\n        bookmark: (rng ? rng.bookmark(editable) : emptyBookmark)\n      };\n    };\n\n    var applySnapshot = function (snapshot) {\n      if (snapshot.contents !== null) {\n        $editable.html(snapshot.contents);\n      }\n      if (snapshot.bookmark !== null) {\n        range.createFromBookmark(editable, snapshot.bookmark).select();\n      }\n    };\n\n    /**\n    * @method rewind\n    * Rewinds the history stack back to the first snapshot taken.\n    * Leaves the stack intact, so that \"Redo\" can still be used.\n    */\n    this.rewind = function () {\n      // Create snap shot if not yet recorded\n      if ($editable.html() !== stack[stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      // Return to the first available snapshot.\n      stackOffset = 0;\n\n      // Apply that snapshot.\n      applySnapshot(stack[stackOffset]);\n    };\n\n    /**\n    * @method reset\n    * Resets the history stack completely; reverting to an empty editor.\n    */\n    this.reset = function () {\n      // Clear the stack.\n      stack = [];\n\n      // Restore stackOffset to its original value.\n      stackOffset = -1;\n\n      // Clear the editable area.\n      $editable.html('');\n\n      // Record our first snapshot (of nothing).\n      this.recordUndo();\n    };\n\n    /**\n     * undo\n     */\n    this.undo = function () {\n      // Create snap shot if not yet recorded\n      if ($editable.html() !== stack[stackOffset].contents) {\n        this.recordUndo();\n      }\n\n      if (0 < stackOffset) {\n        stackOffset--;\n        applySnapshot(stack[stackOffset]);\n      }\n    };\n\n    /**\n     * redo\n     */\n    this.redo = function () {\n      if (stack.length - 1 > stackOffset) {\n        stackOffset++;\n        applySnapshot(stack[stackOffset]);\n      }\n    };\n\n    /**\n     * recorded undo\n     */\n    this.recordUndo = function () {\n      stackOffset++;\n\n      // Wash out stack after stackOffset\n      if (stack.length > stackOffset) {\n        stack = stack.slice(0, stackOffset);\n      }\n\n      // Create new snapshot and push it to the end\n      stack.push(makeSnapshot());\n    };\n  };\n\n  /**\n   * @class editing.Style\n   *\n   * Style\n   *\n   */\n  var Style = function () {\n    /**\n     * @method jQueryCSS\n     *\n     * [workaround] for old jQuery\n     * passing an array of style properties to .css()\n     * will result in an object of property-value pairs.\n     * (compability with version < 1.9)\n     *\n     * @private\n     * @param  {jQuery} $obj\n     * @param  {Array} propertyNames - An array of one or more CSS properties.\n     * @return {Object}\n     */\n    var jQueryCSS = function ($obj, propertyNames) {\n      if (agent.jqueryVersion < 1.9) {\n        var result = {};\n        $.each(propertyNames, function (idx, propertyName) {\n          result[propertyName] = $obj.css(propertyName);\n        });\n        return result;\n      }\n      return $obj.css.call($obj, propertyNames);\n    };\n\n    /**\n     * returns style object from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n    this.fromNode = function ($node) {\n      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n      var styleInfo = jQueryCSS($node, properties) || {};\n      styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10);\n      return styleInfo;\n    };\n\n    /**\n     * paragraph level style\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} styleInfo\n     */\n    this.stylePara = function (rng, styleInfo) {\n      $.each(rng.nodes(dom.isPara, {\n        includeAncestor: true\n      }), function (idx, para) {\n        $(para).css(styleInfo);\n      });\n    };\n\n    /**\n     * insert and returns styleNodes on range.\n     *\n     * @param {WrappedRange} rng\n     * @param {Object} [options] - options for styleNodes\n     * @param {String} [options.nodeName] - default: `SPAN`\n     * @param {Boolean} [options.expandClosestSibling] - default: `false`\n     * @param {Boolean} [options.onlyPartialContains] - default: `false`\n     * @return {Node[]}\n     */\n    this.styleNodes = function (rng, options) {\n      rng = rng.splitText();\n\n      var nodeName = options && options.nodeName || 'SPAN';\n      var expandClosestSibling = !!(options && options.expandClosestSibling);\n      var onlyPartialContains = !!(options && options.onlyPartialContains);\n\n      if (rng.isCollapsed()) {\n        return [rng.insertNode(dom.create(nodeName))];\n      }\n\n      var pred = dom.makePredByNodeName(nodeName);\n      var nodes = rng.nodes(dom.isText, {\n        fullyContains: true\n      }).map(function (text) {\n        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n      });\n\n      if (expandClosestSibling) {\n        if (onlyPartialContains) {\n          var nodesInRange = rng.nodes();\n          // compose with partial contains predication\n          pred = func.and(pred, function (node) {\n            return list.contains(nodesInRange, node);\n          });\n        }\n\n        return nodes.map(function (node) {\n          var siblings = dom.withClosestSiblings(node, pred);\n          var head = list.head(siblings);\n          var tails = list.tail(siblings);\n          $.each(tails, function (idx, elem) {\n            dom.appendChildNodes(head, elem.childNodes);\n            dom.remove(elem);\n          });\n          return list.head(siblings);\n        });\n      } else {\n        return nodes;\n      }\n    };\n\n    /**\n     * get current style on cursor\n     *\n     * @param {WrappedRange} rng\n     * @return {Object} - object contains style properties.\n     */\n    this.current = function (rng) {\n      var $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n      var styleInfo = this.fromNode($cont);\n\n      // document.queryCommandState for toggle state\n      // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n      try {\n        styleInfo = $.extend(styleInfo, {\n          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal'\n        });\n      } catch (e) {}\n\n      // list-style-type to list-style(unordered, ordered)\n      if (!rng.isOnList()) {\n        styleInfo['list-style'] = 'none';\n      } else {\n        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n        var isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1;\n        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n      }\n\n      var para = dom.ancestor(rng.sc, dom.isPara);\n      if (para && para.style['line-height']) {\n        styleInfo['line-height'] = para.style.lineHeight;\n      } else {\n        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n        styleInfo['line-height'] = lineHeight.toFixed(1);\n      }\n\n      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n      styleInfo.range = rng;\n\n      return styleInfo;\n    };\n  };\n\n\n  /**\n   * @class editing.Bullet\n   *\n   * @alternateClassName Bullet\n   */\n  var Bullet = function () {\n    var self = this;\n\n    /**\n     * toggle ordered list\n     */\n    this.insertOrderedList = function (editable) {\n      this.toggleList('OL', editable);\n    };\n\n    /**\n     * toggle unordered list\n     */\n    this.insertUnorderedList = function (editable) {\n      this.toggleList('UL', editable);\n    };\n\n    /**\n     * indent\n     */\n    this.indent = function (editable) {\n      var self = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n\n      var paras = rng.nodes(dom.isPara, { includeAncestor: true });\n      var clustereds = list.clusterBy(paras, func.peq2('parentNode'));\n\n      $.each(clustereds, function (idx, paras) {\n        var head = list.head(paras);\n        if (dom.isLi(head)) {\n          self.wrapList(paras, head.parentNode.nodeName);\n        } else {\n          $.each(paras, function (idx, para) {\n            $(para).css('marginLeft', function (idx, val) {\n              return (parseInt(val, 10) || 0) + 25;\n            });\n          });\n        }\n      });\n\n      rng.select();\n    };\n\n    /**\n     * outdent\n     */\n    this.outdent = function (editable) {\n      var self = this;\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n\n      var paras = rng.nodes(dom.isPara, { includeAncestor: true });\n      var clustereds = list.clusterBy(paras, func.peq2('parentNode'));\n\n      $.each(clustereds, function (idx, paras) {\n        var head = list.head(paras);\n        if (dom.isLi(head)) {\n          self.releaseList([paras]);\n        } else {\n          $.each(paras, function (idx, para) {\n            $(para).css('marginLeft', function (idx, val) {\n              val = (parseInt(val, 10) || 0);\n              return val > 25 ? val - 25 : '';\n            });\n          });\n        }\n      });\n\n      rng.select();\n    };\n\n    /**\n     * toggle list\n     *\n     * @param {String} listName - OL or UL\n     */\n    this.toggleList = function (listName, editable) {\n      var rng = range.create(editable).wrapBodyInlineWithPara();\n\n      var paras = rng.nodes(dom.isPara, { includeAncestor: true });\n      var bookmark = rng.paraBookmark(paras);\n      var clustereds = list.clusterBy(paras, func.peq2('parentNode'));\n\n      // paragraph to list\n      if (list.find(paras, dom.isPurePara)) {\n        var wrappedParas = [];\n        $.each(clustereds, function (idx, paras) {\n          wrappedParas = wrappedParas.concat(self.wrapList(paras, listName));\n        });\n        paras = wrappedParas;\n      // list to paragraph or change list style\n      } else {\n        var diffLists = rng.nodes(dom.isList, {\n          includeAncestor: true\n        }).filter(function (listNode) {\n          return !$.nodeName(listNode, listName);\n        });\n\n        if (diffLists.length) {\n          $.each(diffLists, function (idx, listNode) {\n            dom.replace(listNode, listName);\n          });\n        } else {\n          paras = this.releaseList(clustereds, true);\n        }\n      }\n\n      range.createFromParaBookmark(bookmark, paras).select();\n    };\n\n    /**\n     * @param {Node[]} paras\n     * @param {String} listName\n     * @return {Node[]}\n     */\n    this.wrapList = function (paras, listName) {\n      var head = list.head(paras);\n      var last = list.last(paras);\n\n      var prevList = dom.isList(head.previousSibling) && head.previousSibling;\n      var nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n      // P to LI\n      paras = paras.map(function (para) {\n        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n      });\n\n      // append to list(<ul>, <ol>)\n      dom.appendChildNodes(listNode, paras);\n\n      if (nextList) {\n        dom.appendChildNodes(listNode, list.from(nextList.childNodes));\n        dom.remove(nextList);\n      }\n\n      return paras;\n    };\n\n    /**\n     * @method releaseList\n     *\n     * @param {Array[]} clustereds\n     * @param {Boolean} isEscapseToBody\n     * @return {Node[]}\n     */\n    this.releaseList = function (clustereds, isEscapseToBody) {\n      var releasedParas = [];\n\n      $.each(clustereds, function (idx, paras) {\n        var head = list.head(paras);\n        var last = list.last(paras);\n\n        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) :\n                                         head.parentNode;\n        var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n          node: last.parentNode,\n          offset: dom.position(last) + 1\n        }, {\n          isSkipPaddingBlankHTML: true\n        }) : null;\n\n        var middleList = dom.splitTree(headList, {\n          node: head.parentNode,\n          offset: dom.position(head)\n        }, {\n          isSkipPaddingBlankHTML: true\n        });\n\n        paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) :\n                                  list.from(middleList.childNodes).filter(dom.isLi);\n\n        // LI to P\n        if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n          paras = paras.map(function (para) {\n            return dom.replace(para, 'P');\n          });\n        }\n\n        $.each(list.from(paras).reverse(), function (idx, para) {\n          dom.insertAfter(para, headList);\n        });\n\n        // remove empty lists\n        var rootLists = list.compact([headList, middleList, lastList]);\n        $.each(rootLists, function (idx, rootList) {\n          var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n          $.each(listNodes.reverse(), function (idx, listNode) {\n            if (!dom.nodeLength(listNode)) {\n              dom.remove(listNode, true);\n            }\n          });\n        });\n\n        releasedParas = releasedParas.concat(paras);\n      });\n\n      return releasedParas;\n    };\n  };\n\n\n  /**\n   * @class editing.Typing\n   *\n   * Typing\n   *\n   */\n  var Typing = function () {\n\n    // a Bullet instance to toggle lists off\n    var bullet = new Bullet();\n\n    /**\n     * insert tab\n     *\n     * @param {WrappedRange} rng\n     * @param {Number} tabsize\n     */\n    this.insertTab = function (rng, tabsize) {\n      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n      rng = rng.deleteContents();\n      rng.insertNode(tab, true);\n\n      rng = range.create(tab, tabsize);\n      rng.select();\n    };\n\n    /**\n     * insert paragraph\n     */\n    this.insertParagraph = function (editable) {\n      var rng = range.create(editable);\n\n      // deleteContents on range.\n      rng = rng.deleteContents();\n\n      // Wrap range if it needs to be wrapped by paragraph\n      rng = rng.wrapBodyInlineWithPara();\n\n      // finding paragraph\n      var splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n      var nextPara;\n      // on paragraph: split paragraph\n      if (splitRoot) {\n        // if it is an empty line with li\n        if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {\n          // toogle UL/OL and escape\n          bullet.toggleList(splitRoot.parentNode.nodeName);\n          return;\n        // if it is an empty line with para on blockquote\n        } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) {\n          // escape blockquote\n          dom.insertAfter(splitRoot, splitRoot.parentNode);\n          nextPara = splitRoot;\n        // if new line has content (not a line break)\n        } else {\n          nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n          var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n          emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n          $.each(emptyAnchors, function (idx, anchor) {\n            dom.remove(anchor);\n          });\n\n          // replace empty heading or pre with P tag\n          if ((dom.isHeading(nextPara) || dom.isPre(nextPara)) && dom.isEmpty(nextPara)) {\n            nextPara = dom.replace(nextPara, 'p');\n          }\n        }\n      // no paragraph: insert empty paragraph\n      } else {\n        var next = rng.sc.childNodes[rng.so];\n        nextPara = $(dom.emptyPara)[0];\n        if (next) {\n          rng.sc.insertBefore(nextPara, next);\n        } else {\n          rng.sc.appendChild(nextPara);\n        }\n      }\n\n      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n    };\n  };\n\n  /**\n   * @class editing.Table\n   *\n   * Table\n   *\n   */\n  var Table = function () {\n    /**\n     * handle tab key\n     *\n     * @param {WrappedRange} rng\n     * @param {Boolean} isShift\n     */\n    this.tab = function (rng, isShift) {\n      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n      var table = dom.ancestor(cell, dom.isTable);\n      var cells = dom.listDescendant(table, dom.isCell);\n\n      var nextCell = list[isShift ? 'prev' : 'next'](cells, cell);\n      if (nextCell) {\n        range.create(nextCell, 0).select();\n      }\n    };\n\n    /**\n     * create empty table element\n     *\n     * @param {Number} rowCount\n     * @param {Number} colCount\n     * @return {Node}\n     */\n    this.createTable = function (colCount, rowCount, options) {\n      var tds = [], tdHTML;\n      for (var idxCol = 0; idxCol < colCount; idxCol++) {\n        tds.push('<td>' + dom.blank + '</td>');\n      }\n      tdHTML = tds.join('');\n\n      var trs = [], trHTML;\n      for (var idxRow = 0; idxRow < rowCount; idxRow++) {\n        trs.push('<tr>' + tdHTML + '</tr>');\n      }\n      trHTML = trs.join('');\n      var $table = $('<table>' + trHTML + '</table>');\n      if (options && options.tableClassName) {\n        $table.addClass(options.tableClassName);\n      }\n\n      return $table[0];\n    };\n  };\n\n\n  var KEY_BOGUS = 'bogus';\n\n  /**\n   * @class Editor\n   */\n  var Editor = function (context) {\n    var self = this;\n\n    var $note = context.layoutInfo.note;\n    var $editor = context.layoutInfo.editor;\n    var $editable = context.layoutInfo.editable;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    var editable = $editable[0];\n    var lastRange = null;\n\n    var style = new Style();\n    var table = new Table();\n    var typing = new Typing();\n    var bullet = new Bullet();\n    var history = new History($editable);\n\n    this.initialize = function () {\n      // bind custom events\n      $editable.on('keydown', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          context.triggerEvent('enter', event);\n        }\n        context.triggerEvent('keydown', event);\n\n        if (!event.isDefaultPrevented()) {\n          if (options.shortcuts) {\n            self.handleKeyMap(event);\n          } else {\n            self.preventDefaultEditableShortCuts(event);\n          }\n        }\n      }).on('keyup', function (event) {\n        context.triggerEvent('keyup', event);\n      }).on('focus', function (event) {\n        context.triggerEvent('focus', event);\n      }).on('blur', function (event) {\n        context.triggerEvent('blur', event);\n      }).on('mousedown', function (event) {\n        context.triggerEvent('mousedown', event);\n      }).on('mouseup', function (event) {\n        context.triggerEvent('mouseup', event);\n      }).on('scroll', function (event) {\n        context.triggerEvent('scroll', event);\n      }).on('paste', function (event) {\n        context.triggerEvent('paste', event);\n      });\n\n      // init content before set event\n      $editable.html(dom.html($note) || dom.emptyPara);\n\n      // [workaround] IE doesn't have input events for contentEditable\n      // - see: https://goo.gl/4bfIvA\n      var changeEventName = agent.isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n      $editable.on(changeEventName, function () {\n        context.triggerEvent('change', $editable.html());\n      });\n\n      $editor.on('focusin', function (event) {\n        context.triggerEvent('focusin', event);\n      }).on('focusout', function (event) {\n        context.triggerEvent('focusout', event);\n      });\n\n      if (!options.airMode) {\n        if (options.width) {\n          $editor.outerWidth(options.width);\n        }\n        if (options.height) {\n          $editable.outerHeight(options.height);\n        }\n        if (options.maxHeight) {\n          $editable.css('max-height', options.maxHeight);\n        }\n        if (options.minHeight) {\n          $editable.css('min-height', options.minHeight);\n        }\n      }\n\n      history.recordUndo();\n    };\n\n    this.destroy = function () {\n      $editable.off();\n    };\n\n    this.handleKeyMap = function (event) {\n      var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc'];\n      var keys = [];\n\n      if (event.metaKey) { keys.push('CMD'); }\n      if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n      if (event.shiftKey) { keys.push('SHIFT'); }\n\n      var keyName = key.nameFromCode[event.keyCode];\n      if (keyName) {\n        keys.push(keyName);\n      }\n\n      var eventName = keyMap[keys.join('+')];\n      if (eventName) {\n        event.preventDefault();\n        context.invoke(eventName);\n      } else if (key.isEdit(event.keyCode)) {\n        this.afterCommand();\n      }\n    };\n\n    this.preventDefaultEditableShortCuts = function (event) {\n      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n      if ((event.ctrlKey || event.metaKey) &&\n        list.contains([66, 73, 85], event.keyCode)) {\n        event.preventDefault();\n      }\n    };\n\n    /**\n     * create range\n     * @return {WrappedRange}\n     */\n    this.createRange = function () {\n      this.focus();\n      return range.create(editable);\n    };\n\n    /**\n     * saveRange\n     *\n     * save current range\n     *\n     * @param {Boolean} [thenCollapse=false]\n     */\n    this.saveRange = function (thenCollapse) {\n      lastRange = this.createRange();\n      if (thenCollapse) {\n        lastRange.collapse().select();\n      }\n    };\n\n    /**\n     * restoreRange\n     *\n     * restore lately range\n     */\n    this.restoreRange = function () {\n      if (lastRange) {\n        lastRange.select();\n        this.focus();\n      }\n    };\n\n    this.saveTarget = function (node) {\n      $editable.data('target', node);\n    };\n\n    this.clearTarget = function () {\n      $editable.removeData('target');\n    };\n\n    this.restoreTarget = function () {\n      return $editable.data('target');\n    };\n\n    /**\n     * currentStyle\n     *\n     * current style\n     * @return {Object|Boolean} unfocus\n     */\n    this.currentStyle = function () {\n      var rng = range.create();\n      if (rng) {\n        rng = rng.normalize();\n      }\n      return rng ? style.current(rng) : style.fromNode($editable);\n    };\n\n    /**\n     * style from node\n     *\n     * @param {jQuery} $node\n     * @return {Object}\n     */\n    this.styleFromNode = function ($node) {\n      return style.fromNode($node);\n    };\n\n    /**\n     * undo\n     */\n    this.undo = function () {\n      context.triggerEvent('before.command', $editable.html());\n      history.undo();\n      context.triggerEvent('change', $editable.html());\n    };\n    context.memo('help.undo', lang.help.undo);\n\n    /**\n     * redo\n     */\n    this.redo = function () {\n      context.triggerEvent('before.command', $editable.html());\n      history.redo();\n      context.triggerEvent('change', $editable.html());\n    };\n    context.memo('help.redo', lang.help.redo);\n\n    /**\n     * before command\n     */\n    var beforeCommand = this.beforeCommand = function () {\n      context.triggerEvent('before.command', $editable.html());\n      // keep focus on editable before command execution\n      self.focus();\n    };\n\n    /**\n     * after command\n     * @param {Boolean} isPreventTrigger\n     */\n    var afterCommand = this.afterCommand = function (isPreventTrigger) {\n      history.recordUndo();\n      if (!isPreventTrigger) {\n        context.triggerEvent('change', $editable.html());\n      }\n    };\n\n    /* jshint ignore:start */\n    // native commands(with execCommand), generate function for execCommand\n    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n                    'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n                    'formatBlock', 'removeFormat',\n                    'backColor', 'foreColor', 'fontName'];\n\n    for (var idx = 0, len = commands.length; idx < len; idx ++) {\n      this[commands[idx]] = (function (sCmd) {\n        return function (value) {\n          beforeCommand();\n          document.execCommand(sCmd, false, value);\n          afterCommand(true);\n        };\n      })(commands[idx]);\n      context.memo('help.' + commands[idx], lang.help[commands[idx]]);\n    }\n    /* jshint ignore:end */\n\n    /**\n     * handle tab key\n     */\n    this.tab = function () {\n      var rng = this.createRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        table.tab(rng);\n      } else {\n        beforeCommand();\n        typing.insertTab(rng, options.tabSize);\n        afterCommand();\n      }\n    };\n    context.memo('help.tab', lang.help.tab);\n\n    /**\n     * handle shift+tab key\n     */\n    this.untab = function () {\n      var rng = this.createRange();\n      if (rng.isCollapsed() && rng.isOnCell()) {\n        table.tab(rng, true);\n      }\n    };\n    context.memo('help.untab', lang.help.untab);\n\n    /**\n     * run given function between beforeCommand and afterCommand\n     */\n    this.wrapCommand = function (fn) {\n      return function () {\n        beforeCommand();\n        fn.apply(self, arguments);\n        afterCommand();\n      };\n    };\n\n    /**\n     * insert paragraph\n     */\n    this.insertParagraph = this.wrapCommand(function () {\n      typing.insertParagraph(editable);\n    });\n    context.memo('help.insertParagraph', lang.help.insertParagraph);\n\n    this.insertOrderedList = this.wrapCommand(function () {\n      bullet.insertOrderedList(editable);\n    });\n    context.memo('help.insertOrderedList', lang.help.insertOrderedList);\n\n    this.insertUnorderedList = this.wrapCommand(function () {\n      bullet.insertUnorderedList(editable);\n    });\n    context.memo('help.insertUnorderedList', lang.help.insertUnorderedList);\n\n    this.indent = this.wrapCommand(function () {\n      bullet.indent(editable);\n    });\n    context.memo('help.indent', lang.help.indent);\n\n    this.outdent = this.wrapCommand(function () {\n      bullet.outdent(editable);\n    });\n    context.memo('help.outdent', lang.help.outdent);\n\n    /**\n     * insert image\n     *\n     * @param {String} src\n     * @param {String|Function} param\n     * @return {Promise}\n     */\n    this.insertImage = function (src, param) {\n      return async.createImage(src, param).then(function ($image) {\n        beforeCommand();\n\n        if (typeof param === 'function') {\n          param($image);\n        } else {\n          if (typeof param === 'string') {\n            $image.attr('data-filename', param);\n          }\n          $image.css('width', Math.min($editable.width(), $image.width()));\n        }\n\n        $image.show();\n        range.create(editable).insertNode($image[0]);\n        range.createFromNodeAfter($image[0]).select();\n        afterCommand();\n      }).fail(function (e) {\n        context.triggerEvent('image.upload.error', e);\n      });\n    };\n\n    /**\n     * insertImages\n     * @param {File[]} files\n     */\n    this.insertImages = function (files) {\n      $.each(files, function (idx, file) {\n        var filename = file.name;\n        if (options.maximumImageFileSize && options.maximumImageFileSize < file.size) {\n          context.triggerEvent('image.upload.error', lang.image.maximumFileSizeError);\n        } else {\n          async.readFileAsDataURL(file).then(function (dataURL) {\n            return self.insertImage(dataURL, filename);\n          }).fail(function () {\n            context.triggerEvent('image.upload.error');\n          });\n        }\n      });\n    };\n\n    /**\n     * insertImagesOrCallback\n     * @param {File[]} files\n     */\n    this.insertImagesOrCallback = function (files) {\n      var callbacks = options.callbacks;\n\n      // If onImageUpload options setted\n      if (callbacks.onImageUpload) {\n        context.triggerEvent('image.upload', files);\n      // else insert Image as dataURL\n      } else {\n        this.insertImages(files);\n      }\n    };\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand(function (node) {\n      var rng = this.createRange();\n      rng.insertNode(node);\n      range.createFromNodeAfter(node).select();\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand(function (text) {\n      var rng = this.createRange();\n      var textNode = rng.insertNode(dom.createText(text));\n      range.create(textNode, dom.nodeLength(textNode)).select();\n    });\n\n    /**\n     * return selected plain text\n     * @return {String} text\n     */\n    this.getSelectedText = function () {\n      var rng = this.createRange();\n\n      // if range on anchor, expand range with anchor\n      if (rng.isOnAnchor()) {\n        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n      }\n\n      return rng.toString();\n    };\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand(function (markup) {\n      var contents = this.createRange().pasteHTML(markup);\n      range.createFromNodeAfter(list.last(contents)).select();\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand(function (tagName) {\n      // [workaround] for MSIE, IE need `<`\n      tagName = agent.isMSIE ? '<' + tagName + '>' : tagName;\n      document.execCommand('FormatBlock', false, tagName);\n    });\n\n    this.formatPara = function () {\n      this.formatBlock('P');\n    };\n    context.memo('help.formatPara', lang.help.formatPara);\n\n    /* jshint ignore:start */\n    for (var idx = 1; idx <= 6; idx ++) {\n      this['formatH' + idx] = function (idx) {\n        return function () {\n          this.formatBlock('H' + idx);\n        };\n      }(idx);\n      context.memo('help.formatH'+idx, lang.help['formatH' + idx]);\n    };\n    /* jshint ignore:end */\n\n    /**\n     * fontSize\n     *\n     * @param {String} value - px\n     */\n    this.fontSize = function (value) {\n      var rng = this.createRange();\n\n      if (rng && rng.isCollapsed()) {\n        var spans = style.styleNodes(rng);\n        var firstSpan = list.head(spans);\n\n        $(spans).css({\n          'font-size': value + 'px'\n        });\n\n        // [workaround] added styled bogus span for style\n        //  - also bogus character needed for cursor position\n        if (firstSpan && !dom.nodeLength(firstSpan)) {\n          firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n          range.createFromNodeAfter(firstSpan.firstChild).select();\n          $editable.data(KEY_BOGUS, firstSpan);\n        }\n      } else {\n        beforeCommand();\n        $(style.styleNodes(rng)).css({\n          'font-size': value + 'px'\n        });\n        afterCommand();\n      }\n    };\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(function () {\n      var hrNode = this.createRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        range.create(hrNode.nextSibling, 0).normalize().select();\n      }\n    });\n    context.memo('help.insertHorizontalRule', lang.help.insertHorizontalRule);\n\n    /**\n     * remove bogus node and character\n     */\n    this.removeBogus = function () {\n      var bogusNode = $editable.data(KEY_BOGUS);\n      if (!bogusNode) {\n        return;\n      }\n\n      var textNode = list.find(list.from(bogusNode.childNodes), dom.isText);\n\n      var bogusCharIdx = textNode.nodeValue.indexOf(dom.ZERO_WIDTH_NBSP_CHAR);\n      if (bogusCharIdx !== -1) {\n        textNode.deleteData(bogusCharIdx, 1);\n      }\n\n      if (dom.isEmpty(bogusNode)) {\n        dom.remove(bogusNode);\n      }\n\n      $editable.removeData(KEY_BOGUS);\n    };\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand(function (value) {\n      style.stylePara(this.createRange(), {\n        lineHeight: value\n      });\n    });\n\n    /**\n     * unlink\n     *\n     * @type command\n     */\n    this.unlink = function () {\n      var rng = this.createRange();\n      if (rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        rng = range.createFromNode(anchor);\n        rng.select();\n\n        beforeCommand();\n        document.execCommand('unlink');\n        afterCommand();\n      }\n    };\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand(function (linkInfo) {\n      var linkUrl = linkInfo.url;\n      var linkText = linkInfo.text;\n      var isNewWindow = linkInfo.isNewWindow;\n      var rng = linkInfo.range || this.createRange();\n      var isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (options.onCreateLink) {\n        linkUrl = options.onCreateLink(linkUrl);\n      }\n\n      var anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        var anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true\n        });\n      }\n\n      $.each(anchors, function (idx, anchor) {\n        // if url doesn't match an URL schema, set http:// as default\n        linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?/.test(linkUrl) ?\n          linkUrl : 'http://' + linkUrl;\n\n        $(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          $(anchor).attr('target', '_blank');\n        } else {\n          $(anchor).removeAttr('target');\n        }\n      });\n\n      var startRange = range.createFromNodeBefore(list.head(anchors));\n      var startPoint = startRange.getStartPoint();\n      var endRange = range.createFromNodeAfter(list.last(anchors));\n      var endPoint = endRange.getEndPoint();\n\n      range.create(\n        startPoint.node,\n        startPoint.offset,\n        endPoint.node,\n        endPoint.offset\n      ).select();\n    });\n\n    /**\n     * returns link info\n     *\n     * @return {Object}\n     * @return {WrappedRange} return.range\n     * @return {String} return.text\n     * @return {Boolean} [return.isNewWindow=true]\n     * @return {String} [return.url=\"\"]\n     */\n    this.getLinkInfo = function () {\n      var rng = this.createRange().expand(dom.isAnchor);\n\n      // Get the first anchor on range(for edit).\n      var $anchor = $(list.head(rng.nodes(dom.isAnchor)));\n\n      return {\n        range: rng,\n        text: rng.toString(),\n        isNewWindow: $anchor.length ? $anchor.attr('target') === '_blank' : false,\n        url: $anchor.length ? $anchor.attr('href') : ''\n      };\n    };\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand(function (colorInfo) {\n      var foreColor = colorInfo.foreColor;\n      var backColor = colorInfo.backColor;\n\n      if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n      if (backColor) { document.execCommand('backColor', false, backColor); }\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand(function (dim) {\n      var dimension = dim.split('x');\n\n      var rng = this.createRange().deleteContents();\n      rng.insertNode(table.createTable(dimension[0], dimension[1], options));\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand(function (value) {\n      var $target = $(this.restoreTarget());\n      $target.css('float', value);\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand(function (value) {\n      var $target = $(this.restoreTarget());\n      $target.css({\n        width: value * 100 + '%',\n        height: ''\n      });\n    });\n\n    /**\n     * @param {Position} pos\n     * @param {jQuery} $target - target element\n     * @param {Boolean} [bKeepRatio] - keep ratio\n     */\n    this.resizeTo = function (pos, $target, bKeepRatio) {\n      var imageSize;\n      if (bKeepRatio) {\n        var newRatio = pos.y / pos.x;\n        var ratio = $target.data('ratio');\n        imageSize = {\n          width: ratio > newRatio ? pos.x : pos.y / ratio,\n          height: ratio > newRatio ? pos.x * ratio : pos.y\n        };\n      } else {\n        imageSize = {\n          width: pos.x,\n          height: pos.y\n        };\n      }\n\n      $target.css(imageSize);\n    };\n\n    /**\n     * remove media object\n     */\n    this.removeMedia = this.wrapCommand(function () {\n      var $target = $(this.restoreTarget()).detach();\n      context.triggerEvent('media.delete', $target, $editable);\n    });\n\n    /**\n     * returns whether editable area has focus or not.\n     */\n    this.hasFocus = function () {\n      return $editable.is(':focus');\n    };\n\n    /**\n     * set focus\n     */\n    this.focus = function () {\n      // [workaround] Screen will move when page is scolled in IE.\n      //  - do focus when not focused\n      if (!this.hasFocus()) {\n        $editable.focus();\n      }\n    };\n\n    /**\n     * returns whether contents is empty or not.\n     * @return {Boolean}\n     */\n    this.isEmpty = function () {\n      return dom.isEmpty($editable[0]) || dom.emptyPara === $editable.html();\n    };\n\n    /**\n     * Removes all contents and restores the editable instance to an _emptyPara_.\n     */\n    this.empty = function () {\n      context.invoke('code', dom.emptyPara);\n    };\n  };\n\n  var Clipboard = function (context) {\n    var self = this;\n\n    var $editable = context.layoutInfo.editable;\n\n    this.events = {\n      'summernote.keydown': function (we, e) {\n        if (self.needKeydownHook()) {\n          if ((e.ctrlKey || e.metaKey) && e.keyCode === key.code.V) {\n            context.invoke('editor.saveRange');\n            self.$paste.focus();\n\n            setTimeout(function () {\n              self.pasteByHook();\n            }, 0);\n          }\n        }\n      }\n    };\n\n    this.needKeydownHook = function () {\n      return (agent.isMSIE && agent.browserVersion > 10) || agent.isFF;\n    };\n\n    this.initialize = function () {\n      // [workaround] getting image from clipboard\n      //  - IE11 and Firefox: CTRL+v hook\n      //  - Webkit: event.clipboardData\n      if (this.needKeydownHook()) {\n        this.$paste = $('<div tabindex=\"-1\" />').attr('contenteditable', true).css({\n          position: 'absolute',\n          left: -100000,\n          opacity: 0\n        });\n        $editable.before(this.$paste);\n\n        this.$paste.on('paste', function (event) {\n          context.triggerEvent('paste', event);\n        });\n      } else {\n        $editable.on('paste', this.pasteByEvent);\n      }\n    };\n\n    this.destroy = function () {\n      if (this.needKeydownHook()) {\n        this.$paste.remove();\n        this.$paste = null;\n      }\n    };\n\n    this.pasteByHook = function () {\n      var node = this.$paste[0].firstChild;\n\n      if (dom.isImg(node)) {\n        var dataURI = node.src;\n        var decodedData = atob(dataURI.split(',')[1]);\n        var array = new Uint8Array(decodedData.length);\n        for (var i = 0; i < decodedData.length; i++) {\n          array[i] = decodedData.charCodeAt(i);\n        }\n\n        var blob = new Blob([array], { type: 'image/png' });\n        blob.name = 'clipboard.png';\n\n        context.invoke('editor.restoreRange');\n        context.invoke('editor.focus');\n        context.invoke('editor.insertImagesOrCallback', [blob]);\n      } else {\n        var pasteContent = $('<div />').html(this.$paste.html()).html();\n        context.invoke('editor.restoreRange');\n        context.invoke('editor.focus');\n\n        if (pasteContent) {\n          context.invoke('editor.pasteHTML', pasteContent);\n        }\n      }\n\n      this.$paste.empty();\n    };\n\n    /**\n     * paste by clipboard event\n     *\n     * @param {Event} event\n     */\n    this.pasteByEvent = function (event) {\n      var clipboardData = event.originalEvent.clipboardData;\n      if (clipboardData && clipboardData.items && clipboardData.items.length) {\n        var item = list.head(clipboardData.items);\n        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n          context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n        }\n        context.invoke('editor.afterCommand');\n      }\n    };\n  };\n\n  var Dropzone = function (context) {\n    var $document = $(document);\n    var $editor = context.layoutInfo.editor;\n    var $editable = context.layoutInfo.editable;\n    var options = context.options;\n    var lang = options.langInfo;\n    var documentEventHandlers = {};\n\n    var $dropzone = $([\n      '<div class=\"note-dropzone\">',\n      '  <div class=\"note-dropzone-message\"/>',\n      '</div>'\n    ].join('')).prependTo($editor);\n\n    var detachDocumentEvent = function () {\n      Object.keys(documentEventHandlers).forEach(function (key) {\n        $document.off(key.substr(2).toLowerCase(), documentEventHandlers[key]);\n      });\n      documentEventHandlers = {};\n    };\n\n    /**\n     * attach Drag and Drop Events\n     */\n    this.initialize = function () {\n      if (options.disableDragAndDrop) {\n        // prevent default drop event\n        documentEventHandlers.onDrop = function (e) {\n          e.preventDefault();\n        };\n        $document.on('drop', documentEventHandlers.onDrop);\n      } else {\n        this.attachDragAndDropEvent();\n      }\n    };\n\n    /**\n     * attach Drag and Drop Events\n     */\n    this.attachDragAndDropEvent = function () {\n      var collection = $(),\n          $dropzoneMessage = $dropzone.find('.note-dropzone-message');\n\n      documentEventHandlers.onDragenter = function (e) {\n        var isCodeview = context.invoke('codeview.isActivated');\n        var hasEditorSize = $editor.width() > 0 && $editor.height() > 0;\n        if (!isCodeview && !collection.length && hasEditorSize) {\n          $editor.addClass('dragover');\n          $dropzone.width($editor.width());\n          $dropzone.height($editor.height());\n          $dropzoneMessage.text(lang.image.dragImageHere);\n        }\n        collection = collection.add(e.target);\n      };\n\n      documentEventHandlers.onDragleave = function (e) {\n        collection = collection.not(e.target);\n        if (!collection.length) {\n          $editor.removeClass('dragover');\n        }\n      };\n\n      documentEventHandlers.onDrop = function () {\n        collection = $();\n        $editor.removeClass('dragover');\n      };\n\n      // show dropzone on dragenter when dragging a object to document\n      // -but only if the editor is visible, i.e. has a positive width and height\n      $document.on('dragenter', documentEventHandlers.onDragenter)\n        .on('dragleave', documentEventHandlers.onDragleave)\n        .on('drop', documentEventHandlers.onDrop);\n\n      // change dropzone's message on hover.\n      $dropzone.on('dragenter', function () {\n        $dropzone.addClass('hover');\n        $dropzoneMessage.text(lang.image.dropImage);\n      }).on('dragleave', function () {\n        $dropzone.removeClass('hover');\n        $dropzoneMessage.text(lang.image.dragImageHere);\n      });\n\n      // attach dropImage\n      $dropzone.on('drop', function (event) {\n        var dataTransfer = event.originalEvent.dataTransfer;\n\n        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n          event.preventDefault();\n          $editable.focus();\n          context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n        } else {\n          $.each(dataTransfer.types, function (idx, type) {\n            var content = dataTransfer.getData(type);\n\n            if (type.toLowerCase().indexOf('text') > -1) {\n              context.invoke('editor.pasteHTML', content);\n            } else {\n              $(content).each(function () {\n                context.invoke('editor.insertNode', this);\n              });\n            }\n          });\n        }\n      }).on('dragover', false); // prevent default dragover event\n    };\n\n    this.destroy = function () {\n      detachDocumentEvent();\n    };\n  };\n\n\n  var CodeMirror;\n  if (agent.hasCodeMirror) {\n    if (agent.isSupportAmd) {\n      require(['codemirror'], function (cm) {\n        CodeMirror = cm;\n      });\n    } else {\n      CodeMirror = window.CodeMirror;\n    }\n  }\n\n  /**\n   * @class Codeview\n   */\n  var Codeview = function (context) {\n    var $editor = context.layoutInfo.editor;\n    var $editable = context.layoutInfo.editable;\n    var $codable = context.layoutInfo.codable;\n    var options = context.options;\n\n    this.sync = function () {\n      var isCodeview = this.isActivated();\n      if (isCodeview && agent.hasCodeMirror) {\n        $codable.data('cmEditor').save();\n      }\n    };\n\n    /**\n     * @return {Boolean}\n     */\n    this.isActivated = function () {\n      return $editor.hasClass('codeview');\n    };\n\n    /**\n     * toggle codeview\n     */\n    this.toggle = function () {\n      if (this.isActivated()) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n      context.triggerEvent('codeview.toggled');\n    };\n\n    /**\n     * activate code view\n     */\n    this.activate = function () {\n      $codable.val(dom.html($editable, options.prettifyHtml));\n      $codable.height($editable.height());\n\n      context.invoke('toolbar.updateCodeview', true);\n      $editor.addClass('codeview');\n      $codable.focus();\n\n      // activate CodeMirror as codable\n      if (agent.hasCodeMirror) {\n        var cmEditor = CodeMirror.fromTextArea($codable[0], options.codemirror);\n\n        // CodeMirror TernServer\n        if (options.codemirror.tern) {\n          var server = new CodeMirror.TernServer(options.codemirror.tern);\n          cmEditor.ternServer = server;\n          cmEditor.on('cursorActivity', function (cm) {\n            server.updateArgHints(cm);\n          });\n        }\n\n        // CodeMirror hasn't Padding.\n        cmEditor.setSize(null, $editable.outerHeight());\n        $codable.data('cmEditor', cmEditor);\n      }\n    };\n\n    /**\n     * deactivate code view\n     */\n    this.deactivate = function () {\n      // deactivate CodeMirror as codable\n      if (agent.hasCodeMirror) {\n        var cmEditor = $codable.data('cmEditor');\n        $codable.val(cmEditor.getValue());\n        cmEditor.toTextArea();\n      }\n\n      var value = dom.value($codable, options.prettifyHtml) || dom.emptyPara;\n      var isChange = $editable.html() !== value;\n\n      $editable.html(value);\n      $editable.height(options.height ? $codable.height() : 'auto');\n      $editor.removeClass('codeview');\n\n      if (isChange) {\n        context.triggerEvent('change', $editable.html(), $editable);\n      }\n\n      $editable.focus();\n\n      context.invoke('toolbar.updateCodeview', false);\n    };\n\n    this.destroy = function () {\n      if (this.isActivated()) {\n        this.deactivate();\n      }\n    };\n  };\n\n  var EDITABLE_PADDING = 24;\n\n  var Statusbar = function (context) {\n    var $document = $(document);\n    var $statusbar = context.layoutInfo.statusbar;\n    var $editable = context.layoutInfo.editable;\n    var options = context.options;\n\n    this.initialize = function () {\n      if (options.airMode || options.disableResizeEditor) {\n        return;\n      }\n\n      $statusbar.on('mousedown', function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        var editableTop = $editable.offset().top - $document.scrollTop();\n\n        $document.on('mousemove', function (event) {\n          var height = event.clientY - (editableTop + EDITABLE_PADDING);\n\n          height = (options.minheight > 0) ? Math.max(height, options.minheight) : height;\n          height = (options.maxHeight > 0) ? Math.min(height, options.maxHeight) : height;\n\n          $editable.height(height);\n        }).one('mouseup', function () {\n          $document.off('mousemove');\n        });\n      });\n    };\n\n    this.destroy = function () {\n      $statusbar.off();\n      $statusbar.remove();\n    };\n  };\n\n  var Fullscreen = function (context) {\n    var $editor = context.layoutInfo.editor;\n    var $toolbar = context.layoutInfo.toolbar;\n    var $editable = context.layoutInfo.editable;\n    var $codable = context.layoutInfo.codable;\n\n    var $window = $(window);\n    var $scrollbar = $('html, body');\n\n    /**\n     * toggle fullscreen\n     */\n    this.toggle = function () {\n      var resize = function (size) {\n        $editable.css('height', size.h);\n        $codable.css('height', size.h);\n        if ($codable.data('cmeditor')) {\n          $codable.data('cmeditor').setsize(null, size.h);\n        }\n      };\n\n      $editor.toggleClass('fullscreen');\n      if (this.isFullscreen()) {\n        $editable.data('orgHeight', $editable.css('height'));\n\n        $window.on('resize', function () {\n          resize({\n            h: $window.height() - $toolbar.outerHeight()\n          });\n        }).trigger('resize');\n\n        $scrollbar.css('overflow', 'hidden');\n      } else {\n        $window.off('resize');\n        resize({\n          h: $editable.data('orgHeight')\n        });\n        $scrollbar.css('overflow', 'visible');\n      }\n\n      context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n    };\n\n    this.isFullscreen = function () {\n      return $editor.hasClass('fullscreen');\n    };\n  };\n\n  var Handle = function (context) {\n    var self = this;\n\n    var $document = $(document);\n    var $editingArea = context.layoutInfo.editingArea;\n    var options = context.options;\n\n    this.events = {\n      'summernote.mousedown': function (we, e) {\n        if (self.update(e.target)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () {\n        self.update();\n      }\n    };\n\n    this.initialize = function () {\n      this.$handle = $([\n        '<div class=\"note-handle\">',\n        '<div class=\"note-control-selection\">',\n        '<div class=\"note-control-selection-bg\"></div>',\n        '<div class=\"note-control-holder note-control-nw\"></div>',\n        '<div class=\"note-control-holder note-control-ne\"></div>',\n        '<div class=\"note-control-holder note-control-sw\"></div>',\n        '<div class=\"',\n        (options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n        ' note-control-se\"></div>',\n        (options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n        '</div>',\n        '</div>'\n      ].join('')).prependTo($editingArea);\n\n      this.$handle.on('mousedown', function (event) {\n        if (dom.isControlSizing(event.target)) {\n          event.preventDefault();\n          event.stopPropagation();\n\n          var $target = self.$handle.find('.note-control-selection').data('target'),\n              posStart = $target.offset(),\n              scrollTop = $document.scrollTop();\n\n          $document.on('mousemove', function (event) {\n            context.invoke('editor.resizeTo', {\n              x: event.clientX - posStart.left,\n              y: event.clientY - (posStart.top - scrollTop)\n            }, $target, !event.shiftKey);\n\n            self.update($target[0]);\n          }).one('mouseup', function (e) {\n            e.preventDefault();\n            $document.off('mousemove');\n            context.invoke('editor.afterCommand');\n          });\n\n          if (!$target.data('ratio')) { // original ratio.\n            $target.data('ratio', $target.height() / $target.width());\n          }\n        }\n      });\n    };\n\n    this.destroy = function () {\n      this.$handle.remove();\n    };\n\n    this.update = function (target) {\n      var isImage = dom.isImg(target);\n      var $selection = this.$handle.find('.note-control-selection');\n\n      context.invoke('imagePopover.update', target);\n\n      if (isImage) {\n        var $image = $(target);\n        var pos = $image.position();\n\n        // include margin\n        var imageSize = {\n          w: $image.outerWidth(true),\n          h: $image.outerHeight(true)\n        };\n\n        $selection.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top,\n          width: imageSize.w,\n          height: imageSize.h\n        }).data('target', $image); // save current image element.\n\n        var sizingText = imageSize.w + 'x' + imageSize.h;\n        $selection.find('.note-control-selection-info').text(sizingText);\n        context.invoke('editor.saveTarget', target);\n      } else {\n        this.hide();\n      }\n\n      return isImage;\n    };\n\n    /**\n     * hide\n     *\n     * @param {jQuery} $handle\n     */\n    this.hide = function () {\n      context.invoke('editor.clearTarget');\n      this.$handle.children().hide();\n    };\n  };\n\n  var AutoLink = function (context) {\n    var self = this;\n    var defaultScheme = 'http://';\n    var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\n    this.events = {\n      'summernote.keyup': function (we, e) {\n        if (!e.isDefaultPrevented()) {\n          self.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function (we, e) {\n        self.handleKeydown(e);\n      }\n    };\n\n    this.initialize = function () {\n      this.lastWordRange = null;\n    };\n\n    this.destroy = function () {\n      this.lastWordRange = null;\n    };\n\n    this.replace = function () {\n      if (!this.lastWordRange) {\n        return;\n      }\n\n      var keyword = this.lastWordRange.toString();\n      var match = keyword.match(linkPattern);\n\n      if (match && (match[1] || match[2])) {\n        var link = match[1] ? keyword : defaultScheme + keyword;\n        var node = $('<a />').html(keyword).attr('href', link)[0];\n\n        this.lastWordRange.insertNode(node);\n        this.lastWordRange = null;\n        context.invoke('editor.focus');\n      }\n\n    };\n\n    this.handleKeydown = function (e) {\n      if (list.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n        var wordRange = context.invoke('editor.createRange').getWordRange();\n        this.lastWordRange = wordRange;\n      }\n    };\n\n    this.handleKeyup = function (e) {\n      if (list.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n        this.replace();\n      }\n    };\n  };\n\n  /**\n   * textarea auto sync.\n   */\n  var AutoSync = function (context) {\n    var $note = context.layoutInfo.note;\n\n    this.events = {\n      'summernote.change': function () {\n        $note.val(context.invoke('code'));\n      }\n    };\n\n    this.shouldInitialize = function () {\n      return dom.isTextarea($note[0]);\n    };\n  };\n\n  var Placeholder = function (context) {\n    var self = this;\n    var $editingArea = context.layoutInfo.editingArea;\n    var options = context.options;\n\n    this.events = {\n      'summernote.init summernote.change': function () {\n        self.update();\n      },\n      'summernote.codeview.toggled': function () {\n        self.update();\n      }\n    };\n\n    this.shouldInitialize = function () {\n      return !!options.placeholder;\n    };\n\n    this.initialize = function () {\n      this.$placeholder = $('<div class=\"note-placeholder\">');\n      this.$placeholder.on('click', function () {\n        context.invoke('focus');\n      }).text(options.placeholder).prependTo($editingArea);\n    };\n\n    this.destroy = function () {\n      this.$placeholder.remove();\n    };\n\n    this.update = function () {\n      var isShow = !context.invoke('codeview.isActivated') && context.invoke('editor.isEmpty');\n      this.$placeholder.toggle(isShow);\n    };\n  };\n\n  var Buttons = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var $toolbar = context.layoutInfo.toolbar;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    var invertedKeyMap = func.invertObject(options.keyMap[agent.isMac ? 'mac' : 'pc']);\n\n    var representShortcut = this.representShortcut = function (editorMethod) {\n      var shortcut = invertedKeyMap[editorMethod];\n      if (!options.shortcuts || !shortcut) {\n        return '';\n      }\n      \n      if (agent.isMac) {\n        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n      }\n\n      shortcut = shortcut.replace('BACKSLASH', '\\\\')\n                         .replace('SLASH', '/')\n                         .replace('LEFTBRACKET', '[')\n                         .replace('RIGHTBRACKET', ']');\n\n      return ' (' + shortcut + ')';\n    };\n\n    this.initialize = function () {\n      this.addToolbarButtons();\n      this.addImagePopoverButtons();\n      this.addLinkPopoverButtons();\n      this.fontInstalledMap = {};\n    };\n\n    this.destroy = function () {\n      delete this.fontInstalledMap;\n    };\n\n    this.isFontInstalled = function (name) {\n      if (!self.fontInstalledMap.hasOwnProperty(name)) {\n        self.fontInstalledMap[name] = agent.isFontInstalled(name) ||\n          list.contains(options.fontNamesIgnoreCheck, name);\n      }\n\n      return self.fontInstalledMap[name];\n    };\n\n    this.addToolbarButtons = function () {\n      context.memo('button.style', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: ui.icon(options.icons.magic) + ' ' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.style.style,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdown({\n            className: 'dropdown-style',\n            items: context.options.styleTags,\n            template: function (item) {\n\n              if (typeof item === 'string') {\n                item = { tag: item, title: (lang.style.hasOwnProperty(item) ? lang.style[item] : item) };\n              }\n\n              var tag = item.tag;\n              var title = item.title;\n              var style = item.style ? ' style=\"' + item.style + '\" ' : '';\n              var className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n              return '<' + tag + style + className + '>' + title + '</' + tag +  '>';\n            },\n            click: context.createInvokeHandler('editor.formatBlock')\n          })\n        ]).render();\n      });\n\n      context.memo('button.bold', function () {\n        return ui.button({\n          className: 'note-btn-bold',\n          contents: ui.icon(options.icons.bold),\n          tooltip: lang.font.bold + representShortcut('bold'),\n          click: context.createInvokeHandler('editor.bold')\n        }).render();\n      });\n\n      context.memo('button.italic', function () {\n        return ui.button({\n          className: 'note-btn-italic',\n          contents: ui.icon(options.icons.italic),\n          tooltip: lang.font.italic + representShortcut('italic'),\n          click: context.createInvokeHandler('editor.italic')\n        }).render();\n      });\n\n      context.memo('button.underline', function () {\n        return ui.button({\n          className: 'note-btn-underline',\n          contents: ui.icon(options.icons.underline),\n          tooltip: lang.font.underline + representShortcut('underline'),\n          click: context.createInvokeHandler('editor.underline')\n        }).render();\n      });\n\n      context.memo('button.clear', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.eraser),\n          tooltip: lang.font.clear + representShortcut('removeFormat'),\n          click: context.createInvokeHandler('editor.removeFormat')\n        }).render();\n      });\n\n      context.memo('button.strikethrough', function () {\n        return ui.button({\n          className: 'note-btn-strikethrough',\n          contents: ui.icon(options.icons.strikethrough),\n          tooltip: lang.font.strikethrough + representShortcut('strikethrough'),\n          click: context.createInvokeHandler('editor.strikethrough')\n        }).render();\n      });\n\n      context.memo('button.superscript', function () {\n        return ui.button({\n          className: 'note-btn-superscript',\n          contents: ui.icon(options.icons.superscript),\n          tooltip: lang.font.superscript,\n          click: context.createInvokeHandler('editor.superscript')\n        }).render();\n      });\n\n      context.memo('button.subscript', function () {\n        return ui.button({\n          className: 'note-btn-subscript',\n          contents: ui.icon(options.icons.subscript),\n          tooltip: lang.font.subscript,\n          click: context.createInvokeHandler('editor.subscript')\n        }).render();\n      });\n\n      context.memo('button.fontname', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: '<span class=\"note-current-fontname\"/> ' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.font.name,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdownCheck({\n            className: 'dropdown-fontname',\n            checkClassName: options.icons.menuCheck,\n            items: options.fontNames.filter(self.isFontInstalled),\n            template: function (item) {\n              return '<span style=\"font-family:' + item + '\">' + item + '</span>';\n            },\n            click: context.createInvokeHandler('editor.fontName')\n          })\n        ]).render();\n      });\n\n      context.memo('button.fontsize', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: '<span class=\"note-current-fontsize\"/>' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.font.size,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdownCheck({\n            className: 'dropdown-fontsize',\n            checkClassName: options.icons.menuCheck,\n            items: options.fontSizes,\n            click: context.createInvokeHandler('editor.fontSize')\n          })\n        ]).render();\n      });\n\n      context.memo('button.color', function () {\n        return ui.buttonGroup({\n          className: 'note-color',\n          children: [\n            ui.button({\n              className: 'note-current-color-button',\n              contents: ui.icon(options.icons.font + ' note-recent-color'),\n              tooltip: lang.color.recent,\n              click: function (e) {\n                var $button = $(e.currentTarget);\n                context.invoke('editor.color', {\n                  backColor: $button.attr('data-backColor'),\n                  foreColor: $button.attr('data-foreColor')\n                });\n              },\n              callback: function ($button) {\n                var $recentColor = $button.find('.note-recent-color');\n                $recentColor.css('background-color', '#FFFF00');\n                $button.attr('data-backColor', '#FFFF00');\n              }\n            }),\n            ui.button({\n              className: 'dropdown-toggle',\n              contents: ui.icon(options.icons.caret, 'span'),\n              tooltip: lang.color.more,\n              data: {\n                toggle: 'dropdown'\n              }\n            }),\n            ui.dropdown({\n              items: [\n                '<li>',\n                '<div class=\"btn-group\">',\n                '  <div class=\"note-palette-title\">' + lang.color.background + '</div>',\n                '  <div>',\n                '    <button type=\"button\" class=\"note-color-reset btn btn-default\" data-event=\"backColor\" data-value=\"inherit\">',\n                lang.color.transparent,\n                '    </button>',\n                '  </div>',\n                '  <div class=\"note-holder\" data-event=\"backColor\"/>',\n                '</div>',\n                '<div class=\"btn-group\">',\n                '  <div class=\"note-palette-title\">' + lang.color.foreground + '</div>',\n                '  <div>',\n                '    <button type=\"button\" class=\"note-color-reset btn btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n                lang.color.resetToDefault,\n                '    </button>',\n                '  </div>',\n                '  <div class=\"note-holder\" data-event=\"foreColor\"/>',\n                '</div>',\n                '</li>'\n              ].join(''),\n              callback: function ($dropdown) {\n                $dropdown.find('.note-holder').each(function () {\n                  var $holder = $(this);\n                  $holder.append(ui.palette({\n                    colors: options.colors,\n                    eventName: $holder.data('event')\n                  }).render());\n                });\n              },\n              click: function (event) {\n                var $button = $(event.target);\n                var eventName = $button.data('event');\n                var value = $button.data('value');\n\n                if (eventName && value) {\n                  var key = eventName === 'backColor' ? 'background-color' : 'color';\n                  var $color = $button.closest('.note-color').find('.note-recent-color');\n                  var $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n                  $color.css(key, value);\n                  $currentButton.attr('data-' + eventName, value);\n                  context.invoke('editor.' + eventName, value);\n                }\n              }\n            })\n          ]\n        }).render();\n      });\n\n      context.memo('button.ul',  function () {\n        return ui.button({\n          contents: ui.icon(options.icons.unorderedlist),\n          tooltip: lang.lists.unordered + representShortcut('insertUnorderedList'),\n          click: context.createInvokeHandler('editor.insertUnorderedList')\n        }).render();\n      });\n\n      context.memo('button.ol', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.orderedlist),\n          tooltip: lang.lists.ordered + representShortcut('insertOrderedList'),\n          click:  context.createInvokeHandler('editor.insertOrderedList')\n        }).render();\n      });\n\n      var justifyLeft = ui.button({\n        contents: ui.icon(options.icons.alignLeft),\n        tooltip: lang.paragraph.left + representShortcut('justifyLeft'),\n        click: context.createInvokeHandler('editor.justifyLeft')\n      });\n\n      var justifyCenter = ui.button({\n        contents: ui.icon(options.icons.alignCenter),\n        tooltip: lang.paragraph.center + representShortcut('justifyCenter'),\n        click: context.createInvokeHandler('editor.justifyCenter')\n      });\n\n      var justifyRight = ui.button({\n        contents: ui.icon(options.icons.alignRight),\n        tooltip: lang.paragraph.right + representShortcut('justifyRight'),\n        click: context.createInvokeHandler('editor.justifyRight')\n      });\n\n      var justifyFull = ui.button({\n        contents: ui.icon(options.icons.alignJustify),\n        tooltip: lang.paragraph.justify + representShortcut('justifyFull'),\n        click: context.createInvokeHandler('editor.justifyFull')\n      });\n\n      var outdent = ui.button({\n        contents: ui.icon(options.icons.outdent),\n        tooltip: lang.paragraph.outdent + representShortcut('outdent'),\n        click: context.createInvokeHandler('editor.outdent')\n      });\n\n      var indent = ui.button({\n        contents: ui.icon(options.icons.indent),\n        tooltip: lang.paragraph.indent + representShortcut('indent'),\n        click: context.createInvokeHandler('editor.indent')\n      });\n\n      context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n      context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n      context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n      context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n      context.memo('button.outdent', func.invoke(outdent, 'render'));\n      context.memo('button.indent', func.invoke(indent, 'render'));\n\n      context.memo('button.paragraph', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: ui.icon(options.icons.alignLeft) + ' ' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.paragraph.paragraph,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdown([\n            ui.buttonGroup({\n              className: 'note-align',\n              children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n            }),\n            ui.buttonGroup({\n              className: 'note-list',\n              children: [outdent, indent]\n            })\n          ])\n        ]).render();\n      });\n\n      context.memo('button.height', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: ui.icon(options.icons.textHeight) + ' ' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.font.height,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdownCheck({\n            items: options.lineHeights,\n            checkClassName: options.icons.menuCheck,\n            className: 'dropdown-line-height',\n            click: context.createInvokeHandler('editor.lineHeight')\n          })\n        ]).render();\n      });\n\n      context.memo('button.table', function () {\n        return ui.buttonGroup([\n          ui.button({\n            className: 'dropdown-toggle',\n            contents: ui.icon(options.icons.table) + ' ' + ui.icon(options.icons.caret, 'span'),\n            tooltip: lang.table.table,\n            data: {\n              toggle: 'dropdown'\n            }\n          }),\n          ui.dropdown({\n            className: 'note-table',\n            items: [\n              '<div class=\"note-dimension-picker\">',\n              '  <div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"/>',\n              '  <div class=\"note-dimension-picker-highlighted\"/>',\n              '  <div class=\"note-dimension-picker-unhighlighted\"/>',\n              '</div>',\n              '<div class=\"note-dimension-display\">1 x 1</div>'\n            ].join('')\n          })\n        ], {\n          callback: function ($node) {\n            var $catcher = $node.find('.note-dimension-picker-mousecatcher');\n            $catcher.css({\n              width: options.insertTableMaxSize.col + 'em',\n              height: options.insertTableMaxSize.row + 'em'\n            }).mousedown(context.createInvokeHandler('editor.insertTable'))\n              .on('mousemove', self.tableMoveHandler);\n          }\n        }).render();\n      });\n\n      context.memo('button.link', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.link),\n          tooltip: lang.link.link + representShortcut('linkDialog.show'),\n          click: context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n\n      context.memo('button.picture', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.picture),\n          tooltip: lang.image.image,\n          click: context.createInvokeHandler('imageDialog.show')\n        }).render();\n      });\n\n      context.memo('button.video', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.video),\n          tooltip: lang.video.video,\n          click: context.createInvokeHandler('videoDialog.show')\n        }).render();\n      });\n\n      context.memo('button.hr', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.minus),\n          tooltip: lang.hr.insert + representShortcut('insertHorizontalRule'),\n          click: context.createInvokeHandler('editor.insertHorizontalRule')\n        }).render();\n      });\n\n      context.memo('button.fullscreen', function () {\n        return ui.button({\n          className: 'btn-fullscreen',\n          contents: ui.icon(options.icons.arrowsAlt),\n          tooltip: lang.options.fullscreen,\n          click: context.createInvokeHandler('fullscreen.toggle')\n        }).render();\n      });\n\n      context.memo('button.codeview', function () {\n        return ui.button({\n          className: 'btn-codeview',\n          contents: ui.icon(options.icons.code),\n          tooltip: lang.options.codeview,\n          click: context.createInvokeHandler('codeview.toggle')\n        }).render();\n      });\n\n      context.memo('button.redo', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.redo),\n          tooltip: lang.history.redo + representShortcut('redo'),\n          click: context.createInvokeHandler('editor.redo')\n        }).render();\n      });\n\n      context.memo('button.undo', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.undo),\n          tooltip: lang.history.undo + representShortcut('undo'),\n          click: context.createInvokeHandler('editor.undo')\n        }).render();\n      });\n\n      context.memo('button.help', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.question),\n          tooltip: lang.options.help,\n          click: context.createInvokeHandler('helpDialog.show')\n        }).render();\n      });\n    };\n\n    /**\n     * image : [\n     *   ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n     *   ['float', ['floatLeft', 'floatRight', 'floatNone' ]],\n     *   ['remove', ['removeMedia']]\n     * ],\n     */\n    this.addImagePopoverButtons = function () {\n      // Image Size Buttons\n      context.memo('button.imageSize100', function () {\n        return ui.button({\n          contents: '<span class=\"note-fontsize-10\">100%</span>',\n          tooltip: lang.image.resizeFull,\n          click: context.createInvokeHandler('editor.resize', '1')\n        }).render();\n      });\n      context.memo('button.imageSize50', function () {\n        return  ui.button({\n          contents: '<span class=\"note-fontsize-10\">50%</span>',\n          tooltip: lang.image.resizeHalf,\n          click: context.createInvokeHandler('editor.resize', '0.5')\n        }).render();\n      });\n      context.memo('button.imageSize25', function () {\n        return ui.button({\n          contents: '<span class=\"note-fontsize-10\">25%</span>',\n          tooltip: lang.image.resizeQuarter,\n          click: context.createInvokeHandler('editor.resize', '0.25')\n        }).render();\n      });\n\n      // Float Buttons\n      context.memo('button.floatLeft', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.alignLeft),\n          tooltip: lang.image.floatLeft,\n          click: context.createInvokeHandler('editor.floatMe', 'left')\n        }).render();\n      });\n\n      context.memo('button.floatRight', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.alignRight),\n          tooltip: lang.image.floatRight,\n          click: context.createInvokeHandler('editor.floatMe', 'right')\n        }).render();\n      });\n\n      context.memo('button.floatNone', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.alignJustify),\n          tooltip: lang.image.floatNone,\n          click: context.createInvokeHandler('editor.floatMe', 'none')\n        }).render();\n      });\n\n      // Remove Buttons\n      context.memo('button.removeMedia', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.trash),\n          tooltip: lang.image.remove,\n          click: context.createInvokeHandler('editor.removeMedia')\n        }).render();\n      });\n    };\n\n    this.addLinkPopoverButtons = function () {\n      context.memo('button.linkDialogShow', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.link),\n          tooltip: lang.link.edit,\n          click: context.createInvokeHandler('linkDialog.show')\n        }).render();\n      });\n\n      context.memo('button.unlink', function () {\n        return ui.button({\n          contents: ui.icon(options.icons.unlink),\n          tooltip: lang.link.unlink,\n          click: context.createInvokeHandler('editor.unlink')\n        }).render();\n      });\n    };\n\n    this.build = function ($container, groups) {\n      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n        var group = groups[groupIdx];\n        var groupName = group[0];\n        var buttons = group[1];\n\n        var $group = ui.buttonGroup({\n          className: 'note-' + groupName\n        }).render();\n\n        for (var idx = 0, len = buttons.length; idx < len; idx++) {\n          var button = context.memo('button.' + buttons[idx]);\n          if (button) {\n            $group.append(typeof button === 'function' ? button(context) : button);\n          }\n        }\n        $group.appendTo($container);\n      }\n    };\n\n    this.updateCurrentStyle = function () {\n      var styleInfo = context.invoke('editor.currentStyle');\n      this.updateBtnStates({\n        '.note-btn-bold': function () {\n          return styleInfo['font-bold'] === 'bold';\n        },\n        '.note-btn-italic': function () {\n          return styleInfo['font-italic'] === 'italic';\n        },\n        '.note-btn-underline': function () {\n          return styleInfo['font-underline'] === 'underline';\n        },\n        '.note-btn-subscript': function () {\n          return styleInfo['font-subscript'] === 'subscript';\n        },\n        '.note-btn-superscript': function () {\n          return styleInfo['font-superscript'] === 'superscript';\n        },\n        '.note-btn-strikethrough': function () {\n          return styleInfo['font-strikethrough'] === 'strikethrough';\n        }\n      });\n\n      if (styleInfo['font-family']) {\n        var fontNames = styleInfo['font-family'].split(',').map(function (name) {\n          return name.replace(/[\\'\\\"]/g, '')\n            .replace(/\\s+$/, '')\n            .replace(/^\\s+/, '');\n        });\n        var fontName = list.find(fontNames, self.isFontInstalled);\n\n        $toolbar.find('.dropdown-fontname li a').each(function () {\n          // always compare string to avoid creating another func.\n          var isChecked = ($(this).data('value') + '') === (fontName + '');\n          this.className = isChecked ? 'checked' : '';\n        });\n        $toolbar.find('.note-current-fontname').text(fontName);\n      }\n\n      if (styleInfo['font-size']) {\n        var fontSize = styleInfo['font-size'];\n        $toolbar.find('.dropdown-fontsize li a').each(function () {\n          // always compare with string to avoid creating another func.\n          var isChecked = ($(this).data('value') + '') === (fontSize + '');\n          this.className = isChecked ? 'checked' : '';\n        });\n        $toolbar.find('.note-current-fontsize').text(fontSize);\n      }\n\n      if (styleInfo['line-height']) {\n        var lineHeight = styleInfo['line-height'];\n        $toolbar.find('.dropdown-line-height li a').each(function () {\n          // always compare with string to avoid creating another func.\n          var isChecked = ($(this).data('value') + '') === (lineHeight + '');\n          this.className = isChecked ? 'checked' : '';\n        });\n      }\n    };\n\n    this.updateBtnStates = function (infos) {\n      $.each(infos, function (selector, pred) {\n        ui.toggleBtnActive($toolbar.find(selector), pred());\n      });\n    };\n\n    this.tableMoveHandler = function (event) {\n      var PX_PER_EM = 18;\n      var $picker = $(event.target.parentNode); // target is mousecatcher\n      var $dimensionDisplay = $picker.next();\n      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n      var $highlighted = $picker.find('.note-dimension-picker-highlighted');\n      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n      var posOffset;\n      // HTML5 with jQuery - e.offsetX is undefined in Firefox\n      if (event.offsetX === undefined) {\n        var posCatcher = $(event.target).offset();\n        posOffset = {\n          x: event.pageX - posCatcher.left,\n          y: event.pageY - posCatcher.top\n        };\n      } else {\n        posOffset = {\n          x: event.offsetX,\n          y: event.offsetY\n        };\n      }\n\n      var dim = {\n        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n        r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n      };\n\n      $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n      $catcher.data('value', dim.c + 'x' + dim.r);\n\n      if (3 < dim.c && dim.c < options.insertTableMaxSize.col) {\n        $unhighlighted.css({ width: dim.c + 1 + 'em'});\n      }\n\n      if (3 < dim.r && dim.r < options.insertTableMaxSize.row) {\n        $unhighlighted.css({ height: dim.r + 1 + 'em'});\n      }\n\n      $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n    };\n  };\n\n  var Toolbar = function (context) {\n    var ui = $.summernote.ui;\n\n    var $note = context.layoutInfo.note;\n    var $toolbar = context.layoutInfo.toolbar;\n    var options = context.options;\n\n    this.shouldInitialize = function () {\n      return !options.airMode;\n    };\n\n    this.initialize = function () {\n      options.toolbar = options.toolbar || [];\n\n      if (!options.toolbar.length) {\n        $toolbar.hide();\n      } else {\n        context.invoke('buttons.build', $toolbar, options.toolbar);\n      }\n\n      if (options.toolbarContainer) {\n        $toolbar.appendTo(options.toolbarContainer);\n      }\n\n      $note.on('summernote.keyup summernote.mouseup summernote.change', function () {\n        context.invoke('buttons.updateCurrentStyle');\n      });\n\n      context.invoke('buttons.updateCurrentStyle');\n    };\n\n    this.destroy = function () {\n      $toolbar.children().remove();\n    };\n\n    this.updateFullscreen = function (isFullscreen) {\n      ui.toggleBtnActive($toolbar.find('.btn-fullscreen'), isFullscreen);\n    };\n\n    this.updateCodeview = function (isCodeview) {\n      ui.toggleBtnActive($toolbar.find('.btn-codeview'), isCodeview);\n      if (isCodeview) {\n        this.deactivate();\n      } else {\n        this.activate();\n      }\n    };\n\n    this.activate = function (isIncludeCodeview) {\n      var $btn = $toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.btn-codeview');\n      }\n      ui.toggleBtn($btn, true);\n    };\n\n    this.deactivate = function (isIncludeCodeview) {\n      var $btn = $toolbar.find('button');\n      if (!isIncludeCodeview) {\n        $btn = $btn.not('.btn-codeview');\n      }\n      ui.toggleBtn($btn, false);\n    };\n  };\n\n  var LinkDialog = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var $editor = context.layoutInfo.editor;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    this.initialize = function () {\n      var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n      var body = '<div class=\"form-group\">' +\n                   '<label>' + lang.link.textToDisplay + '</label>' +\n                   '<input class=\"note-link-text form-control\" type=\"text\" />' +\n                 '</div>' +\n                 '<div class=\"form-group\">' +\n                   '<label>' + lang.link.url + '</label>' +\n                   '<input class=\"note-link-url form-control\" type=\"text\" value=\"http://\" />' +\n                 '</div>' +\n                 (!options.disableLinkTarget ?\n                   '<div class=\"checkbox\">' +\n                     '<label>' + '<input type=\"checkbox\" checked> ' + lang.link.openInNewWindow + '</label>' +\n                   '</div>' : ''\n                 );\n      var footer = '<button href=\"#\" class=\"btn btn-primary note-link-btn disabled\" disabled>' + lang.link.insert + '</button>';\n\n      this.$dialog = ui.dialog({\n        className: 'link-dialog',\n        title: lang.link.insert,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    };\n\n    this.destroy = function () {\n      ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    };\n\n    this.bindEnterKey = function ($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          $btn.trigger('click');\n        }\n      });\n    };\n\n    /**\n     * toggle update button\n     */\n    this.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) {\n      ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n    };\n\n    /**\n     * Show link dialog and set event handlers on dialog controls.\n     *\n     * @param {Object} linkInfo\n     * @return {Promise}\n     */\n    this.showLinkDialog = function (linkInfo) {\n      return $.Deferred(function (deferred) {\n        var $linkText = self.$dialog.find('.note-link-text'),\n        $linkUrl = self.$dialog.find('.note-link-url'),\n        $linkBtn = self.$dialog.find('.note-link-btn'),\n        $openInNewWindow = self.$dialog.find('input[type=checkbox]');\n\n        ui.onDialogShown(self.$dialog, function () {\n          context.triggerEvent('dialog.shown');\n\n          // if no url was given, copy text to url\n          if (!linkInfo.url) {\n            linkInfo.url = linkInfo.text;\n          }\n\n          $linkText.val(linkInfo.text);\n\n          var handleLinkTextUpdate = function () {\n            self.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n            // if linktext was modified by keyup,\n            // stop cloning text from linkUrl\n            linkInfo.text = $linkText.val();\n          };\n\n          $linkText.on('input', handleLinkTextUpdate).on('paste', function () {\n            setTimeout(handleLinkTextUpdate, 0);\n          });\n\n          var handleLinkUrlUpdate = function () {\n            self.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n            // display same link on `Text to display` input\n            // when create a new link\n            if (!linkInfo.text) {\n              $linkText.val($linkUrl.val());\n            }\n          };\n\n          $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () {\n            setTimeout(handleLinkUrlUpdate, 0);\n          }).val(linkInfo.url).trigger('focus');\n\n          self.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n          self.bindEnterKey($linkUrl, $linkBtn);\n          self.bindEnterKey($linkText, $linkBtn);\n\n          $openInNewWindow.prop('checked', linkInfo.isNewWindow);\n\n          $linkBtn.one('click', function (event) {\n            event.preventDefault();\n\n            deferred.resolve({\n              range: linkInfo.range,\n              url: $linkUrl.val(),\n              text: $linkText.val(),\n              isNewWindow: $openInNewWindow.is(':checked')\n            });\n            self.$dialog.modal('hide');\n          });\n        });\n\n        ui.onDialogHidden(self.$dialog, function () {\n          // detach events\n          $linkText.off('input paste keypress');\n          $linkUrl.off('input paste keypress');\n          $linkBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      }).promise();\n    };\n\n    /**\n     * @param {Object} layoutInfo\n     */\n    this.show = function () {\n      var linkInfo = context.invoke('editor.getLinkInfo');\n\n      context.invoke('editor.saveRange');\n      this.showLinkDialog(linkInfo).then(function (linkInfo) {\n        context.invoke('editor.restoreRange');\n        context.invoke('editor.createLink', linkInfo);\n      }).fail(function () {\n        context.invoke('editor.restoreRange');\n      });\n    };\n    context.memo('help.linkDialog.show', options.langInfo.help['linkDialog.show']);\n  };\n\n  var LinkPopover = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var options = context.options;\n\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () {\n        self.update();\n      },\n      'summernote.dialog.shown': function () {\n        self.hide();\n      }\n    };\n\n    this.shouldInitialize = function () {\n      return !list.isEmpty(options.popover.link);\n    };\n\n    this.initialize = function () {\n      this.$popover = ui.popover({\n        className: 'note-link-popover',\n        callback: function ($node) {\n          var $content = $node.find('.popover-content');\n          $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n        }\n      }).render().appendTo('body');\n      var $content = this.$popover.find('.popover-content');\n\n      context.invoke('buttons.build', $content, options.popover.link);\n    };\n\n    this.destroy = function () {\n      this.$popover.remove();\n    };\n\n    this.update = function () {\n      // Prevent focusing on editable when invoke('code') is executed\n      if (!context.invoke('editor.hasFocus')) {\n        this.hide();\n        return;\n      }\n\n      var rng = context.invoke('editor.createRange');\n      if (rng.isCollapsed() && rng.isOnAnchor()) {\n        var anchor = dom.ancestor(rng.sc, dom.isAnchor);\n        var href = $(anchor).attr('href');\n        this.$popover.find('a').attr('href', href).html(href);\n\n        var pos = dom.posFromPlaceholder(anchor);\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    };\n\n    this.hide = function () {\n      this.$popover.hide();\n    };\n  };\n\n  var ImageDialog = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var $editor = context.layoutInfo.editor;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    this.initialize = function () {\n      var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n      var imageLimitation = '';\n      if (options.maximumImageFileSize) {\n        var unit = Math.floor(Math.log(options.maximumImageFileSize) / Math.log(1024));\n        var readableSize = (options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n                           ' ' + ' KMGTP'[unit] + 'B';\n        imageLimitation = '<small>' + lang.image.maximumFileSize + ' : ' + readableSize + '</small>';\n      }\n\n      var body = '<div class=\"form-group note-group-select-from-files\">' +\n                   '<label>' + lang.image.selectFromFiles + '</label>' +\n                   '<input class=\"note-image-input form-control\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\" />' +\n                   imageLimitation +\n                 '</div>' +\n                 '<div class=\"form-group note-group-image-url\" style=\"overflow:auto;\">' +\n                   '<label>' + lang.image.url + '</label>' +\n                   '<input class=\"note-image-url form-control col-md-12\" type=\"text\" />' +\n                 '</div>';\n      var footer = '<button href=\"#\" class=\"btn btn-primary note-image-btn disabled\" disabled>' + lang.image.insert + '</button>';\n\n      this.$dialog = ui.dialog({\n        title: lang.image.insert,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    };\n\n    this.destroy = function () {\n      ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    };\n\n    this.bindEnterKey = function ($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          $btn.trigger('click');\n        }\n      });\n    };\n\n    this.show = function () {\n      context.invoke('editor.saveRange');\n      this.showImageDialog().then(function (data) {\n        // [workaround] hide dialog before restore range for IE range focus\n        ui.hideDialog(self.$dialog);\n        context.invoke('editor.restoreRange');\n\n        if (typeof data === 'string') { // image url\n          context.invoke('editor.insertImage', data);\n        } else { // array of files\n          context.invoke('editor.insertImagesOrCallback', data);\n        }\n      }).fail(function () {\n        context.invoke('editor.restoreRange');\n      });\n    };\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n    this.showImageDialog = function () {\n      return $.Deferred(function (deferred) {\n        var $imageInput = self.$dialog.find('.note-image-input'),\n            $imageUrl = self.$dialog.find('.note-image-url'),\n            $imageBtn = self.$dialog.find('.note-image-btn');\n\n        ui.onDialogShown(self.$dialog, function () {\n          context.triggerEvent('dialog.shown');\n\n          // Cloning imageInput to clear element.\n          $imageInput.replaceWith($imageInput.clone()\n            .on('change', function () {\n              deferred.resolve(this.files || this.value);\n            })\n            .val('')\n          );\n\n          $imageBtn.click(function (event) {\n            event.preventDefault();\n\n            deferred.resolve($imageUrl.val());\n          });\n\n          $imageUrl.on('keyup paste', function () {\n            var url = $imageUrl.val();\n            ui.toggleBtn($imageBtn, url);\n          }).val('').trigger('focus');\n          self.bindEnterKey($imageUrl, $imageBtn);\n        });\n\n        ui.onDialogHidden(self.$dialog, function () {\n          $imageInput.off('change');\n          $imageUrl.off('keyup paste keypress');\n          $imageBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      });\n    };\n  };\n\n  var ImagePopover = function (context) {\n    var ui = $.summernote.ui;\n\n    var options = context.options;\n\n    this.shouldInitialize = function () {\n      return !list.isEmpty(options.popover.image);\n    };\n\n    this.initialize = function () {\n      this.$popover = ui.popover({\n        className: 'note-image-popover'\n      }).render().appendTo('body');\n      var $content = this.$popover.find('.popover-content');\n\n      context.invoke('buttons.build', $content, options.popover.image);\n    };\n\n    this.destroy = function () {\n      this.$popover.remove();\n    };\n\n    this.update = function (target) {\n      if (dom.isImg(target)) {\n        var pos = dom.posFromPlaceholder(target);\n        this.$popover.css({\n          display: 'block',\n          left: pos.left,\n          top: pos.top\n        });\n      } else {\n        this.hide();\n      }\n    };\n\n    this.hide = function () {\n      this.$popover.hide();\n    };\n  };\n\n  var VideoDialog = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var $editor = context.layoutInfo.editor;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    this.initialize = function () {\n      var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n      var body = '<div class=\"form-group row-fluid\">' +\n          '<label>' + lang.video.url + ' <small class=\"text-muted\">' + lang.video.providers + '</small></label>' +\n          '<input class=\"note-video-url form-control span12\" type=\"text\" />' +\n          '</div>';\n      var footer = '<button href=\"#\" class=\"btn btn-primary note-video-btn disabled\" disabled>' + lang.video.insert + '</button>';\n\n      this.$dialog = ui.dialog({\n        title: lang.video.insert,\n        fade: options.dialogsFade,\n        body: body,\n        footer: footer\n      }).render().appendTo($container);\n    };\n\n    this.destroy = function () {\n      ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    };\n\n    this.bindEnterKey = function ($input, $btn) {\n      $input.on('keypress', function (event) {\n        if (event.keyCode === key.code.ENTER) {\n          $btn.trigger('click');\n        }\n      });\n    };\n\n    this.createVideoNode = function (url) {\n      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n      var ytRegExp = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n      var ytMatch = url.match(ytRegExp);\n\n      var igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n      var igMatch = url.match(igRegExp);\n\n      var vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n      var vMatch = url.match(vRegExp);\n\n      var vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*([0-9]{6,11})[?]?.*/;\n      var vimMatch = url.match(vimRegExp);\n\n      var dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n      var dmMatch = url.match(dmRegExp);\n\n      var youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n      var youkuMatch = url.match(youkuRegExp);\n\n      var mp4RegExp = /^.+.(mp4|m4v)$/;\n      var mp4Match = url.match(mp4RegExp);\n\n      var oggRegExp = /^.+.(ogg|ogv)$/;\n      var oggMatch = url.match(oggRegExp);\n\n      var webmRegExp = /^.+.(webm)$/;\n      var webmMatch = url.match(webmRegExp);\n\n      var $video;\n      if (ytMatch && ytMatch[1].length === 11) {\n        var youtubeId = ytMatch[1];\n        $video = $('<iframe>')\n            .attr('frameborder', 0)\n            .attr('src', '//www.youtube.com/embed/' + youtubeId)\n            .attr('width', '640').attr('height', '360');\n      } else if (igMatch && igMatch[0].length) {\n        $video = $('<iframe>')\n            .attr('frameborder', 0)\n            .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/')\n            .attr('width', '612').attr('height', '710')\n            .attr('scrolling', 'no')\n            .attr('allowtransparency', 'true');\n      } else if (vMatch && vMatch[0].length) {\n        $video = $('<iframe>')\n            .attr('frameborder', 0)\n            .attr('src', vMatch[0] + '/embed/simple')\n            .attr('width', '600').attr('height', '600')\n            .attr('class', 'vine-embed');\n      } else if (vimMatch && vimMatch[3].length) {\n        $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n            .attr('frameborder', 0)\n            .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n            .attr('width', '640').attr('height', '360');\n      } else if (dmMatch && dmMatch[2].length) {\n        $video = $('<iframe>')\n            .attr('frameborder', 0)\n            .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n            .attr('width', '640').attr('height', '360');\n      } else if (youkuMatch && youkuMatch[1].length) {\n        $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n            .attr('frameborder', 0)\n            .attr('height', '498')\n            .attr('width', '510')\n            .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n      } else if (mp4Match || oggMatch || webmMatch) {\n        $video = $('<video controls>')\n            .attr('src', url)\n            .attr('width', '640').attr('height', '360');\n      } else {\n        // this is not a known video link. Now what, Cat? Now what?\n        return false;\n      }\n\n      $video.addClass('note-video-clip');\n\n      return $video[0];\n    };\n\n    this.show = function () {\n      var text = context.invoke('editor.getSelectedText');\n      context.invoke('editor.saveRange');\n      this.showVideoDialog(text).then(function (url) {\n        // [workaround] hide dialog before restore range for IE range focus\n        ui.hideDialog(self.$dialog);\n        context.invoke('editor.restoreRange');\n\n        // build node\n        var $node = self.createVideoNode(url);\n\n        if ($node) {\n          // insert video node\n          context.invoke('editor.insertNode', $node);\n        }\n      }).fail(function () {\n        context.invoke('editor.restoreRange');\n      });\n    };\n\n    /**\n     * show image dialog\n     *\n     * @param {jQuery} $dialog\n     * @return {Promise}\n     */\n    this.showVideoDialog = function (text) {\n      return $.Deferred(function (deferred) {\n        var $videoUrl = self.$dialog.find('.note-video-url'),\n            $videoBtn = self.$dialog.find('.note-video-btn');\n\n        ui.onDialogShown(self.$dialog, function () {\n          context.triggerEvent('dialog.shown');\n\n          $videoUrl.val(text).on('input', function () {\n            ui.toggleBtn($videoBtn, $videoUrl.val());\n          }).trigger('focus');\n\n          $videoBtn.click(function (event) {\n            event.preventDefault();\n\n            deferred.resolve($videoUrl.val());\n          });\n\n          self.bindEnterKey($videoUrl, $videoBtn);\n        });\n\n        ui.onDialogHidden(self.$dialog, function () {\n          $videoUrl.off('input');\n          $videoBtn.off('click');\n\n          if (deferred.state() === 'pending') {\n            deferred.reject();\n          }\n        });\n\n        ui.showDialog(self.$dialog);\n      });\n    };\n  };\n\n  var HelpDialog = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var $editor = context.layoutInfo.editor;\n    var options = context.options;\n    var lang = options.langInfo;\n\n    this.createShortCutList = function () {\n      var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc'];\n      return Object.keys(keyMap).map(function (key) {\n        var command = keyMap[key];\n        var $row = $('<div><div class=\"help-list-item\"/></div>');\n        $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n          'width': 180,\n          'margin-right': 10\n        })).append($('<span/>').html(context.memo('help.' + command) || command));\n        return $row.html();\n      }).join('');\n    };\n\n    this.initialize = function () {\n      var $container = options.dialogsInBody ? $(document.body) : $editor;\n\n      var body = [\n        '<p class=\"text-center\">',\n        '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote 0.8.2</a> · ',\n        '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ',\n        '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>',\n        '</p>'\n      ].join('');\n\n      this.$dialog = ui.dialog({\n        title: lang.options.help,\n        fade: options.dialogsFade,\n        body: this.createShortCutList(),\n        footer: body,\n        callback: function ($node) {\n          $node.find('.modal-body').css({\n            'max-height': 300,\n            'overflow': 'scroll'\n          });\n        }\n      }).render().appendTo($container);\n    };\n\n    this.destroy = function () {\n      ui.hideDialog(this.$dialog);\n      this.$dialog.remove();\n    };\n\n    /**\n     * show help dialog\n     *\n     * @return {Promise}\n     */\n    this.showHelpDialog = function () {\n      return $.Deferred(function (deferred) {\n        ui.onDialogShown(self.$dialog, function () {\n          context.triggerEvent('dialog.shown');\n          deferred.resolve();\n        });\n        ui.showDialog(self.$dialog);\n      }).promise();\n    };\n\n    this.show = function () {\n      context.invoke('editor.saveRange');\n      this.showHelpDialog().then(function () {\n        context.invoke('editor.restoreRange');\n      });\n    };\n  };\n\n  var AirPopover = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var options = context.options;\n\n    var AIR_MODE_POPOVER_X_OFFSET = 20;\n\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.scroll': function () {\n        self.update();\n      },\n      'summernote.change summernote.dialog.shown': function () {\n        self.hide();\n      },\n      'summernote.focusout': function (we, e) {\n        // [workaround] Firefox doesn't support relatedTarget on focusout\n        //  - Ignore hide action on focus out in FF.\n        if (agent.isFF) {\n          return;\n        }\n\n        if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(self.$popover[0]))) {\n          self.hide();\n        }\n      }\n    };\n\n    this.shouldInitialize = function () {\n      return options.airMode && !list.isEmpty(options.popover.air);\n    };\n\n    this.initialize = function () {\n      this.$popover = ui.popover({\n        className: 'note-air-popover'\n      }).render().appendTo('body');\n      var $content = this.$popover.find('.popover-content');\n\n      context.invoke('buttons.build', $content, options.popover.air);\n    };\n\n    this.destroy = function () {\n      this.$popover.remove();\n    };\n\n    this.update = function () {\n      var styleInfo = context.invoke('editor.currentStyle');\n      if (styleInfo.range && !styleInfo.range.isCollapsed()) {\n        var rect = list.last(styleInfo.range.getClientRects());\n        if (rect) {\n          var bnd = func.rect2bnd(rect);\n          this.$popover.css({\n            display: 'block',\n            left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET,\n            top: bnd.top + bnd.height\n          });\n        }\n      } else {\n        this.hide();\n      }\n    };\n\n    this.hide = function () {\n      this.$popover.hide();\n    };\n  };\n\n  var HintPopover = function (context) {\n    var self = this;\n    var ui = $.summernote.ui;\n\n    var POPOVER_DIST = 5;\n    var hint = context.options.hint || [];\n    var direction = context.options.hintDirection || 'bottom';\n    var hints = $.isArray(hint) ? hint : [hint];\n\n    this.events = {\n      'summernote.keyup': function (we, e) {\n        if (!e.isDefaultPrevented()) {\n          self.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': function (we, e) {\n        self.handleKeydown(e);\n      },\n      'summernote.dialog.shown': function () {\n        self.hide();\n      }\n    };\n\n    this.shouldInitialize = function () {\n      return hints.length > 0;\n    };\n\n    this.initialize = function () {\n      this.lastWordRange = null;\n      this.$popover = ui.popover({\n        className: 'note-hint-popover',\n        hideArrow: true,\n        direction: ''\n      }).render().appendTo('body');\n\n      this.$popover.hide();\n\n      this.$content = this.$popover.find('.popover-content');\n\n      this.$content.on('click', '.note-hint-item', function () {\n        self.$content.find('.active').removeClass('active');\n        $(this).addClass('active');\n        self.replace();\n      });\n    };\n\n    this.destroy = function () {\n      this.$popover.remove();\n    };\n\n    this.selectItem = function ($item) {\n      this.$content.find('.active').removeClass('active');\n      $item.addClass('active');\n\n      this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n    };\n\n    this.moveDown = function () {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $next = $current.next();\n\n      if ($next.length) {\n        this.selectItem($next);\n      } else {\n        var $nextGroup = $current.parent().next();\n\n        if (!$nextGroup.length) {\n          $nextGroup = this.$content.find('.note-hint-group').first();\n        }\n\n        this.selectItem($nextGroup.find('.note-hint-item').first());\n      }\n    };\n\n    this.moveUp = function () {\n      var $current = this.$content.find('.note-hint-item.active');\n      var $prev = $current.prev();\n\n      if ($prev.length) {\n        this.selectItem($prev);\n      } else {\n        var $prevGroup = $current.parent().prev();\n\n        if (!$prevGroup.length) {\n          $prevGroup = this.$content.find('.note-hint-group').last();\n        }\n\n        this.selectItem($prevGroup.find('.note-hint-item').last());\n      }\n    };\n\n    this.replace = function () {\n      var $item = this.$content.find('.note-hint-item.active');\n\n      if ($item.length) {\n        var node = this.nodeFromItem($item);\n        this.lastWordRange.insertNode(node);\n        range.createFromNode(node).collapse().select();\n\n        this.lastWordRange = null;\n        this.hide();\n        context.invoke('editor.focus');\n      }\n\n    };\n\n    this.nodeFromItem = function ($item) {\n      var hint = hints[$item.data('index')];\n      var item = $item.data('item');\n      var node = hint.content ? hint.content(item) : item;\n      if (typeof node === 'string') {\n        node = dom.createText(node);\n      }\n      return node;\n    };\n\n    this.createItemTemplates = function (hintIdx, items) {\n      var hint = hints[hintIdx];\n      return items.map(function (item, idx) {\n        var $item = $('<div class=\"note-hint-item\"/>');\n        $item.append(hint.template ? hint.template(item) : item + '');\n        $item.data({\n          'index': hintIdx,\n          'item': item\n        });\n\n        if (hintIdx === 0 && idx === 0) {\n          $item.addClass('active');\n        }\n        return $item;\n      });\n    };\n\n    this.handleKeydown = function (e) {\n      if (!this.$popover.is(':visible')) {\n        return;\n      }\n\n      if (e.keyCode === key.code.ENTER) {\n        e.preventDefault();\n        this.replace();\n      } else if (e.keyCode === key.code.UP) {\n        e.preventDefault();\n        this.moveUp();\n      } else if (e.keyCode === key.code.DOWN) {\n        e.preventDefault();\n        this.moveDown();\n      }\n    };\n\n    this.searchKeyword = function (index, keyword, callback) {\n      var hint = hints[index];\n      if (hint && hint.match.test(keyword) && hint.search) {\n        var matches = hint.match.exec(keyword);\n        hint.search(matches[1], callback);\n      } else {\n        callback();\n      }\n    };\n\n    this.createGroup = function (idx, keyword) {\n      var $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"/>');\n      this.searchKeyword(idx, keyword, function (items) {\n        items = items || [];\n        if (items.length) {\n          $group.html(self.createItemTemplates(idx, items));\n          self.show();\n        }\n      });\n\n      return $group;\n    };\n\n    this.handleKeyup = function (e) {\n      if (list.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {\n        if (e.keyCode === key.code.ENTER) {\n          if (this.$popover.is(':visible')) {\n            return;\n          }\n        }\n      } else {\n        var wordRange = context.invoke('editor.createRange').getWordRange();\n        var keyword = wordRange.toString();\n        if (hints.length && keyword) {\n          this.$content.empty();\n\n          var bnd = func.rect2bnd(list.last(wordRange.getClientRects()));\n          if (bnd) {\n\n            this.$popover.hide();\n\n            this.lastWordRange = wordRange;\n\n            hints.forEach(function (hint, idx) {\n              if (hint.match.test(keyword)) {\n                self.createGroup(idx, keyword).appendTo(self.$content);\n              }\n            });\n\n            // set position for popover after group is created\n            if (direction === 'top') {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n              });\n            } else {\n              this.$popover.css({\n                left: bnd.left,\n                top: bnd.top + bnd.height + POPOVER_DIST\n              });\n            }\n\n          }\n        } else {\n          this.hide();\n        }\n      }\n    };\n\n    this.show = function () {\n      this.$popover.show();\n    };\n\n    this.hide = function () {\n      this.$popover.hide();\n    };\n  };\n\n\n  $.summernote = $.extend($.summernote, {\n    version: '0.8.2',\n    ui: ui,\n    dom: dom,\n\n    plugins: {},\n\n    options: {\n      modules: {\n        'editor': Editor,\n        'clipboard': Clipboard,\n        'dropzone': Dropzone,\n        'codeview': Codeview,\n        'statusbar': Statusbar,\n        'fullscreen': Fullscreen,\n        'handle': Handle,\n        // FIXME: HintPopover must be front of autolink\n        //  - Script error about range when Enter key is pressed on hint popover\n        'hintPopover': HintPopover,\n        'autoLink': AutoLink,\n        'autoSync': AutoSync,\n        'placeholder': Placeholder,\n        'buttons': Buttons,\n        'toolbar': Toolbar,\n        'linkDialog': LinkDialog,\n        'linkPopover': LinkPopover,\n        'imageDialog': ImageDialog,\n        'imagePopover': ImagePopover,\n        'videoDialog': VideoDialog,\n        'helpDialog': HelpDialog,\n        'airPopover': AirPopover\n      },\n\n      buttons: {},\n      \n      lang: 'en-US',\n\n      // toolbar\n      toolbar: [\n        ['style', ['style']],\n        ['font', ['bold', 'underline', 'clear']],\n        ['fontname', ['fontname']],\n        ['color', ['color']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['table', ['table']],\n        ['insert', ['link', 'picture', 'video']],\n        ['view', ['fullscreen', 'codeview', 'help']]\n      ],\n\n      // popover\n      popover: {\n        image: [\n          ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n          ['float', ['floatLeft', 'floatRight', 'floatNone']],\n          ['remove', ['removeMedia']]\n        ],\n        link: [\n          ['link', ['linkDialogShow', 'unlink']]\n        ],\n        air: [\n          ['color', ['color']],\n          ['font', ['bold', 'underline', 'clear']],\n          ['para', ['ul', 'paragraph']],\n          ['table', ['table']],\n          ['insert', ['link', 'picture']]\n        ]\n      },\n\n      // air mode: inline editor\n      airMode: false,\n\n      width: null,\n      height: null,\n\n      focus: false,\n      tabSize: 4,\n      styleWithSpan: true,\n      shortcuts: true,\n      textareaAutoSync: true,\n      direction: null,\n\n      styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n      fontNames: [\n        'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n        'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n        'Tahoma', 'Times New Roman', 'Verdana'\n      ],\n\n      fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n      // pallete colors(n x n)\n      colors: [\n        ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n        ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n        ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n        ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n        ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n        ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n        ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n        ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']\n      ],\n\n      lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n      tableClassName: 'table table-bordered',\n\n      insertTableMaxSize: {\n        col: 10,\n        row: 10\n      },\n\n      dialogsInBody: false,\n      dialogsFade: false,\n\n      maximumImageFileSize: null,\n\n      callbacks: {\n        onInit: null,\n        onFocus: null,\n        onBlur: null,\n        onEnter: null,\n        onKeyup: null,\n        onKeydown: null,\n        onImageUpload: null,\n        onImageUploadError: null\n      },\n\n      codemirror: {\n        mode: 'text/html',\n        htmlMode: true,\n        lineNumbers: true\n      },\n\n      keyMap: {\n        pc: {\n          'ENTER': 'insertParagraph',\n          'CTRL+Z': 'undo',\n          'CTRL+Y': 'redo',\n          'TAB': 'tab',\n          'SHIFT+TAB': 'untab',\n          'CTRL+B': 'bold',\n          'CTRL+I': 'italic',\n          'CTRL+U': 'underline',\n          'CTRL+SHIFT+S': 'strikethrough',\n          'CTRL+BACKSLASH': 'removeFormat',\n          'CTRL+SHIFT+L': 'justifyLeft',\n          'CTRL+SHIFT+E': 'justifyCenter',\n          'CTRL+SHIFT+R': 'justifyRight',\n          'CTRL+SHIFT+J': 'justifyFull',\n          'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n          'CTRL+SHIFT+NUM8': 'insertOrderedList',\n          'CTRL+LEFTBRACKET': 'outdent',\n          'CTRL+RIGHTBRACKET': 'indent',\n          'CTRL+NUM0': 'formatPara',\n          'CTRL+NUM1': 'formatH1',\n          'CTRL+NUM2': 'formatH2',\n          'CTRL+NUM3': 'formatH3',\n          'CTRL+NUM4': 'formatH4',\n          'CTRL+NUM5': 'formatH5',\n          'CTRL+NUM6': 'formatH6',\n          'CTRL+ENTER': 'insertHorizontalRule',\n          'CTRL+K': 'linkDialog.show'\n        },\n\n        mac: {\n          'ENTER': 'insertParagraph',\n          'CMD+Z': 'undo',\n          'CMD+SHIFT+Z': 'redo',\n          'TAB': 'tab',\n          'SHIFT+TAB': 'untab',\n          'CMD+B': 'bold',\n          'CMD+I': 'italic',\n          'CMD+U': 'underline',\n          'CMD+SHIFT+S': 'strikethrough',\n          'CMD+BACKSLASH': 'removeFormat',\n          'CMD+SHIFT+L': 'justifyLeft',\n          'CMD+SHIFT+E': 'justifyCenter',\n          'CMD+SHIFT+R': 'justifyRight',\n          'CMD+SHIFT+J': 'justifyFull',\n          'CMD+SHIFT+NUM7': 'insertUnorderedList',\n          'CMD+SHIFT+NUM8': 'insertOrderedList',\n          'CMD+LEFTBRACKET': 'outdent',\n          'CMD+RIGHTBRACKET': 'indent',\n          'CMD+NUM0': 'formatPara',\n          'CMD+NUM1': 'formatH1',\n          'CMD+NUM2': 'formatH2',\n          'CMD+NUM3': 'formatH3',\n          'CMD+NUM4': 'formatH4',\n          'CMD+NUM5': 'formatH5',\n          'CMD+NUM6': 'formatH6',\n          'CMD+ENTER': 'insertHorizontalRule',\n          'CMD+K': 'linkDialog.show'\n        }\n      },\n      icons: {\n        'align': 'note-icon-align',\n        'alignCenter': 'note-icon-align-center',\n        'alignJustify': 'note-icon-align-justify',\n        'alignLeft': 'note-icon-align-left',\n        'alignRight': 'note-icon-align-right',\n        'indent': 'note-icon-align-indent',\n        'outdent': 'note-icon-align-outdent',\n        'arrowsAlt': 'note-icon-arrows-alt',\n        'bold': 'note-icon-bold',\n        'caret': 'note-icon-caret',\n        'circle': 'note-icon-circle',\n        'close': 'note-icon-close',\n        'code': 'note-icon-code',\n        'eraser': 'note-icon-eraser',\n        'font': 'note-icon-font',\n        'frame': 'note-icon-frame',\n        'italic': 'note-icon-italic',\n        'link': 'note-icon-link',\n        'unlink': 'note-icon-chain-broken',\n        'magic': 'note-icon-magic',\n        'menuCheck': 'note-icon-check',\n        'minus': 'note-icon-minus',\n        'orderedlist': 'note-icon-orderedlist',\n        'pencil': 'note-icon-pencil',\n        'picture': 'note-icon-picture',\n        'question': 'note-icon-question',\n        'redo': 'note-icon-redo',\n        'square': 'note-icon-square',\n        'strikethrough': 'note-icon-strikethrough',\n        'subscript': 'note-icon-subscript',\n        'superscript': 'note-icon-superscript',\n        'table': 'note-icon-table',\n        'textHeight': 'note-icon-text-height',\n        'trash': 'note-icon-trash',\n        'underline': 'note-icon-underline',\n        'undo': 'note-icon-undo',\n        'unorderedlist': 'note-icon-unorderedlist',\n        'video': 'note-icon-video'\n      }\n    }\n  });\n\n}));\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/sweet-alert2/sweetalert2.common.js",
    "content": "/*!\n * sweetalert2 v6.1.1\n * Released under the MIT License.\n */\n'use strict';\n\nvar swalPrefix = 'swal2-';\n\nvar prefix = function prefix(items) {\n  var result = {};\n  for (var i in items) {\n    result[items[i]] = swalPrefix + items[i];\n  }\n  return result;\n};\n\nvar swalClasses = prefix(['container', 'in', 'iosfix', 'modal', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'spacer', 'confirm', 'cancel', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', 'loading', 'styled']);\n\nvar iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);\n\nvar defaultParams = {\n  title: '',\n  text: '',\n  html: '',\n  type: null,\n  customClass: '',\n  animation: true,\n  allowOutsideClick: true,\n  allowEscapeKey: true,\n  showConfirmButton: true,\n  showCancelButton: false,\n  preConfirm: null,\n  confirmButtonText: 'OK',\n  confirmButtonColor: '#3085d6',\n  confirmButtonClass: null,\n  cancelButtonText: 'Cancel',\n  cancelButtonColor: '#aaa',\n  cancelButtonClass: null,\n  buttonsStyling: true,\n  reverseButtons: false,\n  focusCancel: false,\n  showCloseButton: false,\n  showLoaderOnConfirm: false,\n  imageUrl: null,\n  imageWidth: null,\n  imageHeight: null,\n  imageClass: null,\n  timer: null,\n  width: 500,\n  padding: 20,\n  background: '#fff',\n  input: null,\n  inputPlaceholder: '',\n  inputValue: '',\n  inputOptions: {},\n  inputAutoTrim: true,\n  inputClass: null,\n  inputAttributes: {},\n  inputValidator: null,\n  progressSteps: [],\n  currentProgressStep: null,\n  progressStepsDistance: '40px',\n  onOpen: null,\n  onClose: null\n};\n\nvar sweetHTML = ('\\n  <div class=\"' + swalClasses.modal + '\" style=\"display: none\" tabIndex=\"-1\">\\n    <ul class=\"' + swalClasses.progresssteps + '\"></ul>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.error + '\">\\n      <span class=\"x-mark\"><span class=\"line left\"></span><span class=\"line right\"></span></span>\\n    </div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.question + '\">?</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.warning + '\">!</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.info + '\">i</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.success + '\">\\n      <span class=\"line tip\"></span> <span class=\"line long\"></span>\\n      <div class=\"placeholder\"></div> <div class=\"fix\"></div>\\n    </div>\\n    <img class=\"' + swalClasses.image + '\">\\n    <h2 class=\"' + swalClasses.title + '\"></h2>\\n    <div class=\"' + swalClasses.content + '\"></div>\\n    <input class=\"' + swalClasses.input + '\">\\n    <input type=\"file\" class=\"' + swalClasses.file + '\">\\n    <div class=\"' + swalClasses.range + '\">\\n      <output></output>\\n      <input type=\"range\">\\n    </div>\\n    <select class=\"' + swalClasses.select + '\"></select>\\n    <div class=\"' + swalClasses.radio + '\"></div>\\n    <label for=\"' + swalClasses.checkbox + '\" class=\"' + swalClasses.checkbox + '\">\\n      <input type=\"checkbox\">\\n    </label>\\n    <textarea class=\"' + swalClasses.textarea + '\"></textarea>\\n    <div class=\"' + swalClasses.validationerror + '\"></div>\\n    <hr class=\"' + swalClasses.spacer + '\">\\n    <button type=\"button\" class=\"' + swalClasses.confirm + '\">OK</button>\\n    <button type=\"button\" class=\"' + swalClasses.cancel + '\">Cancel</button>\\n    <span class=\"' + swalClasses.close + '\">&times;</span>\\n  </div>\\n').replace(/(^|\\n)\\s*/g, '');\n\nvar sweetContainer = void 0;\n\nvar existingSweetContainers = document.getElementsByClassName(swalClasses.container);\n\nif (existingSweetContainers.length) {\n  sweetContainer = existingSweetContainers[0];\n} else {\n  sweetContainer = document.createElement('div');\n  sweetContainer.className = swalClasses.container;\n  sweetContainer.innerHTML = sweetHTML;\n}\n\n/*\n * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)\n */\nvar colorLuminance = function colorLuminance(hex, lum) {\n  // Validate hex string\n  hex = String(hex).replace(/[^0-9a-f]/gi, '');\n  if (hex.length < 6) {\n    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n  }\n  lum = lum || 0;\n\n  // Convert to decimal and change luminosity\n  var rgb = '#';\n  for (var i = 0; i < 3; i++) {\n    var c = parseInt(hex.substr(i * 2, 2), 16);\n    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);\n    rgb += ('00' + c).substr(c.length);\n  }\n\n  return rgb;\n};\n\n/* global MouseEvent */\n\n// Remember state in cases where opening and handling a modal will fiddle with it.\nvar states = {\n  previousWindowKeyDown: null,\n  previousActiveElement: null,\n  previousBodyPadding: null\n};\n\n/*\n * Add modal + overlay to DOM\n */\nvar init = function init() {\n  if (typeof document === 'undefined') {\n    console.error('SweetAlert2 requires document to initialize');\n    return;\n  } else if (document.getElementsByClassName(swalClasses.container).length) {\n    return;\n  }\n\n  document.body.appendChild(sweetContainer);\n\n  var modal = getModal();\n  var input = getChildByClass(modal, swalClasses.input);\n  var file = getChildByClass(modal, swalClasses.file);\n  var range = modal.querySelector('.' + swalClasses.range + ' input');\n  var rangeOutput = modal.querySelector('.' + swalClasses.range + ' output');\n  var select = getChildByClass(modal, swalClasses.select);\n  var checkbox = modal.querySelector('.' + swalClasses.checkbox + ' input');\n  var textarea = getChildByClass(modal, swalClasses.textarea);\n\n  input.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  input.onkeydown = function (event) {\n    setTimeout(function () {\n      if (event.keyCode === 13) {\n        event.stopPropagation();\n        sweetAlert.clickConfirm();\n      }\n    }, 0);\n  };\n\n  file.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  range.oninput = function () {\n    sweetAlert.resetValidationError();\n    rangeOutput.value = range.value;\n  };\n\n  range.onchange = function () {\n    sweetAlert.resetValidationError();\n    range.previousSibling.value = range.value;\n  };\n\n  select.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  checkbox.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  textarea.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  return modal;\n};\n\n/*\n * Manipulate DOM\n */\nvar elementByClass = function elementByClass(className) {\n  return sweetContainer.querySelector('.' + className);\n};\n\nvar getModal = function getModal() {\n  return document.body.querySelector('.' + swalClasses.modal) || init();\n};\n\nvar getIcons = function getIcons() {\n  var modal = getModal();\n  return modal.querySelectorAll('.' + swalClasses.icon);\n};\n\nvar getTitle = function getTitle() {\n  return elementByClass(swalClasses.title);\n};\n\nvar getContent = function getContent() {\n  return elementByClass(swalClasses.content);\n};\n\nvar getImage = function getImage() {\n  return elementByClass(swalClasses.image);\n};\n\nvar getSpacer = function getSpacer() {\n  return elementByClass(swalClasses.spacer);\n};\n\nvar getProgressSteps = function getProgressSteps() {\n  return elementByClass(swalClasses.progresssteps);\n};\n\nvar getValidationError = function getValidationError() {\n  return elementByClass(swalClasses.validationerror);\n};\n\nvar getConfirmButton = function getConfirmButton() {\n  return elementByClass(swalClasses.confirm);\n};\n\nvar getCancelButton = function getCancelButton() {\n  return elementByClass(swalClasses.cancel);\n};\n\nvar getCloseButton = function getCloseButton() {\n  return elementByClass(swalClasses.close);\n};\n\nvar getFocusableElements = function getFocusableElements(focusCancel) {\n  var buttons = [getConfirmButton(), getCancelButton()];\n  if (focusCancel) {\n    buttons.reverse();\n  }\n  return buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button:not([class^=' + swalPrefix + ']), input:not([type=hidden]), textarea, select')));\n};\n\nvar hasClass = function hasClass(elem, className) {\n  if (elem.classList) {\n    return elem.classList.contains(className);\n  }\n  return false;\n};\n\nvar focusInput = function focusInput(input) {\n  input.focus();\n\n  // place cursor at end of text in text input\n  if (input.type !== 'file') {\n    // http://stackoverflow.com/a/2345915/1331425\n    var val = input.value;\n    input.value = '';\n    input.value = val;\n  }\n};\n\nvar addClass = function addClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.add(className);\n  });\n};\n\nvar removeClass = function removeClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.remove(className);\n  });\n};\n\nvar getChildByClass = function getChildByClass(elem, className) {\n  for (var i = 0; i < elem.childNodes.length; i++) {\n    if (hasClass(elem.childNodes[i], className)) {\n      return elem.childNodes[i];\n    }\n  }\n};\n\nvar show = function show(elem, display) {\n  if (!display) {\n    display = 'block';\n  }\n  elem.style.opacity = '';\n  elem.style.display = display;\n};\n\nvar hide = function hide(elem) {\n  elem.style.opacity = '';\n  elem.style.display = 'none';\n};\n\nvar empty = function empty(elem) {\n  while (elem.firstChild) {\n    elem.removeChild(elem.firstChild);\n  }\n};\n\n// borrowed from jqeury $(elem).is(':visible') implementation\nvar isVisible = function isVisible(elem) {\n  return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;\n};\n\nvar removeStyleProperty = function removeStyleProperty(elem, property) {\n  if (elem.style.removeProperty) {\n    elem.style.removeProperty(property);\n  } else {\n    elem.style.removeAttribute(property);\n  }\n};\n\n\n\n\n\n\n\nvar fireClick = function fireClick(node) {\n  // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/\n  // Then fixed for today's Chrome browser.\n  if (typeof MouseEvent === 'function') {\n    // Up-to-date approach\n    var mevt = new MouseEvent('click', {\n      view: window,\n      bubbles: false,\n      cancelable: true\n    });\n    node.dispatchEvent(mevt);\n  } else if (document.createEvent) {\n    // Fallback\n    var evt = document.createEvent('MouseEvents');\n    evt.initEvent('click', false, false);\n    node.dispatchEvent(evt);\n  } else if (document.createEventObject) {\n    node.fireEvent('onclick');\n  } else if (typeof node.onclick === 'function') {\n    node.onclick();\n  }\n};\n\nvar animationEndEvent = function () {\n  var testEl = document.createElement('div');\n  var transEndEventNames = {\n    'WebkitAnimation': 'webkitAnimationEnd',\n    'OAnimation': 'oAnimationEnd oanimationend',\n    'msAnimation': 'MSAnimationEnd',\n    'animation': 'animationend'\n  };\n  for (var i in transEndEventNames) {\n    if (transEndEventNames.hasOwnProperty(i) && testEl.style[i] !== undefined) {\n      return transEndEventNames[i];\n    }\n  }\n\n  return false;\n}();\n\n// Reset the page to its previous state\nvar resetPrevState = function resetPrevState() {\n  var modal = getModal();\n  window.onkeydown = states.previousWindowKeyDown;\n  if (states.previousActiveElement && states.previousActiveElement.focus) {\n    states.previousActiveElement.focus();\n  }\n  clearTimeout(modal.timeout);\n};\n\n// Measure width of scrollbar\n// https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286\nvar measureScrollbar = function measureScrollbar() {\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '50px';\n  scrollDiv.style.height = '50px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarWidth;\n};\n\n// JavaScript Debounce Function\n// Simplivied version of https://davidwalsh.name/javascript-debounce-function\nvar debounce = function debounce(func, wait) {\n  var timeout = void 0;\n  return function () {\n    var later = function later() {\n      timeout = null;\n      func();\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent !== null) {\n      set(parent, property, value, receiver);\n    }\n  } else if (\"value\" in desc && desc.writable) {\n    desc.value = value;\n  } else {\n    var setter = desc.set;\n\n    if (setter !== undefined) {\n      setter.call(receiver, value);\n    }\n  }\n\n  return value;\n};\n\nvar modalParams = _extends({}, defaultParams);\nvar queue = [];\nvar swal2Observer = void 0;\n\n/*\n * Set type, text and actions on modal\n */\nvar setParameters = function setParameters(params) {\n  var modal = getModal();\n\n  for (var param in params) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n    }\n  }\n\n  // set modal width and margin-left\n  modal.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width;\n\n  modal.style.padding = params.padding + 'px';\n  modal.style.background = params.background;\n\n  var title = getTitle();\n  var content = getContent();\n  var confirmButton = getConfirmButton();\n  var cancelButton = getCancelButton();\n  var closeButton = getCloseButton();\n\n  // Title\n  title.innerHTML = params.title.split('\\n').join('<br>');\n\n  // Content\n  if (params.text || params.html) {\n    if (_typeof(params.html) === 'object') {\n      content.innerHTML = '';\n      if (0 in params.html) {\n        for (var i = 0; i in params.html; i++) {\n          content.appendChild(params.html[i].cloneNode(true));\n        }\n      } else {\n        content.appendChild(params.html.cloneNode(true));\n      }\n    } else if (params.html) {\n      content.innerHTML = params.html;\n    } else if (params.text) {\n      content.innerHTML = ('' + params.text).split('\\n').join('<br>');\n    }\n    show(content);\n  } else {\n    hide(content);\n  }\n\n  // Close button\n  if (params.showCloseButton) {\n    show(closeButton);\n  } else {\n    hide(closeButton);\n  }\n\n  // Custom Class\n  modal.className = swalClasses.modal;\n  if (params.customClass) {\n    addClass(modal, params.customClass);\n  }\n\n  // Progress steps\n  var progressStepsContainer = getProgressSteps();\n  var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);\n  if (params.progressSteps.length) {\n    show(progressStepsContainer);\n    empty(progressStepsContainer);\n    if (currentProgressStep >= params.progressSteps.length) {\n      console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    params.progressSteps.forEach(function (step, index) {\n      var circle = document.createElement('li');\n      addClass(circle, swalClasses.progresscircle);\n      circle.innerHTML = step;\n      if (index === currentProgressStep) {\n        addClass(circle, swalClasses.activeprogressstep);\n      }\n      progressStepsContainer.appendChild(circle);\n      if (index !== params.progressSteps.length - 1) {\n        var line = document.createElement('li');\n        addClass(line, swalClasses.progressline);\n        line.style.width = params.progressStepsDistance;\n        progressStepsContainer.appendChild(line);\n      }\n    });\n  } else {\n    hide(progressStepsContainer);\n  }\n\n  // Icon\n  var icons = getIcons();\n  for (var _i = 0; _i < icons.length; _i++) {\n    hide(icons[_i]);\n  }\n  if (params.type) {\n    var validType = false;\n    for (var iconType in iconTypes) {\n      if (params.type === iconType) {\n        validType = true;\n        break;\n      }\n    }\n    if (!validType) {\n      console.error('SweetAlert2: Unknown alert type: ' + params.type);\n      return false;\n    }\n    var icon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);\n    show(icon);\n\n    // Animate icon\n    switch (params.type) {\n      case 'success':\n        addClass(icon, 'animate');\n        addClass(icon.querySelector('.tip'), 'animate-success-tip');\n        addClass(icon.querySelector('.long'), 'animate-success-long');\n        break;\n      case 'error':\n        addClass(icon, 'animate-error-icon');\n        addClass(icon.querySelector('.x-mark'), 'animate-x-mark');\n        break;\n      case 'warning':\n        addClass(icon, 'pulse-warning');\n        break;\n      default:\n        break;\n    }\n  }\n\n  // Custom image\n  var image = getImage();\n  if (params.imageUrl) {\n    image.setAttribute('src', params.imageUrl);\n    show(image);\n\n    if (params.imageWidth) {\n      image.setAttribute('width', params.imageWidth);\n    } else {\n      image.removeAttribute('width');\n    }\n\n    if (params.imageHeight) {\n      image.setAttribute('height', params.imageHeight);\n    } else {\n      image.removeAttribute('height');\n    }\n\n    image.className = swalClasses.image;\n    if (params.imageClass) {\n      addClass(image, params.imageClass);\n    }\n  } else {\n    hide(image);\n  }\n\n  // Cancel button\n  if (params.showCancelButton) {\n    cancelButton.style.display = 'inline-block';\n  } else {\n    hide(cancelButton);\n  }\n\n  // Confirm button\n  if (params.showConfirmButton) {\n    removeStyleProperty(confirmButton, 'display');\n  } else {\n    hide(confirmButton);\n  }\n\n  // Buttons spacer\n  var spacer = getSpacer();\n  if (!params.showConfirmButton && !params.showCancelButton) {\n    hide(spacer);\n  } else {\n    show(spacer);\n  }\n\n  // Edit text on cancel and confirm buttons\n  confirmButton.innerHTML = params.confirmButtonText;\n  cancelButton.innerHTML = params.cancelButtonText;\n\n  // Set buttons to selected background colors\n  if (params.buttonsStyling) {\n    confirmButton.style.backgroundColor = params.confirmButtonColor;\n    cancelButton.style.backgroundColor = params.cancelButtonColor;\n  }\n\n  // Add buttons custom classes\n  confirmButton.className = swalClasses.confirm;\n  addClass(confirmButton, params.confirmButtonClass);\n  cancelButton.className = swalClasses.cancel;\n  addClass(cancelButton, params.cancelButtonClass);\n\n  // Buttons styling\n  if (params.buttonsStyling) {\n    addClass(confirmButton, swalClasses.styled);\n    addClass(cancelButton, swalClasses.styled);\n  } else {\n    removeClass(confirmButton, swalClasses.styled);\n    removeClass(cancelButton, swalClasses.styled);\n\n    confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';\n    cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';\n  }\n\n  // CSS animation\n  if (params.animation === true) {\n    removeClass(modal, swalClasses.noanimation);\n  } else {\n    addClass(modal, swalClasses.noanimation);\n  }\n};\n\n/*\n * Animations\n */\nvar openModal = function openModal(animation, onComplete) {\n  var modal = getModal();\n  if (animation) {\n    addClass(modal, swalClasses.show);\n    addClass(sweetContainer, swalClasses.fade);\n    removeClass(modal, swalClasses.hide);\n  } else {\n    removeClass(modal, swalClasses.fade);\n  }\n  show(modal);\n\n  // scrolling is 'hidden' until animation is done, after that 'auto'\n  sweetContainer.style.overflowY = 'hidden';\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      sweetContainer.style.overflowY = 'auto';\n    });\n  } else {\n    sweetContainer.style.overflowY = 'auto';\n  }\n\n  addClass(sweetContainer, swalClasses.in);\n  addClass(document.body, swalClasses.in);\n  fixScrollbar();\n  iOSfix();\n  states.previousActiveElement = document.activeElement;\n  if (onComplete !== null && typeof onComplete === 'function') {\n    onComplete(modal);\n  }\n};\n\nvar fixScrollbar = function fixScrollbar() {\n  // for queues, do not do this more than once\n  if (states.previousBodyPadding !== null) {\n    return;\n  }\n  // if the body has overflow\n  if (document.body.scrollHeight > window.innerHeight) {\n    // add padding so the content doesn't shift after removal of scrollbar\n    states.previousBodyPadding = document.body.style.paddingRight;\n    document.body.style.paddingRight = measureScrollbar() + 'px';\n  }\n};\n\nvar undoScrollbar = function undoScrollbar() {\n  if (states.previousBodyPadding !== null) {\n    document.body.style.paddingRight = states.previousBodyPadding;\n    states.previousBodyPadding = null;\n  }\n};\n\n// Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425\nvar iOSfix = function iOSfix() {\n  var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n  if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n    var offset = document.body.scrollTop;\n    document.body.style.top = offset * -1 + 'px';\n    addClass(document.body, swalClasses.iosfix);\n  }\n};\n\nvar undoIOSfix = function undoIOSfix() {\n  if (hasClass(document.body, swalClasses.iosfix)) {\n    var offset = parseInt(document.body.style.top, 10);\n    removeClass(document.body, swalClasses.iosfix);\n    document.body.scrollTop = offset * -1;\n  }\n};\n\nvar modalDependant = function modalDependant() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (args[0] === undefined) {\n    console.error('SweetAlert2 expects at least 1 attribute!');\n    return false;\n  }\n\n  var params = _extends({}, modalParams);\n\n  switch (_typeof(args[0])) {\n    case 'string':\n      params.title = args[0];\n      params.text = args[1];\n      params.type = args[2];\n\n      break;\n\n    case 'object':\n      _extends(params, args[0]);\n      params.extraParams = args[0].extraParams;\n\n      if (params.input === 'email' && params.inputValidator === null) {\n        params.inputValidator = function (email) {\n          return new Promise(function (resolve, reject) {\n            var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/;\n            if (emailRegex.test(email)) {\n              resolve();\n            } else {\n              reject('Invalid email address');\n            }\n          });\n        };\n      }\n      break;\n\n    default:\n      console.error('SweetAlert2: Unexpected type of argument! Expected \"string\" or \"object\", got ' + _typeof(args[0]));\n      return false;\n  }\n\n  setParameters(params);\n\n  var modal = getModal();\n\n  return new Promise(function (resolve, reject) {\n    // Close on timer\n    if (params.timer) {\n      modal.timeout = setTimeout(function () {\n        sweetAlert.closeModal(params.onClose);\n        reject('timer');\n      }, params.timer);\n    }\n\n    // Get input element by specified type or, if type isn't specified, by params.input\n    var getInput = function getInput(inputType) {\n      inputType = inputType || params.input;\n      switch (inputType) {\n        case 'select':\n        case 'textarea':\n        case 'file':\n          return getChildByClass(modal, swalClasses[inputType]);\n        case 'checkbox':\n          return modal.querySelector('.' + swalClasses.checkbox + ' input');\n        case 'radio':\n          return modal.querySelector('.' + swalClasses.radio + ' input:checked') || modal.querySelector('.' + swalClasses.radio + ' input:first-child');\n        case 'range':\n          return modal.querySelector('.' + swalClasses.range + ' input');\n        default:\n          return getChildByClass(modal, swalClasses.input);\n      }\n    };\n\n    // Get the value of the modal input\n    var getInputValue = function getInputValue() {\n      var input = getInput();\n      if (!input) {\n        return null;\n      }\n      switch (params.input) {\n        case 'checkbox':\n          return input.checked ? 1 : 0;\n        case 'radio':\n          return input.checked ? input.value : null;\n        case 'file':\n          return input.files.length ? input.files[0] : null;\n        default:\n          return params.inputAutoTrim ? input.value.trim() : input.value;\n      }\n    };\n\n    // input autofocus\n    if (params.input) {\n      setTimeout(function () {\n        var input = getInput();\n        if (input) {\n          focusInput(input);\n        }\n      }, 0);\n    }\n\n    var confirm = function confirm(value) {\n      if (params.showLoaderOnConfirm) {\n        sweetAlert.showLoading();\n      }\n\n      if (params.preConfirm) {\n        params.preConfirm(value, params.extraParams).then(function (preConfirmValue) {\n          sweetAlert.closeModal(params.onClose);\n          resolve(preConfirmValue || value);\n        }, function (error) {\n          sweetAlert.hideLoading();\n          if (error) {\n            sweetAlert.showValidationError(error);\n          }\n        });\n      } else {\n        sweetAlert.closeModal(params.onClose);\n        resolve(value);\n      }\n    };\n\n    // Mouse interactions\n    var onButtonEvent = function onButtonEvent(event) {\n      var e = event || window.event;\n      var target = e.target || e.srcElement;\n      var confirmButton = getConfirmButton();\n      var cancelButton = getCancelButton();\n      var targetedConfirm = confirmButton === target || confirmButton.contains(target);\n      var targetedCancel = cancelButton === target || cancelButton.contains(target);\n\n      switch (e.type) {\n        case 'mouseover':\n        case 'mouseup':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);\n            }\n          }\n          break;\n        case 'mouseout':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = params.confirmButtonColor;\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = params.cancelButtonColor;\n            }\n          }\n          break;\n        case 'mousedown':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);\n            }\n          }\n          break;\n        case 'click':\n          // Clicked 'confirm'\n          if (targetedConfirm && sweetAlert.isVisible()) {\n            if (params.input) {\n              (function () {\n                var inputValue = getInputValue();\n\n                if (params.inputValidator) {\n                  sweetAlert.disableInput();\n                  params.inputValidator(inputValue, params.extraParams).then(function () {\n                    sweetAlert.enableInput();\n                    confirm(inputValue);\n                  }, function (error) {\n                    sweetAlert.enableInput();\n                    if (error) {\n                      sweetAlert.showValidationError(error);\n                    }\n                  });\n                } else {\n                  confirm(inputValue);\n                }\n              })();\n            } else {\n              confirm(true);\n            }\n\n            // Clicked 'cancel'\n          } else if (targetedCancel && sweetAlert.isVisible()) {\n            sweetAlert.closeModal(params.onClose);\n            reject('cancel');\n          }\n          break;\n        default:\n      }\n    };\n\n    var buttons = modal.querySelectorAll('button');\n    for (var i = 0; i < buttons.length; i++) {\n      buttons[i].onclick = onButtonEvent;\n      buttons[i].onmouseover = onButtonEvent;\n      buttons[i].onmouseout = onButtonEvent;\n      buttons[i].onmousedown = onButtonEvent;\n    }\n\n    // Closing modal by close button\n    getCloseButton().onclick = function () {\n      sweetAlert.closeModal(params.onClose);\n      reject('close');\n    };\n\n    // Closing modal by overlay click\n    sweetContainer.onclick = function (e) {\n      if (e.target !== sweetContainer) {\n        return;\n      }\n      if (params.allowOutsideClick) {\n        sweetAlert.closeModal(params.onClose);\n        reject('overlay');\n      }\n    };\n\n    var confirmButton = getConfirmButton();\n    var cancelButton = getCancelButton();\n\n    // Reverse buttons if neede d\n    if (params.reverseButtons) {\n      confirmButton.parentNode.insertBefore(cancelButton, confirmButton);\n    } else {\n      confirmButton.parentNode.insertBefore(confirmButton, cancelButton);\n    }\n\n    // Focus handling\n    var setFocus = function setFocus(index, increment) {\n      var focusableElements = getFocusableElements(params.focusCancel);\n      // search for visible elements and select the next possible match\n      for (var _i2 = 0; _i2 < focusableElements.length; _i2++) {\n        index = index + increment;\n\n        // rollover to first item\n        if (index === focusableElements.length) {\n          index = 0;\n\n          // go to last item\n        } else if (index === -1) {\n          index = focusableElements.length - 1;\n        }\n\n        // determine if element is visible\n        var el = focusableElements[index];\n        if (isVisible(el)) {\n          return el.focus();\n        }\n      }\n    };\n\n    var handleKeyDown = function handleKeyDown(event) {\n      var e = event || window.event;\n      var keyCode = e.keyCode || e.which;\n\n      if ([9, 13, 32, 27].indexOf(keyCode) === -1) {\n        // Don't do work on keys we don't care about.\n        return;\n      }\n\n      var targetElement = e.target || e.srcElement;\n\n      var focusableElements = getFocusableElements(params.focusCancel);\n      var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.\n      for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {\n        if (targetElement === focusableElements[_i3]) {\n          btnIndex = _i3;\n          break;\n        }\n      }\n\n      // TAB\n      if (keyCode === 9) {\n        if (!e.shiftKey) {\n          // Cycle to the next button\n          setFocus(btnIndex, 1);\n        } else {\n          // Cycle to the prev button\n          setFocus(btnIndex, -1);\n        }\n        e.stopPropagation();\n        e.preventDefault();\n\n        // ENTER/SPACE\n      } else {\n        if (keyCode === 13 || keyCode === 32) {\n          if (btnIndex === -1) {\n            // ENTER/SPACE clicked outside of a button.\n            if (params.focusCancel) {\n              fireClick(cancelButton, e);\n            } else {\n              fireClick(confirmButton, e);\n            }\n          }\n        } else if (keyCode === 27 && params.allowEscapeKey === true) {\n          sweetAlert.closeModal(params.onClose);\n          reject('esc');\n        }\n      }\n    };\n\n    states.previousWindowKeyDown = window.onkeydown;\n    window.onkeydown = handleKeyDown;\n\n    // Loading state\n    if (params.buttonsStyling) {\n      confirmButton.style.borderLeftColor = params.confirmButtonColor;\n      confirmButton.style.borderRightColor = params.confirmButtonColor;\n    }\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.showLoading = sweetAlert.enableLoading = function () {\n      show(getSpacer());\n      show(confirmButton, 'inline-block');\n      addClass(confirmButton, swalClasses.loading);\n      addClass(modal, swalClasses.loading);\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.hideLoading = sweetAlert.disableLoading = function () {\n      if (!params.showConfirmButton) {\n        hide(confirmButton);\n        if (!params.showCancelButton) {\n          hide(getSpacer());\n        }\n      }\n      removeClass(confirmButton, swalClasses.loading);\n      removeClass(modal, swalClasses.loading);\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.enableButtons = function () {\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.disableButtons = function () {\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    sweetAlert.enableConfirmButton = function () {\n      confirmButton.disabled = false;\n    };\n\n    sweetAlert.disableConfirmButton = function () {\n      confirmButton.disabled = true;\n    };\n\n    sweetAlert.enableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i4 = 0; _i4 < radios.length; _i4++) {\n          radios[_i4].disabled = false;\n        }\n      } else {\n        input.disabled = false;\n      }\n    };\n\n    sweetAlert.disableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input && input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i5 = 0; _i5 < radios.length; _i5++) {\n          radios[_i5].disabled = true;\n        }\n      } else {\n        input.disabled = true;\n      }\n    };\n\n    // Set modal min-height to disable scrolling inside the modal\n    sweetAlert.recalculateHeight = debounce(function () {\n      var modal = getModal();\n      var prevState = modal.style.display;\n      modal.style.minHeight = '';\n      show(modal);\n      modal.style.minHeight = modal.scrollHeight + 1 + 'px';\n      modal.style.display = prevState;\n    }, 50);\n\n    // Show block with validation error\n    sweetAlert.showValidationError = function (error) {\n      var validationError = getValidationError();\n      validationError.innerHTML = error;\n      show(validationError);\n\n      var input = getInput();\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    };\n\n    // Hide block with validation error\n    sweetAlert.resetValidationError = function () {\n      var validationError = getValidationError();\n      hide(validationError);\n      sweetAlert.recalculateHeight();\n\n      var input = getInput();\n      if (input) {\n        removeClass(input, swalClasses.inputerror);\n      }\n    };\n\n    sweetAlert.getProgressSteps = function () {\n      return params.progressSteps;\n    };\n\n    sweetAlert.setProgressSteps = function (progressSteps) {\n      params.progressSteps = progressSteps;\n      setParameters(params);\n    };\n\n    sweetAlert.showProgressSteps = function () {\n      show(getProgressSteps());\n    };\n\n    sweetAlert.hideProgressSteps = function () {\n      hide(getProgressSteps());\n    };\n\n    sweetAlert.enableButtons();\n    sweetAlert.hideLoading();\n    sweetAlert.resetValidationError();\n\n    // inputs\n    var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n    var input = void 0;\n    for (var _i6 = 0; _i6 < inputTypes.length; _i6++) {\n      var inputClass = swalClasses[inputTypes[_i6]];\n      var inputContainer = getChildByClass(modal, inputClass);\n      input = getInput(inputTypes[_i6]);\n\n      // set attributes\n      if (input) {\n        for (var j in input.attributes) {\n          if (input.attributes.hasOwnProperty(j)) {\n            var attrName = input.attributes[j].name;\n            if (attrName !== 'type' && attrName !== 'value') {\n              input.removeAttribute(attrName);\n            }\n          }\n        }\n        for (var attr in params.inputAttributes) {\n          input.setAttribute(attr, params.inputAttributes[attr]);\n        }\n      }\n\n      // set class\n      inputContainer.className = inputClass;\n      if (params.inputClass) {\n        addClass(inputContainer, params.inputClass);\n      }\n\n      hide(inputContainer);\n    }\n\n    var populateInputOptions = void 0;\n\n    (function () {\n      switch (params.input) {\n        case 'text':\n        case 'email':\n        case 'password':\n        case 'number':\n        case 'tel':\n          input = getChildByClass(modal, swalClasses.input);\n          input.value = params.inputValue;\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'file':\n          input = getChildByClass(modal, swalClasses.file);\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'range':\n          var range = getChildByClass(modal, swalClasses.range);\n          var rangeInput = range.querySelector('input');\n          var rangeOutput = range.querySelector('output');\n          rangeInput.value = params.inputValue;\n          rangeInput.type = params.input;\n          rangeOutput.value = params.inputValue;\n          show(range);\n          break;\n        case 'select':\n          var select = getChildByClass(modal, swalClasses.select);\n          select.innerHTML = '';\n          if (params.inputPlaceholder) {\n            var placeholder = document.createElement('option');\n            placeholder.innerHTML = params.inputPlaceholder;\n            placeholder.value = '';\n            placeholder.disabled = true;\n            placeholder.selected = true;\n            select.appendChild(placeholder);\n          }\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var optionValue in inputOptions) {\n              var option = document.createElement('option');\n              option.value = optionValue;\n              option.innerHTML = inputOptions[optionValue];\n              if (params.inputValue === optionValue) {\n                option.selected = true;\n              }\n              select.appendChild(option);\n            }\n            show(select);\n            select.focus();\n          };\n          break;\n        case 'radio':\n          var radio = getChildByClass(modal, swalClasses.radio);\n          radio.innerHTML = '';\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var radioValue in inputOptions) {\n              var id = 1;\n              var radioInput = document.createElement('input');\n              var radioLabel = document.createElement('label');\n              var radioLabelSpan = document.createElement('span');\n              radioInput.type = 'radio';\n              radioInput.name = swalClasses.radio;\n              radioInput.value = radioValue;\n              radioInput.id = swalClasses.radio + '-' + id++;\n              if (params.inputValue === radioValue) {\n                radioInput.checked = true;\n              }\n              radioLabelSpan.innerHTML = inputOptions[radioValue];\n              radioLabel.appendChild(radioInput);\n              radioLabel.appendChild(radioLabelSpan);\n              radioLabel.for = radioInput.id;\n              radio.appendChild(radioLabel);\n            }\n            show(radio);\n            var radios = radio.querySelectorAll('input');\n            if (radios.length) {\n              radios[0].focus();\n            }\n          };\n          break;\n        case 'checkbox':\n          var checkbox = getChildByClass(modal, swalClasses.checkbox);\n          var checkboxInput = getInput('checkbox');\n          checkboxInput.type = 'checkbox';\n          checkboxInput.value = 1;\n          checkboxInput.id = swalClasses.checkbox;\n          checkboxInput.checked = Boolean(params.inputValue);\n          var label = checkbox.getElementsByTagName('span');\n          if (label.length) {\n            checkbox.removeChild(label[0]);\n          }\n          label = document.createElement('span');\n          label.innerHTML = params.inputPlaceholder;\n          checkbox.appendChild(label);\n          show(checkbox);\n          break;\n        case 'textarea':\n          var textarea = getChildByClass(modal, swalClasses.textarea);\n          textarea.value = params.inputValue;\n          textarea.placeholder = params.inputPlaceholder;\n          show(textarea);\n          break;\n        case null:\n          break;\n        default:\n          console.error('SweetAlert2: Unexpected type of input! Expected \"text\", \"email\", \"password\", \"select\", \"checkbox\", \"textarea\" or \"file\", got \"' + params.input + '\"');\n          break;\n      }\n    })();\n\n    if (params.input === 'select' || params.input === 'radio') {\n      if (params.inputOptions instanceof Promise) {\n        sweetAlert.showLoading();\n        params.inputOptions.then(function (inputOptions) {\n          sweetAlert.hideLoading();\n          populateInputOptions(inputOptions);\n        });\n      } else if (_typeof(params.inputOptions) === 'object') {\n        populateInputOptions(params.inputOptions);\n      } else {\n        console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));\n      }\n    }\n\n    openModal(params.animation, params.onOpen);\n\n    // Focus the first element (input or button)\n    setFocus(-1, 1);\n\n    // fix scroll\n    sweetContainer.scrollTop = 0;\n\n    // Observe changes inside the modal and adjust height\n    if (typeof MutationObserver !== 'undefined' && !swal2Observer) {\n      swal2Observer = new MutationObserver(sweetAlert.recalculateHeight);\n      swal2Observer.observe(modal, { childList: true, characterData: true, subtree: true });\n    }\n  });\n};\n\n// SweetAlert entry point\nvar sweetAlert = function sweetAlert() {\n  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  if (sweetAlert.isVisible()) {\n    sweetAlert.close();\n  }\n\n  return modalDependant.apply(undefined, args);\n};\n\n/*\n * Global function to determine if swal2 modal is visible\n */\nsweetAlert.isVisible = function () {\n  var modal = getModal();\n  return isVisible(modal);\n};\n\n/*\n * Global function for chaining sweetAlert modals\n */\nsweetAlert.queue = function (steps) {\n  queue = steps;\n  var modal = getModal();\n  var resetQueue = function resetQueue() {\n    queue = [];\n    modal.removeAttribute('data-queue-step');\n  };\n  var queueResult = [];\n  return new Promise(function (resolve, reject) {\n    (function step(i, callback) {\n      if (i < queue.length) {\n        modal.setAttribute('data-queue-step', i);\n\n        sweetAlert(queue[i]).then(function (result) {\n          queueResult.push(result);\n          step(i + 1, callback);\n        }, function (dismiss) {\n          resetQueue();\n          reject(dismiss);\n        });\n      } else {\n        resetQueue();\n        resolve(queueResult);\n      }\n    })(0);\n  });\n};\n\n/*\n * Global function for getting the index of current modal in queue\n */\nsweetAlert.getQueueStep = function () {\n  return getModal().getAttribute('data-queue-step');\n};\n\n/*\n * Global function for inserting a modal to the queue\n */\nsweetAlert.insertQueueStep = function (step, index) {\n  if (index && index < queue.length) {\n    return queue.splice(index, 0, step);\n  }\n  return queue.push(step);\n};\n\n/*\n * Global function for deleting a modal from the queue\n */\nsweetAlert.deleteQueueStep = function (index) {\n  if (typeof queue[index] !== 'undefined') {\n    queue.splice(index, 1);\n  }\n};\n\n/*\n * Global function to close sweetAlert\n */\nsweetAlert.close = sweetAlert.closeModal = function (onComplete) {\n  var modal = getModal();\n  removeClass(modal, swalClasses.show);\n  addClass(modal, swalClasses.hide);\n\n  // Reset icon animations\n  var successIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.success);\n  removeClass(successIcon, 'animate');\n  removeClass(successIcon.querySelector('.tip'), 'animate-success-tip');\n  removeClass(successIcon.querySelector('.long'), 'animate-success-long');\n\n  var errorIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.error);\n  removeClass(errorIcon, 'animate-error-icon');\n  removeClass(errorIcon.querySelector('.x-mark'), 'animate-x-mark');\n\n  var warningIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.warning);\n  removeClass(warningIcon, 'pulse-warning');\n\n  resetPrevState();\n\n  var hideModalAndResetState = function hideModalAndResetState() {\n    hide(modal);\n    modal.style.minHeight = '';\n    removeClass(sweetContainer, swalClasses.in);\n    removeClass(document.body, swalClasses.in);\n    undoScrollbar();\n    undoIOSfix();\n  };\n\n  // If animation is supported, animate\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      if (hasClass(modal, swalClasses.hide)) {\n        hideModalAndResetState();\n      }\n    });\n  } else {\n    // Otherwise, hide immediately\n    hideModalAndResetState();\n  }\n  if (onComplete !== null && typeof onComplete === 'function') {\n    onComplete(modal);\n  }\n};\n\n/*\n * Global function to click 'Confirm' button\n */\nsweetAlert.clickConfirm = function () {\n  return getConfirmButton().click();\n};\n\n/*\n * Global function to click 'Cancel' button\n */\nsweetAlert.clickCancel = function () {\n  return getCancelButton().click();\n};\n\n/**\n * Set default params for each popup\n * @param {Object} userParams\n */\nsweetAlert.setDefaults = function (userParams) {\n  if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {\n    return console.error('SweetAlert2: the argument for setDefaults() is required and has to be a object');\n  }\n\n  for (var param in userParams) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n      delete userParams[param];\n    }\n  }\n\n  _extends(modalParams, userParams);\n};\n\n/**\n * Reset default params for each popup\n */\nsweetAlert.resetDefaults = function () {\n  modalParams = _extends({}, defaultParams);\n};\n\nsweetAlert.noop = function () {};\n\nsweetAlert.version = '6.1.1';\n\nmodule.exports = sweetAlert;\nif (window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/sweet-alert2/sweetalert2.css",
    "content": "body.swal2-in {\n  overflow-y: hidden; }\n\nbody.swal2-iosfix {\n  position: fixed;\n  left: 0;\n  right: 0; }\n\n.swal2-container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  padding: 10px;\n  background-color: transparent;\n  z-index: 1060; }\n  .swal2-container:not(.swal2-in) {\n    pointer-events: none; }\n  .swal2-container.swal2-fade {\n    -webkit-transition: background-color .1s;\n    transition: background-color .1s; }\n  .swal2-container.swal2-in {\n    background-color: rgba(0, 0, 0, 0.4); }\n\n.swal2-modal {\n  background-color: #fff;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  border-radius: 5px;\n  box-sizing: border-box;\n  text-align: center;\n  margin: auto;\n  overflow-x: hidden;\n  overflow-y: auto;\n  display: none;\n  position: relative; }\n  .swal2-modal:focus {\n    outline: none; }\n  .swal2-modal.swal2-loading {\n    overflow-y: hidden; }\n  .swal2-modal .swal2-title {\n    color: #595959;\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 0;\n    padding: 0;\n    line-height: 60px;\n    display: block; }\n  .swal2-modal .swal2-spacer {\n    height: 10px;\n    color: transparent;\n    border: 0; }\n  .swal2-modal .swal2-styled {\n    border: 0;\n    border-radius: 3px;\n    box-shadow: none;\n    color: #fff;\n    cursor: pointer;\n    font-size: 17px;\n    font-weight: 500;\n    margin: 0 5px;\n    padding: 10px 32px; }\n    .swal2-modal .swal2-styled:not(.swal2-loading)[disabled] {\n      opacity: .4;\n      cursor: no-drop; }\n    .swal2-modal .swal2-styled.swal2-loading {\n      box-sizing: border-box;\n      border: 4px solid transparent;\n      border-color: transparent;\n      width: 40px;\n      height: 40px;\n      padding: 0;\n      margin: -2px 30px;\n      vertical-align: top;\n      background-color: transparent !important;\n      color: transparent;\n      cursor: default;\n      border-radius: 100%;\n      -webkit-animation: rotate-loading 1.5s linear 0s infinite normal;\n              animation: rotate-loading 1.5s linear 0s infinite normal;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none; }\n  .swal2-modal :not(.swal2-styled).swal2-loading::after {\n    display: inline-block;\n    content: '';\n    margin-left: 5px;\n    vertical-align: -1px;\n    height: 6px;\n    width: 6px;\n    border: 3px solid #999999;\n    border-right-color: transparent;\n    border-radius: 50%;\n    -webkit-animation: rotate-loading 1.5s linear 0s infinite normal;\n            animation: rotate-loading 1.5s linear 0s infinite normal; }\n  .swal2-modal .swal2-image {\n    margin: 20px auto;\n    max-width: 100%; }\n  .swal2-modal .swal2-close {\n    font-size: 36px;\n    line-height: 36px;\n    font-family: serif;\n    position: absolute;\n    top: 5px;\n    right: 13px;\n    cursor: pointer;\n    color: #cccccc;\n    -webkit-transition: color .1s ease;\n    transition: color .1s ease; }\n    .swal2-modal .swal2-close:hover {\n      color: #d55; }\n  .swal2-modal > .swal2-input,\n  .swal2-modal > .swal2-file,\n  .swal2-modal > .swal2-textarea,\n  .swal2-modal > .swal2-select,\n  .swal2-modal > .swal2-radio,\n  .swal2-modal > .swal2-checkbox {\n    display: none; }\n  .swal2-modal .swal2-content {\n    font-size: 18px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal;\n    color: #545454; }\n  .swal2-modal .swal2-input,\n  .swal2-modal .swal2-file,\n  .swal2-modal .swal2-textarea,\n  .swal2-modal .swal2-select,\n  .swal2-modal .swal2-radio,\n  .swal2-modal .swal2-checkbox {\n    margin: 20px auto; }\n  .swal2-modal .swal2-input,\n  .swal2-modal .swal2-file,\n  .swal2-modal .swal2-textarea {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid #d9d9d9;\n    font-size: 18px;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06);\n    -webkit-transition: border-color box-shadow .3s;\n    transition: border-color box-shadow .3s; }\n    .swal2-modal .swal2-input.swal2-inputerror,\n    .swal2-modal .swal2-file.swal2-inputerror,\n    .swal2-modal .swal2-textarea.swal2-inputerror {\n      border-color: #f06e57; }\n    .swal2-modal .swal2-input:focus,\n    .swal2-modal .swal2-file:focus,\n    .swal2-modal .swal2-textarea:focus {\n      outline: none;\n      box-shadow: 0 0 3px #c4e6f5;\n      border: 1px solid #b4dbed; }\n      .swal2-modal .swal2-input:focus::-webkit-input-placeholder,\n      .swal2-modal .swal2-file:focus::-webkit-input-placeholder,\n      .swal2-modal .swal2-textarea:focus::-webkit-input-placeholder {\n        -webkit-transition: opacity .3s .03s ease;\n        transition: opacity .3s .03s ease;\n        opacity: .8; }\n      .swal2-modal .swal2-input:focus::-moz-placeholder,\n      .swal2-modal .swal2-file:focus::-moz-placeholder,\n      .swal2-modal .swal2-textarea:focus::-moz-placeholder {\n        -webkit-transition: opacity .3s .03s ease;\n        transition: opacity .3s .03s ease;\n        opacity: .8; }\n      .swal2-modal .swal2-input:focus:-ms-input-placeholder,\n      .swal2-modal .swal2-file:focus:-ms-input-placeholder,\n      .swal2-modal .swal2-textarea:focus:-ms-input-placeholder {\n        -webkit-transition: opacity .3s .03s ease;\n        transition: opacity .3s .03s ease;\n        opacity: .8; }\n      .swal2-modal .swal2-input:focus::placeholder,\n      .swal2-modal .swal2-file:focus::placeholder,\n      .swal2-modal .swal2-textarea:focus::placeholder {\n        -webkit-transition: opacity .3s .03s ease;\n        transition: opacity .3s .03s ease;\n        opacity: .8; }\n    .swal2-modal .swal2-input::-webkit-input-placeholder,\n    .swal2-modal .swal2-file::-webkit-input-placeholder,\n    .swal2-modal .swal2-textarea::-webkit-input-placeholder {\n      color: #e6e6e6; }\n    .swal2-modal .swal2-input::-moz-placeholder,\n    .swal2-modal .swal2-file::-moz-placeholder,\n    .swal2-modal .swal2-textarea::-moz-placeholder {\n      color: #e6e6e6; }\n    .swal2-modal .swal2-input:-ms-input-placeholder,\n    .swal2-modal .swal2-file:-ms-input-placeholder,\n    .swal2-modal .swal2-textarea:-ms-input-placeholder {\n      color: #e6e6e6; }\n    .swal2-modal .swal2-input::placeholder,\n    .swal2-modal .swal2-file::placeholder,\n    .swal2-modal .swal2-textarea::placeholder {\n      color: #e6e6e6; }\n  .swal2-modal .swal2-range input {\n    float: left;\n    width: 80%; }\n  .swal2-modal .swal2-range output {\n    float: right;\n    width: 20%;\n    font-size: 20px;\n    font-weight: 600;\n    text-align: center; }\n  .swal2-modal .swal2-range input,\n  .swal2-modal .swal2-range output {\n    height: 43px;\n    line-height: 43px;\n    vertical-align: middle;\n    margin: 20px auto;\n    padding: 0; }\n  .swal2-modal .swal2-input {\n    height: 43px;\n    padding: 0 12px; }\n    .swal2-modal .swal2-input[type='number'] {\n      max-width: 150px; }\n  .swal2-modal .swal2-file {\n    font-size: 20px; }\n  .swal2-modal .swal2-textarea {\n    height: 108px;\n    padding: 12px; }\n  .swal2-modal .swal2-select {\n    color: #545454;\n    font-size: inherit;\n    padding: 5px 10px;\n    min-width: 40%;\n    max-width: 100%; }\n  .swal2-modal .swal2-radio {\n    border: 0; }\n    .swal2-modal .swal2-radio label:not(:first-child) {\n      margin-left: 20px; }\n    .swal2-modal .swal2-radio input,\n    .swal2-modal .swal2-radio span {\n      vertical-align: middle; }\n    .swal2-modal .swal2-radio input {\n      margin: 0 3px 0 0; }\n  .swal2-modal .swal2-checkbox {\n    color: #545454; }\n    .swal2-modal .swal2-checkbox input,\n    .swal2-modal .swal2-checkbox span {\n      vertical-align: middle; }\n  .swal2-modal .swal2-validationerror {\n    background-color: #f0f0f0;\n    margin: 0 -20px;\n    overflow: hidden;\n    padding: 10px;\n    color: gray;\n    font-size: 16px;\n    font-weight: 300;\n    display: none; }\n    .swal2-modal .swal2-validationerror::before {\n      content: '!';\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: #ea7d7d;\n      color: #fff;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 10px; }\n\n@supports (-ms-accelerator: true) {\n  .swal2-range input {\n    width: 100% !important; }\n  .swal2-range output {\n    display: none; } }\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .swal2-range input {\n    width: 100% !important; }\n  .swal2-range output {\n    display: none; } }\n\n.swal2-icon {\n  width: 80px;\n  height: 80px;\n  border: 4px solid transparent;\n  border-radius: 50%;\n  margin: 20px auto 30px;\n  padding: 0;\n  position: relative;\n  box-sizing: content-box;\n  cursor: default;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none; }\n  .swal2-icon.swal2-error {\n    border-color: #f27474; }\n    .swal2-icon.swal2-error .x-mark {\n      position: relative;\n      display: block; }\n    .swal2-icon.swal2-error .line {\n      position: absolute;\n      height: 5px;\n      width: 47px;\n      background-color: #f27474;\n      display: block;\n      top: 37px;\n      border-radius: 2px; }\n      .swal2-icon.swal2-error .line.left {\n        -webkit-transform: rotate(45deg);\n                transform: rotate(45deg);\n        left: 17px; }\n      .swal2-icon.swal2-error .line.right {\n        -webkit-transform: rotate(-45deg);\n                transform: rotate(-45deg);\n        right: 16px; }\n  .swal2-icon.swal2-warning {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n    color: #f8bb86;\n    border-color: #facea8;\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center; }\n  .swal2-icon.swal2-info {\n    font-family: 'Open Sans', sans-serif;\n    color: #3fc3ee;\n    border-color: #9de0f6;\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center; }\n  .swal2-icon.swal2-question {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n    color: #87adbd;\n    border-color: #c9dae1;\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center; }\n  .swal2-icon.swal2-success {\n    border-color: #a5dc86; }\n    .swal2-icon.swal2-success::before, .swal2-icon.swal2-success::after {\n      content: '';\n      border-radius: 50%;\n      position: absolute;\n      width: 60px;\n      height: 120px;\n      background: #fff;\n      -webkit-transform: rotate(45deg);\n              transform: rotate(45deg); }\n    .swal2-icon.swal2-success::before {\n      border-radius: 120px 0 0 120px;\n      top: -7px;\n      left: -33px;\n      -webkit-transform: rotate(-45deg);\n              transform: rotate(-45deg);\n      -webkit-transform-origin: 60px 60px;\n              transform-origin: 60px 60px; }\n    .swal2-icon.swal2-success::after {\n      border-radius: 0 120px 120px 0;\n      top: -11px;\n      left: 30px;\n      -webkit-transform: rotate(-45deg);\n              transform: rotate(-45deg);\n      -webkit-transform-origin: 0 60px;\n              transform-origin: 0 60px; }\n    .swal2-icon.swal2-success .placeholder {\n      width: 80px;\n      height: 80px;\n      border: 4px solid rgba(165, 220, 134, 0.2);\n      border-radius: 50%;\n      box-sizing: content-box;\n      position: absolute;\n      left: -4px;\n      top: -4px;\n      z-index: 2; }\n    .swal2-icon.swal2-success .fix {\n      width: 7px;\n      height: 90px;\n      background-color: #fff;\n      position: absolute;\n      left: 28px;\n      top: 8px;\n      z-index: 1;\n      -webkit-transform: rotate(-45deg);\n              transform: rotate(-45deg); }\n    .swal2-icon.swal2-success .line {\n      height: 5px;\n      background-color: #a5dc86;\n      display: block;\n      border-radius: 2px;\n      position: absolute;\n      z-index: 2; }\n      .swal2-icon.swal2-success .line.tip {\n        width: 25px;\n        left: 14px;\n        top: 46px;\n        -webkit-transform: rotate(45deg);\n                transform: rotate(45deg); }\n      .swal2-icon.swal2-success .line.long {\n        width: 47px;\n        right: 8px;\n        top: 38px;\n        -webkit-transform: rotate(-45deg);\n                transform: rotate(-45deg); }\n\n.swal2-progresssteps {\n  font-weight: 600;\n  margin: 0 0 20px;\n  padding: 0; }\n  .swal2-progresssteps li {\n    display: inline-block;\n    position: relative; }\n  .swal2-progresssteps .swal2-progresscircle {\n    background: #3085d6;\n    border-radius: 2em;\n    color: #fff;\n    height: 2em;\n    line-height: 2em;\n    text-align: center;\n    width: 2em;\n    z-index: 20; }\n    .swal2-progresssteps .swal2-progresscircle:first-child {\n      margin-left: 0; }\n    .swal2-progresssteps .swal2-progresscircle:last-child {\n      margin-right: 0; }\n    .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep {\n      background: #3085d6; }\n      .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progresscircle {\n        background: #add8e6; }\n      .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progressline {\n        background: #add8e6; }\n  .swal2-progresssteps .swal2-progressline {\n    background: #3085d6;\n    height: .4em;\n    margin: 0 -1px;\n    z-index: 10; }\n\n[class^='swal2'] {\n  -webkit-tap-highlight-color: transparent; }\n\n@-webkit-keyframes showSweetAlert {\n  0% {\n    -webkit-transform: scale(0.7);\n            transform: scale(0.7); }\n  45% {\n    -webkit-transform: scale(1.05);\n            transform: scale(1.05); }\n  80% {\n    -webkit-transform: scale(0.95);\n            transform: scale(0.95); }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@keyframes showSweetAlert {\n  0% {\n    -webkit-transform: scale(0.7);\n            transform: scale(0.7); }\n  45% {\n    -webkit-transform: scale(1.05);\n            transform: scale(1.05); }\n  80% {\n    -webkit-transform: scale(0.95);\n            transform: scale(0.95); }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; }\n  100% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5);\n    opacity: 0; } }\n\n@keyframes hideSweetAlert {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; }\n  100% {\n    -webkit-transform: scale(0.5);\n            transform: scale(0.5);\n    opacity: 0; } }\n\n.swal2-show {\n  -webkit-animation: showSweetAlert 0.3s;\n          animation: showSweetAlert 0.3s; }\n  .swal2-show.swal2-noanimation {\n    -webkit-animation: none;\n            animation: none; }\n\n.swal2-hide {\n  -webkit-animation: hideSweetAlert 0.15s forwards;\n          animation: hideSweetAlert 0.15s forwards; }\n  .swal2-hide.swal2-noanimation {\n    -webkit-animation: none;\n            animation: none; }\n\n@-webkit-keyframes animate-success-tip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@keyframes animate-success-tip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@-webkit-keyframes animate-success-long {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@keyframes animate-success-long {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    -webkit-transform: rotate(-45deg);\n            transform: rotate(-45deg); }\n  5% {\n    -webkit-transform: rotate(-45deg);\n            transform: rotate(-45deg); }\n  12% {\n    -webkit-transform: rotate(-405deg);\n            transform: rotate(-405deg); }\n  100% {\n    -webkit-transform: rotate(-405deg);\n            transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n  0% {\n    -webkit-transform: rotate(-45deg);\n            transform: rotate(-45deg); }\n  5% {\n    -webkit-transform: rotate(-45deg);\n            transform: rotate(-45deg); }\n  12% {\n    -webkit-transform: rotate(-405deg);\n            transform: rotate(-405deg); }\n  100% {\n    -webkit-transform: rotate(-405deg);\n            transform: rotate(-405deg); } }\n\n.animate-success-tip {\n  -webkit-animation: animate-success-tip 0.75s;\n          animation: animate-success-tip 0.75s; }\n\n.animate-success-long {\n  -webkit-animation: animate-success-long 0.75s;\n          animation: animate-success-long 0.75s; }\n\n.swal2-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n          animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animate-error-icon {\n  0% {\n    -webkit-transform: rotateX(100deg);\n            transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform: rotateX(0deg);\n            transform: rotateX(0deg);\n    opacity: 1; } }\n\n@keyframes animate-error-icon {\n  0% {\n    -webkit-transform: rotateX(100deg);\n            transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform: rotateX(0deg);\n            transform: rotateX(0deg);\n    opacity: 1; } }\n\n.animate-error-icon {\n  -webkit-animation: animate-error-icon 0.5s;\n          animation: animate-error-icon 0.5s; }\n\n@-webkit-keyframes animate-x-mark {\n  0% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    -webkit-transform: scale(1.15);\n            transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n@keyframes animate-x-mark {\n  0% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    -webkit-transform: scale(0.4);\n            transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    -webkit-transform: scale(1.15);\n            transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n.animate-x-mark {\n  -webkit-animation: animate-x-mark 0.5s;\n          animation: animate-x-mark 0.5s; }\n\n@-webkit-keyframes pulse-warning {\n  0% {\n    border-color: #f8d486; }\n  100% {\n    border-color: #f8bb86; } }\n\n@keyframes pulse-warning {\n  0% {\n    border-color: #f8d486; }\n  100% {\n    border-color: #f8bb86; } }\n\n.pulse-warning {\n  -webkit-animation: pulse-warning 0.75s infinite alternate;\n          animation: pulse-warning 0.75s infinite alternate; }\n\n@-webkit-keyframes rotate-loading {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes rotate-loading {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/sweet-alert2/sweetalert2.js",
    "content": "/*!\n * sweetalert2 v6.1.1\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Sweetalert2 = factory());\n}(this, (function () { 'use strict';\n\nvar swalPrefix = 'swal2-';\n\nvar prefix = function prefix(items) {\n  var result = {};\n  for (var i in items) {\n    result[items[i]] = swalPrefix + items[i];\n  }\n  return result;\n};\n\nvar swalClasses = prefix(['container', 'in', 'iosfix', 'modal', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'spacer', 'confirm', 'cancel', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', 'loading', 'styled']);\n\nvar iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);\n\nvar defaultParams = {\n  title: '',\n  text: '',\n  html: '',\n  type: null,\n  customClass: '',\n  animation: true,\n  allowOutsideClick: true,\n  allowEscapeKey: true,\n  showConfirmButton: true,\n  showCancelButton: false,\n  preConfirm: null,\n  confirmButtonText: 'OK',\n  confirmButtonColor: '#3085d6',\n  confirmButtonClass: null,\n  cancelButtonText: 'Cancel',\n  cancelButtonColor: '#aaa',\n  cancelButtonClass: null,\n  buttonsStyling: true,\n  reverseButtons: false,\n  focusCancel: false,\n  showCloseButton: false,\n  showLoaderOnConfirm: false,\n  imageUrl: null,\n  imageWidth: null,\n  imageHeight: null,\n  imageClass: null,\n  timer: null,\n  width: 500,\n  padding: 20,\n  background: '#fff',\n  input: null,\n  inputPlaceholder: '',\n  inputValue: '',\n  inputOptions: {},\n  inputAutoTrim: true,\n  inputClass: null,\n  inputAttributes: {},\n  inputValidator: null,\n  progressSteps: [],\n  currentProgressStep: null,\n  progressStepsDistance: '40px',\n  onOpen: null,\n  onClose: null\n};\n\nvar sweetHTML = ('\\n  <div class=\"' + swalClasses.modal + '\" style=\"display: none\" tabIndex=\"-1\">\\n    <ul class=\"' + swalClasses.progresssteps + '\"></ul>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.error + '\">\\n      <span class=\"x-mark\"><span class=\"line left\"></span><span class=\"line right\"></span></span>\\n    </div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.question + '\">?</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.warning + '\">!</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.info + '\">i</div>\\n    <div class=\"' + swalClasses.icon + ' ' + iconTypes.success + '\">\\n      <span class=\"line tip\"></span> <span class=\"line long\"></span>\\n      <div class=\"placeholder\"></div> <div class=\"fix\"></div>\\n    </div>\\n    <img class=\"' + swalClasses.image + '\">\\n    <h2 class=\"' + swalClasses.title + '\"></h2>\\n    <div class=\"' + swalClasses.content + '\"></div>\\n    <input class=\"' + swalClasses.input + '\">\\n    <input type=\"file\" class=\"' + swalClasses.file + '\">\\n    <div class=\"' + swalClasses.range + '\">\\n      <output></output>\\n      <input type=\"range\">\\n    </div>\\n    <select class=\"' + swalClasses.select + '\"></select>\\n    <div class=\"' + swalClasses.radio + '\"></div>\\n    <label for=\"' + swalClasses.checkbox + '\" class=\"' + swalClasses.checkbox + '\">\\n      <input type=\"checkbox\">\\n    </label>\\n    <textarea class=\"' + swalClasses.textarea + '\"></textarea>\\n    <div class=\"' + swalClasses.validationerror + '\"></div>\\n    <hr class=\"' + swalClasses.spacer + '\">\\n    <button type=\"button\" class=\"' + swalClasses.confirm + '\">OK</button>\\n    <button type=\"button\" class=\"' + swalClasses.cancel + '\">Cancel</button>\\n    <span class=\"' + swalClasses.close + '\">&times;</span>\\n  </div>\\n').replace(/(^|\\n)\\s*/g, '');\n\nvar sweetContainer = void 0;\n\nvar existingSweetContainers = document.getElementsByClassName(swalClasses.container);\n\nif (existingSweetContainers.length) {\n  sweetContainer = existingSweetContainers[0];\n} else {\n  sweetContainer = document.createElement('div');\n  sweetContainer.className = swalClasses.container;\n  sweetContainer.innerHTML = sweetHTML;\n}\n\n/*\n * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)\n */\nvar colorLuminance = function colorLuminance(hex, lum) {\n  // Validate hex string\n  hex = String(hex).replace(/[^0-9a-f]/gi, '');\n  if (hex.length < 6) {\n    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n  }\n  lum = lum || 0;\n\n  // Convert to decimal and change luminosity\n  var rgb = '#';\n  for (var i = 0; i < 3; i++) {\n    var c = parseInt(hex.substr(i * 2, 2), 16);\n    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);\n    rgb += ('00' + c).substr(c.length);\n  }\n\n  return rgb;\n};\n\n/* global MouseEvent */\n\n// Remember state in cases where opening and handling a modal will fiddle with it.\nvar states = {\n  previousWindowKeyDown: null,\n  previousActiveElement: null,\n  previousBodyPadding: null\n};\n\n/*\n * Add modal + overlay to DOM\n */\nvar init = function init() {\n  if (typeof document === 'undefined') {\n    console.error('SweetAlert2 requires document to initialize');\n    return;\n  } else if (document.getElementsByClassName(swalClasses.container).length) {\n    return;\n  }\n\n  document.body.appendChild(sweetContainer);\n\n  var modal = getModal();\n  var input = getChildByClass(modal, swalClasses.input);\n  var file = getChildByClass(modal, swalClasses.file);\n  var range = modal.querySelector('.' + swalClasses.range + ' input');\n  var rangeOutput = modal.querySelector('.' + swalClasses.range + ' output');\n  var select = getChildByClass(modal, swalClasses.select);\n  var checkbox = modal.querySelector('.' + swalClasses.checkbox + ' input');\n  var textarea = getChildByClass(modal, swalClasses.textarea);\n\n  input.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  input.onkeydown = function (event) {\n    setTimeout(function () {\n      if (event.keyCode === 13) {\n        event.stopPropagation();\n        sweetAlert.clickConfirm();\n      }\n    }, 0);\n  };\n\n  file.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  range.oninput = function () {\n    sweetAlert.resetValidationError();\n    rangeOutput.value = range.value;\n  };\n\n  range.onchange = function () {\n    sweetAlert.resetValidationError();\n    range.previousSibling.value = range.value;\n  };\n\n  select.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  checkbox.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  textarea.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  return modal;\n};\n\n/*\n * Manipulate DOM\n */\nvar elementByClass = function elementByClass(className) {\n  return sweetContainer.querySelector('.' + className);\n};\n\nvar getModal = function getModal() {\n  return document.body.querySelector('.' + swalClasses.modal) || init();\n};\n\nvar getIcons = function getIcons() {\n  var modal = getModal();\n  return modal.querySelectorAll('.' + swalClasses.icon);\n};\n\nvar getTitle = function getTitle() {\n  return elementByClass(swalClasses.title);\n};\n\nvar getContent = function getContent() {\n  return elementByClass(swalClasses.content);\n};\n\nvar getImage = function getImage() {\n  return elementByClass(swalClasses.image);\n};\n\nvar getSpacer = function getSpacer() {\n  return elementByClass(swalClasses.spacer);\n};\n\nvar getProgressSteps = function getProgressSteps() {\n  return elementByClass(swalClasses.progresssteps);\n};\n\nvar getValidationError = function getValidationError() {\n  return elementByClass(swalClasses.validationerror);\n};\n\nvar getConfirmButton = function getConfirmButton() {\n  return elementByClass(swalClasses.confirm);\n};\n\nvar getCancelButton = function getCancelButton() {\n  return elementByClass(swalClasses.cancel);\n};\n\nvar getCloseButton = function getCloseButton() {\n  return elementByClass(swalClasses.close);\n};\n\nvar getFocusableElements = function getFocusableElements(focusCancel) {\n  var buttons = [getConfirmButton(), getCancelButton()];\n  if (focusCancel) {\n    buttons.reverse();\n  }\n  return buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button:not([class^=' + swalPrefix + ']), input:not([type=hidden]), textarea, select')));\n};\n\nvar hasClass = function hasClass(elem, className) {\n  if (elem.classList) {\n    return elem.classList.contains(className);\n  }\n  return false;\n};\n\nvar focusInput = function focusInput(input) {\n  input.focus();\n\n  // place cursor at end of text in text input\n  if (input.type !== 'file') {\n    // http://stackoverflow.com/a/2345915/1331425\n    var val = input.value;\n    input.value = '';\n    input.value = val;\n  }\n};\n\nvar addClass = function addClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.add(className);\n  });\n};\n\nvar removeClass = function removeClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.remove(className);\n  });\n};\n\nvar getChildByClass = function getChildByClass(elem, className) {\n  for (var i = 0; i < elem.childNodes.length; i++) {\n    if (hasClass(elem.childNodes[i], className)) {\n      return elem.childNodes[i];\n    }\n  }\n};\n\nvar show = function show(elem, display) {\n  if (!display) {\n    display = 'block';\n  }\n  elem.style.opacity = '';\n  elem.style.display = display;\n};\n\nvar hide = function hide(elem) {\n  elem.style.opacity = '';\n  elem.style.display = 'none';\n};\n\nvar empty = function empty(elem) {\n  while (elem.firstChild) {\n    elem.removeChild(elem.firstChild);\n  }\n};\n\n// borrowed from jqeury $(elem).is(':visible') implementation\nvar isVisible = function isVisible(elem) {\n  return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;\n};\n\nvar removeStyleProperty = function removeStyleProperty(elem, property) {\n  if (elem.style.removeProperty) {\n    elem.style.removeProperty(property);\n  } else {\n    elem.style.removeAttribute(property);\n  }\n};\n\n\n\n\n\n\n\nvar fireClick = function fireClick(node) {\n  // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/\n  // Then fixed for today's Chrome browser.\n  if (typeof MouseEvent === 'function') {\n    // Up-to-date approach\n    var mevt = new MouseEvent('click', {\n      view: window,\n      bubbles: false,\n      cancelable: true\n    });\n    node.dispatchEvent(mevt);\n  } else if (document.createEvent) {\n    // Fallback\n    var evt = document.createEvent('MouseEvents');\n    evt.initEvent('click', false, false);\n    node.dispatchEvent(evt);\n  } else if (document.createEventObject) {\n    node.fireEvent('onclick');\n  } else if (typeof node.onclick === 'function') {\n    node.onclick();\n  }\n};\n\nvar animationEndEvent = function () {\n  var testEl = document.createElement('div');\n  var transEndEventNames = {\n    'WebkitAnimation': 'webkitAnimationEnd',\n    'OAnimation': 'oAnimationEnd oanimationend',\n    'msAnimation': 'MSAnimationEnd',\n    'animation': 'animationend'\n  };\n  for (var i in transEndEventNames) {\n    if (transEndEventNames.hasOwnProperty(i) && testEl.style[i] !== undefined) {\n      return transEndEventNames[i];\n    }\n  }\n\n  return false;\n}();\n\n// Reset the page to its previous state\nvar resetPrevState = function resetPrevState() {\n  var modal = getModal();\n  window.onkeydown = states.previousWindowKeyDown;\n  if (states.previousActiveElement && states.previousActiveElement.focus) {\n    states.previousActiveElement.focus();\n  }\n  clearTimeout(modal.timeout);\n};\n\n// Measure width of scrollbar\n// https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286\nvar measureScrollbar = function measureScrollbar() {\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '50px';\n  scrollDiv.style.height = '50px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarWidth;\n};\n\n// JavaScript Debounce Function\n// Simplivied version of https://davidwalsh.name/javascript-debounce-function\nvar debounce = function debounce(func, wait) {\n  var timeout = void 0;\n  return function () {\n    var later = function later() {\n      timeout = null;\n      func();\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent !== null) {\n      set(parent, property, value, receiver);\n    }\n  } else if (\"value\" in desc && desc.writable) {\n    desc.value = value;\n  } else {\n    var setter = desc.set;\n\n    if (setter !== undefined) {\n      setter.call(receiver, value);\n    }\n  }\n\n  return value;\n};\n\nvar modalParams = _extends({}, defaultParams);\nvar queue = [];\nvar swal2Observer = void 0;\n\n/*\n * Set type, text and actions on modal\n */\nvar setParameters = function setParameters(params) {\n  var modal = getModal();\n\n  for (var param in params) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n    }\n  }\n\n  // set modal width and margin-left\n  modal.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width;\n\n  modal.style.padding = params.padding + 'px';\n  modal.style.background = params.background;\n\n  var title = getTitle();\n  var content = getContent();\n  var confirmButton = getConfirmButton();\n  var cancelButton = getCancelButton();\n  var closeButton = getCloseButton();\n\n  // Title\n  title.innerHTML = params.title.split('\\n').join('<br>');\n\n  // Content\n  if (params.text || params.html) {\n    if (_typeof(params.html) === 'object') {\n      content.innerHTML = '';\n      if (0 in params.html) {\n        for (var i = 0; i in params.html; i++) {\n          content.appendChild(params.html[i].cloneNode(true));\n        }\n      } else {\n        content.appendChild(params.html.cloneNode(true));\n      }\n    } else if (params.html) {\n      content.innerHTML = params.html;\n    } else if (params.text) {\n      content.innerHTML = ('' + params.text).split('\\n').join('<br>');\n    }\n    show(content);\n  } else {\n    hide(content);\n  }\n\n  // Close button\n  if (params.showCloseButton) {\n    show(closeButton);\n  } else {\n    hide(closeButton);\n  }\n\n  // Custom Class\n  modal.className = swalClasses.modal;\n  if (params.customClass) {\n    addClass(modal, params.customClass);\n  }\n\n  // Progress steps\n  var progressStepsContainer = getProgressSteps();\n  var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);\n  if (params.progressSteps.length) {\n    show(progressStepsContainer);\n    empty(progressStepsContainer);\n    if (currentProgressStep >= params.progressSteps.length) {\n      console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    params.progressSteps.forEach(function (step, index) {\n      var circle = document.createElement('li');\n      addClass(circle, swalClasses.progresscircle);\n      circle.innerHTML = step;\n      if (index === currentProgressStep) {\n        addClass(circle, swalClasses.activeprogressstep);\n      }\n      progressStepsContainer.appendChild(circle);\n      if (index !== params.progressSteps.length - 1) {\n        var line = document.createElement('li');\n        addClass(line, swalClasses.progressline);\n        line.style.width = params.progressStepsDistance;\n        progressStepsContainer.appendChild(line);\n      }\n    });\n  } else {\n    hide(progressStepsContainer);\n  }\n\n  // Icon\n  var icons = getIcons();\n  for (var _i = 0; _i < icons.length; _i++) {\n    hide(icons[_i]);\n  }\n  if (params.type) {\n    var validType = false;\n    for (var iconType in iconTypes) {\n      if (params.type === iconType) {\n        validType = true;\n        break;\n      }\n    }\n    if (!validType) {\n      console.error('SweetAlert2: Unknown alert type: ' + params.type);\n      return false;\n    }\n    var icon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);\n    show(icon);\n\n    // Animate icon\n    switch (params.type) {\n      case 'success':\n        addClass(icon, 'animate');\n        addClass(icon.querySelector('.tip'), 'animate-success-tip');\n        addClass(icon.querySelector('.long'), 'animate-success-long');\n        break;\n      case 'error':\n        addClass(icon, 'animate-error-icon');\n        addClass(icon.querySelector('.x-mark'), 'animate-x-mark');\n        break;\n      case 'warning':\n        addClass(icon, 'pulse-warning');\n        break;\n      default:\n        break;\n    }\n  }\n\n  // Custom image\n  var image = getImage();\n  if (params.imageUrl) {\n    image.setAttribute('src', params.imageUrl);\n    show(image);\n\n    if (params.imageWidth) {\n      image.setAttribute('width', params.imageWidth);\n    } else {\n      image.removeAttribute('width');\n    }\n\n    if (params.imageHeight) {\n      image.setAttribute('height', params.imageHeight);\n    } else {\n      image.removeAttribute('height');\n    }\n\n    image.className = swalClasses.image;\n    if (params.imageClass) {\n      addClass(image, params.imageClass);\n    }\n  } else {\n    hide(image);\n  }\n\n  // Cancel button\n  if (params.showCancelButton) {\n    cancelButton.style.display = 'inline-block';\n  } else {\n    hide(cancelButton);\n  }\n\n  // Confirm button\n  if (params.showConfirmButton) {\n    removeStyleProperty(confirmButton, 'display');\n  } else {\n    hide(confirmButton);\n  }\n\n  // Buttons spacer\n  var spacer = getSpacer();\n  if (!params.showConfirmButton && !params.showCancelButton) {\n    hide(spacer);\n  } else {\n    show(spacer);\n  }\n\n  // Edit text on cancel and confirm buttons\n  confirmButton.innerHTML = params.confirmButtonText;\n  cancelButton.innerHTML = params.cancelButtonText;\n\n  // Set buttons to selected background colors\n  if (params.buttonsStyling) {\n    confirmButton.style.backgroundColor = params.confirmButtonColor;\n    cancelButton.style.backgroundColor = params.cancelButtonColor;\n  }\n\n  // Add buttons custom classes\n  confirmButton.className = swalClasses.confirm;\n  addClass(confirmButton, params.confirmButtonClass);\n  cancelButton.className = swalClasses.cancel;\n  addClass(cancelButton, params.cancelButtonClass);\n\n  // Buttons styling\n  if (params.buttonsStyling) {\n    addClass(confirmButton, swalClasses.styled);\n    addClass(cancelButton, swalClasses.styled);\n  } else {\n    removeClass(confirmButton, swalClasses.styled);\n    removeClass(cancelButton, swalClasses.styled);\n\n    confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';\n    cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';\n  }\n\n  // CSS animation\n  if (params.animation === true) {\n    removeClass(modal, swalClasses.noanimation);\n  } else {\n    addClass(modal, swalClasses.noanimation);\n  }\n};\n\n/*\n * Animations\n */\nvar openModal = function openModal(animation, onComplete) {\n  var modal = getModal();\n  if (animation) {\n    addClass(modal, swalClasses.show);\n    addClass(sweetContainer, swalClasses.fade);\n    removeClass(modal, swalClasses.hide);\n  } else {\n    removeClass(modal, swalClasses.fade);\n  }\n  show(modal);\n\n  // scrolling is 'hidden' until animation is done, after that 'auto'\n  sweetContainer.style.overflowY = 'hidden';\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      sweetContainer.style.overflowY = 'auto';\n    });\n  } else {\n    sweetContainer.style.overflowY = 'auto';\n  }\n\n  addClass(sweetContainer, swalClasses.in);\n  addClass(document.body, swalClasses.in);\n  fixScrollbar();\n  iOSfix();\n  states.previousActiveElement = document.activeElement;\n  if (onComplete !== null && typeof onComplete === 'function') {\n    onComplete(modal);\n  }\n};\n\nvar fixScrollbar = function fixScrollbar() {\n  // for queues, do not do this more than once\n  if (states.previousBodyPadding !== null) {\n    return;\n  }\n  // if the body has overflow\n  if (document.body.scrollHeight > window.innerHeight) {\n    // add padding so the content doesn't shift after removal of scrollbar\n    states.previousBodyPadding = document.body.style.paddingRight;\n    document.body.style.paddingRight = measureScrollbar() + 'px';\n  }\n};\n\nvar undoScrollbar = function undoScrollbar() {\n  if (states.previousBodyPadding !== null) {\n    document.body.style.paddingRight = states.previousBodyPadding;\n    states.previousBodyPadding = null;\n  }\n};\n\n// Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425\nvar iOSfix = function iOSfix() {\n  var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n  if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n    var offset = document.body.scrollTop;\n    document.body.style.top = offset * -1 + 'px';\n    addClass(document.body, swalClasses.iosfix);\n  }\n};\n\nvar undoIOSfix = function undoIOSfix() {\n  if (hasClass(document.body, swalClasses.iosfix)) {\n    var offset = parseInt(document.body.style.top, 10);\n    removeClass(document.body, swalClasses.iosfix);\n    document.body.scrollTop = offset * -1;\n  }\n};\n\nvar modalDependant = function modalDependant() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (args[0] === undefined) {\n    console.error('SweetAlert2 expects at least 1 attribute!');\n    return false;\n  }\n\n  var params = _extends({}, modalParams);\n\n  switch (_typeof(args[0])) {\n    case 'string':\n      params.title = args[0];\n      params.text = args[1];\n      params.type = args[2];\n\n      break;\n\n    case 'object':\n      _extends(params, args[0]);\n      params.extraParams = args[0].extraParams;\n\n      if (params.input === 'email' && params.inputValidator === null) {\n        params.inputValidator = function (email) {\n          return new Promise(function (resolve, reject) {\n            var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/;\n            if (emailRegex.test(email)) {\n              resolve();\n            } else {\n              reject('Invalid email address');\n            }\n          });\n        };\n      }\n      break;\n\n    default:\n      console.error('SweetAlert2: Unexpected type of argument! Expected \"string\" or \"object\", got ' + _typeof(args[0]));\n      return false;\n  }\n\n  setParameters(params);\n\n  var modal = getModal();\n\n  return new Promise(function (resolve, reject) {\n    // Close on timer\n    if (params.timer) {\n      modal.timeout = setTimeout(function () {\n        sweetAlert.closeModal(params.onClose);\n        reject('timer');\n      }, params.timer);\n    }\n\n    // Get input element by specified type or, if type isn't specified, by params.input\n    var getInput = function getInput(inputType) {\n      inputType = inputType || params.input;\n      switch (inputType) {\n        case 'select':\n        case 'textarea':\n        case 'file':\n          return getChildByClass(modal, swalClasses[inputType]);\n        case 'checkbox':\n          return modal.querySelector('.' + swalClasses.checkbox + ' input');\n        case 'radio':\n          return modal.querySelector('.' + swalClasses.radio + ' input:checked') || modal.querySelector('.' + swalClasses.radio + ' input:first-child');\n        case 'range':\n          return modal.querySelector('.' + swalClasses.range + ' input');\n        default:\n          return getChildByClass(modal, swalClasses.input);\n      }\n    };\n\n    // Get the value of the modal input\n    var getInputValue = function getInputValue() {\n      var input = getInput();\n      if (!input) {\n        return null;\n      }\n      switch (params.input) {\n        case 'checkbox':\n          return input.checked ? 1 : 0;\n        case 'radio':\n          return input.checked ? input.value : null;\n        case 'file':\n          return input.files.length ? input.files[0] : null;\n        default:\n          return params.inputAutoTrim ? input.value.trim() : input.value;\n      }\n    };\n\n    // input autofocus\n    if (params.input) {\n      setTimeout(function () {\n        var input = getInput();\n        if (input) {\n          focusInput(input);\n        }\n      }, 0);\n    }\n\n    var confirm = function confirm(value) {\n      if (params.showLoaderOnConfirm) {\n        sweetAlert.showLoading();\n      }\n\n      if (params.preConfirm) {\n        params.preConfirm(value, params.extraParams).then(function (preConfirmValue) {\n          sweetAlert.closeModal(params.onClose);\n          resolve(preConfirmValue || value);\n        }, function (error) {\n          sweetAlert.hideLoading();\n          if (error) {\n            sweetAlert.showValidationError(error);\n          }\n        });\n      } else {\n        sweetAlert.closeModal(params.onClose);\n        resolve(value);\n      }\n    };\n\n    // Mouse interactions\n    var onButtonEvent = function onButtonEvent(event) {\n      var e = event || window.event;\n      var target = e.target || e.srcElement;\n      var confirmButton = getConfirmButton();\n      var cancelButton = getCancelButton();\n      var targetedConfirm = confirmButton === target || confirmButton.contains(target);\n      var targetedCancel = cancelButton === target || cancelButton.contains(target);\n\n      switch (e.type) {\n        case 'mouseover':\n        case 'mouseup':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);\n            }\n          }\n          break;\n        case 'mouseout':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = params.confirmButtonColor;\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = params.cancelButtonColor;\n            }\n          }\n          break;\n        case 'mousedown':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);\n            }\n          }\n          break;\n        case 'click':\n          // Clicked 'confirm'\n          if (targetedConfirm && sweetAlert.isVisible()) {\n            if (params.input) {\n              (function () {\n                var inputValue = getInputValue();\n\n                if (params.inputValidator) {\n                  sweetAlert.disableInput();\n                  params.inputValidator(inputValue, params.extraParams).then(function () {\n                    sweetAlert.enableInput();\n                    confirm(inputValue);\n                  }, function (error) {\n                    sweetAlert.enableInput();\n                    if (error) {\n                      sweetAlert.showValidationError(error);\n                    }\n                  });\n                } else {\n                  confirm(inputValue);\n                }\n              })();\n            } else {\n              confirm(true);\n            }\n\n            // Clicked 'cancel'\n          } else if (targetedCancel && sweetAlert.isVisible()) {\n            sweetAlert.closeModal(params.onClose);\n            reject('cancel');\n          }\n          break;\n        default:\n      }\n    };\n\n    var buttons = modal.querySelectorAll('button');\n    for (var i = 0; i < buttons.length; i++) {\n      buttons[i].onclick = onButtonEvent;\n      buttons[i].onmouseover = onButtonEvent;\n      buttons[i].onmouseout = onButtonEvent;\n      buttons[i].onmousedown = onButtonEvent;\n    }\n\n    // Closing modal by close button\n    getCloseButton().onclick = function () {\n      sweetAlert.closeModal(params.onClose);\n      reject('close');\n    };\n\n    // Closing modal by overlay click\n    sweetContainer.onclick = function (e) {\n      if (e.target !== sweetContainer) {\n        return;\n      }\n      if (params.allowOutsideClick) {\n        sweetAlert.closeModal(params.onClose);\n        reject('overlay');\n      }\n    };\n\n    var confirmButton = getConfirmButton();\n    var cancelButton = getCancelButton();\n\n    // Reverse buttons if neede d\n    if (params.reverseButtons) {\n      confirmButton.parentNode.insertBefore(cancelButton, confirmButton);\n    } else {\n      confirmButton.parentNode.insertBefore(confirmButton, cancelButton);\n    }\n\n    // Focus handling\n    var setFocus = function setFocus(index, increment) {\n      var focusableElements = getFocusableElements(params.focusCancel);\n      // search for visible elements and select the next possible match\n      for (var _i2 = 0; _i2 < focusableElements.length; _i2++) {\n        index = index + increment;\n\n        // rollover to first item\n        if (index === focusableElements.length) {\n          index = 0;\n\n          // go to last item\n        } else if (index === -1) {\n          index = focusableElements.length - 1;\n        }\n\n        // determine if element is visible\n        var el = focusableElements[index];\n        if (isVisible(el)) {\n          return el.focus();\n        }\n      }\n    };\n\n    var handleKeyDown = function handleKeyDown(event) {\n      var e = event || window.event;\n      var keyCode = e.keyCode || e.which;\n\n      if ([9, 13, 32, 27].indexOf(keyCode) === -1) {\n        // Don't do work on keys we don't care about.\n        return;\n      }\n\n      var targetElement = e.target || e.srcElement;\n\n      var focusableElements = getFocusableElements(params.focusCancel);\n      var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.\n      for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {\n        if (targetElement === focusableElements[_i3]) {\n          btnIndex = _i3;\n          break;\n        }\n      }\n\n      // TAB\n      if (keyCode === 9) {\n        if (!e.shiftKey) {\n          // Cycle to the next button\n          setFocus(btnIndex, 1);\n        } else {\n          // Cycle to the prev button\n          setFocus(btnIndex, -1);\n        }\n        e.stopPropagation();\n        e.preventDefault();\n\n        // ENTER/SPACE\n      } else {\n        if (keyCode === 13 || keyCode === 32) {\n          if (btnIndex === -1) {\n            // ENTER/SPACE clicked outside of a button.\n            if (params.focusCancel) {\n              fireClick(cancelButton, e);\n            } else {\n              fireClick(confirmButton, e);\n            }\n          }\n        } else if (keyCode === 27 && params.allowEscapeKey === true) {\n          sweetAlert.closeModal(params.onClose);\n          reject('esc');\n        }\n      }\n    };\n\n    states.previousWindowKeyDown = window.onkeydown;\n    window.onkeydown = handleKeyDown;\n\n    // Loading state\n    if (params.buttonsStyling) {\n      confirmButton.style.borderLeftColor = params.confirmButtonColor;\n      confirmButton.style.borderRightColor = params.confirmButtonColor;\n    }\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.showLoading = sweetAlert.enableLoading = function () {\n      show(getSpacer());\n      show(confirmButton, 'inline-block');\n      addClass(confirmButton, swalClasses.loading);\n      addClass(modal, swalClasses.loading);\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.hideLoading = sweetAlert.disableLoading = function () {\n      if (!params.showConfirmButton) {\n        hide(confirmButton);\n        if (!params.showCancelButton) {\n          hide(getSpacer());\n        }\n      }\n      removeClass(confirmButton, swalClasses.loading);\n      removeClass(modal, swalClasses.loading);\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.enableButtons = function () {\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.disableButtons = function () {\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    sweetAlert.enableConfirmButton = function () {\n      confirmButton.disabled = false;\n    };\n\n    sweetAlert.disableConfirmButton = function () {\n      confirmButton.disabled = true;\n    };\n\n    sweetAlert.enableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i4 = 0; _i4 < radios.length; _i4++) {\n          radios[_i4].disabled = false;\n        }\n      } else {\n        input.disabled = false;\n      }\n    };\n\n    sweetAlert.disableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input && input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i5 = 0; _i5 < radios.length; _i5++) {\n          radios[_i5].disabled = true;\n        }\n      } else {\n        input.disabled = true;\n      }\n    };\n\n    // Set modal min-height to disable scrolling inside the modal\n    sweetAlert.recalculateHeight = debounce(function () {\n      var modal = getModal();\n      var prevState = modal.style.display;\n      modal.style.minHeight = '';\n      show(modal);\n      modal.style.minHeight = modal.scrollHeight + 1 + 'px';\n      modal.style.display = prevState;\n    }, 50);\n\n    // Show block with validation error\n    sweetAlert.showValidationError = function (error) {\n      var validationError = getValidationError();\n      validationError.innerHTML = error;\n      show(validationError);\n\n      var input = getInput();\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    };\n\n    // Hide block with validation error\n    sweetAlert.resetValidationError = function () {\n      var validationError = getValidationError();\n      hide(validationError);\n      sweetAlert.recalculateHeight();\n\n      var input = getInput();\n      if (input) {\n        removeClass(input, swalClasses.inputerror);\n      }\n    };\n\n    sweetAlert.getProgressSteps = function () {\n      return params.progressSteps;\n    };\n\n    sweetAlert.setProgressSteps = function (progressSteps) {\n      params.progressSteps = progressSteps;\n      setParameters(params);\n    };\n\n    sweetAlert.showProgressSteps = function () {\n      show(getProgressSteps());\n    };\n\n    sweetAlert.hideProgressSteps = function () {\n      hide(getProgressSteps());\n    };\n\n    sweetAlert.enableButtons();\n    sweetAlert.hideLoading();\n    sweetAlert.resetValidationError();\n\n    // inputs\n    var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n    var input = void 0;\n    for (var _i6 = 0; _i6 < inputTypes.length; _i6++) {\n      var inputClass = swalClasses[inputTypes[_i6]];\n      var inputContainer = getChildByClass(modal, inputClass);\n      input = getInput(inputTypes[_i6]);\n\n      // set attributes\n      if (input) {\n        for (var j in input.attributes) {\n          if (input.attributes.hasOwnProperty(j)) {\n            var attrName = input.attributes[j].name;\n            if (attrName !== 'type' && attrName !== 'value') {\n              input.removeAttribute(attrName);\n            }\n          }\n        }\n        for (var attr in params.inputAttributes) {\n          input.setAttribute(attr, params.inputAttributes[attr]);\n        }\n      }\n\n      // set class\n      inputContainer.className = inputClass;\n      if (params.inputClass) {\n        addClass(inputContainer, params.inputClass);\n      }\n\n      hide(inputContainer);\n    }\n\n    var populateInputOptions = void 0;\n\n    (function () {\n      switch (params.input) {\n        case 'text':\n        case 'email':\n        case 'password':\n        case 'number':\n        case 'tel':\n          input = getChildByClass(modal, swalClasses.input);\n          input.value = params.inputValue;\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'file':\n          input = getChildByClass(modal, swalClasses.file);\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'range':\n          var range = getChildByClass(modal, swalClasses.range);\n          var rangeInput = range.querySelector('input');\n          var rangeOutput = range.querySelector('output');\n          rangeInput.value = params.inputValue;\n          rangeInput.type = params.input;\n          rangeOutput.value = params.inputValue;\n          show(range);\n          break;\n        case 'select':\n          var select = getChildByClass(modal, swalClasses.select);\n          select.innerHTML = '';\n          if (params.inputPlaceholder) {\n            var placeholder = document.createElement('option');\n            placeholder.innerHTML = params.inputPlaceholder;\n            placeholder.value = '';\n            placeholder.disabled = true;\n            placeholder.selected = true;\n            select.appendChild(placeholder);\n          }\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var optionValue in inputOptions) {\n              var option = document.createElement('option');\n              option.value = optionValue;\n              option.innerHTML = inputOptions[optionValue];\n              if (params.inputValue === optionValue) {\n                option.selected = true;\n              }\n              select.appendChild(option);\n            }\n            show(select);\n            select.focus();\n          };\n          break;\n        case 'radio':\n          var radio = getChildByClass(modal, swalClasses.radio);\n          radio.innerHTML = '';\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var radioValue in inputOptions) {\n              var id = 1;\n              var radioInput = document.createElement('input');\n              var radioLabel = document.createElement('label');\n              var radioLabelSpan = document.createElement('span');\n              radioInput.type = 'radio';\n              radioInput.name = swalClasses.radio;\n              radioInput.value = radioValue;\n              radioInput.id = swalClasses.radio + '-' + id++;\n              if (params.inputValue === radioValue) {\n                radioInput.checked = true;\n              }\n              radioLabelSpan.innerHTML = inputOptions[radioValue];\n              radioLabel.appendChild(radioInput);\n              radioLabel.appendChild(radioLabelSpan);\n              radioLabel.for = radioInput.id;\n              radio.appendChild(radioLabel);\n            }\n            show(radio);\n            var radios = radio.querySelectorAll('input');\n            if (radios.length) {\n              radios[0].focus();\n            }\n          };\n          break;\n        case 'checkbox':\n          var checkbox = getChildByClass(modal, swalClasses.checkbox);\n          var checkboxInput = getInput('checkbox');\n          checkboxInput.type = 'checkbox';\n          checkboxInput.value = 1;\n          checkboxInput.id = swalClasses.checkbox;\n          checkboxInput.checked = Boolean(params.inputValue);\n          var label = checkbox.getElementsByTagName('span');\n          if (label.length) {\n            checkbox.removeChild(label[0]);\n          }\n          label = document.createElement('span');\n          label.innerHTML = params.inputPlaceholder;\n          checkbox.appendChild(label);\n          show(checkbox);\n          break;\n        case 'textarea':\n          var textarea = getChildByClass(modal, swalClasses.textarea);\n          textarea.value = params.inputValue;\n          textarea.placeholder = params.inputPlaceholder;\n          show(textarea);\n          break;\n        case null:\n          break;\n        default:\n          console.error('SweetAlert2: Unexpected type of input! Expected \"text\", \"email\", \"password\", \"select\", \"checkbox\", \"textarea\" or \"file\", got \"' + params.input + '\"');\n          break;\n      }\n    })();\n\n    if (params.input === 'select' || params.input === 'radio') {\n      if (params.inputOptions instanceof Promise) {\n        sweetAlert.showLoading();\n        params.inputOptions.then(function (inputOptions) {\n          sweetAlert.hideLoading();\n          populateInputOptions(inputOptions);\n        });\n      } else if (_typeof(params.inputOptions) === 'object') {\n        populateInputOptions(params.inputOptions);\n      } else {\n        console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));\n      }\n    }\n\n    openModal(params.animation, params.onOpen);\n\n    // Focus the first element (input or button)\n    setFocus(-1, 1);\n\n    // fix scroll\n    sweetContainer.scrollTop = 0;\n\n    // Observe changes inside the modal and adjust height\n    if (typeof MutationObserver !== 'undefined' && !swal2Observer) {\n      swal2Observer = new MutationObserver(sweetAlert.recalculateHeight);\n      swal2Observer.observe(modal, { childList: true, characterData: true, subtree: true });\n    }\n  });\n};\n\n// SweetAlert entry point\nvar sweetAlert = function sweetAlert() {\n  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  if (sweetAlert.isVisible()) {\n    sweetAlert.close();\n  }\n\n  return modalDependant.apply(undefined, args);\n};\n\n/*\n * Global function to determine if swal2 modal is visible\n */\nsweetAlert.isVisible = function () {\n  var modal = getModal();\n  return isVisible(modal);\n};\n\n/*\n * Global function for chaining sweetAlert modals\n */\nsweetAlert.queue = function (steps) {\n  queue = steps;\n  var modal = getModal();\n  var resetQueue = function resetQueue() {\n    queue = [];\n    modal.removeAttribute('data-queue-step');\n  };\n  var queueResult = [];\n  return new Promise(function (resolve, reject) {\n    (function step(i, callback) {\n      if (i < queue.length) {\n        modal.setAttribute('data-queue-step', i);\n\n        sweetAlert(queue[i]).then(function (result) {\n          queueResult.push(result);\n          step(i + 1, callback);\n        }, function (dismiss) {\n          resetQueue();\n          reject(dismiss);\n        });\n      } else {\n        resetQueue();\n        resolve(queueResult);\n      }\n    })(0);\n  });\n};\n\n/*\n * Global function for getting the index of current modal in queue\n */\nsweetAlert.getQueueStep = function () {\n  return getModal().getAttribute('data-queue-step');\n};\n\n/*\n * Global function for inserting a modal to the queue\n */\nsweetAlert.insertQueueStep = function (step, index) {\n  if (index && index < queue.length) {\n    return queue.splice(index, 0, step);\n  }\n  return queue.push(step);\n};\n\n/*\n * Global function for deleting a modal from the queue\n */\nsweetAlert.deleteQueueStep = function (index) {\n  if (typeof queue[index] !== 'undefined') {\n    queue.splice(index, 1);\n  }\n};\n\n/*\n * Global function to close sweetAlert\n */\nsweetAlert.close = sweetAlert.closeModal = function (onComplete) {\n  var modal = getModal();\n  removeClass(modal, swalClasses.show);\n  addClass(modal, swalClasses.hide);\n\n  // Reset icon animations\n  var successIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.success);\n  removeClass(successIcon, 'animate');\n  removeClass(successIcon.querySelector('.tip'), 'animate-success-tip');\n  removeClass(successIcon.querySelector('.long'), 'animate-success-long');\n\n  var errorIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.error);\n  removeClass(errorIcon, 'animate-error-icon');\n  removeClass(errorIcon.querySelector('.x-mark'), 'animate-x-mark');\n\n  var warningIcon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes.warning);\n  removeClass(warningIcon, 'pulse-warning');\n\n  resetPrevState();\n\n  var hideModalAndResetState = function hideModalAndResetState() {\n    hide(modal);\n    modal.style.minHeight = '';\n    removeClass(sweetContainer, swalClasses.in);\n    removeClass(document.body, swalClasses.in);\n    undoScrollbar();\n    undoIOSfix();\n  };\n\n  // If animation is supported, animate\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      if (hasClass(modal, swalClasses.hide)) {\n        hideModalAndResetState();\n      }\n    });\n  } else {\n    // Otherwise, hide immediately\n    hideModalAndResetState();\n  }\n  if (onComplete !== null && typeof onComplete === 'function') {\n    onComplete(modal);\n  }\n};\n\n/*\n * Global function to click 'Confirm' button\n */\nsweetAlert.clickConfirm = function () {\n  return getConfirmButton().click();\n};\n\n/*\n * Global function to click 'Cancel' button\n */\nsweetAlert.clickCancel = function () {\n  return getCancelButton().click();\n};\n\n/**\n * Set default params for each popup\n * @param {Object} userParams\n */\nsweetAlert.setDefaults = function (userParams) {\n  if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {\n    return console.error('SweetAlert2: the argument for setDefaults() is required and has to be a object');\n  }\n\n  for (var param in userParams) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n      delete userParams[param];\n    }\n  }\n\n  _extends(modalParams, userParams);\n};\n\n/**\n * Reset default params for each popup\n */\nsweetAlert.resetDefaults = function () {\n  modalParams = _extends({}, defaultParams);\n};\n\nsweetAlert.noop = function () {};\n\nsweetAlert.version = '6.1.1';\n\nreturn sweetAlert;\n\n})));\nif (window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tablesaw/css/tablesaw.css",
    "content": "/*! Tablesaw - v2.0.2 - 2015-10-28\n* https://github.com/filamentgroup/tablesaw\n* Copyright (c) 2015 Filament Group; Licensed  */\n\ntable.tablesaw {\n  empty-cells: show;\n  max-width: 100%;\n  width: 100%;\n}\n\n.tablesaw {\n  border-collapse: collapse;\n  width: 100%;\n}\n\n/* Structure */\n\n.tablesaw {\n  border: 0;\n  padding: 0;\n}\n\n.tablesaw th,\n.tablesaw td {\n  box-sizing: border-box;\n  padding: .5em .7em;\n}\n\n.tablesaw thead tr:first-child th {\n  padding-top: .9em;\n  padding-bottom: .7em;\n}\n\n.tablesaw-enhanced .tablesaw-bar .btn {\n  border: 1px solid #ccc;\n  background: none;\n  background-color: #fafafa;\n  box-shadow: 0 1px 0 rgba(255,255,255,1);\n  color: #4a4a4a;\n  clear: both;\n  cursor: pointer;\n  display: block;\n  font: bold 20px/1 sans-serif;\n  margin: 0;\n  padding: .5em .85em .4em .85em;\n  position: relative;\n  text-align: center;\n  text-decoration: none;\n  text-transform: capitalize;\n  text-shadow: 0 1px 0 #fff;\n  width: 100%;\n  /* Theming */\n  background-image: -webkit-linear-gradient(top, rgba( 255,255,255,.1 ) 0%, rgba( 255,255,255,.1 ) 50%, rgba( 170,170,170,.1 ) 55%, rgba( 120,120,120,.15 ) 100%);\n  background-image: linear-gradient( top, rgba( 255,255,255,.1 ) 0%, rgba( 255,255,255,.1 ) 50%, rgba( 170,170,170,.1 ) 55%, rgba( 120,120,120,.15 ) 100% );\n  -webkit-appearance: none !important;\n  -moz-appearance: none !important;\n  box-sizing: border-box;\n  -webkit-font-smoothing: antialiased;\n  border-radius: .25em;\n}\n\n.tablesaw-enhanced .tablesaw-bar a.btn {\n  color: #1c95d4;\n}\n\n.tablesaw-enhanced .tablesaw-bar .btn:hover {\n  text-decoration: none;\n}\n\n/* Default radio/checkbox styling horizonal controlgroups. */\n\n.tablesaw-enhanced .tablesaw-bar .btn:active {\n  background-color: #ddd;\n  background-image: -webkit-linear-gradient(top, rgba( 100,100,100,.35 ) 0%, rgba( 255,255,255,0 ) 70%);\n  background-image: linear-gradient( top, rgba( 100,100,100,.35 ) 0%, rgba( 255,255,255,0 ) 70% );\n}\n\n.tablesaw-enhanced .tablesaw-bar .btn:hover,\n.tablesaw-enhanced .tablesaw-bar .btn:focus {\n  color: #208de3;\n  background-color: #fff;\n  outline: none;\n}\n\n.tablesaw-bar .btn:focus {\n  box-shadow: 0 0 .35em #4faeef !important;\n}\n\n.tablesaw-bar .btn-select select {\n  background: none;\n  border: none;\n  display: block;\n  position: absolute;\n  font-weight: inherit;\n  left: 0;\n  top: 0;\n  margin: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n  min-height: 1em;\n}\n\n.tablesaw-bar .btn-select select {\n  opacity: 0;\n  filter: alpha(opacity=0);\n  display: inline-block;\n  color: transparent;\n}\n\n.tablesaw-bar .btn select option {\n  background: #fff;\n  color: #000;\n  font-family: sans-serif;\n}\n\n.tablesaw-enhanced .tablesaw-bar .btn.btn-select {\n  color: #4d4d4d;\n  padding-right: 2.5em;\n  min-width: 7.25em;\n  text-align: left;\n  text-indent: 0;\n}\n\n.tablesaw-bar .btn.btn-small,\n.tablesaw-bar .btn.btn-micro {\n  display: inline-block;\n  width: auto;\n  height: auto;\n  position: relative;\n  top: 0;\n}\n\n.tablesaw-bar .btn.btn-small {\n  font-size: 1.0625em;\n  line-height: 19px;\n  padding: .3em 1em .3em 1em;\n}\n\n.tablesaw-bar .btn.btn-micro {\n  font-size: .8125em;\n  padding: .4em .7em .25em .7em;\n}\n\n.tablesaw-enhanced .tablesaw-bar .btn-select {\n  text-align: left;\n}\n\n.tablesaw-bar .btn-select:after {\n  background: #e5e5e5;\n  background: rgba(0,0,0,.1);\n  box-shadow: 0 2px 2px rgba(255,255,255,.25);\n  content: \" \";\n  display: block;\n  position: absolute;\n}\n\n.tablesaw-bar .btn-select.btn-small,\n.tablesaw-bar .btn-select.btn-micro {\n  padding-right: 1.5em;\n}\n\n.tablesaw-bar .btn-select:after {\n  background: none;\n  background-repeat: no-repeat;\n  background-position: .25em .45em;\n  content: \"\\25bc\";\n  font-size: .55em;\n  padding-top: 1.2em;\n  padding-left: 1em;\n  left: auto;\n  right: 0;\n  margin: 0;\n  top: 0;\n  bottom: 0;\n  width: 1.8em;\n}\n\n.tablesaw-bar .btn-select.btn-small:after,\n.tablesaw-bar .btn-select.btn-micro:after {\n  width: 1.2em;\n  font-size: .5em;\n  padding-top: 1em;\n  padding-right: .5em;\n  line-height: 1.65;\n  background: none;\n  box-shadow: none;\n  border-left-width: 0;\n}\n\n/* Column navigation buttons for swipe and columntoggle tables */\n\n.tablesaw-advance .btn {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  box-sizing: border-box;\n  text-shadow: 0 1px 0 #fff;\n  border-radius: .25em;\n}\n\n.tablesaw-advance .btn.btn-micro {\n  font-size: .8125em;\n  padding: .3em .7em .25em .7em;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn {\n  display: inline-block;\n  overflow: hidden;\n  width: 1.8em;\n  height: 1.8em;\n  background-position: 50% 50%;\n  margin-left: .5em;\n  position: relative;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.left:before,\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.right:before,\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.down:before,\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.up:before {\n  content: \"\\0020\";\n  overflow: hidden;\n  width: 0;\n  height: 0;\n  position: absolute;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.down:before {\n  left: .5em;\n  top: .65em;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid #808080;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.up:before {\n  left: .5em;\n  top: .65em;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #808080;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.left:before,\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.right:before {\n  top: .45em;\n  border-top: 5px solid transparent;\n  border-bottom: 5px solid transparent;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.left:before {\n  left: .6em;\n  border-right: 5px solid #808080;\n}\n\n.tablesaw-bar .tablesaw-advance a.tablesaw-nav-btn.right:before {\n  left: .7em;\n  border-left: 5px solid #808080;\n}\n\n.tablesaw-advance a.tablesaw-nav-btn.disabled {\n  opacity: .25;\n  filter: alpha(opacity=25);\n  cursor: default;\n  pointer-events: none;\n}\n\n/* Table Toolbar */\n\n.tablesaw-bar {\n  clear: both;\n  font-family: sans-serif;\n}\n\n.tablesaw-toolbar {\n  font-size: .875em;\n  float: left;\n}\n\n.tablesaw-toolbar label {\n  padding: .5em 0;\n  clear: both;\n  display: block;\n  color: #888;\n  margin-right: .5em;\n  text-transform: uppercase;\n}\n\n.tablesaw-bar .btn,\n.tablesaw-enhanced .tablesaw-bar .btn {\n  margin-top: .5em;\n  margin-bottom: .5em;\n}\n\n.tablesaw-bar .btn-select,\n.tablesaw-enhanced .tablesaw-bar .btn-select {\n  margin-bottom: 0;\n}\n\n.tablesaw-bar .tablesaw-toolbar .btn {\n  margin-left: .4em;\n  margin-top: 0;\n  text-transform: uppercase;\n  border: none;\n  box-shadow: none;\n  background: transparent;\n  font-family: sans-serif;\n  font-size: 1em;\n  padding-left: .3em;\n}\n\n.tablesaw-bar .tablesaw-toolbar .btn-select {\n  min-width: 0;\n}\n\n.tablesaw-bar .tablesaw-toolbar .btn-select:after {\n  padding-top: .9em;\n}\n\n.tablesaw-bar .tablesaw-toolbar select {\n  color: #888;\n  text-transform: none;\n  background: transparent;\n}\n\n.tablesaw-toolbar ~ table {\n  clear: both;\n}\n\n.tablesaw-toolbar .a11y-sm {\n  clip: rect(0 0 0 0);\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  width: 1px;\n}\n\n@media (min-width: 24em) {\n  .tablesaw-toolbar .a11y-sm {\n    clip: none;\n    height: auto;\n    width: auto;\n    position: static;\n    overflow: visible;\n  }\n}\n\ntable.tablesaw tbody th {\n  font-weight: bold;\n}\n\ntable.tablesaw thead th,\ntable.tablesaw thead td {\n  color: #444;\n  font-size: .9em;\n}\n\n.tablesaw th,\n.tablesaw td {\n  line-height: 1em;\n  text-align: left;\n  vertical-align: middle;\n}\n\n.tablesaw td,\n.tablesaw tbody th {\n  vertical-align: middle;\n  font-size: 1.17em;\n  /* 19px */\n}\n\n.tablesaw td .btn,\n.tablesaw tbody th .btn {\n  margin: 0;\n}\n\n.tablesaw thead {\n  border: 1px solid #e5e5e4;\n  background: #e2dfdc;\n  background-image: -webkit-linear-gradient(top, #fff, #e2dfdc);\n  background-image: linear-gradient(to bottom, #fff, #e2dfdc);\n}\n\n.tablesaw thead th {\n  font-weight: 100;\n  color: #777;\n  text-transform: uppercase;\n  text-shadow: 0 1px 0 #fff;\n  text-align: left;\n}\n\n.tablesaw thead tr:first-child th {\n  font-weight: normal;\n  font-family: sans-serif;\n  border-right: 1px solid #e4e1de;\n}\n\n/* Table rows have a gray bottom stroke by default */\n\n.tablesaw tbody tr {\n  border-bottom: 1px solid #dfdfdf;\n}\n\n.tablesaw caption {\n  text-align: left;\n  margin-bottom: 0;\n  opacity: .5;\n  filter: alpha(opacity=50);\n  line-height: 2.4;\n}\n\n@media (min-width: 25em) {\n  .tablesaw caption {\n    margin-bottom: .6em;\n    line-height: 1.2;\n  }\n}\n\n/* Stack */\n\n.tablesaw-cell-label-top {\n  text-transform: uppercase;\n  font-size: .9em;\n  font-weight: normal;\n}\n\n.tablesaw-cell-label {\n  font-size: .65em;\n  text-transform: uppercase;\n  color: #888;\n  font-family: sans-serif;\n}\n\n@media (min-width: 40em) {\n  .tablesaw td {\n    line-height: 2em;\n  }\n}\n\n@media only all {\n  .tablesaw-swipe .tablesaw-cell-persist {\n    border-right: 1px solid #e4e1de;\n  }\n\n  .tablesaw-swipe .tablesaw-cell-persist {\n    box-shadow: 3px 0 4px -1px #e4e1de;\n  }\n}\n\n/* Table rows have a gray bottom stroke by default */\n\n.tablesaw-stack tbody tr {\n  border-bottom: 1px solid #dfdfdf;\n}\n\n.tablesaw-stack td .tablesaw-cell-label,\n.tablesaw-stack th .tablesaw-cell-label {\n  display: none;\n}\n\n/* Mobile first styles: Begin with the stacked presentation at narrow widths */\n\n@media only all {\n  /* Show the table cells as a block level element */\n\n  .tablesaw-stack td,\n  .tablesaw-stack th {\n    text-align: left;\n    display: block;\n  }\n\n  .tablesaw-stack tr {\n    clear: both;\n    display: table-row;\n  }\n\n  /* Make the label elements a percentage width */\n\n  .tablesaw-stack td .tablesaw-cell-label,\n  .tablesaw-stack th .tablesaw-cell-label {\n    display: block;\n    padding: 0 .6em 0 0;\n    width: 30%;\n    display: inline-block;\n  }\n\n  /* For grouped headers, have a different style to visually separate the levels by classing the first label in each col group */\n\n  .tablesaw-stack th .tablesaw-cell-label-top,\n  .tablesaw-stack td .tablesaw-cell-label-top {\n    display: block;\n    padding: .4em 0;\n    margin: .4em 0;\n  }\n\n  .tablesaw-cell-label {\n    display: block;\n  }\n\n  /* Avoid double strokes when stacked */\n\n  .tablesaw-stack tbody th.group {\n    margin-top: -1px;\n  }\n\n  /* Avoid double strokes when stacked */\n\n  .tablesaw-stack th.group b.tablesaw-cell-label {\n    display: none !important;\n  }\n}\n\n@media (max-width: 39.9375em) {\n  .tablesaw-stack thead td,\n  .tablesaw-stack thead th {\n    display: none;\n  }\n\n  .tablesaw-stack tbody td,\n  .tablesaw-stack tbody th {\n    clear: left;\n    float: left;\n    width: 100%;\n  }\n\n  .tablesaw-cell-label {\n    vertical-align: top;\n  }\n\n  .tablesaw-cell-content {\n    max-width: 67%;\n    display: inline-block;\n  }\n\n  .tablesaw-stack td:empty,\n  .tablesaw-stack th:empty {\n    display: none;\n  }\n}\n\n/* Media query to show as a standard table at 560px (35em x 16px) or wider */\n\n@media (min-width: 40em) {\n  .tablesaw-stack tr {\n    display: table-row;\n  }\n\n  /* Show the table header rows */\n\n  .tablesaw-stack td,\n  .tablesaw-stack th,\n  .tablesaw-stack thead td,\n  .tablesaw-stack thead th {\n    display: table-cell;\n    margin: 0;\n  }\n\n  /* Hide the labels in each cell */\n\n  .tablesaw-stack td .tablesaw-cell-label,\n  .tablesaw-stack th .tablesaw-cell-label {\n    display: none !important;\n  }\n}\n\n.tablesaw-fix-persist {\n  table-layout: fixed;\n}\n\n@media only all {\n  /* Unchecked manually: Always hide */\n\n  .tablesaw-swipe th.tablesaw-cell-hidden,\n  .tablesaw-swipe td.tablesaw-cell-hidden {\n    display: none;\n  }\n}\n\n.btn.tablesaw-columntoggle-btn span {\n  text-indent: -9999px;\n  display: inline-block;\n}\n\n.tablesaw-columntoggle-btnwrap {\n  position: relative;\n  /* for dialog positioning */\n}\n\n.tablesaw-columntoggle-btnwrap .dialog-content {\n  padding: .5em;\n}\n\n.tablesaw-columntoggle tbody td {\n  line-height: 1.5;\n}\n\n/* Remove top/bottom margins around the fieldcontain on check list */\n\n.tablesaw-columntoggle-popup {\n  display: none;\n}\n\n.tablesaw-columntoggle-btnwrap.visible .tablesaw-columntoggle-popup {\n  display: block;\n  position: absolute;\n  top: 2em;\n  right: 0;\n  background-color: #fff;\n  padding: .5em .8em;\n  border: 1px solid #ccc;\n  box-shadow: 0 1px 2px #ccc;\n  border-radius: .2em;\n  z-index: 1;\n}\n\n.tablesaw-columntoggle-popup fieldset {\n  margin: 0;\n}\n\n/* Hide all prioritized columns by default */\n\n@media only all {\n  .tablesaw-columntoggle th.tablesaw-priority-6,\n  .tablesaw-columntoggle td.tablesaw-priority-6,\n  .tablesaw-columntoggle th.tablesaw-priority-5,\n  .tablesaw-columntoggle td.tablesaw-priority-5,\n  .tablesaw-columntoggle th.tablesaw-priority-4,\n  .tablesaw-columntoggle td.tablesaw-priority-4,\n  .tablesaw-columntoggle th.tablesaw-priority-3,\n  .tablesaw-columntoggle td.tablesaw-priority-3,\n  .tablesaw-columntoggle th.tablesaw-priority-2,\n  .tablesaw-columntoggle td.tablesaw-priority-2,\n  .tablesaw-columntoggle th.tablesaw-priority-1,\n  .tablesaw-columntoggle td.tablesaw-priority-1 {\n    display: none;\n  }\n}\n\n.tablesaw-columntoggle-btnwrap .dialog-content {\n  top: 0 !important;\n  right: 1em;\n  left: auto !important;\n  width: 12em;\n  max-width: 18em;\n  margin: -.5em auto 0;\n}\n\n.tablesaw-columntoggle-btnwrap .dialog-content:focus {\n  outline-style: none;\n}\n\n/* Preset breakpoints if \"\" class added to table */\n\n/* Show priority 1 at 320px (20em x 16px) */\n\n@media (min-width: 20em) {\n  .tablesaw-columntoggle th.tablesaw-priority-1,\n  .tablesaw-columntoggle td.tablesaw-priority-1 {\n    display: table-cell;\n  }\n}\n\n/* Show priority 2 at 480px (30em x 16px) */\n\n@media (min-width: 30em) {\n  .tablesaw-columntoggle th.tablesaw-priority-2,\n  .tablesaw-columntoggle td.tablesaw-priority-2 {\n    display: table-cell;\n  }\n}\n\n/* Show priority 3 at 640px (40em x 16px) */\n\n@media (min-width: 40em) {\n  .tablesaw-columntoggle th.tablesaw-priority-3,\n  .tablesaw-columntoggle td.tablesaw-priority-3 {\n    display: table-cell;\n  }\n\n  .tablesaw-columntoggle tbody td {\n    line-height: 2;\n  }\n}\n\n/* Show priority 4 at 800px (50em x 16px) */\n\n@media (min-width: 50em) {\n  .tablesaw-columntoggle th.tablesaw-priority-4,\n  .tablesaw-columntoggle td.tablesaw-priority-4 {\n    display: table-cell;\n  }\n}\n\n/* Show priority 5 at 960px (60em x 16px) */\n\n@media (min-width: 60em) {\n  .tablesaw-columntoggle th.tablesaw-priority-5,\n  .tablesaw-columntoggle td.tablesaw-priority-5 {\n    display: table-cell;\n  }\n}\n\n/* Show priority 6 at 1,120px (70em x 16px) */\n\n@media (min-width: 70em) {\n  .tablesaw-columntoggle th.tablesaw-priority-6,\n  .tablesaw-columntoggle td.tablesaw-priority-6 {\n    display: table-cell;\n  }\n}\n\n@media only all {\n  /* Unchecked manually: Always hide */\n\n  .tablesaw-columntoggle th.tablesaw-cell-hidden,\n  .tablesaw-columntoggle td.tablesaw-cell-hidden {\n    display: none;\n  }\n\n  /* Checked manually: Always show */\n\n  .tablesaw-columntoggle th.tablesaw-cell-visible,\n  .tablesaw-columntoggle td.tablesaw-cell-visible {\n    display: table-cell;\n  }\n}\n\n.tablesaw-columntoggle-popup .btn-group > label {\n  display: block;\n  padding: .2em 0;\n  white-space: nowrap;\n}\n\n.tablesaw-columntoggle-popup .btn-group > label input {\n  margin-right: .8em;\n}\n\n.tablesaw-sortable,\n.tablesaw-sortable thead,\n.tablesaw-sortable thead tr,\n.tablesaw-sortable thead tr th {\n  position: relative;\n}\n\n.tablesaw-sortable thead tr th {\n  padding-right: 1.6em;\n  vertical-align: top;\n}\n\n.tablesaw-sortable th.tablesaw-sortable-head,\n.tablesaw-sortable tr:first-child th.tablesaw-sortable-head {\n  padding: 0;\n}\n\n.tablesaw-sortable th.tablesaw-sortable-head button {\n  padding-top: .9em;\n  padding-bottom: .7em;\n  padding-left: .6em;\n  padding-right: 1.6em;\n}\n\n.tablesaw-sortable .tablesaw-sortable-head button {\n  min-width: 100%;\n  color: inherit;\n  background: transparent;\n  border: 0;\n  padding: 0;\n  text-align: left;\n  font: inherit;\n  text-transform: inherit;\n  position: relative;\n}\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after,\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  width: 7px;\n  height: 10px;\n  content: \"\\0020\";\n  position: absolute;\n  right: .5em;\n}\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after {\n  content: \"\\2191\";\n}\n\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  content: \"\\2193\";\n}\n\n.tablesaw-sortable .not-applicable:after {\n  content: \"--\";\n  display: block;\n}\n\n.tablesaw-sortable .not-applicable span {\n  display: none;\n}\n\n.tablesaw-advance {\n  float: right;\n}\n\n.tablesaw-advance.minimap {\n  margin-right: .4em;\n}\n\n.tablesaw-advance-dots {\n  float: left;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.tablesaw-advance-dots li {\n  display: table-cell;\n  margin: 0;\n  padding: .4em .2em;\n}\n\n.tablesaw-advance-dots li i {\n  width: .25em;\n  height: .25em;\n  background: #555;\n  border-radius: 100%;\n  display: inline-block;\n}\n\n.tablesaw-advance-dots-hide {\n  opacity: .25;\n  filter: alpha(opacity=25);\n  cursor: default;\n  pointer-events: none;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tablesaw/js/tablesaw-init.js",
    "content": "/*! Tablesaw - v2.0.2 - 2015-10-28\n* https://github.com/filamentgroup/tablesaw\n* Copyright (c) 2015 Filament Group; Licensed  */\n;(function( $ ) {\n\n\t// DOM-ready auto-init of plugins.\n\t// Many plugins bind to an \"enhance\" event to init themselves on dom ready, or when new markup is inserted into the DOM\n\t$( function(){\n\t\t$( document ).trigger( \"enhance.tablesaw\" );\n\t});\n\n})( jQuery );"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tablesaw/js/tablesaw.js",
    "content": "/*! Tablesaw - v2.0.2 - 2015-10-28\n* https://github.com/filamentgroup/tablesaw\n* Copyright (c) 2015 Filament Group; Licensed  */\n/*\n* tablesaw: A set of plugins for responsive tables\n* Stack and Column Toggle tables\n* Copyright (c) 2013 Filament Group, Inc.\n* MIT License\n*/\n\nif( typeof Tablesaw === \"undefined\" ) {\n\tTablesaw = {\n\t\ti18n: {\n\t\t\tmodes: [ 'Stack', 'Swipe', 'Toggle' ],\n\t\t\tcolumns: 'Col<span class=\\\"a11y-sm\\\">umn</span>s',\n\t\t\tcolumnBtnText: 'Columns',\n\t\t\tcolumnsDialogError: 'No eligible columns.',\n\t\t\tsort: 'Sort'\n\t\t},\n\t\t// cut the mustard\n\t\tmustard: 'querySelector' in document &&\n\t\t\t( !window.blackberry || window.WebKitPoint ) &&\n\t\t\t!window.operamini\n\t};\n}\nif( !Tablesaw.config ) {\n\tTablesaw.config = {};\n}\nif( Tablesaw.mustard ) {\n\tjQuery( document.documentElement ).addClass( 'tablesaw-enhanced' );\n}\n\n;(function( $ ) {\n\tvar pluginName = \"table\",\n\t\tclasses = {\n\t\t\ttoolbar: \"tablesaw-bar\"\n\t\t},\n\t\tevents = {\n\t\t\tcreate: \"tablesawcreate\",\n\t\t\tdestroy: \"tablesawdestroy\",\n\t\t\trefresh: \"tablesawrefresh\"\n\t\t},\n\t\tdefaultMode = \"stack\",\n\t\tinitSelector = \"table[data-tablesaw-mode],table[data-tablesaw-sortable]\";\n\n\tvar Table = function( element ) {\n\t\tif( !element ) {\n\t\t\tthrow new Error( \"Tablesaw requires an element.\" );\n\t\t}\n\n\t\tthis.table = element;\n\t\tthis.$table = $( element );\n\n\t\tthis.mode = this.$table.attr( \"data-tablesaw-mode\" ) || defaultMode;\n\n\t\tthis.init();\n\t};\n\n\tTable.prototype.init = function() {\n\t\t// assign an id if there is none\n\t\tif ( !this.$table.attr( \"id\" ) ) {\n\t\t\tthis.$table.attr( \"id\", pluginName + \"-\" + Math.round( Math.random() * 10000 ) );\n\t\t}\n\n\t\tthis.createToolbar();\n\n\t\tvar colstart = this._initCells();\n\n\t\tthis.$table.trigger( events.create, [ this, colstart ] );\n\t};\n\n\tTable.prototype._initCells = function() {\n\t\tvar colstart,\n\t\t\tthrs = this.table.querySelectorAll( \"thead tr\" ),\n\t\t\tself = this;\n\n\t\t$( thrs ).each( function(){\n\t\t\tvar coltally = 0;\n\n\t\t\t$( this ).children().each( function(){\n\t\t\t\tvar span = parseInt( this.getAttribute( \"colspan\" ), 10 ),\n\t\t\t\t\tsel = \":nth-child(\" + ( coltally + 1 ) + \")\";\n\n\t\t\t\tcolstart = coltally + 1;\n\n\t\t\t\tif( span ){\n\t\t\t\t\tfor( var k = 0; k < span - 1; k++ ){\n\t\t\t\t\t\tcoltally++;\n\t\t\t\t\t\tsel += \", :nth-child(\" + ( coltally + 1 ) + \")\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Store \"cells\" data on header as a reference to all cells in the same column as this TH\n\t\t\t\tthis.cells = self.$table.find(\"tr\").not( thrs[0] ).not( this ).children().filter( sel );\n\t\t\t\tcoltally++;\n\t\t\t});\n\t\t});\n\n\t\treturn colstart;\n\t};\n\n\tTable.prototype.refresh = function() {\n\t\tthis._initCells();\n\n\t\tthis.$table.trigger( events.refresh );\n\t};\n\n\tTable.prototype.createToolbar = function() {\n\t\t// Insert the toolbar\n\t\t// TODO move this into a separate component\n\t\tvar $toolbar = this.$table.prev().filter( '.' + classes.toolbar );\n\t\tif( !$toolbar.length ) {\n\t\t\t$toolbar = $( '<div>' )\n\t\t\t\t.addClass( classes.toolbar )\n\t\t\t\t.insertBefore( this.$table );\n\t\t}\n\t\tthis.$toolbar = $toolbar;\n\n\t\tif( this.mode ) {\n\t\t\tthis.$toolbar.addClass( 'mode-' + this.mode );\n\t\t}\n\t};\n\n\tTable.prototype.destroy = function() {\n\t\t// Don’t remove the toolbar. Some of the table features are not yet destroy-friendly.\n\t\tthis.$table.prev().filter( '.' + classes.toolbar ).each(function() {\n\t\t\tthis.className = this.className.replace( /\\bmode\\-\\w*\\b/gi, '' );\n\t\t});\n\n\t\tvar tableId = this.$table.attr( 'id' );\n\t\t$( document ).unbind( \".\" + tableId );\n\t\t$( window ).unbind( \".\" + tableId );\n\n\t\t// other plugins\n\t\tthis.$table.trigger( events.destroy, [ this ] );\n\n\t\tthis.$table.removeAttr( 'data-tablesaw-mode' );\n\n\t\tthis.$table.removeData( pluginName );\n\t};\n\n\t// Collection method.\n\t$.fn[ pluginName ] = function() {\n\t\treturn this.each( function() {\n\t\t\tvar $t = $( this );\n\n\t\t\tif( $t.data( pluginName ) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar table = new Table( this );\n\t\t\t$t.data( pluginName, table );\n\t\t});\n\t};\n\n\t$( document ).on( \"enhance.tablesaw\", function( e ) {\n\t\t// Cut the mustard\n\t\tif( Tablesaw.mustard ) {\n\t\t\t$( e.target ).find( initSelector )[ pluginName ]();\n\t\t}\n\t});\n\n}( jQuery ));\n\n;(function( win, $, undefined ){\n\n\tvar classes = {\n\t\tstackTable: 'tablesaw-stack',\n\t\tcellLabels: 'tablesaw-cell-label',\n\t\tcellContentLabels: 'tablesaw-cell-content'\n\t};\n\n\tvar data = {\n\t\tobj: 'tablesaw-stack'\n\t};\n\n\tvar attrs = {\n\t\tlabelless: 'data-tablesaw-no-labels',\n\t\thideempty: 'data-tablesaw-hide-empty'\n\t};\n\n\tvar Stack = function( element ) {\n\n\t\tthis.$table = $( element );\n\n\t\tthis.labelless = this.$table.is( '[' + attrs.labelless + ']' );\n\t\tthis.hideempty = this.$table.is( '[' + attrs.hideempty + ']' );\n\n\t\tif( !this.labelless ) {\n\t\t\t// allHeaders references headers, plus all THs in the thead, which may include several rows, or not\n\t\t\tthis.allHeaders = this.$table.find( \"th\" );\n\t\t}\n\n\t\tthis.$table.data( data.obj, this );\n\t};\n\n\tStack.prototype.init = function( colstart ) {\n\t\tthis.$table.addClass( classes.stackTable );\n\n\t\tif( this.labelless ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// get headers in reverse order so that top-level headers are appended last\n\t\tvar reverseHeaders = $( this.allHeaders );\n\t\tvar hideempty = this.hideempty;\n\t\t\n\t\t// create the hide/show toggles\n\t\treverseHeaders.each(function(){\n\t\t\tvar $t = $( this ),\n\t\t\t\t$cells = $( this.cells ).filter(function() {\n\t\t\t\t\treturn !$( this ).parent().is( \"[\" + attrs.labelless + \"]\" ) && ( !hideempty || !$( this ).is( \":empty\" ) );\n\t\t\t\t}),\n\t\t\t\thierarchyClass = $cells.not( this ).filter( \"thead th\" ).length && \" tablesaw-cell-label-top\",\n\t\t\t\t// TODO reduce coupling with sortable\n\t\t\t\t$sortableButton = $t.find( \".tablesaw-sortable-btn\" ),\n\t\t\t\thtml = $sortableButton.length ? $sortableButton.html() : $t.html();\n\n\t\t\tif( html !== \"\" ){\n\t\t\t\tif( hierarchyClass ){\n\t\t\t\t\tvar iteration = parseInt( $( this ).attr( \"colspan\" ), 10 ),\n\t\t\t\t\t\tfilter = \"\";\n\n\t\t\t\t\tif( iteration ){\n\t\t\t\t\t\tfilter = \"td:nth-child(\"+ iteration +\"n + \" + ( colstart ) +\")\";\n\t\t\t\t\t}\n\t\t\t\t\t$cells.filter( filter ).prepend( \"<b class='\" + classes.cellLabels + hierarchyClass + \"'>\" + html + \"</b>\"  );\n\t\t\t\t} else {\n\t\t\t\t\t$cells.wrapInner( \"<span class='\" + classes.cellContentLabels + \"'></span>\" );\n\t\t\t\t\t$cells.prepend( \"<b class='\" + classes.cellLabels + \"'>\" + html + \"</b>\"  );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tStack.prototype.destroy = function() {\n\t\tthis.$table.removeClass( classes.stackTable );\n\t\tthis.$table.find( '.' + classes.cellLabels ).remove();\n\t\tthis.$table.find( '.' + classes.cellContentLabels ).each(function() {\n\t\t\t$( this ).replaceWith( this.childNodes );\n\t\t});\n\t};\n\n\t// on tablecreate, init\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw, colstart ){\n\t\tif( Tablesaw.mode === 'stack' ){\n\t\t\tvar table = new Stack( Tablesaw.table );\n\t\t\ttable.init( colstart );\n\t\t}\n\n\t} );\n\n\t$( document ).on( \"tablesawdestroy\", function( e, Tablesaw ){\n\n\t\tif( Tablesaw.mode === 'stack' ){\n\t\t\t$( Tablesaw.table ).data( data.obj ).destroy();\n\t\t}\n\n\t} );\n\n}( this, jQuery ));\n;(function( $ ) {\n\tvar pluginName = \"tablesawbtn\",\n\t\tmethods = {\n\t\t\t_create: function(){\n\t\t\t\treturn $( this ).each(function() {\n\t\t\t\t\t$( this )\n\t\t\t\t\t\t.trigger( \"beforecreate.\" + pluginName )\n\t\t\t\t\t\t[ pluginName ]( \"_init\" )\n\t\t\t\t\t\t.trigger( \"create.\" + pluginName );\n\t\t\t\t});\n\t\t\t},\n\t\t\t_init: function(){\n\t\t\t\tvar oEl = $( this ),\n\t\t\t\t\tsel = this.getElementsByTagName( \"select\" )[ 0 ];\n\n\t\t\t\tif( sel ) {\n\t\t\t\t\t$( this )\n\t\t\t\t\t\t.addClass( \"btn-select\" )\n\t\t\t\t\t\t[ pluginName ]( \"_select\", sel );\n\t\t\t\t}\n\t\t\t\treturn oEl;\n\t\t\t},\n\t\t\t_select: function( sel ) {\n\t\t\t\tvar update = function( oEl, sel ) {\n\t\t\t\t\tvar opts = $( sel ).find( \"option\" ),\n\t\t\t\t\t\tlabel, el, children;\n\n\t\t\t\t\topts.each(function() {\n\t\t\t\t\t\tvar opt = this;\n\t\t\t\t\t\tif( opt.selected ) {\n\t\t\t\t\t\t\tlabel = document.createTextNode( opt.text );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tchildren = oEl.childNodes;\n\t\t\t\t\tif( opts.length > 0 ){\n\t\t\t\t\t\tfor( var i = 0, l = children.length; i < l; i++ ) {\n\t\t\t\t\t\t\tel = children[ i ];\n\n\t\t\t\t\t\t\tif( el && el.nodeType === 3 ) {\n\t\t\t\t\t\t\t\toEl.replaceChild( label, el );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tupdate( this, sel );\n\t\t\t\t$( this ).bind( \"change refresh\", function() {\n\t\t\t\t\tupdate( this, sel );\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t// Collection method.\n\t$.fn[ pluginName ] = function( arrg, a, b, c ) {\n\t\treturn this.each(function() {\n\n\t\t// if it's a method\n\t\tif( arrg && typeof( arrg ) === \"string\" ){\n\t\t\treturn $.fn[ pluginName ].prototype[ arrg ].call( this, a, b, c );\n\t\t}\n\n\t\t// don't re-init\n\t\tif( $( this ).data( pluginName + \"active\" ) ){\n\t\t\treturn $( this );\n\t\t}\n\n\t\t// otherwise, init\n\n\t\t$( this ).data( pluginName + \"active\", true );\n\t\t\t$.fn[ pluginName ].prototype._create.call( this );\n\t\t});\n\t};\n\n\t// add methods\n\t$.extend( $.fn[ pluginName ].prototype, methods );\n\n}( jQuery ));\n;(function( win, $, undefined ){\n\n\tvar ColumnToggle = function( element ) {\n\n\t\tthis.$table = $( element );\n\n\t\tthis.classes = {\n\t\t\tcolumnToggleTable: 'tablesaw-columntoggle',\n\t\t\tcolumnBtnContain: 'tablesaw-columntoggle-btnwrap tablesaw-advance',\n\t\t\tcolumnBtn: 'tablesaw-columntoggle-btn tablesaw-nav-btn down',\n\t\t\tpopup: 'tablesaw-columntoggle-popup',\n\t\t\tpriorityPrefix: 'tablesaw-priority-',\n\t\t\t// TODO duplicate class, also in tables.js\n\t\t\ttoolbar: 'tablesaw-bar'\n\t\t};\n\n\t\t// Expose headers and allHeaders properties on the widget\n\t\t// headers references the THs within the first TR in the table\n\t\tthis.headers = this.$table.find( 'tr:first > th' );\n\n\t\tthis.$table.data( 'tablesaw-coltoggle', this );\n\t};\n\n\tColumnToggle.prototype.init = function() {\n\n\t\tvar tableId,\n\t\t\tid,\n\t\t\t$menuButton,\n\t\t\t$popup,\n\t\t\t$menu,\n\t\t\t$btnContain,\n\t\t\tself = this;\n\n\t\tthis.$table.addClass( this.classes.columnToggleTable );\n\n\t\ttableId = this.$table.attr( \"id\" );\n\t\tid = tableId + \"-popup\";\n\t\t$btnContain = $( \"<div class='\" + this.classes.columnBtnContain + \"'></div>\" );\n\t\t$menuButton = $( \"<a href='#\" + id + \"' class='btn btn-micro \" + this.classes.columnBtn +\"' data-popup-link>\" +\n\t\t\t\t\t\t\t\t\t\t\"<span>\" + Tablesaw.i18n.columnBtnText + \"</span></a>\" );\n\t\t$popup = $( \"<div class='dialog-table-coltoggle \" + this.classes.popup + \"' id='\" + id + \"'></div>\" );\n\t\t$menu = $( \"<div class='btn-group'></div>\" );\n\n\t\tvar hasNonPersistentHeaders = false;\n\t\t$( this.headers ).not( \"td\" ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\tpriority = $this.attr(\"data-tablesaw-priority\"),\n\t\t\t\t$cells = self.$getCells( this );\n\n\t\t\tif( priority && priority !== \"persist\" ) {\n\t\t\t\t$cells.addClass( self.classes.priorityPrefix + priority );\n\n\t\t\t\t$(\"<label><input type='checkbox' checked>\" + $this.text() + \"</label>\" )\n\t\t\t\t\t.appendTo( $menu )\n\t\t\t\t\t.children( 0 )\n\t\t\t\t\t.data( \"tablesaw-header\", this );\n\n\t\t\t\thasNonPersistentHeaders = true;\n\t\t\t}\n\t\t});\n\n\t\tif( !hasNonPersistentHeaders ) {\n\t\t\t$menu.append( '<label>' + Tablesaw.i18n.columnsDialogError + '</label>' );\n\t\t}\n\n\t\t$menu.appendTo( $popup );\n\n\t\t// bind change event listeners to inputs - TODO: move to a private method?\n\t\t$menu.find( 'input[type=\"checkbox\"]' ).on( \"change\", function(e) {\n\t\t\tvar checked = e.target.checked;\n\n\t\t\tself.$getCellsFromCheckbox( e.target )\n\t\t\t\t.toggleClass( \"tablesaw-cell-hidden\", !checked )\n\t\t\t\t.toggleClass( \"tablesaw-cell-visible\", checked );\n\n\t\t\tself.$table.trigger( 'tablesawcolumns' );\n\t\t});\n\n\t\t$menuButton.appendTo( $btnContain );\n\t\t$btnContain.appendTo( this.$table.prev().filter( '.' + this.classes.toolbar ) );\n\n\t\tvar closeTimeout;\n\t\tfunction openPopup() {\n\t\t\t$btnContain.addClass( 'visible' );\n\t\t\t$menuButton.removeClass( 'down' ).addClass( 'up' );\n\n\t\t\t$( document ).unbind( 'click.' + tableId, closePopup );\n\n\t\t\twindow.clearTimeout( closeTimeout );\n\t\t\tcloseTimeout = window.setTimeout(function() {\n\t\t\t\t$( document ).one( 'click.' + tableId, closePopup );\n\t\t\t}, 15 );\n\t\t}\n\n\t\tfunction closePopup( event ) {\n\t\t\t// Click came from inside the popup, ignore.\n\t\t\tif( event && $( event.target ).closest( \".\" + self.classes.popup ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$( document ).unbind( 'click.' + tableId );\n\t\t\t$menuButton.removeClass( 'up' ).addClass( 'down' );\n\t\t\t$btnContain.removeClass( 'visible' );\n\t\t}\n\n\t\t$menuButton.on( \"click.tablesaw\", function( event ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tif( !$btnContain.is( \".visible\" ) ) {\n\t\t\t\topenPopup();\n\t\t\t} else {\n\t\t\t\tclosePopup();\n\t\t\t}\n\t\t});\n\n\t\t$popup.appendTo( $btnContain );\n\n\t\tthis.$menu = $menu;\n\n\t\t$(window).on( \"resize.\" + tableId, function(){\n\t\t\tself.refreshToggle();\n\t\t});\n\n\t\tthis.refreshToggle();\n\t};\n\n\tColumnToggle.prototype.$getCells = function( th ) {\n\t\treturn $( th ).add( th.cells );\n\t};\n\n\tColumnToggle.prototype.$getCellsFromCheckbox = function( checkbox ) {\n\t\tvar th = $( checkbox ).data( \"tablesaw-header\" );\n\t\treturn this.$getCells( th );\n\t};\n\n\tColumnToggle.prototype.refreshToggle = function() {\n\t\tvar self = this;\n\t\tthis.$menu.find( \"input\" ).each( function() {\n\t\t\tthis.checked = self.$getCellsFromCheckbox( this ).eq( 0 ).css( \"display\" ) === \"table-cell\";\n\t\t});\n\t};\n\n\tColumnToggle.prototype.refreshPriority = function(){\n\t\tvar self = this;\n\t\t$(this.headers).not( \"td\" ).each( function() {\n\t\t\tvar $this = $( this ),\n\t\t\t\tpriority = $this.attr(\"data-tablesaw-priority\"),\n\t\t\t\t$cells = $this.add( this.cells );\n\n\t\t\tif( priority && priority !== \"persist\" ) {\n\t\t\t\t$cells.addClass( self.classes.priorityPrefix + priority );\n\t\t\t}\n\t\t});\n\t};\n\n\tColumnToggle.prototype.destroy = function() {\n\t\t// table toolbars, document and window .tableId events\n\t\t// removed in parent tables.js destroy method\n\n\t\tthis.$table.removeClass( this.classes.columnToggleTable );\n\t\tthis.$table.find( 'th, td' ).each(function() {\n\t\t\tvar $cell = $( this );\n\t\t\t$cell.removeClass( 'tablesaw-cell-hidden' )\n\t\t\t\t.removeClass( 'tablesaw-cell-visible' );\n\n\t\t\tthis.className = this.className.replace( /\\bui\\-table\\-priority\\-\\d\\b/g, '' );\n\t\t});\n\t};\n\n\t// on tablecreate, init\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ){\n\n\t\tif( Tablesaw.mode === 'columntoggle' ){\n\t\t\tvar table = new ColumnToggle( Tablesaw.table );\n\t\t\ttable.init();\n\t\t}\n\n\t} );\n\n\t$( document ).on( \"tablesawdestroy\", function( e, Tablesaw ){\n\t\tif( Tablesaw.mode === 'columntoggle' ){\n\t\t\t$( Tablesaw.table ).data( 'tablesaw-coltoggle' ).destroy();\n\t\t}\n\t} );\n\n}( this, jQuery ));\n;(function( win, $, undefined ){\n\n\t$.extend( Tablesaw.config, {\n\t\tswipe: {\n\t\t\thorizontalThreshold: 15,\n\t\t\tverticalThreshold: 30\n\t\t}\n\t});\n\n\tfunction isIE8() {\n\t\tvar div = document.createElement('div'),\n\t\t\tall = div.getElementsByTagName('i');\n\n\t\tdiv.innerHTML = '<!--[if lte IE 8]><i></i><![endif]-->';\n\n\t\treturn !!all.length;\n\t}\n\n\tfunction createSwipeTable( $table ){\n\n\t\tvar $btns = $( \"<div class='tablesaw-advance'></div>\" ),\n\t\t\t$prevBtn = $( \"<a href='#' class='tablesaw-nav-btn btn btn-micro left' title='Previous Column'></a>\" ).appendTo( $btns ),\n\t\t\t$nextBtn = $( \"<a href='#' class='tablesaw-nav-btn btn btn-micro right' title='Next Column'></a>\" ).appendTo( $btns ),\n\t\t\thideBtn = 'disabled',\n\t\t\tpersistWidths = 'tablesaw-fix-persist',\n\t\t\t$headerCells = $table.find( \"thead th\" ),\n\t\t\t$headerCellsNoPersist = $headerCells.not( '[data-tablesaw-priority=\"persist\"]' ),\n\t\t\theaderWidths = [],\n\t\t\t$head = $( document.head || 'head' ),\n\t\t\ttableId = $table.attr( 'id' ),\n\t\t\t// TODO switch this to an nth-child feature test\n\t\t\tsupportsNthChild = !isIE8();\n\n\t\tif( !$headerCells.length ) {\n\t\t\tthrow new Error( \"tablesaw swipe: no header cells found. Are you using <th> inside of <thead>?\" );\n\t\t}\n\n\t\t// Calculate initial widths\n\t\t$table.css('width', 'auto');\n\t\t$headerCells.each(function() {\n\t\t\theaderWidths.push( $( this ).outerWidth() );\n\t\t});\n\t\t$table.css( 'width', '' );\n\n\t\t$btns.appendTo( $table.prev().filter( '.tablesaw-bar' ) );\n\n\t\t$table.addClass( \"tablesaw-swipe\" );\n\n\t\tif( !tableId ) {\n\t\t\ttableId = 'tableswipe-' + Math.round( Math.random() * 10000 );\n\t\t\t$table.attr( 'id', tableId );\n\t\t}\n\n\t\tfunction $getCells( headerCell ) {\n\t\t\treturn $( headerCell.cells ).add( headerCell );\n\t\t}\n\n\t\tfunction showColumn( headerCell ) {\n\t\t\t$getCells( headerCell ).removeClass( 'tablesaw-cell-hidden' );\n\t\t}\n\n\t\tfunction hideColumn( headerCell ) {\n\t\t\t$getCells( headerCell ).addClass( 'tablesaw-cell-hidden' );\n\t\t}\n\n\t\tfunction persistColumn( headerCell ) {\n\t\t\t$getCells( headerCell ).addClass( 'tablesaw-cell-persist' );\n\t\t}\n\n\t\tfunction isPersistent( headerCell ) {\n\t\t\treturn $( headerCell ).is( '[data-tablesaw-priority=\"persist\"]' );\n\t\t}\n\n\t\tfunction unmaintainWidths() {\n\t\t\t$table.removeClass( persistWidths );\n\t\t\t$( '#' + tableId + '-persist' ).remove();\n\t\t}\n\n\t\tfunction maintainWidths() {\n\t\t\tvar prefix = '#' + tableId + '.tablesaw-swipe ',\n\t\t\t\tstyles = [],\n\t\t\t\ttableWidth = $table.width(),\n\t\t\t\thash = [],\n\t\t\t\tnewHash;\n\n\t\t\t$headerCells.each(function( index ) {\n\t\t\t\tvar width;\n\t\t\t\tif( isPersistent( this ) ) {\n\t\t\t\t\twidth = $( this ).outerWidth();\n\n\t\t\t\t\t// Only save width on non-greedy columns (take up less than 75% of table width)\n\t\t\t\t\tif( width < tableWidth * 0.75 ) {\n\t\t\t\t\t\thash.push( index + '-' + width );\n\t\t\t\t\t\tstyles.push( prefix + ' .tablesaw-cell-persist:nth-child(' + ( index + 1 ) + ') { width: ' + width + 'px; }' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tnewHash = hash.join( '_' );\n\n\t\t\t$table.addClass( persistWidths );\n\n\t\t\tvar $style = $( '#' + tableId + '-persist' );\n\t\t\t// If style element not yet added OR if the widths have changed\n\t\t\tif( !$style.length || $style.data( 'hash' ) !== newHash ) {\n\t\t\t\t// Remove existing\n\t\t\t\t$style.remove();\n\n\t\t\t\tif( styles.length ) {\n\t\t\t\t\t$( '<style>' + styles.join( \"\\n\" ) + '</style>' )\n\t\t\t\t\t\t.attr( 'id', tableId + '-persist' )\n\t\t\t\t\t\t.data( 'hash', newHash )\n\t\t\t\t\t\t.appendTo( $head );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getNext(){\n\t\t\tvar next = [],\n\t\t\t\tcheckFound;\n\n\t\t\t$headerCellsNoPersist.each(function( i ) {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\tisHidden = $t.css( \"display\" ) === \"none\" || $t.is( \".tablesaw-cell-hidden\" );\n\n\t\t\t\tif( !isHidden && !checkFound ) {\n\t\t\t\t\tcheckFound = true;\n\t\t\t\t\tnext[ 0 ] = i;\n\t\t\t\t} else if( isHidden && checkFound ) {\n\t\t\t\t\tnext[ 1 ] = i;\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn next;\n\t\t}\n\n\t\tfunction getPrev(){\n\t\t\tvar next = getNext();\n\t\t\treturn [ next[ 1 ] - 1 , next[ 0 ] - 1 ];\n\t\t}\n\n\t\tfunction nextpair( fwd ){\n\t\t\treturn fwd ? getNext() : getPrev();\n\t\t}\n\n\t\tfunction canAdvance( pair ){\n\t\t\treturn pair[ 1 ] > -1 && pair[ 1 ] < $headerCellsNoPersist.length;\n\t\t}\n\n\t\tfunction matchesMedia() {\n\t\t\tvar matchMedia = $table.attr( \"data-tablesaw-swipe-media\" );\n\t\t\treturn !matchMedia || ( \"matchMedia\" in win ) && win.matchMedia( matchMedia ).matches;\n\t\t}\n\n\t\tfunction fakeBreakpoints() {\n\t\t\tif( !matchesMedia() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar extraPaddingPixels = 20,\n\t\t\t\tcontainerWidth = $table.parent().width(),\n\t\t\t\tpersist = [],\n\t\t\t\tsum = 0,\n\t\t\t\tsums = [],\n\t\t\t\tvisibleNonPersistantCount = $headerCells.length;\n\n\t\t\t$headerCells.each(function( index ) {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\tisPersist = $t.is( '[data-tablesaw-priority=\"persist\"]' );\n\n\t\t\t\tpersist.push( isPersist );\n\n\t\t\t\tsum += headerWidths[ index ] + ( isPersist ? 0 : extraPaddingPixels );\n\t\t\t\tsums.push( sum );\n\n\t\t\t\t// is persistent or is hidden\n\t\t\t\tif( isPersist || sum > containerWidth ) {\n\t\t\t\t\tvisibleNonPersistantCount--;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar needsNonPersistentColumn = visibleNonPersistantCount === 0;\n\n\t\t\t$headerCells.each(function( index ) {\n\t\t\t\tif( persist[ index ] ) {\n\n\t\t\t\t\t// for visual box-shadow\n\t\t\t\t\tpersistColumn( this );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( sums[ index ] <= containerWidth || needsNonPersistentColumn ) {\n\t\t\t\t\tneedsNonPersistentColumn = false;\n\t\t\t\t\tshowColumn( this );\n\t\t\t\t} else {\n\t\t\t\t\thideColumn( this );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( supportsNthChild ) {\n\t\t\t\tunmaintainWidths();\n\t\t\t}\n\t\t\t$table.trigger( 'tablesawcolumns' );\n\t\t}\n\n\t\tfunction advance( fwd ){\n\t\t\tvar pair = nextpair( fwd );\n\t\t\tif( canAdvance( pair ) ){\n\t\t\t\tif( isNaN( pair[ 0 ] ) ){\n\t\t\t\t\tif( fwd ){\n\t\t\t\t\t\tpair[0] = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpair[0] = $headerCellsNoPersist.length - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif( supportsNthChild ) {\n\t\t\t\t\tmaintainWidths();\n\t\t\t\t}\n\n\t\t\t\thideColumn( $headerCellsNoPersist.get( pair[ 0 ] ) );\n\t\t\t\tshowColumn( $headerCellsNoPersist.get( pair[ 1 ] ) );\n\n\t\t\t\t$table.trigger( 'tablesawcolumns' );\n\t\t\t}\n\t\t}\n\n\t\t$prevBtn.add( $nextBtn ).click(function( e ){\n\t\t\tadvance( !!$( e.target ).closest( $nextBtn ).length );\n\t\t\te.preventDefault();\n\t\t});\n\n\t\tfunction getCoord( event, key ) {\n\t\t\treturn ( event.touches || event.originalEvent.touches )[ 0 ][ key ];\n\t\t}\n\n\t\t$table\n\t\t\t.bind( \"touchstart.swipetoggle\", function( e ){\n\t\t\t\tvar originX = getCoord( e, 'pageX' ),\n\t\t\t\t\toriginY = getCoord( e, 'pageY' ),\n\t\t\t\t\tx,\n\t\t\t\t\ty;\n\n\t\t\t\t$( win ).off( \"resize\", fakeBreakpoints );\n\n\t\t\t\t$( this )\n\t\t\t\t\t.bind( \"touchmove\", function( e ){\n\t\t\t\t\t\tx = getCoord( e, 'pageX' );\n\t\t\t\t\t\ty = getCoord( e, 'pageY' );\n\t\t\t\t\t\tvar cfg = Tablesaw.config.swipe;\n\t\t\t\t\t\tif( Math.abs( x - originX ) > cfg.horizontalThreshold && Math.abs( y - originY ) < cfg.verticalThreshold ) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.bind( \"touchend.swipetoggle\", function(){\n\t\t\t\t\t\tvar cfg = Tablesaw.config.swipe;\n\t\t\t\t\t\tif( Math.abs( y - originY ) < cfg.verticalThreshold ) {\n\t\t\t\t\t\t\tif( x - originX < -1 * cfg.horizontalThreshold ){\n\t\t\t\t\t\t\t\tadvance( true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( x - originX > cfg.horizontalThreshold ){\n\t\t\t\t\t\t\t\tadvance( false );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\t\t\t$( win ).on( \"resize\", fakeBreakpoints );\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t\t$( this ).unbind( \"touchmove touchend\" );\n\t\t\t\t\t});\n\n\t\t\t})\n\t\t\t.bind( \"tablesawcolumns.swipetoggle\", function(){\n\t\t\t\t$prevBtn[ canAdvance( getPrev() ) ? \"removeClass\" : \"addClass\" ]( hideBtn );\n\t\t\t\t$nextBtn[ canAdvance( getNext() ) ? \"removeClass\" : \"addClass\" ]( hideBtn );\n\t\t\t})\n\t\t\t.bind( \"tablesawnext.swipetoggle\", function(){\n\t\t\t\tadvance( true );\n\t\t\t} )\n\t\t\t.bind( \"tablesawprev.swipetoggle\", function(){\n\t\t\t\tadvance( false );\n\t\t\t} )\n\t\t\t.bind( \"tablesawdestroy.swipetoggle\", function(){\n\t\t\t\tvar $t = $( this );\n\n\t\t\t\t$t.removeClass( 'tablesaw-swipe' );\n\t\t\t\t$t.prev().filter( '.tablesaw-bar' ).find( '.tablesaw-advance' ).remove();\n\t\t\t\t$( win ).off( \"resize\", fakeBreakpoints );\n\n\t\t\t\t$t.unbind( \".swipetoggle\" );\n\t\t\t});\n\n\t\tfakeBreakpoints();\n\t\t$( win ).on( \"resize\", fakeBreakpoints );\n\t}\n\n\n\n\t// on tablecreate, init\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ){\n\n\t\tif( Tablesaw.mode === 'swipe' ){\n\t\t\tcreateSwipeTable( Tablesaw.$table );\n\t\t}\n\n\t} );\n\n}( this, jQuery ));\n\n;(function( $ ) {\n\tfunction getSortValue( cell ) {\n\t\treturn $.map( cell.childNodes, function( el ) {\n\t\t\t\tvar $el = $( el );\n\t\t\t\tif( $el.is( 'input, select' ) ) {\n\t\t\t\t\treturn $el.val();\n\t\t\t\t} else if( $el.hasClass( 'tablesaw-cell-label' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn $.trim( $el.text() );\n\t\t\t}).join( '' );\n\t}\n\n\tvar pluginName = \"tablesaw-sortable\",\n\t\tinitSelector = \"table[data-\" + pluginName + \"]\",\n\t\tsortableSwitchSelector = \"[data-\" + pluginName + \"-switch]\",\n\t\tattrs = {\n\t\t\tdefaultCol: \"data-tablesaw-sortable-default-col\",\n\t\t\tnumericCol: \"data-tablesaw-sortable-numeric\"\n\t\t},\n\t\tclasses = {\n\t\t\thead: pluginName + \"-head\",\n\t\t\tascend: pluginName + \"-ascending\",\n\t\t\tdescend: pluginName + \"-descending\",\n\t\t\tswitcher: pluginName + \"-switch\",\n\t\t\ttableToolbar: 'tablesaw-toolbar',\n\t\t\tsortButton: pluginName + \"-btn\"\n\t\t},\n\t\tmethods = {\n\t\t\t_create: function( o ){\n\t\t\t\treturn $( this ).each(function() {\n\t\t\t\t\tvar init = $( this ).data( \"init\" + pluginName );\n\t\t\t\t\tif( init ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this )\n\t\t\t\t\t\t.data( \"init\"+ pluginName, true )\n\t\t\t\t\t\t.trigger( \"beforecreate.\" + pluginName )\n\t\t\t\t\t\t[ pluginName ]( \"_init\" , o )\n\t\t\t\t\t\t.trigger( \"create.\" + pluginName );\n\t\t\t\t});\n\t\t\t},\n\t\t\t_init: function(){\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\theads,\n\t\t\t\t\t$switcher;\n\n\t\t\t\tvar addClassToTable = function(){\n\t\t\t\t\t\tel.addClass( pluginName );\n\t\t\t\t\t},\n\t\t\t\t\taddClassToHeads = function( h ){\n\t\t\t\t\t\t$.each( h , function( i , v ){\n\t\t\t\t\t\t\t$( v ).addClass( classes.head );\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tmakeHeadsActionable = function( h , fn ){\n\t\t\t\t\t\t$.each( h , function( i , v ){\n\t\t\t\t\t\t\tvar b = $( \"<button class='\" + classes.sortButton + \"'/>\" );\n\t\t\t\t\t\t\tb.bind( \"click\" , { col: v } , fn );\n\t\t\t\t\t\t\t$( v ).wrapInner( b );\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tclearOthers = function( sibs ){\n\t\t\t\t\t\t$.each( sibs , function( i , v ){\n\t\t\t\t\t\t\tvar col = $( v );\n\t\t\t\t\t\t\tcol.removeAttr( attrs.defaultCol );\n\t\t\t\t\t\t\tcol.removeClass( classes.ascend );\n\t\t\t\t\t\t\tcol.removeClass( classes.descend );\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\theadsOnAction = function( e ){\n\t\t\t\t\t\tif( $( e.target ).is( 'a[href]' ) ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tvar head = $( this ).parent(),\n\t\t\t\t\t\t\tv = e.data.col,\n\t\t\t\t\t\t\tnewSortValue = heads.index( head );\n\n\t\t\t\t\t\tclearOthers( head.siblings() );\n\t\t\t\t\t\tif( head.hasClass( classes.descend ) ){\n\t\t\t\t\t\t\tel[ pluginName ]( \"sortBy\" , v , true);\n\t\t\t\t\t\t\tnewSortValue += '_asc';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel[ pluginName ]( \"sortBy\" , v );\n\t\t\t\t\t\t\tnewSortValue += '_desc';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( $switcher ) {\n\t\t\t\t\t\t\t$switcher.find( 'select' ).val( newSortValue ).trigger( 'refresh' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t},\n\t\t\t\t\thandleDefault = function( heads ){\n\t\t\t\t\t\t$.each( heads , function( idx , el ){\n\t\t\t\t\t\t\tvar $el = $( el );\n\t\t\t\t\t\t\tif( $el.is( \"[\" + attrs.defaultCol + \"]\" ) ){\n\t\t\t\t\t\t\t\tif( !$el.hasClass( classes.descend ) ) {\n\t\t\t\t\t\t\t\t\t$el.addClass( classes.ascend );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\taddSwitcher = function( heads ){\n\t\t\t\t\t\t$switcher = $( '<div>' ).addClass( classes.switcher ).addClass( classes.tableToolbar ).html(function() {\n\t\t\t\t\t\t\tvar html = [ '<label>' + Tablesaw.i18n.sort + ':' ];\n\n\t\t\t\t\t\t\thtml.push( '<span class=\"btn btn-small\">&#160;<select>' );\n\t\t\t\t\t\t\theads.each(function( j ) {\n\t\t\t\t\t\t\t\tvar $t = $( this );\n\t\t\t\t\t\t\t\tvar isDefaultCol = $t.is( \"[\" + attrs.defaultCol + \"]\" );\n\t\t\t\t\t\t\t\tvar isDescending = $t.hasClass( classes.descend );\n\n\t\t\t\t\t\t\t\tvar hasNumericAttribute = $t.is( '[data-sortable-numeric]' );\n\t\t\t\t\t\t\t\tvar numericCount = 0;\n\t\t\t\t\t\t\t\t// Check only the first four rows to see if the column is numbers.\n\t\t\t\t\t\t\t\tvar numericCountMax = 5;\n\n\t\t\t\t\t\t\t\t$( this.cells ).slice( 0, numericCountMax ).each(function() {\n\t\t\t\t\t\t\t\t\tif( !isNaN( parseInt( getSortValue( this ), 10 ) ) ) {\n\t\t\t\t\t\t\t\t\t\tnumericCount++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tvar isNumeric = numericCount === numericCountMax;\n\t\t\t\t\t\t\t\tif( !hasNumericAttribute ) {\n\t\t\t\t\t\t\t\t\t$t.attr( \"data-sortable-numeric\", isNumeric ? \"\" : \"false\" );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\thtml.push( '<option' + ( isDefaultCol && !isDescending ? ' selected' : '' ) + ' value=\"' + j + '_asc\">' + $t.text() + ' ' + ( isNumeric ? '&#x2191;' : '(A-Z)' ) + '</option>' );\n\t\t\t\t\t\t\t\thtml.push( '<option' + ( isDefaultCol && isDescending ? ' selected' : '' ) + ' value=\"' + j + '_desc\">' + $t.text() + ' ' + ( isNumeric ? '&#x2193;' : '(Z-A)' ) + '</option>' );\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\thtml.push( '</select></span></label>' );\n\n\t\t\t\t\t\t\treturn html.join('');\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvar $toolbar = el.prev().filter( '.tablesaw-bar' ),\n\t\t\t\t\t\t\t$firstChild = $toolbar.children().eq( 0 );\n\n\t\t\t\t\t\tif( $firstChild.length ) {\n\t\t\t\t\t\t\t$switcher.insertBefore( $firstChild );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$switcher.appendTo( $toolbar );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$switcher.find( '.btn' ).tablesawbtn();\n\t\t\t\t\t\t$switcher.find( 'select' ).on( 'change', function() {\n\t\t\t\t\t\t\tvar val = $( this ).val().split( '_' ),\n\t\t\t\t\t\t\t\thead = heads.eq( val[ 0 ] );\n\n\t\t\t\t\t\t\tclearOthers( head.siblings() );\n\t\t\t\t\t\t\tel[ pluginName ]( 'sortBy', head.get( 0 ), val[ 1 ] === 'asc' );\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\taddClassToTable();\n\t\t\t\t\theads = el.find( \"thead th[data-\" + pluginName + \"-col]\" );\n\t\t\t\t\taddClassToHeads( heads );\n\t\t\t\t\tmakeHeadsActionable( heads , headsOnAction );\n\t\t\t\t\thandleDefault( heads );\n\n\t\t\t\t\tif( el.is( sortableSwitchSelector ) ) {\n\t\t\t\t\t\taddSwitcher( heads, el.find('tbody tr:nth-child(-n+3)') );\n\t\t\t\t\t}\n\t\t\t},\n\t\t\tgetColumnNumber: function( col ){\n\t\t\t\treturn $( col ).prevAll().length;\n\t\t\t},\n\t\t\tgetTableRows: function(){\n\t\t\t\treturn $( this ).find( \"tbody tr\" );\n\t\t\t},\n\t\t\tsortRows: function( rows , colNum , ascending, col ){\n\t\t\t\tvar cells, fn, sorted;\n\t\t\t\tvar getCells = function( rows ){\n\t\t\t\t\t\tvar cells = [];\n\t\t\t\t\t\t$.each( rows , function( i , r ){\n\t\t\t\t\t\t\tvar element = $( r ).children().get( colNum );\n\t\t\t\t\t\t\tcells.push({\n\t\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\t\tcell: getSortValue( element ),\n\t\t\t\t\t\t\t\trowNum: i\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn cells;\n\t\t\t\t\t},\n\t\t\t\t\tgetSortFxn = function( ascending, forceNumeric ){\n\t\t\t\t\t\tvar fn,\n\t\t\t\t\t\t\tregex = /[^\\-\\+\\d\\.]/g;\n\t\t\t\t\t\tif( ascending ){\n\t\t\t\t\t\t\tfn = function( a , b ){\n\t\t\t\t\t\t\t\tif( forceNumeric ) {\n\t\t\t\t\t\t\t\t\treturn parseFloat( a.cell.replace( regex, '' ) ) - parseFloat( b.cell.replace( regex, '' ) );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn a.cell.toLowerCase() > b.cell.toLowerCase() ? 1 : -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfn = function( a , b ){\n\t\t\t\t\t\t\t\tif( forceNumeric ) {\n\t\t\t\t\t\t\t\t\treturn parseFloat( b.cell.replace( regex, '' ) ) - parseFloat( a.cell.replace( regex, '' ) );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn a.cell.toLowerCase() < b.cell.toLowerCase() ? 1 : -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fn;\n\t\t\t\t\t},\n\t\t\t\t\tapplyToRows = function( sorted , rows ){\n\t\t\t\t\t\tvar newRows = [], i, l, cur;\n\t\t\t\t\t\tfor( i = 0, l = sorted.length ; i < l ; i++ ){\n\t\t\t\t\t\t\tcur = sorted[ i ].rowNum;\n\t\t\t\t\t\t\tnewRows.push( rows[cur] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn newRows;\n\t\t\t\t\t};\n\n\t\t\t\tcells = getCells( rows );\n\t\t\t\tvar customFn = $( col ).data( 'tablesaw-sort' );\n\t\t\t\tfn = ( customFn && typeof customFn === \"function\" ? customFn( ascending ) : false ) ||\n\t\t\t\t\tgetSortFxn( ascending, $( col ).is( '[data-sortable-numeric]' ) && !$( col ).is( '[data-sortable-numeric=\"false\"]' ) );\n\t\t\t\tsorted = cells.sort( fn );\n\t\t\t\trows = applyToRows( sorted , rows );\n\t\t\t\treturn rows;\n\t\t\t},\n\t\t\treplaceTableRows: function( rows ){\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tbody = el.find( \"tbody\" );\n\t\t\t\tbody.html( rows );\n\t\t\t},\n\t\t\tmakeColDefault: function( col , a ){\n\t\t\t\tvar c = $( col );\n\t\t\t\tc.attr( attrs.defaultCol , \"true\" );\n\t\t\t\tif( a ){\n\t\t\t\t\tc.removeClass( classes.descend );\n\t\t\t\t\tc.addClass( classes.ascend );\n\t\t\t\t} else {\n\t\t\t\t\tc.removeClass( classes.ascend );\n\t\t\t\t\tc.addClass( classes.descend );\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortBy: function( col , ascending ){\n\t\t\t\tvar el = $( this ), colNum, rows;\n\n\t\t\t\tcolNum = el[ pluginName ]( \"getColumnNumber\" , col );\n\t\t\t\trows = el[ pluginName ]( \"getTableRows\" );\n\t\t\t\trows = el[ pluginName ]( \"sortRows\" , rows , colNum , ascending, col );\n\t\t\t\tel[ pluginName ]( \"replaceTableRows\" , rows );\n\t\t\t\tel[ pluginName ]( \"makeColDefault\" , col , ascending );\n\t\t\t}\n\t\t};\n\n\t// Collection method.\n\t$.fn[ pluginName ] = function( arrg ) {\n\t\tvar args = Array.prototype.slice.call( arguments , 1),\n\t\t\treturnVal;\n\n\t\t// if it's a method\n\t\tif( arrg && typeof( arrg ) === \"string\" ){\n\t\t\treturnVal = $.fn[ pluginName ].prototype[ arrg ].apply( this[0], args );\n\t\t\treturn (typeof returnVal !== \"undefined\")? returnVal:$(this);\n\t\t}\n\t\t// check init\n\t\tif( !$( this ).data( pluginName + \"data\" ) ){\n\t\t\t$( this ).data( pluginName + \"active\", true );\n\t\t\t$.fn[ pluginName ].prototype._create.call( this , arrg );\n\t\t}\n\t\treturn $(this);\n\t};\n\t// add methods\n\t$.extend( $.fn[ pluginName ].prototype, methods );\n\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ) {\n\t\tif( Tablesaw.$table.is( initSelector ) ) {\n\t\t\tTablesaw.$table[ pluginName ]();\n\t\t}\n\t});\n\n}( jQuery ));\n\n;(function( win, $, undefined ){\n\n\tvar MM = {\n\t\tattr: {\n\t\t\tinit: 'data-tablesaw-minimap'\n\t\t}\n\t};\n\n\tfunction createMiniMap( $table ){\n\n\t\tvar $btns = $( '<div class=\"tablesaw-advance minimap\">' ),\n\t\t\t$dotNav = $( '<ul class=\"tablesaw-advance-dots\">' ).appendTo( $btns ),\n\t\t\thideDot = 'tablesaw-advance-dots-hide',\n\t\t\t$headerCells = $table.find( 'thead th' );\n\n\t\t// populate dots\n\t\t$headerCells.each(function(){\n\t\t\t$dotNav.append( '<li><i></i></li>' );\n\t\t});\n\n\t\t$btns.appendTo( $table.prev().filter( '.tablesaw-bar' ) );\n\n\t\tfunction showMinimap( $table ) {\n\t\t\tvar mq = $table.attr( MM.attr.init );\n\t\t\treturn !mq || win.matchMedia && win.matchMedia( mq ).matches;\n\t\t}\n\n\t\tfunction showHideNav(){\n\t\t\tif( !showMinimap( $table ) ) {\n\t\t\t\t$btns.hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$btns.show();\n\n\t\t\t// show/hide dots\n\t\t\tvar dots = $dotNav.find( \"li\" ).removeClass( hideDot );\n\t\t\t$table.find( \"thead th\" ).each(function(i){\n\t\t\t\tif( $( this ).css( \"display\" ) === \"none\" ){\n\t\t\t\t\tdots.eq( i ).addClass( hideDot );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// run on init and resize\n\t\tshowHideNav();\n\t\t$( win ).on( \"resize\", showHideNav );\n\n\n\t\t$table\n\t\t\t.bind( \"tablesawcolumns.minimap\", function(){\n\t\t\t\tshowHideNav();\n\t\t\t})\n\t\t\t.bind( \"tablesawdestroy.minimap\", function(){\n\t\t\t\tvar $t = $( this );\n\n\t\t\t\t$t.prev().filter( '.tablesaw-bar' ).find( '.tablesaw-advance' ).remove();\n\t\t\t\t$( win ).off( \"resize\", showHideNav );\n\n\t\t\t\t$t.unbind( \".minimap\" );\n\t\t\t});\n\t}\n\n\n\n\t// on tablecreate, init\n\t$( document ).on( \"tablesawcreate\", function( e, Tablesaw ){\n\n\t\tif( ( Tablesaw.mode === 'swipe' || Tablesaw.mode === 'columntoggle' ) && Tablesaw.$table.is( '[ ' + MM.attr.init + ']' ) ){\n\t\t\tcreateMiniMap( Tablesaw.$table );\n\t\t}\n\n\t} );\n\n}( this, jQuery ));\n\n;(function( win, $ ) {\n\n\tvar S = {\n\t\tselectors: {\n\t\t\tinit: 'table[data-tablesaw-mode-switch]'\n\t\t},\n\t\tattributes: {\n\t\t\texcludeMode: 'data-tablesaw-mode-exclude'\n\t\t},\n\t\tclasses: {\n\t\t\tmain: 'tablesaw-modeswitch',\n\t\t\ttoolbar: 'tablesaw-toolbar'\n\t\t},\n\t\tmodes: [ 'stack', 'swipe', 'columntoggle' ],\n\t\tinit: function( table ) {\n\t\t\tvar $table = $( table ),\n\t\t\t\tignoreMode = $table.attr( S.attributes.excludeMode ),\n\t\t\t\t$toolbar = $table.prev().filter( '.tablesaw-bar' ),\n\t\t\t\tmodeVal = '',\n\t\t\t\t$switcher = $( '<div>' ).addClass( S.classes.main + ' ' + S.classes.toolbar ).html(function() {\n\t\t\t\t\tvar html = [ '<label>' + Tablesaw.i18n.columns + ':' ],\n\t\t\t\t\t\tdataMode = $table.attr( 'data-tablesaw-mode' ),\n\t\t\t\t\t\tisSelected;\n\n\t\t\t\t\thtml.push( '<span class=\"btn btn-small\">&#160;<select>' );\n\t\t\t\t\tfor( var j=0, k = S.modes.length; j<k; j++ ) {\n\t\t\t\t\t\tif( ignoreMode && ignoreMode.toLowerCase() === S.modes[ j ] ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tisSelected = dataMode === S.modes[ j ];\n\n\t\t\t\t\t\tif( isSelected ) {\n\t\t\t\t\t\t\tmodeVal = S.modes[ j ];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thtml.push( '<option' +\n\t\t\t\t\t\t\t( isSelected ? ' selected' : '' ) +\n\t\t\t\t\t\t\t' value=\"' + S.modes[ j ] + '\">' + Tablesaw.i18n.modes[ j ] + '</option>' );\n\t\t\t\t\t}\n\t\t\t\t\thtml.push( '</select></span></label>' );\n\n\t\t\t\t\treturn html.join('');\n\t\t\t\t});\n\n\t\t\tvar $otherToolbarItems = $toolbar.find( '.tablesaw-advance' ).eq( 0 );\n\t\t\tif( $otherToolbarItems.length ) {\n\t\t\t\t$switcher.insertBefore( $otherToolbarItems );\n\t\t\t} else {\n\t\t\t\t$switcher.appendTo( $toolbar );\n\t\t\t}\n\n\t\t\t$switcher.find( '.btn' ).tablesawbtn();\n\t\t\t$switcher.find( 'select' ).bind( 'change', S.onModeChange );\n\t\t},\n\t\tonModeChange: function() {\n\t\t\tvar $t = $( this ),\n\t\t\t\t$switcher = $t.closest( '.' + S.classes.main ),\n\t\t\t\t$table = $t.closest( '.tablesaw-bar' ).nextUntil( $table ).eq( 0 ),\n\t\t\t\tval = $t.val();\n\n\t\t\t$switcher.remove();\n\t\t\t$table.data( 'table' ).destroy();\n\n\t\t\t$table.attr( 'data-tablesaw-mode', val );\n\t\t\t$table.table();\n\t\t}\n\t};\n\n\t$( win.document ).on( \"tablesawcreate\", function( e, Tablesaw ) {\n\t\tif( Tablesaw.$table.is( S.selectors.init ) ) {\n\t\t\tS.init( Tablesaw.table );\n\t\t}\n\t});\n\n})( this, jQuery );"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/timepicker/bootstrap-timepicker.js",
    "content": "/*!\n * Timepicker Component for Twitter Bootstrap\n *\n * Copyright 2013 Joris de Wit and bootstrap-timepicker contributors\n *\n * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n(function($, window, document) {\n  'use strict';\n\n  // TIMEPICKER PUBLIC CLASS DEFINITION\n  var Timepicker = function(element, options) {\n    this.widget = '';\n    this.$element = $(element);\n    this.defaultTime = options.defaultTime;\n    this.disableFocus = options.disableFocus;\n    this.disableMousewheel = options.disableMousewheel;\n    this.isOpen = options.isOpen;\n    this.minuteStep = options.minuteStep;\n    this.modalBackdrop = options.modalBackdrop;\n    this.orientation = options.orientation;\n    this.secondStep = options.secondStep;\n    this.snapToStep = options.snapToStep;\n    this.showInputs = options.showInputs;\n    this.showMeridian = options.showMeridian;\n    this.showSeconds = options.showSeconds;\n    this.template = options.template;\n    this.appendWidgetTo = options.appendWidgetTo;\n    this.showWidgetOnAddonClick = options.showWidgetOnAddonClick;\n    this.icons = options.icons;\n    this.maxHours = options.maxHours;\n    this.explicitMode = options.explicitMode; // If true 123 = 1:23, 12345 = 1:23:45, else invalid.\n\n    this.handleDocumentClick = function (e) {\n      var self = e.data.scope;\n      // This condition was inspired by bootstrap-datepicker.\n      // The element the timepicker is invoked on is the input but it has a sibling for addon/button.\n      if (!(self.$element.parent().find(e.target).length ||\n          self.$widget.is(e.target) ||\n          self.$widget.find(e.target).length)) {\n        self.hideWidget();\n      }\n    };\n\n    this._init();\n  };\n\n  Timepicker.prototype = {\n\n    constructor: Timepicker,\n    _init: function() {\n      var self = this;\n\n      if (this.showWidgetOnAddonClick && (this.$element.parent().hasClass('input-group') && this.$element.parent().hasClass('bootstrap-timepicker'))) {\n        this.$element.parent('.input-group.bootstrap-timepicker').find('.input-group-addon').on({\n          'click.timepicker': $.proxy(this.showWidget, this)\n        });\n        this.$element.on({\n          'focus.timepicker': $.proxy(this.highlightUnit, this),\n          'click.timepicker': $.proxy(this.highlightUnit, this),\n          'keydown.timepicker': $.proxy(this.elementKeydown, this),\n          'blur.timepicker': $.proxy(this.blurElement, this),\n          'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n        });\n      } else {\n        if (this.template) {\n          this.$element.on({\n            'focus.timepicker': $.proxy(this.showWidget, this),\n            'click.timepicker': $.proxy(this.showWidget, this),\n            'blur.timepicker': $.proxy(this.blurElement, this),\n            'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n          });\n        } else {\n          this.$element.on({\n            'focus.timepicker': $.proxy(this.highlightUnit, this),\n            'click.timepicker': $.proxy(this.highlightUnit, this),\n            'keydown.timepicker': $.proxy(this.elementKeydown, this),\n            'blur.timepicker': $.proxy(this.blurElement, this),\n            'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n          });\n        }\n      }\n\n      if (this.template !== false) {\n        this.$widget = $(this.getTemplate()).on('click', $.proxy(this.widgetClick, this));\n      } else {\n        this.$widget = false;\n      }\n\n      if (this.showInputs && this.$widget !== false) {\n        this.$widget.find('input').each(function() {\n          $(this).on({\n            'click.timepicker': function() { $(this).select(); },\n            'keydown.timepicker': $.proxy(self.widgetKeydown, self),\n            'keyup.timepicker': $.proxy(self.widgetKeyup, self)\n          });\n        });\n      }\n\n      this.setDefaultTime(this.defaultTime);\n    },\n\n    blurElement: function() {\n      this.highlightedUnit = null;\n      this.updateFromElementVal();\n    },\n\n    clear: function() {\n      this.hour = '';\n      this.minute = '';\n      this.second = '';\n      this.meridian = '';\n\n      this.$element.val('');\n    },\n\n    decrementHour: function() {\n      if (this.showMeridian) {\n        if (this.hour === 1) {\n          this.hour = 12;\n        } else if (this.hour === 12) {\n          this.hour--;\n\n          return this.toggleMeridian();\n        } else if (this.hour === 0) {\n          this.hour = 11;\n\n          return this.toggleMeridian();\n        } else {\n          this.hour--;\n        }\n      } else {\n        if (this.hour <= 0) {\n          this.hour = this.maxHours - 1;\n        } else {\n          this.hour--;\n        }\n      }\n    },\n\n    decrementMinute: function(step) {\n      var newVal;\n\n      if (step) {\n        newVal = this.minute - step;\n      } else {\n        newVal = this.minute - this.minuteStep;\n      }\n\n      if (newVal < 0) {\n        this.decrementHour();\n        this.minute = newVal + 60;\n      } else {\n        this.minute = newVal;\n      }\n    },\n\n    decrementSecond: function() {\n      var newVal = this.second - this.secondStep;\n\n      if (newVal < 0) {\n        this.decrementMinute(true);\n        this.second = newVal + 60;\n      } else {\n        this.second = newVal;\n      }\n    },\n\n    elementKeydown: function(e) {\n      switch (e.which) {\n      case 9: //tab\n        if (e.shiftKey) {\n          if (this.highlightedUnit === 'hour') {\n            this.hideWidget();\n            break;\n          }\n          this.highlightPrevUnit();\n        } else if ((this.showMeridian && this.highlightedUnit === 'meridian') || (this.showSeconds && this.highlightedUnit === 'second') || (!this.showMeridian && !this.showSeconds && this.highlightedUnit ==='minute')) {\n          this.hideWidget();\n          break;\n        } else {\n          this.highlightNextUnit();\n        }\n        e.preventDefault();\n        this.updateFromElementVal();\n        break;\n      case 27: // escape\n        this.updateFromElementVal();\n        break;\n      case 37: // left arrow\n        e.preventDefault();\n        this.highlightPrevUnit();\n        this.updateFromElementVal();\n        break;\n      case 38: // up arrow\n        e.preventDefault();\n        switch (this.highlightedUnit) {\n        case 'hour':\n          this.incrementHour();\n          this.highlightHour();\n          break;\n        case 'minute':\n          this.incrementMinute();\n          this.highlightMinute();\n          break;\n        case 'second':\n          this.incrementSecond();\n          this.highlightSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          this.highlightMeridian();\n          break;\n        }\n        this.update();\n        break;\n      case 39: // right arrow\n        e.preventDefault();\n        this.highlightNextUnit();\n        this.updateFromElementVal();\n        break;\n      case 40: // down arrow\n        e.preventDefault();\n        switch (this.highlightedUnit) {\n        case 'hour':\n          this.decrementHour();\n          this.highlightHour();\n          break;\n        case 'minute':\n          this.decrementMinute();\n          this.highlightMinute();\n          break;\n        case 'second':\n          this.decrementSecond();\n          this.highlightSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          this.highlightMeridian();\n          break;\n        }\n\n        this.update();\n        break;\n      }\n    },\n\n    getCursorPosition: function() {\n      var input = this.$element.get(0);\n\n      if ('selectionStart' in input) {// Standard-compliant browsers\n\n        return input.selectionStart;\n      } else if (document.selection) {// IE fix\n        input.focus();\n        var sel = document.selection.createRange(),\n          selLen = document.selection.createRange().text.length;\n\n        sel.moveStart('character', - input.value.length);\n\n        return sel.text.length - selLen;\n      }\n    },\n\n    getTemplate: function() {\n      var template,\n        hourTemplate,\n        minuteTemplate,\n        secondTemplate,\n        meridianTemplate,\n        templateContent;\n\n      if (this.showInputs) {\n        hourTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-hour\" maxlength=\"2\"/>';\n        minuteTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-minute\" maxlength=\"2\"/>';\n        secondTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-second\" maxlength=\"2\"/>';\n        meridianTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-meridian\" maxlength=\"2\"/>';\n      } else {\n        hourTemplate = '<span class=\"bootstrap-timepicker-hour\"></span>';\n        minuteTemplate = '<span class=\"bootstrap-timepicker-minute\"></span>';\n        secondTemplate = '<span class=\"bootstrap-timepicker-second\"></span>';\n        meridianTemplate = '<span class=\"bootstrap-timepicker-meridian\"></span>';\n      }\n\n      templateContent = '<table>'+\n         '<tr>'+\n           '<td><a href=\"#\" data-action=\"incrementHour\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n           '<td class=\"separator\">&nbsp;</td>'+\n           '<td><a href=\"#\" data-action=\"incrementMinute\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n           (this.showSeconds ?\n             '<td class=\"separator\">&nbsp;</td>'+\n             '<td><a href=\"#\" data-action=\"incrementSecond\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n           : '') +\n           (this.showMeridian ?\n             '<td class=\"separator\">&nbsp;</td>'+\n             '<td class=\"meridian-column\"><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n           : '') +\n         '</tr>'+\n         '<tr>'+\n           '<td>'+ hourTemplate +'</td> '+\n           '<td class=\"separator\">:</td>'+\n           '<td>'+ minuteTemplate +'</td> '+\n           (this.showSeconds ?\n            '<td class=\"separator\">:</td>'+\n            '<td>'+ secondTemplate +'</td>'\n           : '') +\n           (this.showMeridian ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td>'+ meridianTemplate +'</td>'\n           : '') +\n         '</tr>'+\n         '<tr>'+\n           '<td><a href=\"#\" data-action=\"decrementHour\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n           '<td class=\"separator\"></td>'+\n           '<td><a href=\"#\" data-action=\"decrementMinute\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n           (this.showSeconds ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td><a href=\"#\" data-action=\"decrementSecond\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n           : '') +\n           (this.showMeridian ?\n            '<td class=\"separator\">&nbsp;</td>'+\n            '<td><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n           : '') +\n         '</tr>'+\n       '</table>';\n\n      switch(this.template) {\n      case 'modal':\n        template = '<div class=\"bootstrap-timepicker-widget modal hide fade in\" data-backdrop=\"'+ (this.modalBackdrop ? 'true' : 'false') +'\">'+\n          '<div class=\"modal-header\">'+\n            '<a href=\"#\" class=\"close\" data-dismiss=\"modal\">&times;</a>'+\n            '<h3>Pick a Time</h3>'+\n          '</div>'+\n          '<div class=\"modal-content\">'+\n            templateContent +\n          '</div>'+\n          '<div class=\"modal-footer\">'+\n            '<a href=\"#\" class=\"btn btn-primary\" data-dismiss=\"modal\">OK</a>'+\n          '</div>'+\n        '</div>';\n        break;\n      case 'dropdown':\n        template = '<div class=\"bootstrap-timepicker-widget dropdown-menu\">'+ templateContent +'</div>';\n        break;\n      }\n\n      return template;\n    },\n\n    getTime: function() {\n      if (this.hour === '') {\n        return '';\n      }\n\n      return this.hour + ':' + (this.minute.toString().length === 1 ? '0' + this.minute : this.minute) + (this.showSeconds ? ':' + (this.second.toString().length === 1 ? '0' + this.second : this.second) : '') + (this.showMeridian ? ' ' + this.meridian : '');\n    },\n\n    hideWidget: function() {\n      if (this.isOpen === false) {\n        return;\n      }\n\n      this.$element.trigger({\n        'type': 'hide.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n\n      if (this.template === 'modal' && this.$widget.modal) {\n        this.$widget.modal('hide');\n      } else {\n        this.$widget.removeClass('open');\n      }\n\n      $(document).off('mousedown.timepicker, touchend.timepicker', this.handleDocumentClick);\n\n      this.isOpen = false;\n      // show/hide approach taken by datepicker\n      this.$widget.detach();\n    },\n\n    highlightUnit: function() {\n      this.position = this.getCursorPosition();\n      if (this.position >= 0 && this.position <= 2) {\n        this.highlightHour();\n      } else if (this.position >= 3 && this.position <= 5) {\n        this.highlightMinute();\n      } else if (this.position >= 6 && this.position <= 8) {\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else {\n          this.highlightMeridian();\n        }\n      } else if (this.position >= 9 && this.position <= 11) {\n        this.highlightMeridian();\n      }\n    },\n\n    highlightNextUnit: function() {\n      switch (this.highlightedUnit) {\n      case 'hour':\n        this.highlightMinute();\n        break;\n      case 'minute':\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else if (this.showMeridian){\n          this.highlightMeridian();\n        } else {\n          this.highlightHour();\n        }\n        break;\n      case 'second':\n        if (this.showMeridian) {\n          this.highlightMeridian();\n        } else {\n          this.highlightHour();\n        }\n        break;\n      case 'meridian':\n        this.highlightHour();\n        break;\n      }\n    },\n\n    highlightPrevUnit: function() {\n      switch (this.highlightedUnit) {\n      case 'hour':\n        if(this.showMeridian){\n          this.highlightMeridian();\n        } else if (this.showSeconds) {\n          this.highlightSecond();\n        } else {\n          this.highlightMinute();\n        }\n        break;\n      case 'minute':\n        this.highlightHour();\n        break;\n      case 'second':\n        this.highlightMinute();\n        break;\n      case 'meridian':\n        if (this.showSeconds) {\n          this.highlightSecond();\n        } else {\n          this.highlightMinute();\n        }\n        break;\n      }\n    },\n\n    highlightHour: function() {\n      var $element = this.$element.get(0),\n          self = this;\n\n      this.highlightedUnit = 'hour';\n\n      if ($element.setSelectionRange) {\n        setTimeout(function() {\n          if (self.hour < 10) {\n            $element.setSelectionRange(0,1);\n          } else {\n            $element.setSelectionRange(0,2);\n          }\n        }, 0);\n      }\n    },\n\n    highlightMinute: function() {\n      var $element = this.$element.get(0),\n          self = this;\n\n      this.highlightedUnit = 'minute';\n\n      if ($element.setSelectionRange) {\n        setTimeout(function() {\n          if (self.hour < 10) {\n            $element.setSelectionRange(2,4);\n          } else {\n            $element.setSelectionRange(3,5);\n          }\n        }, 0);\n      }\n    },\n\n    highlightSecond: function() {\n      var $element = this.$element.get(0),\n          self = this;\n\n      this.highlightedUnit = 'second';\n\n      if ($element.setSelectionRange) {\n        setTimeout(function() {\n          if (self.hour < 10) {\n            $element.setSelectionRange(5,7);\n          } else {\n            $element.setSelectionRange(6,8);\n          }\n        }, 0);\n      }\n    },\n\n    highlightMeridian: function() {\n      var $element = this.$element.get(0),\n          self = this;\n\n      this.highlightedUnit = 'meridian';\n\n      if ($element.setSelectionRange) {\n        if (this.showSeconds) {\n          setTimeout(function() {\n            if (self.hour < 10) {\n              $element.setSelectionRange(8,10);\n            } else {\n              $element.setSelectionRange(9,11);\n            }\n          }, 0);\n        } else {\n          setTimeout(function() {\n            if (self.hour < 10) {\n              $element.setSelectionRange(5,7);\n            } else {\n              $element.setSelectionRange(6,8);\n            }\n          }, 0);\n        }\n      }\n    },\n\n    incrementHour: function() {\n      if (this.showMeridian) {\n        if (this.hour === 11) {\n          this.hour++;\n          return this.toggleMeridian();\n        } else if (this.hour === 12) {\n          this.hour = 0;\n        }\n      }\n      if (this.hour === this.maxHours - 1) {\n        this.hour = 0;\n\n        return;\n      }\n      this.hour++;\n    },\n\n    incrementMinute: function(step) {\n      var newVal;\n\n      if (step) {\n        newVal = this.minute + step;\n      } else {\n        newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep);\n      }\n\n      if (newVal > 59) {\n        this.incrementHour();\n        this.minute = newVal - 60;\n      } else {\n        this.minute = newVal;\n      }\n    },\n\n    incrementSecond: function() {\n      var newVal = this.second + this.secondStep - (this.second % this.secondStep);\n\n      if (newVal > 59) {\n        this.incrementMinute(true);\n        this.second = newVal - 60;\n      } else {\n        this.second = newVal;\n      }\n    },\n\n    mousewheel: function(e) {\n      if (this.disableMousewheel) {\n        return;\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail,\n          scrollTo = null;\n\n      if (e.type === 'mousewheel') {\n        scrollTo = (e.originalEvent.wheelDelta * -1);\n      }\n      else if (e.type === 'DOMMouseScroll') {\n        scrollTo = 40 * e.originalEvent.detail;\n      }\n\n      if (scrollTo) {\n        e.preventDefault();\n        $(this).scrollTop(scrollTo + $(this).scrollTop());\n      }\n\n      switch (this.highlightedUnit) {\n      case 'minute':\n        if (delta > 0) {\n          this.incrementMinute();\n        } else {\n          this.decrementMinute();\n        }\n        this.highlightMinute();\n        break;\n      case 'second':\n        if (delta > 0) {\n          this.incrementSecond();\n        } else {\n          this.decrementSecond();\n        }\n        this.highlightSecond();\n        break;\n      case 'meridian':\n        this.toggleMeridian();\n        this.highlightMeridian();\n        break;\n      default:\n        if (delta > 0) {\n          this.incrementHour();\n        } else {\n          this.decrementHour();\n        }\n        this.highlightHour();\n        break;\n      }\n\n      return false;\n    },\n\n    /**\n     * Given a segment value like 43, will round and snap the segment\n     * to the nearest \"step\", like 45 if step is 15. Segment will\n     * \"overflow\" to 0 if it's larger than 59 or would otherwise\n     * round up to 60.\n     */\n    changeToNearestStep: function (segment, step) {\n      if (segment % step === 0) {\n        return segment;\n      }\n      if (Math.round((segment % step) / step)) {\n        return (segment + (step - segment % step)) % 60;\n      } else {\n        return segment - segment % step;\n      }\n    },\n\n    // This method was adapted from bootstrap-datepicker.\n    place : function() {\n      if (this.isInline) {\n        return;\n      }\n      var widgetWidth = this.$widget.outerWidth(), widgetHeight = this.$widget.outerHeight(), visualPadding = 10, windowWidth =\n        $(window).width(), windowHeight = $(window).height(), scrollTop = $(window).scrollTop();\n\n      var zIndex = parseInt(this.$element.parents().filter(function() { return $(this).css('z-index') !== 'auto'; }).first().css('z-index'), 10) + 10;\n      var offset = this.component ? this.component.parent().offset() : this.$element.offset();\n      var height = this.component ? this.component.outerHeight(true) : this.$element.outerHeight(false);\n      var width = this.component ? this.component.outerWidth(true) : this.$element.outerWidth(false);\n      var left = offset.left, top = offset.top;\n\n      this.$widget.removeClass('timepicker-orient-top timepicker-orient-bottom timepicker-orient-right timepicker-orient-left');\n\n      if (this.orientation.x !== 'auto') {\n        this.$widget.addClass('timepicker-orient-' + this.orientation.x);\n        if (this.orientation.x === 'right') {\n          left -= widgetWidth - width;\n        }\n      } else{\n        // auto x orientation is best-placement: if it crosses a window edge, fudge it sideways\n        // Default to left\n        this.$widget.addClass('timepicker-orient-left');\n        if (offset.left < 0) {\n          left -= offset.left - visualPadding;\n        } else if (offset.left + widgetWidth > windowWidth) {\n          left = windowWidth - widgetWidth - visualPadding;\n        }\n      }\n      // auto y orientation is best-situation: top or bottom, no fudging, decision based on which shows more of the widget\n      var yorient = this.orientation.y, topOverflow, bottomOverflow;\n      if (yorient === 'auto') {\n        topOverflow = -scrollTop + offset.top - widgetHeight;\n        bottomOverflow = scrollTop + windowHeight - (offset.top + height + widgetHeight);\n        if (Math.max(topOverflow, bottomOverflow) === bottomOverflow) {\n          yorient = 'top';\n        } else {\n          yorient = 'bottom';\n        }\n      }\n      this.$widget.addClass('timepicker-orient-' + yorient);\n      if (yorient === 'top'){\n        top += height;\n      } else{\n        top -= widgetHeight + parseInt(this.$widget.css('padding-top'), 10);\n      }\n\n      this.$widget.css({\n        top : top,\n        left : left,\n        zIndex : zIndex\n      });\n    },\n\n    remove: function() {\n      $('document').off('.timepicker');\n      if (this.$widget) {\n        this.$widget.remove();\n      }\n      delete this.$element.data().timepicker;\n    },\n\n    setDefaultTime: function(defaultTime) {\n      if (!this.$element.val()) {\n        if (defaultTime === 'current') {\n          var dTime = new Date(),\n            hours = dTime.getHours(),\n            minutes = dTime.getMinutes(),\n            seconds = dTime.getSeconds(),\n            meridian = 'AM';\n\n          if (seconds !== 0) {\n            seconds = Math.ceil(dTime.getSeconds() / this.secondStep) * this.secondStep;\n            if (seconds === 60) {\n              minutes += 1;\n              seconds = 0;\n            }\n          }\n\n          if (minutes !== 0) {\n            minutes = Math.ceil(dTime.getMinutes() / this.minuteStep) * this.minuteStep;\n            if (minutes === 60) {\n              hours += 1;\n              minutes = 0;\n            }\n          }\n\n          if (this.showMeridian) {\n            if (hours === 0) {\n              hours = 12;\n            } else if (hours >= 12) {\n              if (hours > 12) {\n                hours = hours - 12;\n              }\n              meridian = 'PM';\n            } else {\n              meridian = 'AM';\n            }\n          }\n\n          this.hour = hours;\n          this.minute = minutes;\n          this.second = seconds;\n          this.meridian = meridian;\n\n          this.update();\n\n        } else if (defaultTime === false) {\n          this.hour = 0;\n          this.minute = 0;\n          this.second = 0;\n          this.meridian = 'AM';\n        } else {\n          this.setTime(defaultTime);\n        }\n      } else {\n        this.updateFromElementVal();\n      }\n    },\n\n    setTime: function(time, ignoreWidget) {\n      if (!time) {\n        this.clear();\n        return;\n      }\n\n      var timeMode,\n          timeArray,\n          hour,\n          minute,\n          second,\n          meridian;\n\n      if (typeof time === 'object' && time.getMonth){\n        // this is a date object\n        hour    = time.getHours();\n        minute  = time.getMinutes();\n        second  = time.getSeconds();\n\n        if (this.showMeridian){\n          meridian = 'AM';\n          if (hour > 12){\n            meridian = 'PM';\n            hour = hour % 12;\n          }\n\n          if (hour === 12){\n            meridian = 'PM';\n          }\n        }\n      } else {\n        timeMode = ((/a/i).test(time) ? 1 : 0) + ((/p/i).test(time) ? 2 : 0); // 0 = none, 1 = AM, 2 = PM, 3 = BOTH.\n        if (timeMode > 2) { // If both are present, fail.\n          this.clear();\n          return;\n        }\n\n        timeArray = time.replace(/[^0-9\\:]/g, '').split(':');\n\n        hour = timeArray[0] ? timeArray[0].toString() : timeArray.toString();\n\n        if(this.explicitMode && hour.length > 2 && (hour.length % 2) !== 0 ) {\n          this.clear();\n          return;\n        }\n\n        minute = timeArray[1] ? timeArray[1].toString() : '';\n        second = timeArray[2] ? timeArray[2].toString() : '';\n\n        // adaptive time parsing\n        if (hour.length > 4) {\n          second = hour.slice(-2);\n          hour = hour.slice(0, -2);\n        }\n\n        if (hour.length > 2) {\n          minute = hour.slice(-2);\n          hour = hour.slice(0, -2);\n        }\n\n        if (minute.length > 2) {\n          second = minute.slice(-2);\n          minute = minute.slice(0, -2);\n        }\n\n        hour = parseInt(hour, 10);\n        minute = parseInt(minute, 10);\n        second = parseInt(second, 10);\n\n        if (isNaN(hour)) {\n          hour = 0;\n        }\n        if (isNaN(minute)) {\n          minute = 0;\n        }\n        if (isNaN(second)) {\n          second = 0;\n        }\n\n        // Adjust the time based upon unit boundary.\n        // NOTE: Negatives will never occur due to time.replace() above.\n        if (second > 59) {\n          second = 59;\n        }\n\n        if (minute > 59) {\n          minute = 59;\n        }\n\n        if (hour >= this.maxHours) {\n          // No day/date handling.\n          hour = this.maxHours - 1;\n        }\n\n        if (this.showMeridian) {\n          if (hour > 12) {\n            // Force PM.\n            timeMode = 2;\n            hour -= 12;\n          }\n          if (!timeMode) {\n            timeMode = 1;\n          }\n          if (hour === 0) {\n            hour = 12; // AM or PM, reset to 12.  0 AM = 12 AM.  0 PM = 12 PM, etc.\n          }\n          meridian = timeMode === 1 ? 'AM' : 'PM';\n        } else if (hour < 12 && timeMode === 2) {\n          hour += 12;\n        } else {\n          if (hour >= this.maxHours) {\n            hour = this.maxHours - 1;\n          } else if ((hour < 0) || (hour === 12 && timeMode === 1)){\n            hour = 0;\n          }\n        }\n      }\n\n      this.hour = hour;\n      if (this.snapToStep) {\n        this.minute = this.changeToNearestStep(minute, this.minuteStep);\n        this.second = this.changeToNearestStep(second, this.secondStep);\n      } else {\n        this.minute = minute;\n        this.second = second;\n      }\n      this.meridian = meridian;\n\n      this.update(ignoreWidget);\n    },\n\n    showWidget: function() {\n      if (this.isOpen) {\n        return;\n      }\n\n      if (this.$element.is(':disabled')) {\n        return;\n      }\n\n      // show/hide approach taken by datepicker\n      this.$widget.appendTo(this.appendWidgetTo);\n      $(document).on('mousedown.timepicker, touchend.timepicker', {scope: this}, this.handleDocumentClick);\n\n      this.$element.trigger({\n        'type': 'show.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n\n      this.place();\n      if (this.disableFocus) {\n        this.$element.blur();\n      }\n\n      // widget shouldn't be empty on open\n      if (this.hour === '') {\n        if (this.defaultTime) {\n          this.setDefaultTime(this.defaultTime);\n        } else {\n          this.setTime('0:0:0');\n        }\n      }\n\n      if (this.template === 'modal' && this.$widget.modal) {\n        this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this));\n      } else {\n        if (this.isOpen === false) {\n          this.$widget.addClass('open');\n        }\n      }\n\n      this.isOpen = true;\n    },\n\n    toggleMeridian: function() {\n      this.meridian = this.meridian === 'AM' ? 'PM' : 'AM';\n    },\n\n    update: function(ignoreWidget) {\n      this.updateElement();\n      if (!ignoreWidget) {\n        this.updateWidget();\n      }\n\n      this.$element.trigger({\n        'type': 'changeTime.timepicker',\n        'time': {\n          'value': this.getTime(),\n          'hours': this.hour,\n          'minutes': this.minute,\n          'seconds': this.second,\n          'meridian': this.meridian\n        }\n      });\n    },\n\n    updateElement: function() {\n      this.$element.val(this.getTime()).change();\n    },\n\n    updateFromElementVal: function() {\n      this.setTime(this.$element.val());\n    },\n\n    updateWidget: function() {\n      if (this.$widget === false) {\n        return;\n      }\n\n      var hour = this.hour,\n          minute = this.minute.toString().length === 1 ? '0' + this.minute : this.minute,\n          second = this.second.toString().length === 1 ? '0' + this.second : this.second;\n\n      if (this.showInputs) {\n        this.$widget.find('input.bootstrap-timepicker-hour').val(hour);\n        this.$widget.find('input.bootstrap-timepicker-minute').val(minute);\n\n        if (this.showSeconds) {\n          this.$widget.find('input.bootstrap-timepicker-second').val(second);\n        }\n        if (this.showMeridian) {\n          this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian);\n        }\n      } else {\n        this.$widget.find('span.bootstrap-timepicker-hour').text(hour);\n        this.$widget.find('span.bootstrap-timepicker-minute').text(minute);\n\n        if (this.showSeconds) {\n          this.$widget.find('span.bootstrap-timepicker-second').text(second);\n        }\n        if (this.showMeridian) {\n          this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian);\n        }\n      }\n    },\n\n    updateFromWidgetInputs: function() {\n      if (this.$widget === false) {\n        return;\n      }\n\n      var t = this.$widget.find('input.bootstrap-timepicker-hour').val() + ':' +\n              this.$widget.find('input.bootstrap-timepicker-minute').val() +\n              (this.showSeconds ? ':' + this.$widget.find('input.bootstrap-timepicker-second').val() : '') +\n              (this.showMeridian ? this.$widget.find('input.bootstrap-timepicker-meridian').val() : '')\n      ;\n\n      this.setTime(t, true);\n    },\n\n    widgetClick: function(e) {\n      e.stopPropagation();\n      e.preventDefault();\n\n      var $input = $(e.target),\n          action = $input.closest('a').data('action');\n\n      if (action) {\n        this[action]();\n      }\n      this.update();\n\n      if ($input.is('input')) {\n        $input.get(0).setSelectionRange(0,2);\n      }\n    },\n\n    widgetKeydown: function(e) {\n      var $input = $(e.target),\n          name = $input.attr('class').replace('bootstrap-timepicker-', '');\n\n      switch (e.which) {\n      case 9: //tab\n        if (e.shiftKey) {\n          if (name === 'hour') {\n            return this.hideWidget();\n          }\n        } else if ((this.showMeridian && name === 'meridian') || (this.showSeconds && name === 'second') || (!this.showMeridian && !this.showSeconds && name === 'minute')) {\n          return this.hideWidget();\n        }\n        break;\n      case 27: // escape\n        this.hideWidget();\n        break;\n      case 38: // up arrow\n        e.preventDefault();\n        switch (name) {\n        case 'hour':\n          this.incrementHour();\n          break;\n        case 'minute':\n          this.incrementMinute();\n          break;\n        case 'second':\n          this.incrementSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          break;\n        }\n        this.setTime(this.getTime());\n        $input.get(0).setSelectionRange(0,2);\n        break;\n      case 40: // down arrow\n        e.preventDefault();\n        switch (name) {\n        case 'hour':\n          this.decrementHour();\n          break;\n        case 'minute':\n          this.decrementMinute();\n          break;\n        case 'second':\n          this.decrementSecond();\n          break;\n        case 'meridian':\n          this.toggleMeridian();\n          break;\n        }\n        this.setTime(this.getTime());\n        $input.get(0).setSelectionRange(0,2);\n        break;\n      }\n    },\n\n    widgetKeyup: function(e) {\n      if ((e.which === 65) || (e.which === 77) || (e.which === 80) || (e.which === 46) || (e.which === 8) || (e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105)) {\n        this.updateFromWidgetInputs();\n      }\n    }\n  };\n\n  //TIMEPICKER PLUGIN DEFINITION\n  $.fn.timepicker = function(option) {\n    var args = Array.apply(null, arguments);\n    args.shift();\n    return this.each(function() {\n      var $this = $(this),\n        data = $this.data('timepicker'),\n        options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data()))));\n      }\n\n      if (typeof option === 'string') {\n        data[option].apply(data, args);\n      }\n    });\n  };\n\n  $.fn.timepicker.defaults = {\n    defaultTime: 'current',\n    disableFocus: false,\n    disableMousewheel: false,\n    isOpen: false,\n    minuteStep: 15,\n    modalBackdrop: false,\n    orientation: { x: 'auto', y: 'auto'},\n    secondStep: 15,\n    snapToStep: false,\n    showSeconds: false,\n    showInputs: true,\n    showMeridian: true,\n    template: 'dropdown',\n    appendWidgetTo: 'body',\n    showWidgetOnAddonClick: true,\n    icons: {\n      up: 'glyphicon glyphicon-chevron-up',\n      down: 'glyphicon glyphicon-chevron-down'\n    },\n    maxHours: 24,\n    explicitMode: false\n  };\n\n  $.fn.timepicker.Constructor = Timepicker;\n\n  $(document).on(\n    'focus.timepicker.data-api click.timepicker.data-api',\n    '[data-provide=\"timepicker\"]',\n    function(e){\n      var $this = $(this);\n      if ($this.data('timepicker')) {\n        return;\n      }\n      e.preventDefault();\n      // component click requires us to explicitly show it\n      $this.timepicker();\n    }\n  );\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tiny-editable/mindmup-editabletable.js",
    "content": "/*global $, window*/\n$.fn.editableTableWidget = function (options) {\n\t'use strict';\n\treturn $(this).each(function () {\n\t\tvar buildDefaultOptions = function () {\n\t\t\t\tvar opts = $.extend({}, $.fn.editableTableWidget.defaultOptions);\n\t\t\t\topts.editor = opts.editor.clone();\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t\tactiveOptions = $.extend(buildDefaultOptions(), options),\n\t\t\tARROW_LEFT = 37, ARROW_UP = 38, ARROW_RIGHT = 39, ARROW_DOWN = 40, ENTER = 13, ESC = 27, TAB = 9,\n\t\t\telement = $(this),\n\t\t\teditor = activeOptions.editor.css('position', 'absolute').hide().appendTo(element.parent()),\n\t\t\tactive,\n\t\t\tshowEditor = function (select) {\n\t\t\t\tactive = element.find('td:focus');\n\t\t\t\tif (active.length) {\n\t\t\t\t\teditor.val(active.text())\n\t\t\t\t\t\t.removeClass('error')\n\t\t\t\t\t\t.show()\n\t\t\t\t\t\t.offset(active.offset())\n\t\t\t\t\t\t.css(active.css(activeOptions.cloneProperties))\n\t\t\t\t\t\t.width(active.width())\n\t\t\t\t\t\t.height(active.height())\n\t\t\t\t\t\t.focus();\n\t\t\t\t\tif (select) {\n\t\t\t\t\t\teditor.select();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetActiveText = function () {\n\t\t\t\tvar text = editor.val(),\n\t\t\t\t\tevt = $.Event('change'),\n\t\t\t\t\toriginalContent;\n\t\t\t\tif (active.text() === text || editor.hasClass('error')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\toriginalContent = active.html();\n\t\t\t\tactive.text(text).trigger(evt, text);\n\t\t\t\tif (evt.result === false) {\n\t\t\t\t\tactive.html(originalContent);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmovement = function (element, keycode) {\n\t\t\t\tif (keycode === ARROW_RIGHT) {\n\t\t\t\t\treturn element.next('td');\n\t\t\t\t} else if (keycode === ARROW_LEFT) {\n\t\t\t\t\treturn element.prev('td');\n\t\t\t\t} else if (keycode === ARROW_UP) {\n\t\t\t\t\treturn element.parent().prev().children().eq(element.index());\n\t\t\t\t} else if (keycode === ARROW_DOWN) {\n\t\t\t\t\treturn element.parent().next().children().eq(element.index());\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t};\n\t\teditor.blur(function () {\n\t\t\tsetActiveText();\n\t\t\teditor.hide();\n\t\t}).keydown(function (e) {\n\t\t\tif (e.which === ENTER) {\n\t\t\t\tsetActiveText();\n\t\t\t\teditor.hide();\n\t\t\t\tactive.focus();\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t} else if (e.which === ESC) {\n\t\t\t\teditor.val(active.text());\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\teditor.hide();\n\t\t\t\tactive.focus();\n\t\t\t} else if (e.which === TAB) {\n\t\t\t\tactive.focus();\n\t\t\t} else if (this.selectionEnd - this.selectionStart === this.value.length) {\n\t\t\t\tvar possibleMove = movement(active, e.which);\n\t\t\t\tif (possibleMove.length > 0) {\n\t\t\t\t\tpossibleMove.focus();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.on('input paste', function () {\n\t\t\tvar evt = $.Event('validate');\n\t\t\tactive.trigger(evt, editor.val());\n\t\t\tif (evt.result === false) {\n\t\t\t\teditor.addClass('error');\n\t\t\t} else {\n\t\t\t\teditor.removeClass('error');\n\t\t\t}\n\t\t});\n\t\telement.on('click keypress dblclick', showEditor)\n\t\t.css('cursor', 'pointer')\n\t\t.keydown(function (e) {\n\t\t\tvar prevent = true,\n\t\t\t\tpossibleMove = movement($(e.target), e.which);\n\t\t\tif (possibleMove.length > 0) {\n\t\t\t\tpossibleMove.focus();\n\t\t\t} else if (e.which === ENTER) {\n\t\t\t\tshowEditor(false);\n\t\t\t} else if (e.which === 17 || e.which === 91 || e.which === 93) {\n\t\t\t\tshowEditor(true);\n\t\t\t\tprevent = false;\n\t\t\t} else {\n\t\t\t\tprevent = false;\n\t\t\t}\n\t\t\tif (prevent) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\telement.find('td').prop('tabindex', 1);\n\n\t\t$(window).on('resize', function () {\n\t\t\tif (editor.is(':visible')) {\n\t\t\t\teditor.offset(active.offset())\n\t\t\t\t.width(active.width())\n\t\t\t\t.height(active.height());\n\t\t\t}\n\t\t});\n\t});\n\n};\n$.fn.editableTableWidget.defaultOptions = {\n\tcloneProperties: ['padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right',\n\t\t\t\t\t  'text-align', 'font', 'font-size', 'font-family', 'font-weight',\n\t\t\t\t\t  'border', 'border-top', 'border-bottom', 'border-left', 'border-right'],\n\teditor: $('<input>')\n};\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tiny-editable/numeric-input-example.js",
    "content": "/* global $ */\n/* this is an example for validation and change events */\n$.fn.numericInputExample = function () {\n\t'use strict';\n\tvar element = $(this),\n\t\tfooter = element.find('tfoot tr'),\n\t\tdataRows = element.find('tbody tr'),\n\t\tinitialTotal = function () {\n\t\t\tvar column, total;\n\t\t\tfor (column = 1; column < footer.children().size(); column++) {\n\t\t\t\ttotal = 0;\n\t\t\t\tdataRows.each(function () {\n\t\t\t\t\tvar row = $(this);\n\t\t\t\t\ttotal += parseFloat(row.children().eq(column).text());\n\t\t\t\t});\n\t\t\t\tfooter.children().eq(column).text(total);\n\t\t\t};\n\t\t};\n\telement.find('td').on('change', function (evt) {\n\t\tvar cell = $(this),\n\t\t\tcolumn = cell.index(),\n\t\t\ttotal = 0;\n\t\tif (column === 0) {\n\t\t\treturn;\n\t\t}\n\t\telement.find('tbody tr').each(function () {\n\t\t\tvar row = $(this);\n\t\t\ttotal += parseFloat(row.children().eq(column).text());\n\t\t});\n\t\tif (column === 1 && total > 5000) {\n\t\t\t$('.alert').show();\n\t\t\treturn false; // changes can be rejected\n\t\t} else {\n\t\t\t$('.alert').hide();\n\t\t\tfooter.children().eq(column).text(total);\n\t\t}\n\t}).on('validate', function (evt, value) {\n\t\tvar cell = $(this),\n\t\t\tcolumn = cell.index();\n\t\tif (column === 0) {\n\t\t\treturn !!value && value.trim().length > 0;\n\t\t} else {\n\t\t\treturn !isNaN(parseFloat(value)) && isFinite(value);\n\t\t}\n\t});\n\tinitialTotal();\n\treturn this;\n};\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/langs/readme.md",
    "content": "This is where language files should be placed.\n\nPlease DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/license.txt",
    "content": "\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n\t\t       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\n\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n  \n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/plugins/codesample/css/prism.css",
    "content": "/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #a67f59;\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/plugins/example/dialog.html",
    "content": "<!DOCTYPE html>\n<html>\n<body>\n\t<h3>Custom dialog</h3>\n\tInput some text: <input id=\"content\">\n\t<button onclick=\"top.tinymce.activeEditor.windowManager.getWindows()[0].close();\">Close window</button>\n</body>\n</html>"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/plugins/visualblocks/css/visualblocks.css",
    "content": ".mce-visualblocks p {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n\n.mce-visualblocks h1 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n\n.mce-visualblocks h2 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n\n.mce-visualblocks h3 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n\n.mce-visualblocks h4 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n\n.mce-visualblocks h5 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n\n.mce-visualblocks h6 {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n\n.mce-visualblocks div:not([data-mce-bogus]) {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n\n.mce-visualblocks section {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n\n.mce-visualblocks article {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n\n.mce-visualblocks blockquote {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n\n.mce-visualblocks address {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n\n.mce-visualblocks pre {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin-left: 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n\n.mce-visualblocks figure {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n\n.mce-visualblocks hgroup {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n\n.mce-visualblocks aside {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n\n.mce-visualblocks figcaption {\n\tborder: 1px dashed #BBB;\n}\n\n.mce-visualblocks ul {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)\n}\n\n.mce-visualblocks ol {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n\n.mce-visualblocks dl {\n\tpadding-top: 10px;\n\tborder: 1px dashed #BBB;\n\tmargin: 0 0 1em 3px;\n\tbackground: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/atomic.js",
    "content": "configure({\n  configs: [\n    './prod.js'\n  ]\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/bootstrap-atomic.js",
    "content": "(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar kernel = bolt.kernel = bolt.kernel || {};\nkernel.api = kernel.api || {};\nkernel.async = kernel.api || {};\nkernel.fp = kernel.fp || {};\nkernel.modulator = kernel.modulator || {};\nkernel.module = kernel.module || {};\nkernel.fp.array = def(\n  [\n  ],\n\n  function () {\n    var equals = function (a1, a2) {\n      if (a1.length !== a2.length)\n        return false;\n      for (var i = 0; i < a1.length; ++i)\n        if (a1[i] !== a2[i])\n          return false;\n      return true;\n    };\n\n    var forall = function (a, f) {\n      var fn = f || function (x) {\n        return x === true;\n      };\n      for (var i = 0; i < a.length; ++i)\n        if (fn(a[i]) !== true)\n          return false;\n      return true;\n    };\n\n    var map = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r.push(f(a[i], i));\n      return r;\n    };\n\n    var flatten = function (a) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r = r.concat(a[i]);\n      return r;\n    };\n\n    var flatmap = function (a, f) {\n      return flatten(map(a, f));\n    };\n\n    var filter = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        if (f(a[i]))\n          r.push(a[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var contains = function (a, x) {\n      return !forall(a, function (v) {\n        return v !== x;\n      });\n    };\n\n    var indexof = function (a, x) {\n      for (var i = 0; i < a.length; ++i)\n        if (a[i] === x)\n          return i;\n      return -1;\n    };\n\n    return {\n      equals: equals,\n      forall: forall,\n      map: map,\n      flatten: flatten,\n      flatmap: flatmap,\n      filter: filter,\n      each: each,\n      contains: contains,\n      indexof: indexof\n    };\n  }\n);\nkernel.fp.object = def(\n  [\n  ],\n\n  function () {\n    var map = function (o, f) {\n      var r = {};\n      for (var i in o)\n        if (o.hasOwnProperty(i))\n          r[i] = f(i, o[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var merge = function (d, s) {\n      each(s, function (k, v) {\n        d[k] = v;\n      });\n    };\n\n    var keys = function (o) {\n      var r = [];\n      each(o, function (k) {\n        r.push(k);\n      });\n      return r;\n    };\n\n    return {\n      each: each,\n      keys: keys,\n      map: map,\n      merge: merge\n    };\n  }\n);\nkernel.fp.functions = def(\n  [\n  ],\n\n  function () {\n    var curry = function (f) {\n      var slice = Array.prototype.slice;\n      var args = slice.call(arguments, 1);\n      return function () {\n        var all = args.concat(slice.call(arguments, 0));\n        return f.apply(null, all);\n      };\n    };\n\n    var not = function (z) {\n      return function () {\n        var slice = Array.prototype.slice;\n        return !z.apply(null, slice.call(arguments, 0));\n      };\n    };\n\n    var apply = function (f) {\n      var slice = Array.prototype.slice;\n      return f.apply(null, slice.call(arguments, 0));\n    };\n\n    return {\n      curry: curry,\n      not: not,\n      apply: apply\n    };\n  }\n);kernel.async.map = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var amap = function (data, f, oncomplete) {\n      var total = data.length;\n      var count = 0;\n      var results = [];\n\n      ar.each(data, function (datum, i) {\n        f(datum, function (result) {\n          ++count;\n          results[i] = result;\n          if (count === total)\n            oncomplete(results);\n        });\n      });\n    };\n\n    return {\n      amap: amap\n    };\n  }\n);\n/**\n * This module has a dual responsibility:\n *  1. Ensures that asynchronous function calls, 'f', that share the same\n *     'key' are not executed in parallel.\n *  2. In the case where an attempt to call in parallel is prevented,\n *     the 'action' callbacks are executed when the asynchronous call is\n *     completed.\n *\n * Example:\n *  When we async-map to remotely fetch module definition, it is\n *  important that only a single define is evaluated, but the\n *  notification that the definition has completed is propagated\n *  to all interested parties.\n *\n *    1. we require dependencies 'x' and 'y'\n *\n *    2. both x and y are defined in the same file  (i.e. compiled together), 'a.js'.\n *\n *    3. we resolve x and y, to their load spec using a modulator\n *        x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *        y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *\n *    4. we make the piggyback call for x:\n *        piggybacker.piggyback(x_spec.url, x_spec.load, xdone);\n *\n *       this will register the 'xdone' action, and actually\n *       trigger the load call, with a synthetic callback\n *       responsible for triggering all registered actions.\n *\n *    5. we make the piggyback call for y:\n *        piggybacker.piggyback(y_spec.url, y_spec.load, ydone);\n *\n *       this will register the 'ydone' action, but NOT trigger\n *       the load call.\n *\n *    6. the load call completes, and calls the synthetic callback,\n *       which is responsible for triggering both 'xdone' and 'ydone'.\n *\n *    7. something else happens that means we have to load 'a.js' again,\n *       the piggybacker DOES NOT prevent this call, and will follow\n *       the above process.\n */\nkernel.async.piggybacker = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function () {\n      var queue = {};  // key -> [actions]\n\n      var process = function (key) {\n        var actions = queue[key];\n        delete queue[key];\n        ar.each(actions, fn.apply);\n      };\n\n      var piggyback = function (key, f, action) {\n        if (queue[key] === undefined) {\n          queue[key] = [ action ];\n          f(fn.curry(process, key));\n        } else {\n          queue[key].push(action);\n        }\n      };\n\n      return {\n        piggyback: piggyback\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.globalator = def(\n  [\n  ],\n\n  function () {\n    var create = function () {\n      // FIX pull out\n      var resolve = function (name, scope) {\n        var parts = name.split('.');\n        var r = scope;\n        for (var i = 0; i < parts.length && r !== undefined; ++i)\n          r = r[parts[i]];\n        return r;\n      };\n\n      var global = Function('return this')();\n\n      var can = function (id) {\n        return id.indexOf('global!') === 0;\n      };\n\n      var get = function (id, define, require) {\n        var name = id.substring('global!'.length);\n\n        var load = function (onsuccess, onfailure) {\n          var instance = resolve(name, global);\n          if (instance !== undefined) {\n            define(id, [], function () { return instance; });\n            onsuccess();\n          } else {\n            onfailure('Modulator error: could not resolve global [' + name + ']');\n          }\n        };\n\n        return {\n          url: id, // this just needs to be unique, no download required.\n          load: load,\n          serial: true\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      }\n    };\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.bolt = def(\n  [\n    kernel.fp.functions\n  ],\n\n  function (fn) {\n    var create = function (loader, pather, namespace, path, idTransformer, options) {\n      var can = function (id) {\n        return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;\n      };\n\n      var get = function (id) {\n        var before = options !== undefined && options.absolute === true ? path : pather(path);\n        var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';\n        var url = before + \"/\" + idTransformer(id) + '.js' + after;\n        var load = fn.curry(loader.load, url);\n\n        return {\n          url: url,\n          load: load,\n          serial: false\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);kernel.module.stratifier = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var stratify = function (specs) {\n      var parallels = ar.filter(specs, function (spec) {\n        return !spec.serial;\n      });\n      return parallels.length > 0 ? parallels : specs.slice(0, 1);\n    };\n\n    return {\n      stratify: stratify\n    };\n  }\n);\n/**\n * This module performs dependency analysis of strings that depend on sets of\n * strings.\n *\n * The input is an array of root strings to start analysis from, and an object\n * that contains a mapping of each string to the strings it depends on.\n *\n * Performing an analysis results in either:\n *   1. an empty array, indicating that all dependencies are satisfied,\n *   2. an array of strings that are, at the minimum, still needed in order to\n *      satisfy the given dependency trees, or\n *   3. an array of strings that form a dependency cycle.\n */\nkernel.module.analyser = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (array) {\n    var collect = function (path, name) {\n      var i = array.indexof(path, name);\n      var p = path.slice(i);\n      return p.concat([name]);\n    };\n\n    /**\n     * @param {array} roots Contains a list of root ids\n     * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }\n     */\n    var analyse = function (roots, modules) {\n      var done = {};\n      var path = [];\n      var missing = [];\n      var cycle;\n\n      var children = function (name) {\n        array.each(modules[name], attempt);\n      };\n\n      var examine = function (name) {\n        if (modules[name])\n          children(name);\n        else\n          missing.push(name);\n      };\n\n      var descend = function (name) {\n        path.push(name);\n        examine(name);\n        path.pop();\n      };\n\n      var decycle = function (name) {\n        if (array.contains(path, name))\n          cycle = collect(path, name);\n        else\n          descend(name);\n      };\n\n      var attempt = function (name) {\n        if (!done[name]) {\n          decycle(name);\n          done[name] = true;\n        }\n      };\n\n      array.each(roots, attempt);\n\n      return cycle ? { cycle: cycle } : { load: missing };\n    };\n\n    return {\n      analyse: analyse\n    };\n  }\n);\nkernel.module.fetcher = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions,\n    kernel.async.map,\n    kernel.async.piggybacker,\n    kernel.module.stratifier\n  ],\n\n  function (ar, fn, map, piggybacker, stratifier) {\n    var create = function (regulator, validator, onerror, define, require, demand) {\n      var piggyback = piggybacker.create();\n\n      var validate = function (onsuccess, results) {\n        var failed = ar.filter(results, fn.not(validator));\n        if (failed.length > 0)\n          onerror('Fetcher error: modules were not defined: ' + failed.join(', '));\n        else\n          onsuccess();\n      };\n\n      var mapper = function (spec, onresult) {\n        var action = fn.curry(onresult, spec.id);\n        var load = function (callback) {\n          spec.load(callback, onerror);\n        };\n        piggyback.piggyback(spec.url, load, action);\n      };\n\n      var asyncfetch = function (specs, onsuccess) {\n        var oncomplete = fn.curry(validate, onsuccess);\n        var strata = stratifier.stratify(specs);\n        map.amap(strata, mapper, oncomplete);\n      };\n\n      var fetch = function (ids, onsuccess) {\n        regulator.regulate(ids, define, require, demand, function (specs) {\n          asyncfetch(specs, onsuccess);\n        }, onerror);\n      };\n\n      return {\n        fetch: fetch\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.module.loader = def(\n  [\n    kernel.module.analyser\n  ],\n\n  function (analyser) {\n    var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {\n      var result = analyser.analyse(roots, deps);\n\n      if (result.cycle)\n        onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));\n      else if (result.load.length === 0)\n        onsuccess();\n      else\n        fetcher.fetch(result.load, oncontinue);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nkernel.module.manager = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.module.loader,\n    kernel.module.fetcher\n  ],\n\n  function (ar, obj, loader, fetcher) {\n    var create = function (regulator, onerror) {\n      var blueprints = {};  // id -> { id: string, dependencies: [ string ], definition: function }\n      var modules = {};     // id -> module\n\n      // Adds a module to the system.\n      var define = function (id, dependencies, definition) {\n        if (id === undefined)\n          onerror(\"Define error: module id can not be undefined\");\n        else if (blueprints[id] !== undefined)\n          onerror(\"Define error: module '\" + id + \"' is already defined\");\n        else\n          blueprints[id] = { id: id, dependencies: dependencies, definition: definition };\n      };\n\n      // Loads a set of modules asynchronously.\n      var require = function (ids, callback) {\n        var onsuccess = function () {\n          var instances = ar.map(ids, demand);\n          callback.apply(null, instances);\n        };\n\n        var oncontinue = function () {\n          var deps = obj.map(blueprints, function (k, v) {\n            return v.dependencies;\n          });\n          loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);\n        };\n\n        oncontinue();\n      };\n\n      // Instantiates a module and all of its dependencies.\n      var demand = function (id) {\n        if (modules[id] !== undefined)\n          return modules[id];\n        if (blueprints[id] === undefined)\n          throw \"module '\" + id + \"' is not defined\";\n        var result = instantiate(id);\n        if (result === undefined)\n          throw \"module '\" + id + \"' returned undefined from definition function\";\n        modules[id] = result;\n        return result;\n      };\n\n      var instantiate = function (id) {\n        var blueprint = blueprints[id];\n        var args = ar.map(blueprint.dependencies, demand);  // Instantiate dependencies\n        return blueprint.definition.apply(null, args);  // Instantiate self\n      };\n\n      var validator = function (id) { return blueprints[id] !== undefined; };\n      var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);\n\n      return {\n        define: define,\n        require: require,\n        demand: demand\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.sources = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.modulator.globalator\n  ],\n\n  function (ar, obj, globalator) {\n    var create = function (builtins, configuration) {\n      var data = {\n        'global': { instance: globalator }\n      };\n      obj.each(builtins, function (key, value) {\n        data[key] = { instance: value };\n      });\n      ar.each(configuration.types, function (spec) {\n        data[spec.type] = { id: spec.modulator };\n      });\n      var sourcespecs = configuration.sources.slice(0);\n      var sources = [ globalator.create() ];\n\n      var guard = function (type) {\n        if (data[type] === undefined)\n          throw 'Unknown modulator type [' + type + '].';\n      };\n\n      var isResolved = function (type) {\n        guard(type);\n        return data[type].instance !== undefined;\n      };\n\n      var idOf = function (type) {\n        guard(type);\n        return data[type].id;\n      };\n\n      var instanceOf = function (type) {\n        guard(type);\n        return data[type].instance;\n      };\n\n      var register = function (type, instance) {\n        guard(type);\n        data[type].instance = instance;\n      };\n\n      var find = function (id) {\n        for (var i = 0; i < sources.length; ++i)\n          if (sources[i].can(id))\n            return { found: sources[i] };\n        return { notfound: true };\n      };\n\n      var crank = function () {\n        var left = [];\n        ar.each(sourcespecs, function (spec) {\n          if (isResolved(spec.type)) {\n            var instance = instanceOf(spec.type);\n            var source = instance.create.apply(null, spec.args);\n            sources.push(source);\n          } else\n            left.push(spec);\n        });\n        sourcespecs = left;\n      };\n\n      return {\n        isResolved: isResolved,\n        idOf: idOf,\n        instanceOf: instanceOf,\n        register: register,\n        find: find,\n        crank: crank\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.regulator = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function (sources) {\n      /*\n       * 1. Resolve configuration as much as possible\n       * 2. Check for unresolved modulator types that are required to continue.\n       *   a) Go ahead and resolve, if we have everything we need.\n       *   b) Delay, requiring the modulators, then retry.\n       */\n      var regulate = function (ids, define, require, demand, onsuccess, onerror) {\n        sources.crank();\n        var required = ar.map(ids, determinetype);\n        var unresolved = ar.filter(required, fn.not(sources.isResolved));\n        if (unresolved.length === 0)\n          resolve(ids,  define, require, demand, onsuccess, onerror);\n        else\n          delay(unresolved, ids, define, require, demand, onsuccess, onerror);\n      };\n\n      var resolve = function (ids,  define, require, demand, onsuccess, onerror) {\n        var r = [];\n        for (var i = 0; i < ids.length; ++i) {\n          var id = ids[i];\n          var source = sources.find(id);\n          if (source.notfound) {\n            onerror('Could not find source for module [' +  id + ']');\n            return;\n          }\n          var spec = source.found.get(id, define, require, demand);\n          r[i] = build(id, spec);\n        }\n        onsuccess(r);\n      };\n\n      var build = function (id, spec) {\n        return {\n          id: id,\n          url: spec.url,\n          load: spec.load,\n          serial: spec.serial\n        };\n      };\n\n      var delay = function (types, ids, define, require, demand, onsuccess, onerror) {\n        var modulatorids = ar.map(types, sources.idOf);\n        require(modulatorids, function (/* modulators */) {\n          var modulators = arguments;\n          ar.each(types, function (type, i) {\n             sources.register(type, modulators[i]);\n          });\n          regulate(ids, define, require, demand, onsuccess, onerror);\n        });\n      };\n\n      var determinetype = function (id) {\n        var index = id.indexOf('!');\n        return index === -1 ? 'bolt' : id.substring(0, index);\n      };\n\n      return {\n        regulate: regulate\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.config = def(\n  [\n    kernel.module.manager,\n    kernel.api.regulator,\n    kernel.api.sources\n  ],\n\n  function (manager, regulator, sources) {\n    var configure = function (configuration, builtins, onerror) {\n      var s = sources.create(builtins, configuration);\n      var r = regulator.create(s);\n      var engine = manager.create(r, onerror);\n\n      return {\n        define: engine.define,\n        require: engine.require,\n        demand: engine.demand\n      };\n    };\n\n    return {\n      configure: configure\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar loader = bolt.loader = bolt.loader || {};\nloader.executor = loader.executor || {};\nloader.api = loader.api || {};\nloader.transporter = loader.transporter || {};\nloader.tag = loader.tag || {};\nloader.tag.script = def(\n  [\n  ],\n\n  function () {\n    var guard = function (callback) {\n      return function (evt) {\n        if (evt.srcElement.readyState === \"loaded\" || evt.srcElement.readyState === \"complete\")\n          callback();\n      };\n    };\n\n    var ie = function (el) {\n      return el.attachEvent && !window.opera;\n    };\n\n    var onload = function (el, callback) {\n      if (ie(el))\n        el.attachEvent(\"onreadystatechange\", guard(callback));\n      else\n        el.addEventListener(\"load\", callback, false);\n    };\n\n    var createtag = function (callback) {\n      var el = document.createElement(\"script\");\n      el.type = \"text/javascript\";\n      onload(el, callback);\n      return el;\n    };\n\n    var insert = function (decorator, callback) {\n      var el = createtag(callback);\n      decorator(el);\n      var head = document.getElementsByTagName(\"head\")[0];\n      head.appendChild(el);\n    };\n\n    return {\n      insert: insert\n    };\n  }\n);\nloader.transporter.commonjs = def(\n  [\n  ],\n\n  function () {\n    var read = function (url, success, error) {\n      var fs = require('fs');\n      fs.exists(url, function (exists) {\n        if (exists)\n          fs.readFile(url, 'UTF-8', function (err, data) {\n            if (err)\n              error('Error reading file [' + url + '], error [' + err + ']');\n            else\n              success(data);\n          });\n        else\n          error('File does not exist [' + url + ']');\n      });\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nloader.transporter.xhr = def(\n  [\n  ],\n\n  function () {\n    var requestObject = function () {\n      // Correct way to use XMLHttpRequest in IE:\n      // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx\n      var factories = [\n        function () { return new XMLHttpRequest() },\n        function () { return new ActiveXObject(\"Microsoft.XMLHTTP\") }\n      ];\n\n      return fallback(factories);\n    };\n\n    var fallback = function (items) {\n      for (var i = 0; i < items.length; ++i) {\n        try {\n          return items[i]();\n        } catch (e) {\n        }\n      }\n    };\n\n    var handler = function (req, url, success, error) {\n      return function () {\n        if (req.readyState === 4)\n          done(req, url, success, error);\n      };\n    };\n\n    var done = function (req, url, success, error) {\n      if (req.status === 200 || req.status === 304)\n        success(req.responseText);\n      else\n        error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: \"' + url + '\"');\n    };\n\n    var getUrl = function (req, url, success, error) {\n      req.open('GET', url, true);\n      req.onreadystatechange = handler(req, url, success, error);\n      req.send();\n    };\n\n    var request = function (url, success, error) {\n      var req = requestObject();\n      if (req)\n        getUrl(req, url, success, error);\n      else\n        error('Transport error: browser does not support XMLHttpRequest.');\n    };\n\n    return {\n      request: request\n    };\n  }\n);\nloader.executor.evaller = def(\n  [\n  ],\n\n  function () {\n    var execute = function (data, onsuccess, onfailure) {\n      try {\n        eval(data);\n      } catch(e) {\n        onfailure(e);\n        return;\n      }\n\n      onsuccess();\n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.executor.injector = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var execute = function (data, onsuccess, onfailure) {\n      var inject = function (tag) {\n        tag.text = data;\n      };\n\n      var noop = function () {};\n\n      // Injection does not fire events, but execution happens synchronously,\n      // so we just make an explicit callback\n      script.insert(inject, noop);\n      onsuccess(); \n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.api.commonjsevaller = def(\n  [\n    loader.transporter.commonjs,\n    loader.executor.evaller\n  ],\n\n  function (commonjs, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      commonjs.read(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.scripttag = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var load = function (url, onsuccess, onfailure) {\n      var sourcer = function (tag) {\n        tag.src = url;\n      };\n\n      script.insert(sourcer, onsuccess);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrevaller = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.evaller\n  ],\n\n  function (xhr, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrinjector = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.injector\n  ],\n\n  function (xhr, injector) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        injector.execute(data, onsuccess);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar module = bolt.module = bolt.module || {};\nmodule.bootstrap = module.bootstrap || {};\nmodule.config = module.config || {};\nmodule.error = module.error || {};\nmodule.modulator = module.modulator || {};\nmodule.reader = module.reader || {};\nmodule.runtime = module.runtime || {};\nmodule.util = module.util || {};\nmodule.error.error = def(\n  [\n  ],\n\n  function () {\n    var die = function (msg) {\n      throw msg || new Error('unknown error');\n    };\n\n    return {\n      die: die\n    };\n  }\n);\nmodule.config.mapper = def(\n  [\n  ],\n\n  function () {\n    var flat = function (id) {\n      return id;\n    };\n\n    var hierarchical = function (id) {\n      return id.replace(/\\./g, '/');\n    };\n\n    var constant = function (name) {\n      return function () {\n        return name;\n      };\n    };\n\n    return {\n      flat: flat,\n      hierarchical: hierarchical,\n      constant: constant\n    };\n  }\n);\nmodule.api = def(\n  [\n    module.runtime\n  ],\n\n  function (runtime) {\n    var delegate = function (method) {\n      return function () {\n        return runtime[method].apply(null, arguments);\n      };\n    };\n\n    return {\n      define: delegate('define'),\n      require: delegate('require'),\n      demand: delegate('demand'),\n      main: delegate('main'),\n      load: delegate('load'),\n      loadscript: delegate('loadscript')\n    };\n  }\n);\nmodule.util.path = def(\n  [\n  ],\n\n  function () {\n    var dirname = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(0, end);\n    };\n\n    var basename = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(end + 1);\n    };\n\n    return {\n      basename: basename,\n      dirname: dirname\n    };\n  }\n);\nmodule.util.locator = def(\n  [\n  ],\n\n  function () {\n    var browser = function () {\n      var scripts = document.getElementsByTagName(\"script\");\n      return scripts[scripts.length - 1].src;\n    };\n\n    var runtime = module.runtime.locate;\n\n    var locate = function () {\n      var f = runtime || browser;\n      return f();\n    };\n\n    return {\n      locate: locate\n    };\n  }\n);\nmodule.util.pather = def(\n  [\n    module.util.path\n  ],\n\n  function (path) {\n    var create = function (relativeto) {\n      var base = path.dirname(relativeto);\n      return function (path) {\n        return base + '/' + path;\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.modulator.modulators = def(\n  [\n    ephox.bolt.kernel.fp.functions,\n    ephox.bolt.kernel.modulator.bolt,\n    ephox.bolt.loader.api.commonjsevaller,\n    ephox.bolt.loader.api.scripttag,\n    ephox.bolt.loader.api.xhrevaller,\n    ephox.bolt.loader.api.xhrinjector\n  ],\n\n  function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {\n    var wrap = function (modulator, loader) {\n      var create = fn.curry(modulator.create, loader);\n\n      return {\n        create: create\n      }\n    };\n\n    return {\n      boltcommonjs: wrap(bolt, commonjsevaller),\n      boltscripttag: wrap(bolt, scripttag),\n      boltxhreval: wrap(bolt, xhrevaller),\n      boltxhrinjector: wrap(bolt, xhrinjector)\n    };\n  }\n);\nmodule.config.builtins = def(\n  [\n    ephox.bolt.module.modulator.modulators.boltscripttag,\n    ephox.bolt.module.modulator.modulators.boltcommonjs\n  ],\n\n  function (boltscripttag, boltcommonjs) {\n    return {\n      // TODO: 'amd' is maintained for backwards compatibility, will be removed\n      // at some point.\n      browser: { bolt: boltscripttag, amd: boltscripttag },\n      commonjs: { bolt: boltcommonjs, amd: boltcommonjs }\n    };\n  }\n);\nmodule.config.specs = def(\n  [\n    module.util.pather\n  ],\n\n  function (pather) {\n    var type = function (type, implementation) {\n      return {\n        type: type,\n        implementation: implementation,\n        modulator: implementation + '.Modulator',\n        compiler: implementation + '.Compiler'\n      };\n    };\n\n    var source = function (relativeto) {\n      return function (type /*, args */) {\n        return {\n          type: type,\n          relativeto: relativeto,\n          args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))\n        };\n      }\n    };\n\n    return {\n      type: type,\n      source: source\n    };\n  }\n);\nmodule.reader.bouncing = def(\n  [\n    ephox.bolt.kernel.fp.array,\n    module.error.error,\n    module.config.specs\n  ],\n\n  function (ar, error, specs) {\n    var bounce = function (done, read, acc) {\n      var next = acc.configs.shift();\n      read(next.relativeto, next.config, done, acc);\n    };\n\n    var tick = function (file, cfg, done, read, acc) {\n      var munged = ar.map(cfg.configs || [], function (config) {\n        return { relativeto: file, config: config };\n      });\n      var accumulated = {\n        sources: acc.sources.concat(cfg.sources || []),\n        types: acc.types.concat(cfg.types || []),\n        configs: munged.concat(acc.configs)\n      };\n      if (accumulated.configs.length > 0)\n        bounce(done, read, accumulated);\n      else\n        done({ sources: accumulated.sources, types: accumulated.types });\n    };\n\n    /*\n     * All precedence is depth-first, pre-order. Example:\n     *\n     *        A\n     *       /-\\\n     *      B   C\n     *     /|   |\\\n     *    D E   F G\n     *\n     * Configs are read in A, B, D, E, C, F, G.\n     *\n     * If configs mixed delegation and sources, the\n     * sources would be ordered the same: A, B, D, E, C, F, G.\n     */\n\n    var evaluate = function (file, payload, done, read, acc) {\n      var result = {};\n      /* eval scope */\n      var mapper = module.config.mapper;\n      var type = specs.type;\n      var source = specs.source(file);\n      var configure = function (configuration) {\n        result = configuration;\n      };\n      try {\n        eval(payload);\n      } catch (e) {\n        throw 'Could not load configuration [' + file + '], with: ' + e;\n      }\n      tick(file, result, done, read, acc);\n    };\n\n    return {\n      evaluate: evaluate\n    };\n  }\n);\nmodule.reader.browser = def(\n  [\n    module.error.error,\n    module.reader.bouncing,\n    module.util.path,\n    ephox.bolt.loader.transporter.xhr\n  ],\n\n  function (error, bouncing, path, xhr) {\n    var read = function (relativeto, file, done, acc) {\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = base + '/' + file;\n      xhr.request(absolute, function (payload) {\n        bouncing.evaluate(absolute, payload, done, read, accumulated);\n      }, error.die);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.node = def(\n  [\n    module.reader.bouncing\n  ],\n\n  function (bouncing, path, fs) {\n    var read = function (relativeto, file, done, acc) {\n      var fs = require('fs');\n      var path = require('path');\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = path.resolve(base, file);\n      var payload = fs.readFileSync(absolute, 'UTF-8');\n      bouncing.evaluate(absolute, payload, done, read, accumulated);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.direct = def(\n  [\n  ],\n\n  function () {\n    var create = function (configuration) {\n      return function (done) {\n        done({\n          sources: configuration.sources || [],\n          types: configuration.types || [],\n          configs: configuration.configs || []\n        });\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nmodule.bootstrap.configloader = def(\n  [\n    module.util.locator,\n    module.reader.browser\n  ],\n\n  function (locator, browser) {\n    var create = function (file) {\n      var script = locator.locate();\n      return function (done) {\n        browser.read(script, file, done);\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.bootstrap.deferred = def(\n  [\n    ephox.bolt.kernel.fp.array\n  ],\n\n  function (ar) {\n    var deferred = [];\n\n    var require = function (ids, fn) {\n      var r = function (real) {\n        real(ids, fn);\n      };\n      deferred.push(r);\n    };\n\n    var configured = function (require) {\n      ar.each(deferred, function (action) {\n        action(require);\n      });\n      deferred = [];\n    };\n\n    return {\n      require: require,\n      configured: configured\n    };\n  }\n);\nmodule.bootstrap.main = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.runtime\n  ],\n\n  function (config, deferred, runtime) {\n    var main = function (id, args, configids, callback) {\n      runtime.require(configids || [], function () {\n        callback && callback.apply(null, arguments);\n        runtime.require([ id ], function (module) {\n          module.apply(null, args || []);\n        });\n      });\n    };\n\n    return {\n      main: main\n    };\n  }\n);\nmodule.bootstrap.install = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.bootstrap.main,\n    module.runtime,\n    module.error.error\n  ],\n\n  function (config, deferred, main, runtime, error) {\n    var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };\n\n    var install = function (reader, builtins, load, loadscript) {\n      runtime.define = notready;\n      runtime.demand = notready;\n      runtime.require = deferred.require;\n      runtime.main = main.main;\n      runtime.load = load;\n      runtime.loadscript = loadscript;\n\n      reader(function (configuration) {\n        var bolt = config.configure(configuration, builtins, error.die);\n        runtime.define = bolt.define;\n        runtime.require = bolt.require;\n        runtime.demand = bolt.demand;\n\n        deferred.configured(runtime.require);\n      });\n    };\n\n    return {\n      install: install\n    };\n  }\n);\n\n})(Function('return this')());\n(function (global) {\n  var obj = ephox.bolt.kernel.fp.object;\n  var api = ephox.bolt.module.api;\n  var builtins = ephox.bolt.module.config.builtins.browser;\n  var install = ephox.bolt.module.bootstrap.install;\n  var reader = ephox.bolt.module.bootstrap.configloader.create(\"atomic.js\");\n  var transport = ephox.bolt.loader.transporter.xhr.request;\n  var script = ephox.bolt.loader.api.scripttag.load;\n  install.install(reader, builtins, transport, script);\n  obj.merge(global, api);\n})(Function(\"return this;\")());"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/bootstrap-browser.js",
    "content": "(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar kernel = bolt.kernel = bolt.kernel || {};\nkernel.api = kernel.api || {};\nkernel.async = kernel.api || {};\nkernel.fp = kernel.fp || {};\nkernel.modulator = kernel.modulator || {};\nkernel.module = kernel.module || {};\nkernel.fp.array = def(\n  [\n  ],\n\n  function () {\n    var equals = function (a1, a2) {\n      if (a1.length !== a2.length)\n        return false;\n      for (var i = 0; i < a1.length; ++i)\n        if (a1[i] !== a2[i])\n          return false;\n      return true;\n    };\n\n    var forall = function (a, f) {\n      var fn = f || function (x) {\n        return x === true;\n      };\n      for (var i = 0; i < a.length; ++i)\n        if (fn(a[i]) !== true)\n          return false;\n      return true;\n    };\n\n    var map = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r.push(f(a[i], i));\n      return r;\n    };\n\n    var flatten = function (a) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r = r.concat(a[i]);\n      return r;\n    };\n\n    var flatmap = function (a, f) {\n      return flatten(map(a, f));\n    };\n\n    var filter = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        if (f(a[i]))\n          r.push(a[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var contains = function (a, x) {\n      return !forall(a, function (v) {\n        return v !== x;\n      });\n    };\n\n    var indexof = function (a, x) {\n      for (var i = 0; i < a.length; ++i)\n        if (a[i] === x)\n          return i;\n      return -1;\n    };\n\n    return {\n      equals: equals,\n      forall: forall,\n      map: map,\n      flatten: flatten,\n      flatmap: flatmap,\n      filter: filter,\n      each: each,\n      contains: contains,\n      indexof: indexof\n    };\n  }\n);\nkernel.fp.object = def(\n  [\n  ],\n\n  function () {\n    var map = function (o, f) {\n      var r = {};\n      for (var i in o)\n        if (o.hasOwnProperty(i))\n          r[i] = f(i, o[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var merge = function (d, s) {\n      each(s, function (k, v) {\n        d[k] = v;\n      });\n    };\n\n    var keys = function (o) {\n      var r = [];\n      each(o, function (k) {\n        r.push(k);\n      });\n      return r;\n    };\n\n    return {\n      each: each,\n      keys: keys,\n      map: map,\n      merge: merge\n    };\n  }\n);\nkernel.fp.functions = def(\n  [\n  ],\n\n  function () {\n    var curry = function (f) {\n      var slice = Array.prototype.slice;\n      var args = slice.call(arguments, 1);\n      return function () {\n        var all = args.concat(slice.call(arguments, 0));\n        return f.apply(null, all);\n      };\n    };\n\n    var not = function (z) {\n      return function () {\n        var slice = Array.prototype.slice;\n        return !z.apply(null, slice.call(arguments, 0));\n      };\n    };\n\n    var apply = function (f) {\n      var slice = Array.prototype.slice;\n      return f.apply(null, slice.call(arguments, 0));\n    };\n\n    return {\n      curry: curry,\n      not: not,\n      apply: apply\n    };\n  }\n);kernel.async.map = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var amap = function (data, f, oncomplete) {\n      var total = data.length;\n      var count = 0;\n      var results = [];\n\n      ar.each(data, function (datum, i) {\n        f(datum, function (result) {\n          ++count;\n          results[i] = result;\n          if (count === total)\n            oncomplete(results);\n        });\n      });\n    };\n\n    return {\n      amap: amap\n    };\n  }\n);\n/**\n * This module has a dual responsibility:\n *  1. Ensures that asynchronous function calls, 'f', that share the same\n *     'key' are not executed in parallel.\n *  2. In the case where an attempt to call in parallel is prevented,\n *     the 'action' callbacks are executed when the asynchronous call is\n *     completed.\n *\n * Example:\n *  When we async-map to remotely fetch module definition, it is\n *  important that only a single define is evaluated, but the\n *  notification that the definition has completed is propagated\n *  to all interested parties.\n *\n *    1. we require dependencies 'x' and 'y'\n *\n *    2. both x and y are defined in the same file  (i.e. compiled together), 'a.js'.\n *\n *    3. we resolve x and y, to their load spec using a modulator\n *        x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *        y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *\n *    4. we make the piggyback call for x:\n *        piggybacker.piggyback(x_spec.url, x_spec.load, xdone);\n *\n *       this will register the 'xdone' action, and actually\n *       trigger the load call, with a synthetic callback\n *       responsible for triggering all registered actions.\n *\n *    5. we make the piggyback call for y:\n *        piggybacker.piggyback(y_spec.url, y_spec.load, ydone);\n *\n *       this will register the 'ydone' action, but NOT trigger\n *       the load call.\n *\n *    6. the load call completes, and calls the synthetic callback,\n *       which is responsible for triggering both 'xdone' and 'ydone'.\n *\n *    7. something else happens that means we have to load 'a.js' again,\n *       the piggybacker DOES NOT prevent this call, and will follow\n *       the above process.\n */\nkernel.async.piggybacker = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function () {\n      var queue = {};  // key -> [actions]\n\n      var process = function (key) {\n        var actions = queue[key];\n        delete queue[key];\n        ar.each(actions, fn.apply);\n      };\n\n      var piggyback = function (key, f, action) {\n        if (queue[key] === undefined) {\n          queue[key] = [ action ];\n          f(fn.curry(process, key));\n        } else {\n          queue[key].push(action);\n        }\n      };\n\n      return {\n        piggyback: piggyback\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.globalator = def(\n  [\n  ],\n\n  function () {\n    var create = function () {\n      // FIX pull out\n      var resolve = function (name, scope) {\n        var parts = name.split('.');\n        var r = scope;\n        for (var i = 0; i < parts.length && r !== undefined; ++i)\n          r = r[parts[i]];\n        return r;\n      };\n\n      var global = Function('return this')();\n\n      var can = function (id) {\n        return id.indexOf('global!') === 0;\n      };\n\n      var get = function (id, define, require) {\n        var name = id.substring('global!'.length);\n\n        var load = function (onsuccess, onfailure) {\n          var instance = resolve(name, global);\n          if (instance !== undefined) {\n            define(id, [], function () { return instance; });\n            onsuccess();\n          } else {\n            onfailure('Modulator error: could not resolve global [' + name + ']');\n          }\n        };\n\n        return {\n          url: id, // this just needs to be unique, no download required.\n          load: load,\n          serial: true\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      }\n    };\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.bolt = def(\n  [\n    kernel.fp.functions\n  ],\n\n  function (fn) {\n    var create = function (loader, pather, namespace, path, idTransformer, options) {\n      var can = function (id) {\n        return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;\n      };\n\n      var get = function (id) {\n        var before = options !== undefined && options.absolute === true ? path : pather(path);\n        var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';\n        var url = before + \"/\" + idTransformer(id) + '.js' + after;\n        var load = fn.curry(loader.load, url);\n\n        return {\n          url: url,\n          load: load,\n          serial: false\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);kernel.module.stratifier = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var stratify = function (specs) {\n      var parallels = ar.filter(specs, function (spec) {\n        return !spec.serial;\n      });\n      return parallels.length > 0 ? parallels : specs.slice(0, 1);\n    };\n\n    return {\n      stratify: stratify\n    };\n  }\n);\n/**\n * This module performs dependency analysis of strings that depend on sets of\n * strings.\n *\n * The input is an array of root strings to start analysis from, and an object\n * that contains a mapping of each string to the strings it depends on.\n *\n * Performing an analysis results in either:\n *   1. an empty array, indicating that all dependencies are satisfied,\n *   2. an array of strings that are, at the minimum, still needed in order to\n *      satisfy the given dependency trees, or\n *   3. an array of strings that form a dependency cycle.\n */\nkernel.module.analyser = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (array) {\n    var collect = function (path, name) {\n      var i = array.indexof(path, name);\n      var p = path.slice(i);\n      return p.concat([name]);\n    };\n\n    /**\n     * @param {array} roots Contains a list of root ids\n     * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }\n     */\n    var analyse = function (roots, modules) {\n      var done = {};\n      var path = [];\n      var missing = [];\n      var cycle;\n\n      var children = function (name) {\n        array.each(modules[name], attempt);\n      };\n\n      var examine = function (name) {\n        if (modules[name])\n          children(name);\n        else\n          missing.push(name);\n      };\n\n      var descend = function (name) {\n        path.push(name);\n        examine(name);\n        path.pop();\n      };\n\n      var decycle = function (name) {\n        if (array.contains(path, name))\n          cycle = collect(path, name);\n        else\n          descend(name);\n      };\n\n      var attempt = function (name) {\n        if (!done[name]) {\n          decycle(name);\n          done[name] = true;\n        }\n      };\n\n      array.each(roots, attempt);\n\n      return cycle ? { cycle: cycle } : { load: missing };\n    };\n\n    return {\n      analyse: analyse\n    };\n  }\n);\nkernel.module.fetcher = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions,\n    kernel.async.map,\n    kernel.async.piggybacker,\n    kernel.module.stratifier\n  ],\n\n  function (ar, fn, map, piggybacker, stratifier) {\n    var create = function (regulator, validator, onerror, define, require, demand) {\n      var piggyback = piggybacker.create();\n\n      var validate = function (onsuccess, results) {\n        var failed = ar.filter(results, fn.not(validator));\n        if (failed.length > 0)\n          onerror('Fetcher error: modules were not defined: ' + failed.join(', '));\n        else\n          onsuccess();\n      };\n\n      var mapper = function (spec, onresult) {\n        var action = fn.curry(onresult, spec.id);\n        var load = function (callback) {\n          spec.load(callback, onerror);\n        };\n        piggyback.piggyback(spec.url, load, action);\n      };\n\n      var asyncfetch = function (specs, onsuccess) {\n        var oncomplete = fn.curry(validate, onsuccess);\n        var strata = stratifier.stratify(specs);\n        map.amap(strata, mapper, oncomplete);\n      };\n\n      var fetch = function (ids, onsuccess) {\n        regulator.regulate(ids, define, require, demand, function (specs) {\n          asyncfetch(specs, onsuccess);\n        }, onerror);\n      };\n\n      return {\n        fetch: fetch\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.module.loader = def(\n  [\n    kernel.module.analyser\n  ],\n\n  function (analyser) {\n    var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {\n      var result = analyser.analyse(roots, deps);\n\n      if (result.cycle)\n        onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));\n      else if (result.load.length === 0)\n        onsuccess();\n      else\n        fetcher.fetch(result.load, oncontinue);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nkernel.module.manager = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.module.loader,\n    kernel.module.fetcher\n  ],\n\n  function (ar, obj, loader, fetcher) {\n    var create = function (regulator, onerror) {\n      var blueprints = {};  // id -> { id: string, dependencies: [ string ], definition: function }\n      var modules = {};     // id -> module\n\n      // Adds a module to the system.\n      var define = function (id, dependencies, definition) {\n        if (id === undefined)\n          onerror(\"Define error: module id can not be undefined\");\n        else if (blueprints[id] !== undefined)\n          onerror(\"Define error: module '\" + id + \"' is already defined\");\n        else\n          blueprints[id] = { id: id, dependencies: dependencies, definition: definition };\n      };\n\n      // Loads a set of modules asynchronously.\n      var require = function (ids, callback) {\n        var onsuccess = function () {\n          var instances = ar.map(ids, demand);\n          callback.apply(null, instances);\n        };\n\n        var oncontinue = function () {\n          var deps = obj.map(blueprints, function (k, v) {\n            return v.dependencies;\n          });\n          loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);\n        };\n\n        oncontinue();\n      };\n\n      // Instantiates a module and all of its dependencies.\n      var demand = function (id) {\n        if (modules[id] !== undefined)\n          return modules[id];\n        if (blueprints[id] === undefined)\n          throw \"module '\" + id + \"' is not defined\";\n        var result = instantiate(id);\n        if (result === undefined)\n          throw \"module '\" + id + \"' returned undefined from definition function\";\n        modules[id] = result;\n        return result;\n      };\n\n      var instantiate = function (id) {\n        var blueprint = blueprints[id];\n        var args = ar.map(blueprint.dependencies, demand);  // Instantiate dependencies\n        return blueprint.definition.apply(null, args);  // Instantiate self\n      };\n\n      var validator = function (id) { return blueprints[id] !== undefined; };\n      var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);\n\n      return {\n        define: define,\n        require: require,\n        demand: demand\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.sources = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.modulator.globalator\n  ],\n\n  function (ar, obj, globalator) {\n    var create = function (builtins, configuration) {\n      var data = {\n        'global': { instance: globalator }\n      };\n      obj.each(builtins, function (key, value) {\n        data[key] = { instance: value };\n      });\n      ar.each(configuration.types, function (spec) {\n        data[spec.type] = { id: spec.modulator };\n      });\n      var sourcespecs = configuration.sources.slice(0);\n      var sources = [ globalator.create() ];\n\n      var guard = function (type) {\n        if (data[type] === undefined)\n          throw 'Unknown modulator type [' + type + '].';\n      };\n\n      var isResolved = function (type) {\n        guard(type);\n        return data[type].instance !== undefined;\n      };\n\n      var idOf = function (type) {\n        guard(type);\n        return data[type].id;\n      };\n\n      var instanceOf = function (type) {\n        guard(type);\n        return data[type].instance;\n      };\n\n      var register = function (type, instance) {\n        guard(type);\n        data[type].instance = instance;\n      };\n\n      var find = function (id) {\n        for (var i = 0; i < sources.length; ++i)\n          if (sources[i].can(id))\n            return { found: sources[i] };\n        return { notfound: true };\n      };\n\n      var crank = function () {\n        var left = [];\n        ar.each(sourcespecs, function (spec) {\n          if (isResolved(spec.type)) {\n            var instance = instanceOf(spec.type);\n            var source = instance.create.apply(null, spec.args);\n            sources.push(source);\n          } else\n            left.push(spec);\n        });\n        sourcespecs = left;\n      };\n\n      return {\n        isResolved: isResolved,\n        idOf: idOf,\n        instanceOf: instanceOf,\n        register: register,\n        find: find,\n        crank: crank\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.regulator = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function (sources) {\n      /*\n       * 1. Resolve configuration as much as possible\n       * 2. Check for unresolved modulator types that are required to continue.\n       *   a) Go ahead and resolve, if we have everything we need.\n       *   b) Delay, requiring the modulators, then retry.\n       */\n      var regulate = function (ids, define, require, demand, onsuccess, onerror) {\n        sources.crank();\n        var required = ar.map(ids, determinetype);\n        var unresolved = ar.filter(required, fn.not(sources.isResolved));\n        if (unresolved.length === 0)\n          resolve(ids,  define, require, demand, onsuccess, onerror);\n        else\n          delay(unresolved, ids, define, require, demand, onsuccess, onerror);\n      };\n\n      var resolve = function (ids,  define, require, demand, onsuccess, onerror) {\n        var r = [];\n        for (var i = 0; i < ids.length; ++i) {\n          var id = ids[i];\n          var source = sources.find(id);\n          if (source.notfound) {\n            onerror('Could not find source for module [' +  id + ']');\n            return;\n          }\n          var spec = source.found.get(id, define, require, demand);\n          r[i] = build(id, spec);\n        }\n        onsuccess(r);\n      };\n\n      var build = function (id, spec) {\n        return {\n          id: id,\n          url: spec.url,\n          load: spec.load,\n          serial: spec.serial\n        };\n      };\n\n      var delay = function (types, ids, define, require, demand, onsuccess, onerror) {\n        var modulatorids = ar.map(types, sources.idOf);\n        require(modulatorids, function (/* modulators */) {\n          var modulators = arguments;\n          ar.each(types, function (type, i) {\n             sources.register(type, modulators[i]);\n          });\n          regulate(ids, define, require, demand, onsuccess, onerror);\n        });\n      };\n\n      var determinetype = function (id) {\n        var index = id.indexOf('!');\n        return index === -1 ? 'bolt' : id.substring(0, index);\n      };\n\n      return {\n        regulate: regulate\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.config = def(\n  [\n    kernel.module.manager,\n    kernel.api.regulator,\n    kernel.api.sources\n  ],\n\n  function (manager, regulator, sources) {\n    var configure = function (configuration, builtins, onerror) {\n      var s = sources.create(builtins, configuration);\n      var r = regulator.create(s);\n      var engine = manager.create(r, onerror);\n\n      return {\n        define: engine.define,\n        require: engine.require,\n        demand: engine.demand\n      };\n    };\n\n    return {\n      configure: configure\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar loader = bolt.loader = bolt.loader || {};\nloader.executor = loader.executor || {};\nloader.api = loader.api || {};\nloader.transporter = loader.transporter || {};\nloader.tag = loader.tag || {};\nloader.tag.script = def(\n  [\n  ],\n\n  function () {\n    var guard = function (callback) {\n      return function (evt) {\n        if (evt.srcElement.readyState === \"loaded\" || evt.srcElement.readyState === \"complete\")\n          callback();\n      };\n    };\n\n    var ie = function (el) {\n      return el.attachEvent && !window.opera;\n    };\n\n    var onload = function (el, callback) {\n      if (ie(el))\n        el.attachEvent(\"onreadystatechange\", guard(callback));\n      else\n        el.addEventListener(\"load\", callback, false);\n    };\n\n    var createtag = function (callback) {\n      var el = document.createElement(\"script\");\n      el.type = \"text/javascript\";\n      onload(el, callback);\n      return el;\n    };\n\n    var insert = function (decorator, callback) {\n      var el = createtag(callback);\n      decorator(el);\n      var head = document.getElementsByTagName(\"head\")[0];\n      head.appendChild(el);\n    };\n\n    return {\n      insert: insert\n    };\n  }\n);\nloader.transporter.commonjs = def(\n  [\n  ],\n\n  function () {\n    var read = function (url, success, error) {\n      var fs = require('fs');\n      fs.exists(url, function (exists) {\n        if (exists)\n          fs.readFile(url, 'UTF-8', function (err, data) {\n            if (err)\n              error('Error reading file [' + url + '], error [' + err + ']');\n            else\n              success(data);\n          });\n        else\n          error('File does not exist [' + url + ']');\n      });\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nloader.transporter.xhr = def(\n  [\n  ],\n\n  function () {\n    var requestObject = function () {\n      // Correct way to use XMLHttpRequest in IE:\n      // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx\n      var factories = [\n        function () { return new XMLHttpRequest() },\n        function () { return new ActiveXObject(\"Microsoft.XMLHTTP\") }\n      ];\n\n      return fallback(factories);\n    };\n\n    var fallback = function (items) {\n      for (var i = 0; i < items.length; ++i) {\n        try {\n          return items[i]();\n        } catch (e) {\n        }\n      }\n    };\n\n    var handler = function (req, url, success, error) {\n      return function () {\n        if (req.readyState === 4)\n          done(req, url, success, error);\n      };\n    };\n\n    var done = function (req, url, success, error) {\n      if (req.status === 200 || req.status === 304)\n        success(req.responseText);\n      else\n        error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: \"' + url + '\"');\n    };\n\n    var getUrl = function (req, url, success, error) {\n      req.open('GET', url, true);\n      req.onreadystatechange = handler(req, url, success, error);\n      req.send();\n    };\n\n    var request = function (url, success, error) {\n      var req = requestObject();\n      if (req)\n        getUrl(req, url, success, error);\n      else\n        error('Transport error: browser does not support XMLHttpRequest.');\n    };\n\n    return {\n      request: request\n    };\n  }\n);\nloader.executor.evaller = def(\n  [\n  ],\n\n  function () {\n    var execute = function (data, onsuccess, onfailure) {\n      try {\n        eval(data);\n      } catch(e) {\n        onfailure(e);\n        return;\n      }\n\n      onsuccess();\n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.executor.injector = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var execute = function (data, onsuccess, onfailure) {\n      var inject = function (tag) {\n        tag.text = data;\n      };\n\n      var noop = function () {};\n\n      // Injection does not fire events, but execution happens synchronously,\n      // so we just make an explicit callback\n      script.insert(inject, noop);\n      onsuccess(); \n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.api.commonjsevaller = def(\n  [\n    loader.transporter.commonjs,\n    loader.executor.evaller\n  ],\n\n  function (commonjs, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      commonjs.read(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.scripttag = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var load = function (url, onsuccess, onfailure) {\n      var sourcer = function (tag) {\n        tag.src = url;\n      };\n\n      script.insert(sourcer, onsuccess);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrevaller = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.evaller\n  ],\n\n  function (xhr, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrinjector = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.injector\n  ],\n\n  function (xhr, injector) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        injector.execute(data, onsuccess);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar module = bolt.module = bolt.module || {};\nmodule.bootstrap = module.bootstrap || {};\nmodule.config = module.config || {};\nmodule.error = module.error || {};\nmodule.modulator = module.modulator || {};\nmodule.reader = module.reader || {};\nmodule.runtime = module.runtime || {};\nmodule.util = module.util || {};\nmodule.error.error = def(\n  [\n  ],\n\n  function () {\n    var die = function (msg) {\n      throw msg || new Error('unknown error');\n    };\n\n    return {\n      die: die\n    };\n  }\n);\nmodule.config.mapper = def(\n  [\n  ],\n\n  function () {\n    var flat = function (id) {\n      return id;\n    };\n\n    var hierarchical = function (id) {\n      return id.replace(/\\./g, '/');\n    };\n\n    var constant = function (name) {\n      return function () {\n        return name;\n      };\n    };\n\n    return {\n      flat: flat,\n      hierarchical: hierarchical,\n      constant: constant\n    };\n  }\n);\nmodule.api = def(\n  [\n    module.runtime\n  ],\n\n  function (runtime) {\n    var delegate = function (method) {\n      return function () {\n        return runtime[method].apply(null, arguments);\n      };\n    };\n\n    return {\n      define: delegate('define'),\n      require: delegate('require'),\n      demand: delegate('demand'),\n      main: delegate('main'),\n      load: delegate('load'),\n      loadscript: delegate('loadscript')\n    };\n  }\n);\nmodule.util.path = def(\n  [\n  ],\n\n  function () {\n    var dirname = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(0, end);\n    };\n\n    var basename = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(end + 1);\n    };\n\n    return {\n      basename: basename,\n      dirname: dirname\n    };\n  }\n);\nmodule.util.locator = def(\n  [\n  ],\n\n  function () {\n    var browser = function () {\n      var scripts = document.getElementsByTagName(\"script\");\n      return scripts[scripts.length - 1].src;\n    };\n\n    var runtime = module.runtime.locate;\n\n    var locate = function () {\n      var f = runtime || browser;\n      return f();\n    };\n\n    return {\n      locate: locate\n    };\n  }\n);\nmodule.util.pather = def(\n  [\n    module.util.path\n  ],\n\n  function (path) {\n    var create = function (relativeto) {\n      var base = path.dirname(relativeto);\n      return function (path) {\n        return base + '/' + path;\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.modulator.modulators = def(\n  [\n    ephox.bolt.kernel.fp.functions,\n    ephox.bolt.kernel.modulator.bolt,\n    ephox.bolt.loader.api.commonjsevaller,\n    ephox.bolt.loader.api.scripttag,\n    ephox.bolt.loader.api.xhrevaller,\n    ephox.bolt.loader.api.xhrinjector\n  ],\n\n  function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {\n    var wrap = function (modulator, loader) {\n      var create = fn.curry(modulator.create, loader);\n\n      return {\n        create: create\n      }\n    };\n\n    return {\n      boltcommonjs: wrap(bolt, commonjsevaller),\n      boltscripttag: wrap(bolt, scripttag),\n      boltxhreval: wrap(bolt, xhrevaller),\n      boltxhrinjector: wrap(bolt, xhrinjector)\n    };\n  }\n);\nmodule.config.builtins = def(\n  [\n    ephox.bolt.module.modulator.modulators.boltscripttag,\n    ephox.bolt.module.modulator.modulators.boltcommonjs\n  ],\n\n  function (boltscripttag, boltcommonjs) {\n    return {\n      // TODO: 'amd' is maintained for backwards compatibility, will be removed\n      // at some point.\n      browser: { bolt: boltscripttag, amd: boltscripttag },\n      commonjs: { bolt: boltcommonjs, amd: boltcommonjs }\n    };\n  }\n);\nmodule.config.specs = def(\n  [\n    module.util.pather\n  ],\n\n  function (pather) {\n    var type = function (type, implementation) {\n      return {\n        type: type,\n        implementation: implementation,\n        modulator: implementation + '.Modulator',\n        compiler: implementation + '.Compiler'\n      };\n    };\n\n    var source = function (relativeto) {\n      return function (type /*, args */) {\n        return {\n          type: type,\n          relativeto: relativeto,\n          args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))\n        };\n      }\n    };\n\n    return {\n      type: type,\n      source: source\n    };\n  }\n);\nmodule.reader.bouncing = def(\n  [\n    ephox.bolt.kernel.fp.array,\n    module.error.error,\n    module.config.specs\n  ],\n\n  function (ar, error, specs) {\n    var bounce = function (done, read, acc) {\n      var next = acc.configs.shift();\n      read(next.relativeto, next.config, done, acc);\n    };\n\n    var tick = function (file, cfg, done, read, acc) {\n      var munged = ar.map(cfg.configs || [], function (config) {\n        return { relativeto: file, config: config };\n      });\n      var accumulated = {\n        sources: acc.sources.concat(cfg.sources || []),\n        types: acc.types.concat(cfg.types || []),\n        configs: munged.concat(acc.configs)\n      };\n      if (accumulated.configs.length > 0)\n        bounce(done, read, accumulated);\n      else\n        done({ sources: accumulated.sources, types: accumulated.types });\n    };\n\n    /*\n     * All precedence is depth-first, pre-order. Example:\n     *\n     *        A\n     *       /-\\\n     *      B   C\n     *     /|   |\\\n     *    D E   F G\n     *\n     * Configs are read in A, B, D, E, C, F, G.\n     *\n     * If configs mixed delegation and sources, the\n     * sources would be ordered the same: A, B, D, E, C, F, G.\n     */\n\n    var evaluate = function (file, payload, done, read, acc) {\n      var result = {};\n      /* eval scope */\n      var mapper = module.config.mapper;\n      var type = specs.type;\n      var source = specs.source(file);\n      var configure = function (configuration) {\n        result = configuration;\n      };\n      try {\n        eval(payload);\n      } catch (e) {\n        throw 'Could not load configuration [' + file + '], with: ' + e;\n      }\n      tick(file, result, done, read, acc);\n    };\n\n    return {\n      evaluate: evaluate\n    };\n  }\n);\nmodule.reader.browser = def(\n  [\n    module.error.error,\n    module.reader.bouncing,\n    module.util.path,\n    ephox.bolt.loader.transporter.xhr\n  ],\n\n  function (error, bouncing, path, xhr) {\n    var read = function (relativeto, file, done, acc) {\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = base + '/' + file;\n      xhr.request(absolute, function (payload) {\n        bouncing.evaluate(absolute, payload, done, read, accumulated);\n      }, error.die);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.node = def(\n  [\n    module.reader.bouncing\n  ],\n\n  function (bouncing, path, fs) {\n    var read = function (relativeto, file, done, acc) {\n      var fs = require('fs');\n      var path = require('path');\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = path.resolve(base, file);\n      var payload = fs.readFileSync(absolute, 'UTF-8');\n      bouncing.evaluate(absolute, payload, done, read, accumulated);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.direct = def(\n  [\n  ],\n\n  function () {\n    var create = function (configuration) {\n      return function (done) {\n        done({\n          sources: configuration.sources || [],\n          types: configuration.types || [],\n          configs: configuration.configs || []\n        });\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nmodule.bootstrap.configloader = def(\n  [\n    module.util.locator,\n    module.reader.browser\n  ],\n\n  function (locator, browser) {\n    var create = function (file) {\n      var script = locator.locate();\n      return function (done) {\n        browser.read(script, file, done);\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.bootstrap.deferred = def(\n  [\n    ephox.bolt.kernel.fp.array\n  ],\n\n  function (ar) {\n    var deferred = [];\n\n    var require = function (ids, fn) {\n      var r = function (real) {\n        real(ids, fn);\n      };\n      deferred.push(r);\n    };\n\n    var configured = function (require) {\n      ar.each(deferred, function (action) {\n        action(require);\n      });\n      deferred = [];\n    };\n\n    return {\n      require: require,\n      configured: configured\n    };\n  }\n);\nmodule.bootstrap.main = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.runtime\n  ],\n\n  function (config, deferred, runtime) {\n    var main = function (id, args, configids, callback) {\n      runtime.require(configids || [], function () {\n        callback && callback.apply(null, arguments);\n        runtime.require([ id ], function (module) {\n          module.apply(null, args || []);\n        });\n      });\n    };\n\n    return {\n      main: main\n    };\n  }\n);\nmodule.bootstrap.install = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.bootstrap.main,\n    module.runtime,\n    module.error.error\n  ],\n\n  function (config, deferred, main, runtime, error) {\n    var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };\n\n    var install = function (reader, builtins, load, loadscript) {\n      runtime.define = notready;\n      runtime.demand = notready;\n      runtime.require = deferred.require;\n      runtime.main = main.main;\n      runtime.load = load;\n      runtime.loadscript = loadscript;\n\n      reader(function (configuration) {\n        var bolt = config.configure(configuration, builtins, error.die);\n        runtime.define = bolt.define;\n        runtime.require = bolt.require;\n        runtime.demand = bolt.demand;\n\n        deferred.configured(runtime.require);\n      });\n    };\n\n    return {\n      install: install\n    };\n  }\n);\n\n})(Function('return this')());\n(function (global) {\n  var obj = ephox.bolt.kernel.fp.object;\n  var api = ephox.bolt.module.api;\n  var builtins = ephox.bolt.module.config.builtins.browser;\n  var install = ephox.bolt.module.bootstrap.install;\n  var reader = ephox.bolt.module.bootstrap.configloader.create(\"browser.js\");\n  var transport = ephox.bolt.loader.transporter.xhr.request;\n  var script = ephox.bolt.loader.api.scripttag.load;\n  install.install(reader, builtins, transport, script);\n  obj.merge(global, api);\n})(Function(\"return this;\")());"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/bootstrap-demo.js",
    "content": "(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar kernel = bolt.kernel = bolt.kernel || {};\nkernel.api = kernel.api || {};\nkernel.async = kernel.api || {};\nkernel.fp = kernel.fp || {};\nkernel.modulator = kernel.modulator || {};\nkernel.module = kernel.module || {};\nkernel.fp.array = def(\n  [\n  ],\n\n  function () {\n    var equals = function (a1, a2) {\n      if (a1.length !== a2.length)\n        return false;\n      for (var i = 0; i < a1.length; ++i)\n        if (a1[i] !== a2[i])\n          return false;\n      return true;\n    };\n\n    var forall = function (a, f) {\n      var fn = f || function (x) {\n        return x === true;\n      };\n      for (var i = 0; i < a.length; ++i)\n        if (fn(a[i]) !== true)\n          return false;\n      return true;\n    };\n\n    var map = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r.push(f(a[i], i));\n      return r;\n    };\n\n    var flatten = function (a) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r = r.concat(a[i]);\n      return r;\n    };\n\n    var flatmap = function (a, f) {\n      return flatten(map(a, f));\n    };\n\n    var filter = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        if (f(a[i]))\n          r.push(a[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var contains = function (a, x) {\n      return !forall(a, function (v) {\n        return v !== x;\n      });\n    };\n\n    var indexof = function (a, x) {\n      for (var i = 0; i < a.length; ++i)\n        if (a[i] === x)\n          return i;\n      return -1;\n    };\n\n    return {\n      equals: equals,\n      forall: forall,\n      map: map,\n      flatten: flatten,\n      flatmap: flatmap,\n      filter: filter,\n      each: each,\n      contains: contains,\n      indexof: indexof\n    };\n  }\n);\nkernel.fp.object = def(\n  [\n  ],\n\n  function () {\n    var map = function (o, f) {\n      var r = {};\n      for (var i in o)\n        if (o.hasOwnProperty(i))\n          r[i] = f(i, o[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var merge = function (d, s) {\n      each(s, function (k, v) {\n        d[k] = v;\n      });\n    };\n\n    var keys = function (o) {\n      var r = [];\n      each(o, function (k) {\n        r.push(k);\n      });\n      return r;\n    };\n\n    return {\n      each: each,\n      keys: keys,\n      map: map,\n      merge: merge\n    };\n  }\n);\nkernel.fp.functions = def(\n  [\n  ],\n\n  function () {\n    var curry = function (f) {\n      var slice = Array.prototype.slice;\n      var args = slice.call(arguments, 1);\n      return function () {\n        var all = args.concat(slice.call(arguments, 0));\n        return f.apply(null, all);\n      };\n    };\n\n    var not = function (z) {\n      return function () {\n        var slice = Array.prototype.slice;\n        return !z.apply(null, slice.call(arguments, 0));\n      };\n    };\n\n    var apply = function (f) {\n      var slice = Array.prototype.slice;\n      return f.apply(null, slice.call(arguments, 0));\n    };\n\n    return {\n      curry: curry,\n      not: not,\n      apply: apply\n    };\n  }\n);kernel.async.map = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var amap = function (data, f, oncomplete) {\n      var total = data.length;\n      var count = 0;\n      var results = [];\n\n      ar.each(data, function (datum, i) {\n        f(datum, function (result) {\n          ++count;\n          results[i] = result;\n          if (count === total)\n            oncomplete(results);\n        });\n      });\n    };\n\n    return {\n      amap: amap\n    };\n  }\n);\n/**\n * This module has a dual responsibility:\n *  1. Ensures that asynchronous function calls, 'f', that share the same\n *     'key' are not executed in parallel.\n *  2. In the case where an attempt to call in parallel is prevented,\n *     the 'action' callbacks are executed when the asynchronous call is\n *     completed.\n *\n * Example:\n *  When we async-map to remotely fetch module definition, it is\n *  important that only a single define is evaluated, but the\n *  notification that the definition has completed is propagated\n *  to all interested parties.\n *\n *    1. we require dependencies 'x' and 'y'\n *\n *    2. both x and y are defined in the same file  (i.e. compiled together), 'a.js'.\n *\n *    3. we resolve x and y, to their load spec using a modulator\n *        x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *        y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *\n *    4. we make the piggyback call for x:\n *        piggybacker.piggyback(x_spec.url, x_spec.load, xdone);\n *\n *       this will register the 'xdone' action, and actually\n *       trigger the load call, with a synthetic callback\n *       responsible for triggering all registered actions.\n *\n *    5. we make the piggyback call for y:\n *        piggybacker.piggyback(y_spec.url, y_spec.load, ydone);\n *\n *       this will register the 'ydone' action, but NOT trigger\n *       the load call.\n *\n *    6. the load call completes, and calls the synthetic callback,\n *       which is responsible for triggering both 'xdone' and 'ydone'.\n *\n *    7. something else happens that means we have to load 'a.js' again,\n *       the piggybacker DOES NOT prevent this call, and will follow\n *       the above process.\n */\nkernel.async.piggybacker = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function () {\n      var queue = {};  // key -> [actions]\n\n      var process = function (key) {\n        var actions = queue[key];\n        delete queue[key];\n        ar.each(actions, fn.apply);\n      };\n\n      var piggyback = function (key, f, action) {\n        if (queue[key] === undefined) {\n          queue[key] = [ action ];\n          f(fn.curry(process, key));\n        } else {\n          queue[key].push(action);\n        }\n      };\n\n      return {\n        piggyback: piggyback\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.globalator = def(\n  [\n  ],\n\n  function () {\n    var create = function () {\n      // FIX pull out\n      var resolve = function (name, scope) {\n        var parts = name.split('.');\n        var r = scope;\n        for (var i = 0; i < parts.length && r !== undefined; ++i)\n          r = r[parts[i]];\n        return r;\n      };\n\n      var global = Function('return this')();\n\n      var can = function (id) {\n        return id.indexOf('global!') === 0;\n      };\n\n      var get = function (id, define, require) {\n        var name = id.substring('global!'.length);\n\n        var load = function (onsuccess, onfailure) {\n          var instance = resolve(name, global);\n          if (instance !== undefined) {\n            define(id, [], function () { return instance; });\n            onsuccess();\n          } else {\n            onfailure('Modulator error: could not resolve global [' + name + ']');\n          }\n        };\n\n        return {\n          url: id, // this just needs to be unique, no download required.\n          load: load,\n          serial: true\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      }\n    };\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.bolt = def(\n  [\n    kernel.fp.functions\n  ],\n\n  function (fn) {\n    var create = function (loader, pather, namespace, path, idTransformer, options) {\n      var can = function (id) {\n        return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;\n      };\n\n      var get = function (id) {\n        var before = options !== undefined && options.absolute === true ? path : pather(path);\n        var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';\n        var url = before + \"/\" + idTransformer(id) + '.js' + after;\n        var load = fn.curry(loader.load, url);\n\n        return {\n          url: url,\n          load: load,\n          serial: false\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);kernel.module.stratifier = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var stratify = function (specs) {\n      var parallels = ar.filter(specs, function (spec) {\n        return !spec.serial;\n      });\n      return parallels.length > 0 ? parallels : specs.slice(0, 1);\n    };\n\n    return {\n      stratify: stratify\n    };\n  }\n);\n/**\n * This module performs dependency analysis of strings that depend on sets of\n * strings.\n *\n * The input is an array of root strings to start analysis from, and an object\n * that contains a mapping of each string to the strings it depends on.\n *\n * Performing an analysis results in either:\n *   1. an empty array, indicating that all dependencies are satisfied,\n *   2. an array of strings that are, at the minimum, still needed in order to\n *      satisfy the given dependency trees, or\n *   3. an array of strings that form a dependency cycle.\n */\nkernel.module.analyser = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (array) {\n    var collect = function (path, name) {\n      var i = array.indexof(path, name);\n      var p = path.slice(i);\n      return p.concat([name]);\n    };\n\n    /**\n     * @param {array} roots Contains a list of root ids\n     * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }\n     */\n    var analyse = function (roots, modules) {\n      var done = {};\n      var path = [];\n      var missing = [];\n      var cycle;\n\n      var children = function (name) {\n        array.each(modules[name], attempt);\n      };\n\n      var examine = function (name) {\n        if (modules[name])\n          children(name);\n        else\n          missing.push(name);\n      };\n\n      var descend = function (name) {\n        path.push(name);\n        examine(name);\n        path.pop();\n      };\n\n      var decycle = function (name) {\n        if (array.contains(path, name))\n          cycle = collect(path, name);\n        else\n          descend(name);\n      };\n\n      var attempt = function (name) {\n        if (!done[name]) {\n          decycle(name);\n          done[name] = true;\n        }\n      };\n\n      array.each(roots, attempt);\n\n      return cycle ? { cycle: cycle } : { load: missing };\n    };\n\n    return {\n      analyse: analyse\n    };\n  }\n);\nkernel.module.fetcher = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions,\n    kernel.async.map,\n    kernel.async.piggybacker,\n    kernel.module.stratifier\n  ],\n\n  function (ar, fn, map, piggybacker, stratifier) {\n    var create = function (regulator, validator, onerror, define, require, demand) {\n      var piggyback = piggybacker.create();\n\n      var validate = function (onsuccess, results) {\n        var failed = ar.filter(results, fn.not(validator));\n        if (failed.length > 0)\n          onerror('Fetcher error: modules were not defined: ' + failed.join(', '));\n        else\n          onsuccess();\n      };\n\n      var mapper = function (spec, onresult) {\n        var action = fn.curry(onresult, spec.id);\n        var load = function (callback) {\n          spec.load(callback, onerror);\n        };\n        piggyback.piggyback(spec.url, load, action);\n      };\n\n      var asyncfetch = function (specs, onsuccess) {\n        var oncomplete = fn.curry(validate, onsuccess);\n        var strata = stratifier.stratify(specs);\n        map.amap(strata, mapper, oncomplete);\n      };\n\n      var fetch = function (ids, onsuccess) {\n        regulator.regulate(ids, define, require, demand, function (specs) {\n          asyncfetch(specs, onsuccess);\n        }, onerror);\n      };\n\n      return {\n        fetch: fetch\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.module.loader = def(\n  [\n    kernel.module.analyser\n  ],\n\n  function (analyser) {\n    var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {\n      var result = analyser.analyse(roots, deps);\n\n      if (result.cycle)\n        onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));\n      else if (result.load.length === 0)\n        onsuccess();\n      else\n        fetcher.fetch(result.load, oncontinue);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nkernel.module.manager = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.module.loader,\n    kernel.module.fetcher\n  ],\n\n  function (ar, obj, loader, fetcher) {\n    var create = function (regulator, onerror) {\n      var blueprints = {};  // id -> { id: string, dependencies: [ string ], definition: function }\n      var modules = {};     // id -> module\n\n      // Adds a module to the system.\n      var define = function (id, dependencies, definition) {\n        if (id === undefined)\n          onerror(\"Define error: module id can not be undefined\");\n        else if (blueprints[id] !== undefined)\n          onerror(\"Define error: module '\" + id + \"' is already defined\");\n        else\n          blueprints[id] = { id: id, dependencies: dependencies, definition: definition };\n      };\n\n      // Loads a set of modules asynchronously.\n      var require = function (ids, callback) {\n        var onsuccess = function () {\n          var instances = ar.map(ids, demand);\n          callback.apply(null, instances);\n        };\n\n        var oncontinue = function () {\n          var deps = obj.map(blueprints, function (k, v) {\n            return v.dependencies;\n          });\n          loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);\n        };\n\n        oncontinue();\n      };\n\n      // Instantiates a module and all of its dependencies.\n      var demand = function (id) {\n        if (modules[id] !== undefined)\n          return modules[id];\n        if (blueprints[id] === undefined)\n          throw \"module '\" + id + \"' is not defined\";\n        var result = instantiate(id);\n        if (result === undefined)\n          throw \"module '\" + id + \"' returned undefined from definition function\";\n        modules[id] = result;\n        return result;\n      };\n\n      var instantiate = function (id) {\n        var blueprint = blueprints[id];\n        var args = ar.map(blueprint.dependencies, demand);  // Instantiate dependencies\n        return blueprint.definition.apply(null, args);  // Instantiate self\n      };\n\n      var validator = function (id) { return blueprints[id] !== undefined; };\n      var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);\n\n      return {\n        define: define,\n        require: require,\n        demand: demand\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.sources = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.modulator.globalator\n  ],\n\n  function (ar, obj, globalator) {\n    var create = function (builtins, configuration) {\n      var data = {\n        'global': { instance: globalator }\n      };\n      obj.each(builtins, function (key, value) {\n        data[key] = { instance: value };\n      });\n      ar.each(configuration.types, function (spec) {\n        data[spec.type] = { id: spec.modulator };\n      });\n      var sourcespecs = configuration.sources.slice(0);\n      var sources = [ globalator.create() ];\n\n      var guard = function (type) {\n        if (data[type] === undefined)\n          throw 'Unknown modulator type [' + type + '].';\n      };\n\n      var isResolved = function (type) {\n        guard(type);\n        return data[type].instance !== undefined;\n      };\n\n      var idOf = function (type) {\n        guard(type);\n        return data[type].id;\n      };\n\n      var instanceOf = function (type) {\n        guard(type);\n        return data[type].instance;\n      };\n\n      var register = function (type, instance) {\n        guard(type);\n        data[type].instance = instance;\n      };\n\n      var find = function (id) {\n        for (var i = 0; i < sources.length; ++i)\n          if (sources[i].can(id))\n            return { found: sources[i] };\n        return { notfound: true };\n      };\n\n      var crank = function () {\n        var left = [];\n        ar.each(sourcespecs, function (spec) {\n          if (isResolved(spec.type)) {\n            var instance = instanceOf(spec.type);\n            var source = instance.create.apply(null, spec.args);\n            sources.push(source);\n          } else\n            left.push(spec);\n        });\n        sourcespecs = left;\n      };\n\n      return {\n        isResolved: isResolved,\n        idOf: idOf,\n        instanceOf: instanceOf,\n        register: register,\n        find: find,\n        crank: crank\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.regulator = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function (sources) {\n      /*\n       * 1. Resolve configuration as much as possible\n       * 2. Check for unresolved modulator types that are required to continue.\n       *   a) Go ahead and resolve, if we have everything we need.\n       *   b) Delay, requiring the modulators, then retry.\n       */\n      var regulate = function (ids, define, require, demand, onsuccess, onerror) {\n        sources.crank();\n        var required = ar.map(ids, determinetype);\n        var unresolved = ar.filter(required, fn.not(sources.isResolved));\n        if (unresolved.length === 0)\n          resolve(ids,  define, require, demand, onsuccess, onerror);\n        else\n          delay(unresolved, ids, define, require, demand, onsuccess, onerror);\n      };\n\n      var resolve = function (ids,  define, require, demand, onsuccess, onerror) {\n        var r = [];\n        for (var i = 0; i < ids.length; ++i) {\n          var id = ids[i];\n          var source = sources.find(id);\n          if (source.notfound) {\n            onerror('Could not find source for module [' +  id + ']');\n            return;\n          }\n          var spec = source.found.get(id, define, require, demand);\n          r[i] = build(id, spec);\n        }\n        onsuccess(r);\n      };\n\n      var build = function (id, spec) {\n        return {\n          id: id,\n          url: spec.url,\n          load: spec.load,\n          serial: spec.serial\n        };\n      };\n\n      var delay = function (types, ids, define, require, demand, onsuccess, onerror) {\n        var modulatorids = ar.map(types, sources.idOf);\n        require(modulatorids, function (/* modulators */) {\n          var modulators = arguments;\n          ar.each(types, function (type, i) {\n             sources.register(type, modulators[i]);\n          });\n          regulate(ids, define, require, demand, onsuccess, onerror);\n        });\n      };\n\n      var determinetype = function (id) {\n        var index = id.indexOf('!');\n        return index === -1 ? 'bolt' : id.substring(0, index);\n      };\n\n      return {\n        regulate: regulate\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.config = def(\n  [\n    kernel.module.manager,\n    kernel.api.regulator,\n    kernel.api.sources\n  ],\n\n  function (manager, regulator, sources) {\n    var configure = function (configuration, builtins, onerror) {\n      var s = sources.create(builtins, configuration);\n      var r = regulator.create(s);\n      var engine = manager.create(r, onerror);\n\n      return {\n        define: engine.define,\n        require: engine.require,\n        demand: engine.demand\n      };\n    };\n\n    return {\n      configure: configure\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar loader = bolt.loader = bolt.loader || {};\nloader.executor = loader.executor || {};\nloader.api = loader.api || {};\nloader.transporter = loader.transporter || {};\nloader.tag = loader.tag || {};\nloader.tag.script = def(\n  [\n  ],\n\n  function () {\n    var guard = function (callback) {\n      return function (evt) {\n        if (evt.srcElement.readyState === \"loaded\" || evt.srcElement.readyState === \"complete\")\n          callback();\n      };\n    };\n\n    var ie = function (el) {\n      return el.attachEvent && !window.opera;\n    };\n\n    var onload = function (el, callback) {\n      if (ie(el))\n        el.attachEvent(\"onreadystatechange\", guard(callback));\n      else\n        el.addEventListener(\"load\", callback, false);\n    };\n\n    var createtag = function (callback) {\n      var el = document.createElement(\"script\");\n      el.type = \"text/javascript\";\n      onload(el, callback);\n      return el;\n    };\n\n    var insert = function (decorator, callback) {\n      var el = createtag(callback);\n      decorator(el);\n      var head = document.getElementsByTagName(\"head\")[0];\n      head.appendChild(el);\n    };\n\n    return {\n      insert: insert\n    };\n  }\n);\nloader.transporter.commonjs = def(\n  [\n  ],\n\n  function () {\n    var read = function (url, success, error) {\n      var fs = require('fs');\n      fs.exists(url, function (exists) {\n        if (exists)\n          fs.readFile(url, 'UTF-8', function (err, data) {\n            if (err)\n              error('Error reading file [' + url + '], error [' + err + ']');\n            else\n              success(data);\n          });\n        else\n          error('File does not exist [' + url + ']');\n      });\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nloader.transporter.xhr = def(\n  [\n  ],\n\n  function () {\n    var requestObject = function () {\n      // Correct way to use XMLHttpRequest in IE:\n      // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx\n      var factories = [\n        function () { return new XMLHttpRequest() },\n        function () { return new ActiveXObject(\"Microsoft.XMLHTTP\") }\n      ];\n\n      return fallback(factories);\n    };\n\n    var fallback = function (items) {\n      for (var i = 0; i < items.length; ++i) {\n        try {\n          return items[i]();\n        } catch (e) {\n        }\n      }\n    };\n\n    var handler = function (req, url, success, error) {\n      return function () {\n        if (req.readyState === 4)\n          done(req, url, success, error);\n      };\n    };\n\n    var done = function (req, url, success, error) {\n      if (req.status === 200 || req.status === 304)\n        success(req.responseText);\n      else\n        error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: \"' + url + '\"');\n    };\n\n    var getUrl = function (req, url, success, error) {\n      req.open('GET', url, true);\n      req.onreadystatechange = handler(req, url, success, error);\n      req.send();\n    };\n\n    var request = function (url, success, error) {\n      var req = requestObject();\n      if (req)\n        getUrl(req, url, success, error);\n      else\n        error('Transport error: browser does not support XMLHttpRequest.');\n    };\n\n    return {\n      request: request\n    };\n  }\n);\nloader.executor.evaller = def(\n  [\n  ],\n\n  function () {\n    var execute = function (data, onsuccess, onfailure) {\n      try {\n        eval(data);\n      } catch(e) {\n        onfailure(e);\n        return;\n      }\n\n      onsuccess();\n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.executor.injector = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var execute = function (data, onsuccess, onfailure) {\n      var inject = function (tag) {\n        tag.text = data;\n      };\n\n      var noop = function () {};\n\n      // Injection does not fire events, but execution happens synchronously,\n      // so we just make an explicit callback\n      script.insert(inject, noop);\n      onsuccess(); \n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.api.commonjsevaller = def(\n  [\n    loader.transporter.commonjs,\n    loader.executor.evaller\n  ],\n\n  function (commonjs, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      commonjs.read(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.scripttag = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var load = function (url, onsuccess, onfailure) {\n      var sourcer = function (tag) {\n        tag.src = url;\n      };\n\n      script.insert(sourcer, onsuccess);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrevaller = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.evaller\n  ],\n\n  function (xhr, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrinjector = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.injector\n  ],\n\n  function (xhr, injector) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        injector.execute(data, onsuccess);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar module = bolt.module = bolt.module || {};\nmodule.bootstrap = module.bootstrap || {};\nmodule.config = module.config || {};\nmodule.error = module.error || {};\nmodule.modulator = module.modulator || {};\nmodule.reader = module.reader || {};\nmodule.runtime = module.runtime || {};\nmodule.util = module.util || {};\nmodule.error.error = def(\n  [\n  ],\n\n  function () {\n    var die = function (msg) {\n      throw msg || new Error('unknown error');\n    };\n\n    return {\n      die: die\n    };\n  }\n);\nmodule.config.mapper = def(\n  [\n  ],\n\n  function () {\n    var flat = function (id) {\n      return id;\n    };\n\n    var hierarchical = function (id) {\n      return id.replace(/\\./g, '/');\n    };\n\n    var constant = function (name) {\n      return function () {\n        return name;\n      };\n    };\n\n    return {\n      flat: flat,\n      hierarchical: hierarchical,\n      constant: constant\n    };\n  }\n);\nmodule.api = def(\n  [\n    module.runtime\n  ],\n\n  function (runtime) {\n    var delegate = function (method) {\n      return function () {\n        return runtime[method].apply(null, arguments);\n      };\n    };\n\n    return {\n      define: delegate('define'),\n      require: delegate('require'),\n      demand: delegate('demand'),\n      main: delegate('main'),\n      load: delegate('load'),\n      loadscript: delegate('loadscript')\n    };\n  }\n);\nmodule.util.path = def(\n  [\n  ],\n\n  function () {\n    var dirname = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(0, end);\n    };\n\n    var basename = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(end + 1);\n    };\n\n    return {\n      basename: basename,\n      dirname: dirname\n    };\n  }\n);\nmodule.util.locator = def(\n  [\n  ],\n\n  function () {\n    var browser = function () {\n      var scripts = document.getElementsByTagName(\"script\");\n      return scripts[scripts.length - 1].src;\n    };\n\n    var runtime = module.runtime.locate;\n\n    var locate = function () {\n      var f = runtime || browser;\n      return f();\n    };\n\n    return {\n      locate: locate\n    };\n  }\n);\nmodule.util.pather = def(\n  [\n    module.util.path\n  ],\n\n  function (path) {\n    var create = function (relativeto) {\n      var base = path.dirname(relativeto);\n      return function (path) {\n        return base + '/' + path;\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.modulator.modulators = def(\n  [\n    ephox.bolt.kernel.fp.functions,\n    ephox.bolt.kernel.modulator.bolt,\n    ephox.bolt.loader.api.commonjsevaller,\n    ephox.bolt.loader.api.scripttag,\n    ephox.bolt.loader.api.xhrevaller,\n    ephox.bolt.loader.api.xhrinjector\n  ],\n\n  function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {\n    var wrap = function (modulator, loader) {\n      var create = fn.curry(modulator.create, loader);\n\n      return {\n        create: create\n      }\n    };\n\n    return {\n      boltcommonjs: wrap(bolt, commonjsevaller),\n      boltscripttag: wrap(bolt, scripttag),\n      boltxhreval: wrap(bolt, xhrevaller),\n      boltxhrinjector: wrap(bolt, xhrinjector)\n    };\n  }\n);\nmodule.config.builtins = def(\n  [\n    ephox.bolt.module.modulator.modulators.boltscripttag,\n    ephox.bolt.module.modulator.modulators.boltcommonjs\n  ],\n\n  function (boltscripttag, boltcommonjs) {\n    return {\n      // TODO: 'amd' is maintained for backwards compatibility, will be removed\n      // at some point.\n      browser: { bolt: boltscripttag, amd: boltscripttag },\n      commonjs: { bolt: boltcommonjs, amd: boltcommonjs }\n    };\n  }\n);\nmodule.config.specs = def(\n  [\n    module.util.pather\n  ],\n\n  function (pather) {\n    var type = function (type, implementation) {\n      return {\n        type: type,\n        implementation: implementation,\n        modulator: implementation + '.Modulator',\n        compiler: implementation + '.Compiler'\n      };\n    };\n\n    var source = function (relativeto) {\n      return function (type /*, args */) {\n        return {\n          type: type,\n          relativeto: relativeto,\n          args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))\n        };\n      }\n    };\n\n    return {\n      type: type,\n      source: source\n    };\n  }\n);\nmodule.reader.bouncing = def(\n  [\n    ephox.bolt.kernel.fp.array,\n    module.error.error,\n    module.config.specs\n  ],\n\n  function (ar, error, specs) {\n    var bounce = function (done, read, acc) {\n      var next = acc.configs.shift();\n      read(next.relativeto, next.config, done, acc);\n    };\n\n    var tick = function (file, cfg, done, read, acc) {\n      var munged = ar.map(cfg.configs || [], function (config) {\n        return { relativeto: file, config: config };\n      });\n      var accumulated = {\n        sources: acc.sources.concat(cfg.sources || []),\n        types: acc.types.concat(cfg.types || []),\n        configs: munged.concat(acc.configs)\n      };\n      if (accumulated.configs.length > 0)\n        bounce(done, read, accumulated);\n      else\n        done({ sources: accumulated.sources, types: accumulated.types });\n    };\n\n    /*\n     * All precedence is depth-first, pre-order. Example:\n     *\n     *        A\n     *       /-\\\n     *      B   C\n     *     /|   |\\\n     *    D E   F G\n     *\n     * Configs are read in A, B, D, E, C, F, G.\n     *\n     * If configs mixed delegation and sources, the\n     * sources would be ordered the same: A, B, D, E, C, F, G.\n     */\n\n    var evaluate = function (file, payload, done, read, acc) {\n      var result = {};\n      /* eval scope */\n      var mapper = module.config.mapper;\n      var type = specs.type;\n      var source = specs.source(file);\n      var configure = function (configuration) {\n        result = configuration;\n      };\n      try {\n        eval(payload);\n      } catch (e) {\n        throw 'Could not load configuration [' + file + '], with: ' + e;\n      }\n      tick(file, result, done, read, acc);\n    };\n\n    return {\n      evaluate: evaluate\n    };\n  }\n);\nmodule.reader.browser = def(\n  [\n    module.error.error,\n    module.reader.bouncing,\n    module.util.path,\n    ephox.bolt.loader.transporter.xhr\n  ],\n\n  function (error, bouncing, path, xhr) {\n    var read = function (relativeto, file, done, acc) {\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = base + '/' + file;\n      xhr.request(absolute, function (payload) {\n        bouncing.evaluate(absolute, payload, done, read, accumulated);\n      }, error.die);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.node = def(\n  [\n    module.reader.bouncing\n  ],\n\n  function (bouncing, path, fs) {\n    var read = function (relativeto, file, done, acc) {\n      var fs = require('fs');\n      var path = require('path');\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = path.resolve(base, file);\n      var payload = fs.readFileSync(absolute, 'UTF-8');\n      bouncing.evaluate(absolute, payload, done, read, accumulated);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.direct = def(\n  [\n  ],\n\n  function () {\n    var create = function (configuration) {\n      return function (done) {\n        done({\n          sources: configuration.sources || [],\n          types: configuration.types || [],\n          configs: configuration.configs || []\n        });\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nmodule.bootstrap.configloader = def(\n  [\n    module.util.locator,\n    module.reader.browser\n  ],\n\n  function (locator, browser) {\n    var create = function (file) {\n      var script = locator.locate();\n      return function (done) {\n        browser.read(script, file, done);\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.bootstrap.deferred = def(\n  [\n    ephox.bolt.kernel.fp.array\n  ],\n\n  function (ar) {\n    var deferred = [];\n\n    var require = function (ids, fn) {\n      var r = function (real) {\n        real(ids, fn);\n      };\n      deferred.push(r);\n    };\n\n    var configured = function (require) {\n      ar.each(deferred, function (action) {\n        action(require);\n      });\n      deferred = [];\n    };\n\n    return {\n      require: require,\n      configured: configured\n    };\n  }\n);\nmodule.bootstrap.main = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.runtime\n  ],\n\n  function (config, deferred, runtime) {\n    var main = function (id, args, configids, callback) {\n      runtime.require(configids || [], function () {\n        callback && callback.apply(null, arguments);\n        runtime.require([ id ], function (module) {\n          module.apply(null, args || []);\n        });\n      });\n    };\n\n    return {\n      main: main\n    };\n  }\n);\nmodule.bootstrap.install = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.bootstrap.main,\n    module.runtime,\n    module.error.error\n  ],\n\n  function (config, deferred, main, runtime, error) {\n    var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };\n\n    var install = function (reader, builtins, load, loadscript) {\n      runtime.define = notready;\n      runtime.demand = notready;\n      runtime.require = deferred.require;\n      runtime.main = main.main;\n      runtime.load = load;\n      runtime.loadscript = loadscript;\n\n      reader(function (configuration) {\n        var bolt = config.configure(configuration, builtins, error.die);\n        runtime.define = bolt.define;\n        runtime.require = bolt.require;\n        runtime.demand = bolt.demand;\n\n        deferred.configured(runtime.require);\n      });\n    };\n\n    return {\n      install: install\n    };\n  }\n);\n\n})(Function('return this')());\n(function (global) {\n  var obj = ephox.bolt.kernel.fp.object;\n  var api = ephox.bolt.module.api;\n  var builtins = ephox.bolt.module.config.builtins.browser;\n  var install = ephox.bolt.module.bootstrap.install;\n  var reader = ephox.bolt.module.bootstrap.configloader.create(\"demo.js\");\n  var transport = ephox.bolt.loader.transporter.xhr.request;\n  var script = ephox.bolt.loader.api.scripttag.load;\n  install.install(reader, builtins, transport, script);\n  obj.merge(global, api);\n})(Function(\"return this;\")());"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/bootstrap-prod.js",
    "content": "(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar kernel = bolt.kernel = bolt.kernel || {};\nkernel.api = kernel.api || {};\nkernel.async = kernel.api || {};\nkernel.fp = kernel.fp || {};\nkernel.modulator = kernel.modulator || {};\nkernel.module = kernel.module || {};\nkernel.fp.array = def(\n  [\n  ],\n\n  function () {\n    var equals = function (a1, a2) {\n      if (a1.length !== a2.length)\n        return false;\n      for (var i = 0; i < a1.length; ++i)\n        if (a1[i] !== a2[i])\n          return false;\n      return true;\n    };\n\n    var forall = function (a, f) {\n      var fn = f || function (x) {\n        return x === true;\n      };\n      for (var i = 0; i < a.length; ++i)\n        if (fn(a[i]) !== true)\n          return false;\n      return true;\n    };\n\n    var map = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r.push(f(a[i], i));\n      return r;\n    };\n\n    var flatten = function (a) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r = r.concat(a[i]);\n      return r;\n    };\n\n    var flatmap = function (a, f) {\n      return flatten(map(a, f));\n    };\n\n    var filter = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        if (f(a[i]))\n          r.push(a[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var contains = function (a, x) {\n      return !forall(a, function (v) {\n        return v !== x;\n      });\n    };\n\n    var indexof = function (a, x) {\n      for (var i = 0; i < a.length; ++i)\n        if (a[i] === x)\n          return i;\n      return -1;\n    };\n\n    return {\n      equals: equals,\n      forall: forall,\n      map: map,\n      flatten: flatten,\n      flatmap: flatmap,\n      filter: filter,\n      each: each,\n      contains: contains,\n      indexof: indexof\n    };\n  }\n);\nkernel.fp.object = def(\n  [\n  ],\n\n  function () {\n    var map = function (o, f) {\n      var r = {};\n      for (var i in o)\n        if (o.hasOwnProperty(i))\n          r[i] = f(i, o[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var merge = function (d, s) {\n      each(s, function (k, v) {\n        d[k] = v;\n      });\n    };\n\n    var keys = function (o) {\n      var r = [];\n      each(o, function (k) {\n        r.push(k);\n      });\n      return r;\n    };\n\n    return {\n      each: each,\n      keys: keys,\n      map: map,\n      merge: merge\n    };\n  }\n);\nkernel.fp.functions = def(\n  [\n  ],\n\n  function () {\n    var curry = function (f) {\n      var slice = Array.prototype.slice;\n      var args = slice.call(arguments, 1);\n      return function () {\n        var all = args.concat(slice.call(arguments, 0));\n        return f.apply(null, all);\n      };\n    };\n\n    var not = function (z) {\n      return function () {\n        var slice = Array.prototype.slice;\n        return !z.apply(null, slice.call(arguments, 0));\n      };\n    };\n\n    var apply = function (f) {\n      var slice = Array.prototype.slice;\n      return f.apply(null, slice.call(arguments, 0));\n    };\n\n    return {\n      curry: curry,\n      not: not,\n      apply: apply\n    };\n  }\n);kernel.async.map = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var amap = function (data, f, oncomplete) {\n      var total = data.length;\n      var count = 0;\n      var results = [];\n\n      ar.each(data, function (datum, i) {\n        f(datum, function (result) {\n          ++count;\n          results[i] = result;\n          if (count === total)\n            oncomplete(results);\n        });\n      });\n    };\n\n    return {\n      amap: amap\n    };\n  }\n);\n/**\n * This module has a dual responsibility:\n *  1. Ensures that asynchronous function calls, 'f', that share the same\n *     'key' are not executed in parallel.\n *  2. In the case where an attempt to call in parallel is prevented,\n *     the 'action' callbacks are executed when the asynchronous call is\n *     completed.\n *\n * Example:\n *  When we async-map to remotely fetch module definition, it is\n *  important that only a single define is evaluated, but the\n *  notification that the definition has completed is propagated\n *  to all interested parties.\n *\n *    1. we require dependencies 'x' and 'y'\n *\n *    2. both x and y are defined in the same file  (i.e. compiled together), 'a.js'.\n *\n *    3. we resolve x and y, to their load spec using a modulator\n *        x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *        y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *\n *    4. we make the piggyback call for x:\n *        piggybacker.piggyback(x_spec.url, x_spec.load, xdone);\n *\n *       this will register the 'xdone' action, and actually\n *       trigger the load call, with a synthetic callback\n *       responsible for triggering all registered actions.\n *\n *    5. we make the piggyback call for y:\n *        piggybacker.piggyback(y_spec.url, y_spec.load, ydone);\n *\n *       this will register the 'ydone' action, but NOT trigger\n *       the load call.\n *\n *    6. the load call completes, and calls the synthetic callback,\n *       which is responsible for triggering both 'xdone' and 'ydone'.\n *\n *    7. something else happens that means we have to load 'a.js' again,\n *       the piggybacker DOES NOT prevent this call, and will follow\n *       the above process.\n */\nkernel.async.piggybacker = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function () {\n      var queue = {};  // key -> [actions]\n\n      var process = function (key) {\n        var actions = queue[key];\n        delete queue[key];\n        ar.each(actions, fn.apply);\n      };\n\n      var piggyback = function (key, f, action) {\n        if (queue[key] === undefined) {\n          queue[key] = [ action ];\n          f(fn.curry(process, key));\n        } else {\n          queue[key].push(action);\n        }\n      };\n\n      return {\n        piggyback: piggyback\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.globalator = def(\n  [\n  ],\n\n  function () {\n    var create = function () {\n      // FIX pull out\n      var resolve = function (name, scope) {\n        var parts = name.split('.');\n        var r = scope;\n        for (var i = 0; i < parts.length && r !== undefined; ++i)\n          r = r[parts[i]];\n        return r;\n      };\n\n      var global = Function('return this')();\n\n      var can = function (id) {\n        return id.indexOf('global!') === 0;\n      };\n\n      var get = function (id, define, require) {\n        var name = id.substring('global!'.length);\n\n        var load = function (onsuccess, onfailure) {\n          var instance = resolve(name, global);\n          if (instance !== undefined) {\n            define(id, [], function () { return instance; });\n            onsuccess();\n          } else {\n            onfailure('Modulator error: could not resolve global [' + name + ']');\n          }\n        };\n\n        return {\n          url: id, // this just needs to be unique, no download required.\n          load: load,\n          serial: true\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      }\n    };\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.bolt = def(\n  [\n    kernel.fp.functions\n  ],\n\n  function (fn) {\n    var create = function (loader, pather, namespace, path, idTransformer, options) {\n      var can = function (id) {\n        return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;\n      };\n\n      var get = function (id) {\n        var before = options !== undefined && options.absolute === true ? path : pather(path);\n        var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';\n        var url = before + \"/\" + idTransformer(id) + '.js' + after;\n        var load = fn.curry(loader.load, url);\n\n        return {\n          url: url,\n          load: load,\n          serial: false\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);kernel.module.stratifier = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var stratify = function (specs) {\n      var parallels = ar.filter(specs, function (spec) {\n        return !spec.serial;\n      });\n      return parallels.length > 0 ? parallels : specs.slice(0, 1);\n    };\n\n    return {\n      stratify: stratify\n    };\n  }\n);\n/**\n * This module performs dependency analysis of strings that depend on sets of\n * strings.\n *\n * The input is an array of root strings to start analysis from, and an object\n * that contains a mapping of each string to the strings it depends on.\n *\n * Performing an analysis results in either:\n *   1. an empty array, indicating that all dependencies are satisfied,\n *   2. an array of strings that are, at the minimum, still needed in order to\n *      satisfy the given dependency trees, or\n *   3. an array of strings that form a dependency cycle.\n */\nkernel.module.analyser = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (array) {\n    var collect = function (path, name) {\n      var i = array.indexof(path, name);\n      var p = path.slice(i);\n      return p.concat([name]);\n    };\n\n    /**\n     * @param {array} roots Contains a list of root ids\n     * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }\n     */\n    var analyse = function (roots, modules) {\n      var done = {};\n      var path = [];\n      var missing = [];\n      var cycle;\n\n      var children = function (name) {\n        array.each(modules[name], attempt);\n      };\n\n      var examine = function (name) {\n        if (modules[name])\n          children(name);\n        else\n          missing.push(name);\n      };\n\n      var descend = function (name) {\n        path.push(name);\n        examine(name);\n        path.pop();\n      };\n\n      var decycle = function (name) {\n        if (array.contains(path, name))\n          cycle = collect(path, name);\n        else\n          descend(name);\n      };\n\n      var attempt = function (name) {\n        if (!done[name]) {\n          decycle(name);\n          done[name] = true;\n        }\n      };\n\n      array.each(roots, attempt);\n\n      return cycle ? { cycle: cycle } : { load: missing };\n    };\n\n    return {\n      analyse: analyse\n    };\n  }\n);\nkernel.module.fetcher = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions,\n    kernel.async.map,\n    kernel.async.piggybacker,\n    kernel.module.stratifier\n  ],\n\n  function (ar, fn, map, piggybacker, stratifier) {\n    var create = function (regulator, validator, onerror, define, require, demand) {\n      var piggyback = piggybacker.create();\n\n      var validate = function (onsuccess, results) {\n        var failed = ar.filter(results, fn.not(validator));\n        if (failed.length > 0)\n          onerror('Fetcher error: modules were not defined: ' + failed.join(', '));\n        else\n          onsuccess();\n      };\n\n      var mapper = function (spec, onresult) {\n        var action = fn.curry(onresult, spec.id);\n        var load = function (callback) {\n          spec.load(callback, onerror);\n        };\n        piggyback.piggyback(spec.url, load, action);\n      };\n\n      var asyncfetch = function (specs, onsuccess) {\n        var oncomplete = fn.curry(validate, onsuccess);\n        var strata = stratifier.stratify(specs);\n        map.amap(strata, mapper, oncomplete);\n      };\n\n      var fetch = function (ids, onsuccess) {\n        regulator.regulate(ids, define, require, demand, function (specs) {\n          asyncfetch(specs, onsuccess);\n        }, onerror);\n      };\n\n      return {\n        fetch: fetch\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.module.loader = def(\n  [\n    kernel.module.analyser\n  ],\n\n  function (analyser) {\n    var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {\n      var result = analyser.analyse(roots, deps);\n\n      if (result.cycle)\n        onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));\n      else if (result.load.length === 0)\n        onsuccess();\n      else\n        fetcher.fetch(result.load, oncontinue);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nkernel.module.manager = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.module.loader,\n    kernel.module.fetcher\n  ],\n\n  function (ar, obj, loader, fetcher) {\n    var create = function (regulator, onerror) {\n      var blueprints = {};  // id -> { id: string, dependencies: [ string ], definition: function }\n      var modules = {};     // id -> module\n\n      // Adds a module to the system.\n      var define = function (id, dependencies, definition) {\n        if (id === undefined)\n          onerror(\"Define error: module id can not be undefined\");\n        else if (blueprints[id] !== undefined)\n          onerror(\"Define error: module '\" + id + \"' is already defined\");\n        else\n          blueprints[id] = { id: id, dependencies: dependencies, definition: definition };\n      };\n\n      // Loads a set of modules asynchronously.\n      var require = function (ids, callback) {\n        var onsuccess = function () {\n          var instances = ar.map(ids, demand);\n          callback.apply(null, instances);\n        };\n\n        var oncontinue = function () {\n          var deps = obj.map(blueprints, function (k, v) {\n            return v.dependencies;\n          });\n          loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);\n        };\n\n        oncontinue();\n      };\n\n      // Instantiates a module and all of its dependencies.\n      var demand = function (id) {\n        if (modules[id] !== undefined)\n          return modules[id];\n        if (blueprints[id] === undefined)\n          throw \"module '\" + id + \"' is not defined\";\n        var result = instantiate(id);\n        if (result === undefined)\n          throw \"module '\" + id + \"' returned undefined from definition function\";\n        modules[id] = result;\n        return result;\n      };\n\n      var instantiate = function (id) {\n        var blueprint = blueprints[id];\n        var args = ar.map(blueprint.dependencies, demand);  // Instantiate dependencies\n        return blueprint.definition.apply(null, args);  // Instantiate self\n      };\n\n      var validator = function (id) { return blueprints[id] !== undefined; };\n      var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);\n\n      return {\n        define: define,\n        require: require,\n        demand: demand\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.sources = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.modulator.globalator\n  ],\n\n  function (ar, obj, globalator) {\n    var create = function (builtins, configuration) {\n      var data = {\n        'global': { instance: globalator }\n      };\n      obj.each(builtins, function (key, value) {\n        data[key] = { instance: value };\n      });\n      ar.each(configuration.types, function (spec) {\n        data[spec.type] = { id: spec.modulator };\n      });\n      var sourcespecs = configuration.sources.slice(0);\n      var sources = [ globalator.create() ];\n\n      var guard = function (type) {\n        if (data[type] === undefined)\n          throw 'Unknown modulator type [' + type + '].';\n      };\n\n      var isResolved = function (type) {\n        guard(type);\n        return data[type].instance !== undefined;\n      };\n\n      var idOf = function (type) {\n        guard(type);\n        return data[type].id;\n      };\n\n      var instanceOf = function (type) {\n        guard(type);\n        return data[type].instance;\n      };\n\n      var register = function (type, instance) {\n        guard(type);\n        data[type].instance = instance;\n      };\n\n      var find = function (id) {\n        for (var i = 0; i < sources.length; ++i)\n          if (sources[i].can(id))\n            return { found: sources[i] };\n        return { notfound: true };\n      };\n\n      var crank = function () {\n        var left = [];\n        ar.each(sourcespecs, function (spec) {\n          if (isResolved(spec.type)) {\n            var instance = instanceOf(spec.type);\n            var source = instance.create.apply(null, spec.args);\n            sources.push(source);\n          } else\n            left.push(spec);\n        });\n        sourcespecs = left;\n      };\n\n      return {\n        isResolved: isResolved,\n        idOf: idOf,\n        instanceOf: instanceOf,\n        register: register,\n        find: find,\n        crank: crank\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.regulator = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function (sources) {\n      /*\n       * 1. Resolve configuration as much as possible\n       * 2. Check for unresolved modulator types that are required to continue.\n       *   a) Go ahead and resolve, if we have everything we need.\n       *   b) Delay, requiring the modulators, then retry.\n       */\n      var regulate = function (ids, define, require, demand, onsuccess, onerror) {\n        sources.crank();\n        var required = ar.map(ids, determinetype);\n        var unresolved = ar.filter(required, fn.not(sources.isResolved));\n        if (unresolved.length === 0)\n          resolve(ids,  define, require, demand, onsuccess, onerror);\n        else\n          delay(unresolved, ids, define, require, demand, onsuccess, onerror);\n      };\n\n      var resolve = function (ids,  define, require, demand, onsuccess, onerror) {\n        var r = [];\n        for (var i = 0; i < ids.length; ++i) {\n          var id = ids[i];\n          var source = sources.find(id);\n          if (source.notfound) {\n            onerror('Could not find source for module [' +  id + ']');\n            return;\n          }\n          var spec = source.found.get(id, define, require, demand);\n          r[i] = build(id, spec);\n        }\n        onsuccess(r);\n      };\n\n      var build = function (id, spec) {\n        return {\n          id: id,\n          url: spec.url,\n          load: spec.load,\n          serial: spec.serial\n        };\n      };\n\n      var delay = function (types, ids, define, require, demand, onsuccess, onerror) {\n        var modulatorids = ar.map(types, sources.idOf);\n        require(modulatorids, function (/* modulators */) {\n          var modulators = arguments;\n          ar.each(types, function (type, i) {\n             sources.register(type, modulators[i]);\n          });\n          regulate(ids, define, require, demand, onsuccess, onerror);\n        });\n      };\n\n      var determinetype = function (id) {\n        var index = id.indexOf('!');\n        return index === -1 ? 'bolt' : id.substring(0, index);\n      };\n\n      return {\n        regulate: regulate\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.config = def(\n  [\n    kernel.module.manager,\n    kernel.api.regulator,\n    kernel.api.sources\n  ],\n\n  function (manager, regulator, sources) {\n    var configure = function (configuration, builtins, onerror) {\n      var s = sources.create(builtins, configuration);\n      var r = regulator.create(s);\n      var engine = manager.create(r, onerror);\n\n      return {\n        define: engine.define,\n        require: engine.require,\n        demand: engine.demand\n      };\n    };\n\n    return {\n      configure: configure\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar loader = bolt.loader = bolt.loader || {};\nloader.executor = loader.executor || {};\nloader.api = loader.api || {};\nloader.transporter = loader.transporter || {};\nloader.tag = loader.tag || {};\nloader.tag.script = def(\n  [\n  ],\n\n  function () {\n    var guard = function (callback) {\n      return function (evt) {\n        if (evt.srcElement.readyState === \"loaded\" || evt.srcElement.readyState === \"complete\")\n          callback();\n      };\n    };\n\n    var ie = function (el) {\n      return el.attachEvent && !window.opera;\n    };\n\n    var onload = function (el, callback) {\n      if (ie(el))\n        el.attachEvent(\"onreadystatechange\", guard(callback));\n      else\n        el.addEventListener(\"load\", callback, false);\n    };\n\n    var createtag = function (callback) {\n      var el = document.createElement(\"script\");\n      el.type = \"text/javascript\";\n      onload(el, callback);\n      return el;\n    };\n\n    var insert = function (decorator, callback) {\n      var el = createtag(callback);\n      decorator(el);\n      var head = document.getElementsByTagName(\"head\")[0];\n      head.appendChild(el);\n    };\n\n    return {\n      insert: insert\n    };\n  }\n);\nloader.transporter.commonjs = def(\n  [\n  ],\n\n  function () {\n    var read = function (url, success, error) {\n      var fs = require('fs');\n      fs.exists(url, function (exists) {\n        if (exists)\n          fs.readFile(url, 'UTF-8', function (err, data) {\n            if (err)\n              error('Error reading file [' + url + '], error [' + err + ']');\n            else\n              success(data);\n          });\n        else\n          error('File does not exist [' + url + ']');\n      });\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nloader.transporter.xhr = def(\n  [\n  ],\n\n  function () {\n    var requestObject = function () {\n      // Correct way to use XMLHttpRequest in IE:\n      // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx\n      var factories = [\n        function () { return new XMLHttpRequest() },\n        function () { return new ActiveXObject(\"Microsoft.XMLHTTP\") }\n      ];\n\n      return fallback(factories);\n    };\n\n    var fallback = function (items) {\n      for (var i = 0; i < items.length; ++i) {\n        try {\n          return items[i]();\n        } catch (e) {\n        }\n      }\n    };\n\n    var handler = function (req, url, success, error) {\n      return function () {\n        if (req.readyState === 4)\n          done(req, url, success, error);\n      };\n    };\n\n    var done = function (req, url, success, error) {\n      if (req.status === 200 || req.status === 304)\n        success(req.responseText);\n      else\n        error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: \"' + url + '\"');\n    };\n\n    var getUrl = function (req, url, success, error) {\n      req.open('GET', url, true);\n      req.onreadystatechange = handler(req, url, success, error);\n      req.send();\n    };\n\n    var request = function (url, success, error) {\n      var req = requestObject();\n      if (req)\n        getUrl(req, url, success, error);\n      else\n        error('Transport error: browser does not support XMLHttpRequest.');\n    };\n\n    return {\n      request: request\n    };\n  }\n);\nloader.executor.evaller = def(\n  [\n  ],\n\n  function () {\n    var execute = function (data, onsuccess, onfailure) {\n      try {\n        eval(data);\n      } catch(e) {\n        onfailure(e);\n        return;\n      }\n\n      onsuccess();\n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.executor.injector = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var execute = function (data, onsuccess, onfailure) {\n      var inject = function (tag) {\n        tag.text = data;\n      };\n\n      var noop = function () {};\n\n      // Injection does not fire events, but execution happens synchronously,\n      // so we just make an explicit callback\n      script.insert(inject, noop);\n      onsuccess(); \n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.api.commonjsevaller = def(\n  [\n    loader.transporter.commonjs,\n    loader.executor.evaller\n  ],\n\n  function (commonjs, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      commonjs.read(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.scripttag = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var load = function (url, onsuccess, onfailure) {\n      var sourcer = function (tag) {\n        tag.src = url;\n      };\n\n      script.insert(sourcer, onsuccess);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrevaller = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.evaller\n  ],\n\n  function (xhr, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrinjector = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.injector\n  ],\n\n  function (xhr, injector) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        injector.execute(data, onsuccess);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar module = bolt.module = bolt.module || {};\nmodule.bootstrap = module.bootstrap || {};\nmodule.config = module.config || {};\nmodule.error = module.error || {};\nmodule.modulator = module.modulator || {};\nmodule.reader = module.reader || {};\nmodule.runtime = module.runtime || {};\nmodule.util = module.util || {};\nmodule.error.error = def(\n  [\n  ],\n\n  function () {\n    var die = function (msg) {\n      throw msg || new Error('unknown error');\n    };\n\n    return {\n      die: die\n    };\n  }\n);\nmodule.config.mapper = def(\n  [\n  ],\n\n  function () {\n    var flat = function (id) {\n      return id;\n    };\n\n    var hierarchical = function (id) {\n      return id.replace(/\\./g, '/');\n    };\n\n    var constant = function (name) {\n      return function () {\n        return name;\n      };\n    };\n\n    return {\n      flat: flat,\n      hierarchical: hierarchical,\n      constant: constant\n    };\n  }\n);\nmodule.api = def(\n  [\n    module.runtime\n  ],\n\n  function (runtime) {\n    var delegate = function (method) {\n      return function () {\n        return runtime[method].apply(null, arguments);\n      };\n    };\n\n    return {\n      define: delegate('define'),\n      require: delegate('require'),\n      demand: delegate('demand'),\n      main: delegate('main'),\n      load: delegate('load'),\n      loadscript: delegate('loadscript')\n    };\n  }\n);\nmodule.util.path = def(\n  [\n  ],\n\n  function () {\n    var dirname = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(0, end);\n    };\n\n    var basename = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(end + 1);\n    };\n\n    return {\n      basename: basename,\n      dirname: dirname\n    };\n  }\n);\nmodule.util.locator = def(\n  [\n  ],\n\n  function () {\n    var browser = function () {\n      var scripts = document.getElementsByTagName(\"script\");\n      return scripts[scripts.length - 1].src;\n    };\n\n    var runtime = module.runtime.locate;\n\n    var locate = function () {\n      var f = runtime || browser;\n      return f();\n    };\n\n    return {\n      locate: locate\n    };\n  }\n);\nmodule.util.pather = def(\n  [\n    module.util.path\n  ],\n\n  function (path) {\n    var create = function (relativeto) {\n      var base = path.dirname(relativeto);\n      return function (path) {\n        return base + '/' + path;\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.modulator.modulators = def(\n  [\n    ephox.bolt.kernel.fp.functions,\n    ephox.bolt.kernel.modulator.bolt,\n    ephox.bolt.loader.api.commonjsevaller,\n    ephox.bolt.loader.api.scripttag,\n    ephox.bolt.loader.api.xhrevaller,\n    ephox.bolt.loader.api.xhrinjector\n  ],\n\n  function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {\n    var wrap = function (modulator, loader) {\n      var create = fn.curry(modulator.create, loader);\n\n      return {\n        create: create\n      }\n    };\n\n    return {\n      boltcommonjs: wrap(bolt, commonjsevaller),\n      boltscripttag: wrap(bolt, scripttag),\n      boltxhreval: wrap(bolt, xhrevaller),\n      boltxhrinjector: wrap(bolt, xhrinjector)\n    };\n  }\n);\nmodule.config.builtins = def(\n  [\n    ephox.bolt.module.modulator.modulators.boltscripttag,\n    ephox.bolt.module.modulator.modulators.boltcommonjs\n  ],\n\n  function (boltscripttag, boltcommonjs) {\n    return {\n      // TODO: 'amd' is maintained for backwards compatibility, will be removed\n      // at some point.\n      browser: { bolt: boltscripttag, amd: boltscripttag },\n      commonjs: { bolt: boltcommonjs, amd: boltcommonjs }\n    };\n  }\n);\nmodule.config.specs = def(\n  [\n    module.util.pather\n  ],\n\n  function (pather) {\n    var type = function (type, implementation) {\n      return {\n        type: type,\n        implementation: implementation,\n        modulator: implementation + '.Modulator',\n        compiler: implementation + '.Compiler'\n      };\n    };\n\n    var source = function (relativeto) {\n      return function (type /*, args */) {\n        return {\n          type: type,\n          relativeto: relativeto,\n          args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))\n        };\n      }\n    };\n\n    return {\n      type: type,\n      source: source\n    };\n  }\n);\nmodule.reader.bouncing = def(\n  [\n    ephox.bolt.kernel.fp.array,\n    module.error.error,\n    module.config.specs\n  ],\n\n  function (ar, error, specs) {\n    var bounce = function (done, read, acc) {\n      var next = acc.configs.shift();\n      read(next.relativeto, next.config, done, acc);\n    };\n\n    var tick = function (file, cfg, done, read, acc) {\n      var munged = ar.map(cfg.configs || [], function (config) {\n        return { relativeto: file, config: config };\n      });\n      var accumulated = {\n        sources: acc.sources.concat(cfg.sources || []),\n        types: acc.types.concat(cfg.types || []),\n        configs: munged.concat(acc.configs)\n      };\n      if (accumulated.configs.length > 0)\n        bounce(done, read, accumulated);\n      else\n        done({ sources: accumulated.sources, types: accumulated.types });\n    };\n\n    /*\n     * All precedence is depth-first, pre-order. Example:\n     *\n     *        A\n     *       /-\\\n     *      B   C\n     *     /|   |\\\n     *    D E   F G\n     *\n     * Configs are read in A, B, D, E, C, F, G.\n     *\n     * If configs mixed delegation and sources, the\n     * sources would be ordered the same: A, B, D, E, C, F, G.\n     */\n\n    var evaluate = function (file, payload, done, read, acc) {\n      var result = {};\n      /* eval scope */\n      var mapper = module.config.mapper;\n      var type = specs.type;\n      var source = specs.source(file);\n      var configure = function (configuration) {\n        result = configuration;\n      };\n      try {\n        eval(payload);\n      } catch (e) {\n        throw 'Could not load configuration [' + file + '], with: ' + e;\n      }\n      tick(file, result, done, read, acc);\n    };\n\n    return {\n      evaluate: evaluate\n    };\n  }\n);\nmodule.reader.browser = def(\n  [\n    module.error.error,\n    module.reader.bouncing,\n    module.util.path,\n    ephox.bolt.loader.transporter.xhr\n  ],\n\n  function (error, bouncing, path, xhr) {\n    var read = function (relativeto, file, done, acc) {\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = base + '/' + file;\n      xhr.request(absolute, function (payload) {\n        bouncing.evaluate(absolute, payload, done, read, accumulated);\n      }, error.die);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.node = def(\n  [\n    module.reader.bouncing\n  ],\n\n  function (bouncing, path, fs) {\n    var read = function (relativeto, file, done, acc) {\n      var fs = require('fs');\n      var path = require('path');\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = path.resolve(base, file);\n      var payload = fs.readFileSync(absolute, 'UTF-8');\n      bouncing.evaluate(absolute, payload, done, read, accumulated);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.direct = def(\n  [\n  ],\n\n  function () {\n    var create = function (configuration) {\n      return function (done) {\n        done({\n          sources: configuration.sources || [],\n          types: configuration.types || [],\n          configs: configuration.configs || []\n        });\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nmodule.bootstrap.configloader = def(\n  [\n    module.util.locator,\n    module.reader.browser\n  ],\n\n  function (locator, browser) {\n    var create = function (file) {\n      var script = locator.locate();\n      return function (done) {\n        browser.read(script, file, done);\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.bootstrap.deferred = def(\n  [\n    ephox.bolt.kernel.fp.array\n  ],\n\n  function (ar) {\n    var deferred = [];\n\n    var require = function (ids, fn) {\n      var r = function (real) {\n        real(ids, fn);\n      };\n      deferred.push(r);\n    };\n\n    var configured = function (require) {\n      ar.each(deferred, function (action) {\n        action(require);\n      });\n      deferred = [];\n    };\n\n    return {\n      require: require,\n      configured: configured\n    };\n  }\n);\nmodule.bootstrap.main = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.runtime\n  ],\n\n  function (config, deferred, runtime) {\n    var main = function (id, args, configids, callback) {\n      runtime.require(configids || [], function () {\n        callback && callback.apply(null, arguments);\n        runtime.require([ id ], function (module) {\n          module.apply(null, args || []);\n        });\n      });\n    };\n\n    return {\n      main: main\n    };\n  }\n);\nmodule.bootstrap.install = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.bootstrap.main,\n    module.runtime,\n    module.error.error\n  ],\n\n  function (config, deferred, main, runtime, error) {\n    var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };\n\n    var install = function (reader, builtins, load, loadscript) {\n      runtime.define = notready;\n      runtime.demand = notready;\n      runtime.require = deferred.require;\n      runtime.main = main.main;\n      runtime.load = load;\n      runtime.loadscript = loadscript;\n\n      reader(function (configuration) {\n        var bolt = config.configure(configuration, builtins, error.die);\n        runtime.define = bolt.define;\n        runtime.require = bolt.require;\n        runtime.demand = bolt.demand;\n\n        deferred.configured(runtime.require);\n      });\n    };\n\n    return {\n      install: install\n    };\n  }\n);\n\n})(Function('return this')());\n(function (global) {\n  var obj = ephox.bolt.kernel.fp.object;\n  var api = ephox.bolt.module.api;\n  var builtins = ephox.bolt.module.config.builtins.browser;\n  var install = ephox.bolt.module.bootstrap.install;\n  var reader = ephox.bolt.module.bootstrap.configloader.create(\"prod.js\");\n  var transport = ephox.bolt.loader.transporter.xhr.request;\n  var script = ephox.bolt.loader.api.scripttag.load;\n  install.install(reader, builtins, transport, script);\n  obj.merge(global, api);\n})(Function(\"return this;\")());"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/browser.js",
    "content": "configure({\n  configs: [\n    './prod.js'\n  ],\n  sources: [\n    source('amd', 'ephox/tinymce', '', mapper.constant('../../../../../tinymce')),\n    source('amd', 'ephox.mcagar', '../../lib/test', mapper.flat),\n    source('amd', 'ephox', '../../lib/test', mapper.flat)\n  ]\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/demo.js",
    "content": "configure({\n  configs: [\n    './prod.js'\n  ],\n  sources: [\n    source('amd', 'tinymce/inlite/Demo', '../../src/demo/js', mapper.hierarchical)\n  ]\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/bolt/prod.js",
    "content": "configure({\n  sources: [\n    source('amd', 'tinymce/inlite', '../../src/main/js', mapper.hierarchical)\n  ]\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/config/dent/depend.js",
    "content": "var lib = 'lib';\nvar run = lib + '/run';\nvar depend = run + '/depend';\nvar licenses = run + '/licenses';\nvar demo = lib + '/demo';\nvar test = lib + '/test';\nvar config = lib + '/config';\n\nvar cleanDirs = [ lib ];\n\nvar dependencies = [\n  {\n    name: 'mcagar',\n    repository: 'buildrepo2',\n    source: 'mcagar.zip',\n    targets: [\n      { name: 'module/*.js', path: test },\n      { name: 'depend/*.js', path: test }\n    ]\n  }\n];\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/scratch/compile/bootstrap.js",
    "content": "(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar kernel = bolt.kernel = bolt.kernel || {};\nkernel.api = kernel.api || {};\nkernel.async = kernel.api || {};\nkernel.fp = kernel.fp || {};\nkernel.modulator = kernel.modulator || {};\nkernel.module = kernel.module || {};\nkernel.fp.array = def(\n  [\n  ],\n\n  function () {\n    var equals = function (a1, a2) {\n      if (a1.length !== a2.length)\n        return false;\n      for (var i = 0; i < a1.length; ++i)\n        if (a1[i] !== a2[i])\n          return false;\n      return true;\n    };\n\n    var forall = function (a, f) {\n      var fn = f || function (x) {\n        return x === true;\n      };\n      for (var i = 0; i < a.length; ++i)\n        if (fn(a[i]) !== true)\n          return false;\n      return true;\n    };\n\n    var map = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r.push(f(a[i], i));\n      return r;\n    };\n\n    var flatten = function (a) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        r = r.concat(a[i]);\n      return r;\n    };\n\n    var flatmap = function (a, f) {\n      return flatten(map(a, f));\n    };\n\n    var filter = function (a, f) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i)\n        if (f(a[i]))\n          r.push(a[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var contains = function (a, x) {\n      return !forall(a, function (v) {\n        return v !== x;\n      });\n    };\n\n    var indexof = function (a, x) {\n      for (var i = 0; i < a.length; ++i)\n        if (a[i] === x)\n          return i;\n      return -1;\n    };\n\n    return {\n      equals: equals,\n      forall: forall,\n      map: map,\n      flatten: flatten,\n      flatmap: flatmap,\n      filter: filter,\n      each: each,\n      contains: contains,\n      indexof: indexof\n    };\n  }\n);\nkernel.fp.object = def(\n  [\n  ],\n\n  function () {\n    var map = function (o, f) {\n      var r = {};\n      for (var i in o)\n        if (o.hasOwnProperty(i))\n          r[i] = f(i, o[i]);\n      return r;\n    };\n\n    var each = map;\n\n    var merge = function (d, s) {\n      each(s, function (k, v) {\n        d[k] = v;\n      });\n    };\n\n    var keys = function (o) {\n      var r = [];\n      each(o, function (k) {\n        r.push(k);\n      });\n      return r;\n    };\n\n    return {\n      each: each,\n      keys: keys,\n      map: map,\n      merge: merge\n    };\n  }\n);\nkernel.fp.functions = def(\n  [\n  ],\n\n  function () {\n    var curry = function (f) {\n      var slice = Array.prototype.slice;\n      var args = slice.call(arguments, 1);\n      return function () {\n        var all = args.concat(slice.call(arguments, 0));\n        return f.apply(null, all);\n      };\n    };\n\n    var not = function (z) {\n      return function () {\n        var slice = Array.prototype.slice;\n        return !z.apply(null, slice.call(arguments, 0));\n      };\n    };\n\n    var apply = function (f) {\n      var slice = Array.prototype.slice;\n      return f.apply(null, slice.call(arguments, 0));\n    };\n\n    return {\n      curry: curry,\n      not: not,\n      apply: apply\n    };\n  }\n);kernel.async.map = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var amap = function (data, f, oncomplete) {\n      var total = data.length;\n      var count = 0;\n      var results = [];\n\n      ar.each(data, function (datum, i) {\n        f(datum, function (result) {\n          ++count;\n          results[i] = result;\n          if (count === total)\n            oncomplete(results);\n        });\n      });\n    };\n\n    return {\n      amap: amap\n    };\n  }\n);\n/**\n * This module has a dual responsibility:\n *  1. Ensures that asynchronous function calls, 'f', that share the same\n *     'key' are not executed in parallel.\n *  2. In the case where an attempt to call in parallel is prevented,\n *     the 'action' callbacks are executed when the asynchronous call is\n *     completed.\n *\n * Example:\n *  When we async-map to remotely fetch module definition, it is\n *  important that only a single define is evaluated, but the\n *  notification that the definition has completed is propagated\n *  to all interested parties.\n *\n *    1. we require dependencies 'x' and 'y'\n *\n *    2. both x and y are defined in the same file  (i.e. compiled together), 'a.js'.\n *\n *    3. we resolve x and y, to their load spec using a modulator\n *        x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *        y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};\n *\n *    4. we make the piggyback call for x:\n *        piggybacker.piggyback(x_spec.url, x_spec.load, xdone);\n *\n *       this will register the 'xdone' action, and actually\n *       trigger the load call, with a synthetic callback\n *       responsible for triggering all registered actions.\n *\n *    5. we make the piggyback call for y:\n *        piggybacker.piggyback(y_spec.url, y_spec.load, ydone);\n *\n *       this will register the 'ydone' action, but NOT trigger\n *       the load call.\n *\n *    6. the load call completes, and calls the synthetic callback,\n *       which is responsible for triggering both 'xdone' and 'ydone'.\n *\n *    7. something else happens that means we have to load 'a.js' again,\n *       the piggybacker DOES NOT prevent this call, and will follow\n *       the above process.\n */\nkernel.async.piggybacker = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function () {\n      var queue = {};  // key -> [actions]\n\n      var process = function (key) {\n        var actions = queue[key];\n        delete queue[key];\n        ar.each(actions, fn.apply);\n      };\n\n      var piggyback = function (key, f, action) {\n        if (queue[key] === undefined) {\n          queue[key] = [ action ];\n          f(fn.curry(process, key));\n        } else {\n          queue[key].push(action);\n        }\n      };\n\n      return {\n        piggyback: piggyback\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.globalator = def(\n  [\n  ],\n\n  function () {\n    var create = function () {\n      // FIX pull out\n      var resolve = function (name, scope) {\n        var parts = name.split('.');\n        var r = scope;\n        for (var i = 0; i < parts.length && r !== undefined; ++i)\n          r = r[parts[i]];\n        return r;\n      };\n\n      var global = Function('return this')();\n\n      var can = function (id) {\n        return id.indexOf('global!') === 0;\n      };\n\n      var get = function (id, define, require) {\n        var name = id.substring('global!'.length);\n\n        var load = function (onsuccess, onfailure) {\n          var instance = resolve(name, global);\n          if (instance !== undefined) {\n            define(id, [], function () { return instance; });\n            onsuccess();\n          } else {\n            onfailure('Modulator error: could not resolve global [' + name + ']');\n          }\n        };\n\n        return {\n          url: id, // this just needs to be unique, no download required.\n          load: load,\n          serial: true\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      }\n    };\n    return {\n      create: create\n    };\n  }\n);\nkernel.modulator.bolt = def(\n  [\n    kernel.fp.functions\n  ],\n\n  function (fn) {\n    var create = function (loader, pather, namespace, path, idTransformer, options) {\n      var can = function (id) {\n        return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;\n      };\n\n      var get = function (id) {\n        var before = options !== undefined && options.absolute === true ? path : pather(path);\n        var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';\n        var url = before + \"/\" + idTransformer(id) + '.js' + after;\n        var load = fn.curry(loader.load, url);\n\n        return {\n          url: url,\n          load: load,\n          serial: false\n        };\n      };\n\n      return {\n        can: can,\n        get: get\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);kernel.module.stratifier = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (ar) {\n    var stratify = function (specs) {\n      var parallels = ar.filter(specs, function (spec) {\n        return !spec.serial;\n      });\n      return parallels.length > 0 ? parallels : specs.slice(0, 1);\n    };\n\n    return {\n      stratify: stratify\n    };\n  }\n);\n/**\n * This module performs dependency analysis of strings that depend on sets of\n * strings.\n *\n * The input is an array of root strings to start analysis from, and an object\n * that contains a mapping of each string to the strings it depends on.\n *\n * Performing an analysis results in either:\n *   1. an empty array, indicating that all dependencies are satisfied,\n *   2. an array of strings that are, at the minimum, still needed in order to\n *      satisfy the given dependency trees, or\n *   3. an array of strings that form a dependency cycle.\n */\nkernel.module.analyser = def(\n  [\n    kernel.fp.array\n  ],\n\n  function (array) {\n    var collect = function (path, name) {\n      var i = array.indexof(path, name);\n      var p = path.slice(i);\n      return p.concat([name]);\n    };\n\n    /**\n     * @param {array} roots Contains a list of root ids\n     * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }\n     */\n    var analyse = function (roots, modules) {\n      var done = {};\n      var path = [];\n      var missing = [];\n      var cycle;\n\n      var children = function (name) {\n        array.each(modules[name], attempt);\n      };\n\n      var examine = function (name) {\n        if (modules[name])\n          children(name);\n        else\n          missing.push(name);\n      };\n\n      var descend = function (name) {\n        path.push(name);\n        examine(name);\n        path.pop();\n      };\n\n      var decycle = function (name) {\n        if (array.contains(path, name))\n          cycle = collect(path, name);\n        else\n          descend(name);\n      };\n\n      var attempt = function (name) {\n        if (!done[name]) {\n          decycle(name);\n          done[name] = true;\n        }\n      };\n\n      array.each(roots, attempt);\n\n      return cycle ? { cycle: cycle } : { load: missing };\n    };\n\n    return {\n      analyse: analyse\n    };\n  }\n);\nkernel.module.fetcher = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions,\n    kernel.async.map,\n    kernel.async.piggybacker,\n    kernel.module.stratifier\n  ],\n\n  function (ar, fn, map, piggybacker, stratifier) {\n    var create = function (regulator, validator, onerror, define, require, demand) {\n      var piggyback = piggybacker.create();\n\n      var validate = function (onsuccess, results) {\n        var failed = ar.filter(results, fn.not(validator));\n        if (failed.length > 0)\n          onerror('Fetcher error: modules were not defined: ' + failed.join(', '));\n        else\n          onsuccess();\n      };\n\n      var mapper = function (spec, onresult) {\n        var action = fn.curry(onresult, spec.id);\n        var load = function (callback) {\n          spec.load(callback, onerror);\n        };\n        piggyback.piggyback(spec.url, load, action);\n      };\n\n      var asyncfetch = function (specs, onsuccess) {\n        var oncomplete = fn.curry(validate, onsuccess);\n        var strata = stratifier.stratify(specs);\n        map.amap(strata, mapper, oncomplete);\n      };\n\n      var fetch = function (ids, onsuccess) {\n        regulator.regulate(ids, define, require, demand, function (specs) {\n          asyncfetch(specs, onsuccess);\n        }, onerror);\n      };\n\n      return {\n        fetch: fetch\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.module.loader = def(\n  [\n    kernel.module.analyser\n  ],\n\n  function (analyser) {\n    var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {\n      var result = analyser.analyse(roots, deps);\n\n      if (result.cycle)\n        onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));\n      else if (result.load.length === 0)\n        onsuccess();\n      else\n        fetcher.fetch(result.load, oncontinue);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nkernel.module.manager = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.module.loader,\n    kernel.module.fetcher\n  ],\n\n  function (ar, obj, loader, fetcher) {\n    var create = function (regulator, onerror) {\n      var blueprints = {};  // id -> { id: string, dependencies: [ string ], definition: function }\n      var modules = {};     // id -> module\n\n      // Adds a module to the system.\n      var define = function (id, dependencies, definition) {\n        if (id === undefined)\n          onerror(\"Define error: module id can not be undefined\");\n        else if (blueprints[id] !== undefined)\n          onerror(\"Define error: module '\" + id + \"' is already defined\");\n        else\n          blueprints[id] = { id: id, dependencies: dependencies, definition: definition };\n      };\n\n      // Loads a set of modules asynchronously.\n      var require = function (ids, callback) {\n        var onsuccess = function () {\n          var instances = ar.map(ids, demand);\n          callback.apply(null, instances);\n        };\n\n        var oncontinue = function () {\n          var deps = obj.map(blueprints, function (k, v) {\n            return v.dependencies;\n          });\n          loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);\n        };\n\n        oncontinue();\n      };\n\n      // Instantiates a module and all of its dependencies.\n      var demand = function (id) {\n        if (modules[id] !== undefined)\n          return modules[id];\n        if (blueprints[id] === undefined)\n          throw \"module '\" + id + \"' is not defined\";\n        var result = instantiate(id);\n        if (result === undefined)\n          throw \"module '\" + id + \"' returned undefined from definition function\";\n        modules[id] = result;\n        return result;\n      };\n\n      var instantiate = function (id) {\n        var blueprint = blueprints[id];\n        var args = ar.map(blueprint.dependencies, demand);  // Instantiate dependencies\n        return blueprint.definition.apply(null, args);  // Instantiate self\n      };\n\n      var validator = function (id) { return blueprints[id] !== undefined; };\n      var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);\n\n      return {\n        define: define,\n        require: require,\n        demand: demand\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.sources = def(\n  [\n    kernel.fp.array,\n    kernel.fp.object,\n    kernel.modulator.globalator\n  ],\n\n  function (ar, obj, globalator) {\n    var create = function (builtins, configuration) {\n      var data = {\n        'global': { instance: globalator }\n      };\n      obj.each(builtins, function (key, value) {\n        data[key] = { instance: value };\n      });\n      ar.each(configuration.types, function (spec) {\n        data[spec.type] = { id: spec.modulator };\n      });\n      var sourcespecs = configuration.sources.slice(0);\n      var sources = [ globalator.create() ];\n\n      var guard = function (type) {\n        if (data[type] === undefined)\n          throw 'Unknown modulator type [' + type + '].';\n      };\n\n      var isResolved = function (type) {\n        guard(type);\n        return data[type].instance !== undefined;\n      };\n\n      var idOf = function (type) {\n        guard(type);\n        return data[type].id;\n      };\n\n      var instanceOf = function (type) {\n        guard(type);\n        return data[type].instance;\n      };\n\n      var register = function (type, instance) {\n        guard(type);\n        data[type].instance = instance;\n      };\n\n      var find = function (id) {\n        for (var i = 0; i < sources.length; ++i)\n          if (sources[i].can(id))\n            return { found: sources[i] };\n        return { notfound: true };\n      };\n\n      var crank = function () {\n        var left = [];\n        ar.each(sourcespecs, function (spec) {\n          if (isResolved(spec.type)) {\n            var instance = instanceOf(spec.type);\n            var source = instance.create.apply(null, spec.args);\n            sources.push(source);\n          } else\n            left.push(spec);\n        });\n        sourcespecs = left;\n      };\n\n      return {\n        isResolved: isResolved,\n        idOf: idOf,\n        instanceOf: instanceOf,\n        register: register,\n        find: find,\n        crank: crank\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.regulator = def(\n  [\n    kernel.fp.array,\n    kernel.fp.functions\n  ],\n\n  function (ar, fn) {\n    var create = function (sources) {\n      /*\n       * 1. Resolve configuration as much as possible\n       * 2. Check for unresolved modulator types that are required to continue.\n       *   a) Go ahead and resolve, if we have everything we need.\n       *   b) Delay, requiring the modulators, then retry.\n       */\n      var regulate = function (ids, define, require, demand, onsuccess, onerror) {\n        sources.crank();\n        var required = ar.map(ids, determinetype);\n        var unresolved = ar.filter(required, fn.not(sources.isResolved));\n        if (unresolved.length === 0)\n          resolve(ids,  define, require, demand, onsuccess, onerror);\n        else\n          delay(unresolved, ids, define, require, demand, onsuccess, onerror);\n      };\n\n      var resolve = function (ids,  define, require, demand, onsuccess, onerror) {\n        var r = [];\n        for (var i = 0; i < ids.length; ++i) {\n          var id = ids[i];\n          var source = sources.find(id);\n          if (source.notfound) {\n            onerror('Could not find source for module [' +  id + ']');\n            return;\n          }\n          var spec = source.found.get(id, define, require, demand);\n          r[i] = build(id, spec);\n        }\n        onsuccess(r);\n      };\n\n      var build = function (id, spec) {\n        return {\n          id: id,\n          url: spec.url,\n          load: spec.load,\n          serial: spec.serial\n        };\n      };\n\n      var delay = function (types, ids, define, require, demand, onsuccess, onerror) {\n        var modulatorids = ar.map(types, sources.idOf);\n        require(modulatorids, function (/* modulators */) {\n          var modulators = arguments;\n          ar.each(types, function (type, i) {\n             sources.register(type, modulators[i]);\n          });\n          regulate(ids, define, require, demand, onsuccess, onerror);\n        });\n      };\n\n      var determinetype = function (id) {\n        var index = id.indexOf('!');\n        return index === -1 ? 'bolt' : id.substring(0, index);\n      };\n\n      return {\n        regulate: regulate\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nkernel.api.config = def(\n  [\n    kernel.module.manager,\n    kernel.api.regulator,\n    kernel.api.sources\n  ],\n\n  function (manager, regulator, sources) {\n    var configure = function (configuration, builtins, onerror) {\n      var s = sources.create(builtins, configuration);\n      var r = regulator.create(s);\n      var engine = manager.create(r, onerror);\n\n      return {\n        define: engine.define,\n        require: engine.require,\n        demand: engine.demand\n      };\n    };\n\n    return {\n      configure: configure\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar loader = bolt.loader = bolt.loader || {};\nloader.executor = loader.executor || {};\nloader.api = loader.api || {};\nloader.transporter = loader.transporter || {};\nloader.tag = loader.tag || {};\nloader.tag.script = def(\n  [\n  ],\n\n  function () {\n    var guard = function (callback) {\n      return function (evt) {\n        if (evt.srcElement.readyState === \"loaded\" || evt.srcElement.readyState === \"complete\")\n          callback();\n      };\n    };\n\n    var ie = function (el) {\n      return el.attachEvent && !window.opera;\n    };\n\n    var onload = function (el, callback) {\n      if (ie(el))\n        el.attachEvent(\"onreadystatechange\", guard(callback));\n      else\n        el.addEventListener(\"load\", callback, false);\n    };\n\n    var createtag = function (callback) {\n      var el = document.createElement(\"script\");\n      el.type = \"text/javascript\";\n      onload(el, callback);\n      return el;\n    };\n\n    var insert = function (decorator, callback) {\n      var el = createtag(callback);\n      decorator(el);\n      var head = document.getElementsByTagName(\"head\")[0];\n      head.appendChild(el);\n    };\n\n    return {\n      insert: insert\n    };\n  }\n);\nloader.transporter.commonjs = def(\n  [\n  ],\n\n  function () {\n    var read = function (url, success, error) {\n      var fs = require('fs');\n      fs.exists(url, function (exists) {\n        if (exists)\n          fs.readFile(url, 'UTF-8', function (err, data) {\n            if (err)\n              error('Error reading file [' + url + '], error [' + err + ']');\n            else\n              success(data);\n          });\n        else\n          error('File does not exist [' + url + ']');\n      });\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nloader.transporter.xhr = def(\n  [\n  ],\n\n  function () {\n    var requestObject = function () {\n      // Correct way to use XMLHttpRequest in IE:\n      // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx\n      var factories = [\n        function () { return new XMLHttpRequest() },\n        function () { return new ActiveXObject(\"Microsoft.XMLHTTP\") }\n      ];\n\n      return fallback(factories);\n    };\n\n    var fallback = function (items) {\n      for (var i = 0; i < items.length; ++i) {\n        try {\n          return items[i]();\n        } catch (e) {\n        }\n      }\n    };\n\n    var handler = function (req, url, success, error) {\n      return function () {\n        if (req.readyState === 4)\n          done(req, url, success, error);\n      };\n    };\n\n    var done = function (req, url, success, error) {\n      if (req.status === 200 || req.status === 304)\n        success(req.responseText);\n      else\n        error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: \"' + url + '\"');\n    };\n\n    var getUrl = function (req, url, success, error) {\n      req.open('GET', url, true);\n      req.onreadystatechange = handler(req, url, success, error);\n      req.send();\n    };\n\n    var request = function (url, success, error) {\n      var req = requestObject();\n      if (req)\n        getUrl(req, url, success, error);\n      else\n        error('Transport error: browser does not support XMLHttpRequest.');\n    };\n\n    return {\n      request: request\n    };\n  }\n);\nloader.executor.evaller = def(\n  [\n  ],\n\n  function () {\n    var execute = function (data, onsuccess, onfailure) {\n      try {\n        eval(data);\n      } catch(e) {\n        onfailure(e);\n        return;\n      }\n\n      onsuccess();\n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.executor.injector = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var execute = function (data, onsuccess, onfailure) {\n      var inject = function (tag) {\n        tag.text = data;\n      };\n\n      var noop = function () {};\n\n      // Injection does not fire events, but execution happens synchronously,\n      // so we just make an explicit callback\n      script.insert(inject, noop);\n      onsuccess(); \n    };\n\n    return {\n      execute: execute\n    };\n  }\n);\nloader.api.commonjsevaller = def(\n  [\n    loader.transporter.commonjs,\n    loader.executor.evaller\n  ],\n\n  function (commonjs, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      commonjs.read(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.scripttag = def(\n  [\n    loader.tag.script\n  ],\n\n  function (script) {\n    var load = function (url, onsuccess, onfailure) {\n      var sourcer = function (tag) {\n        tag.src = url;\n      };\n\n      script.insert(sourcer, onsuccess);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrevaller = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.evaller\n  ],\n\n  function (xhr, evaller) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        evaller.execute(data, onsuccess, onfailure);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\nloader.api.xhrinjector = def(\n  [\n    loader.transporter.xhr,\n    loader.executor.injector\n  ],\n\n  function (xhr, injector) {\n    var load = function (url, onsuccess, onfailure) {\n      var inject = function (data) {\n        injector.execute(data, onsuccess);\n      };\n\n      xhr.request(url, inject, onfailure);\n    };\n\n    return {\n      load: load\n    };\n  }\n);\n})(Function('return this')());\n\n(function (scope) {\nvar ephox = scope.ephox = scope.ephox || {};\nvar bolt = ephox.bolt = ephox.bolt || {};\n\nvar def = function (deps, factory) {\n    return factory.apply(null, deps);\n};\nvar module = bolt.module = bolt.module || {};\nmodule.bootstrap = module.bootstrap || {};\nmodule.config = module.config || {};\nmodule.error = module.error || {};\nmodule.modulator = module.modulator || {};\nmodule.reader = module.reader || {};\nmodule.runtime = module.runtime || {};\nmodule.util = module.util || {};\nmodule.error.error = def(\n  [\n  ],\n\n  function () {\n    var die = function (msg) {\n      throw msg || new Error('unknown error');\n    };\n\n    return {\n      die: die\n    };\n  }\n);\nmodule.config.mapper = def(\n  [\n  ],\n\n  function () {\n    var flat = function (id) {\n      return id;\n    };\n\n    var hierarchical = function (id) {\n      return id.replace(/\\./g, '/');\n    };\n\n    var constant = function (name) {\n      return function () {\n        return name;\n      };\n    };\n\n    return {\n      flat: flat,\n      hierarchical: hierarchical,\n      constant: constant\n    };\n  }\n);\nmodule.api = def(\n  [\n    module.runtime\n  ],\n\n  function (runtime) {\n    var delegate = function (method) {\n      return function () {\n        return runtime[method].apply(null, arguments);\n      };\n    };\n\n    return {\n      define: delegate('define'),\n      require: delegate('require'),\n      demand: delegate('demand'),\n      main: delegate('main'),\n      load: delegate('load'),\n      loadscript: delegate('loadscript')\n    };\n  }\n);\nmodule.util.path = def(\n  [\n  ],\n\n  function () {\n    var dirname = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(0, end);\n    };\n\n    var basename = function (file) {\n      var normalized = file.replace(/\\\\/g, '/');\n      var end = normalized.lastIndexOf('/');\n      return normalized.substring(end + 1);\n    };\n\n    return {\n      basename: basename,\n      dirname: dirname\n    };\n  }\n);\nmodule.util.locator = def(\n  [\n  ],\n\n  function () {\n    var browser = function () {\n      var scripts = document.getElementsByTagName(\"script\");\n      return scripts[scripts.length - 1].src;\n    };\n\n    var runtime = module.runtime.locate;\n\n    var locate = function () {\n      var f = runtime || browser;\n      return f();\n    };\n\n    return {\n      locate: locate\n    };\n  }\n);\nmodule.util.pather = def(\n  [\n    module.util.path\n  ],\n\n  function (path) {\n    var create = function (relativeto) {\n      var base = path.dirname(relativeto);\n      return function (path) {\n        return base + '/' + path;\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.modulator.modulators = def(\n  [\n    ephox.bolt.kernel.fp.functions,\n    ephox.bolt.kernel.modulator.bolt,\n    ephox.bolt.loader.api.commonjsevaller,\n    ephox.bolt.loader.api.scripttag,\n    ephox.bolt.loader.api.xhrevaller,\n    ephox.bolt.loader.api.xhrinjector\n  ],\n\n  function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {\n    var wrap = function (modulator, loader) {\n      var create = fn.curry(modulator.create, loader);\n\n      return {\n        create: create\n      }\n    };\n\n    return {\n      boltcommonjs: wrap(bolt, commonjsevaller),\n      boltscripttag: wrap(bolt, scripttag),\n      boltxhreval: wrap(bolt, xhrevaller),\n      boltxhrinjector: wrap(bolt, xhrinjector)\n    };\n  }\n);\nmodule.config.builtins = def(\n  [\n    ephox.bolt.module.modulator.modulators.boltscripttag,\n    ephox.bolt.module.modulator.modulators.boltcommonjs\n  ],\n\n  function (boltscripttag, boltcommonjs) {\n    return {\n      // TODO: 'amd' is maintained for backwards compatibility, will be removed\n      // at some point.\n      browser: { bolt: boltscripttag, amd: boltscripttag },\n      commonjs: { bolt: boltcommonjs, amd: boltcommonjs }\n    };\n  }\n);\nmodule.config.specs = def(\n  [\n    module.util.pather\n  ],\n\n  function (pather) {\n    var type = function (type, implementation) {\n      return {\n        type: type,\n        implementation: implementation,\n        modulator: implementation + '.Modulator',\n        compiler: implementation + '.Compiler'\n      };\n    };\n\n    var source = function (relativeto) {\n      return function (type /*, args */) {\n        return {\n          type: type,\n          relativeto: relativeto,\n          args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))\n        };\n      }\n    };\n\n    return {\n      type: type,\n      source: source\n    };\n  }\n);\nmodule.reader.bouncing = def(\n  [\n    ephox.bolt.kernel.fp.array,\n    module.error.error,\n    module.config.specs\n  ],\n\n  function (ar, error, specs) {\n    var bounce = function (done, read, acc) {\n      var next = acc.configs.shift();\n      read(next.relativeto, next.config, done, acc);\n    };\n\n    var tick = function (file, cfg, done, read, acc) {\n      var munged = ar.map(cfg.configs || [], function (config) {\n        return { relativeto: file, config: config };\n      });\n      var accumulated = {\n        sources: acc.sources.concat(cfg.sources || []),\n        types: acc.types.concat(cfg.types || []),\n        configs: munged.concat(acc.configs)\n      };\n      if (accumulated.configs.length > 0)\n        bounce(done, read, accumulated);\n      else\n        done({ sources: accumulated.sources, types: accumulated.types });\n    };\n\n    /*\n     * All precedence is depth-first, pre-order. Example:\n     *\n     *        A\n     *       /-\\\n     *      B   C\n     *     /|   |\\\n     *    D E   F G\n     *\n     * Configs are read in A, B, D, E, C, F, G.\n     *\n     * If configs mixed delegation and sources, the\n     * sources would be ordered the same: A, B, D, E, C, F, G.\n     */\n\n    var evaluate = function (file, payload, done, read, acc) {\n      var result = {};\n      /* eval scope */\n      var mapper = module.config.mapper;\n      var type = specs.type;\n      var source = specs.source(file);\n      var configure = function (configuration) {\n        result = configuration;\n      };\n      try {\n        eval(payload);\n      } catch (e) {\n        throw 'Could not load configuration [' + file + '], with: ' + e;\n      }\n      tick(file, result, done, read, acc);\n    };\n\n    return {\n      evaluate: evaluate\n    };\n  }\n);\nmodule.reader.browser = def(\n  [\n    module.error.error,\n    module.reader.bouncing,\n    module.util.path,\n    ephox.bolt.loader.transporter.xhr\n  ],\n\n  function (error, bouncing, path, xhr) {\n    var read = function (relativeto, file, done, acc) {\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = base + '/' + file;\n      xhr.request(absolute, function (payload) {\n        bouncing.evaluate(absolute, payload, done, read, accumulated);\n      }, error.die);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.node = def(\n  [\n    module.reader.bouncing\n  ],\n\n  function (bouncing, path, fs) {\n    var read = function (relativeto, file, done, acc) {\n      var fs = require('fs');\n      var path = require('path');\n      var accumulated = acc || { sources: [], types: [],  configs: [] };\n      var base = path.dirname(relativeto);\n      var absolute = path.resolve(base, file);\n      var payload = fs.readFileSync(absolute, 'UTF-8');\n      bouncing.evaluate(absolute, payload, done, read, accumulated);\n    };\n\n    return {\n      read: read\n    };\n  }\n);\nmodule.reader.direct = def(\n  [\n  ],\n\n  function () {\n    var create = function (configuration) {\n      return function (done) {\n        done({\n          sources: configuration.sources || [],\n          types: configuration.types || [],\n          configs: configuration.configs || []\n        });\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);\nmodule.bootstrap.configloader = def(\n  [\n    module.util.locator,\n    module.reader.browser\n  ],\n\n  function (locator, browser) {\n    var create = function (file) {\n      var script = locator.locate();\n      return function (done) {\n        browser.read(script, file, done);\n      };\n    };\n\n    return {\n      create: create\n    };\n  }\n);module.bootstrap.deferred = def(\n  [\n    ephox.bolt.kernel.fp.array\n  ],\n\n  function (ar) {\n    var deferred = [];\n\n    var require = function (ids, fn) {\n      var r = function (real) {\n        real(ids, fn);\n      };\n      deferred.push(r);\n    };\n\n    var configured = function (require) {\n      ar.each(deferred, function (action) {\n        action(require);\n      });\n      deferred = [];\n    };\n\n    return {\n      require: require,\n      configured: configured\n    };\n  }\n);\nmodule.bootstrap.main = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.runtime\n  ],\n\n  function (config, deferred, runtime) {\n    var main = function (id, args, configids, callback) {\n      runtime.require(configids || [], function () {\n        callback && callback.apply(null, arguments);\n        runtime.require([ id ], function (module) {\n          module.apply(null, args || []);\n        });\n      });\n    };\n\n    return {\n      main: main\n    };\n  }\n);\nmodule.bootstrap.install = def(\n  [\n    ephox.bolt.kernel.api.config,\n    module.bootstrap.deferred,\n    module.bootstrap.main,\n    module.runtime,\n    module.error.error\n  ],\n\n  function (config, deferred, main, runtime, error) {\n    var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };\n\n    var install = function (reader, builtins, load, loadscript) {\n      runtime.define = notready;\n      runtime.demand = notready;\n      runtime.require = deferred.require;\n      runtime.main = main.main;\n      runtime.load = load;\n      runtime.loadscript = loadscript;\n\n      reader(function (configuration) {\n        var bolt = config.configure(configuration, builtins, error.die);\n        runtime.define = bolt.define;\n        runtime.require = bolt.require;\n        runtime.demand = bolt.demand;\n\n        deferred.configured(runtime.require);\n      });\n    };\n\n    return {\n      install: install\n    };\n  }\n);\n\n})(Function('return this')());\n(function () {\n  var install = ephox.bolt.module.bootstrap.install;\n  var builtins = ephox.bolt.module.config.builtins.browser;\n  var transport = ephox.bolt.loader.transporter.xhr.request;\n  var script = ephox.bolt.loader.api.scripttag.load;\n  var direct = ephox.bolt.module.reader.direct;\n  var mapper = ephox.bolt.module.config.mapper;\n  var locator = ephox.bolt.module.util.locator;\n  var source = ephox.bolt.module.config.specs.source(locator.locate());\n  var reader = direct.create({\n    sources: [\n      source(\"bolt\", \"tinymce/inlite/Theme\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.ThemeManager\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.util.Delay\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/ui/Panel\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/ui/Buttons\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/SkinLoader\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/SelectionMatcher\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/ElementMatcher\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/Matcher\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/alien/Arr\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/PredicateId\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.util.Tools\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.ui.Factory\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.DOM\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/ui/Toolbar\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/ui/Forms\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/Measure\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/Layout\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/file/Conversions\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/file/Picker\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/Actions\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.EditorManager\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.util.Promise\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/alien/Uuid\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/alien/Unlink\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/UrlType\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.geom.Rect\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/core/Convert\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"tinymce/inlite/alien/Bookmark\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.dom.TreeWalker\", \".\", mapper.constant(\"theme\")),\n      source(\"bolt\", \"global!tinymce.dom.RangeUtils\", \".\", mapper.constant(\"theme\"))\n    ]\n  });\n  install.install(reader, builtins, transport, script);\n})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/scratch/compile/theme.js",
    "content": "/*jsc\n[\"tinymce/inlite/Theme\",\"global!tinymce.ThemeManager\",\"global!tinymce.util.Delay\",\"tinymce/inlite/ui/Panel\",\"tinymce/inlite/ui/Buttons\",\"tinymce/inlite/core/SkinLoader\",\"tinymce/inlite/core/SelectionMatcher\",\"tinymce/inlite/core/ElementMatcher\",\"tinymce/inlite/core/Matcher\",\"tinymce/inlite/alien/Arr\",\"tinymce/inlite/core/PredicateId\",\"global!tinymce.util.Tools\",\"global!tinymce.ui.Factory\",\"global!tinymce.DOM\",\"tinymce/inlite/ui/Toolbar\",\"tinymce/inlite/ui/Forms\",\"tinymce/inlite/core/Measure\",\"tinymce/inlite/core/Layout\",\"tinymce/inlite/file/Conversions\",\"tinymce/inlite/file/Picker\",\"tinymce/inlite/core/Actions\",\"global!tinymce.EditorManager\",\"global!tinymce.util.Promise\",\"tinymce/inlite/alien/Uuid\",\"tinymce/inlite/alien/Unlink\",\"tinymce/inlite/core/UrlType\",\"global!tinymce.geom.Rect\",\"tinymce/inlite/core/Convert\",\"tinymce/inlite/alien/Bookmark\",\"global!tinymce.dom.TreeWalker\",\"global!tinymce.dom.RangeUtils\"]\njsc*/\ndefineGlobal(\"global!tinymce.ThemeManager\", tinymce.ThemeManager);\ndefineGlobal(\"global!tinymce.util.Delay\", tinymce.util.Delay);\ndefineGlobal(\"global!tinymce.util.Tools\", tinymce.util.Tools);\ndefineGlobal(\"global!tinymce.ui.Factory\", tinymce.ui.Factory);\ndefineGlobal(\"global!tinymce.DOM\", tinymce.DOM);\n/**\n * Toolbar.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Toolbar', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory'\n], function (Tools, Factory) {\n\tvar setActiveItem = function (item, name) {\n\t\treturn function(state, args) {\n\t\t\tvar nodeName, i = args.parents.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tnodeName = args.parents[i].nodeName;\n\t\t\t\tif (nodeName == 'OL' || nodeName == 'UL') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.active(state && nodeName == name);\n\t\t};\n\t};\n\n\tvar getSelectorStateResult = function (itemName, item) {\n\t\tvar result = function (selector, handler) {\n\t\t\treturn {\n\t\t\t\tselector: selector,\n\t\t\t\thandler: handler\n\t\t\t};\n\t\t};\n\n\t\tvar activeHandler = function(state) {\n\t\t\titem.active(state);\n\t\t};\n\n\t\tvar disabledHandler = function (state) {\n\t\t\titem.disabled(state);\n\t\t};\n\n\t\tif (itemName == 'bullist') {\n\t\t\treturn result('ul > li', setActiveItem(item, 'UL'));\n\t\t}\n\n\t\tif (itemName == 'numlist') {\n\t\t\treturn result('ol > li', setActiveItem(item, 'OL'));\n\t\t}\n\n\t\tif (item.settings.stateSelector) {\n\t\t\treturn result(item.settings.stateSelector, activeHandler);\n\t\t}\n\n\t\tif (item.settings.disabledStateSelector) {\n\t\t\treturn result(item.settings.disabledStateSelector, disabledHandler);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar bindSelectorChanged = function (editor, itemName, item) {\n\t\treturn function () {\n\t\t\tvar result = getSelectorStateResult(itemName, item);\n\t\t\tif (result !== null) {\n\t\t\t\teditor.selection.selectorChanged(result.selector, result.handler);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar create = function (editor, name, items) {\n\t\tvar toolbarItems = [], buttonGroup;\n\n\t\tif (!items) {\n\t\t\treturn;\n\t\t}\n\n\t\tTools.each(items.split(/[ ,]/), function(item) {\n\t\t\tvar itemName;\n\n\t\t\tif (item == '|') {\n\t\t\t\tbuttonGroup = null;\n\t\t\t} else {\n\t\t\t\tif (Factory.has(item)) {\n\t\t\t\t\titem = {type: item};\n\t\t\t\t\ttoolbarItems.push(item);\n\t\t\t\t\tbuttonGroup = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!buttonGroup) {\n\t\t\t\t\t\tbuttonGroup = {type: 'buttongroup', items: []};\n\t\t\t\t\t\ttoolbarItems.push(buttonGroup);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (editor.buttons[item]) {\n\t\t\t\t\t\titemName = item;\n\t\t\t\t\t\titem = editor.buttons[itemName];\n\n\t\t\t\t\t\tif (typeof item == 'function') {\n\t\t\t\t\t\t\titem = item();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.type = item.type || 'button';\n\n\t\t\t\t\t\titem = Factory.create(item);\n\t\t\t\t\t\titem.on('postRender', bindSelectorChanged(editor, itemName, item));\n\t\t\t\t\t\tbuttonGroup.items.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn Factory.create({\n\t\t\ttype: 'toolbar',\n\t\t\tlayout: 'flow',\n\t\t\tname: name,\n\t\t\titems: toolbarItems\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create\n\t};\n});\n\ndefineGlobal(\"global!tinymce.util.Promise\", tinymce.util.Promise);\n/**\n * Uuid.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Generates unique ids this is the same as in core but since\n * it's not exposed as a global we can't access it.\n */\ndefine(\"tinymce/inlite/alien/Uuid\", [\n], function() {\n\tvar count = 0;\n\n\tvar seed = function () {\n\t\tvar rnd = function () {\n\t\t\treturn Math.round(Math.random() * 0xFFFFFFFF).toString(36);\n\t\t};\n\n\t\treturn 's' + Date.now().toString(36) + rnd() + rnd() + rnd();\n\t};\n\n\tvar uuid = function (prefix) {\n\t\treturn prefix + (count++) + seed();\n\t};\n\n\treturn {\n\t\tuuid: uuid\n\t};\n});\n\n/**\n * Bookmark.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Bookmark', [\n], function () {\n\t/**\n\t * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with\n\t * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans\n\t * added to them since they can be restored after a dom operation.\n\t *\n\t * So this: <p><b>|</b><b>|</b></p>\n\t * becomes: <p><b><span data-mce-type=\"bookmark\">|</span></b><b data-mce-type=\"bookmark\">|</span></b></p>\n\t *\n\t * @param  {DOMRange} rng DOM Range to get bookmark on.\n\t * @return {Object} Bookmark object.\n\t */\n\tvar create = function (dom, rng) {\n\t\tvar bookmark = {};\n\n\t\tfunction setupEndPoint(start) {\n\t\t\tvar offsetNode, container, offset;\n\n\t\t\tcontainer = rng[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = rng[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffsetNode = dom.create('span', {'data-mce-type': 'bookmark'});\n\n\t\t\t\tif (container.hasChildNodes()) {\n\t\t\t\t\toffset = Math.min(offset, container.childNodes.length - 1);\n\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tcontainer.insertBefore(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.insertAfter(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(offsetNode);\n\t\t\t\t}\n\n\t\t\t\tcontainer = offsetNode;\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\tsetupEndPoint(true);\n\n\t\tif (!rng.collapsed) {\n\t\t\tsetupEndPoint();\n\t\t}\n\n\t\treturn bookmark;\n\t};\n\n\t/**\n\t * Moves the selection to the current bookmark and removes any selection container wrappers.\n\t *\n\t * @param {Object} bookmark Bookmark object to move selection to.\n\t */\n\tvar resolve = function (dom, bookmark) {\n\t\tfunction restoreEndPoint(start) {\n\t\t\tvar container, offset, node;\n\n\t\t\tfunction nodeIndex(container) {\n\t\t\t\tvar node = container.parentNode.firstChild, idx = 0;\n\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (node == container) {\n\t\t\t\t\t\treturn idx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip data-mce-type=bookmark nodes\n\t\t\t\t\tif (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {\n\t\t\t\t\t\tidx++;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcontainer = node = bookmark[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = bookmark[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffset = nodeIndex(container);\n\t\t\t\tcontainer = container.parentNode;\n\t\t\t\tdom.remove(node);\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\trestoreEndPoint(true);\n\t\trestoreEndPoint();\n\n\t\tvar rng = dom.createRng();\n\n\t\trng.setStart(bookmark.startContainer, bookmark.startOffset);\n\n\t\tif (bookmark.endContainer) {\n\t\t\trng.setEnd(bookmark.endContainer, bookmark.endOffset);\n\t\t}\n\n\t\treturn rng;\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tresolve: resolve\n\t};\n});\n\n\n\ndefineGlobal(\"global!tinymce.dom.TreeWalker\", tinymce.dom.TreeWalker);\ndefineGlobal(\"global!tinymce.dom.RangeUtils\", tinymce.dom.RangeUtils);\n/**\n * Unlink.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Unlink implementation that doesn't leave partial links for example it would produce:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]de\n * instead of:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]<a href=\"x\">d</a>e\n */\ndefine(\"tinymce/inlite/alien/Unlink\", [\n\t'tinymce/inlite/alien/Bookmark',\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.dom.TreeWalker',\n\t'global!tinymce.dom.RangeUtils'\n], function (Bookmark, Tools, TreeWalker, RangeUtils) {\n\tvar getSelectedElements = function (rootElm, startNode, endNode) {\n\t\tvar walker, node, elms = [];\n\n\t\twalker = new TreeWalker(startNode, rootElm);\n\t\tfor (node = startNode; node; node = walker.next()) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\telms.push(node);\n\t\t\t}\n\n\t\t\tif (node === endNode) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn elms;\n\t};\n\n\tvar unwrapElements = function (editor, elms) {\n\t\tvar bookmark, dom, selection;\n\n\t\tdom = editor.dom;\n\t\tselection = editor.selection;\n\t\tbookmark = Bookmark.create(dom, selection.getRng());\n\n\t\tTools.each(elms, function (elm) {\n\t\t\teditor.dom.remove(elm, true);\n\t\t});\n\n\t\tselection.setRng(Bookmark.resolve(dom, bookmark));\n\t};\n\n\tvar isLink = function (elm) {\n\t\treturn elm.nodeName === 'A' && elm.hasAttribute('href');\n\t};\n\n\tvar getParentAnchorOrSelf = function (dom, elm) {\n\t\tvar anchorElm = dom.getParent(elm, isLink);\n\t\treturn anchorElm ? anchorElm : elm;\n\t};\n\n\tvar getSelectedAnchors = function (editor) {\n\t\tvar startElm, endElm, rootElm, anchorElms, selection, dom, rng;\n\n\t\tselection = editor.selection;\n\t\tdom = editor.dom;\n\t\trng = selection.getRng();\n\t\tstartElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset));\n\t\tendElm = RangeUtils.getNode(rng.endContainer, rng.endOffset);\n\t\trootElm = editor.getBody();\n\t\tanchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink);\n\n\t\treturn anchorElms;\n\t};\n\n\tvar unlinkSelection = function (editor) {\n\t\tunwrapElements(editor, getSelectedAnchors(editor));\n\t};\n\n\treturn {\n\t\tunlinkSelection: unlinkSelection\n\t};\n});\n\n/**\n * Actions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Actions', [\n\t'tinymce/inlite/alien/Uuid',\n\t'tinymce/inlite/alien/Unlink'\n], function (Uuid, Unlink) {\n\tvar createTableHtml = function (cols, rows) {\n\t\tvar x, y, html;\n\n\t\thtml = '<table data-mce-id=\"mce\" style=\"width: 100%\">';\n\t\thtml += '<tbody>';\n\n\t\tfor (y = 0; y < rows; y++) {\n\t\t\thtml += '<tr>';\n\n\t\t\tfor (x = 0; x < cols; x++) {\n\t\t\t\thtml += '<td><br></td>';\n\t\t\t}\n\n\t\t\thtml += '</tr>';\n\t\t}\n\n\t\thtml += '</tbody>';\n\t\thtml += '</table>';\n\n\t\treturn html;\n\t};\n\n\tvar getInsertedElement = function (editor) {\n\t\tvar elms = editor.dom.select('*[data-mce-id]');\n\t\treturn elms[0];\n\t};\n\n\tvar insertTable = function (editor, cols, rows) {\n\t\teditor.undoManager.transact(function () {\n\t\t\tvar tableElm, cellElm;\n\n\t\t\teditor.insertContent(createTableHtml(cols, rows));\n\n\t\t\ttableElm = getInsertedElement(editor);\n\t\t\ttableElm.removeAttribute('data-mce-id');\n\t\t\tcellElm = editor.dom.select('td,th', tableElm);\n\t\t\teditor.selection.setCursorLocation(cellElm[0], 0);\n\t\t});\n\t};\n\n\tvar formatBlock = function (editor, formatName) {\n\t\teditor.execCommand('FormatBlock', false, formatName);\n\t};\n\n\tvar insertBlob = function (editor, base64, blob) {\n\t\tvar blobCache, blobInfo;\n\n\t\tblobCache = editor.editorUpload.blobCache;\n\t\tblobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64);\n\t\tblobCache.add(blobInfo);\n\n\t\teditor.insertContent(editor.dom.createHTML('img', {src: blobInfo.blobUri()}));\n\t};\n\n\tvar collapseSelectionToEnd = function (editor) {\n\t\teditor.selection.collapse(false);\n\t};\n\n\tvar unlink = function (editor) {\n\t\teditor.focus();\n\t\tUnlink.unlinkSelection(editor);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar changeHref = function (editor, elm, url) {\n\t\teditor.focus();\n\t\teditor.dom.setAttrib(elm, 'href', url);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar insertLink = function (editor, url) {\n\t\teditor.execCommand('mceInsertLink', false, {href: url});\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar updateOrInsertLink = function (editor, url) {\n\t\tvar elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\telm ? changeHref(editor, elm, url) : insertLink(editor, url);\n\t};\n\n\tvar createLink = function (editor, url) {\n\t\turl.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);\n\t};\n\n\treturn {\n\t\tinsertTable: insertTable,\n\t\tformatBlock: formatBlock,\n\t\tinsertBlob: insertBlob,\n\t\tcreateLink: createLink,\n\t\tunlink: unlink\n\t};\n});\n\n/**\n * UrlType.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/UrlType', [\n], function () {\n\tvar isDomainLike = function (href) {\n\t\treturn /^www\\.|\\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());\n\t};\n\n\tvar isAbsolute = function (href) {\n\t\treturn /^https?:\\/\\//.test(href.trim());\n\t};\n\n\treturn {\n\t\tisDomainLike: isDomainLike,\n\t\tisAbsolute: isAbsolute\n\t};\n});\n\n\n\n/**\n * Forms.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Forms', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.util.Promise',\n\t'tinymce/inlite/core/Actions',\n\t'tinymce/inlite/core/UrlType'\n], function (Tools, Factory, Promise, Actions, UrlType) {\n\tvar focusFirstTextBox = function (form) {\n\t\tform.find('textbox').eq(0).each(function (ctrl) {\n\t\t\tctrl.focus();\n\t\t});\n\t};\n\n\tvar createForm = function (name, spec) {\n\t\tvar form = Factory.create(\n\t\t\tTools.extend({\n\t\t\t\ttype: 'form',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'row',\n\t\t\t\tpadding: 5,\n\t\t\t\tname: name,\n\t\t\t\tspacing: 3\n\t\t\t}, spec)\n\t\t);\n\n\t\tform.on('show', function () {\n\t\t\tfocusFirstTextBox(form);\n\t\t});\n\n\t\treturn form;\n\t};\n\n\tvar toggleVisibility = function (ctrl, state) {\n\t\treturn state ? ctrl.show() : ctrl.hide();\n\t};\n\n\tvar askAboutPrefix = function (editor, href) {\n\t\treturn new Promise(function (resolve) {\n\t\t\teditor.windowManager.confirm(\n\t\t\t\t'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',\n\t\t\t\tfunction (result) {\n\t\t\t\t\tvar output = result === true ? 'http://' + href : href;\n\t\t\t\t\tresolve(output);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tvar convertLinkToAbsolute = function (editor, href) {\n\t\treturn !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);\n\t};\n\n\tvar createQuickLinkForm = function (editor, hide) {\n\t\tvar unlink = function () {\n\t\t\teditor.focus();\n\t\t\tActions.unlink(editor);\n\t\t\thide();\n\t\t};\n\n\t\treturn createForm('quicklink', {\n\t\t\titems: [\n\t\t\t\t{type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link'},\n\t\t\t\t{type: 'textbox', name: 'linkurl', placeholder: 'Paste or type a link'},\n\t\t\t\t{type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit'}\n\t\t\t],\n\t\t\tonshow: function () {\n\t\t\t\tvar elm, linkurl = '';\n\n\t\t\t\telm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\t\t\tif (elm) {\n\t\t\t\t\tlinkurl = editor.dom.getAttrib(elm, 'href');\n\t\t\t\t}\n\n\t\t\t\tthis.fromJSON({\n\t\t\t\t\tlinkurl: linkurl\n\t\t\t\t});\n\n\t\t\t\ttoggleVisibility(this.find('#unlink'), elm);\n\t\t\t},\n\t\t\tonsubmit: function (e) {\n\t\t\t\tconvertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {\n\t\t\t\t\tActions.createLink(editor, url);\n\t\t\t\t\thide();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tcreateQuickLinkForm: createQuickLinkForm\n\t};\n});\n\ndefineGlobal(\"global!tinymce.geom.Rect\", tinymce.geom.Rect);\n/**\n * Convert.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Convert', [\n], function () {\n\tvar fromClientRect = function (clientRect) {\n\t\treturn {\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: clientRect.width,\n\t\t\th: clientRect.height\n\t\t};\n\t};\n\n\tvar toClientRect = function (geomRect) {\n\t\treturn {\n\t\t\tleft: geomRect.x,\n\t\t\ttop: geomRect.y,\n\t\t\twidth: geomRect.w,\n\t\t\theight: geomRect.h,\n\t\t\tright: geomRect.x + geomRect.w,\n\t\t\tbottom: geomRect.y + geomRect.h\n\t\t};\n\t};\n\n\treturn {\n\t\tfromClientRect: fromClientRect,\n\t\ttoClientRect: toClientRect\n\t};\n});\n\n/**\n * Measure.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Measure', [\n\t'global!tinymce.DOM',\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (DOM, Rect, Convert) {\n\tvar toAbsolute = function (rect) {\n\t\tvar vp = DOM.getViewPort();\n\n\t\treturn {\n\t\t\tx: rect.x + vp.x,\n\t\t\ty: rect.y + vp.y,\n\t\t\tw: rect.w,\n\t\t\th: rect.h\n\t\t};\n\t};\n\n\tvar measureElement = function (elm) {\n\t\tvar clientRect = elm.getBoundingClientRect();\n\n\t\treturn toAbsolute({\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: Math.max(elm.clientWidth, elm.offsetWidth),\n\t\t\th: Math.max(elm.clientHeight, elm.offsetHeight)\n\t\t});\n\t};\n\n\tvar getElementRect = function (editor, elm) {\n\t\treturn measureElement(elm);\n\t};\n\n\tvar getPageAreaRect = function (editor) {\n\t\treturn measureElement(editor.getElement().ownerDocument.body);\n\t};\n\n\tvar getContentAreaRect = function (editor) {\n\t\treturn measureElement(editor.getContentAreaContainer() || editor.getBody());\n\t};\n\n\tvar getSelectionRect = function (editor) {\n\t\tvar clientRect = editor.selection.getBoundingClientRect();\n\t\treturn clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null;\n\t};\n\n\treturn {\n\t\tgetElementRect: getElementRect,\n\t\tgetPageAreaRect: getPageAreaRect,\n\t\tgetContentAreaRect: getContentAreaRect,\n\t\tgetSelectionRect: getSelectionRect\n\t};\n});\n\n/**\n * Layout.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Layout', [\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (Rect, Convert) {\n\tvar result = function (rect, position) {\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tposition: position\n\t\t};\n\t};\n\n\tvar moveTo = function (rect, toRect) {\n\t\treturn {x: toRect.x, y: toRect.y, w: rect.w, h: rect.h};\n\t};\n\n\tvar calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {\n\t\tvar relPos, relRect, outputPanelRect;\n\n\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions1);\n\t\ttargetRect = Rect.clamp(targetRect, contentAreaRect);\n\n\t\tif (relPos) {\n\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\ttargetRect = Rect.intersect(contentAreaRect, targetRect);\n\t\tif (targetRect) {\n\t\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions2);\n\t\t\tif (relPos) {\n\t\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\t\treturn result(outputPanelRect, relPos);\n\t\t\t}\n\n\t\t\toutputPanelRect = moveTo(panelRect, targetRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar calcInsert = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['cr-cl', 'cl-cr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar calc = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {\n\t\tvar userConstrainedPanelRect;\n\n\t\tif (typeof handler === 'function') {\n\t\t\tuserConstrainedPanelRect = handler({\n\t\t\t\telementRect: Convert.toClientRect(targetRect),\n\t\t\t\tcontentAreaRect: Convert.toClientRect(contentAreaRect),\n\t\t\t\tpanelRect: Convert.toClientRect(panelRect)\n\t\t\t});\n\n\t\t\treturn Convert.fromClientRect(userConstrainedPanelRect);\n\t\t}\n\n\t\treturn panelRect;\n\t};\n\n\treturn {\n\t\tcalcInsert: calcInsert,\n\t\tcalc: calc,\n\t\tuserConstrain: userConstrain\n\t};\n});\n\n/**\n * Panel.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Panel', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.DOM',\n\t'tinymce/inlite/ui/Toolbar',\n\t'tinymce/inlite/ui/Forms',\n\t'tinymce/inlite/core/Measure',\n\t'tinymce/inlite/core/Layout'\n], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {\n\treturn function () {\n\t\tvar DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';\n\t\tvar DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';\n\t\tvar panel, currentRect;\n\n\t\tvar createToolbars = function (editor, toolbars) {\n\t\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\t\treturn Toolbar.create(editor, toolbar.id, toolbar.items);\n\t\t\t});\n\t\t};\n\n\t\tvar getTextSelectionToolbarItems = function (settings) {\n\t\t\tvar value = settings.selection_toolbar;\n\t\t\treturn value ? value : DEFAULT_TEXT_SELECTION_ITEMS;\n\t\t};\n\n\t\tvar getInsertToolbarItems = function (settings) {\n\t\t\tvar value = settings.insert_toolbar;\n\t\t\treturn value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;\n\t\t};\n\n\t\tvar create = function (editor, toolbars) {\n\t\t\tvar items, settings = editor.settings;\n\n\t\t\titems = createToolbars(editor, toolbars);\n\t\t\titems = items.concat([\n\t\t\t\tToolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),\n\t\t\t\tToolbar.create(editor, 'insert', getInsertToolbarItems(settings)),\n\t\t\t\tForms.createQuickLinkForm(editor, hide)\n\t\t\t]);\n\n\t\t\treturn Factory.create({\n\t\t\t\ttype: 'floatpanel',\n\t\t\t\trole: 'dialog',\n\t\t\t\tclasses: 'tinymce tinymce-inline arrow',\n\t\t\t\tariaLabel: 'Inline toolbar',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'column',\n\t\t\t\talign: 'stretch',\n\t\t\t\tautohide: false,\n\t\t\t\tautofix: true,\n\t\t\t\tfixed: true,\n\t\t\t\tborder: 1,\n\t\t\t\titems: items,\n\t\t\t\toncancel: function() {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvar showPanel = function (panel) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.show();\n\t\t\t}\n\t\t};\n\n\t\tvar movePanelTo = function (panel, pos) {\n\t\t\tpanel.moveTo(pos.x, pos.y);\n\t\t};\n\n\t\tvar togglePositionClass = function (panel, relPos) {\n\t\t\trelPos = relPos ? relPos.substr(0, 2) : '';\n\n\t\t\tTools.each({\n\t\t\t\tt: 'down',\n\t\t\t\tb: 'up',\n\t\t\t\tc: 'center'\n\t\t\t}, function(cls, pos) {\n\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));\n\t\t\t});\n\n\t\t\tif (relPos === 'cr') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', false);\n\t\t\t} else if (relPos === 'cl') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', true);\n\t\t\t} else {\n\t\t\t\tTools.each({\n\t\t\t\t\tl: 'left',\n\t\t\t\t\tr: 'right'\n\t\t\t\t}, function(cls, pos) {\n\t\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar showToolbar = function (panel, id) {\n\t\t\tvar toolbars = panel.items().filter('#' + id);\n\n\t\t\tif (toolbars.length > 0) {\n\t\t\t\ttoolbars[0].show();\n\t\t\t\tpanel.reflow();\n\t\t\t}\n\t\t};\n\n\t\tvar showPanelAt = function (panel, id, editor, targetRect) {\n\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\tshowPanel(panel);\n\t\t\tpanel.items().hide();\n\t\t\tshowToolbar(panel, id);\n\n\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\tif (id === 'insert') {\n\t\t\t\tresult = Layout.calcInsert(targetRect, contentAreaRect, panelRect);\n\t\t\t} else {\n\t\t\t\tresult = Layout.calc(targetRect, contentAreaRect, panelRect);\n\t\t\t}\n\n\t\t\tif (result) {\n\t\t\t\tpanelRect = result.rect;\n\t\t\t\tcurrentRect = targetRect;\n\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));\n\n\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t} else {\n\t\t\t\thide(panel);\n\t\t\t}\n\t\t};\n\n\t\tvar hasFormVisible = function () {\n\t\t\treturn panel.items().filter('form:visible').length > 0;\n\t\t};\n\n\t\tvar showForm = function (editor, id) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\t\tshowPanel(panel);\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\t\tresult = Layout.calc(currentRect, contentAreaRect, panelRect);\n\n\t\t\t\tif (result) {\n\t\t\t\t\tpanelRect = result.rect;\n\t\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));\n\n\t\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar show = function (editor, id, targetRect, toolbars) {\n\t\t\tif (!panel) {\n\t\t\t\tpanel = create(editor, toolbars);\n\t\t\t\tpanel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);\n\t\t\t\teditor.nodeChanged();\n\t\t\t}\n\n\t\t\tshowPanelAt(panel, id, editor, targetRect);\n\t\t};\n\n\t\tvar hide = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\tvar focus = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.find('toolbar:visible').eq(0).each(function (item) {\n\t\t\t\t\titem.focus(true);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar remove = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.remove();\n\t\t\t\tpanel = null;\n\t\t\t}\n\t\t};\n\n\t\tvar inForm = function () {\n\t\t\treturn panel && panel.visible() && hasFormVisible();\n\t\t};\n\n\t\treturn {\n\t\t\tshow: show,\n\t\t\tshowForm: showForm,\n\t\t\tinForm: inForm,\n\t\t\thide: hide,\n\t\t\tfocus: focus,\n\t\t\tremove: remove\n\t\t};\n\t};\n});\n\n/**\n * Conversions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Conversions', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar blobToBase64 = function (blob) {\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar reader = new FileReader();\n\n\t\t\treader.onloadend = function() {\n\t\t\t\tresolve(reader.result.split(',')[1]);\n\t\t\t};\n\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t};\n\n\treturn {\n\t\tblobToBase64: blobToBase64\n\t};\n});\n\n\n\n/**\n * Picker.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Picker', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar pickFile = function () {\n\t\treturn new Promise(function (resolve) {\n\t\t\tvar fileInput;\n\n\t\t\tfileInput = document.createElement(\"input\");\n\t\t\tfileInput.type = \"file\";\n\t\t\tfileInput.style.position = 'fixed';\n\t\t\tfileInput.style.left = 0;\n\t\t\tfileInput.style.top = 0;\n\t\t\tfileInput.style.opacity = 0.001;\n\t\t\tdocument.body.appendChild(fileInput);\n\n\t\t\tfileInput.onchange = function(e) {\n\t\t\t\tresolve(Array.prototype.slice.call(e.target.files));\n\t\t\t};\n\n\t\t\tfileInput.click();\n\t\t\tfileInput.parentNode.removeChild(fileInput);\n\t\t});\n\t};\n\n\treturn {\n\t\tpickFile: pickFile\n\t};\n});\n\n\n\n/**\n * Buttons.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Buttons', [\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/file/Conversions',\n\t'tinymce/inlite/file/Picker',\n\t'tinymce/inlite/core/Actions'\n], function (Panel, Conversions, Picker, Actions) {\n\tvar addHeaderButtons = function (editor) {\n\t\tvar formatBlock = function (name) {\n\t\t\treturn function () {\n\t\t\t\tActions.formatBlock(editor, name);\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 1; i < 6; i++) {\n\t\t\tvar name = 'h' + i;\n\n\t\t\teditor.addButton(name, {\n\t\t\t\ttext: name.toUpperCase(),\n\t\t\t\ttooltip: 'Heading ' + i,\n\t\t\t\tstateSelector: name,\n\t\t\t\tonclick: formatBlock(name),\n\t\t\t\tonPostRender: function () {\n\t\t\t\t\t// TODO: Remove this hack that produces bold H1-H6 when we have proper icons\n\t\t\t\t\tvar span = this.getEl().firstChild.firstChild;\n\t\t\t\t\tspan.style.fontWeight = 'bold';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tvar addToEditor = function (editor, panel) {\n\t\teditor.addButton('quicklink', {\n\t\t\ticon: 'link',\n\t\t\ttooltip: 'Insert/Edit link',\n\t\t\tstateSelector: 'a[href]',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.showForm(editor, 'quicklink');\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quickimage', {\n\t\t\ticon: 'image',\n\t\t\ttooltip: 'Insert image',\n\t\t\tonclick: function () {\n\t\t\t\tPicker.pickFile().then(function (files) {\n\t\t\t\t\tvar blob = files[0];\n\n\t\t\t\t\tConversions.blobToBase64(blob).then(function (base64) {\n\t\t\t\t\t\tActions.insertBlob(editor, base64, blob);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quicktable', {\n\t\t\ticon: 'table',\n\t\t\ttooltip: 'Insert table',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.hide();\n\t\t\t\tActions.insertTable(editor, 2, 2);\n\t\t\t}\n\t\t});\n\n\t\taddHeaderButtons(editor);\n\t};\n\n\treturn {\n\t\taddToEditor: addToEditor\n\t};\n});\n\ndefineGlobal(\"global!tinymce.EditorManager\", tinymce.EditorManager);\n/**\n * SkinLoader.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SkinLoader', [\n\t'global!tinymce.EditorManager',\n\t'global!tinymce.DOM'\n], function (EditorManager, DOM) {\n\tvar fireSkinLoaded = function (editor, callback) {\n\t\tvar done = function () {\n\t\t\teditor.fire('SkinLoaded');\n\t\t\tcallback();\n\t\t};\n\n\t\tif (editor.initialized) {\n\t\t\tdone();\n\t\t} else {\n\t\t\teditor.on('init', done);\n\t\t}\n\t};\n\n\tvar load = function (editor, skin, callback) {\n\t\tvar baseUrl = EditorManager.baseURL;\n\t\tvar skinUrl = baseUrl + '/skins/' + skin;\n\n\t\tvar done = function () {\n\t\t\tfireSkinLoaded(editor, callback);\n\t\t};\n\n\t\tDOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);\n\t\teditor.contentCSS.push(skinUrl + '/content.inline.min.css');\n\t};\n\n\treturn {\n\t\tload: load\n\t};\n});\n\n\n\n/**\n * Matcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Matcher', [\n], function () {\n\t// result :: String, Rect -> Matcher.result\n\tvar result = function (id, rect) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\trect: rect\n\t\t};\n\t};\n\n\t// match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null\n\tvar match = function (editor, matchers) {\n\t\tfor (var i = 0; i < matchers.length; i++) {\n\t\t\tvar f = matchers[i];\n\t\t\tvar result = f(editor);\n\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\treturn {\n\t\tmatch: match,\n\t\tresult: result\n\t};\n});\n\n/**\n * SelectionMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SelectionMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// textSelection :: String -> (Editor -> Matcher.result | Null)\n\tvar textSelection = function (id) {\n\t\treturn function (editor) {\n\t\t\tif (!editor.selection.isCollapsed()) {\n\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)\n\tvar emptyTextBlock = function (elements, id) {\n\t\treturn function (editor) {\n\t\t\tvar i, textBlockElementsMap = editor.schema.getTextBlockElements();\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName === 'TABLE') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName in textBlockElementsMap) {\n\t\t\t\t\tif (editor.dom.isEmpty(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\ttextSelection: textSelection,\n\t\temptyTextBlock: emptyTextBlock\n\t};\n});\n\n/**\n * ElementMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/ElementMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar element = function (element, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < predicateIds.length; i++) {\n\t\t\t\tif (predicateIds[i].predicate(element)) {\n\t\t\t\t\treturn Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar parent = function (elements, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tfor (var x = 0; x < predicateIds.length; x++) {\n\t\t\t\t\tif (predicateIds[x].predicate(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\telement: element,\n\t\tparent: parent\n\t};\n});\n\n/**\n * Arr.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Arr', [\n], function () {\n\tvar flatten = function (arr) {\n\t\treturn arr.reduce(function (results, item) {\n\t\t\treturn Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);\n\t\t}, []);\n\t};\n\n\treturn {\n\t\tflatten: flatten\n\t};\n});\n\n/**\n * PredicateId.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/PredicateId', [\n\t'global!tinymce.util.Tools'\n], function (Tools) {\n\tvar create = function (id, predicate) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tpredicate: predicate\n\t\t};\n\t};\n\n\t// fromContextToolbars :: [ContextToolbar] -> [PredicateId]\n\tvar fromContextToolbars = function (toolbars) {\n\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\treturn create(toolbar.id, toolbar.predicate);\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tfromContextToolbars: fromContextToolbars\n\t};\n});\n\n/**\n * Theme.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/Theme', [\n\t'global!tinymce.ThemeManager',\n\t'global!tinymce.util.Delay',\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/ui/Buttons',\n\t'tinymce/inlite/core/SkinLoader',\n\t'tinymce/inlite/core/SelectionMatcher',\n\t'tinymce/inlite/core/ElementMatcher',\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/alien/Arr',\n\t'tinymce/inlite/core/PredicateId'\n], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, PredicateId) {\n\tvar getSelectionElements = function (editor) {\n\t\tvar node = editor.selection.getNode();\n\t\tvar elms = editor.dom.getParents(node);\n\t\treturn elms;\n\t};\n\n\tvar createToolbar = function (editor, selector, id, items) {\n\t\tvar selectorPredicate = function (elm) {\n\t\t\treturn editor.dom.is(elm, selector);\n\t\t};\n\n\t\treturn {\n\t\t\tpredicate: selectorPredicate,\n\t\t\tid: id,\n\t\t\titems: items\n\t\t};\n\t};\n\n\tvar getToolbars = function (editor) {\n\t\tvar contextToolbars = editor.contextToolbars;\n\n\t\treturn Arr.flatten([\n\t\t\tcontextToolbars ? contextToolbars : [],\n\t\t\tcreateToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')\n\t\t]);\n\t};\n\n\tvar findMatchResult = function (editor, toolbars) {\n\t\tvar result, elements, contextToolbarsPredicateIds;\n\n\t\telements = getSelectionElements(editor);\n\t\tcontextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars);\n\n\t\tresult = Matcher.match(editor, [\n\t\t\tElementMatcher.element(elements[0], contextToolbarsPredicateIds),\n\t\t\tSelectionMatcher.textSelection('text'),\n\t\t\tSelectionMatcher.emptyTextBlock(elements, 'insert'),\n\t\t\tElementMatcher.parent(elements, contextToolbarsPredicateIds)\n\t\t]);\n\n\t\treturn result && result.rect ? result : null;\n\t};\n\n\tvar togglePanel = function (editor, panel) {\n\t\tvar toggle = function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = findMatchResult(editor, toolbars);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t} else {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\treturn function () {\n\t\t\tif (!editor.removed) {\n\t\t\t\ttoggle();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar ignoreWhenFormIsVisible = function (panel, f) {\n\t\treturn function () {\n\t\t\tif (!panel.inForm()) {\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar bindContextualToolbarsEvents = function (editor, panel) {\n\t\tvar throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);\n\t\tvar throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0);\n\n\t\teditor.on('blur hide ObjectResizeStart', panel.hide);\n\t\teditor.on('click', throttledTogglePanel);\n\t\teditor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);\n\t\teditor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel);\n\t\teditor.on('remove', panel.remove);\n\n\t\teditor.shortcuts.add('Alt+F10', '', panel.focus);\n\t};\n\n\tvar overrideLinkShortcut = function (editor, panel) {\n\t\teditor.shortcuts.remove('meta+k');\n\t\teditor.shortcuts.add('meta+k', '', function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = result = Matcher.match(editor, [\n\t\t\t\tSelectionMatcher.textSelection('quicklink')\n\t\t\t]);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar renderInlineUI = function (editor, panel) {\n\t\tvar skinName = editor.settings.skin || 'lightgray';\n\n\t\tSkinLoader.load(editor, skinName, function () {\n\t\t\tbindContextualToolbarsEvents(editor, panel);\n\t\t\toverrideLinkShortcut(editor, panel);\n\t\t});\n\n\t\treturn {};\n\t};\n\n\tvar fail = function (message) {\n\t\tthrow new Error(message);\n\t};\n\n\tThemeManager.add('inlite', function (editor) {\n\t\tvar panel = new Panel();\n\n\t\tButtons.addToEditor(editor, panel);\n\n\t\tvar renderUI = function () {\n\t\t\treturn editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');\n\t\t};\n\n\t\treturn {\n\t\t\trenderUI: renderUI\n\t\t};\n\t});\n\n\treturn function() {};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/scratch/inline/theme.js",
    "content": "(function () {\n\nvar defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}\n\n// Used when there is no 'main' module.\n// The name is probably (hopefully) unique so minification removes for releases.\nvar register_3795 = function (id) {\n  var module = dem(id);\n  var fragments = id.split('.');\n  var target = Function('return this;')();\n  for (var i = 0; i < fragments.length - 1; ++i) {\n    if (target[fragments[i]] === undefined)\n      target[fragments[i]] = {};\n    target = target[fragments[i]];\n  }\n  target[fragments[fragments.length - 1]] = module;\n};\n\nvar instantiate = function (id) {\n  var actual = defs[id];\n  var dependencies = actual.deps;\n  var definition = actual.defn;\n  var len = dependencies.length;\n  var instances = new Array(len);\n  for (var i = 0; i < len; ++i)\n    instances[i] = dem(dependencies[i]);\n  var defResult = definition.apply(null, instances);\n  if (defResult === undefined)\n     throw 'module [' + id + '] returned undefined';\n  actual.instance = defResult;\n};\n\nvar def = function (id, dependencies, definition) {\n  if (typeof id !== 'string')\n    throw 'module id must be a string';\n  else if (dependencies === undefined)\n    throw 'no dependencies for ' + id;\n  else if (definition === undefined)\n    throw 'no definition function for ' + id;\n  defs[id] = {\n    deps: dependencies,\n    defn: definition,\n    instance: undefined\n  };\n};\n\nvar dem = function (id) {\n  var actual = defs[id];\n  if (actual === undefined)\n    throw 'module [' + id + '] was undefined';\n  else if (actual.instance === undefined)\n    instantiate(id);\n  return actual.instance;\n};\n\nvar req = function (ids, callback) {\n  var len = ids.length;\n  var instances = new Array(len);\n  for (var i = 0; i < len; ++i)\n    instances.push(dem(ids[i]));\n  callback.apply(null, callback);\n};\n\nvar ephox = {};\n\nephox.bolt = {\n  module: {\n    api: {\n      define: def,\n      require: req,\n      demand: dem\n    }\n  }\n};\n\nvar define = def;\nvar require = req;\nvar demand = dem;\n// this helps with minificiation when using a lot of global references\nvar defineGlobal = function (id, ref) {\n  define(id, [], function () { return ref; });\n};\n/*jsc\n[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\"]\njsc*/\ndefineGlobal(\"1\", tinymce.ThemeManager);\ndefineGlobal(\"2\", tinymce.util.Delay);\ndefineGlobal(\"b\", tinymce.util.Tools);\ndefineGlobal(\"c\", tinymce.ui.Factory);\ndefineGlobal(\"d\", tinymce.DOM);\n/**\n * Toolbar.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"e\", [\n\t\"b\",\n\t\"c\"\n], function (Tools, Factory) {\n\tvar setActiveItem = function (item, name) {\n\t\treturn function(state, args) {\n\t\t\tvar nodeName, i = args.parents.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tnodeName = args.parents[i].nodeName;\n\t\t\t\tif (nodeName == 'OL' || nodeName == 'UL') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.active(state && nodeName == name);\n\t\t};\n\t};\n\n\tvar getSelectorStateResult = function (itemName, item) {\n\t\tvar result = function (selector, handler) {\n\t\t\treturn {\n\t\t\t\tselector: selector,\n\t\t\t\thandler: handler\n\t\t\t};\n\t\t};\n\n\t\tvar activeHandler = function(state) {\n\t\t\titem.active(state);\n\t\t};\n\n\t\tvar disabledHandler = function (state) {\n\t\t\titem.disabled(state);\n\t\t};\n\n\t\tif (itemName == 'bullist') {\n\t\t\treturn result('ul > li', setActiveItem(item, 'UL'));\n\t\t}\n\n\t\tif (itemName == 'numlist') {\n\t\t\treturn result('ol > li', setActiveItem(item, 'OL'));\n\t\t}\n\n\t\tif (item.settings.stateSelector) {\n\t\t\treturn result(item.settings.stateSelector, activeHandler);\n\t\t}\n\n\t\tif (item.settings.disabledStateSelector) {\n\t\t\treturn result(item.settings.disabledStateSelector, disabledHandler);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar bindSelectorChanged = function (editor, itemName, item) {\n\t\treturn function () {\n\t\t\tvar result = getSelectorStateResult(itemName, item);\n\t\t\tif (result !== null) {\n\t\t\t\teditor.selection.selectorChanged(result.selector, result.handler);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar create = function (editor, name, items) {\n\t\tvar toolbarItems = [], buttonGroup;\n\n\t\tif (!items) {\n\t\t\treturn;\n\t\t}\n\n\t\tTools.each(items.split(/[ ,]/), function(item) {\n\t\t\tvar itemName;\n\n\t\t\tif (item == '|') {\n\t\t\t\tbuttonGroup = null;\n\t\t\t} else {\n\t\t\t\tif (Factory.has(item)) {\n\t\t\t\t\titem = {type: item};\n\t\t\t\t\ttoolbarItems.push(item);\n\t\t\t\t\tbuttonGroup = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!buttonGroup) {\n\t\t\t\t\t\tbuttonGroup = {type: 'buttongroup', items: []};\n\t\t\t\t\t\ttoolbarItems.push(buttonGroup);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (editor.buttons[item]) {\n\t\t\t\t\t\titemName = item;\n\t\t\t\t\t\titem = editor.buttons[itemName];\n\n\t\t\t\t\t\tif (typeof item == 'function') {\n\t\t\t\t\t\t\titem = item();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.type = item.type || 'button';\n\n\t\t\t\t\t\titem = Factory.create(item);\n\t\t\t\t\t\titem.on('postRender', bindSelectorChanged(editor, itemName, item));\n\t\t\t\t\t\tbuttonGroup.items.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn Factory.create({\n\t\t\ttype: 'toolbar',\n\t\t\tlayout: 'flow',\n\t\t\tname: name,\n\t\t\titems: toolbarItems\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create\n\t};\n});\n\ndefineGlobal(\"m\", tinymce.util.Promise);\n/**\n * Uuid.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Generates unique ids this is the same as in core but since\n * it's not exposed as a global we can't access it.\n */\ndefine(\"n\", [\n], function() {\n\tvar count = 0;\n\n\tvar seed = function () {\n\t\tvar rnd = function () {\n\t\t\treturn Math.round(Math.random() * 0xFFFFFFFF).toString(36);\n\t\t};\n\n\t\treturn 's' + Date.now().toString(36) + rnd() + rnd() + rnd();\n\t};\n\n\tvar uuid = function (prefix) {\n\t\treturn prefix + (count++) + seed();\n\t};\n\n\treturn {\n\t\tuuid: uuid\n\t};\n});\n\n/**\n * Bookmark.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"s\", [\n], function () {\n\t/**\n\t * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with\n\t * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans\n\t * added to them since they can be restored after a dom operation.\n\t *\n\t * So this: <p><b>|</b><b>|</b></p>\n\t * becomes: <p><b><span data-mce-type=\"bookmark\">|</span></b><b data-mce-type=\"bookmark\">|</span></b></p>\n\t *\n\t * @param  {DOMRange} rng DOM Range to get bookmark on.\n\t * @return {Object} Bookmark object.\n\t */\n\tvar create = function (dom, rng) {\n\t\tvar bookmark = {};\n\n\t\tfunction setupEndPoint(start) {\n\t\t\tvar offsetNode, container, offset;\n\n\t\t\tcontainer = rng[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = rng[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffsetNode = dom.create('span', {'data-mce-type': 'bookmark'});\n\n\t\t\t\tif (container.hasChildNodes()) {\n\t\t\t\t\toffset = Math.min(offset, container.childNodes.length - 1);\n\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tcontainer.insertBefore(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.insertAfter(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(offsetNode);\n\t\t\t\t}\n\n\t\t\t\tcontainer = offsetNode;\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\tsetupEndPoint(true);\n\n\t\tif (!rng.collapsed) {\n\t\t\tsetupEndPoint();\n\t\t}\n\n\t\treturn bookmark;\n\t};\n\n\t/**\n\t * Moves the selection to the current bookmark and removes any selection container wrappers.\n\t *\n\t * @param {Object} bookmark Bookmark object to move selection to.\n\t */\n\tvar resolve = function (dom, bookmark) {\n\t\tfunction restoreEndPoint(start) {\n\t\t\tvar container, offset, node;\n\n\t\t\tfunction nodeIndex(container) {\n\t\t\t\tvar node = container.parentNode.firstChild, idx = 0;\n\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (node == container) {\n\t\t\t\t\t\treturn idx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip data-mce-type=bookmark nodes\n\t\t\t\t\tif (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {\n\t\t\t\t\t\tidx++;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcontainer = node = bookmark[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = bookmark[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffset = nodeIndex(container);\n\t\t\t\tcontainer = container.parentNode;\n\t\t\t\tdom.remove(node);\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\trestoreEndPoint(true);\n\t\trestoreEndPoint();\n\n\t\tvar rng = dom.createRng();\n\n\t\trng.setStart(bookmark.startContainer, bookmark.startOffset);\n\n\t\tif (bookmark.endContainer) {\n\t\t\trng.setEnd(bookmark.endContainer, bookmark.endOffset);\n\t\t}\n\n\t\treturn rng;\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tresolve: resolve\n\t};\n});\n\n\n\ndefineGlobal(\"t\", tinymce.dom.TreeWalker);\ndefineGlobal(\"u\", tinymce.dom.RangeUtils);\n/**\n * Unlink.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Unlink implementation that doesn't leave partial links for example it would produce:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]de\n * instead of:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]<a href=\"x\">d</a>e\n */\ndefine(\"o\", [\n\t\"s\",\n\t\"b\",\n\t\"t\",\n\t\"u\"\n], function (Bookmark, Tools, TreeWalker, RangeUtils) {\n\tvar getSelectedElements = function (rootElm, startNode, endNode) {\n\t\tvar walker, node, elms = [];\n\n\t\twalker = new TreeWalker(startNode, rootElm);\n\t\tfor (node = startNode; node; node = walker.next()) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\telms.push(node);\n\t\t\t}\n\n\t\t\tif (node === endNode) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn elms;\n\t};\n\n\tvar unwrapElements = function (editor, elms) {\n\t\tvar bookmark, dom, selection;\n\n\t\tdom = editor.dom;\n\t\tselection = editor.selection;\n\t\tbookmark = Bookmark.create(dom, selection.getRng());\n\n\t\tTools.each(elms, function (elm) {\n\t\t\teditor.dom.remove(elm, true);\n\t\t});\n\n\t\tselection.setRng(Bookmark.resolve(dom, bookmark));\n\t};\n\n\tvar isLink = function (elm) {\n\t\treturn elm.nodeName === 'A' && elm.hasAttribute('href');\n\t};\n\n\tvar getParentAnchorOrSelf = function (dom, elm) {\n\t\tvar anchorElm = dom.getParent(elm, isLink);\n\t\treturn anchorElm ? anchorElm : elm;\n\t};\n\n\tvar getSelectedAnchors = function (editor) {\n\t\tvar startElm, endElm, rootElm, anchorElms, selection, dom, rng;\n\n\t\tselection = editor.selection;\n\t\tdom = editor.dom;\n\t\trng = selection.getRng();\n\t\tstartElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset));\n\t\tendElm = RangeUtils.getNode(rng.endContainer, rng.endOffset);\n\t\trootElm = editor.getBody();\n\t\tanchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink);\n\n\t\treturn anchorElms;\n\t};\n\n\tvar unlinkSelection = function (editor) {\n\t\tunwrapElements(editor, getSelectedAnchors(editor));\n\t};\n\n\treturn {\n\t\tunlinkSelection: unlinkSelection\n\t};\n});\n\n/**\n * Actions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"k\", [\n\t\"n\",\n\t\"o\"\n], function (Uuid, Unlink) {\n\tvar createTableHtml = function (cols, rows) {\n\t\tvar x, y, html;\n\n\t\thtml = '<table data-mce-id=\"mce\" style=\"width: 100%\">';\n\t\thtml += '<tbody>';\n\n\t\tfor (y = 0; y < rows; y++) {\n\t\t\thtml += '<tr>';\n\n\t\t\tfor (x = 0; x < cols; x++) {\n\t\t\t\thtml += '<td><br></td>';\n\t\t\t}\n\n\t\t\thtml += '</tr>';\n\t\t}\n\n\t\thtml += '</tbody>';\n\t\thtml += '</table>';\n\n\t\treturn html;\n\t};\n\n\tvar getInsertedElement = function (editor) {\n\t\tvar elms = editor.dom.select('*[data-mce-id]');\n\t\treturn elms[0];\n\t};\n\n\tvar insertTable = function (editor, cols, rows) {\n\t\teditor.undoManager.transact(function () {\n\t\t\tvar tableElm, cellElm;\n\n\t\t\teditor.insertContent(createTableHtml(cols, rows));\n\n\t\t\ttableElm = getInsertedElement(editor);\n\t\t\ttableElm.removeAttribute('data-mce-id');\n\t\t\tcellElm = editor.dom.select('td,th', tableElm);\n\t\t\teditor.selection.setCursorLocation(cellElm[0], 0);\n\t\t});\n\t};\n\n\tvar formatBlock = function (editor, formatName) {\n\t\teditor.execCommand('FormatBlock', false, formatName);\n\t};\n\n\tvar insertBlob = function (editor, base64, blob) {\n\t\tvar blobCache, blobInfo;\n\n\t\tblobCache = editor.editorUpload.blobCache;\n\t\tblobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64);\n\t\tblobCache.add(blobInfo);\n\n\t\teditor.insertContent(editor.dom.createHTML('img', {src: blobInfo.blobUri()}));\n\t};\n\n\tvar collapseSelectionToEnd = function (editor) {\n\t\teditor.selection.collapse(false);\n\t};\n\n\tvar unlink = function (editor) {\n\t\teditor.focus();\n\t\tUnlink.unlinkSelection(editor);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar changeHref = function (editor, elm, url) {\n\t\teditor.focus();\n\t\teditor.dom.setAttrib(elm, 'href', url);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar insertLink = function (editor, url) {\n\t\teditor.execCommand('mceInsertLink', false, {href: url});\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar updateOrInsertLink = function (editor, url) {\n\t\tvar elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\telm ? changeHref(editor, elm, url) : insertLink(editor, url);\n\t};\n\n\tvar createLink = function (editor, url) {\n\t\turl.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);\n\t};\n\n\treturn {\n\t\tinsertTable: insertTable,\n\t\tformatBlock: formatBlock,\n\t\tinsertBlob: insertBlob,\n\t\tcreateLink: createLink,\n\t\tunlink: unlink\n\t};\n});\n\n/**\n * UrlType.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"p\", [\n], function () {\n\tvar isDomainLike = function (href) {\n\t\treturn /^www\\.|\\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());\n\t};\n\n\tvar isAbsolute = function (href) {\n\t\treturn /^https?:\\/\\//.test(href.trim());\n\t};\n\n\treturn {\n\t\tisDomainLike: isDomainLike,\n\t\tisAbsolute: isAbsolute\n\t};\n});\n\n\n\n/**\n * Forms.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"f\", [\n\t\"b\",\n\t\"c\",\n\t\"m\",\n\t\"k\",\n\t\"p\"\n], function (Tools, Factory, Promise, Actions, UrlType) {\n\tvar focusFirstTextBox = function (form) {\n\t\tform.find('textbox').eq(0).each(function (ctrl) {\n\t\t\tctrl.focus();\n\t\t});\n\t};\n\n\tvar createForm = function (name, spec) {\n\t\tvar form = Factory.create(\n\t\t\tTools.extend({\n\t\t\t\ttype: 'form',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'row',\n\t\t\t\tpadding: 5,\n\t\t\t\tname: name,\n\t\t\t\tspacing: 3\n\t\t\t}, spec)\n\t\t);\n\n\t\tform.on('show', function () {\n\t\t\tfocusFirstTextBox(form);\n\t\t});\n\n\t\treturn form;\n\t};\n\n\tvar toggleVisibility = function (ctrl, state) {\n\t\treturn state ? ctrl.show() : ctrl.hide();\n\t};\n\n\tvar askAboutPrefix = function (editor, href) {\n\t\treturn new Promise(function (resolve) {\n\t\t\teditor.windowManager.confirm(\n\t\t\t\t'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',\n\t\t\t\tfunction (result) {\n\t\t\t\t\tvar output = result === true ? 'http://' + href : href;\n\t\t\t\t\tresolve(output);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tvar convertLinkToAbsolute = function (editor, href) {\n\t\treturn !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);\n\t};\n\n\tvar createQuickLinkForm = function (editor, hide) {\n\t\tvar unlink = function () {\n\t\t\teditor.focus();\n\t\t\tActions.unlink(editor);\n\t\t\thide();\n\t\t};\n\n\t\treturn createForm('quicklink', {\n\t\t\titems: [\n\t\t\t\t{type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link'},\n\t\t\t\t{type: 'textbox', name: 'linkurl', placeholder: 'Paste or type a link'},\n\t\t\t\t{type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit'}\n\t\t\t],\n\t\t\tonshow: function () {\n\t\t\t\tvar elm, linkurl = '';\n\n\t\t\t\telm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\t\t\tif (elm) {\n\t\t\t\t\tlinkurl = editor.dom.getAttrib(elm, 'href');\n\t\t\t\t}\n\n\t\t\t\tthis.fromJSON({\n\t\t\t\t\tlinkurl: linkurl\n\t\t\t\t});\n\n\t\t\t\ttoggleVisibility(this.find('#unlink'), elm);\n\t\t\t},\n\t\t\tonsubmit: function (e) {\n\t\t\t\tconvertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {\n\t\t\t\t\tActions.createLink(editor, url);\n\t\t\t\t\thide();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tcreateQuickLinkForm: createQuickLinkForm\n\t};\n});\n\ndefineGlobal(\"q\", tinymce.geom.Rect);\n/**\n * Convert.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"r\", [\n], function () {\n\tvar fromClientRect = function (clientRect) {\n\t\treturn {\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: clientRect.width,\n\t\t\th: clientRect.height\n\t\t};\n\t};\n\n\tvar toClientRect = function (geomRect) {\n\t\treturn {\n\t\t\tleft: geomRect.x,\n\t\t\ttop: geomRect.y,\n\t\t\twidth: geomRect.w,\n\t\t\theight: geomRect.h,\n\t\t\tright: geomRect.x + geomRect.w,\n\t\t\tbottom: geomRect.y + geomRect.h\n\t\t};\n\t};\n\n\treturn {\n\t\tfromClientRect: fromClientRect,\n\t\ttoClientRect: toClientRect\n\t};\n});\n\n/**\n * Measure.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"g\", [\n\t\"d\",\n\t\"q\",\n\t\"r\"\n], function (DOM, Rect, Convert) {\n\tvar toAbsolute = function (rect) {\n\t\tvar vp = DOM.getViewPort();\n\n\t\treturn {\n\t\t\tx: rect.x + vp.x,\n\t\t\ty: rect.y + vp.y,\n\t\t\tw: rect.w,\n\t\t\th: rect.h\n\t\t};\n\t};\n\n\tvar measureElement = function (elm) {\n\t\tvar clientRect = elm.getBoundingClientRect();\n\n\t\treturn toAbsolute({\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: Math.max(elm.clientWidth, elm.offsetWidth),\n\t\t\th: Math.max(elm.clientHeight, elm.offsetHeight)\n\t\t});\n\t};\n\n\tvar getElementRect = function (editor, elm) {\n\t\treturn measureElement(elm);\n\t};\n\n\tvar getPageAreaRect = function (editor) {\n\t\treturn measureElement(editor.getElement().ownerDocument.body);\n\t};\n\n\tvar getContentAreaRect = function (editor) {\n\t\treturn measureElement(editor.getContentAreaContainer() || editor.getBody());\n\t};\n\n\tvar getSelectionRect = function (editor) {\n\t\tvar clientRect = editor.selection.getBoundingClientRect();\n\t\treturn clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null;\n\t};\n\n\treturn {\n\t\tgetElementRect: getElementRect,\n\t\tgetPageAreaRect: getPageAreaRect,\n\t\tgetContentAreaRect: getContentAreaRect,\n\t\tgetSelectionRect: getSelectionRect\n\t};\n});\n\n/**\n * Layout.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"h\", [\n\t\"q\",\n\t\"r\"\n], function (Rect, Convert) {\n\tvar result = function (rect, position) {\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tposition: position\n\t\t};\n\t};\n\n\tvar moveTo = function (rect, toRect) {\n\t\treturn {x: toRect.x, y: toRect.y, w: rect.w, h: rect.h};\n\t};\n\n\tvar calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {\n\t\tvar relPos, relRect, outputPanelRect;\n\n\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions1);\n\t\ttargetRect = Rect.clamp(targetRect, contentAreaRect);\n\n\t\tif (relPos) {\n\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\ttargetRect = Rect.intersect(contentAreaRect, targetRect);\n\t\tif (targetRect) {\n\t\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions2);\n\t\t\tif (relPos) {\n\t\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\t\treturn result(outputPanelRect, relPos);\n\t\t\t}\n\n\t\t\toutputPanelRect = moveTo(panelRect, targetRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar calcInsert = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['cr-cl', 'cl-cr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar calc = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {\n\t\tvar userConstrainedPanelRect;\n\n\t\tif (typeof handler === 'function') {\n\t\t\tuserConstrainedPanelRect = handler({\n\t\t\t\telementRect: Convert.toClientRect(targetRect),\n\t\t\t\tcontentAreaRect: Convert.toClientRect(contentAreaRect),\n\t\t\t\tpanelRect: Convert.toClientRect(panelRect)\n\t\t\t});\n\n\t\t\treturn Convert.fromClientRect(userConstrainedPanelRect);\n\t\t}\n\n\t\treturn panelRect;\n\t};\n\n\treturn {\n\t\tcalcInsert: calcInsert,\n\t\tcalc: calc,\n\t\tuserConstrain: userConstrain\n\t};\n});\n\n/**\n * Panel.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"3\", [\n\t\"b\",\n\t\"c\",\n\t\"d\",\n\t\"e\",\n\t\"f\",\n\t\"g\",\n\t\"h\"\n], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {\n\treturn function () {\n\t\tvar DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';\n\t\tvar DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';\n\t\tvar panel, currentRect;\n\n\t\tvar createToolbars = function (editor, toolbars) {\n\t\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\t\treturn Toolbar.create(editor, toolbar.id, toolbar.items);\n\t\t\t});\n\t\t};\n\n\t\tvar getTextSelectionToolbarItems = function (settings) {\n\t\t\tvar value = settings.selection_toolbar;\n\t\t\treturn value ? value : DEFAULT_TEXT_SELECTION_ITEMS;\n\t\t};\n\n\t\tvar getInsertToolbarItems = function (settings) {\n\t\t\tvar value = settings.insert_toolbar;\n\t\t\treturn value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;\n\t\t};\n\n\t\tvar create = function (editor, toolbars) {\n\t\t\tvar items, settings = editor.settings;\n\n\t\t\titems = createToolbars(editor, toolbars);\n\t\t\titems = items.concat([\n\t\t\t\tToolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),\n\t\t\t\tToolbar.create(editor, 'insert', getInsertToolbarItems(settings)),\n\t\t\t\tForms.createQuickLinkForm(editor, hide)\n\t\t\t]);\n\n\t\t\treturn Factory.create({\n\t\t\t\ttype: 'floatpanel',\n\t\t\t\trole: 'dialog',\n\t\t\t\tclasses: 'tinymce tinymce-inline arrow',\n\t\t\t\tariaLabel: 'Inline toolbar',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'column',\n\t\t\t\talign: 'stretch',\n\t\t\t\tautohide: false,\n\t\t\t\tautofix: true,\n\t\t\t\tfixed: true,\n\t\t\t\tborder: 1,\n\t\t\t\titems: items,\n\t\t\t\toncancel: function() {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvar showPanel = function (panel) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.show();\n\t\t\t}\n\t\t};\n\n\t\tvar movePanelTo = function (panel, pos) {\n\t\t\tpanel.moveTo(pos.x, pos.y);\n\t\t};\n\n\t\tvar togglePositionClass = function (panel, relPos) {\n\t\t\trelPos = relPos ? relPos.substr(0, 2) : '';\n\n\t\t\tTools.each({\n\t\t\t\tt: 'down',\n\t\t\t\tb: 'up',\n\t\t\t\tc: 'center'\n\t\t\t}, function(cls, pos) {\n\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));\n\t\t\t});\n\n\t\t\tif (relPos === 'cr') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', false);\n\t\t\t} else if (relPos === 'cl') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', true);\n\t\t\t} else {\n\t\t\t\tTools.each({\n\t\t\t\t\tl: 'left',\n\t\t\t\t\tr: 'right'\n\t\t\t\t}, function(cls, pos) {\n\t\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar showToolbar = function (panel, id) {\n\t\t\tvar toolbars = panel.items().filter('#' + id);\n\n\t\t\tif (toolbars.length > 0) {\n\t\t\t\ttoolbars[0].show();\n\t\t\t\tpanel.reflow();\n\t\t\t}\n\t\t};\n\n\t\tvar showPanelAt = function (panel, id, editor, targetRect) {\n\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\tshowPanel(panel);\n\t\t\tpanel.items().hide();\n\t\t\tshowToolbar(panel, id);\n\n\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\tif (id === 'insert') {\n\t\t\t\tresult = Layout.calcInsert(targetRect, contentAreaRect, panelRect);\n\t\t\t} else {\n\t\t\t\tresult = Layout.calc(targetRect, contentAreaRect, panelRect);\n\t\t\t}\n\n\t\t\tif (result) {\n\t\t\t\tpanelRect = result.rect;\n\t\t\t\tcurrentRect = targetRect;\n\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));\n\n\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t} else {\n\t\t\t\thide(panel);\n\t\t\t}\n\t\t};\n\n\t\tvar hasFormVisible = function () {\n\t\t\treturn panel.items().filter('form:visible').length > 0;\n\t\t};\n\n\t\tvar showForm = function (editor, id) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\t\tshowPanel(panel);\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\t\tresult = Layout.calc(currentRect, contentAreaRect, panelRect);\n\n\t\t\t\tif (result) {\n\t\t\t\t\tpanelRect = result.rect;\n\t\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));\n\n\t\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar show = function (editor, id, targetRect, toolbars) {\n\t\t\tif (!panel) {\n\t\t\t\tpanel = create(editor, toolbars);\n\t\t\t\tpanel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);\n\t\t\t\teditor.nodeChanged();\n\t\t\t}\n\n\t\t\tshowPanelAt(panel, id, editor, targetRect);\n\t\t};\n\n\t\tvar hide = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\tvar focus = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.find('toolbar:visible').eq(0).each(function (item) {\n\t\t\t\t\titem.focus(true);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar remove = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.remove();\n\t\t\t\tpanel = null;\n\t\t\t}\n\t\t};\n\n\t\tvar inForm = function () {\n\t\t\treturn panel && panel.visible() && hasFormVisible();\n\t\t};\n\n\t\treturn {\n\t\t\tshow: show,\n\t\t\tshowForm: showForm,\n\t\t\tinForm: inForm,\n\t\t\thide: hide,\n\t\t\tfocus: focus,\n\t\t\tremove: remove\n\t\t};\n\t};\n});\n\n/**\n * Conversions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"i\", [\n\t\"m\"\n], function (Promise) {\n\tvar blobToBase64 = function (blob) {\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar reader = new FileReader();\n\n\t\t\treader.onloadend = function() {\n\t\t\t\tresolve(reader.result.split(',')[1]);\n\t\t\t};\n\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t};\n\n\treturn {\n\t\tblobToBase64: blobToBase64\n\t};\n});\n\n\n\n/**\n * Picker.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"j\", [\n\t\"m\"\n], function (Promise) {\n\tvar pickFile = function () {\n\t\treturn new Promise(function (resolve) {\n\t\t\tvar fileInput;\n\n\t\t\tfileInput = document.createElement(\"input\");\n\t\t\tfileInput.type = \"file\";\n\t\t\tfileInput.style.position = 'fixed';\n\t\t\tfileInput.style.left = 0;\n\t\t\tfileInput.style.top = 0;\n\t\t\tfileInput.style.opacity = 0.001;\n\t\t\tdocument.body.appendChild(fileInput);\n\n\t\t\tfileInput.onchange = function(e) {\n\t\t\t\tresolve(Array.prototype.slice.call(e.target.files));\n\t\t\t};\n\n\t\t\tfileInput.click();\n\t\t\tfileInput.parentNode.removeChild(fileInput);\n\t\t});\n\t};\n\n\treturn {\n\t\tpickFile: pickFile\n\t};\n});\n\n\n\n/**\n * Buttons.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"4\", [\n\t\"3\",\n\t\"i\",\n\t\"j\",\n\t\"k\"\n], function (Panel, Conversions, Picker, Actions) {\n\tvar addHeaderButtons = function (editor) {\n\t\tvar formatBlock = function (name) {\n\t\t\treturn function () {\n\t\t\t\tActions.formatBlock(editor, name);\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 1; i < 6; i++) {\n\t\t\tvar name = 'h' + i;\n\n\t\t\teditor.addButton(name, {\n\t\t\t\ttext: name.toUpperCase(),\n\t\t\t\ttooltip: 'Heading ' + i,\n\t\t\t\tstateSelector: name,\n\t\t\t\tonclick: formatBlock(name),\n\t\t\t\tonPostRender: function () {\n\t\t\t\t\t// TODO: Remove this hack that produces bold H1-H6 when we have proper icons\n\t\t\t\t\tvar span = this.getEl().firstChild.firstChild;\n\t\t\t\t\tspan.style.fontWeight = 'bold';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tvar addToEditor = function (editor, panel) {\n\t\teditor.addButton('quicklink', {\n\t\t\ticon: 'link',\n\t\t\ttooltip: 'Insert/Edit link',\n\t\t\tstateSelector: 'a[href]',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.showForm(editor, 'quicklink');\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quickimage', {\n\t\t\ticon: 'image',\n\t\t\ttooltip: 'Insert image',\n\t\t\tonclick: function () {\n\t\t\t\tPicker.pickFile().then(function (files) {\n\t\t\t\t\tvar blob = files[0];\n\n\t\t\t\t\tConversions.blobToBase64(blob).then(function (base64) {\n\t\t\t\t\t\tActions.insertBlob(editor, base64, blob);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quicktable', {\n\t\t\ticon: 'table',\n\t\t\ttooltip: 'Insert table',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.hide();\n\t\t\t\tActions.insertTable(editor, 2, 2);\n\t\t\t}\n\t\t});\n\n\t\taddHeaderButtons(editor);\n\t};\n\n\treturn {\n\t\taddToEditor: addToEditor\n\t};\n});\n\ndefineGlobal(\"l\", tinymce.EditorManager);\n/**\n * SkinLoader.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"5\", [\n\t\"l\",\n\t\"d\"\n], function (EditorManager, DOM) {\n\tvar fireSkinLoaded = function (editor, callback) {\n\t\tvar done = function () {\n\t\t\teditor.fire('SkinLoaded');\n\t\t\tcallback();\n\t\t};\n\n\t\tif (editor.initialized) {\n\t\t\tdone();\n\t\t} else {\n\t\t\teditor.on('init', done);\n\t\t}\n\t};\n\n\tvar load = function (editor, skin, callback) {\n\t\tvar baseUrl = EditorManager.baseURL;\n\t\tvar skinUrl = baseUrl + '/skins/' + skin;\n\n\t\tvar done = function () {\n\t\t\tfireSkinLoaded(editor, callback);\n\t\t};\n\n\t\tDOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);\n\t\teditor.contentCSS.push(skinUrl + '/content.inline.min.css');\n\t};\n\n\treturn {\n\t\tload: load\n\t};\n});\n\n\n\n/**\n * Matcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"8\", [\n], function () {\n\t// result :: String, Rect -> Matcher.result\n\tvar result = function (id, rect) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\trect: rect\n\t\t};\n\t};\n\n\t// match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null\n\tvar match = function (editor, matchers) {\n\t\tfor (var i = 0; i < matchers.length; i++) {\n\t\t\tvar f = matchers[i];\n\t\t\tvar result = f(editor);\n\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\treturn {\n\t\tmatch: match,\n\t\tresult: result\n\t};\n});\n\n/**\n * SelectionMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"6\", [\n\t\"8\",\n\t\"g\"\n], function (Matcher, Measure) {\n\t// textSelection :: String -> (Editor -> Matcher.result | Null)\n\tvar textSelection = function (id) {\n\t\treturn function (editor) {\n\t\t\tif (!editor.selection.isCollapsed()) {\n\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)\n\tvar emptyTextBlock = function (elements, id) {\n\t\treturn function (editor) {\n\t\t\tvar i, textBlockElementsMap = editor.schema.getTextBlockElements();\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName === 'TABLE') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName in textBlockElementsMap) {\n\t\t\t\t\tif (editor.dom.isEmpty(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\ttextSelection: textSelection,\n\t\temptyTextBlock: emptyTextBlock\n\t};\n});\n\n/**\n * ElementMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"7\", [\n\t\"8\",\n\t\"g\"\n], function (Matcher, Measure) {\n\t// element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar element = function (element, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < predicateIds.length; i++) {\n\t\t\t\tif (predicateIds[i].predicate(element)) {\n\t\t\t\t\treturn Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar parent = function (elements, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tfor (var x = 0; x < predicateIds.length; x++) {\n\t\t\t\t\tif (predicateIds[x].predicate(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\telement: element,\n\t\tparent: parent\n\t};\n});\n\n/**\n * Arr.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"9\", [\n], function () {\n\tvar flatten = function (arr) {\n\t\treturn arr.reduce(function (results, item) {\n\t\t\treturn Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);\n\t\t}, []);\n\t};\n\n\treturn {\n\t\tflatten: flatten\n\t};\n});\n\n/**\n * PredicateId.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"a\", [\n\t\"b\"\n], function (Tools) {\n\tvar create = function (id, predicate) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tpredicate: predicate\n\t\t};\n\t};\n\n\t// fromContextToolbars :: [ContextToolbar] -> [PredicateId]\n\tvar fromContextToolbars = function (toolbars) {\n\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\treturn create(toolbar.id, toolbar.predicate);\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tfromContextToolbars: fromContextToolbars\n\t};\n});\n\n/**\n * Theme.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine(\"0\", [\n\t\"1\",\n\t\"2\",\n\t\"3\",\n\t\"4\",\n\t\"5\",\n\t\"6\",\n\t\"7\",\n\t\"8\",\n\t\"9\",\n\t\"a\"\n], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, PredicateId) {\n\tvar getSelectionElements = function (editor) {\n\t\tvar node = editor.selection.getNode();\n\t\tvar elms = editor.dom.getParents(node);\n\t\treturn elms;\n\t};\n\n\tvar createToolbar = function (editor, selector, id, items) {\n\t\tvar selectorPredicate = function (elm) {\n\t\t\treturn editor.dom.is(elm, selector);\n\t\t};\n\n\t\treturn {\n\t\t\tpredicate: selectorPredicate,\n\t\t\tid: id,\n\t\t\titems: items\n\t\t};\n\t};\n\n\tvar getToolbars = function (editor) {\n\t\tvar contextToolbars = editor.contextToolbars;\n\n\t\treturn Arr.flatten([\n\t\t\tcontextToolbars ? contextToolbars : [],\n\t\t\tcreateToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')\n\t\t]);\n\t};\n\n\tvar findMatchResult = function (editor, toolbars) {\n\t\tvar result, elements, contextToolbarsPredicateIds;\n\n\t\telements = getSelectionElements(editor);\n\t\tcontextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars);\n\n\t\tresult = Matcher.match(editor, [\n\t\t\tElementMatcher.element(elements[0], contextToolbarsPredicateIds),\n\t\t\tSelectionMatcher.textSelection('text'),\n\t\t\tSelectionMatcher.emptyTextBlock(elements, 'insert'),\n\t\t\tElementMatcher.parent(elements, contextToolbarsPredicateIds)\n\t\t]);\n\n\t\treturn result && result.rect ? result : null;\n\t};\n\n\tvar togglePanel = function (editor, panel) {\n\t\tvar toggle = function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = findMatchResult(editor, toolbars);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t} else {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\treturn function () {\n\t\t\tif (!editor.removed) {\n\t\t\t\ttoggle();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar ignoreWhenFormIsVisible = function (panel, f) {\n\t\treturn function () {\n\t\t\tif (!panel.inForm()) {\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar bindContextualToolbarsEvents = function (editor, panel) {\n\t\tvar throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);\n\t\tvar throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0);\n\n\t\teditor.on('blur hide ObjectResizeStart', panel.hide);\n\t\teditor.on('click', throttledTogglePanel);\n\t\teditor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);\n\t\teditor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel);\n\t\teditor.on('remove', panel.remove);\n\n\t\teditor.shortcuts.add('Alt+F10', '', panel.focus);\n\t};\n\n\tvar overrideLinkShortcut = function (editor, panel) {\n\t\teditor.shortcuts.remove('meta+k');\n\t\teditor.shortcuts.add('meta+k', '', function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = result = Matcher.match(editor, [\n\t\t\t\tSelectionMatcher.textSelection('quicklink')\n\t\t\t]);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar renderInlineUI = function (editor, panel) {\n\t\tvar skinName = editor.settings.skin || 'lightgray';\n\n\t\tSkinLoader.load(editor, skinName, function () {\n\t\t\tbindContextualToolbarsEvents(editor, panel);\n\t\t\toverrideLinkShortcut(editor, panel);\n\t\t});\n\n\t\treturn {};\n\t};\n\n\tvar fail = function (message) {\n\t\tthrow new Error(message);\n\t};\n\n\tThemeManager.add('inlite', function (editor) {\n\t\tvar panel = new Panel();\n\n\t\tButtons.addToEditor(editor, panel);\n\n\t\tvar renderUI = function () {\n\t\t\treturn editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');\n\t\t};\n\n\t\treturn {\n\t\t\trenderUI: renderUI\n\t\t};\n\t});\n\n\treturn function() {};\n});\n\ndem(\"0\")();\n})();\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/scratch/inline/theme.raw.js",
    "content": "(function () {\n\nvar defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}\n\n// Used when there is no 'main' module.\n// The name is probably (hopefully) unique so minification removes for releases.\nvar register_3795 = function (id) {\n  var module = dem(id);\n  var fragments = id.split('.');\n  var target = Function('return this;')();\n  for (var i = 0; i < fragments.length - 1; ++i) {\n    if (target[fragments[i]] === undefined)\n      target[fragments[i]] = {};\n    target = target[fragments[i]];\n  }\n  target[fragments[fragments.length - 1]] = module;\n};\n\nvar instantiate = function (id) {\n  var actual = defs[id];\n  var dependencies = actual.deps;\n  var definition = actual.defn;\n  var len = dependencies.length;\n  var instances = new Array(len);\n  for (var i = 0; i < len; ++i)\n    instances[i] = dem(dependencies[i]);\n  var defResult = definition.apply(null, instances);\n  if (defResult === undefined)\n     throw 'module [' + id + '] returned undefined';\n  actual.instance = defResult;\n};\n\nvar def = function (id, dependencies, definition) {\n  if (typeof id !== 'string')\n    throw 'module id must be a string';\n  else if (dependencies === undefined)\n    throw 'no dependencies for ' + id;\n  else if (definition === undefined)\n    throw 'no definition function for ' + id;\n  defs[id] = {\n    deps: dependencies,\n    defn: definition,\n    instance: undefined\n  };\n};\n\nvar dem = function (id) {\n  var actual = defs[id];\n  if (actual === undefined)\n    throw 'module [' + id + '] was undefined';\n  else if (actual.instance === undefined)\n    instantiate(id);\n  return actual.instance;\n};\n\nvar req = function (ids, callback) {\n  var len = ids.length;\n  var instances = new Array(len);\n  for (var i = 0; i < len; ++i)\n    instances.push(dem(ids[i]));\n  callback.apply(null, callback);\n};\n\nvar ephox = {};\n\nephox.bolt = {\n  module: {\n    api: {\n      define: def,\n      require: req,\n      demand: dem\n    }\n  }\n};\n\nvar define = def;\nvar require = req;\nvar demand = dem;\n// this helps with minificiation when using a lot of global references\nvar defineGlobal = function (id, ref) {\n  define(id, [], function () { return ref; });\n};\n/*jsc\n[\"tinymce/inlite/Theme\",\"global!tinymce.ThemeManager\",\"global!tinymce.util.Delay\",\"tinymce/inlite/ui/Panel\",\"tinymce/inlite/ui/Buttons\",\"tinymce/inlite/core/SkinLoader\",\"tinymce/inlite/core/SelectionMatcher\",\"tinymce/inlite/core/ElementMatcher\",\"tinymce/inlite/core/Matcher\",\"tinymce/inlite/alien/Arr\",\"tinymce/inlite/core/PredicateId\",\"global!tinymce.util.Tools\",\"global!tinymce.ui.Factory\",\"global!tinymce.DOM\",\"tinymce/inlite/ui/Toolbar\",\"tinymce/inlite/ui/Forms\",\"tinymce/inlite/core/Measure\",\"tinymce/inlite/core/Layout\",\"tinymce/inlite/file/Conversions\",\"tinymce/inlite/file/Picker\",\"tinymce/inlite/core/Actions\",\"global!tinymce.EditorManager\",\"global!tinymce.util.Promise\",\"tinymce/inlite/alien/Uuid\",\"tinymce/inlite/alien/Unlink\",\"tinymce/inlite/core/UrlType\",\"global!tinymce.geom.Rect\",\"tinymce/inlite/core/Convert\",\"tinymce/inlite/alien/Bookmark\",\"global!tinymce.dom.TreeWalker\",\"global!tinymce.dom.RangeUtils\"]\njsc*/\ndefineGlobal(\"global!tinymce.ThemeManager\", tinymce.ThemeManager);\ndefineGlobal(\"global!tinymce.util.Delay\", tinymce.util.Delay);\ndefineGlobal(\"global!tinymce.util.Tools\", tinymce.util.Tools);\ndefineGlobal(\"global!tinymce.ui.Factory\", tinymce.ui.Factory);\ndefineGlobal(\"global!tinymce.DOM\", tinymce.DOM);\n/**\n * Toolbar.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Toolbar', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory'\n], function (Tools, Factory) {\n\tvar setActiveItem = function (item, name) {\n\t\treturn function(state, args) {\n\t\t\tvar nodeName, i = args.parents.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tnodeName = args.parents[i].nodeName;\n\t\t\t\tif (nodeName == 'OL' || nodeName == 'UL') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.active(state && nodeName == name);\n\t\t};\n\t};\n\n\tvar getSelectorStateResult = function (itemName, item) {\n\t\tvar result = function (selector, handler) {\n\t\t\treturn {\n\t\t\t\tselector: selector,\n\t\t\t\thandler: handler\n\t\t\t};\n\t\t};\n\n\t\tvar activeHandler = function(state) {\n\t\t\titem.active(state);\n\t\t};\n\n\t\tvar disabledHandler = function (state) {\n\t\t\titem.disabled(state);\n\t\t};\n\n\t\tif (itemName == 'bullist') {\n\t\t\treturn result('ul > li', setActiveItem(item, 'UL'));\n\t\t}\n\n\t\tif (itemName == 'numlist') {\n\t\t\treturn result('ol > li', setActiveItem(item, 'OL'));\n\t\t}\n\n\t\tif (item.settings.stateSelector) {\n\t\t\treturn result(item.settings.stateSelector, activeHandler);\n\t\t}\n\n\t\tif (item.settings.disabledStateSelector) {\n\t\t\treturn result(item.settings.disabledStateSelector, disabledHandler);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar bindSelectorChanged = function (editor, itemName, item) {\n\t\treturn function () {\n\t\t\tvar result = getSelectorStateResult(itemName, item);\n\t\t\tif (result !== null) {\n\t\t\t\teditor.selection.selectorChanged(result.selector, result.handler);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar create = function (editor, name, items) {\n\t\tvar toolbarItems = [], buttonGroup;\n\n\t\tif (!items) {\n\t\t\treturn;\n\t\t}\n\n\t\tTools.each(items.split(/[ ,]/), function(item) {\n\t\t\tvar itemName;\n\n\t\t\tif (item == '|') {\n\t\t\t\tbuttonGroup = null;\n\t\t\t} else {\n\t\t\t\tif (Factory.has(item)) {\n\t\t\t\t\titem = {type: item};\n\t\t\t\t\ttoolbarItems.push(item);\n\t\t\t\t\tbuttonGroup = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!buttonGroup) {\n\t\t\t\t\t\tbuttonGroup = {type: 'buttongroup', items: []};\n\t\t\t\t\t\ttoolbarItems.push(buttonGroup);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (editor.buttons[item]) {\n\t\t\t\t\t\titemName = item;\n\t\t\t\t\t\titem = editor.buttons[itemName];\n\n\t\t\t\t\t\tif (typeof item == 'function') {\n\t\t\t\t\t\t\titem = item();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.type = item.type || 'button';\n\n\t\t\t\t\t\titem = Factory.create(item);\n\t\t\t\t\t\titem.on('postRender', bindSelectorChanged(editor, itemName, item));\n\t\t\t\t\t\tbuttonGroup.items.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn Factory.create({\n\t\t\ttype: 'toolbar',\n\t\t\tlayout: 'flow',\n\t\t\tname: name,\n\t\t\titems: toolbarItems\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create\n\t};\n});\n\ndefineGlobal(\"global!tinymce.util.Promise\", tinymce.util.Promise);\n/**\n * Uuid.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Generates unique ids this is the same as in core but since\n * it's not exposed as a global we can't access it.\n */\ndefine(\"tinymce/inlite/alien/Uuid\", [\n], function() {\n\tvar count = 0;\n\n\tvar seed = function () {\n\t\tvar rnd = function () {\n\t\t\treturn Math.round(Math.random() * 0xFFFFFFFF).toString(36);\n\t\t};\n\n\t\treturn 's' + Date.now().toString(36) + rnd() + rnd() + rnd();\n\t};\n\n\tvar uuid = function (prefix) {\n\t\treturn prefix + (count++) + seed();\n\t};\n\n\treturn {\n\t\tuuid: uuid\n\t};\n});\n\n/**\n * Bookmark.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Bookmark', [\n], function () {\n\t/**\n\t * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with\n\t * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans\n\t * added to them since they can be restored after a dom operation.\n\t *\n\t * So this: <p><b>|</b><b>|</b></p>\n\t * becomes: <p><b><span data-mce-type=\"bookmark\">|</span></b><b data-mce-type=\"bookmark\">|</span></b></p>\n\t *\n\t * @param  {DOMRange} rng DOM Range to get bookmark on.\n\t * @return {Object} Bookmark object.\n\t */\n\tvar create = function (dom, rng) {\n\t\tvar bookmark = {};\n\n\t\tfunction setupEndPoint(start) {\n\t\t\tvar offsetNode, container, offset;\n\n\t\t\tcontainer = rng[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = rng[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffsetNode = dom.create('span', {'data-mce-type': 'bookmark'});\n\n\t\t\t\tif (container.hasChildNodes()) {\n\t\t\t\t\toffset = Math.min(offset, container.childNodes.length - 1);\n\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tcontainer.insertBefore(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.insertAfter(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(offsetNode);\n\t\t\t\t}\n\n\t\t\t\tcontainer = offsetNode;\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\tsetupEndPoint(true);\n\n\t\tif (!rng.collapsed) {\n\t\t\tsetupEndPoint();\n\t\t}\n\n\t\treturn bookmark;\n\t};\n\n\t/**\n\t * Moves the selection to the current bookmark and removes any selection container wrappers.\n\t *\n\t * @param {Object} bookmark Bookmark object to move selection to.\n\t */\n\tvar resolve = function (dom, bookmark) {\n\t\tfunction restoreEndPoint(start) {\n\t\t\tvar container, offset, node;\n\n\t\t\tfunction nodeIndex(container) {\n\t\t\t\tvar node = container.parentNode.firstChild, idx = 0;\n\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (node == container) {\n\t\t\t\t\t\treturn idx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip data-mce-type=bookmark nodes\n\t\t\t\t\tif (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {\n\t\t\t\t\t\tidx++;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcontainer = node = bookmark[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = bookmark[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffset = nodeIndex(container);\n\t\t\t\tcontainer = container.parentNode;\n\t\t\t\tdom.remove(node);\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\trestoreEndPoint(true);\n\t\trestoreEndPoint();\n\n\t\tvar rng = dom.createRng();\n\n\t\trng.setStart(bookmark.startContainer, bookmark.startOffset);\n\n\t\tif (bookmark.endContainer) {\n\t\t\trng.setEnd(bookmark.endContainer, bookmark.endOffset);\n\t\t}\n\n\t\treturn rng;\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tresolve: resolve\n\t};\n});\n\n\n\ndefineGlobal(\"global!tinymce.dom.TreeWalker\", tinymce.dom.TreeWalker);\ndefineGlobal(\"global!tinymce.dom.RangeUtils\", tinymce.dom.RangeUtils);\n/**\n * Unlink.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Unlink implementation that doesn't leave partial links for example it would produce:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]de\n * instead of:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]<a href=\"x\">d</a>e\n */\ndefine(\"tinymce/inlite/alien/Unlink\", [\n\t'tinymce/inlite/alien/Bookmark',\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.dom.TreeWalker',\n\t'global!tinymce.dom.RangeUtils'\n], function (Bookmark, Tools, TreeWalker, RangeUtils) {\n\tvar getSelectedElements = function (rootElm, startNode, endNode) {\n\t\tvar walker, node, elms = [];\n\n\t\twalker = new TreeWalker(startNode, rootElm);\n\t\tfor (node = startNode; node; node = walker.next()) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\telms.push(node);\n\t\t\t}\n\n\t\t\tif (node === endNode) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn elms;\n\t};\n\n\tvar unwrapElements = function (editor, elms) {\n\t\tvar bookmark, dom, selection;\n\n\t\tdom = editor.dom;\n\t\tselection = editor.selection;\n\t\tbookmark = Bookmark.create(dom, selection.getRng());\n\n\t\tTools.each(elms, function (elm) {\n\t\t\teditor.dom.remove(elm, true);\n\t\t});\n\n\t\tselection.setRng(Bookmark.resolve(dom, bookmark));\n\t};\n\n\tvar isLink = function (elm) {\n\t\treturn elm.nodeName === 'A' && elm.hasAttribute('href');\n\t};\n\n\tvar getParentAnchorOrSelf = function (dom, elm) {\n\t\tvar anchorElm = dom.getParent(elm, isLink);\n\t\treturn anchorElm ? anchorElm : elm;\n\t};\n\n\tvar getSelectedAnchors = function (editor) {\n\t\tvar startElm, endElm, rootElm, anchorElms, selection, dom, rng;\n\n\t\tselection = editor.selection;\n\t\tdom = editor.dom;\n\t\trng = selection.getRng();\n\t\tstartElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset));\n\t\tendElm = RangeUtils.getNode(rng.endContainer, rng.endOffset);\n\t\trootElm = editor.getBody();\n\t\tanchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink);\n\n\t\treturn anchorElms;\n\t};\n\n\tvar unlinkSelection = function (editor) {\n\t\tunwrapElements(editor, getSelectedAnchors(editor));\n\t};\n\n\treturn {\n\t\tunlinkSelection: unlinkSelection\n\t};\n});\n\n/**\n * Actions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Actions', [\n\t'tinymce/inlite/alien/Uuid',\n\t'tinymce/inlite/alien/Unlink'\n], function (Uuid, Unlink) {\n\tvar createTableHtml = function (cols, rows) {\n\t\tvar x, y, html;\n\n\t\thtml = '<table data-mce-id=\"mce\" style=\"width: 100%\">';\n\t\thtml += '<tbody>';\n\n\t\tfor (y = 0; y < rows; y++) {\n\t\t\thtml += '<tr>';\n\n\t\t\tfor (x = 0; x < cols; x++) {\n\t\t\t\thtml += '<td><br></td>';\n\t\t\t}\n\n\t\t\thtml += '</tr>';\n\t\t}\n\n\t\thtml += '</tbody>';\n\t\thtml += '</table>';\n\n\t\treturn html;\n\t};\n\n\tvar getInsertedElement = function (editor) {\n\t\tvar elms = editor.dom.select('*[data-mce-id]');\n\t\treturn elms[0];\n\t};\n\n\tvar insertTable = function (editor, cols, rows) {\n\t\teditor.undoManager.transact(function () {\n\t\t\tvar tableElm, cellElm;\n\n\t\t\teditor.insertContent(createTableHtml(cols, rows));\n\n\t\t\ttableElm = getInsertedElement(editor);\n\t\t\ttableElm.removeAttribute('data-mce-id');\n\t\t\tcellElm = editor.dom.select('td,th', tableElm);\n\t\t\teditor.selection.setCursorLocation(cellElm[0], 0);\n\t\t});\n\t};\n\n\tvar formatBlock = function (editor, formatName) {\n\t\teditor.execCommand('FormatBlock', false, formatName);\n\t};\n\n\tvar insertBlob = function (editor, base64, blob) {\n\t\tvar blobCache, blobInfo;\n\n\t\tblobCache = editor.editorUpload.blobCache;\n\t\tblobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64);\n\t\tblobCache.add(blobInfo);\n\n\t\teditor.insertContent(editor.dom.createHTML('img', {src: blobInfo.blobUri()}));\n\t};\n\n\tvar collapseSelectionToEnd = function (editor) {\n\t\teditor.selection.collapse(false);\n\t};\n\n\tvar unlink = function (editor) {\n\t\teditor.focus();\n\t\tUnlink.unlinkSelection(editor);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar changeHref = function (editor, elm, url) {\n\t\teditor.focus();\n\t\teditor.dom.setAttrib(elm, 'href', url);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar insertLink = function (editor, url) {\n\t\teditor.execCommand('mceInsertLink', false, {href: url});\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar updateOrInsertLink = function (editor, url) {\n\t\tvar elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\telm ? changeHref(editor, elm, url) : insertLink(editor, url);\n\t};\n\n\tvar createLink = function (editor, url) {\n\t\turl.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);\n\t};\n\n\treturn {\n\t\tinsertTable: insertTable,\n\t\tformatBlock: formatBlock,\n\t\tinsertBlob: insertBlob,\n\t\tcreateLink: createLink,\n\t\tunlink: unlink\n\t};\n});\n\n/**\n * UrlType.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/UrlType', [\n], function () {\n\tvar isDomainLike = function (href) {\n\t\treturn /^www\\.|\\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());\n\t};\n\n\tvar isAbsolute = function (href) {\n\t\treturn /^https?:\\/\\//.test(href.trim());\n\t};\n\n\treturn {\n\t\tisDomainLike: isDomainLike,\n\t\tisAbsolute: isAbsolute\n\t};\n});\n\n\n\n/**\n * Forms.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Forms', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.util.Promise',\n\t'tinymce/inlite/core/Actions',\n\t'tinymce/inlite/core/UrlType'\n], function (Tools, Factory, Promise, Actions, UrlType) {\n\tvar focusFirstTextBox = function (form) {\n\t\tform.find('textbox').eq(0).each(function (ctrl) {\n\t\t\tctrl.focus();\n\t\t});\n\t};\n\n\tvar createForm = function (name, spec) {\n\t\tvar form = Factory.create(\n\t\t\tTools.extend({\n\t\t\t\ttype: 'form',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'row',\n\t\t\t\tpadding: 5,\n\t\t\t\tname: name,\n\t\t\t\tspacing: 3\n\t\t\t}, spec)\n\t\t);\n\n\t\tform.on('show', function () {\n\t\t\tfocusFirstTextBox(form);\n\t\t});\n\n\t\treturn form;\n\t};\n\n\tvar toggleVisibility = function (ctrl, state) {\n\t\treturn state ? ctrl.show() : ctrl.hide();\n\t};\n\n\tvar askAboutPrefix = function (editor, href) {\n\t\treturn new Promise(function (resolve) {\n\t\t\teditor.windowManager.confirm(\n\t\t\t\t'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',\n\t\t\t\tfunction (result) {\n\t\t\t\t\tvar output = result === true ? 'http://' + href : href;\n\t\t\t\t\tresolve(output);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tvar convertLinkToAbsolute = function (editor, href) {\n\t\treturn !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);\n\t};\n\n\tvar createQuickLinkForm = function (editor, hide) {\n\t\tvar unlink = function () {\n\t\t\teditor.focus();\n\t\t\tActions.unlink(editor);\n\t\t\thide();\n\t\t};\n\n\t\treturn createForm('quicklink', {\n\t\t\titems: [\n\t\t\t\t{type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link'},\n\t\t\t\t{type: 'textbox', name: 'linkurl', placeholder: 'Paste or type a link'},\n\t\t\t\t{type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit'}\n\t\t\t],\n\t\t\tonshow: function () {\n\t\t\t\tvar elm, linkurl = '';\n\n\t\t\t\telm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\t\t\tif (elm) {\n\t\t\t\t\tlinkurl = editor.dom.getAttrib(elm, 'href');\n\t\t\t\t}\n\n\t\t\t\tthis.fromJSON({\n\t\t\t\t\tlinkurl: linkurl\n\t\t\t\t});\n\n\t\t\t\ttoggleVisibility(this.find('#unlink'), elm);\n\t\t\t},\n\t\t\tonsubmit: function (e) {\n\t\t\t\tconvertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {\n\t\t\t\t\tActions.createLink(editor, url);\n\t\t\t\t\thide();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tcreateQuickLinkForm: createQuickLinkForm\n\t};\n});\n\ndefineGlobal(\"global!tinymce.geom.Rect\", tinymce.geom.Rect);\n/**\n * Convert.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Convert', [\n], function () {\n\tvar fromClientRect = function (clientRect) {\n\t\treturn {\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: clientRect.width,\n\t\t\th: clientRect.height\n\t\t};\n\t};\n\n\tvar toClientRect = function (geomRect) {\n\t\treturn {\n\t\t\tleft: geomRect.x,\n\t\t\ttop: geomRect.y,\n\t\t\twidth: geomRect.w,\n\t\t\theight: geomRect.h,\n\t\t\tright: geomRect.x + geomRect.w,\n\t\t\tbottom: geomRect.y + geomRect.h\n\t\t};\n\t};\n\n\treturn {\n\t\tfromClientRect: fromClientRect,\n\t\ttoClientRect: toClientRect\n\t};\n});\n\n/**\n * Measure.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Measure', [\n\t'global!tinymce.DOM',\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (DOM, Rect, Convert) {\n\tvar toAbsolute = function (rect) {\n\t\tvar vp = DOM.getViewPort();\n\n\t\treturn {\n\t\t\tx: rect.x + vp.x,\n\t\t\ty: rect.y + vp.y,\n\t\t\tw: rect.w,\n\t\t\th: rect.h\n\t\t};\n\t};\n\n\tvar measureElement = function (elm) {\n\t\tvar clientRect = elm.getBoundingClientRect();\n\n\t\treturn toAbsolute({\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: Math.max(elm.clientWidth, elm.offsetWidth),\n\t\t\th: Math.max(elm.clientHeight, elm.offsetHeight)\n\t\t});\n\t};\n\n\tvar getElementRect = function (editor, elm) {\n\t\treturn measureElement(elm);\n\t};\n\n\tvar getPageAreaRect = function (editor) {\n\t\treturn measureElement(editor.getElement().ownerDocument.body);\n\t};\n\n\tvar getContentAreaRect = function (editor) {\n\t\treturn measureElement(editor.getContentAreaContainer() || editor.getBody());\n\t};\n\n\tvar getSelectionRect = function (editor) {\n\t\tvar clientRect = editor.selection.getBoundingClientRect();\n\t\treturn clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null;\n\t};\n\n\treturn {\n\t\tgetElementRect: getElementRect,\n\t\tgetPageAreaRect: getPageAreaRect,\n\t\tgetContentAreaRect: getContentAreaRect,\n\t\tgetSelectionRect: getSelectionRect\n\t};\n});\n\n/**\n * Layout.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Layout', [\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (Rect, Convert) {\n\tvar result = function (rect, position) {\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tposition: position\n\t\t};\n\t};\n\n\tvar moveTo = function (rect, toRect) {\n\t\treturn {x: toRect.x, y: toRect.y, w: rect.w, h: rect.h};\n\t};\n\n\tvar calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {\n\t\tvar relPos, relRect, outputPanelRect;\n\n\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions1);\n\t\ttargetRect = Rect.clamp(targetRect, contentAreaRect);\n\n\t\tif (relPos) {\n\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\ttargetRect = Rect.intersect(contentAreaRect, targetRect);\n\t\tif (targetRect) {\n\t\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions2);\n\t\t\tif (relPos) {\n\t\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\t\treturn result(outputPanelRect, relPos);\n\t\t\t}\n\n\t\t\toutputPanelRect = moveTo(panelRect, targetRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar calcInsert = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['cr-cl', 'cl-cr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar calc = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {\n\t\tvar userConstrainedPanelRect;\n\n\t\tif (typeof handler === 'function') {\n\t\t\tuserConstrainedPanelRect = handler({\n\t\t\t\telementRect: Convert.toClientRect(targetRect),\n\t\t\t\tcontentAreaRect: Convert.toClientRect(contentAreaRect),\n\t\t\t\tpanelRect: Convert.toClientRect(panelRect)\n\t\t\t});\n\n\t\t\treturn Convert.fromClientRect(userConstrainedPanelRect);\n\t\t}\n\n\t\treturn panelRect;\n\t};\n\n\treturn {\n\t\tcalcInsert: calcInsert,\n\t\tcalc: calc,\n\t\tuserConstrain: userConstrain\n\t};\n});\n\n/**\n * Panel.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Panel', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.DOM',\n\t'tinymce/inlite/ui/Toolbar',\n\t'tinymce/inlite/ui/Forms',\n\t'tinymce/inlite/core/Measure',\n\t'tinymce/inlite/core/Layout'\n], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {\n\treturn function () {\n\t\tvar DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';\n\t\tvar DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';\n\t\tvar panel, currentRect;\n\n\t\tvar createToolbars = function (editor, toolbars) {\n\t\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\t\treturn Toolbar.create(editor, toolbar.id, toolbar.items);\n\t\t\t});\n\t\t};\n\n\t\tvar getTextSelectionToolbarItems = function (settings) {\n\t\t\tvar value = settings.selection_toolbar;\n\t\t\treturn value ? value : DEFAULT_TEXT_SELECTION_ITEMS;\n\t\t};\n\n\t\tvar getInsertToolbarItems = function (settings) {\n\t\t\tvar value = settings.insert_toolbar;\n\t\t\treturn value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;\n\t\t};\n\n\t\tvar create = function (editor, toolbars) {\n\t\t\tvar items, settings = editor.settings;\n\n\t\t\titems = createToolbars(editor, toolbars);\n\t\t\titems = items.concat([\n\t\t\t\tToolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),\n\t\t\t\tToolbar.create(editor, 'insert', getInsertToolbarItems(settings)),\n\t\t\t\tForms.createQuickLinkForm(editor, hide)\n\t\t\t]);\n\n\t\t\treturn Factory.create({\n\t\t\t\ttype: 'floatpanel',\n\t\t\t\trole: 'dialog',\n\t\t\t\tclasses: 'tinymce tinymce-inline arrow',\n\t\t\t\tariaLabel: 'Inline toolbar',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'column',\n\t\t\t\talign: 'stretch',\n\t\t\t\tautohide: false,\n\t\t\t\tautofix: true,\n\t\t\t\tfixed: true,\n\t\t\t\tborder: 1,\n\t\t\t\titems: items,\n\t\t\t\toncancel: function() {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvar showPanel = function (panel) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.show();\n\t\t\t}\n\t\t};\n\n\t\tvar movePanelTo = function (panel, pos) {\n\t\t\tpanel.moveTo(pos.x, pos.y);\n\t\t};\n\n\t\tvar togglePositionClass = function (panel, relPos) {\n\t\t\trelPos = relPos ? relPos.substr(0, 2) : '';\n\n\t\t\tTools.each({\n\t\t\t\tt: 'down',\n\t\t\t\tb: 'up',\n\t\t\t\tc: 'center'\n\t\t\t}, function(cls, pos) {\n\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));\n\t\t\t});\n\n\t\t\tif (relPos === 'cr') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', false);\n\t\t\t} else if (relPos === 'cl') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', true);\n\t\t\t} else {\n\t\t\t\tTools.each({\n\t\t\t\t\tl: 'left',\n\t\t\t\t\tr: 'right'\n\t\t\t\t}, function(cls, pos) {\n\t\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar showToolbar = function (panel, id) {\n\t\t\tvar toolbars = panel.items().filter('#' + id);\n\n\t\t\tif (toolbars.length > 0) {\n\t\t\t\ttoolbars[0].show();\n\t\t\t\tpanel.reflow();\n\t\t\t}\n\t\t};\n\n\t\tvar showPanelAt = function (panel, id, editor, targetRect) {\n\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\tshowPanel(panel);\n\t\t\tpanel.items().hide();\n\t\t\tshowToolbar(panel, id);\n\n\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\tif (id === 'insert') {\n\t\t\t\tresult = Layout.calcInsert(targetRect, contentAreaRect, panelRect);\n\t\t\t} else {\n\t\t\t\tresult = Layout.calc(targetRect, contentAreaRect, panelRect);\n\t\t\t}\n\n\t\t\tif (result) {\n\t\t\t\tpanelRect = result.rect;\n\t\t\t\tcurrentRect = targetRect;\n\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));\n\n\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t} else {\n\t\t\t\thide(panel);\n\t\t\t}\n\t\t};\n\n\t\tvar hasFormVisible = function () {\n\t\t\treturn panel.items().filter('form:visible').length > 0;\n\t\t};\n\n\t\tvar showForm = function (editor, id) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\t\tshowPanel(panel);\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\t\tresult = Layout.calc(currentRect, contentAreaRect, panelRect);\n\n\t\t\t\tif (result) {\n\t\t\t\t\tpanelRect = result.rect;\n\t\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));\n\n\t\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar show = function (editor, id, targetRect, toolbars) {\n\t\t\tif (!panel) {\n\t\t\t\tpanel = create(editor, toolbars);\n\t\t\t\tpanel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);\n\t\t\t\teditor.nodeChanged();\n\t\t\t}\n\n\t\t\tshowPanelAt(panel, id, editor, targetRect);\n\t\t};\n\n\t\tvar hide = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\tvar focus = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.find('toolbar:visible').eq(0).each(function (item) {\n\t\t\t\t\titem.focus(true);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar remove = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.remove();\n\t\t\t\tpanel = null;\n\t\t\t}\n\t\t};\n\n\t\tvar inForm = function () {\n\t\t\treturn panel && panel.visible() && hasFormVisible();\n\t\t};\n\n\t\treturn {\n\t\t\tshow: show,\n\t\t\tshowForm: showForm,\n\t\t\tinForm: inForm,\n\t\t\thide: hide,\n\t\t\tfocus: focus,\n\t\t\tremove: remove\n\t\t};\n\t};\n});\n\n/**\n * Conversions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Conversions', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar blobToBase64 = function (blob) {\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar reader = new FileReader();\n\n\t\t\treader.onloadend = function() {\n\t\t\t\tresolve(reader.result.split(',')[1]);\n\t\t\t};\n\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t};\n\n\treturn {\n\t\tblobToBase64: blobToBase64\n\t};\n});\n\n\n\n/**\n * Picker.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Picker', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar pickFile = function () {\n\t\treturn new Promise(function (resolve) {\n\t\t\tvar fileInput;\n\n\t\t\tfileInput = document.createElement(\"input\");\n\t\t\tfileInput.type = \"file\";\n\t\t\tfileInput.style.position = 'fixed';\n\t\t\tfileInput.style.left = 0;\n\t\t\tfileInput.style.top = 0;\n\t\t\tfileInput.style.opacity = 0.001;\n\t\t\tdocument.body.appendChild(fileInput);\n\n\t\t\tfileInput.onchange = function(e) {\n\t\t\t\tresolve(Array.prototype.slice.call(e.target.files));\n\t\t\t};\n\n\t\t\tfileInput.click();\n\t\t\tfileInput.parentNode.removeChild(fileInput);\n\t\t});\n\t};\n\n\treturn {\n\t\tpickFile: pickFile\n\t};\n});\n\n\n\n/**\n * Buttons.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Buttons', [\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/file/Conversions',\n\t'tinymce/inlite/file/Picker',\n\t'tinymce/inlite/core/Actions'\n], function (Panel, Conversions, Picker, Actions) {\n\tvar addHeaderButtons = function (editor) {\n\t\tvar formatBlock = function (name) {\n\t\t\treturn function () {\n\t\t\t\tActions.formatBlock(editor, name);\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 1; i < 6; i++) {\n\t\t\tvar name = 'h' + i;\n\n\t\t\teditor.addButton(name, {\n\t\t\t\ttext: name.toUpperCase(),\n\t\t\t\ttooltip: 'Heading ' + i,\n\t\t\t\tstateSelector: name,\n\t\t\t\tonclick: formatBlock(name),\n\t\t\t\tonPostRender: function () {\n\t\t\t\t\t// TODO: Remove this hack that produces bold H1-H6 when we have proper icons\n\t\t\t\t\tvar span = this.getEl().firstChild.firstChild;\n\t\t\t\t\tspan.style.fontWeight = 'bold';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tvar addToEditor = function (editor, panel) {\n\t\teditor.addButton('quicklink', {\n\t\t\ticon: 'link',\n\t\t\ttooltip: 'Insert/Edit link',\n\t\t\tstateSelector: 'a[href]',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.showForm(editor, 'quicklink');\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quickimage', {\n\t\t\ticon: 'image',\n\t\t\ttooltip: 'Insert image',\n\t\t\tonclick: function () {\n\t\t\t\tPicker.pickFile().then(function (files) {\n\t\t\t\t\tvar blob = files[0];\n\n\t\t\t\t\tConversions.blobToBase64(blob).then(function (base64) {\n\t\t\t\t\t\tActions.insertBlob(editor, base64, blob);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quicktable', {\n\t\t\ticon: 'table',\n\t\t\ttooltip: 'Insert table',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.hide();\n\t\t\t\tActions.insertTable(editor, 2, 2);\n\t\t\t}\n\t\t});\n\n\t\taddHeaderButtons(editor);\n\t};\n\n\treturn {\n\t\taddToEditor: addToEditor\n\t};\n});\n\ndefineGlobal(\"global!tinymce.EditorManager\", tinymce.EditorManager);\n/**\n * SkinLoader.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SkinLoader', [\n\t'global!tinymce.EditorManager',\n\t'global!tinymce.DOM'\n], function (EditorManager, DOM) {\n\tvar fireSkinLoaded = function (editor, callback) {\n\t\tvar done = function () {\n\t\t\teditor.fire('SkinLoaded');\n\t\t\tcallback();\n\t\t};\n\n\t\tif (editor.initialized) {\n\t\t\tdone();\n\t\t} else {\n\t\t\teditor.on('init', done);\n\t\t}\n\t};\n\n\tvar load = function (editor, skin, callback) {\n\t\tvar baseUrl = EditorManager.baseURL;\n\t\tvar skinUrl = baseUrl + '/skins/' + skin;\n\n\t\tvar done = function () {\n\t\t\tfireSkinLoaded(editor, callback);\n\t\t};\n\n\t\tDOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);\n\t\teditor.contentCSS.push(skinUrl + '/content.inline.min.css');\n\t};\n\n\treturn {\n\t\tload: load\n\t};\n});\n\n\n\n/**\n * Matcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Matcher', [\n], function () {\n\t// result :: String, Rect -> Matcher.result\n\tvar result = function (id, rect) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\trect: rect\n\t\t};\n\t};\n\n\t// match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null\n\tvar match = function (editor, matchers) {\n\t\tfor (var i = 0; i < matchers.length; i++) {\n\t\t\tvar f = matchers[i];\n\t\t\tvar result = f(editor);\n\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\treturn {\n\t\tmatch: match,\n\t\tresult: result\n\t};\n});\n\n/**\n * SelectionMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SelectionMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// textSelection :: String -> (Editor -> Matcher.result | Null)\n\tvar textSelection = function (id) {\n\t\treturn function (editor) {\n\t\t\tif (!editor.selection.isCollapsed()) {\n\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)\n\tvar emptyTextBlock = function (elements, id) {\n\t\treturn function (editor) {\n\t\t\tvar i, textBlockElementsMap = editor.schema.getTextBlockElements();\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName === 'TABLE') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName in textBlockElementsMap) {\n\t\t\t\t\tif (editor.dom.isEmpty(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\ttextSelection: textSelection,\n\t\temptyTextBlock: emptyTextBlock\n\t};\n});\n\n/**\n * ElementMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/ElementMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar element = function (element, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < predicateIds.length; i++) {\n\t\t\t\tif (predicateIds[i].predicate(element)) {\n\t\t\t\t\treturn Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar parent = function (elements, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tfor (var x = 0; x < predicateIds.length; x++) {\n\t\t\t\t\tif (predicateIds[x].predicate(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\telement: element,\n\t\tparent: parent\n\t};\n});\n\n/**\n * Arr.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Arr', [\n], function () {\n\tvar flatten = function (arr) {\n\t\treturn arr.reduce(function (results, item) {\n\t\t\treturn Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);\n\t\t}, []);\n\t};\n\n\treturn {\n\t\tflatten: flatten\n\t};\n});\n\n/**\n * PredicateId.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/PredicateId', [\n\t'global!tinymce.util.Tools'\n], function (Tools) {\n\tvar create = function (id, predicate) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tpredicate: predicate\n\t\t};\n\t};\n\n\t// fromContextToolbars :: [ContextToolbar] -> [PredicateId]\n\tvar fromContextToolbars = function (toolbars) {\n\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\treturn create(toolbar.id, toolbar.predicate);\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tfromContextToolbars: fromContextToolbars\n\t};\n});\n\n/**\n * Theme.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/Theme', [\n\t'global!tinymce.ThemeManager',\n\t'global!tinymce.util.Delay',\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/ui/Buttons',\n\t'tinymce/inlite/core/SkinLoader',\n\t'tinymce/inlite/core/SelectionMatcher',\n\t'tinymce/inlite/core/ElementMatcher',\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/alien/Arr',\n\t'tinymce/inlite/core/PredicateId'\n], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, PredicateId) {\n\tvar getSelectionElements = function (editor) {\n\t\tvar node = editor.selection.getNode();\n\t\tvar elms = editor.dom.getParents(node);\n\t\treturn elms;\n\t};\n\n\tvar createToolbar = function (editor, selector, id, items) {\n\t\tvar selectorPredicate = function (elm) {\n\t\t\treturn editor.dom.is(elm, selector);\n\t\t};\n\n\t\treturn {\n\t\t\tpredicate: selectorPredicate,\n\t\t\tid: id,\n\t\t\titems: items\n\t\t};\n\t};\n\n\tvar getToolbars = function (editor) {\n\t\tvar contextToolbars = editor.contextToolbars;\n\n\t\treturn Arr.flatten([\n\t\t\tcontextToolbars ? contextToolbars : [],\n\t\t\tcreateToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')\n\t\t]);\n\t};\n\n\tvar findMatchResult = function (editor, toolbars) {\n\t\tvar result, elements, contextToolbarsPredicateIds;\n\n\t\telements = getSelectionElements(editor);\n\t\tcontextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars);\n\n\t\tresult = Matcher.match(editor, [\n\t\t\tElementMatcher.element(elements[0], contextToolbarsPredicateIds),\n\t\t\tSelectionMatcher.textSelection('text'),\n\t\t\tSelectionMatcher.emptyTextBlock(elements, 'insert'),\n\t\t\tElementMatcher.parent(elements, contextToolbarsPredicateIds)\n\t\t]);\n\n\t\treturn result && result.rect ? result : null;\n\t};\n\n\tvar togglePanel = function (editor, panel) {\n\t\tvar toggle = function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = findMatchResult(editor, toolbars);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t} else {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\treturn function () {\n\t\t\tif (!editor.removed) {\n\t\t\t\ttoggle();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar ignoreWhenFormIsVisible = function (panel, f) {\n\t\treturn function () {\n\t\t\tif (!panel.inForm()) {\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar bindContextualToolbarsEvents = function (editor, panel) {\n\t\tvar throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);\n\t\tvar throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0);\n\n\t\teditor.on('blur hide ObjectResizeStart', panel.hide);\n\t\teditor.on('click', throttledTogglePanel);\n\t\teditor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);\n\t\teditor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel);\n\t\teditor.on('remove', panel.remove);\n\n\t\teditor.shortcuts.add('Alt+F10', '', panel.focus);\n\t};\n\n\tvar overrideLinkShortcut = function (editor, panel) {\n\t\teditor.shortcuts.remove('meta+k');\n\t\teditor.shortcuts.add('meta+k', '', function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = result = Matcher.match(editor, [\n\t\t\t\tSelectionMatcher.textSelection('quicklink')\n\t\t\t]);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar renderInlineUI = function (editor, panel) {\n\t\tvar skinName = editor.settings.skin || 'lightgray';\n\n\t\tSkinLoader.load(editor, skinName, function () {\n\t\t\tbindContextualToolbarsEvents(editor, panel);\n\t\t\toverrideLinkShortcut(editor, panel);\n\t\t});\n\n\t\treturn {};\n\t};\n\n\tvar fail = function (message) {\n\t\tthrow new Error(message);\n\t};\n\n\tThemeManager.add('inlite', function (editor) {\n\t\tvar panel = new Panel();\n\n\t\tButtons.addToEditor(editor, panel);\n\n\t\tvar renderUI = function () {\n\t\t\treturn editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');\n\t\t};\n\n\t\treturn {\n\t\t\trenderUI: renderUI\n\t\t};\n\t});\n\n\treturn function() {};\n});\n\ndem('tinymce/inlite/Theme')();\n})();\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/demo/css/demo.css",
    "content": "blockquote {\n\tborder-left: 3px solid rgba(0,0,0,.8);\n\tpadding-left: 20px;\n\tmargin: 0;\n}\n\n.mce-edit-focus {\n\toutline: 1px solid blue;\n}\n\n.tinymce {\n\tmargin: 10px;\n\tpadding: 10px;\n\toverflow: auto;\n\tborder: 1px solid gray;\n}\n\ntable, td {\n\tborder: 1px dashed gray;\n}\n\n/*.mce-tinymce-inline {\n\ttransition: left 50ms ease-in-out, top 50ms ease-in-out;\n}\n*/"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/demo/html/demo.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<title>inlite-theme Demo Page</title>\n<link href=\"../css/demo.css\" rel=\"stylesheet\">\n<script src=\"../../../../../tinymce.dev.js\"></script>\n<script src=\"../../../config/bolt/bootstrap-demo.js\"></script>\n<script>\nephox.bolt.module.api.main('tinymce/inlite/Demo');\n</script>\n</head>\n\n<body>\n<h2>inlite-theme Demo Page</h2>\n<div id=\"ephox-ui\">\n\t<div class=\"tinymce\" style=\"width: 900px; min-height: 100px\">\n\t\t\t<p>\n\t\t\t\t<img src=\"https://www.tinymce.com/images/glyph-tinymce@2x.png\" style=\"width: 100px; float: right\">\n\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultricies posuere felis sed interdum. Quisque nec diam\n\t\t\t\tnec purus gravida dapibus\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\teget non <a href=\"http://www.tinymce.com\">nulla</a>. Ut eu vestibulum libero. Vestibulum pretium est vitae metus auctor, quis fermentum mi\n\t\t\t\tluctus. Fusce aliquet tincidunt massa vitae scelerisque. Vivamus in tellus risus. Mauris auctor metus ut gravida feugiat.\n\t\t\t\tNunc consequat urna eu augue commodo, eget malesuada odio fringilla. Morbi vitae turpis in elit laoreet malesuada a nec massa.\n\t\t\t</p>\n\t\t<table>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Lorem ipsum dolor sit amet</td>\n\t\t\t\t\t<td>Lorem ipsum dolor sit amet</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Vivamus in tellus risus</td>\n\t\t\t\t\t<td>Vivamus in tellus risus</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n\n\t<div style=\"height: 3000px\"></div>\n\n\t<div class=\"tinymce\" style=\"width: 900px; min-height: 100px; margin: 20px; border: 20px solid black; padding: 20px\">\n\t\t\t<p>\n\t\t\t\t<img src=\"https://www.tinymce.com/images/glyph-tinymce@2x.png\" style=\"width: 100px; float: right\">\n\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultricies posuere felis sed interdum. Quisque nec diam\n\t\t\t\tnec purus gravida dapibus\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\teget non <a href=\"http://www.tinymce.com\">nulla</a>. Ut eu vestibulum libero. Vestibulum pretium est vitae metus auctor, quis fermentum mi\n\t\t\t\tluctus. Fusce aliquet tincidunt massa vitae scelerisque. Vivamus in tellus risus. Mauris auctor metus ut gravida feugiat.\n\t\t\t\tNunc consequat urna eu augue commodo, eget malesuada odio fringilla. Morbi vitae turpis in elit laoreet malesuada a nec massa.\n\t\t\t</p>\n\t\t<table>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Lorem ipsum dolor sit amet</td>\n\t\t\t\t\t<td>Lorem ipsum dolor sit amet</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Vivamus in tellus risus</td>\n\t\t\t\t\t<td>Vivamus in tellus risus</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/demo/js/tinymce/inlite/Demo.js",
    "content": "/**\n * Demo.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/*eslint no-console:0 */\n\ndefine('tinymce/inlite/Demo', [\n\t'tinymce/inlite/Theme',\n\t'global!tinymce'\n], function(Theme, tinymce) {\n\ttinymce.init({\n\t\tselector: 'div.tinymce',\n\t\ttheme: 'inlite',\n\t\tplugins: 'image table link paste contextmenu textpattern autolink',\n\t\tinsert_toolbar: 'quickimage quicktable',\n\t\tselection_toolbar: 'bold italic | quicklink h2 h3 blockquote',\n\t\tinline: true,\n\t\tpaste_data_images: true\n\t});\n\n\treturn function() {};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/Theme.js",
    "content": "/**\n * Theme.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/Theme', [\n\t'global!tinymce.ThemeManager',\n\t'global!tinymce.util.Delay',\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/ui/Buttons',\n\t'tinymce/inlite/core/SkinLoader',\n\t'tinymce/inlite/core/SelectionMatcher',\n\t'tinymce/inlite/core/ElementMatcher',\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/alien/Arr',\n\t'tinymce/inlite/core/PredicateId'\n], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, PredicateId) {\n\tvar getSelectionElements = function (editor) {\n\t\tvar node = editor.selection.getNode();\n\t\tvar elms = editor.dom.getParents(node);\n\t\treturn elms;\n\t};\n\n\tvar createToolbar = function (editor, selector, id, items) {\n\t\tvar selectorPredicate = function (elm) {\n\t\t\treturn editor.dom.is(elm, selector);\n\t\t};\n\n\t\treturn {\n\t\t\tpredicate: selectorPredicate,\n\t\t\tid: id,\n\t\t\titems: items\n\t\t};\n\t};\n\n\tvar getToolbars = function (editor) {\n\t\tvar contextToolbars = editor.contextToolbars;\n\n\t\treturn Arr.flatten([\n\t\t\tcontextToolbars ? contextToolbars : [],\n\t\t\tcreateToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')\n\t\t]);\n\t};\n\n\tvar findMatchResult = function (editor, toolbars) {\n\t\tvar result, elements, contextToolbarsPredicateIds;\n\n\t\telements = getSelectionElements(editor);\n\t\tcontextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars);\n\n\t\tresult = Matcher.match(editor, [\n\t\t\tElementMatcher.element(elements[0], contextToolbarsPredicateIds),\n\t\t\tSelectionMatcher.textSelection('text'),\n\t\t\tSelectionMatcher.emptyTextBlock(elements, 'insert'),\n\t\t\tElementMatcher.parent(elements, contextToolbarsPredicateIds)\n\t\t]);\n\n\t\treturn result && result.rect ? result : null;\n\t};\n\n\tvar togglePanel = function (editor, panel) {\n\t\tvar toggle = function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = findMatchResult(editor, toolbars);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t} else {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\treturn function () {\n\t\t\tif (!editor.removed) {\n\t\t\t\ttoggle();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar ignoreWhenFormIsVisible = function (panel, f) {\n\t\treturn function () {\n\t\t\tif (!panel.inForm()) {\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\t};\n\n\tvar bindContextualToolbarsEvents = function (editor, panel) {\n\t\tvar throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);\n\t\tvar throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0);\n\n\t\teditor.on('blur hide ObjectResizeStart', panel.hide);\n\t\teditor.on('click', throttledTogglePanel);\n\t\teditor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);\n\t\teditor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel);\n\t\teditor.on('remove', panel.remove);\n\n\t\teditor.shortcuts.add('Alt+F10', '', panel.focus);\n\t};\n\n\tvar overrideLinkShortcut = function (editor, panel) {\n\t\teditor.shortcuts.remove('meta+k');\n\t\teditor.shortcuts.add('meta+k', '', function () {\n\t\t\tvar toolbars = getToolbars(editor);\n\t\t\tvar result = result = Matcher.match(editor, [\n\t\t\t\tSelectionMatcher.textSelection('quicklink')\n\t\t\t]);\n\n\t\t\tif (result) {\n\t\t\t\tpanel.show(editor, result.id, result.rect, toolbars);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar renderInlineUI = function (editor, panel) {\n\t\tvar skinName = editor.settings.skin || 'lightgray';\n\n\t\tSkinLoader.load(editor, skinName, function () {\n\t\t\tbindContextualToolbarsEvents(editor, panel);\n\t\t\toverrideLinkShortcut(editor, panel);\n\t\t});\n\n\t\treturn {};\n\t};\n\n\tvar fail = function (message) {\n\t\tthrow new Error(message);\n\t};\n\n\tThemeManager.add('inlite', function (editor) {\n\t\tvar panel = new Panel();\n\n\t\tButtons.addToEditor(editor, panel);\n\n\t\tvar renderUI = function () {\n\t\t\treturn editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');\n\t\t};\n\n\t\treturn {\n\t\t\trenderUI: renderUI\n\t\t};\n\t});\n\n\treturn function() {};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Arr.js",
    "content": "/**\n * Arr.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Arr', [\n], function () {\n\tvar flatten = function (arr) {\n\t\treturn arr.reduce(function (results, item) {\n\t\t\treturn Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);\n\t\t}, []);\n\t};\n\n\treturn {\n\t\tflatten: flatten\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Bookmark.js",
    "content": "/**\n * Bookmark.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/alien/Bookmark', [\n], function () {\n\t/**\n\t * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with\n\t * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans\n\t * added to them since they can be restored after a dom operation.\n\t *\n\t * So this: <p><b>|</b><b>|</b></p>\n\t * becomes: <p><b><span data-mce-type=\"bookmark\">|</span></b><b data-mce-type=\"bookmark\">|</span></b></p>\n\t *\n\t * @param  {DOMRange} rng DOM Range to get bookmark on.\n\t * @return {Object} Bookmark object.\n\t */\n\tvar create = function (dom, rng) {\n\t\tvar bookmark = {};\n\n\t\tfunction setupEndPoint(start) {\n\t\t\tvar offsetNode, container, offset;\n\n\t\t\tcontainer = rng[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = rng[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffsetNode = dom.create('span', {'data-mce-type': 'bookmark'});\n\n\t\t\t\tif (container.hasChildNodes()) {\n\t\t\t\t\toffset = Math.min(offset, container.childNodes.length - 1);\n\n\t\t\t\t\tif (start) {\n\t\t\t\t\t\tcontainer.insertBefore(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.insertAfter(offsetNode, container.childNodes[offset]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(offsetNode);\n\t\t\t\t}\n\n\t\t\t\tcontainer = offsetNode;\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\tsetupEndPoint(true);\n\n\t\tif (!rng.collapsed) {\n\t\t\tsetupEndPoint();\n\t\t}\n\n\t\treturn bookmark;\n\t};\n\n\t/**\n\t * Moves the selection to the current bookmark and removes any selection container wrappers.\n\t *\n\t * @param {Object} bookmark Bookmark object to move selection to.\n\t */\n\tvar resolve = function (dom, bookmark) {\n\t\tfunction restoreEndPoint(start) {\n\t\t\tvar container, offset, node;\n\n\t\t\tfunction nodeIndex(container) {\n\t\t\t\tvar node = container.parentNode.firstChild, idx = 0;\n\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (node == container) {\n\t\t\t\t\t\treturn idx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip data-mce-type=bookmark nodes\n\t\t\t\t\tif (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {\n\t\t\t\t\t\tidx++;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcontainer = node = bookmark[start ? 'startContainer' : 'endContainer'];\n\t\t\toffset = bookmark[start ? 'startOffset' : 'endOffset'];\n\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (container.nodeType == 1) {\n\t\t\t\toffset = nodeIndex(container);\n\t\t\t\tcontainer = container.parentNode;\n\t\t\t\tdom.remove(node);\n\t\t\t}\n\n\t\t\tbookmark[start ? 'startContainer' : 'endContainer'] = container;\n\t\t\tbookmark[start ? 'startOffset' : 'endOffset'] = offset;\n\t\t}\n\n\t\trestoreEndPoint(true);\n\t\trestoreEndPoint();\n\n\t\tvar rng = dom.createRng();\n\n\t\trng.setStart(bookmark.startContainer, bookmark.startOffset);\n\n\t\tif (bookmark.endContainer) {\n\t\t\trng.setEnd(bookmark.endContainer, bookmark.endOffset);\n\t\t}\n\n\t\treturn rng;\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tresolve: resolve\n\t};\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Unlink.js",
    "content": "/**\n * Unlink.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Unlink implementation that doesn't leave partial links for example it would produce:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]de\n * instead of:\n *  a[b<a href=\"x\">c]d</a>e -> a[bc]<a href=\"x\">d</a>e\n */\ndefine(\"tinymce/inlite/alien/Unlink\", [\n\t'tinymce/inlite/alien/Bookmark',\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.dom.TreeWalker',\n\t'global!tinymce.dom.RangeUtils'\n], function (Bookmark, Tools, TreeWalker, RangeUtils) {\n\tvar getSelectedElements = function (rootElm, startNode, endNode) {\n\t\tvar walker, node, elms = [];\n\n\t\twalker = new TreeWalker(startNode, rootElm);\n\t\tfor (node = startNode; node; node = walker.next()) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\telms.push(node);\n\t\t\t}\n\n\t\t\tif (node === endNode) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn elms;\n\t};\n\n\tvar unwrapElements = function (editor, elms) {\n\t\tvar bookmark, dom, selection;\n\n\t\tdom = editor.dom;\n\t\tselection = editor.selection;\n\t\tbookmark = Bookmark.create(dom, selection.getRng());\n\n\t\tTools.each(elms, function (elm) {\n\t\t\teditor.dom.remove(elm, true);\n\t\t});\n\n\t\tselection.setRng(Bookmark.resolve(dom, bookmark));\n\t};\n\n\tvar isLink = function (elm) {\n\t\treturn elm.nodeName === 'A' && elm.hasAttribute('href');\n\t};\n\n\tvar getParentAnchorOrSelf = function (dom, elm) {\n\t\tvar anchorElm = dom.getParent(elm, isLink);\n\t\treturn anchorElm ? anchorElm : elm;\n\t};\n\n\tvar getSelectedAnchors = function (editor) {\n\t\tvar startElm, endElm, rootElm, anchorElms, selection, dom, rng;\n\n\t\tselection = editor.selection;\n\t\tdom = editor.dom;\n\t\trng = selection.getRng();\n\t\tstartElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset));\n\t\tendElm = RangeUtils.getNode(rng.endContainer, rng.endOffset);\n\t\trootElm = editor.getBody();\n\t\tanchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink);\n\n\t\treturn anchorElms;\n\t};\n\n\tvar unlinkSelection = function (editor) {\n\t\tunwrapElements(editor, getSelectedAnchors(editor));\n\t};\n\n\treturn {\n\t\tunlinkSelection: unlinkSelection\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Uuid.js",
    "content": "/**\n * Uuid.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\n/**\n * Generates unique ids this is the same as in core but since\n * it's not exposed as a global we can't access it.\n */\ndefine(\"tinymce/inlite/alien/Uuid\", [\n], function() {\n\tvar count = 0;\n\n\tvar seed = function () {\n\t\tvar rnd = function () {\n\t\t\treturn Math.round(Math.random() * 0xFFFFFFFF).toString(36);\n\t\t};\n\n\t\treturn 's' + Date.now().toString(36) + rnd() + rnd() + rnd();\n\t};\n\n\tvar uuid = function (prefix) {\n\t\treturn prefix + (count++) + seed();\n\t};\n\n\treturn {\n\t\tuuid: uuid\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Actions.js",
    "content": "/**\n * Actions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Actions', [\n\t'tinymce/inlite/alien/Uuid',\n\t'tinymce/inlite/alien/Unlink'\n], function (Uuid, Unlink) {\n\tvar createTableHtml = function (cols, rows) {\n\t\tvar x, y, html;\n\n\t\thtml = '<table data-mce-id=\"mce\" style=\"width: 100%\">';\n\t\thtml += '<tbody>';\n\n\t\tfor (y = 0; y < rows; y++) {\n\t\t\thtml += '<tr>';\n\n\t\t\tfor (x = 0; x < cols; x++) {\n\t\t\t\thtml += '<td><br></td>';\n\t\t\t}\n\n\t\t\thtml += '</tr>';\n\t\t}\n\n\t\thtml += '</tbody>';\n\t\thtml += '</table>';\n\n\t\treturn html;\n\t};\n\n\tvar getInsertedElement = function (editor) {\n\t\tvar elms = editor.dom.select('*[data-mce-id]');\n\t\treturn elms[0];\n\t};\n\n\tvar insertTable = function (editor, cols, rows) {\n\t\teditor.undoManager.transact(function () {\n\t\t\tvar tableElm, cellElm;\n\n\t\t\teditor.insertContent(createTableHtml(cols, rows));\n\n\t\t\ttableElm = getInsertedElement(editor);\n\t\t\ttableElm.removeAttribute('data-mce-id');\n\t\t\tcellElm = editor.dom.select('td,th', tableElm);\n\t\t\teditor.selection.setCursorLocation(cellElm[0], 0);\n\t\t});\n\t};\n\n\tvar formatBlock = function (editor, formatName) {\n\t\teditor.execCommand('FormatBlock', false, formatName);\n\t};\n\n\tvar insertBlob = function (editor, base64, blob) {\n\t\tvar blobCache, blobInfo;\n\n\t\tblobCache = editor.editorUpload.blobCache;\n\t\tblobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64);\n\t\tblobCache.add(blobInfo);\n\n\t\teditor.insertContent(editor.dom.createHTML('img', {src: blobInfo.blobUri()}));\n\t};\n\n\tvar collapseSelectionToEnd = function (editor) {\n\t\teditor.selection.collapse(false);\n\t};\n\n\tvar unlink = function (editor) {\n\t\teditor.focus();\n\t\tUnlink.unlinkSelection(editor);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar changeHref = function (editor, elm, url) {\n\t\teditor.focus();\n\t\teditor.dom.setAttrib(elm, 'href', url);\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar insertLink = function (editor, url) {\n\t\teditor.execCommand('mceInsertLink', false, {href: url});\n\t\tcollapseSelectionToEnd(editor);\n\t};\n\n\tvar updateOrInsertLink = function (editor, url) {\n\t\tvar elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\telm ? changeHref(editor, elm, url) : insertLink(editor, url);\n\t};\n\n\tvar createLink = function (editor, url) {\n\t\turl.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);\n\t};\n\n\treturn {\n\t\tinsertTable: insertTable,\n\t\tformatBlock: formatBlock,\n\t\tinsertBlob: insertBlob,\n\t\tcreateLink: createLink,\n\t\tunlink: unlink\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Convert.js",
    "content": "/**\n * Convert.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Convert', [\n], function () {\n\tvar fromClientRect = function (clientRect) {\n\t\treturn {\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: clientRect.width,\n\t\t\th: clientRect.height\n\t\t};\n\t};\n\n\tvar toClientRect = function (geomRect) {\n\t\treturn {\n\t\t\tleft: geomRect.x,\n\t\t\ttop: geomRect.y,\n\t\t\twidth: geomRect.w,\n\t\t\theight: geomRect.h,\n\t\t\tright: geomRect.x + geomRect.w,\n\t\t\tbottom: geomRect.y + geomRect.h\n\t\t};\n\t};\n\n\treturn {\n\t\tfromClientRect: fromClientRect,\n\t\ttoClientRect: toClientRect\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/ElementMatcher.js",
    "content": "/**\n * ElementMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/ElementMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar element = function (element, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < predicateIds.length; i++) {\n\t\t\t\tif (predicateIds[i].predicate(element)) {\n\t\t\t\t\treturn Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null)\n\tvar parent = function (elements, predicateIds) {\n\t\treturn function (editor) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tfor (var x = 0; x < predicateIds.length; x++) {\n\t\t\t\t\tif (predicateIds[x].predicate(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\telement: element,\n\t\tparent: parent\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Layout.js",
    "content": "/**\n * Layout.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Layout', [\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (Rect, Convert) {\n\tvar result = function (rect, position) {\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tposition: position\n\t\t};\n\t};\n\n\tvar moveTo = function (rect, toRect) {\n\t\treturn {x: toRect.x, y: toRect.y, w: rect.w, h: rect.h};\n\t};\n\n\tvar calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {\n\t\tvar relPos, relRect, outputPanelRect;\n\n\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions1);\n\t\ttargetRect = Rect.clamp(targetRect, contentAreaRect);\n\n\t\tif (relPos) {\n\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\ttargetRect = Rect.intersect(contentAreaRect, targetRect);\n\t\tif (targetRect) {\n\t\t\trelPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions2);\n\t\t\tif (relPos) {\n\t\t\t\trelRect = Rect.relativePosition(panelRect, targetRect, relPos);\n\t\t\t\toutputPanelRect = moveTo(panelRect, relRect);\n\t\t\t\treturn result(outputPanelRect, relPos);\n\t\t\t}\n\n\t\t\toutputPanelRect = moveTo(panelRect, targetRect);\n\t\t\treturn result(outputPanelRect, relPos);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar calcInsert = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['cr-cl', 'cl-cr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar calc = function (targetRect, contentAreaRect, panelRect) {\n\t\treturn calcByPositions(\n\t\t\t['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr'],\n\t\t\t['bc-tc', 'bl-tl', 'br-tr'],\n\t\t\ttargetRect,\n\t\t\tcontentAreaRect,\n\t\t\tpanelRect\n\t\t);\n\t};\n\n\tvar userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {\n\t\tvar userConstrainedPanelRect;\n\n\t\tif (typeof handler === 'function') {\n\t\t\tuserConstrainedPanelRect = handler({\n\t\t\t\telementRect: Convert.toClientRect(targetRect),\n\t\t\t\tcontentAreaRect: Convert.toClientRect(contentAreaRect),\n\t\t\t\tpanelRect: Convert.toClientRect(panelRect)\n\t\t\t});\n\n\t\t\treturn Convert.fromClientRect(userConstrainedPanelRect);\n\t\t}\n\n\t\treturn panelRect;\n\t};\n\n\treturn {\n\t\tcalcInsert: calcInsert,\n\t\tcalc: calc,\n\t\tuserConstrain: userConstrain\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Matcher.js",
    "content": "/**\n * Matcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Matcher', [\n], function () {\n\t// result :: String, Rect -> Matcher.result\n\tvar result = function (id, rect) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\trect: rect\n\t\t};\n\t};\n\n\t// match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null\n\tvar match = function (editor, matchers) {\n\t\tfor (var i = 0; i < matchers.length; i++) {\n\t\t\tvar f = matchers[i];\n\t\t\tvar result = f(editor);\n\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t};\n\n\treturn {\n\t\tmatch: match,\n\t\tresult: result\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js",
    "content": "/**\n * Measure.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/Measure', [\n\t'global!tinymce.DOM',\n\t'global!tinymce.geom.Rect',\n\t'tinymce/inlite/core/Convert'\n], function (DOM, Rect, Convert) {\n\tvar toAbsolute = function (rect) {\n\t\tvar vp = DOM.getViewPort();\n\n\t\treturn {\n\t\t\tx: rect.x + vp.x,\n\t\t\ty: rect.y + vp.y,\n\t\t\tw: rect.w,\n\t\t\th: rect.h\n\t\t};\n\t};\n\n\tvar measureElement = function (elm) {\n\t\tvar clientRect = elm.getBoundingClientRect();\n\n\t\treturn toAbsolute({\n\t\t\tx: clientRect.left,\n\t\t\ty: clientRect.top,\n\t\t\tw: Math.max(elm.clientWidth, elm.offsetWidth),\n\t\t\th: Math.max(elm.clientHeight, elm.offsetHeight)\n\t\t});\n\t};\n\n\tvar getElementRect = function (editor, elm) {\n\t\treturn measureElement(elm);\n\t};\n\n\tvar getPageAreaRect = function (editor) {\n\t\treturn measureElement(editor.getElement().ownerDocument.body);\n\t};\n\n\tvar getContentAreaRect = function (editor) {\n\t\treturn measureElement(editor.getContentAreaContainer() || editor.getBody());\n\t};\n\n\tvar getSelectionRect = function (editor) {\n\t\tvar clientRect = editor.selection.getBoundingClientRect();\n\t\treturn clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null;\n\t};\n\n\treturn {\n\t\tgetElementRect: getElementRect,\n\t\tgetPageAreaRect: getPageAreaRect,\n\t\tgetContentAreaRect: getContentAreaRect,\n\t\tgetSelectionRect: getSelectionRect\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/PredicateId.js",
    "content": "/**\n * PredicateId.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/PredicateId', [\n\t'global!tinymce.util.Tools'\n], function (Tools) {\n\tvar create = function (id, predicate) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tpredicate: predicate\n\t\t};\n\t};\n\n\t// fromContextToolbars :: [ContextToolbar] -> [PredicateId]\n\tvar fromContextToolbars = function (toolbars) {\n\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\treturn create(toolbar.id, toolbar.predicate);\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create,\n\t\tfromContextToolbars: fromContextToolbars\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SelectionMatcher.js",
    "content": "/**\n * SelectionMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SelectionMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// textSelection :: String -> (Editor -> Matcher.result | Null)\n\tvar textSelection = function (id) {\n\t\treturn function (editor) {\n\t\t\tif (!editor.selection.isCollapsed()) {\n\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)\n\tvar emptyTextBlock = function (elements, id) {\n\t\treturn function (editor) {\n\t\t\tvar i, textBlockElementsMap = editor.schema.getTextBlockElements();\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName === 'TABLE') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName in textBlockElementsMap) {\n\t\t\t\t\tif (editor.dom.isEmpty(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\ttextSelection: textSelection,\n\t\temptyTextBlock: emptyTextBlock\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SkinLoader.js",
    "content": "/**\n * SkinLoader.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SkinLoader', [\n\t'global!tinymce.EditorManager',\n\t'global!tinymce.DOM'\n], function (EditorManager, DOM) {\n\tvar fireSkinLoaded = function (editor, callback) {\n\t\tvar done = function () {\n\t\t\teditor.fire('SkinLoaded');\n\t\t\tcallback();\n\t\t};\n\n\t\tif (editor.initialized) {\n\t\t\tdone();\n\t\t} else {\n\t\t\teditor.on('init', done);\n\t\t}\n\t};\n\n\tvar load = function (editor, skin, callback) {\n\t\tvar baseUrl = EditorManager.baseURL;\n\t\tvar skinUrl = baseUrl + '/skins/' + skin;\n\n\t\tvar done = function () {\n\t\t\tfireSkinLoaded(editor, callback);\n\t\t};\n\n\t\tDOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);\n\t\teditor.contentCSS.push(skinUrl + '/content.inline.min.css');\n\t};\n\n\treturn {\n\t\tload: load\n\t};\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js",
    "content": "/**\n * UrlType.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/UrlType', [\n], function () {\n\tvar isDomainLike = function (href) {\n\t\treturn /^www\\.|\\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());\n\t};\n\n\tvar isAbsolute = function (href) {\n\t\treturn /^https?:\\/\\//.test(href.trim());\n\t};\n\n\treturn {\n\t\tisDomainLike: isDomainLike,\n\t\tisAbsolute: isAbsolute\n\t};\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Conversions.js",
    "content": "/**\n * Conversions.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Conversions', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar blobToBase64 = function (blob) {\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar reader = new FileReader();\n\n\t\t\treader.onloadend = function() {\n\t\t\t\tresolve(reader.result.split(',')[1]);\n\t\t\t};\n\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t};\n\n\treturn {\n\t\tblobToBase64: blobToBase64\n\t};\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Picker.js",
    "content": "/**\n * Picker.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/file/Picker', [\n\t'global!tinymce.util.Promise'\n], function (Promise) {\n\tvar pickFile = function () {\n\t\treturn new Promise(function (resolve) {\n\t\t\tvar fileInput;\n\n\t\t\tfileInput = document.createElement(\"input\");\n\t\t\tfileInput.type = \"file\";\n\t\t\tfileInput.style.position = 'fixed';\n\t\t\tfileInput.style.left = 0;\n\t\t\tfileInput.style.top = 0;\n\t\t\tfileInput.style.opacity = 0.001;\n\t\t\tdocument.body.appendChild(fileInput);\n\n\t\t\tfileInput.onchange = function(e) {\n\t\t\t\tresolve(Array.prototype.slice.call(e.target.files));\n\t\t\t};\n\n\t\t\tfileInput.click();\n\t\t\tfileInput.parentNode.removeChild(fileInput);\n\t\t});\n\t};\n\n\treturn {\n\t\tpickFile: pickFile\n\t};\n});\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js",
    "content": "/**\n * Buttons.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Buttons', [\n\t'tinymce/inlite/ui/Panel',\n\t'tinymce/inlite/file/Conversions',\n\t'tinymce/inlite/file/Picker',\n\t'tinymce/inlite/core/Actions'\n], function (Panel, Conversions, Picker, Actions) {\n\tvar addHeaderButtons = function (editor) {\n\t\tvar formatBlock = function (name) {\n\t\t\treturn function () {\n\t\t\t\tActions.formatBlock(editor, name);\n\t\t\t};\n\t\t};\n\n\t\tfor (var i = 1; i < 6; i++) {\n\t\t\tvar name = 'h' + i;\n\n\t\t\teditor.addButton(name, {\n\t\t\t\ttext: name.toUpperCase(),\n\t\t\t\ttooltip: 'Heading ' + i,\n\t\t\t\tstateSelector: name,\n\t\t\t\tonclick: formatBlock(name),\n\t\t\t\tonPostRender: function () {\n\t\t\t\t\t// TODO: Remove this hack that produces bold H1-H6 when we have proper icons\n\t\t\t\t\tvar span = this.getEl().firstChild.firstChild;\n\t\t\t\t\tspan.style.fontWeight = 'bold';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tvar addToEditor = function (editor, panel) {\n\t\teditor.addButton('quicklink', {\n\t\t\ticon: 'link',\n\t\t\ttooltip: 'Insert/Edit link',\n\t\t\tstateSelector: 'a[href]',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.showForm(editor, 'quicklink');\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quickimage', {\n\t\t\ticon: 'image',\n\t\t\ttooltip: 'Insert image',\n\t\t\tonclick: function () {\n\t\t\t\tPicker.pickFile().then(function (files) {\n\t\t\t\t\tvar blob = files[0];\n\n\t\t\t\t\tConversions.blobToBase64(blob).then(function (base64) {\n\t\t\t\t\t\tActions.insertBlob(editor, base64, blob);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\teditor.addButton('quicktable', {\n\t\t\ticon: 'table',\n\t\t\ttooltip: 'Insert table',\n\t\t\tonclick: function () {\n\t\t\t\tpanel.hide();\n\t\t\t\tActions.insertTable(editor, 2, 2);\n\t\t\t}\n\t\t});\n\n\t\taddHeaderButtons(editor);\n\t};\n\n\treturn {\n\t\taddToEditor: addToEditor\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Forms.js",
    "content": "/**\n * Forms.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Forms', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.util.Promise',\n\t'tinymce/inlite/core/Actions',\n\t'tinymce/inlite/core/UrlType'\n], function (Tools, Factory, Promise, Actions, UrlType) {\n\tvar focusFirstTextBox = function (form) {\n\t\tform.find('textbox').eq(0).each(function (ctrl) {\n\t\t\tctrl.focus();\n\t\t});\n\t};\n\n\tvar createForm = function (name, spec) {\n\t\tvar form = Factory.create(\n\t\t\tTools.extend({\n\t\t\t\ttype: 'form',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'row',\n\t\t\t\tpadding: 5,\n\t\t\t\tname: name,\n\t\t\t\tspacing: 3\n\t\t\t}, spec)\n\t\t);\n\n\t\tform.on('show', function () {\n\t\t\tfocusFirstTextBox(form);\n\t\t});\n\n\t\treturn form;\n\t};\n\n\tvar toggleVisibility = function (ctrl, state) {\n\t\treturn state ? ctrl.show() : ctrl.hide();\n\t};\n\n\tvar askAboutPrefix = function (editor, href) {\n\t\treturn new Promise(function (resolve) {\n\t\t\teditor.windowManager.confirm(\n\t\t\t\t'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',\n\t\t\t\tfunction (result) {\n\t\t\t\t\tvar output = result === true ? 'http://' + href : href;\n\t\t\t\t\tresolve(output);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tvar convertLinkToAbsolute = function (editor, href) {\n\t\treturn !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);\n\t};\n\n\tvar createQuickLinkForm = function (editor, hide) {\n\t\tvar unlink = function () {\n\t\t\teditor.focus();\n\t\t\tActions.unlink(editor);\n\t\t\thide();\n\t\t};\n\n\t\treturn createForm('quicklink', {\n\t\t\titems: [\n\t\t\t\t{type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link'},\n\t\t\t\t{type: 'textbox', name: 'linkurl', placeholder: 'Paste or type a link'},\n\t\t\t\t{type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit'}\n\t\t\t],\n\t\t\tonshow: function () {\n\t\t\t\tvar elm, linkurl = '';\n\n\t\t\t\telm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');\n\t\t\t\tif (elm) {\n\t\t\t\t\tlinkurl = editor.dom.getAttrib(elm, 'href');\n\t\t\t\t}\n\n\t\t\t\tthis.fromJSON({\n\t\t\t\t\tlinkurl: linkurl\n\t\t\t\t});\n\n\t\t\t\ttoggleVisibility(this.find('#unlink'), elm);\n\t\t\t},\n\t\t\tonsubmit: function (e) {\n\t\t\t\tconvertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {\n\t\t\t\t\tActions.createLink(editor, url);\n\t\t\t\t\thide();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tcreateQuickLinkForm: createQuickLinkForm\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Panel.js",
    "content": "/**\n * Panel.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Panel', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory',\n\t'global!tinymce.DOM',\n\t'tinymce/inlite/ui/Toolbar',\n\t'tinymce/inlite/ui/Forms',\n\t'tinymce/inlite/core/Measure',\n\t'tinymce/inlite/core/Layout'\n], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {\n\treturn function () {\n\t\tvar DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';\n\t\tvar DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';\n\t\tvar panel, currentRect;\n\n\t\tvar createToolbars = function (editor, toolbars) {\n\t\t\treturn Tools.map(toolbars, function (toolbar) {\n\t\t\t\treturn Toolbar.create(editor, toolbar.id, toolbar.items);\n\t\t\t});\n\t\t};\n\n\t\tvar getTextSelectionToolbarItems = function (settings) {\n\t\t\tvar value = settings.selection_toolbar;\n\t\t\treturn value ? value : DEFAULT_TEXT_SELECTION_ITEMS;\n\t\t};\n\n\t\tvar getInsertToolbarItems = function (settings) {\n\t\t\tvar value = settings.insert_toolbar;\n\t\t\treturn value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;\n\t\t};\n\n\t\tvar create = function (editor, toolbars) {\n\t\t\tvar items, settings = editor.settings;\n\n\t\t\titems = createToolbars(editor, toolbars);\n\t\t\titems = items.concat([\n\t\t\t\tToolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),\n\t\t\t\tToolbar.create(editor, 'insert', getInsertToolbarItems(settings)),\n\t\t\t\tForms.createQuickLinkForm(editor, hide)\n\t\t\t]);\n\n\t\t\treturn Factory.create({\n\t\t\t\ttype: 'floatpanel',\n\t\t\t\trole: 'dialog',\n\t\t\t\tclasses: 'tinymce tinymce-inline arrow',\n\t\t\t\tariaLabel: 'Inline toolbar',\n\t\t\t\tlayout: 'flex',\n\t\t\t\tdirection: 'column',\n\t\t\t\talign: 'stretch',\n\t\t\t\tautohide: false,\n\t\t\t\tautofix: true,\n\t\t\t\tfixed: true,\n\t\t\t\tborder: 1,\n\t\t\t\titems: items,\n\t\t\t\toncancel: function() {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tvar showPanel = function (panel) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.show();\n\t\t\t}\n\t\t};\n\n\t\tvar movePanelTo = function (panel, pos) {\n\t\t\tpanel.moveTo(pos.x, pos.y);\n\t\t};\n\n\t\tvar togglePositionClass = function (panel, relPos) {\n\t\t\trelPos = relPos ? relPos.substr(0, 2) : '';\n\n\t\t\tTools.each({\n\t\t\t\tt: 'down',\n\t\t\t\tb: 'up',\n\t\t\t\tc: 'center'\n\t\t\t}, function(cls, pos) {\n\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));\n\t\t\t});\n\n\t\t\tif (relPos === 'cr') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', false);\n\t\t\t} else if (relPos === 'cl') {\n\t\t\t\tpanel.classes.toggle('arrow-left', true);\n\t\t\t\tpanel.classes.toggle('arrow-right', true);\n\t\t\t} else {\n\t\t\t\tTools.each({\n\t\t\t\t\tl: 'left',\n\t\t\t\t\tr: 'right'\n\t\t\t\t}, function(cls, pos) {\n\t\t\t\t\tpanel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar showToolbar = function (panel, id) {\n\t\t\tvar toolbars = panel.items().filter('#' + id);\n\n\t\t\tif (toolbars.length > 0) {\n\t\t\t\ttoolbars[0].show();\n\t\t\t\tpanel.reflow();\n\t\t\t}\n\t\t};\n\n\t\tvar showPanelAt = function (panel, id, editor, targetRect) {\n\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\tshowPanel(panel);\n\t\t\tpanel.items().hide();\n\t\t\tshowToolbar(panel, id);\n\n\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\tif (id === 'insert') {\n\t\t\t\tresult = Layout.calcInsert(targetRect, contentAreaRect, panelRect);\n\t\t\t} else {\n\t\t\t\tresult = Layout.calc(targetRect, contentAreaRect, panelRect);\n\t\t\t}\n\n\t\t\tif (result) {\n\t\t\t\tpanelRect = result.rect;\n\t\t\t\tcurrentRect = targetRect;\n\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));\n\n\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t} else {\n\t\t\t\thide(panel);\n\t\t\t}\n\t\t};\n\n\t\tvar hasFormVisible = function () {\n\t\t\treturn panel.items().filter('form:visible').length > 0;\n\t\t};\n\n\t\tvar showForm = function (editor, id) {\n\t\t\tif (panel) {\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tvar contentAreaRect, panelRect, result, userConstainHandler;\n\n\t\t\t\tshowPanel(panel);\n\t\t\t\tpanel.items().hide();\n\t\t\t\tshowToolbar(panel, id);\n\n\t\t\t\tuserConstainHandler = editor.settings.inline_toolbar_position_handler;\n\t\t\t\tcontentAreaRect = Measure.getContentAreaRect(editor);\n\t\t\t\tpanelRect = DOM.getRect(panel.getEl());\n\n\t\t\t\tresult = Layout.calc(currentRect, contentAreaRect, panelRect);\n\n\t\t\t\tif (result) {\n\t\t\t\t\tpanelRect = result.rect;\n\t\t\t\t\tmovePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));\n\n\t\t\t\t\ttogglePositionClass(panel, result.position);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar show = function (editor, id, targetRect, toolbars) {\n\t\t\tif (!panel) {\n\t\t\t\tpanel = create(editor, toolbars);\n\t\t\t\tpanel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);\n\t\t\t\teditor.nodeChanged();\n\t\t\t}\n\n\t\t\tshowPanelAt(panel, id, editor, targetRect);\n\t\t};\n\n\t\tvar hide = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.hide();\n\t\t\t}\n\t\t};\n\n\t\tvar focus = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.find('toolbar:visible').eq(0).each(function (item) {\n\t\t\t\t\titem.focus(true);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvar remove = function () {\n\t\t\tif (panel) {\n\t\t\t\tpanel.remove();\n\t\t\t\tpanel = null;\n\t\t\t}\n\t\t};\n\n\t\tvar inForm = function () {\n\t\t\treturn panel && panel.visible() && hasFormVisible();\n\t\t};\n\n\t\treturn {\n\t\t\tshow: show,\n\t\t\tshowForm: showForm,\n\t\t\tinForm: inForm,\n\t\t\thide: hide,\n\t\t\tfocus: focus,\n\t\t\tremove: remove\n\t\t};\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Toolbar.js",
    "content": "/**\n * Toolbar.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/ui/Toolbar', [\n\t'global!tinymce.util.Tools',\n\t'global!tinymce.ui.Factory'\n], function (Tools, Factory) {\n\tvar setActiveItem = function (item, name) {\n\t\treturn function(state, args) {\n\t\t\tvar nodeName, i = args.parents.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tnodeName = args.parents[i].nodeName;\n\t\t\t\tif (nodeName == 'OL' || nodeName == 'UL') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.active(state && nodeName == name);\n\t\t};\n\t};\n\n\tvar getSelectorStateResult = function (itemName, item) {\n\t\tvar result = function (selector, handler) {\n\t\t\treturn {\n\t\t\t\tselector: selector,\n\t\t\t\thandler: handler\n\t\t\t};\n\t\t};\n\n\t\tvar activeHandler = function(state) {\n\t\t\titem.active(state);\n\t\t};\n\n\t\tvar disabledHandler = function (state) {\n\t\t\titem.disabled(state);\n\t\t};\n\n\t\tif (itemName == 'bullist') {\n\t\t\treturn result('ul > li', setActiveItem(item, 'UL'));\n\t\t}\n\n\t\tif (itemName == 'numlist') {\n\t\t\treturn result('ol > li', setActiveItem(item, 'OL'));\n\t\t}\n\n\t\tif (item.settings.stateSelector) {\n\t\t\treturn result(item.settings.stateSelector, activeHandler);\n\t\t}\n\n\t\tif (item.settings.disabledStateSelector) {\n\t\t\treturn result(item.settings.disabledStateSelector, disabledHandler);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tvar bindSelectorChanged = function (editor, itemName, item) {\n\t\treturn function () {\n\t\t\tvar result = getSelectorStateResult(itemName, item);\n\t\t\tif (result !== null) {\n\t\t\t\teditor.selection.selectorChanged(result.selector, result.handler);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar create = function (editor, name, items) {\n\t\tvar toolbarItems = [], buttonGroup;\n\n\t\tif (!items) {\n\t\t\treturn;\n\t\t}\n\n\t\tTools.each(items.split(/[ ,]/), function(item) {\n\t\t\tvar itemName;\n\n\t\t\tif (item == '|') {\n\t\t\t\tbuttonGroup = null;\n\t\t\t} else {\n\t\t\t\tif (Factory.has(item)) {\n\t\t\t\t\titem = {type: item};\n\t\t\t\t\ttoolbarItems.push(item);\n\t\t\t\t\tbuttonGroup = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!buttonGroup) {\n\t\t\t\t\t\tbuttonGroup = {type: 'buttongroup', items: []};\n\t\t\t\t\t\ttoolbarItems.push(buttonGroup);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (editor.buttons[item]) {\n\t\t\t\t\t\titemName = item;\n\t\t\t\t\t\titem = editor.buttons[itemName];\n\n\t\t\t\t\t\tif (typeof item == 'function') {\n\t\t\t\t\t\t\titem = item();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.type = item.type || 'button';\n\n\t\t\t\t\t\titem = Factory.create(item);\n\t\t\t\t\t\titem.on('postRender', bindSelectorChanged(editor, itemName, item));\n\t\t\t\t\t\tbuttonGroup.items.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn Factory.create({\n\t\t\ttype: 'toolbar',\n\t\t\tlayout: 'flow',\n\t\t\tname: name,\n\t\t\titems: toolbarItems\n\t\t});\n\t};\n\n\treturn {\n\t\tcreate: create\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/.eslintrc",
    "content": "{\n  \"env\": {\n    \"browser\": true,\n    \"amd\": true\n  },\n\n  \"globals\": {\n    \"assert\": true,\n    \"test\": true,\n    \"asynctest\": true\n  },\n\n  \"extends\": \"../../../../../../.eslintrc\"\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/atomic/alien/ArrTest.js",
    "content": "test('atomic/alien/ArrTest', [\n\t'tinymce/inlite/alien/Arr'\n], function (Arr) {\n\tvar testFlatten = function () {\n\t\tassert.eq(Arr.flatten([1, 2, [3, 4, [5, 6]], [7, 8], 9]), [1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\t};\n\n\ttestFlatten();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/atomic/alien/UuidTest.js",
    "content": "test('atomic/alien/UuidTest', [\n\t'tinymce/inlite/alien/Uuid'\n], function (Uuid) {\n\tvar testUuid = function () {\n\t\tassert.eq(Uuid.uuid('mce').indexOf('mce'), 0);\n\t\tassert.eq(Uuid.uuid('mce') !== Uuid.uuid('mce'), true);\n\t};\n\n\ttestUuid();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/atomic/core/ConvertTest.js",
    "content": "test('atomic/core/ConvertTest', [\n\t'tinymce/inlite/core/Convert'\n], function (Convert) {\n\tvar testConvert = function () {\n\t\tassert.eq({x: 1, y: 2, w: 3, h: 4}, Convert.fromClientRect({left: 1, top: 2, width: 3, height: 4}));\n\t\tassert.eq({x: 2, y: 3, w: 4, h: 5}, Convert.fromClientRect({left: 2, top: 3, width: 4, height: 5}));\n\t\tassert.eq({left: 1, top: 2, width: 3, height: 4, bottom: 2 + 4, right: 1 + 3}, Convert.toClientRect({x: 1, y: 2, w: 3, h: 4}));\n\t\tassert.eq({left: 2, top: 3, width: 4, height: 5, bottom: 3 + 5, right: 2 + 4}, Convert.toClientRect({x: 2, y: 3, w: 4, h: 5}));\n\t};\n\n\ttestConvert();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/atomic/core/MatcherTest.js",
    "content": "test('browser/atomic/MatcherTest', [\n\t'tinymce/inlite/core/Matcher'\n], function (Matcher) {\n\tvar testMatch = function (mockEditor, matches, expectedResult) {\n\t\tvar result;\n\n\t\tresult = Matcher.match(mockEditor, matches);\n\t\tassert.eq(expectedResult, result);\n\t};\n\n\tvar match = function (key) {\n\t\treturn function (editor) {\n\t\t\treturn editor[key];\n\t\t};\n\t};\n\n\tvar testMatcher = function () {\n\t\tvar mockEditor = {\n\t\t\tsuccess1: 'success1',\n\t\t\tsuccess2: 'success2',\n\t\t\tfailure: null\n\t\t};\n\n\t\ttestMatch(mockEditor, [\n\t\t\tmatch('success1')\n\t\t], 'success1');\n\n\t\ttestMatch(mockEditor, [\n\t\t\tmatch(null),\n\t\t\tmatch('success2')\n\t\t], 'success2');\n\n\t\ttestMatch(mockEditor, [\n\t\t\tmatch('success1'),\n\t\t\tmatch('success2')\n\t\t], 'success1');\n\n\t\ttestMatch(mockEditor, [\n\t\t\tmatch(null)\n\t\t], null);\n\n\t\ttestMatch(mockEditor, [\n\t\t\tmatch(null),\n\t\t\tmatch(null)\n\t\t], null);\n\n\t\ttestMatch(mockEditor, [], null);\n\t};\n\n\ttestMatcher();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/atomic/core/UrlTypeTest.js",
    "content": "test('atomic/core/UrlTypeTest', [\n\t'tinymce/inlite/core/UrlType'\n], function (UrlType) {\n\tvar testIsDomainLike = function () {\n\t\tvar mostUsedTopLevelDomains = [\n\t\t\t'com', 'org', 'edu', 'gov', 'uk', 'net', 'ca', 'de', 'jp',\n\t\t\t'fr', 'au', 'us', 'ru', 'ch', 'it', 'nl', 'se', 'no', 'es', 'mil'\n\t\t];\n\n\t\tassert.eq(UrlType.isDomainLike('www.site.com'), true);\n\t\tassert.eq(UrlType.isDomainLike('www.site.xyz'), true);\n\t\tassert.eq(UrlType.isDomainLike('   www.site.xyz'), true);\n\t\tassert.eq(UrlType.isDomainLike('site.xyz'), false);\n\n\t\tmostUsedTopLevelDomains.forEach(function (tld) {\n\t\t\tassert.eq(UrlType.isDomainLike('site.' + tld), true);\n\t\t\tassert.eq(UrlType.isDomainLike('  site.' + tld), true);\n\t\t\tassert.eq(UrlType.isDomainLike('site.' + tld + '  '), true);\n\t\t});\n\n\t\tassert.eq(UrlType.isDomainLike('/a/b'), false);\n\t};\n\n\tvar testIsAbsoluteUrl = function () {\n\t\tassert.eq(UrlType.isAbsolute('http://www.site.com'), true);\n\t\tassert.eq(UrlType.isAbsolute('https://www.site.com'), true);\n\t\tassert.eq(UrlType.isAbsolute('www.site.com'), false);\n\t\tassert.eq(UrlType.isAbsolute('file.gif'), false);\n\t};\n\n\ttestIsDomainLike();\n\ttestIsAbsoluteUrl();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/ThemeTest.js",
    "content": "asynctest('browser/core/ThemeTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'ephox.mcagar.api.TinyApis',\n\t'ephox.mcagar.api.TinyActions',\n\t'ephox.mcagar.api.TinyDom',\n\t'tinymce/inlite/Theme',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.agar.api.Chain',\n\t'ephox.agar.api.UiFinder',\n\t'ephox.agar.api.Mouse',\n\t'ephox.agar.api.GeneralSteps',\n\t'ephox.agar.api.UiControls',\n\t'ephox.agar.api.FocusTools'\n], function (TinyLoader, TinyApis, TinyActions, TinyDom, Theme, Pipeline, Chain, UiFinder, Mouse, GeneralSteps, UiControls, FocusTools) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\tvar dialogRoot = TinyDom.fromDom(document.body);\n\n\tvar cWaitForContextToolbar = Chain.fromChainsWith(dialogRoot, [\n\t\tUiFinder.cWaitForState('label', '.mce-tinymce-inline', function (elm) {\n\t\t\treturn elm.dom().style.display === \"\";\n\t\t})\n\t]);\n\n\tvar cClickToolbarButton = function (ariaLabel) {\n\t\treturn Chain.fromChains([\n\t\t\tUiFinder.cFindIn('div[aria-label=\"' + ariaLabel + '\"]'),\n\t\t\tMouse.cTrueClick\n\t\t]);\n\t};\n\n\tvar sClickFocusedButton = Chain.asStep(TinyDom.fromDom(document), [\n\t\tFocusTools.cGetFocused,\n\t\tMouse.cTrueClick\n\t]);\n\n\tvar sClickContextButton = function (ariaLabel) {\n\t\treturn Chain.asStep({}, [\n\t\t\tcWaitForContextToolbar,\n\t\t\tcClickToolbarButton(ariaLabel)\n\t\t]);\n\t};\n\n\tvar sWaitForToolbar = function () {\n\t\treturn Chain.asStep({}, [\n\t\t\tcWaitForContextToolbar\n\t\t]);\n\t};\n\n\tvar sBoldTests = function (tinyApis) {\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent('<p>a</p>'),\n\t\t\ttinyApis.sSetSelection([0, 0], 0, [0, 0], 1),\n\t\t\tsClickContextButton('Bold'),\n\t\t\ttinyApis.sAssertContent('<p><strong>a</strong></p>')\n\t\t]);\n\t};\n\n\tvar sH2Tests = function (tinyApis) {\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent('<p>a</p>'),\n\t\t\ttinyApis.sSetSelection([0, 0], 0, [0, 0], 1),\n\t\t\tsClickContextButton('Heading 2'),\n\t\t\ttinyApis.sAssertContent('<h2>a</h2>')\n\t\t]);\n\t};\n\n\tvar sInsertLink = function (url) {\n\t\treturn Chain.asStep({}, [\n\t\t\tcWaitForContextToolbar,\n\t\t\tcClickToolbarButton('Insert/Edit link'),\n\t\t\tcWaitForContextToolbar,\n\t\t\tUiFinder.cFindIn('input'),\n\t\t\tUiControls.cSetValue(url),\n\t\t\tcWaitForContextToolbar,\n\t\t\tcClickToolbarButton('Ok')\n\t\t]);\n\t};\n\n\tvar cWaitForConfirmDialog = Chain.fromChainsWith(dialogRoot, [\n\t\tUiFinder.cWaitForState('window element', '.mce-window', function () {\n\t\t\treturn true;\n\t\t})\n\t]);\n\n\tvar cClickButton = function (btnText) {\n\t\treturn Chain.fromChains([\n\t\t\tUiFinder.cFindIn('button:contains(\"' + btnText + '\")'),\n\t\t\tMouse.cTrueClick\n\t\t]);\n\t};\n\n\tvar sClickConfirmButton = function (btnText) {\n\t\treturn Chain.asStep({}, [\n\t\t\tcWaitForConfirmDialog,\n\t\t\tcClickButton(btnText)\n\t\t]);\n\t};\n\n\tvar sInsertLinkConfirmPrefix = function (url, btnText) {\n\t\treturn GeneralSteps.sequence([\n\t\t\tsInsertLink(url),\n\t\t\tsClickConfirmButton(btnText)\n\t\t]);\n\t};\n\n\tvar sUnlink = Chain.asStep({}, [\n\t\tcWaitForContextToolbar,\n\t\tcClickToolbarButton('Insert/Edit link'),\n\t\tcWaitForContextToolbar,\n\t\tcClickToolbarButton('Remove link')\n\t]);\n\n\tvar sLinkTests = function (tinyApis) {\n\t\tvar sContentActionTest = function (inputHtml, spath, soffset, fpath, foffset, expectedHtml, sAction) {\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\t\ttinyApis.sSetSelection(spath, soffset, fpath, foffset),\n\t\t\t\tsAction,\n\t\t\t\ttinyApis.sAssertContent(expectedHtml)\n\t\t\t]);\n\t\t};\n\n\t\tvar sLinkTest = function (inputHtml, spath, soffset, fpath, foffset, url, expectedHtml) {\n\t\t\treturn sContentActionTest(inputHtml, spath, soffset, fpath, foffset, expectedHtml, sInsertLink(url));\n\t\t};\n\n\t\tvar sUnlinkTest = function (inputHtml, spath, soffset, fpath, foffset, expectedHtml) {\n\t\t\treturn sContentActionTest(inputHtml, spath, soffset, fpath, foffset, expectedHtml, sUnlink);\n\t\t};\n\n\t\tvar sLinkWithConfirmOkTest = function (inputHtml, spath, soffset, fpath, foffset, url, expectedHtml) {\n\t\t\treturn sContentActionTest(inputHtml, spath, soffset, fpath, foffset, expectedHtml, sInsertLinkConfirmPrefix(url, 'Ok'));\n\t\t};\n\n\t\tvar sLinkWithConfirmCancelTest = function (inputHtml, spath, soffset, fpath, foffset, url, expectedHtml) {\n\t\t\treturn sContentActionTest(inputHtml, spath, soffset, fpath, foffset, expectedHtml, sInsertLinkConfirmPrefix(url, 'Cancel'));\n\t\t};\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsLinkWithConfirmOkTest('<p>a</p>', [0, 0], 0, [0, 0], 1, 'www.site.com', '<p><a href=\"http://www.site.com\">a</a></p>'),\n\t\t\tsLinkWithConfirmCancelTest('<p>a</p>', [0, 0], 0, [0, 0], 1, 'www.site.com', '<p><a href=\"www.site.com\">a</a></p>'),\n\t\t\tsLinkTest('<p>a</p>', [0, 0], 0, [0, 0], 1, '#1', '<p><a href=\"#1\">a</a></p>'),\n\t\t\tsLinkTest('<p><a id=\"x\" href=\"#1\">a</a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '#2', '<p><a id=\"x\" href=\"#2\">a</a></p>'),\n\t\t\tsLinkTest('<p><a href=\"#3\">a</a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '', '<p>a</p>'),\n\t\t\tsUnlinkTest('<p><a id=\"x\" href=\"#1\">a</a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '<p>a</p>')\n\t\t]);\n\t};\n\n\tvar sInsertTableTests = function (tinyApis) {\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent('<p><br></p><p>b</p>'),\n\t\t\ttinyApis.sSetCursor([0], 0),\n\t\t\tsClickContextButton('Insert table'),\n\t\t\ttinyApis.sAssertContent([\n\t\t\t\t\t'<table style=\"width: 100%;\">',\n\t\t\t\t\t\t'<tbody>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t'</tbody>',\n\t\t\t\t\t'</table>',\n\t\t\t\t\t'<p>b</p>'\n\t\t\t\t].join('\\n')\n\t\t\t)\n\t\t]);\n\t};\n\n\tvar sAriaTests = function (tinyApis, tinyActions) {\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent('<p>a</p>'),\n\t\t\ttinyApis.sSetSelection([0, 0], 0, [0, 0], 1),\n\t\t\tsWaitForToolbar(),\n\t\t\ttinyActions.sContentKeydown(121, {alt: true}),\n\t\t\tsClickFocusedButton,\n\t\t\ttinyApis.sAssertContent('<p><strong>a</strong></p>')\n\t\t]);\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor), tinyActions = TinyActions(editor);\n\n\t\tPipeline.async({}, [\n\t\t\tsBoldTests(tinyApis),\n\t\t\tsH2Tests(tinyApis),\n\t\t\tsLinkTests(tinyApis),\n\t\t\tsInsertTableTests(tinyApis),\n\t\t\tsAriaTests(tinyApis, tinyActions)\n\t\t], onSuccess, onFailure);\n\t}, {\n\t\ttheme: 'inlite',\n\t\tplugins: 'image table link paste contextmenu textpattern',\n\t\tinsert_toolbar: 'quickimage media quicktable',\n\t\tselection_toolbar: 'bold italic | quicklink h1 h2 blockquote',\n\t\tinline: true\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/alien/BookmarkTest.js",
    "content": "asynctest('browser/alien/BookmarkTest', [\n\t'ephox/tinymce',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.agar.api.Chain',\n\t'ephox.agar.api.Cursors',\n\t'ephox.agar.api.Assertions',\n\t'ephox.mcagar.api.TinyDom',\n\t'tinymce/inlite/alien/Bookmark'\n], function (tinymce, Pipeline, Chain, Cursors, Assertions, TinyDom, Bookmark) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar toNativeRange = function (range) {\n\t\tvar domRange = document.createRange();\n\t\tdomRange.setStart(range.start().dom(), range.soffset());\n\t\tdomRange.setEnd(range.finish().dom(), range.foffset());\n\t\treturn domRange;\n\t};\n\n\tvar rangeToBookmark = function (dom) {\n\t\treturn function (range) {\n\t\t\treturn Bookmark.create(dom, range);\n\t\t};\n\t};\n\n\tvar bookmarkToRange = function (dom) {\n\t\treturn function (bookmark) {\n\t\t\treturn Bookmark.resolve(dom, bookmark);\n\t\t};\n\t};\n\n\tvar cAssertRangeEq = function (expected) {\n\t\treturn Chain.op(function (actual) {\n\t\t\tAssertions.assertEq('Not equal startContainer', expected.start().dom(), actual.startContainer);\n\t\t\tAssertions.assertEq('Not equal startOffset', expected.soffset(), actual.startOffset);\n\t\t\tAssertions.assertEq('Not equal endContainer', expected.finish().dom(), actual.endContainer);\n\t\t\tAssertions.assertEq('Not equal endOffset', expected.foffset(), actual.endOffset);\n\t\t});\n\t};\n\n\tvar sTestBookmark = function (html, path) {\n\t\tvar dom = tinymce.DOM;\n\t\tvar elm = TinyDom.fromDom(dom.create('div', {}, html));\n\n\t\treturn Chain.asStep(elm, [\n\t\t\tCursors.cFollowPath(Cursors.pathFrom(path)),\n\t\t\tChain.mapper(toNativeRange),\n\t\t\tChain.mapper(rangeToBookmark(dom)),\n\t\t\tChain.mapper(bookmarkToRange(dom)),\n\t\t\tcAssertRangeEq(Cursors.calculate(elm, Cursors.pathFrom(path)))\n\t\t]);\n\t};\n\n\tPipeline.async({}, [\n\t\tsTestBookmark('abc', {element: [0], offset: 0}),\n\t\tsTestBookmark('abc', {element: [0], offset: 1}),\n\t\tsTestBookmark('abc', {start: {element: [0], offset: 0}, finish: {element: [0], offset: 1}}),\n\t\tsTestBookmark('<b>a</b>', {element: [0, 0], offset: 0}),\n\t\tsTestBookmark('<b>a</b>', {element: [0, 0], offset: 0}),\n\t\tsTestBookmark('<b>a</b>', {start: {element: [0, 0], offset: 0}, finish: {element: [0, 0], offset: 1}}),\n\t\tsTestBookmark('<b>a</b><b>b</b>', {start: {element: [0, 0], offset: 0}, finish: {element: [1, 0], offset: 1}})\n\t], function () {\n\t\tsuccess();\n\t}, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/alien/UnlinkTest.js",
    "content": "asynctest('browser/alien/UnlinkTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'ephox.mcagar.api.TinyApis',\n\t'tinymce/inlite/alien/Unlink',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.GeneralSteps'\n], function (TinyLoader, TinyApis, Unlink, Pipeline, Step, GeneralSteps) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar sUnlinkSelection = function (editor) {\n\t\treturn Step.sync(function () {\n\t\t\tUnlink.unlinkSelection(editor);\n\t\t});\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor);\n\n\t\tvar sAssertUnlink = function (inputHtml, startPath, startOffset, finishPath, finishOffset, expectedHtml) {\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\t\ttinyApis.sSetSelection(startPath, startOffset, finishPath, finishOffset),\n\t\t\t\tsUnlinkSelection(editor),\n\t\t\t\ttinyApis.sAssertContent(expectedHtml, 'Should match expected anchor less html')\n\t\t\t]);\n\t\t};\n\n\t\tPipeline.async({}, [\n\t\t\tsAssertUnlink('<p><a href=\"#\">a</a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '<p>a</p>'),\n\t\t\tsAssertUnlink('<p><a href=\"#\">a</a>b</p>', [0, 0, 0], 0, [0, 1], 1, '<p>ab</p>'),\n\t\t\tsAssertUnlink('<p><a href=\"#\">a</a><p><a href=\"#\">b</a>', [0, 0, 0], 0, [0, 0, 0], 1, '<p>a</p>\\n<p><a href=\"#\">b</a></p>'),\n\t\t\tsAssertUnlink('<p><a href=\"#\">a</a><p><a href=\"#\">b</a>', [0, 0, 0], 0, [1, 0, 0], 1, '<p>a</p>\\n<p>b</p>')\n\t\t], onSuccess, onFailure);\n\t}, {\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/ActionsTest.js",
    "content": "asynctest('browser/core/ActionsTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'ephox.mcagar.api.TinyApis',\n\t'tinymce/inlite/core/Actions',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.GeneralSteps'\n], function (TinyLoader, TinyApis, Actions, Pipeline, Step, GeneralSteps) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar wrap = function (f, args) {\n\t\treturn function () {\n\t\t\tvar currentArgs = Array.prototype.slice.call(arguments);\n\t\t\treturn Step.sync(function () {\n\t\t\t\tf.apply(null, [].concat(args).concat(currentArgs));\n\t\t\t});\n\t\t};\n\t};\n\n\tvar sInsertTableTests = function (editor, tinyApis) {\n\t\tvar sInsertTableTest = function (cols, rows, expectedHtml, message) {\n\t\t\tvar sInsertTable = wrap(Actions.insertTable, editor);\n\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(''),\n\t\t\t\tsInsertTable(cols, rows),\n\t\t\t\ttinyApis.sAssertContent(expectedHtml, message)\n\t\t\t]);\n\t\t};\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsInsertTableTest(2, 3, [\n\t\t\t\t\t'<table style=\"width: 100%;\">',\n\t\t\t\t\t\t'<tbody>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t'</tbody>',\n\t\t\t\t\t'</table>'\n\t\t\t\t].join('\\n'),\n\t\t\t\t'Should be a 2x3 table'\n\t\t\t),\n\n\t\t\tsInsertTableTest(3, 2, [\n\t\t\t\t\t'<table style=\"width: 100%;\">',\n\t\t\t\t\t\t'<tbody>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t\t'<tr>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t\t'<td>&nbsp;</td>',\n\t\t\t\t\t\t\t'</tr>',\n\t\t\t\t\t\t'</tbody>',\n\t\t\t\t\t'</table>'\n\t\t\t\t].join('\\n'),\n\t\t\t\t'Should be a 3x2 table'\n\t\t\t)\n\t\t]);\n\t};\n\n\tvar sFormatBlockTests = function (editor, tinyApis) {\n\t\tvar sFormatBlockTest = function (name) {\n\t\t\tvar sFormatBlock = wrap(Actions.formatBlock, editor);\n\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent('<p>a</p>'),\n\t\t\t\ttinyApis.sSetCursor([0], 0),\n\t\t\t\tsFormatBlock(name),\n\t\t\t\ttinyApis.sAssertContent('<' + name + '>a</' + name + '>', 'Should be a ' + name + ' block')\n\t\t\t]);\n\t\t};\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsFormatBlockTest('h1'),\n\t\t\tsFormatBlockTest('h2'),\n\t\t\tsFormatBlockTest('pre')\n\t\t]);\n\t};\n\n\tvar sCreateLinkTests = function (editor, tinyApis) {\n\t\tvar sCreateLinkTest = function (inputHtml, url, sPath, sOffset, fPath, fOffset, expectedHtml) {\n\t\t\tvar sCreateLink = wrap(Actions.createLink, editor);\n\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\t\ttinyApis.sSetSelection(sPath, sOffset, fPath, fOffset),\n\t\t\t\tsCreateLink(url),\n\t\t\t\ttinyApis.sAssertContent(expectedHtml, 'Should have a link')\n\t\t\t]);\n\t\t};\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsCreateLinkTest('<p>a</p>', '#1', [0, 0], 0, [0, 0], 1, '<p><a href=\"#1\">a</a></p>'),\n\t\t\tsCreateLinkTest('<p><a href=\"#1\">a</a></p>', '#2', [0, 0], 0, [0, 0], 1, '<p><a href=\"#2\">a</a></p>'),\n\t\t\tsCreateLinkTest('<p><a href=\"#1\"><em>a</em></a></p>', '#2',\t[0, 0, 0], 0, [0, 0, 0], 1,\t'<p><a href=\"#2\"><em>a</em></a></p>')\n\t\t]);\n\t};\n\n\tvar sUnlinkTests = function (editor, tinyApis) {\n\t\tvar sUnlinkTest = function (inputHtml, sPath, sOffset, fPath, fOffset, expectedHtml) {\n\t\t\tvar sUnlink = wrap(Actions.unlink, editor);\n\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\t\ttinyApis.sSetSelection(sPath, sOffset, fPath, fOffset),\n\t\t\t\tsUnlink(),\n\t\t\t\ttinyApis.sAssertContent(expectedHtml, 'Should not have a link')\n\t\t\t]);\n\t\t};\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsUnlinkTest('<p>a</p>', [0, 0], 0, [0, 0], 1, '<p>a</p>'),\n\t\t\tsUnlinkTest('<p><a href=\"#\">a</a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '<p>a</p>'),\n\t\t\tsUnlinkTest('<p><a href=\"#\"><em>a</em></a></p>', [0, 0, 0], 0, [0, 0, 0], 1, '<p><em>a</em></p>'),\n\t\t\tsUnlinkTest('<p><a href=\"#\">a</a>b</p>', [0, 0, 0], 0, [0, 1], 1, '<p>ab</p>')\n\t\t]);\n\t};\n\n\tvar base64ToBlob = function (base64, type) {\n\t\tvar buff = atob(base64);\n\t\tvar bytes = new Uint8Array(buff.length);\n\n\t\tfor (var i = 0; i < bytes.length; i++) {\n\t\t\tbytes[i] = buff.charCodeAt(i);\n\t\t}\n\n\t\treturn new Blob([bytes], {type: type});\n\t};\n\n\tvar sInsertBlobTests = function (editor, tinyApis) {\n\t\tvar sInsertBlobTest = function (inputHtml, path, offset, blob, base64, expectedHtml) {\n\t\t\tvar sInsertBlob = wrap(Actions.insertBlob, editor);\n\n\t\t\treturn GeneralSteps.sequence([\n\t\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\t\ttinyApis.sSetCursor(path, offset),\n\t\t\t\tsInsertBlob(blob, base64),\n\t\t\t\ttinyApis.sAssertContent(expectedHtml, 'Should have a image')\n\t\t\t]);\n\t\t};\n\n\t\tvar base64 = 'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\t\tvar blob = base64ToBlob(base64, 'image/gif');\n\n\t\treturn GeneralSteps.sequence([\n\t\t\tsInsertBlobTest('<p>a</p>', [0, 0], 0, base64, blob, '<p><img src=\"data:image/gif;base64,' + base64 + '\" />a</p>')\n\t\t]);\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor);\n\n\t\tPipeline.async({}, [\n\t\t\tsInsertTableTests(editor, tinyApis),\n\t\t\tsFormatBlockTests(editor, tinyApis),\n\t\t\tsInsertBlobTests(editor, tinyApis),\n\t\t\tsCreateLinkTests(editor, tinyApis),\n\t\t\tsUnlinkTests(editor, tinyApis)\n\t\t], onSuccess, onFailure);\n\t}, {\n\t\tinline: true\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/ElementMatcher.js",
    "content": "asynctest('browser/core/ElementMatcherTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'ephox.mcagar.api.TinyApis',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.Assertions',\n\t'tinymce/inlite/core/ElementMatcher',\n\t'tinymce/inlite/core/PredicateId',\n\t'ephox.agar.api.Pipeline'\n], function (TinyLoader, TinyApis, Step, Assertions, ElementMatcher, PredicateId, Pipeline) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar eq = function (target) {\n\t\treturn function (elm) {\n\t\t\treturn elm === target;\n\t\t};\n\t};\n\n\tvar constantFalse = function (/*elm*/) {\n\t\treturn false;\n\t};\n\n\tvar sElementTest = function (tinyApis, editor, inputHtml, selector) {\n\t\treturn Step.sync(function () {\n\t\t\tvar target, result;\n\n\t\t\teditor.setContent(inputHtml);\n\t\t\ttarget = editor.dom.select(selector)[0];\n\n\t\t\tresult = ElementMatcher.element(target, [\n\t\t\t\tPredicateId.create('a', constantFalse),\n\t\t\t\tPredicateId.create('b', eq(target))\n\t\t\t])(editor);\n\n\t\t\tAssertions.assertEq(result.id, 'b', 'Should be matching B');\n\t\t\tAssertions.assertEq(result.rect.w > 0, true, 'Should be have width');\n\t\t});\n\t};\n\n\tvar sParentTest = function (tinyApis, editor, inputHtml, selector) {\n\t\treturn Step.sync(function () {\n\t\t\tvar target, parents, result;\n\n\t\t\teditor.setContent(inputHtml);\n\t\t\ttarget = editor.dom.select(selector)[0];\n\t\t\tparents = editor.dom.getParents(target);\n\n\t\t\tresult = ElementMatcher.parent(parents, [\n\t\t\t\tPredicateId.create('a', constantFalse),\n\t\t\t\tPredicateId.create('b', eq(parents[1])),\n\t\t\t\tPredicateId.create('c', eq(parents[0]))\n\t\t\t])(editor);\n\n\t\t\tAssertions.assertEq(result.id, 'c', 'Should be matching C the closest one');\n\t\t\tAssertions.assertEq(result.rect.w > 0, true, 'Should be have width');\n\t\t});\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor);\n\n\t\tPipeline.async({}, [\n\t\t\tsElementTest(tinyApis, editor, '<p>a</p>', 'p'),\n\t\t\tsParentTest(tinyApis, editor, '<div><p><em>a</em></p></div>', 'em')\n\t\t], onSuccess, onFailure);\n\t}, {\n\t\tinline: true\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/LayoutTest.js",
    "content": "test('browser/core/LayoutTest', [\n\t'ephox/tinymce',\n\t'tinymce/inlite/core/Layout'\n], function (tinymce, Layout) {\n\t// TODO: Move this to atomic test when we can require parts of tinymce core using bolt\n\n\tvar rect = function (x, y, w, h) {\n\t\treturn {x: x, y: y, w: w, h: h};\n\t};\n\n\tvar clientRect = function (x, y, w, h) {\n\t\treturn {left: x, top: y, width: w, height: h, bottom: y + h, right: x + w};\n\t};\n\n\tvar assertLayout = function (expected, rects) {\n\t\tvar result;\n\n\t\tresult = Layout.calc(\n\t\t\trects.targetRect,\n\t\t\trects.contentAreaRect,\n\t\t\trects.panelRect\n\t\t);\n\n\t\tassert.eq(expected, result);\n\t};\n\n\tvar testCalcPanelAtBottomLeft = function () {\n\t\tassertLayout({\n\t\t\trect: rect(0, 10, 20, 10),\n\t\t\tposition: 'bl-tl'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(0, 0, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testCalcPanelAtBottomRight = function () {\n\t\tassertLayout({\n\t\t\trect: rect(80, 10, 20, 10),\n\t\t\tposition: 'br-tr'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(90, 0, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testCalcPanelAtTopLeft = function () {\n\t\tassertLayout({\n\t\t\trect: rect(0, 10, 20, 10),\n\t\t\tposition: 'tl-bl'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(0, 20, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testCalcPanelAtTopRight = function () {\n\t\tassertLayout({\n\t\t\trect: rect(80, 10, 20, 10),\n\t\t\tposition: 'tr-br'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(90, 20, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testCalcPanelAtTopCenter = function () {\n\t\tassertLayout({\n\t\t\trect: rect(35, 10, 20, 10),\n\t\t\tposition: 'tc-bc'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(40, 20, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testCalcPanelAtBottomCenter = function () {\n\t\tassertLayout({\n\t\t\trect: rect(35, 10, 20, 10),\n\t\t\tposition: 'bc-tc'\n\t\t}, {\n\t\t\tcontentAreaRect: rect(0, 0, 100, 100),\n\t\t\ttargetRect: rect(40, 0, 10, 10),\n\t\t\tpanelRect: rect(0, 0, 20, 10)\n\t\t});\n\t};\n\n\tvar testUserConstrain = function () {\n\t\tvar targetRect, contentAreaRect, panelRect, userConstrainedPanelRect, handler;\n\n\t\tcontentAreaRect = rect(0, 0, 100, 100);\n\t\ttargetRect = rect(40, 0, 10, 10);\n\t\tpanelRect = rect(0, 0, 20, 10);\n\n\t\thandler = function (rects) {\n\t\t\tassert.eq(rects.elementRect, clientRect(40, 0, 10, 10));\n\t\t\tassert.eq(rects.contentAreaRect, clientRect(0, 0, 100, 100));\n\t\t\tassert.eq(rects.panelRect, clientRect(0, 0, 20, 10));\n\t\t\treturn clientRect(1, 2, 3, 4);\n\t\t};\n\n\t\tuserConstrainedPanelRect = Layout.userConstrain(handler, targetRect, contentAreaRect, panelRect);\n\t\tassert.eq(userConstrainedPanelRect, rect(1, 2, 3, 4));\n\t};\n\n\ttestCalcPanelAtBottomLeft();\n\ttestCalcPanelAtBottomRight();\n\ttestCalcPanelAtTopLeft();\n\ttestCalcPanelAtTopRight();\n\ttestCalcPanelAtTopCenter();\n\ttestCalcPanelAtBottomCenter();\n\ttestUserConstrain();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/MeasureTest.js",
    "content": "asynctest('browser/core/MeasureTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'tinymce/inlite/core/Measure',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.mcagar.api.TinyApis',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.Chain',\n\t'ephox.agar.api.UiFinder',\n\t'ephox.agar.api.Assertions'\n], function (TinyLoader, Measure, Pipeline, TinyApis, Step, Chain, UiFinder, Assertions) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar containsXY = function (r, x, y) {\n\t\treturn x >= r.x && x <= r.x + r.w && y >= r.y && y <= r.y + r.h;\n\t};\n\n\tvar contains = function (a, b) {\n\t\treturn containsXY(a, b.x, b.y) && containsXY(a, b.x + b.w, b.y + b.h);\n\t};\n\n\tvar sAssertRect = function (editor, measure) {\n\t\treturn Step.sync(function () {\n\t\t\tvar elementRect = measure();\n\t\t\tvar pageAreaRect = Measure.getPageAreaRect(editor);\n\t\t\tvar contentAreaRect = Measure.getContentAreaRect(editor);\n\n\t\t\tAssertions.assertEq('Rect is not in page area rect', contains(pageAreaRect, elementRect), true);\n\t\t\tAssertions.assertEq('Rect is not in content area rect', contains(contentAreaRect, elementRect), true);\n\t\t\tAssertions.assertEq('Rect should have width', elementRect.w > 0, true);\n\t\t\tAssertions.assertEq('Rect should have height', elementRect.h > 0, true);\n\t\t});\n\t};\n\n\tvar getElementRectFromSelector = function (editor, selector) {\n\t\treturn function () {\n\t\t\tvar elm = editor.dom.select(selector)[0];\n\t\t\tvar rect = Measure.getElementRect(editor, elm);\n\t\t\treturn rect;\n\t\t};\n\t};\n\n\tvar getSelectionRectFromSelector = function (editor) {\n\t\treturn function () {\n\t\t\tvar rect = Measure.getSelectionRect(editor);\n\t\t\treturn rect;\n\t\t};\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor);\n\n\t\tPipeline.async({}, [\n\t\t\ttinyApis.sSetContent('<p>a</p><div style=\"width: 50px; height: 300px\">b</div><p>c</p>'),\n\t\t\tsAssertRect(editor, getElementRectFromSelector(editor, 'p:nth-child(1)')),\n\t\t\ttinyApis.sSetCursor([0, 0], 0),\n\t\t\tsAssertRect(editor, getSelectionRectFromSelector(editor))\n\t\t], onSuccess, onFailure);\n\t}, {\n\t\tinline: true\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/PredicateIdTest.js",
    "content": "test('browser/core/PredicateIdTest', [\n\t'ephox/tinymce',\n\t'tinymce/inlite/core/PredicateId'\n], function (tinymce, PredicateId) {\n\tvar testFromContextToolbars = function () {\n\t\tvar isTrue = function () {\n\t\t\treturn true;\n\t\t};\n\n\t\tvar isFalse = function () {\n\t\t\treturn false;\n\t\t};\n\n\t\tvar predIds = PredicateId.fromContextToolbars([\n\t\t\t{toolbar: 'a b c', predicate: isTrue, id: 'a'},\n\t\t\t{toolbar: 'd e', predicate: isFalse, id: 'b'}\n\t\t]);\n\n\t\tassert.eq([\n\t\t\tPredicateId.create('a', isTrue),\n\t\t\tPredicateId.create('b', isFalse)\n\t\t], predIds);\n\t};\n\n\ttestFromContextToolbars();\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/core/SelectionMatcherTest.js",
    "content": "asynctest('browser/core/SelectionMatcherTest', [\n\t'ephox.mcagar.api.TinyLoader',\n\t'ephox.mcagar.api.TinyApis',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.Assertions',\n\t'tinymce/inlite/core/SelectionMatcher',\n\t'tinymce/inlite/core/PredicateId',\n\t'ephox.agar.api.GeneralSteps',\n\t'ephox.agar.api.Pipeline'\n], function (TinyLoader, TinyApis, Step, Assertions, SelectionMatcher, PredicateId, GeneralSteps, Pipeline) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar assertResult = function (expectedResultState, result) {\n\t\tAssertions.assertEq('Should not be null', result !== null, expectedResultState);\n\n\t\tif (expectedResultState === true) {\n\t\t\tAssertions.assertEq('Should be matching a', result.id, 'a');\n\t\t\tAssertions.assertEq('Should be have width', result.rect.w > 0, true);\n\t\t}\n\t};\n\n\tvar sTextSelectionTest = function (tinyApis, editor, inputHtml, spath, soffset, fpath, foffset, expectedResultState) {\n\t\tvar sAssertTextSelectionResult = Step.sync(function () {\n\t\t\tvar result = SelectionMatcher.textSelection('a')(editor);\n\t\t\tassertResult(expectedResultState, result);\n\t\t});\n\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\ttinyApis.sSetSelection(spath, soffset, fpath, foffset),\n\t\t\tsAssertTextSelectionResult\n\t\t]);\n\t};\n\n\tvar sTextSelectionTests = function (tinyApis, editor) {\n\t\treturn GeneralSteps.sequence([\n\t\t\tsTextSelectionTest(tinyApis, editor, '<p>a</p>', [0], 0, [0], 1, true),\n\t\t\tsTextSelectionTest(tinyApis, editor, '<p>a</p>', [0], 0, [0], 0, false)\n\t\t]);\n\t};\n\n\tvar sEmptyTextBlockTest = function (tinyApis, editor, inputHtml, spath, soffset, fpath, foffset, expectedResultState) {\n\t\tvar sAssertTextSelectionResult = Step.sync(function () {\n\t\t\tvar elements = editor.dom.getParents(editor.selection.getStart());\n\t\t\tvar result = SelectionMatcher.emptyTextBlock(elements, 'a')(editor);\n\t\t\tassertResult(expectedResultState, result);\n\t\t});\n\n\t\treturn GeneralSteps.sequence([\n\t\t\ttinyApis.sSetContent(inputHtml),\n\t\t\ttinyApis.sSetSelection(spath, soffset, fpath, foffset),\n\t\t\tsAssertTextSelectionResult\n\t\t]);\n\t};\n\n\tvar sEmptyTextBlockTests = function (tinyApis, editor) {\n\t\treturn GeneralSteps.sequence([\n\t\t\tsEmptyTextBlockTest(tinyApis, editor, '<p>a</p>', [0], 0, [0], 0, false),\n\t\t\tsEmptyTextBlockTest(tinyApis, editor, '<p>a</p>', [0], 0, [0], 1, false),\n\t\t\tsEmptyTextBlockTest(tinyApis, editor, '<p><br></p>', [0], 0, [0], 0, true),\n\t\t\tsEmptyTextBlockTest(tinyApis, editor, '<p><em><br></em></p>', [0, 0], 0, [0, 0], 0, true)\n\t\t]);\n\t};\n\n\tTinyLoader.setup(function (editor, onSuccess, onFailure) {\n\t\tvar tinyApis = TinyApis(editor);\n\n\t\tPipeline.async({}, [\n\t\t\tsTextSelectionTests(tinyApis, editor),\n\t\t\tsEmptyTextBlockTests(tinyApis, editor)\n\t\t], onSuccess, onFailure);\n\t}, {\n\t\tinline: true\n\t}, success, failure);\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/file/ConversionsTest.js",
    "content": "asynctest('atomic/core/ConvertTest', [\n\t'ephox/tinymce',\n\t'tinymce/inlite/file/Conversions',\n\t'ephox.agar.api.Step',\n\t'ephox.agar.api.Pipeline',\n\t'ephox.agar.api.Assertions'\n], function (tinymce, Conversions, Step, Pipeline, Assertions) {\n\tvar success = arguments[arguments.length - 2];\n\tvar failure = arguments[arguments.length - 1];\n\n\tvar base64ToBlob = function (base64, type) {\n\t\tvar buff = atob(base64);\n\t\tvar bytes = new Uint8Array(buff.length);\n\n\t\tfor (var i = 0; i < bytes.length; i++) {\n\t\t\tbytes[i] = buff.charCodeAt(i);\n\t\t}\n\n\t\treturn new Blob([bytes], {type: type});\n\t};\n\n\tvar sBlobToBase64 = function () {\n\t\treturn Step.async(function (next) {\n\t\t\tvar base64 = 'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\t\t\tvar blob = base64ToBlob(base64, 'image/gif');\n\n\t\t\tConversions.blobToBase64(blob).then(function (convertedBase64) {\n\t\t\t\tAssertions.assertEq('Not the correct base64', base64, convertedBase64);\n\t\t\t\tnext();\n\t\t\t});\n\t\t});\n\t};\n\n\tPipeline.async({}, [\n\t\tsBlobToBase64()\n\t], function () {\n\t\tsuccess();\n\t}, function () {\n\t\tfailure();\n\t});\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/tinymce/themes/inlite/src/test/js/browser/file/SelectionMatcher.js",
    "content": "/**\n * SelectionMatcher.js\n *\n * Released under LGPL License.\n * Copyright (c) 1999-2016 Ephox Corp. All rights reserved\n *\n * License: http://www.tinymce.com/license\n * Contributing: http://www.tinymce.com/contributing\n */\n\ndefine('tinymce/inlite/core/SelectionMatcher', [\n\t'tinymce/inlite/core/Matcher',\n\t'tinymce/inlite/core/Measure'\n], function (Matcher, Measure) {\n\t// textSelection :: String -> (Editor -> Matcher.result | Null)\n\tvar textSelection = function (id) {\n\t\treturn function (editor) {\n\t\t\tif (!editor.selection.isCollapsed()) {\n\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\t// emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)\n\tvar emptyTextBlock = function (elements, id) {\n\t\treturn function (editor) {\n\t\t\tvar i, textBlockElementsMap = editor.schema.getTextBlockElements();\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName === 'TABLE') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t\tif (elements[i].nodeName in textBlockElementsMap) {\n\t\t\t\t\tif (editor.dom.isEmpty(elements[i])) {\n\t\t\t\t\t\treturn Matcher.result(id, Measure.getSelectionRect(editor));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t};\n\n\treturn {\n\t\ttextSelection: textSelection,\n\t\temptyTextBlock: emptyTextBlock\n\t};\n});\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/transitionize/dist/transitionize.js",
    "content": ";(function(){\n\n/**\n * Require the given path.\n *\n * @param {String} path\n * @return {Object} exports\n * @api public\n */\n\nfunction require(path, parent, orig) {\n  var resolved = require.resolve(path);\n\n  // lookup failed\n  if (null == resolved) {\n    orig = orig || path;\n    parent = parent || 'root';\n    var err = new Error('Failed to require \"' + orig + '\" from \"' + parent + '\"');\n    err.path = orig;\n    err.parent = parent;\n    err.require = true;\n    throw err;\n  }\n\n  var module = require.modules[resolved];\n\n  // perform real require()\n  // by invoking the module's\n  // registered function\n  if (!module._resolving && !module.exports) {\n    var mod = {};\n    mod.exports = {};\n    mod.client = mod.component = true;\n    module._resolving = true;\n    module.call(this, mod.exports, require.relative(resolved), mod);\n    delete module._resolving;\n    module.exports = mod.exports;\n  }\n\n  return module.exports;\n}\n\n/**\n * Registered modules.\n */\n\nrequire.modules = {};\n\n/**\n * Registered aliases.\n */\n\nrequire.aliases = {};\n\n/**\n * Resolve `path`.\n *\n * Lookup:\n *\n *   - PATH/index.js\n *   - PATH.js\n *   - PATH\n *\n * @param {String} path\n * @return {String} path or null\n * @api private\n */\n\nrequire.resolve = function(path) {\n  if (path.charAt(0) === '/') path = path.slice(1);\n\n  var paths = [\n    path,\n    path + '.js',\n    path + '.json',\n    path + '/index.js',\n    path + '/index.json'\n  ];\n\n  for (var i = 0; i < paths.length; i++) {\n    var path = paths[i];\n    if (require.modules.hasOwnProperty(path)) return path;\n    if (require.aliases.hasOwnProperty(path)) return require.aliases[path];\n  }\n};\n\n/**\n * Normalize `path` relative to the current path.\n *\n * @param {String} curr\n * @param {String} path\n * @return {String}\n * @api private\n */\n\nrequire.normalize = function(curr, path) {\n  var segs = [];\n\n  if ('.' != path.charAt(0)) return path;\n\n  curr = curr.split('/');\n  path = path.split('/');\n\n  for (var i = 0; i < path.length; ++i) {\n    if ('..' == path[i]) {\n      curr.pop();\n    } else if ('.' != path[i] && '' != path[i]) {\n      segs.push(path[i]);\n    }\n  }\n\n  return curr.concat(segs).join('/');\n};\n\n/**\n * Register module at `path` with callback `definition`.\n *\n * @param {String} path\n * @param {Function} definition\n * @api private\n */\n\nrequire.register = function(path, definition) {\n  require.modules[path] = definition;\n};\n\n/**\n * Alias a module definition.\n *\n * @param {String} from\n * @param {String} to\n * @api private\n */\n\nrequire.alias = function(from, to) {\n  if (!require.modules.hasOwnProperty(from)) {\n    throw new Error('Failed to alias \"' + from + '\", it does not exist');\n  }\n  require.aliases[to] = from;\n};\n\n/**\n * Return a require function relative to the `parent` path.\n *\n * @param {String} parent\n * @return {Function}\n * @api private\n */\n\nrequire.relative = function(parent) {\n  var p = require.normalize(parent, '..');\n\n  /**\n   * lastIndexOf helper.\n   */\n\n  function lastIndexOf(arr, obj) {\n    var i = arr.length;\n    while (i--) {\n      if (arr[i] === obj) return i;\n    }\n    return -1;\n  }\n\n  /**\n   * The relative require() itself.\n   */\n\n  function localRequire(path) {\n    var resolved = localRequire.resolve(path);\n    return require(resolved, parent, path);\n  }\n\n  /**\n   * Resolve relative to the parent.\n   */\n\n  localRequire.resolve = function(path) {\n    var c = path.charAt(0);\n    if ('/' == c) return path.slice(1);\n    if ('.' == c) return require.normalize(p, path);\n\n    // resolve deps by returning\n    // the dep in the nearest \"deps\"\n    // directory\n    var segs = parent.split('/');\n    var i = lastIndexOf(segs, 'deps') + 1;\n    if (!i) i = 0;\n    path = segs.slice(0, i + 1).join('/') + '/deps/' + path;\n    return path;\n  };\n\n  /**\n   * Check if module is defined at `path`.\n   */\n\n  localRequire.exists = function(path) {\n    return require.modules.hasOwnProperty(localRequire.resolve(path));\n  };\n\n  return localRequire;\n};\nrequire.register(\"transitionize/transitionize.js\", function(exports, require, module){\n\n/**\n * Transitionize 0.0.3\n * https://github.com/abpetkov/transitionize\n *\n * Authored by Alexander Petkov\n * https://github.com/abpetkov\n *\n * Copyright 2013, Alexander Petkov\n * License: The MIT License (MIT)\n * http://opensource.org/licenses/MIT\n *\n */\n\n/**\n * Expose `Transitionize`.\n */\n\nmodule.exports = Transitionize;\n\n/**\n * Initialize new Transitionize.\n *\n * @param {Object} element\n * @param {Object} props\n * @api public\n */\n\nfunction Transitionize(element, props) {\n  if (!(this instanceof Transitionize)) return new Transitionize(element, props);\n\n  this.element = element;\n  this.props = props || {};\n  this.init();\n}\n\n/**\n * Detect if Safari.\n *\n * @returns {Boolean}\n * @api private\n */\n\nTransitionize.prototype.isSafari = function() {\n  return (/Safari/).test(navigator.userAgent) && (/Apple Computer/).test(navigator.vendor);\n};\n\n/**\n * Loop though the object and push the keys and values in an array.\n * Apply the CSS3 transition to the element and prefix with -webkit- for Safari.\n *\n * @api private\n */\n\nTransitionize.prototype.init = function() {\n  var transitions = [];\n\n  for (var key in this.props) {\n    transitions.push(key + ' ' + this.props[key]);\n  }\n\n  this.element.style.transition = transitions.join(', ');\n  if (this.isSafari()) this.element.style.webkitTransition = transitions.join(', ');\n};\n});\nrequire.alias(\"transitionize/transitionize.js\", \"transitionize/index.js\");if (typeof exports == \"object\") {\n  module.exports = require(\"transitionize\");\n} else if (typeof define == \"function\" && define.amd) {\n  define(function(){ return require(\"transitionize\"); });\n} else {\n  this[\"Transitionize\"] = require(\"transitionize\");\n}})();"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/transitionize/examples/browserify.js",
    "content": "/**\n * Transitionize example.\n *\n * Shows how to change dynamically the transitions of an element.\n *\n * In this case, the `elem` background color and left properties are given different transition duration,\n * according to it's current position. If the circle is in it's initial position, it goes right and\n * changes background color faster. If it's already been moved - gets back left and changes background\n * color slower.\n *\n * In order for this to work, with Browserify(http://browserify.org/) already installed, execute the following command:\n *\n *    browserify examples/browserify.js -o examples/bundle.js\n *\n */\n\nvar transitionize = require('../transitionize');\n\nwindow.onload = function() {\n  var elem = document.querySelector('.js-elem')\n    , prop = {};\n\n  elem.addEventListener('click', function() {\n    var position = parseInt(elem.style.left) || 0;\n\n    if (position == 0) {\n      this.style.left = this.parentNode.offsetWidth - this.offsetWidth + 'px';\n      this.style.backgroundColor = '#53e7d0';\n\n      prop = {\n          'background-color': '0.3s'\n        , 'left': '0.3s'\n      };\n    } else {\n      this.style.left = 0;\n      this.style.backgroundColor = '#febf04';\n\n      prop = {\n          'background-color': '1s'\n        , 'left': '1s'\n      };\n    }\n\n    transitionize(elem, prop);\n  });\n};"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/transitionize/examples/example.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>Transitionize Example Page</title>\n  <style type=\"text/css\">\n    .wrap {\n      height: 75px;\n      margin: 100px auto 0;\n      position: relative;\n      width: 300px;\n    }\n\n    .elem {\n      background-color: #febf04;\n      border-radius: 100%;\n      bottom: 0;\n      display: block;\n      height: 75px;\n      left: 0;\n      position: absolute;\n      width: 75px;\n    }\n  </style>\n  <script src=\"bundle.js\"></script>\n</head>\n<body>\n  <div class=\"wrap\">\n    <span class=\"elem js-elem\"></span>\n  </div>\n</body>\n</html>"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/transitionize/transitionize.js",
    "content": "\n/**\n * Transitionize 0.0.3\n * https://github.com/abpetkov/transitionize\n *\n * Authored by Alexander Petkov\n * https://github.com/abpetkov\n *\n * Copyright 2013, Alexander Petkov\n * License: The MIT License (MIT)\n * http://opensource.org/licenses/MIT\n *\n */\n\n/**\n * Expose `Transitionize`.\n */\n\nmodule.exports = Transitionize;\n\n/**\n * Initialize new Transitionize.\n *\n * @param {Object} element\n * @param {Object} props\n * @api public\n */\n\nfunction Transitionize(element, props) {\n  if (!(this instanceof Transitionize)) return new Transitionize(element, props);\n\n  this.element = element;\n  this.props = props || {};\n  this.init();\n}\n\n/**\n * Detect if Safari.\n *\n * @returns {Boolean}\n * @api private\n */\n\nTransitionize.prototype.isSafari = function() {\n  return (/Safari/).test(navigator.userAgent) && (/Apple Computer/).test(navigator.vendor);\n};\n\n/**\n * Loop though the object and push the keys and values in an array.\n * Apply the CSS3 transition to the element and prefix with -webkit- for Safari.\n *\n * @api private\n */\n\nTransitionize.prototype.init = function() {\n  var transitions = [];\n\n  for (var key in this.props) {\n    transitions.push(key + ' ' + this.props[key]);\n  }\n\n  this.element.style.transition = transitions.join(', ');\n  if (this.isSafari()) this.element.style.webkitTransition = transitions.join(', ');\n};"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/waypoints/lib/shortcuts/infinite.js",
    "content": "/*!\nWaypoints Infinite Scroll Shortcut - 3.1.1\nCopyright © 2011-2015 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blog/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  var $ = window.jQuery\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/shortcuts/infinite-scroll */\n  function Infinite(options) {\n    this.options = $.extend({}, Infinite.defaults, options)\n    this.container = this.options.element\n    if (this.options.container !== 'auto') {\n      this.container = this.options.container\n    }\n    this.$container = $(this.container)\n    this.$more = $(this.options.more)\n\n    if (this.$more.length) {\n      this.setupHandler()\n      this.waypoint = new Waypoint(this.options)\n    }\n  }\n\n  /* Private */\n  Infinite.prototype.setupHandler = function() {\n    this.options.handler = $.proxy(function() {\n      this.options.onBeforePageLoad()\n      this.destroy()\n      this.$container.addClass(this.options.loadingClass)\n\n      $.get($(this.options.more).attr('href'), $.proxy(function(data) {\n        var $data = $($.parseHTML(data))\n        var $newMore = $data.find(this.options.more)\n\n        var $items = $data.find(this.options.items)\n        if (!$items.length) {\n          $items = $data.filter(this.options.items)\n        }\n\n        this.$container.append($items)\n        this.$container.removeClass(this.options.loadingClass)\n\n        if (!$newMore.length) {\n          $newMore = $data.filter(this.options.more)\n        }\n        if ($newMore.length) {\n          this.$more.replaceWith($newMore)\n          this.$more = $newMore\n          this.waypoint = new Waypoint(this.options)\n        }\n        else {\n          this.$more.remove()\n        }\n\n        this.options.onAfterPageLoad()\n      }, this))\n    }, this)\n  }\n\n  /* Public */\n  Infinite.prototype.destroy = function() {\n    if (this.waypoint) {\n      this.waypoint.destroy()\n    }\n  }\n\n  Infinite.defaults = {\n    container: 'auto',\n    items: '.infinite-item',\n    more: '.infinite-more-link',\n    offset: 'bottom-in-view',\n    loadingClass: 'infinite-loading',\n    onBeforePageLoad: $.noop,\n    onAfterPageLoad: $.noop\n  }\n\n  Waypoint.Infinite = Infinite\n}())\n;"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/waypoints/lib/shortcuts/inview.js",
    "content": "/*!\nWaypoints Inview Shortcut - 3.1.1\nCopyright © 2011-2015 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blog/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  function noop() {}\n\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/shortcuts/inview */\n  function Inview(options) {\n    this.options = Waypoint.Adapter.extend({}, Inview.defaults, options)\n    this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n    this.waypoints = []\n    this.createWaypoints()\n  }\n\n  /* Private */\n  Inview.prototype.createWaypoints = function() {\n    var configs = {\n      vertical: [{\n        down: 'enter',\n        up: 'exited',\n        offset: '100%'\n      }, {\n        down: 'entered',\n        up: 'exit',\n        offset: 'bottom-in-view'\n      }, {\n        down: 'exit',\n        up: 'entered',\n        offset: 0\n      }, {\n        down: 'exited',\n        up: 'enter',\n        offset: function() {\n          return -this.adapter.outerHeight()\n        }\n      }],\n      horizontal: [{\n        right: 'enter',\n        left: 'exited',\n        offset: '100%'\n      }, {\n        right: 'entered',\n        left: 'exit',\n        offset: 'right-in-view'\n      }, {\n        right: 'exit',\n        left: 'entered',\n        offset: 0\n      }, {\n        right: 'exited',\n        left: 'enter',\n        offset: function() {\n          return -this.adapter.outerWidth()\n        }\n      }]\n    }\n\n    for (var i = 0, end = configs[this.axis].length; i < end; i++) {\n      var config = configs[this.axis][i]\n      this.createWaypoint(config)\n    }\n  }\n\n  /* Private */\n  Inview.prototype.createWaypoint = function(config) {\n    var self = this\n    this.waypoints.push(new Waypoint({\n      element: this.options.element,\n      handler: (function(config) {\n        return function(direction) {\n          self.options[config[direction]].call(this, direction)\n        }\n      }(config)),\n      offset: config.offset,\n      horizontal: this.options.horizontal\n    }))\n  }\n\n  /* Public */\n  Inview.prototype.destroy = function() {\n    for (var i = 0, end = this.waypoints.length; i < end; i++) {\n      this.waypoints[i].destroy()\n    }\n    this.waypoints = []\n  }\n\n  Inview.defaults = {\n    enter: noop,\n    entered: noop,\n    exit: noop,\n    exited: noop\n  }\n\n  Waypoint.Inview = Inview\n}())\n;"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/waypoints/lib/shortcuts/sticky.js",
    "content": "/*!\nWaypoints Sticky Element Shortcut - 3.1.1\nCopyright © 2011-2015 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blog/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  var $ = window.jQuery\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/shortcuts/sticky-elements */\n  function Sticky(options) {\n    this.options = $.extend({}, Waypoint.defaults, Sticky.defaults, options)\n    this.element = this.options.element\n    this.$element = $(this.element)\n    this.createWrapper()\n    this.createWaypoint()\n  }\n\n  /* Private */\n  Sticky.prototype.createWaypoint = function() {\n    var originalHandler = this.options.handler\n\n    this.waypoint = new Waypoint($.extend({}, this.options, {\n      element: this.wrapper,\n      handler: $.proxy(function(direction) {\n        var shouldBeStuck = this.options.direction.indexOf(direction) > -1\n        var wrapperHeight = shouldBeStuck ? this.$element.outerHeight(true) : ''\n\n        this.$wrapper.height(wrapperHeight)\n        this.$element.toggleClass(this.options.stuckClass, shouldBeStuck)\n\n        if (originalHandler) {\n          originalHandler.call(this, direction)\n        }\n      }, this)\n    }))\n  }\n\n  /* Private */\n  Sticky.prototype.createWrapper = function() {\n    this.$element.wrap(this.options.wrapper)\n    this.$wrapper = this.$element.parent()\n    this.wrapper = this.$wrapper[0]\n  }\n\n  /* Public */\n  Sticky.prototype.destroy = function() {\n    if (this.$element.parent()[0] === this.wrapper) {\n      this.waypoint.destroy()\n      this.$element.removeClass(this.options.stuckClass).unwrap()\n    }\n  }\n\n  Sticky.defaults = {\n    wrapper: '<div class=\"sticky-wrapper\" />',\n    stuckClass: 'stuck',\n    direction: 'down right'\n  }\n\n  Waypoint.Sticky = Sticky\n}())\n;"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/x-editable/css/bootstrap-editable.css",
    "content": "/*! X-editable - v1.5.1 \n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\n* http://github.com/vitalets/x-editable\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */\n.editableform {\n    margin-bottom: 0; /* overwrites bootstrap margin */\n}\n\n.editableform .control-group {\n    margin-bottom: 0; /* overwrites bootstrap margin */\n    white-space: nowrap; /* prevent wrapping buttons on new line */\n    line-height: 20px; /* overwriting bootstrap line-height. See #133 */\n}\n\n/* \n  BS3 width:1005 for inputs breaks editable form in popup \n  See: https://github.com/vitalets/x-editable/issues/393\n*/\n.editableform .form-control {\n    width: auto;\n}\n\n.editable-buttons {\n   display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */\n   vertical-align: top;\n   margin-left: 7px;\n   /* inline-block emulation for IE7*/\n   zoom: 1; \n   *display: inline;\n}\n\n.editable-buttons.editable-buttons-bottom {\n   display: block; \n   margin-top: 7px;\n   margin-left: 0;\n}\n\n.editable-input {\n    vertical-align: top; \n    display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */\n    width: auto; /* bootstrap-responsive has width: 100% that breakes layout */\n    white-space: normal; /* reset white-space decalred in parent*/\n   /* display-inline emulation for IE7*/\n   zoom: 1; \n   *display: inline;   \n}\n\n.editable-buttons .editable-cancel {\n   margin-left: 7px; \n}\n\n/*for jquery-ui buttons need set height to look more pretty*/\n.editable-buttons button.ui-button-icon-only {\n   height: 24px; \n   width: 30px;\n}\n\n.editableform-loading {\n    background: url('../img/loading.gif') center center no-repeat;  \n    height: 25px;\n    width: auto; \n    min-width: 25px; \n}\n\n.editable-inline .editableform-loading {\n    background-position: left 5px;      \n}\n\n .editable-error-block {\n    max-width: 300px;\n    margin: 5px 0 0 0;\n    width: auto;\n    white-space: normal;\n}\n\n/*add padding for jquery ui*/\n.editable-error-block.ui-state-error {\n    padding: 3px;  \n}  \n\n.editable-error {\n   color: red;  \n}\n\n/* ---- For specific types ---- */\n\n.editableform .editable-date {\n    padding: 0; \n    margin: 0;\n    float: left;\n}\n\n/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */\n.editable-inline .add-on .icon-th {\n   margin-top: 3px;\n   margin-left: 1px; \n}\n\n\n/* checklist vertical alignment */\n.editable-checklist label input[type=\"checkbox\"], \n.editable-checklist label span {\n    vertical-align: middle;\n    margin: 0;\n}\n\n.editable-checklist label {\n    white-space: nowrap; \n}\n\n/* set exact width of textarea to fit buttons toolbar */\n.editable-wysihtml5 {\n    width: 566px; \n    height: 250px; \n}\n\n/* clear button shown as link in date inputs */\n.editable-clear {\n   clear: both;\n   font-size: 0.9em;\n   text-decoration: none;\n   text-align: right;\n}\n\n/* IOS-style clear button for text inputs */\n.editable-clear-x {\n   background: url('../img/clear.png') center center no-repeat;\n   display: block;\n   width: 13px;    \n   height: 13px;\n   position: absolute;\n   opacity: 0.6;\n   z-index: 100;\n   \n   top: 50%;\n   right: 6px;\n   margin-top: -6px;\n   \n}\n\n.editable-clear-x:hover {\n   opacity: 1;\n}\n\n.editable-pre-wrapped {\n   white-space: pre-wrap;\n}\n.editable-container.editable-popup {\n    max-width: none !important; /* without this rule poshytip/tooltip does not stretch */\n}  \n\n.editable-container.popover {\n    width: auto; /* without this rule popover does not stretch */\n}\n\n.editable-container.editable-inline {\n    display: inline-block; \n    vertical-align: middle;\n    width: auto;\n    /* inline-block emulation for IE7*/\n    zoom: 1; \n    *display: inline;    \n}\n\n.editable-container.ui-widget {\n   font-size: inherit;  /* jqueryui widget font 1.1em too big, overwrite it */\n   z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */\n}\n.editable-click, \na.editable-click, \na.editable-click:hover {\n    text-decoration: none;\n    border-bottom: dashed 1px #0088cc;\n}\n\n.editable-click.editable-disabled, \na.editable-click.editable-disabled, \na.editable-click.editable-disabled:hover {\n   color: #585858;  \n   cursor: default;\n   border-bottom: none;\n}\n\n.editable-empty, .editable-empty:hover, .editable-empty:focus{\n  font-style: italic; \n  color: #DD1144;  \n  /* border-bottom: none; */\n  text-decoration: none;\n}\n\n.editable-unsaved {\n  font-weight: bold; \n}\n\n.editable-unsaved:after {\n/*    content: '*'*/\n}\n\n.editable-bg-transition {\n  -webkit-transition: background-color 1400ms ease-out;\n  -moz-transition: background-color 1400ms ease-out;\n  -o-transition: background-color 1400ms ease-out;\n  -ms-transition: background-color 1400ms ease-out;\n  transition: background-color 1400ms ease-out;  \n}\n\n/*see https://github.com/vitalets/x-editable/issues/139 */\n.form-horizontal .editable\n{ \n    padding-top: 5px;\n    display:inline-block;\n}\n\n\n/*!\n * Datepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n */\n.datepicker {\n  padding: 4px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  direction: ltr;\n  /*.dow {\n\t\tborder-top: 1px solid #ddd !important;\n\t}*/\n\n}\n.datepicker-inline {\n  width: 220px;\n}\n.datepicker.datepicker-rtl {\n  direction: rtl;\n}\n.datepicker.datepicker-rtl table tr td span {\n  float: right;\n}\n.datepicker-dropdown {\n  top: 0;\n  left: 0;\n}\n.datepicker-dropdown:before {\n  content: '';\n  display: inline-block;\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  position: absolute;\n  top: -7px;\n  left: 6px;\n}\n.datepicker-dropdown:after {\n  content: '';\n  display: inline-block;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #ffffff;\n  position: absolute;\n  top: -6px;\n  left: 7px;\n}\n.datepicker > div {\n  display: none;\n}\n.datepicker.days div.datepicker-days {\n  display: block;\n}\n.datepicker.months div.datepicker-months {\n  display: block;\n}\n.datepicker.years div.datepicker-years {\n  display: block;\n}\n.datepicker table {\n  margin: 0;\n}\n.datepicker td,\n.datepicker th {\n  text-align: center;\n  width: 20px;\n  height: 20px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  border: none;\n}\n.table-striped .datepicker table tr td,\n.table-striped .datepicker table tr th {\n  background-color: transparent;\n}\n.datepicker table tr td.day:hover {\n  background: #eeeeee;\n  cursor: pointer;\n}\n.datepicker table tr td.old,\n.datepicker table tr td.new {\n  color: #999999;\n}\n.datepicker table tr td.disabled,\n.datepicker table tr td.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n.datepicker table tr td.today,\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today.disabled:hover {\n  background-color: #fde19a;\n  background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);\n  background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));\n  background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);\n  background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);\n  background-image: linear-gradient(top, #fdd49a, #fdf59a);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);\n  border-color: #fdf59a #fdf59a #fbed50;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  color: #000;\n}\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today:hover:hover,\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today.disabled:hover:hover,\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active,\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today:hover.disabled,\n.datepicker table tr td.today.disabled.disabled,\n.datepicker table tr td.today.disabled:hover.disabled,\n.datepicker table tr td.today[disabled],\n.datepicker table tr td.today:hover[disabled],\n.datepicker table tr td.today.disabled[disabled],\n.datepicker table tr td.today.disabled:hover[disabled] {\n  background-color: #fdf59a;\n}\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active {\n  background-color: #fbf069 \\9;\n}\n.datepicker table tr td.today:hover:hover {\n  color: #000;\n}\n.datepicker table tr td.today.active:hover {\n  color: #fff;\n}\n.datepicker table tr td.range,\n.datepicker table tr td.range:hover,\n.datepicker table tr td.range.disabled,\n.datepicker table tr td.range.disabled:hover {\n  background: #eeeeee;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  border-radius: 0;\n}\n.datepicker table tr td.range.today,\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today.disabled:hover {\n  background-color: #f3d17a;\n  background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);\n  background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));\n  background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);\n  background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);\n  background-image: linear-gradient(top, #f3c17a, #f3e97a);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);\n  border-color: #f3e97a #f3e97a #edde34;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  border-radius: 0;\n}\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today:hover:hover,\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover:hover,\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active,\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today:hover.disabled,\n.datepicker table tr td.range.today.disabled.disabled,\n.datepicker table tr td.range.today.disabled:hover.disabled,\n.datepicker table tr td.range.today[disabled],\n.datepicker table tr td.range.today:hover[disabled],\n.datepicker table tr td.range.today.disabled[disabled],\n.datepicker table tr td.range.today.disabled:hover[disabled] {\n  background-color: #f3e97a;\n}\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active {\n  background-color: #efe24b \\9;\n}\n.datepicker table tr td.selected,\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected.disabled:hover {\n  background-color: #9e9e9e;\n  background-image: -moz-linear-gradient(top, #b3b3b3, #808080);\n  background-image: -ms-linear-gradient(top, #b3b3b3, #808080);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));\n  background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);\n  background-image: -o-linear-gradient(top, #b3b3b3, #808080);\n  background-image: linear-gradient(top, #b3b3b3, #808080);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);\n  border-color: #808080 #808080 #595959;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected:hover:hover,\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.disabled:hover:hover,\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active,\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected:hover.disabled,\n.datepicker table tr td.selected.disabled.disabled,\n.datepicker table tr td.selected.disabled:hover.disabled,\n.datepicker table tr td.selected[disabled],\n.datepicker table tr td.selected:hover[disabled],\n.datepicker table tr td.selected.disabled[disabled],\n.datepicker table tr td.selected.disabled:hover[disabled] {\n  background-color: #808080;\n}\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active {\n  background-color: #666666 \\9;\n}\n.datepicker table tr td.active,\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active.disabled:hover {\n  background-color: #006dcc;\n  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));\n  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -o-linear-gradient(top, #0088cc, #0044cc);\n  background-image: linear-gradient(top, #0088cc, #0044cc);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);\n  border-color: #0044cc #0044cc #002a80;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active:hover:hover,\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.disabled:hover:hover,\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active,\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active:hover.disabled,\n.datepicker table tr td.active.disabled.disabled,\n.datepicker table tr td.active.disabled:hover.disabled,\n.datepicker table tr td.active[disabled],\n.datepicker table tr td.active:hover[disabled],\n.datepicker table tr td.active.disabled[disabled],\n.datepicker table tr td.active.disabled:hover[disabled] {\n  background-color: #0044cc;\n}\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active {\n  background-color: #003399 \\9;\n}\n.datepicker table tr td span {\n  display: block;\n  width: 23%;\n  height: 54px;\n  line-height: 54px;\n  float: left;\n  margin: 1%;\n  cursor: pointer;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n}\n.datepicker table tr td span:hover {\n  background: #eeeeee;\n}\n.datepicker table tr td span.disabled,\n.datepicker table tr td span.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n.datepicker table tr td span.active,\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active.disabled:hover {\n  background-color: #006dcc;\n  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));\n  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);\n  background-image: -o-linear-gradient(top, #0088cc, #0044cc);\n  background-image: linear-gradient(top, #0088cc, #0044cc);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);\n  border-color: #0044cc #0044cc #002a80;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  color: #fff;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active:hover.disabled,\n.datepicker table tr td span.active.disabled.disabled,\n.datepicker table tr td span.active.disabled:hover.disabled,\n.datepicker table tr td span.active[disabled],\n.datepicker table tr td span.active:hover[disabled],\n.datepicker table tr td span.active.disabled[disabled],\n.datepicker table tr td span.active.disabled:hover[disabled] {\n  background-color: #0044cc;\n}\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active {\n  background-color: #003399 \\9;\n}\n.datepicker table tr td span.old,\n.datepicker table tr td span.new {\n  color: #999999;\n}\n.datepicker th.datepicker-switch {\n  width: 145px;\n}\n.datepicker thead tr:first-child th,\n.datepicker tfoot tr th {\n  cursor: pointer;\n}\n.datepicker thead tr:first-child th:hover,\n.datepicker tfoot tr th:hover {\n  background: #eeeeee;\n}\n.datepicker .cw {\n  font-size: 10px;\n  width: 12px;\n  padding: 0 2px 0 5px;\n  vertical-align: middle;\n}\n.datepicker thead tr:first-child th.cw {\n  cursor: default;\n  background-color: transparent;\n}\n.input-append.date .add-on i,\n.input-prepend.date .add-on i {\n  display: block;\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n}\n.input-daterange input {\n  text-align: center;\n}\n.input-daterange input:first-child {\n  -webkit-border-radius: 3px 0 0 3px;\n  -moz-border-radius: 3px 0 0 3px;\n  border-radius: 3px 0 0 3px;\n}\n.input-daterange input:last-child {\n  -webkit-border-radius: 0 3px 3px 0;\n  -moz-border-radius: 0 3px 3px 0;\n  border-radius: 0 3px 3px 0;\n}\n.input-daterange .add-on {\n  display: inline-block;\n  width: auto;\n  min-width: 16px;\n  height: 18px;\n  padding: 4px 5px;\n  font-weight: normal;\n  line-height: 18px;\n  text-align: center;\n  text-shadow: 0 1px 0 #ffffff;\n  vertical-align: middle;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  margin-left: -5px;\n  margin-right: -5px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/plugins/x-editable/js/bootstrap-editable.js",
    "content": "/*! X-editable - v1.5.1 \n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\n* http://github.com/vitalets/x-editable\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */\n/**\nForm with single input element, two buttons and two states: normal/loading.\nApplied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown.\nEditableform is linked with one of input types, e.g. 'text', 'select' etc.\n\n@class editableform\n@uses text\n@uses textarea\n**/\n(function ($) {\n    \"use strict\";\n    \n    var EditableForm = function (div, options) {\n        this.options = $.extend({}, $.fn.editableform.defaults, options);\n        this.$div = $(div); //div, containing form. Not form tag. Not editable-element.\n        if(!this.options.scope) {\n            this.options.scope = this;\n        }\n        //nothing shown after init\n    };\n\n    EditableForm.prototype = {\n        constructor: EditableForm,\n        initInput: function() {  //called once\n            //take input from options (as it is created in editable-element)\n            this.input = this.options.input;\n            \n            //set initial value\n            //todo: may be add check: typeof str === 'string' ? \n            this.value = this.input.str2value(this.options.value); \n            \n            //prerender: get input.$input\n            this.input.prerender();\n        },\n        initTemplate: function() {\n            this.$form = $($.fn.editableform.template); \n        },\n        initButtons: function() {\n            var $btn = this.$form.find('.editable-buttons');\n            $btn.append($.fn.editableform.buttons);\n            if(this.options.showbuttons === 'bottom') {\n                $btn.addClass('editable-buttons-bottom');\n            }\n        },\n        /**\n        Renders editableform\n\n        @method render\n        **/        \n        render: function() {\n            //init loader\n            this.$loading = $($.fn.editableform.loading);        \n            this.$div.empty().append(this.$loading);\n            \n            //init form template and buttons\n            this.initTemplate();\n            if(this.options.showbuttons) {\n                this.initButtons();\n            } else {\n                this.$form.find('.editable-buttons').remove();\n            }\n\n            //show loading state\n            this.showLoading();            \n            \n            //flag showing is form now saving value to server. \n            //It is needed to wait when closing form.\n            this.isSaving = false;\n            \n            /**        \n            Fired when rendering starts\n            @event rendering \n            @param {Object} event event object\n            **/            \n            this.$div.triggerHandler('rendering');\n            \n            //init input\n            this.initInput();\n            \n            //append input to form\n            this.$form.find('div.editable-input').append(this.input.$tpl);            \n            \n            //append form to container\n            this.$div.append(this.$form);\n            \n            //render input\n            $.when(this.input.render())\n            .then($.proxy(function () {\n                //setup input to submit automatically when no buttons shown\n                if(!this.options.showbuttons) {\n                    this.input.autosubmit(); \n                }\n                 \n                //attach 'cancel' handler\n                this.$form.find('.editable-cancel').click($.proxy(this.cancel, this));\n                \n                if(this.input.error) {\n                    this.error(this.input.error);\n                    this.$form.find('.editable-submit').attr('disabled', true);\n                    this.input.$input.attr('disabled', true);\n                    //prevent form from submitting\n                    this.$form.submit(function(e){ e.preventDefault(); });\n                } else {\n                    this.error(false);\n                    this.input.$input.removeAttr('disabled');\n                    this.$form.find('.editable-submit').removeAttr('disabled');\n                    var value = (this.value === null || this.value === undefined || this.value === '') ? this.options.defaultValue : this.value;\n                    this.input.value2input(value);\n                    //attach submit handler\n                    this.$form.submit($.proxy(this.submit, this));\n                }\n\n                /**        \n                Fired when form is rendered\n                @event rendered\n                @param {Object} event event object\n                **/            \n                this.$div.triggerHandler('rendered');                \n\n                this.showForm();\n                \n                //call postrender method to perform actions required visibility of form\n                if(this.input.postrender) {\n                    this.input.postrender();\n                }                \n            }, this));\n        },\n        cancel: function() {   \n            /**        \n            Fired when form was cancelled by user\n            @event cancel \n            @param {Object} event event object\n            **/              \n            this.$div.triggerHandler('cancel');\n        },\n        showLoading: function() {\n            var w, h;\n            if(this.$form) {\n                //set loading size equal to form\n                w = this.$form.outerWidth();\n                h = this.$form.outerHeight(); \n                if(w) {\n                    this.$loading.width(w);\n                }\n                if(h) {\n                    this.$loading.height(h);\n                }\n                this.$form.hide();\n            } else {\n                //stretch loading to fill container width\n                w = this.$loading.parent().width();\n                if(w) {\n                    this.$loading.width(w);\n                }\n            }\n            this.$loading.show(); \n        },\n\n        showForm: function(activate) {\n            this.$loading.hide();\n            this.$form.show();\n            if(activate !== false) {\n                this.input.activate(); \n            }\n            /**        \n            Fired when form is shown\n            @event show \n            @param {Object} event event object\n            **/                    \n            this.$div.triggerHandler('show');\n        },\n\n        error: function(msg) {\n            var $group = this.$form.find('.control-group'),\n                $block = this.$form.find('.editable-error-block'),\n                lines;\n\n            if(msg === false) {\n                $group.removeClass($.fn.editableform.errorGroupClass);\n                $block.removeClass($.fn.editableform.errorBlockClass).empty().hide(); \n            } else {\n                //convert newline to <br> for more pretty error display\n                if(msg) {\n                    lines = (''+msg).split('\\n');\n                    for (var i = 0; i < lines.length; i++) {\n                        lines[i] = $('<div>').text(lines[i]).html();\n                    }\n                    msg = lines.join('<br>');\n                }\n                $group.addClass($.fn.editableform.errorGroupClass);\n                $block.addClass($.fn.editableform.errorBlockClass).html(msg).show();\n            }\n        },\n\n        submit: function(e) {\n            e.stopPropagation();\n            e.preventDefault();\n            \n            //get new value from input\n            var newValue = this.input.input2value(); \n\n            //validation: if validate returns string or truthy value - means error\n            //if returns object like {newValue: '...'} => submitted value is reassigned to it\n            var error = this.validate(newValue);\n            if ($.type(error) === 'object' && error.newValue !== undefined) {\n                newValue = error.newValue;\n                this.input.value2input(newValue);\n                if(typeof error.msg === 'string') {\n                    this.error(error.msg);\n                    this.showForm();\n                    return;\n                }\n            } else if (error) {\n                this.error(error);\n                this.showForm();\n                return;\n            } \n            \n            //if value not changed --> trigger 'nochange' event and return\n            /*jslint eqeq: true*/\n            if (!this.options.savenochange && this.input.value2str(newValue) == this.input.value2str(this.value)) {\n            /*jslint eqeq: false*/                \n                /**        \n                Fired when value not changed but form is submitted. Requires savenochange = false.\n                @event nochange \n                @param {Object} event event object\n                **/                    \n                this.$div.triggerHandler('nochange');            \n                return;\n            } \n\n            //convert value for submitting to server\n            var submitValue = this.input.value2submit(newValue);\n            \n            this.isSaving = true;\n            \n            //sending data to server\n            $.when(this.save(submitValue))\n            .done($.proxy(function(response) {\n                this.isSaving = false;\n\n                //run success callback\n                var res = typeof this.options.success === 'function' ? this.options.success.call(this.options.scope, response, newValue) : null;\n\n                //if success callback returns false --> keep form open and do not activate input\n                if(res === false) {\n                    this.error(false);\n                    this.showForm(false);\n                    return;\n                }\n\n                //if success callback returns string -->  keep form open, show error and activate input               \n                if(typeof res === 'string') {\n                    this.error(res);\n                    this.showForm();\n                    return;\n                }\n\n                //if success callback returns object like {newValue: <something>} --> use that value instead of submitted\n                //it is usefull if you want to chnage value in url-function\n                if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) {\n                    newValue = res.newValue;\n                }\n\n                //clear error message\n                this.error(false);   \n                this.value = newValue;\n                /**        \n                Fired when form is submitted\n                @event save \n                @param {Object} event event object\n                @param {Object} params additional params\n                @param {mixed} params.newValue raw new value\n                @param {mixed} params.submitValue submitted value as string\n                @param {Object} params.response ajax response\n\n                @example\n                $('#form-div').on('save'), function(e, params){\n                    if(params.newValue === 'username') {...}\n                });\n                **/\n                this.$div.triggerHandler('save', {newValue: newValue, submitValue: submitValue, response: response});\n            }, this))\n            .fail($.proxy(function(xhr) {\n                this.isSaving = false;\n\n                var msg;\n                if(typeof this.options.error === 'function') {\n                    msg = this.options.error.call(this.options.scope, xhr, newValue);\n                } else {\n                    msg = typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!';\n                }\n\n                this.error(msg);\n                this.showForm();\n            }, this));\n        },\n\n        save: function(submitValue) {\n            //try parse composite pk defined as json string in data-pk \n            this.options.pk = $.fn.editableutils.tryParseJson(this.options.pk, true); \n            \n            var pk = (typeof this.options.pk === 'function') ? this.options.pk.call(this.options.scope) : this.options.pk,\n            /*\n              send on server in following cases:\n              1. url is function\n              2. url is string AND (pk defined OR send option = always) \n            */\n            send = !!(typeof this.options.url === 'function' || (this.options.url && ((this.options.send === 'always') || (this.options.send === 'auto' && pk !== null && pk !== undefined)))),\n            params;\n\n            if (send) { //send to server\n                this.showLoading();\n\n                //standard params\n                params = {\n                    name: this.options.name || '',\n                    value: submitValue,\n                    pk: pk \n                };\n\n                //additional params\n                if(typeof this.options.params === 'function') {\n                    params = this.options.params.call(this.options.scope, params);  \n                } else {\n                    //try parse json in single quotes (from data-params attribute)\n                    this.options.params = $.fn.editableutils.tryParseJson(this.options.params, true);   \n                    $.extend(params, this.options.params);\n                }\n\n                if(typeof this.options.url === 'function') { //user's function\n                    return this.options.url.call(this.options.scope, params);\n                } else {  \n                    //send ajax to server and return deferred object\n                    return $.ajax($.extend({\n                        url     : this.options.url,\n                        data    : params,\n                        type    : 'POST'\n                    }, this.options.ajaxOptions));\n                }\n            }\n        }, \n\n        validate: function (value) {\n            if (value === undefined) {\n                value = this.value;\n            }\n            if (typeof this.options.validate === 'function') {\n                return this.options.validate.call(this.options.scope, value);\n            }\n        },\n\n        option: function(key, value) {\n            if(key in this.options) {\n                this.options[key] = value;\n            }\n            \n            if(key === 'value') {\n                this.setValue(value);\n            }\n            \n            //do not pass option to input as it is passed in editable-element\n        },\n\n        setValue: function(value, convertStr) {\n            if(convertStr) {\n                this.value = this.input.str2value(value);\n            } else {\n                this.value = value;\n            }\n            \n            //if form is visible, update input\n            if(this.$form && this.$form.is(':visible')) {\n                this.input.value2input(this.value);\n            }            \n        }               \n    };\n\n    /*\n    Initialize editableform. Applied to jQuery object.\n\n    @method $().editableform(options)\n    @params {Object} options\n    @example\n    var $form = $('&lt;div&gt;').editableform({\n        type: 'text',\n        name: 'username',\n        url: '/post',\n        value: 'vitaliy'\n    });\n\n    //to display form you should call 'render' method\n    $form.editableform('render');     \n    */\n    $.fn.editableform = function (option) {\n        var args = arguments;\n        return this.each(function () {\n            var $this = $(this), \n            data = $this.data('editableform'), \n            options = typeof option === 'object' && option; \n            if (!data) {\n                $this.data('editableform', (data = new EditableForm(this, options)));\n            }\n\n            if (typeof option === 'string') { //call method \n                data[option].apply(data, Array.prototype.slice.call(args, 1));\n            } \n        });\n    };\n\n    //keep link to constructor to allow inheritance\n    $.fn.editableform.Constructor = EditableForm;    \n\n    //defaults\n    $.fn.editableform.defaults = {\n        /* see also defaults for input */\n\n        /**\n        Type of input. Can be <code>text|textarea|select|date|checklist</code>\n\n        @property type \n        @type string\n        @default 'text'\n        **/\n        type: 'text',\n        /**\n        Url for submit, e.g. <code>'/post'</code>  \n        If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks.\n\n        @property url \n        @type string|function\n        @default null\n        @example\n        url: function(params) {\n            var d = new $.Deferred;\n            if(params.value === 'abc') {\n                return d.reject('error message'); //returning error via deferred object\n            } else {\n                //async saving data in js model\n                someModel.asyncSaveMethod({\n                   ..., \n                   success: function(){\n                      d.resolve();\n                   }\n                }); \n                return d.promise();\n            }\n        } \n        **/        \n        url:null,\n        /**\n        Additional params for submit. If defined as <code>object</code> - it is **appended** to original ajax data (pk, name and value).  \n        If defined as <code>function</code> - returned object **overwrites** original ajax data.\n        @example\n        params: function(params) {\n            //originally params contain pk, name and value\n            params.a = 1;\n            return params;\n        }\n\n        @property params \n        @type object|function\n        @default null\n        **/          \n        params:null,\n        /**\n        Name of field. Will be submitted on server. Can be taken from <code>id</code> attribute\n\n        @property name \n        @type string\n        @default null\n        **/         \n        name: null,\n        /**\n        Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. <code>{id: 1, lang: 'en'}</code>.\n        Can be calculated dynamically via function.\n\n        @property pk \n        @type string|object|function\n        @default null\n        **/         \n        pk: null,\n        /**\n        Initial value. If not defined - will be taken from element's content.\n        For __select__ type should be defined (as it is ID of shown text).\n\n        @property value \n        @type string|object\n        @default null\n        **/        \n        value: null,\n        /**\n        Value that will be displayed in input if original field value is empty (`null|undefined|''`).\n\n        @property defaultValue \n        @type string|object\n        @default null\n        @since 1.4.6\n        **/        \n        defaultValue: null,\n        /**\n        Strategy for sending data on server. Can be `auto|always|never`.\n        When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally.\n\n        @property send \n        @type string\n        @default 'auto'\n        **/          \n        send: 'auto', \n        /**\n        Function for client-side validation. If returns string - means validation not passed and string showed as error.\n        Since 1.5.1 you can modify submitted value by returning object from `validate`: \n        `{newValue: '...'}` or `{newValue: '...', msg: '...'}`\n\n        @property validate \n        @type function\n        @default null\n        @example\n        validate: function(value) {\n            if($.trim(value) == '') {\n                return 'This field is required';\n            }\n        }\n        **/         \n        validate: null,\n        /**\n        Success callback. Called when value successfully sent on server and **response status = 200**.  \n        Usefull to work with json response. For example, if your backend response can be <code>{success: true}</code>\n        or <code>{success: false, msg: \"server error\"}</code> you can check it inside this callback.  \n        If it returns **string** - means error occured and string is shown as error message.  \n        If it returns **object like** <code>{newValue: &lt;something&gt;}</code> - it overwrites value, submitted by user.  \n        Otherwise newValue simply rendered into element.\n        \n        @property success \n        @type function\n        @default null\n        @example\n        success: function(response, newValue) {\n            if(!response.success) return response.msg;\n        }\n        **/          \n        success: null,\n        /**\n        Error callback. Called when request failed (response status != 200).  \n        Usefull when you want to parse error response and display a custom message.\n        Must return **string** - the message to be displayed in the error block.\n                \n        @property error \n        @type function\n        @default null\n        @since 1.4.4\n        @example\n        error: function(response, newValue) {\n            if(response.status === 500) {\n                return 'Service unavailable. Please try later.';\n            } else {\n                return response.responseText;\n            }\n        }\n        **/          \n        error: null,\n        /**\n        Additional options for submit ajax request.\n        List of values: http://api.jquery.com/jQuery.ajax\n        \n        @property ajaxOptions \n        @type object\n        @default null\n        @since 1.1.1        \n        @example \n        ajaxOptions: {\n            type: 'put',\n            dataType: 'json'\n        }        \n        **/        \n        ajaxOptions: null,\n        /**\n        Where to show buttons: left(true)|bottom|false  \n        Form without buttons is auto-submitted.\n\n        @property showbuttons \n        @type boolean|string\n        @default true\n        @since 1.1.1\n        **/         \n        showbuttons: true,\n        /**\n        Scope for callback methods (success, validate).  \n        If <code>null</code> means editableform instance itself. \n\n        @property scope \n        @type DOMElement|object\n        @default null\n        @since 1.2.0\n        @private\n        **/            \n        scope: null,\n        /**\n        Whether to save or cancel value when it was not changed but form was submitted\n\n        @property savenochange \n        @type boolean\n        @default false\n        @since 1.2.0\n        **/\n        savenochange: false\n    };   \n\n    /*\n    Note: following params could redefined in engine: bootstrap or jqueryui:\n    Classes 'control-group' and 'editable-error-block' must always present!\n    */      \n    $.fn.editableform.template = '<form class=\"form-inline editableform\">'+\n    '<div class=\"control-group\">' + \n    '<div><div class=\"editable-input\"></div><div class=\"editable-buttons\"></div></div>'+\n    '<div class=\"editable-error-block\"></div>' + \n    '</div>' + \n    '</form>';\n\n    //loading div\n    $.fn.editableform.loading = '<div class=\"editableform-loading\"></div>';\n\n    //buttons\n    $.fn.editableform.buttons = '<button type=\"submit\" class=\"editable-submit\">ok</button>'+\n    '<button type=\"button\" class=\"editable-cancel\">cancel</button>';      \n\n    //error class attached to control-group\n    $.fn.editableform.errorGroupClass = null;  \n\n    //error class attached to editable-error-block\n    $.fn.editableform.errorBlockClass = 'editable-error';\n    \n    //engine\n    $.fn.editableform.engine = 'jquery';\n}(window.jQuery));\n\n/**\n* EditableForm utilites\n*/\n(function ($) {\n    \"use strict\";\n    \n    //utils\n    $.fn.editableutils = {\n        /**\n        * classic JS inheritance function\n        */  \n        inherit: function (Child, Parent) {\n            var F = function() { };\n            F.prototype = Parent.prototype;\n            Child.prototype = new F();\n            Child.prototype.constructor = Child;\n            Child.superclass = Parent.prototype;\n        },\n\n        /**\n        * set caret position in input\n        * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area\n        */        \n        setCursorPosition: function(elem, pos) {\n            if (elem.setSelectionRange) {\n                elem.setSelectionRange(pos, pos);\n            } else if (elem.createTextRange) {\n                var range = elem.createTextRange();\n                range.collapse(true);\n                range.moveEnd('character', pos);\n                range.moveStart('character', pos);\n                range.select();\n            }\n        },\n\n        /**\n        * function to parse JSON in *single* quotes. (jquery automatically parse only double quotes)\n        * That allows such code as: <a data-source=\"{'a': 'b', 'c': 'd'}\">\n        * safe = true --> means no exception will be thrown\n        * for details see http://stackoverflow.com/questions/7410348/how-to-set-json-format-to-html5-data-attributes-in-the-jquery\n        */\n        tryParseJson: function(s, safe) {\n            if (typeof s === 'string' && s.length && s.match(/^[\\{\\[].*[\\}\\]]$/)) {\n                if (safe) {\n                    try {\n                        /*jslint evil: true*/\n                        s = (new Function('return ' + s))();\n                        /*jslint evil: false*/\n                    } catch (e) {} finally {\n                        return s;\n                    }\n                } else {\n                    /*jslint evil: true*/\n                    s = (new Function('return ' + s))();\n                    /*jslint evil: false*/\n                }\n            }\n            return s;\n        },\n\n        /**\n        * slice object by specified keys\n        */\n        sliceObj: function(obj, keys, caseSensitive /* default: false */) {\n            var key, keyLower, newObj = {};\n\n            if (!$.isArray(keys) || !keys.length) {\n                return newObj;\n            }\n\n            for (var i = 0; i < keys.length; i++) {\n                key = keys[i];\n                if (obj.hasOwnProperty(key)) {\n                    newObj[key] = obj[key];\n                }\n\n                if(caseSensitive === true) {\n                    continue;\n                }\n\n                //when getting data-* attributes via $.data() it's converted to lowercase.\n                //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery\n                //workaround is code below.\n                keyLower = key.toLowerCase();\n                if (obj.hasOwnProperty(keyLower)) {\n                    newObj[key] = obj[keyLower];\n                }\n            }\n\n            return newObj;\n        },\n\n        /*\n        exclude complex objects from $.data() before pass to config\n        */\n        getConfigData: function($element) {\n            var data = {};\n            $.each($element.data(), function(k, v) {\n                if(typeof v !== 'object' || (v && typeof v === 'object' && (v.constructor === Object || v.constructor === Array))) {\n                    data[k] = v;\n                }\n            });\n            return data;\n        },\n\n        /*\n         returns keys of object\n        */\n        objectKeys: function(o) {\n            if (Object.keys) {\n                return Object.keys(o);  \n            } else {\n                if (o !== Object(o)) {\n                    throw new TypeError('Object.keys called on a non-object');\n                }\n                var k=[], p;\n                for (p in o) {\n                    if (Object.prototype.hasOwnProperty.call(o,p)) {\n                        k.push(p);\n                    }\n                }\n                return k;\n            }\n\n        },\n        \n       /**\n        method to escape html.\n       **/\n       escape: function(str) {\n           return $('<div>').text(str).html();\n       },\n       \n       /*\n        returns array items from sourceData having value property equal or inArray of 'value'\n       */\n       itemsByValue: function(value, sourceData, valueProp) {\n           if(!sourceData || value === null) {\n               return [];\n           }\n           \n           if (typeof(valueProp) !== \"function\") {\n               var idKey = valueProp || 'value';\n               valueProp = function (e) { return e[idKey]; };\n           }\n                      \n           var isValArray = $.isArray(value),\n           result = [], \n           that = this;\n\n           $.each(sourceData, function(i, o) {\n               if(o.children) {\n                   result = result.concat(that.itemsByValue(value, o.children, valueProp));\n               } else {\n                   /*jslint eqeq: true*/\n                   if(isValArray) {\n                       if($.grep(value, function(v){  return v == (o && typeof o === 'object' ? valueProp(o) : o); }).length) {\n                           result.push(o); \n                       }\n                   } else {\n                       var itemValue = (o && (typeof o === 'object')) ? valueProp(o) : o;\n                       if(value == itemValue) {\n                           result.push(o); \n                       }\n                   }\n                   /*jslint eqeq: false*/\n               }\n           });\n           \n           return result;\n       },\n       \n       /*\n       Returns input by options: type, mode. \n       */\n       createInput: function(options) {\n           var TypeConstructor, typeOptions, input,\n           type = options.type;\n\n           //`date` is some kind of virtual type that is transformed to one of exact types\n           //depending on mode and core lib\n           if(type === 'date') {\n               //inline\n               if(options.mode === 'inline') {\n                   if($.fn.editabletypes.datefield) {\n                       type = 'datefield';\n                   } else if($.fn.editabletypes.dateuifield) {\n                       type = 'dateuifield';\n                   }\n               //popup\n               } else {\n                   if($.fn.editabletypes.date) {\n                       type = 'date';\n                   } else if($.fn.editabletypes.dateui) {\n                       type = 'dateui';\n                   }\n               }\n               \n               //if type still `date` and not exist in types, replace with `combodate` that is base input\n               if(type === 'date' && !$.fn.editabletypes.date) {\n                   type = 'combodate';\n               } \n           }\n           \n           //`datetime` should be datetimefield in 'inline' mode\n           if(type === 'datetime' && options.mode === 'inline') {\n             type = 'datetimefield';  \n           }           \n\n           //change wysihtml5 to textarea for jquery UI and plain versions\n           if(type === 'wysihtml5' && !$.fn.editabletypes[type]) {\n               type = 'textarea';\n           }\n\n           //create input of specified type. Input will be used for converting value, not in form\n           if(typeof $.fn.editabletypes[type] === 'function') {\n               TypeConstructor = $.fn.editabletypes[type];\n               typeOptions = this.sliceObj(options, this.objectKeys(TypeConstructor.defaults));\n               input = new TypeConstructor(typeOptions);\n               return input;\n           } else {\n               $.error('Unknown type: '+ type);\n               return false; \n           }  \n       },\n       \n       //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n       supportsTransitions: function () {\n           var b = document.body || document.documentElement,\n               s = b.style,\n               p = 'transition',\n               v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];\n               \n           if(typeof s[p] === 'string') {\n               return true; \n           }\n\n           // Tests for vendor specific prop\n           p = p.charAt(0).toUpperCase() + p.substr(1);\n           for(var i=0; i<v.length; i++) {\n               if(typeof s[v[i] + p] === 'string') { \n                   return true; \n               }\n           }\n           return false;\n       }            \n       \n    };      \n}(window.jQuery));\n\n/**\nAttaches stand-alone container with editable-form to HTML element. Element is used only for positioning, value is not stored anywhere.<br>\nThis method applied internally in <code>$().editable()</code>. You should subscribe on it's events (save / cancel) to get profit of it.<br>\nFinal realization can be different: bootstrap-popover, jqueryui-tooltip, poshytip, inline-div. It depends on which js file you include.<br>\nApplied as jQuery method.\n\n@class editableContainer\n@uses editableform\n**/\n(function ($) {\n    \"use strict\";\n\n    var Popup = function (element, options) {\n        this.init(element, options);\n    };\n    \n    var Inline = function (element, options) {\n        this.init(element, options);\n    };    \n\n    //methods\n    Popup.prototype = {\n        containerName: null, //method to call container on element\n        containerDataName: null, //object name in element's .data()\n        innerCss: null, //tbd in child class\n        containerClass: 'editable-container editable-popup', //css class applied to container element\n        defaults: {}, //container itself defaults\n        \n        init: function(element, options) {\n            this.$element = $(element);\n            //since 1.4.1 container do not use data-* directly as they already merged into options.\n            this.options = $.extend({}, $.fn.editableContainer.defaults, options);         \n            this.splitOptions();\n            \n            //set scope of form callbacks to element\n            this.formOptions.scope = this.$element[0]; \n            \n            this.initContainer();\n            \n            //flag to hide container, when saving value will finish\n            this.delayedHide = false;\n\n            //bind 'destroyed' listener to destroy container when element is removed from dom\n            this.$element.on('destroyed', $.proxy(function(){\n                this.destroy();\n            }, this)); \n            \n            //attach document handler to close containers on click / escape\n            if(!$(document).data('editable-handlers-attached')) {\n                //close all on escape\n                $(document).on('keyup.editable', function (e) {\n                    if (e.which === 27) {\n                        $('.editable-open').editableContainer('hide');\n                        //todo: return focus on element \n                    }\n                });\n\n                //close containers when click outside \n                //(mousedown could be better than click, it closes everything also on drag drop)\n                $(document).on('click.editable', function(e) {\n                    var $target = $(e.target), i,\n                        exclude_classes = ['.editable-container', \n                                           '.ui-datepicker-header', \n                                           '.datepicker', //in inline mode datepicker is rendered into body\n                                           '.modal-backdrop', \n                                           '.bootstrap-wysihtml5-insert-image-modal', \n                                           '.bootstrap-wysihtml5-insert-link-modal'\n                                           ];\n                    \n                    //check if element is detached. It occurs when clicking in bootstrap datepicker\n                    if (!$.contains(document.documentElement, e.target)) {\n                      return;\n                    }\n\n                    //for some reason FF 20 generates extra event (click) in select2 widget with e.target = document\n                    //we need to filter it via construction below. See https://github.com/vitalets/x-editable/issues/199\n                    //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec\n                    if($target.is(document)) {\n                       return; \n                    }\n                    \n                    //if click inside one of exclude classes --> no nothing\n                    for(i=0; i<exclude_classes.length; i++) {\n                         if($target.is(exclude_classes[i]) || $target.parents(exclude_classes[i]).length) {\n                             return;\n                         }\n                    }\n                      \n                    //close all open containers (except one - target)\n                    Popup.prototype.closeOthers(e.target);\n                });\n                \n                $(document).data('editable-handlers-attached', true);\n            }                        \n        },\n\n        //split options on containerOptions and formOptions\n        splitOptions: function() {\n            this.containerOptions = {};\n            this.formOptions = {};\n            \n            if(!$.fn[this.containerName]) {\n                throw new Error(this.containerName + ' not found. Have you included corresponding js file?');   \n            }\n            \n            //keys defined in container defaults go to container, others go to form\n            for(var k in this.options) {\n              if(k in this.defaults) {\n                 this.containerOptions[k] = this.options[k];\n              } else {\n                 this.formOptions[k] = this.options[k];\n              } \n            }\n        },\n        \n        /*\n        Returns jquery object of container\n        @method tip()\n        */         \n        tip: function() {\n            return this.container() ? this.container().$tip : null;\n        },\n\n        /* returns container object */\n        container: function() {\n            var container;\n            //first, try get it by `containerDataName`\n            if(this.containerDataName) {\n                if(container = this.$element.data(this.containerDataName)) {\n                    return container;\n                }\n            }\n            //second, try `containerName`\n            container = this.$element.data(this.containerName);\n            return container;\n        },\n\n        /* call native method of underlying container, e.g. this.$element.popover('method') */ \n        call: function() {\n            this.$element[this.containerName].apply(this.$element, arguments); \n        },        \n        \n        initContainer: function(){\n            this.call(this.containerOptions);\n        },\n\n        renderForm: function() {\n            this.$form\n            .editableform(this.formOptions)\n            .on({\n                save: $.proxy(this.save, this), //click on submit button (value changed)\n                nochange: $.proxy(function(){ this.hide('nochange'); }, this), //click on submit button (value NOT changed)                \n                cancel: $.proxy(function(){ this.hide('cancel'); }, this), //click on calcel button\n                show: $.proxy(function() {\n                    if(this.delayedHide) {\n                        this.hide(this.delayedHide.reason);\n                        this.delayedHide = false;\n                    } else {\n                        this.setPosition();\n                    }\n                }, this), //re-position container every time form is shown (occurs each time after loading state)\n                rendering: $.proxy(this.setPosition, this), //this allows to place container correctly when loading shown\n                resize: $.proxy(this.setPosition, this), //this allows to re-position container when form size is changed \n                rendered: $.proxy(function(){\n                    /**        \n                    Fired when container is shown and form is rendered (for select will wait for loading dropdown options).  \n                    **Note:** Bootstrap popover has own `shown` event that now cannot be separated from x-editable's one.\n                    The workaround is to check `arguments.length` that is always `2` for x-editable.                     \n                    \n                    @event shown \n                    @param {Object} event event object\n                    @example\n                    $('#username').on('shown', function(e, editable) {\n                        editable.input.$input.val('overwriting value of input..');\n                    });                     \n                    **/                      \n                    /*\n                     TODO: added second param mainly to distinguish from bootstrap's shown event. It's a hotfix that will be solved in future versions via namespaced events.  \n                    */\n                    this.$element.triggerHandler('shown', $(this.options.scope).data('editable')); \n                }, this) \n            })\n            .editableform('render');\n        },        \n\n        /**\n        Shows container with form\n        @method show()\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\n        **/\n        /* Note: poshytip owerwrites this method totally! */          \n        show: function (closeAll) {\n            this.$element.addClass('editable-open');\n            if(closeAll !== false) {\n                //close all open containers (except this)\n                this.closeOthers(this.$element[0]);  \n            }\n            \n            //show container itself\n            this.innerShow();\n            this.tip().addClass(this.containerClass);\n\n            /*\n            Currently, form is re-rendered on every show. \n            The main reason is that we dont know, what will container do with content when closed:\n            remove(), detach() or just hide() - it depends on container.\n            \n            Detaching form itself before hide and re-insert before show is good solution, \n            but visually it looks ugly --> container changes size before hide.  \n            */             \n            \n            //if form already exist - delete previous data \n            if(this.$form) {\n                //todo: destroy prev data!\n                //this.$form.destroy();\n            }\n\n            this.$form = $('<div>');\n            \n            //insert form into container body\n            if(this.tip().is(this.innerCss)) {\n                //for inline container\n                this.tip().append(this.$form); \n            } else {\n                this.tip().find(this.innerCss).append(this.$form);\n            } \n            \n            //render form\n            this.renderForm();\n        },\n\n        /**\n        Hides container with form\n        @method hide()\n        @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|undefined (=manual)</code>\n        **/         \n        hide: function(reason) {  \n            if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {\n                return;\n            }\n            \n            //if form is saving value, schedule hide\n            if(this.$form.data('editableform').isSaving) {\n                this.delayedHide = {reason: reason};\n                return;    \n            } else {\n                this.delayedHide = false;\n            }\n\n            this.$element.removeClass('editable-open');   \n            this.innerHide();\n\n            /**\n            Fired when container was hidden. It occurs on both save or cancel.  \n            **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one.\n            The workaround is to check `arguments.length` that is always `2` for x-editable. \n\n            @event hidden \n            @param {object} event event object\n            @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|manual</code>\n            @example\n            $('#username').on('hidden', function(e, reason) {\n                if(reason === 'save' || reason === 'cancel') {\n                    //auto-open next editable\n                    $(this).closest('tr').next().find('.editable').editable('show');\n                } \n            });\n            **/\n            this.$element.triggerHandler('hidden', reason || 'manual');   \n        },\n\n        /* internal show method. To be overwritten in child classes */\n        innerShow: function () {\n             \n        },        \n\n        /* internal hide method. To be overwritten in child classes */\n        innerHide: function () {\n\n        },\n        \n        /**\n        Toggles container visibility (show / hide)\n        @method toggle()\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\n        **/          \n        toggle: function(closeAll) {\n            if(this.container() && this.tip() && this.tip().is(':visible')) {\n                this.hide();\n            } else {\n                this.show(closeAll);\n            } \n        },\n\n        /*\n        Updates the position of container when content changed.\n        @method setPosition()\n        */       \n        setPosition: function() {\n            //tbd in child class\n        },\n\n        save: function(e, params) {\n            /**        \n            Fired when new value was submitted. You can use <code>$(this).data('editableContainer')</code> inside handler to access to editableContainer instance\n            \n            @event save \n            @param {Object} event event object\n            @param {Object} params additional params\n            @param {mixed} params.newValue submitted value\n            @param {Object} params.response ajax response\n            @example\n            $('#username').on('save', function(e, params) {\n                //assuming server response: '{success: true}'\n                var pk = $(this).data('editableContainer').options.pk;\n                if(params.response && params.response.success) {\n                    alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');\n                } else {\n                    alert('error!'); \n                } \n            });\n            **/             \n            this.$element.triggerHandler('save', params);\n            \n            //hide must be after trigger, as saving value may require methods of plugin, applied to input\n            this.hide('save');\n        },\n\n        /**\n        Sets new option\n        \n        @method option(key, value)\n        @param {string} key \n        @param {mixed} value \n        **/         \n        option: function(key, value) {\n            this.options[key] = value;\n            if(key in this.containerOptions) {\n                this.containerOptions[key] = value;\n                this.setContainerOption(key, value); \n            } else {\n                this.formOptions[key] = value;\n                if(this.$form) {\n                    this.$form.editableform('option', key, value);  \n                }\n            }\n        },\n        \n        setContainerOption: function(key, value) {\n            this.call('option', key, value);\n        },\n\n        /**\n        Destroys the container instance\n        @method destroy()\n        **/        \n        destroy: function() {\n            this.hide();\n            this.innerDestroy();\n            this.$element.off('destroyed');\n            this.$element.removeData('editableContainer');\n        },\n        \n        /* to be overwritten in child classes */\n        innerDestroy: function() {\n            \n        }, \n        \n        /*\n        Closes other containers except one related to passed element. \n        Other containers can be cancelled or submitted (depends on onblur option)\n        */\n        closeOthers: function(element) {\n            $('.editable-open').each(function(i, el){\n                //do nothing with passed element and it's children\n                if(el === element || $(el).find(element).length) {\n                    return;\n                }\n\n                //otherwise cancel or submit all open containers \n                var $el = $(el),\n                ec = $el.data('editableContainer');\n\n                if(!ec) {\n                    return;  \n                }\n                \n                if(ec.options.onblur === 'cancel') {\n                    $el.data('editableContainer').hide('onblur');\n                } else if(ec.options.onblur === 'submit') {\n                    $el.data('editableContainer').tip().find('form').submit();\n                }\n            });\n\n        },\n        \n        /**\n        Activates input of visible container (e.g. set focus)\n        @method activate()\n        **/         \n        activate: function() {\n            if(this.tip && this.tip().is(':visible') && this.$form) {\n               this.$form.data('editableform').input.activate(); \n            }\n        } \n\n    };\n\n    /**\n    jQuery method to initialize editableContainer.\n    \n    @method $().editableContainer(options)\n    @params {Object} options\n    @example\n    $('#edit').editableContainer({\n        type: 'text',\n        url: '/post',\n        pk: 1,\n        value: 'hello'\n    });\n    **/  \n    $.fn.editableContainer = function (option) {\n        var args = arguments;\n        return this.each(function () {\n            var $this = $(this),\n            dataKey = 'editableContainer', \n            data = $this.data(dataKey),\n            options = typeof option === 'object' && option,\n            Constructor = (options.mode === 'inline') ? Inline : Popup;             \n\n            if (!data) {\n                $this.data(dataKey, (data = new Constructor(this, options)));\n            }\n\n            if (typeof option === 'string') { //call method \n                data[option].apply(data, Array.prototype.slice.call(args, 1));\n            }            \n        });\n    };     \n\n    //store constructors\n    $.fn.editableContainer.Popup = Popup;\n    $.fn.editableContainer.Inline = Inline;\n\n    //defaults\n    $.fn.editableContainer.defaults = {\n        /**\n        Initial value of form input\n\n        @property value \n        @type mixed\n        @default null\n        @private\n        **/        \n        value: null,\n        /**\n        Placement of container relative to element. Can be <code>top|right|bottom|left</code>. Not used for inline container.\n\n        @property placement \n        @type string\n        @default 'top'\n        **/        \n        placement: 'top',\n        /**\n        Whether to hide container on save/cancel.\n\n        @property autohide \n        @type boolean\n        @default true\n        @private \n        **/        \n        autohide: true,\n        /**\n        Action when user clicks outside the container. Can be <code>cancel|submit|ignore</code>.  \n        Setting <code>ignore</code> allows to have several containers open. \n\n        @property onblur \n        @type string\n        @default 'cancel'\n        @since 1.1.1\n        **/        \n        onblur: 'cancel',\n        \n        /**\n        Animation speed (inline mode only)\n        @property anim \n        @type string\n        @default false\n        **/        \n        anim: false,\n        \n        /**\n        Mode of editable, can be `popup` or `inline` \n        \n        @property mode \n        @type string         \n        @default 'popup'\n        @since 1.4.0        \n        **/        \n        mode: 'popup'        \n    };\n\n    /* \n    * workaround to have 'destroyed' event to destroy popover when element is destroyed\n    * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\n    */\n    jQuery.event.special.destroyed = {\n        remove: function(o) {\n            if (o.handler) {\n                o.handler();\n            }\n        }\n    };    \n\n}(window.jQuery));\n\n/**\n* Editable Inline \n* ---------------------\n*/\n(function ($) {\n    \"use strict\";\n    \n    //copy prototype from EditableContainer\n    //extend methods\n    $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, {\n        containerName: 'editableform',\n        innerCss: '.editable-inline',\n        containerClass: 'editable-container editable-inline', //css class applied to container element\n                 \n        initContainer: function(){\n            //container is <span> element\n            this.$tip = $('<span></span>');\n            \n            //convert anim to miliseconds (int)\n            if(!this.options.anim) {\n                this.options.anim = 0;\n            }         \n        },\n        \n        splitOptions: function() {\n            //all options are passed to form\n            this.containerOptions = {};\n            this.formOptions = this.options;\n        },\n        \n        tip: function() {\n           return this.$tip; \n        },\n        \n        innerShow: function () {\n            this.$element.hide();\n            this.tip().insertAfter(this.$element).show();\n        }, \n        \n        innerHide: function () {\n            this.$tip.hide(this.options.anim, $.proxy(function() {\n                this.$element.show();\n                this.innerDestroy();\n            }, this)); \n        },\n        \n        innerDestroy: function() {\n            if(this.tip()) {\n                this.tip().empty().remove();\n            }\n        } \n    });\n\n}(window.jQuery));\n/**\nMakes editable any HTML element on the page. Applied as jQuery method.\n\n@class editable\n@uses editableContainer\n**/\n(function ($) {\n    \"use strict\";\n\n    var Editable = function (element, options) {\n        this.$element = $(element);\n        //data-* has more priority over js options: because dynamically created elements may change data-* \n        this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element));  \n        if(this.options.selector) {\n            this.initLive();\n        } else {\n            this.init();\n        }\n        \n        //check for transition support\n        if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) {\n            this.options.highlight = false;\n        }\n    };\n\n    Editable.prototype = {\n        constructor: Editable, \n        init: function () {\n            var isValueByText = false, \n                doAutotext, finalize;\n\n            //name\n            this.options.name = this.options.name || this.$element.attr('id');\n             \n            //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select)\n            //also we set scope option to have access to element inside input specific callbacks (e. g. source as function)\n            this.options.scope = this.$element[0]; \n            this.input = $.fn.editableutils.createInput(this.options);\n            if(!this.input) {\n                return; \n            }            \n\n            //set value from settings or by element's text\n            if (this.options.value === undefined || this.options.value === null) {\n                this.value = this.input.html2value($.trim(this.$element.html()));\n                isValueByText = true;\n            } else {\n                /*\n                  value can be string when received from 'data-value' attribute\n                  for complext objects value can be set as json string in data-value attribute, \n                  e.g. data-value=\"{city: 'Moscow', street: 'Lenina'}\"\n                */\n                this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); \n                if(typeof this.options.value === 'string') {\n                    this.value = this.input.str2value(this.options.value);\n                } else {\n                    this.value = this.options.value;\n                }\n            }\n            \n            //add 'editable' class to every editable element\n            this.$element.addClass('editable');\n            \n            //specifically for \"textarea\" add class .editable-pre-wrapped to keep linebreaks\n            if(this.input.type === 'textarea') {\n                this.$element.addClass('editable-pre-wrapped');\n            }\n            \n            //attach handler activating editable. In disabled mode it just prevent default action (useful for links)\n            if(this.options.toggle !== 'manual') {\n                this.$element.addClass('editable-click');\n                this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){\n                    //prevent following link if editable enabled\n                    if(!this.options.disabled) {\n                        e.preventDefault();\n                    }\n                    \n                    //stop propagation not required because in document click handler it checks event target\n                    //e.stopPropagation();\n                    \n                    if(this.options.toggle === 'mouseenter') {\n                        //for hover only show container\n                        this.show();\n                    } else {\n                        //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener\n                        var closeAll = (this.options.toggle !== 'click');\n                        this.toggle(closeAll);\n                    }\n                }, this));\n            } else {\n                this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually\n            }\n            \n            //if display is function it's far more convinient to have autotext = always to render correctly on init\n            //see https://github.com/vitalets/x-editable-yii/issues/34\n            if(typeof this.options.display === 'function') {\n                this.options.autotext = 'always';\n            }\n            \n            //check conditions for autotext:\n            switch(this.options.autotext) {\n              case 'always':\n               doAutotext = true;\n              break;\n              case 'auto':\n                //if element text is empty and value is defined and value not generated by text --> run autotext\n                doAutotext = !$.trim(this.$element.text()).length && this.value !== null && this.value !== undefined && !isValueByText;\n              break;\n              default:\n               doAutotext = false;\n            }\n\n            //depending on autotext run render() or just finilize init\n            $.when(doAutotext ? this.render() : true).then($.proxy(function() {\n                if(this.options.disabled) {\n                    this.disable();\n                } else {\n                    this.enable(); \n                }\n               /**        \n               Fired when element was initialized by `$().editable()` method. \n               Please note that you should setup `init` handler **before** applying `editable`. \n                              \n               @event init \n               @param {Object} event event object\n               @param {Object} editable editable instance (as here it cannot accessed via data('editable'))\n               @since 1.2.0\n               @example\n               $('#username').on('init', function(e, editable) {\n                   alert('initialized ' + editable.options.name);\n               });\n               $('#username').editable();\n               **/                  \n                this.$element.triggerHandler('init', this);\n            }, this));\n        },\n\n        /*\n         Initializes parent element for live editables \n        */\n        initLive: function() {\n           //store selector \n           var selector = this.options.selector;\n           //modify options for child elements\n           this.options.selector = false; \n           this.options.autotext = 'never';\n           //listen toggle events\n           this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){\n               var $target = $(e.target);\n               if(!$target.data('editable')) {\n                   //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user)\n                   //see https://github.com/vitalets/x-editable/issues/137 \n                   if($target.hasClass(this.options.emptyclass)) {\n                      $target.empty();\n                   }\n                   $target.editable(this.options).trigger(e);\n               }\n           }, this)); \n        },\n        \n        /*\n        Renders value into element's text.\n        Can call custom display method from options.\n        Can return deferred object.\n        @method render()\n        @param {mixed} response server response (if exist) to pass into display function\n        */          \n        render: function(response) {\n            //do not display anything\n            if(this.options.display === false) {\n                return;\n            }\n            \n            //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded\n            if(this.input.value2htmlFinal) {\n                return this.input.value2html(this.value, this.$element[0], this.options.display, response); \n            //if display method defined --> use it    \n            } else if(typeof this.options.display === 'function') {\n                return this.options.display.call(this.$element[0], this.value, response);\n            //else use input's original value2html() method    \n            } else {\n                return this.input.value2html(this.value, this.$element[0]); \n            }\n        },\n        \n        /**\n        Enables editable\n        @method enable()\n        **/          \n        enable: function() {\n            this.options.disabled = false;\n            this.$element.removeClass('editable-disabled');\n            this.handleEmpty(this.isEmpty);\n            if(this.options.toggle !== 'manual') {\n                if(this.$element.attr('tabindex') === '-1') {    \n                    this.$element.removeAttr('tabindex');                                \n                }\n            }\n        },\n        \n        /**\n        Disables editable\n        @method disable()\n        **/         \n        disable: function() {\n            this.options.disabled = true; \n            this.hide();           \n            this.$element.addClass('editable-disabled');\n            this.handleEmpty(this.isEmpty);\n            //do not stop focus on this element\n            this.$element.attr('tabindex', -1);                \n        },\n        \n        /**\n        Toggles enabled / disabled state of editable element\n        @method toggleDisabled()\n        **/         \n        toggleDisabled: function() {\n            if(this.options.disabled) {\n                this.enable();\n            } else { \n                this.disable(); \n            }\n        },  \n        \n        /**\n        Sets new option\n        \n        @method option(key, value)\n        @param {string|object} key option name or object with several options\n        @param {mixed} value option new value\n        @example\n        $('.editable').editable('option', 'pk', 2);\n        **/          \n        option: function(key, value) {\n            //set option(s) by object\n            if(key && typeof key === 'object') {\n               $.each(key, $.proxy(function(k, v){\n                  this.option($.trim(k), v); \n               }, this)); \n               return;\n            }\n\n            //set option by string             \n            this.options[key] = value;                          \n            \n            //disabled\n            if(key === 'disabled') {\n               return value ? this.disable() : this.enable();\n            } \n            \n            //value\n            if(key === 'value') {\n                this.setValue(value);\n            }\n            \n            //transfer new option to container! \n            if(this.container) {\n                this.container.option(key, value);  \n            }\n             \n            //pass option to input directly (as it points to the same in form)\n            if(this.input.option) {\n                this.input.option(key, value);\n            }\n            \n        },              \n        \n        /*\n        * set emptytext if element is empty\n        */\n        handleEmpty: function (isEmpty) {\n            //do not handle empty if we do not display anything\n            if(this.options.display === false) {\n                return;\n            }\n\n            /* \n            isEmpty may be set directly as param of method.\n            It is required when we enable/disable field and can't rely on content \n            as node content is text: \"Empty\" that is not empty %)\n            */\n            if(isEmpty !== undefined) { \n                this.isEmpty = isEmpty;\n            } else {\n                //detect empty\n                //for some inputs we need more smart check\n                //e.g. wysihtml5 may have <br>, <p></p>, <img>\n                if(typeof(this.input.isEmpty) === 'function') {\n                    this.isEmpty = this.input.isEmpty(this.$element);                    \n                } else {\n                    this.isEmpty = $.trim(this.$element.html()) === '';\n                }\n            }           \n            \n            //emptytext shown only for enabled\n            if(!this.options.disabled) {\n                if (this.isEmpty) {\n                    this.$element.html(this.options.emptytext);\n                    if(this.options.emptyclass) {\n                        this.$element.addClass(this.options.emptyclass);\n                    }\n                } else if(this.options.emptyclass) {\n                    this.$element.removeClass(this.options.emptyclass);\n                }\n            } else {\n                //below required if element disable property was changed\n                if(this.isEmpty) {\n                    this.$element.empty();\n                    if(this.options.emptyclass) {\n                        this.$element.removeClass(this.options.emptyclass);\n                    }\n                }\n            }\n        },        \n        \n        /**\n        Shows container with form\n        @method show()\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\n        **/  \n        show: function (closeAll) {\n            if(this.options.disabled) {\n                return;\n            }\n            \n            //init editableContainer: popover, tooltip, inline, etc..\n            if(!this.container) {\n                var containerOptions = $.extend({}, this.options, {\n                    value: this.value,\n                    input: this.input //pass input to form (as it is already created)\n                });\n                this.$element.editableContainer(containerOptions);\n                //listen `save` event \n                this.$element.on(\"save.internal\", $.proxy(this.save, this));\n                this.container = this.$element.data('editableContainer'); \n            } else if(this.container.tip().is(':visible')) {\n                return;\n            }      \n            \n            //show container\n            this.container.show(closeAll);\n        },\n        \n        /**\n        Hides container with form\n        @method hide()\n        **/       \n        hide: function () {   \n            if(this.container) {  \n                this.container.hide();\n            }\n        },\n        \n        /**\n        Toggles container visibility (show / hide)\n        @method toggle()\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\n        **/  \n        toggle: function(closeAll) {\n            if(this.container && this.container.tip().is(':visible')) {\n                this.hide();\n            } else {\n                this.show(closeAll);\n            }\n        },\n        \n        /*\n        * called when form was submitted\n        */          \n        save: function(e, params) {\n            //mark element with unsaved class if needed\n            if(this.options.unsavedclass) {\n                /*\n                 Add unsaved css to element if:\n                  - url is not user's function \n                  - value was not sent to server\n                  - params.response === undefined, that means data was not sent\n                  - value changed \n                */\n                var sent = false;\n                sent = sent || typeof this.options.url === 'function';\n                sent = sent || this.options.display === false; \n                sent = sent || params.response !== undefined; \n                sent = sent || (this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(params.newValue)); \n                \n                if(sent) {\n                    this.$element.removeClass(this.options.unsavedclass); \n                } else {\n                    this.$element.addClass(this.options.unsavedclass);                    \n                }\n            }\n            \n            //highlight when saving\n            if(this.options.highlight) {\n                var $e = this.$element,\n                    bgColor = $e.css('background-color');\n                    \n                $e.css('background-color', this.options.highlight);\n                setTimeout(function(){\n                    if(bgColor === 'transparent') {\n                        bgColor = ''; \n                    }\n                    $e.css('background-color', bgColor);\n                    $e.addClass('editable-bg-transition');\n                    setTimeout(function(){\n                       $e.removeClass('editable-bg-transition');  \n                    }, 1700);\n                }, 10);\n            }\n            \n            //set new value\n            this.setValue(params.newValue, false, params.response);\n            \n            /**        \n            Fired when new value was submitted. You can use <code>$(this).data('editable')</code> to access to editable instance\n            \n            @event save \n            @param {Object} event event object\n            @param {Object} params additional params\n            @param {mixed} params.newValue submitted value\n            @param {Object} params.response ajax response\n            @example\n            $('#username').on('save', function(e, params) {\n                alert('Saved value: ' + params.newValue);\n            });\n            **/\n            //event itself is triggered by editableContainer. Description here is only for documentation              \n        },\n\n        validate: function () {\n            if (typeof this.options.validate === 'function') {\n                return this.options.validate.call(this, this.value);\n            }\n        },\n        \n        /**\n        Sets new value of editable\n        @method setValue(value, convertStr)\n        @param {mixed} value new value \n        @param {boolean} convertStr whether to convert value from string to internal format\n        **/         \n        setValue: function(value, convertStr, response) {\n            if(convertStr) {\n                this.value = this.input.str2value(value);\n            } else {\n                this.value = value;\n            }\n            if(this.container) {\n                this.container.option('value', this.value);\n            }\n            $.when(this.render(response))\n            .then($.proxy(function() {\n                this.handleEmpty();\n            }, this));\n        },\n        \n        /**\n        Activates input of visible container (e.g. set focus)\n        @method activate()\n        **/         \n        activate: function() {\n            if(this.container) {\n               this.container.activate(); \n            }\n        },\n        \n        /**\n        Removes editable feature from element\n        @method destroy()\n        **/        \n        destroy: function() {\n            this.disable();\n            \n            if(this.container) {\n               this.container.destroy(); \n            }\n            \n            this.input.destroy();\n\n            if(this.options.toggle !== 'manual') {\n                this.$element.removeClass('editable-click');\n                this.$element.off(this.options.toggle + '.editable');\n            } \n            \n            this.$element.off(\"save.internal\");\n            \n            this.$element.removeClass('editable editable-open editable-disabled');\n            this.$element.removeData('editable');\n        }        \n    };\n\n    /* EDITABLE PLUGIN DEFINITION\n    * ======================= */\n\n    /**\n    jQuery method to initialize editable element.\n    \n    @method $().editable(options)\n    @params {Object} options\n    @example\n    $('#username').editable({\n        type: 'text',\n        url: '/post',\n        pk: 1\n    });\n    **/\n    $.fn.editable = function (option) {\n        //special API methods returning non-jquery object\n        var result = {}, args = arguments, datakey = 'editable';\n        switch (option) {\n            /**\n            Runs client-side validation for all matched editables\n            \n            @method validate()\n            @returns {Object} validation errors map\n            @example\n            $('#username, #fullname').editable('validate');\n            // possible result:\n            {\n              username: \"username is required\",\n              fullname: \"fullname should be minimum 3 letters length\"\n            }\n            **/\n            case 'validate':\n                this.each(function () {\n                    var $this = $(this), data = $this.data(datakey), error;\n                    if (data && (error = data.validate())) {\n                        result[data.options.name] = error;\n                    }\n                });\n            return result;\n\n            /**\n            Returns current values of editable elements.   \n            Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements.    \n            If value of some editable is `null` or `undefined` it is excluded from result object.\n            When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object.   \n             \n            @method getValue()\n            @param {bool} isSingle whether to return just value of single element\n            @returns {Object} object of element names and values\n            @example\n            $('#username, #fullname').editable('getValue');\n            //result:\n            {\n            username: \"superuser\",\n            fullname: \"John\"\n            }\n            //isSingle = true\n            $('#username').editable('getValue', true);\n            //result \"superuser\" \n            **/\n            case 'getValue':\n                if(arguments.length === 2 && arguments[1] === true) { //isSingle = true\n                    result = this.eq(0).data(datakey).value;\n                } else {\n                    this.each(function () {\n                        var $this = $(this), data = $this.data(datakey);\n                        if (data && data.value !== undefined && data.value !== null) {\n                            result[data.options.name] = data.input.value2submit(data.value);\n                        }\n                    });\n                }\n            return result;\n\n            /**\n            This method collects values from several editable elements and submit them all to server.   \n            Internally it runs client-side validation for all fields and submits only in case of success.  \n            See <a href=\"#newrecord\">creating new records</a> for details.  \n            Since 1.5.1 `submit` can be applied to single element to send data programmatically. In that case\n            `url`, `success` and `error` is taken from initial options and you can just call `$('#username').editable('submit')`. \n            \n            @method submit(options)\n            @param {object} options \n            @param {object} options.url url to submit data \n            @param {object} options.data additional data to submit\n            @param {object} options.ajaxOptions additional ajax options\n            @param {function} options.error(obj) error handler \n            @param {function} options.success(obj,config) success handler\n            @returns {Object} jQuery object\n            **/\n            case 'submit':  //collects value, validate and submit to server for creating new record\n                var config = arguments[1] || {},\n                $elems = this,\n                errors = this.editable('validate');\n\n                // validation ok\n                if($.isEmptyObject(errors)) {\n                    var ajaxOptions = {};\n                                                      \n                    // for single element use url, success etc from options\n                    if($elems.length === 1) {\n                        var editable = $elems.data('editable');\n                        //standard params\n                        var params = {\n                            name: editable.options.name || '',\n                            value: editable.input.value2submit(editable.value),\n                            pk: (typeof editable.options.pk === 'function') ? \n                                editable.options.pk.call(editable.options.scope) : \n                                editable.options.pk \n                        };\n\n                        //additional params\n                        if(typeof editable.options.params === 'function') {\n                            params = editable.options.params.call(editable.options.scope, params);  \n                        } else {\n                            //try parse json in single quotes (from data-params attribute)\n                            editable.options.params = $.fn.editableutils.tryParseJson(editable.options.params, true);   \n                            $.extend(params, editable.options.params);\n                        }\n\n                        ajaxOptions = {\n                            url: editable.options.url,\n                            data: params,\n                            type: 'POST'  \n                        };\n                        \n                        // use success / error from options \n                        config.success = config.success || editable.options.success;\n                        config.error = config.error || editable.options.error;\n                        \n                    // multiple elements\n                    } else {\n                        var values = this.editable('getValue'); \n                        \n                        ajaxOptions = {\n                            url: config.url,\n                            data: values, \n                            type: 'POST'\n                        };                        \n                    }                    \n\n                    // ajax success callabck (response 200 OK)\n                    ajaxOptions.success = typeof config.success === 'function' ? function(response) {\n                            config.success.call($elems, response, config);\n                        } : $.noop;\n                                  \n                    // ajax error callabck\n                    ajaxOptions.error = typeof config.error === 'function' ? function() {\n                             config.error.apply($elems, arguments);\n                        } : $.noop;\n                       \n                    // extend ajaxOptions    \n                    if(config.ajaxOptions) { \n                        $.extend(ajaxOptions, config.ajaxOptions);\n                    }\n                    \n                    // extra data \n                    if(config.data) {\n                        $.extend(ajaxOptions.data, config.data);\n                    }                     \n                    \n                    // perform ajax request\n                    $.ajax(ajaxOptions);\n                } else { //client-side validation error\n                    if(typeof config.error === 'function') {\n                        config.error.call($elems, errors);\n                    }\n                }\n            return this;\n        }\n\n        //return jquery object\n        return this.each(function () {\n            var $this = $(this), \n                data = $this.data(datakey), \n                options = typeof option === 'object' && option;\n\n            //for delegated targets do not store `editable` object for element\n            //it's allows several different selectors.\n            //see: https://github.com/vitalets/x-editable/issues/312    \n            if(options && options.selector) {\n                data = new Editable(this, options);\n                return; \n            }    \n            \n            if (!data) {\n                $this.data(datakey, (data = new Editable(this, options)));\n            }\n\n            if (typeof option === 'string') { //call method \n                data[option].apply(data, Array.prototype.slice.call(args, 1));\n            } \n        });\n    };    \n            \n\n    $.fn.editable.defaults = {\n        /**\n        Type of input. Can be <code>text|textarea|select|date|checklist</code> and more\n\n        @property type \n        @type string\n        @default 'text'\n        **/\n        type: 'text',        \n        /**\n        Sets disabled state of editable\n\n        @property disabled \n        @type boolean\n        @default false\n        **/         \n        disabled: false,\n        /**\n        How to toggle editable. Can be <code>click|dblclick|mouseenter|manual</code>.   \n        When set to <code>manual</code> you should manually call <code>show/hide</code> methods of editable.    \n        **Note**: if you call <code>show</code> or <code>toggle</code> inside **click** handler of some DOM element, \n        you need to apply <code>e.stopPropagation()</code> because containers are being closed on any click on document.\n        \n        @example\n        $('#edit-button').click(function(e) {\n            e.stopPropagation();\n            $('#username').editable('toggle');\n        });\n\n        @property toggle \n        @type string\n        @default 'click'\n        **/          \n        toggle: 'click',\n        /**\n        Text shown when element is empty.\n\n        @property emptytext \n        @type string\n        @default 'Empty'\n        **/         \n        emptytext: 'Empty',\n        /**\n        Allows to automatically set element's text based on it's value. Can be <code>auto|always|never</code>. Useful for select and date.\n        For example, if dropdown list is <code>{1: 'a', 2: 'b'}</code> and element's value set to <code>1</code>, it's html will be automatically set to <code>'a'</code>.  \n        <code>auto</code> - text will be automatically set only if element is empty.  \n        <code>always|never</code> - always(never) try to set element's text.\n\n        @property autotext \n        @type string\n        @default 'auto'\n        **/          \n        autotext: 'auto', \n        /**\n        Initial value of input. If not set, taken from element's text.  \n        Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option).  \n        For example, to display currency sign:\n        @example\n        <a id=\"price\" data-type=\"text\" data-value=\"100\"></a>\n        <script>\n        $('#price').editable({\n            ...\n            display: function(value) {\n              $(this).text(value + '$');\n            } \n        }) \n        </script>\n                \n        @property value \n        @type mixed\n        @default element's text\n        **/\n        value: null,\n        /**\n        Callback to perform custom displaying of value in element's text.  \n        If `null`, default input's display used.  \n        If `false`, no displaying methods will be called, element's text will never change.  \n        Runs under element's scope.  \n        _**Parameters:**_  \n        \n        * `value` current value to be displayed\n        * `response` server response (if display called after ajax submit), since 1.4.0\n         \n        For _inputs with source_ (select, checklist) parameters are different:  \n          \n        * `value` current value to be displayed\n        * `sourceData` array of items for current input (e.g. dropdown items) \n        * `response` server response (if display called after ajax submit), since 1.4.0\n                  \n        To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`.\n        \n        @property display \n        @type function|boolean\n        @default null\n        @since 1.2.0\n        @example\n        display: function(value, sourceData) {\n           //display checklist as comma-separated values\n           var html = [],\n               checked = $.fn.editableutils.itemsByValue(value, sourceData);\n               \n           if(checked.length) {\n               $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });\n               $(this).html(html.join(', '));\n           } else {\n               $(this).empty(); \n           }\n        }\n        **/          \n        display: null,\n        /**\n        Css class applied when editable text is empty.\n\n        @property emptyclass \n        @type string\n        @since 1.4.1        \n        @default editable-empty\n        **/        \n        emptyclass: 'editable-empty',\n        /**\n        Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`).  \n        You may set it to `null` if you work with editables locally and submit them together.  \n\n        @property unsavedclass \n        @type string\n        @since 1.4.1        \n        @default editable-unsaved\n        **/        \n        unsavedclass: 'editable-unsaved',\n        /**\n        If selector is provided, editable will be delegated to the specified targets.  \n        Usefull for dynamically generated DOM elements.  \n        **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, \n        as they actually become editable only after first click.  \n        You should manually set class `editable-click` to these elements.  \n        Also, if element originally empty you should add class `editable-empty`, set `data-value=\"\"` and write emptytext into element:\n\n        @property selector \n        @type string\n        @since 1.4.1        \n        @default null\n        @example\n        <div id=\"user\">\n          <!-- empty -->\n          <a href=\"#\" data-name=\"username\" data-type=\"text\" class=\"editable-click editable-empty\" data-value=\"\" title=\"Username\">Empty</a>\n          <!-- non-empty -->\n          <a href=\"#\" data-name=\"group\" data-type=\"select\" data-source=\"/groups\" data-value=\"1\" class=\"editable-click\" title=\"Group\">Operator</a>\n        </div>     \n        \n        <script>\n        $('#user').editable({\n            selector: 'a',\n            url: '/post',\n            pk: 1\n        });\n        </script>\n        **/         \n        selector: null,\n        /**\n        Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers.\n        \n        @property highlight \n        @type string|boolean\n        @since 1.4.5        \n        @default #FFFF80 \n        **/\n        highlight: '#FFFF80'\n    };\n    \n}(window.jQuery));\n\n/**\nAbstractInput - base class for all editable inputs.\nIt defines interface to be implemented by any input type.\nTo create your own input you can inherit from this class.\n\n@class abstractinput\n**/\n(function ($) {\n    \"use strict\";\n\n    //types\n    $.fn.editabletypes = {};\n\n    var AbstractInput = function () { };\n\n    AbstractInput.prototype = {\n       /**\n        Initializes input\n\n        @method init() \n        **/\n       init: function(type, options, defaults) {\n           this.type = type;\n           this.options = $.extend({}, defaults, options);\n       },\n\n       /*\n       this method called before render to init $tpl that is inserted in DOM\n       */\n       prerender: function() {\n           this.$tpl = $(this.options.tpl); //whole tpl as jquery object    \n           this.$input = this.$tpl;         //control itself, can be changed in render method\n           this.$clear = null;              //clear button\n           this.error = null;               //error message, if input cannot be rendered           \n       },\n       \n       /**\n        Renders input from tpl. Can return jQuery deferred object.\n        Can be overwritten in child objects\n\n        @method render()\n       **/\n       render: function() {\n\n       }, \n\n       /**\n        Sets element's html by value. \n\n        @method value2html(value, element)\n        @param {mixed} value\n        @param {DOMElement} element\n       **/\n       value2html: function(value, element) {\n           $(element)[this.options.escape ? 'text' : 'html']($.trim(value));\n       },\n\n       /**\n        Converts element's html to value\n\n        @method html2value(html)\n        @param {string} html\n        @returns {mixed}\n       **/\n       html2value: function(html) {\n           return $('<div>').html(html).text();\n       },\n\n       /**\n        Converts value to string (for internal compare). For submitting to server used value2submit().\n\n        @method value2str(value) \n        @param {mixed} value\n        @returns {string}\n       **/\n       value2str: function(value) {\n           return value;\n       }, \n\n       /**\n        Converts string received from server into value. Usually from `data-value` attribute.\n\n        @method str2value(str)\n        @param {string} str\n        @returns {mixed}\n       **/\n       str2value: function(str) {\n           return str;\n       }, \n       \n       /**\n        Converts value for submitting to server. Result can be string or object.\n\n        @method value2submit(value) \n        @param {mixed} value\n        @returns {mixed}\n       **/\n       value2submit: function(value) {\n           return value;\n       },\n\n       /**\n        Sets value of input.\n\n        @method value2input(value) \n        @param {mixed} value\n       **/\n       value2input: function(value) {\n           this.$input.val(value);\n       },\n\n       /**\n        Returns value of input. Value can be object (e.g. datepicker)\n\n        @method input2value() \n       **/\n       input2value: function() { \n           return this.$input.val();\n       }, \n\n       /**\n        Activates input. For text it sets focus.\n\n        @method activate() \n       **/\n       activate: function() {\n           if(this.$input.is(':visible')) {\n               this.$input.focus();\n           }\n       },\n\n       /**\n        Creates input.\n\n        @method clear() \n       **/        \n       clear: function() {\n           this.$input.val(null);\n       },\n\n       /**\n        method to escape html.\n       **/\n       escape: function(str) {\n           return $('<div>').text(str).html();\n       },\n       \n       /**\n        attach handler to automatically submit form when value changed (useful when buttons not shown)\n       **/\n       autosubmit: function() {\n        \n       },\n       \n       /**\n       Additional actions when destroying element \n       **/\n       destroy: function() {\n       },\n\n       // -------- helper functions --------\n       setClass: function() {          \n           if(this.options.inputclass) {\n               this.$input.addClass(this.options.inputclass); \n           } \n       },\n\n       setAttr: function(attr) {\n           if (this.options[attr] !== undefined && this.options[attr] !== null) {\n               this.$input.attr(attr, this.options[attr]);\n           } \n       },\n       \n       option: function(key, value) {\n            this.options[key] = value;\n       }\n       \n    };\n        \n    AbstractInput.defaults = {  \n        /**\n        HTML template of input. Normally you should not change it.\n\n        @property tpl \n        @type string\n        @default ''\n        **/   \n        tpl: '',\n        /**\n        CSS class automatically applied to input\n        \n        @property inputclass \n        @type string\n        @default null\n        **/         \n        inputclass: null,\n        \n        /**\n        If `true` - html will be escaped in content of element via $.text() method.  \n        If `false` - html will not be escaped, $.html() used.  \n        When you use own `display` function, this option obviosly has no effect.\n        \n        @property escape \n        @type boolean\n        @since 1.5.0\n        @default true\n        **/         \n        escape: true,\n                \n        //scope for external methods (e.g. source defined as function)\n        //for internal use only\n        scope: null,\n        \n        //need to re-declare showbuttons here to get it's value from common config (passed only options existing in defaults)\n        showbuttons: true \n    };\n    \n    $.extend($.fn.editabletypes, {abstractinput: AbstractInput});\n        \n}(window.jQuery));\n\n/**\nList - abstract class for inputs that have source option loaded from js array or via ajax\n\n@class list\n@extends abstractinput\n**/\n(function ($) {\n    \"use strict\";\n    \n    var List = function (options) {\n       \n    };\n\n    $.fn.editableutils.inherit(List, $.fn.editabletypes.abstractinput);\n\n    $.extend(List.prototype, {\n        render: function () {\n            var deferred = $.Deferred();\n\n            this.error = null;\n            this.onSourceReady(function () {\n                this.renderList();\n                deferred.resolve();\n            }, function () {\n                this.error = this.options.sourceError;\n                deferred.resolve();\n            });\n\n            return deferred.promise();\n        },\n\n        html2value: function (html) {\n            return null; //can't set value by text\n        },\n        \n        value2html: function (value, element, display, response) {\n            var deferred = $.Deferred(),\n                success = function () {\n                    if(typeof display === 'function') {\n                        //custom display method\n                        display.call(element, value, this.sourceData, response); \n                    } else {\n                        this.value2htmlFinal(value, element);\n                    }\n                    deferred.resolve();\n               };\n            \n            //for null value just call success without loading source\n            if(value === null) {\n               success.call(this);   \n            } else {\n               this.onSourceReady(success, function () { deferred.resolve(); });\n            }\n\n            return deferred.promise();\n        },  \n\n        // ------------- additional functions ------------\n\n        onSourceReady: function (success, error) {\n            //run source if it function\n            var source;\n            if ($.isFunction(this.options.source)) {\n                source = this.options.source.call(this.options.scope);\n                this.sourceData = null;\n                //note: if function returns the same source as URL - sourceData will be taken from cahce and no extra request performed\n            } else {\n                source = this.options.source;\n            }            \n            \n            //if allready loaded just call success\n            if(this.options.sourceCache && $.isArray(this.sourceData)) {\n                success.call(this);\n                return; \n            }\n\n            //try parse json in single quotes (for double quotes jquery does automatically)\n            try {\n                source = $.fn.editableutils.tryParseJson(source, false);\n            } catch (e) {\n                error.call(this);\n                return;\n            }\n\n            //loading from url\n            if (typeof source === 'string') {\n                //try to get sourceData from cache\n                if(this.options.sourceCache) {\n                    var cacheID = source,\n                    cache;\n\n                    if (!$(document).data(cacheID)) {\n                        $(document).data(cacheID, {});\n                    }\n                    cache = $(document).data(cacheID);\n\n                    //check for cached data\n                    if (cache.loading === false && cache.sourceData) { //take source from cache\n                        this.sourceData = cache.sourceData;\n                        this.doPrepend();\n                        success.call(this);\n                        return;\n                    } else if (cache.loading === true) { //cache is loading, put callback in stack to be called later\n                        cache.callbacks.push($.proxy(function () {\n                            this.sourceData = cache.sourceData;\n                            this.doPrepend();\n                            success.call(this);\n                        }, this));\n\n                        //also collecting error callbacks\n                        cache.err_callbacks.push($.proxy(error, this));\n                        return;\n                    } else { //no cache yet, activate it\n                        cache.loading = true;\n                        cache.callbacks = [];\n                        cache.err_callbacks = [];\n                    }\n                }\n                \n                //ajaxOptions for source. Can be overwritten bt options.sourceOptions\n                var ajaxOptions = $.extend({\n                    url: source,\n                    type: 'get',\n                    cache: false,\n                    dataType: 'json',\n                    success: $.proxy(function (data) {\n                        if(cache) {\n                            cache.loading = false;\n                        }\n                        this.sourceData = this.makeArray(data);\n                        if($.isArray(this.sourceData)) {\n                            if(cache) {\n                                //store result in cache\n                                cache.sourceData = this.sourceData;\n                                //run success callbacks for other fields waiting for this source\n                                $.each(cache.callbacks, function () { this.call(); }); \n                            }\n                            this.doPrepend();\n                            success.call(this);\n                        } else {\n                            error.call(this);\n                            if(cache) {\n                                //run error callbacks for other fields waiting for this source\n                                $.each(cache.err_callbacks, function () { this.call(); }); \n                            }\n                        }\n                    }, this),\n                    error: $.proxy(function () {\n                        error.call(this);\n                        if(cache) {\n                             cache.loading = false;\n                             //run error callbacks for other fields\n                             $.each(cache.err_callbacks, function () { this.call(); }); \n                        }\n                    }, this)\n                }, this.options.sourceOptions);\n                \n                //loading sourceData from server\n                $.ajax(ajaxOptions);\n                \n            } else { //options as json/array\n                this.sourceData = this.makeArray(source);\n                    \n                if($.isArray(this.sourceData)) {\n                    this.doPrepend();\n                    success.call(this);   \n                } else {\n                    error.call(this);\n                }\n            }\n        },\n\n        doPrepend: function () {\n            if(this.options.prepend === null || this.options.prepend === undefined) {\n                return;  \n            }\n            \n            if(!$.isArray(this.prependData)) {\n                //run prepend if it is function (once)\n                if ($.isFunction(this.options.prepend)) {\n                    this.options.prepend = this.options.prepend.call(this.options.scope);\n                }\n              \n                //try parse json in single quotes\n                this.options.prepend = $.fn.editableutils.tryParseJson(this.options.prepend, true);\n                \n                //convert prepend from string to object\n                if (typeof this.options.prepend === 'string') {\n                    this.options.prepend = {'': this.options.prepend};\n                }\n                \n                this.prependData = this.makeArray(this.options.prepend);\n            }\n\n            if($.isArray(this.prependData) && $.isArray(this.sourceData)) {\n                this.sourceData = this.prependData.concat(this.sourceData);\n            }\n        },\n\n        /*\n         renders input list\n        */\n        renderList: function() {\n            // this method should be overwritten in child class\n        },\n       \n         /*\n         set element's html by value\n        */\n        value2htmlFinal: function(value, element) {\n            // this method should be overwritten in child class\n        },        \n\n        /**\n        * convert data to array suitable for sourceData, e.g. [{value: 1, text: 'abc'}, {...}]\n        */\n        makeArray: function(data) {\n            var count, obj, result = [], item, iterateItem;\n            if(!data || typeof data === 'string') {\n                return null; \n            }\n\n            if($.isArray(data)) { //array\n                /* \n                   function to iterate inside item of array if item is object.\n                   Caclulates count of keys in item and store in obj. \n                */\n                iterateItem = function (k, v) {\n                    obj = {value: k, text: v};\n                    if(count++ >= 2) {\n                        return false;// exit from `each` if item has more than one key.\n                    }\n                };\n            \n                for(var i = 0; i < data.length; i++) {\n                    item = data[i]; \n                    if(typeof item === 'object') {\n                        count = 0; //count of keys inside item\n                        $.each(item, iterateItem);\n                        //case: [{val1: 'text1'}, {val2: 'text2} ...]\n                        if(count === 1) { \n                            result.push(obj); \n                            //case: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...]\n                        } else if(count > 1) {\n                            //removed check of existance: item.hasOwnProperty('value') && item.hasOwnProperty('text')\n                            if(item.children) {\n                                item.children = this.makeArray(item.children);   \n                            }\n                            result.push(item);\n                        }\n                    } else {\n                        //case: ['text1', 'text2' ...]\n                        result.push({value: item, text: item}); \n                    }\n                }\n            } else {  //case: {val1: 'text1', val2: 'text2, ...}\n                $.each(data, function (k, v) {\n                    result.push({value: k, text: v});\n                });  \n            }\n            return result;\n        },\n        \n        option: function(key, value) {\n            this.options[key] = value;\n            if(key === 'source') {\n                this.sourceData = null;\n            }\n            if(key === 'prepend') {\n                this.prependData = null;\n            }            \n        }        \n\n    });      \n\n    List.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        Source data for list.  \n        If **array** - it should be in format: `[{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}, ...]`  \n        For compability, object format is also supported: `{\"1\": \"text1\", \"2\": \"text2\" ...}` but it does not guarantee elements order.\n        \n        If **string** - considered ajax url to load items. In that case results will be cached for fields with the same source and name. See also `sourceCache` option.\n          \n        If **function**, it should return data in format above (since 1.4.0).\n        \n        Since 1.4.1 key `children` supported to render OPTGROUP (for **select** input only).  \n        `[{text: \"group1\", children: [{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}]}, ...]` \n\n\t\t\n        @property source \n        @type string | array | object | function\n        @default null\n        **/         \n        source: null, \n        /**\n        Data automatically prepended to the beginning of dropdown list.\n        \n        @property prepend \n        @type string | array | object | function\n        @default false\n        **/         \n        prepend: false,\n        /**\n        Error message when list cannot be loaded (e.g. ajax error)\n        \n        @property sourceError \n        @type string\n        @default Error when loading list\n        **/          \n        sourceError: 'Error when loading list',\n        /**\n        if <code>true</code> and source is **string url** - results will be cached for fields with the same source.    \n        Usefull for editable column in grid to prevent extra requests.\n        \n        @property sourceCache \n        @type boolean\n        @default true\n        @since 1.2.0\n        **/        \n        sourceCache: true,\n        /**\n        Additional ajax options to be used in $.ajax() when loading list from server.\n        Useful to send extra parameters (`data` key) or change request method (`type` key).\n        \n        @property sourceOptions \n        @type object|function\n        @default null\n        @since 1.5.0\n        **/        \n        sourceOptions: null\n    });\n\n    $.fn.editabletypes.list = List;      \n\n}(window.jQuery));\n\n/**\nText input\n\n@class text\n@extends abstractinput\n@final\n@example\n<a href=\"#\" id=\"username\" data-type=\"text\" data-pk=\"1\">awesome</a>\n<script>\n$(function(){\n    $('#username').editable({\n        url: '/post',\n        title: 'Enter username'\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    var Text = function (options) {\n        this.init('text', options, Text.defaults);\n    };\n\n    $.fn.editableutils.inherit(Text, $.fn.editabletypes.abstractinput);\n\n    $.extend(Text.prototype, {\n        render: function() {\n           this.renderClear();\n           this.setClass();\n           this.setAttr('placeholder');\n        },\n        \n        activate: function() {\n            if(this.$input.is(':visible')) {\n                this.$input.focus();\n                $.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length);\n                if(this.toggleClear) {\n                    this.toggleClear();\n                }\n            }\n        },\n        \n        //render clear button\n        renderClear:  function() {\n           if (this.options.clear) {\n               this.$clear = $('<span class=\"editable-clear-x\"></span>');\n               this.$input.after(this.$clear)\n                          .css('padding-right', 24)\n                          .keyup($.proxy(function(e) {\n                              //arrows, enter, tab, etc\n                              if(~$.inArray(e.keyCode, [40,38,9,13,27])) {\n                                return;\n                              }                            \n\n                              clearTimeout(this.t);\n                              var that = this;\n                              this.t = setTimeout(function() {\n                                that.toggleClear(e);\n                              }, 100);\n                              \n                          }, this))\n                          .parent().css('position', 'relative');\n                          \n               this.$clear.click($.proxy(this.clear, this));                       \n           }            \n        },\n        \n        postrender: function() {\n            /*\n            //now `clear` is positioned via css\n            if(this.$clear) {\n                //can position clear button only here, when form is shown and height can be calculated\n//                var h = this.$input.outerHeight(true) || 20,\n                var h = this.$clear.parent().height(),\n                    delta = (h - this.$clear.height()) / 2;\n                    \n                //this.$clear.css({bottom: delta, right: delta});\n            }\n            */ \n        },\n        \n        //show / hide clear button\n        toggleClear: function(e) {\n            if(!this.$clear) {\n                return;\n            }\n            \n            var len = this.$input.val().length,\n                visible = this.$clear.is(':visible');\n                 \n            if(len && !visible) {\n                this.$clear.show();\n            } \n            \n            if(!len && visible) {\n                this.$clear.hide();\n            } \n        },\n        \n        clear: function() {\n           this.$clear.hide();\n           this.$input.val('').focus();\n        }          \n    });\n\n    Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl \n        @default <input type=\"text\">\n        **/         \n        tpl: '<input type=\"text\">',\n        /**\n        Placeholder attribute of input. Shown when input is empty.\n\n        @property placeholder \n        @type string\n        @default null\n        **/             \n        placeholder: null,\n        \n        /**\n        Whether to show `clear` button \n        \n        @property clear \n        @type boolean\n        @default true        \n        **/\n        clear: true\n    });\n\n    $.fn.editabletypes.text = Text;\n\n}(window.jQuery));\n\n/**\nTextarea input\n\n@class textarea\n@extends abstractinput\n@final\n@example\n<a href=\"#\" id=\"comments\" data-type=\"textarea\" data-pk=\"1\">awesome comment!</a>\n<script>\n$(function(){\n    $('#comments').editable({\n        url: '/post',\n        title: 'Enter comments',\n        rows: 10\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    var Textarea = function (options) {\n        this.init('textarea', options, Textarea.defaults);\n    };\n\n    $.fn.editableutils.inherit(Textarea, $.fn.editabletypes.abstractinput);\n\n    $.extend(Textarea.prototype, {\n        render: function () {\n            this.setClass();\n            this.setAttr('placeholder');\n            this.setAttr('rows');                        \n            \n            //ctrl + enter\n            this.$input.keydown(function (e) {\n                if (e.ctrlKey && e.which === 13) {\n                    $(this).closest('form').submit();\n                }\n            });\n        },\n        \n       //using `white-space: pre-wrap` solves \\n  <--> BR conversion very elegant!\n       /* \n       value2html: function(value, element) {\n            var html = '', lines;\n            if(value) {\n                lines = value.split(\"\\n\");\n                for (var i = 0; i < lines.length; i++) {\n                    lines[i] = $('<div>').text(lines[i]).html();\n                }\n                html = lines.join('<br>');\n            }\n            $(element).html(html);\n        },\n       \n        html2value: function(html) {\n            if(!html) {\n                return '';\n            }\n\n            var regex = new RegExp(String.fromCharCode(10), 'g');\n            var lines = html.split(/<br\\s*\\/?>/i);\n            for (var i = 0; i < lines.length; i++) {\n                var text = $('<div>').html(lines[i]).text();\n\n                // Remove newline characters (\\n) to avoid them being converted by value2html() method\n                // thus adding extra <br> tags\n                text = text.replace(regex, '');\n\n                lines[i] = text;\n            }\n            return lines.join(\"\\n\");\n        },\n         */\n        activate: function() {\n            $.fn.editabletypes.text.prototype.activate.call(this);\n        }\n    });\n\n    Textarea.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl\n        @default <textarea></textarea>\n        **/\n        tpl:'<textarea></textarea>',\n        /**\n        @property inputclass\n        @default input-large\n        **/\n        inputclass: 'input-large',\n        /**\n        Placeholder attribute of input. Shown when input is empty.\n\n        @property placeholder\n        @type string\n        @default null\n        **/\n        placeholder: null,\n        /**\n        Number of rows in textarea\n\n        @property rows\n        @type integer\n        @default 7\n        **/        \n        rows: 7        \n    });\n\n    $.fn.editabletypes.textarea = Textarea;\n\n}(window.jQuery));\n\n/**\nSelect (dropdown)\n\n@class select\n@extends list\n@final\n@example\n<a href=\"#\" id=\"status\" data-type=\"select\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select status\"></a>\n<script>\n$(function(){\n    $('#status').editable({\n        value: 2,    \n        source: [\n              {value: 1, text: 'Active'},\n              {value: 2, text: 'Blocked'},\n              {value: 3, text: 'Deleted'}\n           ]\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    var Select = function (options) {\n        this.init('select', options, Select.defaults);\n    };\n\n    $.fn.editableutils.inherit(Select, $.fn.editabletypes.list);\n\n    $.extend(Select.prototype, {\n        renderList: function() {\n            this.$input.empty();\n\n            var fillItems = function($el, data) {\n                var attr;\n                if($.isArray(data)) {\n                    for(var i=0; i<data.length; i++) {\n                        attr = {};\n                        if(data[i].children) {\n                            attr.label = data[i].text;\n                            $el.append(fillItems($('<optgroup>', attr), data[i].children)); \n                        } else {\n                            attr.value = data[i].value;\n                            if(data[i].disabled) {\n                                attr.disabled = true;\n                            }\n                            $el.append($('<option>', attr).text(data[i].text)); \n                        }\n                    }\n                }\n                return $el;\n            };        \n\n            fillItems(this.$input, this.sourceData);\n            \n            this.setClass();\n            \n            //enter submit\n            this.$input.on('keydown.editable', function (e) {\n                if (e.which === 13) {\n                    $(this).closest('form').submit();\n                }\n            });            \n        },\n       \n        value2htmlFinal: function(value, element) {\n            var text = '', \n                items = $.fn.editableutils.itemsByValue(value, this.sourceData);\n                \n            if(items.length) {\n                text = items[0].text;\n            }\n            \n            //$(element).text(text);\n            $.fn.editabletypes.abstractinput.prototype.value2html.call(this, text, element);\n        },\n        \n        autosubmit: function() {\n            this.$input.off('keydown.editable').on('change.editable', function(){\n                $(this).closest('form').submit();\n            });\n        }\n    });      \n\n    Select.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\n        /**\n        @property tpl \n        @default <select></select>\n        **/         \n        tpl:'<select></select>'\n    });\n\n    $.fn.editabletypes.select = Select;      \n\n}(window.jQuery));\n\n/**\nList of checkboxes. \nInternally value stored as javascript array of values.\n\n@class checklist\n@extends list\n@final\n@example\n<a href=\"#\" id=\"options\" data-type=\"checklist\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select options\"></a>\n<script>\n$(function(){\n    $('#options').editable({\n        value: [2, 3],    \n        source: [\n              {value: 1, text: 'option1'},\n              {value: 2, text: 'option2'},\n              {value: 3, text: 'option3'}\n           ]\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    var Checklist = function (options) {\n        this.init('checklist', options, Checklist.defaults);\n    };\n\n    $.fn.editableutils.inherit(Checklist, $.fn.editabletypes.list);\n\n    $.extend(Checklist.prototype, {\n        renderList: function() {\n            var $label, $div;\n            \n            this.$tpl.empty();\n            \n            if(!$.isArray(this.sourceData)) {\n                return;\n            }\n\n            for(var i=0; i<this.sourceData.length; i++) {\n                $label = $('<label>').append($('<input>', {\n                                           type: 'checkbox',\n                                           value: this.sourceData[i].value \n                                     }))\n                                     .append($('<span>').text(' '+this.sourceData[i].text));\n                \n                $('<div>').append($label).appendTo(this.$tpl);\n            }\n            \n            this.$input = this.$tpl.find('input[type=\"checkbox\"]');\n            this.setClass();\n        },\n       \n       value2str: function(value) {\n           return $.isArray(value) ? value.sort().join($.trim(this.options.separator)) : '';\n       },  \n       \n       //parse separated string\n        str2value: function(str) {\n           var reg, value = null;\n           if(typeof str === 'string' && str.length) {\n               reg = new RegExp('\\\\s*'+$.trim(this.options.separator)+'\\\\s*');\n               value = str.split(reg);\n           } else if($.isArray(str)) {\n               value = str; \n           } else {\n               value = [str];\n           }\n           return value;\n        },       \n       \n       //set checked on required checkboxes\n       value2input: function(value) {\n            this.$input.prop('checked', false);\n            if($.isArray(value) && value.length) {\n               this.$input.each(function(i, el) {\n                   var $el = $(el);\n                   // cannot use $.inArray as it performs strict comparison\n                   $.each(value, function(j, val){\n                       /*jslint eqeq: true*/\n                       if($el.val() == val) {\n                       /*jslint eqeq: false*/                           \n                           $el.prop('checked', true);\n                       }\n                   });\n               }); \n            }  \n        },  \n        \n       input2value: function() { \n           var checked = [];\n           this.$input.filter(':checked').each(function(i, el) {\n               checked.push($(el).val());\n           });\n           return checked;\n       },            \n          \n       //collect text of checked boxes\n        value2htmlFinal: function(value, element) {\n           var html = [],\n               checked = $.fn.editableutils.itemsByValue(value, this.sourceData),\n               escape = this.options.escape;\n               \n           if(checked.length) {\n               $.each(checked, function(i, v) {\n                   var text = escape ? $.fn.editableutils.escape(v.text) : v.text; \n                   html.push(text); \n               });\n               $(element).html(html.join('<br>'));\n           } else {\n               $(element).empty(); \n           }\n        },\n        \n       activate: function() {\n           this.$input.first().focus();\n       },\n       \n       autosubmit: function() {\n           this.$input.on('keydown', function(e){\n               if (e.which === 13) {\n                   $(this).closest('form').submit();\n               }\n           });\n       }\n    });      \n\n    Checklist.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\n        /**\n        @property tpl \n        @default <div></div>\n        **/         \n        tpl:'<div class=\"editable-checklist\"></div>',\n        \n        /**\n        @property inputclass \n        @type string\n        @default null\n        **/         \n        inputclass: null,        \n        \n        /**\n        Separator of values when reading from `data-value` attribute\n\n        @property separator \n        @type string\n        @default ','\n        **/         \n        separator: ','\n    });\n\n    $.fn.editabletypes.checklist = Checklist;      \n\n}(window.jQuery));\n\n/**\nHTML5 input types.\nFollowing types are supported:\n\n* password\n* email\n* url\n* tel\n* number\n* range\n* time\n\nLearn more about html5 inputs:  \nhttp://www.w3.org/wiki/HTML5_form_additions  \nTo check browser compatibility please see:  \nhttps://developer.mozilla.org/en-US/docs/HTML/Element/Input\n            \n@class html5types \n@extends text\n@final\n@since 1.3.0\n@example\n<a href=\"#\" id=\"email\" data-type=\"email\" data-pk=\"1\">admin@example.com</a>\n<script>\n$(function(){\n    $('#email').editable({\n        url: '/post',\n        title: 'Enter email'\n    });\n});\n</script>\n**/\n\n/**\n@property tpl \n@default depends on type\n**/ \n\n/*\nPassword\n*/\n(function ($) {\n    \"use strict\";\n    \n    var Password = function (options) {\n        this.init('password', options, Password.defaults);\n    };\n    $.fn.editableutils.inherit(Password, $.fn.editabletypes.text);\n    $.extend(Password.prototype, {\n       //do not display password, show '[hidden]' instead\n       value2html: function(value, element) {\n           if(value) {\n               $(element).text('[hidden]');\n           } else {\n               $(element).empty(); \n           }\n       },\n       //as password not displayed, should not set value by html\n       html2value: function(html) {\n           return null;\n       }       \n    });    \n    Password.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\n        tpl: '<input type=\"password\">'\n    });\n    $.fn.editabletypes.password = Password;\n}(window.jQuery));\n\n\n/*\nEmail\n*/\n(function ($) {\n    \"use strict\";\n    \n    var Email = function (options) {\n        this.init('email', options, Email.defaults);\n    };\n    $.fn.editableutils.inherit(Email, $.fn.editabletypes.text);\n    Email.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\n        tpl: '<input type=\"email\">'\n    });\n    $.fn.editabletypes.email = Email;\n}(window.jQuery));\n\n\n/*\nUrl\n*/\n(function ($) {\n    \"use strict\";\n    \n    var Url = function (options) {\n        this.init('url', options, Url.defaults);\n    };\n    $.fn.editableutils.inherit(Url, $.fn.editabletypes.text);\n    Url.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\n        tpl: '<input type=\"url\">'\n    });\n    $.fn.editabletypes.url = Url;\n}(window.jQuery));\n\n\n/*\nTel\n*/\n(function ($) {\n    \"use strict\";\n    \n    var Tel = function (options) {\n        this.init('tel', options, Tel.defaults);\n    };\n    $.fn.editableutils.inherit(Tel, $.fn.editabletypes.text);\n    Tel.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\n        tpl: '<input type=\"tel\">'\n    });\n    $.fn.editabletypes.tel = Tel;\n}(window.jQuery));\n\n\n/*\nNumber\n*/\n(function ($) {\n    \"use strict\";\n    \n    var NumberInput = function (options) {\n        this.init('number', options, NumberInput.defaults);\n    };\n    $.fn.editableutils.inherit(NumberInput, $.fn.editabletypes.text);\n    $.extend(NumberInput.prototype, {\n         render: function () {\n            NumberInput.superclass.render.call(this);\n            this.setAttr('min');\n            this.setAttr('max');\n            this.setAttr('step');\n        },\n        postrender: function() {\n            if(this.$clear) {\n                //increase right ffset  for up/down arrows\n                this.$clear.css({right: 24});\n                /*\n                //can position clear button only here, when form is shown and height can be calculated\n                var h = this.$input.outerHeight(true) || 20,\n                    delta = (h - this.$clear.height()) / 2;\n                \n                //add 12px to offset right for up/down arrows    \n                this.$clear.css({top: delta, right: delta + 16});\n                */\n            } \n        }        \n    });     \n    NumberInput.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\n        tpl: '<input type=\"number\">',\n        inputclass: 'input-mini',\n        min: null,\n        max: null,\n        step: null\n    });\n    $.fn.editabletypes.number = NumberInput;\n}(window.jQuery));\n\n\n/*\nRange (inherit from number)\n*/\n(function ($) {\n    \"use strict\";\n    \n    var Range = function (options) {\n        this.init('range', options, Range.defaults);\n    };\n    $.fn.editableutils.inherit(Range, $.fn.editabletypes.number);\n    $.extend(Range.prototype, {\n        render: function () {\n            this.$input = this.$tpl.filter('input');\n            \n            this.setClass();\n            this.setAttr('min');\n            this.setAttr('max');\n            this.setAttr('step');           \n            \n            this.$input.on('input', function(){\n                $(this).siblings('output').text($(this).val()); \n            });  \n        },\n        activate: function() {\n            this.$input.focus();\n        }         \n    });\n    Range.defaults = $.extend({}, $.fn.editabletypes.number.defaults, {\n        tpl: '<input type=\"range\"><output style=\"width: 30px; display: inline-block\"></output>',\n        inputclass: 'input-medium'\n    });\n    $.fn.editabletypes.range = Range;\n}(window.jQuery));\n\n/*\nTime\n*/\n(function ($) {\n    \"use strict\";\n\n    var Time = function (options) {\n        this.init('time', options, Time.defaults);\n    };\n    //inherit from abstract, as inheritance from text gives selection error.\n    $.fn.editableutils.inherit(Time, $.fn.editabletypes.abstractinput);\n    $.extend(Time.prototype, {\n        render: function() {\n           this.setClass();\n        }        \n    });\n    Time.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        tpl: '<input type=\"time\">'\n    });\n    $.fn.editabletypes.time = Time;\n}(window.jQuery));\n\n/**\nSelect2 input. Based on amazing work of Igor Vaynberg https://github.com/ivaynberg/select2.  \nPlease see [original select2 docs](http://ivaynberg.github.com/select2) for detailed description and options.  \n \nYou should manually download and include select2 distributive:  \n\n    <link href=\"select2/select2.css\" rel=\"stylesheet\" type=\"text/css\"></link>  \n    <script src=\"select2/select2.js\"></script>  \n    \nTo make it **bootstrap-styled** you can use css from [here](https://github.com/t0m/select2-bootstrap-css): \n\n    <link href=\"select2-bootstrap.css\" rel=\"stylesheet\" type=\"text/css\"></link>    \n    \n**Note:** currently `autotext` feature does not work for select2 with `ajax` remote source.    \nYou need initially put both `data-value` and element's text youself:    \n\n    <a href=\"#\" data-type=\"select2\" data-value=\"1\">Text1</a>\n    \n    \n@class select2\n@extends abstractinput\n@since 1.4.1\n@final\n@example\n<a href=\"#\" id=\"country\" data-type=\"select2\" data-pk=\"1\" data-value=\"ru\" data-url=\"/post\" data-title=\"Select country\"></a>\n<script>\n$(function(){\n    //local source\n    $('#country').editable({\n        source: [\n              {id: 'gb', text: 'Great Britain'},\n              {id: 'us', text: 'United States'},\n              {id: 'ru', text: 'Russia'}\n           ],\n        select2: {\n           multiple: true\n        }\n    });\n    //remote source (simple)\n    $('#country').editable({\n        source: '/getCountries',\n        select2: {\n            placeholder: 'Select Country',\n            minimumInputLength: 1\n        }\n    });\n    //remote source (advanced)\n    $('#country').editable({\n        select2: {\n            placeholder: 'Select Country',\n            allowClear: true,\n            minimumInputLength: 3,\n            id: function (item) {\n                return item.CountryId;\n            },\n            ajax: {\n                url: '/getCountries',\n                dataType: 'json',\n                data: function (term, page) {\n                    return { query: term };\n                },\n                results: function (data, page) {\n                    return { results: data };\n                }\n            },\n            formatResult: function (item) {\n                return item.CountryName;\n            },\n            formatSelection: function (item) {\n                return item.CountryName;\n            },\n            initSelection: function (element, callback) {\n                return $.get('/getCountryById', { query: element.val() }, function (data) {\n                    callback(data);\n                });\n            } \n        }  \n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    var Constructor = function (options) {\n        this.init('select2', options, Constructor.defaults);\n\n        options.select2 = options.select2 || {};\n\n        this.sourceData = null;\n        \n        //placeholder\n        if(options.placeholder) {\n            options.select2.placeholder = options.placeholder;\n        }\n       \n        //if not `tags` mode, use source\n        if(!options.select2.tags && options.source) {\n            var source = options.source;\n            //if source is function, call it (once!)\n            if ($.isFunction(options.source)) {\n                source = options.source.call(options.scope);\n            }               \n\n            if (typeof source === 'string') {\n                options.select2.ajax = options.select2.ajax || {};\n                //some default ajax params\n                if(!options.select2.ajax.data) {\n                    options.select2.ajax.data = function(term) {return { query:term };};\n                }\n                if(!options.select2.ajax.results) {\n                    options.select2.ajax.results = function(data) { return {results:data };};\n                }\n                options.select2.ajax.url = source;\n            } else {\n                //check format and convert x-editable format to select2 format (if needed)\n                this.sourceData = this.convertSource(source);\n                options.select2.data = this.sourceData;\n            }\n        } \n\n        //overriding objects in config (as by default jQuery extend() is not recursive)\n        this.options.select2 = $.extend({}, Constructor.defaults.select2, options.select2);\n\n        //detect whether it is multi-valued\n        this.isMultiple = this.options.select2.tags || this.options.select2.multiple;\n        this.isRemote = ('ajax' in this.options.select2);\n\n        //store function returning ID of item\n        //should be here as used inautotext for local source\n        this.idFunc = this.options.select2.id;\n        if (typeof(this.idFunc) !== \"function\") {\n            var idKey = this.idFunc || 'id';\n            this.idFunc = function (e) { return e[idKey]; };\n        }\n\n        //store function that renders text in select2\n        this.formatSelection = this.options.select2.formatSelection;\n        if (typeof(this.formatSelection) !== \"function\") {\n            this.formatSelection = function (e) { return e.text; };\n        }\n    };\n\n    $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput);\n\n    $.extend(Constructor.prototype, {\n        render: function() {\n            this.setClass();\n\n            //can not apply select2 here as it calls initSelection \n            //over input that does not have correct value yet.\n            //apply select2 only in value2input\n            //this.$input.select2(this.options.select2);\n\n            //when data is loaded via ajax, we need to know when it's done to populate listData\n            if(this.isRemote) {\n                //listen to loaded event to populate data\n                this.$input.on('select2-loaded', $.proxy(function(e) {\n                    this.sourceData = e.items.results;\n                }, this));\n            }\n\n            //trigger resize of editableform to re-position container in multi-valued mode\n            if(this.isMultiple) {\n               this.$input.on('change', function() {\n                   $(this).closest('form').parent().triggerHandler('resize');\n               });\n            }\n       },\n\n       value2html: function(value, element) {\n           var text = '', data,\n               that = this;\n\n           if(this.options.select2.tags) { //in tags mode just assign value\n              data = value; \n              //data = $.fn.editableutils.itemsByValue(value, this.options.select2.tags, this.idFunc);\n           } else if(this.sourceData) {\n              data = $.fn.editableutils.itemsByValue(value, this.sourceData, this.idFunc); \n           } else {\n              //can not get list of possible values \n              //(e.g. autotext for select2 with ajax source)\n           }\n\n           //data may be array (when multiple values allowed)\n           if($.isArray(data)) {\n               //collect selected data and show with separator\n               text = [];\n               $.each(data, function(k, v){\n                   text.push(v && typeof v === 'object' ? that.formatSelection(v) : v);\n               });\n           } else if(data) {\n               text = that.formatSelection(data);\n           }\n\n           text = $.isArray(text) ? text.join(this.options.viewseparator) : text;\n\n           //$(element).text(text);\n           Constructor.superclass.value2html.call(this, text, element); \n       },\n\n       html2value: function(html) {\n           return this.options.select2.tags ? this.str2value(html, this.options.viewseparator) : null;\n       },\n\n       value2input: function(value) {\n           // if value array => join it anyway\n           if($.isArray(value)) {\n              value = value.join(this.getSeparator());\n           }\n\n           //for remote source just set value, text is updated by initSelection\n           if(!this.$input.data('select2')) {\n               this.$input.val(value);\n               this.$input.select2(this.options.select2);\n           } else {\n               //second argument needed to separate initial change from user's click (for autosubmit)   \n               this.$input.val(value).trigger('change', true); \n\n               //Uncaught Error: cannot call val() if initSelection() is not defined\n               //this.$input.select2('val', value);\n           }\n\n           // if defined remote source AND no multiple mode AND no user's initSelection provided --> \n           // we should somehow get text for provided id.\n           // The solution is to use element's text as text for that id (exclude empty)\n           if(this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {\n               // customId and customText are methods to extract `id` and `text` from data object\n               // we can use this workaround only if user did not define these methods\n               // otherwise we cant construct data object\n               var customId = this.options.select2.id,\n                   customText = this.options.select2.formatSelection;\n\n               if(!customId && !customText) {\n                   var $el = $(this.options.scope);\n                   if (!$el.data('editable').isEmpty) {\n                       var data = {id: value, text: $el.text()};\n                       this.$input.select2('data', data); \n                   }\n               }\n           }\n       },\n       \n       input2value: function() { \n           return this.$input.select2('val');\n       },\n\n       str2value: function(str, separator) {\n            if(typeof str !== 'string' || !this.isMultiple) {\n                return str;\n            }\n\n            separator = separator || this.getSeparator();\n\n            var val, i, l;\n\n            if (str === null || str.length < 1) {\n                return null;\n            }\n            val = str.split(separator);\n            for (i = 0, l = val.length; i < l; i = i + 1) {\n                val[i] = $.trim(val[i]);\n            }\n\n            return val;\n       },\n\n        autosubmit: function() {\n            this.$input.on('change', function(e, isInitial){\n                if(!isInitial) {\n                  $(this).closest('form').submit();\n                }\n            });\n        },\n\n        getSeparator: function() {\n            return this.options.select2.separator || $.fn.select2.defaults.separator;\n        },\n\n        /*\n        Converts source from x-editable format: {value: 1, text: \"1\"} to\n        select2 format: {id: 1, text: \"1\"}\n        */\n        convertSource: function(source) {\n            if($.isArray(source) && source.length && source[0].value !== undefined) {\n                for(var i = 0; i<source.length; i++) {\n                    if(source[i].value !== undefined) {\n                        source[i].id = source[i].value;\n                        delete source[i].value;\n                    }\n                }\n            }\n            return source;\n        },\n        \n        destroy: function() {\n            if(this.$input.data('select2')) {\n                this.$input.select2('destroy');\n            }\n        }\n        \n    });\n\n    Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl \n        @default <input type=\"hidden\">\n        **/\n        tpl:'<input type=\"hidden\">',\n        /**\n        Configuration of select2. [Full list of options](http://ivaynberg.github.com/select2).\n\n        @property select2 \n        @type object\n        @default null\n        **/\n        select2: null,\n        /**\n        Placeholder attribute of select\n\n        @property placeholder \n        @type string\n        @default null\n        **/\n        placeholder: null,\n        /**\n        Source data for select. It will be assigned to select2 `data` property and kept here just for convenience.\n        Please note, that format is different from simple `select` input: use 'id' instead of 'value'.\n        E.g. `[{id: 1, text: \"text1\"}, {id: 2, text: \"text2\"}, ...]`.\n\n        @property source \n        @type array|string|function\n        @default null        \n        **/\n        source: null,\n        /**\n        Separator used to display tags.\n\n        @property viewseparator \n        @type string\n        @default ', '        \n        **/\n        viewseparator: ', '\n    });\n\n    $.fn.editabletypes.select2 = Constructor;\n\n}(window.jQuery));\n\n/**\n* Combodate - 1.0.5\n* Dropdown date and time picker.\n* Converts text input into dropdowns to pick day, month, year, hour, minute and second.\n* Uses momentjs as datetime library http://momentjs.com.\n* For i18n include corresponding file from https://github.com/timrwood/moment/tree/master/lang \n*\n* Confusion at noon and midnight - see http://en.wikipedia.org/wiki/12-hour_clock#Confusion_at_noon_and_midnight\n* In combodate: \n* 12:00 pm --> 12:00 (24-h format, midday)\n* 12:00 am --> 00:00 (24-h format, midnight, start of day)\n* \n* Differs from momentjs parse rules:\n* 00:00 pm, 12:00 pm --> 12:00 (24-h format, day not change)\n* 00:00 am, 12:00 am --> 00:00 (24-h format, day not change)\n* \n* \n* Author: Vitaliy Potapov\n* Project page: http://github.com/vitalets/combodate\n* Copyright (c) 2012 Vitaliy Potapov. Released under MIT License.\n**/\n(function ($) {\n\n    var Combodate = function (element, options) {\n        this.$element = $(element);\n        if(!this.$element.is('input')) {\n            $.error('Combodate should be applied to INPUT element');\n            return;\n        }\n        this.options = $.extend({}, $.fn.combodate.defaults, options, this.$element.data());\n        this.init();  \n     };\n\n    Combodate.prototype = {\n        constructor: Combodate, \n        init: function () {\n            this.map = {\n                //key   regexp    moment.method\n                day:    ['D',    'date'], \n                month:  ['M',    'month'], \n                year:   ['Y',    'year'], \n                hour:   ['[Hh]', 'hours'],\n                minute: ['m',    'minutes'], \n                second: ['s',    'seconds'],\n                ampm:   ['[Aa]', ''] \n            };\n            \n            this.$widget = $('<span class=\"combodate\"></span>').html(this.getTemplate());\n                      \n            this.initCombos();\n            \n            //update original input on change \n            this.$widget.on('change', 'select', $.proxy(function(e) {\n                this.$element.val(this.getValue()).change();\n                // update days count if month or year changes\n                if (this.options.smartDays) {\n                    if ($(e.target).is('.month') || $(e.target).is('.year')) {\n                        this.fillCombo('day');\n                    }\n                }\n            }, this));\n            \n            this.$widget.find('select').css('width', 'auto');\n                                       \n            // hide original input and insert widget                                       \n            this.$element.hide().after(this.$widget);\n            \n            // set initial value\n            this.setValue(this.$element.val() || this.options.value);\n        },\n        \n        /*\n         Replace tokens in template with <select> elements \n        */         \n        getTemplate: function() {\n            var tpl = this.options.template;\n\n            //first pass\n            $.each(this.map, function(k, v) {\n                v = v[0]; \n                var r = new RegExp(v+'+'),\n                    token = v.length > 1 ? v.substring(1, 2) : v;\n                    \n                tpl = tpl.replace(r, '{'+token+'}');\n            });\n\n            //replace spaces with &nbsp;\n            tpl = tpl.replace(/ /g, '&nbsp;');\n\n            //second pass\n            $.each(this.map, function(k, v) {\n                v = v[0];\n                var token = v.length > 1 ? v.substring(1, 2) : v;\n                    \n                tpl = tpl.replace('{'+token+'}', '<select class=\"'+k+'\"></select>');\n            });   \n\n            return tpl;\n        },\n        \n        /*\n         Initialize combos that presents in template \n        */        \n        initCombos: function() {\n            for (var k in this.map) {\n                var $c = this.$widget.find('.'+k);\n                // set properties like this.$day, this.$month etc.\n                this['$'+k] = $c.length ? $c : null;\n                // fill with items\n                this.fillCombo(k);\n            }\n        },\n\n        /*\n         Fill combo with items \n        */        \n        fillCombo: function(k) {\n            var $combo = this['$'+k];\n            if (!$combo) {\n                return;\n            }\n\n            // define method name to fill items, e.g `fillDays`\n            var f = 'fill' + k.charAt(0).toUpperCase() + k.slice(1); \n            var items = this[f]();\n            var value = $combo.val();\n\n            $combo.empty();\n            for(var i=0; i<items.length; i++) {\n                $combo.append('<option value=\"'+items[i][0]+'\">'+items[i][1]+'</option>');\n            }\n\n            $combo.val(value);\n        },\n\n        /*\n         Initialize items of combos. Handles `firstItem` option \n        */\n        fillCommon: function(key) {\n            var values = [],\n                relTime;\n                \n            if(this.options.firstItem === 'name') {\n                //need both to support moment ver < 2 and  >= 2\n                relTime = moment.relativeTime || moment.langData()._relativeTime; \n                var header = typeof relTime[key] === 'function' ? relTime[key](1, true, key, false) : relTime[key];\n                //take last entry (see momentjs lang files structure) \n                header = header.split(' ').reverse()[0];                \n                values.push(['', header]);\n            } else if(this.options.firstItem === 'empty') {\n                values.push(['', '']);\n            }\n            return values;\n        },  \n\n\n        /*\n        fill day\n        */\n        fillDay: function() {\n            var items = this.fillCommon('d'), name, i,\n                twoDigit = this.options.template.indexOf('DD') !== -1,\n                daysCount = 31;\n\n            // detect days count (depends on month and year)\n            // originally https://github.com/vitalets/combodate/pull/7\n            if (this.options.smartDays && this.$month && this.$year) {\n                var month = parseInt(this.$month.val(), 10);\n                var year = parseInt(this.$year.val(), 10);\n\n                if (!isNaN(month) && !isNaN(year)) {\n                    daysCount = moment([year, month]).daysInMonth();\n                }\n            }\n\n            for (i = 1; i <= daysCount; i++) {\n                name = twoDigit ? this.leadZero(i) : i;\n                items.push([i, name]);\n            }\n            return items;        \n        },\n        \n        /*\n        fill month\n        */\n        fillMonth: function() {\n            var items = this.fillCommon('M'), name, i, \n                longNames = this.options.template.indexOf('MMMM') !== -1,\n                shortNames = this.options.template.indexOf('MMM') !== -1,\n                twoDigit = this.options.template.indexOf('MM') !== -1;\n                \n            for(i=0; i<=11; i++) {\n                if(longNames) {\n                    //see https://github.com/timrwood/momentjs.com/pull/36\n                    name = moment().date(1).month(i).format('MMMM');\n                } else if(shortNames) {\n                    name = moment().date(1).month(i).format('MMM');\n                } else if(twoDigit) {\n                    name = this.leadZero(i+1);\n                } else {\n                    name = i+1;\n                }\n                items.push([i, name]);\n            } \n            return items;\n        },  \n        \n        /*\n        fill year\n        */\n        fillYear: function() {\n            var items = [], name, i, \n                longNames = this.options.template.indexOf('YYYY') !== -1;\n           \n            for(i=this.options.maxYear; i>=this.options.minYear; i--) {\n                name = longNames ? i : (i+'').substring(2);\n                items[this.options.yearDescending ? 'push' : 'unshift']([i, name]);\n            }\n            \n            items = this.fillCommon('y').concat(items);\n            \n            return items;              \n        },    \n        \n        /*\n        fill hour\n        */\n        fillHour: function() {\n            var items = this.fillCommon('h'), name, i,\n                h12 = this.options.template.indexOf('h') !== -1,\n                h24 = this.options.template.indexOf('H') !== -1,\n                twoDigit = this.options.template.toLowerCase().indexOf('hh') !== -1,\n                min = h12 ? 1 : 0, \n                max = h12 ? 12 : 23;\n                \n            for(i=min; i<=max; i++) {\n                name = twoDigit ? this.leadZero(i) : i;\n                items.push([i, name]);\n            } \n            return items;                 \n        },    \n        \n        /*\n        fill minute\n        */\n        fillMinute: function() {\n            var items = this.fillCommon('m'), name, i,\n                twoDigit = this.options.template.indexOf('mm') !== -1;\n\n            for(i=0; i<=59; i+= this.options.minuteStep) {\n                name = twoDigit ? this.leadZero(i) : i;\n                items.push([i, name]);\n            }    \n            return items;              \n        },  \n        \n        /*\n        fill second\n        */\n        fillSecond: function() {\n            var items = this.fillCommon('s'), name, i,\n                twoDigit = this.options.template.indexOf('ss') !== -1;\n\n            for(i=0; i<=59; i+= this.options.secondStep) {\n                name = twoDigit ? this.leadZero(i) : i;\n                items.push([i, name]);\n            }    \n            return items;              \n        },  \n        \n        /*\n        fill ampm\n        */\n        fillAmpm: function() {\n            var ampmL = this.options.template.indexOf('a') !== -1,\n                ampmU = this.options.template.indexOf('A') !== -1,            \n                items = [\n                    ['am', ampmL ? 'am' : 'AM'],\n                    ['pm', ampmL ? 'pm' : 'PM']\n                ];\n            return items;                              \n        },                                       \n\n        /*\n         Returns current date value from combos. \n         If format not specified - `options.format` used.\n         If format = `null` - Moment object returned.\n        */\n        getValue: function(format) {\n            var dt, values = {}, \n                that = this,\n                notSelected = false;\n                \n            //getting selected values    \n            $.each(this.map, function(k, v) {\n                if(k === 'ampm') {\n                    return;\n                }\n                var def = k === 'day' ? 1 : 0;\n                  \n                values[k] = that['$'+k] ? parseInt(that['$'+k].val(), 10) : def; \n                \n                if(isNaN(values[k])) {\n                   notSelected = true;\n                   return false; \n                }\n            });\n            \n            //if at least one visible combo not selected - return empty string\n            if(notSelected) {\n               return '';\n            }\n            \n            //convert hours 12h --> 24h \n            if(this.$ampm) {\n                //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\n                if(values.hour === 12) {\n                    values.hour = this.$ampm.val() === 'am' ? 0 : 12;                    \n                } else {\n                    values.hour = this.$ampm.val() === 'am' ? values.hour : values.hour+12;\n                }\n            }    \n            \n            dt = moment([values.year, values.month, values.day, values.hour, values.minute, values.second]);\n            \n            //highlight invalid date\n            this.highlight(dt);\n                              \n            format = format === undefined ? this.options.format : format;\n            if(format === null) {\n               return dt.isValid() ? dt : null; \n            } else {\n               return dt.isValid() ? dt.format(format) : ''; \n            }           \n        },\n        \n        setValue: function(value) {\n            if(!value) {\n                return;\n            }\n            \n            var dt = typeof value === 'string' ? moment(value, this.options.format) : moment(value),\n                that = this,\n                values = {};\n            \n            //function to find nearest value in select options\n            function getNearest($select, value) {\n                var delta = {};\n                $select.children('option').each(function(i, opt){\n                    var optValue = $(opt).attr('value'),\n                    distance;\n\n                    if(optValue === '') return;\n                    distance = Math.abs(optValue - value); \n                    if(typeof delta.distance === 'undefined' || distance < delta.distance) {\n                        delta = {value: optValue, distance: distance};\n                    } \n                }); \n                return delta.value;\n            }             \n            \n            if(dt.isValid()) {\n                //read values from date object\n                $.each(this.map, function(k, v) {\n                    if(k === 'ampm') {\n                       return; \n                    }\n                    values[k] = dt[v[1]]();\n                });\n               \n                if(this.$ampm) {\n                    //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\n                    if(values.hour >= 12) {\n                        values.ampm = 'pm';\n                        if(values.hour > 12) {\n                            values.hour -= 12;\n                        }\n                    } else {\n                        values.ampm = 'am';\n                        if(values.hour === 0) {\n                            values.hour = 12;\n                        }\n                    } \n                }\n               \n                $.each(values, function(k, v) {\n                    //call val() for each existing combo, e.g. this.$hour.val()\n                    if(that['$'+k]) {\n                       \n                        if(k === 'minute' && that.options.minuteStep > 1 && that.options.roundTime) {\n                           v = getNearest(that['$'+k], v);\n                        }\n                       \n                        if(k === 'second' && that.options.secondStep > 1 && that.options.roundTime) {\n                           v = getNearest(that['$'+k], v);\n                        }                       \n                       \n                        that['$'+k].val(v);\n                    }\n                });\n\n                // update days count\n                if (this.options.smartDays) {\n                    this.fillCombo('day');\n                }\n               \n               this.$element.val(dt.format(this.options.format)).change();\n            }\n        },\n        \n        /*\n         highlight combos if date is invalid\n        */\n        highlight: function(dt) {\n            if(!dt.isValid()) {\n                if(this.options.errorClass) {\n                    this.$widget.addClass(this.options.errorClass);\n                } else {\n                    //store original border color\n                    if(!this.borderColor) {\n                        this.borderColor = this.$widget.find('select').css('border-color'); \n                    }\n                    this.$widget.find('select').css('border-color', 'red');\n                } \n            } else {\n                if(this.options.errorClass) {\n                    this.$widget.removeClass(this.options.errorClass);\n                } else {\n                    this.$widget.find('select').css('border-color', this.borderColor);\n                }  \n            }\n        },\n        \n        leadZero: function(v) {\n            return v <= 9 ? '0' + v : v; \n        },\n        \n        destroy: function() {\n            this.$widget.remove();\n            this.$element.removeData('combodate').show();\n        }\n        \n        //todo: clear method        \n    };\n\n    $.fn.combodate = function ( option ) {\n        var d, args = Array.apply(null, arguments);\n        args.shift();\n\n        //getValue returns date as string / object (not jQuery object)\n        if(option === 'getValue' && this.length && (d = this.eq(0).data('combodate'))) {\n          return d.getValue.apply(d, args);\n        }        \n        \n        return this.each(function () {\n            var $this = $(this),\n            data = $this.data('combodate'),\n            options = typeof option == 'object' && option;\n            if (!data) {\n                $this.data('combodate', (data = new Combodate(this, options)));\n            }\n            if (typeof option == 'string' && typeof data[option] == 'function') {\n                data[option].apply(data, args);\n            }\n        });\n    };  \n    \n    $.fn.combodate.defaults = {\n         //in this format value stored in original input\n        format: 'DD-MM-YYYY HH:mm',      \n        //in this format items in dropdowns are displayed\n        template: 'D / MMM / YYYY   H : mm',\n        //initial value, can be `new Date()`    \n        value: null,                       \n        minYear: 1970,\n        maxYear: 2015,\n        yearDescending: true,\n        minuteStep: 5,\n        secondStep: 1,\n        firstItem: 'empty', //'name', 'empty', 'none'\n        errorClass: null,\n        roundTime: true, // whether to round minutes and seconds if step > 1\n        smartDays: false // whether days in combo depend on selected month: 31, 30, 28\n    };\n\n}(window.jQuery));\n/**\nCombodate input - dropdown date and time picker.    \nBased on [combodate](http://vitalets.github.com/combodate) plugin (included). To use it you should manually include [momentjs](http://momentjs.com).\n\n    <script src=\"js/moment.min.js\"></script>\n   \nAllows to input:\n\n* only date\n* only time \n* both date and time  \n\nPlease note, that format is taken from momentjs and **not compatible** with bootstrap-datepicker / jquery UI datepicker.  \nInternally value stored as `momentjs` object. \n\n@class combodate\n@extends abstractinput\n@final\n@since 1.4.0\n@example\n<a href=\"#\" id=\"dob\" data-type=\"combodate\" data-pk=\"1\" data-url=\"/post\" data-value=\"1984-05-15\" data-title=\"Select date\"></a>\n<script>\n$(function(){\n    $('#dob').editable({\n        format: 'YYYY-MM-DD',    \n        viewformat: 'DD.MM.YYYY',    \n        template: 'D / MMMM / YYYY',    \n        combodate: {\n                minYear: 2000,\n                maxYear: 2015,\n                minuteStep: 1\n           }\n        }\n    });\n});\n</script>\n**/\n\n/*global moment*/\n\n(function ($) {\n    \"use strict\";\n    \n    var Constructor = function (options) {\n        this.init('combodate', options, Constructor.defaults);\n        \n        //by default viewformat equals to format\n        if(!this.options.viewformat) {\n            this.options.viewformat = this.options.format;\n        }        \n        \n        //try parse combodate config defined as json string in data-combodate\n        options.combodate = $.fn.editableutils.tryParseJson(options.combodate, true);\n\n        //overriding combodate config (as by default jQuery extend() is not recursive)\n        this.options.combodate = $.extend({}, Constructor.defaults.combodate, options.combodate, {\n            format: this.options.format,\n            template: this.options.template\n        });\n    };\n\n    $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput);    \n    \n    $.extend(Constructor.prototype, {\n        render: function () {\n            this.$input.combodate(this.options.combodate);\n                    \n            if($.fn.editableform.engine === 'bs3') {\n                this.$input.siblings().find('select').addClass('form-control');\n            }\n            \n            if(this.options.inputclass) {\n                this.$input.siblings().find('select').addClass(this.options.inputclass);\n            }            \n            //\"clear\" link\n            /*\n            if(this.options.clear) {\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.clear();\n                }, this));\n                \n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \n            } \n            */               \n        },\n        \n        value2html: function(value, element) {\n            var text = value ? value.format(this.options.viewformat) : '';\n            //$(element).text(text);\n            Constructor.superclass.value2html.call(this, text, element);  \n        },\n\n        html2value: function(html) {\n            return html ? moment(html, this.options.viewformat) : null;\n        },   \n        \n        value2str: function(value) {\n            return value ? value.format(this.options.format) : '';\n       }, \n       \n       str2value: function(str) {\n           return str ? moment(str, this.options.format) : null;\n       }, \n       \n       value2submit: function(value) {\n           return this.value2str(value);\n       },                    \n\n       value2input: function(value) {\n           this.$input.combodate('setValue', value);\n       },\n        \n       input2value: function() { \n           return this.$input.combodate('getValue', null);\n       },       \n       \n       activate: function() {\n           this.$input.siblings('.combodate').find('select').eq(0).focus();\n       },\n       \n       /*\n       clear:  function() {\n          this.$input.data('datepicker').date = null;\n          this.$input.find('.active').removeClass('active');\n       },\n       */\n       \n       autosubmit: function() {\n           \n       }\n\n    });\n    \n    Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl \n        @default <input type=\"text\">\n        **/         \n        tpl:'<input type=\"text\">',\n        /**\n        @property inputclass \n        @default null\n        **/         \n        inputclass: null,\n        /**\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\n        See list of tokens in [momentjs docs](http://momentjs.com/docs/#/parsing/string-format)  \n        \n        @property format \n        @type string\n        @default YYYY-MM-DD\n        **/         \n        format:'YYYY-MM-DD',\n        /**\n        Format used for displaying date. Also applied when converting date from element's text on init.   \n        If not specified equals to `format`.\n        \n        @property viewformat \n        @type string\n        @default null\n        **/          \n        viewformat: null,        \n        /**\n        Template used for displaying dropdowns.\n        \n        @property template \n        @type string\n        @default D / MMM / YYYY\n        **/          \n        template: 'D / MMM / YYYY',  \n        /**\n        Configuration of combodate.\n        Full list of options: http://vitalets.github.com/combodate/#docs\n        \n        @property combodate \n        @type object\n        @default null\n        **/\n        combodate: null\n        \n        /*\n        (not implemented yet)\n        Text shown as clear date button. \n        If <code>false</code> clear button will not be rendered.\n        \n        @property clear \n        @type boolean|string\n        @default 'x clear'         \n        */\n        //clear: '&times; clear'\n    });   \n\n    $.fn.editabletypes.combodate = Constructor;\n\n}(window.jQuery));\n\n/*\nEditableform based on Twitter Bootstrap 3\n*/\n(function ($) {\n    \"use strict\";\n    \n    //store parent methods\n    var pInitInput = $.fn.editableform.Constructor.prototype.initInput;\n    \n    $.extend($.fn.editableform.Constructor.prototype, {\n        initTemplate: function() {\n            this.$form = $($.fn.editableform.template); \n            this.$form.find('.control-group').addClass('form-group');\n            this.$form.find('.editable-error-block').addClass('help-block');\n        },\n        initInput: function() {  \n            pInitInput.apply(this);\n\n            //for bs3 set default class `input-sm` to standard inputs\n            var emptyInputClass = this.input.options.inputclass === null || this.input.options.inputclass === false;\n            var defaultClass = 'input-sm';\n            \n            //bs3 add `form-control` class to standard inputs\n            var stdtypes = 'text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs'.split(','); \n            if(~$.inArray(this.input.type, stdtypes)) {\n                this.input.$input.addClass('form-control');\n                if(emptyInputClass) {\n                    this.input.options.inputclass = defaultClass;\n                    this.input.$input.addClass(defaultClass);\n                }\n            }             \n        \n            //apply bs3 size class also to buttons (to fit size of control)\n            var $btn = this.$form.find('.editable-buttons');\n            var classes = emptyInputClass ? [defaultClass] : this.input.options.inputclass.split(' ');\n            for(var i=0; i<classes.length; i++) {\n                // `btn-sm` is default now\n                /*\n                if(classes[i].toLowerCase() === 'input-sm') { \n                    $btn.find('button').addClass('btn-sm');  \n                }\n                */\n                if(classes[i].toLowerCase() === 'input-lg') {\n                    $btn.find('button').removeClass('btn-sm').addClass('btn-lg'); \n                }\n            }\n        }\n    });    \n    \n    //buttons\n    $.fn.editableform.buttons = \n      '<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\">'+\n        '<i class=\"glyphicon glyphicon-ok\"></i>'+\n      '</button>'+\n      '<button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\">'+\n        '<i class=\"glyphicon glyphicon-remove\"></i>'+\n      '</button>';         \n    \n    //error classes\n    $.fn.editableform.errorGroupClass = 'has-error';\n    $.fn.editableform.errorBlockClass = null;  \n    //engine\n    $.fn.editableform.engine = 'bs3';  \n}(window.jQuery));\n/**\n* Editable Popover3 (for Bootstrap 3) \n* ---------------------\n* requires bootstrap-popover.js\n*/\n(function ($) {\n    \"use strict\";\n\n    //extend methods\n    $.extend($.fn.editableContainer.Popup.prototype, {\n        containerName: 'popover',\n        containerDataName: 'bs.popover',\n        innerCss: '.popover-content',\n        defaults: $.fn.popover.Constructor.DEFAULTS,\n\n        initContainer: function(){\n            $.extend(this.containerOptions, {\n                trigger: 'manual',\n                selector: false,\n                content: ' ',\n                template: this.defaults.template\n            });\n            \n            //as template property is used in inputs, hide it from popover\n            var t;\n            if(this.$element.data('template')) {\n               t = this.$element.data('template');\n               this.$element.removeData('template');  \n            } \n            \n            this.call(this.containerOptions);\n            \n            if(t) {\n               //restore data('template')\n               this.$element.data('template', t); \n            }\n        }, \n        \n        /* show */\n        innerShow: function () {\n            this.call('show');                \n        },  \n        \n        /* hide */\n        innerHide: function () {\n            this.call('hide');       \n        }, \n        \n        /* destroy */\n        innerDestroy: function() {\n            this.call('destroy');\n        },                               \n        \n        setContainerOption: function(key, value) {\n            this.container().options[key] = value; \n        },               \n\n        /**\n        * move popover to new position. This function mainly copied from bootstrap-popover.\n        */\n        /*jshint laxcomma: true, eqeqeq: false*/\n        setPosition: function () { \n\n            (function() {\n            /*    \n                var $tip = this.tip()\n                , inside\n                , pos\n                , actualWidth\n                , actualHeight\n                , placement\n                , tp\n                , tpt\n                , tpb\n                , tpl\n                , tpr;\n\n                placement = typeof this.options.placement === 'function' ?\n                this.options.placement.call(this, $tip[0], this.$element[0]) :\n                this.options.placement;\n\n                inside = /in/.test(placement);\n               \n                $tip\n              //  .detach()\n              //vitalets: remove any placement class because otherwise they dont influence on re-positioning of visible popover\n                .removeClass('top right bottom left')\n                .css({ top: 0, left: 0, display: 'block' });\n              //  .insertAfter(this.$element);\n               \n                pos = this.getPosition(inside);\n\n                actualWidth = $tip[0].offsetWidth;\n                actualHeight = $tip[0].offsetHeight;\n\n                placement = inside ? placement.split(' ')[1] : placement;\n\n                tpb = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};\n                tpt = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2};\n                tpl = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};\n                tpr = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width};\n\n                switch (placement) {\n                    case 'bottom':\n                        if ((tpb.top + actualHeight) > ($(window).scrollTop() + $(window).height())) {\n                            if (tpt.top > $(window).scrollTop()) {\n                                placement = 'top';\n                            } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\n                                placement = 'right';\n                            } else if (tpl.left > $(window).scrollLeft()) {\n                                placement = 'left';\n                            } else {\n                                placement = 'right';\n                            }\n                        }\n                        break;\n                    case 'top':\n                        if (tpt.top < $(window).scrollTop()) {\n                            if ((tpb.top + actualHeight) < ($(window).scrollTop() + $(window).height())) {\n                                placement = 'bottom';\n                            } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\n                                placement = 'right';\n                            } else if (tpl.left > $(window).scrollLeft()) {\n                                placement = 'left';\n                            } else {\n                                placement = 'right';\n                            }\n                        }\n                        break;\n                    case 'left':\n                        if (tpl.left < $(window).scrollLeft()) {\n                            if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\n                                placement = 'right';\n                            } else if (tpt.top > $(window).scrollTop()) {\n                                placement = 'top';\n                            } else if (tpt.top > $(window).scrollTop()) {\n                                placement = 'bottom';\n                            } else {\n                                placement = 'right';\n                            }\n                        }\n                        break;\n                    case 'right':\n                        if ((tpr.left + actualWidth) > ($(window).scrollLeft() + $(window).width())) {\n                            if (tpl.left > $(window).scrollLeft()) {\n                                placement = 'left';\n                            } else if (tpt.top > $(window).scrollTop()) {\n                                placement = 'top';\n                            } else if (tpt.top > $(window).scrollTop()) {\n                                placement = 'bottom';\n                            }\n                        }\n                        break;\n                }\n\n                switch (placement) {\n                    case 'bottom':\n                        tp = tpb;\n                        break;\n                    case 'top':\n                        tp = tpt;\n                        break;\n                    case 'left':\n                        tp = tpl;\n                        break;\n                    case 'right':\n                        tp = tpr;\n                        break;\n                }\n\n                $tip\n                .offset(tp)\n                .addClass(placement)\n                .addClass('in');\n           */\n                     \n           \n            var $tip = this.tip();\n            \n            var placement = typeof this.options.placement == 'function' ?\n                this.options.placement.call(this, $tip[0], this.$element[0]) :\n                this.options.placement;            \n\n            var autoToken = /\\s?auto?\\s?/i;\n            var autoPlace = autoToken.test(placement);\n            if (autoPlace) {\n                placement = placement.replace(autoToken, '') || 'top';\n            }\n            \n            \n            var pos = this.getPosition();\n            var actualWidth = $tip[0].offsetWidth;\n            var actualHeight = $tip[0].offsetHeight;\n\n            if (autoPlace) {\n                var $parent = this.$element.parent();\n\n                var orgPlacement = placement;\n                var docScroll    = document.documentElement.scrollTop || document.body.scrollTop;\n                var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth();\n                var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight();\n                var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left;\n\n                placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                            placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                            placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                            placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                            placement;\n\n                $tip\n                  .removeClass(orgPlacement)\n                  .addClass(placement);\n            }\n\n\n            var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight);\n\n            this.applyPlacement(calculatedOffset, placement);            \n                     \n                \n            }).call(this.container());\n          /*jshint laxcomma: false, eqeqeq: true*/  \n        }            \n    });\n\n}(window.jQuery));\n\n/* =========================================================\n * bootstrap-datepicker.js\n * http://www.eyecon.ro/bootstrap-datepicker\n * =========================================================\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n(function( $ ) {\n\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate());\n\t}\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options) {\n\t\tvar that = this;\n\n\t\tthis._process_options(options);\n\n\t\tthis.element = $(element);\n\t\tthis.isInline = false;\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.component = this.element.is('.date') ? this.element.find('.add-on, .btn') : false;\n\t\tthis.hasInput = this.component && this.element.find('input').length;\n\t\tif(this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\n\t\tthis.picker = $(DPGlobal.template);\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif(this.isInline) {\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t} else {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t\tthis.picker.find('.prev i, .next i')\n\t\t\t\t\t\t.toggleClass('icon-arrow-left icon-arrow-right');\n\t\t}\n\n\n\t\tthis.viewMode = this.o.startView;\n\n\t\tif (this.o.calendarWeeks)\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\t\t\treturn parseInt(val) + 1;\n\t\t\t\t\t\t});\n\n\t\tthis._allow_update = false;\n\n\t\tthis.setStartDate(this.o.startDate);\n\t\tthis.setEndDate(this.o.endDate);\n\t\tthis.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis._allow_update = true;\n\n\t\tthis.update();\n\t\tthis.showMode();\n\n\t\tif(this.isInline) {\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]) {\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\tswitch(o.startView){\n\t\t\t\tcase 2:\n\t\t\t\tcase 'decade':\n\t\t\t\t\to.startView = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 'year':\n\t\t\t\t\to.startView = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.startView = 0;\n\t\t\t}\n\n\t\t\tswitch (o.minViewMode) {\n\t\t\t\tcase 1:\n\t\t\t\tcase 'months':\n\t\t\t\t\to.minViewMode = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\tcase 'years':\n\t\t\t\t\to.minViewMode = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.minViewMode = 0;\n\t\t\t}\n\n\t\t\to.startView = Math.max(o.startView, o.minViewMode);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = ((o.weekStart + 6) % 7);\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format)\n\t\t\tif (o.startDate !== -Infinity) {\n\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language);\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity) {\n\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language);\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled||[];\n\t\t\tif (!$.isArray(o.daysOfWeekDisabled))\n\t\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\\s]*/);\n\t\t\to.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function (d) {\n\t\t\t\treturn parseInt(d, 10);\n\t\t\t});\n\t\t},\n\t\t_events: [],\n\t\t_secondaryEvents: [],\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tev = evs[i][1];\n\t\t\t\tel.on(ev);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tev = evs[i][1];\n\t\t\t\tel.off(ev);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n\t\t\tif (this.isInput) { // single input\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.component && this.hasInput){ // component: input + button\n\t\t\t\tthis._events = [\n\t\t\t\t\t// For components that are not readonly, allow keyboard nav\n\t\t\t\t\t[this.element.find('input'), {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}],\n\t\t\t\t\t[this.component, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.element.is('div')) {  // inline datepicker\n\t\t\t\tthis.isInline = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\tmousedown: $.proxy(function (e) {\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).size() ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).size()\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.date,\n\t\t\t\tlocal_date = new Date(date.getTime() + (date.getTimezoneOffset()*60000));\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tformat: $.proxy(function(altformat){\n\t\t\t\t\tvar format = altformat || this.o.format;\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(e) {\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo('body');\n\t\t\tthis.picker.show();\n\t\t\tthis.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\n\t\t\tthis.place();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis._trigger('show');\n\t\t},\n\n\t\thide: function(e){\n\t\t\tif(this.isInline) return;\n\t\t\tif (!this.picker.is(':visible')) return;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.viewMode = this.o.startView;\n\t\t\tthis.showMode();\n\n\t\t\tif (\n\t\t\t\tthis.o.forceParse &&\n\t\t\t\t(\n\t\t\t\t\tthis.isInput && this.element.val() ||\n\t\t\t\t\tthis.hasInput && this.element.find('input').val()\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t},\n\n\t\tremove: function() {\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput) {\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t},\n\n\t\tgetDate: function() {\n\t\t\tvar d = this.getUTCDate();\n\t\t\treturn new Date(d.getTime() + (d.getTimezoneOffset()*60000));\n\t\t},\n\n\t\tgetUTCDate: function() {\n\t\t\treturn this.date;\n\t\t},\n\n\t\tsetDate: function(d) {\n\t\t\tthis.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset()*60000)));\n\t\t},\n\n\t\tsetUTCDate: function(d) {\n\t\t\tthis.date = d;\n\t\t\tthis.setValue();\n\t\t},\n\n\t\tsetValue: function() {\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tif (!this.isInput) {\n\t\t\t\tif (this.component){\n\t\t\t\t\tthis.element.find('input').val(formatted);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.element.val(formatted);\n\t\t\t}\n\t\t},\n\n\t\tgetFormattedDate: function(format) {\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\t\t\treturn DPGlobal.formatDate(this.date, format, this.o.language);\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tplace: function(){\n\t\t\t\t\t\tif(this.isInline) return;\n\t\t\tvar zIndex = parseInt(this.element.parents().filter(function() {\n\t\t\t\t\t\t\treturn $(this).css('z-index') != 'auto';\n\t\t\t\t\t\t}).first().css('z-index'))+10;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(true);\n\t\t\tthis.picker.css({\n\t\t\t\ttop: offset.top + height,\n\t\t\t\tleft: offset.left,\n\t\t\t\tzIndex: zIndex\n\t\t\t});\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update) return;\n\n\t\t\tvar date, fromArgs = false;\n\t\t\tif(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\n\t\t\t\tdate = arguments[0];\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdate = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tthis.date = DPGlobal.parseDate(date, this.o.format, this.o.language);\n\n\t\t\tif(fromArgs) this.setValue();\n\n\t\t\tif (this.date < this.o.startDate) {\n\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t} else if (this.date > this.o.endDate) {\n\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t} else {\n\t\t\t\tthis.viewDate = new Date(this.date);\n\t\t\t}\n\t\t\tthis.fill();\n\t\t},\n\n\t\tfillDow: function(){\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\thtml = '<tr>';\n\t\t\tif(this.o.calendarWeeks){\n\t\t\t\tvar cell = '<th class=\"cw\">&nbsp;</th>';\n\t\t\t\thtml += cell;\n\t\t\t\tthis.picker.find('.datepicker-days thead tr:first-child').prepend(cell);\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7) {\n\t\t\t\thtml += '<th class=\"dow\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n\t\t},\n\n\t\tfillMonths: function(){\n\t\t\tvar html = '',\n\t\t\ti = 0;\n\t\t\twhile (i < 12) {\n\t\t\t\thtml += '<span class=\"month\">'+dates[this.o.language].monthsShort[i++]+'</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){ return d.valueOf(); });\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\tcurrentDate = this.date.valueOf(),\n\t\t\t\ttoday = new Date();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() == year && date.getUTCMonth() < month)) {\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() == year && date.getUTCMonth() > month)) {\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\t// Compare internal UTC date with local today, not UTC today\n\t\t\tif (this.o.todayHighlight &&\n\t\t\t\tdate.getUTCFullYear() == today.getFullYear() &&\n\t\t\t\tdate.getUTCMonth() == today.getMonth() &&\n\t\t\t\tdate.getUTCDate() == today.getDate()) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (currentDate && date.valueOf() == currentDate) {\n\t\t\t\tcls.push('active');\n\t\t\t}\n\t\t\tif (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||\n\t\t\t\t$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1) {\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) != -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\tfill: function() {\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tcurrentDate = this.date && this.date.valueOf(),\n\t\t\t\ttooltip;\n\t\t\tthis.picker.find('.datepicker-days thead th.datepicker-switch')\n\t\t\t\t\t\t.text(dates[this.o.language].months[month]+' '+year);\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.text(dates[this.o.language].today)\n\t\t\t\t\t\t.toggle(this.o.todayBtn !== false);\n\t\t\tthis.picker.find('tfoot th.clear')\n\t\t\t\t\t\t.text(dates[this.o.language].clear)\n\t\t\t\t\t\t.toggle(this.o.clearBtn !== false);\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month-1, 28,0,0,0,0),\n\t\t\t\tday = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\n\t\t\tprevMonth.setUTCDate(day);\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar clsName;\n\t\t\twhile(prevMonth.valueOf() < nextMonth) {\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekStart) {\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif(this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(+ws + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(+(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek =  (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar before = this.o.beforeShowDay(prevMonth);\n\t\t\t\tif (before === undefined)\n\t\t\t\t\tbefore = {};\n\t\t\t\telse if (typeof(before) === 'boolean')\n\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\telse if (typeof(before) === 'string')\n\t\t\t\t\tbefore = {classes: before};\n\t\t\t\tif (before.enabled === false)\n\t\t\t\t\tclsName.push('disabled');\n\t\t\t\tif (before.classes)\n\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\tif (before.tooltip)\n\t\t\t\t\ttooltip = before.tooltip;\n\n\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + '>'+prevMonth.getUTCDate() + '</td>');\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekEnd) {\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\n\t\t\tvar currentYear = this.date && this.date.getUTCFullYear();\n\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t.text(year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('span').removeClass('active');\n\t\t\tif (currentYear && currentYear == year) {\n\t\t\t\tmonths.eq(this.date.getUTCMonth()).addClass('active');\n\t\t\t}\n\t\t\tif (year < startYear || year > endYear) {\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year == startYear) {\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year == endYear) {\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\thtml = '';\n\t\t\tyear = parseInt(year/10, 10) * 10;\n\t\t\tvar yearCont = this.picker.find('.datepicker-years')\n\t\t\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t\t\t.text(year + '-' + (year + 9))\n\t\t\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t\t\t.find('td');\n\t\t\tyear -= 1;\n\t\t\tfor (var i = -1; i < 11; i++) {\n\t\t\t\thtml += '<span class=\"year'+(i == -1 ? ' old' : i == 10 ? ' new' : '')+(currentYear == year ? ' active' : '')+(year < startYear || year > endYear ? ' disabled' : '')+'\">'+year+'</span>';\n\t\t\t\tyear += 1;\n\t\t\t}\n\t\t\tyearCont.html(html);\n\t\t},\n\n\t\tupdateNavArrows: function() {\n\t\t\tif (!this._allow_update) return;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth();\n\t\t\tswitch (this.viewMode) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()) {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()) {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 2:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()) {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()) {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\tclick: function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar target = $(e.target).closest('span, td, th');\n\t\t\tif (target.length == 1) {\n\t\t\t\tswitch(target[0].nodeName.toLowerCase()) {\n\t\t\t\t\tcase 'th':\n\t\t\t\t\t\tswitch(target[0].className) {\n\t\t\t\t\t\t\tcase 'datepicker-switch':\n\t\t\t\t\t\t\t\tthis.showMode(1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'prev':\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tvar dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);\n\t\t\t\t\t\t\t\tswitch(this.viewMode){\n\t\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'today':\n\t\t\t\t\t\t\t\tvar date = new Date();\n\t\t\t\t\t\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\n\t\t\t\t\t\t\t\tthis.showMode(-2);\n\t\t\t\t\t\t\t\tvar which = this.o.todayBtn == 'linked' ? null : 'view';\n\t\t\t\t\t\t\t\tthis._setDate(date, which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'clear':\n\t\t\t\t\t\t\t\tvar element;\n\t\t\t\t\t\t\t\tif (this.isInput)\n\t\t\t\t\t\t\t\t\telement = this.element;\n\t\t\t\t\t\t\t\telse if (this.component)\n\t\t\t\t\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t\t\t\t\tif (element)\n\t\t\t\t\t\t\t\t\telement.val(\"\").change();\n\t\t\t\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'span':\n\t\t\t\t\t\tif (!target.is('.disabled')) {\n\t\t\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\t\t\t\t\t\t\tif (target.is('.month')) {\n\t\t\t\t\t\t\t\tvar day = 1;\n\t\t\t\t\t\t\t\tvar month = target.parent().find('span').index(target);\n\t\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 1) {\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar year = parseInt(target.text(), 10)||0;\n\t\t\t\t\t\t\t\tvar day = 1;\n\t\t\t\t\t\t\t\tvar month = 0;\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 2) {\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.showMode(-1);\n\t\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'td':\n\t\t\t\t\t\tif (target.is('.day') && !target.is('.disabled')){\n\t\t\t\t\t\t\tvar day = parseInt(target.text(), 10)||1;\n\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear(),\n\t\t\t\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\n\t\t\t\t\t\t\tif (target.is('.old')) {\n\t\t\t\t\t\t\t\tif (month === 0) {\n\t\t\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t\t\t\tyear -= 1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmonth -= 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (target.is('.new')) {\n\t\t\t\t\t\t\t\tif (month == 11) {\n\t\t\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t\t\t\tyear += 1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmonth += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which == 'date')\n\t\t\t\tthis.date = new Date(date);\n\t\t\tif (!which || which  == 'view')\n\t\t\t\tthis.viewDate = new Date(date);\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tthis._trigger('changeDate');\n\t\t\tvar element;\n\t\t\tif (this.isInput) {\n\t\t\t\telement = this.element;\n\t\t\t} else if (this.component){\n\t\t\t\telement = this.element.find('input');\n\t\t\t}\n\t\t\tif (element) {\n\t\t\t\telement.change();\n\t\t\t\tif (this.o.autoclose && (!which || which == 'date')) {\n\t\t\t\t\tthis.hide();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!dir) return date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag == 1){\n\t\t\t\ttest = dir == -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){ return new_date.getUTCMonth() == month; }\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){ return new_date.getUTCMonth() != new_month; };\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tif (new_month < 0 || new_month > 11)\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t} else {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i<mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){ return new_month != new_date.getUTCMonth(); };\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (this.picker.is(':not(:visible)')){\n\t\t\t\tif (e.keyCode == 27) // allow escape to hide and re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, day, month,\n\t\t\t\tnewDate, newViewDate;\n\t\t\tswitch(e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 39: // right\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\n\t\t\t\t\tdir = e.keyCode == 37 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\n\t\t\t\t\t} else if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewDate = new Date(this.date);\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir);\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.date = newDate;\n\t\t\t\t\t\tthis.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\n\t\t\t\t\tdir = e.keyCode == 38 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\n\t\t\t\t\t} else if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewDate = new Date(this.date);\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir * 7);\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir * 7);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.date = newDate;\n\t\t\t\t\t\tthis.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t\tvar element;\n\t\t\t\tif (this.isInput) {\n\t\t\t\t\telement = this.element;\n\t\t\t\t} else if (this.component){\n\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t}\n\t\t\t\tif (element) {\n\t\t\t\t\telement.change();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tshowMode: function(dir) {\n\t\t\tif (dir) {\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));\n\t\t\t}\n\t\t\t/*\n\t\t\t\tvitalets: fixing bug of very special conditions:\n\t\t\t\tjquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.\n\t\t\t\tMethod show() does not set display css correctly and datepicker is not shown.\n\t\t\t\tChanged to .css('display', 'block') solve the problem.\n\t\t\t\tSee https://github.com/vitalets/x-editable/issues/37\n\n\t\t\t\tIn jquery 1.7.2+ everything works fine.\n\t\t\t*/\n\t\t\t//this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\n\t\t\tthis.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\n\t\t\tthis.updateNavArrows();\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){ return i.jquery ? i[0] : i; });\n\t\tdelete options.inputs;\n\n\t\t$(this.inputs)\n\t\t\t.datepicker(options)\n\t\t\t.bind('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){ return $(i).data('datepicker'); });\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){ return i.date; });\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){ return d.valueOf(); });\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\tvar dp = $(e.target).data('datepicker'),\n\t\t\t\tnew_date = dp.getUTCDate(),\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i == -1) return;\n\n\t\t\tif (new_date < this.dates[i]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (i>=0 && new_date < this.dates[i]){\n\t\t\t\t\tthis.pickers[i--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (new_date > this.dates[i]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (i<l && new_date > this.dates[i]){\n\t\t\t\t\tthis.pickers[i++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\t\t},\n\t\tremove: function(){\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\n\t\t\tdelete this.element.data().datepicker;\n\t\t}\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'),\n\t\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, function(_,a){ return a.toLowerCase(); });\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]) {\n\t\t\tlang = lang.split('-')[0]\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepicker = $.fn.datepicker = function ( option ) {\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return,\n\t\t\tthis_return;\n\t\tthis.each(function () {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option == 'object' && option;\n\t\t\tif (!data) {\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.is('.input-daterange') || opts.inputs){\n\t\t\t\t\tvar ropts = {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t};\n\t\t\t\t\t$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t$this.data('datepicker', (data = new Datepicker(this, opts)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof option == 'string' && typeof data[option] == 'function') {\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t\tif (internal_return !== undefined)\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif (internal_return !== undefined)\n\t\t\treturn internal_return;\n\t\telse\n\t\t\treturn this;\n\t};\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tweekStart: 0\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tmodes: [\n\t\t\t{\n\t\t\t\tclsName: 'days',\n\t\t\t\tnavFnc: 'Month',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'months',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'years',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 10\n\t\t}],\n\t\tisLeapYear: function (year) {\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n\t\t},\n\t\tgetDaysInMonth: function (year, month) {\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t\t},\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\t// IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language) {\n\t\t\tif (date instanceof Date) return date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)) {\n\t\t\t\tvar part_re = /([\\-+]\\d+)([dmwy])/,\n\t\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\n\t\t\t\t\tpart, dir;\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (var i=0; i<parts.length; i++) {\n\t\t\t\t\tpart = part_re.exec(parts[i]);\n\t\t\t\t\tdir = parseInt(part[1]);\n\t\t\t\t\tswitch(part[2]){\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir * 7);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);\n\t\t\t}\n\t\t\tvar parts = date && date.match(this.nonpunctuation) || [],\n\t\t\t\tdate = new Date(),\n\t\t\t\tparsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){ return d.setUTCFullYear(v); },\n\t\t\t\t\tyy: function(d,v){ return d.setUTCFullYear(2000+v); },\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v<0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() != v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){ return d.setUTCDate(v); }\n\t\t\t\t},\n\t\t\t\tval, filtered, part;\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length != fparts.length) {\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tif (parts.length == fparts.length) {\n\t\t\t\tfor (var i=0, cnt = fparts.length; i < cnt; i++) {\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)) {\n\t\t\t\t\t\tswitch(part) {\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(function(){\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\t\t\t\t\t\treturn m == p;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(function(){\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\t\t\t\t\t\treturn m == p;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tfor (var i=0, s; i<setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s]))\n\t\t\t\t\t\tsetters_map[s](date, parsed[s]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tvar val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tvar date = [],\n\t\t\t\tseps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++) {\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\"><i class=\"icon-arrow-left\"/></th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\"><i class=\"icon-arrow-right\"/></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\" table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker')) return;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepicker.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\t//$('[data-provide=\"datepicker-inline\"]').datepicker();\n        //vit: changed to support noConflict()\n        datepicker.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}( window.jQuery ));\n\n/**\nBootstrap-datepicker.  \nDescription and examples: https://github.com/eternicode/bootstrap-datepicker.  \nFor **i18n** you should include js file from here: https://github.com/eternicode/bootstrap-datepicker/tree/master/js/locales\nand set `language` option.  \nSince 1.4.0 date has different appearance in **popup** and **inline** modes. \n\n@class date\n@extends abstractinput\n@final\n@example\n<a href=\"#\" id=\"dob\" data-type=\"date\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select date\">15/05/1984</a>\n<script>\n$(function(){\n    $('#dob').editable({\n        format: 'yyyy-mm-dd',    \n        viewformat: 'dd/mm/yyyy',    \n        datepicker: {\n                weekStart: 1\n           }\n        }\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n    \n    //store bootstrap-datepicker as bdateicker to exclude conflict with jQuery UI one\n    $.fn.bdatepicker = $.fn.datepicker.noConflict();\n    if(!$.fn.datepicker) { //if there were no other datepickers, keep also original name\n        $.fn.datepicker = $.fn.bdatepicker;    \n    }    \n    \n    var Date = function (options) {\n        this.init('date', options, Date.defaults);\n        this.initPicker(options, Date.defaults);\n    };\n\n    $.fn.editableutils.inherit(Date, $.fn.editabletypes.abstractinput);    \n    \n    $.extend(Date.prototype, {\n        initPicker: function(options, defaults) {\n            //'format' is set directly from settings or data-* attributes\n\n            //by default viewformat equals to format\n            if(!this.options.viewformat) {\n                this.options.viewformat = this.options.format;\n            }\n            \n            //try parse datepicker config defined as json string in data-datepicker\n            options.datepicker = $.fn.editableutils.tryParseJson(options.datepicker, true);\n            \n            //overriding datepicker config (as by default jQuery extend() is not recursive)\n            //since 1.4 datepicker internally uses viewformat instead of format. Format is for submit only\n            this.options.datepicker = $.extend({}, defaults.datepicker, options.datepicker, {\n                format: this.options.viewformat\n            });\n            \n            //language\n            this.options.datepicker.language = this.options.datepicker.language || 'en'; \n\n            //store DPglobal\n            this.dpg = $.fn.bdatepicker.DPGlobal; \n\n            //store parsed formats\n            this.parsedFormat = this.dpg.parseFormat(this.options.format);\n            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat);            \n        },\n        \n        render: function () {\n            this.$input.bdatepicker(this.options.datepicker);\n            \n            //\"clear\" link\n            if(this.options.clear) {\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.clear();\n                }, this));\n                \n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \n            }                \n        },\n        \n        value2html: function(value, element) {\n           var text = value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '';\n           Date.superclass.value2html.call(this, text, element); \n        },\n\n        html2value: function(html) {\n            return this.parseDate(html, this.parsedViewFormat);\n        },   \n\n        value2str: function(value) {\n            return value ? this.dpg.formatDate(value, this.parsedFormat, this.options.datepicker.language) : '';\n        }, \n\n        str2value: function(str) {\n            return this.parseDate(str, this.parsedFormat);\n        }, \n\n        value2submit: function(value) {\n            return this.value2str(value);\n        },                    \n\n        value2input: function(value) {\n            this.$input.bdatepicker('update', value);\n        },\n\n        input2value: function() { \n            return this.$input.data('datepicker').date;\n        },       \n\n        activate: function() {\n        },\n\n        clear:  function() {\n            this.$input.data('datepicker').date = null;\n            this.$input.find('.active').removeClass('active');\n            if(!this.options.showbuttons) {\n                this.$input.closest('form').submit(); \n            }\n        },\n\n        autosubmit: function() {\n            this.$input.on('mouseup', '.day', function(e){\n                if($(e.currentTarget).is('.old') || $(e.currentTarget).is('.new')) {\n                    return;\n                }\n                var $form = $(this).closest('form');\n                setTimeout(function() {\n                    $form.submit();\n                }, 200);\n            });\n           //changedate is not suitable as it triggered when showing datepicker. see #149\n           /*\n           this.$input.on('changeDate', function(e){\n               var $form = $(this).closest('form');\n               setTimeout(function() {\n                   $form.submit();\n               }, 200);\n           });\n           */\n       },\n       \n       /*\n        For incorrect date bootstrap-datepicker returns current date that is not suitable\n        for datefield.\n        This function returns null for incorrect date.  \n       */\n       parseDate: function(str, format) {\n           var date = null, formattedBack;\n           if(str) {\n               date = this.dpg.parseDate(str, format, this.options.datepicker.language);\n               if(typeof str === 'string') {\n                   formattedBack = this.dpg.formatDate(date, format, this.options.datepicker.language);\n                   if(str !== formattedBack) {\n                       date = null;\n                   }\n               }\n           }\n           return date;\n       }\n\n    });\n\n    Date.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl \n        @default <div></div>\n        **/         \n        tpl:'<div class=\"editable-date well\"></div>',\n        /**\n        @property inputclass \n        @default null\n        **/\n        inputclass: null,\n        /**\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\n        Possible tokens are: <code>d, dd, m, mm, yy, yyyy</code>  \n\n        @property format \n        @type string\n        @default yyyy-mm-dd\n        **/\n        format:'yyyy-mm-dd',\n        /**\n        Format used for displaying date. Also applied when converting date from element's text on init.   \n        If not specified equals to <code>format</code>\n\n        @property viewformat \n        @type string\n        @default null\n        **/\n        viewformat: null,\n        /**\n        Configuration of datepicker.\n        Full list of options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\n\n        @property datepicker \n        @type object\n        @default {\n            weekStart: 0,\n            startView: 0,\n            minViewMode: 0,\n            autoclose: false\n        }\n        **/\n        datepicker:{\n            weekStart: 0,\n            startView: 0,\n            minViewMode: 0,\n            autoclose: false\n        },\n        /**\n        Text shown as clear date button. \n        If <code>false</code> clear button will not be rendered.\n\n        @property clear \n        @type boolean|string\n        @default 'x clear'\n        **/\n        clear: '&times; clear'\n    });\n\n    $.fn.editabletypes.date = Date;\n\n}(window.jQuery));\n\n/**\nBootstrap datefield input - modification for inline mode.\nShows normal <input type=\"text\"> and binds popup datepicker.  \nAutomatically shown in inline mode.\n\n@class datefield\n@extends date\n\n@since 1.4.0\n**/\n(function ($) {\n    \"use strict\";\n    \n    var DateField = function (options) {\n        this.init('datefield', options, DateField.defaults);\n        this.initPicker(options, DateField.defaults);\n    };\n\n    $.fn.editableutils.inherit(DateField, $.fn.editabletypes.date);    \n    \n    $.extend(DateField.prototype, {\n        render: function () {\n            this.$input = this.$tpl.find('input');\n            this.setClass();\n            this.setAttr('placeholder');\n    \n            //bootstrap-datepicker is set `bdateicker` to exclude conflict with jQuery UI one. (in date.js)        \n            this.$tpl.bdatepicker(this.options.datepicker);\n            \n            //need to disable original event handlers\n            this.$input.off('focus keydown');\n            \n            //update value of datepicker\n            this.$input.keyup($.proxy(function(){\n               this.$tpl.removeData('date');\n               this.$tpl.bdatepicker('update');\n            }, this));\n            \n        },   \n        \n       value2input: function(value) {\n           this.$input.val(value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '');\n           this.$tpl.bdatepicker('update');\n       },\n        \n       input2value: function() { \n           return this.html2value(this.$input.val());\n       },              \n        \n       activate: function() {\n           $.fn.editabletypes.text.prototype.activate.call(this);\n       },\n       \n       autosubmit: function() {\n         //reset autosubmit to empty  \n       }\n    });\n    \n    DateField.defaults = $.extend({}, $.fn.editabletypes.date.defaults, {\n        /**\n        @property tpl \n        **/         \n        tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\n        /**\n        @property inputclass \n        @default 'input-small'\n        **/         \n        inputclass: 'input-small',\n        \n        /* datepicker config */\n        datepicker: {\n            weekStart: 0,\n            startView: 0,\n            minViewMode: 0,\n            autoclose: true\n        }\n    });\n    \n    $.fn.editabletypes.datefield = DateField;\n\n}(window.jQuery));\n/**\nBootstrap-datetimepicker.  \nBased on [smalot bootstrap-datetimepicker plugin](https://github.com/smalot/bootstrap-datetimepicker). \nBefore usage you should manually include dependent js and css:\n\n    <link href=\"css/datetimepicker.css\" rel=\"stylesheet\" type=\"text/css\"></link> \n    <script src=\"js/bootstrap-datetimepicker.js\"></script>\n\nFor **i18n** you should include js file from here: https://github.com/smalot/bootstrap-datetimepicker/tree/master/js/locales\nand set `language` option.  \n\n@class datetime\n@extends abstractinput\n@final\n@since 1.4.4\n@example\n<a href=\"#\" id=\"last_seen\" data-type=\"datetime\" data-pk=\"1\" data-url=\"/post\" title=\"Select date & time\">15/03/2013 12:45</a>\n<script>\n$(function(){\n    $('#last_seen').editable({\n        format: 'yyyy-mm-dd hh:ii',    \n        viewformat: 'dd/mm/yyyy hh:ii',    \n        datetimepicker: {\n                weekStart: 1\n           }\n        }\n    });\n});\n</script>\n**/\n(function ($) {\n    \"use strict\";\n\n    var DateTime = function (options) {\n        this.init('datetime', options, DateTime.defaults);\n        this.initPicker(options, DateTime.defaults);\n    };\n\n    $.fn.editableutils.inherit(DateTime, $.fn.editabletypes.abstractinput);\n\n    $.extend(DateTime.prototype, {\n        initPicker: function(options, defaults) {\n            //'format' is set directly from settings or data-* attributes\n\n            //by default viewformat equals to format\n            if(!this.options.viewformat) {\n                this.options.viewformat = this.options.format;\n            }\n            \n            //try parse datetimepicker config defined as json string in data-datetimepicker\n            options.datetimepicker = $.fn.editableutils.tryParseJson(options.datetimepicker, true);\n\n            //overriding datetimepicker config (as by default jQuery extend() is not recursive)\n            //since 1.4 datetimepicker internally uses viewformat instead of format. Format is for submit only\n            this.options.datetimepicker = $.extend({}, defaults.datetimepicker, options.datetimepicker, {\n                format: this.options.viewformat\n            });\n\n            //language\n            this.options.datetimepicker.language = this.options.datetimepicker.language || 'en'; \n\n            //store DPglobal\n            this.dpg = $.fn.datetimepicker.DPGlobal; \n\n            //store parsed formats\n            this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType);\n            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType);\n        },\n\n        render: function () {\n            this.$input.datetimepicker(this.options.datetimepicker);\n\n            //adjust container position when viewMode changes\n            //see https://github.com/smalot/bootstrap-datetimepicker/pull/80\n            this.$input.on('changeMode', function(e) {\n                var f = $(this).closest('form').parent();\n                //timeout here, otherwise container changes position before form has new size\n                setTimeout(function(){\n                    f.triggerHandler('resize');\n                }, 0);\n            });\n\n            //\"clear\" link\n            if(this.options.clear) {\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.clear();\n                }, this));\n\n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \n            }\n        },\n\n        value2html: function(value, element) {\n            //formatDate works with UTCDate!\n            var text = value ? this.dpg.formatDate(this.toUTC(value), this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : '';\n            if(element) {\n                DateTime.superclass.value2html.call(this, text, element);\n            } else {\n                return text;\n            }\n        },\n\n        html2value: function(html) {\n            //parseDate return utc date!\n            var value = this.parseDate(html, this.parsedViewFormat); \n            return value ? this.fromUTC(value) : null;\n        },\n\n        value2str: function(value) {\n            //formatDate works with UTCDate!\n            return value ? this.dpg.formatDate(this.toUTC(value), this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : '';\n       },\n\n       str2value: function(str) {\n           //parseDate return utc date!\n           var value = this.parseDate(str, this.parsedFormat);\n           return value ? this.fromUTC(value) : null;\n       },\n\n       value2submit: function(value) {\n           return this.value2str(value);\n       },\n\n       value2input: function(value) {\n           if(value) {\n             this.$input.data('datetimepicker').setDate(value);\n           }\n       },\n\n       input2value: function() { \n           //date may be cleared, in that case getDate() triggers error\n           var dt = this.$input.data('datetimepicker');\n           return dt.date ? dt.getDate() : null;\n       },\n\n       activate: function() {\n       },\n\n       clear: function() {\n          this.$input.data('datetimepicker').date = null;\n          this.$input.find('.active').removeClass('active');\n          if(!this.options.showbuttons) {\n             this.$input.closest('form').submit(); \n          }          \n       },\n\n       autosubmit: function() {\n           this.$input.on('mouseup', '.minute', function(e){\n               var $form = $(this).closest('form');\n               setTimeout(function() {\n                   $form.submit();\n               }, 200);\n           });\n       },\n\n       //convert date from local to utc\n       toUTC: function(value) {\n         return value ? new Date(value.valueOf() - value.getTimezoneOffset() * 60000) : value;  \n       },\n\n       //convert date from utc to local\n       fromUTC: function(value) {\n         return value ? new Date(value.valueOf() + value.getTimezoneOffset() * 60000) : value;  \n       },\n\n       /*\n        For incorrect date bootstrap-datetimepicker returns current date that is not suitable\n        for datetimefield.\n        This function returns null for incorrect date.  \n       */\n       parseDate: function(str, format) {\n           var date = null, formattedBack;\n           if(str) {\n               date = this.dpg.parseDate(str, format, this.options.datetimepicker.language, this.options.formatType);\n               if(typeof str === 'string') {\n                   formattedBack = this.dpg.formatDate(date, format, this.options.datetimepicker.language, this.options.formatType);\n                   if(str !== formattedBack) {\n                       date = null;\n                   } \n               }\n           }\n           return date;\n       }\n\n    });\n\n    DateTime.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\n        /**\n        @property tpl \n        @default <div></div>\n        **/         \n        tpl:'<div class=\"editable-date well\"></div>',\n        /**\n        @property inputclass \n        @default null\n        **/\n        inputclass: null,\n        /**\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\n        Possible tokens are: <code>d, dd, m, mm, yy, yyyy, h, i</code>  \n        \n        @property format \n        @type string\n        @default yyyy-mm-dd hh:ii\n        **/         \n        format:'yyyy-mm-dd hh:ii',\n        formatType:'standard',\n        /**\n        Format used for displaying date. Also applied when converting date from element's text on init.   \n        If not specified equals to <code>format</code>\n        \n        @property viewformat \n        @type string\n        @default null\n        **/\n        viewformat: null,\n        /**\n        Configuration of datetimepicker.\n        Full list of options: https://github.com/smalot/bootstrap-datetimepicker\n\n        @property datetimepicker \n        @type object\n        @default { }\n        **/\n        datetimepicker:{\n            todayHighlight: false,\n            autoclose: false\n        },\n        /**\n        Text shown as clear date button. \n        If <code>false</code> clear button will not be rendered.\n\n        @property clear \n        @type boolean|string\n        @default 'x clear'\n        **/\n        clear: '&times; clear'\n    });\n\n    $.fn.editabletypes.datetime = DateTime;\n\n}(window.jQuery));\n/**\nBootstrap datetimefield input - datetime input for inline mode.\nShows normal <input type=\"text\"> and binds popup datetimepicker.  \nAutomatically shown in inline mode.\n\n@class datetimefield\n@extends datetime\n\n**/\n(function ($) {\n    \"use strict\";\n    \n    var DateTimeField = function (options) {\n        this.init('datetimefield', options, DateTimeField.defaults);\n        this.initPicker(options, DateTimeField.defaults);\n    };\n\n    $.fn.editableutils.inherit(DateTimeField, $.fn.editabletypes.datetime);\n    \n    $.extend(DateTimeField.prototype, {\n        render: function () {\n            this.$input = this.$tpl.find('input');\n            this.setClass();\n            this.setAttr('placeholder');\n            \n            this.$tpl.datetimepicker(this.options.datetimepicker);\n            \n            //need to disable original event handlers\n            this.$input.off('focus keydown');\n            \n            //update value of datepicker\n            this.$input.keyup($.proxy(function(){\n               this.$tpl.removeData('date');\n               this.$tpl.datetimepicker('update');\n            }, this));\n            \n        },   \n      \n       value2input: function(value) {\n           this.$input.val(this.value2html(value));\n           this.$tpl.datetimepicker('update');\n       },\n        \n       input2value: function() { \n           return this.html2value(this.$input.val());\n       },              \n        \n       activate: function() {\n           $.fn.editabletypes.text.prototype.activate.call(this);\n       },\n       \n       autosubmit: function() {\n         //reset autosubmit to empty  \n       }\n    });\n    \n    DateTimeField.defaults = $.extend({}, $.fn.editabletypes.datetime.defaults, {\n        /**\n        @property tpl \n        **/         \n        tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\n        /**\n        @property inputclass \n        @default 'input-medium'\n        **/         \n        inputclass: 'input-medium',\n        \n        /* datetimepicker config */\n        datetimepicker:{\n            todayHighlight: false,\n            autoclose: true\n        }\n    });\n    \n    $.fn.editabletypes.datetimefield = DateTimeField;\n\n}(window.jQuery));"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_account-pages.scss",
    "content": "/* =============\n   Accounts pages\n============= */\n\n\n.account-pages {\n  background: url(\"../images/bg.png\");\n  position: absolute;\n  background-size: cover;\n  height: 100%;\n  width: 100%;\n  top: 0;\n}\n.wrapper-page {\n  margin: 5% auto;\n  position: relative;\n  width: 420px;\n\n  .card-box{\n    border: 1px solid rgba(54, 64, 74, 0.1);\n  }\n}\n\n.panel-pages {\n  border-radius: 6px;\n\n  .panel-body {\n    padding: 30px;\n  }\n  .panel-heading {\n    -moz-border-radius: 6px 6px 0 0;\n    -webkit-border-radius: 6px 6px 0 0;\n    border-radius: 6px 6px 0 0;\n    padding: 40px 20px;\n    position: relative;\n    h3 {\n      position: relative;\n      z-index: 999;\n    }\n  }\n}\n\n.user-thumb {\n  position: relative;\n  z-index: 999;\n  img {\n    height: 88px;\n    margin: 0 auto;\n    width: 88px;\n  }\n}\n\n.ex-page-content {\n  .text-error {\n    color: #252932;\n    font-size: 98px;\n    font-weight: 700;\n    line-height: 150px;\n\n    i {\n      font-size: 78px;\n      padding: 0 10px;\n    }\n  }\n}\n\n/* signup-signin-page */\n\n.signup-signin-page {\n  width: auto;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_alerts.scss",
    "content": "/* Alert */\n\n.alert {\n  .btn {\n    margin-top: 10px;\n  }\n}\n.alert-success {\n  background-color: $success;\n  border-color: $success;\n  color: $white;\n\n  .alert-link {\n    color: $white;\n  }\n}\n.alert-info {\n  background-color: $info;\n  border-color: $info;\n  color: $white;\n\n  .alert-link {\n    color: $white;\n  }\n\n}\n.alert-warning {\n  background-color: $warning;\n  border-color: $warning;\n  color: $white;\n\n  .alert-link {\n    color: $white;\n  }\n}\n.alert-danger {\n  background-color: $danger;\n  border-color: $danger;\n  color: $white;\n\n  .alert-link {\n    color: $white;\n  }\n}\n\n\n//Notification\n.notifyjs-metro-base {\n  box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15) !important;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_animation.scss",
    "content": "/* =============\n   Animation\n============= */\n\n/* Bounce 1 */\n@-webkit-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.5);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale(1.2);\n  }\n  100% {\n    -webkit-transform: scale(1);\n  }\n}\n@-moz-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -moz-transform: scale(0.5);\n  }\n  60% {\n    opacity: 1;\n    -moz-transform: scale(1.2);\n  }\n  100% {\n    -moz-transform: scale(1);\n  }\n}\n@-o-keyframes cd-bounce-1 {\n  0% {\n    opacity: 0;\n    -o-transform: scale(0.5);\n  }\n  60% {\n    opacity: 1;\n    -o-transform: scale(1.2);\n  }\n  100% {\n    -o-transform: scale(1);\n  }\n}\n/* Bounce 2 */\n@-webkit-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100px);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n  }\n  100% {\n    -webkit-transform: translateX(0);\n  }\n}\n@-moz-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(-100px);\n  }\n  60% {\n    opacity: 1;\n    -moz-transform: translateX(20px);\n  }\n  100% {\n    -moz-transform: translateX(0);\n  }\n}\n@-o-keyframes cd-bounce-2 {\n  0% {\n    opacity: 0;\n    -o-transform: translateX(-100px);\n  }\n  60% {\n    opacity: 1;\n    -o-transform: translateX(20px);\n  }\n  100% {\n    opacity: 1;\n    -o-transform: translateX(0);\n  }\n}\n/* Dropdown */\n@-webkit-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n  }\n  100% {\n    -webkit-transform: scale(1);\n  }\n}\n@-moz-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -moz-transform: scale(0);\n  }\n  100% {\n    -moz-transform: scale(1);\n  }\n}\n@-o-keyframes dropdownOpen {\n  0% {\n    opacity: 0;\n    -o-transform: scale(0);\n  }\n  100% {\n    -o-transform: scale(1);\n  }\n}\n/* Progressbar Animated */\n@-webkit-keyframes animationProgress {\n  from {\n    width: 0;\n  }\n}\n@keyframes animationProgress {\n  from {\n    width: 0;\n  }\n}\n/* Portlets loader */\n@-webkit-keyframes loaderAnimate {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(220deg);\n  }\n}\n@-moz-keyframes loaderAnimate {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(220deg);\n  }\n}\n@-o-keyframes loaderAnimate {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(220deg);\n  }\n}\n@keyframes loaderAnimate {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(220deg);\n  }\n}\n@-webkit-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(-140deg);\n  }\n  50% {\n    box-shadow: inset #555 0 0 0 2px;\n  }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(140deg);\n  }\n}\n@-moz-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -moz-transform: rotate(-140deg);\n  }\n  50% {\n    box-shadow: inset #555 0 0 0 2px;\n  }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -moz-transform: rotate(140deg);\n  }\n}\n@-o-keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -o-transform: rotate(-140deg);\n  }\n  50% {\n    box-shadow: inset #555 0 0 0 2px;\n  }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -o-transform: rotate(140deg);\n  }\n}\n@keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(-140deg);\n    -moz-transform: rotate(-140deg);\n    -ms-transform: rotate(-140deg);\n    transform: rotate(-140deg);\n  }\n  50% {\n    box-shadow: inset #555 0 0 0 2px;\n  }\n  100% {\n    box-shadow: inset #555 0 0 0 8px;\n    -webkit-transform: rotate(140deg);\n    -moz-transform: rotate(140deg);\n    -ms-transform: rotate(140deg);\n    transform: rotate(140deg);\n  }\n}\n@keyframes loaderAnimate2 {\n  0% {\n    box-shadow: inset #999 0 0 0 17px;\n    transform: rotate(-140deg);\n  }\n  50% {\n    box-shadow: inset #999 0 0 0 2px;\n  }\n  100% {\n    box-shadow: inset #999 0 0 0 17px;\n    transform: rotate(140deg);\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_bootstrap-range-slider.scss",
    "content": "/* =============\n   Bootstrap Range slider\n============= */\n\n.slider{\n  .slider-horizontal {\n    margin: 10px 0;\n  }\n  .slider-vertical {\n    margin: 0 10px;\n  }\n}\n.slider-handle.round {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border: 1px solid #EFF2F7;\n  background: #fff;\n  cursor: pointer;\n}\n.slider-default {\n  .slider-selection {\n    background-image: none;\n    background-color: #909aa0;\n  }\n}\n\n.slider-primary {\n  .slider-selection {\n    background-image: none;\n    background-color: $primary;\n  }\n}\n\n.slider-success {\n  .slider-selection {\n    background-image: none;\n    background-color: $success;\n  }\n}\n\n.slider-info {\n  .slider-selection {\n    background-image: none;\n    background-color: $info;\n  }\n}\n\n.slider-warning {\n  .slider-selection {\n    background-image: none;\n    background-color: $warning;\n  }\n}\n\n.slider-danger {\n  .slider-selection {\n    background-image: none;\n    background-color: $danger;\n  }\n}\n\n\n.slider-custom {\n  .slider-selection {\n    background-image: none;\n    background-color: $custom;\n  }\n}\n\n.slider-pink {\n  .slider-selection {\n    background-image: none;\n    background-color: $pink;\n  }\n}\n\n.slider-purple {\n  .slider-selection {\n    background-image: none;\n    background-color: $purple;\n  }\n}\n\n.slider-inverse {\n  .slider-selection {\n    background-image: none;\n    background-color: $inverse;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_bootstrap-reset.scss",
    "content": "/* =============\n   Bootstrap-custom\n============= */\n.container {\n  width: auto;\n}\n\n.container-alt {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.breadcrumb {\n  background-color: transparent;\n  margin-bottom: 15px;\n  padding-top: 10px;\n  padding-left: 0;\n\n  a{\n    color: $muted;\n  }\n}\n\n.breadcrumb>li+li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"\\f105\" !important;\n  font-family: FontAwesome !important;\n}\n\n/* Dropdown */\n.dropdown-menu {\n  padding: 4px 0;\n  display: block;\n  visibility: hidden;\n  opacity: 0;\n  font-size: $body-font-size;\n  transition: all 300ms ease;\n  -moz-transition: all 300ms ease;\n  -webkit-transition: all 300ms ease;\n  -o-transition: all 300ms ease;\n  margin-top: 20px!important;\n  border: none;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n}\n\n.show>.dropdown-menu {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important;\n}\n\n.dropdown-item.active, .dropdown-item:active{\n  color: $dark;\n  text-decoration: none;\n  background-color: $light;\n}\n\n.dropdown-item {\n  padding: 6px 1.5rem;\n}\n\n.dropdown-lg {\n  width: 260px;\n}\n.arrow-none {\n  &:after {\n    border: none;\n    margin: 0;\n    display: none;\n  }\n}\n\n/* Close Icon */\n.close {\n  opacity: .6;\n}\n\n/* Background colors */\n.bg-custom {\n  background-color: $custom !important;\n}\n\n.bg-primary {\n  background-color: $primary !important;\n}\n\n.bg-success {\n  background-color: $success !important;\n}\n\n.bg-info {\n  background-color: $info !important;\n}\n\n.bg-warning {\n  background-color: $warning !important;\n}\n\n.bg-danger {\n  background-color: $danger !important;\n}\n\n.bg-muted {\n  background-color: $lightdark !important;\n}\n\n.bg-inverse {\n  background-color: $inverse !important;\n}\n\n.bg-purple {\n  background-color: $purple !important;\n}\n\n.bg-pink {\n  background-color: $pink !important;\n}\n\n.bg-white {\n  background-color: $white !important;\n}\n\n.bg-lightdark {\n  background-color: $lightdark !important;\n}\n\n/* Text colors */\n.text-custom {\n  color: $custom !important;\n}\n\n.text-white {\n  color: $white !important;\n}\n\n.text-danger {\n  color: $danger !important;\n}\n\n.text-muted {\n  color: $muted !important;\n}\n\n.text-primary {\n  color: $primary !important;\n}\n\n.text-warning {\n  color: $warning !important;\n}\n\n.text-success {\n  color: $success !important;\n}\n\n.text-info {\n  color: $info !important;\n}\n\n.text-inverse {\n  color: $inverse !important;\n}\n\n.text-pink {\n  color: $pink !important;\n}\n\n.text-purple {\n  color: $purple !important;\n}\n\n.text-dark {\n  color: $lightdark7 !important;\n}\n\n\n/* Labels */\n.label {\n  display: inline;\n  padding: 0.3em .6em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-white {\n  background-color: rgba($white,0.7);\n  color: $dark !important;\n}\n\n.label-default {\n  background-color: $custom;\n}\n\n.label-primary {\n  background-color: $primary;\n}\n\n.label-success {\n  background-color: $success;\n}\n\n.label-info {\n  background-color: $info;\n}\n\n.label-warning {\n  background-color: $warning;\n}\n\n.label-danger {\n  background-color: $danger;\n}\n\n.label-purple {\n  background-color: $purple;\n}\n\n.label-pink {\n  background-color: $pink;\n}\n\n.label-inverse {\n  background-color: $inverse;\n}\n\n.label-muted {\n  background-color: $muted;\n}\n\n\n/* Badge */\n.badge {\n  text-transform: uppercase;\n  padding: 5px 5px 3px 5px;\n  margin-top: 1px;\n  display: inline-block;\n  min-width: 10px;\n  font-weight: 700;\n  line-height: 1;\n  color: $white;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  border-radius: 10px;\n  background-color: $custom;\n}\n\n.badge-xs {\n  font-size: 9px;\n}\n\n.badge-xs, .badge-sm {\n  -webkit-transform: translate(0, -2px);\n  -ms-transform: translate(0, -2px);\n  -o-transform: translate(0, -2px);\n  transform: translate(0, -2px);\n}\n\n.badge-white {\n  background-color: rgba($white,0.7);\n  color: $dark !important;\n}\n\n.badge-primary {\n  background-color: $primary;\n}\n\n.badge-success {\n  background-color: $success;\n}\n\n.badge-info {\n  background-color: $info;\n}\n\n.badge-warning {\n  background-color: $warning;\n}\n\n.badge-danger {\n  background-color: $danger;\n}\n\n.badge-purple {\n  background-color: $purple;\n}\n\n.badge-pink {\n  background-color: $pink;\n}\n\n.badge-inverse {\n  background-color: $inverse;\n}\n\n/* List group */\n\n.list-group-item {\n  border: 1px solid $light5;\n}\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n  background-color: $custom;\n  border-color: $custom;\n}\n\n\n/* Dropcap */\n.dropcap {\n  font-size: 3.1em;\n}\n\n.dropcap, .dropcap-circle, .dropcap-square {\n  display: block;\n  float: left;\n  font-weight: 400;\n  line-height: 36px;\n  margin-right: 6px;\n  text-shadow: none;\n}\n\n/* Tooltips */\n\n.tooltip-inner {\n  border-radius: 1px;\n  padding: 6px 10px;\n}\n.jqstooltip {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  width: auto!important;\n  height: auto!important;\n}\n\n\n/* Popover */\n\n.popover {\n  font-family: inherit;\n  border-radius: 3px;\n\n  .popover-title {\n    background-color: transparent;\n    color: $custom;\n    font-weight: 600;\n    margin: 0;\n  }\n}\n\n/* Code */\ncode {\n  color: $primary;\n  background-color: $lightdark;\n  border-radius: 4px;\n}\n\n/* Pre */\npre{\n  background-color: $lightdark;\n  border: 1px solid #D4D8DA\n}\n\n/* Media */\n.media {\n  margin-bottom: 20px;\n\n  .media-heading {\n    font-weight: 600;\n    font-size: 16px;\n  }\n}\n.media:last-of-type {\n  margin-bottom: 0;\n}\n\n\n\n.badge,.btn,.label,.nav-user img,.contacts-list .avatar img,.morris-hover.morris-default-style,\n.conversation-list .chat-avatar img,.alert{\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n  box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_buttons.scss",
    "content": "/* =============\n   Buttons\n============= */\n.btn {\n  border-radius: 2px;\n  outline: none !important;\n  font-family: $font-primary;\n  font-size: 15px;\n\n  &:hover{\n    -webkit-box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n    box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n  }\n}\n\n.btn-md {\n  padding: 8px 16px;\n}\n\n.btn-primary, .btn-success,.btn-default, .btn-info, .btn-warning, .btn-danger, .btn-inverse, .btn-purple, .btn-pink {\n  color: $white !important;\n}\n.btn-default, .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open > .dropdown-toggle.btn-default {\n  background-color: $custom !important;\n  border: 1px solid $custom !important;\n}\n.btn-white, .btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .btn-white.focus, .btn-white:active, .btn-white:focus, .btn-white:hover, .open > .dropdown-toggle.btn-white {\n  border: 1px solid #eaeaea !important;\n  background-color: $white;\n  color: $inverse !important;\n\n  &:hover {\n    background-color: $light9;\n  }\n  &:focus {\n    background-color: $light9;\n  }\n  &:active {\n    background-color: $light9;\n  }\n}\n\n.btn-primary, .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .btn-primary.focus, .btn-primary:active, .btn-primary:focus, .btn-primary:hover, .open > .dropdown-toggle.btn-primary {\n  background-color: $primary !important;\n  border: 1px solid $primary !important;\n}\n\n.btn-success, .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .btn-success.focus, .btn-success:active, .btn-success:focus, .btn-success:hover, .open > .dropdown-toggle.btn-success {\n  background-color: $success !important;\n  border: 1px solid $success !important;\n}\n\n.btn-info, .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .btn-info.focus, .btn-info:active, .btn-info:focus, .btn-info:hover, .open > .dropdown-toggle.btn-info {\n  background-color: $info !important;\n  border: 1px solid $info !important;\n}\n\n.btn-warning, .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .btn-warning.focus, .btn-warning:active, .btn-warning:focus, .btn-warning:hover, .open > .dropdown-toggle.btn-warning {\n  background-color: $warning !important;\n  border: 1px solid $warning !important;\n}\n\n.btn-danger, .btn-danger:active, .btn-danger:focus, .btn-danger:hover, .btn-danger.active, .btn-danger.focus, .btn-danger:active, .btn-danger:focus, .btn-danger:hover, .open > .dropdown-toggle.btn-danger {\n  background-color: $danger !important;\n  border: 1px solid $danger !important;\n}\n\n.btn-inverse, .btn-inverse:hover, .btn-inverse:focus, .btn-inverse:active, .btn-inverse.active, .btn-inverse.focus, .btn-inverse:active, .btn-inverse:focus, .btn-inverse:hover, .open > .dropdown-toggle.btn-inverse {\n  background-color: $inverse !important;\n  border: 1px solid $inverse !important;\n  color: $white;\n}\n.btn-inverse.focus, .btn-inverse:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba($inverse,.5);\n  box-shadow: 0 0 0 2px rgba($inverse,.5);\n}\n.btn-purple, .btn-purple:hover, .btn-purple:focus, .btn-purple:active {\n  background-color: $purple !important;\n  border: 1px solid $purple !important;\n  color: $white;\n}\n.btn-purple.focus, .btn-purple:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba($purple,.5);\n  box-shadow: 0 0 0 2px rgba($purple,.5);\n}\n.btn-pink, .btn-pink:hover, .btn-pink:focus, .btn-pink:active {\n  background-color: $pink !important;\n  border: 1px solid $pink !important;\n  color: $white;\n}\n.btn-pink.focus, .btn-pink:focus {\n  -webkit-box-shadow: 0 0 0 2px rgba($pink,.5);\n  box-shadow: 0 0 0 2px rgba($pink,.5);\n}\n.open > .dropdown-toggle.btn-primary.btn-custom ,\n.open > .dropdown-toggle.btn-success.btn-custom ,\n.open > .dropdown-toggle.btn-info.btn-custom ,\n.open > .dropdown-toggle.btn-warning.btn-custom ,\n.open > .dropdown-toggle.btn-danger.btn-custom ,\n.open > .dropdown-toggle.btn-default.btn-custom {\n  border-width: 2px !important;\n  color: $white !important;\n}\n.open > .dropdown-toggle.btn-white.btn-custom {\n  border-width: 2px !important;\n}\n.btn-custom.btn-default {\n  color: $custom !important;\n}\n\n.btn-custom.btn-primary {\n  color: $primary !important;\n}\n\n.btn-custom.btn-success {\n  color: $success !important;\n}\n\n.btn-custom.btn-info {\n  color: $info !important;\n}\n\n.btn-custom.btn-warning {\n  color: $warning !important;\n}\n\n.btn-custom.btn-danger {\n  color: $danger !important;\n}\n\n.btn-custom.btn-inverse {\n  color: $inverse !important;\n}\n\n.btn-custom.btn-purple {\n  color: $purple !important;\n}\n.btn-custom.btn-white {\n  color: $inverse !important;\n\n  &:hover,&:focus,&:active {\n    color: $inverse !important;\n    background-color: $lightdark !important;\n  }\n}\n\n.btn-custom.btn-pink {\n  color: $pink !important;\n}\n\n.btn-rounded {\n  border-radius: 2em !important;\n  padding: 6px 20px;\n\n  .btn-label {\n    padding: 7px 15px 7px 20px;\n    margin-left: -20px;\n  }\n  .btn-label-right{\n    margin-right: -20px;\n    margin-left: 12px;\n  }\n}\n\n.btn-custom {\n  -moz-border-radius: 2px;\n  -moz-transition: all 400ms ease-in-out;\n  -o-transition: all 400ms ease-in-out;\n  -webkit-border-radius: 2px;\n  -webkit-transition: all 400ms ease-in-out;\n  background-color: transparent !important;\n  border-radius: 3px;\n  transition: all 400ms ease-in-out;\n  background-clip: inherit;\n  &:hover {\n    color: $white !important;\n  }\n  &:focus {\n    color: $white !important;\n  }\n}\n\n.btn-label {\n  background: rgba(0, 0, 0, 0.05);\n  display: inline-block;\n  padding: 7px 15px;\n  border-radius: 3px 0 0 3px;\n  margin: -7px -13px;\n  margin-right: 12px;\n}\n.btn-label-right {\n  margin-left: 12px;\n  margin-right: -13px;\n  border-radius: 0px 3px 3px 0px;\n}\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: none;\n}\n\n/* File Upload */\n\n.fileupload {\n  overflow: hidden;\n  position: relative;\n  input.upload {\n    cursor: pointer;\n    filter: alpha(opacity=0);\n    font-size: 20px;\n    margin: 0;\n    opacity: 0;\n    padding: 0;\n    position: absolute;\n    right: 0;\n    top: 0;\n  }\n}\n\n/* Social Buttons */\n\n.btn-facebook {\n  color: $white !important;\n  background-color: #3b5998 !important;\n}\n.btn-twitter {\n  color: $white !important;\n  background-color: #00aced !important;\n}\n.btn-linkedin {\n  color: $white !important;\n  background-color: #007bb6 !important;\n}\n.btn-dribbble {\n  color: $white !important;\n  background-color: #ea4c89 !important;\n}\n.btn-googleplus {\n  color: $white !important;\n  background-color: #dd4b39 !important;\n}\n.btn-instagram  {\n  color: $white !important;\n  background-color: #517fa4 !important;\n}\n.btn-pinterest  {\n  color: $white !important;\n  background-color: #cb2027 !important;\n}\n.btn-dropbox  {\n  color: $white !important;\n  background-color: #007ee5 !important;\n}\n.btn-flickr  {\n  color: $white !important;\n  background-color: #ff0084 !important;\n}\n.btn-tumblr  {\n  color: $white !important;\n  background-color: #32506d !important;\n}\n.btn-skype {\n  color: $white !important;\n  background-color: #00aff0 !important;\n}\n.btn-youtube  {\n  color: $white !important;\n  background-color: #bb0000 !important;\n}\n.btn-github  {\n  color: $white !important;\n  background-color: #171515 !important;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_calendar.scss",
    "content": "/* =============\n   Calendar\n============= */\n\n\n.calendar {\n  float: left;\n  margin-bottom: 0;\n}\n\n.fc-view {\n  margin-top: 30px;\n}\n.none-border {\n  .modal-footer {\n    border-top: none;\n  }\n}\n\n.fc-toolbar {\n  margin-bottom: 5px;\n  margin-top: 15px;\n  h2 {\n    font-size: 18px;\n    font-weight: 600;\n    line-height: 30px;\n    text-transform: uppercase;\n  }\n}\n\n.fc-day {\n  background: $white;\n}\n\n.fc-toolbar .fc-state-active, .fc-toolbar .ui-state-active,\n.fc-toolbar button:focus, .fc-toolbar button:hover,\n.fc-toolbar .ui-state-hover {\n  z-index: 0;\n}\n\n.fc-widget-header {\n  border: 1px solid $light5;\n}\n\n.fc-widget-content {\n  border: 1px solid $light5;\n}\n\n.fc {\n  th.fc-widget-header {\n    background: $light5;\n    font-size: 14px;\n    line-height: 20px;\n    padding: 10px 0;\n    text-transform: uppercase;\n  }\n}\n\n.fc-button {\n  background: $white;\n  border: 1px solid $light5;\n  color: #555555;\n  text-transform: capitalize;\n}\n\n.fc-text-arrow {\n  font-family: inherit;\n  font-size: 16px;\n}\n\n.fc-state-hover {\n  background: #F5F5F5;\n}\n\n.fc-state-highlight {\n  background: #f0f0f0;\n}\n\n.fc-cell-overlay {\n  background: #f0f0f0;\n}\n\n.fc-unthemed {\n  .fc-today {\n    background: $white;\n  }\n}\n\n.fc-event {\n  border-radius: 2px;\n  border: none;\n  cursor: move;\n  font-size: 13px;\n  margin: 5px 7px;\n  padding: 5px 5px;\n  text-align: center;\n}\n\n.external-event {\n  color: $white;\n  cursor: move;\n  margin: 10px 0;\n  padding: 6px 10px;\n  font-size: 14px;\n}\n\n.fc-basic-view {\n  td.fc-week-number {\n    span {\n      padding-right: 5px;\n    }\n  }\n  td.fc-day-number {\n    padding-right: 5px;\n  }\n  .fc-content {\n    color: $white;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_carousel.scss",
    "content": "/* =============\n   Carousel\n============= */\n\n.carousel-control {\n  width: 10%;\n\n  span {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n    font-size: 30px;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n/* Owl */\n.slider-bg {\n  background-size: cover !important;\n  padding: 5.5% 4.5%;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_charts.scss",
    "content": "/* =============\n   Charts\n============= */\n\n/* Morris chart */\n.morris-hover.morris-default-style {\n  border-radius: 5px;\n  padding: 10px 12px;\n  background: $white;\n  border: none;\n\n  .morris-hover-point {\n    color: $dark !important;\n  }\n}\n\n.chart-detail-list {\n  li {\n    margin: 0 10px;\n\n    h5{\n      font-size: 15px;\n    }\n  }\n}\n\n.pieLabel {\n  div {\n    font-size: 14px !important;\n  }\n}\n\n.jqstooltip {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.chart {\n  position: relative;\n  display: inline-block;\n  width: 110px;\n  height: 110px;\n  margin-top: 20px;\n  margin-bottom: 20px;\n  text-align: center;\n  canvas {\n    position: absolute;\n    top: 0;\n    left: 0;\n  }\n}\n\n.chart.chart-widget-pie {\n  margin-top: 5px;\n  margin-bottom: 5px;\n}\n\n.percent {\n  display: inline-block;\n  line-height: 110px;\n  z-index: 2;\n  font-weight: 600;\n  font-size: 18px;\n  color: $dark;\n\n  &:after {\n    content: '%';\n    margin-left: 0.1em;\n    font-size: .8em;\n  }\n}\n\n\n#flotTip {\n  padding: 8px 12px;\n  background-color: #36404a;\n  z-index: 100;\n  color: #ffffff;\n  opacity: 0.9;\n  font-size: 13px;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n}\n\n.legend {\n  tr {\n    height: 20px;\n  }\n}\n.legendLabel {\n  padding-left: 5px !important;\n  line-height: 10px;\n  padding-right: 10px;\n}\n\n/* Sparkline chart */\n.jqstooltip {\n  background-color: $dark !important;\n  padding: 5px 10px !important;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-color: $dark !important;\n}\n.jqsfield {\n  font-size: 12px !important;\n  line-height: 18px !important;\n}\n\n/* C3 chart */\n.c3-tooltip td>span {\n  background: $dark;\n}\n.c3-tooltip td {\n  border-left: none;\n}\n.c3-tooltip {\n  box-shadow: 0 0 8px 0 #777;\n  opacity: 1;\n}\n.c3-chart-arcs-title {\n  font-size: 18px;\n  font-weight: 600;\n}\n.c3-tooltip tr {\n  border: none !important;\n}\n.c3-tooltip th {\n  background-color: $dark;\n}\n\n\n/* Chartist chart */\n.ct-golden-section:before {\n  float: none;\n}\n.ct-chart {\n\n  height: 300px;\n\n  .ct-label {\n    fill: #a3afb7;\n    color: #a3afb7;\n    font-size: 12px;\n    line-height: 1;\n  }\n}\n.ct-chart.simple-pie-chart-chartist {\n  .ct-label {\n    color: $white;\n    fill: $white;\n    font-size: 16px;\n  }\n}\n.ct-chart .ct-series.ct-series-a .ct-bar, .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point, .ct-chart .ct-series.ct-series-a .ct-slice-donut {\n  stroke: $primary;\n}\n.ct-chart .ct-series.ct-series-b .ct-bar, .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point, .ct-chart .ct-series.ct-series-b .ct-slice-donut {\n  stroke: $pink;\n}\n.ct-chart .ct-series.ct-series-c .ct-bar, .ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point, .ct-chart .ct-series.ct-series-c .ct-slice-donut {\n  stroke: $info;\n}\n.ct-chart .ct-series.ct-series-d .ct-bar, .ct-chart .ct-series.ct-series-d .ct-line, .ct-chart .ct-series.ct-series-d .ct-point, .ct-chart .ct-series.ct-series-d .ct-slice-donut {\n  stroke: $custom;\n}\n.ct-chart .ct-series.ct-series-e .ct-bar, .ct-chart .ct-series.ct-series-e .ct-line, .ct-chart .ct-series.ct-series-e .ct-point, .ct-chart .ct-series.ct-series-e .ct-slice-donut {\n  stroke: $dark;\n}\n.ct-chart .ct-series.ct-series-f .ct-bar, .ct-chart .ct-series.ct-series-f .ct-line, .ct-chart .ct-series.ct-series-f .ct-point, .ct-chart .ct-series.ct-series-f .ct-slice-donut {\n  stroke: $purple;\n}\n.ct-chart .ct-series.ct-series-g .ct-bar, .ct-chart .ct-series.ct-series-g .ct-line, .ct-chart .ct-series.ct-series-g .ct-point, .ct-chart .ct-series.ct-series-g .ct-slice-donut {\n  stroke: $success;\n}\n.ct-series-a .ct-area, .ct-series-a .ct-slice-pie {\n  fill: $primary;\n}\n.ct-series-b .ct-area, .ct-series-b .ct-slice-pie {\n  fill: $pink;\n}\n.ct-series-c .ct-area, .ct-series-c .ct-slice-pie {\n  fill: $info;\n}\n.ct-series-d .ct-area, .ct-series-d .ct-slice-pie {\n  fill: $custom;\n}\n\n.chartist-tooltip {\n  position: absolute;\n  display: inline-block;\n  opacity: 0;\n  min-width: 10px;\n  padding: 2px 10px;\n  border-radius: 3px;\n  background: $dark;\n  color: $white;\n  text-align: center;\n  pointer-events: none;\n  z-index: 1;\n  -webkit-transition: opacity .2s linear;\n  -moz-transition: opacity .2s linear;\n  -o-transition: opacity .2s linear;\n  transition: opacity .2s linear;\n}\n\n.chartist-tooltip.tooltip-show {\n  opacity: 1;\n}\n\n/* Circliful charts */\n.circliful-chart {\n  margin: 0 auto;\n}\n.circle-text, .circle-info, .circle-text-half, .circle-info-half {\n  font-size: 12px;\n  font-weight: 600;\n}\n\n\n/* Ricksaw Charts */\n#legend {\n  background: white;\n  position: absolute;\n  top: 0;\n  right: 15px;\n}\n#legend .line {\n  color: #333;\n}\n\n.rickshaw_graph {\n  svg {\n    max-width: 100%;\n  }\n}\n\n.rickshaw_legend  {\n  .label {\n    font-family: inherit;\n    letter-spacing: 0.01em;\n    font-weight: 500;\n    box-shadow: none;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_checkbox-radio.scss",
    "content": "/* =============\n   Checkbox and Radios\n============= */\n\n\n/* Checkbox */\n\ninput[type=\"checkbox\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: relative;\n  border: none;\n  margin-bottom: -4px;\n  -webkit-appearance: none;\n  appearance: none;\n  cursor: pointer;\n}\ninput[type=\"checkbox\"]:focus,\n.checkbox input[type=\"checkbox\"]:focus,\n.checkbox-inline input[type=\"checkbox\"]:focus {\n  outline: none;\n}\n\ninput[type=\"checkbox\"]:after,\n.checkbox input[type=\"checkbox\"]:after,\n.checkbox-inline input[type=\"checkbox\"]:after {\n  content: \"\";\n  display: block;\n  width: 18px;\n  height: 18px;\n  margin-top: -2px;\n  margin-right: 5px;\n  border: 2px solid lighten($dark,15%);\n  border-radius: 2px;\n  -webkit-transition: 240ms;\n  -o-transition: 240ms;\n  transition: 240ms;\n}\n\ninput[type=\"checkbox\"]:checked:before,\n.checkbox input[type=\"checkbox\"]:checked:before,\n.checkbox-inline input[type=\"checkbox\"]:checked:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 6px;\n  display: table;\n  width: 6px;\n  height: 12px;\n  border: 2px solid $white;\n  border-top-width: 0;\n  border-left-width: 0;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\ninput[type=\"checkbox\"]:checked:after,\n.checkbox input[type=\"checkbox\"]:checked:after,\n.checkbox-inline input[type=\"checkbox\"]:checked:after {\n  background-color: $custom;\n  border-color: $custom;\n}\ninput[type=\"checkbox\"]:disabled {\n  opacity: 0.5;\n}\ninput[type=\"checkbox\"]:disabled:after,\n.checkbox input[type=\"checkbox\"]:disabled:after,\n.checkbox-inline input[type=\"checkbox\"]:disabled:after {\n  border-color: $dark;\n}\ninput[type=\"checkbox\"]:disabled:checked:after,\n.checkbox input[type=\"checkbox\"]:disabled:checked:after,\n.checkbox-inline input[type=\"checkbox\"]:disabled:checked:after {\n  background-color: $dark;\n  border-color: transparent;\n}\n\n.checkbox.checkbox-circle input[type=\"checkbox\"]:after, .checkbox-inline.checkbox-circle input[type=\"checkbox\"]:after {\n  border-radius: 50%;\n}\n\n.checkbox.checkbox-circle input[type=\"checkbox\"]:checked:before, .checkbox-inline.checkbox-circle input[type=\"checkbox\"]:checked:before {\n  top: 2px;\n  left: 7px;\n  width: 4px;\n  height: 8px;\n}\n\n.checkbox.checkbox-custom input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-custom input[type=\"checkbox\"]:checked:after {\n  background-color: $white;\n  border-color: $dark;\n}\n.checkbox.checkbox-custom input[type=\"checkbox\"]:checked:before,\n.checkbox-inline.checkbox-custom input[type=\"checkbox\"]:checked:before {\n  border-color: $dark;\n}\n\n.checkbox.checkbox-primary input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-primary input[type=\"checkbox\"]:checked:after {\n  background-color: $primary;\n  border-color: $primary;\n}\n\n.checkbox.checkbox-success input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-success input[type=\"checkbox\"]:checked:after {\n  background-color: $success;\n  border-color: $success;\n}\n\n.checkbox.checkbox-info input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-info input[type=\"checkbox\"]:checked:after {\n  background-color: $info;\n  border-color: $info;\n}\n\n.checkbox.checkbox-warning input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-warning input[type=\"checkbox\"]:checked:after {\n  background-color: $warning;\n  border-color: $warning;\n}\n\n.checkbox.checkbox-danger input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-danger input[type=\"checkbox\"]:checked:after {\n  background-color: $danger;\n  border-color: $danger;\n}\n\n.checkbox.checkbox-purple input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-purple input[type=\"checkbox\"]:checked:after {\n  background-color: $purple;\n  border-color: $purple;\n}\n\n.checkbox.checkbox-pink input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-pink input[type=\"checkbox\"]:checked:after {\n  background-color: $pink;\n  border-color: $pink;\n}\n\n.checkbox.checkbox-inverse input[type=\"checkbox\"]:checked:after,\n.checkbox-inline.checkbox-inverse input[type=\"checkbox\"]:checked:after {\n  background-color: $dark;\n  border-color: $dark;\n}\n\n\n/* Radio */\n\n.radio label,\n.radio-inline label,\n.checkbox label,\n.checkbox-inline label {\n  padding-left: 0;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"radio\"],\n.checkbox-inline input[type=\"radio\"],\n.radio input[type=\"checkbox\"],\n.radio-inline input[type=\"checkbox\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  margin-left: 0;\n}\ninput[type=\"radio\"],\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"] {\n  position: relative;\n  margin-top: 6px;\n  margin-right: 4px;\n  vertical-align: top;\n  border: none;\n  background-color: transparent;\n  -webkit-appearance: none;\n  appearance: none;\n  cursor: pointer;\n}\ninput[type=\"radio\"]:focus,\n.radio input[type=\"radio\"]:focus,\n.radio-inline input[type=\"radio\"]:focus {\n  outline: none;\n}\ninput[type=\"radio\"]:before,\n.radio input[type=\"radio\"]:before,\n.radio-inline input[type=\"radio\"]:before,\ninput[type=\"radio\"]:after,\n.radio input[type=\"radio\"]:after,\n.radio-inline input[type=\"radio\"]:after {\n  content: \"\";\n  display: block;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  -webkit-transition: 240ms;\n  -o-transition: 240ms;\n  transition: 240ms;\n}\ninput[type=\"radio\"]:before,\n.radio input[type=\"radio\"]:before,\n.radio-inline input[type=\"radio\"]:before {\n  position: absolute;\n  left: 0;\n  top: -3px;\n  background-color: $dark;\n  -webkit-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n}\ninput[type=\"radio\"]:after,\n.radio input[type=\"radio\"]:after,\n.radio-inline input[type=\"radio\"]:after {\n  position: relative;\n  top: -3px;\n  border: 2px solid lighten($dark,15%);\n}\ninput[type=\"radio\"]:checked:before,\n.radio input[type=\"radio\"]:checked:before,\n.radio-inline input[type=\"radio\"]:checked:before {\n  -webkit-transform: scale(0.5);\n  -ms-transform: scale(0.5);\n  -o-transform: scale(0.5);\n  transform: scale(0.5);\n}\ninput[type=\"radio\"]:disabled:checked:before,\n.radio input[type=\"radio\"]:disabled:checked:before,\n.radio-inline input[type=\"radio\"]:disabled:checked:before {\n  background-color: lighten($dark,15%);\n}\ninput[type=\"radio\"]:checked:after,\n.radio input[type=\"radio\"]:checked:after,\n.radio-inline input[type=\"radio\"]:checked:after {\n  border-color: $dark;\n}\ninput[type=\"radio\"]:disabled:after,\n.radio input[type=\"radio\"]:disabled:after,\n.radio-inline input[type=\"radio\"]:disabled:after,\ninput[type=\"radio\"]:disabled:checked:after,\n.radio input[type=\"radio\"]:disabled:checked:after,\n.radio-inline input[type=\"radio\"]:disabled:checked:after {\n  border-color: lighten($dark,15%);\n}\n\n\n// Custom radio\n.radio.radio-custom input[type=\"radio\"]:checked:after,\n.radio-inline.radio-custom input[type=\"radio\"]:checked:after {\n  border-color: $custom;\n}\n\n.radio.radio-custom input[type=\"radio\"]:before,\n.radio-inline.radio-custom input[type=\"radio\"]:before {\n  background-color: $custom;\n}\n\n//Primary radio\n.radio.radio-primary input[type=\"radio\"]:checked:after,\n.radio-inline.radio-primary input[type=\"radio\"]:checked:after {\n  border-color: $primary;\n}\n\n.radio.radio-primary input[type=\"radio\"]:before,\n.radio-inline.radio-primary input[type=\"radio\"]:before {\n  background-color: $primary;\n}\n\n\n//Success radio\n.radio.radio-success input[type=\"radio\"]:checked:after,\n.radio-inline.radio-success input[type=\"radio\"]:checked:after {\n  border-color: $success;\n}\n\n.radio.radio-success input[type=\"radio\"]:before,\n.radio-inline.radio-success input[type=\"radio\"]:before {\n  background-color: $success;\n}\n\n//Info radio\n.radio.radio-info input[type=\"radio\"]:checked:after,\n.radio-inline.radio-info input[type=\"radio\"]:checked:after {\n  border-color: $info;\n}\n\n.radio.radio-info input[type=\"radio\"]:before,\n.radio-inline.radio-info input[type=\"radio\"]:before {\n  background-color: $info;\n}\n\n//warning radio\n.radio.radio-warning input[type=\"radio\"]:checked:after,\n.radio-inline.radio-warning input[type=\"radio\"]:checked:after {\n  border-color: $warning;\n}\n\n.radio.radio-warning input[type=\"radio\"]:before,\n.radio-inline.radio-warning input[type=\"radio\"]:before {\n  background-color: $warning;\n}\n\n//Danger radio\n.radio.radio-danger input[type=\"radio\"]:checked:after,\n.radio-inline.radio-danger input[type=\"radio\"]:checked:after {\n  border-color: $danger;\n}\n\n.radio.radio-danger input[type=\"radio\"]:before,\n.radio-inline.radio-danger input[type=\"radio\"]:before {\n  background-color: $danger;\n}\n\n//Purrple radio\n.radio.radio-purple input[type=\"radio\"]:checked:after,\n.radio-inline.radio-purple input[type=\"radio\"]:checked:after {\n  border-color: $purple;\n}\n\n.radio.radio-purple input[type=\"radio\"]:before,\n.radio-inline.radio-purple input[type=\"radio\"]:before {\n  background-color: $purple;\n}\n\n//Pink radio\n.radio.radio-pink input[type=\"radio\"]:checked:after,\n.radio-inline.radio-pink input[type=\"radio\"]:checked:after {\n  border-color: $pink;\n}\n\n.radio.radio-pink input[type=\"radio\"]:before,\n.radio-inline.radio-pink input[type=\"radio\"]:before {\n  background-color: $pink;\n}\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_common.scss",
    "content": "/* =============\n   Common\n============= */\n\nbody {\n  background: $body-bg;\n  margin: 0;\n  overflow-x: hidden;\n  font-family: $font-primary;\n  font-size: $body-font-size;\n}\nhtml {\n  position: relative;\n  min-height: 100%;\n  background: $body-bg;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: $dark;\n  margin: 10px 0;\n  font-weight: normal;\n}\n\nh1 {\n  line-height: 43px;\n}\n\nh2 {\n  line-height: 35px;\n}\n\nh3 {\n  line-height: 30px;\n  small {\n    color: $lightdark4;\n  }\n}\n\nh4 {\n  line-height: 22px;\n  small {\n    color: $lightdark4;\n  }\n}\n\nh5 {\n  font-size: 15px;\n  small {\n    color: $lightdark4;\n  }\n}\n\np {\n  line-height: 1.6;\n  margin-bottom: 10px;\n}\n\n* {\n  outline: none !important;\n}\n\nb {\n  font-weight: 500;\n}\n\na {\n  &:hover {\n    outline: 0;\n    text-decoration: none;\n  }\n  &:active {\n    outline: 0;\n    text-decoration: none;\n  }\n  &:focus {\n    outline: 0;\n    text-decoration: none;\n  }\n}\n\n\n/* Footer */\n.footer {\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  bottom: 0;\n  color: #58666e;\n  text-align:left !important;\n  padding: 20px 30px;\n  position: absolute;\n  right: 0;\n  left: 240px;\n  font-size: 13px;\n}\n\n#wrapper {\n  height: $height;\n  overflow: hidden;\n  width: $width;\n}\n\n.page {\n  bottom: 0;\n  left: 0;\n  right: 0;\n  top: 0;\n}\n\n/* Page titles */\n.page-title {\n  font-size: 20px;\n  font-weight: 400;\n  margin-bottom: 12px;\n  margin-top: 7px;\n}\n.page-title+.breadcrumb {\n  font-size: 0.9rem;\n}\n\n.page-title-alt {\n  margin-bottom: 23px;\n  margin-top: 10px;\n}\n.page-header {\n  border-bottom: 1px solid #DBDDDE;\n}\n.header-title {\n  font-size: 16px;\n  font-weight: 400;\n  letter-spacing: 0.02em;\n  line-height: 16px;\n  margin-bottom: 8px;\n}\n\n.social-links {\n  li {\n    a {\n      -webkit-border-radius: 50%;\n      background: #EFF0F4;\n      border-radius: 50%;\n      color: #7A7676;\n      display: inline-block;\n      height: 30px;\n      line-height: 30px;\n      text-align: center;\n      width: 30px;\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_contact.scss",
    "content": "/* =============\n  Contact\n============= */\n\n.contact-search {\n  .btn-white {\n    position: absolute;\n    top: 1px;\n    right: 16px;\n    background-color: transparent !important;\n    border: none !important;\n    font-size: 16px;\n    box-shadow: none !important;\n    outline: none !important;\n    color: $muted;\n  }\n}\n\n.contact-card {\n  position: relative;\n\n  &:hover {\n    .contact-action {\n      display: block;\n    }\n  }\n\n  img{\n    width: 80px;\n    height: 80px;\n  }\n  .member-info {\n    padding-left: 100px;\n    padding-bottom: 20px;\n\n    h4,p{\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      width: 100%;\n      white-space: nowrap;\n    }\n  }\n  .contact-action {\n    position: absolute;\n    right: 0;\n    top: 0;\n    display: none;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_countdown.scss",
    "content": "/* =============\n   Count Down\n============= */\n\n\n.home-wrapper {\n  margin: 10% 0;\n}\n\n.home-text {\n  font-weight: 500;\n}\n\n.u-countdown {\n  margin-top: 40px;\n  text-align: center;\n  color: $white;\n\n  div {\n    display: inline-block;\n    span {\n      display: block;\n      width: 150px;\n      &:first-child {\n        font-size: 3em;\n        font-weight: 500;\n        height: 48px;\n        line-height: 48px;\n      }\n      &:last-child {\n        font-size: 0.9em;\n        height: 25px;\n        line-height: 25px;\n      }\n    }\n  }\n}\n\n.u-countdown > * {\n  text-align: center;\n}\n\n.cd-text {\n  font-size: 15px;\n  line-height: 24px;\n  font-style: italic;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_email.scss",
    "content": "/* =============\n   Email\n============= */\n\n\n.mails {\n  a {\n    color: $lightdark7;\n  }\n\n  td {\n    vertical-align: middle !important;\n    position: relative;\n\n    &:last-of-type {\n      width: 100px;\n      padding-right: 20px;\n    }\n  }\n\n  tr {\n    &:hover {\n      .text-white {\n        display: none;\n      }\n    }\n  }\n\n  .mail-select {\n    padding: 12px 20px;\n    min-width: 134px;\n  }\n  .checkbox {\n    display: inline-block;\n  }\n}\n\n.mail-list {\n  .list-group-item {\n    background-color: transparent;\n    color: $dark;\n    font-size: 0.95rem;\n\n    &:hover {\n      background-color: $lightdark;\n    }\n    &:focus {\n      background-color: $lightdark;\n    }\n  }\n  .list-group-item.active{\n    color: $danger;\n  }\n}\n\n.unread {\n  a{\n    font-weight: 500;\n    color: $lightdark4;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_faq.scss",
    "content": "/* =============\n  FAQ\n============= */\n\n.faq-box {\n  padding: 24px 0;\n  border-bottom: 1px solid darken($white,5%);\n\n  .question {\n    font-size: 16px;\n    margin-top: 0;\n  }\n  .answer {\n    color: $muted;\n    margin-bottom: 0;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_form-advanced.scss",
    "content": "/* =============\n   Form Advanced\n============= */\n.error {\n  color: $danger;\n  font-size: 12px;\n  font-weight: 500;\n}\n\n/* Form validation */\n.parsley-error {\n  border-color: $danger !important;\n}\n.parsley-errors-list {\n  display: none;\n  margin: 0;\n  padding: 0;\n}\n.parsley-errors-list.filled {\n  display: block;\n}\n.parsley-errors-list > li {\n  font-size: 12px;\n  list-style: none;\n  color: #f6504d;\n}\n/* Datepicker */\n.datepicker {\n  padding: 8px;\n  th {\n    font-size: 14px !important;\n  }\n}\n.datepicker-dropdown.dropdown-menu {\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important;\n}\n\n.daterangepicker.show-calendar,.bootstrap-timepicker-widget.open{\n  visibility: visible;\n  opacity: 1;\n  margin-top: 0 !important;\n}\n\n.datepicker table tr td.today, .datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled, .datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.selected, .datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.disabled, .datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td span.active, .datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled, .datepicker table tr td span.active.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td span.active:hover, .datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover, .datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:active, .datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active, .datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active, .datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active, .datepicker table tr td span.active.disabled:hover.active,\n.datepicker table tr td span.active.disabled, .datepicker table tr td span.active:hover.disabled,\n.datepicker table tr td span.active.disabled.disabled, .datepicker table tr td span.active.disabled:hover.disabled,\n.datepicker table tr td span.active[disabled], .datepicker table tr td span.active:hover[disabled],\n.datepicker table tr td span.active.disabled[disabled], .datepicker table tr td span.active.disabled:hover[disabled] {\n  background-color: $custom;\n}\n.datepicker table tr td.active, .datepicker table tr td.active:hover, .datepicker table tr td.active.disabled,\n.datepicker table tr td.active.disabled:hover {\n  background-color: $custom !important;\n  background-image: none;\n  box-shadow: none;\n  text-shadow: none;\n}\n.datepicker thead tr:first-child th:hover, .datepicker tfoot tr th:hover{\n  background-color: $light-alt;\n}\n.datepicker-inline {\n  border: 2px solid $light;\n}\n.daterangepicker td.active, .daterangepicker td.active:hover {\n  background-color: $primary;\n  border-color: $primary;\n}\n.daterangepicker .input-mini.active {\n  border: 1px solid #AAAAAA;\n}\n.daterangepicker .ranges li {\n  border-radius: 2px;\n  color: $dark;\n  font-weight: 600;\n  font-size: 12px;\n}\n.daterangepicker select.hourselect, .daterangepicker select.minuteselect,\n.daterangepicker select.secondselect, .daterangepicker select.ampmselect{\n  border: 1px solid #e3e3e3;\n  padding: 2px;\n  width: 60px;\n}\n.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {\n  background-color: $primary;\n  border: 1px solid $primary;\n  color: $white;\n}\n\n\n.search-input {\n  margin-bottom: 10px;\n}\n\n.ms-selectable {\n  box-shadow: none;\n  outline: none !important;\n}\n\n.ms-container {\n  .ms-list.ms-focus {\n    box-shadow: none;\n  }\n  .ms-selectable {\n    li.ms-hover {\n      background-color: $primary;\n    }\n  }\n  .ms-selection {\n    li.ms-hover {\n      background-color: $primary;\n    }\n  }\n}\n\n/* Summernote editor */\n.note-btn-group {\n  .dropdown-menu {\n    > li {\n      > a {\n        display: block;\n        padding: 3px 20px;\n        clear: both;\n        font-weight: normal;\n        line-height: 1.42857143;\n        color: #333;\n        white-space: nowrap;\n\n        &:hover {\n          color: $custom;\n        }\n      }\n    }\n  }\n}\n\n.note-image-popover,.note-air-popover,.note-link-popover {\n  display: none;\n\n  .dropdown-toggle::after {\n    margin-left: 0;\n  }\n}\n\n.note-icon-caret {\n  display: none;\n}\n\n.note-popover .popover-content .note-color .dropdown-toggle,\n.note-editor .panel-heading.note-toolbar .note-color .dropdown-toggle {\n  width: 20px;\n  padding-left: 1px;\n}\n.note-editor {\n  border: 1px solid $light !important;\n  position: relative;\n\n  .note-toolbar {\n    background-color: darken($white,8%);\n    border-bottom: 1px solid darken($white,12%);\n    margin: 0;\n  }\n  .note-statusbar {\n    background-color: $white;\n    .note-resizebar {\n      border-top: none;\n      height: 15px;\n      padding-top: 3px;\n    }\n  }\n}\n\n.note-popover {\n  .popover {\n    .popover-content {\n      padding: 5px 0 10px 5px;\n    }\n  }\n}\n\n.note-toolbar {\n  padding: 5px 0 10px 5px;\n}\n\n.code-edit-wrap {\n  padding: 0 !important;\n}\n\n.cm-s-ambiance {\n  .CodeMirror-linenumber {\n    color: #bcbcbc;\n  }\n  .CodeMirror-gutters {\n    background-color: $inverse !important;\n    box-shadow: none;\n  }\n}\n\n.cm-s-ambiance.CodeMirror {\n  background-color: $inverse !important;\n  box-shadow: none;\n}\n/* Timepicker */\n.bootstrap-timepicker-widget {\n  table {\n    td {\n      a {\n        &:hover {\n          background-color: transparent;\n          border-color: transparent;\n          border-radius: 4px;\n          color: $primary;\n          text-decoration: none;\n        }\n      }\n    }\n  }\n}\n\n.editor-horizontal {\n  .popover-content {\n    padding: 9px 30px;\n  }\n}\n\n/* Bootstrap select */\n\n.bootstrap-select.show>.dropdown-menu>.dropdown-menu {\n  display: block;\n}\n\n.bootstrap-select > .dropdown-menu > .dropdown-menu li.hidden{\n  display:none;\n}\n\n.bootstrap-select > .dropdown-menu > .dropdown-menu li a{\n  display: block;\n  width: 100%;\n  padding: 3px 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: $dark;\n  text-align: inherit;\n  white-space: nowrap;\n  background: 0 0;\n  border: 0;\n}\n.bootstrap-select .check-mark::after {\n  content: \"\\f299\";\n  font-family: \"Material Design Iconic Font\";\n}\n\n.bootstrap-select button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\n  margin-top: 0;\n}\n\n.bootstrap-select.show {\n  .dropdown-menu.open {\n    .dropdown-menu.inner {\n      visibility: visible;\n      opacity: 1;\n      margin-top: 0 !important;\n    }\n  }\n}\n\n\n/* Dropzone */\n.dropzone {\n  min-height: 230px;\n  border: 2px dashed rgba($dark,0.3);\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  background: white;\n  border-radius: 6px;\n\n  .dz-message {\n    font-size: 30px;\n  }\n}\n\n/* X-Editable */\n.editable-click, a.editable-click, a.editable-click:hover{\n  border: none;\n}\n\n\n/* AUTOCOMPLETE */\n.autocomplete-suggestions {\n  border: 1px solid #f9f9f9;\n  background: $white;\n  cursor: default;\n  overflow: auto;\n  -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15);\n  -moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15);\n  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.autocomplete-suggestion {\n  padding: 2px 5px;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.autocomplete-no-suggestion {\n  padding: 2px 5px;\n}\n\n.autocomplete-selected {\n  background: rgba($muted,0.3);\n  cursor: pointer;\n}\n\n.autocomplete-suggestions strong {\n  font-weight: bold;\n  color: $dark;\n}\n\n.autocomplete-group {\n  padding: 2px 5px;\n}\n\n.autocomplete-group strong {\n  font-weight: bold;\n  font-size: 16px;\n  color: $dark;\n  display: block;\n}\n\n/* Image crop */\n\n.img-container,\n.img-preview {\n  background-color: #f7f7f7;\n  overflow: hidden;\n  width: 100%;\n  text-align: center;\n}\n\n.img-container {\n  min-height: 200px;\n  max-height: 466px;\n  margin-bottom: 20px;\n}\n\n@media (min-width: 768px) {\n  .img-container {\n    min-height: 466px;\n  }\n}\n\n.img-container > img {\n  max-width: 100%;\n}\n\n.docs-preview {\n  margin-right: -15px;\n  margin-bottom: 10px;\n}\n\n.img-preview {\n  float: left;\n  margin-right: 10px;\n  margin-bottom: 10px;\n}\n\n.img-preview > img {\n  max-width: 100%;\n}\n\n#showDataURL {\n  img {\n    width: 100%;\n  }\n}\n\n/* Bootstrap tagsinput */\n.bootstrap-tagsinput {\n  box-shadow: none;\n  padding: 3px 7px 6px;\n  border: 1px solid #e3e3e3;\n\n  .label-info {\n    background-color: $custom !important;\n    display: inline-block;\n    padding: 5px;\n  }\n}\n/* Multiple */\n.ms-container {\n  background: transparent url('../images/multiple-arrow.png') no-repeat 50% 50%;\n\n  .ms-list {\n    box-shadow: none;\n    border: 1px solid #e3e3e3;\n  }\n  .ms-list.ms-focus {\n    box-shadow: none;\n    border: 1px solid #aaaaaa;\n  }\n  .ms-selectable {\n    li.ms-elem-selectable{\n      border: none;\n      padding: 5px 10px;\n    }\n  }\n  .ms-selection {\n    li.ms-elem-selection{\n      border: none;\n      padding: 5px 10px;\n    }\n  }\n}\n/* Select 2 */\n.select2-container {\n\n  .select2-selection--single {\n    border: 1px solid #E3E3E3 !important;\n    height: 38px !important;\n\n    .select2-selection__rendered {\n      line-height: 36px !important;\n      padding-left: 12px !important;\n    }\n\n    .select2-selection__arrow {\n      height: 34px;\n      width: 34px;\n      right: 3px;\n\n      b{\n        border-color: #999 transparent transparent transparent;\n        border-width: 6px 6px 0 6px;\n      }\n    }\n  }\n}\n\n.select2-container--open {\n  .select2-selection--single {\n\n    .select2-selection__arrow {\n\n      b{\n        border-color: transparent transparent #999 transparent !important;\n        border-width: 0 6px 6px 6px !important;\n      }\n    }\n  }\n}\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: $custom;\n}\n.select2-results__option {\n  padding: 6px 12px;\n}\n\n.select2-dropdown {\n  border: 1px solid #e3e3e3 !important;\n  padding-top: 5px;\n  box-shadow: 0 2px 2px rgba(0, 0, 0, .15);\n}\n.select2-search {\n  input{\n    border: 1px solid #e3e3e3 !important;\n  }\n}\n\n.select2-container .select2-selection--multiple {\n  min-height: 38px !important;\n  border: 1px solid #e3e3e3 !important;\n\n  .select2-selection__rendered {\n    padding: 2px 10px;\n  }\n  .select2-search__field {\n    margin-top: 7px;\n    border: 0 !important;\n  }\n  .select2-selection__choice {\n    background-color: #f5f5f5;\n    border: 1px solid #e3e3e3;\n    border-radius: 1px;\n    padding: 0 7px;\n  }\n}\n\n/* Bootstrap-select */\n.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) {\n  width: 100% !important;\n}\n.bootstrap-select  {\n  .dropdown-toggle {\n    &:focus {\n      outline: none !important;\n    }\n  }\n  .glyphicon {\n    padding-right: 6px;\n  }\n}\n\n/* Bootstrap filestyle */\n.icon-span-filestyle {\n  padding-right: 5px;\n}\n\n\n/* Bootstrap-touchSpin */\n.bootstrap-touchspin {\n  .input-group-btn-vertical {\n    .btn {\n      padding: 9px 12px;\n    }\n    i {\n      top: 4px;\n      left: 8px;\n    }\n  }\n}\n\n\n/* == Bootstrap Switch == */\n\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\n  background: $primary;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\n  background: $info;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\n  background: $success;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\n  background: $warning;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\n  background: $danger;\n}\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\n  background: #eeeeee;\n}\n.bootstrap-switch.bootstrap-switch-focused {\n  border-color: $muted;\n  box-shadow: none;\n}\n\n\n/* == Form Uploads == */\n\n.jFiler-input-dragDrop {\n  width: 100%;\n  background-color: #fafafa;\n}\n\n.jFiler-theme-default .jFiler-input {\n  width: 100%;\n}\n.jFiler-theme-default .jFiler-input-button {\n  background-color: $custom;\n  background-image: none !important;\n  color: $white;\n  border: 1px solid $custom !important;\n}\n\n\n\n/* == Colorpicker == */\n\n.colorpicker-visible {\n  visibility: visible;\n  opacity: 1;\n  display: block !important;\n  margin-top: 0 !important;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_form-components.scss",
    "content": "/* Form components */\n\n.form-group-custom {\n  position: relative;\n  margin-bottom: 30px;\n}\n\n.form-group-custom textarea {\n  resize: none;\n}\n.form-group-custom select {\n  width: 100%;\n  padding: 7px 12px 7px 0;\n  background: none;\n  border: none;\n  line-height: 1.6;\n  box-shadow: none;\n}\n.form-group-custom .control-label {\n  position: absolute;\n  top: 0.25rem;\n  pointer-events: none;\n  padding-left: 0.125rem;\n  z-index: 1;\n  color: $muted;\n  font-weight: normal;\n  -webkit-transition: all 0.28s ease;\n  transition: all 0.28s ease;\n}\n.form-group-custom .bar {\n  position: relative;\n  border-bottom: 0.0625rem solid #999;\n  display: block;\n}\n.form-group-custom .bar::before {\n  content: '';\n  height: 0.125rem;\n  width: 0;\n  left: 50%;\n  bottom: -0.0625rem;\n  position: absolute;\n  background: $custom;\n  -webkit-transition: left 0.28s ease, width 0.28s ease;\n  transition: left 0.28s ease, width 0.28s ease;\n  z-index: 2;\n}\n.form-group-custom input,\n.form-group-custom textarea {\n  display: block;\n  background: none;\n  padding: 7px 12px;\n  border: none;\n  width: 100%;\n  color: transparent;\n  -webkit-transition: all 0.28s ease;\n  transition: all 0.28s ease;\n  box-shadow: none;\n}\n.form-group-custom input[type=\"file\"] {\n  line-height: 1;\n}\n.form-group-custom input[type=\"file\"] ~ .bar {\n  display: none;\n}\n.form-group-custom select,\n.form-group-custom input:focus,\n.form-group-custom input:valid,\n.form-group-custom input.form-file,\n.form-group-custom input.has-value,\n.form-group-custom textarea:focus,\n.form-group-custom textarea:valid,\n.form-group-custom textarea.form-file,\n.form-group-custom textarea.has-value {\n  color: #333;\n}\n.form-group-custom select ~ .control-label,\n.form-group-custom input:focus ~ .control-label,\n.form-group-custom input:valid ~ .control-label,\n.form-group-custom input.form-file ~ .control-label,\n.form-group-custom input.has-value ~ .control-label,\n.form-group-custom textarea:focus ~ .control-label,\n.form-group-custom textarea:valid ~ .control-label,\n.form-group-custom textarea.form-file ~ .control-label,\n.form-group-custom textarea.has-value ~ .control-label {\n  font-size: 0.8rem;\n  color: gray;\n  top: -1rem;\n  left: 0;\n}\n.form-group-custom select:focus,\n.form-group-custom input:focus,\n.form-group-custom textarea:focus {\n  outline: none;\n}\n.form-group-custom select:focus ~ .control-label,\n.form-group-custom input:focus ~ .control-label,\n.form-group-custom textarea:focus ~ .control-label {\n  color: $custom;\n}\n.form-group-custom select:focus ~ .bar::before,\n.form-group-custom input:focus ~ .bar::before,\n.form-group-custom textarea:focus ~ .bar::before {\n  width: 100%;\n  left: 0;\n}\n\n\n.form-control {\n  font-family: inherit;\n  background-color: $white;\n  border: 1px solid #E3E3E3;\n  border-radius: 4px;\n  color: #565656;\n  padding: 7px 12px;\n  height: 38px;\n  max-width: 100%;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: all 300ms linear;\n  -moz-transition: all 300ms linear;\n  -o-transition: all 300ms linear;\n  -ms-transition: all 300ms linear;\n  transition: all 300ms linear;\n\n  &:focus {\n    background-color: $white;\n    border: 1px solid #AAAAAA;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n    outline: 0 !important;\n    color: #333333;\n  }\n}\n\ntextarea.form-control {\n  min-height: 90px;\n}\n\nselect[multiple] {\n  height: auto;\n}\n\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-horizontal {\n  .form-group {\n    margin-left: -10px;\n    margin-right: -10px;\n  }\n}\n\n.form-control-feedback {\n  line-height: 38px !important;\n}\n.input-group-btn {\n  .btn {\n    padding: 8px 12px;\n  }\n  .btn-sm {\n    padding: 5px 10px;\n  }\n  .btn-lg {\n    padding: 10px 17px;\n  }\n}\n\n\n.has-success {\n  .form-control {\n    border-color: $success;\n    box-shadow: none !important;\n  }\n}\n\n.has-warning {\n  .form-control {\n    border-color: $warning;\n    box-shadow: none !important;\n  }\n}\n\n.has-error {\n  .form-control {\n    border-color: $danger;\n    box-shadow: none !important;\n  }\n}\n\n.input-group-addon {\n  border-radius: 2px;\n  border: 1px solid $light;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_form-wizard.scss",
    "content": "/* Wizard */\n.wizard > .content {\n  background: $white;\n  min-height: 240px;\n  padding: 20px;\n}\n\n.wizard > .content > .body {\n  padding: 0;\n  position: relative;\n\n  input {\n    border: 1px solid #E3E3E3;\n  }\n  ul > li {\n    display: block;\n    line-height: 30px;\n  }\n  label.error {\n    color: $danger;\n    margin-left: 0;\n\n  }\n  label {\n    display: inline-block;\n    margin-top: 10px;\n  }\n}\n\n.wizard > .steps {\n  .number {\n    border-radius: 50%;\n    background-color: rgba(255,255,255,0.3);\n    display: inline-block;\n    line-height: 30px;\n    margin-right: 10px;\n    width: 30px;\n    text-align: center;\n  }\n  .disabled {\n    a {\n      background: $white;\n      color: $lightdark3;\n      cursor: default;\n      border: 1px solid #eaeaea;\n      &:hover {\n        background: $light9;\n        color: $lightdark3;\n        cursor: default;\n        border: 1px solid #eaeaea;\n      }\n      &:active {\n        background: $light9;\n        color: $lightdark3;\n        cursor: default;\n        border: 1px solid #eaeaea;\n      }\n    }\n  }\n  .current {\n    a {\n      background: $custom;\n      &:hover {\n        background: $custom;\n        .number {\n          color: $white;\n        }\n      }\n      &:active {\n        background: $custom;\n        .number {\n          color: $white;\n        }\n      }\n      .number {\n        color: $white;\n      }\n    }\n  }\n  .done {\n    a {\n      background: $lightgray;\n      &:hover {\n        background: $lightgray;\n      }\n      &:active {\n        background: $lightgray;\n      }\n    }\n  }\n}\n\n.wizard > .steps a, .wizard > .steps a:hover, .wizard > .steps a:active, .wizard > .content {\n  border-radius: 2px;\n}\n\n.wizard > .actions {\n  a {\n    background: $custom;\n    border-radius: 2px;\n    color: $white;\n    &:hover {\n      background: $custom;\n      border-radius: 2px;\n      color: $white;\n    }\n    &:active {\n      background: $custom;\n      border-radius: 2px;\n      color: $white;\n    }\n  }\n  .disabled {\n    a {\n      background: $white;\n      color: $lightdark3;\n      cursor: default;\n      border: 1px solid #eaeaea;\n      &:hover {\n        background: $light9;\n        color: $lightdark3;\n        cursor: default;\n        border: 1px solid #eaeaea;\n      }\n      &:active {\n        background: $light9;\n        color: $lightdark3;\n        cursor: default;\n        border: 1px solid #eaeaea;\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_gallery.scss",
    "content": "/* =============\n   Gallery\n============= */\n.port {\n  padding-bottom: 20px;\n}\n.portfolioFilter {\n  a {\n    color: $dark;\n    border-radius: 3px;\n    padding: 5px 10px;\n    display: inline-block;\n    margin-bottom: 5px;\n\n    &:hover {\n      background-color: $primary;\n      color: $white;\n    }\n  }\n  a.current {\n    background-color: $primary;\n    color: $white;\n  }\n}\n.gallery-second {\n  a{\n    box-shadow: none !important;\n    font-weight: 500;\n\n    &:hover {\n      background-color: transparent;\n      color: $primary;\n    }\n  }\n}\n.thumb {\n  background-color: $white;\n  border-radius: 3px;\n  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n  margin-top: 30px;\n  padding: 10px;\n  width: $width;\n}\n\n.thumb-img {\n  border-radius: 2px;\n  overflow: hidden;\n  width: $width;\n}\n\n.gal-detail {\n  h4 {\n    margin-top: 16px;\n  }\n}\n\n\n/* Gallery Second */\n.portfolio-masonry-box {\n  overflow: hidden;\n  position: relative;\n  padding: 0;\n  margin-top: 30px;\n\n  .portfolio-masonry-img {\n    position: relative;\n    overflow: hidden;\n\n    &:after {\n      content: \" \";\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0;\n      background: rgba(250,250,250, 0);\n      -webkit-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n      -moz-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n      -o-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n      transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    }\n  }\n\n  .portfolio-masonry-img > img {\n    -webkit-transition: all 0.3s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    -moz-transition: all 0.3s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    -o-transition: all 0.3s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    transition: all 0.3s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    border-radius: 0;\n  }\n\n  .portfolio-masonry-detail {\n    opacity: 0;\n    width: 100%;\n    padding: 20px 20px 0 20px;\n    box-sizing: border-box;\n    position: absolute;\n    left: 0;\n    text-align: center;\n    overflow: hidden;\n    -webkit-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    -moz-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    -o-transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n    transition: all 0.27s cubic-bezier(0.300, 0.100, 0.580, 1.000);\n\n    h4{\n      margin-bottom: 3px;\n      color: $white !important;\n      font-weight: bold;\n    }\n    p{\n      color: $white !important;\n      text-transform: uppercase;\n      font-size: 12px;\n    }\n  }\n}\n\n.portfolio-masonry-box:hover {\n  .portfolio-masonry-detail {\n    -webkit-transform: translateY(-100%);\n    -moz-transform: translateY(-100%);\n    transform: translateY(-100%);\n    z-index: 3;\n    opacity: 1;\n  }\n\n  .portfolio-masonry-img:after {\n    background: rgba($dark,0.7);\n  }\n\n  .portfolio-masonry-img > img {\n    -webkit-transform: scale(1.05);\n    -moz-transform: scale(1.05);\n    -o-transform: scale(1.05);\n    -ms-transform: scale(1.05);\n    transform: scale(1.05);\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_helper.scss",
    "content": "/* =============\n   Helper clasess\n============= */\n\n.p-0 {\n  padding: 0 !important;\n}\n.p-20 {\n  padding: 20px !important;\n}\n.p-30 {\n  padding: 30px !important;\n}\n.p-l-0 {\n  padding-left: 0 !important;\n}\n.p-r-0 {\n  padding-right: 0 !important;\n}\n.p-t-0 {\n  padding-top: 0 !important;\n}\n.p-t-10 {\n  padding-top: 10px !important;\n}\n.p-b-0 {\n  padding-bottom: 0 !important;\n}\n.p-b-10 {\n  padding-bottom: 10px !important;\n}\n.p-l-r-10 {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n.m-0 {\n  margin: 0 !important;\n}\n.m-r-5 {\n  margin-right: 5px !important;\n}\n.m-r-10 {\n  margin-right: 10px !important;\n}\n.m-r-15 {\n  margin-right: 15px !important;\n}\n.m-l-5 {\n  margin-left: 5px !important;\n}\n.m-l-10 {\n  margin-left: 10px !important;\n}\n.m-l-15 {\n  margin-left: 15px !important;\n}\n.m-t-5 {\n  margin-top: 5px !important;\n}\n.m-t-0 {\n  margin-top: 0 !important;\n}\n.m-t-10 {\n  margin-top: 10px !important;\n}\n.m-t-15 {\n  margin-top: 15px !important;\n}\n.m-t-20 {\n  margin-top: 20px !important;\n}\n.m-t-30 {\n  margin-top: 30px !important;\n}\n.m-t-40 {\n  margin-top: 40px !important;\n}\n.m-b-0 {\n  margin-bottom: 0 !important;\n}\n.m-b-5 {\n  margin-bottom: 5px !important;\n}\n.m-b-10 {\n  margin-bottom: 10px !important;\n}\n.m-b-15 {\n  margin-bottom: 15px !important;\n}\n.m-b-20 {\n  margin-bottom: 20px !important;\n}\n.m-b-30 {\n  margin-bottom: 30px !important;\n}\n.w-xs {\n  min-width: 80px;\n}\n.w-sm {\n  min-width: 95px;\n}\n.w-md {\n  min-width: 110px;\n}\n.w-lg {\n  min-width: 140px;\n}\n.m-h-40 {\n  min-height: 40px;\n}\n.m-h-50 {\n  min-height: 50px;\n}\n.l-h-34 {\n  line-height: 34px;\n}\n.font-normal {\n  font-weight: normal;\n}\n.font-light {\n  font-weight: 300;\n}\n.font-13 {\n  font-size: 13px !important;\n}\n.font-16 {\n  font-size: 16px !important;\n}\n.font-18 {\n  font-size: 18px !important;\n}\n.wrapper-md {\n  padding: 20px;\n}\n.pull-in {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.pull-in-card {\n  margin-left: -20px !important;\n  margin-right: -20px !important;\n}\n.b-0 {\n  border: none !important;\n}\n.vertical-middle {\n  vertical-align: middle;\n}\n.b-r-0 {\n  border-radius: 0 !important;\n}\n.bx-shadow {\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n  box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n}\n.mx-box {\n  max-height: 380px;\n  min-height: 380px;\n}\n.thumb-sm {\n  height: 32px;\n  width: 32px;\n}\n.thumb-md {\n  height: 48px;\n  width: 48px;\n}\n.thumb-lg {\n  height: 88px;\n  width: 88px;\n}\n\n/* =============\n   Extras\n============= */\n/* Table type box */\n\n.table-box {\n  display: table;\n  height: 100%;\n  width: 100%;\n\n  .table-detail {\n    display: table-cell;\n    vertical-align: middle;\n  }\n}\n/* Card Box */\n.card-box{\n  padding: 20px;\n  -webkit-box-shadow: 0 1px 4px 0 rgba(0,0,0,.1);\n  box-shadow: 0 1px 4px 0 rgba(0,0,0,.1);\n  border-radius: 3px;\n  margin-bottom: 30px;\n  background-clip: padding-box;\n  background-color: $white;\n}\n\n/* Grid page */\n.grid-structure {\n  .grid-container {\n    background-color: $lightdark;\n    margin-bottom: 10px;\n    padding: 10px 20px;\n  }\n}\n\n/* Demo only */\n.icon-list-demo {\n  div {\n    cursor: pointer;\n    line-height: 45px;\n    white-space: nowrap;\n    color: #75798B;\n\n    &:hover {\n      color: $white;\n    }\n\n    p{\n      margin-bottom: 0;\n      line-height: inherit;\n    }\n  }\n  i {\n    -webkit-transition: all 0.2s;\n    display: inline-block;\n    font-size: 18px;\n    margin: 0;\n    text-align: center;\n    transition: all 0.2s;\n    vertical-align: middle;\n    width: 40px;\n  }\n  .col-md-4 {\n    border-radius:3px;\n    &:hover {\n      background-color: $custom;\n\n      i {\n        -o-transform: scale(2);\n        -webkit-transform: scale(2);\n        -moz-transform: scale(2);\n        transform: scale(2);\n      }\n    }\n  }\n}\n\n//Button Demo\n.button-list {\n  margin-left: -8px;\n  margin-bottom: -12px;\n  .btn {\n    margin-bottom: 12px;\n    margin-left: 8px;\n  }\n}\n\n/* Switchery demo */\n.switchery-demo {\n  .switchery {\n    margin-bottom: 10px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_loader.scss",
    "content": "/* === LOADER === */\n#preloader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: #f3f3f3;\n  z-index: 9999999;\n}\n#status {\n  width: 56px;\n  height: 56px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin: -23px 0 0 -23px;\n}\n.spinner-wrapper {\n  position: relative;\n  width: 4em;\n  height: 4em;\n  border-radius: 100%;\n}\n.spinner-wrapper::after {\n  content: \"\";\n  background: #f3f3f3;\n  border-radius: 50%;\n  width: 3em;\n  height: 3em;\n  position: absolute;\n  top: 0.5em;\n  left: 0.5em;\n}\n.rotator {\n  position: relative;\n  width: 4em;\n  border-radius: 4em;\n  overflow: hidden;\n  -webkit-animation: rotate 2000ms infinite linear;\n  animation: rotate 2000ms infinite linear;\n}\n.rotator:before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: #f5707a;\n  border: 3px solid #f3f3f3;\n  border-radius: 100%;\n}\n.inner-spin {\n  background: #f3f3f3;\n  height: 4em;\n  width: 2em;\n}\n.inner-spin {\n  -webkit-animation: rotate-left 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  animation: rotate-left 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  border-radius: 2em 0 0 2em;\n  -webkit-transform-origin: 2em 2em;\n  transform-origin: 2em 2em;\n}\n.inner-spin:last-child {\n  -webkit-animation: rotate-right 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  animation: rotate-right 2500ms infinite cubic-bezier(0.445, 0.05, 0.55, 0.95);\n  margin-top: -4em;\n  border-radius: 0 2em 2em 0;\n  float: right;\n  -webkit-transform-origin: 0 50%;\n  transform-origin: 0 50%;\n}\n@-webkit-keyframes rotate-left {\n  60%,\n  75%,\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes rotate-left {\n  60%,\n  75%,\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes rotate {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes rotate-right {\n  0%,\n  25%,\n  45% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes rotate-right {\n  0%,\n  25%,\n  45% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_maintenance.scss",
    "content": "/* =============\n   Maintenance\n============= */\n\n\n\n.icon-main {\n  font-size: 88px;\n  margin-bottom: 50px;\n}\n\n.maintenance-page {\n  margin: 10% 0;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_maps.scss",
    "content": "/* =============\n   Maps\n============= */\n\n\n.gmaps, .gmaps-panaroma {\n  height: 300px;\n  background: $light;\n  border-radius: 3px;\n}\n\n.gmaps-overlay {\n  display: block;\n  text-align: center;\n  color: $white;\n  font-size: 16px;\n  line-height: 40px;\n  background: $primary;\n  border-radius: 4px;\n  padding: 10px 20px;\n}\n\n.gmaps-overlay_arrow {\n  left: 50%;\n  margin-left: -16px;\n  width: 0;\n  height: 0;\n  position: absolute;\n}\n\n.gmaps-overlay_arrow.above {\n  bottom: -15px;\n  border-left: 16px solid transparent;\n  border-right: 16px solid transparent;\n  border-top: 16px solid $primary;\n}\n\n.gmaps-overlay_arrow.below {\n  top: -15px;\n  border-left: 16px solid transparent;\n  border-right: 16px solid transparent;\n  border-bottom: 16px solid $primary;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n  width: 10px;\n  height: 10px;\n  line-height: 10px;\n}\n.jvectormap-zoomout {\n  top: 40px;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_menu.scss",
    "content": "/*===================================\n   Topbar,Left-sidebar,Right-sidebar\n  ===================================*/\n\n.topbar {\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 999;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n\n  .topbar-left {\n    float: left;\n    position: relative;\n    width: 240px;\n    z-index: 1;\n    background-color: lighten($dark,15%);\n  }\n\n  .topbar-left-sm {\n    width: 180px;\n  }\n  .topbar-left-sm+.navbar-custom {\n    margin-left: 180px;\n  }\n}\n\n.logo {\n  color: $white!important;\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: .05em;\n  line-height: 70px;\n  text-transform: uppercase;\n  h1 {\n    height: 50px;\n    margin: 0 auto;\n    text-align: center;\n  }\n  .icon-c-logo {\n    display: none;\n  }\n}\n\n.navbar-custom {\n  background-color: lighten($dark,15%);\n  border-radius: 0;\n  margin-bottom: 0;\n  padding: 0 10px 0 0;\n  margin-left: 240px;\n  min-height: 70px;\n\n  .nav-link {\n    padding: 0;\n    line-height: 67px;\n    color: rgba($white,0.6);\n  }\n\n  .dropdown-toggle {\n    &:after {\n      content: initial;\n    }\n  }\n\n  .menu-left {\n    overflow: hidden;\n  }\n}\n\n.nav > li > a {\n  color: $white !important;\n  line-height: 60px;\n  padding: 0 15px;\n  position: relative;\n  i {\n    font-size: 16px;\n  }\n}\n\n.profile {\n  img {\n    border: 2px solid #edf0f0;\n    height: 36px;\n    width: 36px;\n  }\n}\n\n/* Notification */\n.notification-list {\n  margin-left: 0 !important;\n\n  .noti-title {\n    margin-bottom: 0;\n    width: auto;\n    padding: 12px 20px;\n\n    h5 {\n      margin: 0;\n    }\n\n    .label {\n      float: right;\n    }\n  }\n\n  .noti-icon {\n    font-size: 18px;\n    padding: 0 12px;\n    vertical-align: middle;\n    color: rgba($white,0.8);\n  }\n  .noti-icon-badge {\n    display: inline-block;\n    position: absolute;\n    top: 14px;\n    right: 8px;\n  }\n  .notify-item {\n    padding: 10px 20px;\n\n    .notify-icon {\n      float: left;\n      height: 36px;\n      width: 36px;\n      line-height: 36px;\n      text-align: center;\n      margin-right: 10px;\n      border-radius: 50%;\n      color: $white;\n\n      img {\n        margin-top: 4px;\n      }\n    }\n    .notify-details {\n      margin-bottom: 0;\n      overflow: hidden;\n      margin-left: 45px;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      b {\n        font-weight: 500;\n      }\n      small {\n        display: block;\n      }\n      span {\n        display: block;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        font-size: 13px;\n      }\n    }\n  }\n  .notify-all {\n    border-radius: 0 0 0.25rem 0.25rem;\n    margin: 0 0 -5px 0;\n    background-color: $light;\n  }\n  .profile-dropdown {\n    .notify-item {\n      padding: 4px 20px;\n    }\n  }\n}\n\n.profile-dropdown {\n  width: 170px;\n  i {\n    font-size: 17px;\n    vertical-align: middle;\n    margin-right: 5px;\n  }\n  span {\n    vertical-align: middle;\n  }\n}\n\n\n.nav-user {\n  padding: 0 12px !important;\n\n  img {\n    height:36px;\n    width: 36px;\n  }\n}\n\n.navbar-nav {\n  margin: 0;\n}\n\n.side-menu {\n  bottom: 0;\n  top: 0;\n  width: 240px;\n  z-index: 2;\n}\n\n.side-menu.left {\n  background: $white;\n  -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.15);\n  box-shadow: 1px 0 2px rgba(0, 0, 0, 0.15);\n  position: absolute;\n  top: 70px;\n}\n\nbody.fixed-left {\n  .side-menu.left {\n    bottom: 50px;\n    height: $height;\n    margin-bottom: -70px;\n    margin-top: 0;\n    padding-bottom: 70px;\n    position: fixed;\n  }\n}\n\n.content-page {\n  margin-left: 240px;\n  overflow: hidden;\n}\n\n.content-page > .content {\n  margin-bottom: 60px;\n  margin-top: 70px;\n  padding: 20px 10px 0 10px;\n}\n\n.button-menu-mobile {\n  border: none;\n  color: $white;\n  display: inline-block;\n  height: 70px;\n  width: 60px;\n  margin-right: 15px;\n  background-color: rgba($white,0.1);\n  font-size: 16px;\n}\n\n.sidebar-inner {\n  height: $height;\n}\n\n#sidebar-menu, #sidebar-menu ul, #sidebar-menu li, #sidebar-menu a {\n  border: 0;\n  font-weight: normal;\n  line-height: 1;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  text-decoration: none;\n}\n\n#sidebar-menu {\n  padding-bottom: 30px;\n  padding-top: 30px;\n  width: 100%;\n  .nav > li > a {\n\n    .badge {\n      position: absolute;\n      right: 10px;\n      top: 12px;\n    }\n  }\n\n  a {\n    line-height: 1.3;\n  }\n  ul {\n    ul {\n      display: none;\n      background-color: darken($white,3%);\n      li {\n        border-top: 0;\n      }\n      li.active {\n        a {\n          color: $dark;\n        }\n      }\n      a {\n        color: lighten($dark,25%);\n        display: block;\n        padding: 10px 20px 10px 62px;\n\n        &:hover {\n          color: $dark;\n        }\n        i {\n          margin-right: 5px;\n        }\n      }\n      ul {\n        a {\n          padding-left: 80px;\n        }\n      }\n    }\n  }\n  .label {\n    margin-top: 2px;\n  }\n  .subdrop {\n    background: darken($white,5%) !important;\n  }\n}\n\n\n#sidebar-menu > ul > li > a {\n  color: lighten($dark,15%);\n  display: block;\n  padding: 15px 20px;\n  font-size: 15px;\n\n  &:hover {\n    color: $dark;\n    text-decoration: none;\n  }\n}\n\n#sidebar-menu > ul > li > a > span {\n  vertical-align: middle;\n}\n\n#sidebar-menu {\n  ul {\n    li {\n      .menu-arrow {\n        -webkit-transition: -webkit-transform .15s;\n        -o-transition: -o-transform .15s;\n        transition: transform .15s;\n        position: absolute;\n        right: 20px;\n        display: inline-block;\n        font-family: 'Material Design Iconic Font';\n        text-rendering: auto;\n        line-height: 18px;\n        font-size: 16px;\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n        color: $muted;\n\n        &:before {\n          content: \"\\f0fb\";\n        }\n      }\n      a.subdrop .menu-arrow {\n        &:before {\n          content: \"\\f111\";\n        }\n      }\n\n      a {\n        i {\n          display: inline-block;\n          font-size: 16px;\n          line-height: 17px;\n          margin-left: 3px;\n          margin-right: 15px;\n          text-align: center;\n          vertical-align: middle;\n          width: 20px;\n        }\n        i.md {\n          font-size: 18px;\n        }\n      }\n    }\n  }\n}\n\n\n#sidebar-menu > ul > li > a > i.i-right {\n  float: right;\n  margin: 3px 0 0 0;\n}\n\n#sidebar-menu > ul > li > a.active {\n  background: darken($white,5%) !important;\n}\n\n.menu-title {\n  padding: 12px 20px !important;\n  letter-spacing: .035em;\n  pointer-events: none;\n  cursor: default;\n  font-size: 13px;\n}\n\n\n/* Small Menu */\n.side-menu-sm {\n  width: 180px;\n  text-align: center;\n  #sidebar-menu>ul>li>a>i {\n    display: block;\n    font-size: 18px;\n    line-height: 24px;\n    width: 100%;\n    margin: 0;\n  }\n  #sidebar-menu ul ul a {\n    padding: 10px 20px 10px 20px;\n  }\n  .badge,.menu-arrow {\n    display: none !important;\n  }\n}\n\n.side-menu-sm + .content-page {\n  .footer {\n    left: 180px;\n  }\n}\n#wrapper.enlarged .side-menu-sm {\n  text-align: left;\n}\n#wrapper.enlarged .side-menu-sm #sidebar-menu ul li a i {\n  display: inline-block;\n  font-size: 18px;\n  line-height: 17px;\n  margin-left: 3px;\n  margin-right: 15px;\n  vertical-align: middle;\n  width: 20px;\n}\n\n.side-menu-sm + .content-page {\n  margin-left: 180px;\n}\n\n/* Header */\n.page-header-box {\n  background: $white;\n  border-bottom: 1px solid #dee2e8;\n  margin: -20px -25px 30px -25px;\n  padding: 5px 20px 0 20px;\n}\n\n\n\n#wrapper.enlarged {\n  .navbar-custom {\n    margin-left: 70px;\n  }\n  .menu-title ,.menu-arrow{\n    display: none !important;\n  }\n  #sidebar-menu {\n    ul {\n      ul {\n        box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);\n        z-index: 9999;\n        background-color: $white;\n      }\n    }\n  }\n  .left.side-menu {\n    width: 70px;\n    z-index: 5;\n\n    #sidebar-menu > ul > li > a {\n      padding: 15px 20px;\n      min-height: 52px;\n\n      &:hover {\n        background:darken($white,3%)!important;\n      }\n      &:active {\n        background:darken($white,3%)!important;\n      }\n      &:focus {\n        background:darken($white,3%)!important;\n      }\n\n      i {\n        margin-right: 20px !important;\n        font-size: 20px;\n      }\n    }\n    .label {\n      position: absolute;\n      top: 5px;\n      left: 35px;\n      text-indent: 0;\n      display: block !important;\n      padding: .2em .6em .3em !important;\n    }\n    #sidebar-menu {\n      ul > li {\n        position: relative;\n        white-space: nowrap;\n        &:hover > a {\n          position: relative;\n          width: 260px;\n          background: darken($white,3%);\n          color: $dark;\n          border-color: $dark;\n        }\n        &:hover > ul {\n          display: block;\n          left: 70px;\n          position: absolute;\n          width: 190px;\n          a {\n            background: $white;\n            box-shadow: none;\n            padding-left: 15px;\n            position: relative;\n            width: 186px;\n            z-index: 6;\n\n            &:hover {\n              color: $dark;\n            }\n          }\n        }\n        &:hover {\n          a {\n            span {\n              display: inline;\n            }\n          }\n        }\n      }\n      li{\n        .show-menu + ul{\n          display: block;\n          left: 70px;\n          position: absolute;\n          width: 190px;\n          a {\n            background: $white;\n            box-shadow: none;\n            padding-left: 15px;\n            position: relative;\n            width: 186px;\n            z-index: 6;\n\n            &:hover {\n              color: $custom;\n            }\n          }\n\n        }\n      }\n      a.subdrop {\n        color: $custom !important;\n      }\n      ul > li > ul {\n        display: none;\n      }\n      ul {\n        ul {\n          li {\n            &:hover > ul {\n              display: block;\n              left: 190px;\n              margin-top: -36px;\n              position: absolute;\n              width: 190px;\n            }\n          }\n          li > a {\n            span.pull-right {\n              -ms-transform: rotate(270deg);\n              -webkit-transform: rotate(270deg);\n              position: absolute;\n              right: 20px;\n              top: 12px;\n              transform: rotate(270deg);\n            }\n          }\n          li.active {\n            a{\n              color: $dark;\n            }\n          }\n        }\n      }\n      ul > li > a {\n        span {\n          display: none;\n          padding-left: 10px;\n        }\n        span.badge {\n          padding-left: 5px;\n        }\n      }\n    }\n    .user-details {\n      display: none;\n    }\n  }\n  .content-page {\n    margin-left: 70px;\n  }\n  .footer {\n    left: 70px;\n  }\n  .topbar {\n    .topbar-left {\n      width: 70px !important;\n      .logo {\n        span {\n          display: none;\n          opacity: 0;\n        }\n        .icon-c-logo {\n          display: block;\n          line-height: 70px;\n        }\n      }\n    }\n\n  }\n  #sidebar-menu > ul > li {\n    &:hover > a.open {\n      :after {\n        display: none;\n      }\n    }\n    &:hover > a.active {\n      :after {\n        display: none;\n      }\n    }\n  }\n\n  .tips-box {\n    display: none;\n  }\n}\n\n.tips-box {\n  .portlet {\n    -webkit-box-shadow: 0 0 7px 1px rgba(0,0,0,0.05);\n    -moz-box-shadow: 0 0 7px 1px rgba(0,0,0,0.05);\n    box-shadow: 0 0 7px 1px rgba(0,0,0,0.05);\n  }\n}\n\n.user-details {\n  padding: 20px;\n  padding-bottom: 0;\n  position: relative;\n  img {\n    position: relative;\n    z-index: 9999;\n  }\n  .user-info {\n    color: $lightdark4;\n    margin-left: 60px;\n    position: relative;\n    z-index: 99999;\n    a.dropdown-toggle {\n      color: $lightdark7;\n      display: block;\n      font-size: 16px;\n      font-weight: 600;\n      padding-top: 5px;\n    }\n  }\n}\n\n#wrapper.right-bar-enabled {\n  .right-bar {\n    right: 0;\n  }\n  .left-layout {\n    left: 0;\n  }\n}\n\n\n/* Right sidebar */\n.side-bar.right-bar {\n  float: right !important;\n  right: -266px;\n  top: 70px;\n  font-size: 0.9rem;\n}\n\n.side-bar {\n  -moz-transition: all 200ms ease-out;\n  -webkit-transition: all 200ms ease-out;\n  background-color: $white;\n  box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);\n  display: block;\n  float: left;\n  height: $height;\n  overflow-y: auto;\n  position: fixed;\n  transition: all 200ms ease-out;\n  width: 240px;\n}\n\n.right-bar {\n  background: $white !important;\n  z-index: 99 !important;\n  h4 {\n    border-bottom: 1px solid $light;\n    padding-bottom: 10px;\n    font-size: 1.2rem;\n  }\n}\n\n.contact-list {\n  max-height: 600px;\n\n  .list-group-item {\n    border: none;\n    &:hover {\n      background: darken($white,3%);\n    }\n    a{\n      display: block;\n      width: 100%;\n    }\n  }\n\n  i.offline {\n    color: $danger !important;\n  }\n\n  i.away {\n    color: $warning;\n  }\n}\n\n.contacts-list {\n  .avatar {\n    display: inline-block;\n    float: left;\n    margin-right: 5px;\n    width: 30px;\n    img {\n      border-radius: 50%;\n      width: $width;\n    }\n  }\n  .list-group-item {\n    span.name {\n      color: #707780;\n      display: inline-block;\n      float: left;\n      overflow: hidden;\n      padding-left: 5px;\n      padding-top: 3px;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      width: 130px;\n    }\n  }\n\n  i {\n    color: $lightgray;\n    float: right;\n    font-size: 9px;\n    line-height: 30px;\n  }\n  i.online {\n    color: $success;\n  }\n  i.offline {\n    color: $danger !important;\n  }\n\n  i.away {\n    color: $warning;\n  }\n}\n\n\n/* Seach */\n.app-search {\n  position: relative;\n  padding-top: 15px;\n\n  a {\n    position: absolute;\n    top: 18px;\n    left: 52%;\n    height: 40px;\n    line-height: 38px;\n    width: 40px;\n    text-align: center;\n    color: rgba($white, 0.5);\n    display: none;\n\n    &:hover {\n      color: $white;\n    }\n  }\n\n  .form-control,\n  .form-control:focus {\n    border: none;\n    font-size: 13px;\n    height: 40px;\n    color: $white;\n    padding-left: 20px;\n    padding-right: 20px;\n    background: rgba($white, 0.05);\n    box-shadow: none;\n    border-radius: 3px;\n    width: 50%;\n  }\n}\n\n.app-search input {\n  &::-webkit-input-placeholder {\n    color: rgba($white,0.5);\n  }\n  &:-moz-placeholder {\n    color: rgba($white,0.5);\n  }\n  &::-moz-placeholder {\n    color: rgba($white,0.5);\n  }\n  &:-ms-input-placeholder {\n    color: rgba($white,0.5);\n  }\n}\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_modals.scss",
    "content": "/* Modals */\n.modal {\n  .modal-dialog {\n    .modal-content {\n      -moz-box-shadow: none;\n      border-color: transparent;\n      border-radius: 2px;\n      padding: 25px;\n      -webkit-box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n      box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n      .modal-header {\n        border-bottom-width: 2px;\n        margin: 0;\n        padding: 0;\n        padding-bottom: 15px;\n      }\n      .modal-body {\n        padding: 20px 0;\n      }\n      .modal-footer {\n        padding: 0;\n        padding-top: 15px;\n      }\n    }\n  }\n}\n\n.modal-full {\n  width: 98%;\n  max-width: 100%;\n}\n\n.modal-content {\n  .nav.nav-tabs + .tab-content {\n    margin-bottom: 0;\n  }\n}\n\n/* Custom-modal */\n\n.modal-demo {\n  background-color: $white;\n  width: 600px;\n  border-radius: 2px;\n  display: none;\n  -webkit-box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n  box-shadow: 0 5px 11px 0 rgba(0,0,0,.18), 0 4px 15px 0 rgba(0,0,0,.15);\n\n  .close {\n    position: absolute;\n    top: 15px;\n    right: 25px;\n    color: $light;\n  }\n}\n\n.custom-modal-title {\n  padding: 15px 25px 15px 25px;\n  line-height: 22px;\n  font-size: 18px;\n  background-color: $dark;\n  color: $white;\n  text-align: left;\n  margin: 0;\n}\n.custom-modal-text {\n  padding: 20px;\n}\n\n.custombox-modal-flash ,.custombox-modal-rotatedown {\n  .close {\n    top: 20px;\n    z-index: 9999;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_nestable-list.scss",
    "content": "/* =============\n   Nestable\n============= */\n\n\n.custom-dd {\n  .dd-list {\n    .dd-item {\n      .dd-handle {\n        background: darken($white,5%);\n        border: none;\n        padding: 10px 16px;\n        height: auto;\n        font-weight: 500;\n        border-radius: 3px;\n\n        &:hover {\n          color: $custom;\n        }\n      }\n\n      button {\n        height: auto;\n        font-size: 17px;\n        margin: 8px auto;\n        color: $lightdark5;\n        width: 30px;\n      }\n    }\n  }\n}\n\n.custom-dd-empty {\n  .dd-list {\n    .dd3-handle {\n      border: none;\n      background: darken($white,5%);\n      height: 36px;\n      width: 36px;\n\n      &:before {\n        color: inherit;\n        top: 7px;\n      }\n\n      &:hover {\n        color: $custom;\n      }\n    }\n    .dd3-content {\n      height: auto;\n      border: none;\n      padding: 10px 16px 10px 46px;\n      background: darken($white,5%);\n      font-weight: 500;\n\n      &:hover {\n        color: $custom;\n      }\n    }\n    button {\n      width: 26px;\n      height: 26px;\n      font-size: 16px;\n      font-weight: 500;\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_notification.scss",
    "content": "/* =============\n   Notification\n============= */\n\n.notifyjs-metro-base {\n  position: relative;\n  min-height: 52px;\n  min-width: 250px;\n  color:#444;\n  border-radius: 3px;\n  -webkit-border-radius: 3px;\n  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-animation: dropdownOpen 0.3s ease-out;\n  -o-animation: dropdownOpen 0.3s ease-out;\n  animation: dropdownOpen 0.3s ease-out;\n}\n\n.notifyjs-metro-base .image {\n  display: table;\n  position: absolute;\n  height: auto;\n  width: auto;\n  left: 25px;\n  top: 50%;\n  font-size: 24px;\n  -moz-transform: translate(-50%, -50%);\n  -ms-transform: translate(-50%, -50%);\n  -o-transform: translate(-50%, -50%);\n  -webkit-transform: translate(-50%, -50%);\n  transform: translate(-50%, -50%);\n}\n\n.notifyjs-metro-base .text-wrapper {\n  display: inline-block;\n  vertical-align: top;\n  text-align: left;\n  margin: 10px 10px 10px 52px;\n  clear: both;\n\n}\n\n.notifyjs-metro-base .title {\n  font-size: 15px;\n  line-height: 20px;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n.notifyjs-metro-base .text {\n  font-size: 12px;\n  font-weight: normal;\n  max-width: 360px;\n  vertical-align: middle;\n\n}\n.notifyjs-metro-cool {\n  color: #fafafa !important;\n  background-color: #4A525F;\n  border: 1px solid #4A525F;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_opportunities.scss",
    "content": "/* =============\n  Opportunities\n============= */\n\n\n.opport-box {\n  .checkbx-detail {\n    width: 30px;\n  }\n  .lable-detail {\n    text-align: center;\n    width: 20%;\n  }\n  .member-info {\n    padding-right: 10px;\n\n    h4{\n      font-size: 16px;\n      display: block;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n\n    p{\n      font-size: 13px;\n      display: block;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n  }\n\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_pagination.scss",
    "content": "/* Pagination/ Pager */\n\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  color: $dark;\n}\n\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: $light;\n}\n\n.pagination-split li {\n  margin-left: 5px;\n  display: inline-block;\n  float: left;\n}\n\n.pagination-split li:first-child {\n  margin-left: 0;\n}\n\n.pagination-split li a {\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n}\n\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus,\n.page-item.active .page-link {\n  background-color: $custom;\n  border-color: $custom;\n}\n\n.pager li > a, .pager li > span {\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  color: $dark;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_portlets.scss",
    "content": "/* =============\n   Portlets\n============= */\n\n.portlet {\n  background: $white;\n  border-radius: 3px;\n  margin-bottom: 30px;\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  background-clip: padding-box;\n\n  .portlet-heading {\n    border-radius: 3px 3px 0 0;\n    color: $white;\n    padding: 12px 20px;\n    .portlet-title {\n      color: $white;\n      float: left;\n      font-size: 15px;\n      font-weight: 600;\n      margin-bottom: 0;\n      margin-top: 0;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n    .portlet-widgets {\n      display: inline-block;\n      float: right;\n      font-size: 15px;\n      line-height: 30px;\n      padding-left: 15px;\n      position: relative;\n      text-align: right;\n      .divider {\n        margin: 0 5px;\n      }\n      .collapsed {\n        .ion-minus-round {\n          &:before {\n            content: \"\\f217\" !important;\n          }\n        }\n      }\n    }\n    a {\n      color: #999999;\n    }\n  }\n  .portlet-body {\n    -moz-border-radius-bottomleft: 5px;\n    -moz-border-radius-bottomright: 5px;\n    -webkit-border-bottom-left-radius: 5px;\n    -webkit-border-bottom-right-radius: 5px;\n    background: $white;\n    border-bottom-left-radius: 5px;\n    border-bottom-right-radius: 5px;\n    padding: 15px;\n  }\n}\n\n.portlet-default {\n  .portlet-title {\n    color: $lightdark7 !important;\n  }\n}\n\n.portlet .portlet-heading.bg-custom a, .portlet .portlet-heading.bg-purple a, .portlet .portlet-heading.bg-info a, .portlet .portlet-heading.bg-success a, .portlet .portlet-heading.bg-primary a, .portlet .portlet-heading.bg-danger a, .portlet .portlet-heading.bg-warning a, .portlet .portlet-heading.bg-inverse a, .portlet .portlet-heading.bg-pink a {\n  color: $white;\n}\n\n.panel-disabled {\n  background: rgba(243, 242, 241, 0.5);\n  bottom: 15px;\n  left: 0;\n  position: absolute;\n  right: -5px;\n  top: 0;\n}\n\n.loader-1 {\n  -moz-animation: loaderAnimate 1000ms linear infinite;\n  -o-animation: loaderAnimate 1000ms linear infinite;\n  -webkit-animation: loaderAnimate 1000ms linear infinite;\n  animation: loaderAnimate 1000ms linear infinite;\n  clip: rect(0, 30px, 30px, 15px);\n  height: 30px;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  position: absolute;\n  top: 50%;\n  width: 30px;\n  &:after {\n    -moz-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    -o-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    -webkit-animation: loaderAnimate2 1000ms ease-in-out infinite;\n    animation: loaderAnimate2 1000ms ease-in-out infinite;\n    border-radius: 50%;\n    clip: rect(0, 30px, 30px, 15px);\n    content: '';\n    height: 30px;\n    position: absolute;\n    width: 30px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_pricing.scss",
    "content": "/* =============\n   Pricing\n============= */\n\n.pricing-plan {\n  padding-bottom: 50px;\n}\n\n.price_card {\n  -moz-border-radius: 5px;\n  -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n  -webkit-border-radius: 5px;\n  background: #fafafa;\n  border-radius: 5px;\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n  margin-bottom: 30px;\n  padding-bottom: 20px;\n  position: relative;\n  -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n  .name {\n    display: block;\n    font-size: 16px;\n    font-weight: 700;\n    padding: 0 0 30px;\n    text-align: center;\n    width: $width;\n  }\n  button {\n    margin-top: 20px;\n  }\n}\n\n.pricing-header {\n  -moz-border-radius-topleft: 5px;\n  -moz-border-radius-topright: 5px;\n  -webkit-border-top-left-radius: 5px;\n  -webkit-border-top-right-radius: 5px;\n  border-top-left-radius: 5px;\n  border-top-right-radius: 5px;\n  color: rgb(255, 255, 255);\n}\n\n.price {\n  display: block;\n  font-size: 48px;\n  font-weight: 300;\n  padding: 30px 0 10px;\n  text-align: center;\n  width: $width;\n}\n\n.price-features {\n  color: rgb(138, 138, 138);\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  text-align: center;\n  li {\n    margin: 0 35px;\n    padding: 20px 15px;\n  }\n}\n\n.pricing-item {\n  margin: 0 0 30px;\n  position: relative;\n  text-align: center;\n}\n\n.pricing-item-inner {\n  -moz-transition: all 0.27s cubic-bezier(0.000, 0.000, 0.580, 1.000);\n  -ms-transition: all 0.27s cubic-bezier(0.000, 0.000, 0.580, 1.000);\n  -o-transition: all 0.27s cubic-bezier(0.000, 0.000, 0.580, 1.000);\n  -webkit-transition: all 0.27s cubic-bezier(0.000, 0.000, 0.580, 1.000);\n  border-radius: 7px;\n  border: 2px solid rgba(151, 160, 175, 0.2);\n  transition: all 0.27s cubic-bezier(0.000, 0.000, 0.580, 1.000);\n  vertical-align: middle;\n}\n\n.pricing-wrap {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden;\n  padding: 30px 20px;\n  position: relative;\n  text-align: center;\n}\n\n.pricing-icon {\n  font-size: 32px;\n  padding-bottom: 5px;\n  padding-top: 10px;\n  position: relative;\n  z-index: 1;\n}\n\n.pricing-title {\n  font-size: 16px;\n  font-weight: 700;\n  margin-bottom: 40px;\n  position: relative;\n  text-transform: uppercase;\n  z-index: 1;\n}\n\n.pr-list {\n  color: #97a0af;\n  font-size: 12px;\n  font-weight: 400;\n  margin: 0 -20px 30px;\n  padding: 0;\n  text-transform: uppercase;\n  li {\n    list-style: none;\n    padding: 12px 20px;\n  }\n}\n\n.pricing-num {\n  font-size: 40px;\n  font-weight: 700;\n  line-height: 1;\n  sup {\n    font-size: 18px;\n    font-weight: 400;\n    left: -3px;\n    margin-left: -7px;\n    position: relative;\n    top: -20px;\n  }\n}\n\n.pr-per {\n  color: #97a0af;\n  font-size: 12px;\n}\n\n.pr-button {\n  margin-top: 30px;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_print.scss",
    "content": "/* =============\n   Print css\n============= */\n\n@media print {\n  .logo,.breadcrumb,.page-title,.footer,.topbar,.btn-group.pull-right.m-t-15 {\n    display: none;\n    margin: 0px;\n    padding: 0px;\n  }\n\n  .left,.right-bar {\n    display: none;\n  }\n  .content,.card-box {\n    margin: 0px !important;\n  }\n  .content-page {\n    margin-left: 0px;\n    margin-top: 0px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_products.scss",
    "content": "/* =============\n  Product\n============= */\n\n.product-list-box {\n  position: relative;\n\n  img {\n    height: auto;\n    margin: 0 auto;\n    display: block;\n  }\n  .product-action {\n    position: absolute;\n    right: 20px;\n    top: 20px;\n    display: none;\n  }\n  .price-tag {\n    float: right;\n    height: 64px;\n    width: 64px;\n    text-align: center;\n    line-height: 64px;\n    background-color: rgba($muted,0.2);\n    border: 1px solid $muted;\n    border-radius: 50%;\n    margin-top: 20px;\n    font-size: 18px;\n    font-weight: 600;\n    margin-right: 10px;\n  }\n  .detail {\n    padding: 20px;\n    margin: 0px -10px -10px;\n    overflow: hidden;\n\n    h4{\n      a{\n        white-space: nowrap;\n        display: block;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        font-weight: 600;\n      }\n    }\n  }\n\n  &:hover {\n    .product-action {\n      display: block;\n    }\n  }\n}\n\n.rating {\n  ul {\n    margin-left: 0;\n    li{\n      padding: 0;\n      a {\n        color: $warning;\n        font-size: 15px;\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n.product-search {\n  border-radius: 30px;\n  padding: 7px 22px;\n  background-color: transparent !important;\n  border: 2px solid $muted !important;\n}\n\n.product-detail-box {\n  .sp-wrap {\n    max-width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_profile.scss",
    "content": "/* =============\n   Profile\n============= */\n\n.profile-detail {\n  text-align: center;\n  padding: 30px 20px;\n\n  img {\n    height: 120px;\n    width: 120px;\n  }\n\n  .status-list {\n    li {\n      padding: 0 20px;\n    }\n  }\n}\n.profile-tabs {\n  li {\n    a{\n      color: $dark !important;\n    }\n  }\n  li.active {\n    a{\n      color: $white !important;\n    }\n  }\n}\n\n.profile-pills {\n  li{\n    a{\n      color: rgba($dark,0.5) !important;\n      padding: 0 10px;\n      line-height: 30px !important;\n\n      i {\n        font-size: 14px;\n      }\n    }\n  }\n}\n\n.comment {\n  padding-top: 12px;\n\n  .comment-avatar {\n    position: relative;\n    -webkit-border-radius: 3px;\n    -webkit-background-clip: padding-box;\n    -moz-border-radius: 3px;\n    -moz-background-clip: padding;\n    border-radius: 3px;\n    background-clip: padding-box;\n    display: block;\n    float: left;\n    height: 32px;\n    width: 32px;\n  }\n  .comment-body {\n    float: none;\n    margin-left: 40px;\n    position: relative;\n    margin-bottom: 20px;\n  }\n  .comment-text {\n    border: 1px solid darken($white,5%);\n    border-radius: 2px;\n    padding: 7px 12px 8px;\n    background-color: darken($white,2%);\n  }\n  .comment-header {\n    font-size: 12px;\n    padding-bottom: 2px;\n\n    a{\n      color: $dark;\n      font-weight: bold;\n    }\n    span {\n      color: $muted;\n      display: inline-block;\n      font-size: 11px;\n      margin-left: 5px;\n    }\n  }\n  .comment-footer {\n    display: block;\n    font-size: 12px;\n    padding: 4px 12px 0;\n\n    i {\n      font-size: 13px;\n      margin-right: 7px;\n    }\n  }\n  .comment-footer, .comment-footer a {\n    color: rgba($dark, 0.5);\n\n    &:hover {\n      color: $custom;\n    }\n  }\n}\n.comment>.comment {\n  margin-left: 32px !important;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_progressbars.scss",
    "content": "/* =============\n   Progressbars\n============= */\n\n\n.progress {\n  -webkit-box-shadow: none !important;\n  background-color: darken($white,10%);\n  box-shadow: none !important;\n  height: 10px;\n  margin-bottom: 18px;\n  overflow: hidden;\n}\n\n.progress-bar {\n  box-shadow: none;\n  font-size: 8px;\n  font-weight: 600;\n  line-height: 12px;\n}\n\n.progress.progress-sm {\n  height: 5px !important;\n  .progress-bar {\n    font-size: 8px;\n    line-height: 5px;\n  }\n}\n\n.progress.progress-md {\n  height: 15px !important;\n  .progress-bar {\n    font-size: 10.8px;\n    line-height: 14.4px;\n  }\n}\n\n.progress.progress-lg {\n  height: 1rem !important;\n  .progress-bar {\n    font-size: 12px;\n    line-height: 20px;\n  }\n}\n\n.progress-bar-primary {\n  background-color: $primary;\n}\n\n.progress-bar-success {\n  background-color: $success;\n}\n\n.progress-bar-info {\n  background-color: $info;\n}\n\n.progress-bar-warning {\n  background-color: $warning;\n}\n\n.progress-bar-danger {\n  background-color: $danger;\n}\n\n.progress-bar-inverse {\n  background-color: $inverse;\n}\n\n.progress-bar-purple {\n  background-color: $purple;\n}\n\n.progress-bar-pink {\n  background-color: $pink;\n}\n.progress-bar-custom {\n  background-color: $custom;\n}\n\n.progress-animated {\n  -webkit-animation-duration: 5s;\n  -webkit-animation-name: animationProgress;\n  -webkit-transition: 5s all;\n  animation-duration: 5s;\n  animation-name: animationProgress;\n  transition: 5s all;\n}\n\n/* Progressbar Vertical */\n.progress-vertical {\n  min-height: 250px;\n  height: 250px;\n  width: 10px;\n  position: relative;\n  display: inline-block;\n  margin-bottom: 0;\n  margin-right: 20px;\n\n  .progress-bar {\n    width: 100%;\n  }\n}\n.progress-vertical-bottom{\n  min-height: 250px;\n  height: 250px;\n  position: relative;\n  width: 10px;\n  display: inline-block;\n  margin-bottom: 0;\n  margin-right: 20px;\n\n  .progress-bar {\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n  }\n}\n\n.progress-vertical.progress-sm,.progress-vertical-bottom.progress-sm {\n  width: 5px !important;\n  .progress-bar {\n    font-size: 8px;\n    line-height: 5px;\n  }\n}\n\n.progress-vertical.progress-md,.progress-vertical-bottom.progress-md {\n  width: 15px !important;\n  .progress-bar {\n    font-size: 10.8px;\n    line-height: 14.4px;\n  }\n}\n\n.progress-vertical.progress-lg,.progress-vertical-bottom.progress-lg {\n  width: 20px !important;\n  .progress-bar {\n    font-size: 12px;\n    line-height: 20px;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_responsive.scss",
    "content": "\n@media only screen and (max-width: 6000px) and (min-width: 700px) {\n  .wrapper.right-bar-enabled {\n    .right-bar {\n      right: 0;\n      z-index: 99;\n    }\n  }\n}\n\n@media (min-width: 768px) and (max-width: 1024px) {\n\n  .email-msg {\n    display: none;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  body {\n    overflow-x: hidden;\n  }\n}\n\n@media (max-width: 767px) {\n  body {\n    overflow-x: hidden;\n  }\n\n  .app-search {\n    display: none;\n  }\n  .left.side-menu,.sidebar-inner.slimscrollleft {\n    overflow: auto !important;\n  }\n\n  .enlarged {\n    .left.side-menu {\n      margin-left: -75px;\n    }\n  }\n  .content-page {\n    margin-left: 0px !important;\n  }\n  .footer {\n    left: 0px !important;\n  }\n\n  .mobile-sidebar {\n    left: 0px;\n  }\n\n  .mobile-content {\n    left: 250px;\n    right: -250px;\n  }\n\n  .wrapper-page {\n    width: 90%;\n  }\n\n  .wizard > .steps > ul > li {\n    width: 100%;\n  }\n  .wizard > .content {\n    padding: 0px !important;\n  }\n  .wizard > .content > .body {\n    float: none;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    padding: 0%;\n  }\n  .wizard.vertical > .steps {\n    display: inline;\n    float: none;\n    width: 100%;\n  }\n  .wizard.vertical > .content {\n    display: inline;\n    float: none;\n    margin: 0%;\n    width: 100%;\n  }\n\n  .navbar-nav {\n    .open {\n      .dropdown-menu {\n        background-color: #ffffff;\n        box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .26);\n        left: auto;\n        position: absolute;\n        right: 0;\n      }\n    }\n  }\n\n  .todo-send {\n    margin-top: 10px;\n    padding-left: 15px;\n  }\n\n  .chat-inputbar {\n    padding-left: 15px;\n  }\n\n  .chat-send {\n    margin-top: 10px;\n    padding-left: 15px;\n    padding-right: 15px;\n  }\n\n  .dataTables_wrapper {\n    .col-xs-6 {\n      width: 100%;\n      text-align: left;\n    }\n  }\n  .product-search {\n    margin-bottom: 30px;\n  }\n  .top-menu-item-xs {\n    display: inline-flex !important;\n  }\n\n  .dropdown-menu-lg {\n    width: 240px !important;\n  }\n  .page-header-box {\n    .breadcrumb {\n      display: none;\n    }\n  }\n}\n\n@media (max-width: 480px) {\n  .navbar-custom {\n    margin-left: 70px !important;\n  }\n  .side-menu {\n    z-index: 10 !important;\n  }\n\n  .button-menu-mobile {\n    display: block;\n  }\n\n  .search-bar {\n    display: none !important;\n  }\n\n  .ms-container {\n    width: 100%;\n  }\n}\n\n@media (max-width: 420px) {\n  .hide-phone {\n    display: none !important;\n  }\n}\n\n/* Container-alt */\n@media (min-width: 768px) {\n  .container-alt {\n    width: 750px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container-alt {\n    width: 970px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container-alt {\n    width: 1170px;\n  }\n}\n@media (max-width: 419px) {\n  .topbar-left {\n    width: 70px !important;\n  }\n  .logo {\n    .icon-c-logo {\n      display: inline-block !important;\n      line-height: 58px !important;\n    }\n    span {\n      display: none !important;\n    }\n  }\n  .content-page {\n    margin-left: 70px;\n  }\n  .forced {\n    .side-menu.left {\n      box-shadow: 0 12px 12px rgba(0, 0, 0, 0.1);\n    }\n  }\n  .enlarged {\n    .side-menu.left {\n      box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) !important;\n    }\n  }\n  .conversation-list .conversation-text,.conversation-list .odd .conversation-text {\n    width: 100% !important;\n  }\n\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_search-result.scss",
    "content": "/* =============\n  Search result\n============= */\n\n.search-result-box {\n  .tab-content {\n    padding: 30px 30px 10px 30px;\n    box-shadow: none;\n  }\n\n  .search-item {\n    padding-bottom: 20px;\n    border-bottom: 1px solid $light5;\n    margin-bottom: 30px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_sitemap.scss",
    "content": "/* =============\n  sitemap\n============= */\n\n.sitemap-wrapper {\n  a{\n    color: $lightdark5;\n\n    &:hover {\n      color: $custom;\n    }\n  }\n  h5{\n    font-weight: 600;\n    font-size: 16px;\n    line-height: 32px;\n\n    i {\n      padding-right: 10px;\n    }\n  }\n\n  ul {\n    padding-left: 30px;\n\n    li {\n      a{\n        font-size: 15px;\n        line-height: 30px;\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_sweet-alert.scss",
    "content": "/* =========== */\n/* Sweet Alert */\n/* =========== */\n\n.sweet-alert {\n  box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n  border-radius: 3px;\n  p {\n    font-size: 14px;\n    line-height: 22px;\n  }\n  .icon.success  {\n    .placeholder {\n      border: 4px solid rgba($success,0.3);\n    }\n    .line {\n      background-color: $success;\n    }\n  }\n  .icon.warning {\n    border-color: $warning;\n  }\n  .icon.info {\n    border-color: $info;\n  }\n  .btn-warning:focus,.btn-info:focus,.btn-success:focus,.btn-danger:focus,.btn-default:focus {\n    box-shadow: none;\n  }\n  .btn-lg {\n    font-size: 15px !important;\n  }\n}\n\n/* =========== */\n/* Sweet Alert 2*/\n/* =========== */\n\n.swal2-modal {\n  box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n  border-radius: 3px;\n\n  .swal2-title {\n    font-size: 28px;\n  }\n  .swal2-content {\n    font-size: 16px;\n  }\n  .swal2-spacer {\n    margin: 10px 0;\n  }\n  .swal2-file, .swal2-input, .swal2-textarea {\n    border: 2px solid $muted;\n    font-size: 16px;\n    box-shadow: none !important;\n  }\n}\n\n.swal2-icon.swal2-question {\n  color: $custom;\n  border-color: $custom;\n}\n\n.swal2-icon.swal2-success {\n  border-color: $success;\n\n  .line {\n    background-color: $success;\n  }\n\n  .placeholder {\n    border-color: $success;\n  }\n}\n\n.swal2-icon.swal2-warning {\n  color: $warning;\n  border-color: $warning;\n}\n\n.swal2-icon.swal2-error {\n  border-color: $danger;\n  .line {\n    background-color: $danger;\n  }\n}\n.swal2-modal .swal2-file:focus, .swal2-modal .swal2-input:focus, .swal2-modal .swal2-textarea:focus {\n  outline: 0;\n  border: 2px solid $custom;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_tables.scss",
    "content": "/* =============\n   Tables\n============= */\n\n.table {\n  margin-bottom: 10px;\n}\n\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid $light5;\n  font-weight: 500;\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n}\n\ntable.focus-on {\n  tbody {\n    tr.focused {\n      th {\n        background-color: $custom;\n        color: $white;\n      }\n      td {\n        background-color: $custom;\n        color: $white;\n      }\n    }\n  }\n}\n\n.fixed-table-container tbody .selected td {\n  background-color: darken($white,3%);\n}\n\n.modal-block {\n  background: transparent;\n  margin: 40px auto;\n  max-width: 600px;\n  padding: 0;\n  position: relative;\n  text-align: left;\n}\n\n\n/* Data table */\n#datatable-editable {\n  .actions {\n    a {\n      padding: 5px;\n    }\n  }\n  .form-control {\n    background-color: $white;\n    width: 100%;\n  }\n  .fa-trash-o {\n    color: $danger;\n  }\n  .fa-times {\n    color: $danger;\n  }\n  .fa-pencil {\n    color: #29b6f6;\n  }\n  .fa-save {\n    color: #33b86c;\n  }\n}\n\n#datatable {\n  td {\n    font-weight: normal;\n  }\n}\n\ndiv.dataTables_paginate {\n  ul.pagination {\n    margin-top: 30px;\n  }\n}\n\ndiv.dataTables_info {\n  padding-top: 38px;\n}\n\n.dt-buttons {\n  float: left;\n}\n\n.dt-button-collection.dropdown-menu {\n  visibility: inherit;\n  opacity: 1;\n  display: none;\n  margin: 0 !important;\n}\n\ndiv#datatable-buttons_info {\n  float: left;\n}\n\n#datatable-editable .form-control {\n  background-color: $white;\n  width: auto;\n  height: 20px;\n}\n\n/* Footable */\n.footable-odd {\n  background-color: $white;\n}\n.footable-detail-show {\n  background-color: darken($white,5%);\n}\n.footable-row-detail {\n  background-color: #F0F4F7;\n}\n.footable-pagination {\n  li {\n    margin-left: 5px;\n    display: inline-block;\n    float: left;\n\n    a{\n      position: relative;\n      display: block;\n      padding: .5rem .75rem;\n      margin-left: -1px;\n      line-height: 1.25;\n      color: $dark;\n      background-color: $white;\n      border: 1px solid $light;\n    }\n  }\n  li.active {\n    a {\n      color: $white;\n    }\n  }\n}\n\n/* Bootstrap Table */\n.fixed-table-pagination .pagination-detail, .fixed-table-pagination div.pagination {\n  margin-top: 20px;\n}\n\n.fixed-table-container {\n  border: 1px solid darken($white,5%) !important;\n}\n.bootstrap-table .table>thead>tr>th {\n  border-bottom: 2px solid darken($white,5%);\n  background: darken($white,5%);\n}\n.fixed-table-container thead th .th-inner {\n  padding: 9px 12px;\n}\n.bootstrap-table .table, .bootstrap-table .table>tbody>tr>td, .bootstrap-table .table>tbody>tr>th, .bootstrap-table .table>tfoot>tr>td, .bootstrap-table .table>tfoot>tr>th, .bootstrap-table .table>thead>tr>td {\n  padding: 8px 12px !important;\n}\n\n.fixed-table-pagination {\n  .pagination a {\n    display: block;\n    border-radius: 3px;\n  }\n  .page-number.active {\n    a {\n      color: $white;\n    }\n  }\n  .page-list {\n    .dropdown-menu {\n      a {\n        color: $dark;\n        display: block;\n      }\n    }\n  }\n}\n\n/* Tablesaw */\n.tablesaw thead {\n  background: darken($white,5%);\n  background-image: none;\n  border: none;\n}\n.tablesaw thead th {\n  text-shadow: none;\n  letter-spacing: 0.06em;\n}\n.tablesaw thead tr:first-child th {\n  padding-top: 1.1em;\n  padding-bottom: 0.9em;\n}\n.tablesaw thead tr:first-child th {\n  font-weight: 600;\n  font-family: inherit;\n  border: none;\n}\n.tablesaw td, .tablesaw tbody th {\n  font-size: inherit;\n  line-height: inherit;\n  padding: 10px !important;\n}\n.tablesaw-stack tbody tr ,.tablesaw tbody tr{\n  border-bottom: none;\n}\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after, .tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  font-family: FontAwesome;\n  font-size: 10px;\n}\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-ascending button:after {\n  content: \"\\f176\";\n}\n.tablesaw-sortable .tablesaw-sortable-head.tablesaw-sortable-descending button:after {\n  content: \"\\f175\";\n}\n.tablesaw-bar .btn-select.btn-small:after, .tablesaw-bar .btn-select.btn-micro:after {\n  font-size: 8px;\n  padding-right: 10px;\n}\n.tablesaw-swipe .tablesaw-cell-persist {\n  box-shadow: none;\n}\n.tablesaw-enhanced .tablesaw-bar .btn {\n  text-shadow: none;\n  background-image: none;\n}\n.tablesaw-enhanced .tablesaw-bar .btn.btn-select {\n  &:hover {\n    background: $white;\n  }\n}\n.tablesaw-enhanced .tablesaw-bar .btn:hover, .tablesaw-enhanced .tablesaw-bar .btn:focus,.tablesaw-enhanced .tablesaw-bar .btn:active {\n  color: $custom !important;\n  background-color: $light5;\n  outline: none !important;\n  box-shadow: none !important;\n  background-image: none;\n}\n\n.tablesaw-columntoggle-popup {\n  .btn-group {\n    display: block;\n  }\n}\n\n/* Fixed table */\n.sticky-table-header {\n  top: 70px !important;\n}\n\n.table-wrapper {\n  .btn-toolbar {\n    display: block;\n  }\n  .dropdown-menu {\n    left: auto;\n    right: 0;\n  }\n}\n\n\n/* Key Table */\ntable.dataTable th.focus,table.dataTable td.focus{outline:3px solid $custom !important;outline-offset:-1px}\n\n/* ColVid Tables */\ndiv.ColVis {\n  float: none;\n  margin-right: 30px;\n}\nbutton.ColVis_Button,.ColVis_Button:hover {\n  float: none;\n  border-radius: 3px;\n  outline: none !important;\n  background: none;\n  box-shadow: none;\n  color: $white !important;\n  background-color: $custom !important;\n  border: 1px solid $custom !important;\n}\n.dataTables_length {\n  float: left;\n}\ndiv.ColVis_collectionBackground {\n  background-color: transparent;\n}\nul.ColVis_collection {\n  padding: 10px 0 0 0;\n  background-color: $white;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n  border: none;\n\n  li{\n    background: transparent !important;\n    padding: 3px 10px !important;\n    border: none !important;\n    box-shadow: none !important;\n  }\n}\n#datatable-colvid_info {\n  float: left;\n}\n\n\n/* JsGrid table */\n.jsgrid-cell {\n  padding: .8em;\n}\n\n.jsgrid-selected-row > .jsgrid-cell {\n  background: darken($light-alt,3%);\n  border-color: darken($light-alt,5%);\n\n  .jsgrid-button {\n    background-color: rgba($dark,0.1);\n  }\n\n}\n\n.jsgrid-edit-row > .jsgrid-cell,.jsgrid-insert-row>.jsgrid-cell {\n  background: darken($light-alt, 3%);\n\n  .jsgrid-button {\n    background-color: rgba($dark,0.1);\n  }\n}\n\n.jsgrid input, .jsgrid select, .jsgrid textarea {\n  border: 1px solid darken($light-alt,10%);\n  padding: .4em .6em;\n}\n\n.jsgrid-pager-container {\n  margin-top: 10px;\n}\n.jsgrid-pager-page {\n  padding: 0;\n  margin: 0 2px;\n}\n.jsgrid-pager-page a,.jsgrid-pager-current-page{\n  background-color: #eee;\n  border-radius: 50%;\n  height: 24px;\n  width: 24px;\n  display: inline-block;\n  text-align: center;\n  line-height: 24px;\n  color: $lightdark7;\n}\n.jsgrid-pager-page.jsgrid-pager-current-page {\n  background-color: $custom;\n  color: $white;\n}\n\n.jsgrid-pager-nav-button {\n  a{\n    color: $lightdark7;\n    font-weight: 500;\n\n    &:hover {\n      color: $custom;\n    }\n  }\n}\n\n.jsgrid .jsgrid-button {\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  background-image: url(\"../images/download.png\");\n  background-color: #eee;\n\n  &:hover {\n    opacity: 0.9;\n    background-color: rgba($dark,0.2);\n  }\n}\n\n.jsgrid-search-mode-button {\n  background-position: 0 -295px;\n}\n.jsgrid-insert-button {\n  background-position: 0 -160px;\n}\n\n.jsgrid-header-sort:before {\n  position: absolute;\n}\n.jsgrid-header-cell {\n  text-align: center !important;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_tabs-accordions.scss",
    "content": "/* Tabs-Accordions */\n\n.tabs {\n  background-color: $white;\n  margin: 0 auto;\n  padding: 0;\n  position: relative;\n  white-space: nowrap;\n  width: $width;\n  li.tab {\n    background-color: $white;\n    display: block;\n    float: left;\n    margin: 0;\n    text-align: center;\n    a {\n      -moz-transition: color 0.28s ease;\n      -ms-transition: color 0.28s ease;\n      -o-transition: color 0.28s ease;\n      -webkit-transition: color 0.28s ease;\n      color: #ee6e73;\n      display: block;\n      height: 100%;\n      text-decoration: none;\n      transition: color 0.28s ease;\n      width: $width;\n    }\n    a.active {\n      color: $custom !important;\n    }\n  }\n  .indicator {\n    background-color: $custom;\n    bottom: 0;\n    height: 2px;\n    position: absolute;\n    will-change: left, right;\n  }\n}\n\n.tabs-top {\n  .indicator {\n    top: 0;\n  }\n}\n\n.nav-pills {\n  li {\n    a{\n      line-height: 36px !important;\n    }\n  }\n  li.active{\n    a{\n      background-color: $custom !important;\n\n      &:hover {\n        background-color: $custom !important;\n      }\n      &:focus {\n        background-color: $custom !important;\n      }\n    }\n  }\n}\n.nav.nav-tabs + .tab-content {\n  background: $white;\n  margin-bottom: 30px;\n  padding: 30px;\n}\n\n.tabs-vertical-env {\n  margin-bottom: 30px;\n  .tab-content {\n    background: $white;\n    display: table-cell;\n    margin-bottom: 30px;\n    padding: 30px;\n    vertical-align: top;\n  }\n  .nav.tabs-vertical {\n    display: table-cell;\n    min-width: 120px;\n    vertical-align: top;\n    width: 150px;\n    li > a {\n      color: $lightdark3;\n      text-align: center;\n      white-space: nowrap;\n    }\n    li > a.active {\n      background-color: $white;\n      border: 0;\n    }\n  }\n}\n\n.nav.nav-tabs > li.active > a {\n  background-color: $white;\n  border: 0;\n}\n.nav-pills > .active > a > .badge {\n  color: $custom;\n}\n.nav.nav-tabs > li > a,.nav.tabs-vertical > li > a {\n  background-color: transparent;\n  border-radius: 0;\n  border: none;\n  color: #505461 !important;\n  cursor: pointer;\n  line-height: 50px;\n  padding-left: 20px;\n  padding-right: 20px;\n  letter-spacing: 0.03em;\n  font-weight: 500;\n\n  &:hover {\n    color: $custom !important;\n  }\n}\n\n.tab-content {\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  color: #777777;\n}\n\n.nav.nav-tabs > li {\n  &:last-of-type {\n    a {\n      margin-right: 0;\n    }\n  }\n}\n\n.nav.nav-tabs {\n  border-bottom: 0;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.navtab-bg {\n  background-color: darken($white,7%);\n}\n\n.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus,\n.tabs-vertical-env .nav.tabs-vertical li.active > a {\n  border: none;\n}\n\n.nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover, .tabs-vertical > li > a.active,\n.tabs-vertical > li > a.active:focus, .tabs-vertical > li > a.active:hover {\n  color: $custom !important;\n}\n\n.tabs-vertical-env {\n  .tab-content {\n    margin-bottom: 0;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_taskboard.scss",
    "content": "/* =============\n  Task board\n============= */\n\n.taskList {\n  li {\n    background-color: $light-alt;\n    border: 1px solid rgba($muted,0.2);\n    border-left-width: 3px;\n    border-radius: 3px;\n    padding: 10px;\n    margin-bottom: 15px;\n  }\n  .task-success {\n    border-left-color: $success;\n  }\n  .task-info {\n    border-left-color: $info;\n  }\n  .task-warning {\n    border-left-color: $warning;\n  }\n  .task-danger {\n    border-left-color: $danger;\n  }\n  a {\n    font-size: 13px;\n  }\n  .checkbox {\n    margin-left: 20px;\n  }\n}\n\n.task-placeholder {\n  border: 1px dashed rgba($muted,0.5) !important;\n  background-color: rgba($muted,0.2) !important;\n  padding: 20px;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_timeline.scss",
    "content": "/* =============\n   Timeline\n============= */\n\n.cd-container {\n  width: 90%;\n  max-width: 1170px;\n  margin: 0 auto;\n}\n.cd-container::after {\n  content: '';\n  display: table;\n  clear: both;\n}\n#cd-timeline {\n  margin-bottom: 2em;\n  margin-top: 2em;\n  padding: 2em 0;\n  position: relative;\n  &::before {\n    background: $white;\n    content: '';\n    height: 100%;\n    left: 18px;\n    position: absolute;\n    top: 0;\n    width: 4px;\n  }\n}\n@media only screen and (min-width: 1170px) {\n  #cd-timeline {\n    margin-bottom: 3em;\n    margin-top: 3em;\n    &::before {\n      left: 50%;\n      margin-left: -2px;\n    }\n  }\n}\n\n.cd-timeline-block {\n  margin: 2em 0;\n  position: relative;\n  &:after {\n    clear: both;\n    content: \"\";\n    display: table;\n  }\n}\n.cd-timeline-block:first-child {\n  margin-top: 0;\n}\n.cd-timeline-block:last-child {\n  margin-bottom: 0;\n}\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-block {\n    margin: 4em 0;\n  }\n  .cd-timeline-block:first-child {\n    margin-top: 0;\n  }\n  .cd-timeline-block:last-child {\n    margin-bottom: 0;\n  }\n}\n.cd-timeline-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 40px;\n  height: 40px;\n  border-radius: 50%;\n  box-shadow: 0 0 0 4px white, inset 0 2px 0 rgba(0, 0, 0, 0.08), 0 3px 0 4px rgba(0, 0, 0, 0.05);\n  text-align: center;\n  line-height: 40px;\n  font-size: 20px;\n  color: #fff;\n}\n.cd-timeline-img.cd-success {\n  background: $success;\n}\n.cd-timeline-img.cd-info {\n  background: $info;\n}\n.cd-timeline-img.cd-pink {\n  background: $pink;\n}\n.cd-timeline-img.cd-danger {\n  background: $danger;\n}\n.cd-timeline-img.cd-primary {\n  background: $primary;\n}\n.cd-timeline-img.cd-warning {\n  background: $warning;\n}\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-img {\n    width: 60px;\n    height: 60px;\n    line-height: 60px;\n    left: 50%;\n    margin-left: -30px;\n    -webkit-transform: translateZ(0);\n    -webkit-backface-visibility: hidden;\n  }\n  .cssanimations .cd-timeline-img.is-hidden {\n    visibility: hidden;\n  }\n  .cssanimations .cd-timeline-img.bounce-in {\n    visibility: visible;\n    -webkit-animation: cd-bounce-1 0.6s;\n    -moz-animation: cd-bounce-1 0.6s;\n    animation: cd-bounce-1 0.6s;\n  }\n}\n\n\n.cd-timeline-content {\n  -moz-box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  -webkit-box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  background: white;\n  border-radius: 0;\n  box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);\n  margin-left: 60px;\n  padding: 1em;\n  position: relative;\n  img {\n    display: block;\n    width: 100%;\n  }\n  &:after {\n    clear: both;\n    content: \"\";\n    display: table;\n  }\n  h2 {\n    margin-top: 0;\n  }\n  p {\n    color: #666666;\n    font-size: 14px;\n    margin: 10px 0 10px 0;\n  }\n  .cd-read-more {\n    background: #acb7c0;\n    border-radius: 0.25em;\n    color: white;\n    display: inline-block;\n    float: right;\n    font-size: 14px;\n    padding: .8em 1em;\n  }\n  .cd-date {\n    display: inline-block;\n    font-size: 14px;\n  }\n  h3 {\n    font-size: 21px;\n    margin: 0;\n  }\n}\n.no-touch .cd-timeline-content .cd-read-more:hover {\n  background-color: #bac4cb;\n}\n.cd-timeline-content .cd-date {\n  float: left;\n  padding: .8em 0;\n  opacity: .7;\n}\n.cd-timeline-content::before {\n  content: '';\n  position: absolute;\n  top: 16px;\n  right: 100%;\n  height: 0;\n  width: 0;\n  border: 7px solid transparent;\n  border-right: 7px solid white;\n}\n@media only screen and (min-width: 1170px) {\n  .cd-timeline-content {\n    margin-left: 0;\n    padding: 1.6em;\n    width: 45%;\n  }\n  .cd-timeline-content::before {\n    top: 24px;\n    left: 100%;\n    border-color: transparent;\n    border-left-color: white;\n  }\n  .cd-timeline-content .cd-read-more {\n    float: left;\n  }\n  .cd-timeline-content .cd-date {\n    position: absolute;\n    width: 100%;\n    left: 122%;\n    top: 6px;\n  }\n  .cd-timeline-block:nth-child(even) .cd-timeline-content {\n    float: right;\n  }\n  .cd-timeline-block:nth-child(even) .cd-timeline-content::before {\n    top: 24px;\n    left: auto;\n    right: 100%;\n    border-color: transparent;\n    border-right-color: white;\n  }\n  .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more {\n    float: right;\n  }\n  .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-date {\n    left: auto;\n    right: 122%;\n    text-align: right;\n  }\n  .cssanimations .cd-timeline-content.is-hidden {\n    visibility: hidden;\n  }\n  .cssanimations .cd-timeline-content.bounce-in {\n    visibility: visible;\n    -webkit-animation: cd-bounce-2 0.6s;\n    -moz-animation: cd-bounce-2 0.6s;\n    animation: cd-bounce-2 0.6s;\n  }\n}\n\n@media only screen and (min-width: 1170px) {\n  .cssanimations .cd-timeline-block:nth-child(even) .cd-timeline-content.bounce-in {\n    -webkit-animation: cd-bounce-2-inverse 0.6s;\n    -moz-animation: cd-bounce-2-inverse 0.6s;\n    animation: cd-bounce-2-inverse 0.6s;\n  }\n}\n\n\n\n/* Time line 2 */\n\n.timeline-2 {\n  border-left: 2px solid $muted;\n  position: relative;\n  .time-item {\n    &:after {\n      background-color: $white;\n      border-color: $muted;\n      border-radius: 10px;\n      border-style: solid;\n      border-width: 2px;\n      bottom: 0;\n      content: '';\n      height: 14px;\n      left: 0;\n      margin-left: -8px;\n      position: absolute;\n      top: 5px;\n      width: 14px;\n    }\n  }\n}\n\n.time-item {\n  border-color: #dee5e7;\n  padding-bottom: 1px;\n  position: relative;\n  &:before {\n    content: \" \";\n    display: table;\n  }\n  &:after {\n    background-color: $white;\n    border-color: $muted;\n    border-radius: 10px;\n    border-style: solid;\n    border-width: 2px;\n    bottom: 0;\n    content: '';\n    height: 14px;\n    left: 0;\n    margin-left: -8px;\n    position: absolute;\n    top: 5px;\n    width: 14px;\n  }\n}\n\n.time-item-item {\n  &:after {\n    content: \" \";\n    display: table;\n  }\n}\n\n.item-info {\n  margin-bottom: 15px;\n  margin-left: 15px;\n  p {\n    margin-bottom: 10px !important;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_tour.scss",
    "content": "/* =============\n   Tour page\n============= */\n\ndiv.hopscotch-bubble {\n  border: 3px solid $dark;\n  border-radius: 5px;\n  box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n\n  .hopscotch-next {\n    background-color: $dark !important;\n    background-image: none !important;\n    border-color: $dark !important;\n    text-shadow: none !important;\n    margin: 0 0 0 5px !important;\n  }\n  .hopscotch-prev {\n    background-color: $dark !important;\n    background-image: none !important;\n    border-color: $dark !important;\n    text-shadow: none !important;\n    color: $white !important;\n  }\n}\ndiv.hopscotch-bubble .hopscotch-bubble-number {\n  background: $dark;\n  padding: 0;\n  border-radius: 50%;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow-border {\n  border-right: 19px solid $dark;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow {\n  border-left: 19px solid $dark;\n  left: -2px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.left .hopscotch-bubble-arrow {\n  border: none;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.right .hopscotch-bubble-arrow-border {\n  border-left: 0 solid $dark;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow {\n  border-bottom: 19px solid $dark;\n  top: 0;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.up .hopscotch-bubble-arrow-border {\n  border-bottom: 0 solid rgba(0,0,0,.5);\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow {\n  border-top: 19px solid $dark;\n  top: -2px;\n}\ndiv.hopscotch-bubble .hopscotch-bubble-arrow-container.down .hopscotch-bubble-arrow-border {\n  border-top: 0 solid rgba(0,0,0,.5);\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_treeview.scss",
    "content": "/* =============\n   Tree view page\n============= */\n\n\n.jstree-default {\n  .jstree-clicked {\n    background: rgba($custom, 0.4);\n    box-shadow: none;\n  }\n  .jstree-hovered {\n    background: rgba($custom, 0.2);\n    box-shadow: none;\n  }\n  .jstree-wholerow-clicked {\n    background: rgba($custom, 0.4);\n  }\n  .jstree-wholerow-hovered {\n    background: rgba($custom, 0.2);\n  }\n  .zmdi {\n    font-size: 16px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_variables.scss",
    "content": "@import url('https://fonts.googleapis.com/css?family=Roboto:400,500,700');\n\n$custom: #62a3ff;\n\n\n// Color variables\n$primary: #4285f4;\n$success: #2bbbad;\n$info: #33b5e5;\n$warning: #ff8800;\n$danger: #ef4554;\n\n$dark: #36404a;\n$purple: #7266ba;\n$pink: #fb6d9d;\n$inverse: #4c5667;\n$muted: #98a6ad;\n\n$white: #ffffff;\n\n$lightdark5: #555555;\n\n$light: #eeeeee;\n$lightdark3: #333333;\n$lightdark4: #444444;\n$light5: #ebeff2;\n$light3: #f3f3f3;\n$light9: #f9f9f9;\n$light-alt: #fafafa;\n$lightdark7: #797979;\n$lightdark-alt: #cccccc;\n$lightdark: #f4f8fb;\n$lightgray: #7a8c9a;\n\n\n$body-font-size: 14px;\n$body-bg: #f5f5f5;\n\n\n// Width variables\n$width: 100%;\n\n\n// Height variables\n$height: 100%;\n\n\n$font-primary: 'Roboto', sans-serif;\n\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_waves.scss",
    "content": "/*!\n * Waves v0.6.0\n * http://fian.my.id/Waves\n *\n * Copyright 2014 Alfiana E. Sibuea and other contributors\n * Released under the MIT license\n * https://github.com/fians/Waves/blob/master/LICENSE\n */\n\n.waves-effect {\n  position: relative;\n  cursor: pointer;\n  display: inline-block;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: transparent;\n  vertical-align: middle;\n  z-index: 1;\n  will-change: opacity, transform;\n  -webkit-transition: all 0.3s ease-out;\n  -moz-transition: all 0.3s ease-out;\n  -o-transition: all 0.3s ease-out;\n  -ms-transition: all 0.3s ease-out;\n  transition: all 0.3s ease-out;\n}\n.waves-effect {\n  .waves-ripple {\n    position: absolute;\n    border-radius: 50%;\n    width: 20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    opacity: 0;\n    background: rgba(0, 0, 0, 0.2);\n    -webkit-transition: all 0.7s ease-out;\n    -moz-transition: all 0.7s ease-out;\n    -o-transition: all 0.7s ease-out;\n    -ms-transition: all 0.7s ease-out;\n    transition: all 0.7s ease-out;\n    -webkit-transition-property: -webkit-transform, opacity;\n    -moz-transition-property: -moz-transform, opacity;\n    -o-transition-property: -o-transform, opacity;\n    transition-property: transform, opacity;\n    -webkit-transform: scale(0);\n    -moz-transform: scale(0);\n    -ms-transform: scale(0);\n    -o-transform: scale(0);\n    transform: scale(0);\n    pointer-events: none;\n  }\n}\n.waves-effect.waves-light {\n  .waves-ripple {\n    background-color: rgba(255, 255, 255, 0.45);\n  }\n}\n.waves-effect.waves-red {\n  .waves-ripple {\n    background-color: rgba(244, 67, 54, 0.7);\n  }\n}\n.waves-effect.waves-yellow {\n  .waves-ripple {\n    background-color: rgba(255, 235, 59, 0.7);\n  }\n}\n.waves-effect.waves-orange {\n  .waves-ripple {\n    background-color: rgba(255, 152, 0, 0.7);\n  }\n}\n.waves-effect.waves-purple {\n  .waves-ripple {\n    background-color: rgba(156, 39, 176, 0.7);\n  }\n}\n.waves-effect.waves-green {\n  .waves-ripple {\n    background-color: rgba(76, 175, 80, 0.7);\n  }\n}\n.waves-effect.waves-teal {\n  .waves-ripple {\n    background-color: rgba(0, 150, 136, 0.7);\n  }\n}\n.waves-notransition {\n  -webkit-transition: none !important;\n  -moz-transition: none !important;\n  -o-transition: none !important;\n  -ms-transition: none !important;\n  transition: none !important;\n}\n.waves-circle {\n  -webkit-transform: translateZ(0);\n  -moz-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  -o-transform: translateZ(0);\n  transform: translateZ(0);\n  text-align: center;\n  width: 2.5em;\n  height: 2.5em;\n  line-height: 2.5em;\n  border-radius: 50%;\n  -webkit-mask-image: none;\n}\n.waves-input-wrapper {\n  border-radius: 0.2em;\n  vertical-align: bottom;\n  .waves-button-input {\n    position: relative;\n    top: 0;\n    left: 0;\n    z-index: 1;\n  }\n}\n.waves-block {\n  display: block;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_widgets.scss",
    "content": "/* =============\n   Widgets\n============= */\n\n/* Widget-box styles */\n\n.widget-box-1 {\n  i.inform {\n    font-size: 20px;\n    cursor: pointer;\n  }\n  h4{\n    margin-bottom: 5px;\n    margin-top: 0;\n    font-size: 16px;\n  }\n  h2{\n    margin: 20px;\n  }\n  p{\n    margin-bottom: 0;\n  }\n}\n.widget-s-1 {\n  border-radius: 6px;\n}\n\n/* Widget (background-icon) */\n.widget-bg-color-icon {\n\n  .bg-icon {\n    height: 80px;\n    width: 80px;\n    text-align: center;\n    border-radius: 50%;\n\n    i{\n      font-size: 32px;\n      line-height: 80px;\n    }\n  }\n\n}\n\n.mini-stat-icon {\n  -moz-border-radius: 100%;\n  -webkit-border-radius: 100%;\n  border-radius: 100%;\n  background-color: rgba(255,255,255,0.2);\n  display: inline-block;\n  float: left;\n  font-size: 30px;\n  height: 60px;\n  line-height: 60px;\n  margin-right: 10px;\n  text-align: center;\n  width: 60px;\n}\n\n.mini-stat-info {\n  padding-top: 2px;\n  color: $light;\n  span {\n    color: $white;\n    display: block;\n    font-size: 24px;\n  }\n  span.name {\n    color: $white;\n    display: block;\n    font-size: 18px;\n    margin-top: 5px;\n  }\n}\n\n.widget-inline {\n  padding: 20px 0 !important;\n\n  .col-lg-3 {\n    padding: 0;\n  }\n  .widget-inline-box {\n    border-right: 1px solid #e3e8f1;\n    padding: 20px;\n    i{\n      font-size: 32px;\n    }\n  }\n}\n\n\n/* Inbox-widget */\n\n.inbox-widget {\n  .inbox-item {\n    border-bottom: 1px solid #f1f1f1;\n    overflow: hidden;\n    padding: 10px 0;\n    position: relative;\n    .inbox-item-img {\n      display: block;\n      float: left;\n      margin-right: 15px;\n      width: 40px;\n    }\n    img {\n      width: 40px;\n    }\n    .inbox-item-author {\n      color: #333333;\n      display: block;\n      margin: 0;\n    }\n    .inbox-item-text {\n      color: #a0a0a0;\n      display: block;\n      font-size: 12px;\n      margin: 0;\n    }\n    .inbox-item-date {\n      color: #a9a9a9;\n      font-size: 11px;\n      position: absolute;\n      right: 7px;\n      top: 2px;\n    }\n  }\n}\n\n/* Chat widget */\n.conversation-list {\n  list-style: none;\n  height: 332px;\n  padding: 0 20px;\n  li {\n    margin-bottom: 24px;\n  }\n  .chat-avatar {\n    display: inline-block;\n    float: left;\n    text-align: center;\n    width: 42px;\n    img {\n      border-radius: 100%;\n      width: $width;\n    }\n    i {\n      font-size: 12px;\n      font-style: normal;\n    }\n  }\n  .ctext-wrap {\n    -moz-border-radius: 3px;\n    -webkit-border-radius: 3px;\n    background: $lightdark;\n    border-radius: 3px;\n    display: inline-block;\n    padding: 12px;\n    position: relative;\n    box-shadow: 0 1px 2px rgba(0,0,0,0.1);\n    i {\n      display: block;\n      font-size: 12px;\n      font-style: normal;\n      font-weight: bold;\n      position: relative;\n    }\n    p {\n      margin: 0;\n      padding-top: 3px;\n    }\n    &:after {\n      right: 100%;\n      top: 0;\n      border: solid transparent;\n      content: \" \";\n      height: 0;\n      width: 0;\n      position: absolute;\n      pointer-events: none;\n      border-top-color: $lightdark;\n      border-width: 8px;\n      margin-left: -1px;\n      border-right-color: $lightdark;\n    }\n  }\n  .conversation-text {\n    display: inline-block;\n    float: left;\n    font-size: 12px;\n    margin-left: 12px;\n    width: 70%;\n  }\n  .odd {\n    .chat-avatar {\n      float: right !important;\n    }\n    .conversation-text {\n      float: right !important;\n      margin-right: 12px;\n      text-align: right;\n      width: 70% !important;\n    }\n    .ctext-wrap {\n      background-color: $custom;\n      color: $white;\n      &:after {\n        border-color: rgba(238, 238, 242, 0) !important;\n        border-left-color: $custom !important;\n        border-top-color: $custom !important;\n        left: 100% !important;\n        margin-right: -1px;\n      }\n    }\n  }\n}\n\n.chat-send {\n  padding-left: 0;\n  padding-right: 30px;\n  button {\n    width: $width;\n  }\n}\n\n.chat-inputbar {\n  padding-left: 30px;\n}\n\n/* Todos widget */\n\n#todo-message {\n  font-size: 16px;\n}\n\n.todo-list {\n  li {\n    border-radius: 0;\n    border: 0;\n    margin: 0;\n    padding: 10px 0;\n    color: $muted;\n    display: block;\n    &:last-of-type {\n      border-bottom: none;\n    }\n  }\n}\n\n.todo-send {\n  padding-left: 0;\n}\n\n/* Chat app */\n\n.chat-app-list {\n  padding: 0 20px;\n\n  .list-group-item {\n    background: transparent;\n  }\n}\n\n.chat-ready {\n\n  .conversation-list {\n    max-height: 800px;\n  }\n  .spinner {\n    width: 70px;\n    text-align: center;\n  }\n\n  .spinner > div {\n    width: 10px;\n    height: 10px;\n    background-color: #E3E3E3;\n    border-radius: 100%;\n    display: inline-block;\n    -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;\n    animation: sk-bouncedelay 1.4s infinite ease-in-out both;\n  }\n\n  .spinner .bounce1 {\n    -webkit-animation-delay: -0.32s;\n    animation-delay: -0.32s;\n  }\n\n  .spinner .bounce2 {\n    -webkit-animation-delay: -0.16s;\n    animation-delay: -0.16s;\n  }\n\n  @-webkit-keyframes sk-bouncedelay {\n    0%, 80%, 100% { -webkit-transform: scale(0) }\n    40% { -webkit-transform: scale(1.0) }\n  }\n\n  @keyframes sk-bouncedelay {\n    0%, 80%, 100% {\n      -webkit-transform: scale(0);\n      transform: scale(0);\n    } 40% {\n        -webkit-transform: scale(1.0);\n        transform: scale(1.0);\n      }\n  }\n\n}\n\n\n/* Widget-chart */\n.widget-chart {\n  ul {\n    li {\n      width: 31.5%;\n      display: inline-block;\n      padding: 0;\n    }\n  }\n}\n\n.widget-panel {\n  padding: 30px 20px 30px 30px;\n  border-radius: 4px;\n  position: relative;\n  margin-bottom: 30px;\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n\n  i {\n    font-size: 60px;\n    padding: 30px;\n    background: rgba(255, 255, 255, 0.2);\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    top: 0;\n    line-height: 60px;\n  }\n}\n\n.widget-style-2 {\n  i{\n    background: rgba(244, 248, 251, 0.6) !important;\n    font-size: 48px;\n    padding: 30px 40px;\n  }\n}\n\n/* Google maps widget*/\n\n.gmap iframe{\n  width: 100%;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.gmap-info:before {\n  color: #333333;\n  content: \"\\f041\";\n  font-family: \"FontAwesome\";\n  font-size: 35px;\n  left: 10px;\n  position: absolute;\n  top: 8px;\n}\n.gmap-info {\n  float: left;\n  padding: 0 20px 0 50px;\n  position: relative;\n}\n.gmap-buttons {\n  float: right;\n  margin-top: 28px;\n}\n.gmap-buttons .btn { margin-left: 3px;}\n/* Google maps ends */\n\n\n/* Table with Action */\n.table-actions-bar {\n  tr {\n    td{\n      vertical-align: middle !important;\n    }\n  }\n  .table-action-btn {\n    color: $muted;\n    display: inline-block;\n    width: 28px;\n    border-radius: 50%;\n    text-align: center;\n    line-height: 24px;\n    font-size: 20px;\n\n    &:hover {\n      color: $success;\n      border-color: $success;\n    }\n  }\n}\n\n/* Transaction */\n\n.transaction-list {\n  li{\n    padding: 7px 0;\n    border-bottom: 1px solid $light5;\n    clear: both;\n    position: relative;\n  }\n  i{\n    width: 20px;\n    position: absolute;\n    top: 10px;\n    font-size: 12px;\n  }\n  .tran-text {\n    padding-left: 25px;\n    white-space: nowrap;\n    display: inline-block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    width: 115px;\n  }\n  .tran-price {\n    margin-left: 30px;\n  }\n}\n\n\n/* Friend list */\n\n.friend-list {\n  a{\n    margin: 5px;\n    display: inline-block;\n  }\n  .extra-number {\n    height: 48px;\n    width: 48px;\n    display: block;\n    line-height: 48px;\n    color: $muted;\n    font-weight: 700;\n    background-color: $light5;\n    border-radius: 50%;\n    border: 1px solid $muted;\n  }\n}\n\n\n/* Profile widget */\n\n.profile-widget {\n  .bg-profile {\n    height: 125px;\n  }\n  .img-thumbnail {\n    margin-top: -42px;\n    border: none;\n  }\n  .widget-list {\n    padding: 10px;\n    margin-top: 20px;\n    margin-left: 0;\n    padding-bottom: 30px;\n\n    span {\n      display: block;\n      font-weight: bold;\n      font-size: 18px;\n    }\n  }\n}\n\n\n/*  Bar widget */\n\n.bar-widget {\n  .iconbox {\n    display: inline-block;\n    height: 50px;\n    width: 50px;\n    margin-right: 20px;\n    border-radius: 50%;\n    color: $white;\n    text-align: center;\n\n    i {\n      line-height: 50px;\n      font-size: 20px;\n    }\n  }\n}\n\n/* Social type widgets */\n.widget-profile-one {\n  .card-box {\n    border-radius: 0;\n    &:first-of-type {\n      border-top-left-radius: 4px !important;\n      border-top-right-radius: 4px !important;\n    }\n    &:last-of-type {\n      border-bottom-left-radius: 4px !important;\n      border-bottom-right-radius: 4px !important;\n    }\n  }\n}\n\n.social-feed-box {\n  h3{\n    font-size: 18px;\n    font-style: italic;\n  }\n}\n.widget-box-two {\n  border-bottom-left-radius: 3px !important;\n  border-bottom-right-radius: 3px !important;\n}\n\n.social-feed-slider {\n  padding-bottom: 50px;\n\n  .carousel-indicators {\n    bottom: 0;\n  }\n}\n\n.pro-widget-img {\n  border-radius: 4px !important;\n  padding: 70px 0;\n  background-size: cover;\n  background: url(\"../images/big/bg.jpg\") center right no-repeat;\n}\n\n\n/* Blog styles */\n\n.blog-box-one {\n  margin-bottom: 20px;\n}\n.blog-box-one .cover-wrapper {\n  overflow: hidden;\n  width: 100%;\n  position: relative;\n  z-index: 1;\n  border-top-left-radius: 4px !important;\n  border-top-right-radius: 4px !important;\n}\n\n.blog-box-one .cover-wrapper img {\n  transition: all .3s ease;\n  -webkit-transition: all .3s ease;\n  -moz-transition: all .3s ease;\n  border-top-left-radius: 4px !important;\n  border-top-right-radius: 4px !important;\n}\n\n.blog-box-one .cover-wrapper:hover img {\n  -ms-transform: scale(1.1,1.1);\n  -webkit-transform: scale(1.1,1.1);\n  transform: scale(1.1,1.1);\n}\n\n.blog-box-one .post-info {\n  background-color: $white;\n  -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);\n  padding: 20px;\n  border-bottom-left-radius: 4px !important;\n  border-bottom-right-radius: 4px !important;\n}\n\n.blog-box-one .post-info .date{\n  float: left;\n  border-bottom: 3px solid #71b6f9 ;\n}\n.post-info .date .day{\n  font-size: 22px;\n  color: #333;\n  font-weight: 600;\n  line-height: 22px;\n}\n.post-info .date .month{\n  text-transform: uppercase;\n  text-align: center;\n  width: 100%;\n  display: inline-block;\n}\n.blog-box-one .meta {\n  padding-left: 0;\n}\n\n.blog-box-one .post-info .meta-container {\n  padding-left: 55px;\n}\n.blog-box-one .post-info p {\n  margin-top: 15px;\n}\n\n.blog-widget-action {\n  a{\n    color: $muted;\n    display: inline-block;\n    margin-right: 10px;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/_wysiwig.scss",
    "content": "/* Wysiwig */\n.mce-content-body p {\n  color: $dark;\n  font-size: 14px;\n  font-weight: 300;\n}\n.mce-popover .mce-arrow:after {\n  border-bottom-color: red;\n}\n.mce-popover .mce-colorbutton-grid {\n  margin: 0;\n  border: 1px solid $muted !important;\n  padding: 4px;\n}\n.mce-reset .mce-window-head {\n  border-bottom: 1px solid #d7dce5;\n}\n.mce-reset .mce-window-head .mce-title {\n  color: #707780;\n  font-size: 16px;\n  font-weight: 400;\n}\n.mce-reset .mce-textbox {\n  border-radius: 0;\n  box-shadow: none;\n  outline: 0;\n  border-color: #d7dce5;\n  height: 30px;\n  font-weight: 300;\n  line-height: 30px;\n  color: #aaaaaa;\n  font-size: 14px;\n}\n.mce-reset .mce-textbox:focus {\n  box-shadow: none;\n  border-color: $custom;\n}\n.mce-reset .mce-checkbox .mce-ico {\n  background-image: none;\n  background-color: $white;\n  border-radius: 0;\n  border: 1px solid #d7dce5;\n}\n.mce-reset .mce-checkbox .mce-label {\n  color: #707780;\n  font-size: 12px;\n  font-weight: 400;\n}\n.mce-container {\n  border-radius: 0 !important;\n  border-width: 0 !important;\n}\n.mce-container .mce-menubar {\n  background-color: darken($white,5%) !important;\n  border: 1px solid darken($white,5%) !important;\n  padding: 2px;\n}\n.mce-container .mce-menubar .mce-btn button span {\n  color: $dark;\n  font-size: 14px;\n  font-weight: 400;\n  text-transform: capitalize;\n}\n.mce-container .mce-menubar .mce-btn button .mce-caret {\n  border-top-color: $dark;\n}\n.mce-container .mce-menubar .mce-btn button:hover {\n  background-color: darken($white,5%);\n}\n.mce-container .mce-menubar .mce-btn.mce-active button {\n  background-color: darken($white,5%);\n}\n.mce-container .mce-btn {\n  background-color: #d7dce5;\n  background-image: none;\n  outline: 0;\n  border: 0;\n  border-radius: 0;\n}\n.mce-container .mce-btn button {\n  color: $white;\n  font-size: 14px;\n  font-weight: 400;\n  text-shadow: none;\n}\n.mce-container .mce-btn:hover {\n  background-color: darken($white,5%);\n  background-image: none;\n}\n.mce-container .mce-primary {\n  background-color: $custom;\n  background-image: none;\n  outline: 0;\n  border: 0;\n  border-radius: 0;\n}\n.mce-container .mce-primary button {\n  color: $white;\n  font-size: 14px;\n  font-weight: 400;\n  text-shadow: none;\n}\n.mce-container .mce-primary:hover {\n  background-color: #0c7cd5;\n  background-image: none;\n}\n.mce-container .mce-toolbar-grp {\n  background-color: darken($white,5%) !important;\n  border: 1px solid darken($white,5%) !important;\n  border-top-width: 0 !important;\n  padding: 6px;\n}\n.mce-container .mce-edit-area {\n  border: 2px solid darken($white,5%) !important;\n}\n.mce-container .mce-statusbar {\n  background-color: darken($white,5%) !important;\n  border: 1px solid darken($white,5%) !important;\n}\n.mce-container .mce-statusbar .mce-path .mce-path-item {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 400;\n}\n.mce-container .mce-widget {\n  color: #9398a0;\n  font-size: 14px;\n  font-weight: 400;\n  border-left: 1px solid transparent;\n}\n.mce-container .mce-btn-group {\n  border: 1px solid #e9ecf2 !important;\n}\n.mce-container .mce-btn-group .mce-btn {\n  box-shadow: none;\n  background-image: none;\n  background-color: $white;\n  border-width: 0;\n  border-radius: 0 !important;\n}\n.mce-container .mce-btn-group .mce-btn:hover,\n.mce-container .mce-btn-group .mce-btn:focus {\n  box-shadow: none;\n  background-image: none;\n  background-color: $white;\n}\n.mce-container .mce-btn-group .mce-btn button span {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 300;\n}\n.mce-container .mce-btn-group .mce-btn button .mce-caret {\n  color: #707780;\n  font-size: 14px;\n}\n.mce-container .mce-ico {\n  color: #707780;\n  font-size: 14px;\n}\n.mce-container .mce-panel {\n  background-image: none;\n}\n.mce-container.mce-menu {\n  border: 1px solid #d7dce5 !important;\n}\n.mce-container.mce-menu .mce-menu-item {\n  background-image: none;\n}\n.mce-container.mce-menu .mce-menu-item .mce-ico {\n  color: $custom;\n  font-size: 14px;\n}\n.mce-container.mce-menu .mce-menu-item .mce-text {\n  color: #707780;\n  font-size: 14px;\n  font-weight: 400;\n  text-transform: capitalize;\n}\n.mce-container.mce-menu .mce-menu-item .mce-menu-shortcut {\n  color: #aaaaaa;\n  font-size: 12px;\n  font-weight: 300;\n  text-transform: capitalize;\n}\n.mce-container.mce-menu .mce-menu-item:hover,\n.mce-container.mce-menu .mce-menu-item:focus,\n.mce-container.mce-menu .mce-menu-item.mce-selected {\n  background-color: $custom;\n}\n.mce-container.mce-menu .mce-menu-item:hover .mce-ico,\n.mce-container.mce-menu .mce-menu-item:focus .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-ico,\n.mce-container.mce-menu .mce-menu-item:hover .mce-text,\n.mce-container.mce-menu .mce-menu-item:focus .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-text,\n.mce-container.mce-menu .mce-menu-item:hover .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item:focus .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-selected .mce-menu-shortcut {\n  color: $white;\n}\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled .mce-menu-shortcut {\n  color: #aaaaaa;\n}\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected {\n  background-color: #d7dce5;\n}\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-ico,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-text,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:hover .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-disabled:focus .mce-menu-shortcut,\n.mce-container.mce-menu .mce-menu-item.mce-disabled.mce-selected .mce-menu-shortcut {\n  color: $white;\n}\n.mce-container.mce-menu .mce-menu-item-sep {\n  background-color: #d7dce5;\n}\n.mce-container.mce-menu .mce-menu-item-sep:hover {\n  background-color: #d7dce5;\n}\n.mce-menubtn button {\n  color: $dark !important;\n}\n.mce-menu-item-normal.mce-active {\n  background-color: $custom !important;\n\n  .mce-text {\n    color: $white !important;\n  }\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/css/material-design-iconic-font.css",
    "content": "/*!\n *  Material Design Iconic Font 1.0.1 by Sergey Kupletsky (@zavoloklom) - http://zavoloklom.github.io/material-design-iconic-font/\n *  License - https://github.com/zavoloklom/material-design-iconic-font/blob/gh-pages/License.md (Attribution-ShareAlike 4.0 International license)\n */\n@font-face {\n  font-family: 'Material Design Iconic Font';\n  src: url(\"../fonts/Material-Design-Iconic-Font.eot?v=1.0.1\");\n  src: url(\"../fonts/Material-Design-Iconic-Font.eot?#iefix&v=1.0.1\") format(\"embedded-opentype\"), url(\"../fonts/Material-Design-Iconic-Font.woff?v=1.0.1\") format(\"woff\"), url(\"../fonts/Material-Design-Iconic-Font.ttf?v=1.0.1\") format(\"truetype\"), url(\"../fonts/Material-Design-Iconic-Font.svg?v=1.0.1#Material-Design-Iconic-Font\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n[class^=\"md-\"],\n[class*=\" md-\"] {\n  display: inline-block;\n  font: normal normal normal 14px/1 'Material Design Iconic Font';\n  font-size: inherit;\n  speak: none;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.md {\n  line-height: inherit;\n  vertical-align: bottom; }\n\n.md-lg {\n  font-size: 1.5em;\n  line-height: .5em;\n  vertical-align: -35%; }\n\n.md-2x {\n  font-size: 2em; }\n\n.md-3x {\n  font-size: 3em; }\n\n.md-4x {\n  font-size: 4em; }\n\n.md-5x {\n  font-size: 5em; }\n\n.md-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: .1em; }\n\n.md-border-circle {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: 50%; }\n\n[class^=\"md-\"].pull-left,\n[class*=\" md-\"].pull-left {\n  float: left;\n  margin-right: .3em; }\n\n[class^=\"md-\"].pull-right,\n[class*=\" md-\"].pull-right {\n  float: right;\n  margin-left: .3em; }\n\n.md-spin {\n  -webkit-animation: md-spin 1.5s infinite linear;\n  animation: md-spin 1.5s infinite linear; }\n\n.md-spin-reverse {\n  -webkit-animation: md-spin-reverse 1.5s infinite linear;\n  animation: md-spin-reverse 1.5s infinite linear; }\n\n@-webkit-keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n@keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n@-webkit-keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg); } }\n@keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg); } }\n.md-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.md-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.md-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.md-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.md-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n:root .md-rotate-90,\n:root .md-rotate-180,\n:root .md-rotate-270,\n:root .md-flip-horizontal,\n:root .md-flip-vertical {\n  filter: none; }\n\n/* Material Design Iconic Font uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n/* If you do not want use all icons you can disable icon set here */\n.md-3d-rotation:before {\n  content: \"\\f000\"; }\n\n.md-accessibility:before {\n  content: \"\\f001\"; }\n\n.md-account-balance:before {\n  content: \"\\f002\"; }\n\n.md-account-balance-wallet:before {\n  content: \"\\f003\"; }\n\n.md-account-box:before {\n  content: \"\\f004\"; }\n\n.md-account-child:before {\n  content: \"\\f005\"; }\n\n.md-account-circle:before {\n  content: \"\\f006\"; }\n\n.md-add-shopping-cart:before {\n  content: \"\\f007\"; }\n\n.md-alarm:before {\n  content: \"\\f008\"; }\n\n.md-alarm-add:before {\n  content: \"\\f009\"; }\n\n.md-alarm-off:before {\n  content: \"\\f00a\"; }\n\n.md-alarm-on:before {\n  content: \"\\f00b\"; }\n\n.md-android:before {\n  content: \"\\f00c\"; }\n\n.md-announcement:before {\n  content: \"\\f00d\"; }\n\n.md-aspect-ratio:before {\n  content: \"\\f00e\"; }\n\n.md-assessment:before {\n  content: \"\\f00f\"; }\n\n.md-assignment:before {\n  content: \"\\f010\"; }\n\n.md-assignment-ind:before {\n  content: \"\\f011\"; }\n\n.md-assignment-late:before {\n  content: \"\\f012\"; }\n\n.md-assignment-return:before {\n  content: \"\\f013\"; }\n\n.md-assignment-returned:before {\n  content: \"\\f014\"; }\n\n.md-assignment-turned-in:before {\n  content: \"\\f015\"; }\n\n.md-autorenew:before {\n  content: \"\\f016\"; }\n\n.md-backup:before {\n  content: \"\\f017\"; }\n\n.md-book:before {\n  content: \"\\f018\"; }\n\n.md-bookmark:before {\n  content: \"\\f019\"; }\n\n.md-bookmark-outline:before {\n  content: \"\\f01a\"; }\n\n.md-bug-report:before {\n  content: \"\\f01b\"; }\n\n.md-cached:before {\n  content: \"\\f01c\"; }\n\n.md-class:before {\n  content: \"\\f01d\"; }\n\n.md-credit-card:before {\n  content: \"\\f01e\"; }\n\n.md-dashboard:before {\n  content: \"\\f01f\"; }\n\n.md-delete:before {\n  content: \"\\f020\"; }\n\n.md-description:before {\n  content: \"\\f021\"; }\n\n.md-dns:before {\n  content: \"\\f022\"; }\n\n.md-done:before {\n  content: \"\\f023\"; }\n\n.md-done-all:before {\n  content: \"\\f024\"; }\n\n.md-event:before {\n  content: \"\\f025\"; }\n\n.md-exit-to-app:before {\n  content: \"\\f026\"; }\n\n.md-explore:before {\n  content: \"\\f027\"; }\n\n.md-extension:before {\n  content: \"\\f028\"; }\n\n.md-face-unlock:before {\n  content: \"\\f029\"; }\n\n.md-favorite:before {\n  content: \"\\f02a\"; }\n\n.md-favorite-outline:before {\n  content: \"\\f02b\"; }\n\n.md-find-in-page:before {\n  content: \"\\f02c\"; }\n\n.md-find-replace:before {\n  content: \"\\f02d\"; }\n\n.md-flip-to-back:before {\n  content: \"\\f02e\"; }\n\n.md-flip-to-front:before {\n  content: \"\\f02f\"; }\n\n.md-get-app:before {\n  content: \"\\f030\"; }\n\n.md-grade:before {\n  content: \"\\f031\"; }\n\n.md-group-work:before {\n  content: \"\\f032\"; }\n\n.md-help:before {\n  content: \"\\f033\"; }\n\n.md-highlight-remove:before {\n  content: \"\\f034\"; }\n\n.md-history:before {\n  content: \"\\f035\"; }\n\n.md-home:before {\n  content: \"\\f036\"; }\n\n.md-https:before {\n  content: \"\\f037\"; }\n\n.md-info:before {\n  content: \"\\f038\"; }\n\n.md-info-outline:before {\n  content: \"\\f039\"; }\n\n.md-input:before {\n  content: \"\\f03a\"; }\n\n.md-invert-colors:before {\n  content: \"\\f03b\"; }\n\n.md-label:before {\n  content: \"\\f03c\"; }\n\n.md-label-outline:before {\n  content: \"\\f03d\"; }\n\n.md-language:before {\n  content: \"\\f03e\"; }\n\n.md-launch:before {\n  content: \"\\f03f\"; }\n\n.md-list:before {\n  content: \"\\f040\"; }\n\n.md-lock:before {\n  content: \"\\f041\"; }\n\n.md-lock-open:before {\n  content: \"\\f042\"; }\n\n.md-lock-outline:before {\n  content: \"\\f043\"; }\n\n.md-loyalty:before {\n  content: \"\\f044\"; }\n\n.md-markunread-mailbox:before {\n  content: \"\\f045\"; }\n\n.md-note-add:before {\n  content: \"\\f046\"; }\n\n.md-open-in-browser:before {\n  content: \"\\f047\"; }\n\n.md-open-in-new:before {\n  content: \"\\f048\"; }\n\n.md-open-with:before {\n  content: \"\\f049\"; }\n\n.md-pageview:before {\n  content: \"\\f04a\"; }\n\n.md-payment:before {\n  content: \"\\f04b\"; }\n\n.md-perm-camera-mic:before {\n  content: \"\\f04c\"; }\n\n.md-perm-contact-cal:before {\n  content: \"\\f04d\"; }\n\n.md-perm-data-setting:before {\n  content: \"\\f04e\"; }\n\n.md-perm-device-info:before {\n  content: \"\\f04f\"; }\n\n.md-perm-identity:before {\n  content: \"\\f050\"; }\n\n.md-perm-media:before {\n  content: \"\\f051\"; }\n\n.md-perm-phone-msg:before {\n  content: \"\\f052\"; }\n\n.md-perm-scan-wifi:before {\n  content: \"\\f053\"; }\n\n.md-picture-in-picture:before {\n  content: \"\\f054\"; }\n\n.md-polymer:before {\n  content: \"\\f055\"; }\n\n.md-print:before {\n  content: \"\\f056\"; }\n\n.md-query-builder:before {\n  content: \"\\f057\"; }\n\n.md-question-answer:before {\n  content: \"\\f058\"; }\n\n.md-receipt:before {\n  content: \"\\f059\"; }\n\n.md-redeem:before {\n  content: \"\\f05a\"; }\n\n.md-report-problem:before {\n  content: \"\\f05b\"; }\n\n.md-restore:before {\n  content: \"\\f05c\"; }\n\n.md-room:before {\n  content: \"\\f05d\"; }\n\n.md-schedule:before {\n  content: \"\\f05e\"; }\n\n.md-search:before {\n  content: \"\\f05f\"; }\n\n.md-settings:before {\n  content: \"\\f060\"; }\n\n.md-settings-applications:before {\n  content: \"\\f061\"; }\n\n.md-settings-backup-restore:before {\n  content: \"\\f062\"; }\n\n.md-settings-bluetooth:before {\n  content: \"\\f063\"; }\n\n.md-settings-cell:before {\n  content: \"\\f064\"; }\n\n.md-settings-display:before {\n  content: \"\\f065\"; }\n\n.md-settings-ethernet:before {\n  content: \"\\f066\"; }\n\n.md-settings-input-antenna:before {\n  content: \"\\f067\"; }\n\n.md-settings-input-component:before {\n  content: \"\\f068\"; }\n\n.md-settings-input-composite:before {\n  content: \"\\f069\"; }\n\n.md-settings-input-hdmi:before {\n  content: \"\\f06a\"; }\n\n.md-settings-input-svideo:before {\n  content: \"\\f06b\"; }\n\n.md-settings-overscan:before {\n  content: \"\\f06c\"; }\n\n.md-settings-phone:before {\n  content: \"\\f06d\"; }\n\n.md-settings-power:before {\n  content: \"\\f06e\"; }\n\n.md-settings-remote:before {\n  content: \"\\f06f\"; }\n\n.md-settings-voice:before {\n  content: \"\\f070\"; }\n\n.md-shop:before {\n  content: \"\\f071\"; }\n\n.md-shopping-basket:before {\n  content: \"\\f072\"; }\n\n.md-shopping-cart:before {\n  content: \"\\f073\"; }\n\n.md-shop-two:before {\n  content: \"\\f074\"; }\n\n.md-speaker-notes:before {\n  content: \"\\f075\"; }\n\n.md-spellcheck:before {\n  content: \"\\f076\"; }\n\n.md-star-rate:before {\n  content: \"\\f077\"; }\n\n.md-stars:before {\n  content: \"\\f078\"; }\n\n.md-store:before {\n  content: \"\\f079\"; }\n\n.md-subject:before {\n  content: \"\\f07a\"; }\n\n.md-swap-horiz:before {\n  content: \"\\f07b\"; }\n\n.md-swap-vert:before {\n  content: \"\\f07c\"; }\n\n.md-swap-vert-circle:before {\n  content: \"\\f07d\"; }\n\n.md-system-update-tv:before {\n  content: \"\\f07e\"; }\n\n.md-tab:before {\n  content: \"\\f07f\"; }\n\n.md-tab-unselected:before {\n  content: \"\\f080\"; }\n\n.md-theaters:before {\n  content: \"\\f081\"; }\n\n.md-thumb-down:before {\n  content: \"\\f082\"; }\n\n.md-thumbs-up-down:before {\n  content: \"\\f083\"; }\n\n.md-thumb-up:before {\n  content: \"\\f084\"; }\n\n.md-toc:before {\n  content: \"\\f085\"; }\n\n.md-today:before {\n  content: \"\\f086\"; }\n\n.md-track-changes:before {\n  content: \"\\f087\"; }\n\n.md-translate:before {\n  content: \"\\f088\"; }\n\n.md-trending-down:before {\n  content: \"\\f089\"; }\n\n.md-trending-neutral:before {\n  content: \"\\f08a\"; }\n\n.md-trending-up:before {\n  content: \"\\f08b\"; }\n\n.md-turned-in:before {\n  content: \"\\f08c\"; }\n\n.md-turned-in-not:before {\n  content: \"\\f08d\"; }\n\n.md-verified-user:before {\n  content: \"\\f08e\"; }\n\n.md-view-agenda:before {\n  content: \"\\f08f\"; }\n\n.md-view-array:before {\n  content: \"\\f090\"; }\n\n.md-view-carousel:before {\n  content: \"\\f091\"; }\n\n.md-view-column:before {\n  content: \"\\f092\"; }\n\n.md-view-day:before {\n  content: \"\\f093\"; }\n\n.md-view-headline:before {\n  content: \"\\f094\"; }\n\n.md-view-list:before {\n  content: \"\\f095\"; }\n\n.md-view-module:before {\n  content: \"\\f096\"; }\n\n.md-view-quilt:before {\n  content: \"\\f097\"; }\n\n.md-view-stream:before {\n  content: \"\\f098\"; }\n\n.md-view-week:before {\n  content: \"\\f099\"; }\n\n.md-visibility:before {\n  content: \"\\f09a\"; }\n\n.md-visibility-off:before {\n  content: \"\\f09b\"; }\n\n.md-wallet-giftcard:before {\n  content: \"\\f09c\"; }\n\n.md-wallet-membership:before {\n  content: \"\\f09d\"; }\n\n.md-wallet-travel:before {\n  content: \"\\f09e\"; }\n\n.md-work:before {\n  content: \"\\f09f\"; }\n\n.md-error:before {\n  content: \"\\f0a0\"; }\n\n.md-warning:before {\n  content: \"\\f0a1\"; }\n\n.md-album:before {\n  content: \"\\f0a2\"; }\n\n.md-av-timer:before {\n  content: \"\\f0a3\"; }\n\n.md-closed-caption:before {\n  content: \"\\f0a4\"; }\n\n.md-equalizer:before {\n  content: \"\\f0a5\"; }\n\n.md-explicit:before {\n  content: \"\\f0a6\"; }\n\n.md-fast-forward:before {\n  content: \"\\f0a7\"; }\n\n.md-fast-rewind:before {\n  content: \"\\f0a8\"; }\n\n.md-games:before {\n  content: \"\\f0a9\"; }\n\n.md-hearing:before {\n  content: \"\\f0aa\"; }\n\n.md-high-quality:before {\n  content: \"\\f0ab\"; }\n\n.md-loop:before {\n  content: \"\\f0ac\"; }\n\n.md-mic:before {\n  content: \"\\f0ad\"; }\n\n.md-mic-none:before {\n  content: \"\\f0ae\"; }\n\n.md-mic-off:before {\n  content: \"\\f0af\"; }\n\n.md-movie:before {\n  content: \"\\f0b0\"; }\n\n.md-my-library-add:before {\n  content: \"\\f0b1\"; }\n\n.md-my-library-books:before {\n  content: \"\\f0b2\"; }\n\n.md-my-library-music:before {\n  content: \"\\f0b3\"; }\n\n.md-new-releases:before {\n  content: \"\\f0b4\"; }\n\n.md-not-interested:before {\n  content: \"\\f0b5\"; }\n\n.md-pause:before {\n  content: \"\\f0b6\"; }\n\n.md-pause-circle-fill:before {\n  content: \"\\f0b7\"; }\n\n.md-pause-circle-outline:before {\n  content: \"\\f0b8\"; }\n\n.md-play-arrow:before {\n  content: \"\\f0b9\"; }\n\n.md-play-circle-fill:before {\n  content: \"\\f0ba\"; }\n\n.md-play-circle-outline:before {\n  content: \"\\f0bb\"; }\n\n.md-playlist-add:before {\n  content: \"\\f0bc\"; }\n\n.md-play-shopping-bag:before {\n  content: \"\\f0bd\"; }\n\n.md-queue:before {\n  content: \"\\f0be\"; }\n\n.md-queue-music:before {\n  content: \"\\f0bf\"; }\n\n.md-radio:before {\n  content: \"\\f0c0\"; }\n\n.md-recent-actors:before {\n  content: \"\\f0c1\"; }\n\n.md-repeat:before {\n  content: \"\\f0c2\"; }\n\n.md-repeat-one:before {\n  content: \"\\f0c3\"; }\n\n.md-replay:before {\n  content: \"\\f0c4\"; }\n\n.md-shuffle:before {\n  content: \"\\f0c5\"; }\n\n.md-skip-next:before {\n  content: \"\\f0c6\"; }\n\n.md-skip-previous:before {\n  content: \"\\f0c7\"; }\n\n.md-snooze:before {\n  content: \"\\f0c8\"; }\n\n.md-stop:before {\n  content: \"\\f0c9\"; }\n\n.md-subtitles:before {\n  content: \"\\f0ca\"; }\n\n.md-surround-sound:before {\n  content: \"\\f0cb\"; }\n\n.md-videocam:before {\n  content: \"\\f0cc\"; }\n\n.md-videocam-off:before {\n  content: \"\\f0cd\"; }\n\n.md-video-collection:before {\n  content: \"\\f0ce\"; }\n\n.md-volume-down:before {\n  content: \"\\f0cf\"; }\n\n.md-volume-mute:before {\n  content: \"\\f0d0\"; }\n\n.md-volume-off:before {\n  content: \"\\f0d1\"; }\n\n.md-volume-up:before {\n  content: \"\\f0d2\"; }\n\n.md-web:before {\n  content: \"\\f0d3\"; }\n\n.md-business:before {\n  content: \"\\f0d4\"; }\n\n.md-call:before {\n  content: \"\\f0d5\"; }\n\n.md-call-end:before {\n  content: \"\\f0d6\"; }\n\n.md-call-made:before {\n  content: \"\\f0d7\"; }\n\n.md-call-merge:before {\n  content: \"\\f0d8\"; }\n\n.md-call-missed:before {\n  content: \"\\f0d9\"; }\n\n.md-call-received:before {\n  content: \"\\f0da\"; }\n\n.md-call-split:before {\n  content: \"\\f0db\"; }\n\n.md-chat:before {\n  content: \"\\f0dc\"; }\n\n.md-clear-all:before {\n  content: \"\\f0dd\"; }\n\n.md-comment:before {\n  content: \"\\f0de\"; }\n\n.md-contacts:before {\n  content: \"\\f0df\"; }\n\n.md-dialer-sip:before {\n  content: \"\\f0e0\"; }\n\n.md-dialpad:before {\n  content: \"\\f0e1\"; }\n\n.md-dnd-on:before {\n  content: \"\\f0e2\"; }\n\n.md-email:before {\n  content: \"\\f0e3\"; }\n\n.md-forum:before {\n  content: \"\\f0e4\"; }\n\n.md-import-export:before {\n  content: \"\\f0e5\"; }\n\n.md-invert-colors-off:before {\n  content: \"\\f0e6\"; }\n\n.md-invert-colors-on:before {\n  content: \"\\f0e7\"; }\n\n.md-live-help:before {\n  content: \"\\f0e8\"; }\n\n.md-location-off:before {\n  content: \"\\f0e9\"; }\n\n.md-location-on:before {\n  content: \"\\f0ea\"; }\n\n.md-message:before {\n  content: \"\\f0eb\"; }\n\n.md-messenger:before {\n  content: \"\\f0ec\"; }\n\n.md-no-sim:before {\n  content: \"\\f0ed\"; }\n\n.md-phone:before {\n  content: \"\\f0ee\"; }\n\n.md-portable-wifi-off:before {\n  content: \"\\f0ef\"; }\n\n.md-quick-contacts-dialer:before {\n  content: \"\\f0f0\"; }\n\n.md-quick-contacts-mail:before {\n  content: \"\\f0f1\"; }\n\n.md-ring-volume:before {\n  content: \"\\f0f2\"; }\n\n.md-stay-current-landscape:before {\n  content: \"\\f0f3\"; }\n\n.md-stay-current-portrait:before {\n  content: \"\\f0f4\"; }\n\n.md-stay-primary-landscape:before {\n  content: \"\\f0f5\"; }\n\n.md-stay-primary-portrait:before {\n  content: \"\\f0f6\"; }\n\n.md-swap-calls:before {\n  content: \"\\f0f7\"; }\n\n.md-textsms:before {\n  content: \"\\f0f8\"; }\n\n.md-voicemail:before {\n  content: \"\\f0f9\"; }\n\n.md-vpn-key:before {\n  content: \"\\f0fa\"; }\n\n.md-add:before {\n  content: \"\\f0fb\"; }\n\n.md-add-box:before {\n  content: \"\\f0fc\"; }\n\n.md-add-circle:before {\n  content: \"\\f0fd\"; }\n\n.md-add-circle-outline:before {\n  content: \"\\f0fe\"; }\n\n.md-archive:before {\n  content: \"\\f0ff\"; }\n\n.md-backspace:before {\n  content: \"\\f100\"; }\n\n.md-block:before {\n  content: \"\\f101\"; }\n\n.md-clear:before {\n  content: \"\\f102\"; }\n\n.md-content-copy:before {\n  content: \"\\f103\"; }\n\n.md-content-cut:before {\n  content: \"\\f104\"; }\n\n.md-content-paste:before {\n  content: \"\\f105\"; }\n\n.md-create:before {\n  content: \"\\f106\"; }\n\n.md-drafts:before {\n  content: \"\\f107\"; }\n\n.md-filter-list:before {\n  content: \"\\f108\"; }\n\n.md-flag:before {\n  content: \"\\f109\"; }\n\n.md-forward:before {\n  content: \"\\f10a\"; }\n\n.md-gesture:before {\n  content: \"\\f10b\"; }\n\n.md-inbox:before {\n  content: \"\\f10c\"; }\n\n.md-link:before {\n  content: \"\\f10d\"; }\n\n.md-mail:before {\n  content: \"\\f10e\"; }\n\n.md-markunread:before {\n  content: \"\\f10f\"; }\n\n.md-redo:before {\n  content: \"\\f110\"; }\n\n.md-remove:before {\n  content: \"\\f111\"; }\n\n.md-remove-circle:before {\n  content: \"\\f112\"; }\n\n.md-remove-circle-outline:before {\n  content: \"\\f113\"; }\n\n.md-reply:before {\n  content: \"\\f114\"; }\n\n.md-reply-all:before {\n  content: \"\\f115\"; }\n\n.md-report:before {\n  content: \"\\f116\"; }\n\n.md-save:before {\n  content: \"\\f117\"; }\n\n.md-select-all:before {\n  content: \"\\f118\"; }\n\n.md-send:before {\n  content: \"\\f119\"; }\n\n.md-sort:before {\n  content: \"\\f11a\"; }\n\n.md-text-format:before {\n  content: \"\\f11b\"; }\n\n.md-undo:before {\n  content: \"\\f11c\"; }\n\n.md-access-alarm:before {\n  content: \"\\f11d\"; }\n\n.md-access-alarms:before {\n  content: \"\\f11e\"; }\n\n.md-access-time:before {\n  content: \"\\f11f\"; }\n\n.md-add-alarm:before {\n  content: \"\\f120\"; }\n\n.md-airplanemode-off:before {\n  content: \"\\f121\"; }\n\n.md-airplanemode-on:before {\n  content: \"\\f122\"; }\n\n.md-battery-20:before {\n  content: \"\\f123\"; }\n\n.md-battery-30:before {\n  content: \"\\f124\"; }\n\n.md-battery-50:before {\n  content: \"\\f125\"; }\n\n.md-battery-60:before {\n  content: \"\\f126\"; }\n\n.md-battery-80:before {\n  content: \"\\f127\"; }\n\n.md-battery-90:before {\n  content: \"\\f128\"; }\n\n.md-battery-alert:before {\n  content: \"\\f129\"; }\n\n.md-battery-charging-20:before {\n  content: \"\\f12a\"; }\n\n.md-battery-charging-30:before {\n  content: \"\\f12b\"; }\n\n.md-battery-charging-50:before {\n  content: \"\\f12c\"; }\n\n.md-battery-charging-60:before {\n  content: \"\\f12d\"; }\n\n.md-battery-charging-80:before {\n  content: \"\\f12e\"; }\n\n.md-battery-charging-90:before {\n  content: \"\\f12f\"; }\n\n.md-battery-charging-full:before {\n  content: \"\\f130\"; }\n\n.md-battery-full:before {\n  content: \"\\f131\"; }\n\n.md-battery-std:before {\n  content: \"\\f132\"; }\n\n.md-battery-unknown:before {\n  content: \"\\f133\"; }\n\n.md-bluetooth:before {\n  content: \"\\f134\"; }\n\n.md-bluetooth-connected:before {\n  content: \"\\f135\"; }\n\n.md-bluetooth-disabled:before {\n  content: \"\\f136\"; }\n\n.md-bluetooth-searching:before {\n  content: \"\\f137\"; }\n\n.md-brightness-auto:before {\n  content: \"\\f138\"; }\n\n.md-brightness-high:before {\n  content: \"\\f139\"; }\n\n.md-brightness-low:before {\n  content: \"\\f13a\"; }\n\n.md-brightness-medium:before {\n  content: \"\\f13b\"; }\n\n.md-data-usage:before {\n  content: \"\\f13c\"; }\n\n.md-developer-mode:before {\n  content: \"\\f13d\"; }\n\n.md-devices:before {\n  content: \"\\f13e\"; }\n\n.md-dvr:before {\n  content: \"\\f13f\"; }\n\n.md-gps-fixed:before {\n  content: \"\\f140\"; }\n\n.md-gps-not-fixed:before {\n  content: \"\\f141\"; }\n\n.md-gps-off:before {\n  content: \"\\f142\"; }\n\n.md-location-disabled:before {\n  content: \"\\f143\"; }\n\n.md-location-searching:before {\n  content: \"\\f144\"; }\n\n.md-multitrack-audio:before {\n  content: \"\\f145\"; }\n\n.md-network-cell:before {\n  content: \"\\f146\"; }\n\n.md-network-wifi:before {\n  content: \"\\f147\"; }\n\n.md-nfc:before {\n  content: \"\\f148\"; }\n\n.md-now-wallpaper:before {\n  content: \"\\f149\"; }\n\n.md-now-widgets:before {\n  content: \"\\f14a\"; }\n\n.md-screen-lock-landscape:before {\n  content: \"\\f14b\"; }\n\n.md-screen-lock-portrait:before {\n  content: \"\\f14c\"; }\n\n.md-screen-lock-rotation:before {\n  content: \"\\f14d\"; }\n\n.md-screen-rotation:before {\n  content: \"\\f14e\"; }\n\n.md-sd-storage:before {\n  content: \"\\f14f\"; }\n\n.md-settings-system-daydream:before {\n  content: \"\\f150\"; }\n\n.md-signal-cellular-0-bar:before {\n  content: \"\\f151\"; }\n\n.md-signal-cellular-1-bar:before {\n  content: \"\\f152\"; }\n\n.md-signal-cellular-2-bar:before {\n  content: \"\\f153\"; }\n\n.md-signal-cellular-3-bar:before {\n  content: \"\\f154\"; }\n\n.md-signal-cellular-4-bar:before {\n  content: \"\\f155\"; }\n\n.md-signal-cellular-connected-no-internet-0-bar:before {\n  content: \"\\f156\"; }\n\n.md-signal-cellular-connected-no-internet-1-bar:before {\n  content: \"\\f157\"; }\n\n.md-signal-cellular-connected-no-internet-2-bar:before {\n  content: \"\\f158\"; }\n\n.md-signal-cellular-connected-no-internet-3-bar:before {\n  content: \"\\f159\"; }\n\n.md-signal-cellular-connected-no-internet-4-bar:before {\n  content: \"\\f15a\"; }\n\n.md-signal-cellular-no-sim:before {\n  content: \"\\f15b\"; }\n\n.md-signal-cellular-null:before {\n  content: \"\\f15c\"; }\n\n.md-signal-cellular-off:before {\n  content: \"\\f15d\"; }\n\n.md-signal-wifi-0-bar:before {\n  content: \"\\f15e\"; }\n\n.md-signal-wifi-1-bar:before {\n  content: \"\\f15f\"; }\n\n.md-signal-wifi-2-bar:before {\n  content: \"\\f160\"; }\n\n.md-signal-wifi-3-bar:before {\n  content: \"\\f161\"; }\n\n.md-signal-wifi-4-bar:before {\n  content: \"\\f162\"; }\n\n.md-signal-wifi-off:before {\n  content: \"\\f163\"; }\n\n.md-storage:before {\n  content: \"\\f164\"; }\n\n.md-usb:before {\n  content: \"\\f165\"; }\n\n.md-wifi-lock:before {\n  content: \"\\f166\"; }\n\n.md-wifi-tethering:before {\n  content: \"\\f167\"; }\n\n.md-attach-file:before {\n  content: \"\\f168\"; }\n\n.md-attach-money:before {\n  content: \"\\f169\"; }\n\n.md-border-all:before {\n  content: \"\\f16a\"; }\n\n.md-border-bottom:before {\n  content: \"\\f16b\"; }\n\n.md-border-clear:before {\n  content: \"\\f16c\"; }\n\n.md-border-color:before {\n  content: \"\\f16d\"; }\n\n.md-border-horizontal:before {\n  content: \"\\f16e\"; }\n\n.md-border-inner:before {\n  content: \"\\f16f\"; }\n\n.md-border-left:before {\n  content: \"\\f170\"; }\n\n.md-border-outer:before {\n  content: \"\\f171\"; }\n\n.md-border-right:before {\n  content: \"\\f172\"; }\n\n.md-border-style:before {\n  content: \"\\f173\"; }\n\n.md-border-top:before {\n  content: \"\\f174\"; }\n\n.md-border-vertical:before {\n  content: \"\\f175\"; }\n\n.md-format-align-center:before {\n  content: \"\\f176\"; }\n\n.md-format-align-justify:before {\n  content: \"\\f177\"; }\n\n.md-format-align-left:before {\n  content: \"\\f178\"; }\n\n.md-format-align-right:before {\n  content: \"\\f179\"; }\n\n.md-format-bold:before {\n  content: \"\\f17a\"; }\n\n.md-format-clear:before {\n  content: \"\\f17b\"; }\n\n.md-format-color-fill:before {\n  content: \"\\f17c\"; }\n\n.md-format-color-reset:before {\n  content: \"\\f17d\"; }\n\n.md-format-color-text:before {\n  content: \"\\f17e\"; }\n\n.md-format-indent-decrease:before {\n  content: \"\\f17f\"; }\n\n.md-format-indent-increase:before {\n  content: \"\\f180\"; }\n\n.md-format-italic:before {\n  content: \"\\f181\"; }\n\n.md-format-line-spacing:before {\n  content: \"\\f182\"; }\n\n.md-format-list-bulleted:before {\n  content: \"\\f183\"; }\n\n.md-format-list-numbered:before {\n  content: \"\\f184\"; }\n\n.md-format-paint:before {\n  content: \"\\f185\"; }\n\n.md-format-quote:before {\n  content: \"\\f186\"; }\n\n.md-format-size:before {\n  content: \"\\f187\"; }\n\n.md-format-strikethrough:before {\n  content: \"\\f188\"; }\n\n.md-format-textdirection-l-to-r:before {\n  content: \"\\f189\"; }\n\n.md-format-textdirection-r-to-l:before {\n  content: \"\\f18a\"; }\n\n.md-format-underline:before {\n  content: \"\\f18b\"; }\n\n.md-functions:before {\n  content: \"\\f18c\"; }\n\n.md-insert-chart:before {\n  content: \"\\f18d\"; }\n\n.md-insert-comment:before {\n  content: \"\\f18e\"; }\n\n.md-insert-drive-file:before {\n  content: \"\\f18f\"; }\n\n.md-insert-emoticon:before {\n  content: \"\\f190\"; }\n\n.md-insert-invitation:before {\n  content: \"\\f191\"; }\n\n.md-insert-link:before {\n  content: \"\\f192\"; }\n\n.md-insert-photo:before {\n  content: \"\\f193\"; }\n\n.md-merge-type:before {\n  content: \"\\f194\"; }\n\n.md-mode-comment:before {\n  content: \"\\f195\"; }\n\n.md-mode-edit:before {\n  content: \"\\f196\"; }\n\n.md-publish:before {\n  content: \"\\f197\"; }\n\n.md-vertical-align-bottom:before {\n  content: \"\\f198\"; }\n\n.md-vertical-align-center:before {\n  content: \"\\f199\"; }\n\n.md-vertical-align-top:before {\n  content: \"\\f19a\"; }\n\n.md-wrap-text:before {\n  content: \"\\f19b\"; }\n\n.md-attachment:before {\n  content: \"\\f19c\"; }\n\n.md-cloud:before {\n  content: \"\\f19d\"; }\n\n.md-cloud-circle:before {\n  content: \"\\f19e\"; }\n\n.md-cloud-done:before {\n  content: \"\\f19f\"; }\n\n.md-cloud-download:before {\n  content: \"\\f1a0\"; }\n\n.md-cloud-off:before {\n  content: \"\\f1a1\"; }\n\n.md-cloud-queue:before {\n  content: \"\\f1a2\"; }\n\n.md-cloud-upload:before {\n  content: \"\\f1a3\"; }\n\n.md-file-download:before {\n  content: \"\\f1a4\"; }\n\n.md-file-upload:before {\n  content: \"\\f1a5\"; }\n\n.md-folder:before {\n  content: \"\\f1a6\"; }\n\n.md-folder-open:before {\n  content: \"\\f1a7\"; }\n\n.md-folder-shared:before {\n  content: \"\\f1a8\"; }\n\n.md-cast:before {\n  content: \"\\f1a9\"; }\n\n.md-cast-connected:before {\n  content: \"\\f1aa\"; }\n\n.md-computer:before {\n  content: \"\\f1ab\"; }\n\n.md-desktop-mac:before {\n  content: \"\\f1ac\"; }\n\n.md-desktop-windows:before {\n  content: \"\\f1ad\"; }\n\n.md-dock:before {\n  content: \"\\f1ae\"; }\n\n.md-gamepad:before {\n  content: \"\\f1af\"; }\n\n.md-headset:before {\n  content: \"\\f1b0\"; }\n\n.md-headset-mic:before {\n  content: \"\\f1b1\"; }\n\n.md-keyboard:before {\n  content: \"\\f1b2\"; }\n\n.md-keyboard-alt:before {\n  content: \"\\f1b3\"; }\n\n.md-keyboard-arrow-down:before {\n  content: \"\\f1b4\"; }\n\n.md-keyboard-arrow-left:before {\n  content: \"\\f1b5\"; }\n\n.md-keyboard-arrow-right:before {\n  content: \"\\f1b6\"; }\n\n.md-keyboard-arrow-up:before {\n  content: \"\\f1b7\"; }\n\n.md-keyboard-backspace:before {\n  content: \"\\f1b8\"; }\n\n.md-keyboard-capslock:before {\n  content: \"\\f1b9\"; }\n\n.md-keyboard-control:before {\n  content: \"\\f1ba\"; }\n\n.md-keyboard-hide:before {\n  content: \"\\f1bb\"; }\n\n.md-keyboard-return:before {\n  content: \"\\f1bc\"; }\n\n.md-keyboard-tab:before {\n  content: \"\\f1bd\"; }\n\n.md-keyboard-voice:before {\n  content: \"\\f1be\"; }\n\n.md-laptop:before {\n  content: \"\\f1bf\"; }\n\n.md-laptop-chromebook:before {\n  content: \"\\f1c0\"; }\n\n.md-laptop-mac:before {\n  content: \"\\f1c1\"; }\n\n.md-laptop-windows:before {\n  content: \"\\f1c2\"; }\n\n.md-memory:before {\n  content: \"\\f1c3\"; }\n\n.md-mouse:before {\n  content: \"\\f1c4\"; }\n\n.md-phone-android:before {\n  content: \"\\f1c5\"; }\n\n.md-phone-iphone:before {\n  content: \"\\f1c6\"; }\n\n.md-phonelink:before {\n  content: \"\\f1c7\"; }\n\n.md-phonelink-off:before {\n  content: \"\\f1c8\"; }\n\n.md-security:before {\n  content: \"\\f1c9\"; }\n\n.md-sim-card:before {\n  content: \"\\f1ca\"; }\n\n.md-smartphone:before {\n  content: \"\\f1cb\"; }\n\n.md-speaker:before {\n  content: \"\\f1cc\"; }\n\n.md-tablet:before {\n  content: \"\\f1cd\"; }\n\n.md-tablet-android:before {\n  content: \"\\f1ce\"; }\n\n.md-tablet-mac:before {\n  content: \"\\f1cf\"; }\n\n.md-tv:before {\n  content: \"\\f1d0\"; }\n\n.md-watch:before {\n  content: \"\\f1d1\"; }\n\n.md-add-to-photos:before {\n  content: \"\\f1d2\"; }\n\n.md-adjust:before {\n  content: \"\\f1d3\"; }\n\n.md-assistant-photo:before {\n  content: \"\\f1d4\"; }\n\n.md-audiotrack:before {\n  content: \"\\f1d5\"; }\n\n.md-blur-circular:before {\n  content: \"\\f1d6\"; }\n\n.md-blur-linear:before {\n  content: \"\\f1d7\"; }\n\n.md-blur-off:before {\n  content: \"\\f1d8\"; }\n\n.md-blur-on:before {\n  content: \"\\f1d9\"; }\n\n.md-brightness-1:before {\n  content: \"\\f1da\"; }\n\n.md-brightness-2:before {\n  content: \"\\f1db\"; }\n\n.md-brightness-3:before {\n  content: \"\\f1dc\"; }\n\n.md-brightness-4:before {\n  content: \"\\f1dd\"; }\n\n.md-brightness-5:before {\n  content: \"\\f1de\"; }\n\n.md-brightness-6:before {\n  content: \"\\f1df\"; }\n\n.md-brightness-7:before {\n  content: \"\\f1e0\"; }\n\n.md-brush:before {\n  content: \"\\f1e1\"; }\n\n.md-camera:before {\n  content: \"\\f1e2\"; }\n\n.md-camera-alt:before {\n  content: \"\\f1e3\"; }\n\n.md-camera-front:before {\n  content: \"\\f1e4\"; }\n\n.md-camera-rear:before {\n  content: \"\\f1e5\"; }\n\n.md-camera-roll:before {\n  content: \"\\f1e6\"; }\n\n.md-center-focus-strong:before {\n  content: \"\\f1e7\"; }\n\n.md-center-focus-weak:before {\n  content: \"\\f1e8\"; }\n\n.md-collections:before {\n  content: \"\\f1e9\"; }\n\n.md-colorize:before {\n  content: \"\\f1ea\"; }\n\n.md-color-lens:before {\n  content: \"\\f1eb\"; }\n\n.md-compare:before {\n  content: \"\\f1ec\"; }\n\n.md-control-point:before {\n  content: \"\\f1ed\"; }\n\n.md-control-point-duplicate:before {\n  content: \"\\f1ee\"; }\n\n.md-crop:before {\n  content: \"\\f1ef\"; }\n\n.md-crop-3-2:before {\n  content: \"\\f1f0\"; }\n\n.md-crop-5-4:before {\n  content: \"\\f1f1\"; }\n\n.md-crop-7-5:before {\n  content: \"\\f1f2\"; }\n\n.md-crop-16-9:before {\n  content: \"\\f1f3\"; }\n\n.md-crop-din:before {\n  content: \"\\f1f4\"; }\n\n.md-crop-free:before {\n  content: \"\\f1f5\"; }\n\n.md-crop-landscape:before {\n  content: \"\\f1f6\"; }\n\n.md-crop-original:before {\n  content: \"\\f1f7\"; }\n\n.md-crop-portrait:before {\n  content: \"\\f1f8\"; }\n\n.md-crop-square:before {\n  content: \"\\f1f9\"; }\n\n.md-dehaze:before {\n  content: \"\\f1fa\"; }\n\n.md-details:before {\n  content: \"\\f1fb\"; }\n\n.md-edit:before {\n  content: \"\\f1fc\"; }\n\n.md-exposure:before {\n  content: \"\\f1fd\"; }\n\n.md-exposure-minus-1:before {\n  content: \"\\f1fe\"; }\n\n.md-exposure-minus-2:before {\n  content: \"\\f1ff\"; }\n\n.md-exposure-zero:before {\n  content: \"\\f200\"; }\n\n.md-exposure-plus-1:before {\n  content: \"\\f201\"; }\n\n.md-exposure-plus-2:before {\n  content: \"\\f202\"; }\n\n.md-filter:before {\n  content: \"\\f203\"; }\n\n.md-filter-1:before {\n  content: \"\\f204\"; }\n\n.md-filter-2:before {\n  content: \"\\f205\"; }\n\n.md-filter-3:before {\n  content: \"\\f206\"; }\n\n.md-filter-4:before {\n  content: \"\\f207\"; }\n\n.md-filter-5:before {\n  content: \"\\f208\"; }\n\n.md-filter-6:before {\n  content: \"\\f209\"; }\n\n.md-filter-7:before {\n  content: \"\\f20a\"; }\n\n.md-filter-8:before {\n  content: \"\\f20b\"; }\n\n.md-filter-9:before {\n  content: \"\\f20c\"; }\n\n.md-filter-9-plus:before {\n  content: \"\\f20d\"; }\n\n.md-filter-b-and-w:before {\n  content: \"\\f20e\"; }\n\n.md-filter-center-focus:before {\n  content: \"\\f20f\"; }\n\n.md-filter-drama:before {\n  content: \"\\f210\"; }\n\n.md-filter-frames:before {\n  content: \"\\f211\"; }\n\n.md-filter-hdr:before {\n  content: \"\\f212\"; }\n\n.md-filter-none:before {\n  content: \"\\f213\"; }\n\n.md-filter-tilt-shift:before {\n  content: \"\\f214\"; }\n\n.md-filter-vintage:before {\n  content: \"\\f215\"; }\n\n.md-flare:before {\n  content: \"\\f216\"; }\n\n.md-flash-auto:before {\n  content: \"\\f217\"; }\n\n.md-flash-off:before {\n  content: \"\\f218\"; }\n\n.md-flash-on:before {\n  content: \"\\f219\"; }\n\n.md-flip:before {\n  content: \"\\f21a\"; }\n\n.md-gradient:before {\n  content: \"\\f21b\"; }\n\n.md-grain:before {\n  content: \"\\f21c\"; }\n\n.md-grid-off:before {\n  content: \"\\f21d\"; }\n\n.md-grid-on:before {\n  content: \"\\f21e\"; }\n\n.md-hdr-off:before {\n  content: \"\\f21f\"; }\n\n.md-hdr-on:before {\n  content: \"\\f220\"; }\n\n.md-hdr-strong:before {\n  content: \"\\f221\"; }\n\n.md-hdr-weak:before {\n  content: \"\\f222\"; }\n\n.md-healing:before {\n  content: \"\\f223\"; }\n\n.md-image:before {\n  content: \"\\f224\"; }\n\n.md-image-aspect-ratio:before {\n  content: \"\\f225\"; }\n\n.md-iso:before {\n  content: \"\\f226\"; }\n\n.md-landscape:before {\n  content: \"\\f227\"; }\n\n.md-leak-add:before {\n  content: \"\\f228\"; }\n\n.md-leak-remove:before {\n  content: \"\\f229\"; }\n\n.md-lens:before {\n  content: \"\\f22a\"; }\n\n.md-looks:before {\n  content: \"\\f22b\"; }\n\n.md-looks-1:before {\n  content: \"\\f22c\"; }\n\n.md-looks-2:before {\n  content: \"\\f22d\"; }\n\n.md-looks-3:before {\n  content: \"\\f22e\"; }\n\n.md-looks-4:before {\n  content: \"\\f22f\"; }\n\n.md-looks-5:before {\n  content: \"\\f230\"; }\n\n.md-looks-6:before {\n  content: \"\\f231\"; }\n\n.md-loupe:before {\n  content: \"\\f232\"; }\n\n.md-movie-creation:before {\n  content: \"\\f233\"; }\n\n.md-nature:before {\n  content: \"\\f234\"; }\n\n.md-nature-people:before {\n  content: \"\\f235\"; }\n\n.md-navigate-before:before {\n  content: \"\\f236\"; }\n\n.md-navigate-next:before {\n  content: \"\\f237\"; }\n\n.md-palette:before {\n  content: \"\\f238\"; }\n\n.md-panorama:before {\n  content: \"\\f239\"; }\n\n.md-panorama-fisheye:before {\n  content: \"\\f23a\"; }\n\n.md-panorama-horizontal:before {\n  content: \"\\f23b\"; }\n\n.md-panorama-vertical:before {\n  content: \"\\f23c\"; }\n\n.md-panorama-wide-angle:before {\n  content: \"\\f23d\"; }\n\n.md-photo:before {\n  content: \"\\f23e\"; }\n\n.md-photo-album:before {\n  content: \"\\f23f\"; }\n\n.md-photo-camera:before {\n  content: \"\\f240\"; }\n\n.md-photo-library:before {\n  content: \"\\f241\"; }\n\n.md-portrait:before {\n  content: \"\\f242\"; }\n\n.md-remove-red-eye:before {\n  content: \"\\f243\"; }\n\n.md-rotate-left:before {\n  content: \"\\f244\"; }\n\n.md-rotate-right:before {\n  content: \"\\f245\"; }\n\n.md-slideshow:before {\n  content: \"\\f246\"; }\n\n.md-straighten:before {\n  content: \"\\f247\"; }\n\n.md-style:before {\n  content: \"\\f248\"; }\n\n.md-switch-camera:before {\n  content: \"\\f249\"; }\n\n.md-switch-video:before {\n  content: \"\\f24a\"; }\n\n.md-tag-faces:before {\n  content: \"\\f24b\"; }\n\n.md-texture:before {\n  content: \"\\f24c\"; }\n\n.md-timelapse:before {\n  content: \"\\f24d\"; }\n\n.md-timer:before {\n  content: \"\\f24e\"; }\n\n.md-timer-3:before {\n  content: \"\\f24f\"; }\n\n.md-timer-10:before {\n  content: \"\\f250\"; }\n\n.md-timer-auto:before {\n  content: \"\\f251\"; }\n\n.md-timer-off:before {\n  content: \"\\f252\"; }\n\n.md-tonality:before {\n  content: \"\\f253\"; }\n\n.md-transform:before {\n  content: \"\\f254\"; }\n\n.md-tune:before {\n  content: \"\\f255\"; }\n\n.md-wb-auto:before {\n  content: \"\\f256\"; }\n\n.md-wb-cloudy:before {\n  content: \"\\f257\"; }\n\n.md-wb-incandescent:before {\n  content: \"\\f258\"; }\n\n.md-wb-irradescent:before {\n  content: \"\\f259\"; }\n\n.md-wb-sunny:before {\n  content: \"\\f25a\"; }\n\n.md-beenhere:before {\n  content: \"\\f25b\"; }\n\n.md-directions:before {\n  content: \"\\f25c\"; }\n\n.md-directions-bike:before {\n  content: \"\\f25d\"; }\n\n.md-directions-bus:before {\n  content: \"\\f25e\"; }\n\n.md-directions-car:before {\n  content: \"\\f25f\"; }\n\n.md-directions-ferry:before {\n  content: \"\\f260\"; }\n\n.md-directions-subway:before {\n  content: \"\\f261\"; }\n\n.md-directions-train:before {\n  content: \"\\f262\"; }\n\n.md-directions-transit:before {\n  content: \"\\f263\"; }\n\n.md-directions-walk:before {\n  content: \"\\f264\"; }\n\n.md-flight:before {\n  content: \"\\f265\"; }\n\n.md-hotel:before {\n  content: \"\\f266\"; }\n\n.md-layers:before {\n  content: \"\\f267\"; }\n\n.md-layers-clear:before {\n  content: \"\\f268\"; }\n\n.md-local-airport:before {\n  content: \"\\f269\"; }\n\n.md-local-atm:before {\n  content: \"\\f26a\"; }\n\n.md-local-attraction:before {\n  content: \"\\f26b\"; }\n\n.md-local-bar:before {\n  content: \"\\f26c\"; }\n\n.md-local-cafe:before {\n  content: \"\\f26d\"; }\n\n.md-local-car-wash:before {\n  content: \"\\f26e\"; }\n\n.md-local-convenience-store:before {\n  content: \"\\f26f\"; }\n\n.md-local-drink:before {\n  content: \"\\f270\"; }\n\n.md-local-florist:before {\n  content: \"\\f271\"; }\n\n.md-local-gas-station:before {\n  content: \"\\f272\"; }\n\n.md-local-grocery-store:before {\n  content: \"\\f273\"; }\n\n.md-local-hospital:before {\n  content: \"\\f274\"; }\n\n.md-local-hotel:before {\n  content: \"\\f275\"; }\n\n.md-local-laundry-service:before {\n  content: \"\\f276\"; }\n\n.md-local-library:before {\n  content: \"\\f277\"; }\n\n.md-local-mall:before {\n  content: \"\\f278\"; }\n\n.md-local-movies:before {\n  content: \"\\f279\"; }\n\n.md-local-offer:before {\n  content: \"\\f27a\"; }\n\n.md-local-parking:before {\n  content: \"\\f27b\"; }\n\n.md-local-pharmacy:before {\n  content: \"\\f27c\"; }\n\n.md-local-phone:before {\n  content: \"\\f27d\"; }\n\n.md-local-pizza:before {\n  content: \"\\f27e\"; }\n\n.md-local-play:before {\n  content: \"\\f27f\"; }\n\n.md-local-post-office:before {\n  content: \"\\f280\"; }\n\n.md-local-print-shop:before {\n  content: \"\\f281\"; }\n\n.md-local-restaurant:before {\n  content: \"\\f282\"; }\n\n.md-local-see:before {\n  content: \"\\f283\"; }\n\n.md-local-shipping:before {\n  content: \"\\f284\"; }\n\n.md-local-taxi:before {\n  content: \"\\f285\"; }\n\n.md-location-history:before {\n  content: \"\\f286\"; }\n\n.md-map:before {\n  content: \"\\f287\"; }\n\n.md-my-location:before {\n  content: \"\\f288\"; }\n\n.md-navigation:before {\n  content: \"\\f289\"; }\n\n.md-pin-drop:before {\n  content: \"\\f28a\"; }\n\n.md-place:before {\n  content: \"\\f28b\"; }\n\n.md-rate-review:before {\n  content: \"\\f28c\"; }\n\n.md-restaurant-menu:before {\n  content: \"\\f28d\"; }\n\n.md-satellite:before {\n  content: \"\\f28e\"; }\n\n.md-store-mall-directory:before {\n  content: \"\\f28f\"; }\n\n.md-terrain:before {\n  content: \"\\f290\"; }\n\n.md-traffic:before {\n  content: \"\\f291\"; }\n\n.md-apps:before {\n  content: \"\\f292\"; }\n\n.md-cancel:before {\n  content: \"\\f293\"; }\n\n.md-arrow-drop-down-circle:before {\n  content: \"\\f294\"; }\n\n.md-arrow-drop-down:before {\n  content: \"\\f295\"; }\n\n.md-arrow-drop-up:before {\n  content: \"\\f296\"; }\n\n.md-arrow-back:before {\n  content: \"\\f297\"; }\n\n.md-arrow-forward:before {\n  content: \"\\f298\"; }\n\n.md-check:before {\n  content: \"\\f299\"; }\n\n.md-close:before {\n  content: \"\\f29a\"; }\n\n.md-chevron-left:before {\n  content: \"\\f29b\"; }\n\n.md-chevron-right:before {\n  content: \"\\f29c\"; }\n\n.md-expand-less:before {\n  content: \"\\f29d\"; }\n\n.md-expand-more:before {\n  content: \"\\f29e\"; }\n\n.md-fullscreen:before {\n  content: \"\\f29f\"; }\n\n.md-fullscreen-exit:before {\n  content: \"\\f2a0\"; }\n\n.md-menu:before {\n  content: \"\\f2a1\"; }\n\n.md-more-horiz:before {\n  content: \"\\f2a2\"; }\n\n.md-more-vert:before {\n  content: \"\\f2a3\"; }\n\n.md-refresh:before {\n  content: \"\\f2a4\"; }\n\n.md-unfold-less:before {\n  content: \"\\f2a5\"; }\n\n.md-unfold-more:before {\n  content: \"\\f2a6\"; }\n\n.md-adb:before {\n  content: \"\\f2a7\"; }\n\n.md-bluetooth-audio:before {\n  content: \"\\f2a8\"; }\n\n.md-disc-full:before {\n  content: \"\\f2a9\"; }\n\n.md-dnd-forwardslash:before {\n  content: \"\\f2aa\"; }\n\n.md-do-not-disturb:before {\n  content: \"\\f2ab\"; }\n\n.md-drive-eta:before {\n  content: \"\\f2ac\"; }\n\n.md-event-available:before {\n  content: \"\\f2ad\"; }\n\n.md-event-busy:before {\n  content: \"\\f2ae\"; }\n\n.md-event-note:before {\n  content: \"\\f2af\"; }\n\n.md-folder-special:before {\n  content: \"\\f2b0\"; }\n\n.md-mms:before {\n  content: \"\\f2b1\"; }\n\n.md-more:before {\n  content: \"\\f2b2\"; }\n\n.md-network-locked:before {\n  content: \"\\f2b3\"; }\n\n.md-phone-bluetooth-speaker:before {\n  content: \"\\f2b4\"; }\n\n.md-phone-forwarded:before {\n  content: \"\\f2b5\"; }\n\n.md-phone-in-talk:before {\n  content: \"\\f2b6\"; }\n\n.md-phone-locked:before {\n  content: \"\\f2b7\"; }\n\n.md-phone-missed:before {\n  content: \"\\f2b8\"; }\n\n.md-phone-paused:before {\n  content: \"\\f2b9\"; }\n\n.md-play-download:before {\n  content: \"\\f2ba\"; }\n\n.md-play-install:before {\n  content: \"\\f2bb\"; }\n\n.md-sd-card:before {\n  content: \"\\f2bc\"; }\n\n.md-sim-card-alert:before {\n  content: \"\\f2bd\"; }\n\n.md-sms:before {\n  content: \"\\f2be\"; }\n\n.md-sms-failed:before {\n  content: \"\\f2bf\"; }\n\n.md-sync:before {\n  content: \"\\f2c0\"; }\n\n.md-sync-disabled:before {\n  content: \"\\f2c1\"; }\n\n.md-sync-problem:before {\n  content: \"\\f2c2\"; }\n\n.md-system-update:before {\n  content: \"\\f2c3\"; }\n\n.md-tap-and-play:before {\n  content: \"\\f2c4\"; }\n\n.md-time-to-leave:before {\n  content: \"\\f2c5\"; }\n\n.md-vibration:before {\n  content: \"\\f2c6\"; }\n\n.md-voice-chat:before {\n  content: \"\\f2c7\"; }\n\n.md-vpn-lock:before {\n  content: \"\\f2c8\"; }\n\n.md-cake:before {\n  content: \"\\f2c9\"; }\n\n.md-domain:before {\n  content: \"\\f2ca\"; }\n\n.md-location-city:before {\n  content: \"\\f2cb\"; }\n\n.md-mood:before {\n  content: \"\\f2cc\"; }\n\n.md-notifications-none:before {\n  content: \"\\f2cd\"; }\n\n.md-notifications:before {\n  content: \"\\f2ce\"; }\n\n.md-notifications-off:before {\n  content: \"\\f2cf\"; }\n\n.md-notifications-on:before {\n  content: \"\\f2d0\"; }\n\n.md-notifications-paused:before {\n  content: \"\\f2d1\"; }\n\n.md-pages:before {\n  content: \"\\f2d2\"; }\n\n.md-party-mode:before {\n  content: \"\\f2d3\"; }\n\n.md-group:before {\n  content: \"\\f2d4\"; }\n\n.md-group-add:before {\n  content: \"\\f2d5\"; }\n\n.md-people:before {\n  content: \"\\f2d6\"; }\n\n.md-people-outline:before {\n  content: \"\\f2d7\"; }\n\n.md-person:before {\n  content: \"\\f2d8\"; }\n\n.md-person-add:before {\n  content: \"\\f2d9\"; }\n\n.md-person-outline:before {\n  content: \"\\f2da\"; }\n\n.md-plus-one:before {\n  content: \"\\f2db\"; }\n\n.md-poll:before {\n  content: \"\\f2dc\"; }\n\n.md-public:before {\n  content: \"\\f2dd\"; }\n\n.md-school:before {\n  content: \"\\f2de\"; }\n\n.md-share:before {\n  content: \"\\f2df\"; }\n\n.md-whatshot:before {\n  content: \"\\f2e0\"; }\n\n.md-check-box:before {\n  content: \"\\f2e1\"; }\n\n.md-check-box-outline-blank:before {\n  content: \"\\f2e2\"; }\n\n.md-radio-button-off:before {\n  content: \"\\f2e3\"; }\n\n.md-radio-button-on:before {\n  content: \"\\f2e4\"; }\n\n.md-star:before {\n  content: \"\\f2e5\"; }\n\n.md-star-half:before {\n  content: \"\\f2e6\"; }\n\n.md-star-outline:before {\n  content: \"\\f2e7\"; }\n\n/*# sourceMappingURL=material-design-iconic-font.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/css/themify-icons.css",
    "content": "@font-face {\n  font-family: 'themify';\n  src: url(\"../fonts/themify.eot?-fvbane\");\n  src: url(\"../fonts/themify.eot?#iefix-fvbane\") format(\"embedded-opentype\"), url(\"../fonts/themify.woff?-fvbane\") format(\"woff\"), url(\"../fonts/themify.ttf?-fvbane\") format(\"truetype\"), url(\"../fonts/themify.svg?-fvbane#themify\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n[class^=\"ti-\"], [class*=\" ti-\"] {\n  font-family: 'themify';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ti-wand:before {\n  content: \"\\e600\"; }\n\n.ti-volume:before {\n  content: \"\\e601\"; }\n\n.ti-user:before {\n  content: \"\\e602\"; }\n\n.ti-unlock:before {\n  content: \"\\e603\"; }\n\n.ti-unlink:before {\n  content: \"\\e604\"; }\n\n.ti-trash:before {\n  content: \"\\e605\"; }\n\n.ti-thought:before {\n  content: \"\\e606\"; }\n\n.ti-target:before {\n  content: \"\\e607\"; }\n\n.ti-tag:before {\n  content: \"\\e608\"; }\n\n.ti-tablet:before {\n  content: \"\\e609\"; }\n\n.ti-star:before {\n  content: \"\\e60a\"; }\n\n.ti-spray:before {\n  content: \"\\e60b\"; }\n\n.ti-signal:before {\n  content: \"\\e60c\"; }\n\n.ti-shopping-cart:before {\n  content: \"\\e60d\"; }\n\n.ti-shopping-cart-full:before {\n  content: \"\\e60e\"; }\n\n.ti-settings:before {\n  content: \"\\e60f\"; }\n\n.ti-search:before {\n  content: \"\\e610\"; }\n\n.ti-zoom-in:before {\n  content: \"\\e611\"; }\n\n.ti-zoom-out:before {\n  content: \"\\e612\"; }\n\n.ti-cut:before {\n  content: \"\\e613\"; }\n\n.ti-ruler:before {\n  content: \"\\e614\"; }\n\n.ti-ruler-pencil:before {\n  content: \"\\e615\"; }\n\n.ti-ruler-alt:before {\n  content: \"\\e616\"; }\n\n.ti-bookmark:before {\n  content: \"\\e617\"; }\n\n.ti-bookmark-alt:before {\n  content: \"\\e618\"; }\n\n.ti-reload:before {\n  content: \"\\e619\"; }\n\n.ti-plus:before {\n  content: \"\\e61a\"; }\n\n.ti-pin:before {\n  content: \"\\e61b\"; }\n\n.ti-pencil:before {\n  content: \"\\e61c\"; }\n\n.ti-pencil-alt:before {\n  content: \"\\e61d\"; }\n\n.ti-paint-roller:before {\n  content: \"\\e61e\"; }\n\n.ti-paint-bucket:before {\n  content: \"\\e61f\"; }\n\n.ti-na:before {\n  content: \"\\e620\"; }\n\n.ti-mobile:before {\n  content: \"\\e621\"; }\n\n.ti-minus:before {\n  content: \"\\e622\"; }\n\n.ti-medall:before {\n  content: \"\\e623\"; }\n\n.ti-medall-alt:before {\n  content: \"\\e624\"; }\n\n.ti-marker:before {\n  content: \"\\e625\"; }\n\n.ti-marker-alt:before {\n  content: \"\\e626\"; }\n\n.ti-arrow-up:before {\n  content: \"\\e627\"; }\n\n.ti-arrow-right:before {\n  content: \"\\e628\"; }\n\n.ti-arrow-left:before {\n  content: \"\\e629\"; }\n\n.ti-arrow-down:before {\n  content: \"\\e62a\"; }\n\n.ti-lock:before {\n  content: \"\\e62b\"; }\n\n.ti-location-arrow:before {\n  content: \"\\e62c\"; }\n\n.ti-link:before {\n  content: \"\\e62d\"; }\n\n.ti-layout:before {\n  content: \"\\e62e\"; }\n\n.ti-layers:before {\n  content: \"\\e62f\"; }\n\n.ti-layers-alt:before {\n  content: \"\\e630\"; }\n\n.ti-key:before {\n  content: \"\\e631\"; }\n\n.ti-import:before {\n  content: \"\\e632\"; }\n\n.ti-image:before {\n  content: \"\\e633\"; }\n\n.ti-heart:before {\n  content: \"\\e634\"; }\n\n.ti-heart-broken:before {\n  content: \"\\e635\"; }\n\n.ti-hand-stop:before {\n  content: \"\\e636\"; }\n\n.ti-hand-open:before {\n  content: \"\\e637\"; }\n\n.ti-hand-drag:before {\n  content: \"\\e638\"; }\n\n.ti-folder:before {\n  content: \"\\e639\"; }\n\n.ti-flag:before {\n  content: \"\\e63a\"; }\n\n.ti-flag-alt:before {\n  content: \"\\e63b\"; }\n\n.ti-flag-alt-2:before {\n  content: \"\\e63c\"; }\n\n.ti-eye:before {\n  content: \"\\e63d\"; }\n\n.ti-export:before {\n  content: \"\\e63e\"; }\n\n.ti-exchange-vertical:before {\n  content: \"\\e63f\"; }\n\n.ti-desktop:before {\n  content: \"\\e640\"; }\n\n.ti-cup:before {\n  content: \"\\e641\"; }\n\n.ti-crown:before {\n  content: \"\\e642\"; }\n\n.ti-comments:before {\n  content: \"\\e643\"; }\n\n.ti-comment:before {\n  content: \"\\e644\"; }\n\n.ti-comment-alt:before {\n  content: \"\\e645\"; }\n\n.ti-close:before {\n  content: \"\\e646\"; }\n\n.ti-clip:before {\n  content: \"\\e647\"; }\n\n.ti-angle-up:before {\n  content: \"\\e648\"; }\n\n.ti-angle-right:before {\n  content: \"\\e649\"; }\n\n.ti-angle-left:before {\n  content: \"\\e64a\"; }\n\n.ti-angle-down:before {\n  content: \"\\e64b\"; }\n\n.ti-check:before {\n  content: \"\\e64c\"; }\n\n.ti-check-box:before {\n  content: \"\\e64d\"; }\n\n.ti-camera:before {\n  content: \"\\e64e\"; }\n\n.ti-announcement:before {\n  content: \"\\e64f\"; }\n\n.ti-brush:before {\n  content: \"\\e650\"; }\n\n.ti-briefcase:before {\n  content: \"\\e651\"; }\n\n.ti-bolt:before {\n  content: \"\\e652\"; }\n\n.ti-bolt-alt:before {\n  content: \"\\e653\"; }\n\n.ti-blackboard:before {\n  content: \"\\e654\"; }\n\n.ti-bag:before {\n  content: \"\\e655\"; }\n\n.ti-move:before {\n  content: \"\\e656\"; }\n\n.ti-arrows-vertical:before {\n  content: \"\\e657\"; }\n\n.ti-arrows-horizontal:before {\n  content: \"\\e658\"; }\n\n.ti-fullscreen:before {\n  content: \"\\e659\"; }\n\n.ti-arrow-top-right:before {\n  content: \"\\e65a\"; }\n\n.ti-arrow-top-left:before {\n  content: \"\\e65b\"; }\n\n.ti-arrow-circle-up:before {\n  content: \"\\e65c\"; }\n\n.ti-arrow-circle-right:before {\n  content: \"\\e65d\"; }\n\n.ti-arrow-circle-left:before {\n  content: \"\\e65e\"; }\n\n.ti-arrow-circle-down:before {\n  content: \"\\e65f\"; }\n\n.ti-angle-double-up:before {\n  content: \"\\e660\"; }\n\n.ti-angle-double-right:before {\n  content: \"\\e661\"; }\n\n.ti-angle-double-left:before {\n  content: \"\\e662\"; }\n\n.ti-angle-double-down:before {\n  content: \"\\e663\"; }\n\n.ti-zip:before {\n  content: \"\\e664\"; }\n\n.ti-world:before {\n  content: \"\\e665\"; }\n\n.ti-wheelchair:before {\n  content: \"\\e666\"; }\n\n.ti-view-list:before {\n  content: \"\\e667\"; }\n\n.ti-view-list-alt:before {\n  content: \"\\e668\"; }\n\n.ti-view-grid:before {\n  content: \"\\e669\"; }\n\n.ti-uppercase:before {\n  content: \"\\e66a\"; }\n\n.ti-upload:before {\n  content: \"\\e66b\"; }\n\n.ti-underline:before {\n  content: \"\\e66c\"; }\n\n.ti-truck:before {\n  content: \"\\e66d\"; }\n\n.ti-timer:before {\n  content: \"\\e66e\"; }\n\n.ti-ticket:before {\n  content: \"\\e66f\"; }\n\n.ti-thumb-up:before {\n  content: \"\\e670\"; }\n\n.ti-thumb-down:before {\n  content: \"\\e671\"; }\n\n.ti-text:before {\n  content: \"\\e672\"; }\n\n.ti-stats-up:before {\n  content: \"\\e673\"; }\n\n.ti-stats-down:before {\n  content: \"\\e674\"; }\n\n.ti-split-v:before {\n  content: \"\\e675\"; }\n\n.ti-split-h:before {\n  content: \"\\e676\"; }\n\n.ti-smallcap:before {\n  content: \"\\e677\"; }\n\n.ti-shine:before {\n  content: \"\\e678\"; }\n\n.ti-shift-right:before {\n  content: \"\\e679\"; }\n\n.ti-shift-left:before {\n  content: \"\\e67a\"; }\n\n.ti-shield:before {\n  content: \"\\e67b\"; }\n\n.ti-notepad:before {\n  content: \"\\e67c\"; }\n\n.ti-server:before {\n  content: \"\\e67d\"; }\n\n.ti-quote-right:before {\n  content: \"\\e67e\"; }\n\n.ti-quote-left:before {\n  content: \"\\e67f\"; }\n\n.ti-pulse:before {\n  content: \"\\e680\"; }\n\n.ti-printer:before {\n  content: \"\\e681\"; }\n\n.ti-power-off:before {\n  content: \"\\e682\"; }\n\n.ti-plug:before {\n  content: \"\\e683\"; }\n\n.ti-pie-chart:before {\n  content: \"\\e684\"; }\n\n.ti-paragraph:before {\n  content: \"\\e685\"; }\n\n.ti-panel:before {\n  content: \"\\e686\"; }\n\n.ti-package:before {\n  content: \"\\e687\"; }\n\n.ti-music:before {\n  content: \"\\e688\"; }\n\n.ti-music-alt:before {\n  content: \"\\e689\"; }\n\n.ti-mouse:before {\n  content: \"\\e68a\"; }\n\n.ti-mouse-alt:before {\n  content: \"\\e68b\"; }\n\n.ti-money:before {\n  content: \"\\e68c\"; }\n\n.ti-microphone:before {\n  content: \"\\e68d\"; }\n\n.ti-menu:before {\n  content: \"\\e68e\"; }\n\n.ti-menu-alt:before {\n  content: \"\\e68f\"; }\n\n.ti-map:before {\n  content: \"\\e690\"; }\n\n.ti-map-alt:before {\n  content: \"\\e691\"; }\n\n.ti-loop:before {\n  content: \"\\e692\"; }\n\n.ti-location-pin:before {\n  content: \"\\e693\"; }\n\n.ti-list:before {\n  content: \"\\e694\"; }\n\n.ti-light-bulb:before {\n  content: \"\\e695\"; }\n\n.ti-Italic:before {\n  content: \"\\e696\"; }\n\n.ti-info:before {\n  content: \"\\e697\"; }\n\n.ti-infinite:before {\n  content: \"\\e698\"; }\n\n.ti-id-badge:before {\n  content: \"\\e699\"; }\n\n.ti-hummer:before {\n  content: \"\\e69a\"; }\n\n.ti-home:before {\n  content: \"\\e69b\"; }\n\n.ti-help:before {\n  content: \"\\e69c\"; }\n\n.ti-headphone:before {\n  content: \"\\e69d\"; }\n\n.ti-harddrives:before {\n  content: \"\\e69e\"; }\n\n.ti-harddrive:before {\n  content: \"\\e69f\"; }\n\n.ti-gift:before {\n  content: \"\\e6a0\"; }\n\n.ti-game:before {\n  content: \"\\e6a1\"; }\n\n.ti-filter:before {\n  content: \"\\e6a2\"; }\n\n.ti-files:before {\n  content: \"\\e6a3\"; }\n\n.ti-file:before {\n  content: \"\\e6a4\"; }\n\n.ti-eraser:before {\n  content: \"\\e6a5\"; }\n\n.ti-envelope:before {\n  content: \"\\e6a6\"; }\n\n.ti-download:before {\n  content: \"\\e6a7\"; }\n\n.ti-direction:before {\n  content: \"\\e6a8\"; }\n\n.ti-direction-alt:before {\n  content: \"\\e6a9\"; }\n\n.ti-dashboard:before {\n  content: \"\\e6aa\"; }\n\n.ti-control-stop:before {\n  content: \"\\e6ab\"; }\n\n.ti-control-shuffle:before {\n  content: \"\\e6ac\"; }\n\n.ti-control-play:before {\n  content: \"\\e6ad\"; }\n\n.ti-control-pause:before {\n  content: \"\\e6ae\"; }\n\n.ti-control-forward:before {\n  content: \"\\e6af\"; }\n\n.ti-control-backward:before {\n  content: \"\\e6b0\"; }\n\n.ti-cloud:before {\n  content: \"\\e6b1\"; }\n\n.ti-cloud-up:before {\n  content: \"\\e6b2\"; }\n\n.ti-cloud-down:before {\n  content: \"\\e6b3\"; }\n\n.ti-clipboard:before {\n  content: \"\\e6b4\"; }\n\n.ti-car:before {\n  content: \"\\e6b5\"; }\n\n.ti-calendar:before {\n  content: \"\\e6b6\"; }\n\n.ti-book:before {\n  content: \"\\e6b7\"; }\n\n.ti-bell:before {\n  content: \"\\e6b8\"; }\n\n.ti-basketball:before {\n  content: \"\\e6b9\"; }\n\n.ti-bar-chart:before {\n  content: \"\\e6ba\"; }\n\n.ti-bar-chart-alt:before {\n  content: \"\\e6bb\"; }\n\n.ti-back-right:before {\n  content: \"\\e6bc\"; }\n\n.ti-back-left:before {\n  content: \"\\e6bd\"; }\n\n.ti-arrows-corner:before {\n  content: \"\\e6be\"; }\n\n.ti-archive:before {\n  content: \"\\e6bf\"; }\n\n.ti-anchor:before {\n  content: \"\\e6c0\"; }\n\n.ti-align-right:before {\n  content: \"\\e6c1\"; }\n\n.ti-align-left:before {\n  content: \"\\e6c2\"; }\n\n.ti-align-justify:before {\n  content: \"\\e6c3\"; }\n\n.ti-align-center:before {\n  content: \"\\e6c4\"; }\n\n.ti-alert:before {\n  content: \"\\e6c5\"; }\n\n.ti-alarm-clock:before {\n  content: \"\\e6c6\"; }\n\n.ti-agenda:before {\n  content: \"\\e6c7\"; }\n\n.ti-write:before {\n  content: \"\\e6c8\"; }\n\n.ti-window:before {\n  content: \"\\e6c9\"; }\n\n.ti-widgetized:before {\n  content: \"\\e6ca\"; }\n\n.ti-widget:before {\n  content: \"\\e6cb\"; }\n\n.ti-widget-alt:before {\n  content: \"\\e6cc\"; }\n\n.ti-wallet:before {\n  content: \"\\e6cd\"; }\n\n.ti-video-clapper:before {\n  content: \"\\e6ce\"; }\n\n.ti-video-camera:before {\n  content: \"\\e6cf\"; }\n\n.ti-vector:before {\n  content: \"\\e6d0\"; }\n\n.ti-themify-logo:before {\n  content: \"\\e6d1\"; }\n\n.ti-themify-favicon:before {\n  content: \"\\e6d2\"; }\n\n.ti-themify-favicon-alt:before {\n  content: \"\\e6d3\"; }\n\n.ti-support:before {\n  content: \"\\e6d4\"; }\n\n.ti-stamp:before {\n  content: \"\\e6d5\"; }\n\n.ti-split-v-alt:before {\n  content: \"\\e6d6\"; }\n\n.ti-slice:before {\n  content: \"\\e6d7\"; }\n\n.ti-shortcode:before {\n  content: \"\\e6d8\"; }\n\n.ti-shift-right-alt:before {\n  content: \"\\e6d9\"; }\n\n.ti-shift-left-alt:before {\n  content: \"\\e6da\"; }\n\n.ti-ruler-alt-2:before {\n  content: \"\\e6db\"; }\n\n.ti-receipt:before {\n  content: \"\\e6dc\"; }\n\n.ti-pin2:before {\n  content: \"\\e6dd\"; }\n\n.ti-pin-alt:before {\n  content: \"\\e6de\"; }\n\n.ti-pencil-alt2:before {\n  content: \"\\e6df\"; }\n\n.ti-palette:before {\n  content: \"\\e6e0\"; }\n\n.ti-more:before {\n  content: \"\\e6e1\"; }\n\n.ti-more-alt:before {\n  content: \"\\e6e2\"; }\n\n.ti-microphone-alt:before {\n  content: \"\\e6e3\"; }\n\n.ti-magnet:before {\n  content: \"\\e6e4\"; }\n\n.ti-line-double:before {\n  content: \"\\e6e5\"; }\n\n.ti-line-dotted:before {\n  content: \"\\e6e6\"; }\n\n.ti-line-dashed:before {\n  content: \"\\e6e7\"; }\n\n.ti-layout-width-full:before {\n  content: \"\\e6e8\"; }\n\n.ti-layout-width-default:before {\n  content: \"\\e6e9\"; }\n\n.ti-layout-width-default-alt:before {\n  content: \"\\e6ea\"; }\n\n.ti-layout-tab:before {\n  content: \"\\e6eb\"; }\n\n.ti-layout-tab-window:before {\n  content: \"\\e6ec\"; }\n\n.ti-layout-tab-v:before {\n  content: \"\\e6ed\"; }\n\n.ti-layout-tab-min:before {\n  content: \"\\e6ee\"; }\n\n.ti-layout-slider:before {\n  content: \"\\e6ef\"; }\n\n.ti-layout-slider-alt:before {\n  content: \"\\e6f0\"; }\n\n.ti-layout-sidebar-right:before {\n  content: \"\\e6f1\"; }\n\n.ti-layout-sidebar-none:before {\n  content: \"\\e6f2\"; }\n\n.ti-layout-sidebar-left:before {\n  content: \"\\e6f3\"; }\n\n.ti-layout-placeholder:before {\n  content: \"\\e6f4\"; }\n\n.ti-layout-menu:before {\n  content: \"\\e6f5\"; }\n\n.ti-layout-menu-v:before {\n  content: \"\\e6f6\"; }\n\n.ti-layout-menu-separated:before {\n  content: \"\\e6f7\"; }\n\n.ti-layout-menu-full:before {\n  content: \"\\e6f8\"; }\n\n.ti-layout-media-right-alt:before {\n  content: \"\\e6f9\"; }\n\n.ti-layout-media-right:before {\n  content: \"\\e6fa\"; }\n\n.ti-layout-media-overlay:before {\n  content: \"\\e6fb\"; }\n\n.ti-layout-media-overlay-alt:before {\n  content: \"\\e6fc\"; }\n\n.ti-layout-media-overlay-alt-2:before {\n  content: \"\\e6fd\"; }\n\n.ti-layout-media-left-alt:before {\n  content: \"\\e6fe\"; }\n\n.ti-layout-media-left:before {\n  content: \"\\e6ff\"; }\n\n.ti-layout-media-center-alt:before {\n  content: \"\\e700\"; }\n\n.ti-layout-media-center:before {\n  content: \"\\e701\"; }\n\n.ti-layout-list-thumb:before {\n  content: \"\\e702\"; }\n\n.ti-layout-list-thumb-alt:before {\n  content: \"\\e703\"; }\n\n.ti-layout-list-post:before {\n  content: \"\\e704\"; }\n\n.ti-layout-list-large-image:before {\n  content: \"\\e705\"; }\n\n.ti-layout-line-solid:before {\n  content: \"\\e706\"; }\n\n.ti-layout-grid4:before {\n  content: \"\\e707\"; }\n\n.ti-layout-grid3:before {\n  content: \"\\e708\"; }\n\n.ti-layout-grid2:before {\n  content: \"\\e709\"; }\n\n.ti-layout-grid2-thumb:before {\n  content: \"\\e70a\"; }\n\n.ti-layout-cta-right:before {\n  content: \"\\e70b\"; }\n\n.ti-layout-cta-left:before {\n  content: \"\\e70c\"; }\n\n.ti-layout-cta-center:before {\n  content: \"\\e70d\"; }\n\n.ti-layout-cta-btn-right:before {\n  content: \"\\e70e\"; }\n\n.ti-layout-cta-btn-left:before {\n  content: \"\\e70f\"; }\n\n.ti-layout-column4:before {\n  content: \"\\e710\"; }\n\n.ti-layout-column3:before {\n  content: \"\\e711\"; }\n\n.ti-layout-column2:before {\n  content: \"\\e712\"; }\n\n.ti-layout-accordion-separated:before {\n  content: \"\\e713\"; }\n\n.ti-layout-accordion-merged:before {\n  content: \"\\e714\"; }\n\n.ti-layout-accordion-list:before {\n  content: \"\\e715\"; }\n\n.ti-ink-pen:before {\n  content: \"\\e716\"; }\n\n.ti-info-alt:before {\n  content: \"\\e717\"; }\n\n.ti-help-alt:before {\n  content: \"\\e718\"; }\n\n.ti-headphone-alt:before {\n  content: \"\\e719\"; }\n\n.ti-hand-point-up:before {\n  content: \"\\e71a\"; }\n\n.ti-hand-point-right:before {\n  content: \"\\e71b\"; }\n\n.ti-hand-point-left:before {\n  content: \"\\e71c\"; }\n\n.ti-hand-point-down:before {\n  content: \"\\e71d\"; }\n\n.ti-gallery:before {\n  content: \"\\e71e\"; }\n\n.ti-face-smile:before {\n  content: \"\\e71f\"; }\n\n.ti-face-sad:before {\n  content: \"\\e720\"; }\n\n.ti-credit-card:before {\n  content: \"\\e721\"; }\n\n.ti-control-skip-forward:before {\n  content: \"\\e722\"; }\n\n.ti-control-skip-backward:before {\n  content: \"\\e723\"; }\n\n.ti-control-record:before {\n  content: \"\\e724\"; }\n\n.ti-control-eject:before {\n  content: \"\\e725\"; }\n\n.ti-comments-smiley:before {\n  content: \"\\e726\"; }\n\n.ti-brush-alt:before {\n  content: \"\\e727\"; }\n\n.ti-youtube:before {\n  content: \"\\e728\"; }\n\n.ti-vimeo:before {\n  content: \"\\e729\"; }\n\n.ti-twitter:before {\n  content: \"\\e72a\"; }\n\n.ti-time:before {\n  content: \"\\e72b\"; }\n\n.ti-tumblr:before {\n  content: \"\\e72c\"; }\n\n.ti-skype:before {\n  content: \"\\e72d\"; }\n\n.ti-share:before {\n  content: \"\\e72e\"; }\n\n.ti-share-alt:before {\n  content: \"\\e72f\"; }\n\n.ti-rocket:before {\n  content: \"\\e730\"; }\n\n.ti-pinterest:before {\n  content: \"\\e731\"; }\n\n.ti-new-window:before {\n  content: \"\\e732\"; }\n\n.ti-microsoft:before {\n  content: \"\\e733\"; }\n\n.ti-list-ol:before {\n  content: \"\\e734\"; }\n\n.ti-linkedin:before {\n  content: \"\\e735\"; }\n\n.ti-layout-sidebar-2:before {\n  content: \"\\e736\"; }\n\n.ti-layout-grid4-alt:before {\n  content: \"\\e737\"; }\n\n.ti-layout-grid3-alt:before {\n  content: \"\\e738\"; }\n\n.ti-layout-grid2-alt:before {\n  content: \"\\e739\"; }\n\n.ti-layout-column4-alt:before {\n  content: \"\\e73a\"; }\n\n.ti-layout-column3-alt:before {\n  content: \"\\e73b\"; }\n\n.ti-layout-column2-alt:before {\n  content: \"\\e73c\"; }\n\n.ti-instagram:before {\n  content: \"\\e73d\"; }\n\n.ti-google:before {\n  content: \"\\e73e\"; }\n\n.ti-github:before {\n  content: \"\\e73f\"; }\n\n.ti-flickr:before {\n  content: \"\\e740\"; }\n\n.ti-facebook:before {\n  content: \"\\e741\"; }\n\n.ti-dropbox:before {\n  content: \"\\e742\"; }\n\n.ti-dribbble:before {\n  content: \"\\e743\"; }\n\n.ti-apple:before {\n  content: \"\\e744\"; }\n\n.ti-android:before {\n  content: \"\\e745\"; }\n\n.ti-save:before {\n  content: \"\\e746\"; }\n\n.ti-save-alt:before {\n  content: \"\\e747\"; }\n\n.ti-yahoo:before {\n  content: \"\\e748\"; }\n\n.ti-wordpress:before {\n  content: \"\\e749\"; }\n\n.ti-vimeo-alt:before {\n  content: \"\\e74a\"; }\n\n.ti-twitter-alt:before {\n  content: \"\\e74b\"; }\n\n.ti-tumblr-alt:before {\n  content: \"\\e74c\"; }\n\n.ti-trello:before {\n  content: \"\\e74d\"; }\n\n.ti-stack-overflow:before {\n  content: \"\\e74e\"; }\n\n.ti-soundcloud:before {\n  content: \"\\e74f\"; }\n\n.ti-sharethis:before {\n  content: \"\\e750\"; }\n\n.ti-sharethis-alt:before {\n  content: \"\\e751\"; }\n\n.ti-reddit:before {\n  content: \"\\e752\"; }\n\n.ti-pinterest-alt:before {\n  content: \"\\e753\"; }\n\n.ti-microsoft-alt:before {\n  content: \"\\e754\"; }\n\n.ti-linux:before {\n  content: \"\\e755\"; }\n\n.ti-jsfiddle:before {\n  content: \"\\e756\"; }\n\n.ti-joomla:before {\n  content: \"\\e757\"; }\n\n.ti-html5:before {\n  content: \"\\e758\"; }\n\n.ti-flickr-alt:before {\n  content: \"\\e759\"; }\n\n.ti-email:before {\n  content: \"\\e75a\"; }\n\n.ti-drupal:before {\n  content: \"\\e75b\"; }\n\n.ti-dropbox-alt:before {\n  content: \"\\e75c\"; }\n\n.ti-css3:before {\n  content: \"\\e75d\"; }\n\n.ti-rss:before {\n  content: \"\\e75e\"; }\n\n.ti-rss-alt:before {\n  content: \"\\e75f\"; }\n\n/*# sourceMappingURL=themify-icons.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/css/typicons.css",
    "content": "@charset \"UTF-8\";\n/* @FONT-FACE loads font into browser */\n@font-face {\n  font-family: 'typicons';\n  font-weight: normal;\n  font-style: normal;\n  src: url(\"../fonts/typicons.eot\");\n  src: url(\"../fonts/typicons.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/typicons.woff\") format(\"woff\"), url(\"../fonts/typicons.ttf\") format(\"truetype\"), url(\"../fonts/typicons.svg#typicons\") format(\"svg\"); }\n/* :before psuedo-selector inserts and styles icon */\n.typcn:before {\n  font-family: 'typicons';\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  height: 1em;\n  font-size: 1em;\n  text-align: center;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility; }\n\n/* Code for individual icons */\n.typcn-adjust-brightness:before {\n  content: '\\e000';\n  /* 'εÇÇ' */ }\n\n.typcn-adjust-contrast:before {\n  content: '\\e001';\n  /* 'εÇü' */ }\n\n.typcn-anchor-outline:before {\n  content: '\\e002';\n  /* 'εÇé' */ }\n\n.typcn-anchor:before {\n  content: '\\e003';\n  /* 'εÇâ' */ }\n\n.typcn-archive:before {\n  content: '\\e004';\n  /* 'εÇä' */ }\n\n.typcn-arrow-back-outline:before {\n  content: '\\e005';\n  /* 'εÇà' */ }\n\n.typcn-arrow-back:before {\n  content: '\\e006';\n  /* 'εÇå' */ }\n\n.typcn-arrow-down-outline:before {\n  content: '\\e007';\n  /* 'εÇç' */ }\n\n.typcn-arrow-down-thick:before {\n  content: '\\e008';\n  /* 'εÇê' */ }\n\n.typcn-arrow-down:before {\n  content: '\\e009';\n  /* 'εÇë' */ }\n\n.typcn-arrow-forward-outline:before {\n  content: '\\e00a';\n  /* 'εÇè' */ }\n\n.typcn-arrow-forward:before {\n  content: '\\e00b';\n  /* 'εÇï' */ }\n\n.typcn-arrow-left-outline:before {\n  content: '\\e00c';\n  /* 'εÇî' */ }\n\n.typcn-arrow-left-thick:before {\n  content: '\\e00d';\n  /* 'εÇì' */ }\n\n.typcn-arrow-left:before {\n  content: '\\e00e';\n  /* 'εÇÄ' */ }\n\n.typcn-arrow-loop-outline:before {\n  content: '\\e00f';\n  /* 'εÇÅ' */ }\n\n.typcn-arrow-loop:before {\n  content: '\\e010';\n  /* 'εÇÉ' */ }\n\n.typcn-arrow-maximise-outline:before {\n  content: '\\e011';\n  /* 'εÇæ' */ }\n\n.typcn-arrow-maximise:before {\n  content: '\\e012';\n  /* 'εÇÆ' */ }\n\n.typcn-arrow-minimise-outline:before {\n  content: '\\e013';\n  /* 'εÇô' */ }\n\n.typcn-arrow-minimise:before {\n  content: '\\e014';\n  /* 'εÇö' */ }\n\n.typcn-arrow-move-outline:before {\n  content: '\\e015';\n  /* 'εÇò' */ }\n\n.typcn-arrow-move:before {\n  content: '\\e016';\n  /* 'εÇû' */ }\n\n.typcn-arrow-repeat-outline:before {\n  content: '\\e017';\n  /* 'εÇù' */ }\n\n.typcn-arrow-repeat:before {\n  content: '\\e018';\n  /* 'εÇÿ' */ }\n\n.typcn-arrow-right-outline:before {\n  content: '\\e019';\n  /* 'εÇÖ' */ }\n\n.typcn-arrow-right-thick:before {\n  content: '\\e01a';\n  /* 'εÇÜ' */ }\n\n.typcn-arrow-right:before {\n  content: '\\e01b';\n  /* 'εÇ¢' */ }\n\n.typcn-arrow-shuffle:before {\n  content: '\\e01c';\n  /* 'εÇ£' */ }\n\n.typcn-arrow-sorted-down:before {\n  content: '\\e01d';\n  /* 'εÇ¥' */ }\n\n.typcn-arrow-sorted-up:before {\n  content: '\\e01e';\n  /* 'εÇ₧' */ }\n\n.typcn-arrow-sync-outline:before {\n  content: '\\e01f';\n  /* 'εÇƒ' */ }\n\n.typcn-arrow-sync:before {\n  content: '\\e020';\n  /* 'εÇá' */ }\n\n.typcn-arrow-unsorted:before {\n  content: '\\e021';\n  /* 'εÇí' */ }\n\n.typcn-arrow-up-outline:before {\n  content: '\\e022';\n  /* 'εÇó' */ }\n\n.typcn-arrow-up-thick:before {\n  content: '\\e023';\n  /* 'εÇú' */ }\n\n.typcn-arrow-up:before {\n  content: '\\e024';\n  /* 'εÇñ' */ }\n\n.typcn-at:before {\n  content: '\\e025';\n  /* 'εÇÑ' */ }\n\n.typcn-attachment-outline:before {\n  content: '\\e026';\n  /* 'εÇª' */ }\n\n.typcn-attachment:before {\n  content: '\\e027';\n  /* 'εÇº' */ }\n\n.typcn-backspace-outline:before {\n  content: '\\e028';\n  /* 'εÇ¿' */ }\n\n.typcn-backspace:before {\n  content: '\\e029';\n  /* 'εÇ⌐' */ }\n\n.typcn-battery-charge:before {\n  content: '\\e02a';\n  /* 'εÇ¬' */ }\n\n.typcn-battery-full:before {\n  content: '\\e02b';\n  /* 'εÇ½' */ }\n\n.typcn-battery-high:before {\n  content: '\\e02c';\n  /* 'εÇ¼' */ }\n\n.typcn-battery-low:before {\n  content: '\\e02d';\n  /* 'εÇ¡' */ }\n\n.typcn-battery-mid:before {\n  content: '\\e02e';\n  /* 'εÇ«' */ }\n\n.typcn-beaker:before {\n  content: '\\e02f';\n  /* 'εÇ»' */ }\n\n.typcn-beer:before {\n  content: '\\e030';\n  /* 'εÇ░' */ }\n\n.typcn-bell:before {\n  content: '\\e031';\n  /* 'εÇ▒' */ }\n\n.typcn-book:before {\n  content: '\\e032';\n  /* 'εÇ▓' */ }\n\n.typcn-bookmark:before {\n  content: '\\e033';\n  /* 'εÇ│' */ }\n\n.typcn-briefcase:before {\n  content: '\\e034';\n  /* 'εÇ┤' */ }\n\n.typcn-brush:before {\n  content: '\\e035';\n  /* 'εÇ╡' */ }\n\n.typcn-business-card:before {\n  content: '\\e036';\n  /* 'εÇ╢' */ }\n\n.typcn-calculator:before {\n  content: '\\e037';\n  /* 'εÇ╖' */ }\n\n.typcn-calendar-outline:before {\n  content: '\\e038';\n  /* 'εÇ╕' */ }\n\n.typcn-calendar:before {\n  content: '\\e039';\n  /* 'εÇ╣' */ }\n\n.typcn-camera-outline:before {\n  content: '\\e03a';\n  /* 'εÇ║' */ }\n\n.typcn-camera:before {\n  content: '\\e03b';\n  /* 'εÇ╗' */ }\n\n.typcn-cancel-outline:before {\n  content: '\\e03c';\n  /* 'εÇ╝' */ }\n\n.typcn-cancel:before {\n  content: '\\e03d';\n  /* 'εÇ╜' */ }\n\n.typcn-chart-area-outline:before {\n  content: '\\e03e';\n  /* 'εÇ╛' */ }\n\n.typcn-chart-area:before {\n  content: '\\e03f';\n  /* 'εÇ┐' */ }\n\n.typcn-chart-bar-outline:before {\n  content: '\\e040';\n  /* 'εüÇ' */ }\n\n.typcn-chart-bar:before {\n  content: '\\e041';\n  /* 'εüü' */ }\n\n.typcn-chart-line-outline:before {\n  content: '\\e042';\n  /* 'εüé' */ }\n\n.typcn-chart-line:before {\n  content: '\\e043';\n  /* 'εüâ' */ }\n\n.typcn-chart-pie-outline:before {\n  content: '\\e044';\n  /* 'εüä' */ }\n\n.typcn-chart-pie:before {\n  content: '\\e045';\n  /* 'εüà' */ }\n\n.typcn-chevron-left-outline:before {\n  content: '\\e046';\n  /* 'εüå' */ }\n\n.typcn-chevron-left:before {\n  content: '\\e047';\n  /* 'εüç' */ }\n\n.typcn-chevron-right-outline:before {\n  content: '\\e048';\n  /* 'εüê' */ }\n\n.typcn-chevron-right:before {\n  content: '\\e049';\n  /* 'εüë' */ }\n\n.typcn-clipboard:before {\n  content: '\\e04a';\n  /* 'εüè' */ }\n\n.typcn-cloud-storage:before {\n  content: '\\e04b';\n  /* 'εüï' */ }\n\n.typcn-cloud-storage-outline:before {\n  content: '\\e054';\n  /* 'εüö' */ }\n\n.typcn-code-outline:before {\n  content: '\\e04c';\n  /* 'εüî' */ }\n\n.typcn-code:before {\n  content: '\\e04d';\n  /* 'εüì' */ }\n\n.typcn-coffee:before {\n  content: '\\e04e';\n  /* 'εüÄ' */ }\n\n.typcn-cog-outline:before {\n  content: '\\e04f';\n  /* 'εüÅ' */ }\n\n.typcn-cog:before {\n  content: '\\e050';\n  /* 'εüÉ' */ }\n\n.typcn-compass:before {\n  content: '\\e051';\n  /* 'εüæ' */ }\n\n.typcn-contacts:before {\n  content: '\\e052';\n  /* 'εüÆ' */ }\n\n.typcn-credit-card:before {\n  content: '\\e053';\n  /* 'εüô' */ }\n\n.typcn-css3:before {\n  content: '\\e055';\n  /* 'εüò' */ }\n\n.typcn-database:before {\n  content: '\\e056';\n  /* 'εüû' */ }\n\n.typcn-delete-outline:before {\n  content: '\\e057';\n  /* 'εüù' */ }\n\n.typcn-delete:before {\n  content: '\\e058';\n  /* 'εüÿ' */ }\n\n.typcn-device-desktop:before {\n  content: '\\e059';\n  /* 'εüÖ' */ }\n\n.typcn-device-laptop:before {\n  content: '\\e05a';\n  /* 'εüÜ' */ }\n\n.typcn-device-phone:before {\n  content: '\\e05b';\n  /* 'εü¢' */ }\n\n.typcn-device-tablet:before {\n  content: '\\e05c';\n  /* 'εü£' */ }\n\n.typcn-directions:before {\n  content: '\\e05d';\n  /* 'εü¥' */ }\n\n.typcn-divide-outline:before {\n  content: '\\e05e';\n  /* 'εü₧' */ }\n\n.typcn-divide:before {\n  content: '\\e05f';\n  /* 'εüƒ' */ }\n\n.typcn-document-add:before {\n  content: '\\e060';\n  /* 'εüá' */ }\n\n.typcn-document-delete:before {\n  content: '\\e061';\n  /* 'εüí' */ }\n\n.typcn-document-text:before {\n  content: '\\e062';\n  /* 'εüó' */ }\n\n.typcn-document:before {\n  content: '\\e063';\n  /* 'εüú' */ }\n\n.typcn-download-outline:before {\n  content: '\\e064';\n  /* 'εüñ' */ }\n\n.typcn-download:before {\n  content: '\\e065';\n  /* 'εüÑ' */ }\n\n.typcn-dropbox:before {\n  content: '\\e066';\n  /* 'εüª' */ }\n\n.typcn-edit:before {\n  content: '\\e067';\n  /* 'εüº' */ }\n\n.typcn-eject-outline:before {\n  content: '\\e068';\n  /* 'εü¿' */ }\n\n.typcn-eject:before {\n  content: '\\e069';\n  /* 'εü⌐' */ }\n\n.typcn-equals-outline:before {\n  content: '\\e06a';\n  /* 'εü¬' */ }\n\n.typcn-equals:before {\n  content: '\\e06b';\n  /* 'εü½' */ }\n\n.typcn-export-outline:before {\n  content: '\\e06c';\n  /* 'εü¼' */ }\n\n.typcn-export:before {\n  content: '\\e06d';\n  /* 'εü¡' */ }\n\n.typcn-eye-outline:before {\n  content: '\\e06e';\n  /* 'εü«' */ }\n\n.typcn-eye:before {\n  content: '\\e06f';\n  /* 'εü»' */ }\n\n.typcn-feather:before {\n  content: '\\e070';\n  /* 'εü░' */ }\n\n.typcn-film:before {\n  content: '\\e071';\n  /* 'εü▒' */ }\n\n.typcn-filter:before {\n  content: '\\e072';\n  /* 'εü▓' */ }\n\n.typcn-flag-outline:before {\n  content: '\\e073';\n  /* 'εü│' */ }\n\n.typcn-flag:before {\n  content: '\\e074';\n  /* 'εü┤' */ }\n\n.typcn-flash-outline:before {\n  content: '\\e075';\n  /* 'εü╡' */ }\n\n.typcn-flash:before {\n  content: '\\e076';\n  /* 'εü╢' */ }\n\n.typcn-flow-children:before {\n  content: '\\e077';\n  /* 'εü╖' */ }\n\n.typcn-flow-merge:before {\n  content: '\\e078';\n  /* 'εü╕' */ }\n\n.typcn-flow-parallel:before {\n  content: '\\e079';\n  /* 'εü╣' */ }\n\n.typcn-flow-switch:before {\n  content: '\\e07a';\n  /* 'εü║' */ }\n\n.typcn-folder-add:before {\n  content: '\\e07b';\n  /* 'εü╗' */ }\n\n.typcn-folder-delete:before {\n  content: '\\e07c';\n  /* 'εü╝' */ }\n\n.typcn-folder-open:before {\n  content: '\\e07d';\n  /* 'εü╜' */ }\n\n.typcn-folder:before {\n  content: '\\e07e';\n  /* 'εü╛' */ }\n\n.typcn-gift:before {\n  content: '\\e07f';\n  /* 'εü┐' */ }\n\n.typcn-globe-outline:before {\n  content: '\\e080';\n  /* 'εéÇ' */ }\n\n.typcn-globe:before {\n  content: '\\e081';\n  /* 'εéü' */ }\n\n.typcn-group-outline:before {\n  content: '\\e082';\n  /* 'εéé' */ }\n\n.typcn-group:before {\n  content: '\\e083';\n  /* 'εéâ' */ }\n\n.typcn-headphones:before {\n  content: '\\e084';\n  /* 'εéä' */ }\n\n.typcn-heart-full-outline:before {\n  content: '\\e085';\n  /* 'εéà' */ }\n\n.typcn-heart-half-outline:before {\n  content: '\\e086';\n  /* 'εéå' */ }\n\n.typcn-heart-outline:before {\n  content: '\\e087';\n  /* 'εéç' */ }\n\n.typcn-heart:before {\n  content: '\\e088';\n  /* 'εéê' */ }\n\n.typcn-home-outline:before {\n  content: '\\e089';\n  /* 'εéë' */ }\n\n.typcn-home:before {\n  content: '\\e08a';\n  /* 'εéè' */ }\n\n.typcn-html5:before {\n  content: '\\e08b';\n  /* 'εéï' */ }\n\n.typcn-image-outline:before {\n  content: '\\e08c';\n  /* 'εéî' */ }\n\n.typcn-image:before {\n  content: '\\e08d';\n  /* 'εéì' */ }\n\n.typcn-infinity-outline:before {\n  content: '\\e08e';\n  /* 'εéÄ' */ }\n\n.typcn-infinity:before {\n  content: '\\e08f';\n  /* 'εéÅ' */ }\n\n.typcn-info-large-outline:before {\n  content: '\\e090';\n  /* 'εéÉ' */ }\n\n.typcn-info-large:before {\n  content: '\\e091';\n  /* 'εéæ' */ }\n\n.typcn-info-outline:before {\n  content: '\\e092';\n  /* 'εéÆ' */ }\n\n.typcn-info:before {\n  content: '\\e093';\n  /* 'εéô' */ }\n\n.typcn-input-checked-outline:before {\n  content: '\\e094';\n  /* 'εéö' */ }\n\n.typcn-input-checked:before {\n  content: '\\e095';\n  /* 'εéò' */ }\n\n.typcn-key-outline:before {\n  content: '\\e096';\n  /* 'εéû' */ }\n\n.typcn-key:before {\n  content: '\\e097';\n  /* 'εéù' */ }\n\n.typcn-keyboard:before {\n  content: '\\e098';\n  /* 'εéÿ' */ }\n\n.typcn-leaf:before {\n  content: '\\e099';\n  /* 'εéÖ' */ }\n\n.typcn-lightbulb:before {\n  content: '\\e09a';\n  /* 'εéÜ' */ }\n\n.typcn-link-outline:before {\n  content: '\\e09b';\n  /* 'εé¢' */ }\n\n.typcn-link:before {\n  content: '\\e09c';\n  /* 'εé£' */ }\n\n.typcn-location-arrow-outline:before {\n  content: '\\e09d';\n  /* 'εé¥' */ }\n\n.typcn-location-arrow:before {\n  content: '\\e09e';\n  /* 'εé₧' */ }\n\n.typcn-location-outline:before {\n  content: '\\e09f';\n  /* 'εéƒ' */ }\n\n.typcn-location:before {\n  content: '\\e0a0';\n  /* 'εéá' */ }\n\n.typcn-lock-closed-outline:before {\n  content: '\\e0a1';\n  /* 'εéí' */ }\n\n.typcn-lock-closed:before {\n  content: '\\e0a2';\n  /* 'εéó' */ }\n\n.typcn-lock-open-outline:before {\n  content: '\\e0a3';\n  /* 'εéú' */ }\n\n.typcn-lock-open:before {\n  content: '\\e0a4';\n  /* 'εéñ' */ }\n\n.typcn-mail:before {\n  content: '\\e0a5';\n  /* 'εéÑ' */ }\n\n.typcn-map:before {\n  content: '\\e0a6';\n  /* 'εéª' */ }\n\n.typcn-media-eject-outline:before {\n  content: '\\e0a7';\n  /* 'εéº' */ }\n\n.typcn-media-eject:before {\n  content: '\\e0a8';\n  /* 'εé¿' */ }\n\n.typcn-media-fast-forward-outline:before {\n  content: '\\e0a9';\n  /* 'εé⌐' */ }\n\n.typcn-media-fast-forward:before {\n  content: '\\e0aa';\n  /* 'εé¬' */ }\n\n.typcn-media-pause-outline:before {\n  content: '\\e0ab';\n  /* 'εé½' */ }\n\n.typcn-media-pause:before {\n  content: '\\e0ac';\n  /* 'εé¼' */ }\n\n.typcn-media-play-outline:before {\n  content: '\\e0ad';\n  /* 'εé¡' */ }\n\n.typcn-media-play-reverse-outline:before {\n  content: '\\e0ae';\n  /* 'εé«' */ }\n\n.typcn-media-play-reverse:before {\n  content: '\\e0af';\n  /* 'εé»' */ }\n\n.typcn-media-play:before {\n  content: '\\e0b0';\n  /* 'εé░' */ }\n\n.typcn-media-record-outline:before {\n  content: '\\e0b1';\n  /* 'εé▒' */ }\n\n.typcn-media-record:before {\n  content: '\\e0b2';\n  /* 'εé▓' */ }\n\n.typcn-media-rewind-outline:before {\n  content: '\\e0b3';\n  /* 'εé│' */ }\n\n.typcn-media-rewind:before {\n  content: '\\e0b4';\n  /* 'εé┤' */ }\n\n.typcn-media-stop-outline:before {\n  content: '\\e0b5';\n  /* 'εé╡' */ }\n\n.typcn-media-stop:before {\n  content: '\\e0b6';\n  /* 'εé╢' */ }\n\n.typcn-message-typing:before {\n  content: '\\e0b7';\n  /* 'εé╖' */ }\n\n.typcn-message:before {\n  content: '\\e0b8';\n  /* 'εé╕' */ }\n\n.typcn-messages:before {\n  content: '\\e0b9';\n  /* 'εé╣' */ }\n\n.typcn-microphone-outline:before {\n  content: '\\e0ba';\n  /* 'εé║' */ }\n\n.typcn-microphone:before {\n  content: '\\e0bb';\n  /* 'εé╗' */ }\n\n.typcn-minus-outline:before {\n  content: '\\e0bc';\n  /* 'εé╝' */ }\n\n.typcn-minus:before {\n  content: '\\e0bd';\n  /* 'εé╜' */ }\n\n.typcn-mortar-board:before {\n  content: '\\e0be';\n  /* 'εé╛' */ }\n\n.typcn-news:before {\n  content: '\\e0bf';\n  /* 'εé┐' */ }\n\n.typcn-notes-outline:before {\n  content: '\\e0c0';\n  /* 'εâÇ' */ }\n\n.typcn-notes:before {\n  content: '\\e0c1';\n  /* 'εâü' */ }\n\n.typcn-pen:before {\n  content: '\\e0c2';\n  /* 'εâé' */ }\n\n.typcn-pencil:before {\n  content: '\\e0c3';\n  /* 'εââ' */ }\n\n.typcn-phone-outline:before {\n  content: '\\e0c4';\n  /* 'εâä' */ }\n\n.typcn-phone:before {\n  content: '\\e0c5';\n  /* 'εâà' */ }\n\n.typcn-pi-outline:before {\n  content: '\\e0c6';\n  /* 'εâå' */ }\n\n.typcn-pi:before {\n  content: '\\e0c7';\n  /* 'εâç' */ }\n\n.typcn-pin-outline:before {\n  content: '\\e0c8';\n  /* 'εâê' */ }\n\n.typcn-pin:before {\n  content: '\\e0c9';\n  /* 'εâë' */ }\n\n.typcn-pipette:before {\n  content: '\\e0ca';\n  /* 'εâè' */ }\n\n.typcn-plane-outline:before {\n  content: '\\e0cb';\n  /* 'εâï' */ }\n\n.typcn-plane:before {\n  content: '\\e0cc';\n  /* 'εâî' */ }\n\n.typcn-plug:before {\n  content: '\\e0cd';\n  /* 'εâì' */ }\n\n.typcn-plus-outline:before {\n  content: '\\e0ce';\n  /* 'εâÄ' */ }\n\n.typcn-plus:before {\n  content: '\\e0cf';\n  /* 'εâÅ' */ }\n\n.typcn-point-of-interest-outline:before {\n  content: '\\e0d0';\n  /* 'εâÉ' */ }\n\n.typcn-point-of-interest:before {\n  content: '\\e0d1';\n  /* 'εâæ' */ }\n\n.typcn-power-outline:before {\n  content: '\\e0d2';\n  /* 'εâÆ' */ }\n\n.typcn-power:before {\n  content: '\\e0d3';\n  /* 'εâô' */ }\n\n.typcn-printer:before {\n  content: '\\e0d4';\n  /* 'εâö' */ }\n\n.typcn-puzzle-outline:before {\n  content: '\\e0d5';\n  /* 'εâò' */ }\n\n.typcn-puzzle:before {\n  content: '\\e0d6';\n  /* 'εâû' */ }\n\n.typcn-radar-outline:before {\n  content: '\\e0d7';\n  /* 'εâù' */ }\n\n.typcn-radar:before {\n  content: '\\e0d8';\n  /* 'εâÿ' */ }\n\n.typcn-refresh-outline:before {\n  content: '\\e0d9';\n  /* 'εâÖ' */ }\n\n.typcn-refresh:before {\n  content: '\\e0da';\n  /* 'εâÜ' */ }\n\n.typcn-rss-outline:before {\n  content: '\\e0db';\n  /* 'εâ¢' */ }\n\n.typcn-rss:before {\n  content: '\\e0dc';\n  /* 'εâ£' */ }\n\n.typcn-scissors-outline:before {\n  content: '\\e0dd';\n  /* 'εâ¥' */ }\n\n.typcn-scissors:before {\n  content: '\\e0de';\n  /* 'εâ₧' */ }\n\n.typcn-shopping-bag:before {\n  content: '\\e0df';\n  /* 'εâƒ' */ }\n\n.typcn-shopping-cart:before {\n  content: '\\e0e0';\n  /* 'εâá' */ }\n\n.typcn-social-at-circular:before {\n  content: '\\e0e1';\n  /* 'εâí' */ }\n\n.typcn-social-dribbble-circular:before {\n  content: '\\e0e2';\n  /* 'εâó' */ }\n\n.typcn-social-dribbble:before {\n  content: '\\e0e3';\n  /* 'εâú' */ }\n\n.typcn-social-facebook-circular:before {\n  content: '\\e0e4';\n  /* 'εâñ' */ }\n\n.typcn-social-facebook:before {\n  content: '\\e0e5';\n  /* 'εâÑ' */ }\n\n.typcn-social-flickr-circular:before {\n  content: '\\e0e6';\n  /* 'εâª' */ }\n\n.typcn-social-flickr:before {\n  content: '\\e0e7';\n  /* 'εâº' */ }\n\n.typcn-social-github-circular:before {\n  content: '\\e0e8';\n  /* 'εâ¿' */ }\n\n.typcn-social-github:before {\n  content: '\\e0e9';\n  /* 'εâ⌐' */ }\n\n.typcn-social-google-plus-circular:before {\n  content: '\\e0ea';\n  /* 'εâ¬' */ }\n\n.typcn-social-google-plus:before {\n  content: '\\e0eb';\n  /* 'εâ½' */ }\n\n.typcn-social-instagram-circular:before {\n  content: '\\e0ec';\n  /* 'εâ¼' */ }\n\n.typcn-social-instagram:before {\n  content: '\\e0ed';\n  /* 'εâ¡' */ }\n\n.typcn-social-last-fm-circular:before {\n  content: '\\e0ee';\n  /* 'εâ«' */ }\n\n.typcn-social-last-fm:before {\n  content: '\\e0ef';\n  /* 'εâ»' */ }\n\n.typcn-social-linkedin-circular:before {\n  content: '\\e0f0';\n  /* 'εâ░' */ }\n\n.typcn-social-linkedin:before {\n  content: '\\e0f1';\n  /* 'εâ▒' */ }\n\n.typcn-social-pinterest-circular:before {\n  content: '\\e0f2';\n  /* 'εâ▓' */ }\n\n.typcn-social-pinterest:before {\n  content: '\\e0f3';\n  /* 'εâ│' */ }\n\n.typcn-social-skype-outline:before {\n  content: '\\e0f4';\n  /* 'εâ┤' */ }\n\n.typcn-social-skype:before {\n  content: '\\e0f5';\n  /* 'εâ╡' */ }\n\n.typcn-social-tumbler-circular:before {\n  content: '\\e0f6';\n  /* 'εâ╢' */ }\n\n.typcn-social-tumbler:before {\n  content: '\\e0f7';\n  /* 'εâ╖' */ }\n\n.typcn-social-twitter-circular:before {\n  content: '\\e0f8';\n  /* 'εâ╕' */ }\n\n.typcn-social-twitter:before {\n  content: '\\e0f9';\n  /* 'εâ╣' */ }\n\n.typcn-social-vimeo-circular:before {\n  content: '\\e0fa';\n  /* 'εâ║' */ }\n\n.typcn-social-vimeo:before {\n  content: '\\e0fb';\n  /* 'εâ╗' */ }\n\n.typcn-social-youtube-circular:before {\n  content: '\\e0fc';\n  /* 'εâ╝' */ }\n\n.typcn-social-youtube:before {\n  content: '\\e0fd';\n  /* 'εâ╜' */ }\n\n.typcn-sort-alphabetically-outline:before {\n  content: '\\e0fe';\n  /* 'εâ╛' */ }\n\n.typcn-sort-alphabetically:before {\n  content: '\\e0ff';\n  /* 'εâ┐' */ }\n\n.typcn-sort-numerically-outline:before {\n  content: '\\e100';\n  /* 'εäÇ' */ }\n\n.typcn-sort-numerically:before {\n  content: '\\e101';\n  /* 'εäü' */ }\n\n.typcn-spanner-outline:before {\n  content: '\\e102';\n  /* 'εäé' */ }\n\n.typcn-spanner:before {\n  content: '\\e103';\n  /* 'εäâ' */ }\n\n.typcn-spiral:before {\n  content: '\\e104';\n  /* 'εää' */ }\n\n.typcn-star-full-outline:before {\n  content: '\\e105';\n  /* 'εäà' */ }\n\n.typcn-star-half-outline:before {\n  content: '\\e106';\n  /* 'εäå' */ }\n\n.typcn-star-half:before {\n  content: '\\e107';\n  /* 'εäç' */ }\n\n.typcn-star-outline:before {\n  content: '\\e108';\n  /* 'εäê' */ }\n\n.typcn-star:before {\n  content: '\\e109';\n  /* 'εäë' */ }\n\n.typcn-starburst-outline:before {\n  content: '\\e10a';\n  /* 'εäè' */ }\n\n.typcn-starburst:before {\n  content: '\\e10b';\n  /* 'εäï' */ }\n\n.typcn-stopwatch:before {\n  content: '\\e10c';\n  /* 'εäî' */ }\n\n.typcn-support:before {\n  content: '\\e10d';\n  /* 'εäì' */ }\n\n.typcn-tabs-outline:before {\n  content: '\\e10e';\n  /* 'εäÄ' */ }\n\n.typcn-tag:before {\n  content: '\\e10f';\n  /* 'εäÅ' */ }\n\n.typcn-tags:before {\n  content: '\\e110';\n  /* 'εäÉ' */ }\n\n.typcn-th-large-outline:before {\n  content: '\\e111';\n  /* 'εäæ' */ }\n\n.typcn-th-large:before {\n  content: '\\e112';\n  /* 'εäÆ' */ }\n\n.typcn-th-list-outline:before {\n  content: '\\e113';\n  /* 'εäô' */ }\n\n.typcn-th-list:before {\n  content: '\\e114';\n  /* 'εäö' */ }\n\n.typcn-th-menu-outline:before {\n  content: '\\e115';\n  /* 'εäò' */ }\n\n.typcn-th-menu:before {\n  content: '\\e116';\n  /* 'εäû' */ }\n\n.typcn-th-small-outline:before {\n  content: '\\e117';\n  /* 'εäù' */ }\n\n.typcn-th-small:before {\n  content: '\\e118';\n  /* 'εäÿ' */ }\n\n.typcn-thermometer:before {\n  content: '\\e119';\n  /* 'εäÖ' */ }\n\n.typcn-thumbs-down:before {\n  content: '\\e11a';\n  /* 'εäÜ' */ }\n\n.typcn-thumbs-ok:before {\n  content: '\\e11b';\n  /* 'εä¢' */ }\n\n.typcn-thumbs-up:before {\n  content: '\\e11c';\n  /* 'εä£' */ }\n\n.typcn-tick-outline:before {\n  content: '\\e11d';\n  /* 'εä¥' */ }\n\n.typcn-tick:before {\n  content: '\\e11e';\n  /* 'εä₧' */ }\n\n.typcn-ticket:before {\n  content: '\\e11f';\n  /* 'εäƒ' */ }\n\n.typcn-time:before {\n  content: '\\e120';\n  /* 'εäá' */ }\n\n.typcn-times-outline:before {\n  content: '\\e121';\n  /* 'εäí' */ }\n\n.typcn-times:before {\n  content: '\\e122';\n  /* 'εäó' */ }\n\n.typcn-trash:before {\n  content: '\\e123';\n  /* 'εäú' */ }\n\n.typcn-tree:before {\n  content: '\\e124';\n  /* 'εäñ' */ }\n\n.typcn-upload-outline:before {\n  content: '\\e125';\n  /* 'εäÑ' */ }\n\n.typcn-upload:before {\n  content: '\\e126';\n  /* 'εäª' */ }\n\n.typcn-user-add-outline:before {\n  content: '\\e127';\n  /* 'εäº' */ }\n\n.typcn-user-add:before {\n  content: '\\e128';\n  /* 'εä¿' */ }\n\n.typcn-user-delete-outline:before {\n  content: '\\e129';\n  /* 'εä⌐' */ }\n\n.typcn-user-delete:before {\n  content: '\\e12a';\n  /* 'εä¬' */ }\n\n.typcn-user-outline:before {\n  content: '\\e12b';\n  /* 'εä½' */ }\n\n.typcn-user:before {\n  content: '\\e12c';\n  /* 'εä¼' */ }\n\n.typcn-vendor-android:before {\n  content: '\\e12d';\n  /* 'εä¡' */ }\n\n.typcn-vendor-apple:before {\n  content: '\\e12e';\n  /* 'εä«' */ }\n\n.typcn-vendor-microsoft:before {\n  content: '\\e12f';\n  /* 'εä»' */ }\n\n.typcn-video-outline:before {\n  content: '\\e130';\n  /* 'εä░' */ }\n\n.typcn-video:before {\n  content: '\\e131';\n  /* 'εä▒' */ }\n\n.typcn-volume-down:before {\n  content: '\\e132';\n  /* 'εä▓' */ }\n\n.typcn-volume-mute:before {\n  content: '\\e133';\n  /* 'εä│' */ }\n\n.typcn-volume-up:before {\n  content: '\\e134';\n  /* 'εä┤' */ }\n\n.typcn-volume:before {\n  content: '\\e135';\n  /* 'εä╡' */ }\n\n.typcn-warning-outline:before {\n  content: '\\e136';\n  /* 'εä╢' */ }\n\n.typcn-warning:before {\n  content: '\\e137';\n  /* 'εä╖' */ }\n\n.typcn-watch:before {\n  content: '\\e138';\n  /* 'εä╕' */ }\n\n.typcn-waves-outline:before {\n  content: '\\e139';\n  /* 'εä╣' */ }\n\n.typcn-waves:before {\n  content: '\\e13a';\n  /* 'εä║' */ }\n\n.typcn-weather-cloudy:before {\n  content: '\\e13b';\n  /* 'εä╗' */ }\n\n.typcn-weather-downpour:before {\n  content: '\\e13c';\n  /* 'εä╝' */ }\n\n.typcn-weather-night:before {\n  content: '\\e13d';\n  /* 'εä╜' */ }\n\n.typcn-weather-partly-sunny:before {\n  content: '\\e13e';\n  /* 'εä╛' */ }\n\n.typcn-weather-shower:before {\n  content: '\\e13f';\n  /* 'εä┐' */ }\n\n.typcn-weather-snow:before {\n  content: '\\e140';\n  /* 'εàÇ' */ }\n\n.typcn-weather-stormy:before {\n  content: '\\e141';\n  /* 'εàü' */ }\n\n.typcn-weather-sunny:before {\n  content: '\\e142';\n  /* 'εàé' */ }\n\n.typcn-weather-windy-cloudy:before {\n  content: '\\e143';\n  /* 'εàâ' */ }\n\n.typcn-weather-windy:before {\n  content: '\\e144';\n  /* 'εàä' */ }\n\n.typcn-wi-fi-outline:before {\n  content: '\\e145';\n  /* 'εàà' */ }\n\n.typcn-wi-fi:before {\n  content: '\\e146';\n  /* 'εàå' */ }\n\n.typcn-wine:before {\n  content: '\\e147';\n  /* 'εàç' */ }\n\n.typcn-world-outline:before {\n  content: '\\e148';\n  /* 'εàê' */ }\n\n.typcn-world:before {\n  content: '\\e149';\n  /* 'εàë' */ }\n\n.typcn-zoom-in-outline:before {\n  content: '\\e14a';\n  /* 'εàè' */ }\n\n.typcn-zoom-in:before {\n  content: '\\e14b';\n  /* 'εàï' */ }\n\n.typcn-zoom-out-outline:before {\n  content: '\\e14c';\n  /* 'εàî' */ }\n\n.typcn-zoom-out:before {\n  content: '\\e14d';\n  /* 'εàì' */ }\n\n.typcn-zoom-outline:before {\n  content: '\\e14e';\n  /* 'εàÄ' */ }\n\n.typcn-zoom:before {\n  content: '\\e14f';\n  /* 'εàÅ' */ }\n\n/*# sourceMappingURL=typicons.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/dripicons/dripicons.scss",
    "content": "@charset \"UTF-8\";\n\n@font-face {\n  font-family: \"dripicons-v2\";\n  src:url(\"../fonts/dripicons-v2.eot\");\n  src:url(\"../fonts/dripicons-v2.eot?#iefix\") format(\"embedded-opentype\"),\n    url(\"../fonts/dripicons-v2.woff\") format(\"woff\"),\n    url(\"../fonts/dripicons-v2.ttf\") format(\"truetype\"),\n    url(\"../fonts/dripicons-v2.svg#dripicons-v2\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n\n}\n\n[data-icon]:before {\n  font-family: \"dripicons-v2\" !important;\n  content: attr(data-icon);\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"dripicons-\"]:before,\n[class*=\" dripicons-\"]:before {\n  font-family: \"dripicons-v2\" !important;\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.dripicons-alarm:before {\n  content: \"\\61\";\n}\n.dripicons-align-center:before {\n  content: \"\\62\";\n}\n.dripicons-align-justify:before {\n  content: \"\\63\";\n}\n.dripicons-align-left:before {\n  content: \"\\64\";\n}\n.dripicons-align-right:before {\n  content: \"\\65\";\n}\n.dripicons-anchor:before {\n  content: \"\\66\";\n}\n.dripicons-archive:before {\n  content: \"\\67\";\n}\n.dripicons-arrow-down:before {\n  content: \"\\68\";\n}\n.dripicons-arrow-left:before {\n  content: \"\\69\";\n}\n.dripicons-arrow-right:before {\n  content: \"\\6a\";\n}\n.dripicons-arrow-thin-down:before {\n  content: \"\\6b\";\n}\n.dripicons-arrow-thin-left:before {\n  content: \"\\6c\";\n}\n.dripicons-arrow-thin-right:before {\n  content: \"\\6d\";\n}\n.dripicons-arrow-thin-up:before {\n  content: \"\\6e\";\n}\n.dripicons-arrow-up:before {\n  content: \"\\6f\";\n}\n.dripicons-article:before {\n  content: \"\\70\";\n}\n.dripicons-backspace:before {\n  content: \"\\71\";\n}\n.dripicons-basket:before {\n  content: \"\\72\";\n}\n.dripicons-basketball:before {\n  content: \"\\73\";\n}\n.dripicons-battery-empty:before {\n  content: \"\\74\";\n}\n.dripicons-battery-full:before {\n  content: \"\\75\";\n}\n.dripicons-battery-low:before {\n  content: \"\\76\";\n}\n.dripicons-battery-medium:before {\n  content: \"\\77\";\n}\n.dripicons-bell:before {\n  content: \"\\78\";\n}\n.dripicons-blog:before {\n  content: \"\\79\";\n}\n.dripicons-bluetooth:before {\n  content: \"\\7a\";\n}\n.dripicons-bold:before {\n  content: \"\\41\";\n}\n.dripicons-bookmark:before {\n  content: \"\\42\";\n}\n.dripicons-bookmarks:before {\n  content: \"\\43\";\n}\n.dripicons-box:before {\n  content: \"\\44\";\n}\n.dripicons-briefcase:before {\n  content: \"\\45\";\n}\n.dripicons-brightness-low:before {\n  content: \"\\46\";\n}\n.dripicons-brightness-max:before {\n  content: \"\\47\";\n}\n.dripicons-brightness-medium:before {\n  content: \"\\48\";\n}\n.dripicons-broadcast:before {\n  content: \"\\49\";\n}\n.dripicons-browser:before {\n  content: \"\\4a\";\n}\n.dripicons-browser-upload:before {\n  content: \"\\4b\";\n}\n.dripicons-brush:before {\n  content: \"\\4c\";\n}\n.dripicons-calendar:before {\n  content: \"\\4d\";\n}\n.dripicons-camcorder:before {\n  content: \"\\4e\";\n}\n.dripicons-camera:before {\n  content: \"\\4f\";\n}\n.dripicons-card:before {\n  content: \"\\50\";\n}\n.dripicons-cart:before {\n  content: \"\\51\";\n}\n.dripicons-checklist:before {\n  content: \"\\52\";\n}\n.dripicons-checkmark:before {\n  content: \"\\53\";\n}\n.dripicons-chevron-down:before {\n  content: \"\\54\";\n}\n.dripicons-chevron-left:before {\n  content: \"\\55\";\n}\n.dripicons-chevron-right:before {\n  content: \"\\56\";\n}\n.dripicons-chevron-up:before {\n  content: \"\\57\";\n}\n.dripicons-clipboard:before {\n  content: \"\\58\";\n}\n.dripicons-clock:before {\n  content: \"\\59\";\n}\n.dripicons-clockwise:before {\n  content: \"\\5a\";\n}\n.dripicons-cloud:before {\n  content: \"\\30\";\n}\n.dripicons-cloud-download:before {\n  content: \"\\31\";\n}\n.dripicons-cloud-upload:before {\n  content: \"\\32\";\n}\n.dripicons-code:before {\n  content: \"\\33\";\n}\n.dripicons-contract:before {\n  content: \"\\34\";\n}\n.dripicons-contract-2:before {\n  content: \"\\35\";\n}\n.dripicons-conversation:before {\n  content: \"\\36\";\n}\n.dripicons-copy:before {\n  content: \"\\37\";\n}\n.dripicons-crop:before {\n  content: \"\\38\";\n}\n.dripicons-cross:before {\n  content: \"\\39\";\n}\n.dripicons-crosshair:before {\n  content: \"\\21\";\n}\n.dripicons-cutlery:before {\n  content: \"\\22\";\n}\n.dripicons-device-desktop:before {\n  content: \"\\23\";\n}\n.dripicons-device-mobile:before {\n  content: \"\\24\";\n}\n.dripicons-device-tablet:before {\n  content: \"\\25\";\n}\n.dripicons-direction:before {\n  content: \"\\26\";\n}\n.dripicons-disc:before {\n  content: \"\\27\";\n}\n.dripicons-document:before {\n  content: \"\\28\";\n}\n.dripicons-document-delete:before {\n  content: \"\\29\";\n}\n.dripicons-document-edit:before {\n  content: \"\\2a\";\n}\n.dripicons-document-new:before {\n  content: \"\\2b\";\n}\n.dripicons-document-remove:before {\n  content: \"\\2c\";\n}\n.dripicons-dot:before {\n  content: \"\\2d\";\n}\n.dripicons-dots-2:before {\n  content: \"\\2e\";\n}\n.dripicons-dots-3:before {\n  content: \"\\2f\";\n}\n.dripicons-download:before {\n  content: \"\\3a\";\n}\n.dripicons-duplicate:before {\n  content: \"\\3b\";\n}\n.dripicons-enter:before {\n  content: \"\\3c\";\n}\n.dripicons-exit:before {\n  content: \"\\3d\";\n}\n.dripicons-expand:before {\n  content: \"\\3e\";\n}\n.dripicons-expand-2:before {\n  content: \"\\3f\";\n}\n.dripicons-experiment:before {\n  content: \"\\40\";\n}\n.dripicons-export:before {\n  content: \"\\5b\";\n}\n.dripicons-feed:before {\n  content: \"\\5d\";\n}\n.dripicons-flag:before {\n  content: \"\\5e\";\n}\n.dripicons-flashlight:before {\n  content: \"\\5f\";\n}\n.dripicons-folder:before {\n  content: \"\\60\";\n}\n.dripicons-folder-open:before {\n  content: \"\\7b\";\n}\n.dripicons-forward:before {\n  content: \"\\7c\";\n}\n.dripicons-gaming:before {\n  content: \"\\7d\";\n}\n.dripicons-gear:before {\n  content: \"\\7e\";\n}\n.dripicons-graduation:before {\n  content: \"\\5c\";\n}\n.dripicons-graph-bar:before {\n  content: \"\\e000\";\n}\n.dripicons-graph-line:before {\n  content: \"\\e001\";\n}\n.dripicons-graph-pie:before {\n  content: \"\\e002\";\n}\n.dripicons-headset:before {\n  content: \"\\e003\";\n}\n.dripicons-heart:before {\n  content: \"\\e004\";\n}\n.dripicons-help:before {\n  content: \"\\e005\";\n}\n.dripicons-home:before {\n  content: \"\\e006\";\n}\n.dripicons-hourglass:before {\n  content: \"\\e007\";\n}\n.dripicons-inbox:before {\n  content: \"\\e008\";\n}\n.dripicons-information:before {\n  content: \"\\e009\";\n}\n.dripicons-italic:before {\n  content: \"\\e00a\";\n}\n.dripicons-jewel:before {\n  content: \"\\e00b\";\n}\n.dripicons-lifting:before {\n  content: \"\\e00c\";\n}\n.dripicons-lightbulb:before {\n  content: \"\\e00d\";\n}\n.dripicons-link:before {\n  content: \"\\e00e\";\n}\n.dripicons-link-broken:before {\n  content: \"\\e00f\";\n}\n.dripicons-list:before {\n  content: \"\\e010\";\n}\n.dripicons-loading:before {\n  content: \"\\e011\";\n}\n.dripicons-location:before {\n  content: \"\\e012\";\n}\n.dripicons-lock:before {\n  content: \"\\e013\";\n}\n.dripicons-lock-open:before {\n  content: \"\\e014\";\n}\n.dripicons-mail:before {\n  content: \"\\e015\";\n}\n.dripicons-map:before {\n  content: \"\\e016\";\n}\n.dripicons-media-loop:before {\n  content: \"\\e017\";\n}\n.dripicons-media-next:before {\n  content: \"\\e018\";\n}\n.dripicons-media-pause:before {\n  content: \"\\e019\";\n}\n.dripicons-media-play:before {\n  content: \"\\e01a\";\n}\n.dripicons-media-previous:before {\n  content: \"\\e01b\";\n}\n.dripicons-media-record:before {\n  content: \"\\e01c\";\n}\n.dripicons-media-shuffle:before {\n  content: \"\\e01d\";\n}\n.dripicons-media-stop:before {\n  content: \"\\e01e\";\n}\n.dripicons-medical:before {\n  content: \"\\e01f\";\n}\n.dripicons-menu:before {\n  content: \"\\e020\";\n}\n.dripicons-message:before {\n  content: \"\\e021\";\n}\n.dripicons-meter:before {\n  content: \"\\e022\";\n}\n.dripicons-microphone:before {\n  content: \"\\e023\";\n}\n.dripicons-minus:before {\n  content: \"\\e024\";\n}\n.dripicons-monitor:before {\n  content: \"\\e025\";\n}\n.dripicons-move:before {\n  content: \"\\e026\";\n}\n.dripicons-music:before {\n  content: \"\\e027\";\n}\n.dripicons-network-1:before {\n  content: \"\\e028\";\n}\n.dripicons-network-2:before {\n  content: \"\\e029\";\n}\n.dripicons-network-3:before {\n  content: \"\\e02a\";\n}\n.dripicons-network-4:before {\n  content: \"\\e02b\";\n}\n.dripicons-network-5:before {\n  content: \"\\e02c\";\n}\n.dripicons-pamphlet:before {\n  content: \"\\e02d\";\n}\n.dripicons-paperclip:before {\n  content: \"\\e02e\";\n}\n.dripicons-pencil:before {\n  content: \"\\e02f\";\n}\n.dripicons-phone:before {\n  content: \"\\e030\";\n}\n.dripicons-photo:before {\n  content: \"\\e031\";\n}\n.dripicons-photo-group:before {\n  content: \"\\e032\";\n}\n.dripicons-pill:before {\n  content: \"\\e033\";\n}\n.dripicons-pin:before {\n  content: \"\\e034\";\n}\n.dripicons-plus:before {\n  content: \"\\e035\";\n}\n.dripicons-power:before {\n  content: \"\\e036\";\n}\n.dripicons-preview:before {\n  content: \"\\e037\";\n}\n.dripicons-print:before {\n  content: \"\\e038\";\n}\n.dripicons-pulse:before {\n  content: \"\\e039\";\n}\n.dripicons-question:before {\n  content: \"\\e03a\";\n}\n.dripicons-reply:before {\n  content: \"\\e03b\";\n}\n.dripicons-reply-all:before {\n  content: \"\\e03c\";\n}\n.dripicons-return:before {\n  content: \"\\e03d\";\n}\n.dripicons-retweet:before {\n  content: \"\\e03e\";\n}\n.dripicons-rocket:before {\n  content: \"\\e03f\";\n}\n.dripicons-scale:before {\n  content: \"\\e040\";\n}\n.dripicons-search:before {\n  content: \"\\e041\";\n}\n.dripicons-shopping-bag:before {\n  content: \"\\e042\";\n}\n.dripicons-skip:before {\n  content: \"\\e043\";\n}\n.dripicons-stack:before {\n  content: \"\\e044\";\n}\n.dripicons-star:before {\n  content: \"\\e045\";\n}\n.dripicons-stopwatch:before {\n  content: \"\\e046\";\n}\n.dripicons-store:before {\n  content: \"\\e047\";\n}\n.dripicons-suitcase:before {\n  content: \"\\e048\";\n}\n.dripicons-swap:before {\n  content: \"\\e049\";\n}\n.dripicons-tag:before {\n  content: \"\\e04a\";\n}\n.dripicons-tag-delete:before {\n  content: \"\\e04b\";\n}\n.dripicons-tags:before {\n  content: \"\\e04c\";\n}\n.dripicons-thumbs-down:before {\n  content: \"\\e04d\";\n}\n.dripicons-thumbs-up:before {\n  content: \"\\e04e\";\n}\n.dripicons-ticket:before {\n  content: \"\\e04f\";\n}\n.dripicons-time-reverse:before {\n  content: \"\\e050\";\n}\n.dripicons-to-do:before {\n  content: \"\\e051\";\n}\n.dripicons-toggles:before {\n  content: \"\\e052\";\n}\n.dripicons-trash:before {\n  content: \"\\e053\";\n}\n.dripicons-trophy:before {\n  content: \"\\e054\";\n}\n.dripicons-upload:before {\n  content: \"\\e055\";\n}\n.dripicons-user:before {\n  content: \"\\e056\";\n}\n.dripicons-user-group:before {\n  content: \"\\e057\";\n}\n.dripicons-user-id:before {\n  content: \"\\e058\";\n}\n.dripicons-vibrate:before {\n  content: \"\\e059\";\n}\n.dripicons-view-apps:before {\n  content: \"\\e05a\";\n}\n.dripicons-view-list:before {\n  content: \"\\e05b\";\n}\n.dripicons-view-list-large:before {\n  content: \"\\e05c\";\n}\n.dripicons-view-thumb:before {\n  content: \"\\e05d\";\n}\n.dripicons-volume-full:before {\n  content: \"\\e05e\";\n}\n.dripicons-volume-low:before {\n  content: \"\\e05f\";\n}\n.dripicons-volume-medium:before {\n  content: \"\\e060\";\n}\n.dripicons-volume-off:before {\n  content: \"\\e061\";\n}\n.dripicons-wallet:before {\n  content: \"\\e062\";\n}\n.dripicons-warning:before {\n  content: \"\\e063\";\n}\n.dripicons-web:before {\n  content: \"\\e064\";\n}\n.dripicons-weight:before {\n  content: \"\\e065\";\n}\n.dripicons-wifi:before {\n  content: \"\\e066\";\n}\n.dripicons-wrong:before {\n  content: \"\\e067\";\n}\n.dripicons-zoom-in:before {\n  content: \"\\e068\";\n}\n.dripicons-zoom-out:before {\n  content: \"\\e069\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/HELP-US-OUT.txt",
    "content": "I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,\nFort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,\ncomprehensive icon sets or copy and paste your own.\n\nPlease. Check it out.\n\n-Dave Gandy\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/css/mixins.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/css/variables.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/animated.less",
    "content": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.@{fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/bordered-pulled.less",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em @fa-border-color;\n  border-radius: .1em;\n}\n\n.@{fa-css-prefix}-pull-left { float: left; }\n.@{fa-css-prefix}-pull-right { float: right; }\n\n.@{fa-css-prefix} {\n  &.@{fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.@{fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.@{fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/core.less",
    "content": "// Base Class Definition\n// -------------------------\n\n.@{fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/fixed-width.less",
    "content": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/font-awesome.less",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables.less\";\n@import \"mixins.less\";\n@import \"path.less\";\n@import \"core.less\";\n@import \"larger.less\";\n@import \"fixed-width.less\";\n@import \"list.less\";\n@import \"bordered-pulled.less\";\n@import \"animated.less\";\n@import \"rotated-flipped.less\";\n@import \"stacked.less\";\n@import \"icons.less\";\n@import \"screen-reader.less\";\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/icons.less",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }\n.@{fa-css-prefix}-music:before { content: @fa-var-music; }\n.@{fa-css-prefix}-search:before { content: @fa-var-search; }\n.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }\n.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }\n.@{fa-css-prefix}-star:before { content: @fa-var-star; }\n.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }\n.@{fa-css-prefix}-user:before { content: @fa-var-user; }\n.@{fa-css-prefix}-film:before { content: @fa-var-film; }\n.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }\n.@{fa-css-prefix}-th:before { content: @fa-var-th; }\n.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }\n.@{fa-css-prefix}-check:before { content: @fa-var-check; }\n.@{fa-css-prefix}-remove:before,\n.@{fa-css-prefix}-close:before,\n.@{fa-css-prefix}-times:before { content: @fa-var-times; }\n.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }\n.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }\n.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }\n.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }\n.@{fa-css-prefix}-gear:before,\n.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }\n.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }\n.@{fa-css-prefix}-home:before { content: @fa-var-home; }\n.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }\n.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }\n.@{fa-css-prefix}-road:before { content: @fa-var-road; }\n.@{fa-css-prefix}-download:before { content: @fa-var-download; }\n.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }\n.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }\n.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }\n.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }\n.@{fa-css-prefix}-rotate-right:before,\n.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }\n.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }\n.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }\n.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }\n.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }\n.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }\n.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }\n.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }\n.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }\n.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }\n.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }\n.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }\n.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }\n.@{fa-css-prefix}-book:before { content: @fa-var-book; }\n.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }\n.@{fa-css-prefix}-print:before { content: @fa-var-print; }\n.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }\n.@{fa-css-prefix}-font:before { content: @fa-var-font; }\n.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }\n.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }\n.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }\n.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }\n.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }\n.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }\n.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }\n.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }\n.@{fa-css-prefix}-list:before { content: @fa-var-list; }\n.@{fa-css-prefix}-dedent:before,\n.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }\n.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }\n.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }\n.@{fa-css-prefix}-photo:before,\n.@{fa-css-prefix}-image:before,\n.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }\n.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }\n.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }\n.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }\n.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }\n.@{fa-css-prefix}-edit:before,\n.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }\n.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }\n.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }\n.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }\n.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }\n.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }\n.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }\n.@{fa-css-prefix}-play:before { content: @fa-var-play; }\n.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }\n.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }\n.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }\n.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }\n.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }\n.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }\n.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }\n.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }\n.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }\n.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }\n.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }\n.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }\n.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }\n.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }\n.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }\n.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }\n.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }\n.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }\n.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }\n.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }\n.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }\n.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }\n.@{fa-css-prefix}-mail-forward:before,\n.@{fa-css-prefix}-share:before { content: @fa-var-share; }\n.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }\n.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }\n.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }\n.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }\n.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }\n.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }\n.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }\n.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }\n.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }\n.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }\n.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }\n.@{fa-css-prefix}-warning:before,\n.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }\n.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }\n.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }\n.@{fa-css-prefix}-random:before { content: @fa-var-random; }\n.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }\n.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }\n.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }\n.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }\n.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }\n.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }\n.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }\n.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }\n.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }\n.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }\n.@{fa-css-prefix}-bar-chart-o:before,\n.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }\n.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }\n.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }\n.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }\n.@{fa-css-prefix}-key:before { content: @fa-var-key; }\n.@{fa-css-prefix}-gears:before,\n.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }\n.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }\n.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }\n.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }\n.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }\n.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }\n.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }\n.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }\n.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }\n.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }\n.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }\n.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }\n.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }\n.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }\n.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }\n.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }\n.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }\n.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }\n.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }\n.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }\n.@{fa-css-prefix}-facebook-f:before,\n.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }\n.@{fa-css-prefix}-github:before { content: @fa-var-github; }\n.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }\n.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }\n.@{fa-css-prefix}-feed:before,\n.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }\n.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }\n.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }\n.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }\n.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }\n.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }\n.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }\n.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }\n.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }\n.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }\n.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }\n.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }\n.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }\n.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }\n.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }\n.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }\n.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }\n.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }\n.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }\n.@{fa-css-prefix}-group:before,\n.@{fa-css-prefix}-users:before { content: @fa-var-users; }\n.@{fa-css-prefix}-chain:before,\n.@{fa-css-prefix}-link:before { content: @fa-var-link; }\n.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }\n.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }\n.@{fa-css-prefix}-cut:before,\n.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }\n.@{fa-css-prefix}-copy:before,\n.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }\n.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }\n.@{fa-css-prefix}-save:before,\n.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }\n.@{fa-css-prefix}-square:before { content: @fa-var-square; }\n.@{fa-css-prefix}-navicon:before,\n.@{fa-css-prefix}-reorder:before,\n.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }\n.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }\n.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }\n.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }\n.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }\n.@{fa-css-prefix}-table:before { content: @fa-var-table; }\n.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }\n.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }\n.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }\n.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }\n.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }\n.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }\n.@{fa-css-prefix}-money:before { content: @fa-var-money; }\n.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }\n.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }\n.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }\n.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }\n.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }\n.@{fa-css-prefix}-unsorted:before,\n.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }\n.@{fa-css-prefix}-sort-down:before,\n.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }\n.@{fa-css-prefix}-sort-up:before,\n.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }\n.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }\n.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }\n.@{fa-css-prefix}-rotate-left:before,\n.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }\n.@{fa-css-prefix}-legal:before,\n.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }\n.@{fa-css-prefix}-dashboard:before,\n.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }\n.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }\n.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }\n.@{fa-css-prefix}-flash:before,\n.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }\n.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }\n.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }\n.@{fa-css-prefix}-paste:before,\n.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }\n.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }\n.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }\n.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }\n.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }\n.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }\n.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }\n.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }\n.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }\n.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }\n.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }\n.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }\n.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }\n.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }\n.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }\n.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }\n.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }\n.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }\n.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }\n.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }\n.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }\n.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }\n.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }\n.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }\n.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }\n.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }\n.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }\n.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }\n.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }\n.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }\n.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }\n.@{fa-css-prefix}-mobile-phone:before,\n.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }\n.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }\n.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }\n.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }\n.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }\n.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }\n.@{fa-css-prefix}-mail-reply:before,\n.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }\n.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }\n.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }\n.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }\n.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }\n.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }\n.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }\n.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }\n.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }\n.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }\n.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }\n.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }\n.@{fa-css-prefix}-code:before { content: @fa-var-code; }\n.@{fa-css-prefix}-mail-reply-all:before,\n.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }\n.@{fa-css-prefix}-star-half-empty:before,\n.@{fa-css-prefix}-star-half-full:before,\n.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }\n.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }\n.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }\n.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }\n.@{fa-css-prefix}-unlink:before,\n.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }\n.@{fa-css-prefix}-question:before { content: @fa-var-question; }\n.@{fa-css-prefix}-info:before { content: @fa-var-info; }\n.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }\n.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }\n.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }\n.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }\n.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }\n.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }\n.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }\n.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }\n.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }\n.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }\n.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }\n.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }\n.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }\n.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }\n.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }\n.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }\n.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }\n.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }\n.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }\n.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }\n.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }\n.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }\n.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }\n.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }\n.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }\n.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }\n.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }\n.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }\n.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }\n.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }\n.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }\n.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }\n.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }\n.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }\n.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }\n.@{fa-css-prefix}-toggle-down:before,\n.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }\n.@{fa-css-prefix}-toggle-up:before,\n.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }\n.@{fa-css-prefix}-toggle-right:before,\n.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }\n.@{fa-css-prefix}-euro:before,\n.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }\n.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }\n.@{fa-css-prefix}-dollar:before,\n.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }\n.@{fa-css-prefix}-rupee:before,\n.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }\n.@{fa-css-prefix}-cny:before,\n.@{fa-css-prefix}-rmb:before,\n.@{fa-css-prefix}-yen:before,\n.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }\n.@{fa-css-prefix}-ruble:before,\n.@{fa-css-prefix}-rouble:before,\n.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }\n.@{fa-css-prefix}-won:before,\n.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }\n.@{fa-css-prefix}-bitcoin:before,\n.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }\n.@{fa-css-prefix}-file:before { content: @fa-var-file; }\n.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }\n.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }\n.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }\n.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }\n.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }\n.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }\n.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }\n.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }\n.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }\n.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }\n.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }\n.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }\n.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }\n.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }\n.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }\n.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }\n.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }\n.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }\n.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }\n.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }\n.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }\n.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }\n.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }\n.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }\n.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }\n.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }\n.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }\n.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }\n.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }\n.@{fa-css-prefix}-android:before { content: @fa-var-android; }\n.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }\n.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }\n.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }\n.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }\n.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }\n.@{fa-css-prefix}-female:before { content: @fa-var-female; }\n.@{fa-css-prefix}-male:before { content: @fa-var-male; }\n.@{fa-css-prefix}-gittip:before,\n.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }\n.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }\n.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }\n.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }\n.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }\n.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }\n.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }\n.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }\n.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }\n.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }\n.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }\n.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }\n.@{fa-css-prefix}-toggle-left:before,\n.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }\n.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }\n.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }\n.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }\n.@{fa-css-prefix}-turkish-lira:before,\n.@{fa-css-prefix}-try:before { content: @fa-var-try; }\n.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }\n.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }\n.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }\n.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }\n.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }\n.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }\n.@{fa-css-prefix}-institution:before,\n.@{fa-css-prefix}-bank:before,\n.@{fa-css-prefix}-university:before { content: @fa-var-university; }\n.@{fa-css-prefix}-mortar-board:before,\n.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }\n.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }\n.@{fa-css-prefix}-google:before { content: @fa-var-google; }\n.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }\n.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }\n.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }\n.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }\n.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }\n.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }\n.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }\n.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }\n.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }\n.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }\n.@{fa-css-prefix}-language:before { content: @fa-var-language; }\n.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }\n.@{fa-css-prefix}-building:before { content: @fa-var-building; }\n.@{fa-css-prefix}-child:before { content: @fa-var-child; }\n.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }\n.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }\n.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }\n.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }\n.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }\n.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }\n.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }\n.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }\n.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }\n.@{fa-css-prefix}-automobile:before,\n.@{fa-css-prefix}-car:before { content: @fa-var-car; }\n.@{fa-css-prefix}-cab:before,\n.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }\n.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }\n.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }\n.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }\n.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }\n.@{fa-css-prefix}-database:before { content: @fa-var-database; }\n.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }\n.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }\n.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }\n.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }\n.@{fa-css-prefix}-file-photo-o:before,\n.@{fa-css-prefix}-file-picture-o:before,\n.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }\n.@{fa-css-prefix}-file-zip-o:before,\n.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }\n.@{fa-css-prefix}-file-sound-o:before,\n.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }\n.@{fa-css-prefix}-file-movie-o:before,\n.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }\n.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }\n.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }\n.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }\n.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }\n.@{fa-css-prefix}-life-bouy:before,\n.@{fa-css-prefix}-life-buoy:before,\n.@{fa-css-prefix}-life-saver:before,\n.@{fa-css-prefix}-support:before,\n.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }\n.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }\n.@{fa-css-prefix}-ra:before,\n.@{fa-css-prefix}-resistance:before,\n.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }\n.@{fa-css-prefix}-ge:before,\n.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }\n.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }\n.@{fa-css-prefix}-git:before { content: @fa-var-git; }\n.@{fa-css-prefix}-y-combinator-square:before,\n.@{fa-css-prefix}-yc-square:before,\n.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }\n.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }\n.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }\n.@{fa-css-prefix}-wechat:before,\n.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }\n.@{fa-css-prefix}-send:before,\n.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }\n.@{fa-css-prefix}-send-o:before,\n.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }\n.@{fa-css-prefix}-history:before { content: @fa-var-history; }\n.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }\n.@{fa-css-prefix}-header:before { content: @fa-var-header; }\n.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }\n.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }\n.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }\n.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }\n.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }\n.@{fa-css-prefix}-soccer-ball-o:before,\n.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }\n.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }\n.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }\n.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }\n.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }\n.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }\n.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }\n.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }\n.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }\n.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }\n.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }\n.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }\n.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }\n.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }\n.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }\n.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }\n.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }\n.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }\n.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }\n.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }\n.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }\n.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }\n.@{fa-css-prefix}-at:before { content: @fa-var-at; }\n.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }\n.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }\n.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }\n.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }\n.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }\n.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }\n.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }\n.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }\n.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }\n.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }\n.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }\n.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }\n.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }\n.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }\n.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }\n.@{fa-css-prefix}-shekel:before,\n.@{fa-css-prefix}-sheqel:before,\n.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }\n.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }\n.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }\n.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }\n.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }\n.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }\n.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }\n.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }\n.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }\n.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }\n.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }\n.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }\n.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }\n.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }\n.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }\n.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }\n.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }\n.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }\n.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }\n.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }\n.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }\n.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }\n.@{fa-css-prefix}-intersex:before,\n.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }\n.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }\n.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }\n.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }\n.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }\n.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }\n.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }\n.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }\n.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }\n.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }\n.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }\n.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }\n.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }\n.@{fa-css-prefix}-server:before { content: @fa-var-server; }\n.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }\n.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }\n.@{fa-css-prefix}-hotel:before,\n.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }\n.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }\n.@{fa-css-prefix}-train:before { content: @fa-var-train; }\n.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }\n.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }\n.@{fa-css-prefix}-yc:before,\n.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }\n.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }\n.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }\n.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }\n.@{fa-css-prefix}-battery-4:before,\n.@{fa-css-prefix}-battery:before,\n.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }\n.@{fa-css-prefix}-battery-3:before,\n.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }\n.@{fa-css-prefix}-battery-2:before,\n.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }\n.@{fa-css-prefix}-battery-1:before,\n.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }\n.@{fa-css-prefix}-battery-0:before,\n.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }\n.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }\n.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }\n.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }\n.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }\n.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }\n.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }\n.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }\n.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }\n.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }\n.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }\n.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }\n.@{fa-css-prefix}-hourglass-1:before,\n.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }\n.@{fa-css-prefix}-hourglass-2:before,\n.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }\n.@{fa-css-prefix}-hourglass-3:before,\n.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }\n.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }\n.@{fa-css-prefix}-hand-grab-o:before,\n.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }\n.@{fa-css-prefix}-hand-stop-o:before,\n.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }\n.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }\n.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }\n.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }\n.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }\n.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }\n.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }\n.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }\n.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }\n.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }\n.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }\n.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }\n.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }\n.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }\n.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }\n.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }\n.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }\n.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }\n.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }\n.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }\n.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }\n.@{fa-css-prefix}-tv:before,\n.@{fa-css-prefix}-television:before { content: @fa-var-television; }\n.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }\n.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }\n.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }\n.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }\n.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }\n.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }\n.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }\n.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }\n.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }\n.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }\n.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }\n.@{fa-css-prefix}-map:before { content: @fa-var-map; }\n.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }\n.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }\n.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }\n.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }\n.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }\n.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }\n.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }\n.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }\n.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }\n.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }\n.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }\n.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }\n.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }\n.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }\n.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }\n.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }\n.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }\n.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }\n.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }\n.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }\n.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }\n.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }\n.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }\n.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }\n.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }\n.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }\n.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }\n.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }\n.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }\n.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }\n.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }\n.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }\n.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }\n.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }\n.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }\n.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }\n.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }\n.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }\n.@{fa-css-prefix}-asl-interpreting:before,\n.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }\n.@{fa-css-prefix}-deafness:before,\n.@{fa-css-prefix}-hard-of-hearing:before,\n.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }\n.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }\n.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }\n.@{fa-css-prefix}-signing:before,\n.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }\n.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }\n.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }\n.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }\n.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }\n.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }\n.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }\n.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }\n.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }\n.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }\n.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }\n.@{fa-css-prefix}-google-plus-circle:before,\n.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }\n.@{fa-css-prefix}-fa:before,\n.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }\n.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }\n.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }\n.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }\n.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }\n.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }\n.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }\n.@{fa-css-prefix}-vcard:before,\n.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }\n.@{fa-css-prefix}-vcard-o:before,\n.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }\n.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }\n.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }\n.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }\n.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }\n.@{fa-css-prefix}-drivers-license:before,\n.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }\n.@{fa-css-prefix}-drivers-license-o:before,\n.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }\n.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }\n.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }\n.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }\n.@{fa-css-prefix}-thermometer-4:before,\n.@{fa-css-prefix}-thermometer:before,\n.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }\n.@{fa-css-prefix}-thermometer-3:before,\n.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }\n.@{fa-css-prefix}-thermometer-2:before,\n.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }\n.@{fa-css-prefix}-thermometer-1:before,\n.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }\n.@{fa-css-prefix}-thermometer-0:before,\n.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }\n.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }\n.@{fa-css-prefix}-bathtub:before,\n.@{fa-css-prefix}-s15:before,\n.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }\n.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }\n.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }\n.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }\n.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }\n.@{fa-css-prefix}-times-rectangle:before,\n.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }\n.@{fa-css-prefix}-times-rectangle-o:before,\n.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }\n.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }\n.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }\n.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }\n.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }\n.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }\n.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }\n.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }\n.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }\n.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }\n.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }\n.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/larger.less",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.@{fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.@{fa-css-prefix}-2x { font-size: 2em; }\n.@{fa-css-prefix}-3x { font-size: 3em; }\n.@{fa-css-prefix}-4x { font-size: 4em; }\n.@{fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/list.less",
    "content": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: @fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.@{fa-css-prefix}-li {\n  position: absolute;\n  left: -@fa-li-width;\n  width: @fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.@{fa-css-prefix}-lg {\n    left: (-@fa-li-width + (4em / 14));\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/mixins.less",
    "content": "// Mixins\n// --------------------------\n\n.fa-icon() {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n.fa-icon-rotate(@degrees, @rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})\";\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n\n.fa-icon-flip(@horiz, @vert, @rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)\";\n  -webkit-transform: scale(@horiz, @vert);\n      -ms-transform: scale(@horiz, @vert);\n          transform: scale(@horiz, @vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only() {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable() {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/path.less",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),\n    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),\n    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),\n    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),\n    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');\n  // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/rotated-flipped.less",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }\n.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }\n.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }\n\n.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }\n.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .@{fa-css-prefix}-rotate-90,\n:root .@{fa-css-prefix}-rotate-180,\n:root .@{fa-css-prefix}-rotate-270,\n:root .@{fa-css-prefix}-flip-horizontal,\n:root .@{fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/screen-reader.less",
    "content": "// Screen Readers\n// -------------------------\n\n.sr-only { .sr-only(); }\n.sr-only-focusable { .sr-only-focusable(); }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/stacked.less",
    "content": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.@{fa-css-prefix}-stack-1x { line-height: inherit; }\n.@{fa-css-prefix}-stack-2x { font-size: 2em; }\n.@{fa-css-prefix}-inverse { color: @fa-inverse; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/less/variables.less",
    "content": "// Variables\n// --------------------------\n\n@fa-font-path:        \"../fonts\";\n@fa-font-size-base:   14px;\n@fa-line-height-base: 1;\n//@fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts\"; // for referencing Bootstrap CDN font files directly\n@fa-css-prefix:       fa;\n@fa-version:          \"4.7.0\";\n@fa-border-color:     #eee;\n@fa-inverse:          #fff;\n@fa-li-width:         (30em / 14);\n\n@fa-var-500px: \"\\f26e\";\n@fa-var-address-book: \"\\f2b9\";\n@fa-var-address-book-o: \"\\f2ba\";\n@fa-var-address-card: \"\\f2bb\";\n@fa-var-address-card-o: \"\\f2bc\";\n@fa-var-adjust: \"\\f042\";\n@fa-var-adn: \"\\f170\";\n@fa-var-align-center: \"\\f037\";\n@fa-var-align-justify: \"\\f039\";\n@fa-var-align-left: \"\\f036\";\n@fa-var-align-right: \"\\f038\";\n@fa-var-amazon: \"\\f270\";\n@fa-var-ambulance: \"\\f0f9\";\n@fa-var-american-sign-language-interpreting: \"\\f2a3\";\n@fa-var-anchor: \"\\f13d\";\n@fa-var-android: \"\\f17b\";\n@fa-var-angellist: \"\\f209\";\n@fa-var-angle-double-down: \"\\f103\";\n@fa-var-angle-double-left: \"\\f100\";\n@fa-var-angle-double-right: \"\\f101\";\n@fa-var-angle-double-up: \"\\f102\";\n@fa-var-angle-down: \"\\f107\";\n@fa-var-angle-left: \"\\f104\";\n@fa-var-angle-right: \"\\f105\";\n@fa-var-angle-up: \"\\f106\";\n@fa-var-apple: \"\\f179\";\n@fa-var-archive: \"\\f187\";\n@fa-var-area-chart: \"\\f1fe\";\n@fa-var-arrow-circle-down: \"\\f0ab\";\n@fa-var-arrow-circle-left: \"\\f0a8\";\n@fa-var-arrow-circle-o-down: \"\\f01a\";\n@fa-var-arrow-circle-o-left: \"\\f190\";\n@fa-var-arrow-circle-o-right: \"\\f18e\";\n@fa-var-arrow-circle-o-up: \"\\f01b\";\n@fa-var-arrow-circle-right: \"\\f0a9\";\n@fa-var-arrow-circle-up: \"\\f0aa\";\n@fa-var-arrow-down: \"\\f063\";\n@fa-var-arrow-left: \"\\f060\";\n@fa-var-arrow-right: \"\\f061\";\n@fa-var-arrow-up: \"\\f062\";\n@fa-var-arrows: \"\\f047\";\n@fa-var-arrows-alt: \"\\f0b2\";\n@fa-var-arrows-h: \"\\f07e\";\n@fa-var-arrows-v: \"\\f07d\";\n@fa-var-asl-interpreting: \"\\f2a3\";\n@fa-var-assistive-listening-systems: \"\\f2a2\";\n@fa-var-asterisk: \"\\f069\";\n@fa-var-at: \"\\f1fa\";\n@fa-var-audio-description: \"\\f29e\";\n@fa-var-automobile: \"\\f1b9\";\n@fa-var-backward: \"\\f04a\";\n@fa-var-balance-scale: \"\\f24e\";\n@fa-var-ban: \"\\f05e\";\n@fa-var-bandcamp: \"\\f2d5\";\n@fa-var-bank: \"\\f19c\";\n@fa-var-bar-chart: \"\\f080\";\n@fa-var-bar-chart-o: \"\\f080\";\n@fa-var-barcode: \"\\f02a\";\n@fa-var-bars: \"\\f0c9\";\n@fa-var-bath: \"\\f2cd\";\n@fa-var-bathtub: \"\\f2cd\";\n@fa-var-battery: \"\\f240\";\n@fa-var-battery-0: \"\\f244\";\n@fa-var-battery-1: \"\\f243\";\n@fa-var-battery-2: \"\\f242\";\n@fa-var-battery-3: \"\\f241\";\n@fa-var-battery-4: \"\\f240\";\n@fa-var-battery-empty: \"\\f244\";\n@fa-var-battery-full: \"\\f240\";\n@fa-var-battery-half: \"\\f242\";\n@fa-var-battery-quarter: \"\\f243\";\n@fa-var-battery-three-quarters: \"\\f241\";\n@fa-var-bed: \"\\f236\";\n@fa-var-beer: \"\\f0fc\";\n@fa-var-behance: \"\\f1b4\";\n@fa-var-behance-square: \"\\f1b5\";\n@fa-var-bell: \"\\f0f3\";\n@fa-var-bell-o: \"\\f0a2\";\n@fa-var-bell-slash: \"\\f1f6\";\n@fa-var-bell-slash-o: \"\\f1f7\";\n@fa-var-bicycle: \"\\f206\";\n@fa-var-binoculars: \"\\f1e5\";\n@fa-var-birthday-cake: \"\\f1fd\";\n@fa-var-bitbucket: \"\\f171\";\n@fa-var-bitbucket-square: \"\\f172\";\n@fa-var-bitcoin: \"\\f15a\";\n@fa-var-black-tie: \"\\f27e\";\n@fa-var-blind: \"\\f29d\";\n@fa-var-bluetooth: \"\\f293\";\n@fa-var-bluetooth-b: \"\\f294\";\n@fa-var-bold: \"\\f032\";\n@fa-var-bolt: \"\\f0e7\";\n@fa-var-bomb: \"\\f1e2\";\n@fa-var-book: \"\\f02d\";\n@fa-var-bookmark: \"\\f02e\";\n@fa-var-bookmark-o: \"\\f097\";\n@fa-var-braille: \"\\f2a1\";\n@fa-var-briefcase: \"\\f0b1\";\n@fa-var-btc: \"\\f15a\";\n@fa-var-bug: \"\\f188\";\n@fa-var-building: \"\\f1ad\";\n@fa-var-building-o: \"\\f0f7\";\n@fa-var-bullhorn: \"\\f0a1\";\n@fa-var-bullseye: \"\\f140\";\n@fa-var-bus: \"\\f207\";\n@fa-var-buysellads: \"\\f20d\";\n@fa-var-cab: \"\\f1ba\";\n@fa-var-calculator: \"\\f1ec\";\n@fa-var-calendar: \"\\f073\";\n@fa-var-calendar-check-o: \"\\f274\";\n@fa-var-calendar-minus-o: \"\\f272\";\n@fa-var-calendar-o: \"\\f133\";\n@fa-var-calendar-plus-o: \"\\f271\";\n@fa-var-calendar-times-o: \"\\f273\";\n@fa-var-camera: \"\\f030\";\n@fa-var-camera-retro: \"\\f083\";\n@fa-var-car: \"\\f1b9\";\n@fa-var-caret-down: \"\\f0d7\";\n@fa-var-caret-left: \"\\f0d9\";\n@fa-var-caret-right: \"\\f0da\";\n@fa-var-caret-square-o-down: \"\\f150\";\n@fa-var-caret-square-o-left: \"\\f191\";\n@fa-var-caret-square-o-right: \"\\f152\";\n@fa-var-caret-square-o-up: \"\\f151\";\n@fa-var-caret-up: \"\\f0d8\";\n@fa-var-cart-arrow-down: \"\\f218\";\n@fa-var-cart-plus: \"\\f217\";\n@fa-var-cc: \"\\f20a\";\n@fa-var-cc-amex: \"\\f1f3\";\n@fa-var-cc-diners-club: \"\\f24c\";\n@fa-var-cc-discover: \"\\f1f2\";\n@fa-var-cc-jcb: \"\\f24b\";\n@fa-var-cc-mastercard: \"\\f1f1\";\n@fa-var-cc-paypal: \"\\f1f4\";\n@fa-var-cc-stripe: \"\\f1f5\";\n@fa-var-cc-visa: \"\\f1f0\";\n@fa-var-certificate: \"\\f0a3\";\n@fa-var-chain: \"\\f0c1\";\n@fa-var-chain-broken: \"\\f127\";\n@fa-var-check: \"\\f00c\";\n@fa-var-check-circle: \"\\f058\";\n@fa-var-check-circle-o: \"\\f05d\";\n@fa-var-check-square: \"\\f14a\";\n@fa-var-check-square-o: \"\\f046\";\n@fa-var-chevron-circle-down: \"\\f13a\";\n@fa-var-chevron-circle-left: \"\\f137\";\n@fa-var-chevron-circle-right: \"\\f138\";\n@fa-var-chevron-circle-up: \"\\f139\";\n@fa-var-chevron-down: \"\\f078\";\n@fa-var-chevron-left: \"\\f053\";\n@fa-var-chevron-right: \"\\f054\";\n@fa-var-chevron-up: \"\\f077\";\n@fa-var-child: \"\\f1ae\";\n@fa-var-chrome: \"\\f268\";\n@fa-var-circle: \"\\f111\";\n@fa-var-circle-o: \"\\f10c\";\n@fa-var-circle-o-notch: \"\\f1ce\";\n@fa-var-circle-thin: \"\\f1db\";\n@fa-var-clipboard: \"\\f0ea\";\n@fa-var-clock-o: \"\\f017\";\n@fa-var-clone: \"\\f24d\";\n@fa-var-close: \"\\f00d\";\n@fa-var-cloud: \"\\f0c2\";\n@fa-var-cloud-download: \"\\f0ed\";\n@fa-var-cloud-upload: \"\\f0ee\";\n@fa-var-cny: \"\\f157\";\n@fa-var-code: \"\\f121\";\n@fa-var-code-fork: \"\\f126\";\n@fa-var-codepen: \"\\f1cb\";\n@fa-var-codiepie: \"\\f284\";\n@fa-var-coffee: \"\\f0f4\";\n@fa-var-cog: \"\\f013\";\n@fa-var-cogs: \"\\f085\";\n@fa-var-columns: \"\\f0db\";\n@fa-var-comment: \"\\f075\";\n@fa-var-comment-o: \"\\f0e5\";\n@fa-var-commenting: \"\\f27a\";\n@fa-var-commenting-o: \"\\f27b\";\n@fa-var-comments: \"\\f086\";\n@fa-var-comments-o: \"\\f0e6\";\n@fa-var-compass: \"\\f14e\";\n@fa-var-compress: \"\\f066\";\n@fa-var-connectdevelop: \"\\f20e\";\n@fa-var-contao: \"\\f26d\";\n@fa-var-copy: \"\\f0c5\";\n@fa-var-copyright: \"\\f1f9\";\n@fa-var-creative-commons: \"\\f25e\";\n@fa-var-credit-card: \"\\f09d\";\n@fa-var-credit-card-alt: \"\\f283\";\n@fa-var-crop: \"\\f125\";\n@fa-var-crosshairs: \"\\f05b\";\n@fa-var-css3: \"\\f13c\";\n@fa-var-cube: \"\\f1b2\";\n@fa-var-cubes: \"\\f1b3\";\n@fa-var-cut: \"\\f0c4\";\n@fa-var-cutlery: \"\\f0f5\";\n@fa-var-dashboard: \"\\f0e4\";\n@fa-var-dashcube: \"\\f210\";\n@fa-var-database: \"\\f1c0\";\n@fa-var-deaf: \"\\f2a4\";\n@fa-var-deafness: \"\\f2a4\";\n@fa-var-dedent: \"\\f03b\";\n@fa-var-delicious: \"\\f1a5\";\n@fa-var-desktop: \"\\f108\";\n@fa-var-deviantart: \"\\f1bd\";\n@fa-var-diamond: \"\\f219\";\n@fa-var-digg: \"\\f1a6\";\n@fa-var-dollar: \"\\f155\";\n@fa-var-dot-circle-o: \"\\f192\";\n@fa-var-download: \"\\f019\";\n@fa-var-dribbble: \"\\f17d\";\n@fa-var-drivers-license: \"\\f2c2\";\n@fa-var-drivers-license-o: \"\\f2c3\";\n@fa-var-dropbox: \"\\f16b\";\n@fa-var-drupal: \"\\f1a9\";\n@fa-var-edge: \"\\f282\";\n@fa-var-edit: \"\\f044\";\n@fa-var-eercast: \"\\f2da\";\n@fa-var-eject: \"\\f052\";\n@fa-var-ellipsis-h: \"\\f141\";\n@fa-var-ellipsis-v: \"\\f142\";\n@fa-var-empire: \"\\f1d1\";\n@fa-var-envelope: \"\\f0e0\";\n@fa-var-envelope-o: \"\\f003\";\n@fa-var-envelope-open: \"\\f2b6\";\n@fa-var-envelope-open-o: \"\\f2b7\";\n@fa-var-envelope-square: \"\\f199\";\n@fa-var-envira: \"\\f299\";\n@fa-var-eraser: \"\\f12d\";\n@fa-var-etsy: \"\\f2d7\";\n@fa-var-eur: \"\\f153\";\n@fa-var-euro: \"\\f153\";\n@fa-var-exchange: \"\\f0ec\";\n@fa-var-exclamation: \"\\f12a\";\n@fa-var-exclamation-circle: \"\\f06a\";\n@fa-var-exclamation-triangle: \"\\f071\";\n@fa-var-expand: \"\\f065\";\n@fa-var-expeditedssl: \"\\f23e\";\n@fa-var-external-link: \"\\f08e\";\n@fa-var-external-link-square: \"\\f14c\";\n@fa-var-eye: \"\\f06e\";\n@fa-var-eye-slash: \"\\f070\";\n@fa-var-eyedropper: \"\\f1fb\";\n@fa-var-fa: \"\\f2b4\";\n@fa-var-facebook: \"\\f09a\";\n@fa-var-facebook-f: \"\\f09a\";\n@fa-var-facebook-official: \"\\f230\";\n@fa-var-facebook-square: \"\\f082\";\n@fa-var-fast-backward: \"\\f049\";\n@fa-var-fast-forward: \"\\f050\";\n@fa-var-fax: \"\\f1ac\";\n@fa-var-feed: \"\\f09e\";\n@fa-var-female: \"\\f182\";\n@fa-var-fighter-jet: \"\\f0fb\";\n@fa-var-file: \"\\f15b\";\n@fa-var-file-archive-o: \"\\f1c6\";\n@fa-var-file-audio-o: \"\\f1c7\";\n@fa-var-file-code-o: \"\\f1c9\";\n@fa-var-file-excel-o: \"\\f1c3\";\n@fa-var-file-image-o: \"\\f1c5\";\n@fa-var-file-movie-o: \"\\f1c8\";\n@fa-var-file-o: \"\\f016\";\n@fa-var-file-pdf-o: \"\\f1c1\";\n@fa-var-file-photo-o: \"\\f1c5\";\n@fa-var-file-picture-o: \"\\f1c5\";\n@fa-var-file-powerpoint-o: \"\\f1c4\";\n@fa-var-file-sound-o: \"\\f1c7\";\n@fa-var-file-text: \"\\f15c\";\n@fa-var-file-text-o: \"\\f0f6\";\n@fa-var-file-video-o: \"\\f1c8\";\n@fa-var-file-word-o: \"\\f1c2\";\n@fa-var-file-zip-o: \"\\f1c6\";\n@fa-var-files-o: \"\\f0c5\";\n@fa-var-film: \"\\f008\";\n@fa-var-filter: \"\\f0b0\";\n@fa-var-fire: \"\\f06d\";\n@fa-var-fire-extinguisher: \"\\f134\";\n@fa-var-firefox: \"\\f269\";\n@fa-var-first-order: \"\\f2b0\";\n@fa-var-flag: \"\\f024\";\n@fa-var-flag-checkered: \"\\f11e\";\n@fa-var-flag-o: \"\\f11d\";\n@fa-var-flash: \"\\f0e7\";\n@fa-var-flask: \"\\f0c3\";\n@fa-var-flickr: \"\\f16e\";\n@fa-var-floppy-o: \"\\f0c7\";\n@fa-var-folder: \"\\f07b\";\n@fa-var-folder-o: \"\\f114\";\n@fa-var-folder-open: \"\\f07c\";\n@fa-var-folder-open-o: \"\\f115\";\n@fa-var-font: \"\\f031\";\n@fa-var-font-awesome: \"\\f2b4\";\n@fa-var-fonticons: \"\\f280\";\n@fa-var-fort-awesome: \"\\f286\";\n@fa-var-forumbee: \"\\f211\";\n@fa-var-forward: \"\\f04e\";\n@fa-var-foursquare: \"\\f180\";\n@fa-var-free-code-camp: \"\\f2c5\";\n@fa-var-frown-o: \"\\f119\";\n@fa-var-futbol-o: \"\\f1e3\";\n@fa-var-gamepad: \"\\f11b\";\n@fa-var-gavel: \"\\f0e3\";\n@fa-var-gbp: \"\\f154\";\n@fa-var-ge: \"\\f1d1\";\n@fa-var-gear: \"\\f013\";\n@fa-var-gears: \"\\f085\";\n@fa-var-genderless: \"\\f22d\";\n@fa-var-get-pocket: \"\\f265\";\n@fa-var-gg: \"\\f260\";\n@fa-var-gg-circle: \"\\f261\";\n@fa-var-gift: \"\\f06b\";\n@fa-var-git: \"\\f1d3\";\n@fa-var-git-square: \"\\f1d2\";\n@fa-var-github: \"\\f09b\";\n@fa-var-github-alt: \"\\f113\";\n@fa-var-github-square: \"\\f092\";\n@fa-var-gitlab: \"\\f296\";\n@fa-var-gittip: \"\\f184\";\n@fa-var-glass: \"\\f000\";\n@fa-var-glide: \"\\f2a5\";\n@fa-var-glide-g: \"\\f2a6\";\n@fa-var-globe: \"\\f0ac\";\n@fa-var-google: \"\\f1a0\";\n@fa-var-google-plus: \"\\f0d5\";\n@fa-var-google-plus-circle: \"\\f2b3\";\n@fa-var-google-plus-official: \"\\f2b3\";\n@fa-var-google-plus-square: \"\\f0d4\";\n@fa-var-google-wallet: \"\\f1ee\";\n@fa-var-graduation-cap: \"\\f19d\";\n@fa-var-gratipay: \"\\f184\";\n@fa-var-grav: \"\\f2d6\";\n@fa-var-group: \"\\f0c0\";\n@fa-var-h-square: \"\\f0fd\";\n@fa-var-hacker-news: \"\\f1d4\";\n@fa-var-hand-grab-o: \"\\f255\";\n@fa-var-hand-lizard-o: \"\\f258\";\n@fa-var-hand-o-down: \"\\f0a7\";\n@fa-var-hand-o-left: \"\\f0a5\";\n@fa-var-hand-o-right: \"\\f0a4\";\n@fa-var-hand-o-up: \"\\f0a6\";\n@fa-var-hand-paper-o: \"\\f256\";\n@fa-var-hand-peace-o: \"\\f25b\";\n@fa-var-hand-pointer-o: \"\\f25a\";\n@fa-var-hand-rock-o: \"\\f255\";\n@fa-var-hand-scissors-o: \"\\f257\";\n@fa-var-hand-spock-o: \"\\f259\";\n@fa-var-hand-stop-o: \"\\f256\";\n@fa-var-handshake-o: \"\\f2b5\";\n@fa-var-hard-of-hearing: \"\\f2a4\";\n@fa-var-hashtag: \"\\f292\";\n@fa-var-hdd-o: \"\\f0a0\";\n@fa-var-header: \"\\f1dc\";\n@fa-var-headphones: \"\\f025\";\n@fa-var-heart: \"\\f004\";\n@fa-var-heart-o: \"\\f08a\";\n@fa-var-heartbeat: \"\\f21e\";\n@fa-var-history: \"\\f1da\";\n@fa-var-home: \"\\f015\";\n@fa-var-hospital-o: \"\\f0f8\";\n@fa-var-hotel: \"\\f236\";\n@fa-var-hourglass: \"\\f254\";\n@fa-var-hourglass-1: \"\\f251\";\n@fa-var-hourglass-2: \"\\f252\";\n@fa-var-hourglass-3: \"\\f253\";\n@fa-var-hourglass-end: \"\\f253\";\n@fa-var-hourglass-half: \"\\f252\";\n@fa-var-hourglass-o: \"\\f250\";\n@fa-var-hourglass-start: \"\\f251\";\n@fa-var-houzz: \"\\f27c\";\n@fa-var-html5: \"\\f13b\";\n@fa-var-i-cursor: \"\\f246\";\n@fa-var-id-badge: \"\\f2c1\";\n@fa-var-id-card: \"\\f2c2\";\n@fa-var-id-card-o: \"\\f2c3\";\n@fa-var-ils: \"\\f20b\";\n@fa-var-image: \"\\f03e\";\n@fa-var-imdb: \"\\f2d8\";\n@fa-var-inbox: \"\\f01c\";\n@fa-var-indent: \"\\f03c\";\n@fa-var-industry: \"\\f275\";\n@fa-var-info: \"\\f129\";\n@fa-var-info-circle: \"\\f05a\";\n@fa-var-inr: \"\\f156\";\n@fa-var-instagram: \"\\f16d\";\n@fa-var-institution: \"\\f19c\";\n@fa-var-internet-explorer: \"\\f26b\";\n@fa-var-intersex: \"\\f224\";\n@fa-var-ioxhost: \"\\f208\";\n@fa-var-italic: \"\\f033\";\n@fa-var-joomla: \"\\f1aa\";\n@fa-var-jpy: \"\\f157\";\n@fa-var-jsfiddle: \"\\f1cc\";\n@fa-var-key: \"\\f084\";\n@fa-var-keyboard-o: \"\\f11c\";\n@fa-var-krw: \"\\f159\";\n@fa-var-language: \"\\f1ab\";\n@fa-var-laptop: \"\\f109\";\n@fa-var-lastfm: \"\\f202\";\n@fa-var-lastfm-square: \"\\f203\";\n@fa-var-leaf: \"\\f06c\";\n@fa-var-leanpub: \"\\f212\";\n@fa-var-legal: \"\\f0e3\";\n@fa-var-lemon-o: \"\\f094\";\n@fa-var-level-down: \"\\f149\";\n@fa-var-level-up: \"\\f148\";\n@fa-var-life-bouy: \"\\f1cd\";\n@fa-var-life-buoy: \"\\f1cd\";\n@fa-var-life-ring: \"\\f1cd\";\n@fa-var-life-saver: \"\\f1cd\";\n@fa-var-lightbulb-o: \"\\f0eb\";\n@fa-var-line-chart: \"\\f201\";\n@fa-var-link: \"\\f0c1\";\n@fa-var-linkedin: \"\\f0e1\";\n@fa-var-linkedin-square: \"\\f08c\";\n@fa-var-linode: \"\\f2b8\";\n@fa-var-linux: \"\\f17c\";\n@fa-var-list: \"\\f03a\";\n@fa-var-list-alt: \"\\f022\";\n@fa-var-list-ol: \"\\f0cb\";\n@fa-var-list-ul: \"\\f0ca\";\n@fa-var-location-arrow: \"\\f124\";\n@fa-var-lock: \"\\f023\";\n@fa-var-long-arrow-down: \"\\f175\";\n@fa-var-long-arrow-left: \"\\f177\";\n@fa-var-long-arrow-right: \"\\f178\";\n@fa-var-long-arrow-up: \"\\f176\";\n@fa-var-low-vision: \"\\f2a8\";\n@fa-var-magic: \"\\f0d0\";\n@fa-var-magnet: \"\\f076\";\n@fa-var-mail-forward: \"\\f064\";\n@fa-var-mail-reply: \"\\f112\";\n@fa-var-mail-reply-all: \"\\f122\";\n@fa-var-male: \"\\f183\";\n@fa-var-map: \"\\f279\";\n@fa-var-map-marker: \"\\f041\";\n@fa-var-map-o: \"\\f278\";\n@fa-var-map-pin: \"\\f276\";\n@fa-var-map-signs: \"\\f277\";\n@fa-var-mars: \"\\f222\";\n@fa-var-mars-double: \"\\f227\";\n@fa-var-mars-stroke: \"\\f229\";\n@fa-var-mars-stroke-h: \"\\f22b\";\n@fa-var-mars-stroke-v: \"\\f22a\";\n@fa-var-maxcdn: \"\\f136\";\n@fa-var-meanpath: \"\\f20c\";\n@fa-var-medium: \"\\f23a\";\n@fa-var-medkit: \"\\f0fa\";\n@fa-var-meetup: \"\\f2e0\";\n@fa-var-meh-o: \"\\f11a\";\n@fa-var-mercury: \"\\f223\";\n@fa-var-microchip: \"\\f2db\";\n@fa-var-microphone: \"\\f130\";\n@fa-var-microphone-slash: \"\\f131\";\n@fa-var-minus: \"\\f068\";\n@fa-var-minus-circle: \"\\f056\";\n@fa-var-minus-square: \"\\f146\";\n@fa-var-minus-square-o: \"\\f147\";\n@fa-var-mixcloud: \"\\f289\";\n@fa-var-mobile: \"\\f10b\";\n@fa-var-mobile-phone: \"\\f10b\";\n@fa-var-modx: \"\\f285\";\n@fa-var-money: \"\\f0d6\";\n@fa-var-moon-o: \"\\f186\";\n@fa-var-mortar-board: \"\\f19d\";\n@fa-var-motorcycle: \"\\f21c\";\n@fa-var-mouse-pointer: \"\\f245\";\n@fa-var-music: \"\\f001\";\n@fa-var-navicon: \"\\f0c9\";\n@fa-var-neuter: \"\\f22c\";\n@fa-var-newspaper-o: \"\\f1ea\";\n@fa-var-object-group: \"\\f247\";\n@fa-var-object-ungroup: \"\\f248\";\n@fa-var-odnoklassniki: \"\\f263\";\n@fa-var-odnoklassniki-square: \"\\f264\";\n@fa-var-opencart: \"\\f23d\";\n@fa-var-openid: \"\\f19b\";\n@fa-var-opera: \"\\f26a\";\n@fa-var-optin-monster: \"\\f23c\";\n@fa-var-outdent: \"\\f03b\";\n@fa-var-pagelines: \"\\f18c\";\n@fa-var-paint-brush: \"\\f1fc\";\n@fa-var-paper-plane: \"\\f1d8\";\n@fa-var-paper-plane-o: \"\\f1d9\";\n@fa-var-paperclip: \"\\f0c6\";\n@fa-var-paragraph: \"\\f1dd\";\n@fa-var-paste: \"\\f0ea\";\n@fa-var-pause: \"\\f04c\";\n@fa-var-pause-circle: \"\\f28b\";\n@fa-var-pause-circle-o: \"\\f28c\";\n@fa-var-paw: \"\\f1b0\";\n@fa-var-paypal: \"\\f1ed\";\n@fa-var-pencil: \"\\f040\";\n@fa-var-pencil-square: \"\\f14b\";\n@fa-var-pencil-square-o: \"\\f044\";\n@fa-var-percent: \"\\f295\";\n@fa-var-phone: \"\\f095\";\n@fa-var-phone-square: \"\\f098\";\n@fa-var-photo: \"\\f03e\";\n@fa-var-picture-o: \"\\f03e\";\n@fa-var-pie-chart: \"\\f200\";\n@fa-var-pied-piper: \"\\f2ae\";\n@fa-var-pied-piper-alt: \"\\f1a8\";\n@fa-var-pied-piper-pp: \"\\f1a7\";\n@fa-var-pinterest: \"\\f0d2\";\n@fa-var-pinterest-p: \"\\f231\";\n@fa-var-pinterest-square: \"\\f0d3\";\n@fa-var-plane: \"\\f072\";\n@fa-var-play: \"\\f04b\";\n@fa-var-play-circle: \"\\f144\";\n@fa-var-play-circle-o: \"\\f01d\";\n@fa-var-plug: \"\\f1e6\";\n@fa-var-plus: \"\\f067\";\n@fa-var-plus-circle: \"\\f055\";\n@fa-var-plus-square: \"\\f0fe\";\n@fa-var-plus-square-o: \"\\f196\";\n@fa-var-podcast: \"\\f2ce\";\n@fa-var-power-off: \"\\f011\";\n@fa-var-print: \"\\f02f\";\n@fa-var-product-hunt: \"\\f288\";\n@fa-var-puzzle-piece: \"\\f12e\";\n@fa-var-qq: \"\\f1d6\";\n@fa-var-qrcode: \"\\f029\";\n@fa-var-question: \"\\f128\";\n@fa-var-question-circle: \"\\f059\";\n@fa-var-question-circle-o: \"\\f29c\";\n@fa-var-quora: \"\\f2c4\";\n@fa-var-quote-left: \"\\f10d\";\n@fa-var-quote-right: \"\\f10e\";\n@fa-var-ra: \"\\f1d0\";\n@fa-var-random: \"\\f074\";\n@fa-var-ravelry: \"\\f2d9\";\n@fa-var-rebel: \"\\f1d0\";\n@fa-var-recycle: \"\\f1b8\";\n@fa-var-reddit: \"\\f1a1\";\n@fa-var-reddit-alien: \"\\f281\";\n@fa-var-reddit-square: \"\\f1a2\";\n@fa-var-refresh: \"\\f021\";\n@fa-var-registered: \"\\f25d\";\n@fa-var-remove: \"\\f00d\";\n@fa-var-renren: \"\\f18b\";\n@fa-var-reorder: \"\\f0c9\";\n@fa-var-repeat: \"\\f01e\";\n@fa-var-reply: \"\\f112\";\n@fa-var-reply-all: \"\\f122\";\n@fa-var-resistance: \"\\f1d0\";\n@fa-var-retweet: \"\\f079\";\n@fa-var-rmb: \"\\f157\";\n@fa-var-road: \"\\f018\";\n@fa-var-rocket: \"\\f135\";\n@fa-var-rotate-left: \"\\f0e2\";\n@fa-var-rotate-right: \"\\f01e\";\n@fa-var-rouble: \"\\f158\";\n@fa-var-rss: \"\\f09e\";\n@fa-var-rss-square: \"\\f143\";\n@fa-var-rub: \"\\f158\";\n@fa-var-ruble: \"\\f158\";\n@fa-var-rupee: \"\\f156\";\n@fa-var-s15: \"\\f2cd\";\n@fa-var-safari: \"\\f267\";\n@fa-var-save: \"\\f0c7\";\n@fa-var-scissors: \"\\f0c4\";\n@fa-var-scribd: \"\\f28a\";\n@fa-var-search: \"\\f002\";\n@fa-var-search-minus: \"\\f010\";\n@fa-var-search-plus: \"\\f00e\";\n@fa-var-sellsy: \"\\f213\";\n@fa-var-send: \"\\f1d8\";\n@fa-var-send-o: \"\\f1d9\";\n@fa-var-server: \"\\f233\";\n@fa-var-share: \"\\f064\";\n@fa-var-share-alt: \"\\f1e0\";\n@fa-var-share-alt-square: \"\\f1e1\";\n@fa-var-share-square: \"\\f14d\";\n@fa-var-share-square-o: \"\\f045\";\n@fa-var-shekel: \"\\f20b\";\n@fa-var-sheqel: \"\\f20b\";\n@fa-var-shield: \"\\f132\";\n@fa-var-ship: \"\\f21a\";\n@fa-var-shirtsinbulk: \"\\f214\";\n@fa-var-shopping-bag: \"\\f290\";\n@fa-var-shopping-basket: \"\\f291\";\n@fa-var-shopping-cart: \"\\f07a\";\n@fa-var-shower: \"\\f2cc\";\n@fa-var-sign-in: \"\\f090\";\n@fa-var-sign-language: \"\\f2a7\";\n@fa-var-sign-out: \"\\f08b\";\n@fa-var-signal: \"\\f012\";\n@fa-var-signing: \"\\f2a7\";\n@fa-var-simplybuilt: \"\\f215\";\n@fa-var-sitemap: \"\\f0e8\";\n@fa-var-skyatlas: \"\\f216\";\n@fa-var-skype: \"\\f17e\";\n@fa-var-slack: \"\\f198\";\n@fa-var-sliders: \"\\f1de\";\n@fa-var-slideshare: \"\\f1e7\";\n@fa-var-smile-o: \"\\f118\";\n@fa-var-snapchat: \"\\f2ab\";\n@fa-var-snapchat-ghost: \"\\f2ac\";\n@fa-var-snapchat-square: \"\\f2ad\";\n@fa-var-snowflake-o: \"\\f2dc\";\n@fa-var-soccer-ball-o: \"\\f1e3\";\n@fa-var-sort: \"\\f0dc\";\n@fa-var-sort-alpha-asc: \"\\f15d\";\n@fa-var-sort-alpha-desc: \"\\f15e\";\n@fa-var-sort-amount-asc: \"\\f160\";\n@fa-var-sort-amount-desc: \"\\f161\";\n@fa-var-sort-asc: \"\\f0de\";\n@fa-var-sort-desc: \"\\f0dd\";\n@fa-var-sort-down: \"\\f0dd\";\n@fa-var-sort-numeric-asc: \"\\f162\";\n@fa-var-sort-numeric-desc: \"\\f163\";\n@fa-var-sort-up: \"\\f0de\";\n@fa-var-soundcloud: \"\\f1be\";\n@fa-var-space-shuttle: \"\\f197\";\n@fa-var-spinner: \"\\f110\";\n@fa-var-spoon: \"\\f1b1\";\n@fa-var-spotify: \"\\f1bc\";\n@fa-var-square: \"\\f0c8\";\n@fa-var-square-o: \"\\f096\";\n@fa-var-stack-exchange: \"\\f18d\";\n@fa-var-stack-overflow: \"\\f16c\";\n@fa-var-star: \"\\f005\";\n@fa-var-star-half: \"\\f089\";\n@fa-var-star-half-empty: \"\\f123\";\n@fa-var-star-half-full: \"\\f123\";\n@fa-var-star-half-o: \"\\f123\";\n@fa-var-star-o: \"\\f006\";\n@fa-var-steam: \"\\f1b6\";\n@fa-var-steam-square: \"\\f1b7\";\n@fa-var-step-backward: \"\\f048\";\n@fa-var-step-forward: \"\\f051\";\n@fa-var-stethoscope: \"\\f0f1\";\n@fa-var-sticky-note: \"\\f249\";\n@fa-var-sticky-note-o: \"\\f24a\";\n@fa-var-stop: \"\\f04d\";\n@fa-var-stop-circle: \"\\f28d\";\n@fa-var-stop-circle-o: \"\\f28e\";\n@fa-var-street-view: \"\\f21d\";\n@fa-var-strikethrough: \"\\f0cc\";\n@fa-var-stumbleupon: \"\\f1a4\";\n@fa-var-stumbleupon-circle: \"\\f1a3\";\n@fa-var-subscript: \"\\f12c\";\n@fa-var-subway: \"\\f239\";\n@fa-var-suitcase: \"\\f0f2\";\n@fa-var-sun-o: \"\\f185\";\n@fa-var-superpowers: \"\\f2dd\";\n@fa-var-superscript: \"\\f12b\";\n@fa-var-support: \"\\f1cd\";\n@fa-var-table: \"\\f0ce\";\n@fa-var-tablet: \"\\f10a\";\n@fa-var-tachometer: \"\\f0e4\";\n@fa-var-tag: \"\\f02b\";\n@fa-var-tags: \"\\f02c\";\n@fa-var-tasks: \"\\f0ae\";\n@fa-var-taxi: \"\\f1ba\";\n@fa-var-telegram: \"\\f2c6\";\n@fa-var-television: \"\\f26c\";\n@fa-var-tencent-weibo: \"\\f1d5\";\n@fa-var-terminal: \"\\f120\";\n@fa-var-text-height: \"\\f034\";\n@fa-var-text-width: \"\\f035\";\n@fa-var-th: \"\\f00a\";\n@fa-var-th-large: \"\\f009\";\n@fa-var-th-list: \"\\f00b\";\n@fa-var-themeisle: \"\\f2b2\";\n@fa-var-thermometer: \"\\f2c7\";\n@fa-var-thermometer-0: \"\\f2cb\";\n@fa-var-thermometer-1: \"\\f2ca\";\n@fa-var-thermometer-2: \"\\f2c9\";\n@fa-var-thermometer-3: \"\\f2c8\";\n@fa-var-thermometer-4: \"\\f2c7\";\n@fa-var-thermometer-empty: \"\\f2cb\";\n@fa-var-thermometer-full: \"\\f2c7\";\n@fa-var-thermometer-half: \"\\f2c9\";\n@fa-var-thermometer-quarter: \"\\f2ca\";\n@fa-var-thermometer-three-quarters: \"\\f2c8\";\n@fa-var-thumb-tack: \"\\f08d\";\n@fa-var-thumbs-down: \"\\f165\";\n@fa-var-thumbs-o-down: \"\\f088\";\n@fa-var-thumbs-o-up: \"\\f087\";\n@fa-var-thumbs-up: \"\\f164\";\n@fa-var-ticket: \"\\f145\";\n@fa-var-times: \"\\f00d\";\n@fa-var-times-circle: \"\\f057\";\n@fa-var-times-circle-o: \"\\f05c\";\n@fa-var-times-rectangle: \"\\f2d3\";\n@fa-var-times-rectangle-o: \"\\f2d4\";\n@fa-var-tint: \"\\f043\";\n@fa-var-toggle-down: \"\\f150\";\n@fa-var-toggle-left: \"\\f191\";\n@fa-var-toggle-off: \"\\f204\";\n@fa-var-toggle-on: \"\\f205\";\n@fa-var-toggle-right: \"\\f152\";\n@fa-var-toggle-up: \"\\f151\";\n@fa-var-trademark: \"\\f25c\";\n@fa-var-train: \"\\f238\";\n@fa-var-transgender: \"\\f224\";\n@fa-var-transgender-alt: \"\\f225\";\n@fa-var-trash: \"\\f1f8\";\n@fa-var-trash-o: \"\\f014\";\n@fa-var-tree: \"\\f1bb\";\n@fa-var-trello: \"\\f181\";\n@fa-var-tripadvisor: \"\\f262\";\n@fa-var-trophy: \"\\f091\";\n@fa-var-truck: \"\\f0d1\";\n@fa-var-try: \"\\f195\";\n@fa-var-tty: \"\\f1e4\";\n@fa-var-tumblr: \"\\f173\";\n@fa-var-tumblr-square: \"\\f174\";\n@fa-var-turkish-lira: \"\\f195\";\n@fa-var-tv: \"\\f26c\";\n@fa-var-twitch: \"\\f1e8\";\n@fa-var-twitter: \"\\f099\";\n@fa-var-twitter-square: \"\\f081\";\n@fa-var-umbrella: \"\\f0e9\";\n@fa-var-underline: \"\\f0cd\";\n@fa-var-undo: \"\\f0e2\";\n@fa-var-universal-access: \"\\f29a\";\n@fa-var-university: \"\\f19c\";\n@fa-var-unlink: \"\\f127\";\n@fa-var-unlock: \"\\f09c\";\n@fa-var-unlock-alt: \"\\f13e\";\n@fa-var-unsorted: \"\\f0dc\";\n@fa-var-upload: \"\\f093\";\n@fa-var-usb: \"\\f287\";\n@fa-var-usd: \"\\f155\";\n@fa-var-user: \"\\f007\";\n@fa-var-user-circle: \"\\f2bd\";\n@fa-var-user-circle-o: \"\\f2be\";\n@fa-var-user-md: \"\\f0f0\";\n@fa-var-user-o: \"\\f2c0\";\n@fa-var-user-plus: \"\\f234\";\n@fa-var-user-secret: \"\\f21b\";\n@fa-var-user-times: \"\\f235\";\n@fa-var-users: \"\\f0c0\";\n@fa-var-vcard: \"\\f2bb\";\n@fa-var-vcard-o: \"\\f2bc\";\n@fa-var-venus: \"\\f221\";\n@fa-var-venus-double: \"\\f226\";\n@fa-var-venus-mars: \"\\f228\";\n@fa-var-viacoin: \"\\f237\";\n@fa-var-viadeo: \"\\f2a9\";\n@fa-var-viadeo-square: \"\\f2aa\";\n@fa-var-video-camera: \"\\f03d\";\n@fa-var-vimeo: \"\\f27d\";\n@fa-var-vimeo-square: \"\\f194\";\n@fa-var-vine: \"\\f1ca\";\n@fa-var-vk: \"\\f189\";\n@fa-var-volume-control-phone: \"\\f2a0\";\n@fa-var-volume-down: \"\\f027\";\n@fa-var-volume-off: \"\\f026\";\n@fa-var-volume-up: \"\\f028\";\n@fa-var-warning: \"\\f071\";\n@fa-var-wechat: \"\\f1d7\";\n@fa-var-weibo: \"\\f18a\";\n@fa-var-weixin: \"\\f1d7\";\n@fa-var-whatsapp: \"\\f232\";\n@fa-var-wheelchair: \"\\f193\";\n@fa-var-wheelchair-alt: \"\\f29b\";\n@fa-var-wifi: \"\\f1eb\";\n@fa-var-wikipedia-w: \"\\f266\";\n@fa-var-window-close: \"\\f2d3\";\n@fa-var-window-close-o: \"\\f2d4\";\n@fa-var-window-maximize: \"\\f2d0\";\n@fa-var-window-minimize: \"\\f2d1\";\n@fa-var-window-restore: \"\\f2d2\";\n@fa-var-windows: \"\\f17a\";\n@fa-var-won: \"\\f159\";\n@fa-var-wordpress: \"\\f19a\";\n@fa-var-wpbeginner: \"\\f297\";\n@fa-var-wpexplorer: \"\\f2de\";\n@fa-var-wpforms: \"\\f298\";\n@fa-var-wrench: \"\\f0ad\";\n@fa-var-xing: \"\\f168\";\n@fa-var-xing-square: \"\\f169\";\n@fa-var-y-combinator: \"\\f23b\";\n@fa-var-y-combinator-square: \"\\f1d4\";\n@fa-var-yahoo: \"\\f19e\";\n@fa-var-yc: \"\\f23b\";\n@fa-var-yc-square: \"\\f1d4\";\n@fa-var-yelp: \"\\f1e9\";\n@fa-var-yen: \"\\f157\";\n@fa-var-yoast: \"\\f2b1\";\n@fa-var-youtube: \"\\f167\";\n@fa-var-youtube-play: \"\\f16a\";\n@fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_animated.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_core.scss",
    "content": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-resistance:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }\n.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }\n.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }\n.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }\n.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }\n.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }\n.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }\n.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }\n.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }\n.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }\n.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }\n.#{$fa-css-prefix}-asl-interpreting:before,\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }\n.#{$fa-css-prefix}-deafness:before,\n.#{$fa-css-prefix}-hard-of-hearing:before,\n.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }\n.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }\n.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }\n.#{$fa-css-prefix}-signing:before,\n.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }\n.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }\n.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }\n.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }\n.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }\n.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }\n.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }\n.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }\n.#{$fa-css-prefix}-google-plus-circle:before,\n.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }\n.#{$fa-css-prefix}-fa:before,\n.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }\n.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }\n.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }\n.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }\n.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }\n.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }\n.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }\n.#{$fa-css-prefix}-vcard:before,\n.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }\n.#{$fa-css-prefix}-vcard-o:before,\n.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }\n.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }\n.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }\n.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }\n.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }\n.#{$fa-css-prefix}-drivers-license:before,\n.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }\n.#{$fa-css-prefix}-drivers-license-o:before,\n.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }\n.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }\n.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }\n.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }\n.#{$fa-css-prefix}-thermometer-4:before,\n.#{$fa-css-prefix}-thermometer:before,\n.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }\n.#{$fa-css-prefix}-thermometer-3:before,\n.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }\n.#{$fa-css-prefix}-thermometer-2:before,\n.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }\n.#{$fa-css-prefix}-thermometer-1:before,\n.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }\n.#{$fa-css-prefix}-thermometer-0:before,\n.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }\n.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }\n.#{$fa-css-prefix}-bathtub:before,\n.#{$fa-css-prefix}-s15:before,\n.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }\n.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }\n.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }\n.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }\n.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }\n.#{$fa-css-prefix}-times-rectangle:before,\n.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }\n.#{$fa-css-prefix}-times-rectangle-o:before,\n.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }\n.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }\n.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }\n.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }\n.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }\n.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }\n.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }\n.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }\n.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }\n.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }\n.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }\n.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})\";\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)\";\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_screen-reader.scss",
    "content": "// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-focusable(); }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$fa-font-path:        \"../fonts\" !default;\n$fa-font-size-base:   14px !default;\n$fa-line-height-base: 1 !default;\n//$fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts\" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix:       fa !default;\n$fa-version:          \"4.7.0\" !default;\n$fa-border-color:     #eee !default;\n$fa-inverse:          #fff !default;\n$fa-li-width:         (30em / 14) !default;\n\n$fa-var-500px: \"\\f26e\";\n$fa-var-address-book: \"\\f2b9\";\n$fa-var-address-book-o: \"\\f2ba\";\n$fa-var-address-card: \"\\f2bb\";\n$fa-var-address-card-o: \"\\f2bc\";\n$fa-var-adjust: \"\\f042\";\n$fa-var-adn: \"\\f170\";\n$fa-var-align-center: \"\\f037\";\n$fa-var-align-justify: \"\\f039\";\n$fa-var-align-left: \"\\f036\";\n$fa-var-align-right: \"\\f038\";\n$fa-var-amazon: \"\\f270\";\n$fa-var-ambulance: \"\\f0f9\";\n$fa-var-american-sign-language-interpreting: \"\\f2a3\";\n$fa-var-anchor: \"\\f13d\";\n$fa-var-android: \"\\f17b\";\n$fa-var-angellist: \"\\f209\";\n$fa-var-angle-double-down: \"\\f103\";\n$fa-var-angle-double-left: \"\\f100\";\n$fa-var-angle-double-right: \"\\f101\";\n$fa-var-angle-double-up: \"\\f102\";\n$fa-var-angle-down: \"\\f107\";\n$fa-var-angle-left: \"\\f104\";\n$fa-var-angle-right: \"\\f105\";\n$fa-var-angle-up: \"\\f106\";\n$fa-var-apple: \"\\f179\";\n$fa-var-archive: \"\\f187\";\n$fa-var-area-chart: \"\\f1fe\";\n$fa-var-arrow-circle-down: \"\\f0ab\";\n$fa-var-arrow-circle-left: \"\\f0a8\";\n$fa-var-arrow-circle-o-down: \"\\f01a\";\n$fa-var-arrow-circle-o-left: \"\\f190\";\n$fa-var-arrow-circle-o-right: \"\\f18e\";\n$fa-var-arrow-circle-o-up: \"\\f01b\";\n$fa-var-arrow-circle-right: \"\\f0a9\";\n$fa-var-arrow-circle-up: \"\\f0aa\";\n$fa-var-arrow-down: \"\\f063\";\n$fa-var-arrow-left: \"\\f060\";\n$fa-var-arrow-right: \"\\f061\";\n$fa-var-arrow-up: \"\\f062\";\n$fa-var-arrows: \"\\f047\";\n$fa-var-arrows-alt: \"\\f0b2\";\n$fa-var-arrows-h: \"\\f07e\";\n$fa-var-arrows-v: \"\\f07d\";\n$fa-var-asl-interpreting: \"\\f2a3\";\n$fa-var-assistive-listening-systems: \"\\f2a2\";\n$fa-var-asterisk: \"\\f069\";\n$fa-var-at: \"\\f1fa\";\n$fa-var-audio-description: \"\\f29e\";\n$fa-var-automobile: \"\\f1b9\";\n$fa-var-backward: \"\\f04a\";\n$fa-var-balance-scale: \"\\f24e\";\n$fa-var-ban: \"\\f05e\";\n$fa-var-bandcamp: \"\\f2d5\";\n$fa-var-bank: \"\\f19c\";\n$fa-var-bar-chart: \"\\f080\";\n$fa-var-bar-chart-o: \"\\f080\";\n$fa-var-barcode: \"\\f02a\";\n$fa-var-bars: \"\\f0c9\";\n$fa-var-bath: \"\\f2cd\";\n$fa-var-bathtub: \"\\f2cd\";\n$fa-var-battery: \"\\f240\";\n$fa-var-battery-0: \"\\f244\";\n$fa-var-battery-1: \"\\f243\";\n$fa-var-battery-2: \"\\f242\";\n$fa-var-battery-3: \"\\f241\";\n$fa-var-battery-4: \"\\f240\";\n$fa-var-battery-empty: \"\\f244\";\n$fa-var-battery-full: \"\\f240\";\n$fa-var-battery-half: \"\\f242\";\n$fa-var-battery-quarter: \"\\f243\";\n$fa-var-battery-three-quarters: \"\\f241\";\n$fa-var-bed: \"\\f236\";\n$fa-var-beer: \"\\f0fc\";\n$fa-var-behance: \"\\f1b4\";\n$fa-var-behance-square: \"\\f1b5\";\n$fa-var-bell: \"\\f0f3\";\n$fa-var-bell-o: \"\\f0a2\";\n$fa-var-bell-slash: \"\\f1f6\";\n$fa-var-bell-slash-o: \"\\f1f7\";\n$fa-var-bicycle: \"\\f206\";\n$fa-var-binoculars: \"\\f1e5\";\n$fa-var-birthday-cake: \"\\f1fd\";\n$fa-var-bitbucket: \"\\f171\";\n$fa-var-bitbucket-square: \"\\f172\";\n$fa-var-bitcoin: \"\\f15a\";\n$fa-var-black-tie: \"\\f27e\";\n$fa-var-blind: \"\\f29d\";\n$fa-var-bluetooth: \"\\f293\";\n$fa-var-bluetooth-b: \"\\f294\";\n$fa-var-bold: \"\\f032\";\n$fa-var-bolt: \"\\f0e7\";\n$fa-var-bomb: \"\\f1e2\";\n$fa-var-book: \"\\f02d\";\n$fa-var-bookmark: \"\\f02e\";\n$fa-var-bookmark-o: \"\\f097\";\n$fa-var-braille: \"\\f2a1\";\n$fa-var-briefcase: \"\\f0b1\";\n$fa-var-btc: \"\\f15a\";\n$fa-var-bug: \"\\f188\";\n$fa-var-building: \"\\f1ad\";\n$fa-var-building-o: \"\\f0f7\";\n$fa-var-bullhorn: \"\\f0a1\";\n$fa-var-bullseye: \"\\f140\";\n$fa-var-bus: \"\\f207\";\n$fa-var-buysellads: \"\\f20d\";\n$fa-var-cab: \"\\f1ba\";\n$fa-var-calculator: \"\\f1ec\";\n$fa-var-calendar: \"\\f073\";\n$fa-var-calendar-check-o: \"\\f274\";\n$fa-var-calendar-minus-o: \"\\f272\";\n$fa-var-calendar-o: \"\\f133\";\n$fa-var-calendar-plus-o: \"\\f271\";\n$fa-var-calendar-times-o: \"\\f273\";\n$fa-var-camera: \"\\f030\";\n$fa-var-camera-retro: \"\\f083\";\n$fa-var-car: \"\\f1b9\";\n$fa-var-caret-down: \"\\f0d7\";\n$fa-var-caret-left: \"\\f0d9\";\n$fa-var-caret-right: \"\\f0da\";\n$fa-var-caret-square-o-down: \"\\f150\";\n$fa-var-caret-square-o-left: \"\\f191\";\n$fa-var-caret-square-o-right: \"\\f152\";\n$fa-var-caret-square-o-up: \"\\f151\";\n$fa-var-caret-up: \"\\f0d8\";\n$fa-var-cart-arrow-down: \"\\f218\";\n$fa-var-cart-plus: \"\\f217\";\n$fa-var-cc: \"\\f20a\";\n$fa-var-cc-amex: \"\\f1f3\";\n$fa-var-cc-diners-club: \"\\f24c\";\n$fa-var-cc-discover: \"\\f1f2\";\n$fa-var-cc-jcb: \"\\f24b\";\n$fa-var-cc-mastercard: \"\\f1f1\";\n$fa-var-cc-paypal: \"\\f1f4\";\n$fa-var-cc-stripe: \"\\f1f5\";\n$fa-var-cc-visa: \"\\f1f0\";\n$fa-var-certificate: \"\\f0a3\";\n$fa-var-chain: \"\\f0c1\";\n$fa-var-chain-broken: \"\\f127\";\n$fa-var-check: \"\\f00c\";\n$fa-var-check-circle: \"\\f058\";\n$fa-var-check-circle-o: \"\\f05d\";\n$fa-var-check-square: \"\\f14a\";\n$fa-var-check-square-o: \"\\f046\";\n$fa-var-chevron-circle-down: \"\\f13a\";\n$fa-var-chevron-circle-left: \"\\f137\";\n$fa-var-chevron-circle-right: \"\\f138\";\n$fa-var-chevron-circle-up: \"\\f139\";\n$fa-var-chevron-down: \"\\f078\";\n$fa-var-chevron-left: \"\\f053\";\n$fa-var-chevron-right: \"\\f054\";\n$fa-var-chevron-up: \"\\f077\";\n$fa-var-child: \"\\f1ae\";\n$fa-var-chrome: \"\\f268\";\n$fa-var-circle: \"\\f111\";\n$fa-var-circle-o: \"\\f10c\";\n$fa-var-circle-o-notch: \"\\f1ce\";\n$fa-var-circle-thin: \"\\f1db\";\n$fa-var-clipboard: \"\\f0ea\";\n$fa-var-clock-o: \"\\f017\";\n$fa-var-clone: \"\\f24d\";\n$fa-var-close: \"\\f00d\";\n$fa-var-cloud: \"\\f0c2\";\n$fa-var-cloud-download: \"\\f0ed\";\n$fa-var-cloud-upload: \"\\f0ee\";\n$fa-var-cny: \"\\f157\";\n$fa-var-code: \"\\f121\";\n$fa-var-code-fork: \"\\f126\";\n$fa-var-codepen: \"\\f1cb\";\n$fa-var-codiepie: \"\\f284\";\n$fa-var-coffee: \"\\f0f4\";\n$fa-var-cog: \"\\f013\";\n$fa-var-cogs: \"\\f085\";\n$fa-var-columns: \"\\f0db\";\n$fa-var-comment: \"\\f075\";\n$fa-var-comment-o: \"\\f0e5\";\n$fa-var-commenting: \"\\f27a\";\n$fa-var-commenting-o: \"\\f27b\";\n$fa-var-comments: \"\\f086\";\n$fa-var-comments-o: \"\\f0e6\";\n$fa-var-compass: \"\\f14e\";\n$fa-var-compress: \"\\f066\";\n$fa-var-connectdevelop: \"\\f20e\";\n$fa-var-contao: \"\\f26d\";\n$fa-var-copy: \"\\f0c5\";\n$fa-var-copyright: \"\\f1f9\";\n$fa-var-creative-commons: \"\\f25e\";\n$fa-var-credit-card: \"\\f09d\";\n$fa-var-credit-card-alt: \"\\f283\";\n$fa-var-crop: \"\\f125\";\n$fa-var-crosshairs: \"\\f05b\";\n$fa-var-css3: \"\\f13c\";\n$fa-var-cube: \"\\f1b2\";\n$fa-var-cubes: \"\\f1b3\";\n$fa-var-cut: \"\\f0c4\";\n$fa-var-cutlery: \"\\f0f5\";\n$fa-var-dashboard: \"\\f0e4\";\n$fa-var-dashcube: \"\\f210\";\n$fa-var-database: \"\\f1c0\";\n$fa-var-deaf: \"\\f2a4\";\n$fa-var-deafness: \"\\f2a4\";\n$fa-var-dedent: \"\\f03b\";\n$fa-var-delicious: \"\\f1a5\";\n$fa-var-desktop: \"\\f108\";\n$fa-var-deviantart: \"\\f1bd\";\n$fa-var-diamond: \"\\f219\";\n$fa-var-digg: \"\\f1a6\";\n$fa-var-dollar: \"\\f155\";\n$fa-var-dot-circle-o: \"\\f192\";\n$fa-var-download: \"\\f019\";\n$fa-var-dribbble: \"\\f17d\";\n$fa-var-drivers-license: \"\\f2c2\";\n$fa-var-drivers-license-o: \"\\f2c3\";\n$fa-var-dropbox: \"\\f16b\";\n$fa-var-drupal: \"\\f1a9\";\n$fa-var-edge: \"\\f282\";\n$fa-var-edit: \"\\f044\";\n$fa-var-eercast: \"\\f2da\";\n$fa-var-eject: \"\\f052\";\n$fa-var-ellipsis-h: \"\\f141\";\n$fa-var-ellipsis-v: \"\\f142\";\n$fa-var-empire: \"\\f1d1\";\n$fa-var-envelope: \"\\f0e0\";\n$fa-var-envelope-o: \"\\f003\";\n$fa-var-envelope-open: \"\\f2b6\";\n$fa-var-envelope-open-o: \"\\f2b7\";\n$fa-var-envelope-square: \"\\f199\";\n$fa-var-envira: \"\\f299\";\n$fa-var-eraser: \"\\f12d\";\n$fa-var-etsy: \"\\f2d7\";\n$fa-var-eur: \"\\f153\";\n$fa-var-euro: \"\\f153\";\n$fa-var-exchange: \"\\f0ec\";\n$fa-var-exclamation: \"\\f12a\";\n$fa-var-exclamation-circle: \"\\f06a\";\n$fa-var-exclamation-triangle: \"\\f071\";\n$fa-var-expand: \"\\f065\";\n$fa-var-expeditedssl: \"\\f23e\";\n$fa-var-external-link: \"\\f08e\";\n$fa-var-external-link-square: \"\\f14c\";\n$fa-var-eye: \"\\f06e\";\n$fa-var-eye-slash: \"\\f070\";\n$fa-var-eyedropper: \"\\f1fb\";\n$fa-var-fa: \"\\f2b4\";\n$fa-var-facebook: \"\\f09a\";\n$fa-var-facebook-f: \"\\f09a\";\n$fa-var-facebook-official: \"\\f230\";\n$fa-var-facebook-square: \"\\f082\";\n$fa-var-fast-backward: \"\\f049\";\n$fa-var-fast-forward: \"\\f050\";\n$fa-var-fax: \"\\f1ac\";\n$fa-var-feed: \"\\f09e\";\n$fa-var-female: \"\\f182\";\n$fa-var-fighter-jet: \"\\f0fb\";\n$fa-var-file: \"\\f15b\";\n$fa-var-file-archive-o: \"\\f1c6\";\n$fa-var-file-audio-o: \"\\f1c7\";\n$fa-var-file-code-o: \"\\f1c9\";\n$fa-var-file-excel-o: \"\\f1c3\";\n$fa-var-file-image-o: \"\\f1c5\";\n$fa-var-file-movie-o: \"\\f1c8\";\n$fa-var-file-o: \"\\f016\";\n$fa-var-file-pdf-o: \"\\f1c1\";\n$fa-var-file-photo-o: \"\\f1c5\";\n$fa-var-file-picture-o: \"\\f1c5\";\n$fa-var-file-powerpoint-o: \"\\f1c4\";\n$fa-var-file-sound-o: \"\\f1c7\";\n$fa-var-file-text: \"\\f15c\";\n$fa-var-file-text-o: \"\\f0f6\";\n$fa-var-file-video-o: \"\\f1c8\";\n$fa-var-file-word-o: \"\\f1c2\";\n$fa-var-file-zip-o: \"\\f1c6\";\n$fa-var-files-o: \"\\f0c5\";\n$fa-var-film: \"\\f008\";\n$fa-var-filter: \"\\f0b0\";\n$fa-var-fire: \"\\f06d\";\n$fa-var-fire-extinguisher: \"\\f134\";\n$fa-var-firefox: \"\\f269\";\n$fa-var-first-order: \"\\f2b0\";\n$fa-var-flag: \"\\f024\";\n$fa-var-flag-checkered: \"\\f11e\";\n$fa-var-flag-o: \"\\f11d\";\n$fa-var-flash: \"\\f0e7\";\n$fa-var-flask: \"\\f0c3\";\n$fa-var-flickr: \"\\f16e\";\n$fa-var-floppy-o: \"\\f0c7\";\n$fa-var-folder: \"\\f07b\";\n$fa-var-folder-o: \"\\f114\";\n$fa-var-folder-open: \"\\f07c\";\n$fa-var-folder-open-o: \"\\f115\";\n$fa-var-font: \"\\f031\";\n$fa-var-font-awesome: \"\\f2b4\";\n$fa-var-fonticons: \"\\f280\";\n$fa-var-fort-awesome: \"\\f286\";\n$fa-var-forumbee: \"\\f211\";\n$fa-var-forward: \"\\f04e\";\n$fa-var-foursquare: \"\\f180\";\n$fa-var-free-code-camp: \"\\f2c5\";\n$fa-var-frown-o: \"\\f119\";\n$fa-var-futbol-o: \"\\f1e3\";\n$fa-var-gamepad: \"\\f11b\";\n$fa-var-gavel: \"\\f0e3\";\n$fa-var-gbp: \"\\f154\";\n$fa-var-ge: \"\\f1d1\";\n$fa-var-gear: \"\\f013\";\n$fa-var-gears: \"\\f085\";\n$fa-var-genderless: \"\\f22d\";\n$fa-var-get-pocket: \"\\f265\";\n$fa-var-gg: \"\\f260\";\n$fa-var-gg-circle: \"\\f261\";\n$fa-var-gift: \"\\f06b\";\n$fa-var-git: \"\\f1d3\";\n$fa-var-git-square: \"\\f1d2\";\n$fa-var-github: \"\\f09b\";\n$fa-var-github-alt: \"\\f113\";\n$fa-var-github-square: \"\\f092\";\n$fa-var-gitlab: \"\\f296\";\n$fa-var-gittip: \"\\f184\";\n$fa-var-glass: \"\\f000\";\n$fa-var-glide: \"\\f2a5\";\n$fa-var-glide-g: \"\\f2a6\";\n$fa-var-globe: \"\\f0ac\";\n$fa-var-google: \"\\f1a0\";\n$fa-var-google-plus: \"\\f0d5\";\n$fa-var-google-plus-circle: \"\\f2b3\";\n$fa-var-google-plus-official: \"\\f2b3\";\n$fa-var-google-plus-square: \"\\f0d4\";\n$fa-var-google-wallet: \"\\f1ee\";\n$fa-var-graduation-cap: \"\\f19d\";\n$fa-var-gratipay: \"\\f184\";\n$fa-var-grav: \"\\f2d6\";\n$fa-var-group: \"\\f0c0\";\n$fa-var-h-square: \"\\f0fd\";\n$fa-var-hacker-news: \"\\f1d4\";\n$fa-var-hand-grab-o: \"\\f255\";\n$fa-var-hand-lizard-o: \"\\f258\";\n$fa-var-hand-o-down: \"\\f0a7\";\n$fa-var-hand-o-left: \"\\f0a5\";\n$fa-var-hand-o-right: \"\\f0a4\";\n$fa-var-hand-o-up: \"\\f0a6\";\n$fa-var-hand-paper-o: \"\\f256\";\n$fa-var-hand-peace-o: \"\\f25b\";\n$fa-var-hand-pointer-o: \"\\f25a\";\n$fa-var-hand-rock-o: \"\\f255\";\n$fa-var-hand-scissors-o: \"\\f257\";\n$fa-var-hand-spock-o: \"\\f259\";\n$fa-var-hand-stop-o: \"\\f256\";\n$fa-var-handshake-o: \"\\f2b5\";\n$fa-var-hard-of-hearing: \"\\f2a4\";\n$fa-var-hashtag: \"\\f292\";\n$fa-var-hdd-o: \"\\f0a0\";\n$fa-var-header: \"\\f1dc\";\n$fa-var-headphones: \"\\f025\";\n$fa-var-heart: \"\\f004\";\n$fa-var-heart-o: \"\\f08a\";\n$fa-var-heartbeat: \"\\f21e\";\n$fa-var-history: \"\\f1da\";\n$fa-var-home: \"\\f015\";\n$fa-var-hospital-o: \"\\f0f8\";\n$fa-var-hotel: \"\\f236\";\n$fa-var-hourglass: \"\\f254\";\n$fa-var-hourglass-1: \"\\f251\";\n$fa-var-hourglass-2: \"\\f252\";\n$fa-var-hourglass-3: \"\\f253\";\n$fa-var-hourglass-end: \"\\f253\";\n$fa-var-hourglass-half: \"\\f252\";\n$fa-var-hourglass-o: \"\\f250\";\n$fa-var-hourglass-start: \"\\f251\";\n$fa-var-houzz: \"\\f27c\";\n$fa-var-html5: \"\\f13b\";\n$fa-var-i-cursor: \"\\f246\";\n$fa-var-id-badge: \"\\f2c1\";\n$fa-var-id-card: \"\\f2c2\";\n$fa-var-id-card-o: \"\\f2c3\";\n$fa-var-ils: \"\\f20b\";\n$fa-var-image: \"\\f03e\";\n$fa-var-imdb: \"\\f2d8\";\n$fa-var-inbox: \"\\f01c\";\n$fa-var-indent: \"\\f03c\";\n$fa-var-industry: \"\\f275\";\n$fa-var-info: \"\\f129\";\n$fa-var-info-circle: \"\\f05a\";\n$fa-var-inr: \"\\f156\";\n$fa-var-instagram: \"\\f16d\";\n$fa-var-institution: \"\\f19c\";\n$fa-var-internet-explorer: \"\\f26b\";\n$fa-var-intersex: \"\\f224\";\n$fa-var-ioxhost: \"\\f208\";\n$fa-var-italic: \"\\f033\";\n$fa-var-joomla: \"\\f1aa\";\n$fa-var-jpy: \"\\f157\";\n$fa-var-jsfiddle: \"\\f1cc\";\n$fa-var-key: \"\\f084\";\n$fa-var-keyboard-o: \"\\f11c\";\n$fa-var-krw: \"\\f159\";\n$fa-var-language: \"\\f1ab\";\n$fa-var-laptop: \"\\f109\";\n$fa-var-lastfm: \"\\f202\";\n$fa-var-lastfm-square: \"\\f203\";\n$fa-var-leaf: \"\\f06c\";\n$fa-var-leanpub: \"\\f212\";\n$fa-var-legal: \"\\f0e3\";\n$fa-var-lemon-o: \"\\f094\";\n$fa-var-level-down: \"\\f149\";\n$fa-var-level-up: \"\\f148\";\n$fa-var-life-bouy: \"\\f1cd\";\n$fa-var-life-buoy: \"\\f1cd\";\n$fa-var-life-ring: \"\\f1cd\";\n$fa-var-life-saver: \"\\f1cd\";\n$fa-var-lightbulb-o: \"\\f0eb\";\n$fa-var-line-chart: \"\\f201\";\n$fa-var-link: \"\\f0c1\";\n$fa-var-linkedin: \"\\f0e1\";\n$fa-var-linkedin-square: \"\\f08c\";\n$fa-var-linode: \"\\f2b8\";\n$fa-var-linux: \"\\f17c\";\n$fa-var-list: \"\\f03a\";\n$fa-var-list-alt: \"\\f022\";\n$fa-var-list-ol: \"\\f0cb\";\n$fa-var-list-ul: \"\\f0ca\";\n$fa-var-location-arrow: \"\\f124\";\n$fa-var-lock: \"\\f023\";\n$fa-var-long-arrow-down: \"\\f175\";\n$fa-var-long-arrow-left: \"\\f177\";\n$fa-var-long-arrow-right: \"\\f178\";\n$fa-var-long-arrow-up: \"\\f176\";\n$fa-var-low-vision: \"\\f2a8\";\n$fa-var-magic: \"\\f0d0\";\n$fa-var-magnet: \"\\f076\";\n$fa-var-mail-forward: \"\\f064\";\n$fa-var-mail-reply: \"\\f112\";\n$fa-var-mail-reply-all: \"\\f122\";\n$fa-var-male: \"\\f183\";\n$fa-var-map: \"\\f279\";\n$fa-var-map-marker: \"\\f041\";\n$fa-var-map-o: \"\\f278\";\n$fa-var-map-pin: \"\\f276\";\n$fa-var-map-signs: \"\\f277\";\n$fa-var-mars: \"\\f222\";\n$fa-var-mars-double: \"\\f227\";\n$fa-var-mars-stroke: \"\\f229\";\n$fa-var-mars-stroke-h: \"\\f22b\";\n$fa-var-mars-stroke-v: \"\\f22a\";\n$fa-var-maxcdn: \"\\f136\";\n$fa-var-meanpath: \"\\f20c\";\n$fa-var-medium: \"\\f23a\";\n$fa-var-medkit: \"\\f0fa\";\n$fa-var-meetup: \"\\f2e0\";\n$fa-var-meh-o: \"\\f11a\";\n$fa-var-mercury: \"\\f223\";\n$fa-var-microchip: \"\\f2db\";\n$fa-var-microphone: \"\\f130\";\n$fa-var-microphone-slash: \"\\f131\";\n$fa-var-minus: \"\\f068\";\n$fa-var-minus-circle: \"\\f056\";\n$fa-var-minus-square: \"\\f146\";\n$fa-var-minus-square-o: \"\\f147\";\n$fa-var-mixcloud: \"\\f289\";\n$fa-var-mobile: \"\\f10b\";\n$fa-var-mobile-phone: \"\\f10b\";\n$fa-var-modx: \"\\f285\";\n$fa-var-money: \"\\f0d6\";\n$fa-var-moon-o: \"\\f186\";\n$fa-var-mortar-board: \"\\f19d\";\n$fa-var-motorcycle: \"\\f21c\";\n$fa-var-mouse-pointer: \"\\f245\";\n$fa-var-music: \"\\f001\";\n$fa-var-navicon: \"\\f0c9\";\n$fa-var-neuter: \"\\f22c\";\n$fa-var-newspaper-o: \"\\f1ea\";\n$fa-var-object-group: \"\\f247\";\n$fa-var-object-ungroup: \"\\f248\";\n$fa-var-odnoklassniki: \"\\f263\";\n$fa-var-odnoklassniki-square: \"\\f264\";\n$fa-var-opencart: \"\\f23d\";\n$fa-var-openid: \"\\f19b\";\n$fa-var-opera: \"\\f26a\";\n$fa-var-optin-monster: \"\\f23c\";\n$fa-var-outdent: \"\\f03b\";\n$fa-var-pagelines: \"\\f18c\";\n$fa-var-paint-brush: \"\\f1fc\";\n$fa-var-paper-plane: \"\\f1d8\";\n$fa-var-paper-plane-o: \"\\f1d9\";\n$fa-var-paperclip: \"\\f0c6\";\n$fa-var-paragraph: \"\\f1dd\";\n$fa-var-paste: \"\\f0ea\";\n$fa-var-pause: \"\\f04c\";\n$fa-var-pause-circle: \"\\f28b\";\n$fa-var-pause-circle-o: \"\\f28c\";\n$fa-var-paw: \"\\f1b0\";\n$fa-var-paypal: \"\\f1ed\";\n$fa-var-pencil: \"\\f040\";\n$fa-var-pencil-square: \"\\f14b\";\n$fa-var-pencil-square-o: \"\\f044\";\n$fa-var-percent: \"\\f295\";\n$fa-var-phone: \"\\f095\";\n$fa-var-phone-square: \"\\f098\";\n$fa-var-photo: \"\\f03e\";\n$fa-var-picture-o: \"\\f03e\";\n$fa-var-pie-chart: \"\\f200\";\n$fa-var-pied-piper: \"\\f2ae\";\n$fa-var-pied-piper-alt: \"\\f1a8\";\n$fa-var-pied-piper-pp: \"\\f1a7\";\n$fa-var-pinterest: \"\\f0d2\";\n$fa-var-pinterest-p: \"\\f231\";\n$fa-var-pinterest-square: \"\\f0d3\";\n$fa-var-plane: \"\\f072\";\n$fa-var-play: \"\\f04b\";\n$fa-var-play-circle: \"\\f144\";\n$fa-var-play-circle-o: \"\\f01d\";\n$fa-var-plug: \"\\f1e6\";\n$fa-var-plus: \"\\f067\";\n$fa-var-plus-circle: \"\\f055\";\n$fa-var-plus-square: \"\\f0fe\";\n$fa-var-plus-square-o: \"\\f196\";\n$fa-var-podcast: \"\\f2ce\";\n$fa-var-power-off: \"\\f011\";\n$fa-var-print: \"\\f02f\";\n$fa-var-product-hunt: \"\\f288\";\n$fa-var-puzzle-piece: \"\\f12e\";\n$fa-var-qq: \"\\f1d6\";\n$fa-var-qrcode: \"\\f029\";\n$fa-var-question: \"\\f128\";\n$fa-var-question-circle: \"\\f059\";\n$fa-var-question-circle-o: \"\\f29c\";\n$fa-var-quora: \"\\f2c4\";\n$fa-var-quote-left: \"\\f10d\";\n$fa-var-quote-right: \"\\f10e\";\n$fa-var-ra: \"\\f1d0\";\n$fa-var-random: \"\\f074\";\n$fa-var-ravelry: \"\\f2d9\";\n$fa-var-rebel: \"\\f1d0\";\n$fa-var-recycle: \"\\f1b8\";\n$fa-var-reddit: \"\\f1a1\";\n$fa-var-reddit-alien: \"\\f281\";\n$fa-var-reddit-square: \"\\f1a2\";\n$fa-var-refresh: \"\\f021\";\n$fa-var-registered: \"\\f25d\";\n$fa-var-remove: \"\\f00d\";\n$fa-var-renren: \"\\f18b\";\n$fa-var-reorder: \"\\f0c9\";\n$fa-var-repeat: \"\\f01e\";\n$fa-var-reply: \"\\f112\";\n$fa-var-reply-all: \"\\f122\";\n$fa-var-resistance: \"\\f1d0\";\n$fa-var-retweet: \"\\f079\";\n$fa-var-rmb: \"\\f157\";\n$fa-var-road: \"\\f018\";\n$fa-var-rocket: \"\\f135\";\n$fa-var-rotate-left: \"\\f0e2\";\n$fa-var-rotate-right: \"\\f01e\";\n$fa-var-rouble: \"\\f158\";\n$fa-var-rss: \"\\f09e\";\n$fa-var-rss-square: \"\\f143\";\n$fa-var-rub: \"\\f158\";\n$fa-var-ruble: \"\\f158\";\n$fa-var-rupee: \"\\f156\";\n$fa-var-s15: \"\\f2cd\";\n$fa-var-safari: \"\\f267\";\n$fa-var-save: \"\\f0c7\";\n$fa-var-scissors: \"\\f0c4\";\n$fa-var-scribd: \"\\f28a\";\n$fa-var-search: \"\\f002\";\n$fa-var-search-minus: \"\\f010\";\n$fa-var-search-plus: \"\\f00e\";\n$fa-var-sellsy: \"\\f213\";\n$fa-var-send: \"\\f1d8\";\n$fa-var-send-o: \"\\f1d9\";\n$fa-var-server: \"\\f233\";\n$fa-var-share: \"\\f064\";\n$fa-var-share-alt: \"\\f1e0\";\n$fa-var-share-alt-square: \"\\f1e1\";\n$fa-var-share-square: \"\\f14d\";\n$fa-var-share-square-o: \"\\f045\";\n$fa-var-shekel: \"\\f20b\";\n$fa-var-sheqel: \"\\f20b\";\n$fa-var-shield: \"\\f132\";\n$fa-var-ship: \"\\f21a\";\n$fa-var-shirtsinbulk: \"\\f214\";\n$fa-var-shopping-bag: \"\\f290\";\n$fa-var-shopping-basket: \"\\f291\";\n$fa-var-shopping-cart: \"\\f07a\";\n$fa-var-shower: \"\\f2cc\";\n$fa-var-sign-in: \"\\f090\";\n$fa-var-sign-language: \"\\f2a7\";\n$fa-var-sign-out: \"\\f08b\";\n$fa-var-signal: \"\\f012\";\n$fa-var-signing: \"\\f2a7\";\n$fa-var-simplybuilt: \"\\f215\";\n$fa-var-sitemap: \"\\f0e8\";\n$fa-var-skyatlas: \"\\f216\";\n$fa-var-skype: \"\\f17e\";\n$fa-var-slack: \"\\f198\";\n$fa-var-sliders: \"\\f1de\";\n$fa-var-slideshare: \"\\f1e7\";\n$fa-var-smile-o: \"\\f118\";\n$fa-var-snapchat: \"\\f2ab\";\n$fa-var-snapchat-ghost: \"\\f2ac\";\n$fa-var-snapchat-square: \"\\f2ad\";\n$fa-var-snowflake-o: \"\\f2dc\";\n$fa-var-soccer-ball-o: \"\\f1e3\";\n$fa-var-sort: \"\\f0dc\";\n$fa-var-sort-alpha-asc: \"\\f15d\";\n$fa-var-sort-alpha-desc: \"\\f15e\";\n$fa-var-sort-amount-asc: \"\\f160\";\n$fa-var-sort-amount-desc: \"\\f161\";\n$fa-var-sort-asc: \"\\f0de\";\n$fa-var-sort-desc: \"\\f0dd\";\n$fa-var-sort-down: \"\\f0dd\";\n$fa-var-sort-numeric-asc: \"\\f162\";\n$fa-var-sort-numeric-desc: \"\\f163\";\n$fa-var-sort-up: \"\\f0de\";\n$fa-var-soundcloud: \"\\f1be\";\n$fa-var-space-shuttle: \"\\f197\";\n$fa-var-spinner: \"\\f110\";\n$fa-var-spoon: \"\\f1b1\";\n$fa-var-spotify: \"\\f1bc\";\n$fa-var-square: \"\\f0c8\";\n$fa-var-square-o: \"\\f096\";\n$fa-var-stack-exchange: \"\\f18d\";\n$fa-var-stack-overflow: \"\\f16c\";\n$fa-var-star: \"\\f005\";\n$fa-var-star-half: \"\\f089\";\n$fa-var-star-half-empty: \"\\f123\";\n$fa-var-star-half-full: \"\\f123\";\n$fa-var-star-half-o: \"\\f123\";\n$fa-var-star-o: \"\\f006\";\n$fa-var-steam: \"\\f1b6\";\n$fa-var-steam-square: \"\\f1b7\";\n$fa-var-step-backward: \"\\f048\";\n$fa-var-step-forward: \"\\f051\";\n$fa-var-stethoscope: \"\\f0f1\";\n$fa-var-sticky-note: \"\\f249\";\n$fa-var-sticky-note-o: \"\\f24a\";\n$fa-var-stop: \"\\f04d\";\n$fa-var-stop-circle: \"\\f28d\";\n$fa-var-stop-circle-o: \"\\f28e\";\n$fa-var-street-view: \"\\f21d\";\n$fa-var-strikethrough: \"\\f0cc\";\n$fa-var-stumbleupon: \"\\f1a4\";\n$fa-var-stumbleupon-circle: \"\\f1a3\";\n$fa-var-subscript: \"\\f12c\";\n$fa-var-subway: \"\\f239\";\n$fa-var-suitcase: \"\\f0f2\";\n$fa-var-sun-o: \"\\f185\";\n$fa-var-superpowers: \"\\f2dd\";\n$fa-var-superscript: \"\\f12b\";\n$fa-var-support: \"\\f1cd\";\n$fa-var-table: \"\\f0ce\";\n$fa-var-tablet: \"\\f10a\";\n$fa-var-tachometer: \"\\f0e4\";\n$fa-var-tag: \"\\f02b\";\n$fa-var-tags: \"\\f02c\";\n$fa-var-tasks: \"\\f0ae\";\n$fa-var-taxi: \"\\f1ba\";\n$fa-var-telegram: \"\\f2c6\";\n$fa-var-television: \"\\f26c\";\n$fa-var-tencent-weibo: \"\\f1d5\";\n$fa-var-terminal: \"\\f120\";\n$fa-var-text-height: \"\\f034\";\n$fa-var-text-width: \"\\f035\";\n$fa-var-th: \"\\f00a\";\n$fa-var-th-large: \"\\f009\";\n$fa-var-th-list: \"\\f00b\";\n$fa-var-themeisle: \"\\f2b2\";\n$fa-var-thermometer: \"\\f2c7\";\n$fa-var-thermometer-0: \"\\f2cb\";\n$fa-var-thermometer-1: \"\\f2ca\";\n$fa-var-thermometer-2: \"\\f2c9\";\n$fa-var-thermometer-3: \"\\f2c8\";\n$fa-var-thermometer-4: \"\\f2c7\";\n$fa-var-thermometer-empty: \"\\f2cb\";\n$fa-var-thermometer-full: \"\\f2c7\";\n$fa-var-thermometer-half: \"\\f2c9\";\n$fa-var-thermometer-quarter: \"\\f2ca\";\n$fa-var-thermometer-three-quarters: \"\\f2c8\";\n$fa-var-thumb-tack: \"\\f08d\";\n$fa-var-thumbs-down: \"\\f165\";\n$fa-var-thumbs-o-down: \"\\f088\";\n$fa-var-thumbs-o-up: \"\\f087\";\n$fa-var-thumbs-up: \"\\f164\";\n$fa-var-ticket: \"\\f145\";\n$fa-var-times: \"\\f00d\";\n$fa-var-times-circle: \"\\f057\";\n$fa-var-times-circle-o: \"\\f05c\";\n$fa-var-times-rectangle: \"\\f2d3\";\n$fa-var-times-rectangle-o: \"\\f2d4\";\n$fa-var-tint: \"\\f043\";\n$fa-var-toggle-down: \"\\f150\";\n$fa-var-toggle-left: \"\\f191\";\n$fa-var-toggle-off: \"\\f204\";\n$fa-var-toggle-on: \"\\f205\";\n$fa-var-toggle-right: \"\\f152\";\n$fa-var-toggle-up: \"\\f151\";\n$fa-var-trademark: \"\\f25c\";\n$fa-var-train: \"\\f238\";\n$fa-var-transgender: \"\\f224\";\n$fa-var-transgender-alt: \"\\f225\";\n$fa-var-trash: \"\\f1f8\";\n$fa-var-trash-o: \"\\f014\";\n$fa-var-tree: \"\\f1bb\";\n$fa-var-trello: \"\\f181\";\n$fa-var-tripadvisor: \"\\f262\";\n$fa-var-trophy: \"\\f091\";\n$fa-var-truck: \"\\f0d1\";\n$fa-var-try: \"\\f195\";\n$fa-var-tty: \"\\f1e4\";\n$fa-var-tumblr: \"\\f173\";\n$fa-var-tumblr-square: \"\\f174\";\n$fa-var-turkish-lira: \"\\f195\";\n$fa-var-tv: \"\\f26c\";\n$fa-var-twitch: \"\\f1e8\";\n$fa-var-twitter: \"\\f099\";\n$fa-var-twitter-square: \"\\f081\";\n$fa-var-umbrella: \"\\f0e9\";\n$fa-var-underline: \"\\f0cd\";\n$fa-var-undo: \"\\f0e2\";\n$fa-var-universal-access: \"\\f29a\";\n$fa-var-university: \"\\f19c\";\n$fa-var-unlink: \"\\f127\";\n$fa-var-unlock: \"\\f09c\";\n$fa-var-unlock-alt: \"\\f13e\";\n$fa-var-unsorted: \"\\f0dc\";\n$fa-var-upload: \"\\f093\";\n$fa-var-usb: \"\\f287\";\n$fa-var-usd: \"\\f155\";\n$fa-var-user: \"\\f007\";\n$fa-var-user-circle: \"\\f2bd\";\n$fa-var-user-circle-o: \"\\f2be\";\n$fa-var-user-md: \"\\f0f0\";\n$fa-var-user-o: \"\\f2c0\";\n$fa-var-user-plus: \"\\f234\";\n$fa-var-user-secret: \"\\f21b\";\n$fa-var-user-times: \"\\f235\";\n$fa-var-users: \"\\f0c0\";\n$fa-var-vcard: \"\\f2bb\";\n$fa-var-vcard-o: \"\\f2bc\";\n$fa-var-venus: \"\\f221\";\n$fa-var-venus-double: \"\\f226\";\n$fa-var-venus-mars: \"\\f228\";\n$fa-var-viacoin: \"\\f237\";\n$fa-var-viadeo: \"\\f2a9\";\n$fa-var-viadeo-square: \"\\f2aa\";\n$fa-var-video-camera: \"\\f03d\";\n$fa-var-vimeo: \"\\f27d\";\n$fa-var-vimeo-square: \"\\f194\";\n$fa-var-vine: \"\\f1ca\";\n$fa-var-vk: \"\\f189\";\n$fa-var-volume-control-phone: \"\\f2a0\";\n$fa-var-volume-down: \"\\f027\";\n$fa-var-volume-off: \"\\f026\";\n$fa-var-volume-up: \"\\f028\";\n$fa-var-warning: \"\\f071\";\n$fa-var-wechat: \"\\f1d7\";\n$fa-var-weibo: \"\\f18a\";\n$fa-var-weixin: \"\\f1d7\";\n$fa-var-whatsapp: \"\\f232\";\n$fa-var-wheelchair: \"\\f193\";\n$fa-var-wheelchair-alt: \"\\f29b\";\n$fa-var-wifi: \"\\f1eb\";\n$fa-var-wikipedia-w: \"\\f266\";\n$fa-var-window-close: \"\\f2d3\";\n$fa-var-window-close-o: \"\\f2d4\";\n$fa-var-window-maximize: \"\\f2d0\";\n$fa-var-window-minimize: \"\\f2d1\";\n$fa-var-window-restore: \"\\f2d2\";\n$fa-var-windows: \"\\f17a\";\n$fa-var-won: \"\\f159\";\n$fa-var-wordpress: \"\\f19a\";\n$fa-var-wpbeginner: \"\\f297\";\n$fa-var-wpexplorer: \"\\f2de\";\n$fa-var-wpforms: \"\\f298\";\n$fa-var-wrench: \"\\f0ad\";\n$fa-var-xing: \"\\f168\";\n$fa-var-xing-square: \"\\f169\";\n$fa-var-y-combinator: \"\\f23b\";\n$fa-var-y-combinator-square: \"\\f1d4\";\n$fa-var-yahoo: \"\\f19e\";\n$fa-var-yc: \"\\f23b\";\n$fa-var-yc-square: \"\\f1d4\";\n$fa-var-yelp: \"\\f1e9\";\n$fa-var-yen: \"\\f157\";\n$fa-var-yoast: \"\\f2b1\";\n$fa-var-youtube: \"\\f167\";\n$fa-var-youtube-play: \"\\f16a\";\n$fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/font-awesome/scss/font-awesome.scss",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"larger\";\n@import \"fixed-width\";\n@import \"list\";\n@import \"bordered-pulled\";\n@import \"animated\";\n@import \"rotated-flipped\";\n@import \"stacked\";\n@import \"icons\";\n@import \"screen-reader\";\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/css/_ionicons-variables.css",
    "content": "/*!\nIonicons, v1.5.0\nCreated by Ben Sperry for the Ionic Framework, http://ionicons.com/\nhttps://twitter.com/benjsperry  https://twitter.com/ionicframework\nMIT License: https://github.com/driftyco/ionicons\n*/\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/css/ionicons.css",
    "content": "/*!\nIonicons, v1.5.0\nCreated by Ben Sperry for the Ionic Framework, http://ionicons.com/\nhttps://twitter.com/benjsperry  https://twitter.com/ionicframework\nMIT License: https://github.com/driftyco/ionicons\n*/\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=1.5.0\");\n  src: url(\"../fonts/ionicons.eot?v=1.5.0#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=1.5.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=1.5.0\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=1.5.0#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n.ion,\n.ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading,\n.ionicons,\n.ion-alert,\n.ion-alert-circled,\n.ion-android-add,\n.ion-android-add-contact,\n.ion-android-alarm,\n.ion-android-archive,\n.ion-android-arrow-back,\n.ion-android-arrow-down-left,\n.ion-android-arrow-down-right,\n.ion-android-arrow-forward,\n.ion-android-arrow-up-left,\n.ion-android-arrow-up-right,\n.ion-android-battery,\n.ion-android-book,\n.ion-android-calendar,\n.ion-android-call,\n.ion-android-camera,\n.ion-android-chat,\n.ion-android-checkmark,\n.ion-android-clock,\n.ion-android-close,\n.ion-android-contact,\n.ion-android-contacts,\n.ion-android-data,\n.ion-android-developer,\n.ion-android-display,\n.ion-android-download,\n.ion-android-drawer,\n.ion-android-dropdown,\n.ion-android-earth,\n.ion-android-folder,\n.ion-android-forums,\n.ion-android-friends,\n.ion-android-hand,\n.ion-android-image,\n.ion-android-inbox,\n.ion-android-information,\n.ion-android-keypad,\n.ion-android-lightbulb,\n.ion-android-locate,\n.ion-android-location,\n.ion-android-mail,\n.ion-android-microphone,\n.ion-android-mixer,\n.ion-android-more,\n.ion-android-note,\n.ion-android-playstore,\n.ion-android-printer,\n.ion-android-promotion,\n.ion-android-reminder,\n.ion-android-remove,\n.ion-android-search,\n.ion-android-send,\n.ion-android-settings,\n.ion-android-share,\n.ion-android-social,\n.ion-android-social-user,\n.ion-android-sort,\n.ion-android-stair-drawer,\n.ion-android-star,\n.ion-android-stopwatch,\n.ion-android-storage,\n.ion-android-system-back,\n.ion-android-system-home,\n.ion-android-system-windows,\n.ion-android-timer,\n.ion-android-trash,\n.ion-android-user-menu,\n.ion-android-volume,\n.ion-android-wifi,\n.ion-aperture,\n.ion-archive,\n.ion-arrow-down-a,\n.ion-arrow-down-b,\n.ion-arrow-down-c,\n.ion-arrow-expand,\n.ion-arrow-graph-down-left,\n.ion-arrow-graph-down-right,\n.ion-arrow-graph-up-left,\n.ion-arrow-graph-up-right,\n.ion-arrow-left-a,\n.ion-arrow-left-b,\n.ion-arrow-left-c,\n.ion-arrow-move,\n.ion-arrow-resize,\n.ion-arrow-return-left,\n.ion-arrow-return-right,\n.ion-arrow-right-a,\n.ion-arrow-right-b,\n.ion-arrow-right-c,\n.ion-arrow-shrink,\n.ion-arrow-swap,\n.ion-arrow-up-a,\n.ion-arrow-up-b,\n.ion-arrow-up-c,\n.ion-asterisk,\n.ion-at,\n.ion-bag,\n.ion-battery-charging,\n.ion-battery-empty,\n.ion-battery-full,\n.ion-battery-half,\n.ion-battery-low,\n.ion-beaker,\n.ion-beer,\n.ion-bluetooth,\n.ion-bonfire,\n.ion-bookmark,\n.ion-briefcase,\n.ion-bug,\n.ion-calculator,\n.ion-calendar,\n.ion-camera,\n.ion-card,\n.ion-cash,\n.ion-chatbox,\n.ion-chatbox-working,\n.ion-chatboxes,\n.ion-chatbubble,\n.ion-chatbubble-working,\n.ion-chatbubbles,\n.ion-checkmark,\n.ion-checkmark-circled,\n.ion-checkmark-round,\n.ion-chevron-down,\n.ion-chevron-left,\n.ion-chevron-right,\n.ion-chevron-up,\n.ion-clipboard,\n.ion-clock,\n.ion-close,\n.ion-close-circled,\n.ion-close-round,\n.ion-closed-captioning,\n.ion-cloud,\n.ion-code,\n.ion-code-download,\n.ion-code-working,\n.ion-coffee,\n.ion-compass,\n.ion-compose,\n.ion-connection-bars,\n.ion-contrast,\n.ion-cube,\n.ion-disc,\n.ion-document,\n.ion-document-text,\n.ion-drag,\n.ion-earth,\n.ion-edit,\n.ion-egg,\n.ion-eject,\n.ion-email,\n.ion-eye,\n.ion-eye-disabled,\n.ion-female,\n.ion-filing,\n.ion-film-marker,\n.ion-fireball,\n.ion-flag,\n.ion-flame,\n.ion-flash,\n.ion-flash-off,\n.ion-flask,\n.ion-folder,\n.ion-fork,\n.ion-fork-repo,\n.ion-forward,\n.ion-funnel,\n.ion-game-controller-a,\n.ion-game-controller-b,\n.ion-gear-a,\n.ion-gear-b,\n.ion-grid,\n.ion-hammer,\n.ion-happy,\n.ion-headphone,\n.ion-heart,\n.ion-heart-broken,\n.ion-help,\n.ion-help-buoy,\n.ion-help-circled,\n.ion-home,\n.ion-icecream,\n.ion-icon-social-google-plus,\n.ion-icon-social-google-plus-outline,\n.ion-image,\n.ion-images,\n.ion-information,\n.ion-information-circled,\n.ion-ionic,\n.ion-ios7-alarm,\n.ion-ios7-alarm-outline,\n.ion-ios7-albums,\n.ion-ios7-albums-outline,\n.ion-ios7-americanfootball,\n.ion-ios7-americanfootball-outline,\n.ion-ios7-analytics,\n.ion-ios7-analytics-outline,\n.ion-ios7-arrow-back,\n.ion-ios7-arrow-down,\n.ion-ios7-arrow-forward,\n.ion-ios7-arrow-left,\n.ion-ios7-arrow-right,\n.ion-ios7-arrow-thin-down,\n.ion-ios7-arrow-thin-left,\n.ion-ios7-arrow-thin-right,\n.ion-ios7-arrow-thin-up,\n.ion-ios7-arrow-up,\n.ion-ios7-at,\n.ion-ios7-at-outline,\n.ion-ios7-barcode,\n.ion-ios7-barcode-outline,\n.ion-ios7-baseball,\n.ion-ios7-baseball-outline,\n.ion-ios7-basketball,\n.ion-ios7-basketball-outline,\n.ion-ios7-bell,\n.ion-ios7-bell-outline,\n.ion-ios7-bolt,\n.ion-ios7-bolt-outline,\n.ion-ios7-bookmarks,\n.ion-ios7-bookmarks-outline,\n.ion-ios7-box,\n.ion-ios7-box-outline,\n.ion-ios7-briefcase,\n.ion-ios7-briefcase-outline,\n.ion-ios7-browsers,\n.ion-ios7-browsers-outline,\n.ion-ios7-calculator,\n.ion-ios7-calculator-outline,\n.ion-ios7-calendar,\n.ion-ios7-calendar-outline,\n.ion-ios7-camera,\n.ion-ios7-camera-outline,\n.ion-ios7-cart,\n.ion-ios7-cart-outline,\n.ion-ios7-chatboxes,\n.ion-ios7-chatboxes-outline,\n.ion-ios7-chatbubble,\n.ion-ios7-chatbubble-outline,\n.ion-ios7-checkmark,\n.ion-ios7-checkmark-empty,\n.ion-ios7-checkmark-outline,\n.ion-ios7-circle-filled,\n.ion-ios7-circle-outline,\n.ion-ios7-clock,\n.ion-ios7-clock-outline,\n.ion-ios7-close,\n.ion-ios7-close-empty,\n.ion-ios7-close-outline,\n.ion-ios7-cloud,\n.ion-ios7-cloud-download,\n.ion-ios7-cloud-download-outline,\n.ion-ios7-cloud-outline,\n.ion-ios7-cloud-upload,\n.ion-ios7-cloud-upload-outline,\n.ion-ios7-cloudy,\n.ion-ios7-cloudy-night,\n.ion-ios7-cloudy-night-outline,\n.ion-ios7-cloudy-outline,\n.ion-ios7-cog,\n.ion-ios7-cog-outline,\n.ion-ios7-compose,\n.ion-ios7-compose-outline,\n.ion-ios7-contact,\n.ion-ios7-contact-outline,\n.ion-ios7-copy,\n.ion-ios7-copy-outline,\n.ion-ios7-download,\n.ion-ios7-download-outline,\n.ion-ios7-drag,\n.ion-ios7-email,\n.ion-ios7-email-outline,\n.ion-ios7-expand,\n.ion-ios7-eye,\n.ion-ios7-eye-outline,\n.ion-ios7-fastforward,\n.ion-ios7-fastforward-outline,\n.ion-ios7-filing,\n.ion-ios7-filing-outline,\n.ion-ios7-film,\n.ion-ios7-film-outline,\n.ion-ios7-flag,\n.ion-ios7-flag-outline,\n.ion-ios7-folder,\n.ion-ios7-folder-outline,\n.ion-ios7-football,\n.ion-ios7-football-outline,\n.ion-ios7-gear,\n.ion-ios7-gear-outline,\n.ion-ios7-glasses,\n.ion-ios7-glasses-outline,\n.ion-ios7-heart,\n.ion-ios7-heart-outline,\n.ion-ios7-help,\n.ion-ios7-help-empty,\n.ion-ios7-help-outline,\n.ion-ios7-home,\n.ion-ios7-home-outline,\n.ion-ios7-infinite,\n.ion-ios7-infinite-outline,\n.ion-ios7-information,\n.ion-ios7-information-empty,\n.ion-ios7-information-outline,\n.ion-ios7-ionic-outline,\n.ion-ios7-keypad,\n.ion-ios7-keypad-outline,\n.ion-ios7-lightbulb,\n.ion-ios7-lightbulb-outline,\n.ion-ios7-location,\n.ion-ios7-location-outline,\n.ion-ios7-locked,\n.ion-ios7-locked-outline,\n.ion-ios7-loop,\n.ion-ios7-loop-strong,\n.ion-ios7-medkit,\n.ion-ios7-medkit-outline,\n.ion-ios7-mic,\n.ion-ios7-mic-off,\n.ion-ios7-mic-outline,\n.ion-ios7-minus,\n.ion-ios7-minus-empty,\n.ion-ios7-minus-outline,\n.ion-ios7-monitor,\n.ion-ios7-monitor-outline,\n.ion-ios7-moon,\n.ion-ios7-moon-outline,\n.ion-ios7-more,\n.ion-ios7-more-outline,\n.ion-ios7-musical-note,\n.ion-ios7-musical-notes,\n.ion-ios7-navigate,\n.ion-ios7-navigate-outline,\n.ion-ios7-paper,\n.ion-ios7-paper-outline,\n.ion-ios7-paperplane,\n.ion-ios7-paperplane-outline,\n.ion-ios7-partlysunny,\n.ion-ios7-partlysunny-outline,\n.ion-ios7-pause,\n.ion-ios7-pause-outline,\n.ion-ios7-paw,\n.ion-ios7-paw-outline,\n.ion-ios7-people,\n.ion-ios7-people-outline,\n.ion-ios7-person,\n.ion-ios7-person-outline,\n.ion-ios7-personadd,\n.ion-ios7-personadd-outline,\n.ion-ios7-photos,\n.ion-ios7-photos-outline,\n.ion-ios7-pie,\n.ion-ios7-pie-outline,\n.ion-ios7-play,\n.ion-ios7-play-outline,\n.ion-ios7-plus,\n.ion-ios7-plus-empty,\n.ion-ios7-plus-outline,\n.ion-ios7-pricetag,\n.ion-ios7-pricetag-outline,\n.ion-ios7-pricetags,\n.ion-ios7-pricetags-outline,\n.ion-ios7-printer,\n.ion-ios7-printer-outline,\n.ion-ios7-pulse,\n.ion-ios7-pulse-strong,\n.ion-ios7-rainy,\n.ion-ios7-rainy-outline,\n.ion-ios7-recording,\n.ion-ios7-recording-outline,\n.ion-ios7-redo,\n.ion-ios7-redo-outline,\n.ion-ios7-refresh,\n.ion-ios7-refresh-empty,\n.ion-ios7-refresh-outline,\n.ion-ios7-reload,\n.ion-ios7-reverse-camera,\n.ion-ios7-reverse-camera-outline,\n.ion-ios7-rewind,\n.ion-ios7-rewind-outline,\n.ion-ios7-search,\n.ion-ios7-search-strong,\n.ion-ios7-settings,\n.ion-ios7-settings-strong,\n.ion-ios7-shrink,\n.ion-ios7-skipbackward,\n.ion-ios7-skipbackward-outline,\n.ion-ios7-skipforward,\n.ion-ios7-skipforward-outline,\n.ion-ios7-snowy,\n.ion-ios7-speedometer,\n.ion-ios7-speedometer-outline,\n.ion-ios7-star,\n.ion-ios7-star-half,\n.ion-ios7-star-outline,\n.ion-ios7-stopwatch,\n.ion-ios7-stopwatch-outline,\n.ion-ios7-sunny,\n.ion-ios7-sunny-outline,\n.ion-ios7-telephone,\n.ion-ios7-telephone-outline,\n.ion-ios7-tennisball,\n.ion-ios7-tennisball-outline,\n.ion-ios7-thunderstorm,\n.ion-ios7-thunderstorm-outline,\n.ion-ios7-time,\n.ion-ios7-time-outline,\n.ion-ios7-timer,\n.ion-ios7-timer-outline,\n.ion-ios7-toggle,\n.ion-ios7-toggle-outline,\n.ion-ios7-trash,\n.ion-ios7-trash-outline,\n.ion-ios7-undo,\n.ion-ios7-undo-outline,\n.ion-ios7-unlocked,\n.ion-ios7-unlocked-outline,\n.ion-ios7-upload,\n.ion-ios7-upload-outline,\n.ion-ios7-videocam,\n.ion-ios7-videocam-outline,\n.ion-ios7-volume-high,\n.ion-ios7-volume-low,\n.ion-ios7-wineglass,\n.ion-ios7-wineglass-outline,\n.ion-ios7-world,\n.ion-ios7-world-outline,\n.ion-ipad,\n.ion-iphone,\n.ion-ipod,\n.ion-jet,\n.ion-key,\n.ion-knife,\n.ion-laptop,\n.ion-leaf,\n.ion-levels,\n.ion-lightbulb,\n.ion-link,\n.ion-load-a,\n.ion-load-b,\n.ion-load-c,\n.ion-load-d,\n.ion-location,\n.ion-locked,\n.ion-log-in,\n.ion-log-out,\n.ion-loop,\n.ion-magnet,\n.ion-male,\n.ion-man,\n.ion-map,\n.ion-medkit,\n.ion-merge,\n.ion-mic-a,\n.ion-mic-b,\n.ion-mic-c,\n.ion-minus,\n.ion-minus-circled,\n.ion-minus-round,\n.ion-model-s,\n.ion-monitor,\n.ion-more,\n.ion-mouse,\n.ion-music-note,\n.ion-navicon,\n.ion-navicon-round,\n.ion-navigate,\n.ion-network,\n.ion-no-smoking,\n.ion-nuclear,\n.ion-outlet,\n.ion-paper-airplane,\n.ion-paperclip,\n.ion-pause,\n.ion-person,\n.ion-person-add,\n.ion-person-stalker,\n.ion-pie-graph,\n.ion-pin,\n.ion-pinpoint,\n.ion-pizza,\n.ion-plane,\n.ion-planet,\n.ion-play,\n.ion-playstation,\n.ion-plus,\n.ion-plus-circled,\n.ion-plus-round,\n.ion-podium,\n.ion-pound,\n.ion-power,\n.ion-pricetag,\n.ion-pricetags,\n.ion-printer,\n.ion-pull-request,\n.ion-qr-scanner,\n.ion-quote,\n.ion-radio-waves,\n.ion-record,\n.ion-refresh,\n.ion-reply,\n.ion-reply-all,\n.ion-ribbon-a,\n.ion-ribbon-b,\n.ion-sad,\n.ion-scissors,\n.ion-search,\n.ion-settings,\n.ion-share,\n.ion-shuffle,\n.ion-skip-backward,\n.ion-skip-forward,\n.ion-social-android,\n.ion-social-android-outline,\n.ion-social-apple,\n.ion-social-apple-outline,\n.ion-social-bitcoin,\n.ion-social-bitcoin-outline,\n.ion-social-buffer,\n.ion-social-buffer-outline,\n.ion-social-designernews,\n.ion-social-designernews-outline,\n.ion-social-dribbble,\n.ion-social-dribbble-outline,\n.ion-social-dropbox,\n.ion-social-dropbox-outline,\n.ion-social-facebook,\n.ion-social-facebook-outline,\n.ion-social-foursquare,\n.ion-social-foursquare-outline,\n.ion-social-freebsd-devil,\n.ion-social-github,\n.ion-social-github-outline,\n.ion-social-google,\n.ion-social-google-outline,\n.ion-social-googleplus,\n.ion-social-googleplus-outline,\n.ion-social-hackernews,\n.ion-social-hackernews-outline,\n.ion-social-instagram,\n.ion-social-instagram-outline,\n.ion-social-linkedin,\n.ion-social-linkedin-outline,\n.ion-social-pinterest,\n.ion-social-pinterest-outline,\n.ion-social-reddit,\n.ion-social-reddit-outline,\n.ion-social-rss,\n.ion-social-rss-outline,\n.ion-social-skype,\n.ion-social-skype-outline,\n.ion-social-tumblr,\n.ion-social-tumblr-outline,\n.ion-social-tux,\n.ion-social-twitter,\n.ion-social-twitter-outline,\n.ion-social-usd,\n.ion-social-usd-outline,\n.ion-social-vimeo,\n.ion-social-vimeo-outline,\n.ion-social-windows,\n.ion-social-windows-outline,\n.ion-social-wordpress,\n.ion-social-wordpress-outline,\n.ion-social-yahoo,\n.ion-social-yahoo-outline,\n.ion-social-youtube,\n.ion-social-youtube-outline,\n.ion-speakerphone,\n.ion-speedometer,\n.ion-spoon,\n.ion-star,\n.ion-stats-bars,\n.ion-steam,\n.ion-stop,\n.ion-thermometer,\n.ion-thumbsdown,\n.ion-thumbsup,\n.ion-toggle,\n.ion-toggle-filled,\n.ion-trash-a,\n.ion-trash-b,\n.ion-trophy,\n.ion-umbrella,\n.ion-university,\n.ion-unlocked,\n.ion-upload,\n.ion-usb,\n.ion-videocamera,\n.ion-volume-high,\n.ion-volume-low,\n.ion-volume-medium,\n.ion-volume-mute,\n.ion-wand,\n.ion-waterdrop,\n.ion-wifi,\n.ion-wineglass,\n.ion-woman,\n.ion-wrench,\n.ion-xbox {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.ion-spin,\n.ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg);\n  }\n  100% {\n    -ms-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n.ion-loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start);\n}\n.ion-alert:before {\n  content: \"\\f101\";\n}\n.ion-alert-circled:before {\n  content: \"\\f100\";\n}\n.ion-android-add:before {\n  content: \"\\f2c7\";\n}\n.ion-android-add-contact:before {\n  content: \"\\f2c6\";\n}\n.ion-android-alarm:before {\n  content: \"\\f2c8\";\n}\n.ion-android-archive:before {\n  content: \"\\f2c9\";\n}\n.ion-android-arrow-back:before {\n  content: \"\\f2ca\";\n}\n.ion-android-arrow-down-left:before {\n  content: \"\\f2cb\";\n}\n.ion-android-arrow-down-right:before {\n  content: \"\\f2cc\";\n}\n.ion-android-arrow-forward:before {\n  content: \"\\f30f\";\n}\n.ion-android-arrow-up-left:before {\n  content: \"\\f2cd\";\n}\n.ion-android-arrow-up-right:before {\n  content: \"\\f2ce\";\n}\n.ion-android-battery:before {\n  content: \"\\f2cf\";\n}\n.ion-android-book:before {\n  content: \"\\f2d0\";\n}\n.ion-android-calendar:before {\n  content: \"\\f2d1\";\n}\n.ion-android-call:before {\n  content: \"\\f2d2\";\n}\n.ion-android-camera:before {\n  content: \"\\f2d3\";\n}\n.ion-android-chat:before {\n  content: \"\\f2d4\";\n}\n.ion-android-checkmark:before {\n  content: \"\\f2d5\";\n}\n.ion-android-clock:before {\n  content: \"\\f2d6\";\n}\n.ion-android-close:before {\n  content: \"\\f2d7\";\n}\n.ion-android-contact:before {\n  content: \"\\f2d8\";\n}\n.ion-android-contacts:before {\n  content: \"\\f2d9\";\n}\n.ion-android-data:before {\n  content: \"\\f2da\";\n}\n.ion-android-developer:before {\n  content: \"\\f2db\";\n}\n.ion-android-display:before {\n  content: \"\\f2dc\";\n}\n.ion-android-download:before {\n  content: \"\\f2dd\";\n}\n.ion-android-drawer:before {\n  content: \"\\f310\";\n}\n.ion-android-dropdown:before {\n  content: \"\\f2de\";\n}\n.ion-android-earth:before {\n  content: \"\\f2df\";\n}\n.ion-android-folder:before {\n  content: \"\\f2e0\";\n}\n.ion-android-forums:before {\n  content: \"\\f2e1\";\n}\n.ion-android-friends:before {\n  content: \"\\f2e2\";\n}\n.ion-android-hand:before {\n  content: \"\\f2e3\";\n}\n.ion-android-image:before {\n  content: \"\\f2e4\";\n}\n.ion-android-inbox:before {\n  content: \"\\f2e5\";\n}\n.ion-android-information:before {\n  content: \"\\f2e6\";\n}\n.ion-android-keypad:before {\n  content: \"\\f2e7\";\n}\n.ion-android-lightbulb:before {\n  content: \"\\f2e8\";\n}\n.ion-android-locate:before {\n  content: \"\\f2e9\";\n}\n.ion-android-location:before {\n  content: \"\\f2ea\";\n}\n.ion-android-mail:before {\n  content: \"\\f2eb\";\n}\n.ion-android-microphone:before {\n  content: \"\\f2ec\";\n}\n.ion-android-mixer:before {\n  content: \"\\f2ed\";\n}\n.ion-android-more:before {\n  content: \"\\f2ee\";\n}\n.ion-android-note:before {\n  content: \"\\f2ef\";\n}\n.ion-android-playstore:before {\n  content: \"\\f2f0\";\n}\n.ion-android-printer:before {\n  content: \"\\f2f1\";\n}\n.ion-android-promotion:before {\n  content: \"\\f2f2\";\n}\n.ion-android-reminder:before {\n  content: \"\\f2f3\";\n}\n.ion-android-remove:before {\n  content: \"\\f2f4\";\n}\n.ion-android-search:before {\n  content: \"\\f2f5\";\n}\n.ion-android-send:before {\n  content: \"\\f2f6\";\n}\n.ion-android-settings:before {\n  content: \"\\f2f7\";\n}\n.ion-android-share:before {\n  content: \"\\f2f8\";\n}\n.ion-android-social:before {\n  content: \"\\f2fa\";\n}\n.ion-android-social-user:before {\n  content: \"\\f2f9\";\n}\n.ion-android-sort:before {\n  content: \"\\f2fb\";\n}\n.ion-android-stair-drawer:before {\n  content: \"\\f311\";\n}\n.ion-android-star:before {\n  content: \"\\f2fc\";\n}\n.ion-android-stopwatch:before {\n  content: \"\\f2fd\";\n}\n.ion-android-storage:before {\n  content: \"\\f2fe\";\n}\n.ion-android-system-back:before {\n  content: \"\\f2ff\";\n}\n.ion-android-system-home:before {\n  content: \"\\f300\";\n}\n.ion-android-system-windows:before {\n  content: \"\\f301\";\n}\n.ion-android-timer:before {\n  content: \"\\f302\";\n}\n.ion-android-trash:before {\n  content: \"\\f303\";\n}\n.ion-android-user-menu:before {\n  content: \"\\f312\";\n}\n.ion-android-volume:before {\n  content: \"\\f304\";\n}\n.ion-android-wifi:before {\n  content: \"\\f305\";\n}\n.ion-aperture:before {\n  content: \"\\f313\";\n}\n.ion-archive:before {\n  content: \"\\f102\";\n}\n.ion-arrow-down-a:before {\n  content: \"\\f103\";\n}\n.ion-arrow-down-b:before {\n  content: \"\\f104\";\n}\n.ion-arrow-down-c:before {\n  content: \"\\f105\";\n}\n.ion-arrow-expand:before {\n  content: \"\\f25e\";\n}\n.ion-arrow-graph-down-left:before {\n  content: \"\\f25f\";\n}\n.ion-arrow-graph-down-right:before {\n  content: \"\\f260\";\n}\n.ion-arrow-graph-up-left:before {\n  content: \"\\f261\";\n}\n.ion-arrow-graph-up-right:before {\n  content: \"\\f262\";\n}\n.ion-arrow-left-a:before {\n  content: \"\\f106\";\n}\n.ion-arrow-left-b:before {\n  content: \"\\f107\";\n}\n.ion-arrow-left-c:before {\n  content: \"\\f108\";\n}\n.ion-arrow-move:before {\n  content: \"\\f263\";\n}\n.ion-arrow-resize:before {\n  content: \"\\f264\";\n}\n.ion-arrow-return-left:before {\n  content: \"\\f265\";\n}\n.ion-arrow-return-right:before {\n  content: \"\\f266\";\n}\n.ion-arrow-right-a:before {\n  content: \"\\f109\";\n}\n.ion-arrow-right-b:before {\n  content: \"\\f10a\";\n}\n.ion-arrow-right-c:before {\n  content: \"\\f10b\";\n}\n.ion-arrow-shrink:before {\n  content: \"\\f267\";\n}\n.ion-arrow-swap:before {\n  content: \"\\f268\";\n}\n.ion-arrow-up-a:before {\n  content: \"\\f10c\";\n}\n.ion-arrow-up-b:before {\n  content: \"\\f10d\";\n}\n.ion-arrow-up-c:before {\n  content: \"\\f10e\";\n}\n.ion-asterisk:before {\n  content: \"\\f314\";\n}\n.ion-at:before {\n  content: \"\\f10f\";\n}\n.ion-bag:before {\n  content: \"\\f110\";\n}\n.ion-battery-charging:before {\n  content: \"\\f111\";\n}\n.ion-battery-empty:before {\n  content: \"\\f112\";\n}\n.ion-battery-full:before {\n  content: \"\\f113\";\n}\n.ion-battery-half:before {\n  content: \"\\f114\";\n}\n.ion-battery-low:before {\n  content: \"\\f115\";\n}\n.ion-beaker:before {\n  content: \"\\f269\";\n}\n.ion-beer:before {\n  content: \"\\f26a\";\n}\n.ion-bluetooth:before {\n  content: \"\\f116\";\n}\n.ion-bonfire:before {\n  content: \"\\f315\";\n}\n.ion-bookmark:before {\n  content: \"\\f26b\";\n}\n.ion-briefcase:before {\n  content: \"\\f26c\";\n}\n.ion-bug:before {\n  content: \"\\f2be\";\n}\n.ion-calculator:before {\n  content: \"\\f26d\";\n}\n.ion-calendar:before {\n  content: \"\\f117\";\n}\n.ion-camera:before {\n  content: \"\\f118\";\n}\n.ion-card:before {\n  content: \"\\f119\";\n}\n.ion-cash:before {\n  content: \"\\f316\";\n}\n.ion-chatbox:before {\n  content: \"\\f11b\";\n}\n.ion-chatbox-working:before {\n  content: \"\\f11a\";\n}\n.ion-chatboxes:before {\n  content: \"\\f11c\";\n}\n.ion-chatbubble:before {\n  content: \"\\f11e\";\n}\n.ion-chatbubble-working:before {\n  content: \"\\f11d\";\n}\n.ion-chatbubbles:before {\n  content: \"\\f11f\";\n}\n.ion-checkmark:before {\n  content: \"\\f122\";\n}\n.ion-checkmark-circled:before {\n  content: \"\\f120\";\n}\n.ion-checkmark-round:before {\n  content: \"\\f121\";\n}\n.ion-chevron-down:before {\n  content: \"\\f123\";\n}\n.ion-chevron-left:before {\n  content: \"\\f124\";\n}\n.ion-chevron-right:before {\n  content: \"\\f125\";\n}\n.ion-chevron-up:before {\n  content: \"\\f126\";\n}\n.ion-clipboard:before {\n  content: \"\\f127\";\n}\n.ion-clock:before {\n  content: \"\\f26e\";\n}\n.ion-close:before {\n  content: \"\\f12a\";\n}\n.ion-close-circled:before {\n  content: \"\\f128\";\n}\n.ion-close-round:before {\n  content: \"\\f129\";\n}\n.ion-closed-captioning:before {\n  content: \"\\f317\";\n}\n.ion-cloud:before {\n  content: \"\\f12b\";\n}\n.ion-code:before {\n  content: \"\\f271\";\n}\n.ion-code-download:before {\n  content: \"\\f26f\";\n}\n.ion-code-working:before {\n  content: \"\\f270\";\n}\n.ion-coffee:before {\n  content: \"\\f272\";\n}\n.ion-compass:before {\n  content: \"\\f273\";\n}\n.ion-compose:before {\n  content: \"\\f12c\";\n}\n.ion-connection-bars:before {\n  content: \"\\f274\";\n}\n.ion-contrast:before {\n  content: \"\\f275\";\n}\n.ion-cube:before {\n  content: \"\\f318\";\n}\n.ion-disc:before {\n  content: \"\\f12d\";\n}\n.ion-document:before {\n  content: \"\\f12f\";\n}\n.ion-document-text:before {\n  content: \"\\f12e\";\n}\n.ion-drag:before {\n  content: \"\\f130\";\n}\n.ion-earth:before {\n  content: \"\\f276\";\n}\n.ion-edit:before {\n  content: \"\\f2bf\";\n}\n.ion-egg:before {\n  content: \"\\f277\";\n}\n.ion-eject:before {\n  content: \"\\f131\";\n}\n.ion-email:before {\n  content: \"\\f132\";\n}\n.ion-eye:before {\n  content: \"\\f133\";\n}\n.ion-eye-disabled:before {\n  content: \"\\f306\";\n}\n.ion-female:before {\n  content: \"\\f278\";\n}\n.ion-filing:before {\n  content: \"\\f134\";\n}\n.ion-film-marker:before {\n  content: \"\\f135\";\n}\n.ion-fireball:before {\n  content: \"\\f319\";\n}\n.ion-flag:before {\n  content: \"\\f279\";\n}\n.ion-flame:before {\n  content: \"\\f31a\";\n}\n.ion-flash:before {\n  content: \"\\f137\";\n}\n.ion-flash-off:before {\n  content: \"\\f136\";\n}\n.ion-flask:before {\n  content: \"\\f138\";\n}\n.ion-folder:before {\n  content: \"\\f139\";\n}\n.ion-fork:before {\n  content: \"\\f27a\";\n}\n.ion-fork-repo:before {\n  content: \"\\f2c0\";\n}\n.ion-forward:before {\n  content: \"\\f13a\";\n}\n.ion-funnel:before {\n  content: \"\\f31b\";\n}\n.ion-game-controller-a:before {\n  content: \"\\f13b\";\n}\n.ion-game-controller-b:before {\n  content: \"\\f13c\";\n}\n.ion-gear-a:before {\n  content: \"\\f13d\";\n}\n.ion-gear-b:before {\n  content: \"\\f13e\";\n}\n.ion-grid:before {\n  content: \"\\f13f\";\n}\n.ion-hammer:before {\n  content: \"\\f27b\";\n}\n.ion-happy:before {\n  content: \"\\f31c\";\n}\n.ion-headphone:before {\n  content: \"\\f140\";\n}\n.ion-heart:before {\n  content: \"\\f141\";\n}\n.ion-heart-broken:before {\n  content: \"\\f31d\";\n}\n.ion-help:before {\n  content: \"\\f143\";\n}\n.ion-help-buoy:before {\n  content: \"\\f27c\";\n}\n.ion-help-circled:before {\n  content: \"\\f142\";\n}\n.ion-home:before {\n  content: \"\\f144\";\n}\n.ion-icecream:before {\n  content: \"\\f27d\";\n}\n.ion-icon-social-google-plus:before {\n  content: \"\\f146\";\n}\n.ion-icon-social-google-plus-outline:before {\n  content: \"\\f145\";\n}\n.ion-image:before {\n  content: \"\\f147\";\n}\n.ion-images:before {\n  content: \"\\f148\";\n}\n.ion-information:before {\n  content: \"\\f14a\";\n}\n.ion-information-circled:before {\n  content: \"\\f149\";\n}\n.ion-ionic:before {\n  content: \"\\f14b\";\n}\n.ion-ios7-alarm:before {\n  content: \"\\f14d\";\n}\n.ion-ios7-alarm-outline:before {\n  content: \"\\f14c\";\n}\n.ion-ios7-albums:before {\n  content: \"\\f14f\";\n}\n.ion-ios7-albums-outline:before {\n  content: \"\\f14e\";\n}\n.ion-ios7-americanfootball:before {\n  content: \"\\f31f\";\n}\n.ion-ios7-americanfootball-outline:before {\n  content: \"\\f31e\";\n}\n.ion-ios7-analytics:before {\n  content: \"\\f321\";\n}\n.ion-ios7-analytics-outline:before {\n  content: \"\\f320\";\n}\n.ion-ios7-arrow-back:before {\n  content: \"\\f150\";\n}\n.ion-ios7-arrow-down:before {\n  content: \"\\f151\";\n}\n.ion-ios7-arrow-forward:before {\n  content: \"\\f152\";\n}\n.ion-ios7-arrow-left:before {\n  content: \"\\f153\";\n}\n.ion-ios7-arrow-right:before {\n  content: \"\\f154\";\n}\n.ion-ios7-arrow-thin-down:before {\n  content: \"\\f27e\";\n}\n.ion-ios7-arrow-thin-left:before {\n  content: \"\\f27f\";\n}\n.ion-ios7-arrow-thin-right:before {\n  content: \"\\f280\";\n}\n.ion-ios7-arrow-thin-up:before {\n  content: \"\\f281\";\n}\n.ion-ios7-arrow-up:before {\n  content: \"\\f155\";\n}\n.ion-ios7-at:before {\n  content: \"\\f157\";\n}\n.ion-ios7-at-outline:before {\n  content: \"\\f156\";\n}\n.ion-ios7-barcode:before {\n  content: \"\\f323\";\n}\n.ion-ios7-barcode-outline:before {\n  content: \"\\f322\";\n}\n.ion-ios7-baseball:before {\n  content: \"\\f325\";\n}\n.ion-ios7-baseball-outline:before {\n  content: \"\\f324\";\n}\n.ion-ios7-basketball:before {\n  content: \"\\f327\";\n}\n.ion-ios7-basketball-outline:before {\n  content: \"\\f326\";\n}\n.ion-ios7-bell:before {\n  content: \"\\f159\";\n}\n.ion-ios7-bell-outline:before {\n  content: \"\\f158\";\n}\n.ion-ios7-bolt:before {\n  content: \"\\f15b\";\n}\n.ion-ios7-bolt-outline:before {\n  content: \"\\f15a\";\n}\n.ion-ios7-bookmarks:before {\n  content: \"\\f15d\";\n}\n.ion-ios7-bookmarks-outline:before {\n  content: \"\\f15c\";\n}\n.ion-ios7-box:before {\n  content: \"\\f15f\";\n}\n.ion-ios7-box-outline:before {\n  content: \"\\f15e\";\n}\n.ion-ios7-briefcase:before {\n  content: \"\\f283\";\n}\n.ion-ios7-briefcase-outline:before {\n  content: \"\\f282\";\n}\n.ion-ios7-browsers:before {\n  content: \"\\f161\";\n}\n.ion-ios7-browsers-outline:before {\n  content: \"\\f160\";\n}\n.ion-ios7-calculator:before {\n  content: \"\\f285\";\n}\n.ion-ios7-calculator-outline:before {\n  content: \"\\f284\";\n}\n.ion-ios7-calendar:before {\n  content: \"\\f163\";\n}\n.ion-ios7-calendar-outline:before {\n  content: \"\\f162\";\n}\n.ion-ios7-camera:before {\n  content: \"\\f165\";\n}\n.ion-ios7-camera-outline:before {\n  content: \"\\f164\";\n}\n.ion-ios7-cart:before {\n  content: \"\\f167\";\n}\n.ion-ios7-cart-outline:before {\n  content: \"\\f166\";\n}\n.ion-ios7-chatboxes:before {\n  content: \"\\f169\";\n}\n.ion-ios7-chatboxes-outline:before {\n  content: \"\\f168\";\n}\n.ion-ios7-chatbubble:before {\n  content: \"\\f16b\";\n}\n.ion-ios7-chatbubble-outline:before {\n  content: \"\\f16a\";\n}\n.ion-ios7-checkmark:before {\n  content: \"\\f16e\";\n}\n.ion-ios7-checkmark-empty:before {\n  content: \"\\f16c\";\n}\n.ion-ios7-checkmark-outline:before {\n  content: \"\\f16d\";\n}\n.ion-ios7-circle-filled:before {\n  content: \"\\f16f\";\n}\n.ion-ios7-circle-outline:before {\n  content: \"\\f170\";\n}\n.ion-ios7-clock:before {\n  content: \"\\f172\";\n}\n.ion-ios7-clock-outline:before {\n  content: \"\\f171\";\n}\n.ion-ios7-close:before {\n  content: \"\\f2bc\";\n}\n.ion-ios7-close-empty:before {\n  content: \"\\f2bd\";\n}\n.ion-ios7-close-outline:before {\n  content: \"\\f2bb\";\n}\n.ion-ios7-cloud:before {\n  content: \"\\f178\";\n}\n.ion-ios7-cloud-download:before {\n  content: \"\\f174\";\n}\n.ion-ios7-cloud-download-outline:before {\n  content: \"\\f173\";\n}\n.ion-ios7-cloud-outline:before {\n  content: \"\\f175\";\n}\n.ion-ios7-cloud-upload:before {\n  content: \"\\f177\";\n}\n.ion-ios7-cloud-upload-outline:before {\n  content: \"\\f176\";\n}\n.ion-ios7-cloudy:before {\n  content: \"\\f17a\";\n}\n.ion-ios7-cloudy-night:before {\n  content: \"\\f308\";\n}\n.ion-ios7-cloudy-night-outline:before {\n  content: \"\\f307\";\n}\n.ion-ios7-cloudy-outline:before {\n  content: \"\\f179\";\n}\n.ion-ios7-cog:before {\n  content: \"\\f17c\";\n}\n.ion-ios7-cog-outline:before {\n  content: \"\\f17b\";\n}\n.ion-ios7-compose:before {\n  content: \"\\f17e\";\n}\n.ion-ios7-compose-outline:before {\n  content: \"\\f17d\";\n}\n.ion-ios7-contact:before {\n  content: \"\\f180\";\n}\n.ion-ios7-contact-outline:before {\n  content: \"\\f17f\";\n}\n.ion-ios7-copy:before {\n  content: \"\\f182\";\n}\n.ion-ios7-copy-outline:before {\n  content: \"\\f181\";\n}\n.ion-ios7-download:before {\n  content: \"\\f184\";\n}\n.ion-ios7-download-outline:before {\n  content: \"\\f183\";\n}\n.ion-ios7-drag:before {\n  content: \"\\f185\";\n}\n.ion-ios7-email:before {\n  content: \"\\f187\";\n}\n.ion-ios7-email-outline:before {\n  content: \"\\f186\";\n}\n.ion-ios7-expand:before {\n  content: \"\\f30d\";\n}\n.ion-ios7-eye:before {\n  content: \"\\f189\";\n}\n.ion-ios7-eye-outline:before {\n  content: \"\\f188\";\n}\n.ion-ios7-fastforward:before {\n  content: \"\\f18b\";\n}\n.ion-ios7-fastforward-outline:before {\n  content: \"\\f18a\";\n}\n.ion-ios7-filing:before {\n  content: \"\\f18d\";\n}\n.ion-ios7-filing-outline:before {\n  content: \"\\f18c\";\n}\n.ion-ios7-film:before {\n  content: \"\\f18f\";\n}\n.ion-ios7-film-outline:before {\n  content: \"\\f18e\";\n}\n.ion-ios7-flag:before {\n  content: \"\\f191\";\n}\n.ion-ios7-flag-outline:before {\n  content: \"\\f190\";\n}\n.ion-ios7-folder:before {\n  content: \"\\f193\";\n}\n.ion-ios7-folder-outline:before {\n  content: \"\\f192\";\n}\n.ion-ios7-football:before {\n  content: \"\\f329\";\n}\n.ion-ios7-football-outline:before {\n  content: \"\\f328\";\n}\n.ion-ios7-gear:before {\n  content: \"\\f195\";\n}\n.ion-ios7-gear-outline:before {\n  content: \"\\f194\";\n}\n.ion-ios7-glasses:before {\n  content: \"\\f197\";\n}\n.ion-ios7-glasses-outline:before {\n  content: \"\\f196\";\n}\n.ion-ios7-heart:before {\n  content: \"\\f199\";\n}\n.ion-ios7-heart-outline:before {\n  content: \"\\f198\";\n}\n.ion-ios7-help:before {\n  content: \"\\f19c\";\n}\n.ion-ios7-help-empty:before {\n  content: \"\\f19a\";\n}\n.ion-ios7-help-outline:before {\n  content: \"\\f19b\";\n}\n.ion-ios7-home:before {\n  content: \"\\f32b\";\n}\n.ion-ios7-home-outline:before {\n  content: \"\\f32a\";\n}\n.ion-ios7-infinite:before {\n  content: \"\\f19e\";\n}\n.ion-ios7-infinite-outline:before {\n  content: \"\\f19d\";\n}\n.ion-ios7-information:before {\n  content: \"\\f1a1\";\n}\n.ion-ios7-information-empty:before {\n  content: \"\\f19f\";\n}\n.ion-ios7-information-outline:before {\n  content: \"\\f1a0\";\n}\n.ion-ios7-ionic-outline:before {\n  content: \"\\f1a2\";\n}\n.ion-ios7-keypad:before {\n  content: \"\\f1a4\";\n}\n.ion-ios7-keypad-outline:before {\n  content: \"\\f1a3\";\n}\n.ion-ios7-lightbulb:before {\n  content: \"\\f287\";\n}\n.ion-ios7-lightbulb-outline:before {\n  content: \"\\f286\";\n}\n.ion-ios7-location:before {\n  content: \"\\f1a6\";\n}\n.ion-ios7-location-outline:before {\n  content: \"\\f1a5\";\n}\n.ion-ios7-locked:before {\n  content: \"\\f1a8\";\n}\n.ion-ios7-locked-outline:before {\n  content: \"\\f1a7\";\n}\n.ion-ios7-loop:before {\n  content: \"\\f32d\";\n}\n.ion-ios7-loop-strong:before {\n  content: \"\\f32c\";\n}\n.ion-ios7-medkit:before {\n  content: \"\\f289\";\n}\n.ion-ios7-medkit-outline:before {\n  content: \"\\f288\";\n}\n.ion-ios7-mic:before {\n  content: \"\\f1ab\";\n}\n.ion-ios7-mic-off:before {\n  content: \"\\f1a9\";\n}\n.ion-ios7-mic-outline:before {\n  content: \"\\f1aa\";\n}\n.ion-ios7-minus:before {\n  content: \"\\f1ae\";\n}\n.ion-ios7-minus-empty:before {\n  content: \"\\f1ac\";\n}\n.ion-ios7-minus-outline:before {\n  content: \"\\f1ad\";\n}\n.ion-ios7-monitor:before {\n  content: \"\\f1b0\";\n}\n.ion-ios7-monitor-outline:before {\n  content: \"\\f1af\";\n}\n.ion-ios7-moon:before {\n  content: \"\\f1b2\";\n}\n.ion-ios7-moon-outline:before {\n  content: \"\\f1b1\";\n}\n.ion-ios7-more:before {\n  content: \"\\f1b4\";\n}\n.ion-ios7-more-outline:before {\n  content: \"\\f1b3\";\n}\n.ion-ios7-musical-note:before {\n  content: \"\\f1b5\";\n}\n.ion-ios7-musical-notes:before {\n  content: \"\\f1b6\";\n}\n.ion-ios7-navigate:before {\n  content: \"\\f1b8\";\n}\n.ion-ios7-navigate-outline:before {\n  content: \"\\f1b7\";\n}\n.ion-ios7-paper:before {\n  content: \"\\f32f\";\n}\n.ion-ios7-paper-outline:before {\n  content: \"\\f32e\";\n}\n.ion-ios7-paperplane:before {\n  content: \"\\f1ba\";\n}\n.ion-ios7-paperplane-outline:before {\n  content: \"\\f1b9\";\n}\n.ion-ios7-partlysunny:before {\n  content: \"\\f1bc\";\n}\n.ion-ios7-partlysunny-outline:before {\n  content: \"\\f1bb\";\n}\n.ion-ios7-pause:before {\n  content: \"\\f1be\";\n}\n.ion-ios7-pause-outline:before {\n  content: \"\\f1bd\";\n}\n.ion-ios7-paw:before {\n  content: \"\\f331\";\n}\n.ion-ios7-paw-outline:before {\n  content: \"\\f330\";\n}\n.ion-ios7-people:before {\n  content: \"\\f1c0\";\n}\n.ion-ios7-people-outline:before {\n  content: \"\\f1bf\";\n}\n.ion-ios7-person:before {\n  content: \"\\f1c2\";\n}\n.ion-ios7-person-outline:before {\n  content: \"\\f1c1\";\n}\n.ion-ios7-personadd:before {\n  content: \"\\f1c4\";\n}\n.ion-ios7-personadd-outline:before {\n  content: \"\\f1c3\";\n}\n.ion-ios7-photos:before {\n  content: \"\\f1c6\";\n}\n.ion-ios7-photos-outline:before {\n  content: \"\\f1c5\";\n}\n.ion-ios7-pie:before {\n  content: \"\\f28b\";\n}\n.ion-ios7-pie-outline:before {\n  content: \"\\f28a\";\n}\n.ion-ios7-play:before {\n  content: \"\\f1c8\";\n}\n.ion-ios7-play-outline:before {\n  content: \"\\f1c7\";\n}\n.ion-ios7-plus:before {\n  content: \"\\f1cb\";\n}\n.ion-ios7-plus-empty:before {\n  content: \"\\f1c9\";\n}\n.ion-ios7-plus-outline:before {\n  content: \"\\f1ca\";\n}\n.ion-ios7-pricetag:before {\n  content: \"\\f28d\";\n}\n.ion-ios7-pricetag-outline:before {\n  content: \"\\f28c\";\n}\n.ion-ios7-pricetags:before {\n  content: \"\\f333\";\n}\n.ion-ios7-pricetags-outline:before {\n  content: \"\\f332\";\n}\n.ion-ios7-printer:before {\n  content: \"\\f1cd\";\n}\n.ion-ios7-printer-outline:before {\n  content: \"\\f1cc\";\n}\n.ion-ios7-pulse:before {\n  content: \"\\f335\";\n}\n.ion-ios7-pulse-strong:before {\n  content: \"\\f334\";\n}\n.ion-ios7-rainy:before {\n  content: \"\\f1cf\";\n}\n.ion-ios7-rainy-outline:before {\n  content: \"\\f1ce\";\n}\n.ion-ios7-recording:before {\n  content: \"\\f1d1\";\n}\n.ion-ios7-recording-outline:before {\n  content: \"\\f1d0\";\n}\n.ion-ios7-redo:before {\n  content: \"\\f1d3\";\n}\n.ion-ios7-redo-outline:before {\n  content: \"\\f1d2\";\n}\n.ion-ios7-refresh:before {\n  content: \"\\f1d6\";\n}\n.ion-ios7-refresh-empty:before {\n  content: \"\\f1d4\";\n}\n.ion-ios7-refresh-outline:before {\n  content: \"\\f1d5\";\n}\n.ion-ios7-reload:before {\n  content: \"\\f28e\";\n}\n.ion-ios7-reverse-camera:before {\n  content: \"\\f337\";\n}\n.ion-ios7-reverse-camera-outline:before {\n  content: \"\\f336\";\n}\n.ion-ios7-rewind:before {\n  content: \"\\f1d8\";\n}\n.ion-ios7-rewind-outline:before {\n  content: \"\\f1d7\";\n}\n.ion-ios7-search:before {\n  content: \"\\f1da\";\n}\n.ion-ios7-search-strong:before {\n  content: \"\\f1d9\";\n}\n.ion-ios7-settings:before {\n  content: \"\\f339\";\n}\n.ion-ios7-settings-strong:before {\n  content: \"\\f338\";\n}\n.ion-ios7-shrink:before {\n  content: \"\\f30e\";\n}\n.ion-ios7-skipbackward:before {\n  content: \"\\f1dc\";\n}\n.ion-ios7-skipbackward-outline:before {\n  content: \"\\f1db\";\n}\n.ion-ios7-skipforward:before {\n  content: \"\\f1de\";\n}\n.ion-ios7-skipforward-outline:before {\n  content: \"\\f1dd\";\n}\n.ion-ios7-snowy:before {\n  content: \"\\f309\";\n}\n.ion-ios7-speedometer:before {\n  content: \"\\f290\";\n}\n.ion-ios7-speedometer-outline:before {\n  content: \"\\f28f\";\n}\n.ion-ios7-star:before {\n  content: \"\\f1e0\";\n}\n.ion-ios7-star-half:before {\n  content: \"\\f33a\";\n}\n.ion-ios7-star-outline:before {\n  content: \"\\f1df\";\n}\n.ion-ios7-stopwatch:before {\n  content: \"\\f1e2\";\n}\n.ion-ios7-stopwatch-outline:before {\n  content: \"\\f1e1\";\n}\n.ion-ios7-sunny:before {\n  content: \"\\f1e4\";\n}\n.ion-ios7-sunny-outline:before {\n  content: \"\\f1e3\";\n}\n.ion-ios7-telephone:before {\n  content: \"\\f1e6\";\n}\n.ion-ios7-telephone-outline:before {\n  content: \"\\f1e5\";\n}\n.ion-ios7-tennisball:before {\n  content: \"\\f33c\";\n}\n.ion-ios7-tennisball-outline:before {\n  content: \"\\f33b\";\n}\n.ion-ios7-thunderstorm:before {\n  content: \"\\f1e8\";\n}\n.ion-ios7-thunderstorm-outline:before {\n  content: \"\\f1e7\";\n}\n.ion-ios7-time:before {\n  content: \"\\f292\";\n}\n.ion-ios7-time-outline:before {\n  content: \"\\f291\";\n}\n.ion-ios7-timer:before {\n  content: \"\\f1ea\";\n}\n.ion-ios7-timer-outline:before {\n  content: \"\\f1e9\";\n}\n.ion-ios7-toggle:before {\n  content: \"\\f33e\";\n}\n.ion-ios7-toggle-outline:before {\n  content: \"\\f33d\";\n}\n.ion-ios7-trash:before {\n  content: \"\\f1ec\";\n}\n.ion-ios7-trash-outline:before {\n  content: \"\\f1eb\";\n}\n.ion-ios7-undo:before {\n  content: \"\\f1ee\";\n}\n.ion-ios7-undo-outline:before {\n  content: \"\\f1ed\";\n}\n.ion-ios7-unlocked:before {\n  content: \"\\f1f0\";\n}\n.ion-ios7-unlocked-outline:before {\n  content: \"\\f1ef\";\n}\n.ion-ios7-upload:before {\n  content: \"\\f1f2\";\n}\n.ion-ios7-upload-outline:before {\n  content: \"\\f1f1\";\n}\n.ion-ios7-videocam:before {\n  content: \"\\f1f4\";\n}\n.ion-ios7-videocam-outline:before {\n  content: \"\\f1f3\";\n}\n.ion-ios7-volume-high:before {\n  content: \"\\f1f5\";\n}\n.ion-ios7-volume-low:before {\n  content: \"\\f1f6\";\n}\n.ion-ios7-wineglass:before {\n  content: \"\\f294\";\n}\n.ion-ios7-wineglass-outline:before {\n  content: \"\\f293\";\n}\n.ion-ios7-world:before {\n  content: \"\\f1f8\";\n}\n.ion-ios7-world-outline:before {\n  content: \"\\f1f7\";\n}\n.ion-ipad:before {\n  content: \"\\f1f9\";\n}\n.ion-iphone:before {\n  content: \"\\f1fa\";\n}\n.ion-ipod:before {\n  content: \"\\f1fb\";\n}\n.ion-jet:before {\n  content: \"\\f295\";\n}\n.ion-key:before {\n  content: \"\\f296\";\n}\n.ion-knife:before {\n  content: \"\\f297\";\n}\n.ion-laptop:before {\n  content: \"\\f1fc\";\n}\n.ion-leaf:before {\n  content: \"\\f1fd\";\n}\n.ion-levels:before {\n  content: \"\\f298\";\n}\n.ion-lightbulb:before {\n  content: \"\\f299\";\n}\n.ion-link:before {\n  content: \"\\f1fe\";\n}\n.ion-load-a:before {\n  content: \"\\f29a\";\n}\n.ion-load-b:before {\n  content: \"\\f29b\";\n}\n.ion-load-c:before {\n  content: \"\\f29c\";\n}\n.ion-load-d:before {\n  content: \"\\f29d\";\n}\n.ion-location:before {\n  content: \"\\f1ff\";\n}\n.ion-locked:before {\n  content: \"\\f200\";\n}\n.ion-log-in:before {\n  content: \"\\f29e\";\n}\n.ion-log-out:before {\n  content: \"\\f29f\";\n}\n.ion-loop:before {\n  content: \"\\f201\";\n}\n.ion-magnet:before {\n  content: \"\\f2a0\";\n}\n.ion-male:before {\n  content: \"\\f2a1\";\n}\n.ion-man:before {\n  content: \"\\f202\";\n}\n.ion-map:before {\n  content: \"\\f203\";\n}\n.ion-medkit:before {\n  content: \"\\f2a2\";\n}\n.ion-merge:before {\n  content: \"\\f33f\";\n}\n.ion-mic-a:before {\n  content: \"\\f204\";\n}\n.ion-mic-b:before {\n  content: \"\\f205\";\n}\n.ion-mic-c:before {\n  content: \"\\f206\";\n}\n.ion-minus:before {\n  content: \"\\f209\";\n}\n.ion-minus-circled:before {\n  content: \"\\f207\";\n}\n.ion-minus-round:before {\n  content: \"\\f208\";\n}\n.ion-model-s:before {\n  content: \"\\f2c1\";\n}\n.ion-monitor:before {\n  content: \"\\f20a\";\n}\n.ion-more:before {\n  content: \"\\f20b\";\n}\n.ion-mouse:before {\n  content: \"\\f340\";\n}\n.ion-music-note:before {\n  content: \"\\f20c\";\n}\n.ion-navicon:before {\n  content: \"\\f20e\";\n}\n.ion-navicon-round:before {\n  content: \"\\f20d\";\n}\n.ion-navigate:before {\n  content: \"\\f2a3\";\n}\n.ion-network:before {\n  content: \"\\f341\";\n}\n.ion-no-smoking:before {\n  content: \"\\f2c2\";\n}\n.ion-nuclear:before {\n  content: \"\\f2a4\";\n}\n.ion-outlet:before {\n  content: \"\\f342\";\n}\n.ion-paper-airplane:before {\n  content: \"\\f2c3\";\n}\n.ion-paperclip:before {\n  content: \"\\f20f\";\n}\n.ion-pause:before {\n  content: \"\\f210\";\n}\n.ion-person:before {\n  content: \"\\f213\";\n}\n.ion-person-add:before {\n  content: \"\\f211\";\n}\n.ion-person-stalker:before {\n  content: \"\\f212\";\n}\n.ion-pie-graph:before {\n  content: \"\\f2a5\";\n}\n.ion-pin:before {\n  content: \"\\f2a6\";\n}\n.ion-pinpoint:before {\n  content: \"\\f2a7\";\n}\n.ion-pizza:before {\n  content: \"\\f2a8\";\n}\n.ion-plane:before {\n  content: \"\\f214\";\n}\n.ion-planet:before {\n  content: \"\\f343\";\n}\n.ion-play:before {\n  content: \"\\f215\";\n}\n.ion-playstation:before {\n  content: \"\\f30a\";\n}\n.ion-plus:before {\n  content: \"\\f218\";\n}\n.ion-plus-circled:before {\n  content: \"\\f216\";\n}\n.ion-plus-round:before {\n  content: \"\\f217\";\n}\n.ion-podium:before {\n  content: \"\\f344\";\n}\n.ion-pound:before {\n  content: \"\\f219\";\n}\n.ion-power:before {\n  content: \"\\f2a9\";\n}\n.ion-pricetag:before {\n  content: \"\\f2aa\";\n}\n.ion-pricetags:before {\n  content: \"\\f2ab\";\n}\n.ion-printer:before {\n  content: \"\\f21a\";\n}\n.ion-pull-request:before {\n  content: \"\\f345\";\n}\n.ion-qr-scanner:before {\n  content: \"\\f346\";\n}\n.ion-quote:before {\n  content: \"\\f347\";\n}\n.ion-radio-waves:before {\n  content: \"\\f2ac\";\n}\n.ion-record:before {\n  content: \"\\f21b\";\n}\n.ion-refresh:before {\n  content: \"\\f21c\";\n}\n.ion-reply:before {\n  content: \"\\f21e\";\n}\n.ion-reply-all:before {\n  content: \"\\f21d\";\n}\n.ion-ribbon-a:before {\n  content: \"\\f348\";\n}\n.ion-ribbon-b:before {\n  content: \"\\f349\";\n}\n.ion-sad:before {\n  content: \"\\f34a\";\n}\n.ion-scissors:before {\n  content: \"\\f34b\";\n}\n.ion-search:before {\n  content: \"\\f21f\";\n}\n.ion-settings:before {\n  content: \"\\f2ad\";\n}\n.ion-share:before {\n  content: \"\\f220\";\n}\n.ion-shuffle:before {\n  content: \"\\f221\";\n}\n.ion-skip-backward:before {\n  content: \"\\f222\";\n}\n.ion-skip-forward:before {\n  content: \"\\f223\";\n}\n.ion-social-android:before {\n  content: \"\\f225\";\n}\n.ion-social-android-outline:before {\n  content: \"\\f224\";\n}\n.ion-social-apple:before {\n  content: \"\\f227\";\n}\n.ion-social-apple-outline:before {\n  content: \"\\f226\";\n}\n.ion-social-bitcoin:before {\n  content: \"\\f2af\";\n}\n.ion-social-bitcoin-outline:before {\n  content: \"\\f2ae\";\n}\n.ion-social-buffer:before {\n  content: \"\\f229\";\n}\n.ion-social-buffer-outline:before {\n  content: \"\\f228\";\n}\n.ion-social-designernews:before {\n  content: \"\\f22b\";\n}\n.ion-social-designernews-outline:before {\n  content: \"\\f22a\";\n}\n.ion-social-dribbble:before {\n  content: \"\\f22d\";\n}\n.ion-social-dribbble-outline:before {\n  content: \"\\f22c\";\n}\n.ion-social-dropbox:before {\n  content: \"\\f22f\";\n}\n.ion-social-dropbox-outline:before {\n  content: \"\\f22e\";\n}\n.ion-social-facebook:before {\n  content: \"\\f231\";\n}\n.ion-social-facebook-outline:before {\n  content: \"\\f230\";\n}\n.ion-social-foursquare:before {\n  content: \"\\f34d\";\n}\n.ion-social-foursquare-outline:before {\n  content: \"\\f34c\";\n}\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\";\n}\n.ion-social-github:before {\n  content: \"\\f233\";\n}\n.ion-social-github-outline:before {\n  content: \"\\f232\";\n}\n.ion-social-google:before {\n  content: \"\\f34f\";\n}\n.ion-social-google-outline:before {\n  content: \"\\f34e\";\n}\n.ion-social-googleplus:before {\n  content: \"\\f235\";\n}\n.ion-social-googleplus-outline:before {\n  content: \"\\f234\";\n}\n.ion-social-hackernews:before {\n  content: \"\\f237\";\n}\n.ion-social-hackernews-outline:before {\n  content: \"\\f236\";\n}\n.ion-social-instagram:before {\n  content: \"\\f351\";\n}\n.ion-social-instagram-outline:before {\n  content: \"\\f350\";\n}\n.ion-social-linkedin:before {\n  content: \"\\f239\";\n}\n.ion-social-linkedin-outline:before {\n  content: \"\\f238\";\n}\n.ion-social-pinterest:before {\n  content: \"\\f2b1\";\n}\n.ion-social-pinterest-outline:before {\n  content: \"\\f2b0\";\n}\n.ion-social-reddit:before {\n  content: \"\\f23b\";\n}\n.ion-social-reddit-outline:before {\n  content: \"\\f23a\";\n}\n.ion-social-rss:before {\n  content: \"\\f23d\";\n}\n.ion-social-rss-outline:before {\n  content: \"\\f23c\";\n}\n.ion-social-skype:before {\n  content: \"\\f23f\";\n}\n.ion-social-skype-outline:before {\n  content: \"\\f23e\";\n}\n.ion-social-tumblr:before {\n  content: \"\\f241\";\n}\n.ion-social-tumblr-outline:before {\n  content: \"\\f240\";\n}\n.ion-social-tux:before {\n  content: \"\\f2c5\";\n}\n.ion-social-twitter:before {\n  content: \"\\f243\";\n}\n.ion-social-twitter-outline:before {\n  content: \"\\f242\";\n}\n.ion-social-usd:before {\n  content: \"\\f353\";\n}\n.ion-social-usd-outline:before {\n  content: \"\\f352\";\n}\n.ion-social-vimeo:before {\n  content: \"\\f245\";\n}\n.ion-social-vimeo-outline:before {\n  content: \"\\f244\";\n}\n.ion-social-windows:before {\n  content: \"\\f247\";\n}\n.ion-social-windows-outline:before {\n  content: \"\\f246\";\n}\n.ion-social-wordpress:before {\n  content: \"\\f249\";\n}\n.ion-social-wordpress-outline:before {\n  content: \"\\f248\";\n}\n.ion-social-yahoo:before {\n  content: \"\\f24b\";\n}\n.ion-social-yahoo-outline:before {\n  content: \"\\f24a\";\n}\n.ion-social-youtube:before {\n  content: \"\\f24d\";\n}\n.ion-social-youtube-outline:before {\n  content: \"\\f24c\";\n}\n.ion-speakerphone:before {\n  content: \"\\f2b2\";\n}\n.ion-speedometer:before {\n  content: \"\\f2b3\";\n}\n.ion-spoon:before {\n  content: \"\\f2b4\";\n}\n.ion-star:before {\n  content: \"\\f24e\";\n}\n.ion-stats-bars:before {\n  content: \"\\f2b5\";\n}\n.ion-steam:before {\n  content: \"\\f30b\";\n}\n.ion-stop:before {\n  content: \"\\f24f\";\n}\n.ion-thermometer:before {\n  content: \"\\f2b6\";\n}\n.ion-thumbsdown:before {\n  content: \"\\f250\";\n}\n.ion-thumbsup:before {\n  content: \"\\f251\";\n}\n.ion-toggle:before {\n  content: \"\\f355\";\n}\n.ion-toggle-filled:before {\n  content: \"\\f354\";\n}\n.ion-trash-a:before {\n  content: \"\\f252\";\n}\n.ion-trash-b:before {\n  content: \"\\f253\";\n}\n.ion-trophy:before {\n  content: \"\\f356\";\n}\n.ion-umbrella:before {\n  content: \"\\f2b7\";\n}\n.ion-university:before {\n  content: \"\\f357\";\n}\n.ion-unlocked:before {\n  content: \"\\f254\";\n}\n.ion-upload:before {\n  content: \"\\f255\";\n}\n.ion-usb:before {\n  content: \"\\f2b8\";\n}\n.ion-videocamera:before {\n  content: \"\\f256\";\n}\n.ion-volume-high:before {\n  content: \"\\f257\";\n}\n.ion-volume-low:before {\n  content: \"\\f258\";\n}\n.ion-volume-medium:before {\n  content: \"\\f259\";\n}\n.ion-volume-mute:before {\n  content: \"\\f25a\";\n}\n.ion-wand:before {\n  content: \"\\f358\";\n}\n.ion-waterdrop:before {\n  content: \"\\f25b\";\n}\n.ion-wifi:before {\n  content: \"\\f25c\";\n}\n.ion-wineglass:before {\n  content: \"\\f2b9\";\n}\n.ion-woman:before {\n  content: \"\\f25d\";\n}\n.ion-wrench:before {\n  content: \"\\f2ba\";\n}\n.ion-xbox:before {\n  content: \"\\f30c\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/less/_ionicons-animation.less",
    "content": "// Animation Icons\n// --------------------------\n\n.spin() {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear;\n}\n\n.@{ionicons-prefix}loading-a,\n.@{ionicons-prefix}loading-b,\n.@{ionicons-prefix}loading-c,\n.@{ionicons-prefix}loading-d,\n.@{ionicons-prefix}looping,\n.@{ionicons-prefix}refreshing,\n.@{ionicons-prefix}ios7-reloading {\n  &:extend(.ion);\n}\n\n.@{ionicons-prefix}spin,\n.@{ionicons-prefix}loading-a,\n.@{ionicons-prefix}loading-b,\n.@{ionicons-prefix}loading-c,\n.@{ionicons-prefix}loading-d,\n.@{ionicons-prefix}looping,\n.@{ionicons-prefix}refreshing,\n.@{ionicons-prefix}ios7-reloading {\n  .spin()\n}\n\n@-moz-keyframes spin {\n  0% { -moz-transform: rotate(0deg); }\n  100% { -moz-transform: rotate(359deg); }\n}\n@-webkit-keyframes spin {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@-o-keyframes spin {\n  0% { -o-transform: rotate(0deg); }\n  100% { -o-transform: rotate(359deg); }\n}\n@-ms-keyframes spin {\n  0% { -ms-transform: rotate(0deg); }\n  100% { -ms-transform: rotate(359deg); }\n}\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n\n.@{ionicons-prefix}loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start);\n}\n//\n//.@{ionicons-prefix}loading-a:before {\n//  &:extend(.@{ionicons-prefix}load-a:before);\n//}\n//\n//.@{ionicons-prefix}loading-b:before {\n//  &:extend(.@{ionicons-prefix}load-b:before);\n//}\n//\n//.@{ionicons-prefix}loading-c:before {\n//  &:extend(.@{ionicons-prefix}load-c:before);\n//}\n//\n//.@{ionicons-prefix}loading-d:before {\n//  &:extend(.@{ionicons-prefix}load-d:before);\n//}\n//\n//.@{ionicons-prefix}looping:before {\n//  &:extend(.@{ionicons-prefix}loop:before);\n//}\n//\n//.@{ionicons-prefix}refreshing:before {\n//  &:extend(.@{ionicons-prefix}refresh:before);\n//}\n//\n//.@{ionicons-prefix}ios7-reloading:before {\n//  &:extend(.@{ionicons-prefix}ios7-reload:before);\n//}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/less/_ionicons-font.less",
    "content": "// Ionicons Font Path\n// --------------------------\n\n@font-face {\n font-family: @ionicons-font-family;\n src:url(\"@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}\");\n src:url(\"@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}#iefix\") format(\"embedded-opentype\"),\n  url(\"@{ionicons-font-path}/ionicons.ttf?v=@{ionicons-version}\") format(\"truetype\"),\n  url(\"@{ionicons-font-path}/ionicons.woff?v=@{ionicons-version}\") format(\"woff\"),\n  url(\"@{ionicons-font-path}/ionicons.svg?v=@{ionicons-version}#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.ion {\n  display: inline-block;\n  font-family: @ionicons-font-family;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/less/_ionicons-icons.less",
    "content": "// Ionicons Icons\n// --------------------------\n\n.ionicons,\n.@{ionicons-prefix}alert,\n.@{ionicons-prefix}alert-circled,\n.@{ionicons-prefix}android-add,\n.@{ionicons-prefix}android-add-contact,\n.@{ionicons-prefix}android-alarm,\n.@{ionicons-prefix}android-archive,\n.@{ionicons-prefix}android-arrow-back,\n.@{ionicons-prefix}android-arrow-down-left,\n.@{ionicons-prefix}android-arrow-down-right,\n.@{ionicons-prefix}android-arrow-forward,\n.@{ionicons-prefix}android-arrow-up-left,\n.@{ionicons-prefix}android-arrow-up-right,\n.@{ionicons-prefix}android-battery,\n.@{ionicons-prefix}android-book,\n.@{ionicons-prefix}android-calendar,\n.@{ionicons-prefix}android-call,\n.@{ionicons-prefix}android-camera,\n.@{ionicons-prefix}android-chat,\n.@{ionicons-prefix}android-checkmark,\n.@{ionicons-prefix}android-clock,\n.@{ionicons-prefix}android-close,\n.@{ionicons-prefix}android-contact,\n.@{ionicons-prefix}android-contacts,\n.@{ionicons-prefix}android-data,\n.@{ionicons-prefix}android-developer,\n.@{ionicons-prefix}android-display,\n.@{ionicons-prefix}android-download,\n.@{ionicons-prefix}android-drawer,\n.@{ionicons-prefix}android-dropdown,\n.@{ionicons-prefix}android-earth,\n.@{ionicons-prefix}android-folder,\n.@{ionicons-prefix}android-forums,\n.@{ionicons-prefix}android-friends,\n.@{ionicons-prefix}android-hand,\n.@{ionicons-prefix}android-image,\n.@{ionicons-prefix}android-inbox,\n.@{ionicons-prefix}android-information,\n.@{ionicons-prefix}android-keypad,\n.@{ionicons-prefix}android-lightbulb,\n.@{ionicons-prefix}android-locate,\n.@{ionicons-prefix}android-location,\n.@{ionicons-prefix}android-mail,\n.@{ionicons-prefix}android-microphone,\n.@{ionicons-prefix}android-mixer,\n.@{ionicons-prefix}android-more,\n.@{ionicons-prefix}android-note,\n.@{ionicons-prefix}android-playstore,\n.@{ionicons-prefix}android-printer,\n.@{ionicons-prefix}android-promotion,\n.@{ionicons-prefix}android-reminder,\n.@{ionicons-prefix}android-remove,\n.@{ionicons-prefix}android-search,\n.@{ionicons-prefix}android-send,\n.@{ionicons-prefix}android-settings,\n.@{ionicons-prefix}android-share,\n.@{ionicons-prefix}android-social,\n.@{ionicons-prefix}android-social-user,\n.@{ionicons-prefix}android-sort,\n.@{ionicons-prefix}android-stair-drawer,\n.@{ionicons-prefix}android-star,\n.@{ionicons-prefix}android-stopwatch,\n.@{ionicons-prefix}android-storage,\n.@{ionicons-prefix}android-system-back,\n.@{ionicons-prefix}android-system-home,\n.@{ionicons-prefix}android-system-windows,\n.@{ionicons-prefix}android-timer,\n.@{ionicons-prefix}android-trash,\n.@{ionicons-prefix}android-user-menu,\n.@{ionicons-prefix}android-volume,\n.@{ionicons-prefix}android-wifi,\n.@{ionicons-prefix}aperture,\n.@{ionicons-prefix}archive,\n.@{ionicons-prefix}arrow-down-a,\n.@{ionicons-prefix}arrow-down-b,\n.@{ionicons-prefix}arrow-down-c,\n.@{ionicons-prefix}arrow-expand,\n.@{ionicons-prefix}arrow-graph-down-left,\n.@{ionicons-prefix}arrow-graph-down-right,\n.@{ionicons-prefix}arrow-graph-up-left,\n.@{ionicons-prefix}arrow-graph-up-right,\n.@{ionicons-prefix}arrow-left-a,\n.@{ionicons-prefix}arrow-left-b,\n.@{ionicons-prefix}arrow-left-c,\n.@{ionicons-prefix}arrow-move,\n.@{ionicons-prefix}arrow-resize,\n.@{ionicons-prefix}arrow-return-left,\n.@{ionicons-prefix}arrow-return-right,\n.@{ionicons-prefix}arrow-right-a,\n.@{ionicons-prefix}arrow-right-b,\n.@{ionicons-prefix}arrow-right-c,\n.@{ionicons-prefix}arrow-shrink,\n.@{ionicons-prefix}arrow-swap,\n.@{ionicons-prefix}arrow-up-a,\n.@{ionicons-prefix}arrow-up-b,\n.@{ionicons-prefix}arrow-up-c,\n.@{ionicons-prefix}asterisk,\n.@{ionicons-prefix}at,\n.@{ionicons-prefix}bag,\n.@{ionicons-prefix}battery-charging,\n.@{ionicons-prefix}battery-empty,\n.@{ionicons-prefix}battery-full,\n.@{ionicons-prefix}battery-half,\n.@{ionicons-prefix}battery-low,\n.@{ionicons-prefix}beaker,\n.@{ionicons-prefix}beer,\n.@{ionicons-prefix}bluetooth,\n.@{ionicons-prefix}bonfire,\n.@{ionicons-prefix}bookmark,\n.@{ionicons-prefix}briefcase,\n.@{ionicons-prefix}bug,\n.@{ionicons-prefix}calculator,\n.@{ionicons-prefix}calendar,\n.@{ionicons-prefix}camera,\n.@{ionicons-prefix}card,\n.@{ionicons-prefix}cash,\n.@{ionicons-prefix}chatbox,\n.@{ionicons-prefix}chatbox-working,\n.@{ionicons-prefix}chatboxes,\n.@{ionicons-prefix}chatbubble,\n.@{ionicons-prefix}chatbubble-working,\n.@{ionicons-prefix}chatbubbles,\n.@{ionicons-prefix}checkmark,\n.@{ionicons-prefix}checkmark-circled,\n.@{ionicons-prefix}checkmark-round,\n.@{ionicons-prefix}chevron-down,\n.@{ionicons-prefix}chevron-left,\n.@{ionicons-prefix}chevron-right,\n.@{ionicons-prefix}chevron-up,\n.@{ionicons-prefix}clipboard,\n.@{ionicons-prefix}clock,\n.@{ionicons-prefix}close,\n.@{ionicons-prefix}close-circled,\n.@{ionicons-prefix}close-round,\n.@{ionicons-prefix}closed-captioning,\n.@{ionicons-prefix}cloud,\n.@{ionicons-prefix}code,\n.@{ionicons-prefix}code-download,\n.@{ionicons-prefix}code-working,\n.@{ionicons-prefix}coffee,\n.@{ionicons-prefix}compass,\n.@{ionicons-prefix}compose,\n.@{ionicons-prefix}connection-bars,\n.@{ionicons-prefix}contrast,\n.@{ionicons-prefix}cube,\n.@{ionicons-prefix}disc,\n.@{ionicons-prefix}document,\n.@{ionicons-prefix}document-text,\n.@{ionicons-prefix}drag,\n.@{ionicons-prefix}earth,\n.@{ionicons-prefix}edit,\n.@{ionicons-prefix}egg,\n.@{ionicons-prefix}eject,\n.@{ionicons-prefix}email,\n.@{ionicons-prefix}eye,\n.@{ionicons-prefix}eye-disabled,\n.@{ionicons-prefix}female,\n.@{ionicons-prefix}filing,\n.@{ionicons-prefix}film-marker,\n.@{ionicons-prefix}fireball,\n.@{ionicons-prefix}flag,\n.@{ionicons-prefix}flame,\n.@{ionicons-prefix}flash,\n.@{ionicons-prefix}flash-off,\n.@{ionicons-prefix}flask,\n.@{ionicons-prefix}folder,\n.@{ionicons-prefix}fork,\n.@{ionicons-prefix}fork-repo,\n.@{ionicons-prefix}forward,\n.@{ionicons-prefix}funnel,\n.@{ionicons-prefix}game-controller-a,\n.@{ionicons-prefix}game-controller-b,\n.@{ionicons-prefix}gear-a,\n.@{ionicons-prefix}gear-b,\n.@{ionicons-prefix}grid,\n.@{ionicons-prefix}hammer,\n.@{ionicons-prefix}happy,\n.@{ionicons-prefix}headphone,\n.@{ionicons-prefix}heart,\n.@{ionicons-prefix}heart-broken,\n.@{ionicons-prefix}help,\n.@{ionicons-prefix}help-buoy,\n.@{ionicons-prefix}help-circled,\n.@{ionicons-prefix}home,\n.@{ionicons-prefix}icecream,\n.@{ionicons-prefix}icon-social-google-plus,\n.@{ionicons-prefix}icon-social-google-plus-outline,\n.@{ionicons-prefix}image,\n.@{ionicons-prefix}images,\n.@{ionicons-prefix}information,\n.@{ionicons-prefix}information-circled,\n.@{ionicons-prefix}ionic,\n.@{ionicons-prefix}ios7-alarm,\n.@{ionicons-prefix}ios7-alarm-outline,\n.@{ionicons-prefix}ios7-albums,\n.@{ionicons-prefix}ios7-albums-outline,\n.@{ionicons-prefix}ios7-americanfootball,\n.@{ionicons-prefix}ios7-americanfootball-outline,\n.@{ionicons-prefix}ios7-analytics,\n.@{ionicons-prefix}ios7-analytics-outline,\n.@{ionicons-prefix}ios7-arrow-back,\n.@{ionicons-prefix}ios7-arrow-down,\n.@{ionicons-prefix}ios7-arrow-forward,\n.@{ionicons-prefix}ios7-arrow-left,\n.@{ionicons-prefix}ios7-arrow-right,\n.@{ionicons-prefix}ios7-arrow-thin-down,\n.@{ionicons-prefix}ios7-arrow-thin-left,\n.@{ionicons-prefix}ios7-arrow-thin-right,\n.@{ionicons-prefix}ios7-arrow-thin-up,\n.@{ionicons-prefix}ios7-arrow-up,\n.@{ionicons-prefix}ios7-at,\n.@{ionicons-prefix}ios7-at-outline,\n.@{ionicons-prefix}ios7-barcode,\n.@{ionicons-prefix}ios7-barcode-outline,\n.@{ionicons-prefix}ios7-baseball,\n.@{ionicons-prefix}ios7-baseball-outline,\n.@{ionicons-prefix}ios7-basketball,\n.@{ionicons-prefix}ios7-basketball-outline,\n.@{ionicons-prefix}ios7-bell,\n.@{ionicons-prefix}ios7-bell-outline,\n.@{ionicons-prefix}ios7-bolt,\n.@{ionicons-prefix}ios7-bolt-outline,\n.@{ionicons-prefix}ios7-bookmarks,\n.@{ionicons-prefix}ios7-bookmarks-outline,\n.@{ionicons-prefix}ios7-box,\n.@{ionicons-prefix}ios7-box-outline,\n.@{ionicons-prefix}ios7-briefcase,\n.@{ionicons-prefix}ios7-briefcase-outline,\n.@{ionicons-prefix}ios7-browsers,\n.@{ionicons-prefix}ios7-browsers-outline,\n.@{ionicons-prefix}ios7-calculator,\n.@{ionicons-prefix}ios7-calculator-outline,\n.@{ionicons-prefix}ios7-calendar,\n.@{ionicons-prefix}ios7-calendar-outline,\n.@{ionicons-prefix}ios7-camera,\n.@{ionicons-prefix}ios7-camera-outline,\n.@{ionicons-prefix}ios7-cart,\n.@{ionicons-prefix}ios7-cart-outline,\n.@{ionicons-prefix}ios7-chatboxes,\n.@{ionicons-prefix}ios7-chatboxes-outline,\n.@{ionicons-prefix}ios7-chatbubble,\n.@{ionicons-prefix}ios7-chatbubble-outline,\n.@{ionicons-prefix}ios7-checkmark,\n.@{ionicons-prefix}ios7-checkmark-empty,\n.@{ionicons-prefix}ios7-checkmark-outline,\n.@{ionicons-prefix}ios7-circle-filled,\n.@{ionicons-prefix}ios7-circle-outline,\n.@{ionicons-prefix}ios7-clock,\n.@{ionicons-prefix}ios7-clock-outline,\n.@{ionicons-prefix}ios7-close,\n.@{ionicons-prefix}ios7-close-empty,\n.@{ionicons-prefix}ios7-close-outline,\n.@{ionicons-prefix}ios7-cloud,\n.@{ionicons-prefix}ios7-cloud-download,\n.@{ionicons-prefix}ios7-cloud-download-outline,\n.@{ionicons-prefix}ios7-cloud-outline,\n.@{ionicons-prefix}ios7-cloud-upload,\n.@{ionicons-prefix}ios7-cloud-upload-outline,\n.@{ionicons-prefix}ios7-cloudy,\n.@{ionicons-prefix}ios7-cloudy-night,\n.@{ionicons-prefix}ios7-cloudy-night-outline,\n.@{ionicons-prefix}ios7-cloudy-outline,\n.@{ionicons-prefix}ios7-cog,\n.@{ionicons-prefix}ios7-cog-outline,\n.@{ionicons-prefix}ios7-compose,\n.@{ionicons-prefix}ios7-compose-outline,\n.@{ionicons-prefix}ios7-contact,\n.@{ionicons-prefix}ios7-contact-outline,\n.@{ionicons-prefix}ios7-copy,\n.@{ionicons-prefix}ios7-copy-outline,\n.@{ionicons-prefix}ios7-download,\n.@{ionicons-prefix}ios7-download-outline,\n.@{ionicons-prefix}ios7-drag,\n.@{ionicons-prefix}ios7-email,\n.@{ionicons-prefix}ios7-email-outline,\n.@{ionicons-prefix}ios7-expand,\n.@{ionicons-prefix}ios7-eye,\n.@{ionicons-prefix}ios7-eye-outline,\n.@{ionicons-prefix}ios7-fastforward,\n.@{ionicons-prefix}ios7-fastforward-outline,\n.@{ionicons-prefix}ios7-filing,\n.@{ionicons-prefix}ios7-filing-outline,\n.@{ionicons-prefix}ios7-film,\n.@{ionicons-prefix}ios7-film-outline,\n.@{ionicons-prefix}ios7-flag,\n.@{ionicons-prefix}ios7-flag-outline,\n.@{ionicons-prefix}ios7-folder,\n.@{ionicons-prefix}ios7-folder-outline,\n.@{ionicons-prefix}ios7-football,\n.@{ionicons-prefix}ios7-football-outline,\n.@{ionicons-prefix}ios7-gear,\n.@{ionicons-prefix}ios7-gear-outline,\n.@{ionicons-prefix}ios7-glasses,\n.@{ionicons-prefix}ios7-glasses-outline,\n.@{ionicons-prefix}ios7-heart,\n.@{ionicons-prefix}ios7-heart-outline,\n.@{ionicons-prefix}ios7-help,\n.@{ionicons-prefix}ios7-help-empty,\n.@{ionicons-prefix}ios7-help-outline,\n.@{ionicons-prefix}ios7-home,\n.@{ionicons-prefix}ios7-home-outline,\n.@{ionicons-prefix}ios7-infinite,\n.@{ionicons-prefix}ios7-infinite-outline,\n.@{ionicons-prefix}ios7-information,\n.@{ionicons-prefix}ios7-information-empty,\n.@{ionicons-prefix}ios7-information-outline,\n.@{ionicons-prefix}ios7-ionic-outline,\n.@{ionicons-prefix}ios7-keypad,\n.@{ionicons-prefix}ios7-keypad-outline,\n.@{ionicons-prefix}ios7-lightbulb,\n.@{ionicons-prefix}ios7-lightbulb-outline,\n.@{ionicons-prefix}ios7-location,\n.@{ionicons-prefix}ios7-location-outline,\n.@{ionicons-prefix}ios7-locked,\n.@{ionicons-prefix}ios7-locked-outline,\n.@{ionicons-prefix}ios7-loop,\n.@{ionicons-prefix}ios7-loop-strong,\n.@{ionicons-prefix}ios7-medkit,\n.@{ionicons-prefix}ios7-medkit-outline,\n.@{ionicons-prefix}ios7-mic,\n.@{ionicons-prefix}ios7-mic-off,\n.@{ionicons-prefix}ios7-mic-outline,\n.@{ionicons-prefix}ios7-minus,\n.@{ionicons-prefix}ios7-minus-empty,\n.@{ionicons-prefix}ios7-minus-outline,\n.@{ionicons-prefix}ios7-monitor,\n.@{ionicons-prefix}ios7-monitor-outline,\n.@{ionicons-prefix}ios7-moon,\n.@{ionicons-prefix}ios7-moon-outline,\n.@{ionicons-prefix}ios7-more,\n.@{ionicons-prefix}ios7-more-outline,\n.@{ionicons-prefix}ios7-musical-note,\n.@{ionicons-prefix}ios7-musical-notes,\n.@{ionicons-prefix}ios7-navigate,\n.@{ionicons-prefix}ios7-navigate-outline,\n.@{ionicons-prefix}ios7-paper,\n.@{ionicons-prefix}ios7-paper-outline,\n.@{ionicons-prefix}ios7-paperplane,\n.@{ionicons-prefix}ios7-paperplane-outline,\n.@{ionicons-prefix}ios7-partlysunny,\n.@{ionicons-prefix}ios7-partlysunny-outline,\n.@{ionicons-prefix}ios7-pause,\n.@{ionicons-prefix}ios7-pause-outline,\n.@{ionicons-prefix}ios7-paw,\n.@{ionicons-prefix}ios7-paw-outline,\n.@{ionicons-prefix}ios7-people,\n.@{ionicons-prefix}ios7-people-outline,\n.@{ionicons-prefix}ios7-person,\n.@{ionicons-prefix}ios7-person-outline,\n.@{ionicons-prefix}ios7-personadd,\n.@{ionicons-prefix}ios7-personadd-outline,\n.@{ionicons-prefix}ios7-photos,\n.@{ionicons-prefix}ios7-photos-outline,\n.@{ionicons-prefix}ios7-pie,\n.@{ionicons-prefix}ios7-pie-outline,\n.@{ionicons-prefix}ios7-play,\n.@{ionicons-prefix}ios7-play-outline,\n.@{ionicons-prefix}ios7-plus,\n.@{ionicons-prefix}ios7-plus-empty,\n.@{ionicons-prefix}ios7-plus-outline,\n.@{ionicons-prefix}ios7-pricetag,\n.@{ionicons-prefix}ios7-pricetag-outline,\n.@{ionicons-prefix}ios7-pricetags,\n.@{ionicons-prefix}ios7-pricetags-outline,\n.@{ionicons-prefix}ios7-printer,\n.@{ionicons-prefix}ios7-printer-outline,\n.@{ionicons-prefix}ios7-pulse,\n.@{ionicons-prefix}ios7-pulse-strong,\n.@{ionicons-prefix}ios7-rainy,\n.@{ionicons-prefix}ios7-rainy-outline,\n.@{ionicons-prefix}ios7-recording,\n.@{ionicons-prefix}ios7-recording-outline,\n.@{ionicons-prefix}ios7-redo,\n.@{ionicons-prefix}ios7-redo-outline,\n.@{ionicons-prefix}ios7-refresh,\n.@{ionicons-prefix}ios7-refresh-empty,\n.@{ionicons-prefix}ios7-refresh-outline,\n.@{ionicons-prefix}ios7-reload,\n.@{ionicons-prefix}ios7-reverse-camera,\n.@{ionicons-prefix}ios7-reverse-camera-outline,\n.@{ionicons-prefix}ios7-rewind,\n.@{ionicons-prefix}ios7-rewind-outline,\n.@{ionicons-prefix}ios7-search,\n.@{ionicons-prefix}ios7-search-strong,\n.@{ionicons-prefix}ios7-settings,\n.@{ionicons-prefix}ios7-settings-strong,\n.@{ionicons-prefix}ios7-shrink,\n.@{ionicons-prefix}ios7-skipbackward,\n.@{ionicons-prefix}ios7-skipbackward-outline,\n.@{ionicons-prefix}ios7-skipforward,\n.@{ionicons-prefix}ios7-skipforward-outline,\n.@{ionicons-prefix}ios7-snowy,\n.@{ionicons-prefix}ios7-speedometer,\n.@{ionicons-prefix}ios7-speedometer-outline,\n.@{ionicons-prefix}ios7-star,\n.@{ionicons-prefix}ios7-star-half,\n.@{ionicons-prefix}ios7-star-outline,\n.@{ionicons-prefix}ios7-stopwatch,\n.@{ionicons-prefix}ios7-stopwatch-outline,\n.@{ionicons-prefix}ios7-sunny,\n.@{ionicons-prefix}ios7-sunny-outline,\n.@{ionicons-prefix}ios7-telephone,\n.@{ionicons-prefix}ios7-telephone-outline,\n.@{ionicons-prefix}ios7-tennisball,\n.@{ionicons-prefix}ios7-tennisball-outline,\n.@{ionicons-prefix}ios7-thunderstorm,\n.@{ionicons-prefix}ios7-thunderstorm-outline,\n.@{ionicons-prefix}ios7-time,\n.@{ionicons-prefix}ios7-time-outline,\n.@{ionicons-prefix}ios7-timer,\n.@{ionicons-prefix}ios7-timer-outline,\n.@{ionicons-prefix}ios7-toggle,\n.@{ionicons-prefix}ios7-toggle-outline,\n.@{ionicons-prefix}ios7-trash,\n.@{ionicons-prefix}ios7-trash-outline,\n.@{ionicons-prefix}ios7-undo,\n.@{ionicons-prefix}ios7-undo-outline,\n.@{ionicons-prefix}ios7-unlocked,\n.@{ionicons-prefix}ios7-unlocked-outline,\n.@{ionicons-prefix}ios7-upload,\n.@{ionicons-prefix}ios7-upload-outline,\n.@{ionicons-prefix}ios7-videocam,\n.@{ionicons-prefix}ios7-videocam-outline,\n.@{ionicons-prefix}ios7-volume-high,\n.@{ionicons-prefix}ios7-volume-low,\n.@{ionicons-prefix}ios7-wineglass,\n.@{ionicons-prefix}ios7-wineglass-outline,\n.@{ionicons-prefix}ios7-world,\n.@{ionicons-prefix}ios7-world-outline,\n.@{ionicons-prefix}ipad,\n.@{ionicons-prefix}iphone,\n.@{ionicons-prefix}ipod,\n.@{ionicons-prefix}jet,\n.@{ionicons-prefix}key,\n.@{ionicons-prefix}knife,\n.@{ionicons-prefix}laptop,\n.@{ionicons-prefix}leaf,\n.@{ionicons-prefix}levels,\n.@{ionicons-prefix}lightbulb,\n.@{ionicons-prefix}link,\n.@{ionicons-prefix}load-a,\n.@{ionicons-prefix}load-b,\n.@{ionicons-prefix}load-c,\n.@{ionicons-prefix}load-d,\n.@{ionicons-prefix}location,\n.@{ionicons-prefix}locked,\n.@{ionicons-prefix}log-in,\n.@{ionicons-prefix}log-out,\n.@{ionicons-prefix}loop,\n.@{ionicons-prefix}magnet,\n.@{ionicons-prefix}male,\n.@{ionicons-prefix}man,\n.@{ionicons-prefix}map,\n.@{ionicons-prefix}medkit,\n.@{ionicons-prefix}merge,\n.@{ionicons-prefix}mic-a,\n.@{ionicons-prefix}mic-b,\n.@{ionicons-prefix}mic-c,\n.@{ionicons-prefix}minus,\n.@{ionicons-prefix}minus-circled,\n.@{ionicons-prefix}minus-round,\n.@{ionicons-prefix}model-s,\n.@{ionicons-prefix}monitor,\n.@{ionicons-prefix}more,\n.@{ionicons-prefix}mouse,\n.@{ionicons-prefix}music-note,\n.@{ionicons-prefix}navicon,\n.@{ionicons-prefix}navicon-round,\n.@{ionicons-prefix}navigate,\n.@{ionicons-prefix}network,\n.@{ionicons-prefix}no-smoking,\n.@{ionicons-prefix}nuclear,\n.@{ionicons-prefix}outlet,\n.@{ionicons-prefix}paper-airplane,\n.@{ionicons-prefix}paperclip,\n.@{ionicons-prefix}pause,\n.@{ionicons-prefix}person,\n.@{ionicons-prefix}person-add,\n.@{ionicons-prefix}person-stalker,\n.@{ionicons-prefix}pie-graph,\n.@{ionicons-prefix}pin,\n.@{ionicons-prefix}pinpoint,\n.@{ionicons-prefix}pizza,\n.@{ionicons-prefix}plane,\n.@{ionicons-prefix}planet,\n.@{ionicons-prefix}play,\n.@{ionicons-prefix}playstation,\n.@{ionicons-prefix}plus,\n.@{ionicons-prefix}plus-circled,\n.@{ionicons-prefix}plus-round,\n.@{ionicons-prefix}podium,\n.@{ionicons-prefix}pound,\n.@{ionicons-prefix}power,\n.@{ionicons-prefix}pricetag,\n.@{ionicons-prefix}pricetags,\n.@{ionicons-prefix}printer,\n.@{ionicons-prefix}pull-request,\n.@{ionicons-prefix}qr-scanner,\n.@{ionicons-prefix}quote,\n.@{ionicons-prefix}radio-waves,\n.@{ionicons-prefix}record,\n.@{ionicons-prefix}refresh,\n.@{ionicons-prefix}reply,\n.@{ionicons-prefix}reply-all,\n.@{ionicons-prefix}ribbon-a,\n.@{ionicons-prefix}ribbon-b,\n.@{ionicons-prefix}sad,\n.@{ionicons-prefix}scissors,\n.@{ionicons-prefix}search,\n.@{ionicons-prefix}settings,\n.@{ionicons-prefix}share,\n.@{ionicons-prefix}shuffle,\n.@{ionicons-prefix}skip-backward,\n.@{ionicons-prefix}skip-forward,\n.@{ionicons-prefix}social-android,\n.@{ionicons-prefix}social-android-outline,\n.@{ionicons-prefix}social-apple,\n.@{ionicons-prefix}social-apple-outline,\n.@{ionicons-prefix}social-bitcoin,\n.@{ionicons-prefix}social-bitcoin-outline,\n.@{ionicons-prefix}social-buffer,\n.@{ionicons-prefix}social-buffer-outline,\n.@{ionicons-prefix}social-designernews,\n.@{ionicons-prefix}social-designernews-outline,\n.@{ionicons-prefix}social-dribbble,\n.@{ionicons-prefix}social-dribbble-outline,\n.@{ionicons-prefix}social-dropbox,\n.@{ionicons-prefix}social-dropbox-outline,\n.@{ionicons-prefix}social-facebook,\n.@{ionicons-prefix}social-facebook-outline,\n.@{ionicons-prefix}social-foursquare,\n.@{ionicons-prefix}social-foursquare-outline,\n.@{ionicons-prefix}social-freebsd-devil,\n.@{ionicons-prefix}social-github,\n.@{ionicons-prefix}social-github-outline,\n.@{ionicons-prefix}social-google,\n.@{ionicons-prefix}social-google-outline,\n.@{ionicons-prefix}social-googleplus,\n.@{ionicons-prefix}social-googleplus-outline,\n.@{ionicons-prefix}social-hackernews,\n.@{ionicons-prefix}social-hackernews-outline,\n.@{ionicons-prefix}social-instagram,\n.@{ionicons-prefix}social-instagram-outline,\n.@{ionicons-prefix}social-linkedin,\n.@{ionicons-prefix}social-linkedin-outline,\n.@{ionicons-prefix}social-pinterest,\n.@{ionicons-prefix}social-pinterest-outline,\n.@{ionicons-prefix}social-reddit,\n.@{ionicons-prefix}social-reddit-outline,\n.@{ionicons-prefix}social-rss,\n.@{ionicons-prefix}social-rss-outline,\n.@{ionicons-prefix}social-skype,\n.@{ionicons-prefix}social-skype-outline,\n.@{ionicons-prefix}social-tumblr,\n.@{ionicons-prefix}social-tumblr-outline,\n.@{ionicons-prefix}social-tux,\n.@{ionicons-prefix}social-twitter,\n.@{ionicons-prefix}social-twitter-outline,\n.@{ionicons-prefix}social-usd,\n.@{ionicons-prefix}social-usd-outline,\n.@{ionicons-prefix}social-vimeo,\n.@{ionicons-prefix}social-vimeo-outline,\n.@{ionicons-prefix}social-windows,\n.@{ionicons-prefix}social-windows-outline,\n.@{ionicons-prefix}social-wordpress,\n.@{ionicons-prefix}social-wordpress-outline,\n.@{ionicons-prefix}social-yahoo,\n.@{ionicons-prefix}social-yahoo-outline,\n.@{ionicons-prefix}social-youtube,\n.@{ionicons-prefix}social-youtube-outline,\n.@{ionicons-prefix}speakerphone,\n.@{ionicons-prefix}speedometer,\n.@{ionicons-prefix}spoon,\n.@{ionicons-prefix}star,\n.@{ionicons-prefix}stats-bars,\n.@{ionicons-prefix}steam,\n.@{ionicons-prefix}stop,\n.@{ionicons-prefix}thermometer,\n.@{ionicons-prefix}thumbsdown,\n.@{ionicons-prefix}thumbsup,\n.@{ionicons-prefix}toggle,\n.@{ionicons-prefix}toggle-filled,\n.@{ionicons-prefix}trash-a,\n.@{ionicons-prefix}trash-b,\n.@{ionicons-prefix}trophy,\n.@{ionicons-prefix}umbrella,\n.@{ionicons-prefix}university,\n.@{ionicons-prefix}unlocked,\n.@{ionicons-prefix}upload,\n.@{ionicons-prefix}usb,\n.@{ionicons-prefix}videocamera,\n.@{ionicons-prefix}volume-high,\n.@{ionicons-prefix}volume-low,\n.@{ionicons-prefix}volume-medium,\n.@{ionicons-prefix}volume-mute,\n.@{ionicons-prefix}wand,\n.@{ionicons-prefix}waterdrop,\n.@{ionicons-prefix}wifi,\n.@{ionicons-prefix}wineglass,\n.@{ionicons-prefix}woman,\n.@{ionicons-prefix}wrench,\n.@{ionicons-prefix}xbox\n{\n  &:extend(.ion);\n}\n.@{ionicons-prefix}alert:before { content: @ionicon-var-alert; }\n.@{ionicons-prefix}alert-circled:before { content: @ionicon-var-alert-circled; }\n.@{ionicons-prefix}android-add:before { content: @ionicon-var-android-add; }\n.@{ionicons-prefix}android-add-contact:before { content: @ionicon-var-android-add-contact; }\n.@{ionicons-prefix}android-alarm:before { content: @ionicon-var-android-alarm; }\n.@{ionicons-prefix}android-archive:before { content: @ionicon-var-android-archive; }\n.@{ionicons-prefix}android-arrow-back:before { content: @ionicon-var-android-arrow-back; }\n.@{ionicons-prefix}android-arrow-down-left:before { content: @ionicon-var-android-arrow-down-left; }\n.@{ionicons-prefix}android-arrow-down-right:before { content: @ionicon-var-android-arrow-down-right; }\n.@{ionicons-prefix}android-arrow-forward:before { content: @ionicon-var-android-arrow-forward; }\n.@{ionicons-prefix}android-arrow-up-left:before { content: @ionicon-var-android-arrow-up-left; }\n.@{ionicons-prefix}android-arrow-up-right:before { content: @ionicon-var-android-arrow-up-right; }\n.@{ionicons-prefix}android-battery:before { content: @ionicon-var-android-battery; }\n.@{ionicons-prefix}android-book:before { content: @ionicon-var-android-book; }\n.@{ionicons-prefix}android-calendar:before { content: @ionicon-var-android-calendar; }\n.@{ionicons-prefix}android-call:before { content: @ionicon-var-android-call; }\n.@{ionicons-prefix}android-camera:before { content: @ionicon-var-android-camera; }\n.@{ionicons-prefix}android-chat:before { content: @ionicon-var-android-chat; }\n.@{ionicons-prefix}android-checkmark:before { content: @ionicon-var-android-checkmark; }\n.@{ionicons-prefix}android-clock:before { content: @ionicon-var-android-clock; }\n.@{ionicons-prefix}android-close:before { content: @ionicon-var-android-close; }\n.@{ionicons-prefix}android-contact:before { content: @ionicon-var-android-contact; }\n.@{ionicons-prefix}android-contacts:before { content: @ionicon-var-android-contacts; }\n.@{ionicons-prefix}android-data:before { content: @ionicon-var-android-data; }\n.@{ionicons-prefix}android-developer:before { content: @ionicon-var-android-developer; }\n.@{ionicons-prefix}android-display:before { content: @ionicon-var-android-display; }\n.@{ionicons-prefix}android-download:before { content: @ionicon-var-android-download; }\n.@{ionicons-prefix}android-drawer:before { content: @ionicon-var-android-drawer; }\n.@{ionicons-prefix}android-dropdown:before { content: @ionicon-var-android-dropdown; }\n.@{ionicons-prefix}android-earth:before { content: @ionicon-var-android-earth; }\n.@{ionicons-prefix}android-folder:before { content: @ionicon-var-android-folder; }\n.@{ionicons-prefix}android-forums:before { content: @ionicon-var-android-forums; }\n.@{ionicons-prefix}android-friends:before { content: @ionicon-var-android-friends; }\n.@{ionicons-prefix}android-hand:before { content: @ionicon-var-android-hand; }\n.@{ionicons-prefix}android-image:before { content: @ionicon-var-android-image; }\n.@{ionicons-prefix}android-inbox:before { content: @ionicon-var-android-inbox; }\n.@{ionicons-prefix}android-information:before { content: @ionicon-var-android-information; }\n.@{ionicons-prefix}android-keypad:before { content: @ionicon-var-android-keypad; }\n.@{ionicons-prefix}android-lightbulb:before { content: @ionicon-var-android-lightbulb; }\n.@{ionicons-prefix}android-locate:before { content: @ionicon-var-android-locate; }\n.@{ionicons-prefix}android-location:before { content: @ionicon-var-android-location; }\n.@{ionicons-prefix}android-mail:before { content: @ionicon-var-android-mail; }\n.@{ionicons-prefix}android-microphone:before { content: @ionicon-var-android-microphone; }\n.@{ionicons-prefix}android-mixer:before { content: @ionicon-var-android-mixer; }\n.@{ionicons-prefix}android-more:before { content: @ionicon-var-android-more; }\n.@{ionicons-prefix}android-note:before { content: @ionicon-var-android-note; }\n.@{ionicons-prefix}android-playstore:before { content: @ionicon-var-android-playstore; }\n.@{ionicons-prefix}android-printer:before { content: @ionicon-var-android-printer; }\n.@{ionicons-prefix}android-promotion:before { content: @ionicon-var-android-promotion; }\n.@{ionicons-prefix}android-reminder:before { content: @ionicon-var-android-reminder; }\n.@{ionicons-prefix}android-remove:before { content: @ionicon-var-android-remove; }\n.@{ionicons-prefix}android-search:before { content: @ionicon-var-android-search; }\n.@{ionicons-prefix}android-send:before { content: @ionicon-var-android-send; }\n.@{ionicons-prefix}android-settings:before { content: @ionicon-var-android-settings; }\n.@{ionicons-prefix}android-share:before { content: @ionicon-var-android-share; }\n.@{ionicons-prefix}android-social:before { content: @ionicon-var-android-social; }\n.@{ionicons-prefix}android-social-user:before { content: @ionicon-var-android-social-user; }\n.@{ionicons-prefix}android-sort:before { content: @ionicon-var-android-sort; }\n.@{ionicons-prefix}android-stair-drawer:before { content: @ionicon-var-android-stair-drawer; }\n.@{ionicons-prefix}android-star:before { content: @ionicon-var-android-star; }\n.@{ionicons-prefix}android-stopwatch:before { content: @ionicon-var-android-stopwatch; }\n.@{ionicons-prefix}android-storage:before { content: @ionicon-var-android-storage; }\n.@{ionicons-prefix}android-system-back:before { content: @ionicon-var-android-system-back; }\n.@{ionicons-prefix}android-system-home:before { content: @ionicon-var-android-system-home; }\n.@{ionicons-prefix}android-system-windows:before { content: @ionicon-var-android-system-windows; }\n.@{ionicons-prefix}android-timer:before { content: @ionicon-var-android-timer; }\n.@{ionicons-prefix}android-trash:before { content: @ionicon-var-android-trash; }\n.@{ionicons-prefix}android-user-menu:before { content: @ionicon-var-android-user-menu; }\n.@{ionicons-prefix}android-volume:before { content: @ionicon-var-android-volume; }\n.@{ionicons-prefix}android-wifi:before { content: @ionicon-var-android-wifi; }\n.@{ionicons-prefix}aperture:before { content: @ionicon-var-aperture; }\n.@{ionicons-prefix}archive:before { content: @ionicon-var-archive; }\n.@{ionicons-prefix}arrow-down-a:before { content: @ionicon-var-arrow-down-a; }\n.@{ionicons-prefix}arrow-down-b:before { content: @ionicon-var-arrow-down-b; }\n.@{ionicons-prefix}arrow-down-c:before { content: @ionicon-var-arrow-down-c; }\n.@{ionicons-prefix}arrow-expand:before { content: @ionicon-var-arrow-expand; }\n.@{ionicons-prefix}arrow-graph-down-left:before { content: @ionicon-var-arrow-graph-down-left; }\n.@{ionicons-prefix}arrow-graph-down-right:before { content: @ionicon-var-arrow-graph-down-right; }\n.@{ionicons-prefix}arrow-graph-up-left:before { content: @ionicon-var-arrow-graph-up-left; }\n.@{ionicons-prefix}arrow-graph-up-right:before { content: @ionicon-var-arrow-graph-up-right; }\n.@{ionicons-prefix}arrow-left-a:before { content: @ionicon-var-arrow-left-a; }\n.@{ionicons-prefix}arrow-left-b:before { content: @ionicon-var-arrow-left-b; }\n.@{ionicons-prefix}arrow-left-c:before { content: @ionicon-var-arrow-left-c; }\n.@{ionicons-prefix}arrow-move:before { content: @ionicon-var-arrow-move; }\n.@{ionicons-prefix}arrow-resize:before { content: @ionicon-var-arrow-resize; }\n.@{ionicons-prefix}arrow-return-left:before { content: @ionicon-var-arrow-return-left; }\n.@{ionicons-prefix}arrow-return-right:before { content: @ionicon-var-arrow-return-right; }\n.@{ionicons-prefix}arrow-right-a:before { content: @ionicon-var-arrow-right-a; }\n.@{ionicons-prefix}arrow-right-b:before { content: @ionicon-var-arrow-right-b; }\n.@{ionicons-prefix}arrow-right-c:before { content: @ionicon-var-arrow-right-c; }\n.@{ionicons-prefix}arrow-shrink:before { content: @ionicon-var-arrow-shrink; }\n.@{ionicons-prefix}arrow-swap:before { content: @ionicon-var-arrow-swap; }\n.@{ionicons-prefix}arrow-up-a:before { content: @ionicon-var-arrow-up-a; }\n.@{ionicons-prefix}arrow-up-b:before { content: @ionicon-var-arrow-up-b; }\n.@{ionicons-prefix}arrow-up-c:before { content: @ionicon-var-arrow-up-c; }\n.@{ionicons-prefix}asterisk:before { content: @ionicon-var-asterisk; }\n.@{ionicons-prefix}at:before { content: @ionicon-var-at; }\n.@{ionicons-prefix}bag:before { content: @ionicon-var-bag; }\n.@{ionicons-prefix}battery-charging:before { content: @ionicon-var-battery-charging; }\n.@{ionicons-prefix}battery-empty:before { content: @ionicon-var-battery-empty; }\n.@{ionicons-prefix}battery-full:before { content: @ionicon-var-battery-full; }\n.@{ionicons-prefix}battery-half:before { content: @ionicon-var-battery-half; }\n.@{ionicons-prefix}battery-low:before { content: @ionicon-var-battery-low; }\n.@{ionicons-prefix}beaker:before { content: @ionicon-var-beaker; }\n.@{ionicons-prefix}beer:before { content: @ionicon-var-beer; }\n.@{ionicons-prefix}bluetooth:before { content: @ionicon-var-bluetooth; }\n.@{ionicons-prefix}bonfire:before { content: @ionicon-var-bonfire; }\n.@{ionicons-prefix}bookmark:before { content: @ionicon-var-bookmark; }\n.@{ionicons-prefix}briefcase:before { content: @ionicon-var-briefcase; }\n.@{ionicons-prefix}bug:before { content: @ionicon-var-bug; }\n.@{ionicons-prefix}calculator:before { content: @ionicon-var-calculator; }\n.@{ionicons-prefix}calendar:before { content: @ionicon-var-calendar; }\n.@{ionicons-prefix}camera:before { content: @ionicon-var-camera; }\n.@{ionicons-prefix}card:before { content: @ionicon-var-card; }\n.@{ionicons-prefix}cash:before { content: @ionicon-var-cash; }\n.@{ionicons-prefix}chatbox:before { content: @ionicon-var-chatbox; }\n.@{ionicons-prefix}chatbox-working:before { content: @ionicon-var-chatbox-working; }\n.@{ionicons-prefix}chatboxes:before { content: @ionicon-var-chatboxes; }\n.@{ionicons-prefix}chatbubble:before { content: @ionicon-var-chatbubble; }\n.@{ionicons-prefix}chatbubble-working:before { content: @ionicon-var-chatbubble-working; }\n.@{ionicons-prefix}chatbubbles:before { content: @ionicon-var-chatbubbles; }\n.@{ionicons-prefix}checkmark:before { content: @ionicon-var-checkmark; }\n.@{ionicons-prefix}checkmark-circled:before { content: @ionicon-var-checkmark-circled; }\n.@{ionicons-prefix}checkmark-round:before { content: @ionicon-var-checkmark-round; }\n.@{ionicons-prefix}chevron-down:before { content: @ionicon-var-chevron-down; }\n.@{ionicons-prefix}chevron-left:before { content: @ionicon-var-chevron-left; }\n.@{ionicons-prefix}chevron-right:before { content: @ionicon-var-chevron-right; }\n.@{ionicons-prefix}chevron-up:before { content: @ionicon-var-chevron-up; }\n.@{ionicons-prefix}clipboard:before { content: @ionicon-var-clipboard; }\n.@{ionicons-prefix}clock:before { content: @ionicon-var-clock; }\n.@{ionicons-prefix}close:before { content: @ionicon-var-close; }\n.@{ionicons-prefix}close-circled:before { content: @ionicon-var-close-circled; }\n.@{ionicons-prefix}close-round:before { content: @ionicon-var-close-round; }\n.@{ionicons-prefix}closed-captioning:before { content: @ionicon-var-closed-captioning; }\n.@{ionicons-prefix}cloud:before { content: @ionicon-var-cloud; }\n.@{ionicons-prefix}code:before { content: @ionicon-var-code; }\n.@{ionicons-prefix}code-download:before { content: @ionicon-var-code-download; }\n.@{ionicons-prefix}code-working:before { content: @ionicon-var-code-working; }\n.@{ionicons-prefix}coffee:before { content: @ionicon-var-coffee; }\n.@{ionicons-prefix}compass:before { content: @ionicon-var-compass; }\n.@{ionicons-prefix}compose:before { content: @ionicon-var-compose; }\n.@{ionicons-prefix}connection-bars:before { content: @ionicon-var-connection-bars; }\n.@{ionicons-prefix}contrast:before { content: @ionicon-var-contrast; }\n.@{ionicons-prefix}cube:before { content: @ionicon-var-cube; }\n.@{ionicons-prefix}disc:before { content: @ionicon-var-disc; }\n.@{ionicons-prefix}document:before { content: @ionicon-var-document; }\n.@{ionicons-prefix}document-text:before { content: @ionicon-var-document-text; }\n.@{ionicons-prefix}drag:before { content: @ionicon-var-drag; }\n.@{ionicons-prefix}earth:before { content: @ionicon-var-earth; }\n.@{ionicons-prefix}edit:before { content: @ionicon-var-edit; }\n.@{ionicons-prefix}egg:before { content: @ionicon-var-egg; }\n.@{ionicons-prefix}eject:before { content: @ionicon-var-eject; }\n.@{ionicons-prefix}email:before { content: @ionicon-var-email; }\n.@{ionicons-prefix}eye:before { content: @ionicon-var-eye; }\n.@{ionicons-prefix}eye-disabled:before { content: @ionicon-var-eye-disabled; }\n.@{ionicons-prefix}female:before { content: @ionicon-var-female; }\n.@{ionicons-prefix}filing:before { content: @ionicon-var-filing; }\n.@{ionicons-prefix}film-marker:before { content: @ionicon-var-film-marker; }\n.@{ionicons-prefix}fireball:before { content: @ionicon-var-fireball; }\n.@{ionicons-prefix}flag:before { content: @ionicon-var-flag; }\n.@{ionicons-prefix}flame:before { content: @ionicon-var-flame; }\n.@{ionicons-prefix}flash:before { content: @ionicon-var-flash; }\n.@{ionicons-prefix}flash-off:before { content: @ionicon-var-flash-off; }\n.@{ionicons-prefix}flask:before { content: @ionicon-var-flask; }\n.@{ionicons-prefix}folder:before { content: @ionicon-var-folder; }\n.@{ionicons-prefix}fork:before { content: @ionicon-var-fork; }\n.@{ionicons-prefix}fork-repo:before { content: @ionicon-var-fork-repo; }\n.@{ionicons-prefix}forward:before { content: @ionicon-var-forward; }\n.@{ionicons-prefix}funnel:before { content: @ionicon-var-funnel; }\n.@{ionicons-prefix}game-controller-a:before { content: @ionicon-var-game-controller-a; }\n.@{ionicons-prefix}game-controller-b:before { content: @ionicon-var-game-controller-b; }\n.@{ionicons-prefix}gear-a:before { content: @ionicon-var-gear-a; }\n.@{ionicons-prefix}gear-b:before { content: @ionicon-var-gear-b; }\n.@{ionicons-prefix}grid:before { content: @ionicon-var-grid; }\n.@{ionicons-prefix}hammer:before { content: @ionicon-var-hammer; }\n.@{ionicons-prefix}happy:before { content: @ionicon-var-happy; }\n.@{ionicons-prefix}headphone:before { content: @ionicon-var-headphone; }\n.@{ionicons-prefix}heart:before { content: @ionicon-var-heart; }\n.@{ionicons-prefix}heart-broken:before { content: @ionicon-var-heart-broken; }\n.@{ionicons-prefix}help:before { content: @ionicon-var-help; }\n.@{ionicons-prefix}help-buoy:before { content: @ionicon-var-help-buoy; }\n.@{ionicons-prefix}help-circled:before { content: @ionicon-var-help-circled; }\n.@{ionicons-prefix}home:before { content: @ionicon-var-home; }\n.@{ionicons-prefix}icecream:before { content: @ionicon-var-icecream; }\n.@{ionicons-prefix}icon-social-google-plus:before { content: @ionicon-var-icon-social-google-plus; }\n.@{ionicons-prefix}icon-social-google-plus-outline:before { content: @ionicon-var-icon-social-google-plus-outline; }\n.@{ionicons-prefix}image:before { content: @ionicon-var-image; }\n.@{ionicons-prefix}images:before { content: @ionicon-var-images; }\n.@{ionicons-prefix}information:before { content: @ionicon-var-information; }\n.@{ionicons-prefix}information-circled:before { content: @ionicon-var-information-circled; }\n.@{ionicons-prefix}ionic:before { content: @ionicon-var-ionic; }\n.@{ionicons-prefix}ios7-alarm:before { content: @ionicon-var-ios7-alarm; }\n.@{ionicons-prefix}ios7-alarm-outline:before { content: @ionicon-var-ios7-alarm-outline; }\n.@{ionicons-prefix}ios7-albums:before { content: @ionicon-var-ios7-albums; }\n.@{ionicons-prefix}ios7-albums-outline:before { content: @ionicon-var-ios7-albums-outline; }\n.@{ionicons-prefix}ios7-americanfootball:before { content: @ionicon-var-ios7-americanfootball; }\n.@{ionicons-prefix}ios7-americanfootball-outline:before { content: @ionicon-var-ios7-americanfootball-outline; }\n.@{ionicons-prefix}ios7-analytics:before { content: @ionicon-var-ios7-analytics; }\n.@{ionicons-prefix}ios7-analytics-outline:before { content: @ionicon-var-ios7-analytics-outline; }\n.@{ionicons-prefix}ios7-arrow-back:before { content: @ionicon-var-ios7-arrow-back; }\n.@{ionicons-prefix}ios7-arrow-down:before { content: @ionicon-var-ios7-arrow-down; }\n.@{ionicons-prefix}ios7-arrow-forward:before { content: @ionicon-var-ios7-arrow-forward; }\n.@{ionicons-prefix}ios7-arrow-left:before { content: @ionicon-var-ios7-arrow-left; }\n.@{ionicons-prefix}ios7-arrow-right:before { content: @ionicon-var-ios7-arrow-right; }\n.@{ionicons-prefix}ios7-arrow-thin-down:before { content: @ionicon-var-ios7-arrow-thin-down; }\n.@{ionicons-prefix}ios7-arrow-thin-left:before { content: @ionicon-var-ios7-arrow-thin-left; }\n.@{ionicons-prefix}ios7-arrow-thin-right:before { content: @ionicon-var-ios7-arrow-thin-right; }\n.@{ionicons-prefix}ios7-arrow-thin-up:before { content: @ionicon-var-ios7-arrow-thin-up; }\n.@{ionicons-prefix}ios7-arrow-up:before { content: @ionicon-var-ios7-arrow-up; }\n.@{ionicons-prefix}ios7-at:before { content: @ionicon-var-ios7-at; }\n.@{ionicons-prefix}ios7-at-outline:before { content: @ionicon-var-ios7-at-outline; }\n.@{ionicons-prefix}ios7-barcode:before { content: @ionicon-var-ios7-barcode; }\n.@{ionicons-prefix}ios7-barcode-outline:before { content: @ionicon-var-ios7-barcode-outline; }\n.@{ionicons-prefix}ios7-baseball:before { content: @ionicon-var-ios7-baseball; }\n.@{ionicons-prefix}ios7-baseball-outline:before { content: @ionicon-var-ios7-baseball-outline; }\n.@{ionicons-prefix}ios7-basketball:before { content: @ionicon-var-ios7-basketball; }\n.@{ionicons-prefix}ios7-basketball-outline:before { content: @ionicon-var-ios7-basketball-outline; }\n.@{ionicons-prefix}ios7-bell:before { content: @ionicon-var-ios7-bell; }\n.@{ionicons-prefix}ios7-bell-outline:before { content: @ionicon-var-ios7-bell-outline; }\n.@{ionicons-prefix}ios7-bolt:before { content: @ionicon-var-ios7-bolt; }\n.@{ionicons-prefix}ios7-bolt-outline:before { content: @ionicon-var-ios7-bolt-outline; }\n.@{ionicons-prefix}ios7-bookmarks:before { content: @ionicon-var-ios7-bookmarks; }\n.@{ionicons-prefix}ios7-bookmarks-outline:before { content: @ionicon-var-ios7-bookmarks-outline; }\n.@{ionicons-prefix}ios7-box:before { content: @ionicon-var-ios7-box; }\n.@{ionicons-prefix}ios7-box-outline:before { content: @ionicon-var-ios7-box-outline; }\n.@{ionicons-prefix}ios7-briefcase:before { content: @ionicon-var-ios7-briefcase; }\n.@{ionicons-prefix}ios7-briefcase-outline:before { content: @ionicon-var-ios7-briefcase-outline; }\n.@{ionicons-prefix}ios7-browsers:before { content: @ionicon-var-ios7-browsers; }\n.@{ionicons-prefix}ios7-browsers-outline:before { content: @ionicon-var-ios7-browsers-outline; }\n.@{ionicons-prefix}ios7-calculator:before { content: @ionicon-var-ios7-calculator; }\n.@{ionicons-prefix}ios7-calculator-outline:before { content: @ionicon-var-ios7-calculator-outline; }\n.@{ionicons-prefix}ios7-calendar:before { content: @ionicon-var-ios7-calendar; }\n.@{ionicons-prefix}ios7-calendar-outline:before { content: @ionicon-var-ios7-calendar-outline; }\n.@{ionicons-prefix}ios7-camera:before { content: @ionicon-var-ios7-camera; }\n.@{ionicons-prefix}ios7-camera-outline:before { content: @ionicon-var-ios7-camera-outline; }\n.@{ionicons-prefix}ios7-cart:before { content: @ionicon-var-ios7-cart; }\n.@{ionicons-prefix}ios7-cart-outline:before { content: @ionicon-var-ios7-cart-outline; }\n.@{ionicons-prefix}ios7-chatboxes:before { content: @ionicon-var-ios7-chatboxes; }\n.@{ionicons-prefix}ios7-chatboxes-outline:before { content: @ionicon-var-ios7-chatboxes-outline; }\n.@{ionicons-prefix}ios7-chatbubble:before { content: @ionicon-var-ios7-chatbubble; }\n.@{ionicons-prefix}ios7-chatbubble-outline:before { content: @ionicon-var-ios7-chatbubble-outline; }\n.@{ionicons-prefix}ios7-checkmark:before { content: @ionicon-var-ios7-checkmark; }\n.@{ionicons-prefix}ios7-checkmark-empty:before { content: @ionicon-var-ios7-checkmark-empty; }\n.@{ionicons-prefix}ios7-checkmark-outline:before { content: @ionicon-var-ios7-checkmark-outline; }\n.@{ionicons-prefix}ios7-circle-filled:before { content: @ionicon-var-ios7-circle-filled; }\n.@{ionicons-prefix}ios7-circle-outline:before { content: @ionicon-var-ios7-circle-outline; }\n.@{ionicons-prefix}ios7-clock:before { content: @ionicon-var-ios7-clock; }\n.@{ionicons-prefix}ios7-clock-outline:before { content: @ionicon-var-ios7-clock-outline; }\n.@{ionicons-prefix}ios7-close:before { content: @ionicon-var-ios7-close; }\n.@{ionicons-prefix}ios7-close-empty:before { content: @ionicon-var-ios7-close-empty; }\n.@{ionicons-prefix}ios7-close-outline:before { content: @ionicon-var-ios7-close-outline; }\n.@{ionicons-prefix}ios7-cloud:before { content: @ionicon-var-ios7-cloud; }\n.@{ionicons-prefix}ios7-cloud-download:before { content: @ionicon-var-ios7-cloud-download; }\n.@{ionicons-prefix}ios7-cloud-download-outline:before { content: @ionicon-var-ios7-cloud-download-outline; }\n.@{ionicons-prefix}ios7-cloud-outline:before { content: @ionicon-var-ios7-cloud-outline; }\n.@{ionicons-prefix}ios7-cloud-upload:before { content: @ionicon-var-ios7-cloud-upload; }\n.@{ionicons-prefix}ios7-cloud-upload-outline:before { content: @ionicon-var-ios7-cloud-upload-outline; }\n.@{ionicons-prefix}ios7-cloudy:before { content: @ionicon-var-ios7-cloudy; }\n.@{ionicons-prefix}ios7-cloudy-night:before { content: @ionicon-var-ios7-cloudy-night; }\n.@{ionicons-prefix}ios7-cloudy-night-outline:before { content: @ionicon-var-ios7-cloudy-night-outline; }\n.@{ionicons-prefix}ios7-cloudy-outline:before { content: @ionicon-var-ios7-cloudy-outline; }\n.@{ionicons-prefix}ios7-cog:before { content: @ionicon-var-ios7-cog; }\n.@{ionicons-prefix}ios7-cog-outline:before { content: @ionicon-var-ios7-cog-outline; }\n.@{ionicons-prefix}ios7-compose:before { content: @ionicon-var-ios7-compose; }\n.@{ionicons-prefix}ios7-compose-outline:before { content: @ionicon-var-ios7-compose-outline; }\n.@{ionicons-prefix}ios7-contact:before { content: @ionicon-var-ios7-contact; }\n.@{ionicons-prefix}ios7-contact-outline:before { content: @ionicon-var-ios7-contact-outline; }\n.@{ionicons-prefix}ios7-copy:before { content: @ionicon-var-ios7-copy; }\n.@{ionicons-prefix}ios7-copy-outline:before { content: @ionicon-var-ios7-copy-outline; }\n.@{ionicons-prefix}ios7-download:before { content: @ionicon-var-ios7-download; }\n.@{ionicons-prefix}ios7-download-outline:before { content: @ionicon-var-ios7-download-outline; }\n.@{ionicons-prefix}ios7-drag:before { content: @ionicon-var-ios7-drag; }\n.@{ionicons-prefix}ios7-email:before { content: @ionicon-var-ios7-email; }\n.@{ionicons-prefix}ios7-email-outline:before { content: @ionicon-var-ios7-email-outline; }\n.@{ionicons-prefix}ios7-expand:before { content: @ionicon-var-ios7-expand; }\n.@{ionicons-prefix}ios7-eye:before { content: @ionicon-var-ios7-eye; }\n.@{ionicons-prefix}ios7-eye-outline:before { content: @ionicon-var-ios7-eye-outline; }\n.@{ionicons-prefix}ios7-fastforward:before { content: @ionicon-var-ios7-fastforward; }\n.@{ionicons-prefix}ios7-fastforward-outline:before { content: @ionicon-var-ios7-fastforward-outline; }\n.@{ionicons-prefix}ios7-filing:before { content: @ionicon-var-ios7-filing; }\n.@{ionicons-prefix}ios7-filing-outline:before { content: @ionicon-var-ios7-filing-outline; }\n.@{ionicons-prefix}ios7-film:before { content: @ionicon-var-ios7-film; }\n.@{ionicons-prefix}ios7-film-outline:before { content: @ionicon-var-ios7-film-outline; }\n.@{ionicons-prefix}ios7-flag:before { content: @ionicon-var-ios7-flag; }\n.@{ionicons-prefix}ios7-flag-outline:before { content: @ionicon-var-ios7-flag-outline; }\n.@{ionicons-prefix}ios7-folder:before { content: @ionicon-var-ios7-folder; }\n.@{ionicons-prefix}ios7-folder-outline:before { content: @ionicon-var-ios7-folder-outline; }\n.@{ionicons-prefix}ios7-football:before { content: @ionicon-var-ios7-football; }\n.@{ionicons-prefix}ios7-football-outline:before { content: @ionicon-var-ios7-football-outline; }\n.@{ionicons-prefix}ios7-gear:before { content: @ionicon-var-ios7-gear; }\n.@{ionicons-prefix}ios7-gear-outline:before { content: @ionicon-var-ios7-gear-outline; }\n.@{ionicons-prefix}ios7-glasses:before { content: @ionicon-var-ios7-glasses; }\n.@{ionicons-prefix}ios7-glasses-outline:before { content: @ionicon-var-ios7-glasses-outline; }\n.@{ionicons-prefix}ios7-heart:before { content: @ionicon-var-ios7-heart; }\n.@{ionicons-prefix}ios7-heart-outline:before { content: @ionicon-var-ios7-heart-outline; }\n.@{ionicons-prefix}ios7-help:before { content: @ionicon-var-ios7-help; }\n.@{ionicons-prefix}ios7-help-empty:before { content: @ionicon-var-ios7-help-empty; }\n.@{ionicons-prefix}ios7-help-outline:before { content: @ionicon-var-ios7-help-outline; }\n.@{ionicons-prefix}ios7-home:before { content: @ionicon-var-ios7-home; }\n.@{ionicons-prefix}ios7-home-outline:before { content: @ionicon-var-ios7-home-outline; }\n.@{ionicons-prefix}ios7-infinite:before { content: @ionicon-var-ios7-infinite; }\n.@{ionicons-prefix}ios7-infinite-outline:before { content: @ionicon-var-ios7-infinite-outline; }\n.@{ionicons-prefix}ios7-information:before { content: @ionicon-var-ios7-information; }\n.@{ionicons-prefix}ios7-information-empty:before { content: @ionicon-var-ios7-information-empty; }\n.@{ionicons-prefix}ios7-information-outline:before { content: @ionicon-var-ios7-information-outline; }\n.@{ionicons-prefix}ios7-ionic-outline:before { content: @ionicon-var-ios7-ionic-outline; }\n.@{ionicons-prefix}ios7-keypad:before { content: @ionicon-var-ios7-keypad; }\n.@{ionicons-prefix}ios7-keypad-outline:before { content: @ionicon-var-ios7-keypad-outline; }\n.@{ionicons-prefix}ios7-lightbulb:before { content: @ionicon-var-ios7-lightbulb; }\n.@{ionicons-prefix}ios7-lightbulb-outline:before { content: @ionicon-var-ios7-lightbulb-outline; }\n.@{ionicons-prefix}ios7-location:before { content: @ionicon-var-ios7-location; }\n.@{ionicons-prefix}ios7-location-outline:before { content: @ionicon-var-ios7-location-outline; }\n.@{ionicons-prefix}ios7-locked:before { content: @ionicon-var-ios7-locked; }\n.@{ionicons-prefix}ios7-locked-outline:before { content: @ionicon-var-ios7-locked-outline; }\n.@{ionicons-prefix}ios7-loop:before { content: @ionicon-var-ios7-loop; }\n.@{ionicons-prefix}ios7-loop-strong:before { content: @ionicon-var-ios7-loop-strong; }\n.@{ionicons-prefix}ios7-medkit:before { content: @ionicon-var-ios7-medkit; }\n.@{ionicons-prefix}ios7-medkit-outline:before { content: @ionicon-var-ios7-medkit-outline; }\n.@{ionicons-prefix}ios7-mic:before { content: @ionicon-var-ios7-mic; }\n.@{ionicons-prefix}ios7-mic-off:before { content: @ionicon-var-ios7-mic-off; }\n.@{ionicons-prefix}ios7-mic-outline:before { content: @ionicon-var-ios7-mic-outline; }\n.@{ionicons-prefix}ios7-minus:before { content: @ionicon-var-ios7-minus; }\n.@{ionicons-prefix}ios7-minus-empty:before { content: @ionicon-var-ios7-minus-empty; }\n.@{ionicons-prefix}ios7-minus-outline:before { content: @ionicon-var-ios7-minus-outline; }\n.@{ionicons-prefix}ios7-monitor:before { content: @ionicon-var-ios7-monitor; }\n.@{ionicons-prefix}ios7-monitor-outline:before { content: @ionicon-var-ios7-monitor-outline; }\n.@{ionicons-prefix}ios7-moon:before { content: @ionicon-var-ios7-moon; }\n.@{ionicons-prefix}ios7-moon-outline:before { content: @ionicon-var-ios7-moon-outline; }\n.@{ionicons-prefix}ios7-more:before { content: @ionicon-var-ios7-more; }\n.@{ionicons-prefix}ios7-more-outline:before { content: @ionicon-var-ios7-more-outline; }\n.@{ionicons-prefix}ios7-musical-note:before { content: @ionicon-var-ios7-musical-note; }\n.@{ionicons-prefix}ios7-musical-notes:before { content: @ionicon-var-ios7-musical-notes; }\n.@{ionicons-prefix}ios7-navigate:before { content: @ionicon-var-ios7-navigate; }\n.@{ionicons-prefix}ios7-navigate-outline:before { content: @ionicon-var-ios7-navigate-outline; }\n.@{ionicons-prefix}ios7-paper:before { content: @ionicon-var-ios7-paper; }\n.@{ionicons-prefix}ios7-paper-outline:before { content: @ionicon-var-ios7-paper-outline; }\n.@{ionicons-prefix}ios7-paperplane:before { content: @ionicon-var-ios7-paperplane; }\n.@{ionicons-prefix}ios7-paperplane-outline:before { content: @ionicon-var-ios7-paperplane-outline; }\n.@{ionicons-prefix}ios7-partlysunny:before { content: @ionicon-var-ios7-partlysunny; }\n.@{ionicons-prefix}ios7-partlysunny-outline:before { content: @ionicon-var-ios7-partlysunny-outline; }\n.@{ionicons-prefix}ios7-pause:before { content: @ionicon-var-ios7-pause; }\n.@{ionicons-prefix}ios7-pause-outline:before { content: @ionicon-var-ios7-pause-outline; }\n.@{ionicons-prefix}ios7-paw:before { content: @ionicon-var-ios7-paw; }\n.@{ionicons-prefix}ios7-paw-outline:before { content: @ionicon-var-ios7-paw-outline; }\n.@{ionicons-prefix}ios7-people:before { content: @ionicon-var-ios7-people; }\n.@{ionicons-prefix}ios7-people-outline:before { content: @ionicon-var-ios7-people-outline; }\n.@{ionicons-prefix}ios7-person:before { content: @ionicon-var-ios7-person; }\n.@{ionicons-prefix}ios7-person-outline:before { content: @ionicon-var-ios7-person-outline; }\n.@{ionicons-prefix}ios7-personadd:before { content: @ionicon-var-ios7-personadd; }\n.@{ionicons-prefix}ios7-personadd-outline:before { content: @ionicon-var-ios7-personadd-outline; }\n.@{ionicons-prefix}ios7-photos:before { content: @ionicon-var-ios7-photos; }\n.@{ionicons-prefix}ios7-photos-outline:before { content: @ionicon-var-ios7-photos-outline; }\n.@{ionicons-prefix}ios7-pie:before { content: @ionicon-var-ios7-pie; }\n.@{ionicons-prefix}ios7-pie-outline:before { content: @ionicon-var-ios7-pie-outline; }\n.@{ionicons-prefix}ios7-play:before { content: @ionicon-var-ios7-play; }\n.@{ionicons-prefix}ios7-play-outline:before { content: @ionicon-var-ios7-play-outline; }\n.@{ionicons-prefix}ios7-plus:before { content: @ionicon-var-ios7-plus; }\n.@{ionicons-prefix}ios7-plus-empty:before { content: @ionicon-var-ios7-plus-empty; }\n.@{ionicons-prefix}ios7-plus-outline:before { content: @ionicon-var-ios7-plus-outline; }\n.@{ionicons-prefix}ios7-pricetag:before { content: @ionicon-var-ios7-pricetag; }\n.@{ionicons-prefix}ios7-pricetag-outline:before { content: @ionicon-var-ios7-pricetag-outline; }\n.@{ionicons-prefix}ios7-pricetags:before { content: @ionicon-var-ios7-pricetags; }\n.@{ionicons-prefix}ios7-pricetags-outline:before { content: @ionicon-var-ios7-pricetags-outline; }\n.@{ionicons-prefix}ios7-printer:before { content: @ionicon-var-ios7-printer; }\n.@{ionicons-prefix}ios7-printer-outline:before { content: @ionicon-var-ios7-printer-outline; }\n.@{ionicons-prefix}ios7-pulse:before { content: @ionicon-var-ios7-pulse; }\n.@{ionicons-prefix}ios7-pulse-strong:before { content: @ionicon-var-ios7-pulse-strong; }\n.@{ionicons-prefix}ios7-rainy:before { content: @ionicon-var-ios7-rainy; }\n.@{ionicons-prefix}ios7-rainy-outline:before { content: @ionicon-var-ios7-rainy-outline; }\n.@{ionicons-prefix}ios7-recording:before { content: @ionicon-var-ios7-recording; }\n.@{ionicons-prefix}ios7-recording-outline:before { content: @ionicon-var-ios7-recording-outline; }\n.@{ionicons-prefix}ios7-redo:before { content: @ionicon-var-ios7-redo; }\n.@{ionicons-prefix}ios7-redo-outline:before { content: @ionicon-var-ios7-redo-outline; }\n.@{ionicons-prefix}ios7-refresh:before { content: @ionicon-var-ios7-refresh; }\n.@{ionicons-prefix}ios7-refresh-empty:before { content: @ionicon-var-ios7-refresh-empty; }\n.@{ionicons-prefix}ios7-refresh-outline:before { content: @ionicon-var-ios7-refresh-outline; }\n.@{ionicons-prefix}ios7-reload:before { content: @ionicon-var-ios7-reload; }\n.@{ionicons-prefix}ios7-reverse-camera:before { content: @ionicon-var-ios7-reverse-camera; }\n.@{ionicons-prefix}ios7-reverse-camera-outline:before { content: @ionicon-var-ios7-reverse-camera-outline; }\n.@{ionicons-prefix}ios7-rewind:before { content: @ionicon-var-ios7-rewind; }\n.@{ionicons-prefix}ios7-rewind-outline:before { content: @ionicon-var-ios7-rewind-outline; }\n.@{ionicons-prefix}ios7-search:before { content: @ionicon-var-ios7-search; }\n.@{ionicons-prefix}ios7-search-strong:before { content: @ionicon-var-ios7-search-strong; }\n.@{ionicons-prefix}ios7-settings:before { content: @ionicon-var-ios7-settings; }\n.@{ionicons-prefix}ios7-settings-strong:before { content: @ionicon-var-ios7-settings-strong; }\n.@{ionicons-prefix}ios7-shrink:before { content: @ionicon-var-ios7-shrink; }\n.@{ionicons-prefix}ios7-skipbackward:before { content: @ionicon-var-ios7-skipbackward; }\n.@{ionicons-prefix}ios7-skipbackward-outline:before { content: @ionicon-var-ios7-skipbackward-outline; }\n.@{ionicons-prefix}ios7-skipforward:before { content: @ionicon-var-ios7-skipforward; }\n.@{ionicons-prefix}ios7-skipforward-outline:before { content: @ionicon-var-ios7-skipforward-outline; }\n.@{ionicons-prefix}ios7-snowy:before { content: @ionicon-var-ios7-snowy; }\n.@{ionicons-prefix}ios7-speedometer:before { content: @ionicon-var-ios7-speedometer; }\n.@{ionicons-prefix}ios7-speedometer-outline:before { content: @ionicon-var-ios7-speedometer-outline; }\n.@{ionicons-prefix}ios7-star:before { content: @ionicon-var-ios7-star; }\n.@{ionicons-prefix}ios7-star-half:before { content: @ionicon-var-ios7-star-half; }\n.@{ionicons-prefix}ios7-star-outline:before { content: @ionicon-var-ios7-star-outline; }\n.@{ionicons-prefix}ios7-stopwatch:before { content: @ionicon-var-ios7-stopwatch; }\n.@{ionicons-prefix}ios7-stopwatch-outline:before { content: @ionicon-var-ios7-stopwatch-outline; }\n.@{ionicons-prefix}ios7-sunny:before { content: @ionicon-var-ios7-sunny; }\n.@{ionicons-prefix}ios7-sunny-outline:before { content: @ionicon-var-ios7-sunny-outline; }\n.@{ionicons-prefix}ios7-telephone:before { content: @ionicon-var-ios7-telephone; }\n.@{ionicons-prefix}ios7-telephone-outline:before { content: @ionicon-var-ios7-telephone-outline; }\n.@{ionicons-prefix}ios7-tennisball:before { content: @ionicon-var-ios7-tennisball; }\n.@{ionicons-prefix}ios7-tennisball-outline:before { content: @ionicon-var-ios7-tennisball-outline; }\n.@{ionicons-prefix}ios7-thunderstorm:before { content: @ionicon-var-ios7-thunderstorm; }\n.@{ionicons-prefix}ios7-thunderstorm-outline:before { content: @ionicon-var-ios7-thunderstorm-outline; }\n.@{ionicons-prefix}ios7-time:before { content: @ionicon-var-ios7-time; }\n.@{ionicons-prefix}ios7-time-outline:before { content: @ionicon-var-ios7-time-outline; }\n.@{ionicons-prefix}ios7-timer:before { content: @ionicon-var-ios7-timer; }\n.@{ionicons-prefix}ios7-timer-outline:before { content: @ionicon-var-ios7-timer-outline; }\n.@{ionicons-prefix}ios7-toggle:before { content: @ionicon-var-ios7-toggle; }\n.@{ionicons-prefix}ios7-toggle-outline:before { content: @ionicon-var-ios7-toggle-outline; }\n.@{ionicons-prefix}ios7-trash:before { content: @ionicon-var-ios7-trash; }\n.@{ionicons-prefix}ios7-trash-outline:before { content: @ionicon-var-ios7-trash-outline; }\n.@{ionicons-prefix}ios7-undo:before { content: @ionicon-var-ios7-undo; }\n.@{ionicons-prefix}ios7-undo-outline:before { content: @ionicon-var-ios7-undo-outline; }\n.@{ionicons-prefix}ios7-unlocked:before { content: @ionicon-var-ios7-unlocked; }\n.@{ionicons-prefix}ios7-unlocked-outline:before { content: @ionicon-var-ios7-unlocked-outline; }\n.@{ionicons-prefix}ios7-upload:before { content: @ionicon-var-ios7-upload; }\n.@{ionicons-prefix}ios7-upload-outline:before { content: @ionicon-var-ios7-upload-outline; }\n.@{ionicons-prefix}ios7-videocam:before { content: @ionicon-var-ios7-videocam; }\n.@{ionicons-prefix}ios7-videocam-outline:before { content: @ionicon-var-ios7-videocam-outline; }\n.@{ionicons-prefix}ios7-volume-high:before { content: @ionicon-var-ios7-volume-high; }\n.@{ionicons-prefix}ios7-volume-low:before { content: @ionicon-var-ios7-volume-low; }\n.@{ionicons-prefix}ios7-wineglass:before { content: @ionicon-var-ios7-wineglass; }\n.@{ionicons-prefix}ios7-wineglass-outline:before { content: @ionicon-var-ios7-wineglass-outline; }\n.@{ionicons-prefix}ios7-world:before { content: @ionicon-var-ios7-world; }\n.@{ionicons-prefix}ios7-world-outline:before { content: @ionicon-var-ios7-world-outline; }\n.@{ionicons-prefix}ipad:before { content: @ionicon-var-ipad; }\n.@{ionicons-prefix}iphone:before { content: @ionicon-var-iphone; }\n.@{ionicons-prefix}ipod:before { content: @ionicon-var-ipod; }\n.@{ionicons-prefix}jet:before { content: @ionicon-var-jet; }\n.@{ionicons-prefix}key:before { content: @ionicon-var-key; }\n.@{ionicons-prefix}knife:before { content: @ionicon-var-knife; }\n.@{ionicons-prefix}laptop:before { content: @ionicon-var-laptop; }\n.@{ionicons-prefix}leaf:before { content: @ionicon-var-leaf; }\n.@{ionicons-prefix}levels:before { content: @ionicon-var-levels; }\n.@{ionicons-prefix}lightbulb:before { content: @ionicon-var-lightbulb; }\n.@{ionicons-prefix}link:before { content: @ionicon-var-link; }\n.@{ionicons-prefix}load-a:before { content: @ionicon-var-load-a; }\n.@{ionicons-prefix}load-b:before { content: @ionicon-var-load-b; }\n.@{ionicons-prefix}load-c:before { content: @ionicon-var-load-c; }\n.@{ionicons-prefix}load-d:before { content: @ionicon-var-load-d; }\n.@{ionicons-prefix}location:before { content: @ionicon-var-location; }\n.@{ionicons-prefix}locked:before { content: @ionicon-var-locked; }\n.@{ionicons-prefix}log-in:before { content: @ionicon-var-log-in; }\n.@{ionicons-prefix}log-out:before { content: @ionicon-var-log-out; }\n.@{ionicons-prefix}loop:before { content: @ionicon-var-loop; }\n.@{ionicons-prefix}magnet:before { content: @ionicon-var-magnet; }\n.@{ionicons-prefix}male:before { content: @ionicon-var-male; }\n.@{ionicons-prefix}man:before { content: @ionicon-var-man; }\n.@{ionicons-prefix}map:before { content: @ionicon-var-map; }\n.@{ionicons-prefix}medkit:before { content: @ionicon-var-medkit; }\n.@{ionicons-prefix}merge:before { content: @ionicon-var-merge; }\n.@{ionicons-prefix}mic-a:before { content: @ionicon-var-mic-a; }\n.@{ionicons-prefix}mic-b:before { content: @ionicon-var-mic-b; }\n.@{ionicons-prefix}mic-c:before { content: @ionicon-var-mic-c; }\n.@{ionicons-prefix}minus:before { content: @ionicon-var-minus; }\n.@{ionicons-prefix}minus-circled:before { content: @ionicon-var-minus-circled; }\n.@{ionicons-prefix}minus-round:before { content: @ionicon-var-minus-round; }\n.@{ionicons-prefix}model-s:before { content: @ionicon-var-model-s; }\n.@{ionicons-prefix}monitor:before { content: @ionicon-var-monitor; }\n.@{ionicons-prefix}more:before { content: @ionicon-var-more; }\n.@{ionicons-prefix}mouse:before { content: @ionicon-var-mouse; }\n.@{ionicons-prefix}music-note:before { content: @ionicon-var-music-note; }\n.@{ionicons-prefix}navicon:before { content: @ionicon-var-navicon; }\n.@{ionicons-prefix}navicon-round:before { content: @ionicon-var-navicon-round; }\n.@{ionicons-prefix}navigate:before { content: @ionicon-var-navigate; }\n.@{ionicons-prefix}network:before { content: @ionicon-var-network; }\n.@{ionicons-prefix}no-smoking:before { content: @ionicon-var-no-smoking; }\n.@{ionicons-prefix}nuclear:before { content: @ionicon-var-nuclear; }\n.@{ionicons-prefix}outlet:before { content: @ionicon-var-outlet; }\n.@{ionicons-prefix}paper-airplane:before { content: @ionicon-var-paper-airplane; }\n.@{ionicons-prefix}paperclip:before { content: @ionicon-var-paperclip; }\n.@{ionicons-prefix}pause:before { content: @ionicon-var-pause; }\n.@{ionicons-prefix}person:before { content: @ionicon-var-person; }\n.@{ionicons-prefix}person-add:before { content: @ionicon-var-person-add; }\n.@{ionicons-prefix}person-stalker:before { content: @ionicon-var-person-stalker; }\n.@{ionicons-prefix}pie-graph:before { content: @ionicon-var-pie-graph; }\n.@{ionicons-prefix}pin:before { content: @ionicon-var-pin; }\n.@{ionicons-prefix}pinpoint:before { content: @ionicon-var-pinpoint; }\n.@{ionicons-prefix}pizza:before { content: @ionicon-var-pizza; }\n.@{ionicons-prefix}plane:before { content: @ionicon-var-plane; }\n.@{ionicons-prefix}planet:before { content: @ionicon-var-planet; }\n.@{ionicons-prefix}play:before { content: @ionicon-var-play; }\n.@{ionicons-prefix}playstation:before { content: @ionicon-var-playstation; }\n.@{ionicons-prefix}plus:before { content: @ionicon-var-plus; }\n.@{ionicons-prefix}plus-circled:before { content: @ionicon-var-plus-circled; }\n.@{ionicons-prefix}plus-round:before { content: @ionicon-var-plus-round; }\n.@{ionicons-prefix}podium:before { content: @ionicon-var-podium; }\n.@{ionicons-prefix}pound:before { content: @ionicon-var-pound; }\n.@{ionicons-prefix}power:before { content: @ionicon-var-power; }\n.@{ionicons-prefix}pricetag:before { content: @ionicon-var-pricetag; }\n.@{ionicons-prefix}pricetags:before { content: @ionicon-var-pricetags; }\n.@{ionicons-prefix}printer:before { content: @ionicon-var-printer; }\n.@{ionicons-prefix}pull-request:before { content: @ionicon-var-pull-request; }\n.@{ionicons-prefix}qr-scanner:before { content: @ionicon-var-qr-scanner; }\n.@{ionicons-prefix}quote:before { content: @ionicon-var-quote; }\n.@{ionicons-prefix}radio-waves:before { content: @ionicon-var-radio-waves; }\n.@{ionicons-prefix}record:before { content: @ionicon-var-record; }\n.@{ionicons-prefix}refresh:before { content: @ionicon-var-refresh; }\n.@{ionicons-prefix}reply:before { content: @ionicon-var-reply; }\n.@{ionicons-prefix}reply-all:before { content: @ionicon-var-reply-all; }\n.@{ionicons-prefix}ribbon-a:before { content: @ionicon-var-ribbon-a; }\n.@{ionicons-prefix}ribbon-b:before { content: @ionicon-var-ribbon-b; }\n.@{ionicons-prefix}sad:before { content: @ionicon-var-sad; }\n.@{ionicons-prefix}scissors:before { content: @ionicon-var-scissors; }\n.@{ionicons-prefix}search:before { content: @ionicon-var-search; }\n.@{ionicons-prefix}settings:before { content: @ionicon-var-settings; }\n.@{ionicons-prefix}share:before { content: @ionicon-var-share; }\n.@{ionicons-prefix}shuffle:before { content: @ionicon-var-shuffle; }\n.@{ionicons-prefix}skip-backward:before { content: @ionicon-var-skip-backward; }\n.@{ionicons-prefix}skip-forward:before { content: @ionicon-var-skip-forward; }\n.@{ionicons-prefix}social-android:before { content: @ionicon-var-social-android; }\n.@{ionicons-prefix}social-android-outline:before { content: @ionicon-var-social-android-outline; }\n.@{ionicons-prefix}social-apple:before { content: @ionicon-var-social-apple; }\n.@{ionicons-prefix}social-apple-outline:before { content: @ionicon-var-social-apple-outline; }\n.@{ionicons-prefix}social-bitcoin:before { content: @ionicon-var-social-bitcoin; }\n.@{ionicons-prefix}social-bitcoin-outline:before { content: @ionicon-var-social-bitcoin-outline; }\n.@{ionicons-prefix}social-buffer:before { content: @ionicon-var-social-buffer; }\n.@{ionicons-prefix}social-buffer-outline:before { content: @ionicon-var-social-buffer-outline; }\n.@{ionicons-prefix}social-designernews:before { content: @ionicon-var-social-designernews; }\n.@{ionicons-prefix}social-designernews-outline:before { content: @ionicon-var-social-designernews-outline; }\n.@{ionicons-prefix}social-dribbble:before { content: @ionicon-var-social-dribbble; }\n.@{ionicons-prefix}social-dribbble-outline:before { content: @ionicon-var-social-dribbble-outline; }\n.@{ionicons-prefix}social-dropbox:before { content: @ionicon-var-social-dropbox; }\n.@{ionicons-prefix}social-dropbox-outline:before { content: @ionicon-var-social-dropbox-outline; }\n.@{ionicons-prefix}social-facebook:before { content: @ionicon-var-social-facebook; }\n.@{ionicons-prefix}social-facebook-outline:before { content: @ionicon-var-social-facebook-outline; }\n.@{ionicons-prefix}social-foursquare:before { content: @ionicon-var-social-foursquare; }\n.@{ionicons-prefix}social-foursquare-outline:before { content: @ionicon-var-social-foursquare-outline; }\n.@{ionicons-prefix}social-freebsd-devil:before { content: @ionicon-var-social-freebsd-devil; }\n.@{ionicons-prefix}social-github:before { content: @ionicon-var-social-github; }\n.@{ionicons-prefix}social-github-outline:before { content: @ionicon-var-social-github-outline; }\n.@{ionicons-prefix}social-google:before { content: @ionicon-var-social-google; }\n.@{ionicons-prefix}social-google-outline:before { content: @ionicon-var-social-google-outline; }\n.@{ionicons-prefix}social-googleplus:before { content: @ionicon-var-social-googleplus; }\n.@{ionicons-prefix}social-googleplus-outline:before { content: @ionicon-var-social-googleplus-outline; }\n.@{ionicons-prefix}social-hackernews:before { content: @ionicon-var-social-hackernews; }\n.@{ionicons-prefix}social-hackernews-outline:before { content: @ionicon-var-social-hackernews-outline; }\n.@{ionicons-prefix}social-instagram:before { content: @ionicon-var-social-instagram; }\n.@{ionicons-prefix}social-instagram-outline:before { content: @ionicon-var-social-instagram-outline; }\n.@{ionicons-prefix}social-linkedin:before { content: @ionicon-var-social-linkedin; }\n.@{ionicons-prefix}social-linkedin-outline:before { content: @ionicon-var-social-linkedin-outline; }\n.@{ionicons-prefix}social-pinterest:before { content: @ionicon-var-social-pinterest; }\n.@{ionicons-prefix}social-pinterest-outline:before { content: @ionicon-var-social-pinterest-outline; }\n.@{ionicons-prefix}social-reddit:before { content: @ionicon-var-social-reddit; }\n.@{ionicons-prefix}social-reddit-outline:before { content: @ionicon-var-social-reddit-outline; }\n.@{ionicons-prefix}social-rss:before { content: @ionicon-var-social-rss; }\n.@{ionicons-prefix}social-rss-outline:before { content: @ionicon-var-social-rss-outline; }\n.@{ionicons-prefix}social-skype:before { content: @ionicon-var-social-skype; }\n.@{ionicons-prefix}social-skype-outline:before { content: @ionicon-var-social-skype-outline; }\n.@{ionicons-prefix}social-tumblr:before { content: @ionicon-var-social-tumblr; }\n.@{ionicons-prefix}social-tumblr-outline:before { content: @ionicon-var-social-tumblr-outline; }\n.@{ionicons-prefix}social-tux:before { content: @ionicon-var-social-tux; }\n.@{ionicons-prefix}social-twitter:before { content: @ionicon-var-social-twitter; }\n.@{ionicons-prefix}social-twitter-outline:before { content: @ionicon-var-social-twitter-outline; }\n.@{ionicons-prefix}social-usd:before { content: @ionicon-var-social-usd; }\n.@{ionicons-prefix}social-usd-outline:before { content: @ionicon-var-social-usd-outline; }\n.@{ionicons-prefix}social-vimeo:before { content: @ionicon-var-social-vimeo; }\n.@{ionicons-prefix}social-vimeo-outline:before { content: @ionicon-var-social-vimeo-outline; }\n.@{ionicons-prefix}social-windows:before { content: @ionicon-var-social-windows; }\n.@{ionicons-prefix}social-windows-outline:before { content: @ionicon-var-social-windows-outline; }\n.@{ionicons-prefix}social-wordpress:before { content: @ionicon-var-social-wordpress; }\n.@{ionicons-prefix}social-wordpress-outline:before { content: @ionicon-var-social-wordpress-outline; }\n.@{ionicons-prefix}social-yahoo:before { content: @ionicon-var-social-yahoo; }\n.@{ionicons-prefix}social-yahoo-outline:before { content: @ionicon-var-social-yahoo-outline; }\n.@{ionicons-prefix}social-youtube:before { content: @ionicon-var-social-youtube; }\n.@{ionicons-prefix}social-youtube-outline:before { content: @ionicon-var-social-youtube-outline; }\n.@{ionicons-prefix}speakerphone:before { content: @ionicon-var-speakerphone; }\n.@{ionicons-prefix}speedometer:before { content: @ionicon-var-speedometer; }\n.@{ionicons-prefix}spoon:before { content: @ionicon-var-spoon; }\n.@{ionicons-prefix}star:before { content: @ionicon-var-star; }\n.@{ionicons-prefix}stats-bars:before { content: @ionicon-var-stats-bars; }\n.@{ionicons-prefix}steam:before { content: @ionicon-var-steam; }\n.@{ionicons-prefix}stop:before { content: @ionicon-var-stop; }\n.@{ionicons-prefix}thermometer:before { content: @ionicon-var-thermometer; }\n.@{ionicons-prefix}thumbsdown:before { content: @ionicon-var-thumbsdown; }\n.@{ionicons-prefix}thumbsup:before { content: @ionicon-var-thumbsup; }\n.@{ionicons-prefix}toggle:before { content: @ionicon-var-toggle; }\n.@{ionicons-prefix}toggle-filled:before { content: @ionicon-var-toggle-filled; }\n.@{ionicons-prefix}trash-a:before { content: @ionicon-var-trash-a; }\n.@{ionicons-prefix}trash-b:before { content: @ionicon-var-trash-b; }\n.@{ionicons-prefix}trophy:before { content: @ionicon-var-trophy; }\n.@{ionicons-prefix}umbrella:before { content: @ionicon-var-umbrella; }\n.@{ionicons-prefix}university:before { content: @ionicon-var-university; }\n.@{ionicons-prefix}unlocked:before { content: @ionicon-var-unlocked; }\n.@{ionicons-prefix}upload:before { content: @ionicon-var-upload; }\n.@{ionicons-prefix}usb:before { content: @ionicon-var-usb; }\n.@{ionicons-prefix}videocamera:before { content: @ionicon-var-videocamera; }\n.@{ionicons-prefix}volume-high:before { content: @ionicon-var-volume-high; }\n.@{ionicons-prefix}volume-low:before { content: @ionicon-var-volume-low; }\n.@{ionicons-prefix}volume-medium:before { content: @ionicon-var-volume-medium; }\n.@{ionicons-prefix}volume-mute:before { content: @ionicon-var-volume-mute; }\n.@{ionicons-prefix}wand:before { content: @ionicon-var-wand; }\n.@{ionicons-prefix}waterdrop:before { content: @ionicon-var-waterdrop; }\n.@{ionicons-prefix}wifi:before { content: @ionicon-var-wifi; }\n.@{ionicons-prefix}wineglass:before { content: @ionicon-var-wineglass; }\n.@{ionicons-prefix}woman:before { content: @ionicon-var-woman; }\n.@{ionicons-prefix}wrench:before { content: @ionicon-var-wrench; }\n.@{ionicons-prefix}xbox:before { content: @ionicon-var-xbox; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/less/_ionicons-variables.less",
    "content": "/*!\nIonicons, v1.5.0\nCreated by Ben Sperry for the Ionic Framework, http://ionicons.com/\nhttps://twitter.com/benjsperry  https://twitter.com/ionicframework\nMIT License: https://github.com/driftyco/ionicons\n*/\n// Ionicons Variables\n// --------------------------\n\n@ionicons-font-path: \"../fonts\";\n@ionicons-font-family: \"Ionicons\";\n@ionicons-version: \"1.5.0\";\n@ionicons-prefix: ion-;\n\n@ionicon-var-alert: \"\\f101\";\n@ionicon-var-alert-circled: \"\\f100\";\n@ionicon-var-android-add: \"\\f2c7\";\n@ionicon-var-android-add-contact: \"\\f2c6\";\n@ionicon-var-android-alarm: \"\\f2c8\";\n@ionicon-var-android-archive: \"\\f2c9\";\n@ionicon-var-android-arrow-back: \"\\f2ca\";\n@ionicon-var-android-arrow-down-left: \"\\f2cb\";\n@ionicon-var-android-arrow-down-right: \"\\f2cc\";\n@ionicon-var-android-arrow-forward: \"\\f30f\";\n@ionicon-var-android-arrow-up-left: \"\\f2cd\";\n@ionicon-var-android-arrow-up-right: \"\\f2ce\";\n@ionicon-var-android-battery: \"\\f2cf\";\n@ionicon-var-android-book: \"\\f2d0\";\n@ionicon-var-android-calendar: \"\\f2d1\";\n@ionicon-var-android-call: \"\\f2d2\";\n@ionicon-var-android-camera: \"\\f2d3\";\n@ionicon-var-android-chat: \"\\f2d4\";\n@ionicon-var-android-checkmark: \"\\f2d5\";\n@ionicon-var-android-clock: \"\\f2d6\";\n@ionicon-var-android-close: \"\\f2d7\";\n@ionicon-var-android-contact: \"\\f2d8\";\n@ionicon-var-android-contacts: \"\\f2d9\";\n@ionicon-var-android-data: \"\\f2da\";\n@ionicon-var-android-developer: \"\\f2db\";\n@ionicon-var-android-display: \"\\f2dc\";\n@ionicon-var-android-download: \"\\f2dd\";\n@ionicon-var-android-drawer: \"\\f310\";\n@ionicon-var-android-dropdown: \"\\f2de\";\n@ionicon-var-android-earth: \"\\f2df\";\n@ionicon-var-android-folder: \"\\f2e0\";\n@ionicon-var-android-forums: \"\\f2e1\";\n@ionicon-var-android-friends: \"\\f2e2\";\n@ionicon-var-android-hand: \"\\f2e3\";\n@ionicon-var-android-image: \"\\f2e4\";\n@ionicon-var-android-inbox: \"\\f2e5\";\n@ionicon-var-android-information: \"\\f2e6\";\n@ionicon-var-android-keypad: \"\\f2e7\";\n@ionicon-var-android-lightbulb: \"\\f2e8\";\n@ionicon-var-android-locate: \"\\f2e9\";\n@ionicon-var-android-location: \"\\f2ea\";\n@ionicon-var-android-mail: \"\\f2eb\";\n@ionicon-var-android-microphone: \"\\f2ec\";\n@ionicon-var-android-mixer: \"\\f2ed\";\n@ionicon-var-android-more: \"\\f2ee\";\n@ionicon-var-android-note: \"\\f2ef\";\n@ionicon-var-android-playstore: \"\\f2f0\";\n@ionicon-var-android-printer: \"\\f2f1\";\n@ionicon-var-android-promotion: \"\\f2f2\";\n@ionicon-var-android-reminder: \"\\f2f3\";\n@ionicon-var-android-remove: \"\\f2f4\";\n@ionicon-var-android-search: \"\\f2f5\";\n@ionicon-var-android-send: \"\\f2f6\";\n@ionicon-var-android-settings: \"\\f2f7\";\n@ionicon-var-android-share: \"\\f2f8\";\n@ionicon-var-android-social: \"\\f2fa\";\n@ionicon-var-android-social-user: \"\\f2f9\";\n@ionicon-var-android-sort: \"\\f2fb\";\n@ionicon-var-android-stair-drawer: \"\\f311\";\n@ionicon-var-android-star: \"\\f2fc\";\n@ionicon-var-android-stopwatch: \"\\f2fd\";\n@ionicon-var-android-storage: \"\\f2fe\";\n@ionicon-var-android-system-back: \"\\f2ff\";\n@ionicon-var-android-system-home: \"\\f300\";\n@ionicon-var-android-system-windows: \"\\f301\";\n@ionicon-var-android-timer: \"\\f302\";\n@ionicon-var-android-trash: \"\\f303\";\n@ionicon-var-android-user-menu: \"\\f312\";\n@ionicon-var-android-volume: \"\\f304\";\n@ionicon-var-android-wifi: \"\\f305\";\n@ionicon-var-aperture: \"\\f313\";\n@ionicon-var-archive: \"\\f102\";\n@ionicon-var-arrow-down-a: \"\\f103\";\n@ionicon-var-arrow-down-b: \"\\f104\";\n@ionicon-var-arrow-down-c: \"\\f105\";\n@ionicon-var-arrow-expand: \"\\f25e\";\n@ionicon-var-arrow-graph-down-left: \"\\f25f\";\n@ionicon-var-arrow-graph-down-right: \"\\f260\";\n@ionicon-var-arrow-graph-up-left: \"\\f261\";\n@ionicon-var-arrow-graph-up-right: \"\\f262\";\n@ionicon-var-arrow-left-a: \"\\f106\";\n@ionicon-var-arrow-left-b: \"\\f107\";\n@ionicon-var-arrow-left-c: \"\\f108\";\n@ionicon-var-arrow-move: \"\\f263\";\n@ionicon-var-arrow-resize: \"\\f264\";\n@ionicon-var-arrow-return-left: \"\\f265\";\n@ionicon-var-arrow-return-right: \"\\f266\";\n@ionicon-var-arrow-right-a: \"\\f109\";\n@ionicon-var-arrow-right-b: \"\\f10a\";\n@ionicon-var-arrow-right-c: \"\\f10b\";\n@ionicon-var-arrow-shrink: \"\\f267\";\n@ionicon-var-arrow-swap: \"\\f268\";\n@ionicon-var-arrow-up-a: \"\\f10c\";\n@ionicon-var-arrow-up-b: \"\\f10d\";\n@ionicon-var-arrow-up-c: \"\\f10e\";\n@ionicon-var-asterisk: \"\\f314\";\n@ionicon-var-at: \"\\f10f\";\n@ionicon-var-bag: \"\\f110\";\n@ionicon-var-battery-charging: \"\\f111\";\n@ionicon-var-battery-empty: \"\\f112\";\n@ionicon-var-battery-full: \"\\f113\";\n@ionicon-var-battery-half: \"\\f114\";\n@ionicon-var-battery-low: \"\\f115\";\n@ionicon-var-beaker: \"\\f269\";\n@ionicon-var-beer: \"\\f26a\";\n@ionicon-var-bluetooth: \"\\f116\";\n@ionicon-var-bonfire: \"\\f315\";\n@ionicon-var-bookmark: \"\\f26b\";\n@ionicon-var-briefcase: \"\\f26c\";\n@ionicon-var-bug: \"\\f2be\";\n@ionicon-var-calculator: \"\\f26d\";\n@ionicon-var-calendar: \"\\f117\";\n@ionicon-var-camera: \"\\f118\";\n@ionicon-var-card: \"\\f119\";\n@ionicon-var-cash: \"\\f316\";\n@ionicon-var-chatbox: \"\\f11b\";\n@ionicon-var-chatbox-working: \"\\f11a\";\n@ionicon-var-chatboxes: \"\\f11c\";\n@ionicon-var-chatbubble: \"\\f11e\";\n@ionicon-var-chatbubble-working: \"\\f11d\";\n@ionicon-var-chatbubbles: \"\\f11f\";\n@ionicon-var-checkmark: \"\\f122\";\n@ionicon-var-checkmark-circled: \"\\f120\";\n@ionicon-var-checkmark-round: \"\\f121\";\n@ionicon-var-chevron-down: \"\\f123\";\n@ionicon-var-chevron-left: \"\\f124\";\n@ionicon-var-chevron-right: \"\\f125\";\n@ionicon-var-chevron-up: \"\\f126\";\n@ionicon-var-clipboard: \"\\f127\";\n@ionicon-var-clock: \"\\f26e\";\n@ionicon-var-close: \"\\f12a\";\n@ionicon-var-close-circled: \"\\f128\";\n@ionicon-var-close-round: \"\\f129\";\n@ionicon-var-closed-captioning: \"\\f317\";\n@ionicon-var-cloud: \"\\f12b\";\n@ionicon-var-code: \"\\f271\";\n@ionicon-var-code-download: \"\\f26f\";\n@ionicon-var-code-working: \"\\f270\";\n@ionicon-var-coffee: \"\\f272\";\n@ionicon-var-compass: \"\\f273\";\n@ionicon-var-compose: \"\\f12c\";\n@ionicon-var-connection-bars: \"\\f274\";\n@ionicon-var-contrast: \"\\f275\";\n@ionicon-var-cube: \"\\f318\";\n@ionicon-var-disc: \"\\f12d\";\n@ionicon-var-document: \"\\f12f\";\n@ionicon-var-document-text: \"\\f12e\";\n@ionicon-var-drag: \"\\f130\";\n@ionicon-var-earth: \"\\f276\";\n@ionicon-var-edit: \"\\f2bf\";\n@ionicon-var-egg: \"\\f277\";\n@ionicon-var-eject: \"\\f131\";\n@ionicon-var-email: \"\\f132\";\n@ionicon-var-eye: \"\\f133\";\n@ionicon-var-eye-disabled: \"\\f306\";\n@ionicon-var-female: \"\\f278\";\n@ionicon-var-filing: \"\\f134\";\n@ionicon-var-film-marker: \"\\f135\";\n@ionicon-var-fireball: \"\\f319\";\n@ionicon-var-flag: \"\\f279\";\n@ionicon-var-flame: \"\\f31a\";\n@ionicon-var-flash: \"\\f137\";\n@ionicon-var-flash-off: \"\\f136\";\n@ionicon-var-flask: \"\\f138\";\n@ionicon-var-folder: \"\\f139\";\n@ionicon-var-fork: \"\\f27a\";\n@ionicon-var-fork-repo: \"\\f2c0\";\n@ionicon-var-forward: \"\\f13a\";\n@ionicon-var-funnel: \"\\f31b\";\n@ionicon-var-game-controller-a: \"\\f13b\";\n@ionicon-var-game-controller-b: \"\\f13c\";\n@ionicon-var-gear-a: \"\\f13d\";\n@ionicon-var-gear-b: \"\\f13e\";\n@ionicon-var-grid: \"\\f13f\";\n@ionicon-var-hammer: \"\\f27b\";\n@ionicon-var-happy: \"\\f31c\";\n@ionicon-var-headphone: \"\\f140\";\n@ionicon-var-heart: \"\\f141\";\n@ionicon-var-heart-broken: \"\\f31d\";\n@ionicon-var-help: \"\\f143\";\n@ionicon-var-help-buoy: \"\\f27c\";\n@ionicon-var-help-circled: \"\\f142\";\n@ionicon-var-home: \"\\f144\";\n@ionicon-var-icecream: \"\\f27d\";\n@ionicon-var-icon-social-google-plus: \"\\f146\";\n@ionicon-var-icon-social-google-plus-outline: \"\\f145\";\n@ionicon-var-image: \"\\f147\";\n@ionicon-var-images: \"\\f148\";\n@ionicon-var-information: \"\\f14a\";\n@ionicon-var-information-circled: \"\\f149\";\n@ionicon-var-ionic: \"\\f14b\";\n@ionicon-var-ios7-alarm: \"\\f14d\";\n@ionicon-var-ios7-alarm-outline: \"\\f14c\";\n@ionicon-var-ios7-albums: \"\\f14f\";\n@ionicon-var-ios7-albums-outline: \"\\f14e\";\n@ionicon-var-ios7-americanfootball: \"\\f31f\";\n@ionicon-var-ios7-americanfootball-outline: \"\\f31e\";\n@ionicon-var-ios7-analytics: \"\\f321\";\n@ionicon-var-ios7-analytics-outline: \"\\f320\";\n@ionicon-var-ios7-arrow-back: \"\\f150\";\n@ionicon-var-ios7-arrow-down: \"\\f151\";\n@ionicon-var-ios7-arrow-forward: \"\\f152\";\n@ionicon-var-ios7-arrow-left: \"\\f153\";\n@ionicon-var-ios7-arrow-right: \"\\f154\";\n@ionicon-var-ios7-arrow-thin-down: \"\\f27e\";\n@ionicon-var-ios7-arrow-thin-left: \"\\f27f\";\n@ionicon-var-ios7-arrow-thin-right: \"\\f280\";\n@ionicon-var-ios7-arrow-thin-up: \"\\f281\";\n@ionicon-var-ios7-arrow-up: \"\\f155\";\n@ionicon-var-ios7-at: \"\\f157\";\n@ionicon-var-ios7-at-outline: \"\\f156\";\n@ionicon-var-ios7-barcode: \"\\f323\";\n@ionicon-var-ios7-barcode-outline: \"\\f322\";\n@ionicon-var-ios7-baseball: \"\\f325\";\n@ionicon-var-ios7-baseball-outline: \"\\f324\";\n@ionicon-var-ios7-basketball: \"\\f327\";\n@ionicon-var-ios7-basketball-outline: \"\\f326\";\n@ionicon-var-ios7-bell: \"\\f159\";\n@ionicon-var-ios7-bell-outline: \"\\f158\";\n@ionicon-var-ios7-bolt: \"\\f15b\";\n@ionicon-var-ios7-bolt-outline: \"\\f15a\";\n@ionicon-var-ios7-bookmarks: \"\\f15d\";\n@ionicon-var-ios7-bookmarks-outline: \"\\f15c\";\n@ionicon-var-ios7-box: \"\\f15f\";\n@ionicon-var-ios7-box-outline: \"\\f15e\";\n@ionicon-var-ios7-briefcase: \"\\f283\";\n@ionicon-var-ios7-briefcase-outline: \"\\f282\";\n@ionicon-var-ios7-browsers: \"\\f161\";\n@ionicon-var-ios7-browsers-outline: \"\\f160\";\n@ionicon-var-ios7-calculator: \"\\f285\";\n@ionicon-var-ios7-calculator-outline: \"\\f284\";\n@ionicon-var-ios7-calendar: \"\\f163\";\n@ionicon-var-ios7-calendar-outline: \"\\f162\";\n@ionicon-var-ios7-camera: \"\\f165\";\n@ionicon-var-ios7-camera-outline: \"\\f164\";\n@ionicon-var-ios7-cart: \"\\f167\";\n@ionicon-var-ios7-cart-outline: \"\\f166\";\n@ionicon-var-ios7-chatboxes: \"\\f169\";\n@ionicon-var-ios7-chatboxes-outline: \"\\f168\";\n@ionicon-var-ios7-chatbubble: \"\\f16b\";\n@ionicon-var-ios7-chatbubble-outline: \"\\f16a\";\n@ionicon-var-ios7-checkmark: \"\\f16e\";\n@ionicon-var-ios7-checkmark-empty: \"\\f16c\";\n@ionicon-var-ios7-checkmark-outline: \"\\f16d\";\n@ionicon-var-ios7-circle-filled: \"\\f16f\";\n@ionicon-var-ios7-circle-outline: \"\\f170\";\n@ionicon-var-ios7-clock: \"\\f172\";\n@ionicon-var-ios7-clock-outline: \"\\f171\";\n@ionicon-var-ios7-close: \"\\f2bc\";\n@ionicon-var-ios7-close-empty: \"\\f2bd\";\n@ionicon-var-ios7-close-outline: \"\\f2bb\";\n@ionicon-var-ios7-cloud: \"\\f178\";\n@ionicon-var-ios7-cloud-download: \"\\f174\";\n@ionicon-var-ios7-cloud-download-outline: \"\\f173\";\n@ionicon-var-ios7-cloud-outline: \"\\f175\";\n@ionicon-var-ios7-cloud-upload: \"\\f177\";\n@ionicon-var-ios7-cloud-upload-outline: \"\\f176\";\n@ionicon-var-ios7-cloudy: \"\\f17a\";\n@ionicon-var-ios7-cloudy-night: \"\\f308\";\n@ionicon-var-ios7-cloudy-night-outline: \"\\f307\";\n@ionicon-var-ios7-cloudy-outline: \"\\f179\";\n@ionicon-var-ios7-cog: \"\\f17c\";\n@ionicon-var-ios7-cog-outline: \"\\f17b\";\n@ionicon-var-ios7-compose: \"\\f17e\";\n@ionicon-var-ios7-compose-outline: \"\\f17d\";\n@ionicon-var-ios7-contact: \"\\f180\";\n@ionicon-var-ios7-contact-outline: \"\\f17f\";\n@ionicon-var-ios7-copy: \"\\f182\";\n@ionicon-var-ios7-copy-outline: \"\\f181\";\n@ionicon-var-ios7-download: \"\\f184\";\n@ionicon-var-ios7-download-outline: \"\\f183\";\n@ionicon-var-ios7-drag: \"\\f185\";\n@ionicon-var-ios7-email: \"\\f187\";\n@ionicon-var-ios7-email-outline: \"\\f186\";\n@ionicon-var-ios7-expand: \"\\f30d\";\n@ionicon-var-ios7-eye: \"\\f189\";\n@ionicon-var-ios7-eye-outline: \"\\f188\";\n@ionicon-var-ios7-fastforward: \"\\f18b\";\n@ionicon-var-ios7-fastforward-outline: \"\\f18a\";\n@ionicon-var-ios7-filing: \"\\f18d\";\n@ionicon-var-ios7-filing-outline: \"\\f18c\";\n@ionicon-var-ios7-film: \"\\f18f\";\n@ionicon-var-ios7-film-outline: \"\\f18e\";\n@ionicon-var-ios7-flag: \"\\f191\";\n@ionicon-var-ios7-flag-outline: \"\\f190\";\n@ionicon-var-ios7-folder: \"\\f193\";\n@ionicon-var-ios7-folder-outline: \"\\f192\";\n@ionicon-var-ios7-football: \"\\f329\";\n@ionicon-var-ios7-football-outline: \"\\f328\";\n@ionicon-var-ios7-gear: \"\\f195\";\n@ionicon-var-ios7-gear-outline: \"\\f194\";\n@ionicon-var-ios7-glasses: \"\\f197\";\n@ionicon-var-ios7-glasses-outline: \"\\f196\";\n@ionicon-var-ios7-heart: \"\\f199\";\n@ionicon-var-ios7-heart-outline: \"\\f198\";\n@ionicon-var-ios7-help: \"\\f19c\";\n@ionicon-var-ios7-help-empty: \"\\f19a\";\n@ionicon-var-ios7-help-outline: \"\\f19b\";\n@ionicon-var-ios7-home: \"\\f32b\";\n@ionicon-var-ios7-home-outline: \"\\f32a\";\n@ionicon-var-ios7-infinite: \"\\f19e\";\n@ionicon-var-ios7-infinite-outline: \"\\f19d\";\n@ionicon-var-ios7-information: \"\\f1a1\";\n@ionicon-var-ios7-information-empty: \"\\f19f\";\n@ionicon-var-ios7-information-outline: \"\\f1a0\";\n@ionicon-var-ios7-ionic-outline: \"\\f1a2\";\n@ionicon-var-ios7-keypad: \"\\f1a4\";\n@ionicon-var-ios7-keypad-outline: \"\\f1a3\";\n@ionicon-var-ios7-lightbulb: \"\\f287\";\n@ionicon-var-ios7-lightbulb-outline: \"\\f286\";\n@ionicon-var-ios7-location: \"\\f1a6\";\n@ionicon-var-ios7-location-outline: \"\\f1a5\";\n@ionicon-var-ios7-locked: \"\\f1a8\";\n@ionicon-var-ios7-locked-outline: \"\\f1a7\";\n@ionicon-var-ios7-loop: \"\\f32d\";\n@ionicon-var-ios7-loop-strong: \"\\f32c\";\n@ionicon-var-ios7-medkit: \"\\f289\";\n@ionicon-var-ios7-medkit-outline: \"\\f288\";\n@ionicon-var-ios7-mic: \"\\f1ab\";\n@ionicon-var-ios7-mic-off: \"\\f1a9\";\n@ionicon-var-ios7-mic-outline: \"\\f1aa\";\n@ionicon-var-ios7-minus: \"\\f1ae\";\n@ionicon-var-ios7-minus-empty: \"\\f1ac\";\n@ionicon-var-ios7-minus-outline: \"\\f1ad\";\n@ionicon-var-ios7-monitor: \"\\f1b0\";\n@ionicon-var-ios7-monitor-outline: \"\\f1af\";\n@ionicon-var-ios7-moon: \"\\f1b2\";\n@ionicon-var-ios7-moon-outline: \"\\f1b1\";\n@ionicon-var-ios7-more: \"\\f1b4\";\n@ionicon-var-ios7-more-outline: \"\\f1b3\";\n@ionicon-var-ios7-musical-note: \"\\f1b5\";\n@ionicon-var-ios7-musical-notes: \"\\f1b6\";\n@ionicon-var-ios7-navigate: \"\\f1b8\";\n@ionicon-var-ios7-navigate-outline: \"\\f1b7\";\n@ionicon-var-ios7-paper: \"\\f32f\";\n@ionicon-var-ios7-paper-outline: \"\\f32e\";\n@ionicon-var-ios7-paperplane: \"\\f1ba\";\n@ionicon-var-ios7-paperplane-outline: \"\\f1b9\";\n@ionicon-var-ios7-partlysunny: \"\\f1bc\";\n@ionicon-var-ios7-partlysunny-outline: \"\\f1bb\";\n@ionicon-var-ios7-pause: \"\\f1be\";\n@ionicon-var-ios7-pause-outline: \"\\f1bd\";\n@ionicon-var-ios7-paw: \"\\f331\";\n@ionicon-var-ios7-paw-outline: \"\\f330\";\n@ionicon-var-ios7-people: \"\\f1c0\";\n@ionicon-var-ios7-people-outline: \"\\f1bf\";\n@ionicon-var-ios7-person: \"\\f1c2\";\n@ionicon-var-ios7-person-outline: \"\\f1c1\";\n@ionicon-var-ios7-personadd: \"\\f1c4\";\n@ionicon-var-ios7-personadd-outline: \"\\f1c3\";\n@ionicon-var-ios7-photos: \"\\f1c6\";\n@ionicon-var-ios7-photos-outline: \"\\f1c5\";\n@ionicon-var-ios7-pie: \"\\f28b\";\n@ionicon-var-ios7-pie-outline: \"\\f28a\";\n@ionicon-var-ios7-play: \"\\f1c8\";\n@ionicon-var-ios7-play-outline: \"\\f1c7\";\n@ionicon-var-ios7-plus: \"\\f1cb\";\n@ionicon-var-ios7-plus-empty: \"\\f1c9\";\n@ionicon-var-ios7-plus-outline: \"\\f1ca\";\n@ionicon-var-ios7-pricetag: \"\\f28d\";\n@ionicon-var-ios7-pricetag-outline: \"\\f28c\";\n@ionicon-var-ios7-pricetags: \"\\f333\";\n@ionicon-var-ios7-pricetags-outline: \"\\f332\";\n@ionicon-var-ios7-printer: \"\\f1cd\";\n@ionicon-var-ios7-printer-outline: \"\\f1cc\";\n@ionicon-var-ios7-pulse: \"\\f335\";\n@ionicon-var-ios7-pulse-strong: \"\\f334\";\n@ionicon-var-ios7-rainy: \"\\f1cf\";\n@ionicon-var-ios7-rainy-outline: \"\\f1ce\";\n@ionicon-var-ios7-recording: \"\\f1d1\";\n@ionicon-var-ios7-recording-outline: \"\\f1d0\";\n@ionicon-var-ios7-redo: \"\\f1d3\";\n@ionicon-var-ios7-redo-outline: \"\\f1d2\";\n@ionicon-var-ios7-refresh: \"\\f1d6\";\n@ionicon-var-ios7-refresh-empty: \"\\f1d4\";\n@ionicon-var-ios7-refresh-outline: \"\\f1d5\";\n@ionicon-var-ios7-reload: \"\\f28e\";\n@ionicon-var-ios7-reverse-camera: \"\\f337\";\n@ionicon-var-ios7-reverse-camera-outline: \"\\f336\";\n@ionicon-var-ios7-rewind: \"\\f1d8\";\n@ionicon-var-ios7-rewind-outline: \"\\f1d7\";\n@ionicon-var-ios7-search: \"\\f1da\";\n@ionicon-var-ios7-search-strong: \"\\f1d9\";\n@ionicon-var-ios7-settings: \"\\f339\";\n@ionicon-var-ios7-settings-strong: \"\\f338\";\n@ionicon-var-ios7-shrink: \"\\f30e\";\n@ionicon-var-ios7-skipbackward: \"\\f1dc\";\n@ionicon-var-ios7-skipbackward-outline: \"\\f1db\";\n@ionicon-var-ios7-skipforward: \"\\f1de\";\n@ionicon-var-ios7-skipforward-outline: \"\\f1dd\";\n@ionicon-var-ios7-snowy: \"\\f309\";\n@ionicon-var-ios7-speedometer: \"\\f290\";\n@ionicon-var-ios7-speedometer-outline: \"\\f28f\";\n@ionicon-var-ios7-star: \"\\f1e0\";\n@ionicon-var-ios7-star-half: \"\\f33a\";\n@ionicon-var-ios7-star-outline: \"\\f1df\";\n@ionicon-var-ios7-stopwatch: \"\\f1e2\";\n@ionicon-var-ios7-stopwatch-outline: \"\\f1e1\";\n@ionicon-var-ios7-sunny: \"\\f1e4\";\n@ionicon-var-ios7-sunny-outline: \"\\f1e3\";\n@ionicon-var-ios7-telephone: \"\\f1e6\";\n@ionicon-var-ios7-telephone-outline: \"\\f1e5\";\n@ionicon-var-ios7-tennisball: \"\\f33c\";\n@ionicon-var-ios7-tennisball-outline: \"\\f33b\";\n@ionicon-var-ios7-thunderstorm: \"\\f1e8\";\n@ionicon-var-ios7-thunderstorm-outline: \"\\f1e7\";\n@ionicon-var-ios7-time: \"\\f292\";\n@ionicon-var-ios7-time-outline: \"\\f291\";\n@ionicon-var-ios7-timer: \"\\f1ea\";\n@ionicon-var-ios7-timer-outline: \"\\f1e9\";\n@ionicon-var-ios7-toggle: \"\\f33e\";\n@ionicon-var-ios7-toggle-outline: \"\\f33d\";\n@ionicon-var-ios7-trash: \"\\f1ec\";\n@ionicon-var-ios7-trash-outline: \"\\f1eb\";\n@ionicon-var-ios7-undo: \"\\f1ee\";\n@ionicon-var-ios7-undo-outline: \"\\f1ed\";\n@ionicon-var-ios7-unlocked: \"\\f1f0\";\n@ionicon-var-ios7-unlocked-outline: \"\\f1ef\";\n@ionicon-var-ios7-upload: \"\\f1f2\";\n@ionicon-var-ios7-upload-outline: \"\\f1f1\";\n@ionicon-var-ios7-videocam: \"\\f1f4\";\n@ionicon-var-ios7-videocam-outline: \"\\f1f3\";\n@ionicon-var-ios7-volume-high: \"\\f1f5\";\n@ionicon-var-ios7-volume-low: \"\\f1f6\";\n@ionicon-var-ios7-wineglass: \"\\f294\";\n@ionicon-var-ios7-wineglass-outline: \"\\f293\";\n@ionicon-var-ios7-world: \"\\f1f8\";\n@ionicon-var-ios7-world-outline: \"\\f1f7\";\n@ionicon-var-ipad: \"\\f1f9\";\n@ionicon-var-iphone: \"\\f1fa\";\n@ionicon-var-ipod: \"\\f1fb\";\n@ionicon-var-jet: \"\\f295\";\n@ionicon-var-key: \"\\f296\";\n@ionicon-var-knife: \"\\f297\";\n@ionicon-var-laptop: \"\\f1fc\";\n@ionicon-var-leaf: \"\\f1fd\";\n@ionicon-var-levels: \"\\f298\";\n@ionicon-var-lightbulb: \"\\f299\";\n@ionicon-var-link: \"\\f1fe\";\n@ionicon-var-load-a: \"\\f29a\";\n@ionicon-var-load-b: \"\\f29b\";\n@ionicon-var-load-c: \"\\f29c\";\n@ionicon-var-load-d: \"\\f29d\";\n@ionicon-var-location: \"\\f1ff\";\n@ionicon-var-locked: \"\\f200\";\n@ionicon-var-log-in: \"\\f29e\";\n@ionicon-var-log-out: \"\\f29f\";\n@ionicon-var-loop: \"\\f201\";\n@ionicon-var-magnet: \"\\f2a0\";\n@ionicon-var-male: \"\\f2a1\";\n@ionicon-var-man: \"\\f202\";\n@ionicon-var-map: \"\\f203\";\n@ionicon-var-medkit: \"\\f2a2\";\n@ionicon-var-merge: \"\\f33f\";\n@ionicon-var-mic-a: \"\\f204\";\n@ionicon-var-mic-b: \"\\f205\";\n@ionicon-var-mic-c: \"\\f206\";\n@ionicon-var-minus: \"\\f209\";\n@ionicon-var-minus-circled: \"\\f207\";\n@ionicon-var-minus-round: \"\\f208\";\n@ionicon-var-model-s: \"\\f2c1\";\n@ionicon-var-monitor: \"\\f20a\";\n@ionicon-var-more: \"\\f20b\";\n@ionicon-var-mouse: \"\\f340\";\n@ionicon-var-music-note: \"\\f20c\";\n@ionicon-var-navicon: \"\\f20e\";\n@ionicon-var-navicon-round: \"\\f20d\";\n@ionicon-var-navigate: \"\\f2a3\";\n@ionicon-var-network: \"\\f341\";\n@ionicon-var-no-smoking: \"\\f2c2\";\n@ionicon-var-nuclear: \"\\f2a4\";\n@ionicon-var-outlet: \"\\f342\";\n@ionicon-var-paper-airplane: \"\\f2c3\";\n@ionicon-var-paperclip: \"\\f20f\";\n@ionicon-var-pause: \"\\f210\";\n@ionicon-var-person: \"\\f213\";\n@ionicon-var-person-add: \"\\f211\";\n@ionicon-var-person-stalker: \"\\f212\";\n@ionicon-var-pie-graph: \"\\f2a5\";\n@ionicon-var-pin: \"\\f2a6\";\n@ionicon-var-pinpoint: \"\\f2a7\";\n@ionicon-var-pizza: \"\\f2a8\";\n@ionicon-var-plane: \"\\f214\";\n@ionicon-var-planet: \"\\f343\";\n@ionicon-var-play: \"\\f215\";\n@ionicon-var-playstation: \"\\f30a\";\n@ionicon-var-plus: \"\\f218\";\n@ionicon-var-plus-circled: \"\\f216\";\n@ionicon-var-plus-round: \"\\f217\";\n@ionicon-var-podium: \"\\f344\";\n@ionicon-var-pound: \"\\f219\";\n@ionicon-var-power: \"\\f2a9\";\n@ionicon-var-pricetag: \"\\f2aa\";\n@ionicon-var-pricetags: \"\\f2ab\";\n@ionicon-var-printer: \"\\f21a\";\n@ionicon-var-pull-request: \"\\f345\";\n@ionicon-var-qr-scanner: \"\\f346\";\n@ionicon-var-quote: \"\\f347\";\n@ionicon-var-radio-waves: \"\\f2ac\";\n@ionicon-var-record: \"\\f21b\";\n@ionicon-var-refresh: \"\\f21c\";\n@ionicon-var-reply: \"\\f21e\";\n@ionicon-var-reply-all: \"\\f21d\";\n@ionicon-var-ribbon-a: \"\\f348\";\n@ionicon-var-ribbon-b: \"\\f349\";\n@ionicon-var-sad: \"\\f34a\";\n@ionicon-var-scissors: \"\\f34b\";\n@ionicon-var-search: \"\\f21f\";\n@ionicon-var-settings: \"\\f2ad\";\n@ionicon-var-share: \"\\f220\";\n@ionicon-var-shuffle: \"\\f221\";\n@ionicon-var-skip-backward: \"\\f222\";\n@ionicon-var-skip-forward: \"\\f223\";\n@ionicon-var-social-android: \"\\f225\";\n@ionicon-var-social-android-outline: \"\\f224\";\n@ionicon-var-social-apple: \"\\f227\";\n@ionicon-var-social-apple-outline: \"\\f226\";\n@ionicon-var-social-bitcoin: \"\\f2af\";\n@ionicon-var-social-bitcoin-outline: \"\\f2ae\";\n@ionicon-var-social-buffer: \"\\f229\";\n@ionicon-var-social-buffer-outline: \"\\f228\";\n@ionicon-var-social-designernews: \"\\f22b\";\n@ionicon-var-social-designernews-outline: \"\\f22a\";\n@ionicon-var-social-dribbble: \"\\f22d\";\n@ionicon-var-social-dribbble-outline: \"\\f22c\";\n@ionicon-var-social-dropbox: \"\\f22f\";\n@ionicon-var-social-dropbox-outline: \"\\f22e\";\n@ionicon-var-social-facebook: \"\\f231\";\n@ionicon-var-social-facebook-outline: \"\\f230\";\n@ionicon-var-social-foursquare: \"\\f34d\";\n@ionicon-var-social-foursquare-outline: \"\\f34c\";\n@ionicon-var-social-freebsd-devil: \"\\f2c4\";\n@ionicon-var-social-github: \"\\f233\";\n@ionicon-var-social-github-outline: \"\\f232\";\n@ionicon-var-social-google: \"\\f34f\";\n@ionicon-var-social-google-outline: \"\\f34e\";\n@ionicon-var-social-googleplus: \"\\f235\";\n@ionicon-var-social-googleplus-outline: \"\\f234\";\n@ionicon-var-social-hackernews: \"\\f237\";\n@ionicon-var-social-hackernews-outline: \"\\f236\";\n@ionicon-var-social-instagram: \"\\f351\";\n@ionicon-var-social-instagram-outline: \"\\f350\";\n@ionicon-var-social-linkedin: \"\\f239\";\n@ionicon-var-social-linkedin-outline: \"\\f238\";\n@ionicon-var-social-pinterest: \"\\f2b1\";\n@ionicon-var-social-pinterest-outline: \"\\f2b0\";\n@ionicon-var-social-reddit: \"\\f23b\";\n@ionicon-var-social-reddit-outline: \"\\f23a\";\n@ionicon-var-social-rss: \"\\f23d\";\n@ionicon-var-social-rss-outline: \"\\f23c\";\n@ionicon-var-social-skype: \"\\f23f\";\n@ionicon-var-social-skype-outline: \"\\f23e\";\n@ionicon-var-social-tumblr: \"\\f241\";\n@ionicon-var-social-tumblr-outline: \"\\f240\";\n@ionicon-var-social-tux: \"\\f2c5\";\n@ionicon-var-social-twitter: \"\\f243\";\n@ionicon-var-social-twitter-outline: \"\\f242\";\n@ionicon-var-social-usd: \"\\f353\";\n@ionicon-var-social-usd-outline: \"\\f352\";\n@ionicon-var-social-vimeo: \"\\f245\";\n@ionicon-var-social-vimeo-outline: \"\\f244\";\n@ionicon-var-social-windows: \"\\f247\";\n@ionicon-var-social-windows-outline: \"\\f246\";\n@ionicon-var-social-wordpress: \"\\f249\";\n@ionicon-var-social-wordpress-outline: \"\\f248\";\n@ionicon-var-social-yahoo: \"\\f24b\";\n@ionicon-var-social-yahoo-outline: \"\\f24a\";\n@ionicon-var-social-youtube: \"\\f24d\";\n@ionicon-var-social-youtube-outline: \"\\f24c\";\n@ionicon-var-speakerphone: \"\\f2b2\";\n@ionicon-var-speedometer: \"\\f2b3\";\n@ionicon-var-spoon: \"\\f2b4\";\n@ionicon-var-star: \"\\f24e\";\n@ionicon-var-stats-bars: \"\\f2b5\";\n@ionicon-var-steam: \"\\f30b\";\n@ionicon-var-stop: \"\\f24f\";\n@ionicon-var-thermometer: \"\\f2b6\";\n@ionicon-var-thumbsdown: \"\\f250\";\n@ionicon-var-thumbsup: \"\\f251\";\n@ionicon-var-toggle: \"\\f355\";\n@ionicon-var-toggle-filled: \"\\f354\";\n@ionicon-var-trash-a: \"\\f252\";\n@ionicon-var-trash-b: \"\\f253\";\n@ionicon-var-trophy: \"\\f356\";\n@ionicon-var-umbrella: \"\\f2b7\";\n@ionicon-var-university: \"\\f357\";\n@ionicon-var-unlocked: \"\\f254\";\n@ionicon-var-upload: \"\\f255\";\n@ionicon-var-usb: \"\\f2b8\";\n@ionicon-var-videocamera: \"\\f256\";\n@ionicon-var-volume-high: \"\\f257\";\n@ionicon-var-volume-low: \"\\f258\";\n@ionicon-var-volume-medium: \"\\f259\";\n@ionicon-var-volume-mute: \"\\f25a\";\n@ionicon-var-wand: \"\\f358\";\n@ionicon-var-waterdrop: \"\\f25b\";\n@ionicon-var-wifi: \"\\f25c\";\n@ionicon-var-wineglass: \"\\f2b9\";\n@ionicon-var-woman: \"\\f25d\";\n@ionicon-var-wrench: \"\\f2ba\";\n@ionicon-var-xbox: \"\\f30c\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/less/ionicons.less",
    "content": "@import \"_ionicons-variables\";\n@import \"_ionicons-font\";\n@import \"_ionicons-animation\";\n@import \"_ionicons-icons\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/scss/_ionicons-animation.scss",
    "content": "// Animation Icons\n// --------------------------\n\n.#{$ionicons-prefix}spin {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear;\n}\n\n@-moz-keyframes spin {\n  0% { -moz-transform: rotate(0deg); }\n  100% { -moz-transform: rotate(359deg); }\n}\n@-webkit-keyframes spin {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@-o-keyframes spin {\n  0% { -o-transform: rotate(0deg); }\n  100% { -o-transform: rotate(359deg); }\n}\n@-ms-keyframes spin {\n  0% { -ms-transform: rotate(0deg); }\n  100% { -ms-transform: rotate(359deg); }\n}\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n\n\n.#{$ionicons-prefix}loading-a,\n.#{$ionicons-prefix}loading-b,\n.#{$ionicons-prefix}loading-c,\n.#{$ionicons-prefix}loading-d,\n.#{$ionicons-prefix}looping,\n.#{$ionicons-prefix}refreshing,\n.#{$ionicons-prefix}ios7-reloading {\n  @extend .ion;\n  @extend .#{$ionicons-prefix}spin;\n}\n\n.#{$ionicons-prefix}loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start);\n}\n\n.#{$ionicons-prefix}loading-a:before { \n  @extend .#{$ionicons-prefix}load-a:before;\n}\n\n.#{$ionicons-prefix}loading-b:before { \n  @extend .#{$ionicons-prefix}load-b:before;\n}\n\n.#{$ionicons-prefix}loading-c:before { \n  @extend .#{$ionicons-prefix}load-c:before;\n}\n\n.#{$ionicons-prefix}loading-d:before { \n  @extend .#{$ionicons-prefix}load-d:before;\n}\n\n.#{$ionicons-prefix}looping:before { \n  @extend .#{$ionicons-prefix}loop:before;\n}\n\n.#{$ionicons-prefix}refreshing:before { \n  @extend .#{$ionicons-prefix}refresh:before;\n}\n\n.#{$ionicons-prefix}ios7-reloading:before { \n  @extend .#{$ionicons-prefix}ios7-reload:before;\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/scss/_ionicons-font.scss",
    "content": "// Ionicons Font Path\n// --------------------------\n\n@font-face {\n font-family: $ionicons-font-family;\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}\");\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix\") format(\"embedded-opentype\"),\n  url(\"#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}\") format(\"truetype\"),\n  url(\"#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}\") format(\"woff\"),\n  url(\"#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.ion {\n  display: inline-block;\n  font-family: $ionicons-font-family;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/scss/_ionicons-icons.scss",
    "content": "// Ionicons Icons\n// --------------------------\n\n.ionicons,\n.#{$ionicons-prefix}alert,\n.#{$ionicons-prefix}alert-circled,\n.#{$ionicons-prefix}android-add,\n.#{$ionicons-prefix}android-add-contact,\n.#{$ionicons-prefix}android-alarm,\n.#{$ionicons-prefix}android-archive,\n.#{$ionicons-prefix}android-arrow-back,\n.#{$ionicons-prefix}android-arrow-down-left,\n.#{$ionicons-prefix}android-arrow-down-right,\n.#{$ionicons-prefix}android-arrow-forward,\n.#{$ionicons-prefix}android-arrow-up-left,\n.#{$ionicons-prefix}android-arrow-up-right,\n.#{$ionicons-prefix}android-battery,\n.#{$ionicons-prefix}android-book,\n.#{$ionicons-prefix}android-calendar,\n.#{$ionicons-prefix}android-call,\n.#{$ionicons-prefix}android-camera,\n.#{$ionicons-prefix}android-chat,\n.#{$ionicons-prefix}android-checkmark,\n.#{$ionicons-prefix}android-clock,\n.#{$ionicons-prefix}android-close,\n.#{$ionicons-prefix}android-contact,\n.#{$ionicons-prefix}android-contacts,\n.#{$ionicons-prefix}android-data,\n.#{$ionicons-prefix}android-developer,\n.#{$ionicons-prefix}android-display,\n.#{$ionicons-prefix}android-download,\n.#{$ionicons-prefix}android-drawer,\n.#{$ionicons-prefix}android-dropdown,\n.#{$ionicons-prefix}android-earth,\n.#{$ionicons-prefix}android-folder,\n.#{$ionicons-prefix}android-forums,\n.#{$ionicons-prefix}android-friends,\n.#{$ionicons-prefix}android-hand,\n.#{$ionicons-prefix}android-image,\n.#{$ionicons-prefix}android-inbox,\n.#{$ionicons-prefix}android-information,\n.#{$ionicons-prefix}android-keypad,\n.#{$ionicons-prefix}android-lightbulb,\n.#{$ionicons-prefix}android-locate,\n.#{$ionicons-prefix}android-location,\n.#{$ionicons-prefix}android-mail,\n.#{$ionicons-prefix}android-microphone,\n.#{$ionicons-prefix}android-mixer,\n.#{$ionicons-prefix}android-more,\n.#{$ionicons-prefix}android-note,\n.#{$ionicons-prefix}android-playstore,\n.#{$ionicons-prefix}android-printer,\n.#{$ionicons-prefix}android-promotion,\n.#{$ionicons-prefix}android-reminder,\n.#{$ionicons-prefix}android-remove,\n.#{$ionicons-prefix}android-search,\n.#{$ionicons-prefix}android-send,\n.#{$ionicons-prefix}android-settings,\n.#{$ionicons-prefix}android-share,\n.#{$ionicons-prefix}android-social,\n.#{$ionicons-prefix}android-social-user,\n.#{$ionicons-prefix}android-sort,\n.#{$ionicons-prefix}android-stair-drawer,\n.#{$ionicons-prefix}android-star,\n.#{$ionicons-prefix}android-stopwatch,\n.#{$ionicons-prefix}android-storage,\n.#{$ionicons-prefix}android-system-back,\n.#{$ionicons-prefix}android-system-home,\n.#{$ionicons-prefix}android-system-windows,\n.#{$ionicons-prefix}android-timer,\n.#{$ionicons-prefix}android-trash,\n.#{$ionicons-prefix}android-user-menu,\n.#{$ionicons-prefix}android-volume,\n.#{$ionicons-prefix}android-wifi,\n.#{$ionicons-prefix}aperture,\n.#{$ionicons-prefix}archive,\n.#{$ionicons-prefix}arrow-down-a,\n.#{$ionicons-prefix}arrow-down-b,\n.#{$ionicons-prefix}arrow-down-c,\n.#{$ionicons-prefix}arrow-expand,\n.#{$ionicons-prefix}arrow-graph-down-left,\n.#{$ionicons-prefix}arrow-graph-down-right,\n.#{$ionicons-prefix}arrow-graph-up-left,\n.#{$ionicons-prefix}arrow-graph-up-right,\n.#{$ionicons-prefix}arrow-left-a,\n.#{$ionicons-prefix}arrow-left-b,\n.#{$ionicons-prefix}arrow-left-c,\n.#{$ionicons-prefix}arrow-move,\n.#{$ionicons-prefix}arrow-resize,\n.#{$ionicons-prefix}arrow-return-left,\n.#{$ionicons-prefix}arrow-return-right,\n.#{$ionicons-prefix}arrow-right-a,\n.#{$ionicons-prefix}arrow-right-b,\n.#{$ionicons-prefix}arrow-right-c,\n.#{$ionicons-prefix}arrow-shrink,\n.#{$ionicons-prefix}arrow-swap,\n.#{$ionicons-prefix}arrow-up-a,\n.#{$ionicons-prefix}arrow-up-b,\n.#{$ionicons-prefix}arrow-up-c,\n.#{$ionicons-prefix}asterisk,\n.#{$ionicons-prefix}at,\n.#{$ionicons-prefix}bag,\n.#{$ionicons-prefix}battery-charging,\n.#{$ionicons-prefix}battery-empty,\n.#{$ionicons-prefix}battery-full,\n.#{$ionicons-prefix}battery-half,\n.#{$ionicons-prefix}battery-low,\n.#{$ionicons-prefix}beaker,\n.#{$ionicons-prefix}beer,\n.#{$ionicons-prefix}bluetooth,\n.#{$ionicons-prefix}bonfire,\n.#{$ionicons-prefix}bookmark,\n.#{$ionicons-prefix}briefcase,\n.#{$ionicons-prefix}bug,\n.#{$ionicons-prefix}calculator,\n.#{$ionicons-prefix}calendar,\n.#{$ionicons-prefix}camera,\n.#{$ionicons-prefix}card,\n.#{$ionicons-prefix}cash,\n.#{$ionicons-prefix}chatbox,\n.#{$ionicons-prefix}chatbox-working,\n.#{$ionicons-prefix}chatboxes,\n.#{$ionicons-prefix}chatbubble,\n.#{$ionicons-prefix}chatbubble-working,\n.#{$ionicons-prefix}chatbubbles,\n.#{$ionicons-prefix}checkmark,\n.#{$ionicons-prefix}checkmark-circled,\n.#{$ionicons-prefix}checkmark-round,\n.#{$ionicons-prefix}chevron-down,\n.#{$ionicons-prefix}chevron-left,\n.#{$ionicons-prefix}chevron-right,\n.#{$ionicons-prefix}chevron-up,\n.#{$ionicons-prefix}clipboard,\n.#{$ionicons-prefix}clock,\n.#{$ionicons-prefix}close,\n.#{$ionicons-prefix}close-circled,\n.#{$ionicons-prefix}close-round,\n.#{$ionicons-prefix}closed-captioning,\n.#{$ionicons-prefix}cloud,\n.#{$ionicons-prefix}code,\n.#{$ionicons-prefix}code-download,\n.#{$ionicons-prefix}code-working,\n.#{$ionicons-prefix}coffee,\n.#{$ionicons-prefix}compass,\n.#{$ionicons-prefix}compose,\n.#{$ionicons-prefix}connection-bars,\n.#{$ionicons-prefix}contrast,\n.#{$ionicons-prefix}cube,\n.#{$ionicons-prefix}disc,\n.#{$ionicons-prefix}document,\n.#{$ionicons-prefix}document-text,\n.#{$ionicons-prefix}drag,\n.#{$ionicons-prefix}earth,\n.#{$ionicons-prefix}edit,\n.#{$ionicons-prefix}egg,\n.#{$ionicons-prefix}eject,\n.#{$ionicons-prefix}email,\n.#{$ionicons-prefix}eye,\n.#{$ionicons-prefix}eye-disabled,\n.#{$ionicons-prefix}female,\n.#{$ionicons-prefix}filing,\n.#{$ionicons-prefix}film-marker,\n.#{$ionicons-prefix}fireball,\n.#{$ionicons-prefix}flag,\n.#{$ionicons-prefix}flame,\n.#{$ionicons-prefix}flash,\n.#{$ionicons-prefix}flash-off,\n.#{$ionicons-prefix}flask,\n.#{$ionicons-prefix}folder,\n.#{$ionicons-prefix}fork,\n.#{$ionicons-prefix}fork-repo,\n.#{$ionicons-prefix}forward,\n.#{$ionicons-prefix}funnel,\n.#{$ionicons-prefix}game-controller-a,\n.#{$ionicons-prefix}game-controller-b,\n.#{$ionicons-prefix}gear-a,\n.#{$ionicons-prefix}gear-b,\n.#{$ionicons-prefix}grid,\n.#{$ionicons-prefix}hammer,\n.#{$ionicons-prefix}happy,\n.#{$ionicons-prefix}headphone,\n.#{$ionicons-prefix}heart,\n.#{$ionicons-prefix}heart-broken,\n.#{$ionicons-prefix}help,\n.#{$ionicons-prefix}help-buoy,\n.#{$ionicons-prefix}help-circled,\n.#{$ionicons-prefix}home,\n.#{$ionicons-prefix}icecream,\n.#{$ionicons-prefix}icon-social-google-plus,\n.#{$ionicons-prefix}icon-social-google-plus-outline,\n.#{$ionicons-prefix}image,\n.#{$ionicons-prefix}images,\n.#{$ionicons-prefix}information,\n.#{$ionicons-prefix}information-circled,\n.#{$ionicons-prefix}ionic,\n.#{$ionicons-prefix}ios7-alarm,\n.#{$ionicons-prefix}ios7-alarm-outline,\n.#{$ionicons-prefix}ios7-albums,\n.#{$ionicons-prefix}ios7-albums-outline,\n.#{$ionicons-prefix}ios7-americanfootball,\n.#{$ionicons-prefix}ios7-americanfootball-outline,\n.#{$ionicons-prefix}ios7-analytics,\n.#{$ionicons-prefix}ios7-analytics-outline,\n.#{$ionicons-prefix}ios7-arrow-back,\n.#{$ionicons-prefix}ios7-arrow-down,\n.#{$ionicons-prefix}ios7-arrow-forward,\n.#{$ionicons-prefix}ios7-arrow-left,\n.#{$ionicons-prefix}ios7-arrow-right,\n.#{$ionicons-prefix}ios7-arrow-thin-down,\n.#{$ionicons-prefix}ios7-arrow-thin-left,\n.#{$ionicons-prefix}ios7-arrow-thin-right,\n.#{$ionicons-prefix}ios7-arrow-thin-up,\n.#{$ionicons-prefix}ios7-arrow-up,\n.#{$ionicons-prefix}ios7-at,\n.#{$ionicons-prefix}ios7-at-outline,\n.#{$ionicons-prefix}ios7-barcode,\n.#{$ionicons-prefix}ios7-barcode-outline,\n.#{$ionicons-prefix}ios7-baseball,\n.#{$ionicons-prefix}ios7-baseball-outline,\n.#{$ionicons-prefix}ios7-basketball,\n.#{$ionicons-prefix}ios7-basketball-outline,\n.#{$ionicons-prefix}ios7-bell,\n.#{$ionicons-prefix}ios7-bell-outline,\n.#{$ionicons-prefix}ios7-bolt,\n.#{$ionicons-prefix}ios7-bolt-outline,\n.#{$ionicons-prefix}ios7-bookmarks,\n.#{$ionicons-prefix}ios7-bookmarks-outline,\n.#{$ionicons-prefix}ios7-box,\n.#{$ionicons-prefix}ios7-box-outline,\n.#{$ionicons-prefix}ios7-briefcase,\n.#{$ionicons-prefix}ios7-briefcase-outline,\n.#{$ionicons-prefix}ios7-browsers,\n.#{$ionicons-prefix}ios7-browsers-outline,\n.#{$ionicons-prefix}ios7-calculator,\n.#{$ionicons-prefix}ios7-calculator-outline,\n.#{$ionicons-prefix}ios7-calendar,\n.#{$ionicons-prefix}ios7-calendar-outline,\n.#{$ionicons-prefix}ios7-camera,\n.#{$ionicons-prefix}ios7-camera-outline,\n.#{$ionicons-prefix}ios7-cart,\n.#{$ionicons-prefix}ios7-cart-outline,\n.#{$ionicons-prefix}ios7-chatboxes,\n.#{$ionicons-prefix}ios7-chatboxes-outline,\n.#{$ionicons-prefix}ios7-chatbubble,\n.#{$ionicons-prefix}ios7-chatbubble-outline,\n.#{$ionicons-prefix}ios7-checkmark,\n.#{$ionicons-prefix}ios7-checkmark-empty,\n.#{$ionicons-prefix}ios7-checkmark-outline,\n.#{$ionicons-prefix}ios7-circle-filled,\n.#{$ionicons-prefix}ios7-circle-outline,\n.#{$ionicons-prefix}ios7-clock,\n.#{$ionicons-prefix}ios7-clock-outline,\n.#{$ionicons-prefix}ios7-close,\n.#{$ionicons-prefix}ios7-close-empty,\n.#{$ionicons-prefix}ios7-close-outline,\n.#{$ionicons-prefix}ios7-cloud,\n.#{$ionicons-prefix}ios7-cloud-download,\n.#{$ionicons-prefix}ios7-cloud-download-outline,\n.#{$ionicons-prefix}ios7-cloud-outline,\n.#{$ionicons-prefix}ios7-cloud-upload,\n.#{$ionicons-prefix}ios7-cloud-upload-outline,\n.#{$ionicons-prefix}ios7-cloudy,\n.#{$ionicons-prefix}ios7-cloudy-night,\n.#{$ionicons-prefix}ios7-cloudy-night-outline,\n.#{$ionicons-prefix}ios7-cloudy-outline,\n.#{$ionicons-prefix}ios7-cog,\n.#{$ionicons-prefix}ios7-cog-outline,\n.#{$ionicons-prefix}ios7-compose,\n.#{$ionicons-prefix}ios7-compose-outline,\n.#{$ionicons-prefix}ios7-contact,\n.#{$ionicons-prefix}ios7-contact-outline,\n.#{$ionicons-prefix}ios7-copy,\n.#{$ionicons-prefix}ios7-copy-outline,\n.#{$ionicons-prefix}ios7-download,\n.#{$ionicons-prefix}ios7-download-outline,\n.#{$ionicons-prefix}ios7-drag,\n.#{$ionicons-prefix}ios7-email,\n.#{$ionicons-prefix}ios7-email-outline,\n.#{$ionicons-prefix}ios7-expand,\n.#{$ionicons-prefix}ios7-eye,\n.#{$ionicons-prefix}ios7-eye-outline,\n.#{$ionicons-prefix}ios7-fastforward,\n.#{$ionicons-prefix}ios7-fastforward-outline,\n.#{$ionicons-prefix}ios7-filing,\n.#{$ionicons-prefix}ios7-filing-outline,\n.#{$ionicons-prefix}ios7-film,\n.#{$ionicons-prefix}ios7-film-outline,\n.#{$ionicons-prefix}ios7-flag,\n.#{$ionicons-prefix}ios7-flag-outline,\n.#{$ionicons-prefix}ios7-folder,\n.#{$ionicons-prefix}ios7-folder-outline,\n.#{$ionicons-prefix}ios7-football,\n.#{$ionicons-prefix}ios7-football-outline,\n.#{$ionicons-prefix}ios7-gear,\n.#{$ionicons-prefix}ios7-gear-outline,\n.#{$ionicons-prefix}ios7-glasses,\n.#{$ionicons-prefix}ios7-glasses-outline,\n.#{$ionicons-prefix}ios7-heart,\n.#{$ionicons-prefix}ios7-heart-outline,\n.#{$ionicons-prefix}ios7-help,\n.#{$ionicons-prefix}ios7-help-empty,\n.#{$ionicons-prefix}ios7-help-outline,\n.#{$ionicons-prefix}ios7-home,\n.#{$ionicons-prefix}ios7-home-outline,\n.#{$ionicons-prefix}ios7-infinite,\n.#{$ionicons-prefix}ios7-infinite-outline,\n.#{$ionicons-prefix}ios7-information,\n.#{$ionicons-prefix}ios7-information-empty,\n.#{$ionicons-prefix}ios7-information-outline,\n.#{$ionicons-prefix}ios7-ionic-outline,\n.#{$ionicons-prefix}ios7-keypad,\n.#{$ionicons-prefix}ios7-keypad-outline,\n.#{$ionicons-prefix}ios7-lightbulb,\n.#{$ionicons-prefix}ios7-lightbulb-outline,\n.#{$ionicons-prefix}ios7-location,\n.#{$ionicons-prefix}ios7-location-outline,\n.#{$ionicons-prefix}ios7-locked,\n.#{$ionicons-prefix}ios7-locked-outline,\n.#{$ionicons-prefix}ios7-loop,\n.#{$ionicons-prefix}ios7-loop-strong,\n.#{$ionicons-prefix}ios7-medkit,\n.#{$ionicons-prefix}ios7-medkit-outline,\n.#{$ionicons-prefix}ios7-mic,\n.#{$ionicons-prefix}ios7-mic-off,\n.#{$ionicons-prefix}ios7-mic-outline,\n.#{$ionicons-prefix}ios7-minus,\n.#{$ionicons-prefix}ios7-minus-empty,\n.#{$ionicons-prefix}ios7-minus-outline,\n.#{$ionicons-prefix}ios7-monitor,\n.#{$ionicons-prefix}ios7-monitor-outline,\n.#{$ionicons-prefix}ios7-moon,\n.#{$ionicons-prefix}ios7-moon-outline,\n.#{$ionicons-prefix}ios7-more,\n.#{$ionicons-prefix}ios7-more-outline,\n.#{$ionicons-prefix}ios7-musical-note,\n.#{$ionicons-prefix}ios7-musical-notes,\n.#{$ionicons-prefix}ios7-navigate,\n.#{$ionicons-prefix}ios7-navigate-outline,\n.#{$ionicons-prefix}ios7-paper,\n.#{$ionicons-prefix}ios7-paper-outline,\n.#{$ionicons-prefix}ios7-paperplane,\n.#{$ionicons-prefix}ios7-paperplane-outline,\n.#{$ionicons-prefix}ios7-partlysunny,\n.#{$ionicons-prefix}ios7-partlysunny-outline,\n.#{$ionicons-prefix}ios7-pause,\n.#{$ionicons-prefix}ios7-pause-outline,\n.#{$ionicons-prefix}ios7-paw,\n.#{$ionicons-prefix}ios7-paw-outline,\n.#{$ionicons-prefix}ios7-people,\n.#{$ionicons-prefix}ios7-people-outline,\n.#{$ionicons-prefix}ios7-person,\n.#{$ionicons-prefix}ios7-person-outline,\n.#{$ionicons-prefix}ios7-personadd,\n.#{$ionicons-prefix}ios7-personadd-outline,\n.#{$ionicons-prefix}ios7-photos,\n.#{$ionicons-prefix}ios7-photos-outline,\n.#{$ionicons-prefix}ios7-pie,\n.#{$ionicons-prefix}ios7-pie-outline,\n.#{$ionicons-prefix}ios7-play,\n.#{$ionicons-prefix}ios7-play-outline,\n.#{$ionicons-prefix}ios7-plus,\n.#{$ionicons-prefix}ios7-plus-empty,\n.#{$ionicons-prefix}ios7-plus-outline,\n.#{$ionicons-prefix}ios7-pricetag,\n.#{$ionicons-prefix}ios7-pricetag-outline,\n.#{$ionicons-prefix}ios7-pricetags,\n.#{$ionicons-prefix}ios7-pricetags-outline,\n.#{$ionicons-prefix}ios7-printer,\n.#{$ionicons-prefix}ios7-printer-outline,\n.#{$ionicons-prefix}ios7-pulse,\n.#{$ionicons-prefix}ios7-pulse-strong,\n.#{$ionicons-prefix}ios7-rainy,\n.#{$ionicons-prefix}ios7-rainy-outline,\n.#{$ionicons-prefix}ios7-recording,\n.#{$ionicons-prefix}ios7-recording-outline,\n.#{$ionicons-prefix}ios7-redo,\n.#{$ionicons-prefix}ios7-redo-outline,\n.#{$ionicons-prefix}ios7-refresh,\n.#{$ionicons-prefix}ios7-refresh-empty,\n.#{$ionicons-prefix}ios7-refresh-outline,\n.#{$ionicons-prefix}ios7-reload,\n.#{$ionicons-prefix}ios7-reverse-camera,\n.#{$ionicons-prefix}ios7-reverse-camera-outline,\n.#{$ionicons-prefix}ios7-rewind,\n.#{$ionicons-prefix}ios7-rewind-outline,\n.#{$ionicons-prefix}ios7-search,\n.#{$ionicons-prefix}ios7-search-strong,\n.#{$ionicons-prefix}ios7-settings,\n.#{$ionicons-prefix}ios7-settings-strong,\n.#{$ionicons-prefix}ios7-shrink,\n.#{$ionicons-prefix}ios7-skipbackward,\n.#{$ionicons-prefix}ios7-skipbackward-outline,\n.#{$ionicons-prefix}ios7-skipforward,\n.#{$ionicons-prefix}ios7-skipforward-outline,\n.#{$ionicons-prefix}ios7-snowy,\n.#{$ionicons-prefix}ios7-speedometer,\n.#{$ionicons-prefix}ios7-speedometer-outline,\n.#{$ionicons-prefix}ios7-star,\n.#{$ionicons-prefix}ios7-star-half,\n.#{$ionicons-prefix}ios7-star-outline,\n.#{$ionicons-prefix}ios7-stopwatch,\n.#{$ionicons-prefix}ios7-stopwatch-outline,\n.#{$ionicons-prefix}ios7-sunny,\n.#{$ionicons-prefix}ios7-sunny-outline,\n.#{$ionicons-prefix}ios7-telephone,\n.#{$ionicons-prefix}ios7-telephone-outline,\n.#{$ionicons-prefix}ios7-tennisball,\n.#{$ionicons-prefix}ios7-tennisball-outline,\n.#{$ionicons-prefix}ios7-thunderstorm,\n.#{$ionicons-prefix}ios7-thunderstorm-outline,\n.#{$ionicons-prefix}ios7-time,\n.#{$ionicons-prefix}ios7-time-outline,\n.#{$ionicons-prefix}ios7-timer,\n.#{$ionicons-prefix}ios7-timer-outline,\n.#{$ionicons-prefix}ios7-toggle,\n.#{$ionicons-prefix}ios7-toggle-outline,\n.#{$ionicons-prefix}ios7-trash,\n.#{$ionicons-prefix}ios7-trash-outline,\n.#{$ionicons-prefix}ios7-undo,\n.#{$ionicons-prefix}ios7-undo-outline,\n.#{$ionicons-prefix}ios7-unlocked,\n.#{$ionicons-prefix}ios7-unlocked-outline,\n.#{$ionicons-prefix}ios7-upload,\n.#{$ionicons-prefix}ios7-upload-outline,\n.#{$ionicons-prefix}ios7-videocam,\n.#{$ionicons-prefix}ios7-videocam-outline,\n.#{$ionicons-prefix}ios7-volume-high,\n.#{$ionicons-prefix}ios7-volume-low,\n.#{$ionicons-prefix}ios7-wineglass,\n.#{$ionicons-prefix}ios7-wineglass-outline,\n.#{$ionicons-prefix}ios7-world,\n.#{$ionicons-prefix}ios7-world-outline,\n.#{$ionicons-prefix}ipad,\n.#{$ionicons-prefix}iphone,\n.#{$ionicons-prefix}ipod,\n.#{$ionicons-prefix}jet,\n.#{$ionicons-prefix}key,\n.#{$ionicons-prefix}knife,\n.#{$ionicons-prefix}laptop,\n.#{$ionicons-prefix}leaf,\n.#{$ionicons-prefix}levels,\n.#{$ionicons-prefix}lightbulb,\n.#{$ionicons-prefix}link,\n.#{$ionicons-prefix}load-a,\n.#{$ionicons-prefix}load-b,\n.#{$ionicons-prefix}load-c,\n.#{$ionicons-prefix}load-d,\n.#{$ionicons-prefix}location,\n.#{$ionicons-prefix}locked,\n.#{$ionicons-prefix}log-in,\n.#{$ionicons-prefix}log-out,\n.#{$ionicons-prefix}loop,\n.#{$ionicons-prefix}magnet,\n.#{$ionicons-prefix}male,\n.#{$ionicons-prefix}man,\n.#{$ionicons-prefix}map,\n.#{$ionicons-prefix}medkit,\n.#{$ionicons-prefix}merge,\n.#{$ionicons-prefix}mic-a,\n.#{$ionicons-prefix}mic-b,\n.#{$ionicons-prefix}mic-c,\n.#{$ionicons-prefix}minus,\n.#{$ionicons-prefix}minus-circled,\n.#{$ionicons-prefix}minus-round,\n.#{$ionicons-prefix}model-s,\n.#{$ionicons-prefix}monitor,\n.#{$ionicons-prefix}more,\n.#{$ionicons-prefix}mouse,\n.#{$ionicons-prefix}music-note,\n.#{$ionicons-prefix}navicon,\n.#{$ionicons-prefix}navicon-round,\n.#{$ionicons-prefix}navigate,\n.#{$ionicons-prefix}network,\n.#{$ionicons-prefix}no-smoking,\n.#{$ionicons-prefix}nuclear,\n.#{$ionicons-prefix}outlet,\n.#{$ionicons-prefix}paper-airplane,\n.#{$ionicons-prefix}paperclip,\n.#{$ionicons-prefix}pause,\n.#{$ionicons-prefix}person,\n.#{$ionicons-prefix}person-add,\n.#{$ionicons-prefix}person-stalker,\n.#{$ionicons-prefix}pie-graph,\n.#{$ionicons-prefix}pin,\n.#{$ionicons-prefix}pinpoint,\n.#{$ionicons-prefix}pizza,\n.#{$ionicons-prefix}plane,\n.#{$ionicons-prefix}planet,\n.#{$ionicons-prefix}play,\n.#{$ionicons-prefix}playstation,\n.#{$ionicons-prefix}plus,\n.#{$ionicons-prefix}plus-circled,\n.#{$ionicons-prefix}plus-round,\n.#{$ionicons-prefix}podium,\n.#{$ionicons-prefix}pound,\n.#{$ionicons-prefix}power,\n.#{$ionicons-prefix}pricetag,\n.#{$ionicons-prefix}pricetags,\n.#{$ionicons-prefix}printer,\n.#{$ionicons-prefix}pull-request,\n.#{$ionicons-prefix}qr-scanner,\n.#{$ionicons-prefix}quote,\n.#{$ionicons-prefix}radio-waves,\n.#{$ionicons-prefix}record,\n.#{$ionicons-prefix}refresh,\n.#{$ionicons-prefix}reply,\n.#{$ionicons-prefix}reply-all,\n.#{$ionicons-prefix}ribbon-a,\n.#{$ionicons-prefix}ribbon-b,\n.#{$ionicons-prefix}sad,\n.#{$ionicons-prefix}scissors,\n.#{$ionicons-prefix}search,\n.#{$ionicons-prefix}settings,\n.#{$ionicons-prefix}share,\n.#{$ionicons-prefix}shuffle,\n.#{$ionicons-prefix}skip-backward,\n.#{$ionicons-prefix}skip-forward,\n.#{$ionicons-prefix}social-android,\n.#{$ionicons-prefix}social-android-outline,\n.#{$ionicons-prefix}social-apple,\n.#{$ionicons-prefix}social-apple-outline,\n.#{$ionicons-prefix}social-bitcoin,\n.#{$ionicons-prefix}social-bitcoin-outline,\n.#{$ionicons-prefix}social-buffer,\n.#{$ionicons-prefix}social-buffer-outline,\n.#{$ionicons-prefix}social-designernews,\n.#{$ionicons-prefix}social-designernews-outline,\n.#{$ionicons-prefix}social-dribbble,\n.#{$ionicons-prefix}social-dribbble-outline,\n.#{$ionicons-prefix}social-dropbox,\n.#{$ionicons-prefix}social-dropbox-outline,\n.#{$ionicons-prefix}social-facebook,\n.#{$ionicons-prefix}social-facebook-outline,\n.#{$ionicons-prefix}social-foursquare,\n.#{$ionicons-prefix}social-foursquare-outline,\n.#{$ionicons-prefix}social-freebsd-devil,\n.#{$ionicons-prefix}social-github,\n.#{$ionicons-prefix}social-github-outline,\n.#{$ionicons-prefix}social-google,\n.#{$ionicons-prefix}social-google-outline,\n.#{$ionicons-prefix}social-googleplus,\n.#{$ionicons-prefix}social-googleplus-outline,\n.#{$ionicons-prefix}social-hackernews,\n.#{$ionicons-prefix}social-hackernews-outline,\n.#{$ionicons-prefix}social-instagram,\n.#{$ionicons-prefix}social-instagram-outline,\n.#{$ionicons-prefix}social-linkedin,\n.#{$ionicons-prefix}social-linkedin-outline,\n.#{$ionicons-prefix}social-pinterest,\n.#{$ionicons-prefix}social-pinterest-outline,\n.#{$ionicons-prefix}social-reddit,\n.#{$ionicons-prefix}social-reddit-outline,\n.#{$ionicons-prefix}social-rss,\n.#{$ionicons-prefix}social-rss-outline,\n.#{$ionicons-prefix}social-skype,\n.#{$ionicons-prefix}social-skype-outline,\n.#{$ionicons-prefix}social-tumblr,\n.#{$ionicons-prefix}social-tumblr-outline,\n.#{$ionicons-prefix}social-tux,\n.#{$ionicons-prefix}social-twitter,\n.#{$ionicons-prefix}social-twitter-outline,\n.#{$ionicons-prefix}social-usd,\n.#{$ionicons-prefix}social-usd-outline,\n.#{$ionicons-prefix}social-vimeo,\n.#{$ionicons-prefix}social-vimeo-outline,\n.#{$ionicons-prefix}social-windows,\n.#{$ionicons-prefix}social-windows-outline,\n.#{$ionicons-prefix}social-wordpress,\n.#{$ionicons-prefix}social-wordpress-outline,\n.#{$ionicons-prefix}social-yahoo,\n.#{$ionicons-prefix}social-yahoo-outline,\n.#{$ionicons-prefix}social-youtube,\n.#{$ionicons-prefix}social-youtube-outline,\n.#{$ionicons-prefix}speakerphone,\n.#{$ionicons-prefix}speedometer,\n.#{$ionicons-prefix}spoon,\n.#{$ionicons-prefix}star,\n.#{$ionicons-prefix}stats-bars,\n.#{$ionicons-prefix}steam,\n.#{$ionicons-prefix}stop,\n.#{$ionicons-prefix}thermometer,\n.#{$ionicons-prefix}thumbsdown,\n.#{$ionicons-prefix}thumbsup,\n.#{$ionicons-prefix}toggle,\n.#{$ionicons-prefix}toggle-filled,\n.#{$ionicons-prefix}trash-a,\n.#{$ionicons-prefix}trash-b,\n.#{$ionicons-prefix}trophy,\n.#{$ionicons-prefix}umbrella,\n.#{$ionicons-prefix}university,\n.#{$ionicons-prefix}unlocked,\n.#{$ionicons-prefix}upload,\n.#{$ionicons-prefix}usb,\n.#{$ionicons-prefix}videocamera,\n.#{$ionicons-prefix}volume-high,\n.#{$ionicons-prefix}volume-low,\n.#{$ionicons-prefix}volume-medium,\n.#{$ionicons-prefix}volume-mute,\n.#{$ionicons-prefix}wand,\n.#{$ionicons-prefix}waterdrop,\n.#{$ionicons-prefix}wifi,\n.#{$ionicons-prefix}wineglass,\n.#{$ionicons-prefix}woman,\n.#{$ionicons-prefix}wrench,\n.#{$ionicons-prefix}xbox\n{\n  @extend .ion;\n}\n.#{$ionicons-prefix}alert:before { content: $ionicon-var-alert; }\n.#{$ionicons-prefix}alert-circled:before { content: $ionicon-var-alert-circled; }\n.#{$ionicons-prefix}android-add:before { content: $ionicon-var-android-add; }\n.#{$ionicons-prefix}android-add-contact:before { content: $ionicon-var-android-add-contact; }\n.#{$ionicons-prefix}android-alarm:before { content: $ionicon-var-android-alarm; }\n.#{$ionicons-prefix}android-archive:before { content: $ionicon-var-android-archive; }\n.#{$ionicons-prefix}android-arrow-back:before { content: $ionicon-var-android-arrow-back; }\n.#{$ionicons-prefix}android-arrow-down-left:before { content: $ionicon-var-android-arrow-down-left; }\n.#{$ionicons-prefix}android-arrow-down-right:before { content: $ionicon-var-android-arrow-down-right; }\n.#{$ionicons-prefix}android-arrow-forward:before { content: $ionicon-var-android-arrow-forward; }\n.#{$ionicons-prefix}android-arrow-up-left:before { content: $ionicon-var-android-arrow-up-left; }\n.#{$ionicons-prefix}android-arrow-up-right:before { content: $ionicon-var-android-arrow-up-right; }\n.#{$ionicons-prefix}android-battery:before { content: $ionicon-var-android-battery; }\n.#{$ionicons-prefix}android-book:before { content: $ionicon-var-android-book; }\n.#{$ionicons-prefix}android-calendar:before { content: $ionicon-var-android-calendar; }\n.#{$ionicons-prefix}android-call:before { content: $ionicon-var-android-call; }\n.#{$ionicons-prefix}android-camera:before { content: $ionicon-var-android-camera; }\n.#{$ionicons-prefix}android-chat:before { content: $ionicon-var-android-chat; }\n.#{$ionicons-prefix}android-checkmark:before { content: $ionicon-var-android-checkmark; }\n.#{$ionicons-prefix}android-clock:before { content: $ionicon-var-android-clock; }\n.#{$ionicons-prefix}android-close:before { content: $ionicon-var-android-close; }\n.#{$ionicons-prefix}android-contact:before { content: $ionicon-var-android-contact; }\n.#{$ionicons-prefix}android-contacts:before { content: $ionicon-var-android-contacts; }\n.#{$ionicons-prefix}android-data:before { content: $ionicon-var-android-data; }\n.#{$ionicons-prefix}android-developer:before { content: $ionicon-var-android-developer; }\n.#{$ionicons-prefix}android-display:before { content: $ionicon-var-android-display; }\n.#{$ionicons-prefix}android-download:before { content: $ionicon-var-android-download; }\n.#{$ionicons-prefix}android-drawer:before { content: $ionicon-var-android-drawer; }\n.#{$ionicons-prefix}android-dropdown:before { content: $ionicon-var-android-dropdown; }\n.#{$ionicons-prefix}android-earth:before { content: $ionicon-var-android-earth; }\n.#{$ionicons-prefix}android-folder:before { content: $ionicon-var-android-folder; }\n.#{$ionicons-prefix}android-forums:before { content: $ionicon-var-android-forums; }\n.#{$ionicons-prefix}android-friends:before { content: $ionicon-var-android-friends; }\n.#{$ionicons-prefix}android-hand:before { content: $ionicon-var-android-hand; }\n.#{$ionicons-prefix}android-image:before { content: $ionicon-var-android-image; }\n.#{$ionicons-prefix}android-inbox:before { content: $ionicon-var-android-inbox; }\n.#{$ionicons-prefix}android-information:before { content: $ionicon-var-android-information; }\n.#{$ionicons-prefix}android-keypad:before { content: $ionicon-var-android-keypad; }\n.#{$ionicons-prefix}android-lightbulb:before { content: $ionicon-var-android-lightbulb; }\n.#{$ionicons-prefix}android-locate:before { content: $ionicon-var-android-locate; }\n.#{$ionicons-prefix}android-location:before { content: $ionicon-var-android-location; }\n.#{$ionicons-prefix}android-mail:before { content: $ionicon-var-android-mail; }\n.#{$ionicons-prefix}android-microphone:before { content: $ionicon-var-android-microphone; }\n.#{$ionicons-prefix}android-mixer:before { content: $ionicon-var-android-mixer; }\n.#{$ionicons-prefix}android-more:before { content: $ionicon-var-android-more; }\n.#{$ionicons-prefix}android-note:before { content: $ionicon-var-android-note; }\n.#{$ionicons-prefix}android-playstore:before { content: $ionicon-var-android-playstore; }\n.#{$ionicons-prefix}android-printer:before { content: $ionicon-var-android-printer; }\n.#{$ionicons-prefix}android-promotion:before { content: $ionicon-var-android-promotion; }\n.#{$ionicons-prefix}android-reminder:before { content: $ionicon-var-android-reminder; }\n.#{$ionicons-prefix}android-remove:before { content: $ionicon-var-android-remove; }\n.#{$ionicons-prefix}android-search:before { content: $ionicon-var-android-search; }\n.#{$ionicons-prefix}android-send:before { content: $ionicon-var-android-send; }\n.#{$ionicons-prefix}android-settings:before { content: $ionicon-var-android-settings; }\n.#{$ionicons-prefix}android-share:before { content: $ionicon-var-android-share; }\n.#{$ionicons-prefix}android-social:before { content: $ionicon-var-android-social; }\n.#{$ionicons-prefix}android-social-user:before { content: $ionicon-var-android-social-user; }\n.#{$ionicons-prefix}android-sort:before { content: $ionicon-var-android-sort; }\n.#{$ionicons-prefix}android-stair-drawer:before { content: $ionicon-var-android-stair-drawer; }\n.#{$ionicons-prefix}android-star:before { content: $ionicon-var-android-star; }\n.#{$ionicons-prefix}android-stopwatch:before { content: $ionicon-var-android-stopwatch; }\n.#{$ionicons-prefix}android-storage:before { content: $ionicon-var-android-storage; }\n.#{$ionicons-prefix}android-system-back:before { content: $ionicon-var-android-system-back; }\n.#{$ionicons-prefix}android-system-home:before { content: $ionicon-var-android-system-home; }\n.#{$ionicons-prefix}android-system-windows:before { content: $ionicon-var-android-system-windows; }\n.#{$ionicons-prefix}android-timer:before { content: $ionicon-var-android-timer; }\n.#{$ionicons-prefix}android-trash:before { content: $ionicon-var-android-trash; }\n.#{$ionicons-prefix}android-user-menu:before { content: $ionicon-var-android-user-menu; }\n.#{$ionicons-prefix}android-volume:before { content: $ionicon-var-android-volume; }\n.#{$ionicons-prefix}android-wifi:before { content: $ionicon-var-android-wifi; }\n.#{$ionicons-prefix}aperture:before { content: $ionicon-var-aperture; }\n.#{$ionicons-prefix}archive:before { content: $ionicon-var-archive; }\n.#{$ionicons-prefix}arrow-down-a:before { content: $ionicon-var-arrow-down-a; }\n.#{$ionicons-prefix}arrow-down-b:before { content: $ionicon-var-arrow-down-b; }\n.#{$ionicons-prefix}arrow-down-c:before { content: $ionicon-var-arrow-down-c; }\n.#{$ionicons-prefix}arrow-expand:before { content: $ionicon-var-arrow-expand; }\n.#{$ionicons-prefix}arrow-graph-down-left:before { content: $ionicon-var-arrow-graph-down-left; }\n.#{$ionicons-prefix}arrow-graph-down-right:before { content: $ionicon-var-arrow-graph-down-right; }\n.#{$ionicons-prefix}arrow-graph-up-left:before { content: $ionicon-var-arrow-graph-up-left; }\n.#{$ionicons-prefix}arrow-graph-up-right:before { content: $ionicon-var-arrow-graph-up-right; }\n.#{$ionicons-prefix}arrow-left-a:before { content: $ionicon-var-arrow-left-a; }\n.#{$ionicons-prefix}arrow-left-b:before { content: $ionicon-var-arrow-left-b; }\n.#{$ionicons-prefix}arrow-left-c:before { content: $ionicon-var-arrow-left-c; }\n.#{$ionicons-prefix}arrow-move:before { content: $ionicon-var-arrow-move; }\n.#{$ionicons-prefix}arrow-resize:before { content: $ionicon-var-arrow-resize; }\n.#{$ionicons-prefix}arrow-return-left:before { content: $ionicon-var-arrow-return-left; }\n.#{$ionicons-prefix}arrow-return-right:before { content: $ionicon-var-arrow-return-right; }\n.#{$ionicons-prefix}arrow-right-a:before { content: $ionicon-var-arrow-right-a; }\n.#{$ionicons-prefix}arrow-right-b:before { content: $ionicon-var-arrow-right-b; }\n.#{$ionicons-prefix}arrow-right-c:before { content: $ionicon-var-arrow-right-c; }\n.#{$ionicons-prefix}arrow-shrink:before { content: $ionicon-var-arrow-shrink; }\n.#{$ionicons-prefix}arrow-swap:before { content: $ionicon-var-arrow-swap; }\n.#{$ionicons-prefix}arrow-up-a:before { content: $ionicon-var-arrow-up-a; }\n.#{$ionicons-prefix}arrow-up-b:before { content: $ionicon-var-arrow-up-b; }\n.#{$ionicons-prefix}arrow-up-c:before { content: $ionicon-var-arrow-up-c; }\n.#{$ionicons-prefix}asterisk:before { content: $ionicon-var-asterisk; }\n.#{$ionicons-prefix}at:before { content: $ionicon-var-at; }\n.#{$ionicons-prefix}bag:before { content: $ionicon-var-bag; }\n.#{$ionicons-prefix}battery-charging:before { content: $ionicon-var-battery-charging; }\n.#{$ionicons-prefix}battery-empty:before { content: $ionicon-var-battery-empty; }\n.#{$ionicons-prefix}battery-full:before { content: $ionicon-var-battery-full; }\n.#{$ionicons-prefix}battery-half:before { content: $ionicon-var-battery-half; }\n.#{$ionicons-prefix}battery-low:before { content: $ionicon-var-battery-low; }\n.#{$ionicons-prefix}beaker:before { content: $ionicon-var-beaker; }\n.#{$ionicons-prefix}beer:before { content: $ionicon-var-beer; }\n.#{$ionicons-prefix}bluetooth:before { content: $ionicon-var-bluetooth; }\n.#{$ionicons-prefix}bonfire:before { content: $ionicon-var-bonfire; }\n.#{$ionicons-prefix}bookmark:before { content: $ionicon-var-bookmark; }\n.#{$ionicons-prefix}briefcase:before { content: $ionicon-var-briefcase; }\n.#{$ionicons-prefix}bug:before { content: $ionicon-var-bug; }\n.#{$ionicons-prefix}calculator:before { content: $ionicon-var-calculator; }\n.#{$ionicons-prefix}calendar:before { content: $ionicon-var-calendar; }\n.#{$ionicons-prefix}camera:before { content: $ionicon-var-camera; }\n.#{$ionicons-prefix}card:before { content: $ionicon-var-card; }\n.#{$ionicons-prefix}cash:before { content: $ionicon-var-cash; }\n.#{$ionicons-prefix}chatbox:before { content: $ionicon-var-chatbox; }\n.#{$ionicons-prefix}chatbox-working:before { content: $ionicon-var-chatbox-working; }\n.#{$ionicons-prefix}chatboxes:before { content: $ionicon-var-chatboxes; }\n.#{$ionicons-prefix}chatbubble:before { content: $ionicon-var-chatbubble; }\n.#{$ionicons-prefix}chatbubble-working:before { content: $ionicon-var-chatbubble-working; }\n.#{$ionicons-prefix}chatbubbles:before { content: $ionicon-var-chatbubbles; }\n.#{$ionicons-prefix}checkmark:before { content: $ionicon-var-checkmark; }\n.#{$ionicons-prefix}checkmark-circled:before { content: $ionicon-var-checkmark-circled; }\n.#{$ionicons-prefix}checkmark-round:before { content: $ionicon-var-checkmark-round; }\n.#{$ionicons-prefix}chevron-down:before { content: $ionicon-var-chevron-down; }\n.#{$ionicons-prefix}chevron-left:before { content: $ionicon-var-chevron-left; }\n.#{$ionicons-prefix}chevron-right:before { content: $ionicon-var-chevron-right; }\n.#{$ionicons-prefix}chevron-up:before { content: $ionicon-var-chevron-up; }\n.#{$ionicons-prefix}clipboard:before { content: $ionicon-var-clipboard; }\n.#{$ionicons-prefix}clock:before { content: $ionicon-var-clock; }\n.#{$ionicons-prefix}close:before { content: $ionicon-var-close; }\n.#{$ionicons-prefix}close-circled:before { content: $ionicon-var-close-circled; }\n.#{$ionicons-prefix}close-round:before { content: $ionicon-var-close-round; }\n.#{$ionicons-prefix}closed-captioning:before { content: $ionicon-var-closed-captioning; }\n.#{$ionicons-prefix}cloud:before { content: $ionicon-var-cloud; }\n.#{$ionicons-prefix}code:before { content: $ionicon-var-code; }\n.#{$ionicons-prefix}code-download:before { content: $ionicon-var-code-download; }\n.#{$ionicons-prefix}code-working:before { content: $ionicon-var-code-working; }\n.#{$ionicons-prefix}coffee:before { content: $ionicon-var-coffee; }\n.#{$ionicons-prefix}compass:before { content: $ionicon-var-compass; }\n.#{$ionicons-prefix}compose:before { content: $ionicon-var-compose; }\n.#{$ionicons-prefix}connection-bars:before { content: $ionicon-var-connection-bars; }\n.#{$ionicons-prefix}contrast:before { content: $ionicon-var-contrast; }\n.#{$ionicons-prefix}cube:before { content: $ionicon-var-cube; }\n.#{$ionicons-prefix}disc:before { content: $ionicon-var-disc; }\n.#{$ionicons-prefix}document:before { content: $ionicon-var-document; }\n.#{$ionicons-prefix}document-text:before { content: $ionicon-var-document-text; }\n.#{$ionicons-prefix}drag:before { content: $ionicon-var-drag; }\n.#{$ionicons-prefix}earth:before { content: $ionicon-var-earth; }\n.#{$ionicons-prefix}edit:before { content: $ionicon-var-edit; }\n.#{$ionicons-prefix}egg:before { content: $ionicon-var-egg; }\n.#{$ionicons-prefix}eject:before { content: $ionicon-var-eject; }\n.#{$ionicons-prefix}email:before { content: $ionicon-var-email; }\n.#{$ionicons-prefix}eye:before { content: $ionicon-var-eye; }\n.#{$ionicons-prefix}eye-disabled:before { content: $ionicon-var-eye-disabled; }\n.#{$ionicons-prefix}female:before { content: $ionicon-var-female; }\n.#{$ionicons-prefix}filing:before { content: $ionicon-var-filing; }\n.#{$ionicons-prefix}film-marker:before { content: $ionicon-var-film-marker; }\n.#{$ionicons-prefix}fireball:before { content: $ionicon-var-fireball; }\n.#{$ionicons-prefix}flag:before { content: $ionicon-var-flag; }\n.#{$ionicons-prefix}flame:before { content: $ionicon-var-flame; }\n.#{$ionicons-prefix}flash:before { content: $ionicon-var-flash; }\n.#{$ionicons-prefix}flash-off:before { content: $ionicon-var-flash-off; }\n.#{$ionicons-prefix}flask:before { content: $ionicon-var-flask; }\n.#{$ionicons-prefix}folder:before { content: $ionicon-var-folder; }\n.#{$ionicons-prefix}fork:before { content: $ionicon-var-fork; }\n.#{$ionicons-prefix}fork-repo:before { content: $ionicon-var-fork-repo; }\n.#{$ionicons-prefix}forward:before { content: $ionicon-var-forward; }\n.#{$ionicons-prefix}funnel:before { content: $ionicon-var-funnel; }\n.#{$ionicons-prefix}game-controller-a:before { content: $ionicon-var-game-controller-a; }\n.#{$ionicons-prefix}game-controller-b:before { content: $ionicon-var-game-controller-b; }\n.#{$ionicons-prefix}gear-a:before { content: $ionicon-var-gear-a; }\n.#{$ionicons-prefix}gear-b:before { content: $ionicon-var-gear-b; }\n.#{$ionicons-prefix}grid:before { content: $ionicon-var-grid; }\n.#{$ionicons-prefix}hammer:before { content: $ionicon-var-hammer; }\n.#{$ionicons-prefix}happy:before { content: $ionicon-var-happy; }\n.#{$ionicons-prefix}headphone:before { content: $ionicon-var-headphone; }\n.#{$ionicons-prefix}heart:before { content: $ionicon-var-heart; }\n.#{$ionicons-prefix}heart-broken:before { content: $ionicon-var-heart-broken; }\n.#{$ionicons-prefix}help:before { content: $ionicon-var-help; }\n.#{$ionicons-prefix}help-buoy:before { content: $ionicon-var-help-buoy; }\n.#{$ionicons-prefix}help-circled:before { content: $ionicon-var-help-circled; }\n.#{$ionicons-prefix}home:before { content: $ionicon-var-home; }\n.#{$ionicons-prefix}icecream:before { content: $ionicon-var-icecream; }\n.#{$ionicons-prefix}icon-social-google-plus:before { content: $ionicon-var-icon-social-google-plus; }\n.#{$ionicons-prefix}icon-social-google-plus-outline:before { content: $ionicon-var-icon-social-google-plus-outline; }\n.#{$ionicons-prefix}image:before { content: $ionicon-var-image; }\n.#{$ionicons-prefix}images:before { content: $ionicon-var-images; }\n.#{$ionicons-prefix}information:before { content: $ionicon-var-information; }\n.#{$ionicons-prefix}information-circled:before { content: $ionicon-var-information-circled; }\n.#{$ionicons-prefix}ionic:before { content: $ionicon-var-ionic; }\n.#{$ionicons-prefix}ios7-alarm:before { content: $ionicon-var-ios7-alarm; }\n.#{$ionicons-prefix}ios7-alarm-outline:before { content: $ionicon-var-ios7-alarm-outline; }\n.#{$ionicons-prefix}ios7-albums:before { content: $ionicon-var-ios7-albums; }\n.#{$ionicons-prefix}ios7-albums-outline:before { content: $ionicon-var-ios7-albums-outline; }\n.#{$ionicons-prefix}ios7-americanfootball:before { content: $ionicon-var-ios7-americanfootball; }\n.#{$ionicons-prefix}ios7-americanfootball-outline:before { content: $ionicon-var-ios7-americanfootball-outline; }\n.#{$ionicons-prefix}ios7-analytics:before { content: $ionicon-var-ios7-analytics; }\n.#{$ionicons-prefix}ios7-analytics-outline:before { content: $ionicon-var-ios7-analytics-outline; }\n.#{$ionicons-prefix}ios7-arrow-back:before { content: $ionicon-var-ios7-arrow-back; }\n.#{$ionicons-prefix}ios7-arrow-down:before { content: $ionicon-var-ios7-arrow-down; }\n.#{$ionicons-prefix}ios7-arrow-forward:before { content: $ionicon-var-ios7-arrow-forward; }\n.#{$ionicons-prefix}ios7-arrow-left:before { content: $ionicon-var-ios7-arrow-left; }\n.#{$ionicons-prefix}ios7-arrow-right:before { content: $ionicon-var-ios7-arrow-right; }\n.#{$ionicons-prefix}ios7-arrow-thin-down:before { content: $ionicon-var-ios7-arrow-thin-down; }\n.#{$ionicons-prefix}ios7-arrow-thin-left:before { content: $ionicon-var-ios7-arrow-thin-left; }\n.#{$ionicons-prefix}ios7-arrow-thin-right:before { content: $ionicon-var-ios7-arrow-thin-right; }\n.#{$ionicons-prefix}ios7-arrow-thin-up:before { content: $ionicon-var-ios7-arrow-thin-up; }\n.#{$ionicons-prefix}ios7-arrow-up:before { content: $ionicon-var-ios7-arrow-up; }\n.#{$ionicons-prefix}ios7-at:before { content: $ionicon-var-ios7-at; }\n.#{$ionicons-prefix}ios7-at-outline:before { content: $ionicon-var-ios7-at-outline; }\n.#{$ionicons-prefix}ios7-barcode:before { content: $ionicon-var-ios7-barcode; }\n.#{$ionicons-prefix}ios7-barcode-outline:before { content: $ionicon-var-ios7-barcode-outline; }\n.#{$ionicons-prefix}ios7-baseball:before { content: $ionicon-var-ios7-baseball; }\n.#{$ionicons-prefix}ios7-baseball-outline:before { content: $ionicon-var-ios7-baseball-outline; }\n.#{$ionicons-prefix}ios7-basketball:before { content: $ionicon-var-ios7-basketball; }\n.#{$ionicons-prefix}ios7-basketball-outline:before { content: $ionicon-var-ios7-basketball-outline; }\n.#{$ionicons-prefix}ios7-bell:before { content: $ionicon-var-ios7-bell; }\n.#{$ionicons-prefix}ios7-bell-outline:before { content: $ionicon-var-ios7-bell-outline; }\n.#{$ionicons-prefix}ios7-bolt:before { content: $ionicon-var-ios7-bolt; }\n.#{$ionicons-prefix}ios7-bolt-outline:before { content: $ionicon-var-ios7-bolt-outline; }\n.#{$ionicons-prefix}ios7-bookmarks:before { content: $ionicon-var-ios7-bookmarks; }\n.#{$ionicons-prefix}ios7-bookmarks-outline:before { content: $ionicon-var-ios7-bookmarks-outline; }\n.#{$ionicons-prefix}ios7-box:before { content: $ionicon-var-ios7-box; }\n.#{$ionicons-prefix}ios7-box-outline:before { content: $ionicon-var-ios7-box-outline; }\n.#{$ionicons-prefix}ios7-briefcase:before { content: $ionicon-var-ios7-briefcase; }\n.#{$ionicons-prefix}ios7-briefcase-outline:before { content: $ionicon-var-ios7-briefcase-outline; }\n.#{$ionicons-prefix}ios7-browsers:before { content: $ionicon-var-ios7-browsers; }\n.#{$ionicons-prefix}ios7-browsers-outline:before { content: $ionicon-var-ios7-browsers-outline; }\n.#{$ionicons-prefix}ios7-calculator:before { content: $ionicon-var-ios7-calculator; }\n.#{$ionicons-prefix}ios7-calculator-outline:before { content: $ionicon-var-ios7-calculator-outline; }\n.#{$ionicons-prefix}ios7-calendar:before { content: $ionicon-var-ios7-calendar; }\n.#{$ionicons-prefix}ios7-calendar-outline:before { content: $ionicon-var-ios7-calendar-outline; }\n.#{$ionicons-prefix}ios7-camera:before { content: $ionicon-var-ios7-camera; }\n.#{$ionicons-prefix}ios7-camera-outline:before { content: $ionicon-var-ios7-camera-outline; }\n.#{$ionicons-prefix}ios7-cart:before { content: $ionicon-var-ios7-cart; }\n.#{$ionicons-prefix}ios7-cart-outline:before { content: $ionicon-var-ios7-cart-outline; }\n.#{$ionicons-prefix}ios7-chatboxes:before { content: $ionicon-var-ios7-chatboxes; }\n.#{$ionicons-prefix}ios7-chatboxes-outline:before { content: $ionicon-var-ios7-chatboxes-outline; }\n.#{$ionicons-prefix}ios7-chatbubble:before { content: $ionicon-var-ios7-chatbubble; }\n.#{$ionicons-prefix}ios7-chatbubble-outline:before { content: $ionicon-var-ios7-chatbubble-outline; }\n.#{$ionicons-prefix}ios7-checkmark:before { content: $ionicon-var-ios7-checkmark; }\n.#{$ionicons-prefix}ios7-checkmark-empty:before { content: $ionicon-var-ios7-checkmark-empty; }\n.#{$ionicons-prefix}ios7-checkmark-outline:before { content: $ionicon-var-ios7-checkmark-outline; }\n.#{$ionicons-prefix}ios7-circle-filled:before { content: $ionicon-var-ios7-circle-filled; }\n.#{$ionicons-prefix}ios7-circle-outline:before { content: $ionicon-var-ios7-circle-outline; }\n.#{$ionicons-prefix}ios7-clock:before { content: $ionicon-var-ios7-clock; }\n.#{$ionicons-prefix}ios7-clock-outline:before { content: $ionicon-var-ios7-clock-outline; }\n.#{$ionicons-prefix}ios7-close:before { content: $ionicon-var-ios7-close; }\n.#{$ionicons-prefix}ios7-close-empty:before { content: $ionicon-var-ios7-close-empty; }\n.#{$ionicons-prefix}ios7-close-outline:before { content: $ionicon-var-ios7-close-outline; }\n.#{$ionicons-prefix}ios7-cloud:before { content: $ionicon-var-ios7-cloud; }\n.#{$ionicons-prefix}ios7-cloud-download:before { content: $ionicon-var-ios7-cloud-download; }\n.#{$ionicons-prefix}ios7-cloud-download-outline:before { content: $ionicon-var-ios7-cloud-download-outline; }\n.#{$ionicons-prefix}ios7-cloud-outline:before { content: $ionicon-var-ios7-cloud-outline; }\n.#{$ionicons-prefix}ios7-cloud-upload:before { content: $ionicon-var-ios7-cloud-upload; }\n.#{$ionicons-prefix}ios7-cloud-upload-outline:before { content: $ionicon-var-ios7-cloud-upload-outline; }\n.#{$ionicons-prefix}ios7-cloudy:before { content: $ionicon-var-ios7-cloudy; }\n.#{$ionicons-prefix}ios7-cloudy-night:before { content: $ionicon-var-ios7-cloudy-night; }\n.#{$ionicons-prefix}ios7-cloudy-night-outline:before { content: $ionicon-var-ios7-cloudy-night-outline; }\n.#{$ionicons-prefix}ios7-cloudy-outline:before { content: $ionicon-var-ios7-cloudy-outline; }\n.#{$ionicons-prefix}ios7-cog:before { content: $ionicon-var-ios7-cog; }\n.#{$ionicons-prefix}ios7-cog-outline:before { content: $ionicon-var-ios7-cog-outline; }\n.#{$ionicons-prefix}ios7-compose:before { content: $ionicon-var-ios7-compose; }\n.#{$ionicons-prefix}ios7-compose-outline:before { content: $ionicon-var-ios7-compose-outline; }\n.#{$ionicons-prefix}ios7-contact:before { content: $ionicon-var-ios7-contact; }\n.#{$ionicons-prefix}ios7-contact-outline:before { content: $ionicon-var-ios7-contact-outline; }\n.#{$ionicons-prefix}ios7-copy:before { content: $ionicon-var-ios7-copy; }\n.#{$ionicons-prefix}ios7-copy-outline:before { content: $ionicon-var-ios7-copy-outline; }\n.#{$ionicons-prefix}ios7-download:before { content: $ionicon-var-ios7-download; }\n.#{$ionicons-prefix}ios7-download-outline:before { content: $ionicon-var-ios7-download-outline; }\n.#{$ionicons-prefix}ios7-drag:before { content: $ionicon-var-ios7-drag; }\n.#{$ionicons-prefix}ios7-email:before { content: $ionicon-var-ios7-email; }\n.#{$ionicons-prefix}ios7-email-outline:before { content: $ionicon-var-ios7-email-outline; }\n.#{$ionicons-prefix}ios7-expand:before { content: $ionicon-var-ios7-expand; }\n.#{$ionicons-prefix}ios7-eye:before { content: $ionicon-var-ios7-eye; }\n.#{$ionicons-prefix}ios7-eye-outline:before { content: $ionicon-var-ios7-eye-outline; }\n.#{$ionicons-prefix}ios7-fastforward:before { content: $ionicon-var-ios7-fastforward; }\n.#{$ionicons-prefix}ios7-fastforward-outline:before { content: $ionicon-var-ios7-fastforward-outline; }\n.#{$ionicons-prefix}ios7-filing:before { content: $ionicon-var-ios7-filing; }\n.#{$ionicons-prefix}ios7-filing-outline:before { content: $ionicon-var-ios7-filing-outline; }\n.#{$ionicons-prefix}ios7-film:before { content: $ionicon-var-ios7-film; }\n.#{$ionicons-prefix}ios7-film-outline:before { content: $ionicon-var-ios7-film-outline; }\n.#{$ionicons-prefix}ios7-flag:before { content: $ionicon-var-ios7-flag; }\n.#{$ionicons-prefix}ios7-flag-outline:before { content: $ionicon-var-ios7-flag-outline; }\n.#{$ionicons-prefix}ios7-folder:before { content: $ionicon-var-ios7-folder; }\n.#{$ionicons-prefix}ios7-folder-outline:before { content: $ionicon-var-ios7-folder-outline; }\n.#{$ionicons-prefix}ios7-football:before { content: $ionicon-var-ios7-football; }\n.#{$ionicons-prefix}ios7-football-outline:before { content: $ionicon-var-ios7-football-outline; }\n.#{$ionicons-prefix}ios7-gear:before { content: $ionicon-var-ios7-gear; }\n.#{$ionicons-prefix}ios7-gear-outline:before { content: $ionicon-var-ios7-gear-outline; }\n.#{$ionicons-prefix}ios7-glasses:before { content: $ionicon-var-ios7-glasses; }\n.#{$ionicons-prefix}ios7-glasses-outline:before { content: $ionicon-var-ios7-glasses-outline; }\n.#{$ionicons-prefix}ios7-heart:before { content: $ionicon-var-ios7-heart; }\n.#{$ionicons-prefix}ios7-heart-outline:before { content: $ionicon-var-ios7-heart-outline; }\n.#{$ionicons-prefix}ios7-help:before { content: $ionicon-var-ios7-help; }\n.#{$ionicons-prefix}ios7-help-empty:before { content: $ionicon-var-ios7-help-empty; }\n.#{$ionicons-prefix}ios7-help-outline:before { content: $ionicon-var-ios7-help-outline; }\n.#{$ionicons-prefix}ios7-home:before { content: $ionicon-var-ios7-home; }\n.#{$ionicons-prefix}ios7-home-outline:before { content: $ionicon-var-ios7-home-outline; }\n.#{$ionicons-prefix}ios7-infinite:before { content: $ionicon-var-ios7-infinite; }\n.#{$ionicons-prefix}ios7-infinite-outline:before { content: $ionicon-var-ios7-infinite-outline; }\n.#{$ionicons-prefix}ios7-information:before { content: $ionicon-var-ios7-information; }\n.#{$ionicons-prefix}ios7-information-empty:before { content: $ionicon-var-ios7-information-empty; }\n.#{$ionicons-prefix}ios7-information-outline:before { content: $ionicon-var-ios7-information-outline; }\n.#{$ionicons-prefix}ios7-ionic-outline:before { content: $ionicon-var-ios7-ionic-outline; }\n.#{$ionicons-prefix}ios7-keypad:before { content: $ionicon-var-ios7-keypad; }\n.#{$ionicons-prefix}ios7-keypad-outline:before { content: $ionicon-var-ios7-keypad-outline; }\n.#{$ionicons-prefix}ios7-lightbulb:before { content: $ionicon-var-ios7-lightbulb; }\n.#{$ionicons-prefix}ios7-lightbulb-outline:before { content: $ionicon-var-ios7-lightbulb-outline; }\n.#{$ionicons-prefix}ios7-location:before { content: $ionicon-var-ios7-location; }\n.#{$ionicons-prefix}ios7-location-outline:before { content: $ionicon-var-ios7-location-outline; }\n.#{$ionicons-prefix}ios7-locked:before { content: $ionicon-var-ios7-locked; }\n.#{$ionicons-prefix}ios7-locked-outline:before { content: $ionicon-var-ios7-locked-outline; }\n.#{$ionicons-prefix}ios7-loop:before { content: $ionicon-var-ios7-loop; }\n.#{$ionicons-prefix}ios7-loop-strong:before { content: $ionicon-var-ios7-loop-strong; }\n.#{$ionicons-prefix}ios7-medkit:before { content: $ionicon-var-ios7-medkit; }\n.#{$ionicons-prefix}ios7-medkit-outline:before { content: $ionicon-var-ios7-medkit-outline; }\n.#{$ionicons-prefix}ios7-mic:before { content: $ionicon-var-ios7-mic; }\n.#{$ionicons-prefix}ios7-mic-off:before { content: $ionicon-var-ios7-mic-off; }\n.#{$ionicons-prefix}ios7-mic-outline:before { content: $ionicon-var-ios7-mic-outline; }\n.#{$ionicons-prefix}ios7-minus:before { content: $ionicon-var-ios7-minus; }\n.#{$ionicons-prefix}ios7-minus-empty:before { content: $ionicon-var-ios7-minus-empty; }\n.#{$ionicons-prefix}ios7-minus-outline:before { content: $ionicon-var-ios7-minus-outline; }\n.#{$ionicons-prefix}ios7-monitor:before { content: $ionicon-var-ios7-monitor; }\n.#{$ionicons-prefix}ios7-monitor-outline:before { content: $ionicon-var-ios7-monitor-outline; }\n.#{$ionicons-prefix}ios7-moon:before { content: $ionicon-var-ios7-moon; }\n.#{$ionicons-prefix}ios7-moon-outline:before { content: $ionicon-var-ios7-moon-outline; }\n.#{$ionicons-prefix}ios7-more:before { content: $ionicon-var-ios7-more; }\n.#{$ionicons-prefix}ios7-more-outline:before { content: $ionicon-var-ios7-more-outline; }\n.#{$ionicons-prefix}ios7-musical-note:before { content: $ionicon-var-ios7-musical-note; }\n.#{$ionicons-prefix}ios7-musical-notes:before { content: $ionicon-var-ios7-musical-notes; }\n.#{$ionicons-prefix}ios7-navigate:before { content: $ionicon-var-ios7-navigate; }\n.#{$ionicons-prefix}ios7-navigate-outline:before { content: $ionicon-var-ios7-navigate-outline; }\n.#{$ionicons-prefix}ios7-paper:before { content: $ionicon-var-ios7-paper; }\n.#{$ionicons-prefix}ios7-paper-outline:before { content: $ionicon-var-ios7-paper-outline; }\n.#{$ionicons-prefix}ios7-paperplane:before { content: $ionicon-var-ios7-paperplane; }\n.#{$ionicons-prefix}ios7-paperplane-outline:before { content: $ionicon-var-ios7-paperplane-outline; }\n.#{$ionicons-prefix}ios7-partlysunny:before { content: $ionicon-var-ios7-partlysunny; }\n.#{$ionicons-prefix}ios7-partlysunny-outline:before { content: $ionicon-var-ios7-partlysunny-outline; }\n.#{$ionicons-prefix}ios7-pause:before { content: $ionicon-var-ios7-pause; }\n.#{$ionicons-prefix}ios7-pause-outline:before { content: $ionicon-var-ios7-pause-outline; }\n.#{$ionicons-prefix}ios7-paw:before { content: $ionicon-var-ios7-paw; }\n.#{$ionicons-prefix}ios7-paw-outline:before { content: $ionicon-var-ios7-paw-outline; }\n.#{$ionicons-prefix}ios7-people:before { content: $ionicon-var-ios7-people; }\n.#{$ionicons-prefix}ios7-people-outline:before { content: $ionicon-var-ios7-people-outline; }\n.#{$ionicons-prefix}ios7-person:before { content: $ionicon-var-ios7-person; }\n.#{$ionicons-prefix}ios7-person-outline:before { content: $ionicon-var-ios7-person-outline; }\n.#{$ionicons-prefix}ios7-personadd:before { content: $ionicon-var-ios7-personadd; }\n.#{$ionicons-prefix}ios7-personadd-outline:before { content: $ionicon-var-ios7-personadd-outline; }\n.#{$ionicons-prefix}ios7-photos:before { content: $ionicon-var-ios7-photos; }\n.#{$ionicons-prefix}ios7-photos-outline:before { content: $ionicon-var-ios7-photos-outline; }\n.#{$ionicons-prefix}ios7-pie:before { content: $ionicon-var-ios7-pie; }\n.#{$ionicons-prefix}ios7-pie-outline:before { content: $ionicon-var-ios7-pie-outline; }\n.#{$ionicons-prefix}ios7-play:before { content: $ionicon-var-ios7-play; }\n.#{$ionicons-prefix}ios7-play-outline:before { content: $ionicon-var-ios7-play-outline; }\n.#{$ionicons-prefix}ios7-plus:before { content: $ionicon-var-ios7-plus; }\n.#{$ionicons-prefix}ios7-plus-empty:before { content: $ionicon-var-ios7-plus-empty; }\n.#{$ionicons-prefix}ios7-plus-outline:before { content: $ionicon-var-ios7-plus-outline; }\n.#{$ionicons-prefix}ios7-pricetag:before { content: $ionicon-var-ios7-pricetag; }\n.#{$ionicons-prefix}ios7-pricetag-outline:before { content: $ionicon-var-ios7-pricetag-outline; }\n.#{$ionicons-prefix}ios7-pricetags:before { content: $ionicon-var-ios7-pricetags; }\n.#{$ionicons-prefix}ios7-pricetags-outline:before { content: $ionicon-var-ios7-pricetags-outline; }\n.#{$ionicons-prefix}ios7-printer:before { content: $ionicon-var-ios7-printer; }\n.#{$ionicons-prefix}ios7-printer-outline:before { content: $ionicon-var-ios7-printer-outline; }\n.#{$ionicons-prefix}ios7-pulse:before { content: $ionicon-var-ios7-pulse; }\n.#{$ionicons-prefix}ios7-pulse-strong:before { content: $ionicon-var-ios7-pulse-strong; }\n.#{$ionicons-prefix}ios7-rainy:before { content: $ionicon-var-ios7-rainy; }\n.#{$ionicons-prefix}ios7-rainy-outline:before { content: $ionicon-var-ios7-rainy-outline; }\n.#{$ionicons-prefix}ios7-recording:before { content: $ionicon-var-ios7-recording; }\n.#{$ionicons-prefix}ios7-recording-outline:before { content: $ionicon-var-ios7-recording-outline; }\n.#{$ionicons-prefix}ios7-redo:before { content: $ionicon-var-ios7-redo; }\n.#{$ionicons-prefix}ios7-redo-outline:before { content: $ionicon-var-ios7-redo-outline; }\n.#{$ionicons-prefix}ios7-refresh:before { content: $ionicon-var-ios7-refresh; }\n.#{$ionicons-prefix}ios7-refresh-empty:before { content: $ionicon-var-ios7-refresh-empty; }\n.#{$ionicons-prefix}ios7-refresh-outline:before { content: $ionicon-var-ios7-refresh-outline; }\n.#{$ionicons-prefix}ios7-reload:before { content: $ionicon-var-ios7-reload; }\n.#{$ionicons-prefix}ios7-reverse-camera:before { content: $ionicon-var-ios7-reverse-camera; }\n.#{$ionicons-prefix}ios7-reverse-camera-outline:before { content: $ionicon-var-ios7-reverse-camera-outline; }\n.#{$ionicons-prefix}ios7-rewind:before { content: $ionicon-var-ios7-rewind; }\n.#{$ionicons-prefix}ios7-rewind-outline:before { content: $ionicon-var-ios7-rewind-outline; }\n.#{$ionicons-prefix}ios7-search:before { content: $ionicon-var-ios7-search; }\n.#{$ionicons-prefix}ios7-search-strong:before { content: $ionicon-var-ios7-search-strong; }\n.#{$ionicons-prefix}ios7-settings:before { content: $ionicon-var-ios7-settings; }\n.#{$ionicons-prefix}ios7-settings-strong:before { content: $ionicon-var-ios7-settings-strong; }\n.#{$ionicons-prefix}ios7-shrink:before { content: $ionicon-var-ios7-shrink; }\n.#{$ionicons-prefix}ios7-skipbackward:before { content: $ionicon-var-ios7-skipbackward; }\n.#{$ionicons-prefix}ios7-skipbackward-outline:before { content: $ionicon-var-ios7-skipbackward-outline; }\n.#{$ionicons-prefix}ios7-skipforward:before { content: $ionicon-var-ios7-skipforward; }\n.#{$ionicons-prefix}ios7-skipforward-outline:before { content: $ionicon-var-ios7-skipforward-outline; }\n.#{$ionicons-prefix}ios7-snowy:before { content: $ionicon-var-ios7-snowy; }\n.#{$ionicons-prefix}ios7-speedometer:before { content: $ionicon-var-ios7-speedometer; }\n.#{$ionicons-prefix}ios7-speedometer-outline:before { content: $ionicon-var-ios7-speedometer-outline; }\n.#{$ionicons-prefix}ios7-star:before { content: $ionicon-var-ios7-star; }\n.#{$ionicons-prefix}ios7-star-half:before { content: $ionicon-var-ios7-star-half; }\n.#{$ionicons-prefix}ios7-star-outline:before { content: $ionicon-var-ios7-star-outline; }\n.#{$ionicons-prefix}ios7-stopwatch:before { content: $ionicon-var-ios7-stopwatch; }\n.#{$ionicons-prefix}ios7-stopwatch-outline:before { content: $ionicon-var-ios7-stopwatch-outline; }\n.#{$ionicons-prefix}ios7-sunny:before { content: $ionicon-var-ios7-sunny; }\n.#{$ionicons-prefix}ios7-sunny-outline:before { content: $ionicon-var-ios7-sunny-outline; }\n.#{$ionicons-prefix}ios7-telephone:before { content: $ionicon-var-ios7-telephone; }\n.#{$ionicons-prefix}ios7-telephone-outline:before { content: $ionicon-var-ios7-telephone-outline; }\n.#{$ionicons-prefix}ios7-tennisball:before { content: $ionicon-var-ios7-tennisball; }\n.#{$ionicons-prefix}ios7-tennisball-outline:before { content: $ionicon-var-ios7-tennisball-outline; }\n.#{$ionicons-prefix}ios7-thunderstorm:before { content: $ionicon-var-ios7-thunderstorm; }\n.#{$ionicons-prefix}ios7-thunderstorm-outline:before { content: $ionicon-var-ios7-thunderstorm-outline; }\n.#{$ionicons-prefix}ios7-time:before { content: $ionicon-var-ios7-time; }\n.#{$ionicons-prefix}ios7-time-outline:before { content: $ionicon-var-ios7-time-outline; }\n.#{$ionicons-prefix}ios7-timer:before { content: $ionicon-var-ios7-timer; }\n.#{$ionicons-prefix}ios7-timer-outline:before { content: $ionicon-var-ios7-timer-outline; }\n.#{$ionicons-prefix}ios7-toggle:before { content: $ionicon-var-ios7-toggle; }\n.#{$ionicons-prefix}ios7-toggle-outline:before { content: $ionicon-var-ios7-toggle-outline; }\n.#{$ionicons-prefix}ios7-trash:before { content: $ionicon-var-ios7-trash; }\n.#{$ionicons-prefix}ios7-trash-outline:before { content: $ionicon-var-ios7-trash-outline; }\n.#{$ionicons-prefix}ios7-undo:before { content: $ionicon-var-ios7-undo; }\n.#{$ionicons-prefix}ios7-undo-outline:before { content: $ionicon-var-ios7-undo-outline; }\n.#{$ionicons-prefix}ios7-unlocked:before { content: $ionicon-var-ios7-unlocked; }\n.#{$ionicons-prefix}ios7-unlocked-outline:before { content: $ionicon-var-ios7-unlocked-outline; }\n.#{$ionicons-prefix}ios7-upload:before { content: $ionicon-var-ios7-upload; }\n.#{$ionicons-prefix}ios7-upload-outline:before { content: $ionicon-var-ios7-upload-outline; }\n.#{$ionicons-prefix}ios7-videocam:before { content: $ionicon-var-ios7-videocam; }\n.#{$ionicons-prefix}ios7-videocam-outline:before { content: $ionicon-var-ios7-videocam-outline; }\n.#{$ionicons-prefix}ios7-volume-high:before { content: $ionicon-var-ios7-volume-high; }\n.#{$ionicons-prefix}ios7-volume-low:before { content: $ionicon-var-ios7-volume-low; }\n.#{$ionicons-prefix}ios7-wineglass:before { content: $ionicon-var-ios7-wineglass; }\n.#{$ionicons-prefix}ios7-wineglass-outline:before { content: $ionicon-var-ios7-wineglass-outline; }\n.#{$ionicons-prefix}ios7-world:before { content: $ionicon-var-ios7-world; }\n.#{$ionicons-prefix}ios7-world-outline:before { content: $ionicon-var-ios7-world-outline; }\n.#{$ionicons-prefix}ipad:before { content: $ionicon-var-ipad; }\n.#{$ionicons-prefix}iphone:before { content: $ionicon-var-iphone; }\n.#{$ionicons-prefix}ipod:before { content: $ionicon-var-ipod; }\n.#{$ionicons-prefix}jet:before { content: $ionicon-var-jet; }\n.#{$ionicons-prefix}key:before { content: $ionicon-var-key; }\n.#{$ionicons-prefix}knife:before { content: $ionicon-var-knife; }\n.#{$ionicons-prefix}laptop:before { content: $ionicon-var-laptop; }\n.#{$ionicons-prefix}leaf:before { content: $ionicon-var-leaf; }\n.#{$ionicons-prefix}levels:before { content: $ionicon-var-levels; }\n.#{$ionicons-prefix}lightbulb:before { content: $ionicon-var-lightbulb; }\n.#{$ionicons-prefix}link:before { content: $ionicon-var-link; }\n.#{$ionicons-prefix}load-a:before { content: $ionicon-var-load-a; }\n.#{$ionicons-prefix}load-b:before { content: $ionicon-var-load-b; }\n.#{$ionicons-prefix}load-c:before { content: $ionicon-var-load-c; }\n.#{$ionicons-prefix}load-d:before { content: $ionicon-var-load-d; }\n.#{$ionicons-prefix}location:before { content: $ionicon-var-location; }\n.#{$ionicons-prefix}locked:before { content: $ionicon-var-locked; }\n.#{$ionicons-prefix}log-in:before { content: $ionicon-var-log-in; }\n.#{$ionicons-prefix}log-out:before { content: $ionicon-var-log-out; }\n.#{$ionicons-prefix}loop:before { content: $ionicon-var-loop; }\n.#{$ionicons-prefix}magnet:before { content: $ionicon-var-magnet; }\n.#{$ionicons-prefix}male:before { content: $ionicon-var-male; }\n.#{$ionicons-prefix}man:before { content: $ionicon-var-man; }\n.#{$ionicons-prefix}map:before { content: $ionicon-var-map; }\n.#{$ionicons-prefix}medkit:before { content: $ionicon-var-medkit; }\n.#{$ionicons-prefix}merge:before { content: $ionicon-var-merge; }\n.#{$ionicons-prefix}mic-a:before { content: $ionicon-var-mic-a; }\n.#{$ionicons-prefix}mic-b:before { content: $ionicon-var-mic-b; }\n.#{$ionicons-prefix}mic-c:before { content: $ionicon-var-mic-c; }\n.#{$ionicons-prefix}minus:before { content: $ionicon-var-minus; }\n.#{$ionicons-prefix}minus-circled:before { content: $ionicon-var-minus-circled; }\n.#{$ionicons-prefix}minus-round:before { content: $ionicon-var-minus-round; }\n.#{$ionicons-prefix}model-s:before { content: $ionicon-var-model-s; }\n.#{$ionicons-prefix}monitor:before { content: $ionicon-var-monitor; }\n.#{$ionicons-prefix}more:before { content: $ionicon-var-more; }\n.#{$ionicons-prefix}mouse:before { content: $ionicon-var-mouse; }\n.#{$ionicons-prefix}music-note:before { content: $ionicon-var-music-note; }\n.#{$ionicons-prefix}navicon:before { content: $ionicon-var-navicon; }\n.#{$ionicons-prefix}navicon-round:before { content: $ionicon-var-navicon-round; }\n.#{$ionicons-prefix}navigate:before { content: $ionicon-var-navigate; }\n.#{$ionicons-prefix}network:before { content: $ionicon-var-network; }\n.#{$ionicons-prefix}no-smoking:before { content: $ionicon-var-no-smoking; }\n.#{$ionicons-prefix}nuclear:before { content: $ionicon-var-nuclear; }\n.#{$ionicons-prefix}outlet:before { content: $ionicon-var-outlet; }\n.#{$ionicons-prefix}paper-airplane:before { content: $ionicon-var-paper-airplane; }\n.#{$ionicons-prefix}paperclip:before { content: $ionicon-var-paperclip; }\n.#{$ionicons-prefix}pause:before { content: $ionicon-var-pause; }\n.#{$ionicons-prefix}person:before { content: $ionicon-var-person; }\n.#{$ionicons-prefix}person-add:before { content: $ionicon-var-person-add; }\n.#{$ionicons-prefix}person-stalker:before { content: $ionicon-var-person-stalker; }\n.#{$ionicons-prefix}pie-graph:before { content: $ionicon-var-pie-graph; }\n.#{$ionicons-prefix}pin:before { content: $ionicon-var-pin; }\n.#{$ionicons-prefix}pinpoint:before { content: $ionicon-var-pinpoint; }\n.#{$ionicons-prefix}pizza:before { content: $ionicon-var-pizza; }\n.#{$ionicons-prefix}plane:before { content: $ionicon-var-plane; }\n.#{$ionicons-prefix}planet:before { content: $ionicon-var-planet; }\n.#{$ionicons-prefix}play:before { content: $ionicon-var-play; }\n.#{$ionicons-prefix}playstation:before { content: $ionicon-var-playstation; }\n.#{$ionicons-prefix}plus:before { content: $ionicon-var-plus; }\n.#{$ionicons-prefix}plus-circled:before { content: $ionicon-var-plus-circled; }\n.#{$ionicons-prefix}plus-round:before { content: $ionicon-var-plus-round; }\n.#{$ionicons-prefix}podium:before { content: $ionicon-var-podium; }\n.#{$ionicons-prefix}pound:before { content: $ionicon-var-pound; }\n.#{$ionicons-prefix}power:before { content: $ionicon-var-power; }\n.#{$ionicons-prefix}pricetag:before { content: $ionicon-var-pricetag; }\n.#{$ionicons-prefix}pricetags:before { content: $ionicon-var-pricetags; }\n.#{$ionicons-prefix}printer:before { content: $ionicon-var-printer; }\n.#{$ionicons-prefix}pull-request:before { content: $ionicon-var-pull-request; }\n.#{$ionicons-prefix}qr-scanner:before { content: $ionicon-var-qr-scanner; }\n.#{$ionicons-prefix}quote:before { content: $ionicon-var-quote; }\n.#{$ionicons-prefix}radio-waves:before { content: $ionicon-var-radio-waves; }\n.#{$ionicons-prefix}record:before { content: $ionicon-var-record; }\n.#{$ionicons-prefix}refresh:before { content: $ionicon-var-refresh; }\n.#{$ionicons-prefix}reply:before { content: $ionicon-var-reply; }\n.#{$ionicons-prefix}reply-all:before { content: $ionicon-var-reply-all; }\n.#{$ionicons-prefix}ribbon-a:before { content: $ionicon-var-ribbon-a; }\n.#{$ionicons-prefix}ribbon-b:before { content: $ionicon-var-ribbon-b; }\n.#{$ionicons-prefix}sad:before { content: $ionicon-var-sad; }\n.#{$ionicons-prefix}scissors:before { content: $ionicon-var-scissors; }\n.#{$ionicons-prefix}search:before { content: $ionicon-var-search; }\n.#{$ionicons-prefix}settings:before { content: $ionicon-var-settings; }\n.#{$ionicons-prefix}share:before { content: $ionicon-var-share; }\n.#{$ionicons-prefix}shuffle:before { content: $ionicon-var-shuffle; }\n.#{$ionicons-prefix}skip-backward:before { content: $ionicon-var-skip-backward; }\n.#{$ionicons-prefix}skip-forward:before { content: $ionicon-var-skip-forward; }\n.#{$ionicons-prefix}social-android:before { content: $ionicon-var-social-android; }\n.#{$ionicons-prefix}social-android-outline:before { content: $ionicon-var-social-android-outline; }\n.#{$ionicons-prefix}social-apple:before { content: $ionicon-var-social-apple; }\n.#{$ionicons-prefix}social-apple-outline:before { content: $ionicon-var-social-apple-outline; }\n.#{$ionicons-prefix}social-bitcoin:before { content: $ionicon-var-social-bitcoin; }\n.#{$ionicons-prefix}social-bitcoin-outline:before { content: $ionicon-var-social-bitcoin-outline; }\n.#{$ionicons-prefix}social-buffer:before { content: $ionicon-var-social-buffer; }\n.#{$ionicons-prefix}social-buffer-outline:before { content: $ionicon-var-social-buffer-outline; }\n.#{$ionicons-prefix}social-designernews:before { content: $ionicon-var-social-designernews; }\n.#{$ionicons-prefix}social-designernews-outline:before { content: $ionicon-var-social-designernews-outline; }\n.#{$ionicons-prefix}social-dribbble:before { content: $ionicon-var-social-dribbble; }\n.#{$ionicons-prefix}social-dribbble-outline:before { content: $ionicon-var-social-dribbble-outline; }\n.#{$ionicons-prefix}social-dropbox:before { content: $ionicon-var-social-dropbox; }\n.#{$ionicons-prefix}social-dropbox-outline:before { content: $ionicon-var-social-dropbox-outline; }\n.#{$ionicons-prefix}social-facebook:before { content: $ionicon-var-social-facebook; }\n.#{$ionicons-prefix}social-facebook-outline:before { content: $ionicon-var-social-facebook-outline; }\n.#{$ionicons-prefix}social-foursquare:before { content: $ionicon-var-social-foursquare; }\n.#{$ionicons-prefix}social-foursquare-outline:before { content: $ionicon-var-social-foursquare-outline; }\n.#{$ionicons-prefix}social-freebsd-devil:before { content: $ionicon-var-social-freebsd-devil; }\n.#{$ionicons-prefix}social-github:before { content: $ionicon-var-social-github; }\n.#{$ionicons-prefix}social-github-outline:before { content: $ionicon-var-social-github-outline; }\n.#{$ionicons-prefix}social-google:before { content: $ionicon-var-social-google; }\n.#{$ionicons-prefix}social-google-outline:before { content: $ionicon-var-social-google-outline; }\n.#{$ionicons-prefix}social-googleplus:before { content: $ionicon-var-social-googleplus; }\n.#{$ionicons-prefix}social-googleplus-outline:before { content: $ionicon-var-social-googleplus-outline; }\n.#{$ionicons-prefix}social-hackernews:before { content: $ionicon-var-social-hackernews; }\n.#{$ionicons-prefix}social-hackernews-outline:before { content: $ionicon-var-social-hackernews-outline; }\n.#{$ionicons-prefix}social-instagram:before { content: $ionicon-var-social-instagram; }\n.#{$ionicons-prefix}social-instagram-outline:before { content: $ionicon-var-social-instagram-outline; }\n.#{$ionicons-prefix}social-linkedin:before { content: $ionicon-var-social-linkedin; }\n.#{$ionicons-prefix}social-linkedin-outline:before { content: $ionicon-var-social-linkedin-outline; }\n.#{$ionicons-prefix}social-pinterest:before { content: $ionicon-var-social-pinterest; }\n.#{$ionicons-prefix}social-pinterest-outline:before { content: $ionicon-var-social-pinterest-outline; }\n.#{$ionicons-prefix}social-reddit:before { content: $ionicon-var-social-reddit; }\n.#{$ionicons-prefix}social-reddit-outline:before { content: $ionicon-var-social-reddit-outline; }\n.#{$ionicons-prefix}social-rss:before { content: $ionicon-var-social-rss; }\n.#{$ionicons-prefix}social-rss-outline:before { content: $ionicon-var-social-rss-outline; }\n.#{$ionicons-prefix}social-skype:before { content: $ionicon-var-social-skype; }\n.#{$ionicons-prefix}social-skype-outline:before { content: $ionicon-var-social-skype-outline; }\n.#{$ionicons-prefix}social-tumblr:before { content: $ionicon-var-social-tumblr; }\n.#{$ionicons-prefix}social-tumblr-outline:before { content: $ionicon-var-social-tumblr-outline; }\n.#{$ionicons-prefix}social-tux:before { content: $ionicon-var-social-tux; }\n.#{$ionicons-prefix}social-twitter:before { content: $ionicon-var-social-twitter; }\n.#{$ionicons-prefix}social-twitter-outline:before { content: $ionicon-var-social-twitter-outline; }\n.#{$ionicons-prefix}social-usd:before { content: $ionicon-var-social-usd; }\n.#{$ionicons-prefix}social-usd-outline:before { content: $ionicon-var-social-usd-outline; }\n.#{$ionicons-prefix}social-vimeo:before { content: $ionicon-var-social-vimeo; }\n.#{$ionicons-prefix}social-vimeo-outline:before { content: $ionicon-var-social-vimeo-outline; }\n.#{$ionicons-prefix}social-windows:before { content: $ionicon-var-social-windows; }\n.#{$ionicons-prefix}social-windows-outline:before { content: $ionicon-var-social-windows-outline; }\n.#{$ionicons-prefix}social-wordpress:before { content: $ionicon-var-social-wordpress; }\n.#{$ionicons-prefix}social-wordpress-outline:before { content: $ionicon-var-social-wordpress-outline; }\n.#{$ionicons-prefix}social-yahoo:before { content: $ionicon-var-social-yahoo; }\n.#{$ionicons-prefix}social-yahoo-outline:before { content: $ionicon-var-social-yahoo-outline; }\n.#{$ionicons-prefix}social-youtube:before { content: $ionicon-var-social-youtube; }\n.#{$ionicons-prefix}social-youtube-outline:before { content: $ionicon-var-social-youtube-outline; }\n.#{$ionicons-prefix}speakerphone:before { content: $ionicon-var-speakerphone; }\n.#{$ionicons-prefix}speedometer:before { content: $ionicon-var-speedometer; }\n.#{$ionicons-prefix}spoon:before { content: $ionicon-var-spoon; }\n.#{$ionicons-prefix}star:before { content: $ionicon-var-star; }\n.#{$ionicons-prefix}stats-bars:before { content: $ionicon-var-stats-bars; }\n.#{$ionicons-prefix}steam:before { content: $ionicon-var-steam; }\n.#{$ionicons-prefix}stop:before { content: $ionicon-var-stop; }\n.#{$ionicons-prefix}thermometer:before { content: $ionicon-var-thermometer; }\n.#{$ionicons-prefix}thumbsdown:before { content: $ionicon-var-thumbsdown; }\n.#{$ionicons-prefix}thumbsup:before { content: $ionicon-var-thumbsup; }\n.#{$ionicons-prefix}toggle:before { content: $ionicon-var-toggle; }\n.#{$ionicons-prefix}toggle-filled:before { content: $ionicon-var-toggle-filled; }\n.#{$ionicons-prefix}trash-a:before { content: $ionicon-var-trash-a; }\n.#{$ionicons-prefix}trash-b:before { content: $ionicon-var-trash-b; }\n.#{$ionicons-prefix}trophy:before { content: $ionicon-var-trophy; }\n.#{$ionicons-prefix}umbrella:before { content: $ionicon-var-umbrella; }\n.#{$ionicons-prefix}university:before { content: $ionicon-var-university; }\n.#{$ionicons-prefix}unlocked:before { content: $ionicon-var-unlocked; }\n.#{$ionicons-prefix}upload:before { content: $ionicon-var-upload; }\n.#{$ionicons-prefix}usb:before { content: $ionicon-var-usb; }\n.#{$ionicons-prefix}videocamera:before { content: $ionicon-var-videocamera; }\n.#{$ionicons-prefix}volume-high:before { content: $ionicon-var-volume-high; }\n.#{$ionicons-prefix}volume-low:before { content: $ionicon-var-volume-low; }\n.#{$ionicons-prefix}volume-medium:before { content: $ionicon-var-volume-medium; }\n.#{$ionicons-prefix}volume-mute:before { content: $ionicon-var-volume-mute; }\n.#{$ionicons-prefix}wand:before { content: $ionicon-var-wand; }\n.#{$ionicons-prefix}waterdrop:before { content: $ionicon-var-waterdrop; }\n.#{$ionicons-prefix}wifi:before { content: $ionicon-var-wifi; }\n.#{$ionicons-prefix}wineglass:before { content: $ionicon-var-wineglass; }\n.#{$ionicons-prefix}woman:before { content: $ionicon-var-woman; }\n.#{$ionicons-prefix}wrench:before { content: $ionicon-var-wrench; }\n.#{$ionicons-prefix}xbox:before { content: $ionicon-var-xbox; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/scss/_ionicons-variables.scss",
    "content": "// Ionicons Variables\n// --------------------------\n\n$ionicons-font-path: \"../fonts\" !default;\n$ionicons-font-family: \"Ionicons\" !default;\n$ionicons-version: \"1.5.0\" !default;\n$ionicons-prefix: ion- !default;\n\n$ionicon-var-alert: \"\\f101\";\n$ionicon-var-alert-circled: \"\\f100\";\n$ionicon-var-android-add: \"\\f2c7\";\n$ionicon-var-android-add-contact: \"\\f2c6\";\n$ionicon-var-android-alarm: \"\\f2c8\";\n$ionicon-var-android-archive: \"\\f2c9\";\n$ionicon-var-android-arrow-back: \"\\f2ca\";\n$ionicon-var-android-arrow-down-left: \"\\f2cb\";\n$ionicon-var-android-arrow-down-right: \"\\f2cc\";\n$ionicon-var-android-arrow-forward: \"\\f30f\";\n$ionicon-var-android-arrow-up-left: \"\\f2cd\";\n$ionicon-var-android-arrow-up-right: \"\\f2ce\";\n$ionicon-var-android-battery: \"\\f2cf\";\n$ionicon-var-android-book: \"\\f2d0\";\n$ionicon-var-android-calendar: \"\\f2d1\";\n$ionicon-var-android-call: \"\\f2d2\";\n$ionicon-var-android-camera: \"\\f2d3\";\n$ionicon-var-android-chat: \"\\f2d4\";\n$ionicon-var-android-checkmark: \"\\f2d5\";\n$ionicon-var-android-clock: \"\\f2d6\";\n$ionicon-var-android-close: \"\\f2d7\";\n$ionicon-var-android-contact: \"\\f2d8\";\n$ionicon-var-android-contacts: \"\\f2d9\";\n$ionicon-var-android-data: \"\\f2da\";\n$ionicon-var-android-developer: \"\\f2db\";\n$ionicon-var-android-display: \"\\f2dc\";\n$ionicon-var-android-download: \"\\f2dd\";\n$ionicon-var-android-drawer: \"\\f310\";\n$ionicon-var-android-dropdown: \"\\f2de\";\n$ionicon-var-android-earth: \"\\f2df\";\n$ionicon-var-android-folder: \"\\f2e0\";\n$ionicon-var-android-forums: \"\\f2e1\";\n$ionicon-var-android-friends: \"\\f2e2\";\n$ionicon-var-android-hand: \"\\f2e3\";\n$ionicon-var-android-image: \"\\f2e4\";\n$ionicon-var-android-inbox: \"\\f2e5\";\n$ionicon-var-android-information: \"\\f2e6\";\n$ionicon-var-android-keypad: \"\\f2e7\";\n$ionicon-var-android-lightbulb: \"\\f2e8\";\n$ionicon-var-android-locate: \"\\f2e9\";\n$ionicon-var-android-location: \"\\f2ea\";\n$ionicon-var-android-mail: \"\\f2eb\";\n$ionicon-var-android-microphone: \"\\f2ec\";\n$ionicon-var-android-mixer: \"\\f2ed\";\n$ionicon-var-android-more: \"\\f2ee\";\n$ionicon-var-android-note: \"\\f2ef\";\n$ionicon-var-android-playstore: \"\\f2f0\";\n$ionicon-var-android-printer: \"\\f2f1\";\n$ionicon-var-android-promotion: \"\\f2f2\";\n$ionicon-var-android-reminder: \"\\f2f3\";\n$ionicon-var-android-remove: \"\\f2f4\";\n$ionicon-var-android-search: \"\\f2f5\";\n$ionicon-var-android-send: \"\\f2f6\";\n$ionicon-var-android-settings: \"\\f2f7\";\n$ionicon-var-android-share: \"\\f2f8\";\n$ionicon-var-android-social: \"\\f2fa\";\n$ionicon-var-android-social-user: \"\\f2f9\";\n$ionicon-var-android-sort: \"\\f2fb\";\n$ionicon-var-android-stair-drawer: \"\\f311\";\n$ionicon-var-android-star: \"\\f2fc\";\n$ionicon-var-android-stopwatch: \"\\f2fd\";\n$ionicon-var-android-storage: \"\\f2fe\";\n$ionicon-var-android-system-back: \"\\f2ff\";\n$ionicon-var-android-system-home: \"\\f300\";\n$ionicon-var-android-system-windows: \"\\f301\";\n$ionicon-var-android-timer: \"\\f302\";\n$ionicon-var-android-trash: \"\\f303\";\n$ionicon-var-android-user-menu: \"\\f312\";\n$ionicon-var-android-volume: \"\\f304\";\n$ionicon-var-android-wifi: \"\\f305\";\n$ionicon-var-aperture: \"\\f313\";\n$ionicon-var-archive: \"\\f102\";\n$ionicon-var-arrow-down-a: \"\\f103\";\n$ionicon-var-arrow-down-b: \"\\f104\";\n$ionicon-var-arrow-down-c: \"\\f105\";\n$ionicon-var-arrow-expand: \"\\f25e\";\n$ionicon-var-arrow-graph-down-left: \"\\f25f\";\n$ionicon-var-arrow-graph-down-right: \"\\f260\";\n$ionicon-var-arrow-graph-up-left: \"\\f261\";\n$ionicon-var-arrow-graph-up-right: \"\\f262\";\n$ionicon-var-arrow-left-a: \"\\f106\";\n$ionicon-var-arrow-left-b: \"\\f107\";\n$ionicon-var-arrow-left-c: \"\\f108\";\n$ionicon-var-arrow-move: \"\\f263\";\n$ionicon-var-arrow-resize: \"\\f264\";\n$ionicon-var-arrow-return-left: \"\\f265\";\n$ionicon-var-arrow-return-right: \"\\f266\";\n$ionicon-var-arrow-right-a: \"\\f109\";\n$ionicon-var-arrow-right-b: \"\\f10a\";\n$ionicon-var-arrow-right-c: \"\\f10b\";\n$ionicon-var-arrow-shrink: \"\\f267\";\n$ionicon-var-arrow-swap: \"\\f268\";\n$ionicon-var-arrow-up-a: \"\\f10c\";\n$ionicon-var-arrow-up-b: \"\\f10d\";\n$ionicon-var-arrow-up-c: \"\\f10e\";\n$ionicon-var-asterisk: \"\\f314\";\n$ionicon-var-at: \"\\f10f\";\n$ionicon-var-bag: \"\\f110\";\n$ionicon-var-battery-charging: \"\\f111\";\n$ionicon-var-battery-empty: \"\\f112\";\n$ionicon-var-battery-full: \"\\f113\";\n$ionicon-var-battery-half: \"\\f114\";\n$ionicon-var-battery-low: \"\\f115\";\n$ionicon-var-beaker: \"\\f269\";\n$ionicon-var-beer: \"\\f26a\";\n$ionicon-var-bluetooth: \"\\f116\";\n$ionicon-var-bonfire: \"\\f315\";\n$ionicon-var-bookmark: \"\\f26b\";\n$ionicon-var-briefcase: \"\\f26c\";\n$ionicon-var-bug: \"\\f2be\";\n$ionicon-var-calculator: \"\\f26d\";\n$ionicon-var-calendar: \"\\f117\";\n$ionicon-var-camera: \"\\f118\";\n$ionicon-var-card: \"\\f119\";\n$ionicon-var-cash: \"\\f316\";\n$ionicon-var-chatbox: \"\\f11b\";\n$ionicon-var-chatbox-working: \"\\f11a\";\n$ionicon-var-chatboxes: \"\\f11c\";\n$ionicon-var-chatbubble: \"\\f11e\";\n$ionicon-var-chatbubble-working: \"\\f11d\";\n$ionicon-var-chatbubbles: \"\\f11f\";\n$ionicon-var-checkmark: \"\\f122\";\n$ionicon-var-checkmark-circled: \"\\f120\";\n$ionicon-var-checkmark-round: \"\\f121\";\n$ionicon-var-chevron-down: \"\\f123\";\n$ionicon-var-chevron-left: \"\\f124\";\n$ionicon-var-chevron-right: \"\\f125\";\n$ionicon-var-chevron-up: \"\\f126\";\n$ionicon-var-clipboard: \"\\f127\";\n$ionicon-var-clock: \"\\f26e\";\n$ionicon-var-close: \"\\f12a\";\n$ionicon-var-close-circled: \"\\f128\";\n$ionicon-var-close-round: \"\\f129\";\n$ionicon-var-closed-captioning: \"\\f317\";\n$ionicon-var-cloud: \"\\f12b\";\n$ionicon-var-code: \"\\f271\";\n$ionicon-var-code-download: \"\\f26f\";\n$ionicon-var-code-working: \"\\f270\";\n$ionicon-var-coffee: \"\\f272\";\n$ionicon-var-compass: \"\\f273\";\n$ionicon-var-compose: \"\\f12c\";\n$ionicon-var-connection-bars: \"\\f274\";\n$ionicon-var-contrast: \"\\f275\";\n$ionicon-var-cube: \"\\f318\";\n$ionicon-var-disc: \"\\f12d\";\n$ionicon-var-document: \"\\f12f\";\n$ionicon-var-document-text: \"\\f12e\";\n$ionicon-var-drag: \"\\f130\";\n$ionicon-var-earth: \"\\f276\";\n$ionicon-var-edit: \"\\f2bf\";\n$ionicon-var-egg: \"\\f277\";\n$ionicon-var-eject: \"\\f131\";\n$ionicon-var-email: \"\\f132\";\n$ionicon-var-eye: \"\\f133\";\n$ionicon-var-eye-disabled: \"\\f306\";\n$ionicon-var-female: \"\\f278\";\n$ionicon-var-filing: \"\\f134\";\n$ionicon-var-film-marker: \"\\f135\";\n$ionicon-var-fireball: \"\\f319\";\n$ionicon-var-flag: \"\\f279\";\n$ionicon-var-flame: \"\\f31a\";\n$ionicon-var-flash: \"\\f137\";\n$ionicon-var-flash-off: \"\\f136\";\n$ionicon-var-flask: \"\\f138\";\n$ionicon-var-folder: \"\\f139\";\n$ionicon-var-fork: \"\\f27a\";\n$ionicon-var-fork-repo: \"\\f2c0\";\n$ionicon-var-forward: \"\\f13a\";\n$ionicon-var-funnel: \"\\f31b\";\n$ionicon-var-game-controller-a: \"\\f13b\";\n$ionicon-var-game-controller-b: \"\\f13c\";\n$ionicon-var-gear-a: \"\\f13d\";\n$ionicon-var-gear-b: \"\\f13e\";\n$ionicon-var-grid: \"\\f13f\";\n$ionicon-var-hammer: \"\\f27b\";\n$ionicon-var-happy: \"\\f31c\";\n$ionicon-var-headphone: \"\\f140\";\n$ionicon-var-heart: \"\\f141\";\n$ionicon-var-heart-broken: \"\\f31d\";\n$ionicon-var-help: \"\\f143\";\n$ionicon-var-help-buoy: \"\\f27c\";\n$ionicon-var-help-circled: \"\\f142\";\n$ionicon-var-home: \"\\f144\";\n$ionicon-var-icecream: \"\\f27d\";\n$ionicon-var-icon-social-google-plus: \"\\f146\";\n$ionicon-var-icon-social-google-plus-outline: \"\\f145\";\n$ionicon-var-image: \"\\f147\";\n$ionicon-var-images: \"\\f148\";\n$ionicon-var-information: \"\\f14a\";\n$ionicon-var-information-circled: \"\\f149\";\n$ionicon-var-ionic: \"\\f14b\";\n$ionicon-var-ios7-alarm: \"\\f14d\";\n$ionicon-var-ios7-alarm-outline: \"\\f14c\";\n$ionicon-var-ios7-albums: \"\\f14f\";\n$ionicon-var-ios7-albums-outline: \"\\f14e\";\n$ionicon-var-ios7-americanfootball: \"\\f31f\";\n$ionicon-var-ios7-americanfootball-outline: \"\\f31e\";\n$ionicon-var-ios7-analytics: \"\\f321\";\n$ionicon-var-ios7-analytics-outline: \"\\f320\";\n$ionicon-var-ios7-arrow-back: \"\\f150\";\n$ionicon-var-ios7-arrow-down: \"\\f151\";\n$ionicon-var-ios7-arrow-forward: \"\\f152\";\n$ionicon-var-ios7-arrow-left: \"\\f153\";\n$ionicon-var-ios7-arrow-right: \"\\f154\";\n$ionicon-var-ios7-arrow-thin-down: \"\\f27e\";\n$ionicon-var-ios7-arrow-thin-left: \"\\f27f\";\n$ionicon-var-ios7-arrow-thin-right: \"\\f280\";\n$ionicon-var-ios7-arrow-thin-up: \"\\f281\";\n$ionicon-var-ios7-arrow-up: \"\\f155\";\n$ionicon-var-ios7-at: \"\\f157\";\n$ionicon-var-ios7-at-outline: \"\\f156\";\n$ionicon-var-ios7-barcode: \"\\f323\";\n$ionicon-var-ios7-barcode-outline: \"\\f322\";\n$ionicon-var-ios7-baseball: \"\\f325\";\n$ionicon-var-ios7-baseball-outline: \"\\f324\";\n$ionicon-var-ios7-basketball: \"\\f327\";\n$ionicon-var-ios7-basketball-outline: \"\\f326\";\n$ionicon-var-ios7-bell: \"\\f159\";\n$ionicon-var-ios7-bell-outline: \"\\f158\";\n$ionicon-var-ios7-bolt: \"\\f15b\";\n$ionicon-var-ios7-bolt-outline: \"\\f15a\";\n$ionicon-var-ios7-bookmarks: \"\\f15d\";\n$ionicon-var-ios7-bookmarks-outline: \"\\f15c\";\n$ionicon-var-ios7-box: \"\\f15f\";\n$ionicon-var-ios7-box-outline: \"\\f15e\";\n$ionicon-var-ios7-briefcase: \"\\f283\";\n$ionicon-var-ios7-briefcase-outline: \"\\f282\";\n$ionicon-var-ios7-browsers: \"\\f161\";\n$ionicon-var-ios7-browsers-outline: \"\\f160\";\n$ionicon-var-ios7-calculator: \"\\f285\";\n$ionicon-var-ios7-calculator-outline: \"\\f284\";\n$ionicon-var-ios7-calendar: \"\\f163\";\n$ionicon-var-ios7-calendar-outline: \"\\f162\";\n$ionicon-var-ios7-camera: \"\\f165\";\n$ionicon-var-ios7-camera-outline: \"\\f164\";\n$ionicon-var-ios7-cart: \"\\f167\";\n$ionicon-var-ios7-cart-outline: \"\\f166\";\n$ionicon-var-ios7-chatboxes: \"\\f169\";\n$ionicon-var-ios7-chatboxes-outline: \"\\f168\";\n$ionicon-var-ios7-chatbubble: \"\\f16b\";\n$ionicon-var-ios7-chatbubble-outline: \"\\f16a\";\n$ionicon-var-ios7-checkmark: \"\\f16e\";\n$ionicon-var-ios7-checkmark-empty: \"\\f16c\";\n$ionicon-var-ios7-checkmark-outline: \"\\f16d\";\n$ionicon-var-ios7-circle-filled: \"\\f16f\";\n$ionicon-var-ios7-circle-outline: \"\\f170\";\n$ionicon-var-ios7-clock: \"\\f172\";\n$ionicon-var-ios7-clock-outline: \"\\f171\";\n$ionicon-var-ios7-close: \"\\f2bc\";\n$ionicon-var-ios7-close-empty: \"\\f2bd\";\n$ionicon-var-ios7-close-outline: \"\\f2bb\";\n$ionicon-var-ios7-cloud: \"\\f178\";\n$ionicon-var-ios7-cloud-download: \"\\f174\";\n$ionicon-var-ios7-cloud-download-outline: \"\\f173\";\n$ionicon-var-ios7-cloud-outline: \"\\f175\";\n$ionicon-var-ios7-cloud-upload: \"\\f177\";\n$ionicon-var-ios7-cloud-upload-outline: \"\\f176\";\n$ionicon-var-ios7-cloudy: \"\\f17a\";\n$ionicon-var-ios7-cloudy-night: \"\\f308\";\n$ionicon-var-ios7-cloudy-night-outline: \"\\f307\";\n$ionicon-var-ios7-cloudy-outline: \"\\f179\";\n$ionicon-var-ios7-cog: \"\\f17c\";\n$ionicon-var-ios7-cog-outline: \"\\f17b\";\n$ionicon-var-ios7-compose: \"\\f17e\";\n$ionicon-var-ios7-compose-outline: \"\\f17d\";\n$ionicon-var-ios7-contact: \"\\f180\";\n$ionicon-var-ios7-contact-outline: \"\\f17f\";\n$ionicon-var-ios7-copy: \"\\f182\";\n$ionicon-var-ios7-copy-outline: \"\\f181\";\n$ionicon-var-ios7-download: \"\\f184\";\n$ionicon-var-ios7-download-outline: \"\\f183\";\n$ionicon-var-ios7-drag: \"\\f185\";\n$ionicon-var-ios7-email: \"\\f187\";\n$ionicon-var-ios7-email-outline: \"\\f186\";\n$ionicon-var-ios7-expand: \"\\f30d\";\n$ionicon-var-ios7-eye: \"\\f189\";\n$ionicon-var-ios7-eye-outline: \"\\f188\";\n$ionicon-var-ios7-fastforward: \"\\f18b\";\n$ionicon-var-ios7-fastforward-outline: \"\\f18a\";\n$ionicon-var-ios7-filing: \"\\f18d\";\n$ionicon-var-ios7-filing-outline: \"\\f18c\";\n$ionicon-var-ios7-film: \"\\f18f\";\n$ionicon-var-ios7-film-outline: \"\\f18e\";\n$ionicon-var-ios7-flag: \"\\f191\";\n$ionicon-var-ios7-flag-outline: \"\\f190\";\n$ionicon-var-ios7-folder: \"\\f193\";\n$ionicon-var-ios7-folder-outline: \"\\f192\";\n$ionicon-var-ios7-football: \"\\f329\";\n$ionicon-var-ios7-football-outline: \"\\f328\";\n$ionicon-var-ios7-gear: \"\\f195\";\n$ionicon-var-ios7-gear-outline: \"\\f194\";\n$ionicon-var-ios7-glasses: \"\\f197\";\n$ionicon-var-ios7-glasses-outline: \"\\f196\";\n$ionicon-var-ios7-heart: \"\\f199\";\n$ionicon-var-ios7-heart-outline: \"\\f198\";\n$ionicon-var-ios7-help: \"\\f19c\";\n$ionicon-var-ios7-help-empty: \"\\f19a\";\n$ionicon-var-ios7-help-outline: \"\\f19b\";\n$ionicon-var-ios7-home: \"\\f32b\";\n$ionicon-var-ios7-home-outline: \"\\f32a\";\n$ionicon-var-ios7-infinite: \"\\f19e\";\n$ionicon-var-ios7-infinite-outline: \"\\f19d\";\n$ionicon-var-ios7-information: \"\\f1a1\";\n$ionicon-var-ios7-information-empty: \"\\f19f\";\n$ionicon-var-ios7-information-outline: \"\\f1a0\";\n$ionicon-var-ios7-ionic-outline: \"\\f1a2\";\n$ionicon-var-ios7-keypad: \"\\f1a4\";\n$ionicon-var-ios7-keypad-outline: \"\\f1a3\";\n$ionicon-var-ios7-lightbulb: \"\\f287\";\n$ionicon-var-ios7-lightbulb-outline: \"\\f286\";\n$ionicon-var-ios7-location: \"\\f1a6\";\n$ionicon-var-ios7-location-outline: \"\\f1a5\";\n$ionicon-var-ios7-locked: \"\\f1a8\";\n$ionicon-var-ios7-locked-outline: \"\\f1a7\";\n$ionicon-var-ios7-loop: \"\\f32d\";\n$ionicon-var-ios7-loop-strong: \"\\f32c\";\n$ionicon-var-ios7-medkit: \"\\f289\";\n$ionicon-var-ios7-medkit-outline: \"\\f288\";\n$ionicon-var-ios7-mic: \"\\f1ab\";\n$ionicon-var-ios7-mic-off: \"\\f1a9\";\n$ionicon-var-ios7-mic-outline: \"\\f1aa\";\n$ionicon-var-ios7-minus: \"\\f1ae\";\n$ionicon-var-ios7-minus-empty: \"\\f1ac\";\n$ionicon-var-ios7-minus-outline: \"\\f1ad\";\n$ionicon-var-ios7-monitor: \"\\f1b0\";\n$ionicon-var-ios7-monitor-outline: \"\\f1af\";\n$ionicon-var-ios7-moon: \"\\f1b2\";\n$ionicon-var-ios7-moon-outline: \"\\f1b1\";\n$ionicon-var-ios7-more: \"\\f1b4\";\n$ionicon-var-ios7-more-outline: \"\\f1b3\";\n$ionicon-var-ios7-musical-note: \"\\f1b5\";\n$ionicon-var-ios7-musical-notes: \"\\f1b6\";\n$ionicon-var-ios7-navigate: \"\\f1b8\";\n$ionicon-var-ios7-navigate-outline: \"\\f1b7\";\n$ionicon-var-ios7-paper: \"\\f32f\";\n$ionicon-var-ios7-paper-outline: \"\\f32e\";\n$ionicon-var-ios7-paperplane: \"\\f1ba\";\n$ionicon-var-ios7-paperplane-outline: \"\\f1b9\";\n$ionicon-var-ios7-partlysunny: \"\\f1bc\";\n$ionicon-var-ios7-partlysunny-outline: \"\\f1bb\";\n$ionicon-var-ios7-pause: \"\\f1be\";\n$ionicon-var-ios7-pause-outline: \"\\f1bd\";\n$ionicon-var-ios7-paw: \"\\f331\";\n$ionicon-var-ios7-paw-outline: \"\\f330\";\n$ionicon-var-ios7-people: \"\\f1c0\";\n$ionicon-var-ios7-people-outline: \"\\f1bf\";\n$ionicon-var-ios7-person: \"\\f1c2\";\n$ionicon-var-ios7-person-outline: \"\\f1c1\";\n$ionicon-var-ios7-personadd: \"\\f1c4\";\n$ionicon-var-ios7-personadd-outline: \"\\f1c3\";\n$ionicon-var-ios7-photos: \"\\f1c6\";\n$ionicon-var-ios7-photos-outline: \"\\f1c5\";\n$ionicon-var-ios7-pie: \"\\f28b\";\n$ionicon-var-ios7-pie-outline: \"\\f28a\";\n$ionicon-var-ios7-play: \"\\f1c8\";\n$ionicon-var-ios7-play-outline: \"\\f1c7\";\n$ionicon-var-ios7-plus: \"\\f1cb\";\n$ionicon-var-ios7-plus-empty: \"\\f1c9\";\n$ionicon-var-ios7-plus-outline: \"\\f1ca\";\n$ionicon-var-ios7-pricetag: \"\\f28d\";\n$ionicon-var-ios7-pricetag-outline: \"\\f28c\";\n$ionicon-var-ios7-pricetags: \"\\f333\";\n$ionicon-var-ios7-pricetags-outline: \"\\f332\";\n$ionicon-var-ios7-printer: \"\\f1cd\";\n$ionicon-var-ios7-printer-outline: \"\\f1cc\";\n$ionicon-var-ios7-pulse: \"\\f335\";\n$ionicon-var-ios7-pulse-strong: \"\\f334\";\n$ionicon-var-ios7-rainy: \"\\f1cf\";\n$ionicon-var-ios7-rainy-outline: \"\\f1ce\";\n$ionicon-var-ios7-recording: \"\\f1d1\";\n$ionicon-var-ios7-recording-outline: \"\\f1d0\";\n$ionicon-var-ios7-redo: \"\\f1d3\";\n$ionicon-var-ios7-redo-outline: \"\\f1d2\";\n$ionicon-var-ios7-refresh: \"\\f1d6\";\n$ionicon-var-ios7-refresh-empty: \"\\f1d4\";\n$ionicon-var-ios7-refresh-outline: \"\\f1d5\";\n$ionicon-var-ios7-reload: \"\\f28e\";\n$ionicon-var-ios7-reverse-camera: \"\\f337\";\n$ionicon-var-ios7-reverse-camera-outline: \"\\f336\";\n$ionicon-var-ios7-rewind: \"\\f1d8\";\n$ionicon-var-ios7-rewind-outline: \"\\f1d7\";\n$ionicon-var-ios7-search: \"\\f1da\";\n$ionicon-var-ios7-search-strong: \"\\f1d9\";\n$ionicon-var-ios7-settings: \"\\f339\";\n$ionicon-var-ios7-settings-strong: \"\\f338\";\n$ionicon-var-ios7-shrink: \"\\f30e\";\n$ionicon-var-ios7-skipbackward: \"\\f1dc\";\n$ionicon-var-ios7-skipbackward-outline: \"\\f1db\";\n$ionicon-var-ios7-skipforward: \"\\f1de\";\n$ionicon-var-ios7-skipforward-outline: \"\\f1dd\";\n$ionicon-var-ios7-snowy: \"\\f309\";\n$ionicon-var-ios7-speedometer: \"\\f290\";\n$ionicon-var-ios7-speedometer-outline: \"\\f28f\";\n$ionicon-var-ios7-star: \"\\f1e0\";\n$ionicon-var-ios7-star-half: \"\\f33a\";\n$ionicon-var-ios7-star-outline: \"\\f1df\";\n$ionicon-var-ios7-stopwatch: \"\\f1e2\";\n$ionicon-var-ios7-stopwatch-outline: \"\\f1e1\";\n$ionicon-var-ios7-sunny: \"\\f1e4\";\n$ionicon-var-ios7-sunny-outline: \"\\f1e3\";\n$ionicon-var-ios7-telephone: \"\\f1e6\";\n$ionicon-var-ios7-telephone-outline: \"\\f1e5\";\n$ionicon-var-ios7-tennisball: \"\\f33c\";\n$ionicon-var-ios7-tennisball-outline: \"\\f33b\";\n$ionicon-var-ios7-thunderstorm: \"\\f1e8\";\n$ionicon-var-ios7-thunderstorm-outline: \"\\f1e7\";\n$ionicon-var-ios7-time: \"\\f292\";\n$ionicon-var-ios7-time-outline: \"\\f291\";\n$ionicon-var-ios7-timer: \"\\f1ea\";\n$ionicon-var-ios7-timer-outline: \"\\f1e9\";\n$ionicon-var-ios7-toggle: \"\\f33e\";\n$ionicon-var-ios7-toggle-outline: \"\\f33d\";\n$ionicon-var-ios7-trash: \"\\f1ec\";\n$ionicon-var-ios7-trash-outline: \"\\f1eb\";\n$ionicon-var-ios7-undo: \"\\f1ee\";\n$ionicon-var-ios7-undo-outline: \"\\f1ed\";\n$ionicon-var-ios7-unlocked: \"\\f1f0\";\n$ionicon-var-ios7-unlocked-outline: \"\\f1ef\";\n$ionicon-var-ios7-upload: \"\\f1f2\";\n$ionicon-var-ios7-upload-outline: \"\\f1f1\";\n$ionicon-var-ios7-videocam: \"\\f1f4\";\n$ionicon-var-ios7-videocam-outline: \"\\f1f3\";\n$ionicon-var-ios7-volume-high: \"\\f1f5\";\n$ionicon-var-ios7-volume-low: \"\\f1f6\";\n$ionicon-var-ios7-wineglass: \"\\f294\";\n$ionicon-var-ios7-wineglass-outline: \"\\f293\";\n$ionicon-var-ios7-world: \"\\f1f8\";\n$ionicon-var-ios7-world-outline: \"\\f1f7\";\n$ionicon-var-ipad: \"\\f1f9\";\n$ionicon-var-iphone: \"\\f1fa\";\n$ionicon-var-ipod: \"\\f1fb\";\n$ionicon-var-jet: \"\\f295\";\n$ionicon-var-key: \"\\f296\";\n$ionicon-var-knife: \"\\f297\";\n$ionicon-var-laptop: \"\\f1fc\";\n$ionicon-var-leaf: \"\\f1fd\";\n$ionicon-var-levels: \"\\f298\";\n$ionicon-var-lightbulb: \"\\f299\";\n$ionicon-var-link: \"\\f1fe\";\n$ionicon-var-load-a: \"\\f29a\";\n$ionicon-var-load-b: \"\\f29b\";\n$ionicon-var-load-c: \"\\f29c\";\n$ionicon-var-load-d: \"\\f29d\";\n$ionicon-var-location: \"\\f1ff\";\n$ionicon-var-locked: \"\\f200\";\n$ionicon-var-log-in: \"\\f29e\";\n$ionicon-var-log-out: \"\\f29f\";\n$ionicon-var-loop: \"\\f201\";\n$ionicon-var-magnet: \"\\f2a0\";\n$ionicon-var-male: \"\\f2a1\";\n$ionicon-var-man: \"\\f202\";\n$ionicon-var-map: \"\\f203\";\n$ionicon-var-medkit: \"\\f2a2\";\n$ionicon-var-merge: \"\\f33f\";\n$ionicon-var-mic-a: \"\\f204\";\n$ionicon-var-mic-b: \"\\f205\";\n$ionicon-var-mic-c: \"\\f206\";\n$ionicon-var-minus: \"\\f209\";\n$ionicon-var-minus-circled: \"\\f207\";\n$ionicon-var-minus-round: \"\\f208\";\n$ionicon-var-model-s: \"\\f2c1\";\n$ionicon-var-monitor: \"\\f20a\";\n$ionicon-var-more: \"\\f20b\";\n$ionicon-var-mouse: \"\\f340\";\n$ionicon-var-music-note: \"\\f20c\";\n$ionicon-var-navicon: \"\\f20e\";\n$ionicon-var-navicon-round: \"\\f20d\";\n$ionicon-var-navigate: \"\\f2a3\";\n$ionicon-var-network: \"\\f341\";\n$ionicon-var-no-smoking: \"\\f2c2\";\n$ionicon-var-nuclear: \"\\f2a4\";\n$ionicon-var-outlet: \"\\f342\";\n$ionicon-var-paper-airplane: \"\\f2c3\";\n$ionicon-var-paperclip: \"\\f20f\";\n$ionicon-var-pause: \"\\f210\";\n$ionicon-var-person: \"\\f213\";\n$ionicon-var-person-add: \"\\f211\";\n$ionicon-var-person-stalker: \"\\f212\";\n$ionicon-var-pie-graph: \"\\f2a5\";\n$ionicon-var-pin: \"\\f2a6\";\n$ionicon-var-pinpoint: \"\\f2a7\";\n$ionicon-var-pizza: \"\\f2a8\";\n$ionicon-var-plane: \"\\f214\";\n$ionicon-var-planet: \"\\f343\";\n$ionicon-var-play: \"\\f215\";\n$ionicon-var-playstation: \"\\f30a\";\n$ionicon-var-plus: \"\\f218\";\n$ionicon-var-plus-circled: \"\\f216\";\n$ionicon-var-plus-round: \"\\f217\";\n$ionicon-var-podium: \"\\f344\";\n$ionicon-var-pound: \"\\f219\";\n$ionicon-var-power: \"\\f2a9\";\n$ionicon-var-pricetag: \"\\f2aa\";\n$ionicon-var-pricetags: \"\\f2ab\";\n$ionicon-var-printer: \"\\f21a\";\n$ionicon-var-pull-request: \"\\f345\";\n$ionicon-var-qr-scanner: \"\\f346\";\n$ionicon-var-quote: \"\\f347\";\n$ionicon-var-radio-waves: \"\\f2ac\";\n$ionicon-var-record: \"\\f21b\";\n$ionicon-var-refresh: \"\\f21c\";\n$ionicon-var-reply: \"\\f21e\";\n$ionicon-var-reply-all: \"\\f21d\";\n$ionicon-var-ribbon-a: \"\\f348\";\n$ionicon-var-ribbon-b: \"\\f349\";\n$ionicon-var-sad: \"\\f34a\";\n$ionicon-var-scissors: \"\\f34b\";\n$ionicon-var-search: \"\\f21f\";\n$ionicon-var-settings: \"\\f2ad\";\n$ionicon-var-share: \"\\f220\";\n$ionicon-var-shuffle: \"\\f221\";\n$ionicon-var-skip-backward: \"\\f222\";\n$ionicon-var-skip-forward: \"\\f223\";\n$ionicon-var-social-android: \"\\f225\";\n$ionicon-var-social-android-outline: \"\\f224\";\n$ionicon-var-social-apple: \"\\f227\";\n$ionicon-var-social-apple-outline: \"\\f226\";\n$ionicon-var-social-bitcoin: \"\\f2af\";\n$ionicon-var-social-bitcoin-outline: \"\\f2ae\";\n$ionicon-var-social-buffer: \"\\f229\";\n$ionicon-var-social-buffer-outline: \"\\f228\";\n$ionicon-var-social-designernews: \"\\f22b\";\n$ionicon-var-social-designernews-outline: \"\\f22a\";\n$ionicon-var-social-dribbble: \"\\f22d\";\n$ionicon-var-social-dribbble-outline: \"\\f22c\";\n$ionicon-var-social-dropbox: \"\\f22f\";\n$ionicon-var-social-dropbox-outline: \"\\f22e\";\n$ionicon-var-social-facebook: \"\\f231\";\n$ionicon-var-social-facebook-outline: \"\\f230\";\n$ionicon-var-social-foursquare: \"\\f34d\";\n$ionicon-var-social-foursquare-outline: \"\\f34c\";\n$ionicon-var-social-freebsd-devil: \"\\f2c4\";\n$ionicon-var-social-github: \"\\f233\";\n$ionicon-var-social-github-outline: \"\\f232\";\n$ionicon-var-social-google: \"\\f34f\";\n$ionicon-var-social-google-outline: \"\\f34e\";\n$ionicon-var-social-googleplus: \"\\f235\";\n$ionicon-var-social-googleplus-outline: \"\\f234\";\n$ionicon-var-social-hackernews: \"\\f237\";\n$ionicon-var-social-hackernews-outline: \"\\f236\";\n$ionicon-var-social-instagram: \"\\f351\";\n$ionicon-var-social-instagram-outline: \"\\f350\";\n$ionicon-var-social-linkedin: \"\\f239\";\n$ionicon-var-social-linkedin-outline: \"\\f238\";\n$ionicon-var-social-pinterest: \"\\f2b1\";\n$ionicon-var-social-pinterest-outline: \"\\f2b0\";\n$ionicon-var-social-reddit: \"\\f23b\";\n$ionicon-var-social-reddit-outline: \"\\f23a\";\n$ionicon-var-social-rss: \"\\f23d\";\n$ionicon-var-social-rss-outline: \"\\f23c\";\n$ionicon-var-social-skype: \"\\f23f\";\n$ionicon-var-social-skype-outline: \"\\f23e\";\n$ionicon-var-social-tumblr: \"\\f241\";\n$ionicon-var-social-tumblr-outline: \"\\f240\";\n$ionicon-var-social-tux: \"\\f2c5\";\n$ionicon-var-social-twitter: \"\\f243\";\n$ionicon-var-social-twitter-outline: \"\\f242\";\n$ionicon-var-social-usd: \"\\f353\";\n$ionicon-var-social-usd-outline: \"\\f352\";\n$ionicon-var-social-vimeo: \"\\f245\";\n$ionicon-var-social-vimeo-outline: \"\\f244\";\n$ionicon-var-social-windows: \"\\f247\";\n$ionicon-var-social-windows-outline: \"\\f246\";\n$ionicon-var-social-wordpress: \"\\f249\";\n$ionicon-var-social-wordpress-outline: \"\\f248\";\n$ionicon-var-social-yahoo: \"\\f24b\";\n$ionicon-var-social-yahoo-outline: \"\\f24a\";\n$ionicon-var-social-youtube: \"\\f24d\";\n$ionicon-var-social-youtube-outline: \"\\f24c\";\n$ionicon-var-speakerphone: \"\\f2b2\";\n$ionicon-var-speedometer: \"\\f2b3\";\n$ionicon-var-spoon: \"\\f2b4\";\n$ionicon-var-star: \"\\f24e\";\n$ionicon-var-stats-bars: \"\\f2b5\";\n$ionicon-var-steam: \"\\f30b\";\n$ionicon-var-stop: \"\\f24f\";\n$ionicon-var-thermometer: \"\\f2b6\";\n$ionicon-var-thumbsdown: \"\\f250\";\n$ionicon-var-thumbsup: \"\\f251\";\n$ionicon-var-toggle: \"\\f355\";\n$ionicon-var-toggle-filled: \"\\f354\";\n$ionicon-var-trash-a: \"\\f252\";\n$ionicon-var-trash-b: \"\\f253\";\n$ionicon-var-trophy: \"\\f356\";\n$ionicon-var-umbrella: \"\\f2b7\";\n$ionicon-var-university: \"\\f357\";\n$ionicon-var-unlocked: \"\\f254\";\n$ionicon-var-upload: \"\\f255\";\n$ionicon-var-usb: \"\\f2b8\";\n$ionicon-var-videocamera: \"\\f256\";\n$ionicon-var-volume-high: \"\\f257\";\n$ionicon-var-volume-low: \"\\f258\";\n$ionicon-var-volume-medium: \"\\f259\";\n$ionicon-var-volume-mute: \"\\f25a\";\n$ionicon-var-wand: \"\\f358\";\n$ionicon-var-waterdrop: \"\\f25b\";\n$ionicon-var-wifi: \"\\f25c\";\n$ionicon-var-wineglass: \"\\f2b9\";\n$ionicon-var-woman: \"\\f25d\";\n$ionicon-var-wrench: \"\\f2ba\";\n$ionicon-var-xbox: \"\\f30c\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/ionicons/scss/ionicons.scss",
    "content": "@import \"ionicons-variables\";\n/*!\n  Ionicons, v#{$ionicons-version}\n  Created by Ben Sperry for the Ionic Framework, http://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/driftyco/ionicons\n*/\n\n@import \"ionicons-font\";\n@import \"ionicons-animation\";\n@import \"ionicons-icons\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/material-design-iconic-font/css/material-design-iconic-font.css",
    "content": "/*!\n *  Material Design Iconic Font 1.0.1 by Sergey Kupletsky (@zavoloklom) - http://zavoloklom.github.io/material-design-iconic-font/\n *  License - https://github.com/zavoloklom/material-design-iconic-font/blob/gh-pages/License.md (Attribution-ShareAlike 4.0 International license)\n */\n@font-face {\n  font-family: 'Material Design Iconic Font';\n  src: url('../fonts/Material-Design-Iconic-Font.eot?v=1.0.1');\n  src: url('../fonts/Material-Design-Iconic-Font.eot?#iefix&v=1.0.1') format('embedded-opentype'), url('../fonts/Material-Design-Iconic-Font.woff?v=1.0.1') format('woff'), url('../fonts/Material-Design-Iconic-Font.ttf?v=1.0.1') format('truetype'), url('../fonts/Material-Design-Iconic-Font.svg?v=1.0.1#Material-Design-Iconic-Font') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n[class^=\"md-\"],\n[class*=\" md-\"] {\n  display: inline-block;\n  font: normal normal normal 14px/1 'Material Design Iconic Font';\n  font-size: inherit;\n  speak: none;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.md {\n  line-height: inherit;\n  vertical-align: bottom;\n}\n.md-lg {\n  font-size: 1.5em;\n  line-height: .5em;\n  vertical-align: -35%;\n}\n.md-2x {\n  font-size: 2em;\n}\n.md-3x {\n  font-size: 3em;\n}\n.md-4x {\n  font-size: 4em;\n}\n.md-5x {\n  font-size: 5em;\n}\n.md-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: .1em;\n}\n.md-border-circle {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: 50%;\n}\n[class^=\"md-\"].pull-left,\n[class*=\" md-\"].pull-left {\n  float: left;\n  margin-right: .3em;\n}\n[class^=\"md-\"].pull-right,\n[class*=\" md-\"].pull-right {\n  float: right;\n  margin-left: .3em;\n}\n.md-spin {\n  -webkit-animation: md-spin 1.5s infinite linear;\n  animation: md-spin 1.5s infinite linear;\n}\n.md-spin-reverse {\n  -webkit-animation: md-spin-reverse 1.5s infinite linear;\n  animation: md-spin-reverse 1.5s infinite linear;\n}\n@-webkit-keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg);\n  }\n}\n@keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg);\n  }\n}\n.md-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.md-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.md-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.md-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.md-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .md-rotate-90,\n:root .md-rotate-180,\n:root .md-rotate-270,\n:root .md-flip-horizontal,\n:root .md-flip-vertical {\n  filter: none;\n}\n/* Material Design Iconic Font uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n/* If you do not want use all icons you can disable icon set here */\n.md-3d-rotation:before {\n  content: \"\\f000\";\n}\n.md-accessibility:before {\n  content: \"\\f001\";\n}\n.md-account-balance:before {\n  content: \"\\f002\";\n}\n.md-account-balance-wallet:before {\n  content: \"\\f003\";\n}\n.md-account-box:before {\n  content: \"\\f004\";\n}\n.md-account-child:before {\n  content: \"\\f005\";\n}\n.md-account-circle:before {\n  content: \"\\f006\";\n}\n.md-add-shopping-cart:before {\n  content: \"\\f007\";\n}\n.md-alarm:before {\n  content: \"\\f008\";\n}\n.md-alarm-add:before {\n  content: \"\\f009\";\n}\n.md-alarm-off:before {\n  content: \"\\f00a\";\n}\n.md-alarm-on:before {\n  content: \"\\f00b\";\n}\n.md-android:before {\n  content: \"\\f00c\";\n}\n.md-announcement:before {\n  content: \"\\f00d\";\n}\n.md-aspect-ratio:before {\n  content: \"\\f00e\";\n}\n.md-assessment:before {\n  content: \"\\f00f\";\n}\n.md-assignment:before {\n  content: \"\\f010\";\n}\n.md-assignment-ind:before {\n  content: \"\\f011\";\n}\n.md-assignment-late:before {\n  content: \"\\f012\";\n}\n.md-assignment-return:before {\n  content: \"\\f013\";\n}\n.md-assignment-returned:before {\n  content: \"\\f014\";\n}\n.md-assignment-turned-in:before {\n  content: \"\\f015\";\n}\n.md-autorenew:before {\n  content: \"\\f016\";\n}\n.md-backup:before {\n  content: \"\\f017\";\n}\n.md-book:before {\n  content: \"\\f018\";\n}\n.md-bookmark:before {\n  content: \"\\f019\";\n}\n.md-bookmark-outline:before {\n  content: \"\\f01a\";\n}\n.md-bug-report:before {\n  content: \"\\f01b\";\n}\n.md-cached:before {\n  content: \"\\f01c\";\n}\n.md-class:before {\n  content: \"\\f01d\";\n}\n.md-credit-card:before {\n  content: \"\\f01e\";\n}\n.md-dashboard:before {\n  content: \"\\f01f\";\n}\n.md-delete:before {\n  content: \"\\f020\";\n}\n.md-description:before {\n  content: \"\\f021\";\n}\n.md-dns:before {\n  content: \"\\f022\";\n}\n.md-done:before {\n  content: \"\\f023\";\n}\n.md-done-all:before {\n  content: \"\\f024\";\n}\n.md-event:before {\n  content: \"\\f025\";\n}\n.md-exit-to-app:before {\n  content: \"\\f026\";\n}\n.md-explore:before {\n  content: \"\\f027\";\n}\n.md-extension:before {\n  content: \"\\f028\";\n}\n.md-face-unlock:before {\n  content: \"\\f029\";\n}\n.md-favorite:before {\n  content: \"\\f02a\";\n}\n.md-favorite-outline:before {\n  content: \"\\f02b\";\n}\n.md-find-in-page:before {\n  content: \"\\f02c\";\n}\n.md-find-replace:before {\n  content: \"\\f02d\";\n}\n.md-flip-to-back:before {\n  content: \"\\f02e\";\n}\n.md-flip-to-front:before {\n  content: \"\\f02f\";\n}\n.md-get-app:before {\n  content: \"\\f030\";\n}\n.md-grade:before {\n  content: \"\\f031\";\n}\n.md-group-work:before {\n  content: \"\\f032\";\n}\n.md-help:before {\n  content: \"\\f033\";\n}\n.md-highlight-remove:before {\n  content: \"\\f034\";\n}\n.md-history:before {\n  content: \"\\f035\";\n}\n.md-home:before {\n  content: \"\\f036\";\n}\n.md-https:before {\n  content: \"\\f037\";\n}\n.md-info:before {\n  content: \"\\f038\";\n}\n.md-info-outline:before {\n  content: \"\\f039\";\n}\n.md-input:before {\n  content: \"\\f03a\";\n}\n.md-invert-colors:before {\n  content: \"\\f03b\";\n}\n.md-label:before {\n  content: \"\\f03c\";\n}\n.md-label-outline:before {\n  content: \"\\f03d\";\n}\n.md-language:before {\n  content: \"\\f03e\";\n}\n.md-launch:before {\n  content: \"\\f03f\";\n}\n.md-list:before {\n  content: \"\\f040\";\n}\n.md-lock:before {\n  content: \"\\f041\";\n}\n.md-lock-open:before {\n  content: \"\\f042\";\n}\n.md-lock-outline:before {\n  content: \"\\f043\";\n}\n.md-loyalty:before {\n  content: \"\\f044\";\n}\n.md-markunread-mailbox:before {\n  content: \"\\f045\";\n}\n.md-note-add:before {\n  content: \"\\f046\";\n}\n.md-open-in-browser:before {\n  content: \"\\f047\";\n}\n.md-open-in-new:before {\n  content: \"\\f048\";\n}\n.md-open-with:before {\n  content: \"\\f049\";\n}\n.md-pageview:before {\n  content: \"\\f04a\";\n}\n.md-payment:before {\n  content: \"\\f04b\";\n}\n.md-perm-camera-mic:before {\n  content: \"\\f04c\";\n}\n.md-perm-contact-cal:before {\n  content: \"\\f04d\";\n}\n.md-perm-data-setting:before {\n  content: \"\\f04e\";\n}\n.md-perm-device-info:before {\n  content: \"\\f04f\";\n}\n.md-perm-identity:before {\n  content: \"\\f050\";\n}\n.md-perm-media:before {\n  content: \"\\f051\";\n}\n.md-perm-phone-msg:before {\n  content: \"\\f052\";\n}\n.md-perm-scan-wifi:before {\n  content: \"\\f053\";\n}\n.md-picture-in-picture:before {\n  content: \"\\f054\";\n}\n.md-polymer:before {\n  content: \"\\f055\";\n}\n.md-print:before {\n  content: \"\\f056\";\n}\n.md-query-builder:before {\n  content: \"\\f057\";\n}\n.md-question-answer:before {\n  content: \"\\f058\";\n}\n.md-receipt:before {\n  content: \"\\f059\";\n}\n.md-redeem:before {\n  content: \"\\f05a\";\n}\n.md-report-problem:before {\n  content: \"\\f05b\";\n}\n.md-restore:before {\n  content: \"\\f05c\";\n}\n.md-room:before {\n  content: \"\\f05d\";\n}\n.md-schedule:before {\n  content: \"\\f05e\";\n}\n.md-search:before {\n  content: \"\\f05f\";\n}\n.md-settings:before {\n  content: \"\\f060\";\n}\n.md-settings-applications:before {\n  content: \"\\f061\";\n}\n.md-settings-backup-restore:before {\n  content: \"\\f062\";\n}\n.md-settings-bluetooth:before {\n  content: \"\\f063\";\n}\n.md-settings-cell:before {\n  content: \"\\f064\";\n}\n.md-settings-display:before {\n  content: \"\\f065\";\n}\n.md-settings-ethernet:before {\n  content: \"\\f066\";\n}\n.md-settings-input-antenna:before {\n  content: \"\\f067\";\n}\n.md-settings-input-component:before {\n  content: \"\\f068\";\n}\n.md-settings-input-composite:before {\n  content: \"\\f069\";\n}\n.md-settings-input-hdmi:before {\n  content: \"\\f06a\";\n}\n.md-settings-input-svideo:before {\n  content: \"\\f06b\";\n}\n.md-settings-overscan:before {\n  content: \"\\f06c\";\n}\n.md-settings-phone:before {\n  content: \"\\f06d\";\n}\n.md-settings-power:before {\n  content: \"\\f06e\";\n}\n.md-settings-remote:before {\n  content: \"\\f06f\";\n}\n.md-settings-voice:before {\n  content: \"\\f070\";\n}\n.md-shop:before {\n  content: \"\\f071\";\n}\n.md-shopping-basket:before {\n  content: \"\\f072\";\n}\n.md-shopping-cart:before {\n  content: \"\\f073\";\n}\n.md-shop-two:before {\n  content: \"\\f074\";\n}\n.md-speaker-notes:before {\n  content: \"\\f075\";\n}\n.md-spellcheck:before {\n  content: \"\\f076\";\n}\n.md-star-rate:before {\n  content: \"\\f077\";\n}\n.md-stars:before {\n  content: \"\\f078\";\n}\n.md-store:before {\n  content: \"\\f079\";\n}\n.md-subject:before {\n  content: \"\\f07a\";\n}\n.md-swap-horiz:before {\n  content: \"\\f07b\";\n}\n.md-swap-vert:before {\n  content: \"\\f07c\";\n}\n.md-swap-vert-circle:before {\n  content: \"\\f07d\";\n}\n.md-system-update-tv:before {\n  content: \"\\f07e\";\n}\n.md-tab:before {\n  content: \"\\f07f\";\n}\n.md-tab-unselected:before {\n  content: \"\\f080\";\n}\n.md-theaters:before {\n  content: \"\\f081\";\n}\n.md-thumb-down:before {\n  content: \"\\f082\";\n}\n.md-thumbs-up-down:before {\n  content: \"\\f083\";\n}\n.md-thumb-up:before {\n  content: \"\\f084\";\n}\n.md-toc:before {\n  content: \"\\f085\";\n}\n.md-today:before {\n  content: \"\\f086\";\n}\n.md-track-changes:before {\n  content: \"\\f087\";\n}\n.md-translate:before {\n  content: \"\\f088\";\n}\n.md-trending-down:before {\n  content: \"\\f089\";\n}\n.md-trending-neutral:before {\n  content: \"\\f08a\";\n}\n.md-trending-up:before {\n  content: \"\\f08b\";\n}\n.md-turned-in:before {\n  content: \"\\f08c\";\n}\n.md-turned-in-not:before {\n  content: \"\\f08d\";\n}\n.md-verified-user:before {\n  content: \"\\f08e\";\n}\n.md-view-agenda:before {\n  content: \"\\f08f\";\n}\n.md-view-array:before {\n  content: \"\\f090\";\n}\n.md-view-carousel:before {\n  content: \"\\f091\";\n}\n.md-view-column:before {\n  content: \"\\f092\";\n}\n.md-view-day:before {\n  content: \"\\f093\";\n}\n.md-view-headline:before {\n  content: \"\\f094\";\n}\n.md-view-list:before {\n  content: \"\\f095\";\n}\n.md-view-module:before {\n  content: \"\\f096\";\n}\n.md-view-quilt:before {\n  content: \"\\f097\";\n}\n.md-view-stream:before {\n  content: \"\\f098\";\n}\n.md-view-week:before {\n  content: \"\\f099\";\n}\n.md-visibility:before {\n  content: \"\\f09a\";\n}\n.md-visibility-off:before {\n  content: \"\\f09b\";\n}\n.md-wallet-giftcard:before {\n  content: \"\\f09c\";\n}\n.md-wallet-membership:before {\n  content: \"\\f09d\";\n}\n.md-wallet-travel:before {\n  content: \"\\f09e\";\n}\n.md-work:before {\n  content: \"\\f09f\";\n}\n.md-error:before {\n  content: \"\\f0a0\";\n}\n.md-warning:before {\n  content: \"\\f0a1\";\n}\n.md-album:before {\n  content: \"\\f0a2\";\n}\n.md-av-timer:before {\n  content: \"\\f0a3\";\n}\n.md-closed-caption:before {\n  content: \"\\f0a4\";\n}\n.md-equalizer:before {\n  content: \"\\f0a5\";\n}\n.md-explicit:before {\n  content: \"\\f0a6\";\n}\n.md-fast-forward:before {\n  content: \"\\f0a7\";\n}\n.md-fast-rewind:before {\n  content: \"\\f0a8\";\n}\n.md-games:before {\n  content: \"\\f0a9\";\n}\n.md-hearing:before {\n  content: \"\\f0aa\";\n}\n.md-high-quality:before {\n  content: \"\\f0ab\";\n}\n.md-loop:before {\n  content: \"\\f0ac\";\n}\n.md-mic:before {\n  content: \"\\f0ad\";\n}\n.md-mic-none:before {\n  content: \"\\f0ae\";\n}\n.md-mic-off:before {\n  content: \"\\f0af\";\n}\n.md-movie:before {\n  content: \"\\f0b0\";\n}\n.md-my-library-add:before {\n  content: \"\\f0b1\";\n}\n.md-my-library-books:before {\n  content: \"\\f0b2\";\n}\n.md-my-library-music:before {\n  content: \"\\f0b3\";\n}\n.md-new-releases:before {\n  content: \"\\f0b4\";\n}\n.md-not-interested:before {\n  content: \"\\f0b5\";\n}\n.md-pause:before {\n  content: \"\\f0b6\";\n}\n.md-pause-circle-fill:before {\n  content: \"\\f0b7\";\n}\n.md-pause-circle-outline:before {\n  content: \"\\f0b8\";\n}\n.md-play-arrow:before {\n  content: \"\\f0b9\";\n}\n.md-play-circle-fill:before {\n  content: \"\\f0ba\";\n}\n.md-play-circle-outline:before {\n  content: \"\\f0bb\";\n}\n.md-playlist-add:before {\n  content: \"\\f0bc\";\n}\n.md-play-shopping-bag:before {\n  content: \"\\f0bd\";\n}\n.md-queue:before {\n  content: \"\\f0be\";\n}\n.md-queue-music:before {\n  content: \"\\f0bf\";\n}\n.md-radio:before {\n  content: \"\\f0c0\";\n}\n.md-recent-actors:before {\n  content: \"\\f0c1\";\n}\n.md-repeat:before {\n  content: \"\\f0c2\";\n}\n.md-repeat-one:before {\n  content: \"\\f0c3\";\n}\n.md-replay:before {\n  content: \"\\f0c4\";\n}\n.md-shuffle:before {\n  content: \"\\f0c5\";\n}\n.md-skip-next:before {\n  content: \"\\f0c6\";\n}\n.md-skip-previous:before {\n  content: \"\\f0c7\";\n}\n.md-snooze:before {\n  content: \"\\f0c8\";\n}\n.md-stop:before {\n  content: \"\\f0c9\";\n}\n.md-subtitles:before {\n  content: \"\\f0ca\";\n}\n.md-surround-sound:before {\n  content: \"\\f0cb\";\n}\n.md-videocam:before {\n  content: \"\\f0cc\";\n}\n.md-videocam-off:before {\n  content: \"\\f0cd\";\n}\n.md-video-collection:before {\n  content: \"\\f0ce\";\n}\n.md-volume-down:before {\n  content: \"\\f0cf\";\n}\n.md-volume-mute:before {\n  content: \"\\f0d0\";\n}\n.md-volume-off:before {\n  content: \"\\f0d1\";\n}\n.md-volume-up:before {\n  content: \"\\f0d2\";\n}\n.md-web:before {\n  content: \"\\f0d3\";\n}\n.md-business:before {\n  content: \"\\f0d4\";\n}\n.md-call:before {\n  content: \"\\f0d5\";\n}\n.md-call-end:before {\n  content: \"\\f0d6\";\n}\n.md-call-made:before {\n  content: \"\\f0d7\";\n}\n.md-call-merge:before {\n  content: \"\\f0d8\";\n}\n.md-call-missed:before {\n  content: \"\\f0d9\";\n}\n.md-call-received:before {\n  content: \"\\f0da\";\n}\n.md-call-split:before {\n  content: \"\\f0db\";\n}\n.md-chat:before {\n  content: \"\\f0dc\";\n}\n.md-clear-all:before {\n  content: \"\\f0dd\";\n}\n.md-comment:before {\n  content: \"\\f0de\";\n}\n.md-contacts:before {\n  content: \"\\f0df\";\n}\n.md-dialer-sip:before {\n  content: \"\\f0e0\";\n}\n.md-dialpad:before {\n  content: \"\\f0e1\";\n}\n.md-dnd-on:before {\n  content: \"\\f0e2\";\n}\n.md-email:before {\n  content: \"\\f0e3\";\n}\n.md-forum:before {\n  content: \"\\f0e4\";\n}\n.md-import-export:before {\n  content: \"\\f0e5\";\n}\n.md-invert-colors-off:before {\n  content: \"\\f0e6\";\n}\n.md-invert-colors-on:before {\n  content: \"\\f0e7\";\n}\n.md-live-help:before {\n  content: \"\\f0e8\";\n}\n.md-location-off:before {\n  content: \"\\f0e9\";\n}\n.md-location-on:before {\n  content: \"\\f0ea\";\n}\n.md-message:before {\n  content: \"\\f0eb\";\n}\n.md-messenger:before {\n  content: \"\\f0ec\";\n}\n.md-no-sim:before {\n  content: \"\\f0ed\";\n}\n.md-phone:before {\n  content: \"\\f0ee\";\n}\n.md-portable-wifi-off:before {\n  content: \"\\f0ef\";\n}\n.md-quick-contacts-dialer:before {\n  content: \"\\f0f0\";\n}\n.md-quick-contacts-mail:before {\n  content: \"\\f0f1\";\n}\n.md-ring-volume:before {\n  content: \"\\f0f2\";\n}\n.md-stay-current-landscape:before {\n  content: \"\\f0f3\";\n}\n.md-stay-current-portrait:before {\n  content: \"\\f0f4\";\n}\n.md-stay-primary-landscape:before {\n  content: \"\\f0f5\";\n}\n.md-stay-primary-portrait:before {\n  content: \"\\f0f6\";\n}\n.md-swap-calls:before {\n  content: \"\\f0f7\";\n}\n.md-textsms:before {\n  content: \"\\f0f8\";\n}\n.md-voicemail:before {\n  content: \"\\f0f9\";\n}\n.md-vpn-key:before {\n  content: \"\\f0fa\";\n}\n.md-add:before {\n  content: \"\\f0fb\";\n}\n.md-add-box:before {\n  content: \"\\f0fc\";\n}\n.md-add-circle:before {\n  content: \"\\f0fd\";\n}\n.md-add-circle-outline:before {\n  content: \"\\f0fe\";\n}\n.md-archive:before {\n  content: \"\\f0ff\";\n}\n.md-backspace:before {\n  content: \"\\f100\";\n}\n.md-block:before {\n  content: \"\\f101\";\n}\n.md-clear:before {\n  content: \"\\f102\";\n}\n.md-content-copy:before {\n  content: \"\\f103\";\n}\n.md-content-cut:before {\n  content: \"\\f104\";\n}\n.md-content-paste:before {\n  content: \"\\f105\";\n}\n.md-create:before {\n  content: \"\\f106\";\n}\n.md-drafts:before {\n  content: \"\\f107\";\n}\n.md-filter-list:before {\n  content: \"\\f108\";\n}\n.md-flag:before {\n  content: \"\\f109\";\n}\n.md-forward:before {\n  content: \"\\f10a\";\n}\n.md-gesture:before {\n  content: \"\\f10b\";\n}\n.md-inbox:before {\n  content: \"\\f10c\";\n}\n.md-link:before {\n  content: \"\\f10d\";\n}\n.md-mail:before {\n  content: \"\\f10e\";\n}\n.md-markunread:before {\n  content: \"\\f10f\";\n}\n.md-redo:before {\n  content: \"\\f110\";\n}\n.md-remove:before {\n  content: \"\\f111\";\n}\n.md-remove-circle:before {\n  content: \"\\f112\";\n}\n.md-remove-circle-outline:before {\n  content: \"\\f113\";\n}\n.md-reply:before {\n  content: \"\\f114\";\n}\n.md-reply-all:before {\n  content: \"\\f115\";\n}\n.md-report:before {\n  content: \"\\f116\";\n}\n.md-save:before {\n  content: \"\\f117\";\n}\n.md-select-all:before {\n  content: \"\\f118\";\n}\n.md-send:before {\n  content: \"\\f119\";\n}\n.md-sort:before {\n  content: \"\\f11a\";\n}\n.md-text-format:before {\n  content: \"\\f11b\";\n}\n.md-undo:before {\n  content: \"\\f11c\";\n}\n.md-access-alarm:before {\n  content: \"\\f11d\";\n}\n.md-access-alarms:before {\n  content: \"\\f11e\";\n}\n.md-access-time:before {\n  content: \"\\f11f\";\n}\n.md-add-alarm:before {\n  content: \"\\f120\";\n}\n.md-airplanemode-off:before {\n  content: \"\\f121\";\n}\n.md-airplanemode-on:before {\n  content: \"\\f122\";\n}\n.md-battery-20:before {\n  content: \"\\f123\";\n}\n.md-battery-30:before {\n  content: \"\\f124\";\n}\n.md-battery-50:before {\n  content: \"\\f125\";\n}\n.md-battery-60:before {\n  content: \"\\f126\";\n}\n.md-battery-80:before {\n  content: \"\\f127\";\n}\n.md-battery-90:before {\n  content: \"\\f128\";\n}\n.md-battery-alert:before {\n  content: \"\\f129\";\n}\n.md-battery-charging-20:before {\n  content: \"\\f12a\";\n}\n.md-battery-charging-30:before {\n  content: \"\\f12b\";\n}\n.md-battery-charging-50:before {\n  content: \"\\f12c\";\n}\n.md-battery-charging-60:before {\n  content: \"\\f12d\";\n}\n.md-battery-charging-80:before {\n  content: \"\\f12e\";\n}\n.md-battery-charging-90:before {\n  content: \"\\f12f\";\n}\n.md-battery-charging-full:before {\n  content: \"\\f130\";\n}\n.md-battery-full:before {\n  content: \"\\f131\";\n}\n.md-battery-std:before {\n  content: \"\\f132\";\n}\n.md-battery-unknown:before {\n  content: \"\\f133\";\n}\n.md-bluetooth:before {\n  content: \"\\f134\";\n}\n.md-bluetooth-connected:before {\n  content: \"\\f135\";\n}\n.md-bluetooth-disabled:before {\n  content: \"\\f136\";\n}\n.md-bluetooth-searching:before {\n  content: \"\\f137\";\n}\n.md-brightness-auto:before {\n  content: \"\\f138\";\n}\n.md-brightness-high:before {\n  content: \"\\f139\";\n}\n.md-brightness-low:before {\n  content: \"\\f13a\";\n}\n.md-brightness-medium:before {\n  content: \"\\f13b\";\n}\n.md-data-usage:before {\n  content: \"\\f13c\";\n}\n.md-developer-mode:before {\n  content: \"\\f13d\";\n}\n.md-devices:before {\n  content: \"\\f13e\";\n}\n.md-dvr:before {\n  content: \"\\f13f\";\n}\n.md-gps-fixed:before {\n  content: \"\\f140\";\n}\n.md-gps-not-fixed:before {\n  content: \"\\f141\";\n}\n.md-gps-off:before {\n  content: \"\\f142\";\n}\n.md-location-disabled:before {\n  content: \"\\f143\";\n}\n.md-location-searching:before {\n  content: \"\\f144\";\n}\n.md-multitrack-audio:before {\n  content: \"\\f145\";\n}\n.md-network-cell:before {\n  content: \"\\f146\";\n}\n.md-network-wifi:before {\n  content: \"\\f147\";\n}\n.md-nfc:before {\n  content: \"\\f148\";\n}\n.md-now-wallpaper:before {\n  content: \"\\f149\";\n}\n.md-now-widgets:before {\n  content: \"\\f14a\";\n}\n.md-screen-lock-landscape:before {\n  content: \"\\f14b\";\n}\n.md-screen-lock-portrait:before {\n  content: \"\\f14c\";\n}\n.md-screen-lock-rotation:before {\n  content: \"\\f14d\";\n}\n.md-screen-rotation:before {\n  content: \"\\f14e\";\n}\n.md-sd-storage:before {\n  content: \"\\f14f\";\n}\n.md-settings-system-daydream:before {\n  content: \"\\f150\";\n}\n.md-signal-cellular-0-bar:before {\n  content: \"\\f151\";\n}\n.md-signal-cellular-1-bar:before {\n  content: \"\\f152\";\n}\n.md-signal-cellular-2-bar:before {\n  content: \"\\f153\";\n}\n.md-signal-cellular-3-bar:before {\n  content: \"\\f154\";\n}\n.md-signal-cellular-4-bar:before {\n  content: \"\\f155\";\n}\n.md-signal-cellular-connected-no-internet-0-bar:before {\n  content: \"\\f156\";\n}\n.md-signal-cellular-connected-no-internet-1-bar:before {\n  content: \"\\f157\";\n}\n.md-signal-cellular-connected-no-internet-2-bar:before {\n  content: \"\\f158\";\n}\n.md-signal-cellular-connected-no-internet-3-bar:before {\n  content: \"\\f159\";\n}\n.md-signal-cellular-connected-no-internet-4-bar:before {\n  content: \"\\f15a\";\n}\n.md-signal-cellular-no-sim:before {\n  content: \"\\f15b\";\n}\n.md-signal-cellular-null:before {\n  content: \"\\f15c\";\n}\n.md-signal-cellular-off:before {\n  content: \"\\f15d\";\n}\n.md-signal-wifi-0-bar:before {\n  content: \"\\f15e\";\n}\n.md-signal-wifi-1-bar:before {\n  content: \"\\f15f\";\n}\n.md-signal-wifi-2-bar:before {\n  content: \"\\f160\";\n}\n.md-signal-wifi-3-bar:before {\n  content: \"\\f161\";\n}\n.md-signal-wifi-4-bar:before {\n  content: \"\\f162\";\n}\n.md-signal-wifi-off:before {\n  content: \"\\f163\";\n}\n.md-storage:before {\n  content: \"\\f164\";\n}\n.md-usb:before {\n  content: \"\\f165\";\n}\n.md-wifi-lock:before {\n  content: \"\\f166\";\n}\n.md-wifi-tethering:before {\n  content: \"\\f167\";\n}\n.md-attach-file:before {\n  content: \"\\f168\";\n}\n.md-attach-money:before {\n  content: \"\\f169\";\n}\n.md-border-all:before {\n  content: \"\\f16a\";\n}\n.md-border-bottom:before {\n  content: \"\\f16b\";\n}\n.md-border-clear:before {\n  content: \"\\f16c\";\n}\n.md-border-color:before {\n  content: \"\\f16d\";\n}\n.md-border-horizontal:before {\n  content: \"\\f16e\";\n}\n.md-border-inner:before {\n  content: \"\\f16f\";\n}\n.md-border-left:before {\n  content: \"\\f170\";\n}\n.md-border-outer:before {\n  content: \"\\f171\";\n}\n.md-border-right:before {\n  content: \"\\f172\";\n}\n.md-border-style:before {\n  content: \"\\f173\";\n}\n.md-border-top:before {\n  content: \"\\f174\";\n}\n.md-border-vertical:before {\n  content: \"\\f175\";\n}\n.md-format-align-center:before {\n  content: \"\\f176\";\n}\n.md-format-align-justify:before {\n  content: \"\\f177\";\n}\n.md-format-align-left:before {\n  content: \"\\f178\";\n}\n.md-format-align-right:before {\n  content: \"\\f179\";\n}\n.md-format-bold:before {\n  content: \"\\f17a\";\n}\n.md-format-clear:before {\n  content: \"\\f17b\";\n}\n.md-format-color-fill:before {\n  content: \"\\f17c\";\n}\n.md-format-color-reset:before {\n  content: \"\\f17d\";\n}\n.md-format-color-text:before {\n  content: \"\\f17e\";\n}\n.md-format-indent-decrease:before {\n  content: \"\\f17f\";\n}\n.md-format-indent-increase:before {\n  content: \"\\f180\";\n}\n.md-format-italic:before {\n  content: \"\\f181\";\n}\n.md-format-line-spacing:before {\n  content: \"\\f182\";\n}\n.md-format-list-bulleted:before {\n  content: \"\\f183\";\n}\n.md-format-list-numbered:before {\n  content: \"\\f184\";\n}\n.md-format-paint:before {\n  content: \"\\f185\";\n}\n.md-format-quote:before {\n  content: \"\\f186\";\n}\n.md-format-size:before {\n  content: \"\\f187\";\n}\n.md-format-strikethrough:before {\n  content: \"\\f188\";\n}\n.md-format-textdirection-l-to-r:before {\n  content: \"\\f189\";\n}\n.md-format-textdirection-r-to-l:before {\n  content: \"\\f18a\";\n}\n.md-format-underline:before {\n  content: \"\\f18b\";\n}\n.md-functions:before {\n  content: \"\\f18c\";\n}\n.md-insert-chart:before {\n  content: \"\\f18d\";\n}\n.md-insert-comment:before {\n  content: \"\\f18e\";\n}\n.md-insert-drive-file:before {\n  content: \"\\f18f\";\n}\n.md-insert-emoticon:before {\n  content: \"\\f190\";\n}\n.md-insert-invitation:before {\n  content: \"\\f191\";\n}\n.md-insert-link:before {\n  content: \"\\f192\";\n}\n.md-insert-photo:before {\n  content: \"\\f193\";\n}\n.md-merge-type:before {\n  content: \"\\f194\";\n}\n.md-mode-comment:before {\n  content: \"\\f195\";\n}\n.md-mode-edit:before {\n  content: \"\\f196\";\n}\n.md-publish:before {\n  content: \"\\f197\";\n}\n.md-vertical-align-bottom:before {\n  content: \"\\f198\";\n}\n.md-vertical-align-center:before {\n  content: \"\\f199\";\n}\n.md-vertical-align-top:before {\n  content: \"\\f19a\";\n}\n.md-wrap-text:before {\n  content: \"\\f19b\";\n}\n.md-attachment:before {\n  content: \"\\f19c\";\n}\n.md-cloud:before {\n  content: \"\\f19d\";\n}\n.md-cloud-circle:before {\n  content: \"\\f19e\";\n}\n.md-cloud-done:before {\n  content: \"\\f19f\";\n}\n.md-cloud-download:before {\n  content: \"\\f1a0\";\n}\n.md-cloud-off:before {\n  content: \"\\f1a1\";\n}\n.md-cloud-queue:before {\n  content: \"\\f1a2\";\n}\n.md-cloud-upload:before {\n  content: \"\\f1a3\";\n}\n.md-file-download:before {\n  content: \"\\f1a4\";\n}\n.md-file-upload:before {\n  content: \"\\f1a5\";\n}\n.md-folder:before {\n  content: \"\\f1a6\";\n}\n.md-folder-open:before {\n  content: \"\\f1a7\";\n}\n.md-folder-shared:before {\n  content: \"\\f1a8\";\n}\n.md-cast:before {\n  content: \"\\f1a9\";\n}\n.md-cast-connected:before {\n  content: \"\\f1aa\";\n}\n.md-computer:before {\n  content: \"\\f1ab\";\n}\n.md-desktop-mac:before {\n  content: \"\\f1ac\";\n}\n.md-desktop-windows:before {\n  content: \"\\f1ad\";\n}\n.md-dock:before {\n  content: \"\\f1ae\";\n}\n.md-gamepad:before {\n  content: \"\\f1af\";\n}\n.md-headset:before {\n  content: \"\\f1b0\";\n}\n.md-headset-mic:before {\n  content: \"\\f1b1\";\n}\n.md-keyboard:before {\n  content: \"\\f1b2\";\n}\n.md-keyboard-alt:before {\n  content: \"\\f1b3\";\n}\n.md-keyboard-arrow-down:before {\n  content: \"\\f1b4\";\n}\n.md-keyboard-arrow-left:before {\n  content: \"\\f1b5\";\n}\n.md-keyboard-arrow-right:before {\n  content: \"\\f1b6\";\n}\n.md-keyboard-arrow-up:before {\n  content: \"\\f1b7\";\n}\n.md-keyboard-backspace:before {\n  content: \"\\f1b8\";\n}\n.md-keyboard-capslock:before {\n  content: \"\\f1b9\";\n}\n.md-keyboard-control:before {\n  content: \"\\f1ba\";\n}\n.md-keyboard-hide:before {\n  content: \"\\f1bb\";\n}\n.md-keyboard-return:before {\n  content: \"\\f1bc\";\n}\n.md-keyboard-tab:before {\n  content: \"\\f1bd\";\n}\n.md-keyboard-voice:before {\n  content: \"\\f1be\";\n}\n.md-laptop:before {\n  content: \"\\f1bf\";\n}\n.md-laptop-chromebook:before {\n  content: \"\\f1c0\";\n}\n.md-laptop-mac:before {\n  content: \"\\f1c1\";\n}\n.md-laptop-windows:before {\n  content: \"\\f1c2\";\n}\n.md-memory:before {\n  content: \"\\f1c3\";\n}\n.md-mouse:before {\n  content: \"\\f1c4\";\n}\n.md-phone-android:before {\n  content: \"\\f1c5\";\n}\n.md-phone-iphone:before {\n  content: \"\\f1c6\";\n}\n.md-phonelink:before {\n  content: \"\\f1c7\";\n}\n.md-phonelink-off:before {\n  content: \"\\f1c8\";\n}\n.md-security:before {\n  content: \"\\f1c9\";\n}\n.md-sim-card:before {\n  content: \"\\f1ca\";\n}\n.md-smartphone:before {\n  content: \"\\f1cb\";\n}\n.md-speaker:before {\n  content: \"\\f1cc\";\n}\n.md-tablet:before {\n  content: \"\\f1cd\";\n}\n.md-tablet-android:before {\n  content: \"\\f1ce\";\n}\n.md-tablet-mac:before {\n  content: \"\\f1cf\";\n}\n.md-tv:before {\n  content: \"\\f1d0\";\n}\n.md-watch:before {\n  content: \"\\f1d1\";\n}\n.md-add-to-photos:before {\n  content: \"\\f1d2\";\n}\n.md-adjust:before {\n  content: \"\\f1d3\";\n}\n.md-assistant-photo:before {\n  content: \"\\f1d4\";\n}\n.md-audiotrack:before {\n  content: \"\\f1d5\";\n}\n.md-blur-circular:before {\n  content: \"\\f1d6\";\n}\n.md-blur-linear:before {\n  content: \"\\f1d7\";\n}\n.md-blur-off:before {\n  content: \"\\f1d8\";\n}\n.md-blur-on:before {\n  content: \"\\f1d9\";\n}\n.md-brightness-1:before {\n  content: \"\\f1da\";\n}\n.md-brightness-2:before {\n  content: \"\\f1db\";\n}\n.md-brightness-3:before {\n  content: \"\\f1dc\";\n}\n.md-brightness-4:before {\n  content: \"\\f1dd\";\n}\n.md-brightness-5:before {\n  content: \"\\f1de\";\n}\n.md-brightness-6:before {\n  content: \"\\f1df\";\n}\n.md-brightness-7:before {\n  content: \"\\f1e0\";\n}\n.md-brush:before {\n  content: \"\\f1e1\";\n}\n.md-camera:before {\n  content: \"\\f1e2\";\n}\n.md-camera-alt:before {\n  content: \"\\f1e3\";\n}\n.md-camera-front:before {\n  content: \"\\f1e4\";\n}\n.md-camera-rear:before {\n  content: \"\\f1e5\";\n}\n.md-camera-roll:before {\n  content: \"\\f1e6\";\n}\n.md-center-focus-strong:before {\n  content: \"\\f1e7\";\n}\n.md-center-focus-weak:before {\n  content: \"\\f1e8\";\n}\n.md-collections:before {\n  content: \"\\f1e9\";\n}\n.md-colorize:before {\n  content: \"\\f1ea\";\n}\n.md-color-lens:before {\n  content: \"\\f1eb\";\n}\n.md-compare:before {\n  content: \"\\f1ec\";\n}\n.md-control-point:before {\n  content: \"\\f1ed\";\n}\n.md-control-point-duplicate:before {\n  content: \"\\f1ee\";\n}\n.md-crop:before {\n  content: \"\\f1ef\";\n}\n.md-crop-3-2:before {\n  content: \"\\f1f0\";\n}\n.md-crop-5-4:before {\n  content: \"\\f1f1\";\n}\n.md-crop-7-5:before {\n  content: \"\\f1f2\";\n}\n.md-crop-16-9:before {\n  content: \"\\f1f3\";\n}\n.md-crop-din:before {\n  content: \"\\f1f4\";\n}\n.md-crop-free:before {\n  content: \"\\f1f5\";\n}\n.md-crop-landscape:before {\n  content: \"\\f1f6\";\n}\n.md-crop-original:before {\n  content: \"\\f1f7\";\n}\n.md-crop-portrait:before {\n  content: \"\\f1f8\";\n}\n.md-crop-square:before {\n  content: \"\\f1f9\";\n}\n.md-dehaze:before {\n  content: \"\\f1fa\";\n}\n.md-details:before {\n  content: \"\\f1fb\";\n}\n.md-edit:before {\n  content: \"\\f1fc\";\n}\n.md-exposure:before {\n  content: \"\\f1fd\";\n}\n.md-exposure-minus-1:before {\n  content: \"\\f1fe\";\n}\n.md-exposure-minus-2:before {\n  content: \"\\f1ff\";\n}\n.md-exposure-zero:before {\n  content: \"\\f200\";\n}\n.md-exposure-plus-1:before {\n  content: \"\\f201\";\n}\n.md-exposure-plus-2:before {\n  content: \"\\f202\";\n}\n.md-filter:before {\n  content: \"\\f203\";\n}\n.md-filter-1:before {\n  content: \"\\f204\";\n}\n.md-filter-2:before {\n  content: \"\\f205\";\n}\n.md-filter-3:before {\n  content: \"\\f206\";\n}\n.md-filter-4:before {\n  content: \"\\f207\";\n}\n.md-filter-5:before {\n  content: \"\\f208\";\n}\n.md-filter-6:before {\n  content: \"\\f209\";\n}\n.md-filter-7:before {\n  content: \"\\f20a\";\n}\n.md-filter-8:before {\n  content: \"\\f20b\";\n}\n.md-filter-9:before {\n  content: \"\\f20c\";\n}\n.md-filter-9-plus:before {\n  content: \"\\f20d\";\n}\n.md-filter-b-and-w:before {\n  content: \"\\f20e\";\n}\n.md-filter-center-focus:before {\n  content: \"\\f20f\";\n}\n.md-filter-drama:before {\n  content: \"\\f210\";\n}\n.md-filter-frames:before {\n  content: \"\\f211\";\n}\n.md-filter-hdr:before {\n  content: \"\\f212\";\n}\n.md-filter-none:before {\n  content: \"\\f213\";\n}\n.md-filter-tilt-shift:before {\n  content: \"\\f214\";\n}\n.md-filter-vintage:before {\n  content: \"\\f215\";\n}\n.md-flare:before {\n  content: \"\\f216\";\n}\n.md-flash-auto:before {\n  content: \"\\f217\";\n}\n.md-flash-off:before {\n  content: \"\\f218\";\n}\n.md-flash-on:before {\n  content: \"\\f219\";\n}\n.md-flip:before {\n  content: \"\\f21a\";\n}\n.md-gradient:before {\n  content: \"\\f21b\";\n}\n.md-grain:before {\n  content: \"\\f21c\";\n}\n.md-grid-off:before {\n  content: \"\\f21d\";\n}\n.md-grid-on:before {\n  content: \"\\f21e\";\n}\n.md-hdr-off:before {\n  content: \"\\f21f\";\n}\n.md-hdr-on:before {\n  content: \"\\f220\";\n}\n.md-hdr-strong:before {\n  content: \"\\f221\";\n}\n.md-hdr-weak:before {\n  content: \"\\f222\";\n}\n.md-healing:before {\n  content: \"\\f223\";\n}\n.md-image:before {\n  content: \"\\f224\";\n}\n.md-image-aspect-ratio:before {\n  content: \"\\f225\";\n}\n.md-iso:before {\n  content: \"\\f226\";\n}\n.md-landscape:before {\n  content: \"\\f227\";\n}\n.md-leak-add:before {\n  content: \"\\f228\";\n}\n.md-leak-remove:before {\n  content: \"\\f229\";\n}\n.md-lens:before {\n  content: \"\\f22a\";\n}\n.md-looks:before {\n  content: \"\\f22b\";\n}\n.md-looks-1:before {\n  content: \"\\f22c\";\n}\n.md-looks-2:before {\n  content: \"\\f22d\";\n}\n.md-looks-3:before {\n  content: \"\\f22e\";\n}\n.md-looks-4:before {\n  content: \"\\f22f\";\n}\n.md-looks-5:before {\n  content: \"\\f230\";\n}\n.md-looks-6:before {\n  content: \"\\f231\";\n}\n.md-loupe:before {\n  content: \"\\f232\";\n}\n.md-movie-creation:before {\n  content: \"\\f233\";\n}\n.md-nature:before {\n  content: \"\\f234\";\n}\n.md-nature-people:before {\n  content: \"\\f235\";\n}\n.md-navigate-before:before {\n  content: \"\\f236\";\n}\n.md-navigate-next:before {\n  content: \"\\f237\";\n}\n.md-palette:before {\n  content: \"\\f238\";\n}\n.md-panorama:before {\n  content: \"\\f239\";\n}\n.md-panorama-fisheye:before {\n  content: \"\\f23a\";\n}\n.md-panorama-horizontal:before {\n  content: \"\\f23b\";\n}\n.md-panorama-vertical:before {\n  content: \"\\f23c\";\n}\n.md-panorama-wide-angle:before {\n  content: \"\\f23d\";\n}\n.md-photo:before {\n  content: \"\\f23e\";\n}\n.md-photo-album:before {\n  content: \"\\f23f\";\n}\n.md-photo-camera:before {\n  content: \"\\f240\";\n}\n.md-photo-library:before {\n  content: \"\\f241\";\n}\n.md-portrait:before {\n  content: \"\\f242\";\n}\n.md-remove-red-eye:before {\n  content: \"\\f243\";\n}\n.md-rotate-left:before {\n  content: \"\\f244\";\n}\n.md-rotate-right:before {\n  content: \"\\f245\";\n}\n.md-slideshow:before {\n  content: \"\\f246\";\n}\n.md-straighten:before {\n  content: \"\\f247\";\n}\n.md-style:before {\n  content: \"\\f248\";\n}\n.md-switch-camera:before {\n  content: \"\\f249\";\n}\n.md-switch-video:before {\n  content: \"\\f24a\";\n}\n.md-tag-faces:before {\n  content: \"\\f24b\";\n}\n.md-texture:before {\n  content: \"\\f24c\";\n}\n.md-timelapse:before {\n  content: \"\\f24d\";\n}\n.md-timer:before {\n  content: \"\\f24e\";\n}\n.md-timer-3:before {\n  content: \"\\f24f\";\n}\n.md-timer-10:before {\n  content: \"\\f250\";\n}\n.md-timer-auto:before {\n  content: \"\\f251\";\n}\n.md-timer-off:before {\n  content: \"\\f252\";\n}\n.md-tonality:before {\n  content: \"\\f253\";\n}\n.md-transform:before {\n  content: \"\\f254\";\n}\n.md-tune:before {\n  content: \"\\f255\";\n}\n.md-wb-auto:before {\n  content: \"\\f256\";\n}\n.md-wb-cloudy:before {\n  content: \"\\f257\";\n}\n.md-wb-incandescent:before {\n  content: \"\\f258\";\n}\n.md-wb-irradescent:before {\n  content: \"\\f259\";\n}\n.md-wb-sunny:before {\n  content: \"\\f25a\";\n}\n.md-beenhere:before {\n  content: \"\\f25b\";\n}\n.md-directions:before {\n  content: \"\\f25c\";\n}\n.md-directions-bike:before {\n  content: \"\\f25d\";\n}\n.md-directions-bus:before {\n  content: \"\\f25e\";\n}\n.md-directions-car:before {\n  content: \"\\f25f\";\n}\n.md-directions-ferry:before {\n  content: \"\\f260\";\n}\n.md-directions-subway:before {\n  content: \"\\f261\";\n}\n.md-directions-train:before {\n  content: \"\\f262\";\n}\n.md-directions-transit:before {\n  content: \"\\f263\";\n}\n.md-directions-walk:before {\n  content: \"\\f264\";\n}\n.md-flight:before {\n  content: \"\\f265\";\n}\n.md-hotel:before {\n  content: \"\\f266\";\n}\n.md-layers:before {\n  content: \"\\f267\";\n}\n.md-layers-clear:before {\n  content: \"\\f268\";\n}\n.md-local-airport:before {\n  content: \"\\f269\";\n}\n.md-local-atm:before {\n  content: \"\\f26a\";\n}\n.md-local-attraction:before {\n  content: \"\\f26b\";\n}\n.md-local-bar:before {\n  content: \"\\f26c\";\n}\n.md-local-cafe:before {\n  content: \"\\f26d\";\n}\n.md-local-car-wash:before {\n  content: \"\\f26e\";\n}\n.md-local-convenience-store:before {\n  content: \"\\f26f\";\n}\n.md-local-drink:before {\n  content: \"\\f270\";\n}\n.md-local-florist:before {\n  content: \"\\f271\";\n}\n.md-local-gas-station:before {\n  content: \"\\f272\";\n}\n.md-local-grocery-store:before {\n  content: \"\\f273\";\n}\n.md-local-hospital:before {\n  content: \"\\f274\";\n}\n.md-local-hotel:before {\n  content: \"\\f275\";\n}\n.md-local-laundry-service:before {\n  content: \"\\f276\";\n}\n.md-local-library:before {\n  content: \"\\f277\";\n}\n.md-local-mall:before {\n  content: \"\\f278\";\n}\n.md-local-movies:before {\n  content: \"\\f279\";\n}\n.md-local-offer:before {\n  content: \"\\f27a\";\n}\n.md-local-parking:before {\n  content: \"\\f27b\";\n}\n.md-local-pharmacy:before {\n  content: \"\\f27c\";\n}\n.md-local-phone:before {\n  content: \"\\f27d\";\n}\n.md-local-pizza:before {\n  content: \"\\f27e\";\n}\n.md-local-play:before {\n  content: \"\\f27f\";\n}\n.md-local-post-office:before {\n  content: \"\\f280\";\n}\n.md-local-print-shop:before {\n  content: \"\\f281\";\n}\n.md-local-restaurant:before {\n  content: \"\\f282\";\n}\n.md-local-see:before {\n  content: \"\\f283\";\n}\n.md-local-shipping:before {\n  content: \"\\f284\";\n}\n.md-local-taxi:before {\n  content: \"\\f285\";\n}\n.md-location-history:before {\n  content: \"\\f286\";\n}\n.md-map:before {\n  content: \"\\f287\";\n}\n.md-my-location:before {\n  content: \"\\f288\";\n}\n.md-navigation:before {\n  content: \"\\f289\";\n}\n.md-pin-drop:before {\n  content: \"\\f28a\";\n}\n.md-place:before {\n  content: \"\\f28b\";\n}\n.md-rate-review:before {\n  content: \"\\f28c\";\n}\n.md-restaurant-menu:before {\n  content: \"\\f28d\";\n}\n.md-satellite:before {\n  content: \"\\f28e\";\n}\n.md-store-mall-directory:before {\n  content: \"\\f28f\";\n}\n.md-terrain:before {\n  content: \"\\f290\";\n}\n.md-traffic:before {\n  content: \"\\f291\";\n}\n.md-apps:before {\n  content: \"\\f292\";\n}\n.md-cancel:before {\n  content: \"\\f293\";\n}\n.md-arrow-drop-down-circle:before {\n  content: \"\\f294\";\n}\n.md-arrow-drop-down:before {\n  content: \"\\f295\";\n}\n.md-arrow-drop-up:before {\n  content: \"\\f296\";\n}\n.md-arrow-back:before {\n  content: \"\\f297\";\n}\n.md-arrow-forward:before {\n  content: \"\\f298\";\n}\n.md-check:before {\n  content: \"\\f299\";\n}\n.md-close:before {\n  content: \"\\f29a\";\n}\n.md-chevron-left:before {\n  content: \"\\f29b\";\n}\n.md-chevron-right:before {\n  content: \"\\f29c\";\n}\n.md-expand-less:before {\n  content: \"\\f29d\";\n}\n.md-expand-more:before {\n  content: \"\\f29e\";\n}\n.md-fullscreen:before {\n  content: \"\\f29f\";\n}\n.md-fullscreen-exit:before {\n  content: \"\\f2a0\";\n}\n.md-menu:before {\n  content: \"\\f2a1\";\n}\n.md-more-horiz:before {\n  content: \"\\f2a2\";\n}\n.md-more-vert:before {\n  content: \"\\f2a3\";\n}\n.md-refresh:before {\n  content: \"\\f2a4\";\n}\n.md-unfold-less:before {\n  content: \"\\f2a5\";\n}\n.md-unfold-more:before {\n  content: \"\\f2a6\";\n}\n.md-adb:before {\n  content: \"\\f2a7\";\n}\n.md-bluetooth-audio:before {\n  content: \"\\f2a8\";\n}\n.md-disc-full:before {\n  content: \"\\f2a9\";\n}\n.md-dnd-forwardslash:before {\n  content: \"\\f2aa\";\n}\n.md-do-not-disturb:before {\n  content: \"\\f2ab\";\n}\n.md-drive-eta:before {\n  content: \"\\f2ac\";\n}\n.md-event-available:before {\n  content: \"\\f2ad\";\n}\n.md-event-busy:before {\n  content: \"\\f2ae\";\n}\n.md-event-note:before {\n  content: \"\\f2af\";\n}\n.md-folder-special:before {\n  content: \"\\f2b0\";\n}\n.md-mms:before {\n  content: \"\\f2b1\";\n}\n.md-more:before {\n  content: \"\\f2b2\";\n}\n.md-network-locked:before {\n  content: \"\\f2b3\";\n}\n.md-phone-bluetooth-speaker:before {\n  content: \"\\f2b4\";\n}\n.md-phone-forwarded:before {\n  content: \"\\f2b5\";\n}\n.md-phone-in-talk:before {\n  content: \"\\f2b6\";\n}\n.md-phone-locked:before {\n  content: \"\\f2b7\";\n}\n.md-phone-missed:before {\n  content: \"\\f2b8\";\n}\n.md-phone-paused:before {\n  content: \"\\f2b9\";\n}\n.md-play-download:before {\n  content: \"\\f2ba\";\n}\n.md-play-install:before {\n  content: \"\\f2bb\";\n}\n.md-sd-card:before {\n  content: \"\\f2bc\";\n}\n.md-sim-card-alert:before {\n  content: \"\\f2bd\";\n}\n.md-sms:before {\n  content: \"\\f2be\";\n}\n.md-sms-failed:before {\n  content: \"\\f2bf\";\n}\n.md-sync:before {\n  content: \"\\f2c0\";\n}\n.md-sync-disabled:before {\n  content: \"\\f2c1\";\n}\n.md-sync-problem:before {\n  content: \"\\f2c2\";\n}\n.md-system-update:before {\n  content: \"\\f2c3\";\n}\n.md-tap-and-play:before {\n  content: \"\\f2c4\";\n}\n.md-time-to-leave:before {\n  content: \"\\f2c5\";\n}\n.md-vibration:before {\n  content: \"\\f2c6\";\n}\n.md-voice-chat:before {\n  content: \"\\f2c7\";\n}\n.md-vpn-lock:before {\n  content: \"\\f2c8\";\n}\n.md-cake:before {\n  content: \"\\f2c9\";\n}\n.md-domain:before {\n  content: \"\\f2ca\";\n}\n.md-location-city:before {\n  content: \"\\f2cb\";\n}\n.md-mood:before {\n  content: \"\\f2cc\";\n}\n.md-notifications-none:before {\n  content: \"\\f2cd\";\n}\n.md-notifications:before {\n  content: \"\\f2ce\";\n}\n.md-notifications-off:before {\n  content: \"\\f2cf\";\n}\n.md-notifications-on:before {\n  content: \"\\f2d0\";\n}\n.md-notifications-paused:before {\n  content: \"\\f2d1\";\n}\n.md-pages:before {\n  content: \"\\f2d2\";\n}\n.md-party-mode:before {\n  content: \"\\f2d3\";\n}\n.md-group:before {\n  content: \"\\f2d4\";\n}\n.md-group-add:before {\n  content: \"\\f2d5\";\n}\n.md-people:before {\n  content: \"\\f2d6\";\n}\n.md-people-outline:before {\n  content: \"\\f2d7\";\n}\n.md-person:before {\n  content: \"\\f2d8\";\n}\n.md-person-add:before {\n  content: \"\\f2d9\";\n}\n.md-person-outline:before {\n  content: \"\\f2da\";\n}\n.md-plus-one:before {\n  content: \"\\f2db\";\n}\n.md-poll:before {\n  content: \"\\f2dc\";\n}\n.md-public:before {\n  content: \"\\f2dd\";\n}\n.md-school:before {\n  content: \"\\f2de\";\n}\n.md-share:before {\n  content: \"\\f2df\";\n}\n.md-whatshot:before {\n  content: \"\\f2e0\";\n}\n.md-check-box:before {\n  content: \"\\f2e1\";\n}\n.md-check-box-outline-blank:before {\n  content: \"\\f2e2\";\n}\n.md-radio-button-off:before {\n  content: \"\\f2e3\";\n}\n.md-radio-button-on:before {\n  content: \"\\f2e4\";\n}\n.md-star:before {\n  content: \"\\f2e5\";\n}\n.md-star-half:before {\n  content: \"\\f2e6\";\n}\n.md-star-outline:before {\n  content: \"\\f2e7\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/material-design-iconic-font/css/mixins.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/material-design-iconic-font/css/variables.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/material-design-iconic-font/material-design-iconic-font.scss",
    "content": "/*!\n *  Material Design Iconic Font 1.0.1 by Sergey Kupletsky (@zavoloklom) - http://zavoloklom.github.io/material-design-iconic-font/\n *  License - https://github.com/zavoloklom/material-design-iconic-font/blob/gh-pages/License.md (Attribution-ShareAlike 4.0 International license)\n */\n@font-face {\n  font-family: 'Material Design Iconic Font';\n  src: url('../fonts/Material-Design-Iconic-Font.eot?v=1.0.1');\n  src: url('../fonts/Material-Design-Iconic-Font.eot?#iefix&v=1.0.1') format('embedded-opentype'), url('../fonts/Material-Design-Iconic-Font.woff?v=1.0.1') format('woff'), url('../fonts/Material-Design-Iconic-Font.ttf?v=1.0.1') format('truetype'), url('../fonts/Material-Design-Iconic-Font.svg?v=1.0.1#Material-Design-Iconic-Font') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n[class^=\"md-\"],\n[class*=\" md-\"] {\n  display: inline-block;\n  font: normal normal normal 14px/1 'Material Design Iconic Font';\n  font-size: inherit;\n  speak: none;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.md {\n  line-height: inherit;\n  vertical-align: bottom;\n}\n.md-lg {\n  font-size: 1.5em;\n  line-height: .5em;\n  vertical-align: -35%;\n}\n.md-2x {\n  font-size: 2em;\n}\n.md-3x {\n  font-size: 3em;\n}\n.md-4x {\n  font-size: 4em;\n}\n.md-5x {\n  font-size: 5em;\n}\n.md-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: .1em;\n}\n.md-border-circle {\n  padding: .2em .25em .15em;\n  border: solid 0.08em grey;\n  border-radius: 50%;\n}\n[class^=\"md-\"].pull-left,\n[class*=\" md-\"].pull-left {\n  float: left;\n  margin-right: .3em;\n}\n[class^=\"md-\"].pull-right,\n[class*=\" md-\"].pull-right {\n  float: right;\n  margin-left: .3em;\n}\n.md-spin {\n  -webkit-animation: md-spin 1.5s infinite linear;\n  animation: md-spin 1.5s infinite linear;\n}\n.md-spin-reverse {\n  -webkit-animation: md-spin-reverse 1.5s infinite linear;\n  animation: md-spin-reverse 1.5s infinite linear;\n}\n@-webkit-keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes md-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg);\n  }\n}\n@keyframes md-spin-reverse {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(-359deg);\n    transform: rotate(-359deg);\n  }\n}\n.md-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.md-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.md-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.md-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.md-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .md-rotate-90,\n:root .md-rotate-180,\n:root .md-rotate-270,\n:root .md-flip-horizontal,\n:root .md-flip-vertical {\n  filter: none;\n}\n/* Material Design Iconic Font uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n/* If you do not want use all icons you can disable icon set here */\n.md-3d-rotation:before {\n  content: \"\\f000\";\n}\n.md-accessibility:before {\n  content: \"\\f001\";\n}\n.md-account-balance:before {\n  content: \"\\f002\";\n}\n.md-account-balance-wallet:before {\n  content: \"\\f003\";\n}\n.md-account-box:before {\n  content: \"\\f004\";\n}\n.md-account-child:before {\n  content: \"\\f005\";\n}\n.md-account-circle:before {\n  content: \"\\f006\";\n}\n.md-add-shopping-cart:before {\n  content: \"\\f007\";\n}\n.md-alarm:before {\n  content: \"\\f008\";\n}\n.md-alarm-add:before {\n  content: \"\\f009\";\n}\n.md-alarm-off:before {\n  content: \"\\f00a\";\n}\n.md-alarm-on:before {\n  content: \"\\f00b\";\n}\n.md-android:before {\n  content: \"\\f00c\";\n}\n.md-announcement:before {\n  content: \"\\f00d\";\n}\n.md-aspect-ratio:before {\n  content: \"\\f00e\";\n}\n.md-assessment:before {\n  content: \"\\f00f\";\n}\n.md-assignment:before {\n  content: \"\\f010\";\n}\n.md-assignment-ind:before {\n  content: \"\\f011\";\n}\n.md-assignment-late:before {\n  content: \"\\f012\";\n}\n.md-assignment-return:before {\n  content: \"\\f013\";\n}\n.md-assignment-returned:before {\n  content: \"\\f014\";\n}\n.md-assignment-turned-in:before {\n  content: \"\\f015\";\n}\n.md-autorenew:before {\n  content: \"\\f016\";\n}\n.md-backup:before {\n  content: \"\\f017\";\n}\n.md-book:before {\n  content: \"\\f018\";\n}\n.md-bookmark:before {\n  content: \"\\f019\";\n}\n.md-bookmark-outline:before {\n  content: \"\\f01a\";\n}\n.md-bug-report:before {\n  content: \"\\f01b\";\n}\n.md-cached:before {\n  content: \"\\f01c\";\n}\n.md-class:before {\n  content: \"\\f01d\";\n}\n.md-credit-card:before {\n  content: \"\\f01e\";\n}\n.md-dashboard:before {\n  content: \"\\f01f\";\n}\n.md-delete:before {\n  content: \"\\f020\";\n}\n.md-description:before {\n  content: \"\\f021\";\n}\n.md-dns:before {\n  content: \"\\f022\";\n}\n.md-done:before {\n  content: \"\\f023\";\n}\n.md-done-all:before {\n  content: \"\\f024\";\n}\n.md-event:before {\n  content: \"\\f025\";\n}\n.md-exit-to-app:before {\n  content: \"\\f026\";\n}\n.md-explore:before {\n  content: \"\\f027\";\n}\n.md-extension:before {\n  content: \"\\f028\";\n}\n.md-face-unlock:before {\n  content: \"\\f029\";\n}\n.md-favorite:before {\n  content: \"\\f02a\";\n}\n.md-favorite-outline:before {\n  content: \"\\f02b\";\n}\n.md-find-in-page:before {\n  content: \"\\f02c\";\n}\n.md-find-replace:before {\n  content: \"\\f02d\";\n}\n.md-flip-to-back:before {\n  content: \"\\f02e\";\n}\n.md-flip-to-front:before {\n  content: \"\\f02f\";\n}\n.md-get-app:before {\n  content: \"\\f030\";\n}\n.md-grade:before {\n  content: \"\\f031\";\n}\n.md-group-work:before {\n  content: \"\\f032\";\n}\n.md-help:before {\n  content: \"\\f033\";\n}\n.md-highlight-remove:before {\n  content: \"\\f034\";\n}\n.md-history:before {\n  content: \"\\f035\";\n}\n.md-home:before {\n  content: \"\\f036\";\n}\n.md-https:before {\n  content: \"\\f037\";\n}\n.md-info:before {\n  content: \"\\f038\";\n}\n.md-info-outline:before {\n  content: \"\\f039\";\n}\n.md-input:before {\n  content: \"\\f03a\";\n}\n.md-invert-colors:before {\n  content: \"\\f03b\";\n}\n.md-label:before {\n  content: \"\\f03c\";\n}\n.md-label-outline:before {\n  content: \"\\f03d\";\n}\n.md-language:before {\n  content: \"\\f03e\";\n}\n.md-launch:before {\n  content: \"\\f03f\";\n}\n.md-list:before {\n  content: \"\\f040\";\n}\n.md-lock:before {\n  content: \"\\f041\";\n}\n.md-lock-open:before {\n  content: \"\\f042\";\n}\n.md-lock-outline:before {\n  content: \"\\f043\";\n}\n.md-loyalty:before {\n  content: \"\\f044\";\n}\n.md-markunread-mailbox:before {\n  content: \"\\f045\";\n}\n.md-note-add:before {\n  content: \"\\f046\";\n}\n.md-open-in-browser:before {\n  content: \"\\f047\";\n}\n.md-open-in-new:before {\n  content: \"\\f048\";\n}\n.md-open-with:before {\n  content: \"\\f049\";\n}\n.md-pageview:before {\n  content: \"\\f04a\";\n}\n.md-payment:before {\n  content: \"\\f04b\";\n}\n.md-perm-camera-mic:before {\n  content: \"\\f04c\";\n}\n.md-perm-contact-cal:before {\n  content: \"\\f04d\";\n}\n.md-perm-data-setting:before {\n  content: \"\\f04e\";\n}\n.md-perm-device-info:before {\n  content: \"\\f04f\";\n}\n.md-perm-identity:before {\n  content: \"\\f050\";\n}\n.md-perm-media:before {\n  content: \"\\f051\";\n}\n.md-perm-phone-msg:before {\n  content: \"\\f052\";\n}\n.md-perm-scan-wifi:before {\n  content: \"\\f053\";\n}\n.md-picture-in-picture:before {\n  content: \"\\f054\";\n}\n.md-polymer:before {\n  content: \"\\f055\";\n}\n.md-print:before {\n  content: \"\\f056\";\n}\n.md-query-builder:before {\n  content: \"\\f057\";\n}\n.md-question-answer:before {\n  content: \"\\f058\";\n}\n.md-receipt:before {\n  content: \"\\f059\";\n}\n.md-redeem:before {\n  content: \"\\f05a\";\n}\n.md-report-problem:before {\n  content: \"\\f05b\";\n}\n.md-restore:before {\n  content: \"\\f05c\";\n}\n.md-room:before {\n  content: \"\\f05d\";\n}\n.md-schedule:before {\n  content: \"\\f05e\";\n}\n.md-search:before {\n  content: \"\\f05f\";\n}\n.md-settings:before {\n  content: \"\\f060\";\n}\n.md-settings-applications:before {\n  content: \"\\f061\";\n}\n.md-settings-backup-restore:before {\n  content: \"\\f062\";\n}\n.md-settings-bluetooth:before {\n  content: \"\\f063\";\n}\n.md-settings-cell:before {\n  content: \"\\f064\";\n}\n.md-settings-display:before {\n  content: \"\\f065\";\n}\n.md-settings-ethernet:before {\n  content: \"\\f066\";\n}\n.md-settings-input-antenna:before {\n  content: \"\\f067\";\n}\n.md-settings-input-component:before {\n  content: \"\\f068\";\n}\n.md-settings-input-composite:before {\n  content: \"\\f069\";\n}\n.md-settings-input-hdmi:before {\n  content: \"\\f06a\";\n}\n.md-settings-input-svideo:before {\n  content: \"\\f06b\";\n}\n.md-settings-overscan:before {\n  content: \"\\f06c\";\n}\n.md-settings-phone:before {\n  content: \"\\f06d\";\n}\n.md-settings-power:before {\n  content: \"\\f06e\";\n}\n.md-settings-remote:before {\n  content: \"\\f06f\";\n}\n.md-settings-voice:before {\n  content: \"\\f070\";\n}\n.md-shop:before {\n  content: \"\\f071\";\n}\n.md-shopping-basket:before {\n  content: \"\\f072\";\n}\n.md-shopping-cart:before {\n  content: \"\\f073\";\n}\n.md-shop-two:before {\n  content: \"\\f074\";\n}\n.md-speaker-notes:before {\n  content: \"\\f075\";\n}\n.md-spellcheck:before {\n  content: \"\\f076\";\n}\n.md-star-rate:before {\n  content: \"\\f077\";\n}\n.md-stars:before {\n  content: \"\\f078\";\n}\n.md-store:before {\n  content: \"\\f079\";\n}\n.md-subject:before {\n  content: \"\\f07a\";\n}\n.md-swap-horiz:before {\n  content: \"\\f07b\";\n}\n.md-swap-vert:before {\n  content: \"\\f07c\";\n}\n.md-swap-vert-circle:before {\n  content: \"\\f07d\";\n}\n.md-system-update-tv:before {\n  content: \"\\f07e\";\n}\n.md-tab:before {\n  content: \"\\f07f\";\n}\n.md-tab-unselected:before {\n  content: \"\\f080\";\n}\n.md-theaters:before {\n  content: \"\\f081\";\n}\n.md-thumb-down:before {\n  content: \"\\f082\";\n}\n.md-thumbs-up-down:before {\n  content: \"\\f083\";\n}\n.md-thumb-up:before {\n  content: \"\\f084\";\n}\n.md-toc:before {\n  content: \"\\f085\";\n}\n.md-today:before {\n  content: \"\\f086\";\n}\n.md-track-changes:before {\n  content: \"\\f087\";\n}\n.md-translate:before {\n  content: \"\\f088\";\n}\n.md-trending-down:before {\n  content: \"\\f089\";\n}\n.md-trending-neutral:before {\n  content: \"\\f08a\";\n}\n.md-trending-up:before {\n  content: \"\\f08b\";\n}\n.md-turned-in:before {\n  content: \"\\f08c\";\n}\n.md-turned-in-not:before {\n  content: \"\\f08d\";\n}\n.md-verified-user:before {\n  content: \"\\f08e\";\n}\n.md-view-agenda:before {\n  content: \"\\f08f\";\n}\n.md-view-array:before {\n  content: \"\\f090\";\n}\n.md-view-carousel:before {\n  content: \"\\f091\";\n}\n.md-view-column:before {\n  content: \"\\f092\";\n}\n.md-view-day:before {\n  content: \"\\f093\";\n}\n.md-view-headline:before {\n  content: \"\\f094\";\n}\n.md-view-list:before {\n  content: \"\\f095\";\n}\n.md-view-module:before {\n  content: \"\\f096\";\n}\n.md-view-quilt:before {\n  content: \"\\f097\";\n}\n.md-view-stream:before {\n  content: \"\\f098\";\n}\n.md-view-week:before {\n  content: \"\\f099\";\n}\n.md-visibility:before {\n  content: \"\\f09a\";\n}\n.md-visibility-off:before {\n  content: \"\\f09b\";\n}\n.md-wallet-giftcard:before {\n  content: \"\\f09c\";\n}\n.md-wallet-membership:before {\n  content: \"\\f09d\";\n}\n.md-wallet-travel:before {\n  content: \"\\f09e\";\n}\n.md-work:before {\n  content: \"\\f09f\";\n}\n.md-error:before {\n  content: \"\\f0a0\";\n}\n.md-warning:before {\n  content: \"\\f0a1\";\n}\n.md-album:before {\n  content: \"\\f0a2\";\n}\n.md-av-timer:before {\n  content: \"\\f0a3\";\n}\n.md-closed-caption:before {\n  content: \"\\f0a4\";\n}\n.md-equalizer:before {\n  content: \"\\f0a5\";\n}\n.md-explicit:before {\n  content: \"\\f0a6\";\n}\n.md-fast-forward:before {\n  content: \"\\f0a7\";\n}\n.md-fast-rewind:before {\n  content: \"\\f0a8\";\n}\n.md-games:before {\n  content: \"\\f0a9\";\n}\n.md-hearing:before {\n  content: \"\\f0aa\";\n}\n.md-high-quality:before {\n  content: \"\\f0ab\";\n}\n.md-loop:before {\n  content: \"\\f0ac\";\n}\n.md-mic:before {\n  content: \"\\f0ad\";\n}\n.md-mic-none:before {\n  content: \"\\f0ae\";\n}\n.md-mic-off:before {\n  content: \"\\f0af\";\n}\n.md-movie:before {\n  content: \"\\f0b0\";\n}\n.md-my-library-add:before {\n  content: \"\\f0b1\";\n}\n.md-my-library-books:before {\n  content: \"\\f0b2\";\n}\n.md-my-library-music:before {\n  content: \"\\f0b3\";\n}\n.md-new-releases:before {\n  content: \"\\f0b4\";\n}\n.md-not-interested:before {\n  content: \"\\f0b5\";\n}\n.md-pause:before {\n  content: \"\\f0b6\";\n}\n.md-pause-circle-fill:before {\n  content: \"\\f0b7\";\n}\n.md-pause-circle-outline:before {\n  content: \"\\f0b8\";\n}\n.md-play-arrow:before {\n  content: \"\\f0b9\";\n}\n.md-play-circle-fill:before {\n  content: \"\\f0ba\";\n}\n.md-play-circle-outline:before {\n  content: \"\\f0bb\";\n}\n.md-playlist-add:before {\n  content: \"\\f0bc\";\n}\n.md-play-shopping-bag:before {\n  content: \"\\f0bd\";\n}\n.md-queue:before {\n  content: \"\\f0be\";\n}\n.md-queue-music:before {\n  content: \"\\f0bf\";\n}\n.md-radio:before {\n  content: \"\\f0c0\";\n}\n.md-recent-actors:before {\n  content: \"\\f0c1\";\n}\n.md-repeat:before {\n  content: \"\\f0c2\";\n}\n.md-repeat-one:before {\n  content: \"\\f0c3\";\n}\n.md-replay:before {\n  content: \"\\f0c4\";\n}\n.md-shuffle:before {\n  content: \"\\f0c5\";\n}\n.md-skip-next:before {\n  content: \"\\f0c6\";\n}\n.md-skip-previous:before {\n  content: \"\\f0c7\";\n}\n.md-snooze:before {\n  content: \"\\f0c8\";\n}\n.md-stop:before {\n  content: \"\\f0c9\";\n}\n.md-subtitles:before {\n  content: \"\\f0ca\";\n}\n.md-surround-sound:before {\n  content: \"\\f0cb\";\n}\n.md-videocam:before {\n  content: \"\\f0cc\";\n}\n.md-videocam-off:before {\n  content: \"\\f0cd\";\n}\n.md-video-collection:before {\n  content: \"\\f0ce\";\n}\n.md-volume-down:before {\n  content: \"\\f0cf\";\n}\n.md-volume-mute:before {\n  content: \"\\f0d0\";\n}\n.md-volume-off:before {\n  content: \"\\f0d1\";\n}\n.md-volume-up:before {\n  content: \"\\f0d2\";\n}\n.md-web:before {\n  content: \"\\f0d3\";\n}\n.md-business:before {\n  content: \"\\f0d4\";\n}\n.md-call:before {\n  content: \"\\f0d5\";\n}\n.md-call-end:before {\n  content: \"\\f0d6\";\n}\n.md-call-made:before {\n  content: \"\\f0d7\";\n}\n.md-call-merge:before {\n  content: \"\\f0d8\";\n}\n.md-call-missed:before {\n  content: \"\\f0d9\";\n}\n.md-call-received:before {\n  content: \"\\f0da\";\n}\n.md-call-split:before {\n  content: \"\\f0db\";\n}\n.md-chat:before {\n  content: \"\\f0dc\";\n}\n.md-clear-all:before {\n  content: \"\\f0dd\";\n}\n.md-comment:before {\n  content: \"\\f0de\";\n}\n.md-contacts:before {\n  content: \"\\f0df\";\n}\n.md-dialer-sip:before {\n  content: \"\\f0e0\";\n}\n.md-dialpad:before {\n  content: \"\\f0e1\";\n}\n.md-dnd-on:before {\n  content: \"\\f0e2\";\n}\n.md-email:before {\n  content: \"\\f0e3\";\n}\n.md-forum:before {\n  content: \"\\f0e4\";\n}\n.md-import-export:before {\n  content: \"\\f0e5\";\n}\n.md-invert-colors-off:before {\n  content: \"\\f0e6\";\n}\n.md-invert-colors-on:before {\n  content: \"\\f0e7\";\n}\n.md-live-help:before {\n  content: \"\\f0e8\";\n}\n.md-location-off:before {\n  content: \"\\f0e9\";\n}\n.md-location-on:before {\n  content: \"\\f0ea\";\n}\n.md-message:before {\n  content: \"\\f0eb\";\n}\n.md-messenger:before {\n  content: \"\\f0ec\";\n}\n.md-no-sim:before {\n  content: \"\\f0ed\";\n}\n.md-phone:before {\n  content: \"\\f0ee\";\n}\n.md-portable-wifi-off:before {\n  content: \"\\f0ef\";\n}\n.md-quick-contacts-dialer:before {\n  content: \"\\f0f0\";\n}\n.md-quick-contacts-mail:before {\n  content: \"\\f0f1\";\n}\n.md-ring-volume:before {\n  content: \"\\f0f2\";\n}\n.md-stay-current-landscape:before {\n  content: \"\\f0f3\";\n}\n.md-stay-current-portrait:before {\n  content: \"\\f0f4\";\n}\n.md-stay-primary-landscape:before {\n  content: \"\\f0f5\";\n}\n.md-stay-primary-portrait:before {\n  content: \"\\f0f6\";\n}\n.md-swap-calls:before {\n  content: \"\\f0f7\";\n}\n.md-textsms:before {\n  content: \"\\f0f8\";\n}\n.md-voicemail:before {\n  content: \"\\f0f9\";\n}\n.md-vpn-key:before {\n  content: \"\\f0fa\";\n}\n.md-add:before {\n  content: \"\\f0fb\";\n}\n.md-add-box:before {\n  content: \"\\f0fc\";\n}\n.md-add-circle:before {\n  content: \"\\f0fd\";\n}\n.md-add-circle-outline:before {\n  content: \"\\f0fe\";\n}\n.md-archive:before {\n  content: \"\\f0ff\";\n}\n.md-backspace:before {\n  content: \"\\f100\";\n}\n.md-block:before {\n  content: \"\\f101\";\n}\n.md-clear:before {\n  content: \"\\f102\";\n}\n.md-content-copy:before {\n  content: \"\\f103\";\n}\n.md-content-cut:before {\n  content: \"\\f104\";\n}\n.md-content-paste:before {\n  content: \"\\f105\";\n}\n.md-create:before {\n  content: \"\\f106\";\n}\n.md-drafts:before {\n  content: \"\\f107\";\n}\n.md-filter-list:before {\n  content: \"\\f108\";\n}\n.md-flag:before {\n  content: \"\\f109\";\n}\n.md-forward:before {\n  content: \"\\f10a\";\n}\n.md-gesture:before {\n  content: \"\\f10b\";\n}\n.md-inbox:before {\n  content: \"\\f10c\";\n}\n.md-link:before {\n  content: \"\\f10d\";\n}\n.md-mail:before {\n  content: \"\\f10e\";\n}\n.md-markunread:before {\n  content: \"\\f10f\";\n}\n.md-redo:before {\n  content: \"\\f110\";\n}\n.md-remove:before {\n  content: \"\\f111\";\n}\n.md-remove-circle:before {\n  content: \"\\f112\";\n}\n.md-remove-circle-outline:before {\n  content: \"\\f113\";\n}\n.md-reply:before {\n  content: \"\\f114\";\n}\n.md-reply-all:before {\n  content: \"\\f115\";\n}\n.md-report:before {\n  content: \"\\f116\";\n}\n.md-save:before {\n  content: \"\\f117\";\n}\n.md-select-all:before {\n  content: \"\\f118\";\n}\n.md-send:before {\n  content: \"\\f119\";\n}\n.md-sort:before {\n  content: \"\\f11a\";\n}\n.md-text-format:before {\n  content: \"\\f11b\";\n}\n.md-undo:before {\n  content: \"\\f11c\";\n}\n.md-access-alarm:before {\n  content: \"\\f11d\";\n}\n.md-access-alarms:before {\n  content: \"\\f11e\";\n}\n.md-access-time:before {\n  content: \"\\f11f\";\n}\n.md-add-alarm:before {\n  content: \"\\f120\";\n}\n.md-airplanemode-off:before {\n  content: \"\\f121\";\n}\n.md-airplanemode-on:before {\n  content: \"\\f122\";\n}\n.md-battery-20:before {\n  content: \"\\f123\";\n}\n.md-battery-30:before {\n  content: \"\\f124\";\n}\n.md-battery-50:before {\n  content: \"\\f125\";\n}\n.md-battery-60:before {\n  content: \"\\f126\";\n}\n.md-battery-80:before {\n  content: \"\\f127\";\n}\n.md-battery-90:before {\n  content: \"\\f128\";\n}\n.md-battery-alert:before {\n  content: \"\\f129\";\n}\n.md-battery-charging-20:before {\n  content: \"\\f12a\";\n}\n.md-battery-charging-30:before {\n  content: \"\\f12b\";\n}\n.md-battery-charging-50:before {\n  content: \"\\f12c\";\n}\n.md-battery-charging-60:before {\n  content: \"\\f12d\";\n}\n.md-battery-charging-80:before {\n  content: \"\\f12e\";\n}\n.md-battery-charging-90:before {\n  content: \"\\f12f\";\n}\n.md-battery-charging-full:before {\n  content: \"\\f130\";\n}\n.md-battery-full:before {\n  content: \"\\f131\";\n}\n.md-battery-std:before {\n  content: \"\\f132\";\n}\n.md-battery-unknown:before {\n  content: \"\\f133\";\n}\n.md-bluetooth:before {\n  content: \"\\f134\";\n}\n.md-bluetooth-connected:before {\n  content: \"\\f135\";\n}\n.md-bluetooth-disabled:before {\n  content: \"\\f136\";\n}\n.md-bluetooth-searching:before {\n  content: \"\\f137\";\n}\n.md-brightness-auto:before {\n  content: \"\\f138\";\n}\n.md-brightness-high:before {\n  content: \"\\f139\";\n}\n.md-brightness-low:before {\n  content: \"\\f13a\";\n}\n.md-brightness-medium:before {\n  content: \"\\f13b\";\n}\n.md-data-usage:before {\n  content: \"\\f13c\";\n}\n.md-developer-mode:before {\n  content: \"\\f13d\";\n}\n.md-devices:before {\n  content: \"\\f13e\";\n}\n.md-dvr:before {\n  content: \"\\f13f\";\n}\n.md-gps-fixed:before {\n  content: \"\\f140\";\n}\n.md-gps-not-fixed:before {\n  content: \"\\f141\";\n}\n.md-gps-off:before {\n  content: \"\\f142\";\n}\n.md-location-disabled:before {\n  content: \"\\f143\";\n}\n.md-location-searching:before {\n  content: \"\\f144\";\n}\n.md-multitrack-audio:before {\n  content: \"\\f145\";\n}\n.md-network-cell:before {\n  content: \"\\f146\";\n}\n.md-network-wifi:before {\n  content: \"\\f147\";\n}\n.md-nfc:before {\n  content: \"\\f148\";\n}\n.md-now-wallpaper:before {\n  content: \"\\f149\";\n}\n.md-now-widgets:before {\n  content: \"\\f14a\";\n}\n.md-screen-lock-landscape:before {\n  content: \"\\f14b\";\n}\n.md-screen-lock-portrait:before {\n  content: \"\\f14c\";\n}\n.md-screen-lock-rotation:before {\n  content: \"\\f14d\";\n}\n.md-screen-rotation:before {\n  content: \"\\f14e\";\n}\n.md-sd-storage:before {\n  content: \"\\f14f\";\n}\n.md-settings-system-daydream:before {\n  content: \"\\f150\";\n}\n.md-signal-cellular-0-bar:before {\n  content: \"\\f151\";\n}\n.md-signal-cellular-1-bar:before {\n  content: \"\\f152\";\n}\n.md-signal-cellular-2-bar:before {\n  content: \"\\f153\";\n}\n.md-signal-cellular-3-bar:before {\n  content: \"\\f154\";\n}\n.md-signal-cellular-4-bar:before {\n  content: \"\\f155\";\n}\n.md-signal-cellular-connected-no-internet-0-bar:before {\n  content: \"\\f156\";\n}\n.md-signal-cellular-connected-no-internet-1-bar:before {\n  content: \"\\f157\";\n}\n.md-signal-cellular-connected-no-internet-2-bar:before {\n  content: \"\\f158\";\n}\n.md-signal-cellular-connected-no-internet-3-bar:before {\n  content: \"\\f159\";\n}\n.md-signal-cellular-connected-no-internet-4-bar:before {\n  content: \"\\f15a\";\n}\n.md-signal-cellular-no-sim:before {\n  content: \"\\f15b\";\n}\n.md-signal-cellular-null:before {\n  content: \"\\f15c\";\n}\n.md-signal-cellular-off:before {\n  content: \"\\f15d\";\n}\n.md-signal-wifi-0-bar:before {\n  content: \"\\f15e\";\n}\n.md-signal-wifi-1-bar:before {\n  content: \"\\f15f\";\n}\n.md-signal-wifi-2-bar:before {\n  content: \"\\f160\";\n}\n.md-signal-wifi-3-bar:before {\n  content: \"\\f161\";\n}\n.md-signal-wifi-4-bar:before {\n  content: \"\\f162\";\n}\n.md-signal-wifi-off:before {\n  content: \"\\f163\";\n}\n.md-storage:before {\n  content: \"\\f164\";\n}\n.md-usb:before {\n  content: \"\\f165\";\n}\n.md-wifi-lock:before {\n  content: \"\\f166\";\n}\n.md-wifi-tethering:before {\n  content: \"\\f167\";\n}\n.md-attach-file:before {\n  content: \"\\f168\";\n}\n.md-attach-money:before {\n  content: \"\\f169\";\n}\n.md-border-all:before {\n  content: \"\\f16a\";\n}\n.md-border-bottom:before {\n  content: \"\\f16b\";\n}\n.md-border-clear:before {\n  content: \"\\f16c\";\n}\n.md-border-color:before {\n  content: \"\\f16d\";\n}\n.md-border-horizontal:before {\n  content: \"\\f16e\";\n}\n.md-border-inner:before {\n  content: \"\\f16f\";\n}\n.md-border-left:before {\n  content: \"\\f170\";\n}\n.md-border-outer:before {\n  content: \"\\f171\";\n}\n.md-border-right:before {\n  content: \"\\f172\";\n}\n.md-border-style:before {\n  content: \"\\f173\";\n}\n.md-border-top:before {\n  content: \"\\f174\";\n}\n.md-border-vertical:before {\n  content: \"\\f175\";\n}\n.md-format-align-center:before {\n  content: \"\\f176\";\n}\n.md-format-align-justify:before {\n  content: \"\\f177\";\n}\n.md-format-align-left:before {\n  content: \"\\f178\";\n}\n.md-format-align-right:before {\n  content: \"\\f179\";\n}\n.md-format-bold:before {\n  content: \"\\f17a\";\n}\n.md-format-clear:before {\n  content: \"\\f17b\";\n}\n.md-format-color-fill:before {\n  content: \"\\f17c\";\n}\n.md-format-color-reset:before {\n  content: \"\\f17d\";\n}\n.md-format-color-text:before {\n  content: \"\\f17e\";\n}\n.md-format-indent-decrease:before {\n  content: \"\\f17f\";\n}\n.md-format-indent-increase:before {\n  content: \"\\f180\";\n}\n.md-format-italic:before {\n  content: \"\\f181\";\n}\n.md-format-line-spacing:before {\n  content: \"\\f182\";\n}\n.md-format-list-bulleted:before {\n  content: \"\\f183\";\n}\n.md-format-list-numbered:before {\n  content: \"\\f184\";\n}\n.md-format-paint:before {\n  content: \"\\f185\";\n}\n.md-format-quote:before {\n  content: \"\\f186\";\n}\n.md-format-size:before {\n  content: \"\\f187\";\n}\n.md-format-strikethrough:before {\n  content: \"\\f188\";\n}\n.md-format-textdirection-l-to-r:before {\n  content: \"\\f189\";\n}\n.md-format-textdirection-r-to-l:before {\n  content: \"\\f18a\";\n}\n.md-format-underline:before {\n  content: \"\\f18b\";\n}\n.md-functions:before {\n  content: \"\\f18c\";\n}\n.md-insert-chart:before {\n  content: \"\\f18d\";\n}\n.md-insert-comment:before {\n  content: \"\\f18e\";\n}\n.md-insert-drive-file:before {\n  content: \"\\f18f\";\n}\n.md-insert-emoticon:before {\n  content: \"\\f190\";\n}\n.md-insert-invitation:before {\n  content: \"\\f191\";\n}\n.md-insert-link:before {\n  content: \"\\f192\";\n}\n.md-insert-photo:before {\n  content: \"\\f193\";\n}\n.md-merge-type:before {\n  content: \"\\f194\";\n}\n.md-mode-comment:before {\n  content: \"\\f195\";\n}\n.md-mode-edit:before {\n  content: \"\\f196\";\n}\n.md-publish:before {\n  content: \"\\f197\";\n}\n.md-vertical-align-bottom:before {\n  content: \"\\f198\";\n}\n.md-vertical-align-center:before {\n  content: \"\\f199\";\n}\n.md-vertical-align-top:before {\n  content: \"\\f19a\";\n}\n.md-wrap-text:before {\n  content: \"\\f19b\";\n}\n.md-attachment:before {\n  content: \"\\f19c\";\n}\n.md-cloud:before {\n  content: \"\\f19d\";\n}\n.md-cloud-circle:before {\n  content: \"\\f19e\";\n}\n.md-cloud-done:before {\n  content: \"\\f19f\";\n}\n.md-cloud-download:before {\n  content: \"\\f1a0\";\n}\n.md-cloud-off:before {\n  content: \"\\f1a1\";\n}\n.md-cloud-queue:before {\n  content: \"\\f1a2\";\n}\n.md-cloud-upload:before {\n  content: \"\\f1a3\";\n}\n.md-file-download:before {\n  content: \"\\f1a4\";\n}\n.md-file-upload:before {\n  content: \"\\f1a5\";\n}\n.md-folder:before {\n  content: \"\\f1a6\";\n}\n.md-folder-open:before {\n  content: \"\\f1a7\";\n}\n.md-folder-shared:before {\n  content: \"\\f1a8\";\n}\n.md-cast:before {\n  content: \"\\f1a9\";\n}\n.md-cast-connected:before {\n  content: \"\\f1aa\";\n}\n.md-computer:before {\n  content: \"\\f1ab\";\n}\n.md-desktop-mac:before {\n  content: \"\\f1ac\";\n}\n.md-desktop-windows:before {\n  content: \"\\f1ad\";\n}\n.md-dock:before {\n  content: \"\\f1ae\";\n}\n.md-gamepad:before {\n  content: \"\\f1af\";\n}\n.md-headset:before {\n  content: \"\\f1b0\";\n}\n.md-headset-mic:before {\n  content: \"\\f1b1\";\n}\n.md-keyboard:before {\n  content: \"\\f1b2\";\n}\n.md-keyboard-alt:before {\n  content: \"\\f1b3\";\n}\n.md-keyboard-arrow-down:before {\n  content: \"\\f1b4\";\n}\n.md-keyboard-arrow-left:before {\n  content: \"\\f1b5\";\n}\n.md-keyboard-arrow-right:before {\n  content: \"\\f1b6\";\n}\n.md-keyboard-arrow-up:before {\n  content: \"\\f1b7\";\n}\n.md-keyboard-backspace:before {\n  content: \"\\f1b8\";\n}\n.md-keyboard-capslock:before {\n  content: \"\\f1b9\";\n}\n.md-keyboard-control:before {\n  content: \"\\f1ba\";\n}\n.md-keyboard-hide:before {\n  content: \"\\f1bb\";\n}\n.md-keyboard-return:before {\n  content: \"\\f1bc\";\n}\n.md-keyboard-tab:before {\n  content: \"\\f1bd\";\n}\n.md-keyboard-voice:before {\n  content: \"\\f1be\";\n}\n.md-laptop:before {\n  content: \"\\f1bf\";\n}\n.md-laptop-chromebook:before {\n  content: \"\\f1c0\";\n}\n.md-laptop-mac:before {\n  content: \"\\f1c1\";\n}\n.md-laptop-windows:before {\n  content: \"\\f1c2\";\n}\n.md-memory:before {\n  content: \"\\f1c3\";\n}\n.md-mouse:before {\n  content: \"\\f1c4\";\n}\n.md-phone-android:before {\n  content: \"\\f1c5\";\n}\n.md-phone-iphone:before {\n  content: \"\\f1c6\";\n}\n.md-phonelink:before {\n  content: \"\\f1c7\";\n}\n.md-phonelink-off:before {\n  content: \"\\f1c8\";\n}\n.md-security:before {\n  content: \"\\f1c9\";\n}\n.md-sim-card:before {\n  content: \"\\f1ca\";\n}\n.md-smartphone:before {\n  content: \"\\f1cb\";\n}\n.md-speaker:before {\n  content: \"\\f1cc\";\n}\n.md-tablet:before {\n  content: \"\\f1cd\";\n}\n.md-tablet-android:before {\n  content: \"\\f1ce\";\n}\n.md-tablet-mac:before {\n  content: \"\\f1cf\";\n}\n.md-tv:before {\n  content: \"\\f1d0\";\n}\n.md-watch:before {\n  content: \"\\f1d1\";\n}\n.md-add-to-photos:before {\n  content: \"\\f1d2\";\n}\n.md-adjust:before {\n  content: \"\\f1d3\";\n}\n.md-assistant-photo:before {\n  content: \"\\f1d4\";\n}\n.md-audiotrack:before {\n  content: \"\\f1d5\";\n}\n.md-blur-circular:before {\n  content: \"\\f1d6\";\n}\n.md-blur-linear:before {\n  content: \"\\f1d7\";\n}\n.md-blur-off:before {\n  content: \"\\f1d8\";\n}\n.md-blur-on:before {\n  content: \"\\f1d9\";\n}\n.md-brightness-1:before {\n  content: \"\\f1da\";\n}\n.md-brightness-2:before {\n  content: \"\\f1db\";\n}\n.md-brightness-3:before {\n  content: \"\\f1dc\";\n}\n.md-brightness-4:before {\n  content: \"\\f1dd\";\n}\n.md-brightness-5:before {\n  content: \"\\f1de\";\n}\n.md-brightness-6:before {\n  content: \"\\f1df\";\n}\n.md-brightness-7:before {\n  content: \"\\f1e0\";\n}\n.md-brush:before {\n  content: \"\\f1e1\";\n}\n.md-camera:before {\n  content: \"\\f1e2\";\n}\n.md-camera-alt:before {\n  content: \"\\f1e3\";\n}\n.md-camera-front:before {\n  content: \"\\f1e4\";\n}\n.md-camera-rear:before {\n  content: \"\\f1e5\";\n}\n.md-camera-roll:before {\n  content: \"\\f1e6\";\n}\n.md-center-focus-strong:before {\n  content: \"\\f1e7\";\n}\n.md-center-focus-weak:before {\n  content: \"\\f1e8\";\n}\n.md-collections:before {\n  content: \"\\f1e9\";\n}\n.md-colorize:before {\n  content: \"\\f1ea\";\n}\n.md-color-lens:before {\n  content: \"\\f1eb\";\n}\n.md-compare:before {\n  content: \"\\f1ec\";\n}\n.md-control-point:before {\n  content: \"\\f1ed\";\n}\n.md-control-point-duplicate:before {\n  content: \"\\f1ee\";\n}\n.md-crop:before {\n  content: \"\\f1ef\";\n}\n.md-crop-3-2:before {\n  content: \"\\f1f0\";\n}\n.md-crop-5-4:before {\n  content: \"\\f1f1\";\n}\n.md-crop-7-5:before {\n  content: \"\\f1f2\";\n}\n.md-crop-16-9:before {\n  content: \"\\f1f3\";\n}\n.md-crop-din:before {\n  content: \"\\f1f4\";\n}\n.md-crop-free:before {\n  content: \"\\f1f5\";\n}\n.md-crop-landscape:before {\n  content: \"\\f1f6\";\n}\n.md-crop-original:before {\n  content: \"\\f1f7\";\n}\n.md-crop-portrait:before {\n  content: \"\\f1f8\";\n}\n.md-crop-square:before {\n  content: \"\\f1f9\";\n}\n.md-dehaze:before {\n  content: \"\\f1fa\";\n}\n.md-details:before {\n  content: \"\\f1fb\";\n}\n.md-edit:before {\n  content: \"\\f1fc\";\n}\n.md-exposure:before {\n  content: \"\\f1fd\";\n}\n.md-exposure-minus-1:before {\n  content: \"\\f1fe\";\n}\n.md-exposure-minus-2:before {\n  content: \"\\f1ff\";\n}\n.md-exposure-zero:before {\n  content: \"\\f200\";\n}\n.md-exposure-plus-1:before {\n  content: \"\\f201\";\n}\n.md-exposure-plus-2:before {\n  content: \"\\f202\";\n}\n.md-filter:before {\n  content: \"\\f203\";\n}\n.md-filter-1:before {\n  content: \"\\f204\";\n}\n.md-filter-2:before {\n  content: \"\\f205\";\n}\n.md-filter-3:before {\n  content: \"\\f206\";\n}\n.md-filter-4:before {\n  content: \"\\f207\";\n}\n.md-filter-5:before {\n  content: \"\\f208\";\n}\n.md-filter-6:before {\n  content: \"\\f209\";\n}\n.md-filter-7:before {\n  content: \"\\f20a\";\n}\n.md-filter-8:before {\n  content: \"\\f20b\";\n}\n.md-filter-9:before {\n  content: \"\\f20c\";\n}\n.md-filter-9-plus:before {\n  content: \"\\f20d\";\n}\n.md-filter-b-and-w:before {\n  content: \"\\f20e\";\n}\n.md-filter-center-focus:before {\n  content: \"\\f20f\";\n}\n.md-filter-drama:before {\n  content: \"\\f210\";\n}\n.md-filter-frames:before {\n  content: \"\\f211\";\n}\n.md-filter-hdr:before {\n  content: \"\\f212\";\n}\n.md-filter-none:before {\n  content: \"\\f213\";\n}\n.md-filter-tilt-shift:before {\n  content: \"\\f214\";\n}\n.md-filter-vintage:before {\n  content: \"\\f215\";\n}\n.md-flare:before {\n  content: \"\\f216\";\n}\n.md-flash-auto:before {\n  content: \"\\f217\";\n}\n.md-flash-off:before {\n  content: \"\\f218\";\n}\n.md-flash-on:before {\n  content: \"\\f219\";\n}\n.md-flip:before {\n  content: \"\\f21a\";\n}\n.md-gradient:before {\n  content: \"\\f21b\";\n}\n.md-grain:before {\n  content: \"\\f21c\";\n}\n.md-grid-off:before {\n  content: \"\\f21d\";\n}\n.md-grid-on:before {\n  content: \"\\f21e\";\n}\n.md-hdr-off:before {\n  content: \"\\f21f\";\n}\n.md-hdr-on:before {\n  content: \"\\f220\";\n}\n.md-hdr-strong:before {\n  content: \"\\f221\";\n}\n.md-hdr-weak:before {\n  content: \"\\f222\";\n}\n.md-healing:before {\n  content: \"\\f223\";\n}\n.md-image:before {\n  content: \"\\f224\";\n}\n.md-image-aspect-ratio:before {\n  content: \"\\f225\";\n}\n.md-iso:before {\n  content: \"\\f226\";\n}\n.md-landscape:before {\n  content: \"\\f227\";\n}\n.md-leak-add:before {\n  content: \"\\f228\";\n}\n.md-leak-remove:before {\n  content: \"\\f229\";\n}\n.md-lens:before {\n  content: \"\\f22a\";\n}\n.md-looks:before {\n  content: \"\\f22b\";\n}\n.md-looks-1:before {\n  content: \"\\f22c\";\n}\n.md-looks-2:before {\n  content: \"\\f22d\";\n}\n.md-looks-3:before {\n  content: \"\\f22e\";\n}\n.md-looks-4:before {\n  content: \"\\f22f\";\n}\n.md-looks-5:before {\n  content: \"\\f230\";\n}\n.md-looks-6:before {\n  content: \"\\f231\";\n}\n.md-loupe:before {\n  content: \"\\f232\";\n}\n.md-movie-creation:before {\n  content: \"\\f233\";\n}\n.md-nature:before {\n  content: \"\\f234\";\n}\n.md-nature-people:before {\n  content: \"\\f235\";\n}\n.md-navigate-before:before {\n  content: \"\\f236\";\n}\n.md-navigate-next:before {\n  content: \"\\f237\";\n}\n.md-palette:before {\n  content: \"\\f238\";\n}\n.md-panorama:before {\n  content: \"\\f239\";\n}\n.md-panorama-fisheye:before {\n  content: \"\\f23a\";\n}\n.md-panorama-horizontal:before {\n  content: \"\\f23b\";\n}\n.md-panorama-vertical:before {\n  content: \"\\f23c\";\n}\n.md-panorama-wide-angle:before {\n  content: \"\\f23d\";\n}\n.md-photo:before {\n  content: \"\\f23e\";\n}\n.md-photo-album:before {\n  content: \"\\f23f\";\n}\n.md-photo-camera:before {\n  content: \"\\f240\";\n}\n.md-photo-library:before {\n  content: \"\\f241\";\n}\n.md-portrait:before {\n  content: \"\\f242\";\n}\n.md-remove-red-eye:before {\n  content: \"\\f243\";\n}\n.md-rotate-left:before {\n  content: \"\\f244\";\n}\n.md-rotate-right:before {\n  content: \"\\f245\";\n}\n.md-slideshow:before {\n  content: \"\\f246\";\n}\n.md-straighten:before {\n  content: \"\\f247\";\n}\n.md-style:before {\n  content: \"\\f248\";\n}\n.md-switch-camera:before {\n  content: \"\\f249\";\n}\n.md-switch-video:before {\n  content: \"\\f24a\";\n}\n.md-tag-faces:before {\n  content: \"\\f24b\";\n}\n.md-texture:before {\n  content: \"\\f24c\";\n}\n.md-timelapse:before {\n  content: \"\\f24d\";\n}\n.md-timer:before {\n  content: \"\\f24e\";\n}\n.md-timer-3:before {\n  content: \"\\f24f\";\n}\n.md-timer-10:before {\n  content: \"\\f250\";\n}\n.md-timer-auto:before {\n  content: \"\\f251\";\n}\n.md-timer-off:before {\n  content: \"\\f252\";\n}\n.md-tonality:before {\n  content: \"\\f253\";\n}\n.md-transform:before {\n  content: \"\\f254\";\n}\n.md-tune:before {\n  content: \"\\f255\";\n}\n.md-wb-auto:before {\n  content: \"\\f256\";\n}\n.md-wb-cloudy:before {\n  content: \"\\f257\";\n}\n.md-wb-incandescent:before {\n  content: \"\\f258\";\n}\n.md-wb-irradescent:before {\n  content: \"\\f259\";\n}\n.md-wb-sunny:before {\n  content: \"\\f25a\";\n}\n.md-beenhere:before {\n  content: \"\\f25b\";\n}\n.md-directions:before {\n  content: \"\\f25c\";\n}\n.md-directions-bike:before {\n  content: \"\\f25d\";\n}\n.md-directions-bus:before {\n  content: \"\\f25e\";\n}\n.md-directions-car:before {\n  content: \"\\f25f\";\n}\n.md-directions-ferry:before {\n  content: \"\\f260\";\n}\n.md-directions-subway:before {\n  content: \"\\f261\";\n}\n.md-directions-train:before {\n  content: \"\\f262\";\n}\n.md-directions-transit:before {\n  content: \"\\f263\";\n}\n.md-directions-walk:before {\n  content: \"\\f264\";\n}\n.md-flight:before {\n  content: \"\\f265\";\n}\n.md-hotel:before {\n  content: \"\\f266\";\n}\n.md-layers:before {\n  content: \"\\f267\";\n}\n.md-layers-clear:before {\n  content: \"\\f268\";\n}\n.md-local-airport:before {\n  content: \"\\f269\";\n}\n.md-local-atm:before {\n  content: \"\\f26a\";\n}\n.md-local-attraction:before {\n  content: \"\\f26b\";\n}\n.md-local-bar:before {\n  content: \"\\f26c\";\n}\n.md-local-cafe:before {\n  content: \"\\f26d\";\n}\n.md-local-car-wash:before {\n  content: \"\\f26e\";\n}\n.md-local-convenience-store:before {\n  content: \"\\f26f\";\n}\n.md-local-drink:before {\n  content: \"\\f270\";\n}\n.md-local-florist:before {\n  content: \"\\f271\";\n}\n.md-local-gas-station:before {\n  content: \"\\f272\";\n}\n.md-local-grocery-store:before {\n  content: \"\\f273\";\n}\n.md-local-hospital:before {\n  content: \"\\f274\";\n}\n.md-local-hotel:before {\n  content: \"\\f275\";\n}\n.md-local-laundry-service:before {\n  content: \"\\f276\";\n}\n.md-local-library:before {\n  content: \"\\f277\";\n}\n.md-local-mall:before {\n  content: \"\\f278\";\n}\n.md-local-movies:before {\n  content: \"\\f279\";\n}\n.md-local-offer:before {\n  content: \"\\f27a\";\n}\n.md-local-parking:before {\n  content: \"\\f27b\";\n}\n.md-local-pharmacy:before {\n  content: \"\\f27c\";\n}\n.md-local-phone:before {\n  content: \"\\f27d\";\n}\n.md-local-pizza:before {\n  content: \"\\f27e\";\n}\n.md-local-play:before {\n  content: \"\\f27f\";\n}\n.md-local-post-office:before {\n  content: \"\\f280\";\n}\n.md-local-print-shop:before {\n  content: \"\\f281\";\n}\n.md-local-restaurant:before {\n  content: \"\\f282\";\n}\n.md-local-see:before {\n  content: \"\\f283\";\n}\n.md-local-shipping:before {\n  content: \"\\f284\";\n}\n.md-local-taxi:before {\n  content: \"\\f285\";\n}\n.md-location-history:before {\n  content: \"\\f286\";\n}\n.md-map:before {\n  content: \"\\f287\";\n}\n.md-my-location:before {\n  content: \"\\f288\";\n}\n.md-navigation:before {\n  content: \"\\f289\";\n}\n.md-pin-drop:before {\n  content: \"\\f28a\";\n}\n.md-place:before {\n  content: \"\\f28b\";\n}\n.md-rate-review:before {\n  content: \"\\f28c\";\n}\n.md-restaurant-menu:before {\n  content: \"\\f28d\";\n}\n.md-satellite:before {\n  content: \"\\f28e\";\n}\n.md-store-mall-directory:before {\n  content: \"\\f28f\";\n}\n.md-terrain:before {\n  content: \"\\f290\";\n}\n.md-traffic:before {\n  content: \"\\f291\";\n}\n.md-apps:before {\n  content: \"\\f292\";\n}\n.md-cancel:before {\n  content: \"\\f293\";\n}\n.md-arrow-drop-down-circle:before {\n  content: \"\\f294\";\n}\n.md-arrow-drop-down:before {\n  content: \"\\f295\";\n}\n.md-arrow-drop-up:before {\n  content: \"\\f296\";\n}\n.md-arrow-back:before {\n  content: \"\\f297\";\n}\n.md-arrow-forward:before {\n  content: \"\\f298\";\n}\n.md-check:before {\n  content: \"\\f299\";\n}\n.md-close:before {\n  content: \"\\f29a\";\n}\n.md-chevron-left:before {\n  content: \"\\f29b\";\n}\n.md-chevron-right:before {\n  content: \"\\f29c\";\n}\n.md-expand-less:before {\n  content: \"\\f29d\";\n}\n.md-expand-more:before {\n  content: \"\\f29e\";\n}\n.md-fullscreen:before {\n  content: \"\\f29f\";\n}\n.md-fullscreen-exit:before {\n  content: \"\\f2a0\";\n}\n.md-menu:before {\n  content: \"\\f2a1\";\n}\n.md-more-horiz:before {\n  content: \"\\f2a2\";\n}\n.md-more-vert:before {\n  content: \"\\f2a3\";\n}\n.md-refresh:before {\n  content: \"\\f2a4\";\n}\n.md-unfold-less:before {\n  content: \"\\f2a5\";\n}\n.md-unfold-more:before {\n  content: \"\\f2a6\";\n}\n.md-adb:before {\n  content: \"\\f2a7\";\n}\n.md-bluetooth-audio:before {\n  content: \"\\f2a8\";\n}\n.md-disc-full:before {\n  content: \"\\f2a9\";\n}\n.md-dnd-forwardslash:before {\n  content: \"\\f2aa\";\n}\n.md-do-not-disturb:before {\n  content: \"\\f2ab\";\n}\n.md-drive-eta:before {\n  content: \"\\f2ac\";\n}\n.md-event-available:before {\n  content: \"\\f2ad\";\n}\n.md-event-busy:before {\n  content: \"\\f2ae\";\n}\n.md-event-note:before {\n  content: \"\\f2af\";\n}\n.md-folder-special:before {\n  content: \"\\f2b0\";\n}\n.md-mms:before {\n  content: \"\\f2b1\";\n}\n.md-more:before {\n  content: \"\\f2b2\";\n}\n.md-network-locked:before {\n  content: \"\\f2b3\";\n}\n.md-phone-bluetooth-speaker:before {\n  content: \"\\f2b4\";\n}\n.md-phone-forwarded:before {\n  content: \"\\f2b5\";\n}\n.md-phone-in-talk:before {\n  content: \"\\f2b6\";\n}\n.md-phone-locked:before {\n  content: \"\\f2b7\";\n}\n.md-phone-missed:before {\n  content: \"\\f2b8\";\n}\n.md-phone-paused:before {\n  content: \"\\f2b9\";\n}\n.md-play-download:before {\n  content: \"\\f2ba\";\n}\n.md-play-install:before {\n  content: \"\\f2bb\";\n}\n.md-sd-card:before {\n  content: \"\\f2bc\";\n}\n.md-sim-card-alert:before {\n  content: \"\\f2bd\";\n}\n.md-sms:before {\n  content: \"\\f2be\";\n}\n.md-sms-failed:before {\n  content: \"\\f2bf\";\n}\n.md-sync:before {\n  content: \"\\f2c0\";\n}\n.md-sync-disabled:before {\n  content: \"\\f2c1\";\n}\n.md-sync-problem:before {\n  content: \"\\f2c2\";\n}\n.md-system-update:before {\n  content: \"\\f2c3\";\n}\n.md-tap-and-play:before {\n  content: \"\\f2c4\";\n}\n.md-time-to-leave:before {\n  content: \"\\f2c5\";\n}\n.md-vibration:before {\n  content: \"\\f2c6\";\n}\n.md-voice-chat:before {\n  content: \"\\f2c7\";\n}\n.md-vpn-lock:before {\n  content: \"\\f2c8\";\n}\n.md-cake:before {\n  content: \"\\f2c9\";\n}\n.md-domain:before {\n  content: \"\\f2ca\";\n}\n.md-location-city:before {\n  content: \"\\f2cb\";\n}\n.md-mood:before {\n  content: \"\\f2cc\";\n}\n.md-notifications-none:before {\n  content: \"\\f2cd\";\n}\n.md-notifications:before {\n  content: \"\\f2ce\";\n}\n.md-notifications-off:before {\n  content: \"\\f2cf\";\n}\n.md-notifications-on:before {\n  content: \"\\f2d0\";\n}\n.md-notifications-paused:before {\n  content: \"\\f2d1\";\n}\n.md-pages:before {\n  content: \"\\f2d2\";\n}\n.md-party-mode:before {\n  content: \"\\f2d3\";\n}\n.md-group:before {\n  content: \"\\f2d4\";\n}\n.md-group-add:before {\n  content: \"\\f2d5\";\n}\n.md-people:before {\n  content: \"\\f2d6\";\n}\n.md-people-outline:before {\n  content: \"\\f2d7\";\n}\n.md-person:before {\n  content: \"\\f2d8\";\n}\n.md-person-add:before {\n  content: \"\\f2d9\";\n}\n.md-person-outline:before {\n  content: \"\\f2da\";\n}\n.md-plus-one:before {\n  content: \"\\f2db\";\n}\n.md-poll:before {\n  content: \"\\f2dc\";\n}\n.md-public:before {\n  content: \"\\f2dd\";\n}\n.md-school:before {\n  content: \"\\f2de\";\n}\n.md-share:before {\n  content: \"\\f2df\";\n}\n.md-whatshot:before {\n  content: \"\\f2e0\";\n}\n.md-check-box:before {\n  content: \"\\f2e1\";\n}\n.md-check-box-outline-blank:before {\n  content: \"\\f2e2\";\n}\n.md-radio-button-off:before {\n  content: \"\\f2e3\";\n}\n.md-radio-button-on:before {\n  content: \"\\f2e4\";\n}\n.md-star:before {\n  content: \"\\f2e5\";\n}\n.md-star-half:before {\n  content: \"\\f2e6\";\n}\n.md-star-outline:before {\n  content: \"\\f2e7\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/material-design-iconic-font/stylesheets/styles.css",
    "content": "body {\n    font-family: 'Roboto', 'Helvetica Neue, Helvetica, Arial', sans-serif;\n    font-style: normal;\n    font-weight: 300;\n    font-size: 14px;\n    line-height: 1.4;\n    color: #212121;\n    background-color: white;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-rendering: optimizeLegibility;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n    font-weight: 400;\n}\n\n.text-default {\n    font-size: 14px;\n    line-height: 1.42857143;\n    font-weight: normal;\n}\n\n.margin-top {\n    margin-top: 10px !important;\n}\n.padding-top-sm {\n    padding-top: 5px !important;\n}\n\n#navbar {\n    margin: 0;\n    font-weight: 400;\n}\n\n.jumbotron {\n    color: #f5f5f5;\n    background-color: #039be5;\n    border-top: 1px solid #039be5;\n    border-bottom: 1px solid #0288d1;\n    margin-bottom: 0;\n    padding: 30px 0 40px;\n}\n.jumbotron a,\n.jumbotron a:hover,\n.jumbotron a:visited {\n    color: #f5f5f5;\n}\n.jumbotron .btn-lg {\n    margin: 10px 0;\n    font-size: 24px;\n    padding: 17px 30px;\n    color: #ffffff;\n    border-color: #c7e7dc;\n    background-color: transparent;\n}\n.jumbotron .btn-lg:hover {\n    background-color: #f4faf8;\n    border-color: #f4faf8;\n    color: #039be5;\n}\n#social-buttons {\n    padding: 22px 0 17px;\n    text-align: center;\n    background-color: #f5f5f5;\n    border-top: 1px solid #fff;\n    border-bottom: 1px solid #eee;\n}\n#social-buttons li {\n    vertical-align: top;\n}\n#social-buttons .git-tip img {\n    margin-top: -4px;\n}\n#download-buttons {\n    padding: 22px 0 17px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n}\n.icon-set p {\n    font-size: 16px;\n}\n.icon-set p i {\n    margin-right: 8px;\n}\n\n\n.navbar-light-blue {\n    background-color: #039be5;\n    border-color: #0288d1;\n}\n.navbar-light-blue .btn-animated > div,\n.navbar-light-blue .btn-animated > div:before,\n.navbar-light-blue .btn-animated > div:after {\n    background: #f5f5f5;\n}\n.navbar-light-blue .btn-animated:hover > div,\n.navbar-light-blue .btn-animated:hover > div:before,\n.navbar-light-blue .btn-animated:hover > div:after {\n    background: #f5f5f5;\n}\n.navbar-light-blue .navbar-toggle {\n    color: #ffffff;\n    background-color: transparent;\n}\n.navbar-light-blue .navbar-brand {\n    color: #f5f5f5;\n    background-color: transparent;\n}\n.navbar-light-blue .navbar-brand:hover,\n.navbar-light-blue .navbar-brand:focus {\n    color: #ffffff;\n    background-color: transparent;\n}\n.navbar-light-blue .navbar-divider,\n.navbar-light-blue .navbar-nav .divider {\n    background-color: #bdbdbd;\n}\n.navbar-light-blue .navbar-text {\n    color: #f5f5f5;\n}\n.navbar-light-blue .navbar-nav li > a {\n    color: #f5f5f5;\n    background-color: transparent;\n}\n.navbar-light-blue .navbar-nav li:hover > a,\n.navbar-light-blue .navbar-nav li > a:hover,\n.navbar-light-blue .navbar-nav li:focus > a,\n.navbar-light-blue .navbar-nav li > a:focus {\n    color: #f5f5f5;\n    background-color: #03a9f4;\n}\n.navbar-light-blue .navbar-nav li:hover > a i,\n.navbar-light-blue .navbar-nav li > a:hover i,\n.navbar-light-blue .navbar-nav li:focus > a i,\n.navbar-light-blue .navbar-nav li > a:focus i {\n    color: #212121;\n}\n.navbar-light-blue .navbar-nav > .open > a,\n.navbar-light-blue .navbar-nav > .open > a:hover,\n.navbar-light-blue .navbar-nav > .open > a:focus {\n    color: #f5f5f5;\n    background-color: #03a9f4;\n}\n.navbar-light-blue .navbar-nav > .open > a i {\n    color: #f5f5f5;\n}\n.navbar-light-blue .navbar-nav > .active > a {\n    color: #f5f5f5;\n    background-color: #03a9f4;\n}\n.navbar-light-blue .navbar-nav > .active > a:hover,\n.navbar-light-blue .navbar-nav > .active > a:focus {\n    color: #f5f5f5;\n    background-color: #03a9f4;\n}\n.navbar-light-blue .navbar-nav > .active > a i {\n    color: #f5f5f5;\n}\n.navbar-light-blue .navbar-nav > .disabled > a,\n.navbar-light-blue .navbar-nav > .disabled > a:hover,\n.navbar-light-blue .navbar-nav > .disabled > a:focus {\n    color: #29b6f6;\n    background-color: transparent;\n}\n.navbar-light-blue .navbar-nav > .disabled > a i {\n    color: #29b6f6;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu {\n    background-color: #fff;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > li {\n    background-color: #fff;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > li > a {\n    color: #212121;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > li > a:focus {\n    background-color: #f5f5f5;\n    color: #212121;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > li > a:hover {\n    background-color: #f5f5f5;\n    color: #212121;\n}\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > .active > a,\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > .active > a:hover,\n.navbar-light-blue .navbar-nav > .dropdown > .dropdown-menu > .active > a:focus {\n    background-color: #f5f5f5;\n    color: #212121;\n}\n\n/* code */\n.hll { background-color: #ffffcc }\n/*{ background: #f0f3f3; }*/\n.c { color: #999; } /* Comment */\n.err { color: #AA0000; background-color: #FFAAAA } /* Error */\n.k { color: #006699; } /* Keyword */\n.o { color: #555555 } /* Operator */\n.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */\n.cp { color: #009999 } /* Comment.Preproc */\n.c1 { color: #999; } /* Comment.Single */\n.cs { color: #999; } /* Comment.Special */\n.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */\n.ge { font-style: italic } /* Generic.Emph */\n.gr { color: #FF0000 } /* Generic.Error */\n.gh { color: #003300; } /* Generic.Heading */\n.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */\n.go { color: #AAAAAA } /* Generic.Output */\n.gp { color: #000099; } /* Generic.Prompt */\n.gs { } /* Generic.Strong */\n.gu { color: #003300; } /* Generic.Subheading */\n.gt { color: #99CC66 } /* Generic.Traceback */\n.kc { color: #006699; } /* Keyword.Constant */\n.kd { color: #006699; } /* Keyword.Declaration */\n.kn { color: #006699; } /* Keyword.Namespace */\n.kp { color: #006699 } /* Keyword.Pseudo */\n.kr { color: #006699; } /* Keyword.Reserved */\n.kt { color: #007788; } /* Keyword.Type */\n.m { color: #FF6600 } /* Literal.Number */\n.s { color: #d44950 } /* Literal.String */\n.na { color: #4f9fcf } /* Name.Attribute */\n.nb { color: #336666 } /* Name.Builtin */\n.nc { color: #00AA88; } /* Name.Class */\n.no { color: #336600 } /* Name.Constant */\n.nd { color: #9999FF } /* Name.Decorator */\n.ni { color: #999999; } /* Name.Entity */\n.ne { color: #CC0000; } /* Name.Exception */\n.nf { color: #CC00FF } /* Name.Function */\n.nl { color: #9999FF } /* Name.Label */\n.nn { color: #00CCFF; } /* Name.Namespace */\n.nt { color: #2f6f9f; } /* Name.Tag */\n.nv { color: #003333 } /* Name.Variable */\n.ow { color: #000000; } /* Operator.Word */\n.w { color: #bbbbbb } /* Text.Whitespace */\n.mf { color: #FF6600 } /* Literal.Number.Float */\n.mh { color: #FF6600 } /* Literal.Number.Hex */\n.mi { color: #FF6600 } /* Literal.Number.Integer */\n.mo { color: #FF6600 } /* Literal.Number.Oct */\n.sb { color: #CC3300 } /* Literal.String.Backtick */\n.sc { color: #CC3300 } /* Literal.String.Char */\n.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */\n.s2 { color: #CC3300 } /* Literal.String.Double */\n.se { color: #CC3300; } /* Literal.String.Escape */\n.sh { color: #CC3300 } /* Literal.String.Heredoc */\n.si { color: #AA0000 } /* Literal.String.Interpol */\n.sx { color: #CC3300 } /* Literal.String.Other */\n.sr { color: #33AAAA } /* Literal.String.Regex */\n.s1 { color: #CC3300 } /* Literal.String.Single */\n.ss { color: #FFCC33 } /* Literal.String.Symbol */\n.bp { color: #336666 } /* Name.Builtin.Pseudo */\n.vc { color: #003333 } /* Name.Variable.Class */\n.vg { color: #003333 } /* Name.Variable.Global */\n.vi { color: #003333 } /* Name.Variable.Instance */\n.il { color: #FF6600 } /* Literal.Number.Integer.Long */"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/simple-line-icons/css/simple-line-icons.css",
    "content": "@font-face {\n  font-family: 'simple-line-icons';\n  src: url('../fonts/Simple-Line-Icons.eot?-i3a2kk');\n  src: url('../fonts/Simple-Line-Icons.eot?#iefix-i3a2kk') format('embedded-opentype'), url('../fonts/Simple-Line-Icons.ttf?-i3a2kk') format('truetype'), url('../fonts/Simple-Line-Icons.woff2?-i3a2kk') format('woff2'), url('../fonts/Simple-Line-Icons.woff?-i3a2kk') format('woff'), url('../fonts/Simple-Line-Icons.svg?-i3a2kk#simple-line-icons') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/*\n Use the following CSS code if you want to have a class per icon.\n Instead of a list of all class selectors, you can use the generic [class*=\"icon-\"] selector, but it's slower: \n*/\n.icon-user,\n.icon-people,\n.icon-user-female,\n.icon-user-follow,\n.icon-user-following,\n.icon-user-unfollow,\n.icon-login,\n.icon-logout,\n.icon-emotsmile,\n.icon-phone,\n.icon-call-end,\n.icon-call-in,\n.icon-call-out,\n.icon-map,\n.icon-location-pin,\n.icon-direction,\n.icon-directions,\n.icon-compass,\n.icon-layers,\n.icon-menu,\n.icon-list,\n.icon-options-vertical,\n.icon-options,\n.icon-arrow-down,\n.icon-arrow-left,\n.icon-arrow-right,\n.icon-arrow-up,\n.icon-arrow-up-circle,\n.icon-arrow-left-circle,\n.icon-arrow-right-circle,\n.icon-arrow-down-circle,\n.icon-check,\n.icon-clock,\n.icon-plus,\n.icon-close,\n.icon-trophy,\n.icon-screen-smartphone,\n.icon-screen-desktop,\n.icon-plane,\n.icon-notebook,\n.icon-mustache,\n.icon-mouse,\n.icon-magnet,\n.icon-energy,\n.icon-disc,\n.icon-cursor,\n.icon-cursor-move,\n.icon-crop,\n.icon-chemistry,\n.icon-speedometer,\n.icon-shield,\n.icon-screen-tablet,\n.icon-magic-wand,\n.icon-hourglass,\n.icon-graduation,\n.icon-ghost,\n.icon-game-controller,\n.icon-fire,\n.icon-eyeglass,\n.icon-envelope-open,\n.icon-envelope-letter,\n.icon-bell,\n.icon-badge,\n.icon-anchor,\n.icon-wallet,\n.icon-vector,\n.icon-speech,\n.icon-puzzle,\n.icon-printer,\n.icon-present,\n.icon-playlist,\n.icon-pin,\n.icon-picture,\n.icon-handbag,\n.icon-globe-alt,\n.icon-globe,\n.icon-folder-alt,\n.icon-folder,\n.icon-film,\n.icon-feed,\n.icon-drop,\n.icon-drawar,\n.icon-docs,\n.icon-doc,\n.icon-diamond,\n.icon-cup,\n.icon-calculator,\n.icon-bubbles,\n.icon-briefcase,\n.icon-book-open,\n.icon-basket-loaded,\n.icon-basket,\n.icon-bag,\n.icon-action-undo,\n.icon-action-redo,\n.icon-wrench,\n.icon-umbrella,\n.icon-trash,\n.icon-tag,\n.icon-support,\n.icon-frame,\n.icon-size-fullscreen,\n.icon-size-actual,\n.icon-shuffle,\n.icon-share-alt,\n.icon-share,\n.icon-rocket,\n.icon-question,\n.icon-pie-chart,\n.icon-pencil,\n.icon-note,\n.icon-loop,\n.icon-home,\n.icon-grid,\n.icon-graph,\n.icon-microphone,\n.icon-music-tone-alt,\n.icon-music-tone,\n.icon-earphones-alt,\n.icon-earphones,\n.icon-equalizer,\n.icon-like,\n.icon-dislike,\n.icon-control-start,\n.icon-control-rewind,\n.icon-control-play,\n.icon-control-pause,\n.icon-control-forward,\n.icon-control-end,\n.icon-volume-1,\n.icon-volume-2,\n.icon-volume-off,\n.icon-calender,\n.icon-bulb,\n.icon-chart,\n.icon-ban,\n.icon-bubble,\n.icon-camrecorder,\n.icon-camera,\n.icon-cloud-download,\n.icon-cloud-upload,\n.icon-envelope,\n.icon-eye,\n.icon-flag,\n.icon-heart,\n.icon-info,\n.icon-key,\n.icon-link,\n.icon-lock,\n.icon-lock-open,\n.icon-magnifier,\n.icon-magnifier-add,\n.icon-magnifier-remove,\n.icon-paper-clip,\n.icon-paper-plane,\n.icon-power,\n.icon-refresh,\n.icon-reload,\n.icon-settings,\n.icon-star,\n.icon-symble-female,\n.icon-symbol-male,\n.icon-target,\n.icon-credit-card,\n.icon-paypal,\n.icon-social-tumblr,\n.icon-social-twitter,\n.icon-social-facebook,\n.icon-social-instagram,\n.icon-social-linkedin,\n.icon-social-pintarest,\n.icon-social-github,\n.icon-social-gplus,\n.icon-social-reddit,\n.icon-social-skype,\n.icon-social-dribbble,\n.icon-social-behance,\n.icon-social-foursqare,\n.icon-social-soundcloud,\n.icon-social-spotify,\n.icon-social-stumbleupon,\n.icon-social-youtube,\n.icon-social-dropbox {\n  font-family: 'simple-line-icons';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.icon-user:before {\n  content: \"\\e005\";\n}\n.icon-people:before {\n  content: \"\\e001\";\n}\n.icon-user-female:before {\n  content: \"\\e000\";\n}\n.icon-user-follow:before {\n  content: \"\\e002\";\n}\n.icon-user-following:before {\n  content: \"\\e003\";\n}\n.icon-user-unfollow:before {\n  content: \"\\e004\";\n}\n.icon-login:before {\n  content: \"\\e066\";\n}\n.icon-logout:before {\n  content: \"\\e065\";\n}\n.icon-emotsmile:before {\n  content: \"\\e021\";\n}\n.icon-phone:before {\n  content: \"\\e600\";\n}\n.icon-call-end:before {\n  content: \"\\e048\";\n}\n.icon-call-in:before {\n  content: \"\\e047\";\n}\n.icon-call-out:before {\n  content: \"\\e046\";\n}\n.icon-map:before {\n  content: \"\\e033\";\n}\n.icon-location-pin:before {\n  content: \"\\e096\";\n}\n.icon-direction:before {\n  content: \"\\e042\";\n}\n.icon-directions:before {\n  content: \"\\e041\";\n}\n.icon-compass:before {\n  content: \"\\e045\";\n}\n.icon-layers:before {\n  content: \"\\e034\";\n}\n.icon-menu:before {\n  content: \"\\e601\";\n}\n.icon-list:before {\n  content: \"\\e067\";\n}\n.icon-options-vertical:before {\n  content: \"\\e602\";\n}\n.icon-options:before {\n  content: \"\\e603\";\n}\n.icon-arrow-down:before {\n  content: \"\\e604\";\n}\n.icon-arrow-left:before {\n  content: \"\\e605\";\n}\n.icon-arrow-right:before {\n  content: \"\\e606\";\n}\n.icon-arrow-up:before {\n  content: \"\\e607\";\n}\n.icon-arrow-up-circle:before {\n  content: \"\\e078\";\n}\n.icon-arrow-left-circle:before {\n  content: \"\\e07a\";\n}\n.icon-arrow-right-circle:before {\n  content: \"\\e079\";\n}\n.icon-arrow-down-circle:before {\n  content: \"\\e07b\";\n}\n.icon-check:before {\n  content: \"\\e080\";\n}\n.icon-clock:before {\n  content: \"\\e081\";\n}\n.icon-plus:before {\n  content: \"\\e095\";\n}\n.icon-close:before {\n  content: \"\\e082\";\n}\n.icon-trophy:before {\n  content: \"\\e006\";\n}\n.icon-screen-smartphone:before {\n  content: \"\\e010\";\n}\n.icon-screen-desktop:before {\n  content: \"\\e011\";\n}\n.icon-plane:before {\n  content: \"\\e012\";\n}\n.icon-notebook:before {\n  content: \"\\e013\";\n}\n.icon-mustache:before {\n  content: \"\\e014\";\n}\n.icon-mouse:before {\n  content: \"\\e015\";\n}\n.icon-magnet:before {\n  content: \"\\e016\";\n}\n.icon-energy:before {\n  content: \"\\e020\";\n}\n.icon-disc:before {\n  content: \"\\e022\";\n}\n.icon-cursor:before {\n  content: \"\\e06e\";\n}\n.icon-cursor-move:before {\n  content: \"\\e023\";\n}\n.icon-crop:before {\n  content: \"\\e024\";\n}\n.icon-chemistry:before {\n  content: \"\\e026\";\n}\n.icon-speedometer:before {\n  content: \"\\e007\";\n}\n.icon-shield:before {\n  content: \"\\e00e\";\n}\n.icon-screen-tablet:before {\n  content: \"\\e00f\";\n}\n.icon-magic-wand:before {\n  content: \"\\e017\";\n}\n.icon-hourglass:before {\n  content: \"\\e018\";\n}\n.icon-graduation:before {\n  content: \"\\e019\";\n}\n.icon-ghost:before {\n  content: \"\\e01a\";\n}\n.icon-game-controller:before {\n  content: \"\\e01b\";\n}\n.icon-fire:before {\n  content: \"\\e01c\";\n}\n.icon-eyeglass:before {\n  content: \"\\e01d\";\n}\n.icon-envelope-open:before {\n  content: \"\\e01e\";\n}\n.icon-envelope-letter:before {\n  content: \"\\e01f\";\n}\n.icon-bell:before {\n  content: \"\\e027\";\n}\n.icon-badge:before {\n  content: \"\\e028\";\n}\n.icon-anchor:before {\n  content: \"\\e029\";\n}\n.icon-wallet:before {\n  content: \"\\e02a\";\n}\n.icon-vector:before {\n  content: \"\\e02b\";\n}\n.icon-speech:before {\n  content: \"\\e02c\";\n}\n.icon-puzzle:before {\n  content: \"\\e02d\";\n}\n.icon-printer:before {\n  content: \"\\e02e\";\n}\n.icon-present:before {\n  content: \"\\e02f\";\n}\n.icon-playlist:before {\n  content: \"\\e030\";\n}\n.icon-pin:before {\n  content: \"\\e031\";\n}\n.icon-picture:before {\n  content: \"\\e032\";\n}\n.icon-handbag:before {\n  content: \"\\e035\";\n}\n.icon-globe-alt:before {\n  content: \"\\e036\";\n}\n.icon-globe:before {\n  content: \"\\e037\";\n}\n.icon-folder-alt:before {\n  content: \"\\e039\";\n}\n.icon-folder:before {\n  content: \"\\e089\";\n}\n.icon-film:before {\n  content: \"\\e03a\";\n}\n.icon-feed:before {\n  content: \"\\e03b\";\n}\n.icon-drop:before {\n  content: \"\\e03e\";\n}\n.icon-drawar:before {\n  content: \"\\e03f\";\n}\n.icon-docs:before {\n  content: \"\\e040\";\n}\n.icon-doc:before {\n  content: \"\\e085\";\n}\n.icon-diamond:before {\n  content: \"\\e043\";\n}\n.icon-cup:before {\n  content: \"\\e044\";\n}\n.icon-calculator:before {\n  content: \"\\e049\";\n}\n.icon-bubbles:before {\n  content: \"\\e04a\";\n}\n.icon-briefcase:before {\n  content: \"\\e04b\";\n}\n.icon-book-open:before {\n  content: \"\\e04c\";\n}\n.icon-basket-loaded:before {\n  content: \"\\e04d\";\n}\n.icon-basket:before {\n  content: \"\\e04e\";\n}\n.icon-bag:before {\n  content: \"\\e04f\";\n}\n.icon-action-undo:before {\n  content: \"\\e050\";\n}\n.icon-action-redo:before {\n  content: \"\\e051\";\n}\n.icon-wrench:before {\n  content: \"\\e052\";\n}\n.icon-umbrella:before {\n  content: \"\\e053\";\n}\n.icon-trash:before {\n  content: \"\\e054\";\n}\n.icon-tag:before {\n  content: \"\\e055\";\n}\n.icon-support:before {\n  content: \"\\e056\";\n}\n.icon-frame:before {\n  content: \"\\e038\";\n}\n.icon-size-fullscreen:before {\n  content: \"\\e057\";\n}\n.icon-size-actual:before {\n  content: \"\\e058\";\n}\n.icon-shuffle:before {\n  content: \"\\e059\";\n}\n.icon-share-alt:before {\n  content: \"\\e05a\";\n}\n.icon-share:before {\n  content: \"\\e05b\";\n}\n.icon-rocket:before {\n  content: \"\\e05c\";\n}\n.icon-question:before {\n  content: \"\\e05d\";\n}\n.icon-pie-chart:before {\n  content: \"\\e05e\";\n}\n.icon-pencil:before {\n  content: \"\\e05f\";\n}\n.icon-note:before {\n  content: \"\\e060\";\n}\n.icon-loop:before {\n  content: \"\\e064\";\n}\n.icon-home:before {\n  content: \"\\e069\";\n}\n.icon-grid:before {\n  content: \"\\e06a\";\n}\n.icon-graph:before {\n  content: \"\\e06b\";\n}\n.icon-microphone:before {\n  content: \"\\e063\";\n}\n.icon-music-tone-alt:before {\n  content: \"\\e061\";\n}\n.icon-music-tone:before {\n  content: \"\\e062\";\n}\n.icon-earphones-alt:before {\n  content: \"\\e03c\";\n}\n.icon-earphones:before {\n  content: \"\\e03d\";\n}\n.icon-equalizer:before {\n  content: \"\\e06c\";\n}\n.icon-like:before {\n  content: \"\\e068\";\n}\n.icon-dislike:before {\n  content: \"\\e06d\";\n}\n.icon-control-start:before {\n  content: \"\\e06f\";\n}\n.icon-control-rewind:before {\n  content: \"\\e070\";\n}\n.icon-control-play:before {\n  content: \"\\e071\";\n}\n.icon-control-pause:before {\n  content: \"\\e072\";\n}\n.icon-control-forward:before {\n  content: \"\\e073\";\n}\n.icon-control-end:before {\n  content: \"\\e074\";\n}\n.icon-volume-1:before {\n  content: \"\\e09f\";\n}\n.icon-volume-2:before {\n  content: \"\\e0a0\";\n}\n.icon-volume-off:before {\n  content: \"\\e0a1\";\n}\n.icon-calender:before {\n  content: \"\\e075\";\n}\n.icon-bulb:before {\n  content: \"\\e076\";\n}\n.icon-chart:before {\n  content: \"\\e077\";\n}\n.icon-ban:before {\n  content: \"\\e07c\";\n}\n.icon-bubble:before {\n  content: \"\\e07d\";\n}\n.icon-camrecorder:before {\n  content: \"\\e07e\";\n}\n.icon-camera:before {\n  content: \"\\e07f\";\n}\n.icon-cloud-download:before {\n  content: \"\\e083\";\n}\n.icon-cloud-upload:before {\n  content: \"\\e084\";\n}\n.icon-envelope:before {\n  content: \"\\e086\";\n}\n.icon-eye:before {\n  content: \"\\e087\";\n}\n.icon-flag:before {\n  content: \"\\e088\";\n}\n.icon-heart:before {\n  content: \"\\e08a\";\n}\n.icon-info:before {\n  content: \"\\e08b\";\n}\n.icon-key:before {\n  content: \"\\e08c\";\n}\n.icon-link:before {\n  content: \"\\e08d\";\n}\n.icon-lock:before {\n  content: \"\\e08e\";\n}\n.icon-lock-open:before {\n  content: \"\\e08f\";\n}\n.icon-magnifier:before {\n  content: \"\\e090\";\n}\n.icon-magnifier-add:before {\n  content: \"\\e091\";\n}\n.icon-magnifier-remove:before {\n  content: \"\\e092\";\n}\n.icon-paper-clip:before {\n  content: \"\\e093\";\n}\n.icon-paper-plane:before {\n  content: \"\\e094\";\n}\n.icon-power:before {\n  content: \"\\e097\";\n}\n.icon-refresh:before {\n  content: \"\\e098\";\n}\n.icon-reload:before {\n  content: \"\\e099\";\n}\n.icon-settings:before {\n  content: \"\\e09a\";\n}\n.icon-star:before {\n  content: \"\\e09b\";\n}\n.icon-symble-female:before {\n  content: \"\\e09c\";\n}\n.icon-symbol-male:before {\n  content: \"\\e09d\";\n}\n.icon-target:before {\n  content: \"\\e09e\";\n}\n.icon-credit-card:before {\n  content: \"\\e025\";\n}\n.icon-paypal:before {\n  content: \"\\e608\";\n}\n.icon-social-tumblr:before {\n  content: \"\\e00a\";\n}\n.icon-social-twitter:before {\n  content: \"\\e009\";\n}\n.icon-social-facebook:before {\n  content: \"\\e00b\";\n}\n.icon-social-instagram:before {\n  content: \"\\e609\";\n}\n.icon-social-linkedin:before {\n  content: \"\\e60a\";\n}\n.icon-social-pintarest:before {\n  content: \"\\e60b\";\n}\n.icon-social-github:before {\n  content: \"\\e60c\";\n}\n.icon-social-gplus:before {\n  content: \"\\e60d\";\n}\n.icon-social-reddit:before {\n  content: \"\\e60e\";\n}\n.icon-social-skype:before {\n  content: \"\\e60f\";\n}\n.icon-social-dribbble:before {\n  content: \"\\e00d\";\n}\n.icon-social-behance:before {\n  content: \"\\e610\";\n}\n.icon-social-foursqare:before {\n  content: \"\\e611\";\n}\n.icon-social-soundcloud:before {\n  content: \"\\e612\";\n}\n.icon-social-spotify:before {\n  content: \"\\e613\";\n}\n.icon-social-stumbleupon:before {\n  content: \"\\e614\";\n}\n.icon-social-youtube:before {\n  content: \"\\e008\";\n}\n.icon-social-dropbox:before {\n  content: \"\\e00c\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/simple-line-icons/less/simple-line-icons.less",
    "content": "// Default Variables\n@simple-line-font-path        : \"../fonts/\";\n@simple-line-font-family      : \"simple-line-icons\";\n@simple-line-icon-prefix      : icon-;\n\n//Fonts\n@font-face {\n  font-family: '@{simple-line-font-family}';\n  src: url('@{simple-line-font-path}Simple-Line-Icons.eot?-i3a2kk');\n  src: url('@{simple-line-font-path}Simple-Line-Icons.eot?#iefix-i3a2kk') format('embedded-opentype'),\n  url('@{simple-line-font-path}Simple-Line-Icons.ttf?-i3a2kk') format('truetype'),\n  url('@{simple-line-font-path}Simple-Line-Icons.woff2?-i3a2kk') format('woff2'),\n  url('@{simple-line-font-path}Simple-Line-Icons.woff?-i3a2kk') format('woff'),\n  url('@{simple-line-font-path}Simple-Line-Icons.svg?-i3a2kk#simple-line-icons') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/*\n Use the following CSS code if you want to have a class per icon.\n Instead of a list of all class selectors, you can use the generic [class*=\"icon-\"] selector, but it's slower: \n*/\n\n.@{simple-line-icon-prefix}  {\n    &user,\n  &people,\n  &user-female,\n  &user-follow,\n  &user-following,\n  &user-unfollow,\n  &login,\n  &logout,\n  &emotsmile,\n  &phone,\n  &call-end,\n  &call-in,\n  &call-out,\n  &map,\n  &location-pin,\n  &direction,\n  &directions,\n  &compass,\n  &layers,\n  &menu,\n  &list,\n  &options-vertical,\n  &options,\n  &arrow-down,\n  &arrow-left,\n  &arrow-right,\n  &arrow-up,\n  &arrow-up-circle,\n  &arrow-left-circle,\n  &arrow-right-circle,\n  &arrow-down-circle,\n  &check,\n  &clock,\n  &plus,\n  &close,\n  &trophy,\n  &screen-smartphone,\n  &screen-desktop,\n  &plane,\n  &notebook,\n  &mustache,\n  &mouse,\n  &magnet,\n  &energy,\n  &disc,\n  &cursor,\n  &cursor-move,\n  &crop,\n  &chemistry,\n  &speedometer,\n  &shield,\n  &screen-tablet,\n  &magic-wand,\n  &hourglass,\n  &graduation,\n  &ghost,\n  &game-controller,\n  &fire,\n  &eyeglass,\n  &envelope-open,\n  &envelope-letter,\n  &bell,\n  &badge,\n  &anchor,\n  &wallet,\n  &vector,\n  &speech,\n  &puzzle,\n  &printer,\n  &present,\n  &playlist,\n  &pin,\n  &picture,\n  &handbag,\n  &globe-alt,\n  &globe,\n  &folder-alt,\n  &folder,\n  &film,\n  &feed,\n  &drop,\n  &drawar,\n  &docs,\n  &doc,\n  &diamond,\n  &cup,\n  &calculator,\n  &bubbles,\n  &briefcase,\n  &book-open,\n  &basket-loaded,\n  &basket,\n  &bag,\n  &action-undo,\n  &action-redo,\n  &wrench,\n  &umbrella,\n  &trash,\n  &tag,\n  &support,\n  &frame,\n  &size-fullscreen,\n  &size-actual,\n  &shuffle,\n  &share-alt,\n  &share,\n  &rocket,\n  &question,\n  &pie-chart,\n  &pencil,\n  &note,\n  &loop,\n  &home,\n  &grid,\n  &graph,\n  &microphone,\n  &music-tone-alt,\n  &music-tone,\n  &earphones-alt,\n  &earphones,\n  &equalizer,\n  &like,\n  &dislike,\n  &control-start,\n  &control-rewind,\n  &control-play,\n  &control-pause,\n  &control-forward,\n  &control-end,\n  &volume-1,\n  &volume-2,\n  &volume-off,\n  &calender,\n  &bulb,\n  &chart,\n  &ban,\n  &bubble,\n  &camrecorder,\n  &camera,\n  &cloud-download,\n  &cloud-upload,\n  &envelope,\n  &eye,\n  &flag,\n  &heart,\n  &info,\n  &key,\n  &link,\n  &lock,\n  &lock-open,\n  &magnifier,\n  &magnifier-add,\n  &magnifier-remove,\n  &paper-clip,\n  &paper-plane,\n  &power,\n  &refresh,\n  &reload,\n  &settings,\n  &star,\n  &symble-female,\n  &symbol-male,\n  &target,\n  &credit-card,\n  &paypal,\n  &social-tumblr,\n  &social-twitter,\n  &social-facebook,\n  &social-instagram,\n  &social-linkedin,\n  &social-pintarest,\n  &social-github,\n  &social-gplus,\n  &social-reddit,\n  &social-skype,\n  &social-dribbble,\n  &social-behance,\n  &social-foursqare,\n  &social-soundcloud,\n  &social-spotify,\n  &social-stumbleupon,\n  &social-youtube,\n  &social-dropbox {\n    font-family: '@{simple-line-font-family}';\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    /* Better Font Rendering =========== */\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n}\n\n.@{simple-line-icon-prefix}user:before {\n  content: \"\\e005\";\n}\n\n.@{simple-line-icon-prefix}people:before {\n  content: \"\\e001\";\n}\n\n.@{simple-line-icon-prefix}user-female:before {\n  content: \"\\e000\";\n}\n\n.@{simple-line-icon-prefix}user-follow:before {\n  content: \"\\e002\";\n}\n\n.@{simple-line-icon-prefix}user-following:before {\n  content: \"\\e003\";\n}\n\n.@{simple-line-icon-prefix}user-unfollow:before {\n  content: \"\\e004\";\n}\n\n.@{simple-line-icon-prefix}login:before {\n  content: \"\\e066\";\n}\n\n.@{simple-line-icon-prefix}logout:before {\n  content: \"\\e065\";\n}\n\n.@{simple-line-icon-prefix}emotsmile:before {\n  content: \"\\e021\";\n}\n\n.@{simple-line-icon-prefix}phone:before {\n  content: \"\\e600\";\n}\n\n.@{simple-line-icon-prefix}call-end:before {\n  content: \"\\e048\";\n}\n\n.@{simple-line-icon-prefix}call-in:before {\n  content: \"\\e047\";\n}\n\n.@{simple-line-icon-prefix}call-out:before {\n  content: \"\\e046\";\n}\n\n.@{simple-line-icon-prefix}map:before {\n  content: \"\\e033\";\n}\n\n.@{simple-line-icon-prefix}location-pin:before {\n  content: \"\\e096\";\n}\n\n.@{simple-line-icon-prefix}direction:before {\n  content: \"\\e042\";\n}\n\n.@{simple-line-icon-prefix}directions:before {\n  content: \"\\e041\";\n}\n\n.@{simple-line-icon-prefix}compass:before {\n  content: \"\\e045\";\n}\n\n.@{simple-line-icon-prefix}layers:before {\n  content: \"\\e034\";\n}\n\n.@{simple-line-icon-prefix}menu:before {\n  content: \"\\e601\";\n}\n\n.@{simple-line-icon-prefix}list:before {\n  content: \"\\e067\";\n}\n\n.@{simple-line-icon-prefix}options-vertical:before {\n  content: \"\\e602\";\n}\n\n.@{simple-line-icon-prefix}options:before {\n  content: \"\\e603\";\n}\n\n.@{simple-line-icon-prefix}arrow-down:before {\n  content: \"\\e604\";\n}\n\n.@{simple-line-icon-prefix}arrow-left:before {\n  content: \"\\e605\";\n}\n\n.@{simple-line-icon-prefix}arrow-right:before {\n  content: \"\\e606\";\n}\n\n.@{simple-line-icon-prefix}arrow-up:before {\n  content: \"\\e607\";\n}\n\n.@{simple-line-icon-prefix}arrow-up-circle:before {\n  content: \"\\e078\";\n}\n\n.@{simple-line-icon-prefix}arrow-left-circle:before {\n  content: \"\\e07a\";\n}\n\n.@{simple-line-icon-prefix}arrow-right-circle:before {\n  content: \"\\e079\";\n}\n\n.@{simple-line-icon-prefix}arrow-down-circle:before {\n  content: \"\\e07b\";\n}\n\n.@{simple-line-icon-prefix}check:before {\n  content: \"\\e080\";\n}\n\n.@{simple-line-icon-prefix}clock:before {\n  content: \"\\e081\";\n}\n\n.@{simple-line-icon-prefix}plus:before {\n  content: \"\\e095\";\n}\n\n.@{simple-line-icon-prefix}close:before {\n  content: \"\\e082\";\n}\n\n.@{simple-line-icon-prefix}trophy:before {\n  content: \"\\e006\";\n}\n\n.@{simple-line-icon-prefix}screen-smartphone:before {\n  content: \"\\e010\";\n}\n\n.@{simple-line-icon-prefix}screen-desktop:before {\n  content: \"\\e011\";\n}\n\n.@{simple-line-icon-prefix}plane:before {\n  content: \"\\e012\";\n}\n\n.@{simple-line-icon-prefix}notebook:before {\n  content: \"\\e013\";\n}\n\n.@{simple-line-icon-prefix}mustache:before {\n  content: \"\\e014\";\n}\n\n.@{simple-line-icon-prefix}mouse:before {\n  content: \"\\e015\";\n}\n\n.@{simple-line-icon-prefix}magnet:before {\n  content: \"\\e016\";\n}\n\n.@{simple-line-icon-prefix}energy:before {\n  content: \"\\e020\";\n}\n\n.@{simple-line-icon-prefix}disc:before {\n  content: \"\\e022\";\n}\n\n.@{simple-line-icon-prefix}cursor:before {\n  content: \"\\e06e\";\n}\n\n.@{simple-line-icon-prefix}cursor-move:before {\n  content: \"\\e023\";\n}\n\n.@{simple-line-icon-prefix}crop:before {\n  content: \"\\e024\";\n}\n\n.@{simple-line-icon-prefix}chemistry:before {\n  content: \"\\e026\";\n}\n\n.@{simple-line-icon-prefix}speedometer:before {\n  content: \"\\e007\";\n}\n\n.@{simple-line-icon-prefix}shield:before {\n  content: \"\\e00e\";\n}\n\n.@{simple-line-icon-prefix}screen-tablet:before {\n  content: \"\\e00f\";\n}\n\n.@{simple-line-icon-prefix}magic-wand:before {\n  content: \"\\e017\";\n}\n\n.@{simple-line-icon-prefix}hourglass:before {\n  content: \"\\e018\";\n}\n\n.@{simple-line-icon-prefix}graduation:before {\n  content: \"\\e019\";\n}\n\n.@{simple-line-icon-prefix}ghost:before {\n  content: \"\\e01a\";\n}\n\n.@{simple-line-icon-prefix}game-controller:before {\n  content: \"\\e01b\";\n}\n\n.@{simple-line-icon-prefix}fire:before {\n  content: \"\\e01c\";\n}\n\n.@{simple-line-icon-prefix}eyeglass:before {\n  content: \"\\e01d\";\n}\n\n.@{simple-line-icon-prefix}envelope-open:before {\n  content: \"\\e01e\";\n}\n\n.@{simple-line-icon-prefix}envelope-letter:before {\n  content: \"\\e01f\";\n}\n\n.@{simple-line-icon-prefix}bell:before {\n  content: \"\\e027\";\n}\n\n.@{simple-line-icon-prefix}badge:before {\n  content: \"\\e028\";\n}\n\n.@{simple-line-icon-prefix}anchor:before {\n  content: \"\\e029\";\n}\n\n.@{simple-line-icon-prefix}wallet:before {\n  content: \"\\e02a\";\n}\n\n.@{simple-line-icon-prefix}vector:before {\n  content: \"\\e02b\";\n}\n\n.@{simple-line-icon-prefix}speech:before {\n  content: \"\\e02c\";\n}\n\n.@{simple-line-icon-prefix}puzzle:before {\n  content: \"\\e02d\";\n}\n\n.@{simple-line-icon-prefix}printer:before {\n  content: \"\\e02e\";\n}\n\n.@{simple-line-icon-prefix}present:before {\n  content: \"\\e02f\";\n}\n\n.@{simple-line-icon-prefix}playlist:before {\n  content: \"\\e030\";\n}\n\n.@{simple-line-icon-prefix}pin:before {\n  content: \"\\e031\";\n}\n\n.@{simple-line-icon-prefix}picture:before {\n  content: \"\\e032\";\n}\n\n.@{simple-line-icon-prefix}handbag:before {\n  content: \"\\e035\";\n}\n\n.@{simple-line-icon-prefix}globe-alt:before {\n  content: \"\\e036\";\n}\n\n.@{simple-line-icon-prefix}globe:before {\n  content: \"\\e037\";\n}\n\n.@{simple-line-icon-prefix}folder-alt:before {\n  content: \"\\e039\";\n}\n\n.@{simple-line-icon-prefix}folder:before {\n  content: \"\\e089\";\n}\n\n.@{simple-line-icon-prefix}film:before {\n  content: \"\\e03a\";\n}\n\n.@{simple-line-icon-prefix}feed:before {\n  content: \"\\e03b\";\n}\n\n.@{simple-line-icon-prefix}drop:before {\n  content: \"\\e03e\";\n}\n\n.@{simple-line-icon-prefix}drawar:before {\n  content: \"\\e03f\";\n}\n\n.@{simple-line-icon-prefix}docs:before {\n  content: \"\\e040\";\n}\n\n.@{simple-line-icon-prefix}doc:before {\n  content: \"\\e085\";\n}\n\n.@{simple-line-icon-prefix}diamond:before {\n  content: \"\\e043\";\n}\n\n.@{simple-line-icon-prefix}cup:before {\n  content: \"\\e044\";\n}\n\n.@{simple-line-icon-prefix}calculator:before {\n  content: \"\\e049\";\n}\n\n.@{simple-line-icon-prefix}bubbles:before {\n  content: \"\\e04a\";\n}\n\n.@{simple-line-icon-prefix}briefcase:before {\n  content: \"\\e04b\";\n}\n\n.@{simple-line-icon-prefix}book-open:before {\n  content: \"\\e04c\";\n}\n\n.@{simple-line-icon-prefix}basket-loaded:before {\n  content: \"\\e04d\";\n}\n\n.@{simple-line-icon-prefix}basket:before {\n  content: \"\\e04e\";\n}\n\n.@{simple-line-icon-prefix}bag:before {\n  content: \"\\e04f\";\n}\n\n.@{simple-line-icon-prefix}action-undo:before {\n  content: \"\\e050\";\n}\n\n.@{simple-line-icon-prefix}action-redo:before {\n  content: \"\\e051\";\n}\n\n.@{simple-line-icon-prefix}wrench:before {\n  content: \"\\e052\";\n}\n\n.@{simple-line-icon-prefix}umbrella:before {\n  content: \"\\e053\";\n}\n\n.@{simple-line-icon-prefix}trash:before {\n  content: \"\\e054\";\n}\n\n.@{simple-line-icon-prefix}tag:before {\n  content: \"\\e055\";\n}\n\n.@{simple-line-icon-prefix}support:before {\n  content: \"\\e056\";\n}\n\n.@{simple-line-icon-prefix}frame:before {\n  content: \"\\e038\";\n}\n\n.@{simple-line-icon-prefix}size-fullscreen:before {\n  content: \"\\e057\";\n}\n\n.@{simple-line-icon-prefix}size-actual:before {\n  content: \"\\e058\";\n}\n\n.@{simple-line-icon-prefix}shuffle:before {\n  content: \"\\e059\";\n}\n\n.@{simple-line-icon-prefix}share-alt:before {\n  content: \"\\e05a\";\n}\n\n.@{simple-line-icon-prefix}share:before {\n  content: \"\\e05b\";\n}\n\n.@{simple-line-icon-prefix}rocket:before {\n  content: \"\\e05c\";\n}\n\n.@{simple-line-icon-prefix}question:before {\n  content: \"\\e05d\";\n}\n\n.@{simple-line-icon-prefix}pie-chart:before {\n  content: \"\\e05e\";\n}\n\n.@{simple-line-icon-prefix}pencil:before {\n  content: \"\\e05f\";\n}\n\n.@{simple-line-icon-prefix}note:before {\n  content: \"\\e060\";\n}\n\n.@{simple-line-icon-prefix}loop:before {\n  content: \"\\e064\";\n}\n\n.@{simple-line-icon-prefix}home:before {\n  content: \"\\e069\";\n}\n\n.@{simple-line-icon-prefix}grid:before {\n  content: \"\\e06a\";\n}\n\n.@{simple-line-icon-prefix}graph:before {\n  content: \"\\e06b\";\n}\n\n.@{simple-line-icon-prefix}microphone:before {\n  content: \"\\e063\";\n}\n\n.@{simple-line-icon-prefix}music-tone-alt:before {\n  content: \"\\e061\";\n}\n\n.@{simple-line-icon-prefix}music-tone:before {\n  content: \"\\e062\";\n}\n\n.@{simple-line-icon-prefix}earphones-alt:before {\n  content: \"\\e03c\";\n}\n\n.@{simple-line-icon-prefix}earphones:before {\n  content: \"\\e03d\";\n}\n\n.@{simple-line-icon-prefix}equalizer:before {\n  content: \"\\e06c\";\n}\n\n.@{simple-line-icon-prefix}like:before {\n  content: \"\\e068\";\n}\n\n.@{simple-line-icon-prefix}dislike:before {\n  content: \"\\e06d\";\n}\n\n.@{simple-line-icon-prefix}control-start:before {\n  content: \"\\e06f\";\n}\n\n.@{simple-line-icon-prefix}control-rewind:before {\n  content: \"\\e070\";\n}\n\n.@{simple-line-icon-prefix}control-play:before {\n  content: \"\\e071\";\n}\n\n.@{simple-line-icon-prefix}control-pause:before {\n  content: \"\\e072\";\n}\n\n.@{simple-line-icon-prefix}control-forward:before {\n  content: \"\\e073\";\n}\n\n.@{simple-line-icon-prefix}control-end:before {\n  content: \"\\e074\";\n}\n\n.@{simple-line-icon-prefix}volume-1:before {\n  content: \"\\e09f\";\n}\n\n.@{simple-line-icon-prefix}volume-2:before {\n  content: \"\\e0a0\";\n}\n\n.@{simple-line-icon-prefix}volume-off:before {\n  content: \"\\e0a1\";\n}\n\n.@{simple-line-icon-prefix}calender:before {\n  content: \"\\e075\";\n}\n\n.@{simple-line-icon-prefix}bulb:before {\n  content: \"\\e076\";\n}\n\n.@{simple-line-icon-prefix}chart:before {\n  content: \"\\e077\";\n}\n\n.@{simple-line-icon-prefix}ban:before {\n  content: \"\\e07c\";\n}\n\n.@{simple-line-icon-prefix}bubble:before {\n  content: \"\\e07d\";\n}\n\n.@{simple-line-icon-prefix}camrecorder:before {\n  content: \"\\e07e\";\n}\n\n.@{simple-line-icon-prefix}camera:before {\n  content: \"\\e07f\";\n}\n\n.@{simple-line-icon-prefix}cloud-download:before {\n  content: \"\\e083\";\n}\n\n.@{simple-line-icon-prefix}cloud-upload:before {\n  content: \"\\e084\";\n}\n\n.@{simple-line-icon-prefix}envelope:before {\n  content: \"\\e086\";\n}\n\n.@{simple-line-icon-prefix}eye:before {\n  content: \"\\e087\";\n}\n\n.@{simple-line-icon-prefix}flag:before {\n  content: \"\\e088\";\n}\n\n.@{simple-line-icon-prefix}heart:before {\n  content: \"\\e08a\";\n}\n\n.@{simple-line-icon-prefix}info:before {\n  content: \"\\e08b\";\n}\n\n.@{simple-line-icon-prefix}key:before {\n  content: \"\\e08c\";\n}\n\n.@{simple-line-icon-prefix}link:before {\n  content: \"\\e08d\";\n}\n\n.@{simple-line-icon-prefix}lock:before {\n  content: \"\\e08e\";\n}\n\n.@{simple-line-icon-prefix}lock-open:before {\n  content: \"\\e08f\";\n}\n\n.@{simple-line-icon-prefix}magnifier:before {\n  content: \"\\e090\";\n}\n\n.@{simple-line-icon-prefix}magnifier-add:before {\n  content: \"\\e091\";\n}\n\n.@{simple-line-icon-prefix}magnifier-remove:before {\n  content: \"\\e092\";\n}\n\n.@{simple-line-icon-prefix}paper-clip:before {\n  content: \"\\e093\";\n}\n\n.@{simple-line-icon-prefix}paper-plane:before {\n  content: \"\\e094\";\n}\n\n.@{simple-line-icon-prefix}power:before {\n  content: \"\\e097\";\n}\n\n.@{simple-line-icon-prefix}refresh:before {\n  content: \"\\e098\";\n}\n\n.@{simple-line-icon-prefix}reload:before {\n  content: \"\\e099\";\n}\n\n.@{simple-line-icon-prefix}settings:before {\n  content: \"\\e09a\";\n}\n\n.@{simple-line-icon-prefix}star:before {\n  content: \"\\e09b\";\n}\n\n.@{simple-line-icon-prefix}symble-female:before {\n  content: \"\\e09c\";\n}\n\n.@{simple-line-icon-prefix}symbol-male:before {\n  content: \"\\e09d\";\n}\n\n.@{simple-line-icon-prefix}target:before {\n  content: \"\\e09e\";\n}\n\n.@{simple-line-icon-prefix}credit-card:before {\n  content: \"\\e025\";\n}\n\n.@{simple-line-icon-prefix}paypal:before {\n  content: \"\\e608\";\n}\n\n.@{simple-line-icon-prefix}social-tumblr:before {\n  content: \"\\e00a\";\n}\n\n.@{simple-line-icon-prefix}social-twitter:before {\n  content: \"\\e009\";\n}\n\n.@{simple-line-icon-prefix}social-facebook:before {\n  content: \"\\e00b\";\n}\n\n.@{simple-line-icon-prefix}social-instagram:before {\n  content: \"\\e609\";\n}\n\n.@{simple-line-icon-prefix}social-linkedin:before {\n  content: \"\\e60a\";\n}\n\n.@{simple-line-icon-prefix}social-pintarest:before {\n  content: \"\\e60b\";\n}\n\n.@{simple-line-icon-prefix}social-github:before {\n  content: \"\\e60c\";\n}\n\n.@{simple-line-icon-prefix}social-gplus:before {\n  content: \"\\e60d\";\n}\n\n.@{simple-line-icon-prefix}social-reddit:before {\n  content: \"\\e60e\";\n}\n\n.@{simple-line-icon-prefix}social-skype:before {\n  content: \"\\e60f\";\n}\n\n.@{simple-line-icon-prefix}social-dribbble:before {\n  content: \"\\e00d\";\n}\n\n.@{simple-line-icon-prefix}social-behance:before {\n  content: \"\\e610\";\n}\n\n.@{simple-line-icon-prefix}social-foursqare:before {\n  content: \"\\e611\";\n}\n\n.@{simple-line-icon-prefix}social-soundcloud:before {\n  content: \"\\e612\";\n}\n\n.@{simple-line-icon-prefix}social-spotify:before {\n  content: \"\\e613\";\n}\n\n.@{simple-line-icon-prefix}social-stumbleupon:before {\n  content: \"\\e614\";\n}\n\n.@{simple-line-icon-prefix}social-youtube:before {\n  content: \"\\e008\";\n}\n\n.@{simple-line-icon-prefix}social-dropbox:before {\n  content: \"\\e00c\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/simple-line-icons/scss/simple-line-icons.scss",
    "content": "// Default Variables\n$simple-line-font-path: \"../fonts/\" !default;\n$simple-line-font-family: \"simple-line-icons\" !default;\n$simple-line-icon-prefix: \"icon-\" !default;\n\n// Fonts\n@if $simple-line-font-family == \"simple-line-icons\" {\n  @font-face {\n    font-family: '#{$simple-line-font-family}';\n    src: url('#{$simple-line-font-path}Simple-Line-Icons.eot?-i3a2kk');\n    src: url('#{$simple-line-font-path}Simple-Line-Icons.eot?#iefix-i3a2kk') format('embedded-opentype'),\n    url('#{$simple-line-font-path}Simple-Line-Icons.ttf?-i3a2kk') format('truetype'),\n    url('#{$simple-line-font-path}Simple-Line-Icons.woff2?-i3a2kk') format('woff2'),\n    url('#{$simple-line-font-path}Simple-Line-Icons.woff?-i3a2kk') format('woff'),\n    url('#{$simple-line-font-path}Simple-Line-Icons.svg?-i3a2kk#simple-line-icons') format('svg');\n    font-weight: normal;\n    font-style: normal;\n  }\n}\n\n.#{$simple-line-icon-prefix} {\n  &user,\n  &people,\n  &user-female,\n  &user-follow,\n  &user-following,\n  &user-unfollow,\n  &login,\n  &logout,\n  &emotsmile,\n  &phone,\n  &call-end,\n  &call-in,\n  &call-out,\n  &map,\n  &location-pin,\n  &direction,\n  &directions,\n  &compass,\n  &layers,\n  &menu,\n  &list,\n  &options-vertical,\n  &options,\n  &arrow-down,\n  &arrow-left,\n  &arrow-right,\n  &arrow-up,\n  &arrow-up-circle,\n  &arrow-left-circle,\n  &arrow-right-circle,\n  &arrow-down-circle,\n  &check,\n  &clock,\n  &plus,\n  &close,\n  &trophy,\n  &screen-smartphone,\n  &screen-desktop,\n  &plane,\n  &notebook,\n  &mustache,\n  &mouse,\n  &magnet,\n  &energy,\n  &disc,\n  &cursor,\n  &cursor-move,\n  &crop,\n  &chemistry,\n  &speedometer,\n  &shield,\n  &screen-tablet,\n  &magic-wand,\n  &hourglass,\n  &graduation,\n  &ghost,\n  &game-controller,\n  &fire,\n  &eyeglass,\n  &envelope-open,\n  &envelope-letter,\n  &bell,\n  &badge,\n  &anchor,\n  &wallet,\n  &vector,\n  &speech,\n  &puzzle,\n  &printer,\n  &present,\n  &playlist,\n  &pin,\n  &picture,\n  &handbag,\n  &globe-alt,\n  &globe,\n  &folder-alt,\n  &folder,\n  &film,\n  &feed,\n  &drop,\n  &drawar,\n  &docs,\n  &doc,\n  &diamond,\n  &cup,\n  &calculator,\n  &bubbles,\n  &briefcase,\n  &book-open,\n  &basket-loaded,\n  &basket,\n  &bag,\n  &action-undo,\n  &action-redo,\n  &wrench,\n  &umbrella,\n  &trash,\n  &tag,\n  &support,\n  &frame,\n  &size-fullscreen,\n  &size-actual,\n  &shuffle,\n  &share-alt,\n  &share,\n  &rocket,\n  &question,\n  &pie-chart,\n  &pencil,\n  &note,\n  &loop,\n  &home,\n  &grid,\n  &graph,\n  &microphone,\n  &music-tone-alt,\n  &music-tone,\n  &earphones-alt,\n  &earphones,\n  &equalizer,\n  &like,\n  &dislike,\n  &control-start,\n  &control-rewind,\n  &control-play,\n  &control-pause,\n  &control-forward,\n  &control-end,\n  &volume-1,\n  &volume-2,\n  &volume-off,\n  &calender,\n  &bulb,\n  &chart,\n  &ban,\n  &bubble,\n  &camrecorder,\n  &camera,\n  &cloud-download,\n  &cloud-upload,\n  &envelope,\n  &eye,\n  &flag,\n  &heart,\n  &info,\n  &key,\n  &link,\n  &lock,\n  &lock-open,\n  &magnifier,\n  &magnifier-add,\n  &magnifier-remove,\n  &paper-clip,\n  &paper-plane,\n  &power,\n  &refresh,\n  &reload,\n  &settings,\n  &star,\n  &symble-female,\n  &symbol-male,\n  &target,\n  &credit-card,\n  &paypal,\n  &social-tumblr,\n  &social-twitter,\n  &social-facebook,\n  &social-instagram,\n  &social-linkedin,\n  &social-pintarest,\n  &social-github,\n  &social-gplus,\n  &social-reddit,\n  &social-skype,\n  &social-dribbble,\n  &social-behance,\n  &social-foursqare,\n  &social-soundcloud,\n  &social-spotify,\n  &social-stumbleupon,\n  &social-youtube,\n  &social-dropbox {\n    font-family: '#{$simple-line-font-family}';\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    /* Better Font Rendering =========== */\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n }\n}\n\n.#{$simple-line-icon-prefix}user:before {\n  content: \"\\e005\";\n}\n\n.#{$simple-line-icon-prefix}people:before {\n  content: \"\\e001\";\n}\n\n.#{$simple-line-icon-prefix}user-female:before {\n  content: \"\\e000\";\n}\n\n.#{$simple-line-icon-prefix}user-follow:before {\n  content: \"\\e002\";\n}\n\n.#{$simple-line-icon-prefix}user-following:before {\n  content: \"\\e003\";\n}\n\n.#{$simple-line-icon-prefix}user-unfollow:before {\n  content: \"\\e004\";\n}\n\n.#{$simple-line-icon-prefix}login:before {\n  content: \"\\e066\";\n}\n\n.#{$simple-line-icon-prefix}logout:before {\n  content: \"\\e065\";\n}\n\n.#{$simple-line-icon-prefix}emotsmile:before {\n  content: \"\\e021\";\n}\n\n.#{$simple-line-icon-prefix}phone:before {\n  content: \"\\e600\";\n}\n\n.#{$simple-line-icon-prefix}call-end:before {\n  content: \"\\e048\";\n}\n\n.#{$simple-line-icon-prefix}call-in:before {\n  content: \"\\e047\";\n}\n\n.#{$simple-line-icon-prefix}call-out:before {\n  content: \"\\e046\";\n}\n\n.#{$simple-line-icon-prefix}map:before {\n  content: \"\\e033\";\n}\n\n.#{$simple-line-icon-prefix}location-pin:before {\n  content: \"\\e096\";\n}\n\n.#{$simple-line-icon-prefix}direction:before {\n  content: \"\\e042\";\n}\n\n.#{$simple-line-icon-prefix}directions:before {\n  content: \"\\e041\";\n}\n\n.#{$simple-line-icon-prefix}compass:before {\n  content: \"\\e045\";\n}\n\n.#{$simple-line-icon-prefix}layers:before {\n  content: \"\\e034\";\n}\n\n.#{$simple-line-icon-prefix}menu:before {\n  content: \"\\e601\";\n}\n\n.#{$simple-line-icon-prefix}list:before {\n  content: \"\\e067\";\n}\n\n.#{$simple-line-icon-prefix}options-vertical:before {\n  content: \"\\e602\";\n}\n\n.#{$simple-line-icon-prefix}options:before {\n  content: \"\\e603\";\n}\n\n.#{$simple-line-icon-prefix}arrow-down:before {\n  content: \"\\e604\";\n}\n\n.#{$simple-line-icon-prefix}arrow-left:before {\n  content: \"\\e605\";\n}\n\n.#{$simple-line-icon-prefix}arrow-right:before {\n  content: \"\\e606\";\n}\n\n.#{$simple-line-icon-prefix}arrow-up:before {\n  content: \"\\e607\";\n}\n\n.#{$simple-line-icon-prefix}arrow-up-circle:before {\n  content: \"\\e078\";\n}\n\n.#{$simple-line-icon-prefix}arrow-left-circle:before {\n  content: \"\\e07a\";\n}\n\n.#{$simple-line-icon-prefix}arrow-right-circle:before {\n  content: \"\\e079\";\n}\n\n.#{$simple-line-icon-prefix}arrow-down-circle:before {\n  content: \"\\e07b\";\n}\n\n.#{$simple-line-icon-prefix}check:before {\n  content: \"\\e080\";\n}\n\n.#{$simple-line-icon-prefix}clock:before {\n  content: \"\\e081\";\n}\n\n.#{$simple-line-icon-prefix}plus:before {\n  content: \"\\e095\";\n}\n\n.#{$simple-line-icon-prefix}close:before {\n  content: \"\\e082\";\n}\n\n.#{$simple-line-icon-prefix}trophy:before {\n  content: \"\\e006\";\n}\n\n.#{$simple-line-icon-prefix}screen-smartphone:before {\n  content: \"\\e010\";\n}\n\n.#{$simple-line-icon-prefix}screen-desktop:before {\n  content: \"\\e011\";\n}\n\n.#{$simple-line-icon-prefix}plane:before {\n  content: \"\\e012\";\n}\n\n.#{$simple-line-icon-prefix}notebook:before {\n  content: \"\\e013\";\n}\n\n.#{$simple-line-icon-prefix}mustache:before {\n  content: \"\\e014\";\n}\n\n.#{$simple-line-icon-prefix}mouse:before {\n  content: \"\\e015\";\n}\n\n.#{$simple-line-icon-prefix}magnet:before {\n  content: \"\\e016\";\n}\n\n.#{$simple-line-icon-prefix}energy:before {\n  content: \"\\e020\";\n}\n\n.#{$simple-line-icon-prefix}disc:before {\n  content: \"\\e022\";\n}\n\n.#{$simple-line-icon-prefix}cursor:before {\n  content: \"\\e06e\";\n}\n\n.#{$simple-line-icon-prefix}cursor-move:before {\n  content: \"\\e023\";\n}\n\n.#{$simple-line-icon-prefix}crop:before {\n  content: \"\\e024\";\n}\n\n.#{$simple-line-icon-prefix}chemistry:before {\n  content: \"\\e026\";\n}\n\n.#{$simple-line-icon-prefix}speedometer:before {\n  content: \"\\e007\";\n}\n\n.#{$simple-line-icon-prefix}shield:before {\n  content: \"\\e00e\";\n}\n\n.#{$simple-line-icon-prefix}screen-tablet:before {\n  content: \"\\e00f\";\n}\n\n.#{$simple-line-icon-prefix}magic-wand:before {\n  content: \"\\e017\";\n}\n\n.#{$simple-line-icon-prefix}hourglass:before {\n  content: \"\\e018\";\n}\n\n.#{$simple-line-icon-prefix}graduation:before {\n  content: \"\\e019\";\n}\n\n.#{$simple-line-icon-prefix}ghost:before {\n  content: \"\\e01a\";\n}\n\n.#{$simple-line-icon-prefix}game-controller:before {\n  content: \"\\e01b\";\n}\n\n.#{$simple-line-icon-prefix}fire:before {\n  content: \"\\e01c\";\n}\n\n.#{$simple-line-icon-prefix}eyeglass:before {\n  content: \"\\e01d\";\n}\n\n.#{$simple-line-icon-prefix}envelope-open:before {\n  content: \"\\e01e\";\n}\n\n.#{$simple-line-icon-prefix}envelope-letter:before {\n  content: \"\\e01f\";\n}\n\n.#{$simple-line-icon-prefix}bell:before {\n  content: \"\\e027\";\n}\n\n.#{$simple-line-icon-prefix}badge:before {\n  content: \"\\e028\";\n}\n\n.#{$simple-line-icon-prefix}anchor:before {\n  content: \"\\e029\";\n}\n\n.#{$simple-line-icon-prefix}wallet:before {\n  content: \"\\e02a\";\n}\n\n.#{$simple-line-icon-prefix}vector:before {\n  content: \"\\e02b\";\n}\n\n.#{$simple-line-icon-prefix}speech:before {\n  content: \"\\e02c\";\n}\n\n.#{$simple-line-icon-prefix}puzzle:before {\n  content: \"\\e02d\";\n}\n\n.#{$simple-line-icon-prefix}printer:before {\n  content: \"\\e02e\";\n}\n\n.#{$simple-line-icon-prefix}present:before {\n  content: \"\\e02f\";\n}\n\n.#{$simple-line-icon-prefix}playlist:before {\n  content: \"\\e030\";\n}\n\n.#{$simple-line-icon-prefix}pin:before {\n  content: \"\\e031\";\n}\n\n.#{$simple-line-icon-prefix}picture:before {\n  content: \"\\e032\";\n}\n\n.#{$simple-line-icon-prefix}handbag:before {\n  content: \"\\e035\";\n}\n\n.#{$simple-line-icon-prefix}globe-alt:before {\n  content: \"\\e036\";\n}\n\n.#{$simple-line-icon-prefix}globe:before {\n  content: \"\\e037\";\n}\n\n.#{$simple-line-icon-prefix}folder-alt:before {\n  content: \"\\e039\";\n}\n\n.#{$simple-line-icon-prefix}folder:before {\n  content: \"\\e089\";\n}\n\n.#{$simple-line-icon-prefix}film:before {\n  content: \"\\e03a\";\n}\n\n.#{$simple-line-icon-prefix}feed:before {\n  content: \"\\e03b\";\n}\n\n.#{$simple-line-icon-prefix}drop:before {\n  content: \"\\e03e\";\n}\n\n.#{$simple-line-icon-prefix}drawar:before {\n  content: \"\\e03f\";\n}\n\n.#{$simple-line-icon-prefix}docs:before {\n  content: \"\\e040\";\n}\n\n.#{$simple-line-icon-prefix}doc:before {\n  content: \"\\e085\";\n}\n\n.#{$simple-line-icon-prefix}diamond:before {\n  content: \"\\e043\";\n}\n\n.#{$simple-line-icon-prefix}cup:before {\n  content: \"\\e044\";\n}\n\n.#{$simple-line-icon-prefix}calculator:before {\n  content: \"\\e049\";\n}\n\n.#{$simple-line-icon-prefix}bubbles:before {\n  content: \"\\e04a\";\n}\n\n.#{$simple-line-icon-prefix}briefcase:before {\n  content: \"\\e04b\";\n}\n\n.#{$simple-line-icon-prefix}book-open:before {\n  content: \"\\e04c\";\n}\n\n.#{$simple-line-icon-prefix}basket-loaded:before {\n  content: \"\\e04d\";\n}\n\n.#{$simple-line-icon-prefix}basket:before {\n  content: \"\\e04e\";\n}\n\n.#{$simple-line-icon-prefix}bag:before {\n  content: \"\\e04f\";\n}\n\n.#{$simple-line-icon-prefix}action-undo:before {\n  content: \"\\e050\";\n}\n\n.#{$simple-line-icon-prefix}action-redo:before {\n  content: \"\\e051\";\n}\n\n.#{$simple-line-icon-prefix}wrench:before {\n  content: \"\\e052\";\n}\n\n.#{$simple-line-icon-prefix}umbrella:before {\n  content: \"\\e053\";\n}\n\n.#{$simple-line-icon-prefix}trash:before {\n  content: \"\\e054\";\n}\n\n.#{$simple-line-icon-prefix}tag:before {\n  content: \"\\e055\";\n}\n\n.#{$simple-line-icon-prefix}support:before {\n  content: \"\\e056\";\n}\n\n.#{$simple-line-icon-prefix}frame:before {\n  content: \"\\e038\";\n}\n\n.#{$simple-line-icon-prefix}size-fullscreen:before {\n  content: \"\\e057\";\n}\n\n.#{$simple-line-icon-prefix}size-actual:before {\n  content: \"\\e058\";\n}\n\n.#{$simple-line-icon-prefix}shuffle:before {\n  content: \"\\e059\";\n}\n\n.#{$simple-line-icon-prefix}share-alt:before {\n  content: \"\\e05a\";\n}\n\n.#{$simple-line-icon-prefix}share:before {\n  content: \"\\e05b\";\n}\n\n.#{$simple-line-icon-prefix}rocket:before {\n  content: \"\\e05c\";\n}\n\n.#{$simple-line-icon-prefix}question:before {\n  content: \"\\e05d\";\n}\n\n.#{$simple-line-icon-prefix}pie-chart:before {\n  content: \"\\e05e\";\n}\n\n.#{$simple-line-icon-prefix}pencil:before {\n  content: \"\\e05f\";\n}\n\n.#{$simple-line-icon-prefix}note:before {\n  content: \"\\e060\";\n}\n\n.#{$simple-line-icon-prefix}loop:before {\n  content: \"\\e064\";\n}\n\n.#{$simple-line-icon-prefix}home:before {\n  content: \"\\e069\";\n}\n\n.#{$simple-line-icon-prefix}grid:before {\n  content: \"\\e06a\";\n}\n\n.#{$simple-line-icon-prefix}graph:before {\n  content: \"\\e06b\";\n}\n\n.#{$simple-line-icon-prefix}microphone:before {\n  content: \"\\e063\";\n}\n\n.#{$simple-line-icon-prefix}music-tone-alt:before {\n  content: \"\\e061\";\n}\n\n.#{$simple-line-icon-prefix}music-tone:before {\n  content: \"\\e062\";\n}\n\n.#{$simple-line-icon-prefix}earphones-alt:before {\n  content: \"\\e03c\";\n}\n\n.#{$simple-line-icon-prefix}earphones:before {\n  content: \"\\e03d\";\n}\n\n.#{$simple-line-icon-prefix}equalizer:before {\n  content: \"\\e06c\";\n}\n\n.#{$simple-line-icon-prefix}like:before {\n  content: \"\\e068\";\n}\n\n.#{$simple-line-icon-prefix}dislike:before {\n  content: \"\\e06d\";\n}\n\n.#{$simple-line-icon-prefix}control-start:before {\n  content: \"\\e06f\";\n}\n\n.#{$simple-line-icon-prefix}control-rewind:before {\n  content: \"\\e070\";\n}\n\n.#{$simple-line-icon-prefix}control-play:before {\n  content: \"\\e071\";\n}\n\n.#{$simple-line-icon-prefix}control-pause:before {\n  content: \"\\e072\";\n}\n\n.#{$simple-line-icon-prefix}control-forward:before {\n  content: \"\\e073\";\n}\n\n.#{$simple-line-icon-prefix}control-end:before {\n  content: \"\\e074\";\n}\n\n.#{$simple-line-icon-prefix}volume-1:before {\n  content: \"\\e09f\";\n}\n\n.#{$simple-line-icon-prefix}volume-2:before {\n  content: \"\\e0a0\";\n}\n\n.#{$simple-line-icon-prefix}volume-off:before {\n  content: \"\\e0a1\";\n}\n\n.#{$simple-line-icon-prefix}calender:before {\n  content: \"\\e075\";\n}\n\n.#{$simple-line-icon-prefix}bulb:before {\n  content: \"\\e076\";\n}\n\n.#{$simple-line-icon-prefix}chart:before {\n  content: \"\\e077\";\n}\n\n.#{$simple-line-icon-prefix}ban:before {\n  content: \"\\e07c\";\n}\n\n.#{$simple-line-icon-prefix}bubble:before {\n  content: \"\\e07d\";\n}\n\n.#{$simple-line-icon-prefix}camrecorder:before {\n  content: \"\\e07e\";\n}\n\n.#{$simple-line-icon-prefix}camera:before {\n  content: \"\\e07f\";\n}\n\n.#{$simple-line-icon-prefix}cloud-download:before {\n  content: \"\\e083\";\n}\n\n.#{$simple-line-icon-prefix}cloud-upload:before {\n  content: \"\\e084\";\n}\n\n.#{$simple-line-icon-prefix}envelope:before {\n  content: \"\\e086\";\n}\n\n.#{$simple-line-icon-prefix}eye:before {\n  content: \"\\e087\";\n}\n\n.#{$simple-line-icon-prefix}flag:before {\n  content: \"\\e088\";\n}\n\n.#{$simple-line-icon-prefix}heart:before {\n  content: \"\\e08a\";\n}\n\n.#{$simple-line-icon-prefix}info:before {\n  content: \"\\e08b\";\n}\n\n.#{$simple-line-icon-prefix}key:before {\n  content: \"\\e08c\";\n}\n\n.#{$simple-line-icon-prefix}link:before {\n  content: \"\\e08d\";\n}\n\n.#{$simple-line-icon-prefix}lock:before {\n  content: \"\\e08e\";\n}\n\n.#{$simple-line-icon-prefix}lock-open:before {\n  content: \"\\e08f\";\n}\n\n.#{$simple-line-icon-prefix}magnifier:before {\n  content: \"\\e090\";\n}\n\n.#{$simple-line-icon-prefix}magnifier-add:before {\n  content: \"\\e091\";\n}\n\n.#{$simple-line-icon-prefix}magnifier-remove:before {\n  content: \"\\e092\";\n}\n\n.#{$simple-line-icon-prefix}paper-clip:before {\n  content: \"\\e093\";\n}\n\n.#{$simple-line-icon-prefix}paper-plane:before {\n  content: \"\\e094\";\n}\n\n.#{$simple-line-icon-prefix}power:before {\n  content: \"\\e097\";\n}\n\n.#{$simple-line-icon-prefix}refresh:before {\n  content: \"\\e098\";\n}\n\n.#{$simple-line-icon-prefix}reload:before {\n  content: \"\\e099\";\n}\n\n.#{$simple-line-icon-prefix}settings:before {\n  content: \"\\e09a\";\n}\n\n.#{$simple-line-icon-prefix}star:before {\n  content: \"\\e09b\";\n}\n\n.#{$simple-line-icon-prefix}symble-female:before {\n  content: \"\\e09c\";\n}\n\n.#{$simple-line-icon-prefix}symbol-male:before {\n  content: \"\\e09d\";\n}\n\n.#{$simple-line-icon-prefix}target:before {\n  content: \"\\e09e\";\n}\n\n.#{$simple-line-icon-prefix}credit-card:before {\n  content: \"\\e025\";\n}\n\n.#{$simple-line-icon-prefix}paypal:before {\n  content: \"\\e608\";\n}\n\n.#{$simple-line-icon-prefix}social-tumblr:before {\n  content: \"\\e00a\";\n}\n\n.#{$simple-line-icon-prefix}social-twitter:before {\n  content: \"\\e009\";\n}\n\n.#{$simple-line-icon-prefix}social-facebook:before {\n  content: \"\\e00b\";\n}\n\n.#{$simple-line-icon-prefix}social-instagram:before {\n  content: \"\\e609\";\n}\n\n.#{$simple-line-icon-prefix}social-linkedin:before {\n  content: \"\\e60a\";\n}\n\n.#{$simple-line-icon-prefix}social-pintarest:before {\n  content: \"\\e60b\";\n}\n\n.#{$simple-line-icon-prefix}social-github:before {\n  content: \"\\e60c\";\n}\n\n.#{$simple-line-icon-prefix}social-gplus:before {\n  content: \"\\e60d\";\n}\n\n.#{$simple-line-icon-prefix}social-reddit:before {\n  content: \"\\e60e\";\n}\n\n.#{$simple-line-icon-prefix}social-skype:before {\n  content: \"\\e60f\";\n}\n\n.#{$simple-line-icon-prefix}social-dribbble:before {\n  content: \"\\e00d\";\n}\n\n.#{$simple-line-icon-prefix}social-behance:before {\n  content: \"\\e610\";\n}\n\n.#{$simple-line-icon-prefix}social-foursqare:before {\n  content: \"\\e611\";\n}\n\n.#{$simple-line-icon-prefix}social-soundcloud:before {\n  content: \"\\e612\";\n}\n\n.#{$simple-line-icon-prefix}social-spotify:before {\n  content: \"\\e613\";\n}\n\n.#{$simple-line-icon-prefix}social-stumbleupon:before {\n  content: \"\\e614\";\n}\n\n.#{$simple-line-icon-prefix}social-youtube:before {\n  content: \"\\e008\";\n}\n\n.#{$simple-line-icon-prefix}social-dropbox:before {\n  content: \"\\e00c\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/themify-icons/ie7/ie7.css",
    "content": ".ti-wand {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe600;');\n}\n.ti-volume {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe601;');\n}\n.ti-user {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe602;');\n}\n.ti-unlock {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe603;');\n}\n.ti-unlink {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe604;');\n}\n.ti-trash {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe605;');\n}\n.ti-thought {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe606;');\n}\n.ti-target {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe607;');\n}\n.ti-tag {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe608;');\n}\n.ti-tablet {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe609;');\n}\n.ti-star {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60a;');\n}\n.ti-spray {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60b;');\n}\n.ti-signal {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60c;');\n}\n.ti-shopping-cart {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60d;');\n}\n.ti-shopping-cart-full {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60e;');\n}\n.ti-settings {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe60f;');\n}\n.ti-search {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe610;');\n}\n.ti-zoom-in {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe611;');\n}\n.ti-zoom-out {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe612;');\n}\n.ti-cut {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe613;');\n}\n.ti-ruler {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe614;');\n}\n.ti-ruler-pencil {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe615;');\n}\n.ti-ruler-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe616;');\n}\n.ti-bookmark {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe617;');\n}\n.ti-bookmark-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe618;');\n}\n.ti-reload {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe619;');\n}\n.ti-plus {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61a;');\n}\n.ti-pin {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61b;');\n}\n.ti-pencil {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61c;');\n}\n.ti-pencil-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61d;');\n}\n.ti-paint-roller {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61e;');\n}\n.ti-paint-bucket {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe61f;');\n}\n.ti-na {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe620;');\n}\n.ti-mobile {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe621;');\n}\n.ti-minus {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe622;');\n}\n.ti-medall {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe623;');\n}\n.ti-medall-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe624;');\n}\n.ti-marker {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe625;');\n}\n.ti-marker-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe626;');\n}\n.ti-arrow-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe627;');\n}\n.ti-arrow-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe628;');\n}\n.ti-arrow-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe629;');\n}\n.ti-arrow-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62a;');\n}\n.ti-lock {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62b;');\n}\n.ti-location-arrow {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62c;');\n}\n.ti-link {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62d;');\n}\n.ti-layout {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62e;');\n}\n.ti-layers {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe62f;');\n}\n.ti-layers-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe630;');\n}\n.ti-key {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe631;');\n}\n.ti-import {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe632;');\n}\n.ti-image {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe633;');\n}\n.ti-heart {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe634;');\n}\n.ti-heart-broken {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe635;');\n}\n.ti-hand-stop {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe636;');\n}\n.ti-hand-open {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe637;');\n}\n.ti-hand-drag {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe638;');\n}\n.ti-folder {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe639;');\n}\n.ti-flag {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63a;');\n}\n.ti-flag-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63b;');\n}\n.ti-flag-alt-2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63c;');\n}\n.ti-eye {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63d;');\n}\n.ti-export {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63e;');\n}\n.ti-exchange-vertical {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe63f;');\n}\n.ti-desktop {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe640;');\n}\n.ti-cup {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe641;');\n}\n.ti-crown {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe642;');\n}\n.ti-comments {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe643;');\n}\n.ti-comment {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe644;');\n}\n.ti-comment-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe645;');\n}\n.ti-close {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe646;');\n}\n.ti-clip {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe647;');\n}\n.ti-angle-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe648;');\n}\n.ti-angle-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe649;');\n}\n.ti-angle-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64a;');\n}\n.ti-angle-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64b;');\n}\n.ti-check {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64c;');\n}\n.ti-check-box {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64d;');\n}\n.ti-camera {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64e;');\n}\n.ti-announcement {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe64f;');\n}\n.ti-brush {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe650;');\n}\n.ti-briefcase {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe651;');\n}\n.ti-bolt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe652;');\n}\n.ti-bolt-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe653;');\n}\n.ti-blackboard {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe654;');\n}\n.ti-bag {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe655;');\n}\n.ti-move {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe656;');\n}\n.ti-arrows-vertical {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe657;');\n}\n.ti-arrows-horizontal {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe658;');\n}\n.ti-fullscreen {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe659;');\n}\n.ti-arrow-top-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65a;');\n}\n.ti-arrow-top-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65b;');\n}\n.ti-arrow-circle-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65c;');\n}\n.ti-arrow-circle-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65d;');\n}\n.ti-arrow-circle-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65e;');\n}\n.ti-arrow-circle-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe65f;');\n}\n.ti-angle-double-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe660;');\n}\n.ti-angle-double-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe661;');\n}\n.ti-angle-double-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe662;');\n}\n.ti-angle-double-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe663;');\n}\n.ti-zip {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe664;');\n}\n.ti-world {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe665;');\n}\n.ti-wheelchair {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe666;');\n}\n.ti-view-list {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe667;');\n}\n.ti-view-list-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe668;');\n}\n.ti-view-grid {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe669;');\n}\n.ti-uppercase {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66a;');\n}\n.ti-upload {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66b;');\n}\n.ti-underline {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66c;');\n}\n.ti-truck {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66d;');\n}\n.ti-timer {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66e;');\n}\n.ti-ticket {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe66f;');\n}\n.ti-thumb-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe670;');\n}\n.ti-thumb-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe671;');\n}\n.ti-text {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe672;');\n}\n.ti-stats-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe673;');\n}\n.ti-stats-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe674;');\n}\n.ti-split-v {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe675;');\n}\n.ti-split-h {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe676;');\n}\n.ti-smallcap {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe677;');\n}\n.ti-shine {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe678;');\n}\n.ti-shift-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe679;');\n}\n.ti-shift-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67a;');\n}\n.ti-shield {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67b;');\n}\n.ti-notepad {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67c;');\n}\n.ti-server {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67d;');\n}\n.ti-quote-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67e;');\n}\n.ti-quote-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe67f;');\n}\n.ti-pulse {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe680;');\n}\n.ti-printer {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe681;');\n}\n.ti-power-off {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe682;');\n}\n.ti-plug {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe683;');\n}\n.ti-pie-chart {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe684;');\n}\n.ti-paragraph {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe685;');\n}\n.ti-panel {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe686;');\n}\n.ti-package {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe687;');\n}\n.ti-music {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe688;');\n}\n.ti-music-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe689;');\n}\n.ti-mouse {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68a;');\n}\n.ti-mouse-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68b;');\n}\n.ti-money {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68c;');\n}\n.ti-microphone {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68d;');\n}\n.ti-menu {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68e;');\n}\n.ti-menu-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe68f;');\n}\n.ti-map {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe690;');\n}\n.ti-map-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe691;');\n}\n.ti-loop {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe692;');\n}\n.ti-location-pin {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe693;');\n}\n.ti-list {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe694;');\n}\n.ti-light-bulb {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe695;');\n}\n.ti-Italic {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe696;');\n}\n.ti-info {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe697;');\n}\n.ti-infinite {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe698;');\n}\n.ti-id-badge {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe699;');\n}\n.ti-hummer {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69a;');\n}\n.ti-home {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69b;');\n}\n.ti-help {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69c;');\n}\n.ti-headphone {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69d;');\n}\n.ti-harddrives {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69e;');\n}\n.ti-harddrive {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe69f;');\n}\n.ti-gift {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a0;');\n}\n.ti-game {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a1;');\n}\n.ti-filter {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a2;');\n}\n.ti-files {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a3;');\n}\n.ti-file {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a4;');\n}\n.ti-eraser {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a5;');\n}\n.ti-envelope {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a6;');\n}\n.ti-download {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a7;');\n}\n.ti-direction {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a8;');\n}\n.ti-direction-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6a9;');\n}\n.ti-dashboard {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6aa;');\n}\n.ti-control-stop {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ab;');\n}\n.ti-control-shuffle {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ac;');\n}\n.ti-control-play {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ad;');\n}\n.ti-control-pause {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ae;');\n}\n.ti-control-forward {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6af;');\n}\n.ti-control-backward {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b0;');\n}\n.ti-cloud {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b1;');\n}\n.ti-cloud-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b2;');\n}\n.ti-cloud-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b3;');\n}\n.ti-clipboard {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b4;');\n}\n.ti-car {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b5;');\n}\n.ti-calendar {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b6;');\n}\n.ti-book {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b7;');\n}\n.ti-bell {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b8;');\n}\n.ti-basketball {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6b9;');\n}\n.ti-bar-chart {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ba;');\n}\n.ti-bar-chart-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6bb;');\n}\n.ti-back-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6bc;');\n}\n.ti-back-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6bd;');\n}\n.ti-arrows-corner {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6be;');\n}\n.ti-archive {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6bf;');\n}\n.ti-anchor {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c0;');\n}\n.ti-align-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c1;');\n}\n.ti-align-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c2;');\n}\n.ti-align-justify {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c3;');\n}\n.ti-align-center {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c4;');\n}\n.ti-alert {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c5;');\n}\n.ti-alarm-clock {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c6;');\n}\n.ti-agenda {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c7;');\n}\n.ti-write {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c8;');\n}\n.ti-window {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6c9;');\n}\n.ti-widgetized {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ca;');\n}\n.ti-widget {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6cb;');\n}\n.ti-widget-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6cc;');\n}\n.ti-wallet {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6cd;');\n}\n.ti-video-clapper {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ce;');\n}\n.ti-video-camera {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6cf;');\n}\n.ti-vector {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d0;');\n}\n.ti-themify-logo {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d1;');\n}\n.ti-themify-favicon {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d2;');\n}\n.ti-themify-favicon-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d3;');\n}\n.ti-support {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d4;');\n}\n.ti-stamp {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d5;');\n}\n.ti-split-v-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d6;');\n}\n.ti-slice {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d7;');\n}\n.ti-shortcode {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d8;');\n}\n.ti-shift-right-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6d9;');\n}\n.ti-shift-left-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6da;');\n}\n.ti-ruler-alt-2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6db;');\n}\n.ti-receipt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6dc;');\n}\n.ti-pin2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6dd;');\n}\n.ti-pin-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6de;');\n}\n.ti-pencil-alt2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6df;');\n}\n.ti-palette {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e0;');\n}\n.ti-more {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e1;');\n}\n.ti-more-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e2;');\n}\n.ti-microphone-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e3;');\n}\n.ti-magnet {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e4;');\n}\n.ti-line-double {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e5;');\n}\n.ti-line-dotted {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e6;');\n}\n.ti-line-dashed {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e7;');\n}\n.ti-layout-width-full {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e8;');\n}\n.ti-layout-width-default {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6e9;');\n}\n.ti-layout-width-default-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ea;');\n}\n.ti-layout-tab {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6eb;');\n}\n.ti-layout-tab-window {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ec;');\n}\n.ti-layout-tab-v {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ed;');\n}\n.ti-layout-tab-min {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ee;');\n}\n.ti-layout-slider {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ef;');\n}\n.ti-layout-slider-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f0;');\n}\n.ti-layout-sidebar-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f1;');\n}\n.ti-layout-sidebar-none {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f2;');\n}\n.ti-layout-sidebar-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f3;');\n}\n.ti-layout-placeholder {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f4;');\n}\n.ti-layout-menu {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f5;');\n}\n.ti-layout-menu-v {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f6;');\n}\n.ti-layout-menu-separated {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f7;');\n}\n.ti-layout-menu-full {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f8;');\n}\n.ti-layout-media-right-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6f9;');\n}\n.ti-layout-media-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6fa;');\n}\n.ti-layout-media-overlay {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6fb;');\n}\n.ti-layout-media-overlay-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6fc;');\n}\n.ti-layout-media-overlay-alt-2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6fd;');\n}\n.ti-layout-media-left-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6fe;');\n}\n.ti-layout-media-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe6ff;');\n}\n.ti-layout-media-center-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe700;');\n}\n.ti-layout-media-center {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe701;');\n}\n.ti-layout-list-thumb {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe702;');\n}\n.ti-layout-list-thumb-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe703;');\n}\n.ti-layout-list-post {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe704;');\n}\n.ti-layout-list-large-image {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe705;');\n}\n.ti-layout-line-solid {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe706;');\n}\n.ti-layout-grid4 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe707;');\n}\n.ti-layout-grid3 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe708;');\n}\n.ti-layout-grid2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe709;');\n}\n.ti-layout-grid2-thumb {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70a;');\n}\n.ti-layout-cta-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70b;');\n}\n.ti-layout-cta-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70c;');\n}\n.ti-layout-cta-center {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70d;');\n}\n.ti-layout-cta-btn-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70e;');\n}\n.ti-layout-cta-btn-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70f;');\n}\n.ti-layout-column4 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe710;');\n}\n.ti-layout-column3 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe711;');\n}\n.ti-layout-column2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe712;');\n}\n.ti-layout-accordion-separated {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe713;');\n}\n.ti-layout-accordion-merged {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe714;');\n}\n.ti-layout-accordion-list {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe715;');\n}\n.ti-ink-pen {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe716;');\n}\n.ti-info-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe717;');\n}\n.ti-help-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe718;');\n}\n.ti-headphone-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe719;');\n}\n.ti-hand-point-up {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71a;');\n}\n.ti-hand-point-right {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71b;');\n}\n.ti-hand-point-left {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71c;');\n}\n.ti-hand-point-down {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71d;');\n}\n.ti-gallery {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71e;');\n}\n.ti-face-smile {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe71f;');\n}\n.ti-face-sad {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe720;');\n}\n.ti-credit-card {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe721;');\n}\n.ti-control-skip-forward {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe722;');\n}\n.ti-control-skip-backward {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe723;');\n}\n.ti-control-record {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe724;');\n}\n.ti-control-eject {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe725;');\n}\n.ti-comments-smiley {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe726;');\n}\n.ti-brush-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe727;');\n}\n.ti-youtube {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe728;');\n}\n.ti-vimeo {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe729;');\n}\n.ti-twitter {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72a;');\n}\n.ti-time {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72b;');\n}\n.ti-tumblr {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72c;');\n}\n.ti-skype {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72d;');\n}\n.ti-share {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72e;');\n}\n.ti-share-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe72f;');\n}\n.ti-rocket {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe730;');\n}\n.ti-pinterest {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe731;');\n}\n.ti-new-window {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe732;');\n}\n.ti-microsoft {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe733;');\n}\n.ti-list-ol {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe734;');\n}\n.ti-linkedin {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe735;');\n}\n.ti-layout-sidebar-2 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe736;');\n}\n.ti-layout-grid4-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe737;');\n}\n.ti-layout-grid3-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe738;');\n}\n.ti-layout-grid2-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe739;');\n}\n.ti-layout-column4-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73a;');\n}\n.ti-layout-column3-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73b;');\n}\n.ti-layout-column2-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73c;');\n}\n.ti-instagram {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73d;');\n}\n.ti-google {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73e;');\n}\n.ti-github {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73f;');\n}\n.ti-flickr {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe740;');\n}\n.ti-facebook {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe741;');\n}\n.ti-dropbox {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe742;');\n}\n.ti-dribbble {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe743;');\n}\n.ti-apple {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe744;');\n}\n.ti-android {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe745;');\n}\n.ti-save {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe746;');\n}\n.ti-save-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe747;');\n}\n.ti-yahoo {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe748;');\n}\n.ti-wordpress {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe749;');\n}\n.ti-vimeo-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74a;');\n}\n.ti-twitter-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74b;');\n}\n.ti-tumblr-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74c;');\n}\n.ti-trello {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74d;');\n}\n.ti-stack-overflow {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74e;');\n}\n.ti-soundcloud {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe74f;');\n}\n.ti-sharethis {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe750;');\n}\n.ti-sharethis-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe751;');\n}\n.ti-reddit {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe752;');\n}\n.ti-pinterest-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe753;');\n}\n.ti-microsoft-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe754;');\n}\n.ti-linux {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe755;');\n}\n.ti-jsfiddle {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe756;');\n}\n.ti-joomla {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe757;');\n}\n.ti-html5 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe758;');\n}\n.ti-flickr-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe759;');\n}\n.ti-email {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75a;');\n}\n.ti-drupal {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75b;');\n}\n.ti-dropbox-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75c;');\n}\n.ti-css3 {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75d;');\n}\n.ti-rss {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75e;');\n}\n.ti-rss-alt {\n\t*zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe75f;');\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/themify-icons/ie7/ie7.js",
    "content": "/* To avoid CSS expressions while still supporting IE 7 and IE 6, use this script */\n/* The script tag referring to this file must be placed before the ending body tag. */\n\n/* Use conditional comments in order to target IE 7 and older:\n\t<!--[if lt IE 8]><!-->\n\t<script src=\"ie7/ie7.js\"></script>\n\t<!--<![endif]-->\n*/\n\n(function() {\n\tfunction addIcon(el, entity) {\n\t\tvar html = el.innerHTML;\n\t\tel.innerHTML = '<span style=\"font-family: \\'themify\\'\">' + entity + '</span>' + html;\n\t}\n\tvar icons = {\n\t\t'ti-wand': '&#xe600;',\n\t\t'ti-volume': '&#xe601;',\n\t\t'ti-user': '&#xe602;',\n\t\t'ti-unlock': '&#xe603;',\n\t\t'ti-unlink': '&#xe604;',\n\t\t'ti-trash': '&#xe605;',\n\t\t'ti-thought': '&#xe606;',\n\t\t'ti-target': '&#xe607;',\n\t\t'ti-tag': '&#xe608;',\n\t\t'ti-tablet': '&#xe609;',\n\t\t'ti-star': '&#xe60a;',\n\t\t'ti-spray': '&#xe60b;',\n\t\t'ti-signal': '&#xe60c;',\n\t\t'ti-shopping-cart': '&#xe60d;',\n\t\t'ti-shopping-cart-full': '&#xe60e;',\n\t\t'ti-settings': '&#xe60f;',\n\t\t'ti-search': '&#xe610;',\n\t\t'ti-zoom-in': '&#xe611;',\n\t\t'ti-zoom-out': '&#xe612;',\n\t\t'ti-cut': '&#xe613;',\n\t\t'ti-ruler': '&#xe614;',\n\t\t'ti-ruler-pencil': '&#xe615;',\n\t\t'ti-ruler-alt': '&#xe616;',\n\t\t'ti-bookmark': '&#xe617;',\n\t\t'ti-bookmark-alt': '&#xe618;',\n\t\t'ti-reload': '&#xe619;',\n\t\t'ti-plus': '&#xe61a;',\n\t\t'ti-pin': '&#xe61b;',\n\t\t'ti-pencil': '&#xe61c;',\n\t\t'ti-pencil-alt': '&#xe61d;',\n\t\t'ti-paint-roller': '&#xe61e;',\n\t\t'ti-paint-bucket': '&#xe61f;',\n\t\t'ti-na': '&#xe620;',\n\t\t'ti-mobile': '&#xe621;',\n\t\t'ti-minus': '&#xe622;',\n\t\t'ti-medall': '&#xe623;',\n\t\t'ti-medall-alt': '&#xe624;',\n\t\t'ti-marker': '&#xe625;',\n\t\t'ti-marker-alt': '&#xe626;',\n\t\t'ti-arrow-up': '&#xe627;',\n\t\t'ti-arrow-right': '&#xe628;',\n\t\t'ti-arrow-left': '&#xe629;',\n\t\t'ti-arrow-down': '&#xe62a;',\n\t\t'ti-lock': '&#xe62b;',\n\t\t'ti-location-arrow': '&#xe62c;',\n\t\t'ti-link': '&#xe62d;',\n\t\t'ti-layout': '&#xe62e;',\n\t\t'ti-layers': '&#xe62f;',\n\t\t'ti-layers-alt': '&#xe630;',\n\t\t'ti-key': '&#xe631;',\n\t\t'ti-import': '&#xe632;',\n\t\t'ti-image': '&#xe633;',\n\t\t'ti-heart': '&#xe634;',\n\t\t'ti-heart-broken': '&#xe635;',\n\t\t'ti-hand-stop': '&#xe636;',\n\t\t'ti-hand-open': '&#xe637;',\n\t\t'ti-hand-drag': '&#xe638;',\n\t\t'ti-folder': '&#xe639;',\n\t\t'ti-flag': '&#xe63a;',\n\t\t'ti-flag-alt': '&#xe63b;',\n\t\t'ti-flag-alt-2': '&#xe63c;',\n\t\t'ti-eye': '&#xe63d;',\n\t\t'ti-export': '&#xe63e;',\n\t\t'ti-exchange-vertical': '&#xe63f;',\n\t\t'ti-desktop': '&#xe640;',\n\t\t'ti-cup': '&#xe641;',\n\t\t'ti-crown': '&#xe642;',\n\t\t'ti-comments': '&#xe643;',\n\t\t'ti-comment': '&#xe644;',\n\t\t'ti-comment-alt': '&#xe645;',\n\t\t'ti-close': '&#xe646;',\n\t\t'ti-clip': '&#xe647;',\n\t\t'ti-angle-up': '&#xe648;',\n\t\t'ti-angle-right': '&#xe649;',\n\t\t'ti-angle-left': '&#xe64a;',\n\t\t'ti-angle-down': '&#xe64b;',\n\t\t'ti-check': '&#xe64c;',\n\t\t'ti-check-box': '&#xe64d;',\n\t\t'ti-camera': '&#xe64e;',\n\t\t'ti-announcement': '&#xe64f;',\n\t\t'ti-brush': '&#xe650;',\n\t\t'ti-briefcase': '&#xe651;',\n\t\t'ti-bolt': '&#xe652;',\n\t\t'ti-bolt-alt': '&#xe653;',\n\t\t'ti-blackboard': '&#xe654;',\n\t\t'ti-bag': '&#xe655;',\n\t\t'ti-move': '&#xe656;',\n\t\t'ti-arrows-vertical': '&#xe657;',\n\t\t'ti-arrows-horizontal': '&#xe658;',\n\t\t'ti-fullscreen': '&#xe659;',\n\t\t'ti-arrow-top-right': '&#xe65a;',\n\t\t'ti-arrow-top-left': '&#xe65b;',\n\t\t'ti-arrow-circle-up': '&#xe65c;',\n\t\t'ti-arrow-circle-right': '&#xe65d;',\n\t\t'ti-arrow-circle-left': '&#xe65e;',\n\t\t'ti-arrow-circle-down': '&#xe65f;',\n\t\t'ti-angle-double-up': '&#xe660;',\n\t\t'ti-angle-double-right': '&#xe661;',\n\t\t'ti-angle-double-left': '&#xe662;',\n\t\t'ti-angle-double-down': '&#xe663;',\n\t\t'ti-zip': '&#xe664;',\n\t\t'ti-world': '&#xe665;',\n\t\t'ti-wheelchair': '&#xe666;',\n\t\t'ti-view-list': '&#xe667;',\n\t\t'ti-view-list-alt': '&#xe668;',\n\t\t'ti-view-grid': '&#xe669;',\n\t\t'ti-uppercase': '&#xe66a;',\n\t\t'ti-upload': '&#xe66b;',\n\t\t'ti-underline': '&#xe66c;',\n\t\t'ti-truck': '&#xe66d;',\n\t\t'ti-timer': '&#xe66e;',\n\t\t'ti-ticket': '&#xe66f;',\n\t\t'ti-thumb-up': '&#xe670;',\n\t\t'ti-thumb-down': '&#xe671;',\n\t\t'ti-text': '&#xe672;',\n\t\t'ti-stats-up': '&#xe673;',\n\t\t'ti-stats-down': '&#xe674;',\n\t\t'ti-split-v': '&#xe675;',\n\t\t'ti-split-h': '&#xe676;',\n\t\t'ti-smallcap': '&#xe677;',\n\t\t'ti-shine': '&#xe678;',\n\t\t'ti-shift-right': '&#xe679;',\n\t\t'ti-shift-left': '&#xe67a;',\n\t\t'ti-shield': '&#xe67b;',\n\t\t'ti-notepad': '&#xe67c;',\n\t\t'ti-server': '&#xe67d;',\n\t\t'ti-quote-right': '&#xe67e;',\n\t\t'ti-quote-left': '&#xe67f;',\n\t\t'ti-pulse': '&#xe680;',\n\t\t'ti-printer': '&#xe681;',\n\t\t'ti-power-off': '&#xe682;',\n\t\t'ti-plug': '&#xe683;',\n\t\t'ti-pie-chart': '&#xe684;',\n\t\t'ti-paragraph': '&#xe685;',\n\t\t'ti-panel': '&#xe686;',\n\t\t'ti-package': '&#xe687;',\n\t\t'ti-music': '&#xe688;',\n\t\t'ti-music-alt': '&#xe689;',\n\t\t'ti-mouse': '&#xe68a;',\n\t\t'ti-mouse-alt': '&#xe68b;',\n\t\t'ti-money': '&#xe68c;',\n\t\t'ti-microphone': '&#xe68d;',\n\t\t'ti-menu': '&#xe68e;',\n\t\t'ti-menu-alt': '&#xe68f;',\n\t\t'ti-map': '&#xe690;',\n\t\t'ti-map-alt': '&#xe691;',\n\t\t'ti-loop': '&#xe692;',\n\t\t'ti-location-pin': '&#xe693;',\n\t\t'ti-list': '&#xe694;',\n\t\t'ti-light-bulb': '&#xe695;',\n\t\t'ti-Italic': '&#xe696;',\n\t\t'ti-info': '&#xe697;',\n\t\t'ti-infinite': '&#xe698;',\n\t\t'ti-id-badge': '&#xe699;',\n\t\t'ti-hummer': '&#xe69a;',\n\t\t'ti-home': '&#xe69b;',\n\t\t'ti-help': '&#xe69c;',\n\t\t'ti-headphone': '&#xe69d;',\n\t\t'ti-harddrives': '&#xe69e;',\n\t\t'ti-harddrive': '&#xe69f;',\n\t\t'ti-gift': '&#xe6a0;',\n\t\t'ti-game': '&#xe6a1;',\n\t\t'ti-filter': '&#xe6a2;',\n\t\t'ti-files': '&#xe6a3;',\n\t\t'ti-file': '&#xe6a4;',\n\t\t'ti-eraser': '&#xe6a5;',\n\t\t'ti-envelope': '&#xe6a6;',\n\t\t'ti-download': '&#xe6a7;',\n\t\t'ti-direction': '&#xe6a8;',\n\t\t'ti-direction-alt': '&#xe6a9;',\n\t\t'ti-dashboard': '&#xe6aa;',\n\t\t'ti-control-stop': '&#xe6ab;',\n\t\t'ti-control-shuffle': '&#xe6ac;',\n\t\t'ti-control-play': '&#xe6ad;',\n\t\t'ti-control-pause': '&#xe6ae;',\n\t\t'ti-control-forward': '&#xe6af;',\n\t\t'ti-control-backward': '&#xe6b0;',\n\t\t'ti-cloud': '&#xe6b1;',\n\t\t'ti-cloud-up': '&#xe6b2;',\n\t\t'ti-cloud-down': '&#xe6b3;',\n\t\t'ti-clipboard': '&#xe6b4;',\n\t\t'ti-car': '&#xe6b5;',\n\t\t'ti-calendar': '&#xe6b6;',\n\t\t'ti-book': '&#xe6b7;',\n\t\t'ti-bell': '&#xe6b8;',\n\t\t'ti-basketball': '&#xe6b9;',\n\t\t'ti-bar-chart': '&#xe6ba;',\n\t\t'ti-bar-chart-alt': '&#xe6bb;',\n\t\t'ti-back-right': '&#xe6bc;',\n\t\t'ti-back-left': '&#xe6bd;',\n\t\t'ti-arrows-corner': '&#xe6be;',\n\t\t'ti-archive': '&#xe6bf;',\n\t\t'ti-anchor': '&#xe6c0;',\n\t\t'ti-align-right': '&#xe6c1;',\n\t\t'ti-align-left': '&#xe6c2;',\n\t\t'ti-align-justify': '&#xe6c3;',\n\t\t'ti-align-center': '&#xe6c4;',\n\t\t'ti-alert': '&#xe6c5;',\n\t\t'ti-alarm-clock': '&#xe6c6;',\n\t\t'ti-agenda': '&#xe6c7;',\n\t\t'ti-write': '&#xe6c8;',\n\t\t'ti-window': '&#xe6c9;',\n\t\t'ti-widgetized': '&#xe6ca;',\n\t\t'ti-widget': '&#xe6cb;',\n\t\t'ti-widget-alt': '&#xe6cc;',\n\t\t'ti-wallet': '&#xe6cd;',\n\t\t'ti-video-clapper': '&#xe6ce;',\n\t\t'ti-video-camera': '&#xe6cf;',\n\t\t'ti-vector': '&#xe6d0;',\n\t\t'ti-themify-logo': '&#xe6d1;',\n\t\t'ti-themify-favicon': '&#xe6d2;',\n\t\t'ti-themify-favicon-alt': '&#xe6d3;',\n\t\t'ti-support': '&#xe6d4;',\n\t\t'ti-stamp': '&#xe6d5;',\n\t\t'ti-split-v-alt': '&#xe6d6;',\n\t\t'ti-slice': '&#xe6d7;',\n\t\t'ti-shortcode': '&#xe6d8;',\n\t\t'ti-shift-right-alt': '&#xe6d9;',\n\t\t'ti-shift-left-alt': '&#xe6da;',\n\t\t'ti-ruler-alt-2': '&#xe6db;',\n\t\t'ti-receipt': '&#xe6dc;',\n\t\t'ti-pin2': '&#xe6dd;',\n\t\t'ti-pin-alt': '&#xe6de;',\n\t\t'ti-pencil-alt2': '&#xe6df;',\n\t\t'ti-palette': '&#xe6e0;',\n\t\t'ti-more': '&#xe6e1;',\n\t\t'ti-more-alt': '&#xe6e2;',\n\t\t'ti-microphone-alt': '&#xe6e3;',\n\t\t'ti-magnet': '&#xe6e4;',\n\t\t'ti-line-double': '&#xe6e5;',\n\t\t'ti-line-dotted': '&#xe6e6;',\n\t\t'ti-line-dashed': '&#xe6e7;',\n\t\t'ti-layout-width-full': '&#xe6e8;',\n\t\t'ti-layout-width-default': '&#xe6e9;',\n\t\t'ti-layout-width-default-alt': '&#xe6ea;',\n\t\t'ti-layout-tab': '&#xe6eb;',\n\t\t'ti-layout-tab-window': '&#xe6ec;',\n\t\t'ti-layout-tab-v': '&#xe6ed;',\n\t\t'ti-layout-tab-min': '&#xe6ee;',\n\t\t'ti-layout-slider': '&#xe6ef;',\n\t\t'ti-layout-slider-alt': '&#xe6f0;',\n\t\t'ti-layout-sidebar-right': '&#xe6f1;',\n\t\t'ti-layout-sidebar-none': '&#xe6f2;',\n\t\t'ti-layout-sidebar-left': '&#xe6f3;',\n\t\t'ti-layout-placeholder': '&#xe6f4;',\n\t\t'ti-layout-menu': '&#xe6f5;',\n\t\t'ti-layout-menu-v': '&#xe6f6;',\n\t\t'ti-layout-menu-separated': '&#xe6f7;',\n\t\t'ti-layout-menu-full': '&#xe6f8;',\n\t\t'ti-layout-media-right-alt': '&#xe6f9;',\n\t\t'ti-layout-media-right': '&#xe6fa;',\n\t\t'ti-layout-media-overlay': '&#xe6fb;',\n\t\t'ti-layout-media-overlay-alt': '&#xe6fc;',\n\t\t'ti-layout-media-overlay-alt-2': '&#xe6fd;',\n\t\t'ti-layout-media-left-alt': '&#xe6fe;',\n\t\t'ti-layout-media-left': '&#xe6ff;',\n\t\t'ti-layout-media-center-alt': '&#xe700;',\n\t\t'ti-layout-media-center': '&#xe701;',\n\t\t'ti-layout-list-thumb': '&#xe702;',\n\t\t'ti-layout-list-thumb-alt': '&#xe703;',\n\t\t'ti-layout-list-post': '&#xe704;',\n\t\t'ti-layout-list-large-image': '&#xe705;',\n\t\t'ti-layout-line-solid': '&#xe706;',\n\t\t'ti-layout-grid4': '&#xe707;',\n\t\t'ti-layout-grid3': '&#xe708;',\n\t\t'ti-layout-grid2': '&#xe709;',\n\t\t'ti-layout-grid2-thumb': '&#xe70a;',\n\t\t'ti-layout-cta-right': '&#xe70b;',\n\t\t'ti-layout-cta-left': '&#xe70c;',\n\t\t'ti-layout-cta-center': '&#xe70d;',\n\t\t'ti-layout-cta-btn-right': '&#xe70e;',\n\t\t'ti-layout-cta-btn-left': '&#xe70f;',\n\t\t'ti-layout-column4': '&#xe710;',\n\t\t'ti-layout-column3': '&#xe711;',\n\t\t'ti-layout-column2': '&#xe712;',\n\t\t'ti-layout-accordion-separated': '&#xe713;',\n\t\t'ti-layout-accordion-merged': '&#xe714;',\n\t\t'ti-layout-accordion-list': '&#xe715;',\n\t\t'ti-ink-pen': '&#xe716;',\n\t\t'ti-info-alt': '&#xe717;',\n\t\t'ti-help-alt': '&#xe718;',\n\t\t'ti-headphone-alt': '&#xe719;',\n\t\t'ti-hand-point-up': '&#xe71a;',\n\t\t'ti-hand-point-right': '&#xe71b;',\n\t\t'ti-hand-point-left': '&#xe71c;',\n\t\t'ti-hand-point-down': '&#xe71d;',\n\t\t'ti-gallery': '&#xe71e;',\n\t\t'ti-face-smile': '&#xe71f;',\n\t\t'ti-face-sad': '&#xe720;',\n\t\t'ti-credit-card': '&#xe721;',\n\t\t'ti-control-skip-forward': '&#xe722;',\n\t\t'ti-control-skip-backward': '&#xe723;',\n\t\t'ti-control-record': '&#xe724;',\n\t\t'ti-control-eject': '&#xe725;',\n\t\t'ti-comments-smiley': '&#xe726;',\n\t\t'ti-brush-alt': '&#xe727;',\n\t\t'ti-youtube': '&#xe728;',\n\t\t'ti-vimeo': '&#xe729;',\n\t\t'ti-twitter': '&#xe72a;',\n\t\t'ti-time': '&#xe72b;',\n\t\t'ti-tumblr': '&#xe72c;',\n\t\t'ti-skype': '&#xe72d;',\n\t\t'ti-share': '&#xe72e;',\n\t\t'ti-share-alt': '&#xe72f;',\n\t\t'ti-rocket': '&#xe730;',\n\t\t'ti-pinterest': '&#xe731;',\n\t\t'ti-new-window': '&#xe732;',\n\t\t'ti-microsoft': '&#xe733;',\n\t\t'ti-list-ol': '&#xe734;',\n\t\t'ti-linkedin': '&#xe735;',\n\t\t'ti-layout-sidebar-2': '&#xe736;',\n\t\t'ti-layout-grid4-alt': '&#xe737;',\n\t\t'ti-layout-grid3-alt': '&#xe738;',\n\t\t'ti-layout-grid2-alt': '&#xe739;',\n\t\t'ti-layout-column4-alt': '&#xe73a;',\n\t\t'ti-layout-column3-alt': '&#xe73b;',\n\t\t'ti-layout-column2-alt': '&#xe73c;',\n\t\t'ti-instagram': '&#xe73d;',\n\t\t'ti-google': '&#xe73e;',\n\t\t'ti-github': '&#xe73f;',\n\t\t'ti-flickr': '&#xe740;',\n\t\t'ti-facebook': '&#xe741;',\n\t\t'ti-dropbox': '&#xe742;',\n\t\t'ti-dribbble': '&#xe743;',\n\t\t'ti-apple': '&#xe744;',\n\t\t'ti-android': '&#xe745;',\n\t\t'ti-save': '&#xe746;',\n\t\t'ti-save-alt': '&#xe747;',\n\t\t'ti-yahoo': '&#xe748;',\n\t\t'ti-wordpress': '&#xe749;',\n\t\t'ti-vimeo-alt': '&#xe74a;',\n\t\t'ti-twitter-alt': '&#xe74b;',\n\t\t'ti-tumblr-alt': '&#xe74c;',\n\t\t'ti-trello': '&#xe74d;',\n\t\t'ti-stack-overflow': '&#xe74e;',\n\t\t'ti-soundcloud': '&#xe74f;',\n\t\t'ti-sharethis': '&#xe750;',\n\t\t'ti-sharethis-alt': '&#xe751;',\n\t\t'ti-reddit': '&#xe752;',\n\t\t'ti-pinterest-alt': '&#xe753;',\n\t\t'ti-microsoft-alt': '&#xe754;',\n\t\t'ti-linux': '&#xe755;',\n\t\t'ti-jsfiddle': '&#xe756;',\n\t\t'ti-joomla': '&#xe757;',\n\t\t'ti-html5': '&#xe758;',\n\t\t'ti-flickr-alt': '&#xe759;',\n\t\t'ti-email': '&#xe75a;',\n\t\t'ti-drupal': '&#xe75b;',\n\t\t'ti-dropbox-alt': '&#xe75c;',\n\t\t'ti-css3': '&#xe75d;',\n\t\t'ti-rss': '&#xe75e;',\n\t\t'ti-rss-alt': '&#xe75f;',\n\t\t'0': 0\n\t\t},\n\t\tels = document.getElementsByTagName('*'),\n\t\ti, c, el;\n\tfor (i = 0; ; i += 1) {\n\t\tel = els[i];\n\t\tif(!el) {\n\t\t\tbreak;\n\t\t}\n\t\tc = el.className;\n\t\tc = c.match(/ti-[^\\s'\"]+/);\n\t\tif (c && icons[c[0]]) {\n\t\t\taddIcon(el, icons[c[0]]);\n\t\t}\n\t}\n}());\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/themify-icons/themify-icons.css",
    "content": "@font-face {\n\tfont-family: 'themify';\n\tsrc:url('fonts/themify.eot?-fvbane');\n\tsrc:url('fonts/themify.eot?#iefix-fvbane') format('embedded-opentype'),\n\t\turl('fonts/themify.woff?-fvbane') format('woff'),\n\t\turl('fonts/themify.ttf?-fvbane') format('truetype'),\n\t\turl('fonts/themify.svg?-fvbane#themify') format('svg');\n\tfont-weight: normal;\n\tfont-style: normal;\n}\n\n[class^=\"ti-\"], [class*=\" ti-\"] {\n\tfont-family: 'themify';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\n\t/* Better Font Rendering =========== */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.ti-wand:before {\n\tcontent: \"\\e600\";\n}\n.ti-volume:before {\n\tcontent: \"\\e601\";\n}\n.ti-user:before {\n\tcontent: \"\\e602\";\n}\n.ti-unlock:before {\n\tcontent: \"\\e603\";\n}\n.ti-unlink:before {\n\tcontent: \"\\e604\";\n}\n.ti-trash:before {\n\tcontent: \"\\e605\";\n}\n.ti-thought:before {\n\tcontent: \"\\e606\";\n}\n.ti-target:before {\n\tcontent: \"\\e607\";\n}\n.ti-tag:before {\n\tcontent: \"\\e608\";\n}\n.ti-tablet:before {\n\tcontent: \"\\e609\";\n}\n.ti-star:before {\n\tcontent: \"\\e60a\";\n}\n.ti-spray:before {\n\tcontent: \"\\e60b\";\n}\n.ti-signal:before {\n\tcontent: \"\\e60c\";\n}\n.ti-shopping-cart:before {\n\tcontent: \"\\e60d\";\n}\n.ti-shopping-cart-full:before {\n\tcontent: \"\\e60e\";\n}\n.ti-settings:before {\n\tcontent: \"\\e60f\";\n}\n.ti-search:before {\n\tcontent: \"\\e610\";\n}\n.ti-zoom-in:before {\n\tcontent: \"\\e611\";\n}\n.ti-zoom-out:before {\n\tcontent: \"\\e612\";\n}\n.ti-cut:before {\n\tcontent: \"\\e613\";\n}\n.ti-ruler:before {\n\tcontent: \"\\e614\";\n}\n.ti-ruler-pencil:before {\n\tcontent: \"\\e615\";\n}\n.ti-ruler-alt:before {\n\tcontent: \"\\e616\";\n}\n.ti-bookmark:before {\n\tcontent: \"\\e617\";\n}\n.ti-bookmark-alt:before {\n\tcontent: \"\\e618\";\n}\n.ti-reload:before {\n\tcontent: \"\\e619\";\n}\n.ti-plus:before {\n\tcontent: \"\\e61a\";\n}\n.ti-pin:before {\n\tcontent: \"\\e61b\";\n}\n.ti-pencil:before {\n\tcontent: \"\\e61c\";\n}\n.ti-pencil-alt:before {\n\tcontent: \"\\e61d\";\n}\n.ti-paint-roller:before {\n\tcontent: \"\\e61e\";\n}\n.ti-paint-bucket:before {\n\tcontent: \"\\e61f\";\n}\n.ti-na:before {\n\tcontent: \"\\e620\";\n}\n.ti-mobile:before {\n\tcontent: \"\\e621\";\n}\n.ti-minus:before {\n\tcontent: \"\\e622\";\n}\n.ti-medall:before {\n\tcontent: \"\\e623\";\n}\n.ti-medall-alt:before {\n\tcontent: \"\\e624\";\n}\n.ti-marker:before {\n\tcontent: \"\\e625\";\n}\n.ti-marker-alt:before {\n\tcontent: \"\\e626\";\n}\n.ti-arrow-up:before {\n\tcontent: \"\\e627\";\n}\n.ti-arrow-right:before {\n\tcontent: \"\\e628\";\n}\n.ti-arrow-left:before {\n\tcontent: \"\\e629\";\n}\n.ti-arrow-down:before {\n\tcontent: \"\\e62a\";\n}\n.ti-lock:before {\n\tcontent: \"\\e62b\";\n}\n.ti-location-arrow:before {\n\tcontent: \"\\e62c\";\n}\n.ti-link:before {\n\tcontent: \"\\e62d\";\n}\n.ti-layout:before {\n\tcontent: \"\\e62e\";\n}\n.ti-layers:before {\n\tcontent: \"\\e62f\";\n}\n.ti-layers-alt:before {\n\tcontent: \"\\e630\";\n}\n.ti-key:before {\n\tcontent: \"\\e631\";\n}\n.ti-import:before {\n\tcontent: \"\\e632\";\n}\n.ti-image:before {\n\tcontent: \"\\e633\";\n}\n.ti-heart:before {\n\tcontent: \"\\e634\";\n}\n.ti-heart-broken:before {\n\tcontent: \"\\e635\";\n}\n.ti-hand-stop:before {\n\tcontent: \"\\e636\";\n}\n.ti-hand-open:before {\n\tcontent: \"\\e637\";\n}\n.ti-hand-drag:before {\n\tcontent: \"\\e638\";\n}\n.ti-folder:before {\n\tcontent: \"\\e639\";\n}\n.ti-flag:before {\n\tcontent: \"\\e63a\";\n}\n.ti-flag-alt:before {\n\tcontent: \"\\e63b\";\n}\n.ti-flag-alt-2:before {\n\tcontent: \"\\e63c\";\n}\n.ti-eye:before {\n\tcontent: \"\\e63d\";\n}\n.ti-export:before {\n\tcontent: \"\\e63e\";\n}\n.ti-exchange-vertical:before {\n\tcontent: \"\\e63f\";\n}\n.ti-desktop:before {\n\tcontent: \"\\e640\";\n}\n.ti-cup:before {\n\tcontent: \"\\e641\";\n}\n.ti-crown:before {\n\tcontent: \"\\e642\";\n}\n.ti-comments:before {\n\tcontent: \"\\e643\";\n}\n.ti-comment:before {\n\tcontent: \"\\e644\";\n}\n.ti-comment-alt:before {\n\tcontent: \"\\e645\";\n}\n.ti-close:before {\n\tcontent: \"\\e646\";\n}\n.ti-clip:before {\n\tcontent: \"\\e647\";\n}\n.ti-angle-up:before {\n\tcontent: \"\\e648\";\n}\n.ti-angle-right:before {\n\tcontent: \"\\e649\";\n}\n.ti-angle-left:before {\n\tcontent: \"\\e64a\";\n}\n.ti-angle-down:before {\n\tcontent: \"\\e64b\";\n}\n.ti-check:before {\n\tcontent: \"\\e64c\";\n}\n.ti-check-box:before {\n\tcontent: \"\\e64d\";\n}\n.ti-camera:before {\n\tcontent: \"\\e64e\";\n}\n.ti-announcement:before {\n\tcontent: \"\\e64f\";\n}\n.ti-brush:before {\n\tcontent: \"\\e650\";\n}\n.ti-briefcase:before {\n\tcontent: \"\\e651\";\n}\n.ti-bolt:before {\n\tcontent: \"\\e652\";\n}\n.ti-bolt-alt:before {\n\tcontent: \"\\e653\";\n}\n.ti-blackboard:before {\n\tcontent: \"\\e654\";\n}\n.ti-bag:before {\n\tcontent: \"\\e655\";\n}\n.ti-move:before {\n\tcontent: \"\\e656\";\n}\n.ti-arrows-vertical:before {\n\tcontent: \"\\e657\";\n}\n.ti-arrows-horizontal:before {\n\tcontent: \"\\e658\";\n}\n.ti-fullscreen:before {\n\tcontent: \"\\e659\";\n}\n.ti-arrow-top-right:before {\n\tcontent: \"\\e65a\";\n}\n.ti-arrow-top-left:before {\n\tcontent: \"\\e65b\";\n}\n.ti-arrow-circle-up:before {\n\tcontent: \"\\e65c\";\n}\n.ti-arrow-circle-right:before {\n\tcontent: \"\\e65d\";\n}\n.ti-arrow-circle-left:before {\n\tcontent: \"\\e65e\";\n}\n.ti-arrow-circle-down:before {\n\tcontent: \"\\e65f\";\n}\n.ti-angle-double-up:before {\n\tcontent: \"\\e660\";\n}\n.ti-angle-double-right:before {\n\tcontent: \"\\e661\";\n}\n.ti-angle-double-left:before {\n\tcontent: \"\\e662\";\n}\n.ti-angle-double-down:before {\n\tcontent: \"\\e663\";\n}\n.ti-zip:before {\n\tcontent: \"\\e664\";\n}\n.ti-world:before {\n\tcontent: \"\\e665\";\n}\n.ti-wheelchair:before {\n\tcontent: \"\\e666\";\n}\n.ti-view-list:before {\n\tcontent: \"\\e667\";\n}\n.ti-view-list-alt:before {\n\tcontent: \"\\e668\";\n}\n.ti-view-grid:before {\n\tcontent: \"\\e669\";\n}\n.ti-uppercase:before {\n\tcontent: \"\\e66a\";\n}\n.ti-upload:before {\n\tcontent: \"\\e66b\";\n}\n.ti-underline:before {\n\tcontent: \"\\e66c\";\n}\n.ti-truck:before {\n\tcontent: \"\\e66d\";\n}\n.ti-timer:before {\n\tcontent: \"\\e66e\";\n}\n.ti-ticket:before {\n\tcontent: \"\\e66f\";\n}\n.ti-thumb-up:before {\n\tcontent: \"\\e670\";\n}\n.ti-thumb-down:before {\n\tcontent: \"\\e671\";\n}\n.ti-text:before {\n\tcontent: \"\\e672\";\n}\n.ti-stats-up:before {\n\tcontent: \"\\e673\";\n}\n.ti-stats-down:before {\n\tcontent: \"\\e674\";\n}\n.ti-split-v:before {\n\tcontent: \"\\e675\";\n}\n.ti-split-h:before {\n\tcontent: \"\\e676\";\n}\n.ti-smallcap:before {\n\tcontent: \"\\e677\";\n}\n.ti-shine:before {\n\tcontent: \"\\e678\";\n}\n.ti-shift-right:before {\n\tcontent: \"\\e679\";\n}\n.ti-shift-left:before {\n\tcontent: \"\\e67a\";\n}\n.ti-shield:before {\n\tcontent: \"\\e67b\";\n}\n.ti-notepad:before {\n\tcontent: \"\\e67c\";\n}\n.ti-server:before {\n\tcontent: \"\\e67d\";\n}\n.ti-quote-right:before {\n\tcontent: \"\\e67e\";\n}\n.ti-quote-left:before {\n\tcontent: \"\\e67f\";\n}\n.ti-pulse:before {\n\tcontent: \"\\e680\";\n}\n.ti-printer:before {\n\tcontent: \"\\e681\";\n}\n.ti-power-off:before {\n\tcontent: \"\\e682\";\n}\n.ti-plug:before {\n\tcontent: \"\\e683\";\n}\n.ti-pie-chart:before {\n\tcontent: \"\\e684\";\n}\n.ti-paragraph:before {\n\tcontent: \"\\e685\";\n}\n.ti-panel:before {\n\tcontent: \"\\e686\";\n}\n.ti-package:before {\n\tcontent: \"\\e687\";\n}\n.ti-music:before {\n\tcontent: \"\\e688\";\n}\n.ti-music-alt:before {\n\tcontent: \"\\e689\";\n}\n.ti-mouse:before {\n\tcontent: \"\\e68a\";\n}\n.ti-mouse-alt:before {\n\tcontent: \"\\e68b\";\n}\n.ti-money:before {\n\tcontent: \"\\e68c\";\n}\n.ti-microphone:before {\n\tcontent: \"\\e68d\";\n}\n.ti-menu:before {\n\tcontent: \"\\e68e\";\n}\n.ti-menu-alt:before {\n\tcontent: \"\\e68f\";\n}\n.ti-map:before {\n\tcontent: \"\\e690\";\n}\n.ti-map-alt:before {\n\tcontent: \"\\e691\";\n}\n.ti-loop:before {\n\tcontent: \"\\e692\";\n}\n.ti-location-pin:before {\n\tcontent: \"\\e693\";\n}\n.ti-list:before {\n\tcontent: \"\\e694\";\n}\n.ti-light-bulb:before {\n\tcontent: \"\\e695\";\n}\n.ti-Italic:before {\n\tcontent: \"\\e696\";\n}\n.ti-info:before {\n\tcontent: \"\\e697\";\n}\n.ti-infinite:before {\n\tcontent: \"\\e698\";\n}\n.ti-id-badge:before {\n\tcontent: \"\\e699\";\n}\n.ti-hummer:before {\n\tcontent: \"\\e69a\";\n}\n.ti-home:before {\n\tcontent: \"\\e69b\";\n}\n.ti-help:before {\n\tcontent: \"\\e69c\";\n}\n.ti-headphone:before {\n\tcontent: \"\\e69d\";\n}\n.ti-harddrives:before {\n\tcontent: \"\\e69e\";\n}\n.ti-harddrive:before {\n\tcontent: \"\\e69f\";\n}\n.ti-gift:before {\n\tcontent: \"\\e6a0\";\n}\n.ti-game:before {\n\tcontent: \"\\e6a1\";\n}\n.ti-filter:before {\n\tcontent: \"\\e6a2\";\n}\n.ti-files:before {\n\tcontent: \"\\e6a3\";\n}\n.ti-file:before {\n\tcontent: \"\\e6a4\";\n}\n.ti-eraser:before {\n\tcontent: \"\\e6a5\";\n}\n.ti-envelope:before {\n\tcontent: \"\\e6a6\";\n}\n.ti-download:before {\n\tcontent: \"\\e6a7\";\n}\n.ti-direction:before {\n\tcontent: \"\\e6a8\";\n}\n.ti-direction-alt:before {\n\tcontent: \"\\e6a9\";\n}\n.ti-dashboard:before {\n\tcontent: \"\\e6aa\";\n}\n.ti-control-stop:before {\n\tcontent: \"\\e6ab\";\n}\n.ti-control-shuffle:before {\n\tcontent: \"\\e6ac\";\n}\n.ti-control-play:before {\n\tcontent: \"\\e6ad\";\n}\n.ti-control-pause:before {\n\tcontent: \"\\e6ae\";\n}\n.ti-control-forward:before {\n\tcontent: \"\\e6af\";\n}\n.ti-control-backward:before {\n\tcontent: \"\\e6b0\";\n}\n.ti-cloud:before {\n\tcontent: \"\\e6b1\";\n}\n.ti-cloud-up:before {\n\tcontent: \"\\e6b2\";\n}\n.ti-cloud-down:before {\n\tcontent: \"\\e6b3\";\n}\n.ti-clipboard:before {\n\tcontent: \"\\e6b4\";\n}\n.ti-car:before {\n\tcontent: \"\\e6b5\";\n}\n.ti-calendar:before {\n\tcontent: \"\\e6b6\";\n}\n.ti-book:before {\n\tcontent: \"\\e6b7\";\n}\n.ti-bell:before {\n\tcontent: \"\\e6b8\";\n}\n.ti-basketball:before {\n\tcontent: \"\\e6b9\";\n}\n.ti-bar-chart:before {\n\tcontent: \"\\e6ba\";\n}\n.ti-bar-chart-alt:before {\n\tcontent: \"\\e6bb\";\n}\n.ti-back-right:before {\n\tcontent: \"\\e6bc\";\n}\n.ti-back-left:before {\n\tcontent: \"\\e6bd\";\n}\n.ti-arrows-corner:before {\n\tcontent: \"\\e6be\";\n}\n.ti-archive:before {\n\tcontent: \"\\e6bf\";\n}\n.ti-anchor:before {\n\tcontent: \"\\e6c0\";\n}\n.ti-align-right:before {\n\tcontent: \"\\e6c1\";\n}\n.ti-align-left:before {\n\tcontent: \"\\e6c2\";\n}\n.ti-align-justify:before {\n\tcontent: \"\\e6c3\";\n}\n.ti-align-center:before {\n\tcontent: \"\\e6c4\";\n}\n.ti-alert:before {\n\tcontent: \"\\e6c5\";\n}\n.ti-alarm-clock:before {\n\tcontent: \"\\e6c6\";\n}\n.ti-agenda:before {\n\tcontent: \"\\e6c7\";\n}\n.ti-write:before {\n\tcontent: \"\\e6c8\";\n}\n.ti-window:before {\n\tcontent: \"\\e6c9\";\n}\n.ti-widgetized:before {\n\tcontent: \"\\e6ca\";\n}\n.ti-widget:before {\n\tcontent: \"\\e6cb\";\n}\n.ti-widget-alt:before {\n\tcontent: \"\\e6cc\";\n}\n.ti-wallet:before {\n\tcontent: \"\\e6cd\";\n}\n.ti-video-clapper:before {\n\tcontent: \"\\e6ce\";\n}\n.ti-video-camera:before {\n\tcontent: \"\\e6cf\";\n}\n.ti-vector:before {\n\tcontent: \"\\e6d0\";\n}\n.ti-themify-logo:before {\n\tcontent: \"\\e6d1\";\n}\n.ti-themify-favicon:before {\n\tcontent: \"\\e6d2\";\n}\n.ti-themify-favicon-alt:before {\n\tcontent: \"\\e6d3\";\n}\n.ti-support:before {\n\tcontent: \"\\e6d4\";\n}\n.ti-stamp:before {\n\tcontent: \"\\e6d5\";\n}\n.ti-split-v-alt:before {\n\tcontent: \"\\e6d6\";\n}\n.ti-slice:before {\n\tcontent: \"\\e6d7\";\n}\n.ti-shortcode:before {\n\tcontent: \"\\e6d8\";\n}\n.ti-shift-right-alt:before {\n\tcontent: \"\\e6d9\";\n}\n.ti-shift-left-alt:before {\n\tcontent: \"\\e6da\";\n}\n.ti-ruler-alt-2:before {\n\tcontent: \"\\e6db\";\n}\n.ti-receipt:before {\n\tcontent: \"\\e6dc\";\n}\n.ti-pin2:before {\n\tcontent: \"\\e6dd\";\n}\n.ti-pin-alt:before {\n\tcontent: \"\\e6de\";\n}\n.ti-pencil-alt2:before {\n\tcontent: \"\\e6df\";\n}\n.ti-palette:before {\n\tcontent: \"\\e6e0\";\n}\n.ti-more:before {\n\tcontent: \"\\e6e1\";\n}\n.ti-more-alt:before {\n\tcontent: \"\\e6e2\";\n}\n.ti-microphone-alt:before {\n\tcontent: \"\\e6e3\";\n}\n.ti-magnet:before {\n\tcontent: \"\\e6e4\";\n}\n.ti-line-double:before {\n\tcontent: \"\\e6e5\";\n}\n.ti-line-dotted:before {\n\tcontent: \"\\e6e6\";\n}\n.ti-line-dashed:before {\n\tcontent: \"\\e6e7\";\n}\n.ti-layout-width-full:before {\n\tcontent: \"\\e6e8\";\n}\n.ti-layout-width-default:before {\n\tcontent: \"\\e6e9\";\n}\n.ti-layout-width-default-alt:before {\n\tcontent: \"\\e6ea\";\n}\n.ti-layout-tab:before {\n\tcontent: \"\\e6eb\";\n}\n.ti-layout-tab-window:before {\n\tcontent: \"\\e6ec\";\n}\n.ti-layout-tab-v:before {\n\tcontent: \"\\e6ed\";\n}\n.ti-layout-tab-min:before {\n\tcontent: \"\\e6ee\";\n}\n.ti-layout-slider:before {\n\tcontent: \"\\e6ef\";\n}\n.ti-layout-slider-alt:before {\n\tcontent: \"\\e6f0\";\n}\n.ti-layout-sidebar-right:before {\n\tcontent: \"\\e6f1\";\n}\n.ti-layout-sidebar-none:before {\n\tcontent: \"\\e6f2\";\n}\n.ti-layout-sidebar-left:before {\n\tcontent: \"\\e6f3\";\n}\n.ti-layout-placeholder:before {\n\tcontent: \"\\e6f4\";\n}\n.ti-layout-menu:before {\n\tcontent: \"\\e6f5\";\n}\n.ti-layout-menu-v:before {\n\tcontent: \"\\e6f6\";\n}\n.ti-layout-menu-separated:before {\n\tcontent: \"\\e6f7\";\n}\n.ti-layout-menu-full:before {\n\tcontent: \"\\e6f8\";\n}\n.ti-layout-media-right-alt:before {\n\tcontent: \"\\e6f9\";\n}\n.ti-layout-media-right:before {\n\tcontent: \"\\e6fa\";\n}\n.ti-layout-media-overlay:before {\n\tcontent: \"\\e6fb\";\n}\n.ti-layout-media-overlay-alt:before {\n\tcontent: \"\\e6fc\";\n}\n.ti-layout-media-overlay-alt-2:before {\n\tcontent: \"\\e6fd\";\n}\n.ti-layout-media-left-alt:before {\n\tcontent: \"\\e6fe\";\n}\n.ti-layout-media-left:before {\n\tcontent: \"\\e6ff\";\n}\n.ti-layout-media-center-alt:before {\n\tcontent: \"\\e700\";\n}\n.ti-layout-media-center:before {\n\tcontent: \"\\e701\";\n}\n.ti-layout-list-thumb:before {\n\tcontent: \"\\e702\";\n}\n.ti-layout-list-thumb-alt:before {\n\tcontent: \"\\e703\";\n}\n.ti-layout-list-post:before {\n\tcontent: \"\\e704\";\n}\n.ti-layout-list-large-image:before {\n\tcontent: \"\\e705\";\n}\n.ti-layout-line-solid:before {\n\tcontent: \"\\e706\";\n}\n.ti-layout-grid4:before {\n\tcontent: \"\\e707\";\n}\n.ti-layout-grid3:before {\n\tcontent: \"\\e708\";\n}\n.ti-layout-grid2:before {\n\tcontent: \"\\e709\";\n}\n.ti-layout-grid2-thumb:before {\n\tcontent: \"\\e70a\";\n}\n.ti-layout-cta-right:before {\n\tcontent: \"\\e70b\";\n}\n.ti-layout-cta-left:before {\n\tcontent: \"\\e70c\";\n}\n.ti-layout-cta-center:before {\n\tcontent: \"\\e70d\";\n}\n.ti-layout-cta-btn-right:before {\n\tcontent: \"\\e70e\";\n}\n.ti-layout-cta-btn-left:before {\n\tcontent: \"\\e70f\";\n}\n.ti-layout-column4:before {\n\tcontent: \"\\e710\";\n}\n.ti-layout-column3:before {\n\tcontent: \"\\e711\";\n}\n.ti-layout-column2:before {\n\tcontent: \"\\e712\";\n}\n.ti-layout-accordion-separated:before {\n\tcontent: \"\\e713\";\n}\n.ti-layout-accordion-merged:before {\n\tcontent: \"\\e714\";\n}\n.ti-layout-accordion-list:before {\n\tcontent: \"\\e715\";\n}\n.ti-ink-pen:before {\n\tcontent: \"\\e716\";\n}\n.ti-info-alt:before {\n\tcontent: \"\\e717\";\n}\n.ti-help-alt:before {\n\tcontent: \"\\e718\";\n}\n.ti-headphone-alt:before {\n\tcontent: \"\\e719\";\n}\n.ti-hand-point-up:before {\n\tcontent: \"\\e71a\";\n}\n.ti-hand-point-right:before {\n\tcontent: \"\\e71b\";\n}\n.ti-hand-point-left:before {\n\tcontent: \"\\e71c\";\n}\n.ti-hand-point-down:before {\n\tcontent: \"\\e71d\";\n}\n.ti-gallery:before {\n\tcontent: \"\\e71e\";\n}\n.ti-face-smile:before {\n\tcontent: \"\\e71f\";\n}\n.ti-face-sad:before {\n\tcontent: \"\\e720\";\n}\n.ti-credit-card:before {\n\tcontent: \"\\e721\";\n}\n.ti-control-skip-forward:before {\n\tcontent: \"\\e722\";\n}\n.ti-control-skip-backward:before {\n\tcontent: \"\\e723\";\n}\n.ti-control-record:before {\n\tcontent: \"\\e724\";\n}\n.ti-control-eject:before {\n\tcontent: \"\\e725\";\n}\n.ti-comments-smiley:before {\n\tcontent: \"\\e726\";\n}\n.ti-brush-alt:before {\n\tcontent: \"\\e727\";\n}\n.ti-youtube:before {\n\tcontent: \"\\e728\";\n}\n.ti-vimeo:before {\n\tcontent: \"\\e729\";\n}\n.ti-twitter:before {\n\tcontent: \"\\e72a\";\n}\n.ti-time:before {\n\tcontent: \"\\e72b\";\n}\n.ti-tumblr:before {\n\tcontent: \"\\e72c\";\n}\n.ti-skype:before {\n\tcontent: \"\\e72d\";\n}\n.ti-share:before {\n\tcontent: \"\\e72e\";\n}\n.ti-share-alt:before {\n\tcontent: \"\\e72f\";\n}\n.ti-rocket:before {\n\tcontent: \"\\e730\";\n}\n.ti-pinterest:before {\n\tcontent: \"\\e731\";\n}\n.ti-new-window:before {\n\tcontent: \"\\e732\";\n}\n.ti-microsoft:before {\n\tcontent: \"\\e733\";\n}\n.ti-list-ol:before {\n\tcontent: \"\\e734\";\n}\n.ti-linkedin:before {\n\tcontent: \"\\e735\";\n}\n.ti-layout-sidebar-2:before {\n\tcontent: \"\\e736\";\n}\n.ti-layout-grid4-alt:before {\n\tcontent: \"\\e737\";\n}\n.ti-layout-grid3-alt:before {\n\tcontent: \"\\e738\";\n}\n.ti-layout-grid2-alt:before {\n\tcontent: \"\\e739\";\n}\n.ti-layout-column4-alt:before {\n\tcontent: \"\\e73a\";\n}\n.ti-layout-column3-alt:before {\n\tcontent: \"\\e73b\";\n}\n.ti-layout-column2-alt:before {\n\tcontent: \"\\e73c\";\n}\n.ti-instagram:before {\n\tcontent: \"\\e73d\";\n}\n.ti-google:before {\n\tcontent: \"\\e73e\";\n}\n.ti-github:before {\n\tcontent: \"\\e73f\";\n}\n.ti-flickr:before {\n\tcontent: \"\\e740\";\n}\n.ti-facebook:before {\n\tcontent: \"\\e741\";\n}\n.ti-dropbox:before {\n\tcontent: \"\\e742\";\n}\n.ti-dribbble:before {\n\tcontent: \"\\e743\";\n}\n.ti-apple:before {\n\tcontent: \"\\e744\";\n}\n.ti-android:before {\n\tcontent: \"\\e745\";\n}\n.ti-save:before {\n\tcontent: \"\\e746\";\n}\n.ti-save-alt:before {\n\tcontent: \"\\e747\";\n}\n.ti-yahoo:before {\n\tcontent: \"\\e748\";\n}\n.ti-wordpress:before {\n\tcontent: \"\\e749\";\n}\n.ti-vimeo-alt:before {\n\tcontent: \"\\e74a\";\n}\n.ti-twitter-alt:before {\n\tcontent: \"\\e74b\";\n}\n.ti-tumblr-alt:before {\n\tcontent: \"\\e74c\";\n}\n.ti-trello:before {\n\tcontent: \"\\e74d\";\n}\n.ti-stack-overflow:before {\n\tcontent: \"\\e74e\";\n}\n.ti-soundcloud:before {\n\tcontent: \"\\e74f\";\n}\n.ti-sharethis:before {\n\tcontent: \"\\e750\";\n}\n.ti-sharethis-alt:before {\n\tcontent: \"\\e751\";\n}\n.ti-reddit:before {\n\tcontent: \"\\e752\";\n}\n.ti-pinterest-alt:before {\n\tcontent: \"\\e753\";\n}\n.ti-microsoft-alt:before {\n\tcontent: \"\\e754\";\n}\n.ti-linux:before {\n\tcontent: \"\\e755\";\n}\n.ti-jsfiddle:before {\n\tcontent: \"\\e756\";\n}\n.ti-joomla:before {\n\tcontent: \"\\e757\";\n}\n.ti-html5:before {\n\tcontent: \"\\e758\";\n}\n.ti-flickr-alt:before {\n\tcontent: \"\\e759\";\n}\n.ti-email:before {\n\tcontent: \"\\e75a\";\n}\n.ti-drupal:before {\n\tcontent: \"\\e75b\";\n}\n.ti-dropbox-alt:before {\n\tcontent: \"\\e75c\";\n}\n.ti-css3:before {\n\tcontent: \"\\e75d\";\n}\n.ti-rss:before {\n\tcontent: \"\\e75e\";\n}\n.ti-rss-alt:before {\n\tcontent: \"\\e75f\";\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/themify-icons/themify-icons.scss",
    "content": "@font-face {\n  font-family: 'themify';\n  src:url('../fonts/themify.eot?-fvbane');\n  src:url('../fonts/themify.eot?#iefix-fvbane') format('embedded-opentype'),\n    url('../fonts/themify.woff?-fvbane') format('woff'),\n    url('../fonts/themify.ttf?-fvbane') format('truetype'),\n    url('../fonts/themify.svg?-fvbane#themify') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n\n[class^=\"ti-\"], [class*=\" ti-\"] {\n  font-family: 'themify';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.ti-wand:before {\n  content: \"\\e600\";\n}\n.ti-volume:before {\n  content: \"\\e601\";\n}\n.ti-user:before {\n  content: \"\\e602\";\n}\n.ti-unlock:before {\n  content: \"\\e603\";\n}\n.ti-unlink:before {\n  content: \"\\e604\";\n}\n.ti-trash:before {\n  content: \"\\e605\";\n}\n.ti-thought:before {\n  content: \"\\e606\";\n}\n.ti-target:before {\n  content: \"\\e607\";\n}\n.ti-tag:before {\n  content: \"\\e608\";\n}\n.ti-tablet:before {\n  content: \"\\e609\";\n}\n.ti-star:before {\n  content: \"\\e60a\";\n}\n.ti-spray:before {\n  content: \"\\e60b\";\n}\n.ti-signal:before {\n  content: \"\\e60c\";\n}\n.ti-shopping-cart:before {\n  content: \"\\e60d\";\n}\n.ti-shopping-cart-full:before {\n  content: \"\\e60e\";\n}\n.ti-settings:before {\n  content: \"\\e60f\";\n}\n.ti-search:before {\n  content: \"\\e610\";\n}\n.ti-zoom-in:before {\n  content: \"\\e611\";\n}\n.ti-zoom-out:before {\n  content: \"\\e612\";\n}\n.ti-cut:before {\n  content: \"\\e613\";\n}\n.ti-ruler:before {\n  content: \"\\e614\";\n}\n.ti-ruler-pencil:before {\n  content: \"\\e615\";\n}\n.ti-ruler-alt:before {\n  content: \"\\e616\";\n}\n.ti-bookmark:before {\n  content: \"\\e617\";\n}\n.ti-bookmark-alt:before {\n  content: \"\\e618\";\n}\n.ti-reload:before {\n  content: \"\\e619\";\n}\n.ti-plus:before {\n  content: \"\\e61a\";\n}\n.ti-pin:before {\n  content: \"\\e61b\";\n}\n.ti-pencil:before {\n  content: \"\\e61c\";\n}\n.ti-pencil-alt:before {\n  content: \"\\e61d\";\n}\n.ti-paint-roller:before {\n  content: \"\\e61e\";\n}\n.ti-paint-bucket:before {\n  content: \"\\e61f\";\n}\n.ti-na:before {\n  content: \"\\e620\";\n}\n.ti-mobile:before {\n  content: \"\\e621\";\n}\n.ti-minus:before {\n  content: \"\\e622\";\n}\n.ti-medall:before {\n  content: \"\\e623\";\n}\n.ti-medall-alt:before {\n  content: \"\\e624\";\n}\n.ti-marker:before {\n  content: \"\\e625\";\n}\n.ti-marker-alt:before {\n  content: \"\\e626\";\n}\n.ti-arrow-up:before {\n  content: \"\\e627\";\n}\n.ti-arrow-right:before {\n  content: \"\\e628\";\n}\n.ti-arrow-left:before {\n  content: \"\\e629\";\n}\n.ti-arrow-down:before {\n  content: \"\\e62a\";\n}\n.ti-lock:before {\n  content: \"\\e62b\";\n}\n.ti-location-arrow:before {\n  content: \"\\e62c\";\n}\n.ti-link:before {\n  content: \"\\e62d\";\n}\n.ti-layout:before {\n  content: \"\\e62e\";\n}\n.ti-layers:before {\n  content: \"\\e62f\";\n}\n.ti-layers-alt:before {\n  content: \"\\e630\";\n}\n.ti-key:before {\n  content: \"\\e631\";\n}\n.ti-import:before {\n  content: \"\\e632\";\n}\n.ti-image:before {\n  content: \"\\e633\";\n}\n.ti-heart:before {\n  content: \"\\e634\";\n}\n.ti-heart-broken:before {\n  content: \"\\e635\";\n}\n.ti-hand-stop:before {\n  content: \"\\e636\";\n}\n.ti-hand-open:before {\n  content: \"\\e637\";\n}\n.ti-hand-drag:before {\n  content: \"\\e638\";\n}\n.ti-folder:before {\n  content: \"\\e639\";\n}\n.ti-flag:before {\n  content: \"\\e63a\";\n}\n.ti-flag-alt:before {\n  content: \"\\e63b\";\n}\n.ti-flag-alt-2:before {\n  content: \"\\e63c\";\n}\n.ti-eye:before {\n  content: \"\\e63d\";\n}\n.ti-export:before {\n  content: \"\\e63e\";\n}\n.ti-exchange-vertical:before {\n  content: \"\\e63f\";\n}\n.ti-desktop:before {\n  content: \"\\e640\";\n}\n.ti-cup:before {\n  content: \"\\e641\";\n}\n.ti-crown:before {\n  content: \"\\e642\";\n}\n.ti-comments:before {\n  content: \"\\e643\";\n}\n.ti-comment:before {\n  content: \"\\e644\";\n}\n.ti-comment-alt:before {\n  content: \"\\e645\";\n}\n.ti-close:before {\n  content: \"\\e646\";\n}\n.ti-clip:before {\n  content: \"\\e647\";\n}\n.ti-angle-up:before {\n  content: \"\\e648\";\n}\n.ti-angle-right:before {\n  content: \"\\e649\";\n}\n.ti-angle-left:before {\n  content: \"\\e64a\";\n}\n.ti-angle-down:before {\n  content: \"\\e64b\";\n}\n.ti-check:before {\n  content: \"\\e64c\";\n}\n.ti-check-box:before {\n  content: \"\\e64d\";\n}\n.ti-camera:before {\n  content: \"\\e64e\";\n}\n.ti-announcement:before {\n  content: \"\\e64f\";\n}\n.ti-brush:before {\n  content: \"\\e650\";\n}\n.ti-briefcase:before {\n  content: \"\\e651\";\n}\n.ti-bolt:before {\n  content: \"\\e652\";\n}\n.ti-bolt-alt:before {\n  content: \"\\e653\";\n}\n.ti-blackboard:before {\n  content: \"\\e654\";\n}\n.ti-bag:before {\n  content: \"\\e655\";\n}\n.ti-move:before {\n  content: \"\\e656\";\n}\n.ti-arrows-vertical:before {\n  content: \"\\e657\";\n}\n.ti-arrows-horizontal:before {\n  content: \"\\e658\";\n}\n.ti-fullscreen:before {\n  content: \"\\e659\";\n}\n.ti-arrow-top-right:before {\n  content: \"\\e65a\";\n}\n.ti-arrow-top-left:before {\n  content: \"\\e65b\";\n}\n.ti-arrow-circle-up:before {\n  content: \"\\e65c\";\n}\n.ti-arrow-circle-right:before {\n  content: \"\\e65d\";\n}\n.ti-arrow-circle-left:before {\n  content: \"\\e65e\";\n}\n.ti-arrow-circle-down:before {\n  content: \"\\e65f\";\n}\n.ti-angle-double-up:before {\n  content: \"\\e660\";\n}\n.ti-angle-double-right:before {\n  content: \"\\e661\";\n}\n.ti-angle-double-left:before {\n  content: \"\\e662\";\n}\n.ti-angle-double-down:before {\n  content: \"\\e663\";\n}\n.ti-zip:before {\n  content: \"\\e664\";\n}\n.ti-world:before {\n  content: \"\\e665\";\n}\n.ti-wheelchair:before {\n  content: \"\\e666\";\n}\n.ti-view-list:before {\n  content: \"\\e667\";\n}\n.ti-view-list-alt:before {\n  content: \"\\e668\";\n}\n.ti-view-grid:before {\n  content: \"\\e669\";\n}\n.ti-uppercase:before {\n  content: \"\\e66a\";\n}\n.ti-upload:before {\n  content: \"\\e66b\";\n}\n.ti-underline:before {\n  content: \"\\e66c\";\n}\n.ti-truck:before {\n  content: \"\\e66d\";\n}\n.ti-timer:before {\n  content: \"\\e66e\";\n}\n.ti-ticket:before {\n  content: \"\\e66f\";\n}\n.ti-thumb-up:before {\n  content: \"\\e670\";\n}\n.ti-thumb-down:before {\n  content: \"\\e671\";\n}\n.ti-text:before {\n  content: \"\\e672\";\n}\n.ti-stats-up:before {\n  content: \"\\e673\";\n}\n.ti-stats-down:before {\n  content: \"\\e674\";\n}\n.ti-split-v:before {\n  content: \"\\e675\";\n}\n.ti-split-h:before {\n  content: \"\\e676\";\n}\n.ti-smallcap:before {\n  content: \"\\e677\";\n}\n.ti-shine:before {\n  content: \"\\e678\";\n}\n.ti-shift-right:before {\n  content: \"\\e679\";\n}\n.ti-shift-left:before {\n  content: \"\\e67a\";\n}\n.ti-shield:before {\n  content: \"\\e67b\";\n}\n.ti-notepad:before {\n  content: \"\\e67c\";\n}\n.ti-server:before {\n  content: \"\\e67d\";\n}\n.ti-quote-right:before {\n  content: \"\\e67e\";\n}\n.ti-quote-left:before {\n  content: \"\\e67f\";\n}\n.ti-pulse:before {\n  content: \"\\e680\";\n}\n.ti-printer:before {\n  content: \"\\e681\";\n}\n.ti-power-off:before {\n  content: \"\\e682\";\n}\n.ti-plug:before {\n  content: \"\\e683\";\n}\n.ti-pie-chart:before {\n  content: \"\\e684\";\n}\n.ti-paragraph:before {\n  content: \"\\e685\";\n}\n.ti-panel:before {\n  content: \"\\e686\";\n}\n.ti-package:before {\n  content: \"\\e687\";\n}\n.ti-music:before {\n  content: \"\\e688\";\n}\n.ti-music-alt:before {\n  content: \"\\e689\";\n}\n.ti-mouse:before {\n  content: \"\\e68a\";\n}\n.ti-mouse-alt:before {\n  content: \"\\e68b\";\n}\n.ti-money:before {\n  content: \"\\e68c\";\n}\n.ti-microphone:before {\n  content: \"\\e68d\";\n}\n.ti-menu:before {\n  content: \"\\e68e\";\n}\n.ti-menu-alt:before {\n  content: \"\\e68f\";\n}\n.ti-map:before {\n  content: \"\\e690\";\n}\n.ti-map-alt:before {\n  content: \"\\e691\";\n}\n.ti-loop:before {\n  content: \"\\e692\";\n}\n.ti-location-pin:before {\n  content: \"\\e693\";\n}\n.ti-list:before {\n  content: \"\\e694\";\n}\n.ti-light-bulb:before {\n  content: \"\\e695\";\n}\n.ti-Italic:before {\n  content: \"\\e696\";\n}\n.ti-info:before {\n  content: \"\\e697\";\n}\n.ti-infinite:before {\n  content: \"\\e698\";\n}\n.ti-id-badge:before {\n  content: \"\\e699\";\n}\n.ti-hummer:before {\n  content: \"\\e69a\";\n}\n.ti-home:before {\n  content: \"\\e69b\";\n}\n.ti-help:before {\n  content: \"\\e69c\";\n}\n.ti-headphone:before {\n  content: \"\\e69d\";\n}\n.ti-harddrives:before {\n  content: \"\\e69e\";\n}\n.ti-harddrive:before {\n  content: \"\\e69f\";\n}\n.ti-gift:before {\n  content: \"\\e6a0\";\n}\n.ti-game:before {\n  content: \"\\e6a1\";\n}\n.ti-filter:before {\n  content: \"\\e6a2\";\n}\n.ti-files:before {\n  content: \"\\e6a3\";\n}\n.ti-file:before {\n  content: \"\\e6a4\";\n}\n.ti-eraser:before {\n  content: \"\\e6a5\";\n}\n.ti-envelope:before {\n  content: \"\\e6a6\";\n}\n.ti-download:before {\n  content: \"\\e6a7\";\n}\n.ti-direction:before {\n  content: \"\\e6a8\";\n}\n.ti-direction-alt:before {\n  content: \"\\e6a9\";\n}\n.ti-dashboard:before {\n  content: \"\\e6aa\";\n}\n.ti-control-stop:before {\n  content: \"\\e6ab\";\n}\n.ti-control-shuffle:before {\n  content: \"\\e6ac\";\n}\n.ti-control-play:before {\n  content: \"\\e6ad\";\n}\n.ti-control-pause:before {\n  content: \"\\e6ae\";\n}\n.ti-control-forward:before {\n  content: \"\\e6af\";\n}\n.ti-control-backward:before {\n  content: \"\\e6b0\";\n}\n.ti-cloud:before {\n  content: \"\\e6b1\";\n}\n.ti-cloud-up:before {\n  content: \"\\e6b2\";\n}\n.ti-cloud-down:before {\n  content: \"\\e6b3\";\n}\n.ti-clipboard:before {\n  content: \"\\e6b4\";\n}\n.ti-car:before {\n  content: \"\\e6b5\";\n}\n.ti-calendar:before {\n  content: \"\\e6b6\";\n}\n.ti-book:before {\n  content: \"\\e6b7\";\n}\n.ti-bell:before {\n  content: \"\\e6b8\";\n}\n.ti-basketball:before {\n  content: \"\\e6b9\";\n}\n.ti-bar-chart:before {\n  content: \"\\e6ba\";\n}\n.ti-bar-chart-alt:before {\n  content: \"\\e6bb\";\n}\n.ti-back-right:before {\n  content: \"\\e6bc\";\n}\n.ti-back-left:before {\n  content: \"\\e6bd\";\n}\n.ti-arrows-corner:before {\n  content: \"\\e6be\";\n}\n.ti-archive:before {\n  content: \"\\e6bf\";\n}\n.ti-anchor:before {\n  content: \"\\e6c0\";\n}\n.ti-align-right:before {\n  content: \"\\e6c1\";\n}\n.ti-align-left:before {\n  content: \"\\e6c2\";\n}\n.ti-align-justify:before {\n  content: \"\\e6c3\";\n}\n.ti-align-center:before {\n  content: \"\\e6c4\";\n}\n.ti-alert:before {\n  content: \"\\e6c5\";\n}\n.ti-alarm-clock:before {\n  content: \"\\e6c6\";\n}\n.ti-agenda:before {\n  content: \"\\e6c7\";\n}\n.ti-write:before {\n  content: \"\\e6c8\";\n}\n.ti-window:before {\n  content: \"\\e6c9\";\n}\n.ti-widgetized:before {\n  content: \"\\e6ca\";\n}\n.ti-widget:before {\n  content: \"\\e6cb\";\n}\n.ti-widget-alt:before {\n  content: \"\\e6cc\";\n}\n.ti-wallet:before {\n  content: \"\\e6cd\";\n}\n.ti-video-clapper:before {\n  content: \"\\e6ce\";\n}\n.ti-video-camera:before {\n  content: \"\\e6cf\";\n}\n.ti-vector:before {\n  content: \"\\e6d0\";\n}\n.ti-themify-logo:before {\n  content: \"\\e6d1\";\n}\n.ti-themify-favicon:before {\n  content: \"\\e6d2\";\n}\n.ti-themify-favicon-alt:before {\n  content: \"\\e6d3\";\n}\n.ti-support:before {\n  content: \"\\e6d4\";\n}\n.ti-stamp:before {\n  content: \"\\e6d5\";\n}\n.ti-split-v-alt:before {\n  content: \"\\e6d6\";\n}\n.ti-slice:before {\n  content: \"\\e6d7\";\n}\n.ti-shortcode:before {\n  content: \"\\e6d8\";\n}\n.ti-shift-right-alt:before {\n  content: \"\\e6d9\";\n}\n.ti-shift-left-alt:before {\n  content: \"\\e6da\";\n}\n.ti-ruler-alt-2:before {\n  content: \"\\e6db\";\n}\n.ti-receipt:before {\n  content: \"\\e6dc\";\n}\n.ti-pin2:before {\n  content: \"\\e6dd\";\n}\n.ti-pin-alt:before {\n  content: \"\\e6de\";\n}\n.ti-pencil-alt2:before {\n  content: \"\\e6df\";\n}\n.ti-palette:before {\n  content: \"\\e6e0\";\n}\n.ti-more:before {\n  content: \"\\e6e1\";\n}\n.ti-more-alt:before {\n  content: \"\\e6e2\";\n}\n.ti-microphone-alt:before {\n  content: \"\\e6e3\";\n}\n.ti-magnet:before {\n  content: \"\\e6e4\";\n}\n.ti-line-double:before {\n  content: \"\\e6e5\";\n}\n.ti-line-dotted:before {\n  content: \"\\e6e6\";\n}\n.ti-line-dashed:before {\n  content: \"\\e6e7\";\n}\n.ti-layout-width-full:before {\n  content: \"\\e6e8\";\n}\n.ti-layout-width-default:before {\n  content: \"\\e6e9\";\n}\n.ti-layout-width-default-alt:before {\n  content: \"\\e6ea\";\n}\n.ti-layout-tab:before {\n  content: \"\\e6eb\";\n}\n.ti-layout-tab-window:before {\n  content: \"\\e6ec\";\n}\n.ti-layout-tab-v:before {\n  content: \"\\e6ed\";\n}\n.ti-layout-tab-min:before {\n  content: \"\\e6ee\";\n}\n.ti-layout-slider:before {\n  content: \"\\e6ef\";\n}\n.ti-layout-slider-alt:before {\n  content: \"\\e6f0\";\n}\n.ti-layout-sidebar-right:before {\n  content: \"\\e6f1\";\n}\n.ti-layout-sidebar-none:before {\n  content: \"\\e6f2\";\n}\n.ti-layout-sidebar-left:before {\n  content: \"\\e6f3\";\n}\n.ti-layout-placeholder:before {\n  content: \"\\e6f4\";\n}\n.ti-layout-menu:before {\n  content: \"\\e6f5\";\n}\n.ti-layout-menu-v:before {\n  content: \"\\e6f6\";\n}\n.ti-layout-menu-separated:before {\n  content: \"\\e6f7\";\n}\n.ti-layout-menu-full:before {\n  content: \"\\e6f8\";\n}\n.ti-layout-media-right-alt:before {\n  content: \"\\e6f9\";\n}\n.ti-layout-media-right:before {\n  content: \"\\e6fa\";\n}\n.ti-layout-media-overlay:before {\n  content: \"\\e6fb\";\n}\n.ti-layout-media-overlay-alt:before {\n  content: \"\\e6fc\";\n}\n.ti-layout-media-overlay-alt-2:before {\n  content: \"\\e6fd\";\n}\n.ti-layout-media-left-alt:before {\n  content: \"\\e6fe\";\n}\n.ti-layout-media-left:before {\n  content: \"\\e6ff\";\n}\n.ti-layout-media-center-alt:before {\n  content: \"\\e700\";\n}\n.ti-layout-media-center:before {\n  content: \"\\e701\";\n}\n.ti-layout-list-thumb:before {\n  content: \"\\e702\";\n}\n.ti-layout-list-thumb-alt:before {\n  content: \"\\e703\";\n}\n.ti-layout-list-post:before {\n  content: \"\\e704\";\n}\n.ti-layout-list-large-image:before {\n  content: \"\\e705\";\n}\n.ti-layout-line-solid:before {\n  content: \"\\e706\";\n}\n.ti-layout-grid4:before {\n  content: \"\\e707\";\n}\n.ti-layout-grid3:before {\n  content: \"\\e708\";\n}\n.ti-layout-grid2:before {\n  content: \"\\e709\";\n}\n.ti-layout-grid2-thumb:before {\n  content: \"\\e70a\";\n}\n.ti-layout-cta-right:before {\n  content: \"\\e70b\";\n}\n.ti-layout-cta-left:before {\n  content: \"\\e70c\";\n}\n.ti-layout-cta-center:before {\n  content: \"\\e70d\";\n}\n.ti-layout-cta-btn-right:before {\n  content: \"\\e70e\";\n}\n.ti-layout-cta-btn-left:before {\n  content: \"\\e70f\";\n}\n.ti-layout-column4:before {\n  content: \"\\e710\";\n}\n.ti-layout-column3:before {\n  content: \"\\e711\";\n}\n.ti-layout-column2:before {\n  content: \"\\e712\";\n}\n.ti-layout-accordion-separated:before {\n  content: \"\\e713\";\n}\n.ti-layout-accordion-merged:before {\n  content: \"\\e714\";\n}\n.ti-layout-accordion-list:before {\n  content: \"\\e715\";\n}\n.ti-ink-pen:before {\n  content: \"\\e716\";\n}\n.ti-info-alt:before {\n  content: \"\\e717\";\n}\n.ti-help-alt:before {\n  content: \"\\e718\";\n}\n.ti-headphone-alt:before {\n  content: \"\\e719\";\n}\n.ti-hand-point-up:before {\n  content: \"\\e71a\";\n}\n.ti-hand-point-right:before {\n  content: \"\\e71b\";\n}\n.ti-hand-point-left:before {\n  content: \"\\e71c\";\n}\n.ti-hand-point-down:before {\n  content: \"\\e71d\";\n}\n.ti-gallery:before {\n  content: \"\\e71e\";\n}\n.ti-face-smile:before {\n  content: \"\\e71f\";\n}\n.ti-face-sad:before {\n  content: \"\\e720\";\n}\n.ti-credit-card:before {\n  content: \"\\e721\";\n}\n.ti-control-skip-forward:before {\n  content: \"\\e722\";\n}\n.ti-control-skip-backward:before {\n  content: \"\\e723\";\n}\n.ti-control-record:before {\n  content: \"\\e724\";\n}\n.ti-control-eject:before {\n  content: \"\\e725\";\n}\n.ti-comments-smiley:before {\n  content: \"\\e726\";\n}\n.ti-brush-alt:before {\n  content: \"\\e727\";\n}\n.ti-youtube:before {\n  content: \"\\e728\";\n}\n.ti-vimeo:before {\n  content: \"\\e729\";\n}\n.ti-twitter:before {\n  content: \"\\e72a\";\n}\n.ti-time:before {\n  content: \"\\e72b\";\n}\n.ti-tumblr:before {\n  content: \"\\e72c\";\n}\n.ti-skype:before {\n  content: \"\\e72d\";\n}\n.ti-share:before {\n  content: \"\\e72e\";\n}\n.ti-share-alt:before {\n  content: \"\\e72f\";\n}\n.ti-rocket:before {\n  content: \"\\e730\";\n}\n.ti-pinterest:before {\n  content: \"\\e731\";\n}\n.ti-new-window:before {\n  content: \"\\e732\";\n}\n.ti-microsoft:before {\n  content: \"\\e733\";\n}\n.ti-list-ol:before {\n  content: \"\\e734\";\n}\n.ti-linkedin:before {\n  content: \"\\e735\";\n}\n.ti-layout-sidebar-2:before {\n  content: \"\\e736\";\n}\n.ti-layout-grid4-alt:before {\n  content: \"\\e737\";\n}\n.ti-layout-grid3-alt:before {\n  content: \"\\e738\";\n}\n.ti-layout-grid2-alt:before {\n  content: \"\\e739\";\n}\n.ti-layout-column4-alt:before {\n  content: \"\\e73a\";\n}\n.ti-layout-column3-alt:before {\n  content: \"\\e73b\";\n}\n.ti-layout-column2-alt:before {\n  content: \"\\e73c\";\n}\n.ti-instagram:before {\n  content: \"\\e73d\";\n}\n.ti-google:before {\n  content: \"\\e73e\";\n}\n.ti-github:before {\n  content: \"\\e73f\";\n}\n.ti-flickr:before {\n  content: \"\\e740\";\n}\n.ti-facebook:before {\n  content: \"\\e741\";\n}\n.ti-dropbox:before {\n  content: \"\\e742\";\n}\n.ti-dribbble:before {\n  content: \"\\e743\";\n}\n.ti-apple:before {\n  content: \"\\e744\";\n}\n.ti-android:before {\n  content: \"\\e745\";\n}\n.ti-save:before {\n  content: \"\\e746\";\n}\n.ti-save-alt:before {\n  content: \"\\e747\";\n}\n.ti-yahoo:before {\n  content: \"\\e748\";\n}\n.ti-wordpress:before {\n  content: \"\\e749\";\n}\n.ti-vimeo-alt:before {\n  content: \"\\e74a\";\n}\n.ti-twitter-alt:before {\n  content: \"\\e74b\";\n}\n.ti-tumblr-alt:before {\n  content: \"\\e74c\";\n}\n.ti-trello:before {\n  content: \"\\e74d\";\n}\n.ti-stack-overflow:before {\n  content: \"\\e74e\";\n}\n.ti-soundcloud:before {\n  content: \"\\e74f\";\n}\n.ti-sharethis:before {\n  content: \"\\e750\";\n}\n.ti-sharethis-alt:before {\n  content: \"\\e751\";\n}\n.ti-reddit:before {\n  content: \"\\e752\";\n}\n.ti-pinterest-alt:before {\n  content: \"\\e753\";\n}\n.ti-microsoft-alt:before {\n  content: \"\\e754\";\n}\n.ti-linux:before {\n  content: \"\\e755\";\n}\n.ti-jsfiddle:before {\n  content: \"\\e756\";\n}\n.ti-joomla:before {\n  content: \"\\e757\";\n}\n.ti-html5:before {\n  content: \"\\e758\";\n}\n.ti-flickr-alt:before {\n  content: \"\\e759\";\n}\n.ti-email:before {\n  content: \"\\e75a\";\n}\n.ti-drupal:before {\n  content: \"\\e75b\";\n}\n.ti-dropbox-alt:before {\n  content: \"\\e75c\";\n}\n.ti-css3:before {\n  content: \"\\e75d\";\n}\n.ti-rss:before {\n  content: \"\\e75e\";\n}\n.ti-rss-alt:before {\n  content: \"\\e75f\";\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/typicons/typicons.scss",
    "content": "@charset 'UTF-8';\n \n/* @FONT-FACE loads font into browser */\n@font-face {\n  font-family: 'typicons';\n  font-weight: normal;\n  font-style: normal;\n  src: url('../fonts/typicons.eot');\n  src: url('../fonts/typicons.eot?#iefix') format('embedded-opentype'),\n       url('../fonts/typicons.woff') format('woff'),\n       url('../fonts/typicons.ttf') format('truetype'),\n       url('../fonts/typicons.svg#typicons') format('svg');\n}\n \n/* :before psuedo-selector inserts and styles icon */\n.typcn:before {\n  font-family: 'typicons';\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  height: 1em;\n  font-size: 1em;\n  text-align: center;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n}\n \n/* Code for individual icons */ \n.typcn-adjust-brightness:before { \n  content: '\\e000'; /* '' */\n} \n.typcn-adjust-contrast:before { \n  content: '\\e001'; /* '' */\n} \n.typcn-anchor-outline:before { \n  content: '\\e002'; /* '' */\n} \n.typcn-anchor:before { \n  content: '\\e003'; /* '' */\n} \n.typcn-archive:before { \n  content: '\\e004'; /* '' */\n} \n.typcn-arrow-back-outline:before { \n  content: '\\e005'; /* '' */\n} \n.typcn-arrow-back:before { \n  content: '\\e006'; /* '' */\n} \n.typcn-arrow-down-outline:before { \n  content: '\\e007'; /* '' */\n} \n.typcn-arrow-down-thick:before { \n  content: '\\e008'; /* '' */\n} \n.typcn-arrow-down:before { \n  content: '\\e009'; /* '' */\n} \n.typcn-arrow-forward-outline:before { \n  content: '\\e00a'; /* '' */\n} \n.typcn-arrow-forward:before { \n  content: '\\e00b'; /* '' */\n} \n.typcn-arrow-left-outline:before { \n  content: '\\e00c'; /* '' */\n} \n.typcn-arrow-left-thick:before { \n  content: '\\e00d'; /* '' */\n} \n.typcn-arrow-left:before { \n  content: '\\e00e'; /* '' */\n} \n.typcn-arrow-loop-outline:before { \n  content: '\\e00f'; /* '' */\n} \n.typcn-arrow-loop:before { \n  content: '\\e010'; /* '' */\n} \n.typcn-arrow-maximise-outline:before { \n  content: '\\e011'; /* '' */\n} \n.typcn-arrow-maximise:before { \n  content: '\\e012'; /* '' */\n} \n.typcn-arrow-minimise-outline:before { \n  content: '\\e013'; /* '' */\n} \n.typcn-arrow-minimise:before { \n  content: '\\e014'; /* '' */\n} \n.typcn-arrow-move-outline:before { \n  content: '\\e015'; /* '' */\n} \n.typcn-arrow-move:before { \n  content: '\\e016'; /* '' */\n} \n.typcn-arrow-repeat-outline:before { \n  content: '\\e017'; /* '' */\n} \n.typcn-arrow-repeat:before { \n  content: '\\e018'; /* '' */\n} \n.typcn-arrow-right-outline:before { \n  content: '\\e019'; /* '' */\n} \n.typcn-arrow-right-thick:before { \n  content: '\\e01a'; /* '' */\n} \n.typcn-arrow-right:before { \n  content: '\\e01b'; /* '' */\n} \n.typcn-arrow-shuffle:before { \n  content: '\\e01c'; /* '' */\n} \n.typcn-arrow-sorted-down:before { \n  content: '\\e01d'; /* '' */\n} \n.typcn-arrow-sorted-up:before { \n  content: '\\e01e'; /* '' */\n} \n.typcn-arrow-sync-outline:before { \n  content: '\\e01f'; /* '' */\n} \n.typcn-arrow-sync:before { \n  content: '\\e020'; /* '' */\n} \n.typcn-arrow-unsorted:before { \n  content: '\\e021'; /* '' */\n} \n.typcn-arrow-up-outline:before { \n  content: '\\e022'; /* '' */\n} \n.typcn-arrow-up-thick:before { \n  content: '\\e023'; /* '' */\n} \n.typcn-arrow-up:before { \n  content: '\\e024'; /* '' */\n} \n.typcn-at:before { \n  content: '\\e025'; /* '' */\n} \n.typcn-attachment-outline:before { \n  content: '\\e026'; /* '' */\n} \n.typcn-attachment:before { \n  content: '\\e027'; /* '' */\n} \n.typcn-backspace-outline:before { \n  content: '\\e028'; /* '' */\n} \n.typcn-backspace:before { \n  content: '\\e029'; /* '' */\n} \n.typcn-battery-charge:before { \n  content: '\\e02a'; /* '' */\n} \n.typcn-battery-full:before { \n  content: '\\e02b'; /* '' */\n} \n.typcn-battery-high:before { \n  content: '\\e02c'; /* '' */\n} \n.typcn-battery-low:before { \n  content: '\\e02d'; /* '' */\n} \n.typcn-battery-mid:before { \n  content: '\\e02e'; /* '' */\n} \n.typcn-beaker:before { \n  content: '\\e02f'; /* '' */\n} \n.typcn-beer:before { \n  content: '\\e030'; /* '' */\n} \n.typcn-bell:before { \n  content: '\\e031'; /* '' */\n} \n.typcn-book:before { \n  content: '\\e032'; /* '' */\n} \n.typcn-bookmark:before { \n  content: '\\e033'; /* '' */\n} \n.typcn-briefcase:before { \n  content: '\\e034'; /* '' */\n} \n.typcn-brush:before { \n  content: '\\e035'; /* '' */\n} \n.typcn-business-card:before { \n  content: '\\e036'; /* '' */\n} \n.typcn-calculator:before { \n  content: '\\e037'; /* '' */\n} \n.typcn-calendar-outline:before { \n  content: '\\e038'; /* '' */\n} \n.typcn-calendar:before { \n  content: '\\e039'; /* '' */\n} \n.typcn-camera-outline:before { \n  content: '\\e03a'; /* '' */\n} \n.typcn-camera:before { \n  content: '\\e03b'; /* '' */\n} \n.typcn-cancel-outline:before { \n  content: '\\e03c'; /* '' */\n} \n.typcn-cancel:before { \n  content: '\\e03d'; /* '' */\n} \n.typcn-chart-area-outline:before { \n  content: '\\e03e'; /* '' */\n} \n.typcn-chart-area:before { \n  content: '\\e03f'; /* '' */\n} \n.typcn-chart-bar-outline:before { \n  content: '\\e040'; /* '' */\n} \n.typcn-chart-bar:before { \n  content: '\\e041'; /* '' */\n} \n.typcn-chart-line-outline:before { \n  content: '\\e042'; /* '' */\n} \n.typcn-chart-line:before { \n  content: '\\e043'; /* '' */\n} \n.typcn-chart-pie-outline:before { \n  content: '\\e044'; /* '' */\n} \n.typcn-chart-pie:before { \n  content: '\\e045'; /* '' */\n} \n.typcn-chevron-left-outline:before { \n  content: '\\e046'; /* '' */\n} \n.typcn-chevron-left:before { \n  content: '\\e047'; /* '' */\n} \n.typcn-chevron-right-outline:before { \n  content: '\\e048'; /* '' */\n} \n.typcn-chevron-right:before { \n  content: '\\e049'; /* '' */\n} \n.typcn-clipboard:before { \n  content: '\\e04a'; /* '' */\n} \n.typcn-cloud-storage:before { \n  content: '\\e04b'; /* '' */\n} \n.typcn-cloud-storage-outline:before { \n  content: '\\e054'; /* '' */\n} \n.typcn-code-outline:before { \n  content: '\\e04c'; /* '' */\n} \n.typcn-code:before { \n  content: '\\e04d'; /* '' */\n} \n.typcn-coffee:before { \n  content: '\\e04e'; /* '' */\n} \n.typcn-cog-outline:before { \n  content: '\\e04f'; /* '' */\n} \n.typcn-cog:before { \n  content: '\\e050'; /* '' */\n} \n.typcn-compass:before { \n  content: '\\e051'; /* '' */\n} \n.typcn-contacts:before { \n  content: '\\e052'; /* '' */\n} \n.typcn-credit-card:before { \n  content: '\\e053'; /* '' */\n} \n.typcn-css3:before { \n  content: '\\e055'; /* '' */\n} \n.typcn-database:before { \n  content: '\\e056'; /* '' */\n} \n.typcn-delete-outline:before { \n  content: '\\e057'; /* '' */\n} \n.typcn-delete:before { \n  content: '\\e058'; /* '' */\n} \n.typcn-device-desktop:before { \n  content: '\\e059'; /* '' */\n} \n.typcn-device-laptop:before { \n  content: '\\e05a'; /* '' */\n} \n.typcn-device-phone:before { \n  content: '\\e05b'; /* '' */\n} \n.typcn-device-tablet:before { \n  content: '\\e05c'; /* '' */\n} \n.typcn-directions:before { \n  content: '\\e05d'; /* '' */\n} \n.typcn-divide-outline:before { \n  content: '\\e05e'; /* '' */\n} \n.typcn-divide:before { \n  content: '\\e05f'; /* '' */\n} \n.typcn-document-add:before { \n  content: '\\e060'; /* '' */\n} \n.typcn-document-delete:before { \n  content: '\\e061'; /* '' */\n} \n.typcn-document-text:before { \n  content: '\\e062'; /* '' */\n} \n.typcn-document:before { \n  content: '\\e063'; /* '' */\n} \n.typcn-download-outline:before { \n  content: '\\e064'; /* '' */\n} \n.typcn-download:before { \n  content: '\\e065'; /* '' */\n} \n.typcn-dropbox:before { \n  content: '\\e066'; /* '' */\n} \n.typcn-edit:before { \n  content: '\\e067'; /* '' */\n} \n.typcn-eject-outline:before { \n  content: '\\e068'; /* '' */\n} \n.typcn-eject:before { \n  content: '\\e069'; /* '' */\n} \n.typcn-equals-outline:before { \n  content: '\\e06a'; /* '' */\n} \n.typcn-equals:before { \n  content: '\\e06b'; /* '' */\n} \n.typcn-export-outline:before { \n  content: '\\e06c'; /* '' */\n} \n.typcn-export:before { \n  content: '\\e06d'; /* '' */\n} \n.typcn-eye-outline:before { \n  content: '\\e06e'; /* '' */\n} \n.typcn-eye:before { \n  content: '\\e06f'; /* '' */\n} \n.typcn-feather:before { \n  content: '\\e070'; /* '' */\n} \n.typcn-film:before { \n  content: '\\e071'; /* '' */\n} \n.typcn-filter:before { \n  content: '\\e072'; /* '' */\n} \n.typcn-flag-outline:before { \n  content: '\\e073'; /* '' */\n} \n.typcn-flag:before { \n  content: '\\e074'; /* '' */\n} \n.typcn-flash-outline:before { \n  content: '\\e075'; /* '' */\n} \n.typcn-flash:before { \n  content: '\\e076'; /* '' */\n} \n.typcn-flow-children:before { \n  content: '\\e077'; /* '' */\n} \n.typcn-flow-merge:before { \n  content: '\\e078'; /* '' */\n} \n.typcn-flow-parallel:before { \n  content: '\\e079'; /* '' */\n} \n.typcn-flow-switch:before { \n  content: '\\e07a'; /* '' */\n} \n.typcn-folder-add:before { \n  content: '\\e07b'; /* '' */\n} \n.typcn-folder-delete:before { \n  content: '\\e07c'; /* '' */\n} \n.typcn-folder-open:before { \n  content: '\\e07d'; /* '' */\n} \n.typcn-folder:before { \n  content: '\\e07e'; /* '' */\n} \n.typcn-gift:before { \n  content: '\\e07f'; /* '' */\n} \n.typcn-globe-outline:before { \n  content: '\\e080'; /* '' */\n} \n.typcn-globe:before { \n  content: '\\e081'; /* '' */\n} \n.typcn-group-outline:before { \n  content: '\\e082'; /* '' */\n} \n.typcn-group:before { \n  content: '\\e083'; /* '' */\n} \n.typcn-headphones:before { \n  content: '\\e084'; /* '' */\n} \n.typcn-heart-full-outline:before { \n  content: '\\e085'; /* '' */\n} \n.typcn-heart-half-outline:before { \n  content: '\\e086'; /* '' */\n} \n.typcn-heart-outline:before { \n  content: '\\e087'; /* '' */\n} \n.typcn-heart:before { \n  content: '\\e088'; /* '' */\n} \n.typcn-home-outline:before { \n  content: '\\e089'; /* '' */\n} \n.typcn-home:before { \n  content: '\\e08a'; /* '' */\n} \n.typcn-html5:before { \n  content: '\\e08b'; /* '' */\n} \n.typcn-image-outline:before { \n  content: '\\e08c'; /* '' */\n} \n.typcn-image:before { \n  content: '\\e08d'; /* '' */\n} \n.typcn-infinity-outline:before { \n  content: '\\e08e'; /* '' */\n} \n.typcn-infinity:before { \n  content: '\\e08f'; /* '' */\n} \n.typcn-info-large-outline:before { \n  content: '\\e090'; /* '' */\n} \n.typcn-info-large:before { \n  content: '\\e091'; /* '' */\n} \n.typcn-info-outline:before { \n  content: '\\e092'; /* '' */\n} \n.typcn-info:before { \n  content: '\\e093'; /* '' */\n} \n.typcn-input-checked-outline:before { \n  content: '\\e094'; /* '' */\n} \n.typcn-input-checked:before { \n  content: '\\e095'; /* '' */\n} \n.typcn-key-outline:before { \n  content: '\\e096'; /* '' */\n} \n.typcn-key:before { \n  content: '\\e097'; /* '' */\n} \n.typcn-keyboard:before { \n  content: '\\e098'; /* '' */\n} \n.typcn-leaf:before { \n  content: '\\e099'; /* '' */\n} \n.typcn-lightbulb:before { \n  content: '\\e09a'; /* '' */\n} \n.typcn-link-outline:before { \n  content: '\\e09b'; /* '' */\n} \n.typcn-link:before { \n  content: '\\e09c'; /* '' */\n} \n.typcn-location-arrow-outline:before { \n  content: '\\e09d'; /* '' */\n} \n.typcn-location-arrow:before { \n  content: '\\e09e'; /* '' */\n} \n.typcn-location-outline:before { \n  content: '\\e09f'; /* '' */\n} \n.typcn-location:before { \n  content: '\\e0a0'; /* '' */\n} \n.typcn-lock-closed-outline:before { \n  content: '\\e0a1'; /* '' */\n} \n.typcn-lock-closed:before { \n  content: '\\e0a2'; /* '' */\n} \n.typcn-lock-open-outline:before { \n  content: '\\e0a3'; /* '' */\n} \n.typcn-lock-open:before { \n  content: '\\e0a4'; /* '' */\n} \n.typcn-mail:before { \n  content: '\\e0a5'; /* '' */\n} \n.typcn-map:before { \n  content: '\\e0a6'; /* '' */\n} \n.typcn-media-eject-outline:before { \n  content: '\\e0a7'; /* '' */\n} \n.typcn-media-eject:before { \n  content: '\\e0a8'; /* '' */\n} \n.typcn-media-fast-forward-outline:before { \n  content: '\\e0a9'; /* '' */\n} \n.typcn-media-fast-forward:before { \n  content: '\\e0aa'; /* '' */\n} \n.typcn-media-pause-outline:before { \n  content: '\\e0ab'; /* '' */\n} \n.typcn-media-pause:before { \n  content: '\\e0ac'; /* '' */\n} \n.typcn-media-play-outline:before { \n  content: '\\e0ad'; /* '' */\n} \n.typcn-media-play-reverse-outline:before { \n  content: '\\e0ae'; /* '' */\n} \n.typcn-media-play-reverse:before { \n  content: '\\e0af'; /* '' */\n} \n.typcn-media-play:before { \n  content: '\\e0b0'; /* '' */\n} \n.typcn-media-record-outline:before { \n  content: '\\e0b1'; /* '' */\n} \n.typcn-media-record:before { \n  content: '\\e0b2'; /* '' */\n} \n.typcn-media-rewind-outline:before { \n  content: '\\e0b3'; /* '' */\n} \n.typcn-media-rewind:before { \n  content: '\\e0b4'; /* '' */\n} \n.typcn-media-stop-outline:before { \n  content: '\\e0b5'; /* '' */\n} \n.typcn-media-stop:before { \n  content: '\\e0b6'; /* '' */\n} \n.typcn-message-typing:before { \n  content: '\\e0b7'; /* '' */\n} \n.typcn-message:before { \n  content: '\\e0b8'; /* '' */\n} \n.typcn-messages:before { \n  content: '\\e0b9'; /* '' */\n} \n.typcn-microphone-outline:before { \n  content: '\\e0ba'; /* '' */\n} \n.typcn-microphone:before { \n  content: '\\e0bb'; /* '' */\n} \n.typcn-minus-outline:before { \n  content: '\\e0bc'; /* '' */\n} \n.typcn-minus:before { \n  content: '\\e0bd'; /* '' */\n} \n.typcn-mortar-board:before { \n  content: '\\e0be'; /* '' */\n} \n.typcn-news:before { \n  content: '\\e0bf'; /* '' */\n} \n.typcn-notes-outline:before { \n  content: '\\e0c0'; /* '' */\n} \n.typcn-notes:before { \n  content: '\\e0c1'; /* '' */\n} \n.typcn-pen:before { \n  content: '\\e0c2'; /* '' */\n} \n.typcn-pencil:before { \n  content: '\\e0c3'; /* '' */\n} \n.typcn-phone-outline:before { \n  content: '\\e0c4'; /* '' */\n} \n.typcn-phone:before { \n  content: '\\e0c5'; /* '' */\n} \n.typcn-pi-outline:before { \n  content: '\\e0c6'; /* '' */\n} \n.typcn-pi:before { \n  content: '\\e0c7'; /* '' */\n} \n.typcn-pin-outline:before { \n  content: '\\e0c8'; /* '' */\n} \n.typcn-pin:before { \n  content: '\\e0c9'; /* '' */\n} \n.typcn-pipette:before { \n  content: '\\e0ca'; /* '' */\n} \n.typcn-plane-outline:before { \n  content: '\\e0cb'; /* '' */\n} \n.typcn-plane:before { \n  content: '\\e0cc'; /* '' */\n} \n.typcn-plug:before { \n  content: '\\e0cd'; /* '' */\n} \n.typcn-plus-outline:before { \n  content: '\\e0ce'; /* '' */\n} \n.typcn-plus:before { \n  content: '\\e0cf'; /* '' */\n} \n.typcn-point-of-interest-outline:before { \n  content: '\\e0d0'; /* '' */\n} \n.typcn-point-of-interest:before { \n  content: '\\e0d1'; /* '' */\n} \n.typcn-power-outline:before { \n  content: '\\e0d2'; /* '' */\n} \n.typcn-power:before { \n  content: '\\e0d3'; /* '' */\n} \n.typcn-printer:before { \n  content: '\\e0d4'; /* '' */\n} \n.typcn-puzzle-outline:before { \n  content: '\\e0d5'; /* '' */\n} \n.typcn-puzzle:before { \n  content: '\\e0d6'; /* '' */\n} \n.typcn-radar-outline:before { \n  content: '\\e0d7'; /* '' */\n} \n.typcn-radar:before { \n  content: '\\e0d8'; /* '' */\n} \n.typcn-refresh-outline:before { \n  content: '\\e0d9'; /* '' */\n} \n.typcn-refresh:before { \n  content: '\\e0da'; /* '' */\n} \n.typcn-rss-outline:before { \n  content: '\\e0db'; /* '' */\n} \n.typcn-rss:before { \n  content: '\\e0dc'; /* '' */\n} \n.typcn-scissors-outline:before { \n  content: '\\e0dd'; /* '' */\n} \n.typcn-scissors:before { \n  content: '\\e0de'; /* '' */\n} \n.typcn-shopping-bag:before { \n  content: '\\e0df'; /* '' */\n} \n.typcn-shopping-cart:before { \n  content: '\\e0e0'; /* '' */\n} \n.typcn-social-at-circular:before { \n  content: '\\e0e1'; /* '' */\n} \n.typcn-social-dribbble-circular:before { \n  content: '\\e0e2'; /* '' */\n} \n.typcn-social-dribbble:before { \n  content: '\\e0e3'; /* '' */\n} \n.typcn-social-facebook-circular:before { \n  content: '\\e0e4'; /* '' */\n} \n.typcn-social-facebook:before { \n  content: '\\e0e5'; /* '' */\n} \n.typcn-social-flickr-circular:before { \n  content: '\\e0e6'; /* '' */\n} \n.typcn-social-flickr:before { \n  content: '\\e0e7'; /* '' */\n} \n.typcn-social-github-circular:before { \n  content: '\\e0e8'; /* '' */\n} \n.typcn-social-github:before { \n  content: '\\e0e9'; /* '' */\n} \n.typcn-social-google-plus-circular:before { \n  content: '\\e0ea'; /* '' */\n} \n.typcn-social-google-plus:before { \n  content: '\\e0eb'; /* '' */\n} \n.typcn-social-instagram-circular:before { \n  content: '\\e0ec'; /* '' */\n} \n.typcn-social-instagram:before { \n  content: '\\e0ed'; /* '' */\n} \n.typcn-social-last-fm-circular:before { \n  content: '\\e0ee'; /* '' */\n} \n.typcn-social-last-fm:before { \n  content: '\\e0ef'; /* '' */\n} \n.typcn-social-linkedin-circular:before { \n  content: '\\e0f0'; /* '' */\n} \n.typcn-social-linkedin:before { \n  content: '\\e0f1'; /* '' */\n} \n.typcn-social-pinterest-circular:before { \n  content: '\\e0f2'; /* '' */\n} \n.typcn-social-pinterest:before { \n  content: '\\e0f3'; /* '' */\n} \n.typcn-social-skype-outline:before { \n  content: '\\e0f4'; /* '' */\n} \n.typcn-social-skype:before { \n  content: '\\e0f5'; /* '' */\n} \n.typcn-social-tumbler-circular:before { \n  content: '\\e0f6'; /* '' */\n} \n.typcn-social-tumbler:before { \n  content: '\\e0f7'; /* '' */\n} \n.typcn-social-twitter-circular:before { \n  content: '\\e0f8'; /* '' */\n} \n.typcn-social-twitter:before { \n  content: '\\e0f9'; /* '' */\n} \n.typcn-social-vimeo-circular:before { \n  content: '\\e0fa'; /* '' */\n} \n.typcn-social-vimeo:before { \n  content: '\\e0fb'; /* '' */\n} \n.typcn-social-youtube-circular:before { \n  content: '\\e0fc'; /* '' */\n} \n.typcn-social-youtube:before { \n  content: '\\e0fd'; /* '' */\n} \n.typcn-sort-alphabetically-outline:before { \n  content: '\\e0fe'; /* '' */\n} \n.typcn-sort-alphabetically:before { \n  content: '\\e0ff'; /* '' */\n} \n.typcn-sort-numerically-outline:before { \n  content: '\\e100'; /* '' */\n} \n.typcn-sort-numerically:before { \n  content: '\\e101'; /* '' */\n} \n.typcn-spanner-outline:before { \n  content: '\\e102'; /* '' */\n} \n.typcn-spanner:before { \n  content: '\\e103'; /* '' */\n} \n.typcn-spiral:before { \n  content: '\\e104'; /* '' */\n} \n.typcn-star-full-outline:before { \n  content: '\\e105'; /* '' */\n} \n.typcn-star-half-outline:before { \n  content: '\\e106'; /* '' */\n} \n.typcn-star-half:before { \n  content: '\\e107'; /* '' */\n} \n.typcn-star-outline:before { \n  content: '\\e108'; /* '' */\n} \n.typcn-star:before { \n  content: '\\e109'; /* '' */\n} \n.typcn-starburst-outline:before { \n  content: '\\e10a'; /* '' */\n} \n.typcn-starburst:before { \n  content: '\\e10b'; /* '' */\n} \n.typcn-stopwatch:before { \n  content: '\\e10c'; /* '' */\n} \n.typcn-support:before { \n  content: '\\e10d'; /* '' */\n} \n.typcn-tabs-outline:before { \n  content: '\\e10e'; /* '' */\n} \n.typcn-tag:before { \n  content: '\\e10f'; /* '' */\n} \n.typcn-tags:before { \n  content: '\\e110'; /* '' */\n} \n.typcn-th-large-outline:before { \n  content: '\\e111'; /* '' */\n} \n.typcn-th-large:before { \n  content: '\\e112'; /* '' */\n} \n.typcn-th-list-outline:before { \n  content: '\\e113'; /* '' */\n} \n.typcn-th-list:before { \n  content: '\\e114'; /* '' */\n} \n.typcn-th-menu-outline:before { \n  content: '\\e115'; /* '' */\n} \n.typcn-th-menu:before { \n  content: '\\e116'; /* '' */\n} \n.typcn-th-small-outline:before { \n  content: '\\e117'; /* '' */\n} \n.typcn-th-small:before { \n  content: '\\e118'; /* '' */\n} \n.typcn-thermometer:before { \n  content: '\\e119'; /* '' */\n} \n.typcn-thumbs-down:before { \n  content: '\\e11a'; /* '' */\n} \n.typcn-thumbs-ok:before { \n  content: '\\e11b'; /* '' */\n} \n.typcn-thumbs-up:before { \n  content: '\\e11c'; /* '' */\n} \n.typcn-tick-outline:before { \n  content: '\\e11d'; /* '' */\n} \n.typcn-tick:before { \n  content: '\\e11e'; /* '' */\n} \n.typcn-ticket:before { \n  content: '\\e11f'; /* '' */\n} \n.typcn-time:before { \n  content: '\\e120'; /* '' */\n} \n.typcn-times-outline:before { \n  content: '\\e121'; /* '' */\n} \n.typcn-times:before { \n  content: '\\e122'; /* '' */\n} \n.typcn-trash:before { \n  content: '\\e123'; /* '' */\n} \n.typcn-tree:before { \n  content: '\\e124'; /* '' */\n} \n.typcn-upload-outline:before { \n  content: '\\e125'; /* '' */\n} \n.typcn-upload:before { \n  content: '\\e126'; /* '' */\n} \n.typcn-user-add-outline:before { \n  content: '\\e127'; /* '' */\n} \n.typcn-user-add:before { \n  content: '\\e128'; /* '' */\n} \n.typcn-user-delete-outline:before { \n  content: '\\e129'; /* '' */\n} \n.typcn-user-delete:before { \n  content: '\\e12a'; /* '' */\n} \n.typcn-user-outline:before { \n  content: '\\e12b'; /* '' */\n} \n.typcn-user:before { \n  content: '\\e12c'; /* '' */\n} \n.typcn-vendor-android:before { \n  content: '\\e12d'; /* '' */\n} \n.typcn-vendor-apple:before { \n  content: '\\e12e'; /* '' */\n} \n.typcn-vendor-microsoft:before { \n  content: '\\e12f'; /* '' */\n} \n.typcn-video-outline:before { \n  content: '\\e130'; /* '' */\n} \n.typcn-video:before { \n  content: '\\e131'; /* '' */\n} \n.typcn-volume-down:before { \n  content: '\\e132'; /* '' */\n} \n.typcn-volume-mute:before { \n  content: '\\e133'; /* '' */\n} \n.typcn-volume-up:before { \n  content: '\\e134'; /* '' */\n} \n.typcn-volume:before { \n  content: '\\e135'; /* '' */\n} \n.typcn-warning-outline:before { \n  content: '\\e136'; /* '' */\n} \n.typcn-warning:before { \n  content: '\\e137'; /* '' */\n} \n.typcn-watch:before { \n  content: '\\e138'; /* '' */\n} \n.typcn-waves-outline:before { \n  content: '\\e139'; /* '' */\n} \n.typcn-waves:before { \n  content: '\\e13a'; /* '' */\n} \n.typcn-weather-cloudy:before { \n  content: '\\e13b'; /* '' */\n} \n.typcn-weather-downpour:before { \n  content: '\\e13c'; /* '' */\n} \n.typcn-weather-night:before { \n  content: '\\e13d'; /* '' */\n} \n.typcn-weather-partly-sunny:before { \n  content: '\\e13e'; /* '' */\n} \n.typcn-weather-shower:before { \n  content: '\\e13f'; /* '' */\n} \n.typcn-weather-snow:before { \n  content: '\\e140'; /* '' */\n} \n.typcn-weather-stormy:before { \n  content: '\\e141'; /* '' */\n} \n.typcn-weather-sunny:before { \n  content: '\\e142'; /* '' */\n} \n.typcn-weather-windy-cloudy:before { \n  content: '\\e143'; /* '' */\n} \n.typcn-weather-windy:before { \n  content: '\\e144'; /* '' */\n} \n.typcn-wi-fi-outline:before { \n  content: '\\e145'; /* '' */\n} \n.typcn-wi-fi:before { \n  content: '\\e146'; /* '' */\n} \n.typcn-wine:before { \n  content: '\\e147'; /* '' */\n} \n.typcn-world-outline:before { \n  content: '\\e148'; /* '' */\n} \n.typcn-world:before { \n  content: '\\e149'; /* '' */\n} \n.typcn-zoom-in-outline:before { \n  content: '\\e14a'; /* '' */\n} \n.typcn-zoom-in:before { \n  content: '\\e14b'; /* '' */\n} \n.typcn-zoom-out-outline:before { \n  content: '\\e14c'; /* '' */\n} \n.typcn-zoom-out:before { \n  content: '\\e14d'; /* '' */\n} \n.typcn-zoom-outline:before { \n  content: '\\e14e'; /* '' */\n} \n.typcn-zoom:before { \n  content: '\\e14f'; /* '' */\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/css/weather-icons-core.css",
    "content": "@font-face {\n  font-family: 'weathericons';\n  src: url('../fonts/weathericons-regular-webfont.eot');\n  src: url('../fonts/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/weathericons-regular-webfont.woff2') format('woff2'), url('../fonts/weathericons-regular-webfont.woff') format('woff'), url('../fonts/weathericons-regular-webfont.ttf') format('truetype'), url('../fonts/weathericons-regular-webfont.svg#weather_iconsregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.wi {\n  display: inline-block;\n  font-family: 'weathericons';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.wi-fw {\n  text-align: center;\n  width: 1.4em;\n}\n.wi-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.wi-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.wi-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.wi-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.wi-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/css/weather-icons-variables.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/css/weather-icons-wind.css",
    "content": "@charset \"UTF-8\";\n@font-face {\n  font-family: \"weathericons\";\n  src: url(\"../fonts/weathericons-regular-webfont.eot\");\n  src: url(\"../fonts/weathericons-regular-webfont.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/weathericons-regular-webfont.woff2\") format(\"woff2\"), url(\"../fonts/weathericons-regular-webfont.woff\") format(\"woff\"), url(\"../fonts/weathericons-regular-webfont.ttf\") format(\"truetype\"), url(\"../fonts/weathericons-regular-webfont.svg#weather_iconsregular\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.wi {\n  display: inline-block;\n  font-family: \"weathericons\";\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.wi-fw {\n  width: 1.4em;\n  text-align: center; }\n\n.wi-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.wi-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.wi-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.wi-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n.wi-wind:before {\n  content: \"\"; }\n\n.wi-wind.towards-0-deg, .wi-wind-towards-n {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.towards-1-deg {\n  -webkit-transform: rotate(1deg);\n  -moz-transform: rotate(1deg);\n  -ms-transform: rotate(1deg);\n  -o-transform: rotate(1deg);\n  transform: rotate(1deg); }\n.wi-wind.towards-2-deg {\n  -webkit-transform: rotate(2deg);\n  -moz-transform: rotate(2deg);\n  -ms-transform: rotate(2deg);\n  -o-transform: rotate(2deg);\n  transform: rotate(2deg); }\n.wi-wind.towards-3-deg {\n  -webkit-transform: rotate(3deg);\n  -moz-transform: rotate(3deg);\n  -ms-transform: rotate(3deg);\n  -o-transform: rotate(3deg);\n  transform: rotate(3deg); }\n.wi-wind.towards-4-deg {\n  -webkit-transform: rotate(4deg);\n  -moz-transform: rotate(4deg);\n  -ms-transform: rotate(4deg);\n  -o-transform: rotate(4deg);\n  transform: rotate(4deg); }\n.wi-wind.towards-5-deg {\n  -webkit-transform: rotate(5deg);\n  -moz-transform: rotate(5deg);\n  -ms-transform: rotate(5deg);\n  -o-transform: rotate(5deg);\n  transform: rotate(5deg); }\n.wi-wind.towards-6-deg {\n  -webkit-transform: rotate(6deg);\n  -moz-transform: rotate(6deg);\n  -ms-transform: rotate(6deg);\n  -o-transform: rotate(6deg);\n  transform: rotate(6deg); }\n.wi-wind.towards-7-deg {\n  -webkit-transform: rotate(7deg);\n  -moz-transform: rotate(7deg);\n  -ms-transform: rotate(7deg);\n  -o-transform: rotate(7deg);\n  transform: rotate(7deg); }\n.wi-wind.towards-8-deg {\n  -webkit-transform: rotate(8deg);\n  -moz-transform: rotate(8deg);\n  -ms-transform: rotate(8deg);\n  -o-transform: rotate(8deg);\n  transform: rotate(8deg); }\n.wi-wind.towards-9-deg {\n  -webkit-transform: rotate(9deg);\n  -moz-transform: rotate(9deg);\n  -ms-transform: rotate(9deg);\n  -o-transform: rotate(9deg);\n  transform: rotate(9deg); }\n.wi-wind.towards-10-deg {\n  -webkit-transform: rotate(10deg);\n  -moz-transform: rotate(10deg);\n  -ms-transform: rotate(10deg);\n  -o-transform: rotate(10deg);\n  transform: rotate(10deg); }\n.wi-wind.towards-11-deg {\n  -webkit-transform: rotate(11deg);\n  -moz-transform: rotate(11deg);\n  -ms-transform: rotate(11deg);\n  -o-transform: rotate(11deg);\n  transform: rotate(11deg); }\n.wi-wind.towards-12-deg {\n  -webkit-transform: rotate(12deg);\n  -moz-transform: rotate(12deg);\n  -ms-transform: rotate(12deg);\n  -o-transform: rotate(12deg);\n  transform: rotate(12deg); }\n.wi-wind.towards-13-deg {\n  -webkit-transform: rotate(13deg);\n  -moz-transform: rotate(13deg);\n  -ms-transform: rotate(13deg);\n  -o-transform: rotate(13deg);\n  transform: rotate(13deg); }\n.wi-wind.towards-14-deg {\n  -webkit-transform: rotate(14deg);\n  -moz-transform: rotate(14deg);\n  -ms-transform: rotate(14deg);\n  -o-transform: rotate(14deg);\n  transform: rotate(14deg); }\n.wi-wind.towards-15-deg {\n  -webkit-transform: rotate(15deg);\n  -moz-transform: rotate(15deg);\n  -ms-transform: rotate(15deg);\n  -o-transform: rotate(15deg);\n  transform: rotate(15deg); }\n.wi-wind.towards-16-deg {\n  -webkit-transform: rotate(16deg);\n  -moz-transform: rotate(16deg);\n  -ms-transform: rotate(16deg);\n  -o-transform: rotate(16deg);\n  transform: rotate(16deg); }\n.wi-wind.towards-17-deg {\n  -webkit-transform: rotate(17deg);\n  -moz-transform: rotate(17deg);\n  -ms-transform: rotate(17deg);\n  -o-transform: rotate(17deg);\n  transform: rotate(17deg); }\n.wi-wind.towards-18-deg {\n  -webkit-transform: rotate(18deg);\n  -moz-transform: rotate(18deg);\n  -ms-transform: rotate(18deg);\n  -o-transform: rotate(18deg);\n  transform: rotate(18deg); }\n.wi-wind.towards-19-deg {\n  -webkit-transform: rotate(19deg);\n  -moz-transform: rotate(19deg);\n  -ms-transform: rotate(19deg);\n  -o-transform: rotate(19deg);\n  transform: rotate(19deg); }\n.wi-wind.towards-20-deg {\n  -webkit-transform: rotate(20deg);\n  -moz-transform: rotate(20deg);\n  -ms-transform: rotate(20deg);\n  -o-transform: rotate(20deg);\n  transform: rotate(20deg); }\n.wi-wind.towards-21-deg {\n  -webkit-transform: rotate(21deg);\n  -moz-transform: rotate(21deg);\n  -ms-transform: rotate(21deg);\n  -o-transform: rotate(21deg);\n  transform: rotate(21deg); }\n.wi-wind.towards-22-deg {\n  -webkit-transform: rotate(22deg);\n  -moz-transform: rotate(22deg);\n  -ms-transform: rotate(22deg);\n  -o-transform: rotate(22deg);\n  transform: rotate(22deg); }\n.wi-wind.towards-23-deg {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n.wi-wind.towards-24-deg {\n  -webkit-transform: rotate(24deg);\n  -moz-transform: rotate(24deg);\n  -ms-transform: rotate(24deg);\n  -o-transform: rotate(24deg);\n  transform: rotate(24deg); }\n.wi-wind.towards-25-deg {\n  -webkit-transform: rotate(25deg);\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -o-transform: rotate(25deg);\n  transform: rotate(25deg); }\n.wi-wind.towards-26-deg {\n  -webkit-transform: rotate(26deg);\n  -moz-transform: rotate(26deg);\n  -ms-transform: rotate(26deg);\n  -o-transform: rotate(26deg);\n  transform: rotate(26deg); }\n.wi-wind.towards-27-deg {\n  -webkit-transform: rotate(27deg);\n  -moz-transform: rotate(27deg);\n  -ms-transform: rotate(27deg);\n  -o-transform: rotate(27deg);\n  transform: rotate(27deg); }\n.wi-wind.towards-28-deg {\n  -webkit-transform: rotate(28deg);\n  -moz-transform: rotate(28deg);\n  -ms-transform: rotate(28deg);\n  -o-transform: rotate(28deg);\n  transform: rotate(28deg); }\n.wi-wind.towards-29-deg {\n  -webkit-transform: rotate(29deg);\n  -moz-transform: rotate(29deg);\n  -ms-transform: rotate(29deg);\n  -o-transform: rotate(29deg);\n  transform: rotate(29deg); }\n.wi-wind.towards-30-deg {\n  -webkit-transform: rotate(30deg);\n  -moz-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg); }\n.wi-wind.towards-31-deg {\n  -webkit-transform: rotate(31deg);\n  -moz-transform: rotate(31deg);\n  -ms-transform: rotate(31deg);\n  -o-transform: rotate(31deg);\n  transform: rotate(31deg); }\n.wi-wind.towards-32-deg {\n  -webkit-transform: rotate(32deg);\n  -moz-transform: rotate(32deg);\n  -ms-transform: rotate(32deg);\n  -o-transform: rotate(32deg);\n  transform: rotate(32deg); }\n.wi-wind.towards-33-deg {\n  -webkit-transform: rotate(33deg);\n  -moz-transform: rotate(33deg);\n  -ms-transform: rotate(33deg);\n  -o-transform: rotate(33deg);\n  transform: rotate(33deg); }\n.wi-wind.towards-34-deg {\n  -webkit-transform: rotate(34deg);\n  -moz-transform: rotate(34deg);\n  -ms-transform: rotate(34deg);\n  -o-transform: rotate(34deg);\n  transform: rotate(34deg); }\n.wi-wind.towards-35-deg {\n  -webkit-transform: rotate(35deg);\n  -moz-transform: rotate(35deg);\n  -ms-transform: rotate(35deg);\n  -o-transform: rotate(35deg);\n  transform: rotate(35deg); }\n.wi-wind.towards-36-deg {\n  -webkit-transform: rotate(36deg);\n  -moz-transform: rotate(36deg);\n  -ms-transform: rotate(36deg);\n  -o-transform: rotate(36deg);\n  transform: rotate(36deg); }\n.wi-wind.towards-37-deg {\n  -webkit-transform: rotate(37deg);\n  -moz-transform: rotate(37deg);\n  -ms-transform: rotate(37deg);\n  -o-transform: rotate(37deg);\n  transform: rotate(37deg); }\n.wi-wind.towards-38-deg {\n  -webkit-transform: rotate(38deg);\n  -moz-transform: rotate(38deg);\n  -ms-transform: rotate(38deg);\n  -o-transform: rotate(38deg);\n  transform: rotate(38deg); }\n.wi-wind.towards-39-deg {\n  -webkit-transform: rotate(39deg);\n  -moz-transform: rotate(39deg);\n  -ms-transform: rotate(39deg);\n  -o-transform: rotate(39deg);\n  transform: rotate(39deg); }\n.wi-wind.towards-40-deg {\n  -webkit-transform: rotate(40deg);\n  -moz-transform: rotate(40deg);\n  -ms-transform: rotate(40deg);\n  -o-transform: rotate(40deg);\n  transform: rotate(40deg); }\n.wi-wind.towards-41-deg {\n  -webkit-transform: rotate(41deg);\n  -moz-transform: rotate(41deg);\n  -ms-transform: rotate(41deg);\n  -o-transform: rotate(41deg);\n  transform: rotate(41deg); }\n.wi-wind.towards-42-deg {\n  -webkit-transform: rotate(42deg);\n  -moz-transform: rotate(42deg);\n  -ms-transform: rotate(42deg);\n  -o-transform: rotate(42deg);\n  transform: rotate(42deg); }\n.wi-wind.towards-43-deg {\n  -webkit-transform: rotate(43deg);\n  -moz-transform: rotate(43deg);\n  -ms-transform: rotate(43deg);\n  -o-transform: rotate(43deg);\n  transform: rotate(43deg); }\n.wi-wind.towards-44-deg {\n  -webkit-transform: rotate(44deg);\n  -moz-transform: rotate(44deg);\n  -ms-transform: rotate(44deg);\n  -o-transform: rotate(44deg);\n  transform: rotate(44deg); }\n.wi-wind.towards-45-deg {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n.wi-wind.towards-46-deg {\n  -webkit-transform: rotate(46deg);\n  -moz-transform: rotate(46deg);\n  -ms-transform: rotate(46deg);\n  -o-transform: rotate(46deg);\n  transform: rotate(46deg); }\n.wi-wind.towards-47-deg {\n  -webkit-transform: rotate(47deg);\n  -moz-transform: rotate(47deg);\n  -ms-transform: rotate(47deg);\n  -o-transform: rotate(47deg);\n  transform: rotate(47deg); }\n.wi-wind.towards-48-deg {\n  -webkit-transform: rotate(48deg);\n  -moz-transform: rotate(48deg);\n  -ms-transform: rotate(48deg);\n  -o-transform: rotate(48deg);\n  transform: rotate(48deg); }\n.wi-wind.towards-49-deg {\n  -webkit-transform: rotate(49deg);\n  -moz-transform: rotate(49deg);\n  -ms-transform: rotate(49deg);\n  -o-transform: rotate(49deg);\n  transform: rotate(49deg); }\n.wi-wind.towards-50-deg {\n  -webkit-transform: rotate(50deg);\n  -moz-transform: rotate(50deg);\n  -ms-transform: rotate(50deg);\n  -o-transform: rotate(50deg);\n  transform: rotate(50deg); }\n.wi-wind.towards-51-deg {\n  -webkit-transform: rotate(51deg);\n  -moz-transform: rotate(51deg);\n  -ms-transform: rotate(51deg);\n  -o-transform: rotate(51deg);\n  transform: rotate(51deg); }\n.wi-wind.towards-52-deg {\n  -webkit-transform: rotate(52deg);\n  -moz-transform: rotate(52deg);\n  -ms-transform: rotate(52deg);\n  -o-transform: rotate(52deg);\n  transform: rotate(52deg); }\n.wi-wind.towards-53-deg {\n  -webkit-transform: rotate(53deg);\n  -moz-transform: rotate(53deg);\n  -ms-transform: rotate(53deg);\n  -o-transform: rotate(53deg);\n  transform: rotate(53deg); }\n.wi-wind.towards-54-deg {\n  -webkit-transform: rotate(54deg);\n  -moz-transform: rotate(54deg);\n  -ms-transform: rotate(54deg);\n  -o-transform: rotate(54deg);\n  transform: rotate(54deg); }\n.wi-wind.towards-55-deg {\n  -webkit-transform: rotate(55deg);\n  -moz-transform: rotate(55deg);\n  -ms-transform: rotate(55deg);\n  -o-transform: rotate(55deg);\n  transform: rotate(55deg); }\n.wi-wind.towards-56-deg {\n  -webkit-transform: rotate(56deg);\n  -moz-transform: rotate(56deg);\n  -ms-transform: rotate(56deg);\n  -o-transform: rotate(56deg);\n  transform: rotate(56deg); }\n.wi-wind.towards-57-deg {\n  -webkit-transform: rotate(57deg);\n  -moz-transform: rotate(57deg);\n  -ms-transform: rotate(57deg);\n  -o-transform: rotate(57deg);\n  transform: rotate(57deg); }\n.wi-wind.towards-58-deg {\n  -webkit-transform: rotate(58deg);\n  -moz-transform: rotate(58deg);\n  -ms-transform: rotate(58deg);\n  -o-transform: rotate(58deg);\n  transform: rotate(58deg); }\n.wi-wind.towards-59-deg {\n  -webkit-transform: rotate(59deg);\n  -moz-transform: rotate(59deg);\n  -ms-transform: rotate(59deg);\n  -o-transform: rotate(59deg);\n  transform: rotate(59deg); }\n.wi-wind.towards-60-deg {\n  -webkit-transform: rotate(60deg);\n  -moz-transform: rotate(60deg);\n  -ms-transform: rotate(60deg);\n  -o-transform: rotate(60deg);\n  transform: rotate(60deg); }\n.wi-wind.towards-61-deg {\n  -webkit-transform: rotate(61deg);\n  -moz-transform: rotate(61deg);\n  -ms-transform: rotate(61deg);\n  -o-transform: rotate(61deg);\n  transform: rotate(61deg); }\n.wi-wind.towards-62-deg {\n  -webkit-transform: rotate(62deg);\n  -moz-transform: rotate(62deg);\n  -ms-transform: rotate(62deg);\n  -o-transform: rotate(62deg);\n  transform: rotate(62deg); }\n.wi-wind.towards-63-deg {\n  -webkit-transform: rotate(63deg);\n  -moz-transform: rotate(63deg);\n  -ms-transform: rotate(63deg);\n  -o-transform: rotate(63deg);\n  transform: rotate(63deg); }\n.wi-wind.towards-64-deg {\n  -webkit-transform: rotate(64deg);\n  -moz-transform: rotate(64deg);\n  -ms-transform: rotate(64deg);\n  -o-transform: rotate(64deg);\n  transform: rotate(64deg); }\n.wi-wind.towards-65-deg {\n  -webkit-transform: rotate(65deg);\n  -moz-transform: rotate(65deg);\n  -ms-transform: rotate(65deg);\n  -o-transform: rotate(65deg);\n  transform: rotate(65deg); }\n.wi-wind.towards-66-deg {\n  -webkit-transform: rotate(66deg);\n  -moz-transform: rotate(66deg);\n  -ms-transform: rotate(66deg);\n  -o-transform: rotate(66deg);\n  transform: rotate(66deg); }\n.wi-wind.towards-67-deg {\n  -webkit-transform: rotate(67deg);\n  -moz-transform: rotate(67deg);\n  -ms-transform: rotate(67deg);\n  -o-transform: rotate(67deg);\n  transform: rotate(67deg); }\n.wi-wind.towards-68-deg {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n.wi-wind.towards-69-deg {\n  -webkit-transform: rotate(69deg);\n  -moz-transform: rotate(69deg);\n  -ms-transform: rotate(69deg);\n  -o-transform: rotate(69deg);\n  transform: rotate(69deg); }\n.wi-wind.towards-70-deg {\n  -webkit-transform: rotate(70deg);\n  -moz-transform: rotate(70deg);\n  -ms-transform: rotate(70deg);\n  -o-transform: rotate(70deg);\n  transform: rotate(70deg); }\n.wi-wind.towards-71-deg {\n  -webkit-transform: rotate(71deg);\n  -moz-transform: rotate(71deg);\n  -ms-transform: rotate(71deg);\n  -o-transform: rotate(71deg);\n  transform: rotate(71deg); }\n.wi-wind.towards-72-deg {\n  -webkit-transform: rotate(72deg);\n  -moz-transform: rotate(72deg);\n  -ms-transform: rotate(72deg);\n  -o-transform: rotate(72deg);\n  transform: rotate(72deg); }\n.wi-wind.towards-73-deg {\n  -webkit-transform: rotate(73deg);\n  -moz-transform: rotate(73deg);\n  -ms-transform: rotate(73deg);\n  -o-transform: rotate(73deg);\n  transform: rotate(73deg); }\n.wi-wind.towards-74-deg {\n  -webkit-transform: rotate(74deg);\n  -moz-transform: rotate(74deg);\n  -ms-transform: rotate(74deg);\n  -o-transform: rotate(74deg);\n  transform: rotate(74deg); }\n.wi-wind.towards-75-deg {\n  -webkit-transform: rotate(75deg);\n  -moz-transform: rotate(75deg);\n  -ms-transform: rotate(75deg);\n  -o-transform: rotate(75deg);\n  transform: rotate(75deg); }\n.wi-wind.towards-76-deg {\n  -webkit-transform: rotate(76deg);\n  -moz-transform: rotate(76deg);\n  -ms-transform: rotate(76deg);\n  -o-transform: rotate(76deg);\n  transform: rotate(76deg); }\n.wi-wind.towards-77-deg {\n  -webkit-transform: rotate(77deg);\n  -moz-transform: rotate(77deg);\n  -ms-transform: rotate(77deg);\n  -o-transform: rotate(77deg);\n  transform: rotate(77deg); }\n.wi-wind.towards-78-deg {\n  -webkit-transform: rotate(78deg);\n  -moz-transform: rotate(78deg);\n  -ms-transform: rotate(78deg);\n  -o-transform: rotate(78deg);\n  transform: rotate(78deg); }\n.wi-wind.towards-79-deg {\n  -webkit-transform: rotate(79deg);\n  -moz-transform: rotate(79deg);\n  -ms-transform: rotate(79deg);\n  -o-transform: rotate(79deg);\n  transform: rotate(79deg); }\n.wi-wind.towards-80-deg {\n  -webkit-transform: rotate(80deg);\n  -moz-transform: rotate(80deg);\n  -ms-transform: rotate(80deg);\n  -o-transform: rotate(80deg);\n  transform: rotate(80deg); }\n.wi-wind.towards-81-deg {\n  -webkit-transform: rotate(81deg);\n  -moz-transform: rotate(81deg);\n  -ms-transform: rotate(81deg);\n  -o-transform: rotate(81deg);\n  transform: rotate(81deg); }\n.wi-wind.towards-82-deg {\n  -webkit-transform: rotate(82deg);\n  -moz-transform: rotate(82deg);\n  -ms-transform: rotate(82deg);\n  -o-transform: rotate(82deg);\n  transform: rotate(82deg); }\n.wi-wind.towards-83-deg {\n  -webkit-transform: rotate(83deg);\n  -moz-transform: rotate(83deg);\n  -ms-transform: rotate(83deg);\n  -o-transform: rotate(83deg);\n  transform: rotate(83deg); }\n.wi-wind.towards-84-deg {\n  -webkit-transform: rotate(84deg);\n  -moz-transform: rotate(84deg);\n  -ms-transform: rotate(84deg);\n  -o-transform: rotate(84deg);\n  transform: rotate(84deg); }\n.wi-wind.towards-85-deg {\n  -webkit-transform: rotate(85deg);\n  -moz-transform: rotate(85deg);\n  -ms-transform: rotate(85deg);\n  -o-transform: rotate(85deg);\n  transform: rotate(85deg); }\n.wi-wind.towards-86-deg {\n  -webkit-transform: rotate(86deg);\n  -moz-transform: rotate(86deg);\n  -ms-transform: rotate(86deg);\n  -o-transform: rotate(86deg);\n  transform: rotate(86deg); }\n.wi-wind.towards-87-deg {\n  -webkit-transform: rotate(87deg);\n  -moz-transform: rotate(87deg);\n  -ms-transform: rotate(87deg);\n  -o-transform: rotate(87deg);\n  transform: rotate(87deg); }\n.wi-wind.towards-88-deg {\n  -webkit-transform: rotate(88deg);\n  -moz-transform: rotate(88deg);\n  -ms-transform: rotate(88deg);\n  -o-transform: rotate(88deg);\n  transform: rotate(88deg); }\n.wi-wind.towards-89-deg {\n  -webkit-transform: rotate(89deg);\n  -moz-transform: rotate(89deg);\n  -ms-transform: rotate(89deg);\n  -o-transform: rotate(89deg);\n  transform: rotate(89deg); }\n.wi-wind.towards-90-deg {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n.wi-wind.towards-91-deg {\n  -webkit-transform: rotate(91deg);\n  -moz-transform: rotate(91deg);\n  -ms-transform: rotate(91deg);\n  -o-transform: rotate(91deg);\n  transform: rotate(91deg); }\n.wi-wind.towards-92-deg {\n  -webkit-transform: rotate(92deg);\n  -moz-transform: rotate(92deg);\n  -ms-transform: rotate(92deg);\n  -o-transform: rotate(92deg);\n  transform: rotate(92deg); }\n.wi-wind.towards-93-deg {\n  -webkit-transform: rotate(93deg);\n  -moz-transform: rotate(93deg);\n  -ms-transform: rotate(93deg);\n  -o-transform: rotate(93deg);\n  transform: rotate(93deg); }\n.wi-wind.towards-94-deg {\n  -webkit-transform: rotate(94deg);\n  -moz-transform: rotate(94deg);\n  -ms-transform: rotate(94deg);\n  -o-transform: rotate(94deg);\n  transform: rotate(94deg); }\n.wi-wind.towards-95-deg {\n  -webkit-transform: rotate(95deg);\n  -moz-transform: rotate(95deg);\n  -ms-transform: rotate(95deg);\n  -o-transform: rotate(95deg);\n  transform: rotate(95deg); }\n.wi-wind.towards-96-deg {\n  -webkit-transform: rotate(96deg);\n  -moz-transform: rotate(96deg);\n  -ms-transform: rotate(96deg);\n  -o-transform: rotate(96deg);\n  transform: rotate(96deg); }\n.wi-wind.towards-97-deg {\n  -webkit-transform: rotate(97deg);\n  -moz-transform: rotate(97deg);\n  -ms-transform: rotate(97deg);\n  -o-transform: rotate(97deg);\n  transform: rotate(97deg); }\n.wi-wind.towards-98-deg {\n  -webkit-transform: rotate(98deg);\n  -moz-transform: rotate(98deg);\n  -ms-transform: rotate(98deg);\n  -o-transform: rotate(98deg);\n  transform: rotate(98deg); }\n.wi-wind.towards-99-deg {\n  -webkit-transform: rotate(99deg);\n  -moz-transform: rotate(99deg);\n  -ms-transform: rotate(99deg);\n  -o-transform: rotate(99deg);\n  transform: rotate(99deg); }\n.wi-wind.towards-100-deg {\n  -webkit-transform: rotate(100deg);\n  -moz-transform: rotate(100deg);\n  -ms-transform: rotate(100deg);\n  -o-transform: rotate(100deg);\n  transform: rotate(100deg); }\n.wi-wind.towards-101-deg {\n  -webkit-transform: rotate(101deg);\n  -moz-transform: rotate(101deg);\n  -ms-transform: rotate(101deg);\n  -o-transform: rotate(101deg);\n  transform: rotate(101deg); }\n.wi-wind.towards-102-deg {\n  -webkit-transform: rotate(102deg);\n  -moz-transform: rotate(102deg);\n  -ms-transform: rotate(102deg);\n  -o-transform: rotate(102deg);\n  transform: rotate(102deg); }\n.wi-wind.towards-103-deg {\n  -webkit-transform: rotate(103deg);\n  -moz-transform: rotate(103deg);\n  -ms-transform: rotate(103deg);\n  -o-transform: rotate(103deg);\n  transform: rotate(103deg); }\n.wi-wind.towards-104-deg {\n  -webkit-transform: rotate(104deg);\n  -moz-transform: rotate(104deg);\n  -ms-transform: rotate(104deg);\n  -o-transform: rotate(104deg);\n  transform: rotate(104deg); }\n.wi-wind.towards-105-deg {\n  -webkit-transform: rotate(105deg);\n  -moz-transform: rotate(105deg);\n  -ms-transform: rotate(105deg);\n  -o-transform: rotate(105deg);\n  transform: rotate(105deg); }\n.wi-wind.towards-106-deg {\n  -webkit-transform: rotate(106deg);\n  -moz-transform: rotate(106deg);\n  -ms-transform: rotate(106deg);\n  -o-transform: rotate(106deg);\n  transform: rotate(106deg); }\n.wi-wind.towards-107-deg {\n  -webkit-transform: rotate(107deg);\n  -moz-transform: rotate(107deg);\n  -ms-transform: rotate(107deg);\n  -o-transform: rotate(107deg);\n  transform: rotate(107deg); }\n.wi-wind.towards-108-deg {\n  -webkit-transform: rotate(108deg);\n  -moz-transform: rotate(108deg);\n  -ms-transform: rotate(108deg);\n  -o-transform: rotate(108deg);\n  transform: rotate(108deg); }\n.wi-wind.towards-109-deg {\n  -webkit-transform: rotate(109deg);\n  -moz-transform: rotate(109deg);\n  -ms-transform: rotate(109deg);\n  -o-transform: rotate(109deg);\n  transform: rotate(109deg); }\n.wi-wind.towards-110-deg {\n  -webkit-transform: rotate(110deg);\n  -moz-transform: rotate(110deg);\n  -ms-transform: rotate(110deg);\n  -o-transform: rotate(110deg);\n  transform: rotate(110deg); }\n.wi-wind.towards-111-deg {\n  -webkit-transform: rotate(111deg);\n  -moz-transform: rotate(111deg);\n  -ms-transform: rotate(111deg);\n  -o-transform: rotate(111deg);\n  transform: rotate(111deg); }\n.wi-wind.towards-112-deg {\n  -webkit-transform: rotate(112deg);\n  -moz-transform: rotate(112deg);\n  -ms-transform: rotate(112deg);\n  -o-transform: rotate(112deg);\n  transform: rotate(112deg); }\n.wi-wind.towards-113-deg {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n.wi-wind.towards-114-deg {\n  -webkit-transform: rotate(114deg);\n  -moz-transform: rotate(114deg);\n  -ms-transform: rotate(114deg);\n  -o-transform: rotate(114deg);\n  transform: rotate(114deg); }\n.wi-wind.towards-115-deg {\n  -webkit-transform: rotate(115deg);\n  -moz-transform: rotate(115deg);\n  -ms-transform: rotate(115deg);\n  -o-transform: rotate(115deg);\n  transform: rotate(115deg); }\n.wi-wind.towards-116-deg {\n  -webkit-transform: rotate(116deg);\n  -moz-transform: rotate(116deg);\n  -ms-transform: rotate(116deg);\n  -o-transform: rotate(116deg);\n  transform: rotate(116deg); }\n.wi-wind.towards-117-deg {\n  -webkit-transform: rotate(117deg);\n  -moz-transform: rotate(117deg);\n  -ms-transform: rotate(117deg);\n  -o-transform: rotate(117deg);\n  transform: rotate(117deg); }\n.wi-wind.towards-118-deg {\n  -webkit-transform: rotate(118deg);\n  -moz-transform: rotate(118deg);\n  -ms-transform: rotate(118deg);\n  -o-transform: rotate(118deg);\n  transform: rotate(118deg); }\n.wi-wind.towards-119-deg {\n  -webkit-transform: rotate(119deg);\n  -moz-transform: rotate(119deg);\n  -ms-transform: rotate(119deg);\n  -o-transform: rotate(119deg);\n  transform: rotate(119deg); }\n.wi-wind.towards-120-deg {\n  -webkit-transform: rotate(120deg);\n  -moz-transform: rotate(120deg);\n  -ms-transform: rotate(120deg);\n  -o-transform: rotate(120deg);\n  transform: rotate(120deg); }\n.wi-wind.towards-121-deg {\n  -webkit-transform: rotate(121deg);\n  -moz-transform: rotate(121deg);\n  -ms-transform: rotate(121deg);\n  -o-transform: rotate(121deg);\n  transform: rotate(121deg); }\n.wi-wind.towards-122-deg {\n  -webkit-transform: rotate(122deg);\n  -moz-transform: rotate(122deg);\n  -ms-transform: rotate(122deg);\n  -o-transform: rotate(122deg);\n  transform: rotate(122deg); }\n.wi-wind.towards-123-deg {\n  -webkit-transform: rotate(123deg);\n  -moz-transform: rotate(123deg);\n  -ms-transform: rotate(123deg);\n  -o-transform: rotate(123deg);\n  transform: rotate(123deg); }\n.wi-wind.towards-124-deg {\n  -webkit-transform: rotate(124deg);\n  -moz-transform: rotate(124deg);\n  -ms-transform: rotate(124deg);\n  -o-transform: rotate(124deg);\n  transform: rotate(124deg); }\n.wi-wind.towards-125-deg {\n  -webkit-transform: rotate(125deg);\n  -moz-transform: rotate(125deg);\n  -ms-transform: rotate(125deg);\n  -o-transform: rotate(125deg);\n  transform: rotate(125deg); }\n.wi-wind.towards-126-deg {\n  -webkit-transform: rotate(126deg);\n  -moz-transform: rotate(126deg);\n  -ms-transform: rotate(126deg);\n  -o-transform: rotate(126deg);\n  transform: rotate(126deg); }\n.wi-wind.towards-127-deg {\n  -webkit-transform: rotate(127deg);\n  -moz-transform: rotate(127deg);\n  -ms-transform: rotate(127deg);\n  -o-transform: rotate(127deg);\n  transform: rotate(127deg); }\n.wi-wind.towards-128-deg {\n  -webkit-transform: rotate(128deg);\n  -moz-transform: rotate(128deg);\n  -ms-transform: rotate(128deg);\n  -o-transform: rotate(128deg);\n  transform: rotate(128deg); }\n.wi-wind.towards-129-deg {\n  -webkit-transform: rotate(129deg);\n  -moz-transform: rotate(129deg);\n  -ms-transform: rotate(129deg);\n  -o-transform: rotate(129deg);\n  transform: rotate(129deg); }\n.wi-wind.towards-130-deg {\n  -webkit-transform: rotate(130deg);\n  -moz-transform: rotate(130deg);\n  -ms-transform: rotate(130deg);\n  -o-transform: rotate(130deg);\n  transform: rotate(130deg); }\n.wi-wind.towards-131-deg {\n  -webkit-transform: rotate(131deg);\n  -moz-transform: rotate(131deg);\n  -ms-transform: rotate(131deg);\n  -o-transform: rotate(131deg);\n  transform: rotate(131deg); }\n.wi-wind.towards-132-deg {\n  -webkit-transform: rotate(132deg);\n  -moz-transform: rotate(132deg);\n  -ms-transform: rotate(132deg);\n  -o-transform: rotate(132deg);\n  transform: rotate(132deg); }\n.wi-wind.towards-133-deg {\n  -webkit-transform: rotate(133deg);\n  -moz-transform: rotate(133deg);\n  -ms-transform: rotate(133deg);\n  -o-transform: rotate(133deg);\n  transform: rotate(133deg); }\n.wi-wind.towards-134-deg {\n  -webkit-transform: rotate(134deg);\n  -moz-transform: rotate(134deg);\n  -ms-transform: rotate(134deg);\n  -o-transform: rotate(134deg);\n  transform: rotate(134deg); }\n.wi-wind.towards-135-deg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n.wi-wind.towards-136-deg {\n  -webkit-transform: rotate(136deg);\n  -moz-transform: rotate(136deg);\n  -ms-transform: rotate(136deg);\n  -o-transform: rotate(136deg);\n  transform: rotate(136deg); }\n.wi-wind.towards-137-deg {\n  -webkit-transform: rotate(137deg);\n  -moz-transform: rotate(137deg);\n  -ms-transform: rotate(137deg);\n  -o-transform: rotate(137deg);\n  transform: rotate(137deg); }\n.wi-wind.towards-138-deg {\n  -webkit-transform: rotate(138deg);\n  -moz-transform: rotate(138deg);\n  -ms-transform: rotate(138deg);\n  -o-transform: rotate(138deg);\n  transform: rotate(138deg); }\n.wi-wind.towards-139-deg {\n  -webkit-transform: rotate(139deg);\n  -moz-transform: rotate(139deg);\n  -ms-transform: rotate(139deg);\n  -o-transform: rotate(139deg);\n  transform: rotate(139deg); }\n.wi-wind.towards-140-deg {\n  -webkit-transform: rotate(140deg);\n  -moz-transform: rotate(140deg);\n  -ms-transform: rotate(140deg);\n  -o-transform: rotate(140deg);\n  transform: rotate(140deg); }\n.wi-wind.towards-141-deg {\n  -webkit-transform: rotate(141deg);\n  -moz-transform: rotate(141deg);\n  -ms-transform: rotate(141deg);\n  -o-transform: rotate(141deg);\n  transform: rotate(141deg); }\n.wi-wind.towards-142-deg {\n  -webkit-transform: rotate(142deg);\n  -moz-transform: rotate(142deg);\n  -ms-transform: rotate(142deg);\n  -o-transform: rotate(142deg);\n  transform: rotate(142deg); }\n.wi-wind.towards-143-deg {\n  -webkit-transform: rotate(143deg);\n  -moz-transform: rotate(143deg);\n  -ms-transform: rotate(143deg);\n  -o-transform: rotate(143deg);\n  transform: rotate(143deg); }\n.wi-wind.towards-144-deg {\n  -webkit-transform: rotate(144deg);\n  -moz-transform: rotate(144deg);\n  -ms-transform: rotate(144deg);\n  -o-transform: rotate(144deg);\n  transform: rotate(144deg); }\n.wi-wind.towards-145-deg {\n  -webkit-transform: rotate(145deg);\n  -moz-transform: rotate(145deg);\n  -ms-transform: rotate(145deg);\n  -o-transform: rotate(145deg);\n  transform: rotate(145deg); }\n.wi-wind.towards-146-deg {\n  -webkit-transform: rotate(146deg);\n  -moz-transform: rotate(146deg);\n  -ms-transform: rotate(146deg);\n  -o-transform: rotate(146deg);\n  transform: rotate(146deg); }\n.wi-wind.towards-147-deg {\n  -webkit-transform: rotate(147deg);\n  -moz-transform: rotate(147deg);\n  -ms-transform: rotate(147deg);\n  -o-transform: rotate(147deg);\n  transform: rotate(147deg); }\n.wi-wind.towards-148-deg {\n  -webkit-transform: rotate(148deg);\n  -moz-transform: rotate(148deg);\n  -ms-transform: rotate(148deg);\n  -o-transform: rotate(148deg);\n  transform: rotate(148deg); }\n.wi-wind.towards-149-deg {\n  -webkit-transform: rotate(149deg);\n  -moz-transform: rotate(149deg);\n  -ms-transform: rotate(149deg);\n  -o-transform: rotate(149deg);\n  transform: rotate(149deg); }\n.wi-wind.towards-150-deg {\n  -webkit-transform: rotate(150deg);\n  -moz-transform: rotate(150deg);\n  -ms-transform: rotate(150deg);\n  -o-transform: rotate(150deg);\n  transform: rotate(150deg); }\n.wi-wind.towards-151-deg {\n  -webkit-transform: rotate(151deg);\n  -moz-transform: rotate(151deg);\n  -ms-transform: rotate(151deg);\n  -o-transform: rotate(151deg);\n  transform: rotate(151deg); }\n.wi-wind.towards-152-deg {\n  -webkit-transform: rotate(152deg);\n  -moz-transform: rotate(152deg);\n  -ms-transform: rotate(152deg);\n  -o-transform: rotate(152deg);\n  transform: rotate(152deg); }\n.wi-wind.towards-153-deg {\n  -webkit-transform: rotate(153deg);\n  -moz-transform: rotate(153deg);\n  -ms-transform: rotate(153deg);\n  -o-transform: rotate(153deg);\n  transform: rotate(153deg); }\n.wi-wind.towards-154-deg {\n  -webkit-transform: rotate(154deg);\n  -moz-transform: rotate(154deg);\n  -ms-transform: rotate(154deg);\n  -o-transform: rotate(154deg);\n  transform: rotate(154deg); }\n.wi-wind.towards-155-deg {\n  -webkit-transform: rotate(155deg);\n  -moz-transform: rotate(155deg);\n  -ms-transform: rotate(155deg);\n  -o-transform: rotate(155deg);\n  transform: rotate(155deg); }\n.wi-wind.towards-156-deg {\n  -webkit-transform: rotate(156deg);\n  -moz-transform: rotate(156deg);\n  -ms-transform: rotate(156deg);\n  -o-transform: rotate(156deg);\n  transform: rotate(156deg); }\n.wi-wind.towards-157-deg {\n  -webkit-transform: rotate(157deg);\n  -moz-transform: rotate(157deg);\n  -ms-transform: rotate(157deg);\n  -o-transform: rotate(157deg);\n  transform: rotate(157deg); }\n.wi-wind.towards-158-deg {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n.wi-wind.towards-159-deg {\n  -webkit-transform: rotate(159deg);\n  -moz-transform: rotate(159deg);\n  -ms-transform: rotate(159deg);\n  -o-transform: rotate(159deg);\n  transform: rotate(159deg); }\n.wi-wind.towards-160-deg {\n  -webkit-transform: rotate(160deg);\n  -moz-transform: rotate(160deg);\n  -ms-transform: rotate(160deg);\n  -o-transform: rotate(160deg);\n  transform: rotate(160deg); }\n.wi-wind.towards-161-deg {\n  -webkit-transform: rotate(161deg);\n  -moz-transform: rotate(161deg);\n  -ms-transform: rotate(161deg);\n  -o-transform: rotate(161deg);\n  transform: rotate(161deg); }\n.wi-wind.towards-162-deg {\n  -webkit-transform: rotate(162deg);\n  -moz-transform: rotate(162deg);\n  -ms-transform: rotate(162deg);\n  -o-transform: rotate(162deg);\n  transform: rotate(162deg); }\n.wi-wind.towards-163-deg {\n  -webkit-transform: rotate(163deg);\n  -moz-transform: rotate(163deg);\n  -ms-transform: rotate(163deg);\n  -o-transform: rotate(163deg);\n  transform: rotate(163deg); }\n.wi-wind.towards-164-deg {\n  -webkit-transform: rotate(164deg);\n  -moz-transform: rotate(164deg);\n  -ms-transform: rotate(164deg);\n  -o-transform: rotate(164deg);\n  transform: rotate(164deg); }\n.wi-wind.towards-165-deg {\n  -webkit-transform: rotate(165deg);\n  -moz-transform: rotate(165deg);\n  -ms-transform: rotate(165deg);\n  -o-transform: rotate(165deg);\n  transform: rotate(165deg); }\n.wi-wind.towards-166-deg {\n  -webkit-transform: rotate(166deg);\n  -moz-transform: rotate(166deg);\n  -ms-transform: rotate(166deg);\n  -o-transform: rotate(166deg);\n  transform: rotate(166deg); }\n.wi-wind.towards-167-deg {\n  -webkit-transform: rotate(167deg);\n  -moz-transform: rotate(167deg);\n  -ms-transform: rotate(167deg);\n  -o-transform: rotate(167deg);\n  transform: rotate(167deg); }\n.wi-wind.towards-168-deg {\n  -webkit-transform: rotate(168deg);\n  -moz-transform: rotate(168deg);\n  -ms-transform: rotate(168deg);\n  -o-transform: rotate(168deg);\n  transform: rotate(168deg); }\n.wi-wind.towards-169-deg {\n  -webkit-transform: rotate(169deg);\n  -moz-transform: rotate(169deg);\n  -ms-transform: rotate(169deg);\n  -o-transform: rotate(169deg);\n  transform: rotate(169deg); }\n.wi-wind.towards-170-deg {\n  -webkit-transform: rotate(170deg);\n  -moz-transform: rotate(170deg);\n  -ms-transform: rotate(170deg);\n  -o-transform: rotate(170deg);\n  transform: rotate(170deg); }\n.wi-wind.towards-171-deg {\n  -webkit-transform: rotate(171deg);\n  -moz-transform: rotate(171deg);\n  -ms-transform: rotate(171deg);\n  -o-transform: rotate(171deg);\n  transform: rotate(171deg); }\n.wi-wind.towards-172-deg {\n  -webkit-transform: rotate(172deg);\n  -moz-transform: rotate(172deg);\n  -ms-transform: rotate(172deg);\n  -o-transform: rotate(172deg);\n  transform: rotate(172deg); }\n.wi-wind.towards-173-deg {\n  -webkit-transform: rotate(173deg);\n  -moz-transform: rotate(173deg);\n  -ms-transform: rotate(173deg);\n  -o-transform: rotate(173deg);\n  transform: rotate(173deg); }\n.wi-wind.towards-174-deg {\n  -webkit-transform: rotate(174deg);\n  -moz-transform: rotate(174deg);\n  -ms-transform: rotate(174deg);\n  -o-transform: rotate(174deg);\n  transform: rotate(174deg); }\n.wi-wind.towards-175-deg {\n  -webkit-transform: rotate(175deg);\n  -moz-transform: rotate(175deg);\n  -ms-transform: rotate(175deg);\n  -o-transform: rotate(175deg);\n  transform: rotate(175deg); }\n.wi-wind.towards-176-deg {\n  -webkit-transform: rotate(176deg);\n  -moz-transform: rotate(176deg);\n  -ms-transform: rotate(176deg);\n  -o-transform: rotate(176deg);\n  transform: rotate(176deg); }\n.wi-wind.towards-177-deg {\n  -webkit-transform: rotate(177deg);\n  -moz-transform: rotate(177deg);\n  -ms-transform: rotate(177deg);\n  -o-transform: rotate(177deg);\n  transform: rotate(177deg); }\n.wi-wind.towards-178-deg {\n  -webkit-transform: rotate(178deg);\n  -moz-transform: rotate(178deg);\n  -ms-transform: rotate(178deg);\n  -o-transform: rotate(178deg);\n  transform: rotate(178deg); }\n.wi-wind.towards-179-deg {\n  -webkit-transform: rotate(179deg);\n  -moz-transform: rotate(179deg);\n  -ms-transform: rotate(179deg);\n  -o-transform: rotate(179deg);\n  transform: rotate(179deg); }\n.wi-wind.towards-180-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n.wi-wind.towards-181-deg {\n  -webkit-transform: rotate(181deg);\n  -moz-transform: rotate(181deg);\n  -ms-transform: rotate(181deg);\n  -o-transform: rotate(181deg);\n  transform: rotate(181deg); }\n.wi-wind.towards-182-deg {\n  -webkit-transform: rotate(182deg);\n  -moz-transform: rotate(182deg);\n  -ms-transform: rotate(182deg);\n  -o-transform: rotate(182deg);\n  transform: rotate(182deg); }\n.wi-wind.towards-183-deg {\n  -webkit-transform: rotate(183deg);\n  -moz-transform: rotate(183deg);\n  -ms-transform: rotate(183deg);\n  -o-transform: rotate(183deg);\n  transform: rotate(183deg); }\n.wi-wind.towards-184-deg {\n  -webkit-transform: rotate(184deg);\n  -moz-transform: rotate(184deg);\n  -ms-transform: rotate(184deg);\n  -o-transform: rotate(184deg);\n  transform: rotate(184deg); }\n.wi-wind.towards-185-deg {\n  -webkit-transform: rotate(185deg);\n  -moz-transform: rotate(185deg);\n  -ms-transform: rotate(185deg);\n  -o-transform: rotate(185deg);\n  transform: rotate(185deg); }\n.wi-wind.towards-186-deg {\n  -webkit-transform: rotate(186deg);\n  -moz-transform: rotate(186deg);\n  -ms-transform: rotate(186deg);\n  -o-transform: rotate(186deg);\n  transform: rotate(186deg); }\n.wi-wind.towards-187-deg {\n  -webkit-transform: rotate(187deg);\n  -moz-transform: rotate(187deg);\n  -ms-transform: rotate(187deg);\n  -o-transform: rotate(187deg);\n  transform: rotate(187deg); }\n.wi-wind.towards-188-deg {\n  -webkit-transform: rotate(188deg);\n  -moz-transform: rotate(188deg);\n  -ms-transform: rotate(188deg);\n  -o-transform: rotate(188deg);\n  transform: rotate(188deg); }\n.wi-wind.towards-189-deg {\n  -webkit-transform: rotate(189deg);\n  -moz-transform: rotate(189deg);\n  -ms-transform: rotate(189deg);\n  -o-transform: rotate(189deg);\n  transform: rotate(189deg); }\n.wi-wind.towards-190-deg {\n  -webkit-transform: rotate(190deg);\n  -moz-transform: rotate(190deg);\n  -ms-transform: rotate(190deg);\n  -o-transform: rotate(190deg);\n  transform: rotate(190deg); }\n.wi-wind.towards-191-deg {\n  -webkit-transform: rotate(191deg);\n  -moz-transform: rotate(191deg);\n  -ms-transform: rotate(191deg);\n  -o-transform: rotate(191deg);\n  transform: rotate(191deg); }\n.wi-wind.towards-192-deg {\n  -webkit-transform: rotate(192deg);\n  -moz-transform: rotate(192deg);\n  -ms-transform: rotate(192deg);\n  -o-transform: rotate(192deg);\n  transform: rotate(192deg); }\n.wi-wind.towards-193-deg {\n  -webkit-transform: rotate(193deg);\n  -moz-transform: rotate(193deg);\n  -ms-transform: rotate(193deg);\n  -o-transform: rotate(193deg);\n  transform: rotate(193deg); }\n.wi-wind.towards-194-deg {\n  -webkit-transform: rotate(194deg);\n  -moz-transform: rotate(194deg);\n  -ms-transform: rotate(194deg);\n  -o-transform: rotate(194deg);\n  transform: rotate(194deg); }\n.wi-wind.towards-195-deg {\n  -webkit-transform: rotate(195deg);\n  -moz-transform: rotate(195deg);\n  -ms-transform: rotate(195deg);\n  -o-transform: rotate(195deg);\n  transform: rotate(195deg); }\n.wi-wind.towards-196-deg {\n  -webkit-transform: rotate(196deg);\n  -moz-transform: rotate(196deg);\n  -ms-transform: rotate(196deg);\n  -o-transform: rotate(196deg);\n  transform: rotate(196deg); }\n.wi-wind.towards-197-deg {\n  -webkit-transform: rotate(197deg);\n  -moz-transform: rotate(197deg);\n  -ms-transform: rotate(197deg);\n  -o-transform: rotate(197deg);\n  transform: rotate(197deg); }\n.wi-wind.towards-198-deg {\n  -webkit-transform: rotate(198deg);\n  -moz-transform: rotate(198deg);\n  -ms-transform: rotate(198deg);\n  -o-transform: rotate(198deg);\n  transform: rotate(198deg); }\n.wi-wind.towards-199-deg {\n  -webkit-transform: rotate(199deg);\n  -moz-transform: rotate(199deg);\n  -ms-transform: rotate(199deg);\n  -o-transform: rotate(199deg);\n  transform: rotate(199deg); }\n.wi-wind.towards-200-deg {\n  -webkit-transform: rotate(200deg);\n  -moz-transform: rotate(200deg);\n  -ms-transform: rotate(200deg);\n  -o-transform: rotate(200deg);\n  transform: rotate(200deg); }\n.wi-wind.towards-201-deg {\n  -webkit-transform: rotate(201deg);\n  -moz-transform: rotate(201deg);\n  -ms-transform: rotate(201deg);\n  -o-transform: rotate(201deg);\n  transform: rotate(201deg); }\n.wi-wind.towards-202-deg {\n  -webkit-transform: rotate(202deg);\n  -moz-transform: rotate(202deg);\n  -ms-transform: rotate(202deg);\n  -o-transform: rotate(202deg);\n  transform: rotate(202deg); }\n.wi-wind.towards-203-deg {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n.wi-wind.towards-204-deg {\n  -webkit-transform: rotate(204deg);\n  -moz-transform: rotate(204deg);\n  -ms-transform: rotate(204deg);\n  -o-transform: rotate(204deg);\n  transform: rotate(204deg); }\n.wi-wind.towards-205-deg {\n  -webkit-transform: rotate(205deg);\n  -moz-transform: rotate(205deg);\n  -ms-transform: rotate(205deg);\n  -o-transform: rotate(205deg);\n  transform: rotate(205deg); }\n.wi-wind.towards-206-deg {\n  -webkit-transform: rotate(206deg);\n  -moz-transform: rotate(206deg);\n  -ms-transform: rotate(206deg);\n  -o-transform: rotate(206deg);\n  transform: rotate(206deg); }\n.wi-wind.towards-207-deg {\n  -webkit-transform: rotate(207deg);\n  -moz-transform: rotate(207deg);\n  -ms-transform: rotate(207deg);\n  -o-transform: rotate(207deg);\n  transform: rotate(207deg); }\n.wi-wind.towards-208-deg {\n  -webkit-transform: rotate(208deg);\n  -moz-transform: rotate(208deg);\n  -ms-transform: rotate(208deg);\n  -o-transform: rotate(208deg);\n  transform: rotate(208deg); }\n.wi-wind.towards-209-deg {\n  -webkit-transform: rotate(209deg);\n  -moz-transform: rotate(209deg);\n  -ms-transform: rotate(209deg);\n  -o-transform: rotate(209deg);\n  transform: rotate(209deg); }\n.wi-wind.towards-210-deg {\n  -webkit-transform: rotate(210deg);\n  -moz-transform: rotate(210deg);\n  -ms-transform: rotate(210deg);\n  -o-transform: rotate(210deg);\n  transform: rotate(210deg); }\n.wi-wind.towards-211-deg {\n  -webkit-transform: rotate(211deg);\n  -moz-transform: rotate(211deg);\n  -ms-transform: rotate(211deg);\n  -o-transform: rotate(211deg);\n  transform: rotate(211deg); }\n.wi-wind.towards-212-deg {\n  -webkit-transform: rotate(212deg);\n  -moz-transform: rotate(212deg);\n  -ms-transform: rotate(212deg);\n  -o-transform: rotate(212deg);\n  transform: rotate(212deg); }\n.wi-wind.towards-213-deg {\n  -webkit-transform: rotate(213deg);\n  -moz-transform: rotate(213deg);\n  -ms-transform: rotate(213deg);\n  -o-transform: rotate(213deg);\n  transform: rotate(213deg); }\n.wi-wind.towards-214-deg {\n  -webkit-transform: rotate(214deg);\n  -moz-transform: rotate(214deg);\n  -ms-transform: rotate(214deg);\n  -o-transform: rotate(214deg);\n  transform: rotate(214deg); }\n.wi-wind.towards-215-deg {\n  -webkit-transform: rotate(215deg);\n  -moz-transform: rotate(215deg);\n  -ms-transform: rotate(215deg);\n  -o-transform: rotate(215deg);\n  transform: rotate(215deg); }\n.wi-wind.towards-216-deg {\n  -webkit-transform: rotate(216deg);\n  -moz-transform: rotate(216deg);\n  -ms-transform: rotate(216deg);\n  -o-transform: rotate(216deg);\n  transform: rotate(216deg); }\n.wi-wind.towards-217-deg {\n  -webkit-transform: rotate(217deg);\n  -moz-transform: rotate(217deg);\n  -ms-transform: rotate(217deg);\n  -o-transform: rotate(217deg);\n  transform: rotate(217deg); }\n.wi-wind.towards-218-deg {\n  -webkit-transform: rotate(218deg);\n  -moz-transform: rotate(218deg);\n  -ms-transform: rotate(218deg);\n  -o-transform: rotate(218deg);\n  transform: rotate(218deg); }\n.wi-wind.towards-219-deg {\n  -webkit-transform: rotate(219deg);\n  -moz-transform: rotate(219deg);\n  -ms-transform: rotate(219deg);\n  -o-transform: rotate(219deg);\n  transform: rotate(219deg); }\n.wi-wind.towards-220-deg {\n  -webkit-transform: rotate(220deg);\n  -moz-transform: rotate(220deg);\n  -ms-transform: rotate(220deg);\n  -o-transform: rotate(220deg);\n  transform: rotate(220deg); }\n.wi-wind.towards-221-deg {\n  -webkit-transform: rotate(221deg);\n  -moz-transform: rotate(221deg);\n  -ms-transform: rotate(221deg);\n  -o-transform: rotate(221deg);\n  transform: rotate(221deg); }\n.wi-wind.towards-222-deg {\n  -webkit-transform: rotate(222deg);\n  -moz-transform: rotate(222deg);\n  -ms-transform: rotate(222deg);\n  -o-transform: rotate(222deg);\n  transform: rotate(222deg); }\n.wi-wind.towards-223-deg {\n  -webkit-transform: rotate(223deg);\n  -moz-transform: rotate(223deg);\n  -ms-transform: rotate(223deg);\n  -o-transform: rotate(223deg);\n  transform: rotate(223deg); }\n.wi-wind.towards-224-deg {\n  -webkit-transform: rotate(224deg);\n  -moz-transform: rotate(224deg);\n  -ms-transform: rotate(224deg);\n  -o-transform: rotate(224deg);\n  transform: rotate(224deg); }\n.wi-wind.towards-225-deg {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n.wi-wind.towards-226-deg {\n  -webkit-transform: rotate(226deg);\n  -moz-transform: rotate(226deg);\n  -ms-transform: rotate(226deg);\n  -o-transform: rotate(226deg);\n  transform: rotate(226deg); }\n.wi-wind.towards-227-deg {\n  -webkit-transform: rotate(227deg);\n  -moz-transform: rotate(227deg);\n  -ms-transform: rotate(227deg);\n  -o-transform: rotate(227deg);\n  transform: rotate(227deg); }\n.wi-wind.towards-228-deg {\n  -webkit-transform: rotate(228deg);\n  -moz-transform: rotate(228deg);\n  -ms-transform: rotate(228deg);\n  -o-transform: rotate(228deg);\n  transform: rotate(228deg); }\n.wi-wind.towards-229-deg {\n  -webkit-transform: rotate(229deg);\n  -moz-transform: rotate(229deg);\n  -ms-transform: rotate(229deg);\n  -o-transform: rotate(229deg);\n  transform: rotate(229deg); }\n.wi-wind.towards-230-deg {\n  -webkit-transform: rotate(230deg);\n  -moz-transform: rotate(230deg);\n  -ms-transform: rotate(230deg);\n  -o-transform: rotate(230deg);\n  transform: rotate(230deg); }\n.wi-wind.towards-231-deg {\n  -webkit-transform: rotate(231deg);\n  -moz-transform: rotate(231deg);\n  -ms-transform: rotate(231deg);\n  -o-transform: rotate(231deg);\n  transform: rotate(231deg); }\n.wi-wind.towards-232-deg {\n  -webkit-transform: rotate(232deg);\n  -moz-transform: rotate(232deg);\n  -ms-transform: rotate(232deg);\n  -o-transform: rotate(232deg);\n  transform: rotate(232deg); }\n.wi-wind.towards-233-deg {\n  -webkit-transform: rotate(233deg);\n  -moz-transform: rotate(233deg);\n  -ms-transform: rotate(233deg);\n  -o-transform: rotate(233deg);\n  transform: rotate(233deg); }\n.wi-wind.towards-234-deg {\n  -webkit-transform: rotate(234deg);\n  -moz-transform: rotate(234deg);\n  -ms-transform: rotate(234deg);\n  -o-transform: rotate(234deg);\n  transform: rotate(234deg); }\n.wi-wind.towards-235-deg {\n  -webkit-transform: rotate(235deg);\n  -moz-transform: rotate(235deg);\n  -ms-transform: rotate(235deg);\n  -o-transform: rotate(235deg);\n  transform: rotate(235deg); }\n.wi-wind.towards-236-deg {\n  -webkit-transform: rotate(236deg);\n  -moz-transform: rotate(236deg);\n  -ms-transform: rotate(236deg);\n  -o-transform: rotate(236deg);\n  transform: rotate(236deg); }\n.wi-wind.towards-237-deg {\n  -webkit-transform: rotate(237deg);\n  -moz-transform: rotate(237deg);\n  -ms-transform: rotate(237deg);\n  -o-transform: rotate(237deg);\n  transform: rotate(237deg); }\n.wi-wind.towards-238-deg {\n  -webkit-transform: rotate(238deg);\n  -moz-transform: rotate(238deg);\n  -ms-transform: rotate(238deg);\n  -o-transform: rotate(238deg);\n  transform: rotate(238deg); }\n.wi-wind.towards-239-deg {\n  -webkit-transform: rotate(239deg);\n  -moz-transform: rotate(239deg);\n  -ms-transform: rotate(239deg);\n  -o-transform: rotate(239deg);\n  transform: rotate(239deg); }\n.wi-wind.towards-240-deg {\n  -webkit-transform: rotate(240deg);\n  -moz-transform: rotate(240deg);\n  -ms-transform: rotate(240deg);\n  -o-transform: rotate(240deg);\n  transform: rotate(240deg); }\n.wi-wind.towards-241-deg {\n  -webkit-transform: rotate(241deg);\n  -moz-transform: rotate(241deg);\n  -ms-transform: rotate(241deg);\n  -o-transform: rotate(241deg);\n  transform: rotate(241deg); }\n.wi-wind.towards-242-deg {\n  -webkit-transform: rotate(242deg);\n  -moz-transform: rotate(242deg);\n  -ms-transform: rotate(242deg);\n  -o-transform: rotate(242deg);\n  transform: rotate(242deg); }\n.wi-wind.towards-243-deg {\n  -webkit-transform: rotate(243deg);\n  -moz-transform: rotate(243deg);\n  -ms-transform: rotate(243deg);\n  -o-transform: rotate(243deg);\n  transform: rotate(243deg); }\n.wi-wind.towards-244-deg {\n  -webkit-transform: rotate(244deg);\n  -moz-transform: rotate(244deg);\n  -ms-transform: rotate(244deg);\n  -o-transform: rotate(244deg);\n  transform: rotate(244deg); }\n.wi-wind.towards-245-deg {\n  -webkit-transform: rotate(245deg);\n  -moz-transform: rotate(245deg);\n  -ms-transform: rotate(245deg);\n  -o-transform: rotate(245deg);\n  transform: rotate(245deg); }\n.wi-wind.towards-246-deg {\n  -webkit-transform: rotate(246deg);\n  -moz-transform: rotate(246deg);\n  -ms-transform: rotate(246deg);\n  -o-transform: rotate(246deg);\n  transform: rotate(246deg); }\n.wi-wind.towards-247-deg {\n  -webkit-transform: rotate(247deg);\n  -moz-transform: rotate(247deg);\n  -ms-transform: rotate(247deg);\n  -o-transform: rotate(247deg);\n  transform: rotate(247deg); }\n.wi-wind.towards-248-deg {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n.wi-wind.towards-249-deg {\n  -webkit-transform: rotate(249deg);\n  -moz-transform: rotate(249deg);\n  -ms-transform: rotate(249deg);\n  -o-transform: rotate(249deg);\n  transform: rotate(249deg); }\n.wi-wind.towards-250-deg {\n  -webkit-transform: rotate(250deg);\n  -moz-transform: rotate(250deg);\n  -ms-transform: rotate(250deg);\n  -o-transform: rotate(250deg);\n  transform: rotate(250deg); }\n.wi-wind.towards-251-deg {\n  -webkit-transform: rotate(251deg);\n  -moz-transform: rotate(251deg);\n  -ms-transform: rotate(251deg);\n  -o-transform: rotate(251deg);\n  transform: rotate(251deg); }\n.wi-wind.towards-252-deg {\n  -webkit-transform: rotate(252deg);\n  -moz-transform: rotate(252deg);\n  -ms-transform: rotate(252deg);\n  -o-transform: rotate(252deg);\n  transform: rotate(252deg); }\n.wi-wind.towards-253-deg {\n  -webkit-transform: rotate(253deg);\n  -moz-transform: rotate(253deg);\n  -ms-transform: rotate(253deg);\n  -o-transform: rotate(253deg);\n  transform: rotate(253deg); }\n.wi-wind.towards-254-deg {\n  -webkit-transform: rotate(254deg);\n  -moz-transform: rotate(254deg);\n  -ms-transform: rotate(254deg);\n  -o-transform: rotate(254deg);\n  transform: rotate(254deg); }\n.wi-wind.towards-255-deg {\n  -webkit-transform: rotate(255deg);\n  -moz-transform: rotate(255deg);\n  -ms-transform: rotate(255deg);\n  -o-transform: rotate(255deg);\n  transform: rotate(255deg); }\n.wi-wind.towards-256-deg {\n  -webkit-transform: rotate(256deg);\n  -moz-transform: rotate(256deg);\n  -ms-transform: rotate(256deg);\n  -o-transform: rotate(256deg);\n  transform: rotate(256deg); }\n.wi-wind.towards-257-deg {\n  -webkit-transform: rotate(257deg);\n  -moz-transform: rotate(257deg);\n  -ms-transform: rotate(257deg);\n  -o-transform: rotate(257deg);\n  transform: rotate(257deg); }\n.wi-wind.towards-258-deg {\n  -webkit-transform: rotate(258deg);\n  -moz-transform: rotate(258deg);\n  -ms-transform: rotate(258deg);\n  -o-transform: rotate(258deg);\n  transform: rotate(258deg); }\n.wi-wind.towards-259-deg {\n  -webkit-transform: rotate(259deg);\n  -moz-transform: rotate(259deg);\n  -ms-transform: rotate(259deg);\n  -o-transform: rotate(259deg);\n  transform: rotate(259deg); }\n.wi-wind.towards-260-deg {\n  -webkit-transform: rotate(260deg);\n  -moz-transform: rotate(260deg);\n  -ms-transform: rotate(260deg);\n  -o-transform: rotate(260deg);\n  transform: rotate(260deg); }\n.wi-wind.towards-261-deg {\n  -webkit-transform: rotate(261deg);\n  -moz-transform: rotate(261deg);\n  -ms-transform: rotate(261deg);\n  -o-transform: rotate(261deg);\n  transform: rotate(261deg); }\n.wi-wind.towards-262-deg {\n  -webkit-transform: rotate(262deg);\n  -moz-transform: rotate(262deg);\n  -ms-transform: rotate(262deg);\n  -o-transform: rotate(262deg);\n  transform: rotate(262deg); }\n.wi-wind.towards-263-deg {\n  -webkit-transform: rotate(263deg);\n  -moz-transform: rotate(263deg);\n  -ms-transform: rotate(263deg);\n  -o-transform: rotate(263deg);\n  transform: rotate(263deg); }\n.wi-wind.towards-264-deg {\n  -webkit-transform: rotate(264deg);\n  -moz-transform: rotate(264deg);\n  -ms-transform: rotate(264deg);\n  -o-transform: rotate(264deg);\n  transform: rotate(264deg); }\n.wi-wind.towards-265-deg {\n  -webkit-transform: rotate(265deg);\n  -moz-transform: rotate(265deg);\n  -ms-transform: rotate(265deg);\n  -o-transform: rotate(265deg);\n  transform: rotate(265deg); }\n.wi-wind.towards-266-deg {\n  -webkit-transform: rotate(266deg);\n  -moz-transform: rotate(266deg);\n  -ms-transform: rotate(266deg);\n  -o-transform: rotate(266deg);\n  transform: rotate(266deg); }\n.wi-wind.towards-267-deg {\n  -webkit-transform: rotate(267deg);\n  -moz-transform: rotate(267deg);\n  -ms-transform: rotate(267deg);\n  -o-transform: rotate(267deg);\n  transform: rotate(267deg); }\n.wi-wind.towards-268-deg {\n  -webkit-transform: rotate(268deg);\n  -moz-transform: rotate(268deg);\n  -ms-transform: rotate(268deg);\n  -o-transform: rotate(268deg);\n  transform: rotate(268deg); }\n.wi-wind.towards-269-deg {\n  -webkit-transform: rotate(269deg);\n  -moz-transform: rotate(269deg);\n  -ms-transform: rotate(269deg);\n  -o-transform: rotate(269deg);\n  transform: rotate(269deg); }\n.wi-wind.towards-270-deg {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n.wi-wind.towards-271-deg {\n  -webkit-transform: rotate(271deg);\n  -moz-transform: rotate(271deg);\n  -ms-transform: rotate(271deg);\n  -o-transform: rotate(271deg);\n  transform: rotate(271deg); }\n.wi-wind.towards-272-deg {\n  -webkit-transform: rotate(272deg);\n  -moz-transform: rotate(272deg);\n  -ms-transform: rotate(272deg);\n  -o-transform: rotate(272deg);\n  transform: rotate(272deg); }\n.wi-wind.towards-273-deg {\n  -webkit-transform: rotate(273deg);\n  -moz-transform: rotate(273deg);\n  -ms-transform: rotate(273deg);\n  -o-transform: rotate(273deg);\n  transform: rotate(273deg); }\n.wi-wind.towards-274-deg {\n  -webkit-transform: rotate(274deg);\n  -moz-transform: rotate(274deg);\n  -ms-transform: rotate(274deg);\n  -o-transform: rotate(274deg);\n  transform: rotate(274deg); }\n.wi-wind.towards-275-deg {\n  -webkit-transform: rotate(275deg);\n  -moz-transform: rotate(275deg);\n  -ms-transform: rotate(275deg);\n  -o-transform: rotate(275deg);\n  transform: rotate(275deg); }\n.wi-wind.towards-276-deg {\n  -webkit-transform: rotate(276deg);\n  -moz-transform: rotate(276deg);\n  -ms-transform: rotate(276deg);\n  -o-transform: rotate(276deg);\n  transform: rotate(276deg); }\n.wi-wind.towards-277-deg {\n  -webkit-transform: rotate(277deg);\n  -moz-transform: rotate(277deg);\n  -ms-transform: rotate(277deg);\n  -o-transform: rotate(277deg);\n  transform: rotate(277deg); }\n.wi-wind.towards-278-deg {\n  -webkit-transform: rotate(278deg);\n  -moz-transform: rotate(278deg);\n  -ms-transform: rotate(278deg);\n  -o-transform: rotate(278deg);\n  transform: rotate(278deg); }\n.wi-wind.towards-279-deg {\n  -webkit-transform: rotate(279deg);\n  -moz-transform: rotate(279deg);\n  -ms-transform: rotate(279deg);\n  -o-transform: rotate(279deg);\n  transform: rotate(279deg); }\n.wi-wind.towards-280-deg {\n  -webkit-transform: rotate(280deg);\n  -moz-transform: rotate(280deg);\n  -ms-transform: rotate(280deg);\n  -o-transform: rotate(280deg);\n  transform: rotate(280deg); }\n.wi-wind.towards-281-deg {\n  -webkit-transform: rotate(281deg);\n  -moz-transform: rotate(281deg);\n  -ms-transform: rotate(281deg);\n  -o-transform: rotate(281deg);\n  transform: rotate(281deg); }\n.wi-wind.towards-282-deg {\n  -webkit-transform: rotate(282deg);\n  -moz-transform: rotate(282deg);\n  -ms-transform: rotate(282deg);\n  -o-transform: rotate(282deg);\n  transform: rotate(282deg); }\n.wi-wind.towards-283-deg {\n  -webkit-transform: rotate(283deg);\n  -moz-transform: rotate(283deg);\n  -ms-transform: rotate(283deg);\n  -o-transform: rotate(283deg);\n  transform: rotate(283deg); }\n.wi-wind.towards-284-deg {\n  -webkit-transform: rotate(284deg);\n  -moz-transform: rotate(284deg);\n  -ms-transform: rotate(284deg);\n  -o-transform: rotate(284deg);\n  transform: rotate(284deg); }\n.wi-wind.towards-285-deg {\n  -webkit-transform: rotate(285deg);\n  -moz-transform: rotate(285deg);\n  -ms-transform: rotate(285deg);\n  -o-transform: rotate(285deg);\n  transform: rotate(285deg); }\n.wi-wind.towards-286-deg {\n  -webkit-transform: rotate(286deg);\n  -moz-transform: rotate(286deg);\n  -ms-transform: rotate(286deg);\n  -o-transform: rotate(286deg);\n  transform: rotate(286deg); }\n.wi-wind.towards-287-deg {\n  -webkit-transform: rotate(287deg);\n  -moz-transform: rotate(287deg);\n  -ms-transform: rotate(287deg);\n  -o-transform: rotate(287deg);\n  transform: rotate(287deg); }\n.wi-wind.towards-288-deg {\n  -webkit-transform: rotate(288deg);\n  -moz-transform: rotate(288deg);\n  -ms-transform: rotate(288deg);\n  -o-transform: rotate(288deg);\n  transform: rotate(288deg); }\n.wi-wind.towards-289-deg {\n  -webkit-transform: rotate(289deg);\n  -moz-transform: rotate(289deg);\n  -ms-transform: rotate(289deg);\n  -o-transform: rotate(289deg);\n  transform: rotate(289deg); }\n.wi-wind.towards-290-deg {\n  -webkit-transform: rotate(290deg);\n  -moz-transform: rotate(290deg);\n  -ms-transform: rotate(290deg);\n  -o-transform: rotate(290deg);\n  transform: rotate(290deg); }\n.wi-wind.towards-291-deg {\n  -webkit-transform: rotate(291deg);\n  -moz-transform: rotate(291deg);\n  -ms-transform: rotate(291deg);\n  -o-transform: rotate(291deg);\n  transform: rotate(291deg); }\n.wi-wind.towards-292-deg {\n  -webkit-transform: rotate(292deg);\n  -moz-transform: rotate(292deg);\n  -ms-transform: rotate(292deg);\n  -o-transform: rotate(292deg);\n  transform: rotate(292deg); }\n.wi-wind.towards-293-deg {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n.wi-wind.towards-294-deg {\n  -webkit-transform: rotate(294deg);\n  -moz-transform: rotate(294deg);\n  -ms-transform: rotate(294deg);\n  -o-transform: rotate(294deg);\n  transform: rotate(294deg); }\n.wi-wind.towards-295-deg {\n  -webkit-transform: rotate(295deg);\n  -moz-transform: rotate(295deg);\n  -ms-transform: rotate(295deg);\n  -o-transform: rotate(295deg);\n  transform: rotate(295deg); }\n.wi-wind.towards-296-deg {\n  -webkit-transform: rotate(296deg);\n  -moz-transform: rotate(296deg);\n  -ms-transform: rotate(296deg);\n  -o-transform: rotate(296deg);\n  transform: rotate(296deg); }\n.wi-wind.towards-297-deg {\n  -webkit-transform: rotate(297deg);\n  -moz-transform: rotate(297deg);\n  -ms-transform: rotate(297deg);\n  -o-transform: rotate(297deg);\n  transform: rotate(297deg); }\n.wi-wind.towards-298-deg {\n  -webkit-transform: rotate(298deg);\n  -moz-transform: rotate(298deg);\n  -ms-transform: rotate(298deg);\n  -o-transform: rotate(298deg);\n  transform: rotate(298deg); }\n.wi-wind.towards-299-deg {\n  -webkit-transform: rotate(299deg);\n  -moz-transform: rotate(299deg);\n  -ms-transform: rotate(299deg);\n  -o-transform: rotate(299deg);\n  transform: rotate(299deg); }\n.wi-wind.towards-300-deg {\n  -webkit-transform: rotate(300deg);\n  -moz-transform: rotate(300deg);\n  -ms-transform: rotate(300deg);\n  -o-transform: rotate(300deg);\n  transform: rotate(300deg); }\n.wi-wind.towards-301-deg {\n  -webkit-transform: rotate(301deg);\n  -moz-transform: rotate(301deg);\n  -ms-transform: rotate(301deg);\n  -o-transform: rotate(301deg);\n  transform: rotate(301deg); }\n.wi-wind.towards-302-deg {\n  -webkit-transform: rotate(302deg);\n  -moz-transform: rotate(302deg);\n  -ms-transform: rotate(302deg);\n  -o-transform: rotate(302deg);\n  transform: rotate(302deg); }\n.wi-wind.towards-303-deg {\n  -webkit-transform: rotate(303deg);\n  -moz-transform: rotate(303deg);\n  -ms-transform: rotate(303deg);\n  -o-transform: rotate(303deg);\n  transform: rotate(303deg); }\n.wi-wind.towards-304-deg {\n  -webkit-transform: rotate(304deg);\n  -moz-transform: rotate(304deg);\n  -ms-transform: rotate(304deg);\n  -o-transform: rotate(304deg);\n  transform: rotate(304deg); }\n.wi-wind.towards-305-deg {\n  -webkit-transform: rotate(305deg);\n  -moz-transform: rotate(305deg);\n  -ms-transform: rotate(305deg);\n  -o-transform: rotate(305deg);\n  transform: rotate(305deg); }\n.wi-wind.towards-306-deg {\n  -webkit-transform: rotate(306deg);\n  -moz-transform: rotate(306deg);\n  -ms-transform: rotate(306deg);\n  -o-transform: rotate(306deg);\n  transform: rotate(306deg); }\n.wi-wind.towards-307-deg {\n  -webkit-transform: rotate(307deg);\n  -moz-transform: rotate(307deg);\n  -ms-transform: rotate(307deg);\n  -o-transform: rotate(307deg);\n  transform: rotate(307deg); }\n.wi-wind.towards-308-deg {\n  -webkit-transform: rotate(308deg);\n  -moz-transform: rotate(308deg);\n  -ms-transform: rotate(308deg);\n  -o-transform: rotate(308deg);\n  transform: rotate(308deg); }\n.wi-wind.towards-309-deg {\n  -webkit-transform: rotate(309deg);\n  -moz-transform: rotate(309deg);\n  -ms-transform: rotate(309deg);\n  -o-transform: rotate(309deg);\n  transform: rotate(309deg); }\n.wi-wind.towards-310-deg {\n  -webkit-transform: rotate(310deg);\n  -moz-transform: rotate(310deg);\n  -ms-transform: rotate(310deg);\n  -o-transform: rotate(310deg);\n  transform: rotate(310deg); }\n.wi-wind.towards-311-deg {\n  -webkit-transform: rotate(311deg);\n  -moz-transform: rotate(311deg);\n  -ms-transform: rotate(311deg);\n  -o-transform: rotate(311deg);\n  transform: rotate(311deg); }\n.wi-wind.towards-312-deg {\n  -webkit-transform: rotate(312deg);\n  -moz-transform: rotate(312deg);\n  -ms-transform: rotate(312deg);\n  -o-transform: rotate(312deg);\n  transform: rotate(312deg); }\n.wi-wind.towards-313-deg {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n.wi-wind.towards-314-deg {\n  -webkit-transform: rotate(314deg);\n  -moz-transform: rotate(314deg);\n  -ms-transform: rotate(314deg);\n  -o-transform: rotate(314deg);\n  transform: rotate(314deg); }\n.wi-wind.towards-315-deg {\n  -webkit-transform: rotate(315deg);\n  -moz-transform: rotate(315deg);\n  -ms-transform: rotate(315deg);\n  -o-transform: rotate(315deg);\n  transform: rotate(315deg); }\n.wi-wind.towards-316-deg {\n  -webkit-transform: rotate(316deg);\n  -moz-transform: rotate(316deg);\n  -ms-transform: rotate(316deg);\n  -o-transform: rotate(316deg);\n  transform: rotate(316deg); }\n.wi-wind.towards-317-deg {\n  -webkit-transform: rotate(317deg);\n  -moz-transform: rotate(317deg);\n  -ms-transform: rotate(317deg);\n  -o-transform: rotate(317deg);\n  transform: rotate(317deg); }\n.wi-wind.towards-318-deg {\n  -webkit-transform: rotate(318deg);\n  -moz-transform: rotate(318deg);\n  -ms-transform: rotate(318deg);\n  -o-transform: rotate(318deg);\n  transform: rotate(318deg); }\n.wi-wind.towards-319-deg {\n  -webkit-transform: rotate(319deg);\n  -moz-transform: rotate(319deg);\n  -ms-transform: rotate(319deg);\n  -o-transform: rotate(319deg);\n  transform: rotate(319deg); }\n.wi-wind.towards-320-deg {\n  -webkit-transform: rotate(320deg);\n  -moz-transform: rotate(320deg);\n  -ms-transform: rotate(320deg);\n  -o-transform: rotate(320deg);\n  transform: rotate(320deg); }\n.wi-wind.towards-321-deg {\n  -webkit-transform: rotate(321deg);\n  -moz-transform: rotate(321deg);\n  -ms-transform: rotate(321deg);\n  -o-transform: rotate(321deg);\n  transform: rotate(321deg); }\n.wi-wind.towards-322-deg {\n  -webkit-transform: rotate(322deg);\n  -moz-transform: rotate(322deg);\n  -ms-transform: rotate(322deg);\n  -o-transform: rotate(322deg);\n  transform: rotate(322deg); }\n.wi-wind.towards-323-deg {\n  -webkit-transform: rotate(323deg);\n  -moz-transform: rotate(323deg);\n  -ms-transform: rotate(323deg);\n  -o-transform: rotate(323deg);\n  transform: rotate(323deg); }\n.wi-wind.towards-324-deg {\n  -webkit-transform: rotate(324deg);\n  -moz-transform: rotate(324deg);\n  -ms-transform: rotate(324deg);\n  -o-transform: rotate(324deg);\n  transform: rotate(324deg); }\n.wi-wind.towards-325-deg {\n  -webkit-transform: rotate(325deg);\n  -moz-transform: rotate(325deg);\n  -ms-transform: rotate(325deg);\n  -o-transform: rotate(325deg);\n  transform: rotate(325deg); }\n.wi-wind.towards-326-deg {\n  -webkit-transform: rotate(326deg);\n  -moz-transform: rotate(326deg);\n  -ms-transform: rotate(326deg);\n  -o-transform: rotate(326deg);\n  transform: rotate(326deg); }\n.wi-wind.towards-327-deg {\n  -webkit-transform: rotate(327deg);\n  -moz-transform: rotate(327deg);\n  -ms-transform: rotate(327deg);\n  -o-transform: rotate(327deg);\n  transform: rotate(327deg); }\n.wi-wind.towards-328-deg {\n  -webkit-transform: rotate(328deg);\n  -moz-transform: rotate(328deg);\n  -ms-transform: rotate(328deg);\n  -o-transform: rotate(328deg);\n  transform: rotate(328deg); }\n.wi-wind.towards-329-deg {\n  -webkit-transform: rotate(329deg);\n  -moz-transform: rotate(329deg);\n  -ms-transform: rotate(329deg);\n  -o-transform: rotate(329deg);\n  transform: rotate(329deg); }\n.wi-wind.towards-330-deg {\n  -webkit-transform: rotate(330deg);\n  -moz-transform: rotate(330deg);\n  -ms-transform: rotate(330deg);\n  -o-transform: rotate(330deg);\n  transform: rotate(330deg); }\n.wi-wind.towards-331-deg {\n  -webkit-transform: rotate(331deg);\n  -moz-transform: rotate(331deg);\n  -ms-transform: rotate(331deg);\n  -o-transform: rotate(331deg);\n  transform: rotate(331deg); }\n.wi-wind.towards-332-deg {\n  -webkit-transform: rotate(332deg);\n  -moz-transform: rotate(332deg);\n  -ms-transform: rotate(332deg);\n  -o-transform: rotate(332deg);\n  transform: rotate(332deg); }\n.wi-wind.towards-333-deg {\n  -webkit-transform: rotate(333deg);\n  -moz-transform: rotate(333deg);\n  -ms-transform: rotate(333deg);\n  -o-transform: rotate(333deg);\n  transform: rotate(333deg); }\n.wi-wind.towards-334-deg {\n  -webkit-transform: rotate(334deg);\n  -moz-transform: rotate(334deg);\n  -ms-transform: rotate(334deg);\n  -o-transform: rotate(334deg);\n  transform: rotate(334deg); }\n.wi-wind.towards-335-deg {\n  -webkit-transform: rotate(335deg);\n  -moz-transform: rotate(335deg);\n  -ms-transform: rotate(335deg);\n  -o-transform: rotate(335deg);\n  transform: rotate(335deg); }\n.wi-wind.towards-336-deg {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n.wi-wind.towards-337-deg {\n  -webkit-transform: rotate(337deg);\n  -moz-transform: rotate(337deg);\n  -ms-transform: rotate(337deg);\n  -o-transform: rotate(337deg);\n  transform: rotate(337deg); }\n.wi-wind.towards-338-deg {\n  -webkit-transform: rotate(338deg);\n  -moz-transform: rotate(338deg);\n  -ms-transform: rotate(338deg);\n  -o-transform: rotate(338deg);\n  transform: rotate(338deg); }\n.wi-wind.towards-339-deg {\n  -webkit-transform: rotate(339deg);\n  -moz-transform: rotate(339deg);\n  -ms-transform: rotate(339deg);\n  -o-transform: rotate(339deg);\n  transform: rotate(339deg); }\n.wi-wind.towards-340-deg {\n  -webkit-transform: rotate(340deg);\n  -moz-transform: rotate(340deg);\n  -ms-transform: rotate(340deg);\n  -o-transform: rotate(340deg);\n  transform: rotate(340deg); }\n.wi-wind.towards-341-deg {\n  -webkit-transform: rotate(341deg);\n  -moz-transform: rotate(341deg);\n  -ms-transform: rotate(341deg);\n  -o-transform: rotate(341deg);\n  transform: rotate(341deg); }\n.wi-wind.towards-342-deg {\n  -webkit-transform: rotate(342deg);\n  -moz-transform: rotate(342deg);\n  -ms-transform: rotate(342deg);\n  -o-transform: rotate(342deg);\n  transform: rotate(342deg); }\n.wi-wind.towards-343-deg {\n  -webkit-transform: rotate(343deg);\n  -moz-transform: rotate(343deg);\n  -ms-transform: rotate(343deg);\n  -o-transform: rotate(343deg);\n  transform: rotate(343deg); }\n.wi-wind.towards-344-deg {\n  -webkit-transform: rotate(344deg);\n  -moz-transform: rotate(344deg);\n  -ms-transform: rotate(344deg);\n  -o-transform: rotate(344deg);\n  transform: rotate(344deg); }\n.wi-wind.towards-345-deg {\n  -webkit-transform: rotate(345deg);\n  -moz-transform: rotate(345deg);\n  -ms-transform: rotate(345deg);\n  -o-transform: rotate(345deg);\n  transform: rotate(345deg); }\n.wi-wind.towards-346-deg {\n  -webkit-transform: rotate(346deg);\n  -moz-transform: rotate(346deg);\n  -ms-transform: rotate(346deg);\n  -o-transform: rotate(346deg);\n  transform: rotate(346deg); }\n.wi-wind.towards-347-deg {\n  -webkit-transform: rotate(347deg);\n  -moz-transform: rotate(347deg);\n  -ms-transform: rotate(347deg);\n  -o-transform: rotate(347deg);\n  transform: rotate(347deg); }\n.wi-wind.towards-348-deg {\n  -webkit-transform: rotate(348deg);\n  -moz-transform: rotate(348deg);\n  -ms-transform: rotate(348deg);\n  -o-transform: rotate(348deg);\n  transform: rotate(348deg); }\n.wi-wind.towards-349-deg {\n  -webkit-transform: rotate(349deg);\n  -moz-transform: rotate(349deg);\n  -ms-transform: rotate(349deg);\n  -o-transform: rotate(349deg);\n  transform: rotate(349deg); }\n.wi-wind.towards-350-deg {\n  -webkit-transform: rotate(350deg);\n  -moz-transform: rotate(350deg);\n  -ms-transform: rotate(350deg);\n  -o-transform: rotate(350deg);\n  transform: rotate(350deg); }\n.wi-wind.towards-351-deg {\n  -webkit-transform: rotate(351deg);\n  -moz-transform: rotate(351deg);\n  -ms-transform: rotate(351deg);\n  -o-transform: rotate(351deg);\n  transform: rotate(351deg); }\n.wi-wind.towards-352-deg {\n  -webkit-transform: rotate(352deg);\n  -moz-transform: rotate(352deg);\n  -ms-transform: rotate(352deg);\n  -o-transform: rotate(352deg);\n  transform: rotate(352deg); }\n.wi-wind.towards-353-deg {\n  -webkit-transform: rotate(353deg);\n  -moz-transform: rotate(353deg);\n  -ms-transform: rotate(353deg);\n  -o-transform: rotate(353deg);\n  transform: rotate(353deg); }\n.wi-wind.towards-354-deg {\n  -webkit-transform: rotate(354deg);\n  -moz-transform: rotate(354deg);\n  -ms-transform: rotate(354deg);\n  -o-transform: rotate(354deg);\n  transform: rotate(354deg); }\n.wi-wind.towards-355-deg {\n  -webkit-transform: rotate(355deg);\n  -moz-transform: rotate(355deg);\n  -ms-transform: rotate(355deg);\n  -o-transform: rotate(355deg);\n  transform: rotate(355deg); }\n.wi-wind.towards-356-deg {\n  -webkit-transform: rotate(356deg);\n  -moz-transform: rotate(356deg);\n  -ms-transform: rotate(356deg);\n  -o-transform: rotate(356deg);\n  transform: rotate(356deg); }\n.wi-wind.towards-357-deg {\n  -webkit-transform: rotate(357deg);\n  -moz-transform: rotate(357deg);\n  -ms-transform: rotate(357deg);\n  -o-transform: rotate(357deg);\n  transform: rotate(357deg); }\n.wi-wind.towards-358-deg {\n  -webkit-transform: rotate(358deg);\n  -moz-transform: rotate(358deg);\n  -ms-transform: rotate(358deg);\n  -o-transform: rotate(358deg);\n  transform: rotate(358deg); }\n.wi-wind.towards-359-deg {\n  -webkit-transform: rotate(359deg);\n  -moz-transform: rotate(359deg);\n  -ms-transform: rotate(359deg);\n  -o-transform: rotate(359deg);\n  transform: rotate(359deg); }\n.wi-wind.towards-360-deg {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.from-0-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n.wi-wind.from-1-deg {\n  -webkit-transform: rotate(181deg);\n  -moz-transform: rotate(181deg);\n  -ms-transform: rotate(181deg);\n  -o-transform: rotate(181deg);\n  transform: rotate(181deg); }\n.wi-wind.from-2-deg {\n  -webkit-transform: rotate(182deg);\n  -moz-transform: rotate(182deg);\n  -ms-transform: rotate(182deg);\n  -o-transform: rotate(182deg);\n  transform: rotate(182deg); }\n.wi-wind.from-3-deg {\n  -webkit-transform: rotate(183deg);\n  -moz-transform: rotate(183deg);\n  -ms-transform: rotate(183deg);\n  -o-transform: rotate(183deg);\n  transform: rotate(183deg); }\n.wi-wind.from-4-deg {\n  -webkit-transform: rotate(184deg);\n  -moz-transform: rotate(184deg);\n  -ms-transform: rotate(184deg);\n  -o-transform: rotate(184deg);\n  transform: rotate(184deg); }\n.wi-wind.from-5-deg {\n  -webkit-transform: rotate(185deg);\n  -moz-transform: rotate(185deg);\n  -ms-transform: rotate(185deg);\n  -o-transform: rotate(185deg);\n  transform: rotate(185deg); }\n.wi-wind.from-6-deg {\n  -webkit-transform: rotate(186deg);\n  -moz-transform: rotate(186deg);\n  -ms-transform: rotate(186deg);\n  -o-transform: rotate(186deg);\n  transform: rotate(186deg); }\n.wi-wind.from-7-deg {\n  -webkit-transform: rotate(187deg);\n  -moz-transform: rotate(187deg);\n  -ms-transform: rotate(187deg);\n  -o-transform: rotate(187deg);\n  transform: rotate(187deg); }\n.wi-wind.from-8-deg {\n  -webkit-transform: rotate(188deg);\n  -moz-transform: rotate(188deg);\n  -ms-transform: rotate(188deg);\n  -o-transform: rotate(188deg);\n  transform: rotate(188deg); }\n.wi-wind.from-9-deg {\n  -webkit-transform: rotate(189deg);\n  -moz-transform: rotate(189deg);\n  -ms-transform: rotate(189deg);\n  -o-transform: rotate(189deg);\n  transform: rotate(189deg); }\n.wi-wind.from-10-deg {\n  -webkit-transform: rotate(190deg);\n  -moz-transform: rotate(190deg);\n  -ms-transform: rotate(190deg);\n  -o-transform: rotate(190deg);\n  transform: rotate(190deg); }\n.wi-wind.from-11-deg {\n  -webkit-transform: rotate(191deg);\n  -moz-transform: rotate(191deg);\n  -ms-transform: rotate(191deg);\n  -o-transform: rotate(191deg);\n  transform: rotate(191deg); }\n.wi-wind.from-12-deg {\n  -webkit-transform: rotate(192deg);\n  -moz-transform: rotate(192deg);\n  -ms-transform: rotate(192deg);\n  -o-transform: rotate(192deg);\n  transform: rotate(192deg); }\n.wi-wind.from-13-deg {\n  -webkit-transform: rotate(193deg);\n  -moz-transform: rotate(193deg);\n  -ms-transform: rotate(193deg);\n  -o-transform: rotate(193deg);\n  transform: rotate(193deg); }\n.wi-wind.from-14-deg {\n  -webkit-transform: rotate(194deg);\n  -moz-transform: rotate(194deg);\n  -ms-transform: rotate(194deg);\n  -o-transform: rotate(194deg);\n  transform: rotate(194deg); }\n.wi-wind.from-15-deg {\n  -webkit-transform: rotate(195deg);\n  -moz-transform: rotate(195deg);\n  -ms-transform: rotate(195deg);\n  -o-transform: rotate(195deg);\n  transform: rotate(195deg); }\n.wi-wind.from-16-deg {\n  -webkit-transform: rotate(196deg);\n  -moz-transform: rotate(196deg);\n  -ms-transform: rotate(196deg);\n  -o-transform: rotate(196deg);\n  transform: rotate(196deg); }\n.wi-wind.from-17-deg {\n  -webkit-transform: rotate(197deg);\n  -moz-transform: rotate(197deg);\n  -ms-transform: rotate(197deg);\n  -o-transform: rotate(197deg);\n  transform: rotate(197deg); }\n.wi-wind.from-18-deg {\n  -webkit-transform: rotate(198deg);\n  -moz-transform: rotate(198deg);\n  -ms-transform: rotate(198deg);\n  -o-transform: rotate(198deg);\n  transform: rotate(198deg); }\n.wi-wind.from-19-deg {\n  -webkit-transform: rotate(199deg);\n  -moz-transform: rotate(199deg);\n  -ms-transform: rotate(199deg);\n  -o-transform: rotate(199deg);\n  transform: rotate(199deg); }\n.wi-wind.from-20-deg {\n  -webkit-transform: rotate(200deg);\n  -moz-transform: rotate(200deg);\n  -ms-transform: rotate(200deg);\n  -o-transform: rotate(200deg);\n  transform: rotate(200deg); }\n.wi-wind.from-21-deg {\n  -webkit-transform: rotate(201deg);\n  -moz-transform: rotate(201deg);\n  -ms-transform: rotate(201deg);\n  -o-transform: rotate(201deg);\n  transform: rotate(201deg); }\n.wi-wind.from-22-deg {\n  -webkit-transform: rotate(202deg);\n  -moz-transform: rotate(202deg);\n  -ms-transform: rotate(202deg);\n  -o-transform: rotate(202deg);\n  transform: rotate(202deg); }\n.wi-wind.from-23-deg {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n.wi-wind.from-24-deg {\n  -webkit-transform: rotate(204deg);\n  -moz-transform: rotate(204deg);\n  -ms-transform: rotate(204deg);\n  -o-transform: rotate(204deg);\n  transform: rotate(204deg); }\n.wi-wind.from-25-deg {\n  -webkit-transform: rotate(205deg);\n  -moz-transform: rotate(205deg);\n  -ms-transform: rotate(205deg);\n  -o-transform: rotate(205deg);\n  transform: rotate(205deg); }\n.wi-wind.from-26-deg {\n  -webkit-transform: rotate(206deg);\n  -moz-transform: rotate(206deg);\n  -ms-transform: rotate(206deg);\n  -o-transform: rotate(206deg);\n  transform: rotate(206deg); }\n.wi-wind.from-27-deg {\n  -webkit-transform: rotate(207deg);\n  -moz-transform: rotate(207deg);\n  -ms-transform: rotate(207deg);\n  -o-transform: rotate(207deg);\n  transform: rotate(207deg); }\n.wi-wind.from-28-deg {\n  -webkit-transform: rotate(208deg);\n  -moz-transform: rotate(208deg);\n  -ms-transform: rotate(208deg);\n  -o-transform: rotate(208deg);\n  transform: rotate(208deg); }\n.wi-wind.from-29-deg {\n  -webkit-transform: rotate(209deg);\n  -moz-transform: rotate(209deg);\n  -ms-transform: rotate(209deg);\n  -o-transform: rotate(209deg);\n  transform: rotate(209deg); }\n.wi-wind.from-30-deg {\n  -webkit-transform: rotate(210deg);\n  -moz-transform: rotate(210deg);\n  -ms-transform: rotate(210deg);\n  -o-transform: rotate(210deg);\n  transform: rotate(210deg); }\n.wi-wind.from-31-deg {\n  -webkit-transform: rotate(211deg);\n  -moz-transform: rotate(211deg);\n  -ms-transform: rotate(211deg);\n  -o-transform: rotate(211deg);\n  transform: rotate(211deg); }\n.wi-wind.from-32-deg {\n  -webkit-transform: rotate(212deg);\n  -moz-transform: rotate(212deg);\n  -ms-transform: rotate(212deg);\n  -o-transform: rotate(212deg);\n  transform: rotate(212deg); }\n.wi-wind.from-33-deg {\n  -webkit-transform: rotate(213deg);\n  -moz-transform: rotate(213deg);\n  -ms-transform: rotate(213deg);\n  -o-transform: rotate(213deg);\n  transform: rotate(213deg); }\n.wi-wind.from-34-deg {\n  -webkit-transform: rotate(214deg);\n  -moz-transform: rotate(214deg);\n  -ms-transform: rotate(214deg);\n  -o-transform: rotate(214deg);\n  transform: rotate(214deg); }\n.wi-wind.from-35-deg {\n  -webkit-transform: rotate(215deg);\n  -moz-transform: rotate(215deg);\n  -ms-transform: rotate(215deg);\n  -o-transform: rotate(215deg);\n  transform: rotate(215deg); }\n.wi-wind.from-36-deg {\n  -webkit-transform: rotate(216deg);\n  -moz-transform: rotate(216deg);\n  -ms-transform: rotate(216deg);\n  -o-transform: rotate(216deg);\n  transform: rotate(216deg); }\n.wi-wind.from-37-deg {\n  -webkit-transform: rotate(217deg);\n  -moz-transform: rotate(217deg);\n  -ms-transform: rotate(217deg);\n  -o-transform: rotate(217deg);\n  transform: rotate(217deg); }\n.wi-wind.from-38-deg {\n  -webkit-transform: rotate(218deg);\n  -moz-transform: rotate(218deg);\n  -ms-transform: rotate(218deg);\n  -o-transform: rotate(218deg);\n  transform: rotate(218deg); }\n.wi-wind.from-39-deg {\n  -webkit-transform: rotate(219deg);\n  -moz-transform: rotate(219deg);\n  -ms-transform: rotate(219deg);\n  -o-transform: rotate(219deg);\n  transform: rotate(219deg); }\n.wi-wind.from-40-deg {\n  -webkit-transform: rotate(220deg);\n  -moz-transform: rotate(220deg);\n  -ms-transform: rotate(220deg);\n  -o-transform: rotate(220deg);\n  transform: rotate(220deg); }\n.wi-wind.from-41-deg {\n  -webkit-transform: rotate(221deg);\n  -moz-transform: rotate(221deg);\n  -ms-transform: rotate(221deg);\n  -o-transform: rotate(221deg);\n  transform: rotate(221deg); }\n.wi-wind.from-42-deg {\n  -webkit-transform: rotate(222deg);\n  -moz-transform: rotate(222deg);\n  -ms-transform: rotate(222deg);\n  -o-transform: rotate(222deg);\n  transform: rotate(222deg); }\n.wi-wind.from-43-deg {\n  -webkit-transform: rotate(223deg);\n  -moz-transform: rotate(223deg);\n  -ms-transform: rotate(223deg);\n  -o-transform: rotate(223deg);\n  transform: rotate(223deg); }\n.wi-wind.from-44-deg {\n  -webkit-transform: rotate(224deg);\n  -moz-transform: rotate(224deg);\n  -ms-transform: rotate(224deg);\n  -o-transform: rotate(224deg);\n  transform: rotate(224deg); }\n.wi-wind.from-45-deg {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n.wi-wind.from-46-deg {\n  -webkit-transform: rotate(226deg);\n  -moz-transform: rotate(226deg);\n  -ms-transform: rotate(226deg);\n  -o-transform: rotate(226deg);\n  transform: rotate(226deg); }\n.wi-wind.from-47-deg {\n  -webkit-transform: rotate(227deg);\n  -moz-transform: rotate(227deg);\n  -ms-transform: rotate(227deg);\n  -o-transform: rotate(227deg);\n  transform: rotate(227deg); }\n.wi-wind.from-48-deg {\n  -webkit-transform: rotate(228deg);\n  -moz-transform: rotate(228deg);\n  -ms-transform: rotate(228deg);\n  -o-transform: rotate(228deg);\n  transform: rotate(228deg); }\n.wi-wind.from-49-deg {\n  -webkit-transform: rotate(229deg);\n  -moz-transform: rotate(229deg);\n  -ms-transform: rotate(229deg);\n  -o-transform: rotate(229deg);\n  transform: rotate(229deg); }\n.wi-wind.from-50-deg {\n  -webkit-transform: rotate(230deg);\n  -moz-transform: rotate(230deg);\n  -ms-transform: rotate(230deg);\n  -o-transform: rotate(230deg);\n  transform: rotate(230deg); }\n.wi-wind.from-51-deg {\n  -webkit-transform: rotate(231deg);\n  -moz-transform: rotate(231deg);\n  -ms-transform: rotate(231deg);\n  -o-transform: rotate(231deg);\n  transform: rotate(231deg); }\n.wi-wind.from-52-deg {\n  -webkit-transform: rotate(232deg);\n  -moz-transform: rotate(232deg);\n  -ms-transform: rotate(232deg);\n  -o-transform: rotate(232deg);\n  transform: rotate(232deg); }\n.wi-wind.from-53-deg {\n  -webkit-transform: rotate(233deg);\n  -moz-transform: rotate(233deg);\n  -ms-transform: rotate(233deg);\n  -o-transform: rotate(233deg);\n  transform: rotate(233deg); }\n.wi-wind.from-54-deg {\n  -webkit-transform: rotate(234deg);\n  -moz-transform: rotate(234deg);\n  -ms-transform: rotate(234deg);\n  -o-transform: rotate(234deg);\n  transform: rotate(234deg); }\n.wi-wind.from-55-deg {\n  -webkit-transform: rotate(235deg);\n  -moz-transform: rotate(235deg);\n  -ms-transform: rotate(235deg);\n  -o-transform: rotate(235deg);\n  transform: rotate(235deg); }\n.wi-wind.from-56-deg {\n  -webkit-transform: rotate(236deg);\n  -moz-transform: rotate(236deg);\n  -ms-transform: rotate(236deg);\n  -o-transform: rotate(236deg);\n  transform: rotate(236deg); }\n.wi-wind.from-57-deg {\n  -webkit-transform: rotate(237deg);\n  -moz-transform: rotate(237deg);\n  -ms-transform: rotate(237deg);\n  -o-transform: rotate(237deg);\n  transform: rotate(237deg); }\n.wi-wind.from-58-deg {\n  -webkit-transform: rotate(238deg);\n  -moz-transform: rotate(238deg);\n  -ms-transform: rotate(238deg);\n  -o-transform: rotate(238deg);\n  transform: rotate(238deg); }\n.wi-wind.from-59-deg {\n  -webkit-transform: rotate(239deg);\n  -moz-transform: rotate(239deg);\n  -ms-transform: rotate(239deg);\n  -o-transform: rotate(239deg);\n  transform: rotate(239deg); }\n.wi-wind.from-60-deg {\n  -webkit-transform: rotate(240deg);\n  -moz-transform: rotate(240deg);\n  -ms-transform: rotate(240deg);\n  -o-transform: rotate(240deg);\n  transform: rotate(240deg); }\n.wi-wind.from-61-deg {\n  -webkit-transform: rotate(241deg);\n  -moz-transform: rotate(241deg);\n  -ms-transform: rotate(241deg);\n  -o-transform: rotate(241deg);\n  transform: rotate(241deg); }\n.wi-wind.from-62-deg {\n  -webkit-transform: rotate(242deg);\n  -moz-transform: rotate(242deg);\n  -ms-transform: rotate(242deg);\n  -o-transform: rotate(242deg);\n  transform: rotate(242deg); }\n.wi-wind.from-63-deg {\n  -webkit-transform: rotate(243deg);\n  -moz-transform: rotate(243deg);\n  -ms-transform: rotate(243deg);\n  -o-transform: rotate(243deg);\n  transform: rotate(243deg); }\n.wi-wind.from-64-deg {\n  -webkit-transform: rotate(244deg);\n  -moz-transform: rotate(244deg);\n  -ms-transform: rotate(244deg);\n  -o-transform: rotate(244deg);\n  transform: rotate(244deg); }\n.wi-wind.from-65-deg {\n  -webkit-transform: rotate(245deg);\n  -moz-transform: rotate(245deg);\n  -ms-transform: rotate(245deg);\n  -o-transform: rotate(245deg);\n  transform: rotate(245deg); }\n.wi-wind.from-66-deg {\n  -webkit-transform: rotate(246deg);\n  -moz-transform: rotate(246deg);\n  -ms-transform: rotate(246deg);\n  -o-transform: rotate(246deg);\n  transform: rotate(246deg); }\n.wi-wind.from-67-deg {\n  -webkit-transform: rotate(247deg);\n  -moz-transform: rotate(247deg);\n  -ms-transform: rotate(247deg);\n  -o-transform: rotate(247deg);\n  transform: rotate(247deg); }\n.wi-wind.from-68-deg {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n.wi-wind.from-69-deg {\n  -webkit-transform: rotate(249deg);\n  -moz-transform: rotate(249deg);\n  -ms-transform: rotate(249deg);\n  -o-transform: rotate(249deg);\n  transform: rotate(249deg); }\n.wi-wind.from-70-deg {\n  -webkit-transform: rotate(250deg);\n  -moz-transform: rotate(250deg);\n  -ms-transform: rotate(250deg);\n  -o-transform: rotate(250deg);\n  transform: rotate(250deg); }\n.wi-wind.from-71-deg {\n  -webkit-transform: rotate(251deg);\n  -moz-transform: rotate(251deg);\n  -ms-transform: rotate(251deg);\n  -o-transform: rotate(251deg);\n  transform: rotate(251deg); }\n.wi-wind.from-72-deg {\n  -webkit-transform: rotate(252deg);\n  -moz-transform: rotate(252deg);\n  -ms-transform: rotate(252deg);\n  -o-transform: rotate(252deg);\n  transform: rotate(252deg); }\n.wi-wind.from-73-deg {\n  -webkit-transform: rotate(253deg);\n  -moz-transform: rotate(253deg);\n  -ms-transform: rotate(253deg);\n  -o-transform: rotate(253deg);\n  transform: rotate(253deg); }\n.wi-wind.from-74-deg {\n  -webkit-transform: rotate(254deg);\n  -moz-transform: rotate(254deg);\n  -ms-transform: rotate(254deg);\n  -o-transform: rotate(254deg);\n  transform: rotate(254deg); }\n.wi-wind.from-75-deg {\n  -webkit-transform: rotate(255deg);\n  -moz-transform: rotate(255deg);\n  -ms-transform: rotate(255deg);\n  -o-transform: rotate(255deg);\n  transform: rotate(255deg); }\n.wi-wind.from-76-deg {\n  -webkit-transform: rotate(256deg);\n  -moz-transform: rotate(256deg);\n  -ms-transform: rotate(256deg);\n  -o-transform: rotate(256deg);\n  transform: rotate(256deg); }\n.wi-wind.from-77-deg {\n  -webkit-transform: rotate(257deg);\n  -moz-transform: rotate(257deg);\n  -ms-transform: rotate(257deg);\n  -o-transform: rotate(257deg);\n  transform: rotate(257deg); }\n.wi-wind.from-78-deg {\n  -webkit-transform: rotate(258deg);\n  -moz-transform: rotate(258deg);\n  -ms-transform: rotate(258deg);\n  -o-transform: rotate(258deg);\n  transform: rotate(258deg); }\n.wi-wind.from-79-deg {\n  -webkit-transform: rotate(259deg);\n  -moz-transform: rotate(259deg);\n  -ms-transform: rotate(259deg);\n  -o-transform: rotate(259deg);\n  transform: rotate(259deg); }\n.wi-wind.from-80-deg {\n  -webkit-transform: rotate(260deg);\n  -moz-transform: rotate(260deg);\n  -ms-transform: rotate(260deg);\n  -o-transform: rotate(260deg);\n  transform: rotate(260deg); }\n.wi-wind.from-81-deg {\n  -webkit-transform: rotate(261deg);\n  -moz-transform: rotate(261deg);\n  -ms-transform: rotate(261deg);\n  -o-transform: rotate(261deg);\n  transform: rotate(261deg); }\n.wi-wind.from-82-deg {\n  -webkit-transform: rotate(262deg);\n  -moz-transform: rotate(262deg);\n  -ms-transform: rotate(262deg);\n  -o-transform: rotate(262deg);\n  transform: rotate(262deg); }\n.wi-wind.from-83-deg {\n  -webkit-transform: rotate(263deg);\n  -moz-transform: rotate(263deg);\n  -ms-transform: rotate(263deg);\n  -o-transform: rotate(263deg);\n  transform: rotate(263deg); }\n.wi-wind.from-84-deg {\n  -webkit-transform: rotate(264deg);\n  -moz-transform: rotate(264deg);\n  -ms-transform: rotate(264deg);\n  -o-transform: rotate(264deg);\n  transform: rotate(264deg); }\n.wi-wind.from-85-deg {\n  -webkit-transform: rotate(265deg);\n  -moz-transform: rotate(265deg);\n  -ms-transform: rotate(265deg);\n  -o-transform: rotate(265deg);\n  transform: rotate(265deg); }\n.wi-wind.from-86-deg {\n  -webkit-transform: rotate(266deg);\n  -moz-transform: rotate(266deg);\n  -ms-transform: rotate(266deg);\n  -o-transform: rotate(266deg);\n  transform: rotate(266deg); }\n.wi-wind.from-87-deg {\n  -webkit-transform: rotate(267deg);\n  -moz-transform: rotate(267deg);\n  -ms-transform: rotate(267deg);\n  -o-transform: rotate(267deg);\n  transform: rotate(267deg); }\n.wi-wind.from-88-deg {\n  -webkit-transform: rotate(268deg);\n  -moz-transform: rotate(268deg);\n  -ms-transform: rotate(268deg);\n  -o-transform: rotate(268deg);\n  transform: rotate(268deg); }\n.wi-wind.from-89-deg {\n  -webkit-transform: rotate(269deg);\n  -moz-transform: rotate(269deg);\n  -ms-transform: rotate(269deg);\n  -o-transform: rotate(269deg);\n  transform: rotate(269deg); }\n.wi-wind.from-90-deg {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n.wi-wind.from-91-deg {\n  -webkit-transform: rotate(271deg);\n  -moz-transform: rotate(271deg);\n  -ms-transform: rotate(271deg);\n  -o-transform: rotate(271deg);\n  transform: rotate(271deg); }\n.wi-wind.from-92-deg {\n  -webkit-transform: rotate(272deg);\n  -moz-transform: rotate(272deg);\n  -ms-transform: rotate(272deg);\n  -o-transform: rotate(272deg);\n  transform: rotate(272deg); }\n.wi-wind.from-93-deg {\n  -webkit-transform: rotate(273deg);\n  -moz-transform: rotate(273deg);\n  -ms-transform: rotate(273deg);\n  -o-transform: rotate(273deg);\n  transform: rotate(273deg); }\n.wi-wind.from-94-deg {\n  -webkit-transform: rotate(274deg);\n  -moz-transform: rotate(274deg);\n  -ms-transform: rotate(274deg);\n  -o-transform: rotate(274deg);\n  transform: rotate(274deg); }\n.wi-wind.from-95-deg {\n  -webkit-transform: rotate(275deg);\n  -moz-transform: rotate(275deg);\n  -ms-transform: rotate(275deg);\n  -o-transform: rotate(275deg);\n  transform: rotate(275deg); }\n.wi-wind.from-96-deg {\n  -webkit-transform: rotate(276deg);\n  -moz-transform: rotate(276deg);\n  -ms-transform: rotate(276deg);\n  -o-transform: rotate(276deg);\n  transform: rotate(276deg); }\n.wi-wind.from-97-deg {\n  -webkit-transform: rotate(277deg);\n  -moz-transform: rotate(277deg);\n  -ms-transform: rotate(277deg);\n  -o-transform: rotate(277deg);\n  transform: rotate(277deg); }\n.wi-wind.from-98-deg {\n  -webkit-transform: rotate(278deg);\n  -moz-transform: rotate(278deg);\n  -ms-transform: rotate(278deg);\n  -o-transform: rotate(278deg);\n  transform: rotate(278deg); }\n.wi-wind.from-99-deg {\n  -webkit-transform: rotate(279deg);\n  -moz-transform: rotate(279deg);\n  -ms-transform: rotate(279deg);\n  -o-transform: rotate(279deg);\n  transform: rotate(279deg); }\n.wi-wind.from-100-deg {\n  -webkit-transform: rotate(280deg);\n  -moz-transform: rotate(280deg);\n  -ms-transform: rotate(280deg);\n  -o-transform: rotate(280deg);\n  transform: rotate(280deg); }\n.wi-wind.from-101-deg {\n  -webkit-transform: rotate(281deg);\n  -moz-transform: rotate(281deg);\n  -ms-transform: rotate(281deg);\n  -o-transform: rotate(281deg);\n  transform: rotate(281deg); }\n.wi-wind.from-102-deg {\n  -webkit-transform: rotate(282deg);\n  -moz-transform: rotate(282deg);\n  -ms-transform: rotate(282deg);\n  -o-transform: rotate(282deg);\n  transform: rotate(282deg); }\n.wi-wind.from-103-deg {\n  -webkit-transform: rotate(283deg);\n  -moz-transform: rotate(283deg);\n  -ms-transform: rotate(283deg);\n  -o-transform: rotate(283deg);\n  transform: rotate(283deg); }\n.wi-wind.from-104-deg {\n  -webkit-transform: rotate(284deg);\n  -moz-transform: rotate(284deg);\n  -ms-transform: rotate(284deg);\n  -o-transform: rotate(284deg);\n  transform: rotate(284deg); }\n.wi-wind.from-105-deg {\n  -webkit-transform: rotate(285deg);\n  -moz-transform: rotate(285deg);\n  -ms-transform: rotate(285deg);\n  -o-transform: rotate(285deg);\n  transform: rotate(285deg); }\n.wi-wind.from-106-deg {\n  -webkit-transform: rotate(286deg);\n  -moz-transform: rotate(286deg);\n  -ms-transform: rotate(286deg);\n  -o-transform: rotate(286deg);\n  transform: rotate(286deg); }\n.wi-wind.from-107-deg {\n  -webkit-transform: rotate(287deg);\n  -moz-transform: rotate(287deg);\n  -ms-transform: rotate(287deg);\n  -o-transform: rotate(287deg);\n  transform: rotate(287deg); }\n.wi-wind.from-108-deg {\n  -webkit-transform: rotate(288deg);\n  -moz-transform: rotate(288deg);\n  -ms-transform: rotate(288deg);\n  -o-transform: rotate(288deg);\n  transform: rotate(288deg); }\n.wi-wind.from-109-deg {\n  -webkit-transform: rotate(289deg);\n  -moz-transform: rotate(289deg);\n  -ms-transform: rotate(289deg);\n  -o-transform: rotate(289deg);\n  transform: rotate(289deg); }\n.wi-wind.from-110-deg {\n  -webkit-transform: rotate(290deg);\n  -moz-transform: rotate(290deg);\n  -ms-transform: rotate(290deg);\n  -o-transform: rotate(290deg);\n  transform: rotate(290deg); }\n.wi-wind.from-111-deg {\n  -webkit-transform: rotate(291deg);\n  -moz-transform: rotate(291deg);\n  -ms-transform: rotate(291deg);\n  -o-transform: rotate(291deg);\n  transform: rotate(291deg); }\n.wi-wind.from-112-deg {\n  -webkit-transform: rotate(292deg);\n  -moz-transform: rotate(292deg);\n  -ms-transform: rotate(292deg);\n  -o-transform: rotate(292deg);\n  transform: rotate(292deg); }\n.wi-wind.from-113-deg {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n.wi-wind.from-114-deg {\n  -webkit-transform: rotate(294deg);\n  -moz-transform: rotate(294deg);\n  -ms-transform: rotate(294deg);\n  -o-transform: rotate(294deg);\n  transform: rotate(294deg); }\n.wi-wind.from-115-deg {\n  -webkit-transform: rotate(295deg);\n  -moz-transform: rotate(295deg);\n  -ms-transform: rotate(295deg);\n  -o-transform: rotate(295deg);\n  transform: rotate(295deg); }\n.wi-wind.from-116-deg {\n  -webkit-transform: rotate(296deg);\n  -moz-transform: rotate(296deg);\n  -ms-transform: rotate(296deg);\n  -o-transform: rotate(296deg);\n  transform: rotate(296deg); }\n.wi-wind.from-117-deg {\n  -webkit-transform: rotate(297deg);\n  -moz-transform: rotate(297deg);\n  -ms-transform: rotate(297deg);\n  -o-transform: rotate(297deg);\n  transform: rotate(297deg); }\n.wi-wind.from-118-deg {\n  -webkit-transform: rotate(298deg);\n  -moz-transform: rotate(298deg);\n  -ms-transform: rotate(298deg);\n  -o-transform: rotate(298deg);\n  transform: rotate(298deg); }\n.wi-wind.from-119-deg {\n  -webkit-transform: rotate(299deg);\n  -moz-transform: rotate(299deg);\n  -ms-transform: rotate(299deg);\n  -o-transform: rotate(299deg);\n  transform: rotate(299deg); }\n.wi-wind.from-120-deg {\n  -webkit-transform: rotate(300deg);\n  -moz-transform: rotate(300deg);\n  -ms-transform: rotate(300deg);\n  -o-transform: rotate(300deg);\n  transform: rotate(300deg); }\n.wi-wind.from-121-deg {\n  -webkit-transform: rotate(301deg);\n  -moz-transform: rotate(301deg);\n  -ms-transform: rotate(301deg);\n  -o-transform: rotate(301deg);\n  transform: rotate(301deg); }\n.wi-wind.from-122-deg {\n  -webkit-transform: rotate(302deg);\n  -moz-transform: rotate(302deg);\n  -ms-transform: rotate(302deg);\n  -o-transform: rotate(302deg);\n  transform: rotate(302deg); }\n.wi-wind.from-123-deg {\n  -webkit-transform: rotate(303deg);\n  -moz-transform: rotate(303deg);\n  -ms-transform: rotate(303deg);\n  -o-transform: rotate(303deg);\n  transform: rotate(303deg); }\n.wi-wind.from-124-deg {\n  -webkit-transform: rotate(304deg);\n  -moz-transform: rotate(304deg);\n  -ms-transform: rotate(304deg);\n  -o-transform: rotate(304deg);\n  transform: rotate(304deg); }\n.wi-wind.from-125-deg {\n  -webkit-transform: rotate(305deg);\n  -moz-transform: rotate(305deg);\n  -ms-transform: rotate(305deg);\n  -o-transform: rotate(305deg);\n  transform: rotate(305deg); }\n.wi-wind.from-126-deg {\n  -webkit-transform: rotate(306deg);\n  -moz-transform: rotate(306deg);\n  -ms-transform: rotate(306deg);\n  -o-transform: rotate(306deg);\n  transform: rotate(306deg); }\n.wi-wind.from-127-deg {\n  -webkit-transform: rotate(307deg);\n  -moz-transform: rotate(307deg);\n  -ms-transform: rotate(307deg);\n  -o-transform: rotate(307deg);\n  transform: rotate(307deg); }\n.wi-wind.from-128-deg {\n  -webkit-transform: rotate(308deg);\n  -moz-transform: rotate(308deg);\n  -ms-transform: rotate(308deg);\n  -o-transform: rotate(308deg);\n  transform: rotate(308deg); }\n.wi-wind.from-129-deg {\n  -webkit-transform: rotate(309deg);\n  -moz-transform: rotate(309deg);\n  -ms-transform: rotate(309deg);\n  -o-transform: rotate(309deg);\n  transform: rotate(309deg); }\n.wi-wind.from-130-deg {\n  -webkit-transform: rotate(310deg);\n  -moz-transform: rotate(310deg);\n  -ms-transform: rotate(310deg);\n  -o-transform: rotate(310deg);\n  transform: rotate(310deg); }\n.wi-wind.from-131-deg {\n  -webkit-transform: rotate(311deg);\n  -moz-transform: rotate(311deg);\n  -ms-transform: rotate(311deg);\n  -o-transform: rotate(311deg);\n  transform: rotate(311deg); }\n.wi-wind.from-132-deg {\n  -webkit-transform: rotate(312deg);\n  -moz-transform: rotate(312deg);\n  -ms-transform: rotate(312deg);\n  -o-transform: rotate(312deg);\n  transform: rotate(312deg); }\n.wi-wind.from-133-deg {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n.wi-wind.from-134-deg {\n  -webkit-transform: rotate(314deg);\n  -moz-transform: rotate(314deg);\n  -ms-transform: rotate(314deg);\n  -o-transform: rotate(314deg);\n  transform: rotate(314deg); }\n.wi-wind.from-135-deg {\n  -webkit-transform: rotate(315deg);\n  -moz-transform: rotate(315deg);\n  -ms-transform: rotate(315deg);\n  -o-transform: rotate(315deg);\n  transform: rotate(315deg); }\n.wi-wind.from-136-deg {\n  -webkit-transform: rotate(316deg);\n  -moz-transform: rotate(316deg);\n  -ms-transform: rotate(316deg);\n  -o-transform: rotate(316deg);\n  transform: rotate(316deg); }\n.wi-wind.from-137-deg {\n  -webkit-transform: rotate(317deg);\n  -moz-transform: rotate(317deg);\n  -ms-transform: rotate(317deg);\n  -o-transform: rotate(317deg);\n  transform: rotate(317deg); }\n.wi-wind.from-138-deg {\n  -webkit-transform: rotate(318deg);\n  -moz-transform: rotate(318deg);\n  -ms-transform: rotate(318deg);\n  -o-transform: rotate(318deg);\n  transform: rotate(318deg); }\n.wi-wind.from-139-deg {\n  -webkit-transform: rotate(319deg);\n  -moz-transform: rotate(319deg);\n  -ms-transform: rotate(319deg);\n  -o-transform: rotate(319deg);\n  transform: rotate(319deg); }\n.wi-wind.from-140-deg {\n  -webkit-transform: rotate(320deg);\n  -moz-transform: rotate(320deg);\n  -ms-transform: rotate(320deg);\n  -o-transform: rotate(320deg);\n  transform: rotate(320deg); }\n.wi-wind.from-141-deg {\n  -webkit-transform: rotate(321deg);\n  -moz-transform: rotate(321deg);\n  -ms-transform: rotate(321deg);\n  -o-transform: rotate(321deg);\n  transform: rotate(321deg); }\n.wi-wind.from-142-deg {\n  -webkit-transform: rotate(322deg);\n  -moz-transform: rotate(322deg);\n  -ms-transform: rotate(322deg);\n  -o-transform: rotate(322deg);\n  transform: rotate(322deg); }\n.wi-wind.from-143-deg {\n  -webkit-transform: rotate(323deg);\n  -moz-transform: rotate(323deg);\n  -ms-transform: rotate(323deg);\n  -o-transform: rotate(323deg);\n  transform: rotate(323deg); }\n.wi-wind.from-144-deg {\n  -webkit-transform: rotate(324deg);\n  -moz-transform: rotate(324deg);\n  -ms-transform: rotate(324deg);\n  -o-transform: rotate(324deg);\n  transform: rotate(324deg); }\n.wi-wind.from-145-deg {\n  -webkit-transform: rotate(325deg);\n  -moz-transform: rotate(325deg);\n  -ms-transform: rotate(325deg);\n  -o-transform: rotate(325deg);\n  transform: rotate(325deg); }\n.wi-wind.from-146-deg {\n  -webkit-transform: rotate(326deg);\n  -moz-transform: rotate(326deg);\n  -ms-transform: rotate(326deg);\n  -o-transform: rotate(326deg);\n  transform: rotate(326deg); }\n.wi-wind.from-147-deg {\n  -webkit-transform: rotate(327deg);\n  -moz-transform: rotate(327deg);\n  -ms-transform: rotate(327deg);\n  -o-transform: rotate(327deg);\n  transform: rotate(327deg); }\n.wi-wind.from-148-deg {\n  -webkit-transform: rotate(328deg);\n  -moz-transform: rotate(328deg);\n  -ms-transform: rotate(328deg);\n  -o-transform: rotate(328deg);\n  transform: rotate(328deg); }\n.wi-wind.from-149-deg {\n  -webkit-transform: rotate(329deg);\n  -moz-transform: rotate(329deg);\n  -ms-transform: rotate(329deg);\n  -o-transform: rotate(329deg);\n  transform: rotate(329deg); }\n.wi-wind.from-150-deg {\n  -webkit-transform: rotate(330deg);\n  -moz-transform: rotate(330deg);\n  -ms-transform: rotate(330deg);\n  -o-transform: rotate(330deg);\n  transform: rotate(330deg); }\n.wi-wind.from-151-deg {\n  -webkit-transform: rotate(331deg);\n  -moz-transform: rotate(331deg);\n  -ms-transform: rotate(331deg);\n  -o-transform: rotate(331deg);\n  transform: rotate(331deg); }\n.wi-wind.from-152-deg {\n  -webkit-transform: rotate(332deg);\n  -moz-transform: rotate(332deg);\n  -ms-transform: rotate(332deg);\n  -o-transform: rotate(332deg);\n  transform: rotate(332deg); }\n.wi-wind.from-153-deg {\n  -webkit-transform: rotate(333deg);\n  -moz-transform: rotate(333deg);\n  -ms-transform: rotate(333deg);\n  -o-transform: rotate(333deg);\n  transform: rotate(333deg); }\n.wi-wind.from-154-deg {\n  -webkit-transform: rotate(334deg);\n  -moz-transform: rotate(334deg);\n  -ms-transform: rotate(334deg);\n  -o-transform: rotate(334deg);\n  transform: rotate(334deg); }\n.wi-wind.from-155-deg {\n  -webkit-transform: rotate(335deg);\n  -moz-transform: rotate(335deg);\n  -ms-transform: rotate(335deg);\n  -o-transform: rotate(335deg);\n  transform: rotate(335deg); }\n.wi-wind.from-156-deg {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n.wi-wind.from-157-deg {\n  -webkit-transform: rotate(337deg);\n  -moz-transform: rotate(337deg);\n  -ms-transform: rotate(337deg);\n  -o-transform: rotate(337deg);\n  transform: rotate(337deg); }\n.wi-wind.from-158-deg {\n  -webkit-transform: rotate(338deg);\n  -moz-transform: rotate(338deg);\n  -ms-transform: rotate(338deg);\n  -o-transform: rotate(338deg);\n  transform: rotate(338deg); }\n.wi-wind.from-159-deg {\n  -webkit-transform: rotate(339deg);\n  -moz-transform: rotate(339deg);\n  -ms-transform: rotate(339deg);\n  -o-transform: rotate(339deg);\n  transform: rotate(339deg); }\n.wi-wind.from-160-deg {\n  -webkit-transform: rotate(340deg);\n  -moz-transform: rotate(340deg);\n  -ms-transform: rotate(340deg);\n  -o-transform: rotate(340deg);\n  transform: rotate(340deg); }\n.wi-wind.from-161-deg {\n  -webkit-transform: rotate(341deg);\n  -moz-transform: rotate(341deg);\n  -ms-transform: rotate(341deg);\n  -o-transform: rotate(341deg);\n  transform: rotate(341deg); }\n.wi-wind.from-162-deg {\n  -webkit-transform: rotate(342deg);\n  -moz-transform: rotate(342deg);\n  -ms-transform: rotate(342deg);\n  -o-transform: rotate(342deg);\n  transform: rotate(342deg); }\n.wi-wind.from-163-deg {\n  -webkit-transform: rotate(343deg);\n  -moz-transform: rotate(343deg);\n  -ms-transform: rotate(343deg);\n  -o-transform: rotate(343deg);\n  transform: rotate(343deg); }\n.wi-wind.from-164-deg {\n  -webkit-transform: rotate(344deg);\n  -moz-transform: rotate(344deg);\n  -ms-transform: rotate(344deg);\n  -o-transform: rotate(344deg);\n  transform: rotate(344deg); }\n.wi-wind.from-165-deg {\n  -webkit-transform: rotate(345deg);\n  -moz-transform: rotate(345deg);\n  -ms-transform: rotate(345deg);\n  -o-transform: rotate(345deg);\n  transform: rotate(345deg); }\n.wi-wind.from-166-deg {\n  -webkit-transform: rotate(346deg);\n  -moz-transform: rotate(346deg);\n  -ms-transform: rotate(346deg);\n  -o-transform: rotate(346deg);\n  transform: rotate(346deg); }\n.wi-wind.from-167-deg {\n  -webkit-transform: rotate(347deg);\n  -moz-transform: rotate(347deg);\n  -ms-transform: rotate(347deg);\n  -o-transform: rotate(347deg);\n  transform: rotate(347deg); }\n.wi-wind.from-168-deg {\n  -webkit-transform: rotate(348deg);\n  -moz-transform: rotate(348deg);\n  -ms-transform: rotate(348deg);\n  -o-transform: rotate(348deg);\n  transform: rotate(348deg); }\n.wi-wind.from-169-deg {\n  -webkit-transform: rotate(349deg);\n  -moz-transform: rotate(349deg);\n  -ms-transform: rotate(349deg);\n  -o-transform: rotate(349deg);\n  transform: rotate(349deg); }\n.wi-wind.from-170-deg {\n  -webkit-transform: rotate(350deg);\n  -moz-transform: rotate(350deg);\n  -ms-transform: rotate(350deg);\n  -o-transform: rotate(350deg);\n  transform: rotate(350deg); }\n.wi-wind.from-171-deg {\n  -webkit-transform: rotate(351deg);\n  -moz-transform: rotate(351deg);\n  -ms-transform: rotate(351deg);\n  -o-transform: rotate(351deg);\n  transform: rotate(351deg); }\n.wi-wind.from-172-deg {\n  -webkit-transform: rotate(352deg);\n  -moz-transform: rotate(352deg);\n  -ms-transform: rotate(352deg);\n  -o-transform: rotate(352deg);\n  transform: rotate(352deg); }\n.wi-wind.from-173-deg {\n  -webkit-transform: rotate(353deg);\n  -moz-transform: rotate(353deg);\n  -ms-transform: rotate(353deg);\n  -o-transform: rotate(353deg);\n  transform: rotate(353deg); }\n.wi-wind.from-174-deg {\n  -webkit-transform: rotate(354deg);\n  -moz-transform: rotate(354deg);\n  -ms-transform: rotate(354deg);\n  -o-transform: rotate(354deg);\n  transform: rotate(354deg); }\n.wi-wind.from-175-deg {\n  -webkit-transform: rotate(355deg);\n  -moz-transform: rotate(355deg);\n  -ms-transform: rotate(355deg);\n  -o-transform: rotate(355deg);\n  transform: rotate(355deg); }\n.wi-wind.from-176-deg {\n  -webkit-transform: rotate(356deg);\n  -moz-transform: rotate(356deg);\n  -ms-transform: rotate(356deg);\n  -o-transform: rotate(356deg);\n  transform: rotate(356deg); }\n.wi-wind.from-177-deg {\n  -webkit-transform: rotate(357deg);\n  -moz-transform: rotate(357deg);\n  -ms-transform: rotate(357deg);\n  -o-transform: rotate(357deg);\n  transform: rotate(357deg); }\n.wi-wind.from-178-deg {\n  -webkit-transform: rotate(358deg);\n  -moz-transform: rotate(358deg);\n  -ms-transform: rotate(358deg);\n  -o-transform: rotate(358deg);\n  transform: rotate(358deg); }\n.wi-wind.from-179-deg {\n  -webkit-transform: rotate(359deg);\n  -moz-transform: rotate(359deg);\n  -ms-transform: rotate(359deg);\n  -o-transform: rotate(359deg);\n  transform: rotate(359deg); }\n.wi-wind.from-180-deg {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.from-181-deg {\n  -webkit-transform: rotate(1deg);\n  -moz-transform: rotate(1deg);\n  -ms-transform: rotate(1deg);\n  -o-transform: rotate(1deg);\n  transform: rotate(1deg); }\n.wi-wind.from-182-deg {\n  -webkit-transform: rotate(2deg);\n  -moz-transform: rotate(2deg);\n  -ms-transform: rotate(2deg);\n  -o-transform: rotate(2deg);\n  transform: rotate(2deg); }\n.wi-wind.from-183-deg {\n  -webkit-transform: rotate(3deg);\n  -moz-transform: rotate(3deg);\n  -ms-transform: rotate(3deg);\n  -o-transform: rotate(3deg);\n  transform: rotate(3deg); }\n.wi-wind.from-184-deg {\n  -webkit-transform: rotate(4deg);\n  -moz-transform: rotate(4deg);\n  -ms-transform: rotate(4deg);\n  -o-transform: rotate(4deg);\n  transform: rotate(4deg); }\n.wi-wind.from-185-deg {\n  -webkit-transform: rotate(5deg);\n  -moz-transform: rotate(5deg);\n  -ms-transform: rotate(5deg);\n  -o-transform: rotate(5deg);\n  transform: rotate(5deg); }\n.wi-wind.from-186-deg {\n  -webkit-transform: rotate(6deg);\n  -moz-transform: rotate(6deg);\n  -ms-transform: rotate(6deg);\n  -o-transform: rotate(6deg);\n  transform: rotate(6deg); }\n.wi-wind.from-187-deg {\n  -webkit-transform: rotate(7deg);\n  -moz-transform: rotate(7deg);\n  -ms-transform: rotate(7deg);\n  -o-transform: rotate(7deg);\n  transform: rotate(7deg); }\n.wi-wind.from-188-deg {\n  -webkit-transform: rotate(8deg);\n  -moz-transform: rotate(8deg);\n  -ms-transform: rotate(8deg);\n  -o-transform: rotate(8deg);\n  transform: rotate(8deg); }\n.wi-wind.from-189-deg {\n  -webkit-transform: rotate(9deg);\n  -moz-transform: rotate(9deg);\n  -ms-transform: rotate(9deg);\n  -o-transform: rotate(9deg);\n  transform: rotate(9deg); }\n.wi-wind.from-190-deg {\n  -webkit-transform: rotate(10deg);\n  -moz-transform: rotate(10deg);\n  -ms-transform: rotate(10deg);\n  -o-transform: rotate(10deg);\n  transform: rotate(10deg); }\n.wi-wind.from-191-deg {\n  -webkit-transform: rotate(11deg);\n  -moz-transform: rotate(11deg);\n  -ms-transform: rotate(11deg);\n  -o-transform: rotate(11deg);\n  transform: rotate(11deg); }\n.wi-wind.from-192-deg {\n  -webkit-transform: rotate(12deg);\n  -moz-transform: rotate(12deg);\n  -ms-transform: rotate(12deg);\n  -o-transform: rotate(12deg);\n  transform: rotate(12deg); }\n.wi-wind.from-193-deg {\n  -webkit-transform: rotate(13deg);\n  -moz-transform: rotate(13deg);\n  -ms-transform: rotate(13deg);\n  -o-transform: rotate(13deg);\n  transform: rotate(13deg); }\n.wi-wind.from-194-deg {\n  -webkit-transform: rotate(14deg);\n  -moz-transform: rotate(14deg);\n  -ms-transform: rotate(14deg);\n  -o-transform: rotate(14deg);\n  transform: rotate(14deg); }\n.wi-wind.from-195-deg {\n  -webkit-transform: rotate(15deg);\n  -moz-transform: rotate(15deg);\n  -ms-transform: rotate(15deg);\n  -o-transform: rotate(15deg);\n  transform: rotate(15deg); }\n.wi-wind.from-196-deg {\n  -webkit-transform: rotate(16deg);\n  -moz-transform: rotate(16deg);\n  -ms-transform: rotate(16deg);\n  -o-transform: rotate(16deg);\n  transform: rotate(16deg); }\n.wi-wind.from-197-deg {\n  -webkit-transform: rotate(17deg);\n  -moz-transform: rotate(17deg);\n  -ms-transform: rotate(17deg);\n  -o-transform: rotate(17deg);\n  transform: rotate(17deg); }\n.wi-wind.from-198-deg {\n  -webkit-transform: rotate(18deg);\n  -moz-transform: rotate(18deg);\n  -ms-transform: rotate(18deg);\n  -o-transform: rotate(18deg);\n  transform: rotate(18deg); }\n.wi-wind.from-199-deg {\n  -webkit-transform: rotate(19deg);\n  -moz-transform: rotate(19deg);\n  -ms-transform: rotate(19deg);\n  -o-transform: rotate(19deg);\n  transform: rotate(19deg); }\n.wi-wind.from-200-deg {\n  -webkit-transform: rotate(20deg);\n  -moz-transform: rotate(20deg);\n  -ms-transform: rotate(20deg);\n  -o-transform: rotate(20deg);\n  transform: rotate(20deg); }\n.wi-wind.from-201-deg {\n  -webkit-transform: rotate(21deg);\n  -moz-transform: rotate(21deg);\n  -ms-transform: rotate(21deg);\n  -o-transform: rotate(21deg);\n  transform: rotate(21deg); }\n.wi-wind.from-202-deg {\n  -webkit-transform: rotate(22deg);\n  -moz-transform: rotate(22deg);\n  -ms-transform: rotate(22deg);\n  -o-transform: rotate(22deg);\n  transform: rotate(22deg); }\n.wi-wind.from-203-deg {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n.wi-wind.from-204-deg {\n  -webkit-transform: rotate(24deg);\n  -moz-transform: rotate(24deg);\n  -ms-transform: rotate(24deg);\n  -o-transform: rotate(24deg);\n  transform: rotate(24deg); }\n.wi-wind.from-205-deg {\n  -webkit-transform: rotate(25deg);\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -o-transform: rotate(25deg);\n  transform: rotate(25deg); }\n.wi-wind.from-206-deg {\n  -webkit-transform: rotate(26deg);\n  -moz-transform: rotate(26deg);\n  -ms-transform: rotate(26deg);\n  -o-transform: rotate(26deg);\n  transform: rotate(26deg); }\n.wi-wind.from-207-deg {\n  -webkit-transform: rotate(27deg);\n  -moz-transform: rotate(27deg);\n  -ms-transform: rotate(27deg);\n  -o-transform: rotate(27deg);\n  transform: rotate(27deg); }\n.wi-wind.from-208-deg {\n  -webkit-transform: rotate(28deg);\n  -moz-transform: rotate(28deg);\n  -ms-transform: rotate(28deg);\n  -o-transform: rotate(28deg);\n  transform: rotate(28deg); }\n.wi-wind.from-209-deg {\n  -webkit-transform: rotate(29deg);\n  -moz-transform: rotate(29deg);\n  -ms-transform: rotate(29deg);\n  -o-transform: rotate(29deg);\n  transform: rotate(29deg); }\n.wi-wind.from-210-deg {\n  -webkit-transform: rotate(30deg);\n  -moz-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg); }\n.wi-wind.from-211-deg {\n  -webkit-transform: rotate(31deg);\n  -moz-transform: rotate(31deg);\n  -ms-transform: rotate(31deg);\n  -o-transform: rotate(31deg);\n  transform: rotate(31deg); }\n.wi-wind.from-212-deg {\n  -webkit-transform: rotate(32deg);\n  -moz-transform: rotate(32deg);\n  -ms-transform: rotate(32deg);\n  -o-transform: rotate(32deg);\n  transform: rotate(32deg); }\n.wi-wind.from-213-deg {\n  -webkit-transform: rotate(33deg);\n  -moz-transform: rotate(33deg);\n  -ms-transform: rotate(33deg);\n  -o-transform: rotate(33deg);\n  transform: rotate(33deg); }\n.wi-wind.from-214-deg {\n  -webkit-transform: rotate(34deg);\n  -moz-transform: rotate(34deg);\n  -ms-transform: rotate(34deg);\n  -o-transform: rotate(34deg);\n  transform: rotate(34deg); }\n.wi-wind.from-215-deg {\n  -webkit-transform: rotate(35deg);\n  -moz-transform: rotate(35deg);\n  -ms-transform: rotate(35deg);\n  -o-transform: rotate(35deg);\n  transform: rotate(35deg); }\n.wi-wind.from-216-deg {\n  -webkit-transform: rotate(36deg);\n  -moz-transform: rotate(36deg);\n  -ms-transform: rotate(36deg);\n  -o-transform: rotate(36deg);\n  transform: rotate(36deg); }\n.wi-wind.from-217-deg {\n  -webkit-transform: rotate(37deg);\n  -moz-transform: rotate(37deg);\n  -ms-transform: rotate(37deg);\n  -o-transform: rotate(37deg);\n  transform: rotate(37deg); }\n.wi-wind.from-218-deg {\n  -webkit-transform: rotate(38deg);\n  -moz-transform: rotate(38deg);\n  -ms-transform: rotate(38deg);\n  -o-transform: rotate(38deg);\n  transform: rotate(38deg); }\n.wi-wind.from-219-deg {\n  -webkit-transform: rotate(39deg);\n  -moz-transform: rotate(39deg);\n  -ms-transform: rotate(39deg);\n  -o-transform: rotate(39deg);\n  transform: rotate(39deg); }\n.wi-wind.from-220-deg {\n  -webkit-transform: rotate(40deg);\n  -moz-transform: rotate(40deg);\n  -ms-transform: rotate(40deg);\n  -o-transform: rotate(40deg);\n  transform: rotate(40deg); }\n.wi-wind.from-221-deg {\n  -webkit-transform: rotate(41deg);\n  -moz-transform: rotate(41deg);\n  -ms-transform: rotate(41deg);\n  -o-transform: rotate(41deg);\n  transform: rotate(41deg); }\n.wi-wind.from-222-deg {\n  -webkit-transform: rotate(42deg);\n  -moz-transform: rotate(42deg);\n  -ms-transform: rotate(42deg);\n  -o-transform: rotate(42deg);\n  transform: rotate(42deg); }\n.wi-wind.from-223-deg {\n  -webkit-transform: rotate(43deg);\n  -moz-transform: rotate(43deg);\n  -ms-transform: rotate(43deg);\n  -o-transform: rotate(43deg);\n  transform: rotate(43deg); }\n.wi-wind.from-224-deg {\n  -webkit-transform: rotate(44deg);\n  -moz-transform: rotate(44deg);\n  -ms-transform: rotate(44deg);\n  -o-transform: rotate(44deg);\n  transform: rotate(44deg); }\n.wi-wind.from-225-deg {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n.wi-wind.from-226-deg {\n  -webkit-transform: rotate(46deg);\n  -moz-transform: rotate(46deg);\n  -ms-transform: rotate(46deg);\n  -o-transform: rotate(46deg);\n  transform: rotate(46deg); }\n.wi-wind.from-227-deg {\n  -webkit-transform: rotate(47deg);\n  -moz-transform: rotate(47deg);\n  -ms-transform: rotate(47deg);\n  -o-transform: rotate(47deg);\n  transform: rotate(47deg); }\n.wi-wind.from-228-deg {\n  -webkit-transform: rotate(48deg);\n  -moz-transform: rotate(48deg);\n  -ms-transform: rotate(48deg);\n  -o-transform: rotate(48deg);\n  transform: rotate(48deg); }\n.wi-wind.from-229-deg {\n  -webkit-transform: rotate(49deg);\n  -moz-transform: rotate(49deg);\n  -ms-transform: rotate(49deg);\n  -o-transform: rotate(49deg);\n  transform: rotate(49deg); }\n.wi-wind.from-230-deg {\n  -webkit-transform: rotate(50deg);\n  -moz-transform: rotate(50deg);\n  -ms-transform: rotate(50deg);\n  -o-transform: rotate(50deg);\n  transform: rotate(50deg); }\n.wi-wind.from-231-deg {\n  -webkit-transform: rotate(51deg);\n  -moz-transform: rotate(51deg);\n  -ms-transform: rotate(51deg);\n  -o-transform: rotate(51deg);\n  transform: rotate(51deg); }\n.wi-wind.from-232-deg {\n  -webkit-transform: rotate(52deg);\n  -moz-transform: rotate(52deg);\n  -ms-transform: rotate(52deg);\n  -o-transform: rotate(52deg);\n  transform: rotate(52deg); }\n.wi-wind.from-233-deg {\n  -webkit-transform: rotate(53deg);\n  -moz-transform: rotate(53deg);\n  -ms-transform: rotate(53deg);\n  -o-transform: rotate(53deg);\n  transform: rotate(53deg); }\n.wi-wind.from-234-deg {\n  -webkit-transform: rotate(54deg);\n  -moz-transform: rotate(54deg);\n  -ms-transform: rotate(54deg);\n  -o-transform: rotate(54deg);\n  transform: rotate(54deg); }\n.wi-wind.from-235-deg {\n  -webkit-transform: rotate(55deg);\n  -moz-transform: rotate(55deg);\n  -ms-transform: rotate(55deg);\n  -o-transform: rotate(55deg);\n  transform: rotate(55deg); }\n.wi-wind.from-236-deg {\n  -webkit-transform: rotate(56deg);\n  -moz-transform: rotate(56deg);\n  -ms-transform: rotate(56deg);\n  -o-transform: rotate(56deg);\n  transform: rotate(56deg); }\n.wi-wind.from-237-deg {\n  -webkit-transform: rotate(57deg);\n  -moz-transform: rotate(57deg);\n  -ms-transform: rotate(57deg);\n  -o-transform: rotate(57deg);\n  transform: rotate(57deg); }\n.wi-wind.from-238-deg {\n  -webkit-transform: rotate(58deg);\n  -moz-transform: rotate(58deg);\n  -ms-transform: rotate(58deg);\n  -o-transform: rotate(58deg);\n  transform: rotate(58deg); }\n.wi-wind.from-239-deg {\n  -webkit-transform: rotate(59deg);\n  -moz-transform: rotate(59deg);\n  -ms-transform: rotate(59deg);\n  -o-transform: rotate(59deg);\n  transform: rotate(59deg); }\n.wi-wind.from-240-deg {\n  -webkit-transform: rotate(60deg);\n  -moz-transform: rotate(60deg);\n  -ms-transform: rotate(60deg);\n  -o-transform: rotate(60deg);\n  transform: rotate(60deg); }\n.wi-wind.from-241-deg {\n  -webkit-transform: rotate(61deg);\n  -moz-transform: rotate(61deg);\n  -ms-transform: rotate(61deg);\n  -o-transform: rotate(61deg);\n  transform: rotate(61deg); }\n.wi-wind.from-242-deg {\n  -webkit-transform: rotate(62deg);\n  -moz-transform: rotate(62deg);\n  -ms-transform: rotate(62deg);\n  -o-transform: rotate(62deg);\n  transform: rotate(62deg); }\n.wi-wind.from-243-deg {\n  -webkit-transform: rotate(63deg);\n  -moz-transform: rotate(63deg);\n  -ms-transform: rotate(63deg);\n  -o-transform: rotate(63deg);\n  transform: rotate(63deg); }\n.wi-wind.from-244-deg {\n  -webkit-transform: rotate(64deg);\n  -moz-transform: rotate(64deg);\n  -ms-transform: rotate(64deg);\n  -o-transform: rotate(64deg);\n  transform: rotate(64deg); }\n.wi-wind.from-245-deg {\n  -webkit-transform: rotate(65deg);\n  -moz-transform: rotate(65deg);\n  -ms-transform: rotate(65deg);\n  -o-transform: rotate(65deg);\n  transform: rotate(65deg); }\n.wi-wind.from-246-deg {\n  -webkit-transform: rotate(66deg);\n  -moz-transform: rotate(66deg);\n  -ms-transform: rotate(66deg);\n  -o-transform: rotate(66deg);\n  transform: rotate(66deg); }\n.wi-wind.from-247-deg {\n  -webkit-transform: rotate(67deg);\n  -moz-transform: rotate(67deg);\n  -ms-transform: rotate(67deg);\n  -o-transform: rotate(67deg);\n  transform: rotate(67deg); }\n.wi-wind.from-248-deg {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n.wi-wind.from-249-deg {\n  -webkit-transform: rotate(69deg);\n  -moz-transform: rotate(69deg);\n  -ms-transform: rotate(69deg);\n  -o-transform: rotate(69deg);\n  transform: rotate(69deg); }\n.wi-wind.from-250-deg {\n  -webkit-transform: rotate(70deg);\n  -moz-transform: rotate(70deg);\n  -ms-transform: rotate(70deg);\n  -o-transform: rotate(70deg);\n  transform: rotate(70deg); }\n.wi-wind.from-251-deg {\n  -webkit-transform: rotate(71deg);\n  -moz-transform: rotate(71deg);\n  -ms-transform: rotate(71deg);\n  -o-transform: rotate(71deg);\n  transform: rotate(71deg); }\n.wi-wind.from-252-deg {\n  -webkit-transform: rotate(72deg);\n  -moz-transform: rotate(72deg);\n  -ms-transform: rotate(72deg);\n  -o-transform: rotate(72deg);\n  transform: rotate(72deg); }\n.wi-wind.from-253-deg {\n  -webkit-transform: rotate(73deg);\n  -moz-transform: rotate(73deg);\n  -ms-transform: rotate(73deg);\n  -o-transform: rotate(73deg);\n  transform: rotate(73deg); }\n.wi-wind.from-254-deg {\n  -webkit-transform: rotate(74deg);\n  -moz-transform: rotate(74deg);\n  -ms-transform: rotate(74deg);\n  -o-transform: rotate(74deg);\n  transform: rotate(74deg); }\n.wi-wind.from-255-deg {\n  -webkit-transform: rotate(75deg);\n  -moz-transform: rotate(75deg);\n  -ms-transform: rotate(75deg);\n  -o-transform: rotate(75deg);\n  transform: rotate(75deg); }\n.wi-wind.from-256-deg {\n  -webkit-transform: rotate(76deg);\n  -moz-transform: rotate(76deg);\n  -ms-transform: rotate(76deg);\n  -o-transform: rotate(76deg);\n  transform: rotate(76deg); }\n.wi-wind.from-257-deg {\n  -webkit-transform: rotate(77deg);\n  -moz-transform: rotate(77deg);\n  -ms-transform: rotate(77deg);\n  -o-transform: rotate(77deg);\n  transform: rotate(77deg); }\n.wi-wind.from-258-deg {\n  -webkit-transform: rotate(78deg);\n  -moz-transform: rotate(78deg);\n  -ms-transform: rotate(78deg);\n  -o-transform: rotate(78deg);\n  transform: rotate(78deg); }\n.wi-wind.from-259-deg {\n  -webkit-transform: rotate(79deg);\n  -moz-transform: rotate(79deg);\n  -ms-transform: rotate(79deg);\n  -o-transform: rotate(79deg);\n  transform: rotate(79deg); }\n.wi-wind.from-260-deg {\n  -webkit-transform: rotate(80deg);\n  -moz-transform: rotate(80deg);\n  -ms-transform: rotate(80deg);\n  -o-transform: rotate(80deg);\n  transform: rotate(80deg); }\n.wi-wind.from-261-deg {\n  -webkit-transform: rotate(81deg);\n  -moz-transform: rotate(81deg);\n  -ms-transform: rotate(81deg);\n  -o-transform: rotate(81deg);\n  transform: rotate(81deg); }\n.wi-wind.from-262-deg {\n  -webkit-transform: rotate(82deg);\n  -moz-transform: rotate(82deg);\n  -ms-transform: rotate(82deg);\n  -o-transform: rotate(82deg);\n  transform: rotate(82deg); }\n.wi-wind.from-263-deg {\n  -webkit-transform: rotate(83deg);\n  -moz-transform: rotate(83deg);\n  -ms-transform: rotate(83deg);\n  -o-transform: rotate(83deg);\n  transform: rotate(83deg); }\n.wi-wind.from-264-deg {\n  -webkit-transform: rotate(84deg);\n  -moz-transform: rotate(84deg);\n  -ms-transform: rotate(84deg);\n  -o-transform: rotate(84deg);\n  transform: rotate(84deg); }\n.wi-wind.from-265-deg {\n  -webkit-transform: rotate(85deg);\n  -moz-transform: rotate(85deg);\n  -ms-transform: rotate(85deg);\n  -o-transform: rotate(85deg);\n  transform: rotate(85deg); }\n.wi-wind.from-266-deg {\n  -webkit-transform: rotate(86deg);\n  -moz-transform: rotate(86deg);\n  -ms-transform: rotate(86deg);\n  -o-transform: rotate(86deg);\n  transform: rotate(86deg); }\n.wi-wind.from-267-deg {\n  -webkit-transform: rotate(87deg);\n  -moz-transform: rotate(87deg);\n  -ms-transform: rotate(87deg);\n  -o-transform: rotate(87deg);\n  transform: rotate(87deg); }\n.wi-wind.from-268-deg {\n  -webkit-transform: rotate(88deg);\n  -moz-transform: rotate(88deg);\n  -ms-transform: rotate(88deg);\n  -o-transform: rotate(88deg);\n  transform: rotate(88deg); }\n.wi-wind.from-269-deg {\n  -webkit-transform: rotate(89deg);\n  -moz-transform: rotate(89deg);\n  -ms-transform: rotate(89deg);\n  -o-transform: rotate(89deg);\n  transform: rotate(89deg); }\n.wi-wind.from-270-deg {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n.wi-wind.from-271-deg {\n  -webkit-transform: rotate(91deg);\n  -moz-transform: rotate(91deg);\n  -ms-transform: rotate(91deg);\n  -o-transform: rotate(91deg);\n  transform: rotate(91deg); }\n.wi-wind.from-272-deg {\n  -webkit-transform: rotate(92deg);\n  -moz-transform: rotate(92deg);\n  -ms-transform: rotate(92deg);\n  -o-transform: rotate(92deg);\n  transform: rotate(92deg); }\n.wi-wind.from-273-deg {\n  -webkit-transform: rotate(93deg);\n  -moz-transform: rotate(93deg);\n  -ms-transform: rotate(93deg);\n  -o-transform: rotate(93deg);\n  transform: rotate(93deg); }\n.wi-wind.from-274-deg {\n  -webkit-transform: rotate(94deg);\n  -moz-transform: rotate(94deg);\n  -ms-transform: rotate(94deg);\n  -o-transform: rotate(94deg);\n  transform: rotate(94deg); }\n.wi-wind.from-275-deg {\n  -webkit-transform: rotate(95deg);\n  -moz-transform: rotate(95deg);\n  -ms-transform: rotate(95deg);\n  -o-transform: rotate(95deg);\n  transform: rotate(95deg); }\n.wi-wind.from-276-deg {\n  -webkit-transform: rotate(96deg);\n  -moz-transform: rotate(96deg);\n  -ms-transform: rotate(96deg);\n  -o-transform: rotate(96deg);\n  transform: rotate(96deg); }\n.wi-wind.from-277-deg {\n  -webkit-transform: rotate(97deg);\n  -moz-transform: rotate(97deg);\n  -ms-transform: rotate(97deg);\n  -o-transform: rotate(97deg);\n  transform: rotate(97deg); }\n.wi-wind.from-278-deg {\n  -webkit-transform: rotate(98deg);\n  -moz-transform: rotate(98deg);\n  -ms-transform: rotate(98deg);\n  -o-transform: rotate(98deg);\n  transform: rotate(98deg); }\n.wi-wind.from-279-deg {\n  -webkit-transform: rotate(99deg);\n  -moz-transform: rotate(99deg);\n  -ms-transform: rotate(99deg);\n  -o-transform: rotate(99deg);\n  transform: rotate(99deg); }\n.wi-wind.from-280-deg {\n  -webkit-transform: rotate(100deg);\n  -moz-transform: rotate(100deg);\n  -ms-transform: rotate(100deg);\n  -o-transform: rotate(100deg);\n  transform: rotate(100deg); }\n.wi-wind.from-281-deg {\n  -webkit-transform: rotate(101deg);\n  -moz-transform: rotate(101deg);\n  -ms-transform: rotate(101deg);\n  -o-transform: rotate(101deg);\n  transform: rotate(101deg); }\n.wi-wind.from-282-deg {\n  -webkit-transform: rotate(102deg);\n  -moz-transform: rotate(102deg);\n  -ms-transform: rotate(102deg);\n  -o-transform: rotate(102deg);\n  transform: rotate(102deg); }\n.wi-wind.from-283-deg {\n  -webkit-transform: rotate(103deg);\n  -moz-transform: rotate(103deg);\n  -ms-transform: rotate(103deg);\n  -o-transform: rotate(103deg);\n  transform: rotate(103deg); }\n.wi-wind.from-284-deg {\n  -webkit-transform: rotate(104deg);\n  -moz-transform: rotate(104deg);\n  -ms-transform: rotate(104deg);\n  -o-transform: rotate(104deg);\n  transform: rotate(104deg); }\n.wi-wind.from-285-deg {\n  -webkit-transform: rotate(105deg);\n  -moz-transform: rotate(105deg);\n  -ms-transform: rotate(105deg);\n  -o-transform: rotate(105deg);\n  transform: rotate(105deg); }\n.wi-wind.from-286-deg {\n  -webkit-transform: rotate(106deg);\n  -moz-transform: rotate(106deg);\n  -ms-transform: rotate(106deg);\n  -o-transform: rotate(106deg);\n  transform: rotate(106deg); }\n.wi-wind.from-287-deg {\n  -webkit-transform: rotate(107deg);\n  -moz-transform: rotate(107deg);\n  -ms-transform: rotate(107deg);\n  -o-transform: rotate(107deg);\n  transform: rotate(107deg); }\n.wi-wind.from-288-deg {\n  -webkit-transform: rotate(108deg);\n  -moz-transform: rotate(108deg);\n  -ms-transform: rotate(108deg);\n  -o-transform: rotate(108deg);\n  transform: rotate(108deg); }\n.wi-wind.from-289-deg {\n  -webkit-transform: rotate(109deg);\n  -moz-transform: rotate(109deg);\n  -ms-transform: rotate(109deg);\n  -o-transform: rotate(109deg);\n  transform: rotate(109deg); }\n.wi-wind.from-290-deg {\n  -webkit-transform: rotate(110deg);\n  -moz-transform: rotate(110deg);\n  -ms-transform: rotate(110deg);\n  -o-transform: rotate(110deg);\n  transform: rotate(110deg); }\n.wi-wind.from-291-deg {\n  -webkit-transform: rotate(111deg);\n  -moz-transform: rotate(111deg);\n  -ms-transform: rotate(111deg);\n  -o-transform: rotate(111deg);\n  transform: rotate(111deg); }\n.wi-wind.from-292-deg {\n  -webkit-transform: rotate(112deg);\n  -moz-transform: rotate(112deg);\n  -ms-transform: rotate(112deg);\n  -o-transform: rotate(112deg);\n  transform: rotate(112deg); }\n.wi-wind.from-293-deg {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n.wi-wind.from-294-deg {\n  -webkit-transform: rotate(114deg);\n  -moz-transform: rotate(114deg);\n  -ms-transform: rotate(114deg);\n  -o-transform: rotate(114deg);\n  transform: rotate(114deg); }\n.wi-wind.from-295-deg {\n  -webkit-transform: rotate(115deg);\n  -moz-transform: rotate(115deg);\n  -ms-transform: rotate(115deg);\n  -o-transform: rotate(115deg);\n  transform: rotate(115deg); }\n.wi-wind.from-296-deg {\n  -webkit-transform: rotate(116deg);\n  -moz-transform: rotate(116deg);\n  -ms-transform: rotate(116deg);\n  -o-transform: rotate(116deg);\n  transform: rotate(116deg); }\n.wi-wind.from-297-deg {\n  -webkit-transform: rotate(117deg);\n  -moz-transform: rotate(117deg);\n  -ms-transform: rotate(117deg);\n  -o-transform: rotate(117deg);\n  transform: rotate(117deg); }\n.wi-wind.from-298-deg {\n  -webkit-transform: rotate(118deg);\n  -moz-transform: rotate(118deg);\n  -ms-transform: rotate(118deg);\n  -o-transform: rotate(118deg);\n  transform: rotate(118deg); }\n.wi-wind.from-299-deg {\n  -webkit-transform: rotate(119deg);\n  -moz-transform: rotate(119deg);\n  -ms-transform: rotate(119deg);\n  -o-transform: rotate(119deg);\n  transform: rotate(119deg); }\n.wi-wind.from-300-deg {\n  -webkit-transform: rotate(120deg);\n  -moz-transform: rotate(120deg);\n  -ms-transform: rotate(120deg);\n  -o-transform: rotate(120deg);\n  transform: rotate(120deg); }\n.wi-wind.from-301-deg {\n  -webkit-transform: rotate(121deg);\n  -moz-transform: rotate(121deg);\n  -ms-transform: rotate(121deg);\n  -o-transform: rotate(121deg);\n  transform: rotate(121deg); }\n.wi-wind.from-302-deg {\n  -webkit-transform: rotate(122deg);\n  -moz-transform: rotate(122deg);\n  -ms-transform: rotate(122deg);\n  -o-transform: rotate(122deg);\n  transform: rotate(122deg); }\n.wi-wind.from-303-deg {\n  -webkit-transform: rotate(123deg);\n  -moz-transform: rotate(123deg);\n  -ms-transform: rotate(123deg);\n  -o-transform: rotate(123deg);\n  transform: rotate(123deg); }\n.wi-wind.from-304-deg {\n  -webkit-transform: rotate(124deg);\n  -moz-transform: rotate(124deg);\n  -ms-transform: rotate(124deg);\n  -o-transform: rotate(124deg);\n  transform: rotate(124deg); }\n.wi-wind.from-305-deg {\n  -webkit-transform: rotate(125deg);\n  -moz-transform: rotate(125deg);\n  -ms-transform: rotate(125deg);\n  -o-transform: rotate(125deg);\n  transform: rotate(125deg); }\n.wi-wind.from-306-deg {\n  -webkit-transform: rotate(126deg);\n  -moz-transform: rotate(126deg);\n  -ms-transform: rotate(126deg);\n  -o-transform: rotate(126deg);\n  transform: rotate(126deg); }\n.wi-wind.from-307-deg {\n  -webkit-transform: rotate(127deg);\n  -moz-transform: rotate(127deg);\n  -ms-transform: rotate(127deg);\n  -o-transform: rotate(127deg);\n  transform: rotate(127deg); }\n.wi-wind.from-308-deg {\n  -webkit-transform: rotate(128deg);\n  -moz-transform: rotate(128deg);\n  -ms-transform: rotate(128deg);\n  -o-transform: rotate(128deg);\n  transform: rotate(128deg); }\n.wi-wind.from-309-deg {\n  -webkit-transform: rotate(129deg);\n  -moz-transform: rotate(129deg);\n  -ms-transform: rotate(129deg);\n  -o-transform: rotate(129deg);\n  transform: rotate(129deg); }\n.wi-wind.from-310-deg {\n  -webkit-transform: rotate(130deg);\n  -moz-transform: rotate(130deg);\n  -ms-transform: rotate(130deg);\n  -o-transform: rotate(130deg);\n  transform: rotate(130deg); }\n.wi-wind.from-311-deg {\n  -webkit-transform: rotate(131deg);\n  -moz-transform: rotate(131deg);\n  -ms-transform: rotate(131deg);\n  -o-transform: rotate(131deg);\n  transform: rotate(131deg); }\n.wi-wind.from-312-deg {\n  -webkit-transform: rotate(132deg);\n  -moz-transform: rotate(132deg);\n  -ms-transform: rotate(132deg);\n  -o-transform: rotate(132deg);\n  transform: rotate(132deg); }\n.wi-wind.from-313-deg {\n  -webkit-transform: rotate(133deg);\n  -moz-transform: rotate(133deg);\n  -ms-transform: rotate(133deg);\n  -o-transform: rotate(133deg);\n  transform: rotate(133deg); }\n.wi-wind.from-314-deg {\n  -webkit-transform: rotate(134deg);\n  -moz-transform: rotate(134deg);\n  -ms-transform: rotate(134deg);\n  -o-transform: rotate(134deg);\n  transform: rotate(134deg); }\n.wi-wind.from-315-deg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n.wi-wind.from-316-deg {\n  -webkit-transform: rotate(136deg);\n  -moz-transform: rotate(136deg);\n  -ms-transform: rotate(136deg);\n  -o-transform: rotate(136deg);\n  transform: rotate(136deg); }\n.wi-wind.from-317-deg {\n  -webkit-transform: rotate(137deg);\n  -moz-transform: rotate(137deg);\n  -ms-transform: rotate(137deg);\n  -o-transform: rotate(137deg);\n  transform: rotate(137deg); }\n.wi-wind.from-318-deg {\n  -webkit-transform: rotate(138deg);\n  -moz-transform: rotate(138deg);\n  -ms-transform: rotate(138deg);\n  -o-transform: rotate(138deg);\n  transform: rotate(138deg); }\n.wi-wind.from-319-deg {\n  -webkit-transform: rotate(139deg);\n  -moz-transform: rotate(139deg);\n  -ms-transform: rotate(139deg);\n  -o-transform: rotate(139deg);\n  transform: rotate(139deg); }\n.wi-wind.from-320-deg {\n  -webkit-transform: rotate(140deg);\n  -moz-transform: rotate(140deg);\n  -ms-transform: rotate(140deg);\n  -o-transform: rotate(140deg);\n  transform: rotate(140deg); }\n.wi-wind.from-321-deg {\n  -webkit-transform: rotate(141deg);\n  -moz-transform: rotate(141deg);\n  -ms-transform: rotate(141deg);\n  -o-transform: rotate(141deg);\n  transform: rotate(141deg); }\n.wi-wind.from-322-deg {\n  -webkit-transform: rotate(142deg);\n  -moz-transform: rotate(142deg);\n  -ms-transform: rotate(142deg);\n  -o-transform: rotate(142deg);\n  transform: rotate(142deg); }\n.wi-wind.from-323-deg {\n  -webkit-transform: rotate(143deg);\n  -moz-transform: rotate(143deg);\n  -ms-transform: rotate(143deg);\n  -o-transform: rotate(143deg);\n  transform: rotate(143deg); }\n.wi-wind.from-324-deg {\n  -webkit-transform: rotate(144deg);\n  -moz-transform: rotate(144deg);\n  -ms-transform: rotate(144deg);\n  -o-transform: rotate(144deg);\n  transform: rotate(144deg); }\n.wi-wind.from-325-deg {\n  -webkit-transform: rotate(145deg);\n  -moz-transform: rotate(145deg);\n  -ms-transform: rotate(145deg);\n  -o-transform: rotate(145deg);\n  transform: rotate(145deg); }\n.wi-wind.from-326-deg {\n  -webkit-transform: rotate(146deg);\n  -moz-transform: rotate(146deg);\n  -ms-transform: rotate(146deg);\n  -o-transform: rotate(146deg);\n  transform: rotate(146deg); }\n.wi-wind.from-327-deg {\n  -webkit-transform: rotate(147deg);\n  -moz-transform: rotate(147deg);\n  -ms-transform: rotate(147deg);\n  -o-transform: rotate(147deg);\n  transform: rotate(147deg); }\n.wi-wind.from-328-deg {\n  -webkit-transform: rotate(148deg);\n  -moz-transform: rotate(148deg);\n  -ms-transform: rotate(148deg);\n  -o-transform: rotate(148deg);\n  transform: rotate(148deg); }\n.wi-wind.from-329-deg {\n  -webkit-transform: rotate(149deg);\n  -moz-transform: rotate(149deg);\n  -ms-transform: rotate(149deg);\n  -o-transform: rotate(149deg);\n  transform: rotate(149deg); }\n.wi-wind.from-330-deg {\n  -webkit-transform: rotate(150deg);\n  -moz-transform: rotate(150deg);\n  -ms-transform: rotate(150deg);\n  -o-transform: rotate(150deg);\n  transform: rotate(150deg); }\n.wi-wind.from-331-deg {\n  -webkit-transform: rotate(151deg);\n  -moz-transform: rotate(151deg);\n  -ms-transform: rotate(151deg);\n  -o-transform: rotate(151deg);\n  transform: rotate(151deg); }\n.wi-wind.from-332-deg {\n  -webkit-transform: rotate(152deg);\n  -moz-transform: rotate(152deg);\n  -ms-transform: rotate(152deg);\n  -o-transform: rotate(152deg);\n  transform: rotate(152deg); }\n.wi-wind.from-333-deg {\n  -webkit-transform: rotate(153deg);\n  -moz-transform: rotate(153deg);\n  -ms-transform: rotate(153deg);\n  -o-transform: rotate(153deg);\n  transform: rotate(153deg); }\n.wi-wind.from-334-deg {\n  -webkit-transform: rotate(154deg);\n  -moz-transform: rotate(154deg);\n  -ms-transform: rotate(154deg);\n  -o-transform: rotate(154deg);\n  transform: rotate(154deg); }\n.wi-wind.from-335-deg {\n  -webkit-transform: rotate(155deg);\n  -moz-transform: rotate(155deg);\n  -ms-transform: rotate(155deg);\n  -o-transform: rotate(155deg);\n  transform: rotate(155deg); }\n.wi-wind.from-336-deg {\n  -webkit-transform: rotate(156deg);\n  -moz-transform: rotate(156deg);\n  -ms-transform: rotate(156deg);\n  -o-transform: rotate(156deg);\n  transform: rotate(156deg); }\n.wi-wind.from-337-deg {\n  -webkit-transform: rotate(157deg);\n  -moz-transform: rotate(157deg);\n  -ms-transform: rotate(157deg);\n  -o-transform: rotate(157deg);\n  transform: rotate(157deg); }\n.wi-wind.from-338-deg {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n.wi-wind.from-339-deg {\n  -webkit-transform: rotate(159deg);\n  -moz-transform: rotate(159deg);\n  -ms-transform: rotate(159deg);\n  -o-transform: rotate(159deg);\n  transform: rotate(159deg); }\n.wi-wind.from-340-deg {\n  -webkit-transform: rotate(160deg);\n  -moz-transform: rotate(160deg);\n  -ms-transform: rotate(160deg);\n  -o-transform: rotate(160deg);\n  transform: rotate(160deg); }\n.wi-wind.from-341-deg {\n  -webkit-transform: rotate(161deg);\n  -moz-transform: rotate(161deg);\n  -ms-transform: rotate(161deg);\n  -o-transform: rotate(161deg);\n  transform: rotate(161deg); }\n.wi-wind.from-342-deg {\n  -webkit-transform: rotate(162deg);\n  -moz-transform: rotate(162deg);\n  -ms-transform: rotate(162deg);\n  -o-transform: rotate(162deg);\n  transform: rotate(162deg); }\n.wi-wind.from-343-deg {\n  -webkit-transform: rotate(163deg);\n  -moz-transform: rotate(163deg);\n  -ms-transform: rotate(163deg);\n  -o-transform: rotate(163deg);\n  transform: rotate(163deg); }\n.wi-wind.from-344-deg {\n  -webkit-transform: rotate(164deg);\n  -moz-transform: rotate(164deg);\n  -ms-transform: rotate(164deg);\n  -o-transform: rotate(164deg);\n  transform: rotate(164deg); }\n.wi-wind.from-345-deg {\n  -webkit-transform: rotate(165deg);\n  -moz-transform: rotate(165deg);\n  -ms-transform: rotate(165deg);\n  -o-transform: rotate(165deg);\n  transform: rotate(165deg); }\n.wi-wind.from-346-deg {\n  -webkit-transform: rotate(166deg);\n  -moz-transform: rotate(166deg);\n  -ms-transform: rotate(166deg);\n  -o-transform: rotate(166deg);\n  transform: rotate(166deg); }\n.wi-wind.from-347-deg {\n  -webkit-transform: rotate(167deg);\n  -moz-transform: rotate(167deg);\n  -ms-transform: rotate(167deg);\n  -o-transform: rotate(167deg);\n  transform: rotate(167deg); }\n.wi-wind.from-348-deg {\n  -webkit-transform: rotate(168deg);\n  -moz-transform: rotate(168deg);\n  -ms-transform: rotate(168deg);\n  -o-transform: rotate(168deg);\n  transform: rotate(168deg); }\n.wi-wind.from-349-deg {\n  -webkit-transform: rotate(169deg);\n  -moz-transform: rotate(169deg);\n  -ms-transform: rotate(169deg);\n  -o-transform: rotate(169deg);\n  transform: rotate(169deg); }\n.wi-wind.from-350-deg {\n  -webkit-transform: rotate(170deg);\n  -moz-transform: rotate(170deg);\n  -ms-transform: rotate(170deg);\n  -o-transform: rotate(170deg);\n  transform: rotate(170deg); }\n.wi-wind.from-351-deg {\n  -webkit-transform: rotate(171deg);\n  -moz-transform: rotate(171deg);\n  -ms-transform: rotate(171deg);\n  -o-transform: rotate(171deg);\n  transform: rotate(171deg); }\n.wi-wind.from-352-deg {\n  -webkit-transform: rotate(172deg);\n  -moz-transform: rotate(172deg);\n  -ms-transform: rotate(172deg);\n  -o-transform: rotate(172deg);\n  transform: rotate(172deg); }\n.wi-wind.from-353-deg {\n  -webkit-transform: rotate(173deg);\n  -moz-transform: rotate(173deg);\n  -ms-transform: rotate(173deg);\n  -o-transform: rotate(173deg);\n  transform: rotate(173deg); }\n.wi-wind.from-354-deg {\n  -webkit-transform: rotate(174deg);\n  -moz-transform: rotate(174deg);\n  -ms-transform: rotate(174deg);\n  -o-transform: rotate(174deg);\n  transform: rotate(174deg); }\n.wi-wind.from-355-deg {\n  -webkit-transform: rotate(175deg);\n  -moz-transform: rotate(175deg);\n  -ms-transform: rotate(175deg);\n  -o-transform: rotate(175deg);\n  transform: rotate(175deg); }\n.wi-wind.from-356-deg {\n  -webkit-transform: rotate(176deg);\n  -moz-transform: rotate(176deg);\n  -ms-transform: rotate(176deg);\n  -o-transform: rotate(176deg);\n  transform: rotate(176deg); }\n.wi-wind.from-357-deg {\n  -webkit-transform: rotate(177deg);\n  -moz-transform: rotate(177deg);\n  -ms-transform: rotate(177deg);\n  -o-transform: rotate(177deg);\n  transform: rotate(177deg); }\n.wi-wind.from-358-deg {\n  -webkit-transform: rotate(178deg);\n  -moz-transform: rotate(178deg);\n  -ms-transform: rotate(178deg);\n  -o-transform: rotate(178deg);\n  transform: rotate(178deg); }\n.wi-wind.from-359-deg {\n  -webkit-transform: rotate(179deg);\n  -moz-transform: rotate(179deg);\n  -ms-transform: rotate(179deg);\n  -o-transform: rotate(179deg);\n  transform: rotate(179deg); }\n.wi-wind.from-360-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-wind.towards-0-deg, .wi-wind-towards-n {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.towards-1-deg {\n  -webkit-transform: rotate(1deg);\n  -moz-transform: rotate(1deg);\n  -ms-transform: rotate(1deg);\n  -o-transform: rotate(1deg);\n  transform: rotate(1deg); }\n.wi-wind.towards-2-deg {\n  -webkit-transform: rotate(2deg);\n  -moz-transform: rotate(2deg);\n  -ms-transform: rotate(2deg);\n  -o-transform: rotate(2deg);\n  transform: rotate(2deg); }\n.wi-wind.towards-3-deg {\n  -webkit-transform: rotate(3deg);\n  -moz-transform: rotate(3deg);\n  -ms-transform: rotate(3deg);\n  -o-transform: rotate(3deg);\n  transform: rotate(3deg); }\n.wi-wind.towards-4-deg {\n  -webkit-transform: rotate(4deg);\n  -moz-transform: rotate(4deg);\n  -ms-transform: rotate(4deg);\n  -o-transform: rotate(4deg);\n  transform: rotate(4deg); }\n.wi-wind.towards-5-deg {\n  -webkit-transform: rotate(5deg);\n  -moz-transform: rotate(5deg);\n  -ms-transform: rotate(5deg);\n  -o-transform: rotate(5deg);\n  transform: rotate(5deg); }\n.wi-wind.towards-6-deg {\n  -webkit-transform: rotate(6deg);\n  -moz-transform: rotate(6deg);\n  -ms-transform: rotate(6deg);\n  -o-transform: rotate(6deg);\n  transform: rotate(6deg); }\n.wi-wind.towards-7-deg {\n  -webkit-transform: rotate(7deg);\n  -moz-transform: rotate(7deg);\n  -ms-transform: rotate(7deg);\n  -o-transform: rotate(7deg);\n  transform: rotate(7deg); }\n.wi-wind.towards-8-deg {\n  -webkit-transform: rotate(8deg);\n  -moz-transform: rotate(8deg);\n  -ms-transform: rotate(8deg);\n  -o-transform: rotate(8deg);\n  transform: rotate(8deg); }\n.wi-wind.towards-9-deg {\n  -webkit-transform: rotate(9deg);\n  -moz-transform: rotate(9deg);\n  -ms-transform: rotate(9deg);\n  -o-transform: rotate(9deg);\n  transform: rotate(9deg); }\n.wi-wind.towards-10-deg {\n  -webkit-transform: rotate(10deg);\n  -moz-transform: rotate(10deg);\n  -ms-transform: rotate(10deg);\n  -o-transform: rotate(10deg);\n  transform: rotate(10deg); }\n.wi-wind.towards-11-deg {\n  -webkit-transform: rotate(11deg);\n  -moz-transform: rotate(11deg);\n  -ms-transform: rotate(11deg);\n  -o-transform: rotate(11deg);\n  transform: rotate(11deg); }\n.wi-wind.towards-12-deg {\n  -webkit-transform: rotate(12deg);\n  -moz-transform: rotate(12deg);\n  -ms-transform: rotate(12deg);\n  -o-transform: rotate(12deg);\n  transform: rotate(12deg); }\n.wi-wind.towards-13-deg {\n  -webkit-transform: rotate(13deg);\n  -moz-transform: rotate(13deg);\n  -ms-transform: rotate(13deg);\n  -o-transform: rotate(13deg);\n  transform: rotate(13deg); }\n.wi-wind.towards-14-deg {\n  -webkit-transform: rotate(14deg);\n  -moz-transform: rotate(14deg);\n  -ms-transform: rotate(14deg);\n  -o-transform: rotate(14deg);\n  transform: rotate(14deg); }\n.wi-wind.towards-15-deg {\n  -webkit-transform: rotate(15deg);\n  -moz-transform: rotate(15deg);\n  -ms-transform: rotate(15deg);\n  -o-transform: rotate(15deg);\n  transform: rotate(15deg); }\n.wi-wind.towards-16-deg {\n  -webkit-transform: rotate(16deg);\n  -moz-transform: rotate(16deg);\n  -ms-transform: rotate(16deg);\n  -o-transform: rotate(16deg);\n  transform: rotate(16deg); }\n.wi-wind.towards-17-deg {\n  -webkit-transform: rotate(17deg);\n  -moz-transform: rotate(17deg);\n  -ms-transform: rotate(17deg);\n  -o-transform: rotate(17deg);\n  transform: rotate(17deg); }\n.wi-wind.towards-18-deg {\n  -webkit-transform: rotate(18deg);\n  -moz-transform: rotate(18deg);\n  -ms-transform: rotate(18deg);\n  -o-transform: rotate(18deg);\n  transform: rotate(18deg); }\n.wi-wind.towards-19-deg {\n  -webkit-transform: rotate(19deg);\n  -moz-transform: rotate(19deg);\n  -ms-transform: rotate(19deg);\n  -o-transform: rotate(19deg);\n  transform: rotate(19deg); }\n.wi-wind.towards-20-deg {\n  -webkit-transform: rotate(20deg);\n  -moz-transform: rotate(20deg);\n  -ms-transform: rotate(20deg);\n  -o-transform: rotate(20deg);\n  transform: rotate(20deg); }\n.wi-wind.towards-21-deg {\n  -webkit-transform: rotate(21deg);\n  -moz-transform: rotate(21deg);\n  -ms-transform: rotate(21deg);\n  -o-transform: rotate(21deg);\n  transform: rotate(21deg); }\n.wi-wind.towards-22-deg {\n  -webkit-transform: rotate(22deg);\n  -moz-transform: rotate(22deg);\n  -ms-transform: rotate(22deg);\n  -o-transform: rotate(22deg);\n  transform: rotate(22deg); }\n.wi-wind.towards-23-deg {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n.wi-wind.towards-24-deg {\n  -webkit-transform: rotate(24deg);\n  -moz-transform: rotate(24deg);\n  -ms-transform: rotate(24deg);\n  -o-transform: rotate(24deg);\n  transform: rotate(24deg); }\n.wi-wind.towards-25-deg {\n  -webkit-transform: rotate(25deg);\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -o-transform: rotate(25deg);\n  transform: rotate(25deg); }\n.wi-wind.towards-26-deg {\n  -webkit-transform: rotate(26deg);\n  -moz-transform: rotate(26deg);\n  -ms-transform: rotate(26deg);\n  -o-transform: rotate(26deg);\n  transform: rotate(26deg); }\n.wi-wind.towards-27-deg {\n  -webkit-transform: rotate(27deg);\n  -moz-transform: rotate(27deg);\n  -ms-transform: rotate(27deg);\n  -o-transform: rotate(27deg);\n  transform: rotate(27deg); }\n.wi-wind.towards-28-deg {\n  -webkit-transform: rotate(28deg);\n  -moz-transform: rotate(28deg);\n  -ms-transform: rotate(28deg);\n  -o-transform: rotate(28deg);\n  transform: rotate(28deg); }\n.wi-wind.towards-29-deg {\n  -webkit-transform: rotate(29deg);\n  -moz-transform: rotate(29deg);\n  -ms-transform: rotate(29deg);\n  -o-transform: rotate(29deg);\n  transform: rotate(29deg); }\n.wi-wind.towards-30-deg {\n  -webkit-transform: rotate(30deg);\n  -moz-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg); }\n.wi-wind.towards-31-deg {\n  -webkit-transform: rotate(31deg);\n  -moz-transform: rotate(31deg);\n  -ms-transform: rotate(31deg);\n  -o-transform: rotate(31deg);\n  transform: rotate(31deg); }\n.wi-wind.towards-32-deg {\n  -webkit-transform: rotate(32deg);\n  -moz-transform: rotate(32deg);\n  -ms-transform: rotate(32deg);\n  -o-transform: rotate(32deg);\n  transform: rotate(32deg); }\n.wi-wind.towards-33-deg {\n  -webkit-transform: rotate(33deg);\n  -moz-transform: rotate(33deg);\n  -ms-transform: rotate(33deg);\n  -o-transform: rotate(33deg);\n  transform: rotate(33deg); }\n.wi-wind.towards-34-deg {\n  -webkit-transform: rotate(34deg);\n  -moz-transform: rotate(34deg);\n  -ms-transform: rotate(34deg);\n  -o-transform: rotate(34deg);\n  transform: rotate(34deg); }\n.wi-wind.towards-35-deg {\n  -webkit-transform: rotate(35deg);\n  -moz-transform: rotate(35deg);\n  -ms-transform: rotate(35deg);\n  -o-transform: rotate(35deg);\n  transform: rotate(35deg); }\n.wi-wind.towards-36-deg {\n  -webkit-transform: rotate(36deg);\n  -moz-transform: rotate(36deg);\n  -ms-transform: rotate(36deg);\n  -o-transform: rotate(36deg);\n  transform: rotate(36deg); }\n.wi-wind.towards-37-deg {\n  -webkit-transform: rotate(37deg);\n  -moz-transform: rotate(37deg);\n  -ms-transform: rotate(37deg);\n  -o-transform: rotate(37deg);\n  transform: rotate(37deg); }\n.wi-wind.towards-38-deg {\n  -webkit-transform: rotate(38deg);\n  -moz-transform: rotate(38deg);\n  -ms-transform: rotate(38deg);\n  -o-transform: rotate(38deg);\n  transform: rotate(38deg); }\n.wi-wind.towards-39-deg {\n  -webkit-transform: rotate(39deg);\n  -moz-transform: rotate(39deg);\n  -ms-transform: rotate(39deg);\n  -o-transform: rotate(39deg);\n  transform: rotate(39deg); }\n.wi-wind.towards-40-deg {\n  -webkit-transform: rotate(40deg);\n  -moz-transform: rotate(40deg);\n  -ms-transform: rotate(40deg);\n  -o-transform: rotate(40deg);\n  transform: rotate(40deg); }\n.wi-wind.towards-41-deg {\n  -webkit-transform: rotate(41deg);\n  -moz-transform: rotate(41deg);\n  -ms-transform: rotate(41deg);\n  -o-transform: rotate(41deg);\n  transform: rotate(41deg); }\n.wi-wind.towards-42-deg {\n  -webkit-transform: rotate(42deg);\n  -moz-transform: rotate(42deg);\n  -ms-transform: rotate(42deg);\n  -o-transform: rotate(42deg);\n  transform: rotate(42deg); }\n.wi-wind.towards-43-deg {\n  -webkit-transform: rotate(43deg);\n  -moz-transform: rotate(43deg);\n  -ms-transform: rotate(43deg);\n  -o-transform: rotate(43deg);\n  transform: rotate(43deg); }\n.wi-wind.towards-44-deg {\n  -webkit-transform: rotate(44deg);\n  -moz-transform: rotate(44deg);\n  -ms-transform: rotate(44deg);\n  -o-transform: rotate(44deg);\n  transform: rotate(44deg); }\n.wi-wind.towards-45-deg {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n.wi-wind.towards-46-deg {\n  -webkit-transform: rotate(46deg);\n  -moz-transform: rotate(46deg);\n  -ms-transform: rotate(46deg);\n  -o-transform: rotate(46deg);\n  transform: rotate(46deg); }\n.wi-wind.towards-47-deg {\n  -webkit-transform: rotate(47deg);\n  -moz-transform: rotate(47deg);\n  -ms-transform: rotate(47deg);\n  -o-transform: rotate(47deg);\n  transform: rotate(47deg); }\n.wi-wind.towards-48-deg {\n  -webkit-transform: rotate(48deg);\n  -moz-transform: rotate(48deg);\n  -ms-transform: rotate(48deg);\n  -o-transform: rotate(48deg);\n  transform: rotate(48deg); }\n.wi-wind.towards-49-deg {\n  -webkit-transform: rotate(49deg);\n  -moz-transform: rotate(49deg);\n  -ms-transform: rotate(49deg);\n  -o-transform: rotate(49deg);\n  transform: rotate(49deg); }\n.wi-wind.towards-50-deg {\n  -webkit-transform: rotate(50deg);\n  -moz-transform: rotate(50deg);\n  -ms-transform: rotate(50deg);\n  -o-transform: rotate(50deg);\n  transform: rotate(50deg); }\n.wi-wind.towards-51-deg {\n  -webkit-transform: rotate(51deg);\n  -moz-transform: rotate(51deg);\n  -ms-transform: rotate(51deg);\n  -o-transform: rotate(51deg);\n  transform: rotate(51deg); }\n.wi-wind.towards-52-deg {\n  -webkit-transform: rotate(52deg);\n  -moz-transform: rotate(52deg);\n  -ms-transform: rotate(52deg);\n  -o-transform: rotate(52deg);\n  transform: rotate(52deg); }\n.wi-wind.towards-53-deg {\n  -webkit-transform: rotate(53deg);\n  -moz-transform: rotate(53deg);\n  -ms-transform: rotate(53deg);\n  -o-transform: rotate(53deg);\n  transform: rotate(53deg); }\n.wi-wind.towards-54-deg {\n  -webkit-transform: rotate(54deg);\n  -moz-transform: rotate(54deg);\n  -ms-transform: rotate(54deg);\n  -o-transform: rotate(54deg);\n  transform: rotate(54deg); }\n.wi-wind.towards-55-deg {\n  -webkit-transform: rotate(55deg);\n  -moz-transform: rotate(55deg);\n  -ms-transform: rotate(55deg);\n  -o-transform: rotate(55deg);\n  transform: rotate(55deg); }\n.wi-wind.towards-56-deg {\n  -webkit-transform: rotate(56deg);\n  -moz-transform: rotate(56deg);\n  -ms-transform: rotate(56deg);\n  -o-transform: rotate(56deg);\n  transform: rotate(56deg); }\n.wi-wind.towards-57-deg {\n  -webkit-transform: rotate(57deg);\n  -moz-transform: rotate(57deg);\n  -ms-transform: rotate(57deg);\n  -o-transform: rotate(57deg);\n  transform: rotate(57deg); }\n.wi-wind.towards-58-deg {\n  -webkit-transform: rotate(58deg);\n  -moz-transform: rotate(58deg);\n  -ms-transform: rotate(58deg);\n  -o-transform: rotate(58deg);\n  transform: rotate(58deg); }\n.wi-wind.towards-59-deg {\n  -webkit-transform: rotate(59deg);\n  -moz-transform: rotate(59deg);\n  -ms-transform: rotate(59deg);\n  -o-transform: rotate(59deg);\n  transform: rotate(59deg); }\n.wi-wind.towards-60-deg {\n  -webkit-transform: rotate(60deg);\n  -moz-transform: rotate(60deg);\n  -ms-transform: rotate(60deg);\n  -o-transform: rotate(60deg);\n  transform: rotate(60deg); }\n.wi-wind.towards-61-deg {\n  -webkit-transform: rotate(61deg);\n  -moz-transform: rotate(61deg);\n  -ms-transform: rotate(61deg);\n  -o-transform: rotate(61deg);\n  transform: rotate(61deg); }\n.wi-wind.towards-62-deg {\n  -webkit-transform: rotate(62deg);\n  -moz-transform: rotate(62deg);\n  -ms-transform: rotate(62deg);\n  -o-transform: rotate(62deg);\n  transform: rotate(62deg); }\n.wi-wind.towards-63-deg {\n  -webkit-transform: rotate(63deg);\n  -moz-transform: rotate(63deg);\n  -ms-transform: rotate(63deg);\n  -o-transform: rotate(63deg);\n  transform: rotate(63deg); }\n.wi-wind.towards-64-deg {\n  -webkit-transform: rotate(64deg);\n  -moz-transform: rotate(64deg);\n  -ms-transform: rotate(64deg);\n  -o-transform: rotate(64deg);\n  transform: rotate(64deg); }\n.wi-wind.towards-65-deg {\n  -webkit-transform: rotate(65deg);\n  -moz-transform: rotate(65deg);\n  -ms-transform: rotate(65deg);\n  -o-transform: rotate(65deg);\n  transform: rotate(65deg); }\n.wi-wind.towards-66-deg {\n  -webkit-transform: rotate(66deg);\n  -moz-transform: rotate(66deg);\n  -ms-transform: rotate(66deg);\n  -o-transform: rotate(66deg);\n  transform: rotate(66deg); }\n.wi-wind.towards-67-deg {\n  -webkit-transform: rotate(67deg);\n  -moz-transform: rotate(67deg);\n  -ms-transform: rotate(67deg);\n  -o-transform: rotate(67deg);\n  transform: rotate(67deg); }\n.wi-wind.towards-68-deg {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n.wi-wind.towards-69-deg {\n  -webkit-transform: rotate(69deg);\n  -moz-transform: rotate(69deg);\n  -ms-transform: rotate(69deg);\n  -o-transform: rotate(69deg);\n  transform: rotate(69deg); }\n.wi-wind.towards-70-deg {\n  -webkit-transform: rotate(70deg);\n  -moz-transform: rotate(70deg);\n  -ms-transform: rotate(70deg);\n  -o-transform: rotate(70deg);\n  transform: rotate(70deg); }\n.wi-wind.towards-71-deg {\n  -webkit-transform: rotate(71deg);\n  -moz-transform: rotate(71deg);\n  -ms-transform: rotate(71deg);\n  -o-transform: rotate(71deg);\n  transform: rotate(71deg); }\n.wi-wind.towards-72-deg {\n  -webkit-transform: rotate(72deg);\n  -moz-transform: rotate(72deg);\n  -ms-transform: rotate(72deg);\n  -o-transform: rotate(72deg);\n  transform: rotate(72deg); }\n.wi-wind.towards-73-deg {\n  -webkit-transform: rotate(73deg);\n  -moz-transform: rotate(73deg);\n  -ms-transform: rotate(73deg);\n  -o-transform: rotate(73deg);\n  transform: rotate(73deg); }\n.wi-wind.towards-74-deg {\n  -webkit-transform: rotate(74deg);\n  -moz-transform: rotate(74deg);\n  -ms-transform: rotate(74deg);\n  -o-transform: rotate(74deg);\n  transform: rotate(74deg); }\n.wi-wind.towards-75-deg {\n  -webkit-transform: rotate(75deg);\n  -moz-transform: rotate(75deg);\n  -ms-transform: rotate(75deg);\n  -o-transform: rotate(75deg);\n  transform: rotate(75deg); }\n.wi-wind.towards-76-deg {\n  -webkit-transform: rotate(76deg);\n  -moz-transform: rotate(76deg);\n  -ms-transform: rotate(76deg);\n  -o-transform: rotate(76deg);\n  transform: rotate(76deg); }\n.wi-wind.towards-77-deg {\n  -webkit-transform: rotate(77deg);\n  -moz-transform: rotate(77deg);\n  -ms-transform: rotate(77deg);\n  -o-transform: rotate(77deg);\n  transform: rotate(77deg); }\n.wi-wind.towards-78-deg {\n  -webkit-transform: rotate(78deg);\n  -moz-transform: rotate(78deg);\n  -ms-transform: rotate(78deg);\n  -o-transform: rotate(78deg);\n  transform: rotate(78deg); }\n.wi-wind.towards-79-deg {\n  -webkit-transform: rotate(79deg);\n  -moz-transform: rotate(79deg);\n  -ms-transform: rotate(79deg);\n  -o-transform: rotate(79deg);\n  transform: rotate(79deg); }\n.wi-wind.towards-80-deg {\n  -webkit-transform: rotate(80deg);\n  -moz-transform: rotate(80deg);\n  -ms-transform: rotate(80deg);\n  -o-transform: rotate(80deg);\n  transform: rotate(80deg); }\n.wi-wind.towards-81-deg {\n  -webkit-transform: rotate(81deg);\n  -moz-transform: rotate(81deg);\n  -ms-transform: rotate(81deg);\n  -o-transform: rotate(81deg);\n  transform: rotate(81deg); }\n.wi-wind.towards-82-deg {\n  -webkit-transform: rotate(82deg);\n  -moz-transform: rotate(82deg);\n  -ms-transform: rotate(82deg);\n  -o-transform: rotate(82deg);\n  transform: rotate(82deg); }\n.wi-wind.towards-83-deg {\n  -webkit-transform: rotate(83deg);\n  -moz-transform: rotate(83deg);\n  -ms-transform: rotate(83deg);\n  -o-transform: rotate(83deg);\n  transform: rotate(83deg); }\n.wi-wind.towards-84-deg {\n  -webkit-transform: rotate(84deg);\n  -moz-transform: rotate(84deg);\n  -ms-transform: rotate(84deg);\n  -o-transform: rotate(84deg);\n  transform: rotate(84deg); }\n.wi-wind.towards-85-deg {\n  -webkit-transform: rotate(85deg);\n  -moz-transform: rotate(85deg);\n  -ms-transform: rotate(85deg);\n  -o-transform: rotate(85deg);\n  transform: rotate(85deg); }\n.wi-wind.towards-86-deg {\n  -webkit-transform: rotate(86deg);\n  -moz-transform: rotate(86deg);\n  -ms-transform: rotate(86deg);\n  -o-transform: rotate(86deg);\n  transform: rotate(86deg); }\n.wi-wind.towards-87-deg {\n  -webkit-transform: rotate(87deg);\n  -moz-transform: rotate(87deg);\n  -ms-transform: rotate(87deg);\n  -o-transform: rotate(87deg);\n  transform: rotate(87deg); }\n.wi-wind.towards-88-deg {\n  -webkit-transform: rotate(88deg);\n  -moz-transform: rotate(88deg);\n  -ms-transform: rotate(88deg);\n  -o-transform: rotate(88deg);\n  transform: rotate(88deg); }\n.wi-wind.towards-89-deg {\n  -webkit-transform: rotate(89deg);\n  -moz-transform: rotate(89deg);\n  -ms-transform: rotate(89deg);\n  -o-transform: rotate(89deg);\n  transform: rotate(89deg); }\n.wi-wind.towards-90-deg {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n.wi-wind.towards-91-deg {\n  -webkit-transform: rotate(91deg);\n  -moz-transform: rotate(91deg);\n  -ms-transform: rotate(91deg);\n  -o-transform: rotate(91deg);\n  transform: rotate(91deg); }\n.wi-wind.towards-92-deg {\n  -webkit-transform: rotate(92deg);\n  -moz-transform: rotate(92deg);\n  -ms-transform: rotate(92deg);\n  -o-transform: rotate(92deg);\n  transform: rotate(92deg); }\n.wi-wind.towards-93-deg {\n  -webkit-transform: rotate(93deg);\n  -moz-transform: rotate(93deg);\n  -ms-transform: rotate(93deg);\n  -o-transform: rotate(93deg);\n  transform: rotate(93deg); }\n.wi-wind.towards-94-deg {\n  -webkit-transform: rotate(94deg);\n  -moz-transform: rotate(94deg);\n  -ms-transform: rotate(94deg);\n  -o-transform: rotate(94deg);\n  transform: rotate(94deg); }\n.wi-wind.towards-95-deg {\n  -webkit-transform: rotate(95deg);\n  -moz-transform: rotate(95deg);\n  -ms-transform: rotate(95deg);\n  -o-transform: rotate(95deg);\n  transform: rotate(95deg); }\n.wi-wind.towards-96-deg {\n  -webkit-transform: rotate(96deg);\n  -moz-transform: rotate(96deg);\n  -ms-transform: rotate(96deg);\n  -o-transform: rotate(96deg);\n  transform: rotate(96deg); }\n.wi-wind.towards-97-deg {\n  -webkit-transform: rotate(97deg);\n  -moz-transform: rotate(97deg);\n  -ms-transform: rotate(97deg);\n  -o-transform: rotate(97deg);\n  transform: rotate(97deg); }\n.wi-wind.towards-98-deg {\n  -webkit-transform: rotate(98deg);\n  -moz-transform: rotate(98deg);\n  -ms-transform: rotate(98deg);\n  -o-transform: rotate(98deg);\n  transform: rotate(98deg); }\n.wi-wind.towards-99-deg {\n  -webkit-transform: rotate(99deg);\n  -moz-transform: rotate(99deg);\n  -ms-transform: rotate(99deg);\n  -o-transform: rotate(99deg);\n  transform: rotate(99deg); }\n.wi-wind.towards-100-deg {\n  -webkit-transform: rotate(100deg);\n  -moz-transform: rotate(100deg);\n  -ms-transform: rotate(100deg);\n  -o-transform: rotate(100deg);\n  transform: rotate(100deg); }\n.wi-wind.towards-101-deg {\n  -webkit-transform: rotate(101deg);\n  -moz-transform: rotate(101deg);\n  -ms-transform: rotate(101deg);\n  -o-transform: rotate(101deg);\n  transform: rotate(101deg); }\n.wi-wind.towards-102-deg {\n  -webkit-transform: rotate(102deg);\n  -moz-transform: rotate(102deg);\n  -ms-transform: rotate(102deg);\n  -o-transform: rotate(102deg);\n  transform: rotate(102deg); }\n.wi-wind.towards-103-deg {\n  -webkit-transform: rotate(103deg);\n  -moz-transform: rotate(103deg);\n  -ms-transform: rotate(103deg);\n  -o-transform: rotate(103deg);\n  transform: rotate(103deg); }\n.wi-wind.towards-104-deg {\n  -webkit-transform: rotate(104deg);\n  -moz-transform: rotate(104deg);\n  -ms-transform: rotate(104deg);\n  -o-transform: rotate(104deg);\n  transform: rotate(104deg); }\n.wi-wind.towards-105-deg {\n  -webkit-transform: rotate(105deg);\n  -moz-transform: rotate(105deg);\n  -ms-transform: rotate(105deg);\n  -o-transform: rotate(105deg);\n  transform: rotate(105deg); }\n.wi-wind.towards-106-deg {\n  -webkit-transform: rotate(106deg);\n  -moz-transform: rotate(106deg);\n  -ms-transform: rotate(106deg);\n  -o-transform: rotate(106deg);\n  transform: rotate(106deg); }\n.wi-wind.towards-107-deg {\n  -webkit-transform: rotate(107deg);\n  -moz-transform: rotate(107deg);\n  -ms-transform: rotate(107deg);\n  -o-transform: rotate(107deg);\n  transform: rotate(107deg); }\n.wi-wind.towards-108-deg {\n  -webkit-transform: rotate(108deg);\n  -moz-transform: rotate(108deg);\n  -ms-transform: rotate(108deg);\n  -o-transform: rotate(108deg);\n  transform: rotate(108deg); }\n.wi-wind.towards-109-deg {\n  -webkit-transform: rotate(109deg);\n  -moz-transform: rotate(109deg);\n  -ms-transform: rotate(109deg);\n  -o-transform: rotate(109deg);\n  transform: rotate(109deg); }\n.wi-wind.towards-110-deg {\n  -webkit-transform: rotate(110deg);\n  -moz-transform: rotate(110deg);\n  -ms-transform: rotate(110deg);\n  -o-transform: rotate(110deg);\n  transform: rotate(110deg); }\n.wi-wind.towards-111-deg {\n  -webkit-transform: rotate(111deg);\n  -moz-transform: rotate(111deg);\n  -ms-transform: rotate(111deg);\n  -o-transform: rotate(111deg);\n  transform: rotate(111deg); }\n.wi-wind.towards-112-deg {\n  -webkit-transform: rotate(112deg);\n  -moz-transform: rotate(112deg);\n  -ms-transform: rotate(112deg);\n  -o-transform: rotate(112deg);\n  transform: rotate(112deg); }\n.wi-wind.towards-113-deg {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n.wi-wind.towards-114-deg {\n  -webkit-transform: rotate(114deg);\n  -moz-transform: rotate(114deg);\n  -ms-transform: rotate(114deg);\n  -o-transform: rotate(114deg);\n  transform: rotate(114deg); }\n.wi-wind.towards-115-deg {\n  -webkit-transform: rotate(115deg);\n  -moz-transform: rotate(115deg);\n  -ms-transform: rotate(115deg);\n  -o-transform: rotate(115deg);\n  transform: rotate(115deg); }\n.wi-wind.towards-116-deg {\n  -webkit-transform: rotate(116deg);\n  -moz-transform: rotate(116deg);\n  -ms-transform: rotate(116deg);\n  -o-transform: rotate(116deg);\n  transform: rotate(116deg); }\n.wi-wind.towards-117-deg {\n  -webkit-transform: rotate(117deg);\n  -moz-transform: rotate(117deg);\n  -ms-transform: rotate(117deg);\n  -o-transform: rotate(117deg);\n  transform: rotate(117deg); }\n.wi-wind.towards-118-deg {\n  -webkit-transform: rotate(118deg);\n  -moz-transform: rotate(118deg);\n  -ms-transform: rotate(118deg);\n  -o-transform: rotate(118deg);\n  transform: rotate(118deg); }\n.wi-wind.towards-119-deg {\n  -webkit-transform: rotate(119deg);\n  -moz-transform: rotate(119deg);\n  -ms-transform: rotate(119deg);\n  -o-transform: rotate(119deg);\n  transform: rotate(119deg); }\n.wi-wind.towards-120-deg {\n  -webkit-transform: rotate(120deg);\n  -moz-transform: rotate(120deg);\n  -ms-transform: rotate(120deg);\n  -o-transform: rotate(120deg);\n  transform: rotate(120deg); }\n.wi-wind.towards-121-deg {\n  -webkit-transform: rotate(121deg);\n  -moz-transform: rotate(121deg);\n  -ms-transform: rotate(121deg);\n  -o-transform: rotate(121deg);\n  transform: rotate(121deg); }\n.wi-wind.towards-122-deg {\n  -webkit-transform: rotate(122deg);\n  -moz-transform: rotate(122deg);\n  -ms-transform: rotate(122deg);\n  -o-transform: rotate(122deg);\n  transform: rotate(122deg); }\n.wi-wind.towards-123-deg {\n  -webkit-transform: rotate(123deg);\n  -moz-transform: rotate(123deg);\n  -ms-transform: rotate(123deg);\n  -o-transform: rotate(123deg);\n  transform: rotate(123deg); }\n.wi-wind.towards-124-deg {\n  -webkit-transform: rotate(124deg);\n  -moz-transform: rotate(124deg);\n  -ms-transform: rotate(124deg);\n  -o-transform: rotate(124deg);\n  transform: rotate(124deg); }\n.wi-wind.towards-125-deg {\n  -webkit-transform: rotate(125deg);\n  -moz-transform: rotate(125deg);\n  -ms-transform: rotate(125deg);\n  -o-transform: rotate(125deg);\n  transform: rotate(125deg); }\n.wi-wind.towards-126-deg {\n  -webkit-transform: rotate(126deg);\n  -moz-transform: rotate(126deg);\n  -ms-transform: rotate(126deg);\n  -o-transform: rotate(126deg);\n  transform: rotate(126deg); }\n.wi-wind.towards-127-deg {\n  -webkit-transform: rotate(127deg);\n  -moz-transform: rotate(127deg);\n  -ms-transform: rotate(127deg);\n  -o-transform: rotate(127deg);\n  transform: rotate(127deg); }\n.wi-wind.towards-128-deg {\n  -webkit-transform: rotate(128deg);\n  -moz-transform: rotate(128deg);\n  -ms-transform: rotate(128deg);\n  -o-transform: rotate(128deg);\n  transform: rotate(128deg); }\n.wi-wind.towards-129-deg {\n  -webkit-transform: rotate(129deg);\n  -moz-transform: rotate(129deg);\n  -ms-transform: rotate(129deg);\n  -o-transform: rotate(129deg);\n  transform: rotate(129deg); }\n.wi-wind.towards-130-deg {\n  -webkit-transform: rotate(130deg);\n  -moz-transform: rotate(130deg);\n  -ms-transform: rotate(130deg);\n  -o-transform: rotate(130deg);\n  transform: rotate(130deg); }\n.wi-wind.towards-131-deg {\n  -webkit-transform: rotate(131deg);\n  -moz-transform: rotate(131deg);\n  -ms-transform: rotate(131deg);\n  -o-transform: rotate(131deg);\n  transform: rotate(131deg); }\n.wi-wind.towards-132-deg {\n  -webkit-transform: rotate(132deg);\n  -moz-transform: rotate(132deg);\n  -ms-transform: rotate(132deg);\n  -o-transform: rotate(132deg);\n  transform: rotate(132deg); }\n.wi-wind.towards-133-deg {\n  -webkit-transform: rotate(133deg);\n  -moz-transform: rotate(133deg);\n  -ms-transform: rotate(133deg);\n  -o-transform: rotate(133deg);\n  transform: rotate(133deg); }\n.wi-wind.towards-134-deg {\n  -webkit-transform: rotate(134deg);\n  -moz-transform: rotate(134deg);\n  -ms-transform: rotate(134deg);\n  -o-transform: rotate(134deg);\n  transform: rotate(134deg); }\n.wi-wind.towards-135-deg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n.wi-wind.towards-136-deg {\n  -webkit-transform: rotate(136deg);\n  -moz-transform: rotate(136deg);\n  -ms-transform: rotate(136deg);\n  -o-transform: rotate(136deg);\n  transform: rotate(136deg); }\n.wi-wind.towards-137-deg {\n  -webkit-transform: rotate(137deg);\n  -moz-transform: rotate(137deg);\n  -ms-transform: rotate(137deg);\n  -o-transform: rotate(137deg);\n  transform: rotate(137deg); }\n.wi-wind.towards-138-deg {\n  -webkit-transform: rotate(138deg);\n  -moz-transform: rotate(138deg);\n  -ms-transform: rotate(138deg);\n  -o-transform: rotate(138deg);\n  transform: rotate(138deg); }\n.wi-wind.towards-139-deg {\n  -webkit-transform: rotate(139deg);\n  -moz-transform: rotate(139deg);\n  -ms-transform: rotate(139deg);\n  -o-transform: rotate(139deg);\n  transform: rotate(139deg); }\n.wi-wind.towards-140-deg {\n  -webkit-transform: rotate(140deg);\n  -moz-transform: rotate(140deg);\n  -ms-transform: rotate(140deg);\n  -o-transform: rotate(140deg);\n  transform: rotate(140deg); }\n.wi-wind.towards-141-deg {\n  -webkit-transform: rotate(141deg);\n  -moz-transform: rotate(141deg);\n  -ms-transform: rotate(141deg);\n  -o-transform: rotate(141deg);\n  transform: rotate(141deg); }\n.wi-wind.towards-142-deg {\n  -webkit-transform: rotate(142deg);\n  -moz-transform: rotate(142deg);\n  -ms-transform: rotate(142deg);\n  -o-transform: rotate(142deg);\n  transform: rotate(142deg); }\n.wi-wind.towards-143-deg {\n  -webkit-transform: rotate(143deg);\n  -moz-transform: rotate(143deg);\n  -ms-transform: rotate(143deg);\n  -o-transform: rotate(143deg);\n  transform: rotate(143deg); }\n.wi-wind.towards-144-deg {\n  -webkit-transform: rotate(144deg);\n  -moz-transform: rotate(144deg);\n  -ms-transform: rotate(144deg);\n  -o-transform: rotate(144deg);\n  transform: rotate(144deg); }\n.wi-wind.towards-145-deg {\n  -webkit-transform: rotate(145deg);\n  -moz-transform: rotate(145deg);\n  -ms-transform: rotate(145deg);\n  -o-transform: rotate(145deg);\n  transform: rotate(145deg); }\n.wi-wind.towards-146-deg {\n  -webkit-transform: rotate(146deg);\n  -moz-transform: rotate(146deg);\n  -ms-transform: rotate(146deg);\n  -o-transform: rotate(146deg);\n  transform: rotate(146deg); }\n.wi-wind.towards-147-deg {\n  -webkit-transform: rotate(147deg);\n  -moz-transform: rotate(147deg);\n  -ms-transform: rotate(147deg);\n  -o-transform: rotate(147deg);\n  transform: rotate(147deg); }\n.wi-wind.towards-148-deg {\n  -webkit-transform: rotate(148deg);\n  -moz-transform: rotate(148deg);\n  -ms-transform: rotate(148deg);\n  -o-transform: rotate(148deg);\n  transform: rotate(148deg); }\n.wi-wind.towards-149-deg {\n  -webkit-transform: rotate(149deg);\n  -moz-transform: rotate(149deg);\n  -ms-transform: rotate(149deg);\n  -o-transform: rotate(149deg);\n  transform: rotate(149deg); }\n.wi-wind.towards-150-deg {\n  -webkit-transform: rotate(150deg);\n  -moz-transform: rotate(150deg);\n  -ms-transform: rotate(150deg);\n  -o-transform: rotate(150deg);\n  transform: rotate(150deg); }\n.wi-wind.towards-151-deg {\n  -webkit-transform: rotate(151deg);\n  -moz-transform: rotate(151deg);\n  -ms-transform: rotate(151deg);\n  -o-transform: rotate(151deg);\n  transform: rotate(151deg); }\n.wi-wind.towards-152-deg {\n  -webkit-transform: rotate(152deg);\n  -moz-transform: rotate(152deg);\n  -ms-transform: rotate(152deg);\n  -o-transform: rotate(152deg);\n  transform: rotate(152deg); }\n.wi-wind.towards-153-deg {\n  -webkit-transform: rotate(153deg);\n  -moz-transform: rotate(153deg);\n  -ms-transform: rotate(153deg);\n  -o-transform: rotate(153deg);\n  transform: rotate(153deg); }\n.wi-wind.towards-154-deg {\n  -webkit-transform: rotate(154deg);\n  -moz-transform: rotate(154deg);\n  -ms-transform: rotate(154deg);\n  -o-transform: rotate(154deg);\n  transform: rotate(154deg); }\n.wi-wind.towards-155-deg {\n  -webkit-transform: rotate(155deg);\n  -moz-transform: rotate(155deg);\n  -ms-transform: rotate(155deg);\n  -o-transform: rotate(155deg);\n  transform: rotate(155deg); }\n.wi-wind.towards-156-deg {\n  -webkit-transform: rotate(156deg);\n  -moz-transform: rotate(156deg);\n  -ms-transform: rotate(156deg);\n  -o-transform: rotate(156deg);\n  transform: rotate(156deg); }\n.wi-wind.towards-157-deg {\n  -webkit-transform: rotate(157deg);\n  -moz-transform: rotate(157deg);\n  -ms-transform: rotate(157deg);\n  -o-transform: rotate(157deg);\n  transform: rotate(157deg); }\n.wi-wind.towards-158-deg {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n.wi-wind.towards-159-deg {\n  -webkit-transform: rotate(159deg);\n  -moz-transform: rotate(159deg);\n  -ms-transform: rotate(159deg);\n  -o-transform: rotate(159deg);\n  transform: rotate(159deg); }\n.wi-wind.towards-160-deg {\n  -webkit-transform: rotate(160deg);\n  -moz-transform: rotate(160deg);\n  -ms-transform: rotate(160deg);\n  -o-transform: rotate(160deg);\n  transform: rotate(160deg); }\n.wi-wind.towards-161-deg {\n  -webkit-transform: rotate(161deg);\n  -moz-transform: rotate(161deg);\n  -ms-transform: rotate(161deg);\n  -o-transform: rotate(161deg);\n  transform: rotate(161deg); }\n.wi-wind.towards-162-deg {\n  -webkit-transform: rotate(162deg);\n  -moz-transform: rotate(162deg);\n  -ms-transform: rotate(162deg);\n  -o-transform: rotate(162deg);\n  transform: rotate(162deg); }\n.wi-wind.towards-163-deg {\n  -webkit-transform: rotate(163deg);\n  -moz-transform: rotate(163deg);\n  -ms-transform: rotate(163deg);\n  -o-transform: rotate(163deg);\n  transform: rotate(163deg); }\n.wi-wind.towards-164-deg {\n  -webkit-transform: rotate(164deg);\n  -moz-transform: rotate(164deg);\n  -ms-transform: rotate(164deg);\n  -o-transform: rotate(164deg);\n  transform: rotate(164deg); }\n.wi-wind.towards-165-deg {\n  -webkit-transform: rotate(165deg);\n  -moz-transform: rotate(165deg);\n  -ms-transform: rotate(165deg);\n  -o-transform: rotate(165deg);\n  transform: rotate(165deg); }\n.wi-wind.towards-166-deg {\n  -webkit-transform: rotate(166deg);\n  -moz-transform: rotate(166deg);\n  -ms-transform: rotate(166deg);\n  -o-transform: rotate(166deg);\n  transform: rotate(166deg); }\n.wi-wind.towards-167-deg {\n  -webkit-transform: rotate(167deg);\n  -moz-transform: rotate(167deg);\n  -ms-transform: rotate(167deg);\n  -o-transform: rotate(167deg);\n  transform: rotate(167deg); }\n.wi-wind.towards-168-deg {\n  -webkit-transform: rotate(168deg);\n  -moz-transform: rotate(168deg);\n  -ms-transform: rotate(168deg);\n  -o-transform: rotate(168deg);\n  transform: rotate(168deg); }\n.wi-wind.towards-169-deg {\n  -webkit-transform: rotate(169deg);\n  -moz-transform: rotate(169deg);\n  -ms-transform: rotate(169deg);\n  -o-transform: rotate(169deg);\n  transform: rotate(169deg); }\n.wi-wind.towards-170-deg {\n  -webkit-transform: rotate(170deg);\n  -moz-transform: rotate(170deg);\n  -ms-transform: rotate(170deg);\n  -o-transform: rotate(170deg);\n  transform: rotate(170deg); }\n.wi-wind.towards-171-deg {\n  -webkit-transform: rotate(171deg);\n  -moz-transform: rotate(171deg);\n  -ms-transform: rotate(171deg);\n  -o-transform: rotate(171deg);\n  transform: rotate(171deg); }\n.wi-wind.towards-172-deg {\n  -webkit-transform: rotate(172deg);\n  -moz-transform: rotate(172deg);\n  -ms-transform: rotate(172deg);\n  -o-transform: rotate(172deg);\n  transform: rotate(172deg); }\n.wi-wind.towards-173-deg {\n  -webkit-transform: rotate(173deg);\n  -moz-transform: rotate(173deg);\n  -ms-transform: rotate(173deg);\n  -o-transform: rotate(173deg);\n  transform: rotate(173deg); }\n.wi-wind.towards-174-deg {\n  -webkit-transform: rotate(174deg);\n  -moz-transform: rotate(174deg);\n  -ms-transform: rotate(174deg);\n  -o-transform: rotate(174deg);\n  transform: rotate(174deg); }\n.wi-wind.towards-175-deg {\n  -webkit-transform: rotate(175deg);\n  -moz-transform: rotate(175deg);\n  -ms-transform: rotate(175deg);\n  -o-transform: rotate(175deg);\n  transform: rotate(175deg); }\n.wi-wind.towards-176-deg {\n  -webkit-transform: rotate(176deg);\n  -moz-transform: rotate(176deg);\n  -ms-transform: rotate(176deg);\n  -o-transform: rotate(176deg);\n  transform: rotate(176deg); }\n.wi-wind.towards-177-deg {\n  -webkit-transform: rotate(177deg);\n  -moz-transform: rotate(177deg);\n  -ms-transform: rotate(177deg);\n  -o-transform: rotate(177deg);\n  transform: rotate(177deg); }\n.wi-wind.towards-178-deg {\n  -webkit-transform: rotate(178deg);\n  -moz-transform: rotate(178deg);\n  -ms-transform: rotate(178deg);\n  -o-transform: rotate(178deg);\n  transform: rotate(178deg); }\n.wi-wind.towards-179-deg {\n  -webkit-transform: rotate(179deg);\n  -moz-transform: rotate(179deg);\n  -ms-transform: rotate(179deg);\n  -o-transform: rotate(179deg);\n  transform: rotate(179deg); }\n.wi-wind.towards-180-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n.wi-wind.towards-181-deg {\n  -webkit-transform: rotate(181deg);\n  -moz-transform: rotate(181deg);\n  -ms-transform: rotate(181deg);\n  -o-transform: rotate(181deg);\n  transform: rotate(181deg); }\n.wi-wind.towards-182-deg {\n  -webkit-transform: rotate(182deg);\n  -moz-transform: rotate(182deg);\n  -ms-transform: rotate(182deg);\n  -o-transform: rotate(182deg);\n  transform: rotate(182deg); }\n.wi-wind.towards-183-deg {\n  -webkit-transform: rotate(183deg);\n  -moz-transform: rotate(183deg);\n  -ms-transform: rotate(183deg);\n  -o-transform: rotate(183deg);\n  transform: rotate(183deg); }\n.wi-wind.towards-184-deg {\n  -webkit-transform: rotate(184deg);\n  -moz-transform: rotate(184deg);\n  -ms-transform: rotate(184deg);\n  -o-transform: rotate(184deg);\n  transform: rotate(184deg); }\n.wi-wind.towards-185-deg {\n  -webkit-transform: rotate(185deg);\n  -moz-transform: rotate(185deg);\n  -ms-transform: rotate(185deg);\n  -o-transform: rotate(185deg);\n  transform: rotate(185deg); }\n.wi-wind.towards-186-deg {\n  -webkit-transform: rotate(186deg);\n  -moz-transform: rotate(186deg);\n  -ms-transform: rotate(186deg);\n  -o-transform: rotate(186deg);\n  transform: rotate(186deg); }\n.wi-wind.towards-187-deg {\n  -webkit-transform: rotate(187deg);\n  -moz-transform: rotate(187deg);\n  -ms-transform: rotate(187deg);\n  -o-transform: rotate(187deg);\n  transform: rotate(187deg); }\n.wi-wind.towards-188-deg {\n  -webkit-transform: rotate(188deg);\n  -moz-transform: rotate(188deg);\n  -ms-transform: rotate(188deg);\n  -o-transform: rotate(188deg);\n  transform: rotate(188deg); }\n.wi-wind.towards-189-deg {\n  -webkit-transform: rotate(189deg);\n  -moz-transform: rotate(189deg);\n  -ms-transform: rotate(189deg);\n  -o-transform: rotate(189deg);\n  transform: rotate(189deg); }\n.wi-wind.towards-190-deg {\n  -webkit-transform: rotate(190deg);\n  -moz-transform: rotate(190deg);\n  -ms-transform: rotate(190deg);\n  -o-transform: rotate(190deg);\n  transform: rotate(190deg); }\n.wi-wind.towards-191-deg {\n  -webkit-transform: rotate(191deg);\n  -moz-transform: rotate(191deg);\n  -ms-transform: rotate(191deg);\n  -o-transform: rotate(191deg);\n  transform: rotate(191deg); }\n.wi-wind.towards-192-deg {\n  -webkit-transform: rotate(192deg);\n  -moz-transform: rotate(192deg);\n  -ms-transform: rotate(192deg);\n  -o-transform: rotate(192deg);\n  transform: rotate(192deg); }\n.wi-wind.towards-193-deg {\n  -webkit-transform: rotate(193deg);\n  -moz-transform: rotate(193deg);\n  -ms-transform: rotate(193deg);\n  -o-transform: rotate(193deg);\n  transform: rotate(193deg); }\n.wi-wind.towards-194-deg {\n  -webkit-transform: rotate(194deg);\n  -moz-transform: rotate(194deg);\n  -ms-transform: rotate(194deg);\n  -o-transform: rotate(194deg);\n  transform: rotate(194deg); }\n.wi-wind.towards-195-deg {\n  -webkit-transform: rotate(195deg);\n  -moz-transform: rotate(195deg);\n  -ms-transform: rotate(195deg);\n  -o-transform: rotate(195deg);\n  transform: rotate(195deg); }\n.wi-wind.towards-196-deg {\n  -webkit-transform: rotate(196deg);\n  -moz-transform: rotate(196deg);\n  -ms-transform: rotate(196deg);\n  -o-transform: rotate(196deg);\n  transform: rotate(196deg); }\n.wi-wind.towards-197-deg {\n  -webkit-transform: rotate(197deg);\n  -moz-transform: rotate(197deg);\n  -ms-transform: rotate(197deg);\n  -o-transform: rotate(197deg);\n  transform: rotate(197deg); }\n.wi-wind.towards-198-deg {\n  -webkit-transform: rotate(198deg);\n  -moz-transform: rotate(198deg);\n  -ms-transform: rotate(198deg);\n  -o-transform: rotate(198deg);\n  transform: rotate(198deg); }\n.wi-wind.towards-199-deg {\n  -webkit-transform: rotate(199deg);\n  -moz-transform: rotate(199deg);\n  -ms-transform: rotate(199deg);\n  -o-transform: rotate(199deg);\n  transform: rotate(199deg); }\n.wi-wind.towards-200-deg {\n  -webkit-transform: rotate(200deg);\n  -moz-transform: rotate(200deg);\n  -ms-transform: rotate(200deg);\n  -o-transform: rotate(200deg);\n  transform: rotate(200deg); }\n.wi-wind.towards-201-deg {\n  -webkit-transform: rotate(201deg);\n  -moz-transform: rotate(201deg);\n  -ms-transform: rotate(201deg);\n  -o-transform: rotate(201deg);\n  transform: rotate(201deg); }\n.wi-wind.towards-202-deg {\n  -webkit-transform: rotate(202deg);\n  -moz-transform: rotate(202deg);\n  -ms-transform: rotate(202deg);\n  -o-transform: rotate(202deg);\n  transform: rotate(202deg); }\n.wi-wind.towards-203-deg {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n.wi-wind.towards-204-deg {\n  -webkit-transform: rotate(204deg);\n  -moz-transform: rotate(204deg);\n  -ms-transform: rotate(204deg);\n  -o-transform: rotate(204deg);\n  transform: rotate(204deg); }\n.wi-wind.towards-205-deg {\n  -webkit-transform: rotate(205deg);\n  -moz-transform: rotate(205deg);\n  -ms-transform: rotate(205deg);\n  -o-transform: rotate(205deg);\n  transform: rotate(205deg); }\n.wi-wind.towards-206-deg {\n  -webkit-transform: rotate(206deg);\n  -moz-transform: rotate(206deg);\n  -ms-transform: rotate(206deg);\n  -o-transform: rotate(206deg);\n  transform: rotate(206deg); }\n.wi-wind.towards-207-deg {\n  -webkit-transform: rotate(207deg);\n  -moz-transform: rotate(207deg);\n  -ms-transform: rotate(207deg);\n  -o-transform: rotate(207deg);\n  transform: rotate(207deg); }\n.wi-wind.towards-208-deg {\n  -webkit-transform: rotate(208deg);\n  -moz-transform: rotate(208deg);\n  -ms-transform: rotate(208deg);\n  -o-transform: rotate(208deg);\n  transform: rotate(208deg); }\n.wi-wind.towards-209-deg {\n  -webkit-transform: rotate(209deg);\n  -moz-transform: rotate(209deg);\n  -ms-transform: rotate(209deg);\n  -o-transform: rotate(209deg);\n  transform: rotate(209deg); }\n.wi-wind.towards-210-deg {\n  -webkit-transform: rotate(210deg);\n  -moz-transform: rotate(210deg);\n  -ms-transform: rotate(210deg);\n  -o-transform: rotate(210deg);\n  transform: rotate(210deg); }\n.wi-wind.towards-211-deg {\n  -webkit-transform: rotate(211deg);\n  -moz-transform: rotate(211deg);\n  -ms-transform: rotate(211deg);\n  -o-transform: rotate(211deg);\n  transform: rotate(211deg); }\n.wi-wind.towards-212-deg {\n  -webkit-transform: rotate(212deg);\n  -moz-transform: rotate(212deg);\n  -ms-transform: rotate(212deg);\n  -o-transform: rotate(212deg);\n  transform: rotate(212deg); }\n.wi-wind.towards-213-deg {\n  -webkit-transform: rotate(213deg);\n  -moz-transform: rotate(213deg);\n  -ms-transform: rotate(213deg);\n  -o-transform: rotate(213deg);\n  transform: rotate(213deg); }\n.wi-wind.towards-214-deg {\n  -webkit-transform: rotate(214deg);\n  -moz-transform: rotate(214deg);\n  -ms-transform: rotate(214deg);\n  -o-transform: rotate(214deg);\n  transform: rotate(214deg); }\n.wi-wind.towards-215-deg {\n  -webkit-transform: rotate(215deg);\n  -moz-transform: rotate(215deg);\n  -ms-transform: rotate(215deg);\n  -o-transform: rotate(215deg);\n  transform: rotate(215deg); }\n.wi-wind.towards-216-deg {\n  -webkit-transform: rotate(216deg);\n  -moz-transform: rotate(216deg);\n  -ms-transform: rotate(216deg);\n  -o-transform: rotate(216deg);\n  transform: rotate(216deg); }\n.wi-wind.towards-217-deg {\n  -webkit-transform: rotate(217deg);\n  -moz-transform: rotate(217deg);\n  -ms-transform: rotate(217deg);\n  -o-transform: rotate(217deg);\n  transform: rotate(217deg); }\n.wi-wind.towards-218-deg {\n  -webkit-transform: rotate(218deg);\n  -moz-transform: rotate(218deg);\n  -ms-transform: rotate(218deg);\n  -o-transform: rotate(218deg);\n  transform: rotate(218deg); }\n.wi-wind.towards-219-deg {\n  -webkit-transform: rotate(219deg);\n  -moz-transform: rotate(219deg);\n  -ms-transform: rotate(219deg);\n  -o-transform: rotate(219deg);\n  transform: rotate(219deg); }\n.wi-wind.towards-220-deg {\n  -webkit-transform: rotate(220deg);\n  -moz-transform: rotate(220deg);\n  -ms-transform: rotate(220deg);\n  -o-transform: rotate(220deg);\n  transform: rotate(220deg); }\n.wi-wind.towards-221-deg {\n  -webkit-transform: rotate(221deg);\n  -moz-transform: rotate(221deg);\n  -ms-transform: rotate(221deg);\n  -o-transform: rotate(221deg);\n  transform: rotate(221deg); }\n.wi-wind.towards-222-deg {\n  -webkit-transform: rotate(222deg);\n  -moz-transform: rotate(222deg);\n  -ms-transform: rotate(222deg);\n  -o-transform: rotate(222deg);\n  transform: rotate(222deg); }\n.wi-wind.towards-223-deg {\n  -webkit-transform: rotate(223deg);\n  -moz-transform: rotate(223deg);\n  -ms-transform: rotate(223deg);\n  -o-transform: rotate(223deg);\n  transform: rotate(223deg); }\n.wi-wind.towards-224-deg {\n  -webkit-transform: rotate(224deg);\n  -moz-transform: rotate(224deg);\n  -ms-transform: rotate(224deg);\n  -o-transform: rotate(224deg);\n  transform: rotate(224deg); }\n.wi-wind.towards-225-deg {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n.wi-wind.towards-226-deg {\n  -webkit-transform: rotate(226deg);\n  -moz-transform: rotate(226deg);\n  -ms-transform: rotate(226deg);\n  -o-transform: rotate(226deg);\n  transform: rotate(226deg); }\n.wi-wind.towards-227-deg {\n  -webkit-transform: rotate(227deg);\n  -moz-transform: rotate(227deg);\n  -ms-transform: rotate(227deg);\n  -o-transform: rotate(227deg);\n  transform: rotate(227deg); }\n.wi-wind.towards-228-deg {\n  -webkit-transform: rotate(228deg);\n  -moz-transform: rotate(228deg);\n  -ms-transform: rotate(228deg);\n  -o-transform: rotate(228deg);\n  transform: rotate(228deg); }\n.wi-wind.towards-229-deg {\n  -webkit-transform: rotate(229deg);\n  -moz-transform: rotate(229deg);\n  -ms-transform: rotate(229deg);\n  -o-transform: rotate(229deg);\n  transform: rotate(229deg); }\n.wi-wind.towards-230-deg {\n  -webkit-transform: rotate(230deg);\n  -moz-transform: rotate(230deg);\n  -ms-transform: rotate(230deg);\n  -o-transform: rotate(230deg);\n  transform: rotate(230deg); }\n.wi-wind.towards-231-deg {\n  -webkit-transform: rotate(231deg);\n  -moz-transform: rotate(231deg);\n  -ms-transform: rotate(231deg);\n  -o-transform: rotate(231deg);\n  transform: rotate(231deg); }\n.wi-wind.towards-232-deg {\n  -webkit-transform: rotate(232deg);\n  -moz-transform: rotate(232deg);\n  -ms-transform: rotate(232deg);\n  -o-transform: rotate(232deg);\n  transform: rotate(232deg); }\n.wi-wind.towards-233-deg {\n  -webkit-transform: rotate(233deg);\n  -moz-transform: rotate(233deg);\n  -ms-transform: rotate(233deg);\n  -o-transform: rotate(233deg);\n  transform: rotate(233deg); }\n.wi-wind.towards-234-deg {\n  -webkit-transform: rotate(234deg);\n  -moz-transform: rotate(234deg);\n  -ms-transform: rotate(234deg);\n  -o-transform: rotate(234deg);\n  transform: rotate(234deg); }\n.wi-wind.towards-235-deg {\n  -webkit-transform: rotate(235deg);\n  -moz-transform: rotate(235deg);\n  -ms-transform: rotate(235deg);\n  -o-transform: rotate(235deg);\n  transform: rotate(235deg); }\n.wi-wind.towards-236-deg {\n  -webkit-transform: rotate(236deg);\n  -moz-transform: rotate(236deg);\n  -ms-transform: rotate(236deg);\n  -o-transform: rotate(236deg);\n  transform: rotate(236deg); }\n.wi-wind.towards-237-deg {\n  -webkit-transform: rotate(237deg);\n  -moz-transform: rotate(237deg);\n  -ms-transform: rotate(237deg);\n  -o-transform: rotate(237deg);\n  transform: rotate(237deg); }\n.wi-wind.towards-238-deg {\n  -webkit-transform: rotate(238deg);\n  -moz-transform: rotate(238deg);\n  -ms-transform: rotate(238deg);\n  -o-transform: rotate(238deg);\n  transform: rotate(238deg); }\n.wi-wind.towards-239-deg {\n  -webkit-transform: rotate(239deg);\n  -moz-transform: rotate(239deg);\n  -ms-transform: rotate(239deg);\n  -o-transform: rotate(239deg);\n  transform: rotate(239deg); }\n.wi-wind.towards-240-deg {\n  -webkit-transform: rotate(240deg);\n  -moz-transform: rotate(240deg);\n  -ms-transform: rotate(240deg);\n  -o-transform: rotate(240deg);\n  transform: rotate(240deg); }\n.wi-wind.towards-241-deg {\n  -webkit-transform: rotate(241deg);\n  -moz-transform: rotate(241deg);\n  -ms-transform: rotate(241deg);\n  -o-transform: rotate(241deg);\n  transform: rotate(241deg); }\n.wi-wind.towards-242-deg {\n  -webkit-transform: rotate(242deg);\n  -moz-transform: rotate(242deg);\n  -ms-transform: rotate(242deg);\n  -o-transform: rotate(242deg);\n  transform: rotate(242deg); }\n.wi-wind.towards-243-deg {\n  -webkit-transform: rotate(243deg);\n  -moz-transform: rotate(243deg);\n  -ms-transform: rotate(243deg);\n  -o-transform: rotate(243deg);\n  transform: rotate(243deg); }\n.wi-wind.towards-244-deg {\n  -webkit-transform: rotate(244deg);\n  -moz-transform: rotate(244deg);\n  -ms-transform: rotate(244deg);\n  -o-transform: rotate(244deg);\n  transform: rotate(244deg); }\n.wi-wind.towards-245-deg {\n  -webkit-transform: rotate(245deg);\n  -moz-transform: rotate(245deg);\n  -ms-transform: rotate(245deg);\n  -o-transform: rotate(245deg);\n  transform: rotate(245deg); }\n.wi-wind.towards-246-deg {\n  -webkit-transform: rotate(246deg);\n  -moz-transform: rotate(246deg);\n  -ms-transform: rotate(246deg);\n  -o-transform: rotate(246deg);\n  transform: rotate(246deg); }\n.wi-wind.towards-247-deg {\n  -webkit-transform: rotate(247deg);\n  -moz-transform: rotate(247deg);\n  -ms-transform: rotate(247deg);\n  -o-transform: rotate(247deg);\n  transform: rotate(247deg); }\n.wi-wind.towards-248-deg {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n.wi-wind.towards-249-deg {\n  -webkit-transform: rotate(249deg);\n  -moz-transform: rotate(249deg);\n  -ms-transform: rotate(249deg);\n  -o-transform: rotate(249deg);\n  transform: rotate(249deg); }\n.wi-wind.towards-250-deg {\n  -webkit-transform: rotate(250deg);\n  -moz-transform: rotate(250deg);\n  -ms-transform: rotate(250deg);\n  -o-transform: rotate(250deg);\n  transform: rotate(250deg); }\n.wi-wind.towards-251-deg {\n  -webkit-transform: rotate(251deg);\n  -moz-transform: rotate(251deg);\n  -ms-transform: rotate(251deg);\n  -o-transform: rotate(251deg);\n  transform: rotate(251deg); }\n.wi-wind.towards-252-deg {\n  -webkit-transform: rotate(252deg);\n  -moz-transform: rotate(252deg);\n  -ms-transform: rotate(252deg);\n  -o-transform: rotate(252deg);\n  transform: rotate(252deg); }\n.wi-wind.towards-253-deg {\n  -webkit-transform: rotate(253deg);\n  -moz-transform: rotate(253deg);\n  -ms-transform: rotate(253deg);\n  -o-transform: rotate(253deg);\n  transform: rotate(253deg); }\n.wi-wind.towards-254-deg {\n  -webkit-transform: rotate(254deg);\n  -moz-transform: rotate(254deg);\n  -ms-transform: rotate(254deg);\n  -o-transform: rotate(254deg);\n  transform: rotate(254deg); }\n.wi-wind.towards-255-deg {\n  -webkit-transform: rotate(255deg);\n  -moz-transform: rotate(255deg);\n  -ms-transform: rotate(255deg);\n  -o-transform: rotate(255deg);\n  transform: rotate(255deg); }\n.wi-wind.towards-256-deg {\n  -webkit-transform: rotate(256deg);\n  -moz-transform: rotate(256deg);\n  -ms-transform: rotate(256deg);\n  -o-transform: rotate(256deg);\n  transform: rotate(256deg); }\n.wi-wind.towards-257-deg {\n  -webkit-transform: rotate(257deg);\n  -moz-transform: rotate(257deg);\n  -ms-transform: rotate(257deg);\n  -o-transform: rotate(257deg);\n  transform: rotate(257deg); }\n.wi-wind.towards-258-deg {\n  -webkit-transform: rotate(258deg);\n  -moz-transform: rotate(258deg);\n  -ms-transform: rotate(258deg);\n  -o-transform: rotate(258deg);\n  transform: rotate(258deg); }\n.wi-wind.towards-259-deg {\n  -webkit-transform: rotate(259deg);\n  -moz-transform: rotate(259deg);\n  -ms-transform: rotate(259deg);\n  -o-transform: rotate(259deg);\n  transform: rotate(259deg); }\n.wi-wind.towards-260-deg {\n  -webkit-transform: rotate(260deg);\n  -moz-transform: rotate(260deg);\n  -ms-transform: rotate(260deg);\n  -o-transform: rotate(260deg);\n  transform: rotate(260deg); }\n.wi-wind.towards-261-deg {\n  -webkit-transform: rotate(261deg);\n  -moz-transform: rotate(261deg);\n  -ms-transform: rotate(261deg);\n  -o-transform: rotate(261deg);\n  transform: rotate(261deg); }\n.wi-wind.towards-262-deg {\n  -webkit-transform: rotate(262deg);\n  -moz-transform: rotate(262deg);\n  -ms-transform: rotate(262deg);\n  -o-transform: rotate(262deg);\n  transform: rotate(262deg); }\n.wi-wind.towards-263-deg {\n  -webkit-transform: rotate(263deg);\n  -moz-transform: rotate(263deg);\n  -ms-transform: rotate(263deg);\n  -o-transform: rotate(263deg);\n  transform: rotate(263deg); }\n.wi-wind.towards-264-deg {\n  -webkit-transform: rotate(264deg);\n  -moz-transform: rotate(264deg);\n  -ms-transform: rotate(264deg);\n  -o-transform: rotate(264deg);\n  transform: rotate(264deg); }\n.wi-wind.towards-265-deg {\n  -webkit-transform: rotate(265deg);\n  -moz-transform: rotate(265deg);\n  -ms-transform: rotate(265deg);\n  -o-transform: rotate(265deg);\n  transform: rotate(265deg); }\n.wi-wind.towards-266-deg {\n  -webkit-transform: rotate(266deg);\n  -moz-transform: rotate(266deg);\n  -ms-transform: rotate(266deg);\n  -o-transform: rotate(266deg);\n  transform: rotate(266deg); }\n.wi-wind.towards-267-deg {\n  -webkit-transform: rotate(267deg);\n  -moz-transform: rotate(267deg);\n  -ms-transform: rotate(267deg);\n  -o-transform: rotate(267deg);\n  transform: rotate(267deg); }\n.wi-wind.towards-268-deg {\n  -webkit-transform: rotate(268deg);\n  -moz-transform: rotate(268deg);\n  -ms-transform: rotate(268deg);\n  -o-transform: rotate(268deg);\n  transform: rotate(268deg); }\n.wi-wind.towards-269-deg {\n  -webkit-transform: rotate(269deg);\n  -moz-transform: rotate(269deg);\n  -ms-transform: rotate(269deg);\n  -o-transform: rotate(269deg);\n  transform: rotate(269deg); }\n.wi-wind.towards-270-deg {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n.wi-wind.towards-271-deg {\n  -webkit-transform: rotate(271deg);\n  -moz-transform: rotate(271deg);\n  -ms-transform: rotate(271deg);\n  -o-transform: rotate(271deg);\n  transform: rotate(271deg); }\n.wi-wind.towards-272-deg {\n  -webkit-transform: rotate(272deg);\n  -moz-transform: rotate(272deg);\n  -ms-transform: rotate(272deg);\n  -o-transform: rotate(272deg);\n  transform: rotate(272deg); }\n.wi-wind.towards-273-deg {\n  -webkit-transform: rotate(273deg);\n  -moz-transform: rotate(273deg);\n  -ms-transform: rotate(273deg);\n  -o-transform: rotate(273deg);\n  transform: rotate(273deg); }\n.wi-wind.towards-274-deg {\n  -webkit-transform: rotate(274deg);\n  -moz-transform: rotate(274deg);\n  -ms-transform: rotate(274deg);\n  -o-transform: rotate(274deg);\n  transform: rotate(274deg); }\n.wi-wind.towards-275-deg {\n  -webkit-transform: rotate(275deg);\n  -moz-transform: rotate(275deg);\n  -ms-transform: rotate(275deg);\n  -o-transform: rotate(275deg);\n  transform: rotate(275deg); }\n.wi-wind.towards-276-deg {\n  -webkit-transform: rotate(276deg);\n  -moz-transform: rotate(276deg);\n  -ms-transform: rotate(276deg);\n  -o-transform: rotate(276deg);\n  transform: rotate(276deg); }\n.wi-wind.towards-277-deg {\n  -webkit-transform: rotate(277deg);\n  -moz-transform: rotate(277deg);\n  -ms-transform: rotate(277deg);\n  -o-transform: rotate(277deg);\n  transform: rotate(277deg); }\n.wi-wind.towards-278-deg {\n  -webkit-transform: rotate(278deg);\n  -moz-transform: rotate(278deg);\n  -ms-transform: rotate(278deg);\n  -o-transform: rotate(278deg);\n  transform: rotate(278deg); }\n.wi-wind.towards-279-deg {\n  -webkit-transform: rotate(279deg);\n  -moz-transform: rotate(279deg);\n  -ms-transform: rotate(279deg);\n  -o-transform: rotate(279deg);\n  transform: rotate(279deg); }\n.wi-wind.towards-280-deg {\n  -webkit-transform: rotate(280deg);\n  -moz-transform: rotate(280deg);\n  -ms-transform: rotate(280deg);\n  -o-transform: rotate(280deg);\n  transform: rotate(280deg); }\n.wi-wind.towards-281-deg {\n  -webkit-transform: rotate(281deg);\n  -moz-transform: rotate(281deg);\n  -ms-transform: rotate(281deg);\n  -o-transform: rotate(281deg);\n  transform: rotate(281deg); }\n.wi-wind.towards-282-deg {\n  -webkit-transform: rotate(282deg);\n  -moz-transform: rotate(282deg);\n  -ms-transform: rotate(282deg);\n  -o-transform: rotate(282deg);\n  transform: rotate(282deg); }\n.wi-wind.towards-283-deg {\n  -webkit-transform: rotate(283deg);\n  -moz-transform: rotate(283deg);\n  -ms-transform: rotate(283deg);\n  -o-transform: rotate(283deg);\n  transform: rotate(283deg); }\n.wi-wind.towards-284-deg {\n  -webkit-transform: rotate(284deg);\n  -moz-transform: rotate(284deg);\n  -ms-transform: rotate(284deg);\n  -o-transform: rotate(284deg);\n  transform: rotate(284deg); }\n.wi-wind.towards-285-deg {\n  -webkit-transform: rotate(285deg);\n  -moz-transform: rotate(285deg);\n  -ms-transform: rotate(285deg);\n  -o-transform: rotate(285deg);\n  transform: rotate(285deg); }\n.wi-wind.towards-286-deg {\n  -webkit-transform: rotate(286deg);\n  -moz-transform: rotate(286deg);\n  -ms-transform: rotate(286deg);\n  -o-transform: rotate(286deg);\n  transform: rotate(286deg); }\n.wi-wind.towards-287-deg {\n  -webkit-transform: rotate(287deg);\n  -moz-transform: rotate(287deg);\n  -ms-transform: rotate(287deg);\n  -o-transform: rotate(287deg);\n  transform: rotate(287deg); }\n.wi-wind.towards-288-deg {\n  -webkit-transform: rotate(288deg);\n  -moz-transform: rotate(288deg);\n  -ms-transform: rotate(288deg);\n  -o-transform: rotate(288deg);\n  transform: rotate(288deg); }\n.wi-wind.towards-289-deg {\n  -webkit-transform: rotate(289deg);\n  -moz-transform: rotate(289deg);\n  -ms-transform: rotate(289deg);\n  -o-transform: rotate(289deg);\n  transform: rotate(289deg); }\n.wi-wind.towards-290-deg {\n  -webkit-transform: rotate(290deg);\n  -moz-transform: rotate(290deg);\n  -ms-transform: rotate(290deg);\n  -o-transform: rotate(290deg);\n  transform: rotate(290deg); }\n.wi-wind.towards-291-deg {\n  -webkit-transform: rotate(291deg);\n  -moz-transform: rotate(291deg);\n  -ms-transform: rotate(291deg);\n  -o-transform: rotate(291deg);\n  transform: rotate(291deg); }\n.wi-wind.towards-292-deg {\n  -webkit-transform: rotate(292deg);\n  -moz-transform: rotate(292deg);\n  -ms-transform: rotate(292deg);\n  -o-transform: rotate(292deg);\n  transform: rotate(292deg); }\n.wi-wind.towards-293-deg {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n.wi-wind.towards-294-deg {\n  -webkit-transform: rotate(294deg);\n  -moz-transform: rotate(294deg);\n  -ms-transform: rotate(294deg);\n  -o-transform: rotate(294deg);\n  transform: rotate(294deg); }\n.wi-wind.towards-295-deg {\n  -webkit-transform: rotate(295deg);\n  -moz-transform: rotate(295deg);\n  -ms-transform: rotate(295deg);\n  -o-transform: rotate(295deg);\n  transform: rotate(295deg); }\n.wi-wind.towards-296-deg {\n  -webkit-transform: rotate(296deg);\n  -moz-transform: rotate(296deg);\n  -ms-transform: rotate(296deg);\n  -o-transform: rotate(296deg);\n  transform: rotate(296deg); }\n.wi-wind.towards-297-deg {\n  -webkit-transform: rotate(297deg);\n  -moz-transform: rotate(297deg);\n  -ms-transform: rotate(297deg);\n  -o-transform: rotate(297deg);\n  transform: rotate(297deg); }\n.wi-wind.towards-298-deg {\n  -webkit-transform: rotate(298deg);\n  -moz-transform: rotate(298deg);\n  -ms-transform: rotate(298deg);\n  -o-transform: rotate(298deg);\n  transform: rotate(298deg); }\n.wi-wind.towards-299-deg {\n  -webkit-transform: rotate(299deg);\n  -moz-transform: rotate(299deg);\n  -ms-transform: rotate(299deg);\n  -o-transform: rotate(299deg);\n  transform: rotate(299deg); }\n.wi-wind.towards-300-deg {\n  -webkit-transform: rotate(300deg);\n  -moz-transform: rotate(300deg);\n  -ms-transform: rotate(300deg);\n  -o-transform: rotate(300deg);\n  transform: rotate(300deg); }\n.wi-wind.towards-301-deg {\n  -webkit-transform: rotate(301deg);\n  -moz-transform: rotate(301deg);\n  -ms-transform: rotate(301deg);\n  -o-transform: rotate(301deg);\n  transform: rotate(301deg); }\n.wi-wind.towards-302-deg {\n  -webkit-transform: rotate(302deg);\n  -moz-transform: rotate(302deg);\n  -ms-transform: rotate(302deg);\n  -o-transform: rotate(302deg);\n  transform: rotate(302deg); }\n.wi-wind.towards-303-deg {\n  -webkit-transform: rotate(303deg);\n  -moz-transform: rotate(303deg);\n  -ms-transform: rotate(303deg);\n  -o-transform: rotate(303deg);\n  transform: rotate(303deg); }\n.wi-wind.towards-304-deg {\n  -webkit-transform: rotate(304deg);\n  -moz-transform: rotate(304deg);\n  -ms-transform: rotate(304deg);\n  -o-transform: rotate(304deg);\n  transform: rotate(304deg); }\n.wi-wind.towards-305-deg {\n  -webkit-transform: rotate(305deg);\n  -moz-transform: rotate(305deg);\n  -ms-transform: rotate(305deg);\n  -o-transform: rotate(305deg);\n  transform: rotate(305deg); }\n.wi-wind.towards-306-deg {\n  -webkit-transform: rotate(306deg);\n  -moz-transform: rotate(306deg);\n  -ms-transform: rotate(306deg);\n  -o-transform: rotate(306deg);\n  transform: rotate(306deg); }\n.wi-wind.towards-307-deg {\n  -webkit-transform: rotate(307deg);\n  -moz-transform: rotate(307deg);\n  -ms-transform: rotate(307deg);\n  -o-transform: rotate(307deg);\n  transform: rotate(307deg); }\n.wi-wind.towards-308-deg {\n  -webkit-transform: rotate(308deg);\n  -moz-transform: rotate(308deg);\n  -ms-transform: rotate(308deg);\n  -o-transform: rotate(308deg);\n  transform: rotate(308deg); }\n.wi-wind.towards-309-deg {\n  -webkit-transform: rotate(309deg);\n  -moz-transform: rotate(309deg);\n  -ms-transform: rotate(309deg);\n  -o-transform: rotate(309deg);\n  transform: rotate(309deg); }\n.wi-wind.towards-310-deg {\n  -webkit-transform: rotate(310deg);\n  -moz-transform: rotate(310deg);\n  -ms-transform: rotate(310deg);\n  -o-transform: rotate(310deg);\n  transform: rotate(310deg); }\n.wi-wind.towards-311-deg {\n  -webkit-transform: rotate(311deg);\n  -moz-transform: rotate(311deg);\n  -ms-transform: rotate(311deg);\n  -o-transform: rotate(311deg);\n  transform: rotate(311deg); }\n.wi-wind.towards-312-deg {\n  -webkit-transform: rotate(312deg);\n  -moz-transform: rotate(312deg);\n  -ms-transform: rotate(312deg);\n  -o-transform: rotate(312deg);\n  transform: rotate(312deg); }\n.wi-wind.towards-313-deg {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n.wi-wind.towards-314-deg {\n  -webkit-transform: rotate(314deg);\n  -moz-transform: rotate(314deg);\n  -ms-transform: rotate(314deg);\n  -o-transform: rotate(314deg);\n  transform: rotate(314deg); }\n.wi-wind.towards-315-deg {\n  -webkit-transform: rotate(315deg);\n  -moz-transform: rotate(315deg);\n  -ms-transform: rotate(315deg);\n  -o-transform: rotate(315deg);\n  transform: rotate(315deg); }\n.wi-wind.towards-316-deg {\n  -webkit-transform: rotate(316deg);\n  -moz-transform: rotate(316deg);\n  -ms-transform: rotate(316deg);\n  -o-transform: rotate(316deg);\n  transform: rotate(316deg); }\n.wi-wind.towards-317-deg {\n  -webkit-transform: rotate(317deg);\n  -moz-transform: rotate(317deg);\n  -ms-transform: rotate(317deg);\n  -o-transform: rotate(317deg);\n  transform: rotate(317deg); }\n.wi-wind.towards-318-deg {\n  -webkit-transform: rotate(318deg);\n  -moz-transform: rotate(318deg);\n  -ms-transform: rotate(318deg);\n  -o-transform: rotate(318deg);\n  transform: rotate(318deg); }\n.wi-wind.towards-319-deg {\n  -webkit-transform: rotate(319deg);\n  -moz-transform: rotate(319deg);\n  -ms-transform: rotate(319deg);\n  -o-transform: rotate(319deg);\n  transform: rotate(319deg); }\n.wi-wind.towards-320-deg {\n  -webkit-transform: rotate(320deg);\n  -moz-transform: rotate(320deg);\n  -ms-transform: rotate(320deg);\n  -o-transform: rotate(320deg);\n  transform: rotate(320deg); }\n.wi-wind.towards-321-deg {\n  -webkit-transform: rotate(321deg);\n  -moz-transform: rotate(321deg);\n  -ms-transform: rotate(321deg);\n  -o-transform: rotate(321deg);\n  transform: rotate(321deg); }\n.wi-wind.towards-322-deg {\n  -webkit-transform: rotate(322deg);\n  -moz-transform: rotate(322deg);\n  -ms-transform: rotate(322deg);\n  -o-transform: rotate(322deg);\n  transform: rotate(322deg); }\n.wi-wind.towards-323-deg {\n  -webkit-transform: rotate(323deg);\n  -moz-transform: rotate(323deg);\n  -ms-transform: rotate(323deg);\n  -o-transform: rotate(323deg);\n  transform: rotate(323deg); }\n.wi-wind.towards-324-deg {\n  -webkit-transform: rotate(324deg);\n  -moz-transform: rotate(324deg);\n  -ms-transform: rotate(324deg);\n  -o-transform: rotate(324deg);\n  transform: rotate(324deg); }\n.wi-wind.towards-325-deg {\n  -webkit-transform: rotate(325deg);\n  -moz-transform: rotate(325deg);\n  -ms-transform: rotate(325deg);\n  -o-transform: rotate(325deg);\n  transform: rotate(325deg); }\n.wi-wind.towards-326-deg {\n  -webkit-transform: rotate(326deg);\n  -moz-transform: rotate(326deg);\n  -ms-transform: rotate(326deg);\n  -o-transform: rotate(326deg);\n  transform: rotate(326deg); }\n.wi-wind.towards-327-deg {\n  -webkit-transform: rotate(327deg);\n  -moz-transform: rotate(327deg);\n  -ms-transform: rotate(327deg);\n  -o-transform: rotate(327deg);\n  transform: rotate(327deg); }\n.wi-wind.towards-328-deg {\n  -webkit-transform: rotate(328deg);\n  -moz-transform: rotate(328deg);\n  -ms-transform: rotate(328deg);\n  -o-transform: rotate(328deg);\n  transform: rotate(328deg); }\n.wi-wind.towards-329-deg {\n  -webkit-transform: rotate(329deg);\n  -moz-transform: rotate(329deg);\n  -ms-transform: rotate(329deg);\n  -o-transform: rotate(329deg);\n  transform: rotate(329deg); }\n.wi-wind.towards-330-deg {\n  -webkit-transform: rotate(330deg);\n  -moz-transform: rotate(330deg);\n  -ms-transform: rotate(330deg);\n  -o-transform: rotate(330deg);\n  transform: rotate(330deg); }\n.wi-wind.towards-331-deg {\n  -webkit-transform: rotate(331deg);\n  -moz-transform: rotate(331deg);\n  -ms-transform: rotate(331deg);\n  -o-transform: rotate(331deg);\n  transform: rotate(331deg); }\n.wi-wind.towards-332-deg {\n  -webkit-transform: rotate(332deg);\n  -moz-transform: rotate(332deg);\n  -ms-transform: rotate(332deg);\n  -o-transform: rotate(332deg);\n  transform: rotate(332deg); }\n.wi-wind.towards-333-deg {\n  -webkit-transform: rotate(333deg);\n  -moz-transform: rotate(333deg);\n  -ms-transform: rotate(333deg);\n  -o-transform: rotate(333deg);\n  transform: rotate(333deg); }\n.wi-wind.towards-334-deg {\n  -webkit-transform: rotate(334deg);\n  -moz-transform: rotate(334deg);\n  -ms-transform: rotate(334deg);\n  -o-transform: rotate(334deg);\n  transform: rotate(334deg); }\n.wi-wind.towards-335-deg {\n  -webkit-transform: rotate(335deg);\n  -moz-transform: rotate(335deg);\n  -ms-transform: rotate(335deg);\n  -o-transform: rotate(335deg);\n  transform: rotate(335deg); }\n.wi-wind.towards-336-deg {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n.wi-wind.towards-337-deg {\n  -webkit-transform: rotate(337deg);\n  -moz-transform: rotate(337deg);\n  -ms-transform: rotate(337deg);\n  -o-transform: rotate(337deg);\n  transform: rotate(337deg); }\n.wi-wind.towards-338-deg {\n  -webkit-transform: rotate(338deg);\n  -moz-transform: rotate(338deg);\n  -ms-transform: rotate(338deg);\n  -o-transform: rotate(338deg);\n  transform: rotate(338deg); }\n.wi-wind.towards-339-deg {\n  -webkit-transform: rotate(339deg);\n  -moz-transform: rotate(339deg);\n  -ms-transform: rotate(339deg);\n  -o-transform: rotate(339deg);\n  transform: rotate(339deg); }\n.wi-wind.towards-340-deg {\n  -webkit-transform: rotate(340deg);\n  -moz-transform: rotate(340deg);\n  -ms-transform: rotate(340deg);\n  -o-transform: rotate(340deg);\n  transform: rotate(340deg); }\n.wi-wind.towards-341-deg {\n  -webkit-transform: rotate(341deg);\n  -moz-transform: rotate(341deg);\n  -ms-transform: rotate(341deg);\n  -o-transform: rotate(341deg);\n  transform: rotate(341deg); }\n.wi-wind.towards-342-deg {\n  -webkit-transform: rotate(342deg);\n  -moz-transform: rotate(342deg);\n  -ms-transform: rotate(342deg);\n  -o-transform: rotate(342deg);\n  transform: rotate(342deg); }\n.wi-wind.towards-343-deg {\n  -webkit-transform: rotate(343deg);\n  -moz-transform: rotate(343deg);\n  -ms-transform: rotate(343deg);\n  -o-transform: rotate(343deg);\n  transform: rotate(343deg); }\n.wi-wind.towards-344-deg {\n  -webkit-transform: rotate(344deg);\n  -moz-transform: rotate(344deg);\n  -ms-transform: rotate(344deg);\n  -o-transform: rotate(344deg);\n  transform: rotate(344deg); }\n.wi-wind.towards-345-deg {\n  -webkit-transform: rotate(345deg);\n  -moz-transform: rotate(345deg);\n  -ms-transform: rotate(345deg);\n  -o-transform: rotate(345deg);\n  transform: rotate(345deg); }\n.wi-wind.towards-346-deg {\n  -webkit-transform: rotate(346deg);\n  -moz-transform: rotate(346deg);\n  -ms-transform: rotate(346deg);\n  -o-transform: rotate(346deg);\n  transform: rotate(346deg); }\n.wi-wind.towards-347-deg {\n  -webkit-transform: rotate(347deg);\n  -moz-transform: rotate(347deg);\n  -ms-transform: rotate(347deg);\n  -o-transform: rotate(347deg);\n  transform: rotate(347deg); }\n.wi-wind.towards-348-deg {\n  -webkit-transform: rotate(348deg);\n  -moz-transform: rotate(348deg);\n  -ms-transform: rotate(348deg);\n  -o-transform: rotate(348deg);\n  transform: rotate(348deg); }\n.wi-wind.towards-349-deg {\n  -webkit-transform: rotate(349deg);\n  -moz-transform: rotate(349deg);\n  -ms-transform: rotate(349deg);\n  -o-transform: rotate(349deg);\n  transform: rotate(349deg); }\n.wi-wind.towards-350-deg {\n  -webkit-transform: rotate(350deg);\n  -moz-transform: rotate(350deg);\n  -ms-transform: rotate(350deg);\n  -o-transform: rotate(350deg);\n  transform: rotate(350deg); }\n.wi-wind.towards-351-deg {\n  -webkit-transform: rotate(351deg);\n  -moz-transform: rotate(351deg);\n  -ms-transform: rotate(351deg);\n  -o-transform: rotate(351deg);\n  transform: rotate(351deg); }\n.wi-wind.towards-352-deg {\n  -webkit-transform: rotate(352deg);\n  -moz-transform: rotate(352deg);\n  -ms-transform: rotate(352deg);\n  -o-transform: rotate(352deg);\n  transform: rotate(352deg); }\n.wi-wind.towards-353-deg {\n  -webkit-transform: rotate(353deg);\n  -moz-transform: rotate(353deg);\n  -ms-transform: rotate(353deg);\n  -o-transform: rotate(353deg);\n  transform: rotate(353deg); }\n.wi-wind.towards-354-deg {\n  -webkit-transform: rotate(354deg);\n  -moz-transform: rotate(354deg);\n  -ms-transform: rotate(354deg);\n  -o-transform: rotate(354deg);\n  transform: rotate(354deg); }\n.wi-wind.towards-355-deg {\n  -webkit-transform: rotate(355deg);\n  -moz-transform: rotate(355deg);\n  -ms-transform: rotate(355deg);\n  -o-transform: rotate(355deg);\n  transform: rotate(355deg); }\n.wi-wind.towards-356-deg {\n  -webkit-transform: rotate(356deg);\n  -moz-transform: rotate(356deg);\n  -ms-transform: rotate(356deg);\n  -o-transform: rotate(356deg);\n  transform: rotate(356deg); }\n.wi-wind.towards-357-deg {\n  -webkit-transform: rotate(357deg);\n  -moz-transform: rotate(357deg);\n  -ms-transform: rotate(357deg);\n  -o-transform: rotate(357deg);\n  transform: rotate(357deg); }\n.wi-wind.towards-358-deg {\n  -webkit-transform: rotate(358deg);\n  -moz-transform: rotate(358deg);\n  -ms-transform: rotate(358deg);\n  -o-transform: rotate(358deg);\n  transform: rotate(358deg); }\n.wi-wind.towards-359-deg {\n  -webkit-transform: rotate(359deg);\n  -moz-transform: rotate(359deg);\n  -ms-transform: rotate(359deg);\n  -o-transform: rotate(359deg);\n  transform: rotate(359deg); }\n.wi-wind.towards-360-deg {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.from-0-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n.wi-wind.from-1-deg {\n  -webkit-transform: rotate(181deg);\n  -moz-transform: rotate(181deg);\n  -ms-transform: rotate(181deg);\n  -o-transform: rotate(181deg);\n  transform: rotate(181deg); }\n.wi-wind.from-2-deg {\n  -webkit-transform: rotate(182deg);\n  -moz-transform: rotate(182deg);\n  -ms-transform: rotate(182deg);\n  -o-transform: rotate(182deg);\n  transform: rotate(182deg); }\n.wi-wind.from-3-deg {\n  -webkit-transform: rotate(183deg);\n  -moz-transform: rotate(183deg);\n  -ms-transform: rotate(183deg);\n  -o-transform: rotate(183deg);\n  transform: rotate(183deg); }\n.wi-wind.from-4-deg {\n  -webkit-transform: rotate(184deg);\n  -moz-transform: rotate(184deg);\n  -ms-transform: rotate(184deg);\n  -o-transform: rotate(184deg);\n  transform: rotate(184deg); }\n.wi-wind.from-5-deg {\n  -webkit-transform: rotate(185deg);\n  -moz-transform: rotate(185deg);\n  -ms-transform: rotate(185deg);\n  -o-transform: rotate(185deg);\n  transform: rotate(185deg); }\n.wi-wind.from-6-deg {\n  -webkit-transform: rotate(186deg);\n  -moz-transform: rotate(186deg);\n  -ms-transform: rotate(186deg);\n  -o-transform: rotate(186deg);\n  transform: rotate(186deg); }\n.wi-wind.from-7-deg {\n  -webkit-transform: rotate(187deg);\n  -moz-transform: rotate(187deg);\n  -ms-transform: rotate(187deg);\n  -o-transform: rotate(187deg);\n  transform: rotate(187deg); }\n.wi-wind.from-8-deg {\n  -webkit-transform: rotate(188deg);\n  -moz-transform: rotate(188deg);\n  -ms-transform: rotate(188deg);\n  -o-transform: rotate(188deg);\n  transform: rotate(188deg); }\n.wi-wind.from-9-deg {\n  -webkit-transform: rotate(189deg);\n  -moz-transform: rotate(189deg);\n  -ms-transform: rotate(189deg);\n  -o-transform: rotate(189deg);\n  transform: rotate(189deg); }\n.wi-wind.from-10-deg {\n  -webkit-transform: rotate(190deg);\n  -moz-transform: rotate(190deg);\n  -ms-transform: rotate(190deg);\n  -o-transform: rotate(190deg);\n  transform: rotate(190deg); }\n.wi-wind.from-11-deg {\n  -webkit-transform: rotate(191deg);\n  -moz-transform: rotate(191deg);\n  -ms-transform: rotate(191deg);\n  -o-transform: rotate(191deg);\n  transform: rotate(191deg); }\n.wi-wind.from-12-deg {\n  -webkit-transform: rotate(192deg);\n  -moz-transform: rotate(192deg);\n  -ms-transform: rotate(192deg);\n  -o-transform: rotate(192deg);\n  transform: rotate(192deg); }\n.wi-wind.from-13-deg {\n  -webkit-transform: rotate(193deg);\n  -moz-transform: rotate(193deg);\n  -ms-transform: rotate(193deg);\n  -o-transform: rotate(193deg);\n  transform: rotate(193deg); }\n.wi-wind.from-14-deg {\n  -webkit-transform: rotate(194deg);\n  -moz-transform: rotate(194deg);\n  -ms-transform: rotate(194deg);\n  -o-transform: rotate(194deg);\n  transform: rotate(194deg); }\n.wi-wind.from-15-deg {\n  -webkit-transform: rotate(195deg);\n  -moz-transform: rotate(195deg);\n  -ms-transform: rotate(195deg);\n  -o-transform: rotate(195deg);\n  transform: rotate(195deg); }\n.wi-wind.from-16-deg {\n  -webkit-transform: rotate(196deg);\n  -moz-transform: rotate(196deg);\n  -ms-transform: rotate(196deg);\n  -o-transform: rotate(196deg);\n  transform: rotate(196deg); }\n.wi-wind.from-17-deg {\n  -webkit-transform: rotate(197deg);\n  -moz-transform: rotate(197deg);\n  -ms-transform: rotate(197deg);\n  -o-transform: rotate(197deg);\n  transform: rotate(197deg); }\n.wi-wind.from-18-deg {\n  -webkit-transform: rotate(198deg);\n  -moz-transform: rotate(198deg);\n  -ms-transform: rotate(198deg);\n  -o-transform: rotate(198deg);\n  transform: rotate(198deg); }\n.wi-wind.from-19-deg {\n  -webkit-transform: rotate(199deg);\n  -moz-transform: rotate(199deg);\n  -ms-transform: rotate(199deg);\n  -o-transform: rotate(199deg);\n  transform: rotate(199deg); }\n.wi-wind.from-20-deg {\n  -webkit-transform: rotate(200deg);\n  -moz-transform: rotate(200deg);\n  -ms-transform: rotate(200deg);\n  -o-transform: rotate(200deg);\n  transform: rotate(200deg); }\n.wi-wind.from-21-deg {\n  -webkit-transform: rotate(201deg);\n  -moz-transform: rotate(201deg);\n  -ms-transform: rotate(201deg);\n  -o-transform: rotate(201deg);\n  transform: rotate(201deg); }\n.wi-wind.from-22-deg {\n  -webkit-transform: rotate(202deg);\n  -moz-transform: rotate(202deg);\n  -ms-transform: rotate(202deg);\n  -o-transform: rotate(202deg);\n  transform: rotate(202deg); }\n.wi-wind.from-23-deg {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n.wi-wind.from-24-deg {\n  -webkit-transform: rotate(204deg);\n  -moz-transform: rotate(204deg);\n  -ms-transform: rotate(204deg);\n  -o-transform: rotate(204deg);\n  transform: rotate(204deg); }\n.wi-wind.from-25-deg {\n  -webkit-transform: rotate(205deg);\n  -moz-transform: rotate(205deg);\n  -ms-transform: rotate(205deg);\n  -o-transform: rotate(205deg);\n  transform: rotate(205deg); }\n.wi-wind.from-26-deg {\n  -webkit-transform: rotate(206deg);\n  -moz-transform: rotate(206deg);\n  -ms-transform: rotate(206deg);\n  -o-transform: rotate(206deg);\n  transform: rotate(206deg); }\n.wi-wind.from-27-deg {\n  -webkit-transform: rotate(207deg);\n  -moz-transform: rotate(207deg);\n  -ms-transform: rotate(207deg);\n  -o-transform: rotate(207deg);\n  transform: rotate(207deg); }\n.wi-wind.from-28-deg {\n  -webkit-transform: rotate(208deg);\n  -moz-transform: rotate(208deg);\n  -ms-transform: rotate(208deg);\n  -o-transform: rotate(208deg);\n  transform: rotate(208deg); }\n.wi-wind.from-29-deg {\n  -webkit-transform: rotate(209deg);\n  -moz-transform: rotate(209deg);\n  -ms-transform: rotate(209deg);\n  -o-transform: rotate(209deg);\n  transform: rotate(209deg); }\n.wi-wind.from-30-deg {\n  -webkit-transform: rotate(210deg);\n  -moz-transform: rotate(210deg);\n  -ms-transform: rotate(210deg);\n  -o-transform: rotate(210deg);\n  transform: rotate(210deg); }\n.wi-wind.from-31-deg {\n  -webkit-transform: rotate(211deg);\n  -moz-transform: rotate(211deg);\n  -ms-transform: rotate(211deg);\n  -o-transform: rotate(211deg);\n  transform: rotate(211deg); }\n.wi-wind.from-32-deg {\n  -webkit-transform: rotate(212deg);\n  -moz-transform: rotate(212deg);\n  -ms-transform: rotate(212deg);\n  -o-transform: rotate(212deg);\n  transform: rotate(212deg); }\n.wi-wind.from-33-deg {\n  -webkit-transform: rotate(213deg);\n  -moz-transform: rotate(213deg);\n  -ms-transform: rotate(213deg);\n  -o-transform: rotate(213deg);\n  transform: rotate(213deg); }\n.wi-wind.from-34-deg {\n  -webkit-transform: rotate(214deg);\n  -moz-transform: rotate(214deg);\n  -ms-transform: rotate(214deg);\n  -o-transform: rotate(214deg);\n  transform: rotate(214deg); }\n.wi-wind.from-35-deg {\n  -webkit-transform: rotate(215deg);\n  -moz-transform: rotate(215deg);\n  -ms-transform: rotate(215deg);\n  -o-transform: rotate(215deg);\n  transform: rotate(215deg); }\n.wi-wind.from-36-deg {\n  -webkit-transform: rotate(216deg);\n  -moz-transform: rotate(216deg);\n  -ms-transform: rotate(216deg);\n  -o-transform: rotate(216deg);\n  transform: rotate(216deg); }\n.wi-wind.from-37-deg {\n  -webkit-transform: rotate(217deg);\n  -moz-transform: rotate(217deg);\n  -ms-transform: rotate(217deg);\n  -o-transform: rotate(217deg);\n  transform: rotate(217deg); }\n.wi-wind.from-38-deg {\n  -webkit-transform: rotate(218deg);\n  -moz-transform: rotate(218deg);\n  -ms-transform: rotate(218deg);\n  -o-transform: rotate(218deg);\n  transform: rotate(218deg); }\n.wi-wind.from-39-deg {\n  -webkit-transform: rotate(219deg);\n  -moz-transform: rotate(219deg);\n  -ms-transform: rotate(219deg);\n  -o-transform: rotate(219deg);\n  transform: rotate(219deg); }\n.wi-wind.from-40-deg {\n  -webkit-transform: rotate(220deg);\n  -moz-transform: rotate(220deg);\n  -ms-transform: rotate(220deg);\n  -o-transform: rotate(220deg);\n  transform: rotate(220deg); }\n.wi-wind.from-41-deg {\n  -webkit-transform: rotate(221deg);\n  -moz-transform: rotate(221deg);\n  -ms-transform: rotate(221deg);\n  -o-transform: rotate(221deg);\n  transform: rotate(221deg); }\n.wi-wind.from-42-deg {\n  -webkit-transform: rotate(222deg);\n  -moz-transform: rotate(222deg);\n  -ms-transform: rotate(222deg);\n  -o-transform: rotate(222deg);\n  transform: rotate(222deg); }\n.wi-wind.from-43-deg {\n  -webkit-transform: rotate(223deg);\n  -moz-transform: rotate(223deg);\n  -ms-transform: rotate(223deg);\n  -o-transform: rotate(223deg);\n  transform: rotate(223deg); }\n.wi-wind.from-44-deg {\n  -webkit-transform: rotate(224deg);\n  -moz-transform: rotate(224deg);\n  -ms-transform: rotate(224deg);\n  -o-transform: rotate(224deg);\n  transform: rotate(224deg); }\n.wi-wind.from-45-deg {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n.wi-wind.from-46-deg {\n  -webkit-transform: rotate(226deg);\n  -moz-transform: rotate(226deg);\n  -ms-transform: rotate(226deg);\n  -o-transform: rotate(226deg);\n  transform: rotate(226deg); }\n.wi-wind.from-47-deg {\n  -webkit-transform: rotate(227deg);\n  -moz-transform: rotate(227deg);\n  -ms-transform: rotate(227deg);\n  -o-transform: rotate(227deg);\n  transform: rotate(227deg); }\n.wi-wind.from-48-deg {\n  -webkit-transform: rotate(228deg);\n  -moz-transform: rotate(228deg);\n  -ms-transform: rotate(228deg);\n  -o-transform: rotate(228deg);\n  transform: rotate(228deg); }\n.wi-wind.from-49-deg {\n  -webkit-transform: rotate(229deg);\n  -moz-transform: rotate(229deg);\n  -ms-transform: rotate(229deg);\n  -o-transform: rotate(229deg);\n  transform: rotate(229deg); }\n.wi-wind.from-50-deg {\n  -webkit-transform: rotate(230deg);\n  -moz-transform: rotate(230deg);\n  -ms-transform: rotate(230deg);\n  -o-transform: rotate(230deg);\n  transform: rotate(230deg); }\n.wi-wind.from-51-deg {\n  -webkit-transform: rotate(231deg);\n  -moz-transform: rotate(231deg);\n  -ms-transform: rotate(231deg);\n  -o-transform: rotate(231deg);\n  transform: rotate(231deg); }\n.wi-wind.from-52-deg {\n  -webkit-transform: rotate(232deg);\n  -moz-transform: rotate(232deg);\n  -ms-transform: rotate(232deg);\n  -o-transform: rotate(232deg);\n  transform: rotate(232deg); }\n.wi-wind.from-53-deg {\n  -webkit-transform: rotate(233deg);\n  -moz-transform: rotate(233deg);\n  -ms-transform: rotate(233deg);\n  -o-transform: rotate(233deg);\n  transform: rotate(233deg); }\n.wi-wind.from-54-deg {\n  -webkit-transform: rotate(234deg);\n  -moz-transform: rotate(234deg);\n  -ms-transform: rotate(234deg);\n  -o-transform: rotate(234deg);\n  transform: rotate(234deg); }\n.wi-wind.from-55-deg {\n  -webkit-transform: rotate(235deg);\n  -moz-transform: rotate(235deg);\n  -ms-transform: rotate(235deg);\n  -o-transform: rotate(235deg);\n  transform: rotate(235deg); }\n.wi-wind.from-56-deg {\n  -webkit-transform: rotate(236deg);\n  -moz-transform: rotate(236deg);\n  -ms-transform: rotate(236deg);\n  -o-transform: rotate(236deg);\n  transform: rotate(236deg); }\n.wi-wind.from-57-deg {\n  -webkit-transform: rotate(237deg);\n  -moz-transform: rotate(237deg);\n  -ms-transform: rotate(237deg);\n  -o-transform: rotate(237deg);\n  transform: rotate(237deg); }\n.wi-wind.from-58-deg {\n  -webkit-transform: rotate(238deg);\n  -moz-transform: rotate(238deg);\n  -ms-transform: rotate(238deg);\n  -o-transform: rotate(238deg);\n  transform: rotate(238deg); }\n.wi-wind.from-59-deg {\n  -webkit-transform: rotate(239deg);\n  -moz-transform: rotate(239deg);\n  -ms-transform: rotate(239deg);\n  -o-transform: rotate(239deg);\n  transform: rotate(239deg); }\n.wi-wind.from-60-deg {\n  -webkit-transform: rotate(240deg);\n  -moz-transform: rotate(240deg);\n  -ms-transform: rotate(240deg);\n  -o-transform: rotate(240deg);\n  transform: rotate(240deg); }\n.wi-wind.from-61-deg {\n  -webkit-transform: rotate(241deg);\n  -moz-transform: rotate(241deg);\n  -ms-transform: rotate(241deg);\n  -o-transform: rotate(241deg);\n  transform: rotate(241deg); }\n.wi-wind.from-62-deg {\n  -webkit-transform: rotate(242deg);\n  -moz-transform: rotate(242deg);\n  -ms-transform: rotate(242deg);\n  -o-transform: rotate(242deg);\n  transform: rotate(242deg); }\n.wi-wind.from-63-deg {\n  -webkit-transform: rotate(243deg);\n  -moz-transform: rotate(243deg);\n  -ms-transform: rotate(243deg);\n  -o-transform: rotate(243deg);\n  transform: rotate(243deg); }\n.wi-wind.from-64-deg {\n  -webkit-transform: rotate(244deg);\n  -moz-transform: rotate(244deg);\n  -ms-transform: rotate(244deg);\n  -o-transform: rotate(244deg);\n  transform: rotate(244deg); }\n.wi-wind.from-65-deg {\n  -webkit-transform: rotate(245deg);\n  -moz-transform: rotate(245deg);\n  -ms-transform: rotate(245deg);\n  -o-transform: rotate(245deg);\n  transform: rotate(245deg); }\n.wi-wind.from-66-deg {\n  -webkit-transform: rotate(246deg);\n  -moz-transform: rotate(246deg);\n  -ms-transform: rotate(246deg);\n  -o-transform: rotate(246deg);\n  transform: rotate(246deg); }\n.wi-wind.from-67-deg {\n  -webkit-transform: rotate(247deg);\n  -moz-transform: rotate(247deg);\n  -ms-transform: rotate(247deg);\n  -o-transform: rotate(247deg);\n  transform: rotate(247deg); }\n.wi-wind.from-68-deg {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n.wi-wind.from-69-deg {\n  -webkit-transform: rotate(249deg);\n  -moz-transform: rotate(249deg);\n  -ms-transform: rotate(249deg);\n  -o-transform: rotate(249deg);\n  transform: rotate(249deg); }\n.wi-wind.from-70-deg {\n  -webkit-transform: rotate(250deg);\n  -moz-transform: rotate(250deg);\n  -ms-transform: rotate(250deg);\n  -o-transform: rotate(250deg);\n  transform: rotate(250deg); }\n.wi-wind.from-71-deg {\n  -webkit-transform: rotate(251deg);\n  -moz-transform: rotate(251deg);\n  -ms-transform: rotate(251deg);\n  -o-transform: rotate(251deg);\n  transform: rotate(251deg); }\n.wi-wind.from-72-deg {\n  -webkit-transform: rotate(252deg);\n  -moz-transform: rotate(252deg);\n  -ms-transform: rotate(252deg);\n  -o-transform: rotate(252deg);\n  transform: rotate(252deg); }\n.wi-wind.from-73-deg {\n  -webkit-transform: rotate(253deg);\n  -moz-transform: rotate(253deg);\n  -ms-transform: rotate(253deg);\n  -o-transform: rotate(253deg);\n  transform: rotate(253deg); }\n.wi-wind.from-74-deg {\n  -webkit-transform: rotate(254deg);\n  -moz-transform: rotate(254deg);\n  -ms-transform: rotate(254deg);\n  -o-transform: rotate(254deg);\n  transform: rotate(254deg); }\n.wi-wind.from-75-deg {\n  -webkit-transform: rotate(255deg);\n  -moz-transform: rotate(255deg);\n  -ms-transform: rotate(255deg);\n  -o-transform: rotate(255deg);\n  transform: rotate(255deg); }\n.wi-wind.from-76-deg {\n  -webkit-transform: rotate(256deg);\n  -moz-transform: rotate(256deg);\n  -ms-transform: rotate(256deg);\n  -o-transform: rotate(256deg);\n  transform: rotate(256deg); }\n.wi-wind.from-77-deg {\n  -webkit-transform: rotate(257deg);\n  -moz-transform: rotate(257deg);\n  -ms-transform: rotate(257deg);\n  -o-transform: rotate(257deg);\n  transform: rotate(257deg); }\n.wi-wind.from-78-deg {\n  -webkit-transform: rotate(258deg);\n  -moz-transform: rotate(258deg);\n  -ms-transform: rotate(258deg);\n  -o-transform: rotate(258deg);\n  transform: rotate(258deg); }\n.wi-wind.from-79-deg {\n  -webkit-transform: rotate(259deg);\n  -moz-transform: rotate(259deg);\n  -ms-transform: rotate(259deg);\n  -o-transform: rotate(259deg);\n  transform: rotate(259deg); }\n.wi-wind.from-80-deg {\n  -webkit-transform: rotate(260deg);\n  -moz-transform: rotate(260deg);\n  -ms-transform: rotate(260deg);\n  -o-transform: rotate(260deg);\n  transform: rotate(260deg); }\n.wi-wind.from-81-deg {\n  -webkit-transform: rotate(261deg);\n  -moz-transform: rotate(261deg);\n  -ms-transform: rotate(261deg);\n  -o-transform: rotate(261deg);\n  transform: rotate(261deg); }\n.wi-wind.from-82-deg {\n  -webkit-transform: rotate(262deg);\n  -moz-transform: rotate(262deg);\n  -ms-transform: rotate(262deg);\n  -o-transform: rotate(262deg);\n  transform: rotate(262deg); }\n.wi-wind.from-83-deg {\n  -webkit-transform: rotate(263deg);\n  -moz-transform: rotate(263deg);\n  -ms-transform: rotate(263deg);\n  -o-transform: rotate(263deg);\n  transform: rotate(263deg); }\n.wi-wind.from-84-deg {\n  -webkit-transform: rotate(264deg);\n  -moz-transform: rotate(264deg);\n  -ms-transform: rotate(264deg);\n  -o-transform: rotate(264deg);\n  transform: rotate(264deg); }\n.wi-wind.from-85-deg {\n  -webkit-transform: rotate(265deg);\n  -moz-transform: rotate(265deg);\n  -ms-transform: rotate(265deg);\n  -o-transform: rotate(265deg);\n  transform: rotate(265deg); }\n.wi-wind.from-86-deg {\n  -webkit-transform: rotate(266deg);\n  -moz-transform: rotate(266deg);\n  -ms-transform: rotate(266deg);\n  -o-transform: rotate(266deg);\n  transform: rotate(266deg); }\n.wi-wind.from-87-deg {\n  -webkit-transform: rotate(267deg);\n  -moz-transform: rotate(267deg);\n  -ms-transform: rotate(267deg);\n  -o-transform: rotate(267deg);\n  transform: rotate(267deg); }\n.wi-wind.from-88-deg {\n  -webkit-transform: rotate(268deg);\n  -moz-transform: rotate(268deg);\n  -ms-transform: rotate(268deg);\n  -o-transform: rotate(268deg);\n  transform: rotate(268deg); }\n.wi-wind.from-89-deg {\n  -webkit-transform: rotate(269deg);\n  -moz-transform: rotate(269deg);\n  -ms-transform: rotate(269deg);\n  -o-transform: rotate(269deg);\n  transform: rotate(269deg); }\n.wi-wind.from-90-deg {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n.wi-wind.from-91-deg {\n  -webkit-transform: rotate(271deg);\n  -moz-transform: rotate(271deg);\n  -ms-transform: rotate(271deg);\n  -o-transform: rotate(271deg);\n  transform: rotate(271deg); }\n.wi-wind.from-92-deg {\n  -webkit-transform: rotate(272deg);\n  -moz-transform: rotate(272deg);\n  -ms-transform: rotate(272deg);\n  -o-transform: rotate(272deg);\n  transform: rotate(272deg); }\n.wi-wind.from-93-deg {\n  -webkit-transform: rotate(273deg);\n  -moz-transform: rotate(273deg);\n  -ms-transform: rotate(273deg);\n  -o-transform: rotate(273deg);\n  transform: rotate(273deg); }\n.wi-wind.from-94-deg {\n  -webkit-transform: rotate(274deg);\n  -moz-transform: rotate(274deg);\n  -ms-transform: rotate(274deg);\n  -o-transform: rotate(274deg);\n  transform: rotate(274deg); }\n.wi-wind.from-95-deg {\n  -webkit-transform: rotate(275deg);\n  -moz-transform: rotate(275deg);\n  -ms-transform: rotate(275deg);\n  -o-transform: rotate(275deg);\n  transform: rotate(275deg); }\n.wi-wind.from-96-deg {\n  -webkit-transform: rotate(276deg);\n  -moz-transform: rotate(276deg);\n  -ms-transform: rotate(276deg);\n  -o-transform: rotate(276deg);\n  transform: rotate(276deg); }\n.wi-wind.from-97-deg {\n  -webkit-transform: rotate(277deg);\n  -moz-transform: rotate(277deg);\n  -ms-transform: rotate(277deg);\n  -o-transform: rotate(277deg);\n  transform: rotate(277deg); }\n.wi-wind.from-98-deg {\n  -webkit-transform: rotate(278deg);\n  -moz-transform: rotate(278deg);\n  -ms-transform: rotate(278deg);\n  -o-transform: rotate(278deg);\n  transform: rotate(278deg); }\n.wi-wind.from-99-deg {\n  -webkit-transform: rotate(279deg);\n  -moz-transform: rotate(279deg);\n  -ms-transform: rotate(279deg);\n  -o-transform: rotate(279deg);\n  transform: rotate(279deg); }\n.wi-wind.from-100-deg {\n  -webkit-transform: rotate(280deg);\n  -moz-transform: rotate(280deg);\n  -ms-transform: rotate(280deg);\n  -o-transform: rotate(280deg);\n  transform: rotate(280deg); }\n.wi-wind.from-101-deg {\n  -webkit-transform: rotate(281deg);\n  -moz-transform: rotate(281deg);\n  -ms-transform: rotate(281deg);\n  -o-transform: rotate(281deg);\n  transform: rotate(281deg); }\n.wi-wind.from-102-deg {\n  -webkit-transform: rotate(282deg);\n  -moz-transform: rotate(282deg);\n  -ms-transform: rotate(282deg);\n  -o-transform: rotate(282deg);\n  transform: rotate(282deg); }\n.wi-wind.from-103-deg {\n  -webkit-transform: rotate(283deg);\n  -moz-transform: rotate(283deg);\n  -ms-transform: rotate(283deg);\n  -o-transform: rotate(283deg);\n  transform: rotate(283deg); }\n.wi-wind.from-104-deg {\n  -webkit-transform: rotate(284deg);\n  -moz-transform: rotate(284deg);\n  -ms-transform: rotate(284deg);\n  -o-transform: rotate(284deg);\n  transform: rotate(284deg); }\n.wi-wind.from-105-deg {\n  -webkit-transform: rotate(285deg);\n  -moz-transform: rotate(285deg);\n  -ms-transform: rotate(285deg);\n  -o-transform: rotate(285deg);\n  transform: rotate(285deg); }\n.wi-wind.from-106-deg {\n  -webkit-transform: rotate(286deg);\n  -moz-transform: rotate(286deg);\n  -ms-transform: rotate(286deg);\n  -o-transform: rotate(286deg);\n  transform: rotate(286deg); }\n.wi-wind.from-107-deg {\n  -webkit-transform: rotate(287deg);\n  -moz-transform: rotate(287deg);\n  -ms-transform: rotate(287deg);\n  -o-transform: rotate(287deg);\n  transform: rotate(287deg); }\n.wi-wind.from-108-deg {\n  -webkit-transform: rotate(288deg);\n  -moz-transform: rotate(288deg);\n  -ms-transform: rotate(288deg);\n  -o-transform: rotate(288deg);\n  transform: rotate(288deg); }\n.wi-wind.from-109-deg {\n  -webkit-transform: rotate(289deg);\n  -moz-transform: rotate(289deg);\n  -ms-transform: rotate(289deg);\n  -o-transform: rotate(289deg);\n  transform: rotate(289deg); }\n.wi-wind.from-110-deg {\n  -webkit-transform: rotate(290deg);\n  -moz-transform: rotate(290deg);\n  -ms-transform: rotate(290deg);\n  -o-transform: rotate(290deg);\n  transform: rotate(290deg); }\n.wi-wind.from-111-deg {\n  -webkit-transform: rotate(291deg);\n  -moz-transform: rotate(291deg);\n  -ms-transform: rotate(291deg);\n  -o-transform: rotate(291deg);\n  transform: rotate(291deg); }\n.wi-wind.from-112-deg {\n  -webkit-transform: rotate(292deg);\n  -moz-transform: rotate(292deg);\n  -ms-transform: rotate(292deg);\n  -o-transform: rotate(292deg);\n  transform: rotate(292deg); }\n.wi-wind.from-113-deg {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n.wi-wind.from-114-deg {\n  -webkit-transform: rotate(294deg);\n  -moz-transform: rotate(294deg);\n  -ms-transform: rotate(294deg);\n  -o-transform: rotate(294deg);\n  transform: rotate(294deg); }\n.wi-wind.from-115-deg {\n  -webkit-transform: rotate(295deg);\n  -moz-transform: rotate(295deg);\n  -ms-transform: rotate(295deg);\n  -o-transform: rotate(295deg);\n  transform: rotate(295deg); }\n.wi-wind.from-116-deg {\n  -webkit-transform: rotate(296deg);\n  -moz-transform: rotate(296deg);\n  -ms-transform: rotate(296deg);\n  -o-transform: rotate(296deg);\n  transform: rotate(296deg); }\n.wi-wind.from-117-deg {\n  -webkit-transform: rotate(297deg);\n  -moz-transform: rotate(297deg);\n  -ms-transform: rotate(297deg);\n  -o-transform: rotate(297deg);\n  transform: rotate(297deg); }\n.wi-wind.from-118-deg {\n  -webkit-transform: rotate(298deg);\n  -moz-transform: rotate(298deg);\n  -ms-transform: rotate(298deg);\n  -o-transform: rotate(298deg);\n  transform: rotate(298deg); }\n.wi-wind.from-119-deg {\n  -webkit-transform: rotate(299deg);\n  -moz-transform: rotate(299deg);\n  -ms-transform: rotate(299deg);\n  -o-transform: rotate(299deg);\n  transform: rotate(299deg); }\n.wi-wind.from-120-deg {\n  -webkit-transform: rotate(300deg);\n  -moz-transform: rotate(300deg);\n  -ms-transform: rotate(300deg);\n  -o-transform: rotate(300deg);\n  transform: rotate(300deg); }\n.wi-wind.from-121-deg {\n  -webkit-transform: rotate(301deg);\n  -moz-transform: rotate(301deg);\n  -ms-transform: rotate(301deg);\n  -o-transform: rotate(301deg);\n  transform: rotate(301deg); }\n.wi-wind.from-122-deg {\n  -webkit-transform: rotate(302deg);\n  -moz-transform: rotate(302deg);\n  -ms-transform: rotate(302deg);\n  -o-transform: rotate(302deg);\n  transform: rotate(302deg); }\n.wi-wind.from-123-deg {\n  -webkit-transform: rotate(303deg);\n  -moz-transform: rotate(303deg);\n  -ms-transform: rotate(303deg);\n  -o-transform: rotate(303deg);\n  transform: rotate(303deg); }\n.wi-wind.from-124-deg {\n  -webkit-transform: rotate(304deg);\n  -moz-transform: rotate(304deg);\n  -ms-transform: rotate(304deg);\n  -o-transform: rotate(304deg);\n  transform: rotate(304deg); }\n.wi-wind.from-125-deg {\n  -webkit-transform: rotate(305deg);\n  -moz-transform: rotate(305deg);\n  -ms-transform: rotate(305deg);\n  -o-transform: rotate(305deg);\n  transform: rotate(305deg); }\n.wi-wind.from-126-deg {\n  -webkit-transform: rotate(306deg);\n  -moz-transform: rotate(306deg);\n  -ms-transform: rotate(306deg);\n  -o-transform: rotate(306deg);\n  transform: rotate(306deg); }\n.wi-wind.from-127-deg {\n  -webkit-transform: rotate(307deg);\n  -moz-transform: rotate(307deg);\n  -ms-transform: rotate(307deg);\n  -o-transform: rotate(307deg);\n  transform: rotate(307deg); }\n.wi-wind.from-128-deg {\n  -webkit-transform: rotate(308deg);\n  -moz-transform: rotate(308deg);\n  -ms-transform: rotate(308deg);\n  -o-transform: rotate(308deg);\n  transform: rotate(308deg); }\n.wi-wind.from-129-deg {\n  -webkit-transform: rotate(309deg);\n  -moz-transform: rotate(309deg);\n  -ms-transform: rotate(309deg);\n  -o-transform: rotate(309deg);\n  transform: rotate(309deg); }\n.wi-wind.from-130-deg {\n  -webkit-transform: rotate(310deg);\n  -moz-transform: rotate(310deg);\n  -ms-transform: rotate(310deg);\n  -o-transform: rotate(310deg);\n  transform: rotate(310deg); }\n.wi-wind.from-131-deg {\n  -webkit-transform: rotate(311deg);\n  -moz-transform: rotate(311deg);\n  -ms-transform: rotate(311deg);\n  -o-transform: rotate(311deg);\n  transform: rotate(311deg); }\n.wi-wind.from-132-deg {\n  -webkit-transform: rotate(312deg);\n  -moz-transform: rotate(312deg);\n  -ms-transform: rotate(312deg);\n  -o-transform: rotate(312deg);\n  transform: rotate(312deg); }\n.wi-wind.from-133-deg {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n.wi-wind.from-134-deg {\n  -webkit-transform: rotate(314deg);\n  -moz-transform: rotate(314deg);\n  -ms-transform: rotate(314deg);\n  -o-transform: rotate(314deg);\n  transform: rotate(314deg); }\n.wi-wind.from-135-deg {\n  -webkit-transform: rotate(315deg);\n  -moz-transform: rotate(315deg);\n  -ms-transform: rotate(315deg);\n  -o-transform: rotate(315deg);\n  transform: rotate(315deg); }\n.wi-wind.from-136-deg {\n  -webkit-transform: rotate(316deg);\n  -moz-transform: rotate(316deg);\n  -ms-transform: rotate(316deg);\n  -o-transform: rotate(316deg);\n  transform: rotate(316deg); }\n.wi-wind.from-137-deg {\n  -webkit-transform: rotate(317deg);\n  -moz-transform: rotate(317deg);\n  -ms-transform: rotate(317deg);\n  -o-transform: rotate(317deg);\n  transform: rotate(317deg); }\n.wi-wind.from-138-deg {\n  -webkit-transform: rotate(318deg);\n  -moz-transform: rotate(318deg);\n  -ms-transform: rotate(318deg);\n  -o-transform: rotate(318deg);\n  transform: rotate(318deg); }\n.wi-wind.from-139-deg {\n  -webkit-transform: rotate(319deg);\n  -moz-transform: rotate(319deg);\n  -ms-transform: rotate(319deg);\n  -o-transform: rotate(319deg);\n  transform: rotate(319deg); }\n.wi-wind.from-140-deg {\n  -webkit-transform: rotate(320deg);\n  -moz-transform: rotate(320deg);\n  -ms-transform: rotate(320deg);\n  -o-transform: rotate(320deg);\n  transform: rotate(320deg); }\n.wi-wind.from-141-deg {\n  -webkit-transform: rotate(321deg);\n  -moz-transform: rotate(321deg);\n  -ms-transform: rotate(321deg);\n  -o-transform: rotate(321deg);\n  transform: rotate(321deg); }\n.wi-wind.from-142-deg {\n  -webkit-transform: rotate(322deg);\n  -moz-transform: rotate(322deg);\n  -ms-transform: rotate(322deg);\n  -o-transform: rotate(322deg);\n  transform: rotate(322deg); }\n.wi-wind.from-143-deg {\n  -webkit-transform: rotate(323deg);\n  -moz-transform: rotate(323deg);\n  -ms-transform: rotate(323deg);\n  -o-transform: rotate(323deg);\n  transform: rotate(323deg); }\n.wi-wind.from-144-deg {\n  -webkit-transform: rotate(324deg);\n  -moz-transform: rotate(324deg);\n  -ms-transform: rotate(324deg);\n  -o-transform: rotate(324deg);\n  transform: rotate(324deg); }\n.wi-wind.from-145-deg {\n  -webkit-transform: rotate(325deg);\n  -moz-transform: rotate(325deg);\n  -ms-transform: rotate(325deg);\n  -o-transform: rotate(325deg);\n  transform: rotate(325deg); }\n.wi-wind.from-146-deg {\n  -webkit-transform: rotate(326deg);\n  -moz-transform: rotate(326deg);\n  -ms-transform: rotate(326deg);\n  -o-transform: rotate(326deg);\n  transform: rotate(326deg); }\n.wi-wind.from-147-deg {\n  -webkit-transform: rotate(327deg);\n  -moz-transform: rotate(327deg);\n  -ms-transform: rotate(327deg);\n  -o-transform: rotate(327deg);\n  transform: rotate(327deg); }\n.wi-wind.from-148-deg {\n  -webkit-transform: rotate(328deg);\n  -moz-transform: rotate(328deg);\n  -ms-transform: rotate(328deg);\n  -o-transform: rotate(328deg);\n  transform: rotate(328deg); }\n.wi-wind.from-149-deg {\n  -webkit-transform: rotate(329deg);\n  -moz-transform: rotate(329deg);\n  -ms-transform: rotate(329deg);\n  -o-transform: rotate(329deg);\n  transform: rotate(329deg); }\n.wi-wind.from-150-deg {\n  -webkit-transform: rotate(330deg);\n  -moz-transform: rotate(330deg);\n  -ms-transform: rotate(330deg);\n  -o-transform: rotate(330deg);\n  transform: rotate(330deg); }\n.wi-wind.from-151-deg {\n  -webkit-transform: rotate(331deg);\n  -moz-transform: rotate(331deg);\n  -ms-transform: rotate(331deg);\n  -o-transform: rotate(331deg);\n  transform: rotate(331deg); }\n.wi-wind.from-152-deg {\n  -webkit-transform: rotate(332deg);\n  -moz-transform: rotate(332deg);\n  -ms-transform: rotate(332deg);\n  -o-transform: rotate(332deg);\n  transform: rotate(332deg); }\n.wi-wind.from-153-deg {\n  -webkit-transform: rotate(333deg);\n  -moz-transform: rotate(333deg);\n  -ms-transform: rotate(333deg);\n  -o-transform: rotate(333deg);\n  transform: rotate(333deg); }\n.wi-wind.from-154-deg {\n  -webkit-transform: rotate(334deg);\n  -moz-transform: rotate(334deg);\n  -ms-transform: rotate(334deg);\n  -o-transform: rotate(334deg);\n  transform: rotate(334deg); }\n.wi-wind.from-155-deg {\n  -webkit-transform: rotate(335deg);\n  -moz-transform: rotate(335deg);\n  -ms-transform: rotate(335deg);\n  -o-transform: rotate(335deg);\n  transform: rotate(335deg); }\n.wi-wind.from-156-deg {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n.wi-wind.from-157-deg {\n  -webkit-transform: rotate(337deg);\n  -moz-transform: rotate(337deg);\n  -ms-transform: rotate(337deg);\n  -o-transform: rotate(337deg);\n  transform: rotate(337deg); }\n.wi-wind.from-158-deg {\n  -webkit-transform: rotate(338deg);\n  -moz-transform: rotate(338deg);\n  -ms-transform: rotate(338deg);\n  -o-transform: rotate(338deg);\n  transform: rotate(338deg); }\n.wi-wind.from-159-deg {\n  -webkit-transform: rotate(339deg);\n  -moz-transform: rotate(339deg);\n  -ms-transform: rotate(339deg);\n  -o-transform: rotate(339deg);\n  transform: rotate(339deg); }\n.wi-wind.from-160-deg {\n  -webkit-transform: rotate(340deg);\n  -moz-transform: rotate(340deg);\n  -ms-transform: rotate(340deg);\n  -o-transform: rotate(340deg);\n  transform: rotate(340deg); }\n.wi-wind.from-161-deg {\n  -webkit-transform: rotate(341deg);\n  -moz-transform: rotate(341deg);\n  -ms-transform: rotate(341deg);\n  -o-transform: rotate(341deg);\n  transform: rotate(341deg); }\n.wi-wind.from-162-deg {\n  -webkit-transform: rotate(342deg);\n  -moz-transform: rotate(342deg);\n  -ms-transform: rotate(342deg);\n  -o-transform: rotate(342deg);\n  transform: rotate(342deg); }\n.wi-wind.from-163-deg {\n  -webkit-transform: rotate(343deg);\n  -moz-transform: rotate(343deg);\n  -ms-transform: rotate(343deg);\n  -o-transform: rotate(343deg);\n  transform: rotate(343deg); }\n.wi-wind.from-164-deg {\n  -webkit-transform: rotate(344deg);\n  -moz-transform: rotate(344deg);\n  -ms-transform: rotate(344deg);\n  -o-transform: rotate(344deg);\n  transform: rotate(344deg); }\n.wi-wind.from-165-deg {\n  -webkit-transform: rotate(345deg);\n  -moz-transform: rotate(345deg);\n  -ms-transform: rotate(345deg);\n  -o-transform: rotate(345deg);\n  transform: rotate(345deg); }\n.wi-wind.from-166-deg {\n  -webkit-transform: rotate(346deg);\n  -moz-transform: rotate(346deg);\n  -ms-transform: rotate(346deg);\n  -o-transform: rotate(346deg);\n  transform: rotate(346deg); }\n.wi-wind.from-167-deg {\n  -webkit-transform: rotate(347deg);\n  -moz-transform: rotate(347deg);\n  -ms-transform: rotate(347deg);\n  -o-transform: rotate(347deg);\n  transform: rotate(347deg); }\n.wi-wind.from-168-deg {\n  -webkit-transform: rotate(348deg);\n  -moz-transform: rotate(348deg);\n  -ms-transform: rotate(348deg);\n  -o-transform: rotate(348deg);\n  transform: rotate(348deg); }\n.wi-wind.from-169-deg {\n  -webkit-transform: rotate(349deg);\n  -moz-transform: rotate(349deg);\n  -ms-transform: rotate(349deg);\n  -o-transform: rotate(349deg);\n  transform: rotate(349deg); }\n.wi-wind.from-170-deg {\n  -webkit-transform: rotate(350deg);\n  -moz-transform: rotate(350deg);\n  -ms-transform: rotate(350deg);\n  -o-transform: rotate(350deg);\n  transform: rotate(350deg); }\n.wi-wind.from-171-deg {\n  -webkit-transform: rotate(351deg);\n  -moz-transform: rotate(351deg);\n  -ms-transform: rotate(351deg);\n  -o-transform: rotate(351deg);\n  transform: rotate(351deg); }\n.wi-wind.from-172-deg {\n  -webkit-transform: rotate(352deg);\n  -moz-transform: rotate(352deg);\n  -ms-transform: rotate(352deg);\n  -o-transform: rotate(352deg);\n  transform: rotate(352deg); }\n.wi-wind.from-173-deg {\n  -webkit-transform: rotate(353deg);\n  -moz-transform: rotate(353deg);\n  -ms-transform: rotate(353deg);\n  -o-transform: rotate(353deg);\n  transform: rotate(353deg); }\n.wi-wind.from-174-deg {\n  -webkit-transform: rotate(354deg);\n  -moz-transform: rotate(354deg);\n  -ms-transform: rotate(354deg);\n  -o-transform: rotate(354deg);\n  transform: rotate(354deg); }\n.wi-wind.from-175-deg {\n  -webkit-transform: rotate(355deg);\n  -moz-transform: rotate(355deg);\n  -ms-transform: rotate(355deg);\n  -o-transform: rotate(355deg);\n  transform: rotate(355deg); }\n.wi-wind.from-176-deg {\n  -webkit-transform: rotate(356deg);\n  -moz-transform: rotate(356deg);\n  -ms-transform: rotate(356deg);\n  -o-transform: rotate(356deg);\n  transform: rotate(356deg); }\n.wi-wind.from-177-deg {\n  -webkit-transform: rotate(357deg);\n  -moz-transform: rotate(357deg);\n  -ms-transform: rotate(357deg);\n  -o-transform: rotate(357deg);\n  transform: rotate(357deg); }\n.wi-wind.from-178-deg {\n  -webkit-transform: rotate(358deg);\n  -moz-transform: rotate(358deg);\n  -ms-transform: rotate(358deg);\n  -o-transform: rotate(358deg);\n  transform: rotate(358deg); }\n.wi-wind.from-179-deg {\n  -webkit-transform: rotate(359deg);\n  -moz-transform: rotate(359deg);\n  -ms-transform: rotate(359deg);\n  -o-transform: rotate(359deg);\n  transform: rotate(359deg); }\n.wi-wind.from-180-deg {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n.wi-wind.from-181-deg {\n  -webkit-transform: rotate(1deg);\n  -moz-transform: rotate(1deg);\n  -ms-transform: rotate(1deg);\n  -o-transform: rotate(1deg);\n  transform: rotate(1deg); }\n.wi-wind.from-182-deg {\n  -webkit-transform: rotate(2deg);\n  -moz-transform: rotate(2deg);\n  -ms-transform: rotate(2deg);\n  -o-transform: rotate(2deg);\n  transform: rotate(2deg); }\n.wi-wind.from-183-deg {\n  -webkit-transform: rotate(3deg);\n  -moz-transform: rotate(3deg);\n  -ms-transform: rotate(3deg);\n  -o-transform: rotate(3deg);\n  transform: rotate(3deg); }\n.wi-wind.from-184-deg {\n  -webkit-transform: rotate(4deg);\n  -moz-transform: rotate(4deg);\n  -ms-transform: rotate(4deg);\n  -o-transform: rotate(4deg);\n  transform: rotate(4deg); }\n.wi-wind.from-185-deg {\n  -webkit-transform: rotate(5deg);\n  -moz-transform: rotate(5deg);\n  -ms-transform: rotate(5deg);\n  -o-transform: rotate(5deg);\n  transform: rotate(5deg); }\n.wi-wind.from-186-deg {\n  -webkit-transform: rotate(6deg);\n  -moz-transform: rotate(6deg);\n  -ms-transform: rotate(6deg);\n  -o-transform: rotate(6deg);\n  transform: rotate(6deg); }\n.wi-wind.from-187-deg {\n  -webkit-transform: rotate(7deg);\n  -moz-transform: rotate(7deg);\n  -ms-transform: rotate(7deg);\n  -o-transform: rotate(7deg);\n  transform: rotate(7deg); }\n.wi-wind.from-188-deg {\n  -webkit-transform: rotate(8deg);\n  -moz-transform: rotate(8deg);\n  -ms-transform: rotate(8deg);\n  -o-transform: rotate(8deg);\n  transform: rotate(8deg); }\n.wi-wind.from-189-deg {\n  -webkit-transform: rotate(9deg);\n  -moz-transform: rotate(9deg);\n  -ms-transform: rotate(9deg);\n  -o-transform: rotate(9deg);\n  transform: rotate(9deg); }\n.wi-wind.from-190-deg {\n  -webkit-transform: rotate(10deg);\n  -moz-transform: rotate(10deg);\n  -ms-transform: rotate(10deg);\n  -o-transform: rotate(10deg);\n  transform: rotate(10deg); }\n.wi-wind.from-191-deg {\n  -webkit-transform: rotate(11deg);\n  -moz-transform: rotate(11deg);\n  -ms-transform: rotate(11deg);\n  -o-transform: rotate(11deg);\n  transform: rotate(11deg); }\n.wi-wind.from-192-deg {\n  -webkit-transform: rotate(12deg);\n  -moz-transform: rotate(12deg);\n  -ms-transform: rotate(12deg);\n  -o-transform: rotate(12deg);\n  transform: rotate(12deg); }\n.wi-wind.from-193-deg {\n  -webkit-transform: rotate(13deg);\n  -moz-transform: rotate(13deg);\n  -ms-transform: rotate(13deg);\n  -o-transform: rotate(13deg);\n  transform: rotate(13deg); }\n.wi-wind.from-194-deg {\n  -webkit-transform: rotate(14deg);\n  -moz-transform: rotate(14deg);\n  -ms-transform: rotate(14deg);\n  -o-transform: rotate(14deg);\n  transform: rotate(14deg); }\n.wi-wind.from-195-deg {\n  -webkit-transform: rotate(15deg);\n  -moz-transform: rotate(15deg);\n  -ms-transform: rotate(15deg);\n  -o-transform: rotate(15deg);\n  transform: rotate(15deg); }\n.wi-wind.from-196-deg {\n  -webkit-transform: rotate(16deg);\n  -moz-transform: rotate(16deg);\n  -ms-transform: rotate(16deg);\n  -o-transform: rotate(16deg);\n  transform: rotate(16deg); }\n.wi-wind.from-197-deg {\n  -webkit-transform: rotate(17deg);\n  -moz-transform: rotate(17deg);\n  -ms-transform: rotate(17deg);\n  -o-transform: rotate(17deg);\n  transform: rotate(17deg); }\n.wi-wind.from-198-deg {\n  -webkit-transform: rotate(18deg);\n  -moz-transform: rotate(18deg);\n  -ms-transform: rotate(18deg);\n  -o-transform: rotate(18deg);\n  transform: rotate(18deg); }\n.wi-wind.from-199-deg {\n  -webkit-transform: rotate(19deg);\n  -moz-transform: rotate(19deg);\n  -ms-transform: rotate(19deg);\n  -o-transform: rotate(19deg);\n  transform: rotate(19deg); }\n.wi-wind.from-200-deg {\n  -webkit-transform: rotate(20deg);\n  -moz-transform: rotate(20deg);\n  -ms-transform: rotate(20deg);\n  -o-transform: rotate(20deg);\n  transform: rotate(20deg); }\n.wi-wind.from-201-deg {\n  -webkit-transform: rotate(21deg);\n  -moz-transform: rotate(21deg);\n  -ms-transform: rotate(21deg);\n  -o-transform: rotate(21deg);\n  transform: rotate(21deg); }\n.wi-wind.from-202-deg {\n  -webkit-transform: rotate(22deg);\n  -moz-transform: rotate(22deg);\n  -ms-transform: rotate(22deg);\n  -o-transform: rotate(22deg);\n  transform: rotate(22deg); }\n.wi-wind.from-203-deg {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n.wi-wind.from-204-deg {\n  -webkit-transform: rotate(24deg);\n  -moz-transform: rotate(24deg);\n  -ms-transform: rotate(24deg);\n  -o-transform: rotate(24deg);\n  transform: rotate(24deg); }\n.wi-wind.from-205-deg {\n  -webkit-transform: rotate(25deg);\n  -moz-transform: rotate(25deg);\n  -ms-transform: rotate(25deg);\n  -o-transform: rotate(25deg);\n  transform: rotate(25deg); }\n.wi-wind.from-206-deg {\n  -webkit-transform: rotate(26deg);\n  -moz-transform: rotate(26deg);\n  -ms-transform: rotate(26deg);\n  -o-transform: rotate(26deg);\n  transform: rotate(26deg); }\n.wi-wind.from-207-deg {\n  -webkit-transform: rotate(27deg);\n  -moz-transform: rotate(27deg);\n  -ms-transform: rotate(27deg);\n  -o-transform: rotate(27deg);\n  transform: rotate(27deg); }\n.wi-wind.from-208-deg {\n  -webkit-transform: rotate(28deg);\n  -moz-transform: rotate(28deg);\n  -ms-transform: rotate(28deg);\n  -o-transform: rotate(28deg);\n  transform: rotate(28deg); }\n.wi-wind.from-209-deg {\n  -webkit-transform: rotate(29deg);\n  -moz-transform: rotate(29deg);\n  -ms-transform: rotate(29deg);\n  -o-transform: rotate(29deg);\n  transform: rotate(29deg); }\n.wi-wind.from-210-deg {\n  -webkit-transform: rotate(30deg);\n  -moz-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg); }\n.wi-wind.from-211-deg {\n  -webkit-transform: rotate(31deg);\n  -moz-transform: rotate(31deg);\n  -ms-transform: rotate(31deg);\n  -o-transform: rotate(31deg);\n  transform: rotate(31deg); }\n.wi-wind.from-212-deg {\n  -webkit-transform: rotate(32deg);\n  -moz-transform: rotate(32deg);\n  -ms-transform: rotate(32deg);\n  -o-transform: rotate(32deg);\n  transform: rotate(32deg); }\n.wi-wind.from-213-deg {\n  -webkit-transform: rotate(33deg);\n  -moz-transform: rotate(33deg);\n  -ms-transform: rotate(33deg);\n  -o-transform: rotate(33deg);\n  transform: rotate(33deg); }\n.wi-wind.from-214-deg {\n  -webkit-transform: rotate(34deg);\n  -moz-transform: rotate(34deg);\n  -ms-transform: rotate(34deg);\n  -o-transform: rotate(34deg);\n  transform: rotate(34deg); }\n.wi-wind.from-215-deg {\n  -webkit-transform: rotate(35deg);\n  -moz-transform: rotate(35deg);\n  -ms-transform: rotate(35deg);\n  -o-transform: rotate(35deg);\n  transform: rotate(35deg); }\n.wi-wind.from-216-deg {\n  -webkit-transform: rotate(36deg);\n  -moz-transform: rotate(36deg);\n  -ms-transform: rotate(36deg);\n  -o-transform: rotate(36deg);\n  transform: rotate(36deg); }\n.wi-wind.from-217-deg {\n  -webkit-transform: rotate(37deg);\n  -moz-transform: rotate(37deg);\n  -ms-transform: rotate(37deg);\n  -o-transform: rotate(37deg);\n  transform: rotate(37deg); }\n.wi-wind.from-218-deg {\n  -webkit-transform: rotate(38deg);\n  -moz-transform: rotate(38deg);\n  -ms-transform: rotate(38deg);\n  -o-transform: rotate(38deg);\n  transform: rotate(38deg); }\n.wi-wind.from-219-deg {\n  -webkit-transform: rotate(39deg);\n  -moz-transform: rotate(39deg);\n  -ms-transform: rotate(39deg);\n  -o-transform: rotate(39deg);\n  transform: rotate(39deg); }\n.wi-wind.from-220-deg {\n  -webkit-transform: rotate(40deg);\n  -moz-transform: rotate(40deg);\n  -ms-transform: rotate(40deg);\n  -o-transform: rotate(40deg);\n  transform: rotate(40deg); }\n.wi-wind.from-221-deg {\n  -webkit-transform: rotate(41deg);\n  -moz-transform: rotate(41deg);\n  -ms-transform: rotate(41deg);\n  -o-transform: rotate(41deg);\n  transform: rotate(41deg); }\n.wi-wind.from-222-deg {\n  -webkit-transform: rotate(42deg);\n  -moz-transform: rotate(42deg);\n  -ms-transform: rotate(42deg);\n  -o-transform: rotate(42deg);\n  transform: rotate(42deg); }\n.wi-wind.from-223-deg {\n  -webkit-transform: rotate(43deg);\n  -moz-transform: rotate(43deg);\n  -ms-transform: rotate(43deg);\n  -o-transform: rotate(43deg);\n  transform: rotate(43deg); }\n.wi-wind.from-224-deg {\n  -webkit-transform: rotate(44deg);\n  -moz-transform: rotate(44deg);\n  -ms-transform: rotate(44deg);\n  -o-transform: rotate(44deg);\n  transform: rotate(44deg); }\n.wi-wind.from-225-deg {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n.wi-wind.from-226-deg {\n  -webkit-transform: rotate(46deg);\n  -moz-transform: rotate(46deg);\n  -ms-transform: rotate(46deg);\n  -o-transform: rotate(46deg);\n  transform: rotate(46deg); }\n.wi-wind.from-227-deg {\n  -webkit-transform: rotate(47deg);\n  -moz-transform: rotate(47deg);\n  -ms-transform: rotate(47deg);\n  -o-transform: rotate(47deg);\n  transform: rotate(47deg); }\n.wi-wind.from-228-deg {\n  -webkit-transform: rotate(48deg);\n  -moz-transform: rotate(48deg);\n  -ms-transform: rotate(48deg);\n  -o-transform: rotate(48deg);\n  transform: rotate(48deg); }\n.wi-wind.from-229-deg {\n  -webkit-transform: rotate(49deg);\n  -moz-transform: rotate(49deg);\n  -ms-transform: rotate(49deg);\n  -o-transform: rotate(49deg);\n  transform: rotate(49deg); }\n.wi-wind.from-230-deg {\n  -webkit-transform: rotate(50deg);\n  -moz-transform: rotate(50deg);\n  -ms-transform: rotate(50deg);\n  -o-transform: rotate(50deg);\n  transform: rotate(50deg); }\n.wi-wind.from-231-deg {\n  -webkit-transform: rotate(51deg);\n  -moz-transform: rotate(51deg);\n  -ms-transform: rotate(51deg);\n  -o-transform: rotate(51deg);\n  transform: rotate(51deg); }\n.wi-wind.from-232-deg {\n  -webkit-transform: rotate(52deg);\n  -moz-transform: rotate(52deg);\n  -ms-transform: rotate(52deg);\n  -o-transform: rotate(52deg);\n  transform: rotate(52deg); }\n.wi-wind.from-233-deg {\n  -webkit-transform: rotate(53deg);\n  -moz-transform: rotate(53deg);\n  -ms-transform: rotate(53deg);\n  -o-transform: rotate(53deg);\n  transform: rotate(53deg); }\n.wi-wind.from-234-deg {\n  -webkit-transform: rotate(54deg);\n  -moz-transform: rotate(54deg);\n  -ms-transform: rotate(54deg);\n  -o-transform: rotate(54deg);\n  transform: rotate(54deg); }\n.wi-wind.from-235-deg {\n  -webkit-transform: rotate(55deg);\n  -moz-transform: rotate(55deg);\n  -ms-transform: rotate(55deg);\n  -o-transform: rotate(55deg);\n  transform: rotate(55deg); }\n.wi-wind.from-236-deg {\n  -webkit-transform: rotate(56deg);\n  -moz-transform: rotate(56deg);\n  -ms-transform: rotate(56deg);\n  -o-transform: rotate(56deg);\n  transform: rotate(56deg); }\n.wi-wind.from-237-deg {\n  -webkit-transform: rotate(57deg);\n  -moz-transform: rotate(57deg);\n  -ms-transform: rotate(57deg);\n  -o-transform: rotate(57deg);\n  transform: rotate(57deg); }\n.wi-wind.from-238-deg {\n  -webkit-transform: rotate(58deg);\n  -moz-transform: rotate(58deg);\n  -ms-transform: rotate(58deg);\n  -o-transform: rotate(58deg);\n  transform: rotate(58deg); }\n.wi-wind.from-239-deg {\n  -webkit-transform: rotate(59deg);\n  -moz-transform: rotate(59deg);\n  -ms-transform: rotate(59deg);\n  -o-transform: rotate(59deg);\n  transform: rotate(59deg); }\n.wi-wind.from-240-deg {\n  -webkit-transform: rotate(60deg);\n  -moz-transform: rotate(60deg);\n  -ms-transform: rotate(60deg);\n  -o-transform: rotate(60deg);\n  transform: rotate(60deg); }\n.wi-wind.from-241-deg {\n  -webkit-transform: rotate(61deg);\n  -moz-transform: rotate(61deg);\n  -ms-transform: rotate(61deg);\n  -o-transform: rotate(61deg);\n  transform: rotate(61deg); }\n.wi-wind.from-242-deg {\n  -webkit-transform: rotate(62deg);\n  -moz-transform: rotate(62deg);\n  -ms-transform: rotate(62deg);\n  -o-transform: rotate(62deg);\n  transform: rotate(62deg); }\n.wi-wind.from-243-deg {\n  -webkit-transform: rotate(63deg);\n  -moz-transform: rotate(63deg);\n  -ms-transform: rotate(63deg);\n  -o-transform: rotate(63deg);\n  transform: rotate(63deg); }\n.wi-wind.from-244-deg {\n  -webkit-transform: rotate(64deg);\n  -moz-transform: rotate(64deg);\n  -ms-transform: rotate(64deg);\n  -o-transform: rotate(64deg);\n  transform: rotate(64deg); }\n.wi-wind.from-245-deg {\n  -webkit-transform: rotate(65deg);\n  -moz-transform: rotate(65deg);\n  -ms-transform: rotate(65deg);\n  -o-transform: rotate(65deg);\n  transform: rotate(65deg); }\n.wi-wind.from-246-deg {\n  -webkit-transform: rotate(66deg);\n  -moz-transform: rotate(66deg);\n  -ms-transform: rotate(66deg);\n  -o-transform: rotate(66deg);\n  transform: rotate(66deg); }\n.wi-wind.from-247-deg {\n  -webkit-transform: rotate(67deg);\n  -moz-transform: rotate(67deg);\n  -ms-transform: rotate(67deg);\n  -o-transform: rotate(67deg);\n  transform: rotate(67deg); }\n.wi-wind.from-248-deg {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n.wi-wind.from-249-deg {\n  -webkit-transform: rotate(69deg);\n  -moz-transform: rotate(69deg);\n  -ms-transform: rotate(69deg);\n  -o-transform: rotate(69deg);\n  transform: rotate(69deg); }\n.wi-wind.from-250-deg {\n  -webkit-transform: rotate(70deg);\n  -moz-transform: rotate(70deg);\n  -ms-transform: rotate(70deg);\n  -o-transform: rotate(70deg);\n  transform: rotate(70deg); }\n.wi-wind.from-251-deg {\n  -webkit-transform: rotate(71deg);\n  -moz-transform: rotate(71deg);\n  -ms-transform: rotate(71deg);\n  -o-transform: rotate(71deg);\n  transform: rotate(71deg); }\n.wi-wind.from-252-deg {\n  -webkit-transform: rotate(72deg);\n  -moz-transform: rotate(72deg);\n  -ms-transform: rotate(72deg);\n  -o-transform: rotate(72deg);\n  transform: rotate(72deg); }\n.wi-wind.from-253-deg {\n  -webkit-transform: rotate(73deg);\n  -moz-transform: rotate(73deg);\n  -ms-transform: rotate(73deg);\n  -o-transform: rotate(73deg);\n  transform: rotate(73deg); }\n.wi-wind.from-254-deg {\n  -webkit-transform: rotate(74deg);\n  -moz-transform: rotate(74deg);\n  -ms-transform: rotate(74deg);\n  -o-transform: rotate(74deg);\n  transform: rotate(74deg); }\n.wi-wind.from-255-deg {\n  -webkit-transform: rotate(75deg);\n  -moz-transform: rotate(75deg);\n  -ms-transform: rotate(75deg);\n  -o-transform: rotate(75deg);\n  transform: rotate(75deg); }\n.wi-wind.from-256-deg {\n  -webkit-transform: rotate(76deg);\n  -moz-transform: rotate(76deg);\n  -ms-transform: rotate(76deg);\n  -o-transform: rotate(76deg);\n  transform: rotate(76deg); }\n.wi-wind.from-257-deg {\n  -webkit-transform: rotate(77deg);\n  -moz-transform: rotate(77deg);\n  -ms-transform: rotate(77deg);\n  -o-transform: rotate(77deg);\n  transform: rotate(77deg); }\n.wi-wind.from-258-deg {\n  -webkit-transform: rotate(78deg);\n  -moz-transform: rotate(78deg);\n  -ms-transform: rotate(78deg);\n  -o-transform: rotate(78deg);\n  transform: rotate(78deg); }\n.wi-wind.from-259-deg {\n  -webkit-transform: rotate(79deg);\n  -moz-transform: rotate(79deg);\n  -ms-transform: rotate(79deg);\n  -o-transform: rotate(79deg);\n  transform: rotate(79deg); }\n.wi-wind.from-260-deg {\n  -webkit-transform: rotate(80deg);\n  -moz-transform: rotate(80deg);\n  -ms-transform: rotate(80deg);\n  -o-transform: rotate(80deg);\n  transform: rotate(80deg); }\n.wi-wind.from-261-deg {\n  -webkit-transform: rotate(81deg);\n  -moz-transform: rotate(81deg);\n  -ms-transform: rotate(81deg);\n  -o-transform: rotate(81deg);\n  transform: rotate(81deg); }\n.wi-wind.from-262-deg {\n  -webkit-transform: rotate(82deg);\n  -moz-transform: rotate(82deg);\n  -ms-transform: rotate(82deg);\n  -o-transform: rotate(82deg);\n  transform: rotate(82deg); }\n.wi-wind.from-263-deg {\n  -webkit-transform: rotate(83deg);\n  -moz-transform: rotate(83deg);\n  -ms-transform: rotate(83deg);\n  -o-transform: rotate(83deg);\n  transform: rotate(83deg); }\n.wi-wind.from-264-deg {\n  -webkit-transform: rotate(84deg);\n  -moz-transform: rotate(84deg);\n  -ms-transform: rotate(84deg);\n  -o-transform: rotate(84deg);\n  transform: rotate(84deg); }\n.wi-wind.from-265-deg {\n  -webkit-transform: rotate(85deg);\n  -moz-transform: rotate(85deg);\n  -ms-transform: rotate(85deg);\n  -o-transform: rotate(85deg);\n  transform: rotate(85deg); }\n.wi-wind.from-266-deg {\n  -webkit-transform: rotate(86deg);\n  -moz-transform: rotate(86deg);\n  -ms-transform: rotate(86deg);\n  -o-transform: rotate(86deg);\n  transform: rotate(86deg); }\n.wi-wind.from-267-deg {\n  -webkit-transform: rotate(87deg);\n  -moz-transform: rotate(87deg);\n  -ms-transform: rotate(87deg);\n  -o-transform: rotate(87deg);\n  transform: rotate(87deg); }\n.wi-wind.from-268-deg {\n  -webkit-transform: rotate(88deg);\n  -moz-transform: rotate(88deg);\n  -ms-transform: rotate(88deg);\n  -o-transform: rotate(88deg);\n  transform: rotate(88deg); }\n.wi-wind.from-269-deg {\n  -webkit-transform: rotate(89deg);\n  -moz-transform: rotate(89deg);\n  -ms-transform: rotate(89deg);\n  -o-transform: rotate(89deg);\n  transform: rotate(89deg); }\n.wi-wind.from-270-deg {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n.wi-wind.from-271-deg {\n  -webkit-transform: rotate(91deg);\n  -moz-transform: rotate(91deg);\n  -ms-transform: rotate(91deg);\n  -o-transform: rotate(91deg);\n  transform: rotate(91deg); }\n.wi-wind.from-272-deg {\n  -webkit-transform: rotate(92deg);\n  -moz-transform: rotate(92deg);\n  -ms-transform: rotate(92deg);\n  -o-transform: rotate(92deg);\n  transform: rotate(92deg); }\n.wi-wind.from-273-deg {\n  -webkit-transform: rotate(93deg);\n  -moz-transform: rotate(93deg);\n  -ms-transform: rotate(93deg);\n  -o-transform: rotate(93deg);\n  transform: rotate(93deg); }\n.wi-wind.from-274-deg {\n  -webkit-transform: rotate(94deg);\n  -moz-transform: rotate(94deg);\n  -ms-transform: rotate(94deg);\n  -o-transform: rotate(94deg);\n  transform: rotate(94deg); }\n.wi-wind.from-275-deg {\n  -webkit-transform: rotate(95deg);\n  -moz-transform: rotate(95deg);\n  -ms-transform: rotate(95deg);\n  -o-transform: rotate(95deg);\n  transform: rotate(95deg); }\n.wi-wind.from-276-deg {\n  -webkit-transform: rotate(96deg);\n  -moz-transform: rotate(96deg);\n  -ms-transform: rotate(96deg);\n  -o-transform: rotate(96deg);\n  transform: rotate(96deg); }\n.wi-wind.from-277-deg {\n  -webkit-transform: rotate(97deg);\n  -moz-transform: rotate(97deg);\n  -ms-transform: rotate(97deg);\n  -o-transform: rotate(97deg);\n  transform: rotate(97deg); }\n.wi-wind.from-278-deg {\n  -webkit-transform: rotate(98deg);\n  -moz-transform: rotate(98deg);\n  -ms-transform: rotate(98deg);\n  -o-transform: rotate(98deg);\n  transform: rotate(98deg); }\n.wi-wind.from-279-deg {\n  -webkit-transform: rotate(99deg);\n  -moz-transform: rotate(99deg);\n  -ms-transform: rotate(99deg);\n  -o-transform: rotate(99deg);\n  transform: rotate(99deg); }\n.wi-wind.from-280-deg {\n  -webkit-transform: rotate(100deg);\n  -moz-transform: rotate(100deg);\n  -ms-transform: rotate(100deg);\n  -o-transform: rotate(100deg);\n  transform: rotate(100deg); }\n.wi-wind.from-281-deg {\n  -webkit-transform: rotate(101deg);\n  -moz-transform: rotate(101deg);\n  -ms-transform: rotate(101deg);\n  -o-transform: rotate(101deg);\n  transform: rotate(101deg); }\n.wi-wind.from-282-deg {\n  -webkit-transform: rotate(102deg);\n  -moz-transform: rotate(102deg);\n  -ms-transform: rotate(102deg);\n  -o-transform: rotate(102deg);\n  transform: rotate(102deg); }\n.wi-wind.from-283-deg {\n  -webkit-transform: rotate(103deg);\n  -moz-transform: rotate(103deg);\n  -ms-transform: rotate(103deg);\n  -o-transform: rotate(103deg);\n  transform: rotate(103deg); }\n.wi-wind.from-284-deg {\n  -webkit-transform: rotate(104deg);\n  -moz-transform: rotate(104deg);\n  -ms-transform: rotate(104deg);\n  -o-transform: rotate(104deg);\n  transform: rotate(104deg); }\n.wi-wind.from-285-deg {\n  -webkit-transform: rotate(105deg);\n  -moz-transform: rotate(105deg);\n  -ms-transform: rotate(105deg);\n  -o-transform: rotate(105deg);\n  transform: rotate(105deg); }\n.wi-wind.from-286-deg {\n  -webkit-transform: rotate(106deg);\n  -moz-transform: rotate(106deg);\n  -ms-transform: rotate(106deg);\n  -o-transform: rotate(106deg);\n  transform: rotate(106deg); }\n.wi-wind.from-287-deg {\n  -webkit-transform: rotate(107deg);\n  -moz-transform: rotate(107deg);\n  -ms-transform: rotate(107deg);\n  -o-transform: rotate(107deg);\n  transform: rotate(107deg); }\n.wi-wind.from-288-deg {\n  -webkit-transform: rotate(108deg);\n  -moz-transform: rotate(108deg);\n  -ms-transform: rotate(108deg);\n  -o-transform: rotate(108deg);\n  transform: rotate(108deg); }\n.wi-wind.from-289-deg {\n  -webkit-transform: rotate(109deg);\n  -moz-transform: rotate(109deg);\n  -ms-transform: rotate(109deg);\n  -o-transform: rotate(109deg);\n  transform: rotate(109deg); }\n.wi-wind.from-290-deg {\n  -webkit-transform: rotate(110deg);\n  -moz-transform: rotate(110deg);\n  -ms-transform: rotate(110deg);\n  -o-transform: rotate(110deg);\n  transform: rotate(110deg); }\n.wi-wind.from-291-deg {\n  -webkit-transform: rotate(111deg);\n  -moz-transform: rotate(111deg);\n  -ms-transform: rotate(111deg);\n  -o-transform: rotate(111deg);\n  transform: rotate(111deg); }\n.wi-wind.from-292-deg {\n  -webkit-transform: rotate(112deg);\n  -moz-transform: rotate(112deg);\n  -ms-transform: rotate(112deg);\n  -o-transform: rotate(112deg);\n  transform: rotate(112deg); }\n.wi-wind.from-293-deg {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n.wi-wind.from-294-deg {\n  -webkit-transform: rotate(114deg);\n  -moz-transform: rotate(114deg);\n  -ms-transform: rotate(114deg);\n  -o-transform: rotate(114deg);\n  transform: rotate(114deg); }\n.wi-wind.from-295-deg {\n  -webkit-transform: rotate(115deg);\n  -moz-transform: rotate(115deg);\n  -ms-transform: rotate(115deg);\n  -o-transform: rotate(115deg);\n  transform: rotate(115deg); }\n.wi-wind.from-296-deg {\n  -webkit-transform: rotate(116deg);\n  -moz-transform: rotate(116deg);\n  -ms-transform: rotate(116deg);\n  -o-transform: rotate(116deg);\n  transform: rotate(116deg); }\n.wi-wind.from-297-deg {\n  -webkit-transform: rotate(117deg);\n  -moz-transform: rotate(117deg);\n  -ms-transform: rotate(117deg);\n  -o-transform: rotate(117deg);\n  transform: rotate(117deg); }\n.wi-wind.from-298-deg {\n  -webkit-transform: rotate(118deg);\n  -moz-transform: rotate(118deg);\n  -ms-transform: rotate(118deg);\n  -o-transform: rotate(118deg);\n  transform: rotate(118deg); }\n.wi-wind.from-299-deg {\n  -webkit-transform: rotate(119deg);\n  -moz-transform: rotate(119deg);\n  -ms-transform: rotate(119deg);\n  -o-transform: rotate(119deg);\n  transform: rotate(119deg); }\n.wi-wind.from-300-deg {\n  -webkit-transform: rotate(120deg);\n  -moz-transform: rotate(120deg);\n  -ms-transform: rotate(120deg);\n  -o-transform: rotate(120deg);\n  transform: rotate(120deg); }\n.wi-wind.from-301-deg {\n  -webkit-transform: rotate(121deg);\n  -moz-transform: rotate(121deg);\n  -ms-transform: rotate(121deg);\n  -o-transform: rotate(121deg);\n  transform: rotate(121deg); }\n.wi-wind.from-302-deg {\n  -webkit-transform: rotate(122deg);\n  -moz-transform: rotate(122deg);\n  -ms-transform: rotate(122deg);\n  -o-transform: rotate(122deg);\n  transform: rotate(122deg); }\n.wi-wind.from-303-deg {\n  -webkit-transform: rotate(123deg);\n  -moz-transform: rotate(123deg);\n  -ms-transform: rotate(123deg);\n  -o-transform: rotate(123deg);\n  transform: rotate(123deg); }\n.wi-wind.from-304-deg {\n  -webkit-transform: rotate(124deg);\n  -moz-transform: rotate(124deg);\n  -ms-transform: rotate(124deg);\n  -o-transform: rotate(124deg);\n  transform: rotate(124deg); }\n.wi-wind.from-305-deg {\n  -webkit-transform: rotate(125deg);\n  -moz-transform: rotate(125deg);\n  -ms-transform: rotate(125deg);\n  -o-transform: rotate(125deg);\n  transform: rotate(125deg); }\n.wi-wind.from-306-deg {\n  -webkit-transform: rotate(126deg);\n  -moz-transform: rotate(126deg);\n  -ms-transform: rotate(126deg);\n  -o-transform: rotate(126deg);\n  transform: rotate(126deg); }\n.wi-wind.from-307-deg {\n  -webkit-transform: rotate(127deg);\n  -moz-transform: rotate(127deg);\n  -ms-transform: rotate(127deg);\n  -o-transform: rotate(127deg);\n  transform: rotate(127deg); }\n.wi-wind.from-308-deg {\n  -webkit-transform: rotate(128deg);\n  -moz-transform: rotate(128deg);\n  -ms-transform: rotate(128deg);\n  -o-transform: rotate(128deg);\n  transform: rotate(128deg); }\n.wi-wind.from-309-deg {\n  -webkit-transform: rotate(129deg);\n  -moz-transform: rotate(129deg);\n  -ms-transform: rotate(129deg);\n  -o-transform: rotate(129deg);\n  transform: rotate(129deg); }\n.wi-wind.from-310-deg {\n  -webkit-transform: rotate(130deg);\n  -moz-transform: rotate(130deg);\n  -ms-transform: rotate(130deg);\n  -o-transform: rotate(130deg);\n  transform: rotate(130deg); }\n.wi-wind.from-311-deg {\n  -webkit-transform: rotate(131deg);\n  -moz-transform: rotate(131deg);\n  -ms-transform: rotate(131deg);\n  -o-transform: rotate(131deg);\n  transform: rotate(131deg); }\n.wi-wind.from-312-deg {\n  -webkit-transform: rotate(132deg);\n  -moz-transform: rotate(132deg);\n  -ms-transform: rotate(132deg);\n  -o-transform: rotate(132deg);\n  transform: rotate(132deg); }\n.wi-wind.from-313-deg {\n  -webkit-transform: rotate(133deg);\n  -moz-transform: rotate(133deg);\n  -ms-transform: rotate(133deg);\n  -o-transform: rotate(133deg);\n  transform: rotate(133deg); }\n.wi-wind.from-314-deg {\n  -webkit-transform: rotate(134deg);\n  -moz-transform: rotate(134deg);\n  -ms-transform: rotate(134deg);\n  -o-transform: rotate(134deg);\n  transform: rotate(134deg); }\n.wi-wind.from-315-deg {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n.wi-wind.from-316-deg {\n  -webkit-transform: rotate(136deg);\n  -moz-transform: rotate(136deg);\n  -ms-transform: rotate(136deg);\n  -o-transform: rotate(136deg);\n  transform: rotate(136deg); }\n.wi-wind.from-317-deg {\n  -webkit-transform: rotate(137deg);\n  -moz-transform: rotate(137deg);\n  -ms-transform: rotate(137deg);\n  -o-transform: rotate(137deg);\n  transform: rotate(137deg); }\n.wi-wind.from-318-deg {\n  -webkit-transform: rotate(138deg);\n  -moz-transform: rotate(138deg);\n  -ms-transform: rotate(138deg);\n  -o-transform: rotate(138deg);\n  transform: rotate(138deg); }\n.wi-wind.from-319-deg {\n  -webkit-transform: rotate(139deg);\n  -moz-transform: rotate(139deg);\n  -ms-transform: rotate(139deg);\n  -o-transform: rotate(139deg);\n  transform: rotate(139deg); }\n.wi-wind.from-320-deg {\n  -webkit-transform: rotate(140deg);\n  -moz-transform: rotate(140deg);\n  -ms-transform: rotate(140deg);\n  -o-transform: rotate(140deg);\n  transform: rotate(140deg); }\n.wi-wind.from-321-deg {\n  -webkit-transform: rotate(141deg);\n  -moz-transform: rotate(141deg);\n  -ms-transform: rotate(141deg);\n  -o-transform: rotate(141deg);\n  transform: rotate(141deg); }\n.wi-wind.from-322-deg {\n  -webkit-transform: rotate(142deg);\n  -moz-transform: rotate(142deg);\n  -ms-transform: rotate(142deg);\n  -o-transform: rotate(142deg);\n  transform: rotate(142deg); }\n.wi-wind.from-323-deg {\n  -webkit-transform: rotate(143deg);\n  -moz-transform: rotate(143deg);\n  -ms-transform: rotate(143deg);\n  -o-transform: rotate(143deg);\n  transform: rotate(143deg); }\n.wi-wind.from-324-deg {\n  -webkit-transform: rotate(144deg);\n  -moz-transform: rotate(144deg);\n  -ms-transform: rotate(144deg);\n  -o-transform: rotate(144deg);\n  transform: rotate(144deg); }\n.wi-wind.from-325-deg {\n  -webkit-transform: rotate(145deg);\n  -moz-transform: rotate(145deg);\n  -ms-transform: rotate(145deg);\n  -o-transform: rotate(145deg);\n  transform: rotate(145deg); }\n.wi-wind.from-326-deg {\n  -webkit-transform: rotate(146deg);\n  -moz-transform: rotate(146deg);\n  -ms-transform: rotate(146deg);\n  -o-transform: rotate(146deg);\n  transform: rotate(146deg); }\n.wi-wind.from-327-deg {\n  -webkit-transform: rotate(147deg);\n  -moz-transform: rotate(147deg);\n  -ms-transform: rotate(147deg);\n  -o-transform: rotate(147deg);\n  transform: rotate(147deg); }\n.wi-wind.from-328-deg {\n  -webkit-transform: rotate(148deg);\n  -moz-transform: rotate(148deg);\n  -ms-transform: rotate(148deg);\n  -o-transform: rotate(148deg);\n  transform: rotate(148deg); }\n.wi-wind.from-329-deg {\n  -webkit-transform: rotate(149deg);\n  -moz-transform: rotate(149deg);\n  -ms-transform: rotate(149deg);\n  -o-transform: rotate(149deg);\n  transform: rotate(149deg); }\n.wi-wind.from-330-deg {\n  -webkit-transform: rotate(150deg);\n  -moz-transform: rotate(150deg);\n  -ms-transform: rotate(150deg);\n  -o-transform: rotate(150deg);\n  transform: rotate(150deg); }\n.wi-wind.from-331-deg {\n  -webkit-transform: rotate(151deg);\n  -moz-transform: rotate(151deg);\n  -ms-transform: rotate(151deg);\n  -o-transform: rotate(151deg);\n  transform: rotate(151deg); }\n.wi-wind.from-332-deg {\n  -webkit-transform: rotate(152deg);\n  -moz-transform: rotate(152deg);\n  -ms-transform: rotate(152deg);\n  -o-transform: rotate(152deg);\n  transform: rotate(152deg); }\n.wi-wind.from-333-deg {\n  -webkit-transform: rotate(153deg);\n  -moz-transform: rotate(153deg);\n  -ms-transform: rotate(153deg);\n  -o-transform: rotate(153deg);\n  transform: rotate(153deg); }\n.wi-wind.from-334-deg {\n  -webkit-transform: rotate(154deg);\n  -moz-transform: rotate(154deg);\n  -ms-transform: rotate(154deg);\n  -o-transform: rotate(154deg);\n  transform: rotate(154deg); }\n.wi-wind.from-335-deg {\n  -webkit-transform: rotate(155deg);\n  -moz-transform: rotate(155deg);\n  -ms-transform: rotate(155deg);\n  -o-transform: rotate(155deg);\n  transform: rotate(155deg); }\n.wi-wind.from-336-deg {\n  -webkit-transform: rotate(156deg);\n  -moz-transform: rotate(156deg);\n  -ms-transform: rotate(156deg);\n  -o-transform: rotate(156deg);\n  transform: rotate(156deg); }\n.wi-wind.from-337-deg {\n  -webkit-transform: rotate(157deg);\n  -moz-transform: rotate(157deg);\n  -ms-transform: rotate(157deg);\n  -o-transform: rotate(157deg);\n  transform: rotate(157deg); }\n.wi-wind.from-338-deg {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n.wi-wind.from-339-deg {\n  -webkit-transform: rotate(159deg);\n  -moz-transform: rotate(159deg);\n  -ms-transform: rotate(159deg);\n  -o-transform: rotate(159deg);\n  transform: rotate(159deg); }\n.wi-wind.from-340-deg {\n  -webkit-transform: rotate(160deg);\n  -moz-transform: rotate(160deg);\n  -ms-transform: rotate(160deg);\n  -o-transform: rotate(160deg);\n  transform: rotate(160deg); }\n.wi-wind.from-341-deg {\n  -webkit-transform: rotate(161deg);\n  -moz-transform: rotate(161deg);\n  -ms-transform: rotate(161deg);\n  -o-transform: rotate(161deg);\n  transform: rotate(161deg); }\n.wi-wind.from-342-deg {\n  -webkit-transform: rotate(162deg);\n  -moz-transform: rotate(162deg);\n  -ms-transform: rotate(162deg);\n  -o-transform: rotate(162deg);\n  transform: rotate(162deg); }\n.wi-wind.from-343-deg {\n  -webkit-transform: rotate(163deg);\n  -moz-transform: rotate(163deg);\n  -ms-transform: rotate(163deg);\n  -o-transform: rotate(163deg);\n  transform: rotate(163deg); }\n.wi-wind.from-344-deg {\n  -webkit-transform: rotate(164deg);\n  -moz-transform: rotate(164deg);\n  -ms-transform: rotate(164deg);\n  -o-transform: rotate(164deg);\n  transform: rotate(164deg); }\n.wi-wind.from-345-deg {\n  -webkit-transform: rotate(165deg);\n  -moz-transform: rotate(165deg);\n  -ms-transform: rotate(165deg);\n  -o-transform: rotate(165deg);\n  transform: rotate(165deg); }\n.wi-wind.from-346-deg {\n  -webkit-transform: rotate(166deg);\n  -moz-transform: rotate(166deg);\n  -ms-transform: rotate(166deg);\n  -o-transform: rotate(166deg);\n  transform: rotate(166deg); }\n.wi-wind.from-347-deg {\n  -webkit-transform: rotate(167deg);\n  -moz-transform: rotate(167deg);\n  -ms-transform: rotate(167deg);\n  -o-transform: rotate(167deg);\n  transform: rotate(167deg); }\n.wi-wind.from-348-deg {\n  -webkit-transform: rotate(168deg);\n  -moz-transform: rotate(168deg);\n  -ms-transform: rotate(168deg);\n  -o-transform: rotate(168deg);\n  transform: rotate(168deg); }\n.wi-wind.from-349-deg {\n  -webkit-transform: rotate(169deg);\n  -moz-transform: rotate(169deg);\n  -ms-transform: rotate(169deg);\n  -o-transform: rotate(169deg);\n  transform: rotate(169deg); }\n.wi-wind.from-350-deg {\n  -webkit-transform: rotate(170deg);\n  -moz-transform: rotate(170deg);\n  -ms-transform: rotate(170deg);\n  -o-transform: rotate(170deg);\n  transform: rotate(170deg); }\n.wi-wind.from-351-deg {\n  -webkit-transform: rotate(171deg);\n  -moz-transform: rotate(171deg);\n  -ms-transform: rotate(171deg);\n  -o-transform: rotate(171deg);\n  transform: rotate(171deg); }\n.wi-wind.from-352-deg {\n  -webkit-transform: rotate(172deg);\n  -moz-transform: rotate(172deg);\n  -ms-transform: rotate(172deg);\n  -o-transform: rotate(172deg);\n  transform: rotate(172deg); }\n.wi-wind.from-353-deg {\n  -webkit-transform: rotate(173deg);\n  -moz-transform: rotate(173deg);\n  -ms-transform: rotate(173deg);\n  -o-transform: rotate(173deg);\n  transform: rotate(173deg); }\n.wi-wind.from-354-deg {\n  -webkit-transform: rotate(174deg);\n  -moz-transform: rotate(174deg);\n  -ms-transform: rotate(174deg);\n  -o-transform: rotate(174deg);\n  transform: rotate(174deg); }\n.wi-wind.from-355-deg {\n  -webkit-transform: rotate(175deg);\n  -moz-transform: rotate(175deg);\n  -ms-transform: rotate(175deg);\n  -o-transform: rotate(175deg);\n  transform: rotate(175deg); }\n.wi-wind.from-356-deg {\n  -webkit-transform: rotate(176deg);\n  -moz-transform: rotate(176deg);\n  -ms-transform: rotate(176deg);\n  -o-transform: rotate(176deg);\n  transform: rotate(176deg); }\n.wi-wind.from-357-deg {\n  -webkit-transform: rotate(177deg);\n  -moz-transform: rotate(177deg);\n  -ms-transform: rotate(177deg);\n  -o-transform: rotate(177deg);\n  transform: rotate(177deg); }\n.wi-wind.from-358-deg {\n  -webkit-transform: rotate(178deg);\n  -moz-transform: rotate(178deg);\n  -ms-transform: rotate(178deg);\n  -o-transform: rotate(178deg);\n  transform: rotate(178deg); }\n.wi-wind.from-359-deg {\n  -webkit-transform: rotate(179deg);\n  -moz-transform: rotate(179deg);\n  -ms-transform: rotate(179deg);\n  -o-transform: rotate(179deg);\n  transform: rotate(179deg); }\n.wi-wind.from-360-deg {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-wind-towards-n {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n\n.wi-wind-towards-nne {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n\n.wi-wind-towards-ne {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.wi-wind-towards-ene {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n\n.wi-wind-towards-e {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.wi-wind-towards-ese {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n\n.wi-wind-towards-se {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n\n.wi-wind-towards-sse {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n\n.wi-wind-towards-s {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-wind-towards-ssw {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n\n.wi-wind-towards-sw {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n\n.wi-wind-towards-wsw {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n\n.wi-wind-towards-w {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.wi-wind-towards-wnw {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n\n.wi-wind-towards-nw {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n\n.wi-wind-towards-nnw {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n\n.wi-wind-from-n {\n  -webkit-transform: rotate(0deg);\n  -moz-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  -o-transform: rotate(0deg);\n  transform: rotate(0deg); }\n\n.wi-wind-from-nne {\n  -webkit-transform: rotate(23deg);\n  -moz-transform: rotate(23deg);\n  -ms-transform: rotate(23deg);\n  -o-transform: rotate(23deg);\n  transform: rotate(23deg); }\n\n.wi-wind-from-ne {\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.wi-wind-from-ene {\n  -webkit-transform: rotate(68deg);\n  -moz-transform: rotate(68deg);\n  -ms-transform: rotate(68deg);\n  -o-transform: rotate(68deg);\n  transform: rotate(68deg); }\n\n.wi-wind-from-e {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.wi-wind-from-ese {\n  -webkit-transform: rotate(113deg);\n  -moz-transform: rotate(113deg);\n  -ms-transform: rotate(113deg);\n  -o-transform: rotate(113deg);\n  transform: rotate(113deg); }\n\n.wi-wind-from-se {\n  -webkit-transform: rotate(135deg);\n  -moz-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  -o-transform: rotate(135deg);\n  transform: rotate(135deg); }\n\n.wi-wind-from-sse {\n  -webkit-transform: rotate(158deg);\n  -moz-transform: rotate(158deg);\n  -ms-transform: rotate(158deg);\n  -o-transform: rotate(158deg);\n  transform: rotate(158deg); }\n\n.wi-wind-from-s {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-wind-from-ssw {\n  -webkit-transform: rotate(203deg);\n  -moz-transform: rotate(203deg);\n  -ms-transform: rotate(203deg);\n  -o-transform: rotate(203deg);\n  transform: rotate(203deg); }\n\n.wi-wind-from-sw {\n  -webkit-transform: rotate(225deg);\n  -moz-transform: rotate(225deg);\n  -ms-transform: rotate(225deg);\n  -o-transform: rotate(225deg);\n  transform: rotate(225deg); }\n\n.wi-wind-from-wsw {\n  -webkit-transform: rotate(248deg);\n  -moz-transform: rotate(248deg);\n  -ms-transform: rotate(248deg);\n  -o-transform: rotate(248deg);\n  transform: rotate(248deg); }\n\n.wi-wind-from-w {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.wi-wind-from-wnw {\n  -webkit-transform: rotate(293deg);\n  -moz-transform: rotate(293deg);\n  -ms-transform: rotate(293deg);\n  -o-transform: rotate(293deg);\n  transform: rotate(293deg); }\n\n.wi-wind-from-nw {\n  -webkit-transform: rotate(313deg);\n  -moz-transform: rotate(313deg);\n  -ms-transform: rotate(313deg);\n  -o-transform: rotate(313deg);\n  transform: rotate(313deg); }\n\n.wi-wind-from-nnw {\n  -webkit-transform: rotate(336deg);\n  -moz-transform: rotate(336deg);\n  -ms-transform: rotate(336deg);\n  -o-transform: rotate(336deg);\n  transform: rotate(336deg); }\n\n/*# sourceMappingURL=weather-icons-wind.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/css/weather-icons.css",
    "content": "@charset \"UTF-8\";\n/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, LESS and SCSS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n@font-face {\n  font-family: \"weathericons\";\n  src: url(\"../fonts/weathericons-regular-webfont.eot\");\n  src: url(\"../fonts/weathericons-regular-webfont.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/weathericons-regular-webfont.woff2\") format(\"woff2\"), url(\"../fonts/weathericons-regular-webfont.woff\") format(\"woff\"), url(\"../fonts/weathericons-regular-webfont.ttf\") format(\"truetype\"), url(\"../fonts/weathericons-regular-webfont.svg#weather_iconsregular\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n.wi {\n  display: inline-block;\n  font-family: \"weathericons\";\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.wi-fw {\n  width: 1.4em;\n  text-align: center; }\n\n.wi-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg); }\n\n.wi-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\n.wi-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg); }\n\n.wi-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1); }\n\n.wi-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1); }\n\n.wi-day-sunny:before {\n  content: \"\"; }\n\n.wi-day-cloudy:before {\n  content: \"\"; }\n\n.wi-day-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-day-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-day-fog:before {\n  content: \"\"; }\n\n.wi-day-hail:before {\n  content: \"\"; }\n\n.wi-day-haze:before {\n  content: \"\"; }\n\n.wi-day-lightning:before {\n  content: \"\"; }\n\n.wi-day-rain:before {\n  content: \"\"; }\n\n.wi-day-rain-mix:before {\n  content: \"\"; }\n\n.wi-day-rain-wind:before {\n  content: \"\"; }\n\n.wi-day-showers:before {\n  content: \"\"; }\n\n.wi-day-sleet:before {\n  content: \"\"; }\n\n.wi-day-sleet-storm:before {\n  content: \"\"; }\n\n.wi-day-snow:before {\n  content: \"\"; }\n\n.wi-day-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-day-snow-wind:before {\n  content: \"\"; }\n\n.wi-day-sprinkle:before {\n  content: \"\"; }\n\n.wi-day-storm-showers:before {\n  content: \"\"; }\n\n.wi-day-sunny-overcast:before {\n  content: \"\"; }\n\n.wi-day-thunderstorm:before {\n  content: \"\"; }\n\n.wi-day-windy:before {\n  content: \"\"; }\n\n.wi-solar-eclipse:before {\n  content: \"\"; }\n\n.wi-hot:before {\n  content: \"\"; }\n\n.wi-day-cloudy-high:before {\n  content: \"\"; }\n\n.wi-day-light-wind:before {\n  content: \"\"; }\n\n.wi-night-clear:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-night-alt-hail:before {\n  content: \"\"; }\n\n.wi-night-alt-lightning:before {\n  content: \"\"; }\n\n.wi-night-alt-rain:before {\n  content: \"\"; }\n\n.wi-night-alt-rain-mix:before {\n  content: \"\"; }\n\n.wi-night-alt-rain-wind:before {\n  content: \"\"; }\n\n.wi-night-alt-showers:before {\n  content: \"\"; }\n\n.wi-night-alt-sleet:before {\n  content: \"\"; }\n\n.wi-night-alt-sleet-storm:before {\n  content: \"\"; }\n\n.wi-night-alt-snow:before {\n  content: \"\"; }\n\n.wi-night-alt-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-alt-snow-wind:before {\n  content: \"\"; }\n\n.wi-night-alt-sprinkle:before {\n  content: \"\"; }\n\n.wi-night-alt-storm-showers:before {\n  content: \"\"; }\n\n.wi-night-alt-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-cloudy:before {\n  content: \"\"; }\n\n.wi-night-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-night-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-night-fog:before {\n  content: \"\"; }\n\n.wi-night-hail:before {\n  content: \"\"; }\n\n.wi-night-lightning:before {\n  content: \"\"; }\n\n.wi-night-partly-cloudy:before {\n  content: \"\"; }\n\n.wi-night-rain:before {\n  content: \"\"; }\n\n.wi-night-rain-mix:before {\n  content: \"\"; }\n\n.wi-night-rain-wind:before {\n  content: \"\"; }\n\n.wi-night-showers:before {\n  content: \"\"; }\n\n.wi-night-sleet:before {\n  content: \"\"; }\n\n.wi-night-sleet-storm:before {\n  content: \"\"; }\n\n.wi-night-snow:before {\n  content: \"\"; }\n\n.wi-night-snow-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-snow-wind:before {\n  content: \"\"; }\n\n.wi-night-sprinkle:before {\n  content: \"\"; }\n\n.wi-night-storm-showers:before {\n  content: \"\"; }\n\n.wi-night-thunderstorm:before {\n  content: \"\"; }\n\n.wi-lunar-eclipse:before {\n  content: \"\"; }\n\n.wi-stars:before {\n  content: \"\"; }\n\n.wi-storm-showers:before {\n  content: \"\"; }\n\n.wi-thunderstorm:before {\n  content: \"\"; }\n\n.wi-night-alt-cloudy-high:before {\n  content: \"\"; }\n\n.wi-night-cloudy-high:before {\n  content: \"\"; }\n\n.wi-night-alt-partly-cloudy:before {\n  content: \"\"; }\n\n.wi-cloud:before {\n  content: \"\"; }\n\n.wi-cloudy:before {\n  content: \"\"; }\n\n.wi-cloudy-gusts:before {\n  content: \"\"; }\n\n.wi-cloudy-windy:before {\n  content: \"\"; }\n\n.wi-fog:before {\n  content: \"\"; }\n\n.wi-hail:before {\n  content: \"\"; }\n\n.wi-rain:before {\n  content: \"\"; }\n\n.wi-rain-mix:before {\n  content: \"\"; }\n\n.wi-rain-wind:before {\n  content: \"\"; }\n\n.wi-showers:before {\n  content: \"\"; }\n\n.wi-sleet:before {\n  content: \"\"; }\n\n.wi-snow:before {\n  content: \"\"; }\n\n.wi-sprinkle:before {\n  content: \"\"; }\n\n.wi-storm-showers:before {\n  content: \"\"; }\n\n.wi-thunderstorm:before {\n  content: \"\"; }\n\n.wi-snow-wind:before {\n  content: \"\"; }\n\n.wi-snow:before {\n  content: \"\"; }\n\n.wi-smog:before {\n  content: \"\"; }\n\n.wi-smoke:before {\n  content: \"\"; }\n\n.wi-lightning:before {\n  content: \"\"; }\n\n.wi-raindrops:before {\n  content: \"\"; }\n\n.wi-raindrop:before {\n  content: \"\"; }\n\n.wi-dust:before {\n  content: \"\"; }\n\n.wi-snowflake-cold:before {\n  content: \"\"; }\n\n.wi-windy:before {\n  content: \"\"; }\n\n.wi-strong-wind:before {\n  content: \"\"; }\n\n.wi-sandstorm:before {\n  content: \"\"; }\n\n.wi-earthquake:before {\n  content: \"\"; }\n\n.wi-fire:before {\n  content: \"\"; }\n\n.wi-flood:before {\n  content: \"\"; }\n\n.wi-meteor:before {\n  content: \"\"; }\n\n.wi-tsunami:before {\n  content: \"\"; }\n\n.wi-volcano:before {\n  content: \"\"; }\n\n.wi-hurricane:before {\n  content: \"\"; }\n\n.wi-tornado:before {\n  content: \"\"; }\n\n.wi-small-craft-advisory:before {\n  content: \"\"; }\n\n.wi-gale-warning:before {\n  content: \"\"; }\n\n.wi-storm-warning:before {\n  content: \"\"; }\n\n.wi-hurricane-warning:before {\n  content: \"\"; }\n\n.wi-wind-direction:before {\n  content: \"\"; }\n\n.wi-alien:before {\n  content: \"\"; }\n\n.wi-celsius:before {\n  content: \"\"; }\n\n.wi-fahrenheit:before {\n  content: \"\"; }\n\n.wi-degrees:before {\n  content: \"\"; }\n\n.wi-thermometer:before {\n  content: \"\"; }\n\n.wi-thermometer-exterior:before {\n  content: \"\"; }\n\n.wi-thermometer-internal:before {\n  content: \"\"; }\n\n.wi-cloud-down:before {\n  content: \"\"; }\n\n.wi-cloud-up:before {\n  content: \"\"; }\n\n.wi-cloud-refresh:before {\n  content: \"\"; }\n\n.wi-horizon:before {\n  content: \"\"; }\n\n.wi-horizon-alt:before {\n  content: \"\"; }\n\n.wi-sunrise:before {\n  content: \"\"; }\n\n.wi-sunset:before {\n  content: \"\"; }\n\n.wi-moonrise:before {\n  content: \"\"; }\n\n.wi-moonset:before {\n  content: \"\"; }\n\n.wi-refresh:before {\n  content: \"\"; }\n\n.wi-refresh-alt:before {\n  content: \"\"; }\n\n.wi-umbrella:before {\n  content: \"\"; }\n\n.wi-barometer:before {\n  content: \"\"; }\n\n.wi-humidity:before {\n  content: \"\"; }\n\n.wi-na:before {\n  content: \"\"; }\n\n.wi-train:before {\n  content: \"\"; }\n\n.wi-moon-new:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-1:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-2:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-3:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-4:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-5:before {\n  content: \"\"; }\n\n.wi-moon-waxing-cresent-6:before {\n  content: \"\"; }\n\n.wi-moon-first-quarter:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-waxing-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-full:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-waning-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-third-quarter:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-1:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-2:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-3:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-4:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-5:before {\n  content: \"\"; }\n\n.wi-moon-waning-crescent-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-new:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-cresent-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-first-quarter:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waxing-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-full:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-gibbous-6:before {\n  content: \"\"; }\n\n.wi-moon-alt-third-quarter:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-1:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-2:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-3:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-4:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-5:before {\n  content: \"\"; }\n\n.wi-moon-alt-waning-crescent-6:before {\n  content: \"\"; }\n\n.wi-moon-0:before {\n  content: \"\"; }\n\n.wi-moon-1:before {\n  content: \"\"; }\n\n.wi-moon-2:before {\n  content: \"\"; }\n\n.wi-moon-3:before {\n  content: \"\"; }\n\n.wi-moon-4:before {\n  content: \"\"; }\n\n.wi-moon-5:before {\n  content: \"\"; }\n\n.wi-moon-6:before {\n  content: \"\"; }\n\n.wi-moon-7:before {\n  content: \"\"; }\n\n.wi-moon-8:before {\n  content: \"\"; }\n\n.wi-moon-9:before {\n  content: \"\"; }\n\n.wi-moon-10:before {\n  content: \"\"; }\n\n.wi-moon-11:before {\n  content: \"\"; }\n\n.wi-moon-12:before {\n  content: \"\"; }\n\n.wi-moon-13:before {\n  content: \"\"; }\n\n.wi-moon-14:before {\n  content: \"\"; }\n\n.wi-moon-15:before {\n  content: \"\"; }\n\n.wi-moon-16:before {\n  content: \"\"; }\n\n.wi-moon-17:before {\n  content: \"\"; }\n\n.wi-moon-18:before {\n  content: \"\"; }\n\n.wi-moon-19:before {\n  content: \"\"; }\n\n.wi-moon-20:before {\n  content: \"\"; }\n\n.wi-moon-21:before {\n  content: \"\"; }\n\n.wi-moon-22:before {\n  content: \"\"; }\n\n.wi-moon-23:before {\n  content: \"\"; }\n\n.wi-moon-24:before {\n  content: \"\"; }\n\n.wi-moon-25:before {\n  content: \"\"; }\n\n.wi-moon-26:before {\n  content: \"\"; }\n\n.wi-moon-27:before {\n  content: \"\"; }\n\n.wi-time-1:before {\n  content: \"\"; }\n\n.wi-time-2:before {\n  content: \"\"; }\n\n.wi-time-3:before {\n  content: \"\"; }\n\n.wi-time-4:before {\n  content: \"\"; }\n\n.wi-time-5:before {\n  content: \"\"; }\n\n.wi-time-6:before {\n  content: \"\"; }\n\n.wi-time-7:before {\n  content: \"\"; }\n\n.wi-time-8:before {\n  content: \"\"; }\n\n.wi-time-9:before {\n  content: \"\"; }\n\n.wi-time-10:before {\n  content: \"\"; }\n\n.wi-time-11:before {\n  content: \"\"; }\n\n.wi-time-12:before {\n  content: \"\"; }\n\n.wi-direction-up:before {\n  content: \"\"; }\n\n.wi-direction-up-right:before {\n  content: \"\"; }\n\n.wi-direction-right:before {\n  content: \"\"; }\n\n.wi-direction-down-right:before {\n  content: \"\"; }\n\n.wi-direction-down:before {\n  content: \"\"; }\n\n.wi-direction-down-left:before {\n  content: \"\"; }\n\n.wi-direction-left:before {\n  content: \"\"; }\n\n.wi-direction-up-left:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-0:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-1:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-2:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-3:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-4:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-5:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-6:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-7:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-8:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-9:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-10:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-11:before {\n  content: \"\"; }\n\n.wi-wind-beaufort-12:before {\n  content: \"\"; }\n\n.wi-yahoo-0:before {\n  content: \"\"; }\n\n.wi-yahoo-1:before {\n  content: \"\"; }\n\n.wi-yahoo-2:before {\n  content: \"\"; }\n\n.wi-yahoo-3:before {\n  content: \"\"; }\n\n.wi-yahoo-4:before {\n  content: \"\"; }\n\n.wi-yahoo-5:before {\n  content: \"\"; }\n\n.wi-yahoo-6:before {\n  content: \"\"; }\n\n.wi-yahoo-7:before {\n  content: \"\"; }\n\n.wi-yahoo-8:before {\n  content: \"\"; }\n\n.wi-yahoo-9:before {\n  content: \"\"; }\n\n.wi-yahoo-10:before {\n  content: \"\"; }\n\n.wi-yahoo-11:before {\n  content: \"\"; }\n\n.wi-yahoo-12:before {\n  content: \"\"; }\n\n.wi-yahoo-13:before {\n  content: \"\"; }\n\n.wi-yahoo-14:before {\n  content: \"\"; }\n\n.wi-yahoo-15:before {\n  content: \"\"; }\n\n.wi-yahoo-16:before {\n  content: \"\"; }\n\n.wi-yahoo-17:before {\n  content: \"\"; }\n\n.wi-yahoo-18:before {\n  content: \"\"; }\n\n.wi-yahoo-19:before {\n  content: \"\"; }\n\n.wi-yahoo-20:before {\n  content: \"\"; }\n\n.wi-yahoo-21:before {\n  content: \"\"; }\n\n.wi-yahoo-22:before {\n  content: \"\"; }\n\n.wi-yahoo-23:before {\n  content: \"\"; }\n\n.wi-yahoo-24:before {\n  content: \"\"; }\n\n.wi-yahoo-25:before {\n  content: \"\"; }\n\n.wi-yahoo-26:before {\n  content: \"\"; }\n\n.wi-yahoo-27:before {\n  content: \"\"; }\n\n.wi-yahoo-28:before {\n  content: \"\"; }\n\n.wi-yahoo-29:before {\n  content: \"\"; }\n\n.wi-yahoo-30:before {\n  content: \"\"; }\n\n.wi-yahoo-31:before {\n  content: \"\"; }\n\n.wi-yahoo-32:before {\n  content: \"\"; }\n\n.wi-yahoo-33:before {\n  content: \"\"; }\n\n.wi-yahoo-34:before {\n  content: \"\"; }\n\n.wi-yahoo-35:before {\n  content: \"\"; }\n\n.wi-yahoo-36:before {\n  content: \"\"; }\n\n.wi-yahoo-37:before {\n  content: \"\"; }\n\n.wi-yahoo-38:before {\n  content: \"\"; }\n\n.wi-yahoo-39:before {\n  content: \"\"; }\n\n.wi-yahoo-40:before {\n  content: \"\"; }\n\n.wi-yahoo-41:before {\n  content: \"\"; }\n\n.wi-yahoo-42:before {\n  content: \"\"; }\n\n.wi-yahoo-43:before {\n  content: \"\"; }\n\n.wi-yahoo-44:before {\n  content: \"\"; }\n\n.wi-yahoo-45:before {\n  content: \"\"; }\n\n.wi-yahoo-46:before {\n  content: \"\"; }\n\n.wi-yahoo-47:before {\n  content: \"\"; }\n\n.wi-yahoo-3200:before {\n  content: \"\"; }\n\n.wi-forecast-io-clear-day:before {\n  content: \"\"; }\n\n.wi-forecast-io-clear-night:before {\n  content: \"\"; }\n\n.wi-forecast-io-rain:before {\n  content: \"\"; }\n\n.wi-forecast-io-snow:before {\n  content: \"\"; }\n\n.wi-forecast-io-sleet:before {\n  content: \"\"; }\n\n.wi-forecast-io-wind:before {\n  content: \"\"; }\n\n.wi-forecast-io-fog:before {\n  content: \"\"; }\n\n.wi-forecast-io-cloudy:before {\n  content: \"\"; }\n\n.wi-forecast-io-partly-cloudy-day:before {\n  content: \"\"; }\n\n.wi-forecast-io-partly-cloudy-night:before {\n  content: \"\"; }\n\n.wi-forecast-io-hail:before {\n  content: \"\"; }\n\n.wi-forecast-io-thunderstorm:before {\n  content: \"\"; }\n\n.wi-forecast-io-tornado:before {\n  content: \"\"; }\n\n.wi-wmo4680-0:before,\n.wi-wmo4680-00:before {\n  content: \"\"; }\n\n.wi-wmo4680-1:before,\n.wi-wmo4680-01:before {\n  content: \"\"; }\n\n.wi-wmo4680-2:before,\n.wi-wmo4680-02:before {\n  content: \"\"; }\n\n.wi-wmo4680-3:before,\n.wi-wmo4680-03:before {\n  content: \"\"; }\n\n.wi-wmo4680-4:before,\n.wi-wmo4680-04:before {\n  content: \"\"; }\n\n.wi-wmo4680-5:before,\n.wi-wmo4680-05:before {\n  content: \"\"; }\n\n.wi-wmo4680-10:before {\n  content: \"\"; }\n\n.wi-wmo4680-11:before {\n  content: \"\"; }\n\n.wi-wmo4680-12:before {\n  content: \"\"; }\n\n.wi-wmo4680-18:before {\n  content: \"\"; }\n\n.wi-wmo4680-20:before {\n  content: \"\"; }\n\n.wi-wmo4680-21:before {\n  content: \"\"; }\n\n.wi-wmo4680-22:before {\n  content: \"\"; }\n\n.wi-wmo4680-23:before {\n  content: \"\"; }\n\n.wi-wmo4680-24:before {\n  content: \"\"; }\n\n.wi-wmo4680-25:before {\n  content: \"\"; }\n\n.wi-wmo4680-26:before {\n  content: \"\"; }\n\n.wi-wmo4680-27:before {\n  content: \"\"; }\n\n.wi-wmo4680-28:before {\n  content: \"\"; }\n\n.wi-wmo4680-29:before {\n  content: \"\"; }\n\n.wi-wmo4680-30:before {\n  content: \"\"; }\n\n.wi-wmo4680-31:before {\n  content: \"\"; }\n\n.wi-wmo4680-32:before {\n  content: \"\"; }\n\n.wi-wmo4680-33:before {\n  content: \"\"; }\n\n.wi-wmo4680-34:before {\n  content: \"\"; }\n\n.wi-wmo4680-35:before {\n  content: \"\"; }\n\n.wi-wmo4680-40:before {\n  content: \"\"; }\n\n.wi-wmo4680-41:before {\n  content: \"\"; }\n\n.wi-wmo4680-42:before {\n  content: \"\"; }\n\n.wi-wmo4680-43:before {\n  content: \"\"; }\n\n.wi-wmo4680-44:before {\n  content: \"\"; }\n\n.wi-wmo4680-45:before {\n  content: \"\"; }\n\n.wi-wmo4680-46:before {\n  content: \"\"; }\n\n.wi-wmo4680-47:before {\n  content: \"\"; }\n\n.wi-wmo4680-48:before {\n  content: \"\"; }\n\n.wi-wmo4680-50:before {\n  content: \"\"; }\n\n.wi-wmo4680-51:before {\n  content: \"\"; }\n\n.wi-wmo4680-52:before {\n  content: \"\"; }\n\n.wi-wmo4680-53:before {\n  content: \"\"; }\n\n.wi-wmo4680-54:before {\n  content: \"\"; }\n\n.wi-wmo4680-55:before {\n  content: \"\"; }\n\n.wi-wmo4680-56:before {\n  content: \"\"; }\n\n.wi-wmo4680-57:before {\n  content: \"\"; }\n\n.wi-wmo4680-58:before {\n  content: \"\"; }\n\n.wi-wmo4680-60:before {\n  content: \"\"; }\n\n.wi-wmo4680-61:before {\n  content: \"\"; }\n\n.wi-wmo4680-62:before {\n  content: \"\"; }\n\n.wi-wmo4680-63:before {\n  content: \"\"; }\n\n.wi-wmo4680-64:before {\n  content: \"\"; }\n\n.wi-wmo4680-65:before {\n  content: \"\"; }\n\n.wi-wmo4680-66:before {\n  content: \"\"; }\n\n.wi-wmo4680-67:before {\n  content: \"\"; }\n\n.wi-wmo4680-68:before {\n  content: \"\"; }\n\n.wi-wmo4680-70:before {\n  content: \"\"; }\n\n.wi-wmo4680-71:before {\n  content: \"\"; }\n\n.wi-wmo4680-72:before {\n  content: \"\"; }\n\n.wi-wmo4680-73:before {\n  content: \"\"; }\n\n.wi-wmo4680-74:before {\n  content: \"\"; }\n\n.wi-wmo4680-75:before {\n  content: \"\"; }\n\n.wi-wmo4680-76:before {\n  content: \"\"; }\n\n.wi-wmo4680-77:before {\n  content: \"\"; }\n\n.wi-wmo4680-78:before {\n  content: \"\"; }\n\n.wi-wmo4680-80:before {\n  content: \"\"; }\n\n.wi-wmo4680-81:before {\n  content: \"\"; }\n\n.wi-wmo4680-82:before {\n  content: \"\"; }\n\n.wi-wmo4680-83:before {\n  content: \"\"; }\n\n.wi-wmo4680-84:before {\n  content: \"\"; }\n\n.wi-wmo4680-85:before {\n  content: \"\"; }\n\n.wi-wmo4680-86:before {\n  content: \"\"; }\n\n.wi-wmo4680-87:before {\n  content: \"\"; }\n\n.wi-wmo4680-89:before {\n  content: \"\"; }\n\n.wi-wmo4680-90:before {\n  content: \"\"; }\n\n.wi-wmo4680-91:before {\n  content: \"\"; }\n\n.wi-wmo4680-92:before {\n  content: \"\"; }\n\n.wi-wmo4680-93:before {\n  content: \"\"; }\n\n.wi-wmo4680-94:before {\n  content: \"\"; }\n\n.wi-wmo4680-95:before {\n  content: \"\"; }\n\n.wi-wmo4680-96:before {\n  content: \"\"; }\n\n.wi-wmo4680-99:before {\n  content: \"\"; }\n\n.wi-owm-200:before {\n  content: \"\"; }\n\n.wi-owm-201:before {\n  content: \"\"; }\n\n.wi-owm-202:before {\n  content: \"\"; }\n\n.wi-owm-210:before {\n  content: \"\"; }\n\n.wi-owm-211:before {\n  content: \"\"; }\n\n.wi-owm-212:before {\n  content: \"\"; }\n\n.wi-owm-221:before {\n  content: \"\"; }\n\n.wi-owm-230:before {\n  content: \"\"; }\n\n.wi-owm-231:before {\n  content: \"\"; }\n\n.wi-owm-232:before {\n  content: \"\"; }\n\n.wi-owm-300:before {\n  content: \"\"; }\n\n.wi-owm-301:before {\n  content: \"\"; }\n\n.wi-owm-302:before {\n  content: \"\"; }\n\n.wi-owm-310:before {\n  content: \"\"; }\n\n.wi-owm-311:before {\n  content: \"\"; }\n\n.wi-owm-312:before {\n  content: \"\"; }\n\n.wi-owm-313:before {\n  content: \"\"; }\n\n.wi-owm-314:before {\n  content: \"\"; }\n\n.wi-owm-321:before {\n  content: \"\"; }\n\n.wi-owm-500:before {\n  content: \"\"; }\n\n.wi-owm-501:before {\n  content: \"\"; }\n\n.wi-owm-502:before {\n  content: \"\"; }\n\n.wi-owm-503:before {\n  content: \"\"; }\n\n.wi-owm-504:before {\n  content: \"\"; }\n\n.wi-owm-511:before {\n  content: \"\"; }\n\n.wi-owm-520:before {\n  content: \"\"; }\n\n.wi-owm-521:before {\n  content: \"\"; }\n\n.wi-owm-522:before {\n  content: \"\"; }\n\n.wi-owm-531:before {\n  content: \"\"; }\n\n.wi-owm-600:before {\n  content: \"\"; }\n\n.wi-owm-601:before {\n  content: \"\"; }\n\n.wi-owm-602:before {\n  content: \"\"; }\n\n.wi-owm-611:before {\n  content: \"\"; }\n\n.wi-owm-612:before {\n  content: \"\"; }\n\n.wi-owm-615:before {\n  content: \"\"; }\n\n.wi-owm-616:before {\n  content: \"\"; }\n\n.wi-owm-620:before {\n  content: \"\"; }\n\n.wi-owm-621:before {\n  content: \"\"; }\n\n.wi-owm-622:before {\n  content: \"\"; }\n\n.wi-owm-701:before {\n  content: \"\"; }\n\n.wi-owm-711:before {\n  content: \"\"; }\n\n.wi-owm-721:before {\n  content: \"\"; }\n\n.wi-owm-731:before {\n  content: \"\"; }\n\n.wi-owm-741:before {\n  content: \"\"; }\n\n.wi-owm-761:before {\n  content: \"\"; }\n\n.wi-owm-762:before {\n  content: \"\"; }\n\n.wi-owm-771:before {\n  content: \"\"; }\n\n.wi-owm-781:before {\n  content: \"\"; }\n\n.wi-owm-800:before {\n  content: \"\"; }\n\n.wi-owm-801:before {\n  content: \"\"; }\n\n.wi-owm-802:before {\n  content: \"\"; }\n\n.wi-owm-803:before {\n  content: \"\"; }\n\n.wi-owm-803:before {\n  content: \"\"; }\n\n.wi-owm-804:before {\n  content: \"\"; }\n\n.wi-owm-900:before {\n  content: \"\"; }\n\n.wi-owm-901:before {\n  content: \"\"; }\n\n.wi-owm-902:before {\n  content: \"\"; }\n\n.wi-owm-903:before {\n  content: \"\"; }\n\n.wi-owm-904:before {\n  content: \"\"; }\n\n.wi-owm-905:before {\n  content: \"\"; }\n\n.wi-owm-906:before {\n  content: \"\"; }\n\n.wi-owm-957:before {\n  content: \"\"; }\n\n.wi-owm-day-200:before {\n  content: \"\"; }\n\n.wi-owm-day-201:before {\n  content: \"\"; }\n\n.wi-owm-day-202:before {\n  content: \"\"; }\n\n.wi-owm-day-210:before {\n  content: \"\"; }\n\n.wi-owm-day-211:before {\n  content: \"\"; }\n\n.wi-owm-day-212:before {\n  content: \"\"; }\n\n.wi-owm-day-221:before {\n  content: \"\"; }\n\n.wi-owm-day-230:before {\n  content: \"\"; }\n\n.wi-owm-day-231:before {\n  content: \"\"; }\n\n.wi-owm-day-232:before {\n  content: \"\"; }\n\n.wi-owm-day-300:before {\n  content: \"\"; }\n\n.wi-owm-day-301:before {\n  content: \"\"; }\n\n.wi-owm-day-302:before {\n  content: \"\"; }\n\n.wi-owm-day-310:before {\n  content: \"\"; }\n\n.wi-owm-day-311:before {\n  content: \"\"; }\n\n.wi-owm-day-312:before {\n  content: \"\"; }\n\n.wi-owm-day-313:before {\n  content: \"\"; }\n\n.wi-owm-day-314:before {\n  content: \"\"; }\n\n.wi-owm-day-321:before {\n  content: \"\"; }\n\n.wi-owm-day-500:before {\n  content: \"\"; }\n\n.wi-owm-day-501:before {\n  content: \"\"; }\n\n.wi-owm-day-502:before {\n  content: \"\"; }\n\n.wi-owm-day-503:before {\n  content: \"\"; }\n\n.wi-owm-day-504:before {\n  content: \"\"; }\n\n.wi-owm-day-511:before {\n  content: \"\"; }\n\n.wi-owm-day-520:before {\n  content: \"\"; }\n\n.wi-owm-day-521:before {\n  content: \"\"; }\n\n.wi-owm-day-522:before {\n  content: \"\"; }\n\n.wi-owm-day-531:before {\n  content: \"\"; }\n\n.wi-owm-day-600:before {\n  content: \"\"; }\n\n.wi-owm-day-601:before {\n  content: \"\"; }\n\n.wi-owm-day-602:before {\n  content: \"\"; }\n\n.wi-owm-day-611:before {\n  content: \"\"; }\n\n.wi-owm-day-612:before {\n  content: \"\"; }\n\n.wi-owm-day-615:before {\n  content: \"\"; }\n\n.wi-owm-day-616:before {\n  content: \"\"; }\n\n.wi-owm-day-620:before {\n  content: \"\"; }\n\n.wi-owm-day-621:before {\n  content: \"\"; }\n\n.wi-owm-day-622:before {\n  content: \"\"; }\n\n.wi-owm-day-701:before {\n  content: \"\"; }\n\n.wi-owm-day-711:before {\n  content: \"\"; }\n\n.wi-owm-day-721:before {\n  content: \"\"; }\n\n.wi-owm-day-731:before {\n  content: \"\"; }\n\n.wi-owm-day-741:before {\n  content: \"\"; }\n\n.wi-owm-day-761:before {\n  content: \"\"; }\n\n.wi-owm-day-762:before {\n  content: \"\"; }\n\n.wi-owm-day-781:before {\n  content: \"\"; }\n\n.wi-owm-day-800:before {\n  content: \"\"; }\n\n.wi-owm-day-801:before {\n  content: \"\"; }\n\n.wi-owm-day-802:before {\n  content: \"\"; }\n\n.wi-owm-day-803:before {\n  content: \"\"; }\n\n.wi-owm-day-804:before {\n  content: \"\"; }\n\n.wi-owm-day-900:before {\n  content: \"\"; }\n\n.wi-owm-day-902:before {\n  content: \"\"; }\n\n.wi-owm-day-903:before {\n  content: \"\"; }\n\n.wi-owm-day-904:before {\n  content: \"\"; }\n\n.wi-owm-day-906:before {\n  content: \"\"; }\n\n.wi-owm-day-957:before {\n  content: \"\"; }\n\n.wi-owm-night-200:before {\n  content: \"\"; }\n\n.wi-owm-night-201:before {\n  content: \"\"; }\n\n.wi-owm-night-202:before {\n  content: \"\"; }\n\n.wi-owm-night-210:before {\n  content: \"\"; }\n\n.wi-owm-night-211:before {\n  content: \"\"; }\n\n.wi-owm-night-212:before {\n  content: \"\"; }\n\n.wi-owm-night-221:before {\n  content: \"\"; }\n\n.wi-owm-night-230:before {\n  content: \"\"; }\n\n.wi-owm-night-231:before {\n  content: \"\"; }\n\n.wi-owm-night-232:before {\n  content: \"\"; }\n\n.wi-owm-night-300:before {\n  content: \"\"; }\n\n.wi-owm-night-301:before {\n  content: \"\"; }\n\n.wi-owm-night-302:before {\n  content: \"\"; }\n\n.wi-owm-night-310:before {\n  content: \"\"; }\n\n.wi-owm-night-311:before {\n  content: \"\"; }\n\n.wi-owm-night-312:before {\n  content: \"\"; }\n\n.wi-owm-night-313:before {\n  content: \"\"; }\n\n.wi-owm-night-314:before {\n  content: \"\"; }\n\n.wi-owm-night-321:before {\n  content: \"\"; }\n\n.wi-owm-night-500:before {\n  content: \"\"; }\n\n.wi-owm-night-501:before {\n  content: \"\"; }\n\n.wi-owm-night-502:before {\n  content: \"\"; }\n\n.wi-owm-night-503:before {\n  content: \"\"; }\n\n.wi-owm-night-504:before {\n  content: \"\"; }\n\n.wi-owm-night-511:before {\n  content: \"\"; }\n\n.wi-owm-night-520:before {\n  content: \"\"; }\n\n.wi-owm-night-521:before {\n  content: \"\"; }\n\n.wi-owm-night-522:before {\n  content: \"\"; }\n\n.wi-owm-night-531:before {\n  content: \"\"; }\n\n.wi-owm-night-600:before {\n  content: \"\"; }\n\n.wi-owm-night-601:before {\n  content: \"\"; }\n\n.wi-owm-night-602:before {\n  content: \"\"; }\n\n.wi-owm-night-611:before {\n  content: \"\"; }\n\n.wi-owm-night-612:before {\n  content: \"\"; }\n\n.wi-owm-night-615:before {\n  content: \"\"; }\n\n.wi-owm-night-616:before {\n  content: \"\"; }\n\n.wi-owm-night-620:before {\n  content: \"\"; }\n\n.wi-owm-night-621:before {\n  content: \"\"; }\n\n.wi-owm-night-622:before {\n  content: \"\"; }\n\n.wi-owm-night-701:before {\n  content: \"\"; }\n\n.wi-owm-night-711:before {\n  content: \"\"; }\n\n.wi-owm-night-721:before {\n  content: \"\"; }\n\n.wi-owm-night-731:before {\n  content: \"\"; }\n\n.wi-owm-night-741:before {\n  content: \"\"; }\n\n.wi-owm-night-761:before {\n  content: \"\"; }\n\n.wi-owm-night-762:before {\n  content: \"\"; }\n\n.wi-owm-night-781:before {\n  content: \"\"; }\n\n.wi-owm-night-800:before {\n  content: \"\"; }\n\n.wi-owm-night-801:before {\n  content: \"\"; }\n\n.wi-owm-night-802:before {\n  content: \"\"; }\n\n.wi-owm-night-803:before {\n  content: \"\"; }\n\n.wi-owm-night-804:before {\n  content: \"\"; }\n\n.wi-owm-night-900:before {\n  content: \"\"; }\n\n.wi-owm-night-902:before {\n  content: \"\"; }\n\n.wi-owm-night-903:before {\n  content: \"\"; }\n\n.wi-owm-night-904:before {\n  content: \"\"; }\n\n.wi-owm-night-906:before {\n  content: \"\"; }\n\n.wi-owm-night-957:before {\n  content: \"\"; }\n\n/*# sourceMappingURL=weather-icons.css.map */\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-beaufort.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-day.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-direction.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-misc.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-moon.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-neutral.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-night.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-time.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/css/variables-wind-names.css",
    "content": ""
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-beaufort.less",
    "content": ".wi-wind-beaufort-0:before {content: @wind-beaufort-0;}\n.wi-wind-beaufort-1:before {content: @wind-beaufort-1;}\n.wi-wind-beaufort-2:before {content: @wind-beaufort-2;}\n.wi-wind-beaufort-3:before {content: @wind-beaufort-3;}\n.wi-wind-beaufort-4:before {content: @wind-beaufort-4;}\n.wi-wind-beaufort-5:before {content: @wind-beaufort-5;}\n.wi-wind-beaufort-6:before {content: @wind-beaufort-6;}\n.wi-wind-beaufort-7:before {content: @wind-beaufort-7;}\n.wi-wind-beaufort-8:before {content: @wind-beaufort-8;}\n.wi-wind-beaufort-9:before {content: @wind-beaufort-9;}\n.wi-wind-beaufort-10:before {content: @wind-beaufort-10;}\n.wi-wind-beaufort-11:before {content: @wind-beaufort-11;}\n.wi-wind-beaufort-12:before {content: @wind-beaufort-12;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-day.less",
    "content": ".wi-day-sunny:before {content: @day-sunny;}\n.wi-day-cloudy:before {content: @day-cloudy;}\n.wi-day-cloudy-gusts:before {content: @day-cloudy-gusts;}\n.wi-day-cloudy-windy:before {content: @day-cloudy-windy;}\n.wi-day-fog:before {content: @day-fog;}\n.wi-day-hail:before {content: @day-hail;}\n.wi-day-haze:before {content: @day-haze;}\n.wi-day-lightning:before {content: @day-lightning;}\n.wi-day-rain:before {content: @day-rain;}\n.wi-day-rain-mix:before {content: @day-rain-mix;}\n.wi-day-rain-wind:before {content: @day-rain-wind;}\n.wi-day-showers:before {content: @day-showers;}\n.wi-day-sleet:before {content: @day-sleet;}\n.wi-day-sleet-storm:before {content: @day-sleet-storm;}\n.wi-day-snow:before {content: @day-snow;}\n.wi-day-snow-thunderstorm:before {content: @day-snow-thunderstorm;}\n.wi-day-snow-wind:before {content: @day-snow-wind;}\n.wi-day-sprinkle:before {content: @day-sprinkle;}\n.wi-day-storm-showers:before {content: @day-storm-showers;}\n.wi-day-sunny-overcast:before {content: @day-sunny-overcast;}\n.wi-day-thunderstorm:before {content: @day-thunderstorm;}\n.wi-day-windy:before {content: @day-windy;}\n.wi-solar-eclipse:before {content: @solar-eclipse;}\n.wi-hot:before {content: @hot;}\n.wi-day-cloudy-high:before {content: @day-cloudy-high;}\n.wi-day-light-wind:before {content: @day-light-wind;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-direction.less",
    "content": ".wi-direction-up:before {content: @direction-up;}\n.wi-direction-up-right:before {content: @direction-up-right;}\n.wi-direction-right:before {content: @direction-right;}\n.wi-direction-down-right:before {content: @direction-down-right;}\n.wi-direction-down:before {content: @direction-down;}\n.wi-direction-down-left:before {content: @direction-down-left;}\n.wi-direction-left:before {content: @direction-left;}\n.wi-direction-up-left:before {content: @direction-up-left;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-misc.less",
    "content": ".wi-alien:before {content: @alien;}\n.wi-celsius:before {content: @celsius;}\n.wi-fahrenheit:before {content: @fahrenheit;}\n.wi-degrees:before {content: @degrees;}\n.wi-thermometer:before {content: @thermometer;}\n.wi-thermometer-exterior:before {content: @thermometer-exterior;}\n.wi-thermometer-internal:before {content: @thermometer-internal;}\n.wi-cloud-down:before {content: @cloud-down;}\n.wi-cloud-up:before {content: @cloud-up;}\n.wi-cloud-refresh:before {content: @cloud-refresh;}\n.wi-horizon:before {content: @horizon;}\n.wi-horizon-alt:before {content: @horizon-alt;}\n.wi-sunrise:before {content: @sunrise;}\n.wi-sunset:before {content: @sunset;}\n.wi-moonrise:before {content: @moonrise;}\n.wi-moonset:before {content: @moonset;}\n.wi-refresh:before {content: @refresh;}\n.wi-refresh-alt:before {content: @refresh-alt;}\n.wi-umbrella:before {content: @umbrella;}\n.wi-barometer:before {content: @barometer;}\n.wi-humidity:before {content: @humidity;}\n.wi-na:before {content: @na;}\n.wi-train:before {content: @train;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-moon-aliases.less",
    "content": ".wi-moon-0:before {content: @moon-new;}\n.wi-moon-1:before {content: @moon-waxing-cresent-1;}\n.wi-moon-2:before {content: @moon-waxing-cresent-2;}\n.wi-moon-3:before {content: @moon-waxing-cresent-3;}\n.wi-moon-4:before {content: @moon-waxing-cresent-4;}\n.wi-moon-5:before {content: @moon-waxing-cresent-5;}\n.wi-moon-6:before {content: @moon-waxing-cresent-6;}\n.wi-moon-7:before {content: @moon-first-quarter;}\n.wi-moon-8:before {content: @moon-waxing-gibbous-1;}\n.wi-moon-9:before {content: @moon-waxing-gibbous-2;}\n.wi-moon-10:before {content: @moon-waxing-gibbous-3;}\n.wi-moon-11:before {content: @moon-waxing-gibbous-4;}\n.wi-moon-12:before {content: @moon-waxing-gibbous-5;}\n.wi-moon-13:before {content: @moon-waxing-gibbous-6;}\n.wi-moon-14:before {content: @moon-full;}\n.wi-moon-15:before {content: @moon-waning-gibbous-1;}\n.wi-moon-16:before {content: @moon-waning-gibbous-2;}\n.wi-moon-17:before {content: @moon-waning-gibbous-3;}\n.wi-moon-18:before {content: @moon-waning-gibbous-4;}\n.wi-moon-19:before {content: @moon-waning-gibbous-5;}\n.wi-moon-20:before {content: @moon-waning-gibbous-6;}\n.wi-moon-21:before {content: @moon-third-quarter;}\n.wi-moon-22:before {content: @moon-waning-crescent-1;}\n.wi-moon-23:before {content: @moon-waning-crescent-2;}\n.wi-moon-24:before {content: @moon-waning-crescent-3;}\n.wi-moon-25:before {content: @moon-waning-crescent-4;}\n.wi-moon-26:before {content: @moon-waning-crescent-5;}\n.wi-moon-27:before {content: @moon-waning-crescent-6;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-moon.less",
    "content": ".wi-moon-new:before {content: @moon-new;}\n.wi-moon-waxing-cresent-1:before {content: @moon-waxing-cresent-1;}\n.wi-moon-waxing-cresent-2:before {content: @moon-waxing-cresent-2;}\n.wi-moon-waxing-cresent-3:before {content: @moon-waxing-cresent-3;}\n.wi-moon-waxing-cresent-4:before {content: @moon-waxing-cresent-4;}\n.wi-moon-waxing-cresent-5:before {content: @moon-waxing-cresent-5;}\n.wi-moon-waxing-cresent-6:before {content: @moon-waxing-cresent-6;}\n.wi-moon-first-quarter:before {content: @moon-first-quarter;}\n.wi-moon-waxing-gibbous-1:before {content: @moon-waxing-gibbous-1;}\n.wi-moon-waxing-gibbous-2:before {content: @moon-waxing-gibbous-2;}\n.wi-moon-waxing-gibbous-3:before {content: @moon-waxing-gibbous-3;}\n.wi-moon-waxing-gibbous-4:before {content: @moon-waxing-gibbous-4;}\n.wi-moon-waxing-gibbous-5:before {content: @moon-waxing-gibbous-5;}\n.wi-moon-waxing-gibbous-6:before {content: @moon-waxing-gibbous-6;}\n.wi-moon-full:before {content: @moon-full;}\n.wi-moon-waning-gibbous-1:before {content: @moon-waning-gibbous-1;}\n.wi-moon-waning-gibbous-2:before {content: @moon-waning-gibbous-2;}\n.wi-moon-waning-gibbous-3:before {content: @moon-waning-gibbous-3;}\n.wi-moon-waning-gibbous-4:before {content: @moon-waning-gibbous-4;}\n.wi-moon-waning-gibbous-5:before {content: @moon-waning-gibbous-5;}\n.wi-moon-waning-gibbous-6:before {content: @moon-waning-gibbous-6;}\n.wi-moon-third-quarter:before {content: @moon-third-quarter;}\n.wi-moon-waning-crescent-1:before {content: @moon-waning-crescent-1;}\n.wi-moon-waning-crescent-2:before {content: @moon-waning-crescent-2;}\n.wi-moon-waning-crescent-3:before {content: @moon-waning-crescent-3;}\n.wi-moon-waning-crescent-4:before {content: @moon-waning-crescent-4;}\n.wi-moon-waning-crescent-5:before {content: @moon-waning-crescent-5;}\n.wi-moon-waning-crescent-6:before {content: @moon-waning-crescent-6;}\n.wi-moon-alt-new:before {content: @moon-alt-new;}\n.wi-moon-alt-waxing-cresent-1:before {content: @moon-alt-waxing-cresent-1;}\n.wi-moon-alt-waxing-cresent-2:before {content: @moon-alt-waxing-cresent-2;}\n.wi-moon-alt-waxing-cresent-3:before {content: @moon-alt-waxing-cresent-3;}\n.wi-moon-alt-waxing-cresent-4:before {content: @moon-alt-waxing-cresent-4;}\n.wi-moon-alt-waxing-cresent-5:before {content: @moon-alt-waxing-cresent-5;}\n.wi-moon-alt-waxing-cresent-6:before {content: @moon-alt-waxing-cresent-6;}\n.wi-moon-alt-first-quarter:before {content: @moon-alt-first-quarter;}\n.wi-moon-alt-waxing-gibbous-1:before {content: @moon-alt-waxing-gibbous-1;}\n.wi-moon-alt-waxing-gibbous-2:before {content: @moon-alt-waxing-gibbous-2;}\n.wi-moon-alt-waxing-gibbous-3:before {content: @moon-alt-waxing-gibbous-3;}\n.wi-moon-alt-waxing-gibbous-4:before {content: @moon-alt-waxing-gibbous-4;}\n.wi-moon-alt-waxing-gibbous-5:before {content: @moon-alt-waxing-gibbous-5;}\n.wi-moon-alt-waxing-gibbous-6:before {content: @moon-alt-waxing-gibbous-6;}\n.wi-moon-alt-full:before {content: @moon-alt-full;}\n.wi-moon-alt-waning-gibbous-1:before {content: @moon-alt-waning-gibbous-1;}\n.wi-moon-alt-waning-gibbous-2:before {content: @moon-alt-waning-gibbous-2;}\n.wi-moon-alt-waning-gibbous-3:before {content: @moon-alt-waning-gibbous-3;}\n.wi-moon-alt-waning-gibbous-4:before {content: @moon-alt-waning-gibbous-4;}\n.wi-moon-alt-waning-gibbous-5:before {content: @moon-alt-waning-gibbous-5;}\n.wi-moon-alt-waning-gibbous-6:before {content: @moon-alt-waning-gibbous-6;}\n.wi-moon-alt-third-quarter:before {content: @moon-alt-third-quarter;}\n.wi-moon-alt-waning-crescent-1:before {content: @moon-alt-waning-crescent-1;}\n.wi-moon-alt-waning-crescent-2:before {content: @moon-alt-waning-crescent-2;}\n.wi-moon-alt-waning-crescent-3:before {content: @moon-alt-waning-crescent-3;}\n.wi-moon-alt-waning-crescent-4:before {content: @moon-alt-waning-crescent-4;}\n.wi-moon-alt-waning-crescent-5:before {content: @moon-alt-waning-crescent-5;}\n.wi-moon-alt-waning-crescent-6:before {content: @moon-alt-waning-crescent-6;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-neutral.less",
    "content": ".wi-cloud:before {content: @cloud;}\n.wi-cloudy:before {content: @cloudy;}\n.wi-cloudy-gusts:before {content: @cloudy-gusts;}\n.wi-cloudy-windy:before {content: @cloudy-windy;}\n.wi-fog:before {content: @fog;}\n.wi-hail:before {content: @hail;}\n.wi-rain:before {content: @rain;}\n.wi-rain-mix:before {content: @rain-mix;}\n.wi-rain-wind:before {content: @rain-wind;}\n.wi-showers:before {content: @showers;}\n.wi-sleet:before {content: @sleet;}\n.wi-snow:before {content: @snow;}\n.wi-sprinkle:before {content: @sprinkle;}\n.wi-storm-showers:before {content: @storm-showers;}\n.wi-thunderstorm:before {content: @thunderstorm;}\n.wi-snow-wind:before {content: @snow-wind;}\n.wi-snow:before {content: @snow;}\n.wi-smog:before {content: @smog;}\n.wi-smoke:before {content: @smoke;}\n.wi-lightning:before {content: @lightning;}\n.wi-raindrops:before {content: @raindrops;}\n.wi-raindrop:before {content: @raindrop;}\n.wi-dust:before {content: @dust;}\n.wi-snowflake-cold:before {content: @snowflake-cold;}\n.wi-windy:before {content: @windy;}\n.wi-strong-wind:before {content: @strong-wind;}\n.wi-sandstorm:before {content: @sandstorm;}\n.wi-earthquake:before {content: @earthquake;}\n.wi-fire:before {content: @fire;}\n.wi-flood:before {content: @flood;}\n.wi-meteor:before {content: @meteor;}\n.wi-tsunami:before {content: @tsunami;}\n.wi-volcano:before {content: @volcano;}\n.wi-hurricane:before {content: @hurricane;}\n.wi-tornado:before {content: @tornado;}\n.wi-small-craft-advisory:before {content: @small-craft-advisory;}\n.wi-gale-warning:before {content: @gale-warning;}\n.wi-storm-warning:before {content: @storm-warning;}\n.wi-hurricane-warning:before {content: @hurricane-warning;}\n.wi-wind-direction:before {content: @wind-direction;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-night.less",
    "content": ".wi-night-clear:before {content: @night-clear;}\n.wi-night-alt-cloudy:before {content: @night-alt-cloudy;}\n.wi-night-alt-cloudy-gusts:before {content: @night-alt-cloudy-gusts;}\n.wi-night-alt-cloudy-windy:before {content: @night-alt-cloudy-windy;}\n.wi-night-alt-hail:before {content: @night-alt-hail;}\n.wi-night-alt-lightning:before {content: @night-alt-lightning;}\n.wi-night-alt-rain:before {content: @night-alt-rain;}\n.wi-night-alt-rain-mix:before {content: @night-alt-rain-mix;}\n.wi-night-alt-rain-wind:before {content: @night-alt-rain-wind;}\n.wi-night-alt-showers:before {content: @night-alt-showers;}\n.wi-night-alt-sleet:before {content: @night-alt-sleet;}\n.wi-night-alt-sleet-storm:before {content: @night-alt-sleet-storm;}\n.wi-night-alt-snow:before {content: @night-alt-snow;}\n.wi-night-alt-snow-thunderstorm:before {content: @night-alt-snow-thunderstorm;}\n.wi-night-alt-snow-wind:before {content: @night-alt-snow-wind;}\n.wi-night-alt-sprinkle:before {content: @night-alt-sprinkle;}\n.wi-night-alt-storm-showers:before {content: @night-alt-storm-showers;}\n.wi-night-alt-thunderstorm:before {content: @night-alt-thunderstorm;}\n.wi-night-cloudy:before {content: @night-cloudy;}\n.wi-night-cloudy-gusts:before {content: @night-cloudy-gusts;}\n.wi-night-cloudy-windy:before {content: @night-cloudy-windy;}\n.wi-night-fog:before {content: @night-fog;}\n.wi-night-hail:before {content: @night-hail;}\n.wi-night-lightning:before {content: @night-lightning;}\n.wi-night-partly-cloudy:before {content: @night-partly-cloudy;}\n.wi-night-rain:before {content: @night-rain;}\n.wi-night-rain-mix:before {content: @night-rain-mix;}\n.wi-night-rain-wind:before {content: @night-rain-wind;}\n.wi-night-showers:before {content: @night-showers;}\n.wi-night-sleet:before {content: @night-sleet;}\n.wi-night-sleet-storm:before {content: @night-sleet-storm;}\n.wi-night-snow:before {content: @night-snow;}\n.wi-night-snow-thunderstorm:before {content: @night-snow-thunderstorm;}\n.wi-night-snow-wind:before {content: @night-snow-wind;}\n.wi-night-sprinkle:before {content: @night-sprinkle;}\n.wi-night-storm-showers:before {content: @night-storm-showers;}\n.wi-night-thunderstorm:before {content: @night-thunderstorm;}\n.wi-lunar-eclipse:before {content: @lunar-eclipse;}\n.wi-stars:before {content: @stars;}\n.wi-storm-showers:before {content: @storm-showers;}\n.wi-thunderstorm:before {content: @thunderstorm;}\n.wi-night-alt-cloudy-high:before {content: @night-alt-cloudy-high;}\n.wi-night-cloudy-high:before {content: @night-cloudy-high;}\n.wi-night-alt-partly-cloudy:before {content: @night-alt-partly-cloudy;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-time.less",
    "content": ".wi-time-1:before {content: @time-1;}\n.wi-time-2:before {content: @time-2;}\n.wi-time-3:before {content: @time-3;}\n.wi-time-4:before {content: @time-4;}\n.wi-time-5:before {content: @time-5;}\n.wi-time-6:before {content: @time-6;}\n.wi-time-7:before {content: @time-7;}\n.wi-time-8:before {content: @time-8;}\n.wi-time-9:before {content: @time-9;}\n.wi-time-10:before {content: @time-10;}\n.wi-time-11:before {content: @time-11;}\n.wi-time-12:before {content: @time-12;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-wind-aliases.less",
    "content": ".wi-towards-n    {\n  .wi-wind.towards-0-deg;\n}\n.wi-towards-nne   {\n  .wi-wind.towards-23-deg;\n}\n.wi-towards-ne    {\n  .wi-wind.towards-45-deg;\n}\n.wi-towards-ene   {\n  .wi-wind.towards-68-deg;\n}\n.wi-towards-e    {\n  .wi-wind.towards-90-deg;\n}\n.wi-towards-ese   {\n  .wi-wind.towards-113-deg;\n}\n.wi-towards-se    {\n  .wi-wind.towards-135-deg;\n}\n.wi-towards-sse   {\n  .wi-wind.towards-158-deg;\n}\n.wi-towards-s    {\n  .wi-wind.towards-180-deg;\n}\n.wi-towards-ssw   {\n  .wi-wind.towards-203-deg;\n}\n.wi-towards-sw    {\n  .wi-wind.towards-225-deg;\n}\n.wi-towards-wsw   {\n  .wi-wind.towards-248-deg;\n}\n.wi-towards-w    {\n  .wi-wind.towards-270-deg;\n}\n.wi-towards-wnw   {\n  .wi-wind.towards-293-deg;\n}\n.wi-towards-nw    {\n  .wi-wind.towards-313-deg;\n}\n.wi-towards-nnw   {\n  .wi-wind.towards-336-deg;\n}\n.wi-from-n    {\n  .wi-wind.from-0-deg;\n}\n.wi-from-nne   {\n  .wi-wind.from-23-deg;\n}\n.wi-from-ne    {\n  .wi-wind.from-45-deg;\n}\n.wi-from-ene   {\n  .wi-wind.from-68-deg;\n}\n.wi-from-e    {\n  .wi-wind.from-90-deg;\n}\n.wi-from-ese   {\n  .wi-wind.from-113-deg;\n}\n.wi-from-se    {\n  .wi-wind.from-135-deg;\n}\n.wi-from-sse   {\n  .wi-wind.from-158-deg;\n}\n.wi-from-s    {\n  .wi-wind.from-180-deg;\n}\n.wi-from-ssw   {\n  .wi-wind.from-203-deg;\n}\n.wi-from-sw    {\n  .wi-wind.from-225-deg;\n}\n.wi-from-wsw   {\n  .wi-wind.from-248-deg;\n}\n.wi-from-w    {\n  .wi-wind.from-270-deg;\n}\n.wi-from-wnw   {\n  .wi-wind.from-293-deg;\n}\n.wi-from-nw    {\n  .wi-wind.from-313-deg;\n}\n.wi-from-nnw   {\n  .wi-wind.from-336-deg;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-wind-degrees.less",
    "content": ".@{wi-css-prefix}-wind { \n  &.towards-0-deg {.wind-rotate(0deg);}\n  &.towards-1-deg {.wind-rotate(1deg);}\n  &.towards-2-deg {.wind-rotate(2deg);}\n  &.towards-3-deg {.wind-rotate(3deg);}\n  &.towards-4-deg {.wind-rotate(4deg);}\n  &.towards-5-deg {.wind-rotate(5deg);}\n  &.towards-6-deg {.wind-rotate(6deg);}\n  &.towards-7-deg {.wind-rotate(7deg);}\n  &.towards-8-deg {.wind-rotate(8deg);}\n  &.towards-9-deg {.wind-rotate(9deg);}\n  &.towards-10-deg {.wind-rotate(10deg);}\n  &.towards-11-deg {.wind-rotate(11deg);}\n  &.towards-12-deg {.wind-rotate(12deg);}\n  &.towards-13-deg {.wind-rotate(13deg);}\n  &.towards-14-deg {.wind-rotate(14deg);}\n  &.towards-15-deg {.wind-rotate(15deg);}\n  &.towards-16-deg {.wind-rotate(16deg);}\n  &.towards-17-deg {.wind-rotate(17deg);}\n  &.towards-18-deg {.wind-rotate(18deg);}\n  &.towards-19-deg {.wind-rotate(19deg);}\n  &.towards-20-deg {.wind-rotate(20deg);}\n  &.towards-21-deg {.wind-rotate(21deg);}\n  &.towards-22-deg {.wind-rotate(22deg);}\n  &.towards-23-deg {.wind-rotate(23deg);}\n  &.towards-24-deg {.wind-rotate(24deg);}\n  &.towards-25-deg {.wind-rotate(25deg);}\n  &.towards-26-deg {.wind-rotate(26deg);}\n  &.towards-27-deg {.wind-rotate(27deg);}\n  &.towards-28-deg {.wind-rotate(28deg);}\n  &.towards-29-deg {.wind-rotate(29deg);}\n  &.towards-30-deg {.wind-rotate(30deg);}\n  &.towards-31-deg {.wind-rotate(31deg);}\n  &.towards-32-deg {.wind-rotate(32deg);}\n  &.towards-33-deg {.wind-rotate(33deg);}\n  &.towards-34-deg {.wind-rotate(34deg);}\n  &.towards-35-deg {.wind-rotate(35deg);}\n  &.towards-36-deg {.wind-rotate(36deg);}\n  &.towards-37-deg {.wind-rotate(37deg);}\n  &.towards-38-deg {.wind-rotate(38deg);}\n  &.towards-39-deg {.wind-rotate(39deg);}\n  &.towards-40-deg {.wind-rotate(40deg);}\n  &.towards-41-deg {.wind-rotate(41deg);}\n  &.towards-42-deg {.wind-rotate(42deg);}\n  &.towards-43-deg {.wind-rotate(43deg);}\n  &.towards-44-deg {.wind-rotate(44deg);}\n  &.towards-45-deg {.wind-rotate(45deg);}\n  &.towards-46-deg {.wind-rotate(46deg);}\n  &.towards-47-deg {.wind-rotate(47deg);}\n  &.towards-48-deg {.wind-rotate(48deg);}\n  &.towards-49-deg {.wind-rotate(49deg);}\n  &.towards-50-deg {.wind-rotate(50deg);}\n  &.towards-51-deg {.wind-rotate(51deg);}\n  &.towards-52-deg {.wind-rotate(52deg);}\n  &.towards-53-deg {.wind-rotate(53deg);}\n  &.towards-54-deg {.wind-rotate(54deg);}\n  &.towards-55-deg {.wind-rotate(55deg);}\n  &.towards-56-deg {.wind-rotate(56deg);}\n  &.towards-57-deg {.wind-rotate(57deg);}\n  &.towards-58-deg {.wind-rotate(58deg);}\n  &.towards-59-deg {.wind-rotate(59deg);}\n  &.towards-60-deg {.wind-rotate(60deg);}\n  &.towards-61-deg {.wind-rotate(61deg);}\n  &.towards-62-deg {.wind-rotate(62deg);}\n  &.towards-63-deg {.wind-rotate(63deg);}\n  &.towards-64-deg {.wind-rotate(64deg);}\n  &.towards-65-deg {.wind-rotate(65deg);}\n  &.towards-66-deg {.wind-rotate(66deg);}\n  &.towards-67-deg {.wind-rotate(67deg);}\n  &.towards-68-deg {.wind-rotate(68deg);}\n  &.towards-69-deg {.wind-rotate(69deg);}\n  &.towards-70-deg {.wind-rotate(70deg);}\n  &.towards-71-deg {.wind-rotate(71deg);}\n  &.towards-72-deg {.wind-rotate(72deg);}\n  &.towards-73-deg {.wind-rotate(73deg);}\n  &.towards-74-deg {.wind-rotate(74deg);}\n  &.towards-75-deg {.wind-rotate(75deg);}\n  &.towards-76-deg {.wind-rotate(76deg);}\n  &.towards-77-deg {.wind-rotate(77deg);}\n  &.towards-78-deg {.wind-rotate(78deg);}\n  &.towards-79-deg {.wind-rotate(79deg);}\n  &.towards-80-deg {.wind-rotate(80deg);}\n  &.towards-81-deg {.wind-rotate(81deg);}\n  &.towards-82-deg {.wind-rotate(82deg);}\n  &.towards-83-deg {.wind-rotate(83deg);}\n  &.towards-84-deg {.wind-rotate(84deg);}\n  &.towards-85-deg {.wind-rotate(85deg);}\n  &.towards-86-deg {.wind-rotate(86deg);}\n  &.towards-87-deg {.wind-rotate(87deg);}\n  &.towards-88-deg {.wind-rotate(88deg);}\n  &.towards-89-deg {.wind-rotate(89deg);}\n  &.towards-90-deg {.wind-rotate(90deg);}\n  &.towards-91-deg {.wind-rotate(91deg);}\n  &.towards-92-deg {.wind-rotate(92deg);}\n  &.towards-93-deg {.wind-rotate(93deg);}\n  &.towards-94-deg {.wind-rotate(94deg);}\n  &.towards-95-deg {.wind-rotate(95deg);}\n  &.towards-96-deg {.wind-rotate(96deg);}\n  &.towards-97-deg {.wind-rotate(97deg);}\n  &.towards-98-deg {.wind-rotate(98deg);}\n  &.towards-99-deg {.wind-rotate(99deg);}\n  &.towards-100-deg {.wind-rotate(100deg);}\n  &.towards-101-deg {.wind-rotate(101deg);}\n  &.towards-102-deg {.wind-rotate(102deg);}\n  &.towards-103-deg {.wind-rotate(103deg);}\n  &.towards-104-deg {.wind-rotate(104deg);}\n  &.towards-105-deg {.wind-rotate(105deg);}\n  &.towards-106-deg {.wind-rotate(106deg);}\n  &.towards-107-deg {.wind-rotate(107deg);}\n  &.towards-108-deg {.wind-rotate(108deg);}\n  &.towards-109-deg {.wind-rotate(109deg);}\n  &.towards-110-deg {.wind-rotate(110deg);}\n  &.towards-111-deg {.wind-rotate(111deg);}\n  &.towards-112-deg {.wind-rotate(112deg);}\n  &.towards-113-deg {.wind-rotate(113deg);}\n  &.towards-114-deg {.wind-rotate(114deg);}\n  &.towards-115-deg {.wind-rotate(115deg);}\n  &.towards-116-deg {.wind-rotate(116deg);}\n  &.towards-117-deg {.wind-rotate(117deg);}\n  &.towards-118-deg {.wind-rotate(118deg);}\n  &.towards-119-deg {.wind-rotate(119deg);}\n  &.towards-120-deg {.wind-rotate(120deg);}\n  &.towards-121-deg {.wind-rotate(121deg);}\n  &.towards-122-deg {.wind-rotate(122deg);}\n  &.towards-123-deg {.wind-rotate(123deg);}\n  &.towards-124-deg {.wind-rotate(124deg);}\n  &.towards-125-deg {.wind-rotate(125deg);}\n  &.towards-126-deg {.wind-rotate(126deg);}\n  &.towards-127-deg {.wind-rotate(127deg);}\n  &.towards-128-deg {.wind-rotate(128deg);}\n  &.towards-129-deg {.wind-rotate(129deg);}\n  &.towards-130-deg {.wind-rotate(130deg);}\n  &.towards-131-deg {.wind-rotate(131deg);}\n  &.towards-132-deg {.wind-rotate(132deg);}\n  &.towards-133-deg {.wind-rotate(133deg);}\n  &.towards-134-deg {.wind-rotate(134deg);}\n  &.towards-135-deg {.wind-rotate(135deg);}\n  &.towards-136-deg {.wind-rotate(136deg);}\n  &.towards-137-deg {.wind-rotate(137deg);}\n  &.towards-138-deg {.wind-rotate(138deg);}\n  &.towards-139-deg {.wind-rotate(139deg);}\n  &.towards-140-deg {.wind-rotate(140deg);}\n  &.towards-141-deg {.wind-rotate(141deg);}\n  &.towards-142-deg {.wind-rotate(142deg);}\n  &.towards-143-deg {.wind-rotate(143deg);}\n  &.towards-144-deg {.wind-rotate(144deg);}\n  &.towards-145-deg {.wind-rotate(145deg);}\n  &.towards-146-deg {.wind-rotate(146deg);}\n  &.towards-147-deg {.wind-rotate(147deg);}\n  &.towards-148-deg {.wind-rotate(148deg);}\n  &.towards-149-deg {.wind-rotate(149deg);}\n  &.towards-150-deg {.wind-rotate(150deg);}\n  &.towards-151-deg {.wind-rotate(151deg);}\n  &.towards-152-deg {.wind-rotate(152deg);}\n  &.towards-153-deg {.wind-rotate(153deg);}\n  &.towards-154-deg {.wind-rotate(154deg);}\n  &.towards-155-deg {.wind-rotate(155deg);}\n  &.towards-156-deg {.wind-rotate(156deg);}\n  &.towards-157-deg {.wind-rotate(157deg);}\n  &.towards-158-deg {.wind-rotate(158deg);}\n  &.towards-159-deg {.wind-rotate(159deg);}\n  &.towards-160-deg {.wind-rotate(160deg);}\n  &.towards-161-deg {.wind-rotate(161deg);}\n  &.towards-162-deg {.wind-rotate(162deg);}\n  &.towards-163-deg {.wind-rotate(163deg);}\n  &.towards-164-deg {.wind-rotate(164deg);}\n  &.towards-165-deg {.wind-rotate(165deg);}\n  &.towards-166-deg {.wind-rotate(166deg);}\n  &.towards-167-deg {.wind-rotate(167deg);}\n  &.towards-168-deg {.wind-rotate(168deg);}\n  &.towards-169-deg {.wind-rotate(169deg);}\n  &.towards-170-deg {.wind-rotate(170deg);}\n  &.towards-171-deg {.wind-rotate(171deg);}\n  &.towards-172-deg {.wind-rotate(172deg);}\n  &.towards-173-deg {.wind-rotate(173deg);}\n  &.towards-174-deg {.wind-rotate(174deg);}\n  &.towards-175-deg {.wind-rotate(175deg);}\n  &.towards-176-deg {.wind-rotate(176deg);}\n  &.towards-177-deg {.wind-rotate(177deg);}\n  &.towards-178-deg {.wind-rotate(178deg);}\n  &.towards-179-deg {.wind-rotate(179deg);}\n  &.towards-180-deg {.wind-rotate(180deg);}\n  &.towards-181-deg {.wind-rotate(181deg);}\n  &.towards-182-deg {.wind-rotate(182deg);}\n  &.towards-183-deg {.wind-rotate(183deg);}\n  &.towards-184-deg {.wind-rotate(184deg);}\n  &.towards-185-deg {.wind-rotate(185deg);}\n  &.towards-186-deg {.wind-rotate(186deg);}\n  &.towards-187-deg {.wind-rotate(187deg);}\n  &.towards-188-deg {.wind-rotate(188deg);}\n  &.towards-189-deg {.wind-rotate(189deg);}\n  &.towards-190-deg {.wind-rotate(190deg);}\n  &.towards-191-deg {.wind-rotate(191deg);}\n  &.towards-192-deg {.wind-rotate(192deg);}\n  &.towards-193-deg {.wind-rotate(193deg);}\n  &.towards-194-deg {.wind-rotate(194deg);}\n  &.towards-195-deg {.wind-rotate(195deg);}\n  &.towards-196-deg {.wind-rotate(196deg);}\n  &.towards-197-deg {.wind-rotate(197deg);}\n  &.towards-198-deg {.wind-rotate(198deg);}\n  &.towards-199-deg {.wind-rotate(199deg);}\n  &.towards-200-deg {.wind-rotate(200deg);}\n  &.towards-201-deg {.wind-rotate(201deg);}\n  &.towards-202-deg {.wind-rotate(202deg);}\n  &.towards-203-deg {.wind-rotate(203deg);}\n  &.towards-204-deg {.wind-rotate(204deg);}\n  &.towards-205-deg {.wind-rotate(205deg);}\n  &.towards-206-deg {.wind-rotate(206deg);}\n  &.towards-207-deg {.wind-rotate(207deg);}\n  &.towards-208-deg {.wind-rotate(208deg);}\n  &.towards-209-deg {.wind-rotate(209deg);}\n  &.towards-210-deg {.wind-rotate(210deg);}\n  &.towards-211-deg {.wind-rotate(211deg);}\n  &.towards-212-deg {.wind-rotate(212deg);}\n  &.towards-213-deg {.wind-rotate(213deg);}\n  &.towards-214-deg {.wind-rotate(214deg);}\n  &.towards-215-deg {.wind-rotate(215deg);}\n  &.towards-216-deg {.wind-rotate(216deg);}\n  &.towards-217-deg {.wind-rotate(217deg);}\n  &.towards-218-deg {.wind-rotate(218deg);}\n  &.towards-219-deg {.wind-rotate(219deg);}\n  &.towards-220-deg {.wind-rotate(220deg);}\n  &.towards-221-deg {.wind-rotate(221deg);}\n  &.towards-222-deg {.wind-rotate(222deg);}\n  &.towards-223-deg {.wind-rotate(223deg);}\n  &.towards-224-deg {.wind-rotate(224deg);}\n  &.towards-225-deg {.wind-rotate(225deg);}\n  &.towards-226-deg {.wind-rotate(226deg);}\n  &.towards-227-deg {.wind-rotate(227deg);}\n  &.towards-228-deg {.wind-rotate(228deg);}\n  &.towards-229-deg {.wind-rotate(229deg);}\n  &.towards-230-deg {.wind-rotate(230deg);}\n  &.towards-231-deg {.wind-rotate(231deg);}\n  &.towards-232-deg {.wind-rotate(232deg);}\n  &.towards-233-deg {.wind-rotate(233deg);}\n  &.towards-234-deg {.wind-rotate(234deg);}\n  &.towards-235-deg {.wind-rotate(235deg);}\n  &.towards-236-deg {.wind-rotate(236deg);}\n  &.towards-237-deg {.wind-rotate(237deg);}\n  &.towards-238-deg {.wind-rotate(238deg);}\n  &.towards-239-deg {.wind-rotate(239deg);}\n  &.towards-240-deg {.wind-rotate(240deg);}\n  &.towards-241-deg {.wind-rotate(241deg);}\n  &.towards-242-deg {.wind-rotate(242deg);}\n  &.towards-243-deg {.wind-rotate(243deg);}\n  &.towards-244-deg {.wind-rotate(244deg);}\n  &.towards-245-deg {.wind-rotate(245deg);}\n  &.towards-246-deg {.wind-rotate(246deg);}\n  &.towards-247-deg {.wind-rotate(247deg);}\n  &.towards-248-deg {.wind-rotate(248deg);}\n  &.towards-249-deg {.wind-rotate(249deg);}\n  &.towards-250-deg {.wind-rotate(250deg);}\n  &.towards-251-deg {.wind-rotate(251deg);}\n  &.towards-252-deg {.wind-rotate(252deg);}\n  &.towards-253-deg {.wind-rotate(253deg);}\n  &.towards-254-deg {.wind-rotate(254deg);}\n  &.towards-255-deg {.wind-rotate(255deg);}\n  &.towards-256-deg {.wind-rotate(256deg);}\n  &.towards-257-deg {.wind-rotate(257deg);}\n  &.towards-258-deg {.wind-rotate(258deg);}\n  &.towards-259-deg {.wind-rotate(259deg);}\n  &.towards-260-deg {.wind-rotate(260deg);}\n  &.towards-261-deg {.wind-rotate(261deg);}\n  &.towards-262-deg {.wind-rotate(262deg);}\n  &.towards-263-deg {.wind-rotate(263deg);}\n  &.towards-264-deg {.wind-rotate(264deg);}\n  &.towards-265-deg {.wind-rotate(265deg);}\n  &.towards-266-deg {.wind-rotate(266deg);}\n  &.towards-267-deg {.wind-rotate(267deg);}\n  &.towards-268-deg {.wind-rotate(268deg);}\n  &.towards-269-deg {.wind-rotate(269deg);}\n  &.towards-270-deg {.wind-rotate(270deg);}\n  &.towards-271-deg {.wind-rotate(271deg);}\n  &.towards-272-deg {.wind-rotate(272deg);}\n  &.towards-273-deg {.wind-rotate(273deg);}\n  &.towards-274-deg {.wind-rotate(274deg);}\n  &.towards-275-deg {.wind-rotate(275deg);}\n  &.towards-276-deg {.wind-rotate(276deg);}\n  &.towards-277-deg {.wind-rotate(277deg);}\n  &.towards-278-deg {.wind-rotate(278deg);}\n  &.towards-279-deg {.wind-rotate(279deg);}\n  &.towards-280-deg {.wind-rotate(280deg);}\n  &.towards-281-deg {.wind-rotate(281deg);}\n  &.towards-282-deg {.wind-rotate(282deg);}\n  &.towards-283-deg {.wind-rotate(283deg);}\n  &.towards-284-deg {.wind-rotate(284deg);}\n  &.towards-285-deg {.wind-rotate(285deg);}\n  &.towards-286-deg {.wind-rotate(286deg);}\n  &.towards-287-deg {.wind-rotate(287deg);}\n  &.towards-288-deg {.wind-rotate(288deg);}\n  &.towards-289-deg {.wind-rotate(289deg);}\n  &.towards-290-deg {.wind-rotate(290deg);}\n  &.towards-291-deg {.wind-rotate(291deg);}\n  &.towards-292-deg {.wind-rotate(292deg);}\n  &.towards-293-deg {.wind-rotate(293deg);}\n  &.towards-294-deg {.wind-rotate(294deg);}\n  &.towards-295-deg {.wind-rotate(295deg);}\n  &.towards-296-deg {.wind-rotate(296deg);}\n  &.towards-297-deg {.wind-rotate(297deg);}\n  &.towards-298-deg {.wind-rotate(298deg);}\n  &.towards-299-deg {.wind-rotate(299deg);}\n  &.towards-300-deg {.wind-rotate(300deg);}\n  &.towards-301-deg {.wind-rotate(301deg);}\n  &.towards-302-deg {.wind-rotate(302deg);}\n  &.towards-303-deg {.wind-rotate(303deg);}\n  &.towards-304-deg {.wind-rotate(304deg);}\n  &.towards-305-deg {.wind-rotate(305deg);}\n  &.towards-306-deg {.wind-rotate(306deg);}\n  &.towards-307-deg {.wind-rotate(307deg);}\n  &.towards-308-deg {.wind-rotate(308deg);}\n  &.towards-309-deg {.wind-rotate(309deg);}\n  &.towards-310-deg {.wind-rotate(310deg);}\n  &.towards-311-deg {.wind-rotate(311deg);}\n  &.towards-312-deg {.wind-rotate(312deg);}\n  &.towards-313-deg {.wind-rotate(313deg);}\n  &.towards-314-deg {.wind-rotate(314deg);}\n  &.towards-315-deg {.wind-rotate(315deg);}\n  &.towards-316-deg {.wind-rotate(316deg);}\n  &.towards-317-deg {.wind-rotate(317deg);}\n  &.towards-318-deg {.wind-rotate(318deg);}\n  &.towards-319-deg {.wind-rotate(319deg);}\n  &.towards-320-deg {.wind-rotate(320deg);}\n  &.towards-321-deg {.wind-rotate(321deg);}\n  &.towards-322-deg {.wind-rotate(322deg);}\n  &.towards-323-deg {.wind-rotate(323deg);}\n  &.towards-324-deg {.wind-rotate(324deg);}\n  &.towards-325-deg {.wind-rotate(325deg);}\n  &.towards-326-deg {.wind-rotate(326deg);}\n  &.towards-327-deg {.wind-rotate(327deg);}\n  &.towards-328-deg {.wind-rotate(328deg);}\n  &.towards-329-deg {.wind-rotate(329deg);}\n  &.towards-330-deg {.wind-rotate(330deg);}\n  &.towards-331-deg {.wind-rotate(331deg);}\n  &.towards-332-deg {.wind-rotate(332deg);}\n  &.towards-333-deg {.wind-rotate(333deg);}\n  &.towards-334-deg {.wind-rotate(334deg);}\n  &.towards-335-deg {.wind-rotate(335deg);}\n  &.towards-336-deg {.wind-rotate(336deg);}\n  &.towards-337-deg {.wind-rotate(337deg);}\n  &.towards-338-deg {.wind-rotate(338deg);}\n  &.towards-339-deg {.wind-rotate(339deg);}\n  &.towards-340-deg {.wind-rotate(340deg);}\n  &.towards-341-deg {.wind-rotate(341deg);}\n  &.towards-342-deg {.wind-rotate(342deg);}\n  &.towards-343-deg {.wind-rotate(343deg);}\n  &.towards-344-deg {.wind-rotate(344deg);}\n  &.towards-345-deg {.wind-rotate(345deg);}\n  &.towards-346-deg {.wind-rotate(346deg);}\n  &.towards-347-deg {.wind-rotate(347deg);}\n  &.towards-348-deg {.wind-rotate(348deg);}\n  &.towards-349-deg {.wind-rotate(349deg);}\n  &.towards-350-deg {.wind-rotate(350deg);}\n  &.towards-351-deg {.wind-rotate(351deg);}\n  &.towards-352-deg {.wind-rotate(352deg);}\n  &.towards-353-deg {.wind-rotate(353deg);}\n  &.towards-354-deg {.wind-rotate(354deg);}\n  &.towards-355-deg {.wind-rotate(355deg);}\n  &.towards-356-deg {.wind-rotate(356deg);}\n  &.towards-357-deg {.wind-rotate(357deg);}\n  &.towards-358-deg {.wind-rotate(358deg);}\n  &.towards-359-deg {.wind-rotate(359deg);}\n  &.towards-360-deg {.wind-rotate(0deg);}\n  &.from-0-deg {.wind-rotate(180deg);}\n  &.from-1-deg {.wind-rotate(181deg);}\n  &.from-2-deg {.wind-rotate(182deg);}\n  &.from-3-deg {.wind-rotate(183deg);}\n  &.from-4-deg {.wind-rotate(184deg);}\n  &.from-5-deg {.wind-rotate(185deg);}\n  &.from-6-deg {.wind-rotate(186deg);}\n  &.from-7-deg {.wind-rotate(187deg);}\n  &.from-8-deg {.wind-rotate(188deg);}\n  &.from-9-deg {.wind-rotate(189deg);}\n  &.from-10-deg {.wind-rotate(190deg);}\n  &.from-11-deg {.wind-rotate(191deg);}\n  &.from-12-deg {.wind-rotate(192deg);}\n  &.from-13-deg {.wind-rotate(193deg);}\n  &.from-14-deg {.wind-rotate(194deg);}\n  &.from-15-deg {.wind-rotate(195deg);}\n  &.from-16-deg {.wind-rotate(196deg);}\n  &.from-17-deg {.wind-rotate(197deg);}\n  &.from-18-deg {.wind-rotate(198deg);}\n  &.from-19-deg {.wind-rotate(199deg);}\n  &.from-20-deg {.wind-rotate(200deg);}\n  &.from-21-deg {.wind-rotate(201deg);}\n  &.from-22-deg {.wind-rotate(202deg);}\n  &.from-23-deg {.wind-rotate(203deg);}\n  &.from-24-deg {.wind-rotate(204deg);}\n  &.from-25-deg {.wind-rotate(205deg);}\n  &.from-26-deg {.wind-rotate(206deg);}\n  &.from-27-deg {.wind-rotate(207deg);}\n  &.from-28-deg {.wind-rotate(208deg);}\n  &.from-29-deg {.wind-rotate(209deg);}\n  &.from-30-deg {.wind-rotate(210deg);}\n  &.from-31-deg {.wind-rotate(211deg);}\n  &.from-32-deg {.wind-rotate(212deg);}\n  &.from-33-deg {.wind-rotate(213deg);}\n  &.from-34-deg {.wind-rotate(214deg);}\n  &.from-35-deg {.wind-rotate(215deg);}\n  &.from-36-deg {.wind-rotate(216deg);}\n  &.from-37-deg {.wind-rotate(217deg);}\n  &.from-38-deg {.wind-rotate(218deg);}\n  &.from-39-deg {.wind-rotate(219deg);}\n  &.from-40-deg {.wind-rotate(220deg);}\n  &.from-41-deg {.wind-rotate(221deg);}\n  &.from-42-deg {.wind-rotate(222deg);}\n  &.from-43-deg {.wind-rotate(223deg);}\n  &.from-44-deg {.wind-rotate(224deg);}\n  &.from-45-deg {.wind-rotate(225deg);}\n  &.from-46-deg {.wind-rotate(226deg);}\n  &.from-47-deg {.wind-rotate(227deg);}\n  &.from-48-deg {.wind-rotate(228deg);}\n  &.from-49-deg {.wind-rotate(229deg);}\n  &.from-50-deg {.wind-rotate(230deg);}\n  &.from-51-deg {.wind-rotate(231deg);}\n  &.from-52-deg {.wind-rotate(232deg);}\n  &.from-53-deg {.wind-rotate(233deg);}\n  &.from-54-deg {.wind-rotate(234deg);}\n  &.from-55-deg {.wind-rotate(235deg);}\n  &.from-56-deg {.wind-rotate(236deg);}\n  &.from-57-deg {.wind-rotate(237deg);}\n  &.from-58-deg {.wind-rotate(238deg);}\n  &.from-59-deg {.wind-rotate(239deg);}\n  &.from-60-deg {.wind-rotate(240deg);}\n  &.from-61-deg {.wind-rotate(241deg);}\n  &.from-62-deg {.wind-rotate(242deg);}\n  &.from-63-deg {.wind-rotate(243deg);}\n  &.from-64-deg {.wind-rotate(244deg);}\n  &.from-65-deg {.wind-rotate(245deg);}\n  &.from-66-deg {.wind-rotate(246deg);}\n  &.from-67-deg {.wind-rotate(247deg);}\n  &.from-68-deg {.wind-rotate(248deg);}\n  &.from-69-deg {.wind-rotate(249deg);}\n  &.from-70-deg {.wind-rotate(250deg);}\n  &.from-71-deg {.wind-rotate(251deg);}\n  &.from-72-deg {.wind-rotate(252deg);}\n  &.from-73-deg {.wind-rotate(253deg);}\n  &.from-74-deg {.wind-rotate(254deg);}\n  &.from-75-deg {.wind-rotate(255deg);}\n  &.from-76-deg {.wind-rotate(256deg);}\n  &.from-77-deg {.wind-rotate(257deg);}\n  &.from-78-deg {.wind-rotate(258deg);}\n  &.from-79-deg {.wind-rotate(259deg);}\n  &.from-80-deg {.wind-rotate(260deg);}\n  &.from-81-deg {.wind-rotate(261deg);}\n  &.from-82-deg {.wind-rotate(262deg);}\n  &.from-83-deg {.wind-rotate(263deg);}\n  &.from-84-deg {.wind-rotate(264deg);}\n  &.from-85-deg {.wind-rotate(265deg);}\n  &.from-86-deg {.wind-rotate(266deg);}\n  &.from-87-deg {.wind-rotate(267deg);}\n  &.from-88-deg {.wind-rotate(268deg);}\n  &.from-89-deg {.wind-rotate(269deg);}\n  &.from-90-deg {.wind-rotate(270deg);}\n  &.from-91-deg {.wind-rotate(271deg);}\n  &.from-92-deg {.wind-rotate(272deg);}\n  &.from-93-deg {.wind-rotate(273deg);}\n  &.from-94-deg {.wind-rotate(274deg);}\n  &.from-95-deg {.wind-rotate(275deg);}\n  &.from-96-deg {.wind-rotate(276deg);}\n  &.from-97-deg {.wind-rotate(277deg);}\n  &.from-98-deg {.wind-rotate(278deg);}\n  &.from-99-deg {.wind-rotate(279deg);}\n  &.from-100-deg {.wind-rotate(280deg);}\n  &.from-101-deg {.wind-rotate(281deg);}\n  &.from-102-deg {.wind-rotate(282deg);}\n  &.from-103-deg {.wind-rotate(283deg);}\n  &.from-104-deg {.wind-rotate(284deg);}\n  &.from-105-deg {.wind-rotate(285deg);}\n  &.from-106-deg {.wind-rotate(286deg);}\n  &.from-107-deg {.wind-rotate(287deg);}\n  &.from-108-deg {.wind-rotate(288deg);}\n  &.from-109-deg {.wind-rotate(289deg);}\n  &.from-110-deg {.wind-rotate(290deg);}\n  &.from-111-deg {.wind-rotate(291deg);}\n  &.from-112-deg {.wind-rotate(292deg);}\n  &.from-113-deg {.wind-rotate(293deg);}\n  &.from-114-deg {.wind-rotate(294deg);}\n  &.from-115-deg {.wind-rotate(295deg);}\n  &.from-116-deg {.wind-rotate(296deg);}\n  &.from-117-deg {.wind-rotate(297deg);}\n  &.from-118-deg {.wind-rotate(298deg);}\n  &.from-119-deg {.wind-rotate(299deg);}\n  &.from-120-deg {.wind-rotate(300deg);}\n  &.from-121-deg {.wind-rotate(301deg);}\n  &.from-122-deg {.wind-rotate(302deg);}\n  &.from-123-deg {.wind-rotate(303deg);}\n  &.from-124-deg {.wind-rotate(304deg);}\n  &.from-125-deg {.wind-rotate(305deg);}\n  &.from-126-deg {.wind-rotate(306deg);}\n  &.from-127-deg {.wind-rotate(307deg);}\n  &.from-128-deg {.wind-rotate(308deg);}\n  &.from-129-deg {.wind-rotate(309deg);}\n  &.from-130-deg {.wind-rotate(310deg);}\n  &.from-131-deg {.wind-rotate(311deg);}\n  &.from-132-deg {.wind-rotate(312deg);}\n  &.from-133-deg {.wind-rotate(313deg);}\n  &.from-134-deg {.wind-rotate(314deg);}\n  &.from-135-deg {.wind-rotate(315deg);}\n  &.from-136-deg {.wind-rotate(316deg);}\n  &.from-137-deg {.wind-rotate(317deg);}\n  &.from-138-deg {.wind-rotate(318deg);}\n  &.from-139-deg {.wind-rotate(319deg);}\n  &.from-140-deg {.wind-rotate(320deg);}\n  &.from-141-deg {.wind-rotate(321deg);}\n  &.from-142-deg {.wind-rotate(322deg);}\n  &.from-143-deg {.wind-rotate(323deg);}\n  &.from-144-deg {.wind-rotate(324deg);}\n  &.from-145-deg {.wind-rotate(325deg);}\n  &.from-146-deg {.wind-rotate(326deg);}\n  &.from-147-deg {.wind-rotate(327deg);}\n  &.from-148-deg {.wind-rotate(328deg);}\n  &.from-149-deg {.wind-rotate(329deg);}\n  &.from-150-deg {.wind-rotate(330deg);}\n  &.from-151-deg {.wind-rotate(331deg);}\n  &.from-152-deg {.wind-rotate(332deg);}\n  &.from-153-deg {.wind-rotate(333deg);}\n  &.from-154-deg {.wind-rotate(334deg);}\n  &.from-155-deg {.wind-rotate(335deg);}\n  &.from-156-deg {.wind-rotate(336deg);}\n  &.from-157-deg {.wind-rotate(337deg);}\n  &.from-158-deg {.wind-rotate(338deg);}\n  &.from-159-deg {.wind-rotate(339deg);}\n  &.from-160-deg {.wind-rotate(340deg);}\n  &.from-161-deg {.wind-rotate(341deg);}\n  &.from-162-deg {.wind-rotate(342deg);}\n  &.from-163-deg {.wind-rotate(343deg);}\n  &.from-164-deg {.wind-rotate(344deg);}\n  &.from-165-deg {.wind-rotate(345deg);}\n  &.from-166-deg {.wind-rotate(346deg);}\n  &.from-167-deg {.wind-rotate(347deg);}\n  &.from-168-deg {.wind-rotate(348deg);}\n  &.from-169-deg {.wind-rotate(349deg);}\n  &.from-170-deg {.wind-rotate(350deg);}\n  &.from-171-deg {.wind-rotate(351deg);}\n  &.from-172-deg {.wind-rotate(352deg);}\n  &.from-173-deg {.wind-rotate(353deg);}\n  &.from-174-deg {.wind-rotate(354deg);}\n  &.from-175-deg {.wind-rotate(355deg);}\n  &.from-176-deg {.wind-rotate(356deg);}\n  &.from-177-deg {.wind-rotate(357deg);}\n  &.from-178-deg {.wind-rotate(358deg);}\n  &.from-179-deg {.wind-rotate(359deg);}\n  &.from-180-deg {.wind-rotate(0deg);}\n  &.from-181-deg {.wind-rotate(1deg);}\n  &.from-182-deg {.wind-rotate(2deg);}\n  &.from-183-deg {.wind-rotate(3deg);}\n  &.from-184-deg {.wind-rotate(4deg);}\n  &.from-185-deg {.wind-rotate(5deg);}\n  &.from-186-deg {.wind-rotate(6deg);}\n  &.from-187-deg {.wind-rotate(7deg);}\n  &.from-188-deg {.wind-rotate(8deg);}\n  &.from-189-deg {.wind-rotate(9deg);}\n  &.from-190-deg {.wind-rotate(10deg);}\n  &.from-191-deg {.wind-rotate(11deg);}\n  &.from-192-deg {.wind-rotate(12deg);}\n  &.from-193-deg {.wind-rotate(13deg);}\n  &.from-194-deg {.wind-rotate(14deg);}\n  &.from-195-deg {.wind-rotate(15deg);}\n  &.from-196-deg {.wind-rotate(16deg);}\n  &.from-197-deg {.wind-rotate(17deg);}\n  &.from-198-deg {.wind-rotate(18deg);}\n  &.from-199-deg {.wind-rotate(19deg);}\n  &.from-200-deg {.wind-rotate(20deg);}\n  &.from-201-deg {.wind-rotate(21deg);}\n  &.from-202-deg {.wind-rotate(22deg);}\n  &.from-203-deg {.wind-rotate(23deg);}\n  &.from-204-deg {.wind-rotate(24deg);}\n  &.from-205-deg {.wind-rotate(25deg);}\n  &.from-206-deg {.wind-rotate(26deg);}\n  &.from-207-deg {.wind-rotate(27deg);}\n  &.from-208-deg {.wind-rotate(28deg);}\n  &.from-209-deg {.wind-rotate(29deg);}\n  &.from-210-deg {.wind-rotate(30deg);}\n  &.from-211-deg {.wind-rotate(31deg);}\n  &.from-212-deg {.wind-rotate(32deg);}\n  &.from-213-deg {.wind-rotate(33deg);}\n  &.from-214-deg {.wind-rotate(34deg);}\n  &.from-215-deg {.wind-rotate(35deg);}\n  &.from-216-deg {.wind-rotate(36deg);}\n  &.from-217-deg {.wind-rotate(37deg);}\n  &.from-218-deg {.wind-rotate(38deg);}\n  &.from-219-deg {.wind-rotate(39deg);}\n  &.from-220-deg {.wind-rotate(40deg);}\n  &.from-221-deg {.wind-rotate(41deg);}\n  &.from-222-deg {.wind-rotate(42deg);}\n  &.from-223-deg {.wind-rotate(43deg);}\n  &.from-224-deg {.wind-rotate(44deg);}\n  &.from-225-deg {.wind-rotate(45deg);}\n  &.from-226-deg {.wind-rotate(46deg);}\n  &.from-227-deg {.wind-rotate(47deg);}\n  &.from-228-deg {.wind-rotate(48deg);}\n  &.from-229-deg {.wind-rotate(49deg);}\n  &.from-230-deg {.wind-rotate(50deg);}\n  &.from-231-deg {.wind-rotate(51deg);}\n  &.from-232-deg {.wind-rotate(52deg);}\n  &.from-233-deg {.wind-rotate(53deg);}\n  &.from-234-deg {.wind-rotate(54deg);}\n  &.from-235-deg {.wind-rotate(55deg);}\n  &.from-236-deg {.wind-rotate(56deg);}\n  &.from-237-deg {.wind-rotate(57deg);}\n  &.from-238-deg {.wind-rotate(58deg);}\n  &.from-239-deg {.wind-rotate(59deg);}\n  &.from-240-deg {.wind-rotate(60deg);}\n  &.from-241-deg {.wind-rotate(61deg);}\n  &.from-242-deg {.wind-rotate(62deg);}\n  &.from-243-deg {.wind-rotate(63deg);}\n  &.from-244-deg {.wind-rotate(64deg);}\n  &.from-245-deg {.wind-rotate(65deg);}\n  &.from-246-deg {.wind-rotate(66deg);}\n  &.from-247-deg {.wind-rotate(67deg);}\n  &.from-248-deg {.wind-rotate(68deg);}\n  &.from-249-deg {.wind-rotate(69deg);}\n  &.from-250-deg {.wind-rotate(70deg);}\n  &.from-251-deg {.wind-rotate(71deg);}\n  &.from-252-deg {.wind-rotate(72deg);}\n  &.from-253-deg {.wind-rotate(73deg);}\n  &.from-254-deg {.wind-rotate(74deg);}\n  &.from-255-deg {.wind-rotate(75deg);}\n  &.from-256-deg {.wind-rotate(76deg);}\n  &.from-257-deg {.wind-rotate(77deg);}\n  &.from-258-deg {.wind-rotate(78deg);}\n  &.from-259-deg {.wind-rotate(79deg);}\n  &.from-260-deg {.wind-rotate(80deg);}\n  &.from-261-deg {.wind-rotate(81deg);}\n  &.from-262-deg {.wind-rotate(82deg);}\n  &.from-263-deg {.wind-rotate(83deg);}\n  &.from-264-deg {.wind-rotate(84deg);}\n  &.from-265-deg {.wind-rotate(85deg);}\n  &.from-266-deg {.wind-rotate(86deg);}\n  &.from-267-deg {.wind-rotate(87deg);}\n  &.from-268-deg {.wind-rotate(88deg);}\n  &.from-269-deg {.wind-rotate(89deg);}\n  &.from-270-deg {.wind-rotate(90deg);}\n  &.from-271-deg {.wind-rotate(91deg);}\n  &.from-272-deg {.wind-rotate(92deg);}\n  &.from-273-deg {.wind-rotate(93deg);}\n  &.from-274-deg {.wind-rotate(94deg);}\n  &.from-275-deg {.wind-rotate(95deg);}\n  &.from-276-deg {.wind-rotate(96deg);}\n  &.from-277-deg {.wind-rotate(97deg);}\n  &.from-278-deg {.wind-rotate(98deg);}\n  &.from-279-deg {.wind-rotate(99deg);}\n  &.from-280-deg {.wind-rotate(100deg);}\n  &.from-281-deg {.wind-rotate(101deg);}\n  &.from-282-deg {.wind-rotate(102deg);}\n  &.from-283-deg {.wind-rotate(103deg);}\n  &.from-284-deg {.wind-rotate(104deg);}\n  &.from-285-deg {.wind-rotate(105deg);}\n  &.from-286-deg {.wind-rotate(106deg);}\n  &.from-287-deg {.wind-rotate(107deg);}\n  &.from-288-deg {.wind-rotate(108deg);}\n  &.from-289-deg {.wind-rotate(109deg);}\n  &.from-290-deg {.wind-rotate(110deg);}\n  &.from-291-deg {.wind-rotate(111deg);}\n  &.from-292-deg {.wind-rotate(112deg);}\n  &.from-293-deg {.wind-rotate(113deg);}\n  &.from-294-deg {.wind-rotate(114deg);}\n  &.from-295-deg {.wind-rotate(115deg);}\n  &.from-296-deg {.wind-rotate(116deg);}\n  &.from-297-deg {.wind-rotate(117deg);}\n  &.from-298-deg {.wind-rotate(118deg);}\n  &.from-299-deg {.wind-rotate(119deg);}\n  &.from-300-deg {.wind-rotate(120deg);}\n  &.from-301-deg {.wind-rotate(121deg);}\n  &.from-302-deg {.wind-rotate(122deg);}\n  &.from-303-deg {.wind-rotate(123deg);}\n  &.from-304-deg {.wind-rotate(124deg);}\n  &.from-305-deg {.wind-rotate(125deg);}\n  &.from-306-deg {.wind-rotate(126deg);}\n  &.from-307-deg {.wind-rotate(127deg);}\n  &.from-308-deg {.wind-rotate(128deg);}\n  &.from-309-deg {.wind-rotate(129deg);}\n  &.from-310-deg {.wind-rotate(130deg);}\n  &.from-311-deg {.wind-rotate(131deg);}\n  &.from-312-deg {.wind-rotate(132deg);}\n  &.from-313-deg {.wind-rotate(133deg);}\n  &.from-314-deg {.wind-rotate(134deg);}\n  &.from-315-deg {.wind-rotate(135deg);}\n  &.from-316-deg {.wind-rotate(136deg);}\n  &.from-317-deg {.wind-rotate(137deg);}\n  &.from-318-deg {.wind-rotate(138deg);}\n  &.from-319-deg {.wind-rotate(139deg);}\n  &.from-320-deg {.wind-rotate(140deg);}\n  &.from-321-deg {.wind-rotate(141deg);}\n  &.from-322-deg {.wind-rotate(142deg);}\n  &.from-323-deg {.wind-rotate(143deg);}\n  &.from-324-deg {.wind-rotate(144deg);}\n  &.from-325-deg {.wind-rotate(145deg);}\n  &.from-326-deg {.wind-rotate(146deg);}\n  &.from-327-deg {.wind-rotate(147deg);}\n  &.from-328-deg {.wind-rotate(148deg);}\n  &.from-329-deg {.wind-rotate(149deg);}\n  &.from-330-deg {.wind-rotate(150deg);}\n  &.from-331-deg {.wind-rotate(151deg);}\n  &.from-332-deg {.wind-rotate(152deg);}\n  &.from-333-deg {.wind-rotate(153deg);}\n  &.from-334-deg {.wind-rotate(154deg);}\n  &.from-335-deg {.wind-rotate(155deg);}\n  &.from-336-deg {.wind-rotate(156deg);}\n  &.from-337-deg {.wind-rotate(157deg);}\n  &.from-338-deg {.wind-rotate(158deg);}\n  &.from-339-deg {.wind-rotate(159deg);}\n  &.from-340-deg {.wind-rotate(160deg);}\n  &.from-341-deg {.wind-rotate(161deg);}\n  &.from-342-deg {.wind-rotate(162deg);}\n  &.from-343-deg {.wind-rotate(163deg);}\n  &.from-344-deg {.wind-rotate(164deg);}\n  &.from-345-deg {.wind-rotate(165deg);}\n  &.from-346-deg {.wind-rotate(166deg);}\n  &.from-347-deg {.wind-rotate(167deg);}\n  &.from-348-deg {.wind-rotate(168deg);}\n  &.from-349-deg {.wind-rotate(169deg);}\n  &.from-350-deg {.wind-rotate(170deg);}\n  &.from-351-deg {.wind-rotate(171deg);}\n  &.from-352-deg {.wind-rotate(172deg);}\n  &.from-353-deg {.wind-rotate(173deg);}\n  &.from-354-deg {.wind-rotate(174deg);}\n  &.from-355-deg {.wind-rotate(175deg);}\n  &.from-356-deg {.wind-rotate(176deg);}\n  &.from-357-deg {.wind-rotate(177deg);}\n  &.from-358-deg {.wind-rotate(178deg);}\n  &.from-359-deg {.wind-rotate(179deg);}\n  &.from-360-deg {.wind-rotate(180deg);} \n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-classes/classes-wind.less",
    "content": "// Wind Variables 2.0\n\n@wind: \"\\f0b1\";\n\n.@{wi-css-prefix}-wind:before { content: @wind; }\n.wind-rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n  -moz-transform: rotate(@degrees);\n  -ms-transform: rotate(@degrees);\n  -o-transform: rotate(@degrees);\n  transform: rotate(@degrees);\n}\n\n@import \"classes-wind-degrees.less\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-beaufort.less",
    "content": "@wind-beaufort-0: \"\\f0b7\";\n@wind-beaufort-1: \"\\f0b8\";\n@wind-beaufort-2: \"\\f0b9\";\n@wind-beaufort-3: \"\\f0ba\";\n@wind-beaufort-4: \"\\f0bb\";\n@wind-beaufort-5: \"\\f0bc\";\n@wind-beaufort-6: \"\\f0bd\";\n@wind-beaufort-7: \"\\f0be\";\n@wind-beaufort-8: \"\\f0bf\";\n@wind-beaufort-9: \"\\f0c0\";\n@wind-beaufort-10: \"\\f0c1\";\n@wind-beaufort-11: \"\\f0c2\";\n@wind-beaufort-12: \"\\f0c3\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-day.less",
    "content": "@day-sunny: \"\\f00d\";\n@day-cloudy: \"\\f002\";\n@day-cloudy-gusts: \"\\f000\";\n@day-cloudy-windy: \"\\f001\";\n@day-fog: \"\\f003\";\n@day-hail: \"\\f004\";\n@day-haze: \"\\f0b6\";\n@day-lightning: \"\\f005\";\n@day-rain: \"\\f008\";\n@day-rain-mix: \"\\f006\";\n@day-rain-wind: \"\\f007\";\n@day-showers: \"\\f009\";\n@day-sleet: \"\\f0b2\";\n@day-sleet-storm: \"\\f068\";\n@day-snow: \"\\f00a\";\n@day-snow-thunderstorm: \"\\f06b\";\n@day-snow-wind: \"\\f065\";\n@day-sprinkle: \"\\f00b\";\n@day-storm-showers: \"\\f00e\";\n@day-sunny-overcast: \"\\f00c\";\n@day-thunderstorm: \"\\f010\";\n@day-windy: \"\\f085\";\n@solar-eclipse: \"\\f06e\";\n@hot: \"\\f072\";\n@day-cloudy-high: \"\\f07d\";\n@day-light-wind: \"\\f0c4\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-direction.less",
    "content": "@direction-up: \"\\f058\";\n@direction-up-right: \"\\f057\";\n@direction-right: \"\\f04d\";\n@direction-down-right: \"\\f088\";\n@direction-down: \"\\f044\";\n@direction-down-left: \"\\f043\";\n@direction-left: \"\\f048\";\n@direction-up-left: \"\\f087\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-misc.less",
    "content": "@alien: \"\\f075\";\n@celsius: \"\\f03c\";\n@fahrenheit: \"\\f045\";\n@degrees: \"\\f042\";\n@thermometer: \"\\f055\";\n@thermometer-exterior: \"\\f053\";\n@thermometer-internal: \"\\f054\";\n@cloud-down: \"\\f03d\";\n@cloud-up: \"\\f040\";\n@cloud-refresh: \"\\f03e\";\n@horizon: \"\\f047\";\n@horizon-alt: \"\\f046\";\n@sunrise: \"\\f051\";\n@sunset: \"\\f052\";\n@moonrise: \"\\f0c9\";\n@moonset: \"\\f0ca\";\n@refresh: \"\\f04c\";\n@refresh-alt: \"\\f04b\";\n@umbrella: \"\\f084\";\n@barometer: \"\\f079\";\n@humidity: \"\\f07a\";\n@na: \"\\f07b\";\n@train: \"\\f0cb\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-moon.less",
    "content": "@moon-new: \"\\f095\";\n@moon-waxing-cresent-1: \"\\f096\";\n@moon-waxing-cresent-2: \"\\f097\";\n@moon-waxing-cresent-3: \"\\f098\";\n@moon-waxing-cresent-4: \"\\f099\";\n@moon-waxing-cresent-5: \"\\f09a\";\n@moon-waxing-cresent-6: \"\\f09b\";\n@moon-first-quarter: \"\\f09c\";\n@moon-waxing-gibbous-1: \"\\f09d\";\n@moon-waxing-gibbous-2: \"\\f09e\";\n@moon-waxing-gibbous-3: \"\\f09f\";\n@moon-waxing-gibbous-4: \"\\f0a0\";\n@moon-waxing-gibbous-5: \"\\f0a1\";\n@moon-waxing-gibbous-6: \"\\f0a2\";\n@moon-full: \"\\f0a3\";\n@moon-waning-gibbous-1: \"\\f0a4\";\n@moon-waning-gibbous-2: \"\\f0a5\";\n@moon-waning-gibbous-3: \"\\f0a6\";\n@moon-waning-gibbous-4: \"\\f0a7\";\n@moon-waning-gibbous-5: \"\\f0a8\";\n@moon-waning-gibbous-6: \"\\f0a9\";\n@moon-third-quarter: \"\\f0aa\";\n@moon-waning-crescent-1: \"\\f0ab\";\n@moon-waning-crescent-2: \"\\f0ac\";\n@moon-waning-crescent-3: \"\\f0ad\";\n@moon-waning-crescent-4: \"\\f0ae\";\n@moon-waning-crescent-5: \"\\f0af\";\n@moon-waning-crescent-6: \"\\f0b0\";\n@moon-alt-new: \"\\f0eb\";\n@moon-alt-waxing-cresent-1: \"\\f0d0\";\n@moon-alt-waxing-cresent-2: \"\\f0d1\";\n@moon-alt-waxing-cresent-3: \"\\f0d2\";\n@moon-alt-waxing-cresent-4: \"\\f0d3\";\n@moon-alt-waxing-cresent-5: \"\\f0d4\";\n@moon-alt-waxing-cresent-6: \"\\f0d5\";\n@moon-alt-first-quarter: \"\\f0d6\";\n@moon-alt-waxing-gibbous-1: \"\\f0d7\";\n@moon-alt-waxing-gibbous-2: \"\\f0d8\";\n@moon-alt-waxing-gibbous-3: \"\\f0d9\";\n@moon-alt-waxing-gibbous-4: \"\\f0da\";\n@moon-alt-waxing-gibbous-5: \"\\f0db\";\n@moon-alt-waxing-gibbous-6: \"\\f0dc\";\n@moon-alt-full: \"\\f0dd\";\n@moon-alt-waning-gibbous-1: \"\\f0de\";\n@moon-alt-waning-gibbous-2: \"\\f0df\";\n@moon-alt-waning-gibbous-3: \"\\f0e0\";\n@moon-alt-waning-gibbous-4: \"\\f0e1\";\n@moon-alt-waning-gibbous-5: \"\\f0e2\";\n@moon-alt-waning-gibbous-6: \"\\f0e3\";\n@moon-alt-third-quarter: \"\\f0e4\";\n@moon-alt-waning-crescent-1: \"\\f0e5\";\n@moon-alt-waning-crescent-2: \"\\f0e6\";\n@moon-alt-waning-crescent-3: \"\\f0e7\";\n@moon-alt-waning-crescent-4: \"\\f0e8\";\n@moon-alt-waning-crescent-5: \"\\f0e9\";\n@moon-alt-waning-crescent-6: \"\\f0ea\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-neutral.less",
    "content": "@cloud: \"\\f041\";\n@cloudy: \"\\f013\";\n@cloudy-gusts: \"\\f011\";\n@cloudy-windy: \"\\f012\";\n@fog: \"\\f014\";\n@hail: \"\\f015\";\n@rain: \"\\f019\";\n@rain-mix: \"\\f017\";\n@rain-wind: \"\\f018\";\n@showers: \"\\f01a\";\n@sleet: \"\\f0b5\";\n@snow: \"\\f01b\";\n@sprinkle: \"\\f01c\";\n@storm-showers: \"\\f01d\";\n@thunderstorm: \"\\f01e\";\n@snow-wind: \"\\f064\";\n@snow: \"\\f01b\";\n@smog: \"\\f074\";\n@smoke: \"\\f062\";\n@lightning: \"\\f016\";\n@raindrops: \"\\f04e\";\n@raindrop: \"\\f078\";\n@dust: \"\\f063\";\n@snowflake-cold: \"\\f076\";\n@windy: \"\\f021\";\n@strong-wind: \"\\f050\";\n@sandstorm: \"\\f082\";\n@earthquake: \"\\f0c6\";\n@fire: \"\\f0c7\";\n@flood: \"\\f07c\";\n@meteor: \"\\f071\";\n@tsunami: \"\\f0c5\";\n@volcano: \"\\f0c8\";\n@hurricane: \"\\f073\";\n@tornado: \"\\f056\";\n@small-craft-advisory: \"\\f0cc\";\n@gale-warning: \"\\f0cd\";\n@storm-warning: \"\\f0ce\";\n@hurricane-warning: \"\\f0cf\";\n@wind-direction: \"\\f0b1\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-night.less",
    "content": "@night-clear: \"\\f02e\";\n@night-alt-cloudy: \"\\f086\";\n@night-alt-cloudy-gusts: \"\\f022\";\n@night-alt-cloudy-windy: \"\\f023\";\n@night-alt-hail: \"\\f024\";\n@night-alt-lightning: \"\\f025\";\n@night-alt-rain: \"\\f028\";\n@night-alt-rain-mix: \"\\f026\";\n@night-alt-rain-wind: \"\\f027\";\n@night-alt-showers: \"\\f029\";\n@night-alt-sleet: \"\\f0b4\";\n@night-alt-sleet-storm: \"\\f06a\";\n@night-alt-snow: \"\\f02a\";\n@night-alt-snow-thunderstorm: \"\\f06d\";\n@night-alt-snow-wind: \"\\f067\";\n@night-alt-sprinkle: \"\\f02b\";\n@night-alt-storm-showers: \"\\f02c\";\n@night-alt-thunderstorm: \"\\f02d\";\n@night-cloudy: \"\\f031\";\n@night-cloudy-gusts: \"\\f02f\";\n@night-cloudy-windy: \"\\f030\";\n@night-fog: \"\\f04a\";\n@night-hail: \"\\f032\";\n@night-lightning: \"\\f033\";\n@night-partly-cloudy: \"\\f083\";\n@night-rain: \"\\f036\";\n@night-rain-mix: \"\\f034\";\n@night-rain-wind: \"\\f035\";\n@night-showers: \"\\f037\";\n@night-sleet: \"\\f0b3\";\n@night-sleet-storm: \"\\f069\";\n@night-snow: \"\\f038\";\n@night-snow-thunderstorm: \"\\f06c\";\n@night-snow-wind: \"\\f066\";\n@night-sprinkle: \"\\f039\";\n@night-storm-showers: \"\\f03a\";\n@night-thunderstorm: \"\\f03b\";\n@lunar-eclipse: \"\\f070\";\n@stars: \"\\f077\";\n@storm-showers: \"\\f01d\";\n@thunderstorm: \"\\f01e\";\n@night-alt-cloudy-high: \"\\f07e\";\n@night-cloudy-high: \"\\f080\";\n@night-alt-partly-cloudy: \"\\f081\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-time.less",
    "content": "@time-1: \"\\f08a\";\n@time-2: \"\\f08b\";\n@time-3: \"\\f08c\";\n@time-4: \"\\f08d\";\n@time-5: \"\\f08e\";\n@time-6: \"\\f08f\";\n@time-7: \"\\f090\";\n@time-8: \"\\f091\";\n@time-9: \"\\f092\";\n@time-10: \"\\f093\";\n@time-11: \"\\f094\";\n@time-12: \"\\f089\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/icon-variables/variables-wind-names.less",
    "content": "@n: \"\\f0b1\";\n@nne: \"\\f0b1\";\n@ne: \"\\f0b1\";\n@ene: \"\\f0b1\";\n@e: \"\\f0b1\";\n@ese: \"\\f0b1\";\n@se: \"\\f0b1\";\n@sse: \"\\f0b1\";\n@s: \"\\f0b1\";\n@ssw: \"\\f0b1\";\n@sw: \"\\f0b1\";\n@wsw: \"\\f0b1\";\n@w: \"\\f0b1\";\n@wnw: \"\\f0b1\";\n@nw: \"\\f0b1\";\n@nnw: \"\\f0b1\";\n@n: \"\\f0b1\";\n@nne: \"\\f0b1\";\n@ne: \"\\f0b1\";\n@ene: \"\\f0b1\";\n@e: \"\\f0b1\";\n@ese: \"\\f0b1\";\n@se: \"\\f0b1\";\n@sse: \"\\f0b1\";\n@s: \"\\f0b1\";\n@ssw: \"\\f0b1\";\n@sw: \"\\f0b1\";\n@wsw: \"\\f0b1\";\n@w: \"\\f0b1\";\n@wnw: \"\\f0b1\";\n@nw: \"\\f0b1\";\n@nnw: \"\\f0b1\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/mappings/wi-forecast-io.less",
    "content": ".@{wi-css-prefix}-forecast-io-clear-day:before            { content: @day-sunny     ; }\n.@{wi-css-prefix}-forecast-io-clear-night:before          { content: @night-clear   ; }\n.@{wi-css-prefix}-forecast-io-rain:before                 { content: @rain          ; }\n.@{wi-css-prefix}-forecast-io-snow:before                 { content: @snow          ; }\n.@{wi-css-prefix}-forecast-io-sleet:before                { content: @sleet         ; }\n.@{wi-css-prefix}-forecast-io-wind:before                 { content: @strong-wind   ; }\n.@{wi-css-prefix}-forecast-io-fog:before                  { content: @fog           ; }\n.@{wi-css-prefix}-forecast-io-cloudy:before               { content: @cloudy        ; }\n.@{wi-css-prefix}-forecast-io-partly-cloudy-day:before    { content: @day-cloudy    ; }\n.@{wi-css-prefix}-forecast-io-partly-cloudy-night:before  { content: @night-cloudy  ; }\n.@{wi-css-prefix}-forecast-io-hail:before                 { content: @hail          ; }\n.@{wi-css-prefix}-forecast-io-thunderstorm:before         { content: @thunderstorm  ; }\n.@{wi-css-prefix}-forecast-io-tornado:before              { content: @tornado       ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/mappings/wi-owm.less",
    "content": "// Neutral\n    .@{wi-css-prefix}-owm-200:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-201:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-202:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-210:before                            { content: @lightning                   ; }\n    .@{wi-css-prefix}-owm-211:before                            { content: @lightning                   ; }\n    .@{wi-css-prefix}-owm-212:before                            { content: @lightning                   ; }\n    .@{wi-css-prefix}-owm-221:before                            { content: @lightning                   ; }\n    .@{wi-css-prefix}-owm-230:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-231:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-232:before                            { content: @thunderstorm                ; }\n    .@{wi-css-prefix}-owm-300:before                            { content: @sprinkle                    ; }\n    .@{wi-css-prefix}-owm-301:before                            { content: @sprinkle                    ; }\n    .@{wi-css-prefix}-owm-302:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-310:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-311:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-312:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-313:before                            { content: @showers                     ; }\n    .@{wi-css-prefix}-owm-314:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-321:before                            { content: @sprinkle                    ; }\n    .@{wi-css-prefix}-owm-500:before                            { content: @sprinkle                    ; }\n    .@{wi-css-prefix}-owm-501:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-502:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-503:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-504:before                            { content: @rain                        ; }\n    .@{wi-css-prefix}-owm-511:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-520:before                            { content: @showers                     ; }\n    .@{wi-css-prefix}-owm-521:before                            { content: @showers                     ; }\n    .@{wi-css-prefix}-owm-522:before                            { content: @showers                     ; }\n    .@{wi-css-prefix}-owm-531:before                            { content: @storm-showers               ; }\n    .@{wi-css-prefix}-owm-600:before                            { content: @snow                        ; }\n    .@{wi-css-prefix}-owm-601:before                            { content: @snow                        ; }\n    .@{wi-css-prefix}-owm-602:before                            { content: @sleet                       ; }\n    .@{wi-css-prefix}-owm-611:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-612:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-615:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-616:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-620:before                            { content: @rain-mix                    ; }\n    .@{wi-css-prefix}-owm-621:before                            { content: @snow                        ; }\n    .@{wi-css-prefix}-owm-622:before                            { content: @snow                        ; }\n    .@{wi-css-prefix}-owm-701:before                            { content: @showers                     ; }\n    .@{wi-css-prefix}-owm-711:before                            { content: @smoke                       ; }\n    .@{wi-css-prefix}-owm-721:before                            { content: @day-haze                    ; }\n    .@{wi-css-prefix}-owm-731:before                            { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-741:before                            { content: @fog                         ; }\n    .@{wi-css-prefix}-owm-761:before                            { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-762:before                            { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-771:before                            { content: @cloudy-gusts                ; }\n    .@{wi-css-prefix}-owm-781:before                            { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-800:before                            { content: @day-sunny                   ; }\n    .@{wi-css-prefix}-owm-801:before                            { content: @cloudy-gusts                ; }\n    .@{wi-css-prefix}-owm-802:before                            { content: @cloudy-gusts                ; }\n    .@{wi-css-prefix}-owm-803:before                            { content: @cloudy-gusts                ; }\n    .@{wi-css-prefix}-owm-803:before                            { content: @cloudy-windy                ; }\n    .@{wi-css-prefix}-owm-804:before                            { content: @cloudy                      ; }\n    .@{wi-css-prefix}-owm-900:before                            { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-901:before                            { content: @storm-showers               ; }\n    .@{wi-css-prefix}-owm-902:before                            { content: @hurricane                   ; }\n    .@{wi-css-prefix}-owm-903:before                            { content: @snowflake-cold              ; }\n    .@{wi-css-prefix}-owm-904:before                            { content: @hot                         ; }\n    .@{wi-css-prefix}-owm-905:before                            { content: @windy                       ; }\n    .@{wi-css-prefix}-owm-906:before                            { content: @hail                        ; }\n    .@{wi-css-prefix}-owm-957:before                            { content: @strong-wind                 ; }\n    //Day\n    .@{wi-css-prefix}-owm-day-200:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-201:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-202:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-210:before                        { content: @day-lightning               ; }\n    .@{wi-css-prefix}-owm-day-211:before                        { content: @day-lightning               ; }\n    .@{wi-css-prefix}-owm-day-212:before                        { content: @day-lightning               ; }\n    .@{wi-css-prefix}-owm-day-221:before                        { content: @day-lightning               ; }\n    .@{wi-css-prefix}-owm-day-230:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-231:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-232:before                        { content: @day-thunderstorm            ; }\n    .@{wi-css-prefix}-owm-day-300:before                        { content: @day-sprinkle                ; }\n    .@{wi-css-prefix}-owm-day-301:before                        { content: @day-sprinkle                ; }\n    .@{wi-css-prefix}-owm-day-302:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-310:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-311:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-312:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-313:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-314:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-321:before                        { content: @day-sprinkle                ; }\n    .@{wi-css-prefix}-owm-day-500:before                        { content: @day-sprinkle                ; }\n    .@{wi-css-prefix}-owm-day-501:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-502:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-503:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-504:before                        { content: @day-rain                    ; }\n    .@{wi-css-prefix}-owm-day-511:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-520:before                        { content: @day-showers                 ; }\n    .@{wi-css-prefix}-owm-day-521:before                        { content: @day-showers                 ; }\n    .@{wi-css-prefix}-owm-day-522:before                        { content: @day-showers                 ; }\n    .@{wi-css-prefix}-owm-day-531:before                        { content: @day-storm-showers           ; }\n    .@{wi-css-prefix}-owm-day-600:before                        { content: @day-snow                    ; }\n    .@{wi-css-prefix}-owm-day-601:before                        { content: @day-sleet                   ; }\n    .@{wi-css-prefix}-owm-day-602:before                        { content: @day-snow                    ; }\n    .@{wi-css-prefix}-owm-day-611:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-612:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-615:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-616:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-620:before                        { content: @day-rain-mix                ; }\n    .@{wi-css-prefix}-owm-day-621:before                        { content: @day-snow                    ; }\n    .@{wi-css-prefix}-owm-day-622:before                        { content: @day-snow                    ; }\n    .@{wi-css-prefix}-owm-day-701:before                        { content: @day-showers                 ; }\n    .@{wi-css-prefix}-owm-day-711:before                        { content: @smoke                       ; }\n    .@{wi-css-prefix}-owm-day-721:before                        { content: @day-haze                    ; }\n    .@{wi-css-prefix}-owm-day-731:before                        { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-day-741:before                        { content: @day-fog                     ; }\n    .@{wi-css-prefix}-owm-day-761:before                        { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-day-762:before                        { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-day-781:before                        { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-day-800:before                        { content: @day-sunny                   ; }\n    .@{wi-css-prefix}-owm-day-801:before                        { content: @day-cloudy-gusts            ; }\n    .@{wi-css-prefix}-owm-day-802:before                        { content: @day-cloudy-gusts            ; }\n    .@{wi-css-prefix}-owm-day-803:before                        { content: @day-cloudy-gusts            ; }\n    .@{wi-css-prefix}-owm-day-804:before                        { content: @day-sunny-overcast          ; }\n    .@{wi-css-prefix}-owm-day-900:before                        { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-day-902:before                        { content: @hurricane                   ; }\n    .@{wi-css-prefix}-owm-day-903:before                        { content: @snowflake-cold              ; }\n    .@{wi-css-prefix}-owm-day-904:before                        { content: @hot                         ; }\n    .@{wi-css-prefix}-owm-day-906:before                        { content: @day-hail                    ; }\n    .@{wi-css-prefix}-owm-day-957:before                        { content: @strong-wind                 ; }\n    //Night\n    .@{wi-css-prefix}-owm-night-200:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-201:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-202:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-210:before                      { content: @night-alt-lightning         ; }\n    .@{wi-css-prefix}-owm-night-211:before                      { content: @night-alt-lightning         ; }\n    .@{wi-css-prefix}-owm-night-212:before                      { content: @night-alt-lightning         ; }\n    .@{wi-css-prefix}-owm-night-221:before                      { content: @night-alt-lightning         ; }\n    .@{wi-css-prefix}-owm-night-230:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-231:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-232:before                      { content: @night-alt-thunderstorm      ; }\n    .@{wi-css-prefix}-owm-night-300:before                      { content: @night-alt-sprinkle          ; }\n    .@{wi-css-prefix}-owm-night-301:before                      { content: @night-alt-sprinkle          ; }\n    .@{wi-css-prefix}-owm-night-302:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-310:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-311:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-312:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-313:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-314:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-321:before                      { content: @night-alt-sprinkle          ; }\n    .@{wi-css-prefix}-owm-night-500:before                      { content: @night-alt-sprinkle          ; }\n    .@{wi-css-prefix}-owm-night-501:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-502:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-503:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-504:before                      { content: @night-alt-rain              ; }\n    .@{wi-css-prefix}-owm-night-511:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-520:before                      { content: @night-alt-showers           ; }\n    .@{wi-css-prefix}-owm-night-521:before                      { content: @night-alt-showers           ; }\n    .@{wi-css-prefix}-owm-night-522:before                      { content: @night-alt-showers           ; }\n    .@{wi-css-prefix}-owm-night-531:before                      { content: @night-alt-storm-showers     ; }\n    .@{wi-css-prefix}-owm-night-600:before                      { content: @night-alt-snow              ; }\n    .@{wi-css-prefix}-owm-night-601:before                      { content: @night-alt-sleet             ; }\n    .@{wi-css-prefix}-owm-night-602:before                      { content: @night-alt-snow              ; }\n    .@{wi-css-prefix}-owm-night-611:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-612:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-615:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-616:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-620:before                      { content: @night-alt-rain-mix          ; }\n    .@{wi-css-prefix}-owm-night-621:before                      { content: @night-alt-snow              ; }\n    .@{wi-css-prefix}-owm-night-622:before                      { content: @night-alt-snow              ; }\n    .@{wi-css-prefix}-owm-night-701:before                      { content: @night-alt-showers           ; }\n    .@{wi-css-prefix}-owm-night-711:before                      { content: @smoke                       ; }\n    .@{wi-css-prefix}-owm-night-721:before                      { content: @day-haze                    ; }\n    .@{wi-css-prefix}-owm-night-731:before                      { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-night-741:before                      { content: @night-fog                   ; }\n    .@{wi-css-prefix}-owm-night-761:before                      { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-night-762:before                      { content: @dust                        ; }\n    .@{wi-css-prefix}-owm-night-781:before                      { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-night-800:before                      { content: @night-clear                 ; }\n    .@{wi-css-prefix}-owm-night-801:before                      { content: @night-alt-cloudy-gusts      ; }\n    .@{wi-css-prefix}-owm-night-802:before                      { content: @night-alt-cloudy-gusts      ; }\n    .@{wi-css-prefix}-owm-night-803:before                      { content: @night-alt-cloudy-gusts      ; }\n    .@{wi-css-prefix}-owm-night-804:before                      { content: @night-alt-cloudy            ; }\n    .@{wi-css-prefix}-owm-night-900:before                      { content: @tornado                     ; }\n    .@{wi-css-prefix}-owm-night-902:before                      { content: @hurricane                   ; }\n    .@{wi-css-prefix}-owm-night-903:before                      { content: @snowflake-cold              ; }\n    .@{wi-css-prefix}-owm-night-904:before                      { content: @hot                         ; }\n    .@{wi-css-prefix}-owm-night-906:before                      { content: @night-alt-hail              ; }\n    .@{wi-css-prefix}-owm-night-957:before                      { content: @strong-wind                 ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/mappings/wi-wmo4680.less",
    "content": ".@{wi-css-prefix}-wmo4680-0:before,\n.@{wi-css-prefix}-wmo4680-00:before       { content: @thermometer           ; }\n.@{wi-css-prefix}-wmo4680-1:before,\n.@{wi-css-prefix}-wmo4680-01:before       { content: @cloudy                ; }\n.@{wi-css-prefix}-wmo4680-2:before,\n.@{wi-css-prefix}-wmo4680-02:before       { content: @thermometer           ; }\n.@{wi-css-prefix}-wmo4680-3:before,\n.@{wi-css-prefix}-wmo4680-03:before       { content: @cloudy                ; }\n.@{wi-css-prefix}-wmo4680-4:before,\n.@{wi-css-prefix}-wmo4680-04:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-5:before,\n.@{wi-css-prefix}-wmo4680-05:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-10:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-11:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-12:before       { content: @lightning             ; }\n.@{wi-css-prefix}-wmo4680-18:before       { content: @strong-wind           ; }\n.@{wi-css-prefix}-wmo4680-20:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-21:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-22:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-23:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-24:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-25:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-26:before       { content: @thunderstorm          ; }\n.@{wi-css-prefix}-wmo4680-27:before       { content: @dust                  ; }\n.@{wi-css-prefix}-wmo4680-28:before       { content: @dust                  ; }\n.@{wi-css-prefix}-wmo4680-29:before       { content: @dust                  ; }\n.@{wi-css-prefix}-wmo4680-30:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-31:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-32:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-33:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-34:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-35:before       { content: @fog                   ; }\n.@{wi-css-prefix}-wmo4680-40:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-41:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-42:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-43:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-44:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-45:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-46:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-47:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-48:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-50:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-51:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-52:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-53:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-54:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-55:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-56:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-57:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-58:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-60:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-61:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-62:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-63:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-64:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-65:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-66:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-67:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-68:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-70:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-71:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-72:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-73:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-74:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-75:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-76:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-77:before       { content: @snow                  ; }\n.@{wi-css-prefix}-wmo4680-78:before       { content: @snowflake-cold        ; }\n.@{wi-css-prefix}-wmo4680-80:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-81:before       { content: @sprinkle              ; }\n.@{wi-css-prefix}-wmo4680-82:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-83:before       { content: @rain                  ; }\n.@{wi-css-prefix}-wmo4680-84:before       { content: @storm-showers         ; }\n.@{wi-css-prefix}-wmo4680-85:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-86:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-87:before       { content: @rain-mix              ; }\n.@{wi-css-prefix}-wmo4680-89:before       { content: @hail                  ; }\n.@{wi-css-prefix}-wmo4680-90:before       { content: @lightning             ; }\n.@{wi-css-prefix}-wmo4680-91:before       { content: @storm-showers         ; }\n.@{wi-css-prefix}-wmo4680-92:before       { content: @thunderstorm          ; }\n.@{wi-css-prefix}-wmo4680-93:before       { content: @thunderstorm          ; }\n.@{wi-css-prefix}-wmo4680-94:before       { content: @lightning             ; }\n.@{wi-css-prefix}-wmo4680-95:before       { content: @thunderstorm          ; }\n.@{wi-css-prefix}-wmo4680-96:before       { content: @thunderstorm          ; }\n.@{wi-css-prefix}-wmo4680-99:before       { content: @tornado               ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/mappings/wi-yahoo.less",
    "content": ".@{wi-css-prefix}-yahoo-0:before { content: @tornado; };\n.@{wi-css-prefix}-yahoo-1:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-2:before { content: @hurricane; };\n.@{wi-css-prefix}-yahoo-3:before { content: @thunderstorm; };\n.@{wi-css-prefix}-yahoo-4:before { content: @thunderstorm; };\n.@{wi-css-prefix}-yahoo-5:before { content: @rain-mix; };\n.@{wi-css-prefix}-yahoo-6:before { content: @rain-mix; };\n.@{wi-css-prefix}-yahoo-7:before { content: @rain-mix; };\n.@{wi-css-prefix}-yahoo-8:before { content: @hail; };\n.@{wi-css-prefix}-yahoo-9:before { content: @showers; };\n.@{wi-css-prefix}-yahoo-10:before { content: @hail; };\n.@{wi-css-prefix}-yahoo-11:before { content: @showers; };\n.@{wi-css-prefix}-yahoo-12:before { content: @showers; };\n.@{wi-css-prefix}-yahoo-13:before { content: @snow; };\n.@{wi-css-prefix}-yahoo-14:before { content: @day-snow; };\n.@{wi-css-prefix}-yahoo-15:before { content: @snow-wind; };\n.@{wi-css-prefix}-yahoo-16:before { content: @snow; };\n.@{wi-css-prefix}-yahoo-17:before { content: @hail; };\n.@{wi-css-prefix}-yahoo-18:before { content: @rain-mix; };\n.@{wi-css-prefix}-yahoo-19:before { content: @dust; };\n.@{wi-css-prefix}-yahoo-20:before { content: @fog; };\n.@{wi-css-prefix}-yahoo-21:before { content: @windy; };\n.@{wi-css-prefix}-yahoo-22:before { content: @smoke; };\n.@{wi-css-prefix}-yahoo-23:before { content: @strong-wind; };\n.@{wi-css-prefix}-yahoo-24:before { content: @strong-wind; };\n.@{wi-css-prefix}-yahoo-25:before { content: @snowflake-cold; };\n.@{wi-css-prefix}-yahoo-26:before { content: @cloudy; };\n.@{wi-css-prefix}-yahoo-27:before { content: @night-cloudy; };\n.@{wi-css-prefix}-yahoo-28:before { content: @day-cloudy; };\n.@{wi-css-prefix}-yahoo-29:before { content: @night-cloudy; };\n.@{wi-css-prefix}-yahoo-30:before { content: @day-cloudy; };\n.@{wi-css-prefix}-yahoo-31:before { content: @night-clear; };\n.@{wi-css-prefix}-yahoo-32:before { content: @day-sunny; };\n.@{wi-css-prefix}-yahoo-33:before { content: @night-partly-cloudy; };\n.@{wi-css-prefix}-yahoo-34:before { content: @day-sunny-overcast; };\n.@{wi-css-prefix}-yahoo-35:before { content: @rain-mix; };\n.@{wi-css-prefix}-yahoo-36:before { content: @hot; };\n.@{wi-css-prefix}-yahoo-37:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-38:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-39:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-40:before { content: @showers; };\n.@{wi-css-prefix}-yahoo-41:before { content: @snow-wind; };\n.@{wi-css-prefix}-yahoo-42:before { content: @snow; };\n.@{wi-css-prefix}-yahoo-43:before { content: @snow-wind; };\n.@{wi-css-prefix}-yahoo-44:before { content: @day-sunny-overcast; };\n.@{wi-css-prefix}-yahoo-45:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-46:before { content: @snow; };\n.@{wi-css-prefix}-yahoo-47:before { content: @day-storm-showers; };\n.@{wi-css-prefix}-yahoo-3200:before { content: @stars; };"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons-classes.less",
    "content": "@import \"icon-classes/classes-day.less\";\n@import \"icon-classes/classes-night.less\";\n@import \"icon-classes/classes-neutral.less\";\n@import \"icon-classes/classes-misc.less\";\n@import \"icon-classes/classes-moon.less\";\n@import \"icon-classes/classes-moon-aliases.less\";\n@import \"icon-classes/classes-time.less\";\n@import \"icon-classes/classes-direction.less\";\n@import \"icon-classes/classes-beaufort.less\";\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons-core.less",
    "content": "// Base Variables\n@wi-path:                        \"../fonts\";\n@wi-version:                     \"2.0\";\n@wi-css-prefix:                  wi;\n@wi-font-family:                 weathericons;\n\n@font-face {\n    font-family: '@{wi-font-family}';\n    src: url('@{wi-path}/@{wi-font-family}-regular-webfont.eot');\n    src: url('@{wi-path}/@{wi-font-family}-regular-webfont.eot?#iefix') format('embedded-opentype'),\n         url('@{wi-path}/@{wi-font-family}-regular-webfont.woff2') format('woff2'),\n         url('@{wi-path}/@{wi-font-family}-regular-webfont.woff') format('woff'),\n         url('@{wi-path}/@{wi-font-family}-regular-webfont.ttf') format('truetype'),\n         url('@{wi-path}/@{wi-font-family}-regular-webfont.svg#weather_iconsregular') format('svg');\n    font-weight: normal;\n    font-style: normal;\n}\n\n.@{wi-css-prefix} {\n  display: inline-block;\n  font-family: '@{wi-font-family}';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.@{wi-css-prefix}-fw {\n  text-align: center;\n  width: 1.4em;\n}\n\n.wi-icon-rotate(@degrees, @rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n\n.wi-icon-flip(@horiz, @vert, @rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);\n  -webkit-transform: scale(@horiz, @vert);\n      -ms-transform: scale(@horiz, @vert);\n          transform: scale(@horiz, @vert);\n}\n\n.@{wi-css-prefix}-rotate-90  { .wi-icon-rotate(90deg, 1);  }\n.@{wi-css-prefix}-rotate-180 { .wi-icon-rotate(180deg, 2); }\n.@{wi-css-prefix}-rotate-270 { .wi-icon-rotate(270deg, 3); }\n\n.@{wi-css-prefix}-flip-horizontal { .wi-icon-flip(-1, 1, 0); }\n.@{wi-css-prefix}-flip-vertical   { .wi-icon-flip(1, -1, 2); }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons-variables.less",
    "content": "@import \"icon-variables/variables-beaufort.less\";\n@import \"icon-variables/variables-time.less\";\n@import \"icon-variables/variables-moon.less\";\n@import \"icon-variables/variables-direction.less\";\n@import \"icon-variables/variables-day.less\";\n@import \"icon-variables/variables-night.less\";\n@import \"icon-variables/variables-neutral.less\";\n@import \"icon-variables/variables-misc.less\";\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons-wind.less",
    "content": "@import \"weather-icons-core.less\";\n@import \"icon-variables/variables-wind-names.less\";\n@import \"icon-classes/classes-wind.less\";\n@import \"icon-classes/classes-wind-degrees.less\";\n@import \"icon-classes/classes-wind-aliases.less\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons-wind.min.less",
    "content": "@import \"weather-icons-core.less\";\n@import \"icon-variables/variables-wind-names.less\";\n@import \"icon-classes/classes-wind.less\";\n@import \"icon-classes/classes-wind-degrees.less\";\n@import \"icon-classes/classes-wind-aliases.less\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons.less",
    "content": "/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, SCSS and LESS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n\n@import \"weather-icons-core.less\";\n@import \"weather-icons-variables.less\";\n@import \"weather-icons-classes.less\";\n// Mappings to various APIs\n@import \"mappings/wi-yahoo.less\";\n@import \"mappings/wi-forecast-io.less\";\n@import \"mappings/wi-wmo4680.less\";\n@import \"mappings/wi-owm.less\";\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/less/weather-icons.min.less",
    "content": "/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, SCSS and LESS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n\n@import \"weather-icons-core.less\";\n@import \"weather-icons-variables.less\";\n@import \"weather-icons-classes.less\";\n// Mappings to various APIs\n@import \"mappings/wi-yahoo.less\";\n@import \"mappings/wi-forecast-io.less\";\n@import \"mappings/wi-wmo4680.less\";\n@import \"mappings/wi-owm.less\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-beaufort.scss",
    "content": ".wi-wind-beaufort-0:before {content: $wind-beaufort-0;}\n.wi-wind-beaufort-1:before {content: $wind-beaufort-1;}\n.wi-wind-beaufort-2:before {content: $wind-beaufort-2;}\n.wi-wind-beaufort-3:before {content: $wind-beaufort-3;}\n.wi-wind-beaufort-4:before {content: $wind-beaufort-4;}\n.wi-wind-beaufort-5:before {content: $wind-beaufort-5;}\n.wi-wind-beaufort-6:before {content: $wind-beaufort-6;}\n.wi-wind-beaufort-7:before {content: $wind-beaufort-7;}\n.wi-wind-beaufort-8:before {content: $wind-beaufort-8;}\n.wi-wind-beaufort-9:before {content: $wind-beaufort-9;}\n.wi-wind-beaufort-10:before {content: $wind-beaufort-10;}\n.wi-wind-beaufort-11:before {content: $wind-beaufort-11;}\n.wi-wind-beaufort-12:before {content: $wind-beaufort-12;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-day.scss",
    "content": ".wi-day-sunny:before {content: $day-sunny;}\n.wi-day-cloudy:before {content: $day-cloudy;}\n.wi-day-cloudy-gusts:before {content: $day-cloudy-gusts;}\n.wi-day-cloudy-windy:before {content: $day-cloudy-windy;}\n.wi-day-fog:before {content: $day-fog;}\n.wi-day-hail:before {content: $day-hail;}\n.wi-day-haze:before {content: $day-haze;}\n.wi-day-lightning:before {content: $day-lightning;}\n.wi-day-rain:before {content: $day-rain;}\n.wi-day-rain-mix:before {content: $day-rain-mix;}\n.wi-day-rain-wind:before {content: $day-rain-wind;}\n.wi-day-showers:before {content: $day-showers;}\n.wi-day-sleet:before {content: $day-sleet;}\n.wi-day-sleet-storm:before {content: $day-sleet-storm;}\n.wi-day-snow:before {content: $day-snow;}\n.wi-day-snow-thunderstorm:before {content: $day-snow-thunderstorm;}\n.wi-day-snow-wind:before {content: $day-snow-wind;}\n.wi-day-sprinkle:before {content: $day-sprinkle;}\n.wi-day-storm-showers:before {content: $day-storm-showers;}\n.wi-day-sunny-overcast:before {content: $day-sunny-overcast;}\n.wi-day-thunderstorm:before {content: $day-thunderstorm;}\n.wi-day-windy:before {content: $day-windy;}\n.wi-solar-eclipse:before {content: $solar-eclipse;}\n.wi-hot:before {content: $hot;}\n.wi-day-cloudy-high:before {content: $day-cloudy-high;}\n.wi-day-light-wind:before {content: $day-light-wind;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-direction.scss",
    "content": ".wi-direction-up:before {content: $direction-up;}\n.wi-direction-up-right:before {content: $direction-up-right;}\n.wi-direction-right:before {content: $direction-right;}\n.wi-direction-down-right:before {content: $direction-down-right;}\n.wi-direction-down:before {content: $direction-down;}\n.wi-direction-down-left:before {content: $direction-down-left;}\n.wi-direction-left:before {content: $direction-left;}\n.wi-direction-up-left:before {content: $direction-up-left;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-misc.scss",
    "content": ".wi-alien:before {content: $alien;}\n.wi-celsius:before {content: $celsius;}\n.wi-fahrenheit:before {content: $fahrenheit;}\n.wi-degrees:before {content: $degrees;}\n.wi-thermometer:before {content: $thermometer;}\n.wi-thermometer-exterior:before {content: $thermometer-exterior;}\n.wi-thermometer-internal:before {content: $thermometer-internal;}\n.wi-cloud-down:before {content: $cloud-down;}\n.wi-cloud-up:before {content: $cloud-up;}\n.wi-cloud-refresh:before {content: $cloud-refresh;}\n.wi-horizon:before {content: $horizon;}\n.wi-horizon-alt:before {content: $horizon-alt;}\n.wi-sunrise:before {content: $sunrise;}\n.wi-sunset:before {content: $sunset;}\n.wi-moonrise:before {content: $moonrise;}\n.wi-moonset:before {content: $moonset;}\n.wi-refresh:before {content: $refresh;}\n.wi-refresh-alt:before {content: $refresh-alt;}\n.wi-umbrella:before {content: $umbrella;}\n.wi-barometer:before {content: $barometer;}\n.wi-humidity:before {content: $humidity;}\n.wi-na:before {content: $na;}\n.wi-train:before {content: $train;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-moon-aliases.scss",
    "content": ".wi-moon-0:before {content: $moon-new;}\n.wi-moon-1:before {content: $moon-waxing-cresent-1;}\n.wi-moon-2:before {content: $moon-waxing-cresent-2;}\n.wi-moon-3:before {content: $moon-waxing-cresent-3;}\n.wi-moon-4:before {content: $moon-waxing-cresent-4;}\n.wi-moon-5:before {content: $moon-waxing-cresent-5;}\n.wi-moon-6:before {content: $moon-waxing-cresent-6;}\n.wi-moon-7:before {content: $moon-first-quarter;}\n.wi-moon-8:before {content: $moon-waxing-gibbous-1;}\n.wi-moon-9:before {content: $moon-waxing-gibbous-2;}\n.wi-moon-10:before {content: $moon-waxing-gibbous-3;}\n.wi-moon-11:before {content: $moon-waxing-gibbous-4;}\n.wi-moon-12:before {content: $moon-waxing-gibbous-5;}\n.wi-moon-13:before {content: $moon-waxing-gibbous-6;}\n.wi-moon-14:before {content: $moon-full;}\n.wi-moon-15:before {content: $moon-waning-gibbous-1;}\n.wi-moon-16:before {content: $moon-waning-gibbous-2;}\n.wi-moon-17:before {content: $moon-waning-gibbous-3;}\n.wi-moon-18:before {content: $moon-waning-gibbous-4;}\n.wi-moon-19:before {content: $moon-waning-gibbous-5;}\n.wi-moon-20:before {content: $moon-waning-gibbous-6;}\n.wi-moon-21:before {content: $moon-third-quarter;}\n.wi-moon-22:before {content: $moon-waning-crescent-1;}\n.wi-moon-23:before {content: $moon-waning-crescent-2;}\n.wi-moon-24:before {content: $moon-waning-crescent-3;}\n.wi-moon-25:before {content: $moon-waning-crescent-4;}\n.wi-moon-26:before {content: $moon-waning-crescent-5;}\n.wi-moon-27:before {content: $moon-waning-crescent-6;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-moon.scss",
    "content": ".wi-moon-new:before {content: $moon-new;}\n.wi-moon-waxing-cresent-1:before {content: $moon-waxing-cresent-1;}\n.wi-moon-waxing-cresent-2:before {content: $moon-waxing-cresent-2;}\n.wi-moon-waxing-cresent-3:before {content: $moon-waxing-cresent-3;}\n.wi-moon-waxing-cresent-4:before {content: $moon-waxing-cresent-4;}\n.wi-moon-waxing-cresent-5:before {content: $moon-waxing-cresent-5;}\n.wi-moon-waxing-cresent-6:before {content: $moon-waxing-cresent-6;}\n.wi-moon-first-quarter:before {content: $moon-first-quarter;}\n.wi-moon-waxing-gibbous-1:before {content: $moon-waxing-gibbous-1;}\n.wi-moon-waxing-gibbous-2:before {content: $moon-waxing-gibbous-2;}\n.wi-moon-waxing-gibbous-3:before {content: $moon-waxing-gibbous-3;}\n.wi-moon-waxing-gibbous-4:before {content: $moon-waxing-gibbous-4;}\n.wi-moon-waxing-gibbous-5:before {content: $moon-waxing-gibbous-5;}\n.wi-moon-waxing-gibbous-6:before {content: $moon-waxing-gibbous-6;}\n.wi-moon-full:before {content: $moon-full;}\n.wi-moon-waning-gibbous-1:before {content: $moon-waning-gibbous-1;}\n.wi-moon-waning-gibbous-2:before {content: $moon-waning-gibbous-2;}\n.wi-moon-waning-gibbous-3:before {content: $moon-waning-gibbous-3;}\n.wi-moon-waning-gibbous-4:before {content: $moon-waning-gibbous-4;}\n.wi-moon-waning-gibbous-5:before {content: $moon-waning-gibbous-5;}\n.wi-moon-waning-gibbous-6:before {content: $moon-waning-gibbous-6;}\n.wi-moon-third-quarter:before {content: $moon-third-quarter;}\n.wi-moon-waning-crescent-1:before {content: $moon-waning-crescent-1;}\n.wi-moon-waning-crescent-2:before {content: $moon-waning-crescent-2;}\n.wi-moon-waning-crescent-3:before {content: $moon-waning-crescent-3;}\n.wi-moon-waning-crescent-4:before {content: $moon-waning-crescent-4;}\n.wi-moon-waning-crescent-5:before {content: $moon-waning-crescent-5;}\n.wi-moon-waning-crescent-6:before {content: $moon-waning-crescent-6;}\n.wi-moon-alt-new:before {content: $moon-alt-new;}\n.wi-moon-alt-waxing-cresent-1:before {content: $moon-alt-waxing-cresent-1;}\n.wi-moon-alt-waxing-cresent-2:before {content: $moon-alt-waxing-cresent-2;}\n.wi-moon-alt-waxing-cresent-3:before {content: $moon-alt-waxing-cresent-3;}\n.wi-moon-alt-waxing-cresent-4:before {content: $moon-alt-waxing-cresent-4;}\n.wi-moon-alt-waxing-cresent-5:before {content: $moon-alt-waxing-cresent-5;}\n.wi-moon-alt-waxing-cresent-6:before {content: $moon-alt-waxing-cresent-6;}\n.wi-moon-alt-first-quarter:before {content: $moon-alt-first-quarter;}\n.wi-moon-alt-waxing-gibbous-1:before {content: $moon-alt-waxing-gibbous-1;}\n.wi-moon-alt-waxing-gibbous-2:before {content: $moon-alt-waxing-gibbous-2;}\n.wi-moon-alt-waxing-gibbous-3:before {content: $moon-alt-waxing-gibbous-3;}\n.wi-moon-alt-waxing-gibbous-4:before {content: $moon-alt-waxing-gibbous-4;}\n.wi-moon-alt-waxing-gibbous-5:before {content: $moon-alt-waxing-gibbous-5;}\n.wi-moon-alt-waxing-gibbous-6:before {content: $moon-alt-waxing-gibbous-6;}\n.wi-moon-alt-full:before {content: $moon-alt-full;}\n.wi-moon-alt-waning-gibbous-1:before {content: $moon-alt-waning-gibbous-1;}\n.wi-moon-alt-waning-gibbous-2:before {content: $moon-alt-waning-gibbous-2;}\n.wi-moon-alt-waning-gibbous-3:before {content: $moon-alt-waning-gibbous-3;}\n.wi-moon-alt-waning-gibbous-4:before {content: $moon-alt-waning-gibbous-4;}\n.wi-moon-alt-waning-gibbous-5:before {content: $moon-alt-waning-gibbous-5;}\n.wi-moon-alt-waning-gibbous-6:before {content: $moon-alt-waning-gibbous-6;}\n.wi-moon-alt-third-quarter:before {content: $moon-alt-third-quarter;}\n.wi-moon-alt-waning-crescent-1:before {content: $moon-alt-waning-crescent-1;}\n.wi-moon-alt-waning-crescent-2:before {content: $moon-alt-waning-crescent-2;}\n.wi-moon-alt-waning-crescent-3:before {content: $moon-alt-waning-crescent-3;}\n.wi-moon-alt-waning-crescent-4:before {content: $moon-alt-waning-crescent-4;}\n.wi-moon-alt-waning-crescent-5:before {content: $moon-alt-waning-crescent-5;}\n.wi-moon-alt-waning-crescent-6:before {content: $moon-alt-waning-crescent-6;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-neutral.scss",
    "content": ".wi-cloud:before {content: $cloud;}\n.wi-cloudy:before {content: $cloudy;}\n.wi-cloudy-gusts:before {content: $cloudy-gusts;}\n.wi-cloudy-windy:before {content: $cloudy-windy;}\n.wi-fog:before {content: $fog;}\n.wi-hail:before {content: $hail;}\n.wi-rain:before {content: $rain;}\n.wi-rain-mix:before {content: $rain-mix;}\n.wi-rain-wind:before {content: $rain-wind;}\n.wi-showers:before {content: $showers;}\n.wi-sleet:before {content: $sleet;}\n.wi-snow:before {content: $snow;}\n.wi-sprinkle:before {content: $sprinkle;}\n.wi-storm-showers:before {content: $storm-showers;}\n.wi-thunderstorm:before {content: $thunderstorm;}\n.wi-snow-wind:before {content: $snow-wind;}\n.wi-snow:before {content: $snow;}\n.wi-smog:before {content: $smog;}\n.wi-smoke:before {content: $smoke;}\n.wi-lightning:before {content: $lightning;}\n.wi-raindrops:before {content: $raindrops;}\n.wi-raindrop:before {content: $raindrop;}\n.wi-dust:before {content: $dust;}\n.wi-snowflake-cold:before {content: $snowflake-cold;}\n.wi-windy:before {content: $windy;}\n.wi-strong-wind:before {content: $strong-wind;}\n.wi-sandstorm:before {content: $sandstorm;}\n.wi-earthquake:before {content: $earthquake;}\n.wi-fire:before {content: $fire;}\n.wi-flood:before {content: $flood;}\n.wi-meteor:before {content: $meteor;}\n.wi-tsunami:before {content: $tsunami;}\n.wi-volcano:before {content: $volcano;}\n.wi-hurricane:before {content: $hurricane;}\n.wi-tornado:before {content: $tornado;}\n.wi-small-craft-advisory:before {content: $small-craft-advisory;}\n.wi-gale-warning:before {content: $gale-warning;}\n.wi-storm-warning:before {content: $storm-warning;}\n.wi-hurricane-warning:before {content: $hurricane-warning;}\n.wi-wind-direction:before {content: $wind-direction;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-night.scss",
    "content": ".wi-night-clear:before {content: $night-clear;}\n.wi-night-alt-cloudy:before {content: $night-alt-cloudy;}\n.wi-night-alt-cloudy-gusts:before {content: $night-alt-cloudy-gusts;}\n.wi-night-alt-cloudy-windy:before {content: $night-alt-cloudy-windy;}\n.wi-night-alt-hail:before {content: $night-alt-hail;}\n.wi-night-alt-lightning:before {content: $night-alt-lightning;}\n.wi-night-alt-rain:before {content: $night-alt-rain;}\n.wi-night-alt-rain-mix:before {content: $night-alt-rain-mix;}\n.wi-night-alt-rain-wind:before {content: $night-alt-rain-wind;}\n.wi-night-alt-showers:before {content: $night-alt-showers;}\n.wi-night-alt-sleet:before {content: $night-alt-sleet;}\n.wi-night-alt-sleet-storm:before {content: $night-alt-sleet-storm;}\n.wi-night-alt-snow:before {content: $night-alt-snow;}\n.wi-night-alt-snow-thunderstorm:before {content: $night-alt-snow-thunderstorm;}\n.wi-night-alt-snow-wind:before {content: $night-alt-snow-wind;}\n.wi-night-alt-sprinkle:before {content: $night-alt-sprinkle;}\n.wi-night-alt-storm-showers:before {content: $night-alt-storm-showers;}\n.wi-night-alt-thunderstorm:before {content: $night-alt-thunderstorm;}\n.wi-night-cloudy:before {content: $night-cloudy;}\n.wi-night-cloudy-gusts:before {content: $night-cloudy-gusts;}\n.wi-night-cloudy-windy:before {content: $night-cloudy-windy;}\n.wi-night-fog:before {content: $night-fog;}\n.wi-night-hail:before {content: $night-hail;}\n.wi-night-lightning:before {content: $night-lightning;}\n.wi-night-partly-cloudy:before {content: $night-partly-cloudy;}\n.wi-night-rain:before {content: $night-rain;}\n.wi-night-rain-mix:before {content: $night-rain-mix;}\n.wi-night-rain-wind:before {content: $night-rain-wind;}\n.wi-night-showers:before {content: $night-showers;}\n.wi-night-sleet:before {content: $night-sleet;}\n.wi-night-sleet-storm:before {content: $night-sleet-storm;}\n.wi-night-snow:before {content: $night-snow;}\n.wi-night-snow-thunderstorm:before {content: $night-snow-thunderstorm;}\n.wi-night-snow-wind:before {content: $night-snow-wind;}\n.wi-night-sprinkle:before {content: $night-sprinkle;}\n.wi-night-storm-showers:before {content: $night-storm-showers;}\n.wi-night-thunderstorm:before {content: $night-thunderstorm;}\n.wi-lunar-eclipse:before {content: $lunar-eclipse;}\n.wi-stars:before {content: $stars;}\n.wi-storm-showers:before {content: $storm-showers;}\n.wi-thunderstorm:before {content: $thunderstorm;}\n.wi-night-alt-cloudy-high:before {content: $night-alt-cloudy-high;}\n.wi-night-cloudy-high:before {content: $night-cloudy-high;}\n.wi-night-alt-partly-cloudy:before {content: $night-alt-partly-cloudy;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-time.scss",
    "content": ".wi-time-1:before {content: $time-1;}\n.wi-time-2:before {content: $time-2;}\n.wi-time-3:before {content: $time-3;}\n.wi-time-4:before {content: $time-4;}\n.wi-time-5:before {content: $time-5;}\n.wi-time-6:before {content: $time-6;}\n.wi-time-7:before {content: $time-7;}\n.wi-time-8:before {content: $time-8;}\n.wi-time-9:before {content: $time-9;}\n.wi-time-10:before {content: $time-10;}\n.wi-time-11:before {content: $time-11;}\n.wi-time-12:before {content: $time-12;}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-wind-aliases.scss",
    "content": "@mixin wind-rotate( $val: 0deg ) {\n  -webkit-transform: rotate($val);\n  -moz-transform: rotate($val);\n  -ms-transform: rotate($val);\n  -o-transform: rotate($val);\n  transform: rotate($val);\n}\n\n.wi-wind-towards-n    {\n  @include wind-rotate(0deg);\n}\n.wi-wind-towards-nne   {\n  @include wind-rotate(23deg);\n}\n.wi-wind-towards-ne    {\n  @include wind-rotate(45deg);\n}\n.wi-wind-towards-ene   {\n  @include wind-rotate(68deg);\n}\n.wi-wind-towards-e    {\n  @include wind-rotate(90deg);\n}\n.wi-wind-towards-ese   {\n  @include wind-rotate(113deg);\n}\n.wi-wind-towards-se    {\n  @include wind-rotate(135deg);\n}\n.wi-wind-towards-sse   {\n  @include wind-rotate(158deg);\n}\n.wi-wind-towards-s    {\n  @include wind-rotate(180deg);\n}\n.wi-wind-towards-ssw   {\n  @include wind-rotate(203deg);\n}\n.wi-wind-towards-sw    {\n  @include wind-rotate(225deg);\n}\n.wi-wind-towards-wsw   {\n  @include wind-rotate(248deg);\n}\n.wi-wind-towards-w    {\n  @include wind-rotate(270deg);\n}\n.wi-wind-towards-wnw   {\n  @include wind-rotate(293deg);\n}\n.wi-wind-towards-nw    {\n  @include wind-rotate(313deg);\n}\n.wi-wind-towards-nnw   {\n  @include wind-rotate(336deg);\n}\n.wi-wind-from-n    {\n  @include wind-rotate(0deg);\n}\n.wi-wind-from-nne   {\n  @include wind-rotate(23deg);\n}\n.wi-wind-from-ne    {\n  @include wind-rotate(45deg);\n}\n.wi-wind-from-ene   {\n  @include wind-rotate(68deg);\n}\n.wi-wind-from-e    {\n  @include wind-rotate(90deg);\n}\n.wi-wind-from-ese   {\n  @include wind-rotate(113deg);\n}\n.wi-wind-from-se    {\n  @include wind-rotate(135deg);\n}\n.wi-wind-from-sse   {\n  @include wind-rotate(158deg);\n}\n.wi-wind-from-s    {\n  @include wind-rotate(180deg);\n}\n.wi-wind-from-ssw   {\n  @include wind-rotate(203deg);\n}\n.wi-wind-from-sw    {\n  @include wind-rotate(225deg);\n}\n.wi-wind-from-wsw   {\n  @include wind-rotate(248deg);\n}\n.wi-wind-from-w    {\n  @include wind-rotate(270deg);\n}\n.wi-wind-from-wnw   {\n  @include wind-rotate(293deg);\n}\n.wi-wind-from-nw    {\n  @include wind-rotate(313deg);\n}\n.wi-wind-from-nnw   {\n  @include wind-rotate(336deg);\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-wind-degrees.scss",
    "content": ".#{$wi-css-prefix}-wind {\n  &.towards-0-deg {@include wind-rotate(0deg);}\n  &.towards-1-deg {@include wind-rotate(1deg);}\n  &.towards-2-deg {@include wind-rotate(2deg);}\n  &.towards-3-deg {@include wind-rotate(3deg);}\n  &.towards-4-deg {@include wind-rotate(4deg);}\n  &.towards-5-deg {@include wind-rotate(5deg);}\n  &.towards-6-deg {@include wind-rotate(6deg);}\n  &.towards-7-deg {@include wind-rotate(7deg);}\n  &.towards-8-deg {@include wind-rotate(8deg);}\n  &.towards-9-deg {@include wind-rotate(9deg);}\n  &.towards-10-deg {@include wind-rotate(10deg);}\n  &.towards-11-deg {@include wind-rotate(11deg);}\n  &.towards-12-deg {@include wind-rotate(12deg);}\n  &.towards-13-deg {@include wind-rotate(13deg);}\n  &.towards-14-deg {@include wind-rotate(14deg);}\n  &.towards-15-deg {@include wind-rotate(15deg);}\n  &.towards-16-deg {@include wind-rotate(16deg);}\n  &.towards-17-deg {@include wind-rotate(17deg);}\n  &.towards-18-deg {@include wind-rotate(18deg);}\n  &.towards-19-deg {@include wind-rotate(19deg);}\n  &.towards-20-deg {@include wind-rotate(20deg);}\n  &.towards-21-deg {@include wind-rotate(21deg);}\n  &.towards-22-deg {@include wind-rotate(22deg);}\n  &.towards-23-deg {@include wind-rotate(23deg);}\n  &.towards-24-deg {@include wind-rotate(24deg);}\n  &.towards-25-deg {@include wind-rotate(25deg);}\n  &.towards-26-deg {@include wind-rotate(26deg);}\n  &.towards-27-deg {@include wind-rotate(27deg);}\n  &.towards-28-deg {@include wind-rotate(28deg);}\n  &.towards-29-deg {@include wind-rotate(29deg);}\n  &.towards-30-deg {@include wind-rotate(30deg);}\n  &.towards-31-deg {@include wind-rotate(31deg);}\n  &.towards-32-deg {@include wind-rotate(32deg);}\n  &.towards-33-deg {@include wind-rotate(33deg);}\n  &.towards-34-deg {@include wind-rotate(34deg);}\n  &.towards-35-deg {@include wind-rotate(35deg);}\n  &.towards-36-deg {@include wind-rotate(36deg);}\n  &.towards-37-deg {@include wind-rotate(37deg);}\n  &.towards-38-deg {@include wind-rotate(38deg);}\n  &.towards-39-deg {@include wind-rotate(39deg);}\n  &.towards-40-deg {@include wind-rotate(40deg);}\n  &.towards-41-deg {@include wind-rotate(41deg);}\n  &.towards-42-deg {@include wind-rotate(42deg);}\n  &.towards-43-deg {@include wind-rotate(43deg);}\n  &.towards-44-deg {@include wind-rotate(44deg);}\n  &.towards-45-deg {@include wind-rotate(45deg);}\n  &.towards-46-deg {@include wind-rotate(46deg);}\n  &.towards-47-deg {@include wind-rotate(47deg);}\n  &.towards-48-deg {@include wind-rotate(48deg);}\n  &.towards-49-deg {@include wind-rotate(49deg);}\n  &.towards-50-deg {@include wind-rotate(50deg);}\n  &.towards-51-deg {@include wind-rotate(51deg);}\n  &.towards-52-deg {@include wind-rotate(52deg);}\n  &.towards-53-deg {@include wind-rotate(53deg);}\n  &.towards-54-deg {@include wind-rotate(54deg);}\n  &.towards-55-deg {@include wind-rotate(55deg);}\n  &.towards-56-deg {@include wind-rotate(56deg);}\n  &.towards-57-deg {@include wind-rotate(57deg);}\n  &.towards-58-deg {@include wind-rotate(58deg);}\n  &.towards-59-deg {@include wind-rotate(59deg);}\n  &.towards-60-deg {@include wind-rotate(60deg);}\n  &.towards-61-deg {@include wind-rotate(61deg);}\n  &.towards-62-deg {@include wind-rotate(62deg);}\n  &.towards-63-deg {@include wind-rotate(63deg);}\n  &.towards-64-deg {@include wind-rotate(64deg);}\n  &.towards-65-deg {@include wind-rotate(65deg);}\n  &.towards-66-deg {@include wind-rotate(66deg);}\n  &.towards-67-deg {@include wind-rotate(67deg);}\n  &.towards-68-deg {@include wind-rotate(68deg);}\n  &.towards-69-deg {@include wind-rotate(69deg);}\n  &.towards-70-deg {@include wind-rotate(70deg);}\n  &.towards-71-deg {@include wind-rotate(71deg);}\n  &.towards-72-deg {@include wind-rotate(72deg);}\n  &.towards-73-deg {@include wind-rotate(73deg);}\n  &.towards-74-deg {@include wind-rotate(74deg);}\n  &.towards-75-deg {@include wind-rotate(75deg);}\n  &.towards-76-deg {@include wind-rotate(76deg);}\n  &.towards-77-deg {@include wind-rotate(77deg);}\n  &.towards-78-deg {@include wind-rotate(78deg);}\n  &.towards-79-deg {@include wind-rotate(79deg);}\n  &.towards-80-deg {@include wind-rotate(80deg);}\n  &.towards-81-deg {@include wind-rotate(81deg);}\n  &.towards-82-deg {@include wind-rotate(82deg);}\n  &.towards-83-deg {@include wind-rotate(83deg);}\n  &.towards-84-deg {@include wind-rotate(84deg);}\n  &.towards-85-deg {@include wind-rotate(85deg);}\n  &.towards-86-deg {@include wind-rotate(86deg);}\n  &.towards-87-deg {@include wind-rotate(87deg);}\n  &.towards-88-deg {@include wind-rotate(88deg);}\n  &.towards-89-deg {@include wind-rotate(89deg);}\n  &.towards-90-deg {@include wind-rotate(90deg);}\n  &.towards-91-deg {@include wind-rotate(91deg);}\n  &.towards-92-deg {@include wind-rotate(92deg);}\n  &.towards-93-deg {@include wind-rotate(93deg);}\n  &.towards-94-deg {@include wind-rotate(94deg);}\n  &.towards-95-deg {@include wind-rotate(95deg);}\n  &.towards-96-deg {@include wind-rotate(96deg);}\n  &.towards-97-deg {@include wind-rotate(97deg);}\n  &.towards-98-deg {@include wind-rotate(98deg);}\n  &.towards-99-deg {@include wind-rotate(99deg);}\n  &.towards-100-deg {@include wind-rotate(100deg);}\n  &.towards-101-deg {@include wind-rotate(101deg);}\n  &.towards-102-deg {@include wind-rotate(102deg);}\n  &.towards-103-deg {@include wind-rotate(103deg);}\n  &.towards-104-deg {@include wind-rotate(104deg);}\n  &.towards-105-deg {@include wind-rotate(105deg);}\n  &.towards-106-deg {@include wind-rotate(106deg);}\n  &.towards-107-deg {@include wind-rotate(107deg);}\n  &.towards-108-deg {@include wind-rotate(108deg);}\n  &.towards-109-deg {@include wind-rotate(109deg);}\n  &.towards-110-deg {@include wind-rotate(110deg);}\n  &.towards-111-deg {@include wind-rotate(111deg);}\n  &.towards-112-deg {@include wind-rotate(112deg);}\n  &.towards-113-deg {@include wind-rotate(113deg);}\n  &.towards-114-deg {@include wind-rotate(114deg);}\n  &.towards-115-deg {@include wind-rotate(115deg);}\n  &.towards-116-deg {@include wind-rotate(116deg);}\n  &.towards-117-deg {@include wind-rotate(117deg);}\n  &.towards-118-deg {@include wind-rotate(118deg);}\n  &.towards-119-deg {@include wind-rotate(119deg);}\n  &.towards-120-deg {@include wind-rotate(120deg);}\n  &.towards-121-deg {@include wind-rotate(121deg);}\n  &.towards-122-deg {@include wind-rotate(122deg);}\n  &.towards-123-deg {@include wind-rotate(123deg);}\n  &.towards-124-deg {@include wind-rotate(124deg);}\n  &.towards-125-deg {@include wind-rotate(125deg);}\n  &.towards-126-deg {@include wind-rotate(126deg);}\n  &.towards-127-deg {@include wind-rotate(127deg);}\n  &.towards-128-deg {@include wind-rotate(128deg);}\n  &.towards-129-deg {@include wind-rotate(129deg);}\n  &.towards-130-deg {@include wind-rotate(130deg);}\n  &.towards-131-deg {@include wind-rotate(131deg);}\n  &.towards-132-deg {@include wind-rotate(132deg);}\n  &.towards-133-deg {@include wind-rotate(133deg);}\n  &.towards-134-deg {@include wind-rotate(134deg);}\n  &.towards-135-deg {@include wind-rotate(135deg);}\n  &.towards-136-deg {@include wind-rotate(136deg);}\n  &.towards-137-deg {@include wind-rotate(137deg);}\n  &.towards-138-deg {@include wind-rotate(138deg);}\n  &.towards-139-deg {@include wind-rotate(139deg);}\n  &.towards-140-deg {@include wind-rotate(140deg);}\n  &.towards-141-deg {@include wind-rotate(141deg);}\n  &.towards-142-deg {@include wind-rotate(142deg);}\n  &.towards-143-deg {@include wind-rotate(143deg);}\n  &.towards-144-deg {@include wind-rotate(144deg);}\n  &.towards-145-deg {@include wind-rotate(145deg);}\n  &.towards-146-deg {@include wind-rotate(146deg);}\n  &.towards-147-deg {@include wind-rotate(147deg);}\n  &.towards-148-deg {@include wind-rotate(148deg);}\n  &.towards-149-deg {@include wind-rotate(149deg);}\n  &.towards-150-deg {@include wind-rotate(150deg);}\n  &.towards-151-deg {@include wind-rotate(151deg);}\n  &.towards-152-deg {@include wind-rotate(152deg);}\n  &.towards-153-deg {@include wind-rotate(153deg);}\n  &.towards-154-deg {@include wind-rotate(154deg);}\n  &.towards-155-deg {@include wind-rotate(155deg);}\n  &.towards-156-deg {@include wind-rotate(156deg);}\n  &.towards-157-deg {@include wind-rotate(157deg);}\n  &.towards-158-deg {@include wind-rotate(158deg);}\n  &.towards-159-deg {@include wind-rotate(159deg);}\n  &.towards-160-deg {@include wind-rotate(160deg);}\n  &.towards-161-deg {@include wind-rotate(161deg);}\n  &.towards-162-deg {@include wind-rotate(162deg);}\n  &.towards-163-deg {@include wind-rotate(163deg);}\n  &.towards-164-deg {@include wind-rotate(164deg);}\n  &.towards-165-deg {@include wind-rotate(165deg);}\n  &.towards-166-deg {@include wind-rotate(166deg);}\n  &.towards-167-deg {@include wind-rotate(167deg);}\n  &.towards-168-deg {@include wind-rotate(168deg);}\n  &.towards-169-deg {@include wind-rotate(169deg);}\n  &.towards-170-deg {@include wind-rotate(170deg);}\n  &.towards-171-deg {@include wind-rotate(171deg);}\n  &.towards-172-deg {@include wind-rotate(172deg);}\n  &.towards-173-deg {@include wind-rotate(173deg);}\n  &.towards-174-deg {@include wind-rotate(174deg);}\n  &.towards-175-deg {@include wind-rotate(175deg);}\n  &.towards-176-deg {@include wind-rotate(176deg);}\n  &.towards-177-deg {@include wind-rotate(177deg);}\n  &.towards-178-deg {@include wind-rotate(178deg);}\n  &.towards-179-deg {@include wind-rotate(179deg);}\n  &.towards-180-deg {@include wind-rotate(180deg);}\n  &.towards-181-deg {@include wind-rotate(181deg);}\n  &.towards-182-deg {@include wind-rotate(182deg);}\n  &.towards-183-deg {@include wind-rotate(183deg);}\n  &.towards-184-deg {@include wind-rotate(184deg);}\n  &.towards-185-deg {@include wind-rotate(185deg);}\n  &.towards-186-deg {@include wind-rotate(186deg);}\n  &.towards-187-deg {@include wind-rotate(187deg);}\n  &.towards-188-deg {@include wind-rotate(188deg);}\n  &.towards-189-deg {@include wind-rotate(189deg);}\n  &.towards-190-deg {@include wind-rotate(190deg);}\n  &.towards-191-deg {@include wind-rotate(191deg);}\n  &.towards-192-deg {@include wind-rotate(192deg);}\n  &.towards-193-deg {@include wind-rotate(193deg);}\n  &.towards-194-deg {@include wind-rotate(194deg);}\n  &.towards-195-deg {@include wind-rotate(195deg);}\n  &.towards-196-deg {@include wind-rotate(196deg);}\n  &.towards-197-deg {@include wind-rotate(197deg);}\n  &.towards-198-deg {@include wind-rotate(198deg);}\n  &.towards-199-deg {@include wind-rotate(199deg);}\n  &.towards-200-deg {@include wind-rotate(200deg);}\n  &.towards-201-deg {@include wind-rotate(201deg);}\n  &.towards-202-deg {@include wind-rotate(202deg);}\n  &.towards-203-deg {@include wind-rotate(203deg);}\n  &.towards-204-deg {@include wind-rotate(204deg);}\n  &.towards-205-deg {@include wind-rotate(205deg);}\n  &.towards-206-deg {@include wind-rotate(206deg);}\n  &.towards-207-deg {@include wind-rotate(207deg);}\n  &.towards-208-deg {@include wind-rotate(208deg);}\n  &.towards-209-deg {@include wind-rotate(209deg);}\n  &.towards-210-deg {@include wind-rotate(210deg);}\n  &.towards-211-deg {@include wind-rotate(211deg);}\n  &.towards-212-deg {@include wind-rotate(212deg);}\n  &.towards-213-deg {@include wind-rotate(213deg);}\n  &.towards-214-deg {@include wind-rotate(214deg);}\n  &.towards-215-deg {@include wind-rotate(215deg);}\n  &.towards-216-deg {@include wind-rotate(216deg);}\n  &.towards-217-deg {@include wind-rotate(217deg);}\n  &.towards-218-deg {@include wind-rotate(218deg);}\n  &.towards-219-deg {@include wind-rotate(219deg);}\n  &.towards-220-deg {@include wind-rotate(220deg);}\n  &.towards-221-deg {@include wind-rotate(221deg);}\n  &.towards-222-deg {@include wind-rotate(222deg);}\n  &.towards-223-deg {@include wind-rotate(223deg);}\n  &.towards-224-deg {@include wind-rotate(224deg);}\n  &.towards-225-deg {@include wind-rotate(225deg);}\n  &.towards-226-deg {@include wind-rotate(226deg);}\n  &.towards-227-deg {@include wind-rotate(227deg);}\n  &.towards-228-deg {@include wind-rotate(228deg);}\n  &.towards-229-deg {@include wind-rotate(229deg);}\n  &.towards-230-deg {@include wind-rotate(230deg);}\n  &.towards-231-deg {@include wind-rotate(231deg);}\n  &.towards-232-deg {@include wind-rotate(232deg);}\n  &.towards-233-deg {@include wind-rotate(233deg);}\n  &.towards-234-deg {@include wind-rotate(234deg);}\n  &.towards-235-deg {@include wind-rotate(235deg);}\n  &.towards-236-deg {@include wind-rotate(236deg);}\n  &.towards-237-deg {@include wind-rotate(237deg);}\n  &.towards-238-deg {@include wind-rotate(238deg);}\n  &.towards-239-deg {@include wind-rotate(239deg);}\n  &.towards-240-deg {@include wind-rotate(240deg);}\n  &.towards-241-deg {@include wind-rotate(241deg);}\n  &.towards-242-deg {@include wind-rotate(242deg);}\n  &.towards-243-deg {@include wind-rotate(243deg);}\n  &.towards-244-deg {@include wind-rotate(244deg);}\n  &.towards-245-deg {@include wind-rotate(245deg);}\n  &.towards-246-deg {@include wind-rotate(246deg);}\n  &.towards-247-deg {@include wind-rotate(247deg);}\n  &.towards-248-deg {@include wind-rotate(248deg);}\n  &.towards-249-deg {@include wind-rotate(249deg);}\n  &.towards-250-deg {@include wind-rotate(250deg);}\n  &.towards-251-deg {@include wind-rotate(251deg);}\n  &.towards-252-deg {@include wind-rotate(252deg);}\n  &.towards-253-deg {@include wind-rotate(253deg);}\n  &.towards-254-deg {@include wind-rotate(254deg);}\n  &.towards-255-deg {@include wind-rotate(255deg);}\n  &.towards-256-deg {@include wind-rotate(256deg);}\n  &.towards-257-deg {@include wind-rotate(257deg);}\n  &.towards-258-deg {@include wind-rotate(258deg);}\n  &.towards-259-deg {@include wind-rotate(259deg);}\n  &.towards-260-deg {@include wind-rotate(260deg);}\n  &.towards-261-deg {@include wind-rotate(261deg);}\n  &.towards-262-deg {@include wind-rotate(262deg);}\n  &.towards-263-deg {@include wind-rotate(263deg);}\n  &.towards-264-deg {@include wind-rotate(264deg);}\n  &.towards-265-deg {@include wind-rotate(265deg);}\n  &.towards-266-deg {@include wind-rotate(266deg);}\n  &.towards-267-deg {@include wind-rotate(267deg);}\n  &.towards-268-deg {@include wind-rotate(268deg);}\n  &.towards-269-deg {@include wind-rotate(269deg);}\n  &.towards-270-deg {@include wind-rotate(270deg);}\n  &.towards-271-deg {@include wind-rotate(271deg);}\n  &.towards-272-deg {@include wind-rotate(272deg);}\n  &.towards-273-deg {@include wind-rotate(273deg);}\n  &.towards-274-deg {@include wind-rotate(274deg);}\n  &.towards-275-deg {@include wind-rotate(275deg);}\n  &.towards-276-deg {@include wind-rotate(276deg);}\n  &.towards-277-deg {@include wind-rotate(277deg);}\n  &.towards-278-deg {@include wind-rotate(278deg);}\n  &.towards-279-deg {@include wind-rotate(279deg);}\n  &.towards-280-deg {@include wind-rotate(280deg);}\n  &.towards-281-deg {@include wind-rotate(281deg);}\n  &.towards-282-deg {@include wind-rotate(282deg);}\n  &.towards-283-deg {@include wind-rotate(283deg);}\n  &.towards-284-deg {@include wind-rotate(284deg);}\n  &.towards-285-deg {@include wind-rotate(285deg);}\n  &.towards-286-deg {@include wind-rotate(286deg);}\n  &.towards-287-deg {@include wind-rotate(287deg);}\n  &.towards-288-deg {@include wind-rotate(288deg);}\n  &.towards-289-deg {@include wind-rotate(289deg);}\n  &.towards-290-deg {@include wind-rotate(290deg);}\n  &.towards-291-deg {@include wind-rotate(291deg);}\n  &.towards-292-deg {@include wind-rotate(292deg);}\n  &.towards-293-deg {@include wind-rotate(293deg);}\n  &.towards-294-deg {@include wind-rotate(294deg);}\n  &.towards-295-deg {@include wind-rotate(295deg);}\n  &.towards-296-deg {@include wind-rotate(296deg);}\n  &.towards-297-deg {@include wind-rotate(297deg);}\n  &.towards-298-deg {@include wind-rotate(298deg);}\n  &.towards-299-deg {@include wind-rotate(299deg);}\n  &.towards-300-deg {@include wind-rotate(300deg);}\n  &.towards-301-deg {@include wind-rotate(301deg);}\n  &.towards-302-deg {@include wind-rotate(302deg);}\n  &.towards-303-deg {@include wind-rotate(303deg);}\n  &.towards-304-deg {@include wind-rotate(304deg);}\n  &.towards-305-deg {@include wind-rotate(305deg);}\n  &.towards-306-deg {@include wind-rotate(306deg);}\n  &.towards-307-deg {@include wind-rotate(307deg);}\n  &.towards-308-deg {@include wind-rotate(308deg);}\n  &.towards-309-deg {@include wind-rotate(309deg);}\n  &.towards-310-deg {@include wind-rotate(310deg);}\n  &.towards-311-deg {@include wind-rotate(311deg);}\n  &.towards-312-deg {@include wind-rotate(312deg);}\n  &.towards-313-deg {@include wind-rotate(313deg);}\n  &.towards-314-deg {@include wind-rotate(314deg);}\n  &.towards-315-deg {@include wind-rotate(315deg);}\n  &.towards-316-deg {@include wind-rotate(316deg);}\n  &.towards-317-deg {@include wind-rotate(317deg);}\n  &.towards-318-deg {@include wind-rotate(318deg);}\n  &.towards-319-deg {@include wind-rotate(319deg);}\n  &.towards-320-deg {@include wind-rotate(320deg);}\n  &.towards-321-deg {@include wind-rotate(321deg);}\n  &.towards-322-deg {@include wind-rotate(322deg);}\n  &.towards-323-deg {@include wind-rotate(323deg);}\n  &.towards-324-deg {@include wind-rotate(324deg);}\n  &.towards-325-deg {@include wind-rotate(325deg);}\n  &.towards-326-deg {@include wind-rotate(326deg);}\n  &.towards-327-deg {@include wind-rotate(327deg);}\n  &.towards-328-deg {@include wind-rotate(328deg);}\n  &.towards-329-deg {@include wind-rotate(329deg);}\n  &.towards-330-deg {@include wind-rotate(330deg);}\n  &.towards-331-deg {@include wind-rotate(331deg);}\n  &.towards-332-deg {@include wind-rotate(332deg);}\n  &.towards-333-deg {@include wind-rotate(333deg);}\n  &.towards-334-deg {@include wind-rotate(334deg);}\n  &.towards-335-deg {@include wind-rotate(335deg);}\n  &.towards-336-deg {@include wind-rotate(336deg);}\n  &.towards-337-deg {@include wind-rotate(337deg);}\n  &.towards-338-deg {@include wind-rotate(338deg);}\n  &.towards-339-deg {@include wind-rotate(339deg);}\n  &.towards-340-deg {@include wind-rotate(340deg);}\n  &.towards-341-deg {@include wind-rotate(341deg);}\n  &.towards-342-deg {@include wind-rotate(342deg);}\n  &.towards-343-deg {@include wind-rotate(343deg);}\n  &.towards-344-deg {@include wind-rotate(344deg);}\n  &.towards-345-deg {@include wind-rotate(345deg);}\n  &.towards-346-deg {@include wind-rotate(346deg);}\n  &.towards-347-deg {@include wind-rotate(347deg);}\n  &.towards-348-deg {@include wind-rotate(348deg);}\n  &.towards-349-deg {@include wind-rotate(349deg);}\n  &.towards-350-deg {@include wind-rotate(350deg);}\n  &.towards-351-deg {@include wind-rotate(351deg);}\n  &.towards-352-deg {@include wind-rotate(352deg);}\n  &.towards-353-deg {@include wind-rotate(353deg);}\n  &.towards-354-deg {@include wind-rotate(354deg);}\n  &.towards-355-deg {@include wind-rotate(355deg);}\n  &.towards-356-deg {@include wind-rotate(356deg);}\n  &.towards-357-deg {@include wind-rotate(357deg);}\n  &.towards-358-deg {@include wind-rotate(358deg);}\n  &.towards-359-deg {@include wind-rotate(359deg);}\n  &.towards-360-deg {@include wind-rotate(0deg);}\n  &.from-0-deg {@include wind-rotate(180deg);}\n  &.from-1-deg {@include wind-rotate(181deg);}\n  &.from-2-deg {@include wind-rotate(182deg);}\n  &.from-3-deg {@include wind-rotate(183deg);}\n  &.from-4-deg {@include wind-rotate(184deg);}\n  &.from-5-deg {@include wind-rotate(185deg);}\n  &.from-6-deg {@include wind-rotate(186deg);}\n  &.from-7-deg {@include wind-rotate(187deg);}\n  &.from-8-deg {@include wind-rotate(188deg);}\n  &.from-9-deg {@include wind-rotate(189deg);}\n  &.from-10-deg {@include wind-rotate(190deg);}\n  &.from-11-deg {@include wind-rotate(191deg);}\n  &.from-12-deg {@include wind-rotate(192deg);}\n  &.from-13-deg {@include wind-rotate(193deg);}\n  &.from-14-deg {@include wind-rotate(194deg);}\n  &.from-15-deg {@include wind-rotate(195deg);}\n  &.from-16-deg {@include wind-rotate(196deg);}\n  &.from-17-deg {@include wind-rotate(197deg);}\n  &.from-18-deg {@include wind-rotate(198deg);}\n  &.from-19-deg {@include wind-rotate(199deg);}\n  &.from-20-deg {@include wind-rotate(200deg);}\n  &.from-21-deg {@include wind-rotate(201deg);}\n  &.from-22-deg {@include wind-rotate(202deg);}\n  &.from-23-deg {@include wind-rotate(203deg);}\n  &.from-24-deg {@include wind-rotate(204deg);}\n  &.from-25-deg {@include wind-rotate(205deg);}\n  &.from-26-deg {@include wind-rotate(206deg);}\n  &.from-27-deg {@include wind-rotate(207deg);}\n  &.from-28-deg {@include wind-rotate(208deg);}\n  &.from-29-deg {@include wind-rotate(209deg);}\n  &.from-30-deg {@include wind-rotate(210deg);}\n  &.from-31-deg {@include wind-rotate(211deg);}\n  &.from-32-deg {@include wind-rotate(212deg);}\n  &.from-33-deg {@include wind-rotate(213deg);}\n  &.from-34-deg {@include wind-rotate(214deg);}\n  &.from-35-deg {@include wind-rotate(215deg);}\n  &.from-36-deg {@include wind-rotate(216deg);}\n  &.from-37-deg {@include wind-rotate(217deg);}\n  &.from-38-deg {@include wind-rotate(218deg);}\n  &.from-39-deg {@include wind-rotate(219deg);}\n  &.from-40-deg {@include wind-rotate(220deg);}\n  &.from-41-deg {@include wind-rotate(221deg);}\n  &.from-42-deg {@include wind-rotate(222deg);}\n  &.from-43-deg {@include wind-rotate(223deg);}\n  &.from-44-deg {@include wind-rotate(224deg);}\n  &.from-45-deg {@include wind-rotate(225deg);}\n  &.from-46-deg {@include wind-rotate(226deg);}\n  &.from-47-deg {@include wind-rotate(227deg);}\n  &.from-48-deg {@include wind-rotate(228deg);}\n  &.from-49-deg {@include wind-rotate(229deg);}\n  &.from-50-deg {@include wind-rotate(230deg);}\n  &.from-51-deg {@include wind-rotate(231deg);}\n  &.from-52-deg {@include wind-rotate(232deg);}\n  &.from-53-deg {@include wind-rotate(233deg);}\n  &.from-54-deg {@include wind-rotate(234deg);}\n  &.from-55-deg {@include wind-rotate(235deg);}\n  &.from-56-deg {@include wind-rotate(236deg);}\n  &.from-57-deg {@include wind-rotate(237deg);}\n  &.from-58-deg {@include wind-rotate(238deg);}\n  &.from-59-deg {@include wind-rotate(239deg);}\n  &.from-60-deg {@include wind-rotate(240deg);}\n  &.from-61-deg {@include wind-rotate(241deg);}\n  &.from-62-deg {@include wind-rotate(242deg);}\n  &.from-63-deg {@include wind-rotate(243deg);}\n  &.from-64-deg {@include wind-rotate(244deg);}\n  &.from-65-deg {@include wind-rotate(245deg);}\n  &.from-66-deg {@include wind-rotate(246deg);}\n  &.from-67-deg {@include wind-rotate(247deg);}\n  &.from-68-deg {@include wind-rotate(248deg);}\n  &.from-69-deg {@include wind-rotate(249deg);}\n  &.from-70-deg {@include wind-rotate(250deg);}\n  &.from-71-deg {@include wind-rotate(251deg);}\n  &.from-72-deg {@include wind-rotate(252deg);}\n  &.from-73-deg {@include wind-rotate(253deg);}\n  &.from-74-deg {@include wind-rotate(254deg);}\n  &.from-75-deg {@include wind-rotate(255deg);}\n  &.from-76-deg {@include wind-rotate(256deg);}\n  &.from-77-deg {@include wind-rotate(257deg);}\n  &.from-78-deg {@include wind-rotate(258deg);}\n  &.from-79-deg {@include wind-rotate(259deg);}\n  &.from-80-deg {@include wind-rotate(260deg);}\n  &.from-81-deg {@include wind-rotate(261deg);}\n  &.from-82-deg {@include wind-rotate(262deg);}\n  &.from-83-deg {@include wind-rotate(263deg);}\n  &.from-84-deg {@include wind-rotate(264deg);}\n  &.from-85-deg {@include wind-rotate(265deg);}\n  &.from-86-deg {@include wind-rotate(266deg);}\n  &.from-87-deg {@include wind-rotate(267deg);}\n  &.from-88-deg {@include wind-rotate(268deg);}\n  &.from-89-deg {@include wind-rotate(269deg);}\n  &.from-90-deg {@include wind-rotate(270deg);}\n  &.from-91-deg {@include wind-rotate(271deg);}\n  &.from-92-deg {@include wind-rotate(272deg);}\n  &.from-93-deg {@include wind-rotate(273deg);}\n  &.from-94-deg {@include wind-rotate(274deg);}\n  &.from-95-deg {@include wind-rotate(275deg);}\n  &.from-96-deg {@include wind-rotate(276deg);}\n  &.from-97-deg {@include wind-rotate(277deg);}\n  &.from-98-deg {@include wind-rotate(278deg);}\n  &.from-99-deg {@include wind-rotate(279deg);}\n  &.from-100-deg {@include wind-rotate(280deg);}\n  &.from-101-deg {@include wind-rotate(281deg);}\n  &.from-102-deg {@include wind-rotate(282deg);}\n  &.from-103-deg {@include wind-rotate(283deg);}\n  &.from-104-deg {@include wind-rotate(284deg);}\n  &.from-105-deg {@include wind-rotate(285deg);}\n  &.from-106-deg {@include wind-rotate(286deg);}\n  &.from-107-deg {@include wind-rotate(287deg);}\n  &.from-108-deg {@include wind-rotate(288deg);}\n  &.from-109-deg {@include wind-rotate(289deg);}\n  &.from-110-deg {@include wind-rotate(290deg);}\n  &.from-111-deg {@include wind-rotate(291deg);}\n  &.from-112-deg {@include wind-rotate(292deg);}\n  &.from-113-deg {@include wind-rotate(293deg);}\n  &.from-114-deg {@include wind-rotate(294deg);}\n  &.from-115-deg {@include wind-rotate(295deg);}\n  &.from-116-deg {@include wind-rotate(296deg);}\n  &.from-117-deg {@include wind-rotate(297deg);}\n  &.from-118-deg {@include wind-rotate(298deg);}\n  &.from-119-deg {@include wind-rotate(299deg);}\n  &.from-120-deg {@include wind-rotate(300deg);}\n  &.from-121-deg {@include wind-rotate(301deg);}\n  &.from-122-deg {@include wind-rotate(302deg);}\n  &.from-123-deg {@include wind-rotate(303deg);}\n  &.from-124-deg {@include wind-rotate(304deg);}\n  &.from-125-deg {@include wind-rotate(305deg);}\n  &.from-126-deg {@include wind-rotate(306deg);}\n  &.from-127-deg {@include wind-rotate(307deg);}\n  &.from-128-deg {@include wind-rotate(308deg);}\n  &.from-129-deg {@include wind-rotate(309deg);}\n  &.from-130-deg {@include wind-rotate(310deg);}\n  &.from-131-deg {@include wind-rotate(311deg);}\n  &.from-132-deg {@include wind-rotate(312deg);}\n  &.from-133-deg {@include wind-rotate(313deg);}\n  &.from-134-deg {@include wind-rotate(314deg);}\n  &.from-135-deg {@include wind-rotate(315deg);}\n  &.from-136-deg {@include wind-rotate(316deg);}\n  &.from-137-deg {@include wind-rotate(317deg);}\n  &.from-138-deg {@include wind-rotate(318deg);}\n  &.from-139-deg {@include wind-rotate(319deg);}\n  &.from-140-deg {@include wind-rotate(320deg);}\n  &.from-141-deg {@include wind-rotate(321deg);}\n  &.from-142-deg {@include wind-rotate(322deg);}\n  &.from-143-deg {@include wind-rotate(323deg);}\n  &.from-144-deg {@include wind-rotate(324deg);}\n  &.from-145-deg {@include wind-rotate(325deg);}\n  &.from-146-deg {@include wind-rotate(326deg);}\n  &.from-147-deg {@include wind-rotate(327deg);}\n  &.from-148-deg {@include wind-rotate(328deg);}\n  &.from-149-deg {@include wind-rotate(329deg);}\n  &.from-150-deg {@include wind-rotate(330deg);}\n  &.from-151-deg {@include wind-rotate(331deg);}\n  &.from-152-deg {@include wind-rotate(332deg);}\n  &.from-153-deg {@include wind-rotate(333deg);}\n  &.from-154-deg {@include wind-rotate(334deg);}\n  &.from-155-deg {@include wind-rotate(335deg);}\n  &.from-156-deg {@include wind-rotate(336deg);}\n  &.from-157-deg {@include wind-rotate(337deg);}\n  &.from-158-deg {@include wind-rotate(338deg);}\n  &.from-159-deg {@include wind-rotate(339deg);}\n  &.from-160-deg {@include wind-rotate(340deg);}\n  &.from-161-deg {@include wind-rotate(341deg);}\n  &.from-162-deg {@include wind-rotate(342deg);}\n  &.from-163-deg {@include wind-rotate(343deg);}\n  &.from-164-deg {@include wind-rotate(344deg);}\n  &.from-165-deg {@include wind-rotate(345deg);}\n  &.from-166-deg {@include wind-rotate(346deg);}\n  &.from-167-deg {@include wind-rotate(347deg);}\n  &.from-168-deg {@include wind-rotate(348deg);}\n  &.from-169-deg {@include wind-rotate(349deg);}\n  &.from-170-deg {@include wind-rotate(350deg);}\n  &.from-171-deg {@include wind-rotate(351deg);}\n  &.from-172-deg {@include wind-rotate(352deg);}\n  &.from-173-deg {@include wind-rotate(353deg);}\n  &.from-174-deg {@include wind-rotate(354deg);}\n  &.from-175-deg {@include wind-rotate(355deg);}\n  &.from-176-deg {@include wind-rotate(356deg);}\n  &.from-177-deg {@include wind-rotate(357deg);}\n  &.from-178-deg {@include wind-rotate(358deg);}\n  &.from-179-deg {@include wind-rotate(359deg);}\n  &.from-180-deg {@include wind-rotate(0deg);}\n  &.from-181-deg {@include wind-rotate(1deg);}\n  &.from-182-deg {@include wind-rotate(2deg);}\n  &.from-183-deg {@include wind-rotate(3deg);}\n  &.from-184-deg {@include wind-rotate(4deg);}\n  &.from-185-deg {@include wind-rotate(5deg);}\n  &.from-186-deg {@include wind-rotate(6deg);}\n  &.from-187-deg {@include wind-rotate(7deg);}\n  &.from-188-deg {@include wind-rotate(8deg);}\n  &.from-189-deg {@include wind-rotate(9deg);}\n  &.from-190-deg {@include wind-rotate(10deg);}\n  &.from-191-deg {@include wind-rotate(11deg);}\n  &.from-192-deg {@include wind-rotate(12deg);}\n  &.from-193-deg {@include wind-rotate(13deg);}\n  &.from-194-deg {@include wind-rotate(14deg);}\n  &.from-195-deg {@include wind-rotate(15deg);}\n  &.from-196-deg {@include wind-rotate(16deg);}\n  &.from-197-deg {@include wind-rotate(17deg);}\n  &.from-198-deg {@include wind-rotate(18deg);}\n  &.from-199-deg {@include wind-rotate(19deg);}\n  &.from-200-deg {@include wind-rotate(20deg);}\n  &.from-201-deg {@include wind-rotate(21deg);}\n  &.from-202-deg {@include wind-rotate(22deg);}\n  &.from-203-deg {@include wind-rotate(23deg);}\n  &.from-204-deg {@include wind-rotate(24deg);}\n  &.from-205-deg {@include wind-rotate(25deg);}\n  &.from-206-deg {@include wind-rotate(26deg);}\n  &.from-207-deg {@include wind-rotate(27deg);}\n  &.from-208-deg {@include wind-rotate(28deg);}\n  &.from-209-deg {@include wind-rotate(29deg);}\n  &.from-210-deg {@include wind-rotate(30deg);}\n  &.from-211-deg {@include wind-rotate(31deg);}\n  &.from-212-deg {@include wind-rotate(32deg);}\n  &.from-213-deg {@include wind-rotate(33deg);}\n  &.from-214-deg {@include wind-rotate(34deg);}\n  &.from-215-deg {@include wind-rotate(35deg);}\n  &.from-216-deg {@include wind-rotate(36deg);}\n  &.from-217-deg {@include wind-rotate(37deg);}\n  &.from-218-deg {@include wind-rotate(38deg);}\n  &.from-219-deg {@include wind-rotate(39deg);}\n  &.from-220-deg {@include wind-rotate(40deg);}\n  &.from-221-deg {@include wind-rotate(41deg);}\n  &.from-222-deg {@include wind-rotate(42deg);}\n  &.from-223-deg {@include wind-rotate(43deg);}\n  &.from-224-deg {@include wind-rotate(44deg);}\n  &.from-225-deg {@include wind-rotate(45deg);}\n  &.from-226-deg {@include wind-rotate(46deg);}\n  &.from-227-deg {@include wind-rotate(47deg);}\n  &.from-228-deg {@include wind-rotate(48deg);}\n  &.from-229-deg {@include wind-rotate(49deg);}\n  &.from-230-deg {@include wind-rotate(50deg);}\n  &.from-231-deg {@include wind-rotate(51deg);}\n  &.from-232-deg {@include wind-rotate(52deg);}\n  &.from-233-deg {@include wind-rotate(53deg);}\n  &.from-234-deg {@include wind-rotate(54deg);}\n  &.from-235-deg {@include wind-rotate(55deg);}\n  &.from-236-deg {@include wind-rotate(56deg);}\n  &.from-237-deg {@include wind-rotate(57deg);}\n  &.from-238-deg {@include wind-rotate(58deg);}\n  &.from-239-deg {@include wind-rotate(59deg);}\n  &.from-240-deg {@include wind-rotate(60deg);}\n  &.from-241-deg {@include wind-rotate(61deg);}\n  &.from-242-deg {@include wind-rotate(62deg);}\n  &.from-243-deg {@include wind-rotate(63deg);}\n  &.from-244-deg {@include wind-rotate(64deg);}\n  &.from-245-deg {@include wind-rotate(65deg);}\n  &.from-246-deg {@include wind-rotate(66deg);}\n  &.from-247-deg {@include wind-rotate(67deg);}\n  &.from-248-deg {@include wind-rotate(68deg);}\n  &.from-249-deg {@include wind-rotate(69deg);}\n  &.from-250-deg {@include wind-rotate(70deg);}\n  &.from-251-deg {@include wind-rotate(71deg);}\n  &.from-252-deg {@include wind-rotate(72deg);}\n  &.from-253-deg {@include wind-rotate(73deg);}\n  &.from-254-deg {@include wind-rotate(74deg);}\n  &.from-255-deg {@include wind-rotate(75deg);}\n  &.from-256-deg {@include wind-rotate(76deg);}\n  &.from-257-deg {@include wind-rotate(77deg);}\n  &.from-258-deg {@include wind-rotate(78deg);}\n  &.from-259-deg {@include wind-rotate(79deg);}\n  &.from-260-deg {@include wind-rotate(80deg);}\n  &.from-261-deg {@include wind-rotate(81deg);}\n  &.from-262-deg {@include wind-rotate(82deg);}\n  &.from-263-deg {@include wind-rotate(83deg);}\n  &.from-264-deg {@include wind-rotate(84deg);}\n  &.from-265-deg {@include wind-rotate(85deg);}\n  &.from-266-deg {@include wind-rotate(86deg);}\n  &.from-267-deg {@include wind-rotate(87deg);}\n  &.from-268-deg {@include wind-rotate(88deg);}\n  &.from-269-deg {@include wind-rotate(89deg);}\n  &.from-270-deg {@include wind-rotate(90deg);}\n  &.from-271-deg {@include wind-rotate(91deg);}\n  &.from-272-deg {@include wind-rotate(92deg);}\n  &.from-273-deg {@include wind-rotate(93deg);}\n  &.from-274-deg {@include wind-rotate(94deg);}\n  &.from-275-deg {@include wind-rotate(95deg);}\n  &.from-276-deg {@include wind-rotate(96deg);}\n  &.from-277-deg {@include wind-rotate(97deg);}\n  &.from-278-deg {@include wind-rotate(98deg);}\n  &.from-279-deg {@include wind-rotate(99deg);}\n  &.from-280-deg {@include wind-rotate(100deg);}\n  &.from-281-deg {@include wind-rotate(101deg);}\n  &.from-282-deg {@include wind-rotate(102deg);}\n  &.from-283-deg {@include wind-rotate(103deg);}\n  &.from-284-deg {@include wind-rotate(104deg);}\n  &.from-285-deg {@include wind-rotate(105deg);}\n  &.from-286-deg {@include wind-rotate(106deg);}\n  &.from-287-deg {@include wind-rotate(107deg);}\n  &.from-288-deg {@include wind-rotate(108deg);}\n  &.from-289-deg {@include wind-rotate(109deg);}\n  &.from-290-deg {@include wind-rotate(110deg);}\n  &.from-291-deg {@include wind-rotate(111deg);}\n  &.from-292-deg {@include wind-rotate(112deg);}\n  &.from-293-deg {@include wind-rotate(113deg);}\n  &.from-294-deg {@include wind-rotate(114deg);}\n  &.from-295-deg {@include wind-rotate(115deg);}\n  &.from-296-deg {@include wind-rotate(116deg);}\n  &.from-297-deg {@include wind-rotate(117deg);}\n  &.from-298-deg {@include wind-rotate(118deg);}\n  &.from-299-deg {@include wind-rotate(119deg);}\n  &.from-300-deg {@include wind-rotate(120deg);}\n  &.from-301-deg {@include wind-rotate(121deg);}\n  &.from-302-deg {@include wind-rotate(122deg);}\n  &.from-303-deg {@include wind-rotate(123deg);}\n  &.from-304-deg {@include wind-rotate(124deg);}\n  &.from-305-deg {@include wind-rotate(125deg);}\n  &.from-306-deg {@include wind-rotate(126deg);}\n  &.from-307-deg {@include wind-rotate(127deg);}\n  &.from-308-deg {@include wind-rotate(128deg);}\n  &.from-309-deg {@include wind-rotate(129deg);}\n  &.from-310-deg {@include wind-rotate(130deg);}\n  &.from-311-deg {@include wind-rotate(131deg);}\n  &.from-312-deg {@include wind-rotate(132deg);}\n  &.from-313-deg {@include wind-rotate(133deg);}\n  &.from-314-deg {@include wind-rotate(134deg);}\n  &.from-315-deg {@include wind-rotate(135deg);}\n  &.from-316-deg {@include wind-rotate(136deg);}\n  &.from-317-deg {@include wind-rotate(137deg);}\n  &.from-318-deg {@include wind-rotate(138deg);}\n  &.from-319-deg {@include wind-rotate(139deg);}\n  &.from-320-deg {@include wind-rotate(140deg);}\n  &.from-321-deg {@include wind-rotate(141deg);}\n  &.from-322-deg {@include wind-rotate(142deg);}\n  &.from-323-deg {@include wind-rotate(143deg);}\n  &.from-324-deg {@include wind-rotate(144deg);}\n  &.from-325-deg {@include wind-rotate(145deg);}\n  &.from-326-deg {@include wind-rotate(146deg);}\n  &.from-327-deg {@include wind-rotate(147deg);}\n  &.from-328-deg {@include wind-rotate(148deg);}\n  &.from-329-deg {@include wind-rotate(149deg);}\n  &.from-330-deg {@include wind-rotate(150deg);}\n  &.from-331-deg {@include wind-rotate(151deg);}\n  &.from-332-deg {@include wind-rotate(152deg);}\n  &.from-333-deg {@include wind-rotate(153deg);}\n  &.from-334-deg {@include wind-rotate(154deg);}\n  &.from-335-deg {@include wind-rotate(155deg);}\n  &.from-336-deg {@include wind-rotate(156deg);}\n  &.from-337-deg {@include wind-rotate(157deg);}\n  &.from-338-deg {@include wind-rotate(158deg);}\n  &.from-339-deg {@include wind-rotate(159deg);}\n  &.from-340-deg {@include wind-rotate(160deg);}\n  &.from-341-deg {@include wind-rotate(161deg);}\n  &.from-342-deg {@include wind-rotate(162deg);}\n  &.from-343-deg {@include wind-rotate(163deg);}\n  &.from-344-deg {@include wind-rotate(164deg);}\n  &.from-345-deg {@include wind-rotate(165deg);}\n  &.from-346-deg {@include wind-rotate(166deg);}\n  &.from-347-deg {@include wind-rotate(167deg);}\n  &.from-348-deg {@include wind-rotate(168deg);}\n  &.from-349-deg {@include wind-rotate(169deg);}\n  &.from-350-deg {@include wind-rotate(170deg);}\n  &.from-351-deg {@include wind-rotate(171deg);}\n  &.from-352-deg {@include wind-rotate(172deg);}\n  &.from-353-deg {@include wind-rotate(173deg);}\n  &.from-354-deg {@include wind-rotate(174deg);}\n  &.from-355-deg {@include wind-rotate(175deg);}\n  &.from-356-deg {@include wind-rotate(176deg);}\n  &.from-357-deg {@include wind-rotate(177deg);}\n  &.from-358-deg {@include wind-rotate(178deg);}\n  &.from-359-deg {@include wind-rotate(179deg);}\n  &.from-360-deg {@include wind-rotate(180deg);}\n}\n\n.wi-wind-towards-n    {\n  @extend .wi-wind.towards-0-deg;\n}"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-classes/classes-wind.scss",
    "content": "// Wind Variables 2.0\n\n$wind: \"\\f0b1\";\n\n.#{$wi-css-prefix}-wind:before { content: $wind; }\n\n@mixin wind-rotate( $val: 0deg ) {\n  -webkit-transform: rotate($val);\n  -moz-transform: rotate($val);\n  -ms-transform: rotate($val);\n  -o-transform: rotate($val);\n  transform: rotate($val);\n}\n\n@import \"classes-wind-degrees.scss\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-beaufort.scss",
    "content": "$wind-beaufort-0: \"\\f0b7\";\n$wind-beaufort-1: \"\\f0b8\";\n$wind-beaufort-2: \"\\f0b9\";\n$wind-beaufort-3: \"\\f0ba\";\n$wind-beaufort-4: \"\\f0bb\";\n$wind-beaufort-5: \"\\f0bc\";\n$wind-beaufort-6: \"\\f0bd\";\n$wind-beaufort-7: \"\\f0be\";\n$wind-beaufort-8: \"\\f0bf\";\n$wind-beaufort-9: \"\\f0c0\";\n$wind-beaufort-10: \"\\f0c1\";\n$wind-beaufort-11: \"\\f0c2\";\n$wind-beaufort-12: \"\\f0c3\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-day.scss",
    "content": "$day-sunny: \"\\f00d\";\n$day-cloudy: \"\\f002\";\n$day-cloudy-gusts: \"\\f000\";\n$day-cloudy-windy: \"\\f001\";\n$day-fog: \"\\f003\";\n$day-hail: \"\\f004\";\n$day-haze: \"\\f0b6\";\n$day-lightning: \"\\f005\";\n$day-rain: \"\\f008\";\n$day-rain-mix: \"\\f006\";\n$day-rain-wind: \"\\f007\";\n$day-showers: \"\\f009\";\n$day-sleet: \"\\f0b2\";\n$day-sleet-storm: \"\\f068\";\n$day-snow: \"\\f00a\";\n$day-snow-thunderstorm: \"\\f06b\";\n$day-snow-wind: \"\\f065\";\n$day-sprinkle: \"\\f00b\";\n$day-storm-showers: \"\\f00e\";\n$day-sunny-overcast: \"\\f00c\";\n$day-thunderstorm: \"\\f010\";\n$day-windy: \"\\f085\";\n$solar-eclipse: \"\\f06e\";\n$hot: \"\\f072\";\n$day-cloudy-high: \"\\f07d\";\n$day-light-wind: \"\\f0c4\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-direction.scss",
    "content": "$direction-up: \"\\f058\";\n$direction-up-right: \"\\f057\";\n$direction-right: \"\\f04d\";\n$direction-down-right: \"\\f088\";\n$direction-down: \"\\f044\";\n$direction-down-left: \"\\f043\";\n$direction-left: \"\\f048\";\n$direction-up-left: \"\\f087\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-misc.scss",
    "content": "$alien: \"\\f075\";\n$celsius: \"\\f03c\";\n$fahrenheit: \"\\f045\";\n$degrees: \"\\f042\";\n$thermometer: \"\\f055\";\n$thermometer-exterior: \"\\f053\";\n$thermometer-internal: \"\\f054\";\n$cloud-down: \"\\f03d\";\n$cloud-up: \"\\f040\";\n$cloud-refresh: \"\\f03e\";\n$horizon: \"\\f047\";\n$horizon-alt: \"\\f046\";\n$sunrise: \"\\f051\";\n$sunset: \"\\f052\";\n$moonrise: \"\\f0c9\";\n$moonset: \"\\f0ca\";\n$refresh: \"\\f04c\";\n$refresh-alt: \"\\f04b\";\n$umbrella: \"\\f084\";\n$barometer: \"\\f079\";\n$humidity: \"\\f07a\";\n$na: \"\\f07b\";\n$train: \"\\f0cb\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-moon.scss",
    "content": "$moon-new: \"\\f095\";\n$moon-waxing-cresent-1: \"\\f096\";\n$moon-waxing-cresent-2: \"\\f097\";\n$moon-waxing-cresent-3: \"\\f098\";\n$moon-waxing-cresent-4: \"\\f099\";\n$moon-waxing-cresent-5: \"\\f09a\";\n$moon-waxing-cresent-6: \"\\f09b\";\n$moon-first-quarter: \"\\f09c\";\n$moon-waxing-gibbous-1: \"\\f09d\";\n$moon-waxing-gibbous-2: \"\\f09e\";\n$moon-waxing-gibbous-3: \"\\f09f\";\n$moon-waxing-gibbous-4: \"\\f0a0\";\n$moon-waxing-gibbous-5: \"\\f0a1\";\n$moon-waxing-gibbous-6: \"\\f0a2\";\n$moon-full: \"\\f0a3\";\n$moon-waning-gibbous-1: \"\\f0a4\";\n$moon-waning-gibbous-2: \"\\f0a5\";\n$moon-waning-gibbous-3: \"\\f0a6\";\n$moon-waning-gibbous-4: \"\\f0a7\";\n$moon-waning-gibbous-5: \"\\f0a8\";\n$moon-waning-gibbous-6: \"\\f0a9\";\n$moon-third-quarter: \"\\f0aa\";\n$moon-waning-crescent-1: \"\\f0ab\";\n$moon-waning-crescent-2: \"\\f0ac\";\n$moon-waning-crescent-3: \"\\f0ad\";\n$moon-waning-crescent-4: \"\\f0ae\";\n$moon-waning-crescent-5: \"\\f0af\";\n$moon-waning-crescent-6: \"\\f0b0\";\n$moon-alt-new: \"\\f0eb\";\n$moon-alt-waxing-cresent-1: \"\\f0d0\";\n$moon-alt-waxing-cresent-2: \"\\f0d1\";\n$moon-alt-waxing-cresent-3: \"\\f0d2\";\n$moon-alt-waxing-cresent-4: \"\\f0d3\";\n$moon-alt-waxing-cresent-5: \"\\f0d4\";\n$moon-alt-waxing-cresent-6: \"\\f0d5\";\n$moon-alt-first-quarter: \"\\f0d6\";\n$moon-alt-waxing-gibbous-1: \"\\f0d7\";\n$moon-alt-waxing-gibbous-2: \"\\f0d8\";\n$moon-alt-waxing-gibbous-3: \"\\f0d9\";\n$moon-alt-waxing-gibbous-4: \"\\f0da\";\n$moon-alt-waxing-gibbous-5: \"\\f0db\";\n$moon-alt-waxing-gibbous-6: \"\\f0dc\";\n$moon-alt-full: \"\\f0dd\";\n$moon-alt-waning-gibbous-1: \"\\f0de\";\n$moon-alt-waning-gibbous-2: \"\\f0df\";\n$moon-alt-waning-gibbous-3: \"\\f0e0\";\n$moon-alt-waning-gibbous-4: \"\\f0e1\";\n$moon-alt-waning-gibbous-5: \"\\f0e2\";\n$moon-alt-waning-gibbous-6: \"\\f0e3\";\n$moon-alt-third-quarter: \"\\f0e4\";\n$moon-alt-waning-crescent-1: \"\\f0e5\";\n$moon-alt-waning-crescent-2: \"\\f0e6\";\n$moon-alt-waning-crescent-3: \"\\f0e7\";\n$moon-alt-waning-crescent-4: \"\\f0e8\";\n$moon-alt-waning-crescent-5: \"\\f0e9\";\n$moon-alt-waning-crescent-6: \"\\f0ea\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-neutral.scss",
    "content": "$cloud: \"\\f041\";\n$cloudy: \"\\f013\";\n$cloudy-gusts: \"\\f011\";\n$cloudy-windy: \"\\f012\";\n$fog: \"\\f014\";\n$hail: \"\\f015\";\n$rain: \"\\f019\";\n$rain-mix: \"\\f017\";\n$rain-wind: \"\\f018\";\n$showers: \"\\f01a\";\n$sleet: \"\\f0b5\";\n$snow: \"\\f01b\";\n$sprinkle: \"\\f01c\";\n$storm-showers: \"\\f01d\";\n$thunderstorm: \"\\f01e\";\n$snow-wind: \"\\f064\";\n$snow: \"\\f01b\";\n$smog: \"\\f074\";\n$smoke: \"\\f062\";\n$lightning: \"\\f016\";\n$raindrops: \"\\f04e\";\n$raindrop: \"\\f078\";\n$dust: \"\\f063\";\n$snowflake-cold: \"\\f076\";\n$windy: \"\\f021\";\n$strong-wind: \"\\f050\";\n$sandstorm: \"\\f082\";\n$earthquake: \"\\f0c6\";\n$fire: \"\\f0c7\";\n$flood: \"\\f07c\";\n$meteor: \"\\f071\";\n$tsunami: \"\\f0c5\";\n$volcano: \"\\f0c8\";\n$hurricane: \"\\f073\";\n$tornado: \"\\f056\";\n$small-craft-advisory: \"\\f0cc\";\n$gale-warning: \"\\f0cd\";\n$storm-warning: \"\\f0ce\";\n$hurricane-warning: \"\\f0cf\";\n$wind-direction: \"\\f0b1\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-night.scss",
    "content": "$night-clear: \"\\f02e\";\n$night-alt-cloudy: \"\\f086\";\n$night-alt-cloudy-gusts: \"\\f022\";\n$night-alt-cloudy-windy: \"\\f023\";\n$night-alt-hail: \"\\f024\";\n$night-alt-lightning: \"\\f025\";\n$night-alt-rain: \"\\f028\";\n$night-alt-rain-mix: \"\\f026\";\n$night-alt-rain-wind: \"\\f027\";\n$night-alt-showers: \"\\f029\";\n$night-alt-sleet: \"\\f0b4\";\n$night-alt-sleet-storm: \"\\f06a\";\n$night-alt-snow: \"\\f02a\";\n$night-alt-snow-thunderstorm: \"\\f06d\";\n$night-alt-snow-wind: \"\\f067\";\n$night-alt-sprinkle: \"\\f02b\";\n$night-alt-storm-showers: \"\\f02c\";\n$night-alt-thunderstorm: \"\\f02d\";\n$night-cloudy: \"\\f031\";\n$night-cloudy-gusts: \"\\f02f\";\n$night-cloudy-windy: \"\\f030\";\n$night-fog: \"\\f04a\";\n$night-hail: \"\\f032\";\n$night-lightning: \"\\f033\";\n$night-partly-cloudy: \"\\f083\";\n$night-rain: \"\\f036\";\n$night-rain-mix: \"\\f034\";\n$night-rain-wind: \"\\f035\";\n$night-showers: \"\\f037\";\n$night-sleet: \"\\f0b3\";\n$night-sleet-storm: \"\\f069\";\n$night-snow: \"\\f038\";\n$night-snow-thunderstorm: \"\\f06c\";\n$night-snow-wind: \"\\f066\";\n$night-sprinkle: \"\\f039\";\n$night-storm-showers: \"\\f03a\";\n$night-thunderstorm: \"\\f03b\";\n$lunar-eclipse: \"\\f070\";\n$stars: \"\\f077\";\n$storm-showers: \"\\f01d\";\n$thunderstorm: \"\\f01e\";\n$night-alt-cloudy-high: \"\\f07e\";\n$night-cloudy-high: \"\\f080\";\n$night-alt-partly-cloudy: \"\\f081\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-time.scss",
    "content": "$time-1: \"\\f08a\";\n$time-2: \"\\f08b\";\n$time-3: \"\\f08c\";\n$time-4: \"\\f08d\";\n$time-5: \"\\f08e\";\n$time-6: \"\\f08f\";\n$time-7: \"\\f090\";\n$time-8: \"\\f091\";\n$time-9: \"\\f092\";\n$time-10: \"\\f093\";\n$time-11: \"\\f094\";\n$time-12: \"\\f089\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/icon-variables/variables-wind-names.scss",
    "content": "$n: \"\\f0b1\";\n$nne: \"\\f0b1\";\n$ne: \"\\f0b1\";\n$ene: \"\\f0b1\";\n$e: \"\\f0b1\";\n$ese: \"\\f0b1\";\n$se: \"\\f0b1\";\n$sse: \"\\f0b1\";\n$s: \"\\f0b1\";\n$ssw: \"\\f0b1\";\n$sw: \"\\f0b1\";\n$wsw: \"\\f0b1\";\n$w: \"\\f0b1\";\n$wnw: \"\\f0b1\";\n$nw: \"\\f0b1\";\n$nnw: \"\\f0b1\";\n$n: \"\\f0b1\";\n$nne: \"\\f0b1\";\n$ne: \"\\f0b1\";\n$ene: \"\\f0b1\";\n$e: \"\\f0b1\";\n$ese: \"\\f0b1\";\n$se: \"\\f0b1\";\n$sse: \"\\f0b1\";\n$s: \"\\f0b1\";\n$ssw: \"\\f0b1\";\n$sw: \"\\f0b1\";\n$wsw: \"\\f0b1\";\n$w: \"\\f0b1\";\n$wnw: \"\\f0b1\";\n$nw: \"\\f0b1\";\n$nnw: \"\\f0b1\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/mappings/wi-forecast-io.scss",
    "content": ".#{$wi-css-prefix}-forecast-io-clear-day:before            { content: $day-sunny     ; }\n.#{$wi-css-prefix}-forecast-io-clear-night:before          { content: $night-clear   ; }\n.#{$wi-css-prefix}-forecast-io-rain:before                 { content: $rain          ; }\n.#{$wi-css-prefix}-forecast-io-snow:before                 { content: $snow          ; }\n.#{$wi-css-prefix}-forecast-io-sleet:before                { content: $sleet         ; }\n.#{$wi-css-prefix}-forecast-io-wind:before                 { content: $strong-wind   ; }\n.#{$wi-css-prefix}-forecast-io-fog:before                  { content: $fog           ; }\n.#{$wi-css-prefix}-forecast-io-cloudy:before               { content: $cloudy        ; }\n.#{$wi-css-prefix}-forecast-io-partly-cloudy-day:before    { content: $day-cloudy    ; }\n.#{$wi-css-prefix}-forecast-io-partly-cloudy-night:before  { content: $night-cloudy  ; }\n.#{$wi-css-prefix}-forecast-io-hail:before                 { content: $hail          ; }\n.#{$wi-css-prefix}-forecast-io-thunderstorm:before         { content: $thunderstorm  ; }\n.#{$wi-css-prefix}-forecast-io-tornado:before              { content: $tornado       ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/mappings/wi-owm.scss",
    "content": "// Neutral\n    .#{$wi-css-prefix}-owm-200:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-201:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-202:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-210:before                            { content: $lightning                   ; }\n    .#{$wi-css-prefix}-owm-211:before                            { content: $lightning                   ; }\n    .#{$wi-css-prefix}-owm-212:before                            { content: $lightning                   ; }\n    .#{$wi-css-prefix}-owm-221:before                            { content: $lightning                   ; }\n    .#{$wi-css-prefix}-owm-230:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-231:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-232:before                            { content: $thunderstorm                ; }\n    .#{$wi-css-prefix}-owm-300:before                            { content: $sprinkle                    ; }\n    .#{$wi-css-prefix}-owm-301:before                            { content: $sprinkle                    ; }\n    .#{$wi-css-prefix}-owm-302:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-310:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-311:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-312:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-313:before                            { content: $showers                     ; }\n    .#{$wi-css-prefix}-owm-314:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-321:before                            { content: $sprinkle                    ; }\n    .#{$wi-css-prefix}-owm-500:before                            { content: $sprinkle                    ; }\n    .#{$wi-css-prefix}-owm-501:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-502:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-503:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-504:before                            { content: $rain                        ; }\n    .#{$wi-css-prefix}-owm-511:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-520:before                            { content: $showers                     ; }\n    .#{$wi-css-prefix}-owm-521:before                            { content: $showers                     ; }\n    .#{$wi-css-prefix}-owm-522:before                            { content: $showers                     ; }\n    .#{$wi-css-prefix}-owm-531:before                            { content: $storm-showers               ; }\n    .#{$wi-css-prefix}-owm-600:before                            { content: $snow                        ; }\n    .#{$wi-css-prefix}-owm-601:before                            { content: $snow                        ; }\n    .#{$wi-css-prefix}-owm-602:before                            { content: $sleet                       ; }\n    .#{$wi-css-prefix}-owm-611:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-612:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-615:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-616:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-620:before                            { content: $rain-mix                    ; }\n    .#{$wi-css-prefix}-owm-621:before                            { content: $snow                        ; }\n    .#{$wi-css-prefix}-owm-622:before                            { content: $snow                        ; }\n    .#{$wi-css-prefix}-owm-701:before                            { content: $showers                     ; }\n    .#{$wi-css-prefix}-owm-711:before                            { content: $smoke                       ; }\n    .#{$wi-css-prefix}-owm-721:before                            { content: $day-haze                    ; }\n    .#{$wi-css-prefix}-owm-731:before                            { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-741:before                            { content: $fog                         ; }\n    .#{$wi-css-prefix}-owm-761:before                            { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-762:before                            { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-771:before                            { content: $cloudy-gusts                ; }\n    .#{$wi-css-prefix}-owm-781:before                            { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-800:before                            { content: $day-sunny                   ; }\n    .#{$wi-css-prefix}-owm-801:before                            { content: $cloudy-gusts                ; }\n    .#{$wi-css-prefix}-owm-802:before                            { content: $cloudy-gusts                ; }\n    .#{$wi-css-prefix}-owm-803:before                            { content: $cloudy-gusts                ; }\n    .#{$wi-css-prefix}-owm-803:before                            { content: $cloudy-windy                ; }\n    .#{$wi-css-prefix}-owm-804:before                            { content: $cloudy                      ; }\n    .#{$wi-css-prefix}-owm-900:before                            { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-901:before                            { content: $storm-showers               ; }\n    .#{$wi-css-prefix}-owm-902:before                            { content: $hurricane                   ; }\n    .#{$wi-css-prefix}-owm-903:before                            { content: $snowflake-cold              ; }\n    .#{$wi-css-prefix}-owm-904:before                            { content: $hot                         ; }\n    .#{$wi-css-prefix}-owm-905:before                            { content: $windy                       ; }\n    .#{$wi-css-prefix}-owm-906:before                            { content: $hail                        ; }\n    .#{$wi-css-prefix}-owm-957:before                            { content: $strong-wind                 ; }\n    //Day\n    .#{$wi-css-prefix}-owm-day-200:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-201:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-202:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-210:before                        { content: $day-lightning               ; }\n    .#{$wi-css-prefix}-owm-day-211:before                        { content: $day-lightning               ; }\n    .#{$wi-css-prefix}-owm-day-212:before                        { content: $day-lightning               ; }\n    .#{$wi-css-prefix}-owm-day-221:before                        { content: $day-lightning               ; }\n    .#{$wi-css-prefix}-owm-day-230:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-231:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-232:before                        { content: $day-thunderstorm            ; }\n    .#{$wi-css-prefix}-owm-day-300:before                        { content: $day-sprinkle                ; }\n    .#{$wi-css-prefix}-owm-day-301:before                        { content: $day-sprinkle                ; }\n    .#{$wi-css-prefix}-owm-day-302:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-310:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-311:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-312:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-313:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-314:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-321:before                        { content: $day-sprinkle                ; }\n    .#{$wi-css-prefix}-owm-day-500:before                        { content: $day-sprinkle                ; }\n    .#{$wi-css-prefix}-owm-day-501:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-502:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-503:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-504:before                        { content: $day-rain                    ; }\n    .#{$wi-css-prefix}-owm-day-511:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-520:before                        { content: $day-showers                 ; }\n    .#{$wi-css-prefix}-owm-day-521:before                        { content: $day-showers                 ; }\n    .#{$wi-css-prefix}-owm-day-522:before                        { content: $day-showers                 ; }\n    .#{$wi-css-prefix}-owm-day-531:before                        { content: $day-storm-showers           ; }\n    .#{$wi-css-prefix}-owm-day-600:before                        { content: $day-snow                    ; }\n    .#{$wi-css-prefix}-owm-day-601:before                        { content: $day-sleet                   ; }\n    .#{$wi-css-prefix}-owm-day-602:before                        { content: $day-snow                    ; }\n    .#{$wi-css-prefix}-owm-day-611:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-612:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-615:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-616:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-620:before                        { content: $day-rain-mix                ; }\n    .#{$wi-css-prefix}-owm-day-621:before                        { content: $day-snow                    ; }\n    .#{$wi-css-prefix}-owm-day-622:before                        { content: $day-snow                    ; }\n    .#{$wi-css-prefix}-owm-day-701:before                        { content: $day-showers                 ; }\n    .#{$wi-css-prefix}-owm-day-711:before                        { content: $smoke                       ; }\n    .#{$wi-css-prefix}-owm-day-721:before                        { content: $day-haze                    ; }\n    .#{$wi-css-prefix}-owm-day-731:before                        { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-day-741:before                        { content: $day-fog                     ; }\n    .#{$wi-css-prefix}-owm-day-761:before                        { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-day-762:before                        { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-day-781:before                        { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-day-800:before                        { content: $day-sunny                   ; }\n    .#{$wi-css-prefix}-owm-day-801:before                        { content: $day-cloudy-gusts            ; }\n    .#{$wi-css-prefix}-owm-day-802:before                        { content: $day-cloudy-gusts            ; }\n    .#{$wi-css-prefix}-owm-day-803:before                        { content: $day-cloudy-gusts            ; }\n    .#{$wi-css-prefix}-owm-day-804:before                        { content: $day-sunny-overcast          ; }\n    .#{$wi-css-prefix}-owm-day-900:before                        { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-day-902:before                        { content: $hurricane                   ; }\n    .#{$wi-css-prefix}-owm-day-903:before                        { content: $snowflake-cold              ; }\n    .#{$wi-css-prefix}-owm-day-904:before                        { content: $hot                         ; }\n    .#{$wi-css-prefix}-owm-day-906:before                        { content: $day-hail                    ; }\n    .#{$wi-css-prefix}-owm-day-957:before                        { content: $strong-wind                 ; }\n    //Night\n    .#{$wi-css-prefix}-owm-night-200:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-201:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-202:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-210:before                      { content: $night-alt-lightning         ; }\n    .#{$wi-css-prefix}-owm-night-211:before                      { content: $night-alt-lightning         ; }\n    .#{$wi-css-prefix}-owm-night-212:before                      { content: $night-alt-lightning         ; }\n    .#{$wi-css-prefix}-owm-night-221:before                      { content: $night-alt-lightning         ; }\n    .#{$wi-css-prefix}-owm-night-230:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-231:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-232:before                      { content: $night-alt-thunderstorm      ; }\n    .#{$wi-css-prefix}-owm-night-300:before                      { content: $night-alt-sprinkle          ; }\n    .#{$wi-css-prefix}-owm-night-301:before                      { content: $night-alt-sprinkle          ; }\n    .#{$wi-css-prefix}-owm-night-302:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-310:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-311:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-312:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-313:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-314:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-321:before                      { content: $night-alt-sprinkle          ; }\n    .#{$wi-css-prefix}-owm-night-500:before                      { content: $night-alt-sprinkle          ; }\n    .#{$wi-css-prefix}-owm-night-501:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-502:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-503:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-504:before                      { content: $night-alt-rain              ; }\n    .#{$wi-css-prefix}-owm-night-511:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-520:before                      { content: $night-alt-showers           ; }\n    .#{$wi-css-prefix}-owm-night-521:before                      { content: $night-alt-showers           ; }\n    .#{$wi-css-prefix}-owm-night-522:before                      { content: $night-alt-showers           ; }\n    .#{$wi-css-prefix}-owm-night-531:before                      { content: $night-alt-storm-showers     ; }\n    .#{$wi-css-prefix}-owm-night-600:before                      { content: $night-alt-snow              ; }\n    .#{$wi-css-prefix}-owm-night-601:before                      { content: $night-alt-sleet             ; }\n    .#{$wi-css-prefix}-owm-night-602:before                      { content: $night-alt-snow              ; }\n    .#{$wi-css-prefix}-owm-night-611:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-612:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-615:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-616:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-620:before                      { content: $night-alt-rain-mix          ; }\n    .#{$wi-css-prefix}-owm-night-621:before                      { content: $night-alt-snow              ; }\n    .#{$wi-css-prefix}-owm-night-622:before                      { content: $night-alt-snow              ; }\n    .#{$wi-css-prefix}-owm-night-701:before                      { content: $night-alt-showers           ; }\n    .#{$wi-css-prefix}-owm-night-711:before                      { content: $smoke                       ; }\n    .#{$wi-css-prefix}-owm-night-721:before                      { content: $day-haze                    ; }\n    .#{$wi-css-prefix}-owm-night-731:before                      { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-night-741:before                      { content: $night-fog                   ; }\n    .#{$wi-css-prefix}-owm-night-761:before                      { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-night-762:before                      { content: $dust                        ; }\n    .#{$wi-css-prefix}-owm-night-781:before                      { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-night-800:before                      { content: $night-clear                 ; }\n    .#{$wi-css-prefix}-owm-night-801:before                      { content: $night-alt-cloudy-gusts      ; }\n    .#{$wi-css-prefix}-owm-night-802:before                      { content: $night-alt-cloudy-gusts      ; }\n    .#{$wi-css-prefix}-owm-night-803:before                      { content: $night-alt-cloudy-gusts      ; }\n    .#{$wi-css-prefix}-owm-night-804:before                      { content: $night-alt-cloudy            ; }\n    .#{$wi-css-prefix}-owm-night-900:before                      { content: $tornado                     ; }\n    .#{$wi-css-prefix}-owm-night-902:before                      { content: $hurricane                   ; }\n    .#{$wi-css-prefix}-owm-night-903:before                      { content: $snowflake-cold              ; }\n    .#{$wi-css-prefix}-owm-night-904:before                      { content: $hot                         ; }\n    .#{$wi-css-prefix}-owm-night-906:before                      { content: $night-alt-hail              ; }\n    .#{$wi-css-prefix}-owm-night-957:before                      { content: $strong-wind                 ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/mappings/wi-wmo4680.scss",
    "content": ".#{$wi-css-prefix}-wmo4680-0:before,\n.#{$wi-css-prefix}-wmo4680-00:before       { content: $thermometer           ; }\n.#{$wi-css-prefix}-wmo4680-1:before,\n.#{$wi-css-prefix}-wmo4680-01:before       { content: $cloudy                ; }\n.#{$wi-css-prefix}-wmo4680-2:before,\n.#{$wi-css-prefix}-wmo4680-02:before       { content: $thermometer           ; }\n.#{$wi-css-prefix}-wmo4680-3:before,\n.#{$wi-css-prefix}-wmo4680-03:before       { content: $cloudy                ; }\n.#{$wi-css-prefix}-wmo4680-4:before,\n.#{$wi-css-prefix}-wmo4680-04:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-5:before,\n.#{$wi-css-prefix}-wmo4680-05:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-10:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-11:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-12:before       { content: $lightning             ; }\n.#{$wi-css-prefix}-wmo4680-18:before       { content: $strong-wind           ; }\n.#{$wi-css-prefix}-wmo4680-20:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-21:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-22:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-23:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-24:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-25:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-26:before       { content: $thunderstorm          ; }\n.#{$wi-css-prefix}-wmo4680-27:before       { content: $dust                  ; }\n.#{$wi-css-prefix}-wmo4680-28:before       { content: $dust                  ; }\n.#{$wi-css-prefix}-wmo4680-29:before       { content: $dust                  ; }\n.#{$wi-css-prefix}-wmo4680-30:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-31:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-32:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-33:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-34:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-35:before       { content: $fog                   ; }\n.#{$wi-css-prefix}-wmo4680-40:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-41:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-42:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-43:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-44:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-45:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-46:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-47:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-48:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-50:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-51:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-52:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-53:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-54:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-55:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-56:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-57:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-58:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-60:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-61:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-62:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-63:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-64:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-65:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-66:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-67:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-68:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-70:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-71:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-72:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-73:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-74:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-75:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-76:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-77:before       { content: $snow                  ; }\n.#{$wi-css-prefix}-wmo4680-78:before       { content: $snowflake-cold        ; }\n.#{$wi-css-prefix}-wmo4680-80:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-81:before       { content: $sprinkle              ; }\n.#{$wi-css-prefix}-wmo4680-82:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-83:before       { content: $rain                  ; }\n.#{$wi-css-prefix}-wmo4680-84:before       { content: $storm-showers         ; }\n.#{$wi-css-prefix}-wmo4680-85:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-86:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-87:before       { content: $rain-mix              ; }\n.#{$wi-css-prefix}-wmo4680-89:before       { content: $hail                  ; }\n.#{$wi-css-prefix}-wmo4680-90:before       { content: $lightning             ; }\n.#{$wi-css-prefix}-wmo4680-91:before       { content: $storm-showers         ; }\n.#{$wi-css-prefix}-wmo4680-92:before       { content: $thunderstorm          ; }\n.#{$wi-css-prefix}-wmo4680-93:before       { content: $thunderstorm          ; }\n.#{$wi-css-prefix}-wmo4680-94:before       { content: $lightning             ; }\n.#{$wi-css-prefix}-wmo4680-95:before       { content: $thunderstorm          ; }\n.#{$wi-css-prefix}-wmo4680-96:before       { content: $thunderstorm          ; }\n.#{$wi-css-prefix}-wmo4680-99:before       { content: $tornado               ; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/mappings/wi-yahoo.scss",
    "content": ".#{$wi-css-prefix}-yahoo-0:before { content: $tornado; }\n.#{$wi-css-prefix}-yahoo-1:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-2:before { content: $hurricane; }\n.#{$wi-css-prefix}-yahoo-3:before { content: $thunderstorm; }\n.#{$wi-css-prefix}-yahoo-4:before { content: $thunderstorm; }\n.#{$wi-css-prefix}-yahoo-5:before { content: $rain-mix; }\n.#{$wi-css-prefix}-yahoo-6:before { content: $rain-mix; }\n.#{$wi-css-prefix}-yahoo-7:before { content: $rain-mix; }\n.#{$wi-css-prefix}-yahoo-8:before { content: $hail; }\n.#{$wi-css-prefix}-yahoo-9:before { content: $showers; }\n.#{$wi-css-prefix}-yahoo-10:before { content: $hail; }\n.#{$wi-css-prefix}-yahoo-11:before { content: $showers; }\n.#{$wi-css-prefix}-yahoo-12:before { content: $showers; }\n.#{$wi-css-prefix}-yahoo-13:before { content: $snow; }\n.#{$wi-css-prefix}-yahoo-14:before { content: $day-snow; }\n.#{$wi-css-prefix}-yahoo-15:before { content: $snow-wind; }\n.#{$wi-css-prefix}-yahoo-16:before { content: $snow; }\n.#{$wi-css-prefix}-yahoo-17:before { content: $hail; }\n.#{$wi-css-prefix}-yahoo-18:before { content: $rain-mix; }\n.#{$wi-css-prefix}-yahoo-19:before { content: $dust; }\n.#{$wi-css-prefix}-yahoo-20:before { content: $fog; }\n.#{$wi-css-prefix}-yahoo-21:before { content: $windy; }\n.#{$wi-css-prefix}-yahoo-22:before { content: $smoke; }\n.#{$wi-css-prefix}-yahoo-23:before { content: $strong-wind; }\n.#{$wi-css-prefix}-yahoo-24:before { content: $strong-wind; }\n.#{$wi-css-prefix}-yahoo-25:before { content: $snowflake-cold; }\n.#{$wi-css-prefix}-yahoo-26:before { content: $cloudy; }\n.#{$wi-css-prefix}-yahoo-27:before { content: $night-cloudy; }\n.#{$wi-css-prefix}-yahoo-28:before { content: $day-cloudy; }\n.#{$wi-css-prefix}-yahoo-29:before { content: $night-cloudy; }\n.#{$wi-css-prefix}-yahoo-30:before { content: $day-cloudy; }\n.#{$wi-css-prefix}-yahoo-31:before { content: $night-clear; }\n.#{$wi-css-prefix}-yahoo-32:before { content: $day-sunny; }\n.#{$wi-css-prefix}-yahoo-33:before { content: $night-partly-cloudy; }\n.#{$wi-css-prefix}-yahoo-34:before { content: $day-sunny-overcast; }\n.#{$wi-css-prefix}-yahoo-35:before { content: $rain-mix; }\n.#{$wi-css-prefix}-yahoo-36:before { content: $hot; }\n.#{$wi-css-prefix}-yahoo-37:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-38:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-39:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-40:before { content: $showers; }\n.#{$wi-css-prefix}-yahoo-41:before { content: $snow-wind; }\n.#{$wi-css-prefix}-yahoo-42:before { content: $snow; }\n.#{$wi-css-prefix}-yahoo-43:before { content: $snow-wind; }\n.#{$wi-css-prefix}-yahoo-44:before { content: $day-sunny-overcast; }\n.#{$wi-css-prefix}-yahoo-45:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-46:before { content: $snow; }\n.#{$wi-css-prefix}-yahoo-47:before { content: $day-storm-showers; }\n.#{$wi-css-prefix}-yahoo-3200:before { content: $stars; }"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons-classes.scss",
    "content": "@import \"icon-classes/classes-day.scss\";\n@import \"icon-classes/classes-night.scss\";\n@import \"icon-classes/classes-neutral.scss\";\n@import \"icon-classes/classes-misc.scss\";\n@import \"icon-classes/classes-moon.scss\";\n@import \"icon-classes/classes-moon-aliases.scss\";\n@import \"icon-classes/classes-time.scss\";\n@import \"icon-classes/classes-direction.scss\";\n@import \"icon-classes/classes-beaufort.scss\";\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons-core.scss",
    "content": "// Base Variables\n$wi-path:                        \"../fonts\" !default;\n$wi-version:                     \"2.0\" !default;\n$wi-css-prefix:                  wi !default;\n$wi-font-family:                 weathericons !default;\n\n@font-face {\n    font-family: '#{$wi-font-family}';\n    src: url('#{$wi-path}/#{$wi-font-family}-regular-webfont.eot');\n    src: url('#{$wi-path}/#{$wi-font-family}-regular-webfont.eot?#iefix') format('embedded-opentype'),\n         url('#{$wi-path}/#{$wi-font-family}-regular-webfont.woff2') format('woff2'),\n         url('#{$wi-path}/#{$wi-font-family}-regular-webfont.woff') format('woff'),\n         url('#{$wi-path}/#{$wi-font-family}-regular-webfont.ttf') format('truetype'),\n         url('#{$wi-path}/#{$wi-font-family}-regular-webfont.svg#weather_iconsregular') format('svg');\n    font-weight: normal;\n    font-style: normal;\n}\n\n.#{$wi-css-prefix} {\n  display: inline-block;\n  font-family: '#{$wi-font-family}';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.#{$wi-css-prefix}-fw {\n  width: 1.4em;\n  text-align: center;\n}\n\n@mixin wi-icon-rotate($degrees, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin wi-icon-flip($horiz, $vert, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n.#{$wi-css-prefix}-rotate-90  { @include wi-icon-rotate(90deg, 1);  }\n.#{$wi-css-prefix}-rotate-180 { @include wi-icon-rotate(180deg, 2); }\n.#{$wi-css-prefix}-rotate-270 { @include wi-icon-rotate(270deg, 3); }\n\n.#{$wi-css-prefix}-flip-horizontal { @include wi-icon-flip(-1, 1, 0); }\n.#{$wi-css-prefix}-flip-vertical   { @include wi-icon-flip(1, -1, 2); }\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons-variables.scss",
    "content": "@import 'icon-variables/variables-beaufort.scss';\n@import 'icon-variables/variables-time.scss';\n@import 'icon-variables/variables-moon.scss';\n@import 'icon-variables/variables-direction.scss';\n@import 'icon-variables/variables-day.scss';\n@import 'icon-variables/variables-night.scss';\n@import 'icon-variables/variables-neutral.scss';\n@import 'icon-variables/variables-misc.scss';\n\n"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons-wind.min.scss",
    "content": "@import \"weather-icons-core.scss\";\n@import \"icon-variables/variables-wind-names.scss\";\n@import \"icon-classes/classes-wind.scss\";\n@import \"icon-classes/classes-wind-degrees.scss\";\n@import \"icon-classes/classes-wind-aliases.scss\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons-wind.scss",
    "content": "@import \"weather-icons-core.scss\";\n@import \"icon-variables/variables-wind-names.scss\";\n@import \"icon-classes/classes-wind.scss\";\n@import \"icon-classes/classes-wind-degrees.scss\";\n@import \"icon-classes/classes-wind-aliases.scss\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons.min.scss",
    "content": "/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, SCSS and LESS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n\n@import 'weather-icons-core.scss';\n@import 'weather-icons-variables.scss';\n@import 'weather-icons-classes.scss';\n// Mappings to various APIs\n@import \"mappings/wi-yahoo.scss\";\n@import \"mappings/wi-forecast-io.scss\";\n@import \"mappings/wi-wmo4680.scss\";\n@import \"mappings/wi-owm.scss\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons/weather-icons/sass/weather-icons.scss",
    "content": "/*!\n *  Weather Icons 2.0\n *  Updated August 1, 2015\n *  Weather themed icons for Bootstrap\n *  Author - Erik Flowers - erik@helloerik.com\n *  Email: erik@helloerik.com\n *  Twitter: http://twitter.com/Erik_UX\n *  ------------------------------------------------------------------------------\n *  Maintained at http://erikflowers.github.io/weather-icons\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - Font licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - CSS, LESS and SCSS are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Inspired by and works great as a companion with Font Awesome\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n */\n\n@import 'weather-icons-core.scss';\n@import 'weather-icons-variables.scss';\n@import 'weather-icons-classes.scss';\n// Mappings to various APIs\n@import \"mappings/wi-yahoo.scss\";\n@import \"mappings/wi-forecast-io.scss\";\n@import \"mappings/wi-wmo4680.scss\";\n@import \"mappings/wi-owm.scss\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/icons.scss",
    "content": "/*\nTemplate Name: UBold Dashboard\nAuthor: CoderThemes\nEmail: coderthemes@gmail.com\nFile: Icons\n*/\n\n@import \"icons/font-awesome/scss/font-awesome\";\n@import \"icons/themify-icons/themify-icons\";\n@import \"icons/material-design-iconic-font/material-design-iconic-font\";\n@import \"icons/simple-line-icons/scss/simple-line-icons\";\n@import \"icons/ionicons/scss/ionicons\";\n@import \"icons/weather-icons/sass/weather-icons.min\";\n@import \"icons/typicons/typicons\";\n@import \"icons/dripicons/dripicons\";"
  },
  {
    "path": "src/Pos.WebApplication/wwwroot/theme2-assets/scss/style.scss",
    "content": "/*\nTemplate Name: UBold Dashboard\nAuthor: Coderthemes\nEmail: coderthemes@gmail.com\nFile: Main Css\n*/\n\n@import \"variables\";\n@import \"common\";\n@import \"loader\";\n@import \"helper\";\n@import \"bootstrap-reset\";\n@import \"pagination\";\n@import \"form-components\";\n@import \"tabs-accordions\";\n@import \"alerts\";\n@import \"modals\";\n@import \"carousel\";\n@import \"menu\";\n@import \"animation\";\n@import \"waves\";\n@import \"print\";\n@import \"buttons\";\n@import \"checkbox-radio\";\n@import \"portlets\";\n@import \"progressbars\";\n@import \"tables\";\n@import \"widgets\";\n@import \"form-advanced\";\n@import \"form-wizard\";\n@import \"calendar\";\n@import \"wysiwig\";\n@import \"notification\";\n@import \"bootstrap-range-slider\";\n@import \"sweet-alert\";\n@import \"charts\";\n@import \"countdown\";\n@import \"timeline\";\n@import \"email\";\n@import \"gallery\";\n@import \"maintenance\";\n@import \"maps\";\n@import \"nestable-list\";\n@import \"pricing\";\n@import \"profile\";\n@import \"sitemap\";\n@import \"faq\";\n@import \"search-result\";\n@import \"contact\";\n@import \"opportunities\";\n@import \"products\";\n@import \"account-pages\";\n@import \"treeview\";\n@import \"tour\";\n@import \"taskboard\";\n@import \"responsive\";\n"
  },
  {
    "path": "src/Pos.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.29424.173\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Order.WebApi\", \"Pos.Order.WebApi\\Pos.Order.WebApi.csproj\", \"{E4666D89-11BD-45C7-A206-0956D0822959}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{3761F5BB-0193-400D-8119-82DF1DC58376}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"services\", \"services\", \"{9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Product.WebApi\", \"Pos.Product.WebApi\\Pos.Product.WebApi.csproj\", \"{219C140C-98FF-4C41-A572-32BB179AA600}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Customer.WebApi\", \"Pos.Customer.WebApi\\Pos.Customer.WebApi.csproj\", \"{C207A5E4-B81A-4A4E-B679-89D141906FA7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Report.WebApi\", \"Pos.Report.WebApi\\Pos.Report.WebApi.csproj\", \"{D27B3534-A4A1-457A-8773-3FDC5DE04C2C}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"gateway\", \"gateway\", \"{9DBD7EDE-88CD-4CF8-BFE4-848C612A81A2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Gateway\", \"Pos.Gateway\\Pos.Gateway.csproj\", \"{3B9CF621-A375-4AEF-9873-B03975AD7466}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"presentation\", \"presentation\", \"{916503CE-7FE3-4815-843D-51A9C4562ED0}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.WebApplication\", \"Pos.WebApplication\\Pos.WebApplication.csproj\", \"{E28E1810-899E-48A3-87FA-539702277237}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"order\", \"order\", \"{CDB55524-F464-4AF1-A5F6-B4CFC26C1415}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Order.Domain\", \"Pos.Order.Domain\\Pos.Order.Domain.csproj\", \"{F20B1D17-FFD7-4185-9F57-8A75F4653F7D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Order.Infrastructure\", \"Pos.Order.Infrastructure\\Pos.Order.Infrastructure.csproj\", \"{A03EFC55-7A32-43F3-8CB7-475FA75BAC12}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"product\", \"product\", \"{EDF39043-651E-48DE-B1EC-B6EDB713C134}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"customer\", \"customer\", \"{1CA86363-C96D-48AB-8C58-F837C1FD0AAB}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"report\", \"report\", \"{EF5DAE79-4F6D-4620-BC38-C84DE4AB261A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Customer.Domain\", \"Pos.Customer.Domain\\Pos.Customer.Domain.csproj\", \"{899028B9-199D-469B-9A2A-CA702D85B884}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Customer.Infrastructure\", \"Pos.Customer.Infrastructure\\Pos.Customer.Infrastructure.csproj\", \"{450612BB-269F-405D-9BFC-BD4EE27E8E4A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Product.Infrastructure\", \"Pos.Product.Infrastructure\\Pos.Product.Infrastructure.csproj\", \"{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Product.Domain\", \"Pos.Product.Domain\\Pos.Product.Domain.csproj\", \"{2B6B64BE-E944-4EF6-9756-07F37A8C927C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Report.Domain\", \"Pos.Report.Domain\\Pos.Report.Domain.csproj\", \"{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Report.Infrastructure\", \"Pos.Report.Infrastructure\\Pos.Report.Infrastructure.csproj\", \"{78293DCC-E215-4A89-810A-C440FAEC095B}\"\nEndProject\nProject(\"{E53339B2-1760-4266-BCC7-CA923CBCF16C}\") = \"docker-compose\", \"docker-compose.dcproj\", \"{E11DCA28-A1EC-472F-879A-B0E4FAAB5224}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Pos.Gateway.Securities\", \"Pos.Gateway.Securities\\Pos.Gateway.Securities.csproj\", \"{E2734061-9227-491E-8319-EAE18D0409D1}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"contracts\", \"contracts\", \"{5A5BB817-30FB-4585-B2F4-2AE3D3832335}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Pos.Event.Contracts\", \"Pos.Event.Contracts\\Pos.Event.Contracts.csproj\", \"{E5668530-3FE8-470F-86DF-6D1C1C174AF7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E4666D89-11BD-45C7-A206-0956D0822959}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E4666D89-11BD-45C7-A206-0956D0822959}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E4666D89-11BD-45C7-A206-0956D0822959}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E4666D89-11BD-45C7-A206-0956D0822959}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{219C140C-98FF-4C41-A572-32BB179AA600}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{219C140C-98FF-4C41-A572-32BB179AA600}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{219C140C-98FF-4C41-A572-32BB179AA600}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{219C140C-98FF-4C41-A572-32BB179AA600}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C207A5E4-B81A-4A4E-B679-89D141906FA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C207A5E4-B81A-4A4E-B679-89D141906FA7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C207A5E4-B81A-4A4E-B679-89D141906FA7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C207A5E4-B81A-4A4E-B679-89D141906FA7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D27B3534-A4A1-457A-8773-3FDC5DE04C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D27B3534-A4A1-457A-8773-3FDC5DE04C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D27B3534-A4A1-457A-8773-3FDC5DE04C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D27B3534-A4A1-457A-8773-3FDC5DE04C2C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3B9CF621-A375-4AEF-9873-B03975AD7466}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3B9CF621-A375-4AEF-9873-B03975AD7466}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3B9CF621-A375-4AEF-9873-B03975AD7466}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3B9CF621-A375-4AEF-9873-B03975AD7466}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E28E1810-899E-48A3-87FA-539702277237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E28E1810-899E-48A3-87FA-539702277237}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E28E1810-899E-48A3-87FA-539702277237}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E28E1810-899E-48A3-87FA-539702277237}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F20B1D17-FFD7-4185-9F57-8A75F4653F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F20B1D17-FFD7-4185-9F57-8A75F4653F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F20B1D17-FFD7-4185-9F57-8A75F4653F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F20B1D17-FFD7-4185-9F57-8A75F4653F7D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A03EFC55-7A32-43F3-8CB7-475FA75BAC12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A03EFC55-7A32-43F3-8CB7-475FA75BAC12}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A03EFC55-7A32-43F3-8CB7-475FA75BAC12}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A03EFC55-7A32-43F3-8CB7-475FA75BAC12}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{899028B9-199D-469B-9A2A-CA702D85B884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{899028B9-199D-469B-9A2A-CA702D85B884}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{899028B9-199D-469B-9A2A-CA702D85B884}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{899028B9-199D-469B-9A2A-CA702D85B884}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{450612BB-269F-405D-9BFC-BD4EE27E8E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{450612BB-269F-405D-9BFC-BD4EE27E8E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{450612BB-269F-405D-9BFC-BD4EE27E8E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{450612BB-269F-405D-9BFC-BD4EE27E8E4A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2B6B64BE-E944-4EF6-9756-07F37A8C927C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2B6B64BE-E944-4EF6-9756-07F37A8C927C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2B6B64BE-E944-4EF6-9756-07F37A8C927C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2B6B64BE-E944-4EF6-9756-07F37A8C927C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{78293DCC-E215-4A89-810A-C440FAEC095B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{78293DCC-E215-4A89-810A-C440FAEC095B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{78293DCC-E215-4A89-810A-C440FAEC095B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{78293DCC-E215-4A89-810A-C440FAEC095B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E11DCA28-A1EC-472F-879A-B0E4FAAB5224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E11DCA28-A1EC-472F-879A-B0E4FAAB5224}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E11DCA28-A1EC-472F-879A-B0E4FAAB5224}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E11DCA28-A1EC-472F-879A-B0E4FAAB5224}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E2734061-9227-491E-8319-EAE18D0409D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E2734061-9227-491E-8319-EAE18D0409D1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E2734061-9227-491E-8319-EAE18D0409D1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E2734061-9227-491E-8319-EAE18D0409D1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E5668530-3FE8-470F-86DF-6D1C1C174AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E5668530-3FE8-470F-86DF-6D1C1C174AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E5668530-3FE8-470F-86DF-6D1C1C174AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E5668530-3FE8-470F-86DF-6D1C1C174AF7}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{E4666D89-11BD-45C7-A206-0956D0822959} = {CDB55524-F464-4AF1-A5F6-B4CFC26C1415}\n\t\t{9D90E19B-3E65-44B6-AD66-BE5E77202FB3} = {3761F5BB-0193-400D-8119-82DF1DC58376}\n\t\t{219C140C-98FF-4C41-A572-32BB179AA600} = {EDF39043-651E-48DE-B1EC-B6EDB713C134}\n\t\t{C207A5E4-B81A-4A4E-B679-89D141906FA7} = {1CA86363-C96D-48AB-8C58-F837C1FD0AAB}\n\t\t{D27B3534-A4A1-457A-8773-3FDC5DE04C2C} = {EF5DAE79-4F6D-4620-BC38-C84DE4AB261A}\n\t\t{9DBD7EDE-88CD-4CF8-BFE4-848C612A81A2} = {3761F5BB-0193-400D-8119-82DF1DC58376}\n\t\t{3B9CF621-A375-4AEF-9873-B03975AD7466} = {9DBD7EDE-88CD-4CF8-BFE4-848C612A81A2}\n\t\t{916503CE-7FE3-4815-843D-51A9C4562ED0} = {3761F5BB-0193-400D-8119-82DF1DC58376}\n\t\t{E28E1810-899E-48A3-87FA-539702277237} = {916503CE-7FE3-4815-843D-51A9C4562ED0}\n\t\t{CDB55524-F464-4AF1-A5F6-B4CFC26C1415} = {9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\n\t\t{F20B1D17-FFD7-4185-9F57-8A75F4653F7D} = {CDB55524-F464-4AF1-A5F6-B4CFC26C1415}\n\t\t{A03EFC55-7A32-43F3-8CB7-475FA75BAC12} = {CDB55524-F464-4AF1-A5F6-B4CFC26C1415}\n\t\t{EDF39043-651E-48DE-B1EC-B6EDB713C134} = {9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\n\t\t{1CA86363-C96D-48AB-8C58-F837C1FD0AAB} = {9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\n\t\t{EF5DAE79-4F6D-4620-BC38-C84DE4AB261A} = {9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\n\t\t{899028B9-199D-469B-9A2A-CA702D85B884} = {1CA86363-C96D-48AB-8C58-F837C1FD0AAB}\n\t\t{450612BB-269F-405D-9BFC-BD4EE27E8E4A} = {1CA86363-C96D-48AB-8C58-F837C1FD0AAB}\n\t\t{A3F12B60-A094-4C3E-9C6E-27C7F7BEFE54} = {EDF39043-651E-48DE-B1EC-B6EDB713C134}\n\t\t{2B6B64BE-E944-4EF6-9756-07F37A8C927C} = {EDF39043-651E-48DE-B1EC-B6EDB713C134}\n\t\t{B19DF5E4-C4A8-4574-8C8F-FE64C049A7DB} = {EF5DAE79-4F6D-4620-BC38-C84DE4AB261A}\n\t\t{78293DCC-E215-4A89-810A-C440FAEC095B} = {EF5DAE79-4F6D-4620-BC38-C84DE4AB261A}\n\t\t{E2734061-9227-491E-8319-EAE18D0409D1} = {9DBD7EDE-88CD-4CF8-BFE4-848C612A81A2}\n\t\t{5A5BB817-30FB-4585-B2F4-2AE3D3832335} = {9D90E19B-3E65-44B6-AD66-BE5E77202FB3}\n\t\t{E5668530-3FE8-470F-86DF-6D1C1C174AF7} = {5A5BB817-30FB-4585-B2F4-2AE3D3832335}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {9E56FCC4-F0D3-4214-995C-A6C0266E32BA}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/docker-compose.dcproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" Sdk=\"Microsoft.Docker.Sdk\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectVersion>2.1</ProjectVersion>\n    <DockerTargetOS>Linux</DockerTargetOS>\n    <ProjectGuid>e11dca28-a1ec-472f-879a-b0e4faab5224</ProjectGuid>\n    <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>\n    <DockerServiceUrl>{Scheme}://localhost:{ServicePort}/</DockerServiceUrl>\n    <DockerServiceName>pos.webapplication</DockerServiceName>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Include=\"docker-compose.override.yml\">\n      <DependentUpon>docker-compose.yml</DependentUpon>\n    </None>\n    <None Include=\"docker-compose.yml\" />\n    <None Include=\".dockerignore\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/docker-compose.override.yml",
    "content": "version: '3.4'\n\nservices:\n\n  pos.report.webapi:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development      \n    ports:\n      - \"80\"\n\n  pos.product.webapi:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development\n    ports:\n      - \"80\"\n\n  pos.order.webapi:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development\n    ports:\n      - \"80\"\n\n  pos.customer.webapi:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development            \n    ports:\n      - \"80\"\n  \n\n  pos.gateway:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development\n    ports:\n      - \"80\"\n\n\n  pos.gateway.securities:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development\n    ports:\n      - \"80\"\n\n\n  pos.webapplication:\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Development\n    ports:\n      - \"80\"\n\n"
  },
  {
    "path": "src/docker-compose.yml",
    "content": "version: '3.4'\n\nservices:\n\n  pos.report.webapi:\n    image: ${DOCKER_REGISTRY-}posreportwebapi\n    build:\n      context: .\n      dockerfile: Pos.Report.WebApi/Dockerfile\n\n  pos.product.webapi:\n    image: ${DOCKER_REGISTRY-}posproductwebapi\n    build:\n      context: .\n      dockerfile: Pos.Product.WebApi/Dockerfile\n\n  pos.order.webapi:\n    image: ${DOCKER_REGISTRY-}posorderwebapi\n    build:\n      context: .\n      dockerfile: Pos.Order.WebApi/Dockerfile\n\n  pos.customer.webapi:\n    image: ${DOCKER_REGISTRY-}poscustomerwebapi\n    build:\n      context: .\n      dockerfile: Pos.Customer.WebApi/Dockerfile\n    depends_on:\n      - sql.data\n\n  sql.data:\n    image: microsoft/mssql-server-linux:2017-latest\n    environment:\n      - SA_PASSWORD=Pass@word\n      - ACCEPT_EULA=Y\n    ports:\n      - \"5434:1433\"\n\n  kafkaserver:\n    image: \"spotify/kafka:latest\"\n    ports:\n      - 2181\n      - 9092\n    environment:\n      ADVERTISED_HOST: kafkaserver\n      ADVERTISED_PORT: 9092\n\n  mongodb:\n    image: mongo\n    ports:\n      - 27018:27017\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: root\n      MONGO_INITDB_ROOT_PASSWORD: password\n  \n  mongo-express:\n    image: mongo-express\n    environment:\n        - ME_CONFIG_MONGODB_SERVER=mongodb\n        - ME_CONFIG_MONGODB_PORT=27017\n        - ME_CONFIG_MONGODB_ENABLE_ADMIN=true\n        - ME_CONFIG_MONGODB_AUTH_DATABASE=admin\n        - ME_CONFIG_MONGODB_AUTH_USERNAME=root\n        - ME_CONFIG_MONGODB_ADMINUSERNAME=root\n        - ME_CONFIG_MONGODB_AUTH_PASSWORD=password\n        - ME_CONFIG_MONGODB_ADMINPASSWORD=password\n    depends_on:\n        - mongodb\n    ports:\n      - \"8081\"  \n\n\n\n\n  pos.gateway:\n    image: ${DOCKER_REGISTRY-}posgateway\n    build:\n      context: .\n      dockerfile: Pos.Gateway/Dockerfile\n\n\n  pos.gateway.securities:\n    image: ${DOCKER_REGISTRY-}posgatewaysecurities\n    build:\n      context: .\n      dockerfile: Pos.Gateway.Securities/Dockerfile\n\n\n  pos.webapplication:\n    image: ${DOCKER_REGISTRY-}poswebapplication\n    build:\n      context: .\n      dockerfile: Pos.WebApplication/Dockerfile\n\n"
  }
]